miawrouter 1.2.3 → 1.2.4

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 (640) hide show
  1. package/README.md +7 -0
  2. package/app/.next-cli-build/BUILD_ID +1 -1
  3. package/app/.next-cli-build/app-path-routes-manifest.json +9 -9
  4. package/app/.next-cli-build/build-manifest.json +2 -2
  5. package/app/.next-cli-build/prerender-manifest.json +3 -3
  6. package/app/.next-cli-build/server/app/(dashboard)/dashboard/a2a/page.js.nft.json +1 -1
  7. package/app/.next-cli-build/server/app/(dashboard)/dashboard/a2a/page_client-reference-manifest.js +1 -1
  8. package/app/.next-cli-build/server/app/(dashboard)/dashboard/activity/page.js.nft.json +1 -1
  9. package/app/.next-cli-build/server/app/(dashboard)/dashboard/activity/page_client-reference-manifest.js +1 -1
  10. package/app/.next-cli-build/server/app/(dashboard)/dashboard/agent-skills/page.js.nft.json +1 -1
  11. package/app/.next-cli-build/server/app/(dashboard)/dashboard/agent-skills/page_client-reference-manifest.js +1 -1
  12. package/app/.next-cli-build/server/app/(dashboard)/dashboard/api-endpoints/page.js.nft.json +1 -1
  13. package/app/.next-cli-build/server/app/(dashboard)/dashboard/api-endpoints/page_client-reference-manifest.js +1 -1
  14. package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page.js.nft.json +1 -1
  15. package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
  16. package/app/.next-cli-build/server/app/(dashboard)/dashboard/batch/page.js.nft.json +1 -1
  17. package/app/.next-cli-build/server/app/(dashboard)/dashboard/batch/page_client-reference-manifest.js +1 -1
  18. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cache/page.js.nft.json +1 -1
  19. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cache/page_client-reference-manifest.js +1 -1
  20. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js.nft.json +1 -1
  21. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
  22. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js +1 -1
  23. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
  24. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  25. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cloud-agents/page.js.nft.json +1 -1
  26. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cloud-agents/page_client-reference-manifest.js +1 -1
  27. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page.js.nft.json +1 -1
  28. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  29. package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page.js.nft.json +1 -1
  30. package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  31. package/app/.next-cli-build/server/app/(dashboard)/dashboard/costs/page.js.nft.json +1 -1
  32. package/app/.next-cli-build/server/app/(dashboard)/dashboard/costs/page_client-reference-manifest.js +1 -1
  33. package/app/.next-cli-build/server/app/(dashboard)/dashboard/discovery/page.js.nft.json +1 -1
  34. package/app/.next-cli-build/server/app/(dashboard)/dashboard/discovery/page_client-reference-manifest.js +1 -1
  35. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
  36. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  37. package/app/.next-cli-build/server/app/(dashboard)/dashboard/free-provider-rankings/page.js.nft.json +1 -1
  38. package/app/.next-cli-build/server/app/(dashboard)/dashboard/free-provider-rankings/page_client-reference-manifest.js +1 -1
  39. package/app/.next-cli-build/server/app/(dashboard)/dashboard/free-tiers/page.js.nft.json +1 -1
  40. package/app/.next-cli-build/server/app/(dashboard)/dashboard/free-tiers/page_client-reference-manifest.js +1 -1
  41. package/app/.next-cli-build/server/app/(dashboard)/dashboard/guardrails/page.js.nft.json +1 -1
  42. package/app/.next-cli-build/server/app/(dashboard)/dashboard/guardrails/page_client-reference-manifest.js +1 -1
  43. package/app/.next-cli-build/server/app/(dashboard)/dashboard/health/page.js.nft.json +1 -1
  44. package/app/.next-cli-build/server/app/(dashboard)/dashboard/health/page_client-reference-manifest.js +1 -1
  45. package/app/.next-cli-build/server/app/(dashboard)/dashboard/logs/page.js.nft.json +1 -1
  46. package/app/.next-cli-build/server/app/(dashboard)/dashboard/logs/page_client-reference-manifest.js +1 -1
  47. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mcp/page.js.nft.json +1 -1
  48. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mcp/page_client-reference-manifest.js +1 -1
  49. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js.nft.json +1 -1
  50. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
  51. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js.nft.json +1 -1
  52. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
  53. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js.nft.json +1 -1
  54. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
  55. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page.js.nft.json +1 -1
  56. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
  57. package/app/.next-cli-build/server/app/(dashboard)/dashboard/memory/page.js.nft.json +1 -1
  58. package/app/.next-cli-build/server/app/(dashboard)/dashboard/memory/page_client-reference-manifest.js +1 -1
  59. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page.js.nft.json +1 -1
  60. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
  61. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
  62. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  63. package/app/.next-cli-build/server/app/(dashboard)/dashboard/playground/page.js.nft.json +1 -1
  64. package/app/.next-cli-build/server/app/(dashboard)/dashboard/playground/page_client-reference-manifest.js +1 -1
  65. package/app/.next-cli-build/server/app/(dashboard)/dashboard/privacy/page.js.nft.json +1 -1
  66. package/app/.next-cli-build/server/app/(dashboard)/dashboard/privacy/page_client-reference-manifest.js +1 -1
  67. package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page.js.nft.json +1 -1
  68. package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  69. package/app/.next-cli-build/server/app/(dashboard)/dashboard/provider-stats/page.js.nft.json +1 -1
  70. package/app/.next-cli-build/server/app/(dashboard)/dashboard/provider-stats/page_client-reference-manifest.js +1 -1
  71. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +1 -1
  72. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  73. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +1 -1
  74. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  75. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js.nft.json +1 -1
  76. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  77. package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page.js.nft.json +1 -1
  78. package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
  79. package/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page.js.nft.json +1 -1
  80. package/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page_client-reference-manifest.js +1 -1
  81. package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page.js.nft.json +1 -1
  82. package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  83. package/app/.next-cli-build/server/app/(dashboard)/dashboard/runtime/page.js.nft.json +1 -1
  84. package/app/.next-cli-build/server/app/(dashboard)/dashboard/runtime/page_client-reference-manifest.js +1 -1
  85. package/app/.next-cli-build/server/app/(dashboard)/dashboard/settings/feature-flags/page.js.nft.json +1 -1
  86. package/app/.next-cli-build/server/app/(dashboard)/dashboard/settings/feature-flags/page_client-reference-manifest.js +1 -1
  87. package/app/.next-cli-build/server/app/(dashboard)/dashboard/settings/pricing/page.js.nft.json +1 -1
  88. package/app/.next-cli-build/server/app/(dashboard)/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  89. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skill-discovery/page.js.nft.json +1 -1
  90. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skill-discovery/page_client-reference-manifest.js +1 -1
  91. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page.js.nft.json +1 -1
  92. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
  93. package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page.js.nft.json +1 -1
  94. package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -1
  95. package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page.js.nft.json +1 -1
  96. package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  97. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -1
  98. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  99. package/app/.next-cli-build/server/app/(dashboard)/dashboard/webhooks/page.js.nft.json +1 -1
  100. package/app/.next-cli-build/server/app/(dashboard)/dashboard/webhooks/page_client-reference-manifest.js +1 -1
  101. package/app/.next-cli-build/server/app/.well-known/agent.json/route.js.nft.json +1 -1
  102. package/app/.next-cli-build/server/app/_global-error/page.js.nft.json +1 -1
  103. package/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
  104. package/app/.next-cli-build/server/app/_global-error.html +1 -1
  105. package/app/.next-cli-build/server/app/_global-error.rsc +1 -1
  106. package/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
  107. package/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  108. package/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  109. package/app/.next-cli-build/server/app/_not-found/page.js.nft.json +1 -1
  110. package/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
  111. package/app/.next-cli-build/server/app/_not-found.html +1 -1
  112. package/app/.next-cli-build/server/app/_not-found.rsc +5 -5
  113. package/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +5 -5
  114. package/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +5 -5
  115. package/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  116. package/app/.next-cli-build/server/app/api/a2a/route.js.nft.json +1 -1
  117. package/app/.next-cli-build/server/app/api/a2a/status/route.js.nft.json +1 -1
  118. package/app/.next-cli-build/server/app/api/agents/[id]/actions/route.js +1 -1
  119. package/app/.next-cli-build/server/app/api/agents/[id]/actions/route.js.nft.json +1 -1
  120. package/app/.next-cli-build/server/app/api/agents/route.js +1 -1
  121. package/app/.next-cli-build/server/app/api/agents/route.js.nft.json +1 -1
  122. package/app/.next-cli-build/server/app/api/auth/login/route.js.nft.json +1 -1
  123. package/app/.next-cli-build/server/app/api/auth/logout/route.js.nft.json +1 -1
  124. package/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js.nft.json +1 -1
  125. package/app/.next-cli-build/server/app/api/auth/oidc/start/route.js.nft.json +1 -1
  126. package/app/.next-cli-build/server/app/api/auth/oidc/test/route.js.nft.json +1 -1
  127. package/app/.next-cli-build/server/app/api/auth/reset-password/route.js.nft.json +1 -1
  128. package/app/.next-cli-build/server/app/api/auth/status/route.js.nft.json +1 -1
  129. package/app/.next-cli-build/server/app/api/batch/[id]/route.js.nft.json +1 -1
  130. package/app/.next-cli-build/server/app/api/batch/route.js.nft.json +1 -1
  131. package/app/.next-cli-build/server/app/api/batches/[id]/cancel/route.js.nft.json +1 -1
  132. package/app/.next-cli-build/server/app/api/batches/[id]/errors/route.js.nft.json +1 -1
  133. package/app/.next-cli-build/server/app/api/batches/[id]/results/route.js.nft.json +1 -1
  134. package/app/.next-cli-build/server/app/api/batches/[id]/retry/route.js.nft.json +1 -1
  135. package/app/.next-cli-build/server/app/api/batches/[id]/route.js.nft.json +1 -1
  136. package/app/.next-cli-build/server/app/api/batches/route.js.nft.json +1 -1
  137. package/app/.next-cli-build/server/app/api/cache/clear/route.js.nft.json +1 -1
  138. package/app/.next-cli-build/server/app/api/cache/stats/route.js.nft.json +1 -1
  139. package/app/.next-cli-build/server/app/api/catalog/opencode/route.js.nft.json +1 -1
  140. package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js +5 -5
  141. package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js.nft.json +1 -1
  142. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js +2 -2
  143. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
  144. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +1 -1
  145. package/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js +1 -1
  146. package/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js.nft.json +1 -1
  147. package/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js +2 -2
  148. package/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js.nft.json +1 -1
  149. package/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js +1 -1
  150. package/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js.nft.json +1 -1
  151. package/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js +2 -2
  152. package/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js.nft.json +1 -1
  153. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js +2 -2
  154. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js.nft.json +1 -1
  155. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js +1 -1
  156. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js.nft.json +1 -1
  157. package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js +1 -1
  158. package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js.nft.json +1 -1
  159. package/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js +3 -3
  160. package/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js.nft.json +1 -1
  161. package/app/.next-cli-build/server/app/api/cli-tools/devin-settings/route.js +1 -1
  162. package/app/.next-cli-build/server/app/api/cli-tools/devin-settings/route.js.nft.json +1 -1
  163. package/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js +1 -1
  164. package/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js.nft.json +1 -1
  165. package/app/.next-cli-build/server/app/api/cli-tools/grok-build-settings/route.js +2 -2
  166. package/app/.next-cli-build/server/app/api/cli-tools/grok-build-settings/route.js.nft.json +1 -1
  167. package/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js +2 -2
  168. package/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js.nft.json +1 -1
  169. package/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js +2 -2
  170. package/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js.nft.json +1 -1
  171. package/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js +2 -2
  172. package/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js.nft.json +1 -1
  173. package/app/.next-cli-build/server/app/api/cli-tools/oh-my-pi-settings/route.js +2 -2
  174. package/app/.next-cli-build/server/app/api/cli-tools/oh-my-pi-settings/route.js.nft.json +1 -1
  175. package/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js +2 -2
  176. package/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js.nft.json +1 -1
  177. package/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js +2 -2
  178. package/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js.nft.json +1 -1
  179. package/app/.next-cli-build/server/app/api/cli-tools/subagents/route.js +1 -1
  180. package/app/.next-cli-build/server/app/api/cli-tools/subagents/route.js.nft.json +1 -1
  181. package/app/.next-cli-build/server/app/api/cloud-agents/status/route.js +1 -1
  182. package/app/.next-cli-build/server/app/api/cloud-agents/status/route.js.nft.json +1 -1
  183. package/app/.next-cli-build/server/app/api/combos/[id]/route.js.nft.json +1 -1
  184. package/app/.next-cli-build/server/app/api/combos/route.js.nft.json +1 -1
  185. package/app/.next-cli-build/server/app/api/dashboard/chat/completions/route.js.nft.json +1 -1
  186. package/app/.next-cli-build/server/app/api/discovery/endpoints/route.js +1 -1
  187. package/app/.next-cli-build/server/app/api/discovery/endpoints/route.js.nft.json +1 -1
  188. package/app/.next-cli-build/server/app/api/discovery/route.js +1 -1
  189. package/app/.next-cli-build/server/app/api/discovery/route.js.nft.json +1 -1
  190. package/app/.next-cli-build/server/app/api/discovery/skills/route.js +1 -1
  191. package/app/.next-cli-build/server/app/api/discovery/skills/route.js.nft.json +1 -1
  192. package/app/.next-cli-build/server/app/api/events/route.js.nft.json +1 -1
  193. package/app/.next-cli-build/server/app/api/headroom/extras/route.js.nft.json +1 -1
  194. package/app/.next-cli-build/server/app/api/headroom/proxy/[...path]/route.js.nft.json +1 -1
  195. package/app/.next-cli-build/server/app/api/headroom/restart/route.js.nft.json +1 -1
  196. package/app/.next-cli-build/server/app/api/headroom/start/route.js.nft.json +1 -1
  197. package/app/.next-cli-build/server/app/api/headroom/status/route.js.nft.json +1 -1
  198. package/app/.next-cli-build/server/app/api/headroom/stop/route.js.nft.json +1 -1
  199. package/app/.next-cli-build/server/app/api/health/route.js.nft.json +1 -1
  200. package/app/.next-cli-build/server/app/api/hermes/autonomy/route.js.nft.json +1 -1
  201. package/app/.next-cli-build/server/app/api/init/route.js.nft.json +1 -1
  202. package/app/.next-cli-build/server/app/api/keys/[id]/route.js.nft.json +1 -1
  203. package/app/.next-cli-build/server/app/api/keys/route.js.nft.json +1 -1
  204. package/app/.next-cli-build/server/app/api/locale/route.js.nft.json +1 -1
  205. package/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route.js.nft.json +1 -1
  206. package/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/route.js.nft.json +1 -1
  207. package/app/.next-cli-build/server/app/api/mcp/route.js +1 -1
  208. package/app/.next-cli-build/server/app/api/mcp/route.js.nft.json +1 -1
  209. package/app/.next-cli-build/server/app/api/mcp/status/route.js.nft.json +1 -1
  210. package/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js.nft.json +1 -1
  211. package/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js.nft.json +1 -1
  212. package/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js.nft.json +1 -1
  213. package/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js.nft.json +1 -1
  214. package/app/.next-cli-build/server/app/api/media-providers/tts/voices/route.js.nft.json +1 -1
  215. package/app/.next-cli-build/server/app/api/memory/[id]/route.js.nft.json +1 -1
  216. package/app/.next-cli-build/server/app/api/memory/health/route.js.nft.json +1 -1
  217. package/app/.next-cli-build/server/app/api/memory/reindex/route.js.nft.json +1 -1
  218. package/app/.next-cli-build/server/app/api/memory/route.js.nft.json +1 -1
  219. package/app/.next-cli-build/server/app/api/memory/search/route.js.nft.json +1 -1
  220. package/app/.next-cli-build/server/app/api/metrics/route.js.nft.json +1 -1
  221. package/app/.next-cli-build/server/app/api/models/alias/route.js.nft.json +1 -1
  222. package/app/.next-cli-build/server/app/api/models/availability/route.js.nft.json +1 -1
  223. package/app/.next-cli-build/server/app/api/models/custom/route.js.nft.json +1 -1
  224. package/app/.next-cli-build/server/app/api/models/disabled/route.js.nft.json +1 -1
  225. package/app/.next-cli-build/server/app/api/models/route.js.nft.json +1 -1
  226. package/app/.next-cli-build/server/app/api/models/test/route.js.nft.json +1 -1
  227. package/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js +1 -1
  228. package/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
  229. package/app/.next-cli-build/server/app/api/oauth/codex/bulk-import/route.js +1 -1
  230. package/app/.next-cli-build/server/app/api/oauth/codex/bulk-import/route.js.nft.json +1 -1
  231. package/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js +1 -1
  232. package/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js.nft.json +1 -1
  233. package/app/.next-cli-build/server/app/api/oauth/cursor/auto-import/route.js.nft.json +1 -1
  234. package/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
  235. package/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js.nft.json +1 -1
  236. package/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js.nft.json +1 -1
  237. package/app/.next-cli-build/server/app/api/oauth/kiro/api-key/route.js.nft.json +1 -1
  238. package/app/.next-cli-build/server/app/api/oauth/kiro/auto-import/route.js.nft.json +1 -1
  239. package/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
  240. package/app/.next-cli-build/server/app/api/oauth/kiro/import-cli-proxy/route.js.nft.json +1 -1
  241. package/app/.next-cli-build/server/app/api/oauth/kiro/social-authorize/route.js.nft.json +1 -1
  242. package/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
  243. package/app/.next-cli-build/server/app/api/pricing/route.js.nft.json +1 -1
  244. package/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -1
  245. package/app/.next-cli-build/server/app/api/provider-nodes/route.js.nft.json +1 -1
  246. package/app/.next-cli-build/server/app/api/provider-nodes/validate/route.js.nft.json +1 -1
  247. package/app/.next-cli-build/server/app/api/providers/[id]/export/route.js.nft.json +1 -1
  248. package/app/.next-cli-build/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
  249. package/app/.next-cli-build/server/app/api/providers/[id]/onboard/route.js +1 -1
  250. package/app/.next-cli-build/server/app/api/providers/[id]/onboard/route.js.nft.json +1 -1
  251. package/app/.next-cli-build/server/app/api/providers/[id]/route.js.nft.json +1 -1
  252. package/app/.next-cli-build/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
  253. package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -1
  254. package/app/.next-cli-build/server/app/api/providers/client/route.js +1 -1
  255. package/app/.next-cli-build/server/app/api/providers/client/route.js.nft.json +1 -1
  256. package/app/.next-cli-build/server/app/api/providers/kilo/free-models/route.js.nft.json +1 -1
  257. package/app/.next-cli-build/server/app/api/providers/route.js.nft.json +1 -1
  258. package/app/.next-cli-build/server/app/api/providers/suggested-models/route.js.nft.json +1 -1
  259. package/app/.next-cli-build/server/app/api/providers/test-batch/route.js.nft.json +1 -1
  260. package/app/.next-cli-build/server/app/api/providers/validate/route.js.nft.json +1 -1
  261. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js.nft.json +1 -1
  262. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js.nft.json +1 -1
  263. package/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js.nft.json +1 -1
  264. package/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js.nft.json +1 -1
  265. package/app/.next-cli-build/server/app/api/proxy-pools/route.js.nft.json +1 -1
  266. package/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js +1 -1
  267. package/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js.nft.json +1 -1
  268. package/app/.next-cli-build/server/app/api/pxpipe/health/route.js.nft.json +1 -1
  269. package/app/.next-cli-build/server/app/api/pxpipe/install/route.js.nft.json +1 -1
  270. package/app/.next-cli-build/server/app/api/pxpipe/logs/route.js.nft.json +1 -1
  271. package/app/.next-cli-build/server/app/api/pxpipe/restart/route.js.nft.json +1 -1
  272. package/app/.next-cli-build/server/app/api/pxpipe/start/route.js.nft.json +1 -1
  273. package/app/.next-cli-build/server/app/api/pxpipe/stats/route.js.nft.json +1 -1
  274. package/app/.next-cli-build/server/app/api/pxpipe/status/route.js.nft.json +1 -1
  275. package/app/.next-cli-build/server/app/api/pxpipe/stop/route.js.nft.json +1 -1
  276. package/app/.next-cli-build/server/app/api/saver/stats/route.js.nft.json +1 -1
  277. package/app/.next-cli-build/server/app/api/settings/database/route.js.nft.json +1 -1
  278. package/app/.next-cli-build/server/app/api/settings/proxy-test/route.js.nft.json +1 -1
  279. package/app/.next-cli-build/server/app/api/settings/require-login/route.js.nft.json +1 -1
  280. package/app/.next-cli-build/server/app/api/settings/route.js.nft.json +1 -1
  281. package/app/.next-cli-build/server/app/api/shutdown/route.js.nft.json +1 -1
  282. package/app/.next-cli-build/server/app/api/skill-discovery/[id]/install/route.js.nft.json +1 -1
  283. package/app/.next-cli-build/server/app/api/skill-discovery/[id]/route.js.nft.json +1 -1
  284. package/app/.next-cli-build/server/app/api/skill-discovery/[id]/uninstall/route.js.nft.json +1 -1
  285. package/app/.next-cli-build/server/app/api/skill-discovery/route.js.nft.json +1 -1
  286. package/app/.next-cli-build/server/app/api/skill-discovery/sync/route.js.nft.json +1 -1
  287. package/app/.next-cli-build/server/app/api/tags/route.js.nft.json +1 -1
  288. package/app/.next-cli-build/server/app/api/translator/console-logs/route.js.nft.json +1 -1
  289. package/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js.nft.json +1 -1
  290. package/app/.next-cli-build/server/app/api/translator/load/route.js.nft.json +1 -1
  291. package/app/.next-cli-build/server/app/api/translator/save/route.js.nft.json +1 -1
  292. package/app/.next-cli-build/server/app/api/translator/send/route.js +1 -1
  293. package/app/.next-cli-build/server/app/api/translator/send/route.js.nft.json +1 -1
  294. package/app/.next-cli-build/server/app/api/translator/translate/route.js +1 -1
  295. package/app/.next-cli-build/server/app/api/translator/translate/route.js.nft.json +1 -1
  296. package/app/.next-cli-build/server/app/api/tunnel/disable/route.js.nft.json +1 -1
  297. package/app/.next-cli-build/server/app/api/tunnel/enable/route.js.nft.json +1 -1
  298. package/app/.next-cli-build/server/app/api/tunnel/status/route.js.nft.json +1 -1
  299. package/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route.js.nft.json +1 -1
  300. package/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js.nft.json +1 -1
  301. package/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js.nft.json +1 -1
  302. package/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js +2 -2
  303. package/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js.nft.json +1 -1
  304. package/app/.next-cli-build/server/app/api/usage/[connectionId]/codex-reset-credits/route.js +1 -1
  305. package/app/.next-cli-build/server/app/api/usage/[connectionId]/codex-reset-credits/route.js.nft.json +1 -1
  306. package/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js +1 -1
  307. package/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
  308. package/app/.next-cli-build/server/app/api/usage/chart/route.js.nft.json +1 -1
  309. package/app/.next-cli-build/server/app/api/usage/history/route.js.nft.json +1 -1
  310. package/app/.next-cli-build/server/app/api/usage/local-snapshot/route.js +1 -1
  311. package/app/.next-cli-build/server/app/api/usage/local-snapshot/route.js.nft.json +1 -1
  312. package/app/.next-cli-build/server/app/api/usage/logs/route.js.nft.json +1 -1
  313. package/app/.next-cli-build/server/app/api/usage/providers/route.js.nft.json +1 -1
  314. package/app/.next-cli-build/server/app/api/usage/request-details/route.js.nft.json +1 -1
  315. package/app/.next-cli-build/server/app/api/usage/request-logs/route.js.nft.json +1 -1
  316. package/app/.next-cli-build/server/app/api/usage/stats/route.js.nft.json +1 -1
  317. package/app/.next-cli-build/server/app/api/usage/stream/route.js.nft.json +1 -1
  318. package/app/.next-cli-build/server/app/api/v1/api/chat/route.js.nft.json +1 -1
  319. package/app/.next-cli-build/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
  320. package/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
  321. package/app/.next-cli-build/server/app/api/v1/audio/voices/route.js.nft.json +1 -1
  322. package/app/.next-cli-build/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
  323. package/app/.next-cli-build/server/app/api/v1/embeddings/route.js +1 -1
  324. package/app/.next-cli-build/server/app/api/v1/embeddings/route.js.nft.json +1 -1
  325. package/app/.next-cli-build/server/app/api/v1/images/generations/route.js +1 -1
  326. package/app/.next-cli-build/server/app/api/v1/images/generations/route.js.nft.json +1 -1
  327. package/app/.next-cli-build/server/app/api/v1/messages/count_tokens/route.js.nft.json +1 -1
  328. package/app/.next-cli-build/server/app/api/v1/messages/route.js.nft.json +1 -1
  329. package/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js.nft.json +1 -1
  330. package/app/.next-cli-build/server/app/api/v1/models/info/route.js.nft.json +1 -1
  331. package/app/.next-cli-build/server/app/api/v1/models/route.js.nft.json +1 -1
  332. package/app/.next-cli-build/server/app/api/v1/responses/compact/route.js.nft.json +1 -1
  333. package/app/.next-cli-build/server/app/api/v1/responses/route.js.nft.json +1 -1
  334. package/app/.next-cli-build/server/app/api/v1/route.js.nft.json +1 -1
  335. package/app/.next-cli-build/server/app/api/v1/search/route.js +1 -1
  336. package/app/.next-cli-build/server/app/api/v1/search/route.js.nft.json +1 -1
  337. package/app/.next-cli-build/server/app/api/v1/videos/[id]/route.js.nft.json +1 -1
  338. package/app/.next-cli-build/server/app/api/v1/videos/edits/route.js.nft.json +1 -1
  339. package/app/.next-cli-build/server/app/api/v1/videos/extensions/route.js.nft.json +1 -1
  340. package/app/.next-cli-build/server/app/api/v1/videos/generations/route.js.nft.json +1 -1
  341. package/app/.next-cli-build/server/app/api/v1/web/fetch/route.js +1 -1
  342. package/app/.next-cli-build/server/app/api/v1/web/fetch/route.js.nft.json +1 -1
  343. package/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
  344. package/app/.next-cli-build/server/app/api/v1beta/models/route.js.nft.json +1 -1
  345. package/app/.next-cli-build/server/app/api/version/route.js +1 -1
  346. package/app/.next-cli-build/server/app/api/version/route.js.nft.json +1 -1
  347. package/app/.next-cli-build/server/app/api/version/shutdown/route.js.nft.json +1 -1
  348. package/app/.next-cli-build/server/app/api/version/update/route.js.nft.json +1 -1
  349. package/app/.next-cli-build/server/app/api/webhooks/[id]/route.js.nft.json +1 -1
  350. package/app/.next-cli-build/server/app/api/webhooks/events/route.js.nft.json +1 -1
  351. package/app/.next-cli-build/server/app/api/webhooks/route.js.nft.json +1 -1
  352. package/app/.next-cli-build/server/app/callback/page.js.nft.json +1 -1
  353. package/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
  354. package/app/.next-cli-build/server/app/callback.html +1 -1
  355. package/app/.next-cli-build/server/app/callback.rsc +5 -5
  356. package/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +5 -5
  357. package/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +2 -2
  358. package/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +5 -5
  359. package/app/.next-cli-build/server/app/dashboard/a2a.html +1 -1
  360. package/app/.next-cli-build/server/app/dashboard/a2a.rsc +7 -7
  361. package/app/.next-cli-build/server/app/dashboard/a2a.segments/!KGRhc2hib2FyZCk/dashboard/a2a/__PAGE__.segment.rsc +7 -7
  362. package/app/.next-cli-build/server/app/dashboard/a2a.segments/_full.segment.rsc +7 -7
  363. package/app/.next-cli-build/server/app/dashboard/a2a.segments/_tree.segment.rsc +2 -2
  364. package/app/.next-cli-build/server/app/dashboard/activity.html +1 -1
  365. package/app/.next-cli-build/server/app/dashboard/activity.rsc +7 -7
  366. package/app/.next-cli-build/server/app/dashboard/activity.segments/!KGRhc2hib2FyZCk/dashboard/activity/__PAGE__.segment.rsc +7 -7
  367. package/app/.next-cli-build/server/app/dashboard/activity.segments/_full.segment.rsc +7 -7
  368. package/app/.next-cli-build/server/app/dashboard/activity.segments/_tree.segment.rsc +2 -2
  369. package/app/.next-cli-build/server/app/dashboard/agent-skills.html +1 -1
  370. package/app/.next-cli-build/server/app/dashboard/agent-skills.rsc +7 -7
  371. package/app/.next-cli-build/server/app/dashboard/agent-skills.segments/!KGRhc2hib2FyZCk/dashboard/agent-skills/__PAGE__.segment.rsc +7 -7
  372. package/app/.next-cli-build/server/app/dashboard/agent-skills.segments/_full.segment.rsc +7 -7
  373. package/app/.next-cli-build/server/app/dashboard/agent-skills.segments/_tree.segment.rsc +2 -2
  374. package/app/.next-cli-build/server/app/dashboard/api-endpoints.html +1 -1
  375. package/app/.next-cli-build/server/app/dashboard/api-endpoints.rsc +7 -7
  376. package/app/.next-cli-build/server/app/dashboard/api-endpoints.segments/!KGRhc2hib2FyZCk/dashboard/api-endpoints/__PAGE__.segment.rsc +7 -7
  377. package/app/.next-cli-build/server/app/dashboard/api-endpoints.segments/_full.segment.rsc +7 -7
  378. package/app/.next-cli-build/server/app/dashboard/api-endpoints.segments/_tree.segment.rsc +2 -2
  379. package/app/.next-cli-build/server/app/dashboard/basic-chat.html +1 -1
  380. package/app/.next-cli-build/server/app/dashboard/basic-chat.rsc +7 -7
  381. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +7 -7
  382. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_full.segment.rsc +7 -7
  383. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +2 -2
  384. package/app/.next-cli-build/server/app/dashboard/batch.html +1 -1
  385. package/app/.next-cli-build/server/app/dashboard/batch.rsc +7 -7
  386. package/app/.next-cli-build/server/app/dashboard/batch.segments/!KGRhc2hib2FyZCk/dashboard/batch/__PAGE__.segment.rsc +7 -7
  387. package/app/.next-cli-build/server/app/dashboard/batch.segments/_full.segment.rsc +7 -7
  388. package/app/.next-cli-build/server/app/dashboard/batch.segments/_tree.segment.rsc +2 -2
  389. package/app/.next-cli-build/server/app/dashboard/cache.html +1 -1
  390. package/app/.next-cli-build/server/app/dashboard/cache.rsc +7 -7
  391. package/app/.next-cli-build/server/app/dashboard/cache.segments/!KGRhc2hib2FyZCk/dashboard/cache/__PAGE__.segment.rsc +7 -7
  392. package/app/.next-cli-build/server/app/dashboard/cache.segments/_full.segment.rsc +7 -7
  393. package/app/.next-cli-build/server/app/dashboard/cache.segments/_tree.segment.rsc +2 -2
  394. package/app/.next-cli-build/server/app/dashboard/cli-tools.html +1 -1
  395. package/app/.next-cli-build/server/app/dashboard/cli-tools.rsc +7 -7
  396. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +7 -7
  397. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_full.segment.rsc +7 -7
  398. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +2 -2
  399. package/app/.next-cli-build/server/app/dashboard/cloud-agents.html +1 -1
  400. package/app/.next-cli-build/server/app/dashboard/cloud-agents.rsc +7 -7
  401. package/app/.next-cli-build/server/app/dashboard/cloud-agents.segments/!KGRhc2hib2FyZCk/dashboard/cloud-agents/__PAGE__.segment.rsc +7 -7
  402. package/app/.next-cli-build/server/app/dashboard/cloud-agents.segments/_full.segment.rsc +7 -7
  403. package/app/.next-cli-build/server/app/dashboard/cloud-agents.segments/_tree.segment.rsc +2 -2
  404. package/app/.next-cli-build/server/app/dashboard/combos.html +1 -1
  405. package/app/.next-cli-build/server/app/dashboard/combos.rsc +7 -7
  406. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +7 -7
  407. package/app/.next-cli-build/server/app/dashboard/combos.segments/_full.segment.rsc +7 -7
  408. package/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +2 -2
  409. package/app/.next-cli-build/server/app/dashboard/costs.html +1 -1
  410. package/app/.next-cli-build/server/app/dashboard/costs.rsc +7 -7
  411. package/app/.next-cli-build/server/app/dashboard/costs.segments/!KGRhc2hib2FyZCk/dashboard/costs/__PAGE__.segment.rsc +7 -7
  412. package/app/.next-cli-build/server/app/dashboard/costs.segments/_full.segment.rsc +7 -7
  413. package/app/.next-cli-build/server/app/dashboard/costs.segments/_tree.segment.rsc +2 -2
  414. package/app/.next-cli-build/server/app/dashboard/discovery.html +1 -1
  415. package/app/.next-cli-build/server/app/dashboard/discovery.rsc +7 -7
  416. package/app/.next-cli-build/server/app/dashboard/discovery.segments/!KGRhc2hib2FyZCk/dashboard/discovery/__PAGE__.segment.rsc +7 -7
  417. package/app/.next-cli-build/server/app/dashboard/discovery.segments/_full.segment.rsc +7 -7
  418. package/app/.next-cli-build/server/app/dashboard/discovery.segments/_tree.segment.rsc +2 -2
  419. package/app/.next-cli-build/server/app/dashboard/endpoint.html +1 -1
  420. package/app/.next-cli-build/server/app/dashboard/endpoint.rsc +7 -7
  421. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +7 -7
  422. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_full.segment.rsc +7 -7
  423. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +2 -2
  424. package/app/.next-cli-build/server/app/dashboard/free-provider-rankings.html +1 -1
  425. package/app/.next-cli-build/server/app/dashboard/free-provider-rankings.rsc +7 -7
  426. package/app/.next-cli-build/server/app/dashboard/free-provider-rankings.segments/!KGRhc2hib2FyZCk/dashboard/free-provider-rankings/__PAGE__.segment.rsc +7 -7
  427. package/app/.next-cli-build/server/app/dashboard/free-provider-rankings.segments/_full.segment.rsc +7 -7
  428. package/app/.next-cli-build/server/app/dashboard/free-provider-rankings.segments/_tree.segment.rsc +2 -2
  429. package/app/.next-cli-build/server/app/dashboard/free-tiers.html +1 -1
  430. package/app/.next-cli-build/server/app/dashboard/free-tiers.rsc +7 -7
  431. package/app/.next-cli-build/server/app/dashboard/free-tiers.segments/!KGRhc2hib2FyZCk/dashboard/free-tiers/__PAGE__.segment.rsc +7 -7
  432. package/app/.next-cli-build/server/app/dashboard/free-tiers.segments/_full.segment.rsc +7 -7
  433. package/app/.next-cli-build/server/app/dashboard/free-tiers.segments/_tree.segment.rsc +2 -2
  434. package/app/.next-cli-build/server/app/dashboard/guardrails.html +1 -1
  435. package/app/.next-cli-build/server/app/dashboard/guardrails.rsc +7 -7
  436. package/app/.next-cli-build/server/app/dashboard/guardrails.segments/!KGRhc2hib2FyZCk/dashboard/guardrails/__PAGE__.segment.rsc +7 -7
  437. package/app/.next-cli-build/server/app/dashboard/guardrails.segments/_full.segment.rsc +7 -7
  438. package/app/.next-cli-build/server/app/dashboard/guardrails.segments/_tree.segment.rsc +2 -2
  439. package/app/.next-cli-build/server/app/dashboard/health.html +1 -1
  440. package/app/.next-cli-build/server/app/dashboard/health.rsc +7 -7
  441. package/app/.next-cli-build/server/app/dashboard/health.segments/!KGRhc2hib2FyZCk/dashboard/health/__PAGE__.segment.rsc +7 -7
  442. package/app/.next-cli-build/server/app/dashboard/health.segments/_full.segment.rsc +7 -7
  443. package/app/.next-cli-build/server/app/dashboard/health.segments/_tree.segment.rsc +2 -2
  444. package/app/.next-cli-build/server/app/dashboard/logs.html +1 -1
  445. package/app/.next-cli-build/server/app/dashboard/logs.rsc +7 -7
  446. package/app/.next-cli-build/server/app/dashboard/logs.segments/!KGRhc2hib2FyZCk/dashboard/logs/__PAGE__.segment.rsc +7 -7
  447. package/app/.next-cli-build/server/app/dashboard/logs.segments/_full.segment.rsc +7 -7
  448. package/app/.next-cli-build/server/app/dashboard/logs.segments/_tree.segment.rsc +2 -2
  449. package/app/.next-cli-build/server/app/dashboard/mcp.html +1 -1
  450. package/app/.next-cli-build/server/app/dashboard/mcp.rsc +7 -7
  451. package/app/.next-cli-build/server/app/dashboard/mcp.segments/!KGRhc2hib2FyZCk/dashboard/mcp/__PAGE__.segment.rsc +7 -7
  452. package/app/.next-cli-build/server/app/dashboard/mcp.segments/_full.segment.rsc +7 -7
  453. package/app/.next-cli-build/server/app/dashboard/mcp.segments/_tree.segment.rsc +2 -2
  454. package/app/.next-cli-build/server/app/dashboard/media-providers/web.html +1 -1
  455. package/app/.next-cli-build/server/app/dashboard/media-providers/web.rsc +7 -7
  456. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +7 -7
  457. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +7 -7
  458. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +2 -2
  459. package/app/.next-cli-build/server/app/dashboard/memory.html +1 -1
  460. package/app/.next-cli-build/server/app/dashboard/memory.rsc +7 -7
  461. package/app/.next-cli-build/server/app/dashboard/memory.segments/!KGRhc2hib2FyZCk/dashboard/memory/__PAGE__.segment.rsc +7 -7
  462. package/app/.next-cli-build/server/app/dashboard/memory.segments/_full.segment.rsc +7 -7
  463. package/app/.next-cli-build/server/app/dashboard/memory.segments/_tree.segment.rsc +2 -2
  464. package/app/.next-cli-build/server/app/dashboard/mitm.html +1 -1
  465. package/app/.next-cli-build/server/app/dashboard/mitm.rsc +7 -7
  466. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +7 -7
  467. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_full.segment.rsc +7 -7
  468. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_tree.segment.rsc +2 -2
  469. package/app/.next-cli-build/server/app/dashboard/playground.html +1 -1
  470. package/app/.next-cli-build/server/app/dashboard/playground.rsc +7 -7
  471. package/app/.next-cli-build/server/app/dashboard/playground.segments/!KGRhc2hib2FyZCk/dashboard/playground/__PAGE__.segment.rsc +7 -7
  472. package/app/.next-cli-build/server/app/dashboard/playground.segments/_full.segment.rsc +7 -7
  473. package/app/.next-cli-build/server/app/dashboard/playground.segments/_tree.segment.rsc +2 -2
  474. package/app/.next-cli-build/server/app/dashboard/privacy.html +1 -1
  475. package/app/.next-cli-build/server/app/dashboard/privacy.rsc +7 -7
  476. package/app/.next-cli-build/server/app/dashboard/privacy.segments/!KGRhc2hib2FyZCk/dashboard/privacy/__PAGE__.segment.rsc +7 -7
  477. package/app/.next-cli-build/server/app/dashboard/privacy.segments/_full.segment.rsc +7 -7
  478. package/app/.next-cli-build/server/app/dashboard/privacy.segments/_tree.segment.rsc +2 -2
  479. package/app/.next-cli-build/server/app/dashboard/profile.html +1 -1
  480. package/app/.next-cli-build/server/app/dashboard/profile.rsc +7 -7
  481. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +7 -7
  482. package/app/.next-cli-build/server/app/dashboard/profile.segments/_full.segment.rsc +7 -7
  483. package/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +2 -2
  484. package/app/.next-cli-build/server/app/dashboard/provider-stats.html +1 -1
  485. package/app/.next-cli-build/server/app/dashboard/provider-stats.rsc +7 -7
  486. package/app/.next-cli-build/server/app/dashboard/provider-stats.segments/!KGRhc2hib2FyZCk/dashboard/provider-stats/__PAGE__.segment.rsc +7 -7
  487. package/app/.next-cli-build/server/app/dashboard/provider-stats.segments/_full.segment.rsc +7 -7
  488. package/app/.next-cli-build/server/app/dashboard/provider-stats.segments/_tree.segment.rsc +2 -2
  489. package/app/.next-cli-build/server/app/dashboard/providers/new.html +1 -1
  490. package/app/.next-cli-build/server/app/dashboard/providers/new.rsc +7 -7
  491. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +7 -7
  492. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_full.segment.rsc +7 -7
  493. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +2 -2
  494. package/app/.next-cli-build/server/app/dashboard/providers.html +1 -1
  495. package/app/.next-cli-build/server/app/dashboard/providers.rsc +7 -7
  496. package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +7 -7
  497. package/app/.next-cli-build/server/app/dashboard/providers.segments/_full.segment.rsc +7 -7
  498. package/app/.next-cli-build/server/app/dashboard/providers.segments/_tree.segment.rsc +2 -2
  499. package/app/.next-cli-build/server/app/dashboard/proxy-pools.html +1 -1
  500. package/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +7 -7
  501. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +7 -7
  502. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +7 -7
  503. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +2 -2
  504. package/app/.next-cli-build/server/app/dashboard/pxpipe.html +1 -1
  505. package/app/.next-cli-build/server/app/dashboard/pxpipe.rsc +7 -7
  506. package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe/__PAGE__.segment.rsc +7 -7
  507. package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_full.segment.rsc +7 -7
  508. package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_tree.segment.rsc +2 -2
  509. package/app/.next-cli-build/server/app/dashboard/quota.html +2 -2
  510. package/app/.next-cli-build/server/app/dashboard/quota.rsc +8 -8
  511. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +8 -8
  512. package/app/.next-cli-build/server/app/dashboard/quota.segments/_full.segment.rsc +8 -8
  513. package/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +2 -2
  514. package/app/.next-cli-build/server/app/dashboard/runtime.html +1 -1
  515. package/app/.next-cli-build/server/app/dashboard/runtime.rsc +7 -7
  516. package/app/.next-cli-build/server/app/dashboard/runtime.segments/!KGRhc2hib2FyZCk/dashboard/runtime/__PAGE__.segment.rsc +7 -7
  517. package/app/.next-cli-build/server/app/dashboard/runtime.segments/_full.segment.rsc +7 -7
  518. package/app/.next-cli-build/server/app/dashboard/runtime.segments/_tree.segment.rsc +2 -2
  519. package/app/.next-cli-build/server/app/dashboard/settings/feature-flags.html +1 -1
  520. package/app/.next-cli-build/server/app/dashboard/settings/feature-flags.rsc +7 -7
  521. package/app/.next-cli-build/server/app/dashboard/settings/feature-flags.segments/!KGRhc2hib2FyZCk/dashboard/settings/feature-flags/__PAGE__.segment.rsc +7 -7
  522. package/app/.next-cli-build/server/app/dashboard/settings/feature-flags.segments/_full.segment.rsc +7 -7
  523. package/app/.next-cli-build/server/app/dashboard/settings/feature-flags.segments/_tree.segment.rsc +2 -2
  524. package/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
  525. package/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +7 -7
  526. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/!KGRhc2hib2FyZCk/dashboard/settings/pricing/__PAGE__.segment.rsc +7 -7
  527. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +7 -7
  528. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +2 -2
  529. package/app/.next-cli-build/server/app/dashboard/skill-discovery.html +1 -1
  530. package/app/.next-cli-build/server/app/dashboard/skill-discovery.rsc +7 -7
  531. package/app/.next-cli-build/server/app/dashboard/skill-discovery.segments/!KGRhc2hib2FyZCk/dashboard/skill-discovery/__PAGE__.segment.rsc +7 -7
  532. package/app/.next-cli-build/server/app/dashboard/skill-discovery.segments/_full.segment.rsc +7 -7
  533. package/app/.next-cli-build/server/app/dashboard/skill-discovery.segments/_tree.segment.rsc +2 -2
  534. package/app/.next-cli-build/server/app/dashboard/skills.html +1 -1
  535. package/app/.next-cli-build/server/app/dashboard/skills.rsc +7 -7
  536. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills/__PAGE__.segment.rsc +7 -7
  537. package/app/.next-cli-build/server/app/dashboard/skills.segments/_full.segment.rsc +7 -7
  538. package/app/.next-cli-build/server/app/dashboard/skills.segments/_tree.segment.rsc +2 -2
  539. package/app/.next-cli-build/server/app/dashboard/token-saver.html +1 -1
  540. package/app/.next-cli-build/server/app/dashboard/token-saver.rsc +8 -8
  541. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +8 -8
  542. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_full.segment.rsc +8 -8
  543. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_tree.segment.rsc +2 -2
  544. package/app/.next-cli-build/server/app/dashboard/translator.html +1 -1
  545. package/app/.next-cli-build/server/app/dashboard/translator.rsc +7 -7
  546. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +7 -7
  547. package/app/.next-cli-build/server/app/dashboard/translator.segments/_full.segment.rsc +7 -7
  548. package/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +2 -2
  549. package/app/.next-cli-build/server/app/dashboard/usage.html +1 -1
  550. package/app/.next-cli-build/server/app/dashboard/usage.rsc +7 -7
  551. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +7 -7
  552. package/app/.next-cli-build/server/app/dashboard/usage.segments/_full.segment.rsc +7 -7
  553. package/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +2 -2
  554. package/app/.next-cli-build/server/app/dashboard/webhooks.html +1 -1
  555. package/app/.next-cli-build/server/app/dashboard/webhooks.rsc +7 -7
  556. package/app/.next-cli-build/server/app/dashboard/webhooks.segments/!KGRhc2hib2FyZCk/dashboard/webhooks/__PAGE__.segment.rsc +7 -7
  557. package/app/.next-cli-build/server/app/dashboard/webhooks.segments/_full.segment.rsc +7 -7
  558. package/app/.next-cli-build/server/app/dashboard/webhooks.segments/_tree.segment.rsc +2 -2
  559. package/app/.next-cli-build/server/app/dashboard.html +1 -1
  560. package/app/.next-cli-build/server/app/dashboard.rsc +7 -7
  561. package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +7 -7
  562. package/app/.next-cli-build/server/app/dashboard.segments/_full.segment.rsc +7 -7
  563. package/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +2 -2
  564. package/app/.next-cli-build/server/app/favicon.ico/route.js.nft.json +1 -1
  565. package/app/.next-cli-build/server/app/index.html +1 -1
  566. package/app/.next-cli-build/server/app/index.rsc +5 -5
  567. package/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +5 -5
  568. package/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +5 -5
  569. package/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +2 -2
  570. package/app/.next-cli-build/server/app/landing/page.js.nft.json +1 -1
  571. package/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
  572. package/app/.next-cli-build/server/app/landing.html +1 -1
  573. package/app/.next-cli-build/server/app/landing.rsc +5 -5
  574. package/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +5 -5
  575. package/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +2 -2
  576. package/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +5 -5
  577. package/app/.next-cli-build/server/app/login/page.js.nft.json +1 -1
  578. package/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
  579. package/app/.next-cli-build/server/app/login.html +1 -1
  580. package/app/.next-cli-build/server/app/login.rsc +6 -6
  581. package/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +6 -6
  582. package/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +2 -2
  583. package/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +6 -6
  584. package/app/.next-cli-build/server/app/manifest.webmanifest/route.js.nft.json +1 -1
  585. package/app/.next-cli-build/server/app/page.js.nft.json +1 -1
  586. package/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
  587. package/app/.next-cli-build/server/app-paths-manifest.json +9 -9
  588. package/app/.next-cli-build/server/chunks/112.js +1 -1
  589. package/app/.next-cli-build/server/chunks/2638.js +1 -1
  590. package/app/.next-cli-build/server/chunks/2813.js +1 -1
  591. package/app/.next-cli-build/server/chunks/2974.js +1 -1
  592. package/app/.next-cli-build/server/chunks/318.js +1 -1
  593. package/app/.next-cli-build/server/chunks/3755.js +1 -1
  594. package/app/.next-cli-build/server/chunks/4037.js +1 -1
  595. package/app/.next-cli-build/server/chunks/4303.js +1 -1
  596. package/app/.next-cli-build/server/chunks/5243.js +1 -1
  597. package/app/.next-cli-build/server/chunks/5731.js +1 -1
  598. package/app/.next-cli-build/server/chunks/6270.js +1 -1
  599. package/app/.next-cli-build/server/chunks/6664.js +1 -1
  600. package/app/.next-cli-build/server/chunks/7403.js +1 -1
  601. package/app/.next-cli-build/server/chunks/772.js +1 -1
  602. package/app/.next-cli-build/server/chunks/{4018.js → 7937.js} +5 -5
  603. package/app/.next-cli-build/server/chunks/8499.js +1 -1
  604. package/app/.next-cli-build/server/chunks/8537.js +1 -1
  605. package/app/.next-cli-build/server/chunks/862.js +1 -1
  606. package/app/.next-cli-build/server/chunks/869.js +1 -1
  607. package/app/.next-cli-build/server/chunks/8750.js +1 -1
  608. package/app/.next-cli-build/server/instrumentation.js.nft.json +1 -1
  609. package/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
  610. package/app/.next-cli-build/server/middleware.js +4 -4
  611. package/app/.next-cli-build/server/middleware.js.nft.json +1 -1
  612. package/app/.next-cli-build/server/pages/404.html +1 -1
  613. package/app/.next-cli-build/server/pages/500.html +1 -1
  614. package/app/.next-cli-build/server/server-reference-manifest.js +1 -1
  615. package/app/.next-cli-build/server/server-reference-manifest.json +1 -1
  616. package/app/.next-cli-build/static/chunks/{1321-b974e2c6d758f2eb.js → 1321-6b997794bb843da8.js} +1 -1
  617. package/app/.next-cli-build/static/chunks/{7780-8fef40eb7ea5a323.js → 7780-f3508723257e47c1.js} +1 -1
  618. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/cli-tools/{page-8f34a6d3a99ebd37.js → page-f7cbd07558c7b42e.js} +1 -1
  619. package/app/.next-cli-build/static/css/01b1ec05918332c3.css +1 -0
  620. package/app/package.json +79 -78
  621. package/app/src/mitm/server.js +40 -42
  622. package/cli.js +10 -0
  623. package/hooks/opencodeBridgeRuntime.js +77 -0
  624. package/hooks/sqliteRuntime.js +156 -156
  625. package/hooks/trayRuntime.js +107 -107
  626. package/package.json +49 -49
  627. package/vendor/opencode-free-bridge/LICENSE +21 -0
  628. package/vendor/opencode-free-bridge/README.md +762 -0
  629. package/vendor/opencode-free-bridge/THIRD_PARTY_NOTICES.md +33 -0
  630. package/vendor/opencode-free-bridge/UPSTREAM_COMMIT +1 -0
  631. package/vendor/opencode-free-bridge/identity.js +2624 -0
  632. package/vendor/opencode-free-bridge/package.json +54 -0
  633. package/vendor/opencode-free-bridge/panel.js +515 -0
  634. package/vendor/opencode-free-bridge/proxy.js +980 -0
  635. package/vendor/opencode-free-bridge/server.js +3357 -0
  636. package/vendor/opencode-free-bridge/token-budget.js +107 -0
  637. package/vendor/opencode-free-bridge/transport-baseline.json +39 -0
  638. package/app/.next-cli-build/static/css/8ba5c8dbc4e30aa0.css +0 -1
  639. /package/app/.next-cli-build/static/{X4uxXfKI78mMCnlqFsTAr → DryEkcB2pIbzN1YYgNcUS}/_buildManifest.js +0 -0
  640. /package/app/.next-cli-build/static/{X4uxXfKI78mMCnlqFsTAr → DryEkcB2pIbzN1YYgNcUS}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- <!DOCTYPE html><html lang="en" class="dark"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/miawrouter-favicon-32.png"/><link rel="stylesheet" href="/_next/static/css/1e41699163398962.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/8ba5c8dbc4e30aa0.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-cfe64bcd232c635c.js"/><script src="/_next/static/chunks/4bd1b696-8a4ab4fdf0ae305a.js" async=""></script><script src="/_next/static/chunks/3794-6cecce02b123eb1f.js" async=""></script><script src="/_next/static/chunks/main-app-fa3e3fb218f9eade.js" async=""></script><script src="/_next/static/chunks/9647-83de9c8c0d2ffe2a.js" async=""></script><script src="/_next/static/chunks/2048-9d3db5763af19b9f.js" async=""></script><script src="/_next/static/chunks/6439-3dc656d19715c56c.js" async=""></script><script src="/_next/static/chunks/1321-b974e2c6d758f2eb.js" async=""></script><script src="/_next/static/chunks/5497-307a8ef5cdb7207e.js" async=""></script><script src="/_next/static/chunks/app/(dashboard)/layout-5b91d30e5ec17946.js" async=""></script><script src="/_next/static/chunks/6198-c12e3b40da04e356.js" async=""></script><script src="/_next/static/chunks/app/layout-0fd748451eb66376.js" async=""></script><script src="/_next/static/chunks/8382-b04c92635bbb061a.js" async=""></script><script src="/_next/static/chunks/app/(dashboard)/dashboard/token-saver/page-8eae7ddbc06522e6.js" async=""></script><link rel="preload" href="https://www.googletagmanager.com/gtag/js?id=G-LC959F603F" as="script"/><meta name="theme-color" content="#F5F4F0" media="(prefers-color-scheme: light)"/><meta name="theme-color" content="#09090B" media="(prefers-color-scheme: dark)"/><title>MiawRouter - Local AI Request Router</title><meta name="description" content="Route AI requests through one local endpoint and manage provider connections in a web dashboard."/><link rel="manifest" href="/manifest.webmanifest"/><link rel="icon" href="/favicon.ico?7ea3ab789c052974" type="image/x-icon" sizes="256x256"/><link rel="icon" href="/miawrouter-favicon-16.png" sizes="16x16"/><link rel="icon" href="/miawrouter-favicon-32.png" sizes="32x32"/><link rel="icon" href="/miawrouter-favicon-48.png" sizes="48x48"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="__variable_e2cc43 __variable_aa62b7 font-sans antialiased"><div hidden=""><!--$--><!--/$--></div><div class="flex h-dvh w-full overflow-hidden bg-bg text-text-main"><div class="fixed top-4 right-4 z-[80] flex w-[min(92vw,380px)] flex-col gap-2"></div><div class="hidden lg:flex h-full shrink-0"><aside class="sidebar-shell flex w-[256px] h-full flex-col transition-[width] duration-150"><div class="sidebar-brand flex flex-col gap-2 px-3.5 py-3"><div class="flex items-center gap-2.5"><a class="flex min-w-0 flex-1 items-center gap-2.5" title="MiawRouter dashboard" href="/dashboard"><div class="sidebar-brand-icon flex size-9 shrink-0 items-center justify-center overflow-hidden rounded-lg border border-border bg-surface shadow-xs"><img src="/miawrouter-favicon-32.png" data-brand-asset="icon" alt="" aria-hidden="true" class="size-full object-contain p-0.5"/></div><div class="sidebar-brand-copy flex min-w-0 flex-col"><div class="flex items-center gap-1.5"><h1 class="truncate text-[14.5px] font-bold tracking-tight text-text-main">MiawRouter Proxy</h1><span class="status-dot status-dot-live" title="Gateway Active"></span></div><span class="text-[10.5px] font-mono font-medium text-text-muted">V1.2.3<!-- --> · AI Router</span></div></a><button type="button" class="sidebar-collapse-toggle inline-flex size-8 shrink-0 items-center justify-center rounded-lg text-text-muted hover:bg-surface-2 hover:text-text-main" aria-label="Collapse sidebar" title="Collapse sidebar"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[15px]" aria-hidden="true" data-icon="chevron_left"><path d="M168.49,199.51a12,12,0,0,1-17,17l-80-80a12,12,0,0,1,0-17l80-80a12,12,0,0,1,17,17L97,128Z"></path></svg></button></div></div><label class="sidebar-search"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[15px] text-text-muted shrink-0" aria-hidden="true" data-icon="search"><path d="M232.49,215.51,185,168a92.12,92.12,0,1,0-17,17l47.53,47.54a12,12,0,0,0,17-17ZM44,112a68,68,0,1,1,68,68A68.07,68.07,0,0,1,44,112Z"></path></svg><input aria-label="Search navigation" placeholder="Jump to menu…" value=""/></label><div class="sidebar-endpoint-row"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="text-[14px] text-primary shrink-0" style="display:inline-block;vertical-align:middle;flex-shrink:0" aria-hidden="true" data-icon="hub"><circle cx="12" cy="12" r="3.25" fill="currentColor" fill-opacity="0.18" stroke="currentColor" stroke-width="1.75"></circle><circle cx="5" cy="6" r="2.25" stroke="currentColor" stroke-width="1.75"></circle><circle cx="19" cy="6" r="2.25" stroke="currentColor" stroke-width="1.75"></circle><circle cx="5" cy="18" r="2.25" stroke="currentColor" stroke-width="1.75"></circle><circle cx="19" cy="18" r="2.25" stroke="currentColor" stroke-width="1.75"></circle><path d="M6.8 7.5 9.6 9.9M17.2 7.5l-2.8 2.4M6.8 16.5l2.8-2.4M17.2 16.5l-2.8-2.4" stroke="currentColor" stroke-width="1.65" stroke-linecap="round"></path></svg><span class="sr-only">Local endpoint</span><code class="min-w-0 flex-1 truncate font-mono text-[11px] font-medium text-text-main" title=""></code><button type="button" disabled="" class="inline-flex size-6 shrink-0 items-center justify-center rounded-md text-text-muted transition-colors hover:bg-surface hover:text-primary disabled:opacity-50" aria-label="Copy local endpoint" title="Copy local endpoint"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[13px]" aria-hidden="true" data-icon="content_copy"><path d="M216,32H88a8,8,0,0,0-8,8V80H40a8,8,0,0,0-8,8V216a8,8,0,0,0,8,8H168a8,8,0,0,0,8-8V176h40a8,8,0,0,0,8-8V40A8,8,0,0,0,216,32ZM160,208H48V96H160Zm48-48H176V88a8,8,0,0,0-8-8H96V48H208Z"></path></svg></button></div><nav class="flex-1 px-2.5 py-2 space-y-1.5 overflow-y-auto custom-scrollbar"><div class="mb-2 rounded-xl border border-border bg-surface/70 p-1.5"><div class="flex items-center justify-between px-1.5 pb-1"><span class="text-[10px] font-mono font-semibold uppercase tracking-wider text-text-muted">Quick Access</span><span class="text-[10px] font-mono text-text-subtle">1-Click Hub</span></div><div class="grid grid-cols-2 gap-1"><a class="flex items-center gap-1.5 rounded-lg px-2 py-1.5 text-[11.5px] font-medium transition-all truncate text-text-muted hover:bg-surface-2/70 hover:text-text-main border border-transparent" title="Overview" href="/dashboard"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="text-[13px] shrink-0 text-text-muted" style="display:inline-block;vertical-align:middle;flex-shrink:0" aria-hidden="true" data-icon="dashboard"><rect x="3" y="3" width="7.5" height="7.5" rx="2" fill="currentColor" fill-opacity="0.16" stroke="currentColor" stroke-width="1.75"></rect><rect x="13.5" y="3" width="7.5" height="7.5" rx="2" stroke="currentColor" stroke-width="1.75"></rect><rect x="3" y="13.5" width="7.5" height="7.5" rx="2" stroke="currentColor" stroke-width="1.75"></rect><rect x="13.5" y="13.5" width="7.5" height="7.5" rx="2" fill="currentColor" fill-opacity="0.16" stroke="currentColor" stroke-width="1.75"></rect></svg><span class="truncate">Overview</span></a><a class="flex items-center gap-1.5 rounded-lg px-2 py-1.5 text-[11.5px] font-medium transition-all truncate text-text-muted hover:bg-surface-2/70 hover:text-text-main border border-transparent" title="Usage &amp; Routing" href="/dashboard/usage"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="text-[13px] shrink-0 text-text-muted" style="display:inline-block;vertical-align:middle;flex-shrink:0" aria-hidden="true" data-icon="bar_chart"><rect x="3.5" y="12.5" width="4" height="7.5" rx="1.2" stroke="currentColor" stroke-width="1.75"></rect><rect x="10" y="8" width="4" height="12" rx="1.2" fill="currentColor" fill-opacity="0.18" stroke="currentColor" stroke-width="1.75"></rect><rect x="16.5" y="4" width="4" height="16" rx="1.2" stroke="currentColor" stroke-width="1.75"></rect></svg><span class="truncate">Usage &amp; Routing</span></a><a class="flex items-center gap-1.5 rounded-lg px-2 py-1.5 text-[11.5px] font-medium transition-all truncate text-text-muted hover:bg-surface-2/70 hover:text-text-main border border-transparent" title="Providers" href="/dashboard/providers"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="text-[13px] shrink-0 text-text-muted" style="display:inline-block;vertical-align:middle;flex-shrink:0" aria-hidden="true" data-icon="dns"><rect x="3" y="3.5" width="18" height="7" rx="2" fill="currentColor" fill-opacity="0.14" stroke="currentColor" stroke-width="1.75"></rect><rect x="3" y="13.5" width="18" height="7" rx="2" stroke="currentColor" stroke-width="1.75"></rect><circle cx="7" cy="7" r="1.1" fill="currentColor"></circle><circle cx="7" cy="17" r="1.1" fill="currentColor"></circle><path d="M11.5 7h5.5M11.5 17h5.5" stroke="currentColor" stroke-width="1.75" stroke-linecap="round"></path></svg><span class="truncate">Providers</span></a><a class="flex items-center gap-1.5 rounded-lg px-2 py-1.5 text-[11.5px] font-medium transition-all truncate text-text-muted hover:bg-surface-2/70 hover:text-text-main border border-transparent" title="Endpoint" href="/dashboard/endpoint"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="text-[13px] shrink-0 text-text-muted" style="display:inline-block;vertical-align:middle;flex-shrink:0" aria-hidden="true" data-icon="vpn_key"><circle cx="8" cy="12" r="4.5" fill="currentColor" fill-opacity="0.14" stroke="currentColor" stroke-width="1.75"></circle><circle cx="7.5" cy="12" r="1.2" fill="currentColor"></circle><path d="M12.5 12H21m-2.5 0v3m-3-3v2.2" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="truncate">Endpoint</span></a></div></div><div class="space-y-1"><div class="flex items-center justify-between px-2 py-0.5"><span class="sidebar-section-caption text-text-muted">Console Menu</span><span class="text-[10px] font-mono text-text-subtle">Accordion</span></div><div class="rounded-lg transition-colors"><button type="button" class="w-full flex items-center gap-2.5 px-2.5 py-2 rounded-lg text-left transition-all cursor-pointer group bg-surface-2 text-text-main font-semibold shadow-2xs border border-border" aria-expanded="true" title="Core &amp; Gateway"><span class="inline-flex size-6 shrink-0 items-center justify-center rounded-md border transition-colors border-primary/30 bg-primary/10 text-primary"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="text-[14px]" style="display:inline-block;vertical-align:middle;flex-shrink:0" aria-hidden="true" data-icon="dashboard"><rect x="3" y="3" width="7.5" height="7.5" rx="2" fill="currentColor" fill-opacity="0.16" stroke="currentColor" stroke-width="1.75"></rect><rect x="13.5" y="3" width="7.5" height="7.5" rx="2" stroke="currentColor" stroke-width="1.75"></rect><rect x="3" y="13.5" width="7.5" height="7.5" rx="2" stroke="currentColor" stroke-width="1.75"></rect><rect x="13.5" y="13.5" width="7.5" height="7.5" rx="2" fill="currentColor" fill-opacity="0.16" stroke="currentColor" stroke-width="1.75"></rect></svg></span><span class="text-[13px] tracking-tight flex-1 truncate">Core &amp; Gateway</span><span class="nav-section-count">5</span><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[13px] text-text-muted/80 transition-transform duration-150 shrink-0" style="transform:rotate(0deg)" aria-hidden="true" data-icon="expand_more"><path d="M216.49,104.49l-80,80a12,12,0,0,1-17,0l-80-80a12,12,0,0,1,17-17L128,159l71.51-71.52a12,12,0,0,1,17,17Z"></path></svg></button><div class="mt-1 ml-3.5 pl-2.5 border-l border-border space-y-0.5 py-0.5"><a class="nav-item group py-1.5 min-h-[33px]" title="Overview" href="/dashboard"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="shrink-0 transition-transform duration-150 group-hover:scale-105 text-[15px] text-text-muted group-hover:text-primary transition-colors" style="display:inline-block;vertical-align:middle;flex-shrink:0" aria-hidden="true" data-icon="dashboard"><rect x="3" y="3" width="7.5" height="7.5" rx="2" fill="currentColor" fill-opacity="0.16" stroke="currentColor" stroke-width="1.75"></rect><rect x="13.5" y="3" width="7.5" height="7.5" rx="2" stroke="currentColor" stroke-width="1.75"></rect><rect x="3" y="13.5" width="7.5" height="7.5" rx="2" stroke="currentColor" stroke-width="1.75"></rect><rect x="13.5" y="13.5" width="7.5" height="7.5" rx="2" fill="currentColor" fill-opacity="0.16" stroke="currentColor" stroke-width="1.75"></rect></svg><span class="truncate text-[12.5px] flex-1">Overview</span></a><a class="nav-item group py-1.5 min-h-[33px]" title="Endpoint &amp; Key" href="/dashboard/endpoint"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="shrink-0 transition-transform duration-150 group-hover:scale-105 text-[15px] text-text-muted group-hover:text-primary transition-colors" style="display:inline-block;vertical-align:middle;flex-shrink:0" aria-hidden="true" data-icon="vpn_key"><circle cx="8" cy="12" r="4.5" fill="currentColor" fill-opacity="0.14" stroke="currentColor" stroke-width="1.75"></circle><circle cx="7.5" cy="12" r="1.2" fill="currentColor"></circle><path d="M12.5 12H21m-2.5 0v3m-3-3v2.2" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="truncate text-[12.5px] flex-1">Endpoint &amp; Key</span></a><a class="nav-item group py-1.5 min-h-[33px]" title="Providers" href="/dashboard/providers"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="shrink-0 transition-transform duration-150 group-hover:scale-105 text-[15px] text-text-muted group-hover:text-primary transition-colors" style="display:inline-block;vertical-align:middle;flex-shrink:0" aria-hidden="true" data-icon="dns"><rect x="3" y="3.5" width="18" height="7" rx="2" fill="currentColor" fill-opacity="0.14" stroke="currentColor" stroke-width="1.75"></rect><rect x="3" y="13.5" width="18" height="7" rx="2" stroke="currentColor" stroke-width="1.75"></rect><circle cx="7" cy="7" r="1.1" fill="currentColor"></circle><circle cx="7" cy="17" r="1.1" fill="currentColor"></circle><path d="M11.5 7h5.5M11.5 17h5.5" stroke="currentColor" stroke-width="1.75" stroke-linecap="round"></path></svg><span class="truncate text-[12.5px] flex-1">Providers</span></a><a class="nav-item group py-1.5 min-h-[33px]" title="Health" href="/dashboard/health"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="shrink-0 transition-transform duration-150 group-hover:scale-105 text-[15px] text-text-muted group-hover:text-primary transition-colors" style="display:inline-block;vertical-align:middle;flex-shrink:0" aria-hidden="true" data-icon="ecg_heart"><rect x="2.75" y="4" width="18.5" height="16" rx="3" fill="currentColor" fill-opacity="0.1" stroke="currentColor" stroke-width="1.75"></rect><path d="M5.5 12h3l2-4 3 8 2-4h3" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="truncate text-[12.5px] flex-1">Health</span></a><a class="nav-item group py-1.5 min-h-[33px]" title="Runtime" href="/dashboard/runtime"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="shrink-0 transition-transform duration-150 group-hover:scale-105 text-[15px] text-text-muted group-hover:text-primary transition-colors" style="display:inline-block;vertical-align:middle;flex-shrink:0" aria-hidden="true" data-icon="memory"><rect x="6" y="6" width="12" height="12" rx="2.2" fill="currentColor" fill-opacity="0.14" stroke="currentColor" stroke-width="1.75"></rect><rect x="9.25" y="9.25" width="5.5" height="5.5" rx="1" stroke="currentColor" stroke-width="1.5"></rect><path d="M9 3v3m6-3v3M9 18v3m6-3v3M3 9h3m-3 6h3m12-6h3m-3 6h3" stroke="currentColor" stroke-width="1.75" stroke-linecap="round"></path></svg><span class="truncate text-[12.5px] flex-1">Runtime</span></a></div></div><div class="rounded-lg transition-colors"><button type="button" class="w-full flex items-center gap-2.5 px-2.5 py-2 rounded-lg text-left transition-all cursor-pointer group text-text-muted hover:bg-surface-2/60 hover:text-text-main border border-transparent" aria-expanded="false" title="Usage &amp; Analytics"><span class="inline-flex size-6 shrink-0 items-center justify-center rounded-md border transition-colors border-border-subtle bg-surface text-text-muted group-hover:text-text-main"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="text-[14px]" style="display:inline-block;vertical-align:middle;flex-shrink:0" aria-hidden="true" data-icon="bar_chart"><rect x="3.5" y="12.5" width="4" height="7.5" rx="1.2" stroke="currentColor" stroke-width="1.75"></rect><rect x="10" y="8" width="4" height="12" rx="1.2" fill="currentColor" fill-opacity="0.18" stroke="currentColor" stroke-width="1.75"></rect><rect x="16.5" y="4" width="4" height="16" rx="1.2" stroke="currentColor" stroke-width="1.75"></rect></svg></span><span class="text-[13px] tracking-tight flex-1 truncate">Usage &amp; Analytics</span><span class="nav-section-count">6</span><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[13px] text-text-muted/80 transition-transform duration-150 shrink-0" style="transform:rotate(-90deg)" aria-hidden="true" data-icon="expand_more"><path d="M216.49,104.49l-80,80a12,12,0,0,1-17,0l-80-80a12,12,0,0,1,17-17L128,159l71.51-71.52a12,12,0,0,1,17,17Z"></path></svg></button></div><div class="rounded-lg transition-colors"><button type="button" class="w-full flex items-center gap-2.5 px-2.5 py-2 rounded-lg text-left transition-all cursor-pointer group bg-surface-2/60 text-text-main font-semibold border border-border-subtle" aria-expanded="false" title="Routing &amp; Config"><span class="inline-flex size-6 shrink-0 items-center justify-center rounded-md border transition-colors border-primary/30 bg-primary/10 text-primary"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[14px]" aria-hidden="true" data-icon="tune"><path d="M176,80a8,8,0,0,1,8-8h32a8,8,0,0,1,0,16H184A8,8,0,0,1,176,80ZM40,88H144v16a8,8,0,0,0,16,0V56a8,8,0,0,0-16,0V72H40a8,8,0,0,0,0,16Zm176,80H120a8,8,0,0,0,0,16h96a8,8,0,0,0,0-16ZM88,144a8,8,0,0,0-8,8v16H40a8,8,0,0,0,0,16H80v16a8,8,0,0,0,16,0V152A8,8,0,0,0,88,144Z"></path></svg></span><span class="text-[13px] tracking-tight flex-1 truncate">Routing &amp; Config</span><span class="size-1.5 rounded-full bg-primary shrink-0" title="Active page in section"></span><span class="nav-section-count">8</span><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[13px] text-text-muted/80 transition-transform duration-150 shrink-0" style="transform:rotate(-90deg)" aria-hidden="true" data-icon="expand_more"><path d="M216.49,104.49l-80,80a12,12,0,0,1-17,0l-80-80a12,12,0,0,1,17-17L128,159l71.51-71.52a12,12,0,0,1,17,17Z"></path></svg></button></div><div class="rounded-lg transition-colors"><button type="button" class="w-full flex items-center gap-2.5 px-2.5 py-2 rounded-lg text-left transition-all cursor-pointer group text-text-muted hover:bg-surface-2/60 hover:text-text-main border border-transparent" aria-expanded="false" title="Workspace Tools"><span class="inline-flex size-6 shrink-0 items-center justify-center rounded-md border transition-colors border-border-subtle bg-surface text-text-muted group-hover:text-text-main"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="text-[14px]" style="display:inline-block;vertical-align:middle;flex-shrink:0" aria-hidden="true" data-icon="terminal"><rect x="2.75" y="4" width="18.5" height="16" rx="2.75" fill="currentColor" fill-opacity="0.12" stroke="currentColor" stroke-width="1.75"></rect><path d="m7 9.5 3 2.5-3 2.5m5.5 0H16" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"></path></svg></span><span class="text-[13px] tracking-tight flex-1 truncate">Workspace Tools</span><span class="nav-section-count">6</span><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[13px] text-text-muted/80 transition-transform duration-150 shrink-0" style="transform:rotate(-90deg)" aria-hidden="true" data-icon="expand_more"><path d="M216.49,104.49l-80,80a12,12,0,0,1-17,0l-80-80a12,12,0,0,1,17-17L128,159l71.51-71.52a12,12,0,0,1,17,17Z"></path></svg></button></div><div class="rounded-lg transition-colors"><button type="button" class="w-full flex items-center gap-2.5 px-2.5 py-2 rounded-lg text-left transition-all cursor-pointer group text-text-muted hover:bg-surface-2/60 hover:text-text-main border border-transparent" aria-expanded="false" title="Integrations &amp; API"><span class="inline-flex size-6 shrink-0 items-center justify-center rounded-md border transition-colors border-border-subtle bg-surface text-text-muted group-hover:text-text-main"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="text-[14px]" style="display:inline-block;vertical-align:middle;flex-shrink:0" aria-hidden="true" data-icon="cable"><path d="M7.5 6.5v4a3 3 0 0 0 3 3h3a3 3 0 0 0 3-3v-4" fill="currentColor" fill-opacity="0.14" stroke="currentColor" stroke-width="1.75" stroke-linejoin="round"></path><path d="M9.5 3.5v3m5-3v3M12 13.5v7" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"></path></svg></span><span class="text-[13px] tracking-tight flex-1 truncate">Integrations &amp; API</span><span class="nav-section-count">5</span><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[13px] text-text-muted/80 transition-transform duration-150 shrink-0" style="transform:rotate(-90deg)" aria-hidden="true" data-icon="expand_more"><path d="M216.49,104.49l-80,80a12,12,0,0,1-17,0l-80-80a12,12,0,0,1,17-17L128,159l71.51-71.52a12,12,0,0,1,17,17Z"></path></svg></button></div><div class="rounded-lg transition-colors"><button type="button" class="w-full flex items-center gap-2.5 px-2.5 py-2 rounded-lg text-left transition-all cursor-pointer group text-text-muted hover:bg-surface-2/60 hover:text-text-main border border-transparent" aria-expanded="false" title="Agents &amp; Skills"><span class="inline-flex size-6 shrink-0 items-center justify-center rounded-md border transition-colors border-border-subtle bg-surface text-text-muted group-hover:text-text-main"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[14px]" aria-hidden="true" data-icon="smart_toy"><path d="M200,48H136V16a8,8,0,0,0-16,0V48H56A32,32,0,0,0,24,80V192a32,32,0,0,0,32,32H200a32,32,0,0,0,32-32V80A32,32,0,0,0,200,48Zm16,144a16,16,0,0,1-16,16H56a16,16,0,0,1-16-16V80A16,16,0,0,1,56,64H200a16,16,0,0,1,16,16Zm-52-56H92a28,28,0,0,0,0,56h72a28,28,0,0,0,0-56Zm-24,16v24H116V152ZM80,164a12,12,0,0,1,12-12h8v24H92A12,12,0,0,1,80,164Zm84,12h-8V152h8a12,12,0,0,1,0,24ZM72,108a12,12,0,1,1,12,12A12,12,0,0,1,72,108Zm88,0a12,12,0,1,1,12,12A12,12,0,0,1,160,108Z"></path></svg></span><span class="text-[13px] tracking-tight flex-1 truncate">Agents &amp; Skills</span><span class="nav-section-count">5</span><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[13px] text-text-muted/80 transition-transform duration-150 shrink-0" style="transform:rotate(-90deg)" aria-hidden="true" data-icon="expand_more"><path d="M216.49,104.49l-80,80a12,12,0,0,1-17,0l-80-80a12,12,0,0,1,17-17L128,159l71.51-71.52a12,12,0,0,1,17,17Z"></path></svg></button></div><div class="rounded-lg transition-colors"><button type="button" class="w-full flex items-center gap-2.5 px-2.5 py-2 rounded-lg text-left transition-all cursor-pointer group text-text-muted hover:bg-surface-2/60 hover:text-text-main border border-transparent" aria-expanded="false" title="System &amp; Media"><span class="inline-flex size-6 shrink-0 items-center justify-center rounded-md border transition-colors border-border-subtle bg-surface text-text-muted group-hover:text-text-main"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[14px]" aria-hidden="true" data-icon="settings"><path d="M128,80a48,48,0,1,0,48,48A48.05,48.05,0,0,0,128,80Zm0,80a32,32,0,1,1,32-32A32,32,0,0,1,128,160Zm109.94-52.79a8,8,0,0,0-3.89-5.4l-29.83-17-.12-33.62a8,8,0,0,0-2.83-6.08,111.91,111.91,0,0,0-36.72-20.67,8,8,0,0,0-6.46.59L128,41.85,97.88,25a8,8,0,0,0-6.47-.6A112.1,112.1,0,0,0,54.73,45.15a8,8,0,0,0-2.83,6.07l-.15,33.65-29.83,17a8,8,0,0,0-3.89,5.4,106.47,106.47,0,0,0,0,41.56,8,8,0,0,0,3.89,5.4l29.83,17,.12,33.62a8,8,0,0,0,2.83,6.08,111.91,111.91,0,0,0,36.72,20.67,8,8,0,0,0,6.46-.59L128,214.15,158.12,231a7.91,7.91,0,0,0,3.9,1,8.09,8.09,0,0,0,2.57-.42,112.1,112.1,0,0,0,36.68-20.73,8,8,0,0,0,2.83-6.07l.15-33.65,29.83-17a8,8,0,0,0,3.89-5.4A106.47,106.47,0,0,0,237.94,107.21Zm-15,34.91-28.57,16.25a8,8,0,0,0-3,3c-.58,1-1.19,2.06-1.81,3.06a7.94,7.94,0,0,0-1.22,4.21l-.15,32.25a95.89,95.89,0,0,1-25.37,14.3L134,199.13a8,8,0,0,0-3.91-1h-.19c-1.21,0-2.43,0-3.64,0a8.08,8.08,0,0,0-4.1,1l-28.84,16.1A96,96,0,0,1,67.88,201l-.11-32.2a8,8,0,0,0-1.22-4.22c-.62-1-1.23-2-1.8-3.06a8.09,8.09,0,0,0-3-3.06l-28.6-16.29a90.49,90.49,0,0,1,0-28.26L61.67,97.63a8,8,0,0,0,3-3c.58-1,1.19-2.06,1.81-3.06a7.94,7.94,0,0,0,1.22-4.21l.15-32.25a95.89,95.89,0,0,1,25.37-14.3L122,56.87a8,8,0,0,0,4.1,1c1.21,0,2.43,0,3.64,0a8.08,8.08,0,0,0,4.1-1l28.84-16.1A96,96,0,0,1,188.12,55l.11,32.2a8,8,0,0,0,1.22,4.22c.62,1,1.23,2,1.8,3.06a8.09,8.09,0,0,0,3,3.06l28.6,16.29A90.49,90.49,0,0,1,222.9,142.12Z"></path></svg></span><span class="text-[13px] tracking-tight flex-1 truncate">System &amp; Media</span><span class="nav-section-count">4</span><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[13px] text-text-muted/80 transition-transform duration-150 shrink-0" style="transform:rotate(-90deg)" aria-hidden="true" data-icon="expand_more"><path d="M216.49,104.49l-80,80a12,12,0,0,1-17,0l-80-80a12,12,0,0,1,17-17L128,159l71.51-71.52a12,12,0,0,1,17,17Z"></path></svg></button></div></div></nav><div class="border-t border-border-subtle px-3 py-2.5 flex items-center justify-between gap-2 bg-surface/40 mt-auto shrink-0"><a class="flex items-center gap-2 rounded-lg px-2.5 py-1.5 text-xs font-medium transition-colors flex-1 text-text-muted hover:bg-surface-2 hover:text-text-main" href="/dashboard/profile"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[14px]" aria-hidden="true" data-icon="settings"><path d="M128,80a48,48,0,1,0,48,48A48.05,48.05,0,0,0,128,80Zm0,80a32,32,0,1,1,32-32A32,32,0,0,1,128,160Zm109.94-52.79a8,8,0,0,0-3.89-5.4l-29.83-17-.12-33.62a8,8,0,0,0-2.83-6.08,111.91,111.91,0,0,0-36.72-20.67,8,8,0,0,0-6.46.59L128,41.85,97.88,25a8,8,0,0,0-6.47-.6A112.1,112.1,0,0,0,54.73,45.15a8,8,0,0,0-2.83,6.07l-.15,33.65-29.83,17a8,8,0,0,0-3.89,5.4,106.47,106.47,0,0,0,0,41.56,8,8,0,0,0,3.89,5.4l29.83,17,.12,33.62a8,8,0,0,0,2.83,6.08,111.91,111.91,0,0,0,36.72,20.67,8,8,0,0,0,6.46-.59L128,214.15,158.12,231a7.91,7.91,0,0,0,3.9,1,8.09,8.09,0,0,0,2.57-.42,112.1,112.1,0,0,0,36.68-20.73,8,8,0,0,0,2.83-6.07l.15-33.65,29.83-17a8,8,0,0,0,3.89-5.4A106.47,106.47,0,0,0,237.94,107.21Zm-15,34.91-28.57,16.25a8,8,0,0,0-3,3c-.58,1-1.19,2.06-1.81,3.06a7.94,7.94,0,0,0-1.22,4.21l-.15,32.25a95.89,95.89,0,0,1-25.37,14.3L134,199.13a8,8,0,0,0-3.91-1h-.19c-1.21,0-2.43,0-3.64,0a8.08,8.08,0,0,0-4.1,1l-28.84,16.1A96,96,0,0,1,67.88,201l-.11-32.2a8,8,0,0,0-1.22-4.22c-.62-1-1.23-2-1.8-3.06a8.09,8.09,0,0,0-3-3.06l-28.6-16.29a90.49,90.49,0,0,1,0-28.26L61.67,97.63a8,8,0,0,0,3-3c.58-1,1.19-2.06,1.81-3.06a7.94,7.94,0,0,0,1.22-4.21l.15-32.25a95.89,95.89,0,0,1,25.37-14.3L122,56.87a8,8,0,0,0,4.1,1c1.21,0,2.43,0,3.64,0a8.08,8.08,0,0,0,4.1-1l28.84-16.1A96,96,0,0,1,188.12,55l.11,32.2a8,8,0,0,0,1.22,4.22c.62,1,1.23,2,1.8,3.06a8.09,8.09,0,0,0,3,3.06l28.6,16.29A90.49,90.49,0,0,1,222.9,142.12Z"></path></svg><span>Settings</span></a><a class="inline-flex items-center gap-1.5 rounded-lg border border-border-subtle bg-surface px-2.5 py-1.5 text-[11px] font-mono text-text-muted hover:text-text-main transition-colors" title="System Health" href="/dashboard/health"><span class="status-dot status-dot-live"></span><span>Online</span></a></div></aside></div><div role="dialog" aria-modal="true" aria-label="Dashboard navigation" inert="" class="fixed inset-y-0 left-0 z-50 transform lg:hidden transition-transform duration-300 ease-in-out -translate-x-full"><aside class="sidebar-shell flex w-[256px] h-full flex-col transition-[width] duration-150"><div class="sidebar-brand flex flex-col gap-2 px-3.5 py-3"><div class="flex items-center gap-2.5"><a class="flex min-w-0 flex-1 items-center gap-2.5" title="MiawRouter dashboard" href="/dashboard"><div class="sidebar-brand-icon flex size-9 shrink-0 items-center justify-center overflow-hidden rounded-lg border border-border bg-surface shadow-xs"><img src="/miawrouter-favicon-32.png" data-brand-asset="icon" alt="" aria-hidden="true" class="size-full object-contain p-0.5"/></div><div class="sidebar-brand-copy flex min-w-0 flex-col"><div class="flex items-center gap-1.5"><h1 class="truncate text-[14.5px] font-bold tracking-tight text-text-main">MiawRouter Proxy</h1><span class="status-dot status-dot-live" title="Gateway Active"></span></div><span class="text-[10.5px] font-mono font-medium text-text-muted">V1.2.3<!-- --> · AI Router</span></div></a><button type="button" class="sidebar-collapse-toggle inline-flex size-8 shrink-0 items-center justify-center rounded-lg text-text-muted hover:bg-surface-2 hover:text-text-main" aria-label="Collapse sidebar" title="Collapse sidebar"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[15px]" aria-hidden="true" data-icon="chevron_left"><path d="M168.49,199.51a12,12,0,0,1-17,17l-80-80a12,12,0,0,1,0-17l80-80a12,12,0,0,1,17,17L97,128Z"></path></svg></button></div></div><label class="sidebar-search"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[15px] text-text-muted shrink-0" aria-hidden="true" data-icon="search"><path d="M232.49,215.51,185,168a92.12,92.12,0,1,0-17,17l47.53,47.54a12,12,0,0,0,17-17ZM44,112a68,68,0,1,1,68,68A68.07,68.07,0,0,1,44,112Z"></path></svg><input aria-label="Search navigation" placeholder="Jump to menu…" value=""/></label><div class="sidebar-endpoint-row"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="text-[14px] text-primary shrink-0" style="display:inline-block;vertical-align:middle;flex-shrink:0" aria-hidden="true" data-icon="hub"><circle cx="12" cy="12" r="3.25" fill="currentColor" fill-opacity="0.18" stroke="currentColor" stroke-width="1.75"></circle><circle cx="5" cy="6" r="2.25" stroke="currentColor" stroke-width="1.75"></circle><circle cx="19" cy="6" r="2.25" stroke="currentColor" stroke-width="1.75"></circle><circle cx="5" cy="18" r="2.25" stroke="currentColor" stroke-width="1.75"></circle><circle cx="19" cy="18" r="2.25" stroke="currentColor" stroke-width="1.75"></circle><path d="M6.8 7.5 9.6 9.9M17.2 7.5l-2.8 2.4M6.8 16.5l2.8-2.4M17.2 16.5l-2.8-2.4" stroke="currentColor" stroke-width="1.65" stroke-linecap="round"></path></svg><span class="sr-only">Local endpoint</span><code class="min-w-0 flex-1 truncate font-mono text-[11px] font-medium text-text-main" title=""></code><button type="button" disabled="" class="inline-flex size-6 shrink-0 items-center justify-center rounded-md text-text-muted transition-colors hover:bg-surface hover:text-primary disabled:opacity-50" aria-label="Copy local endpoint" title="Copy local endpoint"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[13px]" aria-hidden="true" data-icon="content_copy"><path d="M216,32H88a8,8,0,0,0-8,8V80H40a8,8,0,0,0-8,8V216a8,8,0,0,0,8,8H168a8,8,0,0,0,8-8V176h40a8,8,0,0,0,8-8V40A8,8,0,0,0,216,32ZM160,208H48V96H160Zm48-48H176V88a8,8,0,0,0-8-8H96V48H208Z"></path></svg></button></div><nav class="flex-1 px-2.5 py-2 space-y-1.5 overflow-y-auto custom-scrollbar"><div class="mb-2 rounded-xl border border-border bg-surface/70 p-1.5"><div class="flex items-center justify-between px-1.5 pb-1"><span class="text-[10px] font-mono font-semibold uppercase tracking-wider text-text-muted">Quick Access</span><span class="text-[10px] font-mono text-text-subtle">1-Click Hub</span></div><div class="grid grid-cols-2 gap-1"><a class="flex items-center gap-1.5 rounded-lg px-2 py-1.5 text-[11.5px] font-medium transition-all truncate text-text-muted hover:bg-surface-2/70 hover:text-text-main border border-transparent" title="Overview" href="/dashboard"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="text-[13px] shrink-0 text-text-muted" style="display:inline-block;vertical-align:middle;flex-shrink:0" aria-hidden="true" data-icon="dashboard"><rect x="3" y="3" width="7.5" height="7.5" rx="2" fill="currentColor" fill-opacity="0.16" stroke="currentColor" stroke-width="1.75"></rect><rect x="13.5" y="3" width="7.5" height="7.5" rx="2" stroke="currentColor" stroke-width="1.75"></rect><rect x="3" y="13.5" width="7.5" height="7.5" rx="2" stroke="currentColor" stroke-width="1.75"></rect><rect x="13.5" y="13.5" width="7.5" height="7.5" rx="2" fill="currentColor" fill-opacity="0.16" stroke="currentColor" stroke-width="1.75"></rect></svg><span class="truncate">Overview</span></a><a class="flex items-center gap-1.5 rounded-lg px-2 py-1.5 text-[11.5px] font-medium transition-all truncate text-text-muted hover:bg-surface-2/70 hover:text-text-main border border-transparent" title="Usage &amp; Routing" href="/dashboard/usage"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="text-[13px] shrink-0 text-text-muted" style="display:inline-block;vertical-align:middle;flex-shrink:0" aria-hidden="true" data-icon="bar_chart"><rect x="3.5" y="12.5" width="4" height="7.5" rx="1.2" stroke="currentColor" stroke-width="1.75"></rect><rect x="10" y="8" width="4" height="12" rx="1.2" fill="currentColor" fill-opacity="0.18" stroke="currentColor" stroke-width="1.75"></rect><rect x="16.5" y="4" width="4" height="16" rx="1.2" stroke="currentColor" stroke-width="1.75"></rect></svg><span class="truncate">Usage &amp; Routing</span></a><a class="flex items-center gap-1.5 rounded-lg px-2 py-1.5 text-[11.5px] font-medium transition-all truncate text-text-muted hover:bg-surface-2/70 hover:text-text-main border border-transparent" title="Providers" href="/dashboard/providers"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="text-[13px] shrink-0 text-text-muted" style="display:inline-block;vertical-align:middle;flex-shrink:0" aria-hidden="true" data-icon="dns"><rect x="3" y="3.5" width="18" height="7" rx="2" fill="currentColor" fill-opacity="0.14" stroke="currentColor" stroke-width="1.75"></rect><rect x="3" y="13.5" width="18" height="7" rx="2" stroke="currentColor" stroke-width="1.75"></rect><circle cx="7" cy="7" r="1.1" fill="currentColor"></circle><circle cx="7" cy="17" r="1.1" fill="currentColor"></circle><path d="M11.5 7h5.5M11.5 17h5.5" stroke="currentColor" stroke-width="1.75" stroke-linecap="round"></path></svg><span class="truncate">Providers</span></a><a class="flex items-center gap-1.5 rounded-lg px-2 py-1.5 text-[11.5px] font-medium transition-all truncate text-text-muted hover:bg-surface-2/70 hover:text-text-main border border-transparent" title="Endpoint" href="/dashboard/endpoint"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="text-[13px] shrink-0 text-text-muted" style="display:inline-block;vertical-align:middle;flex-shrink:0" aria-hidden="true" data-icon="vpn_key"><circle cx="8" cy="12" r="4.5" fill="currentColor" fill-opacity="0.14" stroke="currentColor" stroke-width="1.75"></circle><circle cx="7.5" cy="12" r="1.2" fill="currentColor"></circle><path d="M12.5 12H21m-2.5 0v3m-3-3v2.2" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="truncate">Endpoint</span></a></div></div><div class="space-y-1"><div class="flex items-center justify-between px-2 py-0.5"><span class="sidebar-section-caption text-text-muted">Console Menu</span><span class="text-[10px] font-mono text-text-subtle">Accordion</span></div><div class="rounded-lg transition-colors"><button type="button" class="w-full flex items-center gap-2.5 px-2.5 py-2 rounded-lg text-left transition-all cursor-pointer group bg-surface-2 text-text-main font-semibold shadow-2xs border border-border" aria-expanded="true" title="Core &amp; Gateway"><span class="inline-flex size-6 shrink-0 items-center justify-center rounded-md border transition-colors border-primary/30 bg-primary/10 text-primary"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="text-[14px]" style="display:inline-block;vertical-align:middle;flex-shrink:0" aria-hidden="true" data-icon="dashboard"><rect x="3" y="3" width="7.5" height="7.5" rx="2" fill="currentColor" fill-opacity="0.16" stroke="currentColor" stroke-width="1.75"></rect><rect x="13.5" y="3" width="7.5" height="7.5" rx="2" stroke="currentColor" stroke-width="1.75"></rect><rect x="3" y="13.5" width="7.5" height="7.5" rx="2" stroke="currentColor" stroke-width="1.75"></rect><rect x="13.5" y="13.5" width="7.5" height="7.5" rx="2" fill="currentColor" fill-opacity="0.16" stroke="currentColor" stroke-width="1.75"></rect></svg></span><span class="text-[13px] tracking-tight flex-1 truncate">Core &amp; Gateway</span><span class="nav-section-count">5</span><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[13px] text-text-muted/80 transition-transform duration-150 shrink-0" style="transform:rotate(0deg)" aria-hidden="true" data-icon="expand_more"><path d="M216.49,104.49l-80,80a12,12,0,0,1-17,0l-80-80a12,12,0,0,1,17-17L128,159l71.51-71.52a12,12,0,0,1,17,17Z"></path></svg></button><div class="mt-1 ml-3.5 pl-2.5 border-l border-border space-y-0.5 py-0.5"><a class="nav-item group py-1.5 min-h-[33px]" title="Overview" href="/dashboard"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="shrink-0 transition-transform duration-150 group-hover:scale-105 text-[15px] text-text-muted group-hover:text-primary transition-colors" style="display:inline-block;vertical-align:middle;flex-shrink:0" aria-hidden="true" data-icon="dashboard"><rect x="3" y="3" width="7.5" height="7.5" rx="2" fill="currentColor" fill-opacity="0.16" stroke="currentColor" stroke-width="1.75"></rect><rect x="13.5" y="3" width="7.5" height="7.5" rx="2" stroke="currentColor" stroke-width="1.75"></rect><rect x="3" y="13.5" width="7.5" height="7.5" rx="2" stroke="currentColor" stroke-width="1.75"></rect><rect x="13.5" y="13.5" width="7.5" height="7.5" rx="2" fill="currentColor" fill-opacity="0.16" stroke="currentColor" stroke-width="1.75"></rect></svg><span class="truncate text-[12.5px] flex-1">Overview</span></a><a class="nav-item group py-1.5 min-h-[33px]" title="Endpoint &amp; Key" href="/dashboard/endpoint"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="shrink-0 transition-transform duration-150 group-hover:scale-105 text-[15px] text-text-muted group-hover:text-primary transition-colors" style="display:inline-block;vertical-align:middle;flex-shrink:0" aria-hidden="true" data-icon="vpn_key"><circle cx="8" cy="12" r="4.5" fill="currentColor" fill-opacity="0.14" stroke="currentColor" stroke-width="1.75"></circle><circle cx="7.5" cy="12" r="1.2" fill="currentColor"></circle><path d="M12.5 12H21m-2.5 0v3m-3-3v2.2" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="truncate text-[12.5px] flex-1">Endpoint &amp; Key</span></a><a class="nav-item group py-1.5 min-h-[33px]" title="Providers" href="/dashboard/providers"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="shrink-0 transition-transform duration-150 group-hover:scale-105 text-[15px] text-text-muted group-hover:text-primary transition-colors" style="display:inline-block;vertical-align:middle;flex-shrink:0" aria-hidden="true" data-icon="dns"><rect x="3" y="3.5" width="18" height="7" rx="2" fill="currentColor" fill-opacity="0.14" stroke="currentColor" stroke-width="1.75"></rect><rect x="3" y="13.5" width="18" height="7" rx="2" stroke="currentColor" stroke-width="1.75"></rect><circle cx="7" cy="7" r="1.1" fill="currentColor"></circle><circle cx="7" cy="17" r="1.1" fill="currentColor"></circle><path d="M11.5 7h5.5M11.5 17h5.5" stroke="currentColor" stroke-width="1.75" stroke-linecap="round"></path></svg><span class="truncate text-[12.5px] flex-1">Providers</span></a><a class="nav-item group py-1.5 min-h-[33px]" title="Health" href="/dashboard/health"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="shrink-0 transition-transform duration-150 group-hover:scale-105 text-[15px] text-text-muted group-hover:text-primary transition-colors" style="display:inline-block;vertical-align:middle;flex-shrink:0" aria-hidden="true" data-icon="ecg_heart"><rect x="2.75" y="4" width="18.5" height="16" rx="3" fill="currentColor" fill-opacity="0.1" stroke="currentColor" stroke-width="1.75"></rect><path d="M5.5 12h3l2-4 3 8 2-4h3" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="truncate text-[12.5px] flex-1">Health</span></a><a class="nav-item group py-1.5 min-h-[33px]" title="Runtime" href="/dashboard/runtime"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="shrink-0 transition-transform duration-150 group-hover:scale-105 text-[15px] text-text-muted group-hover:text-primary transition-colors" style="display:inline-block;vertical-align:middle;flex-shrink:0" aria-hidden="true" data-icon="memory"><rect x="6" y="6" width="12" height="12" rx="2.2" fill="currentColor" fill-opacity="0.14" stroke="currentColor" stroke-width="1.75"></rect><rect x="9.25" y="9.25" width="5.5" height="5.5" rx="1" stroke="currentColor" stroke-width="1.5"></rect><path d="M9 3v3m6-3v3M9 18v3m6-3v3M3 9h3m-3 6h3m12-6h3m-3 6h3" stroke="currentColor" stroke-width="1.75" stroke-linecap="round"></path></svg><span class="truncate text-[12.5px] flex-1">Runtime</span></a></div></div><div class="rounded-lg transition-colors"><button type="button" class="w-full flex items-center gap-2.5 px-2.5 py-2 rounded-lg text-left transition-all cursor-pointer group text-text-muted hover:bg-surface-2/60 hover:text-text-main border border-transparent" aria-expanded="false" title="Usage &amp; Analytics"><span class="inline-flex size-6 shrink-0 items-center justify-center rounded-md border transition-colors border-border-subtle bg-surface text-text-muted group-hover:text-text-main"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="text-[14px]" style="display:inline-block;vertical-align:middle;flex-shrink:0" aria-hidden="true" data-icon="bar_chart"><rect x="3.5" y="12.5" width="4" height="7.5" rx="1.2" stroke="currentColor" stroke-width="1.75"></rect><rect x="10" y="8" width="4" height="12" rx="1.2" fill="currentColor" fill-opacity="0.18" stroke="currentColor" stroke-width="1.75"></rect><rect x="16.5" y="4" width="4" height="16" rx="1.2" stroke="currentColor" stroke-width="1.75"></rect></svg></span><span class="text-[13px] tracking-tight flex-1 truncate">Usage &amp; Analytics</span><span class="nav-section-count">6</span><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[13px] text-text-muted/80 transition-transform duration-150 shrink-0" style="transform:rotate(-90deg)" aria-hidden="true" data-icon="expand_more"><path d="M216.49,104.49l-80,80a12,12,0,0,1-17,0l-80-80a12,12,0,0,1,17-17L128,159l71.51-71.52a12,12,0,0,1,17,17Z"></path></svg></button></div><div class="rounded-lg transition-colors"><button type="button" class="w-full flex items-center gap-2.5 px-2.5 py-2 rounded-lg text-left transition-all cursor-pointer group bg-surface-2/60 text-text-main font-semibold border border-border-subtle" aria-expanded="false" title="Routing &amp; Config"><span class="inline-flex size-6 shrink-0 items-center justify-center rounded-md border transition-colors border-primary/30 bg-primary/10 text-primary"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[14px]" aria-hidden="true" data-icon="tune"><path d="M176,80a8,8,0,0,1,8-8h32a8,8,0,0,1,0,16H184A8,8,0,0,1,176,80ZM40,88H144v16a8,8,0,0,0,16,0V56a8,8,0,0,0-16,0V72H40a8,8,0,0,0,0,16Zm176,80H120a8,8,0,0,0,0,16h96a8,8,0,0,0,0-16ZM88,144a8,8,0,0,0-8,8v16H40a8,8,0,0,0,0,16H80v16a8,8,0,0,0,16,0V152A8,8,0,0,0,88,144Z"></path></svg></span><span class="text-[13px] tracking-tight flex-1 truncate">Routing &amp; Config</span><span class="size-1.5 rounded-full bg-primary shrink-0" title="Active page in section"></span><span class="nav-section-count">8</span><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[13px] text-text-muted/80 transition-transform duration-150 shrink-0" style="transform:rotate(-90deg)" aria-hidden="true" data-icon="expand_more"><path d="M216.49,104.49l-80,80a12,12,0,0,1-17,0l-80-80a12,12,0,0,1,17-17L128,159l71.51-71.52a12,12,0,0,1,17,17Z"></path></svg></button></div><div class="rounded-lg transition-colors"><button type="button" class="w-full flex items-center gap-2.5 px-2.5 py-2 rounded-lg text-left transition-all cursor-pointer group text-text-muted hover:bg-surface-2/60 hover:text-text-main border border-transparent" aria-expanded="false" title="Workspace Tools"><span class="inline-flex size-6 shrink-0 items-center justify-center rounded-md border transition-colors border-border-subtle bg-surface text-text-muted group-hover:text-text-main"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="text-[14px]" style="display:inline-block;vertical-align:middle;flex-shrink:0" aria-hidden="true" data-icon="terminal"><rect x="2.75" y="4" width="18.5" height="16" rx="2.75" fill="currentColor" fill-opacity="0.12" stroke="currentColor" stroke-width="1.75"></rect><path d="m7 9.5 3 2.5-3 2.5m5.5 0H16" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"></path></svg></span><span class="text-[13px] tracking-tight flex-1 truncate">Workspace Tools</span><span class="nav-section-count">6</span><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[13px] text-text-muted/80 transition-transform duration-150 shrink-0" style="transform:rotate(-90deg)" aria-hidden="true" data-icon="expand_more"><path d="M216.49,104.49l-80,80a12,12,0,0,1-17,0l-80-80a12,12,0,0,1,17-17L128,159l71.51-71.52a12,12,0,0,1,17,17Z"></path></svg></button></div><div class="rounded-lg transition-colors"><button type="button" class="w-full flex items-center gap-2.5 px-2.5 py-2 rounded-lg text-left transition-all cursor-pointer group text-text-muted hover:bg-surface-2/60 hover:text-text-main border border-transparent" aria-expanded="false" title="Integrations &amp; API"><span class="inline-flex size-6 shrink-0 items-center justify-center rounded-md border transition-colors border-border-subtle bg-surface text-text-muted group-hover:text-text-main"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="text-[14px]" style="display:inline-block;vertical-align:middle;flex-shrink:0" aria-hidden="true" data-icon="cable"><path d="M7.5 6.5v4a3 3 0 0 0 3 3h3a3 3 0 0 0 3-3v-4" fill="currentColor" fill-opacity="0.14" stroke="currentColor" stroke-width="1.75" stroke-linejoin="round"></path><path d="M9.5 3.5v3m5-3v3M12 13.5v7" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"></path></svg></span><span class="text-[13px] tracking-tight flex-1 truncate">Integrations &amp; API</span><span class="nav-section-count">5</span><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[13px] text-text-muted/80 transition-transform duration-150 shrink-0" style="transform:rotate(-90deg)" aria-hidden="true" data-icon="expand_more"><path d="M216.49,104.49l-80,80a12,12,0,0,1-17,0l-80-80a12,12,0,0,1,17-17L128,159l71.51-71.52a12,12,0,0,1,17,17Z"></path></svg></button></div><div class="rounded-lg transition-colors"><button type="button" class="w-full flex items-center gap-2.5 px-2.5 py-2 rounded-lg text-left transition-all cursor-pointer group text-text-muted hover:bg-surface-2/60 hover:text-text-main border border-transparent" aria-expanded="false" title="Agents &amp; Skills"><span class="inline-flex size-6 shrink-0 items-center justify-center rounded-md border transition-colors border-border-subtle bg-surface text-text-muted group-hover:text-text-main"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[14px]" aria-hidden="true" data-icon="smart_toy"><path d="M200,48H136V16a8,8,0,0,0-16,0V48H56A32,32,0,0,0,24,80V192a32,32,0,0,0,32,32H200a32,32,0,0,0,32-32V80A32,32,0,0,0,200,48Zm16,144a16,16,0,0,1-16,16H56a16,16,0,0,1-16-16V80A16,16,0,0,1,56,64H200a16,16,0,0,1,16,16Zm-52-56H92a28,28,0,0,0,0,56h72a28,28,0,0,0,0-56Zm-24,16v24H116V152ZM80,164a12,12,0,0,1,12-12h8v24H92A12,12,0,0,1,80,164Zm84,12h-8V152h8a12,12,0,0,1,0,24ZM72,108a12,12,0,1,1,12,12A12,12,0,0,1,72,108Zm88,0a12,12,0,1,1,12,12A12,12,0,0,1,160,108Z"></path></svg></span><span class="text-[13px] tracking-tight flex-1 truncate">Agents &amp; Skills</span><span class="nav-section-count">5</span><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[13px] text-text-muted/80 transition-transform duration-150 shrink-0" style="transform:rotate(-90deg)" aria-hidden="true" data-icon="expand_more"><path d="M216.49,104.49l-80,80a12,12,0,0,1-17,0l-80-80a12,12,0,0,1,17-17L128,159l71.51-71.52a12,12,0,0,1,17,17Z"></path></svg></button></div><div class="rounded-lg transition-colors"><button type="button" class="w-full flex items-center gap-2.5 px-2.5 py-2 rounded-lg text-left transition-all cursor-pointer group text-text-muted hover:bg-surface-2/60 hover:text-text-main border border-transparent" aria-expanded="false" title="System &amp; Media"><span class="inline-flex size-6 shrink-0 items-center justify-center rounded-md border transition-colors border-border-subtle bg-surface text-text-muted group-hover:text-text-main"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[14px]" aria-hidden="true" data-icon="settings"><path d="M128,80a48,48,0,1,0,48,48A48.05,48.05,0,0,0,128,80Zm0,80a32,32,0,1,1,32-32A32,32,0,0,1,128,160Zm109.94-52.79a8,8,0,0,0-3.89-5.4l-29.83-17-.12-33.62a8,8,0,0,0-2.83-6.08,111.91,111.91,0,0,0-36.72-20.67,8,8,0,0,0-6.46.59L128,41.85,97.88,25a8,8,0,0,0-6.47-.6A112.1,112.1,0,0,0,54.73,45.15a8,8,0,0,0-2.83,6.07l-.15,33.65-29.83,17a8,8,0,0,0-3.89,5.4,106.47,106.47,0,0,0,0,41.56,8,8,0,0,0,3.89,5.4l29.83,17,.12,33.62a8,8,0,0,0,2.83,6.08,111.91,111.91,0,0,0,36.72,20.67,8,8,0,0,0,6.46-.59L128,214.15,158.12,231a7.91,7.91,0,0,0,3.9,1,8.09,8.09,0,0,0,2.57-.42,112.1,112.1,0,0,0,36.68-20.73,8,8,0,0,0,2.83-6.07l.15-33.65,29.83-17a8,8,0,0,0,3.89-5.4A106.47,106.47,0,0,0,237.94,107.21Zm-15,34.91-28.57,16.25a8,8,0,0,0-3,3c-.58,1-1.19,2.06-1.81,3.06a7.94,7.94,0,0,0-1.22,4.21l-.15,32.25a95.89,95.89,0,0,1-25.37,14.3L134,199.13a8,8,0,0,0-3.91-1h-.19c-1.21,0-2.43,0-3.64,0a8.08,8.08,0,0,0-4.1,1l-28.84,16.1A96,96,0,0,1,67.88,201l-.11-32.2a8,8,0,0,0-1.22-4.22c-.62-1-1.23-2-1.8-3.06a8.09,8.09,0,0,0-3-3.06l-28.6-16.29a90.49,90.49,0,0,1,0-28.26L61.67,97.63a8,8,0,0,0,3-3c.58-1,1.19-2.06,1.81-3.06a7.94,7.94,0,0,0,1.22-4.21l.15-32.25a95.89,95.89,0,0,1,25.37-14.3L122,56.87a8,8,0,0,0,4.1,1c1.21,0,2.43,0,3.64,0a8.08,8.08,0,0,0,4.1-1l28.84-16.1A96,96,0,0,1,188.12,55l.11,32.2a8,8,0,0,0,1.22,4.22c.62,1,1.23,2,1.8,3.06a8.09,8.09,0,0,0,3,3.06l28.6,16.29A90.49,90.49,0,0,1,222.9,142.12Z"></path></svg></span><span class="text-[13px] tracking-tight flex-1 truncate">System &amp; Media</span><span class="nav-section-count">4</span><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[13px] text-text-muted/80 transition-transform duration-150 shrink-0" style="transform:rotate(-90deg)" aria-hidden="true" data-icon="expand_more"><path d="M216.49,104.49l-80,80a12,12,0,0,1-17,0l-80-80a12,12,0,0,1,17-17L128,159l71.51-71.52a12,12,0,0,1,17,17Z"></path></svg></button></div></div></nav><div class="border-t border-border-subtle px-3 py-2.5 flex items-center justify-between gap-2 bg-surface/40 mt-auto shrink-0"><a class="flex items-center gap-2 rounded-lg px-2.5 py-1.5 text-xs font-medium transition-colors flex-1 text-text-muted hover:bg-surface-2 hover:text-text-main" href="/dashboard/profile"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[14px]" aria-hidden="true" data-icon="settings"><path d="M128,80a48,48,0,1,0,48,48A48.05,48.05,0,0,0,128,80Zm0,80a32,32,0,1,1,32-32A32,32,0,0,1,128,160Zm109.94-52.79a8,8,0,0,0-3.89-5.4l-29.83-17-.12-33.62a8,8,0,0,0-2.83-6.08,111.91,111.91,0,0,0-36.72-20.67,8,8,0,0,0-6.46.59L128,41.85,97.88,25a8,8,0,0,0-6.47-.6A112.1,112.1,0,0,0,54.73,45.15a8,8,0,0,0-2.83,6.07l-.15,33.65-29.83,17a8,8,0,0,0-3.89,5.4,106.47,106.47,0,0,0,0,41.56,8,8,0,0,0,3.89,5.4l29.83,17,.12,33.62a8,8,0,0,0,2.83,6.08,111.91,111.91,0,0,0,36.72,20.67,8,8,0,0,0,6.46-.59L128,214.15,158.12,231a7.91,7.91,0,0,0,3.9,1,8.09,8.09,0,0,0,2.57-.42,112.1,112.1,0,0,0,36.68-20.73,8,8,0,0,0,2.83-6.07l.15-33.65,29.83-17a8,8,0,0,0,3.89-5.4A106.47,106.47,0,0,0,237.94,107.21Zm-15,34.91-28.57,16.25a8,8,0,0,0-3,3c-.58,1-1.19,2.06-1.81,3.06a7.94,7.94,0,0,0-1.22,4.21l-.15,32.25a95.89,95.89,0,0,1-25.37,14.3L134,199.13a8,8,0,0,0-3.91-1h-.19c-1.21,0-2.43,0-3.64,0a8.08,8.08,0,0,0-4.1,1l-28.84,16.1A96,96,0,0,1,67.88,201l-.11-32.2a8,8,0,0,0-1.22-4.22c-.62-1-1.23-2-1.8-3.06a8.09,8.09,0,0,0-3-3.06l-28.6-16.29a90.49,90.49,0,0,1,0-28.26L61.67,97.63a8,8,0,0,0,3-3c.58-1,1.19-2.06,1.81-3.06a7.94,7.94,0,0,0,1.22-4.21l.15-32.25a95.89,95.89,0,0,1,25.37-14.3L122,56.87a8,8,0,0,0,4.1,1c1.21,0,2.43,0,3.64,0a8.08,8.08,0,0,0,4.1-1l28.84-16.1A96,96,0,0,1,188.12,55l.11,32.2a8,8,0,0,0,1.22,4.22c.62,1,1.23,2,1.8,3.06a8.09,8.09,0,0,0,3,3.06l28.6,16.29A90.49,90.49,0,0,1,222.9,142.12Z"></path></svg><span>Settings</span></a><a class="inline-flex items-center gap-1.5 rounded-lg border border-border-subtle bg-surface px-2.5 py-1.5 text-[11px] font-mono text-text-muted hover:text-text-main transition-colors" title="System Health" href="/dashboard/health"><span class="status-dot status-dot-live"></span><span>Online</span></a></div></aside></div><main class="flex min-w-0 flex-1 flex-col isolate"><header class="dashboard-header sticky top-0 z-20 flex h-16 shrink-0 items-center justify-between gap-3 border-b border-border bg-surface/90 px-4 lg:px-6"><div class="flex items-center gap-3 lg:hidden shrink-0"><button type="button" aria-label="Open navigation" class="flex size-9 items-center justify-center rounded-lg border border-border-subtle bg-surface-2 text-text-muted transition-colors hover:text-text-main"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[18px]" aria-hidden="true" data-icon="menu"><path d="M228,128a12,12,0,0,1-12,12H40a12,12,0,0,1,0-24H216A12,12,0,0,1,228,128ZM40,76H216a12,12,0,0,0,0-24H40a12,12,0,0,0,0,24ZM216,180H40a12,12,0,0,0,0,24H216a12,12,0,0,0,0-24Z"></path></svg></button></div><div class="flex min-w-0 flex-1 items-center gap-3"><div class="flex items-center gap-3 min-w-0"><div class="icon-box text-primary hidden sm:inline-flex"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[19px]" aria-hidden="true" data-icon="savings"><path d="M192,116a12,12,0,1,1-12-12A12,12,0,0,1,192,116ZM152,64H112a8,8,0,0,0,0,16h40a8,8,0,0,0,0-16Zm96,48v32a24,24,0,0,1-24,24h-2.36l-16.21,45.38A16,16,0,0,1,190.36,224H177.64a16,16,0,0,1-15.07-10.62L160.65,208h-57.3l-1.92,5.38A16,16,0,0,1,86.36,224H73.64a16,16,0,0,1-15.07-10.62L46,178.22a87.69,87.69,0,0,1-21.44-48.38A16,16,0,0,0,16,144a8,8,0,0,1-16,0,32,32,0,0,1,24.28-31A88.12,88.12,0,0,1,112,32H216a8,8,0,0,1,0,16H194.61a87.93,87.93,0,0,1,30.17,37c.43,1,.85,2,1.25,3A24,24,0,0,1,248,112Zm-16,0a8,8,0,0,0-8-8h-3.66a8,8,0,0,1-7.64-5.6A71.9,71.9,0,0,0,144,48H112A72,72,0,0,0,58.91,168.64a8,8,0,0,1,1.64,2.71L73.64,208H86.36l3.82-10.69A8,8,0,0,1,97.71,192h68.58a8,8,0,0,1,7.53,5.31L177.64,208h12.72l18.11-50.69A8,8,0,0,1,216,152h8a8,8,0,0,0,8-8Z"></path></svg></div><div class="min-w-0"><div class="flex items-center gap-2"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-primary text-[18px] sm:hidden shrink-0" aria-hidden="true" data-icon="savings"><path d="M192,116a12,12,0,1,1-12-12A12,12,0,0,1,192,116ZM152,64H112a8,8,0,0,0,0,16h40a8,8,0,0,0,0-16Zm96,48v32a24,24,0,0,1-24,24h-2.36l-16.21,45.38A16,16,0,0,1,190.36,224H177.64a16,16,0,0,1-15.07-10.62L160.65,208h-57.3l-1.92,5.38A16,16,0,0,1,86.36,224H73.64a16,16,0,0,1-15.07-10.62L46,178.22a87.69,87.69,0,0,1-21.44-48.38A16,16,0,0,0,16,144a8,8,0,0,1-16,0,32,32,0,0,1,24.28-31A88.12,88.12,0,0,1,112,32H216a8,8,0,0,1,0,16H194.61a87.93,87.93,0,0,1,30.17,37c.43,1,.85,2,1.25,3A24,24,0,0,1,248,112Zm-16,0a8,8,0,0,0-8-8h-3.66a8,8,0,0,1-7.64-5.6A71.9,71.9,0,0,0,144,48H112A72,72,0,0,0,58.91,168.64a8,8,0,0,1,1.64,2.71L73.64,208H86.36l3.82-10.69A8,8,0,0,1,97.71,192h68.58a8,8,0,0,1,7.53,5.31L177.64,208h12.72l18.11-50.69A8,8,0,0,1,216,152h8a8,8,0,0,0,8-8Z"></path></svg><h1 class="truncate text-[18px] font-bold tracking-tight text-text-main leading-tight">Token Saver</h1></div><p class="hidden md:block text-xs text-text-muted truncate mt-0.5">Compress prompts and outputs to save tokens</p></div></div></div><div class="dashboard-header-actions flex items-center gap-1.5 shrink-0"><a class="hidden xl:inline-flex items-center gap-2 rounded-full border border-border bg-surface-2 px-3 py-1 text-xs font-medium text-text-muted hover:border-primary/40 hover:text-text-main transition-colors mr-1" title="View router health" href="/dashboard/health"><span class="status-dot status-dot-live"></span><span>Router Online</span></a><button class="inline-flex items-center justify-center size-8 rounded-md text-text-muted hover:text-text-main hover:bg-surface-2 transition-colors" aria-label="Switch to light mode" title="Switch to light mode"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[18px]" aria-hidden="true" data-icon="light_mode"><path d="M120,40V16a8,8,0,0,1,16,0V40a8,8,0,0,1-16,0Zm72,88a64,64,0,1,1-64-64A64.07,64.07,0,0,1,192,128Zm-16,0a48,48,0,1,0-48,48A48.05,48.05,0,0,0,176,128ZM58.34,69.66A8,8,0,0,0,69.66,58.34l-16-16A8,8,0,0,0,42.34,53.66Zm0,116.68-16,16a8,8,0,0,0,11.32,11.32l16-16a8,8,0,0,0-11.32-11.32ZM192,72a8,8,0,0,0,5.66-2.34l16-16a8,8,0,0,0-11.32-11.32l-16,16A8,8,0,0,0,192,72Zm5.66,114.34a8,8,0,0,0-11.32,11.32l16,16a8,8,0,0,0,11.32-11.32ZM48,128a8,8,0,0,0-8-8H16a8,8,0,0,0,0,16H40A8,8,0,0,0,48,128Zm80,80a8,8,0,0,0-8,8v24a8,8,0,0,0,16,0V216A8,8,0,0,0,128,208Zm112-88H216a8,8,0,0,0,0,16h24a8,8,0,0,0,0-16Z"></path></svg></button><button class="inline-flex h-8 items-center justify-center gap-1.5 rounded-md px-2 text-text-muted transition-colors hover:bg-surface-2 hover:text-text-main" title="Language" aria-label="Language: en" data-i18n-skip="true"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[18px]" aria-hidden="true" data-icon="language"><path d="M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm88,104a87.62,87.62,0,0,1-6.4,32.94l-44.7-27.49a15.92,15.92,0,0,0-6.24-2.23l-22.82-3.08a16.11,16.11,0,0,0-16,7.86h-8.72l-3.8-7.86a15.91,15.91,0,0,0-11-8.67l-8-1.73L96.14,104h16.71a16.06,16.06,0,0,0,7.73-2l12.25-6.76a16.62,16.62,0,0,0,3-2.14l26.91-24.34A15.93,15.93,0,0,0,166,49.1l-.36-.65A88.11,88.11,0,0,1,216,128ZM143.31,41.34,152,56.9,125.09,81.24,112.85,88H96.14a16,16,0,0,0-13.88,8l-8.73,15.23L63.38,84.19,74.32,58.32a87.87,87.87,0,0,1,69-17ZM40,128a87.53,87.53,0,0,1,8.54-37.8l11.34,30.27a16,16,0,0,0,11.62,10l21.43,4.61L96.74,143a16.09,16.09,0,0,0,14.4,9h1.48l-7.23,16.23a16,16,0,0,0,2.86,17.37l.14.14L128,205.94l-1.94,10A88.11,88.11,0,0,1,40,128Zm102.58,86.78,1.13-5.81a16.09,16.09,0,0,0-4-13.9,1.85,1.85,0,0,1-.14-.14L120,174.74,133.7,144l22.82,3.08,45.72,28.12A88.18,88.18,0,0,1,142.58,214.78Z"></path></svg><span class="text-xs font-medium uppercase">en</span></button><div class=""></div><div class="relative"><button class="flex size-8 items-center justify-center rounded-md text-text-muted transition-colors hover:bg-surface-2 hover:text-text-main" title="Menu"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="text-[18px]" style="display:inline-block;vertical-align:middle;flex-shrink:0" aria-hidden="true" data-icon="grid_view"><rect x="3" y="3" width="7.5" height="7.5" rx="2" fill="currentColor" fill-opacity="0.16" stroke="currentColor" stroke-width="1.75"></rect><rect x="13.5" y="3" width="7.5" height="7.5" rx="2" stroke="currentColor" stroke-width="1.75"></rect><rect x="3" y="13.5" width="7.5" height="7.5" rx="2" stroke="currentColor" stroke-width="1.75"></rect><rect x="13.5" y="13.5" width="7.5" height="7.5" rx="2" fill="currentColor" fill-opacity="0.16" stroke="currentColor" stroke-width="1.75"></rect></svg></button></div></div></header><div class="dashboard-scroll flex-1 overflow-y-auto custom-scrollbar p-4 lg:p-6 "><div class="dashboard-page-content mx-auto w-full max-w-[1280px]"><div class="flex flex-col gap-6"><div class="saver-workspace flex flex-col gap-6"><div class="workspace-heading"><div><h1>Token saver</h1><p>Compress what leaves this machine — tool output, prompts and response style — so each request costs fewer tokens at the provider.</p></div><a href="/dashboard/usage" class="workspace-link">View live activity</a></div><nav class="saver-section-nav" aria-label="Token saver sections"><a href="#quick-presets">Profiles</a><a href="#rtk">Compression</a><a href="#token-saver-catalog">Engine catalog</a><a href="#token-saver-general">Preferences</a></nav><dl class="grid grid-cols-1 gap-x-6 gap-y-3 rounded-[10px] border border-border-subtle bg-surface-2/40 p-4 sm:grid-cols-2 lg:grid-cols-4"><div class="min-w-0"><dt class="text-xs text-text-muted">RTK tool compression</dt><dd class="mt-0.5 truncate text-[13px] font-medium text-success">On · standard</dd></div><div class="min-w-0"><dt class="text-xs text-text-muted">Headroom prompt compression</dt><dd class="mt-0.5 truncate text-[13px] font-medium text-text-main">Off</dd></div><div class="min-w-0"><dt class="text-xs text-text-muted">Caveman output style</dt><dd class="mt-0.5 truncate text-[13px] font-medium text-text-main">Off</dd></div><div class="min-w-0"><dt class="text-xs text-text-muted">Ponytail minimal-code bias</dt><dd class="mt-0.5 truncate text-[13px] font-medium text-text-main">Off</dd></div><div class="min-w-0"><dt class="text-xs text-text-muted">PXPIPE image context</dt><dd class="mt-0.5 truncate text-[13px] font-medium text-text-main">Off</dd></div><div class="min-w-0"><dt class="text-xs text-text-muted">Response focus</dt><dd class="mt-0.5 truncate text-[13px] font-medium text-text-main">Balanced</dd></div><div class="min-w-0"><dt class="text-xs text-text-muted">Auto-trigger threshold</dt><dd class="mt-0.5 truncate text-[13px] font-medium text-text-main">4000 tokens</dd></div></dl><div class="ui-card border rounded-xl bg-surface border-border shadow-soft p-5" data-variant="default" id="quick-presets"><div class="flex items-center justify-between gap-4 mb-4"><div class="flex items-center gap-3 min-w-0"><div class="icon-box text-primary shrink-0"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[18px]" aria-hidden="true" data-icon="tune"><path d="M176,80a8,8,0,0,1,8-8h32a8,8,0,0,1,0,16H184A8,8,0,0,1,176,80ZM40,88H144v16a8,8,0,0,0,16,0V56a8,8,0,0,0-16,0V72H40a8,8,0,0,0,0,16Zm176,80H120a8,8,0,0,0,0,16h96a8,8,0,0,0,0-16ZM88,144a8,8,0,0,0-8,8v16H40a8,8,0,0,0,0,16H80v16a8,8,0,0,0,16,0V152A8,8,0,0,0,88,144Z"></path></svg></div><div class="min-w-0"><h3 class="ui-card-title text-text-main font-semibold text-[15px] tracking-tight leading-snug">Quick Presets (Token Saver Profiles)</h3><p class="text-[12.5px] text-text-muted mt-0.5 leading-relaxed">Choose a 1-click ready-to-use strategy for optimal performance and token savings without complex manual configuration.</p></div></div><span class="text-[13px] text-text-muted">Current Profile:<!-- --> <span class="font-medium text-text-main">Balanced (Recommended)</span></span></div><div class="divide-y divide-border-subtle"><div class="grid gap-3 py-4 first:pt-0 last:pb-0 sm:grid-cols-[minmax(0,1fr)_auto] sm:items-start sm:gap-6"><div class="min-w-0"><div class="flex flex-wrap items-center gap-2"><p class="text-sm font-medium text-text-main">Maximum Savings</p></div><p class="mt-0.5 text-[13px] leading-relaxed text-text-muted">Aggressive compression for tool outputs, with concise code-first responses and no filler.</p></div><div class="flex shrink-0 items-center gap-2 sm:pt-0.5"><button class="ui-button inline-flex items-center justify-center gap-2 rounded-lg font-medium transition-all duration-150 cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2 focus-visible:ring-offset-bg disabled:opacity-50 disabled:cursor-not-allowed bg-primary text-bg font-semibold hover:bg-primary-hover shadow-xs disabled:bg-surface-2 disabled:text-text-muted h-7.5 px-2.5 text-xs rounded-lg" data-variant="primary">Apply Profile</button></div></div><div class="grid gap-3 py-4 first:pt-0 last:pb-0 sm:grid-cols-[minmax(0,1fr)_auto] sm:items-start sm:gap-6"><div class="min-w-0"><div class="flex flex-wrap items-center gap-2"><p class="text-sm font-medium text-text-main">Balanced (Recommended)</p><span class="text-xs px-2 py-0.5 rounded-md bg-success/10 text-success">Active Profile</span></div><p class="mt-0.5 text-[13px] leading-relaxed text-text-muted">Standard tool-output compression without changing response style. The safe default.</p></div><div class="flex shrink-0 items-center gap-2 sm:pt-0.5"><button class="ui-button inline-flex items-center justify-center gap-2 rounded-lg font-medium transition-all duration-150 cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2 focus-visible:ring-offset-bg disabled:opacity-50 disabled:cursor-not-allowed border border-border bg-surface-2/80 text-text-main hover:bg-surface-3 hover:border-border shadow-2xs h-7.5 px-2.5 text-xs rounded-lg" disabled="" data-variant="secondary">Active Profile</button></div></div><div class="grid gap-3 py-4 first:pt-0 last:pb-0 sm:grid-cols-[minmax(0,1fr)_auto] sm:items-start sm:gap-6"><div class="min-w-0"><div class="flex flex-wrap items-center gap-2"><p class="text-sm font-medium text-text-main">Developer Pro</p></div><p class="mt-0.5 text-[13px] leading-relaxed text-text-muted">For coding agents (Claude Code, Cursor, Windsurf): direct code patches with minimal boilerplate.</p></div><div class="flex shrink-0 items-center gap-2 sm:pt-0.5"><button class="ui-button inline-flex items-center justify-center gap-2 rounded-lg font-medium transition-all duration-150 cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2 focus-visible:ring-offset-bg disabled:opacity-50 disabled:cursor-not-allowed bg-primary text-bg font-semibold hover:bg-primary-hover shadow-xs disabled:bg-surface-2 disabled:text-text-muted h-7.5 px-2.5 text-xs rounded-lg" data-variant="primary">Apply Profile</button></div></div><div class="grid gap-3 py-4 first:pt-0 last:pb-0 sm:grid-cols-[minmax(0,1fr)_auto] sm:items-start sm:gap-6"><div class="min-w-0"><div class="flex flex-wrap items-center gap-2"><p class="text-sm font-medium text-text-main">Passthrough (Off)</p></div><p class="mt-0.5 text-[13px] leading-relaxed text-text-muted">Every filter off, for raw evaluation or debugging responses that must not be touched.</p></div><div class="flex shrink-0 items-center gap-2 sm:pt-0.5"><button class="ui-button inline-flex items-center justify-center gap-2 rounded-lg font-medium transition-all duration-150 cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2 focus-visible:ring-offset-bg disabled:opacity-50 disabled:cursor-not-allowed bg-primary text-bg font-semibold hover:bg-primary-hover shadow-xs disabled:bg-surface-2 disabled:text-text-muted h-7.5 px-2.5 text-xs rounded-lg" data-variant="primary">Apply Profile</button></div></div></div></div><div class="ui-card border rounded-xl bg-surface border-border shadow-soft p-5" data-variant="default" id="rtk"><div class="flex items-center justify-between gap-4 mb-4"><div class="flex items-center gap-3 min-w-0"><div class="icon-box text-primary shrink-0"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="text-[18px]" style="display:inline-block;vertical-align:middle;flex-shrink:0" aria-hidden="true" data-icon="bolt"><path d="M13.2 2.8 4.8 13.2h6.2l-1.2 8 9.4-10.4H13l.2-8Z" fill="currentColor" fill-opacity="0.16" stroke="currentColor" stroke-width="1.75" stroke-linejoin="round"></path></svg></div><div class="min-w-0"><h3 class="ui-card-title text-text-main font-semibold text-[15px] tracking-tight leading-snug">Compression</h3><p class="text-[12.5px] text-text-muted mt-0.5 leading-relaxed">Each engine runs at a different point in the request. Off means the request passes through untouched.</p></div></div></div><div class="divide-y divide-border-subtle"><div class="grid gap-3 py-4 first:pt-0 last:pb-0 sm:grid-cols-[minmax(0,1fr)_auto] sm:items-start sm:gap-6"><div class="min-w-0"><div class="flex flex-wrap items-center gap-2"><p class="text-sm font-medium text-text-main">Compress tool output<!-- --> <a href="https://github.com/rtk-ai/rtk" target="_blank" rel="noreferrer" class="text-xs font-normal text-primary hover:underline">(RTK)</a></p></div><p class="mt-0.5 text-[13px] leading-relaxed text-text-muted">Rewrites git/grep/ls/tree/log output in tool results — typically 60–90% fewer input tokens.</p></div><div class="flex shrink-0 items-center gap-2 sm:pt-0.5"><div class="flex items-center gap-3"><button type="button" role="switch" aria-checked="true" aria-label="Compress tool output with RTK" class="relative inline-flex shrink-0 cursor-pointer rounded-full transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2 bg-primary [object Object]"><span class="pointer-events-none inline-block rounded-full shadow-2xs bg-bg transition-transform duration-150 translate-x-[14px] size-3.5"></span></button></div></div></div><div class="grid gap-3 py-4 first:pt-0 last:pb-0 sm:grid-cols-[minmax(0,1fr)_auto] sm:items-start sm:gap-6"><div class="min-w-0"><div class="flex flex-wrap items-center gap-2"><p class="text-sm font-medium text-text-main">RTK compression mode</p></div><p class="mt-0.5 text-[13px] leading-relaxed text-text-muted">One shared mode for the single RTK pass. Aggressive lowers the per-blob threshold to 100B; lite compresses only blobs of 2KB or more.</p></div><div class="flex shrink-0 items-center gap-2 sm:pt-0.5"><div class="flex items-center gap-1.5"><button class="ui-button inline-flex items-center justify-center gap-2 rounded-lg font-medium transition-all duration-150 cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2 focus-visible:ring-offset-bg disabled:opacity-50 disabled:cursor-not-allowed border border-border bg-surface-2/80 text-text-main hover:bg-surface-3 hover:border-border shadow-2xs h-7.5 px-2.5 text-xs rounded-lg" data-variant="secondary">lite</button><button class="ui-button inline-flex items-center justify-center gap-2 rounded-lg font-medium transition-all duration-150 cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2 focus-visible:ring-offset-bg disabled:opacity-50 disabled:cursor-not-allowed bg-primary text-bg font-semibold hover:bg-primary-hover shadow-xs disabled:bg-surface-2 disabled:text-text-muted h-7.5 px-2.5 text-xs rounded-lg" data-variant="primary">standard</button><button class="ui-button inline-flex items-center justify-center gap-2 rounded-lg font-medium transition-all duration-150 cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2 focus-visible:ring-offset-bg disabled:opacity-50 disabled:cursor-not-allowed border border-border bg-surface-2/80 text-text-main hover:bg-surface-3 hover:border-border shadow-2xs h-7.5 px-2.5 text-xs rounded-lg" data-variant="secondary">aggressive</button></div></div></div><div class="grid gap-3 py-4 first:pt-0 last:pb-0 sm:grid-cols-[minmax(0,1fr)_auto] sm:items-start sm:gap-6" id="headroom-control"><div class="min-w-0"><div class="flex flex-wrap items-center gap-2"><p class="text-sm font-medium text-text-main">Compress prompts<!-- --> <a href="https://github.com/headroomlabs-ai/headroom" target="_blank" rel="noreferrer" class="text-xs font-normal text-primary hover:underline">(Headroom)</a></p><span class="text-xs px-2 py-0.5 rounded-md bg-surface-2 text-text-muted">Checking…</span></div><p class="mt-0.5 text-[13px] leading-relaxed text-text-muted">Sends the prompt through a local /v1/compress proxy before routing it to the model.</p></div><div class="flex shrink-0 items-center gap-2 sm:pt-0.5"><button class="ui-button inline-flex items-center justify-center gap-2 rounded-lg font-medium transition-all duration-150 cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2 focus-visible:ring-offset-bg disabled:opacity-50 disabled:cursor-not-allowed border border-border bg-surface-2/80 text-text-main hover:bg-surface-3 hover:border-border shadow-2xs h-7.5 px-2.5 text-xs rounded-lg" data-variant="secondary"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[17px]" aria-hidden="true" data-icon="settings"><path d="M128,80a48,48,0,1,0,48,48A48.05,48.05,0,0,0,128,80Zm0,80a32,32,0,1,1,32-32A32,32,0,0,1,128,160Zm109.94-52.79a8,8,0,0,0-3.89-5.4l-29.83-17-.12-33.62a8,8,0,0,0-2.83-6.08,111.91,111.91,0,0,0-36.72-20.67,8,8,0,0,0-6.46.59L128,41.85,97.88,25a8,8,0,0,0-6.47-.6A112.1,112.1,0,0,0,54.73,45.15a8,8,0,0,0-2.83,6.07l-.15,33.65-29.83,17a8,8,0,0,0-3.89,5.4,106.47,106.47,0,0,0,0,41.56,8,8,0,0,0,3.89,5.4l29.83,17,.12,33.62a8,8,0,0,0,2.83,6.08,111.91,111.91,0,0,0,36.72,20.67,8,8,0,0,0,6.46-.59L128,214.15,158.12,231a7.91,7.91,0,0,0,3.9,1,8.09,8.09,0,0,0,2.57-.42,112.1,112.1,0,0,0,36.68-20.73,8,8,0,0,0,2.83-6.07l.15-33.65,29.83-17a8,8,0,0,0,3.89-5.4A106.47,106.47,0,0,0,237.94,107.21Zm-15,34.91-28.57,16.25a8,8,0,0,0-3,3c-.58,1-1.19,2.06-1.81,3.06a7.94,7.94,0,0,0-1.22,4.21l-.15,32.25a95.89,95.89,0,0,1-25.37,14.3L134,199.13a8,8,0,0,0-3.91-1h-.19c-1.21,0-2.43,0-3.64,0a8.08,8.08,0,0,0-4.1,1l-28.84,16.1A96,96,0,0,1,67.88,201l-.11-32.2a8,8,0,0,0-1.22-4.22c-.62-1-1.23-2-1.8-3.06a8.09,8.09,0,0,0-3-3.06l-28.6-16.29a90.49,90.49,0,0,1,0-28.26L61.67,97.63a8,8,0,0,0,3-3c.58-1,1.19-2.06,1.81-3.06a7.94,7.94,0,0,0,1.22-4.21l.15-32.25a95.89,95.89,0,0,1,25.37-14.3L122,56.87a8,8,0,0,0,4.1,1c1.21,0,2.43,0,3.64,0a8.08,8.08,0,0,0,4.1-1l28.84-16.1A96,96,0,0,1,188.12,55l.11,32.2a8,8,0,0,0,1.22,4.22c.62,1,1.23,2,1.8,3.06a8.09,8.09,0,0,0,3,3.06l28.6,16.29A90.49,90.49,0,0,1,222.9,142.12Z"></path></svg>Set up</button><div class="flex items-center gap-3 opacity-50 cursor-not-allowed"><button type="button" role="switch" aria-checked="false" aria-label="Compress prompts with Headroom" disabled="" class="relative inline-flex shrink-0 cursor-pointer rounded-full transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2 bg-surface-2 border border-border [object Object] cursor-not-allowed"><span class="pointer-events-none inline-block rounded-full shadow-2xs bg-text-muted transition-transform duration-150 translate-x-0.5 size-3.5"></span></button></div></div></div><div class="grid gap-3 py-4 first:pt-0 last:pb-0 sm:grid-cols-[minmax(0,1fr)_auto] sm:items-start sm:gap-6" id="caveman-control"><div class="min-w-0"><div class="flex flex-wrap items-center gap-2"><p class="text-sm font-medium text-text-main">Compress output style<!-- --> <a href="https://github.com/JuliusBrussee/caveman" target="_blank" rel="noreferrer" class="text-xs font-normal text-primary hover:underline">(Caveman)</a></p></div><p class="mt-0.5 text-[13px] leading-relaxed text-text-muted">Injects a terse-style system prompt so technical answers come back shorter.</p></div><div class="flex shrink-0 items-center gap-2 sm:pt-0.5"><div class="flex items-center gap-3"><button type="button" role="switch" aria-checked="false" aria-label="Compress output style with Caveman" class="relative inline-flex shrink-0 cursor-pointer rounded-full transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2 bg-surface-2 border border-border [object Object]"><span class="pointer-events-none inline-block rounded-full shadow-2xs bg-text-muted transition-transform duration-150 translate-x-0.5 size-3.5"></span></button></div></div></div><div class="grid gap-3 py-4 first:pt-0 last:pb-0 sm:grid-cols-[minmax(0,1fr)_auto] sm:items-start sm:gap-6" id="ponytail-control"><div class="min-w-0"><div class="flex flex-wrap items-center gap-2"><p class="text-sm font-medium text-text-main">Bias toward minimal code<!-- --> <a href="https://github.com/DietrichGebert/ponytail" target="_blank" rel="noreferrer" class="text-xs font-normal text-primary hover:underline">(Ponytail)</a></p></div><p class="mt-0.5 text-[13px] leading-relaxed text-text-muted">Bias the model toward YAGNI: reuse the standard library, delete instead of adding.</p></div><div class="flex shrink-0 items-center gap-2 sm:pt-0.5"><div class="flex items-center gap-3"><button type="button" role="switch" aria-checked="false" aria-label="Bias toward minimal code with Ponytail" class="relative inline-flex shrink-0 cursor-pointer rounded-full transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2 bg-surface-2 border border-border [object Object]"><span class="pointer-events-none inline-block rounded-full shadow-2xs bg-text-muted transition-transform duration-150 translate-x-0.5 size-3.5"></span></button></div></div></div><div class="grid gap-3 py-4 first:pt-0 last:pb-0 sm:grid-cols-[minmax(0,1fr)_auto] sm:items-start sm:gap-6"><div class="min-w-0"><div class="flex flex-wrap items-center gap-2"><p class="text-sm font-medium text-text-main">Compress prompts as images<!-- --> <a href="https://github.com/teamchong/pxpipe" target="_blank" rel="noreferrer" class="text-xs font-normal text-primary hover:underline">(PXPIPE)</a></p><span class="text-xs px-2 py-0.5 rounded-md bg-surface-2 text-text-muted">Off</span></div><p class="mt-0.5 text-[13px] leading-relaxed text-text-muted">Renders large text context as images before sending it. Suited to huge prompts and long conversations.</p></div><div class="flex shrink-0 items-center gap-2 sm:pt-0.5"><button class="ui-button inline-flex items-center justify-center gap-2 rounded-lg font-medium transition-all duration-150 cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2 focus-visible:ring-offset-bg disabled:opacity-50 disabled:cursor-not-allowed border border-border bg-surface-2/80 text-text-main hover:bg-surface-3 hover:border-border shadow-2xs h-7.5 px-2.5 text-xs rounded-lg" data-variant="secondary">Set up</button><a href="/dashboard/pxpipe" class="text-xs text-primary hover:underline">Dashboard</a><div class="flex items-center gap-3 opacity-50 cursor-not-allowed"><button type="button" role="switch" aria-checked="false" aria-label="Compress prompts as images with PXPIPE" disabled="" class="relative inline-flex shrink-0 cursor-pointer rounded-full transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2 bg-surface-2 border border-border [object Object] cursor-not-allowed"><span class="pointer-events-none inline-block rounded-full shadow-2xs bg-text-muted transition-transform duration-150 translate-x-0.5 size-3.5"></span></button></div></div></div></div></div><div class="ui-card border rounded-xl bg-surface border-border shadow-soft p-5" data-variant="default" id="token-saver-catalog"><div class="flex items-center justify-between gap-4 mb-4"><div class="flex items-center gap-3 min-w-0"><div class="icon-box text-primary shrink-0"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[18px]" aria-hidden="true" data-icon="category"><path d="M122.34,109.66a8,8,0,0,0,11.32,0l40-40a8,8,0,0,0,0-11.32l-40-40a8,8,0,0,0-11.32,0l-40,40a8,8,0,0,0,0,11.32ZM128,35.31,156.69,64,128,92.69,99.31,64Zm5.66,111a8,8,0,0,0-11.32,0l-40,40a8,8,0,0,0,0,11.32l40,40a8,8,0,0,0,11.32,0l40-40a8,8,0,0,0,0-11.32ZM128,220.69,99.31,192,128,163.31,156.69,192Zm109.66-98.35-40-40a8,8,0,0,0-11.32,0l-40,40a8,8,0,0,0,0,11.32l40,40a8,8,0,0,0,11.32,0l40-40A8,8,0,0,0,237.66,122.34ZM192,156.69,163.31,128,192,99.31,220.69,128Zm-82.34-34.35-40-40a8,8,0,0,0-11.32,0l-40,40a8,8,0,0,0,0,11.32l40,40a8,8,0,0,0,11.32,0l40-40A8,8,0,0,0,109.66,122.34ZM64,156.69,35.31,128,64,99.31,92.69,128Z"></path></svg></div><div class="min-w-0"><h3 class="ui-card-title text-text-main font-semibold text-[15px] tracking-tight leading-snug">Engine catalog</h3><p class="text-[12.5px] text-text-muted mt-0.5 leading-relaxed">Every engine this build knows about, grouped by tier. Entries with no runtime are never wired to a fake toggle.</p></div></div><span class="font-mono text-xs text-text-muted">10<!-- --> covered · <!-- -->7<!-- --> unavailable</span></div><div class="overflow-x-auto rounded-[10px] border border-border-subtle"><table class="w-full min-w-[60rem] border-collapse text-left" aria-label="Token saver engine catalog"><thead><tr class="border-b border-border text-[13px] text-text-muted"><th scope="col" class="px-3 py-2 font-medium">Engine</th><th scope="col" class="px-3 py-2 font-medium">Runtime</th><th scope="col" class="px-3 py-2 font-medium">Status</th><th scope="col" class="px-3 py-2 font-medium">Control</th></tr></thead><tbody><tr class="border-b border-border-subtle bg-surface-2/60"><th scope="colgroup" colSpan="4" class="px-3 py-2 text-left"><span class="flex flex-wrap items-center gap-2"><span class="text-[13px] font-medium text-text-main">Safe default</span><span class="text-xs text-text-muted">5<!-- --> engine<!-- -->s</span></span></th></tr><tr class="border-b border-border-subtle last:border-b-0" aria-disabled="true"><td class="min-w-[18rem] px-3 py-2.5 align-top"><div class="flex min-w-0 flex-col gap-0.5"><span class="flex flex-wrap items-center gap-2"><span class="text-[13px] font-medium text-text-muted">Cross-turn session dedup</span><code class="font-mono text-[11px] text-text-subtle">session-dedup</code></span><span class="text-[13px] leading-relaxed text-text-muted">No runtime in this build — UNAVAILABLE: no cross-turn dedup store exists. L3 (open-sse/cache/l3.js) dedups only identical blocks WITHIN one outgoing request (the mutable last message) — this is not a fake cross-turn marker and not a toggle.</span></div></td><td class="min-w-[16rem] px-3 py-2.5 align-top"><span class="line-clamp-2 font-mono text-[11px] text-text-muted" title="No runtime in this build">No runtime in this build</span></td><td class="px-3 py-2.5 align-top"><span class="text-xs px-2 py-0.5 rounded-md bg-warning/10 text-warning">Unavailable</span></td><td class="px-3 py-2.5 align-top"><span class="text-xs text-text-muted">Not configurable</span></td></tr><tr class="border-b border-border-subtle last:border-b-0" aria-disabled="true"><td class="min-w-[18rem] px-3 py-2.5 align-top"><div class="flex min-w-0 flex-col gap-0.5"><span class="flex flex-wrap items-center gap-2"><span class="text-[13px] font-medium text-text-muted">Cache-control referencing (CCR)</span><code class="font-mono text-[11px] text-text-subtle">ccr</code></span><span class="text-[13px] leading-relaxed text-text-muted">No runtime in this build — No CCR runtime exists. L0&#x27;s cache_control breakpoints (open-sse/cache/l0.js) are prompt-cache hint markers inserted on a stable prefix — NOT content-addressed retrieval markers. Existing L0 (breakpoints) and L3 (within-request content-address dedup, open-sse/cache/l3.js) stay as-is; neither is CCR.</span></div></td><td class="min-w-[16rem] px-3 py-2.5 align-top"><span class="line-clamp-2 font-mono text-[11px] text-text-muted" title="No runtime in this build">No runtime in this build</span></td><td class="px-3 py-2.5 align-top"><span class="text-xs px-2 py-0.5 rounded-md bg-warning/10 text-warning">Unavailable</span></td><td class="px-3 py-2.5 align-top"><span class="text-xs text-text-muted">Not configurable</span></td></tr><tr class="border-b border-border-subtle last:border-b-0" aria-disabled="false"><td class="min-w-[18rem] px-3 py-2.5 align-top"><div class="flex min-w-0 flex-col gap-0.5"><span class="flex flex-wrap items-center gap-2"><span class="text-[13px] font-medium text-text-main">RTK mode: lite</span><code class="font-mono text-[11px] text-text-subtle">lite</code><span class="text-xs px-2 py-0.5 rounded-md bg-success/10 text-success">Safe default</span></span><span class="text-[13px] leading-relaxed text-text-muted">Exclusive mode over the same single RTK pass; compresses only blobs &gt;= 2KB. Least aggressive.</span></div></td><td class="min-w-[16rem] px-3 py-2.5 align-top"><span class="line-clamp-2 font-mono text-[11px] text-text-muted" title="open-sse/rtk/constants.js MODE_MIN_COMPRESS_SIZE.lite (2KB threshold)">open-sse/rtk/constants.js MODE_MIN_COMPRESS_SIZE.lite (2KB threshold)</span></td><td class="px-3 py-2.5 align-top"><span class="text-xs text-text-muted">Exclusive mode</span></td><td class="px-3 py-2.5 align-top"><button type="button" class="rounded-md border px-2.5 py-1 text-xs font-medium transition-colors border-border bg-surface text-text-muted hover:bg-surface-2 hover:text-text-main disabled:opacity-40" title="Exclusive mode over the same single RTK pass; compresses only blobs &gt;= 2KB. Least aggressive.">Use this mode</button></td></tr><tr class="border-b border-border-subtle last:border-b-0" aria-disabled="false"><td class="min-w-[18rem] px-3 py-2.5 align-top"><div class="flex min-w-0 flex-col gap-0.5"><span class="flex flex-wrap items-center gap-2"><span class="text-[13px] font-medium text-text-main">RTK (request token-killer)</span><code class="font-mono text-[11px] text-text-subtle">rtk</code><span class="text-xs px-2 py-0.5 rounded-md bg-success/10 text-success">Safe default</span></span><span class="text-[13px] leading-relaxed text-text-muted">Single pass over tool_result/function_call_output text; fail-open. On by default.</span></div></td><td class="min-w-[16rem] px-3 py-2.5 align-top"><span class="line-clamp-2 font-mono text-[11px] text-text-muted" title="open-sse/rtk/index.js — in-process tool_result compressor (OpenAI/Claude/Responses/Kiro shapes)">open-sse/rtk/index.js — in-process tool_result compressor (OpenAI/Claude/Responses/Kiro shapes)</span></td><td class="px-3 py-2.5 align-top"><span class="text-xs px-2 py-0.5 rounded-md bg-success/10 text-success">On</span></td><td class="px-3 py-2.5 align-top"><a href="#rtk" class="text-xs text-primary hover:underline">Master switch</a></td></tr><tr class="border-b border-border-subtle last:border-b-0" aria-disabled="false"><td class="min-w-[18rem] px-3 py-2.5 align-top"><div class="flex min-w-0 flex-col gap-0.5"><span class="flex flex-wrap items-center gap-2"><span class="text-[13px] font-medium text-text-main">RTK mode: standard</span><code class="font-mono text-[11px] text-text-subtle">standard</code><span class="text-xs px-2 py-0.5 rounded-md bg-success/10 text-success">Safe default</span></span><span class="text-[13px] leading-relaxed text-text-muted">Historical behavior; byte-identical to pre-mode RTK. The default mode.</span></div></td><td class="min-w-[16rem] px-3 py-2.5 align-top"><span class="line-clamp-2 font-mono text-[11px] text-text-muted" title="open-sse/rtk/constants.js MODE_MIN_COMPRESS_SIZE.standard (500B threshold, default)">open-sse/rtk/constants.js MODE_MIN_COMPRESS_SIZE.standard (500B threshold, default)</span></td><td class="px-3 py-2.5 align-top"><span class="text-xs text-text-muted">Exclusive mode</span></td><td class="px-3 py-2.5 align-top"><button type="button" disabled="" class="rounded-md border px-2.5 py-1 text-xs font-medium transition-colors border-primary bg-primary/10 text-primary" title="Historical behavior; byte-identical to pre-mode RTK. The default mode.">Active mode</button></td></tr><tr class="border-b border-border-subtle bg-surface-2/60"><th scope="colgroup" colSpan="4" class="px-3 py-2 text-left"><span class="flex flex-wrap items-center gap-2"><span class="text-[13px] font-medium text-text-main">Standard</span><span class="text-xs text-text-muted">5<!-- --> engine<!-- -->s</span></span></th></tr><tr class="border-b border-border-subtle last:border-b-0" aria-disabled="false"><td class="min-w-[18rem] px-3 py-2.5 align-top"><div class="flex min-w-0 flex-col gap-0.5"><span class="flex flex-wrap items-center gap-2"><span class="text-[13px] font-medium text-text-main">Codex Responses tool outputs</span><code class="font-mono text-[11px] text-text-subtle">codex-responses</code><span class="text-xs px-2 py-0.5 rounded-md bg-success/10 text-success">Safe default</span></span><span class="text-[13px] leading-relaxed text-text-muted">Covered WITHIN RTK: compresses Responses-format function_call_output output in-place. Toggled by rtkEnabled; no separate runtime.</span></div></td><td class="min-w-[16rem] px-3 py-2.5 align-top"><span class="line-clamp-2 font-mono text-[11px] text-text-muted" title="open-sse/rtk/index.js — shape 4 handles { type: &quot;function_call_output&quot;, output }">open-sse/rtk/index.js — shape 4 handles { type: &quot;function_call_output&quot;, output }</span></td><td class="px-3 py-2.5 align-top"><span class="text-xs px-2 py-0.5 rounded-md bg-success/10 text-success">Covered · RTK on</span></td><td class="px-3 py-2.5 align-top"><a href="#rtk" class="text-xs text-primary hover:underline">Toggle via RTK master</a></td></tr><tr class="border-b border-border-subtle last:border-b-0" aria-disabled="false"><td class="min-w-[18rem] px-3 py-2.5 align-top"><div class="flex min-w-0 flex-col gap-0.5"><span class="flex flex-wrap items-center gap-2"><span class="text-[13px] font-medium text-text-main">Headroom external proxy</span><code class="font-mono text-[11px] text-text-subtle">headroom</code></span><span class="text-[13px] leading-relaxed text-text-muted">Requires a reachable HEADROOM_URL endpoint; fails open (skips) when absent. Opt-in.</span></div></td><td class="min-w-[16rem] px-3 py-2.5 align-top"><span class="line-clamp-2 font-mono text-[11px] text-text-muted" title="open-sse/rtk/headroom.js — external compression proxy">open-sse/rtk/headroom.js — external compression proxy</span></td><td class="px-3 py-2.5 align-top"><span class="text-xs px-2 py-0.5 rounded-md bg-surface-2 text-text-muted">Off</span></td><td class="px-3 py-2.5 align-top"><a href="#headroom-control" class="text-xs text-primary hover:underline">Control</a></td></tr><tr class="border-b border-border-subtle last:border-b-0" aria-disabled="true"><td class="min-w-[18rem] px-3 py-2.5 align-top"><div class="flex min-w-0 flex-col gap-0.5"><span class="flex flex-wrap items-center gap-2"><span class="text-[13px] font-medium text-text-muted">Relevance retrieval</span><code class="font-mono text-[11px] text-text-subtle">relevance</code></span><span class="text-[13px] leading-relaxed text-text-muted">No runtime in this build — UNAVAILABLE: requires a real retrieval/ranking backend wired for token saving; none exists in this repo. Not a toggle.</span></div></td><td class="min-w-[16rem] px-3 py-2.5 align-top"><span class="line-clamp-2 font-mono text-[11px] text-text-muted" title="No runtime in this build">No runtime in this build</span></td><td class="px-3 py-2.5 align-top"><span class="text-xs px-2 py-0.5 rounded-md bg-warning/10 text-warning">Unavailable</span></td><td class="px-3 py-2.5 align-top"><span class="text-xs text-text-muted">Not configurable</span></td></tr><tr class="border-b border-border-subtle last:border-b-0" aria-disabled="false"><td class="min-w-[18rem] px-3 py-2.5 align-top"><div class="flex min-w-0 flex-col gap-0.5"><span class="flex flex-wrap items-center gap-2"><span class="text-[13px] font-medium text-text-main">Caveman output style</span><code class="font-mono text-[11px] text-text-subtle">caveman</code></span><span class="text-[13px] leading-relaxed text-text-muted">Injects a response-shaping instruction into the system message; it does not rewrite provider output. Opt-in.</span></div></td><td class="min-w-[16rem] px-3 py-2.5 align-top"><span class="line-clamp-2 font-mono text-[11px] text-text-muted" title="open-sse/rtk/caveman.js — system-prompt injector (level lite/full/ultra/wenyan)">open-sse/rtk/caveman.js — system-prompt injector (level lite/full/ultra/wenyan)</span></td><td class="px-3 py-2.5 align-top"><span class="text-xs px-2 py-0.5 rounded-md bg-surface-2 text-text-muted">Off</span></td><td class="px-3 py-2.5 align-top"><a href="#caveman-control" class="text-xs text-primary hover:underline">Control</a></td></tr><tr class="border-b border-border-subtle last:border-b-0" aria-disabled="true"><td class="min-w-[18rem] px-3 py-2.5 align-top"><div class="flex min-w-0 flex-col gap-0.5"><span class="flex flex-wrap items-center gap-2"><span class="text-[13px] font-medium text-text-muted">MCP tool-output accessibility</span><code class="font-mono text-[11px] text-text-subtle">mcp-accessibility</code></span><span class="text-[13px] leading-relaxed text-text-muted">No runtime in this build — UNAVAILABLE: the MCP stdio/SSE bridge (src/app/api/mcp/[plugin]/sse, src/lib/mcp/stdioSseBridge.js) exposes dashboard MCP plugins, but that bridging is NOT separate-store/scoped MCP tool-output compression. No such compression exists — not a toggle.</span></div></td><td class="min-w-[16rem] px-3 py-2.5 align-top"><span class="line-clamp-2 font-mono text-[11px] text-text-muted" title="No runtime in this build">No runtime in this build</span></td><td class="px-3 py-2.5 align-top"><span class="text-xs px-2 py-0.5 rounded-md bg-warning/10 text-warning">Unavailable</span></td><td class="px-3 py-2.5 align-top"><span class="text-xs text-text-muted">Not configurable</span></td></tr><tr class="border-b border-border-subtle bg-surface-2/60"><th scope="colgroup" colSpan="4" class="px-3 py-2 text-left"><span class="flex flex-wrap items-center gap-2"><span class="text-[13px] font-medium text-text-main">Full</span><span class="text-xs text-text-muted">1<!-- --> engine</span></span></th></tr><tr class="border-b border-border-subtle last:border-b-0" aria-disabled="false"><td class="min-w-[18rem] px-3 py-2.5 align-top"><div class="flex min-w-0 flex-col gap-0.5"><span class="flex flex-wrap items-center gap-2"><span class="text-[13px] font-medium text-text-main">RTK mode: aggressive</span><code class="font-mono text-[11px] text-text-subtle">aggressive</code></span><span class="text-[13px] leading-relaxed text-text-muted">Exclusive mode over the same single RTK pass; lowers the per-blob threshold to 100B so more blobs are eligible. It does NOT summarize or age conversation turns.</span></div></td><td class="min-w-[16rem] px-3 py-2.5 align-top"><span class="line-clamp-2 font-mono text-[11px] text-text-muted" title="open-sse/rtk/constants.js MODE_MIN_COMPRESS_SIZE.aggressive (100B threshold)">open-sse/rtk/constants.js MODE_MIN_COMPRESS_SIZE.aggressive (100B threshold)</span></td><td class="px-3 py-2.5 align-top"><span class="text-xs text-text-muted">Exclusive mode</span></td><td class="px-3 py-2.5 align-top"><button type="button" class="rounded-md border px-2.5 py-1 text-xs font-medium transition-colors border-border bg-surface text-text-muted hover:bg-surface-2 hover:text-text-main disabled:opacity-40" title="Exclusive mode over the same single RTK pass; lowers the per-blob threshold to 100B so more blobs are eligible. It does NOT summarize or age conversation turns.">Use this mode</button></td></tr><tr class="border-b border-border-subtle bg-surface-2/60"><th scope="colgroup" colSpan="4" class="px-3 py-2 text-left"><span class="flex flex-wrap items-center gap-2"><span class="text-[13px] font-medium text-text-main">Ultra</span><span class="text-xs text-text-muted">3<!-- --> engine<!-- -->s</span><span class="text-xs px-2 py-0.5 rounded-md bg-warning/10 text-warning">heuristic availability</span></span></th></tr><tr class="border-b border-border-subtle last:border-b-0" aria-disabled="true"><td class="min-w-[18rem] px-3 py-2.5 align-top"><div class="flex min-w-0 flex-col gap-0.5"><span class="flex flex-wrap items-center gap-2"><span class="text-[13px] font-medium text-text-muted">LLMLingua prompt compression</span><code class="font-mono text-[11px] text-text-subtle">llmlingua</code></span><span class="text-[13px] leading-relaxed text-text-muted">No runtime in this build — Heuristic status: unavailable — dependency not installed; no runtime path.</span></div></td><td class="min-w-[16rem] px-3 py-2.5 align-top"><span class="line-clamp-2 font-mono text-[11px] text-text-muted" title="No runtime in this build">No runtime in this build</span></td><td class="px-3 py-2.5 align-top"><span class="text-xs px-2 py-0.5 rounded-md bg-warning/10 text-warning">Unavailable</span></td><td class="px-3 py-2.5 align-top"><span class="text-xs text-text-muted">Not configurable</span></td></tr><tr class="border-b border-border-subtle last:border-b-0" aria-disabled="true"><td class="min-w-[18rem] px-3 py-2.5 align-top"><div class="flex min-w-0 flex-col gap-0.5"><span class="flex flex-wrap items-center gap-2"><span class="text-[13px] font-medium text-text-muted">Ultra compression (SLM)</span><code class="font-mono text-[11px] text-text-subtle">ultra</code></span><span class="text-[13px] leading-relaxed text-text-muted">No runtime in this build — Heuristic status: unavailable — requires a local small language model; none is wired.</span></div></td><td class="min-w-[16rem] px-3 py-2.5 align-top"><span class="line-clamp-2 font-mono text-[11px] text-text-muted" title="No runtime in this build">No runtime in this build</span></td><td class="px-3 py-2.5 align-top"><span class="text-xs px-2 py-0.5 rounded-md bg-warning/10 text-warning">Unavailable</span></td><td class="px-3 py-2.5 align-top"><span class="text-xs text-text-muted">Not configurable</span></td></tr><tr class="border-b border-border-subtle last:border-b-0" aria-disabled="true"><td class="min-w-[18rem] px-3 py-2.5 align-top"><div class="flex min-w-0 flex-col gap-0.5"><span class="flex flex-wrap items-center gap-2"><span class="text-[13px] font-medium text-text-muted">OmniGlyph encoding</span><code class="font-mono text-[11px] text-text-subtle">omniglyph</code></span><span class="text-[13px] leading-relaxed text-text-muted">No runtime in this build — Heuristic status: unavailable — dependency/model not installed; no runtime path.</span></div></td><td class="min-w-[16rem] px-3 py-2.5 align-top"><span class="line-clamp-2 font-mono text-[11px] text-text-muted" title="No runtime in this build">No runtime in this build</span></td><td class="px-3 py-2.5 align-top"><span class="text-xs px-2 py-0.5 rounded-md bg-warning/10 text-warning">Unavailable</span></td><td class="px-3 py-2.5 align-top"><span class="text-xs text-text-muted">Not configurable</span></td></tr><tr class="border-b border-border-subtle bg-surface-2/60"><th scope="colgroup" colSpan="4" class="px-3 py-2 text-left"><span class="flex flex-wrap items-center gap-2"><span class="text-[13px] font-medium text-text-main">Output styles</span><span class="text-xs text-text-muted">3<!-- --> engine<!-- -->s</span></span></th></tr><tr class="border-b border-border-subtle last:border-b-0" aria-disabled="false"><td class="min-w-[18rem] px-3 py-2.5 align-top"><div class="flex min-w-0 flex-col gap-0.5"><span class="flex flex-wrap items-center gap-2"><span class="text-[13px] font-medium text-text-main">Output style: terse prose</span><code class="font-mono text-[11px] text-text-subtle">terse-prose</code><span class="text-xs px-2 py-0.5 rounded-md bg-surface-2 text-text-muted">instruction injection</span></span><span class="text-[13px] leading-relaxed text-text-muted">Covered: Caveman injects terse-prose response-shaping instructions into the system message without rewriting output. No separate engine — toggled via caveman settings.</span></div></td><td class="min-w-[16rem] px-3 py-2.5 align-top"><span class="line-clamp-2 font-mono text-[11px] text-text-muted" title="covered by existing Caveman prompt injection (open-sse/rtk/caveman.js)">covered by existing Caveman prompt injection (open-sse/rtk/caveman.js)</span></td><td class="px-3 py-2.5 align-top"><span class="text-xs px-2 py-0.5 rounded-md bg-surface-2 text-text-muted">Off · via Caveman</span></td><td class="px-3 py-2.5 align-top"><a href="#caveman-control" class="text-xs text-primary hover:underline">Caveman control</a></td></tr><tr class="border-b border-border-subtle last:border-b-0" aria-disabled="false"><td class="min-w-[18rem] px-3 py-2.5 align-top"><div class="flex min-w-0 flex-col gap-0.5"><span class="flex flex-wrap items-center gap-2"><span class="text-[13px] font-medium text-text-main">Output style: less code</span><code class="font-mono text-[11px] text-text-subtle">less-code</code><span class="text-xs px-2 py-0.5 rounded-md bg-surface-2 text-text-muted">instruction injection</span></span><span class="text-[13px] leading-relaxed text-text-muted">Covered: Ponytail injects less-code response-shaping instructions into the system message without rewriting output. No separate engine — toggled via ponytail settings.</span></div></td><td class="min-w-[16rem] px-3 py-2.5 align-top"><span class="line-clamp-2 font-mono text-[11px] text-text-muted" title="covered by existing Ponytail prompt injection (open-sse/rtk/ponytail.js)">covered by existing Ponytail prompt injection (open-sse/rtk/ponytail.js)</span></td><td class="px-3 py-2.5 align-top"><span class="text-xs px-2 py-0.5 rounded-md bg-surface-2 text-text-muted">Off · via Ponytail</span></td><td class="px-3 py-2.5 align-top"><a href="#ponytail-control" class="text-xs text-primary hover:underline">Ponytail control</a></td></tr><tr class="border-b border-border-subtle last:border-b-0" aria-disabled="false"><td class="min-w-[18rem] px-3 py-2.5 align-top"><div class="flex min-w-0 flex-col gap-0.5"><span class="flex flex-wrap items-center gap-2"><span class="text-[13px] font-medium text-text-main">Ponytail output style</span><code class="font-mono text-[11px] text-text-subtle">ponytail</code></span><span class="text-[13px] leading-relaxed text-text-muted">Injects the lazy-senior-dev response-shaping instruction into the system message. Opt-in.</span></div></td><td class="min-w-[16rem] px-3 py-2.5 align-top"><span class="line-clamp-2 font-mono text-[11px] text-text-muted" title="open-sse/rtk/ponytail.js — system-prompt injector (level lite/full/ultra)">open-sse/rtk/ponytail.js — system-prompt injector (level lite/full/ultra)</span></td><td class="px-3 py-2.5 align-top"><span class="text-xs px-2 py-0.5 rounded-md bg-surface-2 text-text-muted">Off</span></td><td class="px-3 py-2.5 align-top"><a href="#ponytail-control" class="text-xs text-primary hover:underline">Control</a></td></tr></tbody></table></div></div><div class="ui-card border rounded-xl bg-surface border-border shadow-soft p-5" data-variant="default" id="token-saver-general"><div class="flex items-center justify-between gap-4 mb-4"><div class="flex items-center gap-3 min-w-0"><div class="icon-box text-primary shrink-0"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[18px]" aria-hidden="true" data-icon="tune"><path d="M176,80a8,8,0,0,1,8-8h32a8,8,0,0,1,0,16H184A8,8,0,0,1,176,80ZM40,88H144v16a8,8,0,0,0,16,0V56a8,8,0,0,0-16,0V72H40a8,8,0,0,0,0,16Zm176,80H120a8,8,0,0,0,0,16h96a8,8,0,0,0,0-16ZM88,144a8,8,0,0,0-8,8v16H40a8,8,0,0,0,0,16H80v16a8,8,0,0,0,16,0V152A8,8,0,0,0,88,144Z"></path></svg></div><div class="min-w-0"><h3 class="ui-card-title text-text-main font-semibold text-[15px] tracking-tight leading-snug">Preferences</h3><p class="text-[12.5px] text-text-muted mt-0.5 leading-relaxed">Global behavior shared by every compression engine.</p></div></div></div><div class="divide-y divide-border-subtle"><div class="grid gap-3 py-4 first:pt-0 last:pb-0 sm:grid-cols-[minmax(0,1fr)_auto] sm:items-start sm:gap-6"><div class="min-w-0"><div class="flex flex-wrap items-center gap-2"><p class="text-sm font-medium text-text-main">Auto-trigger threshold</p></div><p class="mt-0.5 text-[13px] leading-relaxed text-text-muted">RTK runs only when the deterministic request-size estimate is &gt;= this token count; 0 = always.</p></div><div class="flex shrink-0 items-center gap-2 sm:pt-0.5"><div class="flex flex-col gap-1.5 w-36"><div class="relative"><input id="_R_26elfiv5umbrb_" type="number" class="w-full h-[34px] py-1.5 px-3 text-sm text-text-main bg-surface rounded-md border border-border placeholder:text-text-subtle focus:outline-none focus:ring-2 focus:ring-primary/25 focus:border-primary transition-colors duration-150 disabled:opacity-50 disabled:cursor-not-allowed text-[16px] sm:text-sm font-mono text-sm" min="0" step="100" aria-label="Auto-trigger threshold in tokens" value="4000"/></div></div></div></div><div class="grid gap-3 py-4 first:pt-0 last:pb-0 sm:grid-cols-[minmax(0,1fr)_auto] sm:items-start sm:gap-6"><div class="min-w-0"><div class="flex flex-wrap items-center gap-2"><p class="text-sm font-medium text-text-main">Response focus</p></div><p class="mt-0.5 text-[13px] leading-relaxed text-text-muted">Code-first or explanation-first answers. Balanced adds no extra focus instruction.</p></div><div class="flex shrink-0 items-center gap-2 sm:pt-0.5"><div class="flex flex-col gap-1.5 w-44"><div class="relative"><select id="_R_2aelfiv5umbrb_" class="w-full h-[34px] py-1.5 px-3 pr-10 text-sm text-text-main bg-surface border border-border rounded-md appearance-none focus:outline-none focus:ring-2 focus:ring-primary/25 focus:border-primary transition-colors duration-150 disabled:opacity-50 disabled:cursor-not-allowed text-[16px] sm:text-sm" aria-label="Response focus"><option value="" disabled="">Select an option</option><option value="balanced" selected="">Balanced</option><option value="code">Code-first</option><option value="explanation">Explanation-first</option></select><div class="absolute inset-y-0 right-0 flex items-center pr-3 pointer-events-none text-text-muted"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[18px]" aria-hidden="true" data-icon="expand_more"><path d="M216.49,104.49l-80,80a12,12,0,0,1-17,0l-80-80a12,12,0,0,1,17-17L128,159l71.51-71.52a12,12,0,0,1,17,17Z"></path></svg></div></div></div></div></div><div class="grid gap-3 py-4 first:pt-0 last:pb-0 sm:grid-cols-[minmax(0,1fr)_auto] sm:items-start sm:gap-6"><div class="min-w-0"><div class="flex flex-wrap items-center gap-2"><p class="text-sm font-medium text-text-main">Preserve system prompt</p></div><p class="mt-0.5 text-[13px] leading-relaxed text-text-muted">The system prompt is always captured in the L0 snapshot before token savers run and restored by the cache interlock (open-sse/cache/l0.js). Not user-toggleable.</p></div><div class="flex shrink-0 items-center gap-2 sm:pt-0.5"><span class="text-xs px-2 py-0.5 rounded-md bg-success/10 text-success">Always</span></div></div><div class="grid gap-3 py-4 first:pt-0 last:pb-0 sm:grid-cols-[minmax(0,1fr)_auto] sm:items-start sm:gap-6"><div class="min-w-0"><div class="flex flex-wrap items-center gap-2"><p class="text-sm font-medium text-text-main">Cache-aligned live zone</p></div><p class="mt-0.5 text-[13px] leading-relaxed text-text-muted">RTK compresses only the cache-aligned live tail (messages from cacheState.prefixLen onward); Kiro/Responses keep full-body behavior. Not user-toggleable.</p></div><div class="flex shrink-0 items-center gap-2 sm:pt-0.5"><span class="text-xs px-2 py-0.5 rounded-md bg-success/10 text-success">Enabled · fixed</span></div></div></div></div></div><div class="ui-card border rounded-xl bg-surface border-border shadow-soft p-4" data-variant="default"><div class="flex items-center justify-between gap-4 mb-4"><div class="flex items-center gap-3 min-w-0"><div class="icon-box text-primary shrink-0"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[18px]" aria-hidden="true" data-icon="token"><path d="M229.5,113,166.06,89.94,143,26.5a16,16,0,0,0-30,0L89.94,89.94,26.5,113a16,16,0,0,0,0,30l63.44,23.07L113,229.5a16,16,0,0,0,30,0l23.07-63.44L229.5,143a16,16,0,0,0,0-30ZM157.08,152.3a8,8,0,0,0-4.78,4.78L128,223.9l-24.3-66.82a8,8,0,0,0-4.78-4.78L32.1,128l66.82-24.3a8,8,0,0,0,4.78-4.78L128,32.1l24.3,66.82a8,8,0,0,0,4.78,4.78L223.9,128Z"></path></svg></div><div class="min-w-0"><h3 class="ui-card-title text-text-main font-semibold text-[15px] tracking-tight leading-snug">Token saver savings</h3><p class="text-[12.5px] text-text-muted mt-0.5 leading-relaxed">Savings by stage · 7d</p></div></div><div role="group" aria-label="Token saver period" class="ui-segmented-control inline-flex items-center p-1 rounded-lg overflow-x-auto gap-0.5 bg-surface-2 border border-border"><button type="button" aria-pressed="false" class="inline-flex items-center justify-center shrink-0 px-3 rounded-md font-medium transition-all duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary h-7 text-xs border border-transparent text-text-muted hover:text-text-main">Today</button><button type="button" aria-pressed="false" class="inline-flex items-center justify-center shrink-0 px-3 rounded-md font-medium transition-all duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary h-7 text-xs border border-transparent text-text-muted hover:text-text-main">24h</button><button type="button" aria-pressed="true" class="inline-flex items-center justify-center shrink-0 px-3 rounded-md font-medium transition-all duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary h-7 text-xs bg-surface text-primary font-semibold border border-border-subtle shadow-2xs">7D</button><button type="button" aria-pressed="false" class="inline-flex items-center justify-center shrink-0 px-3 rounded-md font-medium transition-all duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary h-7 text-xs border border-transparent text-text-muted hover:text-text-main">30D</button><button type="button" aria-pressed="false" class="inline-flex items-center justify-center shrink-0 px-3 rounded-md font-medium transition-all duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary h-7 text-xs border border-transparent text-text-muted hover:text-text-main">60D</button></div></div><div class="flex h-40 items-center justify-center text-sm text-text-muted" role="status" aria-live="polite">Loading token-saver stats…</div></div></div><!--$--><!--/$--></div></div></main></div><script src="/_next/static/chunks/webpack-cfe64bcd232c635c.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[21110,[\"9647\",\"static/chunks/9647-83de9c8c0d2ffe2a.js\",\"2048\",\"static/chunks/2048-9d3db5763af19b9f.js\",\"6439\",\"static/chunks/6439-3dc656d19715c56c.js\",\"1321\",\"static/chunks/1321-b974e2c6d758f2eb.js\",\"5497\",\"static/chunks/5497-307a8ef5cdb7207e.js\",\"9305\",\"static/chunks/app/(dashboard)/layout-5b91d30e5ec17946.js\"],\"ThemeProvider\"]\n3:I[94635,[\"6198\",\"static/chunks/6198-c12e3b40da04e356.js\",\"1321\",\"static/chunks/1321-b974e2c6d758f2eb.js\",\"7177\",\"static/chunks/app/layout-0fd748451eb66376.js\"],\"RuntimeI18nProvider\"]\n4:I[57121,[],\"\"]\n5:I[74581,[],\"\"]\n6:I[30565,[\"6198\",\"static/chunks/6198-c12e3b40da04e356.js\",\"1321\",\"static/chunks/1321-b974e2c6d758f2eb.js\",\"7177\",\"static/chunks/app/layout-0fd748451eb66376.js\"],\"GoogleAnalytics\"]\n7:I[7648,[\"9647\",\"static/chunks/9647-83de9c8c0d2ffe2a.js\",\"2048\",\"static/chunks/2048-9d3db5763af19b9f.js\",\"6439\",\"static/chunks/6439-3dc656d19715c56c.js\",\"1321\",\"static/chunks/1321-b974e2c6d758f2eb.js\",\"5497\",\"static/chunks/5497-307a8ef5cdb7207e.js\",\"9305\",\"static/chunks/app/(dashboard)/layout-5b91d30e5ec17946.js\"],\"default\"]\n8:I[25607,[\"9647\",\"static/chunks/9647-83de9c8c0d2ffe2a.js\",\"2048\",\"static/chunks/2048-9d3db5763af19b9f.js\",\"8382\",\"static/chunks/8382-b04c92635bbb061a.js\",\"6439\",\"static/chunks/6439-3dc656d19715c56c.js\",\"1321\",\"static/chunks/1321-b974e2c6d758f2eb.js\",\"5497\",\"static/chunks/5497-307a8ef5cdb7207e.js\",\"9839\",\"static/chunks/app/(dashboard)/dashboard/token-saver/page-8eae7ddbc06522e6.js\"],\"default\"]\n9:I[60799,[\"9647\",\"static/chunks/9647-83de9c8c0d2ffe2a.js\",\"2048\",\"static/chunks/2048-9d3db5763af19b9f.js\",\"8382\",\"static/chunks/8382-b04c92635bbb061a.js\",\"6439\",\"static/chunks/6439-3dc656d19715c56c.js\",\"1321\",\"static/chunks/1321-b974e2c6d758f2eb.js\",\"5497\",\"static/chunks/5497-307a8ef5cdb7207e.js\",\"9839\",\"static/chunks/app/(dashboard)/dashboard/token-saver/page-8eae7ddbc06522e6.js\"],\"default\"]\na:I[90484,[],\"OutletBoundary\"]\nb:\"$Sreact.suspense\"\ne:I[90484,[],\"ViewportBoundary\"]\n10:I[90484,[],\"MetadataBoundary\"]\n12:I[27123,[],\"default\",1]\n:HL[\"/_next/static/css/1e41699163398962.css\",\"style\"]\n:HL[\"/_next/static/css/8ba5c8dbc4e30aa0.css\",\"style\"]\nd:X\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"dashboard\",\"token-saver\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"(dashboard)\",{\"children\":[\"dashboard\",{\"children\":[\"token-saver\",{\"children\":[\"__PAGE__\",{},\"$undefined\",\"$undefined\",4608]},\"$undefined\",\"$undefined\",4608]},\"$undefined\",\"$undefined\",4608]},\"$undefined\",\"$undefined\",4608]},\"$undefined\",\"$undefined\",4624],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/1e41699163398962.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/8ba5c8dbc4e30aa0.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"dark\",\"suppressHydrationWarning\":true,\"children\":[\"$\",\"body\",null,{\"className\":\"__variable_e2cc43 __variable_aa62b7 font-sans antialiased\",\"children\":[[\"$\",\"$L2\",null,{\"children\":[\"$\",\"$L3\",null,{\"children\":[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}],[\"$\",\"$L6\",null,{\"gaId\":\"G-LC959F603F\"}]]}]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L7\",null,{\"children\":[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:0:props:children:props:children:props:notFound:0:1:props:style\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:0:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style\",\"children\":404}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:0:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:0:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style\",\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"div\",null,{\"className\":\"flex flex-col gap-6\",\"children\":[[\"$\",\"$L8\",null,{}],[\"$\",\"$L9\",null,{}]]}],null,[\"$\",\"$La\",null,{\"children\":[\"$\",\"$b\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@c\"}]}]]}],{},null,false,null]},null,false,\"$d\"]},null,false,\"$d\"]},null,false,null]},null,false,null],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$Le\",null,{\"children\":\"$Lf\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$L10\",null,{\"children\":[\"$\",\"$b\",null,{\"name\":\"Next.Metadata\",\"children\":\"$L11\"}]}]}],null]}],false]],\"m\":\"$undefined\",\"G\":[\"$12\",[]],\"S\":true,\"h\":null,\"r\":\"$undefined\",\"s\":\"$undefined\",\"a\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"X4uxXfKI78mMCnlqFsTAr\"}\n"])</script><script>self.__next_f.push([1,"d:C\nf:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}],[\"$\",\"meta\",\"2\",{\"name\":\"theme-color\",\"content\":\"#F5F4F0\",\"media\":\"(prefers-color-scheme: light)\"}],[\"$\",\"meta\",\"3\",{\"name\":\"theme-color\",\"content\":\"#09090B\",\"media\":\"(prefers-color-scheme: dark)\"}]]\n"])</script><script>self.__next_f.push([1,"13:I[86869,[],\"IconMark\"]\nc:null\n11:[[\"$\",\"title\",\"0\",{\"children\":\"MiawRouter - Local AI Request Router\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Route AI requests through one local endpoint and manage provider connections in a web dashboard.\"}],[\"$\",\"link\",\"2\",{\"rel\":\"manifest\",\"href\":\"/manifest.webmanifest\",\"crossOrigin\":\"$undefined\"}],[\"$\",\"link\",\"3\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?7ea3ab789c052974\",\"type\":\"image/x-icon\",\"sizes\":\"256x256\"}],[\"$\",\"link\",\"4\",{\"rel\":\"icon\",\"href\":\"/miawrouter-favicon-16.png\",\"sizes\":\"16x16\"}],[\"$\",\"link\",\"5\",{\"rel\":\"icon\",\"href\":\"/miawrouter-favicon-32.png\",\"sizes\":\"32x32\"}],[\"$\",\"link\",\"6\",{\"rel\":\"icon\",\"href\":\"/miawrouter-favicon-48.png\",\"sizes\":\"48x48\"}],[\"$\",\"$L13\",\"7\",{}]]\n"])</script></body></html>
1
+ <!DOCTYPE html><html lang="en" class="dark"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/miawrouter-favicon-32.png"/><link rel="stylesheet" href="/_next/static/css/1e41699163398962.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/01b1ec05918332c3.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-cfe64bcd232c635c.js"/><script src="/_next/static/chunks/4bd1b696-8a4ab4fdf0ae305a.js" async=""></script><script src="/_next/static/chunks/3794-6cecce02b123eb1f.js" async=""></script><script src="/_next/static/chunks/main-app-fa3e3fb218f9eade.js" async=""></script><script src="/_next/static/chunks/9647-83de9c8c0d2ffe2a.js" async=""></script><script src="/_next/static/chunks/2048-9d3db5763af19b9f.js" async=""></script><script src="/_next/static/chunks/6439-3dc656d19715c56c.js" async=""></script><script src="/_next/static/chunks/1321-6b997794bb843da8.js" async=""></script><script src="/_next/static/chunks/5497-307a8ef5cdb7207e.js" async=""></script><script src="/_next/static/chunks/app/(dashboard)/layout-5b91d30e5ec17946.js" async=""></script><script src="/_next/static/chunks/6198-c12e3b40da04e356.js" async=""></script><script src="/_next/static/chunks/app/layout-0fd748451eb66376.js" async=""></script><script src="/_next/static/chunks/8382-b04c92635bbb061a.js" async=""></script><script src="/_next/static/chunks/app/(dashboard)/dashboard/token-saver/page-8eae7ddbc06522e6.js" async=""></script><link rel="preload" href="https://www.googletagmanager.com/gtag/js?id=G-LC959F603F" as="script"/><meta name="theme-color" content="#F5F4F0" media="(prefers-color-scheme: light)"/><meta name="theme-color" content="#09090B" media="(prefers-color-scheme: dark)"/><title>MiawRouter - Local AI Request Router</title><meta name="description" content="Route AI requests through one local endpoint and manage provider connections in a web dashboard."/><link rel="manifest" href="/manifest.webmanifest"/><link rel="icon" href="/favicon.ico?7ea3ab789c052974" type="image/x-icon" sizes="256x256"/><link rel="icon" href="/miawrouter-favicon-16.png" sizes="16x16"/><link rel="icon" href="/miawrouter-favicon-32.png" sizes="32x32"/><link rel="icon" href="/miawrouter-favicon-48.png" sizes="48x48"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="__variable_e2cc43 __variable_aa62b7 font-sans antialiased"><div hidden=""><!--$--><!--/$--></div><div class="flex h-dvh w-full overflow-hidden bg-bg text-text-main"><div class="fixed top-4 right-4 z-[80] flex w-[min(92vw,380px)] flex-col gap-2"></div><div class="hidden lg:flex h-full shrink-0"><aside class="sidebar-shell flex w-[256px] h-full flex-col transition-[width] duration-150"><div class="sidebar-brand flex flex-col gap-2 px-3.5 py-3"><div class="flex items-center gap-2.5"><a class="flex min-w-0 flex-1 items-center gap-2.5" title="MiawRouter dashboard" href="/dashboard"><div class="sidebar-brand-icon flex size-9 shrink-0 items-center justify-center overflow-hidden rounded-lg border border-border bg-surface shadow-xs"><img src="/miawrouter-favicon-32.png" data-brand-asset="icon" alt="" aria-hidden="true" class="size-full object-contain p-0.5"/></div><div class="sidebar-brand-copy flex min-w-0 flex-col"><div class="flex items-center gap-1.5"><h1 class="truncate text-[14.5px] font-bold tracking-tight text-text-main">MiawRouter Proxy</h1><span class="status-dot status-dot-live" title="Gateway Active"></span></div><span class="text-[10.5px] font-mono font-medium text-text-muted">V1.2.4<!-- --> · AI Router</span></div></a><button type="button" class="sidebar-collapse-toggle inline-flex size-8 shrink-0 items-center justify-center rounded-lg text-text-muted hover:bg-surface-2 hover:text-text-main" aria-label="Collapse sidebar" title="Collapse sidebar"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[15px]" aria-hidden="true" data-icon="chevron_left"><path d="M168.49,199.51a12,12,0,0,1-17,17l-80-80a12,12,0,0,1,0-17l80-80a12,12,0,0,1,17,17L97,128Z"></path></svg></button></div></div><label class="sidebar-search"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[15px] text-text-muted shrink-0" aria-hidden="true" data-icon="search"><path d="M232.49,215.51,185,168a92.12,92.12,0,1,0-17,17l47.53,47.54a12,12,0,0,0,17-17ZM44,112a68,68,0,1,1,68,68A68.07,68.07,0,0,1,44,112Z"></path></svg><input aria-label="Search navigation" placeholder="Jump to menu…" value=""/></label><div class="sidebar-endpoint-row"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="text-[14px] text-primary shrink-0" style="display:inline-block;vertical-align:middle;flex-shrink:0" aria-hidden="true" data-icon="hub"><circle cx="12" cy="12" r="3.25" fill="currentColor" fill-opacity="0.18" stroke="currentColor" stroke-width="1.75"></circle><circle cx="5" cy="6" r="2.25" stroke="currentColor" stroke-width="1.75"></circle><circle cx="19" cy="6" r="2.25" stroke="currentColor" stroke-width="1.75"></circle><circle cx="5" cy="18" r="2.25" stroke="currentColor" stroke-width="1.75"></circle><circle cx="19" cy="18" r="2.25" stroke="currentColor" stroke-width="1.75"></circle><path d="M6.8 7.5 9.6 9.9M17.2 7.5l-2.8 2.4M6.8 16.5l2.8-2.4M17.2 16.5l-2.8-2.4" stroke="currentColor" stroke-width="1.65" stroke-linecap="round"></path></svg><span class="sr-only">Local endpoint</span><code class="min-w-0 flex-1 truncate font-mono text-[11px] font-medium text-text-main" title=""></code><button type="button" disabled="" class="inline-flex size-6 shrink-0 items-center justify-center rounded-md text-text-muted transition-colors hover:bg-surface hover:text-primary disabled:opacity-50" aria-label="Copy local endpoint" title="Copy local endpoint"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[13px]" aria-hidden="true" data-icon="content_copy"><path d="M216,32H88a8,8,0,0,0-8,8V80H40a8,8,0,0,0-8,8V216a8,8,0,0,0,8,8H168a8,8,0,0,0,8-8V176h40a8,8,0,0,0,8-8V40A8,8,0,0,0,216,32ZM160,208H48V96H160Zm48-48H176V88a8,8,0,0,0-8-8H96V48H208Z"></path></svg></button></div><nav class="flex-1 px-2.5 py-2 space-y-1.5 overflow-y-auto custom-scrollbar"><div class="mb-2 rounded-xl border border-border bg-surface/70 p-1.5"><div class="flex items-center justify-between px-1.5 pb-1"><span class="text-[10px] font-mono font-semibold uppercase tracking-wider text-text-muted">Quick Access</span><span class="text-[10px] font-mono text-text-subtle">1-Click Hub</span></div><div class="grid grid-cols-2 gap-1"><a class="flex items-center gap-1.5 rounded-lg px-2 py-1.5 text-[11.5px] font-medium transition-all truncate text-text-muted hover:bg-surface-2/70 hover:text-text-main border border-transparent" title="Overview" href="/dashboard"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="text-[13px] shrink-0 text-text-muted" style="display:inline-block;vertical-align:middle;flex-shrink:0" aria-hidden="true" data-icon="dashboard"><rect x="3" y="3" width="7.5" height="7.5" rx="2" fill="currentColor" fill-opacity="0.16" stroke="currentColor" stroke-width="1.75"></rect><rect x="13.5" y="3" width="7.5" height="7.5" rx="2" stroke="currentColor" stroke-width="1.75"></rect><rect x="3" y="13.5" width="7.5" height="7.5" rx="2" stroke="currentColor" stroke-width="1.75"></rect><rect x="13.5" y="13.5" width="7.5" height="7.5" rx="2" fill="currentColor" fill-opacity="0.16" stroke="currentColor" stroke-width="1.75"></rect></svg><span class="truncate">Overview</span></a><a class="flex items-center gap-1.5 rounded-lg px-2 py-1.5 text-[11.5px] font-medium transition-all truncate text-text-muted hover:bg-surface-2/70 hover:text-text-main border border-transparent" title="Usage &amp; Routing" href="/dashboard/usage"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="text-[13px] shrink-0 text-text-muted" style="display:inline-block;vertical-align:middle;flex-shrink:0" aria-hidden="true" data-icon="bar_chart"><rect x="3.5" y="12.5" width="4" height="7.5" rx="1.2" stroke="currentColor" stroke-width="1.75"></rect><rect x="10" y="8" width="4" height="12" rx="1.2" fill="currentColor" fill-opacity="0.18" stroke="currentColor" stroke-width="1.75"></rect><rect x="16.5" y="4" width="4" height="16" rx="1.2" stroke="currentColor" stroke-width="1.75"></rect></svg><span class="truncate">Usage &amp; Routing</span></a><a class="flex items-center gap-1.5 rounded-lg px-2 py-1.5 text-[11.5px] font-medium transition-all truncate text-text-muted hover:bg-surface-2/70 hover:text-text-main border border-transparent" title="Providers" href="/dashboard/providers"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="text-[13px] shrink-0 text-text-muted" style="display:inline-block;vertical-align:middle;flex-shrink:0" aria-hidden="true" data-icon="dns"><rect x="3" y="3.5" width="18" height="7" rx="2" fill="currentColor" fill-opacity="0.14" stroke="currentColor" stroke-width="1.75"></rect><rect x="3" y="13.5" width="18" height="7" rx="2" stroke="currentColor" stroke-width="1.75"></rect><circle cx="7" cy="7" r="1.1" fill="currentColor"></circle><circle cx="7" cy="17" r="1.1" fill="currentColor"></circle><path d="M11.5 7h5.5M11.5 17h5.5" stroke="currentColor" stroke-width="1.75" stroke-linecap="round"></path></svg><span class="truncate">Providers</span></a><a class="flex items-center gap-1.5 rounded-lg px-2 py-1.5 text-[11.5px] font-medium transition-all truncate text-text-muted hover:bg-surface-2/70 hover:text-text-main border border-transparent" title="Endpoint" href="/dashboard/endpoint"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="text-[13px] shrink-0 text-text-muted" style="display:inline-block;vertical-align:middle;flex-shrink:0" aria-hidden="true" data-icon="vpn_key"><circle cx="8" cy="12" r="4.5" fill="currentColor" fill-opacity="0.14" stroke="currentColor" stroke-width="1.75"></circle><circle cx="7.5" cy="12" r="1.2" fill="currentColor"></circle><path d="M12.5 12H21m-2.5 0v3m-3-3v2.2" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="truncate">Endpoint</span></a></div></div><div class="space-y-1"><div class="flex items-center justify-between px-2 py-0.5"><span class="sidebar-section-caption text-text-muted">Console Menu</span><span class="text-[10px] font-mono text-text-subtle">Accordion</span></div><div class="rounded-lg transition-colors"><button type="button" class="w-full flex items-center gap-2.5 px-2.5 py-2 rounded-lg text-left transition-all cursor-pointer group bg-surface-2 text-text-main font-semibold shadow-2xs border border-border" aria-expanded="true" title="Core &amp; Gateway"><span class="inline-flex size-6 shrink-0 items-center justify-center rounded-md border transition-colors border-primary/30 bg-primary/10 text-primary"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="text-[14px]" style="display:inline-block;vertical-align:middle;flex-shrink:0" aria-hidden="true" data-icon="dashboard"><rect x="3" y="3" width="7.5" height="7.5" rx="2" fill="currentColor" fill-opacity="0.16" stroke="currentColor" stroke-width="1.75"></rect><rect x="13.5" y="3" width="7.5" height="7.5" rx="2" stroke="currentColor" stroke-width="1.75"></rect><rect x="3" y="13.5" width="7.5" height="7.5" rx="2" stroke="currentColor" stroke-width="1.75"></rect><rect x="13.5" y="13.5" width="7.5" height="7.5" rx="2" fill="currentColor" fill-opacity="0.16" stroke="currentColor" stroke-width="1.75"></rect></svg></span><span class="text-[13px] tracking-tight flex-1 truncate">Core &amp; Gateway</span><span class="nav-section-count">5</span><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[13px] text-text-muted/80 transition-transform duration-150 shrink-0" style="transform:rotate(0deg)" aria-hidden="true" data-icon="expand_more"><path d="M216.49,104.49l-80,80a12,12,0,0,1-17,0l-80-80a12,12,0,0,1,17-17L128,159l71.51-71.52a12,12,0,0,1,17,17Z"></path></svg></button><div class="mt-1 ml-3.5 pl-2.5 border-l border-border space-y-0.5 py-0.5"><a class="nav-item group py-1.5 min-h-[33px]" title="Overview" href="/dashboard"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="shrink-0 transition-transform duration-150 group-hover:scale-105 text-[15px] text-text-muted group-hover:text-primary transition-colors" style="display:inline-block;vertical-align:middle;flex-shrink:0" aria-hidden="true" data-icon="dashboard"><rect x="3" y="3" width="7.5" height="7.5" rx="2" fill="currentColor" fill-opacity="0.16" stroke="currentColor" stroke-width="1.75"></rect><rect x="13.5" y="3" width="7.5" height="7.5" rx="2" stroke="currentColor" stroke-width="1.75"></rect><rect x="3" y="13.5" width="7.5" height="7.5" rx="2" stroke="currentColor" stroke-width="1.75"></rect><rect x="13.5" y="13.5" width="7.5" height="7.5" rx="2" fill="currentColor" fill-opacity="0.16" stroke="currentColor" stroke-width="1.75"></rect></svg><span class="truncate text-[12.5px] flex-1">Overview</span></a><a class="nav-item group py-1.5 min-h-[33px]" title="Endpoint &amp; Key" href="/dashboard/endpoint"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="shrink-0 transition-transform duration-150 group-hover:scale-105 text-[15px] text-text-muted group-hover:text-primary transition-colors" style="display:inline-block;vertical-align:middle;flex-shrink:0" aria-hidden="true" data-icon="vpn_key"><circle cx="8" cy="12" r="4.5" fill="currentColor" fill-opacity="0.14" stroke="currentColor" stroke-width="1.75"></circle><circle cx="7.5" cy="12" r="1.2" fill="currentColor"></circle><path d="M12.5 12H21m-2.5 0v3m-3-3v2.2" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="truncate text-[12.5px] flex-1">Endpoint &amp; Key</span></a><a class="nav-item group py-1.5 min-h-[33px]" title="Providers" href="/dashboard/providers"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="shrink-0 transition-transform duration-150 group-hover:scale-105 text-[15px] text-text-muted group-hover:text-primary transition-colors" style="display:inline-block;vertical-align:middle;flex-shrink:0" aria-hidden="true" data-icon="dns"><rect x="3" y="3.5" width="18" height="7" rx="2" fill="currentColor" fill-opacity="0.14" stroke="currentColor" stroke-width="1.75"></rect><rect x="3" y="13.5" width="18" height="7" rx="2" stroke="currentColor" stroke-width="1.75"></rect><circle cx="7" cy="7" r="1.1" fill="currentColor"></circle><circle cx="7" cy="17" r="1.1" fill="currentColor"></circle><path d="M11.5 7h5.5M11.5 17h5.5" stroke="currentColor" stroke-width="1.75" stroke-linecap="round"></path></svg><span class="truncate text-[12.5px] flex-1">Providers</span></a><a class="nav-item group py-1.5 min-h-[33px]" title="Health" href="/dashboard/health"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="shrink-0 transition-transform duration-150 group-hover:scale-105 text-[15px] text-text-muted group-hover:text-primary transition-colors" style="display:inline-block;vertical-align:middle;flex-shrink:0" aria-hidden="true" data-icon="ecg_heart"><rect x="2.75" y="4" width="18.5" height="16" rx="3" fill="currentColor" fill-opacity="0.1" stroke="currentColor" stroke-width="1.75"></rect><path d="M5.5 12h3l2-4 3 8 2-4h3" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="truncate text-[12.5px] flex-1">Health</span></a><a class="nav-item group py-1.5 min-h-[33px]" title="Runtime" href="/dashboard/runtime"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="shrink-0 transition-transform duration-150 group-hover:scale-105 text-[15px] text-text-muted group-hover:text-primary transition-colors" style="display:inline-block;vertical-align:middle;flex-shrink:0" aria-hidden="true" data-icon="memory"><rect x="6" y="6" width="12" height="12" rx="2.2" fill="currentColor" fill-opacity="0.14" stroke="currentColor" stroke-width="1.75"></rect><rect x="9.25" y="9.25" width="5.5" height="5.5" rx="1" stroke="currentColor" stroke-width="1.5"></rect><path d="M9 3v3m6-3v3M9 18v3m6-3v3M3 9h3m-3 6h3m12-6h3m-3 6h3" stroke="currentColor" stroke-width="1.75" stroke-linecap="round"></path></svg><span class="truncate text-[12.5px] flex-1">Runtime</span></a></div></div><div class="rounded-lg transition-colors"><button type="button" class="w-full flex items-center gap-2.5 px-2.5 py-2 rounded-lg text-left transition-all cursor-pointer group text-text-muted hover:bg-surface-2/60 hover:text-text-main border border-transparent" aria-expanded="false" title="Usage &amp; Analytics"><span class="inline-flex size-6 shrink-0 items-center justify-center rounded-md border transition-colors border-border-subtle bg-surface text-text-muted group-hover:text-text-main"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="text-[14px]" style="display:inline-block;vertical-align:middle;flex-shrink:0" aria-hidden="true" data-icon="bar_chart"><rect x="3.5" y="12.5" width="4" height="7.5" rx="1.2" stroke="currentColor" stroke-width="1.75"></rect><rect x="10" y="8" width="4" height="12" rx="1.2" fill="currentColor" fill-opacity="0.18" stroke="currentColor" stroke-width="1.75"></rect><rect x="16.5" y="4" width="4" height="16" rx="1.2" stroke="currentColor" stroke-width="1.75"></rect></svg></span><span class="text-[13px] tracking-tight flex-1 truncate">Usage &amp; Analytics</span><span class="nav-section-count">6</span><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[13px] text-text-muted/80 transition-transform duration-150 shrink-0" style="transform:rotate(-90deg)" aria-hidden="true" data-icon="expand_more"><path d="M216.49,104.49l-80,80a12,12,0,0,1-17,0l-80-80a12,12,0,0,1,17-17L128,159l71.51-71.52a12,12,0,0,1,17,17Z"></path></svg></button></div><div class="rounded-lg transition-colors"><button type="button" class="w-full flex items-center gap-2.5 px-2.5 py-2 rounded-lg text-left transition-all cursor-pointer group bg-surface-2/60 text-text-main font-semibold border border-border-subtle" aria-expanded="false" title="Routing &amp; Config"><span class="inline-flex size-6 shrink-0 items-center justify-center rounded-md border transition-colors border-primary/30 bg-primary/10 text-primary"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[14px]" aria-hidden="true" data-icon="tune"><path d="M176,80a8,8,0,0,1,8-8h32a8,8,0,0,1,0,16H184A8,8,0,0,1,176,80ZM40,88H144v16a8,8,0,0,0,16,0V56a8,8,0,0,0-16,0V72H40a8,8,0,0,0,0,16Zm176,80H120a8,8,0,0,0,0,16h96a8,8,0,0,0,0-16ZM88,144a8,8,0,0,0-8,8v16H40a8,8,0,0,0,0,16H80v16a8,8,0,0,0,16,0V152A8,8,0,0,0,88,144Z"></path></svg></span><span class="text-[13px] tracking-tight flex-1 truncate">Routing &amp; Config</span><span class="size-1.5 rounded-full bg-primary shrink-0" title="Active page in section"></span><span class="nav-section-count">8</span><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[13px] text-text-muted/80 transition-transform duration-150 shrink-0" style="transform:rotate(-90deg)" aria-hidden="true" data-icon="expand_more"><path d="M216.49,104.49l-80,80a12,12,0,0,1-17,0l-80-80a12,12,0,0,1,17-17L128,159l71.51-71.52a12,12,0,0,1,17,17Z"></path></svg></button></div><div class="rounded-lg transition-colors"><button type="button" class="w-full flex items-center gap-2.5 px-2.5 py-2 rounded-lg text-left transition-all cursor-pointer group text-text-muted hover:bg-surface-2/60 hover:text-text-main border border-transparent" aria-expanded="false" title="Workspace Tools"><span class="inline-flex size-6 shrink-0 items-center justify-center rounded-md border transition-colors border-border-subtle bg-surface text-text-muted group-hover:text-text-main"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="text-[14px]" style="display:inline-block;vertical-align:middle;flex-shrink:0" aria-hidden="true" data-icon="terminal"><rect x="2.75" y="4" width="18.5" height="16" rx="2.75" fill="currentColor" fill-opacity="0.12" stroke="currentColor" stroke-width="1.75"></rect><path d="m7 9.5 3 2.5-3 2.5m5.5 0H16" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"></path></svg></span><span class="text-[13px] tracking-tight flex-1 truncate">Workspace Tools</span><span class="nav-section-count">6</span><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[13px] text-text-muted/80 transition-transform duration-150 shrink-0" style="transform:rotate(-90deg)" aria-hidden="true" data-icon="expand_more"><path d="M216.49,104.49l-80,80a12,12,0,0,1-17,0l-80-80a12,12,0,0,1,17-17L128,159l71.51-71.52a12,12,0,0,1,17,17Z"></path></svg></button></div><div class="rounded-lg transition-colors"><button type="button" class="w-full flex items-center gap-2.5 px-2.5 py-2 rounded-lg text-left transition-all cursor-pointer group text-text-muted hover:bg-surface-2/60 hover:text-text-main border border-transparent" aria-expanded="false" title="Integrations &amp; API"><span class="inline-flex size-6 shrink-0 items-center justify-center rounded-md border transition-colors border-border-subtle bg-surface text-text-muted group-hover:text-text-main"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="text-[14px]" style="display:inline-block;vertical-align:middle;flex-shrink:0" aria-hidden="true" data-icon="cable"><path d="M7.5 6.5v4a3 3 0 0 0 3 3h3a3 3 0 0 0 3-3v-4" fill="currentColor" fill-opacity="0.14" stroke="currentColor" stroke-width="1.75" stroke-linejoin="round"></path><path d="M9.5 3.5v3m5-3v3M12 13.5v7" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"></path></svg></span><span class="text-[13px] tracking-tight flex-1 truncate">Integrations &amp; API</span><span class="nav-section-count">5</span><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[13px] text-text-muted/80 transition-transform duration-150 shrink-0" style="transform:rotate(-90deg)" aria-hidden="true" data-icon="expand_more"><path d="M216.49,104.49l-80,80a12,12,0,0,1-17,0l-80-80a12,12,0,0,1,17-17L128,159l71.51-71.52a12,12,0,0,1,17,17Z"></path></svg></button></div><div class="rounded-lg transition-colors"><button type="button" class="w-full flex items-center gap-2.5 px-2.5 py-2 rounded-lg text-left transition-all cursor-pointer group text-text-muted hover:bg-surface-2/60 hover:text-text-main border border-transparent" aria-expanded="false" title="Agents &amp; Skills"><span class="inline-flex size-6 shrink-0 items-center justify-center rounded-md border transition-colors border-border-subtle bg-surface text-text-muted group-hover:text-text-main"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[14px]" aria-hidden="true" data-icon="smart_toy"><path d="M200,48H136V16a8,8,0,0,0-16,0V48H56A32,32,0,0,0,24,80V192a32,32,0,0,0,32,32H200a32,32,0,0,0,32-32V80A32,32,0,0,0,200,48Zm16,144a16,16,0,0,1-16,16H56a16,16,0,0,1-16-16V80A16,16,0,0,1,56,64H200a16,16,0,0,1,16,16Zm-52-56H92a28,28,0,0,0,0,56h72a28,28,0,0,0,0-56Zm-24,16v24H116V152ZM80,164a12,12,0,0,1,12-12h8v24H92A12,12,0,0,1,80,164Zm84,12h-8V152h8a12,12,0,0,1,0,24ZM72,108a12,12,0,1,1,12,12A12,12,0,0,1,72,108Zm88,0a12,12,0,1,1,12,12A12,12,0,0,1,160,108Z"></path></svg></span><span class="text-[13px] tracking-tight flex-1 truncate">Agents &amp; Skills</span><span class="nav-section-count">5</span><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[13px] text-text-muted/80 transition-transform duration-150 shrink-0" style="transform:rotate(-90deg)" aria-hidden="true" data-icon="expand_more"><path d="M216.49,104.49l-80,80a12,12,0,0,1-17,0l-80-80a12,12,0,0,1,17-17L128,159l71.51-71.52a12,12,0,0,1,17,17Z"></path></svg></button></div><div class="rounded-lg transition-colors"><button type="button" class="w-full flex items-center gap-2.5 px-2.5 py-2 rounded-lg text-left transition-all cursor-pointer group text-text-muted hover:bg-surface-2/60 hover:text-text-main border border-transparent" aria-expanded="false" title="System &amp; Media"><span class="inline-flex size-6 shrink-0 items-center justify-center rounded-md border transition-colors border-border-subtle bg-surface text-text-muted group-hover:text-text-main"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[14px]" aria-hidden="true" data-icon="settings"><path d="M128,80a48,48,0,1,0,48,48A48.05,48.05,0,0,0,128,80Zm0,80a32,32,0,1,1,32-32A32,32,0,0,1,128,160Zm109.94-52.79a8,8,0,0,0-3.89-5.4l-29.83-17-.12-33.62a8,8,0,0,0-2.83-6.08,111.91,111.91,0,0,0-36.72-20.67,8,8,0,0,0-6.46.59L128,41.85,97.88,25a8,8,0,0,0-6.47-.6A112.1,112.1,0,0,0,54.73,45.15a8,8,0,0,0-2.83,6.07l-.15,33.65-29.83,17a8,8,0,0,0-3.89,5.4,106.47,106.47,0,0,0,0,41.56,8,8,0,0,0,3.89,5.4l29.83,17,.12,33.62a8,8,0,0,0,2.83,6.08,111.91,111.91,0,0,0,36.72,20.67,8,8,0,0,0,6.46-.59L128,214.15,158.12,231a7.91,7.91,0,0,0,3.9,1,8.09,8.09,0,0,0,2.57-.42,112.1,112.1,0,0,0,36.68-20.73,8,8,0,0,0,2.83-6.07l.15-33.65,29.83-17a8,8,0,0,0,3.89-5.4A106.47,106.47,0,0,0,237.94,107.21Zm-15,34.91-28.57,16.25a8,8,0,0,0-3,3c-.58,1-1.19,2.06-1.81,3.06a7.94,7.94,0,0,0-1.22,4.21l-.15,32.25a95.89,95.89,0,0,1-25.37,14.3L134,199.13a8,8,0,0,0-3.91-1h-.19c-1.21,0-2.43,0-3.64,0a8.08,8.08,0,0,0-4.1,1l-28.84,16.1A96,96,0,0,1,67.88,201l-.11-32.2a8,8,0,0,0-1.22-4.22c-.62-1-1.23-2-1.8-3.06a8.09,8.09,0,0,0-3-3.06l-28.6-16.29a90.49,90.49,0,0,1,0-28.26L61.67,97.63a8,8,0,0,0,3-3c.58-1,1.19-2.06,1.81-3.06a7.94,7.94,0,0,0,1.22-4.21l.15-32.25a95.89,95.89,0,0,1,25.37-14.3L122,56.87a8,8,0,0,0,4.1,1c1.21,0,2.43,0,3.64,0a8.08,8.08,0,0,0,4.1-1l28.84-16.1A96,96,0,0,1,188.12,55l.11,32.2a8,8,0,0,0,1.22,4.22c.62,1,1.23,2,1.8,3.06a8.09,8.09,0,0,0,3,3.06l28.6,16.29A90.49,90.49,0,0,1,222.9,142.12Z"></path></svg></span><span class="text-[13px] tracking-tight flex-1 truncate">System &amp; Media</span><span class="nav-section-count">4</span><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[13px] text-text-muted/80 transition-transform duration-150 shrink-0" style="transform:rotate(-90deg)" aria-hidden="true" data-icon="expand_more"><path d="M216.49,104.49l-80,80a12,12,0,0,1-17,0l-80-80a12,12,0,0,1,17-17L128,159l71.51-71.52a12,12,0,0,1,17,17Z"></path></svg></button></div></div></nav><div class="border-t border-border-subtle px-3 py-2.5 flex items-center justify-between gap-2 bg-surface/40 mt-auto shrink-0"><a class="flex items-center gap-2 rounded-lg px-2.5 py-1.5 text-xs font-medium transition-colors flex-1 text-text-muted hover:bg-surface-2 hover:text-text-main" href="/dashboard/profile"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[14px]" aria-hidden="true" data-icon="settings"><path d="M128,80a48,48,0,1,0,48,48A48.05,48.05,0,0,0,128,80Zm0,80a32,32,0,1,1,32-32A32,32,0,0,1,128,160Zm109.94-52.79a8,8,0,0,0-3.89-5.4l-29.83-17-.12-33.62a8,8,0,0,0-2.83-6.08,111.91,111.91,0,0,0-36.72-20.67,8,8,0,0,0-6.46.59L128,41.85,97.88,25a8,8,0,0,0-6.47-.6A112.1,112.1,0,0,0,54.73,45.15a8,8,0,0,0-2.83,6.07l-.15,33.65-29.83,17a8,8,0,0,0-3.89,5.4,106.47,106.47,0,0,0,0,41.56,8,8,0,0,0,3.89,5.4l29.83,17,.12,33.62a8,8,0,0,0,2.83,6.08,111.91,111.91,0,0,0,36.72,20.67,8,8,0,0,0,6.46-.59L128,214.15,158.12,231a7.91,7.91,0,0,0,3.9,1,8.09,8.09,0,0,0,2.57-.42,112.1,112.1,0,0,0,36.68-20.73,8,8,0,0,0,2.83-6.07l.15-33.65,29.83-17a8,8,0,0,0,3.89-5.4A106.47,106.47,0,0,0,237.94,107.21Zm-15,34.91-28.57,16.25a8,8,0,0,0-3,3c-.58,1-1.19,2.06-1.81,3.06a7.94,7.94,0,0,0-1.22,4.21l-.15,32.25a95.89,95.89,0,0,1-25.37,14.3L134,199.13a8,8,0,0,0-3.91-1h-.19c-1.21,0-2.43,0-3.64,0a8.08,8.08,0,0,0-4.1,1l-28.84,16.1A96,96,0,0,1,67.88,201l-.11-32.2a8,8,0,0,0-1.22-4.22c-.62-1-1.23-2-1.8-3.06a8.09,8.09,0,0,0-3-3.06l-28.6-16.29a90.49,90.49,0,0,1,0-28.26L61.67,97.63a8,8,0,0,0,3-3c.58-1,1.19-2.06,1.81-3.06a7.94,7.94,0,0,0,1.22-4.21l.15-32.25a95.89,95.89,0,0,1,25.37-14.3L122,56.87a8,8,0,0,0,4.1,1c1.21,0,2.43,0,3.64,0a8.08,8.08,0,0,0,4.1-1l28.84-16.1A96,96,0,0,1,188.12,55l.11,32.2a8,8,0,0,0,1.22,4.22c.62,1,1.23,2,1.8,3.06a8.09,8.09,0,0,0,3,3.06l28.6,16.29A90.49,90.49,0,0,1,222.9,142.12Z"></path></svg><span>Settings</span></a><a class="inline-flex items-center gap-1.5 rounded-lg border border-border-subtle bg-surface px-2.5 py-1.5 text-[11px] font-mono text-text-muted hover:text-text-main transition-colors" title="System Health" href="/dashboard/health"><span class="status-dot status-dot-live"></span><span>Online</span></a></div></aside></div><div role="dialog" aria-modal="true" aria-label="Dashboard navigation" inert="" class="fixed inset-y-0 left-0 z-50 transform lg:hidden transition-transform duration-300 ease-in-out -translate-x-full"><aside class="sidebar-shell flex w-[256px] h-full flex-col transition-[width] duration-150"><div class="sidebar-brand flex flex-col gap-2 px-3.5 py-3"><div class="flex items-center gap-2.5"><a class="flex min-w-0 flex-1 items-center gap-2.5" title="MiawRouter dashboard" href="/dashboard"><div class="sidebar-brand-icon flex size-9 shrink-0 items-center justify-center overflow-hidden rounded-lg border border-border bg-surface shadow-xs"><img src="/miawrouter-favicon-32.png" data-brand-asset="icon" alt="" aria-hidden="true" class="size-full object-contain p-0.5"/></div><div class="sidebar-brand-copy flex min-w-0 flex-col"><div class="flex items-center gap-1.5"><h1 class="truncate text-[14.5px] font-bold tracking-tight text-text-main">MiawRouter Proxy</h1><span class="status-dot status-dot-live" title="Gateway Active"></span></div><span class="text-[10.5px] font-mono font-medium text-text-muted">V1.2.4<!-- --> · AI Router</span></div></a><button type="button" class="sidebar-collapse-toggle inline-flex size-8 shrink-0 items-center justify-center rounded-lg text-text-muted hover:bg-surface-2 hover:text-text-main" aria-label="Collapse sidebar" title="Collapse sidebar"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[15px]" aria-hidden="true" data-icon="chevron_left"><path d="M168.49,199.51a12,12,0,0,1-17,17l-80-80a12,12,0,0,1,0-17l80-80a12,12,0,0,1,17,17L97,128Z"></path></svg></button></div></div><label class="sidebar-search"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[15px] text-text-muted shrink-0" aria-hidden="true" data-icon="search"><path d="M232.49,215.51,185,168a92.12,92.12,0,1,0-17,17l47.53,47.54a12,12,0,0,0,17-17ZM44,112a68,68,0,1,1,68,68A68.07,68.07,0,0,1,44,112Z"></path></svg><input aria-label="Search navigation" placeholder="Jump to menu…" value=""/></label><div class="sidebar-endpoint-row"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="text-[14px] text-primary shrink-0" style="display:inline-block;vertical-align:middle;flex-shrink:0" aria-hidden="true" data-icon="hub"><circle cx="12" cy="12" r="3.25" fill="currentColor" fill-opacity="0.18" stroke="currentColor" stroke-width="1.75"></circle><circle cx="5" cy="6" r="2.25" stroke="currentColor" stroke-width="1.75"></circle><circle cx="19" cy="6" r="2.25" stroke="currentColor" stroke-width="1.75"></circle><circle cx="5" cy="18" r="2.25" stroke="currentColor" stroke-width="1.75"></circle><circle cx="19" cy="18" r="2.25" stroke="currentColor" stroke-width="1.75"></circle><path d="M6.8 7.5 9.6 9.9M17.2 7.5l-2.8 2.4M6.8 16.5l2.8-2.4M17.2 16.5l-2.8-2.4" stroke="currentColor" stroke-width="1.65" stroke-linecap="round"></path></svg><span class="sr-only">Local endpoint</span><code class="min-w-0 flex-1 truncate font-mono text-[11px] font-medium text-text-main" title=""></code><button type="button" disabled="" class="inline-flex size-6 shrink-0 items-center justify-center rounded-md text-text-muted transition-colors hover:bg-surface hover:text-primary disabled:opacity-50" aria-label="Copy local endpoint" title="Copy local endpoint"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[13px]" aria-hidden="true" data-icon="content_copy"><path d="M216,32H88a8,8,0,0,0-8,8V80H40a8,8,0,0,0-8,8V216a8,8,0,0,0,8,8H168a8,8,0,0,0,8-8V176h40a8,8,0,0,0,8-8V40A8,8,0,0,0,216,32ZM160,208H48V96H160Zm48-48H176V88a8,8,0,0,0-8-8H96V48H208Z"></path></svg></button></div><nav class="flex-1 px-2.5 py-2 space-y-1.5 overflow-y-auto custom-scrollbar"><div class="mb-2 rounded-xl border border-border bg-surface/70 p-1.5"><div class="flex items-center justify-between px-1.5 pb-1"><span class="text-[10px] font-mono font-semibold uppercase tracking-wider text-text-muted">Quick Access</span><span class="text-[10px] font-mono text-text-subtle">1-Click Hub</span></div><div class="grid grid-cols-2 gap-1"><a class="flex items-center gap-1.5 rounded-lg px-2 py-1.5 text-[11.5px] font-medium transition-all truncate text-text-muted hover:bg-surface-2/70 hover:text-text-main border border-transparent" title="Overview" href="/dashboard"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="text-[13px] shrink-0 text-text-muted" style="display:inline-block;vertical-align:middle;flex-shrink:0" aria-hidden="true" data-icon="dashboard"><rect x="3" y="3" width="7.5" height="7.5" rx="2" fill="currentColor" fill-opacity="0.16" stroke="currentColor" stroke-width="1.75"></rect><rect x="13.5" y="3" width="7.5" height="7.5" rx="2" stroke="currentColor" stroke-width="1.75"></rect><rect x="3" y="13.5" width="7.5" height="7.5" rx="2" stroke="currentColor" stroke-width="1.75"></rect><rect x="13.5" y="13.5" width="7.5" height="7.5" rx="2" fill="currentColor" fill-opacity="0.16" stroke="currentColor" stroke-width="1.75"></rect></svg><span class="truncate">Overview</span></a><a class="flex items-center gap-1.5 rounded-lg px-2 py-1.5 text-[11.5px] font-medium transition-all truncate text-text-muted hover:bg-surface-2/70 hover:text-text-main border border-transparent" title="Usage &amp; Routing" href="/dashboard/usage"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="text-[13px] shrink-0 text-text-muted" style="display:inline-block;vertical-align:middle;flex-shrink:0" aria-hidden="true" data-icon="bar_chart"><rect x="3.5" y="12.5" width="4" height="7.5" rx="1.2" stroke="currentColor" stroke-width="1.75"></rect><rect x="10" y="8" width="4" height="12" rx="1.2" fill="currentColor" fill-opacity="0.18" stroke="currentColor" stroke-width="1.75"></rect><rect x="16.5" y="4" width="4" height="16" rx="1.2" stroke="currentColor" stroke-width="1.75"></rect></svg><span class="truncate">Usage &amp; Routing</span></a><a class="flex items-center gap-1.5 rounded-lg px-2 py-1.5 text-[11.5px] font-medium transition-all truncate text-text-muted hover:bg-surface-2/70 hover:text-text-main border border-transparent" title="Providers" href="/dashboard/providers"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="text-[13px] shrink-0 text-text-muted" style="display:inline-block;vertical-align:middle;flex-shrink:0" aria-hidden="true" data-icon="dns"><rect x="3" y="3.5" width="18" height="7" rx="2" fill="currentColor" fill-opacity="0.14" stroke="currentColor" stroke-width="1.75"></rect><rect x="3" y="13.5" width="18" height="7" rx="2" stroke="currentColor" stroke-width="1.75"></rect><circle cx="7" cy="7" r="1.1" fill="currentColor"></circle><circle cx="7" cy="17" r="1.1" fill="currentColor"></circle><path d="M11.5 7h5.5M11.5 17h5.5" stroke="currentColor" stroke-width="1.75" stroke-linecap="round"></path></svg><span class="truncate">Providers</span></a><a class="flex items-center gap-1.5 rounded-lg px-2 py-1.5 text-[11.5px] font-medium transition-all truncate text-text-muted hover:bg-surface-2/70 hover:text-text-main border border-transparent" title="Endpoint" href="/dashboard/endpoint"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="text-[13px] shrink-0 text-text-muted" style="display:inline-block;vertical-align:middle;flex-shrink:0" aria-hidden="true" data-icon="vpn_key"><circle cx="8" cy="12" r="4.5" fill="currentColor" fill-opacity="0.14" stroke="currentColor" stroke-width="1.75"></circle><circle cx="7.5" cy="12" r="1.2" fill="currentColor"></circle><path d="M12.5 12H21m-2.5 0v3m-3-3v2.2" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="truncate">Endpoint</span></a></div></div><div class="space-y-1"><div class="flex items-center justify-between px-2 py-0.5"><span class="sidebar-section-caption text-text-muted">Console Menu</span><span class="text-[10px] font-mono text-text-subtle">Accordion</span></div><div class="rounded-lg transition-colors"><button type="button" class="w-full flex items-center gap-2.5 px-2.5 py-2 rounded-lg text-left transition-all cursor-pointer group bg-surface-2 text-text-main font-semibold shadow-2xs border border-border" aria-expanded="true" title="Core &amp; Gateway"><span class="inline-flex size-6 shrink-0 items-center justify-center rounded-md border transition-colors border-primary/30 bg-primary/10 text-primary"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="text-[14px]" style="display:inline-block;vertical-align:middle;flex-shrink:0" aria-hidden="true" data-icon="dashboard"><rect x="3" y="3" width="7.5" height="7.5" rx="2" fill="currentColor" fill-opacity="0.16" stroke="currentColor" stroke-width="1.75"></rect><rect x="13.5" y="3" width="7.5" height="7.5" rx="2" stroke="currentColor" stroke-width="1.75"></rect><rect x="3" y="13.5" width="7.5" height="7.5" rx="2" stroke="currentColor" stroke-width="1.75"></rect><rect x="13.5" y="13.5" width="7.5" height="7.5" rx="2" fill="currentColor" fill-opacity="0.16" stroke="currentColor" stroke-width="1.75"></rect></svg></span><span class="text-[13px] tracking-tight flex-1 truncate">Core &amp; Gateway</span><span class="nav-section-count">5</span><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[13px] text-text-muted/80 transition-transform duration-150 shrink-0" style="transform:rotate(0deg)" aria-hidden="true" data-icon="expand_more"><path d="M216.49,104.49l-80,80a12,12,0,0,1-17,0l-80-80a12,12,0,0,1,17-17L128,159l71.51-71.52a12,12,0,0,1,17,17Z"></path></svg></button><div class="mt-1 ml-3.5 pl-2.5 border-l border-border space-y-0.5 py-0.5"><a class="nav-item group py-1.5 min-h-[33px]" title="Overview" href="/dashboard"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="shrink-0 transition-transform duration-150 group-hover:scale-105 text-[15px] text-text-muted group-hover:text-primary transition-colors" style="display:inline-block;vertical-align:middle;flex-shrink:0" aria-hidden="true" data-icon="dashboard"><rect x="3" y="3" width="7.5" height="7.5" rx="2" fill="currentColor" fill-opacity="0.16" stroke="currentColor" stroke-width="1.75"></rect><rect x="13.5" y="3" width="7.5" height="7.5" rx="2" stroke="currentColor" stroke-width="1.75"></rect><rect x="3" y="13.5" width="7.5" height="7.5" rx="2" stroke="currentColor" stroke-width="1.75"></rect><rect x="13.5" y="13.5" width="7.5" height="7.5" rx="2" fill="currentColor" fill-opacity="0.16" stroke="currentColor" stroke-width="1.75"></rect></svg><span class="truncate text-[12.5px] flex-1">Overview</span></a><a class="nav-item group py-1.5 min-h-[33px]" title="Endpoint &amp; Key" href="/dashboard/endpoint"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="shrink-0 transition-transform duration-150 group-hover:scale-105 text-[15px] text-text-muted group-hover:text-primary transition-colors" style="display:inline-block;vertical-align:middle;flex-shrink:0" aria-hidden="true" data-icon="vpn_key"><circle cx="8" cy="12" r="4.5" fill="currentColor" fill-opacity="0.14" stroke="currentColor" stroke-width="1.75"></circle><circle cx="7.5" cy="12" r="1.2" fill="currentColor"></circle><path d="M12.5 12H21m-2.5 0v3m-3-3v2.2" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="truncate text-[12.5px] flex-1">Endpoint &amp; Key</span></a><a class="nav-item group py-1.5 min-h-[33px]" title="Providers" href="/dashboard/providers"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="shrink-0 transition-transform duration-150 group-hover:scale-105 text-[15px] text-text-muted group-hover:text-primary transition-colors" style="display:inline-block;vertical-align:middle;flex-shrink:0" aria-hidden="true" data-icon="dns"><rect x="3" y="3.5" width="18" height="7" rx="2" fill="currentColor" fill-opacity="0.14" stroke="currentColor" stroke-width="1.75"></rect><rect x="3" y="13.5" width="18" height="7" rx="2" stroke="currentColor" stroke-width="1.75"></rect><circle cx="7" cy="7" r="1.1" fill="currentColor"></circle><circle cx="7" cy="17" r="1.1" fill="currentColor"></circle><path d="M11.5 7h5.5M11.5 17h5.5" stroke="currentColor" stroke-width="1.75" stroke-linecap="round"></path></svg><span class="truncate text-[12.5px] flex-1">Providers</span></a><a class="nav-item group py-1.5 min-h-[33px]" title="Health" href="/dashboard/health"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="shrink-0 transition-transform duration-150 group-hover:scale-105 text-[15px] text-text-muted group-hover:text-primary transition-colors" style="display:inline-block;vertical-align:middle;flex-shrink:0" aria-hidden="true" data-icon="ecg_heart"><rect x="2.75" y="4" width="18.5" height="16" rx="3" fill="currentColor" fill-opacity="0.1" stroke="currentColor" stroke-width="1.75"></rect><path d="M5.5 12h3l2-4 3 8 2-4h3" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="truncate text-[12.5px] flex-1">Health</span></a><a class="nav-item group py-1.5 min-h-[33px]" title="Runtime" href="/dashboard/runtime"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="shrink-0 transition-transform duration-150 group-hover:scale-105 text-[15px] text-text-muted group-hover:text-primary transition-colors" style="display:inline-block;vertical-align:middle;flex-shrink:0" aria-hidden="true" data-icon="memory"><rect x="6" y="6" width="12" height="12" rx="2.2" fill="currentColor" fill-opacity="0.14" stroke="currentColor" stroke-width="1.75"></rect><rect x="9.25" y="9.25" width="5.5" height="5.5" rx="1" stroke="currentColor" stroke-width="1.5"></rect><path d="M9 3v3m6-3v3M9 18v3m6-3v3M3 9h3m-3 6h3m12-6h3m-3 6h3" stroke="currentColor" stroke-width="1.75" stroke-linecap="round"></path></svg><span class="truncate text-[12.5px] flex-1">Runtime</span></a></div></div><div class="rounded-lg transition-colors"><button type="button" class="w-full flex items-center gap-2.5 px-2.5 py-2 rounded-lg text-left transition-all cursor-pointer group text-text-muted hover:bg-surface-2/60 hover:text-text-main border border-transparent" aria-expanded="false" title="Usage &amp; Analytics"><span class="inline-flex size-6 shrink-0 items-center justify-center rounded-md border transition-colors border-border-subtle bg-surface text-text-muted group-hover:text-text-main"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="text-[14px]" style="display:inline-block;vertical-align:middle;flex-shrink:0" aria-hidden="true" data-icon="bar_chart"><rect x="3.5" y="12.5" width="4" height="7.5" rx="1.2" stroke="currentColor" stroke-width="1.75"></rect><rect x="10" y="8" width="4" height="12" rx="1.2" fill="currentColor" fill-opacity="0.18" stroke="currentColor" stroke-width="1.75"></rect><rect x="16.5" y="4" width="4" height="16" rx="1.2" stroke="currentColor" stroke-width="1.75"></rect></svg></span><span class="text-[13px] tracking-tight flex-1 truncate">Usage &amp; Analytics</span><span class="nav-section-count">6</span><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[13px] text-text-muted/80 transition-transform duration-150 shrink-0" style="transform:rotate(-90deg)" aria-hidden="true" data-icon="expand_more"><path d="M216.49,104.49l-80,80a12,12,0,0,1-17,0l-80-80a12,12,0,0,1,17-17L128,159l71.51-71.52a12,12,0,0,1,17,17Z"></path></svg></button></div><div class="rounded-lg transition-colors"><button type="button" class="w-full flex items-center gap-2.5 px-2.5 py-2 rounded-lg text-left transition-all cursor-pointer group bg-surface-2/60 text-text-main font-semibold border border-border-subtle" aria-expanded="false" title="Routing &amp; Config"><span class="inline-flex size-6 shrink-0 items-center justify-center rounded-md border transition-colors border-primary/30 bg-primary/10 text-primary"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[14px]" aria-hidden="true" data-icon="tune"><path d="M176,80a8,8,0,0,1,8-8h32a8,8,0,0,1,0,16H184A8,8,0,0,1,176,80ZM40,88H144v16a8,8,0,0,0,16,0V56a8,8,0,0,0-16,0V72H40a8,8,0,0,0,0,16Zm176,80H120a8,8,0,0,0,0,16h96a8,8,0,0,0,0-16ZM88,144a8,8,0,0,0-8,8v16H40a8,8,0,0,0,0,16H80v16a8,8,0,0,0,16,0V152A8,8,0,0,0,88,144Z"></path></svg></span><span class="text-[13px] tracking-tight flex-1 truncate">Routing &amp; Config</span><span class="size-1.5 rounded-full bg-primary shrink-0" title="Active page in section"></span><span class="nav-section-count">8</span><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[13px] text-text-muted/80 transition-transform duration-150 shrink-0" style="transform:rotate(-90deg)" aria-hidden="true" data-icon="expand_more"><path d="M216.49,104.49l-80,80a12,12,0,0,1-17,0l-80-80a12,12,0,0,1,17-17L128,159l71.51-71.52a12,12,0,0,1,17,17Z"></path></svg></button></div><div class="rounded-lg transition-colors"><button type="button" class="w-full flex items-center gap-2.5 px-2.5 py-2 rounded-lg text-left transition-all cursor-pointer group text-text-muted hover:bg-surface-2/60 hover:text-text-main border border-transparent" aria-expanded="false" title="Workspace Tools"><span class="inline-flex size-6 shrink-0 items-center justify-center rounded-md border transition-colors border-border-subtle bg-surface text-text-muted group-hover:text-text-main"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="text-[14px]" style="display:inline-block;vertical-align:middle;flex-shrink:0" aria-hidden="true" data-icon="terminal"><rect x="2.75" y="4" width="18.5" height="16" rx="2.75" fill="currentColor" fill-opacity="0.12" stroke="currentColor" stroke-width="1.75"></rect><path d="m7 9.5 3 2.5-3 2.5m5.5 0H16" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"></path></svg></span><span class="text-[13px] tracking-tight flex-1 truncate">Workspace Tools</span><span class="nav-section-count">6</span><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[13px] text-text-muted/80 transition-transform duration-150 shrink-0" style="transform:rotate(-90deg)" aria-hidden="true" data-icon="expand_more"><path d="M216.49,104.49l-80,80a12,12,0,0,1-17,0l-80-80a12,12,0,0,1,17-17L128,159l71.51-71.52a12,12,0,0,1,17,17Z"></path></svg></button></div><div class="rounded-lg transition-colors"><button type="button" class="w-full flex items-center gap-2.5 px-2.5 py-2 rounded-lg text-left transition-all cursor-pointer group text-text-muted hover:bg-surface-2/60 hover:text-text-main border border-transparent" aria-expanded="false" title="Integrations &amp; API"><span class="inline-flex size-6 shrink-0 items-center justify-center rounded-md border transition-colors border-border-subtle bg-surface text-text-muted group-hover:text-text-main"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="text-[14px]" style="display:inline-block;vertical-align:middle;flex-shrink:0" aria-hidden="true" data-icon="cable"><path d="M7.5 6.5v4a3 3 0 0 0 3 3h3a3 3 0 0 0 3-3v-4" fill="currentColor" fill-opacity="0.14" stroke="currentColor" stroke-width="1.75" stroke-linejoin="round"></path><path d="M9.5 3.5v3m5-3v3M12 13.5v7" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"></path></svg></span><span class="text-[13px] tracking-tight flex-1 truncate">Integrations &amp; API</span><span class="nav-section-count">5</span><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[13px] text-text-muted/80 transition-transform duration-150 shrink-0" style="transform:rotate(-90deg)" aria-hidden="true" data-icon="expand_more"><path d="M216.49,104.49l-80,80a12,12,0,0,1-17,0l-80-80a12,12,0,0,1,17-17L128,159l71.51-71.52a12,12,0,0,1,17,17Z"></path></svg></button></div><div class="rounded-lg transition-colors"><button type="button" class="w-full flex items-center gap-2.5 px-2.5 py-2 rounded-lg text-left transition-all cursor-pointer group text-text-muted hover:bg-surface-2/60 hover:text-text-main border border-transparent" aria-expanded="false" title="Agents &amp; Skills"><span class="inline-flex size-6 shrink-0 items-center justify-center rounded-md border transition-colors border-border-subtle bg-surface text-text-muted group-hover:text-text-main"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[14px]" aria-hidden="true" data-icon="smart_toy"><path d="M200,48H136V16a8,8,0,0,0-16,0V48H56A32,32,0,0,0,24,80V192a32,32,0,0,0,32,32H200a32,32,0,0,0,32-32V80A32,32,0,0,0,200,48Zm16,144a16,16,0,0,1-16,16H56a16,16,0,0,1-16-16V80A16,16,0,0,1,56,64H200a16,16,0,0,1,16,16Zm-52-56H92a28,28,0,0,0,0,56h72a28,28,0,0,0,0-56Zm-24,16v24H116V152ZM80,164a12,12,0,0,1,12-12h8v24H92A12,12,0,0,1,80,164Zm84,12h-8V152h8a12,12,0,0,1,0,24ZM72,108a12,12,0,1,1,12,12A12,12,0,0,1,72,108Zm88,0a12,12,0,1,1,12,12A12,12,0,0,1,160,108Z"></path></svg></span><span class="text-[13px] tracking-tight flex-1 truncate">Agents &amp; Skills</span><span class="nav-section-count">5</span><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[13px] text-text-muted/80 transition-transform duration-150 shrink-0" style="transform:rotate(-90deg)" aria-hidden="true" data-icon="expand_more"><path d="M216.49,104.49l-80,80a12,12,0,0,1-17,0l-80-80a12,12,0,0,1,17-17L128,159l71.51-71.52a12,12,0,0,1,17,17Z"></path></svg></button></div><div class="rounded-lg transition-colors"><button type="button" class="w-full flex items-center gap-2.5 px-2.5 py-2 rounded-lg text-left transition-all cursor-pointer group text-text-muted hover:bg-surface-2/60 hover:text-text-main border border-transparent" aria-expanded="false" title="System &amp; Media"><span class="inline-flex size-6 shrink-0 items-center justify-center rounded-md border transition-colors border-border-subtle bg-surface text-text-muted group-hover:text-text-main"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[14px]" aria-hidden="true" data-icon="settings"><path d="M128,80a48,48,0,1,0,48,48A48.05,48.05,0,0,0,128,80Zm0,80a32,32,0,1,1,32-32A32,32,0,0,1,128,160Zm109.94-52.79a8,8,0,0,0-3.89-5.4l-29.83-17-.12-33.62a8,8,0,0,0-2.83-6.08,111.91,111.91,0,0,0-36.72-20.67,8,8,0,0,0-6.46.59L128,41.85,97.88,25a8,8,0,0,0-6.47-.6A112.1,112.1,0,0,0,54.73,45.15a8,8,0,0,0-2.83,6.07l-.15,33.65-29.83,17a8,8,0,0,0-3.89,5.4,106.47,106.47,0,0,0,0,41.56,8,8,0,0,0,3.89,5.4l29.83,17,.12,33.62a8,8,0,0,0,2.83,6.08,111.91,111.91,0,0,0,36.72,20.67,8,8,0,0,0,6.46-.59L128,214.15,158.12,231a7.91,7.91,0,0,0,3.9,1,8.09,8.09,0,0,0,2.57-.42,112.1,112.1,0,0,0,36.68-20.73,8,8,0,0,0,2.83-6.07l.15-33.65,29.83-17a8,8,0,0,0,3.89-5.4A106.47,106.47,0,0,0,237.94,107.21Zm-15,34.91-28.57,16.25a8,8,0,0,0-3,3c-.58,1-1.19,2.06-1.81,3.06a7.94,7.94,0,0,0-1.22,4.21l-.15,32.25a95.89,95.89,0,0,1-25.37,14.3L134,199.13a8,8,0,0,0-3.91-1h-.19c-1.21,0-2.43,0-3.64,0a8.08,8.08,0,0,0-4.1,1l-28.84,16.1A96,96,0,0,1,67.88,201l-.11-32.2a8,8,0,0,0-1.22-4.22c-.62-1-1.23-2-1.8-3.06a8.09,8.09,0,0,0-3-3.06l-28.6-16.29a90.49,90.49,0,0,1,0-28.26L61.67,97.63a8,8,0,0,0,3-3c.58-1,1.19-2.06,1.81-3.06a7.94,7.94,0,0,0,1.22-4.21l.15-32.25a95.89,95.89,0,0,1,25.37-14.3L122,56.87a8,8,0,0,0,4.1,1c1.21,0,2.43,0,3.64,0a8.08,8.08,0,0,0,4.1-1l28.84-16.1A96,96,0,0,1,188.12,55l.11,32.2a8,8,0,0,0,1.22,4.22c.62,1,1.23,2,1.8,3.06a8.09,8.09,0,0,0,3,3.06l28.6,16.29A90.49,90.49,0,0,1,222.9,142.12Z"></path></svg></span><span class="text-[13px] tracking-tight flex-1 truncate">System &amp; Media</span><span class="nav-section-count">4</span><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[13px] text-text-muted/80 transition-transform duration-150 shrink-0" style="transform:rotate(-90deg)" aria-hidden="true" data-icon="expand_more"><path d="M216.49,104.49l-80,80a12,12,0,0,1-17,0l-80-80a12,12,0,0,1,17-17L128,159l71.51-71.52a12,12,0,0,1,17,17Z"></path></svg></button></div></div></nav><div class="border-t border-border-subtle px-3 py-2.5 flex items-center justify-between gap-2 bg-surface/40 mt-auto shrink-0"><a class="flex items-center gap-2 rounded-lg px-2.5 py-1.5 text-xs font-medium transition-colors flex-1 text-text-muted hover:bg-surface-2 hover:text-text-main" href="/dashboard/profile"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[14px]" aria-hidden="true" data-icon="settings"><path d="M128,80a48,48,0,1,0,48,48A48.05,48.05,0,0,0,128,80Zm0,80a32,32,0,1,1,32-32A32,32,0,0,1,128,160Zm109.94-52.79a8,8,0,0,0-3.89-5.4l-29.83-17-.12-33.62a8,8,0,0,0-2.83-6.08,111.91,111.91,0,0,0-36.72-20.67,8,8,0,0,0-6.46.59L128,41.85,97.88,25a8,8,0,0,0-6.47-.6A112.1,112.1,0,0,0,54.73,45.15a8,8,0,0,0-2.83,6.07l-.15,33.65-29.83,17a8,8,0,0,0-3.89,5.4,106.47,106.47,0,0,0,0,41.56,8,8,0,0,0,3.89,5.4l29.83,17,.12,33.62a8,8,0,0,0,2.83,6.08,111.91,111.91,0,0,0,36.72,20.67,8,8,0,0,0,6.46-.59L128,214.15,158.12,231a7.91,7.91,0,0,0,3.9,1,8.09,8.09,0,0,0,2.57-.42,112.1,112.1,0,0,0,36.68-20.73,8,8,0,0,0,2.83-6.07l.15-33.65,29.83-17a8,8,0,0,0,3.89-5.4A106.47,106.47,0,0,0,237.94,107.21Zm-15,34.91-28.57,16.25a8,8,0,0,0-3,3c-.58,1-1.19,2.06-1.81,3.06a7.94,7.94,0,0,0-1.22,4.21l-.15,32.25a95.89,95.89,0,0,1-25.37,14.3L134,199.13a8,8,0,0,0-3.91-1h-.19c-1.21,0-2.43,0-3.64,0a8.08,8.08,0,0,0-4.1,1l-28.84,16.1A96,96,0,0,1,67.88,201l-.11-32.2a8,8,0,0,0-1.22-4.22c-.62-1-1.23-2-1.8-3.06a8.09,8.09,0,0,0-3-3.06l-28.6-16.29a90.49,90.49,0,0,1,0-28.26L61.67,97.63a8,8,0,0,0,3-3c.58-1,1.19-2.06,1.81-3.06a7.94,7.94,0,0,0,1.22-4.21l.15-32.25a95.89,95.89,0,0,1,25.37-14.3L122,56.87a8,8,0,0,0,4.1,1c1.21,0,2.43,0,3.64,0a8.08,8.08,0,0,0,4.1-1l28.84-16.1A96,96,0,0,1,188.12,55l.11,32.2a8,8,0,0,0,1.22,4.22c.62,1,1.23,2,1.8,3.06a8.09,8.09,0,0,0,3,3.06l28.6,16.29A90.49,90.49,0,0,1,222.9,142.12Z"></path></svg><span>Settings</span></a><a class="inline-flex items-center gap-1.5 rounded-lg border border-border-subtle bg-surface px-2.5 py-1.5 text-[11px] font-mono text-text-muted hover:text-text-main transition-colors" title="System Health" href="/dashboard/health"><span class="status-dot status-dot-live"></span><span>Online</span></a></div></aside></div><main class="flex min-w-0 flex-1 flex-col isolate"><header class="dashboard-header sticky top-0 z-20 flex h-16 shrink-0 items-center justify-between gap-3 border-b border-border bg-surface/90 px-4 lg:px-6"><div class="flex items-center gap-3 lg:hidden shrink-0"><button type="button" aria-label="Open navigation" class="flex size-9 items-center justify-center rounded-lg border border-border-subtle bg-surface-2 text-text-muted transition-colors hover:text-text-main"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[18px]" aria-hidden="true" data-icon="menu"><path d="M228,128a12,12,0,0,1-12,12H40a12,12,0,0,1,0-24H216A12,12,0,0,1,228,128ZM40,76H216a12,12,0,0,0,0-24H40a12,12,0,0,0,0,24ZM216,180H40a12,12,0,0,0,0,24H216a12,12,0,0,0,0-24Z"></path></svg></button></div><div class="flex min-w-0 flex-1 items-center gap-3"><div class="flex items-center gap-3 min-w-0"><div class="icon-box text-primary hidden sm:inline-flex"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[19px]" aria-hidden="true" data-icon="savings"><path d="M192,116a12,12,0,1,1-12-12A12,12,0,0,1,192,116ZM152,64H112a8,8,0,0,0,0,16h40a8,8,0,0,0,0-16Zm96,48v32a24,24,0,0,1-24,24h-2.36l-16.21,45.38A16,16,0,0,1,190.36,224H177.64a16,16,0,0,1-15.07-10.62L160.65,208h-57.3l-1.92,5.38A16,16,0,0,1,86.36,224H73.64a16,16,0,0,1-15.07-10.62L46,178.22a87.69,87.69,0,0,1-21.44-48.38A16,16,0,0,0,16,144a8,8,0,0,1-16,0,32,32,0,0,1,24.28-31A88.12,88.12,0,0,1,112,32H216a8,8,0,0,1,0,16H194.61a87.93,87.93,0,0,1,30.17,37c.43,1,.85,2,1.25,3A24,24,0,0,1,248,112Zm-16,0a8,8,0,0,0-8-8h-3.66a8,8,0,0,1-7.64-5.6A71.9,71.9,0,0,0,144,48H112A72,72,0,0,0,58.91,168.64a8,8,0,0,1,1.64,2.71L73.64,208H86.36l3.82-10.69A8,8,0,0,1,97.71,192h68.58a8,8,0,0,1,7.53,5.31L177.64,208h12.72l18.11-50.69A8,8,0,0,1,216,152h8a8,8,0,0,0,8-8Z"></path></svg></div><div class="min-w-0"><div class="flex items-center gap-2"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-primary text-[18px] sm:hidden shrink-0" aria-hidden="true" data-icon="savings"><path d="M192,116a12,12,0,1,1-12-12A12,12,0,0,1,192,116ZM152,64H112a8,8,0,0,0,0,16h40a8,8,0,0,0,0-16Zm96,48v32a24,24,0,0,1-24,24h-2.36l-16.21,45.38A16,16,0,0,1,190.36,224H177.64a16,16,0,0,1-15.07-10.62L160.65,208h-57.3l-1.92,5.38A16,16,0,0,1,86.36,224H73.64a16,16,0,0,1-15.07-10.62L46,178.22a87.69,87.69,0,0,1-21.44-48.38A16,16,0,0,0,16,144a8,8,0,0,1-16,0,32,32,0,0,1,24.28-31A88.12,88.12,0,0,1,112,32H216a8,8,0,0,1,0,16H194.61a87.93,87.93,0,0,1,30.17,37c.43,1,.85,2,1.25,3A24,24,0,0,1,248,112Zm-16,0a8,8,0,0,0-8-8h-3.66a8,8,0,0,1-7.64-5.6A71.9,71.9,0,0,0,144,48H112A72,72,0,0,0,58.91,168.64a8,8,0,0,1,1.64,2.71L73.64,208H86.36l3.82-10.69A8,8,0,0,1,97.71,192h68.58a8,8,0,0,1,7.53,5.31L177.64,208h12.72l18.11-50.69A8,8,0,0,1,216,152h8a8,8,0,0,0,8-8Z"></path></svg><h1 class="truncate text-[18px] font-bold tracking-tight text-text-main leading-tight">Token Saver</h1></div><p class="hidden md:block text-xs text-text-muted truncate mt-0.5">Compress prompts and outputs to save tokens</p></div></div></div><div class="dashboard-header-actions flex items-center gap-1.5 shrink-0"><a class="hidden xl:inline-flex items-center gap-2 rounded-full border border-border bg-surface-2 px-3 py-1 text-xs font-medium text-text-muted hover:border-primary/40 hover:text-text-main transition-colors mr-1" title="View router health" href="/dashboard/health"><span class="status-dot status-dot-live"></span><span>Router Online</span></a><button class="inline-flex items-center justify-center size-8 rounded-md text-text-muted hover:text-text-main hover:bg-surface-2 transition-colors" aria-label="Switch to light mode" title="Switch to light mode"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[18px]" aria-hidden="true" data-icon="light_mode"><path d="M120,40V16a8,8,0,0,1,16,0V40a8,8,0,0,1-16,0Zm72,88a64,64,0,1,1-64-64A64.07,64.07,0,0,1,192,128Zm-16,0a48,48,0,1,0-48,48A48.05,48.05,0,0,0,176,128ZM58.34,69.66A8,8,0,0,0,69.66,58.34l-16-16A8,8,0,0,0,42.34,53.66Zm0,116.68-16,16a8,8,0,0,0,11.32,11.32l16-16a8,8,0,0,0-11.32-11.32ZM192,72a8,8,0,0,0,5.66-2.34l16-16a8,8,0,0,0-11.32-11.32l-16,16A8,8,0,0,0,192,72Zm5.66,114.34a8,8,0,0,0-11.32,11.32l16,16a8,8,0,0,0,11.32-11.32ZM48,128a8,8,0,0,0-8-8H16a8,8,0,0,0,0,16H40A8,8,0,0,0,48,128Zm80,80a8,8,0,0,0-8,8v24a8,8,0,0,0,16,0V216A8,8,0,0,0,128,208Zm112-88H216a8,8,0,0,0,0,16h24a8,8,0,0,0,0-16Z"></path></svg></button><button class="inline-flex h-8 items-center justify-center gap-1.5 rounded-md px-2 text-text-muted transition-colors hover:bg-surface-2 hover:text-text-main" title="Language" aria-label="Language: en" data-i18n-skip="true"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[18px]" aria-hidden="true" data-icon="language"><path d="M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm88,104a87.62,87.62,0,0,1-6.4,32.94l-44.7-27.49a15.92,15.92,0,0,0-6.24-2.23l-22.82-3.08a16.11,16.11,0,0,0-16,7.86h-8.72l-3.8-7.86a15.91,15.91,0,0,0-11-8.67l-8-1.73L96.14,104h16.71a16.06,16.06,0,0,0,7.73-2l12.25-6.76a16.62,16.62,0,0,0,3-2.14l26.91-24.34A15.93,15.93,0,0,0,166,49.1l-.36-.65A88.11,88.11,0,0,1,216,128ZM143.31,41.34,152,56.9,125.09,81.24,112.85,88H96.14a16,16,0,0,0-13.88,8l-8.73,15.23L63.38,84.19,74.32,58.32a87.87,87.87,0,0,1,69-17ZM40,128a87.53,87.53,0,0,1,8.54-37.8l11.34,30.27a16,16,0,0,0,11.62,10l21.43,4.61L96.74,143a16.09,16.09,0,0,0,14.4,9h1.48l-7.23,16.23a16,16,0,0,0,2.86,17.37l.14.14L128,205.94l-1.94,10A88.11,88.11,0,0,1,40,128Zm102.58,86.78,1.13-5.81a16.09,16.09,0,0,0-4-13.9,1.85,1.85,0,0,1-.14-.14L120,174.74,133.7,144l22.82,3.08,45.72,28.12A88.18,88.18,0,0,1,142.58,214.78Z"></path></svg><span class="text-xs font-medium uppercase">en</span></button><div class=""></div><div class="relative"><button class="flex size-8 items-center justify-center rounded-md text-text-muted transition-colors hover:bg-surface-2 hover:text-text-main" title="Menu"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="text-[18px]" style="display:inline-block;vertical-align:middle;flex-shrink:0" aria-hidden="true" data-icon="grid_view"><rect x="3" y="3" width="7.5" height="7.5" rx="2" fill="currentColor" fill-opacity="0.16" stroke="currentColor" stroke-width="1.75"></rect><rect x="13.5" y="3" width="7.5" height="7.5" rx="2" stroke="currentColor" stroke-width="1.75"></rect><rect x="3" y="13.5" width="7.5" height="7.5" rx="2" stroke="currentColor" stroke-width="1.75"></rect><rect x="13.5" y="13.5" width="7.5" height="7.5" rx="2" fill="currentColor" fill-opacity="0.16" stroke="currentColor" stroke-width="1.75"></rect></svg></button></div></div></header><div class="dashboard-scroll flex-1 overflow-y-auto custom-scrollbar p-4 lg:p-6 "><div class="dashboard-page-content mx-auto w-full max-w-[1280px]"><div class="flex flex-col gap-6"><div class="saver-workspace flex flex-col gap-6"><div class="workspace-heading"><div><h1>Token saver</h1><p>Compress what leaves this machine — tool output, prompts and response style — so each request costs fewer tokens at the provider.</p></div><a href="/dashboard/usage" class="workspace-link">View live activity</a></div><nav class="saver-section-nav" aria-label="Token saver sections"><a href="#quick-presets">Profiles</a><a href="#rtk">Compression</a><a href="#token-saver-catalog">Engine catalog</a><a href="#token-saver-general">Preferences</a></nav><dl class="grid grid-cols-1 gap-x-6 gap-y-3 rounded-[10px] border border-border-subtle bg-surface-2/40 p-4 sm:grid-cols-2 lg:grid-cols-4"><div class="min-w-0"><dt class="text-xs text-text-muted">RTK tool compression</dt><dd class="mt-0.5 truncate text-[13px] font-medium text-success">On · standard</dd></div><div class="min-w-0"><dt class="text-xs text-text-muted">Headroom prompt compression</dt><dd class="mt-0.5 truncate text-[13px] font-medium text-text-main">Off</dd></div><div class="min-w-0"><dt class="text-xs text-text-muted">Caveman output style</dt><dd class="mt-0.5 truncate text-[13px] font-medium text-text-main">Off</dd></div><div class="min-w-0"><dt class="text-xs text-text-muted">Ponytail minimal-code bias</dt><dd class="mt-0.5 truncate text-[13px] font-medium text-text-main">Off</dd></div><div class="min-w-0"><dt class="text-xs text-text-muted">PXPIPE image context</dt><dd class="mt-0.5 truncate text-[13px] font-medium text-text-main">Off</dd></div><div class="min-w-0"><dt class="text-xs text-text-muted">Response focus</dt><dd class="mt-0.5 truncate text-[13px] font-medium text-text-main">Balanced</dd></div><div class="min-w-0"><dt class="text-xs text-text-muted">Auto-trigger threshold</dt><dd class="mt-0.5 truncate text-[13px] font-medium text-text-main">4000 tokens</dd></div></dl><div class="ui-card border rounded-xl bg-surface border-border shadow-soft p-5" data-variant="default" id="quick-presets"><div class="flex items-center justify-between gap-4 mb-4"><div class="flex items-center gap-3 min-w-0"><div class="icon-box text-primary shrink-0"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[18px]" aria-hidden="true" data-icon="tune"><path d="M176,80a8,8,0,0,1,8-8h32a8,8,0,0,1,0,16H184A8,8,0,0,1,176,80ZM40,88H144v16a8,8,0,0,0,16,0V56a8,8,0,0,0-16,0V72H40a8,8,0,0,0,0,16Zm176,80H120a8,8,0,0,0,0,16h96a8,8,0,0,0,0-16ZM88,144a8,8,0,0,0-8,8v16H40a8,8,0,0,0,0,16H80v16a8,8,0,0,0,16,0V152A8,8,0,0,0,88,144Z"></path></svg></div><div class="min-w-0"><h3 class="ui-card-title text-text-main font-semibold text-[15px] tracking-tight leading-snug">Quick Presets (Token Saver Profiles)</h3><p class="text-[12.5px] text-text-muted mt-0.5 leading-relaxed">Choose a 1-click ready-to-use strategy for optimal performance and token savings without complex manual configuration.</p></div></div><span class="text-[13px] text-text-muted">Current Profile:<!-- --> <span class="font-medium text-text-main">Balanced (Recommended)</span></span></div><div class="divide-y divide-border-subtle"><div class="grid gap-3 py-4 first:pt-0 last:pb-0 sm:grid-cols-[minmax(0,1fr)_auto] sm:items-start sm:gap-6"><div class="min-w-0"><div class="flex flex-wrap items-center gap-2"><p class="text-sm font-medium text-text-main">Maximum Savings</p></div><p class="mt-0.5 text-[13px] leading-relaxed text-text-muted">Aggressive compression for tool outputs, with concise code-first responses and no filler.</p></div><div class="flex shrink-0 items-center gap-2 sm:pt-0.5"><button class="ui-button inline-flex items-center justify-center gap-2 rounded-lg font-medium transition-all duration-150 cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2 focus-visible:ring-offset-bg disabled:opacity-50 disabled:cursor-not-allowed bg-primary text-bg font-semibold hover:bg-primary-hover shadow-xs disabled:bg-surface-2 disabled:text-text-muted h-7.5 px-2.5 text-xs rounded-lg" data-variant="primary">Apply Profile</button></div></div><div class="grid gap-3 py-4 first:pt-0 last:pb-0 sm:grid-cols-[minmax(0,1fr)_auto] sm:items-start sm:gap-6"><div class="min-w-0"><div class="flex flex-wrap items-center gap-2"><p class="text-sm font-medium text-text-main">Balanced (Recommended)</p><span class="text-xs px-2 py-0.5 rounded-md bg-success/10 text-success">Active Profile</span></div><p class="mt-0.5 text-[13px] leading-relaxed text-text-muted">Standard tool-output compression without changing response style. The safe default.</p></div><div class="flex shrink-0 items-center gap-2 sm:pt-0.5"><button class="ui-button inline-flex items-center justify-center gap-2 rounded-lg font-medium transition-all duration-150 cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2 focus-visible:ring-offset-bg disabled:opacity-50 disabled:cursor-not-allowed border border-border bg-surface-2/80 text-text-main hover:bg-surface-3 hover:border-border shadow-2xs h-7.5 px-2.5 text-xs rounded-lg" disabled="" data-variant="secondary">Active Profile</button></div></div><div class="grid gap-3 py-4 first:pt-0 last:pb-0 sm:grid-cols-[minmax(0,1fr)_auto] sm:items-start sm:gap-6"><div class="min-w-0"><div class="flex flex-wrap items-center gap-2"><p class="text-sm font-medium text-text-main">Developer Pro</p></div><p class="mt-0.5 text-[13px] leading-relaxed text-text-muted">For coding agents (Claude Code, Cursor, Windsurf): direct code patches with minimal boilerplate.</p></div><div class="flex shrink-0 items-center gap-2 sm:pt-0.5"><button class="ui-button inline-flex items-center justify-center gap-2 rounded-lg font-medium transition-all duration-150 cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2 focus-visible:ring-offset-bg disabled:opacity-50 disabled:cursor-not-allowed bg-primary text-bg font-semibold hover:bg-primary-hover shadow-xs disabled:bg-surface-2 disabled:text-text-muted h-7.5 px-2.5 text-xs rounded-lg" data-variant="primary">Apply Profile</button></div></div><div class="grid gap-3 py-4 first:pt-0 last:pb-0 sm:grid-cols-[minmax(0,1fr)_auto] sm:items-start sm:gap-6"><div class="min-w-0"><div class="flex flex-wrap items-center gap-2"><p class="text-sm font-medium text-text-main">Passthrough (Off)</p></div><p class="mt-0.5 text-[13px] leading-relaxed text-text-muted">Every filter off, for raw evaluation or debugging responses that must not be touched.</p></div><div class="flex shrink-0 items-center gap-2 sm:pt-0.5"><button class="ui-button inline-flex items-center justify-center gap-2 rounded-lg font-medium transition-all duration-150 cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2 focus-visible:ring-offset-bg disabled:opacity-50 disabled:cursor-not-allowed bg-primary text-bg font-semibold hover:bg-primary-hover shadow-xs disabled:bg-surface-2 disabled:text-text-muted h-7.5 px-2.5 text-xs rounded-lg" data-variant="primary">Apply Profile</button></div></div></div></div><div class="ui-card border rounded-xl bg-surface border-border shadow-soft p-5" data-variant="default" id="rtk"><div class="flex items-center justify-between gap-4 mb-4"><div class="flex items-center gap-3 min-w-0"><div class="icon-box text-primary shrink-0"><svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="text-[18px]" style="display:inline-block;vertical-align:middle;flex-shrink:0" aria-hidden="true" data-icon="bolt"><path d="M13.2 2.8 4.8 13.2h6.2l-1.2 8 9.4-10.4H13l.2-8Z" fill="currentColor" fill-opacity="0.16" stroke="currentColor" stroke-width="1.75" stroke-linejoin="round"></path></svg></div><div class="min-w-0"><h3 class="ui-card-title text-text-main font-semibold text-[15px] tracking-tight leading-snug">Compression</h3><p class="text-[12.5px] text-text-muted mt-0.5 leading-relaxed">Each engine runs at a different point in the request. Off means the request passes through untouched.</p></div></div></div><div class="divide-y divide-border-subtle"><div class="grid gap-3 py-4 first:pt-0 last:pb-0 sm:grid-cols-[minmax(0,1fr)_auto] sm:items-start sm:gap-6"><div class="min-w-0"><div class="flex flex-wrap items-center gap-2"><p class="text-sm font-medium text-text-main">Compress tool output<!-- --> <a href="https://github.com/rtk-ai/rtk" target="_blank" rel="noreferrer" class="text-xs font-normal text-primary hover:underline">(RTK)</a></p></div><p class="mt-0.5 text-[13px] leading-relaxed text-text-muted">Rewrites git/grep/ls/tree/log output in tool results — typically 60–90% fewer input tokens.</p></div><div class="flex shrink-0 items-center gap-2 sm:pt-0.5"><div class="flex items-center gap-3"><button type="button" role="switch" aria-checked="true" aria-label="Compress tool output with RTK" class="relative inline-flex shrink-0 cursor-pointer rounded-full transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2 bg-primary [object Object]"><span class="pointer-events-none inline-block rounded-full shadow-2xs bg-bg transition-transform duration-150 translate-x-[14px] size-3.5"></span></button></div></div></div><div class="grid gap-3 py-4 first:pt-0 last:pb-0 sm:grid-cols-[minmax(0,1fr)_auto] sm:items-start sm:gap-6"><div class="min-w-0"><div class="flex flex-wrap items-center gap-2"><p class="text-sm font-medium text-text-main">RTK compression mode</p></div><p class="mt-0.5 text-[13px] leading-relaxed text-text-muted">One shared mode for the single RTK pass. Aggressive lowers the per-blob threshold to 100B; lite compresses only blobs of 2KB or more.</p></div><div class="flex shrink-0 items-center gap-2 sm:pt-0.5"><div class="flex items-center gap-1.5"><button class="ui-button inline-flex items-center justify-center gap-2 rounded-lg font-medium transition-all duration-150 cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2 focus-visible:ring-offset-bg disabled:opacity-50 disabled:cursor-not-allowed border border-border bg-surface-2/80 text-text-main hover:bg-surface-3 hover:border-border shadow-2xs h-7.5 px-2.5 text-xs rounded-lg" data-variant="secondary">lite</button><button class="ui-button inline-flex items-center justify-center gap-2 rounded-lg font-medium transition-all duration-150 cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2 focus-visible:ring-offset-bg disabled:opacity-50 disabled:cursor-not-allowed bg-primary text-bg font-semibold hover:bg-primary-hover shadow-xs disabled:bg-surface-2 disabled:text-text-muted h-7.5 px-2.5 text-xs rounded-lg" data-variant="primary">standard</button><button class="ui-button inline-flex items-center justify-center gap-2 rounded-lg font-medium transition-all duration-150 cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2 focus-visible:ring-offset-bg disabled:opacity-50 disabled:cursor-not-allowed border border-border bg-surface-2/80 text-text-main hover:bg-surface-3 hover:border-border shadow-2xs h-7.5 px-2.5 text-xs rounded-lg" data-variant="secondary">aggressive</button></div></div></div><div class="grid gap-3 py-4 first:pt-0 last:pb-0 sm:grid-cols-[minmax(0,1fr)_auto] sm:items-start sm:gap-6" id="headroom-control"><div class="min-w-0"><div class="flex flex-wrap items-center gap-2"><p class="text-sm font-medium text-text-main">Compress prompts<!-- --> <a href="https://github.com/headroomlabs-ai/headroom" target="_blank" rel="noreferrer" class="text-xs font-normal text-primary hover:underline">(Headroom)</a></p><span class="text-xs px-2 py-0.5 rounded-md bg-surface-2 text-text-muted">Checking…</span></div><p class="mt-0.5 text-[13px] leading-relaxed text-text-muted">Sends the prompt through a local /v1/compress proxy before routing it to the model.</p></div><div class="flex shrink-0 items-center gap-2 sm:pt-0.5"><button class="ui-button inline-flex items-center justify-center gap-2 rounded-lg font-medium transition-all duration-150 cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2 focus-visible:ring-offset-bg disabled:opacity-50 disabled:cursor-not-allowed border border-border bg-surface-2/80 text-text-main hover:bg-surface-3 hover:border-border shadow-2xs h-7.5 px-2.5 text-xs rounded-lg" data-variant="secondary"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[17px]" aria-hidden="true" data-icon="settings"><path d="M128,80a48,48,0,1,0,48,48A48.05,48.05,0,0,0,128,80Zm0,80a32,32,0,1,1,32-32A32,32,0,0,1,128,160Zm109.94-52.79a8,8,0,0,0-3.89-5.4l-29.83-17-.12-33.62a8,8,0,0,0-2.83-6.08,111.91,111.91,0,0,0-36.72-20.67,8,8,0,0,0-6.46.59L128,41.85,97.88,25a8,8,0,0,0-6.47-.6A112.1,112.1,0,0,0,54.73,45.15a8,8,0,0,0-2.83,6.07l-.15,33.65-29.83,17a8,8,0,0,0-3.89,5.4,106.47,106.47,0,0,0,0,41.56,8,8,0,0,0,3.89,5.4l29.83,17,.12,33.62a8,8,0,0,0,2.83,6.08,111.91,111.91,0,0,0,36.72,20.67,8,8,0,0,0,6.46-.59L128,214.15,158.12,231a7.91,7.91,0,0,0,3.9,1,8.09,8.09,0,0,0,2.57-.42,112.1,112.1,0,0,0,36.68-20.73,8,8,0,0,0,2.83-6.07l.15-33.65,29.83-17a8,8,0,0,0,3.89-5.4A106.47,106.47,0,0,0,237.94,107.21Zm-15,34.91-28.57,16.25a8,8,0,0,0-3,3c-.58,1-1.19,2.06-1.81,3.06a7.94,7.94,0,0,0-1.22,4.21l-.15,32.25a95.89,95.89,0,0,1-25.37,14.3L134,199.13a8,8,0,0,0-3.91-1h-.19c-1.21,0-2.43,0-3.64,0a8.08,8.08,0,0,0-4.1,1l-28.84,16.1A96,96,0,0,1,67.88,201l-.11-32.2a8,8,0,0,0-1.22-4.22c-.62-1-1.23-2-1.8-3.06a8.09,8.09,0,0,0-3-3.06l-28.6-16.29a90.49,90.49,0,0,1,0-28.26L61.67,97.63a8,8,0,0,0,3-3c.58-1,1.19-2.06,1.81-3.06a7.94,7.94,0,0,0,1.22-4.21l.15-32.25a95.89,95.89,0,0,1,25.37-14.3L122,56.87a8,8,0,0,0,4.1,1c1.21,0,2.43,0,3.64,0a8.08,8.08,0,0,0,4.1-1l28.84-16.1A96,96,0,0,1,188.12,55l.11,32.2a8,8,0,0,0,1.22,4.22c.62,1,1.23,2,1.8,3.06a8.09,8.09,0,0,0,3,3.06l28.6,16.29A90.49,90.49,0,0,1,222.9,142.12Z"></path></svg>Set up</button><div class="flex items-center gap-3 opacity-50 cursor-not-allowed"><button type="button" role="switch" aria-checked="false" aria-label="Compress prompts with Headroom" disabled="" class="relative inline-flex shrink-0 cursor-pointer rounded-full transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2 bg-surface-2 border border-border [object Object] cursor-not-allowed"><span class="pointer-events-none inline-block rounded-full shadow-2xs bg-text-muted transition-transform duration-150 translate-x-0.5 size-3.5"></span></button></div></div></div><div class="grid gap-3 py-4 first:pt-0 last:pb-0 sm:grid-cols-[minmax(0,1fr)_auto] sm:items-start sm:gap-6" id="caveman-control"><div class="min-w-0"><div class="flex flex-wrap items-center gap-2"><p class="text-sm font-medium text-text-main">Compress output style<!-- --> <a href="https://github.com/JuliusBrussee/caveman" target="_blank" rel="noreferrer" class="text-xs font-normal text-primary hover:underline">(Caveman)</a></p></div><p class="mt-0.5 text-[13px] leading-relaxed text-text-muted">Injects a terse-style system prompt so technical answers come back shorter.</p></div><div class="flex shrink-0 items-center gap-2 sm:pt-0.5"><div class="flex items-center gap-3"><button type="button" role="switch" aria-checked="false" aria-label="Compress output style with Caveman" class="relative inline-flex shrink-0 cursor-pointer rounded-full transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2 bg-surface-2 border border-border [object Object]"><span class="pointer-events-none inline-block rounded-full shadow-2xs bg-text-muted transition-transform duration-150 translate-x-0.5 size-3.5"></span></button></div></div></div><div class="grid gap-3 py-4 first:pt-0 last:pb-0 sm:grid-cols-[minmax(0,1fr)_auto] sm:items-start sm:gap-6" id="ponytail-control"><div class="min-w-0"><div class="flex flex-wrap items-center gap-2"><p class="text-sm font-medium text-text-main">Bias toward minimal code<!-- --> <a href="https://github.com/DietrichGebert/ponytail" target="_blank" rel="noreferrer" class="text-xs font-normal text-primary hover:underline">(Ponytail)</a></p></div><p class="mt-0.5 text-[13px] leading-relaxed text-text-muted">Bias the model toward YAGNI: reuse the standard library, delete instead of adding.</p></div><div class="flex shrink-0 items-center gap-2 sm:pt-0.5"><div class="flex items-center gap-3"><button type="button" role="switch" aria-checked="false" aria-label="Bias toward minimal code with Ponytail" class="relative inline-flex shrink-0 cursor-pointer rounded-full transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2 bg-surface-2 border border-border [object Object]"><span class="pointer-events-none inline-block rounded-full shadow-2xs bg-text-muted transition-transform duration-150 translate-x-0.5 size-3.5"></span></button></div></div></div><div class="grid gap-3 py-4 first:pt-0 last:pb-0 sm:grid-cols-[minmax(0,1fr)_auto] sm:items-start sm:gap-6"><div class="min-w-0"><div class="flex flex-wrap items-center gap-2"><p class="text-sm font-medium text-text-main">Compress prompts as images<!-- --> <a href="https://github.com/teamchong/pxpipe" target="_blank" rel="noreferrer" class="text-xs font-normal text-primary hover:underline">(PXPIPE)</a></p><span class="text-xs px-2 py-0.5 rounded-md bg-surface-2 text-text-muted">Off</span></div><p class="mt-0.5 text-[13px] leading-relaxed text-text-muted">Renders large text context as images before sending it. Suited to huge prompts and long conversations.</p></div><div class="flex shrink-0 items-center gap-2 sm:pt-0.5"><button class="ui-button inline-flex items-center justify-center gap-2 rounded-lg font-medium transition-all duration-150 cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2 focus-visible:ring-offset-bg disabled:opacity-50 disabled:cursor-not-allowed border border-border bg-surface-2/80 text-text-main hover:bg-surface-3 hover:border-border shadow-2xs h-7.5 px-2.5 text-xs rounded-lg" data-variant="secondary">Set up</button><a href="/dashboard/pxpipe" class="text-xs text-primary hover:underline">Dashboard</a><div class="flex items-center gap-3 opacity-50 cursor-not-allowed"><button type="button" role="switch" aria-checked="false" aria-label="Compress prompts as images with PXPIPE" disabled="" class="relative inline-flex shrink-0 cursor-pointer rounded-full transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2 bg-surface-2 border border-border [object Object] cursor-not-allowed"><span class="pointer-events-none inline-block rounded-full shadow-2xs bg-text-muted transition-transform duration-150 translate-x-0.5 size-3.5"></span></button></div></div></div></div></div><div class="ui-card border rounded-xl bg-surface border-border shadow-soft p-5" data-variant="default" id="token-saver-catalog"><div class="flex items-center justify-between gap-4 mb-4"><div class="flex items-center gap-3 min-w-0"><div class="icon-box text-primary shrink-0"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[18px]" aria-hidden="true" data-icon="category"><path d="M122.34,109.66a8,8,0,0,0,11.32,0l40-40a8,8,0,0,0,0-11.32l-40-40a8,8,0,0,0-11.32,0l-40,40a8,8,0,0,0,0,11.32ZM128,35.31,156.69,64,128,92.69,99.31,64Zm5.66,111a8,8,0,0,0-11.32,0l-40,40a8,8,0,0,0,0,11.32l40,40a8,8,0,0,0,11.32,0l40-40a8,8,0,0,0,0-11.32ZM128,220.69,99.31,192,128,163.31,156.69,192Zm109.66-98.35-40-40a8,8,0,0,0-11.32,0l-40,40a8,8,0,0,0,0,11.32l40,40a8,8,0,0,0,11.32,0l40-40A8,8,0,0,0,237.66,122.34ZM192,156.69,163.31,128,192,99.31,220.69,128Zm-82.34-34.35-40-40a8,8,0,0,0-11.32,0l-40,40a8,8,0,0,0,0,11.32l40,40a8,8,0,0,0,11.32,0l40-40A8,8,0,0,0,109.66,122.34ZM64,156.69,35.31,128,64,99.31,92.69,128Z"></path></svg></div><div class="min-w-0"><h3 class="ui-card-title text-text-main font-semibold text-[15px] tracking-tight leading-snug">Engine catalog</h3><p class="text-[12.5px] text-text-muted mt-0.5 leading-relaxed">Every engine this build knows about, grouped by tier. Entries with no runtime are never wired to a fake toggle.</p></div></div><span class="font-mono text-xs text-text-muted">10<!-- --> covered · <!-- -->7<!-- --> unavailable</span></div><div class="overflow-x-auto rounded-[10px] border border-border-subtle"><table class="w-full min-w-[60rem] border-collapse text-left" aria-label="Token saver engine catalog"><thead><tr class="border-b border-border text-[13px] text-text-muted"><th scope="col" class="px-3 py-2 font-medium">Engine</th><th scope="col" class="px-3 py-2 font-medium">Runtime</th><th scope="col" class="px-3 py-2 font-medium">Status</th><th scope="col" class="px-3 py-2 font-medium">Control</th></tr></thead><tbody><tr class="border-b border-border-subtle bg-surface-2/60"><th scope="colgroup" colSpan="4" class="px-3 py-2 text-left"><span class="flex flex-wrap items-center gap-2"><span class="text-[13px] font-medium text-text-main">Safe default</span><span class="text-xs text-text-muted">5<!-- --> engine<!-- -->s</span></span></th></tr><tr class="border-b border-border-subtle last:border-b-0" aria-disabled="true"><td class="min-w-[18rem] px-3 py-2.5 align-top"><div class="flex min-w-0 flex-col gap-0.5"><span class="flex flex-wrap items-center gap-2"><span class="text-[13px] font-medium text-text-muted">Cross-turn session dedup</span><code class="font-mono text-[11px] text-text-subtle">session-dedup</code></span><span class="text-[13px] leading-relaxed text-text-muted">No runtime in this build — UNAVAILABLE: no cross-turn dedup store exists. L3 (open-sse/cache/l3.js) dedups only identical blocks WITHIN one outgoing request (the mutable last message) — this is not a fake cross-turn marker and not a toggle.</span></div></td><td class="min-w-[16rem] px-3 py-2.5 align-top"><span class="line-clamp-2 font-mono text-[11px] text-text-muted" title="No runtime in this build">No runtime in this build</span></td><td class="px-3 py-2.5 align-top"><span class="text-xs px-2 py-0.5 rounded-md bg-warning/10 text-warning">Unavailable</span></td><td class="px-3 py-2.5 align-top"><span class="text-xs text-text-muted">Not configurable</span></td></tr><tr class="border-b border-border-subtle last:border-b-0" aria-disabled="true"><td class="min-w-[18rem] px-3 py-2.5 align-top"><div class="flex min-w-0 flex-col gap-0.5"><span class="flex flex-wrap items-center gap-2"><span class="text-[13px] font-medium text-text-muted">Cache-control referencing (CCR)</span><code class="font-mono text-[11px] text-text-subtle">ccr</code></span><span class="text-[13px] leading-relaxed text-text-muted">No runtime in this build — No CCR runtime exists. L0&#x27;s cache_control breakpoints (open-sse/cache/l0.js) are prompt-cache hint markers inserted on a stable prefix — NOT content-addressed retrieval markers. Existing L0 (breakpoints) and L3 (within-request content-address dedup, open-sse/cache/l3.js) stay as-is; neither is CCR.</span></div></td><td class="min-w-[16rem] px-3 py-2.5 align-top"><span class="line-clamp-2 font-mono text-[11px] text-text-muted" title="No runtime in this build">No runtime in this build</span></td><td class="px-3 py-2.5 align-top"><span class="text-xs px-2 py-0.5 rounded-md bg-warning/10 text-warning">Unavailable</span></td><td class="px-3 py-2.5 align-top"><span class="text-xs text-text-muted">Not configurable</span></td></tr><tr class="border-b border-border-subtle last:border-b-0" aria-disabled="false"><td class="min-w-[18rem] px-3 py-2.5 align-top"><div class="flex min-w-0 flex-col gap-0.5"><span class="flex flex-wrap items-center gap-2"><span class="text-[13px] font-medium text-text-main">RTK mode: lite</span><code class="font-mono text-[11px] text-text-subtle">lite</code><span class="text-xs px-2 py-0.5 rounded-md bg-success/10 text-success">Safe default</span></span><span class="text-[13px] leading-relaxed text-text-muted">Exclusive mode over the same single RTK pass; compresses only blobs &gt;= 2KB. Least aggressive.</span></div></td><td class="min-w-[16rem] px-3 py-2.5 align-top"><span class="line-clamp-2 font-mono text-[11px] text-text-muted" title="open-sse/rtk/constants.js MODE_MIN_COMPRESS_SIZE.lite (2KB threshold)">open-sse/rtk/constants.js MODE_MIN_COMPRESS_SIZE.lite (2KB threshold)</span></td><td class="px-3 py-2.5 align-top"><span class="text-xs text-text-muted">Exclusive mode</span></td><td class="px-3 py-2.5 align-top"><button type="button" class="rounded-md border px-2.5 py-1 text-xs font-medium transition-colors border-border bg-surface text-text-muted hover:bg-surface-2 hover:text-text-main disabled:opacity-40" title="Exclusive mode over the same single RTK pass; compresses only blobs &gt;= 2KB. Least aggressive.">Use this mode</button></td></tr><tr class="border-b border-border-subtle last:border-b-0" aria-disabled="false"><td class="min-w-[18rem] px-3 py-2.5 align-top"><div class="flex min-w-0 flex-col gap-0.5"><span class="flex flex-wrap items-center gap-2"><span class="text-[13px] font-medium text-text-main">RTK (request token-killer)</span><code class="font-mono text-[11px] text-text-subtle">rtk</code><span class="text-xs px-2 py-0.5 rounded-md bg-success/10 text-success">Safe default</span></span><span class="text-[13px] leading-relaxed text-text-muted">Single pass over tool_result/function_call_output text; fail-open. On by default.</span></div></td><td class="min-w-[16rem] px-3 py-2.5 align-top"><span class="line-clamp-2 font-mono text-[11px] text-text-muted" title="open-sse/rtk/index.js — in-process tool_result compressor (OpenAI/Claude/Responses/Kiro shapes)">open-sse/rtk/index.js — in-process tool_result compressor (OpenAI/Claude/Responses/Kiro shapes)</span></td><td class="px-3 py-2.5 align-top"><span class="text-xs px-2 py-0.5 rounded-md bg-success/10 text-success">On</span></td><td class="px-3 py-2.5 align-top"><a href="#rtk" class="text-xs text-primary hover:underline">Master switch</a></td></tr><tr class="border-b border-border-subtle last:border-b-0" aria-disabled="false"><td class="min-w-[18rem] px-3 py-2.5 align-top"><div class="flex min-w-0 flex-col gap-0.5"><span class="flex flex-wrap items-center gap-2"><span class="text-[13px] font-medium text-text-main">RTK mode: standard</span><code class="font-mono text-[11px] text-text-subtle">standard</code><span class="text-xs px-2 py-0.5 rounded-md bg-success/10 text-success">Safe default</span></span><span class="text-[13px] leading-relaxed text-text-muted">Historical behavior; byte-identical to pre-mode RTK. The default mode.</span></div></td><td class="min-w-[16rem] px-3 py-2.5 align-top"><span class="line-clamp-2 font-mono text-[11px] text-text-muted" title="open-sse/rtk/constants.js MODE_MIN_COMPRESS_SIZE.standard (500B threshold, default)">open-sse/rtk/constants.js MODE_MIN_COMPRESS_SIZE.standard (500B threshold, default)</span></td><td class="px-3 py-2.5 align-top"><span class="text-xs text-text-muted">Exclusive mode</span></td><td class="px-3 py-2.5 align-top"><button type="button" disabled="" class="rounded-md border px-2.5 py-1 text-xs font-medium transition-colors border-primary bg-primary/10 text-primary" title="Historical behavior; byte-identical to pre-mode RTK. The default mode.">Active mode</button></td></tr><tr class="border-b border-border-subtle bg-surface-2/60"><th scope="colgroup" colSpan="4" class="px-3 py-2 text-left"><span class="flex flex-wrap items-center gap-2"><span class="text-[13px] font-medium text-text-main">Standard</span><span class="text-xs text-text-muted">5<!-- --> engine<!-- -->s</span></span></th></tr><tr class="border-b border-border-subtle last:border-b-0" aria-disabled="false"><td class="min-w-[18rem] px-3 py-2.5 align-top"><div class="flex min-w-0 flex-col gap-0.5"><span class="flex flex-wrap items-center gap-2"><span class="text-[13px] font-medium text-text-main">Codex Responses tool outputs</span><code class="font-mono text-[11px] text-text-subtle">codex-responses</code><span class="text-xs px-2 py-0.5 rounded-md bg-success/10 text-success">Safe default</span></span><span class="text-[13px] leading-relaxed text-text-muted">Covered WITHIN RTK: compresses Responses-format function_call_output output in-place. Toggled by rtkEnabled; no separate runtime.</span></div></td><td class="min-w-[16rem] px-3 py-2.5 align-top"><span class="line-clamp-2 font-mono text-[11px] text-text-muted" title="open-sse/rtk/index.js — shape 4 handles { type: &quot;function_call_output&quot;, output }">open-sse/rtk/index.js — shape 4 handles { type: &quot;function_call_output&quot;, output }</span></td><td class="px-3 py-2.5 align-top"><span class="text-xs px-2 py-0.5 rounded-md bg-success/10 text-success">Covered · RTK on</span></td><td class="px-3 py-2.5 align-top"><a href="#rtk" class="text-xs text-primary hover:underline">Toggle via RTK master</a></td></tr><tr class="border-b border-border-subtle last:border-b-0" aria-disabled="false"><td class="min-w-[18rem] px-3 py-2.5 align-top"><div class="flex min-w-0 flex-col gap-0.5"><span class="flex flex-wrap items-center gap-2"><span class="text-[13px] font-medium text-text-main">Headroom external proxy</span><code class="font-mono text-[11px] text-text-subtle">headroom</code></span><span class="text-[13px] leading-relaxed text-text-muted">Requires a reachable HEADROOM_URL endpoint; fails open (skips) when absent. Opt-in.</span></div></td><td class="min-w-[16rem] px-3 py-2.5 align-top"><span class="line-clamp-2 font-mono text-[11px] text-text-muted" title="open-sse/rtk/headroom.js — external compression proxy">open-sse/rtk/headroom.js — external compression proxy</span></td><td class="px-3 py-2.5 align-top"><span class="text-xs px-2 py-0.5 rounded-md bg-surface-2 text-text-muted">Off</span></td><td class="px-3 py-2.5 align-top"><a href="#headroom-control" class="text-xs text-primary hover:underline">Control</a></td></tr><tr class="border-b border-border-subtle last:border-b-0" aria-disabled="true"><td class="min-w-[18rem] px-3 py-2.5 align-top"><div class="flex min-w-0 flex-col gap-0.5"><span class="flex flex-wrap items-center gap-2"><span class="text-[13px] font-medium text-text-muted">Relevance retrieval</span><code class="font-mono text-[11px] text-text-subtle">relevance</code></span><span class="text-[13px] leading-relaxed text-text-muted">No runtime in this build — UNAVAILABLE: requires a real retrieval/ranking backend wired for token saving; none exists in this repo. Not a toggle.</span></div></td><td class="min-w-[16rem] px-3 py-2.5 align-top"><span class="line-clamp-2 font-mono text-[11px] text-text-muted" title="No runtime in this build">No runtime in this build</span></td><td class="px-3 py-2.5 align-top"><span class="text-xs px-2 py-0.5 rounded-md bg-warning/10 text-warning">Unavailable</span></td><td class="px-3 py-2.5 align-top"><span class="text-xs text-text-muted">Not configurable</span></td></tr><tr class="border-b border-border-subtle last:border-b-0" aria-disabled="false"><td class="min-w-[18rem] px-3 py-2.5 align-top"><div class="flex min-w-0 flex-col gap-0.5"><span class="flex flex-wrap items-center gap-2"><span class="text-[13px] font-medium text-text-main">Caveman output style</span><code class="font-mono text-[11px] text-text-subtle">caveman</code></span><span class="text-[13px] leading-relaxed text-text-muted">Injects a response-shaping instruction into the system message; it does not rewrite provider output. Opt-in.</span></div></td><td class="min-w-[16rem] px-3 py-2.5 align-top"><span class="line-clamp-2 font-mono text-[11px] text-text-muted" title="open-sse/rtk/caveman.js — system-prompt injector (level lite/full/ultra/wenyan)">open-sse/rtk/caveman.js — system-prompt injector (level lite/full/ultra/wenyan)</span></td><td class="px-3 py-2.5 align-top"><span class="text-xs px-2 py-0.5 rounded-md bg-surface-2 text-text-muted">Off</span></td><td class="px-3 py-2.5 align-top"><a href="#caveman-control" class="text-xs text-primary hover:underline">Control</a></td></tr><tr class="border-b border-border-subtle last:border-b-0" aria-disabled="true"><td class="min-w-[18rem] px-3 py-2.5 align-top"><div class="flex min-w-0 flex-col gap-0.5"><span class="flex flex-wrap items-center gap-2"><span class="text-[13px] font-medium text-text-muted">MCP tool-output accessibility</span><code class="font-mono text-[11px] text-text-subtle">mcp-accessibility</code></span><span class="text-[13px] leading-relaxed text-text-muted">No runtime in this build — UNAVAILABLE: the MCP stdio/SSE bridge (src/app/api/mcp/[plugin]/sse, src/lib/mcp/stdioSseBridge.js) exposes dashboard MCP plugins, but that bridging is NOT separate-store/scoped MCP tool-output compression. No such compression exists — not a toggle.</span></div></td><td class="min-w-[16rem] px-3 py-2.5 align-top"><span class="line-clamp-2 font-mono text-[11px] text-text-muted" title="No runtime in this build">No runtime in this build</span></td><td class="px-3 py-2.5 align-top"><span class="text-xs px-2 py-0.5 rounded-md bg-warning/10 text-warning">Unavailable</span></td><td class="px-3 py-2.5 align-top"><span class="text-xs text-text-muted">Not configurable</span></td></tr><tr class="border-b border-border-subtle bg-surface-2/60"><th scope="colgroup" colSpan="4" class="px-3 py-2 text-left"><span class="flex flex-wrap items-center gap-2"><span class="text-[13px] font-medium text-text-main">Full</span><span class="text-xs text-text-muted">1<!-- --> engine</span></span></th></tr><tr class="border-b border-border-subtle last:border-b-0" aria-disabled="false"><td class="min-w-[18rem] px-3 py-2.5 align-top"><div class="flex min-w-0 flex-col gap-0.5"><span class="flex flex-wrap items-center gap-2"><span class="text-[13px] font-medium text-text-main">RTK mode: aggressive</span><code class="font-mono text-[11px] text-text-subtle">aggressive</code></span><span class="text-[13px] leading-relaxed text-text-muted">Exclusive mode over the same single RTK pass; lowers the per-blob threshold to 100B so more blobs are eligible. It does NOT summarize or age conversation turns.</span></div></td><td class="min-w-[16rem] px-3 py-2.5 align-top"><span class="line-clamp-2 font-mono text-[11px] text-text-muted" title="open-sse/rtk/constants.js MODE_MIN_COMPRESS_SIZE.aggressive (100B threshold)">open-sse/rtk/constants.js MODE_MIN_COMPRESS_SIZE.aggressive (100B threshold)</span></td><td class="px-3 py-2.5 align-top"><span class="text-xs text-text-muted">Exclusive mode</span></td><td class="px-3 py-2.5 align-top"><button type="button" class="rounded-md border px-2.5 py-1 text-xs font-medium transition-colors border-border bg-surface text-text-muted hover:bg-surface-2 hover:text-text-main disabled:opacity-40" title="Exclusive mode over the same single RTK pass; lowers the per-blob threshold to 100B so more blobs are eligible. It does NOT summarize or age conversation turns.">Use this mode</button></td></tr><tr class="border-b border-border-subtle bg-surface-2/60"><th scope="colgroup" colSpan="4" class="px-3 py-2 text-left"><span class="flex flex-wrap items-center gap-2"><span class="text-[13px] font-medium text-text-main">Ultra</span><span class="text-xs text-text-muted">3<!-- --> engine<!-- -->s</span><span class="text-xs px-2 py-0.5 rounded-md bg-warning/10 text-warning">heuristic availability</span></span></th></tr><tr class="border-b border-border-subtle last:border-b-0" aria-disabled="true"><td class="min-w-[18rem] px-3 py-2.5 align-top"><div class="flex min-w-0 flex-col gap-0.5"><span class="flex flex-wrap items-center gap-2"><span class="text-[13px] font-medium text-text-muted">LLMLingua prompt compression</span><code class="font-mono text-[11px] text-text-subtle">llmlingua</code></span><span class="text-[13px] leading-relaxed text-text-muted">No runtime in this build — Heuristic status: unavailable — dependency not installed; no runtime path.</span></div></td><td class="min-w-[16rem] px-3 py-2.5 align-top"><span class="line-clamp-2 font-mono text-[11px] text-text-muted" title="No runtime in this build">No runtime in this build</span></td><td class="px-3 py-2.5 align-top"><span class="text-xs px-2 py-0.5 rounded-md bg-warning/10 text-warning">Unavailable</span></td><td class="px-3 py-2.5 align-top"><span class="text-xs text-text-muted">Not configurable</span></td></tr><tr class="border-b border-border-subtle last:border-b-0" aria-disabled="true"><td class="min-w-[18rem] px-3 py-2.5 align-top"><div class="flex min-w-0 flex-col gap-0.5"><span class="flex flex-wrap items-center gap-2"><span class="text-[13px] font-medium text-text-muted">Ultra compression (SLM)</span><code class="font-mono text-[11px] text-text-subtle">ultra</code></span><span class="text-[13px] leading-relaxed text-text-muted">No runtime in this build — Heuristic status: unavailable — requires a local small language model; none is wired.</span></div></td><td class="min-w-[16rem] px-3 py-2.5 align-top"><span class="line-clamp-2 font-mono text-[11px] text-text-muted" title="No runtime in this build">No runtime in this build</span></td><td class="px-3 py-2.5 align-top"><span class="text-xs px-2 py-0.5 rounded-md bg-warning/10 text-warning">Unavailable</span></td><td class="px-3 py-2.5 align-top"><span class="text-xs text-text-muted">Not configurable</span></td></tr><tr class="border-b border-border-subtle last:border-b-0" aria-disabled="true"><td class="min-w-[18rem] px-3 py-2.5 align-top"><div class="flex min-w-0 flex-col gap-0.5"><span class="flex flex-wrap items-center gap-2"><span class="text-[13px] font-medium text-text-muted">OmniGlyph encoding</span><code class="font-mono text-[11px] text-text-subtle">omniglyph</code></span><span class="text-[13px] leading-relaxed text-text-muted">No runtime in this build — Heuristic status: unavailable — dependency/model not installed; no runtime path.</span></div></td><td class="min-w-[16rem] px-3 py-2.5 align-top"><span class="line-clamp-2 font-mono text-[11px] text-text-muted" title="No runtime in this build">No runtime in this build</span></td><td class="px-3 py-2.5 align-top"><span class="text-xs px-2 py-0.5 rounded-md bg-warning/10 text-warning">Unavailable</span></td><td class="px-3 py-2.5 align-top"><span class="text-xs text-text-muted">Not configurable</span></td></tr><tr class="border-b border-border-subtle bg-surface-2/60"><th scope="colgroup" colSpan="4" class="px-3 py-2 text-left"><span class="flex flex-wrap items-center gap-2"><span class="text-[13px] font-medium text-text-main">Output styles</span><span class="text-xs text-text-muted">3<!-- --> engine<!-- -->s</span></span></th></tr><tr class="border-b border-border-subtle last:border-b-0" aria-disabled="false"><td class="min-w-[18rem] px-3 py-2.5 align-top"><div class="flex min-w-0 flex-col gap-0.5"><span class="flex flex-wrap items-center gap-2"><span class="text-[13px] font-medium text-text-main">Output style: terse prose</span><code class="font-mono text-[11px] text-text-subtle">terse-prose</code><span class="text-xs px-2 py-0.5 rounded-md bg-surface-2 text-text-muted">instruction injection</span></span><span class="text-[13px] leading-relaxed text-text-muted">Covered: Caveman injects terse-prose response-shaping instructions into the system message without rewriting output. No separate engine — toggled via caveman settings.</span></div></td><td class="min-w-[16rem] px-3 py-2.5 align-top"><span class="line-clamp-2 font-mono text-[11px] text-text-muted" title="covered by existing Caveman prompt injection (open-sse/rtk/caveman.js)">covered by existing Caveman prompt injection (open-sse/rtk/caveman.js)</span></td><td class="px-3 py-2.5 align-top"><span class="text-xs px-2 py-0.5 rounded-md bg-surface-2 text-text-muted">Off · via Caveman</span></td><td class="px-3 py-2.5 align-top"><a href="#caveman-control" class="text-xs text-primary hover:underline">Caveman control</a></td></tr><tr class="border-b border-border-subtle last:border-b-0" aria-disabled="false"><td class="min-w-[18rem] px-3 py-2.5 align-top"><div class="flex min-w-0 flex-col gap-0.5"><span class="flex flex-wrap items-center gap-2"><span class="text-[13px] font-medium text-text-main">Output style: less code</span><code class="font-mono text-[11px] text-text-subtle">less-code</code><span class="text-xs px-2 py-0.5 rounded-md bg-surface-2 text-text-muted">instruction injection</span></span><span class="text-[13px] leading-relaxed text-text-muted">Covered: Ponytail injects less-code response-shaping instructions into the system message without rewriting output. No separate engine — toggled via ponytail settings.</span></div></td><td class="min-w-[16rem] px-3 py-2.5 align-top"><span class="line-clamp-2 font-mono text-[11px] text-text-muted" title="covered by existing Ponytail prompt injection (open-sse/rtk/ponytail.js)">covered by existing Ponytail prompt injection (open-sse/rtk/ponytail.js)</span></td><td class="px-3 py-2.5 align-top"><span class="text-xs px-2 py-0.5 rounded-md bg-surface-2 text-text-muted">Off · via Ponytail</span></td><td class="px-3 py-2.5 align-top"><a href="#ponytail-control" class="text-xs text-primary hover:underline">Ponytail control</a></td></tr><tr class="border-b border-border-subtle last:border-b-0" aria-disabled="false"><td class="min-w-[18rem] px-3 py-2.5 align-top"><div class="flex min-w-0 flex-col gap-0.5"><span class="flex flex-wrap items-center gap-2"><span class="text-[13px] font-medium text-text-main">Ponytail output style</span><code class="font-mono text-[11px] text-text-subtle">ponytail</code></span><span class="text-[13px] leading-relaxed text-text-muted">Injects the lazy-senior-dev response-shaping instruction into the system message. Opt-in.</span></div></td><td class="min-w-[16rem] px-3 py-2.5 align-top"><span class="line-clamp-2 font-mono text-[11px] text-text-muted" title="open-sse/rtk/ponytail.js — system-prompt injector (level lite/full/ultra)">open-sse/rtk/ponytail.js — system-prompt injector (level lite/full/ultra)</span></td><td class="px-3 py-2.5 align-top"><span class="text-xs px-2 py-0.5 rounded-md bg-surface-2 text-text-muted">Off</span></td><td class="px-3 py-2.5 align-top"><a href="#ponytail-control" class="text-xs text-primary hover:underline">Control</a></td></tr></tbody></table></div></div><div class="ui-card border rounded-xl bg-surface border-border shadow-soft p-5" data-variant="default" id="token-saver-general"><div class="flex items-center justify-between gap-4 mb-4"><div class="flex items-center gap-3 min-w-0"><div class="icon-box text-primary shrink-0"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[18px]" aria-hidden="true" data-icon="tune"><path d="M176,80a8,8,0,0,1,8-8h32a8,8,0,0,1,0,16H184A8,8,0,0,1,176,80ZM40,88H144v16a8,8,0,0,0,16,0V56a8,8,0,0,0-16,0V72H40a8,8,0,0,0,0,16Zm176,80H120a8,8,0,0,0,0,16h96a8,8,0,0,0,0-16ZM88,144a8,8,0,0,0-8,8v16H40a8,8,0,0,0,0,16H80v16a8,8,0,0,0,16,0V152A8,8,0,0,0,88,144Z"></path></svg></div><div class="min-w-0"><h3 class="ui-card-title text-text-main font-semibold text-[15px] tracking-tight leading-snug">Preferences</h3><p class="text-[12.5px] text-text-muted mt-0.5 leading-relaxed">Global behavior shared by every compression engine.</p></div></div></div><div class="divide-y divide-border-subtle"><div class="grid gap-3 py-4 first:pt-0 last:pb-0 sm:grid-cols-[minmax(0,1fr)_auto] sm:items-start sm:gap-6"><div class="min-w-0"><div class="flex flex-wrap items-center gap-2"><p class="text-sm font-medium text-text-main">Auto-trigger threshold</p></div><p class="mt-0.5 text-[13px] leading-relaxed text-text-muted">RTK runs only when the deterministic request-size estimate is &gt;= this token count; 0 = always.</p></div><div class="flex shrink-0 items-center gap-2 sm:pt-0.5"><div class="flex flex-col gap-1.5 w-36"><div class="relative"><input id="_R_26elfiv5umbrb_" type="number" class="w-full h-[34px] py-1.5 px-3 text-sm text-text-main bg-surface rounded-md border border-border placeholder:text-text-subtle focus:outline-none focus:ring-2 focus:ring-primary/25 focus:border-primary transition-colors duration-150 disabled:opacity-50 disabled:cursor-not-allowed text-[16px] sm:text-sm font-mono text-sm" min="0" step="100" aria-label="Auto-trigger threshold in tokens" value="4000"/></div></div></div></div><div class="grid gap-3 py-4 first:pt-0 last:pb-0 sm:grid-cols-[minmax(0,1fr)_auto] sm:items-start sm:gap-6"><div class="min-w-0"><div class="flex flex-wrap items-center gap-2"><p class="text-sm font-medium text-text-main">Response focus</p></div><p class="mt-0.5 text-[13px] leading-relaxed text-text-muted">Code-first or explanation-first answers. Balanced adds no extra focus instruction.</p></div><div class="flex shrink-0 items-center gap-2 sm:pt-0.5"><div class="flex flex-col gap-1.5 w-44"><div class="relative"><select id="_R_2aelfiv5umbrb_" class="w-full h-[34px] py-1.5 px-3 pr-10 text-sm text-text-main bg-surface border border-border rounded-md appearance-none focus:outline-none focus:ring-2 focus:ring-primary/25 focus:border-primary transition-colors duration-150 disabled:opacity-50 disabled:cursor-not-allowed text-[16px] sm:text-sm" aria-label="Response focus"><option value="" disabled="">Select an option</option><option value="balanced" selected="">Balanced</option><option value="code">Code-first</option><option value="explanation">Explanation-first</option></select><div class="absolute inset-y-0 right-0 flex items-center pr-3 pointer-events-none text-text-muted"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[18px]" aria-hidden="true" data-icon="expand_more"><path d="M216.49,104.49l-80,80a12,12,0,0,1-17,0l-80-80a12,12,0,0,1,17-17L128,159l71.51-71.52a12,12,0,0,1,17,17Z"></path></svg></div></div></div></div></div><div class="grid gap-3 py-4 first:pt-0 last:pb-0 sm:grid-cols-[minmax(0,1fr)_auto] sm:items-start sm:gap-6"><div class="min-w-0"><div class="flex flex-wrap items-center gap-2"><p class="text-sm font-medium text-text-main">Preserve system prompt</p></div><p class="mt-0.5 text-[13px] leading-relaxed text-text-muted">The system prompt is always captured in the L0 snapshot before token savers run and restored by the cache interlock (open-sse/cache/l0.js). Not user-toggleable.</p></div><div class="flex shrink-0 items-center gap-2 sm:pt-0.5"><span class="text-xs px-2 py-0.5 rounded-md bg-success/10 text-success">Always</span></div></div><div class="grid gap-3 py-4 first:pt-0 last:pb-0 sm:grid-cols-[minmax(0,1fr)_auto] sm:items-start sm:gap-6"><div class="min-w-0"><div class="flex flex-wrap items-center gap-2"><p class="text-sm font-medium text-text-main">Cache-aligned live zone</p></div><p class="mt-0.5 text-[13px] leading-relaxed text-text-muted">RTK compresses only the cache-aligned live tail (messages from cacheState.prefixLen onward); Kiro/Responses keep full-body behavior. Not user-toggleable.</p></div><div class="flex shrink-0 items-center gap-2 sm:pt-0.5"><span class="text-xs px-2 py-0.5 rounded-md bg-success/10 text-success">Enabled · fixed</span></div></div></div></div></div><div class="ui-card border rounded-xl bg-surface border-border shadow-soft p-4" data-variant="default"><div class="flex items-center justify-between gap-4 mb-4"><div class="flex items-center gap-3 min-w-0"><div class="icon-box text-primary shrink-0"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 256 256" class="text-[18px]" aria-hidden="true" data-icon="token"><path d="M229.5,113,166.06,89.94,143,26.5a16,16,0,0,0-30,0L89.94,89.94,26.5,113a16,16,0,0,0,0,30l63.44,23.07L113,229.5a16,16,0,0,0,30,0l23.07-63.44L229.5,143a16,16,0,0,0,0-30ZM157.08,152.3a8,8,0,0,0-4.78,4.78L128,223.9l-24.3-66.82a8,8,0,0,0-4.78-4.78L32.1,128l66.82-24.3a8,8,0,0,0,4.78-4.78L128,32.1l24.3,66.82a8,8,0,0,0,4.78,4.78L223.9,128Z"></path></svg></div><div class="min-w-0"><h3 class="ui-card-title text-text-main font-semibold text-[15px] tracking-tight leading-snug">Token saver savings</h3><p class="text-[12.5px] text-text-muted mt-0.5 leading-relaxed">Savings by stage · 7d</p></div></div><div role="group" aria-label="Token saver period" class="ui-segmented-control inline-flex items-center p-1 rounded-lg overflow-x-auto gap-0.5 bg-surface-2 border border-border"><button type="button" aria-pressed="false" class="inline-flex items-center justify-center shrink-0 px-3 rounded-md font-medium transition-all duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary h-7 text-xs border border-transparent text-text-muted hover:text-text-main">Today</button><button type="button" aria-pressed="false" class="inline-flex items-center justify-center shrink-0 px-3 rounded-md font-medium transition-all duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary h-7 text-xs border border-transparent text-text-muted hover:text-text-main">24h</button><button type="button" aria-pressed="true" class="inline-flex items-center justify-center shrink-0 px-3 rounded-md font-medium transition-all duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary h-7 text-xs bg-surface text-primary font-semibold border border-border-subtle shadow-2xs">7D</button><button type="button" aria-pressed="false" class="inline-flex items-center justify-center shrink-0 px-3 rounded-md font-medium transition-all duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary h-7 text-xs border border-transparent text-text-muted hover:text-text-main">30D</button><button type="button" aria-pressed="false" class="inline-flex items-center justify-center shrink-0 px-3 rounded-md font-medium transition-all duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary h-7 text-xs border border-transparent text-text-muted hover:text-text-main">60D</button></div></div><div class="flex h-40 items-center justify-center text-sm text-text-muted" role="status" aria-live="polite">Loading token-saver stats…</div></div></div><!--$--><!--/$--></div></div></main></div><script src="/_next/static/chunks/webpack-cfe64bcd232c635c.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[21110,[\"9647\",\"static/chunks/9647-83de9c8c0d2ffe2a.js\",\"2048\",\"static/chunks/2048-9d3db5763af19b9f.js\",\"6439\",\"static/chunks/6439-3dc656d19715c56c.js\",\"1321\",\"static/chunks/1321-6b997794bb843da8.js\",\"5497\",\"static/chunks/5497-307a8ef5cdb7207e.js\",\"9305\",\"static/chunks/app/(dashboard)/layout-5b91d30e5ec17946.js\"],\"ThemeProvider\"]\n3:I[94635,[\"6198\",\"static/chunks/6198-c12e3b40da04e356.js\",\"1321\",\"static/chunks/1321-6b997794bb843da8.js\",\"7177\",\"static/chunks/app/layout-0fd748451eb66376.js\"],\"RuntimeI18nProvider\"]\n4:I[57121,[],\"\"]\n5:I[74581,[],\"\"]\n6:I[30565,[\"6198\",\"static/chunks/6198-c12e3b40da04e356.js\",\"1321\",\"static/chunks/1321-6b997794bb843da8.js\",\"7177\",\"static/chunks/app/layout-0fd748451eb66376.js\"],\"GoogleAnalytics\"]\n7:I[7648,[\"9647\",\"static/chunks/9647-83de9c8c0d2ffe2a.js\",\"2048\",\"static/chunks/2048-9d3db5763af19b9f.js\",\"6439\",\"static/chunks/6439-3dc656d19715c56c.js\",\"1321\",\"static/chunks/1321-6b997794bb843da8.js\",\"5497\",\"static/chunks/5497-307a8ef5cdb7207e.js\",\"9305\",\"static/chunks/app/(dashboard)/layout-5b91d30e5ec17946.js\"],\"default\"]\n8:I[25607,[\"9647\",\"static/chunks/9647-83de9c8c0d2ffe2a.js\",\"2048\",\"static/chunks/2048-9d3db5763af19b9f.js\",\"8382\",\"static/chunks/8382-b04c92635bbb061a.js\",\"6439\",\"static/chunks/6439-3dc656d19715c56c.js\",\"1321\",\"static/chunks/1321-6b997794bb843da8.js\",\"5497\",\"static/chunks/5497-307a8ef5cdb7207e.js\",\"9839\",\"static/chunks/app/(dashboard)/dashboard/token-saver/page-8eae7ddbc06522e6.js\"],\"default\"]\n9:I[60799,[\"9647\",\"static/chunks/9647-83de9c8c0d2ffe2a.js\",\"2048\",\"static/chunks/2048-9d3db5763af19b9f.js\",\"8382\",\"static/chunks/8382-b04c92635bbb061a.js\",\"6439\",\"static/chunks/6439-3dc656d19715c56c.js\",\"1321\",\"static/chunks/1321-6b997794bb843da8.js\",\"5497\",\"static/chunks/5497-307a8ef5cdb7207e.js\",\"9839\",\"static/chunks/app/(dashboard)/dashboard/token-saver/page-8eae7ddbc06522e6.js\"],\"default\"]\na:I[90484,[],\"OutletBoundary\"]\nb:\"$Sreact.suspense\"\ne:I[90484,[],\"ViewportBoundary\"]\n10:I[90484,[],\"MetadataBoundary\"]\n12:I[27123,[],\"default\",1]\n:HL[\"/_next/static/css/1e41699163398962.css\",\"style\"]\n:HL[\"/_next/static/css/01b1ec05918332c3.css\",\"style\"]\nd:X\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"dashboard\",\"token-saver\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"(dashboard)\",{\"children\":[\"dashboard\",{\"children\":[\"token-saver\",{\"children\":[\"__PAGE__\",{},\"$undefined\",\"$undefined\",4608]},\"$undefined\",\"$undefined\",4608]},\"$undefined\",\"$undefined\",4608]},\"$undefined\",\"$undefined\",4608]},\"$undefined\",\"$undefined\",4624],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/1e41699163398962.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/01b1ec05918332c3.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"dark\",\"suppressHydrationWarning\":true,\"children\":[\"$\",\"body\",null,{\"className\":\"__variable_e2cc43 __variable_aa62b7 font-sans antialiased\",\"children\":[[\"$\",\"$L2\",null,{\"children\":[\"$\",\"$L3\",null,{\"children\":[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}],[\"$\",\"$L6\",null,{\"gaId\":\"G-LC959F603F\"}]]}]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L7\",null,{\"children\":[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:0:props:children:props:children:props:notFound:0:1:props:style\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:0:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style\",\"children\":404}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:0:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:0:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style\",\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"div\",null,{\"className\":\"flex flex-col gap-6\",\"children\":[[\"$\",\"$L8\",null,{}],[\"$\",\"$L9\",null,{}]]}],null,[\"$\",\"$La\",null,{\"children\":[\"$\",\"$b\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@c\"}]}]]}],{},null,false,null]},null,false,\"$d\"]},null,false,\"$d\"]},null,false,null]},null,false,null],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$Le\",null,{\"children\":\"$Lf\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$L10\",null,{\"children\":[\"$\",\"$b\",null,{\"name\":\"Next.Metadata\",\"children\":\"$L11\"}]}]}],null]}],false]],\"m\":\"$undefined\",\"G\":[\"$12\",[]],\"S\":true,\"h\":null,\"r\":\"$undefined\",\"s\":\"$undefined\",\"a\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"DryEkcB2pIbzN1YYgNcUS\"}\n"])</script><script>self.__next_f.push([1,"d:C\nf:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}],[\"$\",\"meta\",\"2\",{\"name\":\"theme-color\",\"content\":\"#F5F4F0\",\"media\":\"(prefers-color-scheme: light)\"}],[\"$\",\"meta\",\"3\",{\"name\":\"theme-color\",\"content\":\"#09090B\",\"media\":\"(prefers-color-scheme: dark)\"}]]\n"])</script><script>self.__next_f.push([1,"13:I[86869,[],\"IconMark\"]\nc:null\n11:[[\"$\",\"title\",\"0\",{\"children\":\"MiawRouter - Local AI Request Router\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Route AI requests through one local endpoint and manage provider connections in a web dashboard.\"}],[\"$\",\"link\",\"2\",{\"rel\":\"manifest\",\"href\":\"/manifest.webmanifest\",\"crossOrigin\":\"$undefined\"}],[\"$\",\"link\",\"3\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?7ea3ab789c052974\",\"type\":\"image/x-icon\",\"sizes\":\"256x256\"}],[\"$\",\"link\",\"4\",{\"rel\":\"icon\",\"href\":\"/miawrouter-favicon-16.png\",\"sizes\":\"16x16\"}],[\"$\",\"link\",\"5\",{\"rel\":\"icon\",\"href\":\"/miawrouter-favicon-32.png\",\"sizes\":\"32x32\"}],[\"$\",\"link\",\"6\",{\"rel\":\"icon\",\"href\":\"/miawrouter-favicon-48.png\",\"sizes\":\"48x48\"}],[\"$\",\"$L13\",\"7\",{}]]\n"])</script></body></html>