import configureLoop from './configure-loop.ts'
import createWebhook from './create-webhook.ts'
import draftLoop from './draft-loop.ts'
import handleWebhook from './handle-webhook.ts'
import listAnomalies from './list-anomalies.ts'
import listBranches from './list-branches.ts'
import listDatabases from './list-databases.ts'
import listOrganizations from './list-organizations.ts'
import listQueries from './list-queries.ts'
import pollAnomalies from './poll-anomalies.ts'
import request from './request.ts'
import runLoop from './run-loop.ts'
import smokeTest from './smoke-test.ts'
import { optionalString, requireRecord } from './types.ts'
type PlanetscaleAction =
| 'overview'
| 'smoke-test'
| 'draft-loop'
| 'run-loop'
| 'configure-loop'
| 'handle-webhook'
| 'poll-anomalies'
| 'create-webhook'
| 'list-organizations'
| 'list-databases'
| 'list-branches'
| 'list-anomalies'
| 'list-queries'
| 'request'
function overview() {
return {
name: '@kody/planetscale',
communityUrl: 'https://kody.codes/@kody/planetscale',
description:
'Turn PlanetScale Insights anomalies into GitHub issues, implementer PRs, and a human review ping.',
actions: [
'smoke-test',
'draft-loop',
'run-loop',
'configure-loop',
'handle-webhook',
'poll-anomalies',
'create-webhook',
'list-organizations',
'list-databases',
'list-branches',
'list-anomalies',
'list-queries',
'request',
],
loop: [
'Insights anomaly (webhook or poll)',
'GitHub issue',
'Cursor implementer PR',
'Reviewer agent',
'Human ping',
],
}
}
function asAction(value: string): PlanetscaleAction {
switch (value) {
case 'overview':
case 'smoke-test':
case 'draft-loop':
case 'run-loop':
case 'configure-loop':
case 'handle-webhook':
case 'poll-anomalies':
case 'create-webhook':
case 'list-organizations':
case 'list-databases':
case 'list-branches':
case 'list-anomalies':
case 'list-queries':
case 'request':
return value
default: {
const _never: never = value as never
throw new Error(`Unknown action: ${String(_never)}`)
}
}
}
/**
* PlanetScale Insights → GitHub issue → implementer PR → human ping.
* @example
* import planetscale from 'kody:@kody/planetscale'
* await planetscale({ action: 'smoke-test' })
*/
export default async function planetscale(
params: { action?: string } & Record<string, unknown> = {},
) {
const input = requireRecord(params, 'planetscale')
const action = asAction(optionalString(input.action, 'action') ?? 'overview')
switch (action) {
case 'overview':
return overview()
case 'smoke-test':
return smokeTest(input)
case 'draft-loop':
return draftLoop(input)
case 'run-loop':
return runLoop(input)
case 'configure-loop':
return configureLoop(input)
case 'handle-webhook':
return handleWebhook(input)
case 'poll-anomalies':
return pollAnomalies(input)
case 'create-webhook':
return createWebhook(input)
case 'list-organizations':
return listOrganizations(input)
case 'list-databases':
return listDatabases(input)
case 'list-branches':
return listBranches(input)
case 'list-anomalies':
return listAnomalies(input)
case 'list-queries':
return listQueries(input)
case 'request':
return request(input)
default: {
const _never: never = action
throw new Error(`Unknown action: ${String(_never)}`)
}
}
}