jinn-cli 0.3.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (133) hide show
  1. package/LICENSE +21 -0
  2. package/dist/bin/jimmy.js +0 -0
  3. package/dist/src/cli/chrome-allow.d.ts.map +1 -1
  4. package/dist/src/cli/chrome-allow.js +14 -5
  5. package/dist/src/cli/chrome-allow.js.map +1 -1
  6. package/dist/src/cli/list.js +1 -1
  7. package/dist/src/cli/list.js.map +1 -1
  8. package/dist/src/cli/nuke.js +2 -2
  9. package/dist/src/cli/nuke.js.map +1 -1
  10. package/dist/src/cli/setup.d.ts.map +1 -1
  11. package/dist/src/cli/setup.js +2 -1
  12. package/dist/src/cli/setup.js.map +1 -1
  13. package/dist/src/connectors/slack/index.d.ts +9 -1
  14. package/dist/src/connectors/slack/index.d.ts.map +1 -1
  15. package/dist/src/connectors/slack/index.js +172 -8
  16. package/dist/src/connectors/slack/index.js.map +1 -1
  17. package/dist/src/connectors/slack/threads.d.ts +1 -4
  18. package/dist/src/connectors/slack/threads.d.ts.map +1 -1
  19. package/dist/src/connectors/slack/threads.js +17 -7
  20. package/dist/src/connectors/slack/threads.js.map +1 -1
  21. package/dist/src/connectors/slack/threads.test.js +42 -8
  22. package/dist/src/connectors/slack/threads.test.js.map +1 -1
  23. package/dist/src/cron/runner.d.ts.map +1 -1
  24. package/dist/src/cron/runner.js +16 -5
  25. package/dist/src/cron/runner.js.map +1 -1
  26. package/dist/src/engines/claude.d.ts.map +1 -1
  27. package/dist/src/engines/claude.js +19 -4
  28. package/dist/src/engines/claude.js.map +1 -1
  29. package/dist/src/gateway/api.d.ts.map +1 -1
  30. package/dist/src/gateway/api.js +207 -3
  31. package/dist/src/gateway/api.js.map +1 -1
  32. package/dist/src/gateway/lifecycle.d.ts.map +1 -1
  33. package/dist/src/gateway/lifecycle.js +16 -6
  34. package/dist/src/gateway/lifecycle.js.map +1 -1
  35. package/dist/src/gateway/org.d.ts.map +1 -1
  36. package/dist/src/gateway/org.js +1 -0
  37. package/dist/src/gateway/org.js.map +1 -1
  38. package/dist/src/gateway/server.d.ts.map +1 -1
  39. package/dist/src/gateway/server.js +40 -1
  40. package/dist/src/gateway/server.js.map +1 -1
  41. package/dist/src/gateway/watcher.d.ts.map +1 -1
  42. package/dist/src/gateway/watcher.js +9 -2
  43. package/dist/src/gateway/watcher.js.map +1 -1
  44. package/dist/src/mcp/gateway-server.d.ts +13 -0
  45. package/dist/src/mcp/gateway-server.d.ts.map +1 -0
  46. package/dist/src/mcp/gateway-server.js +375 -0
  47. package/dist/src/mcp/gateway-server.js.map +1 -0
  48. package/dist/src/mcp/resolver.d.ts +19 -0
  49. package/dist/src/mcp/resolver.d.ts.map +1 -0
  50. package/dist/src/mcp/resolver.js +153 -0
  51. package/dist/src/mcp/resolver.js.map +1 -0
  52. package/dist/src/sessions/context.d.ts +1 -0
  53. package/dist/src/sessions/context.d.ts.map +1 -1
  54. package/dist/src/sessions/context.js +34 -3
  55. package/dist/src/sessions/context.js.map +1 -1
  56. package/dist/src/sessions/limits.d.ts +7 -0
  57. package/dist/src/sessions/limits.d.ts.map +1 -0
  58. package/dist/src/sessions/limits.js +42 -0
  59. package/dist/src/sessions/limits.js.map +1 -0
  60. package/dist/src/sessions/manager.d.ts +3 -1
  61. package/dist/src/sessions/manager.d.ts.map +1 -1
  62. package/dist/src/sessions/manager.js +38 -17
  63. package/dist/src/sessions/manager.js.map +1 -1
  64. package/dist/src/sessions/registry.d.ts +6 -0
  65. package/dist/src/sessions/registry.d.ts.map +1 -1
  66. package/dist/src/sessions/registry.js +34 -5
  67. package/dist/src/sessions/registry.js.map +1 -1
  68. package/dist/src/shared/effort.d.ts +17 -0
  69. package/dist/src/shared/effort.d.ts.map +1 -0
  70. package/dist/src/shared/effort.js +44 -0
  71. package/dist/src/shared/effort.js.map +1 -0
  72. package/dist/src/shared/paths.d.ts +2 -0
  73. package/dist/src/shared/paths.d.ts.map +1 -1
  74. package/dist/src/shared/paths.js +2 -0
  75. package/dist/src/shared/paths.js.map +1 -1
  76. package/dist/src/shared/types.d.ts +57 -1
  77. package/dist/src/shared/types.d.ts.map +1 -1
  78. package/dist/src/stt/stt.d.ts +24 -0
  79. package/dist/src/stt/stt.d.ts.map +1 -0
  80. package/dist/src/stt/stt.js +203 -0
  81. package/dist/src/stt/stt.js.map +1 -0
  82. package/dist/web/404.html +1 -1
  83. package/dist/web/_next/static/chunks/198-3e82ded4f04a0aae.js +1 -0
  84. package/dist/web/_next/static/chunks/{704-af2893821e1d18dc.js → 704-ca24be493a922639.js} +1 -1
  85. package/dist/web/_next/static/chunks/{73-c226535579393e21.js → 73-2d6e730cea0fe6c8.js} +1 -1
  86. package/dist/web/_next/static/chunks/app/_not-found/{page-bb075b0779827928.js → page-7d43a486b7014af3.js} +1 -1
  87. package/dist/web/_next/static/chunks/app/chat/page-2f3c561ed768ed58.js +1 -0
  88. package/dist/web/_next/static/chunks/app/costs/{page-d6c03718defdb599.js → page-13a6f2c65a827f8a.js} +1 -1
  89. package/dist/web/_next/static/chunks/app/cron/{page-4c563eef2b6231fe.js → page-0ee07a679c7b79aa.js} +1 -1
  90. package/dist/web/_next/static/chunks/app/kanban/{page-55a73165a36f4077.js → page-a7facadd4194faae.js} +1 -1
  91. package/dist/web/_next/static/chunks/app/layout-fd975d16033dab25.js +1 -0
  92. package/dist/web/_next/static/chunks/app/logs/page-6de6b16523e85193.js +1 -0
  93. package/dist/web/_next/static/chunks/app/org/{page-d5cd8d9b7864737b.js → page-cd9d362e77f4799e.js} +1 -1
  94. package/dist/web/_next/static/chunks/app/{page-b81992940fd1dbc6.js → page-b98417ed4f4d45a0.js} +1 -1
  95. package/dist/web/_next/static/chunks/app/sessions/page-7148306182017841.js +1 -0
  96. package/dist/web/_next/static/chunks/app/settings/page-34c9276e2a012445.js +1 -0
  97. package/dist/web/_next/static/chunks/app/skills/page-18cf3b7bb9a7339c.js +1 -0
  98. package/dist/web/_next/static/chunks/main-app-0c65af8a0fd99888.js +1 -0
  99. package/dist/web/_next/static/css/24da9dfc818cea32.css +1 -0
  100. package/dist/web/chat.html +1 -1
  101. package/dist/web/chat.txt +5 -5
  102. package/dist/web/costs.html +2 -2
  103. package/dist/web/costs.txt +5 -5
  104. package/dist/web/cron.html +1 -1
  105. package/dist/web/cron.txt +5 -5
  106. package/dist/web/index.html +1 -1
  107. package/dist/web/index.txt +5 -5
  108. package/dist/web/kanban.html +1 -1
  109. package/dist/web/kanban.txt +5 -5
  110. package/dist/web/logs.html +2 -2
  111. package/dist/web/logs.txt +5 -5
  112. package/dist/web/org.html +1 -1
  113. package/dist/web/org.txt +5 -5
  114. package/dist/web/sessions.html +1 -1
  115. package/dist/web/sessions.txt +5 -5
  116. package/dist/web/settings.html +1 -1
  117. package/dist/web/settings.txt +5 -5
  118. package/dist/web/skills.html +1 -1
  119. package/dist/web/skills.txt +5 -5
  120. package/package.json +9 -9
  121. package/template/config.default.yaml +32 -0
  122. package/template/docs/mcp.md +108 -0
  123. package/dist/web/_next/static/chunks/198-fd91406a158c5c25.js +0 -1
  124. package/dist/web/_next/static/chunks/app/chat/page-6d5bc707a45c92c6.js +0 -1
  125. package/dist/web/_next/static/chunks/app/layout-5129b67d5f126cf0.js +0 -1
  126. package/dist/web/_next/static/chunks/app/logs/page-e18889d67e48c9c9.js +0 -1
  127. package/dist/web/_next/static/chunks/app/sessions/page-c83c890177c18258.js +0 -1
  128. package/dist/web/_next/static/chunks/app/settings/page-2583d55551abdf72.js +0 -1
  129. package/dist/web/_next/static/chunks/app/skills/page-df9465e314561bb5.js +0 -1
  130. package/dist/web/_next/static/chunks/main-app-437f51faf74fbb3b.js +0 -1
  131. package/dist/web/_next/static/css/4a6a5bca9238c104.css +0 -1
  132. /package/dist/web/_next/static/{jt8R5JvUgfB9CMfFwWFr0 → Zn588p2VvgjCSLr44R__1}/_buildManifest.js +0 -0
  133. /package/dist/web/_next/static/{jt8R5JvUgfB9CMfFwWFr0 → Zn588p2VvgjCSLr44R__1}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- <!DOCTYPE html><!--jt8R5JvUgfB9CMfFwWFr0--><html lang="en" data-theme="dark"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/4a6a5bca9238c104.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-0f39b7e91dce9791.js"/><script src="/_next/static/chunks/8e6518bb-c26e82767f1faf66.js" async=""></script><script src="/_next/static/chunks/743-5bb03adbb0e4ddec.js" async=""></script><script src="/_next/static/chunks/main-app-437f51faf74fbb3b.js" async=""></script><script src="/_next/static/chunks/app/layout-5129b67d5f126cf0.js" async=""></script><script src="/_next/static/chunks/704-af2893821e1d18dc.js" async=""></script><script src="/_next/static/chunks/73-c226535579393e21.js" async=""></script><script src="/_next/static/chunks/app/settings/page-2583d55551abdf72.js" async=""></script><meta name="description" content="AI Gateway Dashboard"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div class="flex h-screen overflow-hidden" style="background:var(--bg)"><aside style="position:fixed;left:0;top:0;bottom:0;width:56px;background:var(--bg-secondary);border-right:1px solid var(--separator);flex-direction:column;z-index:50;transition:width 200ms var(--ease-smooth);overflow:hidden" class="hidden lg:flex"><div style="display:flex;align-items:center;gap:10px;padding:16px 14px 12px;min-height:56px;flex-shrink:0"><span style="font-size:24px;line-height:1;flex-shrink:0;width:28px;text-align:center">🤖</span><span style="font-size:17px;font-weight:600;color:var(--text-primary);white-space:nowrap;opacity:0;transition:opacity 200ms var(--ease-smooth)">Jinn</span></div><nav style="flex:1;display:flex;flex-direction:column;gap:2px;padding:0 8px"><a class="nav-item" aria-label="Home" style="display:flex;align-items:center;gap:10px;height:40px;padding:0 12px;text-decoration:none;color:var(--text-secondary);background:transparent;font-weight:400;font-size:13px;white-space:nowrap" href="/"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-house" aria-hidden="true" style="flex-shrink:0;color:var(--text-secondary)"><path d="M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8"></path><path d="M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"></path></svg><span style="opacity:0;transition:opacity 200ms var(--ease-smooth)">Home</span></a><a class="nav-item" aria-label="Chat" style="display:flex;align-items:center;gap:10px;height:40px;padding:0 12px;text-decoration:none;color:var(--text-secondary);background:transparent;font-weight:400;font-size:13px;white-space:nowrap" href="/chat"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-message-square" aria-hidden="true" style="flex-shrink:0;color:var(--text-secondary)"><path d="M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z"></path></svg><span style="opacity:0;transition:opacity 200ms var(--ease-smooth)">Chat</span></a><a class="nav-item" aria-label="Sessions" style="display:flex;align-items:center;gap:10px;height:40px;padding:0 12px;text-decoration:none;color:var(--text-secondary);background:transparent;font-weight:400;font-size:13px;white-space:nowrap" href="/sessions"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-layers" aria-hidden="true" style="flex-shrink:0;color:var(--text-secondary)"><path d="M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z"></path><path d="M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12"></path><path d="M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17"></path></svg><span style="opacity:0;transition:opacity 200ms var(--ease-smooth)">Sessions</span></a><a class="nav-item" aria-label="Organization" style="display:flex;align-items:center;gap:10px;height:40px;padding:0 12px;text-decoration:none;color:var(--text-secondary);background:transparent;font-weight:400;font-size:13px;white-space:nowrap" href="/org"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-users" aria-hidden="true" style="flex-shrink:0;color:var(--text-secondary)"><path d="M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"></path><path d="M16 3.128a4 4 0 0 1 0 7.744"></path><path d="M22 21v-2a4 4 0 0 0-3-3.87"></path><circle cx="9" cy="7" r="4"></circle></svg><span style="opacity:0;transition:opacity 200ms var(--ease-smooth)">Organization</span></a><a class="nav-item" aria-label="Kanban" style="display:flex;align-items:center;gap:10px;height:40px;padding:0 12px;text-decoration:none;color:var(--text-secondary);background:transparent;font-weight:400;font-size:13px;white-space:nowrap" href="/kanban"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-layout-grid" aria-hidden="true" style="flex-shrink:0;color:var(--text-secondary)"><rect width="7" height="7" x="3" y="3" rx="1"></rect><rect width="7" height="7" x="14" y="3" rx="1"></rect><rect width="7" height="7" x="14" y="14" rx="1"></rect><rect width="7" height="7" x="3" y="14" rx="1"></rect></svg><span style="opacity:0;transition:opacity 200ms var(--ease-smooth)">Kanban</span></a><a class="nav-item" aria-label="Cron" style="display:flex;align-items:center;gap:10px;height:40px;padding:0 12px;text-decoration:none;color:var(--text-secondary);background:transparent;font-weight:400;font-size:13px;white-space:nowrap" href="/cron"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-clock" aria-hidden="true" style="flex-shrink:0;color:var(--text-secondary)"><circle cx="12" cy="12" r="10"></circle><path d="M12 6v6l4 2"></path></svg><span style="opacity:0;transition:opacity 200ms var(--ease-smooth)">Cron</span></a><a class="nav-item" aria-label="Costs" style="display:flex;align-items:center;gap:10px;height:40px;padding:0 12px;text-decoration:none;color:var(--text-secondary);background:transparent;font-weight:400;font-size:13px;white-space:nowrap" href="/costs"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-dollar-sign" aria-hidden="true" style="flex-shrink:0;color:var(--text-secondary)"><line x1="12" x2="12" y1="2" y2="22"></line><path d="M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"></path></svg><span style="opacity:0;transition:opacity 200ms var(--ease-smooth)">Costs</span></a><a class="nav-item" aria-label="Activity" style="display:flex;align-items:center;gap:10px;height:40px;padding:0 12px;text-decoration:none;color:var(--text-secondary);background:transparent;font-weight:400;font-size:13px;white-space:nowrap" href="/logs"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-activity" aria-hidden="true" style="flex-shrink:0;color:var(--text-secondary)"><path d="M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2"></path></svg><span style="opacity:0;transition:opacity 200ms var(--ease-smooth)">Activity</span></a><a class="nav-item" aria-label="Skills" style="display:flex;align-items:center;gap:10px;height:40px;padding:0 12px;text-decoration:none;color:var(--text-secondary);background:transparent;font-weight:400;font-size:13px;white-space:nowrap" href="/skills"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-zap" aria-hidden="true" style="flex-shrink:0;color:var(--text-secondary)"><path d="M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z"></path></svg><span style="opacity:0;transition:opacity 200ms var(--ease-smooth)">Skills</span></a><a class="nav-item" aria-label="Settings" aria-current="page" style="display:flex;align-items:center;gap:10px;height:40px;padding:0 12px;text-decoration:none;color:var(--accent);background:var(--accent-fill);font-weight:600;font-size:13px;white-space:nowrap" href="/settings"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-settings" aria-hidden="true" style="flex-shrink:0;color:var(--accent)"><path d="M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915"></path><circle cx="12" cy="12" r="3"></circle></svg><span style="opacity:0;transition:opacity 200ms var(--ease-smooth)">Settings</span></a></nav><div style="padding:8px 8px 12px;flex-shrink:0"><button class="nav-item" aria-label="Theme: dark. Click to cycle." style="display:flex;align-items:center;gap:10px;height:40px;padding:0 12px;width:100%;border:none;background:transparent;color:var(--text-secondary);cursor:pointer;font-size:13px;white-space:nowrap"><span style="flex-shrink:0"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-moon" aria-hidden="true"><path d="M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401"></path></svg></span><span style="opacity:0;transition:opacity 200ms var(--ease-smooth);text-transform:capitalize">dark</span></button></div></aside><main class="flex-1 overflow-hidden lg:ml-[56px]"><div style="height:48px;display:flex;align-items:center;padding:0 12px;border-bottom:1px solid var(--separator);background:var(--material-thick);flex-shrink:0;position:relative;z-index:60" class="jsx-906cbf20b7aa1777 lg:hidden"><button aria-label="Open menu" style="width:36px;height:36px;display:flex;align-items:center;justify-content:center;background:transparent;border:none;cursor:pointer;color:var(--text-primary)" class="jsx-906cbf20b7aa1777"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-menu" aria-hidden="true"><path d="M4 5h16"></path><path d="M4 12h16"></path><path d="M4 19h16"></path></svg></button><div style="flex:1;text-align:center" class="jsx-906cbf20b7aa1777"><span style="font-size:18px;margin-right:6px" class="jsx-906cbf20b7aa1777">🤖</span><span style="font-size:15px;font-weight:600;color:var(--text-primary)" class="jsx-906cbf20b7aa1777">Jinn</span></div><div style="width:36px" class="jsx-906cbf20b7aa1777"></div></div><div class="h-full overflow-y-auto" style="background:var(--bg)"><div style="max-width:640px;margin:0 auto;padding:var(--space-6) var(--space-4) var(--space-12)"><h1 style="font-size:var(--text-title1);font-weight:var(--weight-bold);letter-spacing:var(--tracking-tight);color:var(--text-primary);margin:0 0 var(--space-6)">Settings</h1><section style="margin-bottom:var(--space-6)"><div style="font-size:var(--text-caption1);font-weight:var(--weight-semibold);letter-spacing:var(--tracking-wide);text-transform:uppercase;color:var(--text-tertiary);padding:0 var(--space-2) var(--space-2)">Appearance</div><div style="background:var(--material-regular);border-radius:var(--radius-md);border:1px solid var(--separator);padding:var(--space-4)"><div style="font-size:var(--text-footnote);font-weight:var(--weight-medium);color:var(--text-secondary);margin-bottom:var(--space-2)">Theme</div><div style="display:grid;grid-template-columns:repeat(5, 1fr);gap:var(--space-2);margin-bottom:var(--space-4)"><button style="display:flex;flex-direction:column;align-items:center;gap:var(--space-1);padding:var(--space-3) var(--space-2);border-radius:var(--radius-md);background:var(--fill-quaternary);border:2px solid var(--accent);cursor:pointer;transition:all 150ms var(--ease-smooth)"><span style="font-size:24px">🌑</span><span style="font-size:var(--text-caption2);font-weight:var(--weight-semibold);color:var(--accent)">Dark</span></button><button style="display:flex;flex-direction:column;align-items:center;gap:var(--space-1);padding:var(--space-3) var(--space-2);border-radius:var(--radius-md);background:var(--fill-quaternary);border:2px solid var(--separator);cursor:pointer;transition:all 150ms var(--ease-smooth)"><span style="font-size:24px">🪟</span><span style="font-size:var(--text-caption2);font-weight:var(--weight-medium);color:var(--text-secondary)">Glass</span></button><button style="display:flex;flex-direction:column;align-items:center;gap:var(--space-1);padding:var(--space-3) var(--space-2);border-radius:var(--radius-md);background:var(--fill-quaternary);border:2px solid var(--separator);cursor:pointer;transition:all 150ms var(--ease-smooth)"><span style="font-size:24px">🎨</span><span style="font-size:var(--text-caption2);font-weight:var(--weight-medium);color:var(--text-secondary)">Color</span></button><button style="display:flex;flex-direction:column;align-items:center;gap:var(--space-1);padding:var(--space-3) var(--space-2);border-radius:var(--radius-md);background:var(--fill-quaternary);border:2px solid var(--separator);cursor:pointer;transition:all 150ms var(--ease-smooth)"><span style="font-size:24px">☀️</span><span style="font-size:var(--text-caption2);font-weight:var(--weight-medium);color:var(--text-secondary)">Light</span></button><button style="display:flex;flex-direction:column;align-items:center;gap:var(--space-1);padding:var(--space-3) var(--space-2);border-radius:var(--radius-md);background:var(--fill-quaternary);border:2px solid var(--separator);cursor:pointer;transition:all 150ms var(--ease-smooth)"><span style="font-size:24px">⚙️</span><span style="font-size:var(--text-caption2);font-weight:var(--weight-medium);color:var(--text-secondary)">System</span></button></div><div style="font-size:var(--text-footnote);font-weight:var(--weight-medium);color:var(--text-secondary);margin-bottom:var(--space-2)">Accent Color</div><div style="display:flex;flex-wrap:wrap;gap:var(--space-2);margin-bottom:var(--space-3)"><button aria-label="Red" title="Red" style="width:32px;height:32px;border-radius:50%;background:#EF4444;border:2px solid transparent;outline:none;outline-offset:2px;cursor:pointer;transition:all 100ms var(--ease-smooth);display:flex;align-items:center;justify-content:center"></button><button aria-label="Orange" title="Orange" style="width:32px;height:32px;border-radius:50%;background:#F97316;border:2px solid transparent;outline:none;outline-offset:2px;cursor:pointer;transition:all 100ms var(--ease-smooth);display:flex;align-items:center;justify-content:center"></button><button aria-label="Amber" title="Amber" style="width:32px;height:32px;border-radius:50%;background:#F59E0B;border:2px solid transparent;outline:none;outline-offset:2px;cursor:pointer;transition:all 100ms var(--ease-smooth);display:flex;align-items:center;justify-content:center"></button><button aria-label="Yellow" title="Yellow" style="width:32px;height:32px;border-radius:50%;background:#EAB308;border:2px solid transparent;outline:none;outline-offset:2px;cursor:pointer;transition:all 100ms var(--ease-smooth);display:flex;align-items:center;justify-content:center"></button><button aria-label="Lime" title="Lime" style="width:32px;height:32px;border-radius:50%;background:#84CC16;border:2px solid transparent;outline:none;outline-offset:2px;cursor:pointer;transition:all 100ms var(--ease-smooth);display:flex;align-items:center;justify-content:center"></button><button aria-label="Green" title="Green" style="width:32px;height:32px;border-radius:50%;background:#22C55E;border:2px solid transparent;outline:none;outline-offset:2px;cursor:pointer;transition:all 100ms var(--ease-smooth);display:flex;align-items:center;justify-content:center"></button><button aria-label="Emerald" title="Emerald" style="width:32px;height:32px;border-radius:50%;background:#10B981;border:2px solid transparent;outline:none;outline-offset:2px;cursor:pointer;transition:all 100ms var(--ease-smooth);display:flex;align-items:center;justify-content:center"></button><button aria-label="Cyan" title="Cyan" style="width:32px;height:32px;border-radius:50%;background:#06B6D4;border:2px solid transparent;outline:none;outline-offset:2px;cursor:pointer;transition:all 100ms var(--ease-smooth);display:flex;align-items:center;justify-content:center"></button><button aria-label="Blue" title="Blue" style="width:32px;height:32px;border-radius:50%;background:#3B82F6;border:2px solid transparent;outline:none;outline-offset:2px;cursor:pointer;transition:all 100ms var(--ease-smooth);display:flex;align-items:center;justify-content:center"></button><button aria-label="Indigo" title="Indigo" style="width:32px;height:32px;border-radius:50%;background:#6366F1;border:2px solid transparent;outline:none;outline-offset:2px;cursor:pointer;transition:all 100ms var(--ease-smooth);display:flex;align-items:center;justify-content:center"></button><button aria-label="Violet" title="Violet" style="width:32px;height:32px;border-radius:50%;background:#8B5CF6;border:2px solid transparent;outline:none;outline-offset:2px;cursor:pointer;transition:all 100ms var(--ease-smooth);display:flex;align-items:center;justify-content:center"></button><button aria-label="Pink" title="Pink" style="width:32px;height:32px;border-radius:50%;background:#EC4899;border:2px solid transparent;outline:none;outline-offset:2px;cursor:pointer;transition:all 100ms var(--ease-smooth);display:flex;align-items:center;justify-content:center"></button></div><div style="display:flex;align-items:center;gap:var(--space-3)"><label style="display:flex;align-items:center;gap:var(--space-2);font-size:var(--text-footnote);color:var(--text-secondary);cursor:pointer">Custom:<input type="color" style="width:28px;height:28px;border:none;border-radius:50%;cursor:pointer;background:none;padding:0" value="#3B82F6"/></label><input type="text" placeholder="#3B82F6" class="apple-input" style="width:90px;padding:4px 8px;font-size:var(--text-caption1);background:var(--bg-secondary);border:1px solid var(--separator);border-radius:var(--radius-sm);color:var(--text-primary);font-family:monospace" value=""/></div></div></section><section style="margin-bottom:var(--space-6)"><div style="font-size:var(--text-caption1);font-weight:var(--weight-semibold);letter-spacing:var(--tracking-wide);text-transform:uppercase;color:var(--text-tertiary);padding:0 var(--space-2) var(--space-2)">Branding</div><div style="background:var(--material-regular);border-radius:var(--radius-md);border:1px solid var(--separator);padding:var(--space-4)"><div style="display:flex;flex-direction:column;gap:var(--space-3)"><div><label style="display:block;font-size:var(--text-caption1);color:var(--text-tertiary);margin-bottom:var(--space-1)">Portal Name</label><input type="text" class="apple-input" placeholder="Jinn" style="width:100%;background:var(--bg-secondary);border:1px solid var(--separator);border-radius:var(--radius-sm);padding:6px 10px;font-size:var(--text-footnote);color:var(--text-primary)" value=""/></div><div><label style="display:block;font-size:var(--text-caption1);color:var(--text-tertiary);margin-bottom:var(--space-1)">Portal Subtitle</label><input type="text" class="apple-input" placeholder="Command Centre" style="width:100%;background:var(--bg-secondary);border:1px solid var(--separator);border-radius:var(--radius-sm);padding:6px 10px;font-size:var(--text-footnote);color:var(--text-primary)" value=""/></div><div><label style="display:block;font-size:var(--text-caption1);color:var(--text-tertiary);margin-bottom:var(--space-1)">Operator Name</label><input type="text" class="apple-input" placeholder="Your Name" style="width:100%;background:var(--bg-secondary);border:1px solid var(--separator);border-radius:var(--radius-sm);padding:6px 10px;font-size:var(--text-footnote);color:var(--text-primary)" value=""/></div><div><label style="display:block;font-size:var(--text-caption1);color:var(--text-tertiary);margin-bottom:var(--space-1)">Portal Emoji</label><input type="text" class="apple-input" placeholder="🤖" style="width:80px;text-align:center;font-size:var(--text-title2);padding:6px 8px;background:var(--bg-secondary);border:1px solid var(--separator);border-radius:var(--radius-sm)" value=""/></div><div><label style="display:block;font-size:var(--text-caption1);color:var(--text-tertiary);margin-bottom:var(--space-1)">Language</label><select style="width:100%;background:var(--bg-secondary);border:1px solid var(--separator);border-radius:var(--radius-sm);padding:6px 10px;font-size:var(--text-footnote);color:var(--text-primary);cursor:pointer"><option value="English" selected="">English</option><option value="Spanish">Spanish</option><option value="French">French</option><option value="German">German</option><option value="Portuguese">Portuguese</option><option value="Italian">Italian</option><option value="Dutch">Dutch</option><option value="Russian">Russian</option><option value="Chinese">Chinese</option><option value="Japanese">Japanese</option><option value="Korean">Korean</option><option value="Arabic">Arabic</option><option value="Hindi">Hindi</option><option value="Bulgarian">Bulgarian</option></select></div></div></div></section><div style="text-align:center;padding:var(--space-8);color:var(--text-tertiary);font-size:var(--text-footnote)"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-loader-circle" aria-hidden="true" style="animation:spin 1s linear infinite;margin:0 auto var(--space-2)"><path d="M21 12a9 9 0 1 1-6.219-8.56"></path></svg>Loading gateway config...</div><section style="margin-bottom:var(--space-6)"><div style="font-size:var(--text-caption1);font-weight:var(--weight-semibold);letter-spacing:var(--tracking-wide);text-transform:uppercase;color:var(--text-tertiary);padding:0 var(--space-2) var(--space-2)">Reset</div><div style="background:var(--material-regular);border-radius:var(--radius-md);border:1px solid var(--separator);padding:var(--space-4)"><div style="display:flex;align-items:center;justify-content:center;gap:var(--space-3);flex-wrap:wrap"><button style="padding:var(--space-2) var(--space-5);border-radius:var(--radius-md);background:var(--accent);color:var(--accent-contrast);border:none;cursor:pointer;font-size:var(--text-footnote);font-weight:var(--weight-semibold);transition:all 150ms var(--ease-spring);display:inline-flex;align-items:center;gap:var(--space-2)"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-rotate-ccw" aria-hidden="true"><path d="M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8"></path><path d="M3 3v5h5"></path></svg>Re-run Onboarding Wizard</button><button style="padding:var(--space-2) var(--space-5);border-radius:var(--radius-md);background:var(--system-red);color:#fff;border:none;cursor:pointer;font-size:var(--text-footnote);font-weight:var(--weight-semibold);transition:all 150ms var(--ease-spring);display:inline-flex;align-items:center;gap:var(--space-2)"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-trash2 lucide-trash-2" aria-hidden="true"><path d="M10 11v6"></path><path d="M14 11v6"></path><path d="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6"></path><path d="M3 6h18"></path><path d="M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"></path></svg>Reset All Settings</button></div></div></section></div></div></main></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-0f39b7e91dce9791.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[1150,[\"177\",\"static/chunks/app/layout-5129b67d5f126cf0.js\"],\"ClientProviders\"]\n3:I[8954,[],\"\"]\n4:I[5640,[],\"\"]\n5:I[3339,[],\"ClientPageRoot\"]\n6:I[7774,[\"704\",\"static/chunks/704-af2893821e1d18dc.js\",\"73\",\"static/chunks/73-c226535579393e21.js\",\"662\",\"static/chunks/app/settings/page-2583d55551abdf72.js\"],\"default\"]\n9:I[2051,[],\"OutletBoundary\"]\nb:I[6658,[],\"AsyncMetadataOutlet\"]\nd:I[2051,[],\"ViewportBoundary\"]\nf:I[2051,[],\"MetadataBoundary\"]\n10:\"$Sreact.suspense\"\n12:I[7698,[],\"\"]\n:HL[\"/_next/static/css/4a6a5bca9238c104.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"jt8R5JvUgfB9CMfFwWFr0\",\"p\":\"\",\"c\":[\"\",\"settings\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"settings\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/4a6a5bca9238c104.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"data-theme\":\"dark\",\"suppressHydrationWarning\":true,\"children\":[\"$\",\"body\",null,{\"children\":[\"$\",\"$L2\",null,{\"children\":[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",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\"}]}]}]}]]}],{\"children\":[\"settings\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"$L5\",null,{\"Component\":\"$6\",\"searchParams\":{},\"params\":{},\"promises\":[\"$@7\",\"$@8\"]}],null,[\"$\",\"$L9\",null,{\"children\":[\"$La\",[\"$\",\"$Lb\",null,{\"promise\":\"$@c\"}]]}]]}],{},null,false]},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[[\"$\",\"$Ld\",null,{\"children\":\"$Le\"}],null],[\"$\",\"$Lf\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$10\",null,{\"fallback\":null,\"children\":\"$L11\"}]}]}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$12\",[]],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"7:{}\n8:\"$0:f:0:1:2:children:2:children:1:props:children:0:props:params\"\n"])</script><script>self.__next_f.push([1,"e:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\na:null\n"])</script><script>self.__next_f.push([1,"c:{\"metadata\":[[\"$\",\"meta\",\"0\",{\"name\":\"description\",\"content\":\"AI Gateway Dashboard\"}]],\"error\":null,\"digest\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"11:\"$c:metadata\"\n"])</script></body></html>
1
+ <!DOCTYPE html><!--Zn588p2VvgjCSLr44R__1--><html lang="en" data-theme="dark"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"/><link rel="stylesheet" href="/_next/static/css/24da9dfc818cea32.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-0f39b7e91dce9791.js"/><script src="/_next/static/chunks/8e6518bb-c26e82767f1faf66.js" async=""></script><script src="/_next/static/chunks/743-5bb03adbb0e4ddec.js" async=""></script><script src="/_next/static/chunks/main-app-0c65af8a0fd99888.js" async=""></script><script src="/_next/static/chunks/app/layout-fd975d16033dab25.js" async=""></script><script src="/_next/static/chunks/704-ca24be493a922639.js" async=""></script><script src="/_next/static/chunks/73-2d6e730cea0fe6c8.js" async=""></script><script src="/_next/static/chunks/app/settings/page-34c9276e2a012445.js" async=""></script><meta name="description" content="AI Gateway Dashboard"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div class="flex h-dvh overflow-hidden" style="background:var(--bg)"><aside style="position:fixed;left:0;top:0;bottom:0;width:56px;background:var(--bg-secondary);border-right:1px solid var(--separator);flex-direction:column;z-index:50;transition:width 200ms var(--ease-smooth);overflow:hidden" class="hidden lg:flex"><div style="display:flex;align-items:center;gap:10px;padding:16px 14px 12px;min-height:56px;flex-shrink:0"><span style="font-size:24px;line-height:1;flex-shrink:0;width:28px;text-align:center">🤖</span><span style="font-size:17px;font-weight:600;color:var(--text-primary);white-space:nowrap;opacity:0;transition:opacity 200ms var(--ease-smooth)">Jinn</span></div><nav style="flex:1;display:flex;flex-direction:column;gap:2px;padding:0 8px"><a class="nav-item" aria-label="Home" style="display:flex;align-items:center;gap:10px;height:40px;padding:0 12px;text-decoration:none;color:var(--text-secondary);background:transparent;font-weight:400;font-size:13px;white-space:nowrap" href="/"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-house" aria-hidden="true" style="flex-shrink:0;color:var(--text-secondary)"><path d="M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8"></path><path d="M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"></path></svg><span style="opacity:0;transition:opacity 200ms var(--ease-smooth)">Home</span></a><a class="nav-item" aria-label="Chat" style="display:flex;align-items:center;gap:10px;height:40px;padding:0 12px;text-decoration:none;color:var(--text-secondary);background:transparent;font-weight:400;font-size:13px;white-space:nowrap" href="/chat"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-message-square" aria-hidden="true" style="flex-shrink:0;color:var(--text-secondary)"><path d="M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z"></path></svg><span style="opacity:0;transition:opacity 200ms var(--ease-smooth)">Chat</span></a><a class="nav-item" aria-label="Sessions" style="display:flex;align-items:center;gap:10px;height:40px;padding:0 12px;text-decoration:none;color:var(--text-secondary);background:transparent;font-weight:400;font-size:13px;white-space:nowrap" href="/sessions"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-layers" aria-hidden="true" style="flex-shrink:0;color:var(--text-secondary)"><path d="M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z"></path><path d="M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12"></path><path d="M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17"></path></svg><span style="opacity:0;transition:opacity 200ms var(--ease-smooth)">Sessions</span></a><a class="nav-item" aria-label="Organization" style="display:flex;align-items:center;gap:10px;height:40px;padding:0 12px;text-decoration:none;color:var(--text-secondary);background:transparent;font-weight:400;font-size:13px;white-space:nowrap" href="/org"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-users" aria-hidden="true" style="flex-shrink:0;color:var(--text-secondary)"><path d="M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"></path><path d="M16 3.128a4 4 0 0 1 0 7.744"></path><path d="M22 21v-2a4 4 0 0 0-3-3.87"></path><circle cx="9" cy="7" r="4"></circle></svg><span style="opacity:0;transition:opacity 200ms var(--ease-smooth)">Organization</span></a><a class="nav-item" aria-label="Kanban" style="display:flex;align-items:center;gap:10px;height:40px;padding:0 12px;text-decoration:none;color:var(--text-secondary);background:transparent;font-weight:400;font-size:13px;white-space:nowrap" href="/kanban"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-layout-grid" aria-hidden="true" style="flex-shrink:0;color:var(--text-secondary)"><rect width="7" height="7" x="3" y="3" rx="1"></rect><rect width="7" height="7" x="14" y="3" rx="1"></rect><rect width="7" height="7" x="14" y="14" rx="1"></rect><rect width="7" height="7" x="3" y="14" rx="1"></rect></svg><span style="opacity:0;transition:opacity 200ms var(--ease-smooth)">Kanban</span></a><a class="nav-item" aria-label="Cron" style="display:flex;align-items:center;gap:10px;height:40px;padding:0 12px;text-decoration:none;color:var(--text-secondary);background:transparent;font-weight:400;font-size:13px;white-space:nowrap" href="/cron"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-clock" aria-hidden="true" style="flex-shrink:0;color:var(--text-secondary)"><circle cx="12" cy="12" r="10"></circle><path d="M12 6v6l4 2"></path></svg><span style="opacity:0;transition:opacity 200ms var(--ease-smooth)">Cron</span></a><a class="nav-item" aria-label="Costs" style="display:flex;align-items:center;gap:10px;height:40px;padding:0 12px;text-decoration:none;color:var(--text-secondary);background:transparent;font-weight:400;font-size:13px;white-space:nowrap" href="/costs"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-dollar-sign" aria-hidden="true" style="flex-shrink:0;color:var(--text-secondary)"><line x1="12" x2="12" y1="2" y2="22"></line><path d="M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"></path></svg><span style="opacity:0;transition:opacity 200ms var(--ease-smooth)">Costs</span></a><a class="nav-item" aria-label="Activity" style="display:flex;align-items:center;gap:10px;height:40px;padding:0 12px;text-decoration:none;color:var(--text-secondary);background:transparent;font-weight:400;font-size:13px;white-space:nowrap" href="/logs"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-activity" aria-hidden="true" style="flex-shrink:0;color:var(--text-secondary)"><path d="M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2"></path></svg><span style="opacity:0;transition:opacity 200ms var(--ease-smooth)">Activity</span></a><a class="nav-item" aria-label="Skills" style="display:flex;align-items:center;gap:10px;height:40px;padding:0 12px;text-decoration:none;color:var(--text-secondary);background:transparent;font-weight:400;font-size:13px;white-space:nowrap" href="/skills"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-zap" aria-hidden="true" style="flex-shrink:0;color:var(--text-secondary)"><path d="M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z"></path></svg><span style="opacity:0;transition:opacity 200ms var(--ease-smooth)">Skills</span></a><a class="nav-item" aria-label="Settings" aria-current="page" style="display:flex;align-items:center;gap:10px;height:40px;padding:0 12px;text-decoration:none;color:var(--accent);background:var(--accent-fill);font-weight:600;font-size:13px;white-space:nowrap" href="/settings"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-settings" aria-hidden="true" style="flex-shrink:0;color:var(--accent)"><path d="M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915"></path><circle cx="12" cy="12" r="3"></circle></svg><span style="opacity:0;transition:opacity 200ms var(--ease-smooth)">Settings</span></a></nav><div style="padding:8px 8px 12px;flex-shrink:0"><button class="nav-item" aria-label="Theme: dark. Click to cycle." style="display:flex;align-items:center;gap:10px;height:40px;padding:0 12px;width:100%;border:none;background:transparent;color:var(--text-secondary);cursor:pointer;font-size:13px;white-space:nowrap"><span style="flex-shrink:0"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-moon" aria-hidden="true"><path d="M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401"></path></svg></span><span style="opacity:0;transition:opacity 200ms var(--ease-smooth);text-transform:capitalize">dark</span></button></div></aside><main class="flex-1 overflow-hidden lg:ml-[56px]"><div style="height:48px;display:flex;align-items:center;padding:0 12px;border-bottom:1px solid var(--separator);background:var(--material-thick);flex-shrink:0;position:relative;z-index:60" class="jsx-906cbf20b7aa1777 lg:hidden"><button aria-label="Open menu" style="width:36px;height:36px;display:flex;align-items:center;justify-content:center;background:transparent;border:none;cursor:pointer;color:var(--text-primary)" class="jsx-906cbf20b7aa1777"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-menu" aria-hidden="true"><path d="M4 5h16"></path><path d="M4 12h16"></path><path d="M4 19h16"></path></svg></button><div style="flex:1;text-align:center" class="jsx-906cbf20b7aa1777"><span style="font-size:18px;margin-right:6px" class="jsx-906cbf20b7aa1777">🤖</span><span style="font-size:15px;font-weight:600;color:var(--text-primary)" class="jsx-906cbf20b7aa1777">Jinn</span></div><div style="width:36px" class="jsx-906cbf20b7aa1777"></div></div><div class="h-full overflow-y-auto" style="background:var(--bg)"><div style="max-width:640px;margin:0 auto;padding:var(--space-6) var(--space-4) var(--space-12)"><h1 style="font-size:var(--text-title1);font-weight:var(--weight-bold);letter-spacing:var(--tracking-tight);color:var(--text-primary);margin:0 0 var(--space-6)">Settings</h1><section style="margin-bottom:var(--space-6)"><div style="font-size:var(--text-caption1);font-weight:var(--weight-semibold);letter-spacing:var(--tracking-wide);text-transform:uppercase;color:var(--text-tertiary);padding:0 var(--space-2) var(--space-2)">Appearance</div><div style="background:var(--material-regular);border-radius:var(--radius-md);border:1px solid var(--separator);padding:var(--space-4)"><div style="font-size:var(--text-footnote);font-weight:var(--weight-medium);color:var(--text-secondary);margin-bottom:var(--space-2)">Theme</div><div style="display:grid;grid-template-columns:repeat(5, 1fr);gap:var(--space-2);margin-bottom:var(--space-4)"><button style="display:flex;flex-direction:column;align-items:center;gap:var(--space-1);padding:var(--space-3) var(--space-2);border-radius:var(--radius-md);background:var(--fill-quaternary);border:2px solid var(--accent);cursor:pointer;transition:all 150ms var(--ease-smooth)"><span style="font-size:24px">🌑</span><span style="font-size:var(--text-caption2);font-weight:var(--weight-semibold);color:var(--accent)">Dark</span></button><button style="display:flex;flex-direction:column;align-items:center;gap:var(--space-1);padding:var(--space-3) var(--space-2);border-radius:var(--radius-md);background:var(--fill-quaternary);border:2px solid var(--separator);cursor:pointer;transition:all 150ms var(--ease-smooth)"><span style="font-size:24px">🪟</span><span style="font-size:var(--text-caption2);font-weight:var(--weight-medium);color:var(--text-secondary)">Glass</span></button><button style="display:flex;flex-direction:column;align-items:center;gap:var(--space-1);padding:var(--space-3) var(--space-2);border-radius:var(--radius-md);background:var(--fill-quaternary);border:2px solid var(--separator);cursor:pointer;transition:all 150ms var(--ease-smooth)"><span style="font-size:24px">🎨</span><span style="font-size:var(--text-caption2);font-weight:var(--weight-medium);color:var(--text-secondary)">Color</span></button><button style="display:flex;flex-direction:column;align-items:center;gap:var(--space-1);padding:var(--space-3) var(--space-2);border-radius:var(--radius-md);background:var(--fill-quaternary);border:2px solid var(--separator);cursor:pointer;transition:all 150ms var(--ease-smooth)"><span style="font-size:24px">☀️</span><span style="font-size:var(--text-caption2);font-weight:var(--weight-medium);color:var(--text-secondary)">Light</span></button><button style="display:flex;flex-direction:column;align-items:center;gap:var(--space-1);padding:var(--space-3) var(--space-2);border-radius:var(--radius-md);background:var(--fill-quaternary);border:2px solid var(--separator);cursor:pointer;transition:all 150ms var(--ease-smooth)"><span style="font-size:24px">⚙️</span><span style="font-size:var(--text-caption2);font-weight:var(--weight-medium);color:var(--text-secondary)">System</span></button></div><div style="font-size:var(--text-footnote);font-weight:var(--weight-medium);color:var(--text-secondary);margin-bottom:var(--space-2)">Accent Color</div><div style="display:flex;flex-wrap:wrap;gap:var(--space-2);margin-bottom:var(--space-3)"><button aria-label="Red" title="Red" style="width:32px;height:32px;border-radius:50%;background:#EF4444;border:2px solid transparent;outline:none;outline-offset:2px;cursor:pointer;transition:all 100ms var(--ease-smooth);display:flex;align-items:center;justify-content:center"></button><button aria-label="Orange" title="Orange" style="width:32px;height:32px;border-radius:50%;background:#F97316;border:2px solid transparent;outline:none;outline-offset:2px;cursor:pointer;transition:all 100ms var(--ease-smooth);display:flex;align-items:center;justify-content:center"></button><button aria-label="Amber" title="Amber" style="width:32px;height:32px;border-radius:50%;background:#F59E0B;border:2px solid transparent;outline:none;outline-offset:2px;cursor:pointer;transition:all 100ms var(--ease-smooth);display:flex;align-items:center;justify-content:center"></button><button aria-label="Yellow" title="Yellow" style="width:32px;height:32px;border-radius:50%;background:#EAB308;border:2px solid transparent;outline:none;outline-offset:2px;cursor:pointer;transition:all 100ms var(--ease-smooth);display:flex;align-items:center;justify-content:center"></button><button aria-label="Lime" title="Lime" style="width:32px;height:32px;border-radius:50%;background:#84CC16;border:2px solid transparent;outline:none;outline-offset:2px;cursor:pointer;transition:all 100ms var(--ease-smooth);display:flex;align-items:center;justify-content:center"></button><button aria-label="Green" title="Green" style="width:32px;height:32px;border-radius:50%;background:#22C55E;border:2px solid transparent;outline:none;outline-offset:2px;cursor:pointer;transition:all 100ms var(--ease-smooth);display:flex;align-items:center;justify-content:center"></button><button aria-label="Emerald" title="Emerald" style="width:32px;height:32px;border-radius:50%;background:#10B981;border:2px solid transparent;outline:none;outline-offset:2px;cursor:pointer;transition:all 100ms var(--ease-smooth);display:flex;align-items:center;justify-content:center"></button><button aria-label="Cyan" title="Cyan" style="width:32px;height:32px;border-radius:50%;background:#06B6D4;border:2px solid transparent;outline:none;outline-offset:2px;cursor:pointer;transition:all 100ms var(--ease-smooth);display:flex;align-items:center;justify-content:center"></button><button aria-label="Blue" title="Blue" style="width:32px;height:32px;border-radius:50%;background:#3B82F6;border:2px solid transparent;outline:none;outline-offset:2px;cursor:pointer;transition:all 100ms var(--ease-smooth);display:flex;align-items:center;justify-content:center"></button><button aria-label="Indigo" title="Indigo" style="width:32px;height:32px;border-radius:50%;background:#6366F1;border:2px solid transparent;outline:none;outline-offset:2px;cursor:pointer;transition:all 100ms var(--ease-smooth);display:flex;align-items:center;justify-content:center"></button><button aria-label="Violet" title="Violet" style="width:32px;height:32px;border-radius:50%;background:#8B5CF6;border:2px solid transparent;outline:none;outline-offset:2px;cursor:pointer;transition:all 100ms var(--ease-smooth);display:flex;align-items:center;justify-content:center"></button><button aria-label="Pink" title="Pink" style="width:32px;height:32px;border-radius:50%;background:#EC4899;border:2px solid transparent;outline:none;outline-offset:2px;cursor:pointer;transition:all 100ms var(--ease-smooth);display:flex;align-items:center;justify-content:center"></button></div><div style="display:flex;align-items:center;gap:var(--space-3)"><label style="display:flex;align-items:center;gap:var(--space-2);font-size:var(--text-footnote);color:var(--text-secondary);cursor:pointer">Custom:<input type="color" style="width:28px;height:28px;border:none;border-radius:50%;cursor:pointer;background:none;padding:0" value="#3B82F6"/></label><input type="text" placeholder="#3B82F6" class="apple-input" style="width:90px;padding:4px 8px;font-size:var(--text-caption1);background:var(--bg-secondary);border:1px solid var(--separator);border-radius:var(--radius-sm);color:var(--text-primary);font-family:monospace" value=""/></div></div></section><section style="margin-bottom:var(--space-6)"><div style="font-size:var(--text-caption1);font-weight:var(--weight-semibold);letter-spacing:var(--tracking-wide);text-transform:uppercase;color:var(--text-tertiary);padding:0 var(--space-2) var(--space-2)">Branding</div><div style="background:var(--material-regular);border-radius:var(--radius-md);border:1px solid var(--separator);padding:var(--space-4)"><div style="display:flex;flex-direction:column;gap:var(--space-3)"><div><label style="display:block;font-size:var(--text-caption1);color:var(--text-tertiary);margin-bottom:var(--space-1)">Portal Name</label><input type="text" class="apple-input" placeholder="Jinn" style="width:100%;background:var(--bg-secondary);border:1px solid var(--separator);border-radius:var(--radius-sm);padding:6px 10px;font-size:var(--text-footnote);color:var(--text-primary)" value=""/></div><div><label style="display:block;font-size:var(--text-caption1);color:var(--text-tertiary);margin-bottom:var(--space-1)">Portal Subtitle</label><input type="text" class="apple-input" placeholder="Command Centre" style="width:100%;background:var(--bg-secondary);border:1px solid var(--separator);border-radius:var(--radius-sm);padding:6px 10px;font-size:var(--text-footnote);color:var(--text-primary)" value=""/></div><div><label style="display:block;font-size:var(--text-caption1);color:var(--text-tertiary);margin-bottom:var(--space-1)">Operator Name</label><input type="text" class="apple-input" placeholder="Your Name" style="width:100%;background:var(--bg-secondary);border:1px solid var(--separator);border-radius:var(--radius-sm);padding:6px 10px;font-size:var(--text-footnote);color:var(--text-primary)" value=""/></div><div><label style="display:block;font-size:var(--text-caption1);color:var(--text-tertiary);margin-bottom:var(--space-1)">Portal Emoji</label><input type="text" class="apple-input" placeholder="🤖" style="width:80px;text-align:center;font-size:var(--text-title2);padding:6px 8px;background:var(--bg-secondary);border:1px solid var(--separator);border-radius:var(--radius-sm)" value=""/></div><div><label style="display:block;font-size:var(--text-caption1);color:var(--text-tertiary);margin-bottom:var(--space-1)">Language</label><select style="width:100%;background:var(--bg-secondary);border:1px solid var(--separator);border-radius:var(--radius-sm);padding:6px 10px;font-size:var(--text-footnote);color:var(--text-primary);cursor:pointer"><option value="English" selected="">English</option><option value="Spanish">Spanish</option><option value="French">French</option><option value="German">German</option><option value="Portuguese">Portuguese</option><option value="Italian">Italian</option><option value="Dutch">Dutch</option><option value="Russian">Russian</option><option value="Chinese">Chinese</option><option value="Japanese">Japanese</option><option value="Korean">Korean</option><option value="Arabic">Arabic</option><option value="Hindi">Hindi</option><option value="Bulgarian">Bulgarian</option></select></div></div></div></section><div style="text-align:center;padding:var(--space-8);color:var(--text-tertiary);font-size:var(--text-footnote)"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-loader-circle" aria-hidden="true" style="animation:spin 1s linear infinite;margin:0 auto var(--space-2)"><path d="M21 12a9 9 0 1 1-6.219-8.56"></path></svg>Loading gateway config...</div><section style="margin-bottom:var(--space-6)"><div style="font-size:var(--text-caption1);font-weight:var(--weight-semibold);letter-spacing:var(--tracking-wide);text-transform:uppercase;color:var(--text-tertiary);padding:0 var(--space-2) var(--space-2)">Reset</div><div style="background:var(--material-regular);border-radius:var(--radius-md);border:1px solid var(--separator);padding:var(--space-4)"><div style="display:flex;align-items:center;justify-content:center;gap:var(--space-3);flex-wrap:wrap"><button style="padding:var(--space-2) var(--space-5);border-radius:var(--radius-md);background:var(--accent);color:var(--accent-contrast);border:none;cursor:pointer;font-size:var(--text-footnote);font-weight:var(--weight-semibold);transition:all 150ms var(--ease-spring);display:inline-flex;align-items:center;gap:var(--space-2)"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-rotate-ccw" aria-hidden="true"><path d="M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8"></path><path d="M3 3v5h5"></path></svg>Re-run Onboarding Wizard</button><button style="padding:var(--space-2) var(--space-5);border-radius:var(--radius-md);background:var(--system-red);color:#fff;border:none;cursor:pointer;font-size:var(--text-footnote);font-weight:var(--weight-semibold);transition:all 150ms var(--ease-spring);display:inline-flex;align-items:center;gap:var(--space-2)"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-trash2 lucide-trash-2" aria-hidden="true"><path d="M10 11v6"></path><path d="M14 11v6"></path><path d="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6"></path><path d="M3 6h18"></path><path d="M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"></path></svg>Reset All Settings</button></div></div></section></div></div></main></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-0f39b7e91dce9791.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[1150,[\"177\",\"static/chunks/app/layout-fd975d16033dab25.js\"],\"ClientProviders\"]\n3:I[8954,[],\"\"]\n4:I[5640,[],\"\"]\n5:I[3339,[],\"ClientPageRoot\"]\n6:I[7774,[\"704\",\"static/chunks/704-ca24be493a922639.js\",\"73\",\"static/chunks/73-2d6e730cea0fe6c8.js\",\"662\",\"static/chunks/app/settings/page-34c9276e2a012445.js\"],\"default\"]\n9:I[2051,[],\"OutletBoundary\"]\nb:I[6658,[],\"AsyncMetadataOutlet\"]\nd:I[2051,[],\"ViewportBoundary\"]\nf:I[2051,[],\"MetadataBoundary\"]\n10:\"$Sreact.suspense\"\n12:I[7698,[],\"\"]\n:HL[\"/_next/static/css/24da9dfc818cea32.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"Zn588p2VvgjCSLr44R__1\",\"p\":\"\",\"c\":[\"\",\"settings\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"settings\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/24da9dfc818cea32.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"data-theme\":\"dark\",\"suppressHydrationWarning\":true,\"children\":[\"$\",\"body\",null,{\"children\":[\"$\",\"$L2\",null,{\"children\":[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",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\"}]}]}]}]]}],{\"children\":[\"settings\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"$L5\",null,{\"Component\":\"$6\",\"searchParams\":{},\"params\":{},\"promises\":[\"$@7\",\"$@8\"]}],null,[\"$\",\"$L9\",null,{\"children\":[\"$La\",[\"$\",\"$Lb\",null,{\"promise\":\"$@c\"}]]}]]}],{},null,false]},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[[\"$\",\"$Ld\",null,{\"children\":\"$Le\"}],null],[\"$\",\"$Lf\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$10\",null,{\"fallback\":null,\"children\":\"$L11\"}]}]}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$12\",[]],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"7:{}\n8:\"$0:f:0:1:2:children:2:children:1:props:children:0:props:params\"\n"])</script><script>self.__next_f.push([1,"e:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no\"}]]\na:null\n"])</script><script>self.__next_f.push([1,"c:{\"metadata\":[[\"$\",\"meta\",\"0\",{\"name\":\"description\",\"content\":\"AI Gateway Dashboard\"}]],\"error\":null,\"digest\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"11:\"$c:metadata\"\n"])</script></body></html>
@@ -1,20 +1,20 @@
1
1
  1:"$Sreact.fragment"
2
- 2:I[1150,["177","static/chunks/app/layout-5129b67d5f126cf0.js"],"ClientProviders"]
2
+ 2:I[1150,["177","static/chunks/app/layout-fd975d16033dab25.js"],"ClientProviders"]
3
3
  3:I[8954,[],""]
4
4
  4:I[5640,[],""]
5
5
  5:I[3339,[],"ClientPageRoot"]
6
- 6:I[7774,["704","static/chunks/704-af2893821e1d18dc.js","73","static/chunks/73-c226535579393e21.js","662","static/chunks/app/settings/page-2583d55551abdf72.js"],"default"]
6
+ 6:I[7774,["704","static/chunks/704-ca24be493a922639.js","73","static/chunks/73-2d6e730cea0fe6c8.js","662","static/chunks/app/settings/page-34c9276e2a012445.js"],"default"]
7
7
  9:I[2051,[],"OutletBoundary"]
8
8
  b:I[6658,[],"AsyncMetadataOutlet"]
9
9
  d:I[2051,[],"ViewportBoundary"]
10
10
  f:I[2051,[],"MetadataBoundary"]
11
11
  10:"$Sreact.suspense"
12
12
  12:I[7698,[],""]
13
- :HL["/_next/static/css/4a6a5bca9238c104.css","style"]
14
- 0:{"P":null,"b":"jt8R5JvUgfB9CMfFwWFr0","p":"","c":["","settings"],"i":false,"f":[[["",{"children":["settings",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/4a6a5bca9238c104.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","data-theme":"dark","suppressHydrationWarning":true,"children":["$","body",null,{"children":["$","$L2",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",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"}]}]}]}]]}],{"children":["settings",["$","$1","c",{"children":[null,["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L5",null,{"Component":"$6","searchParams":{},"params":{},"promises":["$@7","$@8"]}],null,["$","$L9",null,{"children":["$La",["$","$Lb",null,{"promise":"$@c"}]]}]]}],{},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,[["$","$Ld",null,{"children":"$Le"}],null],["$","$Lf",null,{"children":["$","div",null,{"hidden":true,"children":["$","$10",null,{"fallback":null,"children":"$L11"}]}]}]]}],false]],"m":"$undefined","G":["$12",[]],"s":false,"S":true}
13
+ :HL["/_next/static/css/24da9dfc818cea32.css","style"]
14
+ 0:{"P":null,"b":"Zn588p2VvgjCSLr44R__1","p":"","c":["","settings"],"i":false,"f":[[["",{"children":["settings",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/24da9dfc818cea32.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","data-theme":"dark","suppressHydrationWarning":true,"children":["$","body",null,{"children":["$","$L2",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",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"}]}]}]}]]}],{"children":["settings",["$","$1","c",{"children":[null,["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L5",null,{"Component":"$6","searchParams":{},"params":{},"promises":["$@7","$@8"]}],null,["$","$L9",null,{"children":["$La",["$","$Lb",null,{"promise":"$@c"}]]}]]}],{},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,[["$","$Ld",null,{"children":"$Le"}],null],["$","$Lf",null,{"children":["$","div",null,{"hidden":true,"children":["$","$10",null,{"fallback":null,"children":"$L11"}]}]}]]}],false]],"m":"$undefined","G":["$12",[]],"s":false,"S":true}
15
15
  7:{}
16
16
  8:"$0:f:0:1:2:children:2:children:1:props:children:0:props:params"
17
- e:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
17
+ e:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"}]]
18
18
  a:null
19
19
  c:{"metadata":[["$","meta","0",{"name":"description","content":"AI Gateway Dashboard"}]],"error":null,"digest":"$undefined"}
20
20
  11:"$c:metadata"
@@ -1 +1 @@
1
- <!DOCTYPE html><!--jt8R5JvUgfB9CMfFwWFr0--><html lang="en" data-theme="dark"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/4a6a5bca9238c104.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-0f39b7e91dce9791.js"/><script src="/_next/static/chunks/8e6518bb-c26e82767f1faf66.js" async=""></script><script src="/_next/static/chunks/743-5bb03adbb0e4ddec.js" async=""></script><script src="/_next/static/chunks/main-app-437f51faf74fbb3b.js" async=""></script><script src="/_next/static/chunks/app/layout-5129b67d5f126cf0.js" async=""></script><script src="/_next/static/chunks/704-af2893821e1d18dc.js" async=""></script><script src="/_next/static/chunks/590-2c34156c7417317e.js" async=""></script><script src="/_next/static/chunks/198-fd91406a158c5c25.js" async=""></script><script src="/_next/static/chunks/573-070537ec2452d03e.js" async=""></script><script src="/_next/static/chunks/73-c226535579393e21.js" async=""></script><script src="/_next/static/chunks/app/skills/page-df9465e314561bb5.js" async=""></script><meta name="description" content="AI Gateway Dashboard"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div class="flex h-screen overflow-hidden" style="background:var(--bg)"><aside style="position:fixed;left:0;top:0;bottom:0;width:56px;background:var(--bg-secondary);border-right:1px solid var(--separator);flex-direction:column;z-index:50;transition:width 200ms var(--ease-smooth);overflow:hidden" class="hidden lg:flex"><div style="display:flex;align-items:center;gap:10px;padding:16px 14px 12px;min-height:56px;flex-shrink:0"><span style="font-size:24px;line-height:1;flex-shrink:0;width:28px;text-align:center">🤖</span><span style="font-size:17px;font-weight:600;color:var(--text-primary);white-space:nowrap;opacity:0;transition:opacity 200ms var(--ease-smooth)">Jinn</span></div><nav style="flex:1;display:flex;flex-direction:column;gap:2px;padding:0 8px"><a class="nav-item" aria-label="Home" style="display:flex;align-items:center;gap:10px;height:40px;padding:0 12px;text-decoration:none;color:var(--text-secondary);background:transparent;font-weight:400;font-size:13px;white-space:nowrap" href="/"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-house" aria-hidden="true" style="flex-shrink:0;color:var(--text-secondary)"><path d="M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8"></path><path d="M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"></path></svg><span style="opacity:0;transition:opacity 200ms var(--ease-smooth)">Home</span></a><a class="nav-item" aria-label="Chat" style="display:flex;align-items:center;gap:10px;height:40px;padding:0 12px;text-decoration:none;color:var(--text-secondary);background:transparent;font-weight:400;font-size:13px;white-space:nowrap" href="/chat"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-message-square" aria-hidden="true" style="flex-shrink:0;color:var(--text-secondary)"><path d="M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z"></path></svg><span style="opacity:0;transition:opacity 200ms var(--ease-smooth)">Chat</span></a><a class="nav-item" aria-label="Sessions" style="display:flex;align-items:center;gap:10px;height:40px;padding:0 12px;text-decoration:none;color:var(--text-secondary);background:transparent;font-weight:400;font-size:13px;white-space:nowrap" href="/sessions"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-layers" aria-hidden="true" style="flex-shrink:0;color:var(--text-secondary)"><path d="M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z"></path><path d="M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12"></path><path d="M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17"></path></svg><span style="opacity:0;transition:opacity 200ms var(--ease-smooth)">Sessions</span></a><a class="nav-item" aria-label="Organization" style="display:flex;align-items:center;gap:10px;height:40px;padding:0 12px;text-decoration:none;color:var(--text-secondary);background:transparent;font-weight:400;font-size:13px;white-space:nowrap" href="/org"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-users" aria-hidden="true" style="flex-shrink:0;color:var(--text-secondary)"><path d="M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"></path><path d="M16 3.128a4 4 0 0 1 0 7.744"></path><path d="M22 21v-2a4 4 0 0 0-3-3.87"></path><circle cx="9" cy="7" r="4"></circle></svg><span style="opacity:0;transition:opacity 200ms var(--ease-smooth)">Organization</span></a><a class="nav-item" aria-label="Kanban" style="display:flex;align-items:center;gap:10px;height:40px;padding:0 12px;text-decoration:none;color:var(--text-secondary);background:transparent;font-weight:400;font-size:13px;white-space:nowrap" href="/kanban"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-layout-grid" aria-hidden="true" style="flex-shrink:0;color:var(--text-secondary)"><rect width="7" height="7" x="3" y="3" rx="1"></rect><rect width="7" height="7" x="14" y="3" rx="1"></rect><rect width="7" height="7" x="14" y="14" rx="1"></rect><rect width="7" height="7" x="3" y="14" rx="1"></rect></svg><span style="opacity:0;transition:opacity 200ms var(--ease-smooth)">Kanban</span></a><a class="nav-item" aria-label="Cron" style="display:flex;align-items:center;gap:10px;height:40px;padding:0 12px;text-decoration:none;color:var(--text-secondary);background:transparent;font-weight:400;font-size:13px;white-space:nowrap" href="/cron"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-clock" aria-hidden="true" style="flex-shrink:0;color:var(--text-secondary)"><circle cx="12" cy="12" r="10"></circle><path d="M12 6v6l4 2"></path></svg><span style="opacity:0;transition:opacity 200ms var(--ease-smooth)">Cron</span></a><a class="nav-item" aria-label="Costs" style="display:flex;align-items:center;gap:10px;height:40px;padding:0 12px;text-decoration:none;color:var(--text-secondary);background:transparent;font-weight:400;font-size:13px;white-space:nowrap" href="/costs"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-dollar-sign" aria-hidden="true" style="flex-shrink:0;color:var(--text-secondary)"><line x1="12" x2="12" y1="2" y2="22"></line><path d="M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"></path></svg><span style="opacity:0;transition:opacity 200ms var(--ease-smooth)">Costs</span></a><a class="nav-item" aria-label="Activity" style="display:flex;align-items:center;gap:10px;height:40px;padding:0 12px;text-decoration:none;color:var(--text-secondary);background:transparent;font-weight:400;font-size:13px;white-space:nowrap" href="/logs"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-activity" aria-hidden="true" style="flex-shrink:0;color:var(--text-secondary)"><path d="M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2"></path></svg><span style="opacity:0;transition:opacity 200ms var(--ease-smooth)">Activity</span></a><a class="nav-item" aria-label="Skills" aria-current="page" style="display:flex;align-items:center;gap:10px;height:40px;padding:0 12px;text-decoration:none;color:var(--accent);background:var(--accent-fill);font-weight:600;font-size:13px;white-space:nowrap" href="/skills"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-zap" aria-hidden="true" style="flex-shrink:0;color:var(--accent)"><path d="M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z"></path></svg><span style="opacity:0;transition:opacity 200ms var(--ease-smooth)">Skills</span></a><a class="nav-item" aria-label="Settings" style="display:flex;align-items:center;gap:10px;height:40px;padding:0 12px;text-decoration:none;color:var(--text-secondary);background:transparent;font-weight:400;font-size:13px;white-space:nowrap" href="/settings"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-settings" aria-hidden="true" style="flex-shrink:0;color:var(--text-secondary)"><path d="M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915"></path><circle cx="12" cy="12" r="3"></circle></svg><span style="opacity:0;transition:opacity 200ms var(--ease-smooth)">Settings</span></a></nav><div style="padding:8px 8px 12px;flex-shrink:0"><button class="nav-item" aria-label="Theme: dark. Click to cycle." style="display:flex;align-items:center;gap:10px;height:40px;padding:0 12px;width:100%;border:none;background:transparent;color:var(--text-secondary);cursor:pointer;font-size:13px;white-space:nowrap"><span style="flex-shrink:0"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-moon" aria-hidden="true"><path d="M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401"></path></svg></span><span style="opacity:0;transition:opacity 200ms var(--ease-smooth);text-transform:capitalize">dark</span></button></div></aside><main class="flex-1 overflow-hidden lg:ml-[56px]"><div style="height:48px;display:flex;align-items:center;padding:0 12px;border-bottom:1px solid var(--separator);background:var(--material-thick);flex-shrink:0;position:relative;z-index:60" class="jsx-906cbf20b7aa1777 lg:hidden"><button aria-label="Open menu" style="width:36px;height:36px;display:flex;align-items:center;justify-content:center;background:transparent;border:none;cursor:pointer;color:var(--text-primary)" class="jsx-906cbf20b7aa1777"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-menu" aria-hidden="true"><path d="M4 5h16"></path><path d="M4 12h16"></path><path d="M4 19h16"></path></svg></button><div style="flex:1;text-align:center" class="jsx-906cbf20b7aa1777"><span style="font-size:18px;margin-right:6px" class="jsx-906cbf20b7aa1777">🤖</span><span style="font-size:15px;font-weight:600;color:var(--text-primary)" class="jsx-906cbf20b7aa1777">Jinn</span></div><div style="width:36px" class="jsx-906cbf20b7aa1777"></div></div><div style="height:100%;overflow-y:auto;padding:var(--space-6)"><div style="display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--space-6)"><div><h2 style="font-size:var(--text-title2);font-weight:var(--weight-bold);color:var(--text-primary);margin-bottom:var(--space-1)">Skills</h2><p style="font-size:var(--text-body);color:var(--text-tertiary)">Capabilities and learned behaviors</p></div><button style="padding:var(--space-2) var(--space-4);border-radius:var(--radius-md, 12px);background:color-mix(in srgb, var(--accent) 12%, transparent);color:var(--accent);border:none;cursor:pointer;font-size:var(--text-body);font-weight:var(--weight-medium)">+ Create Skill</button></div><div style="text-align:center;padding:var(--space-8);color:var(--text-tertiary);font-size:var(--text-body)">Loading...</div></div></main></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-0f39b7e91dce9791.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[1150,[\"177\",\"static/chunks/app/layout-5129b67d5f126cf0.js\"],\"ClientProviders\"]\n3:I[8954,[],\"\"]\n4:I[5640,[],\"\"]\n5:I[3339,[],\"ClientPageRoot\"]\n6:I[3209,[\"704\",\"static/chunks/704-af2893821e1d18dc.js\",\"590\",\"static/chunks/590-2c34156c7417317e.js\",\"198\",\"static/chunks/198-fd91406a158c5c25.js\",\"573\",\"static/chunks/573-070537ec2452d03e.js\",\"73\",\"static/chunks/73-c226535579393e21.js\",\"501\",\"static/chunks/app/skills/page-df9465e314561bb5.js\"],\"default\"]\n9:I[2051,[],\"OutletBoundary\"]\nb:I[6658,[],\"AsyncMetadataOutlet\"]\nd:I[2051,[],\"ViewportBoundary\"]\nf:I[2051,[],\"MetadataBoundary\"]\n10:\"$Sreact.suspense\"\n12:I[7698,[],\"\"]\n:HL[\"/_next/static/css/4a6a5bca9238c104.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"jt8R5JvUgfB9CMfFwWFr0\",\"p\":\"\",\"c\":[\"\",\"skills\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"skills\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/4a6a5bca9238c104.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"data-theme\":\"dark\",\"suppressHydrationWarning\":true,\"children\":[\"$\",\"body\",null,{\"children\":[\"$\",\"$L2\",null,{\"children\":[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",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\"}]}]}]}]]}],{\"children\":[\"skills\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"$L5\",null,{\"Component\":\"$6\",\"searchParams\":{},\"params\":{},\"promises\":[\"$@7\",\"$@8\"]}],null,[\"$\",\"$L9\",null,{\"children\":[\"$La\",[\"$\",\"$Lb\",null,{\"promise\":\"$@c\"}]]}]]}],{},null,false]},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[[\"$\",\"$Ld\",null,{\"children\":\"$Le\"}],null],[\"$\",\"$Lf\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$10\",null,{\"fallback\":null,\"children\":\"$L11\"}]}]}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$12\",[]],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"7:{}\n8:\"$0:f:0:1:2:children:2:children:1:props:children:0:props:params\"\n"])</script><script>self.__next_f.push([1,"e:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\na:null\n"])</script><script>self.__next_f.push([1,"c:{\"metadata\":[[\"$\",\"meta\",\"0\",{\"name\":\"description\",\"content\":\"AI Gateway Dashboard\"}]],\"error\":null,\"digest\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"11:\"$c:metadata\"\n"])</script></body></html>
1
+ <!DOCTYPE html><!--Zn588p2VvgjCSLr44R__1--><html lang="en" data-theme="dark"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"/><link rel="stylesheet" href="/_next/static/css/24da9dfc818cea32.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-0f39b7e91dce9791.js"/><script src="/_next/static/chunks/8e6518bb-c26e82767f1faf66.js" async=""></script><script src="/_next/static/chunks/743-5bb03adbb0e4ddec.js" async=""></script><script src="/_next/static/chunks/main-app-0c65af8a0fd99888.js" async=""></script><script src="/_next/static/chunks/app/layout-fd975d16033dab25.js" async=""></script><script src="/_next/static/chunks/704-ca24be493a922639.js" async=""></script><script src="/_next/static/chunks/590-2c34156c7417317e.js" async=""></script><script src="/_next/static/chunks/198-3e82ded4f04a0aae.js" async=""></script><script src="/_next/static/chunks/573-070537ec2452d03e.js" async=""></script><script src="/_next/static/chunks/73-2d6e730cea0fe6c8.js" async=""></script><script src="/_next/static/chunks/app/skills/page-18cf3b7bb9a7339c.js" async=""></script><meta name="description" content="AI Gateway Dashboard"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div class="flex h-dvh overflow-hidden" style="background:var(--bg)"><aside style="position:fixed;left:0;top:0;bottom:0;width:56px;background:var(--bg-secondary);border-right:1px solid var(--separator);flex-direction:column;z-index:50;transition:width 200ms var(--ease-smooth);overflow:hidden" class="hidden lg:flex"><div style="display:flex;align-items:center;gap:10px;padding:16px 14px 12px;min-height:56px;flex-shrink:0"><span style="font-size:24px;line-height:1;flex-shrink:0;width:28px;text-align:center">🤖</span><span style="font-size:17px;font-weight:600;color:var(--text-primary);white-space:nowrap;opacity:0;transition:opacity 200ms var(--ease-smooth)">Jinn</span></div><nav style="flex:1;display:flex;flex-direction:column;gap:2px;padding:0 8px"><a class="nav-item" aria-label="Home" style="display:flex;align-items:center;gap:10px;height:40px;padding:0 12px;text-decoration:none;color:var(--text-secondary);background:transparent;font-weight:400;font-size:13px;white-space:nowrap" href="/"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-house" aria-hidden="true" style="flex-shrink:0;color:var(--text-secondary)"><path d="M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8"></path><path d="M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"></path></svg><span style="opacity:0;transition:opacity 200ms var(--ease-smooth)">Home</span></a><a class="nav-item" aria-label="Chat" style="display:flex;align-items:center;gap:10px;height:40px;padding:0 12px;text-decoration:none;color:var(--text-secondary);background:transparent;font-weight:400;font-size:13px;white-space:nowrap" href="/chat"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-message-square" aria-hidden="true" style="flex-shrink:0;color:var(--text-secondary)"><path d="M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z"></path></svg><span style="opacity:0;transition:opacity 200ms var(--ease-smooth)">Chat</span></a><a class="nav-item" aria-label="Sessions" style="display:flex;align-items:center;gap:10px;height:40px;padding:0 12px;text-decoration:none;color:var(--text-secondary);background:transparent;font-weight:400;font-size:13px;white-space:nowrap" href="/sessions"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-layers" aria-hidden="true" style="flex-shrink:0;color:var(--text-secondary)"><path d="M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z"></path><path d="M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12"></path><path d="M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17"></path></svg><span style="opacity:0;transition:opacity 200ms var(--ease-smooth)">Sessions</span></a><a class="nav-item" aria-label="Organization" style="display:flex;align-items:center;gap:10px;height:40px;padding:0 12px;text-decoration:none;color:var(--text-secondary);background:transparent;font-weight:400;font-size:13px;white-space:nowrap" href="/org"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-users" aria-hidden="true" style="flex-shrink:0;color:var(--text-secondary)"><path d="M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"></path><path d="M16 3.128a4 4 0 0 1 0 7.744"></path><path d="M22 21v-2a4 4 0 0 0-3-3.87"></path><circle cx="9" cy="7" r="4"></circle></svg><span style="opacity:0;transition:opacity 200ms var(--ease-smooth)">Organization</span></a><a class="nav-item" aria-label="Kanban" style="display:flex;align-items:center;gap:10px;height:40px;padding:0 12px;text-decoration:none;color:var(--text-secondary);background:transparent;font-weight:400;font-size:13px;white-space:nowrap" href="/kanban"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-layout-grid" aria-hidden="true" style="flex-shrink:0;color:var(--text-secondary)"><rect width="7" height="7" x="3" y="3" rx="1"></rect><rect width="7" height="7" x="14" y="3" rx="1"></rect><rect width="7" height="7" x="14" y="14" rx="1"></rect><rect width="7" height="7" x="3" y="14" rx="1"></rect></svg><span style="opacity:0;transition:opacity 200ms var(--ease-smooth)">Kanban</span></a><a class="nav-item" aria-label="Cron" style="display:flex;align-items:center;gap:10px;height:40px;padding:0 12px;text-decoration:none;color:var(--text-secondary);background:transparent;font-weight:400;font-size:13px;white-space:nowrap" href="/cron"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-clock" aria-hidden="true" style="flex-shrink:0;color:var(--text-secondary)"><circle cx="12" cy="12" r="10"></circle><path d="M12 6v6l4 2"></path></svg><span style="opacity:0;transition:opacity 200ms var(--ease-smooth)">Cron</span></a><a class="nav-item" aria-label="Costs" style="display:flex;align-items:center;gap:10px;height:40px;padding:0 12px;text-decoration:none;color:var(--text-secondary);background:transparent;font-weight:400;font-size:13px;white-space:nowrap" href="/costs"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-dollar-sign" aria-hidden="true" style="flex-shrink:0;color:var(--text-secondary)"><line x1="12" x2="12" y1="2" y2="22"></line><path d="M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"></path></svg><span style="opacity:0;transition:opacity 200ms var(--ease-smooth)">Costs</span></a><a class="nav-item" aria-label="Activity" style="display:flex;align-items:center;gap:10px;height:40px;padding:0 12px;text-decoration:none;color:var(--text-secondary);background:transparent;font-weight:400;font-size:13px;white-space:nowrap" href="/logs"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-activity" aria-hidden="true" style="flex-shrink:0;color:var(--text-secondary)"><path d="M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2"></path></svg><span style="opacity:0;transition:opacity 200ms var(--ease-smooth)">Activity</span></a><a class="nav-item" aria-label="Skills" aria-current="page" style="display:flex;align-items:center;gap:10px;height:40px;padding:0 12px;text-decoration:none;color:var(--accent);background:var(--accent-fill);font-weight:600;font-size:13px;white-space:nowrap" href="/skills"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-zap" aria-hidden="true" style="flex-shrink:0;color:var(--accent)"><path d="M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z"></path></svg><span style="opacity:0;transition:opacity 200ms var(--ease-smooth)">Skills</span></a><a class="nav-item" aria-label="Settings" style="display:flex;align-items:center;gap:10px;height:40px;padding:0 12px;text-decoration:none;color:var(--text-secondary);background:transparent;font-weight:400;font-size:13px;white-space:nowrap" href="/settings"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-settings" aria-hidden="true" style="flex-shrink:0;color:var(--text-secondary)"><path d="M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915"></path><circle cx="12" cy="12" r="3"></circle></svg><span style="opacity:0;transition:opacity 200ms var(--ease-smooth)">Settings</span></a></nav><div style="padding:8px 8px 12px;flex-shrink:0"><button class="nav-item" aria-label="Theme: dark. Click to cycle." style="display:flex;align-items:center;gap:10px;height:40px;padding:0 12px;width:100%;border:none;background:transparent;color:var(--text-secondary);cursor:pointer;font-size:13px;white-space:nowrap"><span style="flex-shrink:0"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-moon" aria-hidden="true"><path d="M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401"></path></svg></span><span style="opacity:0;transition:opacity 200ms var(--ease-smooth);text-transform:capitalize">dark</span></button></div></aside><main class="flex-1 overflow-hidden lg:ml-[56px]"><div style="height:48px;display:flex;align-items:center;padding:0 12px;border-bottom:1px solid var(--separator);background:var(--material-thick);flex-shrink:0;position:relative;z-index:60" class="jsx-906cbf20b7aa1777 lg:hidden"><button aria-label="Open menu" style="width:36px;height:36px;display:flex;align-items:center;justify-content:center;background:transparent;border:none;cursor:pointer;color:var(--text-primary)" class="jsx-906cbf20b7aa1777"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-menu" aria-hidden="true"><path d="M4 5h16"></path><path d="M4 12h16"></path><path d="M4 19h16"></path></svg></button><div style="flex:1;text-align:center" class="jsx-906cbf20b7aa1777"><span style="font-size:18px;margin-right:6px" class="jsx-906cbf20b7aa1777">🤖</span><span style="font-size:15px;font-weight:600;color:var(--text-primary)" class="jsx-906cbf20b7aa1777">Jinn</span></div><div style="width:36px" class="jsx-906cbf20b7aa1777"></div></div><div style="height:100%;overflow-y:auto;padding:var(--space-6)"><div style="display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--space-6)"><div><h2 style="font-size:var(--text-title2);font-weight:var(--weight-bold);color:var(--text-primary);margin-bottom:var(--space-1)">Skills</h2><p style="font-size:var(--text-body);color:var(--text-tertiary)">Capabilities and learned behaviors</p></div><button style="padding:var(--space-2) var(--space-4);border-radius:var(--radius-md, 12px);background:color-mix(in srgb, var(--accent) 12%, transparent);color:var(--accent);border:none;cursor:pointer;font-size:var(--text-body);font-weight:var(--weight-medium)">+ Create Skill</button></div><div style="text-align:center;padding:var(--space-8);color:var(--text-tertiary);font-size:var(--text-body)">Loading...</div></div></main></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-0f39b7e91dce9791.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[1150,[\"177\",\"static/chunks/app/layout-fd975d16033dab25.js\"],\"ClientProviders\"]\n3:I[8954,[],\"\"]\n4:I[5640,[],\"\"]\n5:I[3339,[],\"ClientPageRoot\"]\n6:I[3209,[\"704\",\"static/chunks/704-ca24be493a922639.js\",\"590\",\"static/chunks/590-2c34156c7417317e.js\",\"198\",\"static/chunks/198-3e82ded4f04a0aae.js\",\"573\",\"static/chunks/573-070537ec2452d03e.js\",\"73\",\"static/chunks/73-2d6e730cea0fe6c8.js\",\"501\",\"static/chunks/app/skills/page-18cf3b7bb9a7339c.js\"],\"default\"]\n9:I[2051,[],\"OutletBoundary\"]\nb:I[6658,[],\"AsyncMetadataOutlet\"]\nd:I[2051,[],\"ViewportBoundary\"]\nf:I[2051,[],\"MetadataBoundary\"]\n10:\"$Sreact.suspense\"\n12:I[7698,[],\"\"]\n:HL[\"/_next/static/css/24da9dfc818cea32.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"Zn588p2VvgjCSLr44R__1\",\"p\":\"\",\"c\":[\"\",\"skills\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"skills\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/24da9dfc818cea32.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"data-theme\":\"dark\",\"suppressHydrationWarning\":true,\"children\":[\"$\",\"body\",null,{\"children\":[\"$\",\"$L2\",null,{\"children\":[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",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\"}]}]}]}]]}],{\"children\":[\"skills\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"$L5\",null,{\"Component\":\"$6\",\"searchParams\":{},\"params\":{},\"promises\":[\"$@7\",\"$@8\"]}],null,[\"$\",\"$L9\",null,{\"children\":[\"$La\",[\"$\",\"$Lb\",null,{\"promise\":\"$@c\"}]]}]]}],{},null,false]},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[[\"$\",\"$Ld\",null,{\"children\":\"$Le\"}],null],[\"$\",\"$Lf\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$10\",null,{\"fallback\":null,\"children\":\"$L11\"}]}]}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$12\",[]],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"7:{}\n8:\"$0:f:0:1:2:children:2:children:1:props:children:0:props:params\"\n"])</script><script>self.__next_f.push([1,"e:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no\"}]]\na:null\n"])</script><script>self.__next_f.push([1,"c:{\"metadata\":[[\"$\",\"meta\",\"0\",{\"name\":\"description\",\"content\":\"AI Gateway Dashboard\"}]],\"error\":null,\"digest\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"11:\"$c:metadata\"\n"])</script></body></html>
@@ -1,20 +1,20 @@
1
1
  1:"$Sreact.fragment"
2
- 2:I[1150,["177","static/chunks/app/layout-5129b67d5f126cf0.js"],"ClientProviders"]
2
+ 2:I[1150,["177","static/chunks/app/layout-fd975d16033dab25.js"],"ClientProviders"]
3
3
  3:I[8954,[],""]
4
4
  4:I[5640,[],""]
5
5
  5:I[3339,[],"ClientPageRoot"]
6
- 6:I[3209,["704","static/chunks/704-af2893821e1d18dc.js","590","static/chunks/590-2c34156c7417317e.js","198","static/chunks/198-fd91406a158c5c25.js","573","static/chunks/573-070537ec2452d03e.js","73","static/chunks/73-c226535579393e21.js","501","static/chunks/app/skills/page-df9465e314561bb5.js"],"default"]
6
+ 6:I[3209,["704","static/chunks/704-ca24be493a922639.js","590","static/chunks/590-2c34156c7417317e.js","198","static/chunks/198-3e82ded4f04a0aae.js","573","static/chunks/573-070537ec2452d03e.js","73","static/chunks/73-2d6e730cea0fe6c8.js","501","static/chunks/app/skills/page-18cf3b7bb9a7339c.js"],"default"]
7
7
  9:I[2051,[],"OutletBoundary"]
8
8
  b:I[6658,[],"AsyncMetadataOutlet"]
9
9
  d:I[2051,[],"ViewportBoundary"]
10
10
  f:I[2051,[],"MetadataBoundary"]
11
11
  10:"$Sreact.suspense"
12
12
  12:I[7698,[],""]
13
- :HL["/_next/static/css/4a6a5bca9238c104.css","style"]
14
- 0:{"P":null,"b":"jt8R5JvUgfB9CMfFwWFr0","p":"","c":["","skills"],"i":false,"f":[[["",{"children":["skills",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/4a6a5bca9238c104.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","data-theme":"dark","suppressHydrationWarning":true,"children":["$","body",null,{"children":["$","$L2",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",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"}]}]}]}]]}],{"children":["skills",["$","$1","c",{"children":[null,["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L5",null,{"Component":"$6","searchParams":{},"params":{},"promises":["$@7","$@8"]}],null,["$","$L9",null,{"children":["$La",["$","$Lb",null,{"promise":"$@c"}]]}]]}],{},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,[["$","$Ld",null,{"children":"$Le"}],null],["$","$Lf",null,{"children":["$","div",null,{"hidden":true,"children":["$","$10",null,{"fallback":null,"children":"$L11"}]}]}]]}],false]],"m":"$undefined","G":["$12",[]],"s":false,"S":true}
13
+ :HL["/_next/static/css/24da9dfc818cea32.css","style"]
14
+ 0:{"P":null,"b":"Zn588p2VvgjCSLr44R__1","p":"","c":["","skills"],"i":false,"f":[[["",{"children":["skills",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/24da9dfc818cea32.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","data-theme":"dark","suppressHydrationWarning":true,"children":["$","body",null,{"children":["$","$L2",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",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"}]}]}]}]]}],{"children":["skills",["$","$1","c",{"children":[null,["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L5",null,{"Component":"$6","searchParams":{},"params":{},"promises":["$@7","$@8"]}],null,["$","$L9",null,{"children":["$La",["$","$Lb",null,{"promise":"$@c"}]]}]]}],{},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,[["$","$Ld",null,{"children":"$Le"}],null],["$","$Lf",null,{"children":["$","div",null,{"hidden":true,"children":["$","$10",null,{"fallback":null,"children":"$L11"}]}]}]]}],false]],"m":"$undefined","G":["$12",[]],"s":false,"S":true}
15
15
  7:{}
16
16
  8:"$0:f:0:1:2:children:2:children:1:props:children:0:props:params"
17
- e:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
17
+ e:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"}]]
18
18
  a:null
19
19
  c:{"metadata":[["$","meta","0",{"name":"description","content":"AI Gateway Dashboard"}]],"error":null,"digest":"$undefined"}
20
20
  11:"$c:metadata"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jinn-cli",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
4
4
  "description": "Lightweight AI gateway daemon orchestrating Claude Code and Codex",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -13,13 +13,6 @@
13
13
  "dist/",
14
14
  "template/"
15
15
  ],
16
- "scripts": {
17
- "build": "tsc && rm -rf dist/web && cp -r ../web/out dist/web 2>/dev/null || true",
18
- "dev": "tsc --watch",
19
- "typecheck": "tsc --noEmit",
20
- "test": "pnpm run build && node --test dist/src",
21
- "clean": "rm -rf dist"
22
- },
23
16
  "dependencies": {
24
17
  "@slack/bolt": "^4.3.0",
25
18
  "better-sqlite3": "^11.8.0",
@@ -39,5 +32,12 @@
39
32
  "@types/uuid": "^10.0.0",
40
33
  "@types/ws": "^8.5.0",
41
34
  "typescript": "^5.8.0"
35
+ },
36
+ "scripts": {
37
+ "build": "tsc && rm -rf dist/web && cp -r ../web/out dist/web 2>/dev/null || true",
38
+ "dev": "tsc --watch",
39
+ "typecheck": "tsc --noEmit",
40
+ "test": "pnpm run build && node --test dist/src",
41
+ "clean": "rm -rf dist"
42
42
  }
43
- }
43
+ }
@@ -21,6 +21,38 @@ connectors:
21
21
  shareSessionInChannel: false
22
22
  ignoreOldMessagesOnBoot: true
23
23
 
24
+ # MCP servers provide employees with browser, search, and messaging capabilities.
25
+ # These are injected automatically into Claude Code sessions via --mcp-config.
26
+ mcp:
27
+ browser:
28
+ enabled: true
29
+ provider: playwright # or "puppeteer"
30
+ search:
31
+ enabled: false # Set to true and add apiKey or set BRAVE_API_KEY env var
32
+ provider: brave
33
+ # apiKey: ${BRAVE_API_KEY}
34
+ fetch:
35
+ enabled: true
36
+ gateway:
37
+ enabled: true # Built-in MCP server for messaging, org, cron, sessions
38
+ # custom:
39
+ # my-server:
40
+ # enabled: true
41
+ # command: npx
42
+ # args: ["-y", "@my/mcp-server"]
43
+ # env:
44
+ # API_KEY: ${MY_API_KEY}
45
+
46
+ # Session limits (can be overridden per-employee in their YAML)
47
+ sessions:
48
+ maxDurationMinutes: 30
49
+ maxCostUsd: 10.00
50
+
51
+ # Cron configuration
52
+ cron:
53
+ # alertConnector: slack
54
+ # alertChannel: "#alerts"
55
+
24
56
  portal:
25
57
  language: English
26
58
 
@@ -0,0 +1,108 @@
1
+ # MCP (Model Context Protocol) Integration
2
+
3
+ {{portalName}} automatically configures MCP servers for AI engine sessions, giving employees access to browser automation, web search, and gateway tools without manual setup.
4
+
5
+ ## How It Works
6
+
7
+ 1. MCP servers are defined in `config.yaml` under the `mcp:` section
8
+ 2. When a session starts, {{portalName}} resolves which MCP servers the employee needs
9
+ 3. A temporary MCP config JSON file is written to `~/.jinn/tmp/mcp/`
10
+ 4. The file is passed to Claude Code via `--mcp-config <path>`
11
+ 5. The file is cleaned up after the session completes
12
+
13
+ ## Built-in MCP Servers
14
+
15
+ ### Browser (Playwright)
16
+ Full browser automation — navigate, click, type, screenshot, extract content.
17
+
18
+ ```yaml
19
+ mcp:
20
+ browser:
21
+ enabled: true
22
+ provider: playwright # or "puppeteer"
23
+ ```
24
+
25
+ ### Web Search (Brave)
26
+ Search the web and get structured results.
27
+
28
+ ```yaml
29
+ mcp:
30
+ search:
31
+ enabled: true
32
+ provider: brave
33
+ apiKey: ${BRAVE_API_KEY} # reads from environment variable
34
+ ```
35
+
36
+ ### Fetch
37
+ Extract readable content from URLs (HTML → markdown/text).
38
+
39
+ ```yaml
40
+ mcp:
41
+ fetch:
42
+ enabled: true
43
+ ```
44
+
45
+ ### Gateway
46
+ Built-in MCP server that wraps {{portalName}}'s own API. Gives employees tools to:
47
+ - Send messages via connectors (Slack, etc.)
48
+ - List and query sessions
49
+ - Manage cron jobs
50
+ - Query the org structure
51
+ - Update department boards
52
+
53
+ ```yaml
54
+ mcp:
55
+ gateway:
56
+ enabled: true # enabled by default
57
+ ```
58
+
59
+ ## Custom MCP Servers
60
+
61
+ Add any MCP server via the `custom:` section:
62
+
63
+ ```yaml
64
+ mcp:
65
+ custom:
66
+ my-database:
67
+ enabled: true
68
+ command: npx
69
+ args: ["-y", "@my/mcp-server-postgres"]
70
+ env:
71
+ DATABASE_URL: ${DATABASE_URL}
72
+ my-api:
73
+ command: node
74
+ args: ["/path/to/my-mcp-server.js"]
75
+ ```
76
+
77
+ ## Per-Employee Overrides
78
+
79
+ Employees can opt out of MCP servers or request only specific ones:
80
+
81
+ ```yaml
82
+ # In employee YAML (e.g. org/engineering/backend-dev.yaml)
83
+ name: backend-dev
84
+ mcp: false # No MCP servers at all
85
+
86
+ # Or specific servers only:
87
+ mcp:
88
+ - search
89
+ - gateway
90
+ ```
91
+
92
+ By default, all globally enabled MCP servers are available to all employees.
93
+
94
+ ## Environment Variables
95
+
96
+ API keys and secrets should use `${VAR_NAME}` syntax to reference environment variables:
97
+
98
+ ```yaml
99
+ mcp:
100
+ search:
101
+ apiKey: ${BRAVE_API_KEY}
102
+ custom:
103
+ stripe:
104
+ env:
105
+ STRIPE_KEY: ${STRIPE_SECRET_KEY}
106
+ ```
107
+
108
+ This keeps secrets out of config files.