docs: update project docs and clean up redundant files

- PROGRESS.md: update to 2026-05-29 with security hardening (T-005),
  4-frontend architecture, AI provider refactoring, discovery features,
  landing page/referral/quota, desktop layout, admin AI management
- AGENTS.md: add AI provider list (Alibaba/NVIDIA, removed Claude/DeepL/Local),
  DB-driven config, CSRF/rate-limit/CORS notes, admin_ai reload quirk
- .env.example: sync with actual config, replace deprecated providers
  with current Sensenova/OpencodeGo/NVIDIA/Spark/Alibaba
- docs/PROJECT_STATUS.md: archive (fully superseded by PROGRESS.md)
- Remove generated JS files (_bing_search.js, _batch_search.js)
- Remove empty directories (data/corpus, data/models)
- Remove backend/.coverage (test artifact)
- Fix services/.gitignore to cover _bing_search.js
- Include pending AI provider DB admin feature (admin_ai, AIProvider model,
  AIProviders.vue, migration) and T-008 test report
This commit is contained in:
TradeMate Dev
2026-05-29 11:15:33 +08:00
parent c04fa2c19f
commit 5d2bced39f
31 changed files with 1933 additions and 816 deletions
@@ -0,0 +1,38 @@
"""add ai_providers table
Revision ID: add_ai_providers
Revises: 0798c5c09c8c
Create Date: 2026-05-27
"""
from alembic import op
import sqlalchemy as sa
from sqlalchemy.dialects.postgresql import UUID, JSONB
import uuid
revision = 'add_ai_providers'
down_revision = '0798c5c09c8c'
branch_labels = None
depends_on = None
def upgrade():
op.create_table(
'ai_providers',
sa.Column('id', UUID(as_uuid=True), primary_key=True, default=uuid.uuid4),
sa.Column('name', sa.String(100), nullable=False),
sa.Column('provider_type', sa.String(50), nullable=False),
sa.Column('api_key', sa.Text(), nullable=True),
sa.Column('api_secret', sa.Text(), nullable=True),
sa.Column('base_url', sa.String(500), nullable=True),
sa.Column('model_name', sa.String(100), nullable=False),
sa.Column('extra_config', JSONB(), default={}),
sa.Column('priority', sa.Integer(), default=0),
sa.Column('enabled', sa.Boolean(), default=True),
sa.Column('created_at', sa.DateTime(), default=sa.func.now()),
sa.Column('updated_at', sa.DateTime(), default=sa.func.now(), onupdate=sa.func.now()),
)
def downgrade():
op.drop_table('ai_providers')