"""remove adapters, update agents: capabilities + token on agent Revision ID: a1b2c3d4e5f6 Revises: 864b0ce5d657 Create Date: 2026-02-15 22:30:00.000000 """ from typing import Sequence, Union from alembic import op import sqlalchemy as sa from sqlalchemy.dialects import postgresql revision: str = 'a1b2c3d4e5f6' down_revision: Union[str, None] = '864b0ce5d657' branch_labels: Union[str, Sequence[str], None] = None depends_on: Union[str, Sequence[str], None] = None def upgrade() -> None: # Add new columns to agents op.add_column('agents', sa.Column('token', sa.String(255), unique=True)) op.add_column('agents', sa.Column('capabilities', postgresql.ARRAY(sa.String()), server_default='{}', nullable=False)) # Generate tokens for existing agents op.execute("UPDATE agents SET token = 'agent-' || md5(random()::text || clock_timestamp()::text) WHERE token IS NULL") op.alter_column('agents', 'token', nullable=False) # Drop old columns from agents op.drop_constraint('agents_adapter_id_fkey', 'agents', type_='foreignkey') op.drop_column('agents', 'adapter_id') op.drop_column('agents', 'system_prompt') op.drop_column('agents', 'host') op.drop_column('agents', 'pid') op.drop_column('agents', 'restart_count') # Change default subscription_mode op.alter_column('agents', 'subscription_mode', server_default='assigned') # Drop adapters table op.drop_table('adapters') def downgrade() -> None: # Recreate adapters op.create_table( 'adapters', sa.Column('id', postgresql.UUID(as_uuid=True), primary_key=True, server_default=sa.text('gen_random_uuid()')), sa.Column('name', sa.String(255), nullable=False), sa.Column('provider', sa.String(50), nullable=False), sa.Column('config', postgresql.JSONB, nullable=False, server_default='{}'), sa.Column('capabilities', postgresql.ARRAY(sa.String()), nullable=False, server_default='{}'), sa.Column('created_at', sa.DateTime(timezone=True), server_default=sa.text('now()')), sa.Column('updated_at', sa.DateTime(timezone=True), server_default=sa.text('now()')), ) # Re-add columns to agents op.add_column('agents', sa.Column('adapter_id', postgresql.UUID(as_uuid=True))) op.add_column('agents', sa.Column('system_prompt', sa.Text())) op.add_column('agents', sa.Column('host', sa.String(255), server_default='localhost')) op.add_column('agents', sa.Column('pid', sa.Integer())) op.add_column('agents', sa.Column('restart_count', sa.Integer(), server_default='0')) op.drop_column('agents', 'token') op.drop_column('agents', 'capabilities')