dsh-mobile-plugin 0.5.28 → 0.5.29

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 (350) hide show
  1. package/extensions/catalog.json +10 -1
  2. package/extensions/magpie/agentcompact.js +104 -0
  3. package/extensions/magpie/app.css +4902 -0
  4. package/extensions/magpie/app.js +24474 -0
  5. package/extensions/magpie/autobackup.js +185 -0
  6. package/extensions/magpie/autoresetown.js +151 -0
  7. package/extensions/magpie/balfound.js +38 -0
  8. package/extensions/magpie/boot.js +23 -0
  9. package/extensions/magpie/cfgblocked.js +39 -0
  10. package/extensions/magpie/checkinnow.js +111 -0
  11. package/extensions/magpie/claudemode.js +92 -0
  12. package/extensions/magpie/compat.js +41 -0
  13. package/extensions/magpie/context.css +433 -0
  14. package/extensions/magpie/context.js +1576 -0
  15. package/extensions/magpie/ctxtext.js +223 -0
  16. package/extensions/magpie/fonts.js +42 -0
  17. package/extensions/magpie/i18n.js +18942 -0
  18. package/extensions/magpie/icons/ai21.svg +1 -0
  19. package/extensions/magpie/icons/ai302-color.svg +1 -0
  20. package/extensions/magpie/icons/ai360-color.svg +1 -0
  21. package/extensions/magpie/icons/aihubmix-color.svg +1 -0
  22. package/extensions/magpie/icons/aionui.svg +1 -0
  23. package/extensions/magpie/icons/air.svg +4 -0
  24. package/extensions/magpie/icons/alibaba-color.svg +1 -0
  25. package/extensions/magpie/icons/alibabacloud-color.svg +1 -0
  26. package/extensions/magpie/icons/alma.png +0 -0
  27. package/extensions/magpie/icons/anthropic.svg +1 -0
  28. package/extensions/magpie/icons/antigravity-color.svg +1 -0
  29. package/extensions/magpie/icons/anyscale-color.svg +1 -0
  30. package/extensions/magpie/icons/app-alma.png +0 -0
  31. package/extensions/magpie/icons/app-cc-switch.png +0 -0
  32. package/extensions/magpie/icons/apple-touch-icon.png +0 -0
  33. package/extensions/magpie/icons/aside.svg +28 -0
  34. package/extensions/magpie/icons/astrbot.svg +1 -0
  35. package/extensions/magpie/icons/atomcode.png +0 -0
  36. package/extensions/magpie/icons/aws.svg +1 -0
  37. package/extensions/magpie/icons/azure-color.svg +1 -0
  38. package/extensions/magpie/icons/azureai-color.svg +1 -0
  39. package/extensions/magpie/icons/baichuan-color.svg +1 -0
  40. package/extensions/magpie/icons/baidu-color.svg +1 -0
  41. package/extensions/magpie/icons/baiducloud-color.svg +1 -0
  42. package/extensions/magpie/icons/bailian-color.svg +1 -0
  43. package/extensions/magpie/icons/baseten.svg +1 -0
  44. package/extensions/magpie/icons/bedrock-color.svg +1 -0
  45. package/extensions/magpie/icons/burncloud-color.svg +1 -0
  46. package/extensions/magpie/icons/bytedance-color.svg +1 -0
  47. package/extensions/magpie/icons/cerebras.svg +1 -0
  48. package/extensions/magpie/icons/chatglm-color.svg +1 -0
  49. package/extensions/magpie/icons/cherryin-color.svg +1 -0
  50. package/extensions/magpie/icons/chutes.svg +1 -0
  51. package/extensions/magpie/icons/cindy.png +0 -0
  52. package/extensions/magpie/icons/claude-color.svg +1 -0
  53. package/extensions/magpie/icons/claudecode-color.svg +1 -0
  54. package/extensions/magpie/icons/cline.svg +1 -0
  55. package/extensions/magpie/icons/cloudflare-color.svg +1 -0
  56. package/extensions/magpie/icons/codebuddy-color.svg +1 -0
  57. package/extensions/magpie/icons/codex-color.svg +1 -0
  58. package/extensions/magpie/icons/cohere-color.svg +1 -0
  59. package/extensions/magpie/icons/cometapi-color.svg +1 -0
  60. package/extensions/magpie/icons/commandcode.svg +1 -0
  61. package/extensions/magpie/icons/copilot-color.svg +1 -0
  62. package/extensions/magpie/icons/coze.svg +1 -0
  63. package/extensions/magpie/icons/crush.png +0 -0
  64. package/extensions/magpie/icons/curl.svg +1 -0
  65. package/extensions/magpie/icons/cursor.svg +1 -0
  66. package/extensions/magpie/icons/deepinfra-color.svg +1 -0
  67. package/extensions/magpie/icons/deepmind-color.svg +1 -0
  68. package/extensions/magpie/icons/deepseek-color.svg +1 -0
  69. package/extensions/magpie/icons/deveco-color.svg +12 -0
  70. package/extensions/magpie/icons/devin.svg +1 -0
  71. package/extensions/magpie/icons/doubao-color.svg +1 -0
  72. package/extensions/magpie/icons/empryo-color.svg +1 -0
  73. package/extensions/magpie/icons/factory.svg +1 -0
  74. package/extensions/magpie/icons/favicon.svg +1 -0
  75. package/extensions/magpie/icons/featherless-color.svg +1 -0
  76. package/extensions/magpie/icons/fireworks-color.svg +1 -0
  77. package/extensions/magpie/icons/friendli.svg +1 -0
  78. package/extensions/magpie/icons/fx.svg +1 -0
  79. package/extensions/magpie/icons/gemini-color.svg +1 -0
  80. package/extensions/magpie/icons/geminicli-color.svg +1 -0
  81. package/extensions/magpie/icons/gemma-color.svg +1 -0
  82. package/extensions/magpie/icons/giteeai.svg +1 -0
  83. package/extensions/magpie/icons/github.svg +1 -0
  84. package/extensions/magpie/icons/githubcopilot.svg +1 -0
  85. package/extensions/magpie/icons/glama.svg +1 -0
  86. package/extensions/magpie/icons/gmicloud.svg +1 -0
  87. package/extensions/magpie/icons/google-color.svg +1 -0
  88. package/extensions/magpie/icons/googlecloud-color.svg +1 -0
  89. package/extensions/magpie/icons/goose.svg +1 -0
  90. package/extensions/magpie/icons/grok.svg +1 -0
  91. package/extensions/magpie/icons/groq.svg +1 -0
  92. package/extensions/magpie/icons/hanako.png +0 -0
  93. package/extensions/magpie/icons/hermes.svg +1 -0
  94. package/extensions/magpie/icons/huawei-color.svg +1 -0
  95. package/extensions/magpie/icons/huaweicloud-color.svg +1 -0
  96. package/extensions/magpie/icons/huggingface-color.svg +1 -0
  97. package/extensions/magpie/icons/hunyuan-color.svg +1 -0
  98. package/extensions/magpie/icons/hyperbolic-color.svg +1 -0
  99. package/extensions/magpie/icons/icon-512.png +0 -0
  100. package/extensions/magpie/icons/iflytekcloud-color.svg +1 -0
  101. package/extensions/magpie/icons/inference.svg +1 -0
  102. package/extensions/magpie/icons/infinigence-color.svg +1 -0
  103. package/extensions/magpie/icons/internlm-color.svg +1 -0
  104. package/extensions/magpie/icons/jcode.svg +1 -0
  105. package/extensions/magpie/icons/jina.svg +1 -0
  106. package/extensions/magpie/icons/kilo.svg +1 -0
  107. package/extensions/magpie/icons/kilocode.svg +1 -0
  108. package/extensions/magpie/icons/kimi-code-desktop.png +0 -0
  109. package/extensions/magpie/icons/kimi.svg +1 -0
  110. package/extensions/magpie/icons/kiro-color.svg +1 -0
  111. package/extensions/magpie/icons/kling-color.svg +1 -0
  112. package/extensions/magpie/icons/lambda.svg +1 -0
  113. package/extensions/magpie/icons/leptonai-color.svg +1 -0
  114. package/extensions/magpie/icons/liquid.svg +1 -0
  115. package/extensions/magpie/icons/liveagent-color.svg +1 -0
  116. package/extensions/magpie/icons/llmapi.svg +1 -0
  117. package/extensions/magpie/icons/lmstudio.svg +1 -0
  118. package/extensions/magpie/icons/lody.png +0 -0
  119. package/extensions/magpie/icons/longcat.svg +1 -0
  120. package/extensions/magpie/icons/magpie.svg +1 -0
  121. package/extensions/magpie/icons/meta-color.svg +1 -0
  122. package/extensions/magpie/icons/metaai-color.svg +1 -0
  123. package/extensions/magpie/icons/microsoft-color.svg +1 -0
  124. package/extensions/magpie/icons/mimocode.svg +1 -0
  125. package/extensions/magpie/icons/minimax-color.svg +1 -0
  126. package/extensions/magpie/icons/mistermorph-color.svg +1 -0
  127. package/extensions/magpie/icons/mistral-color.svg +1 -0
  128. package/extensions/magpie/icons/mlx-serve.png +0 -0
  129. package/extensions/magpie/icons/modelscope-color.svg +1 -0
  130. package/extensions/magpie/icons/monica-color.svg +1 -0
  131. package/extensions/magpie/icons/moonshot.svg +1 -0
  132. package/extensions/magpie/icons/morph-color.svg +1 -0
  133. package/extensions/magpie/icons/mothx.png +0 -0
  134. package/extensions/magpie/icons/nebius.svg +1 -0
  135. package/extensions/magpie/icons/newapi-color.svg +1 -0
  136. package/extensions/magpie/icons/nousresearch.svg +1 -0
  137. package/extensions/magpie/icons/nova-color.svg +1 -0
  138. package/extensions/magpie/icons/novita-color.svg +1 -0
  139. package/extensions/magpie/icons/nvidia-color.svg +1 -0
  140. package/extensions/magpie/icons/ollama.svg +1 -0
  141. package/extensions/magpie/icons/omlx.svg +1 -0
  142. package/extensions/magpie/icons/omo.svg +1 -0
  143. package/extensions/magpie/icons/omp.svg +1 -0
  144. package/extensions/magpie/icons/openai.svg +1 -0
  145. package/extensions/magpie/icons/openchamber.svg +11 -0
  146. package/extensions/magpie/icons/openclaw.svg +1 -0
  147. package/extensions/magpie/icons/opencode.svg +1 -0
  148. package/extensions/magpie/icons/openmausbot.svg +1 -0
  149. package/extensions/magpie/icons/openrouter.svg +1 -0
  150. package/extensions/magpie/icons/openwebui.svg +1 -0
  151. package/extensions/magpie/icons/parasail.svg +1 -0
  152. package/extensions/magpie/icons/penguin-color.svg +1 -0
  153. package/extensions/magpie/icons/perplexity-color.svg +1 -0
  154. package/extensions/magpie/icons/phala-color.svg +1 -0
  155. package/extensions/magpie/icons/pi.svg +1 -0
  156. package/extensions/magpie/icons/pipellm-color.svg +5 -0
  157. package/extensions/magpie/icons/poe.svg +1 -0
  158. package/extensions/magpie/icons/ppio-color.svg +1 -0
  159. package/extensions/magpie/icons/prime-agent.svg +1 -0
  160. package/extensions/magpie/icons/qiniu-color.svg +1 -0
  161. package/extensions/magpie/icons/qoder.svg +1 -0
  162. package/extensions/magpie/icons/qwen-color.svg +1 -0
  163. package/extensions/magpie/icons/qwenpaw.svg +1 -0
  164. package/extensions/magpie/icons/raycast.svg +1 -0
  165. package/extensions/magpie/icons/reasonix-color.svg +48 -0
  166. package/extensions/magpie/icons/reka.svg +1 -0
  167. package/extensions/magpie/icons/replicate.svg +1 -0
  168. package/extensions/magpie/icons/roocode.svg +1 -0
  169. package/extensions/magpie/icons/rtk.png +0 -0
  170. package/extensions/magpie/icons/sambanova-color.svg +1 -0
  171. package/extensions/magpie/icons/sensenova-color.svg +1 -0
  172. package/extensions/magpie/icons/siliconcloud-color.svg +1 -0
  173. package/extensions/magpie/icons/snow.png +0 -0
  174. package/extensions/magpie/icons/snowflake-color.svg +1 -0
  175. package/extensions/magpie/icons/sophnet-color.svg +1 -0
  176. package/extensions/magpie/icons/spark-color.svg +1 -0
  177. package/extensions/magpie/icons/stepfun-color.svg +1 -0
  178. package/extensions/magpie/icons/straico-color.svg +1 -0
  179. package/extensions/magpie/icons/submodel-color.svg +1 -0
  180. package/extensions/magpie/icons/t3code.svg +4 -0
  181. package/extensions/magpie/icons/targon-color.svg +1 -0
  182. package/extensions/magpie/icons/tencent-color.svg +1 -0
  183. package/extensions/magpie/icons/tencentcloud-color.svg +1 -0
  184. package/extensions/magpie/icons/tiangong-color.svg +1 -0
  185. package/extensions/magpie/icons/together-color.svg +1 -0
  186. package/extensions/magpie/icons/trae.svg +1 -0
  187. package/extensions/magpie/icons/typesafe.png +0 -0
  188. package/extensions/magpie/icons/upstage-color.svg +1 -0
  189. package/extensions/magpie/icons/venice-color.svg +1 -0
  190. package/extensions/magpie/icons/vercel.svg +1 -0
  191. package/extensions/magpie/icons/vertexai-color.svg +1 -0
  192. package/extensions/magpie/icons/vllm-color.svg +1 -0
  193. package/extensions/magpie/icons/volcengine-color.svg +1 -0
  194. package/extensions/magpie/icons/voyage-color.svg +1 -0
  195. package/extensions/magpie/icons/vscode.svg +1 -0
  196. package/extensions/magpie/icons/wenxin-color.svg +1 -0
  197. package/extensions/magpie/icons/windsurf.svg +1 -0
  198. package/extensions/magpie/icons/workbuddy-color.svg +1 -0
  199. package/extensions/magpie/icons/workersai-color.svg +1 -0
  200. package/extensions/magpie/icons/xai.svg +1 -0
  201. package/extensions/magpie/icons/xiaomimimo.svg +1 -0
  202. package/extensions/magpie/icons/xinference-color.svg +1 -0
  203. package/extensions/magpie/icons/yi.svg +1 -0
  204. package/extensions/magpie/icons/yuanbao-color.svg +1 -0
  205. package/extensions/magpie/icons/yylx.svg +5 -0
  206. package/extensions/magpie/icons/zai.svg +1 -0
  207. package/extensions/magpie/icons/zcode.png +0 -0
  208. package/extensions/magpie/icons/zed.svg +1 -0
  209. package/extensions/magpie/icons/zenmux.svg +1 -0
  210. package/extensions/magpie/icons/zeroone.svg +1 -0
  211. package/extensions/magpie/icons/zhipu-color.svg +1 -0
  212. package/extensions/magpie/icons/zoo-code.png +0 -0
  213. package/extensions/magpie/index.html +572 -0
  214. package/extensions/magpie/kernel.js +274 -0
  215. package/extensions/magpie/keyspend.js +63 -0
  216. package/extensions/magpie/layout.js +26 -0
  217. package/extensions/magpie/manifest.json +37 -0
  218. package/extensions/magpie/navlamp.js +47 -0
  219. package/extensions/magpie/omarchy.css +72 -0
  220. package/extensions/magpie/omarchy.js +46 -0
  221. package/extensions/magpie/passerrors.js +21 -0
  222. package/extensions/magpie/pluginpages.js +405 -0
  223. package/extensions/magpie/plugins/gateway/client.js +1194 -0
  224. package/extensions/magpie/plugins/gateway/keys.js +972 -0
  225. package/extensions/magpie/plugins/gateway/settings.js +459 -0
  226. package/extensions/magpie/plugins/library/client.js +6788 -0
  227. package/extensions/magpie/plugins/library/i18n.js +3228 -0
  228. package/extensions/magpie/plugins/library/library.css +848 -0
  229. package/extensions/magpie/plugins/otel/i18n.js +48 -0
  230. package/extensions/magpie/plugins/otel/page.js +189 -0
  231. package/extensions/magpie/plugins/redact/client.js +46 -0
  232. package/extensions/magpie/plugins/redact/demo.js +461 -0
  233. package/extensions/magpie/plugins/redact/i18n.js +432 -0
  234. package/extensions/magpie/plugins/redact/page.js +985 -0
  235. package/extensions/magpie/plugins/redact/redact.css +385 -0
  236. package/extensions/magpie/plugins/redact/settings.js +248 -0
  237. package/extensions/magpie/plugins/redact/xq_dark.jpg +0 -0
  238. package/extensions/magpie/plugins/redact/xq_dark.webm +0 -0
  239. package/extensions/magpie/plugins/redact/xq_light.jpg +0 -0
  240. package/extensions/magpie/plugins/redact/xq_light.webm +0 -0
  241. package/extensions/magpie/plugins/routing/client.js +8593 -0
  242. package/extensions/magpie/plugins/routing/i18n.js +2696 -0
  243. package/extensions/magpie/plugins/routing/routing.css +1111 -0
  244. package/extensions/magpie/plugins/search/settings.js +460 -0
  245. package/extensions/magpie/plugins/sessions/client.js +1622 -0
  246. package/extensions/magpie/plugins/sessions/i18n.js +360 -0
  247. package/extensions/magpie/plugins/sessions/sessions.css +181 -0
  248. package/extensions/magpie/plugins/sessions/settings.js +100 -0
  249. package/extensions/magpie/plugins/usage/client.js +150 -0
  250. package/extensions/magpie/plugins/usage/i18n.js +984 -0
  251. package/extensions/magpie/plugins/usage/page.js +4307 -0
  252. package/extensions/magpie/plugins.css +319 -0
  253. package/extensions/magpie/plugins.js +1926 -0
  254. package/extensions/magpie/profilerename.js +27 -0
  255. package/extensions/magpie/purposes.js +2 -0
  256. package/extensions/magpie/quitask.js +79 -0
  257. package/extensions/magpie/quotaall.js +142 -0
  258. package/extensions/magpie/ratewindows.js +123 -0
  259. package/extensions/magpie/registry.js +87 -0
  260. package/extensions/magpie/resetask.js +137 -0
  261. package/extensions/magpie/ruleedit.js +53 -0
  262. package/extensions/magpie/scrollends.js +91 -0
  263. package/extensions/magpie/settingshints.js +75 -0
  264. package/extensions/magpie/signsheets.js +86 -0
  265. package/extensions/magpie/start.js +26 -0
  266. package/extensions/magpie/syncfiles.js +216 -0
  267. package/extensions/magpie/theme.js +29 -0
  268. package/extensions/magpie/traywindows.js +41 -0
  269. package/extensions/magpie/webfonts.js +130 -0
  270. package/extensions/magpie/whatsnew.js +252 -0
  271. package/extensions/magpie.zip +0 -0
  272. package/knowledge/apps/baijiahao.md +30 -0
  273. package/knowledge/apps/bilibili.md +1 -0
  274. package/knowledge/apps/dedao.md +33 -0
  275. package/knowledge/apps/feishu.md +35 -0
  276. package/knowledge/apps/gmail.md +33 -0
  277. package/knowledge/apps/jike.md +31 -0
  278. package/knowledge/apps/kuaishou.md +34 -0
  279. package/knowledge/apps/linkedin.md +33 -0
  280. package/knowledge/apps/qqmail.md +30 -0
  281. package/knowledge/apps/telegram.md +27 -0
  282. package/knowledge/apps/toutiao.md +32 -0
  283. package/knowledge/apps/uber-eats.md +26 -0
  284. package/knowledge/apps/uber.md +27 -0
  285. package/knowledge/apps/whatsapp.md +27 -0
  286. package/knowledge/apps/x.md +32 -0
  287. package/knowledge/apps/xiaohongshu.md +1 -0
  288. package/knowledge/apps/zhihu.md +1 -0
  289. package/knowledge/sites/bilibili.com/SITE.md +50 -0
  290. package/knowledge/sites/bilibili.com/references/view-fields.md +17 -0
  291. package/knowledge/sites/github.com/SITE.md +51 -0
  292. package/knowledge/sites/github.com/references/repo-fields.md +13 -0
  293. package/knowledge/sites/x.com/SITE.md +47 -0
  294. package/knowledge/sites/xiaohongshu.com/SITE.md +48 -0
  295. package/knowledge/sites/xiaohongshu.com/references/note-fields.md +18 -0
  296. package/knowledge/sites/youtube.com/SITE.md +49 -0
  297. package/knowledge/sites/youtube.com/references/innertube-fields.md +14 -0
  298. package/knowledge/sites/zhihu.com/SITE.md +47 -0
  299. package/knowledge/sites/zhihu.com/references/api-fields.md +21 -0
  300. package/lib/mobile/extension-catalog.js +41 -1
  301. package/lib/mobile/extension-data.js +224 -0
  302. package/lib/mobile/extension-dev.js +3 -1
  303. package/lib/mobile/file-ops.js +252 -0
  304. package/lib/mobile/history-derive.js +80 -4
  305. package/lib/mobile/host-bridge/endpoints.js +48 -6
  306. package/lib/mobile/host-bridge/event-synthesis.js +33 -6
  307. package/lib/mobile/jobs-control.js +118 -0
  308. package/lib/mobile/memory.js +635 -0
  309. package/lib/mobile/model-badges.js +77 -0
  310. package/lib/mobile/pet-tools.js +50 -4
  311. package/lib/mobile/pets.js +214 -18
  312. package/lib/mobile/phone/access.js +85 -0
  313. package/lib/mobile/phone/evidence.js +228 -0
  314. package/lib/mobile/phone/gate.js +290 -0
  315. package/lib/mobile/phone/grounding.js +314 -0
  316. package/lib/mobile/phone/guard.js +465 -0
  317. package/lib/mobile/phone/irreversible.js +88 -8
  318. package/lib/mobile/phone/knowledge-tools.js +665 -0
  319. package/lib/mobile/phone/learn.js +329 -0
  320. package/lib/mobile/phone/redact.js +237 -0
  321. package/lib/mobile/phone/risk.js +95 -0
  322. package/lib/mobile/phone/routes.js +28 -1
  323. package/lib/mobile/phone/service.js +23 -0
  324. package/lib/mobile/phone/site-commands.js +271 -0
  325. package/lib/mobile/phone/step-summary.js +201 -0
  326. package/lib/mobile/phone/stop-summary.js +235 -0
  327. package/lib/mobile/phone/tool-groups.js +125 -0
  328. package/lib/mobile/phone/tools.js +589 -0
  329. package/lib/mobile/phone/untrusted.js +65 -0
  330. package/lib/mobile/phone-knowledge.js +20 -4
  331. package/lib/mobile/schedule-edit.js +500 -0
  332. package/lib/mobile/schedule.js +5 -0
  333. package/lib/mobile/send-continuation.js +52 -0
  334. package/lib/mobile/session-models.js +27 -31
  335. package/lib/mobile/session-send.js +12 -12
  336. package/lib/mobile/skill-import.js +338 -0
  337. package/lib/mobile/skill-store.js +524 -0
  338. package/lib/routes/mobile-api.js +42 -0
  339. package/package.json +7 -6
  340. package/skills/skill-authoring/SKILL.md +46 -0
  341. package/skills/skill-authoring/references/examples.md +82 -0
  342. package/skills/skill-authoring/references/frontmatter-and-fields.md +46 -0
  343. package/skills/skill-authoring/scripts/check_skill.py +167 -0
  344. package/skills/skill-authoring/scripts/manifest.json +3 -0
  345. package/knowledge/sites/bilibili.com.md +0 -27
  346. package/knowledge/sites/github.com.md +0 -27
  347. package/knowledge/sites/x.com.md +0 -28
  348. package/knowledge/sites/xiaohongshu.com.md +0 -27
  349. package/knowledge/sites/youtube.com.md +0 -28
  350. package/knowledge/sites/zhihu.com.md +0 -27
@@ -0,0 +1,572 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
6
+ <title>magpie</title>
7
+ <link rel="icon" href="icons/favicon.svg" type="image/svg+xml">
8
+ <!-- added to a phone's home screen, magpie web opens as an app of its own,
9
+ with no browser bars (ninja_s6114 on Discord); webGuard serves these
10
+ few files without the key, as a home screen may ask for them without
11
+ the page's cookie.
12
+ The theme colours are the window's in standalone alone, so a browser's
13
+ tab and the app's own windows look as they did -->
14
+ <link rel="manifest" href="manifest.json">
15
+ <link rel="apple-touch-icon" href="icons/apple-touch-icon.png">
16
+ <meta name="apple-mobile-web-app-capable" content="yes">
17
+ <meta name="mobile-web-app-capable" content="yes">
18
+ <meta name="apple-mobile-web-app-title" content="magpie">
19
+ <meta name="apple-mobile-web-app-status-bar-style" content="default">
20
+ <meta name="theme-color" media="(display-mode: standalone) and (prefers-color-scheme: light)" content="#f4f4f6">
21
+ <meta name="theme-color" media="(display-mode: standalone) and (prefers-color-scheme: dark)" content="#1a1a1e">
22
+ <script src="boot.js"></script>
23
+ <script src="theme.js"></script>
24
+ <script src="omarchy.js"></script>
25
+ <link rel="stylesheet" href="app.css">
26
+ <link rel="stylesheet" href="plugins/routing/routing.css">
27
+ <link rel="stylesheet" href="plugins/library/library.css">
28
+ <link rel="stylesheet" href="plugins.css">
29
+ <link rel="stylesheet" href="plugins/sessions/sessions.css">
30
+ <link rel="stylesheet" href="plugins/redact/redact.css">
31
+ <link rel="stylesheet" href="context.css">
32
+ <link rel="stylesheet" href="omarchy.css">
33
+ </head>
34
+ <body>
35
+ <script src="compat.js"></script>
36
+ <script src="layout.js"></script>
37
+ <script src="fonts.js"></script>
38
+ <!-- the window's sidebar (app.js layoutNav): the brand, the pages (#nav)
39
+ with the open one's own tabs under it, and Settings at the foot; a
40
+ narrow window keeps them in the header instead -->
41
+ <aside class="sidebar" id="side" hidden>
42
+ <div class="side-top" style="--wails-draggable:drag"></div>
43
+ <div class="side-scroll"></div>
44
+ <div class="side-foot">
45
+ <button type="button" class="side-gw" id="sideGw" data-feature="gateway" hidden><i></i><span></span></button>
46
+ </div>
47
+ <!-- its edge, dragged to make it wider or narrower (app.js sideDrag).
48
+ Out of Tab's reach, as a Mac split view's divider is: a Mac window
49
+ shown has WebKit focus the first stop Tab reaches, and its ring
50
+ showed on every open (ysm119) -->
51
+ <div class="side-edge" id="sideEdge" role="separator" aria-orientation="vertical" tabindex="-1" style="--wails-draggable:no-drag"></div>
52
+ </aside>
53
+ <header class="top" style="--wails-draggable:drag">
54
+ <!-- the sidebar shown or the header's tabs, the reader's own (app.js
55
+ toggleSideNav); the left pane filled while the sidebar shows. First
56
+ in the title bar, so it is in one place in both layouts (app.js
57
+ layoutNav moves it with the brand) -->
58
+ <button type="button" class="icon side-toggle" id="sideToggle" hidden style="--wails-draggable:no-drag">
59
+ <svg viewBox="0 0 16 16" width="15" height="15" aria-hidden="true"><rect class="st-pane" x="2.5" y="3.5" width="4" height="9" rx="1"/><g fill="none" stroke="currentColor" stroke-width="1.25" stroke-linecap="round"><rect x="1.75" y="2.75" width="12.5" height="10.5" rx="2.25"/><path d="M6.75 2.75v10.5"/></g></svg>
60
+ </button>
61
+ <div class="brand">
62
+ <span class="logo" aria-hidden="true"><svg viewBox="0 0 44 44" width="18" height="18"><defs><path id="bird" fill="currentColor" fill-rule="evenodd" d="M1.5 5.5C1.3 5.7 1.2 6.5 1.2 6.9C1.2 6.9 1.2 7 1.2 7.1C1.1 7.4 1.3 8 1.4 8.3C1.4 8.4 1.5 8.5 1.5 8.7C1.5 8.9 1.7 9 1.8 9.3C2.2 9.9 2.2 10 2.3 10.1C2.4 10.2 2.5 10.3 2.6 10.5C2.8 10.8 3 11.1 3.2 11.3C3.3 11.3 3.4 11.6 3.6 11.8C3.8 12 4.1 12.4 4.2 12.5C4.7 13 5.2 13.7 5.4 13.9C6 14.5 6.5 15.1 6.7 15.3C6.7 15.4 6.9 15.5 6.9 15.7C7.3 15.9 7.7 16.5 7.9 16.8C7.9 16.8 8 16.9 8 16.9C8.1 16.9 8.2 17.2 8.2 17.3C8.2 17.3 8.1 17.2 8.1 17.1C7.9 16.9 7.9 16.9 7.6 16.6C7.5 16.5 7.4 16.5 7.4 16.3C7.2 16.2 6.7 15.7 6.3 15.2C6.1 15.1 6 14.9 6 14.9C5.9 14.8 5.7 14.7 5.7 14.6C5.6 14.5 5.4 14.3 5.3 14.2C5.1 14.1 4.9 13.8 4.7 13.5C4.5 13.3 4.2 13.1 4.1 12.9C4.1 12.9 3.8 12.7 3.8 12.5C3.5 12.3 3 11.8 2.8 11.4C1.8 10.5 0.9 9.6 0.7 9.6C0.6 9.7 0.6 9.8 0.5 10C0.5 10.1 0.6 10.2 0.5 10.3C0.5 10.4 0.6 10.5 0.6 10.6C0.5 10.7 0.5 10.9 0.6 11C0.5 11.1 0.6 11.4 0.6 11.5C0.9 12.9 1.3 13.8 2.8 14.9C2.9 15.1 3.3 15.3 3.4 15.4C3.4 15.5 3.6 15.6 3.7 15.7C4.2 16 6.4 17.8 7 18.4C7.4 18.8 7.4 18.8 7.5 18.9C7.6 19 7.7 19 7.7 19.1C7.7 19.2 7.8 19.2 7.9 19.2C7.9 19.3 8.1 19.4 8.1 19.5C8.2 19.6 8.2 19.7 8.3 19.7C8.3 19.7 8.3 19.7 8.2 19.7C8.2 19.6 8.1 19.6 8 19.6C7.9 19.5 7.9 19.4 7.8 19.4C7.7 19.3 7.6 19.2 7.6 19.2C7.6 19.1 7.5 19 7.3 18.9C7.2 18.9 6.9 18.6 6.7 18.4C6.1 17.8 4.5 16.6 3.5 16C3.4 15.8 3 15.6 2.9 15.5C2.6 15.3 1.5 14.6 0.9 14.3C0.7 14.1 0.6 14.1 0.6 14.2C0.5 14.5 0.8 15.9 0.9 16.1C0.9 16.2 1 16.2 0.9 16.3C1.2 16.8 1.9 17.6 2.7 18.3C2.8 18.5 4 19.2 4.7 19.5C6.2 20.5 6.6 20.7 7.4 21.5C8.2 22.2 8.7 22.7 9.3 23.6C9.5 24.1 9.9 24.4 10.3 25.3C10.4 25.5 10.5 25.8 10.5 25.8C10.7 25.8 10.8 25.7 11 25.4C11.6 25 11.9 24.6 12.3 24.3C12.8 24 13 23.8 13 23.7C13.1 23.7 13.1 23.8 13 24C12 24.8 11 26 10.2 26.9C10.1 27.1 9.9 27.5 9.7 27.7C9.5 27.8 9.4 28 9.4 28C9.4 28 9.3 28.3 9.1 28.5C8.6 29.2 7.7 30.8 7.7 30.9C7.7 31 7.8 31 8.3 30.8C9 30.4 9.5 30.2 10.4 30C11.7 29.6 12.5 29.6 11.6 30C10.5 30.2 9.7 30.6 9.2 31.2C8.8 31.7 8.8 31.7 9.3 31.7C10.1 31.8 10.9 31.9 11.6 32.2C12.8 32.7 13.5 33.1 15.5 34.8C16.4 35.5 17.3 36.2 17.8 36.4C17.9 36.5 18.1 36.7 18.2 36.8C19.1 37.3 21.2 38.1 22.3 38.3C22.4 38.3 22.7 38.3 22.8 38.3C22.8 38.5 23 38.5 23 38.5C23.1 38.5 23.2 38.5 23.3 38.5C23.6 38.6 25.9 38.6 26.1 38.5C26.2 38.5 26.3 38.5 26.4 38.5C26.5 38.5 26.6 38.5 26.7 38.3C26.7 38.3 27 38.3 27.1 38.3C28.3 38.1 30.2 37.3 31.4 36.7C31.5 36.7 31.7 36.4 31.8 36.4C32.2 36.2 33.2 35.4 33.4 35.2C34.2 34.5 35.5 33 35.8 32.6C35.8 32.5 36 32.2 36.1 32C36.4 31.8 36.6 31.4 36.6 31.2C36.7 31.1 36.8 30.9 36.9 30.8C37.2 30.4 37.5 29.6 37.7 29.2C37.7 29.1 37.8 28.7 37.9 28.7C38.1 28.5 38.4 27.1 38.5 26.8C39 25.2 39.1 23.7 39 22.4C39 22.2 38.9 21.9 38.9 21.8C38.9 21.7 38.9 21.6 38.9 21.4C38.6 20.5 38.5 19.9 38.2 19C37.9 18.5 37.5 17.5 37.3 17.2C37 16.8 36.8 15.8 36.8 15.2C36.8 13.8 37.7 12.7 39.6 12.2C40.1 12.1 41.3 11.8 42.1 11.7C43.5 11.5 43.5 11.5 43.4 11.3C42.9 10.7 40.9 9.9 39.2 9.7C37.9 9.5 38.1 9.5 37.6 9C37 8.6 36.4 8 36 7.9C36 7.8 35.8 7.8 35.7 7.7C35.1 7.3 34.2 7 33.1 6.9C32.6 6.7 31.6 6.9 31 7C29.6 7.3 28.3 8 27.3 9.2C26.7 9.8 26.2 10.8 25.7 11.7C25.5 12.1 24.8 13.4 24.7 13.7C24.6 13.9 24.5 14.1 24.1 14.7C23.5 15.7 22.1 16.9 20.6 17.8C20.5 18 20.3 18.2 20.1 18.3C19.7 18.5 19.4 18.8 19.1 19C18.9 19.1 18.7 19.3 18.5 19.4C18 19.8 17.2 20.3 17 20.5C16.9 20.5 16.8 20.6 16.7 20.7C16.3 20.8 16.1 20.9 16 20.9C15.5 20.8 14.9 20.5 14.2 20.2C13.7 19.8 12.7 18.9 12.4 18.6C12.3 18.5 12.2 18.4 12.1 18.2C11.9 18 11.2 17.1 11 16.6C10.9 16.5 10.8 16.4 10.7 16.3C10.7 16.2 10.6 16.1 10.6 15.9C10.5 15.9 10.4 15.7 10.4 15.6C10.3 15.5 10.2 15.2 10.1 15C10 14.8 9.8 14.4 9.7 14.2C9.6 14 9.5 13.7 9.4 13.6C9.4 13.4 9.3 13.2 9.2 13C9.2 12.8 9 12.6 9 12.5C8.9 12.3 8.7 12.1 8.7 12C8.7 12 8.5 11.7 8.5 11.7C8.3 11.2 8.2 10.9 7.5 10C6.4 8.3 4.2 6.4 2.7 5.8C2 5.5 1.6 5.4 1.5 5.5ZM28.4 16.7C29.2 16.9 29.7 17.2 29.9 17.7C30.1 18.2 30 18.9 29.6 19.4C29.2 19.9 28.2 20.9 27.6 21.2C26.8 21.7 25.3 22.4 24.2 22.7C23.9 22.8 23.6 22.9 23.5 22.9C22.8 23.2 20.7 23.7 19.6 24C19 24.2 18.4 24.3 18.1 24.4C17.9 24.4 16.1 24.9 15.3 25.1C14.6 25.2 14.7 25.1 15.7 23.6C16.4 22.7 18.5 20.6 19.4 19.9C20.8 18.8 21.4 18.4 23.2 17.6C23.8 17.4 25.6 16.8 25.9 16.8C25.9 16.8 26.3 16.8 26.6 16.7C26.8 16.7 28.2 16.7 28.4 16.7ZM30.4 20.2C30.5 20.3 30.6 20.6 30.6 20.7C31.7 23.1 33.4 24.6 35.6 25.3C36.1 25.5 36.7 25.7 37.2 25.8C37.7 25.8 37.8 25.9 37.8 26.1C37.7 26.2 37.7 26.3 37.7 26.5C37.7 26.6 37.7 26.8 37.6 27C37.4 28.5 36.8 29.9 36.1 31C36.1 31.2 35.9 31.4 35.9 31.6C35.7 31.9 35.2 32.6 34.7 33.3C32.6 35.6 29.7 37.3 26.6 37.8C26.5 37.8 26.3 37.9 26.2 37.9C25.8 37.9 23.7 37.9 23.3 37.9C23.2 37.9 23 37.8 22.9 37.8C21.1 37.6 19.3 36.8 18 35.7C17.7 35.4 17 34.7 16.8 34.5C16.3 33.8 16.1 33 16.3 32.5C16.5 31.8 16.8 31.6 17.9 31.1C19.1 30.5 19.4 30.4 20.2 30C21.4 29.4 23.2 28.4 23.9 27.9C23.9 27.8 24.2 27.7 24.5 27.6C26.3 26.3 28 24.6 28.9 22.9C29.5 22.2 29.7 21.6 29.9 20.7C30.1 20 30.2 19.9 30.4 20.2Z"/><clipPath id="bird-body"><path clip-rule="evenodd" d="M16 0H44V44H0V26.4H10.6L13 24.2L16 19Z M29.8 18.3L26 19L22 21L17 23.5L14.6 24.7L10.6 26.4L6 29V32L9 31.5L12.5 32L16.4 31.8L19 31.4L24 28.8L28.5 24L30.6 21.4Z"/></clipPath><clipPath id="bird-notail"><path d="M17 0H44V44H0V26.4H10.6L14 25L17.2 19.6Z"/></clipPath><clipPath id="bird-tail"><path d="M0 0H17L17.2 19.6L14 25L10.6 26.4H0Z"/></clipPath><clipPath id="bird-wing"><path d="M29.8 18.3L26 19L22 21L17 23.5L14.6 24.7L10.6 26.4L6 29V32L9 31.5L12.5 32L16.4 31.8L19 31.4L24 28.8L28.5 24L30.6 21.4Z"/></clipPath></defs><g class="bird"><use class="whole" href="#bird"/><g class="parts"><use href="#bird" clip-path="url(#bird-body)"/><g class="tail"><use href="#bird" clip-path="url(#bird-tail)"/></g><g class="wing"><use href="#bird" clip-path="url(#bird-wing)"/></g></g></g></svg></span>
63
+ <span>magpie</span>
64
+ </div>
65
+ <h1 class="sr-only" id="pageTitle" data-t>Agents</h1>
66
+ <div class="crumb" id="crumb" aria-hidden="true" hidden></div>
67
+ <nav class="seg" id="nav" aria-label="Main navigation" data-ta style="--wails-draggable:no-drag">
68
+ <span class="nav-gl" data-t>Work</span>
69
+ <button data-view="agents" class="on" aria-current="page"><svg class="nav-ic" viewBox="0 0 20 20" width="16" height="16" aria-hidden="true"><g fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><path d="M4 6l4 4-4 4M10 14h6"/></g></svg><span data-t>Agents</span></button>
70
+ <button data-view="sessions" data-feature="sessions"><svg class="nav-ic" viewBox="0 0 20 20" width="16" height="16" aria-hidden="true"><g fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><path d="M4 5h12v8H9l-4 3v-3H4z"/></g></svg><span data-t>Sessions</span></button>
71
+ <button data-view="library" data-feature="library"><svg class="nav-ic" viewBox="0 0 20 20" width="16" height="16" aria-hidden="true"><g fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><path d="M5 3.5h9v13H5a1.5 1.5 0 0 1 0-3h9"/></g></svg><span data-t>Library</span></button>
72
+ <span class="nav-gl" data-t>Models</span>
73
+ <button data-view="providers"><svg class="nav-ic" viewBox="0 0 20 20" width="16" height="16" aria-hidden="true"><g fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><circle cx="7" cy="10" r="3"/><path d="M10 10h7M14 10v3M16.5 10v2"/></g></svg><span data-t>Providers</span></button>
74
+ <button data-view="routing" data-feature="routing"><svg class="nav-ic" viewBox="0 0 20 20" width="16" height="16" aria-hidden="true"><g fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><path d="M3 10h5l4-5h5M8 10l4 5h5M14.5 3l2.5 2-2.5 2M14.5 13l2.5 2-2.5 2"/></g></svg><span data-t>Routing</span></button>
75
+ <button data-view="groups" data-feature="routing"><svg class="nav-ic" viewBox="0 0 20 20" width="16" height="16" aria-hidden="true"><g fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><rect x="3.5" y="3.5" width="5" height="5" rx="1.2"/><rect x="11.5" y="3.5" width="5" height="5" rx="1.2"/><rect x="3.5" y="11.5" width="5" height="5" rx="1.2"/><path d="M14 11.5v5M11.5 14h5"/></g></svg><span data-t>Routing groups</span></button>
76
+ <button data-view="gateway" data-feature="gateway"><svg class="nav-ic" viewBox="0 0 20 20" width="16" height="16" aria-hidden="true"><g fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="4" width="14" height="5" rx="1.5"/><rect x="3" y="11" width="14" height="5" rx="1.5"/><path d="M6 6.5h.01M6 13.5h.01"/></g></svg><span data-t>Gateway</span></button>
77
+ <span class="nav-gl" data-t>Insights</span>
78
+ <button data-view="usage" data-feature="usage"><svg class="nav-ic" viewBox="0 0 20 20" width="16" height="16" aria-hidden="true"><g fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><path d="M4 16V9M8 16V5M12 16v-5M16 16V7"/></g></svg><span data-t>Usage</span></button>
79
+ <button data-view="masking" data-feature="redact"><svg class="nav-ic" viewBox="0 0 16 16" width="16" height="16" aria-hidden="true"><path d="M8 1.8 13 3.6v4.1c0 3-2.1 5.4-5 6.5-2.9-1.1-5-3.5-5-6.5V3.6Z" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linejoin="round"/></svg><span data-t>Masking</span></button>
80
+ <span class="nav-gl" data-t>Extend</span>
81
+ <button data-view="plugins"><svg class="nav-ic" viewBox="0 0 20 20" width="16" height="16" aria-hidden="true"><g fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><path d="M8 3.5h4v2.5a1.5 1.5 0 0 0 3 0V3.5h1.5v13H4v-4h2.5a1.5 1.5 0 0 0 0-3H4v-6z"/></g></svg><span data-t>Plugins</span></button>
82
+ </nav>
83
+ <div class="actions" style="--wails-draggable:no-drag">
84
+ <span class="update-wrap">
85
+ <button class="update" id="update" hidden>
86
+ <svg viewBox="0 0 16 16" width="11" height="11"><path d="M8 13V3.5M3.75 7.5 8 3.25l4.25 4.25" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"/></svg>
87
+ <span>Update</span>
88
+ </button>
89
+ <button class="update-hide" id="updateHide" title="Hide until the next version" data-tt>
90
+ <svg viewBox="0 0 10 10" width="8" height="8"><path d="M2.5 2.5l5 5M7.5 2.5l-5 5" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>
91
+ </button>
92
+ </span>
93
+ <button class="icon" id="sync" title="Look for agents on this computer again: one just installed or removed, or its settings changed" data-tt>
94
+ <svg viewBox="0 0 16 16" width="14" height="14"><path d="M13.5 8a5.5 5.5 0 1 1-1.6-3.9M13.5 2v3h-3" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>
95
+ </button>
96
+ <button class="icon" id="open" title="Open the main window" data-tt>
97
+ <svg viewBox="0 0 16 16" width="14" height="14"><path d="M6 3H3.5A1.5 1.5 0 0 0 2 4.5v8A1.5 1.5 0 0 0 3.5 14h8a1.5 1.5 0 0 0 1.5-1.5V10M9 2h5v5M14 2 8 8" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>
98
+ </button>
99
+ <button class="icon" id="prefs" title="Settings" data-tt data-keys="⌘,|Ctrl+,">
100
+ <svg viewBox="0 0 24 24" width="14" height="14"><g fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"/><circle cx="12" cy="12" r="3"/></g></svg>
101
+ <span class="side-l" data-t>Settings</span></button>
102
+ <button class="icon winclose" id="winclose" title="Close" data-tt>
103
+ <svg viewBox="0 0 16 16" width="10" height="10"><path d="M4 4l8 8M12 4l-8 8" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"/></svg>
104
+ </button>
105
+ </div>
106
+ </header>
107
+
108
+ <nav class="ptabs" id="ptabs" hidden>
109
+ <button type="button" data-ptab="agents"><span data-t>Agents</span><em id="ptabN"></em></button>
110
+ <button type="button" data-ptab="usage"><span data-t>Allowances</span></button>
111
+ <button type="button" data-ptab="stats"><span data-t>Usage</span></button>
112
+ <button type="button" data-ptab="routing" data-feature="routing"><span data-t>Routing</span></button>
113
+ </nav>
114
+
115
+ <main class="view" id="view-agents">
116
+ <div class="list" id="agents"></div>
117
+ <section class="profiles">
118
+ <span class="label" data-t>Profiles</span>
119
+ <div id="profiles" class="chips"></div>
120
+ <button class="text" id="save" data-t>+ Save current</button>
121
+ </section>
122
+ <section class="panel-quota" id="panelQuota" hidden></section>
123
+ <section class="panel-routing" id="panelRouting" data-feature="routing" hidden></section>
124
+ <section class="panel-usage" id="panelUsage" hidden></section>
125
+ <div class="plugin-slot" data-slot="agents" hidden></div>
126
+ </main>
127
+
128
+ <main class="view" id="view-providers" hidden>
129
+ <div id="fileError" hidden></div>
130
+ <div id="movable" hidden></div>
131
+ <aside class="provider-discovery" id="providerDiscovery" hidden>
132
+ <div class="who" role="status" aria-live="polite"><b id="providerDiscoveryCount"></b><span id="providerDiscoverySources"></span></div>
133
+ <div class="actions"><button class="text primary" id="reviewProviderDiscovery">Review and import…</button><button class="text" id="dismissProviderDiscovery" data-t data-tt="Hide these configurations until they change">Ignore</button></div>
134
+ </aside>
135
+ <div class="pv-head" id="pvHead" hidden><input class="sess-filter pv-q" id="pvQ" type="search" spellcheck="false" autocomplete="off" placeholder="Find a provider" aria-label="Find a provider" data-tp><button class="text rt-mask" id="pvMask" aria-pressed="false" data-tt="Mask the accounts on every page — email addresses and account names — for a screenshot to share"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M9.9 4.2A10.4 10.4 0 0 1 12 4c6.5 0 10 8 10 8a17.6 17.6 0 0 1-2.2 3.2M6.6 6.6C3.9 8.4 2 12 2 12s3.5 8 10 8a9.7 9.7 0 0 0 5.4-1.6M9.9 9.9a3 3 0 0 0 4.2 4.2M2 2l20 20"/></svg><span data-t>Hide accounts</span></button></div>
136
+ <p class="set-none pv-none" id="pvNone" role="status" hidden></p>
137
+ <div class="list" id="providers"></div>
138
+ <div class="row-head off-head" id="offHead" hidden><button class="fold" id="foldOff" aria-expanded="false" aria-controls="offProviders"><span class="label" data-t>Turned off</span><span class="note" id="offCount"></span></button></div>
139
+ <div class="list" id="offProviders" hidden></div>
140
+ <div id="excluded"></div>
141
+ <div class="after-list">
142
+ <button class="text" id="addProvider" data-t>+ Add provider</button>
143
+ </div>
144
+ <section class="sheet" id="addSheet" hidden></section>
145
+ </main>
146
+
147
+ <!-- the pages plugins add (kernel.js) go here, in the order they register -->
148
+ <template data-slot="page"></template>
149
+
150
+
151
+
152
+
153
+ <main class="view" id="view-plugins" hidden></main>
154
+
155
+ <main class="view" id="view-settings" hidden>
156
+ <div class="row-head set-head"><div class="warm-tabs set-tabs" id="setTabs" role="tablist" aria-label="Settings">
157
+ <button type="button" role="tab" id="setTab-general" data-set="general" aria-controls="setPage-general" data-t>General</button>
158
+ <button type="button" role="tab" id="setTab-usage" data-set="usage" aria-controls="setPage-usage" data-t>Allowances</button>
159
+ <button type="button" role="tab" id="setTab-network" data-set="network" aria-controls="setPage-network" data-t>Network and sharing</button>
160
+ <button type="button" role="tab" id="setTab-models" data-set="models" aria-controls="setPage-models" data-t>Models</button>
161
+ <button type="button" role="tab" id="setTab-privacy" data-set="privacy" aria-controls="setPage-privacy" data-t>Privacy</button>
162
+ <button type="button" role="tab" id="setTab-otel" data-set="otel" aria-controls="setPage-otel" data-feature="otel" data-t>Observability</button>
163
+ <button type="button" role="tab" id="setTab-sync" data-set="sync" aria-controls="setPage-sync" data-t>Sync and backup</button>
164
+ <button type="button" role="tab" id="setTab-plugins" data-set="plugins" aria-controls="setPage-plugins" data-t hidden>Plugins</button>
165
+ <button type="button" role="tab" id="setTab-about" data-set="about" aria-controls="setPage-about" data-t>About</button>
166
+ </div><input class="sess-filter set-q" id="setQ" type="search" spellcheck="false" autocomplete="off" placeholder="Find a setting" aria-label="Find a setting" data-tp></div>
167
+ <p class="set-none" id="setNone" role="status" hidden></p>
168
+ <section class="set-page" id="setPage-general" role="tabpanel" aria-labelledby="setTab-general">
169
+ <div class="list prefs">
170
+ <div class="row pref">
171
+ <div class="who"><div class="name" data-t>Appearance</div><div class="sub om-only" data-t>Follows the Omarchy theme, as picked in Omarchy's menu</div></div>
172
+ <div id="themeSegs" class="om-hide"></div><span class="om-only om-theme-name"></span>
173
+ </div>
174
+ <div class="row pref" id="colorblindRow">
175
+ <div class="who"><div class="name" data-t>Colorblind mode</div></div>
176
+ <div id="colorblindSegs"></div>
177
+ </div>
178
+ <div class="row pref" id="reduceMotionRow">
179
+ <div class="who"><div class="name" data-t>Reduce motion</div></div>
180
+ <div id="reduceMotionSegs"></div>
181
+ </div>
182
+ <div class="row pref" id="birdRow">
183
+ <div class="who"><div class="name" data-t>Loading bird</div></div>
184
+ <div id="birdSegs"></div>
185
+ </div>
186
+ <div class="row pref">
187
+ <div class="who"><div class="name" data-t>Language</div></div>
188
+ <button type="button" id="langPick" class="sess-pick pref-pick" aria-label="Language" aria-haspopup="menu" aria-expanded="false"></button>
189
+ </div>
190
+ <div class="row pref" id="gatewayModeRow" hidden>
191
+ <div class="who"><div class="name" data-t>Gateway mode</div><div class="sub" id="gatewayModeSub"></div></div>
192
+ <div id="gatewayModeSegs"></div>
193
+ </div>
194
+ <div class="row pref app-only" id="textSizeRow">
195
+ <div class="who"><div class="name" data-t>Text size</div></div>
196
+ <div id="textSizeSegs"></div>
197
+ </div>
198
+ <div class="row pref font-row" id="uiFontRow" hidden>
199
+ <div class="who"><div class="name" data-t>Interface font</div><div class="sub font-note" hidden></div></div>
200
+ <div class="font-controls">
201
+ <button type="button" class="proto pick font-family" aria-haspopup="menu" aria-expanded="false"></button>
202
+ <button type="button" class="proto pick font-style" aria-haspopup="menu" aria-expanded="false"></button>
203
+ <div class="font-preview">Aa 0123 · 中文</div>
204
+ </div>
205
+ </div>
206
+ <div class="row pref font-row" id="codeFontRow" hidden>
207
+ <div class="who"><div class="name" data-t>Code font</div><div class="sub font-note" hidden></div></div>
208
+ <div class="font-controls">
209
+ <button type="button" class="proto pick font-family" aria-haspopup="menu" aria-expanded="false"></button>
210
+ <button type="button" class="proto pick font-style" aria-haspopup="menu" aria-expanded="false"></button>
211
+ <div class="font-preview">Aa 0123 · 中文</div>
212
+ </div>
213
+ </div>
214
+ <div class="row pref app-only">
215
+ <div class="who"><div class="name" data-t>Click the tray icon to</div></div>
216
+ <div id="traySegs"></div>
217
+ </div>
218
+ <div class="row pref app-only" id="panelKeyRow">
219
+ <div class="who"><div class="name" data-t>Quick panel shortcut</div><div class="sub" hidden></div></div>
220
+ <div id="panelKey"></div>
221
+ </div>
222
+ <div class="row pref" id="barIconRow" hidden>
223
+ <div class="who"><div class="name" data-t>Bar icon</div><div class="sub" data-t>magpie’s icon beside Omarchy’s own in the bar; right-click opens the window</div></div>
224
+ <div id="barIconSegs"></div>
225
+ </div>
226
+ <div class="row pref">
227
+ <div class="who"><div class="name" data-t>Provider in model names</div></div>
228
+ <div id="plainNamesSegs"></div>
229
+ </div>
230
+ <!-- Codex's and Claude Code's own settings are on the Agents page (AGENT_PREFS); while searching, a row here says where -->
231
+ <div id="agentPrefLinks"></div>
232
+ <div class="row pref app-only" id="loginRow">
233
+ <div class="who"><div class="name" data-t>Open at login</div></div>
234
+ <div id="loginSegs"></div>
235
+ </div>
236
+ <div class="row pref app-only" id="quitAskRow">
237
+ <div class="who"><div class="name" data-t>Ask before quitting</div><div class="sub" data-t>While agents go through magpie, Quit names them and asks first</div></div>
238
+ <div id="quitAskSegs"></div>
239
+ </div>
240
+ <div class="row pref" id="dockRow" hidden>
241
+ <div class="who"><div class="name" data-t>Show in Dock</div></div>
242
+ <div id="dockSegs"></div>
243
+ </div>
244
+ <div class="row pref" id="lightweightRow" hidden>
245
+ <div class="who"><div class="name" data-t>Lightweight mode</div><div class="sub" data-t>A closed window frees about 100 MB after a minute; the gateway and tasks keep running, only the page reloads</div></div>
246
+ <div id="lightweightSegs"></div>
247
+ </div>
248
+ <div class="row pref" id="keepAwakeRow">
249
+ <div class="who"><div class="name" data-t>Prevent sleep</div><div class="sub" data-t>Keeps this computer awake while magpie runs tasks</div></div>
250
+ <div id="keepAwakeSegs"></div>
251
+ </div>
252
+ <div class="row pref" id="wslAgentsRow" hidden>
253
+ <div class="who"><div class="name" data-t>Detect agents in WSL</div><div class="sub" data-t>Looks in running WSL distros for agents to set up, their sessions and Claude Code; off, WSL is never asked anything and the agents found there are no longer shown</div></div>
254
+ <div id="wslAgentsSegs"></div>
255
+ </div>
256
+ <div class="row pref" id="sessionTerminalRow" data-feature="sessions" hidden>
257
+ <div class="who"><div class="name" data-t>Session terminal</div><div class="sub" data-t>The terminal a session opens in</div></div>
258
+ <button type="button" id="sessionTerminalSelect" class="sess-pick session-terminal-select" aria-label="Session terminal" aria-haspopup="menu" aria-expanded="false" data-ta></button>
259
+ </div>
260
+ </div>
261
+ </section>
262
+ <section class="set-page" id="setPage-usage" role="tabpanel" aria-labelledby="setTab-usage">
263
+ <div class="list prefs">
264
+ <div class="row pref app-only" id="trayUsageRow">
265
+ <div class="who"><div class="name" data-t>Allowances in the menu bar</div><div class="sub" id="trayUsageSub"></div></div>
266
+ <div id="trayUsagePick"></div>
267
+ </div>
268
+ <div class="row pref" id="trayWindowsRow" hidden>
269
+ <div class="who"><div class="name" data-t>Menu bar windows</div><div class="sub" data-t>Which of a subscription's windows its card shows, such as 5 hours or 7 days alone; every window unless you pick, and every window again when those picked are gone</div></div>
270
+ <div id="trayWindowsPick" class="tray-windows"></div>
271
+ </div>
272
+ <div class="row pref" id="trayEveryRow" hidden>
273
+ <div class="who"><div class="name" data-t>Menu bar refresh</div><div class="sub" data-t>How often the allowances beside the icon are asked for again</div></div>
274
+ <div id="trayEverySegs"></div>
275
+ </div>
276
+ <div class="row pref" id="trayLogosRow" hidden>
277
+ <div class="who"><div class="name" data-t>Menu bar logos</div><div class="sub" data-t>Each subscription's logo before its numbers; off, the numbers alone with a thin line between subscriptions</div></div>
278
+ <div id="trayLogosSegs"></div>
279
+ </div>
280
+ <div class="row pref" id="trayBirdRow" hidden>
281
+ <div class="who"><div class="name" data-t>Menu bar magpie icon</div><div class="sub" data-t>magpie's icon before the allowances; off, the allowances alone, and a click on one still opens the panel</div></div>
282
+ <div id="trayBirdSegs"></div>
283
+ </div>
284
+ <div class="row pref" id="trayPaceRow" hidden>
285
+ <div class="who"><div class="name" data-t>Menu bar pace</div><div class="sub" data-t>Each window's Pace number beside its figure, as on the Usage page: +12% is 12% more of the window used than an even pace would have used by now, −8% that much less</div></div>
286
+ <div id="trayPaceSegs"></div>
287
+ </div>
288
+ <div class="row pref" id="trayCostRow">
289
+ <div class="who"><div class="name" data-t>Menu bar cost</div><div class="sub" data-t>What magpie's requests cost, beside their tokens in the menu bar and its tooltip; off, the tokens alone</div></div>
290
+ <div id="trayCostSegs"></div>
291
+ </div>
292
+ <div class="row pref" id="trayNumberRow" hidden>
293
+ <div class="who"><div class="name" data-t>Tray icon number</div><div class="sub" data-t>The first allowance's figure as magpie's tray icon, used or left as Allowance display has it, every one when pointing at it; off, magpie's icon</div></div>
294
+ <div id="trayNumberSegs"></div>
295
+ </div>
296
+ <div class="row pref">
297
+ <div class="who"><div class="name" data-t>Allowance display</div><div class="sub" data-t>How much of each window is used, or how much is left, on the Usage page, the panel and the menu bar</div></div>
298
+ <div id="quotaLeftSegs"></div>
299
+ </div>
300
+ <div class="row pref" id="quotaReadsRow">
301
+ <div class="who"><div class="name" data-t>Allowance reads</div><div class="sub" data-t>When I ask: opening or refreshing the Usage page, a card's refresh, and magpie quota or accounts read them; routing, the menu bar and alerts go by the last reading till then. An account a vendor turns away for its quota is still read.</div></div>
302
+ <div id="quotaReadsSegs"></div>
303
+ </div>
304
+ <div class="row pref">
305
+ <div class="who"><div class="name" data-t>Currency</div><div class="sub" id="currencySub"></div></div>
306
+ <div id="currencySegs"></div>
307
+ </div>
308
+ <div class="row pref" id="unitsRow" hidden>
309
+ <div class="who"><div class="name" data-t>Number units</div><div class="sub" data-t>How a large count of tokens or requests is shortened on the Usage page and the panel</div></div>
310
+ <div id="unitsSegs"></div>
311
+ </div>
312
+ <div class="row pref" id="usageAlertRow">
313
+ <div class="who"><div class="name" data-t>Allowance alert</div><div class="sub" id="usageAlertSub"></div></div>
314
+ <div id="usageAlertSegs" class="warm-at"></div>
315
+ </div>
316
+ <div class="row pref" id="balanceAlertRow">
317
+ <div class="who"><div class="name" data-t>Low balance alert</div><div class="sub" id="balanceAlertSub"></div></div>
318
+ <div id="balanceAlertSegs" class="warm-at"></div>
319
+ </div>
320
+ <div class="row pref" id="resetReminderRow">
321
+ <div class="who"><div class="name" data-t>Reset reminder</div><div class="sub" id="resetReminderSub"></div></div>
322
+ <div id="resetReminderSegs"></div>
323
+ </div>
324
+ <div class="row pref" id="codexAutoResetRow" hidden>
325
+ <div class="who"><div class="name" data-t>Codex: auto-use resets</div><div class="sub wraps" data-t>A ChatGPT account uses one of its resets by itself when its week is used up and no other account can answer, or before one expires unused. Off until turned on, account by account; each account's card on the Usage page has the same switch.</div></div>
326
+ </div>
327
+ <div class="row pref" id="codexResetLeadRow" hidden>
328
+ <div class="who"><div class="name" data-t>Codex: how early before one expires</div><div class="sub wraps" data-t>For every account with "before one expires" on: the reset about to run out unused is used this long before it does. Earlier loses what the account's windows have left then; the default is half an hour.</div></div>
329
+ <div id="codexResetLeadPick"></div>
330
+ </div>
331
+ <div class="row pref" id="turnDoneRow">
332
+ <div class="who"><div class="name" data-t>Task done alert</div><div class="sub" id="turnDoneSub"></div></div>
333
+ <div id="turnDoneSegs"></div>
334
+ </div>
335
+ </div>
336
+ <div class="row-head warm-head" data-feature="warmups"><div class="warm-tabs" id="warmTabs" role="tablist">
337
+ <button type="button" role="tab" id="warmTab-codex" data-warm="codex" aria-controls="codexWarmList">Codex</button>
338
+ <button type="button" role="tab" id="warmTab-claude" data-warm="claude" aria-controls="claudeWarmList">Claude Code</button>
339
+ <button type="button" role="tab" id="warmTab-wb" data-warm="wb" aria-controls="wbList" hidden>WorkBuddy</button>
340
+ <button type="button" role="tab" id="warmTab-trae" data-warm="trae" aria-controls="traeList" hidden>Trae CN</button>
341
+ <button type="button" role="tab" id="warmTab-minimax" data-warm="minimax" aria-controls="minimaxList" hidden>MiniMax Code</button>
342
+ <button type="button" role="tab" id="warmTab-qoder" data-warm="qoder" aria-controls="qoderList" hidden>Qoder</button>
343
+ <button type="button" role="tab" id="warmTab-plugins" data-warm="plugins" aria-controls="pluginCheckinList" data-t hidden>Plugins</button>
344
+ </div></div>
345
+ <div class="warm-panes" data-feature="warmups">
346
+ <div class="list prefs" id="codexWarmList" role="tabpanel" aria-labelledby="warmTab-codex">
347
+ <div class="row pref">
348
+ <div class="who"><div class="name" data-t>Warm up on reset</div><div class="sub" id="warmSub" title="Nothing is sent while the computer sleeps: a window that resets then starts when it wakes, and counts from then." data-tt></div></div>
349
+ <div id="warmSegs"></div>
350
+ </div>
351
+ <div class="row pref">
352
+ <div class="who"><div class="name" data-t>Daily warm-up</div><div class="sub" id="warmAtSub"></div></div>
353
+ <div id="warmAtSegs" class="warm-at"></div>
354
+ </div>
355
+ <div class="row pref warm-now" id="warmNowRow" hidden>
356
+ <div class="who"><div class="name" data-t>Warm up now</div><div class="sub" id="warmNowSub"></div></div>
357
+ <div id="warmNowBox"></div>
358
+ </div>
359
+ </div>
360
+ <div class="list prefs" id="claudeWarmList" role="tabpanel" aria-labelledby="warmTab-claude">
361
+ <div class="row pref">
362
+ <div class="who"><div class="name" data-t>Warm up on reset</div><div class="sub" id="claudeWarmSub" title="Nothing is sent while the computer sleeps: a window that resets then starts when it wakes, and counts from then." data-tt></div></div>
363
+ <div id="claudeWarmSegs"></div>
364
+ </div>
365
+ <div class="row pref">
366
+ <div class="who"><div class="name" data-t>Daily warm-up</div><div class="sub" id="claudeWarmAtSub"></div></div>
367
+ <div id="claudeWarmAtSegs" class="warm-at"></div>
368
+ </div>
369
+ <div class="row pref warm-now" id="claudeWarmNowRow" hidden>
370
+ <div class="who"><div class="name" data-t>Warm up now</div><div class="sub" id="claudeWarmNowSub"></div></div>
371
+ <div id="claudeWarmNowBox"></div>
372
+ </div>
373
+ </div>
374
+ <div class="list prefs" id="wbList" role="tabpanel" aria-labelledby="warmTab-wb">
375
+ <div class="row pref" id="wbCheckinRow">
376
+ <div class="who"><div class="name" data-t>Daily check-in</div><div class="sub" id="wbCheckinSub"></div></div>
377
+ <div id="wbCheckinSegs"></div>
378
+ </div>
379
+ </div>
380
+ <div class="list prefs" id="traeList" role="tabpanel" aria-labelledby="warmTab-trae">
381
+ <div class="row pref" id="traeCheckinRow">
382
+ <div class="who"><div class="name" data-t>Daily check-in</div><div class="sub" id="traeCheckinSub"></div></div>
383
+ <div id="traeCheckinSegs"></div>
384
+ </div>
385
+ </div>
386
+ <div class="list prefs" id="minimaxList" role="tabpanel" aria-labelledby="warmTab-minimax">
387
+ <div class="row pref" id="minimaxCheckinRow">
388
+ <div class="who"><div class="name" data-t>Daily check-in</div><div class="sub" id="minimaxCheckinSub"></div></div>
389
+ <div id="minimaxCheckinSegs"></div>
390
+ </div>
391
+ </div>
392
+ <div class="list prefs" id="qoderList" role="tabpanel" aria-labelledby="warmTab-qoder">
393
+ <div class="row pref" id="qoderCheckinRow">
394
+ <div class="who"><div class="name" data-t>Daily check-in</div><div class="sub" id="qoderCheckinSub"></div></div>
395
+ <div id="qoderCheckinSegs"></div>
396
+ </div>
397
+ </div>
398
+ <div class="list prefs" id="pluginCheckinList" role="tabpanel" aria-labelledby="warmTab-plugins"></div>
399
+ </div>
400
+ </section>
401
+ <section class="set-page" id="setPage-network" role="tabpanel" aria-labelledby="setTab-network">
402
+ <div class="list prefs">
403
+ <div class="row pref">
404
+ <div class="who"><div class="name" data-t>Proxy</div><div class="sub" id="proxySub"></div></div>
405
+ <div id="proxySegs" class="proxy-segs"></div>
406
+ </div>
407
+ </div>
408
+ <div class="row-head"><span class="label">GitHub</span></div>
409
+ <div class="list prefs" id="githubList"></div>
410
+ <div class="row-head"><span class="label" data-t>Gateway</span></div>
411
+ <div class="list prefs" id="portList"></div>
412
+ <div class="list prefs">
413
+ <div class="row pref" id="bareIdsRow">
414
+ <div class="who"><div class="name" data-t>Model ids without the provider</div><div class="sub" data-t>The gateway’s model list also names each model by its own id, as gpt-5.6-sol beside codex/gpt-5.6-sol, for apps moved from another proxy. One that several providers serve goes to them in the Providers order</div></div>
415
+ <div id="bareIdsSegs"></div>
416
+ </div>
417
+ <div class="row pref" id="busyLoadRow">
418
+ <div class="who"><div class="name" data-t>Busy models last</div><div class="sub" data-t>A model its plugin says is busier than this goes after the others a request could go to, as its vendor makes it wait. One with no load reported in the last 5 minutes keeps its place</div></div>
419
+ <div id="busyLoadSegs"></div>
420
+ </div>
421
+ </div>
422
+ <div class="row-head"><span class="label" data-t>Local network</span></div>
423
+ <div class="list prefs" id="lanList"></div>
424
+ <div class="list prefs" id="allowList"></div>
425
+ <div class="row-head"><span class="label" data-t>Web pages</span></div>
426
+ <div class="list prefs" id="corsList"></div>
427
+ <div class="row-head" id="webPageHead"><span class="label" data-t>Browser access</span></div>
428
+ <div class="list prefs" id="webPageList"></div>
429
+ </section>
430
+ <section class="set-page" id="setPage-models" role="tabpanel" aria-labelledby="setTab-models">
431
+ <div class="row-head"><span class="label" data-t>Images</span></div>
432
+ <div class="list prefs" id="imagesList"></div>
433
+ <div class="row-head"><span class="label" data-t>Web search</span></div>
434
+ <div class="list prefs" id="searchList"></div>
435
+ <div class="row-head"><span class="label" data-t>Replies</span></div>
436
+ <div class="list prefs" id="replyList"></div>
437
+ <div class="row-head"><span class="label" data-t>Disabled models</span></div>
438
+ <div class="list prefs" id="disabledModelsList"></div>
439
+ </section>
440
+ <section class="set-page" id="setPage-privacy" role="tabpanel" aria-labelledby="setTab-privacy">
441
+ <div class="row-head"><span class="label" data-t>How it's found</span></div>
442
+ <div class="list prefs" id="findList"></div>
443
+ <div class="row-head"><span class="label" data-t>What to mask</span></div>
444
+ <div class="list prefs" id="redactList"></div>
445
+ <div class="row-head"><span class="label" data-t>When a value is found</span></div>
446
+ <div class="list prefs" id="maskActList"></div>
447
+ <div class="row-head"><span class="label" data-t>Try it</span></div>
448
+ <div class="list prefs" id="maskTryList"></div>
449
+ <div class="row-head"><span class="label" data-t>Sharing</span></div>
450
+ <div class="list prefs" id="shareList"></div>
451
+ <div class="row-head"><span class="label" data-t>Agents' sign-ins</span></div>
452
+ <div class="list prefs" id="discoveryList"></div>
453
+ <div class="row-head"><span class="label" data-t>Sign-in pages</span></div>
454
+ <div class="list prefs" id="signInOpenList"></div>
455
+ <div class="row-head"><span class="label" data-t>Agents' session history</span></div>
456
+ <div class="list prefs" id="sessionReadsList"></div>
457
+ </section>
458
+ <section class="set-page" id="setPage-otel" role="tabpanel" aria-labelledby="setTab-otel" data-feature="otel">
459
+ <div id="otelList"></div>
460
+ </section>
461
+ <section class="set-page" id="setPage-sync" role="tabpanel" aria-labelledby="setTab-sync">
462
+ <div class="list prefs" id="syncList"></div>
463
+ </section>
464
+ <section class="set-page" id="setPage-plugins" role="tabpanel" aria-labelledby="setTab-plugins">
465
+ <div class="plugin-slot" data-slot="settings" hidden></div>
466
+ </section>
467
+ <section class="set-page" id="setPage-about" role="tabpanel" aria-labelledby="setTab-about">
468
+ <div class="list prefs" id="about"></div>
469
+ </section>
470
+ </main>
471
+
472
+ <footer class="foot">
473
+ <button type="button" class="text prof-btn" id="profBtn" hidden aria-haspopup="dialog" aria-expanded="false"><span data-t>Profiles</span><em id="profN"></em></button>
474
+ <span id="pqAge" class="pq-age" hidden></span>
475
+ <span id="status" class="status" role="status" aria-atomic="true"></span>
476
+ <span class="grow"></span>
477
+ <button class="text" id="openMain" data-t>Open the main window</button>
478
+ <button class="text" id="quit" data-t>Quit</button>
479
+ </footer>
480
+
481
+ <div class="modal" id="modal" hidden><div class="dialog"></div></div>
482
+
483
+ <div id="pop" class="pop" hidden>
484
+ <div class="search">
485
+ <svg viewBox="0 0 16 16" width="13" height="13"><circle cx="7" cy="7" r="4.5" fill="none" stroke="currentColor" stroke-width="1.6"/><path d="m10.5 10.5 3 3" stroke="currentColor" stroke-width="1.6" stroke-linecap="round"/></svg>
486
+ <input id="q" type="text" spellcheck="false" autocomplete="off" placeholder="Filter…" data-tp>
487
+ </div>
488
+ <div class="picker-body">
489
+ <nav id="pickerRail" aria-label="Model providers"></nav>
490
+ <ul id="list"></ul>
491
+ </div>
492
+ <div class="effort-control" id="effortControl" hidden>
493
+ <div class="effort-head"><span id="effortTitle"></span><b id="effortValue"></b></div>
494
+ <div class="effort-track">
495
+ <span class="effort-ticks" id="effortTicks" aria-hidden="true"></span>
496
+ <input id="effortRange" type="range" min="0" step="1" aria-labelledby="effortTitle">
497
+ </div>
498
+ <div class="effort-ends" aria-hidden="true"><span id="effortMin"></span><span id="effortMax"></span></div>
499
+ </div>
500
+ </div>
501
+
502
+ <!-- an agent's own settings, drawn here and shown in its sheet or opened row (AGENT_PREFS) -->
503
+ <div id="agentPrefRows" hidden>
504
+ <div class="row pref" id="codexAgentsV1Row">
505
+ <div class="who"><div class="name" data-t>Codex subagents on any model</div><div class="sub" data-t>A GPT lead spawns subagents on magpie’s other models. New threads only; Codex’s own multi_agent_v2 still wins</div><div class="sub err" id="codexAgentsV1Warn" hidden></div></div>
506
+ <div id="codexAgentsV1Segs"></div>
507
+ </div>
508
+ <div class="row pref" id="codexSubagentModelRow" hidden>
509
+ <div class="who"><div class="name" data-t>Codex subagent model</div><div class="sub"></div></div>
510
+ <div class="val" id="codexSubagentModelPick"></div>
511
+ </div>
512
+ <div class="row pref" id="fullContextRow">
513
+ <div class="who"><div class="name" data-t>Long conversations</div><div class="sub" data-t>Codex, Claude Code and Grok Build compact at 272K (non-Claude [1m] too) or the size typed, on magpie's models only; a subscription's own models keep their own window and compaction; full window: slower, costlier</div></div>
514
+ <div id="fullContextSegs"></div>
515
+ </div>
516
+ <div class="row pref" id="codexAsyncRow">
517
+ <div class="who"><div class="name" data-t>Codex background compaction</div><div class="sub" data-t>Codex 0.163 and later summarise while a turn goes on, past the share of the window typed (65% when empty); a value set in its own config stays</div></div>
518
+ <div id="codexAsyncSegs"></div>
519
+ </div>
520
+ <div class="row pref" id="codexTitlesRow">
521
+ <div class="who"><div class="name" data-t>Codex thread titles</div></div>
522
+ <div class="val" id="codexTitlesPick"></div>
523
+ </div>
524
+ <div class="row pref" id="codexDescriptionsRow">
525
+ <div class="who"><div class="name" data-t>Codex thread descriptions</div></div>
526
+ <div class="val" id="codexDescriptionsPick"></div>
527
+ </div>
528
+ <div class="row pref" id="codexPredictionsRow">
529
+ <div class="who"><div class="name" data-t>Codex composer predictions</div></div>
530
+ <div class="val" id="codexPredictionsPick"></div>
531
+ </div>
532
+ <div class="row pref" id="codexAutoReviewRow">
533
+ <div class="who"><div class="name" data-t>Codex auto-review model</div></div>
534
+ <div class="val" id="codexAutoReviewPick"></div>
535
+ </div>
536
+ <div class="row pref" id="codexMemoriesRow" hidden>
537
+ <div class="who"><div class="name" data-t>Codex memories model</div></div>
538
+ <div class="val" id="codexMemoriesPick"></div>
539
+ </div>
540
+ </div>
541
+ <script src="i18n.js"></script>
542
+ <script src="kernel.js"></script>
543
+ <!-- the built-in plugins' own scripts (pluginrt.Manifest.Client) -->
544
+ <script src="plugins/gateway/keys.js"></script>
545
+ <script src="plugins/gateway/client.js"></script>
546
+ <script src="plugins/sessions/i18n.js"></script>
547
+ <script src="plugins/sessions/client.js"></script>
548
+ <script src="plugins/library/i18n.js"></script>
549
+ <script src="plugins/library/client.js"></script>
550
+ <script src="plugins/routing/i18n.js"></script>
551
+ <script src="plugins/routing/client.js"></script>
552
+ <script src="plugins/usage/i18n.js"></script>
553
+ <script src="plugins/usage/client.js"></script>
554
+ <script src="plugins/redact/i18n.js"></script>
555
+ <script src="plugins/redact/client.js"></script>
556
+ <script src="plugins/otel/i18n.js"></script>
557
+ <script src="purposes.js"></script>
558
+ <script src="app.js"></script>
559
+ <script src="plugins.js"></script>
560
+ <script src="pluginpages.js"></script>
561
+ <script src="context.js"></script>
562
+ <script src="plugins/usage/page.js"></script>
563
+ <script src="plugins/redact/page.js"></script>
564
+ <script src="plugins/redact/demo.js"></script>
565
+ <script src="plugins/otel/page.js"></script>
566
+ <script src="plugins/gateway/settings.js"></script>
567
+ <script src="plugins/search/settings.js"></script>
568
+ <script src="plugins/sessions/settings.js"></script>
569
+ <script src="plugins/redact/settings.js"></script>
570
+ <script src="start.js"></script>
571
+ </body>
572
+ </html>