@celestea/studio 2.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (240) hide show
  1. package/LICENSE +21 -0
  2. package/dist/app.d.ts +111 -0
  3. package/dist/app.js +219 -0
  4. package/dist/auth/api-token.d.ts +76 -0
  5. package/dist/auth/api-token.js +172 -0
  6. package/dist/auth/htpasswd.d.ts +22 -0
  7. package/dist/auth/htpasswd.js +61 -0
  8. package/dist/auth/index.d.ts +14 -0
  9. package/dist/auth/index.js +14 -0
  10. package/dist/auth/page.d.ts +19 -0
  11. package/dist/auth/page.js +73 -0
  12. package/dist/auth/rate-limit.d.ts +27 -0
  13. package/dist/auth/rate-limit.js +47 -0
  14. package/dist/auth/token.d.ts +49 -0
  15. package/dist/auth/token.js +112 -0
  16. package/dist/config.d.ts +78 -0
  17. package/dist/config.js +72 -0
  18. package/dist/deployment.d.ts +92 -0
  19. package/dist/deployment.js +154 -0
  20. package/dist/fake-runtime-adapter.d.ts +37 -0
  21. package/dist/fake-runtime-adapter.js +276 -0
  22. package/dist/handlers/auth.d.ts +24 -0
  23. package/dist/handlers/auth.js +155 -0
  24. package/dist/handlers/common.d.ts +76 -0
  25. package/dist/handlers/common.js +127 -0
  26. package/dist/handlers/config-shape.d.ts +76 -0
  27. package/dist/handlers/config-shape.js +227 -0
  28. package/dist/handlers/config.d.ts +26 -0
  29. package/dist/handlers/config.js +161 -0
  30. package/dist/handlers/context-shape.d.ts +33 -0
  31. package/dist/handlers/context-shape.js +59 -0
  32. package/dist/handlers/dialog.d.ts +22 -0
  33. package/dist/handlers/dialog.js +292 -0
  34. package/dist/handlers/exec.d.ts +22 -0
  35. package/dist/handlers/exec.js +131 -0
  36. package/dist/handlers/fs-read.d.ts +63 -0
  37. package/dist/handlers/fs-read.js +159 -0
  38. package/dist/handlers/fs.d.ts +57 -0
  39. package/dist/handlers/fs.js +153 -0
  40. package/dist/handlers/grants-shape.d.ts +45 -0
  41. package/dist/handlers/grants-shape.js +130 -0
  42. package/dist/handlers/grants.d.ts +21 -0
  43. package/dist/handlers/grants.js +267 -0
  44. package/dist/handlers/health.d.ts +37 -0
  45. package/dist/handlers/health.js +139 -0
  46. package/dist/handlers/index.d.ts +40 -0
  47. package/dist/handlers/index.js +85 -0
  48. package/dist/handlers/permissions.d.ts +9 -0
  49. package/dist/handlers/permissions.js +183 -0
  50. package/dist/handlers/plugins.d.ts +18 -0
  51. package/dist/handlers/plugins.js +23 -0
  52. package/dist/handlers/prompts.d.ts +12 -0
  53. package/dist/handlers/prompts.js +120 -0
  54. package/dist/handlers/providers.d.ts +12 -0
  55. package/dist/handlers/providers.js +178 -0
  56. package/dist/handlers/questions.d.ts +23 -0
  57. package/dist/handlers/questions.js +115 -0
  58. package/dist/handlers/session-model.d.ts +38 -0
  59. package/dist/handlers/session-model.js +105 -0
  60. package/dist/handlers/session-move.d.ts +22 -0
  61. package/dist/handlers/session-move.js +188 -0
  62. package/dist/handlers/session-tools.d.ts +19 -0
  63. package/dist/handlers/session-tools.js +75 -0
  64. package/dist/handlers/sessions.d.ts +32 -0
  65. package/dist/handlers/sessions.js +242 -0
  66. package/dist/handlers/usage.d.ts +26 -0
  67. package/dist/handlers/usage.js +77 -0
  68. package/dist/handlers/worker.d.ts +12 -0
  69. package/dist/handlers/worker.js +82 -0
  70. package/dist/handlers/workspaces.d.ts +12 -0
  71. package/dist/handlers/workspaces.js +88 -0
  72. package/dist/harness.test-util.d.ts +101 -0
  73. package/dist/harness.test-util.js +176 -0
  74. package/dist/index.d.ts +33 -0
  75. package/dist/index.js +33 -0
  76. package/dist/main.d.ts +13 -0
  77. package/dist/main.js +35 -0
  78. package/dist/plugins.d.ts +105 -0
  79. package/dist/plugins.js +97 -0
  80. package/dist/question-registry.d.ts +124 -0
  81. package/dist/question-registry.js +212 -0
  82. package/dist/question-rows.d.ts +32 -0
  83. package/dist/question-rows.js +43 -0
  84. package/dist/replay/compare.d.ts +47 -0
  85. package/dist/replay/compare.js +89 -0
  86. package/dist/replay/e2e-replay.d.ts +46 -0
  87. package/dist/replay/e2e-replay.js +91 -0
  88. package/dist/replay/expect-compact.d.ts +31 -0
  89. package/dist/replay/expect-compact.js +92 -0
  90. package/dist/replay/fixtures.d.ts +52 -0
  91. package/dist/replay/fixtures.js +53 -0
  92. package/dist/replay/host.d.ts +32 -0
  93. package/dist/replay/host.js +62 -0
  94. package/dist/replay/index.d.ts +16 -0
  95. package/dist/replay/index.js +16 -0
  96. package/dist/replay/probes.d.ts +55 -0
  97. package/dist/replay/probes.js +225 -0
  98. package/dist/replay/report.d.ts +13 -0
  99. package/dist/replay/report.js +103 -0
  100. package/dist/replay/session-e2e.d.ts +44 -0
  101. package/dist/replay/session-e2e.js +91 -0
  102. package/dist/routes.d.ts +47 -0
  103. package/dist/routes.js +59 -0
  104. package/dist/runtime/attachments-llm.d.ts +13 -0
  105. package/dist/runtime/attachments-llm.js +37 -0
  106. package/dist/runtime/boot-recovery.d.ts +32 -0
  107. package/dist/runtime/boot-recovery.js +71 -0
  108. package/dist/runtime/context-snapshot.d.ts +59 -0
  109. package/dist/runtime/context-snapshot.js +113 -0
  110. package/dist/runtime/engine-grants.d.ts +121 -0
  111. package/dist/runtime/engine-grants.js +338 -0
  112. package/dist/runtime/engine-permissions.d.ts +29 -0
  113. package/dist/runtime/engine-permissions.js +92 -0
  114. package/dist/runtime/engine-plugins.d.ts +189 -0
  115. package/dist/runtime/engine-plugins.js +292 -0
  116. package/dist/runtime/engine-profile.d.ts +28 -0
  117. package/dist/runtime/engine-profile.js +88 -0
  118. package/dist/runtime/engine-session.d.ts +9 -0
  119. package/dist/runtime/engine-session.js +9 -0
  120. package/dist/runtime/fallback-contract.d.ts +32 -0
  121. package/dist/runtime/fallback-contract.js +10 -0
  122. package/dist/runtime/fallback-host.d.ts +134 -0
  123. package/dist/runtime/fallback-host.js +299 -0
  124. package/dist/runtime/host-autowake.d.ts +79 -0
  125. package/dist/runtime/host-autowake.js +86 -0
  126. package/dist/runtime/image-downgrade.d.ts +49 -0
  127. package/dist/runtime/image-downgrade.js +90 -0
  128. package/dist/runtime/inbox-message.d.ts +11 -0
  129. package/dist/runtime/inbox-message.js +20 -0
  130. package/dist/runtime/index.d.ts +17 -0
  131. package/dist/runtime/index.js +17 -0
  132. package/dist/runtime/ledger-view.d.ts +40 -0
  133. package/dist/runtime/ledger-view.js +56 -0
  134. package/dist/runtime/llm-assembly.d.ts +66 -0
  135. package/dist/runtime/llm-assembly.js +114 -0
  136. package/dist/runtime/offline-llm.d.ts +71 -0
  137. package/dist/runtime/offline-llm.js +132 -0
  138. package/dist/runtime/provider-target.d.ts +10 -0
  139. package/dist/runtime/provider-target.js +10 -0
  140. package/dist/runtime/question-host.d.ts +33 -0
  141. package/dist/runtime/question-host.js +41 -0
  142. package/dist/runtime/question-view.d.ts +48 -0
  143. package/dist/runtime/question-view.js +76 -0
  144. package/dist/runtime/real-runtime-adapter.d.ts +95 -0
  145. package/dist/runtime/real-runtime-adapter.js +553 -0
  146. package/dist/runtime/recovery-audit.d.ts +81 -0
  147. package/dist/runtime/recovery-audit.js +95 -0
  148. package/dist/runtime/recovery-view.d.ts +36 -0
  149. package/dist/runtime/recovery-view.js +63 -0
  150. package/dist/runtime/session-compose.d.ts +235 -0
  151. package/dist/runtime/session-compose.js +350 -0
  152. package/dist/runtime/session-grants.d.ts +36 -0
  153. package/dist/runtime/session-grants.js +69 -0
  154. package/dist/runtime/session-lifecycle.d.ts +40 -0
  155. package/dist/runtime/session-lifecycle.js +86 -0
  156. package/dist/runtime/session-publisher.d.ts +40 -0
  157. package/dist/runtime/session-publisher.js +48 -0
  158. package/dist/runtime/session-release.d.ts +53 -0
  159. package/dist/runtime/session-release.js +80 -0
  160. package/dist/runtime/test-util.d.ts +78 -0
  161. package/dist/runtime/test-util.js +162 -0
  162. package/dist/runtime/watchdog-view.d.ts +33 -0
  163. package/dist/runtime/watchdog-view.js +45 -0
  164. package/dist/runtime/worker-bridge.d.ts +76 -0
  165. package/dist/runtime/worker-bridge.js +156 -0
  166. package/dist/runtime/worker-live.d.ts +22 -0
  167. package/dist/runtime/worker-live.js +25 -0
  168. package/dist/runtime/worker-recovery.d.ts +35 -0
  169. package/dist/runtime/worker-recovery.js +64 -0
  170. package/dist/runtime/worker-table.d.ts +58 -0
  171. package/dist/runtime/worker-table.js +70 -0
  172. package/dist/runtime-adapter.d.ts +421 -0
  173. package/dist/runtime-adapter.js +76 -0
  174. package/dist/serial-queue.d.ts +16 -0
  175. package/dist/serial-queue.js +22 -0
  176. package/dist/server.d.ts +44 -0
  177. package/dist/server.js +119 -0
  178. package/dist/settings.d.ts +23 -0
  179. package/dist/settings.js +31 -0
  180. package/dist/sse.d.ts +67 -0
  181. package/dist/sse.js +186 -0
  182. package/dist/static.d.ts +20 -0
  183. package/dist/static.js +120 -0
  184. package/dist/store/builtin-sections.d.ts +52 -0
  185. package/dist/store/builtin-sections.js +118 -0
  186. package/dist/store/celestea-home.d.ts +12 -0
  187. package/dist/store/celestea-home.js +11 -0
  188. package/dist/store/fs-json.d.ts +51 -0
  189. package/dist/store/fs-json.js +119 -0
  190. package/dist/store/grants-audit.d.ts +84 -0
  191. package/dist/store/grants-audit.js +109 -0
  192. package/dist/store/grants-service.d.ts +44 -0
  193. package/dist/store/grants-service.js +41 -0
  194. package/dist/store/grants-tokens.d.ts +62 -0
  195. package/dist/store/grants-tokens.js +105 -0
  196. package/dist/store/grants.d.ts +113 -0
  197. package/dist/store/grants.js +238 -0
  198. package/dist/store/index.d.ts +36 -0
  199. package/dist/store/index.js +36 -0
  200. package/dist/store/mode.d.ts +35 -0
  201. package/dist/store/mode.js +41 -0
  202. package/dist/store/permissions.d.ts +61 -0
  203. package/dist/store/permissions.js +139 -0
  204. package/dist/store/prompts-compose.d.ts +56 -0
  205. package/dist/store/prompts-compose.js +62 -0
  206. package/dist/store/prompts-template.d.ts +26 -0
  207. package/dist/store/prompts-template.js +99 -0
  208. package/dist/store/prompts.d.ts +142 -0
  209. package/dist/store/prompts.js +273 -0
  210. package/dist/store/provider-probe.d.ts +81 -0
  211. package/dist/store/provider-probe.js +154 -0
  212. package/dist/store/providers.d.ts +97 -0
  213. package/dist/store/providers.js +219 -0
  214. package/dist/store/result.d.ts +29 -0
  215. package/dist/store/result.js +30 -0
  216. package/dist/store/session-id.d.ts +119 -0
  217. package/dist/store/session-id.js +220 -0
  218. package/dist/store/session-meta.d.ts +41 -0
  219. package/dist/store/session-meta.js +66 -0
  220. package/dist/store/session-ops.d.ts +109 -0
  221. package/dist/store/session-ops.js +264 -0
  222. package/dist/store/session-tools.d.ts +42 -0
  223. package/dist/store/session-tools.js +69 -0
  224. package/dist/store/sessions.d.ts +162 -0
  225. package/dist/store/sessions.js +307 -0
  226. package/dist/store/validate.d.ts +13 -0
  227. package/dist/store/validate.js +38 -0
  228. package/dist/store/workspaces.d.ts +67 -0
  229. package/dist/store/workspaces.js +228 -0
  230. package/dist/user-questions.d.ts +58 -0
  231. package/dist/user-questions.js +157 -0
  232. package/dist/version.d.ts +14 -0
  233. package/dist/version.js +52 -0
  234. package/package.json +38 -0
  235. package/webdist/assets/index-Bngs7gUm.js +98 -0
  236. package/webdist/assets/index-Bu6ci_rN.css +1 -0
  237. package/webdist/assets/katex-CCbS2qAY.js +257 -0
  238. package/webdist/assets/mhchem-CnUN8HwY.js +1 -0
  239. package/webdist/build-meta.json +7 -0
  240. package/webdist/index.html +261 -0
@@ -0,0 +1,98 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/mhchem-CnUN8HwY.js","assets/katex-CCbS2qAY.js"])))=>i.map(i=>d[i]);
2
+ var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),s=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},c=(n,r,o)=>(o=n==null?{}:e(i(n)),s(r||!n||!n.__esModule||!a.call(n,`default`)?t(o,`default`,{value:n,enumerable:!0}):o,n));(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),t.credentials=e.crossOrigin===`use-credentials`?`include`:e.crossOrigin===`anonymous`?`omit`:`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var l={"common.brand":`Celestea Studio`,"common.language":`语言`,"common.language.zh":`中文`,"common.language.en":`English`,"common.language.hint":`切换界面语言(不重启会话)`,"common.language.changed":`界面语言已切换为 {name}`},u={"api.error.connect":`无法连接服务,请稍后重试`,"api.error.badRequest":`请求内容有误,请检查后重试`,"api.error.forbidden":`没有权限执行该操作`,"api.error.unsupported":`当前版本不支持该操作`,"api.error.conflict":`当前状态暂时无法完成该操作,请稍后重试`,"api.error.tooMany":`操作过于频繁,请稍后重试`,"api.error.server":`服务暂时不可用,请稍后重试`,"api.error.generic":`服务暂时无法完成请求,请稍后重试`},d={"statusline.tooltip":`上下文占用 · 模型 · 思考强度 · 吞吐 · 缓存命中`,"statusline.switched":`已切换`,"statusline.switchFailed":`切换失败:{reason}`,"statusline.switchFailedRetry":`切换失败,请稍后重试`,"statusline.withRestoredSettings":`{text}(已恢复原设置)`,"statusline.withRestoredTier":`{text}(已恢复原档位)`,"statusline.retryLater":`请稍后重试`,"statusline.sessionNotReady":`当前会话尚未就绪,请稍后再试`,"statusline.contextUnsupported":`当前版本不支持查看上下文`,"statusline.statusUnavailable":`状态信息暂不可用`,"statusline.currentModelTitle":`当前模型:{model}(点击快速切换)`,"statusline.currentModelAria":`当前模型 {model}`,"statusline.effortTitle":`思考强度:{effort}(点击快速切换)`,"statusline.effortAria":`思考强度 {effort}`,"statusline.standard":`标准`,"statusline.tpsAria":`吞吐 {text}`,"statusline.steps":`第 {n} 步`,"statusline.stepsNone":`— 步`,"statusline.clickToSwitch":`(点击快速切换)`,"statusline.currentTag":`当前`,"statusline.unknown":`未知`,"statusline.goalBadge":`目标 {text}`,"statusline.goalTitle":`当前目标:{text}`,"statusline.mode.badgeTitle":`工作方式:{mode}模式(点击切换)`,"statusline.mode.title":`切换工作方式`,"statusline.mode.currentNote":`当前:{mode}模式 · 切换在会话下一轮生效`,"statusline.mode.switched":`已切换工作方式 · {note}`,"statusline.perm.badgeTitle":`会话权限档位:{tier}(点击切换)`,"statusline.perm.badgeAria":`会话权限档位 {tier}`,"statusline.perm.title":`会话权限档位`,"statusline.perm.noSession":`当前没有打开的会话,无法切换`,"statusline.perm.rejected":`切换失败:服务拒绝了该档位`,"statusline.perm.notAccepted":`切换失败:服务未接受该档位`,"statusline.perm.unsupported":`当前版本不支持切换会话权限档位`,"statusline.perm.unknownTier":`未知档位`,"statusline.perm.switched":`已切换会话权限档位 · 下一轮生效`,"statusline.picker.currentSuffix":`(当前)`,"statusline.picker.modelName":`模型名称`,"statusline.picker.apply":`应用`,"statusline.picker.enterModel":`请输入模型名称`,"statusline.picker.candidates":`候选模型`,"statusline.picker.fixed":`本会话已固定模型:切换只改本会话,不跟随全局默认`,"statusline.picker.other":`其他`,"statusline.picker.standardClear":`标准(清除)`,"statusline.picker.switchModel":`切换模型`,"statusline.picker.switchEffort":`切换推理档位`,"statusline.picker.configUnavailable":`无法读取当前配置,请稍后重试`,"statusline.picker.busy":`轮次进行中,将在本轮结束后生效`,"statusline.sessionModel.unsupported":`当前版本不支持切换本会话模型`,"statusline.sessionModel.switchedSession":`已切换本会话模型`,"statusline.sessionModel.switchedGlobal":`已切换默认模型`,"statusline.ring.title":`上下文占用 {pct}% · {used}/{window}{click}`,"statusline.ring.unknown":`占用未知`,"statusline.ring.unknownTitle":`上下文占用未知 · 点击查看完整上下文`,"statusline.ring.noneTitle":`上下文占用{click}`,"statusline.ring.clickFull":`(点击查看完整上下文)`,"statusline.cache.none":`缓存 —`,"statusline.cache.noneTitle":`暂无缓存命中数据`,"statusline.cache.label":`缓存 {pct}%`,"statusline.cache.title":`最近一次请求:命中 {read} / 输入 {prompt} tokens`,"statusline.cache.titleCumulative":`(累计 {pct}%,命中 {read} / 输入 {prompt} tokens)`,"statusline.tps.idle":`本轮暂无新采样`,"statusline.tps.inactive":`会话当前未运行`,"statusline.tps.meanTitle":`{why} · 显示最近 {n} 次采样的均值`},f={"settings.general.title":`通用偏好`,"settings.general.note":`界面语言等全局偏好`,"settings.action.save":`保存`,"settings.action.reload":`重新载入`,"settings.suffix.current":`(当前)`,"settings.config.modelName":`模型名称`,"settings.field.model":`模型`,"settings.config.modelNameHint":`请手动填写模型名称`,"settings.config.effortStandard":`标准(清除)`,"settings.config.effort":`推理档位`,"settings.config.effortHint":`空 = 标准档`,"settings.config.effortManual":`请手动填写档位`,"settings.config.apiKeyPlaceholder":`留空则保持当前密钥不变`,"settings.config.apiKeyHint":`不会读取或显示已保存的密钥明文`,"settings.config.contextWindowPlaceholder":`默认 1M(1000000 tokens)`,"settings.field.contextWindow":`上下文窗口`,"settings.config.noLimit":`未限制`,"settings.field.maxOutputTokens":`最大输出 tokens`,"settings.config.notSet":`未设置`,"settings.field.maxSteps":`最大步数`,"settings.config.systemPromptPlaceholder":`系统提示词(留空 = 保持默认)`,"settings.field.systemPrompt":`系统提示词`,"settings.config.systemPromptHint":`发送给模型的指令前缀`,"settings.config.notAValidNumber":`「{name}」不是合法数字`,"settings.config.saving":`保存中…`,"settings.config.saveFailedRetry":`保存失败,请重试`,"settings.config.saved":`已保存`,"settings.config.busySave":`本轮对话仍在进行,请在结束后再保存。`,"settings.config.unsupportedSave":`当前版本不支持在线保存配置,请升级后重试`,"settings.config.saveFailed":`保存失败:{reason}`,"settings.config.unavailable":`配置暂不可用`,"settings.providers.listUnavailable":`提供商列表暂不可用`,"settings.providers.add":`添加提供商`,"settings.tools.empty":`未获取到工具`,"settings.field.name":`名称`,"settings.field.description":`描述`,"settings.tools.unavailable":`工具列表暂不可用`,"settings.prompts.varCurrentModel":`当前模型`,"settings.field.provider":`提供商`,"settings.prompts.varApiUrl":`API 地址`,"settings.prompts.varWorkspaceName":`工作区名`,"settings.prompts.varSessionTitle":`会话标题`,"settings.prompts.varToolList":`工具清单`,"settings.prompts.varCurrentDate":`当前日期`,"settings.scope.global":`全局`,"settings.scope.workspace":`工作区`,"settings.prompts.emptyGlobal":`暂无全局提示词 · 点击「新建提示词」创建`,"settings.prompts.emptyWorkspace":`该工作区暂无提示词 · 点击「新建提示词」创建`,"settings.prompts.scope":`作用域`,"settings.field.status":`状态`,"settings.field.actions":`操作`,"settings.tag.active":`活跃`,"settings.tag.default":`默认`,"settings.action.edit":`编辑`,"settings.action.delete":`删除`,"settings.action.cancel":`取消`,"settings.prompts.setDefault":`设为默认`,"settings.prompts.setDefaultDone":`已设为默认:{name}`,"settings.prompts.setDefaultFailed":`设为默认失败:{reason}`,"settings.prompts.deleteTitle":`删除提示词`,"settings.prompts.confirmDelete":`确认删除提示词「{name}」?`,"settings.prompts.deleted":`已删除:{name}`,"settings.prompts.deleteFailed":`删除失败:{reason}`,"settings.prompts.legend":`「活跃」= 当前会话正在使用的提示词 · 「默认」= 新建会话时的默认选项`,"settings.prompts.editTitle":`编辑提示词:{name}`,"settings.prompts.newPrompt":`新建提示词`,"settings.prompts.variables":`可用变量`,"settings.prompts.promptName":`提示词名称`,"settings.prompts.noSegmentEdit":`暂不支持分段编辑,可直接保存整体提示词`,"settings.prompts.inherit":`继承`,"settings.prompts.inheritedFromBuiltin":`(继承自内置模板)`,"settings.prompts.overridePlaceholder":`覆盖模板文本…`,"settings.prompts.nameRequired":`名称不能为空`,"settings.prompts.segmentNoOverride":`段「{name}」未填覆盖文本:请填写,或勾选「继承」以恢复上层模板`,"settings.common.checkInput":`请检查填写内容`,"settings.prompts.saved":`已保存:{name}`,"settings.prompts.saveFailed":`保存失败:{reason}`,"settings.prompts.unsupported":`当前版本不支持提示词管理`,"settings.permissions.unsandboxedNote":`免沙箱仅在部署侧开启 CELESTEA_GRANTS_UNSANDBOXED 时生效`,"settings.permissions.toolNoWrite":`禁写文件`,"settings.permissions.toolDisabled":`禁用工具 {name}`,"settings.permissions.networkOn":`网络访问`,"settings.permissions.networkOff":`无网络`,"settings.permissions.workspaceOn":`工作区可写`,"settings.permissions.workspaceOff":`工作区只读`,"settings.permissions.toolRootOn":`工具根可写`,"settings.permissions.toolRootOff":`工具根只读`,"settings.permissions.allPathsOn":`全部目录可读写`,"settings.permissions.allPathsOff":`限定在授权目录`,"settings.permissions.noExtraRoots":`无额外可写目录`,"settings.permissions.extraRoots":`额外可写目录 {n} 个`,"settings.permissions.unsandboxedOn":`免沙箱`,"settings.permissions.unsandboxedOff":`沙箱内`,"settings.permissions.noToolDeny":`无工具禁用`,"settings.permissions.maxNote":`运行时封顶:{max}(更高档位会被收窄到它)`,"settings.permissions.riskNetwork":`此档允许网络访问`,"settings.permissions.riskAllPaths":`此档对整台机器可读写,风险自担`,"settings.permissions.rejected":`服务拒绝了该预设`,"settings.permissions.opRejected":`服务拒绝了该操作`,"settings.permissions.savedCustom":`已保存自定义预设`,"settings.permissions.deleted":`已删除「{label}」`,"settings.permissions.saveFailed":`保存失败:{reason}`,"settings.permissions.deleteFailed":`删除失败:{reason}`,"settings.common.retryLater":`请稍后重试`,"settings.permissions.builtin":`内置`,"settings.permissions.extraRootsLabel":`额外可写目录`,"settings.permissions.unavailable":`权限预设暂不可用`,"settings.permissions.emptyCustom":`还没有自定义预设;可用上方「新建预设」自组合一档。`,"settings.plugins.hostEmpty":`服务端未提供插件清单`,"settings.plugins.hostBadge":`服务端内置 · 进程内不可热拔插`,"settings.plugins.clientTitle":`客户端插件`,"settings.plugins.clientNote":`开关立即生效,重新打开页面后保持`,"settings.plugins.hostTitle":`服务端插件`,"settings.plugins.hostNote":`只读清单`,"settings.plugins.hostUnavailable":`宿主插件清单暂不可用`,"settings.archive.empty":`暂无归档会话`,"settings.archive.restoreConfirm":`将「{label}」恢复到会话列表?`,"settings.archive.deleteConfirm":`将删除归档会话「{label}」。删除后可在回收目录恢复,确认?`,"settings.action.restore":`恢复`,"settings.action.add":`添加`,"settings.providers.idPlaceholder":`提供商 id(字母/数字/下划线)`,"settings.providers.notePlaceholder":`备注(可选)`,"settings.providers.note":`备注`,"settings.providers.keyPlaceholderExisting":`留空 = 保持现有 Key`,"settings.providers.requestTest":`请求测试`,"settings.providers.apiUrl":`API 请求地址`,"settings.providers.requestFormat":`请求格式`,"settings.providers.fetchModels":`获取模型`,"settings.providers.fetchModelsHint":`从服务商拉取可用模型(会先保存当前填写内容)`,"settings.providers.addModel":`+ 添加模型`,"settings.providers.testing":`测试中…`,"settings.providers.testFailed":`测试失败:{reason}`,"settings.common.checkUrlKey":`请检查请求地址与 Key`,"settings.providers.testOk":`✓ 延迟 {ms}ms · 模型数 {n}`,"settings.providers.needId":`请先填写提供商名称(作为 id)`,"settings.providers.savingAndFetching":`保存并获取模型中…`,"settings.providers.fetchFailed":`获取模型失败:{reason}`,"settings.providers.noModelsFetched":`未获取到任何模型`,"settings.providers.fetched":`已获取 {n} 个模型 · 请勾选要添加的模型`,"settings.providers.added":`已添加 {n} 个模型(共获取 {total} 个)· 请保存以生效`,"settings.providers.noneSelected":`未选择模型(共获取 {n} 个)· 请保存以生效`,"settings.providers.idRequired":`名称(id)不能为空`,"settings.providers.saveFailed":`保存失败:{reason}`,"settings.providers.empty":`暂无提供商 · 点击上方「添加提供商」创建`,"settings.providers.defaultModel":`默认模型`,"settings.providers.defaultNote":`切换后立即生效`,"settings.providers.currentDefault":`当前默认`,"settings.providers.defaultNotInList":`{model}(当前默认,不在列表)`,"settings.providers.applyingDefault":`应用默认模型…`,"settings.providers.defaultApplied":`已切换默认模型`,"settings.providers.switchFailed":`切换失败:{reason}`,"settings.action.remove":`移除`,"settings.action.confirm":`确认`,"settings.providers.modelId":`模型 id`,"settings.providers.modelDisplayName":`显示名`,"settings.providers.advanced":`高级(推理强度 / 上下文 / 最大输出)`,"settings.providers.addEffortTier":`添加自定义推理档位(如 xhigh)`,"settings.providers.customTierPlaceholder":`自定义档位名(如 xhigh)`,"settings.providers.tierExists":`档位已存在:{tier}`,"settings.providers.contextPlaceholder":`上下文窗口(如 1000000 / 1m / 128k)`,"settings.providers.maxOutPlaceholder":`最大输出 tokens(如 8192 / 8k)`,"settings.providers.reasoningEffort":`推理强度`,"settings.providers.modelContext":`模型上下文`,"settings.providers.expandHint":`点击展开/收起内联编辑`,"settings.providers.deleteTitle":`删除提供商`,"settings.providers.confirmDelete":`确认删除提供商「{name}」?`,"settings.providers.deleteFailed":`删除失败:{reason}`,"settings.providers.pickTitle":`选择要添加的模型`,"settings.providers.pickNote":`请勾选要添加的模型(默认不勾选;已存在的模型不可重复添加)`,"settings.providers.pickCount":`已选 {n} / {total} 个可选模型`,"settings.providers.pickExisting":`已存在`,"settings.providers.keyConfigured":`已配 Key`,"settings.permissions.idHint":`小写字母开头,只用小写字母、数字、下划线或连字符`,"settings.permissions.rootsHint":`额外可写目录:工作区与工具根之外仍需写入的绝对路径`,"settings.permissions.toolsHint":`勾选后该工具从本档会话的工具面移除`,"settings.permissions.noExtraRootsAdded":`未添加额外可写目录`,"settings.permissions.rootPlaceholder":`绝对路径,例如 /srv/data`,"settings.permissions.chooseDir":`选择目录`,"settings.permissions.chooseExtraDir":`选择额外可写目录`,"settings.permissions.toolsNotLoaded":`未取到工具清单,可稍后重新载入`,"settings.permissions.toolsUnavailableReload":`工具清单暂不可用,可稍后重新载入`,"settings.permissions.idPlaceholder":`例如 deploy-docs`,"settings.permissions.labelPlaceholder":`档位显示名`,"settings.permissions.allPathsRisk":`整台机器可读写,风险自担`,"settings.permissions.unsandboxedDeclare":`免沙箱(声明)`,"settings.permissions.saveIdRequired":`请填写预设 id`,"settings.permissions.idInvalid":`预设 id {hint}`,"settings.permissions.newTitle":`新建自定义预设`,"settings.permissions.editTitle":`编辑自定义预设:{id}`,"settings.permissions.idField":`预设 id`,"settings.permissions.idLocked":`编辑时 id 不可改`,"settings.permissions.labelField":`显示名`,"settings.permissions.labelHint":`留空则用 id 作为显示名`,"settings.permissions.switches":`能力开关`,"settings.permissions.toolsField":`工具禁用`,"settings.permissions.deleteTitle":`删除自定义预设`,"settings.permissions.deleteConfirm":`删除「{name}」?仍在使用该档位的会话会回落到默认档。`,"settings.permissions.newPreset":`新建预设`,"settings.permissions.unavailableReason":`权限预设暂不可用:{reason}`,"settings.batch.reasonUnknownWorkspace":`所属工作区已不存在,无法处理`,"settings.batch.reasonUnknownSession":`该会话已不存在(可能已被删除)`,"settings.batch.unknownTail":`(未知)`,"settings.batch.rest":`(已成功 {n} 个)`,"settings.batch.failedOne":`{verb}失败:{reason}{rest}`,"settings.batch.failedMany":`{verb}失败 {n} 个:{head}{shown}{more}{rest}`,"settings.batch.more":` 等 {n} 个`,"settings.batch.listSep":`、`,"settings.batch.headSep":`{reason};`,"settings.archive.unavailable":`归档会话暂不可用`,"settings.archive.restoreTitle":`恢复归档会话`,"settings.archive.deleteTitle":`删除归档会话`,"settings.archive.restored":`已恢复会话:{name}`,"settings.archive.deleted":`已删除会话:{name}`,"settings.archive.failed":`{verb}失败:{reason}`},p={"chat.think.foldedHint":`思考已折叠,点击展开`,"chat.think.title":`思考`,"chat.think.thinking":`思考中…`,"chat.tool.title":`工具`,"chat.tool.step":`第 {n} 步`,"chat.tool.running":`运行中`,"chat.tool.copy":`复制`,"chat.tool.copyHint":`复制参数与结果(JSON)`,"chat.tool.args":`参数:{text}`,"chat.tool.argsNone":`参数:—`,"chat.tool.preview":`预览`,"chat.tool.previewHint":`侧边预览这个文件`,"chat.tool.failed":`失败`,"chat.tool.done":`完成`,"chat.tool.result":`结果:{text}`,"chat.tool.denied":`拒绝`,"chat.tool.ask":`待确认`,"chat.rail.folded":`更早的 {n} 轮已折叠`,"chat.rail.barHint":`第 {n} 轮 · 悬停看预览,点击定位`,"chat.rail.noReply":`(无回复)`,"chat.rail.centerOutside":`视口中间 · 在这几轮之外`,"chat.rail.centerFolded":`更早的 {n} 轮(视口中间)`,"chat.rail.centerNear":`第 {n} 轮附近(视口中间)`,"chat.msg.system":`系统`,"chat.empty.hint":`在下方输入消息开始对话 · Enter 发送 · Shift+Enter 换行`,"chat.user.you":`你`,"chat.user.steering":`插话`,"chat.user.queued":`排队`,"chat.user.truncatedSuffix":` · 已截断`,"chat.inbox.skill":`技能目录`,"chat.inbox.memory":`记忆 · 每轮注入`,"chat.inbox.receipt":`回执`,"chat.inbox.compact":`压缩摘要`,"chat.inbox.receiptSource":`回执 · {source}`,"chat.lane.nextStep":`下一步送达`,"chat.lane.nextTurn":`下一回合送达`,"chat.quote.label":`引用 {n}`,"chat.quote.tool":`工具`,"chat.quote.toolNamed":`工具 {name}`,"chat.quote.max":`引用已达上限(最多 8 条)`,"chat.quote.duplicate":`这段已经引用过了`,"chat.quote.add":`引用`,"chat.quote.addHint":`把选中的内容作为引用加入下一条消息`,"chat.quote.addAria":`引用选中的内容`,"chat.quote.empty":`(空引用)`,"chat.quote.removeHint":`移除这条引用`,"chat.quote.removeAria":`移除引用:{label}`,"chat.preview.manager":`文件管理器`,"chat.preview.target":`目标文件:{path}`,"chat.preview.chooseDir":`选择此目录`,"chat.preview.busy":`处理中…`,"chat.preview.close":`关闭预览`,"chat.preview.copyPath":`复制路径`,"chat.preview.openInManager":`在文件管理器中打开`,"chat.preview.degradeImage":`这张图片的字节不在本次会话里,无法放大查看`,"chat.preview.badgeImage":`图片不可预览`,"chat.preview.degradeNotInSession":`这个文件的内容不在本次会话里(只预览会话内已经出现过的内容)`,"chat.preview.badgeNotInSession":`内容不在会话里`,"chat.preview.degradeBinary":`这是二进制内容,无法按文本预览`,"chat.preview.badgeBinary":`二进制内容`,"chat.preview.degradeTooLarge":`文件过大,无法在这里完整预览`,"chat.preview.badgeTooLarge":`文件过大`,"chat.preview.degradeUnsupported":`这个类型暂时不能预览,可复制路径后在文件管理器里打开`,"chat.preview.badgeUnsupported":`类型不支持`,"chat.preview.truncated":`已截断(只显示前一部分)`,"chat.preview.degradeReadFailed":`这个文件暂时读不出来,请稍后再试`,"chat.command.run.desc":`直接执行一条命令,输出进对话(不经过模型)`,"chat.command.run.args":`<命令>`,"chat.command.run.usage":`用法:/run <命令>,例如 /run echo hi`,"chat.command.goal.desc":`设定持久目标,之后每轮都能看到;/goal done 清除`,"chat.command.goal.args":`[目标 | done]`,"chat.command.goal.none":`当前还没有目标,用 /goal <目标> 设定`,"chat.command.goal.current":`当前目标:{text}`,"chat.command.goal.set":`目标已设定:{text}`,"chat.command.goal.cleared":`目标已清除`,"chat.command.goal.saveFailed":`目标没有保存,请稍后重试`,"chat.command.model.desc":`切换本会话使用的模型`,"chat.command.model.args":`<模型名>`,"chat.command.model.usage":`用法:/model <模型名>`,"chat.command.model.switched":`已切换本会话模型`,"chat.command.model.busy":`本轮还没结束,稍后会自动重试切换`,"chat.command.compact.desc":`压缩当前会话的上下文,腾出空间`,"chat.command.unknown":`没有这个命令:/{name}(输入 / 查看全部命令)`,"chat.mention.dir":`目录`,"chat.mention.file":`文件`,"chat.mention.noWorkspace":`当前工作区还不明确,无法列出文件`,"chat.mention.unavailable":`文件列举暂不可用,请稍后再试`,"chat.mention.openFailed":`这个目录打不开:{reason}`,"chat.mention.truncated":`这个目录条目太多,只显示了前一部分`,"chat.goal.failed":`设置失败`,"chat.goal.saveFailed":`目标没有保存:{reason}`,"chat.goal.tag":`目标`,"chat.goal.done":`完成`,"chat.goal.clearHint":`清除当前目标`,"chat.run.signal":`被信号终止({signal})`,"chat.run.exitUnknown":`退出码未知`,"chat.run.exit":`退出码 {code}{status}`,"chat.run.success":`(成功)`,"chat.run.failure":`(失败)`,"chat.run.netIsolated":`网络隔离`,"chat.run.netOnline":`可联网`,"chat.run.tmpPrivate":`私有临时目录`,"chat.run.seccomp":`系统调用过滤`,"chat.run.cmd":`命令`,"chat.run.stdout":`输出`,"chat.run.stderr":`错误输出`,"chat.run.noOutput":`(没有输出)`,"chat.run.unsupported":`这个版本还不支持直接执行命令,请升级后再试`,"chat.run.failed":`命令没有跑起来:{reason}`,"chat.question.answered":`已作答`,"chat.question.expired":`已到时限 · 未作答(模型已按超时继续)`,"chat.question.closed":`该提问已结束,无需再作答(时限已到或已在别处作答)`,"chat.question.submit":`提交作答`,"chat.question.missing":`还有 {n} 个问题没作答:每题选一项,或自己填一句`,"chat.question.answeredWith":`已作答:{answer}`,"chat.question.submitFailed":`提交失败:{reason}(可重试)`,"chat.question.needDecision":`需要你的决定`,"chat.question.planReview":`方案评审`,"chat.question.title":`提问`,"chat.question.interrupted":`未作答 · 该提问已无法再作答(会话曾中断)`,"chat.question.customPlaceholder":`也可以自己填一句(可选)`,"chat.question.customRequired":`请填写你的回答`,"chat.question.timedOut":`已到时限`,"chat.question.seconds":`剩 {n} 秒`,"chat.question.clock":`剩 {m}:{s}`,"chat.question.hoursMinutes":`剩 {h} 小时 {m} 分`,"chat.question.answerSep":`、`,"chat.question.answerJoin":`;`,"chat.question.customQuote":`「{text}」`,"chat.attach.imageEntryDisabled":`当前服务未启用图片附件`,"chat.attach.modelNoImages":`当前模型 "{model}" 的输入能力不含图像,图片入口已禁用;可在模型设置里加入 "image",或切换到支持图像的模型。`,"chat.attach.downgradeDefault":`模型拒绝了图像输入,本轮已自动降级为仅文本继续,图片未送达模型。`,"chat.attach.suggestSwitch":`可切换到:{models}`,"chat.attach.maxCount":`最多 {n} 个附件(图片与文本合计)`,"chat.attach.maxBytes":`单张不超过 {size}`,"chat.attach.imageName":`图片`,"chat.attach.readFailed":`附件读取失败({names}),已中止本轮发送`,"chat.attach.unknownFile":`未知文件`,"chat.attach.expand":`展开附件`,"chat.attach.collapse":`收起附件`,"chat.attach.count":`附件 {n}`,"chat.attach.textGlyph":`文`,"chat.attach.textSuffix":` · 文本`,"chat.attach.removeText":`移除这个文本文件`,"chat.attach.removeImage":`移除这张图片`,"chat.attach.textFile":`文本文件`,"chat.attach.imageGlyph":`图`,"chat.attach.glyphFallback":`附`,"chat.attach.textTooLarge":`文本文件不超过 {size}(当前 {current})`,"chat.attach.textOnlySupport":`仅支持图片与文本文件(.md / .txt / .json 等),单个文本不超过 {size}`,"chat.attach.emptyFile":`空文件没有内容可发送`,"chat.attach.notUtf8":`不是可读的 UTF-8 文本(二进制文件不支持)`,"chat.attach.unknownType":`未知类型`,"chat.ctx.title":`完整上下文`,"chat.ctx.readonly":`只读`,"chat.ctx.close":`关闭`,"chat.ctx.foot":`只读快照 · 不发送、不修改任何内容`,"chat.ctx.footWithSession":`会话 {id} · 只读快照 · 不发送、不修改任何内容`,"chat.ctx.truncatedSuffix":` · 部分条目过长已截断`,"chat.ctx.loadFailed":`暂时无法读取上下文,请稍后重试`,"chat.ctx.currentModel":`当前模型:{model}`,"chat.ctx.usageTitle":`上下文用量(已用 / 容量)`,"chat.ctx.estimated":`估算`,"chat.ctx.counts":`系统 {sys} 字符 · 工具 {tools} · 消息 {msgs}`,"chat.ctx.countsTitle":`本轮上下文的条目数量`,"chat.ctx.systemPrompt":`系统提示词`,"chat.ctx.chars":`{n} 字符`,"chat.ctx.empty":`(空)`,"chat.ctx.toolList":`工具清单`,"chat.ctx.count":`{n} 个`,"chat.ctx.partialTruncated":`部分已截断`,"chat.ctx.noTools":`本轮没有可用工具`,"chat.ctx.unnamed":`(未命名)`,"chat.ctx.truncatedBadge":`已截断`,"chat.ctx.noSchema":`无参数结构`,"chat.ctx.schemaUnavailable":`参数结构无法展示`,"chat.ctx.roleUser":`用户`,"chat.ctx.roleAssistant":`助手`,"chat.ctx.roleTool":`工具结果`,"chat.ctx.roleOther":`其它`,"chat.ctx.messages":`消息流`,"chat.ctx.countItems":`{n} 条`,"chat.ctx.noMessages":`本轮还没有消息`,"chat.ctx.callId":`调用标识:{id}`,"chat.ctx.noDescription":`(无说明)`,"chat.fsbrowse.pathPlaceholder":`目录路径(可编辑后跳转)`,"chat.fsbrowse.go":`跳转`,"chat.fsbrowse.root":`根目录 /`,"chat.fsbrowse.unavailable":`文件浏览暂不可用 · 请直接在下方输入路径`,"chat.fsbrowse.fallback":`可编辑底部路径后点「跳转」再确认`,"chat.fsbrowse.failed":`浏览失败:{reason}`,"chat.fsbrowse.manualPath":`请手动输入目录路径`,"chat.fsbrowse.selected":`已选择目录:{path}`,"chat.fsbrowse.noSubdirs":`(该目录下没有子目录)`,"chat.fsbrowse.needPath":`请先选择/输入目录路径`,"chat.wb.urlPlaceholder":`输入网址,例如 example.com`,"chat.wb.open":`打开`,"chat.wb.openExternal":`在新标签打开`,"chat.wb.frameBlocked":`这个网站可能不允许被嵌入(页面安全策略),可点「在新标签打开」`,"chat.wb.noWorkspace":`当前工作区还不明确,无法打开文件管理器`,"chat.wb.listUnavailable":`文件列举暂不可用,请稍后再试`,"chat.wb.dirOpenFailed":`这个目录打不开:{reason}`,"chat.wb.up":`↑ 上级`,"chat.wb.dirTruncated":`这个目录条目太多,只显示了前一部分`,"chat.wb.dirEmpty":`(这个目录是空的)`,"chat.wb.menu.files":`文件管理器`,"chat.wb.menu.filesDesc":`浏览当前工作区的文件夹与文件`,"chat.wb.menu.terminal":`终端`,"chat.wb.menu.terminalDesc":`执行一条命令,输出进面板`,"chat.wb.menu.browser":`浏览器`,"chat.wb.menu.browserDesc":`打开一个网页`,"chat.wb.dockBottom":`停到底部`,"chat.wb.dockRight":`停到右侧`,"chat.wb.close":`关闭面板`,"chat.wb.term.note":`一次性执行(不是交互式终端):输入一条命令,回车运行。`,"chat.wb.term.placeholder":`输入命令,例如 ls -la`,"chat.wb.term.run":`运行`,"chat.wb.term.running":`运行中`,"chat.wb.term.signal":`信号 {signal}`,"chat.wb.term.exitCode":`退出码 {code}`,"chat.wb.term.unsupported":`这个版本还不支持直接执行命令`,"chat.wb.term.notStarted":`命令没有跑起来`,"chat.input.placeholderIdle":`输入消息,Enter 发送,Shift+Enter 换行`,"chat.input.placeholderSteer":`Enter 插话(下一步送达)· Ctrl/Cmd+Enter 排队(下一回合送达)`,"chat.input.placeholderQueue":`Enter 排队(本轮结束后送达)· Ctrl/Cmd+Enter 插话(下一步送达)`,"chat.input.placeholderWorker":`对 worker 说点什么(送入它的收件箱,它空闲时会开新一轮)`,"chat.input.interject":`插话`,"chat.input.queue":`排队`,"chat.input.modeSteerTitle":`当前:插话(Enter)· 下一步送达 · 点击改为排队`,"chat.input.modeQueueTitle":`当前:排队(Enter)· 本轮结束后送达 · 点击改为插话`,"chat.input.send":`发送`,"chat.input.sendWorkerTitle":`发送到该 worker 的收件箱(Enter)`,"chat.input.steerTitle":`插话(Enter):注入运行中的轮次,下一步送达`,"chat.input.queueTitle":`排队(Enter):本轮结束后作为下一回合送达`,"chat.input.sendTitle":`发送(Enter)`,"chat.input.attachTitle":`添加附件(图片 / 文本文件,可粘贴 / 拖拽 / 选择)`,"chat.input.attachAria":`添加附件`,"chat.input.rejectedCount":`有 {n} 个文件不符合要求,已在待发区标红`,"chat.send.busyWithAttachments":`本轮还没结束:附件需等本轮结束后发送(插话只支持文字)`,"chat.send.starting":`启动中…`,"chat.send.running":`运行中…`,"chat.send.workerNoImages":`worker 会话不收图片附件(收件箱只收文字)`,"chat.send.delivering":`发送中 · 等待送达…`,"chat.send.workerSettled":`已送达 · 该 worker 已结束({status}),消息留在它的收件箱里`,"chat.send.workerDelivered":`已送达 · 将作为它的一轮对话处理`,"chat.send.workerSettledShort":`已送达(该 worker 已结束)`,"chat.send.workerDeliveredShort":`已送达 worker`,"chat.send.notDelivered":`未送达({reason}):已将内容还原到输入框`,"chat.send.failedPrefix":`发送失败:`,"chat.send.failedRolledSuffix":`;待发内容已放回,可重试`,"chat.send.queuedWaiting":`已排队 · 等待本轮结束…`,"chat.send.interjectedWaiting":`已插话 · 等待送达…`,"chat.send.queuedDone":`已排队 · 本轮结束后送达`,"chat.send.interjectedDone":`已插话 · 将在下一步送达`,"chat.send.queuedShort":`已排队,将在本轮结束后送达`,"chat.send.interjectedShort":`已插话,将在下一步送达`,"chat.send.asNewTurn":`已作为新一轮发送`,"chat.send.queueUnsupported":`当前版本不支持排队 → 已按插话送达{lane}`,"chat.send.laneSuffix":`({lane})`,"chat.send.queueNotDelivered":`排队未送达({reason}):已将内容还原到输入框`,"chat.send.steerNotDelivered":`插话未送达({reason}):已将内容还原到输入框`,"chat.phase.cancelled":`已取消`,"chat.phase.error":`出错`,"chat.phase.running":`运行中…`,"chat.status.turnError":`本轮出错:{reason}`,"chat.status.unknownError":`未知错误`,"chat.status.lagged":`部分输出因网络延迟被合并`,"chat.status.contextEvent":`上下文事件`,"chat.status.cancelling":`取消中…`,"chat.status.cancelFailed":`取消失败:{reason}`,"chat.status.disconnected":`无法连接服务`,"chat.version.title":`Celestea Studio · 构建于 {time} · {version}{dirty}`,"chat.version.dirty":` · 工作区有未提交改动`,"theme.mono.label":`黑白`,"theme.mono.hint":`黑白 ins 风 · 纯灰阶浅色,零彩色点缀`,"theme.dark.label":`暗色`,"theme.dark.hint":`深灰多层级 · 语义 token 覆盖`,"theme.title":`主题 · {hint}{suffix}`,"theme.clickToSwitch":`(点击切换)`,"theme.onlyTheme":`(当前唯一主题)`,"plugins.notFound":`没有找到这个插件,保持原样。`,"plugins.toggleFailed":`「{label}」切换失败,已恢复原来的状态。`,"plugins.toggled":`已{state}「{label}」`,"plugins.on":`开启`,"plugins.off":`关闭`,"plugins.desc.textCard.label":`文字卡片`,"plugins.desc.textCard.hint":`悬停时统一用卡片显示提示文字;关闭后回退为浏览器自带的提示。`,"plugins.desc.railPreview.label":`预览卡片`,"plugins.desc.railPreview.hint":`左侧长条悬停时显示消息预览;关闭后回退为文字卡片。`},m={"shell.tree.selectedCount":`已选 {n} 个会话`,"shell.tree.selectedZero":`已选 0 个会话`,"shell.tree.batchDeleteTitle":`批量删除`,"shell.tree.batchDeleteConfirm":`将批量删除 {n} 个会话。删除后可在回收目录恢复,确认?`,"shell.tree.deletedCount":`已删除 {n} 个会话`,"shell.tree.batchDeleteFailed":`批量删除失败:{reason}`,"shell.tree.switchedTo":`已切换到会话:{title}`,"shell.tree.switched":`已切换会话`,"shell.tree.viewOpenActivateFailed":`视图已打开 · 未能激活`,"shell.tree.viewOpenFailed":`视图已打开 · {reason}`,"shell.tree.runningViewOpen":`该会话运行中(视图已打开 · 实时流可见)`,"shell.tree.archiveTitle":`归档会话`,"shell.tree.archiveConfirm":`确认归档会话「{label}」?`,"shell.tree.archiveOk":`归档`,"shell.tree.archived":`已归档会话:{label}`,"shell.tree.archiveFailed":`归档失败:{reason}`,"shell.tree.deleteTitle":`删除会话「{label}」`,"shell.tree.deleteConfirm":`删除后可在回收目录恢复,确认?`,"shell.tree.deletedSession":`已删除会话:{label}`,"shell.tree.deleteFailed":`删除失败:{reason}`,"shell.tree.renamePrompt":`重命名会话(新标题)`,"shell.tree.renameFailed":`重命名失败:{reason}`,"shell.tree.branchPrompt":`分支会话(新分支标题,可留空)`,"shell.tree.branchFailedRetry":`分支失败,请稍后重试`,"shell.tree.branched":`已创建分支`,"shell.tree.branchFailed":`分支失败:{reason}`,"shell.tree.deleteWsTitle":`删除工作区「{name}」`,"shell.tree.wsDeleted":`工作区已删除:{name}`,"shell.tree.renameWsPrompt":`重命名工作区`,"shell.tree.running":`运行中`,"shell.tree.idle":`空闲`,"shell.tree.grantDanger":`该会话权限已放宽(含危险能力):{n} 项`,"shell.tree.grantRelaxed":`该会话权限已放宽:{n} 项`,"shell.worker.title":`后台任务`,"shell.tree.events":`{n} 次事件`,"shell.worker.openHint":`(点击打开该 worker 会话视图:只读)`,"shell.worker.unlinked":`未关联父会话`,"shell.worker.parentHint":`点击打开父会话视图`,"shell.new.title":`新建会话`,"shell.new.titlePlaceholder":`必填`,"shell.field.title":`标题`,"shell.new.rootWorkspace":`root(默认工作区)`,"shell.new.followDefault":`跟随默认`,"shell.new.noModels":`(暂无可选模型)`,"shell.new.modelsUnavailable":`(模型列表暂不可用)`,"shell.field.mode":`工作方式`,"shell.field.prompt":`提示词`,"shell.action.create":`创建`,"shell.new.titleRequired":`标题不能为空`,"shell.new.creating":`创建中…`,"shell.new.rejected":`服务拒绝了该操作`,"shell.new.createdRefresh":`会话已创建,请刷新列表后手动打开`,"shell.new.createdOpened":`已创建并打开会话:{title}`,"shell.new.activateFailed":`未能激活`,"shell.new.failed":`创建失败:{reason}`,"shell.new.wsTitle":`新建工作区 · 选择目录`,"shell.new.wsNote":`选中目录即注册该目录为工作区(名称 = 文件夹名)`,"shell.new.wsBusy":`注册中…`,"shell.new.wsFallback":`可编辑底部路径后点「跳转」,或直接填写名称+路径创建`,"shell.new.wsRegisterFailed":`注册失败:{reason}`,"shell.new.wsCheckPath":`请检查目录路径`,"shell.new.wsRegistered":`工作区已注册:{path}`,"mode.badge.standard":`标准`,"mode.badge.execution":`执行`,"mode.choice.standard":`标准模式`,"mode.choice.execution":`执行模式(PTC)`,"mode.note.applied":`将在会话下一轮生效`,"mode.note.busy":`turn 进行中,无法切换模式`,"mode.note.unsupported":`当前版本不支持切换工作方式`,"mode.note.invalid":`工作方式取值无效,请重新选择`,"shell.topbar.config":`配置`,"shell.topbar.configTitle":`运行配置(模型 / 推理档位 / 密钥等)`,"shell.topbar.workbenchTitle":`打开面板(文件管理器 / 终端 / 浏览器)`,"shell.topbar.workbenchAria":`打开面板`,"shell.topbar.versionTitle":`Celestea Studio 构建版本`,"shell.tree.newSession":`新会话`,"shell.tree.searchPlaceholder":`搜索工作区/会话`,"shell.tree.sortTitle":`排序:{label} · 点击切换`,"shell.tree.sortRecent":`最近活跃`,"shell.tree.newWorkspace":`新建工作区`,"shell.tree.unnamed":`(未命名)`,"shell.tree.workerBadgeTitle":`该会话下有 {n} 个 worker 子会话`,"shell.tree.clickCheck":`(点击勾选)`,"shell.tree.clickOpen":`(点击打开)`,"shell.tree.sessionOps":`会话操作`,"shell.tree.currentSession":`当前会话`,"shell.tree.open":`打开`,"shell.tree.rename":`重命名`,"shell.tree.branch":`分支`,"shell.tree.workspaceOps":`工作区操作`,"shell.tree.batchDeleteSessions":`批量删除会话`,"shell.tree.deleteWorkspace":`删除工作区`,"shell.tree.deleteSelected":`删除选中`,"shell.sidebar.expand":`展开`,"shell.sidebar.collapse":`收起`,"shell.sidebar.expandTitle":`展开左侧面板`,"shell.sidebar.collapseTitle":`收起左侧面板`,"shell.sessbar.unresolved":`当前会话(未解析)`,"shell.sessbar.idle":`空闲`,"shell.sessbar.session":`会话`,"shell.sessbar.unresolvedShort":`(未解析)`,"shell.sessbar.background":`后台运行`,"shell.sessbar.others":`另有 {n} 个会话运行中:`,"shell.sessbar.switchTo":`切换到 {name}`,"shell.sessbar.thatSession":`该会话`,"shell.sessions.unavailable":`会话列表暂不可用`,"shell.sessions.noMatch":`无匹配结果`,"shell.sessions.empty":`无会话记录 · 点击「新会话」创建`,"shell.status.turn":`第 {n} 轮`,"shell.status.turnNone":`第 — 轮`,"shell.status.online":`就绪 · 在线`,"shell.status.reconnecting":`重连中…`,"shell.worker.stripHint":`(点击打开该 worker 会话,可直接对它说话)`,"shell.worker.stripTitle":`后台任务 · {n} 运行中`,"shell.worker.stripTitlePlain":`后台任务`,"shell.restore.orphanResult":`工具结果(无对应调用记录):`,"shell.restore.unavailable":`历史恢复暂不可用`,"shell.restore.folded":`更早的历史已折叠 · 仅显示最近 {n} 条`,"shell.restore.noResult":`(无结果记录)`,"shell.restore.sessionStart":`以下为本次会话`,"shell.restore.earlier":`上方为更早的消息`,"shell.restore.noActive":`未找到活跃会话 · 发送第一条消息后自动建立`,"shell.chatcol.label":`正文列宽`,"shell.chatcol.hint":`拖动调整正文列宽 · 双击复位`,"shell.compact.done":`上下文已压缩`,"shell.compact.noSession":`压缩失败:未找到活跃会话`,"shell.compact.busy":`压缩中…`,"shell.compact.notNeeded":`历史不足,无需压缩`,"shell.compact.historyDone":`历史已压缩`,"shell.compact.failed":`压缩失败:{reason}`,"shell.confirm.result":`生效结果`,"shell.confirm.require":`请输入「{word}」以确认`,"shell.confirm.requireHint":`逐字输入后「确认」才会可用`},h={"grants.cap.network.label":`访问网络`,"grants.cap.network.impact":`允许会话中运行的命令访问互联网与内网(含本机服务)。`,"grants.cap.network.extra":`⚠ 撤销前一直有效。`,"grants.cap.writeRoots.label":`额外可写目录`,"grants.cap.writeRoots.impact":`允许会话在所选目录中创建与修改文件。`,"grants.cap.readRoots.label":`额外只读目录`,"grants.cap.readRoots.impact":`允许会话读取该目录内的文件(不能修改)。`,"grants.cap.netHosts.label":`访问指定网站`,"grants.cap.netHosts.impact":`把下列站点加入会话的网络放行清单(并集放宽,不会收窄;是否生效取决于部署的站点策略)。`,"grants.cap.toolExtra.label":`启用额外工具`,"grants.cap.toolExtra.impact":`预留能力:为将来的 browser/net 工具准备,当前没有任何工具消费它,授予不会生效。`,"grants.cap.unsandboxed.label":`降低隔离运行`,"grants.cap.unsandboxed.impact":`允许会话中的命令不经额外隔离运行。`,"grants.ttl.min15":`15 分钟`,"grants.ttl.min30":`30 分钟`,"grants.ttl.hour1":`1 小时`,"grants.ttl.hour24":`24 小时`,"grants.permanent.label":`永久`,"grants.permanent.note":`可随时撤销`,"grants.permanent.text":`永久(可随时撤销)`,"grants.permanent.paren":`(永久,可随时撤销)`,"grants.until.permanent":`撤销前一直有效`,"grants.until.at":`至 {time}`,"grants.until.paren":`(至 {time})`,"grants.preset.readWorkspace.label":`只读工作区`,"grants.preset.readWorkspace.hint":`选一个目录(建议选本会话的工作区)读取其中文件,不能修改;撤销前一直有效。`,"grants.preset.writeOutput.label":`写输出目录`,"grants.preset.writeOutput.hint":`选一个目录(建议选工作区的输出目录)在其中创建与修改文件;撤销前一直有效。`,"grants.preset.net.label":`联网`,"grants.preset.net.hint":`访问互联网与内网(含本机服务);撤销前一直有效。`,"grants.preset.localhost.label":`本机服务`,"grants.preset.localhost.hint":`访问网络,并把 localhost 与 127.0.0.1 放进站点放行清单;撤销前一直有效。`,"grants.copy.listSep":`、`,"grants.copy.network":`允许本会话中运行的命令访问互联网与内网(包括本机运行的服务)。此授权{until}。仅在你信任即将运行的命令时授予。`,"grants.copy.writeRoots":`允许本会话在 {roots} 中创建与修改文件。该目录之外的写入仍然被拒绝。此授权{until}。`,"grants.copy.unsandboxed":`允许本会话中运行的命令绕过文件系统与网络的额外隔离。恶意或被注入的命令可能读取或修改你的文件。此授权只能使用一次,{until}。`,"grants.copy.readRoots":`允许本会话读取 {roots}(不能修改)。此授权{until}。`,"grants.copy.netHosts":`允许本会话访问 {hosts}。此授权{until}。`,"grants.copy.toolExtra":`允许本会话使用 {tools}。此授权{until}。`,"grants.copy.presetHead":`本次快捷授权({label})会依次放宽 {n} 项权限:`,"grants.copy.presetBody":`· {label}:{text}`,"grants.copy.presetTailPermanent":`到期时间:{permanent}。`,"grants.copy.presetTailLimited":`到期时间:{list}。`,"grants.copy.previewPrefix":`授予后,本会话可以:`,"grants.copy.previewSuffix":`。除此之外的权限与现在相同。`,"grants.copy.successPrefix":`已放宽:`,"grants.scope.needHost":`请至少填写一个站点`,"grants.scope.hostCred":`第 {n} 项疑似包含凭据,不能作为站点提交`,"grants.scope.hostInvalid":`第 {n} 项不是有效的主机名、IP 或网段`,"grants.scope.needTool":`请至少填写一个工具名`,"grants.scope.toolCred":`第 {n} 项疑似包含凭据,不能提交`,"grants.scope.toolInvalid":`第 {n} 项不是有效的工具名`,"grants.body.title":`本会话权限`,"grants.body.noSession":`尚未打开任何会话:请先在左侧选择一个会话。`,"grants.body.introDefault":`默认情况下,本会话只能读写工作区目录,不能访问网络。`,"grants.body.introScope":`以下授权只对当前会话生效,可随时撤销;变更将在会话下一轮开始时生效。`,"grants.body.previewLabel":`结果预览`,"grants.body.unreadable":`当前无法读取本会话权限,请稍后重试。`,"grants.body.footNote":`变更将在会话下一轮开始时生效。`,"grants.body.revokeAll":`全部撤销`,"grants.phrase.default":`本会话现在只能读写工作区目录,不能访问网络。`,"grants.phrase.canNow":`本会话现在可以:`,"grants.phrase.suffix":`。除此之外的权限与现在相同。`,"grants.phrase.network":`访问互联网与内网`,"grants.phrase.writeRoots":`在 {roots} 中创建与修改文件`,"grants.phrase.readRoots":`读取 {roots} 中的文件`,"grants.phrase.netHosts":`访问 {hosts}`,"grants.phrase.toolExtra":`使用额外工具 {tools}`,"grants.phrase.unsandboxed":`不经额外隔离运行命令`,"grants.quick.ttlPrefix":`有效期 {label}`,"grants.quick.ttlMinutes":`有效期 {n} 分钟`,"grants.quick.title":`快捷授权`,"grants.quick.note":`一条组合 = 按顺序逐项放宽,每项都可单独撤销`,"grants.quick.applied":`已生效`,"grants.quick.unavailable":`快捷授权暂不可用,请改用下面的逐项授予。`,"grants.rows.ineffective":`当前部署下不生效`,"grants.rows.ineffectiveTitle":`本部署未启用站点策略,这份站点清单不会改变会话可访问的范围。`,"grants.rows.reserved":`预留未生效`,"grants.rows.reservedTitle":`该能力还没有任何工具消费它:授予不会改变会话能做什么。`,"grants.rows.expiredPrefix":`已过期:{what}`,"grants.rows.hostPlaceholder":`站点或网段,用逗号或换行分隔`,"grants.rows.toolPlaceholder":`工具名,用逗号或换行分隔`,"grants.rows.revoke":`撤销`,"grants.rows.chooseDir":`选择目录`,"grants.rows.grant":`授予`,"grants.rows.grantTitle":`直接授予:{permanent}`,"grants.rows.onceOnly":`只能使用一次;{permanent}`,"grants.rows.expired":`已过期`,"grants.rows.notGranted":`未授予`,"grants.rows.grantedCount":`已授予 {n} 项`,"grants.rows.grantedPermanent":`已授予 · {permanent}`,"grants.rows.grantedUntil":`已授予至 {time}`,"grants.rows.detailWrite":`{values} — 已允许在其中创建与修改文件{exp}`,"grants.rows.detailRead":`{values} — 已允许读取(不能修改){exp}`,"grants.rows.tempCollapse":`收起时长`,"grants.rows.tempOpen":`临时授权…`,"grants.rows.tempNote":`临时授权:到期后自动收回,可随时撤销。`,"grants.rows.tempGrant":`按此时长授予`,"grants.rows.minutes":`{n} 分钟`,"grants.shield.default":`本会话权限:默认(仅工作区,无网络)`,"grants.shield.expiring":`本会话有权限即将失效 · 点击查看`,"grants.shield.granted":`本会话已放宽 {n} 项权限 · 点击查看`,"grants.warnings.label":`提示`,"grants.flow.chooseDir":`选择要放宽的目录`,"grants.flow.chooseDirNote":`只能选择目录;{permanent}`,"grants.flow.confirmTitle":`确认放宽权限 · {label}`,"grants.flow.effectiveNote":`变更将在会话下一轮开始时生效。`,"grants.flow.snapshotLabel":`结果预览 · 生效快照(原样取自服务)`,"grants.flow.grantFailed":`放宽失败:{reason}`,"grants.flow.confirmPresetTitle":`确认快捷授权 · {label}`,"grants.flow.presetNote":`授予后一次生效:{list}。`,"grants.flow.presetInterrupted":`快捷授权中断:「{label}」没有授予成功({reason})。{done}`,"grants.flow.presetDone":`已成功:{list}(可在下面逐项撤销)。`,"grants.flow.presetNoGrant":`本次没有产生任何授权。`,"grants.flow.presetComplete":`快捷授权完成:已放宽 {list}。`,"grants.flow.presetUnavailable":`这个快捷授权包含当前不可用的能力,已取消。`,"grants.flow.chooseDirPreset":`选择要放宽的目录 · {label}`,"grants.flow.chooseDirPresetNote":`本次快捷授权只会用到这一个目录;{permanent}`,"grants.flow.presetNoDir":`已取消快捷授权:没有选择目录。`,"grants.flow.presetBadHosts":`快捷授权已取消:「{label}」的站点范围不合法。`,"grants.flow.cannotStart":`无法发起授权,请稍后重试`,"grants.flow.grantFailedRetry":`放宽失败,请稍后重试`,"grants.flow.revokedOne":`已撤销:{label}`,"grants.flow.revokedMany":`已撤销 {n} 项放宽权限`,"grants.flow.revoked":`已撤销放宽权限`,"grants.flow.revokeFailed":`撤销失败:{reason}`},g={...l,...u,...d,...f,...p,...m,...h},_={"common.brand":`Celestea Studio`,"common.language":`Language`,"common.language.zh":`中文`,"common.language.en":`English`,"common.language.hint":`Switch the interface language (session is not restarted)`,"common.language.changed":`Interface language switched to {name}`},v={"api.error.connect":`Cannot reach the service, please try again later`,"api.error.badRequest":`The request was invalid, please check and try again`,"api.error.forbidden":`You do not have permission to do that`,"api.error.unsupported":`This version does not support that action`,"api.error.conflict":`That action cannot be completed in the current state, please try again later`,"api.error.tooMany":`Too many requests, please try again later`,"api.error.server":`The service is temporarily unavailable, please try again later`,"api.error.generic":`The service could not complete the request, please try again later`},y={"statusline.tooltip":`Context usage · Model · Reasoning effort · Throughput · Cache hits`,"statusline.switched":`Switched`,"statusline.switchFailed":`Switch failed: {reason}`,"statusline.switchFailedRetry":`Switch failed, please try again later`,"statusline.withRestoredSettings":`{text} (previous setting restored)`,"statusline.withRestoredTier":`{text} (previous tier restored)`,"statusline.retryLater":`please try again later`,"statusline.sessionNotReady":`The current session is not ready yet, please try again later`,"statusline.contextUnsupported":`This version does not support viewing the context`,"statusline.statusUnavailable":`Status information is temporarily unavailable`,"statusline.currentModelTitle":`Current model: {model} (click to switch)`,"statusline.currentModelAria":`Current model {model}`,"statusline.effortTitle":`Reasoning effort: {effort} (click to switch)`,"statusline.effortAria":`Reasoning effort {effort}`,"statusline.standard":`Standard`,"statusline.tpsAria":`Throughput {text}`,"statusline.steps":`Step {n}`,"statusline.stepsNone":`— step`,"statusline.clickToSwitch":` (click to switch)`,"statusline.currentTag":`Current`,"statusline.unknown":`Unknown`,"statusline.goalBadge":`Goal {text}`,"statusline.goalTitle":`Current goal: {text}`,"statusline.mode.badgeTitle":`Work mode: {mode} (click to switch)`,"statusline.mode.title":`Switch work mode`,"statusline.mode.currentNote":`Current: {mode} mode · takes effect next turn`,"statusline.mode.switched":`Work mode switched · {note}`,"statusline.perm.badgeTitle":`Session permission tier: {tier} (click to switch)`,"statusline.perm.badgeAria":`Session permission tier {tier}`,"statusline.perm.title":`Session permission tier`,"statusline.perm.noSession":`No open session to switch`,"statusline.perm.rejected":`Switch failed: the service rejected this tier`,"statusline.perm.notAccepted":`Switch failed: the service did not accept this tier`,"statusline.perm.unsupported":`This version does not support switching the session permission tier`,"statusline.perm.unknownTier":`unknown tier`,"statusline.picker.currentSuffix":` (current)`,"statusline.picker.modelName":`Model name`,"statusline.picker.apply":`Apply`,"statusline.picker.enterModel":`Enter a model name`,"statusline.picker.candidates":`Candidate models`,"statusline.picker.fixed":`This session pins its model: switching only affects this session, not the global default`,"statusline.picker.other":`Other`,"statusline.perm.switched":`Session permission tier switched · takes effect next turn`,"statusline.picker.standardClear":`Standard (clear)`,"statusline.picker.switchModel":`Switch model`,"statusline.picker.switchEffort":`Switch reasoning effort`,"statusline.picker.configUnavailable":`Cannot read the current configuration, please try again later`,"statusline.picker.busy":`A turn is running; it will take effect after this turn`,"statusline.sessionModel.unsupported":`This version does not support switching this session model`,"statusline.sessionModel.switchedSession":`Session model switched`,"statusline.sessionModel.switchedGlobal":`Default model switched`,"statusline.ring.title":`Context usage {pct}% · {used}/{window}{click}`,"statusline.ring.unknown":`Usage unknown`,"statusline.ring.unknownTitle":`Context usage unknown · click to view full context`,"statusline.ring.noneTitle":`Context usage{click}`,"statusline.ring.clickFull":` (click to view full context)`,"statusline.cache.none":`Cache —`,"statusline.cache.noneTitle":`No cache hit data yet`,"statusline.cache.label":`Cache {pct}%`,"statusline.cache.title":`Latest request: hit {read} / input {prompt} tokens`,"statusline.cache.titleCumulative":`(cumulative {pct}%, hit {read} / input {prompt} tokens)`,"statusline.tps.idle":`No new sample this turn`,"statusline.tps.inactive":`The session is not running`,"statusline.tps.meanTitle":`{why} · showing the mean of the last {n} samples`},b={"settings.general.title":`General preferences`,"settings.general.note":`Interface language and other global preferences`,"settings.action.save":`Save`,"settings.action.reload":`Reload`,"settings.suffix.current":` (current)`,"settings.config.modelName":`Model name`,"settings.field.model":`Model`,"settings.config.modelNameHint":`Enter the model name manually`,"settings.config.effortStandard":`Standard (clear)`,"settings.config.effort":`Reasoning effort`,"settings.config.effortHint":`Empty = standard tier`,"settings.config.effortManual":`Enter the tier manually`,"settings.config.apiKeyPlaceholder":`Leave blank to keep the current key`,"settings.config.apiKeyHint":`Saved keys are never read back or shown`,"settings.config.contextWindowPlaceholder":`Default 1M (1000000 tokens)`,"settings.field.contextWindow":`Context window`,"settings.config.noLimit":`No limit`,"settings.field.maxOutputTokens":`Max output tokens`,"settings.config.notSet":`Not set`,"settings.field.maxSteps":`Max steps`,"settings.config.systemPromptPlaceholder":`System prompt (blank = keep default)`,"settings.field.systemPrompt":`System prompt`,"settings.config.systemPromptHint":`Instruction prefix sent to the model`,"settings.config.notAValidNumber":`"{name}" is not a valid number`,"settings.config.saving":`Saving…`,"settings.config.saveFailedRetry":`Save failed, please try again`,"settings.config.saved":`Saved`,"settings.config.busySave":`A turn is still running; please save after it finishes.`,"settings.config.unsupportedSave":`This version does not support saving configuration online; please upgrade and try again`,"settings.config.saveFailed":`Save failed: {reason}`,"settings.config.unavailable":`Configuration is temporarily unavailable`,"settings.providers.listUnavailable":`The provider list is temporarily unavailable`,"settings.providers.add":`Add provider`,"settings.tools.empty":`No tools retrieved`,"settings.field.name":`Name`,"settings.field.description":`Description`,"settings.tools.unavailable":`The tool list is temporarily unavailable`,"settings.prompts.varCurrentModel":`Current model`,"settings.field.provider":`Provider`,"settings.prompts.varApiUrl":`API URL`,"settings.prompts.varWorkspaceName":`Workspace name`,"settings.prompts.varSessionTitle":`Session title`,"settings.prompts.varToolList":`Tool list`,"settings.prompts.varCurrentDate":`Current date`,"settings.scope.global":`Global`,"settings.scope.workspace":`Workspace`,"settings.prompts.emptyGlobal":`No global prompts yet · click "New prompt" to create one`,"settings.prompts.emptyWorkspace":`This workspace has no prompts yet · click "New prompt" to create one`,"settings.prompts.scope":`Scope`,"settings.field.status":`Status`,"settings.field.actions":`Actions`,"settings.tag.active":`Active`,"settings.tag.default":`Default`,"settings.action.edit":`Edit`,"settings.action.delete":`Delete`,"settings.action.cancel":`Cancel`,"settings.prompts.setDefault":`Set as default`,"settings.prompts.setDefaultDone":`Set as default: {name}`,"settings.prompts.setDefaultFailed":`Failed to set as default: {reason}`,"settings.prompts.deleteTitle":`Delete prompt`,"settings.prompts.confirmDelete":`Delete prompt "{name}"?`,"settings.prompts.deleted":`Deleted: {name}`,"settings.prompts.deleteFailed":`Delete failed: {reason}`,"settings.prompts.legend":`"Active" = the prompt in use by the current session · "Default" = the default for new sessions`,"settings.prompts.editTitle":`Edit prompt: {name}`,"settings.prompts.newPrompt":`New prompt`,"settings.prompts.variables":`Available variables`,"settings.prompts.promptName":`Prompt name`,"settings.prompts.noSegmentEdit":`Segment editing is not supported yet; you can save the whole prompt directly`,"settings.prompts.inherit":`Inherit`,"settings.prompts.inheritedFromBuiltin":` (inherited from the built-in template)`,"settings.prompts.overridePlaceholder":`Override the template text…`,"settings.prompts.nameRequired":`The name cannot be empty`,"settings.prompts.segmentNoOverride":`Segment "{name}" has no override text: fill it in, or check "Inherit" to restore the parent template`,"settings.common.checkInput":`Please check the entered values`,"settings.prompts.saved":`Saved: {name}`,"settings.prompts.saveFailed":`Save failed: {reason}`,"settings.prompts.unsupported":`This version does not support prompt management`,"settings.permissions.unsandboxedNote":`Unsandboxed mode only takes effect when the deployment enables CELESTEA_GRANTS_UNSANDBOXED`,"settings.permissions.toolNoWrite":`File writes disabled`,"settings.permissions.toolDisabled":`Tool {name} disabled`,"settings.permissions.networkOn":`Network access`,"settings.permissions.networkOff":`No network`,"settings.permissions.workspaceOn":`Workspace writable`,"settings.permissions.workspaceOff":`Workspace read-only`,"settings.permissions.toolRootOn":`Tool root writable`,"settings.permissions.toolRootOff":`Tool root read-only`,"settings.permissions.allPathsOn":`All directories read-write`,"settings.permissions.allPathsOff":`Limited to authorized directories`,"settings.permissions.noExtraRoots":`No extra writable directories`,"settings.permissions.extraRoots":`{n} extra writable directories`,"settings.permissions.unsandboxedOn":`Unsandboxed`,"settings.permissions.unsandboxedOff":`Sandboxed`,"settings.permissions.noToolDeny":`No tools disabled`,"settings.permissions.maxNote":`Runtime cap: {max} (higher tiers are narrowed to it)`,"settings.permissions.riskNetwork":`This tier allows network access`,"settings.permissions.riskAllPaths":`This tier can read and write the whole machine; use at your own risk`,"settings.permissions.rejected":`The service rejected this preset`,"settings.permissions.opRejected":`The service rejected that action`,"settings.permissions.savedCustom":`Custom preset saved`,"settings.permissions.deleted":`Deleted "{label}"`,"settings.permissions.saveFailed":`Save failed: {reason}`,"settings.permissions.deleteFailed":`Delete failed: {reason}`,"settings.common.retryLater":`please try again later`,"settings.permissions.builtin":`Built-in`,"settings.permissions.extraRootsLabel":`Extra writable directories`,"settings.permissions.unavailable":`Permission presets are temporarily unavailable`,"settings.permissions.emptyCustom":`No custom presets yet; use "New preset" above to compose one.`,"settings.plugins.hostEmpty":`The server provides no plugin list`,"settings.plugins.hostBadge":`Server built-in · cannot be hot-swapped in-process`,"settings.plugins.clientTitle":`Client plugins`,"settings.plugins.clientNote":`Toggles take effect immediately and persist after reload`,"settings.plugins.hostTitle":`Server plugins`,"settings.plugins.hostNote":`Read-only list`,"settings.plugins.hostUnavailable":`The host plugin list is temporarily unavailable`,"settings.archive.empty":`No archived sessions`,"settings.archive.restoreConfirm":`Restore "{label}" back to the session list?`,"settings.archive.deleteConfirm":`Delete archived session "{label}"? You can recover it from the recycle directory afterwards.`,"settings.action.restore":`Restore`,"settings.action.add":`Add`,"settings.providers.idPlaceholder":`Provider id (letters/digits/underscore)`,"settings.providers.notePlaceholder":`Note (optional)`,"settings.providers.note":`Note`,"settings.providers.keyPlaceholderExisting":`Leave blank = keep the existing key`,"settings.providers.requestTest":`Test request`,"settings.providers.apiUrl":`API request URL`,"settings.providers.requestFormat":`Request format`,"settings.providers.fetchModels":`Fetch models`,"settings.providers.fetchModelsHint":`Fetch available models from the provider (saves the current form first)`,"settings.providers.addModel":`+ Add model`,"settings.providers.testing":`Testing…`,"settings.providers.testFailed":`Test failed: {reason}`,"settings.common.checkUrlKey":`Please check the request URL and key`,"settings.providers.testOk":`✓ Latency {ms}ms · Models: {n}`,"settings.providers.needId":`Please fill in the provider name (used as the id) first`,"settings.providers.savingAndFetching":`Saving and fetching models…`,"settings.providers.fetchFailed":`Failed to fetch models: {reason}`,"settings.providers.noModelsFetched":`No models were fetched`,"settings.providers.fetched":`Fetched {n} models · check the ones to add`,"settings.providers.added":`Added {n} models (of {total} fetched) · save to apply`,"settings.providers.noneSelected":`No models selected (of {n} fetched) · save to apply`,"settings.providers.idRequired":`The name (id) cannot be empty`,"settings.providers.saveFailed":`Save failed: {reason}`,"settings.providers.empty":`No providers yet · click "Add provider" above to create one`,"settings.providers.defaultModel":`Default model`,"settings.providers.defaultApplied":`Default model switched`,"settings.providers.defaultNote":`Takes effect immediately`,"settings.providers.currentDefault":`Current default`,"settings.providers.defaultNotInList":`{model} (current default, not in the list)`,"settings.providers.applyingDefault":`Applying the default model…`,"settings.providers.switchFailed":`Switch failed: {reason}`,"settings.action.remove":`Remove`,"settings.action.confirm":`Confirm`,"settings.providers.modelId":`Model id`,"settings.providers.modelDisplayName":`Display name`,"settings.providers.advanced":`Advanced (reasoning effort / context / max output)`,"settings.providers.addEffortTier":`Add a custom reasoning tier (e.g. xhigh)`,"settings.providers.customTierPlaceholder":`Custom tier name (e.g. xhigh)`,"settings.providers.tierExists":`Tier already exists: {tier}`,"settings.providers.contextPlaceholder":`Context window (e.g. 1000000 / 1m / 128k)`,"settings.providers.maxOutPlaceholder":`Max output tokens (e.g. 8192 / 8k)`,"settings.providers.reasoningEffort":`Reasoning effort`,"settings.providers.modelContext":`Model context`,"settings.providers.expandHint":`Click to expand/collapse inline editing`,"settings.providers.deleteTitle":`Delete provider`,"settings.providers.confirmDelete":`Delete provider "{name}"?`,"settings.providers.deleteFailed":`Delete failed: {reason}`,"settings.providers.pickTitle":`Choose models to add`,"settings.providers.pickNote":`Check the models to add (none are checked by default; existing models cannot be added twice)`,"settings.providers.pickCount":`{n} / {total} selectable models selected`,"settings.providers.pickExisting":`Already present`,"settings.providers.keyConfigured":`Key configured`,"settings.permissions.idHint":`Start with a lowercase letter; use only lowercase letters, digits, underscores or hyphens`,"settings.permissions.rootsHint":`Extra writable directories: absolute paths that still need writing outside the workspace and tool root`,"settings.permissions.toolsHint":`Checking a tool removes it from this tier's session tool surface`,"settings.permissions.noExtraRootsAdded":`No extra writable directories added`,"settings.permissions.rootPlaceholder":`Absolute path, e.g. /srv/data`,"settings.permissions.chooseDir":`Choose directory`,"settings.permissions.chooseExtraDir":`Choose an extra writable directory`,"settings.permissions.toolsNotLoaded":`The tool list was not retrieved; you can reload later`,"settings.permissions.toolsUnavailableReload":`The tool list is temporarily unavailable; you can reload later`,"settings.permissions.idPlaceholder":`e.g. deploy-docs`,"settings.permissions.labelPlaceholder":`Tier display name`,"settings.permissions.allPathsRisk":`Read-write on the whole machine; use at your own risk`,"settings.permissions.unsandboxedDeclare":`Unsandboxed (declared)`,"settings.permissions.saveIdRequired":`Please fill in the preset id`,"settings.permissions.idInvalid":`Preset id: {hint}`,"settings.permissions.newTitle":`New custom preset`,"settings.permissions.editTitle":`Edit custom preset: {id}`,"settings.permissions.idField":`Preset id`,"settings.permissions.idLocked":`The id cannot be changed while editing`,"settings.permissions.labelField":`Display name`,"settings.permissions.labelHint":`Leave blank to use the id as the display name`,"settings.permissions.switches":`Capability switches`,"settings.permissions.toolsField":`Disabled tools`,"settings.permissions.deleteTitle":`Delete custom preset`,"settings.permissions.deleteConfirm":`Delete "{name}"? Sessions still using this tier will fall back to the default tier.`,"settings.permissions.newPreset":`New preset`,"settings.permissions.unavailableReason":`Permission presets are temporarily unavailable: {reason}`,"settings.batch.reasonUnknownWorkspace":`The workspace no longer exists, so it cannot be processed`,"settings.batch.reasonUnknownSession":`That session no longer exists (it may have been deleted)`,"settings.batch.unknownTail":`(unknown)`,"settings.batch.rest":` ({n} succeeded)`,"settings.batch.failedOne":`{verb} failed: {reason}{rest}`,"settings.batch.failedMany":`{verb} failed for {n} items: {head}{shown}{more}{rest}`,"settings.batch.more":` and {n} more`,"settings.batch.listSep":`, `,"settings.batch.headSep":`{reason}; `,"settings.archive.unavailable":`Archived sessions are temporarily unavailable`,"settings.archive.restoreTitle":`Restore archived session`,"settings.archive.deleteTitle":`Delete archived session`,"settings.archive.restored":`Session restored: {name}`,"settings.archive.deleted":`Session deleted: {name}`,"settings.archive.failed":`{verb} failed: {reason}`},x={"chat.think.foldedHint":`Thinking is collapsed; click to expand`,"chat.think.title":`Thinking`,"chat.think.thinking":`Thinking…`,"chat.tool.title":`Tool`,"chat.tool.step":`Step {n}`,"chat.tool.running":`Running`,"chat.tool.copy":`Copy`,"chat.tool.copyHint":`Copy the arguments and result (JSON)`,"chat.tool.args":`Arguments: {text}`,"chat.tool.argsNone":`Arguments: —`,"chat.tool.preview":`Preview`,"chat.tool.previewHint":`Preview this file in the side panel`,"chat.tool.failed":`Failed`,"chat.tool.done":`Done`,"chat.tool.result":`Result: {text}`,"chat.tool.denied":`Denied`,"chat.tool.ask":`Needs confirmation`,"chat.rail.folded":`{n} earlier turns are folded`,"chat.rail.barHint":`Turn {n} · hover to preview, click to jump`,"chat.rail.noReply":`(no reply)`,"chat.rail.centerOutside":`Viewport center · outside these turns`,"chat.rail.centerFolded":`{n} earlier turns (viewport center)`,"chat.rail.centerNear":`Near turn {n} (viewport center)`,"chat.msg.system":`System`,"chat.empty.hint":`Type a message below to start · Enter to send · Shift+Enter for a new line`,"chat.user.you":`You`,"chat.user.steering":`Interjection`,"chat.user.queued":`Queued`,"chat.user.truncatedSuffix":` · truncated`,"chat.inbox.skill":`Skill catalog`,"chat.inbox.memory":`Memory · injected every turn`,"chat.inbox.receipt":`Receipt`,"chat.inbox.compact":`Compaction summary`,"chat.inbox.receiptSource":`Receipt · {source}`,"chat.lane.nextStep":`Delivered at the next step`,"chat.lane.nextTurn":`Delivered on the next turn`,"chat.quote.label":`Quote {n}`,"chat.quote.tool":`Tool`,"chat.quote.toolNamed":`Tool {name}`,"chat.quote.max":`Quote limit reached (at most 8)`,"chat.quote.duplicate":`This passage is already quoted`,"chat.quote.add":`Quote`,"chat.quote.addHint":`Add the selection as a quote to the next message`,"chat.quote.addAria":`Quote the selected content`,"chat.quote.empty":`(empty quote)`,"chat.quote.removeHint":`Remove this quote`,"chat.quote.removeAria":`Remove quote: {label}`,"chat.preview.manager":`File manager`,"chat.preview.target":`Target file: {path}`,"chat.preview.chooseDir":`Choose this directory`,"chat.preview.busy":`Working…`,"chat.preview.close":`Close preview`,"chat.preview.copyPath":`Copy path`,"chat.preview.openInManager":`Open in the file manager`,"chat.preview.degradeImage":`This image's bytes are not in this session, so it cannot be zoomed`,"chat.preview.badgeImage":`Image cannot be previewed`,"chat.preview.degradeNotInSession":`This file's content is not in this session (only content that appeared in the session can be previewed)`,"chat.preview.badgeNotInSession":`Content not in session`,"chat.preview.degradeBinary":`This is binary content and cannot be previewed as text`,"chat.preview.badgeBinary":`Binary content`,"chat.preview.degradeTooLarge":`The file is too large to preview fully here`,"chat.preview.badgeTooLarge":`File too large`,"chat.preview.degradeUnsupported":`This type cannot be previewed yet; copy the path and open it in the file manager`,"chat.preview.badgeUnsupported":`Unsupported type`,"chat.preview.truncated":`Truncated (only the first part is shown)`,"chat.preview.degradeReadFailed":`This file cannot be read right now, please try again later`,"chat.command.run.desc":`Run a command directly; the output goes into the conversation (without the model)`,"chat.command.run.args":`<command>`,"chat.command.run.usage":`Usage: /run <command>, e.g. /run echo hi`,"chat.command.goal.desc":`Set a persistent goal that is visible every turn; /goal done clears it`,"chat.command.goal.args":`[goal | done]`,"chat.command.goal.none":`There is no goal yet; set one with /goal <goal>`,"chat.command.goal.current":`Current goal: {text}`,"chat.command.goal.set":`Goal set: {text}`,"chat.command.goal.cleared":`Goal cleared`,"chat.command.goal.saveFailed":`The goal was not saved, please try again later`,"chat.command.model.desc":`Switch the model used by this session`,"chat.command.model.args":`<model name>`,"chat.command.model.usage":`Usage: /model <model name>`,"chat.command.model.switched":`Session model switched`,"chat.command.model.busy":`The turn has not finished; the switch will be retried automatically`,"chat.command.compact.desc":`Compact the current session's context to free up space`,"chat.command.unknown":`Unknown command: /{name} (type / to see all commands)`,"chat.mention.dir":`Directory`,"chat.mention.file":`File`,"chat.mention.noWorkspace":`The current workspace is not clear yet, so files cannot be listed`,"chat.mention.unavailable":`File listing is temporarily unavailable, please try again later`,"chat.mention.openFailed":`This directory cannot be opened: {reason}`,"chat.mention.truncated":`This directory has too many entries; only the first part is shown`,"chat.goal.failed":`Setting failed`,"chat.goal.saveFailed":`The goal was not saved: {reason}`,"chat.goal.tag":`Goal`,"chat.goal.done":`Done`,"chat.goal.clearHint":`Clear the current goal`,"chat.run.signal":`Terminated by signal ({signal})`,"chat.run.exitUnknown":`Exit code unknown`,"chat.run.exit":`Exit code {code}{status}`,"chat.run.success":` (succeeded)`,"chat.run.failure":` (failed)`,"chat.run.netIsolated":`Network isolated`,"chat.run.netOnline":`Network access`,"chat.run.tmpPrivate":`Private temp directory`,"chat.run.seccomp":`Syscall filtering`,"chat.run.cmd":`Command`,"chat.run.stdout":`Output`,"chat.run.stderr":`Error output`,"chat.run.noOutput":`(no output)`,"chat.run.unsupported":`This version does not support running commands directly; please upgrade and try again`,"chat.run.failed":`The command did not start: {reason}`,"chat.question.answered":`Answered`,"chat.question.expired":`Timed out · unanswered (the model continued on timeout)`,"chat.question.closed":`This question is closed; no answer is needed (it timed out or was answered elsewhere)`,"chat.question.submit":`Submit answer`,"chat.question.missing":`{n} question(s) are still unanswered: pick one option each, or type your own`,"chat.question.answeredWith":`Answered: {answer}`,"chat.question.submitFailed":`Submit failed: {reason} (retryable)`,"chat.question.needDecision":`Your decision is needed`,"chat.question.planReview":`Plan review`,"chat.question.title":`Question`,"chat.question.interrupted":`Unanswered · this question can no longer be answered (the session was interrupted)`,"chat.question.customPlaceholder":`You can also type your own (optional)`,"chat.question.customRequired":`Please type your answer`,"chat.question.timedOut":`Timed out`,"chat.question.seconds":`{n}s left`,"chat.question.clock":`{m}:{s} left`,"chat.question.hoursMinutes":`{h}h {m}m left`,"chat.question.answerSep":`, `,"chat.question.answerJoin":`; `,"chat.question.customQuote":`"{text}"`,"chat.attach.imageEntryDisabled":`Image attachments are not enabled on this service`,"chat.attach.modelNoImages":`Model "{model}" does not accept images, so the image entry is disabled; add "image" in the model settings or switch to an image-capable model.`,"chat.attach.downgradeDefault":`The model rejected the image input; this turn continued with text only and the image was not delivered to the model.`,"chat.attach.suggestSwitch":`You can switch to: {models}`,"chat.attach.maxCount":`At most {n} attachments (images and text combined)`,"chat.attach.maxBytes":`Each image must be at most {size}`,"chat.attach.imageName":`Image`,"chat.attach.readFailed":`Failed to read the attachment(s) ({names}); this turn was aborted`,"chat.attach.unknownFile":`unknown file`,"chat.attach.expand":`Expand attachments`,"chat.attach.collapse":`Collapse attachments`,"chat.attach.count":`Attachments {n}`,"chat.attach.textGlyph":`T`,"chat.attach.textSuffix":` · text`,"chat.attach.removeText":`Remove this text file`,"chat.attach.removeImage":`Remove this image`,"chat.attach.textFile":`Text file`,"chat.attach.imageGlyph":`I`,"chat.attach.glyphFallback":`A`,"chat.attach.textTooLarge":`Text files must be at most {size} (currently {current})`,"chat.attach.textOnlySupport":`Only images and text files (.md / .txt / .json, etc.) are supported; each text must be at most {size}`,"chat.attach.emptyFile":`An empty file has nothing to send`,"chat.attach.notUtf8":`Not readable UTF-8 text (binary files are not supported)`,"chat.attach.unknownType":`unknown type`,"chat.ctx.title":`Full context`,"chat.ctx.readonly":`Read-only`,"chat.ctx.close":`Close`,"chat.ctx.foot":`Read-only snapshot · nothing is sent or changed`,"chat.ctx.footWithSession":`Session {id} · Read-only snapshot · nothing is sent or changed`,"chat.ctx.truncatedSuffix":` · some entries were truncated`,"chat.ctx.loadFailed":`The context cannot be read right now, please try again later`,"chat.ctx.currentModel":`Current model: {model}`,"chat.ctx.usageTitle":`Context usage (used / capacity)`,"chat.ctx.estimated":`Estimated`,"chat.ctx.counts":`System {sys} chars · Tools {tools} · Messages {msgs}`,"chat.ctx.countsTitle":`Number of items in this turn's context`,"chat.ctx.systemPrompt":`System prompt`,"chat.ctx.chars":`{n} chars`,"chat.ctx.empty":`(empty)`,"chat.ctx.toolList":`Tool list`,"chat.ctx.count":`{n}`,"chat.ctx.partialTruncated":`Partially truncated`,"chat.ctx.noTools":`No tools available this turn`,"chat.ctx.unnamed":`(unnamed)`,"chat.ctx.truncatedBadge":`Truncated`,"chat.ctx.noSchema":`No parameter schema`,"chat.ctx.schemaUnavailable":`The parameter schema cannot be displayed`,"chat.ctx.roleUser":`User`,"chat.ctx.roleAssistant":`Assistant`,"chat.ctx.roleTool":`Tool result`,"chat.ctx.roleOther":`Other`,"chat.ctx.messages":`Message flow`,"chat.ctx.countItems":`{n} items`,"chat.ctx.noMessages":`No messages in this turn yet`,"chat.ctx.callId":`Call id: {id}`,"chat.ctx.noDescription":`(no description)`,"chat.fsbrowse.pathPlaceholder":`Directory path (editable, then Go)`,"chat.fsbrowse.go":`Go`,"chat.fsbrowse.root":`Root /`,"chat.fsbrowse.unavailable":`File browsing is temporarily unavailable · type a path below`,"chat.fsbrowse.fallback":`Edit the path at the bottom, click "Go", then confirm`,"chat.fsbrowse.failed":`Browse failed: {reason}`,"chat.fsbrowse.manualPath":`please type the directory path`,"chat.fsbrowse.selected":`Directory selected: {path}`,"chat.fsbrowse.noSubdirs":`(no subdirectories)`,"chat.fsbrowse.needPath":`Please choose or type a directory path first`,"chat.wb.urlPlaceholder":`Enter a URL, e.g. example.com`,"chat.wb.open":`Open`,"chat.wb.openExternal":`Open in a new tab`,"chat.wb.frameBlocked":`This site may not allow embedding (page security policy); click "Open in a new tab"`,"chat.wb.noWorkspace":`The current workspace is not clear yet, so the file manager cannot be opened`,"chat.wb.listUnavailable":`File listing is temporarily unavailable, please try again later`,"chat.wb.dirOpenFailed":`This directory cannot be opened: {reason}`,"chat.wb.up":`↑ Up`,"chat.wb.dirTruncated":`This directory has too many entries; only the first part is shown`,"chat.wb.dirEmpty":`(this directory is empty)`,"chat.wb.menu.files":`File manager`,"chat.wb.menu.filesDesc":`Browse the current workspace's folders and files`,"chat.wb.menu.terminal":`Terminal`,"chat.wb.menu.terminalDesc":`Run one command; the output goes into the panel`,"chat.wb.menu.browser":`Browser`,"chat.wb.menu.browserDesc":`Open a web page`,"chat.wb.dockBottom":`Dock to bottom`,"chat.wb.dockRight":`Dock to right`,"chat.wb.close":`Close panel`,"chat.wb.term.note":`One-shot execution (not an interactive terminal): type a command and press Enter to run it.`,"chat.wb.term.placeholder":`Type a command, e.g. ls -la`,"chat.wb.term.run":`Run`,"chat.wb.term.running":`Running`,"chat.wb.term.signal":`Signal {signal}`,"chat.wb.term.exitCode":`Exit code {code}`,"chat.wb.term.unsupported":`This version does not support running commands directly`,"chat.wb.term.notStarted":`The command did not start`,"chat.input.placeholderIdle":`Type a message; Enter to send, Shift+Enter for a new line`,"chat.input.placeholderSteer":`Enter to interject (delivered at the next step) · Ctrl/Cmd+Enter to queue (delivered on the next turn)`,"chat.input.placeholderQueue":`Enter to queue (delivered after this turn) · Ctrl/Cmd+Enter to interject (delivered at the next step)`,"chat.input.placeholderWorker":`Say something to the worker (it goes into its inbox; a new turn starts when it is idle)`,"chat.input.interject":`Interject`,"chat.input.queue":`Queue`,"chat.input.modeSteerTitle":`Current: interject (Enter) · delivered at the next step · click to switch to queue`,"chat.input.modeQueueTitle":`Current: queue (Enter) · delivered after this turn · click to switch to interject`,"chat.input.send":`Send`,"chat.input.sendWorkerTitle":`Send to the worker's inbox (Enter)`,"chat.input.steerTitle":`Interject (Enter): inject into the running turn, delivered at the next step`,"chat.input.queueTitle":`Queue (Enter): delivered as the next turn after this one ends`,"chat.input.sendTitle":`Send (Enter)`,"chat.input.attachTitle":`Add attachments (images / text files; paste, drag or choose)`,"chat.input.attachAria":`Add attachments`,"chat.input.rejectedCount":`{n} files do not meet the requirements and are marked red in the pending area`,"chat.send.busyWithAttachments":`This turn has not finished: attachments can be sent after it ends (interjections are text only)`,"chat.send.starting":`Starting…`,"chat.send.running":`Running…`,"chat.send.workerNoImages":`Worker sessions do not accept image attachments (the inbox is text only)`,"chat.send.delivering":`Sending · waiting for delivery…`,"chat.send.workerSettled":`Delivered · that worker has ended ({status}); the message stays in its inbox`,"chat.send.workerDelivered":`Delivered · it will be handled as a turn for that worker`,"chat.send.workerSettledShort":`Delivered (that worker has ended)`,"chat.send.workerDeliveredShort":`Delivered to worker`,"chat.send.notDelivered":`Not delivered ({reason}): the content was restored to the input box`,"chat.send.failedPrefix":`Send failed: `,"chat.send.failedRolledSuffix":`; the pending content was restored, you can retry`,"chat.send.queuedWaiting":`Queued · waiting for this turn to end…`,"chat.send.interjectedWaiting":`Interjected · waiting for delivery…`,"chat.send.queuedDone":`Queued · delivered after this turn`,"chat.send.interjectedDone":`Interjected · delivered at the next step`,"chat.send.queuedShort":`Queued; delivered after this turn`,"chat.send.interjectedShort":`Interjected; delivered at the next step`,"chat.send.asNewTurn":`Sent as a new turn`,"chat.send.queueUnsupported":`This version does not support queueing → delivered as an interjection{lane}`,"chat.send.laneSuffix":` ({lane})`,"chat.send.queueNotDelivered":`Queue not delivered ({reason}): the content was restored to the input box`,"chat.send.steerNotDelivered":`Interjection not delivered ({reason}): the content was restored to the input box`,"chat.phase.cancelled":`Cancelled`,"chat.phase.error":`Error`,"chat.phase.running":`Running…`,"chat.status.turnError":`This turn failed: {reason}`,"chat.status.unknownError":`unknown error`,"chat.status.lagged":`Some output was merged due to network lag`,"chat.status.contextEvent":`Context event`,"chat.status.cancelling":`Cancelling…`,"chat.status.cancelFailed":`Cancel failed: {reason}`,"chat.status.disconnected":`Cannot reach the service`,"chat.version.title":`Celestea Studio · built at {time} · {version}{dirty}`,"chat.version.dirty":` · uncommitted workspace changes`,"theme.mono.label":`Monochrome`,"theme.mono.hint":`Monochrome Instagram style · pure greyscale light, no color accents`,"theme.dark.label":`Dark`,"theme.dark.hint":`Layered dark grey · semantic token override`,"theme.title":`Theme · {hint}{suffix}`,"theme.clickToSwitch":` (click to switch)`,"theme.onlyTheme":` (the only theme)`,"plugins.notFound":`Plugin not found; nothing changed.`,"plugins.toggleFailed":`Failed to toggle "{label}"; the previous state was restored.`,"plugins.toggled":`{state} "{label}"`,"plugins.on":`Enabled`,"plugins.off":`Disabled`,"plugins.desc.textCard.label":`Text card`,"plugins.desc.textCard.hint":`Show hint text in a card on hover; when off, fall back to the browser's built-in tooltip.`,"plugins.desc.railPreview.label":`Preview card`,"plugins.desc.railPreview.hint":`Show a message preview on hovering the left rail; when off, fall back to the text card.`},ee={"shell.tree.selectedCount":`{n} session(s) selected`,"shell.tree.selectedZero":`0 sessions selected`,"shell.tree.batchDeleteTitle":`Delete in bulk`,"shell.tree.batchDeleteConfirm":`Delete {n} sessions? You can recover them from the recycle directory afterwards.`,"shell.tree.deletedCount":`Deleted {n} sessions`,"shell.tree.batchDeleteFailed":`Bulk delete failed: {reason}`,"shell.tree.switchedTo":`Switched to session: {title}`,"shell.tree.switched":`Session switched`,"shell.tree.viewOpenActivateFailed":`View opened · could not activate`,"shell.tree.viewOpenFailed":`View opened · {reason}`,"shell.tree.runningViewOpen":`That session is running (view opened · live stream visible)`,"shell.tree.archiveTitle":`Archive session`,"shell.tree.archiveConfirm":`Archive session "{label}"?`,"shell.tree.archiveOk":`Archive`,"shell.tree.archived":`Session archived: {label}`,"shell.tree.archiveFailed":`Archive failed: {reason}`,"shell.tree.deleteTitle":`Delete session "{label}"`,"shell.tree.deleteConfirm":`You can recover it from the recycle directory afterwards. Confirm?`,"shell.tree.deletedSession":`Session deleted: {label}`,"shell.tree.deleteFailed":`Delete failed: {reason}`,"shell.tree.renamePrompt":`Rename session (new title)`,"shell.tree.renameFailed":`Rename failed: {reason}`,"shell.tree.branchPrompt":`Branch session (new branch title, optional)`,"shell.tree.branchFailedRetry":`Branch failed, please try again later`,"shell.tree.branched":`Branch created`,"shell.tree.branchFailed":`Branch failed: {reason}`,"shell.tree.deleteWsTitle":`Delete workspace "{name}"`,"shell.tree.wsDeleted":`Workspace deleted: {name}`,"shell.tree.renameWsPrompt":`Rename workspace`,"shell.tree.running":`Running`,"shell.tree.idle":`Idle`,"shell.tree.grantDanger":`This session's permissions are relaxed (including dangerous capabilities): {n} items`,"shell.tree.grantRelaxed":`This session's permissions are relaxed: {n} items`,"shell.worker.title":`Background tasks`,"shell.tree.events":`{n} events`,"shell.worker.openHint":` (click to open this worker session view: read-only)`,"shell.worker.unlinked":`Unlinked parent session`,"shell.worker.parentHint":`Click to open the parent session view`,"shell.new.title":`New session`,"shell.new.titlePlaceholder":`Required`,"shell.field.title":`Title`,"shell.new.rootWorkspace":`root (default workspace)`,"shell.new.followDefault":`Follow the default`,"shell.new.noModels":`(no models available)`,"shell.new.modelsUnavailable":`(model list temporarily unavailable)`,"shell.field.mode":`Work mode`,"shell.field.prompt":`Prompt`,"shell.action.create":`Create`,"shell.new.titleRequired":`The title cannot be empty`,"shell.new.creating":`Creating…`,"shell.new.rejected":`The service rejected that action`,"shell.new.createdRefresh":`The session was created; refresh the list and open it manually`,"shell.new.createdOpened":`Session created and opened: {title}`,"shell.new.activateFailed":`could not activate`,"shell.new.failed":`Create failed: {reason}`,"shell.new.wsTitle":`New workspace · choose a directory`,"shell.new.wsNote":`Selecting a directory registers it as a workspace (name = folder name)`,"shell.new.wsBusy":`Registering…`,"shell.new.wsFallback":`Edit the path at the bottom and click "Go", or type a name + path to create`,"shell.new.wsRegisterFailed":`Registration failed: {reason}`,"shell.new.wsCheckPath":`Please check the directory path`,"shell.new.wsRegistered":`Workspace registered: {path}`,"mode.badge.standard":`Standard`,"mode.badge.execution":`Execution`,"mode.choice.standard":`Standard mode`,"mode.choice.execution":`Execution mode (PTC)`,"mode.note.applied":`Takes effect next turn`,"mode.note.busy":`A turn is running; the mode cannot be switched`,"mode.note.unsupported":`This version does not support switching the work mode`,"mode.note.invalid":`Invalid work mode value; please choose again`,"shell.topbar.config":`Settings`,"shell.topbar.configTitle":`Runtime settings (model / reasoning effort / keys, etc.)`,"shell.topbar.workbenchTitle":`Open a panel (file manager / terminal / browser)`,"shell.topbar.workbenchAria":`Open a panel`,"shell.topbar.versionTitle":`Celestea Studio build version`,"shell.tree.newSession":`New session`,"shell.tree.searchPlaceholder":`Search workspaces/sessions`,"shell.tree.sortTitle":`Sort: {label} · click to switch`,"shell.tree.sortRecent":`Recently active`,"shell.tree.newWorkspace":`New workspace`,"shell.tree.unnamed":`(untitled)`,"shell.tree.workerBadgeTitle":`This session has {n} worker child sessions`,"shell.tree.clickCheck":` (click to check)`,"shell.tree.clickOpen":` (click to open)`,"shell.tree.sessionOps":`Session actions`,"shell.tree.currentSession":`Current session`,"shell.tree.open":`Open`,"shell.tree.rename":`Rename`,"shell.tree.branch":`Branch`,"shell.tree.workspaceOps":`Workspace actions`,"shell.tree.batchDeleteSessions":`Delete sessions in bulk`,"shell.tree.deleteWorkspace":`Delete workspace`,"shell.tree.deleteSelected":`Delete selected`,"shell.sidebar.expand":`Expand`,"shell.sidebar.collapse":`Collapse`,"shell.sidebar.expandTitle":`Expand the left panel`,"shell.sidebar.collapseTitle":`Collapse the left panel`,"shell.sessbar.unresolved":`Current session (unresolved)`,"shell.sessbar.idle":`Idle`,"shell.sessbar.session":`Session`,"shell.sessbar.unresolvedShort":`(unresolved)`,"shell.sessbar.background":`Running in background`,"shell.sessbar.others":`{n} other sessions are running:`,"shell.sessbar.switchTo":`Switch to {name}`,"shell.sessbar.thatSession":`that session`,"shell.sessions.unavailable":`The session list is temporarily unavailable`,"shell.sessions.noMatch":`No matches`,"shell.sessions.empty":`No sessions yet · click "New session" to create one`,"shell.status.turn":`Turn {n}`,"shell.status.turnNone":`Turn —`,"shell.status.online":`Ready · online`,"shell.status.reconnecting":`Reconnecting…`,"shell.worker.stripHint":` (click to open this worker session and talk to it directly)`,"shell.worker.stripTitle":`Background tasks · {n} running`,"shell.worker.stripTitlePlain":`Background tasks`,"shell.restore.orphanResult":`Tool result (no matching call record):`,"shell.restore.unavailable":`History restore is temporarily unavailable`,"shell.restore.folded":`Earlier history is folded · showing only the last {n}`,"shell.restore.noResult":`(no result record)`,"shell.restore.sessionStart":`Below is this session`,"shell.restore.earlier":`Above are earlier messages`,"shell.restore.noActive":`No active session found · it will be created after you send the first message`,"shell.chatcol.label":`Column width`,"shell.chatcol.hint":`Drag to resize the text column · double-click to reset`,"shell.compact.done":`Context compacted`,"shell.compact.noSession":`Compaction failed: no active session found`,"shell.compact.busy":`Compacting…`,"shell.compact.notNeeded":`Not enough history; no compaction needed`,"shell.compact.historyDone":`History compacted`,"shell.compact.failed":`Compaction failed: {reason}`,"shell.confirm.result":`Applied result`,"shell.confirm.require":`Type "{word}" to confirm`,"shell.confirm.requireHint":`The confirm button unlocks after you type it exactly`},te={"grants.cap.network.label":`Network access`,"grants.cap.network.impact":`Allow commands running in the session to reach the internet and intranet (including local services).`,"grants.cap.network.extra":`⚠ Valid until revoked.`,"grants.cap.writeRoots.label":`Extra writable directories`,"grants.cap.writeRoots.impact":`Allow the session to create and change files in the chosen directories.`,"grants.cap.readRoots.label":`Extra read-only directories`,"grants.cap.readRoots.impact":`Allow the session to read files in that directory (without changing them).`,"grants.cap.netHosts.label":`Access specific sites`,"grants.cap.netHosts.impact":`Add the following sites to the session's network allow list (widened by union, never narrowed; whether it takes effect depends on the deployment's site policy).`,"grants.cap.toolExtra.label":`Enable extra tools`,"grants.cap.toolExtra.impact":`Reserved capability: prepared for future browser/net tools; no tool consumes it yet, so granting has no effect.`,"grants.cap.unsandboxed.label":`Run with less isolation`,"grants.cap.unsandboxed.impact":`Allow commands in the session to run without extra isolation.`,"grants.ttl.min15":`15 minutes`,"grants.ttl.min30":`30 minutes`,"grants.ttl.hour1":`1 hour`,"grants.ttl.hour24":`24 hours`,"grants.permanent.label":`Permanent`,"grants.permanent.note":`can be revoked at any time`,"grants.permanent.text":`Permanent (can be revoked at any time)`,"grants.permanent.paren":` (permanent, can be revoked at any time)`,"grants.until.permanent":`valid until revoked`,"grants.until.at":`valid until {time}`,"grants.until.paren":` (valid until {time})`,"grants.preset.readWorkspace.label":`Read-only workspace`,"grants.preset.readWorkspace.hint":`Choose a directory (ideally this session's workspace) and read files in it without changing them; valid until revoked.`,"grants.preset.writeOutput.label":`Write to an output directory`,"grants.preset.writeOutput.hint":`Choose a directory (ideally the workspace's output directory) and create or change files in it; valid until revoked.`,"grants.preset.net.label":`Network`,"grants.preset.net.hint":`Reach the internet and intranet (including local services); valid until revoked.`,"grants.preset.localhost.label":`Local services`,"grants.preset.localhost.hint":`Reach the network and add localhost and 127.0.0.1 to the site allow list; valid until revoked.`,"grants.copy.listSep":`, `,"grants.copy.network":`Allow commands running in this session to reach the internet and intranet (including services running on this machine). This grant is {until}. Only grant it if you trust the commands about to run.`,"grants.copy.writeRoots":`Allow this session to create and change files in {roots}. Writes outside those directories are still denied. This grant is {until}.`,"grants.copy.unsandboxed":`Allow commands running in this session to bypass the extra filesystem and network isolation. Malicious or injected commands could read or change your files. This grant can be used only once and is {until}.`,"grants.copy.readRoots":`Allow this session to read {roots} (without changing them). This grant is {until}.`,"grants.copy.netHosts":`Allow this session to reach {hosts}. This grant is {until}.`,"grants.copy.toolExtra":`Allow this session to use {tools}. This grant is {until}.`,"grants.copy.presetHead":`This quick grant ({label}) relaxes {n} permissions in order:`,"grants.copy.presetBody":`· {label}: {text}`,"grants.copy.presetTailPermanent":`Expiry: {permanent}.`,"grants.copy.presetTailLimited":`Expiry: {list}.`,"grants.copy.previewPrefix":`After granting, this session can: `,"grants.copy.previewSuffix":`. All other permissions stay the same.`,"grants.copy.successPrefix":`Relaxed: `,"grants.scope.needHost":`Enter at least one site`,"grants.scope.hostCred":`Item {n} looks like a credential and cannot be submitted as a site`,"grants.scope.hostInvalid":`Item {n} is not a valid hostname, IP or CIDR`,"grants.scope.needTool":`Enter at least one tool name`,"grants.scope.toolCred":`Item {n} looks like a credential and cannot be submitted`,"grants.scope.toolInvalid":`Item {n} is not a valid tool name`,"grants.body.title":`This session's permissions`,"grants.body.noSession":`No session is open yet: choose one on the left first.`,"grants.body.introDefault":`By default this session can only read and write in the workspace directory and cannot reach the network.`,"grants.body.introScope":`The grants below apply only to this session and can be revoked at any time; changes take effect when the session's next turn starts.`,"grants.body.previewLabel":`Result preview`,"grants.body.unreadable":`This session's permissions cannot be read right now, please try again later.`,"grants.body.footNote":`Changes take effect when the session's next turn starts.`,"grants.body.revokeAll":`Revoke all`,"grants.phrase.default":`This session can only read and write in the workspace directory and cannot reach the network.`,"grants.phrase.canNow":`This session can now: `,"grants.phrase.suffix":`. All other permissions stay the same.`,"grants.phrase.network":`reach the internet and intranet`,"grants.phrase.writeRoots":`create and change files in {roots}`,"grants.phrase.readRoots":`read files in {roots}`,"grants.phrase.netHosts":`reach {hosts}`,"grants.phrase.toolExtra":`use extra tools {tools}`,"grants.phrase.unsandboxed":`run commands without extra isolation`,"grants.quick.ttlPrefix":`Valid for {label}`,"grants.quick.ttlMinutes":`Valid for {n} minutes`,"grants.quick.title":`Quick grants`,"grants.quick.note":`One combo relaxes each permission in order; each can be revoked separately`,"grants.quick.applied":`Applied`,"grants.quick.unavailable":`Quick grants are temporarily unavailable; use the per-item grants below.`,"grants.rows.ineffective":`Not in effect in this deployment`,"grants.rows.ineffectiveTitle":`This deployment has no site policy, so this site list does not change what the session can reach.`,"grants.rows.reserved":`Reserved, not in effect`,"grants.rows.reservedTitle":`No tool consumes this capability yet: granting it does not change what the session can do.`,"grants.rows.expiredPrefix":`Expired: {what}`,"grants.rows.hostPlaceholder":`Sites or CIDRs, separated by commas or newlines`,"grants.rows.toolPlaceholder":`Tool names, separated by commas or newlines`,"grants.rows.revoke":`Revoke`,"grants.rows.chooseDir":`Choose directory`,"grants.rows.grant":`Grant`,"grants.rows.grantTitle":`Grant directly: {permanent}`,"grants.rows.onceOnly":`Can be used only once; {permanent}`,"grants.rows.expired":`Expired`,"grants.rows.notGranted":`Not granted`,"grants.rows.grantedCount":`{n} granted`,"grants.rows.grantedPermanent":`Granted · {permanent}`,"grants.rows.grantedUntil":`Granted until {time}`,"grants.rows.detailWrite":`{values} — creation and changes are allowed there{exp}`,"grants.rows.detailRead":`{values} — reading is allowed (no changes){exp}`,"grants.rows.tempCollapse":`Hide durations`,"grants.rows.tempOpen":`Temporary grant…`,"grants.rows.tempNote":`Temporary grant: it is reclaimed automatically on expiry and can be revoked at any time.`,"grants.rows.tempGrant":`Grant for this duration`,"grants.rows.minutes":`{n} minutes`,"grants.shield.default":`This session's permissions: default (workspace only, no network)`,"grants.shield.expiring":`Some permissions are about to expire · click to view`,"grants.shield.granted":`{n} permissions are relaxed in this session · click to view`,"grants.warnings.label":`Note`,"grants.flow.chooseDir":`Choose a directory to relax`,"grants.flow.chooseDirNote":`Only directories can be chosen; {permanent}`,"grants.flow.confirmTitle":`Confirm relaxing permissions · {label}`,"grants.flow.effectiveNote":`Changes take effect when the session's next turn starts.`,"grants.flow.snapshotLabel":`Result preview · effective snapshot (taken verbatim from the service)`,"grants.flow.grantFailed":`Grant failed: {reason}`,"grants.flow.confirmPresetTitle":`Confirm quick grant · {label}`,"grants.flow.presetNote":`Applies in one step after granting: {list}.`,"grants.flow.presetInterrupted":`Quick grant interrupted: "{label}" was not granted ({reason}). {done}`,"grants.flow.presetDone":`Succeeded: {list} (each can be revoked below).`,"grants.flow.presetNoGrant":`No grant was produced this time.`,"grants.flow.presetComplete":`Quick grant complete: relaxed {list}.`,"grants.flow.presetUnavailable":`This quick grant includes a capability that is unavailable right now; it was cancelled.`,"grants.flow.chooseDirPreset":`Choose a directory to relax · {label}`,"grants.flow.chooseDirPresetNote":`This quick grant uses only this one directory; {permanent}`,"grants.flow.presetNoDir":`Quick grant cancelled: no directory was chosen.`,"grants.flow.presetBadHosts":`Quick grant cancelled: the site scope for "{label}" is invalid.`,"grants.flow.cannotStart":`Cannot start the grant, please try again later`,"grants.flow.grantFailedRetry":`Grant failed, please try again later`,"grants.flow.revokedOne":`Revoked: {label}`,"grants.flow.revokedMany":`Revoked {n} relaxed permissions`,"grants.flow.revoked":`Relaxed permissions revoked`,"grants.flow.revokeFailed":`Revoke failed: {reason}`},ne={zh:g,en:{..._,...v,...y,...b,...x,...ee,...te}},re=`celestea-locale`,ie=new Set;function S(){try{let e=localStorage.getItem(re);if(e===`zh`||e===`en`)return e}catch{}let e=typeof navigator<`u`&&navigator.language?navigator.language:``;return e===``||e.toLowerCase().startsWith(`zh`)?`zh`:`en`}var ae=S();function oe(){return ae}function C(e){if(e!==ae){ae=e;try{localStorage.setItem(re,e)}catch{}for(let e of ie)e()}}function se(e){return ie.add(e),()=>ie.delete(e)}function w(e,t){let n=(ne[ae]??g)[e]??g[e];if(t)for(let e of Object.keys(t))n=n.split(`{`+e+`}`).join(String(t[e]));return n}function ce(e){return e===`zh`?g[`common.language.zh`]:g[`common.language.en`]}function T(e){"@babel/helpers - typeof";return T=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},T(e)}function le(e,t){if(T(e)!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(T(r)!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function ue(e){var t=le(e,`string`);return T(t)==`symbol`?t:t+``}function E(e,t,n){return(t=ue(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var D=class extends Error{constructor(e,t=0,n=null,r=``){super(e),E(this,`status`,void 0),E(this,`data`,void 0),E(this,`technical`,void 0),this.name=`ApiError`,this.status=t,this.data=n,this.technical=r}};function de(e){return w(e===0?`api.error.connect`:e===400||e===422?`api.error.badRequest`:e===401||e===403?`api.error.forbidden`:e===404||e===405?`api.error.unsupported`:e===409?`api.error.conflict`:e===429?`api.error.tooMany`:e>=500?`api.error.server`:`api.error.generic`)}function O(e,t){if(e instanceof D)return e.technical&&console.warn(`[api] 服务端详情:`+e.technical),e.message;let n=e instanceof Error?e.message:typeof e==`string`?e:``;return n.trim()!==``&&console.warn(`[api] 服务端详情:`+n),t??w(`api.error.generic`)}async function k(e,t){let n;try{n=await fetch(e,t)}catch(t){let n=t instanceof Error?t.message:String(t);throw console.warn(`[api] `+e+` 网络层失败:`+n),new D(de(0),0,null,n)}let r=null;try{r=await n.json()}catch{r=null}if(!n.ok){let t=r,i=t&&typeof t.error==`string`&&t.error.trim()!==``?t.error:`HTTP `+n.status;throw console.warn(`[api] `+e+` → HTTP `+n.status+`:`+i),new D(de(n.status),n.status,r,i)}return r??{}}function A(e,t,n){return k(e,{method:`POST`,headers:{"Content-Type":`application/json`,...n??{}},body:JSON.stringify(t??{})})}function fe(e,t){return k(e,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t??{})})}var j={health:()=>k(`/api/health`),status:e=>k(`/api/status`+(e?`?session=`+encodeURIComponent(e):``)),tools:()=>k(`/api/tools`),plugins:()=>k(`/api/plugins`),config:()=>k(`/api/config`),saveConfig:e=>A(`/api/config`,e),sessions:e=>k(`/api/sessions`+(e?.archived===!0?`?archived=1`:``)),messages:e=>k(`/api/sessions/`+encodeURIComponent(e)+`/messages`),sessionContext:e=>k(`/api/sessions/`+encodeURIComponent(e)+`/context`),clear:()=>A(`/api/clear`,{}),turn:(e,t,n,r)=>{let i={input:e};return t&&(i.session=t),n&&(i.mode=n),r&&r.length>0&&(i.attachments=r),A(`/api/turn`,i)},cancel:e=>A(`/api/cancel`,e?{session:e}:{}),questions:e=>k(`/api/questions`+(e?`?session=`+encodeURIComponent(e):``)),answerQuestion:(e,t,n)=>A(`/api/questions/`+encodeURIComponent(e)+`/answer`,n?{answers:t,session:n}:{answers:t}),workspaces:()=>k(`/api/workspaces`),createWorkspaceByPath:e=>A(`/api/workspaces`,{path:e}),renameWorkspace:(e,t)=>A(`/api/workspaces/`+encodeURIComponent(e)+`/rename`,{new_name:t}),deleteWorkspace:e=>A(`/api/workspaces/`+encodeURIComponent(e)+`/delete`,{}),batchDeleteWorkspaces:e=>A(`/api/workspaces/batch-delete`,{names:e}),createSession:e=>A(`/api/sessions`,e),setSessionMode:(e,t)=>A(`/api/sessions/`+encodeURIComponent(e)+`/mode`,{mode:t}),setSessionModel:(e,t)=>fe(`/api/sessions/`+encodeURIComponent(e)+`/model`,{model:t}),renameSession:(e,t)=>A(`/api/sessions/`+encodeURIComponent(e)+`/rename`,{new_title:t}),branchSession:(e,t)=>A(`/api/sessions/`+encodeURIComponent(e)+`/branch`,t?{title:t}:{}),archiveSession:e=>A(`/api/sessions/`+encodeURIComponent(e)+`/archive`,{}),unarchiveSession:e=>A(`/api/sessions/`+encodeURIComponent(e)+`/unarchive`,{}),activateSession:e=>A(`/api/sessions/`+encodeURIComponent(e)+`/activate`,{}),compactSession:e=>A(`/api/sessions/`+encodeURIComponent(e)+`/compact`,{}),fsList:e=>k(`/api/fs/list?path=`+encodeURIComponent(e)),fsRead:(e,t,n)=>k(`/api/fs/read?path=`+encodeURIComponent(e)+(t===void 0?``:`&offset=`+String(t))+(n===void 0?``:`&limit=`+String(n))),exec:e=>A(`/api/exec`,e),setGoal:(e,t)=>A(`/api/sessions/`+encodeURIComponent(e)+`/goal`,{text:t}),fsBrowse:e=>k(`/api/fs/browse`+(e?`?path=`+encodeURIComponent(e):``)),batchArchiveSessions:e=>A(`/api/sessions/batch-archive`,{ids:e}),batchDeleteSessions:e=>A(`/api/sessions/batch-delete`,{ids:e}),providers:()=>k(`/api/providers`),saveProvider:e=>A(`/api/providers`,e),deleteProvider:e=>A(`/api/providers/`+encodeURIComponent(e)+`/delete`,{}),testProvider:e=>A(`/api/providers/test`,e),fetchProviderModels:e=>A(`/api/providers/`+encodeURIComponent(e)+`/models/fetch`,{}),setDefaultModel:(e,t)=>A(`/api/providers/default`,t?{model:e,provider_id:t}:{model:e}),prompts:e=>k(`/api/prompts`+(e?`?workspace=`+encodeURIComponent(e):``)),savePrompt:e=>A(`/api/prompts`,e),deletePrompt:(e,t)=>A(`/api/prompts/`+encodeURIComponent(e)+`/delete`,t?{workspace:t}:{}),setDefaultPrompt:(e,t)=>A(`/api/prompts/`+encodeURIComponent(e)+`/default`,t?{workspace:t}:{}),permissionPresets:()=>k(`/api/permissions/presets`),createPermissionPreset:e=>A(`/api/permissions/presets`,{preset:e}),updatePermissionPreset:(e,t)=>fe(`/api/permissions/presets/`+encodeURIComponent(e),{preset:t}),deletePermissionPreset:e=>k(`/api/permissions/presets/`+encodeURIComponent(e),{method:`DELETE`}),sessionPermission:e=>k(`/api/sessions/`+encodeURIComponent(e)+`/permission`),setSessionPermission:(e,t)=>fe(`/api/sessions/`+encodeURIComponent(e)+`/permission`,{preset:t}),grants:e=>k(`/api/sessions/`+encodeURIComponent(e)+`/grants`),grantToken:(e,t,n)=>k(`/api/sessions/`+encodeURIComponent(e)+`/grants/confirm-token?cap=`+encodeURIComponent(t)+`&scope_hash=`+encodeURIComponent(n)),grantCap:(e,t,n)=>A(`/api/sessions/`+encodeURIComponent(e)+`/grants`,t,{"X-Celestea-Grant-Confirm":n}),revokeCap:(e,t={})=>k(`/api/sessions/`+encodeURIComponent(e)+`/grants`,{method:`DELETE`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)})};function pe(e,t){if(typeof e!=`object`||!e||Array.isArray(e))return e;let n={...e};return t.turn!==void 0&&n.turn===void 0&&(n.turn=t.turn),t.seq!==void 0&&(n.seq=t.seq),t.v!==void 0&&(n.v=t.v),t.session!==void 0&&t.session!==null&&n.session===void 0&&(n.session=t.session),n}var me=[`status`,`text`,`thinking`,`tool`,`tool_result`,`done`,`context`,`compact`,`inbox`,`question`],he=class{constructor(e=`/api/events`){E(this,`url`,void 0),E(this,`es`,null),E(this,`handlers`,new Map),E(this,`connCbs`,new Set),this.url=e}on(e,t){let n=this.handlers.get(e);n||(n=new Set,this.handlers.set(e,n)),n.add(t)}onConn(e){this.connCbs.add(e)}connect(){this.close();let e=new EventSource(this.url);this.es=e,e.onopen=()=>this.emitConn(`online`),e.onerror=()=>this.emitConn(`down`);for(let t of me)e.addEventListener(t,e=>{try{let n=JSON.parse(e.data),r=n.payload===void 0?n:n.payload;this.emit(t,pe(r,n))}catch(e){console.warn(`[sse] failed to parse`,t,e)}})}close(){this.es&&(this.es.close(),this.es=null)}emit(e,t){let n=this.handlers.get(e);if(n)for(let r of n)try{r(t)}catch(t){console.warn(`[sse] handler failed for`,e,t)}}emitConn(e){for(let t of this.connCbs)try{t(e)}catch{}}};function ge(e,t=document){return t.querySelector(e)}function _e(e,t=document){return Array.from(t.querySelectorAll(e))}function M(e,t=document){let n=ge(e,t);if(!n)throw Error(`missing element: `+e);return n}var ve={"&":`&amp;`,"<":`&lt;`,">":`&gt;`,'"':`&quot;`,"'":`&#39;`};function ye(e){return String(e).replace(/[&<>"']/g,e=>ve[e]??e)}function N(e,t,n){let r=document.createElement(e);return t&&(r.className=t),n!=null&&(r.textContent=String(n)),r}function be(e){let t=Math.max(0,Math.floor(e||0)),n=Math.floor(t/60),r=t%60;return(n<10?`0`:``)+n+`:`+(r<10?`0`:``)+r}function xe(){let e=new Date,t=e=>(e<10?`0`:``)+e;return t(e.getHours())+`:`+t(e.getMinutes())+`:`+t(e.getSeconds())}var Se=(e,t)=>{let n=e.toFixed(t);return n.endsWith(`.0`)?n.slice(0,-2):n};function Ce(e,t=1){if(e==null||!Number.isFinite(e))return`—`;let n=Math.abs(e);return n>=1e9?Se(e/1e9,t)+`B`:n>=1e6?Se(e/1e6,t)+`M`:n>=1e3?Se(e/1e3,t)+`K`:String(Math.round(e))}var we=[],Te=0,Ee=!1;function De(){return we.length?we[we.length-1]:null}function Oe(e){if(!e.active)return!1;e.active=!1;let t=we.indexOf(e);return t>=0&&we.splice(t,1),!0}function ke(e){if(e.key!==`Escape`)return;let t=De();if(t){e.preventDefault(),Oe(t);try{t.close()}catch{}}}function Ae(){Ee||(Ee=!0,document.addEventListener(`keydown`,ke))}function P(e){Ae();let t={id:++Te,close:e,active:!0};return we.push(t),{id:t.id,depth:we.length}}function F(e){if(!e){let e=we.pop();e&&(e.active=!1);return}for(let t=we.length-1;t>=0;t--){let n=we[t];if(n.id===e.id){Oe(n);return}}}function je(e){let t=[],n=[];for(let r of we)(r.id>e.id?n:t).push(r);we.length=0,we.push(...t);for(let e=n.length-1;e>=0;e--){let t=n[e];if(t.active){t.active=!1;try{t.close()}catch{}}}}var Me=6e4,Ne=`unknown`,Pe=0;async function Fe(e=!1){let t=Date.now();if(!e&&Ne!==`unknown`&&t-Pe<Me)return Ne===`on`;Pe=t;try{Ne=(await j.health()).capabilities?.context===!0?`on`:`off`}catch{Ne=`off`}return Ne===`on`}var Ie=0,Le=!1;function Re(e){if(e===``||Le)return;let t=++Ie;Le=!0;let n=N(`div`,`modal-scrim ctx-scrim`),r=N(`div`,`modal-card ctx-card`),i=N(`div`,`ctx-head`);i.appendChild(N(`span`,`ctx-title`,w(`chat.ctx.title`))),i.appendChild(N(`span`,`ctx-tag`,w(`chat.ctx.readonly`)));let a=N(`button`,`btn btn-soft btn-mini ctx-close`,w(`chat.ctx.close`));a.type=`button`,i.appendChild(a),r.appendChild(i);let o=N(`div`,`ctx-meta`),s=N(`span`,`ctx-model`,`—`),c=N(`span`,`ctx-usage`),l=N(`span`,`ctx-counts`);o.appendChild(s),o.appendChild(N(`span`,`ctx-sep`,`·`)),o.appendChild(c),o.appendChild(N(`span`,`ctx-sep`,`·`)),o.appendChild(l),r.appendChild(o);let u=N(`div`,`ctx-body`);r.appendChild(u);let d=N(`div`,`ctx-foot`,w(`chat.ctx.foot`));r.appendChild(d),n.appendChild(r),document.body.appendChild(n);let f=null,p=!1,m=()=>{p||(p=!0,f&&F(f),f=null,n.remove(),Ie===t&&(Ie=0,Le=!1))};f=P(m),a.addEventListener(`click`,m),n.addEventListener(`click`,e=>{e.target===n&&m()});let h=()=>!p&&Ie===t;j.sessionContext(e).then(e=>{if(!h())return;ze(s,c,l,e);let t=document.createElement(`div`);t.className=`ctx-body-inner`,t.appendChild(Be(e)),t.appendChild(Ve(e)),t.appendChild(We(e)),u.replaceChildren(...t.childNodes),d.textContent=(typeof e.session==`string`&&e.session!==``?w(`chat.ctx.footWithSession`,{id:e.session}):w(`chat.ctx.foot`))+(e.truncated===!0?w(`chat.ctx.truncatedSuffix`):``)}).catch(e=>{h()&&u.replaceChildren(N(`div`,`ctx-error`,O(e,w(`chat.ctx.loadFailed`))))})}function ze(e,t,n,r){let i=typeof r.model==`string`&&r.model!==``?r.model:`—`;e.textContent=i,e.title=w(`chat.ctx.currentModel`,{model:i});let a=r.context??{},o=[];typeof a.used==`number`&&o.push(Ce(a.used)+` / `+Ce(a.window));let s=typeof a.ratio==`number`?a.ratio:typeof a.used==`number`&&typeof a.window==`number`&&a.window>0?a.used/a.window:null;s!==null&&Number.isFinite(s)&&o.push(Ze(s)+`%`);let c=N(`span`,`ctx-usage-text`,o.length?o.join(` · `):`—`);t.replaceChildren(c),t.title=w(`chat.ctx.usageTitle`),a.estimated===!0&&t.appendChild(N(`span`,`ctx-badge`,w(`chat.ctx.estimated`)));let l=r.counts??{},u=typeof l.system_chars==`number`?l.system_chars:Ye(r.system),d=typeof l.tool_count==`number`?l.tool_count:(r.tools??[]).length,f=typeof l.message_count==`number`?l.message_count:(r.messages??[]).length;n.textContent=w(`chat.ctx.counts`,{sys:Xe(u),tools:d,msgs:f}),n.title=w(`chat.ctx.countsTitle`)}function Be(e){let t=N(`section`,`ctx-sec`),n=typeof e.system==`string`?e.system:``,r=document.createElement(`details`);r.className=`ctx-fold ctx-fold-sys`,r.open=!0;let i=N(`summary`,`ctx-fold-head`);i.appendChild(N(`span`,`ctx-fold-name`,w(`chat.ctx.systemPrompt`))),i.appendChild(N(`span`,`ctx-count`,w(`chat.ctx.chars`,{n:Xe(n.length)}))),r.appendChild(i);let a=N(`pre`,`ctx-pre ctx-pre-sys`);return a.textContent=n===``?w(`chat.ctx.empty`):n,r.appendChild(a),t.appendChild(r),t}function Ve(e){let t=N(`section`,`ctx-sec`),n=Array.isArray(e.tools)?e.tools:[],r=N(`div`,`ctx-sec-head`);if(r.appendChild(N(`span`,`ctx-sec-name`,w(`chat.ctx.toolList`))),r.appendChild(N(`span`,`ctx-count`,w(`chat.ctx.count`,{n:n.length}))),n.some(e=>e.truncated===!0)&&r.appendChild(N(`span`,`ctx-badge`,w(`chat.ctx.partialTruncated`))),t.appendChild(r),!n.length)return t.appendChild(N(`div`,`ctx-note`,w(`chat.ctx.noTools`))),t;let i=N(`div`,`ctx-tools`);return n.forEach((e,t)=>{let n=document.createElement(`details`);n.className=`ctx-fold ctx-tool`;let r=N(`summary`,`ctx-tool-head`);r.appendChild(N(`span`,`ctx-tool-idx`,`#`+(t+1))),r.appendChild(N(`span`,`ctx-tool-name`,e.name||w(`chat.ctx.unnamed`))),r.appendChild(N(`span`,`ctx-tool-desc`,Je(e.description))),e.truncated===!0&&r.appendChild(N(`span`,`ctx-badge`,w(`chat.ctx.truncatedBadge`))),n.appendChild(r);let a=N(`pre`,`ctx-pre ctx-pre-schema`);a.textContent=He(e.parameters),n.appendChild(a),i.appendChild(n)}),t.appendChild(i),t}function He(e){if(e==null)return w(`chat.ctx.noSchema`);if(typeof e==`string`)return e===``?w(`chat.ctx.noSchema`):e;try{return JSON.stringify(e,null,2)??w(`chat.ctx.noSchema`)}catch{return w(`chat.ctx.schemaUnavailable`)}}function Ue(){return[{key:`user`,label:w(`chat.ctx.roleUser`)},{key:`assistant`,label:w(`chat.ctx.roleAssistant`)},{key:`tool`,label:w(`chat.ctx.roleTool`)}]}function We(e){let t=N(`section`,`ctx-sec`),n=Array.isArray(e.messages)?e.messages:[],r=N(`div`,`ctx-sec-head`);if(r.appendChild(N(`span`,`ctx-sec-name`,w(`chat.ctx.messages`))),r.appendChild(N(`span`,`ctx-count`,w(`chat.ctx.countItems`,{n:n.length}))),n.some(e=>e.truncated===!0)&&r.appendChild(N(`span`,`ctx-badge`,w(`chat.ctx.partialTruncated`))),t.appendChild(r),!n.length)return t.appendChild(N(`div`,`ctx-note`,w(`chat.ctx.noMessages`))),t;for(let e of Ue()){let r=[];n.forEach((t,n)=>{Ke(t)===e.key&&r.push({m:t,idx:n})}),r.length&&t.appendChild(Ge(e.label,r))}let i=new Map;n.forEach((e,t)=>{let n=Ke(e);if(Ue().some(e=>e.key===n))return;let r=i.get(n);r?r.push({m:e,idx:t}):i.set(n,[{m:e,idx:t}])});for(let[e,n]of i)t.appendChild(Ge(e===``?w(`chat.ctx.roleOther`):e,n));return t}function Ge(e,t){let n=N(`div`,`ctx-group`),r=N(`div`,`ctx-group-head`);r.appendChild(N(`span`,`ctx-group-name`,e)),r.appendChild(N(`span`,`ctx-count`,w(`chat.ctx.countItems`,{n:t.length}))),n.appendChild(r);for(let{m:e,idx:r}of t){let t=typeof e.content==`string`?e.content:``,i=document.createElement(`details`);i.className=`ctx-fold ctx-msg`;let a=N(`summary`,`ctx-msg-head`);a.appendChild(N(`span`,`ctx-msg-idx`,`#`+(r+1))),e.role===`tool`&&typeof e.tool_name==`string`&&e.tool_name!==``&&a.appendChild(N(`span`,`ctx-msg-tool`,e.tool_name)),a.appendChild(N(`span`,`ctx-count`,w(`chat.ctx.chars`,{n:Xe(t.length)}))),e.truncated===!0&&a.appendChild(N(`span`,`ctx-badge`,w(`chat.ctx.truncatedBadge`))),a.appendChild(N(`span`,`ctx-msg-preview`,qe(t))),typeof e.tool_call_id==`string`&&e.tool_call_id!==``&&(a.title=w(`chat.ctx.callId`,{id:e.tool_call_id})),i.appendChild(a);let o=N(`pre`,`ctx-pre ctx-pre-msg`);o.textContent=t===``?w(`chat.ctx.empty`):t,i.appendChild(o),n.appendChild(i)}return n}function Ke(e){let t=typeof e.role==`string`?e.role.trim().toLowerCase():``;return t===`tool`||t===`tool_result`||t===`toolresult`?`tool`:t}function qe(e){let t=e.replace(/\s+/g,` `).trim();return t===``?w(`chat.ctx.empty`):t.length>90?t.slice(0,90)+`…`:t}function Je(e){let t=typeof e==`string`?e.replace(/\s+/g,` `).trim():``;return t===``?w(`chat.ctx.noDescription`):t}function Ye(e){return typeof e==`string`?e.length:0}function Xe(e){return Number.isFinite(e)?String(Math.round(e)).replace(/\B(?=(\d{3})+(?!\d))/g,`,`):`—`}function Ze(e){let t=Math.max(0,e)*100;return String(t>=10?Math.round(t):Math.round(t*10)/10)}function Qe(e){let t={};return e.model!==void 0&&(t.model=e.model),e.reasoning_effort!==void 0&&(t.reasoning_effort=e.reasoning_effort),e.steps!==void 0&&(t.steps=e.steps),e.tokens_per_sec!==void 0&&(t.tokens_per_sec=e.tokens_per_sec),e.context_usage!==void 0&&(t.context_usage=e.context_usage),e.usage!==void 0&&(t.usage=e.usage),e.busy!==void 0&&(t.busy=e.busy),e.mode!==void 0&&(t.mode=e.mode),e.model_covered!==void 0&&(t.model_covered=e.model_covered),t}var $e={deepseek:`<path d="M23.748 4.482c-.254-.124-.364.113-.512.234-.051.039-.094.09-.137.136-.372.397-.806.657-1.373.626-.829-.046-1.537.214-2.163.848-.133-.782-.575-1.248-1.247-1.548-.352-.156-.708-.311-.955-.65-.172-.241-.219-.51-.305-.774-.055-.16-.11-.323-.293-.35-.2-.031-.278.136-.356.276-.313.572-.434 1.202-.422 1.84.027 1.436.633 2.58 1.838 3.393.137.093.172.187.129.323-.082.28-.18.552-.266.833-.055.179-.137.217-.329.14a5.526 5.526 0 01-1.736-1.18c-.857-.828-1.631-1.742-2.597-2.458a11.365 11.365 0 00-.689-.471c-.985-.957.13-1.743.388-1.836.27-.098.093-.432-.779-.428-.872.004-1.67.295-2.687.684a3.055 3.055 0 01-.465.137 9.597 9.597 0 00-2.883-.102c-1.885.21-3.39 1.102-4.497 2.623C.082 8.606-.231 10.684.152 12.85c.403 2.284 1.569 4.175 3.36 5.653 1.858 1.533 3.997 2.284 6.438 2.14 1.482-.085 3.133-.284 4.994-1.86.47.234.962.327 1.78.397.63.059 1.236-.03 1.705-.128.735-.156.684-.837.419-.961-2.155-1.004-1.682-.595-2.113-.926 1.096-1.296 2.746-2.642 3.392-7.003.05-.347.007-.565 0-.845-.004-.17.035-.237.23-.256a4.173 4.173 0 001.545-.475c1.396-.763 1.96-2.015 2.093-3.517.02-.23-.004-.467-.247-.588zM11.581 18c-2.089-1.642-3.102-2.183-3.52-2.16-.392.024-.321.471-.235.763.09.288.207.486.371.739.114.167.192.416-.113.603-.673.416-1.842-.14-1.897-.167-1.361-.802-2.5-1.86-3.301-3.307-.774-1.393-1.224-2.887-1.298-4.482-.02-.386.093-.522.477-.592a4.696 4.696 0 011.529-.039c2.132.312 3.946 1.265 5.468 2.774.868.86 1.525 1.887 2.202 2.891.72 1.066 1.494 2.082 2.48 2.914.348.292.625.514.891.677-.802.09-2.14.11-3.054-.614zm1-6.44a.306.306 0 01.415-.287.302.302 0 01.2.288.306.306 0 01-.31.307.303.303 0 01-.304-.308zm3.11 1.596c-.2.081-.399.151-.59.16a1.245 1.245 0 01-.798-.254c-.274-.23-.47-.358-.552-.758a1.73 1.73 0 01.016-.588c.07-.327-.008-.537-.239-.727-.187-.156-.426-.199-.688-.199a.559.559 0 01-.254-.078c-.11-.054-.2-.19-.114-.358.028-.054.16-.186.192-.21.356-.202.767-.136 1.146.016.352.144.618.408 1.001.782.391.451.462.576.685.914.176.265.336.537.445.848.067.195-.019.354-.25.452z" />`,openai:`<path d="M9.205 8.658v-2.26c0-.19.072-.333.238-.428l4.543-2.616c.619-.357 1.356-.523 2.117-.523 2.854 0 4.662 2.212 4.662 4.566 0 .167 0 .357-.024.547l-4.71-2.759a.797.797 0 00-.856 0l-5.97 3.473zm10.609 8.8V12.06c0-.333-.143-.57-.429-.737l-5.97-3.473 1.95-1.118a.433.433 0 01.476 0l4.543 2.617c1.309.76 2.189 2.378 2.189 3.948 0 1.808-1.07 3.473-2.76 4.163zM7.802 12.703l-1.95-1.142c-.167-.095-.239-.238-.239-.428V5.899c0-2.545 1.95-4.472 4.591-4.472 1 0 1.927.333 2.712.928L8.23 5.067c-.285.166-.428.404-.428.737v6.898zM12 15.128l-2.795-1.57v-3.33L12 8.658l2.795 1.57v3.33L12 15.128zm1.796 7.23c-1 0-1.927-.332-2.712-.927l4.686-2.712c.285-.166.428-.404.428-.737v-6.898l1.974 1.142c.167.095.238.238.238.428v5.233c0 2.545-1.974 4.472-4.614 4.472zm-5.637-5.303l-4.544-2.617c-1.308-.761-2.188-2.378-2.188-3.948A4.482 4.482 0 014.21 6.327v5.423c0 .333.143.571.428.738l5.947 3.449-1.95 1.118a.432.432 0 01-.476 0zm-.262 3.9c-2.688 0-4.662-2.021-4.662-4.519 0-.19.024-.38.047-.57l4.686 2.71c.286.167.571.167.856 0l5.97-3.448v2.26c0 .19-.07.333-.237.428l-4.543 2.616c-.619.357-1.356.523-2.117.523zm5.899 2.83a5.947 5.947 0 005.827-4.756C22.287 18.339 24 15.84 24 13.296c0-1.665-.713-3.282-1.998-4.448.119-.5.19-.999.19-1.498 0-3.401-2.759-5.947-5.946-5.947-.642 0-1.26.095-1.88.31A5.962 5.962 0 0010.205 0a5.947 5.947 0 00-5.827 4.757C1.713 5.447 0 7.945 0 10.49c0 1.666.713 3.283 1.998 4.448-.119.5-.19 1-.19 1.499 0 3.401 2.759 5.946 5.946 5.946.642 0 1.26-.095 1.88-.309a5.96 5.96 0 004.162 1.713z" />`,claude:`<path d="M4.709 15.955l4.72-2.647.08-.23-.08-.128H9.2l-.79-.048-2.698-.073-2.339-.097-2.266-.122-.571-.121L0 11.784l.055-.352.48-.321.686.06 1.52.103 2.278.158 1.652.097 2.449.255h.389l.055-.157-.134-.098-.103-.097-2.358-1.596-2.552-1.688-1.336-.972-.724-.491-.364-.462-.158-1.008.656-.722.881.06.225.061.893.686 1.908 1.476 2.491 1.833.365.304.145-.103.019-.073-.164-.274-1.355-2.446-1.446-2.49-.644-1.032-.17-.619a2.97 2.97 0 01-.104-.729L6.283.134 6.696 0l.996.134.42.364.62 1.414 1.002 2.229 1.555 3.03.456.898.243.832.091.255h.158V9.01l.128-1.706.237-2.095.23-2.695.08-.76.376-.91.747-.492.584.28.48.685-.067.444-.286 1.851-.559 2.903-.364 1.942h.212l.243-.242.985-1.306 1.652-2.064.73-.82.85-.904.547-.431h1.033l.76 1.129-.34 1.166-1.064 1.347-.881 1.142-1.264 1.7-.79 1.36.073.11.188-.02 2.856-.606 1.543-.28 1.841-.315.833.388.091.395-.328.807-1.969.486-2.309.462-3.439.813-.042.03.049.061 1.549.146.662.036h1.622l3.02.225.79.522.474.638-.079.485-1.215.62-1.64-.389-3.829-.91-1.312-.329h-.182v.11l1.093 1.068 2.006 1.81 2.509 2.33.127.578-.322.455-.34-.049-2.205-1.657-.851-.747-1.926-1.62h-.128v.17l.444.649 2.345 3.521.122 1.08-.17.353-.608.213-.668-.122-1.374-1.925-1.415-2.167-1.143-1.943-.14.08-.674 7.254-.316.37-.729.28-.607-.461-.322-.747.322-1.476.389-1.924.315-1.53.286-1.9.17-.632-.012-.042-.14.018-1.434 1.967-2.18 2.945-1.726 1.845-.414.164-.717-.37.067-.662.401-.589 2.388-3.036 1.44-1.882.93-1.086-.006-.158h-.055L4.132 18.56l-1.13.146-.487-.456.061-.746.231-.243 1.908-1.312-.006.006z" />`,gemini:`<path d="M20.616 10.835a14.147 14.147 0 01-4.45-3.001 14.111 14.111 0 01-3.678-6.452.503.503 0 00-.975 0 14.134 14.134 0 01-3.679 6.452 14.155 14.155 0 01-4.45 3.001c-.65.28-1.318.505-2.002.678a.502.502 0 000 .975c.684.172 1.35.397 2.002.677a14.147 14.147 0 014.45 3.001 14.112 14.112 0 013.679 6.453.502.502 0 00.975 0c.172-.685.397-1.351.677-2.003a14.145 14.145 0 013.001-4.45 14.113 14.113 0 016.453-3.678.503.503 0 000-.975 13.245 13.245 0 01-2.003-.678z" />`,glm:`<path d="M11.991 23.503a.24.24 0 00-.244.248.24.24 0 00.244.249.24.24 0 00.245-.249.24.24 0 00-.22-.247l-.025-.001zM9.671 5.365a1.697 1.697 0 011.099 2.132l-.071.172-.016.04-.018.054c-.07.16-.104.32-.104.498-.035.71.47 1.279 1.186 1.314h.366c1.309.053 2.338 1.173 2.286 2.523-.052 1.332-1.152 2.38-2.478 2.327h-.174c-.715.018-1.274.64-1.239 1.368 0 .124.018.23.053.337.209.373.54.658.96.8.75.23 1.517-.125 1.9-.782l.018-.035c.402-.64 1.17-.96 1.92-.711.854.284 1.378 1.226 1.099 2.167a1.661 1.661 0 01-2.077 1.102 1.711 1.711 0 01-.907-.711l-.017-.035c-.2-.323-.463-.58-.851-.711l-.056-.018a1.646 1.646 0 00-1.954.746 1.66 1.66 0 01-1.065.764 1.677 1.677 0 01-1.989-1.279c-.209-.906.332-1.83 1.257-2.043a1.51 1.51 0 01.296-.035h.018c.68-.071 1.151-.622 1.116-1.333a1.307 1.307 0 00-.227-.693 2.515 2.515 0 01-.366-1.403 2.39 2.39 0 01.366-1.208c.14-.195.21-.444.227-.693.018-.71-.506-1.261-1.186-1.332l-.07-.018a1.43 1.43 0 01-.299-.07l-.05-.019a1.7 1.7 0 01-1.047-2.114 1.68 1.68 0 012.094-1.101zm-5.575 10.11c.26-.264.639-.367.994-.27.355.096.633.379.728.74.095.362-.007.748-.267 1.013-.402.41-1.053.41-1.455 0a1.062 1.062 0 010-1.482zm14.845-.294c.359-.09.738.024.992.297.254.274.344.665.237 1.025-.107.36-.396.634-.756.718-.551.128-1.1-.22-1.23-.781a1.05 1.05 0 01.757-1.26zm-.064-4.39c.314.32.49.753.49 1.206 0 .452-.176.886-.49 1.206-.315.32-.74.5-1.185.5-.444 0-.87-.18-1.184-.5a1.727 1.727 0 010-2.412 1.654 1.654 0 012.369 0zm-11.243.163c.364.484.447 1.128.218 1.691a1.665 1.665 0 01-2.188.923c-.855-.36-1.26-1.358-.907-2.228a1.68 1.68 0 011.33-1.038c.593-.08 1.183.169 1.547.652zm11.545-4.221c.368 0 .708.2.892.524.184.324.184.724 0 1.048a1.026 1.026 0 01-.892.524c-.568 0-1.03-.47-1.03-1.048 0-.579.462-1.048 1.03-1.048zm-14.358 0c.368 0 .707.2.891.524.184.324.184.724 0 1.048a1.026 1.026 0 01-.891.524c-.569 0-1.03-.47-1.03-1.048 0-.579.461-1.048 1.03-1.048zm10.031-1.475c.925 0 1.675.764 1.675 1.706s-.75 1.705-1.675 1.705-1.674-.763-1.674-1.705c0-.942.75-1.706 1.674-1.706zm-2.626-.684c.362-.082.653-.356.761-.718a1.062 1.062 0 00-.238-1.028 1.017 1.017 0 00-.996-.294c-.547.14-.881.7-.752 1.257.13.558.675.907 1.225.783zm0 16.876c.359-.087.644-.36.75-.72a1.062 1.062 0 00-.237-1.019 1.018 1.018 0 00-.985-.301 1.037 1.037 0 00-.762.717c-.108.361-.017.754.239 1.028.245.263.606.377.953.305l.043-.01zM17.19 3.5a.631.631 0 00.628-.64c0-.355-.279-.64-.628-.64a.631.631 0 00-.628.64c0 .355.28.64.628.64zm-10.38 0a.631.631 0 00.628-.64c0-.355-.28-.64-.628-.64a.631.631 0 00-.628.64c0 .355.279.64.628.64zm-5.182 7.852a.631.631 0 00-.628.64c0 .354.28.639.628.639a.63.63 0 00.627-.606l.001-.034a.62.62 0 00-.628-.64zm5.182 9.13a.631.631 0 00-.628.64c0 .355.279.64.628.64a.631.631 0 00.628-.64c0-.355-.28-.64-.628-.64zm10.38.018a.631.631 0 00-.628.64c0 .355.28.64.628.64a.631.631 0 00.628-.64c0-.355-.279-.64-.628-.64zm5.182-9.148a.631.631 0 00-.628.64c0 .354.279.639.628.639a.631.631 0 00.628-.64c0-.355-.28-.64-.628-.64zm-.384-4.992a.24.24 0 00.244-.249.24.24 0 00-.244-.249.24.24 0 00-.244.249c0 .142.122.249.244.249zM11.991.497a.24.24 0 00.245-.248A.24.24 0 0011.99 0a.24.24 0 00-.244.249c0 .133.108.236.223.247l.021.001zM2.011 6.36a.24.24 0 00.245-.249.24.24 0 00-.244-.249.24.24 0 00-.244.249.24.24 0 00.244.249zm0 11.263a.24.24 0 00-.243.248.24.24 0 00.244.249.24.24 0 00.244-.249.252.252 0 00-.244-.248zm19.995-.018a.24.24 0 00-.245.248.24.24 0 00.245.25.24.24 0 00.244-.25.252.252 0 00-.244-.248z" />`,qwen:`<path d="M12.604 1.34c.393.69.784 1.382 1.174 2.075a.18.18 0 00.157.091h5.552c.174 0 .322.11.446.327l1.454 2.57c.19.337.24.478.024.837-.26.43-.513.864-.76 1.3l-.367.658c-.106.196-.223.28-.04.512l2.652 4.637c.172.301.111.494-.043.77-.437.785-.882 1.564-1.335 2.34-.159.272-.352.375-.68.37-.777-.016-1.552-.01-2.327.016a.099.099 0 00-.081.05 575.097 575.097 0 01-2.705 4.74c-.169.293-.38.363-.725.364-.997.003-2.002.004-3.017.002a.537.537 0 01-.465-.271l-1.335-2.323a.09.09 0 00-.083-.049H4.982c-.285.03-.553-.001-.805-.092l-1.603-2.77a.543.543 0 01-.002-.54l1.207-2.12a.198.198 0 000-.197 550.951 550.951 0 01-1.875-3.272l-.79-1.395c-.16-.31-.173-.496.095-.965.465-.813.927-1.625 1.387-2.436.132-.234.304-.334.584-.335a338.3 338.3 0 012.589-.001.124.124 0 00.107-.063l2.806-4.895a.488.488 0 01.422-.246c.524-.001 1.053 0 1.583-.006L11.704 1c.341-.003.724.032.9.34zm-3.432.403a.06.06 0 00-.052.03L6.254 6.788a.157.157 0 01-.135.078H3.253c-.056 0-.07.025-.041.074l5.81 10.156c.025.042.013.062-.034.063l-2.795.015a.218.218 0 00-.2.116l-1.32 2.31c-.044.078-.021.118.068.118l5.716.008c.046 0 .08.02.104.061l1.403 2.454c.046.081.092.082.139 0l5.006-8.76.783-1.382a.055.055 0 01.096 0l1.424 2.53a.122.122 0 00.107.062l2.763-.02a.04.04 0 00.035-.02.041.041 0 000-.04l-2.9-5.086a.108.108 0 010-.113l.293-.507 1.12-1.977c.024-.041.012-.062-.035-.062H9.2c-.059 0-.073-.026-.043-.077l1.434-2.505a.107.107 0 000-.114L9.225 1.774a.06.06 0 00-.053-.031zm6.29 8.02c.046 0 .058.02.034.06l-.832 1.465-2.613 4.585a.056.056 0 01-.05.029.058.058 0 01-.05-.029L8.498 9.841c-.02-.034-.01-.052.028-.054l.216-.012 6.722-.012z" />`,meta:`<path d="M6.897 4c1.915 0 3.516.932 5.43 3.376l.282-.373c.19-.246.383-.484.58-.71l.313-.35C14.588 4.788 15.792 4 17.225 4c1.273 0 2.469.557 3.491 1.516l.218.213c1.73 1.765 2.917 4.71 3.053 8.026l.011.392.002.25c0 1.501-.28 2.759-.818 3.7l-.14.23-.108.153c-.301.42-.664.758-1.086 1.009l-.265.142-.087.04a3.493 3.493 0 01-.302.118 4.117 4.117 0 01-1.33.208c-.524 0-.996-.067-1.438-.215-.614-.204-1.163-.56-1.726-1.116l-.227-.235c-.753-.812-1.534-1.976-2.493-3.586l-1.43-2.41-.544-.895-1.766 3.13-.343.592C7.597 19.156 6.227 20 4.356 20c-1.21 0-2.205-.42-2.936-1.182l-.168-.184c-.484-.573-.837-1.311-1.043-2.189l-.067-.32a8.69 8.69 0 01-.136-1.288L0 14.468c.002-.745.06-1.49.174-2.23l.1-.573c.298-1.53.828-2.958 1.536-4.157l.209-.34c1.177-1.83 2.789-3.053 4.615-3.16L6.897 4zm-.033 2.615l-.201.01c-.83.083-1.606.673-2.252 1.577l-.138.199-.01.018c-.67 1.017-1.185 2.378-1.456 3.845l-.004.022a12.591 12.591 0 00-.207 2.254l.002.188c.004.18.017.36.04.54l.043.291c.092.503.257.908.486 1.208l.117.137c.303.323.698.492 1.17.492 1.1 0 1.796-.676 3.696-3.641l2.175-3.4.454-.701-.139-.198C9.11 7.3 8.084 6.616 6.864 6.616zm10.196-.552l-.176.007c-.635.048-1.223.359-1.82.933l-.196.198c-.439.462-.887 1.064-1.367 1.807l.266.398c.18.274.362.56.55.858l.293.475 1.396 2.335.695 1.114c.583.926 1.03 1.6 1.408 2.082l.213.262c.282.326.529.54.777.673l.102.05c.227.1.457.138.718.138.176.002.35-.023.518-.073.338-.104.61-.32.813-.637l.095-.163.077-.162c.194-.459.29-1.06.29-1.785l-.006-.449c-.08-2.871-.938-5.372-2.2-6.798l-.176-.189c-.67-.683-1.444-1.074-2.27-1.074z" />`,mistral:`<path d="M3.428 3.4h3.429v3.428h3.429v3.429h-.002 3.431V6.828h3.427V3.4h3.43v13.714H24v3.429H13.714v-3.428h-3.428v-3.429h-3.43v3.428h3.43v3.429H0v-3.429h3.428V3.4zm10.286 13.715h3.428v-3.429h-3.427v3.429z" clip-rule="evenodd" />`,grok:`<path d="M6.469 8.776L16.512 23h-4.464L2.005 8.776H6.47zm-.004 7.9l2.233 3.164L6.467 23H2l4.465-6.324zM22 2.582V23h-3.659V7.764L22 2.582zM22 1l-9.952 14.095-2.233-3.163L17.533 1H22z" />`,kimi:`<path d="M21.846 0a1.923 1.923 0 110 3.846H20.15a.226.226 0 01-.227-.226V1.923C19.923.861 20.784 0 21.846 0z" /><path d="M11.065 11.199l7.257-7.2c.137-.136.06-.41-.116-.41H14.3a.164.164 0 00-.117.051l-7.82 7.756c-.122.12-.302.013-.302-.179V3.82c0-.127-.083-.23-.185-.23H3.186c-.103 0-.186.103-.186.23V19.77c0 .128.083.23.186.23h2.69c.103 0 .186-.102.186-.23v-3.25c0-.069.025-.135.069-.178l2.424-2.406a.158.158 0 01.205-.023l6.484 4.772a7.677 7.677 0 003.453 1.283c.108.012.2-.095.2-.23v-3.06c0-.117-.07-.212-.164-.227a5.028 5.028 0 01-2.027-.807l-5.613-4.064c-.117-.078-.132-.279-.028-.381z" />`,cohere:`<path d="M8.128 14.099c.592 0 1.77-.033 3.398-.703 1.897-.781 5.672-2.2 8.395-3.656 1.905-1.018 2.74-2.366 2.74-4.18A4.56 4.56 0 0018.1 1H7.549A6.55 6.55 0 001 7.55c0 3.617 2.745 6.549 7.128 6.549z" clip-rule="evenodd" /><path d="M9.912 18.61a4.387 4.387 0 012.705-4.052l3.323-1.38c3.361-1.394 7.06 1.076 7.06 4.715a5.104 5.104 0 01-5.105 5.104l-3.597-.001a4.386 4.386 0 01-4.386-4.387z" clip-rule="evenodd" /><path d="M4.776 14.962A3.775 3.775 0 001 18.738v.489a3.776 3.776 0 007.551 0v-.49a3.775 3.775 0 00-3.775-3.775z" />`,ollama:`<path d="M7.905 1.09c.216.085.411.225.588.41.295.306.544.744.734 1.263.191.522.315 1.1.362 1.68a5.054 5.054 0 012.049-.636l.051-.004c.87-.07 1.73.087 2.48.474.101.053.2.11.297.17.05-.569.172-1.134.36-1.644.19-.52.439-.957.733-1.264a1.67 1.67 0 01.589-.41c.257-.1.53-.118.796-.042.401.114.745.368 1.016.737.248.337.434.769.561 1.287.23.934.27 2.163.115 3.645l.053.04.026.019c.757.576 1.284 1.397 1.563 2.35.435 1.487.216 3.155-.534 4.088l-.018.021.002.003c.417.762.67 1.567.724 2.4l.002.03c.064 1.065-.2 2.137-.814 3.19l-.007.01.01.024c.472 1.157.62 2.322.438 3.486l-.006.039a.651.651 0 01-.747.536.648.648 0 01-.54-.742c.167-1.033.01-2.069-.48-3.123a.643.643 0 01.04-.617l.004-.006c.604-.924.854-1.83.8-2.72-.046-.779-.325-1.544-.8-2.273a.644.644 0 01.18-.886l.009-.006c.243-.159.467-.565.58-1.12a4.229 4.229 0 00-.095-1.974c-.205-.7-.58-1.284-1.105-1.683-.595-.454-1.383-.673-2.38-.61a.653.653 0 01-.632-.371c-.314-.665-.772-1.141-1.343-1.436a3.288 3.288 0 00-1.772-.332c-1.245.099-2.343.801-2.67 1.686a.652.652 0 01-.61.425c-1.067.002-1.893.252-2.497.703-.522.39-.878.935-1.066 1.588a4.07 4.07 0 00-.068 1.886c.112.558.331 1.02.582 1.269l.008.007c.212.207.257.53.109.785-.36.622-.629 1.549-.673 2.44-.05 1.018.186 1.902.719 2.536l.016.019a.643.643 0 01.095.69c-.576 1.236-.753 2.252-.562 3.052a.652.652 0 01-1.269.298c-.243-1.018-.078-2.184.473-3.498l.014-.035-.008-.012a4.339 4.339 0 01-.598-1.309l-.005-.019a5.764 5.764 0 01-.177-1.785c.044-.91.278-1.842.622-2.59l.012-.026-.002-.002c-.293-.418-.51-.953-.63-1.545l-.005-.024a5.352 5.352 0 01.093-2.49c.262-.915.777-1.701 1.536-2.269.06-.045.123-.09.186-.132-.159-1.493-.119-2.73.112-3.67.127-.518.314-.95.562-1.287.27-.368.614-.622 1.015-.737.266-.076.54-.059.797.042zm4.116 9.09c.936 0 1.8.313 2.446.855.63.527 1.005 1.235 1.005 1.94 0 .888-.406 1.58-1.133 2.022-.62.375-1.451.557-2.403.557-1.009 0-1.871-.259-2.493-.734-.617-.47-.963-1.13-.963-1.845 0-.707.398-1.417 1.056-1.946.668-.537 1.55-.849 2.485-.849zm0 .896a3.07 3.07 0 00-1.916.65c-.461.37-.722.835-.722 1.25 0 .428.21.829.61 1.134.455.347 1.124.548 1.943.548.799 0 1.473-.147 1.932-.426.463-.28.7-.686.7-1.257 0-.423-.246-.89-.683-1.256-.484-.405-1.14-.643-1.864-.643zm.662 1.21l.004.004c.12.151.095.37-.056.49l-.292.23v.446a.375.375 0 01-.376.373.375.375 0 01-.376-.373v-.46l-.271-.218a.347.347 0 01-.052-.49.353.353 0 01.494-.051l.215.172.22-.174a.353.353 0 01.49.051zm-5.04-1.919c.478 0 .867.39.867.871a.87.87 0 01-.868.871.87.87 0 01-.867-.87.87.87 0 01.867-.872zm8.706 0c.48 0 .868.39.868.871a.87.87 0 01-.868.871.87.87 0 01-.867-.87.87.87 0 01.867-.872zM7.44 2.3l-.003.002a.659.659 0 00-.285.238l-.005.006c-.138.189-.258.467-.348.832-.17.692-.216 1.631-.124 2.782.43-.128.899-.208 1.404-.237l.01-.001.019-.034c.046-.082.095-.161.148-.239.123-.771.022-1.692-.253-2.444-.134-.364-.297-.65-.453-.813a.628.628 0 00-.107-.09L7.44 2.3zm9.174.04l-.002.001a.628.628 0 00-.107.09c-.156.163-.32.45-.453.814-.29.794-.387 1.776-.23 2.572l.058.097.008.014h.03a5.184 5.184 0 011.466.212c.086-1.124.038-2.043-.128-2.722-.09-.365-.21-.643-.349-.832l-.004-.006a.659.659 0 00-.285-.239h-.004z" />`},et=new Map;function tt(e){let t=et.get(e);if(t!==void 0)return t;let n=`<svg class="sl-micon-svg" viewBox="0 0 24 24" width="12" height="12" fill="currentColor" aria-hidden="true" focusable="false">`+$e[e]+`</svg>`;return et.set(e,n),n}var nt=[{key:`deepseek`,hit:e=>e.startsWith(`deepseek`)},{key:`ollama`,hit:e=>e.startsWith(`ollama`)},{key:`glm`,hit:e=>e.startsWith(`glm`)||e.startsWith(`chatglm`)||e===`zhipu`},{key:`qwen`,hit:e=>e.startsWith(`qwen`)||e===`tongyi`},{key:`kimi`,hit:e=>e.startsWith(`kimi`)||e===`moonshot`},{key:`grok`,hit:e=>e.startsWith(`grok`)||e===`xai`},{key:`claude`,hit:e=>e.startsWith(`claude`)||e===`anthropic`||e===`sonnet`||e===`opus`||e===`haiku`},{key:`gemini`,hit:e=>e.startsWith(`gemini`)||e===`google`},{key:`openai`,hit:e=>e.startsWith(`gpt`)||e===`chatgpt`||e===`openai`||/^o[1-4][a-z0-9]*$/.test(e)},{key:`meta`,hit:e=>e.startsWith(`llama`)||e===`meta`},{key:`mistral`,hit:e=>e.startsWith(`mistral`)||e.startsWith(`mixtral`)||e.startsWith(`codestral`)},{key:`cohere`,hit:e=>e.startsWith(`cohere`)||e.startsWith(`command-r`)}];function rt(e){let t=typeof e==`string`?e.trim().toLowerCase():``;if(t===``)return null;let n=t.split(/[^a-z0-9]+/).filter(e=>e!==``);for(let e of nt)if(n.some(e.hit))return e.key;return null}function it(e){let t=rt(e);return t===null?null:{key:t,svg:tt(t)}}function at(e){let t=N(`span`,`sl-micon sl-micon-`+e.key);return t.innerHTML=e.svg,t}function ot(e){let t=it(e);return t===null?null:at(t)}function st(e){return Number.isFinite(e)?Math.min(1,Math.max(0,e)):0}function ct(e){return Number.isFinite(e)?e.toFixed(1):`—`}var lt=null,ut=null,dt=!1;function ft(){dt||(dt=!0,window.addEventListener(`studio:config-saved`,mt))}function pt(){return lt}function mt(){lt=null}async function ht(){if(ft(),lt!==null)return lt;if(ut!==null)return ut;let e=j.config().then(e=>(lt=e,e)).finally(()=>{ut=null});return ut=e,e}async function gt(){ft();let e=await j.config();return lt=e,e}function _t(e){return{model:e.model,reasoning_effort:e.effort}}function vt(e){let t={};return e.model!==void 0&&(t.model=e.model),e.reasoning_effort!==void 0&&(t.reasoning_effort=e.reasoning_effort),t}function yt(){return w(`statusline.picker.other`)}function bt(){return[{value:null,label:w(`statusline.picker.standardClear`)},{value:`low`,label:`low`},{value:`high`,label:`high`},{value:`max`,label:`max`}]}function xt(e,t,n,r,i){if(t===`effort`){St(e,n.reasoning_effort??``,i);return}Ct(e,n,r,i)}function St(e,t,n){let r=document.createElement(`div`),i=[...bt()],a=t;a&&!i.some(e=>e.value===a)&&i.push({value:a,label:a+w(`statusline.picker.currentSuffix`)});for(let e of i)r.appendChild(Dt(e.label,e.value??``,a,()=>n.apply({reasoning_effort:e.value})));e.replaceChildren(...r.childNodes)}function Ct(e,t,n,r){let i=document.createElement(`div`),a=Array.isArray(t.available?.models)?t.available.models:[],o=t.model??n.snapshotModel;if(!a.length){let t=N(`div`,`sl-popup-textrow`),a=N(`input`,`sl-popup-input`);a.placeholder=w(`statusline.picker.modelName`),a.value=o,t.appendChild(a);let s=N(`button`,`btn btn-accent btn-mini`,w(`statusline.picker.apply`));s.addEventListener(`click`,()=>{let e=a.value.trim();e!==``&&e!==o&&r.pick({model:e,providerId:``})}),t.appendChild(s),i.appendChild(t),i.appendChild(N(`div`,`sl-popup-note`,w(`statusline.picker.enterModel`))),wt(i,n),e.replaceChildren(...i.childNodes);return}let s=a.some(e=>e.id===o);if(o&&!s){i.appendChild(Dt(o+w(`statusline.picker.currentSuffix`),o,o,()=>r.apply({model:o})));let e=N(`div`,`sl-popup-sep`);e.textContent=w(`statusline.picker.candidates`),i.appendChild(e)}let c=a.find(e=>e.active===!0)??null,l=a.find(e=>e.id===o)??null,u=(c?.provider_id??``).trim(),d=e=>c===null?l!==null&&e===l:e.active===!0,f=[],p=new Map;for(let e of a){let t=(e.provider_id??``).trim(),n=(e.provider??``).trim()||(t===``?yt():t),r=t===``?n:t,i=p.get(r);i||(i={pid:t,name:n,list:[]},p.set(r,i),f.push(i)),i.list.push(e)}wt(i,n);for(let e of f){i.appendChild(Et(e.name,e.pid,e.list.some(d)));for(let t of e.list){let e={model:t.id,providerId:(()=>{let e=(t.provider_id??``).trim();return e!==``&&e!==u?e:``})()};i.appendChild(Dt(t.name||t.id,t.id,d(t)?t.id:``,()=>r.pick(e),!0))}}e.replaceChildren(...i.childNodes)}function wt(e,t){t.sessionModelFixed&&t.sessionId!==``&&e.appendChild(N(`div`,`sl-popup-note`,w(`statusline.picker.fixed`)))}function Tt(e,t,n){return e===`effort`?(t.reasoning_effort??``)!==(n.reasoning_effort??``):(t.model??``)!==(n.model??``)||JSON.stringify(t.available?.models??[])!==JSON.stringify(n.available?.models??[])}function Et(e,t,n){let r=N(`div`,`sl-group`+(n?` cur`:``));return r.appendChild(N(`span`,`sl-group-name`,e)),t!==``&&t!==e&&r.appendChild(N(`span`,`sl-group-id`,t)),n&&r.appendChild(N(`span`,`sl-group-tag`,w(`statusline.currentTag`))),r}function Dt(e,t,n,r,i=!1){let a=N(`button`,`sl-opt`+(i?` sub`:``)+(t!==``&&t===n?` current`:``)),o=ot(t);return o!==null&&a.appendChild(o),a.appendChild(N(`span`,`sl-opt-name`,e)),t!==``&&a.appendChild(N(`span`,`sl-opt-val`,t)),t!==``&&t===n&&a.appendChild(N(`span`,`sl-opt-tag`,w(`statusline.currentTag`))),a.addEventListener(`click`,r),a}function Ot(e){return e===``?`config`:`session`}function kt(e,t,n,r){return{kind:`ok`,target:e,model:t,covered:n,effective:r}}async function At(e,t){if(e===``)return{kind:`error`,target:`config`,text:w(`statusline.sessionNotReady`)};try{let n=await j.setSessionModel(e,t);if(n.ok===!1)return{kind:`error`,target:`session`,text:w(`statusline.switchFailedRetry`)};let r=typeof n.model==`string`&&n.model!==``?n.model:t,i=n.effective===void 0?``:n.effective.model??``;return kt(`session`,r,n.covered===!0,i===``?null:i)}catch(e){return Mt(e,`session`,w(`statusline.switchFailed`,{reason:O(e,w(`statusline.retryLater`))}))}}async function jt(e){try{let t=await j.saveConfig({model:e}),n=typeof t.model==`string`&&t.model!==``?t.model:e;return kt(`config`,n,!1,n)}catch(e){return Mt(e,`config`,w(`statusline.switchFailed`,{reason:O(e,w(`statusline.retryLater`))}))}}function Mt(e,t,n){if(e instanceof D){if(e.status===409)return{kind:`busy`,target:t,text:n};if(e.status===404||e.status===405)return{kind:`unsupported`,target:t,text:w(`statusline.sessionModel.unsupported`)};if(e.status===400||e.status===422)return{kind:`invalid`,target:t,text:n}}return{kind:`error`,target:t,text:n}}function Nt(e){return w(e===`session`?`statusline.sessionModel.switchedSession`:`statusline.sessionModel.switchedGlobal`)}function Pt(e){return w(`statusline.withRestoredSettings`,{text:e.text})}var Ft=e=>({apply:t=>void Ht(e,t),pick:t=>void Vt(e,t)});function It(e,t){if(e.popup&&e.popupKind===t){Lt(e);return}Rt(e,t)}function Lt(e){e.popupOverlay&&(F(e.popupOverlay),e.popupOverlay=null),e.popup&&(e.popup.remove(),e.popup=null,e.popupKind=null)}async function Rt(e,t){Lt(e),e.popupKind=t;let n=N(`div`,`sl-popup`);n.setAttribute(`role`,`menu`),e.popup=n,e.root.appendChild(n),e.popupOverlay=P(()=>Lt(e)),n.appendChild(N(`div`,`sl-popup-title`,w(t===`model`?`statusline.picker.switchModel`:`statusline.picker.switchEffort`)));let r=N(`div`,`sl-popup-body`);n.appendChild(r);let i=Ft(e),a=pt();t===`effort`?St(r,a?.reasoning_effort??e.snapshotEffort??``,i):a!==null&&Ct(r,a,e,i);let o;try{o=a===null?await ht():await gt()}catch(i){if(e.popup!==n||a!==null||t===`effort`)return;r.replaceChildren(N(`div`,`sl-popup-error`,O(i,w(`statusline.picker.configUnavailable`))));return}e.popup===n&&(a===null||Tt(t,a,o))&&xt(r,t,o,e,i)}async function zt(e,t){t.providerId!==``&&await j.setDefaultModel(t.model,t.providerId);let n=Ot(e.sessionId)===`session`?await At(e.sessionId,t.model):await jt(t.model);return n.kind===`ok`?(e.merge({model:n.model}),window.dispatchEvent(new Event(`studio:config-saved`)),n):n}function Bt(e){return _t({model:e.snapshotModel,effort:e.snapshotEffort})}async function Vt(e,t){if(!e.popup)return;let n=e.popup,r=Bt(e);e.merge({model:t.model});let i=await zt(e,t);if(i.kind===`ok`){e.setNote(Nt(i.target),5e3),Lt(e);return}if(e.merge(r),i.kind===`busy`){e.pendingPick=t,e.setNote(w(`statusline.picker.busy`),0),Lt(e);return}let a=Pt(i);e.popup===n?n.appendChild(N(`div`,`sl-popup-status err`,a)):e.setNote(a,6e3)}async function Ht(e,t){if(!e.popup)return;let n=e.popup,r=Bt(e);e.merge(vt(t));try{let n=await j.saveConfig(t);e.merge({model:n.model,reasoning_effort:n.reasoning_effort}),e.setNote(w(`statusline.switched`),5e3),window.dispatchEvent(new Event(`studio:config-saved`)),Lt(e)}catch(i){let a=w(`statusline.withRestoredSettings`,{text:w(`statusline.switchFailed`,{reason:i instanceof Error?i.message:String(i)})});Ut(i)?(e.merge(r),e.pendingPatch=t,e.setNote(w(`statusline.picker.busy`),0),Lt(e)):(e.merge(r),e.popup===n?n.appendChild(N(`div`,`sl-popup-status err`,a)):e.setNote(a,6e3))}}function Ut(e){return typeof e==`object`&&!!e&&e.status===409}function Wt(e){let t=e.pendingPick;if(t===null)return!1;e.pendingPick=null;let n=Bt(e);return e.merge({model:t.model}),zt(e,t).then(t=>{if(t.kind===`ok`){e.setNote(Nt(t.target),5e3);return}e.merge(n),e.setNote(Pt(t),6e3)}),!0}function Gt(e){return e===`standard`?w(`mode.badge.standard`):e===`execution`?w(`mode.badge.execution`):``}function Kt(){return[{value:`standard`,label:w(`mode.choice.standard`)},{value:`execution`,label:w(`mode.choice.execution`)}]}function qt(){return{applied:w(`mode.note.applied`),busy:w(`mode.note.busy`),unsupported:w(`mode.note.unsupported`),invalid:w(`mode.note.invalid`)}}var Jt=6e4,Yt=`unknown`,Xt=0;async function Zt(e=!1){let t=Date.now();if(!e&&Yt!==`unknown`&&t-Xt<Jt)return Yt===`on`;Xt=t;try{Yt=(await j.health()).capabilities?.session_mode_tools===!0?`on`:`off`}catch{Yt=`off`}return Yt===`on`}function Qt(e,t){let n=Gt(t);e.textContent=n,e.classList.toggle(`hidden`,n===``),e.classList.toggle(`exec`,t===`execution`),e.title=n===``?``:w(`statusline.mode.badgeTitle`,{mode:n})}async function $t(e,t){if(e===``)return{kind:`error`,text:w(`statusline.sessionNotReady`)};try{let n=await j.setSessionMode(e,t);return n.ok===!1||n.mode!==t?{kind:`error`,text:w(`statusline.switchFailedRetry`)}:{kind:`ok`,mode:t}}catch(e){if(e instanceof D){if(e.status===409)return{kind:`busy`};if(e.status===404||e.status===405)return{kind:`unsupported`};if(e.status===400||e.status===422)return{kind:`invalid`}}return{kind:`error`,text:w(`statusline.switchFailed`,{reason:O(e,w(`statusline.retryLater`))})}}}var en=null,tn=null,nn=null;function rn(){tn!==null&&(F(tn),tn=null),en!==null&&(en.remove(),en=null),nn=null}function an(e){if(en===null)return!1;let t=typeof e.composedPath==`function`?e.composedPath():[],n=e.target;return t.some(e=>e===en)||n instanceof Node&&en.contains(n)}function on(e){if(en!==null){rn();return}sn(e)}function sn(e){rn();let t=N(`div`,`sl-popup`);t.setAttribute(`role`,`menu`),en=t,nn=e,e.root.appendChild(t),tn=P(()=>rn()),t.appendChild(N(`div`,`sl-popup-title`,w(`statusline.mode.title`)));let n=N(`div`,`sl-popup-body`);t.appendChild(n),cn(n,e.currentMode,!0),Zt().then(r=>{r||en!==t||cn(n,e.currentMode,!1)})}function cn(e,t,n){let r=document.createElement(`div`);for(let e of Kt())r.appendChild(ln(e.value,e.label,e.value===t,n));let i=n?w(`statusline.mode.currentNote`,{mode:Gt(t)||w(`statusline.unknown`)}):qt().unsupported;r.appendChild(N(`div`,`sl-popup-note`,i)),e.replaceChildren(...r.childNodes)}function ln(e,t,n,r){let i=N(`button`,`sl-opt`+(n?` current`:``));return i.type=`button`,i.appendChild(N(`span`,`sl-opt-name`,t)),n&&i.appendChild(N(`span`,`sl-opt-tag`,w(`statusline.currentTag`))),i.disabled=!r||n,i.addEventListener(`click`,()=>{r&&!n&&un(e)}),i}async function un(e){let t=nn,n=en;if(t===null||n===null)return;if(t.sessionId===``){t.setNote(w(`statusline.sessionNotReady`),6e3);return}let r=t.currentMode,i=n.querySelector(`.sl-popup-body`);t.applyMode(e),i!==null&&cn(i,e,!0);let a=await $t(t.sessionId,e);if(a.kind===`ok`){t.setNote(w(`statusline.mode.switched`,{note:qt().applied}),6e3),rn();return}t.applyMode(r),a.kind===`unsupported`&&i!==null&&cn(i,r,!1);let o=qt(),s=a.kind===`busy`?o.busy:a.kind===`unsupported`?o.unsupported:a.kind===`invalid`?o.invalid:a.text;t.setNote(s,6e3),en===n&&n.appendChild(N(`div`,`sl-popup-status err`,s))}function dn(e){let t=Math.max(0,e.panelHeight),n=Math.max(0,e.bodyClientHeight),r=Math.max(n,e.bodyScrollHeight),i=Math.max(0,t-n);return Math.max(t,i+r)}function fn(e){let t=e.gap??8,n=e.margin??8,r=e.minHeight??120,i=Math.max(0,e.viewport.width),a=Math.max(0,e.panel.width),o=e.anchor.top-t-n,s=Math.max(r,o),c=Math.min(Math.max(0,e.panel.height),s),l=Math.max(n,e.anchor.top-t-c),u=Math.max(n,i-n-a),d=Math.max(n,Math.min(e.anchor.right-a,u));return{top:Math.round(l),left:Math.round(d),maxHeight:Math.round(s)}}function pn(e){return e.querySelector(`.sl-popup-body`)}function mn(){return{width:window.innerWidth||document.documentElement.clientWidth||0,height:window.innerHeight||document.documentElement.clientHeight||0}}function hn(e){let t=pn(e);return{width:e.offsetWidth,height:dn({panelHeight:e.offsetHeight,bodyClientHeight:t?t.clientHeight:0,bodyScrollHeight:t?t.scrollHeight:0})}}function gn(e){if(e&&e.isConnected){let t=e.getBoundingClientRect();if(t.width>0&&t.height>0)return t}let t=document.getElementById(`statusline`);if(!t)return null;let n=t.getBoundingClientRect();return{top:n.top,right:n.right,bottom:n.top,left:n.right,width:0,height:0}}function _n(e,t){let n=fn({anchor:t,panel:hn(e),viewport:mn()}),r=pn(e),i=r?r.scrollTop:0;e.style.maxHeight=n.maxHeight+`px`,e.style.top=n.top+`px`,e.style.left=n.left+`px`,r&&r.scrollTop!==i&&(r.scrollTop=i)}function vn(){return w(`settings.permissions.unsandboxedNote`)}var yn=/^[a-z][a-z0-9_-]{0,63}$/;function bn(e){return e===`write_file`?w(`settings.permissions.toolNoWrite`):w(`settings.permissions.toolDisabled`,{name:e})}function xn(e){let t=[{text:w(e.network?`settings.permissions.networkOn`:`settings.permissions.networkOff`),tone:e.network?`on`:`off`},{text:w(e.workspaceWritable?`settings.permissions.workspaceOn`:`settings.permissions.workspaceOff`),tone:e.workspaceWritable?`on`:`off`},{text:w(e.toolRootsWritable?`settings.permissions.toolRootOn`:`settings.permissions.toolRootOff`),tone:e.toolRootsWritable?`on`:`off`},{text:w(e.allPaths?`settings.permissions.allPathsOn`:`settings.permissions.allPathsOff`),tone:e.allPaths?`on`:`off`}],n=e.writeRoots.length;if(t.push({text:n===0?w(`settings.permissions.noExtraRoots`):w(`settings.permissions.extraRoots`,{n}),tone:n===0?`off`:`on`}),t.push({text:w(e.unsandboxed?`settings.permissions.unsandboxedOn`:`settings.permissions.unsandboxedOff`),tone:e.unsandboxed?`on`:`off`}),e.toolDeny.length===0)t.push({text:w(`settings.permissions.noToolDeny`),tone:`off`});else for(let n of e.toolDeny)t.push({text:bn(n),tone:`deny`});return t}function Sn(e){return e===``?``:w(`settings.permissions.maxNote`,{max:e})}function Cn(e){if(e==null)return``;let t=[];return e.network&&t.push(w(`settings.permissions.riskNetwork`)),e.allPaths&&t.push(w(`settings.permissions.riskAllPaths`)),e.unsandboxed&&t.push(vn()),t.join(` · `)}function wn(e){return e.unsandboxed?vn():``}var Tn=`studio:permissions-changed`,I=null,En=null;function Dn(e){return{...e,writeRoots:[...e.writeRoots],toolDeny:[...e.toolDeny]}}function On(e){return{builtin:e.builtin.map(Dn),custom:e.custom.map(Dn),max:e.max}}function kn(){typeof window<`u`&&window.dispatchEvent(new Event(Tn))}function An(){return I===null?null:On(I)}function jn(e){I=e===null?null:On(e),kn()}function Mn(){return I===null?[]:[...I.builtin,...I.custom].map(Dn)}function Nn(e){if(I===null)return null;let t=[...I.builtin,...I.custom].find(t=>t.id===e);return t===void 0?null:Dn(t)}function Pn(e){let t=Nn(e);return t===null?e:t.label||e}function Fn(e){I===null&&(I={builtin:[],custom:[],max:``});let t=I.custom.filter(t=>t.id!==e.id);t.push(Dn(e)),I={...I,custom:t},kn()}function In(e){I!==null&&(I={...I,custom:I.custom.filter(t=>t.id!==e)},kn())}async function Ln(e=!1){return!e&&I!==null?On(I):(En===null&&(En=j.permissionPresets().then(e=>(I={builtin:e.builtin??[],custom:e.custom??[],max:typeof e.max==`string`?e.max:``},kn(),On(I))).finally(()=>{En=null})),En)}var L=null,Rn=null,zn=null,Bn=null,Vn=null,Hn=null;function Un(){if(L===null)return;let e=gn(Vn);e&&_n(L,e)}function Wn(){Hn?.();let e=0,t=t=>{L&&t.target instanceof Node&&L.contains(t.target)||e===0&&(e=window.requestAnimationFrame(()=>{e=0,Un()}))};window.addEventListener(`resize`,t),document.addEventListener(`scroll`,t,!0),Hn=()=>{e!==0&&(window.cancelAnimationFrame(e),e=0),window.removeEventListener(`resize`,t),document.removeEventListener(`scroll`,t,!0)}}function Gn(){Hn?.(),Hn=null}function Kn(e,t,n){if(e===null)return;let r=n!==null&&n.preset!==``;e.classList.toggle(`hidden`,!r);let i=r?n.label||n.preset:``;t!==null&&r&&(t.textContent=i),e.title=r?w(`statusline.perm.badgeTitle`,{tier:i}):w(`statusline.perm.title`),e.setAttribute(`aria-label`,r?w(`statusline.perm.badgeAria`,{tier:i}):w(`statusline.perm.title`))}function qn(e,t,n){let r=null,i=null,a=``,o=new Map,s=()=>Kn(r,i,o.get(a)??null),c={root:e,get sessionId(){return a},get currentPreset(){return o.get(a)?.preset??``},applyPermission(e,t){e===``?o.delete(a):o.set(a,{preset:e,label:t}),s()},setNote:(e,t)=>n(e,t),attach(){r=e.querySelector(`#slPerm`),i=e.querySelector(`#slPermBadge`),r!==null&&(a=t(),r.addEventListener(`click`,()=>Zn(c)),s())},onSession(e){a=e,s(),r!==null&&Jn(c)},onOutsideClick(e){Xn(e)||r!==null&&r.contains(e.target)||Yn()}};return c}async function Jn(e){let t=e.sessionId;if(t===``){e.applyPermission(``,``);return}try{let[n]=await Promise.all([j.sessionPermission(t),Ln().catch(()=>null)]);if(t!==e.sessionId)return;if(n.ok===!1||typeof n.preset!=`string`||n.preset===``){e.applyPermission(``,``);return}e.applyPermission(n.preset,Pn(n.preset))}catch(n){if(t!==e.sessionId)return;n instanceof D&&n.status!==0&&e.applyPermission(``,``)}}function Yn(){Bn!==null&&(window.removeEventListener(Tn,Bn),Bn=null),Gn(),Rn!==null&&(F(Rn),Rn=null),L!==null&&(L.remove(),L=null),zn=null}function Xn(e){if(L===null)return!1;let t=typeof e.composedPath==`function`?e.composedPath():[],n=e.target;return t.some(e=>e===L)||n instanceof Node&&L.contains(n)}function Zn(e){if(L!==null){Yn();return}Qn(e)}function Qn(e){Yn();let t=N(`div`,`sl-popup perm-popup`);t.setAttribute(`role`,`menu`),L=t,zn=e,Vn=document.getElementById(`slPerm`),e.root.appendChild(t),Rn=P(()=>Yn()),t.appendChild(N(`div`,`sl-popup-title`,w(`statusline.perm.title`)));let n=N(`div`,`sl-popup-body`);t.appendChild(n),$n(n,e),Un(),Wn(),Bn=()=>{L===t&&($n(n,e),Un())},window.addEventListener(Tn,Bn),Ln().then(()=>{L===t&&($n(n,e),Un())}).catch(()=>{})}function $n(e,t){let n=document.createElement(`div`);for(let e of Mn())n.appendChild(er(e,t));let r=Cn(Nn(t.currentPreset));r!==``&&n.appendChild(N(`div`,`sl-popup-note perm-risk`,r));let i=An()?.max??``;i!==``&&n.appendChild(N(`div`,`sl-popup-note`,Sn(i))),t.sessionId===``&&n.appendChild(N(`div`,`sl-popup-note`,w(`statusline.perm.noSession`))),e.replaceChildren(...n.childNodes)}function er(e,t){let n=e.id===t.currentPreset,r=N(`button`,`sl-opt`+(n?` current`:``));return r.type=`button`,r.dataset.preset=e.id,r.appendChild(N(`span`,`sl-opt-name`,e.label||e.id)),r.appendChild(N(`span`,`sl-opt-val`,e.id)),n&&r.appendChild(N(`span`,`sl-opt-tag`,w(`statusline.currentTag`))),r.disabled=n||t.sessionId===``,r.addEventListener(`click`,()=>{!n&&t.sessionId!==``&&nr(e)}),r}async function tr(e,t){try{let n=await j.setSessionPermission(e,t);return n.ok===!1?{ok:!1,text:w(`statusline.withRestoredTier`,{text:w(`statusline.perm.rejected`)})}:typeof n.preset==`string`&&n.preset!==t?{ok:!1,text:w(`statusline.withRestoredTier`,{text:w(`statusline.perm.notAccepted`)})}:{ok:!0,text:``}}catch(e){return e instanceof D?e.status===404||e.status===405?{ok:!1,text:w(`statusline.withRestoredTier`,{text:w(`statusline.perm.unsupported`)})}:e.status===422?{ok:!1,text:w(`statusline.withRestoredTier`,{text:w(`statusline.switchFailed`,{reason:e.technical||w(`statusline.perm.unknownTier`)})})}:{ok:!1,text:w(`statusline.withRestoredTier`,{text:w(`statusline.switchFailed`,{reason:e.message})})}:{ok:!1,text:w(`statusline.withRestoredTier`,{text:w(`statusline.switchFailed`,{reason:O(e,w(`statusline.retryLater`))})})}}}async function nr(e){let t=zn,n=L;if(t===null||n===null)return;let r=t.currentPreset,i=Nn(r)?.label??r,a=n.querySelector(`.sl-popup-body`);t.applyPermission(e.id,e.label||e.id),a!==null&&$n(a,t);let o=await tr(t.sessionId,e.id);if(o.ok){t.setNote(w(`statusline.perm.switched`),6e3),Yn();return}if(t.applyPermission(r,i),L!==n){t.setNote(o.text,6e3);return}let s=n.querySelector(`.sl-popup-body`);s!==null&&$n(s,t),n.appendChild(N(`div`,`sl-popup-status err`,o.text)),t.setNote(o.text,6e3)}var rr=2*Math.PI*5.5,ir=.9;function ar(e,t,n){if(n&&n.window>0){let r=st(n.ratio);e.textContent=Ce(n.used)+`/`+Ce(n.window),t.style.strokeDashoffset=String(rr*(1-r)),t.classList.toggle(`warn`,r>=ir),t.title=w(`statusline.ring.title`,{pct:Math.round(r*1e3)/10,used:Ce(n.used),window:Ce(n.window),click:w(`statusline.ring.clickFull`)})}else n?(e.textContent=w(`statusline.ring.unknown`),t.style.strokeDashoffset=String(rr),t.classList.remove(`warn`),t.title=w(`statusline.ring.unknownTitle`)):(e.textContent=`—/—`,t.style.strokeDashoffset=String(rr),t.classList.remove(`warn`),t.title=w(`statusline.ring.noneTitle`,{click:w(`statusline.ring.clickFull`)}));t.setAttribute(`aria-label`,(t.title??``).replace(w(`statusline.ring.clickFull`),``))}function or(e,t,n){let r=t||`—`,i=it(t),a=i===null?null:i.key;if(a===n.iconKey&&r===n.label)return;n.iconKey=a,n.label=r;let o=[];i!==null&&o.push(at(i)),o.push(document.createTextNode(r)),e.replaceChildren(...o)}function sr(e,t){if(!t||!(t.prompt_tokens>0)){e.textContent=w(`statusline.cache.none`),e.title=w(`statusline.cache.noneTitle`),e.setAttribute(`aria-label`,e.title);return}e.textContent=w(`statusline.cache.label`,{pct:Math.round(st(t.cache_hit_ratio)*100)});let n=t.total;e.title=w(`statusline.cache.title`,{read:t.cache_read,prompt:t.prompt_tokens})+(n?w(`statusline.cache.titleCumulative`,{pct:(st(n.cache_hit_ratio)*100).toFixed(1),read:n.cache_read,prompt:n.prompt_tokens}):``),e.setAttribute(`aria-label`,e.title)}function cr(e=8){return{values:[],capacity:Number.isFinite(e)&&e>=1?Math.floor(e):8}}function lr(e){return typeof e==`number`&&Number.isFinite(e)&&e>0}function ur(e,t){if(!lr(t))return e;let n=e.values.length>=e.capacity?e.values.slice(e.values.length-e.capacity+1):e.values.slice();return n.push(t),{values:n,capacity:e.capacity}}function dr(e){if(e.values.length===0)return null;let t=0;for(let n of e.values)t+=n;return t/e.values.length}function fr(e,t,n,r){if(lr(t))return{text:r(t)+` tok/s`,title:``,approximate:!1,samples:e.values.length};let i=dr(e);if(i===null)return{text:`— tok/s`,title:``,approximate:!1,samples:0};let a=w(n?`statusline.tps.idle`:`statusline.tps.inactive`);return{text:`≈ `+r(i)+` tok/s`,title:w(`statusline.tps.meanTitle`,{why:a,n:e.values.length}),approximate:!0,samples:e.values.length}}var R={turn:null,streaming:!1,t0:0,conn:`connecting`,assistant:null,sessions:[],selSession:null,msgTimer:null};function pr(){return{timer:null,deadline:-1/0}}var z=new Map,mr=new Map,hr=new Set,gr=new Set,_r=null,vr=null,yr=!1;function br(){let e=N(`div`,`empty-hint`);return e.appendChild(N(`div`,`empty-mark`,`◇`)),e.appendChild(N(`div`,`empty-title`,`Celestea Studio`)),e.appendChild(N(`div`,`empty-sub`,w(`chat.empty.hint`))),e}function xr(e,t,n){let r=N(`div`,`sess-pane`);r.dataset.session=e,r.tabIndex=-1,t===`worker`&&r.classList.add(`is-worker`);let i=br();return r.appendChild(i),{id:e,kind:t,title:n,el:r,hint:i,assistant:null,thinkSeg:null,lastTextCol:null,render:pr(),ops:new Map,step:0,turn:null,streaming:!1,t0:0,phase:``,draft:``,goal:null,scrollTop:0,stickBottom:!0,restored:!1,restoreSeq:0,dedup:{tail:null,guardActive:!1,guardBuf:``,guardAll:!1},histToolStep:0,restoreOps:new Map,status:null,interjectNote:null,usedAt:Date.now()}}function Sr(e){return z.get(e)}function Cr(){return Array.from(z.values())}function wr(e,t,n){let r=z.get(e);if(r)return t&&(r.kind=t),n&&(r.title=n),r;let i=xr(e,t??``,n??``);return z.set(e,i),vr&&vr.appendChild(i.el),Er(i),i}function Tr(e,t){let n=z.get(e);n&&(t.kind&&(n.kind=t.kind),t.title&&(n.title=t.title),t.model!==void 0&&(n.model=t.model),t.workspace!==void 0&&(n.workspace=t.workspace))}function Er(e){for(;z.size>12;){let t=null;for(let n of z.values())n===e||n===_r||n.streaming||(!t||n.usedAt<t.usedAt)&&(t=n);if(!t)return;t.el.remove(),z.delete(t.id)}}function Dr(e){let t=z.get(e);return!t||e===``?!1:(t===_r&&Mr(``),t.el.remove(),z.delete(e),mr.delete(e),Ir(e,!1),!0)}function Or(){let e=document.querySelector(`#input`);return e?e.value:``}function kr(e){let t=document.querySelector(`#input`);t&&(t.value=e,t.style.height=`auto`,t.style.height=Math.min(t.scrollHeight,240)+`px`)}function Ar(e){return e.scrollTop+e.clientHeight>=e.scrollHeight-25}function B(){return _r}function jr(){return _r?_r.id:``}function V(e){return e===_r}function Mr(e,t,n){let r=wr(e,t,n),i=_r;if(i===r)return r;i&&(i.draft=Or(),i.scrollTop=i.el.scrollTop,i.stickBottom=Ar(i.el),i.el.hidden=!0,i.el.classList.remove(`is-active`)),_r=r,r.usedAt=Date.now(),r.el.hidden=!1,r.el.classList.add(`is-active`);let a=r.stickBottom?r.el.scrollHeight:r.scrollTop;r.el.scrollTop=a,requestAnimationFrame(()=>{_r===r&&(r.el.scrollTop=a)}),kr(r.draft),R.turn=r.turn,R.streaming=r.streaming,R.assistant=r.assistant,R.t0=r.t0,R.selSession=r.id===``?null:r.id;for(let e of hr)try{e(r,i)}catch(e){console.warn(`[viewctx] pane change listener failed`,e)}return r}function Nr(e){if(e===``)return Mr(``);let t=z.get(e);if(t){let n=z.get(``);return n&&n!==t&&(n.el.querySelector(`.mcol`)===null&&n.dedup.tail===null&&z.delete(``),n.el.isConnected&&n.el.remove()),Mr(e)}let n=z.get(``);if(!n)return Mr(e);if(z.delete(``),n.id=e,n.el.dataset.session=e,z.set(e,n),_r===n){R.selSession=e;for(let e of hr)try{e(n,null)}catch{}}return n}function Pr(e){if(e===``)return z.get(``)??null;let t=z.get(e);if(t)return t;let n=z.get(``);return!n||!(n.streaming||n.el.querySelector(`.mcol`)!==null)?null:Nr(e)}function Fr(e){return mr.get(e)===!0}function Ir(e,t){for(let n of gr)try{n(e,t)}catch(e){console.warn(`[viewctx] busy listener failed`,e)}}function Lr(e,t){mr.get(e)===!0!==t&&(mr.set(e,t),Ir(e,t))}function Rr(e,t){e.streaming=t,t&&(e.usedAt=Date.now()),Lr(e.id===``?``:e.id,t),e===_r&&(R.streaming=t)}function zr(e,t){(t||!z.get(e)?.streaming)&&Lr(e,t)}function Br(e){hr.add(e)}function Vr(e){gr.add(e);for(let[t,n]of mr)n&&e(t,!0)}function Hr(){if(yr&&_r)return _r;if(vr=document.getElementById(`messages`),!vr)throw Error(`missing element: #messages`);yr=!0;let e=Mr(``),t=document.querySelector(`#input`);return t&&t.addEventListener(`input`,()=>{_r&&(_r.draft=t.value)}),e}var Ur=new Map,Wr=new Set;function Gr(){for(let e of Wr)e()}function Kr(e){return Wr.add(e),()=>Wr.delete(e)}function qr(e){return Ur.get(e)??null}function Jr(e,t){Ur.set(e,t),Gr()}function Yr(e){if(typeof e!=`object`||!e)return null;let t=e,n=typeof t.text==`string`?t.text:``;if(n===``)return null;let r=new Date().toISOString();return{text:n,createdAt:typeof t.createdAt==`string`?t.createdAt:r,updatedAt:typeof t.updatedAt==`string`?t.updatedAt:r}}async function Xr(e,t){let n=e.id,r=Ur.get(n)??null,i=t.trim();Jr(n,i===``?null:{text:i,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}),e.goal=i===``?null:i;try{let t=await j.setGoal(n,i);if(t.ok===!1)throw Error(t.error??w(`chat.goal.failed`));let r=Yr(t.goal);return Jr(n,r),e.goal=r?r.text:null,r}catch(t){throw Jr(n,r),e.goal=r?r.text:null,Error(w(`chat.goal.saveFailed`,{reason:O(t,w(`settings.common.retryLater`))}))}}function Zr(e){let t=qr(e.id);return t?t.text:``}var Qr=null;function $r(){return Qr&&Qr.isConnected?Qr:(Qr=N(`div`,`goal-bar hidden`),(document.getElementById(`main`)??document.body).appendChild(Qr),Qr)}function ei(){let e=$r(),t=B(),n=t?qr(t.id):null;if(!n){e.classList.add(`hidden`),e.replaceChildren();return}e.classList.remove(`hidden`);let r=document.createElement(`div`);r.appendChild(N(`span`,`goal-tag`,w(`chat.goal.tag`))),r.appendChild(N(`span`,`goal-text`,n.text));let i=N(`button`,`goal-done`,w(`chat.goal.done`));i.type=`button`,i.title=w(`chat.goal.clearHint`),i.addEventListener(`click`,()=>{let e=B()??Sr(t?.id??``);e&&Xr(e,``)}),r.appendChild(i),e.replaceChildren(...Array.from(r.childNodes))}var ti=24,ni=null,ri=null;function ii(){if(!ri||!ni)return;let e=B(),t=e?qr(e.id):null;if(!t){ri.classList.add(`hidden`),ni.textContent=``,ri.removeAttribute(`title`);return}ri.classList.remove(`hidden`);let n=t.text.length>ti?t.text.slice(0,ti)+`…`:t.text;ni.textContent=w(`statusline.goalBadge`,{text:n}),ri.title=w(`statusline.goalTitle`,{text:t.text})}function ai(){if(!ri){let e=document.getElementById(`slGoal`);if(!e)return;ri=e,ni=M(`#slGoalBadge`,e),ri.addEventListener(`click`,()=>ii())}Kr(ii),ii()}function oi(){ii()}var si=2e3,ci=new class{constructor(){E(this,`snapshot`,{}),E(this,`timer`,null),E(this,`el`,void 0),E(this,`ring`,void 0),E(this,`ringProg`,void 0),E(this,`ctxEl`,void 0),E(this,`modelEl`,void 0),E(this,`effortEl`,void 0),E(this,`tpsEl`,void 0),E(this,`cacheEl`,void 0),E(this,`stepsEl`,void 0),E(this,`hintEl`,void 0),E(this,`modeEl`,void 0),E(this,`perm`,void 0),E(this,`session`,``),E(this,`cache`,new Map),E(this,`popup`,null),E(this,`popupKind`,null),E(this,`popupOverlay`,null),E(this,`pendingPatch`,null),E(this,`pendingPick`,null),E(this,`modelCell`,{label:``,iconKey:null}),E(this,`tpsCache`,new Map),E(this,`staleMsg`,``),E(this,`note`,``),E(this,`noteTimer`,null),this.el=M(`#statusline`),this.ring=M(`.sl-ring`,this.el),this.ringProg=M(`.sl-ring-prog`,this.el),this.ctxEl=M(`#slCtx`,this.el),this.modelEl=M(`#slModel`,this.el),this.effortEl=M(`#slEffort`,this.el),this.tpsEl=M(`#slTps`,this.el),this.cacheEl=M(`#slCache`,this.el),this.stepsEl=M(`#slSteps`,this.el),this.hintEl=M(`#slHint`,this.el),this.modeEl=M(`#slMode`,this.el),this.perm=qn(this.el,()=>this.session,(e,t)=>this.setNote(e,t)),this.ringProg.style.strokeDasharray=String(rr),this.el.title=w(`statusline.tooltip`),this.ring.setAttribute(`role`,`button`),this.ring.setAttribute(`tabindex`,`0`),this.ring.setAttribute(`aria-haspopup`,`dialog`),this.ring.addEventListener(`click`,()=>void this.openContext()),this.ring.addEventListener(`keydown`,e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),this.openContext())}),this.modelEl.addEventListener(`click`,()=>It(this,`model`)),this.effortEl.addEventListener(`click`,()=>It(this,`effort`)),this.modeEl.addEventListener(`click`,()=>on(this)),this.perm.attach(),document.addEventListener(`click`,e=>{let t=typeof e.composedPath==`function`?e.composedPath():[];this.popup&&!((...n)=>n.some(n=>n!==null&&(t.some(e=>e===n)||n.contains(e.target))))(this.popup,this.modelEl,this.effortEl)&&Lt(this),!an(e)&&!this.modeEl.contains(e.target)&&rn(),this.perm.onOutsideClick(e)})}tpsSamplesFor(e){let t=this.tpsCache.get(e);if(t)return t;let n=cr();return this.tpsCache.set(e,n),n}get root(){return this.el}get sessionId(){return this.session}get currentMode(){return typeof this.snapshot.mode==`string`?this.snapshot.mode:``}applyMode(e){this.snapshot={...this.snapshot,mode:e},this.cache.set(this.session,this.snapshot),this.render()}get snapshotModel(){return this.snapshot.model??``}get sessionModelFixed(){return this.snapshot.model_covered===!0}get snapshotEffort(){return this.snapshot.reasoning_effort??null}start(){ai(),this.poll(),this.timer=window.setInterval(()=>this.poll(),si)}setSession(e){let t=e??``;if(this.session===t)return;this.session=t,oi();let n=this.cache.get(t);this.snapshot={model:this.snapshot.model,reasoning_effort:this.snapshot.reasoning_effort,...n??{}},this.render(),this.perm.onSession(this.session),this.poll()}stop(){this.timer!==null&&(window.clearInterval(this.timer),this.timer=null)}fromSse(e){let t=Qe({...e.statusline??{},...e});Object.keys(t).length>0&&(this.snapshot={...this.snapshot,...t},this.cache.set(this.session,this.snapshot),this.render())}merge(e){this.snapshot={...this.snapshot,...e},this.render()}onSseDone(){if(Wt(this)||!this.pendingPatch)return;let e=this.pendingPatch;this.pendingPatch=null;let t=_t({model:this.snapshotModel,effort:this.snapshotEffort});this.merge(vt(e)),j.saveConfig(e).then(e=>{this.merge({model:e.model,reasoning_effort:e.reasoning_effort}),this.setNote(w(`statusline.switched`),5e3),window.dispatchEvent(new Event(`studio:config-saved`))}).catch(e=>{this.merge(t);let n=e instanceof Error?e.message:String(e);this.setNote(w(`statusline.withRestoredSettings`,{text:w(`statusline.switchFailed`,{reason:n})}),6e3)})}async openContext(){if(!await Fe()){this.setNote(w(`statusline.contextUnsupported`),4e3);return}if(this.session===``){this.setNote(w(`statusline.sessionNotReady`),4e3);return}Re(this.session)}setNote(e,t){this.note=e,this.noteTimer!==null&&(window.clearTimeout(this.noteTimer),this.noteTimer=null),t>0&&(this.noteTimer=window.setTimeout(()=>{this.note=``,this.noteTimer=null,this.renderHint()},t)),this.renderHint()}renderHint(){if(this.note){this.hintEl.textContent=this.note;return}this.hintEl.textContent=this.staleMsg}async poll(){let e=this.session;try{let t=await j.status(e===``?void 0:e);if(e!==this.session)return;this.staleMsg=``,this.el.classList.remove(`sl-stale`),this.snapshot={...this.snapshot,...t},this.cache.set(this.session,this.snapshot),this.render()}catch(e){this.el.classList.add(`sl-stale`),this.staleMsg=w(`statusline.statusUnavailable`),this.renderHint(),this.el.title=O(e,w(`statusline.statusUnavailable`))}}render(){let e=this.snapshot;ar(this.ctxEl,this.ring,e.context_usage),or(this.modelEl,e.model||``,this.modelCell),this.modelEl.title=w(`statusline.currentModelTitle`,{model:e.model||`—`}),this.modelEl.setAttribute(`aria-label`,w(`statusline.currentModelAria`,{model:e.model||`—`}));let t=e.reasoning_effort;this.effortEl.textContent=t?String(t):`—`,this.effortEl.title=w(`statusline.effortTitle`,{effort:t?String(t):w(`statusline.standard`)}),this.effortEl.setAttribute(`aria-label`,w(`statusline.effortAria`,{effort:t?String(t):w(`statusline.standard`)}));let n=ur(this.tpsSamplesFor(this.session),e.tokens_per_sec);this.tpsCache.set(this.session,n);let r=fr(n,e.tokens_per_sec,e.busy===!0,ct);this.tpsEl.textContent=r.text,this.tpsEl.title=r.title,this.tpsEl.setAttribute(`aria-label`,w(`statusline.tpsAria`,{text:r.text})),sr(this.cacheEl,e.usage),Qt(this.modeEl,e.mode);let i=e.steps;this.stepsEl.textContent=typeof i==`number`&&i>=1?w(`statusline.steps`,{n:i}):w(`statusline.stepsNone`),this.stepsEl.setAttribute(`aria-label`,this.stepsEl.textContent),this.el.classList.toggle(`sl-live`,e.busy===!0)}},li=[];function ui(e){let t=li.findIndex(t=>t.id===e.id);return t>=0?li[t]=e:li.push(e),li.sort((e,t)=>(t.priority??0)-(e.priority??0)),()=>{let t=li.indexOf(e);t>=0&&li.splice(t,1)}}function di(e,t){for(let n of li){let r=n.claim(e,t);if(r)return r}return null}var fi=`data-hint`,pi=8,mi=12,hi=null,gi=null,_i=null,vi=null,yi=!1;function bi(e,t){if(!t){e.removeAttribute(fi),e.title&&e.removeAttribute(`title`);return}e.setAttribute(fi,t),di(e,t)?e.removeAttribute(`title`):e.title=t,vi===e&&gi&&wi(e)}function xi(e){e===vi||(Ci(),vi=e,!e)||!di(e,e.getAttribute(`data-hint`)??``)||(e.hasAttribute(`title`)&&e.removeAttribute(`title`),_i=window.setTimeout(()=>{_i=null,wi(e)},150))}function Si(){Ci(),vi=null}function Ci(){_i!==null&&(window.clearTimeout(_i),_i=null),gi&&(gi.remove(),gi=null)}function wi(e){if(e!==vi)return;let t=di(e,e.getAttribute(`data-hint`)??``);if(!t)return;let n=t.build();n&&(Ci(),vi=e,gi=n,gi.classList.add(`hint-card`),gi.setAttribute(`role`,`tooltip`),(!hi||!hi.isConnected)&&(hi=document.body),hi.appendChild(gi),Ti(gi,e,t))}function Ti(e,t,n){if(!hi)return;if(n.position){n.position(e,t);return}let r=t.getBoundingClientRect(),i=e.offsetWidth||0,a=e.offsetHeight||0,o=window.innerWidth||document.documentElement.clientWidth||0,s=window.innerHeight||document.documentElement.clientHeight||0,c=r.left+mi,l=r.bottom+6;i>0&&c+i>o-pi&&(c=r.right-i),a>0&&l+a>s-pi&&(l=r.top-a-6),e.style.left=Math.max(pi,c)+`px`,e.style.top=Math.max(pi,l)+`px`}function Ei(e){let t=e instanceof Element?e:null;for(;t;){if(t.hasAttribute(`data-hint`))return t;if(t.hasAttribute(`title`))return null;t=t.parentElement}return null}function Di(e){xi(Ei(e.target))}function Oi(e){let t=e.relatedTarget;vi&&t instanceof Node&&vi.contains(t)||Si()}function ki(e){let t=Ei(e.target);t&&(vi=null,xi(t),wi(t))}function Ai(){yi||(yi=!0,hi=document.body,document.addEventListener(`pointerover`,Di,!0),document.addEventListener(`pointerout`,Oi,!0),document.addEventListener(`focusin`,ki,!0),document.addEventListener(`focusout`,Si,!0),document.addEventListener(`pointerdown`,Si,!0),document.addEventListener(`keydown`,ji,!0),document.addEventListener(`scroll`,Si,!0),window.addEventListener(`resize`,Si),window.addEventListener(`blur`,Si))}function ji(e){e.key===`Escape`&&Si()}var Mi=`celestea-studio.client-plugins-disabled`,Ni=`studio:client-plugins-changed`;function Pi(e){if(typeof e!=`string`||e===``)return[];let t;try{t=JSON.parse(e)}catch{return[]}return Array.isArray(t)?t.filter(e=>typeof e==`string`&&e!==``):[]}function Fi(){try{return typeof localStorage>`u`?null:localStorage}catch{return null}}function Ii(){let e=Fi();return e===null?[]:Pi(e.getItem(Mi))}function Li(e){return Ii().includes(e)}function Ri(e,t,n){let r=new Set(Ii());t?r.add(e):r.delete(e);let i=n.filter(e=>r.has(e)),a=Fi();if(a!==null)try{a.setItem(Mi,JSON.stringify(i))}catch(e){console.warn(`[plugins] 偏好写入失败:`+(e instanceof Error?e.message:String(e)))}return zi(),i}function zi(){typeof window<`u`&&window.dispatchEvent(new Event(Ni))}var Bi=new Map,Vi=new Map;function Hi(){}function Ui(e){return Vi.has(e)}function Wi(e){return Bi.set(e.id,()=>e),Li(e.id)?Hi:qi(e.id)}function Gi(e){Vi.has(e)||qi(e)}function Ki(e){let t=Vi.get(e);t&&(t(),Vi.delete(e))}function qi(e){let t=Bi.get(e);if(!t)throw Error(`no provider handed back for `+e);let n=Vi.get(e);n&&(n(),Vi.delete(e));let r=ui(t());return Vi.set(e,r),r}var Ji=.3,Yi=1,Xi=2;function Zi(e){return Math.max(2,e-4)}function Qi(e){let t=Zi(e)/2;return Math.max(Xi,Math.min(t+Yi,e/2))}function $i(e,t,n){return n===null?Math.max(0,t-24):Math.max(0,n-e)}function ea(e){if(e<24)return{hidden:!0,thin:!1,left:8,width:0};let t=e<64;return{hidden:!1,thin:t,left:8,width:t?Math.max(6,e-24):Math.min(66,e-26)}}function ta(e,t){return t*4<=e}function na(e,t){return Math.max(4,Math.min(9,e/Math.max(1,t)))}function ra(e,t=28){return t>0?Math.max(0,Math.min(1,1-e/t)):+(e===0)}function ia(e,t){let n=Math.max(0,Math.min(1,e));return 4+n*Math.max(0,t-4)+(n>=1?6:0)}function aa(e){return Ji+.39999999999999997*Math.max(0,Math.min(1,e))}function oa(e){let t=e.anchor.top-e.mainY,n=Math.max(e.railTop+4,Math.min(t,e.railTop+e.railH-e.cardH-4)),r=Math.min(e.anchor.right-e.mainX+8,e.mainW-280);return{top:e.mainY+n,left:e.mainX+Math.max(e.railX+4,r)}}function sa(e,t){let n=e[0],r=e[e.length-1];if(!n||!r)return null;if(t<n.yDoc||t>r.yDoc)return{item:null,clamped:!0,round:-1};let i=n,a=0,o=1/0;for(let n=0;n<e.length;n++){let r=e[n],s=Math.abs(t-r.yDoc);s<o&&(o=s,i=r,a=n)}return{item:i,clamped:!1,round:a+1}}function ca(e,t=0){return e.clamped?w(`chat.rail.centerOutside`):t>0?w(`chat.rail.centerFolded`,{n:t}):w(`chat.rail.centerNear`,{n:e.round})}var la=40;function ua(e){let t=(e.querySelector(`.content`)?.textContent??``).replace(/[ \t]+/g,` `).trim();if(!t)return``;let n=t.split(`
3
+ `).map(e=>e.trim()).find(e=>e.length>0)??``;return n.length>la?n.slice(0,la)+`…`:n}function da(e){for(let t of e.cols)if(t.querySelector(`.msg.assistant`))return ua(t);return``}function fa(e){let t=N(`div`,`railv3-card`);if(e.fold>0){let n=N(`div`,`railv3-card-q`);n.appendChild(N(`span`,`railv3-card-tag`,`⋯`)),n.appendChild(N(`span`,null,w(`chat.rail.folded`,{n:e.fold}))),t.appendChild(n)}else{let n=ua(e.startCol);if(n){let e=N(`div`,`railv3-card-q`);e.appendChild(N(`span`,`railv3-card-tag`,`Q`)),e.appendChild(N(`span`,null,n)),t.appendChild(e)}if(e.hasReply){let n=da(e);if(n){t.appendChild(N(`div`,`railv3-card-sep`));let e=N(`div`,`railv3-card-a`);e.appendChild(N(`span`,`railv3-card-tag`,`A`)),e.appendChild(N(`span`,null,n)),t.appendChild(e)}}else{t.appendChild(N(`div`,`railv3-card-sep`));let e=N(`div`,`railv3-card-a railv3-card-noa`);e.appendChild(N(`span`,`railv3-card-tag`,`A`)),e.appendChild(N(`span`,null,w(`chat.rail.noReply`))),t.appendChild(e)}}return t}function pa(e,t){let n=e.getBoundingClientRect(),r=t.getBoundingClientRect();return r.top-n.top+e.scrollTop+r.height/2}function ma(e,t,n){let r=e.scrollTop,i=r-t*.2,a=r+t*1.2;return n.filter(t=>{let n=pa(e,t.startCol);return n>=i&&n<=a})}var ha=`rail-preview`,ga=20,_a=new WeakMap,va=new WeakMap,H=null,ya=null,ba=null,U=null,xa=null,Sa=!1,Ca=!1,wa=!1,Ta=null,Ea=-1,Da=-1,Oa=8,ka=0,Aa=0,ja=110,Ma=9,Na=!0;function Pa(e){let t=_a.get(e);if(!t){let n=document.createElement(`div`);n.className=`railv3-holder`,t={items:[],foldItem:null,holder:n},_a.set(e,t)}return t}function Fa(){return ya?Pa(ya):null}function Ia(e){return e.foldItem?[e.foldItem,...e.items]:e.items}function La(){return H?((!U||!U.isConnected)&&(U=document.createElement(`div`),U.className=`railv3`,H.appendChild(U)),!0):!1}function Ra(e){if(!ba||ja<=0)return;let t=sa(e.map(e=>({it:e,yDoc:pa(ba,e.startCol)})),ba.scrollTop+Aa/2),n=t?.item?.it??null;n!==Ta&&(Ta&&(Ta.el.classList.remove(`is-center`),bi(Ta.el,Ta.hint)),n&&t&&(n.el.classList.add(`is-center`),bi(n.el,ca(t,n.fold)))),Ta=n}function za(){if(!H||!ba)return 0;let e=ba.querySelector(`.mcol`),t=H.getBoundingClientRect();return $i(t.left,t.width,e?e.getBoundingClientRect().left:null)}function Ba(){let e=Fa();if(!H||!ba||!U||!e)return;let t=H.getBoundingClientRect(),n=ba.getBoundingClientRect();ka=Math.max(0,n.top-t.top),Aa=n.height;let r=ea(za());if(r.hidden){U.style.display=`none`,ja=0;return}U.style.display=``;let i=r.thin;Oa=r.left,ja=r.width,U.classList.toggle(`railv3-thin`,i),U.style.left=Oa+`px`,U.style.top=ka+`px`,U.style.height=Aa+`px`;let a=Math.max(0,Aa-16);if(e.items.length===0){e.foldItem&&(e.foldItem.el.remove(),e.foldItem=null),Ra([]);return}let o=e.items.length>ga?e.items.length-ga:0;if(o>0){let t=e.foldItem;if(!t||t.el.parentNode!==U){let n=t?.el,r={startCol:e.items[e.items.length-ga].startCol,cols:[],hasReply:!1,el:document.createElement(`div`),y:0,visible:!1,fold:o,hint:``};r.el.className=`railv3-item railv3-fold`,r.el.textContent=`⋯`,U.appendChild(r.el),va.set(r.el,r),e.foldItem=r,n&&n.parentNode&&n.remove()}else t.fold=o;e.foldItem&&(e.foldItem.fold=o,e.foldItem.hint=w(`chat.rail.folded`,{n:o}),bi(e.foldItem.el,e.foldItem.hint))}else e.foldItem&&(e.foldItem.el.remove(),e.foldItem=null);let s=Ia(e),c=s.length,l;ta(a,c)?(Na=!0,Ma=na(a,c),l=s):(Na=!1,l=ma(ba,Aa,e.items),Ma=na(a,l.length));let u=8+Math.max(0,(a-l.length*Ma)/2),d=Zi(Ma);for(let e of s){let t=l.indexOf(e);if(t<0){e.visible=!1,e.el.style.display=`none`;continue}e.visible=!0,e.el.style.display=``,e.y=u+t*Ma+Ma/2,e.el.style.top=e.y-d/2+`px`,e.el.style.setProperty(`--barh`,d+`px`)}Ra(l)}function Va(e,t){if(!H)return;let n=H.getBoundingClientRect(),r=t.getBoundingClientRect(),i=oa({mainX:n.left,mainY:n.top,mainW:n.width,railTop:ka,railH:Aa,railX:Oa,anchor:{top:r.top,right:r.right},cardH:e.offsetHeight});e.style.top=i.top+`px`,e.style.left=i.left+`px`}function Ha(){return{id:ha,priority:10,claim(e){let t=va.get(e);return t?{build:()=>fa(t),position:t=>Va(t,e)}:null}}}function Ua(e,t){e.el.style.width=ia(t,ja).toFixed(1)+`px`,e.el.style.opacity=aa(t).toFixed(3)}function Wa(){xa=null,Si();let e=Fa();if(e)for(let t of e.items)t.el.classList.remove(`is-hover`)}function Ga(){Wa();let e=Fa();if(e)for(let t of Ia(e))Ua(t,0)}function Ka(e){Ea=e.clientX,Da=e.clientY,!wa&&(wa=!0,requestAnimationFrame(()=>{wa=!1,qa()}))}function qa(){let e=Fa();if(!H||!U||!e||!e.items.length){Ga();return}let t=H.getBoundingClientRect(),n=Ea-t.left,r=Da-t.top;if(!(ja>0&&n>=Oa-6&&n<=Oa+ja+14&&r>=ka&&r<=ka+Aa)){Ga();return}let i=Qi(Ma),a=null,o=1/0;for(let t of Ia(e)){if(!t.visible)continue;let e=Math.abs(r-(ka+t.y));Ua(t,ra(e)),e<o&&(o=e,a=t)}let s=a!==null&&o<=i?a:null;s?(Ua(s,1),xa!==s&&(xa=s,xi(s.el))):Wa();for(let t of Ia(e))t.el.classList.toggle(`is-hover`,t===s)}function Ja(){Ga()}function Ya(e){if(!H||!xa)return;let t=H.getBoundingClientRect(),n=e.clientX-t.left,r=e.clientY-t.top;n<Oa-6||n>Oa+ja+14||r<ka||r>ka+Aa||Math.abs(r-(ka+xa.y))>Qi(Ma)||(e.preventDefault(),xa.startCol.scrollIntoView({behavior:`smooth`,block:`start`}))}function Xa(){if(Na){Za();return}Qa()}function Za(){Ca||(Ca=!0,requestAnimationFrame(()=>{Ca=!1;let e=Fa();Na&&e&&Ra(Ia(e))}))}function Qa(){Sa||(Sa=!0,requestAnimationFrame(()=>{Sa=!1,Ba()}))}function $a(e,t,n){if(!H)return;let r=Pa(e),i=e===ya&&U!==null,a=i&&U?U:r.holder,o=r.items[r.items.length-1];if(n===`user`||!o){let e=document.createElement(`div`);e.className=`railv3-item`+(n===`assistant`?` is-reply`:``),a.appendChild(e);let i=w(`chat.rail.barHint`,{n:r.items.length+1});bi(e,i),r.items.push({startCol:t,cols:[t],hasReply:n===`assistant`,el:e,y:0,visible:!1,fold:0,hint:i}),va.set(e,r.items[r.items.length-1])}else o.cols.push(t),n===`assistant`&&!o.hasReply&&(o.hasReply=!0,o.el.classList.add(`is-reply`));i&&Ba()}function eo(e){let t=Pa(e);t.items=[],t.foldItem=null,t.holder.textContent=``,e===ya&&(Wa(),xa=null,Ta=null,U&&(U.textContent=``))}function to(e){e===ya&&Qa()}function no(e){if(ya===e){Qa();return}if(ya&&U){let e=Pa(ya);for(Ta&&Ta.el.classList.remove(`is-center`),Ta=null;U.firstChild;)e.holder.appendChild(U.firstChild)}if(Wa(),ya=e,ba=e.el,!La()||!U)return;let t=Pa(e);for(;t.holder.firstChild;)U.appendChild(t.holder.firstChild);Ba()}function ro(){H||(H=document.getElementById(`main`),H&&(Wi(Ha()),ya=B(),ba=ya?ya.el:null,La(),Ba(),H.addEventListener(`pointermove`,Ka),H.addEventListener(`pointerleave`,Ja),H.addEventListener(`click`,Ya),window.addEventListener(`resize`,Qa),new ResizeObserver(Qa).observe(H),oo(ya)))}var io=null,ao=null;function oo(e){io&&io.removeEventListener(`scroll`,Xa),io=e?e.el:null,io&&io.addEventListener(`scroll`,Xa,{passive:!0}),ao||(ao=new ResizeObserver(Qa),H&&ao.observe(H)),e&&ao.observe(e.el)}function so(e){oo(e)}function W(e,t=!1){if(e.el.hidden){t&&(e.stickBottom=!0);return}let n=e.el.scrollTop+e.el.clientHeight>=e.el.scrollHeight-25;(t||n)&&(e.el.scrollTop=e.el.scrollHeight)}function co(e){e.hint.classList.add(`hidden`)}function lo(e){e.el.replaceChildren();let t=N(`div`,`empty-hint empty-hint-fresh`);t.appendChild(N(`div`,`empty-mark`,`◇`)),t.appendChild(N(`div`,`empty-title`,`Celestea Studio`)),t.appendChild(N(`div`,`empty-sub`,w(`chat.empty.hint`))),e.el.appendChild(t),e.hint=t}var uo;function fo(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var po=fo();function mo(e){po=e}var ho={exec:()=>null};function go(e){let t=[];return n=>{let r=Math.max(0,Math.min(3,n-1)),i=t[r];return i||(i=e(r),t[r]=i),i}}function G(e,t=``){let n=typeof e==`string`?e:e.source,r={replace:(e,t)=>{let i=typeof t==`string`?t:t.source;return i=i.replace(K.caret,`$1`),n=n.replace(e,i),r},getRegex:()=>new RegExp(n,t)};return r}var _o=((e=``)=>{try{return!!RegExp(`(?<=1)(?<!1)`+e)}catch{return!1}})(),K={codeRemoveIndent:/^(?: {0,3}\t| {1,4})/gm,outputLinkReplace:/\\([\[\]])/g,indentCodeCompensation:/^(\s+)(?:```)/,beginningSpace:/^\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,endingSpaceTabChar:/[ \t]$/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\n/g,tabCharGlobal:/\t/g,multipleSpaceGlobal:/\s+/g,blankLine:/^[ \t]*$/,doubleBlankLine:/\n[ \t]*\n[ \t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] +\S/,listReplaceTask:/^\[[ xX]\] +/,listTaskCheckbox:/\[[ xX]\]/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^<a /i,endATag:/^<\/a>/i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^</,endAngleBracket:/>$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:e=>RegExp(`^( {0,3}${e})((?:[ ][^\\n]*)?(?:\\n|$))`),nextBulletRegex:go(e=>RegExp(`^ {0,${e}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`)),hrRegex:go(e=>RegExp(`^ {0,${e}}((?:-[ ]*){3,}|(?:_[ ]*){3,}|(?:\\*[ ]*){3,})(?:\\n+|$)`)),fencesBeginRegex:go(e=>RegExp(`^ {0,${e}}(?:\`\`\`|~~~)`)),headingBeginRegex:go(e=>RegExp(`^ {0,${e}}#`)),htmlBeginRegex:go(e=>RegExp(`^ {0,${e}}(?:</?(?:${Mo})(?: +|$|/?>)|<(?:script|pre|style|textarea|!--))`,`i`)),blockquoteBeginRegex:go(e=>RegExp(`^ {0,${e}}>`))},vo=/^(?:[ \t]*(?:\n|$))+/,yo=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,bo=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,xo=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,So=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,Co=/ {0,3}(?:[*+-]|\d{1,9}[.)])/,wo=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,To=G(wo).replace(/bull/g,Co).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}(?:\s|$)/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/\|table/g,``).getRegex(),Eo=G(wo).replace(/bull/g,Co).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}(?:\s|$)/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/table/g,/ {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(),Do=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table|[ \t]+\n)[^\n]+)*)/,Oo=/^[^\n]+/,ko=/(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/,Ao=G(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace(`label`,ko).replace(`title`,/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),jo=G(/^(bull)([ \t][^\n]*?)?(?:\n|$)/).replace(/bull/g,Co).getRegex(),Mo=`address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul`,No=/<!--(?:-?>|[\s\S]*?(?:-->|$))/,Po=G(`^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n*|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>[^\\n]*\\n*|$)|<![A-Z][\\s\\S]*?(?:>[^\\n]*\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>[^\\n]*\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][a-z0-9-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|</(?!script|pre|style|textarea)[a-z][a-z0-9-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))`,`i`).replace(`comment`,No).replace(`tag`,Mo).replace(`attribute`,/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),Fo=e=>G(Do).replace(`hr`,xo).replace(`heading`,` {0,3}#{1,6}(?:\\s|$)`).replace(`|lheading`,``).replace(`|table`,``).replace(`blockquote`,` {0,3}>`).replace(`fences`," {0,3}(?:`{3,}(?=[^`\\n]*(?:\\n|$))|~~~)[^\\n]*(?:\\n|$)").replace(`list`,e).replace(`html`,`</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)`).replace(`tag`,Mo).getRegex(),Io=Fo(/ {0,3}(?:[*+-]|1[.)])[ \t]+[^ \t\n]/),Lo=Fo(/ {0,3}(?:[*+-]|\d{1,9}[.)])(?:[ \t]|\n|$)/),Ro={blockquote:G(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace(`paragraph`,Lo).getRegex(),code:yo,def:Ao,fences:bo,heading:So,hr:xo,html:Po,lheading:To,list:jo,newline:vo,paragraph:Io,table:ho,text:Oo},zo=G(`^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)`).replace(`hr`,xo).replace(`heading`,` {0,3}#{1,6}(?:\\s|$)`).replace(`blockquote`,` {0,3}>`).replace(`code`,`(?: {4}| {0,3} )[^\\n]`).replace(`fences`," {0,3}(?:`{3,}(?=[^`\\n]*(?:\\n|$))|~~~)[^\\n]*(?:\\n|$)").replace(`list`,` {0,3}(?:[*+-]|1[.)])[ \\t]`).replace(`html`,`</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)`).replace(`tag`,Mo).getRegex(),Bo={...Ro,lheading:Eo,table:zo,paragraph:G(Do).replace(`hr`,xo).replace(`heading`,` {0,3}#{1,6}(?:\\s|$)`).replace(`|lheading`,``).replace(`table`,zo).replace(`blockquote`,` {0,3}>`).replace(`fences`," {0,3}(?:`{3,}(?=[^`\\n]*(?:\\n|$))|~~~)[^\\n]*(?:\\n|$)").replace(`list`,` {0,3}(?:[*+-]|1[.)])[ \\t]+[^ \\t\\n]`).replace(`html`,`</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)`).replace(`tag`,Mo).getRegex()},Vo={...Ro,html:G(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:"[^"]*"|'[^']*'|\\s[^'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace(`comment`,No).replace(/tag/g,`(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b`).getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:ho,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:G(Do).replace(`hr`,xo).replace(`heading`,` *#{1,6} *[^
4
+ ]`).replace(`lheading`,To).replace(`|table`,``).replace(`blockquote`,` {0,3}>`).replace(`|fences`,``).replace(`|list`,``).replace(`|html`,``).replace(`|tag`,``).getRegex()},Ho=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,Uo=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,Wo=/^( {2,}|\\)\n(?!\s*$)[ \t]*/,Go=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,Ko=/[\p{P}\p{S}]/u,qo=/[\s\p{P}\p{S}]/u,Jo=/[^\s\p{P}\p{S}]/u,Yo=G(/^((?![*_])punctSpace)/,`u`).replace(/punctSpace/g,qo).getRegex(),Xo=/[\p{Pi}\p{Ps}"']/u,Zo=/(?!~)[\p{P}\p{S}]/u,Qo=/(?!~)[\s\p{P}\p{S}]/u,$o=/(?:[^\s\p{P}\p{S}]|~)/u,es=G(/link|precode-code|html/,`g`).replace(`link`,/\[(?:[^\[\]`]|(?<a>`+)[^`]+\k<a>(?!`))*?\]\((?:\\[\s\S]|[^\\\(\)]|\((?:\\[\s\S]|[^\\\(\)])*\))*\)/).replace(`precode-`,_o?"(?<!`)()":"(^^|[^`])").replace(`code`,/(?<b>`+)[^`]+\k<b>(?!`)/).replace(`html`,/<(?! )[^<>]*?>/).getRegex(),ts=/^(?:\*+(?:((?!\*)punct)|([^\s*]))?)|^_+(?:((?!_)punct)|([^\s_]))?/,ns=G(ts,`u`).replace(/punct/g,Ko).getRegex(),rs=G(ts,`u`).replace(/punct/g,Zo).getRegex(),is=G(/^(?:\*+(?:((?!\*)(?!openQuote)punct)|([^\s*]))?)|^_+(?:((?!_)(?!openQuote)punct)|([^\s_]))?/,`u`).replace(/openQuote/g,Xo).replace(/punct/g,Ko).getRegex(),as=`^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)`,os=G(as,`gu`).replace(/notPunctSpace/g,Jo).replace(/punctSpace/g,qo).replace(/punct/g,Ko).getRegex(),ss=G(as,`gu`).replace(/notPunctSpace/g,$o).replace(/punctSpace/g,Qo).replace(/punct/g,Zo).getRegex(),cs=G(`^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)[\\s](\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|(?:(?!\\*)punct|notPunctSpace)(\\*+)(?!\\*)(?=notPunctSpace)`,`gu`).replace(/notPunctSpace/g,Jo).replace(/punctSpace/g,qo).replace(/punct/g,Ko).getRegex(),ls=G(`^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)`,`gu`).replace(/notPunctSpace/g,Jo).replace(/punctSpace/g,qo).replace(/punct/g,Ko).getRegex(),us=G(`^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)[\\s](_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)|(?:(?!_)punct|notPunctSpace)(_+)(?!_)(?=notPunctSpace)`,`gu`).replace(/notPunctSpace/g,Jo).replace(/punctSpace/g,qo).replace(/punct/g,Ko).getRegex(),ds=G(/^~~?(?:((?!~)punct)|[^\s~])/,`u`).replace(/punct/g,Ko).getRegex(),fs=G(`^[^~]+(?=[^~])|(?!~)punct(~~?)(?=[\\s]|$)|notPunctSpace(~~?)(?!~)(?=punctSpace|$)|(?!~)punctSpace(~~?)(?=notPunctSpace)|[\\s](~~?)(?!~)(?=punct)|(?!~)punct(~~?)(?!~)(?=punct)|notPunctSpace(~~?)(?=notPunctSpace)`,`gu`).replace(/notPunctSpace/g,Jo).replace(/punctSpace/g,qo).replace(/punct/g,Ko).getRegex(),ps=G(/\\(punct)/,`gu`).replace(/punct/g,Ko).getRegex(),ms=G(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace(`scheme`,/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace(`email`,/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),hs=G(No).replace(`(?:-->|$)`,`-->`).getRegex(),gs=G(`^comment|^</[a-zA-Z][a-zA-Z0-9-]*\\s*>|^<[a-zA-Z][a-zA-Z0-9-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>`).replace(`comment`,hs).replace(`attribute`,/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),_s=/\[(?:\\[\s\S]|[^\[\]\\])*\]/,vs=G(/(?:\[(?:brackets|\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\])|[^\[\]\\`])*?/).replace(`brackets`,_s).getRegex(),ys=G(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]+(?:\n[ \t]*)?|\n[ \t]*)(title))?\s*\)/).replace(`label`,vs).replace(`href`,/<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]+|(?=\))/).replace(`title`,/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),bs=G(/^!?\[(label)\]\[(ref)\]/).replace(`label`,vs).replace(`ref`,ko).getRegex(),xs=G(/^!?\[(ref)\](?:\[\])?/).replace(`ref`,ko).getRegex(),Ss=/(?!\s*\])(?:\\[\s\S]|[^\[\]\\]){1,999}/,Cs=G(/(?:[^\[\]\\`]*(?:\[(?:brackets|\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\]))){0,999}?[^\[\]\\`]*?/).replace(`brackets`,_s).getRegex(),ws=G(`reflink|nolink(?!\\()`,`g`).replace(`reflink`,G(/^!?\[(label)\]\[(ref)\]/).replace(`label`,Cs).replace(`ref`,Ss).getRegex()).replace(`nolink`,G(/^!?\[(ref)\](?:\[\])?/).replace(`ref`,Ss).getRegex()).getRegex(),Ts=/[hH][tT][tT][pP][sS]?|[fF][tT][pP]/,Es={_backpedal:ho,anyPunctuation:ps,autolink:ms,blockSkip:es,br:Wo,code:Uo,del:ho,delLDelim:ho,delRDelim:ho,emStrongLDelim:ns,emStrongRDelimAst:os,emStrongRDelimUnd:ls,escape:Ho,link:ys,nolink:xs,punctuation:Yo,reflink:bs,reflinkSearch:ws,tag:gs,text:Go,url:ho},Ds={...Es,emStrongLDelim:is,emStrongRDelimAst:cs,emStrongRDelimUnd:us,link:G(/^!?\[(label)\]\((.*?)\)/).replace(`label`,vs).getRegex(),reflink:G(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace(`label`,vs).getRegex()},Os={...Es,emStrongRDelimAst:ss,emStrongLDelim:rs,delLDelim:ds,delRDelim:fs,url:G(/^((?:protocol):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/).replace(`protocol`,Ts).replace(`email`,/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![\w-])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])((?:\\[\s\S]|[^\\])*?(?:\\[\s\S]|[^\s~\\]))\1(?=[^~]|$)/,text:G(/^(`+|~+|[^`~])(?:(?=[`~])|(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|protocol:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/).replace(`protocol`,Ts).getRegex()},ks={...Os,br:G(Wo).replace(`{2,}`,`*`).getRegex(),text:G(Os.text).replace(`\\b_`,`\\b_| {2,}\\n`).replace(/\{2,\}/g,`*`).getRegex()},As={normal:Ro,gfm:Bo,pedantic:Vo},js={normal:Es,gfm:Os,breaks:ks,pedantic:Ds},Ms={"&":`&amp;`,"<":`&lt;`,">":`&gt;`,'"':`&quot;`,"'":`&#39;`},Ns=e=>Ms[e];function Ps(e,t){if(t){if(K.escapeTest.test(e))return e.replace(K.escapeReplace,Ns)}else if(K.escapeTestNoEncode.test(e))return e.replace(K.escapeReplaceNoEncode,Ns);return e}function Fs(e){try{e=encodeURI(e).replace(K.percentDecode,`%`)}catch{return null}return e}function Is(e,t){let n=e.replace(K.findPipe,(e,t,n)=>{let r=!1,i=t;for(;--i>=0&&n[i]===`\\`;)r=!r;return r?`|`:` |`}).split(K.splitPipe),r=0;if(n[0].trim()||n.shift(),n.length>0&&!n.at(-1)?.trim()&&n.pop(),t){if(n.length>t)n.splice(t);else for(;n.length<t;)n.push(``)}for(;r<n.length;r++)n[r]=n[r].trim().replace(K.slashPipe,`|`);return n}function Ls(e,t,n){let r=e.length;if(r===0)return``;let i=0;for(;i<r;){let a=e.charAt(r-i-1);if(a===t&&!n)i++;else if(a!==t&&n)i++;else break}return e.slice(0,r-i)}function Rs(e){let t=e.split(`
5
+ `),n=t.length-1;for(;n>=0&&K.blankLine.test(t[n]);)n--;return t.length-n<=2?e:t.slice(0,n+1).join(`
6
+ `)}function zs(e){return e.toLowerCase().toUpperCase().toLowerCase()}function Bs(e,t){if(e.indexOf(t[1])===-1)return-1;let n=0;for(let r=0;r<e.length;r++)if(e[r]===`\\`)r++;else if(e[r]===t[0])n++;else if(e[r]===t[1]&&(n--,n<0))return r;return n>0?-2:-1}function Vs(e,t=0){let n=t,r=``;for(let t of e)if(t===` `){let e=4-n%4;r+=` `.repeat(e),n+=e}else r+=t,n++;return r}function Hs(e,t,n,r,i){let a=t.href,o=t.title||null,s=e[1].replace(i.other.outputLinkReplace,`$1`),c=e[0].charAt(0)===`!`;r.state.inLink=!0;let l=r.state.linkEmitted,u=r.state.inRawBlock;r.state.linkEmitted=!1;let d=r.inlineTokens(s),f=r.state.linkEmitted;if(r.state.linkEmitted=l,r.state.inLink=!1,!c){if(f){r.state.inRawBlock=u;return}r.state.linkEmitted=!0}return{type:c?`image`:`link`,raw:n,href:a,title:o,text:s,tokens:d}}function Us(e,t,n){let r=e.match(n.other.indentCodeCompensation);if(r===null)return t;let i=r[1];return t.split(`
7
+ `).map(e=>{let t=e.match(n.other.beginningSpace);if(t===null)return e;let[r]=t;return e.slice(Math.min(r.length,i.length))}).join(`
8
+ `)}function Ws(e,t,n,r){if(!t.includes(`<`))return!1;for(let i=0;i<t.length;i++){if(t[i]===`\\`){i++;continue}if(t[i]==="`"){let e=r.inline.code.exec(t.slice(i));if(e){i+=e[0].length-1;continue}}if(t[i]!==`<`)continue;let a=e.slice(n+i),o=r.inline.tag.exec(a)||r.inline.autolink.exec(a);if(o){if(o[0].length>t.length-i)return!0;i+=o[0].length-1}}return!1}var Gs=class{constructor(e){E(this,`options`,void 0),E(this,`rules`,void 0),E(this,`lexer`,void 0),this.options=e||po}space(e){let t=this.rules.block.newline.exec(e);if(t&&t[0].length>0)return{type:`space`,raw:t[0]}}code(e){let t=this.rules.block.code.exec(e);if(t){let e=this.options.pedantic?t[0]:Rs(t[0]);return{type:`code`,raw:e,codeBlockStyle:`indented`,text:e.replace(this.rules.other.codeRemoveIndent,``)}}}fences(e){let t=this.rules.block.fences.exec(e);if(t){let e=t[0],n=Us(e,t[3]||``,this.rules);return{type:`code`,raw:e,lang:t[2]?t[2].trim().replace(this.rules.inline.anyPunctuation,`$1`):t[2],text:n}}}heading(e){let t=this.rules.block.heading.exec(e);if(t){let e=t[2].trim();if(this.rules.other.endingHash.test(e)){let t=Ls(e,`#`);(this.options.pedantic||!t||this.rules.other.endingSpaceTabChar.test(t))&&(e=t.trim())}return{type:`heading`,raw:Ls(t[0],`
9
+ `),depth:t[1].length,text:e,tokens:this.lexer.inline(e)}}}hr(e){let t=this.rules.block.hr.exec(e);if(t)return{type:`hr`,raw:Ls(t[0],`
10
+ `)}}blockquote(e){let t=this.rules.block.blockquote.exec(e);if(t){let e=Ls(t[0],`
11
+ `).split(`
12
+ `),n=``,r=``,i=[];for(;e.length>0;){let t=!1,a=[],o=0;for(;o<e.length;o++)if(this.rules.other.blockquoteStart.test(e[o]))a.push(e[o]),t=!0;else if(!t)a.push(e[o]);else break;e=e.slice(o);let s=a.join(`
13
+ `),c=s.replace(this.rules.other.blockquoteSetextReplace,`
14
+ $1`).replace(this.rules.other.blockquoteSetextReplace2,``);n=n?`${n}
15
+ ${s}`:s,r=r?`${r}
16
+ ${c}`:c;let l=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTokens(c,i,!0),this.lexer.state.top=l,e.length===0)break;let u=i.at(-1);if(u?.type===`code`)break;if(u?.type===`blockquote`){let t=u,a=e.join(`
17
+ `),o=t.raw+`
18
+ `+a.replace(this.rules.other.blockquoteSetextReplace2,``),s=this.blockquote(o);i[i.length-1]=s,n=`${n}
19
+ ${a}`,r=r.substring(0,r.length-t.text.length)+s.text;break}if(u?.type===`list`){let t=u,a=t.raw+`
20
+ `+e.join(`
21
+ `),o=this.list(a);i[i.length-1]=o,n=n.substring(0,n.length-u.raw.length)+o.raw,r=r.substring(0,r.length-t.raw.length)+o.raw,e=a.substring(i.at(-1).raw.length).split(`
22
+ `);continue}}return{type:`blockquote`,raw:n,tokens:i,text:r}}}list(e){let t=this.rules.block.list.exec(e);if(t){let n=t[1].trim(),r=n.length>1,i={type:`list`,raw:``,ordered:r,start:r?+n.slice(0,-1):``,loose:!1,items:[]};n=r?`\\d{1,9}\\${n.slice(-1)}`:`\\${n}`,this.options.pedantic&&(n=r?n:`[*+-]`);let a=this.rules.other.listItemRegex(n),o=!1;for(;e;){let n=!1,r=``,s=``;if(!(t=a.exec(e))||this.rules.block.hr.test(e))break;r=t[0],e=e.substring(r.length);let c=Vs(t[2].split(`
23
+ `,1)[0],t[1].length),l=e.split(`
24
+ `,1)[0],u=!c.trim(),d=0;if(this.options.pedantic?(d=2,s=c.trimStart()):u?d=t[1].length+1:(d=c.search(this.rules.other.nonSpaceChar),d=d>4?1:d,s=c.slice(d),d+=t[1].length),u&&this.rules.other.blankLine.test(l)&&(r+=l+`
25
+ `,e=e.substring(l.length+1),n=!0),!n){let t=this.rules.other.nextBulletRegex(d),n=this.rules.other.hrRegex(d),i=this.rules.other.fencesBeginRegex(d),a=this.rules.other.headingBeginRegex(d),o=this.rules.other.htmlBeginRegex(d),f=this.rules.other.blockquoteBeginRegex(d);for(;e;){let p=e.split(`
26
+ `,1)[0],m;if(l=p,this.options.pedantic?(l=l.replace(this.rules.other.listReplaceNesting,` `),m=l):m=l.replace(this.rules.other.tabCharGlobal,` `),i.test(l)||a.test(l)||o.test(l)||f.test(l)||t.test(l)||n.test(l))break;if(m.search(this.rules.other.nonSpaceChar)>=d||!l.trim())s+=`
27
+ `+m.slice(d);else{if(u||c.replace(this.rules.other.tabCharGlobal,` `).search(this.rules.other.nonSpaceChar)>=4||i.test(c)||a.test(c)||n.test(c))break;s+=`
28
+ `+l}u=!l.trim(),r+=p+`
29
+ `,e=e.substring(p.length+1),c=m.slice(d)}}i.loose||(o?i.loose=!0:this.rules.other.doubleBlankLine.test(r)&&(o=!0)),i.items.push({type:`list_item`,raw:r,task:!!this.options.gfm&&this.rules.other.listIsTask.test(s),loose:!1,text:s,tokens:[]}),i.raw+=r}let s=i.items.at(-1);if(s)s.raw=s.raw.trimEnd(),s.text=s.text.trimEnd();else return;i.raw=i.raw.trimEnd();for(let e of i.items)if(this.lexer.state.top=!1,e.tokens=this.lexer.blockTokens(e.text,[]),!i.loose){let t=e.tokens.filter(e=>e.type===`space`);i.loose=t.length>0&&t.some(e=>this.rules.other.anyLine.test(e.raw))}for(let e of i.items){let t=e.tokens[0];if(e.task&&(t?.type===`text`||t?.type===`paragraph`)){e.text=e.text.replace(this.rules.other.listReplaceTask,``),t.raw=t.raw.replace(this.rules.other.listReplaceTask,``),t.text=t.text.replace(this.rules.other.listReplaceTask,``);for(let e=this.lexer.inlineQueue.length-1;e>=0;e--)if(this.rules.other.listIsTask.test(this.lexer.inlineQueue[e].src)){this.lexer.inlineQueue[e].src=this.lexer.inlineQueue[e].src.replace(this.rules.other.listReplaceTask,``);break}let n=this.rules.other.listTaskCheckbox.exec(e.raw);if(n){let t={type:`checkbox`,raw:n[0]+` `,checked:n[0]!==`[ ]`};e.checked=t.checked,i.loose?e.tokens[0]&&[`paragraph`,`text`].includes(e.tokens[0].type)&&`tokens`in e.tokens[0]&&e.tokens[0].tokens?(e.tokens[0].raw=t.raw+e.tokens[0].raw,e.tokens[0].text=t.raw+e.tokens[0].text,e.tokens[0].tokens.unshift(t)):e.tokens.unshift({type:`paragraph`,raw:t.raw,text:t.raw,tokens:[t]}):e.tokens.unshift(t)}}else e.task&&(e.task=!1)}if(i.loose)for(let e of i.items){e.loose=!0;for(let t of e.tokens)t.type===`text`&&(t.type=`paragraph`)}return i}}html(e){let t=this.rules.block.html.exec(e);if(t){let e=Rs(t[0]);return{type:`html`,block:!0,raw:e,pre:t[1]===`pre`||t[1]===`script`||t[1]===`style`,text:e}}}def(e){let t=this.rules.block.def.exec(e);if(t){let e=zs(t[1]).replace(this.rules.other.multipleSpaceGlobal,` `),n=t[2]?t[2].replace(this.rules.other.hrefBrackets,`$1`).replace(this.rules.inline.anyPunctuation,`$1`):``,r=t[3]?t[3].substring(1,t[3].length-1).replace(this.rules.inline.anyPunctuation,`$1`):t[3];return{type:`def`,tag:e,raw:Ls(t[0],`
30
+ `),href:n,title:r}}}table(e){let t=this.rules.block.table.exec(e);if(!t||!this.rules.other.tableDelimiter.test(t[2]))return;let n=Is(t[1]),r=t[2].replace(this.rules.other.tableAlignChars,``).split(`|`),i=t[3]?.trim()?t[3].replace(this.rules.other.tableRowBlankLine,``).split(`
31
+ `):[],a={type:`table`,raw:Ls(t[0],`
32
+ `),header:[],align:[],rows:[]};if(n.length===r.length){for(let e of r)this.rules.other.tableAlignRight.test(e)?a.align.push(`right`):this.rules.other.tableAlignCenter.test(e)?a.align.push(`center`):this.rules.other.tableAlignLeft.test(e)?a.align.push(`left`):a.align.push(null);for(let e=0;e<n.length;e++)a.header.push({text:n[e],tokens:this.lexer.inline(n[e]),header:!0,align:a.align[e]});for(let e of i)a.rows.push(Is(e,a.header.length).map((e,t)=>({text:e,tokens:this.lexer.inline(e),header:!1,align:a.align[t]})));return a}}lheading(e){let t=this.rules.block.lheading.exec(e);if(t){let e=t[1].trim();return{type:`heading`,raw:Ls(t[0],`
33
+ `),depth:t[2].charAt(0)===`=`?1:2,text:e,tokens:this.lexer.inline(e)}}}paragraph(e){let t=this.rules.block.paragraph.exec(e);if(t){let e=t[1].charAt(t[1].length-1)===`
34
+ `?t[1].slice(0,-1):t[1];return{type:`paragraph`,raw:t[0],text:e,tokens:this.lexer.inline(e)}}}text(e){let t=this.rules.block.text.exec(e);if(t)return{type:`text`,raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}}escape(e){let t=this.rules.inline.escape.exec(e);if(t)return{type:`escape`,raw:t[0],text:t[1]}}tag(e){let t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&this.rules.other.startATag.test(t[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:`html`,raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:t[0]}}link(e){let t=this.rules.inline.link.exec(e);if(t){let n=t[0].charAt(0)===`!`?2:1;if(!this.options.pedantic&&Ws(e,t[1],n,this.rules))return;let r=t[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(r)){if(!this.rules.other.endAngleBracket.test(r))return;let e=Ls(r.slice(0,-1),`\\`);if((r.length-e.length)%2==0)return}else{let e=Bs(t[2],`()`);if(e===-2)return;if(e>-1){let n=(t[0].indexOf(`!`)===0?5:4)+t[1].length+e;t[2]=t[2].substring(0,e),t[0]=t[0].substring(0,n).trim(),t[3]=``}}let i=t[2],a=``;if(this.options.pedantic){let e=this.rules.other.pedanticHrefTitle.exec(i);e&&(i=e[1],a=e[3])}else a=t[3]?t[3].slice(1,-1):``;return i=i.trim(),this.rules.other.startAngleBracket.test(i)&&(i=this.options.pedantic&&!this.rules.other.endAngleBracket.test(r)?i.slice(1):i.slice(1,-1)),Hs(t,{href:i&&i.replace(this.rules.inline.anyPunctuation,`$1`),title:a&&a.replace(this.rules.inline.anyPunctuation,`$1`)},t[0],this.lexer,this.rules)}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){let r=n[0].charAt(0)===`!`?2:1;if(!this.options.pedantic&&Ws(e,n[1],r,this.rules))return;let i=t[zs((n[2]||n[1]).replace(this.rules.other.multipleSpaceGlobal,` `))];if(!i){let e=n[0].charAt(0);return{type:`text`,raw:e,text:e}}return Hs(n,i,n[0],this.lexer,this.rules)}}emStrong(e,t,n=``){let r=this.rules.inline.emStrongLDelim.exec(e);if(!(!r||!r[1]&&!r[2]&&!r[3]&&!r[4]||r[4]&&n.match(this.rules.other.unicodeAlphaNumeric))&&(!(r[1]||r[3])||!n||this.rules.inline.punctuation.exec(n))){let i=[...r[0]].length-1,a,o,s=i,c=0,l=r[0][0],u=n===l,d=l===`*`?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(d.lastIndex=0,t=t.slice(-1*e.length+i);(r=d.exec(t))!==null;){if(a=r[1]||r[2]||r[3]||r[4]||r[5]||r[6],!a)continue;if(o=[...a].length,r[3]||r[4]){s+=o;continue}if(r[5]||r[6]){if(i%3&&!((i+o)%3)){c+=o;continue}if(u)break}if(s-=o,s>0)continue;o=Math.min(o,o+s+c);let t=[...r[0]][0].length,n=e.slice(0,i+r.index+t+o);if(Math.min(i,o)%2){let e=n.slice(1,-1);return{type:`em`,raw:n,text:e,tokens:this.lexer.inlineTokens(e)}}let l=n.slice(2,-2);return{type:`strong`,raw:n,text:l,tokens:this.lexer.inlineTokens(l)}}}}codespan(e){let t=this.rules.inline.code.exec(e);if(t){let e=t[2].replace(this.rules.other.newLineCharGlobal,` `),n=this.rules.other.nonSpaceChar.test(e),r=this.rules.other.startingSpaceChar.test(e)&&this.rules.other.endingSpaceChar.test(e);return n&&r&&(e=e.substring(1,e.length-1)),{type:`codespan`,raw:t[0],text:e}}}br(e){let t=this.rules.inline.br.exec(e);if(t)return{type:`br`,raw:t[0]}}del(e,t,n=``){let r=this.rules.inline.delLDelim.exec(e);if(r&&(!r[1]||!n||this.rules.inline.punctuation.exec(n))){let n=[...r[0]].length-1,i,a,o=n,s=this.rules.inline.delRDelim;for(s.lastIndex=0,t=t.slice(-1*e.length+n);(r=s.exec(t))!==null;){if(i=r[1]||r[2]||r[3]||r[4]||r[5]||r[6],!i||(a=[...i].length,a!==n))continue;if(r[3]||r[4]){o+=a;continue}if(o-=a,o>0)continue;a=Math.min(a,a+o);let t=[...r[0]][0].length,s=e.slice(0,n+r.index+t+a),c=s.slice(n,-n);return{type:`del`,raw:s,text:c,tokens:this.lexer.inlineTokens(c)}}}}autolink(e){let t=this.rules.inline.autolink.exec(e);if(t){let e,n;return t[2]===`@`?(e=t[1],n=`mailto:`+e):(e=t[1],n=e),{type:`link`,raw:t[0],text:e,href:n,autolink:!0,tokens:[{type:`text`,raw:e,text:e}]}}}url(e){let t;if(t=this.rules.inline.url.exec(e)){let e,n;if(t[2]===`@`)e=t[0],n=`mailto:`+e;else{let r;do r=t[0],t[0]=this.rules.inline._backpedal.exec(t[0])?.[0]??``;while(r!==t[0]);e=t[0],n=t[1]===`www.`?`http://`+t[0]:t[0]}return{type:`link`,raw:t[0],text:e,href:n,autolink:!0,tokens:[{type:`text`,raw:e,text:e}]}}}inlineText(e){let t=this.rules.inline.text.exec(e);if(t){let e=this.lexer.state.inRawBlock;return{type:`text`,raw:t[0],text:t[0],escaped:e}}}},Ks=class e{constructor(e){E(this,`tokens`,void 0),E(this,`options`,void 0),E(this,`state`,void 0),E(this,`inlineQueue`,void 0),E(this,`tokenizer`,void 0),this.tokens=[],this.tokens.links=Object.create(null),this.options=e||po,this.options.tokenizer=this.options.tokenizer||new Gs,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,linkEmitted:!1,top:!0};let t={other:K,block:As.normal,inline:js.normal};this.options.pedantic?(t.block=As.pedantic,t.inline=js.pedantic):this.options.gfm&&(t.block=As.gfm,t.inline=this.options.breaks?js.breaks:js.gfm),this.tokenizer.rules=t}static get rules(){return{block:As,inline:js}}static lex(t,n){return new e(n).lex(t)}static lexInline(t,n){return new e(n).inlineTokens(t)}lex(e){e=e.replace(K.carriageReturn,`
35
+ `),this.blockTokens(e,this.tokens);for(let e=0;e<this.inlineQueue.length;e++){let t=this.inlineQueue[e];this.inlineTokens(t.src,t.tokens)}return this.inlineQueue=[],this.tokens}blockTokens(e,t=[],n=!1){this.tokenizer.lexer=this,this.options.pedantic&&(e=e.replace(K.tabCharGlobal,` `).replace(K.spaceLine,``));let r=1/0;for(;e;){if(e.length<r)r=e.length;else{this.infiniteLoopError(e.charCodeAt(0));break}let i;if(this.options.extensions?.block?.some(n=>(i=n.call({lexer:this},e,t))?(e=e.substring(i.raw.length),t.push(i),!0):!1))continue;if(i=this.tokenizer.space(e)){e=e.substring(i.raw.length);let n=t.at(-1);i.raw.length===1&&n!==void 0?n.raw+=`
36
+ `:t.push(i);continue}if(i=this.tokenizer.code(e)){e=e.substring(i.raw.length);let n=t.at(-1);n?.type===`paragraph`||n?.type===`text`?(n.raw+=(n.raw.endsWith(`
37
+ `)?``:`
38
+ `)+i.raw,n.text+=`
39
+ `+i.text,this.inlineQueue.at(-1).src=n.text):t.push(i);continue}if(i=this.tokenizer.fences(e)){e=e.substring(i.raw.length),t.push(i);continue}if(i=this.tokenizer.heading(e)){e=e.substring(i.raw.length),t.push(i);continue}if(i=this.tokenizer.hr(e)){e=e.substring(i.raw.length),t.push(i);continue}if(i=this.tokenizer.blockquote(e)){e=e.substring(i.raw.length),t.push(i);continue}if(i=this.tokenizer.list(e)){e=e.substring(i.raw.length),t.push(i);continue}if(i=this.tokenizer.html(e)){e=e.substring(i.raw.length),t.push(i);continue}if(i=this.tokenizer.def(e)){e=e.substring(i.raw.length);let n=t.at(-1);n?.type===`paragraph`||n?.type===`text`?(n.raw+=(n.raw.endsWith(`
40
+ `)?``:`
41
+ `)+i.raw,n.text+=`
42
+ `+i.raw,this.inlineQueue.at(-1).src=n.text):this.tokens.links[i.tag]||(this.tokens.links[i.tag]={href:i.href,title:i.title},t.push(i));continue}if(i=this.tokenizer.table(e)){e=e.substring(i.raw.length),t.push(i);continue}if(i=this.tokenizer.lheading(e)){e=e.substring(i.raw.length),t.push(i);continue}let a=e;if(this.options.extensions?.startBlock){let t=1/0,n=e.slice(1),r;this.options.extensions.startBlock.forEach(e=>{r=e.call({lexer:this},n),typeof r==`number`&&r>=0&&(t=Math.min(t,r))}),t<1/0&&t>=0&&(a=e.substring(0,t+1))}if(this.state.top&&(i=this.tokenizer.paragraph(a))){let r=t.at(-1);n&&r?.type===`paragraph`?(r.raw+=(r.raw.endsWith(`
43
+ `)?``:`
44
+ `)+i.raw,r.text+=`
45
+ `+i.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=r.text):t.push(i),n=a.length!==e.length,e=e.substring(i.raw.length);continue}if(i=this.tokenizer.text(e)){e=e.substring(i.raw.length);let n=t.at(-1);n?.type===`text`?(n.raw+=(n.raw.endsWith(`
46
+ `)?``:`
47
+ `)+i.raw,n.text+=`
48
+ `+i.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=n.text):t.push(i);continue}if(e){this.infiniteLoopError(e.charCodeAt(0));break}}return this.state.top=!0,t}inline(e,t=[]){return this.inlineQueue.push({src:e,tokens:t}),t}linkInText(e){if(!e.includes(`[`))return!1;let t=this.tokenizer.rules.inline.link;for(let n of e.matchAll(this.tokenizer.rules.inline.blockSkip))if(t.test(n[0])&&e.charAt(n.index-1)!==`!`)return!0;for(let t of e.matchAll(this.tokenizer.rules.inline.reflinkSearch)){let e=t[0],n=e.lastIndexOf(`[`);if(e.charAt(0)!==`!`&&Object.hasOwn(this.tokens.links,zs(e.slice(n+1,-1)))&&!(n>1&&this.linkInText(e.slice(1,n-1))))return!0}return!1}inlineTokens(e,t=[]){this.tokenizer.lexer=this;let n=e;if(this.tokens.links&&e.includes(`[`)){let e=this.tokenizer.rules.inline.reflinkSearch,t=n=>{let r=n.lastIndexOf(`[`);if(!Object.hasOwn(this.tokens.links,zs(n.slice(r+1,-1))))return n;if(r>1&&n.charAt(0)!==`!`){let i=n.slice(1,r-1);if(this.linkInText(i))return`[`+i.replace(e,t)+`][`+`a`.repeat(n.length-r-2)+`]`}return`[`+`a`.repeat(n.length-2)+`]`};n=n.replace(e,t)}n=n.replace(this.tokenizer.rules.inline.anyPunctuation,e=>`+`.repeat(e.length)),n=n.replace(this.tokenizer.rules.inline.blockSkip,(e,t,n)=>{let r=n?n.length:0;return e.slice(0,r)+`[`+`a`.repeat(e.length-r-2)+`]`}),n=this.options.hooks?.emStrongMask?.call({lexer:this},n)??n;let r=!1,i=``,a=1/0;for(;e;){if(e.length<a)a=e.length;else{this.infiniteLoopError(e.charCodeAt(0));break}r||(i=``),r=!1;let o;if(this.options.extensions?.inline?.some(n=>(o=n.call({lexer:this},e,t))?(e=e.substring(o.raw.length),t.push(o),!0):!1))continue;if(o=this.tokenizer.escape(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.tag(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.link(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(o.raw.length);let n=t.at(-1);o.type===`text`&&n?.type===`text`?(n.raw+=o.raw,n.text+=o.text):t.push(o);continue}if(o=this.tokenizer.emStrong(e,n,i)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.codespan(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.br(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.del(e,n,i)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.autolink(e)){e=e.substring(o.raw.length),t.push(o);continue}if(!this.state.inLink&&(o=this.tokenizer.url(e))){e=e.substring(o.raw.length),t.push(o);continue}let s=e;if(this.options.extensions?.startInline){let t=1/0,n=e.slice(1),r;this.options.extensions.startInline.forEach(e=>{r=e.call({lexer:this},n),typeof r==`number`&&r>=0&&(t=Math.min(t,r))}),t<1/0&&t>=0&&(s=e.substring(0,t+1))}if(o=this.tokenizer.inlineText(s)){e=e.substring(o.raw.length),o.raw.slice(-1)!==`_`&&(i=o.raw.slice(-1)),r=!0;let n=t.at(-1);n?.type===`text`?(n.raw+=o.raw,n.text+=o.text):t.push(o);continue}if(e){this.infiniteLoopError(e.charCodeAt(0));break}}return t}infiniteLoopError(e){let t=`Infinite loop on byte: `+e;if(this.options.silent)console.error(t);else throw Error(t)}},qs=class{constructor(e){E(this,`options`,void 0),E(this,`parser`,void 0),this.options=e||po}space(e){return``}code({text:e,lang:t,escaped:n}){let r=(t||``).match(K.notSpaceStart)?.[0],i=e?e.replace(K.endingNewline,``)+`
49
+ `:``;return r?`<pre><code class="language-`+Ps(r)+`">`+(n?i:Ps(i,!0))+`</code></pre>
50
+ `:`<pre><code>`+(n?i:Ps(i,!0))+`</code></pre>
51
+ `}blockquote({tokens:e}){return`<blockquote>
52
+ ${this.parser.parse(e)}</blockquote>
53
+ `}html({text:e}){return e}def(e){return``}heading({tokens:e,depth:t}){return`<h${t}>${this.parser.parseInline(e)}</h${t}>
54
+ `}hr(e){return`<hr>
55
+ `}list(e){let t=e.ordered,n=e.start,r=``;for(let t=0;t<e.items.length;t++){let n=e.items[t];r+=this.listitem(n)}let i=t?`ol`:`ul`,a=t&&n!==1?` start="`+n+`"`:``;return`<`+i+a+`>
56
+ `+r+`</`+i+`>
57
+ `}listitem(e){return`<li>${this.parser.parse(e.tokens)}</li>
58
+ `}checkbox({checked:e}){return`<input `+(e?`checked="" `:``)+`disabled="" type="checkbox"> `}paragraph({tokens:e}){return`<p>${this.parser.parseInline(e)}</p>
59
+ `}table(e){let t=``,n=``;for(let t=0;t<e.header.length;t++)n+=this.tablecell(e.header[t]);t+=this.tablerow({text:n});let r=``;for(let t=0;t<e.rows.length;t++){let i=e.rows[t];n=``;for(let e=0;e<i.length;e++)n+=this.tablecell(i[e]);r+=this.tablerow({text:n})}return r&&(r=`<tbody>${r}</tbody>`),`<table>
60
+ <thead>
61
+ `+t+`</thead>
62
+ `+r+`</table>
63
+ `}tablerow({text:e}){return`<tr>
64
+ ${e}</tr>
65
+ `}tablecell(e){let t=this.parser.parseInline(e.tokens),n=e.header?`th`:`td`;return(e.align?`<${n} align="${e.align}">`:`<${n}>`)+t+`</${n}>
66
+ `}strong({tokens:e}){return`<strong>${this.parser.parseInline(e)}</strong>`}em({tokens:e}){return`<em>${this.parser.parseInline(e)}</em>`}codespan({text:e}){return`<code>${Ps(e,!0)}</code>`}br(e){return`<br>`}del({tokens:e}){return`<del>${this.parser.parseInline(e)}</del>`}link({href:e,title:t,text:n,tokens:r,autolink:i}){let a=i?Ps(n,!0):this.parser.parseInline(r),o=Fs(e);if(o===null)return a;e=Ps(o,i);let s=`<a href="`+e+`"`;return t&&(s+=` title="`+Ps(t)+`"`),s+=`>`+a+`</a>`,s}image({href:e,title:t,text:n,tokens:r}){r&&(n=this.parser.parseInline(r,this.parser.textRenderer));let i=Fs(e);if(i===null)return Ps(n);e=i;let a=`<img src="${Ps(e)}" alt="${Ps(n)}"`;return t&&(a+=` title="${Ps(t)}"`),a+=`>`,a}text(e){return`tokens`in e&&e.tokens?this.parser.parseInline(e.tokens):`escaped`in e&&e.escaped?e.text:Ps(e.text)}},Js=class{strong({text:e}){return e}em({text:e}){return e}codespan({text:e}){return e}del({text:e}){return e}html({text:e}){return e}text({text:e}){return e}link({text:e}){return``+e}image({text:e}){return``+e}br(){return``}checkbox({raw:e}){return e}},Ys=class e{constructor(e){E(this,`options`,void 0),E(this,`renderer`,void 0),E(this,`textRenderer`,void 0),this.options=e||po,this.options.renderer=this.options.renderer||new qs,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new Js}static parse(t,n){return new e(n).parse(t)}static parseInline(t,n){return new e(n).parseInline(t)}parse(e){this.renderer.parser=this;let t=``;for(let n=0;n<e.length;n++){let r=e[n];if(this.options.extensions?.renderers?.[r.type]){let e=r,n=this.options.extensions.renderers[e.type].call({parser:this},e);if(n!==!1||![`space`,`hr`,`heading`,`code`,`table`,`blockquote`,`list`,`checkbox`,`html`,`def`,`paragraph`,`text`].includes(e.type)){t+=n||``;continue}}let i=r;switch(i.type){case`space`:t+=this.renderer.space(i);break;case`hr`:t+=this.renderer.hr(i);break;case`heading`:t+=this.renderer.heading(i);break;case`code`:t+=this.renderer.code(i);break;case`table`:t+=this.renderer.table(i);break;case`blockquote`:t+=this.renderer.blockquote(i);break;case`list`:t+=this.renderer.list(i);break;case`checkbox`:t+=this.renderer.checkbox(i);break;case`html`:t+=this.renderer.html(i);break;case`def`:t+=this.renderer.def(i);break;case`paragraph`:t+=this.renderer.paragraph(i);break;case`text`:t+=this.renderer.text(i);break;default:{let e=`Token with "`+i.type+`" type was not found.`;if(this.options.silent)return console.error(e),``;throw Error(e)}}}return t}parseInline(e,t=this.renderer){this.renderer.parser=this;let n=``;for(let r=0;r<e.length;r++){let i=e[r];if(this.options.extensions?.renderers?.[i.type]){let e=this.options.extensions.renderers[i.type].call({parser:this},i);if(e!==!1||![`escape`,`html`,`link`,`image`,`checkbox`,`strong`,`em`,`codespan`,`br`,`del`,`text`].includes(i.type)){n+=e||``;continue}}let a=i;switch(a.type){case`escape`:n+=t.text(a);break;case`html`:n+=t.html(a);break;case`link`:n+=t.link(a);break;case`image`:n+=t.image(a);break;case`checkbox`:n+=t.checkbox(a);break;case`strong`:n+=t.strong(a);break;case`em`:n+=t.em(a);break;case`codespan`:n+=t.codespan(a);break;case`br`:n+=t.br(a);break;case`del`:n+=t.del(a);break;case`text`:n+=t.text(a);break;default:{let e=`Token with "`+a.type+`" type was not found.`;if(this.options.silent)return console.error(e),``;throw Error(e)}}}return n}},Xs=(uo=class{constructor(e){E(this,`options`,void 0),E(this,`block`,void 0),this.options=e||po}preprocess(e){return e}postprocess(e){return e}processAllTokens(e){return e}emStrongMask(e){return e}provideLexer(e=this.block){return e?Ks.lex:Ks.lexInline}provideParser(e=this.block){return e?Ys.parse:Ys.parseInline}},E(uo,`passThroughHooks`,new Set([`preprocess`,`postprocess`,`processAllTokens`,`emStrongMask`])),E(uo,`passThroughHooksRespectAsync`,new Set([`preprocess`,`postprocess`,`processAllTokens`])),uo),Zs=new class{constructor(...e){E(this,`defaults`,fo()),E(this,`options`,this.setOptions),E(this,`parse`,this.parseMarkdown(!0)),E(this,`parseInline`,this.parseMarkdown(!1)),E(this,`Parser`,Ys),E(this,`Renderer`,qs),E(this,`TextRenderer`,Js),E(this,`Lexer`,Ks),E(this,`Tokenizer`,Gs),E(this,`Hooks`,Xs),this.use(...e)}walkTokens(e,t){let n=[];for(let r of e)switch(n=n.concat(t.call(this,r)),r.type){case`table`:{let e=r;for(let r of e.header)n=n.concat(this.walkTokens(r.tokens,t));for(let r of e.rows)for(let e of r)n=n.concat(this.walkTokens(e.tokens,t));break}case`list`:{let e=r;n=n.concat(this.walkTokens(e.items,t));break}default:{let e=r;this.defaults.extensions?.childTokens?.[e.type]?this.defaults.extensions.childTokens[e.type].forEach(r=>{let i=e[r].flat(1/0);n=n.concat(this.walkTokens(i,t))}):e.tokens&&(n=n.concat(this.walkTokens(e.tokens,t)))}}return n}use(...e){let t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(e=>{let n={...e};if(n.async=this.defaults.async||n.async||!1,e.extensions&&(e.extensions.forEach(e=>{if(!e.name)throw Error(`extension name required`);if(`renderer`in e){let n=t.renderers[e.name];n?t.renderers[e.name]=function(...t){let r=e.renderer.apply(this,t);return r===!1&&(r=n.apply(this,t)),r}:t.renderers[e.name]=e.renderer}if(`tokenizer`in e){if(!e.level||e.level!==`block`&&e.level!==`inline`)throw Error(`extension level must be 'block' or 'inline'`);let n=t[e.level];n?n.unshift(e.tokenizer):t[e.level]=[e.tokenizer],e.start&&(e.level===`block`?t.startBlock?t.startBlock.push(e.start):t.startBlock=[e.start]:e.level===`inline`&&(t.startInline?t.startInline.push(e.start):t.startInline=[e.start]))}`childTokens`in e&&e.childTokens&&(t.childTokens[e.name]=e.childTokens)}),n.extensions=t),e.renderer){let t=this.defaults.renderer||new qs(this.defaults);for(let n in e.renderer){if(!(n in t))throw Error(`renderer '${n}' does not exist`);if([`options`,`parser`].includes(n))continue;let r=n,i=e.renderer[r],a=t[r];t[r]=(...e)=>{let n=i.apply(t,e);return n===!1&&(n=a.apply(t,e)),n||``}}n.renderer=t}if(e.tokenizer){let t=this.defaults.tokenizer||new Gs(this.defaults);for(let n in e.tokenizer){if(!(n in t))throw Error(`tokenizer '${n}' does not exist`);if([`options`,`rules`,`lexer`].includes(n))continue;let r=n,i=e.tokenizer[r],a=t[r];t[r]=(...e)=>{let n=i.apply(t,e);return n===!1&&(n=a.apply(t,e)),n}}n.tokenizer=t}if(e.hooks){let t=this.defaults.hooks||new Xs;for(let n in e.hooks){if(!(n in t))throw Error(`hook '${n}' does not exist`);if([`options`,`block`].includes(n))continue;let r=n,i=e.hooks[r],a=t[r];t[r]=Xs.passThroughHooks.has(n)?e=>{if(this.defaults.async&&Xs.passThroughHooksRespectAsync.has(n))return(async()=>{let n=await i.call(t,e);return a.call(t,n)})();let r=i.call(t,e);return a.call(t,r)}:(...e)=>{if(this.defaults.async)return(async()=>{let n=await i.apply(t,e);return n===!1&&(n=await a.apply(t,e)),n})();let n=i.apply(t,e);return n===!1&&(n=a.apply(t,e)),n}}n.hooks=t}if(e.walkTokens){let t=this.defaults.walkTokens,r=e.walkTokens;n.walkTokens=function(e){let n=[];return n.push(r.call(this,e)),t&&(n=n.concat(t.call(this,e))),n}}this.defaults={...this.defaults,...n}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,t){return Ks.lex(e,t??this.defaults)}parser(e,t){return Ys.parse(e,t??this.defaults)}parseMarkdown(e){return(t,n)=>{let r={...n},i={...this.defaults,...r},a=this.onError(!!i.silent,!!i.async);if(this.defaults.async===!0&&r.async===!1)return a(Error(`marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise.`));if(typeof t>`u`||t===null)return a(Error(`marked(): input parameter is undefined or null`));if(typeof t!=`string`)return a(Error(`marked(): input parameter is of type `+Object.prototype.toString.call(t)+`, string expected`));if(i.hooks&&(i.hooks.options=i,i.hooks.block=e),i.async)return(async()=>{let n=i.hooks?await i.hooks.preprocess(t):t,r=await(i.hooks?await i.hooks.provideLexer(e):e?Ks.lex:Ks.lexInline)(n,i),a=i.hooks?await i.hooks.processAllTokens(r):r;i.walkTokens&&await Promise.all(this.walkTokens(a,i.walkTokens));let o=await(i.hooks?await i.hooks.provideParser(e):e?Ys.parse:Ys.parseInline)(a,i);return i.hooks?await i.hooks.postprocess(o):o})().catch(a);try{i.hooks&&(t=i.hooks.preprocess(t));let n=(i.hooks?i.hooks.provideLexer(e):e?Ks.lex:Ks.lexInline)(t,i);i.hooks&&(n=i.hooks.processAllTokens(n)),i.walkTokens&&this.walkTokens(n,i.walkTokens);let r=(i.hooks?i.hooks.provideParser(e):e?Ys.parse:Ys.parseInline)(n,i);return i.hooks&&(r=i.hooks.postprocess(r)),r}catch(e){return a(e)}}}onError(e,t){return n=>{if(n.message+=`
67
+ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error occurred:</p><pre>`+Ps(n.message+``,!0)+`</pre>`;return t?Promise.resolve(e):e}if(t)return Promise.reject(n);throw n}}};function q(e,t){return Zs.parse(e,t)}q.options=q.setOptions=function(e){return Zs.setOptions(e),q.defaults=Zs.defaults,mo(q.defaults),q},q.getDefaults=fo,q.defaults=po;function Qs(...e){return Zs.use(...e),q.defaults=Zs.defaults,mo(q.defaults),q}q.use=Qs,q.walkTokens=function(e,t){return Zs.walkTokens(e,t)},q.parseInline=Zs.parseInline,q.Parser=Ys,q.parser=Ys.parse,q.Renderer=qs,q.TextRenderer=Js,q.Lexer=Ks,q.lexer=Ks.lex,q.Tokenizer=Gs,q.Hooks=Xs,q.parse=q,q.options,q.setOptions,q.walkTokens,q.parseInline,Ys.parse,Ks.lex;var $s=`math-inline`,ec=`math-block`,tc=/^\$(?!\$)(?=[^\s$])((?:\\.|[^\\$])+?)(?<=\S)\$(?!\$)(?!\d)/,nc=/^\$\$([\s\S]+?)\$\$(?:\n|$)/;function rc(e,t,n){let r=t?`div`:`span`,i=t?ec:$s;return`<`+r+` class="`+i+`">`+n(e)+`</`+r+`>`}function ic(e){return{extensions:[{name:`mathBlock`,level:`block`,start(e){let t=e.indexOf(`$$`);return t<0?void 0:t},tokenizer(e){let t=nc.exec(e);if(t!==null)return{type:`mathBlock`,raw:t[0],text:t[1]??``,display:!0}},renderer(t){return rc(t.text??``,t.display===!0,e)}},{name:`mathInline`,level:`inline`,start(e){let t=e.indexOf(`$`);return t<0?void 0:t},tokenizer(e){let t=tc.exec(e);if(t!==null)return{type:`mathInline`,raw:t[0],text:t[1]??``,display:!1}},renderer(t){return rc(t.text??``,t.display===!0,e)}}]}}var ac=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi;function oc(e){return e.replace(ac,(e,t)=>{let n=t.toLowerCase();return n===`colon`?`:`:n.charAt(0)===`#`?n.charAt(1)===`x`?String.fromCharCode(parseInt(n.substring(2),16)):String.fromCharCode(+n.substring(1)):``})}function sc(e){return e.toLowerCase().trim().replace(/<[!\/a-z].*?>/gi,``).replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g,``).replace(/\s/g,`-`)}function cc(e,t){let n=t,r=0;if(Object.prototype.hasOwnProperty.call(e,n)){r=e[t]??0;do r++,n=t+`-`+r;while(Object.prototype.hasOwnProperty.call(e,n))}return e[t]=r,e[n]=0,n}var lc=class extends qs{constructor(e){super(),E(this,`seen`,void 0),this.seen=e}heading({tokens:e,depth:t}){let n=this.parser.parseInline(e),r=oc(this.parser.parseInline(e,this.parser.textRenderer));return`<h${t} id="${cc(this.seen,sc(r))}">${n}</h${t}>\n`}};function uc(e,t,n){let r={...q.defaults,renderer:new lc(n?e:{...e})};return new Ys(r).parse(q.lexer(t,r))}q.setOptions({breaks:!0,gfm:!0});var dc={"&":`&amp;`,"<":`&lt;`,">":`&gt;`,'"':`&quot;`,"'":`&#39;`};function fc(e){return e.replace(/[&<>"']/g,e=>dc[e]??e)}q.use(ic(fc));function pc(e){try{return uc({},e,!0)}catch{return`<pre>`+fc(e)+`</pre>`}}function mc(e,t,n){try{return uc(t,e,n)}catch{return`<pre>`+fc(e)+`</pre>`}}var hc=/^ {0,3}(`{3,}(?=[^`\n]*$)|~{3,})([^\n]*)$/,gc=/^ {0,3}(`+|~+)([~`]*)[ \t]*$/,_c=/^ {0,3}(?:[-*+]|\d{1,9}[.)])(?:[ \t]|$)/,vc=/^ {0,3}(?:[-*+]|\d{1,9})(?:[.)][ \t]*)?$/,yc=/^[ \t]*(?:[-*+]|\d{1,9}[.)])(?:[ \t]|$)/,bc=/^(?: {2,}|\t)/,xc=/^ {0,3}(?:=+|-+)[ \t]*$/,Sc=/^ {0,3}(?:(?:\*[ \t]*){3,}|(?:-[ \t]*){3,}|(?:_[ \t]*){3,})$/,Cc=/^ {0,3}\[[^\]\n]+\]:/,wc=/\[[^\]\n]*\](?!\()/,Tc=/<[a-zA-Z!/?]/,Ec=/^(?: {4,}|\t)/;function Dc(e,t){let n=t;for(;n<e.length&&e[n]!==`
68
+ `&&e[n]!==`\r`;)n+=1;if(n>=e.length)return{line:e.slice(t),next:e.length,eol:!1};let r=n+1;return e[n]===`\r`&&e[r]===`
69
+ `&&(r+=1),{line:e.slice(t,n),next:r,eol:!0}}function Oc(e,t){let n=0,r=!1,i=``,a=0;for(;n<e.length;){let{line:o,next:s}=Dc(e,n);if(r){let e=gc.exec(o)?.[1]??``;e!==``&&e.charAt(0)===i&&e.length>=a&&(r=!1,i=``,a=0),n=s;continue}{let e=hc.exec(o);if(e){let t=e[1]??``;r=!0,i=t.charAt(0),a=t.length,n=s;continue}}o.trim()!==``&&!Ec.test(o)&&t(o),n=s}}function kc(e){let t=!1;return Oc(e,e=>{!t&&Cc.test(e)&&(t=!0)}),t}function Ac(e){let t=!1;return Oc(e,e=>{!t&&wc.test(e)&&(t=!0)}),t}function jc(){return{inFence:!1,fenceChar:``,fenceLen:0,ticks:0,strong:0,strike:0,openBrackets:0,closeBrackets:0,refUse:!1,hasDollar:!1,hasList:!1,hasRawHtml:!1,lastLine:null,hasContent:!1}}function Mc(e){return{...e}}function Nc(e,t){if(e.inFence){let n=gc.exec(t)?.[1]??``;n!==``&&n.charAt(0)===e.fenceChar&&n.length>=e.fenceLen&&(e.inFence=!1,e.fenceChar=``,e.fenceLen=0),t.trim()!==``&&(e.hasContent=!0);return}{let n=hc.exec(t);if(n){let r=n[1]??``;e.inFence=!0,e.fenceChar=r.charAt(0),e.fenceLen=r.length,t.trim()!==``&&(e.hasContent=!0);return}}if(t.trim()===``||(e.hasContent=!0,e.lastLine=t,Ec.test(t))||Sc.test(t))return;Tc.test(t)&&(e.hasRawHtml=!0);let n=t.match(/`+/g);n&&(e.ticks+=n.length);let r=t.match(/\*\*/g);r&&(e.strong+=r.length);let i=t.match(/~~/g);i&&(e.strike+=i.length);let a=t.match(/\[/g);a&&(e.openBrackets+=a.length);let o=t.match(/\]/g);o&&(e.closeBrackets+=o.length),wc.test(t)&&(e.refUse=!0),/(^|[^\\])\$/.test(t)&&(e.hasDollar=!0),yc.test(t)&&(e.hasList=!0)}function Pc(e,t,n){if(e.inFence||e.hasRawHtml||e.refUse&&n||e.hasDollar||e.ticks%2!=0||e.strong%2!=0||e.strike%2!=0||e.openBrackets!==e.closeBrackets)return!1;let r=e.lastLine;return!(r!==null&&r.indexOf(`|`)!==-1&&t.indexOf(`|`)!==-1||e.hasList&&(_c.test(t)||vc.test(t))||bc.test(t)||xc.test(t))}function Fc(e,t){let n=0,r=jc(),i=-1,a=null,o=0;for(;o<e.length;){let{line:s,next:c,eol:l}=Dc(e,o),u=l&&s===``;!u&&s.trim()!==``&&i>=0&&a!==null&&(Pc(a,s,t)&&(n=i,r=jc()),i=-1,a=null),Nc(r,s),!r.inFence&&u&&(r.hasContent?(i=c,a=Mc(r)):(n=c,r=jc(),i=-1,a=null)),o=c}return n}var Ic=class{constructor(){E(this,`stableHtml`,``),E(this,`stableLen`,0),E(this,`raw`,``),E(this,`html`,``),E(this,`tailHtml`,``),E(this,`seen`,{}),E(this,`refFrozen`,!1)}get stableLength(){return this.stableLen}reset(){this.stableHtml=``,this.stableLen=0,this.raw=``,this.html=``,this.tailHtml=``,this.seen={},this.refFrozen=!1}update(e){return this.updateParts(e).html}updateParts(e){let t=typeof e==`string`?e:String(e??``);if(t===this.raw)return{html:this.html,stableHtml:this.stableHtml,stableDeltaHtml:``,tailHtml:this.tailHtml,stableLen:this.stableLen,reset:!1};let n=!1;t.startsWith(this.raw)||(this.reset(),n=!0);let r=kc(t);this.refFrozen&&r&&(this.reset(),n=!0);let i=t.slice(this.stableLen),a=Fc(i,r),o=``;if(a>0){let e=i.slice(0,a);o=mc(e,this.seen,!0),this.stableHtml+=o,this.stableLen+=a,Ac(e)&&(this.refFrozen=!0)}let s=t.slice(this.stableLen);return this.raw=t,this.tailHtml=mc(s,this.seen,!1),this.html=this.stableHtml+this.tailHtml,{html:this.html,stableHtml:this.stableHtml,stableDeltaHtml:o,tailHtml:this.tailHtml,stableLen:this.stableLen,reset:n}}},Lc=new Set(`p.div.span.br.hr.blockquote.pre.h1.h2.h3.h4.h5.h6.ul.ol.li.dl.dt.dd.table.thead.tbody.tfoot.tr.th.td.caption.colgroup.col.details.summary.figure.figcaption.a.img.strong.b.em.i.u.s.del.ins.mark.small.sub.sup.kbd.samp.var.abbr.cite.q.dfn.code.time.bdi.bdo.wbr.ruby.rt.rp.math.semantics.annotation.mrow.mi.mn.mo.mtext.msup.msub.msubsup.mfrac.msqrt.mroot.mstyle.mtable.mtr.mtd.mover.munder.munderover.mphantom.mspace.menclose.mpadded.input`.split(`.`)),Rc=new Set(`script.style.noscript.template.iframe.frame.frameset.noframes.object.embed.applet.param.link.meta.base.basefont.svg.canvas.audio.video.source.track.picture.annotation-xml.foreignobject.plaintext.xmp.listing.marquee.portal.slot.dialog.form.fieldset.legend.select.option.optgroup.textarea.button.title.head.html.body`.split(`.`)),zc=new Set([`class`,`id`,`title`,`dir`,`lang`]),Bc={a:[`href`],img:[`src`,`alt`,`width`,`height`],ol:[`start`,`reversed`,`type`],li:[`value`],td:[`colspan`,`rowspan`,`align`,`scope`],th:[`colspan`,`rowspan`,`align`,`scope`],col:[`span`,`width`],colgroup:[`span`],time:[`datetime`],details:[`open`],input:[`type`,`checked`,`disabled`],math:[`display`,`xmlns`],annotation:[`encoding`],menclose:[`notation`],mfrac:[`linethickness`],mi:[`mathvariant`],mo:[`fence`,`mathvariant`,`stretchy`,`lspace`,`rspace`,`minsize`],mover:[`accent`],mspace:[`width`,`height`,`mathbackground`],munder:[`accentunder`],mpadded:[`depth`,`height`,`lspace`,`mathbackground`,`voffset`,`width`],mtext:[`mathvariant`],mstyle:[`displaystyle`,`mathcolor`,`scriptlevel`],mtable:[`columnalign`,`columnlines`,`columnspacing`,`rowlines`,`rowspacing`,`width`],mtd:[`width`]},Vc=new Set([`http`,`https`,`mailto`,`tel`]),Hc=/^[A-Za-z][A-Za-z0-9_-]{0,63}$/,Uc=/^[\p{L}\p{N}][\p{L}\p{N}_.:-]{0,63}$/u,Wc=/^-?\d{1,6}$/,Gc=/^\d{1,4}$/,Kc=2048,qc=[`left`,`center`,`right`,`justify`],Jc=[`ltr`,`rtl`,`auto`],Yc=[`1`,`a`,`A`,`i`,`I`],Xc=new Set([`normal`,`bold`,`italic`,`bold-italic`,`double-struck`,`bold-fraktur`,`script`,`bold-script`,`fraktur`,`sans-serif`,`bold-sans-serif`,`sans-serif-italic`,`sans-serif-bold-italic`,`monospace`,`initial`,`tailed`,`looped`,`stretched`]),Zc=/^(?:#[0-9a-fA-F]{3,8}|[a-zA-Z]{1,24}|rgba?\([0-9.,%\s]{1,32}\)|hsla?\([0-9.,%\s]{1,32}\))$/,Qc=/^(?:thin|medium|thick|[+-]?(?:\d+|\d*\.\d+)(?:em|ex|mu|px|pt|pc|in|cm|mm|%|width)?)$/,$c=/^(?:left|center|right)(?: (?:left|center|right))*$/,el=/^(?:none|solid|dashed)(?: (?:none|solid|dashed))*$/,tl=/^(?:-?(?:\d+|\d*\.\d+)(?:em|ex|mu|px|pt|pc|in|cm|mm|%)?)(?: -?(?:\d+|\d*\.\d+)(?:em|ex|mu|px|pt|pc|in|cm|mm|%)?)*$/,nl=/^[+-]?\d{1,2}$/,rl=/^(?:longdiv|actuarial|radical|box|roundedbox|circle|left|right|top|bottom|updiagonalstrike|downdiagonalstrike|verticalstrike|horizontalstrike|madruwb|phasorangle)(?: (?:longdiv|actuarial|radical|box|roundedbox|circle|left|right|top|bottom|updiagonalstrike|downdiagonalstrike|verticalstrike|horizontalstrike|madruwb|phasorangle))*$/;function il(e){let t=e.replace(/[\u0000-\u0020\u007f-\u009f]/g,``);if(t===``)return null;let n=/^([A-Za-z][A-Za-z0-9+.-]*):/.exec(t);if(n!==null){let e=(n[1]??``).toLowerCase();if(!Vc.has(e))return null}return e}function al(e){let t=e.split(/[\s\u0000-\u001f]+/).filter(e=>Hc.test(e)).slice(0,32);return t.length===0?null:t.join(` `)}function ol(e,t){let n=Bc[t];for(let r=e.attributes.length-1;r>=0;--r){let i=e.attributes[r];if(i===void 0)continue;let a=i.name.toLowerCase();if(!(zc.has(a)||n!==void 0&&n.indexOf(a)!==-1)||a.startsWith(`on`)){e.removeAttribute(i.name);continue}let o=i.value;if(o.length>Kc){e.removeAttribute(i.name);continue}switch(a){case`class`:{let t=al(o);t===null?e.removeAttribute(i.name):e.setAttribute(`class`,t);break}case`id`:Uc.test(o)||e.removeAttribute(i.name);break;case`href`:case`src`:{let t=il(o);t===null?e.removeAttribute(i.name):e.setAttribute(i.name,t);break}case`width`:case`height`:(t===`mspace`||t===`mpadded`||t===`mtable`||t===`mtd`?Qc.test(o):Gc.test(o))||e.removeAttribute(i.name);break;case`depth`:case`linethickness`:case`lspace`:case`rspace`:case`minsize`:case`voffset`:Qc.test(o)||e.removeAttribute(i.name);break;case`display`:o!==`inline`&&o!==`block`&&e.removeAttribute(i.name);break;case`xmlns`:o!==`http://www.w3.org/1998/Math/MathML`&&e.removeAttribute(i.name);break;case`encoding`:o!==`application/x-tex`&&e.removeAttribute(i.name);break;case`mathvariant`:Xc.has(o)||e.removeAttribute(i.name);break;case`scriptlevel`:nl.test(o)||e.removeAttribute(i.name);break;case`mathcolor`:case`mathbackground`:Zc.test(o)||e.removeAttribute(i.name);break;case`displaystyle`:case`fence`:case`stretchy`:case`accent`:case`accentunder`:o!==`true`&&o!==`false`&&e.removeAttribute(i.name);break;case`columnalign`:case`rowalign`:$c.test(o)||e.removeAttribute(i.name);break;case`columnlines`:case`rowlines`:el.test(o)||e.removeAttribute(i.name);break;case`columnspacing`:case`rowspacing`:tl.test(o)||e.removeAttribute(i.name);break;case`notation`:rl.test(o)||e.removeAttribute(i.name);break;case`colspan`:case`rowspan`:case`span`:case`start`:case`value`:Wc.test(o)||e.removeAttribute(i.name);break;case`align`:qc.indexOf(o.toLowerCase())===-1&&e.removeAttribute(i.name);break;case`dir`:Jc.indexOf(o.toLowerCase())===-1&&e.removeAttribute(i.name);break;case`type`:(t===`ol`?Yc.indexOf(o)!==-1:t===`input`&&o.toLowerCase()===`checkbox`)||e.removeAttribute(i.name)}}if(t===`input`){if((e.getAttribute(`type`)??``).toLowerCase()!==`checkbox`){e.remove();return}e.setAttribute(`type`,`checkbox`),e.setAttribute(`disabled`,``)}}function sl(e){let t=e.parentNode;if(t!==null){for(;e.firstChild!==null;)t.insertBefore(e.firstChild,e);t.removeChild(e)}}function cl(e){let t=e.firstChild;for(;t!==null;){let n=t.nextSibling;switch(t.nodeType){case 3:break;case 1:{let n=t,r=n.tagName.toLowerCase();if(Lc.has(r)){ol(n,r),cl(n);break}if(Rc.has(r)){e.removeChild(n);break}cl(n),sl(n);break}default:e.removeChild(t)}t=n}}function ll(e){let t=document.createElement(`template`);return t.innerHTML=e,t.content}function ul(e){if(e===``)return[];let t=ll(e);return cl(t),Array.from(t.childNodes)}function dl(e,t){e.replaceChildren(...ul(t))}function fl(e,t){dl(e,pc(t))}function pl(e){return ul(e)}var ml=c(o(((e,t)=>{function n(e){return e instanceof Map?e.clear=e.delete=e.set=function(){throw Error(`map is read-only`)}:e instanceof Set&&(e.add=e.clear=e.delete=function(){throw Error(`set is read-only`)}),Object.freeze(e),Object.getOwnPropertyNames(e).forEach(t=>{let r=e[t],i=typeof r;(i===`object`||i===`function`)&&!Object.isFrozen(r)&&n(r)}),e}var r=class{constructor(e){e.data===void 0&&(e.data={}),this.data=e.data,this.isMatchIgnored=!1}ignoreMatch(){this.isMatchIgnored=!0}};function i(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`).replace(/'/g,`&#x27;`)}function a(e,...t){let n=Object.create(null);for(let t in e)n[t]=e[t];return t.forEach(function(e){for(let t in e)n[t]=e[t]}),n}var o=`</span>`,s=e=>!!e.scope,c=(e,{prefix:t})=>{if(e.startsWith(`language:`))return e.replace(`language:`,`language-`);if(e.includes(`.`)){let n=e.split(`.`);return[`${t}${n.shift()}`,...n.map((e,t)=>`${e}${`_`.repeat(t+1)}`)].join(` `)}return`${t}${e}`},l=class{constructor(e,t){this.buffer=``,this.classPrefix=t.classPrefix,e.walk(this)}addText(e){this.buffer+=i(e)}openNode(e){if(!s(e))return;let t=c(e.scope,{prefix:this.classPrefix});this.span(t)}closeNode(e){s(e)&&(this.buffer+=o)}value(){return this.buffer}span(e){this.buffer+=`<span class="${e}">`}},u=(e={})=>{let t={children:[]};return Object.assign(t,e),t},d=class e{constructor(){this.rootNode=u(),this.stack=[this.rootNode]}get top(){return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(e){this.top.children.push(e)}openNode(e){let t=u({scope:e});this.add(t),this.stack.push(t)}closeNode(){if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}walk(e){return this.constructor._walk(e,this.rootNode)}static _walk(e,t){return typeof t==`string`?e.addText(t):t.children&&(e.openNode(t),t.children.forEach(t=>this._walk(e,t)),e.closeNode(t)),e}static _collapse(t){typeof t!=`string`&&t.children&&(t.children.every(e=>typeof e==`string`)?t.children=[t.children.join(``)]:t.children.forEach(t=>{e._collapse(t)}))}},f=class extends d{constructor(e){super(),this.options=e}addText(e){e!==``&&this.add(e)}startScope(e){this.openNode(e)}endScope(){this.closeNode()}__addSublanguage(e,t){let n=e.root;t&&(n.scope=`language:${t}`),this.add(n)}toHTML(){return new l(this,this.options).value()}finalize(){return this.closeAllNodes(),!0}};function p(e){return e?typeof e==`string`?e:e.source:null}function m(e){return _(`(?=`,e,`)`)}function h(e){return _(`(?:`,e,`)*`)}function g(e){return _(`(?:`,e,`)?`)}function _(...e){return e.map(e=>p(e)).join(``)}function v(e){let t=e[e.length-1];return typeof t==`object`&&t.constructor===Object?(e.splice(e.length-1,1),t):{}}function y(...e){return`(`+(v(e).capture?``:`?:`)+e.map(e=>p(e)).join(`|`)+`)`}function b(e){return RegExp(e.toString()+`|`).exec(``).length-1}function x(e,t){let n=e&&e.exec(t);return n&&n.index===0}var ee=new RegExp(y(/\[(?:[^\\\]]|\\.)*\]/,/\(\?<(?![=!])[^>]+>/,/\(\?'[^']+'/,/\(\??/,/\\([1-9][0-9]*)/,/\\./));function te(e,{joinWith:t}){let n=0;return e.map(e=>{n+=1;let t=n,r=p(e),i=``;for(;r.length>0;){let e=ee.exec(r);if(!e){i+=r;break}i+=r.substring(0,e.index),r=r.substring(e.index+e[0].length),e[0][0]===`\\`&&e[1]?i+=`\\`+String(Number(e[1])+t):(i+=e[0],(e[0]===`(`||/^\(\?[<']/.test(e[0]))&&n++)}return i}).map(e=>`(${e})`).join(t)}var ne=/\b\B/,re=`[a-zA-Z]\\w*`,ie=`[a-zA-Z_]\\w*`,S=`\\b\\d+(\\.\\d+)?`,ae=`(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)`,oe=`\\b(0b[01]+)`,C=`!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~`,se=(e={})=>{let t=/^#![ ]*\//;return e.binary&&(e.begin=_(t,/.*\b/,e.binary,/\b.*/)),a({scope:`meta`,begin:t,end:/$/,relevance:0,"on:begin":(e,t)=>{e.index!==0&&t.ignoreMatch()}},e)},w={begin:`\\\\[\\s\\S]`,relevance:0},ce={scope:`string`,begin:`'`,end:`'`,illegal:`\\n`,contains:[w]},T={scope:`string`,begin:`"`,end:`"`,illegal:`\\n`,contains:[w]},le={begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},ue=function(e,t,n={}){let r=a({scope:`comment`,begin:e,end:t,contains:[]},n);r.contains.push({scope:`doctag`,begin:`[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)`,end:/(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,excludeBegin:!0,relevance:0});let i=y(`I`,`a`,`is`,`so`,`us`,`to`,`at`,`if`,`in`,`it`,`on`,/[A-Za-z]+['](d|ve|re|ll|t|s|n)/,/[A-Za-z]+[-][a-z]+/,/[A-Za-z][a-z]{2,}/);return r.contains.push({begin:_(/[ ]+/,`(`,i,/[.]?[:]?([.][ ]|[ ])/,`){3}`)}),r},E=ue(`//`,`$`),D=ue(`/\\*`,`\\*/`),de=ue(`#`,`$`),O=Object.freeze({__proto__:null,APOS_STRING_MODE:ce,BACKSLASH_ESCAPE:w,BINARY_NUMBER_MODE:{scope:`number`,begin:oe,relevance:0},BINARY_NUMBER_RE:oe,COMMENT:ue,C_BLOCK_COMMENT_MODE:D,C_LINE_COMMENT_MODE:E,C_NUMBER_MODE:{scope:`number`,begin:ae,relevance:0},C_NUMBER_RE:ae,END_SAME_AS_BEGIN:function(e){return Object.assign(e,{"on:begin":(e,t)=>{t.data._beginMatch=e[1]},"on:end":(e,t)=>{t.data._beginMatch!==e[1]&&t.ignoreMatch()}})},HASH_COMMENT_MODE:de,IDENT_RE:re,MATCH_NOTHING_RE:ne,METHOD_GUARD:{begin:`\\.\\s*[a-zA-Z_]\\w*`,relevance:0},NUMBER_MODE:{scope:`number`,begin:S,relevance:0},NUMBER_RE:S,PHRASAL_WORDS_MODE:le,QUOTE_STRING_MODE:T,REGEXP_MODE:{scope:`regexp`,begin:/\/(?=[^/\n]*\/)/,end:/\/[gimuy]*/,contains:[w,{begin:/\[/,end:/\]/,relevance:0,contains:[w]}]},RE_STARTERS_RE:C,SHEBANG:se,TITLE_MODE:{scope:`title`,begin:re,relevance:0},UNDERSCORE_IDENT_RE:ie,UNDERSCORE_TITLE_MODE:{scope:`title`,begin:ie,relevance:0}});function k(e,t){e.input[e.index-1]===`.`&&t.ignoreMatch()}function A(e,t){e.className!==void 0&&(e.scope=e.className,delete e.className)}function fe(e,t){t&&e.beginKeywords&&(e.begin=`\\b(`+e.beginKeywords.split(` `).join(`|`)+`)(?!\\.)(?=\\b|\\s)`,e.__beforeBegin=k,e.keywords=e.keywords||e.beginKeywords,delete e.beginKeywords,e.relevance===void 0&&(e.relevance=0))}function j(e,t){Array.isArray(e.illegal)&&(e.illegal=y(...e.illegal))}function pe(e,t){if(e.match){if(e.begin||e.end)throw Error(`begin & end are not supported with match`);e.begin=e.match,delete e.match}}function me(e,t){e.relevance===void 0&&(e.relevance=1)}var he=(e,t)=>{if(!e.beforeMatch)return;if(e.starts)throw Error(`beforeMatch cannot be used with starts`);let n=Object.assign({},e);Object.keys(e).forEach(t=>{delete e[t]}),e.keywords=n.keywords,e.begin=_(n.beforeMatch,m(n.begin)),e.starts={relevance:0,contains:[Object.assign(n,{endsParent:!0})]},e.relevance=0,delete n.beforeMatch},ge=[`of`,`and`,`for`,`in`,`not`,`or`,`if`,`then`,`parent`,`list`,`value`],_e=`keyword`;function M(e,t,n=_e){let r=Object.create(null);return typeof e==`string`?i(n,e.split(` `)):Array.isArray(e)?i(n,e):Object.keys(e).forEach(function(n){Object.assign(r,M(e[n],t,n))}),r;function i(e,n){t&&(n=n.map(e=>e.toLowerCase())),n.forEach(function(t){let n=t.split(`|`);r[n[0]]=[e,ve(n[0],n[1])]})}}function ve(e,t){return t?Number(t):+!ye(e)}function ye(e){return ge.includes(e.toLowerCase())}var N={},be=e=>{console.error(e)},xe=(e,...t)=>{console.log(`WARN: ${e}`,...t)},Se=(e,t)=>{N[`${e}/${t}`]||(console.log(`Deprecated as of ${e}. ${t}`),N[`${e}/${t}`]=!0)},Ce=Error();function we(e,t,{key:n}){let r=0,i=e[n],a={},o={};for(let e=1;e<=t.length;e++)o[e+r]=i[e],a[e+r]=!0,r+=b(t[e-1]);e[n]=o,e[n]._emit=a,e[n]._multi=!0}function Te(e){if(Array.isArray(e.begin)){if(e.skip||e.excludeBegin||e.returnBegin)throw be(`skip, excludeBegin, returnBegin not compatible with beginScope: {}`),Ce;if(typeof e.beginScope!=`object`||e.beginScope===null)throw be(`beginScope must be object`),Ce;we(e,e.begin,{key:`beginScope`}),e.begin=te(e.begin,{joinWith:``})}}function Ee(e){if(Array.isArray(e.end)){if(e.skip||e.excludeEnd||e.returnEnd)throw be(`skip, excludeEnd, returnEnd not compatible with endScope: {}`),Ce;if(typeof e.endScope!=`object`||e.endScope===null)throw be(`endScope must be object`),Ce;we(e,e.end,{key:`endScope`}),e.end=te(e.end,{joinWith:``})}}function De(e){e.scope&&typeof e.scope==`object`&&e.scope!==null&&(e.beginScope=e.scope,delete e.scope)}function Oe(e){De(e),typeof e.beginScope==`string`&&(e.beginScope={_wrap:e.beginScope}),typeof e.endScope==`string`&&(e.endScope={_wrap:e.endScope}),Te(e),Ee(e)}function ke(e){function t(t,n){return new RegExp(p(t),`m`+(e.case_insensitive?`i`:``)+(e.unicodeRegex?`u`:``)+(n?`g`:``))}class n{constructor(){this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}addRule(e,t){t.position=this.position++,this.matchIndexes[this.matchAt]=t,this.regexes.push([t,e]),this.matchAt+=b(e)+1}compile(){this.regexes.length===0&&(this.exec=()=>null);let e=this.regexes.map(e=>e[1]);this.matcherRe=t(te(e,{joinWith:`|`}),!0),this.lastIndex=0}exec(e){this.matcherRe.lastIndex=this.lastIndex;let t=this.matcherRe.exec(e);if(!t)return null;let n=t.findIndex((e,t)=>t>0&&e!==void 0),r=this.matchIndexes[n];return t.splice(0,n),Object.assign(t,r)}}class r{constructor(){this.rules=[],this.multiRegexes=[],this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(e){if(this.multiRegexes[e])return this.multiRegexes[e];let t=new n;return this.rules.slice(e).forEach(([e,n])=>t.addRule(e,n)),t.compile(),this.multiRegexes[e]=t,t}resumingScanAtSamePosition(){return this.regexIndex!==0}considerAll(){this.regexIndex=0}addRule(e,t){this.rules.push([e,t]),t.type===`begin`&&this.count++}exec(e){let t=this.getMatcher(this.regexIndex);t.lastIndex=this.lastIndex;let n=t.exec(e);if(this.resumingScanAtSamePosition()&&!(n&&n.index===this.lastIndex)){let t=this.getMatcher(0);t.lastIndex=this.lastIndex+1,n=t.exec(e)}return n&&(this.regexIndex+=n.position+1,this.regexIndex===this.count&&this.considerAll()),n}}function i(e){let t=new r;return e.contains.forEach(e=>t.addRule(e.begin,{rule:e,type:`begin`})),e.terminatorEnd&&t.addRule(e.terminatorEnd,{type:`end`}),e.illegal&&t.addRule(e.illegal,{type:`illegal`}),t}function o(n,r){let a=n;if(n.isCompiled)return a;[A,pe,Oe,he].forEach(e=>e(n,r)),e.compilerExtensions.forEach(e=>e(n,r)),n.__beforeBegin=null,[fe,j,me].forEach(e=>e(n,r)),n.isCompiled=!0;let s=null;return typeof n.keywords==`object`&&n.keywords.$pattern&&(n.keywords=Object.assign({},n.keywords),s=n.keywords.$pattern,delete n.keywords.$pattern),s=s||/\w+/,n.keywords&&(n.keywords=M(n.keywords,e.case_insensitive)),a.keywordPatternRe=t(s,!0),r&&(n.begin||(n.begin=/\B|\b/),a.beginRe=t(a.begin),!n.end&&!n.endsWithParent&&(n.end=/\B|\b/),n.end&&(a.endRe=t(a.end)),a.terminatorEnd=p(a.end)||``,n.endsWithParent&&r.terminatorEnd&&(a.terminatorEnd+=(n.end?`|`:``)+r.terminatorEnd)),n.illegal&&(a.illegalRe=t(n.illegal)),n.contains||(n.contains=[]),n.contains=[].concat(...n.contains.map(function(e){return P(e===`self`?n:e)})),n.contains.forEach(function(e){o(e,a)}),n.starts&&o(n.starts,r),a.matcher=i(a),a}if(e.compilerExtensions||(e.compilerExtensions=[]),e.contains&&e.contains.includes(`self`))throw Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.");return e.classNameAliases=a(e.classNameAliases||{}),o(e)}function Ae(e){return e?e.endsWithParent||Ae(e.starts):!1}function P(e){return e.variants&&!e.cachedVariants&&(e.cachedVariants=e.variants.map(function(t){return a(e,{variants:null},t)})),e.cachedVariants?e.cachedVariants:Ae(e)?a(e,{starts:e.starts?a(e.starts):null}):Object.isFrozen(e)?a(e):e}var F=`11.12.0`,je=class extends Error{constructor(e,t){super(e),this.name=`HTMLInjectionError`,this.html=t}},Me=i,Ne=a,Pe=Symbol(`nomatch`),Fe=7,Ie=function(e){let t=Object.create(null),i=Object.create(null),a=[],o=!0,s=`Could not find the language '{}', did you forget to load/include a language module?`,c={disableAutodetect:!0,name:`Plain text`,contains:[]},l={ignoreUnescapedHTML:!1,throwUnescapedHTML:!1,noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:`hljs-`,cssSelector:`pre code`,languages:null,__emitter:f};function u(e){return l.noHighlightRe.test(e)}function d(e){let t=e.className+` `;t+=e.parentNode?e.parentNode.className:``;let n=l.languageDetectRe.exec(t);if(n){let t=ce(n[1]);return t||(xe(s.replace(`{}`,n[1])),xe(`Falling back to no-highlight mode for this block.`,e)),t?n[1]:`no-highlight`}return t.split(/\s+/).find(e=>u(e)||ce(e))}function p(e,t,n){let r=``,i=``;typeof t==`object`?(r=e,n=t.ignoreIllegals,i=t.language):(Se(`10.7.0`,`highlight(lang, code, ...args) has been deprecated.`),Se(`10.7.0`,`Please use highlight(code, options) instead.
70
+ https://github.com/highlightjs/highlight.js/issues/2277`),i=e,r=t),n===void 0&&(n=!0);let a={code:r,language:i};de(`before:highlight`,a);let o=a.result?a.result:v(a.language,a.code,n);return o.code=a.code,de(`after:highlight`,o),o}function v(e,n,i,a){let c=Object.create(null);function u(e,t){return e.keywords[t]}function d(){if(!C.keywords){w.addText(T);return}let e=0;C.keywordPatternRe.lastIndex=0;let t=C.keywordPatternRe.exec(T),n=``;for(;t;){n+=T.substring(e,t.index);let r=S.case_insensitive?t[0].toLowerCase():t[0],i=u(C,r);if(i){let[e,a]=i;if(w.addText(n),n=``,c[r]=(c[r]||0)+1,c[r]<=Fe&&(le+=a),e.startsWith(`_`))n+=t[0];else{let n=S.classNameAliases[e]||e;m(t[0],n)}}else n+=t[0];e=C.keywordPatternRe.lastIndex,t=C.keywordPatternRe.exec(T)}n+=T.substring(e),w.addText(n)}function f(){if(T===``)return;let e=null;if(typeof C.subLanguage==`string`){if(!t[C.subLanguage]){w.addText(T);return}e=v(C.subLanguage,T,!0,se[C.subLanguage]),se[C.subLanguage]=e._top}else e=ee(T,C.subLanguage.length?C.subLanguage:null);C.relevance>0&&(le+=e.relevance),w.__addSublanguage(e._emitter,e.language)}function p(){C.subLanguage==null?d():f(),T=``}function m(e,t){e!==``&&(w.startScope(t),w.addText(e),w.endScope())}function h(e,t){let n=1,r=t.length-1;for(;n<=r;){if(!e._emit[n]){n++;continue}let r=S.classNameAliases[e[n]]||e[n],i=t[n];r?m(i,r):(T=i,d(),T=``),n++}}function g(e,t){return e.scope&&typeof e.scope==`string`&&w.openNode(S.classNameAliases[e.scope]||e.scope),e.beginScope&&(e.beginScope._wrap?(m(T,S.classNameAliases[e.beginScope._wrap]||e.beginScope._wrap),T=``):e.beginScope._multi&&(h(e.beginScope,t),T=``)),C=Object.create(e,{parent:{value:C}}),C}function _(e,t,n){let i=x(e.endRe,n);if(i){if(e[`on:end`]){let n=new r(e);e[`on:end`](t,n),n.isMatchIgnored&&(i=!1)}if(i){for(;e.endsParent&&e.parent;)e=e.parent;return e}}if(e.endsWithParent)return _(e.parent,t,n)}function y(e){return C.matcher.regexIndex===0?(T+=e[0],1):(D=!0,0)}function b(e){let t=e[0],n=e.rule,i=new r(n),a=[n.__beforeBegin,n[`on:begin`]];for(let n of a)if(n&&(n(e,i),i.isMatchIgnored))return y(t);return n.skip?T+=t:(n.excludeBegin&&(T+=t),p(),!n.returnBegin&&!n.excludeBegin&&(T=t)),g(n,e),n.returnBegin?0:t.length}function te(e){let t=e[0],r=n.substring(e.index),i=_(C,e,r);if(!i)return Pe;let a=C;C.endScope&&C.endScope._wrap?(p(),m(t,C.endScope._wrap)):C.endScope&&C.endScope._multi?(p(),h(C.endScope,e)):a.skip?T+=t:(a.returnEnd||a.excludeEnd||(T+=t),p(),a.excludeEnd&&(T=t));do C.scope&&w.closeNode(),!C.skip&&!C.subLanguage&&(le+=C.relevance),C=C.parent;while(C!==i.parent);return i.starts&&g(i.starts,e),a.returnEnd?0:t.length}function ne(){let e=[];for(let t=C;t!==S;t=t.parent)t.scope&&e.unshift(t.scope);e.forEach(e=>w.openNode(e))}let re={};function ie(t,r){let a=r&&r[0];if(T+=t,a==null)return p(),0;if(re.type===`begin`&&r.type===`end`&&re.index===r.index&&a===``){if(T+=n.slice(r.index,r.index+1),!o){let t=Error(`0 width match regex (${e})`);throw t.languageName=e,t.badRule=re.rule,t}return 1}if(re=r,r.type===`begin`)return b(r);if(r.type===`illegal`&&!i){let e=Error(`Illegal lexeme "`+a+`" for mode "`+(C.scope||`<unnamed>`)+`"`);throw e.mode=C,e}if(r.type===`end`){let e=te(r);if(e!==Pe)return e}if(r.type===`illegal`&&a===``)return r.index===n.length||(T+=`
71
+ `),1;if(E>1e5&&E>r.index*3)throw Error(`potential infinite loop, way more iterations than matches`);return T+=a,a.length}let S=ce(e);if(!S)throw be(s.replace(`{}`,e)),Error(`Unknown language: "`+e+`"`);let ae=ke(S),oe=``,C=a||ae,se={},w=new l.__emitter(l);ne();let T=``,le=0,ue=0,E=0,D=!1;try{if(S.__emitTokens)S.__emitTokens(n,w);else{for(C.matcher.considerAll();;){E++,D?D=!1:C.matcher.considerAll(),C.matcher.lastIndex=ue;let e=C.matcher.exec(n);if(!e)break;let t=ie(n.substring(ue,e.index),e);ue=e.index+t}ie(n.substring(ue))}return w.finalize(),oe=w.toHTML(),{language:e,value:oe,relevance:le,illegal:!1,_emitter:w,_top:C}}catch(t){if(t.message&&t.message.includes(`Illegal`))return{language:e,value:Me(n),illegal:!0,relevance:0,_illegalBy:{message:t.message,index:ue,context:n.slice(ue-100,ue+100),mode:t.mode,resultSoFar:oe},_emitter:w};if(o)return{language:e,value:Me(n),illegal:!1,relevance:0,errorRaised:t,_emitter:w,_top:C};throw t}}function b(e){let t={value:Me(e),illegal:!1,relevance:0,_top:c,_emitter:new l.__emitter(l)};return t._emitter.addText(e),t}function ee(e,n){n=n||l.languages||Object.keys(t);let r=b(e),i=n.filter(ce).filter(le).map(t=>v(t,e,!1));i.unshift(r);let[a,o]=i.sort((e,t)=>{if(e.relevance!==t.relevance)return t.relevance-e.relevance;if(e.language&&t.language){if(ce(e.language).supersetOf===t.language)return 1;if(ce(t.language).supersetOf===e.language)return-1}return 0}),s=a;return s.secondBest=o,s}function te(e,t,n){let r=t&&i[t]||n;e.classList.add(`hljs`),e.classList.add(`language-${r}`)}function ne(e){let t=null,n=d(e);if(u(n))return;if(de(`before:highlightElement`,{el:e,language:n}),e.dataset.highlighted){console.log("Element previously highlighted. To highlight again, first unset `dataset.highlighted`.",e);return}if(e.children.length>0&&(l.ignoreUnescapedHTML||(console.warn(`One of your code blocks includes unescaped HTML. This is a potentially serious security risk.`),console.warn(`https://github.com/highlightjs/highlight.js/wiki/security`),console.warn(`The element with unescaped HTML:`),console.warn(e)),l.throwUnescapedHTML))throw new je(`One of your code blocks includes unescaped HTML.`,e.innerHTML);t=e;let r=t.textContent,i=n?p(r,{language:n,ignoreIllegals:!0}):ee(r);e.innerHTML=i.value,e.dataset.highlighted=`yes`,te(e,n,i.language),e.result={language:i.language,re:i.relevance,relevance:i.relevance},i.secondBest&&(e.secondBest={language:i.secondBest.language,relevance:i.secondBest.relevance}),de(`after:highlightElement`,{el:e,result:i,text:r})}function re(e){l=Ne(l,e)}let ie=()=>{oe(),Se(`10.6.0`,`initHighlighting() deprecated. Use highlightAll() now.`)};function S(){oe(),Se(`10.6.0`,`initHighlightingOnLoad() deprecated. Use highlightAll() now.`)}let ae=!1;function oe(){function e(){oe()}if(document.readyState===`loading`){ae||window.addEventListener(`DOMContentLoaded`,e,!1),ae=!0;return}document.querySelectorAll(l.cssSelector).forEach(ne)}function C(n,r){let i=null;try{i=r(e)}catch(e){if(be(`Language definition for '{}' could not be registered.`.replace(`{}`,n)),o)be(e);else throw e;i=c}i.name||(i.name=n),t[n]=i,i.rawDefinition=r.bind(null,e),i.aliases&&T(i.aliases,{languageName:n})}function se(e){delete t[e];for(let t of Object.keys(i))i[t]===e&&delete i[t]}function w(){return Object.keys(t)}function ce(e){return e=(e||``).toLowerCase(),t[e]||t[i[e]]}function T(e,{languageName:t}){typeof e==`string`&&(e=[e]),e.forEach(e=>{i[e.toLowerCase()]=t})}function le(e){let t=ce(e);return t&&!t.disableAutodetect}function ue(e){e[`before:highlightBlock`]&&!e[`before:highlightElement`]&&(e[`before:highlightElement`]=t=>{e[`before:highlightBlock`](Object.assign({block:t.el},t))}),e[`after:highlightBlock`]&&!e[`after:highlightElement`]&&(e[`after:highlightElement`]=t=>{e[`after:highlightBlock`](Object.assign({block:t.el},t))})}function E(e){ue(e),a.push(e)}function D(e){let t=a.indexOf(e);t!==-1&&a.splice(t,1)}function de(e,t){let n=e;a.forEach(function(e){e[n]&&e[n](t)})}function k(e){return Se(`10.7.0`,`highlightBlock will be removed entirely in v12.0`),Se(`10.7.0`,`Please use highlightElement now.`),ne(e)}Object.assign(e,{highlight:p,highlightAuto:ee,highlightAll:oe,highlightElement:ne,highlightBlock:k,configure:re,initHighlighting:ie,initHighlightingOnLoad:S,registerLanguage:C,unregisterLanguage:se,listLanguages:w,getLanguage:ce,registerAliases:T,autoDetection:le,inherit:Ne,addPlugin:E,removePlugin:D}),e.debugMode=function(){o=!1},e.safeMode=function(){o=!0},e.versionString=F,e.regex={concat:_,lookahead:m,either:y,optional:g,anyNumberOfTimes:h};for(let e in O)typeof O[e]==`object`&&n(O[e]);return Object.assign(e,O),e},Le=Ie({});Le.newInstance=()=>Ie({}),t.exports=Le,Le.HighlightJS=Le,Le.default=Le}))()).default;function hl(e){let t=e.regex,n={},r={begin:/\$\{/,end:/\}/,contains:[`self`,{begin:/:-/,contains:[n]}]};Object.assign(n,{className:`variable`,variants:[{begin:t.concat(/\$[\w\d#@][\w\d_]*/,`(?![\\w\\d])(?![$])`)},r]});let i={className:`subst`,begin:/\$\(/,end:/\)/,contains:[e.BACKSLASH_ESCAPE]},a=e.inherit(e.COMMENT(),{match:[/(^|\s)/,/#.*$/],scope:{2:`comment`}}),o={begin:/<<-?\s*(?=\w+)/,starts:{contains:[e.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,className:`string`})]}},s={className:`string`,begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,n,i]};i.contains.push(s);let c={match:/\\"/},l={className:`string`,begin:/'/,end:/'/},u={match:/\\'/},d={begin:/\$?\(\(/,end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:`number`},e.NUMBER_MODE,n]},f=e.SHEBANG({binary:`(${[`fish`,`bash`,`zsh`,`sh`,`csh`,`ksh`,`tcsh`,`dash`,`scsh`].join(`|`)})`,relevance:10}),p={className:`function`,begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0},m=[`if`,`then`,`else`,`elif`,`fi`,`time`,`for`,`while`,`until`,`in`,`do`,`done`,`case`,`esac`,`coproc`,`function`,`select`],h=[`true`,`false`],g={match:/(\/[a-z._-]+)+/},_=[`break`,`cd`,`continue`,`eval`,`exec`,`exit`,`export`,`getopts`,`hash`,`pwd`,`readonly`,`return`,`shift`,`test`,`times`,`trap`,`umask`,`unset`],v=[`alias`,`bind`,`builtin`,`caller`,`command`,`declare`,`echo`,`enable`,`help`,`let`,`local`,`logout`,`mapfile`,`printf`,`read`,`readarray`,`source`,`sudo`,`type`,`typeset`,`ulimit`,`unalias`],y=`autoload.bg.bindkey.bye.cap.chdir.clone.comparguments.compcall.compctl.compdescribe.compfiles.compgroups.compquote.comptags.comptry.compvalues.dirs.disable.disown.echotc.echoti.emulate.fc.fg.float.functions.getcap.getln.history.integer.jobs.kill.limit.log.noglob.popd.print.pushd.pushln.rehash.sched.setcap.setopt.stat.suspend.ttyctl.unfunction.unhash.unlimit.unsetopt.vared.wait.whence.where.which.zcompile.zformat.zftp.zle.zmodload.zparseopts.zprof.zpty.zregexparse.zsocket.zstyle.ztcp`.split(`.`),b=`chcon.chgrp.chown.chmod.cp.dd.df.dir.dircolors.ln.ls.mkdir.mkfifo.mknod.mktemp.mv.realpath.rm.rmdir.shred.sync.touch.truncate.vdir.b2sum.base32.base64.cat.cksum.comm.csplit.cut.expand.fmt.fold.head.join.md5sum.nl.numfmt.od.paste.ptx.pr.sha1sum.sha224sum.sha256sum.sha384sum.sha512sum.shuf.sort.split.sum.tac.tail.tr.tsort.unexpand.uniq.wc.arch.basename.chroot.date.dirname.du.echo.env.expr.factor.groups.hostid.id.link.logname.nice.nohup.nproc.pathchk.pinky.printenv.printf.pwd.readlink.runcon.seq.sleep.stat.stdbuf.stty.tee.test.timeout.tty.uname.unlink.uptime.users.who.whoami.yes`.split(`.`);return{name:`Bash`,aliases:[`sh`,`zsh`],keywords:{$pattern:/\b[a-z][a-z0-9._-]+\b/,keyword:m,literal:h,built_in:[..._,...v,`set`,`shopt`,...y,...b]},contains:[f,e.SHEBANG(),p,d,a,o,g,s,c,l,u,n]}}function gl(e){let t=e.regex,n=e.COMMENT(`//`,`$`,{contains:[{begin:/\\\n/}]}),r=`[a-zA-Z_]\\w*::`,i=`(?!struct)(decltype\\(auto\\)|`+t.optional(r)+`[a-zA-Z_]\\w*`+t.optional(`<[^<>]+>`)+`)`,a={className:`type`,begin:`\\b[a-z\\d_]*_t\\b`},o={className:`string`,variants:[{begin:`(u8?|U|L)?"`,end:`"`,illegal:`\\n`,contains:[e.BACKSLASH_ESCAPE]},{begin:`(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)`,end:`'`,illegal:`.`},e.END_SAME_AS_BEGIN({begin:/(?:u8?|U|L)?R"([^()\\\s"]{0,16})\(/,end:/\)([^()\\\s"]{0,16})"/})]},s={className:`number`,variants:[{begin:`[+-]?(?:(?:\\b[0-9](?:'?[0-9])*\\.(?:[0-9](?:'?[0-9])*)?|\\.[0-9](?:'?[0-9])*)(?:[Ee][+-]?[0-9](?:'?[0-9])*)?|\\b[0-9](?:'?[0-9])*[Ee][+-]?[0-9](?:'?[0-9])*|\\b0[Xx](?:[0-9A-Fa-f](?:'?[0-9A-Fa-f])*(?:\\.(?:[0-9A-Fa-f](?:'?[0-9A-Fa-f])*)?)?|\\.[0-9A-Fa-f](?:'?[0-9A-Fa-f])*)[Pp][+-]?[0-9](?:'?[0-9])*)(?:[Ff](?:16|32|64|128)?|(BF|bf)16|[Ll]|)`},{begin:`[+-]?\\b(?:0[Bb][01](?:'?[01])*|0[Xx][0-9A-Fa-f](?:'?[0-9A-Fa-f])*|0(?:'?[0-7])*|[1-9](?:'?[0-9])*)(?:[Uu](?:LL?|ll?)|[Uu][Zz]?|(?:LL?|ll?)[Uu]?|[Zz][Uu]|)`}],relevance:0},c=[{scope:`meta`,begin:/#\s*include\b/,end:/$/,keywords:{keyword:`include`},contains:[{begin:/\\\n/},o,{scope:`string`,begin:/<.*?>/},n,e.C_BLOCK_COMMENT_MODE]},{className:`meta`,begin:/#\s*[a-z]+\b/,end:/$/,keywords:{keyword:`if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include`},contains:[{begin:/\\\n/,relevance:0},e.inherit(o,{className:`string`}),n,e.C_BLOCK_COMMENT_MODE]}],l={className:`title`,begin:t.optional(r)+e.IDENT_RE,relevance:0},u=t.optional(r)+e.IDENT_RE+`\\s*\\(`,d=`alignas.alignof.and.and_eq.asm.atomic_cancel.atomic_commit.atomic_noexcept.auto.bitand.bitor.break.case.catch.class.co_await.co_return.co_yield.compl.concept.const_cast|10.consteval.constexpr.constinit.continue.decltype.default.delete.do.dynamic_cast|10.else.enum.explicit.export.extern.false.final.for.friend.goto.if.import.inline.module.mutable.namespace.new.noexcept.not.not_eq.nullptr.operator.or.or_eq.override.private.protected.public.reflexpr.register.reinterpret_cast|10.requires.return.sizeof.static_assert.static_cast|10.struct.switch.synchronized.template.this.thread_local.throw.transaction_safe.transaction_safe_dynamic.true.try.typedef.typeid.typename.union.using.virtual.volatile.while.xor.xor_eq`.split(`.`),f=[`bool`,`char`,`char16_t`,`char32_t`,`char8_t`,`double`,`float`,`int`,`long`,`short`,`void`,`wchar_t`,`unsigned`,`signed`,`const`,`static`],p=`any.auto_ptr.barrier.binary_semaphore.bitset.complex.condition_variable.condition_variable_any.counting_semaphore.deque.false_type.flat_map.flat_set.future.imaginary.initializer_list.istringstream.jthread.latch.lock_guard.multimap.multiset.mutex.optional.ostringstream.packaged_task.pair.promise.priority_queue.queue.recursive_mutex.recursive_timed_mutex.scoped_lock.set.shared_future.shared_lock.shared_mutex.shared_timed_mutex.shared_ptr.stack.string_view.stringstream.timed_mutex.thread.true_type.tuple.unique_lock.unique_ptr.unordered_map.unordered_multimap.unordered_multiset.unordered_set.variant.vector.weak_ptr.wstring.wstring_view`.split(`.`),m=`abort.abs.acos.apply.as_const.asin.atan.atan2.calloc.ceil.cerr.cin.clog.cos.cosh.cout.declval.endl.exchange.exit.exp.fabs.floor.fmod.forward.fprintf.fputs.free.frexp.fscanf.future.invoke.isalnum.isalpha.iscntrl.isdigit.isgraph.islower.isprint.ispunct.isspace.isupper.isxdigit.labs.launder.ldexp.log.log10.make_pair.make_shared.make_shared_for_overwrite.make_tuple.make_unique.malloc.memchr.memcmp.memcpy.memset.modf.move.pow.printf.putchar.puts.realloc.scanf.sin.sinh.snprintf.sprintf.sqrt.sscanf.std.stderr.stdin.stdout.strcat.strchr.strcmp.strcpy.strcspn.strlen.strncat.strncmp.strncpy.strpbrk.strrchr.strspn.strstr.swap.tan.tanh.terminate.to_underlying.tolower.toupper.vfprintf.visit.vprintf.vsprintf`.split(`.`),h={type:f,keyword:d,literal:[`NULL`,`false`,`nullopt`,`nullptr`,`true`],built_in:[`_Pragma`],_type_hints:p},g={className:`function.dispatch`,relevance:0,keywords:{_hint:m},begin:t.concat(/\b/,`(?!${d.join(`|`)})`,e.IDENT_RE,t.lookahead(/(<[^<>]+>|)\s*\(/))},_=[g,...c,a,n,e.C_BLOCK_COMMENT_MODE,s,o],v={variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{beginKeywords:`new throw return else`,end:/;/}],keywords:h,contains:_.concat([{begin:/\(/,end:/\)/,keywords:h,contains:_.concat([`self`]),relevance:0}]),relevance:0},y={className:`function`,begin:`(`+i+`[\\*&\\s]+){1,12}`+u,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:h,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:`decltype\\(auto\\)`,keywords:h,relevance:0},{begin:u,returnBegin:!0,contains:[l],relevance:0},{begin:/::/,relevance:0},{begin:/:/,endsWithParent:!0,contains:[o,s]},{relevance:0,match:/,/},{className:`params`,begin:/\(/,end:/\)/,keywords:h,relevance:0,contains:[n,e.C_BLOCK_COMMENT_MODE,o,s,a,{begin:/\(/,end:/\)/,keywords:h,relevance:0,contains:[`self`,n,e.C_BLOCK_COMMENT_MODE,o,s,a]}]},a,n,e.C_BLOCK_COMMENT_MODE,...c]};return{name:`C++`,aliases:[`cc`,`c++`,`h++`,`hpp`,`hh`,`hxx`,`cxx`],keywords:h,illegal:`</`,classNameAliases:{"function.dispatch":`built_in`},contains:[].concat(v,y,g,_,[...c,{begin:`\\b(deque|list|queue|priority_queue|pair|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array|tuple|optional|variant|function|flat_map|flat_set)\\s*<(?!<)`,end:`>`,keywords:h,contains:[`self`,a]},{begin:e.IDENT_RE+`::`,keywords:h},{match:[/\b(?:enum(?:\s+(?:class|struct))?|class|struct|union)/,/\s+/,/\w+/],className:{1:`keyword`,3:`title.class`}}])}}var _l=e=>({IMPORTANT:{scope:`meta`,begin:`!important`},BLOCK_COMMENT:e.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:`number`,begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/},UNICODE_RANGE:{scope:`number`,begin:/\b[Uu]\+[0-9A-Fa-f][0-9A-Fa-f?]{0,5}(-[0-9A-Fa-f][0-9A-Fa-f]{0,5})?/},FUNCTION_DISPATCH:{className:`built_in`,begin:/[\w-]+(?=\()/},ATTRIBUTE_SELECTOR_MODE:{scope:`selector-attr`,begin:/\[/,end:/\]/,illegal:`$`,contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{scope:`number`,begin:e.NUMBER_RE+`(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?`,relevance:0},CSS_VARIABLE:{className:`attr`,begin:/--[A-Za-z_][A-Za-z0-9_-]*/}}),vl=`a.abbr.address.article.aside.audio.b.blockquote.body.button.canvas.caption.cite.code.dd.del.details.dfn.div.dl.dt.em.fieldset.figcaption.figure.footer.form.h1.h2.h3.h4.h5.h6.header.hgroup.html.i.iframe.img.input.ins.kbd.label.legend.li.main.mark.menu.nav.object.ol.optgroup.option.p.picture.q.quote.samp.section.select.source.span.strong.summary.sup.table.tbody.td.textarea.tfoot.th.thead.time.tr.ul.var.video`.split(`.`),yl=`defs.g.marker.mask.pattern.svg.switch.symbol.feBlend.feColorMatrix.feComponentTransfer.feComposite.feConvolveMatrix.feDiffuseLighting.feDisplacementMap.feFlood.feGaussianBlur.feImage.feMerge.feMorphology.feOffset.feSpecularLighting.feTile.feTurbulence.linearGradient.radialGradient.stop.circle.ellipse.image.line.path.polygon.polyline.rect.text.use.textPath.tspan.foreignObject.clipPath`.split(`.`),bl=[...vl,...yl],xl=`any-hover.any-pointer.aspect-ratio.color.color-gamut.color-index.device-aspect-ratio.device-height.device-width.display-mode.forced-colors.grid.height.hover.inverted-colors.monochrome.orientation.overflow-block.overflow-inline.pointer.prefers-color-scheme.prefers-contrast.prefers-reduced-motion.prefers-reduced-transparency.resolution.scan.scripting.update.width.min-width.max-width.min-height.max-height`.split(`.`).sort().reverse(),Sl=`active.any-link.blank.checked.current.default.defined.dir.disabled.drop.empty.enabled.first.first-child.first-of-type.fullscreen.future.focus.focus-visible.focus-within.has.host.host-context.hover.indeterminate.in-range.invalid.is.lang.last-child.last-of-type.left.link.local-link.not.nth-child.nth-col.nth-last-child.nth-last-col.nth-last-of-type.nth-of-type.only-child.only-of-type.optional.out-of-range.past.placeholder-shown.read-only.read-write.required.right.root.scope.target.target-within.user-invalid.valid.visited.where`.split(`.`).sort().reverse(),Cl=[`after`,`backdrop`,`before`,`cue`,`cue-region`,`first-letter`,`first-line`,`grammar-error`,`marker`,`part`,`placeholder`,`selection`,`slotted`,`spelling-error`].sort().reverse(),wl=`accent-color.align-content.align-items.align-self.alignment-baseline.all.anchor-name.animation.animation-composition.animation-delay.animation-direction.animation-duration.animation-fill-mode.animation-iteration-count.animation-name.animation-play-state.animation-range.animation-range-end.animation-range-start.animation-timeline.animation-timing-function.appearance.aspect-ratio.backdrop-filter.backface-visibility.background.background-attachment.background-blend-mode.background-clip.background-color.background-image.background-origin.background-position.background-position-x.background-position-y.background-repeat.background-size.baseline-shift.block-size.border.border-block.border-block-color.border-block-end.border-block-end-color.border-block-end-style.border-block-end-width.border-block-start.border-block-start-color.border-block-start-style.border-block-start-width.border-block-style.border-block-width.border-bottom.border-bottom-color.border-bottom-left-radius.border-bottom-right-radius.border-bottom-style.border-bottom-width.border-collapse.border-color.border-end-end-radius.border-end-start-radius.border-image.border-image-outset.border-image-repeat.border-image-slice.border-image-source.border-image-width.border-inline.border-inline-color.border-inline-end.border-inline-end-color.border-inline-end-style.border-inline-end-width.border-inline-start.border-inline-start-color.border-inline-start-style.border-inline-start-width.border-inline-style.border-inline-width.border-left.border-left-color.border-left-style.border-left-width.border-radius.border-right.border-right-color.border-right-style.border-right-width.border-spacing.border-start-end-radius.border-start-start-radius.border-style.border-top.border-top-color.border-top-left-radius.border-top-right-radius.border-top-style.border-top-width.border-width.bottom.box-align.box-decoration-break.box-direction.box-flex.box-flex-group.box-lines.box-ordinal-group.box-orient.box-pack.box-shadow.box-sizing.break-after.break-before.break-inside.caption-side.caret-color.clear.clip.clip-path.clip-rule.color.color-interpolation.color-interpolation-filters.color-profile.color-rendering.color-scheme.column-count.column-fill.column-gap.column-rule.column-rule-color.column-rule-style.column-rule-width.column-span.column-width.columns.contain.contain-intrinsic-block-size.contain-intrinsic-height.contain-intrinsic-inline-size.contain-intrinsic-size.contain-intrinsic-width.container.container-name.container-type.content.content-visibility.corner-bottom-left-shape.corner-bottom-right-shape.corner-shape.corner-top-left-shape.corner-top-right-shape.counter-increment.counter-reset.counter-set.cue.cue-after.cue-before.cursor.cx.cy.direction.display.dominant-baseline.empty-cells.enable-background.field-sizing.fill.fill-opacity.fill-rule.filter.flex.flex-basis.flex-direction.flex-flow.flex-grow.flex-shrink.flex-wrap.float.flood-color.flood-opacity.flow.font.font-display.font-family.font-feature-settings.font-kerning.font-language-override.font-optical-sizing.font-palette.font-size.font-size-adjust.font-smooth.font-smoothing.font-stretch.font-style.font-synthesis.font-synthesis-position.font-synthesis-small-caps.font-synthesis-style.font-synthesis-weight.font-variant.font-variant-alternates.font-variant-caps.font-variant-east-asian.font-variant-emoji.font-variant-ligatures.font-variant-numeric.font-variant-position.font-variation-settings.font-weight.forced-color-adjust.gap.glyph-orientation-horizontal.glyph-orientation-vertical.grid.grid-area.grid-auto-columns.grid-auto-flow.grid-auto-rows.grid-column.grid-column-end.grid-column-start.grid-gap.grid-row.grid-row-end.grid-row-start.grid-template.grid-template-areas.grid-template-columns.grid-template-rows.hanging-punctuation.height.hyphenate-character.hyphenate-limit-chars.hyphens.icon.image-orientation.image-rendering.image-resolution.ime-mode.initial-letter.initial-letter-align.inline-size.inset.inset-area.inset-block.inset-block-end.inset-block-start.inset-inline.inset-inline-end.inset-inline-start.isolation.justify-content.justify-items.justify-self.kerning.left.letter-spacing.lighting-color.line-break.line-height.line-height-step.list-style.list-style-image.list-style-position.list-style-type.margin.margin-block.margin-block-end.margin-block-start.margin-bottom.margin-inline.margin-inline-end.margin-inline-start.margin-left.margin-right.margin-top.margin-trim.marker.marker-end.marker-mid.marker-start.marks.mask.mask-border.mask-border-mode.mask-border-outset.mask-border-repeat.mask-border-slice.mask-border-source.mask-border-width.mask-clip.mask-composite.mask-image.mask-mode.mask-origin.mask-position.mask-repeat.mask-size.mask-type.masonry-auto-flow.math-depth.math-shift.math-style.max-block-size.max-height.max-inline-size.max-width.min-block-size.min-height.min-inline-size.min-width.mix-blend-mode.nav-down.nav-index.nav-left.nav-right.nav-up.none.normal.object-fit.object-position.offset.offset-anchor.offset-distance.offset-path.offset-position.offset-rotate.opacity.order.orphans.outline.outline-color.outline-offset.outline-style.outline-width.overflow.overflow-anchor.overflow-block.overflow-clip-margin.overflow-inline.overflow-wrap.overflow-x.overflow-y.overlay.overscroll-behavior.overscroll-behavior-block.overscroll-behavior-inline.overscroll-behavior-x.overscroll-behavior-y.padding.padding-block.padding-block-end.padding-block-start.padding-bottom.padding-inline.padding-inline-end.padding-inline-start.padding-left.padding-right.padding-top.page.page-break-after.page-break-before.page-break-inside.paint-order.pause.pause-after.pause-before.perspective.perspective-origin.place-content.place-items.place-self.pointer-events.position.position-anchor.position-visibility.print-color-adjust.quotes.r.resize.rest.rest-after.rest-before.right.rotate.row-gap.ruby-align.ruby-position.scale.scroll-behavior.scroll-margin.scroll-margin-block.scroll-margin-block-end.scroll-margin-block-start.scroll-margin-bottom.scroll-margin-inline.scroll-margin-inline-end.scroll-margin-inline-start.scroll-margin-left.scroll-margin-right.scroll-margin-top.scroll-padding.scroll-padding-block.scroll-padding-block-end.scroll-padding-block-start.scroll-padding-bottom.scroll-padding-inline.scroll-padding-inline-end.scroll-padding-inline-start.scroll-padding-left.scroll-padding-right.scroll-padding-top.scroll-snap-align.scroll-snap-stop.scroll-snap-type.scroll-timeline.scroll-timeline-axis.scroll-timeline-name.scrollbar-color.scrollbar-gutter.scrollbar-width.shape-image-threshold.shape-margin.shape-outside.shape-rendering.speak.speak-as.src.stop-color.stop-opacity.stroke.stroke-dasharray.stroke-dashoffset.stroke-linecap.stroke-linejoin.stroke-miterlimit.stroke-opacity.stroke-width.tab-size.table-layout.text-align.text-align-all.text-align-last.text-anchor.text-combine-upright.text-decoration.text-decoration-color.text-decoration-line.text-decoration-skip.text-decoration-skip-ink.text-decoration-style.text-decoration-thickness.text-emphasis.text-emphasis-color.text-emphasis-position.text-emphasis-style.text-indent.text-justify.text-orientation.text-overflow.text-rendering.text-shadow.text-size-adjust.text-transform.text-underline-offset.text-underline-position.text-wrap.text-wrap-mode.text-wrap-style.timeline-scope.top.touch-action.transform.transform-box.transform-origin.transform-style.transition.transition-behavior.transition-delay.transition-duration.transition-property.transition-timing-function.translate.unicode-bidi.unicode-range.user-modify.user-select.vector-effect.vertical-align.view-timeline.view-timeline-axis.view-timeline-inset.view-timeline-name.view-transition-name.visibility.voice-balance.voice-duration.voice-family.voice-pitch.voice-range.voice-rate.voice-stress.voice-volume.white-space.white-space-collapse.widows.width.will-change.word-break.word-spacing.word-wrap.writing-mode.x.y.z-index.zoom`.split(`.`).sort().reverse();function Tl(e){let t=e.regex,n=_l(e),r={begin:/-(webkit|moz|ms|o)-(?=[a-z])/},i=/@-?\w[\w]*(-\w+)*/,a=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE];return{name:`CSS`,case_insensitive:!0,illegal:/[=|'\$]/,keywords:{keyframePosition:`from to`},classNameAliases:{keyframePosition:`selector-tag`},contains:[n.BLOCK_COMMENT,r,n.CSS_NUMBER_MODE,{className:`selector-id`,begin:/#[A-Za-z0-9_-]+/,relevance:0},{className:`selector-class`,begin:`\\.[a-zA-Z-][a-zA-Z0-9_-]*`,relevance:0},n.ATTRIBUTE_SELECTOR_MODE,{className:`selector-pseudo`,variants:[{begin:`:(`+Sl.join(`|`)+`)`},{begin:`:(:)?(`+Cl.join(`|`)+`)`}]},n.CSS_VARIABLE,{className:`attribute`,begin:`\\b(`+wl.join(`|`)+`)\\b`},{begin:/:/,end:/[;}{]/,contains:[n.BLOCK_COMMENT,n.HEXCOLOR,n.IMPORTANT,n.CSS_NUMBER_MODE,n.UNICODE_RANGE,...a,{begin:/(url|data-uri)\(/,end:/\)/,relevance:0,keywords:{built_in:`url data-uri`},contains:[...a,{className:`string`,begin:/[^)]/,endsWithParent:!0,excludeEnd:!0}]},n.FUNCTION_DISPATCH]},{begin:t.lookahead(/@/),end:`[{;]`,relevance:0,illegal:/:/,contains:[{className:`keyword`,begin:i},{begin:/\s/,endsWithParent:!0,excludeEnd:!0,relevance:0,keywords:{$pattern:/[a-z-]+/,keyword:`and or not only`,attribute:xl.join(` `)},contains:[{begin:/[a-z-]+(?=:)/,className:`attribute`},...a,n.CSS_NUMBER_MODE]}]},{className:`selector-tag`,begin:`\\b(`+bl.join(`|`)+`)\\b`}]}}function El(e){let t={keyword:[`break`,`case`,`chan`,`const`,`continue`,`default`,`defer`,`else`,`fallthrough`,`for`,`func`,`go`,`goto`,`if`,`import`,`interface`,`map`,`package`,`range`,`return`,`select`,`struct`,`switch`,`type`,`var`],type:[`bool`,`byte`,`complex64`,`complex128`,`error`,`float32`,`float64`,`int8`,`int16`,`int32`,`int64`,`string`,`uint8`,`uint16`,`uint32`,`uint64`,`int`,`uint`,`uintptr`,`rune`],literal:[`true`,`false`,`iota`,`nil`],built_in:[`append`,`cap`,`close`,`complex`,`copy`,`imag`,`len`,`make`,`new`,`panic`,`print`,`println`,`real`,`recover`,`delete`]};return{name:`Go`,aliases:[`golang`],keywords:t,illegal:`</`,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:`string`,variants:[e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,{begin:"`",end:"`"}]},{className:`number`,variants:[{match:/-?\b0[xX]\.[a-fA-F0-9](_?[a-fA-F0-9])*[pP][+-]?\d(_?\d)*i?/,relevance:0},{match:/-?\b0[xX](_?[a-fA-F0-9])+((\.([a-fA-F0-9](_?[a-fA-F0-9])*)?)?[pP][+-]?\d(_?\d)*)?i?/,relevance:0},{match:/-?\b0[oO](_?[0-7])*i?/,relevance:0},{match:/-?\b0[bB](_?[01])*i?/,relevance:0},{match:/-?\.\d(_?\d)*([eE][+-]?\d(_?\d)*)?i?/,relevance:0},{match:/-?\b\d(_?\d)*(\.(\d(_?\d)*)?)?([eE][+-]?\d(_?\d)*)?i?/,relevance:0}]},{begin:/:=/},{className:`function`,beginKeywords:`func`,end:`\\s*(\\{|$)`,excludeEnd:!0,contains:[e.TITLE_MODE,{className:`params`,begin:/\(/,end:/\)/,endsParent:!0,keywords:t,illegal:/["']/}]}]}}var Dl=`[0-9](_*[0-9])*`,Ol=`\\.(${Dl})`,kl=`[0-9a-fA-F](_*[0-9a-fA-F])*`,Al={className:`number`,variants:[{begin:`(\\b(${Dl})((${Ol})|\\.)?|(${Ol}))[eE][+-]?(${Dl})[fFdD]?\\b`},{begin:`\\b(${Dl})((${Ol})[fFdD]?\\b|\\.([fFdD]\\b)?)`},{begin:`(${Ol})[fFdD]?\\b`},{begin:`\\b(${Dl})[fFdD]\\b`},{begin:`\\b0[xX]((${kl})\\.?|(${kl})?\\.(${kl}))[pP][+-]?(${Dl})[fFdD]?\\b`},{begin:`\\b(0|[1-9](_*[0-9])*)[lL]?\\b`},{begin:`\\b0[xX](${kl})[lL]?\\b`},{begin:`\\b0(_*[0-7])*[lL]?\\b`},{begin:`\\b0[bB][01](_*[01])*[lL]?\\b`}],relevance:0};function jl(e,t,n){return n===-1?``:e.replace(t,r=>jl(e,t,n-1))}function Ml(e){let t=e.regex,n=`[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*`,r=`(?:(?:\\s*\\[\\s*])+)?`,i=`(?:\\?(?:\\s+(?:extends|super)\\s+[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*<@@@>(?:(?:\\s*\\[\\s*])+)?)?|[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*<@@@>(?:(?:\\s*\\[\\s*])+)?)`,a=jl(`(?:\\s*<\\s*`+i+`(?:\\s*,\\s*`+i+`)*\\s*>)?`,/<@@@>/g,2),o={keyword:`synchronized.abstract.private.var.static.if.const .for.while.strictfp.finally.protected.import.native.final.void.enum.else.break.transient.catch.instanceof.volatile.case.assert.package.default.public.try.switch.continue.throws.protected.public.private.module.requires.exports.do.sealed.yield.permits.goto.when`.split(`.`),literal:[`false`,`true`,`null`],type:[`char`,`boolean`,`long`,`float`,`int`,`byte`,`short`,`double`],built_in:[`super`,`this`]},s={className:`meta`,begin:`@`+n,contains:[{begin:/\(/,end:/\)/,contains:[`self`]}]},c={className:`params`,begin:/\(/,end:/\)/,keywords:o,relevance:0,contains:[e.C_BLOCK_COMMENT_MODE],endsParent:!0};return{name:`Java`,aliases:[`jsp`],keywords:o,illegal:/<\/|#/,contains:[e.COMMENT(`/\\*\\*`,`\\*/`,{relevance:0,contains:[{begin:/\w+@/,relevance:0},{className:`doctag`,begin:`@[A-Za-z]+`}]}),{begin:/import java\.[a-z]+\./,keywords:`import`,relevance:2},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{begin:/"""/,end:/"""/,className:`string`,contains:[e.BACKSLASH_ESCAPE]},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{match:[/\b(?:class|interface|enum|extends|implements|new)/,/\s+/,n],className:{1:`keyword`,3:`title.class`}},{match:/non-sealed/,scope:`keyword`},{beginKeywords:`new throw return else yield assert`,relevance:0},{begin:[n,t.concat(a,r,/\s+/),n,r,/\s*/,/=(?!=)/],className:{1:`type`,3:`variable`,6:`operator`}},{begin:[/record/,/\s+/,n],className:{1:`keyword`,3:`title.class`},contains:[c,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{begin:[n,t.concat(a,r,/\s+/),n,/\s*(?=\()/],className:{1:`type`,3:`title.function`},keywords:o,contains:[{className:`params`,begin:/\(/,end:/\)/,keywords:o,relevance:0,contains:[s,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,Al,e.C_BLOCK_COMMENT_MODE]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},Al,s]}}var Nl=`[A-Za-z$_][0-9A-Za-z$_]*`,Pl=`as.in.of.if.for.while.finally.var.new.function.do.return.void.else.break.catch.instanceof.with.throw.case.default.try.switch.continue.typeof.delete.let.yield.const.class.debugger.async.await.static.import.from.export.extends.using`.split(`.`),Fl=[`true`,`false`,`null`,`undefined`,`NaN`,`Infinity`],Il=`Object.Function.Boolean.Symbol.Math.Date.Number.BigInt.String.RegExp.Array.Float32Array.Float64Array.Int8Array.Uint8Array.Uint8ClampedArray.Int16Array.Int32Array.Uint16Array.Uint32Array.BigInt64Array.BigUint64Array.Set.Map.WeakSet.WeakMap.ArrayBuffer.SharedArrayBuffer.Atomics.DataView.JSON.Promise.Generator.GeneratorFunction.AsyncFunction.Reflect.Proxy.Intl.WebAssembly`.split(`.`),Ll=[`Error`,`EvalError`,`InternalError`,`RangeError`,`ReferenceError`,`SyntaxError`,`TypeError`,`URIError`],Rl=[`setInterval`,`setTimeout`,`clearInterval`,`clearTimeout`,`require`,`exports`,`eval`,`isFinite`,`isNaN`,`parseFloat`,`parseInt`,`decodeURI`,`decodeURIComponent`,`encodeURI`,`encodeURIComponent`,`escape`,`unescape`],zl=[`arguments`,`this`,`super`,`console`,`window`,`document`,`localStorage`,`sessionStorage`,`module`,`self`,`global`],Bl=[].concat(Rl,Il,Ll);function Vl(e){let t=e.regex,n=(e,{after:t})=>{let n=`</`+e[0].slice(1);return e.input.indexOf(n,t)!==-1},r=Nl,i={begin:`<>`,end:`</>`},a=/<[A-Za-z0-9\\._:-]+\s*\/>/,o={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(e,t)=>{let r=e[0].length+e.index,i=e.input[r];if(i===`<`||i===`,`){t.ignoreMatch();return}i===`>`&&(n(e,{after:r})||t.ignoreMatch());let a,o=e.input.substring(r);if(a=o.match(/^\s*=/)){t.ignoreMatch();return}if((a=o.match(/^\s+extends\s+/))&&a.index===0){t.ignoreMatch();return}}},s={$pattern:Nl,keyword:Pl,literal:Fl,built_in:Bl,"variable.language":zl},c=`[0-9](_?[0-9])*`,l=`\\.(${c})`,u=`0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*`,d={className:`number`,variants:[{begin:`(\\b(${u})((${l})|\\.)?|(${l}))[eE][+-]?(${c})\\b`},{begin:`\\b(${u})\\b((${l})\\b|\\.)?|(${l})\\b`},{begin:`\\b(0|[1-9](_?[0-9])*)n\\b`},{begin:`\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\b`},{begin:`\\b0[bB][0-1](_?[0-1])*n?\\b`},{begin:`\\b0[oO][0-7](_?[0-7])*n?\\b`},{begin:`\\b0[0-7]+n?\\b`}],relevance:0},f={className:`subst`,begin:`\\$\\{`,end:`\\}`,keywords:s,contains:[]},p={begin:".?html`",end:``,starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,f],subLanguage:`xml`}},m={begin:".?css`",end:``,starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,f],subLanguage:`css`}},h={begin:".?gql`",end:``,starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,f],subLanguage:`graphql`}},g={className:`string`,begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE,f]},_={className:`comment`,variants:[e.COMMENT(/\/\*\*(?!\/)/,`\\*/`,{relevance:0,contains:[{begin:`(?=@[A-Za-z]+)`,relevance:0,contains:[{className:`doctag`,begin:`@[A-Za-z]+`},{className:`type`,begin:`\\{`,end:`\\}`,excludeEnd:!0,excludeBegin:!0,relevance:0},{className:`variable`,begin:r+`(?=\\s*(-)|$)`,endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),e.C_BLOCK_COMMENT_MODE,e.C_LINE_COMMENT_MODE]},v=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,p,m,h,g,{match:/\$\d+/},d];f.contains=v.concat({begin:/\{/,end:/\}/,keywords:s,contains:[`self`].concat(v)});let y=[].concat(_,f.contains),b=y.concat([{begin:/(\s*)\(/,end:/\)/,keywords:s,contains:[`self`].concat(y)}]),x={className:`params`,begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:s,contains:b},ee={variants:[{match:[/class/,/\s+/,r,/\s+/,/extends/,/\s+/,t.concat(r,`(`,t.concat(/\./,r),`)*`)],scope:{1:`keyword`,3:`title.class`,5:`keyword`,7:`title.class.inherited`}},{match:[/class/,/\s+/,r],scope:{1:`keyword`,3:`title.class`}}]},te={relevance:0,match:t.either(/\bJSON/,/\b[A-Z][a-z]+([A-Z][a-z]*|\d)*/,/\b[A-Z]{2,}([A-Z][a-z]+|\d)+([A-Z][a-z]*)*/,/\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\d)*([A-Z][a-z]*)*/),className:`title.class`,keywords:{_:[...Il,...Ll]}},ne={label:`use_strict`,className:`meta`,relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},re={variants:[{match:[/function/,/\s+/,r,/(?=\s*\()/]},{match:[/function/,/\s*(?=\()/]}],className:{1:`keyword`,3:`title.function`},label:`func.def`,contains:[x],illegal:/%/},ie={relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:`variable.constant`};function S(e){return t.concat(`(?!`,e.join(`|`),`)`)}let ae={match:t.concat(/\b/,S([...Rl,`super`,`import`,`await`].map(e=>`${e}\\s*\\(`)),r,t.lookahead(/\s*\(/)),className:`title.function`,relevance:0},oe={begin:t.concat(/\./,t.lookahead(t.concat(r,/(?![0-9A-Za-z$_(])/))),end:r,excludeBegin:!0,keywords:`prototype`,className:`property`,relevance:0},C={match:[/get|set/,/\s+/,r,/(?=\()/],className:{1:`keyword`,3:`title.function`},contains:[{begin:/\(\)/},x]},se=`(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|`+e.UNDERSCORE_IDENT_RE+`)\\s*=>`,w={match:[/const|var|let/,/\s+/,r,/\s*/,/=\s*/,/(async\s*)?/,t.lookahead(se)],keywords:`async`,className:{1:`keyword`,3:`title.function`},contains:[x]};return{name:`JavaScript`,aliases:[`js`,`jsx`,`mjs`,`cjs`],keywords:s,exports:{PARAMS_CONTAINS:b,CLASS_REFERENCE:te},illegal:/#(?![$_A-Za-z])/,contains:[e.SHEBANG({label:`shebang`,binary:`node`,relevance:5}),ne,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,p,m,h,g,_,{match:/\$\d+/},d,te,{scope:`attr`,match:r+t.lookahead(`:`),relevance:0},w,{begin:`(`+e.RE_STARTERS_RE+`|\\b(case|return|throw)\\b)\\s*`,keywords:`return throw case`,relevance:0,contains:[_,e.REGEXP_MODE,{className:`function`,begin:se,returnBegin:!0,end:`\\s*=>`,contains:[{className:`params`,variants:[{begin:e.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:s,contains:b}]}]},{begin:/,/,relevance:0},{match:/\s+/,relevance:0},{variants:[{begin:i.begin,end:i.end},{match:a},{begin:o.begin,"on:begin":o.isTrulyOpeningTag,end:o.end}],subLanguage:`xml`,contains:[{begin:o.begin,end:o.end,skip:!0,contains:[`self`]}]}]},re,{beginKeywords:`while if switch catch for`},{begin:`\\b(?!function)`+e.UNDERSCORE_IDENT_RE+`\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{`,returnBegin:!0,label:`func.def`,contains:[x,e.inherit(e.TITLE_MODE,{begin:r,className:`title.function`})]},{match:/\.\.\./,relevance:0},oe,{match:`\\$`+r,relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:`title.function`},contains:[x]},ae,ie,ee,C,{match:/\$[(.]/}]}}var Hl={scope:`number`,match:`([-+]?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)|NaN|[-+]?Infinity`,relevance:0};function Ul(e){let t={className:`attr`,begin:/(("(\\.|[^\\"\r\n])*")|('(\\.|[^\\'\r\n])*'))(?=\s*:)/,relevance:1.01},n={match:/[{}[\],:]/,className:`punctuation`,relevance:0},r=[`true`,`false`,`null`],i={scope:`literal`,beginKeywords:r.join(` `)};return{name:`JSON`,aliases:[`jsonc`,`json5`],keywords:{literal:r},contains:[t,n,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,i,Hl,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE],illegal:`\\S`}}function Wl(e){let t=e.regex,n={begin:/<\/?[A-Za-z_]/,end:`>`,subLanguage:`xml`,relevance:0},r={match:/^ {0,3}([-*_])[ \t]*(?:\1[ \t]*){2,}$/},i={className:`code`,variants:[{begin:"(`{3,})[^`](.|\\n)*?\\1`*[ ]*"},{begin:`(~{3,})[^~](.|\\n)*?\\1~*[ ]*`},{begin:"```",end:"```+[ ]*$"},{begin:`~~~`,end:`~~~+[ ]*$`},{begin:"`.+?`"},{begin:`(?=^( {4}|\\t))`,contains:[{begin:`^( {4}|\\t)`,end:`(\\n)$`}],relevance:0}]},a={className:`bullet`,begin:`^[ ]*([*+-]|(\\d+\\.))(?=\\s+)`,end:`\\s+`,excludeEnd:!0},o={begin:/^\[[^\n]+\]:/,returnBegin:!0,contains:[{className:`symbol`,begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0},{className:`link`,begin:/:\s*/,end:/$/,excludeBegin:!0}]},s={variants:[{begin:/\[.+?\]\[.*?\]/,relevance:0},{begin:/\[.+?\]\(((data|javascript|mailto):|(?:http|ftp)s?:\/\/).*?\)/,relevance:2},{begin:t.concat(/\[.+?\]\(/,/[A-Za-z][A-Za-z0-9+.-]*/,/:\/\/.*?\)/),relevance:2},{begin:/\[.+?\]\([./?&#].*?\)/,relevance:1},{begin:/\[.*?\]\(.*?\)/,relevance:0}],returnBegin:!0,contains:[{match:/\[(?=\])/},{className:`string`,relevance:0,begin:`\\[`,end:`\\]`,excludeBegin:!0,returnEnd:!0},{className:`link`,relevance:0,begin:`\\]\\(`,end:`\\)`,excludeBegin:!0,excludeEnd:!0},{className:`symbol`,relevance:0,begin:`\\]\\[`,end:`\\]`,excludeBegin:!0,excludeEnd:!0}]},c={className:`strong`,contains:[],variants:[{begin:/_{2}(?!\s)/,end:/_{2}/},{begin:/\*{2}(?!\s)/,end:/\*{2}/}]},l={className:`emphasis`,contains:[],variants:[{begin:/\*(?![*\s])/,end:/\*/},{begin:/_(?![_\s])/,end:/_/,relevance:0}]},u=e.inherit(c,{contains:[]}),d=e.inherit(l,{contains:[]});c.contains.push(d),l.contains.push(u);let f=[n,s];return[c,l,u,d].forEach(e=>{e.contains=e.contains.concat(f)}),f=f.concat(c,l),{name:`Markdown`,aliases:[`md`,`mkdown`,`mkd`],contains:[{className:`section`,variants:[{begin:`^#{1,6}`,end:`$`,contains:f},{begin:`(?=^.+?\\n[=-]{2,}$)`,contains:[{begin:`^[=-]*$`},{begin:`^`,end:`\\n`,contains:f}]}]},n,a,r,c,l,{className:`quote`,begin:`^>\\s+`,contains:f,end:`$`},i,s,o,{scope:`literal`,match:/&([a-zA-Z0-9]+|#[0-9]{1,7}|#[Xx][0-9a-fA-F]{1,6});/}]}}function Gl(e){let t=e.regex,n=/[\p{XID_Start}_]\p{XID_Continue}*/u,r=`and.as.assert.async.await.break.case.class.continue.def.del.elif.else.except.finally.for.from.global.if.import.in.is.lambda.lazy.match.nonlocal|10.not.or.pass.raise.return.try.while.with.yield`.split(`.`),i={$pattern:/[A-Za-z]\w+|__\w+__/,keyword:r,built_in:`__import__.abs.aiter.all.anext.any.ascii.bin.bool.breakpoint.bytearray.bytes.callable.chr.classmethod.compile.complex.delattr.dict.dir.divmod.enumerate.eval.exec.filter.float.format.frozendict.frozenset.getattr.globals.hasattr.hash.help.hex.id.input.int.isinstance.issubclass.iter.len.list.locals.map.max.memoryview.min.next.object.oct.open.ord.pow.print.property.range.repr.reversed.round.sentinel.set.setattr.slice.sorted.staticmethod.str.sum.super.tuple.type.vars.zip`.split(`.`),literal:[`__debug__`,`Ellipsis`,`False`,`None`,`NotImplemented`,`True`],type:[`Any`,`Callable`,`Coroutine`,`Dict`,`List`,`Literal`,`Generic`,`Optional`,`Sequence`,`Set`,`Tuple`,`Type`,`Union`]},a={className:`meta`,begin:/^(>>>|\.\.\.) /},o={className:`subst`,begin:/\{/,end:/\}/,keywords:i,illegal:/#/},s={begin:/\{\{/,relevance:0},c={className:`string`,contains:[e.BACKSLASH_ESCAPE],variants:[{begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?'''/,end:/'''/,contains:[e.BACKSLASH_ESCAPE,a],relevance:10},{begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?"""/,end:/"""/,contains:[e.BACKSLASH_ESCAPE,a],relevance:10},{begin:/([fFtT][rR]|[rR][fFtT]|[fFtT])'''/,end:/'''/,contains:[e.BACKSLASH_ESCAPE,a,s,o]},{begin:/([fFtT][rR]|[rR][fFtT]|[fFtT])"""/,end:/"""/,contains:[e.BACKSLASH_ESCAPE,a,s,o]},{begin:/([uU]|[rR])'/,end:/'/,relevance:10},{begin:/([uU]|[rR])"/,end:/"/,relevance:10},{begin:/([bB]|[bB][rR]|[rR][bB])'/,end:/'/},{begin:/([bB]|[bB][rR]|[rR][bB])"/,end:/"/},{begin:/([fFtT][rR]|[rR][fFtT]|[fFtT])'/,end:/'/,contains:[e.BACKSLASH_ESCAPE,s,o]},{begin:/([fFtT][rR]|[rR][fFtT]|[fFtT])"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,s,o]},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},l=`[0-9](_?[0-9])*`,u=`(\\b(${l}))?\\.(${l})|\\b(${l})\\.`,d=`\\b|${r.join(`|`)}`,f={className:`number`,relevance:0,variants:[{begin:`(\\b(${l})|(${u}))[eE][+-]?(${l})[jJ]?(?=${d})`},{begin:`(${u})[jJ]?`},{begin:`\\b([1-9](_?[0-9])*|0+(_?0)*)[lLjJ]?(?=${d})`},{begin:`\\b0[bB](_?[01])+[lL]?(?=${d})`},{begin:`\\b0[oO](_?[0-7])+[lL]?(?=${d})`},{begin:`\\b0[xX](_?[0-9a-fA-F])+[lL]?(?=${d})`},{begin:`\\b(${l})[jJ](?=${d})`}]},p={className:`comment`,begin:t.lookahead(/# type:/),end:/$/,keywords:i,contains:[{begin:/# type:/},{begin:/#/,end:/\b\B/,endsWithParent:!0}]},m={className:`params`,variants:[{className:``,begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:i,contains:[`self`,a,f,c,e.HASH_COMMENT_MODE]}]};return o.contains=[c,f,a],{name:`Python`,aliases:[`py`,`gyp`,`ipython`],unicodeRegex:!0,keywords:i,illegal:/(<\/|\?)|=>/,contains:[a,f,{scope:`variable.language`,match:/\bself\b/},{beginKeywords:`if`,relevance:0},{match:/\bor\b/,scope:`keyword`},c,p,e.HASH_COMMENT_MODE,{match:[/\bdef/,/\s+/,n],scope:{1:`keyword`,3:`title.function`},contains:[m]},{variants:[{match:[/\bclass/,/\s+/,n,/\s*/,/\(\s*/,n,/\s*\)/]},{match:[/\bclass/,/\s+/,n]}],scope:{1:`keyword`,3:`title.class`,6:`title.class.inherited`}},{className:`meta`,begin:/^[\t ]*@/,end:/(?=#)|$/,contains:[f,m,c]}]}}function Kl(e){let t=e.regex,n=e.COMMENT(`--`,`$`),r={scope:`string`,variants:[{begin:/'/,end:/'/,contains:[{match:/''/}]}]},i={begin:/"/,end:/"/,contains:[{match:/""/}]},a=[`true`,`false`,`unknown`],o=[`double precision`,`large object`,`with timezone`,`without timezone`],s=`bigint.binary.blob.boolean.char.character.clob.date.dec.decfloat.decimal.float.int.integer.interval.nchar.nclob.national.numeric.real.row.smallint.time.timestamp.varchar.varying.varbinary`.split(`.`),c=[`add`,`asc`,`collation`,`desc`,`final`,`first`,`last`,`view`],l=`abs.acos.all.allocate.alter.and.any.are.array.array_agg.array_max_cardinality.as.asensitive.asin.asymmetric.at.atan.atomic.authorization.avg.begin.begin_frame.begin_partition.between.bigint.binary.blob.boolean.both.by.call.called.cardinality.cascaded.case.cast.ceil.ceiling.char.char_length.character.character_length.check.classifier.clob.close.coalesce.collate.collect.column.commit.condition.connect.constraint.contains.convert.copy.corr.corresponding.cos.cosh.count.covar_pop.covar_samp.create.cross.cube.cume_dist.current.current_catalog.current_date.current_default_transform_group.current_path.current_role.current_row.current_schema.current_time.current_timestamp.current_path.current_role.current_transform_group_for_type.current_user.cursor.cycle.date.day.deallocate.dec.decimal.decfloat.declare.default.define.delete.dense_rank.deref.describe.deterministic.disconnect.distinct.double.drop.dynamic.each.element.else.empty.end.end_frame.end_partition.end-exec.equals.escape.every.except.exec.execute.exists.exp.external.extract.false.fetch.filter.first_value.float.floor.for.foreign.frame_row.free.from.full.function.fusion.get.global.grant.group.grouping.groups.having.hold.hour.identity.in.indicator.initial.inner.inout.insensitive.insert.int.integer.intersect.intersection.interval.into.is.join.json_array.json_arrayagg.json_exists.json_object.json_objectagg.json_query.json_table.json_table_primitive.json_value.lag.language.large.last_value.lateral.lead.leading.left.like.like_regex.listagg.ln.local.localtime.localtimestamp.log.log10.lower.match.match_number.match_recognize.matches.max.member.merge.method.min.minute.mod.modifies.module.month.multiset.national.natural.nchar.nclob.new.no.none.normalize.not.nth_value.ntile.null.nullif.numeric.octet_length.occurrences_regex.of.offset.old.omit.on.one.only.open.or.order.out.outer.over.overlaps.overlay.parameter.partition.pattern.per.percent.percent_rank.percentile_cont.percentile_disc.period.portion.position.position_regex.power.precedes.precision.prepare.primary.procedure.ptf.range.rank.reads.real.recursive.ref.references.referencing.regr_avgx.regr_avgy.regr_count.regr_intercept.regr_r2.regr_slope.regr_sxx.regr_sxy.regr_syy.release.result.return.returns.revoke.right.rollback.rollup.row.row_number.rows.running.savepoint.scope.scroll.search.second.seek.select.sensitive.session_user.set.show.similar.sin.sinh.skip.smallint.some.specific.specifictype.sql.sqlexception.sqlstate.sqlwarning.sqrt.start.static.stddev_pop.stddev_samp.submultiset.subset.substring.substring_regex.succeeds.sum.symmetric.system.system_time.system_user.table.tablesample.tan.tanh.then.time.timestamp.timezone_hour.timezone_minute.to.trailing.translate.translate_regex.translation.treat.trigger.trim.trim_array.true.truncate.uescape.union.unique.unknown.unnest.update.upper.user.using.value.values.value_of.var_pop.var_samp.varbinary.varchar.varying.versioning.when.whenever.where.width_bucket.window.with.within.without.year`.split(`.`),u=`abs.acos.array_agg.asin.atan.avg.cast.ceil.ceiling.coalesce.corr.cos.cosh.count.covar_pop.covar_samp.cume_dist.dense_rank.deref.element.exp.extract.first_value.floor.json_array.json_arrayagg.json_exists.json_object.json_objectagg.json_query.json_table.json_table_primitive.json_value.lag.last_value.lead.listagg.ln.log.log10.lower.max.min.mod.nth_value.ntile.nullif.percent_rank.percentile_cont.percentile_disc.position.position_regex.power.rank.regr_avgx.regr_avgy.regr_count.regr_intercept.regr_r2.regr_slope.regr_sxx.regr_sxy.regr_syy.row_number.sin.sinh.sqrt.stddev_pop.stddev_samp.substring.substring_regex.sum.tan.tanh.translate.translate_regex.treat.trim.trim_array.unnest.upper.value_of.var_pop.var_samp.width_bucket`.split(`.`),d=[`current_catalog`,`current_date`,`current_default_transform_group`,`current_path`,`current_role`,`current_schema`,`current_transform_group_for_type`,`current_user`,`session_user`,`system_time`,`system_user`,`current_time`,`localtime`,`current_timestamp`,`localtimestamp`],f=[`create table`,`insert into`,`primary key`,`foreign key`,`not null`,`alter table`,`add constraint`,`grouping sets`,`on overflow`,`character set`,`respect nulls`,`ignore nulls`,`nulls first`,`nulls last`,`depth first`,`breadth first`],p=u,m=[...l,...c].filter(e=>!u.includes(e)),h={scope:`variable`,match:/@[a-z0-9][a-z0-9_]*/},g={scope:`operator`,match:/[-+*/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?/,relevance:0},_={match:t.concat(/\b/,t.either(...p),/\s*\(/),relevance:0,keywords:{built_in:p}};function v(e){return t.concat(/\b/,t.either(...e.map(e=>e.replace(/\s+/,`\\s+`))),/\b/)}let y={scope:`keyword`,match:v(f),relevance:0};function b(e,{exceptions:t,when:n}={}){let r=n;return t=t||[],e.map(e=>e.match(/\|\d+$/)||t.includes(e)?e:r(e)?`${e}|0`:e)}return{name:`SQL`,case_insensitive:!0,illegal:/[{}]|<\//,keywords:{$pattern:/\b[\w\.]+/,keyword:b(m,{when:e=>e.length<3}),literal:a,type:s,built_in:d},contains:[{scope:`type`,match:v(o)},y,_,h,r,i,e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE,n,g]}}var ql=`[A-Za-z$_][0-9A-Za-z$_]*`,Jl=`as.in.of.if.for.while.finally.var.new.function.do.return.void.else.break.catch.instanceof.with.throw.case.default.try.switch.continue.typeof.delete.let.yield.const.class.debugger.async.await.static.import.from.export.extends.using`.split(`.`),Yl=[`true`,`false`,`null`,`undefined`,`NaN`,`Infinity`],Xl=`Object.Function.Boolean.Symbol.Math.Date.Number.BigInt.String.RegExp.Array.Float32Array.Float64Array.Int8Array.Uint8Array.Uint8ClampedArray.Int16Array.Int32Array.Uint16Array.Uint32Array.BigInt64Array.BigUint64Array.Set.Map.WeakSet.WeakMap.ArrayBuffer.SharedArrayBuffer.Atomics.DataView.JSON.Promise.Generator.GeneratorFunction.AsyncFunction.Reflect.Proxy.Intl.WebAssembly`.split(`.`),Zl=[`Error`,`EvalError`,`InternalError`,`RangeError`,`ReferenceError`,`SyntaxError`,`TypeError`,`URIError`],Ql=[`setInterval`,`setTimeout`,`clearInterval`,`clearTimeout`,`require`,`exports`,`eval`,`isFinite`,`isNaN`,`parseFloat`,`parseInt`,`decodeURI`,`decodeURIComponent`,`encodeURI`,`encodeURIComponent`,`escape`,`unescape`],$l=[`arguments`,`this`,`super`,`console`,`window`,`document`,`localStorage`,`sessionStorage`,`module`,`self`,`global`],eu=[].concat(Ql,Xl,Zl);function tu(e){let t=e.regex,n=(e,{after:t})=>{let n=`</`+e[0].slice(1);return e.input.indexOf(n,t)!==-1},r=ql,i={begin:`<>`,end:`</>`},a=/<[A-Za-z0-9\\._:-]+\s*\/>/,o={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(e,t)=>{let r=e[0].length+e.index,i=e.input[r];if(i===`<`||i===`,`){t.ignoreMatch();return}i===`>`&&(n(e,{after:r})||t.ignoreMatch());let a,o=e.input.substring(r);if(a=o.match(/^\s*=/)){t.ignoreMatch();return}if((a=o.match(/^\s+extends\s+/))&&a.index===0){t.ignoreMatch();return}}},s={$pattern:ql,keyword:Jl,literal:Yl,built_in:eu,"variable.language":$l},c=`[0-9](_?[0-9])*`,l=`\\.(${c})`,u=`0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*`,d={className:`number`,variants:[{begin:`(\\b(${u})((${l})|\\.)?|(${l}))[eE][+-]?(${c})\\b`},{begin:`\\b(${u})\\b((${l})\\b|\\.)?|(${l})\\b`},{begin:`\\b(0|[1-9](_?[0-9])*)n\\b`},{begin:`\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\b`},{begin:`\\b0[bB][0-1](_?[0-1])*n?\\b`},{begin:`\\b0[oO][0-7](_?[0-7])*n?\\b`},{begin:`\\b0[0-7]+n?\\b`}],relevance:0},f={className:`subst`,begin:`\\$\\{`,end:`\\}`,keywords:s,contains:[]},p={begin:".?html`",end:``,starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,f],subLanguage:`xml`}},m={begin:".?css`",end:``,starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,f],subLanguage:`css`}},h={begin:".?gql`",end:``,starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,f],subLanguage:`graphql`}},g={className:`string`,begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE,f]},_={className:`comment`,variants:[e.COMMENT(/\/\*\*(?!\/)/,`\\*/`,{relevance:0,contains:[{begin:`(?=@[A-Za-z]+)`,relevance:0,contains:[{className:`doctag`,begin:`@[A-Za-z]+`},{className:`type`,begin:`\\{`,end:`\\}`,excludeEnd:!0,excludeBegin:!0,relevance:0},{className:`variable`,begin:r+`(?=\\s*(-)|$)`,endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),e.C_BLOCK_COMMENT_MODE,e.C_LINE_COMMENT_MODE]},v=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,p,m,h,g,{match:/\$\d+/},d];f.contains=v.concat({begin:/\{/,end:/\}/,keywords:s,contains:[`self`].concat(v)});let y=[].concat(_,f.contains),b=y.concat([{begin:/(\s*)\(/,end:/\)/,keywords:s,contains:[`self`].concat(y)}]),x={className:`params`,begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:s,contains:b},ee={variants:[{match:[/class/,/\s+/,r,/\s+/,/extends/,/\s+/,t.concat(r,`(`,t.concat(/\./,r),`)*`)],scope:{1:`keyword`,3:`title.class`,5:`keyword`,7:`title.class.inherited`}},{match:[/class/,/\s+/,r],scope:{1:`keyword`,3:`title.class`}}]},te={relevance:0,match:t.either(/\bJSON/,/\b[A-Z][a-z]+([A-Z][a-z]*|\d)*/,/\b[A-Z]{2,}([A-Z][a-z]+|\d)+([A-Z][a-z]*)*/,/\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\d)*([A-Z][a-z]*)*/),className:`title.class`,keywords:{_:[...Xl,...Zl]}},ne={label:`use_strict`,className:`meta`,relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},re={variants:[{match:[/function/,/\s+/,r,/(?=\s*\()/]},{match:[/function/,/\s*(?=\()/]}],className:{1:`keyword`,3:`title.function`},label:`func.def`,contains:[x],illegal:/%/},ie={relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:`variable.constant`};function S(e){return t.concat(`(?!`,e.join(`|`),`)`)}let ae={match:t.concat(/\b/,S([...Ql,`super`,`import`,`await`].map(e=>`${e}\\s*\\(`)),r,t.lookahead(/\s*\(/)),className:`title.function`,relevance:0},oe={begin:t.concat(/\./,t.lookahead(t.concat(r,/(?![0-9A-Za-z$_(])/))),end:r,excludeBegin:!0,keywords:`prototype`,className:`property`,relevance:0},C={match:[/get|set/,/\s+/,r,/(?=\()/],className:{1:`keyword`,3:`title.function`},contains:[{begin:/\(\)/},x]},se=`(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|`+e.UNDERSCORE_IDENT_RE+`)\\s*=>`,w={match:[/const|var|let/,/\s+/,r,/\s*/,/=\s*/,/(async\s*)?/,t.lookahead(se)],keywords:`async`,className:{1:`keyword`,3:`title.function`},contains:[x]};return{name:`JavaScript`,aliases:[`js`,`jsx`,`mjs`,`cjs`],keywords:s,exports:{PARAMS_CONTAINS:b,CLASS_REFERENCE:te},illegal:/#(?![$_A-Za-z])/,contains:[e.SHEBANG({label:`shebang`,binary:`node`,relevance:5}),ne,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,p,m,h,g,_,{match:/\$\d+/},d,te,{scope:`attr`,match:r+t.lookahead(`:`),relevance:0},w,{begin:`(`+e.RE_STARTERS_RE+`|\\b(case|return|throw)\\b)\\s*`,keywords:`return throw case`,relevance:0,contains:[_,e.REGEXP_MODE,{className:`function`,begin:se,returnBegin:!0,end:`\\s*=>`,contains:[{className:`params`,variants:[{begin:e.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:s,contains:b}]}]},{begin:/,/,relevance:0},{match:/\s+/,relevance:0},{variants:[{begin:i.begin,end:i.end},{match:a},{begin:o.begin,"on:begin":o.isTrulyOpeningTag,end:o.end}],subLanguage:`xml`,contains:[{begin:o.begin,end:o.end,skip:!0,contains:[`self`]}]}]},re,{beginKeywords:`while if switch catch for`},{begin:`\\b(?!function)`+e.UNDERSCORE_IDENT_RE+`\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{`,returnBegin:!0,label:`func.def`,contains:[x,e.inherit(e.TITLE_MODE,{begin:r,className:`title.function`})]},{match:/\.\.\./,relevance:0},oe,{match:`\\$`+r,relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:`title.function`},contains:[x]},ae,ie,ee,C,{match:/\$[(.]/}]}}function nu(e){let t=e.regex,n=tu(e),r=ql,i=[`any`,`void`,`number`,`boolean`,`string`,`object`,`never`,`symbol`,`bigint`,`unknown`],a={begin:[/namespace/,/\s+/,e.IDENT_RE],beginScope:{1:`keyword`,3:`title.class`}},o={beginKeywords:`interface`,end:/\{/,excludeEnd:!0,keywords:{keyword:`interface extends`,built_in:i},contains:[n.exports.CLASS_REFERENCE]},s={className:`meta`,relevance:10,begin:/^\s*['"]use strict['"]/},c={$pattern:ql,keyword:Jl.concat([`type`,`interface`,`public`,`private`,`protected`,`implements`,`declare`,`abstract`,`readonly`,`enum`,`override`,`satisfies`]),literal:Yl,built_in:eu.concat(i),"variable.language":$l},l={className:`meta`,begin:`@`+r},u=(e,t,n)=>{let r=e.contains.findIndex(e=>e.label===t);if(r===-1)throw Error(`can not find mode to replace`);e.contains.splice(r,1,n)};Object.assign(n.keywords,c),n.exports.PARAMS_CONTAINS.push(l);let d=n.contains.find(e=>e.scope===`attr`),f=Object.assign({},d,{match:t.concat(r,t.lookahead(/\s*\?:/))});n.exports.PARAMS_CONTAINS.push([n.exports.CLASS_REFERENCE,d,f]),n.contains=n.contains.concat([l,a,o,f]),u(n,`shebang`,e.SHEBANG()),u(n,`use_strict`,s);let p=n.contains.find(e=>e.label===`func.def`);return p.relevance=0,Object.assign(n,{name:`TypeScript`,aliases:[`ts`,`tsx`,`mts`,`cts`]}),n}function ru(e){let t=e.regex,n=t.concat(/[\p{L}_]/u,t.optional(/[\p{L}0-9_.-]*:/u),/[\p{L}0-9_.-]*/u),r=/[\p{L}0-9._:-]+/u,i={className:`symbol`,begin:/&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/},a={begin:/\s/,contains:[{className:`keyword`,begin:/#?[a-z_][a-z1-9_-]+/,illegal:/\n/}]},o=e.inherit(a,{begin:/\(/,end:/\)/}),s=e.inherit(e.APOS_STRING_MODE,{className:`string`}),c=e.inherit(e.QUOTE_STRING_MODE,{className:`string`}),l={endsWithParent:!0,illegal:/</,relevance:0,contains:[{className:`attr`,begin:r,relevance:0},{begin:/=\s*/,relevance:0,contains:[{className:`string`,endsParent:!0,variants:[{begin:/"/,end:/"/,contains:[i]},{begin:/'/,end:/'/,contains:[i]},{begin:/[^\s"'=<>`]+/}]}]}]};return{name:`HTML, XML`,aliases:[`html`,`xhtml`,`rss`,`atom`,`xjb`,`xsd`,`xsl`,`plist`,`wsf`,`svg`],case_insensitive:!0,unicodeRegex:!0,contains:[{className:`meta`,begin:/<![a-z]/,end:/>/,relevance:10,contains:[a,c,s,o,{begin:/\[/,end:/\]/,contains:[{className:`meta`,begin:/<![a-z]/,end:/>/,contains:[a,o,c,s]}]}]},e.COMMENT(/<!--/,/-->/,{relevance:10}),{begin:/<!\[CDATA\[/,end:/\]\]>/,relevance:10},i,{className:`meta`,end:/\?>/,variants:[{begin:/<\?xml/,relevance:10,contains:[c]},{begin:/<\?[a-z][a-z0-9]+/}]},{className:`tag`,begin:/<style(?=\s|>)/,end:/>/,keywords:{name:`style`},contains:[l],starts:{end:/<\/style>/,returnEnd:!0,subLanguage:`css`}},{className:`tag`,begin:/<script(?=\s|>)/,end:/>/,keywords:{name:`script`},contains:[l],starts:{end:/<\/script>/,returnEnd:!0,subLanguage:`javascript`}},{className:`tag`,begin:/<>|<\/>/},{className:`tag`,begin:t.concat(/</,t.lookahead(t.concat(n,t.either(/\/>/,/>/,/\s/)))),end:/\/?>/,contains:[{className:`name`,begin:n,relevance:0,starts:l}]},{className:`tag`,begin:t.concat(/<\//,t.lookahead(t.concat(n,/>/))),contains:[{className:`name`,begin:n,relevance:0},{begin:/>/,relevance:0,endsParent:!0}]}]}}function iu(e){let t=`true false yes no null`,n=`[\\w#;/?:@&=+$,.~*'()[\\]]+`,r={className:`attr`,variants:[{begin:/[\w*@][\w*@ :()\./-]*:(?=[ \t]|$)/},{begin:/"[\w*@][\w*@ :()\./-]*":(?=[ \t]|$)/},{begin:/'[\w*@][\w*@ :()\./-]*':(?=[ \t]|$)/}]},i={className:`template-variable`,variants:[{begin:/\{\{/,end:/\}\}/},{begin:/%\{/,end:/\}/}]},a={className:`string`,relevance:0,begin:/'/,end:/'/,contains:[{match:/''/,scope:`char.escape`,relevance:0}]},o={className:`string`,relevance:0,variants:[{begin:/"/,end:/"/},{begin:/\S+/}],contains:[e.BACKSLASH_ESCAPE,i]},s=e.inherit(o,{variants:[{begin:/'/,end:/'/,contains:[{begin:/''/,relevance:0}]},{begin:/"/,end:/"/},{begin:/[^\s,{}[\]]+/}]}),c={className:`number`,begin:`\\b[0-9]{4}(-[0-9][0-9]){0,2}([Tt \\t][0-9][0-9]?(:[0-9][0-9]){2})?(\\.[0-9]*)?([ \\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?\\b`},l={end:`,`,endsWithParent:!0,excludeEnd:!0,keywords:t,relevance:0},u={begin:/\{/,end:/\}/,contains:[l],illegal:`\\n`,relevance:0},d={begin:`\\[`,end:`\\]`,contains:[l],illegal:`\\n`,relevance:0},f=[r,{className:`meta`,begin:`^---\\s*$`,relevance:10},{className:`string`,begin:`[\\|>]([1-9]?[+-])?[ ]*\\n( +)[^ ][^\\n]*\\n(\\2[^\\n]+\\n?)*`},{begin:`<%[%=-]?`,end:`[%-]?%>`,subLanguage:`ruby`,excludeBegin:!0,excludeEnd:!0,relevance:0},{className:`type`,begin:`!\\w+!`+n},{className:`type`,begin:`!<`+n+`>`},{className:`type`,begin:`!`+n},{className:`type`,begin:`!!`+n},{className:`meta`,begin:`&`+e.UNDERSCORE_IDENT_RE+`$`},{className:`meta`,begin:`\\*`+e.UNDERSCORE_IDENT_RE+`$`},{className:`bullet`,begin:`-(?=[ ]|$)`,relevance:0},e.HASH_COMMENT_MODE,{beginKeywords:t,keywords:{literal:t}},c,{className:`number`,begin:e.C_NUMBER_RE+`\\b`,relevance:0},u,d,a,o],p=[...f];return p.pop(),p.push(s),l.contains=p,{name:`YAML`,case_insensitive:!0,aliases:[`yml`],contains:f}}ml.registerLanguage(`bash`,hl),ml.registerLanguage(`cpp`,gl),ml.registerLanguage(`css`,Tl),ml.registerLanguage(`go`,El),ml.registerLanguage(`java`,Ml),ml.registerLanguage(`javascript`,Vl),ml.registerLanguage(`js`,Vl),ml.registerLanguage(`json`,Ul),ml.registerLanguage(`markdown`,Wl),ml.registerLanguage(`python`,Gl),ml.registerLanguage(`sql`,Kl),ml.registerLanguage(`typescript`,nu),ml.registerLanguage(`xml`,ru),ml.registerLanguage(`yaml`,iu);var au=128,ou=2097152,su=32768,cu=new Map,lu=0;function uu(e){let t=cu.get(e);if(t!==void 0)return cu.delete(e),cu.set(e,t),t}function du(e,t,n){let r=(e.length+t.length+n.length)*2;if(r>ou)return;let i=cu.get(e);for(i&&(lu-=i.bytes),cu.set(e,{html:t,cls:n,bytes:r}),lu+=r;cu.size>au||lu>ou;){let e=cu.keys().next();if(e.done===!0)break;let t=cu.get(e.value);t&&(lu-=t.bytes),cu.delete(e.value)}}function fu(e){return/(?:^|\s)language-([\w-]+)/.exec(e.className)?.[1]??``}function pu(e){let t=Array.from(e.querySelectorAll(`pre code`));for(let e of t){if(e.dataset.hlDone===`1`)continue;let t=e.textContent??``;if(t.length>su){e.className.indexOf(`language-`)===-1&&(e.className+=` language-plaintext`),e.dataset.hlDone=`1`;continue}let n=fu(e)+`\0`+t,r=uu(n);if(r){dl(e,r.html),e.className=r.cls,e.dataset.hlDone=`1`;continue}e.className.indexOf(`language-`)===-1&&(e.className+=` language-plaintext`);try{ml.highlightElement(e),e.dataset.hlDone=`1`,du(n,e.innerHTML,e.className)}catch{}}}var mu=`modulepreload`,hu=function(e){return`/`+e},gu={},_u=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function s(e){return import.meta.resolve?import.meta.resolve(e):new URL(e,import.meta.url).href}r=o(t.map(t=>{if(t=hu(t,n),t=s(t),t in gu)return;gu[t]=!0;let r=t.endsWith(`.css`);for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}let i=document.createElement(`link`);if(i.rel=r?`stylesheet`:mu,r||(i.as=`script`),i.crossOrigin=``,i.href=t,a&&i.setAttribute(`nonce`,a),document.head.appendChild(i),r)return new Promise((e,n)=>{i.addEventListener(`load`,e),i.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}).filter(e=>e!==void 0))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},vu=`.`+$s+`,.`+ec,yu=`math-done`,bu=null,xu=null,Su=new Set;function Cu(e){let t=e;return typeof t.renderToString==`function`?t:t.default!==void 0&&typeof t.default.renderToString==`function`?t.default:null}function wu(){return bu===null?(xu===null&&(xu=_u(()=>import(`./katex-CCbS2qAY.js`).then(async e=>{let t=Cu(e);if(t!==null){try{await _u(()=>import(`./mhchem-CnUN8HwY.js`),__vite__mapDeps([0,1]))}catch{}bu=(e,n)=>t.renderToString(e,{output:`mathml`,displayMode:n,throwOnError:!1})}}),[]).catch(()=>{xu=null})),xu):Promise.resolve()}function Tu(e){if(bu===null||e.classList.contains(yu))return;let t=e.textContent??``,n=``;try{n=bu(t,e.classList.contains(ec))}catch{return}e.replaceChildren(...ul(n)),e.classList.add(yu)}function Eu(e){let t=e.querySelectorAll(vu);if(t.length!==0){if(bu===null){for(let e of Array.from(t))Su.add(e);wu().then(()=>{let e=Array.from(Su);Su.clear();for(let t of e)Tu(t)});return}for(let e of Array.from(t))Tu(e)}}var Du=new WeakMap;function Ou(e){let t=Du.get(e);return t||(t={stream:new Ic,stableNodes:[],tailNodes:[],lastText:`\0`,inited:!1},Du.set(e,t)),t}function ku(e){return e.text.trim()!==``||e.content.childElementCount>0}function Au(e,t){t.root.remove(),Du.delete(t),e.assistant===t&&(e.assistant=null)}function ju(e,t){let n=Ou(t);if(n.lastText===t.text){W(e),to(e);return}let r=n.stream.updateParts(t.text);if(n.lastText=t.text,r.reset||!n.inited)n.stableNodes=pl(r.stableHtml),n.tailNodes=pl(r.tailHtml),t.content.replaceChildren(...n.stableNodes,...n.tailNodes),n.inited=!0;else{let e=n.tailNodes[0]??null,i=n=>{e?t.content.insertBefore(n,e):t.content.appendChild(n)};if(r.stableDeltaHtml)for(let e of pl(r.stableDeltaHtml))i(e),n.stableNodes.push(e);let a=pl(r.tailHtml);for(let e of a)i(e);for(let e of n.tailNodes)e.parentNode?.removeChild(e);n.tailNodes=a}pu(t.content),Eu(t.content),Nu(e,t),to(e)}function Mu(e,t){if(e.render.timer!==null)return;let n=performance.now(),r=Math.max(0,e.render.deadline+12-n);if(r===0){e.render.deadline=n,ju(e,t);return}e.render.timer=window.setTimeout(()=>{e.render.timer=null,e.render.deadline=performance.now(),ju(e,t)},r)}function Nu(e,t,n=!1){t.root.isConnected!==!1&&W(e,n)}function Pu(e,t){e.render.timer!==null&&(window.clearTimeout(e.render.timer),e.render.timer=null),e.render.deadline=performance.now(),ju(e,t)}function Fu(e,t,n){t.text+=n||``,Mu(e,t)}function Iu(e,t,n){typeof n==`string`&&n&&t.text!==n&&(t.text=n,Pu(e,t))}function Lu(e){let t=e.assistant;t&&(e.assistant=null,ku(t)?(t.bubble.classList.remove(`streaming`),t.bubble.classList.add(`complete`),Pu(e,t),W(e,!0)):(t.root.remove(),Du.delete(t)))}function Ru(e,t){let n=t??e.el;if(n===e.el){if(e.assistant)return e.assistant;co(e)}let r=N(`div`,`mcol`),i=N(`div`,`msg assistant`),a=N(`div`,`msg-caption`);a.appendChild(N(`span`,`who`,`Studio`)),a.appendChild(N(`span`,null,xe())),i.appendChild(a);let o=N(`div`,`bubble streaming`),s=N(`div`,`content`);o.appendChild(s),i.appendChild(o),r.appendChild(i),n.appendChild(r),$a(e,r,`assistant`),n===e.el&&to(e);let c={root:i,bubble:o,think:document.createElement(`details`),thinkBody:document.createElement(`div`),thinkTime:document.createElement(`span`),cards:document.createElement(`div`),content:s,text:``,thinkText:``,ops:new Map,steps:0};return n===e.el&&(e.lastTextCol=r,e.assistant=c,W(e,!0)),c}function zu(e,t){t.bubble.classList.remove(`streaming`),t.bubble.classList.add(`complete`),Pu(e,t),Nu(e,t,!0)}function Bu(e){let t=N(`div`,`attach-grid`);for(let n of e)t.appendChild(Wu(n));return t}function Vu(e,t,n,r){if(t.length===0){e.classList.add(`hidden`),e.replaceChildren();return}e.classList.remove(`hidden`);let i=e.classList.contains(`collapsed`),a=[Hu(e,t.length,i,r)];for(let e of t)a.push(Uu(e,n));e.replaceChildren(...a)}function Hu(e,t,n,r){let i=N(`button`,`attach-mode`);return i.type=`button`,i.dataset.fold=n?`collapsed`:`expanded`,i.setAttribute(`aria-expanded`,n?`false`:`true`),i.title=w(n?`chat.attach.expand`:`chat.attach.collapse`),i.setAttribute(`aria-label`,i.title),i.appendChild(N(`span`,`attach-mode-label`,w(`chat.attach.count`,{n:t}))),i.appendChild(N(`span`,`attach-mode-fold`,n?`▸`:`▾`)),i.addEventListener(`click`,()=>{e.classList.toggle(`collapsed`),r?.()}),i}function Uu(e,t){let n=N(`div`,`attach-item`+(e.error===``?``:` err`));n.appendChild(qu(e.url,e.name,e.name,e.kind===`text`?w(`chat.attach.textGlyph`):void 0));let r=N(`div`,`attach-meta`);r.appendChild(N(`div`,`attach-name`,e.name));let i=e.error===``?e.kind===`text`?Xu(e.bytes)+w(`chat.attach.textSuffix`):Xu(e.bytes):e.error;r.appendChild(N(`div`,`attach-sub`,i)),n.appendChild(r);let a=N(`button`,`attach-remove`,`×`);return a.type=`button`,a.title=e.kind===`text`?w(`chat.attach.removeText`):w(`chat.attach.removeImage`),a.setAttribute(`aria-label`,a.title+`:`+e.name),a.addEventListener(`click`,()=>t(e)),n.appendChild(a),n}function Wu(e){let t=e.kind===`text`,n=e.name??w(t?`chat.attach.textFile`:`chat.attach.imageName`),r=N(`div`,`attach-item`);r.appendChild(qu(t?``:e.url??``,n,n,w(t?`chat.attach.textGlyph`:`chat.attach.imageGlyph`)));let i=N(`div`,`attach-meta`);return i.appendChild(N(`div`,`attach-name`,n)),i.appendChild(N(`div`,`attach-sub`,t?Xu(e.bytes??0)+w(`chat.attach.textSuffix`):Ju(e))),r.appendChild(i),r}function Gu(e){let t=e.trim().replace(/^.*[\\/]/,``),n=Array.from(t)[0];return n===void 0||n===``?w(`chat.attach.glyphFallback`):n.toUpperCase()}function Ku(e){return/\.(png|jpe?g|gif|webp|avif|bmp|svg)$/i.test(e)}function qu(e,t,n,r){if(e!==``){let r=N(`img`,`attach-thumb`);return r.src=e,r.alt=t,r.title=n,r.addEventListener(`click`,()=>Yu(e,t)),r}let i=N(`div`,`attach-thumb attach-thumb-meta`);return i.textContent=r??(Ku(n)?w(`chat.attach.imageGlyph`):Gu(n)),i.title=n,i}function Ju(e){return e.ref?e.ref.width+`×`+e.ref.height+` · `+e.ref.media_type:e.bytes===void 0?w(`chat.attach.imageName`):Xu(e.bytes)}function Yu(e,t){let n=N(`div`,`attach-lightbox`),r=N(`img`,`attach-lightbox-img`);r.src=e,r.alt=t,n.appendChild(r);let i=null,a=()=>{n.remove(),i&&F(i)};i=P(a),n.addEventListener(`click`,a),document.body.appendChild(n)}function Xu(e){return e<1024?e+` B`:e<1048576?(e/1024).toFixed(1)+` KB`:(e/1048576).toFixed(1)+` MB`}var Zu=262144,Qu=`.md,.markdown,.mdx,.txt,.text,.json,.jsonl,.yaml,.yml,.csv,.tsv,.log,.ts,.tsx,.js,.jsx,.mjs,.cjs,.py,.rb,.go,.rs,.java,.c,.h,.cc,.cpp,.hpp,.cs,.php,.sh,.bash,.zsh,.sql,.html,.htm,.css,.scss,.less,.xml,.toml,.ini,.cfg,.conf,.env,.diff,.patch,.tex,.rst`.split(`,`),$u=`text/markdown,text/plain,`+Qu.join(`,`);function ed(e){if(e.type!==``&&e.type.indexOf(`text/`)===0)return!0;let t=e.name.toLowerCase();return Qu.some(e=>t.endsWith(e))}function td(e){return e.type.indexOf(`image/`)===0||ed(e)}function nd(e){return e.size>262144?ed(e)?w(`chat.attach.textTooLarge`,{size:Xu(Zu),current:Xu(e.size)}):w(`chat.attach.textOnlySupport`,{size:Xu(Zu)}):e.size===0?w(`chat.attach.emptyFile`):``}function rd(e,t){return{file:e,name:e.name||w(`chat.attach.textFile`),url:``,bytes:e.size,id:``,error:t,kind:`text`}}function id(e){return e===9||e===10||e===13||e===12||e===27}async function ad(e){try{let t=new Uint8Array(await e.arrayBuffer());for(let e of t)if(e<32&&!id(e))return null;return new TextDecoder(`utf-8`,{fatal:!0}).decode(t)}catch{return null}}async function od(e){let t=await ad(e.file);t===null?e.error=w(`chat.attach.notUtf8`):e.text=t}var sd=null;function cd(e){sd=e}function ld(){sd&&sd()}async function ud(e){let t=new Set;for(let n of e)n.kind!==`text`||n.text!==void 0||t.has(n)||(t.add(n),await od(n))}function dd(e,t){return md(e,t)}var fd=`===== W869 附件 =====`;function pd(e){return e.split(`
72
+ `).map(e=>e.indexOf(`===== W869 附件 =====`)>=0?e+` [此行由发送端转义]`:e).join(`
73
+ `)}function md(e,t){let n=[];for(let e of t){if(e.kind!==`text`||e.text===void 0)continue;let t=e.file.type===``?w(`chat.attach.unknownType`):e.file.type,r=`[文件 `+e.name+`(`+t+`,`+e.bytes+` 字节)]`;n.push(fd+`
74
+ `+r+`
75
+ `+pd(e.text)+`
76
+ ===== W869 附件 =====`)}return n.length===0?e:(e.trim()===``?``:e+`
77
+
78
+ `)+n.join(`
79
+
80
+ `)}var hd=20971520,gd=`image/png,image/jpeg,image/webp,image/gif,`+$u,_d=[`image/png`,`image/jpeg`,`image/webp`,`image/gif`],vd=/\.(png|jpe?g|webp|gif)$/i,yd=`IMAGE_UNSUPPORTED`,bd=!1,xd=``,Sd=[],Cd=new Map,wd=!1,Td=null;function Ed(){wd=!1,Td=null}function Dd(){return wd?Promise.resolve():Td||(Td=(async()=>{try{bd=(await j.health()).capabilities?.multimodal===!0}catch{bd=!1}try{xd=(await j.config()).model??``}catch{}try{let e=await j.providers(),t=[],n=new Set;for(let r of e.providers??[])for(let e of r.models??[])n.has(e.id)||(n.add(e.id),t.push(e.id)),e.input_modalities&&Cd.set(e.id,e.input_modalities);Sd=t}catch{}wd=!0})(),Td)}function Od(){return bd}function kd(){let e=B()?.model;return typeof e==`string`&&e!==``?e:xd}function Ad(e){if(e===``)return!0;let t=Cd.get(e);return t===void 0||t.includes(`image`)}function jd(){if(!bd)return w(`chat.attach.imageEntryDisabled`);let e=kd();return e!==``&&!Ad(e)?w(`chat.attach.modelNoImages`,{model:e}):``}function Md(){return Sd.filter(e=>Ad(e)).slice(0,6)}function Nd(e){return e.reason===yd||typeof e.message==`string`&&e.message.indexOf(`拒绝了图像输入`)>=0}function Pd(e){let t=typeof e.message==`string`&&e.message!==``?e.message:w(`chat.attach.downgradeDefault`),n=typeof e.hint==`string`?e.hint:``,r=typeof e.model==`string`?e.model:``,i=Md().filter(e=>e!==r);return[t,n,i.length>0?w(`chat.attach.suggestSwitch`,{models:i.join(w(`chat.question.answerSep`))}):``].filter(e=>e!==``).join(`
81
+ `)}var Fd=new Map,Id=new Map,Ld=64;function Rd(){return B()?.id??``}function zd(e){try{typeof URL.revokeObjectURL==`function`&&URL.revokeObjectURL(e)}catch{}}function Bd(e){let t=Id.get(e);t&&(Id.delete(e),zd(t.url))}function Vd(e,t){let n=Id.get(e);n&&n.url===t&&Bd(e)}function Hd(e,t,n){if(e!==``&&t!==``)for(Id.delete(e),Id.set(e,{url:t,session:n});Id.size>Ld;){let e=Id.keys().next().value;if(e===void 0)break;Bd(e)}}function Ud(e){for(let[t,n]of Array.from(Id))n.session===e&&Bd(t)}Br((e,t)=>{t&&t.id!==e.id&&Ud(t.id)});function Wd(e){try{return typeof URL.createObjectURL==`function`?URL.createObjectURL(e):``}catch{return``}}function Gd(e){return _d.indexOf(e.type)>=0?!0:e.type===``||e.type.indexOf(`image/`)===0?vd.test(e.name):!1}function Kd(e,t,n){return t+n>20?w(`chat.attach.maxCount`,{n:20}):Gd(e)?e.size>20971520?w(`chat.attach.maxBytes`,{size:Xu(hd)}):``:nd(e)}async function qd(e,t){try{let n=globalThis.crypto?globalThis.crypto.subtle:void 0;if(!n)return;let r=await n.digest(`SHA-256`,await e.file.arrayBuffer());e.id=lf(new Uint8Array(r)),Hd(e.id,e.url,t)}catch{}}function Jd(e){let t=Rd(),n=Fd.get(t)??[],r=n.filter(e=>e.error===``).length,i=e.length,a=0;for(let o=0;o<i;o++){let i=e[o];if(!i)continue;let s=Kd(i,r,1);s===``?r+=1:a+=1;let c=s===``&&!Gd(i),l=c?rd(i,s):{file:i,name:i.name||w(`chat.attach.imageName`),url:Wd(i),bytes:i.size,id:``,error:s};n.push(l),c?s===``&&od(l).then(ld):qd(l,t)}return Fd.set(t,n),a}function Yd(){return(Fd.get(Rd())??[]).slice()}function Xd(){return(Fd.get(Rd())??[]).filter(e=>e.error===``).length}function Zd(e){let t=Rd(),n=Fd.get(t)??[],r=n.indexOf(e);r>=0&&(n.splice(r,1),zd(e.url),Vd(e.id,e.url)),Fd.set(t,n)}function Qd(e=Rd()){let t=(Fd.get(e)??[]).filter(e=>e.error===``);Fd.set(e,[]);for(let n of t)Hd(n.id,n.url,e);return t}function $d(e,t){Fd.set(e,t.concat(Fd.get(e)??[]))}function ef(){let e=Rd(),t=Fd.get(e)??[],n=[],r=0;for(let e of t){if(e.kind===`text`){n.push(e);continue}r+=1,zd(e.url),Vd(e.id,e.url)}return Fd.set(e,n),r}var tf=class extends Error{constructor(e){super(w(`chat.attach.readFailed`,{names:e.join(w(`chat.question.answerSep`))||w(`chat.attach.unknownFile`)})),E(this,`names`,void 0),this.name=`AttachmentReadError`,this.names=e}};async function nf(e){let t=[],n=[];for(let r of e){if(r.kind===`text`){r.text===void 0&&n.push(r.name);continue}let e=await rf(r.file);e===``?n.push(r.name):t.push({data:e,name:r.name})}if(n.length>0)throw new tf(n);return t}function rf(e){return new Promise(t=>{try{let n=new FileReader;n.onload=()=>{let e=typeof n.result==`string`?n.result:``,r=e.indexOf(`,`);t(r>=0?e.slice(r+1):``)},n.onerror=()=>t(``),n.readAsDataURL(e)}catch{t(``)}})}function af(e){return e.map(e=>({name:e.name,url:e.url,bytes:e.bytes,kind:e.kind}))}function of(e){return e?e.map(e=>({ref:e,name:e.name,url:Id.get(e.attachment_id)?.url})):[]}function sf(e){if(typeof e!=`object`||!e||Array.isArray(e))return[];let t=e.attachments;if(!Array.isArray(t))return[];let n=[];for(let e of t){let t=cf(e);t&&n.push(t)}return n}function cf(e){if(typeof e!=`object`||!e)return null;let t=e,n=t.attachment_id,r=t.media_type,i=t.width,a=t.height;if(typeof n!=`string`||typeof r!=`string`||_d.indexOf(r)<0||typeof i!=`number`||typeof a!=`number`)return null;let o={attachment_id:n,media_type:r,width:i,height:a};return typeof t.name==`string`&&(o.name=t.name),o}function lf(e){let t=``;for(let n of e)t+=(n<16?`0`:``)+n.toString(16);return t}function uf(e){let t=`<div class="quote-head"><span class="quote-src">`+ye(e.source.label+(e.truncated?w(`chat.user.truncatedSuffix`):``))+`</span></div><div class="quote-body">`+ye(e.text)+`</div>`,n=N(`div`,`quote-block`);return n.replaceChildren(...ul(t)),n}function df(e){return w(e===`user`?`chat.user.you`:e===`steering`?`chat.user.steering`:`chat.user.queued`)}function ff(e,t,n){let r=n?.kind??`user`,i=n?.into??e.el;i===e.el&&co(e);let a=N(`div`,`mcol`),o=N(`div`,r===`user`?`msg user`:`msg user `+r+` interject`),s=N(`div`,`msg-caption`);s.appendChild(N(`span`,`who`,df(r))),s.appendChild(N(`span`,null,xe())),o.appendChild(s);let c=N(`div`,`bubble`);for(let e of n?.quotes??[])c.appendChild(uf(e));let l=N(`div`,`content`);l.textContent=t,l.style.whiteSpace=`pre-wrap`,c.appendChild(l);let u=n?.attachments??[];return u.length>0&&c.appendChild(Bu(u)),o.appendChild(c),a.appendChild(o),i.appendChild(a),$a(e,a,r===`user`?`user`:`interject`),i===e.el&&(to(e),W(e,!0)),a}function pf(e){if(e===`skill`)return{title:w(`chat.inbox.skill`),collapsed:!0};if(e===`memory`)return{title:w(`chat.inbox.memory`),collapsed:!0};if(e===`receipt`)return{title:w(`chat.inbox.receipt`),collapsed:!1};if(e===`steering`)return{title:w(`chat.user.steering`),collapsed:!1};if(e===`compact`)return{title:w(`chat.inbox.compact`),collapsed:!1}}function mf(e,t,n){let r=n?.into??e.el;r===e.el&&co(e);let i=(n?.kind??``).trim(),a=pf(i),o=N(`div`,`mcol`),s=N(`div`,i===``?`msg inbox`:`msg inbox inbox-`+i),c=N(`div`,`msg-caption`),l=(n?.source??``).trim();c.appendChild(N(`span`,`who`,a?a.title:l===``?w(`chat.msg.system`):w(`chat.inbox.receiptSource`,{source:l}))),n?.target&&c.appendChild(N(`span`,`inbox-lane`,hf(n.target))),c.appendChild(N(`span`,null,xe())),s.appendChild(c);let u=N(`div`,`bubble inbox-bubble`);if(a){let e=N(`details`,`inbox-fold`);e.open=!a.collapsed;let n=N(`summary`,`inbox-fold-head`);n.appendChild(N(`span`,`inbox-fold-title`,a.title)),l!==``&&n.appendChild(N(`span`,`inbox-fold-src`,l)),e.appendChild(n);let r=N(`div`,`content inbox-content`);r.textContent=t,e.appendChild(r),u.appendChild(e)}else{let e=N(`div`,`content inbox-content`);e.textContent=t,u.appendChild(e)}return s.appendChild(u),o.appendChild(s),r.appendChild(o),r===e.el&&(to(e),W(e,!0)),o}function hf(e){return e===`next-step`?w(`chat.lane.nextStep`):e===`next-turn`?w(`chat.lane.nextTurn`):``}function gf(e,t,n,r){if(!t)return null;co(e);let i=N(`div`,`mcol`),a=N(`div`,`msg info`+(n?` `+n:``)+(r?` `+r:``)),o=N(`div`,`msg-caption`);o.appendChild(N(`span`,`who`,w(`chat.msg.system`))),o.appendChild(N(`span`,null,xe())),a.appendChild(o);let s=N(`div`,`bubble info-bubble`),c=N(`div`,`content info-content`);return c.textContent=t,s.appendChild(c),a.appendChild(s),i.appendChild(a),e.el.appendChild(i),W(e,!0),a}function _f(e,t){let n=e.querySelector(`.info-content`);n?n.textContent=t:e.textContent=t}function vf(e,t,n,r){let i=N(`div`,`mcol interject-note-col`),a=N(`div`,`interject-note`+(n?` `+n:``),t);i.appendChild(a);let o=r??null;return o?o.after(i):e.el.appendChild(i),o?o.nextSibling===i&&W(e,!0):W(e,!0),a}var yf=`<svg viewBox="0 0 16 16" width="14" height="14" aria-hidden="true" focusable="false"><path d="M6 3.5 10.5 8 6 12.5" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"></path></svg>`,bf=`collapsed`,xf=`expanded`;function Sf(){return w(`chat.think.foldedHint`)}var Cf=new WeakMap,wf=new WeakSet;function Tf(e,t){e.msg.classList.toggle(`collapsed`,t),e.foldMark.setAttribute(`data-fold`,t?bf:xf),e.head.setAttribute(`aria-expanded`,t?`false`:`true`)}function Ef(e,t){t?e.msg.dataset.state=`running`:delete e.msg.dataset.state}function Df(e={}){let t=N(`div`,`mcol`),n=N(`div`,`msg think-seg`),r=N(`div`,`msg-caption think-head`);r.appendChild(N(`span`,`who`,w(`chat.think.title`)));let i=N(`span`,`think-fold-mark`);i.innerHTML=yf,r.appendChild(i),r.appendChild(N(`span`,`think-time`,e.time??``)),r.setAttribute(`role`,`button`),r.setAttribute(`aria-expanded`,`false`),r.tabIndex=0,n.appendChild(r);let a=N(`div`,`bubble think-seg-bubble`),o=N(`div`,`think-seg-body`);e.text!==void 0&&(o.textContent=e.text),a.appendChild(o),a.appendChild(N(`div`,`think-seg-folded`,Sf())),n.appendChild(a),t.appendChild(n);let s={root:t,msg:n,head:r,body:o,foldMark:i,text:e.text??``};Cf.set(t,s),Tf(s,e.collapsed!==!1);let c=()=>{wf.add(s.root),Tf(s,!s.msg.classList.contains(`collapsed`))};return r.addEventListener(`click`,c),r.addEventListener(`keydown`,e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),c())}),s}function Of(e){let t=e.thinkSeg;if(!t)return;let n=Cf.get(t.root);n&&(Ef(n,!1),!wf.has(t.root)&&Tf(n,!0))}function kf(e){Of(e),e.thinkSeg=null,e.lastTextCol=null}function Af(e){e.thinkSeg&&(Of(e),e.thinkSeg=null)}function jf(e,t){if(!e.thinkSeg){co(e);let t=Df({time:xe(),collapsed:!e.streaming});e.el.appendChild(t.root),e.thinkSeg=t,t.body.textContent=w(`chat.think.thinking`)}let n=e.thinkSeg;if(n){let t=Cf.get(n.root);t&&(Ef(t,e.streaming===!0),e.streaming&&!wf.has(n.root)&&t.msg.classList.contains(`collapsed`)&&Tf(t,!1))}let r=e.assistant?.root??e.lastTextCol;n!==null&&r&&n.root.compareDocumentPosition(r)&Node.DOCUMENT_POSITION_FOLLOWING&&e.el.insertBefore(n.root,r),n!==null&&(n.text+=t||``,n.body.textContent=n.text===``?w(`chat.think.thinking`):n.text),W(e),to(e)}var Mf=`===== CELESTEA QUOTE =====`,Nf=` [CELESTEA-QUOTE-ESCAPED]`,Pf=8192,Ff=32768,If=[`user`,`assistant`,`tool`,`inbox`],Lf=[`text`,`markdown`,`code`];function Rf(e){return new TextEncoder().encode(e).length}function zf(e){return e.replace(/\s*·\s*/g,` `).replace(/\]/g,`)`).replace(/[\r\n]+/g,` `).trim()}function Bf(e,t=Pf){if(Rf(e)<=t)return{text:e,truncated:!1};let n=new TextEncoder,r=``,i=0;for(let a of e){let e=n.encode(a).length;if(i+e>t)break;r+=a,i+=e}return{text:r,truncated:!0}}function Vf(e){let t=``;for(let n of e)t+=(n<16?`0`:``)+n.toString(16);return t}async function Hf(e){let t=globalThis.crypto?globalThis.crypto.subtle:void 0;if(!t)return``;let n=await t.digest(`SHA-256`,new TextEncoder().encode(e));return Vf(new Uint8Array(n))}function Uf(e){return e.hash===``?`x:`+e.text:e.hash}function Wf(e){let t=Bf(e.text,e.maxBytes??8192);return{id:e.id,source:{...e.source,label:zf(e.source.label)},text:t.text,hash:e.hash,bytes:Rf(t.text),truncated:t.truncated,...e.range?{range:e.range}:{},...e.format?{format:e.format}:{},...e.filePath!==void 0&&e.filePath!==``?{filePath:e.filePath}:{},...e.lineRange?{lineRange:e.lineRange}:{}}}function Gf(e){return e.includes(`===== CELESTEA QUOTE =====`)?e+Nf:e}function Kf(e){if(!e.endsWith(` [CELESTEA-QUOTE-ESCAPED]`))return e;let t=e.slice(0,e.length-25);return t.includes(`===== CELESTEA QUOTE =====`)?t:e}function qf(e,t,n,r){let i=[`引用 `+String(t+1),e.source.kind,e.source.turn===void 0?`轮次未知`:`第 `+String(e.source.turn)+` 轮`,zf(e.source.label),String(Rf(n))+`B`,`trunc=`+(r?`1`:`0`)];return e.format&&i.push(`fmt=`+e.format),e.filePath!==void 0&&e.filePath!==``&&i.push(`file=`+encodeURIComponent(e.filePath)),e.lineRange&&i.push(`lines=`+String(e.lineRange.startLine)+`-`+String(e.lineRange.endLine)),`[`+i.join(` · `)+`]`}function Jf(e,t,n,r){let i=[Mf,qf(e,r,t,n)];for(let e of t.split(`
82
+ `))i.push(`> `+Gf(e));return i.push(Mf),i.join(`
83
+ `)}function Yf(e,t){if(t.length===0)return e;let n=[],r=0;for(let e=0;e<t.length;e++){let i=t[e],a=Ff-r;if(a<=0)break;let o=Bf(i.text,a),s=i.truncated||o.truncated;if(n.push(Jf(i,o.text,s,e)),r+=Rf(o.text),r>=32768)break}return(e.trim()===``?``:e+`
84
+
85
+ `)+n.join(`
86
+
87
+ `)}function Xf(e,t,n){let r=e.slice(1,-1).split(` · `),i=new Map;for(let e=1;e<r.length;e++){let t=r[e],n=t.indexOf(`=`);n>0&&i.set(t.slice(0,n),t.slice(n+1))}let a=r[1]??``,o=If.includes(a)?a:`user`,s=/^第 (\d+) 轮$/.exec(r[2]??``),c=r[3]??``,l=i.get(`fmt`),u=l!==void 0&&Lf.includes(l)?l:void 0,d=i.get(`file`),f=/^(\d+)-(\d+)$/.exec(i.get(`lines`)??``);return{id:`q`+String(n+1),source:{kind:o,session:``,turn:s?Number(s[1]):void 0,label:c},text:t,hash:``,bytes:Rf(t),truncated:i.get(`trunc`)===`1`,...u?{format:u}:{},...d===void 0?{}:{filePath:decodeURIComponent(d)},...f?{lineRange:{startLine:Number(f[1]),endLine:Number(f[2])}}:{}}}function Zf(e){let t=e.split(`
88
+ `),n=[],r=-1,i=0;for(;i<t.length;){if(t[i]!==`===== CELESTEA QUOTE =====`){i+=1;continue}let e=t[i+1];if(e===void 0||!/^\[引用 .*\]$/.test(e)){i+=1;continue}let a=i+2,o=[],s=!1;for(;a<t.length;){let e=t[a];if(e===`===== CELESTEA QUOTE =====`){s=!0;break}if(!e.startsWith(`> `))break;o.push(Kf(e.slice(2))),a+=1}if(!s){i+=1;continue}r<0&&(r=i),n.push(Xf(e,o.join(`
89
+ `),n.length)),i=a+1}return r<0?{quotes:[],rest:e}:{quotes:n,rest:t.slice(0,r).join(`
90
+ `).replace(/\s+$/,``)}}var Qf={selected:[],custom:``};function $f(e,t){return e[t]??Qf}function ep(e,t,n){return n?{selected:e.selected.includes(t)?e.selected.filter(e=>e!==t):[...e.selected,t],custom:e.custom}:{selected:[t],custom:e.custom}}function tp(e,t){return{selected:[...e.selected],custom:t}}function np(e,t){let n=[];for(let r of e){let e=$f(t,r.id);e.selected.length===0&&e.custom.trim()===``&&n.push(r.id)}return n}function rp(e,t){let n=[];for(let r of e){let e=$f(t,r.id),i=e.custom.trim();if(e.selected.length===0&&i===``)continue;let a={id:r.id,selected:[...e.selected]};i!==``&&(a.custom=i),n.push(a)}return n}function ip(e){let t=[];for(let n of e){let e=[...n.selected],r=(n.custom??``).trim();r!==``&&e.push(w(`chat.question.customQuote`,{text:r})),e.length>0&&t.push(e.join(w(`chat.question.answerSep`)))}return t.join(w(`chat.question.answerJoin`))}function ap(e,t){return typeof e.remaining_ms==`number`&&Number.isFinite(e.remaining_ms)?e.remaining_ms:typeof e.expires_at==`number`&&Number.isFinite(e.expires_at)?e.expires_at-t:null}function op(e,t){let n=ap(e,t);return n===null?null:t+n}function sp(e){if(e===null)return``;if(e<=0)return w(`chat.question.timedOut`);let t=Math.floor(e/1e3);if(t<60)return w(`chat.question.seconds`,{n:t});if(t<3600){let e=Math.floor(t/60),n=t%60;return w(`chat.question.clock`,{m:e,s:(n<10?`0`:``)+n})}return w(`chat.question.hoursMinutes`,{h:Math.floor(t/3600),m:Math.floor(t%3600/60)})}function cp(e){return e!==null&&e<=0}function lp(e){return typeof e==`string`?e:null}function up(e){if(typeof e!=`object`||!e)return null;let t=e,n=lp(t.label);if(n===null||n===``)return null;let r=lp(t.description);return r===null?{label:n}:{label:n,description:r}}function dp(e){if(typeof e!=`object`||!e)return null;let t=e,n=lp(t.kind);return n===null||n===``?null:{...t,kind:n}}function fp(e){if(typeof e!=`object`||!e)return null;let t=e,n=lp(t.id),r=lp(t.question);if(n===null||n===``||r===null||r===``)return null;let i={id:n,question:r},a=lp(t.header);a!==null&&(i.header=a);let o=lp(t.detail);o!==null&&(i.detail=o);let s=Array.isArray(t.options)?t.options.map(up).filter(e=>e!==null):[];s.length>0&&(i.options=s),t.multi_select===!0&&(i.multi_select=!0);let c=dp(t.intent);return c!==null&&(i.intent=c),i}function pp(e){return Array.isArray(e)?e.map(fp).filter(e=>e!==null):[]}function mp(e){if(typeof e!=`object`||!e)return null;let t=e,n=lp(t.id);if(n===null||n===``)return null;let r=pp(t.questions);if(r.length===0)return null;let i={id:n,questions:r},a=lp(t.session);a!==null&&(i.session=a);for(let e of[`expires_at`,`timeout_ms`,`remaining_ms`]){let n=t[e];typeof n==`number`&&Number.isFinite(n)&&(i[e]=n)}return t.expired===!0&&(i.expired=!0),i}function hp(e){return e===404||e===409}function gp(e){return e.content}function _p(e){if(!Array.isArray(e))return[];let t=[];for(let n of e){if(typeof n!=`object`||!n)continue;let e=n,r=lp(e.id),i=e.selected;if(r===null||!Array.isArray(i))continue;let a=i.filter(e=>typeof e==`string`),o=lp(e.custom),s={id:r,selected:a};o!==null&&o!==``&&(s.custom=o),t.push(s)}return t}function vp(e){let t=new Map,n=[];for(let r of e){if(r.role!==`question`)continue;let e=typeof r.question_id==`string`?r.question_id:``;if(e!==``){if(r.kind===`question`){if(t.has(e))continue;let i=pp(gp(r));if(i.length===0)continue;let a={id:e,questions:i,settled:!1,timedOut:!1,answerText:``};typeof r.question_expires_at==`number`&&(a.expiresAt=r.question_expires_at),t.set(e,a),n.push(e);continue}if(r.kind===`answer`){let n=t.get(e);if(n===void 0)continue;n.settled=!0,n.timedOut=r.question_timed_out===!0,n.answerText=n.timedOut?``:ip(_p(gp(r)))}}}return n.map(e=>t.get(e))}function yp(e,t,n,r){let i=N(`label`,`q-opt`);r!==void 0&&r===n.label&&i.classList.add(`is-approve`);let a=N(`input`,`q-opt-input`);a.type=t.multi_select===!0?`checkbox`:`radio`,a.name=`q-`+e.id+`-`+t.id,a.value=n.label;let o=N(`span`,`q-opt-text`);return o.appendChild(N(`span`,`q-opt-label`,n.label)),n.description!==void 0&&n.description!==``&&o.appendChild(N(`span`,`q-opt-desc`,n.description)),i.appendChild(a),i.appendChild(o),a.addEventListener(`change`,()=>{e.picks[t.id]=ep($f(e.picks,t.id),n.label,t.multi_select===!0),e.onEdit()}),e.controls.push(a),i}function bp(e,t){let n=N(`div`,`q-item`);n.appendChild(N(`div`,`q-question`,t.question)),t.detail!==void 0&&t.detail!==``&&n.appendChild(N(`div`,`q-detail`,t.detail));let r=t.options??[];if(r.length>0){let i=N(`div`,`q-options`),a=t.intent?.approve;for(let n of r)i.appendChild(yp(e,t,n,a));n.appendChild(i)}let i=N(`input`,`q-custom-input`);i.type=`text`,i.autocomplete=`off`,i.placeholder=r.length>0?w(`chat.question.customPlaceholder`):w(`chat.question.customRequired`),i.addEventListener(`input`,()=>{e.picks[t.id]=tp($f(e.picks,t.id),i.value),e.onEdit()}),e.controls.push(i);let a=N(`div`,`q-custom`);return a.appendChild(i),n.appendChild(a),n}function xp(e){return e===`done`?w(`chat.question.answered`):e===`expired`?w(`chat.question.expired`):e===`closed`?w(`chat.question.closed`):``}var Sp=new WeakMap,Cp=new Set,wp=null;Vr((e,t)=>{!t&&Sr(e)===void 0&&Dp(e)});function Tp(e){let t=Sp.get(e.el);return t||(t=new Map,Sp.set(e.el,t)),t}function Ep(e){return e.root.isConnected?!0:e.root.parentElement!==null&&Sr(e.paneId)?.el===e.root.parentElement}function Dp(e){for(let t of Array.from(Cp))t.paneId===e&&Cp.delete(t);Op()}function Op(){Cp.size===0&&wp!==null&&(window.clearInterval(wp),wp=null)}function kp(e,t){let n=Tp(e),r=n.get(t);return r?Ep(r)?r:(n.delete(t),Cp.delete(r),null):null}function Ap(){let e=Date.now();for(let t of Array.from(Cp)){if(!Ep(t)){Cp.delete(t);continue}t.state===`pending`&&jp(t,e)}Op()}function jp(e,t){if(e.deadline===null){e.timer.textContent=``;return}let n=e.deadline-t;e.timer.textContent=sp(n),cp(n)&&e.state===`pending`&&Mp(e,`expired`)}function Mp(e,t,n){e.state=t,(t===`done`||t===`closed`)&&(e.settled=!0),e.card.dataset.state=t;let r=t!==`pending`;for(let t of e.controls)t.disabled=r;e.submit.disabled=r,e.submit.textContent=w(`chat.question.submit`),e.timer.textContent=r?``:e.timer.textContent,e.result.textContent=r?n??xp(t):``}function Np(e,t){if(t.state!==`pending`)return;if(t.deadline!==null&&Date.now()>=t.deadline){Mp(t,`expired`);return}let n=np(t.questions,t.picks);if(n.length>0){t.hint.textContent=w(`chat.question.missing`,{n:n.length});return}Pp(e,t)}async function Pp(e,t){let n=rp(t.questions,t.picks),r=e.id===``?void 0:e.id;Mp(t,`done`,w(`chat.question.answeredWith`,{answer:ip(n)})),t.hint.textContent=``;try{await j.answerQuestion(t.id,n,r)}catch(e){if(e instanceof D&&hp(e.status)){Mp(t,`closed`),t.hint.textContent=``;return}t.settled=!1,Mp(t,`pending`),t.hint.textContent=w(`chat.question.submitFailed`,{reason:O(e)}),jp(t,Date.now())}}function Fp(e,t){let n=N(`div`,`q-head`),r=N(`div`,`q-title`),i=t[0]?.header;r.textContent=i!==void 0&&i!==``?i:w(`chat.question.needDecision`);let a=t[0]?.intent?.kind;return a!==void 0&&a!==``&&r.appendChild(N(`span`,`q-intent`,a===`plan-review`?w(`chat.question.planReview`):a)),n.appendChild(r),n.appendChild(e.timer),n}function Ip(e,t){let n=N(`div`,`mcol q-col`),r=N(`div`,`msg question`),i=N(`div`,`msg-caption`);i.appendChild(N(`span`,`who`,w(`chat.question.title`))),i.appendChild(N(`span`,null,xe())),r.appendChild(i);let a=N(`div`,`bubble question-bubble`),o=N(`div`,`q-card`);o.dataset.state=`pending`;let s=N(`button`,`q-submit btn btn-accent`,w(`chat.question.submit`));s.type=`button`;let c={id:t.id,paneId:e.id,root:n,card:o,timer:N(`div`,`q-timer`),hint:N(`div`,`q-hint`),result:N(`div`,`q-result`),submit:s,controls:[],questions:t.questions,picks:{},deadline:null,state:`pending`,settled:!1,onEdit:()=>{c.hint.textContent=``}};o.appendChild(Fp(c,t.questions));let l=N(`div`,`q-items`);for(let e of t.questions)l.appendChild(bp(c,e));o.appendChild(l);let u=N(`div`,`q-actions`);return u.appendChild(c.submit),o.appendChild(u),o.appendChild(c.hint),o.appendChild(c.result),c.submit.addEventListener(`click`,()=>Np(e,c)),a.appendChild(o),r.appendChild(a),n.appendChild(r),c}function Lp(e,t){return co(e),e.el.appendChild(t.root),Tp(e).set(t.id,t),Cp.add(t),wp===null&&(wp=window.setInterval(Ap,1e3)),t}function Rp(e,t){t.questions.length>0&&(e.questions=t.questions),e.deadline=op(t,Date.now());let n=!cp(ap(t,Date.now()));return e.state===`expired`&&!e.settled&&n&&Mp(e,`pending`),e.state===`pending`&&(e.hint.textContent=``,jp(e,Date.now())),e}function zp(e){let t=mp(e),n=t?.questions;if(!t||n===void 0||n.length===0)return null;let r={id:t.id,questions:n};return t.expires_at!==void 0&&(r.expires_at=t.expires_at),t.timeout_ms!==void 0&&(r.timeout_ms=t.timeout_ms),t.remaining_ms!==void 0&&(r.remaining_ms=t.remaining_ms),r}function Bp(e,t){let n=zp(t);if(!n)return null;let r=kp(e,n.id);if(r)return Rp(r,n);let i=Rp(Ip(e,n),n);return Lp(e,i),W(e,!0),i}async function Vp(e){if(e.id===``)return;let t=e.id,n;try{n=await j.questions(t)}catch{return}let r=0;for(let t of n.questions??[]){let n=zp(t);if(!n)continue;let i=kp(e,n.id);if(i){Rp(i,n);continue}Lp(e,Rp(Ip(e,n),n)),r+=1}r>0&&W(e,!0)}function Hp(e,t,n){let r=Ip(e,{id:t.id,questions:t.questions});return n?(n.appendChild(r.root),Tp(e).set(r.id,r)):Lp(e,r),t.settled&&!t.timedOut?Mp(r,`done`,w(`chat.question.answeredWith`,{answer:t.answerText})):t.settled?(r.settled=!0,Mp(r,`expired`)):Mp(r,`expired`,w(`chat.question.interrupted`)),r.root}function Up(){for(let e of Cr())Vp(e)}function Wp(e,t){e.on(`question`,e=>{try{Bp(t(e),e)}catch(e){console.warn(`SSE question`,e)}}),e.onConn(e=>{e===`online`&&Up()})}var Gp=200;function Kp(e,t){let n=e.dedup;if(n.tail?.role!==`assistant`)return n.tail=null,t===``?null:t;n.guardActive||(n.guardActive=!0,n.guardBuf=``,n.guardAll=!1),n.guardBuf+=t;let r=n.tail.content??``;if(r.startsWith(n.guardBuf))return n.guardBuf===r&&(n.guardAll=!0),null;let i=n.guardBuf;return n.guardActive=!1,n.guardAll=!1,n.tail=null,i===``?null:i}function qp(e,t){let n=e.dedup;if(!n.guardActive)return!1;n.guardActive=!1;let r=n.guardAll||typeof t==`string`&&t!==``&&n.tail?.role===`assistant`&&t===(n.tail.content??``);return n.guardAll=!1,n.tail=null,r}function Jp(e){if(typeof e==`string`)return e;try{return JSON.stringify(e,null,2)}catch{return String(e)}}function Yp(e,t){let n=N(`div`,`mcol`),r=N(`div`,`msg tool`),i=N(`div`,`msg-caption`);i.appendChild(N(`span`,`who`,w(`chat.tool.title`))),r.appendChild(i);let a=N(`div`,`bubble`),o=N(`div`,`content restore-tool`);o.textContent=e,a.appendChild(o),r.appendChild(a),n.appendChild(r),t.appendChild(n)}function Xp(e,t,n){if(t.kind===`call`){e.histToolStep+=1;let r=t.tool_call_id??`call_`+e.histToolStep,i=xh({step:e.histToolStep,name:t.tool_name??`tool`,argsText:Jp(t.tool_args),desc:_h(t.tool_args)});n.appendChild(i.col),e.restoreOps.set(r,i);return}let r=t.tool_call_id??``,i=e.restoreOps.get(r);if(i){let n=!!t.tool_error&&t.tool_error!==``;Sh(i,n?String(t.tool_error):Jp(t.tool_value),n,t.tool_value),e.restoreOps.delete(r);return}Yp(w(`shell.restore.orphanResult`)+(t.tool_error?String(t.tool_error):Jp(t.tool_value)),n)}function Zp(e){return e.kind===`steering`?`steering`:e.kind===`queued`?`queued`:`user`}function Qp(e,t,n,r){let i=String(t.content??``),a=typeof t.question_id==`string`?t.question_id:``;if(t.role===`question`){let i=a===``?void 0:r.get(a);i!==void 0&&t.kind===`question`&&Hp(e,i,n);return}if(t.role===`inbox`||t.kind===`inbox`){mf(e,i,{source:t.source,kind:t.kind,into:n});return}if(t.role===`user`){let r=Zf(i);ff(e,r.rest,{kind:Zp(t),attachments:of(t.attachments),quotes:r.quotes,into:n});return}if(t.role===`assistant`){if(i.trim()===``)return;let t=Ru(e,n);t.text=i,zu(e,t);return}if(t.role===`thinking`){$p(i,n);return}Xp(e,t,n)}function $p(e,t){t.appendChild(Df({text:e,collapsed:!0}).root)}function em(e,t){e.el.querySelector(`.restore-note`)||e.el.appendChild(N(`div`,`restore-note`,t))}async function tm(e,t){let n;try{n=await j.messages(e.id)}catch{e.streaming||em(e,w(`shell.restore.unavailable`));return}if(t&&!t())return;let r=n.messages??[];if(e.streaming)return;eo(e),e.restoreOps.clear(),e.histToolStep=0;let i=document.createElement(`div`);r.length>Gp&&i.appendChild(N(`div`,`restore-fold`,w(`shell.restore.folded`,{n:Gp})));let a=r.length>Gp?r.slice(r.length-Gp):r,o=new Map(vp(a).map(e=>[e.id,e]));for(let t of a)Qp(e,t,i,o);if(e.restoreOps.size){for(let t of e.restoreOps.values())Sh(t,w(`shell.restore.noResult`),!1);e.restoreOps.clear()}if(a.length){let e=N(`div`,`live-sep`);e.appendChild(N(`span`,null,w(`shell.restore.sessionStart`))),e.title=w(`shell.restore.earlier`),i.appendChild(e)}if(!t||t()){if(e.el.replaceChildren(...i.childNodes),!a.length){lo(e);let t=N(`div`,`live-sep`);t.appendChild(N(`span`,null,w(`shell.restore.sessionStart`))),e.el.appendChild(t)}e.dedup.tail=a.length?a[a.length-1]??null:null,e.dedup.guardActive=!1,e.dedup.guardBuf=``,e.dedup.guardAll=!1,e.restored=!0,to(e),W(e,!0),Vp(e)}}async function nm(){try{let e=((await j.sessions()).sessions??[]).find(e=>e.active===!0);if(e?.id)return e.id}catch{}try{let e=await j.workspaces();if(e.active_session)return e.active_session}catch{}try{if(((await j.sessions()).sessions??[]).some(e=>e.id===`cli-main`))return`cli-main`}catch{}return null}async function rm(){let e=await nm();if(e===null){let e=B();e&&!e.streaming&&em(e,w(`shell.restore.noActive`));return}let t=Nr(e);!t.restored&&!t.streaming?await tm(t):Vp(t)}var im=null;function am(){im||(im=document.createElement(`div`),im.className=`switch-progress`,document.body.appendChild(im))}function om(){im?.remove(),im=null}function sm(e,t){let n=wr(e,t?.kind,t?.title);if(Mr(e),!n.streaming&&!n.restored){let e=++n.restoreSeq;am(),tm(n,()=>e===n.restoreSeq).finally(()=>{e===n.restoreSeq&&om()})}else Vp(n);return n}var cm=null,lm=null,um=null,dm=null,fm=[],pm=[],mm=``;function hm(e){let t=(e.wid??``).trim();if(t!==``)return t;let n=(e.title??``).trim(),r=/^(W\d+)/.exec(n);if(r&&r[1])return r[1];let i=e.id??``,a=i.lastIndexOf(`-`);return a>=0?i.slice(a+1):i}function gm(e){return(e.title??``).trim().replace(/^W\d+\s*[·::-]\s*/,``)||hm(e)}function _m(e){return{id:e.id??``,wid:hm(e),title:gm(e),model:String(e.model??``),status:String(e.status??``)}}function vm(e){let t=e.parentSessionId??e.parent_session??e.parent;return typeof t==`string`&&t.trim()!==``?t.trim():null}function ym(e){return e.kind===`worker`||(e.id??``).startsWith(`worker:`)}function bm(e,t){let n=e.filter(ym);if(t===``)return n.map(_m);let r=n.filter(e=>{let n=vm(e);if(n!==null)return n===t;let r=e.id??``;return(r.startsWith(`worker:`)?r.slice(7):r).startsWith(t+`-`)});return(r.length>0?r:n).map(_m)}function xm(e){let t=Fr(e.id),n=e.status!==``&&e.status!==`RUNNING`,r=N(`button`,`ws-strip-row`+(t?` running`:``)+(n?` settled`:``));return r.type=`button`,r.dataset.id=e.id,r.appendChild(N(`span`,`sess-dot`+(t?` busy`:``))),r.appendChild(N(`span`,`ws-strip-wid`,e.wid)),r.appendChild(N(`span`,`ws-strip-title`,e.title)),r.appendChild(N(`span`,`ws-strip-meta`,e.status===``?w(t?`shell.tree.running`:`shell.tree.idle`):e.status)),r.title=e.wid+` · `+e.title+(e.model?` · `+e.model:``)+w(`shell.worker.stripHint`),r.addEventListener(`click`,()=>{sm(e.id,{kind:`worker`,title:e.title})}),r}function Sm(){if(lm===null||um===null||cm===null||!cm.isConnected)return;if(pm.length===0){cm.classList.add(`hidden`),lm.replaceChildren(),um.textContent=``;return}cm.classList.remove(`hidden`);let e=document.createDocumentFragment();for(let t of pm)e.appendChild(xm(t));lm.replaceChildren(...Array.from(e.childNodes)),um.textContent=String(pm.length);let t=pm.filter(e=>Fr(e.id)).length;dm!==null&&(dm.textContent=t>0?w(`shell.worker.stripTitle`,{n:t}):w(`shell.worker.stripTitlePlain`))}function Cm(e,t){e!=null&&(fm=e);let n=t===void 0?B():t;mm=n===null?``:n.id,pm=bm(fm,mm),Sm()}function wm(e){let t=e.id??``;if(t===``||cm===null)return;let n=_m(e),r=pm.findIndex(e=>e.id===t);r>=0?pm[r]={...pm[r],...n}:pm=[...pm,n],Sm()}function Tm(){if(cm!==null)return cm;let e=document.getElementById(`main`);if(!e)return null;let t=N(`div`,`ws-strip hidden`);t.id=`wsStrip`;let n=N(`div`,`ws-strip-head`);return dm=N(`span`,`ws-strip-lead`,w(`shell.worker.stripTitlePlain`)),um=N(`span`,`ws-strip-count`,``),lm=N(`div`,`ws-strip-list`),n.appendChild(dm),n.appendChild(um),t.appendChild(n),t.appendChild(lm),e.appendChild(t),cm=t,cm}var Em=new Set([`png`,`jpg`,`jpeg`,`gif`,`webp`,`avif`,`bmp`,`svg`]),Dm=new Set([`md`,`markdown`,`mdx`]),Om=new Set([`diff`,`patch`]),km=new Set(`ts.tsx.js.jsx.mjs.cjs.py.rb.go.rs.java.c.h.cc.cpp.hpp.cs.php.sh.bash.zsh.sql.html.htm.css.scss.less.xml.json.jsonl.yaml.yml.toml.ini.cfg.conf.env.log.tex.rst.csv.tsv.txt.text`.split(`.`)),Am=new Set([...Em,...Dm,...Om,`json`,`jsonl`,`yaml`,`yml`,`toml`,`ini`,`cfg`,`conf`,`env`,`log`,`csv`,`tsv`,`txt`,`text`]),jm=new Set([`read_file`]),Mm=new Set([`read_file`,`write_file`,`list_dir`]);function Nm(e){let t=(e.split(/[?#]/)[0]??``).replace(/^.*[\\/]/,``),n=t.lastIndexOf(`.`);return n>0?t.slice(n+1).toLowerCase():``}function Pm(e){let t=Nm(e);return Em.has(t)?`image`:Dm.has(t)?`markdown`:Om.has(t)?`diff`:km.has(t)?`code`:`unknown`}function Fm(e){let t=e.trim();if(t===``||/\s/.test(t)||/^[a-z][a-z0-9+.-]*:\/\//i.test(t)||t.startsWith(`#`))return!1;let n=Nm(t);return Em.has(n)||Dm.has(n)||Om.has(n)||km.has(n)?t.includes(`/`)||t.includes(`\\`)||t.startsWith(`.`)?!0:Am.has(n):!1}function Im(e){if(typeof e==`string`){let t=e.trim();if(!t.startsWith(`{`))return null;try{return Im(JSON.parse(t))}catch{return null}}return typeof e==`object`&&e&&!Array.isArray(e)?e:null}function Lm(e,t){if(!Mm.has(e))return null;let n=Im(t),r=n&&typeof n.path==`string`?n.path.trim():``;return r===``||!Fm(r)?null:{path:r,kind:Pm(r),source:`tool`}}function Rm(){let e=`http://www.w3.org/2000/svg`,t=document.createElementNS(e,`svg`);t.setAttribute(`viewBox`,`0 0 16 16`),t.setAttribute(`width`,`13`),t.setAttribute(`height`,`13`),t.setAttribute(`fill`,`none`),t.setAttribute(`stroke`,`currentColor`),t.setAttribute(`stroke-width`,`1.3`),t.setAttribute(`stroke-linecap`,`round`),t.setAttribute(`stroke-linejoin`,`round`);let n=document.createElementNS(e,`path`);return n.setAttribute(`d`,`M1.5 3.5h4l1.5 2h7.5v7a1 1 0 0 1-1 1h-11a1 1 0 0 1-1-1z`),t.appendChild(n),t}function zm(e){let t=N(`div`,`modal-scrim`),n=N(`div`,`modal-card ws-fs`);n.appendChild(N(`div`,`modal-card-title`,e.title)),e.note&&n.appendChild(N(`div`,`side-note`,e.note));let r=``,i=N(`div`,`ws-fs-crumbs`),a=N(`div`,`ws-fs-tree`),o=N(`div`,`ws-fs-addr`),s=N(`input`,`cfg-input`);s.placeholder=w(`chat.fsbrowse.pathPlaceholder`),s.value=``;let c=N(`button`,`btn btn-soft btn-mini`,w(`chat.fsbrowse.go`));c.type=`button`,o.appendChild(s),o.appendChild(c);let l=N(`div`,`ws-fs-status`);n.appendChild(i),n.appendChild(a),n.appendChild(o),n.appendChild(l);function u(e){let t=document.createElement(`div`),n=e.split(`/`).filter(Boolean),r=N(`button`,`ws-fs-crumb`+(n.length?``:` cur`),`/`);r.type=`button`,r.title=w(`chat.fsbrowse.root`),r.addEventListener(`click`,()=>void f(`/`)),t.appendChild(r);let a=``;for(let e=0;e<n.length;e++){let r=n[e];a+=`/`+r;let i=N(`button`,`ws-fs-crumb`+(e===n.length-1?` cur`:``),r);i.type=`button`;let o=a;i.addEventListener(`click`,()=>void f(o)),t.appendChild(i)}i.replaceChildren(...t.childNodes)}function d(e){i.replaceChildren(...e)}async function f(t){let n=Array.from(i.childNodes);l.className=`ws-fs-status`,l.textContent=``,u(t),s.value=t,r=t;let o;try{o=await j.fsBrowse(t)}catch{d(n),l.className=`ws-fs-status err`,l.textContent=w(`chat.fsbrowse.unavailable`);let t=document.createElement(`div`);t.appendChild(N(`div`,`side-note`,e.fallbackNote??w(`chat.fsbrowse.fallback`))),a.replaceChildren(...t.childNodes);return}if(o.error){d(n),l.className=`ws-fs-status err`,l.textContent=w(`chat.fsbrowse.failed`,{reason:O(o.error,w(`chat.fsbrowse.manualPath`))});return}l.textContent=w(`chat.fsbrowse.selected`,{path:o.path||`/`}),l.className=`ws-fs-status ok`,r=o.path??t,s.value=o.path??t,u(o.path??t);let c=document.createElement(`div`),p=o.dirs??[];p.length||c.appendChild(N(`div`,`side-note`,w(`chat.fsbrowse.noSubdirs`)));for(let e of p){let t=N(`div`,`ws-fs-dir`),n=N(`span`,`ws-fs-dir-icon`);n.appendChild(Rm()),t.appendChild(n),t.appendChild(N(`span`,`ws-fs-dir-name`,e)),t.addEventListener(`click`,()=>{f((r?r.replace(/\/+$/,``):``)+`/`+e)}),c.appendChild(t)}a.replaceChildren(...c.childNodes)}c.addEventListener(`click`,()=>{let e=s.value.trim();e&&f(e)}),s.addEventListener(`keydown`,e=>{e.key===`Enter`&&c.click()});let p=N(`div`,`modal-card-actions`),m=N(`button`,`btn btn-soft`,w(`settings.action.cancel`));m.type=`button`;let h=N(`button`,`btn btn-accent`,e.confirmLabel);h.type=`button`;let g=null,_=!1,v=null,y=()=>{_||(_=!0,g&&(F(g),g=null),t.remove(),e.onClose?.(v))};g=P(y),m.addEventListener(`click`,y),h.addEventListener(`click`,()=>{let t=r||s.value.trim();if(!t){l.className=`ws-fs-status err`,l.textContent=w(`chat.fsbrowse.needPath`),s.focus();return}v=t,e.onPick(t,{status:l,close:y,setBusy:t=>{h.disabled=t,h.textContent=t?e.busyLabel:e.confirmLabel}})}),p.appendChild(m),p.appendChild(h),n.appendChild(p),t.appendChild(n),document.body.appendChild(t),f(``)}function Bm(e,t){return new Promise(n=>{let r=null,i=!1,a=e=>{i||(i=!0,n(e))};zm({title:e,note:t,confirmLabel:w(`chat.preview.chooseDir`),busyLabel:w(`chat.preview.busy`),onPick:(e,t)=>{r=e,t.close()},onClose:()=>a(r)})})}var Vm={ts:`typescript`,tsx:`typescript`,js:`javascript`,jsx:`javascript`,mjs:`javascript`,cjs:`javascript`,json:`json`,jsonl:`json`,md:`markdown`,markdown:`markdown`,mdx:`markdown`,py:`python`,go:`go`,java:`java`,c:`cpp`,h:`cpp`,cc:`cpp`,cpp:`cpp`,hpp:`cpp`,sh:`bash`,bash:`bash`,zsh:`bash`,sql:`sql`,html:`xml`,htm:`xml`,xml:`xml`,css:`css`,scss:`css`,less:`css`,yaml:`yaml`,yml:`yaml`};function Hm(e,t){let n=N(`pre`,`preview-code`),r=N(`code`);r.textContent=e;let i=Vm[Nm(t)];return i&&(r.className=`language-`+i),n.appendChild(r),i&&pu(n),n}function Um(e){let t=N(`div`,`preview-md`);return fl(t,e),t}function Wm(e,t){let n=N(`div`,`preview-img`),r=N(`img`);return r.src=e,r.alt=t,n.appendChild(r),n}function Gm(e){return e.startsWith(`@@`)?` hunk`:e.startsWith(`+`)&&!e.startsWith(`+++`)?` add`:e.startsWith(`-`)&&!e.startsWith(`---`)?` del`:``}function Km(e){let t=e.split(`
91
+ `).map(e=>`<span class="preview-diff-line`+Gm(e)+`">`+ye(e)+`</span>`).join(`
92
+ `),n=N(`div`,`preview-diff`);return n.replaceChildren(...ul(t)),n}function qm(e){let t=N(`div`,`preview-degrade`);return t.replaceChildren(...ul(`<div class="preview-degrade-reason">`+ye(e)+`</div>`)),t}function Jm(e){return/[\u0000-\u0008\u000b\u000c\u000e-\u001f]/.test(e)}function Ym(e){if(e.degraded!==void 0)return{node:qm(e.degraded),degraded:e.badge??e.degraded};if(e.kind===`image`)return e.url?{node:Wm(e.url,e.path),degraded:null}:{node:qm(w(`chat.preview.degradeImage`)),degraded:w(`chat.preview.badgeImage`)};let t=e.text??null;return t===null?{node:qm(w(`chat.preview.degradeNotInSession`)),degraded:w(`chat.preview.badgeNotInSession`)}:Jm(t)?{node:qm(w(`chat.preview.degradeBinary`)),degraded:w(`chat.preview.badgeBinary`)}:t.length>262144?{node:qm(w(`chat.preview.degradeTooLarge`)),degraded:w(`chat.preview.badgeTooLarge`)}:e.kind===`markdown`?{node:Um(t),degraded:null}:e.kind===`diff`?{node:Km(t),degraded:null}:e.kind===`code`?{node:Hm(t,e.path),degraded:null}:{node:qm(w(`chat.preview.degradeUnsupported`)),degraded:w(`chat.preview.badgeUnsupported`)}}var Xm=null,Zm=null,Qm=null,$m=null,eh=null,th=null,nh=0,rh=``;function ih(e){return e.replace(/^.*[\\/]/,``)||e}function ah(e){let t=navigator.clipboard;t&&typeof t.writeText==`function`&&t.writeText(e).catch(()=>{})}function oh(e){zm({title:w(`chat.preview.manager`),note:w(`chat.preview.target`,{path:e}),confirmLabel:w(`chat.preview.chooseDir`),busyLabel:w(`chat.preview.busy`),onPick:(e,t)=>t.close()})}function sh(){let e=N(`div`,`preview-host hidden`),t=N(`div`,`preview-panel`),n=N(`div`,`preview-head`);Qm=N(`span`,`preview-title`),$m=N(`span`,`preview-path`),n.appendChild(Qm),n.appendChild($m),eh=N(`span`,`preview-note hidden`),n.appendChild(eh);let r=N(`button`,`preview-close`,`×`);r.type=`button`,r.title=w(`chat.preview.close`),r.setAttribute(`aria-label`,w(`chat.preview.close`)),r.addEventListener(`click`,dh),n.appendChild(r),t.appendChild(n),Zm=N(`div`,`preview-body`),t.appendChild(Zm);let i=N(`div`,`preview-actions`),a=N(`button`,`preview-action`,w(`chat.preview.copyPath`));a.type=`button`,a.addEventListener(`click`,()=>ah(rh)),i.appendChild(a);let o=N(`button`,`preview-action`,w(`chat.preview.openInManager`));o.type=`button`,o.addEventListener(`click`,()=>oh(rh)),i.appendChild(o),t.appendChild(i),e.appendChild(t),document.body.appendChild(e),Xm=e}function ch(){(!Xm||!Xm.isConnected||!Zm)&&sh()}async function lh(e,t,n){let r=null,i,a,o=!1;if(!e.url&&e.loadFull)try{let t=await e.loadFull();`degraded`in t?(i=t.degraded,a=t.badge):(r=t.text,o=t.truncated===!0)}catch{i=w(`chat.preview.degradeReadFailed`)}else if(!e.url&&e.load)try{r=await e.load()}catch{r=null}if(t!==nh)return;let s=Ym({path:e.candidate.path,kind:e.candidate.kind,text:r,url:e.url??null,degraded:i,badge:a});t===nh&&(n.replaceChildren(s.node),n.classList.toggle(`is-degraded`,s.degraded!==null),eh&&(eh.textContent=o?w(`chat.preview.truncated`):``,eh.classList.toggle(`hidden`,!o)))}function uh(e){let t=++nh;ch(),Xm&&Zm&&Qm&&$m&&(rh=e.candidate.path,Qm.textContent=ih(e.candidate.path),$m.textContent=e.candidate.path,$m.title=e.candidate.path,Xm.classList.remove(`hidden`),eh&&(eh.textContent=``,eh.classList.add(`hidden`)),th===null&&(th=P(dh)),lh(e,t,Zm))}function dh(){nh+=1,Xm&&(Xm.classList.add(`hidden`),Zm&&Zm.replaceChildren()),th!==null&&(F(th),th=null)}var fh=60,ph=`collapsed`,mh=`expanded`,hh=`<svg viewBox="0 0 16 16" width="14" height="14" aria-hidden="true" focusable="false"><path d="M6 3.5 10.5 8 6 12.5" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"></path></svg>`;function gh(e,t){let n=typeof e==`string`?e.replace(/\s+/g,` `).trim():``;return n===``?t:n.length<=60?n:n.slice(0,60)+`…`}function _h(e){if(typeof e==`string`){let t=e.trim();if(!t.startsWith(`{`))return``;try{return _h(JSON.parse(t))}catch{return``}}if(typeof e==`object`&&e){let t=e.desc;return typeof t==`string`?t:``}return``}function vh(e){e.step=0}function yh(e){if(typeof e==`string`)return e;try{return JSON.stringify(e)}catch{return String(e)}}function bh(e){let t=e.replace(/\s+/g,` `).trim();return t.length<=fh?t:t.slice(0,fh)+`…`}function xh(e){let t=N(`div`,`mcol`),n=N(`div`,`msg tool`),r=N(`div`,`msg-caption`);r.appendChild(N(`span`,`who`,w(`chat.tool.title`))),r.appendChild(N(`span`,null,e.name)),n.appendChild(r);let i=N(`div`,`bubble`),a=document.createElement(`details`);a.className=`toolcard running`,a.open=!1;let o=document.createElement(`summary`);o.className=`toolcard-head`,o.setAttribute(`aria-expanded`,`false`);let s=N(`div`,`toolcard-row1`);s.appendChild(N(`span`,`step-tag`,w(`chat.tool.step`,{n:e.step})));let c=N(`span`,`toolcard-name`,gh(e.desc,e.name));c.title=e.name,s.appendChild(c);let l=N(`span`,`toolcard-state`);l.appendChild(N(`span`,`ts-dot`)),l.appendChild(N(`span`,`ts-label`,w(`chat.tool.running`))),s.appendChild(l);let u=N(`button`,`toolcard-copy`,w(`chat.tool.copy`));u.type=`button`,u.title=w(`chat.tool.copyHint`),u.addEventListener(`click`,t=>{t.preventDefault(),t.stopPropagation();let n=a.querySelector(`.tool-out`),r=e.argsText+`
93
+ `+(n?.textContent??``);navigator.clipboard.writeText(r).catch(()=>{})}),s.appendChild(u);let d=N(`span`,`toolcard-fold`);d.setAttribute(`data-fold`,ph),d.innerHTML=hh,s.appendChild(d),o.appendChild(s),a.appendChild(o);let f=N(`div`,`toolcard-body`),p=N(`div`,`toolcard-args-preview`),m=bh(e.argsText);p.textContent=m?w(`chat.tool.args`,{text:m}):w(`chat.tool.argsNone`),f.appendChild(p),f.appendChild(N(`pre`,`tool-args`,e.argsText));let h=N(`div`,`toolcard-result-preview`);h.textContent=``,f.appendChild(h);let g=Lm(e.name,e.argsText);if(g!==null&&jm.has(e.name)){let e=g,t=N(`button`,`toolcard-preview`,w(`chat.tool.preview`));t.type=`button`,t.title=w(`chat.tool.previewHint`),t.addEventListener(`click`,t=>{t.preventDefault();let n=a.querySelector(`.tool-out`);uh({candidate:e,load:async()=>n?.textContent??null})}),f.appendChild(t)}return a.appendChild(f),a.addEventListener(`toggle`,()=>{o.setAttribute(`aria-expanded`,a.open?`true`:`false`),d.setAttribute(`data-fold`,a.open?mh:ph)}),i.appendChild(a),n.appendChild(i),t.appendChild(n),{toolName:e.name,col:t,card:a,label:l.querySelector(`.ts-label`)??l,resultPv:h,body:f}}function Sh(e,t,n,r){e.card.classList.remove(`running`),e.card.classList.add(n?`err`:`ok`),e.label.textContent=w(n?`chat.tool.failed`:`chat.tool.done`);let i=bh(t);e.resultPv.textContent=i?w(`chat.tool.result`,{text:i}):``,i&&e.resultPv.classList.add(`has`),e.body.querySelector(`.tool-out`)||e.body.appendChild(N(`pre`,`tool-out`+(n?` err-c`:``),t));let a=sf(r);a.length>0&&!e.body.querySelector(`.attach-grid`)&&e.body.appendChild(Bu(of(a)))}function Ch(e,t,n){e.step+=1;let r=xh({step:e.step,name:String(t.name||`tool`),argsText:yh(t.args),desc:_h(t.args)});return(n??e.el).appendChild(r.col),n||W(e),e.ops.set(String(t.id),r),r.col}function wh(e,t){if(e!==`spawn_worker`||t.ok===!1)return;let n=t.value;if(typeof n!=`object`||!n)return;let r=n,i=typeof r.sessionId==`string`?r.sessionId:``;if(i===``)return;let a=typeof r.wid==`string`?r.wid:``,o=typeof r.title==`string`?r.title:``;wm({id:`worker:`+i,kind:`worker`,...a===``?{}:{wid:a},...o===``?{}:{title:o},workspace:`engine`})}function Th(e,t){wh(e.ops.get(String(t.id))?.toolName??``,t);let n=e.ops.get(String(t.id));if(!n)return;let r=t.ok===!1||!!t.error,i=r?w(`chat.tool.failed`):t.decision===`deny`?w(`chat.tool.denied`):t.decision===`ask`?w(`chat.tool.ask`):w(`chat.tool.done`);Sh(n,t.error?String(t.error):yh(t.value),r||t.decision===`deny`),n.label.textContent=i,W(e)}var Eh=null;function Dh(){Eh&&Vu(Eh,Yd(),e=>{Zd(e),Dh()},()=>Dh())}function Oh(e,t){Eh=N(`div`,`attach-tray hidden`);let n=t??e;n===e?e.appendChild(Eh):n.parentElement?.insertBefore(Eh,n)??e.insertBefore(Eh,e.firstChild)}var kh=new Map,Ah=null,jh=null,Mh=0;function Nh(){return B()?.id??``}function Ph(e){return kh.get(e)??[]}function Fh(){if(!Ah||!jh)return;let e=jh.getBoundingClientRect().height;if(e<=0)return;let t=jh.querySelector(`.attach-tray`),n=t?t.offsetHeight:0;Ah.style.bottom=e+n+`px`}function Ih(e,t){let n=N(`div`,`quote-chip`);n.appendChild(N(`span`,`quote-chip-src`,e.source.label+(e.truncated?w(`chat.user.truncatedSuffix`):``)));let r=e.text.replace(/\s+/g,` `).trim();n.appendChild(N(`span`,`quote-chip-text`,r===``?w(`chat.quote.empty`):r.slice(0,40))),n.appendChild(N(`span`,`quote-chip-bytes`,String(e.bytes)+` B`));let i=N(`button`,`quote-chip-remove`,`×`);return i.type=`button`,i.title=w(`chat.quote.removeHint`),i.setAttribute(`aria-label`,w(`chat.quote.removeAria`,{label:e.source.label})),i.addEventListener(`click`,()=>t(e)),n.appendChild(i),n}function Lh(){if(!Ah)return;let e=Ph(Nh());if(e.length===0){Ah.classList.add(`hidden`),Ah.replaceChildren();return}Ah.classList.remove(`hidden`),Fh();let t=document.createElement(`div`);for(let n of e)t.appendChild(Ih(n,Rh));Ah.replaceChildren(...Array.from(t.childNodes)),Fh()}function Rh(e){let t=Nh(),n=Ph(t),r=n.indexOf(e);r>=0&&(n.splice(r,1),kh.set(t,n)),Lh()}function zh(e=Nh()){let t=Ph(e);return kh.set(e,[]),Nh()===e&&Lh(),t}function Bh(e,t){let n=Ph(e),r=new Set(n.map(e=>Uf(e))),i=t.filter(e=>!r.has(Uf(e)));kh.set(e,[...i,...n]),Nh()===e&&Lh()}async function Vh(e){let t=Nh(),n=Bf(e.text,Pf),r=await Hf(n.text),i=Ph(t),a=r===``?`x:`+n.text:r;if(i.some(e=>Uf(e)===a))return`duplicate`;if(i.length>=8)return`full`;let o=Ff-i.reduce((e,t)=>e+t.bytes,0);if(o<256)return`full`;let s=Bf(e.text,Math.min(Pf,o)),c=Wf({id:`q`+String(++Mh),source:e.source,text:s.text,hash:r,range:e.range,format:e.format,filePath:e.filePath,lineRange:e.lineRange});return c.truncated=s.truncated,i.push(c),kh.set(t,i),Nh()===t&&Lh(),`added`}function Hh(e,t){Ah||(jh=t??e,Ah=N(`div`,`quote-tray hidden`),Ah.id=`quoteTray`,jh.appendChild(Ah),Br(()=>Lh()))}var Uh=[];function Wh(e){let t=Uh.findIndex(t=>t.name===e.name);t>=0?Uh[t]=e:Uh.push(e)}function Gh(){return Uh}var Kh=3e4;function qh(e){return e.signal!==null&&e.signal!==``?w(`chat.run.signal`,{signal:e.signal}):e.exit_code===null?w(`chat.run.exitUnknown`):w(`chat.run.exit`,{code:e.exit_code,status:e.exit_code===0?w(`chat.run.success`):w(`chat.run.failure`)})}function Jh(e,t,n){if(t===``)return null;let r=N(`div`,`exec-stream `+n);return r.appendChild(N(`div`,`exec-stream-label`,e)),r.appendChild(N(`pre`,`exec-stream-body`,t)),r}function Yh(e){if(!e)return``;let t=[];return e.provider&&t.push(e.provider),t.push(e.net_isolated===!0?w(`chat.run.netIsolated`):w(`chat.run.netOnline`)),e.tmp_private===!0&&t.push(w(`chat.run.tmpPrivate`)),e.seccomp===!0&&t.push(w(`chat.run.seccomp`)),t.join(` · `)}function Xh(e,t){let n=N(`div`,`mcol`),r=N(`div`,`msg exec`),i=N(`div`,`msg-caption`);i.appendChild(N(`span`,`who`,w(`chat.run.cmd`))),i.appendChild(N(`span`,null,xe())),r.appendChild(i);let a=N(`div`,`bubble exec-bubble`);return a.appendChild(N(`pre`,`exec-cmd`,t)),r.appendChild(a),n.appendChild(r),e.el.appendChild(n),to(e),n}function Zh(e,t){let n=N(`div`,`mcol`),r=N(`div`,`msg exec exec-note`),i=N(`div`,`bubble info-bubble`);i.appendChild(N(`div`,`content info-content`,t)),r.appendChild(i),n.appendChild(r),e.el.appendChild(n),to(e)}function Qh(e,t){let n=N(`div`,`mcol`),r=N(`div`,`msg exec`),i=N(`div`,`bubble exec-bubble`),a=N(`div`,`exec-block`);return i.appendChild(a),r.appendChild(i),n.appendChild(r),e.el.appendChild(n),to(e),{root:n,fill(n){let r=N(`div`,`exec-head`);r.appendChild(N(`span`,`exec-cmd`,t)),r.appendChild(N(`span`,`exec-code`+(n.failed?` err`:` ok`),n.codeLabel)),r.appendChild(N(`span`,`exec-dur`,String(n.durationMs)+` ms`)),a.appendChild(r);let i=Yh(n.sandbox);i!==``&&a.appendChild(N(`div`,`exec-sandbox`,i));let o=Jh(w(`chat.run.stdout`),n.stdout,`out`);o&&a.appendChild(o);let s=Jh(w(`chat.run.stderr`),n.stderr,`err`);s&&a.appendChild(s),!o&&!s&&a.appendChild(N(`div`,`exec-sandbox`,w(`chat.run.noOutput`))),W(e,!0)}}}async function $h(e,t){let n=t.trim();if(n===``)return;Xh(e,n);let r=Qh(e,n);W(e);try{let t=await j.exec({command:n,session:e.id===``?void 0:e.id,timeout_ms:Kh});r.fill({codeLabel:qh(t),durationMs:t.duration_ms,stdout:t.stdout??``,stderr:t.stderr??``,failed:t.exit_code!==0||t.signal!==null&&t.signal!==``,sandbox:t.sandbox})}catch(t){r.root.remove(),Zh(e,t instanceof D&&(t.status===404||t.status===405||t.status===501)?w(`chat.run.unsupported`):w(`chat.run.failed`,{reason:O(t,w(`settings.common.retryLater`))})),W(e,!0)}}function eg(e,t,n){gf(e,t,n)}var tg=!1;function ng(){tg||(tg=!0,Wh({name:`run`,desc:w(`chat.command.run.desc`),args:w(`chat.command.run.args`),async run(e){let t=e.args.trim();return t===``?(eg(e.ctx,w(`chat.command.run.usage`),`warn`),!0):(await $h(e.ctx,t),!0)}}),Wh({name:`goal`,desc:w(`chat.command.goal.desc`),args:w(`chat.command.goal.args`),async run(e){let t=e.args.trim();if(t===``){let t=Zr(e.ctx);return eg(e.ctx,t===``?w(`chat.command.goal.none`):w(`chat.command.goal.current`,{text:t})),!0}try{let n=await Xr(e.ctx,t===`done`?``:t);eg(e.ctx,n?w(`chat.command.goal.set`,{text:n.text}):w(`chat.command.goal.cleared`))}catch(t){eg(e.ctx,t instanceof Error?t.message:w(`chat.command.goal.saveFailed`),`err`)}return!0}}),Wh({name:`model`,desc:w(`chat.command.model.desc`),args:w(`chat.command.model.args`),async run(e){let t=e.args.trim();if(t===``)return eg(e.ctx,w(`chat.command.model.usage`),`warn`),!0;let n=await At(e.ctx.id,t);return n.kind===`ok`?eg(e.ctx,w(`chat.command.model.switched`)):n.kind===`busy`?eg(e.ctx,w(`chat.command.model.busy`),`warn`):eg(e.ctx,n.text,`err`),!0}}),Wh({name:`compact`,desc:w(`chat.command.compact.desc`),args:``,async run(e){return await fv(e.ctx),!0}}))}var J=null,rg=null,ig=null,ag=[],og=0,sg=null,cg=0,lg=null;function ug(){if(!J)return;let e=document.createElement(`div`);ag.forEach((t,n)=>{let r=N(`div`,`cmd-row`+(n===og?` active`:``)+(t.isDir?` dir`:``));r.appendChild(N(`span`,`cmd-name`,t.label)),r.appendChild(N(`span`,`cmd-desc`,t.desc)),t.meta!==void 0&&t.meta!==``&&r.appendChild(N(`span`,`cmd-args`,t.meta)),r.setAttribute(`role`,`option`),r.setAttribute(`aria-selected`,n===og?`true`:`false`),r.addEventListener(`mousedown`,e=>{e.preventDefault(),dg(n)}),e.appendChild(r)}),J.replaceChildren(...Array.from(e.childNodes));let t=J.querySelector(`.cmd-row.active`);t&&typeof t.scrollIntoView==`function`&&t.scrollIntoView({block:`nearest`})}function dg(e){let t=ag[e];t&&lg&&lg(t)}function fg(){return J!==null&&!J.classList.contains(`hidden`)}function pg(e){sg=e}async function mg(e){if(!J||!sg)return;let t=++cg,n=[];try{n=await sg(e)}catch{n=[]}if(t===cg){if(ag=n,ag.length===0){hg();return}og>=ag.length&&(og=0),J.classList.remove(`hidden`),_g(),ug(),ig===null&&(ig=P(hg))}}function hg(){cg+=1,J&&(J.classList.add(`hidden`),ag=[],og=0,ig!==null&&(F(ig),ig=null))}function gg(e){return fg()?e.key===`Escape`?(e.preventDefault(),hg(),!0):e.key===`ArrowDown`?(e.preventDefault(),og=(og+1)%ag.length,ug(),!0):e.key===`ArrowUp`?(e.preventDefault(),og=(og-1+ag.length)%ag.length,ug(),!0):e.key===`Enter`||e.key===`Tab`?(e.preventDefault(),dg(og),!0):!1:!1}function _g(){if(!J||!rg)return;let e=rg.getBoundingClientRect();J.style.left=Math.max(8,e.left)+`px`,J.style.bottom=Math.max(8,window.innerHeight-e.top+6)+`px`}function vg(e,t){J||(rg=e,lg=t,J=N(`div`,`cmd-popup hidden`),J.id=`cmdPopup`,J.setAttribute(`role`,`listbox`),document.body.appendChild(J))}var yg=!1,bg=new Set,xg=[],Sg=[],Cg=null,wg=``,Tg=`active`,Eg=null,Dg=null,Og=``,kg=new Map,Ag=5e3;function jg(){return yg}function Mg(e){yg=e}function Ng(){return xg}function Pg(e){xg=e}function Fg(){return Sg}function Ig(e){Sg=e}function Lg(){return Cg}function Rg(e){Cg=e}function zg(){return wg}function Bg(e){wg=e}function Vg(){return Tg}function Hg(e){Tg=e}function Ug(){return Eg}function Wg(e){Eg=e}function Gg(){return Dg}function Kg(e){Dg=e}function qg(){return Og}function Jg(e){Og=e}function Yg(){return kg}function Xg(e){kg=e}function Zg(e){return e.replace(/\\/g,`/`)}function Qg(){let e=(B()?.workspace??``).trim();return e===``?``:e.startsWith(`/`)||/^[A-Za-z]:[\\/]/.test(e)?e:Ng().find(t=>t.name===e)?.path??``}function $g(e){return e.type===`dir`?w(`chat.mention.dir`):e.size===null?w(`chat.mention.file`):e.size<1024?e.size+` B`:e.size<1048576?(e.size/1024).toFixed(1)+` KB`:(e.size/1048576).toFixed(1)+` MB`}async function e_(e){let t=Qg();if(t===``)return{path:``,items:[],notice:w(`chat.mention.noWorkspace`)};let n=Zg(e),r=n.lastIndexOf(`/`),i=r>=0?n.slice(0,r+1):``,a=r>=0?n.slice(r+1):n,o=Zg(t).replace(/\/+$/,``)+(i===``?``:`/`+i.replace(/^\/+/,``).replace(/\/+$/,``)),s;try{s=await j.fsList(o)}catch{return{path:o,items:[],notice:w(`chat.mention.unavailable`)}}if(s.error!==void 0&&s.error!==``)return{path:o,items:[],notice:w(`chat.mention.openFailed`,{reason:s.error})};let c=s.entries??[],l=a.toLowerCase();return{path:o,items:(l===``?c:c.filter(e=>e.name.toLowerCase().startsWith(l))).map(e=>{let t=i+e.name,n=e.type===`dir`?t+`/`:t;return{label:n,desc:$g(e),isDir:e.type===`dir`,value:n}}),notice:s.truncated===!0?w(`chat.mention.truncated`):``}}function t_(e){let t=e.trim();if(!t.startsWith(`!`))return e;let n=t.slice(1).trim();return n===``?`/`:`/run `+n}function n_(e){let t=t_(e).trim();return t.startsWith(`/`)&&t.length>1}function r_(e){let t=t_(e).trim().slice(1),n=t.search(/\s/);return n<0?{name:t,args:``}:{name:t.slice(0,n),args:t.slice(n+1)}}function i_(e,t){let n=Math.min(t,e.length)-1;for(;n>=0&&!/\s/.test(e[n]);){if(e[n]===`@`)return{start:n,after:e.slice(n+1,t)};--n}return null}async function a_(e,t){let n=t??B();if(!n||i_(e,e.length)!==null)return!1;let{name:r,args:i}=r_(e);if(r===``)return!1;let a=Gh().find(e=>e.name===r);return a?(hg(),await a.run({raw:e,args:i,ctx:n})):(gf(n,w(`chat.command.unknown`,{name:r}),`warn`),!0)}function o_(){return document.getElementById(`input`)}function s_(e){let t=o_();t&&(t.value=e.value+(e.value.endsWith(` `)?``:` `),t.dispatchEvent(new Event(`input`,{bubbles:!0})),hg(),t.focus())}function c_(e){let t=o_();if(!t)return;let n=t.selectionStart??t.value.length,r=i_(t.value,n);if(r===null)return;let i=t.value.slice(0,r.start),a=t.value.slice(n);t.value=i+`@`+e.value+a;let o=i.length+1+e.value.length;t.setSelectionRange(o,o),t.dispatchEvent(new Event(`input`,{bubbles:!0})),e.value.endsWith(`/`)?d_(t.value,o):hg(),t.focus()}async function l_(e){let t=await e_(e);if(t.notice!==``){let e=B();e&&gf(e,t.notice,`warn`)}return t.items}function u_(e){let t=e.toLowerCase();return Gh().filter(e=>e.name.toLowerCase().startsWith(t)).map(e=>({label:`/`+e.name,desc:e.desc,meta:e.args,value:`/`+e.name}))}async function d_(e,t){let n=i_(e,t??e.length);if(n!==null){pg(l_),await mg(n.after);return}if(e.startsWith(`/`)&&!/\s/.test(e.slice(1))){pg(u_),await mg(e.slice(1));return}pg(null),hg()}var f_=!1;function p_(){if(f_)return;f_=!0,ng();let e=o_();e&&(Br(()=>ei()),Kr(()=>ei()),pg(null),vg(e,e=>{e.label.startsWith(`/`)?s_(e):c_(e)}),e.addEventListener(`input`,()=>void d_(e.value,e.selectionStart??e.value.length)),e.addEventListener(`keydown`,e=>{gg(e)}),e.addEventListener(`blur`,()=>hg()))}function m_(e){return n_(e)}function h_(e){return gg(e)}var g_=240;function __(){return w(`chat.input.placeholderIdle`)}function v_(){return w(`chat.input.placeholderSteer`)}function y_(){return w(`chat.input.placeholderQueue`)}function b_(){return w(`chat.input.placeholderWorker`)}var x_=null,S_=null,C_=null,w_=null,T_=null,E_=`steer`,D_=`idle`;function O_(e){E_=e,A_()}function k_(){O_(E_===`steer`?`queue`:`steer`)}function A_(){if(T_){let e=T_.querySelector(`.sl-mode-label`);e?e.textContent=w(E_===`steer`?`chat.input.interject`:`chat.input.queue`):T_.textContent=w(E_===`steer`?`chat.input.interject`:`chat.input.queue`),T_.title=w(E_===`steer`?`chat.input.modeSteerTitle`:`chat.input.modeQueueTitle`),T_.classList.toggle(`queue`,E_===`queue`)}S_&&D_===`interject`&&(S_.placeholder=E_===`steer`?v_():y_()),C_&&(C_.disabled=!1,C_.textContent=w(D_===`worker`?`chat.input.send`:D_===`interject`?E_===`steer`?`chat.input.interject`:`chat.input.queue`:`chat.input.send`),C_.title=w(D_===`worker`?`chat.input.sendWorkerTitle`:D_===`interject`?E_===`steer`?`chat.input.steerTitle`:`chat.input.queueTitle`:`chat.input.sendTitle`))}function j_(e){let t=M(`#input`);S_=t,x_=M(`#inputbar`),C_=M(`#btnSend`);let n=M(`#slStop`);w_=n,T_=document.getElementById(`btnMode`);let r=()=>{t.style.height=`auto`,t.style.height=Math.min(t.scrollHeight,g_)+`px`};C_.addEventListener(`click`,()=>e.send(t.value,E_)),T_?.addEventListener(`click`,()=>k_()),n.addEventListener(`click`,()=>{n.disabled||(n.disabled=!0,e.cancel())}),t.addEventListener(`keydown`,n=>{if(h_(n)||n.key!==`Enter`||n.shiftKey)return;n.preventDefault();let r=n.ctrlKey||n.metaKey?E_===`steer`?`queue`:`steer`:E_;e.send(t.value,r)}),t.addEventListener(`input`,r),J_(t,x_),A_(),window.setTimeout(r,0)}function M_(){let e=S_??M(`#input`);e.value=``,e.style.height=`auto`,e.style.height=Math.min(e.scrollHeight,g_)+`px`}function N_(e){let t=S_??M(`#input`);t.value=e,t.style.height=`auto`,t.style.height=Math.min(t.scrollHeight,g_)+`px`}function P_(e){w_&&(w_.classList.toggle(`hidden`,!e),w_.disabled=!e)}function F_(e){D_=e;let t=S_;x_&&(x_.classList.toggle(`interject`,e===`interject`),x_.classList.toggle(`worker`,e===`worker`),x_.classList.remove(`readonly`)),T_&&T_.classList.toggle(`hidden`,e!==`interject`),t&&(t.placeholder=e===`worker`?b_():e===`interject`?E_===`steer`?v_():y_():__(),t.readOnly=!1),A_()}var I_=null,L_=null,R_=null,z_=`<svg viewBox="0 0 24 24" width="16" height="16" aria-hidden="true" focusable="false"><path d="M21.44 11.05l-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66l-9.2 9.19a2 2 0 0 1-2.83-2.83l8.49-8.48" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"></path></svg>`;function B_(){return x_??document.getElementById(`inputbar`)}function V_(){let e=Od(),t=jd();L_&&(L_.classList.toggle(`hidden`,!1),L_.disabled=!1,L_.title=t===``?w(`chat.input.attachTitle`):t),e||ef(),Dh()}window.addEventListener(`studio:config-saved`,()=>{Ed(),Dd().then(V_)});function H_(e){I_&&(I_.textContent=e,I_.classList.toggle(`hidden`,e===``))}function U_(e){let t=jd(),n=[],r=0;for(let i=0;i<e.length;i++){let a=e[i];a&&(t!==``&&a.type.indexOf(`image/`)===0?r+=1:n.push(a))}let i=Jd(n);Dh(),r>0?H_(t):i>0&&H_(w(`chat.input.rejectedCount`,{n:i}))}function W_(e){return td(e)?e.type.indexOf(`image/`)!==0||jd()===``:!1}function G_(e){let t=e.clipboardData;if(!t)return[];let n=[],r=t.items;if(r)for(let e=0;e<r.length;e++){let t=r[e];if(t&&t.kind===`file`&&W_({name:``,type:t.type})){let e=t.getAsFile();e&&n.push(e)}}if(n.length===0&&t.files)for(let e=0;e<t.files.length;e++){let r=t.files[e];r&&W_(r)&&n.push(r)}return n}function K_(e){let t=e.dataTransfer;return t?t.types&&Array.prototype.indexOf.call(t.types,`Files`)>=0?!0:!!t.files&&t.files.length>0:!1}function q_(){let e=jd();e!==``&&H_(e),R_?.click()}function J_(e,t){I_=N(`div`,`attach-note hidden`);let n=t.querySelector(`.input-box`),r=t.querySelector(`.input-side`);Oh(t,n),Hh(t,n),L_=document.createElement(`button`),L_.id=`btnAttach`,L_.type=`button`,L_.className=`btn btn-soft btn-icon attach-inline`,L_.innerHTML=z_,L_.title=w(`chat.input.attachTitle`),L_.setAttribute(`aria-label`,w(`chat.input.attachAria`)),L_.addEventListener(`click`,()=>q_()),n?n.appendChild(L_):r&&r.firstChild?r.insertBefore(L_,r.firstChild):(r??t).appendChild(L_),R_=document.createElement(`input`),R_.id=`attachInput`,R_.type=`file`,R_.accept=gd,R_.multiple=!0,R_.className=`attach-file hidden`,R_.addEventListener(`change`,()=>{if(R_&&R_.files){let e=[];for(let t=0;t<R_.files.length;t++){let n=R_.files[t];n&&td(n)&&e.push(n)}e.length>0&&U_(e)}R_&&(R_.value=``)}),t.insertBefore(I_,t.firstChild),t.appendChild(R_),e.addEventListener(`paste`,e=>{let t=G_(e);t.length>0&&U_(t)}),document.addEventListener(`dragover`,e=>{K_(e)&&(e.preventDefault(),B_()?.classList.add(`drop-active`))}),document.addEventListener(`dragleave`,e=>{K_(e)&&B_()?.classList.remove(`drop-active`)}),document.addEventListener(`drop`,e=>{B_()?.classList.remove(`drop-active`);let t=e.dataTransfer;t&&t.files&&t.files.length!==0&&(e.preventDefault(),U_(t.files))}),cd(Dh),V_(),Dd().then(V_)}var Y_=M(`#statusText`),X_=M(`#statusDot`),Z_=M(`#statusTurn`),Q_=M(`#statusTime`);function Y(e,t){Y_.textContent=e,X_.className=`dot`+(t?` `+t:``)}function $_(e){Z_.textContent=typeof e==`number`&&e>=1?w(`shell.status.turn`,{n:e}):w(`shell.status.turnNone`)}function ev(){R.streaming&&(Q_.textContent=be((Date.now()-R.t0)/1e3))}function tv(){R.t0=Date.now(),nv(),R.msgTimer=window.setInterval(ev,500),ev()}function nv(){R.msgTimer!==null&&(window.clearInterval(R.msgTimer),R.msgTimer=null)}function rv(){nv(),R.t0>0&&(Q_.textContent=be((Date.now()-R.t0)/1e3))}var iv=null;function av(){iv!==null&&(window.clearTimeout(iv),iv=null)}function X(e,t,n=6e3){av(),Y(e,t),iv=window.setTimeout(()=>{iv=null,!R.streaming&&(R.conn===`online`?Y(w(`shell.status.online`),`ok`):R.conn===`down`&&Y(w(`shell.status.reconnecting`),`err`))},n)}function ov(e){return e.id===``?void 0:e.id}function sv(e){return e instanceof Error?e.message:String(e)}var cv=!1,lv=new Map,uv=5e3;function dv(e){let t=typeof e.session==`string`&&e.session!==``?e.session:null,n=t?Sr(t)??null:B();n&&(Date.now()-(lv.get(n.id)??0)<uv||n.streaming||(async()=>{await tm(n),V(n)&&X(e.note||w(`shell.compact.done`),`ok`)})())}async function fv(e){if(!cv){cv=!0,M_(),e.draft=``;try{let t=ov(e);if(t===void 0){let e=await nm();if(e===null){X(w(`shell.compact.noSession`),`err`,8e3);return}t=e}Y(w(`shell.compact.busy`),`busy`);let n=await j.compactSession(t);if(n.compacted===!1){X(n.note||w(`shell.compact.notNeeded`),`ok`);return}lv.set(t,Date.now()),X(n.note||w(`shell.compact.historyDone`),`ok`),await tm(e)}catch(e){X(w(`shell.compact.failed`,{reason:sv(e)}),`err`,8e3)}finally{cv=!1}}}var pv=null;function mv(){return pv}function hv(e){pv=e}function gv(e){return e===`read_roots`||e===`write_roots`?`roots`:e===`net_hosts`?`hosts`:e===`tool_extra`?`tools`:null}function _v(e){return e?Array.from(new Set(e.map(e=>e.trim()).filter(e=>e!==``))).sort():[]}function vv(e,t){let n=gv(e),r={};return n!==null&&(r[n]=_v(n===`roots`?t.roots:n===`hosts`?t.hosts:t.tools)),JSON.stringify({cap:e,scope:r})}async function yv(e,t){let n=vv(e,t),r=new TextEncoder().encode(n),i=globalThis.crypto?.subtle;if(i)try{let e=await i.digest(`SHA-256`,r);return bv(new Uint8Array(e))}catch{}return xv(r)}function bv(e){let t=``;for(let n of e)t+=n.toString(16).padStart(2,`0`);return t}function xv(e){return bv(wv(e))}var Sv=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]);function Cv(e,t){return(e>>>t|e<<32-t)>>>0}function wv(e){let t=e.length,n=Math.ceil((t+9)/64),r=new Uint8Array(n*64);r.set(e),r[t]=128;let i=new DataView(r.buffer);i.setUint32(n*64-8,Math.floor(t/536870912)),i.setUint32(n*64-4,t*8>>>0);let a=1779033703,o=3144134277,s=1013904242,c=2773480762,l=1359893119,u=2600822924,d=528734635,f=1541459225,p=new Uint32Array(64);for(let e=0;e<n;e++){for(let t=0;t<16;t++)p[t]=i.getUint32(e*64+t*4);for(let e=16;e<64;e++){let t=p[e-15],n=p[e-2],r=Cv(t,7)^Cv(t,18)^t>>>3,i=Cv(n,17)^Cv(n,19)^n>>>10;p[e]=p[e-16]+r+p[e-7]+i>>>0}let t=a,n=o,r=s,m=c,h=l,g=u,_=d,v=f;for(let e=0;e<64;e++){let i=Cv(h,6)^Cv(h,11)^Cv(h,25),a=h&g^~h&_,o=v+i+a+Sv[e]+p[e]>>>0,s=(Cv(t,2)^Cv(t,13)^Cv(t,22))+(t&n^t&r^n&r)>>>0;v=_,_=g,g=h,h=m+o>>>0,m=r,r=n,n=t,t=o+s>>>0}a=a+t>>>0,o=o+n>>>0,s=s+r>>>0,c=c+m>>>0,l=l+h>>>0,u=u+g>>>0,d=d+_>>>0,f=f+v>>>0}let m=new Uint8Array(32),h=new DataView(m.buffer);return[a,o,s,c,l,u,d,f].forEach((e,t)=>h.setUint32(t*4,e)),m}var Tv=new Set([`network`,`write_roots`,`unsandboxed`]);function Ev(){return[{cap:`network`,label:w(`grants.cap.network.label`),impact:w(`grants.cap.network.impact`),extra:w(`grants.cap.network.extra`),kind:`bool`,danger:!0,confirmWord:``,defaultTtl:0,maxTtl:3600},{cap:`write_roots`,label:w(`grants.cap.writeRoots.label`),impact:w(`grants.cap.writeRoots.impact`),kind:`dirs`,danger:!0,confirmWord:``,defaultTtl:0,maxTtl:86400},{cap:`read_roots`,label:w(`grants.cap.readRoots.label`),impact:w(`grants.cap.readRoots.impact`),kind:`dirs`,danger:!1,confirmWord:``,defaultTtl:0,maxTtl:86400},{cap:`net_hosts`,label:w(`grants.cap.netHosts.label`),impact:w(`grants.cap.netHosts.impact`),kind:`hosts`,danger:!1,confirmWord:``,defaultTtl:0,maxTtl:86400},{cap:`tool_extra`,label:w(`grants.cap.toolExtra.label`),impact:w(`grants.cap.toolExtra.impact`),kind:`tools`,danger:!1,reserved:!0,confirmWord:``,defaultTtl:0,maxTtl:86400},{cap:`unsandboxed`,label:w(`grants.cap.unsandboxed.label`),impact:w(`grants.cap.unsandboxed.impact`),kind:`bool`,danger:!0,confirmWord:``,defaultTtl:0,maxTtl:900}]}function Dv(){return new Map(Ev().map(e=>[e.cap,e]))}function Ov(){return[{sec:0,label:Mv()},{sec:900,label:w(`grants.ttl.min15`)},{sec:1800,label:w(`grants.ttl.min30`)},{sec:3600,label:w(`grants.ttl.hour1`)},{sec:86400,label:w(`grants.ttl.hour24`)}]}function kv(){return Ov().filter(e=>e.sec>0)}function Av(e){return e.label}var jv=1800;function Mv(){return w(`grants.permanent.label`)}function Nv(){return w(`grants.permanent.text`)}function Pv(){return w(`grants.permanent.paren`)}function Fv(){return Math.floor(Date.now()/1e3)}function Iv(e){let t=new Date(e*1e3),n=e=>(e<10?`0`:``)+e;return n(t.getHours())+`:`+n(t.getMinutes())}function Lv(e){return!(typeof e==`number`&&e>0)}function Rv(e){return Lv(e)?w(`grants.until.permanent`):w(`grants.until.at`,{time:Iv(e)})}function zv(e){return Lv(e)?Pv():w(`grants.until.paren`,{time:Iv(e)})}function Bv(e){return e.expired===!0||typeof e.expires_at==`number`&&e.expires_at>0&&e.expires_at<=Fv()}function Vv(e){return e&&e.scope&&typeof e.scope==`object`?e.scope:{}}function Z(e){return Array.isArray(e)?e.filter(e=>typeof e==`string`&&e!==``):[]}function Hv(e){let t=[];return e?(e.network===!0&&t.push(`network`),Z(e.read_roots).length&&t.push(`read_roots`),Z(e.write_roots).length&&t.push(`write_roots`),Z(e.net_hosts).length&&t.push(`net_hosts`),Z(e.tool_extra).length&&t.push(`tool_extra`),e.unsandboxed===!0&&t.push(`unsandboxed`),{count:t.length,danger:t.some(e=>Tv.has(e)),caps:t}):{count:0,danger:!1,caps:t}}function Uv(e){return new Promise(t=>{let n=N(`div`,`modal-scrim`),r=N(`div`,`modal-card confirm-card`);e.title&&r.appendChild(N(`div`,`modal-card-title`,e.title));let i=N(`div`,`confirm-message`);if(i.textContent=e.message,r.appendChild(i),e.note&&r.appendChild(N(`div`,`confirm-note`,e.note)),e.snapshot){r.appendChild(N(`div`,`confirm-snapshot-label`,e.snapshotLabel??w(`shell.confirm.result`)));let t=N(`pre`,`confirm-snapshot`);t.textContent=e.snapshot,r.appendChild(t)}let a=(e.requireText??``).trim(),o=null;if(a!==``){let t=N(`div`,`confirm-word-row`),n=document.createElement(`label`);n.textContent=e.requireHint??w(`shell.confirm.require`,{word:a});let i=N(`input`,`cfg-input`);i.type=`text`,i.autocomplete=`off`,i.spellcheck=!1,t.appendChild(n),t.appendChild(i),r.appendChild(t),r.appendChild(N(`div`,`confirm-word-hint`,w(`shell.confirm.requireHint`))),o=i}let s=N(`div`,`modal-card-actions`),c=N(`button`,`btn `+(e.danger?`btn-danger`:`btn-accent`),e.okLabel??w(`settings.action.confirm`));c.type=`button`;let l=N(`button`,`btn btn-soft`,w(`settings.action.cancel`));l.type=`button`;let u=!1,d=null,f=e=>{u||(u=!0,d&&(F(d),d=null),n.remove(),t(e))};o&&(c.disabled=!0,o.addEventListener(`input`,()=>{c.disabled=o.value.trim()!==a}),o.addEventListener(`keydown`,e=>{e.key===`Enter`&&!c.disabled&&(e.preventDefault(),f(!0))})),c.addEventListener(`click`,()=>{o&&o.value.trim()!==a||f(!0)}),l.addEventListener(`click`,()=>f(!1)),n.addEventListener(`click`,e=>{e.target===n&&f(!1)}),s.appendChild(l),s.appendChild(c),r.appendChild(s),n.appendChild(r),document.body.appendChild(n),d=P(()=>f(!1)),o?o.focus():(e.focus===`ok`?c:l).focus()})}var Wv=`unknown`,Gv=0,Kv=null,qv=null,Jv=null,Yv=``,Xv=null,Zv=null,Qv=null,$v=new Map,ey=new Map,ty=new Map,ny=new Set,ry=null,iy=null;function ay(e){iy=e}function oy(){return iy}function sy(){return Wv}function cy(e){Wv=e}function ly(){return Gv}function uy(e){Gv=e}function dy(){return Kv}function fy(e){Kv=e}function py(){return qv}function my(e){qv=e}function hy(){return Jv}function gy(){return Yv}function _y(e,t){Jv=e,Yv=t}function vy(){return Xv}function yy(e){Xv=e}function by(){return Zv}function xy(e){Zv=e}function Sy(){return ry}function Cy(e){ry=e}var wy=new Map,Ty=new Map,Ey=null;function Dy(){return{granted:Array.from(wy.values(),e=>e.entry),revoked:new Set(Ty.keys()),revokeAll:Ey!==null}}function Oy(e,t){wy.set(e,{entry:t,settledAt:null}),Ty.delete(e)}function ky(e){let t=Date.now();if(e===null){Ey!==null&&(Ey.settledAt=t);return}let n=wy.get(e);n&&(n.settledAt=t);let r=Ty.get(e);r&&(r.settledAt=t)}function Ay(e){wy.delete(e)}function jy(e){if(e===null){wy.clear(),Ty.clear(),Ey={settledAt:null};return}wy.delete(e),Ty.set(e,{settledAt:null})}function My(e){if(e===null){Ey=null,Ty.clear();return}Ty.delete(e)}function Ny(e,t){let n=new Set;for(let t of e)typeof t.cap==`string`&&n.add(t.cap);for(let[e,r]of Array.from(wy))(n.has(e)||r.settledAt!==null&&r.settledAt<t)&&wy.delete(e);for(let[e,r]of Array.from(Ty))(!n.has(e)||r.settledAt!==null&&r.settledAt<t)&&Ty.delete(e);Ey!==null&&(n.size===0||Ey.settledAt!==null&&Ey.settledAt<t)&&(Ey=null)}function Py(){wy.clear(),Ty.clear(),Ey=null}function Fy(){return Qv}function Iy(e){Qv=e}function Ly(){let e=Dy();if(e.revokeAll)return[];let t=(hy()?.grants??[]).filter(t=>typeof t.cap==`string`&&!Bv(t)&&!e.revoked.has(t.cap));for(let n of e.granted)typeof n.cap==`string`&&!e.revoked.has(n.cap)&&t.push(n);return t}function Ry(e){let t=Ly().filter(t=>t.cap===e);return t.length?t[t.length-1]:null}function zy(e){return(hy()?.grants??[]).filter(t=>t.cap===e&&Bv(t))}function By(){if(!Ly().length)return w(`grants.phrase.default`);let e=[];for(let t of Ev()){let n=Ry(t.cap);n&&e.push(Vy(t,Vv(n)))}return e.length?w(`grants.phrase.canNow`)+e.join(w(`grants.copy.listSep`))+w(`grants.phrase.suffix`):w(`grants.phrase.default`)}function Vy(e,t){switch(e.cap){case`network`:return w(`grants.phrase.network`);case`write_roots`:return w(`grants.phrase.writeRoots`,{roots:Z(t.roots).join(w(`grants.copy.listSep`))});case`read_roots`:return w(`grants.phrase.readRoots`,{roots:Z(t.roots).join(w(`grants.copy.listSep`))});case`net_hosts`:return w(`grants.phrase.netHosts`,{hosts:Z(t.hosts).join(w(`grants.copy.listSep`))});case`tool_extra`:return w(`grants.phrase.toolExtra`,{tools:Z(t.tools).join(w(`grants.copy.listSep`))});case`unsandboxed`:return w(`grants.phrase.unsandboxed`)}}function Hy(){return w(`grants.copy.listSep`)}function Uy(e,t,n){let r=Rv(n);switch(e.cap){case`network`:return w(`grants.copy.network`,{until:r});case`write_roots`:return w(`grants.copy.writeRoots`,{roots:Z(t.roots).join(Hy()),until:r});case`unsandboxed`:return w(`grants.copy.unsandboxed`,{until:r});case`read_roots`:return w(`grants.copy.readRoots`,{roots:Z(t.roots).join(Hy()),until:r});case`net_hosts`:return w(`grants.copy.netHosts`,{hosts:Z(t.hosts).join(Hy()),until:r});case`tool_extra`:return w(`grants.copy.toolExtra`,{tools:Z(t.tools).join(Hy()),until:r})}}function Wy(e,t){let n=w(`grants.copy.presetHead`,{label:e,n:t.length}),r=t.map(e=>w(`grants.copy.presetBody`,{label:e.def.label,text:Uy(e.def,e.scope,e.expiresAt)})),i=t.every(e=>e.expiresAt===null)?w(`grants.copy.presetTailPermanent`,{permanent:Nv()}):w(`grants.copy.presetTailLimited`,{list:t.map(e=>e.def.label+` `+Rv(e.expiresAt)).join(Hy())});return[n,...r,i].join(`
94
+ `)}function Gy(e,t){return w(`grants.copy.previewPrefix`)+Vy(e,t)+w(`grants.copy.previewSuffix`)}function Ky(e,t){return w(`grants.copy.successPrefix`)+e.label+zv(t.grant?.expires_at)}var qy=`studio:grants-changed`,Jy=12e4,Yy=3,Xy=40,Zy=new Map,Qy=new Map,$y=!1;function eb(e){$y=e}function tb(e){Qy.set(e,Date.now())}function nb(e){let t=Zy.get(e);return t&&t.count>0?t:null}function rb(){window.dispatchEvent(new Event(qy))}function ib(e,t){if(e===``)return;let n=Zy.get(e),r=n!==void 0&&n.count===t.count&&n.danger===t.danger&&n.caps.join(`,`)===t.caps.join(`,`);t.count>0?Zy.set(e,t):Zy.delete(e),r||rb()}function ab(e){if(!$y||e.length===0)return;let t=Date.now(),n=[];for(let r of e){if(!r||n.includes(r))continue;let e=Qy.get(r);if(!(e!==void 0&&t-e<Jy)&&(n.push(r),n.length>=Xy))break}if(!n.length)return;let r=0,i=async()=>{for(;;){let e=r++;if(e>=n.length)return;await ob(n[e])}};for(let e=0;e<Math.min(Yy,n.length);e++)i()}async function ob(e){tb(e);try{let t=await j.grants(e);if(t.error)return;let n=(t.grants??[]).filter(e=>typeof e.cap==`string`&&!Bv(e)),r=n.map(e=>String(e.cap));ib(e,{count:n.length,danger:r.some(e=>Tv.has(e)),caps:r})}catch{}}function sb(){let e=dy();if(!e)return;let t=Ly(),n=t.length,r=t.some(e=>typeof e.expires_at==`number`&&e.expires_at>0&&e.expires_at-Fv()<120);e.classList.toggle(`granted`,n>0),e.classList.toggle(`has-expiring`,n>0&&r);let i=py();i&&(i.textContent=n>0?String(n):``),e.title=n===0?w(`grants.shield.default`):r?w(`grants.shield.expiring`):w(`grants.shield.granted`,{n}),e.setAttribute(`aria-label`,e.title)}var cb=null;function lb(){let e=vy();if(!e)return;let t=gn(dy());t&&_n(e,t)}function ub(){cb?.();let e=0,t=t=>{let n=t.target,r=vy();r&&n instanceof Node&&r.contains(n)||e===0&&(e=window.requestAnimationFrame(()=>{e=0,lb()}))};window.addEventListener(`resize`,t),document.addEventListener(`scroll`,t,!0),cb=()=>{e!==0&&(window.cancelAnimationFrame(e),e=0),window.removeEventListener(`resize`,t),document.removeEventListener(`scroll`,t,!0)}}function db(){cb?.(),cb=null}var fb=[`localhost`,`127.0.0.1`];function pb(){return[{id:`read-workspace`,label:w(`grants.preset.readWorkspace.label`),hint:w(`grants.preset.readWorkspace.hint`),ttlSec:0,steps:[{cap:`read_roots`,scopeKind:`dir`}]},{id:`write-output`,label:w(`grants.preset.writeOutput.label`),hint:w(`grants.preset.writeOutput.hint`),ttlSec:0,steps:[{cap:`write_roots`,scopeKind:`dir`}]},{id:`net`,label:w(`grants.preset.net.label`),hint:w(`grants.preset.net.hint`),ttlSec:0,steps:[{cap:`network`,scopeKind:`none`}]},{id:`localhost`,label:w(`grants.preset.localhost.label`),hint:w(`grants.preset.localhost.hint`),ttlSec:0,steps:[{cap:`network`,scopeKind:`none`},{cap:`net_hosts`,scopeKind:`hosts`,hosts:fb}]}]}function mb(e,t){return e.ttlSec<=0?0:!Number.isFinite(t)||t<=0?e.ttlSec:Math.min(e.ttlSec,t)}function hb(e,t){return e.steps.every(e=>{let n=t.find(t=>t.cap===e.cap);if(!n)return!1;if(e.scopeKind!==`hosts`)return!0;let r=n.hosts??[];return(e.hosts??[]).every(e=>r.includes(e))})}function gb(){let e=[];for(let t of Ev()){let n=Ry(t.cap);n&&e.push({cap:t.cap,hosts:t.kind===`hosts`?Z(Vv(n).hosts):[]})}return e}function _b(e){if(e.ttlSec<=0)return Mv();let t=Ov().find(t=>t.sec===e.ttlSec);return t?w(`grants.quick.ttlPrefix`,{label:Av(t)}):w(`grants.quick.ttlMinutes`,{n:Math.max(1,Math.round(e.ttlSec/60))})}function vb(e){let t=N(`div`,`grant-presets`),n=N(`div`,`grant-presets-head`);n.appendChild(N(`span`,`grant-presets-title`,w(`grants.quick.title`))),n.appendChild(N(`span`,`grant-presets-ttl-note`,w(`grants.quick.note`))),t.appendChild(n);let r=Sy(),i=gb();for(let n of pb()){let a=N(`button`,`grant-preset`);a.type=`button`;let o=hb(n,i);a.classList.toggle(`on`,o),a.disabled=r!==null,a.title=n.hint;let s=N(`span`,`grant-preset-top`);s.appendChild(N(`span`,`grant-preset-label`,n.label)),o&&s.appendChild(N(`span`,`grant-preset-tag`,w(`grants.quick.applied`))),s.appendChild(N(`span`,`grant-preset-ttl`,_b(n))),a.appendChild(s),a.appendChild(N(`span`,`grant-preset-hint`,n.hint)),a.addEventListener(`click`,()=>void yb(e,n)),t.appendChild(a)}return t}async function yb(e,t){let n=oy();if(!n){Iy({text:w(`grants.quick.unavailable`),cls:`err`}),e.renderPanel();return}await n(e,t)}function bb(e){let t=hy()?.max_ttl_sec?.[e.cap];return typeof t==`number`&&t>0?t:e.maxTtl}function xb(e){let t=ty.get(e.cap);return t===void 0?e.defaultTtl:t===0?0:Math.min(t,bb(e))}function Sb(e){return Math.min(jv,bb(e))}function Cb(e,t,n){let r={cap:e.cap,scope:t,ttl_sec:n};return e.cap===`unsandboxed`&&(r.uses_left=1),r}function wb(){let e=Z(hy()?.warnings);if(e.length===0)return null;let t=N(`div`,`grant-preview`);t.appendChild(N(`span`,`grant-preview-label`,w(`grants.warnings.label`)));for(let n of e)t.appendChild(N(`div`,`grant-impact`,n));return t}function Tb(){return hy()?.net_hosts_effective===!1}function Eb(e,t){let n=Ry(e.cap),r=zy(e.cap),i=N(`div`,`grant-row`+(n===null&&r.length?` expired`:``));i.dataset.cap=e.cap;let a=N(`div`,`grant-row-head`);if(a.appendChild(N(`span`,`grant-row-name`,e.label)),a.appendChild(Db(e,n,r)),e.cap===`net_hosts`&&Tb()){let e=N(`span`,`grant-badge`,w(`grants.rows.ineffective`));e.title=w(`grants.rows.ineffectiveTitle`),a.appendChild(e)}if(e.reserved===!0){let e=N(`span`,`grant-badge`,w(`grants.rows.reserved`));e.title=w(`grants.rows.reservedTitle`),a.appendChild(e)}i.appendChild(a),i.appendChild(N(`div`,`grant-impact`,e.impact)),e.extra&&i.appendChild(N(`div`,`grant-impact`,e.extra));let o=Vv(n),s=Z(o.roots).concat(Z(o.hosts),Z(o.tools));n&&s.length&&i.appendChild(N(`div`,`grant-detail`,kb(e,n,s)));for(let t of r){let n=Z(Vv(t).roots).concat(Z(Vv(t).hosts),Z(Vv(t).tools));i.appendChild(N(`div`,`grant-detail`,w(`grants.rows.expiredPrefix`,{what:n.length?n.join(w(`grants.copy.listSep`)):e.label})))}if((e.kind===`hosts`||e.kind===`tools`)&&!n&&e.reserved!==!0){let t=N(`div`,`grant-hosts-row`),n=N(`input`,`grant-input cfg-input`);n.type=`text`,n.spellcheck=!1,n.placeholder=e.kind===`hosts`?w(`grants.rows.hostPlaceholder`):w(`grants.rows.toolPlaceholder`),n.value=ey.get(e.cap)??``,n.addEventListener(`input`,()=>{ey.set(e.cap,n.value),$v.delete(e.cap);let t=i.querySelector(`.grant-err`);t&&t.remove()}),t.appendChild(n),i.appendChild(t)}let c=N(`div`,`grant-row-actions`);if(n){let n=N(`button`,`btn-mini`,w(`grants.rows.revoke`));n.type=`button`,n.addEventListener(`click`,()=>void t.revoke(e.cap)),c.appendChild(n)}else if(e.reserved!==!0){let n=N(`button`,`btn-mini`+(e.danger?` grant-danger-btn`:``),e.kind===`dirs`?w(`grants.rows.chooseDir`):w(`grants.rows.grant`));n.type=`button`,n.title=w(`grants.rows.grantTitle`,{permanent:Nv()}),n.addEventListener(`click`,()=>{ty.set(e.cap,0),t.startGrant(e)}),c.appendChild(n),c.appendChild(Ab(e,t)),e.cap===`unsandboxed`&&c.appendChild(N(`span`,`grant-impact`,w(`grants.rows.onceOnly`,{permanent:Nv()})))}i.appendChild(c),!n&&ny.has(e.cap)&&i.appendChild(jb(e,t));let l=$v.get(e.cap);return l&&i.appendChild(N(`div`,`grant-err`,l)),i}function Db(e,t,n){return t?N(`span`,`grant-badge on`,Ob(e,t)):n.length?N(`span`,`grant-badge expired`,w(`grants.rows.expired`)):N(`span`,`grant-badge`,w(`grants.rows.notGranted`))}function Ob(e,t){if(e.kind===`hosts`||e.kind===`tools`){let n=Z(Vv(t)[e.kind===`hosts`?`hosts`:`tools`]).length;return w(`grants.rows.grantedCount`,{n:n||1})}return Lv(t.expires_at)?w(`grants.rows.grantedPermanent`,{permanent:Mv()}):w(`grants.rows.grantedUntil`,{time:Iv(t.expires_at)})}function kb(e,t,n){let r=zv(t.expires_at);switch(e.cap){case`write_roots`:return w(`grants.rows.detailWrite`,{values:n.join(w(`grants.copy.listSep`)),exp:r});case`read_roots`:return w(`grants.rows.detailRead`,{values:n.join(w(`grants.copy.listSep`)),exp:r});case`net_hosts`:return n.join(`、`)+r;case`tool_extra`:return n.join(`、`)+r;default:return n.join(`、`)+r}}function Ab(e,t){let n=ny.has(e.cap),r=N(`button`,`btn-mini`,w(n?`grants.rows.tempCollapse`:`grants.rows.tempOpen`));return r.type=`button`,r.addEventListener(`click`,()=>{n?ny.delete(e.cap):ny.add(e.cap),t.renderPanel()}),r}function jb(e,t){let n=N(`div`,`grant-temp`);n.appendChild(N(`div`,`grant-impact`,w(`grants.rows.tempNote`)));let r=N(`div`,`grant-hosts-row`);r.appendChild(Mb(e));let i=N(`button`,`btn-mini`,w(`grants.rows.tempGrant`));return i.type=`button`,i.addEventListener(`click`,()=>void t.startGrant(e)),r.appendChild(i),n.appendChild(r),n}function Mb(e){let t=bb(e),n=document.createElement(`select`);n.className=`cfg-input grant-ttl`;let r=ty.get(e.cap),i=r!==void 0&&r>0?r:Sb(e),a=!1;for(let e of kv()){if(e.sec>t)continue;let r=document.createElement(`option`);r.value=String(e.sec),r.textContent=e.label,e.sec===i&&(a=!0),n.appendChild(r)}if(a)n.value=String(i);else{let e=Math.max(1,Math.min(i,t)),r=document.createElement(`option`);r.value=String(e),r.textContent=w(`grants.rows.minutes`,{n:Math.max(1,Math.round(e/60))}),n.appendChild(r),n.value=String(e)}return n.addEventListener(`change`,()=>ty.set(e.cap,Number(n.value))),n}function Nb(){db();let e=by();e&&(F(e),xy(null));let t=vy();t&&(t.remove(),yy(null))}function Pb(e){if(vy()){Nb();return}Fb(e)}async function Fb(e){Nb(),$v.clear(),Iy(null);let t=document.getElementById(`statusline`);if(!t)return;let n=N(`div`,`sl-popup grant-popup`);n.setAttribute(`role`,`dialog`),yy(n),t.appendChild(n),xy(P(()=>Nb())),n.appendChild(N(`div`,`sl-popup-title`,w(`grants.body.title`)));let r=N(`div`,`sl-popup-body`);if(n.appendChild(r),e.focusedSession()===``){r.replaceChildren(N(`div`,`sl-popup-note`,w(`grants.body.noSession`))),lb(),ub();return}let i=hy()!==null&&gy()===e.focusedSession();i||n.classList.add(`hidden`),i&&Ib(e),ub(),await e.refresh(!0),vy()===n&&(n.classList.remove(`hidden`),Ib(e))}function Ib(e){let t=vy();if(!t)return;let n=t.querySelector(`.sl-popup-body`);if(!n)return;let r=document.createElement(`div`);r.appendChild(vb(e)),r.appendChild(N(`div`,`grant-intro`,w(`grants.body.introDefault`))),r.appendChild(N(`div`,`grant-intro`,w(`grants.body.introScope`)));let i=wb();i&&r.appendChild(i);let a=N(`div`,`grant-preview`);if(a.appendChild(N(`span`,`grant-preview-label`,w(`grants.body.previewLabel`))),a.appendChild(N(`span`,null,By())),r.appendChild(a),hy()===null)r.appendChild(N(`div`,`sl-popup-note`,w(`grants.body.unreadable`)));else for(let t of Ev())(t.cap!==`unsandboxed`||hy()?.unsandboxed_available===!0)&&(t.reserved!==!0||Ry(t.cap)!==null||zy(t.cap).length!==0)&&r.appendChild(Eb(t,e));let o=N(`div`,`grant-foot`);o.appendChild(N(`div`,`grant-foot-note`,w(`grants.body.footNote`)));let s=N(`button`,`btn-mini grant-danger-btn`,w(`grants.body.revokeAll`));s.type=`button`,s.disabled=Ly().length===0,s.addEventListener(`click`,()=>void e.revoke(null)),o.appendChild(s),r.appendChild(o);let c=Fy();c&&r.appendChild(N(`div`,`sl-popup-status `+c.cls,c.text)),n.replaceChildren(...r.childNodes),lb()}function Lb(e){return/sk-/.test(e)||/Bearer\s/.test(e)||e.includes(`
95
+ `)||e.length>200}var Rb=/^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;function zb(e){let[t,n]=e.split(`/`);if(n!==void 0&&!/^\d{1,2}$/.test(n)||n!==void 0&&Number(n)>32)return!1;let r=(t??``).split(`.`);return r.length===4&&r.every(e=>/^\d{1,3}$/.test(e)&&Number(e)<=255)}function Bb(e){let[t,n]=e.split(`/`);return n!==void 0&&(!/^\d{1,3}$/.test(n)||Number(n)>128)||!t||!t.includes(`:`)?!1:/^[0-9a-fA-F:.]+$/.test(t)}function Vb(e){return e.length>253?!1:zb(e)||Bb(e)?!0:Rb.test(e)}function Hb(e){return e.split(/[\s,,;;]+/).map(e=>e.trim()).filter(e=>e!==``)}function Ub(e){let t=Hb(e);if(!t.length)return{values:[],error:w(`grants.scope.needHost`)};let n=[];for(let e=0;e<t.length;e++){let r=t[e];if(Lb(r))return{values:[],error:w(`grants.scope.hostCred`,{n:e+1})};if(!Vb(r))return{values:[],error:w(`grants.scope.hostInvalid`,{n:e+1})};n.push(r)}return{values:Array.from(new Set(n)),error:``}}var Wb=/^[a-zA-Z0-9_.:-]{1,64}$/;function Gb(e){let t=Hb(e);if(!t.length)return{values:[],error:w(`grants.scope.needTool`)};let n=[];for(let e=0;e<t.length;e++){let r=t[e];if(Lb(r))return{values:[],error:w(`grants.scope.toolCred`,{n:e+1})};if(!Wb.test(r))return{values:[],error:w(`grants.scope.toolInvalid`,{n:e+1})};n.push(r)}return{values:Array.from(new Set(n)),error:``}}function Kb(e){sb(),e.renderPanel()}async function qb(e,t){let n=e.focusedSession();if(n===``)return;$v.delete(t.cap);let r={};if(t.kind===`dirs`){let e=await Bm(w(`grants.flow.chooseDir`),w(`grants.flow.chooseDirNote`,{permanent:Nv()}));if(e===null||e.trim()===``)return;r={roots:[e.trim()]}}else if(t.kind===`hosts`){let n=Ub(ey.get(t.cap)??``);if(n.error!==``){$v.set(t.cap,n.error),e.renderPanel();return}r={hosts:n.values}}else if(t.kind===`tools`){let n=Gb(ey.get(t.cap)??``);if(n.error!==``){$v.set(t.cap,n.error),e.renderPanel();return}r={tools:n.values}}let i=xb(t),a=i===0?null:Fv()+i;if(await Uv({title:w(`grants.flow.confirmTitle`,{label:t.label}),message:Uy(t,r,a),note:Gy(t,r)+`
96
+ `+w(`grants.flow.effectiveNote`),snapshot:JSON.stringify(hy()?.effective??{},null,2),snapshotLabel:w(`grants.flow.snapshotLabel`),okLabel:w(`grants.rows.grant`),danger:!0})){Oy(t.cap,{cap:t.cap,scope:r,expires_at:a}),Kb(e);try{let a=await Xb(n,t,Cb(t,r,i),r);if(a===null){Ay(t.cap),Iy({text:w(`grants.flow.grantFailed`,{reason:O(void 0,w(`settings.common.retryLater`))}),cls:`err`}),Kb(e);return}ey.delete(t.cap),ky(t.cap),Iy({text:Ky(t,a),cls:`busy`}),X(Ky(t,a),`ok`,6e3),a.effective&&ib(n,Hv(a.effective)),await e.refresh(!0)}catch(n){Ay(t.cap);let r=w(`grants.flow.grantFailed`,{reason:O(n,w(`settings.common.retryLater`))});Iy({text:r,cls:`err`}),X(r,`err`,8e3),Kb(e)}}}async function Jb(e,t){let n=e.focusedSession();if(n===``||Sy()!==null)return;$v.clear();let r=[];for(let n of t.steps){let i=await Yb(t,n);if(i===null){e.renderPanel();return}r.push(i)}if(r.length===0)return;let i=Fv(),a=r.map(e=>({def:e.def,scope:e.scope,expiresAt:e.ttl===0?null:i+e.ttl}));if(!await Uv({title:w(`grants.flow.confirmPresetTitle`,{label:t.label}),message:Wy(t.label,a),note:w(`grants.flow.presetNote`,{list:r.map(e=>Vy(e.def,e.scope)).join(w(`grants.copy.listSep`))})+`
97
+ `+w(`grants.flow.effectiveNote`),snapshot:JSON.stringify(hy()?.effective??{},null,2),snapshotLabel:w(`grants.flow.snapshotLabel`),okLabel:w(`grants.rows.grant`),danger:!0}))return;for(let e of r)Oy(e.def.cap,{cap:e.def.cap,scope:e.scope,expires_at:e.ttl===0?null:Fv()+e.ttl});Cy({id:t.id,index:0,total:r.length}),Kb(e);let o=[];for(let i=0;i<r.length;i++){let a=r[i];Cy({id:t.id,index:i,total:r.length});try{let e=await Xb(n,a.def,Cb(a.def,a.scope,a.ttl),a.scope);e?.effective&&ib(n,Hv(e.effective)),ky(a.def.cap),o.push(a.def.label)}catch(t){Ay(a.def.cap),Cy(null);let n=O(t,w(`settings.common.retryLater`)),r=w(`grants.flow.presetInterrupted`,{label:a.def.label,reason:n,done:o.length>0?w(`grants.flow.presetDone`,{list:o.join(w(`grants.copy.listSep`))}):w(`grants.flow.presetNoGrant`)});Iy({text:r,cls:`err`}),X(r,`err`,1e4),Kb(e),await e.refresh(!0);return}}Cy(null);let s=w(`grants.flow.presetComplete`,{list:o.join(w(`grants.copy.listSep`))});Iy({text:s,cls:`busy`}),X(s,`ok`,6e3),await e.refresh(!0)}async function Yb(e,t){let n=Dv().get(t.cap);if(!n)return Iy({text:w(`grants.flow.presetUnavailable`),cls:`err`}),null;let r={};if(t.scopeKind===`dir`){let t=await Bm(w(`grants.flow.chooseDirPreset`,{label:e.label}),w(`grants.flow.chooseDirPresetNote`,{permanent:Nv()}));if(t===null||t.trim()===``)return Iy({text:w(`grants.flow.presetNoDir`),cls:`err`}),null;r={roots:[t.trim()]}}else if(t.scopeKind===`hosts`){let e=ey.get(t.cap)??``,i=Ub(e.trim()===``?(t.hosts??[]).join(`, `):e);if(i.error!==``)return $v.set(t.cap,i.error),Iy({text:w(`grants.flow.presetBadHosts`,{label:n.label}),cls:`err`}),null;r={hosts:i.values}}return{def:n,scope:r,ttl:mb(e,bb(n))}}async function Xb(e,t,n,r){let i=await yv(t.cap,r);for(let r=0;r<2;r++){let a=await j.grantToken(e,t.cap,i);if(!a.token)throw new D(O(a.error,w(`grants.flow.cannotStart`)));try{let t=await j.grantCap(e,n,a.token);if(t.ok===!1)throw new D(O(t.error,w(`grants.flow.grantFailedRetry`)));return{effective:t.effective,grant:t.grant}}catch(e){if(e instanceof D&&(e.status===403||e.status===409)&&r===0)continue;throw e}}return null}ay((e,t)=>Jb(e,t));async function Zb(e,t){let n=e.focusedSession();if(n===``)return;let r=t?Dv().get(t):void 0;jy(t),Kb(e);try{let i=await j.revokeCap(n,t?{cap:t}:{});ky(t);let a=(i.revoked??[]).length,o=t&&r?w(`grants.flow.revokedOne`,{label:r.label}):a>1?w(`grants.flow.revokedMany`,{n:a}):w(`grants.flow.revoked`);Iy({text:o,cls:`busy`}),X(o,`ok`,6e3),i.effective&&ib(n,Hv(i.effective)),await e.refresh(!0)}catch(n){My(t);let r=w(`grants.flow.revokeFailed`,{reason:O(n,w(`settings.common.retryLater`))});Iy({text:r,cls:`err`}),X(r,`err`,8e3),Kb(e)}}var Qb=2e4,$b=null,ex=!1,tx={refresh:e=>ax(e),focusedSession:()=>ix(),renderPanel:()=>Ib(tx),startGrant:e=>qb(tx,e),revoke:e=>Zb(tx,e)};function nx(e){let t=e?`on`:`off`;if(sy()===t)return;cy(t),eb(e);let n=dy();n&&n.classList.toggle(`hidden`,!e),e?(ox(),ax(!0)):(Nb(),sx())}async function rx(e=!1){let t=Date.now();if(!(!e&&sy()!==`unknown`&&t-ly()<6e4)){uy(t);try{nx((await j.health()).capabilities?.grants===!0)}catch{nx(!1)}}}function ix(){let e=jr();return e===``?R.selSession??``:e}async function ax(e=!1){if(sy()!==`on`)return;let t=ix();if(t===``){_y(null,``),sb(),vy()&&Ib(tx);return}if(!e&&vy()===null&&t===gy()&&hy()!==null){sb();return}let n=t,r=Date.now();try{let e=await j.grants(n);if(n!==ix())return;_y(e,n),Ny(e.grants??[],r),tb(n);let t=(e.grants??[]).filter(e=>typeof e.cap==`string`&&!Bv(e)),i=t.map(e=>String(e.cap));ib(n,{count:t.length,danger:i.some(e=>Tv.has(e)),caps:i})}catch(e){if(n!==ix()||e instanceof D&&e.status===0)return;_y(null,n)}sb(),vy()&&Ib(tx)}function ox(){$b===null&&($b=window.setInterval(()=>{ax(!0)},Qb))}function sx(){$b!==null&&(window.clearInterval($b),$b=null)}function cx(){if(ex)return;ex=!0,fy(document.getElementById(`slGrant`)),my(document.getElementById(`slGrantBadge`));let e=dy();e&&e.addEventListener(`click`,e=>{e.stopPropagation(),Pb(tx)}),document.addEventListener(`click`,t=>{let n=vy();if(!n)return;let r=t.target;(typeof t.composedPath==`function`?t.composedPath():[]).some(e=>e===n)||n.contains(r)||e&&e.contains(r)||Nb()}),Br(()=>{$v.clear(),Iy(null),Py(),sy()===`on`&&ax(!0)}),document.addEventListener(`visibilitychange`,()=>{document.visibilityState===`visible`&&ax(!0)}),rx(!0),window.setInterval(()=>{sy()===`off`&&rx(!0)},6e4)}var lx=`hint-text-card`;function ux(e,t){let n=N(`div`,`hint-card-text`),r=(e.getAttribute(`data-hint-tag`)??``).trim();return r&&n.appendChild(N(`span`,`hint-card-tag`,r)),n.appendChild(N(`span`,`hint-card-body`,t)),n}function dx(){return{id:lx,priority:0,claim(e,t){return t?{build:()=>ux(e,t)}:null}}}function fx(){return[{id:lx,label:w(`plugins.desc.textCard.label`),hint:w(`plugins.desc.textCard.hint`),hot:!0,create:()=>dx()},{id:ha,label:w(`plugins.desc.railPreview.label`),hint:w(`plugins.desc.railPreview.hint`),hot:!0,create:()=>Ha()}]}function px(){return fx().map(e=>e.id)}function mx(e){return fx().find(t=>t.id===e)??null}function hx(){for(let e of fx())Wi(e.create())}function gx(e){return Ui(e)}function _x(e,t){let n=mx(e);if(n===null)return{ok:!1,text:w(`plugins.notFound`)};try{t?Gi(e):Ki(e)}catch(r){return vx(e,!t),console.warn(`[plugins] 切换失败:`+(r instanceof Error?r.message:String(r))),{ok:!1,text:w(`plugins.toggleFailed`,{label:n.label})}}return Ri(e,!t,px()),{ok:!0,text:w(`plugins.toggled`,{state:w(t?`plugins.on`:`plugins.off`),label:n.label})}}function vx(e,t){try{t?Gi(e):Ki(e)}catch(e){console.warn(`[plugins] 回滚失败:`+(e instanceof Error?e.message:String(e)))}}function yx(){Ai(),hx()}function bx(e){let t=`http://www.w3.org/2000/svg`,n=document.createElementNS(t,`svg`);n.setAttribute(`viewBox`,`0 0 16 16`),n.setAttribute(`width`,`13`),n.setAttribute(`height`,`13`),n.setAttribute(`fill`,`none`),n.setAttribute(`stroke`,`currentColor`),n.setAttribute(`stroke-width`,`1.3`),n.setAttribute(`stroke-linecap`,`round`),n.setAttribute(`stroke-linejoin`,`round`);let r=document.createElementNS(t,`path`);switch(e){case`folder`:r.setAttribute(`d`,`M1.5 3.5h4l1.5 2h7.5v7a1 1 0 0 1-1 1h-11a1 1 0 0 1-1-1z`);break;case`file`:r.setAttribute(`d`,`M3 1.5h6l4 4v9h-10zM9 1.5v4h4`);break;case`search`:r.setAttribute(`d`,`M6.5 11.5a5 5 0 1 1 0-10 5 5 0 0 1 0 10zM14.5 14.5l-3.8-3.8`);break;case`sort`:r.setAttribute(`d`,`M2 4h12M5 8h7M8 12h4`);break;case`folder-plus`:r.setAttribute(`d`,`M1.5 3.5h4l1.5 2h7.5v4M1.5 3.5v8a1 1 0 0 0 1 1h5.5M11 9v5M8.5 11.5h5`);break;case`plus`:r.setAttribute(`d`,`M8 3v10M3 8h10`)}return n.appendChild(r),n}function xx(){let e=`http://www.w3.org/2000/svg`,t=document.createElementNS(e,`svg`);t.setAttribute(`viewBox`,`0 0 16 16`),t.setAttribute(`width`,`10`),t.setAttribute(`height`,`10`),t.setAttribute(`aria-hidden`,`true`);let n=document.createElementNS(e,`path`);return n.setAttribute(`d`,`M8 1.6 13.2 3.4v4.2c0 3.1-2.1 5.6-5.2 6.8-3.1-1.2-5.2-3.7-5.2-6.8V3.4z`),t.appendChild(n),t}function Q(e){let t=document.getElementById(`sideFoot`);t&&(t.textContent=e)}function Sx(e){let t=jr()||Lg();for(let n of e.querySelectorAll(`.sess-leaf`))n.classList.toggle(`active`,n.dataset.id===t)}function Cx(e){for(let t of e.querySelectorAll(`.sess-dot[data-dot]`)){let e=Fr(t.dataset.dot??``);t.classList.toggle(`busy`,e),bi(t,w(e?`shell.tree.running`:`shell.tree.idle`))}for(let t of e.querySelectorAll(`.ws-worker-row`)){let e=Fr(t.dataset.id??``);t.classList.toggle(`running`,e);let n=t.querySelector(`.ws-worker-state`);n&&(n.textContent=w(e?`shell.tree.running`:`shell.tree.idle`),n.classList.toggle(`busy`,e))}}function wx(e,t){if(!t||t.count<=0){e.classList.add(`hidden`),e.replaceChildren(),e.title=``;return}e.classList.remove(`hidden`),e.classList.toggle(`danger`,t.danger),e.title=t.danger?w(`shell.tree.grantDanger`,{n:t.count}):w(`shell.tree.grantRelaxed`,{n:t.count}),e.firstChild||e.appendChild(xx())}function Tx(e){for(let t of e.querySelectorAll(`.sess-leaf-grant[data-grant-mark]`))wx(t,nb(t.dataset.grantMark??``))}var Ex=null,Dx=null,Ox=null,kx=null,Ax=`\0`;function jx(e){let t=(e.title??``).trim();if(t)return t;if(e.id===``)return w(`shell.sessbar.unresolved`);let n=e.id.lastIndexOf(`/`);return n>=0?e.id.slice(n+1):e.id}function Mx(){let e=M(`#sessionBar`);Ex=N(`span`,`sess-bar-name`,`—`),Dx=N(`span`,`sess-bar-kind hidden`,`WORKER`),Ox=N(`span`,`sess-bar-state`,w(`shell.sessbar.idle`)),kx=N(`span`,`sess-bar-others`);let t=N(`span`,`sess-bar-lead`,w(`shell.sessbar.session`));e.replaceChildren(t,Dx,Ex,Ox,kx)}function Nx(){let e=B();if(!Ex||!Ox||!Dx||!kx)return;if(!e){Ex.textContent=`—`,Ox.textContent=w(`shell.sessbar.idle`),Ox.className=`sess-bar-state`,Dx.classList.add(`hidden`),kx.replaceChildren(),Ax=`\0`;return}let t=e.streaming||Fr(e.id);Ex.textContent=jx(e),Ex.title=e.id||w(`shell.sessbar.unresolvedShort`),Dx.classList.toggle(`hidden`,e.kind!==`worker`),Ox.textContent=t?e.streaming?``:w(`shell.sessbar.background`):w(`shell.sessbar.idle`),Ox.className=`sess-bar-state`+(t?` busy`:``);let n=Cr().filter(t=>t!==e&&(t.streaming||Fr(t.id))),r=n.map(e=>e.id).join(`|`);if(r===Ax)return;if(Ax=r,!n.length){kx.replaceChildren();return}let i=document.createDocumentFragment();i.appendChild(N(`span`,`sess-bar-sep`,`·`)),i.appendChild(N(`span`,`sess-bar-note`,w(`shell.sessbar.others`,{n:n.length})));for(let e of n){let t=N(`button`,`sess-bar-chip`,jx(e));t.type=`button`,t.title=w(`shell.sessbar.switchTo`,{name:e.id||w(`shell.sessbar.thatSession`)}),t.addEventListener(`click`,()=>{sm(e.id,{kind:e.kind,title:e.title})}),i.appendChild(t)}kx.replaceChildren(...Array.from(i.childNodes))}function Px(e,t=`steer`){let n=e.trim(),r=B();if(!r)return;let i=Xd();if(n!==``||i!==0){if(m_(n)){M_(),r.draft=``,a_(n,r);return}if(r.kind===`worker`){Ix(r,n,t);return}if(r.streaming&&i>0){let e=w(`chat.send.busyWithAttachments`);X(e,`err`,6e3),Q(e);return}if(r.draft=``,r.streaming){Rx(r,n,t);return}Fx(r,n)}}function Fx(e,t){let n=e.id,r=Qd(n),i=zh(n),a=ff(e,t,{attachments:af(r),quotes:i});M_(),Dh(),hv(e),Rr(e,!0),e.turn=null,e.t0=Date.now(),e.phase=w(`chat.send.starting`),vh(e),V(e)&&(R.t0=e.t0,P_(!0),Y(w(`chat.send.starting`),`busy`),tv()),Nx(),ud(r).then(()=>nf(r)).then(n=>j.turn(dd(Yf(t,i),r),ov(e),void 0,n)).then(t=>{t.session&&Pr(t.session),e.turn===null&&t.turn!==void 0&&(e.turn=t.turn),e.phase=w(`chat.send.running`),V(e)&&($_(e.turn===null?t.turn??0:e.turn),Y(w(`chat.send.running`),`busy`))}).catch(o=>Lx({ctx:e,key:n,col:a,text:t,items:r,quotes:i,err:o}))}async function Ix(e,t,n){if(t===``)return;if(Xd()>0){let t=w(`chat.send.workerNoImages`);V(e)&&X(t,`err`,6e3),gf(e,t,`warn`);return}let r=zh(e.id),i=ff(e,t,{kind:n===`queue`?`queued`:`user`,quotes:r});M_(),e.draft=``;let a=vf(e,w(`chat.send.delivering`),void 0,i);hv(e);try{let n=await j.turn(Yf(t,r),ov(e)),i=n.status!==void 0&&n.status!==``&&n.status!==`RUNNING`;a.textContent=i?w(`chat.send.workerSettled`,{status:n.status??``}):w(`chat.send.workerDelivered`),a.className=`interject-note ok`,V(e)&&X(w(i?`chat.send.workerSettledShort`:`chat.send.workerDeliveredShort`),`ok`,4e3)}catch(n){i.remove(),a.parentElement?.remove(),e.interjectNote=null,r.length>0&&Bh(e.id,r),zx(e,t);let o=w(`chat.send.notDelivered`,{reason:sv(n)});V(e)&&(Y(o,`err`),window.setTimeout(()=>X(o,`err`,6e3),0)),gf(e,o,`warn`)}}function Lx(e){let{ctx:t,key:n,col:r,text:i,items:a,quotes:o,err:s}=e;Rr(t,!1),t.phase=w(`chat.send.failedPrefix`).replace(/[:: ]+$/,``),mv()===t&&hv(null);let c=a.length>0||o.length>0;c&&(r.remove(),a.length>0&&$d(n,a),o.length>0&&Bh(n,o),zx(t,i),Dh(),Lh());let l=w(`chat.send.failedPrefix`)+sv(s)+(c?w(`chat.send.failedRolledSuffix`):``);V(t)&&(P_(!1),nv(),Y(l,`err`),window.setTimeout(()=>X(l,`err`,6e3),0)),gf(t,l,c?`warn`:`err`),c&&Q(l),Nx()}async function Rx(e,t,n){let r=zh(e.id),i=Yf(t,r),a=ff(e,t,{kind:n===`queue`?`queued`:`steering`,quotes:r});M_(),Dh(),e.draft=``;let o=w(n===`queue`?`chat.send.queuedWaiting`:`chat.send.interjectedWaiting`),s=w(n===`queue`?`chat.send.queuedDone`:`chat.send.interjectedDone`),c=vf(e,o,void 0,a);hv(e),V(e)&&X(w(n===`queue`?`chat.send.queuedShort`:`chat.send.interjectedShort`),`busy`,4e3);let l=e=>{c.textContent=e,c.className=`interject-note ok`};try{let t=await j.turn(i,ov(e),n);if(t.placement===`queued`){l(s);return}if(t.placement===`steering`){l(w(`chat.send.interjectedDone`));return}if(t.placement===void 0){if(t.injected===!0){l(w(`chat.send.interjectedDone`));return}if(t.queued===!0||n===`queue`){l(s);return}}e.turn=t.turn??e.turn,Rr(e,!0),e.phase=w(`chat.send.running`),l(w(`chat.send.asNewTurn`)),Nx()}catch(o){if(n===`queue`)try{let t=await j.turn(i,ov(e),`steer`);if(t.injected!==!1){let e=hf(t.inbox_target??`next-step`);l(w(`chat.send.queueUnsupported`,{lane:e?w(`chat.send.laneSuffix`,{lane:e}):``}));return}}catch{}a.remove(),c.parentElement?.remove(),e.interjectNote=null,r.length>0&&Bh(e.id,r),zx(e,t);let s=w(n===`queue`?`chat.send.queueNotDelivered`:`chat.send.steerNotDelivered`,{reason:sv(o)});V(e)&&(Y(s,`err`),window.setTimeout(()=>X(s,`err`,6e3),0)),gf(e,s,`warn`)}}function zx(e,t){if(e.draft=t,!V(e))return;let n=document.querySelector(`#input`);n&&n.value.trim()===``&&N_(t)}var Bx=`.msg.info.downgrade`;function Vx(e){let t=e.cause;return[e.model??``,typeof t==`string`?t:``,e.message??``].join(`\0`)}function Hx(e){return e.el.querySelector(Bx)}function Ux(e,t){let n=Pd(t),r=n.split(`
98
+ `)[0]??n,i=Vx(t),a=Hx(e);if(a){if(_f(a,n),a.dataset.downgradeSig===i)return;a.dataset.downgradeSig=i}else{let t=gf(e,n,`err`,`downgrade`);if(t===null)return;t.dataset.downgradeSig=i}V(e)&&X(r,`err`,6e3)}function Wx(){return{cancelled:w(`chat.phase.cancelled`),error:w(`chat.phase.error`)}}function Gx(e){let t=typeof e.session==`string`&&e.session!==``?e.session:null;return t===null?mv()??B()??wr(``):Pr(t)||(Sr(t)??wr(t))}function Kx(e,t){let n=Qe({...t.statusline??{},...t});Object.keys(n).length>0&&(e.status={...e.status??{},...n})}function qx(e){F_(e.kind===`worker`?`worker`:e.streaming?`interject`:`idle`)}function Jx(e){R.t0=e.t0,R.turn=e.turn,R.assistant=e.assistant,$_(e.turn),P_(e.streaming),qx(e),ci.setSession(e.id),e.streaming?(tv(),Y(e.phase||w(`chat.phase.running`),`busy`)):(nv(),e.phase?Y(e.phase,e.phase===Wx().error||e.phase===Wx().cancelled?`err`:`ok`):R.conn===`online`?Y(w(`shell.status.online`),`ok`):R.conn===`down`&&Y(w(`shell.status.reconnecting`),`err`)),Nx()}function Yx(e,t){kf(e);let n=e.streaming;Rr(e,!1),e.turn=null,e.phase=Wx()[t]??``;let r=e.assistant;r&&(ku(r)?zu(e,r):Au(e,r)),e.assistant=null,mv()===e&&hv(null),V(e)&&(R.turn=null,R.assistant=null,P_(!1),rv(),e.phase===``?Y(R.conn===`down`?w(`shell.status.reconnecting`):w(`shell.status.online`),R.conn===`down`?`err`:`ok`):Y(e.phase,t===`error`||t===`cancelled`?`err`:`ok`)),n&&W(e,!0),Nx()}function Xx(e,t){if(Nd(t)){Ux(e,t);return}if(t.phase===`start`){V(e)&&av(),kf(e),e.streaming&&e.assistant&&(ku(e.assistant)?Yx(e,`completed`):Au(e,e.assistant)),e.turn=t.turn??null,e.t0=Date.now(),e.phase=w(`chat.phase.running`),Rr(e,!0),vh(e),V(e)&&(R.t0=e.t0,P_(!0),Y(w(`chat.phase.running`),`busy`),$_(e.turn),tv()),Nx();return}(t.turn===void 0||t.turn===null||e.turn===null||t.turn===e.turn)&&((t.phase===`completed`||t.phase===`cancelled`||t.phase===`error`)&&(Yx(e,t.phase||``),t.phase===`error`&&gf(e,w(`chat.status.turnError`,{reason:t.error||w(`chat.status.unknownError`)}),`err`)),t.phase===`lagged`&&gf(e,w(`chat.status.lagged`),`warn`),t.hint&&gf(e,String(t.hint),`warn`))}function Zx(e,t){if(e.turn===null&&(e.turn=t.turn??null),t.turn!==void 0&&t.turn!==e.turn)return;e.streaming===!1&&Rr(e,!0);let n=Kp(e,t.delta||``);n!==null&&(Fu(e,Ru(e),n),V(e)&&$_(e.turn))}function Qx(e,t){e.turn===null&&(e.turn=t.turn??null),(t.turn===void 0||t.turn===e.turn)&&jf(e,t.delta||``)}function $x(e,t){e.turn===null&&(e.turn=t.turn??null),(t.turn===void 0||e.turn===null||t.turn===e.turn)&&(Af(e),Lu(e),Ch(e,t),W(e))}function eS(e,t){e.turn===null&&(e.turn=t.turn??null),(t.turn===void 0||e.turn===null||t.turn===e.turn)&&(Th(e,t),W(e))}function tS(e,t){if(e.turn===null&&(e.turn=t.turn??null),t.turn!==void 0&&e.turn!==null&&t.turn!==e.turn)return;if(Af(e),e.assistant===null&&typeof t.text==`string`&&t.text!==``){if(qp(e,t.text))return;Iu(e,Ru(e),t.text),W(e);return}let n=e.assistant;if(n){if(qp(e,t.text)){n.root.remove(),e.assistant=null;return}typeof t.text==`string`&&Iu(e,n,t.text),W(e)}}function nS(){let e=new he;return e.onConn(e=>{R.conn=e,e===`online`?Y(R.streaming?w(`chat.phase.running`):w(`shell.status.online`),R.streaming?`busy`:`ok`):e===`down`&&Y(w(`shell.status.reconnecting`),`err`)}),e.on(`status`,e=>{try{let t=Gx(e);V(t)?(ci.fromSse(e),e.session&&t.status&&(t.status={...t.status,...Qe(e)})):Kx(t,e),Xx(t,e)}catch(e){console.warn(`SSE status`,e)}}),e.on(`text`,e=>{try{Zx(Gx(e),e)}catch(e){console.warn(`SSE text`,e)}}),e.on(`thinking`,e=>{try{Qx(Gx(e),e)}catch(e){console.warn(`SSE thinking`,e)}}),e.on(`tool`,e=>{try{$x(Gx(e),e)}catch(e){console.warn(`SSE tool`,e)}}),e.on(`tool_result`,e=>{try{eS(Gx(e),e)}catch(e){console.warn(`SSE tool_result`,e)}}),e.on(`done`,e=>{try{ci.onSseDone(),tS(Gx(e),e)}catch(e){console.warn(`SSE done`,e)}}),e.on(`context`,e=>{try{gf(Gx(e),e.text||w(`chat.status.contextEvent`),e.cls===`err`?`err`:e.cls===`warn`?`warn`:void 0)}catch(e){console.warn(`SSE context`,e)}}),e.on(`compact`,e=>{try{dv(e)}catch(e){console.warn(`SSE compact`,e)}}),e.on(`inbox`,e=>{try{iS(Gx(e),e)}catch(e){console.warn(`SSE inbox`,e)}}),Wp(e,Gx),e.connect(),e}function rS(){let e=B();e&&e.streaming&&(Y(w(`chat.status.cancelling`),`busy`),j.cancel(ov(e)).catch(e=>{Y(w(`chat.status.cancelFailed`,{reason:sv(e)}),`err`)}))}function iS(e,t){let n=(t.text??t.note??t.hint??``).trim();n!==``&&mf(e,n,{source:t.source,target:t.target})}function aS(){j_({send(e,t){Px(e,t)},cancel:rS}),Br(e=>{no(e),so(e),Jx(e),Dh(),V_(),Cm(null,e)}),Vr(e=>{Nx();let t=B();t&&(t.id===e||t.id===``&&e===``)&&(qx(t),P_(t.streaming)),Cm(null,t)})}var oS=M(`#settingsTools`),sS=M(`#toolsCount`);function cS(e,t){let n=e??[];if(sS.textContent=String(n.length),t.replaceChildren(),!n.length){t.appendChild(N(`div`,`side-note`,w(`settings.tools.empty`)));return}let r=N(`table`,`tools-table`),i=N(`thead`),a=N(`tr`);a.appendChild(N(`th`,null,w(`settings.field.name`))),a.appendChild(N(`th`,null,w(`settings.field.description`))),i.appendChild(a),r.appendChild(i);let o=N(`tbody`);for(let e of n){let t=N(`tr`),n=N(`td`,`tools-name`);n.textContent=String(e.name),n.title=String(e.name),t.appendChild(n);let r=N(`td`,`tools-desc`);r.textContent=e.description?String(e.description):`—`,t.appendChild(r),o.appendChild(t)}r.appendChild(o),t.appendChild(r)}function lS(){let e=document.createElement(`div`);return j.tools().then(t=>{cS(t.tools,e),oS.replaceChildren(...e.childNodes)}).catch(t=>{sS.textContent=`—`,e.appendChild(N(`div`,`side-note err`,w(`settings.tools.unavailable`))),e.appendChild(N(`div`,`side-note`,t instanceof Error?t.message:String(t))),oS.replaceChildren(...e.childNodes)})}var uS=3;function dS(e){let t=typeof e==`string`?e.toLowerCase():``;return t===``?``:t.includes(`unknown workspace`)?w(`settings.batch.reasonUnknownWorkspace`):t.includes(`unknown session`)?w(`settings.batch.reasonUnknownSession`):``}function fS(e){let t=(e.id??``).trim();if(t===``)return w(`settings.batch.unknownTail`);let n=t.lastIndexOf(`/`);return n>=0?t.slice(n+1):t}function pS(e,t){let n=Array.isArray(t?.failed)?t.failed:[];if(n.length===0)return``;for(let t of n)typeof t?.error==`string`&&t.error!==``&&console.warn(`[batch] `+e+`失败 `+(t.id??``)+`:`+t.error);let r=typeof t?.deleted==`number`?t.deleted:t?.archived,i=typeof r==`number`&&r>0?w(`settings.batch.rest`,{n:r}):``,a=dS(n[0]?.error);if(n.length===1)return w(`settings.batch.failedOne`,{verb:e,reason:a===``?fS(n[0]):a,rest:i});let o=n.map(fS),s=o.slice(0,uS).join(w(`settings.batch.listSep`)),c=o.length>uS?w(`settings.batch.more`,{n:o.length}):``,l=a===``?``:w(`settings.batch.headSep`,{reason:a});return w(`settings.batch.failedMany`,{verb:e,n:n.length,head:l,shown:s,more:c,rest:i})}function mS(e){return(Array.isArray(e?.failed)?e.failed:[]).map(e=>e?.id??``).filter(e=>e!==``)}var hS=[[`.ws-details`,`.ws-count`],[`.arc-ws`,`.arc-ws-count`]];function gS(e){return`[data-id="`+e.replace(/\\/g,`\\\\`).replace(/"/g,`\\"`)+`"]`}function _S(e,t){if(!e)return;let n=Number.parseInt(e.textContent??``,10);Number.isFinite(n)&&(e.textContent=String(Math.max(0,n+t)))}function vS(e,t){for(let[n,r]of hS){let i=e.closest(n);i&&_S(i.querySelector(r),t)}}function yS(e){let t=e.container.querySelector(e.rowSel+gS(e.id));if(!t)return null;let n=t.parentElement;if(!n)return null;let r=t.nextElementSibling;vS(t,-1),_S(e.countEl??null,-1),t.remove();let i=!0;return{restore(){if(!i)return;i=!1;let a=r&&r.parentElement===n?r:null;n.insertBefore(t,a),vS(t,1),_S(e.countEl??null,1)}}}var bS=`.sess-leaf, .ws-worker-row`;function xS(e){if(e!==``){R.selSession===e&&(R.selSession=null),Lg()===e&&Rg(null),Dr(e);for(let t of _e(bS))t.dataset.id===e&&t.classList.remove(`active`,`sel`)}}function SS(e){for(let t of e)xS(t)}function CS(e){let t=(e??``).trim();if(t===``)return``;let n=t.lastIndexOf(`/`);return n>=0?t.slice(n+1):t}function wS(e){let t=(e.title??``).trim();return t===``?CS(e.id):t}function TS(e){let t=(e.workspace??``).trim();return t===``?`root`:t}function ES(e,t){let n=typeof e.modified==`number`?e.modified:-1,r=typeof t.modified==`number`?t.modified:-1;return r===n?wS(e).localeCompare(wS(t),`zh`):r-n}function DS(e){return(Array.isArray(e)?e:[]).filter(e=>e.archived===!0).sort(ES)}function OS(e){let t=new Map;for(let n of e){let e=TS(n),r=t.get(e);r?r.push(n):t.set(e,[n])}return[...t.entries()].map(([e,t])=>({workspace:e,rows:t})).sort((e,t)=>e.workspace.localeCompare(t.workspace,`zh`))}function kS(e){return e>0?String(e):`—`}function AS(e){return e.length===0}function jS(){return w(`settings.archive.empty`)}function MS(e){return w(`settings.archive.restoreConfirm`,{label:e})}function NS(e){return w(`settings.archive.deleteConfirm`,{label:e})}var PS=0,FS=!1;function IS(e,t=!1){let n=document.getElementById(`settingsArchiveHint`);n&&(n.className=t?`cfg-hintline err`:`cfg-hintline`,n.textContent=e)}function LS(e,t,n){let r=N(`button`,t,e);return r.type=`button`,r.addEventListener(`click`,n),r}function RS(e,t){let n=e.id??``,r=wS(e),i=N(`div`,`arc-row`);i.dataset.id=n;let a=N(`div`,`arc-main`);a.appendChild(N(`div`,`arc-title`,r));let o=CS(n);o!==``&&a.appendChild(N(`div`,`arc-id`,o)),i.appendChild(a);let s=N(`div`,`arc-actions`);return s.appendChild(LS(w(`settings.action.restore`),`btn-mini`,()=>void GS(n,r,t))),s.appendChild(LS(w(`settings.action.delete`),`btn-mini danger`,()=>void KS(n,r,t))),i.appendChild(s),i}function zS(e,t,n){let r=N(`details`,`arc-ws`);r.open=!0;let i=N(`summary`,`arc-ws-head`);i.appendChild(N(`span`,`arc-ws-name`,e)),i.appendChild(N(`span`,`arc-ws-count`,String(t.length))),r.appendChild(i);for(let e of t)r.appendChild(RS(e,n));return r}function BS(e,t){let n=N(`div`,`arc-wrap`);if(AS(e))return n.appendChild(N(`div`,`side-note`,jS())),n;for(let r of OS(e))n.appendChild(zS(r.workspace,r.rows,t));return n}function VS(e){let t=N(`div`,`arc-wrap`);return t.appendChild(N(`div`,`side-note err`,w(`settings.archive.unavailable`))),t.appendChild(N(`div`,`side-note`,O(e))),t}function HS(e,t,n){let r=++PS,i={container:e,countEl:t};return t&&n?.quiet!==!0&&(t.textContent=`…`),j.sessions({archived:!0}).then(n=>{if(r!==PS)return;let a=DS(n.sessions);t&&(t.textContent=kS(a.length)),e.replaceChildren(...BS(a,i).childNodes)}).catch(n=>{r===PS&&(t&&(t.textContent=`—`),e.replaceChildren(...VS(n).childNodes))})}async function US(e,t,n,r,i,a){FS=!0;let o=yS({container:a.container,id:n,rowSel:`.arc-row`,countEl:a.countEl});try{let s=pS(e,await r());s===``?(t&&xS(n),IS(i),await HS(a.container,a.countEl,{quiet:!0})):(o?.restore(),IS(s,!0))}catch(t){o?.restore(),IS(w(`settings.archive.failed`,{verb:e,reason:O(t)}),!0)}finally{FS=!1}}function WS(){let e=document.getElementById(`settingsArchive`);e&&HS(e,document.getElementById(`settingsArchiveCount`),{quiet:!0})}async function GS(e,t,n){FS||e===``||await Uv({title:w(`settings.archive.restoreTitle`),message:MS(t),okLabel:w(`settings.action.restore`)})&&await US(w(`settings.action.restore`),!1,e,()=>j.unarchiveSession(e),w(`settings.archive.restored`,{name:t}),n)}async function KS(e,t,n){FS||e===``||await Uv({title:w(`settings.archive.deleteTitle`),message:NS(t),okLabel:w(`settings.action.delete`),danger:!0})&&await US(w(`settings.action.delete`),!0,e,()=>j.batchDeleteSessions([e]),w(`settings.archive.deleted`,{name:t}),n)}var qS=[`low`,`high`,`max`];function JS(e,t=``,n=``){let r=N(`div`,`prov-model-row`),i=N(`input`,`cfg-input`);i.placeholder=w(`settings.providers.modelId`),i.value=t;let a=N(`input`,`cfg-input`);a.placeholder=w(`settings.providers.modelDisplayName`),a.value=n;let o=document.createElement(`details`);o.className=`prov-model-adv`;let s=document.createElement(`summary`);s.textContent=w(`settings.providers.advanced`),o.appendChild(s);let c=N(`div`,`prov-model-adv-body`),l=new Set,u=e=>e.replace(/\s+/g,``).toLowerCase(),d=new Map,f=N(`div`,`prov-effort-chips`),p=N(`button`,`btn-mini`,`+`);p.type=`button`,p.title=w(`settings.providers.addEffortTier`);let m=N(`input`,`cfg-input`);m.placeholder=w(`settings.providers.customTierPlaceholder`),m.hidden=!0,m.style.width=`170px`,m.style.flex=`0 0 auto`;let h=N(`span`,`cfg-hint`);h.hidden=!0,f.appendChild(p),f.appendChild(m),f.appendChild(h);let g=(e,t)=>{let n=e.dataset.effort??``;t?l.add(n):l.delete(n),e.classList.toggle(`on`,t),e.setAttribute(`aria-pressed`,t?`true`:`false`)},_=(t,n=!1)=>{let r=u(t);if(r===``||d.has(r))return;let i=N(`button`,`prov-effort-chip`,t);i.type=`button`,i.dataset.effort=t,i.addEventListener(`click`,()=>{g(i,!l.has(i.dataset.effort??``)),e.onLayout?.()}),d.set(r,i),f.insertBefore(i,p),g(i,n)},v=e=>{h.textContent=e,h.hidden=e===``},y=t=>{if(m.hidden)return;let n=m.value;if(m.value=``,m.hidden=!0,p.hidden=!1,t){let e=n.trim();e!==``&&(d.has(u(e))?v(w(`settings.providers.tierExists`,{tier:e})):(v(``),_(e,!0)))}e.onLayout?.()};p.addEventListener(`click`,()=>{m.hidden&&(v(``),m.value=``,m.hidden=!1,p.hidden=!0,e.onLayout?.(),m.focus())}),m.addEventListener(`keydown`,e=>{e.key===`Enter`?(e.preventDefault(),y(!0)):e.key===`Escape`&&(e.preventDefault(),e.stopPropagation(),y(!1))}),m.addEventListener(`blur`,()=>y(!0));for(let e of qS)_(e);let b={root:f,set(e){let t=new Map;for(let n of e){let e=n.trim();if(e===``)continue;let r=u(e);t.has(r)||t.set(r,e)}for(let[e,n]of t)d.has(e)||_(n);l.clear();for(let[e,n]of d)g(n,t.has(e))},values(){let e=[];for(let t of qS){let n=d.get(u(t))?.dataset.effort;n!==void 0&&l.has(n)&&e.push(n)}for(let t of d.values()){let n=t.dataset.effort??``;n!==``&&!qS.includes(n)&&l.has(n)&&e.push(n)}return e}},x=N(`input`,`cfg-input`);x.type=`text`,x.min=`0`,x.placeholder=w(`settings.providers.contextPlaceholder`);let ee=N(`input`,`cfg-input`);ee.type=`text`,ee.min=`0`,ee.placeholder=w(`settings.providers.maxOutPlaceholder`),c.appendChild(N(`label`,`prov-adv-label`,w(`settings.providers.reasoningEffort`))),c.appendChild(f),c.appendChild(N(`label`,`prov-adv-label`,w(`settings.providers.modelContext`))),c.appendChild(x),c.appendChild(N(`label`,`prov-adv-label`,w(`settings.field.maxOutputTokens`))),c.appendChild(ee),o.appendChild(c),o.addEventListener(`toggle`,()=>e.onLayout?.());let te=N(`button`,`btn-mini danger`,w(`settings.action.remove`));te.type=`button`,te.addEventListener(`click`,()=>{r.remove(),e.rows=e.rows.filter(e=>e.li!==r),e.onLayout?.()}),r.appendChild(i),r.appendChild(a),r.appendChild(o),r.appendChild(te),e.modelsBox.appendChild(r),e.rows.push({id:i,name:a,efforts:b,ctx:x,maxOut:ee,li:r}),e.onLayout?.()}var YS=null;function XS(e,t){YS?.();let n=N(`div`,`modal-scrim`),r=N(`div`,`modal-card prov-picker`);r.appendChild(N(`div`,`modal-card-title`,w(`settings.providers.pickTitle`))),r.appendChild(N(`div`,`side-note`,w(`settings.providers.pickNote`)));let i=N(`div`,`prov-picker-list`),a=[],o=N(`div`,`prov-picker-count`),s=()=>{let e=a.filter(e=>e.checked).length;o.textContent=w(`settings.providers.pickCount`,{n:e,total:a.length})},c=document.createElement(`div`);for(let t of e){let e=N(`label`,`prov-picker-row`+(t.existing?` existing`:``)),n=N(`input`,`prov-picker-cb`);n.type=`checkbox`,n.checked=!1,n.disabled=t.existing,n.dataset.modelId=t.id,n.addEventListener(`change`,s),e.appendChild(n),e.appendChild(N(`span`,`prov-picker-id`,t.id)),t.existing&&e.appendChild(N(`span`,`prov-picker-tag`,w(`settings.providers.pickExisting`))),c.appendChild(e),t.existing||a.push(n)}i.replaceChildren(...c.childNodes),s(),r.appendChild(i),r.appendChild(o);let l=N(`div`,`modal-card-actions`),u=N(`button`,`btn btn-soft`,w(`settings.action.cancel`));u.type=`button`;let d=N(`button`,`btn btn-accent`,w(`settings.action.confirm`));d.type=`button`;let f=null,p=()=>{YS===p&&(YS=null),f&&(F(f),f=null),n.remove()};YS=p,u.addEventListener(`click`,p),d.addEventListener(`click`,()=>{let e=a.filter(e=>e.checked).map(e=>e.dataset.modelId??``).filter(Boolean);p(),t(e)}),n.addEventListener(`click`,e=>{e.target===n&&p()}),l.appendChild(u),l.appendChild(d),r.appendChild(l),n.appendChild(r),document.body.appendChild(n),f=P(p),u.focus()}var ZS=M(`#settingsProviders`),QS=[],$S=null,eC=new Set;function tC(){return QS}function nC(){return $S}function rC(e,t){QS=e,$S=t}function iC(e){$S=e}function aC(e){return e instanceof Error?e.message:String(e)}var oC=[{value:`chat_completions`,label:`Chat Completions`},{value:`responses`,label:`Responses`},{value:`anthropic_messages`,label:`Anthropic Messages`}];function sC(e){let t=e.rows.filter(e=>e.id.value.trim()!==``||e.name.value.trim()!==``).map(e=>({id:e.id.value.trim(),name:e.name.value.trim()||e.id.value.trim(),reasoning_efforts:e.efforts.values(),context_window:cC(e.ctx),max_output_tokens:cC(e.maxOut)})),n=e.key.value.trim();return{id:e.originalId??e.name.value.trim(),name:e.name.value.trim(),note:e.note.value.trim(),base_url:e.url.value.trim(),request_format:e.format.value,...n===``?{}:{api_key:n},models:t}}function cC(e){let t=e.value.trim().toLowerCase().replace(/\s+/g,``);if(t===``)return null;let n=/^(\d+(?:\.\d+)?)([km])?$/.exec(t);if(!n)return null;let r=Number(n[1]);if(!Number.isFinite(r)||r<0)return null;let i=n[2]===`k`?1e3:n[2]===`m`?1e6:1,a=Math.round(r*i);return Number.isFinite(a)&&a>=0?a:null}function lC(e,t){let n=N(`div`,`prov-form`),r=N(`div`,`prov-editor-status`);n.appendChild(r);let i=(e,t)=>{let n=N(`label`,`prov-field`);return n.appendChild(N(`span`,`prov-field-label`,e)),n.appendChild(t),n},a=N(`input`,`cfg-input`);a.placeholder=w(`settings.providers.idPlaceholder`),a.value=e?.name??``,n.appendChild(i(w(`settings.field.name`),a));let o=N(`input`,`cfg-input`);o.placeholder=w(`settings.providers.notePlaceholder`),o.value=e?.note??``,n.appendChild(i(w(`settings.providers.note`),o));let s=N(`input`,`cfg-input`);s.type=`password`,s.placeholder=e?w(`settings.providers.keyPlaceholderExisting`):`API Key`,s.value=``,n.appendChild(i(`API Key`,s));let c=N(`input`,`cfg-input`);c.placeholder=`https://…/v1`,c.value=e?.base_url??``;let l=N(`button`,`btn btn-soft btn-mini`,w(`settings.providers.requestTest`));l.type=`button`;let u=N(`div`,`prov-urlrow`);u.appendChild(c),u.appendChild(l),n.appendChild(i(w(`settings.providers.apiUrl`),u));let d=document.createElement(`select`);d.className=`cfg-input`;for(let e of oC){let t=document.createElement(`option`);t.value=e.value,t.textContent=e.label,d.appendChild(t)}if(e?.request_format){if(!oC.some(t=>t.value===e.request_format)){let t=document.createElement(`option`);t.value=e.request_format,t.textContent=e.request_format,d.appendChild(t)}d.value=e.request_format}n.appendChild(i(w(`settings.providers.requestFormat`),d));let f=N(`div`,`prov-models-head`);f.appendChild(N(`span`,`prov-models-title`,w(`settings.field.model`)));let p=N(`button`,`btn btn-soft btn-mini`,w(`settings.providers.fetchModels`));p.type=`button`,p.title=w(`settings.providers.fetchModelsHint`),f.appendChild(p),n.appendChild(f);let m=N(`div`,`prov-models`);n.appendChild(m);let h={root:n,name:a,note:o,key:s,url:c,format:d,modelsBox:m,status:r,rows:[],onLayout:t.onLayout,originalId:e?.id};for(let t of e?.models??[]){JS(h,t.id,t.name);let e=h.rows[h.rows.length-1];e.efforts.set(t.reasoning_efforts??[]),t.context_window!=null&&(e.ctx.value=String(t.context_window))}let g=N(`button`,`btn-mini`,w(`settings.providers.addModel`));g.type=`button`,g.addEventListener(`click`,()=>JS(h)),n.appendChild(g);let _=N(`div`,`modal-card-actions`),v=N(`button`,`btn btn-soft`,w(`settings.action.cancel`));v.type=`button`;let y=N(`button`,`btn btn-accent`,w(`settings.action.save`));y.type=`button`,l.addEventListener(`click`,()=>{r.className=`prov-editor-status`,r.textContent=w(`settings.providers.testing`),j.testProvider(sC(h)).then(e=>{if(e.ok===!1||e.ok===void 0&&e.error){r.className=`prov-editor-status err`,r.textContent=w(`settings.providers.testFailed`,{reason:O(e.error,w(`settings.common.checkUrlKey`))});return}r.className=`prov-editor-status ok`,r.textContent=w(`settings.providers.testOk`,{ms:e.latency_ms??`—`,n:e.model_count??`—`})}).catch(e=>{r.className=`prov-editor-status err`,r.textContent=w(`settings.providers.testFailed`,{reason:aC(e)})})});let b=0;return p.addEventListener(`click`,()=>{let e=++b,t=a.value.trim();if(!t){r.className=`prov-editor-status err`,r.textContent=w(`settings.providers.needId`);return}r.className=`prov-editor-status`,r.textContent=w(`settings.providers.savingAndFetching`),j.saveProvider(sC(h)).then(()=>j.fetchProviderModels(t)).then(t=>{if(e!==b)return;if(t.ok===!1||t.ok===void 0&&t.error){r.className=`prov-editor-status err`,r.textContent=w(`settings.providers.fetchFailed`,{reason:O(t.error,w(`settings.common.checkUrlKey`))});return}let n=t.models??[];if(!n.length){r.className=`prov-editor-status`,r.textContent=w(`settings.providers.noModelsFetched`);return}let i=new Set(h.rows.map(e=>e.id.value.trim()).filter(Boolean));r.className=`prov-editor-status ok`,r.textContent=w(`settings.providers.fetched`,{n:n.length}),XS(n.map(e=>({id:e.id,existing:i.has(e.id)})),e=>{let t=e.filter(e=>!h.rows.some(t=>t.id.value.trim()===e));for(let e of t)JS(h,e,e);r.className=`prov-editor-status ok`,r.textContent=t.length?w(`settings.providers.added`,{n:t.length,total:n.length}):w(`settings.providers.noneSelected`,{n:n.length})})}).catch(t=>{e===b&&(r.className=`prov-editor-status err`,r.textContent=w(`settings.providers.fetchFailed`,{reason:aC(t)}))})}),y.addEventListener(`click`,()=>{let e=sC(h);if(!e.id){r.className=`prov-editor-status err`,r.textContent=w(`settings.providers.idRequired`);return}r.className=`prov-editor-status`,r.textContent=w(`settings.config.saving`),y.disabled=!0,j.saveProvider(e).then(n=>{if(n.ok===!1){r.className=`prov-editor-status err`,r.textContent=w(`settings.providers.saveFailed`,{reason:O(n.error,w(`settings.common.checkInput`))}),y.disabled=!1;return}y.disabled=!1,r.className=`prov-editor-status ok`,r.textContent=w(`settings.config.saved`),t.onSaved(e)}).catch(e=>{r.className=`prov-editor-status err`,r.textContent=w(`settings.providers.saveFailed`,{reason:aC(e)}),y.disabled=!1})}),v.addEventListener(`click`,()=>t.onCancel()),_.appendChild(v),_.appendChild(y),n.appendChild(_),h}function uC(e){return e.models?.length??0}function dC(e,t){let n=document.createElement(`div`);t.is_default&&n.appendChild(N(`span`,`prov-badge`,w(`settings.tag.default`))),t.has_key&&n.appendChild(N(`span`,`prov-badge key`,w(`settings.providers.keyConfigured`))),!t.is_default&&!t.has_key&&(n.textContent=`—`),e.replaceChildren(...n.childNodes)}function fC(e,t){let n=e.dataset.id??``;e.dataset.id=t.id,n!==t.id&&eC.delete(n)&&eC.add(t.id),e.classList.toggle(`is-default`,t.is_default===!0);let r=e.querySelector(`.prov-name`);r&&(r.textContent=t.name||t.id);let i=e.querySelector(`.prov-td-note`);i&&(i.textContent=t.note??`—`);let a=e.querySelector(`.prov-td-fmt`);a&&(a.textContent=t.request_format??`—`);let o=e.querySelector(`.prov-td-models`);o&&(o.textContent=String(uC(t)));let s=e.querySelector(`.prov-td-state`);s&&dC(s,t)}function pC(e,t=``){let n=ZS.querySelector(`.prov-list-msg`);n&&(n.textContent=e,n.className=`prov-list-msg`+(t?` `+t:``))}async function mC(e,t,n){try{let r=await j.providers();rC(r.providers??[],r.default_model??null);let i=tC().find(e=>e.id===n);if(!i){e.loadProviders();return}fC(t,i)}catch{e.loadProviders()}}var hC=new Set;function gC(){for(let e of hC)e.overlay&&(F(e.overlay),e.overlay=null);hC.clear()}function _C(e){if(!e.open)return;let t=e.inner.style.maxHeight;t!==`none`&&t!==``&&(e.inner.style.maxHeight=e.inner.scrollHeight+`px`)}function vC(e){if(e.open)return;e.open=!0;let t=e.tr.dataset.id??``;t&&eC.add(t),e.tr.classList.add(`expanded`),e.tr.setAttribute(`aria-expanded`,`true`),e.panelTr.classList.add(`open`),e.inner.style.maxHeight=e.inner.scrollHeight+`px`,e.overlay=P(()=>yC(e))}function yC(e){if(!e.open)return;e.open=!1;let t=e.tr.dataset.id??``;t&&eC.delete(t),e.overlay&&(F(e.overlay),e.overlay=null),e.inner.style.maxHeight===`none`&&(e.inner.style.maxHeight=e.inner.scrollHeight+`px`,e.inner.offsetHeight),e.panelTr.classList.remove(`open`),e.tr.classList.remove(`expanded`),e.tr.setAttribute(`aria-expanded`,`false`),e.inner.style.maxHeight=`0px`}function bC(e){e.open?yC(e):vC(e)}function xC(e,t){let n=N(`tr`,`prov-row`);n.dataset.id=t.id,n.title=w(`settings.providers.expandHint`),n.setAttribute(`aria-expanded`,`false`),t.is_default&&n.classList.add(`is-default`);let r=N(`td`,`prov-td-name`);r.appendChild(N(`span`,`prov-name`,t.name||t.id)),n.appendChild(r),n.appendChild(N(`td`,`prov-td-note`,t.note??`—`)),n.appendChild(N(`td`,`prov-td-fmt`,t.request_format??`—`)),n.appendChild(N(`td`,`prov-td-models`,String(uC(t))));let i=N(`td`,`prov-td-state`);dC(i,t),n.appendChild(i);let a=N(`td`,`prov-td-ops`),o=N(`button`,`btn-mini danger`,w(`settings.action.delete`));o.type=`button`,o.addEventListener(`click`,t=>{t.stopPropagation();let r=n.dataset.id??``,i=tC().find(e=>e.id===r);Uv({title:w(`settings.providers.deleteTitle`),message:w(`settings.providers.confirmDelete`,{name:i?.name||r}),okLabel:w(`settings.action.delete`),danger:!0}).then(t=>{t&&j.deleteProvider(r).then(()=>void e.loadProviders()).catch(e=>pC(w(`settings.providers.deleteFailed`,{reason:aC(e)})))})}),a.appendChild(o),n.appendChild(a);let s=N(`tr`,`prov-panel-row`),c=N(`td`,`prov-panel-td`);c.colSpan=6;let l=N(`div`,`prov-inline`);c.appendChild(l),s.appendChild(c);let u={tr:n,panelTr:s,inner:l,open:!1,overlay:null};hC.add(u);let d=lC(t,{onSaved:t=>{yC(u),mC(e,n,t.id)},onCancel:()=>yC(u),onLayout:()=>_C(u)});return l.appendChild(d.root),l.addEventListener(`transitionend`,e=>{e.target===l&&e.propertyName===`max-height`&&u.open&&(l.style.maxHeight=`none`)}),n.addEventListener(`click`,e=>{let t=e.target;t instanceof Element&&t.closest(`button, a, input, select, textarea, label`)||bC(u)}),eC.has(t.id)&&(u.open=!0,n.classList.add(`expanded`),n.setAttribute(`aria-expanded`,`true`),s.classList.add(`open`),l.style.maxHeight=`none`,u.overlay=P(()=>yC(u))),{tr:n,panelTr:s}}function SC(e,t){if(gC(),e.replaceChildren(),!tC().length){e.appendChild(N(`div`,`side-note`,w(`settings.providers.empty`)));return}let n=N(`table`,`prov-table`),r=N(`thead`),i=N(`tr`);for(let e of[w(`settings.field.name`),w(`settings.providers.note`),w(`settings.providers.requestFormat`),w(`settings.field.model`),w(`settings.field.status`),w(`settings.field.actions`)])i.appendChild(N(`th`,null,e));r.appendChild(i),n.appendChild(r);let a=N(`tbody`);for(let e of tC()){let n=xC(t,e);a.appendChild(n.tr),a.appendChild(n.panelTr)}n.appendChild(a),e.appendChild(n)}function CC(e,t){let n=N(`div`,`prov-default-card`),r=N(`div`,`prov-default-head`);r.appendChild(N(`span`,`prov-default-title`,w(`settings.providers.defaultModel`))),r.appendChild(N(`span`,`prov-default-note`,w(`settings.providers.defaultNote`))),n.appendChild(r);let i=N(`div`,`prov-default-body`);i.appendChild(N(`span`,`prov-default-label`,w(`settings.providers.currentDefault`)));let a=document.createElement(`select`);a.className=`cfg-input prov-default-sel`;let o=new Set;for(let e of tC())for(let t of e.models??[]){let n=document.createElement(`option`);n.value=t.id,n.textContent=(e.name||e.id)+` / `+t.id,o.add(t.id),a.appendChild(n)}if(nC()!==null&&!o.has(nC()??``)){let e=document.createElement(`option`);e.value=nC()??``,e.textContent=w(`settings.providers.defaultNotInList`,{model:nC()??``}),a.appendChild(e)}a.value=nC()??``;let s=N(`span`,`prov-default-msg`);a.addEventListener(`change`,()=>{let e=a.value;e&&(s.textContent=w(`settings.providers.applyingDefault`),s.className=`prov-default-msg`,j.setDefaultModel(e).then(()=>{iC(e),s.textContent=w(`settings.providers.defaultApplied`),s.className=`prov-default-msg ok`,t.loadProviders()}).catch(e=>{s.textContent=w(`settings.providers.switchFailed`,{reason:aC(e)}),s.className=`prov-default-msg err`,a.value=nC()??``}))}),i.appendChild(a),i.appendChild(s),n.appendChild(i),e.appendChild(n)}var wC={loadProviders:()=>TC()};async function TC(){let e=document.createElement(`div`);try{let e=await j.providers();rC(e.providers??[],e.default_model??null)}catch(t){e.appendChild(N(`div`,`side-note err`,w(`settings.providers.listUnavailable`))),e.appendChild(N(`div`,`side-note`,aC(t))),ZS.replaceChildren(...e.childNodes);return}SC(e,wC),CC(e,wC),ZS.replaceChildren(...e.childNodes)}var EC=null;function DC(){EC?.();let e=N(`div`,`modal-scrim`),t=N(`div`,`modal-card prov-modal`);t.appendChild(N(`div`,`modal-card-title`,w(`settings.providers.add`)));let n=null,r=()=>{EC===r&&(EC=null),n&&(F(n),n=null),e.remove()};EC=r;let i=lC(null,{onSaved:()=>{r(),TC()},onCancel:r});t.appendChild(i.root),e.appendChild(t),document.body.appendChild(e),n=P(r),i.name.focus()}function OC(){M(`#btnAddProvider`).addEventListener(`click`,()=>DC())}var kC=M(`#settingsPrompts`),AC=M(`#promptsWrap`);function jC(){return[[`{{model}}`,w(`settings.prompts.varCurrentModel`)],[`{{provider}}`,w(`settings.field.provider`)],[`{{base_url}}`,w(`settings.prompts.varApiUrl`)],[`{{workspace}}`,w(`settings.prompts.varWorkspaceName`)],[`{{session}}`,w(`settings.prompts.varSessionTitle`)],[`{{tools}}`,w(`settings.prompts.varToolList`)],[`{{context_window}}`,w(`settings.field.contextWindow`)],[`{{max_output_tokens}}`,w(`settings.field.maxOutputTokens`)],[`{{date}}`,w(`settings.prompts.varCurrentDate`)]]}var MC=`global`,NC=``,PC=[],FC=[],IC=null;function LC(e){return e instanceof Error?e.message:String(e)}function RC(e){return w(e===`global`?`settings.scope.global`:`settings.scope.workspace`)}function zC(){let e=document.createElement(`div`);if(!FC.length){e.appendChild(N(`div`,`side-note`,w(MC===`global`?`settings.prompts.emptyGlobal`:`settings.prompts.emptyWorkspace`))),kC.replaceChildren(...e.childNodes);return}let t=N(`table`,`prompts-table`),n=N(`thead`),r=N(`tr`);for(let e of[w(`settings.field.name`),w(`settings.prompts.scope`),w(`settings.field.status`),w(`settings.field.actions`)])r.appendChild(N(`th`,null,e));n.appendChild(r),t.appendChild(n);let i=N(`tbody`);for(let e of FC){let t=N(`tr`);e.id===IC&&t.classList.add(`is-active`);let n=N(`td`,`prompts-td-name`);n.appendChild(N(`span`,`prompt-name`,e.name||e.id)),e.id===IC&&n.appendChild(N(`span`,`prompt-badge active`,w(`settings.tag.active`))),t.appendChild(n),t.appendChild(N(`td`,`prompts-td-scope`,RC(e.scope)));let r=N(`td`,`prompts-td-state`);e.is_default&&r.appendChild(N(`span`,`prompt-badge def`,w(`settings.tag.default`))),!e.is_default&&e.id!==IC&&(r.textContent=`—`),t.appendChild(r);let a=N(`td`,`prompts-td-ops`),o=N(`button`,`btn-mini`,w(`settings.action.edit`));o.type=`button`,o.addEventListener(`click`,()=>VC(e));let s=N(`button`,`btn-mini`,w(`settings.prompts.setDefault`));s.type=`button`,s.disabled=!!e.is_default,s.addEventListener(`click`,()=>{j.setDefaultPrompt(e.id,MC===`global`?void 0:NC||void 0).then(()=>{BC(w(`settings.prompts.setDefaultDone`,{name:e.name||e.id})),UC()}).catch(e=>BC(w(`settings.prompts.setDefaultFailed`,{reason:LC(e)})))});let c=N(`button`,`btn-mini danger`,w(`settings.action.delete`));c.type=`button`,c.addEventListener(`click`,()=>{Uv({title:w(`settings.prompts.deleteTitle`),message:w(`settings.prompts.confirmDelete`,{name:e.name||e.id}),okLabel:w(`settings.action.delete`),danger:!0}).then(t=>{t&&j.deletePrompt(e.id,MC===`global`?void 0:NC||void 0).then(()=>{BC(w(`settings.prompts.deleted`,{name:e.name||e.id})),UC()}).catch(e=>BC(w(`settings.prompts.deleteFailed`,{reason:LC(e)})))})}),a.appendChild(o),a.appendChild(s),a.appendChild(c),t.appendChild(a),i.appendChild(t)}t.appendChild(i),e.appendChild(t),e.appendChild(N(`div`,`prompts-note`,w(`settings.prompts.legend`))),kC.replaceChildren(...e.childNodes)}function BC(e){let t=document.getElementById(`sideFoot`);t&&(t.textContent=e)}function VC(e){let t=N(`div`,`modal-scrim`),n=N(`div`,`modal-card prompt-modal`);n.appendChild(N(`div`,`modal-card-title`,e?w(`settings.prompts.editTitle`,{name:e.name||e.id}):w(`settings.prompts.newPrompt`)));let r=N(`details`,`prompt-vars`),i=document.createElement(`summary`);i.textContent=w(`settings.prompts.variables`),r.appendChild(i);let a=N(`table`,`prompt-vars-table`),o=N(`tbody`);for(let[e,t]of jC()){let n=N(`tr`);n.appendChild(N(`td`,`prompt-var-code`,e)),n.appendChild(N(`td`,`prompt-var-desc`,t)),o.appendChild(n)}a.appendChild(o),r.appendChild(a),n.appendChild(r);let s=N(`label`,`prov-field`);s.appendChild(N(`span`,`prov-field-label`,w(`settings.field.name`)));let c=N(`input`,`cfg-input`);c.placeholder=w(`settings.prompts.promptName`),c.value=e?.name??``,s.appendChild(c),n.appendChild(s);let l=N(`div`,`ws-fs-status`);n.appendChild(l);let u=N(`div`,`prompt-secs`);n.appendChild(u),PC.length||u.appendChild(N(`div`,`side-note`,w(`settings.prompts.noSegmentEdit`)));let d=[];for(let t of PC){let n=N(`div`,`prompt-sec-row`),r=N(`div`,`prompt-sec-head`);r.appendChild(N(`span`,`prompt-sec-name`,t.name||t.id)),r.appendChild(N(`span`,`prompt-sec-scope`,RC(t.scope)));let i=N(`input`,`prompt-inherit`);i.type=`checkbox`,i.checked=!0;let a=N(`label`,`prompt-inherit-label`);a.appendChild(i),a.appendChild(N(`span`,null,w(`settings.prompts.inherit`))),r.appendChild(a),n.appendChild(r);let o=N(`textarea`,`prompt-sec-ta cfg-input`);o.rows=3,o.disabled=!0,o.placeholder=w(`settings.prompts.inheritedFromBuiltin`);let s=e?.section_overrides?.[t.id];s!==void 0&&(i.checked=!1,o.value=s),n.appendChild(o),u.appendChild(n),d.push({sec:t,ta:o,inherit:i});let c=()=>{o.disabled=i.checked,o.placeholder=i.checked?w(`settings.prompts.inheritedFromBuiltin`):w(`settings.prompts.overridePlaceholder`),n.classList.toggle(`inherited`,i.checked)};i.addEventListener(`change`,c),c()}let f=N(`div`,`modal-card-actions`),p=N(`button`,`btn btn-soft`,w(`settings.action.cancel`));p.type=`button`;let m=N(`button`,`btn btn-accent`,w(`settings.action.save`));m.type=`button`;let h=null,g=()=>{h&&(F(h),h=null),t.remove()};h=P(g),p.addEventListener(`click`,g),m.addEventListener(`click`,()=>{let t=c.value.trim();if(!t){l.className=`ws-fs-status err`,l.textContent=w(`settings.prompts.nameRequired`),c.focus();return}let n={};!d.length&&e?.section_overrides&&Object.assign(n,e.section_overrides);for(let e of d)if(!e.inherit.checked){if(e.ta.value.trim()===``){l.className=`ws-fs-status err`,l.textContent=w(`settings.prompts.segmentNoOverride`,{name:e.sec.name||e.sec.id}),e.ta.focus();return}n[e.sec.id]=e.ta.value}m.disabled=!0,m.textContent=w(`settings.config.saving`),j.savePrompt({id:e?.id??`p`+Date.now().toString(36),name:t,section_overrides:n,workspace:MC===`workspace`&&NC||void 0}).then(e=>{if(e.ok===!1){l.className=`ws-fs-status err`,l.textContent=w(`settings.prompts.saveFailed`,{reason:O(e.error,w(`settings.common.checkInput`))}),m.disabled=!1,m.textContent=w(`settings.action.save`);return}g(),BC(w(`settings.prompts.saved`,{name:t})),UC()}).catch(e=>{l.className=`ws-fs-status err`,l.textContent=w(`settings.prompts.saveFailed`,{reason:LC(e)}),m.disabled=!1,m.textContent=w(`settings.action.save`)})}),f.appendChild(p),f.appendChild(m),n.appendChild(f),t.appendChild(n),document.body.appendChild(t),c.focus()}var HC=0;async function UC(){let e=++HC,t=document.createElement(`div`),n;try{n=await j.prompts(MC===`workspace`&&NC||void 0)}catch(n){if(e!==HC)return;t.appendChild(N(`div`,`side-note err`,w(`settings.prompts.unsupported`))),t.appendChild(N(`div`,`side-note`,LC(n))),kC.replaceChildren(...t.childNodes);return}e===HC&&(PC=n.sections??[],FC=n.prompts??[],IC=n.active_prompt??null,zC())}function WC(){let e=N(`div`,`prompts-scope`),t=N(`button`,`prompts-scope-btn`+(MC===`global`?` active`:``),w(`settings.scope.global`));t.type=`button`;let n=N(`button`,`prompts-scope-btn`+(MC===`workspace`?` active`:``),w(`settings.scope.workspace`));n.type=`button`;let r=document.createElement(`select`);r.className=`cfg-input prompts-ws-sel`,r.style.display=MC===`workspace`?``:`none`;let i=e=>{MC=e,t.classList.toggle(`active`,e===`global`),n.classList.toggle(`active`,e===`workspace`),r.style.display=e===`workspace`?``:`none`};t.addEventListener(`click`,()=>{i(`global`),UC()}),n.addEventListener(`click`,()=>{i(`workspace`),UC()}),e.appendChild(t),e.appendChild(n),e.appendChild(r),AC.appendChild(e),j.workspaces().then(e=>{let t=e.workspaces??[];r.replaceChildren();for(let e of t){let t=document.createElement(`option`);t.value=e.name,t.textContent=e.name,r.appendChild(t)}t.length?(NC=t[0].name,r.value=NC,r.disabled=!1):r.disabled=!0}).catch(()=>{r.disabled=!0}),r.addEventListener(`change`,()=>{NC=r.value,UC()}),M(`#btnNewPrompt`).addEventListener(`click`,()=>VC(null)),UC()}var GC=[404,409,422];function KC(e,t){return e instanceof D?GC.includes(e.status)&&e.technical.trim()!==``?e.technical:e.message:O(e,t)}function qC(e){return e.ok===!1||e.preset===void 0}async function JC(e){let t=An();Fn(e);try{let t=await j.createPermissionPreset(e);if(qC(t)||t.preset===void 0)throw new D(w(`settings.permissions.rejected`));return Fn(t.preset),{ok:!0,text:w(`settings.permissions.savedCustom`),preset:t.preset}}catch(e){return jn(t),{ok:!1,text:w(`settings.permissions.saveFailed`,{reason:KC(e,w(`settings.common.checkInput`))})}}}async function YC(e){let t=An();Fn(e);try{let t=await j.updatePermissionPreset(e.id,e);if(qC(t)||t.preset===void 0)throw new D(w(`settings.permissions.rejected`));return Fn(t.preset),{ok:!0,text:w(`settings.permissions.savedCustom`),preset:t.preset}}catch(e){return jn(t),{ok:!1,text:w(`settings.permissions.saveFailed`,{reason:KC(e,w(`settings.common.checkInput`))})}}}async function XC(e){let t=An(),n=Nn(e)?.label??e;In(e);try{if((await j.deletePermissionPreset(e)).ok===!1)throw new D(w(`settings.permissions.opRejected`));return{ok:!0,text:w(`settings.permissions.deleted`,{label:n})}}catch(e){return jn(t),{ok:!1,text:w(`settings.permissions.deleteFailed`,{reason:KC(e,w(`settings.common.retryLater`))})}}}var ZC=32,QC=64;function $C(){return w(`settings.permissions.idHint`)}function ew(){return w(`settings.permissions.rootsHint`)}function tw(){return w(`settings.permissions.toolsHint`)}function nw(e,t){let n=N(`input`,`cfg-input`);return n.type=`text`,n.value=e,n.placeholder=t,n}function rw(e,t){let n=N(`button`,`btn-mini`,e);return n.type=`button`,n.addEventListener(`click`,t),n}function iw(e,t,n){let r=N(`label`,`cfg-field`);return r.appendChild(N(`span`,`cfg-label`,e)),r.appendChild(t),n!==void 0&&n!==``&&r.appendChild(N(`span`,`cfg-hint`,n)),r}function aw(e,t,n){let r=N(`div`,`cfg-field`);r.appendChild(N(`span`,`cfg-label`,e));let i=N(`div`,`perm-field-body`);return i.appendChild(t),n!==void 0&&n!==``&&i.appendChild(N(`span`,`cfg-hint`,n)),r.appendChild(i),r}function ow(e,t,n){let r=N(`input`,`perm-switch-input`);r.type=`checkbox`,r.checked=t;let i=N(`label`,`perm-switch`);return i.appendChild(r),i.appendChild(N(`span`,`perm-switch-label`,e)),n!==void 0&&n!==``&&i.appendChild(N(`span`,`cfg-hint`,n)),{input:r,row:i}}function sw(e){let t=N(`div`,`perm-roots-edit`),n=N(`div`,`perm-roots-list`),r=e.slice(0,ZC),i=()=>{let e=document.createElement(`div`);for(let t of r){let n=N(`div`,`perm-root-row`);n.appendChild(N(`code`,`perm-root`,t)),n.appendChild(rw(w(`settings.action.remove`),()=>{let e=r.indexOf(t);e>=0&&r.splice(e,1),i()})),e.appendChild(n)}r.length===0&&e.appendChild(N(`div`,`side-note`,w(`settings.permissions.noExtraRootsAdded`))),n.replaceChildren(...e.childNodes)},a=e=>{let t=e.trim();t===``||r.includes(t)||r.length>=ZC||(r.push(t),i())},o=nw(``,w(`settings.permissions.rootPlaceholder`)),s=N(`div`,`perm-addrow`);return s.append(o,rw(w(`settings.action.add`),()=>{a(o.value),o.value=``}),rw(w(`settings.permissions.chooseDir`),()=>{Bm(w(`settings.permissions.chooseExtraDir`),ew()).then(e=>{e!==null&&a(e)})})),t.append(n,s),i(),{el:t,value:()=>r.slice()}}function cw(e,t,n){let r=N(`input`,`perm-tool-input`);r.type=`checkbox`,r.checked=t,r.addEventListener(`change`,()=>{r.checked?n.add(e):n.delete(e)});let i=N(`label`,`perm-tool`);return i.append(r,N(`span`,`perm-tool-name`,e)),i}function lw(e){let t=N(`div`,`perm-tools`),n=new Set(e),r=(r,i)=>{let a=document.createElement(`div`),o=new Set;for(let e of r.slice(0,QC))a.appendChild(cw(e,n.has(e),n)),o.add(e);for(let t of e)o.has(t)||a.appendChild(cw(t,!0,n));i!==``&&a.appendChild(N(`div`,`side-note`,i)),t.replaceChildren(...a.childNodes)};return r(e,``),j.tools().then(e=>{let t=(e.tools??[]).map(e=>e.name).filter(e=>typeof e==`string`&&e!==``);r(t,t.length===0?w(`settings.permissions.toolsNotLoaded`):``)}).catch(()=>r(e,w(`settings.permissions.toolsUnavailableReload`))),{el:t,value:()=>Array.from(n).slice(0,QC)}}function uw(e){e.classList.add(`hidden`),e.replaceChildren()}function dw(e,t,n){let r=t===null,i=nw(t?.id??``,w(`settings.permissions.idPlaceholder`));i.disabled=!r;let a=nw(t?.label??``,w(`settings.permissions.labelPlaceholder`)),o=ow(w(`settings.permissions.networkOn`),t?.network===!0),s=ow(w(`settings.permissions.workspaceOn`),t?.workspaceWritable===!0),c=ow(w(`settings.permissions.toolRootOn`),t?.toolRootsWritable===!0),l=ow(w(`settings.permissions.allPathsOn`),t?.allPaths===!0,w(`settings.permissions.allPathsRisk`)),u=ow(w(`settings.permissions.unsandboxedDeclare`),t?.unsandboxed===!0,vn()),d=sw(t?.writeRoots??[]),f=lw(t?.toolDeny??[]),p=N(`div`,`perm-editor-status`),m=N(`button`,`btn btn-accent`,w(`settings.action.save`));m.type=`button`;let h=N(`button`,`btn btn-soft`,w(`settings.action.cancel`));h.type=`button`;let g=(e,t)=>{p.className=`perm-editor-status`+(e===``?``:` `+e),p.textContent=t};m.addEventListener(`click`,()=>{let e=i.value.trim();if(e===``)return g(`err`,w(`settings.permissions.saveIdRequired`));if(!yn.test(e))return g(`err`,w(`settings.permissions.idInvalid`,{hint:$C()}));let t={id:e,label:a.value.trim()||e,network:o.input.checked,workspaceWritable:s.input.checked,toolRootsWritable:c.input.checked,writeRoots:d.value(),allPaths:l.input.checked,unsandboxed:u.input.checked,toolDeny:f.value()};m.disabled=!0,g(``,``),(r?JC(t):YC(t)).then(e=>{if(e.ok){n.onSettled(e);return}m.disabled=!1,g(`err`,e.text)})}),h.addEventListener(`click`,()=>n.onCancel());let _=N(`form`,`cfg-form perm-editor-form`);_.appendChild(N(`div`,`perm-editor-title`,r?w(`settings.permissions.newTitle`):w(`settings.permissions.editTitle`,{id:t?.id??``}))),_.appendChild(iw(w(`settings.permissions.idField`),i,r?$C():w(`settings.permissions.idLocked`))),_.appendChild(iw(w(`settings.permissions.labelField`),a,w(`settings.permissions.labelHint`)));let v=N(`div`,`perm-switches`);for(let e of[o,s,c,l,u])v.appendChild(e.row);_.appendChild(aw(w(`settings.permissions.switches`),v)),_.appendChild(aw(w(`settings.permissions.extraRootsLabel`),d.el,ew())),_.appendChild(aw(w(`settings.permissions.toolsField`),f.el,tw()));let y=N(`div`,`cfg-actions`);y.append(m,h),_.appendChild(y),_.appendChild(p);let b=document.createElement(`div`);b.appendChild(_),e.replaceChildren(...b.childNodes),e.classList.remove(`hidden`)}function fw(e,t,n){let r=N(`button`,t,e);return r.type=`button`,r.addEventListener(`click`,n),r}function pw(e,t,n){let r=N(`div`,`perm-card`);r.dataset.id=e.id,r.dataset.builtin=t?`1`:`0`;let i=N(`div`,`perm-card-head`);if(i.appendChild(N(`span`,`perm-card-title`,e.label||e.id)),i.appendChild(N(`code`,`perm-card-id`,e.id)),t)i.appendChild(N(`span`,`perm-badge`,w(`settings.permissions.builtin`)));else{let t=N(`div`,`perm-card-ops`);t.appendChild(fw(w(`settings.action.edit`),`btn-mini`,()=>n.onEdit(e))),t.appendChild(fw(w(`settings.action.delete`),`btn-mini danger`,()=>n.onDelete(e))),i.appendChild(t)}r.appendChild(i);let a=N(`div`,`perm-chips`);for(let t of xn(e))a.appendChild(N(`span`,`perm-chip `+t.tone,t.text));if(r.appendChild(a),e.writeRoots.length>0){let t=N(`div`,`perm-roots`);t.appendChild(N(`span`,`perm-roots-label`,w(`settings.permissions.extraRootsLabel`)));for(let n of e.writeRoots)t.appendChild(N(`code`,`perm-root`,n));r.appendChild(t)}let o=wn(e);return o!==``&&r.appendChild(N(`div`,`perm-card-note`,o)),r}function mw(e,t){let n=document.createElement(`div`),r=An();if(r===null)n.appendChild(N(`div`,`side-note`,w(`settings.permissions.unavailable`)));else{for(let e of r.builtin)n.appendChild(pw(e,!0,t));for(let e of r.custom)n.appendChild(pw(e,!1,t));r.custom.length===0&&n.appendChild(N(`div`,`side-note`,w(`settings.permissions.emptyCustom`)))}e.replaceChildren(...n.childNodes)}function hw(e){let t=An();e.textContent=t===null?``:Sn(t.max)}var gw=`#settingsPermissions`,_w=!1;function vw(e){return document.querySelector(e)}function yw(){return vw(gw+` .perm-list`)}function bw(){return vw(gw+` .perm-editor`)}function xw(e,t){let n=vw(gw+` .perm-status`);n!==null&&(n.className=`perm-status`+(e===``?``:t?` ok`:` err`),n.textContent=e)}function Sw(e){let t=bw();t!==null&&dw(t,e,{onSettled:e=>{uw(t),xw(e.text,e.ok)},onCancel:()=>uw(t)})}async function Cw(e){if(!await Uv({title:w(`settings.permissions.deleteTitle`),message:w(`settings.permissions.deleteConfirm`,{name:e.label||e.id}),okLabel:w(`settings.action.delete`),danger:!0}))return;let t=await XC(e.id);xw(t.text,t.ok)}function ww(){let e=yw();e!==null&&mw(e,{onEdit:e=>Sw(e),onDelete:e=>void Cw(e)})}function Tw(){let e=vw(gw+` .perm-max`);e!==null&&hw(e)}function Ew(e){let t=document.createElement(`div`),n=N(`div`,`perm-toolbar`);n.appendChild(N(`span`,`perm-max`,``));let r=N(`button`,`btn-mini`,w(`settings.permissions.newPreset`));r.type=`button`,r.id=`btnNewPreset`,r.addEventListener(`click`,()=>Sw(null)),n.appendChild(r),t.append(n,N(`div`,`perm-status`),N(`div`,`perm-list`),N(`div`,`perm-editor hidden`)),e.replaceChildren(...t.childNodes)}function Dw(){_w||(_w=!0,window.addEventListener(Tn,()=>{Tw(),ww()}))}async function Ow(){Ew(M(gw)),Dw(),Tw(),An()!==null&&ww();try{await Ln(!0),Tw(),ww()}catch(e){xw(w(`settings.permissions.unavailableReason`,{reason:O(e,w(`settings.common.retryLater`))}),!1)}}function kw(e){return typeof e==`string`?e.trim():``}function Aw(e){if(Array.isArray(e))return e;if(typeof e!=`object`||!e)return[];let t=e.plugins;return Array.isArray(t)?t:[]}function jw(e){let t=[];for(let n of Aw(e)){if(typeof n!=`object`||!n)continue;let e=n,r=kw(e.name)||kw(e.id);r!==``&&t.push({name:r,version:kw(e.version),note:kw(e.description)})}return t}async function Mw(){return jw(await j.plugins())}var Nw=`#settingsPlugins`;function Pw(e,t){let n=N(`section`,`plug-sec`),r=N(`header`,`plug-sec-head`);return r.appendChild(N(`h5`,`plug-sec-title`,e)),r.appendChild(N(`span`,`plug-sec-note`,t)),n.appendChild(r),n}function Fw(e,t){let n=N(`div`,`plug-row`);n.dataset.id=e.id;let r=N(`div`,`plug-row-main`);r.appendChild(N(`div`,`plug-row-label`,e.label)),r.appendChild(N(`div`,`plug-row-hint`,e.hint)),n.appendChild(r);let i=N(`label`,`plug-switch`),a=document.createElement(`input`);return a.type=`checkbox`,a.className=`plug-switch-input`,a.checked=gx(e.id),a.addEventListener(`change`,()=>{let n=a.checked,r=_x(e.id,n);r.ok||(a.checked=!n),t(r.text,r.ok)}),i.appendChild(a),i.appendChild(N(`span`,`plug-switch-track`)),n.appendChild(i),n}function Iw(e){let t=N(`div`,`plug-host`);t.dataset.name=e.name;let n=N(`div`,`plug-row-main`),r=N(`div`,`plug-row-label`,e.name);return e.version!==``&&r.appendChild(N(`span`,`plug-host-ver`,e.version)),n.appendChild(r),e.note!==``&&n.appendChild(N(`div`,`plug-row-hint`,e.note)),t.appendChild(n),t.appendChild(N(`span`,`plug-badge`,w(`settings.plugins.hostBadge`))),t}function Lw(e,t){let n=document.createElement(`div`);if(t.length===0)n.appendChild(N(`div`,`plug-empty`,w(`settings.plugins.hostEmpty`)));else for(let e of t)n.appendChild(Iw(e));e.replaceChildren(...n.childNodes)}async function Rw(){let e=M(Nw),t=N(`div`,`plug-status`),n=(e,n)=>{t.className=`plug-status`+(e===``?``:n?` ok`:` err`),t.textContent=e},r=Pw(w(`settings.plugins.clientTitle`),w(`settings.plugins.clientNote`)),i=N(`div`,`plug-list`);for(let e of fx())i.appendChild(Fw(e,n));r.appendChild(i),r.appendChild(t);let a=N(`div`,`plug-host-list`),o=Pw(w(`settings.plugins.hostTitle`),w(`settings.plugins.hostNote`));o.appendChild(a);let s=document.createElement(`div`);s.append(r,o),e.replaceChildren(...s.childNodes);try{Lw(a,await Mw())}catch(e){Lw(a,[]),console.warn(`[plugins] `+O(e,w(`settings.plugins.hostUnavailable`)))}}function zw(e){e.documentElement.lang=oe()===`zh`?`zh-CN`:`en`}function Bw(e){for(let t of e.querySelectorAll(`[data-i18n]`)){let e=t.getAttribute(`data-i18n`);e&&(t.textContent=w(e))}for(let t of e.querySelectorAll(`[data-i18n-title]`)){let e=t.getAttribute(`data-i18n-title`);e&&t.setAttribute(`title`,w(e))}for(let t of e.querySelectorAll(`[data-i18n-aria-label]`)){let e=t.getAttribute(`data-i18n-aria-label`);e&&t.setAttribute(`aria-label`,w(e))}}var Vw=()=>{try{location.reload()}catch{}};function Hw(){Vw()}var Uw=new Set,Ww=!1;function Gw(){let e=N(`div`,`cfg-field i18n-field`);e.appendChild(N(`span`,`cfg-label`,w(`common.language`)));let t=N(`select`,`cfg-input`);for(let e of[`zh`,`en`]){let n=N(`option`,null,ce(e));n.value=e,t.appendChild(n)}return t.value=oe(),t.addEventListener(`change`,()=>{let e=t.value;e!==oe()&&(C(e),Hw())}),e.appendChild(t),e.appendChild(N(`span`,`cfg-hint`,w(`common.language.hint`))),Uw.add(e),e}function Kw(e){let t=e.querySelector(`.cfg-label`),n=e.querySelector(`.cfg-hint`),r=e.querySelector(`select`);t&&(t.textContent=w(`common.language`)),n&&(n.textContent=w(`common.language.hint`)),r instanceof HTMLSelectElement&&(r.value=oe())}function qw(e){let t=document.createElement(`div`);t.appendChild(Gw()),e.replaceChildren(...Array.from(t.childNodes))}function Jw(){Ww||(Ww=!0,Yw(),se(()=>{Yw();for(let e of Uw)e.isConnected&&Kw(e)}))}function Yw(){Bw(document),zw(document)}var Xw=M(`#settingsPage`),Zw=M(`#settingsConfig`),Qw=M(`#settingsHint`),$w=[`low`,`high`,`max`],eT={select:(e,t)=>{let n=N(`select`,`cfg-input`);for(let t of e){let e=N(`option`,null,t.label);e.value=t.value,n.appendChild(e)}let r=t??``;if(r!==``&&!e.some(e=>e.value===r)){let e=N(`option`,null,r+w(`settings.suffix.current`));e.value=r,n.appendChild(e)}return n.value=r,n},text:(e,t,n=`text`)=>{let r=N(`input`,`cfg-input`);return r.type=n,r.value=e,t&&(r.placeholder=t),r},num:(e,t)=>{let n=N(`input`,`cfg-input`);return n.type=`number`,n.min=`0`,n.placeholder=t,e!=null&&(n.value=String(e)),n},field:(e,t,n)=>{let r=N(`label`,`cfg-field`);return r.appendChild(N(`span`,`cfg-label`,e)),r.appendChild(t),n&&r.appendChild(N(`span`,`cfg-hint`,n)),r}};function tT(e){let t=e.trim();if(t===``)return null;let n=Number(t);return Number.isFinite(n)&&n>=0?n:NaN}function nT(e,t,n){n.replaceChildren();let r=N(`form`,`cfg-form`),i=Array.isArray(e.available?.models)?e.available.models:[],a=Array.isArray(e.available?.efforts)?e.available.efforts:[],o=i.length?eT.select(i.map(e=>({value:e.id,label:e.name})),e.model??null):eT.text(e.model??``,w(`settings.config.modelName`));r.appendChild(eT.field(w(`settings.field.model`),o,i.length?``:w(`settings.config.modelNameHint`)));let s=[{value:``,label:w(`settings.config.effortStandard`)}];for(let e of a.length?a:$w)s.push({value:e,label:e});let c=eT.select(s,e.reasoning_effort??null);r.appendChild(eT.field(w(`settings.config.effort`),c,a.length?w(`settings.config.effortHint`):w(`settings.config.effortManual`)));let l=eT.text(e.base_url??``,`https://…/v1`);r.appendChild(eT.field(`Base URL`,l));let u=eT.text(``,w(`settings.config.apiKeyPlaceholder`),`password`);r.appendChild(eT.field(`API Key`,u,w(`settings.config.apiKeyHint`)));let d=e.context_window??e.context_window_tokens??t,f=eT.num(d,w(`settings.config.contextWindowPlaceholder`));r.appendChild(eT.field(w(`settings.field.contextWindow`),f));let p=eT.num(e.max_output_tokens??null,w(`settings.config.noLimit`));r.appendChild(eT.field(w(`settings.field.maxOutputTokens`),p));let m=eT.num(e.max_steps??null,w(`settings.config.notSet`));r.appendChild(eT.field(w(`settings.field.maxSteps`),m));let h=N(`textarea`,`cfg-input cfg-sys`);h.rows=6,h.placeholder=w(`settings.config.systemPromptPlaceholder`),h.value=e.system_prompt??``,r.appendChild(eT.field(w(`settings.field.systemPrompt`),h,w(`settings.config.systemPromptHint`)));let g=N(`div`,`cfg-actions`),_=N(`button`,`btn btn-accent`,w(`settings.action.save`));_.type=`button`;let v=N(`button`,`btn btn-soft`,w(`settings.action.reload`));v.type=`button`,g.appendChild(_),g.appendChild(v),r.appendChild(g);let y=N(`div`,`cfg-status`);r.appendChild(y),n.appendChild(r);let b=(e,t)=>{let n=tT(e.value);if(Number.isNaN(n))throw y.className=`cfg-status err`,y.textContent=w(`settings.config.notAValidNumber`,{name:t}),Error(`bad number: `+t);return n};_.addEventListener(`click`,()=>{y.className=`cfg-status`,y.textContent=``;let t={},n=o.value.trim();n!==``&&n!==(e.model??``)&&(t.model=n);let r=l.value.trim();r!==``&&r!==(e.base_url??``)&&(t.base_url=r),u.value.trim()!==``&&(t.api_key=u.value.trim()),t.reasoning_effort=c.value===``?null:c.value,t.context_window=b(f,w(`settings.field.contextWindow`)),t.max_output_tokens=b(p,w(`settings.field.maxOutputTokens`)),t.max_steps=b(m,w(`settings.field.maxSteps`)),t.system_prompt=h.value,_.disabled=!0,_.textContent=w(`settings.config.saving`),j.saveConfig(t).then(e=>{y.className=`cfg-status ok`,y.textContent=e.ok===!1?w(`settings.config.saveFailedRetry`):w(`settings.config.saved`),e.ok!==!1&&window.dispatchEvent(new Event(`studio:config-saved`))}).catch(e=>{y.className=`cfg-status err`;let t=e;e instanceof D&&e.status===409?y.textContent=w(`settings.config.busySave`):e instanceof D&&(e.status===405||e.status===404)?y.textContent=w(`settings.config.unsupportedSave`):y.textContent=w(`settings.config.saveFailed`,{reason:t.message||String(e)})}).finally(()=>{_.disabled=!1,_.textContent=w(`settings.action.save`)})}),v.addEventListener(`click`,()=>{rT({refresh:!0})})}async function rT(e={}){let t=document.createElement(`div`),n;try{n=e.refresh===!0?await gt():await ht()}catch(e){t.appendChild(N(`div`,`side-note err`,w(`settings.config.unavailable`))),t.appendChild(N(`div`,`side-note`,e instanceof Error?e.message:String(e))),Zw.replaceChildren(...t.childNodes),Qw.textContent=``;return}let r=null;try{r=(await j.status())?.context_usage?.window??null}catch{}try{nT(n,r,t),Qw.textContent=``,Zw.replaceChildren(...t.childNodes)}catch(e){t.appendChild(N(`div`,`side-note err`,w(`settings.config.unavailable`))),t.appendChild(N(`div`,`side-note`,e instanceof Error?e.message:String(e))),Zw.replaceChildren(...t.childNodes),Qw.textContent=``}}var iT=[`general`,`config`,`tools`,`archive`,`providers`,`prompts`,`permissions`,`plugins`],aT=`config`;function oT(e){return M(`.settings-pane[data-pane="`+e+`"]`)}function sT(e){return M(`.settings-nav-item[data-page="`+e+`"]`)}var cT={};function lT(e){e===`general`?qw(M(`#settingsGeneral`)):e===`config`?rT():e===`tools`?lS():e===`archive`?HS(M(`#settingsArchive`),M(`#settingsArchiveCount`)):e===`providers`?TC():e===`prompts`?UC():e===`permissions`?Ow():Rw()}function uT(e){aT=e;for(let t of iT)oT(t).classList.toggle(`active`,t===e);for(let t of iT)sT(t).classList.toggle(`active`,t===e);cT[e]||(cT[e]=!0,lT(e))}function dT(e){lT(e)}function fT(){dT(aT)}var pT=null;function mT(){Xw.classList.remove(`hidden`),pT||(pT=P(hT)),dT(`config`),uT(`config`)}function hT(){if(pT){let e=pT;pT=null,je(e),F(e)}Xw.classList.add(`hidden`)}function gT(){M(`#btnConfig`).addEventListener(`click`,mT),M(`#btnSettingsClose`).addEventListener(`click`,hT),M(`#btnSettingsReload`).addEventListener(`click`,fT);for(let e of iT)sT(e).addEventListener(`click`,()=>uT(e));Jw(),OC(),WC()}function _T(e,t){Mg(!1),bg.clear(),e.renderTreeInto?e.renderTreeInto(t,null):e.loadTreeInto(t,null)}function vT(e){for(let t of e.querySelectorAll(`.sess-check`))t.checked=t.dataset.id!==void 0&&bg.has(t.dataset.id);let t=e.querySelector(`.sess-batchbar`);t&&(t.querySelector(`.sess-batchbar-count`).textContent=w(`shell.tree.selectedCount`,{n:bg.size}),t.classList.toggle(`active`,bg.size>0))}async function yT(e,t){let n=Array.from(bg);if(!n.length||!await Uv({title:w(`shell.tree.batchDeleteTitle`),message:w(`shell.tree.batchDeleteConfirm`,{n:n.length}),okLabel:w(`settings.action.delete`),danger:!0}))return;let r=new Map;for(let e of n){let n=yS({container:t,id:e,rowSel:`.sess-leaf`});n&&r.set(e,n)}let i=Fg();Ig(i.filter(e=>!n.includes(e.id??``)));try{let a=await j.batchDeleteSessions(n),o=pS(w(`settings.action.delete`),a);if(o===``)SS(n),_T(e,t),Q(w(`shell.tree.deletedCount`,{n:n.length}));else{let e=mS(a);SS(n.filter(t=>!e.includes(t)));for(let t of e)r.get(t)?.restore();Ig(i),bg.clear();for(let t of e)bg.add(t);vT(t),Q(o)}WS()}catch(e){for(let e of r.values())e.restore();Ig(i),vT(t),Q(w(`shell.tree.batchDeleteFailed`,{reason:e instanceof Error?e.message:String(e)}))}}function bT(e,t,n){xT();let r=e.getBoundingClientRect(),i=N(`div`,`sess-menu`);for(let e of n){let t=N(`button`,`sess-menu-item`+(e.danger?` danger`:``),e.label);t.type=`button`,e.disabled&&(t.disabled=!0,t.classList.add(`disabled`)),t.addEventListener(`click`,t=>{t.stopPropagation(),xT(),e.onPick()}),i.appendChild(t)}e.appendChild(i);let a=Math.max(0,Math.min(t.right-r.left-8,e.clientWidth-180)),o=Math.max(0,Math.min(t.bottom-r.top+2,e.clientHeight-60));i.style.left=a+`px`,i.style.top=o+`px`}function xT(){for(let e of document.querySelectorAll(`.sess-menu`))e.remove()}function ST(e,t,n){sm(t,n),Rg(t),R.selSession=t,Sx(e),Cx(e),Q(n?.title?w(`shell.tree.switchedTo`,{title:n.title}):w(`shell.tree.switched`)),j.activateSession(t).then(e=>{e.ok===!1&&Q(w(`shell.tree.viewOpenActivateFailed`))}).catch(e=>{e instanceof D&&e.status===409?Q(w(`shell.tree.runningViewOpen`)):Q(w(`shell.tree.viewOpenActivateFailed`))})}async function CT(e,t,n,r){if(!await Uv({title:w(`shell.tree.archiveTitle`),message:w(`shell.tree.archiveConfirm`,{label:r}),okLabel:w(`shell.tree.archiveOk`)}))return;let i=yS({container:t,id:n,rowSel:`.sess-leaf`}),a=Fg();Ig(a.filter(e=>e.id!==n));try{let e=await j.archiveSession(n),t=pS(w(`shell.tree.archiveOk`),e);t===``?(xS(n),Q(w(`shell.tree.archived`,{label:r}))):(i?.restore(),Ig(a),Q(t)),WS()}catch(e){i?.restore(),Ig(a),Q(w(`shell.tree.archiveFailed`,{reason:e instanceof Error?e.message:String(e)}))}}async function wT(e,t,n,r){if(!await Uv({title:w(`shell.tree.deleteTitle`,{label:r}),message:w(`shell.tree.deleteConfirm`),okLabel:w(`settings.action.delete`),danger:!0}))return;let i=yS({container:t,id:n,rowSel:`.sess-leaf`}),a=Fg();Ig(a.filter(e=>e.id!==n));try{let e=await j.batchDeleteSessions([n]),t=pS(w(`settings.action.delete`),e);t===``?(xS(n),Q(w(`shell.tree.deletedSession`,{label:r}))):(i?.restore(),Ig(a),Q(t)),WS()}catch(e){i?.restore(),Ig(a),Q(w(`shell.tree.deleteFailed`,{reason:e instanceof Error?e.message:String(e)}))}}async function TT(e,t,n,r){let i=window.prompt(w(`shell.tree.renamePrompt`),r);if(i===null)return;let a=i.trim();if(a!==``&&a!==r)try{await j.renameSession(n,a),e.loadTreeInto(t,null)}catch(e){Q(w(`shell.tree.renameFailed`,{reason:e instanceof Error?e.message:String(e)}))}}async function ET(e,t,n){let r=window.prompt(w(`shell.tree.branchPrompt`),``);if(r!==null)try{let i=await j.branchSession(n,r.trim()===``?void 0:r.trim());if(i.ok===!1){Q(w(`shell.tree.branchFailedRetry`));return}let a=i.id??i.branch;a&&(R.selSession=a),Q(w(`shell.tree.branched`)),e.loadTreeInto(t,null)}catch(e){Q(w(`shell.tree.branchFailed`,{reason:e instanceof Error?e.message:String(e)}))}}async function DT(e,t,n){if(await Uv({title:w(`shell.tree.deleteWsTitle`,{name:n}),message:w(`shell.tree.deleteConfirm`),okLabel:w(`settings.action.delete`),danger:!0}))try{await j.deleteWorkspace(n),Q(w(`shell.tree.wsDeleted`,{name:n})),e.loadTreeInto(t,null)}catch(e){Q(w(`shell.tree.deleteFailed`,{reason:e instanceof Error?e.message:String(e)}))}}async function OT(e,t,n){let r=window.prompt(w(`shell.tree.renameWsPrompt`),n);if(r===null)return;let i=r.trim();if(i!==``&&i!==n)try{await j.renameWorkspace(n,i),e.loadTreeInto(t,null)}catch(e){Q(w(`shell.tree.renameFailed`,{reason:e instanceof Error?e.message:String(e)}))}}function kT(e,t=!0){let n={workspace:e.workspace,title:e.title},r=e.prompt??``;if(r!==``&&(n.prompt=r),!t)return n;let i=e.model??``;return i!==``&&(n.model=i),e.mode===`execution`&&(n.mode=e.mode),n}var AT=new Set([`text`,`search`,`url`,`tel`,`email`,`password`,`number`]);function jT(e){if(e.key!==`Enter`||e.shiftKey)return!1;let t=e.target;if(!t||typeof t.tagName!=`string`||t.tagName.toUpperCase()!==`INPUT`)return!1;let n=typeof t.type==`string`?t.type.toLowerCase():`text`;return AT.has(n===``?`text`:n)}function MT(e,t){let n=N(`div`,`modal-scrim`),r=N(`div`,`modal-card`);r.appendChild(N(`div`,`modal-card-title`,w(`shell.new.title`)));let i=N(`input`,`cfg-input`);i.placeholder=w(`shell.new.titlePlaceholder`);let a=N(`label`,`prov-field`);a.appendChild(N(`span`,`prov-field-label`,w(`shell.field.title`))),a.appendChild(i),r.appendChild(a);let o=document.createElement(`select`);o.className=`cfg-input`;let s=document.createElement(`option`);s.value=``,s.textContent=w(`shell.new.rootWorkspace`),o.appendChild(s);for(let e of Ng()){let t=document.createElement(`option`);t.value=e.name,t.textContent=e.name,o.appendChild(t)}t&&(o.value=t);let c=N(`label`,`prov-field`);c.appendChild(N(`span`,`prov-field-label`,w(`settings.scope.workspace`))),c.appendChild(o),r.appendChild(c);let l=document.createElement(`select`);l.className=`cfg-input`;let u=document.createElement(`option`);u.value=``,u.textContent=w(`shell.new.followDefault`),l.appendChild(u);let d=N(`label`,`prov-field`);d.appendChild(N(`span`,`prov-field-label`,w(`settings.field.model`))),d.appendChild(l),r.appendChild(d),j.config().then(e=>{let t=e.available?.models??[];for(let e of t){let t=document.createElement(`option`);t.value=e.id;let n=e.name||e.id,r=(e.provider??``).trim();t.textContent=(r?r+` · `:``)+e.id+(n===e.id?``:`(`+n+`)`),l.appendChild(t)}if(!t.length){let e=document.createElement(`option`);e.value=``,e.textContent=w(`shell.new.noModels`),e.disabled=!0,l.appendChild(e)}}).catch(()=>{let e=document.createElement(`option`);e.value=``,e.textContent=w(`shell.new.modelsUnavailable`),e.disabled=!0,l.appendChild(e)});let f=document.createElement(`select`);f.className=`cfg-input`;for(let e of Kt()){let t=document.createElement(`option`);t.value=e.value,t.textContent=e.label,f.appendChild(t)}f.value=`standard`;let p=N(`label`,`prov-field`);p.appendChild(N(`span`,`prov-field-label`,w(`shell.field.mode`))),p.appendChild(f),r.appendChild(p);let m=N(`label`,`prov-field`);m.appendChild(N(`span`,`prov-field-label`,w(`shell.field.prompt`)));let h=document.createElement(`select`);h.className=`cfg-input`;let g=document.createElement(`option`);g.value=``,g.textContent=w(`shell.new.followDefault`),h.appendChild(g),m.appendChild(h),m.style.display=`none`,r.appendChild(m),j.prompts().then(e=>{let t=e.prompts??[];if(t.length){for(let e of t){let t=document.createElement(`option`);t.value=e.id,t.textContent=e.name+` (`+(e.scope===`global`?w(`settings.scope.global`):w(`settings.scope.workspace`))+`)`+(e.is_default?` · `+w(`settings.tag.default`):``),h.appendChild(t)}m.style.display=``}}).catch(()=>{});let _=N(`div`,`ws-fs-status`);r.appendChild(_);let v=N(`div`,`modal-card-actions`),y=N(`button`,`btn btn-soft`,w(`settings.action.cancel`));y.type=`button`;let b=N(`button`,`btn btn-accent`,w(`shell.action.create`));b.type=`button`;let x=null,ee=()=>{x&&(F(x),x=null),n.remove()};x=P(ee),y.addEventListener(`click`,ee),b.addEventListener(`click`,()=>{let t=i.value.trim();if(!t){_.className=`ws-fs-status err`,_.textContent=w(`shell.new.titleRequired`),i.focus();return}let n=o.value===``?null:o.value,r=l.value===``?void 0:l.value,a=h.value===``?void 0:h.value;b.disabled=!0,b.textContent=w(`shell.new.creating`);let s=f.value,c=e=>j.createSession(kT({workspace:n,title:t,model:r,prompt:a,mode:s},e));c(!0).catch(e=>{let t=e;if((r!==void 0||s!==`standard`)&&t&&typeof t.status==`number`&&t.status>=400&&t.status<500)return c(!1);throw e}).then(async n=>{if(n.ok===!1)throw Error(O(n.error,w(`shell.new.rejected`)));let r=n.id;if(!r)try{let e=((await j.sessions()).sessions??[]).filter(e=>e.title===t);e.sort((e,t)=>(t.modified??0)-(e.modified??0)),r=e[0]?.id}catch{r=void 0}if(!r){_.className=`ws-fs-status err`,_.textContent=w(`shell.new.createdRefresh`),ee(),e.loadSessions();return}sm(r,{kind:`session`,title:t}),Rg(r),R.selSession=r,Q(w(`shell.new.createdOpened`,{title:t})),j.activateSession(r).then(e=>{e.ok===!1&&Q(w(`shell.tree.viewOpenActivateFailed`))}).catch(e=>{Q(w(`shell.tree.viewOpenFailed`,{reason:O(e,w(`shell.new.activateFailed`))}))}),ee(),e.loadSessions()}).catch(e=>{_.className=`ws-fs-status err`,_.textContent=w(`shell.new.failed`,{reason:e instanceof Error?e.message:String(e)}),b.disabled=!1,b.textContent=w(`shell.action.create`)})}),r.addEventListener(`keydown`,e=>{jT(e)&&(e.preventDefault(),b.disabled||b.click())}),v.appendChild(y),v.appendChild(b),r.appendChild(v),n.appendChild(r),document.body.appendChild(n),i.focus()}function NT(e){zm({title:w(`shell.new.wsTitle`),note:w(`shell.new.wsNote`),confirmLabel:w(`shell.action.create`),busyLabel:w(`shell.new.wsBusy`),fallbackNote:w(`shell.new.wsFallback`),onPick:(t,n)=>{n.setBusy(!0),j.createWorkspaceByPath(t).then(r=>{if(r.ok===!1){n.status.className=`ws-fs-status err`,n.status.textContent=w(`shell.new.wsRegisterFailed`,{reason:O(r.error,w(`shell.new.wsCheckPath`))}),n.setBusy(!1);return}Q(w(`shell.new.wsRegistered`,{path:t})),n.close(),e.loadSessions()}).catch(e=>{n.status.className=`ws-fs-status err`,n.status.textContent=w(`shell.new.wsRegisterFailed`,{reason:O(e,w(`shell.new.wsCheckPath`))}),n.setBusy(!1)})}})}function PT(e){let t=e.parentSessionId??e.parent_session??e.parent;return typeof t==`string`&&t.trim()!==``?t.trim():null}function FT(e){return e.kind===`worker`||(e.id??``).startsWith(`worker:`)}function IT(e){let t=(e.workspace??``).trim();return t===``?`root`:t}function LT(e){let t=e.lastIndexOf(`/`);return t>=0?e.slice(t+1):e}function RT(e){let t=zg();return t===``||e.toLowerCase().includes(t)}function zT(e){let t=[...e];return Vg()===`name`?(t.sort((e,t)=>(e.title||``).localeCompare(t.title||``,`zh`)),t):(t.sort((e,t)=>{let n=typeof e.modified==`number`?e.modified:-1;return(typeof t.modified==`number`?t.modified:-1)-n}),t)}function BT(e){return e.filter(e=>e.kind===`worker`||(e.id??``).startsWith(`worker:`))}function VT(e){let t=(e.title??``).trim(),n=/^(W\d+)/.exec(t);if(n&&n[1])return n[1];let r=e.id??``,i=r.lastIndexOf(`/`);return i>=0?r.slice(i+1):r}function HT(e){return(e.title??``).trim().replace(/^W\d+\s*[·::-]\s*/,``)||LT(e.id??``)||(e.id??``)}function UT(e){return e.map(e=>[e.id??``,e.title??``,e.model??``,Fr(e.id??``)?`1`:`0`,String(e.events??``),PT(e)??``].join(``)).join(``)}function WT(e,t,n=t){let r=N(`button`,`btn btn-soft ws-newsess`);r.type=`button`,r.appendChild(bx(`plus`)),r.appendChild(N(`span`,null,w(`shell.tree.newSession`))),r.addEventListener(`click`,()=>e.newSession()),n.appendChild(r);let i=N(`div`,`ws-toolrow`),a=N(`div`,`ws-search`);a.appendChild(bx(`search`));let o=N(`input`,`ws-search-input`);o.placeholder=w(`shell.tree.searchPlaceholder`),o.value=zg(),o.addEventListener(`input`,()=>{Bg(o.value.trim().toLowerCase());let n=Gg();n!==null&&window.clearTimeout(n),Kg(window.setTimeout(()=>void e.loadTreeInto(t,null),180))}),a.appendChild(o),i.appendChild(a);let s=N(`button`,`ws-toolbtn`);s.type=`button`,s.appendChild(bx(`sort`)),s.appendChild(N(`span`,`ws-toolbtn-label`,Vg()===`active`?w(`settings.tag.active`):w(`settings.field.name`))),s.title=w(`shell.tree.sortTitle`,{label:Vg()===`active`?w(`shell.tree.sortRecent`):w(`settings.field.name`)}),s.addEventListener(`click`,()=>{Hg(Vg()===`active`?`name`:`active`),e.loadTreeInto(t,null)}),i.appendChild(s);let c=N(`button`,`ws-toolbtn`);c.type=`button`,c.title=w(`shell.tree.newWorkspace`),c.appendChild(bx(`folder-plus`)),c.addEventListener(`click`,()=>e.newWorkspace()),i.appendChild(c),n.appendChild(i),n.appendChild(N(`div`,`ws-divider`))}function GT(e,t,n){let r=n.id??``,i=jg(),a=r===Lg(),o=N(`div`,`sess-leaf`+(a?` active`:``)+(R.selSession===r?` sel`:``));if(o.dataset.id=r,!i){let e=N(`span`,`sess-dot`+(Fr(r)?` busy`:``));e.dataset.dot=r,bi(e,Fr(r)?w(`shell.tree.running`):w(`shell.tree.idle`)),o.appendChild(e)}let s=null;if(i){let e=N(`input`,`sess-check`);e.type=`checkbox`,e.dataset.id=r,e.checked=bg.has(r),e.addEventListener(`change`,()=>{e.checked?bg.add(r):bg.delete(r),vT(t)}),o.appendChild(e),s=e}o.appendChild(bx(`file`));let c=n.title||LT(r)||w(`shell.tree.unnamed`),l=N(`span`,`sess-leaf-name`,c);o.appendChild(l);let u=Yg().get(r)??0;if(u>0){let e=N(`span`,`sess-worker-count`,`W`+u);e.title=w(`shell.tree.workerBadgeTitle`,{n:u}),o.appendChild(e)}let d=[];n.events!==void 0&&d.push(w(`shell.tree.events`,{n:n.events})),d.length&&o.appendChild(N(`span`,`sess-leaf-meta`,d.join(` · `)));let f=N(`span`,`sess-leaf-grant hidden`);if(f.dataset.grantMark=r,o.appendChild(f),wx(f,nb(r)),bi(o,c+w(i?`shell.tree.clickCheck`:`shell.tree.clickOpen`)),!i){let i=N(`button`,`sess-kebab`,`⋯`);i.type=`button`,i.title=w(`shell.tree.sessionOps`),i.addEventListener(`click`,o=>{o.stopPropagation(),bT(t,i.getBoundingClientRect(),[{label:w(a?`shell.tree.currentSession`:`shell.tree.open`),disabled:a,onPick:()=>ST(t,r,{kind:n.kind===`worker`?`worker`:`session`,title:n.title})},{label:w(`shell.tree.rename`),onPick:()=>void TT(e,t,r,n.title||LT(r))},{label:w(`shell.tree.archiveOk`),onPick:()=>void CT(e,t,r,c)},{label:w(`shell.tree.branch`),onPick:()=>void ET(e,t,r)},{label:w(`settings.action.delete`),danger:!0,onPick:()=>void wT(e,t,r,c)}])}),o.appendChild(i)}return o.addEventListener(`click`,e=>{if(jg()){if(s===null||e.target===s)return;s.checked=!s.checked,s.checked?bg.add(r):bg.delete(r),vT(t);return}ST(t,r,{kind:n.kind===`worker`?`worker`:`session`,title:n.title})}),o}function KT(e,t,n,r){let i=N(`div`,`ws-node`),a=document.createElement(`details`);a.className=`ws-details`,a.dataset.ws=n,a.open=!0;let o=document.createElement(`summary`);o.className=`ws-head`,o.appendChild(bx(`folder`)),o.appendChild(N(`span`,`ws-name`,n)),o.appendChild(N(`span`,`ws-count`,String(r.length)));let s=N(`button`,`sess-kebab`,`⋯`);s.type=`button`,s.title=w(`shell.tree.workspaceOps`),s.addEventListener(`click`,r=>{r.stopPropagation(),bT(t,s.getBoundingClientRect(),[{label:w(`shell.tree.newSession`),onPick:()=>e.newSession(n)},{label:w(`shell.tree.rename`),onPick:()=>void OT(e,t,n)},{label:w(`shell.tree.batchDeleteSessions`),onPick:()=>{Mg(!0),bg.clear(),e.loadTreeInto(t,null)}},{label:w(`shell.tree.deleteWorkspace`),danger:!0,onPick:()=>void DT(e,t,n)}])}),o.appendChild(s),a.appendChild(o);let c=N(`div`,`ws-body`);for(let n of zT(r))c.appendChild(GT(e,t,n));return a.appendChild(c),i.appendChild(a),i}function qT(e,t,n=t){let r=N(`div`,`sess-batchbar`);r.appendChild(N(`span`,`sess-batchbar-count`,w(`shell.tree.selectedZero`)));let i=N(`button`,`btn btn-danger btn-mini`,w(`shell.tree.deleteSelected`));i.type=`button`,i.addEventListener(`click`,()=>void yT(e,t));let a=N(`button`,`btn-mini`,w(`settings.action.cancel`));a.type=`button`,a.addEventListener(`click`,()=>_T(e,t)),r.appendChild(i),r.appendChild(a),n.appendChild(r)}function JT(e,t,n){let r=t.id??``,i=Fr(r),a=N(`div`,`ws-worker-row`+(n?` child`:``)+(jr()===r?` active`:``));a.dataset.id=r,a.appendChild(N(`span`,`sess-dot`+(i?` busy`:``))),a.appendChild(N(`span`,`ws-worker-wid`,VT(t))),a.appendChild(N(`span`,`ws-worker-title`,HT(t)));let o=N(`span`,`ws-worker-state`+(i?` busy`:``),w(i?`shell.tree.running`:`shell.tree.idle`));a.appendChild(o);let s=[];return t.model&&s.push(String(t.model)),t.events!==void 0&&s.push(w(`shell.tree.events`,{n:t.events})),s.length&&a.appendChild(N(`span`,`ws-worker-meta`,s.join(` · `))),a.title=HT(t)+(t.model?` · `+t.model:``)+w(`shell.worker.openHint`),a.addEventListener(`click`,()=>{ST(document.getElementById(`sessionTree`)??e,r,{kind:`worker`,title:t.title||r})}),a}function YT(e,t,n){let r=document.createElement(`details`);r.className=`ws-worker-details`,r.open=n;let i=document.createElement(`summary`);i.className=`ws-worker-summary`,i.appendChild(N(`span`,null,w(`shell.worker.title`))),i.appendChild(N(`span`,`ws-worker-count`,String(t.length))),r.appendChild(i);let a=new Map,o=[];for(let e of t){let t=PT(e);if(!t){o.push(e);continue}let n=a.get(t);n?n.push(e):a.set(t,[e])}let s=new Set;for(let e of Fg()){let t=e.id??``;t&&a.has(t)&&s.add(t)}for(let e of a.keys())s.add(e);if(s.size===0)for(let t of o)r.appendChild(JT(e,t,!1));else{for(let t of s){let n=a.get(t)??[],i=Fg().find(e=>e.id===t),o=N(`div`,`ws-worker-parent`);o.appendChild(N(`span`,`ws-lineage-mark`,`└`));let s=N(`span`,`ws-worker-parent-name`,i?.title||LT(t));o.appendChild(s),o.appendChild(N(`span`,`ws-worker-count`,String(n.length))),o.title=w(`shell.worker.parentHint`),o.addEventListener(`click`,()=>{ST(document.getElementById(`sessionTree`)??e,t,{kind:`session`,title:i?.title})}),r.appendChild(o);for(let t of n)r.appendChild(JT(e,t,!0))}if(o.length){let t=N(`div`,`ws-worker-parent`);t.appendChild(N(`span`,`ws-lineage-mark`,`·`)),t.appendChild(N(`span`,`ws-worker-parent-name`,w(`shell.worker.unlinked`))),r.appendChild(t);for(let t of o)r.appendChild(JT(e,t,!0))}}e.replaceChildren(r)}async function XT(e){if(!e.isConnected)return;let t;try{t=(await j.sessions()).sessions??[]}catch{return}let n=BT(t),r=e.querySelector(`.ws-worker-host`);if(!r)return;let i=UT(n);if(i===qg()){Cx(e);return}let a=r.querySelector(`.ws-worker-details`)?.open??!0;Jg(i),n.length?YT(r,n,a):r.replaceChildren()}function ZT(e){Ug()===null&&Wg(window.setInterval(()=>{XT(e)},Ag))}function QT(){let e=Ug();e!==null&&(window.clearInterval(e),Wg(null))}async function $T(e,t){xT(),t&&(t.textContent=`…`);try{let e=await j.workspaces();Pg(e.workspaces??[]),e.active_session&&Rg(e.active_session)}catch{Pg([])}try{let e=await j.sessions();Ig(e.sessions??[]);for(let e of Fg()){let t=e.id??``;t&&(Tr(t,{kind:e.kind===`worker`?`worker`:e.kind===`session`?`session`:void 0,title:e.title,model:e.model,workspace:e.workspace??void 0}),typeof e.busy==`boolean`&&zr(t,e.busy))}let t=(e.sessions??[]).find(e=>e.active===!0),n=jr();n?Rg(n):t?.id&&Rg(t.id)}catch(n){QT();let r=document.createElement(`div`);r.appendChild(N(`div`,`side-note err`,w(`shell.sessions.unavailable`))),r.appendChild(N(`div`,`side-note`,n instanceof Error?n.message:String(n))),e.replaceChildren(...r.childNodes),t&&(t.textContent=`—`);return}tE(e,t)}function eE(e,t){tE(e,t)}function tE(e,t){xT();let n=new Map;for(let t of e.querySelectorAll(`.ws-details`))n.set(t.dataset.ws??``,t.open);let r=document.activeElement?.classList.contains(`ws-search-input`)??!1,i=document.createElement(`div`),a=Fg().filter(e=>!FT(e)),o=new Set;for(let e of a)e.archived||o.add(IT(e));for(let e of o)Ng().some(t=>t.name===e)||Ng().push({name:e});Ng().sort((e,t)=>e.name<t.name?-1:+(e.name>t.name)),t&&(t.textContent=String(a.filter(e=>e.archived!==!0).length));let s=BT(Fg());Xg(new Map);for(let e of s){let t=PT(e);if(!t)continue;let n=Yg();n.set(t,(n.get(t)??0)+1)}WT(aE,e,i);let c=N(`div`,`ws-tree`),l=Ng().filter(e=>RT(e.name)||a.some(t=>!t.archived&&IT(t)===e.name&&RT(t.title??t.id??``))),u=0;for(let t of l){let n=a.filter(e=>!e.archived&&IT(e)===t.name&&RT(e.title??e.id??``));(RT(t.name)||n.length)&&(c.appendChild(KT(aE,e,t.name,n)),u+=n.length)}u||c.appendChild(N(`div`,`side-note`,zg()?w(`shell.sessions.noMatch`):w(`shell.sessions.empty`))),i.appendChild(c),jg()&&qT(aE,e,i);let d=N(`div`,`ws-worker-host`);i.appendChild(d),Jg(UT(s)),s.length?(YT(d,s,!0),ZT(e)):QT(),e.replaceChildren(...i.childNodes);for(let t of e.querySelectorAll(`.ws-details`)){let e=t.dataset.ws??``;n.has(e)&&(t.open=n.get(e)??!0)}if(r){let t=e.querySelector(`.ws-search-input`);t&&t.focus()}Cx(e),Nx(),Cm(Fg()),Tx(e),ab(a.filter(e=>!e.archived).map(e=>e.id??``))}function nE(){return $T(M(`#sessionTree`),M(`#sessionCount`))}function rE(e){MT(aE,e)}function iE(){NT(aE)}var aE={newSession:e=>rE(e),newWorkspace:()=>iE(),loadTreeInto:(e,t)=>$T(e,t),renderTreeInto:(e,t)=>eE(e,t),loadSessions:()=>nE()};function oE(){document.addEventListener(`click`,e=>{(!(e.target instanceof Element)||!e.target.closest(`.sess-menu`))&&xT()}),window.addEventListener(qy,()=>{let e=document.getElementById(`sessionTree`);e&&Tx(e)}),Vr(()=>{let e=document.getElementById(`sessionTree`);e&&(Cx(e),e.querySelector(`.ws-worker-host`)&&XT(e))}),nE()}var sE=[],cE=new Set,lE=0,uE=null;function dE(){for(let e of cE)e()}function fE(e){return cE.add(e),()=>cE.delete(e)}function pE(){return sE}function mE(e){return sE.find(t=>t.id===e)}function hE(){return uE}function gE(e){uE!==e&&(uE=e,dE())}function _E(e,t){return w(e===`files`?`chat.wb.menu.files`:e===`terminal`?`chat.wb.menu.terminal`:`chat.wb.menu.browser`)+` `+String(t)}function vE(e){return e===`right`?420:260}function yE(e,t=`right`){lE+=1;let n=sE.filter(t=>t.kind===e).length+1,r={id:`wb`+String(lE),kind:e,title:_E(e,n),dock:t,size:vE(t),seq:0};return sE.push(r),uE=r.id,dE(),r}function bE(e){let t=sE.findIndex(t=>t.id===e);t<0||(sE.splice(t,1),uE===e&&(uE=sE.length>0?sE[sE.length-1].id:null),dE())}function xE(e,t){let n=mE(e);n&&n.dock!==t&&(n.dock=t,n.size=vE(t),dE())}function SE(e,t){let n=mE(e);if(!n)return;let r=Math.max(160,Math.min(Math.round(t),1200));n.size!==r&&(n.size=r,dE())}function CE(e){let t=mE(e);return t?(t.seq+=1,t.seq):-1}function wE(e,t){return mE(e)?.seq===t}function TE(e){return e===null?`—`:e<1024?e+` B`:e<1048576?(e/1024).toFixed(1)+` KB`:(e/1048576).toFixed(1)+` MB`}function EE(e){if(e===null)return`—`;let t=new Date(e);if(Number.isNaN(t.getTime()))return`—`;let n=e=>(e<10?`0`:``)+String(e);return t.getFullYear()+`-`+n(t.getMonth()+1)+`-`+n(t.getDate())+` `+n(t.getHours())+`:`+n(t.getMinutes())}function DE(e){let t=e.replace(/\\/g,`/`).replace(/\/+$/,``),n=t.lastIndexOf(`/`);return n<=0?`/`:t.slice(0,n)}function OE(e){let t=Pm(e);return t===`markdown`||t===`diff`||t===`code`?t:`code`}function kE(e,t){let n=e.replace(/\/+$/,``)+`/`+t;uh({candidate:{path:n,kind:OE(n),source:`label`},loadFull:async()=>{try{let e=await j.fsRead(n);return e.error!==void 0&&e.error!==``?{degraded:e.error}:e.kind===`binary`?{degraded:w(`chat.preview.degradeBinary`),badge:w(`chat.preview.badgeBinary`)}:{text:e.text,truncated:e.truncated===!0}}catch(e){return{degraded:O(e,w(`chat.preview.degradeReadFailed`))}}}})}function AE(e){let t=e.data;if(t&&typeof t.path==`string`)return t;let n={path:Qg(),selected:null};return e.data=n,n}async function jE(e,t,n,r){let i=AE(t);if(i.path===``){e.replaceChildren(N(`div`,`wb-notice`,w(`chat.wb.noWorkspace`)));return}let a=i.path,o;try{o=await j.fsList(a)}catch{if(!r(t.id,n))return;e.replaceChildren(N(`div`,`wb-notice`,w(`chat.wb.listUnavailable`)));return}if(!r(t.id,n))return;if(o.error!==void 0&&o.error!==``){e.replaceChildren(N(`div`,`wb-notice`,w(`chat.wb.dirOpenFailed`,{reason:o.error})));return}let s=o.entries??[],c=document.createElement(`div`),l=N(`div`,`wb-crumbs`),u=N(`button`,`wb-crumb`,w(`chat.wb.up`));u.type=`button`,u.addEventListener(`click`,()=>{i.path=DE(a),i.selected=null,jE(e,t,CE(t.id),r)}),l.appendChild(u);let d=N(`span`,`wb-crumb wb-crumb-cur`,a);d.title=a,l.appendChild(d),c.appendChild(l),o.truncated===!0&&c.appendChild(N(`div`,`wb-notice`,w(`chat.wb.dirTruncated`)));let f=N(`div`,`wb-list`);s.length===0&&f.appendChild(N(`div`,`wb-notice`,w(`chat.wb.dirEmpty`)));for(let n of s)f.appendChild(ME(n,i,a,e,t,r));c.appendChild(f),e.replaceChildren(...Array.from(c.childNodes))}function ME(e,t,n,r,i,a){let o=N(`div`,`wb-row`+(e.type===`dir`?` dir`:``)+(t.selected===e.name?` sel`:``));return o.appendChild(N(`span`,`wb-icon`,e.type===`dir`?`📁`:`📄`)),o.appendChild(N(`span`,`wb-name`,e.name)),o.appendChild(N(`span`,`wb-size`,TE(e.size))),o.appendChild(N(`span`,`wb-time`,EE(e.mtime))),o.addEventListener(`click`,()=>{e.type===`dir`?(t.path=n.replace(/\/+$/,``)+`/`+e.name,t.selected=null,jE(r,i,CE(i.id),a)):(t.selected=e.name,r.querySelectorAll(`.wb-row`).forEach(e=>e.classList.remove(`sel`)),o.classList.add(`sel`),kE(n,e.name))}),o}function NE(e){let t=e.data;if(t&&Array.isArray(t.lines))return t;let n={lines:[]};return e.data=n,n}function PE(e){let t=N(`div`,`wb-term-line`),n=N(`div`,`wb-term-cmd`);return n.appendChild(N(`span`,`wb-term-prompt`,`$`)),n.appendChild(N(`span`,`wb-term-cmdtext`,e.cmd)),t.appendChild(n),e.out!==``&&t.appendChild(N(`pre`,`wb-term-out`,e.out)),e.err!==``&&t.appendChild(N(`pre`,`wb-term-out err`,e.err)),t.appendChild(N(`div`,`wb-term-meta`+(e.failed?` err`:``),e.code+` · `+String(e.ms)+` ms`)),t}function FE(e,t,n){let r=NE(t),i=document.createElement(`div`);i.appendChild(N(`div`,`wb-term-note`,w(`chat.wb.term.note`)));let a=N(`div`,`wb-term-row`),o=N(`input`,`wb-term-input`);o.type=`text`,o.placeholder=w(`chat.wb.term.placeholder`);let s=N(`button`,`wb-btn wb-term-run`,w(`chat.wb.term.run`));s.type=`button`,a.appendChild(o),a.appendChild(s),i.appendChild(a);let c=N(`div`,`wb-term-outwrap`);for(let e of r.lines)c.appendChild(PE(e));i.appendChild(c),e.replaceChildren(...Array.from(i.childNodes));let l=()=>{let e=o.value.trim();e!==``&&(o.value=``,IE(t,e,CE(t.id),n,c))};s.addEventListener(`click`,l),o.addEventListener(`keydown`,e=>{e.key===`Enter`&&(e.preventDefault(),l())})}async function IE(e,t,n,r,i){let a=N(`div`,`wb-term-line`);a.appendChild(N(`div`,`wb-term-meta`,w(`chat.wb.term.running`))),i.appendChild(a);let o;try{let e=await j.exec({command:t,timeout_ms:3e4});o={cmd:t,out:e.stdout??``,err:e.stderr??``,code:e.signal!==null&&e.signal!==``?w(`chat.wb.term.signal`,{signal:e.signal}):w(`chat.wb.term.exitCode`,{code:String(e.exit_code)}),ms:e.duration_ms,failed:e.exit_code!==0||e.signal!==null&&e.signal!==``}}catch(e){o={cmd:t,out:``,err:e instanceof D&&(e.status===404||e.status===405||e.status===501)?w(`chat.wb.term.unsupported`):O(e,w(`chat.wb.term.notStarted`)),code:w(`chat.tool.failed`),ms:0,failed:!0}}r(e.id,n)&&(NE(e).lines.push(o),a.replaceWith(PE(o)))}var LE=4e3;function RE(e){let t=e.trim();return t===``?``:/^https?:\/\//i.test(t)?t:`https://`+t}function zE(e,t,n){let r=t.data,i=r&&typeof r.url==`string`?r.url:``,a=document.createElement(`div`),o=N(`div`,`wb-url-row`),s=N(`input`,`wb-url-input`);s.type=`text`,s.placeholder=w(`chat.wb.urlPlaceholder`),s.value=i;let c=N(`button`,`wb-btn wb-url-open`,w(`chat.wb.open`));c.type=`button`,o.appendChild(s),o.appendChild(c),a.appendChild(o);let l=N(`div`,`wb-notice hidden`);a.appendChild(l);let u=N(`iframe`,`wb-frame`);u.setAttribute(`sandbox`,`allow-scripts allow-same-origin allow-forms allow-popups`),a.appendChild(u);let d=N(`button`,`wb-btn wb-url-external hidden`,w(`chat.wb.openExternal`));d.type=`button`,a.appendChild(d),e.replaceChildren(...Array.from(a.childNodes));let f=(e,t)=>{l.textContent=e,l.classList.remove(`hidden`),d.classList.remove(`hidden`),d.addEventListener(`click`,()=>window.open(t,`_blank`,`noopener`))},p=e=>{let r=RE(e);if(r===``)return;t.data={url:r};let i=CE(t.id);l.classList.add(`hidden`),d.classList.add(`hidden`);let a=!1;u.addEventListener(`load`,()=>{n(t.id,i)&&(a=!0)}),u.src=r,window.setTimeout(()=>{n(t.id,i)&&!a&&f(w(`chat.wb.frameBlocked`),r)},LE)};c.addEventListener(`click`,()=>p(s.value)),s.addEventListener(`keydown`,e=>{e.key===`Enter`&&(e.preventDefault(),p(s.value))}),i!==``&&p(i)}var BE=null,VE=null,HE=!1,UE=!1,WE=null;function GE(e){let t=N(`div`,`wb-head`);t.appendChild(N(`span`,`wb-title`,e.title));let n=N(`button`,`wb-btn wb-dock`,e.dock===`right`?`⇩`:`⇨`);n.type=`button`,n.title=e.dock===`right`?w(`chat.wb.dockBottom`):w(`chat.wb.dockRight`),n.setAttribute(`aria-label`,n.title),n.addEventListener(`click`,()=>xE(e.id,e.dock===`right`?`bottom`:`right`)),t.appendChild(n);let r=N(`button`,`wb-btn wb-close`,`×`);return r.type=`button`,r.title=w(`chat.wb.close`),r.setAttribute(`aria-label`,w(`chat.wb.close`)),r.addEventListener(`click`,()=>bE(e.id)),t.appendChild(r),t.addEventListener(`mousedown`,t=>{t.target.closest(`.wb-btn`)||YE(e,t)}),t}var KE=null,qE=!1,JE=null;function YE(e,t){KE={id:e.id,startDock:e.dock},window.addEventListener(`mousemove`,XE),window.addEventListener(`mouseup`,ZE),t.preventDefault()}function XE(e){if(!KE||qE)return;qE=!0;let t=e.clientY;requestAnimationFrame(()=>{if(qE=!1,!KE||!BE)return;let e=BE.getBoundingClientRect(),n=t>e.top+e.height*.66?`bottom`:`right`;JE||(JE=N(`div`,`wb-drop-hint`),BE.appendChild(JE)),JE.className=`wb-drop-hint `+n,JE.textContent=w(n===`bottom`?`chat.wb.dockBottom`:`chat.wb.dockRight`)})}function ZE(e){let t=KE;if(KE=null,window.removeEventListener(`mousemove`,XE),window.removeEventListener(`mouseup`,ZE),JE&&(JE.remove(),JE=null),!t||!BE)return;let n=BE.getBoundingClientRect(),r=e.clientY>n.top+n.height*.66?`bottom`:`right`;xE(t.id,r)}function QE(e){let t=N(`div`,`wb-resizer `+e.dock);return t.setAttribute(`role`,`separator`),t.setAttribute(`aria-orientation`,e.dock===`right`?`vertical`:`horizontal`),t.addEventListener(`mousedown`,t=>{WE={id:e.id,startX:t.clientX,startY:t.clientY,startSize:e.size,dock:e.dock},window.addEventListener(`mousemove`,$E),window.addEventListener(`mouseup`,eD),t.preventDefault()}),t}function $E(e){if(!WE)return;let t=WE;UE||(UE=!0,requestAnimationFrame(()=>{if(UE=!1,!WE)return;let n=t.dock===`right`?t.startX-e.clientX:t.startY-e.clientY;SE(t.id,t.startSize+n)}))}function eD(){WE=null,window.removeEventListener(`mousemove`,$E),window.removeEventListener(`mouseup`,eD)}function tD(e){let t=N(`div`,`wb-panel`+(hE()===e.id?` focused`:``));t.dataset.panelId=e.id,t.appendChild(GE(e));let n=N(`div`,`wb-body`);return e.kind===`files`?jE(n,e,CE(e.id),wE):e.kind===`terminal`?FE(n,e,wE):e.kind===`browser`&&zE(n,e,wE),t.appendChild(n),t.addEventListener(`mousedown`,()=>gE(e.id)),t}function nD(){if(!BE||!VE)return;let e=pE(),t=e.filter(e=>e.dock===`bottom`),n=e.filter(e=>e.dock===`right`),r=document.createElement(`div`),i=t.reduce((e,t)=>Math.max(e,t.size),0);if(VE.style.setProperty(`--wb-bottom-h`,i+`px`),t.length>0){let e=N(`div`,`wb-zone bottom`);for(let n of t){e.appendChild(QE(n));let t=tD(n);t.style.height=n.size+`px`,t.style.flex=`1 1 0`,e.appendChild(t)}r.appendChild(e)}if(n.length>0){let e=N(`div`,`wb-zone right`);for(let t of n){let n=tD(t);n.style.width=t.size+`px`,e.appendChild(n),e.appendChild(QE(t))}r.appendChild(e)}VE.replaceChildren(...Array.from(r.childNodes)),VE.classList.toggle(`hidden`,e.length===0),BE.classList.toggle(`hidden`,e.length===0)}function rD(){if(HE)return;HE=!0;let e=document.getElementById(`main`);e&&(BE=N(`div`,`wb-host hidden`),VE=N(`div`,`wb-dock`),BE.appendChild(VE),e.appendChild(BE),fE(()=>nD()),nD())}var iD=null,aD=null;function oD(){iD&&iD.classList.add(`hidden`),aD!==null&&(F(aD),aD=null)}function sD(e){oD(),yE(e,`right`)}function cD(e,t,n){let r=N(`button`,`wb-menu-item`);return r.type=`button`,r.appendChild(N(`span`,`wb-menu-label`,t)),r.appendChild(N(`span`,`wb-menu-desc`,n)),r.addEventListener(`click`,()=>sD(e)),r}function lD(){if(iD===null&&(iD=N(`div`,`wb-menu hidden`),iD.id=`wbMenu`,iD.appendChild(cD(`files`,w(`chat.wb.menu.files`),w(`chat.wb.menu.filesDesc`))),iD.appendChild(cD(`terminal`,w(`chat.wb.menu.terminal`),w(`chat.wb.menu.terminalDesc`))),iD.appendChild(cD(`browser`,w(`chat.wb.menu.browser`),w(`chat.wb.menu.browserDesc`))),document.body.appendChild(iD)),!iD.classList.contains(`hidden`)){oD();return}iD.classList.remove(`hidden`),dD(),aD=P(oD),document.addEventListener(`pointerdown`,uD,!0)}function uD(e){let t=e.target;iD&&t instanceof Node&&(iD.contains(t)||t instanceof Element&&t.closest(`#btnWorkbench`))||(document.removeEventListener(`pointerdown`,uD,!0),oD())}function dD(){if(!iD)return;let e=document.getElementById(`btnWorkbench`),t=e?e.getBoundingClientRect():null;iD.style.top=(t?t.bottom+6:56)+`px`,iD.style.right=(t?Math.max(8,window.innerWidth-t.right):12)+`px`}function fD(){let e=document.getElementById(`btnWorkbench`);e&&e.addEventListener(`click`,()=>lD())}var pD=!1;function mD(){pD||(pD=!0,rD(),fD())}var hD=!1,$=null,gD=null,_D=null,vD=!1;function yD(e,t){if(e===null)return null;let n=e.nodeType===1?e:e.parentElement;return n?n.closest(t):null}function bD(e){return yD(e,`#inputbar`)!==null||yD(e,`textarea, input`)!==null}function xD(e){let t=e.querySelector(`.msg`),n=t?t.className:``;return n.includes(`user`)?`user`:n.includes(`tool`)?`tool`:n.includes(`inbox`)?`inbox`:`assistant`}function SD(e,t){if(t===`assistant`)return`Studio`;if(t===`inbox`)return w(`chat.msg.system`);if(t===`tool`){let t=e.querySelector(`.toolcard-name`)?.textContent??``;return t===``?w(`chat.quote.tool`):w(`chat.quote.toolNamed`,{name:t})}return e.querySelector(`.msg-caption .who`)?.textContent??w(`chat.user.you`)}function CD(e,t){let n=0;for(let r of Array.from(e.querySelectorAll(`.mcol`)))if(r.querySelector(`.msg.user`)&&(n+=1),r===t)break;return n>0?n:void 0}function wD(e,t){let n=xD(t);return{kind:n,session:e.id,turn:CD(e.el,t),label:SD(t,n)}}function TD(){$&&$.classList.add(`hidden`),_D=null,vD=!1,gD!==null&&(F(gD),gD=null)}function ED(e){if(!$)return;$.classList.remove(`hidden`);let t=fn({anchor:e,panel:{width:$.offsetWidth||48,height:$.offsetHeight||24},viewport:{width:window.innerWidth,height:window.innerHeight},gap:6,minHeight:0});$.style.top=t.top+`px`,$.style.left=t.left+`px`,gD===null&&(gD=P(TD))}function DD(e){if($&&e.target instanceof Node&&$.contains(e.target))return;let t=window.getSelection();if(!t||t.isCollapsed||t.rangeCount===0){TD();return}let n=t.getRangeAt(0),r=t.toString(),i=B(),a=n.commonAncestorContainer;if(r.trim()===``||!i||!i.el.contains(a)||bD(a)){TD();return}let o=yD(n.startContainer,`.mcol`),s=yD(n.endContainer,`.mcol`);if(!o||o!==s){TD();return}if(!yD(a,`.content, .tool-out, .think-seg-body`)){TD();return}_D={text:r,source:wD(i,o),format:yD(a,`pre, code`)?`code`:`text`},ED(n.getBoundingClientRect())}function OD(){if(vD)return;let e=window.getSelection();(!e||e.isCollapsed||e.rangeCount===0)&&TD()}function kD(e){if($&&e.target instanceof Node&&$.contains(e.target)){vD=!0;return}TD()}function AD(){let e=_D;TD(),e&&Vh(e).then(e=>{e===`full`?X(w(`chat.quote.max`),`err`,4e3):e===`duplicate`&&X(w(`chat.quote.duplicate`),`ok`,3e3)})}function jD(){hD||(hD=!0,$=document.createElement(`button`),$.type=`button`,$.className=`quote-float hidden`,$.textContent=w(`chat.quote.add`),$.title=w(`chat.quote.addHint`),$.setAttribute(`aria-label`,w(`chat.quote.addAria`)),$.addEventListener(`click`,AD),document.body.appendChild($),document.addEventListener(`mouseup`,DD),document.addEventListener(`selectionchange`,OD),document.addEventListener(`pointerdown`,kD,!0),document.addEventListener(`scroll`,TD,!0),window.addEventListener(`resize`,TD))}var MD=globalThis.__CELESTEA_BUILD__??{},ND=MD.version??`dev`,PD=MD.commits??0,FD=MD.sha??``,ID=MD.dirty??!1,LD=MD.buildTime??`dev`;function RD(){let e=PD>0?`-`+PD+`-g`+FD:``;return`v`+ND+e}function zD(){let e=PD>0?`+`+PD:``;return`Studio v`+ND+e+(ID?`*`:``)}var BD=`celestea-studio.sidebar-collapsed`,VD=`celestea-studio.sidebar-width`;function HD(e){return Math.min(560,Math.max(200,Math.round(e)))}function UD(){try{let e=localStorage.getItem(BD);return e===null?window.innerWidth<880:e===`1`}catch{return!1}}function WD(){try{let e=Number(localStorage.getItem(VD));return Number.isFinite(e)&&e>0?e:316}catch{return 316}}function GD(){let e=M(`#app`),t=M(`#sidebar`),n=M(`#sidebarResizer`),r=M(`#btnSidebar`),i=UD(),a=()=>{e.classList.toggle(`sidebar-collapsed`,i),e.style.setProperty(`--sidebar-w`,i?`0px`:t.style.width||`316px`),r.textContent=w(i?`shell.sidebar.expand`:`shell.sidebar.collapse`),r.title=w(i?`shell.sidebar.expandTitle`:`shell.sidebar.collapseTitle`)},o=n=>{let r=HD(n)+`px`;t.style.width=r,i||e.style.setProperty(`--sidebar-w`,r)};a(),o(WD()),r.addEventListener(`click`,()=>{if(!qD()){i=!i;try{localStorage.setItem(BD,i?`1`:`0`)}catch{}a()}});let s=!1,c=0,l=0,u=()=>{try{localStorage.setItem(VD,String(Math.round(t.getBoundingClientRect().width)))}catch{}};n.addEventListener(`pointerdown`,e=>{s=!0,c=e.clientX,l=t.getBoundingClientRect().width,n.setPointerCapture(e.pointerId),document.body.classList.add(`resizing`),e.preventDefault()}),n.addEventListener(`pointermove`,e=>{s&&o(l+(e.clientX-c))});let d=()=>{s&&(s=!1,document.body.classList.remove(`resizing`),u())};n.addEventListener(`pointerup`,d),n.addEventListener(`pointercancel`,d),n.addEventListener(`dblclick`,()=>{o(316),u()}),JD(r)}var KD=`(max-width: 640px)`;function qD(){try{return window.matchMedia(KD).matches}catch{return window.innerWidth<=640}}function JD(e){let t=M(`#app`),n=document.getElementById(`sidebarScrim`),r=!1,i=()=>{t.classList.toggle(`drawer-open`,r),n&&n.classList.toggle(`hidden`,!r),e.setAttribute(`aria-expanded`,r?`true`:`false`)},a=e=>{r!==e&&(r=e,i())};i(),e.addEventListener(`click`,()=>{qD()&&a(!r)}),n?.addEventListener(`click`,()=>a(!1)),document.addEventListener(`keydown`,e=>{e.key===`Escape`&&r&&a(!1)}),document.getElementById(`sessionTree`)?.addEventListener(`click`,e=>{if(!r)return;let t=e.target;t&&t.closest(`.sess-leaf`)&&a(!1)});try{window.matchMedia(KD).addEventListener(`change`,e=>{e.matches||a(!1)})}catch{}}var YD=`celestea-studio.chat-col-width`,XD=1400,ZD=2,QD=16,$D=null;function eO(e){return Math.min(XD,Math.max(560,Math.round(e)))}function tO(){try{let e=localStorage.getItem(YD);if(e===null)return null;let t=Number(e);return Number.isFinite(t)&&t>0?eO(t):null}catch{return null}}function nO(e){try{e===null?localStorage.removeItem(YD):localStorage.setItem(YD,String(e))}catch{}}function rO(e){let t=document.documentElement.style;e===null?t.removeProperty(`--chat-col-user`):t.setProperty(`--chat-col-user`,eO(e)+`px`)}function iO(){let e=document.querySelector(`.sess-pane:not([hidden]) .mcol`)??document.querySelector(`.mcol`),t=e?e.getBoundingClientRect().width:0;return t>0?eO(t):560}function aO(e,t){$D=e===null?null:eO(e),rO($D),t&&nO($D)}function oO(e){let t=!1,n=0,r=0;e.addEventListener(`pointerdown`,i=>{t=!0,n=i.clientX,r=$D??iO();try{e.setPointerCapture(i.pointerId)}catch{}document.body.classList.add(`resizing-col`),i.preventDefault()}),e.addEventListener(`pointermove`,e=>{t&&aO(r+ZD*(e.clientX-n),!1)});let i=()=>{t&&(t=!1,document.body.classList.remove(`resizing-col`),nO($D))};e.addEventListener(`pointerup`,i),e.addEventListener(`pointercancel`,i),e.addEventListener(`dblclick`,()=>aO(null,!0))}function sO(e){e.addEventListener(`keydown`,e=>{if(e.key!==`ArrowLeft`&&e.key!==`ArrowRight`)return;e.preventDefault();let t=e.key===`ArrowRight`?QD:-16;aO(($D??iO())+t,!0)})}function cO(){let e=document.getElementById(`messages`);if(!e||e.querySelector(`.chatcol-resizer`)){aO(tO(),!1);return}let t=N(`div`,`chatcol-resizer`);t.tabIndex=0,t.setAttribute(`role`,`separator`),t.setAttribute(`aria-orientation`,`vertical`),t.setAttribute(`aria-label`,w(`shell.chatcol.label`)),t.title=w(`shell.chatcol.hint`),e.appendChild(t),oO(t),sO(t),aO(tO(),!1)}function lO(){return[{id:`mono`,label:w(`theme.mono.label`),hint:w(`theme.mono.hint`)},{id:`dark`,label:w(`theme.dark.label`),hint:w(`theme.dark.hint`)}]}var uO=`celestea-studio.theme`;function dO(){return document.documentElement.dataset.theme||`mono`}function fO(e){document.documentElement.dataset.theme=e;try{localStorage.setItem(uO,e)}catch{}}function pO(e=`mono`){let t=e;try{let e=localStorage.getItem(uO);e&&lO().some(t=>t.id===e)&&(t=e)}catch{}return fO(t),t}function mO(e){let t=()=>{let t=dO(),n=lO().find(e=>e.id===t)??lO()[0];e.textContent=n.label,e.title=w(`theme.title`,{hint:n.hint,suffix:lO().length>1?w(`theme.clickToSwitch`):w(`theme.onlyTheme`)})};if(t(),lO().length<2){e.setAttribute(`aria-disabled`,`true`);return}e.addEventListener(`click`,()=>{let e=lO().findIndex(e=>e.id===dO()),n=lO()[(e+1)%lO().length];fO(n.id),t()})}function hO(){j.health().then(e=>{e.model&&ci.merge({model:e.model}),R.streaming||Y(w(`shell.status.online`),`ok`)}).catch(()=>{R.streaming||Y(w(`chat.status.disconnected`),`err`)})}function gO(){pO(`mono`),mO(M(`#btnTheme`)),GD(),cO(),Hr(),Mx(),yx(),ci.start(),Tm(),oE(),gT(),cx();let e=document.getElementById(`brandVersion`);e&&(e.textContent=zD(),e.title=w(`chat.version.title`,{time:LD,version:RD(),dirty:ID?w(`chat.version.dirty`):``})),ro(),aS(),jD(),p_(),mD(),ei(),hO(),rm(),nS(),window.addEventListener(`studio:config-saved`,()=>hO()),M(`#input`).focus()}gO();