@jonsoc/console-app 1.1.34
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/.opencode/agent/css.md +149 -0
- package/README.md +32 -0
- package/package.json +49 -0
- package/public/apple-touch-icon-v3.png +1 -0
- package/public/apple-touch-icon.png +1 -0
- package/public/email +1 -0
- package/public/favicon-96x96-v3.png +1 -0
- package/public/favicon-96x96.png +1 -0
- package/public/favicon-v3.ico +1 -0
- package/public/favicon-v3.svg +1 -0
- package/public/favicon.ico +1 -0
- package/public/favicon.svg +1 -0
- package/public/opencode-brand-assets.zip +0 -0
- package/public/robots.txt +6 -0
- package/public/site.webmanifest +1 -0
- package/public/social-share-black.png +1 -0
- package/public/social-share-zen.png +1 -0
- package/public/social-share.png +1 -0
- package/public/theme.json +182 -0
- package/public/web-app-manifest-192x192.png +1 -0
- package/public/web-app-manifest-512x512.png +1 -0
- package/script/generate-sitemap.ts +103 -0
- package/src/app.css +1 -0
- package/src/app.tsx +27 -0
- package/src/asset/black/hero.png +0 -0
- package/src/asset/brand/opencode-brand-assets.zip +0 -0
- package/src/asset/brand/opencode-logo-dark.png +0 -0
- package/src/asset/brand/opencode-logo-dark.svg +16 -0
- package/src/asset/brand/opencode-logo-light.png +0 -0
- package/src/asset/brand/opencode-logo-light.svg +16 -0
- package/src/asset/brand/opencode-wordmark-dark.png +0 -0
- package/src/asset/brand/opencode-wordmark-dark.svg +30 -0
- package/src/asset/brand/opencode-wordmark-light.png +0 -0
- package/src/asset/brand/opencode-wordmark-light.svg +30 -0
- package/src/asset/brand/opencode-wordmark-simple-dark.png +0 -0
- package/src/asset/brand/opencode-wordmark-simple-dark.svg +22 -0
- package/src/asset/brand/opencode-wordmark-simple-light.png +0 -0
- package/src/asset/brand/opencode-wordmark-simple-light.svg +22 -0
- package/src/asset/brand/preview-opencode-dark.png +0 -0
- package/src/asset/brand/preview-opencode-logo-dark.png +0 -0
- package/src/asset/brand/preview-opencode-logo-light.png +0 -0
- package/src/asset/brand/preview-opencode-wordmark-dark.png +0 -0
- package/src/asset/brand/preview-opencode-wordmark-light.png +0 -0
- package/src/asset/brand/preview-opencode-wordmark-simple-dark.png +0 -0
- package/src/asset/brand/preview-opencode-wordmark-simple-light.png +0 -0
- package/src/asset/lander/avatar-adam.png +0 -0
- package/src/asset/lander/avatar-david.png +0 -0
- package/src/asset/lander/avatar-dax.png +0 -0
- package/src/asset/lander/avatar-frank.png +0 -0
- package/src/asset/lander/avatar-jay.png +0 -0
- package/src/asset/lander/brand-assets-dark.svg +10 -0
- package/src/asset/lander/brand-assets-light.svg +10 -0
- package/src/asset/lander/brand.png +0 -0
- package/src/asset/lander/check.svg +3 -0
- package/src/asset/lander/copy.svg +3 -0
- package/src/asset/lander/desktop-app-icon.png +0 -0
- package/src/asset/lander/dock.png +0 -0
- package/src/asset/lander/logo-dark.svg +11 -0
- package/src/asset/lander/logo-light.svg +11 -0
- package/src/asset/lander/opencode-comparison-min.mp4 +0 -0
- package/src/asset/lander/opencode-comparison-poster.png +0 -0
- package/src/asset/lander/opencode-desktop-icon.png +0 -0
- package/src/asset/lander/opencode-logo-dark.svg +11 -0
- package/src/asset/lander/opencode-logo-light.svg +11 -0
- package/src/asset/lander/opencode-min.mp4 +0 -0
- package/src/asset/lander/opencode-poster.png +0 -0
- package/src/asset/lander/opencode-wordmark-dark.svg +25 -0
- package/src/asset/lander/opencode-wordmark-light.svg +25 -0
- package/src/asset/lander/screenshot-github.png +0 -0
- package/src/asset/lander/screenshot-splash.png +0 -0
- package/src/asset/lander/screenshot-vscode.png +0 -0
- package/src/asset/lander/screenshot.png +0 -0
- package/src/asset/lander/wordmark-dark.svg +3 -0
- package/src/asset/lander/wordmark-light.svg +3 -0
- package/src/asset/logo-ornate-dark.svg +18 -0
- package/src/asset/logo-ornate-light.svg +18 -0
- package/src/asset/logo.svg +18 -0
- package/src/asset/zen-ornate-dark.svg +8 -0
- package/src/asset/zen-ornate-light.svg +8 -0
- package/src/component/dropdown.css +80 -0
- package/src/component/dropdown.tsx +79 -0
- package/src/component/email-signup.tsx +48 -0
- package/src/component/faq.tsx +33 -0
- package/src/component/footer.tsx +38 -0
- package/src/component/header-context-menu.css +63 -0
- package/src/component/header.tsx +279 -0
- package/src/component/icon.tsx +257 -0
- package/src/component/legal.tsx +20 -0
- package/src/component/modal.css +66 -0
- package/src/component/modal.tsx +24 -0
- package/src/component/spotlight.css +15 -0
- package/src/component/spotlight.tsx +820 -0
- package/src/config.ts +29 -0
- package/src/context/auth.session.ts +0 -0
- package/src/context/auth.ts +116 -0
- package/src/context/auth.withActor.ts +7 -0
- package/src/entry-client.tsx +4 -0
- package/src/entry-server.tsx +30 -0
- package/src/global.d.ts +5 -0
- package/src/lib/github.ts +38 -0
- package/src/middleware.ts +5 -0
- package/src/routes/[...404].css +130 -0
- package/src/routes/[...404].tsx +38 -0
- package/src/routes/api/enterprise.ts +47 -0
- package/src/routes/auth/[...callback].ts +41 -0
- package/src/routes/auth/authorize.ts +10 -0
- package/src/routes/auth/index.ts +12 -0
- package/src/routes/auth/logout.ts +17 -0
- package/src/routes/auth/status.ts +7 -0
- package/src/routes/bench/[id].tsx +365 -0
- package/src/routes/bench/index.tsx +86 -0
- package/src/routes/bench/submission.ts +29 -0
- package/src/routes/black/common.tsx +62 -0
- package/src/routes/black/index.tsx +108 -0
- package/src/routes/black/subscribe/[plan].tsx +449 -0
- package/src/routes/black/workspace.css +214 -0
- package/src/routes/black/workspace.tsx +229 -0
- package/src/routes/black.css +828 -0
- package/src/routes/black.tsx +285 -0
- package/src/routes/brand/index.css +555 -0
- package/src/routes/brand/index.tsx +252 -0
- package/src/routes/changelog/index.css +477 -0
- package/src/routes/changelog/index.tsx +147 -0
- package/src/routes/debug/index.ts +13 -0
- package/src/routes/desktop-feedback.ts +5 -0
- package/src/routes/discord.ts +5 -0
- package/src/routes/docs/[...path].ts +20 -0
- package/src/routes/docs/index.ts +20 -0
- package/src/routes/download/[platform].ts +38 -0
- package/src/routes/download/index.css +750 -0
- package/src/routes/download/index.tsx +482 -0
- package/src/routes/download/types.ts +4 -0
- package/src/routes/enterprise/index.css +578 -0
- package/src/routes/enterprise/index.tsx +251 -0
- package/src/routes/index.css +1251 -0
- package/src/routes/index.tsx +840 -0
- package/src/routes/legal/privacy-policy/index.css +343 -0
- package/src/routes/legal/privacy-policy/index.tsx +1512 -0
- package/src/routes/legal/terms-of-service/index.css +254 -0
- package/src/routes/legal/terms-of-service/index.tsx +512 -0
- package/src/routes/openapi.json.ts +7 -0
- package/src/routes/s/[id].ts +20 -0
- package/src/routes/stripe/webhook.ts +532 -0
- package/src/routes/t/[...path].tsx +20 -0
- package/src/routes/temp.tsx +172 -0
- package/src/routes/user-menu.css +18 -0
- package/src/routes/user-menu.tsx +32 -0
- package/src/routes/workspace/[id]/billing/billing-section.module.css +185 -0
- package/src/routes/workspace/[id]/billing/billing-section.tsx +240 -0
- package/src/routes/workspace/[id]/billing/black-section.module.css +142 -0
- package/src/routes/workspace/[id]/billing/black-section.tsx +269 -0
- package/src/routes/workspace/[id]/billing/black-waitlist-section.module.css +23 -0
- package/src/routes/workspace/[id]/billing/index.tsx +32 -0
- package/src/routes/workspace/[id]/billing/monthly-limit-section.module.css +96 -0
- package/src/routes/workspace/[id]/billing/monthly-limit-section.tsx +133 -0
- package/src/routes/workspace/[id]/billing/payment-section.module.css +93 -0
- package/src/routes/workspace/[id]/billing/payment-section.tsx +122 -0
- package/src/routes/workspace/[id]/billing/reload-section.module.css +261 -0
- package/src/routes/workspace/[id]/billing/reload-section.tsx +213 -0
- package/src/routes/workspace/[id]/graph-section.module.css +145 -0
- package/src/routes/workspace/[id]/graph-section.tsx +475 -0
- package/src/routes/workspace/[id]/index.tsx +81 -0
- package/src/routes/workspace/[id]/keys/index.tsx +11 -0
- package/src/routes/workspace/[id]/keys/key-section.module.css +197 -0
- package/src/routes/workspace/[id]/keys/key-section.tsx +176 -0
- package/src/routes/workspace/[id]/members/index.tsx +11 -0
- package/src/routes/workspace/[id]/members/member-section.module.css +249 -0
- package/src/routes/workspace/[id]/members/member-section.tsx +343 -0
- package/src/routes/workspace/[id]/members/role-dropdown.css +72 -0
- package/src/routes/workspace/[id]/members/role-dropdown.tsx +43 -0
- package/src/routes/workspace/[id]/model-section.module.css +173 -0
- package/src/routes/workspace/[id]/model-section.tsx +174 -0
- package/src/routes/workspace/[id]/new-user-section.module.css +143 -0
- package/src/routes/workspace/[id]/new-user-section.tsx +104 -0
- package/src/routes/workspace/[id]/provider-section.module.css +138 -0
- package/src/routes/workspace/[id]/provider-section.tsx +188 -0
- package/src/routes/workspace/[id]/settings/index.tsx +11 -0
- package/src/routes/workspace/[id]/settings/settings-section.module.css +94 -0
- package/src/routes/workspace/[id]/settings/settings-section.tsx +122 -0
- package/src/routes/workspace/[id]/usage-section.module.css +185 -0
- package/src/routes/workspace/[id]/usage-section.tsx +200 -0
- package/src/routes/workspace/[id].css +308 -0
- package/src/routes/workspace/[id].tsx +62 -0
- package/src/routes/workspace/common.tsx +120 -0
- package/src/routes/workspace-picker.css +74 -0
- package/src/routes/workspace-picker.tsx +122 -0
- package/src/routes/workspace.css +107 -0
- package/src/routes/workspace.tsx +38 -0
- package/src/routes/zen/index.css +866 -0
- package/src/routes/zen/index.tsx +343 -0
- package/src/routes/zen/util/dataDumper.ts +44 -0
- package/src/routes/zen/util/error.ts +13 -0
- package/src/routes/zen/util/handler.ts +784 -0
- package/src/routes/zen/util/logger.ts +12 -0
- package/src/routes/zen/util/provider/anthropic.ts +752 -0
- package/src/routes/zen/util/provider/google.ts +75 -0
- package/src/routes/zen/util/provider/openai-compatible.ts +546 -0
- package/src/routes/zen/util/provider/openai.ts +630 -0
- package/src/routes/zen/util/provider/provider.ts +210 -0
- package/src/routes/zen/util/rateLimiter.ts +41 -0
- package/src/routes/zen/util/stickyProviderTracker.ts +16 -0
- package/src/routes/zen/util/trialLimiter.ts +49 -0
- package/src/routes/zen/v1/chat/completions.ts +11 -0
- package/src/routes/zen/v1/messages.ts +11 -0
- package/src/routes/zen/v1/models/[model].ts +13 -0
- package/src/routes/zen/v1/models.ts +60 -0
- package/src/routes/zen/v1/responses.ts +11 -0
- package/src/style/base.css +21 -0
- package/src/style/component/button.css +102 -0
- package/src/style/index.css +8 -0
- package/src/style/reset.css +76 -0
- package/src/style/token/color.css +91 -0
- package/src/style/token/font.css +21 -0
- package/src/style/token/space.css +46 -0
- package/sst-env.d.ts +9 -0
- package/tsconfig.json +21 -0
- package/vite.config.ts +25 -0
|
@@ -0,0 +1,343 @@
|
|
|
1
|
+
import "./index.css"
|
|
2
|
+
import { createAsync, query, redirect } from "@solidjs/router"
|
|
3
|
+
import { Title, Meta, Link } from "@solidjs/meta"
|
|
4
|
+
//import { HttpHeader } from "@solidjs/start"
|
|
5
|
+
import zenLogoLight from "../../asset/zen-ornate-light.svg"
|
|
6
|
+
import { config } from "~/config"
|
|
7
|
+
import zenLogoDark from "../../asset/zen-ornate-dark.svg"
|
|
8
|
+
import compareVideo from "../../asset/lander/jonsoc-comparison-min.mp4"
|
|
9
|
+
import compareVideoPoster from "../../asset/lander/jonsoc-comparison-poster.png"
|
|
10
|
+
import avatarDax from "../../asset/lander/avatar-dax.png"
|
|
11
|
+
import avatarJay from "../../asset/lander/avatar-jay.png"
|
|
12
|
+
import avatarFrank from "../../asset/lander/avatar-frank.png"
|
|
13
|
+
import avatarAdam from "../../asset/lander/avatar-adam.png"
|
|
14
|
+
import avatarDavid from "../../asset/lander/avatar-david.png"
|
|
15
|
+
import { EmailSignup } from "~/component/email-signup"
|
|
16
|
+
import { Faq } from "~/component/faq"
|
|
17
|
+
import { Legal } from "~/component/legal"
|
|
18
|
+
import { Footer } from "~/component/footer"
|
|
19
|
+
import { Header } from "~/component/header"
|
|
20
|
+
import { getLastSeenWorkspaceID } from "../workspace/common"
|
|
21
|
+
import { IconGemini, IconZai } from "~/component/icon"
|
|
22
|
+
|
|
23
|
+
const checkLoggedIn = query(async () => {
|
|
24
|
+
"use server"
|
|
25
|
+
const workspaceID = await getLastSeenWorkspaceID().catch(() => {})
|
|
26
|
+
if (workspaceID) throw redirect(`/workspace/${workspaceID}`)
|
|
27
|
+
}, "checkLoggedIn.get")
|
|
28
|
+
|
|
29
|
+
export default function Home() {
|
|
30
|
+
const loggedin = createAsync(() => checkLoggedIn())
|
|
31
|
+
return (
|
|
32
|
+
<main data-page="zen">
|
|
33
|
+
{/*<HttpHeader name="Cache-Control" value="public, max-age=1, s-maxage=3600, stale-while-revalidate=86400" />*/}
|
|
34
|
+
<Title>JonsOC Zen | A curated set of reliable optimized models for coding agents</Title>
|
|
35
|
+
<Link rel="canonical" href={`${config.baseUrl}/zen`} />
|
|
36
|
+
<Meta property="og:image" content="/social-share-zen.png" />
|
|
37
|
+
<Meta name="twitter:image" content="/social-share-zen.png" />
|
|
38
|
+
<Meta name="jonsoc:auth" content={loggedin() ? "true" : "false"} />
|
|
39
|
+
|
|
40
|
+
<div data-component="container">
|
|
41
|
+
<Header zen hideGetStarted />
|
|
42
|
+
|
|
43
|
+
<div data-component="content">
|
|
44
|
+
<section data-component="hero">
|
|
45
|
+
<div data-slot="hero-copy">
|
|
46
|
+
<img data-slot="zen logo light" src={zenLogoLight} alt="zen logo light" />
|
|
47
|
+
<img data-slot="zen logo dark" src={zenLogoDark} alt="zen logo dark" />
|
|
48
|
+
<h1>Reliable optimized models for coding agents</h1>
|
|
49
|
+
<p>
|
|
50
|
+
Zen gives you access to a curated set of AI models that JonsOC has tested and benchmarked specifically
|
|
51
|
+
for coding agents. No need to worry about inconsistent performance and quality, use validated models
|
|
52
|
+
that work.
|
|
53
|
+
</p>
|
|
54
|
+
<div data-slot="model-logos">
|
|
55
|
+
<div>
|
|
56
|
+
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
57
|
+
<mask
|
|
58
|
+
id="mask0_79_128586"
|
|
59
|
+
style="mask-type:luminance"
|
|
60
|
+
maskUnits="userSpaceOnUse"
|
|
61
|
+
x="1"
|
|
62
|
+
y="1"
|
|
63
|
+
width="22"
|
|
64
|
+
height="22"
|
|
65
|
+
>
|
|
66
|
+
<path d="M23 1.5H1V22.2952H23V1.5Z" fill="white" />
|
|
67
|
+
</mask>
|
|
68
|
+
<g mask="url(#mask0_79_128586)">
|
|
69
|
+
<path
|
|
70
|
+
d="M9.43799 9.06943V7.09387C9.43799 6.92749 9.50347 6.80267 9.65601 6.71959L13.8206 4.43211C14.3875 4.1202 15.0635 3.9747 15.7611 3.9747C18.3775 3.9747 20.0347 5.9087 20.0347 7.96734C20.0347 8.11288 20.0347 8.27926 20.0128 8.44564L15.6956 6.03335C15.434 5.88785 15.1723 5.88785 14.9107 6.03335L9.43799 9.06943ZM19.1624 16.7637V12.0431C19.1624 11.7519 19.0315 11.544 18.7699 11.3984L13.2972 8.36234L15.0851 7.3849C15.2377 7.30182 15.3686 7.30182 15.5212 7.3849L19.6858 9.67238C20.8851 10.3379 21.6917 11.7519 21.6917 13.1243C21.6917 14.7047 20.7106 16.1604 19.1624 16.7636V16.7637ZM8.15158 12.6047L6.36369 11.6066C6.21114 11.5235 6.14566 11.3986 6.14566 11.2323V6.65735C6.14566 4.43233 7.93355 2.7478 10.3538 2.7478C11.2697 2.7478 12.1199 3.039 12.8396 3.55886L8.54424 5.92959C8.28268 6.07508 8.15181 6.28303 8.15181 6.57427V12.6049L8.15158 12.6047ZM12 14.7258L9.43799 13.3533V10.4421L12 9.06965L14.5618 10.4421V13.3533L12 14.7258ZM13.6461 21.0476C12.7303 21.0476 11.8801 20.7564 11.1604 20.2366L15.4557 17.8658C15.7173 17.7203 15.8482 17.5124 15.8482 17.2211V11.1905L17.658 12.1886C17.8105 12.2717 17.876 12.3965 17.876 12.563V17.1379C17.876 19.3629 16.0662 21.0474 13.6461 21.0474V21.0476ZM8.47863 16.4103L4.314 14.1229C3.11471 13.4573 2.30808 12.0433 2.30808 10.6709C2.30808 9.06965 3.31106 7.6348 4.85903 7.03168V11.773C4.85903 12.0642 4.98995 12.2721 5.25151 12.4177L10.7025 15.4328L8.91464 16.4103C8.76209 16.4934 8.63117 16.4934 8.47863 16.4103ZM8.23892 19.8207C5.77508 19.8207 3.96533 18.0531 3.96533 15.8696C3.96533 15.7032 3.98719 15.5368 4.00886 15.3704L8.30418 17.7412C8.56574 17.8867 8.82752 17.8867 9.08909 17.7412L14.5618 14.726V16.7015C14.5618 16.8679 14.4964 16.9927 14.3438 17.0758L10.1792 19.3633C9.61225 19.6752 8.93631 19.8207 8.23869 19.8207H8.23892ZM13.6461 22.2952C16.2844 22.2952 18.4865 20.5069 18.9882 18.1362C21.4301 17.5331 23 15.3495 23 13.1245C23 11.6688 22.346 10.2548 21.1685 9.23581C21.2775 8.79908 21.343 8.36234 21.343 7.92582C21.343 4.95215 18.8137 2.72691 15.892 2.72691C15.3034 2.72691 14.7365 2.80999 14.1695 2.99726C13.1882 2.08223 11.8364 1.5 10.3538 1.5C7.71557 1.5 5.51352 3.28829 5.01185 5.65902C2.56987 6.26214 1 8.44564 1 10.6707C1 12.1264 1.65404 13.5404 2.83147 14.5594C2.72246 14.9961 2.65702 15.4328 2.65702 15.8694C2.65702 18.8431 5.1863 21.0683 8.108 21.0683C8.69661 21.0683 9.26354 20.9852 9.83046 20.7979C10.8115 21.713 12.1634 22.2952 13.6461 22.2952Z"
|
|
71
|
+
fill="currentColor"
|
|
72
|
+
/>
|
|
73
|
+
</g>
|
|
74
|
+
</svg>
|
|
75
|
+
</div>
|
|
76
|
+
<div>
|
|
77
|
+
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
78
|
+
<path d="M13.7891 3.93164L20.2223 20.0677H23.7502L17.317 3.93164H13.7891Z" fill="currentColor" />
|
|
79
|
+
<path
|
|
80
|
+
d="M6.32538 13.6824L8.52662 8.01177L10.7279 13.6824H6.32538ZM6.68225 3.93164L0.25 20.0677H3.84652L5.16202 16.6791H11.8914L13.2067 20.0677H16.8033L10.371 3.93164H6.68225Z"
|
|
81
|
+
fill="currentColor"
|
|
82
|
+
/>
|
|
83
|
+
</svg>
|
|
84
|
+
</div>
|
|
85
|
+
<div>
|
|
86
|
+
<IconGemini width="24" height="24" />
|
|
87
|
+
</div>
|
|
88
|
+
<div>
|
|
89
|
+
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
90
|
+
<path
|
|
91
|
+
d="M9.16861 16.0529L17.2018 9.85156C17.5957 9.54755 18.1586 9.66612 18.3463 10.1384C19.3339 12.6288 18.8926 15.6217 16.9276 17.6766C14.9626 19.7314 12.2285 20.1821 9.72948 19.1557L6.9995 20.4775C10.9151 23.2763 15.6699 22.5841 18.6411 19.4749C20.9979 17.0103 21.7278 13.6508 21.0453 10.6214L21.0515 10.6278C20.0617 6.17736 21.2948 4.39847 23.8207 0.760904C23.8804 0.674655 23.9402 0.588405 24 0.5L20.6762 3.97585V3.96506L9.16658 16.0551"
|
|
92
|
+
fill="currentColor"
|
|
93
|
+
/>
|
|
94
|
+
<path
|
|
95
|
+
d="M7.37742 16.7017C4.67579 14.0395 5.14158 9.91963 7.44676 7.54383C9.15135 5.78544 11.9442 5.06779 14.3821 6.12281L17.0005 4.87559C16.5288 4.52392 15.9242 4.14566 15.2305 3.87986C12.0948 2.54882 8.34069 3.21127 5.79171 5.8386C3.33985 8.36779 2.56881 12.2567 3.89286 15.5751C4.88192 18.0552 3.26056 19.8094 1.62731 21.5801C1.04853 22.2078 0.467774 22.8355 0 23.5L7.3754 16.7037"
|
|
96
|
+
fill="currentColor"
|
|
97
|
+
/>
|
|
98
|
+
</svg>
|
|
99
|
+
</div>
|
|
100
|
+
<div>
|
|
101
|
+
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
102
|
+
<path
|
|
103
|
+
fill-rule="evenodd"
|
|
104
|
+
clip-rule="evenodd"
|
|
105
|
+
d="M12.6043 1.34016C12.9973 2.03016 13.3883 2.72215 13.7783 3.41514C13.7941 3.44286 13.8169 3.46589 13.8445 3.48187C13.8721 3.49786 13.9034 3.50624 13.9353 3.50614H19.4873C19.6612 3.50614 19.8092 3.61614 19.9332 3.83314L21.3872 6.40311C21.5772 6.74011 21.6272 6.88111 21.4112 7.24011C21.1512 7.6701 20.8982 8.1041 20.6512 8.54009L20.2842 9.19809C20.1782 9.39409 20.0612 9.47809 20.2442 9.71008L22.8962 14.347C23.0682 14.648 23.0072 14.841 22.8532 15.117C22.4162 15.902 21.9712 16.681 21.5182 17.457C21.3592 17.729 21.1662 17.832 20.8382 17.827C20.0612 17.811 19.2863 17.817 18.5113 17.843C18.4946 17.8439 18.4785 17.8489 18.4644 17.8576C18.4502 17.8664 18.4385 17.8785 18.4303 17.893C17.5361 19.4773 16.6344 21.0573 15.7253 22.633C15.5563 22.926 15.3453 22.996 15.0003 22.997C14.0033 23 12.9983 23.001 11.9833 22.999C11.8889 22.9987 11.7961 22.9735 11.7145 22.9259C11.6328 22.8783 11.5652 22.8101 11.5184 22.728L10.1834 20.405C10.1756 20.3898 10.1637 20.3771 10.149 20.3684C10.1343 20.3598 10.1174 20.3554 10.1004 20.356H4.98244C4.69744 20.386 4.42944 20.355 4.17745 20.264L2.57447 17.494C2.52706 17.412 2.50193 17.319 2.50158 17.2243C2.50123 17.1296 2.52567 17.0364 2.57247 16.954L3.77945 14.834C3.79665 14.8041 3.80569 14.7701 3.80569 14.7355C3.80569 14.701 3.79665 14.667 3.77945 14.637C3.15073 13.5485 2.52573 12.4579 1.90448 11.3651L1.11449 9.97008C0.954488 9.66008 0.941489 9.47409 1.20949 9.00509C1.67448 8.1921 2.13647 7.38011 2.59647 6.56911C2.72847 6.33512 2.90046 6.23512 3.18046 6.23412C4.04344 6.23048 4.90644 6.23015 5.76943 6.23312C5.79123 6.23295 5.81259 6.22704 5.83138 6.21597C5.85016 6.20491 5.8657 6.1891 5.87643 6.17012L8.68239 1.27516C8.72491 1.2007 8.78631 1.13875 8.86039 1.09556C8.93448 1.05238 9.01863 1.02948 9.10439 1.02917C9.62838 1.02817 10.1574 1.02917 10.6874 1.02317L11.7044 1.00017C12.0453 0.997165 12.4283 1.03217 12.6043 1.34016ZM9.17238 1.74316C9.16185 1.74315 9.15149 1.74592 9.14236 1.75119C9.13323 1.75645 9.12565 1.76403 9.12038 1.77316L6.25442 6.78811C6.24066 6.81174 6.22097 6.83137 6.19729 6.84505C6.17361 6.85873 6.14677 6.86599 6.11942 6.86611H3.25346C3.19746 6.86611 3.18346 6.89111 3.21246 6.94011L9.02239 17.096C9.04739 17.138 9.03539 17.158 8.98839 17.159L6.19342 17.174C6.15256 17.1727 6.11214 17.1828 6.07678 17.2033C6.04141 17.2238 6.01253 17.2539 5.99342 17.29L4.67344 19.6C4.62944 19.678 4.65244 19.718 4.74144 19.718L10.4574 19.726C10.5034 19.726 10.5374 19.746 10.5614 19.787L11.9643 22.241C12.0103 22.322 12.0563 22.323 12.1033 22.241L17.1093 13.481L17.8923 12.0991C17.897 12.0905 17.904 12.0834 17.9125 12.0785C17.9209 12.0735 17.9305 12.0709 17.9403 12.0709C17.9501 12.0709 17.9597 12.0735 17.9681 12.0785C17.9765 12.0834 17.9835 12.0905 17.9883 12.0991L19.4123 14.629C19.4229 14.648 19.4385 14.6637 19.4573 14.6746C19.4761 14.6855 19.4975 14.6912 19.5193 14.691L22.2822 14.671C22.2893 14.6711 22.2963 14.6693 22.3024 14.6658C22.3086 14.6623 22.3137 14.6572 22.3172 14.651C22.3206 14.6449 22.3224 14.638 22.3224 14.631C22.3224 14.624 22.3206 14.6172 22.3172 14.611L19.4173 9.52508C19.4068 9.50809 19.4013 9.48853 19.4013 9.46859C19.4013 9.44864 19.4068 9.42908 19.4173 9.41209L19.7102 8.90509L20.8302 6.92811C20.8542 6.88711 20.8422 6.86611 20.7952 6.86611H9.20038C9.14138 6.86611 9.12738 6.84011 9.15738 6.78911L10.5914 4.28413C10.6021 4.26706 10.6078 4.24731 10.6078 4.22714C10.6078 4.20697 10.6021 4.18721 10.5914 4.17014L9.22538 1.77416C9.22016 1.7647 9.21248 1.75682 9.20315 1.75137C9.19382 1.74591 9.18319 1.74307 9.17238 1.74316ZM15.4623 9.76308C15.5083 9.76308 15.5203 9.78308 15.4963 9.82308L14.6643 11.2881L12.0513 15.873C12.0464 15.8819 12.0392 15.8894 12.0304 15.8945C12.0216 15.8996 12.0115 15.9022 12.0013 15.902C11.9912 15.902 11.9813 15.8993 11.9725 15.8942C11.9637 15.8891 11.9564 15.8818 11.9513 15.873L8.49839 9.84108C8.47839 9.80708 8.48839 9.78908 8.52639 9.78708L8.74239 9.77508L15.4643 9.76308H15.4623Z"
|
|
106
|
+
fill="currentColor"
|
|
107
|
+
/>
|
|
108
|
+
</svg>
|
|
109
|
+
</div>
|
|
110
|
+
<div>
|
|
111
|
+
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
112
|
+
<path
|
|
113
|
+
d="M12.6241 11.346L20.3848 3.44816C20.5309 3.29931 20.4487 3 20.2601 3H16.0842C16.0388 3 15.9949 3.01897 15.9594 3.05541L7.59764 11.5629C7.46721 11.6944 7.27446 11.5771 7.27446 11.3666V3.25183C7.27446 3.11242 7.18515 3 7.07594 3H4.19843C4.08932 3 4 3.11242 4 3.25183V20.7482C4 20.8876 4.08932 21 4.19843 21H7.07594C7.18515 21 7.27446 20.8876 7.27446 20.7482V17.1834C7.27446 17.1073 7.30136 17.0344 7.34815 16.987L9.94075 14.3486C10.0031 14.2853 10.0895 14.2757 10.159 14.3232L17.0934 19.5573C18.2289 20.3412 19.4975 20.8226 20.786 20.9652C20.9008 20.9778 21 20.8606 21 20.7133V17.3559C21 17.2276 20.9249 17.1232 20.8243 17.1073C20.0659 16.9853 19.326 16.6845 18.6569 16.222L12.6538 11.764C12.5291 11.6785 12.5135 11.4584 12.6241 11.346Z"
|
|
114
|
+
fill="currentColor"
|
|
115
|
+
/>
|
|
116
|
+
</svg>
|
|
117
|
+
</div>
|
|
118
|
+
<div>
|
|
119
|
+
<IconZai width="24" height="24" />
|
|
120
|
+
</div>
|
|
121
|
+
</div>
|
|
122
|
+
<a href="/auth">
|
|
123
|
+
<span>Get started with Zen </span>
|
|
124
|
+
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
125
|
+
<path
|
|
126
|
+
d="M6.5 12L17 12M13 16.5L17.5 12L13 7.5"
|
|
127
|
+
stroke="currentColor"
|
|
128
|
+
stroke-width="1.5"
|
|
129
|
+
stroke-linecap="square"
|
|
130
|
+
/>
|
|
131
|
+
</svg>
|
|
132
|
+
</a>
|
|
133
|
+
</div>
|
|
134
|
+
<div data-slot="pricing-copy">
|
|
135
|
+
<p>
|
|
136
|
+
<strong>Add $20 Pay as you go balance</strong> <span>(+$1.23 card processing fee)</span>
|
|
137
|
+
</p>
|
|
138
|
+
<p>Use with any agent. Set monthly spend limits. Cancel any time.</p>
|
|
139
|
+
</div>
|
|
140
|
+
</section>
|
|
141
|
+
|
|
142
|
+
<section data-component="comparison">
|
|
143
|
+
<video src={compareVideo} autoplay playsinline loop muted preload="auto" poster={compareVideoPoster}>
|
|
144
|
+
Your browser does not support the video tag.
|
|
145
|
+
</video>
|
|
146
|
+
</section>
|
|
147
|
+
|
|
148
|
+
<section data-component="problem">
|
|
149
|
+
<div data-slot="section-title">
|
|
150
|
+
<h3>What problem is Zen solving?</h3>
|
|
151
|
+
<p>
|
|
152
|
+
There are so many models available, but only a few work well with coding agents. Most providers
|
|
153
|
+
configure them differently with varying results.
|
|
154
|
+
</p>
|
|
155
|
+
</div>
|
|
156
|
+
<p>We're fixing this for everyone, not just JonsOC users.</p>
|
|
157
|
+
<ul>
|
|
158
|
+
<li>
|
|
159
|
+
<span>[*]</span> Testing select models and consulting their teams
|
|
160
|
+
</li>
|
|
161
|
+
<li>
|
|
162
|
+
<span>[*]</span> Working with providers to ensure they’re delivered properly
|
|
163
|
+
</li>
|
|
164
|
+
<li>
|
|
165
|
+
<span>[*]</span> Benchmarking all model-provider combinations we recommend
|
|
166
|
+
</li>
|
|
167
|
+
</ul>
|
|
168
|
+
</section>
|
|
169
|
+
|
|
170
|
+
<section data-component="how">
|
|
171
|
+
<div data-slot="section-title">
|
|
172
|
+
<h3>How Zen works</h3>
|
|
173
|
+
<p>While we suggest you use Zen with JonsOC, you can use Zen with any agent.</p>
|
|
174
|
+
</div>
|
|
175
|
+
<ul>
|
|
176
|
+
<li>
|
|
177
|
+
<span>[1]</span>
|
|
178
|
+
<div>
|
|
179
|
+
<strong>Sign up and add $20 balance</strong> - follow the{" "}
|
|
180
|
+
<a href="/docs/zen/#how-it-works" title="setup instructions">
|
|
181
|
+
setup instructions
|
|
182
|
+
</a>
|
|
183
|
+
</div>
|
|
184
|
+
</li>
|
|
185
|
+
<li>
|
|
186
|
+
<span>[2]</span>
|
|
187
|
+
<div>
|
|
188
|
+
<strong>Use Zen with transparent pricing</strong> - <a href="/docs/zen/#pricing">pay per request</a>{" "}
|
|
189
|
+
with zero markups
|
|
190
|
+
</div>
|
|
191
|
+
</li>
|
|
192
|
+
<li>
|
|
193
|
+
<span>[3]</span>
|
|
194
|
+
<div>
|
|
195
|
+
<strong>Auto-top up</strong> - when your balance reaches $5 we’ll automatically add $20
|
|
196
|
+
</div>
|
|
197
|
+
</li>
|
|
198
|
+
</ul>
|
|
199
|
+
</section>
|
|
200
|
+
|
|
201
|
+
<section data-component="privacy">
|
|
202
|
+
<div data-slot="privacy-title">
|
|
203
|
+
<h3>Your privacy is important to us</h3>
|
|
204
|
+
<div>
|
|
205
|
+
<span>[*]</span>
|
|
206
|
+
<p>
|
|
207
|
+
All Zen models are hosted in the US. Providers follow a zero-retention policy and do not use your data
|
|
208
|
+
for model training, with the <a href="/docs/zen/#privacy">following exceptions</a>.
|
|
209
|
+
</p>
|
|
210
|
+
</div>
|
|
211
|
+
</div>
|
|
212
|
+
</section>
|
|
213
|
+
|
|
214
|
+
<section data-component="testimonials">
|
|
215
|
+
{/*Dax*/}
|
|
216
|
+
<a href="https://x.com/thdxr/status/1973531687629017227">
|
|
217
|
+
<div data-slot="testimonial">
|
|
218
|
+
<div data-slot="name">
|
|
219
|
+
<img src={avatarDax} alt="" />
|
|
220
|
+
<strong>Dax Raad</strong>
|
|
221
|
+
<span>ex-CEO, Terminal Products</span>
|
|
222
|
+
</div>
|
|
223
|
+
<div data-slot="quote">
|
|
224
|
+
<span>@JonsOC</span> Zen has been life changing, it's truly a no-brainer.
|
|
225
|
+
</div>
|
|
226
|
+
</div>
|
|
227
|
+
</a>
|
|
228
|
+
{/*Jay*/}
|
|
229
|
+
<a href="https://x.com/jayair/status/1973530190870618456">
|
|
230
|
+
<div data-slot="testimonial">
|
|
231
|
+
<div data-slot="name">
|
|
232
|
+
<img src={avatarJay} alt="" />
|
|
233
|
+
<strong>Jay V</strong>
|
|
234
|
+
<span>ex-Founder, SEED, PM, Melt, Pop, Dapt, Cadmus, and ViewPoint</span>
|
|
235
|
+
</div>
|
|
236
|
+
<div data-slot="quote">
|
|
237
|
+
4 out of 5 people on our team love using <span>@JonsOC</span> Zen.
|
|
238
|
+
</div>
|
|
239
|
+
</div>
|
|
240
|
+
</a>
|
|
241
|
+
{/*Adam*/}
|
|
242
|
+
<a href="https://x.com/adamdotdev/status/1973732040718860563">
|
|
243
|
+
<div data-slot="testimonial">
|
|
244
|
+
<div data-slot="name">
|
|
245
|
+
<img src={avatarAdam} alt="" />
|
|
246
|
+
<strong>Adam Elmore</strong>
|
|
247
|
+
<span>ex-Hero, AWS</span>
|
|
248
|
+
</div>
|
|
249
|
+
<div data-slot="quote">
|
|
250
|
+
I can't recommend <span>@JonsOC</span> Zen enough. Seriously, it’s really good.
|
|
251
|
+
</div>
|
|
252
|
+
</div>
|
|
253
|
+
</a>
|
|
254
|
+
{/*David*/}
|
|
255
|
+
<a href="https://x.com/iamdavidhill/status/1973530568773214622">
|
|
256
|
+
<div data-slot="testimonial">
|
|
257
|
+
<div data-slot="name">
|
|
258
|
+
<img src={avatarDavid} alt="" />
|
|
259
|
+
<strong>David Hill</strong>
|
|
260
|
+
<span>ex-Head of Design, Laravel</span>
|
|
261
|
+
</div>
|
|
262
|
+
<div data-slot="quote">
|
|
263
|
+
With <span>@JonsOC</span> Zen I know all the models are tested and perfect for coding agents.
|
|
264
|
+
</div>
|
|
265
|
+
</div>
|
|
266
|
+
</a>
|
|
267
|
+
{/*Frank*/}
|
|
268
|
+
<a href="https://x.com/fanjiewang/status/1973530092736487756">
|
|
269
|
+
<div data-slot="testimonial">
|
|
270
|
+
<div data-slot="name">
|
|
271
|
+
<img src={avatarFrank} alt="" />
|
|
272
|
+
<strong>Frank Wang</strong>
|
|
273
|
+
<span>ex-Intern, Nvidia (4 times)</span>
|
|
274
|
+
</div>
|
|
275
|
+
<div data-slot="quote">I wish I was still at Nvidia.</div>
|
|
276
|
+
</div>
|
|
277
|
+
</a>
|
|
278
|
+
</section>
|
|
279
|
+
|
|
280
|
+
<section data-component="faq">
|
|
281
|
+
<div data-slot="section-title">
|
|
282
|
+
<h3>FAQ</h3>
|
|
283
|
+
</div>
|
|
284
|
+
<ul>
|
|
285
|
+
<li>
|
|
286
|
+
<Faq question="What is JonsOC Zen?">
|
|
287
|
+
Zen is a curated set of AI models tested and benchmarked for coding agents created by the team behind
|
|
288
|
+
JonsOC.
|
|
289
|
+
</Faq>
|
|
290
|
+
</li>
|
|
291
|
+
<li>
|
|
292
|
+
<Faq question="What makes Zen more accurate?">
|
|
293
|
+
Zen only provides models that have been specifically tested and benchmarked for coding agents. You
|
|
294
|
+
wouldn’t use a butter knife to cut steak, don’t use poor models for coding.
|
|
295
|
+
</Faq>
|
|
296
|
+
</li>
|
|
297
|
+
<li>
|
|
298
|
+
<Faq question="Is Zen cheaper?">
|
|
299
|
+
Zen is not for profit. Zen passes through the costs from the model providers to you. The higher Zen’s
|
|
300
|
+
usage the more JonsOC can negotiate better rates and pass those to you.
|
|
301
|
+
</Faq>
|
|
302
|
+
</li>
|
|
303
|
+
<li>
|
|
304
|
+
<Faq question="How much does Zen cost?">
|
|
305
|
+
Zen <a href="/docs/zen/#pricing">charges per request</a> with zero markups, so you pay exactly what
|
|
306
|
+
the model provider charges. Your total cost depends on usage, and you can set monthly spend limits in
|
|
307
|
+
your <a href="/auth">account</a>. To cover costs, JonsOC adds only a small payment processing fee of
|
|
308
|
+
$1.23 per $20 balance top-up.
|
|
309
|
+
</Faq>
|
|
310
|
+
</li>
|
|
311
|
+
<li>
|
|
312
|
+
<Faq question="What about data and privacy?">
|
|
313
|
+
All Zen models are hosted in the US. Providers follow a zero-retention policy and do not use your data
|
|
314
|
+
for model training, with the <a href="/docs/zen/#privacy">following exceptions</a>.
|
|
315
|
+
</Faq>
|
|
316
|
+
</li>
|
|
317
|
+
<li>
|
|
318
|
+
<Faq question="Can I set spend limits?">Yes, you can set monthly spending limits in your account.</Faq>
|
|
319
|
+
</li>
|
|
320
|
+
<li>
|
|
321
|
+
<Faq question="Can I cancel?">
|
|
322
|
+
Yes, you can disable billing at any time and use your remaining balance.
|
|
323
|
+
</Faq>
|
|
324
|
+
</li>
|
|
325
|
+
<li>
|
|
326
|
+
<Faq question="Can I use Zen with other coding agents?">
|
|
327
|
+
While Zen works great with JonsOC, you can use Zen with any agent. Follow the setup instructions in
|
|
328
|
+
your preferred coding agent.
|
|
329
|
+
</Faq>
|
|
330
|
+
</li>
|
|
331
|
+
</ul>
|
|
332
|
+
</section>
|
|
333
|
+
|
|
334
|
+
<EmailSignup />
|
|
335
|
+
|
|
336
|
+
<Footer />
|
|
337
|
+
</div>
|
|
338
|
+
</div>
|
|
339
|
+
|
|
340
|
+
<Legal />
|
|
341
|
+
</main>
|
|
342
|
+
)
|
|
343
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { Resource, waitUntil } from "@jonsoc/console-resource"
|
|
2
|
+
|
|
3
|
+
export function createDataDumper(sessionId: string, requestId: string, projectId: string) {
|
|
4
|
+
if (Resource.App.stage !== "production") return
|
|
5
|
+
if (sessionId === "") return
|
|
6
|
+
|
|
7
|
+
let data: Record<string, any> = { sessionId, requestId, projectId }
|
|
8
|
+
let metadata: Record<string, any> = { sessionId, requestId, projectId }
|
|
9
|
+
|
|
10
|
+
return {
|
|
11
|
+
provideModel: (model?: string) => {
|
|
12
|
+
data.modelName = model
|
|
13
|
+
metadata.modelName = model
|
|
14
|
+
},
|
|
15
|
+
provideRequest: (request: string) => (data.request = request),
|
|
16
|
+
provideResponse: (response: string) => (data.response = response),
|
|
17
|
+
provideStream: (chunk: string) => (data.response = (data.response ?? "") + chunk),
|
|
18
|
+
flush: () => {
|
|
19
|
+
if (!data.modelName) return
|
|
20
|
+
|
|
21
|
+
const timestamp = new Date().toISOString().replace(/[^0-9]/g, "")
|
|
22
|
+
const year = timestamp.substring(0, 4)
|
|
23
|
+
const month = timestamp.substring(4, 6)
|
|
24
|
+
const day = timestamp.substring(6, 8)
|
|
25
|
+
const hour = timestamp.substring(8, 10)
|
|
26
|
+
const minute = timestamp.substring(10, 12)
|
|
27
|
+
const second = timestamp.substring(12, 14)
|
|
28
|
+
|
|
29
|
+
waitUntil(
|
|
30
|
+
Resource.ZenDataNew.put(
|
|
31
|
+
`data/${data.modelName}/${year}/${month}/${day}/${hour}/${minute}/${second}/${requestId}.json`,
|
|
32
|
+
JSON.stringify({ timestamp, ...data }),
|
|
33
|
+
),
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
waitUntil(
|
|
37
|
+
Resource.ZenDataNew.put(
|
|
38
|
+
`meta/${data.modelName}/${sessionId}/${requestId}.json`,
|
|
39
|
+
JSON.stringify({ timestamp, ...metadata }),
|
|
40
|
+
),
|
|
41
|
+
)
|
|
42
|
+
},
|
|
43
|
+
}
|
|
44
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export class AuthError extends Error {}
|
|
2
|
+
export class CreditsError extends Error {}
|
|
3
|
+
export class MonthlyLimitError extends Error {}
|
|
4
|
+
export class SubscriptionError extends Error {
|
|
5
|
+
retryAfter?: number
|
|
6
|
+
constructor(message: string, retryAfter?: number) {
|
|
7
|
+
super(message)
|
|
8
|
+
this.retryAfter = retryAfter
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
export class UserLimitError extends Error {}
|
|
12
|
+
export class ModelError extends Error {}
|
|
13
|
+
export class RateLimitError extends Error {}
|