|
|
|
|
|
|
| const STRING = 3
|
| const NUMBER = 10
|
| const SUB_COMMAND = 1
|
|
|
| const AGENT_CHOICES = [
|
| { name: 'RELAY β your plain-English guide', value: 'bridge' },
|
| { name: 'AXIOM β finance & money pools', value: 'finance' },
|
| { name: 'VAULT β treasury & approvals', value: 'treasury' },
|
| { name: 'NEXUS β deals & CRM pipeline', value: 'crm' },
|
| { name: 'FORGE β vendors & procurement', value: 'procurement' },
|
| { name: 'HERALD β event infrastructure', value: 'bifrost' },
|
| { name: 'TENSOR β anomaly detection & ML', value: 'ml' },
|
| { name: 'SENTINEL β risk & compliance', value: 'risk' },
|
| { name: 'LEDGE β audit & permanent record', value: 'auditor' },
|
| { name: 'ATLAS β system ops & tier gating', value: 'operator' },
|
| { name: 'QUILL β content & narrative engine', value: 'scriptwriter' },
|
| ]
|
|
|
| const COMMANDS = [
|
| {
|
| name: 'ask',
|
| description: 'Ask any of the 11 SnapKitty agents a question from Discord',
|
| options: [
|
| { name: 'agent', description: 'Which agent to route to', type: STRING, required: true, choices: AGENT_CHOICES },
|
| { name: 'message', description: 'Your question', type: STRING, required: true },
|
| ],
|
| },
|
| {
|
| name: 'pool',
|
| description: 'Money pool management β create, fund, and track capital pools',
|
| options: [
|
| { name: 'create', description: 'Create a new money pool', type: SUB_COMMAND,
|
| options: [
|
| { name: 'name', description: 'Pool name', type: STRING, required: true },
|
| { name: 'purpose', description: 'What it is for', type: STRING, required: false },
|
| { name: 'goal', description: 'Target USD amount', type: NUMBER, required: false },
|
| ] },
|
| { name: 'list', description: 'List all active pools', type: SUB_COMMAND },
|
| { name: 'fund', description: 'Add funds to a pool', type: SUB_COMMAND,
|
| options: [
|
| { name: 'name', description: 'Pool name', type: STRING, required: true },
|
| { name: 'amount', description: 'Amount to add', type: NUMBER, required: true },
|
| ] },
|
| { name: 'close', description: 'Close a pool', type: SUB_COMMAND,
|
| options: [{ name: 'name', description: 'Pool name', type: STRING, required: true }] },
|
| ],
|
| },
|
| { name: 'tier', description: 'Current fundability tier status and blockers' },
|
| { name: 'agents', description: 'Plain-English directory of all 11 SnapKitty agents' },
|
| { name: 'status', description: 'System health β Bifrost, database, infrastructure' },
|
| { name: 'seal', description: 'Last decision seal β event type, risk, timestamp' },
|
| { name: 'audit', description: 'Audit trail β last 5 Bifrost events with risk scores' },
|
| { name: 'merkle', description: 'Merkle root and WORM chain entry count' },
|
| ]
|
|
|
| async function register() {
|
| const { DISCORD_BOT_TOKEN, DISCORD_APP_ID } = process.env
|
| if (!DISCORD_BOT_TOKEN || !DISCORD_APP_ID) {
|
| console.error('Missing DISCORD_BOT_TOKEN or DISCORD_APP_ID in environment')
|
| process.exit(1)
|
| }
|
|
|
| const url = `https://discord.com/api/v10/applications/${DISCORD_APP_ID}/commands`
|
| const res = await fetch(url, {
|
| method: 'PUT',
|
| headers: { Authorization: `Bot ${DISCORD_BOT_TOKEN}`, 'Content-Type': 'application/json' },
|
| body: JSON.stringify(COMMANDS),
|
| })
|
|
|
| const data = await res.json() as any[]
|
| if (!res.ok) { console.error('Discord error:', data); process.exit(1) }
|
|
|
| console.log(`Registered ${data.length} commands:`)
|
| data.forEach((c: any) => console.log(` /${c.name}`))
|
| }
|
|
|
| register().catch(console.error)
|
|
|