jinn-cli 0.7.6 → 0.7.8
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.
- package/dist/src/sessions/__tests__/callbacks.test.js +1 -1
- package/dist/src/sessions/callbacks.js +1 -1
- package/dist/web/404.html +1 -1
- package/dist/web/_next/static/chunks/app/chat/page-01d396112fbc8623.js +1 -0
- package/dist/web/_next/static/chunks/app/cron/page-9787c557594dc688.js +1 -0
- package/dist/web/_next/static/chunks/app/{layout-45d8b9cc84f9443f.js → layout-497d1e93737edeae.js} +1 -1
- package/dist/web/_next/static/css/29fd6f6f1915cce0.css +1 -0
- package/dist/web/chat.html +1 -1
- package/dist/web/chat.txt +4 -4
- package/dist/web/cron.html +1 -1
- package/dist/web/cron.txt +4 -4
- package/dist/web/index.html +1 -1
- package/dist/web/index.txt +3 -3
- package/dist/web/kanban.html +1 -1
- package/dist/web/kanban.txt +3 -3
- package/dist/web/logs.html +2 -2
- package/dist/web/logs.txt +3 -3
- package/dist/web/org.html +1 -1
- package/dist/web/org.txt +3 -3
- package/dist/web/sessions.html +1 -1
- package/dist/web/sessions.txt +3 -3
- package/dist/web/settings.html +1 -1
- package/dist/web/settings.txt +3 -3
- package/dist/web/skills.html +1 -1
- package/dist/web/skills.txt +3 -3
- package/package.json +1 -1
- package/template/AGENTS.md +1 -1
- package/template/CLAUDE.md +1 -1
- package/template/migrations/0.3.0/MIGRATION.md +57 -0
- package/template/migrations/0.3.0/files/config.default.yaml +62 -0
- package/template/migrations/0.3.0/files/docs/mcp.md +108 -0
- package/template/migrations/0.7.3/MIGRATION.md +63 -0
- package/template/migrations/0.7.3/files/AGENTS.md +188 -0
- package/template/migrations/0.7.3/files/CLAUDE.md +127 -0
- package/template/migrations/0.7.5/MIGRATION.md +78 -0
- package/dist/web/_next/static/chunks/app/chat/page-b111adcdff7746b0.js +0 -1
- package/dist/web/_next/static/chunks/app/cron/page-03f6c20a2336f185.js +0 -1
- package/dist/web/_next/static/css/a2080d6b6696080a.css +0 -1
- /package/dist/web/_next/static/{ec5FmQvpr0g4TGeSgU_z_ → 73aF2gsMYJ-t64sWQw1Av}/_buildManifest.js +0 -0
- /package/dist/web/_next/static/{ec5FmQvpr0g4TGeSgU_z_ → 73aF2gsMYJ-t64sWQw1Av}/_ssgManifest.js +0 -0
package/dist/web/skills.html
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><!--ec5FmQvpr0g4TGeSgU_z_--><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/a2080d6b6696080a.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-2e375360ad2078fe.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-5843f8840f40f6f8.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-f566317c5713c743.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 hidden overflow-hidden border-r border-border bg-[var(--bg-secondary)] transition-[width,z-index] duration-200 ease-out lg:flex lg:flex-col z-[60] 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 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]: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-2e375360ad2078fe.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-5843f8840f40f6f8.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-5843f8840f40f6f8.js\",\"192\",\"static/chunks/192-f566317c5713c743.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/a2080d6b6696080a.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"ec5FmQvpr0g4TGeSgU_z_\",\"p\":\"\",\"c\":[\"\",\"skills\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"skills\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/a2080d6b6696080a.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><!--73aF2gsMYJ_t64sWQw1Av--><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/29fd6f6f1915cce0.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-2e375360ad2078fe.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-5843f8840f40f6f8.js" async=""></script><script src="/_next/static/chunks/app/layout-497d1e93737edeae.js" async=""></script><script src="/_next/static/chunks/51-43ce350b707e6b06.js" async=""></script><script src="/_next/static/chunks/192-f566317c5713c743.js" async=""></script><script src="/_next/static/chunks/app/skills/page-6d9c1d5b03aa86bb.js" async=""></script><meta name="description" content="AI Gateway Dashboard"/><script>(function(){try{var t=localStorage.getItem('jinn-theme')||'dark';if(t==='system'){t=window.matchMedia('(prefers-color-scheme:dark)').matches?'dark':'light'}document.documentElement.setAttribute('data-theme',t)}catch(e){}})()</script><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 hidden overflow-hidden border-r border-border bg-[var(--bg-secondary)] transition-[width,z-index] duration-200 ease-out lg:flex lg:flex-col z-[60] 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 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]: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-2e375360ad2078fe.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[5859,[\"625\",\"static/chunks/625-93dc90080662b8f4.js\",\"155\",\"static/chunks/155-5843f8840f40f6f8.js\",\"177\",\"static/chunks/app/layout-497d1e93737edeae.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-5843f8840f40f6f8.js\",\"192\",\"static/chunks/192-f566317c5713c743.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/29fd6f6f1915cce0.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"73aF2gsMYJ-t64sWQw1Av\",\"p\":\"\",\"c\":[\"\",\"skills\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"skills\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/29fd6f6f1915cce0.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"suppressHydrationWarning\":true,\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"(function(){try{var t=localStorage.getItem('jinn-theme')||'dark';if(t==='system'){t=window.matchMedia('(prefers-color-scheme:dark)').matches?'dark':'light'}document.documentElement.setAttribute('data-theme',t)}catch(e){}})()\"}}]}],[\"$\",\"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>
|
package/dist/web/skills.txt
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
1:"$Sreact.fragment"
|
|
2
|
-
2:I[
|
|
2
|
+
2:I[5859,["625","static/chunks/625-93dc90080662b8f4.js","155","static/chunks/155-5843f8840f40f6f8.js","177","static/chunks/app/layout-497d1e93737edeae.js"],"ClientProviders"]
|
|
3
3
|
3:I[1015,[],""]
|
|
4
4
|
4:I[3912,[],""]
|
|
5
5
|
5:I[3538,[],"ClientPageRoot"]
|
|
@@ -10,8 +10,8 @@ d:I[6862,[],"ViewportBoundary"]
|
|
|
10
10
|
f:I[6862,[],"MetadataBoundary"]
|
|
11
11
|
10:"$Sreact.suspense"
|
|
12
12
|
12:I[1389,[],""]
|
|
13
|
-
:HL["/_next/static/css/
|
|
14
|
-
0:{"P":null,"b":"
|
|
13
|
+
:HL["/_next/static/css/29fd6f6f1915cce0.css","style"]
|
|
14
|
+
0:{"P":null,"b":"73aF2gsMYJ-t64sWQw1Av","p":"","c":["","skills"],"i":false,"f":[[["",{"children":["skills",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/29fd6f6f1915cce0.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":[["$","head",null,{"children":["$","script",null,{"dangerouslySetInnerHTML":{"__html":"(function(){try{var t=localStorage.getItem('jinn-theme')||'dark';if(t==='system'){t=window.matchMedia('(prefers-color-scheme:dark)').matches?'dark':'light'}document.documentElement.setAttribute('data-theme',t)}catch(e){}})()"}}]}],["$","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
package/template/AGENTS.md
CHANGED
|
@@ -95,7 +95,7 @@ When you delegate to an employee via a child session:
|
|
|
95
95
|
4. The gateway automatically notifies you when the employee replies.
|
|
96
96
|
You will receive a notification message like:
|
|
97
97
|
> 📩 Employee "name" replied in session {id}.
|
|
98
|
-
> Read the latest messages: GET /api/sessions/{id}?last=
|
|
98
|
+
> Read the latest messages: GET /api/sessions/{id}?last=N
|
|
99
99
|
5. When notified, **read only the latest messages** via the API (use `?last=N`
|
|
100
100
|
to avoid context pollution). Then decide:
|
|
101
101
|
- Send a follow-up (`POST /api/sessions/{id}/message`) → go to step 3
|
package/template/CLAUDE.md
CHANGED
|
@@ -82,7 +82,7 @@ When you delegate to an employee via a child session:
|
|
|
82
82
|
4. The gateway automatically notifies you when the employee replies.
|
|
83
83
|
You will receive a notification message like:
|
|
84
84
|
> 📩 Employee "name" replied in session {id}.
|
|
85
|
-
> Read the latest messages: GET /api/sessions/{id}?last=
|
|
85
|
+
> Read the latest messages: GET /api/sessions/{id}?last=N
|
|
86
86
|
5. When notified, **read only the latest messages** via the API (use `?last=N`
|
|
87
87
|
to avoid context pollution). Then decide:
|
|
88
88
|
- Send a follow-up (`POST /api/sessions/{id}/message`) → go to step 3
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# Migration: 0.3.0 (MCP Integration, Session Limits, Cron Alerting)
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
This release adds the Model Context Protocol (MCP) integration system, session cost/duration limits, and cron failure alerting. Employees now automatically get browser, search, fetch, and gateway MCP tools injected into their sessions.
|
|
6
|
+
|
|
7
|
+
## Template files changed
|
|
8
|
+
|
|
9
|
+
### `config.default.yaml`
|
|
10
|
+
- `jinn.version` bumped from `"0.2.0"` to `"0.3.0"`
|
|
11
|
+
- Added entire `mcp:` section with four built-in servers (browser, search, fetch, gateway) and custom server support
|
|
12
|
+
- Added `sessions.maxDurationMinutes: 30` and `sessions.maxCostUsd: 10.00` — per-session resource limits
|
|
13
|
+
- Added `cron:` section with commented-out `alertConnector` and `alertChannel` keys
|
|
14
|
+
|
|
15
|
+
### New: `docs/mcp.md`
|
|
16
|
+
- New documentation file explaining MCP integration, built-in servers, custom servers, per-employee overrides, and environment variable usage
|
|
17
|
+
|
|
18
|
+
## New config keys
|
|
19
|
+
|
|
20
|
+
| Key | Type | Default | Description |
|
|
21
|
+
|-----|------|---------|-------------|
|
|
22
|
+
| `mcp.browser.enabled` | boolean | `true` | Enable Playwright browser automation MCP |
|
|
23
|
+
| `mcp.browser.provider` | string | `"playwright"` | Browser provider (`"playwright"` or `"puppeteer"`) |
|
|
24
|
+
| `mcp.search.enabled` | boolean | `false` | Enable Brave web search MCP |
|
|
25
|
+
| `mcp.search.provider` | string | `"brave"` | Search provider |
|
|
26
|
+
| `mcp.search.apiKey` | string | _(unset)_ | Brave API key (or use `${BRAVE_API_KEY}` env var) |
|
|
27
|
+
| `mcp.fetch.enabled` | boolean | `true` | Enable URL fetch/parse MCP |
|
|
28
|
+
| `mcp.gateway.enabled` | boolean | `true` | Enable built-in gateway MCP (messaging, sessions, org, cron tools) |
|
|
29
|
+
| `sessions.maxDurationMinutes` | number | `30` | Maximum session duration in minutes (overridable per-employee) |
|
|
30
|
+
| `sessions.maxCostUsd` | number | `10.00` | Maximum session cost in USD (overridable per-employee) |
|
|
31
|
+
| `cron.alertConnector` | string | _(unset)_ | Connector to send cron failure alerts to (e.g. `"slack"`) |
|
|
32
|
+
| `cron.alertChannel` | string | _(unset)_ | Channel for cron failure alerts (e.g. `"#alerts"`) |
|
|
33
|
+
|
|
34
|
+
## Database migration
|
|
35
|
+
|
|
36
|
+
New columns added to the sessions table (handled automatically on gateway start):
|
|
37
|
+
- `total_cost` — accumulated cost in USD for the session
|
|
38
|
+
- `total_turns` — number of engine turns in the session
|
|
39
|
+
|
|
40
|
+
**No manual action needed.**
|
|
41
|
+
|
|
42
|
+
## Merge instructions
|
|
43
|
+
|
|
44
|
+
1. **New file**: Copy `files/docs/mcp.md` to `~/.jinn/docs/mcp.md`. This is a new file — no conflict possible.
|
|
45
|
+
|
|
46
|
+
2. **Config**: Add the following sections to `config.yaml` if not already present. Do NOT overwrite existing values — only add missing keys:
|
|
47
|
+
- Add the `mcp:` section (with browser, search, fetch, gateway sub-keys) after `connectors:`
|
|
48
|
+
- Add `sessions.maxDurationMinutes: 30` and `sessions.maxCostUsd: 10.00` — if `sessions:` exists but is empty (`{}`), replace it with the new keys
|
|
49
|
+
- Add the `cron:` section with commented alert keys
|
|
50
|
+
|
|
51
|
+
3. **No skill changes** in this release.
|
|
52
|
+
4. **Database**: Handled automatically on gateway start.
|
|
53
|
+
|
|
54
|
+
## Files
|
|
55
|
+
|
|
56
|
+
- `files/config.default.yaml` — updated default config for reference
|
|
57
|
+
- `files/docs/mcp.md` — new MCP integration documentation
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
jinn:
|
|
2
|
+
version: "0.3.0"
|
|
3
|
+
|
|
4
|
+
gateway:
|
|
5
|
+
port: 7777
|
|
6
|
+
host: "127.0.0.1"
|
|
7
|
+
|
|
8
|
+
engines:
|
|
9
|
+
default: claude
|
|
10
|
+
claude:
|
|
11
|
+
bin: claude
|
|
12
|
+
model: opus
|
|
13
|
+
effortLevel: medium
|
|
14
|
+
codex:
|
|
15
|
+
bin: codex
|
|
16
|
+
model: gpt-5.4
|
|
17
|
+
effortLevel: high
|
|
18
|
+
|
|
19
|
+
connectors:
|
|
20
|
+
slack:
|
|
21
|
+
shareSessionInChannel: false
|
|
22
|
+
ignoreOldMessagesOnBoot: true
|
|
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
|
+
|
|
56
|
+
portal:
|
|
57
|
+
language: English
|
|
58
|
+
|
|
59
|
+
logging:
|
|
60
|
+
file: true
|
|
61
|
+
stdout: true
|
|
62
|
+
level: info
|
|
@@ -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.
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# Migration: 0.7.3 (Child Session Protocol, Message Filtering)
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
This release adds the Child Session Protocol to both CLAUDE.md and AGENTS.md templates, ensuring all engine types (Claude Code and Codex) know how to properly delegate to employees via async child sessions. It also adds `?last=N` message filtering to the sessions API and fixes the parent notification wording ("replied" instead of "completed").
|
|
6
|
+
|
|
7
|
+
## Template files changed
|
|
8
|
+
|
|
9
|
+
### `CLAUDE.md`
|
|
10
|
+
- Added "Child Session Protocol (Async Notifications)" subsection under "The Org System" section, after "Agent teams for multi-phase tasks"
|
|
11
|
+
- 21 lines describing the spawn → notify → read-latest → follow-up workflow
|
|
12
|
+
|
|
13
|
+
### `AGENTS.md`
|
|
14
|
+
- Added "Child Session Protocol (Async Notifications)" subsection under "The Org System" section, after "Board Task Schema"
|
|
15
|
+
- Same 21-line protocol description as CLAUDE.md
|
|
16
|
+
|
|
17
|
+
## New API features
|
|
18
|
+
|
|
19
|
+
| Endpoint | Change | Description |
|
|
20
|
+
|----------|--------|-------------|
|
|
21
|
+
| `GET /api/sessions/:id` | Added `?last=N` query param | Returns only the last N messages instead of the full history |
|
|
22
|
+
|
|
23
|
+
## Merge instructions
|
|
24
|
+
|
|
25
|
+
1. **CLAUDE.md**: Check if a "Child Session Protocol" subsection already exists under "The Org System" section. If not, add the following block after the "Agent teams for multi-phase tasks" subsection (or at the end of "The Org System" section if that subsection doesn't exist):
|
|
26
|
+
|
|
27
|
+
```markdown
|
|
28
|
+
### Child Session Protocol (Async Notifications)
|
|
29
|
+
|
|
30
|
+
When you delegate to an employee via a child session:
|
|
31
|
+
|
|
32
|
+
1. **Spawn** the child session (`POST /api/sessions` with `parentSessionId`)
|
|
33
|
+
2. **Tell the user** what you delegated and to whom
|
|
34
|
+
3. **End your turn.** Do NOT poll, wait, sleep, or block.
|
|
35
|
+
4. The gateway automatically notifies you when the employee replies.
|
|
36
|
+
You will receive a notification message like:
|
|
37
|
+
> 📩 Employee "name" replied in session {id}.
|
|
38
|
+
> Read the latest messages: GET /api/sessions/{id}?last=N
|
|
39
|
+
5. When notified, **read only the latest messages** via the API (use `?last=N`
|
|
40
|
+
to avoid context pollution). Then decide:
|
|
41
|
+
- Send a follow-up (`POST /api/sessions/{id}/message`) → go to step 3
|
|
42
|
+
- Or do nothing — the conversation is complete
|
|
43
|
+
6. **Never read the full conversation history** on every notification. Only read
|
|
44
|
+
the latest messages relevant to the current round.
|
|
45
|
+
|
|
46
|
+
This protocol applies to ALL employee child sessions, not just specific ones.
|
|
47
|
+
The gateway handles the notification plumbing — you just reply and stop.
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
2. **AGENTS.md**: Same check — if "Child Session Protocol" subsection is missing, add the identical block after "Board Task Schema" (inside "The Org System" section).
|
|
51
|
+
|
|
52
|
+
3. **No config changes** in this release.
|
|
53
|
+
4. **No skill changes** in this release.
|
|
54
|
+
|
|
55
|
+
## Important notes
|
|
56
|
+
|
|
57
|
+
- If the user's CLAUDE.md or AGENTS.md already contain a "Child Session Protocol" section (e.g. manually added), **do not duplicate it**. Compare the content and only update if the existing version is materially different.
|
|
58
|
+
- The protocol references `?last=N` which is a new API feature — it won't work on gateway versions older than 0.7.3.
|
|
59
|
+
|
|
60
|
+
## Files
|
|
61
|
+
|
|
62
|
+
- `files/CLAUDE.md` — updated CLAUDE.md template (full file for reference)
|
|
63
|
+
- `files/AGENTS.md` — updated AGENTS.md template (full file for reference)
|