• Admin's avatar
    feat: platform generalization — Company Blueprint system (Paperclip OS) · 406a39cf
    Admin authored
    Transforms Canifa-specific codebase into a generic AI Company platform
    that can instantiate any business type from a YAML Company Blueprint.
    
    Core additions:
    - backend/schemas/blueprint.py: CompanyBlueprint, BlueprintRole,
      BlueprintPipelineNode, BlueprintSummary Pydantic models with
      reports_to cross-validation via @model_validator(mode='after')
    - backend/services/blueprint_service.py: load/list/validate blueprints,
      deploy_company_from_blueprint() with 2-pass agent seeding for FK safety
    - backend/blueprints/: 4 YAML blueprints (fashion-retail, software-studio,
      ecommerce-brand, marketing-agency) with roles, pipeline DAGs, nocobase_collections
    - backend/tests/test_blueprint_e2e.py: 5 E2E tests — all pass
    
    API changes:
    - GET /companies/blueprints → List[BlueprintSummary] (with role_count)
    - GET /companies/blueprints/{name} → full blueprint detail
    - POST /companies/from-blueprint → deploy company from blueprint
    - POST /pipelines/run accepts blueprint_id to drive orchestrator DAG
    
    Orchestrator:
    - ProjectOrchestrator now accepts pipeline_spec: list[dict] | None
    - topological_sort_stages() (Kahn's BFS) derives parallel stages from blueprint DAG
    - Falls back to PIPELINE_STAGES if no spec provided
    
    De-branded:
    - Removed all "Canifa" strings from models/services/api/tasks source files
    - run_logs.py demo data → generic "Demo Brand/Server/Landing Page"
    - agents.py demo HTML → "Demo Company"
    - seed_db.py → uses deploy_company_from_blueprint("fashion-retail")
    
    NocoBase:
    - NocoBaseConnector: params-based init + from_company() classmethod
    - company_secrets: UniqueConstraint('company_id', 'key') instead of global unique
    
    Frontend:
    - OnboardingWizard: blueprint picker with org-chart preview + DAG layer render
    - blueprints.ts API client
    - Companies.tsx: blueprint badge on company cards
    Co-Authored-By: 's avatarClaude Opus 4.8 <noreply@anthropic.com>
    406a39cf
Name
Last commit
Last update
..
agent Loading commit data...
alembic Loading commit data...
api Loading commit data...
auth Loading commit data...
backend/schemas Loading commit data...
blueprints Loading commit data...
common Loading commit data...
data Loading commit data...
middleware Loading commit data...
models Loading commit data...
prompts Loading commit data...
schemas Loading commit data...
scratch Loading commit data...
services Loading commit data...
static Loading commit data...
tasks Loading commit data...
tests Loading commit data...
.dockerignore Loading commit data...
.editorconfig Loading commit data...
.env.example Loading commit data...
.env.test Loading commit data...
.gitignore Loading commit data...
API_DOCUMENTATION.md Loading commit data...
Dockerfile.dev Loading commit data...
Dockerfile.prod Loading commit data...
Makefile Loading commit data...
README.md Loading commit data...
__init__.py Loading commit data...
alembic.ini Loading commit data...
celery_app.py Loading commit data...
config.py Loading commit data...
database.py Loading commit data...
docker-compose.dev.yml Loading commit data...
docker-compose.n8n.yml Loading commit data...
docker-compose.prod.yml Loading commit data...
entrypoint.sh Loading commit data...
gemini_wrap.py Loading commit data...
initialize_db.py Loading commit data...
locustfile.py Loading commit data...
nginx.conf.example Loading commit data...
promtail-config.yaml Loading commit data...
pyproject.toml Loading commit data...
pyrightconfig.json Loading commit data...
pyscn.yaml Loading commit data...
requirements.txt Loading commit data...
server.py Loading commit data...
uv.lock Loading commit data...