summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorFrank <[email protected]>2025-11-03 15:43:52 -0500
committerFrank <[email protected]>2025-11-03 15:44:06 -0500
commit05232ead938b7cc7dcf75afa9470effef0ed4251 (patch)
tree6005e5686e1bd6a525d90387b8932d345d4846b1
parent7652a9606413f0d6e9af2c65aeee692c44996006 (diff)
downloadopencode-05232ead938b7cc7dcf75afa9470effef0ed4251.tar.gz
opencode-05232ead938b7cc7dcf75afa9470effef0ed4251.zip
zen: wip
-rw-r--r--infra/console.ts14
-rw-r--r--packages/console/app/src/routes/zen/util/handler.ts8
-rwxr-xr-xpackages/console/core/script/promote-models.ts16
-rwxr-xr-xpackages/console/core/script/update-models.ts22
-rw-r--r--packages/console/core/src/model.ts6
-rw-r--r--packages/console/core/sst-env.d.ts97
-rw-r--r--packages/console/function/sst-env.d.ts10
-rw-r--r--packages/console/resource/sst-env.d.ts10
-rw-r--r--packages/function/sst-env.d.ts10
-rw-r--r--packages/script/sst-env.d.ts9
-rw-r--r--packages/sdk/python/sst.pyi83
-rw-r--r--packages/slack/sst-env.d.ts10
-rw-r--r--packages/ui/sst-env.d.ts9
-rw-r--r--sst-env.d.ts10
14 files changed, 285 insertions, 29 deletions
diff --git a/infra/console.ts b/infra/console.ts
index 281bafad4..7fbf92bfd 100644
--- a/infra/console.ts
+++ b/infra/console.ts
@@ -61,7 +61,13 @@ export const auth = new sst.cloudflare.Worker("AuthApi", {
domain: `auth.${domain}`,
handler: "packages/console/function/src/auth.ts",
url: true,
- link: [database, authStorage, GITHUB_CLIENT_ID_CONSOLE, GITHUB_CLIENT_SECRET_CONSOLE, GOOGLE_CLIENT_ID],
+ link: [
+ database,
+ authStorage,
+ GITHUB_CLIENT_ID_CONSOLE,
+ GITHUB_CLIENT_SECRET_CONSOLE,
+ GOOGLE_CLIENT_ID,
+ ],
})
////////////////
@@ -97,7 +103,8 @@ export const stripeWebhook = new stripe.WebhookEndpoint("StripeWebhookEndpoint",
],
})
-const ZEN_MODELS = new sst.Secret("ZEN_MODELS")
+const ZEN_MODELS1 = new sst.Secret("ZEN_MODELS1")
+const ZEN_MODELS2 = new sst.Secret("ZEN_MODELS2")
const STRIPE_SECRET_KEY = new sst.Secret("STRIPE_SECRET_KEY")
const AUTH_API_URL = new sst.Linkable("AUTH_API_URL", {
properties: { value: auth.url.apply((url) => url!) },
@@ -130,7 +137,8 @@ new sst.cloudflare.x.SolidStart("Console", {
AUTH_API_URL,
STRIPE_WEBHOOK_SECRET,
STRIPE_SECRET_KEY,
- ZEN_MODELS,
+ ZEN_MODELS1,
+ ZEN_MODELS2,
EMAILOCTOPUS_API_KEY,
AWS_SES_ACCESS_KEY_ID,
AWS_SES_SECRET_ACCESS_KEY,
diff --git a/packages/console/app/src/routes/zen/util/handler.ts b/packages/console/app/src/routes/zen/util/handler.ts
index 3163de346..ebf42f4b2 100644
--- a/packages/console/app/src/routes/zen/util/handler.ts
+++ b/packages/console/app/src/routes/zen/util/handler.ts
@@ -239,10 +239,10 @@ export async function handler(
.filter((provider) => !provider.disabled)
.flatMap((provider) => Array<typeof provider>(provider.weight ?? 1).fill(provider))
- // Use last character of IP address to select a provider
- const lastChar = ip.charCodeAt(ip.length - 1) || 0
- const index = lastChar % providers.length
- const provider = providers[index]
+ // Use the last 2 characters of IP address to select a provider
+ const lastChars = ip.slice(-2)
+ const index = parseInt(lastChars, 16) % providers.length
+ const provider = providers[index || 0]
if (!(provider.id in zenData.providers)) {
throw new ModelError(`Provider ${provider.id} not supported`)
diff --git a/packages/console/core/script/promote-models.ts b/packages/console/core/script/promote-models.ts
index 67c2b6f3e..717813e40 100755
--- a/packages/console/core/script/promote-models.ts
+++ b/packages/console/core/script/promote-models.ts
@@ -11,14 +11,20 @@ const root = path.resolve(process.cwd(), "..", "..", "..")
// read the secret
const ret = await $`bun sst secret list`.cwd(root).text()
-const value = ret
+const value1 = ret
.split("\n")
- .find((line) => line.startsWith("ZEN_MODELS"))
+ .find((line) => line.startsWith("ZEN_MODELS1"))
?.split("=")[1]
-if (!value) throw new Error("ZEN_MODELS not found")
+const value2 = ret
+ .split("\n")
+ .find((line) => line.startsWith("ZEN_MODELS2"))
+ ?.split("=")[1]
+if (!value1) throw new Error("ZEN_MODELS1 not found")
+if (!value2) throw new Error("ZEN_MODELS2 not found")
// validate value
-ZenData.validate(JSON.parse(value))
+ZenData.validate(JSON.parse(value1 + value2))
// update the secret
-await $`bun sst secret set ZEN_MODELS ${value} --stage ${stage}`
+await $`bun sst secret set ZEN_MODELS1 ${value1} --stage ${stage}`
+await $`bun sst secret set ZEN_MODELS2 ${value2} --stage ${stage}`
diff --git a/packages/console/core/script/update-models.ts b/packages/console/core/script/update-models.ts
index 939af616e..e7a245515 100755
--- a/packages/console/core/script/update-models.ts
+++ b/packages/console/core/script/update-models.ts
@@ -10,23 +10,29 @@ const models = await $`bun sst secret list`.cwd(root).text()
console.log("models", models)
// read the line starting with "ZEN_MODELS"
-const oldValue = models
+const oldValue1 = models
.split("\n")
- .find((line) => line.startsWith("ZEN_MODELS"))
+ .find((line) => line.startsWith("ZEN_MODELS1"))
?.split("=")[1]
-if (!oldValue) throw new Error("ZEN_MODELS not found")
-console.log("oldValue", oldValue)
+const oldValue2 = models
+ .split("\n")
+ .find((line) => line.startsWith("ZEN_MODELS2"))
+ ?.split("=")[1]
+if (!oldValue1) throw new Error("ZEN_MODELS1 not found")
+if (!oldValue2) throw new Error("ZEN_MODELS2 not found")
// store the prettified json to a temp file
const filename = `models-${Date.now()}.json`
const tempFile = Bun.file(path.join(os.tmpdir(), filename))
-await tempFile.write(JSON.stringify(JSON.parse(oldValue), null, 2))
+await tempFile.write(JSON.stringify(JSON.parse(oldValue1 + oldValue2), null, 2))
console.log("tempFile", tempFile.name)
// open temp file in vim and read the file on close
await $`vim ${tempFile.name}`
-const newValue = JSON.parse(await tempFile.text())
-ZenData.validate(newValue)
+const newValue = JSON.stringify(JSON.parse(await tempFile.text()))
+ZenData.validate(JSON.parse(newValue))
// update the secret
-await $`bun sst secret set ZEN_MODELS ${JSON.stringify(newValue)}`
+const mid = Math.floor(newValue.length / 2)
+await $`bun sst secret set ZEN_MODELS1 ${newValue.slice(0, mid)}`
+await $`bun sst secret set ZEN_MODELS2 ${newValue.slice(mid)}`
diff --git a/packages/console/core/src/model.ts b/packages/console/core/src/model.ts
index 300f92ed0..118f7401d 100644
--- a/packages/console/core/src/model.ts
+++ b/packages/console/core/src/model.ts
@@ -47,7 +47,7 @@ export namespace ZenData {
})
export const list = fn(z.void(), () => {
- const json = JSON.parse(Resource.ZEN_MODELS.value)
+ const json = JSON.parse(Resource.ZEN_MODELS1.value + Resource.ZEN_MODELS2.value)
return ModelsSchema.parse(json)
})
}
@@ -56,7 +56,9 @@ export namespace Model {
export const enable = fn(z.object({ model: z.string() }), ({ model }) => {
Actor.assertAdmin()
return Database.use((db) =>
- db.delete(ModelTable).where(and(eq(ModelTable.workspaceID, Actor.workspace()), eq(ModelTable.model, model))),
+ db
+ .delete(ModelTable)
+ .where(and(eq(ModelTable.workspaceID, Actor.workspace()), eq(ModelTable.model, model))),
)
})
diff --git a/packages/console/core/sst-env.d.ts b/packages/console/core/sst-env.d.ts
index 9b9de7327..01407434e 100644
--- a/packages/console/core/sst-env.d.ts
+++ b/packages/console/core/sst-env.d.ts
@@ -3,7 +3,102 @@
/* eslint-disable */
/* deno-fmt-ignore-file */
-/// <reference path="../../../sst-env.d.ts" />
+import "sst"
+declare module "sst" {
+ export interface Resource {
+ "ADMIN_SECRET": {
+ "type": "sst.sst.Secret"
+ "value": string
+ }
+ "AUTH_API_URL": {
+ "type": "sst.sst.Linkable"
+ "value": string
+ }
+ "AWS_SES_ACCESS_KEY_ID": {
+ "type": "sst.sst.Secret"
+ "value": string
+ }
+ "AWS_SES_SECRET_ACCESS_KEY": {
+ "type": "sst.sst.Secret"
+ "value": string
+ }
+ "Console": {
+ "type": "sst.cloudflare.SolidStart"
+ "url": string
+ }
+ "Database": {
+ "database": string
+ "host": string
+ "password": string
+ "port": number
+ "type": "sst.sst.Linkable"
+ "username": string
+ }
+ "Desktop": {
+ "type": "sst.cloudflare.StaticSite"
+ "url": string
+ }
+ "EMAILOCTOPUS_API_KEY": {
+ "type": "sst.sst.Secret"
+ "value": string
+ }
+ "GITHUB_APP_ID": {
+ "type": "sst.sst.Secret"
+ "value": string
+ }
+ "GITHUB_APP_PRIVATE_KEY": {
+ "type": "sst.sst.Secret"
+ "value": string
+ }
+ "GITHUB_CLIENT_ID_CONSOLE": {
+ "type": "sst.sst.Secret"
+ "value": string
+ }
+ "GITHUB_CLIENT_SECRET_CONSOLE": {
+ "type": "sst.sst.Secret"
+ "value": string
+ }
+ "GOOGLE_CLIENT_ID": {
+ "type": "sst.sst.Secret"
+ "value": string
+ }
+ "HONEYCOMB_API_KEY": {
+ "type": "sst.sst.Secret"
+ "value": string
+ }
+ "STRIPE_SECRET_KEY": {
+ "type": "sst.sst.Secret"
+ "value": string
+ }
+ "STRIPE_WEBHOOK_SECRET": {
+ "type": "sst.sst.Linkable"
+ "value": string
+ }
+ "Web": {
+ "type": "sst.cloudflare.Astro"
+ "url": string
+ }
+ "ZEN_MODELS1": {
+ "type": "sst.sst.Secret"
+ "value": string
+ }
+ "ZEN_MODELS2": {
+ "type": "sst.sst.Secret"
+ "value": string
+ }
+ }
+}
+// cloudflare
+import * as cloudflare from "@cloudflare/workers-types";
+declare module "sst" {
+ export interface Resource {
+ "Api": cloudflare.Service
+ "AuthApi": cloudflare.Service
+ "AuthStorage": cloudflare.KVNamespace
+ "Bucket": cloudflare.R2Bucket
+ "LogProcessor": cloudflare.Service
+ }
+}
import "sst"
export {} \ No newline at end of file
diff --git a/packages/console/function/sst-env.d.ts b/packages/console/function/sst-env.d.ts
index 6a5d2bbf4..01407434e 100644
--- a/packages/console/function/sst-env.d.ts
+++ b/packages/console/function/sst-env.d.ts
@@ -6,6 +6,10 @@
import "sst"
declare module "sst" {
export interface Resource {
+ "ADMIN_SECRET": {
+ "type": "sst.sst.Secret"
+ "value": string
+ }
"AUTH_API_URL": {
"type": "sst.sst.Linkable"
"value": string
@@ -74,7 +78,11 @@ declare module "sst" {
"type": "sst.cloudflare.Astro"
"url": string
}
- "ZEN_MODELS": {
+ "ZEN_MODELS1": {
+ "type": "sst.sst.Secret"
+ "value": string
+ }
+ "ZEN_MODELS2": {
"type": "sst.sst.Secret"
"value": string
}
diff --git a/packages/console/resource/sst-env.d.ts b/packages/console/resource/sst-env.d.ts
index 6a5d2bbf4..01407434e 100644
--- a/packages/console/resource/sst-env.d.ts
+++ b/packages/console/resource/sst-env.d.ts
@@ -6,6 +6,10 @@
import "sst"
declare module "sst" {
export interface Resource {
+ "ADMIN_SECRET": {
+ "type": "sst.sst.Secret"
+ "value": string
+ }
"AUTH_API_URL": {
"type": "sst.sst.Linkable"
"value": string
@@ -74,7 +78,11 @@ declare module "sst" {
"type": "sst.cloudflare.Astro"
"url": string
}
- "ZEN_MODELS": {
+ "ZEN_MODELS1": {
+ "type": "sst.sst.Secret"
+ "value": string
+ }
+ "ZEN_MODELS2": {
"type": "sst.sst.Secret"
"value": string
}
diff --git a/packages/function/sst-env.d.ts b/packages/function/sst-env.d.ts
index 6a5d2bbf4..01407434e 100644
--- a/packages/function/sst-env.d.ts
+++ b/packages/function/sst-env.d.ts
@@ -6,6 +6,10 @@
import "sst"
declare module "sst" {
export interface Resource {
+ "ADMIN_SECRET": {
+ "type": "sst.sst.Secret"
+ "value": string
+ }
"AUTH_API_URL": {
"type": "sst.sst.Linkable"
"value": string
@@ -74,7 +78,11 @@ declare module "sst" {
"type": "sst.cloudflare.Astro"
"url": string
}
- "ZEN_MODELS": {
+ "ZEN_MODELS1": {
+ "type": "sst.sst.Secret"
+ "value": string
+ }
+ "ZEN_MODELS2": {
"type": "sst.sst.Secret"
"value": string
}
diff --git a/packages/script/sst-env.d.ts b/packages/script/sst-env.d.ts
new file mode 100644
index 000000000..b6a7e9066
--- /dev/null
+++ b/packages/script/sst-env.d.ts
@@ -0,0 +1,9 @@
+/* This file is auto-generated by SST. Do not edit. */
+/* tslint:disable */
+/* eslint-disable */
+/* deno-fmt-ignore-file */
+
+/// <reference path="../../sst-env.d.ts" />
+
+import "sst"
+export {} \ No newline at end of file
diff --git a/packages/sdk/python/sst.pyi b/packages/sdk/python/sst.pyi
new file mode 100644
index 000000000..c64110c5b
--- /dev/null
+++ b/packages/sdk/python/sst.pyi
@@ -0,0 +1,83 @@
+# Automatically generated by SST
+# pylint: disable=all
+from typing import Any
+
+class Resource:
+ class ADMIN_SECRET:
+ type: str
+ value: str
+ class AUTH_API_URL:
+ type: str
+ value: str
+ class AWS_SES_ACCESS_KEY_ID:
+ type: str
+ value: str
+ class AWS_SES_SECRET_ACCESS_KEY:
+ type: str
+ value: str
+ class Api:
+ type: str
+ url: str
+ class App:
+ name: str
+ stage: str
+ class AuthApi:
+ type: str
+ url: str
+ class AuthStorage:
+ type: str
+ class Bucket:
+ name: str
+ type: str
+ class Console:
+ type: str
+ url: str
+ class Database:
+ database: str
+ host: str
+ password: str
+ port: float
+ type: str
+ username: str
+ class Desktop:
+ type: str
+ url: str
+ class EMAILOCTOPUS_API_KEY:
+ type: str
+ value: str
+ class GITHUB_APP_ID:
+ type: str
+ value: str
+ class GITHUB_APP_PRIVATE_KEY:
+ type: str
+ value: str
+ class GITHUB_CLIENT_ID_CONSOLE:
+ type: str
+ value: str
+ class GITHUB_CLIENT_SECRET_CONSOLE:
+ type: str
+ value: str
+ class GOOGLE_CLIENT_ID:
+ type: str
+ value: str
+ class HONEYCOMB_API_KEY:
+ type: str
+ value: str
+ class LogProcessor:
+ type: str
+ class STRIPE_SECRET_KEY:
+ type: str
+ value: str
+ class STRIPE_WEBHOOK_SECRET:
+ type: str
+ value: str
+ class Web:
+ type: str
+ url: str
+ class ZEN_MODELS1:
+ type: str
+ value: str
+ class ZEN_MODELS2:
+ type: str
+ value: str
+
diff --git a/packages/slack/sst-env.d.ts b/packages/slack/sst-env.d.ts
index cde5429a6..b6a7e9066 100644
--- a/packages/slack/sst-env.d.ts
+++ b/packages/slack/sst-env.d.ts
@@ -1,3 +1,9 @@
-/// <reference types="../../../sst-env.d.ts" />
+/* This file is auto-generated by SST. Do not edit. */
+/* tslint:disable */
+/* eslint-disable */
+/* deno-fmt-ignore-file */
-export {}
+/// <reference path="../../sst-env.d.ts" />
+
+import "sst"
+export {} \ No newline at end of file
diff --git a/packages/ui/sst-env.d.ts b/packages/ui/sst-env.d.ts
new file mode 100644
index 000000000..b6a7e9066
--- /dev/null
+++ b/packages/ui/sst-env.d.ts
@@ -0,0 +1,9 @@
+/* This file is auto-generated by SST. Do not edit. */
+/* tslint:disable */
+/* eslint-disable */
+/* deno-fmt-ignore-file */
+
+/// <reference path="../../sst-env.d.ts" />
+
+import "sst"
+export {} \ No newline at end of file
diff --git a/sst-env.d.ts b/sst-env.d.ts
index a34d687da..14e3a2a5d 100644
--- a/sst-env.d.ts
+++ b/sst-env.d.ts
@@ -5,6 +5,10 @@
declare module "sst" {
export interface Resource {
+ "ADMIN_SECRET": {
+ "type": "sst.sst.Secret"
+ "value": string
+ }
"AUTH_API_URL": {
"type": "sst.sst.Linkable"
"value": string
@@ -91,7 +95,11 @@ declare module "sst" {
"type": "sst.cloudflare.Astro"
"url": string
}
- "ZEN_MODELS": {
+ "ZEN_MODELS1": {
+ "type": "sst.sst.Secret"
+ "value": string
+ }
+ "ZEN_MODELS2": {
"type": "sst.sst.Secret"
"value": string
}