← Public packages
@kentcdodds/ai
Kody tool-using agent turns with Vercel AI SDK and Cloudflare AI Gateway.
src/legacy-value.ts
59 lines · 1.6 KB · TypeScriptimport { packageStorage } from 'kody:runtime'
import settings from 'kody:@kentcdodds/ai/settings'
const ownerSettingFields = {
cloudflareAccountId: 'accountId',
cloudflareAiGatewayId: 'gatewayId',
cloudflareAiModel: 'model',
} as const
export async function readLocalSetting(name: string): Promise<string> {
const storage = packageStorage()
const stored = await storage.get(name)
if (typeof stored === 'string' && stored.trim()) return stored.trim()
return ''
}
export async function readNamedSetting(name: string): Promise<string> {
const local = await readLocalSetting(name)
if (local) return local
return await readOwnerSetting(name)
}
async function readOwnerSetting(name: string): Promise<string> {
const field = ownerSettingFields[name as keyof typeof ownerSettingFields]
if (!field) return ''
try {
const ownerSettings = (await settings({})) as {
accountId?: unknown
gatewayId?: unknown
model?: unknown
} | null
const raw = ownerSettings?.[field]
const value = typeof raw === 'string' ? raw.trim() : ''
if (value) {
await packageStorage().set(name, value)
return value
}
} catch {
// Host snapshots should still fail clearly if the owning package has no id.
}
return ''
}
export async function writeNamedSetting(name: string, value: string) {
await packageStorage().set(name, value)
}
export async function migrateAiFromValues() {
const names = [
'cloudflareAccountId',
'cloudflareAiGatewayId',
'cloudflareAiModel',
]
const copied: Array<string> = []
for (const name of names) {
if (await readLocalSetting(name)) copied.push(name)
}
return { copied }
}