sin-code-integration / src /metadata.ts
GitHub Actions
Deploy SIN-Code-Integration from GitHub Actions
a00031a
Raw
History Blame Contribute Delete
3.21 kB
import process from 'node:process';
export const TEMPLATE_AGENT_ID = 'sin-code-integration';
export const TEMPLATE_AGENT_NAME = 'SIN-Code-Integration';
export const TEMPLATE_AGENT_NAMESPACE = 'sin.code.integration';
export const TEMPLATE_AGENT_DESCRIPTION = 'Elite 2026 Integration Architect. Authors project-specific n8n workflow JSONs, wires webhooks, manages third-party API integration logic, and implements data transformation steps between services.';
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.integration.health',
name: 'Health',
description: 'Check base agent readiness and identity.',
},
{
id: 'sin.code.integration.onboarding.status',
name: 'Onboarding Status',
description: 'Read persisted onboarding state.',
},
{
id: 'sin.code.integration.onboarding.save',
name: 'Onboarding Save',
description: 'Persist onboarding defaults for future autonomous runs.',
},
{
id: 'sin.code.integration.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_INTEGRATION_HOST?.trim() ||
(process.env.PORT ? '0.0.0.0' : process.env.HOST?.trim() || TEMPLATE_AGENT_DEFAULT_HOST);
const port = parseInteger(process.env.SIN_CODE_INTEGRATION_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_INTEGRATION_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;
}