feat: align agent/microdao model - add is_orchestrator, is_platform, hierarchy
This commit is contained in:
91
migrations/026_align_agent_microdao_model.sql
Normal file
91
migrations/026_align_agent_microdao_model.sql
Normal file
@@ -0,0 +1,91 @@
|
||||
-- Migration: Align Agent/MicroDAO model
|
||||
-- Purpose: Standardize fields for Agent Console, Citizens, MicroDAO Dashboard
|
||||
-- Date: 2025-11-28
|
||||
|
||||
-- ============================================================================
|
||||
-- AGENTS TABLE
|
||||
-- ============================================================================
|
||||
|
||||
-- Add is_orchestrator flag (agent can create/manage microDAOs)
|
||||
ALTER TABLE agents
|
||||
ADD COLUMN IF NOT EXISTS is_orchestrator boolean NOT NULL DEFAULT false;
|
||||
|
||||
-- Create index for orchestrator lookup
|
||||
CREATE INDEX IF NOT EXISTS idx_agents_is_orchestrator ON agents(is_orchestrator) WHERE is_orchestrator = true;
|
||||
|
||||
-- Update existing orchestrators based on kind
|
||||
UPDATE agents
|
||||
SET is_orchestrator = true
|
||||
WHERE kind = 'orchestrator'
|
||||
AND is_orchestrator = false;
|
||||
|
||||
-- ============================================================================
|
||||
-- MICRODAOS TABLE
|
||||
-- ============================================================================
|
||||
|
||||
-- Add is_platform flag (microDAO is a platform/district)
|
||||
ALTER TABLE microdaos
|
||||
ADD COLUMN IF NOT EXISTS is_platform boolean NOT NULL DEFAULT false;
|
||||
|
||||
-- Add orchestrator_agent_id as alias/copy of owner_agent_id for clarity
|
||||
-- (keeping owner_agent_id for backward compatibility)
|
||||
ALTER TABLE microdaos
|
||||
ADD COLUMN IF NOT EXISTS orchestrator_agent_id text;
|
||||
|
||||
-- Copy owner_agent_id to orchestrator_agent_id where not set
|
||||
UPDATE microdaos
|
||||
SET orchestrator_agent_id = owner_agent_id
|
||||
WHERE orchestrator_agent_id IS NULL
|
||||
AND owner_agent_id IS NOT NULL;
|
||||
|
||||
-- Add parent_microdao_id for hierarchy (platform -> child microDAOs)
|
||||
ALTER TABLE microdaos
|
||||
ADD COLUMN IF NOT EXISTS parent_microdao_id text;
|
||||
|
||||
-- Create indexes
|
||||
CREATE INDEX IF NOT EXISTS idx_microdaos_is_platform ON microdaos(is_platform) WHERE is_platform = true;
|
||||
CREATE INDEX IF NOT EXISTS idx_microdaos_orchestrator ON microdaos(orchestrator_agent_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_microdaos_parent ON microdaos(parent_microdao_id);
|
||||
|
||||
-- Add foreign key for parent_microdao_id (self-reference)
|
||||
-- Note: Using DO block to handle if constraint already exists
|
||||
DO $$
|
||||
BEGIN
|
||||
IF NOT EXISTS (
|
||||
SELECT 1 FROM pg_constraint WHERE conname = 'microdaos_parent_fk'
|
||||
) THEN
|
||||
ALTER TABLE microdaos
|
||||
ADD CONSTRAINT microdaos_parent_fk
|
||||
FOREIGN KEY (parent_microdao_id)
|
||||
REFERENCES microdaos(id)
|
||||
ON DELETE SET NULL;
|
||||
END IF;
|
||||
END $$;
|
||||
|
||||
-- Add foreign key for orchestrator_agent_id
|
||||
DO $$
|
||||
BEGIN
|
||||
IF NOT EXISTS (
|
||||
SELECT 1 FROM pg_constraint WHERE conname = 'microdaos_orchestrator_agent_fk'
|
||||
) THEN
|
||||
ALTER TABLE microdaos
|
||||
ADD CONSTRAINT microdaos_orchestrator_agent_fk
|
||||
FOREIGN KEY (orchestrator_agent_id)
|
||||
REFERENCES agents(id)
|
||||
ON DELETE SET NULL;
|
||||
END IF;
|
||||
END $$;
|
||||
|
||||
-- ============================================================================
|
||||
-- COMMENTS
|
||||
-- ============================================================================
|
||||
|
||||
COMMENT ON COLUMN agents.is_orchestrator IS 'Agent can create and manage microDAOs';
|
||||
COMMENT ON COLUMN agents.visibility_scope IS 'Visibility: global (everyone), microdao (members only), private (owner only)';
|
||||
COMMENT ON COLUMN agents.is_public IS 'Agent visible in public Citizens catalog';
|
||||
COMMENT ON COLUMN agents.primary_microdao_id IS 'Primary microDAO affiliation';
|
||||
|
||||
COMMENT ON COLUMN microdaos.is_platform IS 'MicroDAO is a platform/district (top-level organization)';
|
||||
COMMENT ON COLUMN microdaos.orchestrator_agent_id IS 'Main orchestrator agent for this microDAO';
|
||||
COMMENT ON COLUMN microdaos.parent_microdao_id IS 'Parent microDAO for hierarchy (platform -> child)';
|
||||
|
||||
Reference in New Issue
Block a user