jinn-cli 0.7.2 → 0.7.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/dist/src/engines/claude.d.ts.map +1 -1
  2. package/dist/src/engines/claude.js +9 -0
  3. package/dist/src/engines/claude.js.map +1 -1
  4. package/dist/src/gateway/__tests__/api-last-n.test.d.ts +2 -0
  5. package/dist/src/gateway/__tests__/api-last-n.test.d.ts.map +1 -0
  6. package/dist/src/gateway/__tests__/api-last-n.test.js +32 -0
  7. package/dist/src/gateway/__tests__/api-last-n.test.js.map +1 -0
  8. package/dist/src/gateway/api.d.ts.map +1 -1
  9. package/dist/src/gateway/api.js +34 -1
  10. package/dist/src/gateway/api.js.map +1 -1
  11. package/dist/src/gateway/lifecycle.d.ts.map +1 -1
  12. package/dist/src/gateway/lifecycle.js +1 -0
  13. package/dist/src/gateway/lifecycle.js.map +1 -1
  14. package/dist/src/sessions/__tests__/callbacks.test.d.ts +2 -0
  15. package/dist/src/sessions/__tests__/callbacks.test.d.ts.map +1 -0
  16. package/dist/src/sessions/__tests__/callbacks.test.js +118 -0
  17. package/dist/src/sessions/__tests__/callbacks.test.js.map +1 -0
  18. package/dist/src/sessions/callbacks.d.ts +1 -1
  19. package/dist/src/sessions/callbacks.js +4 -4
  20. package/dist/src/sessions/callbacks.js.map +1 -1
  21. package/dist/src/sessions/manager.d.ts.map +1 -1
  22. package/dist/src/sessions/manager.js +21 -3
  23. package/dist/src/sessions/manager.js.map +1 -1
  24. package/dist/src/shared/__tests__/rateLimit.test.d.ts +2 -0
  25. package/dist/src/shared/__tests__/rateLimit.test.d.ts.map +1 -0
  26. package/dist/src/shared/__tests__/rateLimit.test.js +108 -0
  27. package/dist/src/shared/__tests__/rateLimit.test.js.map +1 -0
  28. package/dist/src/shared/__tests__/usageAwareness.test.d.ts +2 -0
  29. package/dist/src/shared/__tests__/usageAwareness.test.d.ts.map +1 -0
  30. package/dist/src/shared/__tests__/usageAwareness.test.js +58 -0
  31. package/dist/src/shared/__tests__/usageAwareness.test.js.map +1 -0
  32. package/dist/src/shared/rateLimit.d.ts +7 -0
  33. package/dist/src/shared/rateLimit.d.ts.map +1 -1
  34. package/dist/src/shared/rateLimit.js +31 -0
  35. package/dist/src/shared/rateLimit.js.map +1 -1
  36. package/dist/src/shared/types.d.ts +1 -0
  37. package/dist/src/shared/types.d.ts.map +1 -1
  38. package/dist/src/shared/usageAwareness.d.ts.map +1 -1
  39. package/dist/src/shared/usageAwareness.js +7 -0
  40. package/dist/src/shared/usageAwareness.js.map +1 -1
  41. package/dist/web/404.html +1 -1
  42. package/dist/web/_next/static/chunks/{155-592ad81a5c00a38a.js → 155-277bf3022d16e74f.js} +1 -1
  43. package/dist/web/_next/static/chunks/{192-bd69b67fd03b9f3d.js → 192-28e0cb7a172d804d.js} +1 -1
  44. package/dist/web/_next/static/chunks/{51-ea7256657692ba90.js → 51-43ce350b707e6b06.js} +1 -1
  45. package/dist/web/_next/static/chunks/app/_not-found/page-1a2952195ec2c3fa.js +1 -0
  46. package/dist/web/_next/static/chunks/app/chat/{page-83a714baeb382ffb.js → page-d9b12d7effe66c59.js} +1 -1
  47. package/dist/web/_next/static/chunks/app/cron/page-03f6c20a2336f185.js +1 -0
  48. package/dist/web/_next/static/chunks/app/kanban/{page-0e1b2a66378b8a6b.js → page-0aa74ece5109e58f.js} +1 -1
  49. package/dist/web/_next/static/chunks/app/{layout-ab9ba2b24a88513d.js → layout-45d8b9cc84f9443f.js} +1 -1
  50. package/dist/web/_next/static/chunks/app/logs/{page-b2ea0e6b92c54706.js → page-0f2b58794d9a97ce.js} +1 -1
  51. package/dist/web/_next/static/chunks/app/org/{page-05c8d33b3bf07d3d.js → page-e51ef93389a23de8.js} +1 -1
  52. package/dist/web/_next/static/chunks/app/{page-57dcf41f8ef011a7.js → page-16b78d2823b60898.js} +1 -1
  53. package/dist/web/_next/static/chunks/app/settings/{page-2903a5e9b8b0fc4a.js → page-8d1048b944663524.js} +1 -1
  54. package/dist/web/_next/static/chunks/app/skills/page-6d9c1d5b03aa86bb.js +1 -0
  55. package/dist/web/_next/static/chunks/{main-app-72a2d12a170701ef.js → main-app-637478e5d2259005.js} +1 -1
  56. package/dist/web/chat.html +1 -1
  57. package/dist/web/chat.txt +3 -3
  58. package/dist/web/cron.html +1 -1
  59. package/dist/web/cron.txt +3 -3
  60. package/dist/web/index.html +1 -1
  61. package/dist/web/index.txt +3 -3
  62. package/dist/web/kanban.html +1 -1
  63. package/dist/web/kanban.txt +3 -3
  64. package/dist/web/logs.html +2 -2
  65. package/dist/web/logs.txt +3 -3
  66. package/dist/web/org.html +1 -1
  67. package/dist/web/org.txt +3 -3
  68. package/dist/web/sessions.html +1 -1
  69. package/dist/web/sessions.txt +2 -2
  70. package/dist/web/settings.html +1 -1
  71. package/dist/web/settings.txt +3 -3
  72. package/dist/web/skills.html +1 -1
  73. package/dist/web/skills.txt +3 -3
  74. package/package.json +1 -1
  75. package/template/AGENTS.md +21 -0
  76. package/template/CLAUDE.md +21 -0
  77. package/dist/web/_next/static/chunks/app/_not-found/page-22b69e9fb96ef3fc.js +0 -1
  78. package/dist/web/_next/static/chunks/app/cron/page-4ede68bcdb3e76ca.js +0 -1
  79. package/dist/web/_next/static/chunks/app/skills/page-971feac69b3a1383.js +0 -1
  80. /package/dist/web/_next/static/{4OBIVkP7CCBmCjhg6p9Id → er4Sne2nYT8t4rNVzckgy}/_buildManifest.js +0 -0
  81. /package/dist/web/_next/static/{4OBIVkP7CCBmCjhg6p9Id → er4Sne2nYT8t4rNVzckgy}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- <!DOCTYPE html><!--4OBIVkP7CCBmCjhg6p9Id--><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/92635e77ae2cd8fd.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-e7350efbcf65db9c.js"/><script src="/_next/static/chunks/6d25620b-d9f90746a7f2178c.js" async=""></script><script src="/_next/static/chunks/144-548cab85cf18301a.js" async=""></script><script src="/_next/static/chunks/main-app-72a2d12a170701ef.js" async=""></script><script src="/_next/static/chunks/625-93dc90080662b8f4.js" async=""></script><script src="/_next/static/chunks/155-592ad81a5c00a38a.js" async=""></script><script src="/_next/static/chunks/app/layout-ab9ba2b24a88513d.js" async=""></script><script src="/_next/static/chunks/51-ea7256657692ba90.js" async=""></script><script src="/_next/static/chunks/192-bd69b67fd03b9f3d.js" async=""></script><script src="/_next/static/chunks/app/skills/page-971feac69b3a1383.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 bg-background"><aside class="fixed inset-y-0 left-0 z-[60] hidden overflow-hidden border-r border-border bg-[var(--bg-secondary)] transition-[width] duration-200 ease-out lg:flex lg:flex-col w-14"><div class="flex min-h-14 shrink-0 items-center gap-2.5 px-3.5 pb-3 pt-4"><span class="w-7 shrink-0 text-center text-2xl leading-none">🤖</span><span class="whitespace-nowrap text-[17px] font-semibold text-foreground transition-opacity duration-200 opacity-0">Jinn</span></div><nav class="flex flex-1 flex-col gap-0.5 px-2"><a href="/" class="group flex h-10 items-center gap-2.5 rounded-md px-3 text-[13px] whitespace-nowrap transition-colors text-muted-foreground hover:bg-accent hover:text-foreground" aria-label="Home"><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 shrink-0" aria-hidden="true"><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 class="transition-opacity duration-200 opacity-0">Home</span></a><a href="/chat" class="group flex h-10 items-center gap-2.5 rounded-md px-3 text-[13px] whitespace-nowrap transition-colors text-muted-foreground hover:bg-accent hover:text-foreground" aria-label="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 shrink-0" aria-hidden="true"><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 class="transition-opacity duration-200 opacity-0">Chat</span></a><a href="/org" class="group flex h-10 items-center gap-2.5 rounded-md px-3 text-[13px] whitespace-nowrap transition-colors text-muted-foreground hover:bg-accent hover:text-foreground" aria-label="Organization"><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 shrink-0" aria-hidden="true"><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 class="transition-opacity duration-200 opacity-0">Organization</span></a><a href="/kanban" class="group flex h-10 items-center gap-2.5 rounded-md px-3 text-[13px] whitespace-nowrap transition-colors text-muted-foreground hover:bg-accent hover:text-foreground" aria-label="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 shrink-0" aria-hidden="true"><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 class="transition-opacity duration-200 opacity-0">Kanban</span></a><a href="/cron" class="group flex h-10 items-center gap-2.5 rounded-md px-3 text-[13px] whitespace-nowrap transition-colors text-muted-foreground hover:bg-accent hover:text-foreground" aria-label="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 shrink-0" aria-hidden="true"><circle cx="12" cy="12" r="10"></circle><path d="M12 6v6l4 2"></path></svg><span class="transition-opacity duration-200 opacity-0">Cron</span></a><a href="/logs" class="group flex h-10 items-center gap-2.5 rounded-md px-3 text-[13px] whitespace-nowrap transition-colors text-muted-foreground hover:bg-accent hover:text-foreground" aria-label="Activity"><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 shrink-0" aria-hidden="true"><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 class="transition-opacity duration-200 opacity-0">Activity</span></a><a href="/skills" class="group flex h-10 items-center gap-2.5 rounded-md px-3 text-[13px] whitespace-nowrap transition-colors bg-[var(--accent-fill)] font-semibold text-[var(--accent)]" aria-label="Skills" aria-current="page"><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 shrink-0" aria-hidden="true"><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 class="transition-opacity duration-200 opacity-0">Skills</span></a><a href="/settings" class="group flex h-10 items-center gap-2.5 rounded-md px-3 text-[13px] whitespace-nowrap transition-colors text-muted-foreground hover:bg-accent hover:text-foreground" aria-label="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 shrink-0" aria-hidden="true"><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 class="transition-opacity duration-200 opacity-0">Settings</span></a></nav><div class="shrink-0 px-2 pb-3 pt-2"><button aria-label="Theme: dark. Click to cycle." class="flex h-10 w-full items-center gap-2.5 rounded-md px-3 text-[13px] text-muted-foreground transition-colors hover:bg-accent hover:text-foreground"><span class="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 class="capitalize transition-opacity duration-200 opacity-0">dark</span></button></div></aside><main class="flex-1 overflow-hidden flex flex-col lg:ml-[56px]"><div class="jsx-906cbf20b7aa1777 relative z-60 flex h-12 shrink-0 items-center border-b border-border bg-[var(--material-thick)] px-3 lg:hidden"><button aria-label="Open menu" class="jsx-906cbf20b7aa1777 inline-flex size-9 items-center justify-center rounded-md text-foreground transition-colors hover:bg-accent"><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 class="jsx-906cbf20b7aa1777 flex flex-1 items-center justify-center text-center"><span class="jsx-906cbf20b7aa1777 mr-1.5 text-lg">🤖</span><span class="jsx-906cbf20b7aa1777 text-sm font-semibold text-foreground">Jinn</span></div><div class="jsx-906cbf20b7aa1777 flex items-center gap-1"><div class="relative"><button data-slot="button" data-variant="ghost" data-size="icon-sm" class="inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&amp;_svg]:pointer-events-none [&amp;_svg]:shrink-0 [&amp;_svg:not([class*=&#x27;size-&#x27;])]:size-4 hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50 size-8 relative text-muted-foreground" aria-label="Notifications"><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-bell" aria-hidden="true"><path d="M10.268 21a2 2 0 0 0 3.464 0"></path><path d="M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326"></path></svg></button></div></div></div><div class="flex-1 overflow-hidden"><div class="h-full overflow-y-auto p-[var(--space-6)]"><div class="flex items-center justify-between mb-[var(--space-6)]"><div><h2 class="text-[length:var(--text-title2)] font-[var(--weight-bold)] text-[var(--text-primary)] mb-[var(--space-1)]">Skills</h2><p class="text-[length:var(--text-body)] text-[var(--text-tertiary)]">Capabilities and learned behaviors</p></div><button class="py-[var(--space-2)] px-[var(--space-4)] rounded-[var(--radius-md,12px)] text-[var(--accent)] border-none cursor-pointer text-[length:var(--text-body)] font-[var(--weight-medium)]" style="background:color-mix(in srgb, var(--accent) 12%, transparent)">+ Create Skill</button></div><div class="text-center p-[var(--space-8)] text-[var(--text-tertiary)] text-[length:var(--text-body)]">Loading...</div></div></div></main></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-e7350efbcf65db9c.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[4874,[\"625\",\"static/chunks/625-93dc90080662b8f4.js\",\"155\",\"static/chunks/155-592ad81a5c00a38a.js\",\"177\",\"static/chunks/app/layout-ab9ba2b24a88513d.js\"],\"ClientProviders\"]\n3:I[1015,[],\"\"]\n4:I[3912,[],\"\"]\n5:I[3538,[],\"ClientPageRoot\"]\n6:I[2886,[\"625\",\"static/chunks/625-93dc90080662b8f4.js\",\"51\",\"static/chunks/51-ea7256657692ba90.js\",\"155\",\"static/chunks/155-592ad81a5c00a38a.js\",\"192\",\"static/chunks/192-bd69b67fd03b9f3d.js\",\"501\",\"static/chunks/app/skills/page-971feac69b3a1383.js\"],\"default\"]\n9:I[6862,[],\"OutletBoundary\"]\nb:I[1475,[],\"AsyncMetadataOutlet\"]\nd:I[6862,[],\"ViewportBoundary\"]\nf:I[6862,[],\"MetadataBoundary\"]\n10:\"$Sreact.suspense\"\n12:I[1389,[],\"\"]\n:HL[\"/_next/static/css/92635e77ae2cd8fd.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"4OBIVkP7CCBmCjhg6p9Id\",\"p\":\"\",\"c\":[\"\",\"skills\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"skills\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/92635e77ae2cd8fd.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"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><!--er4Sne2nYT8t4rNVzckgy--><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/92635e77ae2cd8fd.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-e7350efbcf65db9c.js"/><script src="/_next/static/chunks/6d25620b-d9f90746a7f2178c.js" async=""></script><script src="/_next/static/chunks/144-548cab85cf18301a.js" async=""></script><script src="/_next/static/chunks/main-app-637478e5d2259005.js" async=""></script><script src="/_next/static/chunks/625-93dc90080662b8f4.js" async=""></script><script src="/_next/static/chunks/155-277bf3022d16e74f.js" async=""></script><script src="/_next/static/chunks/app/layout-45d8b9cc84f9443f.js" async=""></script><script src="/_next/static/chunks/51-43ce350b707e6b06.js" async=""></script><script src="/_next/static/chunks/192-28e0cb7a172d804d.js" async=""></script><script src="/_next/static/chunks/app/skills/page-6d9c1d5b03aa86bb.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 bg-background"><aside class="fixed inset-y-0 left-0 z-[60] hidden overflow-hidden border-r border-border bg-[var(--bg-secondary)] transition-[width] duration-200 ease-out lg:flex lg:flex-col w-14"><div class="flex min-h-14 shrink-0 items-center gap-2.5 px-3.5 pb-3 pt-4"><span class="w-7 shrink-0 text-center text-2xl leading-none">🤖</span><span class="whitespace-nowrap text-[17px] font-semibold text-foreground transition-opacity duration-200 opacity-0">Jinn</span></div><nav class="flex flex-1 flex-col gap-0.5 px-2"><a href="/" class="group flex h-10 items-center gap-2.5 rounded-md px-3 text-[13px] whitespace-nowrap transition-colors text-muted-foreground hover:bg-accent hover:text-foreground" aria-label="Home"><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 shrink-0" aria-hidden="true"><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 class="transition-opacity duration-200 opacity-0">Home</span></a><a href="/chat" class="group flex h-10 items-center gap-2.5 rounded-md px-3 text-[13px] whitespace-nowrap transition-colors text-muted-foreground hover:bg-accent hover:text-foreground" aria-label="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 shrink-0" aria-hidden="true"><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 class="transition-opacity duration-200 opacity-0">Chat</span></a><a href="/org" class="group flex h-10 items-center gap-2.5 rounded-md px-3 text-[13px] whitespace-nowrap transition-colors text-muted-foreground hover:bg-accent hover:text-foreground" aria-label="Organization"><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 shrink-0" aria-hidden="true"><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 class="transition-opacity duration-200 opacity-0">Organization</span></a><a href="/kanban" class="group flex h-10 items-center gap-2.5 rounded-md px-3 text-[13px] whitespace-nowrap transition-colors text-muted-foreground hover:bg-accent hover:text-foreground" aria-label="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 shrink-0" aria-hidden="true"><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 class="transition-opacity duration-200 opacity-0">Kanban</span></a><a href="/cron" class="group flex h-10 items-center gap-2.5 rounded-md px-3 text-[13px] whitespace-nowrap transition-colors text-muted-foreground hover:bg-accent hover:text-foreground" aria-label="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 shrink-0" aria-hidden="true"><circle cx="12" cy="12" r="10"></circle><path d="M12 6v6l4 2"></path></svg><span class="transition-opacity duration-200 opacity-0">Cron</span></a><a href="/logs" class="group flex h-10 items-center gap-2.5 rounded-md px-3 text-[13px] whitespace-nowrap transition-colors text-muted-foreground hover:bg-accent hover:text-foreground" aria-label="Activity"><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 shrink-0" aria-hidden="true"><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 class="transition-opacity duration-200 opacity-0">Activity</span></a><a href="/skills" class="group flex h-10 items-center gap-2.5 rounded-md px-3 text-[13px] whitespace-nowrap transition-colors bg-[var(--accent-fill)] font-semibold text-[var(--accent)]" aria-label="Skills" aria-current="page"><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 shrink-0" aria-hidden="true"><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 class="transition-opacity duration-200 opacity-0">Skills</span></a><a href="/settings" class="group flex h-10 items-center gap-2.5 rounded-md px-3 text-[13px] whitespace-nowrap transition-colors text-muted-foreground hover:bg-accent hover:text-foreground" aria-label="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 shrink-0" aria-hidden="true"><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 class="transition-opacity duration-200 opacity-0">Settings</span></a></nav><div class="shrink-0 px-2 pb-3 pt-2"><button aria-label="Theme: dark. Click to cycle." class="flex h-10 w-full items-center gap-2.5 rounded-md px-3 text-[13px] text-muted-foreground transition-colors hover:bg-accent hover:text-foreground"><span class="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 class="capitalize transition-opacity duration-200 opacity-0">dark</span></button></div></aside><main class="flex-1 overflow-hidden flex flex-col lg:ml-[56px]"><div class="jsx-906cbf20b7aa1777 relative z-60 flex h-12 shrink-0 items-center border-b border-border bg-[var(--material-thick)] px-3 lg:hidden"><button aria-label="Open menu" class="jsx-906cbf20b7aa1777 inline-flex size-9 items-center justify-center rounded-md text-foreground transition-colors hover:bg-accent"><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 class="jsx-906cbf20b7aa1777 flex flex-1 items-center justify-center text-center"><span class="jsx-906cbf20b7aa1777 mr-1.5 text-lg">🤖</span><span class="jsx-906cbf20b7aa1777 text-sm font-semibold text-foreground">Jinn</span></div><div class="jsx-906cbf20b7aa1777 flex items-center gap-1"><div class="relative"><button data-slot="button" data-variant="ghost" data-size="icon-sm" class="inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&amp;_svg]:pointer-events-none [&amp;_svg]:shrink-0 [&amp;_svg:not([class*=&#x27;size-&#x27;])]:size-4 hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50 size-8 relative text-muted-foreground" aria-label="Notifications"><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-bell" aria-hidden="true"><path d="M10.268 21a2 2 0 0 0 3.464 0"></path><path d="M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326"></path></svg></button></div></div></div><div class="flex-1 overflow-hidden"><div class="h-full overflow-y-auto p-[var(--space-6)]"><div class="flex items-center justify-between mb-[var(--space-6)]"><div><h2 class="text-[length:var(--text-title2)] font-[var(--weight-bold)] text-[var(--text-primary)] mb-[var(--space-1)]">Skills</h2><p class="text-[length:var(--text-body)] text-[var(--text-tertiary)]">Capabilities and learned behaviors</p></div><button class="py-[var(--space-2)] px-[var(--space-4)] rounded-[var(--radius-md,12px)] text-[var(--accent)] border-none cursor-pointer text-[length:var(--text-body)] font-[var(--weight-medium)]" style="background:color-mix(in srgb, var(--accent) 12%, transparent)">+ Create Skill</button></div><div class="text-center p-[var(--space-8)] text-[var(--text-tertiary)] text-[length:var(--text-body)]">Loading...</div></div></div></main></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-e7350efbcf65db9c.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[4874,[\"625\",\"static/chunks/625-93dc90080662b8f4.js\",\"155\",\"static/chunks/155-277bf3022d16e74f.js\",\"177\",\"static/chunks/app/layout-45d8b9cc84f9443f.js\"],\"ClientProviders\"]\n3:I[1015,[],\"\"]\n4:I[3912,[],\"\"]\n5:I[3538,[],\"ClientPageRoot\"]\n6:I[2886,[\"625\",\"static/chunks/625-93dc90080662b8f4.js\",\"51\",\"static/chunks/51-43ce350b707e6b06.js\",\"155\",\"static/chunks/155-277bf3022d16e74f.js\",\"192\",\"static/chunks/192-28e0cb7a172d804d.js\",\"501\",\"static/chunks/app/skills/page-6d9c1d5b03aa86bb.js\"],\"default\"]\n9:I[6862,[],\"OutletBoundary\"]\nb:I[1475,[],\"AsyncMetadataOutlet\"]\nd:I[6862,[],\"ViewportBoundary\"]\nf:I[6862,[],\"MetadataBoundary\"]\n10:\"$Sreact.suspense\"\n12:I[1389,[],\"\"]\n:HL[\"/_next/static/css/92635e77ae2cd8fd.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"er4Sne2nYT8t4rNVzckgy\",\"p\":\"\",\"c\":[\"\",\"skills\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"skills\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/92635e77ae2cd8fd.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"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,9 +1,9 @@
1
1
  1:"$Sreact.fragment"
2
- 2:I[4874,["625","static/chunks/625-93dc90080662b8f4.js","155","static/chunks/155-592ad81a5c00a38a.js","177","static/chunks/app/layout-ab9ba2b24a88513d.js"],"ClientProviders"]
2
+ 2:I[4874,["625","static/chunks/625-93dc90080662b8f4.js","155","static/chunks/155-277bf3022d16e74f.js","177","static/chunks/app/layout-45d8b9cc84f9443f.js"],"ClientProviders"]
3
3
  3:I[1015,[],""]
4
4
  4:I[3912,[],""]
5
5
  5:I[3538,[],"ClientPageRoot"]
6
- 6:I[2886,["625","static/chunks/625-93dc90080662b8f4.js","51","static/chunks/51-ea7256657692ba90.js","155","static/chunks/155-592ad81a5c00a38a.js","192","static/chunks/192-bd69b67fd03b9f3d.js","501","static/chunks/app/skills/page-971feac69b3a1383.js"],"default"]
6
+ 6:I[2886,["625","static/chunks/625-93dc90080662b8f4.js","51","static/chunks/51-43ce350b707e6b06.js","155","static/chunks/155-277bf3022d16e74f.js","192","static/chunks/192-28e0cb7a172d804d.js","501","static/chunks/app/skills/page-6d9c1d5b03aa86bb.js"],"default"]
7
7
  9:I[6862,[],"OutletBoundary"]
8
8
  b:I[1475,[],"AsyncMetadataOutlet"]
9
9
  d:I[6862,[],"ViewportBoundary"]
@@ -11,7 +11,7 @@ f:I[6862,[],"MetadataBoundary"]
11
11
  10:"$Sreact.suspense"
12
12
  12:I[1389,[],""]
13
13
  :HL["/_next/static/css/92635e77ae2cd8fd.css","style"]
14
- 0:{"P":null,"b":"4OBIVkP7CCBmCjhg6p9Id","p":"","c":["","skills"],"i":false,"f":[[["",{"children":["skills",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/92635e77ae2cd8fd.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","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}
14
+ 0:{"P":null,"b":"er4Sne2nYT8t4rNVzckgy","p":"","c":["","skills"],"i":false,"f":[[["",{"children":["skills",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/92635e77ae2cd8fd.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","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
17
  e:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jinn-cli",
3
- "version": "0.7.2",
3
+ "version": "0.7.4",
4
4
  "description": "Lightweight AI gateway daemon orchestrating Claude Code and Codex",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -85,6 +85,27 @@ You manage an organization of AI employees.
85
85
  }
86
86
  ```
87
87
 
88
+ ### Child Session Protocol (Async Notifications)
89
+
90
+ When you delegate to an employee via a child session:
91
+
92
+ 1. **Spawn** the child session (`POST /api/sessions` with `parentSessionId`)
93
+ 2. **Tell the user** what you delegated and to whom
94
+ 3. **End your turn.** Do NOT poll, wait, sleep, or block.
95
+ 4. The gateway automatically notifies you when the employee replies.
96
+ You will receive a notification message like:
97
+ > 📩 Employee "name" replied in session {id}.
98
+ > Read the latest messages: GET /api/sessions/{id}?last=5
99
+ 5. When notified, **read only the latest messages** via the API (use `?last=N`
100
+ to avoid context pollution). Then decide:
101
+ - Send a follow-up (`POST /api/sessions/{id}/message`) → go to step 3
102
+ - Or do nothing — the conversation is complete
103
+ 6. **Never read the full conversation history** on every notification. Only read
104
+ the latest messages relevant to the current round.
105
+
106
+ This protocol applies to ALL employee child sessions, not just specific ones.
107
+ The gateway handles the notification plumbing — you just reply and stop.
108
+
88
109
  ---
89
110
 
90
111
  ## Cron Jobs
@@ -72,6 +72,27 @@ When you receive a task, **always assess whether it requires multiple employees*
72
72
  ### Agent teams for multi-phase tasks
73
73
  When delegating a task with multiple independent phases or sub-tasks to an employee, instruct them in the prompt to use **agent teams** — parallel sub-agents that handle different parts of the work concurrently. Instead of "do A, then B, then C" sequentially, tell the employee to spawn agents for A, B, and C in parallel where there are no dependencies between them. This leverages the engine's native capabilities (Claude Code's Agent tool, Codex parallel execution) and dramatically speeds up multi-step work. Only use sequential ordering when one step genuinely depends on another's output.
74
74
 
75
+ ### Child Session Protocol (Async Notifications)
76
+
77
+ When you delegate to an employee via a child session:
78
+
79
+ 1. **Spawn** the child session (`POST /api/sessions` with `parentSessionId`)
80
+ 2. **Tell the user** what you delegated and to whom
81
+ 3. **End your turn.** Do NOT poll, wait, sleep, or block.
82
+ 4. The gateway automatically notifies you when the employee replies.
83
+ You will receive a notification message like:
84
+ > 📩 Employee "name" replied in session {id}.
85
+ > Read the latest messages: GET /api/sessions/{id}?last=5
86
+ 5. When notified, **read only the latest messages** via the API (use `?last=N`
87
+ to avoid context pollution). Then decide:
88
+ - Send a follow-up (`POST /api/sessions/{id}/message`) → go to step 3
89
+ - Or do nothing — the conversation is complete
90
+ 6. **Never read the full conversation history** on every notification. Only read
91
+ the latest messages relevant to the current round.
92
+
93
+ This protocol applies to ALL employee child sessions, not just specific ones.
94
+ The gateway handles the notification plumbing — you just reply and stop.
95
+
75
96
  ## Cron Jobs
76
97
  Defined in `~/.jinn/cron/jobs.json`. The gateway watches and auto-reloads on changes.
77
98
 
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[492],{3315:(e,t,l)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"default",{enumerable:!0,get:function(){return o}});let r=l(4130),n=l(7791),o=function(){return(0,r.jsx)("html",{children:(0,r.jsx)("body",{children:(0,r.jsx)(n.HTTPAccessErrorFallback,{status:404,message:"This page could not be found."})})})};("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},3762:(e,t,l)=>{(window.__NEXT_P=window.__NEXT_P||[]).push(["/_not-found/page",function(){return l(3315)}])},6026:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"styles",{enumerable:!0,get:function(){return l}});let l={error:{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"},desc:{display:"inline-block"},h1:{display:"inline-block",margin:"0 20px 0 0",padding:"0 23px 0 0",fontSize:24,fontWeight:500,verticalAlign:"top",lineHeight:"49px"},h2:{fontSize:14,fontWeight:400,lineHeight:"49px",margin:0}};("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},7791:(e,t,l)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"HTTPAccessErrorFallback",{enumerable:!0,get:function(){return o}});let r=l(4130),n=l(6026);function o(e){let{status:t,message:l}=e;return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("title",{children:t+": "+l}),(0,r.jsx)("div",{style:n.styles.error,children:(0,r.jsxs)("div",{children:[(0,r.jsx)("style",{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)}}"}}),(0,r.jsx)("h1",{className:"next-error-h1",style:n.styles.h1,children:t}),(0,r.jsx)("div",{style:n.styles.desc,children:(0,r.jsx)("h2",{style:n.styles.h2,children:l})})]})})]})}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)}},e=>{e.O(0,[344,144,358],()=>e(e.s=3762)),_N_E=e.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[271],{4031:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>N});var r=a(4130),n=a(7946),s=a(6654);let l=["Sundays","Mondays","Tuesdays","Wednesdays","Thursdays","Fridays","Saturdays"];function i(e){if(!e||!e.trim())return"";let t=e.trim().split(/\s+/);if(5!==t.length)return e;let[a,r,n,,s]=t;if("*"===a&&"*"===r&&"*"===n&&"*"===s)return"Every minute";if(a.startsWith("*/")&&"*"===r&&"*"===n&&"*"===s){let e=parseInt(a.slice(2),10);if(!isNaN(e))return"Every ".concat(e," minutes")}if("*"!==a&&"*"===r&&"*"===n&&"*"===s)return"Every hour";let i=parseInt(r,10),o=parseInt(a,10);if(isNaN(i)||isNaN(o))return e;let c=0===o?function(e,t){let a=0===t?"":":".concat(String(t).padStart(2,"0"));return"".concat(e%12||12).concat(a," ").concat(e<12?"AM":"PM")}(i,o):"".concat(i%12||12,":").concat(String(o).padStart(2,"0")," ").concat(i<12?"AM":"PM");if(n.startsWith("*/")&&"*"===s){let e=parseInt(n.slice(2),10);if(!isNaN(e))return"Every ".concat(e," days at ").concat(c)}if("*"!==n&&"*"===s){let e=parseInt(n,10);if(!isNaN(e))return"Monthly on the ".concat(e).concat(1===e?"st":2===e?"nd":3===e?"rd":"th"," at ").concat(c)}if("*"===n&&"1-5"===s)return"Weekdays at ".concat(c);if("*"===n){let e=parseInt(s,10);if(!isNaN(e)&&e>=0&&e<=6)return"".concat(l[e]," at ").concat(c)}return"*"===n&&"*"===s?"Daily at ".concat(c):e}var o=a(7192),c=a(8565),d=a(9664),x=a(6063);function u(e){let{className:t,width:a,height:n,style:s,...l}=e;return(0,r.jsx)("div",{className:(0,x.cn)("animate-shimmer rounded-md",t),style:{background:"linear-gradient(90deg, var(--fill-secondary) 25%, var(--fill-tertiary) 50%, var(--fill-secondary) 75%)",backgroundSize:"200% 100%",width:a,height:n,...s},...l})}let v=["Mon","Tue","Wed","Thu","Fri","Sat","Sun"],p=["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],m={1:0,2:1,3:2,4:3,5:4,6:5,0:6};function h(e){let{slot:t,rect:a,containerRect:n}=e,s=t.cron.enabled?"var(--system-green)":"var(--text-tertiary)",l=a.top-n.top-8,o=a.left-n.left+a.width/2;return(0,r.jsxs)("div",{className:"absolute pointer-events-none z-[100] min-w-[200px] max-w-[300px] bg-[var(--material-regular)] border border-[var(--separator)] rounded-[var(--radius-md)] px-[var(--space-4)] py-[var(--space-3)] text-[length:var(--text-caption1)] text-[var(--text-primary)]",style:{top:l,left:o,transform:"translate(-50%, -100%)",boxShadow:"0 8px 24px rgba(0,0,0,0.4), 0 2px 8px rgba(0,0,0,0.2)"},children:[(0,r.jsx)("div",{className:"absolute w-2.5 h-2.5 bg-[var(--material-regular)] border-r border-b border-[var(--separator)]",style:{bottom:-5,left:"50%",transform:"translateX(-50%) rotate(45deg)"}}),(0,r.jsx)("div",{className:"font-bold text-[length:var(--text-footnote)] mb-[var(--space-1)] pl-[var(--space-2)]",style:{borderLeft:"3px solid ".concat(s)},children:t.cron.name}),(0,r.jsx)("div",{className:"text-[var(--text-secondary)] text-[length:var(--text-caption1)] mb-[var(--space-2)]",children:i(t.cron.schedule)}),(0,r.jsx)("div",{className:"font-[family-name:var(--font-mono)] text-[length:var(--text-caption2)] text-[var(--text-tertiary)] mb-[var(--space-2)]",children:t.cron.schedule}),(0,r.jsxs)("div",{className:"flex items-center gap-[var(--space-2)] text-[length:var(--text-caption1)]",children:[(0,r.jsx)("span",{className:"w-[7px] h-[7px] rounded-full shrink-0",style:{background:t.cron.enabled?"var(--system-green)":"var(--text-tertiary)"}}),(0,r.jsx)("span",{className:"font-medium",style:{color:t.cron.enabled?"var(--system-green)":"var(--text-tertiary)"},children:t.cron.enabled?"Enabled":"Disabled"}),t.cron.employee&&(0,r.jsx)("span",{className:"text-[var(--text-tertiary)] ml-[var(--space-1)]",children:t.cron.employee})]})]})}function g(e){let{crons:t}=e,[a,s]=(0,n.useState)(null),l=(0,n.useRef)(null),[o,c]=(0,n.useState)(null),d=(0,n.useCallback)(()=>{l.current&&c(l.current.getBoundingClientRect())},[]);(0,n.useEffect)(()=>{if(d(),l.current)return window.addEventListener("resize",d,{passive:!0}),()=>{window.removeEventListener("resize",d)}},[d]);let{slotsByDayHour:x,activeHours:u}=(0,n.useMemo)(()=>{let e=new Map,a=new Set;for(let r of t){if(!r.enabled)continue;let t=function(e){let t;if(!e||!e.trim())return null;let a=e.trim().split(/\s+/);if(5!==a.length)return null;let[r,n,,,s]=a,l=parseInt(r,10),i=parseInt(n,10);if(isNaN(l)||isNaN(i))return null;if("*"===s)t=[0,1,2,3,4,5,6];else if("1-5"===s)t=[1,2,3,4,5];else if("0-6"===s||"0,1,2,3,4,5,6"===s)t=[0,1,2,3,4,5,6];else if(s.includes(",")){if(0===(t=s.split(",").map(Number).filter(e=>!isNaN(e)&&e>=0&&e<=6)).length)return null}else{let e=parseInt(s,10);if(isNaN(e)||e<0||e>6)return null;t=[e]}return{hour:i,minute:l,days:t}}(r.schedule);if(t)for(let n of t.days){let s=m[n];if(void 0===s)continue;let l="".concat(s,"-").concat(t.hour),i=e.get(l)||[];i.push({cron:r,hour:t.hour,minute:t.minute,col:s}),e.set(l,i),a.add(t.hour)}}for(let[t,a]of e)e.set(t,a.sort((e,t)=>e.minute-t.minute||e.cron.name.localeCompare(t.cron.name)));return{slotsByDayHour:e,activeHours:Array.from(a).sort((e,t)=>e-t)}},[t]),g=new Date,b=m[g.getDay()],f=g.getHours(),y=g.getMinutes()/60,j=(0,n.useMemo)(()=>{let e=new Map;for(let a of u){let r=0;for(let e=0;e<7;e++){var t;let n="".concat(e,"-").concat(a),s=(null==(t=x.get(n))?void 0:t.length)||0;s>r&&(r=s)}e.set(a,r)}return e},[u,x]);return((0,n.useEffect)(()=>{if(!a)return;let e=()=>s(null);return document.addEventListener("click",e),()=>document.removeEventListener("click",e)},[a]),0===u.length)?(0,r.jsxs)("div",{className:"flex flex-col items-center justify-center h-[200px] text-[var(--text-secondary)] gap-[var(--space-2)]",children:[(0,r.jsxs)("svg",{width:"32",height:"32",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",className:"text-[var(--text-tertiary)] mb-[var(--space-2)]",children:[(0,r.jsx)("rect",{x:"3",y:"4",width:"18",height:"18",rx:"2",ry:"2"}),(0,r.jsx)("line",{x1:"16",y1:"2",x2:"16",y2:"6"}),(0,r.jsx)("line",{x1:"8",y1:"2",x2:"8",y2:"6"}),(0,r.jsx)("line",{x1:"3",y1:"10",x2:"21",y2:"10"})]}),(0,r.jsx)("span",{className:"text-[length:var(--text-subheadline)] font-medium",children:"No scheduled jobs to display"}),(0,r.jsx)("span",{className:"text-[length:var(--text-footnote)] text-[var(--text-tertiary)]",children:"Enable some cron jobs to see the weekly schedule"})]}):(0,r.jsxs)("div",{ref:l,className:"relative",onClick:()=>s(null),children:[(0,r.jsxs)("div",{className:"grid grid-cols-[56px_repeat(7,1fr)] bg-[var(--material-regular)] rounded-[var(--radius-md)] border border-[var(--separator)] overflow-hidden",children:[(0,r.jsx)("div",{className:"p-[var(--space-3)_var(--space-2)] border-b border-[var(--separator)] bg-[var(--material-thick)]"}),v.map((e,t)=>{let a=t===b;return(0,r.jsxs)("div",{className:"relative p-[var(--space-3)_var(--space-2)] text-center border-b border-l border-[var(--separator)]",style:{background:a?"var(--accent-fill)":"var(--material-thick)"},children:[(0,r.jsx)("div",{title:p[t],className:"text-[length:var(--text-footnote)] tracking-[0.02em]",style:{fontWeight:a?700:600,color:a?"var(--accent)":"var(--text-primary)"},children:e}),a&&(0,r.jsx)("div",{className:"absolute -bottom-[3px] left-1/2 -translate-x-1/2 w-1.5 h-1.5 rounded-full bg-[var(--accent)] z-[2]"})]},e)}),u.map((e,t)=>{let n=j.get(e)||1,l=8+28*n+(n-1)*4,o=e===f,c=t===u.length-1;return(0,r.jsxs)("div",{className:"contents",children:[(0,r.jsx)("div",{className:"p-[var(--space-2)] flex items-start justify-end relative",style:{borderBottom:c?"none":"1px solid var(--separator)",minHeight:l,background:o?"var(--accent-fill)":void 0},children:(0,r.jsx)("span",{className:"text-[length:var(--text-caption1)] font-[family-name:var(--font-mono)] leading-[1.2] whitespace-nowrap pt-0.5",style:{color:o?"var(--accent)":"var(--text-tertiary)",fontWeight:o?600:400},title:0===e||24===e?"12 AM":12===e?"12 PM":e<12?"".concat(e," AM"):"".concat(e-12," PM"),children:0===e||24===e?"12a":12===e?"12p":e<12?"".concat(e,"a"):"".concat(e-12,"p")})}),Array.from({length:7},(t,n)=>{let u="".concat(n,"-").concat(e),v=x.get(u)||[],p=n===b,m=p&&o;return(0,r.jsxs)("div",{className:"flex flex-col relative border-l border-[var(--separator)]",style:{padding:"".concat(4,"px 4px"),borderBottom:c?"none":"1px solid var(--separator)",minHeight:l,gap:4,background:m?"color-mix(in srgb, var(--accent) 6%, transparent)":p?"color-mix(in srgb, var(--accent) 3%, transparent)":void 0},children:[m&&(0,r.jsx)("div",{className:"absolute left-0 right-0 h-0.5 bg-[var(--system-red)] opacity-80 z-[3] rounded-[1px]",style:{top:"".concat((100*y).toFixed(1),"%")}}),v.map((e,t)=>{let n=e.cron.enabled?"var(--system-green)":"var(--text-tertiary)",l=(null==a?void 0:a.slot.cron.id)===e.cron.id&&(null==a?void 0:a.slot.col)===e.col&&(null==a?void 0:a.slot.hour)===e.hour;return(0,r.jsxs)("button",{type:"button",title:"".concat(e.cron.name," - ").concat(i(e.cron.schedule)),onClick:t=>{t.stopPropagation();let a=t.currentTarget.getBoundingClientRect();d(),l?s(null):s({slot:e,rect:a})},onMouseEnter:t=>(function(e,t){let a=t.currentTarget.getBoundingClientRect();d(),s({slot:e,rect:a})})(e,t),onMouseLeave:()=>s(null),className:"flex items-center gap-[5px] px-1.5 rounded-[var(--radius-sm)] border-none cursor-pointer w-full min-w-0 text-left relative overflow-hidden transition-[background,box-shadow] duration-150 ease-in-out",style:{height:28,background:l?"color-mix(in srgb, ".concat(n," 25%, transparent)"):"color-mix(in srgb, ".concat(n," 12%, transparent)"),borderLeft:"3px solid ".concat(n),boxShadow:l?"0 0 0 1px color-mix(in srgb, ".concat(n," 40%, transparent)"):"none"},children:[(0,r.jsx)("span",{className:"w-1.5 h-1.5 rounded-full shrink-0",style:{background:e.cron.enabled?"var(--system-green)":"var(--text-tertiary)"}}),(0,r.jsx)("span",{className:"text-[length:var(--text-caption2)] font-[family-name:var(--font-mono)] text-[var(--text-tertiary)] shrink-0 leading-none",children:":".concat(String(e.minute).padStart(2,"0"))}),(0,r.jsx)("span",{className:"text-[length:var(--text-caption2)] font-semibold overflow-hidden text-ellipsis whitespace-nowrap min-w-0 flex-1 leading-none",style:{color:n},children:e.cron.name})]},"".concat(u,"-").concat(t))}),0===v.length&&(0,r.jsx)("div",{className:"flex-1"})]},u)})]},e)})]}),a&&o&&(0,r.jsx)(h,{slot:a.slot,rect:a.rect,containerRect:o})]})}function b(e){let{crons:t}=e;if(0===t.length)return(0,r.jsxs)("div",{className:"bg-[var(--material-regular)] border border-[var(--separator)] rounded-[var(--radius-md)] px-6 py-8 text-center",children:[(0,r.jsx)("div",{className:"text-sm font-bold text-[var(--text-primary)] mb-2",children:"No cron jobs configured"}),(0,r.jsx)("div",{className:"text-xs text-[var(--text-secondary)] max-w-[480px] mx-auto leading-[1.6]",children:"Cron jobs will appear here as cards once configured."})]});let a=t.filter(e=>e.enabled),n=t.filter(e=>!e.enabled);return(0,r.jsxs)("div",{children:[a.length>0&&(0,r.jsx)(f,{crons:a,label:"Enabled"}),n.length>0&&(0,r.jsx)(f,{crons:n,label:"Disabled"})]})}function f(e){let{crons:t,label:a}=e;return(0,r.jsxs)("div",{className:"mb-6",children:[(0,r.jsxs)("div",{className:"text-[13px] font-bold text-[var(--text-secondary)] mb-3",children:[a," (",t.length,")"]}),(0,r.jsx)("div",{className:"grid grid-cols-[repeat(auto-fill,minmax(220px,1fr))] gap-2.5",children:t.map(e=>{let t=e.enabled?"var(--system-green)":"var(--text-tertiary)";return(0,r.jsxs)("div",{className:"bg-[var(--material-regular)] rounded-[var(--radius-md)] border border-[var(--separator)] px-3.5 py-2.5",style:{borderLeft:"3px solid ".concat(t)},children:[(0,r.jsxs)("div",{className:"flex items-center gap-1.5 mb-1",children:[(0,r.jsx)("div",{className:"w-[7px] h-[7px] rounded-full shrink-0 ".concat(e.enabled?"bg-[var(--system-green)]":"bg-[var(--text-tertiary)]")}),(0,r.jsx)("div",{className:"text-xs font-semibold text-[var(--text-primary)] whitespace-nowrap overflow-hidden text-ellipsis",children:e.name})]}),(0,r.jsx)("div",{className:"text-[10px] text-[var(--text-secondary)] mb-0.5",children:i(e.schedule)}),(0,r.jsx)("div",{className:"text-[10px] font-[var(--font-mono)] text-[var(--text-tertiary)] mb-1",children:e.schedule}),(0,r.jsxs)("div",{className:"flex flex-wrap gap-1",children:[e.employee&&(0,r.jsx)("span",{className:"inline-block text-[9px] px-1.5 py-px rounded text-[var(--system-blue)]",style:{background:"color-mix(in srgb, var(--system-blue) 15%, transparent)"},children:e.employee}),e.engine&&(0,r.jsx)("span",{className:"inline-block text-[9px] px-1.5 py-px rounded bg-[var(--fill-tertiary)] text-[var(--text-tertiary)]",children:e.engine})]})]},e.id)})})]})}function y(e){if(!e)return"never";let t=new Date(e);if(isNaN(t.getTime()))return"—";let a=Date.now()-t.getTime(),r=Math.floor(a/6e4),n=Math.floor(a/36e5),s=Math.floor(a/864e5);return r<1?"just now":r<60?"".concat(r,"m ago"):n<24?"".concat(n,"h ago"):"".concat(s,"d ago")}function j(e){let{jobId:t}=e,[a,l]=(0,n.useState)(null),[i,o]=(0,n.useState)(!0);return((0,n.useEffect)(()=>{s.F.getCronRuns(t).then(e=>{l(e.slice(0,5)),o(!1)}).catch(()=>{l([]),o(!1)})},[t]),i)?(0,r.jsxs)("div",{className:"mt-[var(--space-3)]",children:[(0,r.jsx)("div",{className:"text-[length:var(--text-caption1)] text-[var(--text-tertiary)] font-semibold mb-[var(--space-2)]",children:"Recent Runs"}),[1,2,3].map(e=>(0,r.jsx)(u,{className:"h-4 mb-1 w-4/5"},e))]}):a&&0!==a.length?(0,r.jsxs)("div",{className:"mt-[var(--space-3)]",children:[(0,r.jsx)("div",{className:"text-[length:var(--text-caption1)] text-[var(--text-tertiary)] font-semibold mb-[var(--space-2)]",children:"Recent Runs"}),(0,r.jsx)("div",{className:"flex flex-col gap-1",children:a.map((e,t)=>{let a=e.ts||e.startedAt||"",n=e.status||"unknown",s=y(a),l=null!=e.durationMs?function(e){if(e<0||!Number.isFinite(e))return"—";let t=Math.round(e/1e3);if(t<60)return"".concat(t,"s");let a=Math.floor(t/60),r=t%60;if(a<60)return r>0?"".concat(a,"m ").concat(r,"s"):"".concat(a,"m");let n=Math.floor(a/60);return"".concat(n,"h ").concat(a%60,"m")}(e.durationMs):"—";return(0,r.jsxs)("div",{className:"flex items-center gap-[var(--space-2)] text-[length:var(--text-caption2)] min-h-[22px] py-0.5",children:[(0,r.jsx)("span",{className:"w-1.5 h-1.5 rounded-full shrink-0",style:{background:"success"===n||"ok"===n?"var(--system-green)":"error"===n||"failed"===n?"var(--system-red)":"var(--text-tertiary)"}}),(0,r.jsx)("span",{className:"text-[var(--text-tertiary)] min-w-[52px] shrink-0",children:s}),(0,r.jsx)("span",{className:"text-[var(--text-secondary)] min-w-[52px] shrink-0",children:l}),(0,r.jsx)("span",{className:"text-[var(--text-secondary)] capitalize",children:n}),e.error&&(0,r.jsx)("span",{className:"truncate text-[var(--system-red)] min-w-0 flex-1",children:e.error})]},"".concat(a,"-").concat(t))})})]}):(0,r.jsxs)("div",{className:"mt-[var(--space-3)]",children:[(0,r.jsx)("div",{className:"text-[length:var(--text-caption1)] text-[var(--text-tertiary)] font-semibold mb-[var(--space-2)]",children:"Recent Runs"}),(0,r.jsx)("div",{className:"text-[length:var(--text-caption2)] text-[var(--text-tertiary)]",children:"No run history"})]})}function N(){(0,c.i)([{label:"Cron"}]);let[e,t]=(0,n.useState)([]),[a,l]=(0,n.useState)(!0),[x,v]=(0,n.useState)(null),[p,m]=(0,n.useState)("all"),[h,f]=(0,n.useState)(null),[N,k]=(0,n.useState)("just now"),[M,C]=(0,n.useState)(new Date),[S,E]=(0,n.useState)(null),I=(0,n.useCallback)(()=>{v(null),s.F.getCronJobs().then(e=>{t(e),C(new Date)}).catch(e=>v(e instanceof Error?e.message:"Unknown error")).finally(()=>l(!1))},[]);(0,n.useEffect)(()=>{I();let e=setInterval(I,6e4);return()=>clearInterval(e)},[I]),(0,n.useEffect)(()=>{let e=()=>k(y(M.toISOString()));e();let t=setInterval(e,3e4);return()=>clearInterval(t)},[M]);let R=e.filter(e=>e.enabled).length,D=e.filter(e=>!e.enabled).length,T=e.filter(e=>"enabled"===p?e.enabled:"disabled"!==p||!e.enabled);return(0,r.jsx)(o.M,{children:(0,r.jsxs)("div",{className:"h-full flex flex-col overflow-hidden bg-[var(--bg)]",children:[(0,r.jsx)("header",{className:"flex-shrink-0 bg-[var(--material-regular)] border-b border-[var(--separator)] px-[var(--space-6)] py-[var(--space-4)]",children:(0,r.jsxs)("div",{className:"flex items-center justify-between",children:[(0,r.jsxs)("div",{children:[(0,r.jsx)("h1",{className:"text-[length:var(--text-title1)] font-bold text-[var(--text-primary)] tracking-tight leading-[1.2]",children:"Cron Jobs"}),!a&&(0,r.jsxs)("p",{className:"text-[length:var(--text-footnote)] text-[var(--text-secondary)] mt-[var(--space-1)]",children:[e.length," total \xb7 ",R," enabled \xb7 ",D," disabled"]})]}),(0,r.jsx)(o.v,{children:(0,r.jsxs)("div",{className:"flex items-center gap-[var(--space-3)]",children:[(0,r.jsxs)("span",{className:"text-[length:var(--text-caption1)] text-[var(--text-tertiary)]",children:["Updated ",N]}),(0,r.jsx)("button",{onClick:I,"aria-label":"Refresh cron data",className:"w-8 h-8 flex items-center justify-center rounded-[var(--radius-sm)] border-none bg-transparent text-[var(--text-tertiary)] cursor-pointer",children:(0,r.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,r.jsx)("path",{d:"M21 2v6h-6"}),(0,r.jsx)("path",{d:"M3 12a9 9 0 0 1 15-6.7L21 8"}),(0,r.jsx)("path",{d:"M3 22v-6h6"}),(0,r.jsx)("path",{d:"M21 12a9 9 0 0 1-15 6.7L3 16"})]})})]})})]})}),(0,r.jsx)("div",{className:"flex-1 overflow-y-auto px-[var(--space-6)] pt-[var(--space-4)] pb-[var(--space-6)]",children:x&&0===e.length?(0,r.jsxs)("div",{className:"bg-[rgba(255,69,58,0.06)] border border-[var(--system-red)] rounded-[var(--radius-md)] p-[var(--space-4)] text-[var(--system-red)] text-[length:var(--text-footnote)] mb-[var(--space-4)]",children:["Failed to load cron jobs: ",x,(0,r.jsx)("button",{onClick:I,className:"ml-[var(--space-3)] underline bg-none border-none text-inherit cursor-pointer text-[length:inherit]",children:"Retry"})]}):a?(0,r.jsxs)("div",{children:[(0,r.jsx)("div",{className:"grid grid-cols-3 gap-[var(--space-3)] mb-[var(--space-4)]",children:[1,2,3].map(e=>(0,r.jsxs)("div",{className:"bg-[var(--material-regular)] border border-[var(--separator)] rounded-[var(--radius-md)] p-[var(--space-4)]",children:[(0,r.jsx)(u,{className:"w-[60px] h-2.5 mb-2"}),(0,r.jsx)(u,{className:"w-20 h-3.5"})]},e))}),[1,2,3,4].map(e=>(0,r.jsx)(u,{className:"h-12 mb-1 rounded-[var(--radius-sm)]"},e))]}):(0,r.jsxs)(d.tU,{defaultValue:"overview",children:[(0,r.jsxs)(d.j7,{variant:"line",children:[(0,r.jsx)(d.Xi,{value:"overview",children:"Overview"}),(0,r.jsx)(d.Xi,{value:"schedule",children:"Schedule"}),(0,r.jsx)(d.Xi,{value:"pipelines",children:"Pipelines"})]}),(0,r.jsxs)(d.av,{value:"overview",children:[(0,r.jsxs)("div",{className:"grid grid-cols-3 gap-[var(--space-3)] mb-[var(--space-4)] mt-[var(--space-4)]",children:[(0,r.jsx)(w,{label:"Total Jobs",value:e.length}),(0,r.jsx)(w,{label:"Enabled",value:R,color:"var(--system-green)"}),(0,r.jsx)(w,{label:"Disabled",value:D,color:"var(--text-tertiary)"})]}),(0,r.jsx)("div",{className:"flex items-center gap-[var(--space-2)] mb-[var(--space-3)]",children:["all","enabled","disabled"].map(t=>{let a=p===t,n="all"===t?e.length:"enabled"===t?R:D;return(0,r.jsxs)("button",{onClick:()=>m(t),className:"rounded-[20px] px-3.5 py-1.5 text-[length:var(--text-footnote)] font-medium border-none cursor-pointer transition-all duration-200 ease-in-out",style:{background:a?"var(--accent-fill)":"var(--fill-secondary)",color:a?"var(--accent)":"var(--text-primary)"},children:[t.charAt(0).toUpperCase()+t.slice(1)," (",n,")"]},t)})}),0===T.length?(0,r.jsxs)("div",{className:"flex flex-col items-center justify-center h-[200px] text-[var(--text-secondary)] gap-[var(--space-2)]",children:[(0,r.jsxs)("svg",{width:"32",height:"32",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",className:"text-[var(--text-tertiary)] mb-[var(--space-2)]",children:[(0,r.jsx)("circle",{cx:"12",cy:"12",r:"10"}),(0,r.jsx)("polyline",{points:"12 6 12 12 16 14"})]}),(0,r.jsx)("span",{className:"text-[length:var(--text-subheadline)] font-medium",children:0===e.length?"No cron jobs configured":"No jobs match this filter"})]}):(0,r.jsx)("div",{className:"rounded-[var(--radius-md)] overflow-hidden bg-[var(--material-regular)] border border-[var(--separator)]",children:T.map((e,a)=>{let n=h===e.id;return(0,r.jsxs)("div",{children:[a>0&&(0,r.jsx)("div",{className:"h-px bg-[var(--separator)] mx-[var(--space-4)]"}),(0,r.jsxs)("div",{role:"button",tabIndex:0,"aria-expanded":n,onClick:()=>f(n?null:e.id),onKeyDown:t=>{("Enter"===t.key||" "===t.key)&&(t.preventDefault(),f(n?null:e.id))},className:"flex items-center cursor-pointer min-h-[48px] px-[var(--space-4)] transition-[background] duration-150 ease-in-out",style:{borderLeft:"3px solid ".concat(e.enabled?"var(--system-green)":"transparent")},onMouseEnter:e=>{e.currentTarget.style.background="var(--fill-secondary)"},onMouseLeave:e=>{e.currentTarget.style.background=""},children:[(0,r.jsx)("span",{className:"w-2 h-2 rounded-full shrink-0",style:{background:e.enabled?"var(--system-green)":"var(--text-tertiary)"}}),(0,r.jsxs)("div",{className:"min-w-0 flex-1 ml-3 flex flex-col",children:[(0,r.jsx)("span",{className:"truncate text-[length:var(--text-footnote)] font-semibold text-[var(--text-primary)]",children:e.name}),(0,r.jsx)("span",{className:"text-[length:var(--text-caption1)] text-[var(--text-tertiary)]",children:i(e.schedule)})]}),(0,r.jsxs)("div",{className:"flex items-center shrink-0 gap-[var(--space-2)] ml-auto",children:[e.employee&&(0,r.jsx)("span",{className:"text-[length:var(--text-caption1)] px-2 py-px rounded-xl bg-[color-mix(in_srgb,var(--system-blue)_15%,transparent)] text-[var(--system-blue)]",children:e.employee}),e.engine&&(0,r.jsx)("span",{className:"text-[length:var(--text-caption1)] px-2 py-px rounded-xl bg-[var(--fill-tertiary)] text-[var(--text-tertiary)]",children:e.engine}),(0,r.jsx)("button",{onClick:a=>{a.stopPropagation();let r=!e.enabled;s.F.updateCronJob(e.id,{enabled:r}).then(()=>{t(t=>t.map(t=>t.id===e.id?{...t,enabled:r}:t))}).catch(()=>{})},"aria-label":e.enabled?"Disable job":"Enable job",className:"relative inline-flex items-center w-9 h-5 rounded-[10px] border-none cursor-pointer shrink-0 transition-[background] duration-200 ease-in-out",style:{background:e.enabled?"var(--system-green)":"var(--fill-tertiary)"},children:(0,r.jsx)("span",{className:"block w-3.5 h-3.5 rounded-full bg-white transition-transform duration-200 ease-in-out",style:{transform:e.enabled?"translateX(18px)":"translateX(3px)"}})}),(0,r.jsx)("span",{className:"text-[length:var(--text-footnote)] text-[var(--text-tertiary)] transition-transform duration-200 ease-in-out inline-block",style:{transform:n?"rotate(90deg)":"rotate(0deg)"},children:"›"})]})]}),n&&(0,r.jsxs)("div",{className:"px-[var(--space-4)] pb-[var(--space-4)] ml-[3px]",children:[(0,r.jsxs)("div",{className:"grid grid-cols-[auto_1fr] gap-x-[var(--space-4)] gap-y-[var(--space-1)] mt-[var(--space-2)] mb-[var(--space-3)]",children:[(0,r.jsx)("span",{className:"text-[length:var(--text-caption1)] text-[var(--text-tertiary)]",children:"Schedule"}),(0,r.jsxs)("div",{children:[(0,r.jsx)("div",{className:"text-[length:var(--text-caption1)] text-[var(--text-secondary)]",children:i(e.schedule)}),(0,r.jsxs)("div",{className:"text-[length:var(--text-caption2)] font-[family-name:var(--font-mono)] text-[var(--text-tertiary)] mt-0.5",children:[e.schedule,e.timezone&&(0,r.jsxs)("span",{className:"ml-2",children:["(",e.timezone,")"]})]})]}),(0,r.jsx)("span",{className:"text-[length:var(--text-caption1)] text-[var(--text-tertiary)]",children:"Status"}),(0,r.jsx)("span",{className:"text-[length:var(--text-caption1)] font-medium",style:{color:e.enabled?"var(--system-green)":"var(--text-tertiary)"},children:e.enabled?"Enabled":"Disabled"}),e.engine&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("span",{className:"text-[length:var(--text-caption1)] text-[var(--text-tertiary)]",children:"Engine"}),(0,r.jsx)("span",{className:"text-[length:var(--text-caption1)] text-[var(--text-secondary)]",children:e.engine})]}),e.model&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("span",{className:"text-[length:var(--text-caption1)] text-[var(--text-tertiary)]",children:"Model"}),(0,r.jsx)("span",{className:"text-[length:var(--text-caption1)] text-[var(--text-secondary)] font-[family-name:var(--font-mono)]",children:e.model})]}),e.employee&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("span",{className:"text-[length:var(--text-caption1)] text-[var(--text-tertiary)]",children:"Employee"}),(0,r.jsx)("span",{className:"text-[length:var(--text-caption1)] text-[var(--text-secondary)]",children:e.employee})]})]}),(0,r.jsx)("div",{className:"mb-[var(--space-3)]",children:(0,r.jsx)("button",{onClick:t=>{t.stopPropagation(),E(e.id),s.F.triggerCronJob(e.id).then(()=>{setTimeout(I,2e3)}).catch(()=>{}).finally(()=>{setTimeout(()=>E(null),2e3)})},disabled:S===e.id,className:"inline-flex items-center gap-1.5 px-3.5 py-1.5 rounded-[var(--radius-sm)] border border-[var(--separator)] text-[length:var(--text-caption1)] font-semibold transition-all duration-200 ease-in-out",style:{background:S===e.id?"var(--fill-tertiary)":"var(--material-regular)",color:S===e.id?"var(--system-green)":"var(--text-secondary)",cursor:S===e.id?"default":"pointer"},children:S===e.id?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("span",{className:"text-sm",children:"✓"}),"Triggered"]}):(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"currentColor",stroke:"none",children:(0,r.jsx)("polygon",{points:"5,3 19,12 5,21"})}),"Run Now"]})})}),(0,r.jsx)(j,{jobId:e.id})]})]},e.id)})})]}),(0,r.jsx)(d.av,{value:"schedule",children:(0,r.jsx)("div",{className:"mt-[var(--space-4)]",children:(0,r.jsx)(g,{crons:e})})}),(0,r.jsx)(d.av,{value:"pipelines",children:(0,r.jsx)("div",{className:"mt-[var(--space-4)]",children:(0,r.jsx)(b,{crons:e})})})]})})]})})}function w(e){let{label:t,value:a,color:n}=e;return(0,r.jsxs)("div",{className:"bg-[var(--material-regular)] border border-[var(--separator)] rounded-[var(--radius-md)] p-[var(--space-4)]",children:[(0,r.jsx)("div",{className:"text-[length:var(--text-caption1)] text-[var(--text-tertiary)] font-medium mb-[var(--space-1)]",children:t}),(0,r.jsx)("div",{className:"text-[length:var(--text-title2)] font-bold",style:{color:n||"var(--text-primary)"},children:a})]})}},7382:(e,t,a)=>{Promise.resolve().then(a.bind(a,4031))},9664:(e,t,a)=>{"use strict";a.d(t,{tU:()=>R,av:()=>L,j7:()=>T,Xi:()=>F});var r=a(4130),n=a(7946),s=a(4322),l=a(3397),i=a(5773),o=a(9458),c=a(4127),d=a(5822),x=a(7058),u=a(4068),v=a(5380),p="Tabs",[m,h]=(0,i.A)(p,[o.RG]),g=(0,o.RG)(),[b,f]=m(p),y=n.forwardRef((e,t)=>{let{__scopeTabs:a,value:n,onValueChange:s,defaultValue:l,orientation:i="horizontal",dir:o,activationMode:c="automatic",...m}=e,h=(0,x.jH)(o),[g,f]=(0,u.i)({prop:n,onChange:s,defaultProp:null!=l?l:"",caller:p});return(0,r.jsx)(b,{scope:a,baseId:(0,v.B)(),value:g,onValueChange:f,orientation:i,dir:h,activationMode:c,children:(0,r.jsx)(d.sG.div,{dir:h,"data-orientation":i,...m,ref:t})})});y.displayName=p;var j="TabsList",N=n.forwardRef((e,t)=>{let{__scopeTabs:a,loop:n=!0,...s}=e,l=f(j,a),i=g(a);return(0,r.jsx)(o.bL,{asChild:!0,...i,orientation:l.orientation,dir:l.dir,loop:n,children:(0,r.jsx)(d.sG.div,{role:"tablist","aria-orientation":l.orientation,...s,ref:t})})});N.displayName=j;var w="TabsTrigger",k=n.forwardRef((e,t)=>{let{__scopeTabs:a,value:n,disabled:s=!1,...i}=e,c=f(w,a),x=g(a),u=S(c.baseId,n),v=E(c.baseId,n),p=n===c.value;return(0,r.jsx)(o.q7,{asChild:!0,...x,focusable:!s,active:p,children:(0,r.jsx)(d.sG.button,{type:"button",role:"tab","aria-selected":p,"aria-controls":v,"data-state":p?"active":"inactive","data-disabled":s?"":void 0,disabled:s,id:u,...i,ref:t,onMouseDown:(0,l.mK)(e.onMouseDown,e=>{s||0!==e.button||!1!==e.ctrlKey?e.preventDefault():c.onValueChange(n)}),onKeyDown:(0,l.mK)(e.onKeyDown,e=>{[" ","Enter"].includes(e.key)&&c.onValueChange(n)}),onFocus:(0,l.mK)(e.onFocus,()=>{let e="manual"!==c.activationMode;p||s||!e||c.onValueChange(n)})})})});k.displayName=w;var M="TabsContent",C=n.forwardRef((e,t)=>{let{__scopeTabs:a,value:s,forceMount:l,children:i,...o}=e,x=f(M,a),u=S(x.baseId,s),v=E(x.baseId,s),p=s===x.value,m=n.useRef(p);return n.useEffect(()=>{let e=requestAnimationFrame(()=>m.current=!1);return()=>cancelAnimationFrame(e)},[]),(0,r.jsx)(c.C,{present:l||p,children:a=>{let{present:n}=a;return(0,r.jsx)(d.sG.div,{"data-state":p?"active":"inactive","data-orientation":x.orientation,role:"tabpanel","aria-labelledby":u,hidden:!n,id:v,tabIndex:0,...o,ref:t,style:{...e.style,animationDuration:m.current?"0s":void 0},children:n&&i})}})});function S(e,t){return"".concat(e,"-trigger-").concat(t)}function E(e,t){return"".concat(e,"-content-").concat(t)}C.displayName=M;var I=a(6063);function R(e){let{className:t,orientation:a="horizontal",...n}=e;return(0,r.jsx)(y,{"data-slot":"tabs","data-orientation":a,orientation:a,className:(0,I.cn)("group/tabs flex gap-2 data-[orientation=horizontal]:flex-col",t),...n})}let D=(0,s.F)("rounded-lg p-[3px] group-data-[orientation=horizontal]/tabs:h-9 data-[variant=line]:rounded-none group/tabs-list text-muted-foreground inline-flex w-fit items-center justify-center group-data-[orientation=vertical]/tabs:h-fit group-data-[orientation=vertical]/tabs:flex-col",{variants:{variant:{default:"bg-muted",line:"gap-1 bg-transparent"}},defaultVariants:{variant:"default"}});function T(e){let{className:t,variant:a="default",...n}=e;return(0,r.jsx)(N,{"data-slot":"tabs-list","data-variant":a,className:(0,I.cn)(D({variant:a}),t),...n})}function F(e){let{className:t,...a}=e;return(0,r.jsx)(k,{"data-slot":"tabs-trigger",className:(0,I.cn)("focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring text-foreground/60 hover:text-foreground dark:text-muted-foreground dark:hover:text-foreground relative inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap transition-all group-data-[orientation=vertical]/tabs:w-full group-data-[orientation=vertical]/tabs:justify-start focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 group-data-[variant=default]/tabs-list:data-[state=active]:shadow-sm group-data-[variant=line]/tabs-list:data-[state=active]:shadow-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4","group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent dark:group-data-[variant=line]/tabs-list:data-[state=active]:border-transparent dark:group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent","data-[state=active]:bg-background dark:data-[state=active]:text-foreground dark:data-[state=active]:border-input dark:data-[state=active]:bg-input/30 data-[state=active]:text-foreground","after:bg-foreground after:absolute after:opacity-0 after:transition-opacity group-data-[orientation=horizontal]/tabs:after:inset-x-0 group-data-[orientation=horizontal]/tabs:after:bottom-[-5px] group-data-[orientation=horizontal]/tabs:after:h-0.5 group-data-[orientation=vertical]/tabs:after:inset-y-0 group-data-[orientation=vertical]/tabs:after:-right-1 group-data-[orientation=vertical]/tabs:after:w-0.5 group-data-[variant=line]/tabs-list:data-[state=active]:after:opacity-100",t),...a})}function L(e){let{className:t,...a}=e;return(0,r.jsx)(C,{"data-slot":"tabs-content",className:(0,I.cn)("flex-1 outline-none",t),...a})}}},e=>{e.O(0,[625,51,458,155,192,344,144,358],()=>e(e.s=7382)),_N_E=e.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[501],{2886:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>h});var r=a(4130),l=a(7946),s=a(6654);let n={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;"},i=/[&<>"']/g,o=[{name:"h4",pattern:/^#### (.+)$/gm,replacement:'<h4 class="text-[15px] font-semibold" style="color:var(--text-primary);margin-top:1rem;margin-bottom:0.25rem">$1</h4>'},{name:"h3",pattern:/^### (.+)$/gm,replacement:'<h3 class="text-[17px] font-semibold" style="color:var(--text-primary);margin-top:1.25rem;margin-bottom:0.375rem">$1</h3>'},{name:"h2",pattern:/^## (.+)$/gm,replacement:'<h2 class="text-[22px] font-semibold" style="color:var(--text-primary);margin-top:1.5rem;margin-bottom:0.5rem;padding-bottom:0.25rem;border-bottom:1px solid var(--separator)">$1</h2>'},{name:"h1",pattern:/^# (.+)$/gm,replacement:'<h1 class="text-[28px] font-bold" style="color:var(--text-primary);margin-top:1rem;margin-bottom:0.75rem">$1</h1>'},{name:"bold",pattern:/\*\*(.+?)\*\*/g,replacement:'<strong class="font-semibold" style="color:var(--text-primary)">$1</strong>'},{name:"inline-code",pattern:/`([^`]+)`/g,replacement:'<code style="background:var(--fill-secondary);color:var(--accent);padding:2px 6px;border-radius:6px;font-size:13px;font-family:var(--font-mono)">$1</code>'},{name:"unordered-list",pattern:/^- (.+)$/gm,replacement:'<li class="ml-4 text-[15px] leading-[1.7] list-disc" style="color:var(--text-secondary)">$1</li>'},{name:"ordered-list",pattern:/^(\d+)\. (.+)$/gm,replacement:'<li class="ml-4 text-[15px] leading-[1.7] list-decimal" style="color:var(--text-secondary)">$2</li>'},{name:"paragraph-break",pattern:/\n{2,}/g,replacement:'</p><p class="mb-3" style="color:var(--text-secondary)">'},{name:"line-break",pattern:/\n/g,replacement:"<br/>"}];var c=a(7192),d=a(8565),x=a(3637),m=a(7632),p=a(6088),v=a(4722);function h(){var e,t;(0,d.i)([{label:"Skills"}]);let{settings:a}=(0,v.t0)(),h=null!=(e=a.portalName)?e:"Jinn",[g,u]=(0,l.useState)([]),[y,b]=(0,l.useState)(!0),[f,j]=(0,l.useState)(null),[N,k]=(0,l.useState)(null),[w,S]=(0,l.useState)(null),[$,C]=(0,l.useState)(!1),[_,E]=(0,l.useState)(!1);return(0,l.useEffect)(()=>{s.F.getSkills().then(e=>u(e)).catch(e=>j(e.message)).finally(()=>b(!1))},[]),(0,r.jsx)(c.M,{children:(0,r.jsxs)("div",{className:"h-full overflow-y-auto p-[var(--space-6)]",children:[(0,r.jsxs)("div",{className:"flex items-center justify-between mb-[var(--space-6)]",children:[(0,r.jsxs)("div",{children:[(0,r.jsx)("h2",{className:"text-[length:var(--text-title2)] font-[var(--weight-bold)] text-[var(--text-primary)] mb-[var(--space-1)]",children:"Skills"}),(0,r.jsx)("p",{className:"text-[length:var(--text-body)] text-[var(--text-tertiary)]",children:"Capabilities and learned behaviors"})]}),(0,r.jsx)("button",{onClick:()=>alert("To create a new skill, chat with ".concat(h," and ask to learn something new.")),className:"py-[var(--space-2)] px-[var(--space-4)] rounded-[var(--radius-md,12px)] text-[var(--accent)] border-none cursor-pointer text-[length:var(--text-body)] font-[var(--weight-medium)]",style:{background:"color-mix(in srgb, var(--accent) 12%, transparent)"},children:"+ Create Skill"})]}),f&&(0,r.jsxs)("div",{className:"mb-[var(--space-4)] rounded-[var(--radius-md,12px)] py-[var(--space-3)] px-[var(--space-4)] text-[length:var(--text-body)] text-[var(--system-red)]",style:{background:"color-mix(in srgb, var(--system-red) 10%, transparent)",border:"1px solid color-mix(in srgb, var(--system-red) 30%, transparent)"},children:["Failed to load skills: ",f]}),y?(0,r.jsx)("div",{className:"text-center p-[var(--space-8)] text-[var(--text-tertiary)] text-[length:var(--text-body)]",children:"Loading..."}):0!==g.length||f?(0,r.jsx)("div",{className:"grid grid-cols-[repeat(auto-fill,minmax(220px,1fr))] gap-[var(--space-4)]",children:g.map(e=>(0,r.jsx)(x.Zp,{className:"py-4 cursor-pointer transition-colors hover:border-[var(--accent)]",onClick:()=>{k(e),E(!0),C(!0),s.F.getSkill(e.name).then(e=>{S(e.content||e.skillMd||JSON.stringify(e,null,2))}).catch(()=>S("Failed to load skill content")).finally(()=>C(!1))},children:(0,r.jsxs)(x.Wu,{className:"flex flex-col gap-3",children:[(0,r.jsx)("div",{className:"w-10 h-10 rounded-[var(--radius-md,12px)] flex items-center justify-center text-[var(--system-yellow)]",style:{background:"color-mix(in srgb, var(--system-yellow) 12%, transparent)"},children:(0,r.jsx)(p.A,{size:20})}),(0,r.jsxs)("div",{children:[(0,r.jsx)("p",{className:"text-[length:var(--text-body)] font-[var(--weight-semibold)] text-[var(--text-primary)] mb-0.5",children:e.name}),(0,r.jsx)("p",{className:"text-[length:var(--text-caption1)] text-[var(--text-tertiary)] line-clamp-2",children:e.description||"No description"})]})]})},e.name))}):(0,r.jsx)(x.Zp,{children:(0,r.jsx)(x.Wu,{children:(0,r.jsxs)("div",{className:"text-center p-[var(--space-6)]",children:[(0,r.jsx)("p",{className:"text-[length:var(--text-body)] text-[var(--text-tertiary)]",children:"No skills yet"}),(0,r.jsxs)("p",{className:"text-[length:var(--text-caption1)] text-[var(--text-quaternary)] mt-[var(--space-1)]",children:["Chat with ",h," to teach new skills"]})]})})}),(0,r.jsx)(m.lG,{open:_,onOpenChange:e=>!e&&void(E(!1),k(null),S(null)),children:(0,r.jsxs)(m.Cf,{className:"sm:max-w-2xl max-h-[80vh] flex flex-col",children:[(0,r.jsxs)(m.c7,{children:[(0,r.jsx)(m.L3,{children:null!=(t=null==N?void 0:N.name)?t:"Skill"}),(0,r.jsx)(m.rr,{children:(null==N?void 0:N.description)||"Skill details"})]}),(0,r.jsx)("div",{className:"flex-1 overflow-y-auto py-[var(--space-2)]",children:$?(0,r.jsx)("p",{className:"text-[length:var(--text-body)] text-[var(--text-tertiary)]",children:"Loading..."}):w?(0,r.jsx)("div",{className:"text-[length:var(--text-body)] leading-[1.7] text-[var(--text-secondary)]",dangerouslySetInnerHTML:{__html:function(e,t){let a=e.replace(i,e=>n[e]);for(let e of o)a=a.replace(e.pattern,e.replacement);return a}(w)}}):null})]})})]})})}},3637:(e,t,a)=>{"use strict";a.d(t,{Wu:()=>n,Zp:()=>s});var r=a(4130);a(7946);var l=a(6063);function s(e){let{className:t,...a}=e;return(0,r.jsx)("div",{"data-slot":"card",className:(0,l.cn)("bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm",t),...a})}function n(e){let{className:t,...a}=e;return(0,r.jsx)("div",{"data-slot":"card-content",className:(0,l.cn)("px-6",t),...a})}},7812:(e,t,a)=>{Promise.resolve().then(a.bind(a,2886))}},e=>{e.O(0,[625,51,155,192,344,144,358],()=>e(e.s=7812)),_N_E=e.O()}]);