jinn-cli 0.7.6 → 0.7.7
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/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/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/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
|
@@ -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.
|