arcadiasuite/migrations/0003_agentic_skills.sql

64 lines
2.4 KiB
SQL

-- Migration 0003: Agentic Suite — Skills (POO) + Skill Executions
-- Fase 1 do planejamento estratégico Arcádia Agentic Suite
CREATE TABLE IF NOT EXISTS "skills" (
"id" UUID PRIMARY KEY DEFAULT gen_random_uuid(),
"tenant_id" INTEGER,
"company_id" INTEGER,
"user_id" VARCHAR,
"name" VARCHAR(255) NOT NULL,
"slug" VARCHAR(255) NOT NULL,
"namespace" VARCHAR(20) NOT NULL DEFAULT 'tenant',
"description" TEXT,
"version" VARCHAR(20) NOT NULL DEFAULT '1.0.0',
"tags" TEXT[] DEFAULT '{}',
"extends" TEXT[] DEFAULT '{}',
"implements" TEXT[] DEFAULT '{}',
"dependencies" JSONB DEFAULT '[]',
"execute_visibility" VARCHAR(20) DEFAULT 'public',
"parameters_visibility" VARCHAR(20) DEFAULT 'public',
"trigger_type" VARCHAR(30),
"trigger_config" JSONB,
"parameters_schema" JSONB DEFAULT '{}',
"return_schema" JSONB DEFAULT '{}',
"body" TEXT,
"status" VARCHAR(20) NOT NULL DEFAULT 'active',
"is_system" BOOLEAN DEFAULT false,
"created_by" VARCHAR,
"created_at" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
-- Índice único: mesmo slug não pode repetir dentro do mesmo tenant
CREATE UNIQUE INDEX IF NOT EXISTS "skills_tenant_slug_idx"
ON "skills"("tenant_id", "slug")
WHERE "tenant_id" IS NOT NULL;
-- Skills de sistema (sem tenant) também precisam slug único
CREATE UNIQUE INDEX IF NOT EXISTS "skills_system_slug_idx"
ON "skills"("slug")
WHERE "tenant_id" IS NULL AND "is_system" = true;
CREATE TABLE IF NOT EXISTS "skill_executions" (
"id" UUID PRIMARY KEY DEFAULT gen_random_uuid(),
"skill_id" UUID NOT NULL REFERENCES "skills"("id") ON DELETE CASCADE,
"tenant_id" INTEGER,
"triggered_by" VARCHAR(30) NOT NULL DEFAULT 'manual',
"triggered_by_user_id" VARCHAR,
"triggered_by_agent_id" VARCHAR(100),
"parameters" JSONB DEFAULT '{}',
"result" JSONB,
"error" TEXT,
"status" VARCHAR(20) NOT NULL DEFAULT 'pending',
"duration_ms" INTEGER,
"steps_count" INTEGER DEFAULT 0,
"correlation_id" UUID DEFAULT gen_random_uuid(),
"audit_hash" VARCHAR(64),
"started_at" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
"completed_at" TIMESTAMP
);
CREATE INDEX IF NOT EXISTS "skill_executions_skill_id_idx" ON "skill_executions"("skill_id");
CREATE INDEX IF NOT EXISTS "skill_executions_tenant_id_idx" ON "skill_executions"("tenant_id");
CREATE INDEX IF NOT EXISTS "skill_executions_started_at_idx" ON "skill_executions"("started_at" DESC);