Spaces:
Sleeping
Sleeping
| import process from 'node:process'; | |
| export const TEMPLATE_AGENT_ID = 'sin-code-database'; | |
| export const TEMPLATE_AGENT_NAME = 'SIN-Code-Database'; | |
| export const TEMPLATE_AGENT_NAMESPACE = 'sin.code.database'; | |
| export const TEMPLATE_AGENT_DESCRIPTION = 'Elite 2026 Database Architect. Writes optimal SQL schemas, Row Level Security (RLS) policies, Postgres Edge Functions, vector embedding tables, and migration files for Supabase-native projects.'; | |
| export const TEMPLATE_AGENT_VERSION = '2026.03.09'; | |
| export const TEMPLATE_AGENT_DEFAULT_HOST = '127.0.0.1'; | |
| export const TEMPLATE_AGENT_DEFAULT_PORT = Number(process.env.PORT || 8000); | |
| export const TEMPLATE_AGENT_EXECUTOR_CONTRACT = 'services/workers/hf_executor_contract.json'; | |
| export const TEMPLATE_AGENT_CAPABILITY_REGISTRY = 'control_plane.capabilities'; | |
| export const TEMPLATE_AGENT_SKILLS = [ | |
| { | |
| id: 'sin.code.database.health', | |
| name: 'Health', | |
| description: 'Check base agent readiness and identity.', | |
| }, | |
| { | |
| id: 'sin.code.database.onboarding.status', | |
| name: 'Onboarding Status', | |
| description: 'Read persisted onboarding state.', | |
| }, | |
| { | |
| id: 'sin.code.database.onboarding.save', | |
| name: 'Onboarding Save', | |
| description: 'Persist onboarding defaults for future autonomous runs.', | |
| }, | |
| { | |
| id: 'sin.code.database.room13.claim', | |
| name: 'Room-13 Claim', | |
| description: 'Register worker and claim next task from Room-13 coordinator.', | |
| }, | |
| ] as const; | |
| export function resolveTemplateAgentConfig() { | |
| const host = | |
| process.env.SIN_CODE_DATABASE_HOST?.trim() || | |
| (process.env.PORT ? '0.0.0.0' : process.env.HOST?.trim() || TEMPLATE_AGENT_DEFAULT_HOST); | |
| const port = parseInteger(process.env.SIN_CODE_DATABASE_PORT, parseInteger(process.env.PORT, TEMPLATE_AGENT_DEFAULT_PORT)); | |
| const fallbackPublicHost = host === '0.0.0.0' ? '127.0.0.1' : host; | |
| const publicBaseUrl = | |
| process.env.SIN_CODE_DATABASE_PUBLIC_BASE_URL?.trim() || | |
| (process.env.SPACE_HOST?.trim() ? `https://${process.env.SPACE_HOST.trim()}` : `http://${fallbackPublicHost}:${port}`); | |
| return { host, port, publicBaseUrl: publicBaseUrl.replace(/\/+$/, '') }; | |
| } | |
| export function buildAgentCard(baseUrl: string) { | |
| const normalizedBaseUrl = baseUrl.replace(/\/+$/, ''); | |
| const rpcUrl = `${normalizedBaseUrl}/a2a/v1`; | |
| return { | |
| name: TEMPLATE_AGENT_NAME, | |
| description: TEMPLATE_AGENT_DESCRIPTION, | |
| version: TEMPLATE_AGENT_VERSION, | |
| documentationUrl: normalizedBaseUrl, | |
| url: rpcUrl, | |
| capabilities: { streaming: false, pushNotifications: false }, | |
| defaultInputModes: ['text/plain', 'application/json'], | |
| defaultOutputModes: ['text/plain', 'application/json'], | |
| metadata: { | |
| projectionMode: 'control-plane-first', | |
| capabilityRegistry: TEMPLATE_AGENT_CAPABILITY_REGISTRY, | |
| executorContract: TEMPLATE_AGENT_EXECUTOR_CONTRACT, | |
| }, | |
| skills: [...TEMPLATE_AGENT_SKILLS], | |
| supportedInterfaces: [{ url: rpcUrl, protocolBinding: 'JSONRPC', protocolVersion: '1.0' }], | |
| }; | |
| } | |
| function parseInteger(input: string | undefined, fallback: number) { | |
| const parsed = Number.parseInt(String(input || '').trim(), 10); | |
| return Number.isFinite(parsed) ? parsed : fallback; | |
| } | |