1. 24 Aug, 2026 3 commits
  2. 09 Jun, 2026 1 commit
  3. 08 Jun, 2026 1 commit
  4. 04 Jun, 2026 2 commits
  5. 01 Jun, 2026 6 commits
    • Admin's avatar
      docs: move 04_audit_fixes to plan/done — all gates verified · 1145df18
      Admin authored
      All 6 completion criteria confirmed:
      - grep canifa (source .py) = 0
      - blueprint_id wired into POST /pipelines/run
      - reports_to validator active
      - 2-company DB constraint OK
      - 5/5 blueprint E2E tests pass
      - frontend build 0 errors
      Co-Authored-By: 's avatarClaude Opus 4.8 <noreply@anthropic.com>
      1145df18
    • 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
    • Admin's avatar
    • Admin's avatar
    • Admin's avatar
    • Admin's avatar
  6. 30 May, 2026 1 commit
  7. 29 May, 2026 1 commit
  8. 28 May, 2026 4 commits
  9. 26 May, 2026 5 commits
    • Admin's avatar
    • Admin's avatar
      feat: add agent log viewer, SSE streaming, and L1 sandbox · 71aa8270
      Admin authored
      - services/agent_log_writer.py: Writes ExecutionRunLog rows via AIAgent
        callbacks (tool_start, tool_complete, step, status). Errors swallowed
        to never block agent execution.
      
      - services/workspace_manager.py: Creates isolated workspace directories
        per agent run (workspaces/{company_id}/{run_id}/) with src/,
        .agent_output/, README.md structure.
      
      - services/path_security.py: Path validation to prevent directory
        traversal, blocks dangerous paths (C:\Windows, /etc, .env, .git).
      
      - api/routes/run_logs.py: Added company-scoped runs_router with:
        GET /companies/{id}/runs/{runId} — run detail with all logs
        GET /companies/{id}/runs/{runId}/stream — SSE real-time log stream
      
      - api/routes/agents.py: run_agent_in_background now creates workspace,
        instantiates AgentLogWriter, passes callbacks to AIAgent, and cleans
        up workspace in finally block.
      
      - tests/test_agent_flow.py: Updated to mock WorkspaceManager and
        AgentLogWriter, relaxed AIAgent assertion to check core kwargs only.
      
      All 3 tests pass. Dashboard verified 0 JS errors via Playwright.
      71aa8270
    • Admin's avatar
      fix: activity endpoint returns flat array instead of paginated object · 5bed3e6c
      Admin authored
      Frontend calls (g ?? []).slice(0,10) on activity data, which crashes
      when API returns {total, offset, limit, items} instead of ActivityEvent[].
      Changed response_model from PaginatedResponse to List[ActivityLogResponse].
      Also fixed .mcp.json Playwright package name.
      
      Verified via Playwright MCP: 0 console errors on dashboard.
      5bed3e6c
    • Admin's avatar
      fix: sync/async boundary fixes, closure bug, missing deps, runtime imports · b5c29abf
      Admin authored
      - Fix run_conversation sync/async boundary in 5 files:
        - run_agent.py main(): use _run_conversation_sync
        - batch_runner.py: use _run_conversation_sync
        - background_review.py: use _run_conversation_sync
        - curator.py: use _run_conversation_sync
        - acp_adapter/server.py: use _run_conversation_sync
      - Fix classic Python closure late-binding bug in get_tools.py
        (is_async captured by reference, not value)
      - Add missing deps to requirements.txt: openai, langchain-core, pyyaml, fire
      - Fix missing HTTPException import in environment_config.py
      - Fix missing List import in org_chart_svg.py
      b5c29abf
    • Admin's avatar
  10. 25 May, 2026 4 commits
  11. 23 May, 2026 3 commits
  12. 21 May, 2026 3 commits
  13. 20 May, 2026 2 commits
  14. 19 May, 2026 1 commit
  15. 14 May, 2026 1 commit
  16. 13 May, 2026 2 commits