64 lines
2.4 KiB
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);
|