From 5b7cf23aebb9a4083eefad00f03097dcc37414f2 Mon Sep 17 00:00:00 2001 From: Yuuuu <1569752928@qq.com> Date: Thu, 12 Mar 2026 21:15:20 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=20GLM5=20=E4=BF=A1=E5=8F=B7?= =?UTF-8?q?=E8=AE=A1=E5=88=92=E4=B8=8E=E4=B8=BB=E9=A2=98=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/contract-check.yml | 33 ++ .openclaw/pmflow-routing-rules.json | 11 +- .tmp/dark_model_routing.png | Bin 0 -> 97160 bytes .tmp/dark_task_brief_runs.png | Bin 0 -> 69536 bytes CLAUDE.md | 28 +- backend/.openclaw/pmflow-routing-rules.json | 105 ++++ .../20260312_add_signal_planner_fields.py | 80 +++ backend/app/api/model_routing.py | 101 ++++ backend/app/api/router.py | 4 + backend/app/api/sstc.py | 36 ++ backend/app/api/task_briefs.py | 195 ++++++++ backend/app/config/ai_prompts.py | 44 ++ backend/app/models/signal.py | 5 +- backend/app/services/ai_pmo_kernel_service.py | 49 +- backend/app/services/feishu_outbox_service.py | 97 ++++ backend/app/services/llm.py | 92 ++++ backend/app/services/model_routing_service.py | 251 ++++++++++ .../app/services/signal_planner_service.py | 462 ++++++++++++++++++ .../signal_strategic_analysis_service.py | 105 ++++ backend/app/services/task_brief_service.py | 428 ++++++++++++++++ backend/neural_sync.db-shm | Bin 32768 -> 0 bytes backend/neural_sync.db-wal | 0 backend/tests/test_model_routing_api.py | 103 ++++ backend/tests/test_task_briefs_api.py | 97 ++++ ...5_SIGNAL_PLANNER_IMPLEMENTATION_PLAN_V4.md | 277 ++++++----- docs/architecture/API_CONTRACTS.md | 54 ++ docs/architecture/DATAFLOW.md | 33 ++ docs/architecture/MASTER_CONTRACT.md | 38 ++ docs/architecture/TASK_BRIEF_TEMPLATE.md | 25 + ...el_routing_override_effective_20260312.png | Bin 0 -> 100373 bytes .../sidebar_new_entries_20260312.png | Bin 0 -> 150968 bytes .../task_briefs/task_brief_20260312_182557.md | 29 ++ frontend/src/api/modelRouting.ts | 45 ++ frontend/src/api/sstc.ts | 4 + frontend/src/api/taskBriefs.ts | 120 +++++ .../ai-config/ConfigSubpageHeader.tsx | 86 ++++ frontend/src/components/layout/Layout.tsx | 4 +- frontend/src/components/layout/Sidebar.tsx | 66 ++- frontend/src/components/layout/TopBar.tsx | 61 +-- .../components/sstc/SSTCSignalStagePanel.tsx | 2 + .../sstc/SignalContentHoverCard.tsx | 46 ++ frontend/src/pages/AIConfigPage.tsx | 67 ++- frontend/src/pages/ContractSyncBoardPage.tsx | 93 ++++ frontend/src/pages/ModelRoutingConfigPage.tsx | 201 ++++++++ frontend/src/pages/TaskBriefCenterPage.tsx | 174 +++++++ frontend/src/pages/TaskBriefRunsPage.tsx | 82 ++++ frontend/src/pages/TaskBriefTemplatePage.tsx | 188 +++++++ frontend/src/router/index.tsx | 15 + frontend/tsconfig.tsbuildinfo | 2 +- scripts/check_contract_sync.sh | 55 +++ scripts/gen_task_brief.sh | 64 +++ 51 files changed, 3976 insertions(+), 181 deletions(-) create mode 100644 .github/workflows/contract-check.yml create mode 100644 .tmp/dark_model_routing.png create mode 100644 .tmp/dark_task_brief_runs.png create mode 100644 backend/.openclaw/pmflow-routing-rules.json create mode 100644 backend/alembic/versions/20260312_add_signal_planner_fields.py create mode 100644 backend/app/api/model_routing.py create mode 100644 backend/app/api/task_briefs.py create mode 100644 backend/app/services/feishu_outbox_service.py create mode 100644 backend/app/services/model_routing_service.py create mode 100644 backend/app/services/signal_planner_service.py create mode 100644 backend/app/services/signal_strategic_analysis_service.py create mode 100644 backend/app/services/task_brief_service.py delete mode 100644 backend/neural_sync.db-shm delete mode 100644 backend/neural_sync.db-wal create mode 100644 backend/tests/test_model_routing_api.py create mode 100644 backend/tests/test_task_briefs_api.py create mode 100644 docs/architecture/API_CONTRACTS.md create mode 100644 docs/architecture/DATAFLOW.md create mode 100644 docs/architecture/MASTER_CONTRACT.md create mode 100644 docs/architecture/TASK_BRIEF_TEMPLATE.md create mode 100644 docs/task_briefs/model_routing_override_effective_20260312.png create mode 100644 docs/task_briefs/sidebar_new_entries_20260312.png create mode 100644 docs/task_briefs/task_brief_20260312_182557.md create mode 100644 frontend/src/api/modelRouting.ts create mode 100644 frontend/src/api/taskBriefs.ts create mode 100644 frontend/src/components/ai-config/ConfigSubpageHeader.tsx create mode 100644 frontend/src/pages/ContractSyncBoardPage.tsx create mode 100644 frontend/src/pages/ModelRoutingConfigPage.tsx create mode 100644 frontend/src/pages/TaskBriefCenterPage.tsx create mode 100644 frontend/src/pages/TaskBriefRunsPage.tsx create mode 100644 frontend/src/pages/TaskBriefTemplatePage.tsx create mode 100755 scripts/check_contract_sync.sh create mode 100755 scripts/gen_task_brief.sh diff --git a/.github/workflows/contract-check.yml b/.github/workflows/contract-check.yml new file mode 100644 index 00000000..65ae838c --- /dev/null +++ b/.github/workflows/contract-check.yml @@ -0,0 +1,33 @@ +name: contract-check + +on: + pull_request: + paths: + - "backend/app/api/**" + - "backend/app/schemas/**" + - "backend/app/services/**" + - "frontend/src/api/**" + - "frontend/src/types/**" + - "docs/architecture/**" + - "scripts/check_contract_sync.sh" + - ".github/workflows/contract-check.yml" + push: + branches: [ main, master ] + paths: + - "backend/app/api/**" + - "backend/app/schemas/**" + - "backend/app/services/**" + - "frontend/src/api/**" + - "frontend/src/types/**" + - "docs/architecture/**" + - "scripts/check_contract_sync.sh" + - ".github/workflows/contract-check.yml" + +jobs: + contract-check: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Run contract sync check + run: | + bash scripts/check_contract_sync.sh diff --git a/.openclaw/pmflow-routing-rules.json b/.openclaw/pmflow-routing-rules.json index bfa6d13c..0818c1d1 100644 --- a/.openclaw/pmflow-routing-rules.json +++ b/.openclaw/pmflow-routing-rules.json @@ -68,7 +68,8 @@ "detect_cognitive_conflicts", "rag_db_project_semantic_retrieval", "workload_optimize_prompt", - "analyze_cost_roi" + "analyze_cost_roi", + "signal_planner_analyze" ] }, { @@ -77,7 +78,7 @@ "priority": 200, "tier": "high", "provider": "openai", - "model": "GLM-5", + "model": "MiniMax-M2.5", "api_env": "OPENAI_API_KEY", "match_any": [ "analyze_food_calories", @@ -95,9 +96,9 @@ "enabled": true, "priority": 50, "tier": "safety", - "provider": "glm", - "model": "GLM-4.7", - "api_env": "GLM_API_KEY", + "provider": "openai", + "model": "deepseek-chat", + "api_env": "OPENAI_API_KEY", "match_all": true } ] diff --git a/.tmp/dark_model_routing.png b/.tmp/dark_model_routing.png new file mode 100644 index 0000000000000000000000000000000000000000..199c7107be6d086528da54d7d0fc84d794bcaa23 GIT binary patch literal 97160 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 z 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 literal 0 HcmV?d00001 diff --git a/.tmp/dark_task_brief_runs.png b/.tmp/dark_task_brief_runs.png new file mode 100644 index 0000000000000000000000000000000000000000..8dce98d6e9f26a8bed61ef32a4383ea3c073472b GIT binary patch literal 69536 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

bHs4qp=d&9S^R;46|LJ7q|juEWg8}Fi9Z&{fr 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 DNnLa) literal 0 HcmV?d00001 diff --git a/CLAUDE.md b/CLAUDE.md index 6af7c398..71e18028 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -27,6 +27,9 @@ AIProjectManger/ └── docs/ # 额外文档 ``` - 新增:`docs/INBOX_INLINE_OPS_3_PHASE_CHECKLIST.md`(消息台内联操作三期执行清单) +- 新增:`docs/architecture/`(架构契约文档目录,含 `MASTER_CONTRACT.md/API_CONTRACTS.md/DATAFLOW.md/TASK_BRIEF_TEMPLATE.md`) +- 新增:`docs/task_briefs/`(增量任务包生成产物目录) +- 新增:`docs/task_briefs/sidebar_new_entries_20260312.png`、`docs/task_briefs/model_routing_override_effective_20260312.png`(Step 8 页面验收截图) ## 4. 后端结构(`backend/`) ```text @@ -66,8 +69,18 @@ backend/ - 新增:`backend/app/services/signal_source_repair_service.py`(脏信号源回填服务) - 新增:`backend/alembic/versions/20260311_shift_all_timestamps_to_beijing.py`(全库历史时间 +8h,数据库默认时区切到 Asia/Shanghai) - 新增:`backend/tests/test_ai_pmo_work_item_decision_api.py`(AI PMO 审批动作接口回归测试) +- 新增:`backend/alembic/versions/20260312_add_signal_planner_fields.py`(signals 增加 planner 状态字段与索引) +- 新增:`backend/app/services/signal_strategic_analysis_service.py`(Signal Planner 写回收口) +- 新增:`backend/app/services/feishu_outbox_service.py`(复用 reply_hash 的 outbox 入队收口) +- 新增:`backend/app/services/signal_planner_service.py`(Signal Planner 异步分析服务) +- 新增:`backend/app/services/model_routing_service.py`(函数级模型路由配置服务) +- 新增:`backend/app/services/task_brief_service.py`(增量任务包中心服务) +- 新增:`backend/app/api/model_routing.py`(模型路由配置接口) +- 新增:`backend/app/api/task_briefs.py`(任务包中心接口) +- 新增:`backend/tests/test_model_routing_api.py`(模型路由接口回归测试) +- 新增:`backend/tests/test_task_briefs_api.py`(任务包中心接口回归测试) - 移除:`backend/.env.example`(配置模板统一到根目录 `.env.example`) -- 移除:`backend/.openclaw/pmflow-routing-rules.json`(路由规则统一到根目录 `.openclaw/`) +- 新增:`backend/.openclaw/pmflow-routing-rules.json`(容器内兼容同步副本,与根目录规则保持一致) ## 5. 前端结构(`frontend/`) ```text @@ -94,6 +107,13 @@ frontend/ - 新增:`frontend/src/lib/formatInboxTime.ts`(消息台相对时间与完整时间格式化) - 新增:`frontend/src/components/ui/RoleBadge.tsx`(角色徽章组件,支持多角色与可选数量限制) - 新增:`frontend/src/components/ui/SkillBadge.tsx`(技能徽章组件,默认显示 3 个并支持 +N) +- 新增:`frontend/src/api/taskBriefs.ts`(任务包中心 API 封装) +- 新增:`frontend/src/api/modelRouting.ts`(模型路由 API 封装) +- 新增:`frontend/src/pages/TaskBriefCenterPage.tsx`(增量任务包中心页面) +- 新增:`frontend/src/pages/TaskBriefTemplatePage.tsx`(任务包模板管理页面) +- 新增:`frontend/src/pages/TaskBriefRunsPage.tsx`(任务包生成记录页面) +- 新增:`frontend/src/pages/ContractSyncBoardPage.tsx`(契约同步看板页面) +- 新增:`frontend/src/pages/ModelRoutingConfigPage.tsx`(模型路由配置页面) ### 5.1 `frontend/src/components/sstc/` 目录说明(模块化拆分后) - `SSTCWorkspace.tsx`:SSTC 工作区主容器(组装各阶段组件) @@ -145,6 +165,8 @@ frontend/ - 已移除:`scripts/start_legacy_local.sh`、`scripts/stop_legacy_local.sh`(旧本地启动链路) - 新增:`scripts/start_model_probe.sh`(独立模型连通性检测启动器,输出中文日志并落盘) - 新增:`scripts/model_probe.py`(模型检测核心逻辑,读取 `.env` 并探测 low/high 路由模型) +- 新增:`scripts/gen_task_brief.sh`(按 git diff 自动生成增量任务包文档) +- 新增:`scripts/check_contract_sync.sh`(后端契约变更时强制校验前端类型与架构文档同步) ### 前端 ```bash @@ -178,6 +200,8 @@ uvicorn app.main:app --reload --host 0.0.0.0 --port 8000 ## 9. 新增代码的参考模式 - 新增后端接口:参考 `backend/app/api/sstc.py` 的结构 +- 模型路由配置接口:参考 `backend/app/api/model_routing.py`(`GET/PUT /model-routing/functions/{function_name}`,仅管理员可写并写入 `operation_logs`) +- 任务包中心接口:参考 `backend/app/api/task_briefs.py`(`/task-briefs/center/templates/runs/generate/contract-sync`) - 审计查询接口:参考 `backend/app/api/audit.py`(`GET /audit/operations`) - 脏数据修复接口:参考 `backend/app/api/ai_steward.py`(`POST /ai-steward/signal-sources/repair-dirty`) - 配置读取类接口:参考 `backend/app/api/llm_providers.py`(`GET /ai-steward/llm/providers`) @@ -212,6 +236,8 @@ uvicorn app.main:app --reload --host 0.0.0.0 --port 8000 - AI PMO 意图识别已启用 LLM 主路径(`AI_PMO_INTENT_LLM_ENABLED`,默认开启);当模型超时/不可用/结构化解析失败时自动降级到规则链路,不中断主流程 - 环境变量以根目录 `.env` / `.env.example` 为唯一配置源;`backend/.env` 已移除且不再读取 - OpenClaw 路由规则统一由根目录 `.openclaw/pmflow-routing-rules.json` 管理,容器通过 `OPENCLAW_ROUTING_RULES_PATH` 相对路径 `../.openclaw/pmflow-routing-rules.json` 读取 +- Signal Planner 函数路由支持 `integrations(type='model_routing')` 覆盖配置;配置缺失时回退 OpenClaw 默认规则并记录告警 +- Signal Planner 结构化调用采用 `25s` 硬超时:超时或结构化不合法时自动写入降级 `ai_planner(fallback_mode=true)` 并收敛为 `planner_status=completed` - 模型命名统一使用裸模型名(如 `GLM-4.7`、`MiniMax-M2.5`),不使用供应商前缀模型名 - 双 Agent 路由治理:默认启用 `OPENCLAW_ROUTING_ENABLED=true`、关闭 `LLM_MIXED_ROUTING_ENABLED`,复杂意图使用 `classify_intent_complex` 走 high-tier - 写操作链路统一产出 `decision_trace`(intent/tier/confidence/gate_code/correction_action)用于离线回放与分桶评分 diff --git a/backend/.openclaw/pmflow-routing-rules.json b/backend/.openclaw/pmflow-routing-rules.json new file mode 100644 index 00000000..0818c1d1 --- /dev/null +++ b/backend/.openclaw/pmflow-routing-rules.json @@ -0,0 +1,105 @@ +{ + "version": "v2", + "updated_at": "2026-03-11T09:10:00Z", + "source_of_truth": "openclaw", + "description": "PMFlow 三引擎统一路由:所有主链路统一经 OpenClaw OpenAI-Compatible 网关。", + "rules": [ + { + "name": "engine_low_project_draft_glm47_fallback", + "enabled": true, + "priority": 340, + "tier": "low", + "provider": "glm", + "model": "GLM-4.7", + "api_env": "GLM_API_KEY", + "match_any": [ + "project_draft_analysis_glm47_fallback", + "project_draft_signal_glm47_fallback", + "project_draft_charter_glm47_fallback", + "project_draft_task_chain_glm47_fallback" + ] + }, + { + "name": "engine_high_intent_complex_exact", + "enabled": true, + "priority": 320, + "tier": "high", + "provider": "openai", + "model": "GLM-5", + "api_env": "OPENAI_API_KEY", + "function_exact": "classify_intent_complex" + }, + { + "name": "engine_low_execute_glm_flash", + "enabled": true, + "priority": 300, + "tier": "low", + "provider": "glm", + "model": "GLM-4.7", + "api_env": "GLM_API_KEY", + "match_any": [ + "feishu_level_classification", + "feishu_signal_extraction", + "rag_intent_classification", + "classify_intent", + "feishu_humanized_reply", + "extract_context_insights" + ] + }, + { + "name": "engine_high_reasoning_glm5", + "enabled": true, + "priority": 220, + "tier": "high", + "provider": "openai", + "model": "GLM-5", + "api_env": "OPENAI_API_KEY", + "match_any": [ + "adaptive_rag_answer", + "classify_intent_complex", + "feishu_project_prefill", + "feishu_task_orchestration", + "generate_task_breakdown", + "generate_charter_from_signal", + "decompose_tasks_from_charter", + "recommend_assignees_for_task", + "evaluate_model_requirement", + "calculate_alignment_score", + "detect_cognitive_conflicts", + "rag_db_project_semantic_retrieval", + "workload_optimize_prompt", + "analyze_cost_roi", + "signal_planner_analyze" + ] + }, + { + "name": "engine_high_extended_reasoning", + "enabled": true, + "priority": 200, + "tier": "high", + "provider": "openai", + "model": "MiniMax-M2.5", + "api_env": "OPENAI_API_KEY", + "match_any": [ + "analyze_food_calories", + "feishu_new_project_brief", + "feishu_project_signal_classification", + "sstc_ai_breakdown", + "sstc_charter_localize_zh", + "sstc_charter_prefill", + "skill_score_update", + "test_engine_connection" + ] + }, + { + "name": "engine_safety_fallback", + "enabled": true, + "priority": 50, + "tier": "safety", + "provider": "openai", + "model": "deepseek-chat", + "api_env": "OPENAI_API_KEY", + "match_all": true + } + ] +} diff --git a/backend/alembic/versions/20260312_add_signal_planner_fields.py b/backend/alembic/versions/20260312_add_signal_planner_fields.py new file mode 100644 index 00000000..91885b0d --- /dev/null +++ b/backend/alembic/versions/20260312_add_signal_planner_fields.py @@ -0,0 +1,80 @@ +"""add signal planner fields + +Revision ID: add_signal_planner_fields +Revises: expand_user_workload_ratio_precision +Create Date: 2026-03-12 +""" + +from __future__ import annotations + +from alembic import op +import sqlalchemy as sa + + +revision = "add_signal_planner_fields" +down_revision = "expand_user_workload_ratio_precision" +branch_labels = None +depends_on = None + + +def _table_exists(bind, table_name: str) -> bool: + return sa.inspect(bind).has_table(table_name) + + +def _column_exists(bind, table_name: str, column_name: str) -> bool: + inspector = sa.inspect(bind) + if not inspector.has_table(table_name): + return False + for column in inspector.get_columns(table_name): + if str(column.get("name") or "") == column_name: + return True + return False + + +def _index_exists(bind, table_name: str, index_name: str) -> bool: + inspector = sa.inspect(bind) + if not inspector.has_table(table_name): + return False + return any(str(item.get("name") or "") == index_name for item in inspector.get_indexes(table_name)) + + +def upgrade() -> None: + bind = op.get_bind() + if not _table_exists(bind, "signals"): + return + + with op.batch_alter_table("signals") as batch_op: + if not _column_exists(bind, "signals", "planner_status"): + batch_op.add_column( + sa.Column( + "planner_status", + sa.String(length=20), + nullable=False, + server_default="pending", + ) + ) + if not _column_exists(bind, "signals", "planner_analyzed_at"): + batch_op.add_column(sa.Column("planner_analyzed_at", sa.TIMESTAMP(), nullable=True)) + if not _column_exists(bind, "signals", "planner_assignee_user_id"): + batch_op.add_column(sa.Column("planner_assignee_user_id", sa.BigInteger(), nullable=True)) + + if not _index_exists(bind, "signals", "ix_signals_planner_status"): + op.create_index("ix_signals_planner_status", "signals", ["planner_status"]) + + + +def downgrade() -> None: + bind = op.get_bind() + if not _table_exists(bind, "signals"): + return + + if _index_exists(bind, "signals", "ix_signals_planner_status"): + op.drop_index("ix_signals_planner_status", table_name="signals") + + with op.batch_alter_table("signals") as batch_op: + if _column_exists(bind, "signals", "planner_assignee_user_id"): + batch_op.drop_column("planner_assignee_user_id") + if _column_exists(bind, "signals", "planner_analyzed_at"): + batch_op.drop_column("planner_analyzed_at") + if _column_exists(bind, "signals", "planner_status"): + batch_op.drop_column("planner_status") diff --git a/backend/app/api/model_routing.py b/backend/app/api/model_routing.py new file mode 100644 index 00000000..a002d832 --- /dev/null +++ b/backend/app/api/model_routing.py @@ -0,0 +1,101 @@ +"""模型路由配置 API。""" + +from __future__ import annotations + +from typing import Optional + +from fastapi import APIRouter, Depends +from fastapi.responses import JSONResponse +from pydantic import BaseModel, Field +from sqlalchemy.ext.asyncio import AsyncSession + +from ..core.response import error_response, success_response +from ..database import get_db +from ..dependencies import get_current_user +from ..models import User +from ..services.auth import has_any_role +from ..services.model_routing_service import ModelRoutingService +from ..services.operation_log_service import log_operation + +router = APIRouter(prefix="/model-routing", tags=["model_routing"]) + + +class ModelRoutingUpdateRequest(BaseModel): + provider: str + model: str + api_env: str + tier: str = Field(default="high") + base_url: Optional[str] = None + + +@router.get("/functions") +async def list_model_routing( + db: AsyncSession = Depends(get_db), + current_user: User = Depends(get_current_user), +): + tenant_id = int(current_user.tenant_id) + items = await ModelRoutingService.list_effective_routing(db, tenant_id=tenant_id) + return success_response({"items": items}) + + +@router.get("/functions/{function_name}") +async def get_model_routing( + function_name: str, + db: AsyncSession = Depends(get_db), + current_user: User = Depends(get_current_user), +): + tenant_id = int(current_user.tenant_id) + data = await ModelRoutingService.get_effective_routing( + db, + tenant_id=tenant_id, + function_name=function_name, + ) + return success_response(data) + + +@router.put("/functions/{function_name}") +async def update_model_routing( + function_name: str, + body: ModelRoutingUpdateRequest, + db: AsyncSession = Depends(get_db), + current_user: User = Depends(get_current_user), +): + if not has_any_role(str(current_user.role or ""), ["BOSS", "ADMIN"]): + return JSONResponse(status_code=403, content=error_response(403, "仅管理员可修改模型路由配置")) + + tenant_id = int(current_user.tenant_id) + before = await ModelRoutingService.get_effective_routing( + db, + tenant_id=tenant_id, + function_name=function_name, + ) + try: + after = await ModelRoutingService.upsert_override( + db, + tenant_id=tenant_id, + function_name=function_name, + provider=body.provider, + model=body.model, + api_env=body.api_env, + tier=body.tier, + base_url=body.base_url, + updated_by=int(current_user.id), + ) + except ValueError as exc: + await db.rollback() + return JSONResponse(status_code=400, content=error_response(400, str(exc))) + + await log_operation( + db, + tenant_id=tenant_id, + user_id=int(current_user.id), + project_id=None, + entity_type="model_routing", + entity_id=str(function_name), + action="update", + before_data=before, + after_data=after, + remark="更新函数级模型路由", + ) + await db.commit() + return success_response(after) diff --git a/backend/app/api/router.py b/backend/app/api/router.py index a879274d..82067b1e 100644 --- a/backend/app/api/router.py +++ b/backend/app/api/router.py @@ -35,6 +35,8 @@ from .signal_sources import router as signal_sources_router from .operation_catalog import router as operation_catalog_router from .ai_pmo import router as ai_pmo_router from .audit import router as audit_router +from .model_routing import router as model_routing_router +from .task_briefs import router as task_briefs_router # 创建主 API 路由器 api_router = APIRouter() @@ -69,3 +71,5 @@ api_router.include_router(signal_sources_router) api_router.include_router(operation_catalog_router) api_router.include_router(ai_pmo_router) api_router.include_router(audit_router) +api_router.include_router(model_routing_router) +api_router.include_router(task_briefs_router) diff --git a/backend/app/api/sstc.py b/backend/app/api/sstc.py index a922aa86..9501166e 100644 --- a/backend/app/api/sstc.py +++ b/backend/app/api/sstc.py @@ -235,6 +235,13 @@ def _signal_source_context(signal: Signal) -> dict: return source_context if isinstance(source_context, dict) else {} +def _normalize_planner_status(value: Any) -> str: + raw = str(value or "").strip().lower() + if raw in {"pending", "completed", "failed"}: + return raw + return "pending" + + def _safe_int(value: Any) -> Optional[int]: try: return int(str(value).strip()) @@ -1785,6 +1792,7 @@ async def list_signals( ) rows = [] for s in signals: + strategic_payload = _as_dict(s.strategic_analysis) ai_analysis = _signal_ai_analysis(s) source_context = _signal_source_context(s) project_scope = _signal_project_scope(s) @@ -1821,6 +1829,14 @@ async def list_signals( "charter_name": linked_signal_charter_name.get(sid), "created_at": s.created_at.isoformat() if s.created_at else None, "attachments": _extract_signal_attachments(s), + "strategic_analysis": strategic_payload, + "planner_status": _normalize_planner_status(getattr(s, "planner_status", None)), + "planner_analyzed_at": ( + s.planner_analyzed_at.isoformat() if getattr(s, "planner_analyzed_at", None) else None + ), + "planner_assignee_user_id": ( + str(s.planner_assignee_user_id) if getattr(s, "planner_assignee_user_id", None) is not None else None + ), } created_at_dt = s.created_at if created_at_dt is not None and created_at_dt.tzinfo is not None: @@ -2308,6 +2324,14 @@ async def get_charter_detail( "priority": s.priority, "impact_score": s.impact_score, "attachments": _extract_signal_attachments(s), + "strategic_analysis": _as_dict(s.strategic_analysis), + "planner_status": _normalize_planner_status(getattr(s, "planner_status", None)), + "planner_analyzed_at": ( + s.planner_analyzed_at.isoformat() if getattr(s, "planner_analyzed_at", None) else None + ), + "planner_assignee_user_id": ( + str(s.planner_assignee_user_id) if getattr(s, "planner_assignee_user_id", None) is not None else None + ), } for s in signal_rows ], @@ -2319,6 +2343,18 @@ async def get_charter_detail( "priority": source_signal.priority, "content": source_signal.content, "attachments": _extract_signal_attachments(source_signal), + "strategic_analysis": _as_dict(source_signal.strategic_analysis), + "planner_status": _normalize_planner_status(getattr(source_signal, "planner_status", None)), + "planner_analyzed_at": ( + source_signal.planner_analyzed_at.isoformat() + if getattr(source_signal, "planner_analyzed_at", None) + else None + ), + "planner_assignee_user_id": ( + str(source_signal.planner_assignee_user_id) + if getattr(source_signal, "planner_assignee_user_id", None) is not None + else None + ), } if source_signal else None diff --git a/backend/app/api/task_briefs.py b/backend/app/api/task_briefs.py new file mode 100644 index 00000000..f5fe252b --- /dev/null +++ b/backend/app/api/task_briefs.py @@ -0,0 +1,195 @@ +"""增量任务包中心 API。""" + +from __future__ import annotations + +from typing import Optional + +from fastapi import APIRouter, Depends +from fastapi.responses import JSONResponse +from pydantic import BaseModel, Field +from sqlalchemy.ext.asyncio import AsyncSession + +from ..core.response import error_response, success_response +from ..database import get_db +from ..dependencies import get_current_user +from ..models import User +from ..services.auth import has_any_role +from ..services.operation_log_service import log_operation +from ..services.task_brief_service import TaskBriefService + +router = APIRouter(prefix="/task-briefs", tags=["task_briefs"]) + + +class TemplateCreateRequest(BaseModel): + name: str + content: str + description: Optional[str] = None + + +class TemplateUpdateRequest(BaseModel): + name: Optional[str] = None + content: Optional[str] = None + description: Optional[str] = None + + +class GenerateTaskBriefRequest(BaseModel): + title: str + template_id: Optional[str] = None + changed_files: list[str] = Field(default_factory=list) + scope_summary: Optional[str] = None + + +def _require_manager(current_user: User) -> Optional[JSONResponse]: + if has_any_role(str(current_user.role or ""), ["BOSS", "ADMIN"]): + return None + return JSONResponse(status_code=403, content=error_response(403, "仅管理员可执行该操作")) + + +@router.get("/center") +async def list_task_brief_center( + db: AsyncSession = Depends(get_db), + current_user: User = Depends(get_current_user), +): + tenant_id = int(current_user.tenant_id) + items = await TaskBriefService.list_center(db, tenant_id=tenant_id) + return success_response({"items": items}) + + +@router.get("/templates") +async def list_task_brief_templates( + db: AsyncSession = Depends(get_db), + current_user: User = Depends(get_current_user), +): + tenant_id = int(current_user.tenant_id) + items = await TaskBriefService.list_templates(db, tenant_id=tenant_id) + return success_response({"items": items}) + + +@router.post("/templates") +async def create_task_brief_template( + body: TemplateCreateRequest, + db: AsyncSession = Depends(get_db), + current_user: User = Depends(get_current_user), +): + denied = _require_manager(current_user) + if denied is not None: + return denied + tenant_id = int(current_user.tenant_id) + item = await TaskBriefService.create_template( + db, + tenant_id=tenant_id, + operator_user_id=int(current_user.id), + name=body.name, + content=body.content, + description=body.description, + ) + await log_operation( + db, + tenant_id=tenant_id, + user_id=int(current_user.id), + project_id=None, + entity_type="task_brief_template", + entity_id=str(item.get("id") or ""), + action="create", + before_data=None, + after_data=item, + remark="创建任务包模板", + ) + await db.commit() + return success_response(item) + + +@router.put("/templates/{template_id}") +async def update_task_brief_template( + template_id: str, + body: TemplateUpdateRequest, + db: AsyncSession = Depends(get_db), + current_user: User = Depends(get_current_user), +): + denied = _require_manager(current_user) + if denied is not None: + return denied + tenant_id = int(current_user.tenant_id) + before_items = await TaskBriefService.list_templates(db, tenant_id=tenant_id) + before = next((item for item in before_items if str(item.get("id") or "") == str(template_id)), None) + item = await TaskBriefService.update_template( + db, + tenant_id=tenant_id, + operator_user_id=int(current_user.id), + template_id=template_id, + name=body.name, + content=body.content, + description=body.description, + ) + if item is None: + await db.rollback() + return JSONResponse(status_code=404, content=error_response(404, "模板不存在")) + await log_operation( + db, + tenant_id=tenant_id, + user_id=int(current_user.id), + project_id=None, + entity_type="task_brief_template", + entity_id=str(template_id), + action="update", + before_data=before, + after_data=item, + remark="更新任务包模板", + ) + await db.commit() + return success_response(item) + + +@router.get("/runs") +async def list_task_brief_runs( + db: AsyncSession = Depends(get_db), + current_user: User = Depends(get_current_user), +): + tenant_id = int(current_user.tenant_id) + items = await TaskBriefService.list_runs(db, tenant_id=tenant_id) + return success_response({"items": items}) + + +@router.post("/generate") +async def generate_task_brief( + body: GenerateTaskBriefRequest, + db: AsyncSession = Depends(get_db), + current_user: User = Depends(get_current_user), +): + denied = _require_manager(current_user) + if denied is not None: + return denied + tenant_id = int(current_user.tenant_id) + result = await TaskBriefService.generate_brief( + db, + tenant_id=tenant_id, + operator_user_id=int(current_user.id), + title=body.title, + template_id=body.template_id, + changed_files=body.changed_files, + scope_summary=body.scope_summary, + ) + await log_operation( + db, + tenant_id=tenant_id, + user_id=int(current_user.id), + project_id=None, + entity_type="task_brief_run", + entity_id=str((result.get("run") or {}).get("id") or ""), + action="generate", + before_data=None, + after_data=result, + remark="生成增量任务包", + ) + await db.commit() + return success_response(result) + + +@router.get("/contract-sync") +async def get_task_brief_contract_sync( + db: AsyncSession = Depends(get_db), + current_user: User = Depends(get_current_user), +): + tenant_id = int(current_user.tenant_id) + data = await TaskBriefService.get_contract_sync_status(db, tenant_id=tenant_id) + return success_response(data) diff --git a/backend/app/config/ai_prompts.py b/backend/app/config/ai_prompts.py index 3dc2770d..e62de81c 100644 --- a/backend/app/config/ai_prompts.py +++ b/backend/app/config/ai_prompts.py @@ -980,6 +980,50 @@ PROMPT_ANALYZE_FOOD_CALORIES = """ """ +# ============================================================================ +# Signal Planner(成员匹配 + 执行建议) +# ============================================================================ + +PROMPT_SIGNAL_PLANNER = """ +你是 PMFlow 的 Signal Planner。请基于信号内容、项目上下文和团队成员能力,给出可执行的规划建议。 + +输入: +- 信号ID:{signal_id} +- 信号标题:{signal_title} +- 信号摘要:{signal_summary} +- 信号正文:{signal_content} +- 项目ID:{project_id} +- 项目标题:{project_title} +- 项目归属判定:{project_scope} +- 最近相关信号(JSON):{recent_signals} +- 项目成员能力画像(JSON):{member_profiles} +- 当前时间(北京时间):{now_cn} + +输出 JSON(严格只输出 JSON): +{{ + "summary": "本次分析摘要(<=120字)", + "priority": "high|medium|low", + "assignee_user_id": 123, + "assignee_reason": "为什么推荐该成员", + "execution_plan": [ + "第一步动作", + "第二步动作" + ], + "risks": [ + "风险1", + "风险2" + ], + "confidence": 0.0 +}} + +规则: +1. 若无法确定负责人,assignee_user_id 返回 null,且在 assignee_reason 中说明原因。 +2. execution_plan 必须是 2-5 条可执行动作,不要空泛描述。 +3. confidence 范围 0-1,不能省略。 +4. 只输出 JSON,不要输出 Markdown 或解释文本。 +""" + + # ============================================================================ # AI 角色 Prompt 配置(支持前端可视化设置) # ============================================================================ diff --git a/backend/app/models/signal.py b/backend/app/models/signal.py index 5d2e0600..458f5be1 100644 --- a/backend/app/models/signal.py +++ b/backend/app/models/signal.py @@ -1,7 +1,7 @@ """信号模型""" from .base import Base from sqlalchemy.orm import Mapped, mapped_column, relationship -from sqlalchemy import BigInteger, Integer, VARCHAR, Text, Float, Boolean, ForeignKey +from sqlalchemy import BigInteger, Integer, VARCHAR, Text, Float, Boolean, ForeignKey, TIMESTAMP from typing import Optional @@ -27,5 +27,8 @@ class Signal(Base): confidence: Mapped[Optional[float]] = mapped_column(Float, nullable=True) recommended_action: Mapped[Optional[str]] = mapped_column(VARCHAR(50), nullable=True) status: Mapped[str] = mapped_column(VARCHAR(50), nullable=False, default="待处理", index=True) + planner_status: Mapped[str] = mapped_column(VARCHAR(20), nullable=False, default="pending", index=True) + planner_analyzed_at: Mapped[Optional[TIMESTAMP]] = mapped_column(TIMESTAMP, nullable=True) + planner_assignee_user_id: Mapped[Optional[int]] = mapped_column(BigInteger, nullable=True) feedbacks = relationship("SignalFeedback", back_populates="signal", cascade="all, delete-orphan") diff --git a/backend/app/services/ai_pmo_kernel_service.py b/backend/app/services/ai_pmo_kernel_service.py index d99eaf18..a59d148a 100644 --- a/backend/app/services/ai_pmo_kernel_service.py +++ b/backend/app/services/ai_pmo_kernel_service.py @@ -73,6 +73,7 @@ from .openclaw_commander_service import OpenClawCommanderService from .ai_pmo_domain_workflow import SignalSourceDomainWorkflow from .llm import llm_service from .signal_source_orchestration_service import SignalSourceOrchestrationService +from .signal_planner_service import SignalPlannerService from ..utils.timezone import now_cn_naive logger = get_logger(__name__) @@ -999,6 +1000,7 @@ class TypedExecutor: operator_user_id: Optional[int], source_system: str, source_message_id: str, + channel_ref: Optional[str] = None, ) -> dict[str, Any]: if intent.name == INTENT_QUERY: rag_service = AdaptiveRAGService(self.db, tenant_id=self.tenant_id) @@ -1048,6 +1050,19 @@ class TypedExecutor: intent=intent, message_text=message_text, ) + strategic_payload = ( + semantic_payload.get("strategic_analysis") + if isinstance(semantic_payload.get("strategic_analysis"), dict) + else {} + ) + source_context = ( + strategic_payload.get("source_context") + if isinstance(strategic_payload.get("source_context"), dict) + else {} + ) + source_context["source_message_id"] = source_message_id + source_context["channel_ref"] = channel_ref + strategic_payload["source_context"] = source_context signal = await self._create_signal( title=str(semantic_payload.get("title") or intent.signal_title or "新增信号源接入请求"), summary=str(semantic_payload.get("summary") or intent.signal_summary or message_text), @@ -1062,8 +1077,8 @@ class TypedExecutor: else None ), strategic_analysis=( - semantic_payload.get("strategic_analysis") - if isinstance(semantic_payload.get("strategic_analysis"), dict) + strategic_payload + if isinstance(strategic_payload, dict) else None ), ) @@ -1088,6 +1103,19 @@ class TypedExecutor: } if intent.name == INTENT_SIGNAL_CREATE: + strategic_analysis = { + "source_context": { + "source_message_id": source_message_id, + "channel_ref": channel_ref, + }, + "ai_analysis": { + "summary": str(intent.signal_summary or message_text)[:300], + "intent": INTENT_SIGNAL_CREATE, + "requirement_project_scope": ( + "existing_project" if intent.project_id is not None else "pending_classification" + ), + }, + } signal = await self._create_signal( title=intent.signal_title or "新信号", summary=intent.signal_summary or message_text, @@ -1096,11 +1124,13 @@ class TypedExecutor: source="PMFlow", signal_type="新需求", recommended_action="enter_only", + strategic_analysis=strategic_analysis, ) return { "status": "succeeded", "signal_id": int(signal.id), "project_id": intent.project_id, + "summary": str(intent.signal_summary or message_text)[:300], "auto_tasks": [], } @@ -1580,6 +1610,7 @@ class AIPMOKernelService: operator_user_id=_safe_int(getattr(operator, "id", None)), source_system=source_system, source_message_id=synthetic_message_id, + channel_ref=channel_ref, ) _log_perf("TypedExecutor.execute", stage_started_at) verification = await self._verify_execution(intent=intent, execution_result=execution_result, world_model=world_model) @@ -1655,6 +1686,20 @@ class AIPMOKernelService: last_message_text=clean_text[:200], ) await self.db.commit() + if ( + intent.name == INTENT_SIGNAL_CREATE + and work_item.state == STATE_SUCCEEDED + and _safe_int(execution_result.get("signal_id")) is not None + ): + asyncio.create_task( + SignalPlannerService.analyze( + signal_id=int(execution_result["signal_id"]), + tenant_id=int(self.tenant_id), + source_message_id=synthetic_message_id, + source_chat_id=channel_ref, + dedupe_seed=f"signal-planner-failed:{int(execution_result['signal_id'])}", + ) + ) stage_started_at = time.perf_counter() capture_result = self._build_capture_result( work_item=work_item, diff --git a/backend/app/services/feishu_outbox_service.py b/backend/app/services/feishu_outbox_service.py new file mode 100644 index 00000000..5f808417 --- /dev/null +++ b/backend/app/services/feishu_outbox_service.py @@ -0,0 +1,97 @@ +"""飞书 outbox 入队服务。""" + +from __future__ import annotations + +import hashlib +from typing import Optional + +from sqlalchemy import and_, select +from sqlalchemy.exc import IntegrityError +from sqlalchemy.ext.asyncio import AsyncSession + +from ..models import FeishuReplyOutbox + + +class FeishuOutboxService: + """复用 reply_hash 幂等策略的 outbox 写入入口。""" + + @staticmethod + def _build_reply_hash(*, source_message_id: Optional[str], message_text: str) -> Optional[str]: + source = str(source_message_id or "").strip() + body = str(message_text or "").strip() + if not source or not body: + return None + raw = f"{source}{body}".encode("utf-8") + return hashlib.md5(raw, usedforsecurity=False).hexdigest() + + @classmethod + async def enqueue( + cls, + db: AsyncSession, + *, + tenant_id: int, + chat_id: str, + text: str, + source_message_id: Optional[str], + dedupe_seed: Optional[str] = None, + trace_id: Optional[str] = None, + ) -> Optional[int]: + normalized_chat_id = str(chat_id or "").strip()[:128] + if not normalized_chat_id: + return None + normalized_text = str(text or "").strip()[:2000] or "已收到,正在处理。" + normalized_source_message_id = (str(source_message_id or "").strip()[:128] or None) + hash_source = normalized_source_message_id or (str(dedupe_seed or "").strip()[:128] or None) + reply_hash = cls._build_reply_hash(source_message_id=hash_source, message_text=normalized_text) + + if reply_hash: + sent_exists = ( + await db.execute( + select(FeishuReplyOutbox.id) + .where( + and_( + FeishuReplyOutbox.tenant_id == int(tenant_id), + FeishuReplyOutbox.reply_hash == reply_hash, + FeishuReplyOutbox.status == "sent", + ) + ) + .limit(1) + ) + ).scalar_one_or_none() + if sent_exists is not None: + return int(sent_exists) + + row = FeishuReplyOutbox( + tenant_id=int(tenant_id), + trace_id=(str(trace_id or "").strip()[:64] or None), + source_message_id=normalized_source_message_id, + chat_id=normalized_chat_id, + message_text=normalized_text, + reply_hash=reply_hash, + status="pending", + attempts=0, + next_retry_at=None, + ) + try: + async with db.begin_nested(): + db.add(row) + await db.flush() + except IntegrityError: + if reply_hash: + sent_exists = ( + await db.execute( + select(FeishuReplyOutbox.id) + .where( + and_( + FeishuReplyOutbox.tenant_id == int(tenant_id), + FeishuReplyOutbox.reply_hash == reply_hash, + FeishuReplyOutbox.status == "sent", + ) + ) + .limit(1) + ) + ).scalar_one_or_none() + if sent_exists is not None: + return int(sent_exists) + raise + return int(row.id) if row.id is not None else None diff --git a/backend/app/services/llm.py b/backend/app/services/llm.py index 4450dcc5..f8f08049 100644 --- a/backend/app/services/llm.py +++ b/backend/app/services/llm.py @@ -107,6 +107,7 @@ DEFAULT_HIGH_TIER_HINTS = ( "cognitive_conflict", "blocker", "model_requirement", + "signal_planner_analyze", ) DEFAULT_LOW_TIER_HINTS = ( "feishu_level_classification", @@ -145,6 +146,7 @@ STRUCTURED_OUTPUT_FUNCTION_HINTS = ( "sstc_ai_breakdown", "sstc_charter_localize_zh", "sstc_charter_prefill", + "signal_planner_analyze", ) LOW_TO_HIGH_ESCALATION_FALLBACK_MARKERS = ( "不知道", @@ -239,6 +241,20 @@ STRUCTURED_OBJECT_SCHEMAS: dict[str, dict[str, Any]] = { "project_id": ("number_or_none",), }, }, + "signal_planner_analyze": { + "required_keys": ("summary", "priority", "execution_plan", "risks", "confidence"), + "type_checks": { + "summary": "str", + "priority": "str", + "execution_plan": "list", + "risks": "list", + "confidence": "number", + }, + "optional_type_checks": { + "assignee_user_id": ("number_or_none",), + "assignee_reason": ("str_or_none",), + }, + }, } @@ -1475,6 +1491,16 @@ class LLMService: active_engine = self._ensure_openclaw_control_plane_engine(active_engine) engines: list[dict[str, Any]] = [e for e in bundle.get("engines", []) if isinstance(e, dict)] + override_engine = await self._resolve_function_override_engine( + db, + tenant_id=tenant_id, + function_name=function_name, + engines=engines, + active_engine=active_engine, + ) + if override_engine is not None: + return override_engine + openclaw_routed = self._resolve_openclaw_engine( function_name=function_name, engines=engines, @@ -1537,6 +1563,70 @@ class LLMService: ) return self._ensure_openclaw_control_plane_engine(routed) + async def _resolve_function_override_engine( + self, + db: AsyncSession, + *, + tenant_id: int, + function_name: str, + engines: list[dict[str, Any]], + active_engine: dict[str, Any], + ) -> Optional[dict[str, Any]]: + fn = str(function_name or "").strip().lower() + if not fn: + return None + try: + row = ( + await db.execute( + select(Integration).where( + and_( + Integration.tenant_id == int(tenant_id), + Integration.type == "model_routing", + ) + ) + ) + ).scalar_one_or_none() + bundle = _safe_json(row.config if row else {}) + mappings = bundle.get("mappings") if isinstance(bundle.get("mappings"), dict) else {} + override = mappings.get(fn) if isinstance(mappings.get(fn), dict) else None + if not override or not bool(override.get("enabled", True)): + return None + rule = { + "tier": str(override.get("tier") or "high").strip().lower() or "high", + "provider": str(override.get("provider") or "").strip().lower(), + "model": str(override.get("model") or "").strip(), + "api_env": str(override.get("api_env") or "").strip(), + "base_url": str(override.get("base_url") or "").strip(), + } + routed = self._resolve_engine_from_rule( + rule=rule, + engines=engines, + active_engine=active_engine, + ) + if routed is None: + return None + provider = str(routed.get("provider") or "") + if provider != "ollama" and not str(routed.get("api_key") or "").strip(): + _runtime_log( + "LLM路由", + ( + "函数覆盖路由命中但缺少 API Key,回退默认路由:" + f"function={fn}, provider={provider}, model={routed.get('model')}" + ), + ) + return None + _runtime_log( + "LLM路由", + ( + "函数覆盖路由命中:" + f"function={fn}, provider={routed.get('provider')}, model={routed.get('model')}" + ), + ) + return self._ensure_openclaw_control_plane_engine(routed) + except Exception as exc: + _runtime_log("LLM路由", f"函数覆盖路由读取失败:function={fn}, error={exc}") + return None + def _resolve_active_engine_from_bundle(self, bundle: dict[str, Any]) -> dict[str, Any]: engines: list[dict[str, Any]] = [e for e in bundle.get("engines", []) if isinstance(e, dict)] active_engine_id = str(bundle.get("active_engine_id") or "") @@ -2082,6 +2172,8 @@ class LLMService: return isinstance(value, (int, float)) and not isinstance(value, bool) if expected == "number_or_none": return value is None or (isinstance(value, (int, float)) and not isinstance(value, bool)) + if expected == "str_or_none": + return value is None or isinstance(value, str) if expected == "dict_or_none": return value is None or isinstance(value, dict) return True diff --git a/backend/app/services/model_routing_service.py b/backend/app/services/model_routing_service.py new file mode 100644 index 00000000..af55304b --- /dev/null +++ b/backend/app/services/model_routing_service.py @@ -0,0 +1,251 @@ +"""函数级模型路由配置服务。""" + +from __future__ import annotations + +import json +import os +from pathlib import Path +from typing import Any + +from sqlalchemy import and_, select +from sqlalchemy.ext.asyncio import AsyncSession + +from ..models import Integration +from ..utils.timezone import now_cn_naive + +ALLOWED_PROVIDERS = {"openai", "glm", "deepseek", "ollama"} +ALLOWED_TIERS = {"low", "high", "safety"} +DEFAULT_FUNCTIONS = ("signal_planner_analyze",) +INTEGRATION_TYPE = "model_routing" +DEFAULT_RULES_RELATIVE_PATH = "../.openclaw/pmflow-routing-rules.json" + + +class ModelRoutingService: + @staticmethod + def _safe_dict(value: Any) -> dict[str, Any]: + if isinstance(value, dict): + try: + # 深拷贝,避免浅拷贝后嵌套 dict 原地修改导致 SQLAlchemy JSON 变更丢失。 + return json.loads(json.dumps(value)) + except Exception: + return dict(value) + if isinstance(value, str): + try: + parsed = json.loads(value) + return parsed if isinstance(parsed, dict) else {} + except Exception: + return {} + return {} + + @staticmethod + def _normalize_function_name(function_name: str) -> str: + fn = str(function_name or "").strip().lower() + if not fn: + raise ValueError("function_name 不能为空") + return fn + + @staticmethod + def _normalize_provider(provider: str) -> str: + p = str(provider or "").strip().lower() + if p not in ALLOWED_PROVIDERS: + raise ValueError("provider 仅支持 openai/glm/deepseek/ollama") + return p + + @staticmethod + def _normalize_tier(tier: str) -> str: + t = str(tier or "").strip().lower() or "high" + if t not in ALLOWED_TIERS: + raise ValueError("tier 仅支持 low/high/safety") + return t + + @staticmethod + def _rules_path() -> Path: + custom = str(os.getenv("OPENCLAW_ROUTING_RULES_PATH", DEFAULT_RULES_RELATIVE_PATH) or "").strip() + raw = custom or DEFAULT_RULES_RELATIVE_PATH + path = Path(raw) + if not path.is_absolute(): + path = (Path(__file__).resolve().parents[2] / path).resolve() + return path + + @classmethod + def _rule_matches_function(cls, *, rule: dict[str, Any], function_name: str) -> bool: + if bool(rule.get("match_all", False)): + return True + fn = cls._normalize_function_name(function_name) + exact = str(rule.get("function_exact") or "").strip().lower() + if exact and exact == fn: + return True + prefix = str(rule.get("function_prefix") or "").strip().lower() + if prefix in {"*", "all"}: + return True + if prefix and fn.startswith(prefix): + return True + match_any = rule.get("match_any") if isinstance(rule.get("match_any"), list) else [] + for item in match_any: + token = str(item or "").strip().lower() + if token and token in fn: + return True + return False + + @classmethod + def _load_default_rule(cls, *, function_name: str) -> dict[str, Any] | None: + path = cls._rules_path() + if not path.exists(): + return None + try: + payload = json.loads(path.read_text(encoding="utf-8")) + except Exception: + return None + rules = payload.get("rules") if isinstance(payload, dict) and isinstance(payload.get("rules"), list) else [] + indexed: list[tuple[int, int, dict[str, Any]]] = [] + for idx, row in enumerate(rules): + if not isinstance(row, dict): + continue + if not bool(row.get("enabled", True)): + continue + if not cls._rule_matches_function(rule=row, function_name=function_name): + continue + indexed.append((int(row.get("priority") or 0), -idx, row)) + if not indexed: + return None + indexed.sort(reverse=True) + return dict(indexed[0][2]) + + @classmethod + async def _get_or_init_bundle(cls, db: AsyncSession, *, tenant_id: int) -> tuple[Integration, dict[str, Any]]: + row = ( + await db.execute( + select(Integration).where( + and_( + Integration.tenant_id == int(tenant_id), + Integration.type == INTEGRATION_TYPE, + ) + ) + ) + ).scalar_one_or_none() + if row is None: + row = Integration( + tenant_id=int(tenant_id), + type=INTEGRATION_TYPE, + is_active=True, + config={"mappings": {}}, + ) + db.add(row) + await db.flush() + bundle = cls._safe_dict(row.config) + if not isinstance(bundle.get("mappings"), dict): + bundle["mappings"] = {} + return row, bundle + + @classmethod + def _effective_from_override(cls, *, function_name: str, override: dict[str, Any]) -> dict[str, Any]: + return { + "function_name": cls._normalize_function_name(function_name), + "provider": str(override.get("provider") or "").strip().lower(), + "model": str(override.get("model") or "").strip(), + "api_env": str(override.get("api_env") or "").strip(), + "tier": str(override.get("tier") or "high").strip().lower(), + "base_url": str(override.get("base_url") or "").strip(), + "source": "override", + "updated_at": str(override.get("updated_at") or ""), + "updated_by": override.get("updated_by"), + } + + @classmethod + def _effective_from_rule(cls, *, function_name: str, rule: dict[str, Any] | None) -> dict[str, Any]: + if rule is None: + return { + "function_name": cls._normalize_function_name(function_name), + "provider": "openai", + "model": "GLM-5", + "api_env": "OPENAI_API_KEY", + "tier": "high", + "base_url": "", + "source": "default", + "updated_at": "", + "updated_by": None, + } + return { + "function_name": cls._normalize_function_name(function_name), + "provider": str(rule.get("provider") or "").strip().lower(), + "model": str(rule.get("model") or "").strip(), + "api_env": str(rule.get("api_env") or "").strip(), + "tier": str(rule.get("tier") or "high").strip().lower(), + "base_url": str(rule.get("base_url") or "").strip(), + "source": "default", + "updated_at": "", + "updated_by": None, + } + + @classmethod + async def get_effective_routing( + cls, + db: AsyncSession, + *, + tenant_id: int, + function_name: str, + ) -> dict[str, Any]: + fn = cls._normalize_function_name(function_name) + _, bundle = await cls._get_or_init_bundle(db, tenant_id=int(tenant_id)) + mappings = bundle.get("mappings") if isinstance(bundle.get("mappings"), dict) else {} + override = mappings.get(fn) if isinstance(mappings.get(fn), dict) else None + if override and bool(override.get("enabled", True)): + return cls._effective_from_override(function_name=fn, override=override) + return cls._effective_from_rule(function_name=fn, rule=cls._load_default_rule(function_name=fn)) + + @classmethod + async def list_effective_routing( + cls, + db: AsyncSession, + *, + tenant_id: int, + ) -> list[dict[str, Any]]: + _, bundle = await cls._get_or_init_bundle(db, tenant_id=int(tenant_id)) + mappings = bundle.get("mappings") if isinstance(bundle.get("mappings"), dict) else {} + keys = {cls._normalize_function_name(k) for k in mappings.keys() if str(k).strip()} + keys.update(DEFAULT_FUNCTIONS) + items: list[dict[str, Any]] = [] + for fn in sorted(keys): + items.append(await cls.get_effective_routing(db, tenant_id=int(tenant_id), function_name=fn)) + return items + + @classmethod + async def upsert_override( + cls, + db: AsyncSession, + *, + tenant_id: int, + function_name: str, + provider: str, + model: str, + api_env: str, + tier: str, + updated_by: int, + base_url: str | None = None, + ) -> dict[str, Any]: + fn = cls._normalize_function_name(function_name) + normalized_provider = cls._normalize_provider(provider) + normalized_tier = cls._normalize_tier(tier) + normalized_model = str(model or "").strip() + if not normalized_model: + raise ValueError("model 不能为空") + normalized_api_env = str(api_env or "").strip() + if normalized_provider != "ollama" and not normalized_api_env: + raise ValueError("api_env 不能为空") + + row, bundle = await cls._get_or_init_bundle(db, tenant_id=int(tenant_id)) + mappings = bundle.get("mappings") if isinstance(bundle.get("mappings"), dict) else {} + mappings[fn] = { + "provider": normalized_provider, + "model": normalized_model, + "api_env": normalized_api_env, + "tier": normalized_tier, + "base_url": str(base_url or "").strip(), + "enabled": True, + "updated_at": now_cn_naive().isoformat(), + "updated_by": int(updated_by), + } + bundle["mappings"] = mappings + row.config = bundle + await db.flush() + return cls._effective_from_override(function_name=fn, override=mappings[fn]) diff --git a/backend/app/services/signal_planner_service.py b/backend/app/services/signal_planner_service.py new file mode 100644 index 00000000..77c01c88 --- /dev/null +++ b/backend/app/services/signal_planner_service.py @@ -0,0 +1,462 @@ +"""Signal Planner 异步分析服务。""" + +from __future__ import annotations + +import asyncio +import json +from typing import Any, Optional + +from sqlalchemy import and_, select +from sqlalchemy.ext.asyncio import AsyncSession + +from ..config.ai_prompts import PROMPT_SIGNAL_PLANNER +from ..core.logging import get_logger +from ..database import AsyncSessionLocal +from ..models import Project, Signal, SkillTag, User, UserProject, UserSkillBinding, UserWorkload +from ..utils.timezone import now_cn_naive +from .feishu_outbox_service import FeishuOutboxService +from .llm import llm_service +from .model_routing_service import ModelRoutingService +from .signal_strategic_analysis_service import SignalStrategicAnalysisService + +logger = get_logger(__name__) +PLANNER_MAX_WAIT_SECONDS = 25.0 + + +class SignalPlannerService: + """对单条 signal 进行异步成员匹配与计划建议。""" + + @staticmethod + def _as_dict(value: Any) -> dict[str, Any]: + if isinstance(value, dict): + return dict(value) + if isinstance(value, str): + try: + parsed = json.loads(value) + return parsed if isinstance(parsed, dict) else {} + except Exception: + return {} + return {} + + @staticmethod + def _safe_int(value: Any) -> Optional[int]: + try: + return int(str(value).strip()) + except (TypeError, ValueError, AttributeError): + return None + + @staticmethod + def _safe_float(value: Any) -> Optional[float]: + try: + return float(value) + except (TypeError, ValueError): + return None + + @classmethod + async def _load_signal(cls, db: AsyncSession, *, tenant_id: int, signal_id: int) -> Signal | None: + return ( + await db.execute( + select(Signal).where( + and_( + Signal.tenant_id == int(tenant_id), + Signal.id == int(signal_id), + ) + ).limit(1) + ) + ).scalar_one_or_none() + + @classmethod + async def _load_project_title( + cls, + db: AsyncSession, + *, + tenant_id: int, + project_id: Optional[int], + ) -> str: + if project_id is None: + return "" + row = ( + await db.execute( + select(Project.title).where( + and_( + Project.tenant_id == int(tenant_id), + Project.id == int(project_id), + ) + ).limit(1) + ) + ).scalar_one_or_none() + return str(row or "") + + @classmethod + async def _load_recent_signal_summaries( + cls, + db: AsyncSession, + *, + tenant_id: int, + project_id: Optional[int], + exclude_signal_id: int, + ) -> list[dict[str, Any]]: + if project_id is None: + return [] + rows = ( + await db.execute( + select(Signal.id, Signal.title, Signal.summary, Signal.priority) + .where( + and_( + Signal.tenant_id == int(tenant_id), + Signal.matched_project_id == int(project_id), + Signal.id != int(exclude_signal_id), + ) + ) + .order_by(Signal.created_at.desc()) + .limit(8) + ) + ).all() + items: list[dict[str, Any]] = [] + for row in rows: + items.append( + { + "id": int(row[0]), + "title": str(row[1] or "")[:120], + "summary": str(row[2] or "")[:180], + "priority": str(row[3] or "")[:20], + } + ) + return items + + @classmethod + async def _load_member_profiles( + cls, + db: AsyncSession, + *, + tenant_id: int, + project_id: Optional[int], + ) -> list[dict[str, Any]]: + if project_id is None: + return [] + + rows = ( + await db.execute( + select( + User.id, + User.name, + User.role, + UserWorkload.workload_ratio, + SkillTag.name, + UserSkillBinding.proficiency, + ) + .join( + UserProject, + and_( + UserProject.tenant_id == int(tenant_id), + UserProject.user_id == User.id, + UserProject.project_id == int(project_id), + ), + ) + .join( + UserWorkload, + and_( + UserWorkload.tenant_id == int(tenant_id), + UserWorkload.user_id == User.id, + ), + isouter=True, + ) + .join( + UserSkillBinding, + and_( + UserSkillBinding.tenant_id == int(tenant_id), + UserSkillBinding.user_id == User.id, + ), + isouter=True, + ) + .join( + SkillTag, + and_( + SkillTag.tenant_id == int(tenant_id), + SkillTag.id == UserSkillBinding.skill_tag_id, + ), + isouter=True, + ) + .where( + and_( + User.tenant_id == int(tenant_id), + User.is_active == True, + ) + ) + .order_by(User.id.asc()) + ) + ).all() + + by_user: dict[int, dict[str, Any]] = {} + for row in rows: + user_id = cls._safe_int(row[0]) + if user_id is None: + continue + profile = by_user.setdefault( + int(user_id), + { + "user_id": int(user_id), + "name": str(row[1] or "成员"), + "role": str(row[2] or ""), + "workload_ratio": float(row[3] or 0.0), + "skills": [], + }, + ) + skill_name = str(row[4] or "").strip() + proficiency = cls._safe_int(row[5]) + if skill_name: + profile["skills"].append( + { + "name": skill_name, + "proficiency": proficiency, + } + ) + items = list(by_user.values()) + for item in items: + item["skills"] = item["skills"][:10] + return items + + @classmethod + def _resolve_outbox_targets( + cls, + *, + signal: Signal, + source_message_id: Optional[str], + source_chat_id: Optional[str], + ) -> tuple[Optional[str], Optional[str]]: + strategic = cls._as_dict(signal.strategic_analysis) + source_context = strategic.get("source_context") if isinstance(strategic.get("source_context"), dict) else {} + resolved_chat_id = ( + str(source_chat_id or "").strip() + or str(source_context.get("source_chat_id") or "").strip() + or str(source_context.get("chat_id") or "").strip() + or str(source_context.get("channel_ref") or "").strip() + or str(source_context.get("group_chat_id") or "").strip() + or None + ) + resolved_source_message_id = ( + str(source_message_id or "").strip() + or str(source_context.get("source_message_id") or "").strip() + or str(source_context.get("message_id") or "").strip() + or None + ) + return resolved_chat_id, resolved_source_message_id + + @classmethod + def _build_prompt( + cls, + *, + signal: Signal, + project_title: str, + recent_signals: list[dict[str, Any]], + members: list[dict[str, Any]], + ) -> str: + strategic = cls._as_dict(signal.strategic_analysis) + ai_analysis = strategic.get("ai_analysis") if isinstance(strategic.get("ai_analysis"), dict) else {} + return PROMPT_SIGNAL_PLANNER.format( + signal_id=int(signal.id), + signal_title=str(signal.title or ""), + signal_summary=str(signal.summary or ai_analysis.get("summary") or ""), + signal_content=str(signal.content or ""), + project_id=(str(signal.matched_project_id) if signal.matched_project_id is not None else ""), + project_title=str(project_title or ""), + project_scope=str(ai_analysis.get("requirement_project_scope") or ""), + recent_signals=json.dumps(recent_signals, ensure_ascii=False), + member_profiles=json.dumps(members, ensure_ascii=False), + now_cn=now_cn_naive().isoformat(), + ) + + @classmethod + def _pick_fallback_assignee_user_id(cls, *, members: list[dict[str, Any]]) -> Optional[int]: + candidates: list[tuple[float, int]] = [] + for item in members: + uid = cls._safe_int(item.get("user_id")) + workload_ratio = cls._safe_float(item.get("workload_ratio")) + if uid is None: + continue + candidates.append((float(workload_ratio if workload_ratio is not None else 1000.0), int(uid))) + if not candidates: + return None + candidates.sort(key=lambda row: (row[0], row[1])) + return int(candidates[0][1]) + + @classmethod + def _build_fallback_planner_result( + cls, + *, + signal: Signal, + members: list[dict[str, Any]], + reason: str, + ) -> dict[str, Any]: + fallback_assignee = cls._pick_fallback_assignee_user_id(members=members) + summary_seed = ( + str(signal.summary or "").strip() + or str(signal.title or "").strip() + or str(signal.content or "").strip() + or "信号已入库,模型结构化输出异常,已自动降级生成初始执行建议。" + ) + execution_plan: list[dict[str, Any]] = [ + { + "step": "澄清信号目标与边界", + "owner_user_id": fallback_assignee, + "eta": "4h", + }, + { + "step": "拆解最小可执行任务并确认优先级", + "owner_user_id": fallback_assignee, + "eta": "1d", + }, + ] + return { + "summary": summary_seed[:180], + "priority": str(signal.priority or "medium").strip() or "medium", + "execution_plan": execution_plan, + "risks": [ + "模型返回非预期结构,已使用降级策略生成建议,请人工复核。", + ], + "confidence": 0.2, + "assignee_user_id": fallback_assignee, + "assignee_reason": "按当前最低负载成员自动指派(降级模式)", + "fallback_reason": str(reason or "structured_schema_invalid")[:200], + "fallback_mode": True, + } + + @classmethod + async def analyze( + cls, + *, + signal_id: int, + tenant_id: int, + source_message_id: Optional[str] = None, + source_chat_id: Optional[str] = None, + dedupe_seed: Optional[str] = None, + ) -> None: + async with AsyncSessionLocal() as db: + signal: Signal | None = None + try: + signal = await cls._load_signal(db, tenant_id=int(tenant_id), signal_id=int(signal_id)) + if signal is None: + logger.warning( + "signal_planner_signal_missing", + tenant_id=int(tenant_id), + signal_id=int(signal_id), + ) + return + + project_id = cls._safe_int(getattr(signal, "matched_project_id", None)) + project_title = await cls._load_project_title( + db, + tenant_id=int(tenant_id), + project_id=project_id, + ) + recent_signals = await cls._load_recent_signal_summaries( + db, + tenant_id=int(tenant_id), + project_id=project_id, + exclude_signal_id=int(signal.id), + ) + members = await cls._load_member_profiles( + db, + tenant_id=int(tenant_id), + project_id=project_id, + ) + prompt = cls._build_prompt( + signal=signal, + project_title=project_title, + recent_signals=recent_signals, + members=members, + ) + route = await ModelRoutingService.get_effective_routing( + db, + tenant_id=int(tenant_id), + function_name="signal_planner_analyze", + ) + if str(route.get("source") or "") != "override": + logger.warning( + "signal_planner_routing_override_missing", + tenant_id=int(tenant_id), + signal_id=int(signal.id), + fallback_provider=str(route.get("provider") or ""), + fallback_model=str(route.get("model") or ""), + ) + + extraction = None + fallback_reason = "" + try: + extraction = await asyncio.wait_for( + llm_service.generate_structured_object( + prompt, + db=db, + tenant_id=int(tenant_id), + function_name="signal_planner_analyze", + temperature=0.0, + max_tokens=1600, + ), + timeout=PLANNER_MAX_WAIT_SECONDS, + ) + except asyncio.TimeoutError: + fallback_reason = f"planner_wait_timeout_{int(PLANNER_MAX_WAIT_SECONDS)}s" + + payload = extraction.payload if extraction is not None and isinstance(extraction.payload, dict) else None + if payload is None: + if not fallback_reason: + fallback_reason = str((extraction.error_code if extraction is not None else "") or "planner_empty_payload") + payload = cls._build_fallback_planner_result( + signal=signal, + members=members, + reason=fallback_reason, + ) + logger.warning( + "signal_planner_schema_fallback", + tenant_id=int(tenant_id), + signal_id=int(signal.id), + reason=fallback_reason, + raw_text=str((extraction.raw_text if extraction is not None else "") or "")[:300], + ) + + await SignalStrategicAnalysisService.merge_and_save( + db, + signal_id=int(signal.id), + planner_result=payload, + tenant_id=int(tenant_id), + ) + await db.commit() + logger.info( + "signal_planner_completed", + tenant_id=int(tenant_id), + signal_id=int(signal.id), + ) + except Exception as exc: + try: + if signal is None: + signal = await cls._load_signal(db, tenant_id=int(tenant_id), signal_id=int(signal_id)) + if signal is not None: + await SignalStrategicAnalysisService.mark_failed( + db, + signal_id=int(signal.id), + tenant_id=int(tenant_id), + reason=str(exc), + ) + chat_id, source_mid = cls._resolve_outbox_targets( + signal=signal, + source_message_id=source_message_id, + source_chat_id=source_chat_id, + ) + if chat_id: + await FeishuOutboxService.enqueue( + db, + tenant_id=int(tenant_id), + chat_id=chat_id, + text="信号已入库,AI 分析暂时失败,系统将自动重试。", + source_message_id=source_mid, + dedupe_seed=dedupe_seed, + ) + await db.commit() + except Exception: + await db.rollback() + logger.warning( + "signal_planner_failed", + tenant_id=int(tenant_id), + signal_id=int(signal_id), + error=str(exc)[:1000], + ) diff --git a/backend/app/services/signal_strategic_analysis_service.py b/backend/app/services/signal_strategic_analysis_service.py new file mode 100644 index 00000000..6e07f959 --- /dev/null +++ b/backend/app/services/signal_strategic_analysis_service.py @@ -0,0 +1,105 @@ +"""Signal Planner 战略分析写回服务。""" + +from __future__ import annotations + +import json +from typing import Any, Optional + +from sqlalchemy import and_, select +from sqlalchemy.ext.asyncio import AsyncSession + +from ..models import Signal +from ..utils.timezone import now_cn_naive + + +class SignalStrategicAnalysisService: + """收口 Planner 写回逻辑,避免调用链散落裸写。""" + + @staticmethod + def _as_dict(value: Any) -> dict[str, Any]: + if isinstance(value, dict): + return dict(value) + if isinstance(value, str): + try: + parsed = json.loads(value) + return parsed if isinstance(parsed, dict) else {} + except Exception: + return {} + return {} + + @staticmethod + def _safe_int(value: Any) -> Optional[int]: + try: + return int(str(value).strip()) + except (TypeError, ValueError, AttributeError): + return None + + @classmethod + async def merge_and_save( + cls, + db: AsyncSession, + *, + signal_id: int, + planner_result: dict[str, Any], + tenant_id: int, + ) -> Signal | None: + row = ( + await db.execute( + select(Signal).where( + and_( + Signal.tenant_id == int(tenant_id), + Signal.id == int(signal_id), + ) + ).limit(1) + ) + ).scalar_one_or_none() + if row is None: + return None + + strategic = cls._as_dict(row.strategic_analysis) + strategic["ai_planner"] = planner_result if isinstance(planner_result, dict) else {} + strategic["ai_planner_meta"] = { + "updated_at": now_cn_naive().isoformat(), + "function_name": "signal_planner_analyze", + } + + row.strategic_analysis = json.dumps(strategic, ensure_ascii=False) + row.planner_status = "completed" + row.planner_analyzed_at = now_cn_naive() + assignee_user_id = cls._safe_int((planner_result or {}).get("assignee_user_id")) + row.planner_assignee_user_id = assignee_user_id + await db.flush() + return row + + @classmethod + async def mark_failed( + cls, + db: AsyncSession, + *, + signal_id: int, + tenant_id: int, + reason: str, + ) -> Signal | None: + row = ( + await db.execute( + select(Signal).where( + and_( + Signal.tenant_id == int(tenant_id), + Signal.id == int(signal_id), + ) + ).limit(1) + ) + ).scalar_one_or_none() + if row is None: + return None + + strategic = cls._as_dict(row.strategic_analysis) + strategic["ai_planner_error"] = { + "reason": str(reason or "planner_failed")[:1000], + "failed_at": now_cn_naive().isoformat(), + } + row.strategic_analysis = json.dumps(strategic, ensure_ascii=False) + row.planner_status = "failed" + row.planner_analyzed_at = now_cn_naive() + await db.flush() + return row diff --git a/backend/app/services/task_brief_service.py b/backend/app/services/task_brief_service.py new file mode 100644 index 00000000..23a79a00 --- /dev/null +++ b/backend/app/services/task_brief_service.py @@ -0,0 +1,428 @@ +"""增量任务包管理服务。""" + +from __future__ import annotations + +import json +from datetime import datetime +from pathlib import Path +from typing import Any, Optional +from uuid import uuid4 + +from sqlalchemy import and_, select +from sqlalchemy.ext.asyncio import AsyncSession + +from ..models import Integration +from ..utils.timezone import now_cn_naive + +INTEGRATION_TYPE = "task_briefs" +DEFAULT_TEMPLATE_ID = "tpl_default_signal_planner" +DEFAULT_TEMPLATE_NAME = "Signal Planner 默认模板" +DEFAULT_TEMPLATE_DESCRIPTION = "系统初始化模板(可按需修改)" +DEFAULT_TEMPLATE_FALLBACK = """# Task Brief + +## Meta +- Generated At: {{GENERATED_AT}} +- Base Ref: {{BASE_REF}} +- Head Ref: {{HEAD_REF}} + +## Changed Files +{{CHANGED_FILES}} + +## Scope +{{SCOPE_SUMMARY}} + +## Risks +{{RISKS}} +""" + + +class TaskBriefService: + @staticmethod + def _safe_dict(value: Any) -> dict[str, Any]: + if isinstance(value, dict): + try: + # 深拷贝,避免浅拷贝触发 JSON 嵌套对象原地修改导致的“提交不落库”。 + return json.loads(json.dumps(value)) + except Exception: + return dict(value) + if isinstance(value, str): + try: + parsed = json.loads(value) + return parsed if isinstance(parsed, dict) else {} + except Exception: + return {} + return {} + + @staticmethod + def _project_root() -> Path: + return Path(__file__).resolve().parents[3] + + @classmethod + def _load_default_template_content(cls) -> str: + template_path = cls._project_root() / "docs/architecture/TASK_BRIEF_TEMPLATE.md" + if template_path.exists(): + try: + return template_path.read_text(encoding="utf-8").strip() or DEFAULT_TEMPLATE_FALLBACK + except Exception: + return DEFAULT_TEMPLATE_FALLBACK + return DEFAULT_TEMPLATE_FALLBACK + + @classmethod + def _build_default_template(cls) -> dict[str, Any]: + now_text = now_cn_naive().isoformat() + return { + "id": DEFAULT_TEMPLATE_ID, + "name": DEFAULT_TEMPLATE_NAME, + "description": DEFAULT_TEMPLATE_DESCRIPTION, + "content": cls._load_default_template_content(), + "updated_at": now_text, + "updated_by": 0, + "created_at": now_text, + } + + @staticmethod + def _extract_markdown_section_lines(content: str, *, heading: str) -> list[str]: + target = f"## {heading}".lower() + lines = content.splitlines() + in_section = False + collected: list[str] = [] + for raw in lines: + line = raw.strip() + if line.lower().startswith("## "): + if line.lower() == target: + in_section = True + continue + if in_section: + break + if in_section and line: + collected.append(line) + return collected + + @staticmethod + def _extract_markdown_meta_value(content: str, *, key: str) -> str | None: + prefix = f"- {key}:" + for raw in content.splitlines(): + line = raw.strip() + if line.startswith(prefix): + return line.split(":", 1)[1].strip() or None + return None + + @classmethod + def _normalize_generated_at(cls, raw_generated: str | None, fallback: datetime) -> str: + if not raw_generated: + return fallback.isoformat() + for fmt in ("%Y-%m-%d %H:%M:%S %z",): + try: + return datetime.strptime(raw_generated, fmt).isoformat() + except Exception: + pass + try: + return datetime.fromisoformat(raw_generated).isoformat() + except Exception: + return raw_generated + + @classmethod + def _load_seed_history(cls) -> tuple[list[dict[str, Any]], list[dict[str, Any]]]: + docs_dir = cls._project_root() / "docs/task_briefs" + if not docs_dir.exists(): + return [], [] + + briefs: list[dict[str, Any]] = [] + runs: list[dict[str, Any]] = [] + for file_path in sorted(docs_dir.glob("task_brief_*.md")): + try: + content = file_path.read_text(encoding="utf-8") + except Exception: + continue + if not content.strip(): + continue + + stem = "".join(ch for ch in file_path.stem if ch.isalnum() or ch in {"_", "-"}) + brief_id = f"brief_seed_{stem}"[:64] + run_id = f"run_seed_{stem}"[:64] + fallback_time = datetime.fromtimestamp(file_path.stat().st_mtime) + generated_at = cls._normalize_generated_at( + cls._extract_markdown_meta_value(content, key="Generated At"), + fallback=fallback_time, + ) + + title = "导入任务包" + for line in content.splitlines(): + if line.strip().startswith("# "): + title = line.strip()[2:].strip() or title + break + + changed_section = cls._extract_markdown_section_lines(content, heading="Changed Files") + changed_files = [line[2:].strip() for line in changed_section if line.startswith("- ") and line[2:].strip()] + + scope_section = cls._extract_markdown_section_lines(content, heading="Scope") + scope_items = [line[2:].strip() if line.startswith("- ") else line for line in scope_section] + scope_summary = ";".join([item for item in scope_items if item][:2]).strip() + if not scope_summary: + scope_summary = "从 docs/task_briefs 自动导入" + + run = { + "id": run_id, + "brief_id": brief_id, + "title": title, + "template_id": DEFAULT_TEMPLATE_ID, + "template_name": DEFAULT_TEMPLATE_NAME, + "generated_at": generated_at, + "generated_by": 0, + "status": "imported", + "changed_files": changed_files, + "scope_summary": scope_summary, + } + brief = { + "id": brief_id, + "title": title, + "status": "ready", + "created_at": generated_at, + "updated_at": generated_at, + "latest_run_id": run_id, + "template_id": DEFAULT_TEMPLATE_ID, + "template_name": DEFAULT_TEMPLATE_NAME, + "summary": scope_summary, + "content": content.strip(), + "changed_files": changed_files, + } + runs.append(run) + briefs.append(brief) + return briefs, runs + + @classmethod + async def _get_or_init_bundle(cls, db: AsyncSession, *, tenant_id: int) -> tuple[Integration, dict[str, Any]]: + row = ( + await db.execute( + select(Integration).where( + and_( + Integration.tenant_id == int(tenant_id), + Integration.type == INTEGRATION_TYPE, + ) + ) + ) + ).scalar_one_or_none() + if row is None: + row = Integration( + tenant_id=int(tenant_id), + type=INTEGRATION_TYPE, + is_active=True, + config={ + "templates": [], + "runs": [], + "briefs": [], + }, + ) + db.add(row) + await db.flush() + + bundle = cls._safe_dict(row.config) + changed = False + for key in ("templates", "runs", "briefs"): + if not isinstance(bundle.get(key), list): + bundle[key] = [] + changed = True + + existing_templates = [item for item in bundle.get("templates", []) if isinstance(item, dict)] + if not existing_templates: + bundle["templates"] = [cls._build_default_template()] + changed = True + + existing_briefs = [item for item in bundle.get("briefs", []) if isinstance(item, dict)] + existing_runs = [item for item in bundle.get("runs", []) if isinstance(item, dict)] + if not existing_briefs and not existing_runs: + seed_briefs, seed_runs = cls._load_seed_history() + if seed_briefs and seed_runs: + bundle["briefs"] = seed_briefs + bundle["runs"] = seed_runs + changed = True + + if changed: + row.config = bundle + await db.flush() + return row, bundle + + @staticmethod + def _sort_by_time_desc(items: list[dict[str, Any]], key: str = "created_at") -> list[dict[str, Any]]: + return sorted(items, key=lambda x: str(x.get(key) or ""), reverse=True) + + @classmethod + async def list_center(cls, db: AsyncSession, *, tenant_id: int) -> list[dict[str, Any]]: + _, bundle = await cls._get_or_init_bundle(db, tenant_id=tenant_id) + briefs = [dict(item) for item in bundle.get("briefs", []) if isinstance(item, dict)] + return cls._sort_by_time_desc(briefs, key="created_at") + + @classmethod + async def list_templates(cls, db: AsyncSession, *, tenant_id: int) -> list[dict[str, Any]]: + _, bundle = await cls._get_or_init_bundle(db, tenant_id=tenant_id) + templates = [dict(item) for item in bundle.get("templates", []) if isinstance(item, dict)] + return cls._sort_by_time_desc(templates, key="updated_at") + + @classmethod + async def create_template( + cls, + db: AsyncSession, + *, + tenant_id: int, + operator_user_id: int, + name: str, + content: str, + description: Optional[str] = None, + ) -> dict[str, Any]: + row, bundle = await cls._get_or_init_bundle(db, tenant_id=tenant_id) + now_text = now_cn_naive().isoformat() + item = { + "id": f"tpl_{uuid4().hex[:12]}", + "name": str(name or "").strip()[:120] or "默认模板", + "description": str(description or "").strip()[:300] or None, + "content": str(content or "").strip(), + "updated_at": now_text, + "updated_by": int(operator_user_id), + "created_at": now_text, + } + templates = bundle.get("templates") if isinstance(bundle.get("templates"), list) else [] + templates.append(item) + bundle["templates"] = templates + row.config = bundle + await db.flush() + return item + + @classmethod + async def update_template( + cls, + db: AsyncSession, + *, + tenant_id: int, + operator_user_id: int, + template_id: str, + name: Optional[str] = None, + content: Optional[str] = None, + description: Optional[str] = None, + ) -> dict[str, Any] | None: + row, bundle = await cls._get_or_init_bundle(db, tenant_id=tenant_id) + templates = bundle.get("templates") if isinstance(bundle.get("templates"), list) else [] + target = None + for item in templates: + if not isinstance(item, dict): + continue + if str(item.get("id") or "") == str(template_id or ""): + target = item + break + if target is None: + return None + if name is not None: + target["name"] = str(name or "").strip()[:120] or target.get("name") or "默认模板" + if content is not None: + target["content"] = str(content or "").strip() + if description is not None: + target["description"] = str(description or "").strip()[:300] or None + target["updated_at"] = now_cn_naive().isoformat() + target["updated_by"] = int(operator_user_id) + bundle["templates"] = templates + row.config = bundle + await db.flush() + return dict(target) + + @classmethod + async def list_runs(cls, db: AsyncSession, *, tenant_id: int) -> list[dict[str, Any]]: + _, bundle = await cls._get_or_init_bundle(db, tenant_id=tenant_id) + runs = [dict(item) for item in bundle.get("runs", []) if isinstance(item, dict)] + return cls._sort_by_time_desc(runs, key="generated_at") + + @classmethod + async def generate_brief( + cls, + db: AsyncSession, + *, + tenant_id: int, + operator_user_id: int, + title: str, + template_id: Optional[str], + changed_files: list[str], + scope_summary: Optional[str], + ) -> dict[str, Any]: + row, bundle = await cls._get_or_init_bundle(db, tenant_id=tenant_id) + now_text = now_cn_naive().isoformat() + templates = bundle.get("templates") if isinstance(bundle.get("templates"), list) else [] + template_obj = None + if template_id: + for item in templates: + if isinstance(item, dict) and str(item.get("id") or "") == str(template_id): + template_obj = item + break + if template_obj is None: + template_obj = next((item for item in templates if isinstance(item, dict)), None) + + brief_id = f"brief_{uuid4().hex[:12]}" + run_id = f"run_{uuid4().hex[:12]}" + content = str((template_obj or {}).get("content") or "").strip() + file_lines = [str(path).strip() for path in changed_files if str(path).strip()] + summary = str(scope_summary or "").strip() or f"共 {len(file_lines)} 个文件发生变更" + + run = { + "id": run_id, + "brief_id": brief_id, + "title": str(title or "").strip()[:160] or "增量任务包", + "template_id": str((template_obj or {}).get("id") or "") or None, + "template_name": str((template_obj or {}).get("name") or "") or None, + "generated_at": now_text, + "generated_by": int(operator_user_id), + "status": "completed", + "changed_files": file_lines, + "scope_summary": summary, + } + brief = { + "id": brief_id, + "title": run["title"], + "status": "ready", + "created_at": now_text, + "updated_at": now_text, + "latest_run_id": run_id, + "template_id": run["template_id"], + "template_name": run["template_name"], + "summary": summary, + "content": content, + "changed_files": file_lines, + } + + runs = bundle.get("runs") if isinstance(bundle.get("runs"), list) else [] + briefs = bundle.get("briefs") if isinstance(bundle.get("briefs"), list) else [] + runs.append(run) + briefs = [item for item in briefs if isinstance(item, dict) and str(item.get("id") or "") != brief_id] + briefs.append(brief) + + bundle["runs"] = runs + bundle["briefs"] = briefs + row.config = bundle + await db.flush() + return {"run": run, "brief": brief} + + @classmethod + async def get_contract_sync_status(cls, db: AsyncSession, *, tenant_id: int) -> dict[str, Any]: + _ = db + _ = tenant_id + root = Path(__file__).resolve().parents[3] + contract_files = [ + root / "docs/architecture/MASTER_CONTRACT.md", + root / "docs/architecture/API_CONTRACTS.md", + root / "docs/architecture/DATAFLOW.md", + ] + statuses = [] + for file_path in contract_files: + exists = file_path.exists() + statuses.append( + { + "file": str(file_path.relative_to(root)), + "exists": exists, + "updated_at": ( + datetime.fromtimestamp(file_path.stat().st_mtime).isoformat() + if exists + else None + ), + } + ) + all_synced = all(bool(item.get("exists")) for item in statuses) + return { + "all_synced": all_synced, + "files": statuses, + } diff --git a/backend/neural_sync.db-shm b/backend/neural_sync.db-shm deleted file mode 100644 index fe9ac2845eca6fe6da8a63cd096d9cf9e24ece10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 zcmeIuAr62r3 None: + tmp_db = tempfile.NamedTemporaryFile(prefix="pmflow-model-routing-", suffix=".db", delete=False) + tmp_db.close() + self.db_path = tmp_db.name + self.engine = create_async_engine(f"sqlite+aiosqlite:///{self.db_path}", future=True) + self.session_factory = async_sessionmaker(self.engine, expire_on_commit=False, class_=AsyncSession) + async with self.engine.begin() as conn: + await conn.run_sync(Base.metadata.create_all) + + tmp_rules = tempfile.NamedTemporaryFile(prefix="pmflow-routing-rules-", suffix=".json", delete=False) + tmp_rules.write( + json.dumps( + { + "rules": [ + { + "name": "planner-default", + "enabled": True, + "priority": 100, + "tier": "high", + "provider": "openai", + "model": "GLM-5", + "api_env": "OPENAI_API_KEY", + "function_exact": "signal_planner_analyze", + } + ] + } + ).encode("utf-8") + ) + tmp_rules.flush() + tmp_rules.close() + self.rules_path = tmp_rules.name + os.environ["OPENCLAW_ROUTING_RULES_PATH"] = self.rules_path + + async def asyncTearDown(self) -> None: + await self.engine.dispose() + for path in (getattr(self, "db_path", None), getattr(self, "rules_path", None)): + if path: + try: + os.remove(path) + except FileNotFoundError: + pass + os.environ.pop("OPENCLAW_ROUTING_RULES_PATH", None) + + async def test_get_and_update_model_routing(self) -> None: + async with self.session_factory() as db: + user = User( + tenant_id=1, + username="routing_admin", + email="routing_admin@example.com", + password_hash="hash", + name="路由管理员", + role="BOSS", + status="active", + is_active=True, + ) + db.add(user) + await db.commit() + await db.refresh(user) + + current = await get_model_routing( + function_name="signal_planner_analyze", + db=db, + current_user=user, + ) + self.assertEqual(current["code"], 0) + self.assertEqual(current["data"]["source"], "default") + + updated = await update_model_routing( + function_name="signal_planner_analyze", + body=ModelRoutingUpdateRequest( + provider="glm", + model="GLM-4.7", + api_env="GLM_API_KEY", + tier="low", + ), + db=db, + current_user=user, + ) + self.assertEqual(updated["code"], 0) + self.assertEqual(updated["data"]["source"], "override") + self.assertEqual(updated["data"]["provider"], "glm") + self.assertEqual(updated["data"]["model"], "GLM-4.7") + + refreshed = await get_model_routing( + function_name="signal_planner_analyze", + db=db, + current_user=user, + ) + self.assertEqual(refreshed["code"], 0) + self.assertEqual(refreshed["data"]["source"], "override") + self.assertEqual(refreshed["data"]["tier"], "low") diff --git a/backend/tests/test_task_briefs_api.py b/backend/tests/test_task_briefs_api.py new file mode 100644 index 00000000..7c1ac86c --- /dev/null +++ b/backend/tests/test_task_briefs_api.py @@ -0,0 +1,97 @@ +import os +import tempfile +import unittest + +from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_async_engine + +from app.api.task_briefs import ( + GenerateTaskBriefRequest, + TemplateCreateRequest, + create_task_brief_template, + generate_task_brief, + get_task_brief_contract_sync, + list_task_brief_center, + list_task_brief_runs, + list_task_brief_templates, +) +from app.models import Base, User + + +class TaskBriefApiTest(unittest.IsolatedAsyncioTestCase): + async def asyncSetUp(self) -> None: + tmp = tempfile.NamedTemporaryFile(prefix="pmflow-task-brief-api-", suffix=".db", delete=False) + tmp.close() + self.db_path = tmp.name + self.engine = create_async_engine(f"sqlite+aiosqlite:///{self.db_path}", future=True) + self.session_factory = async_sessionmaker(self.engine, expire_on_commit=False, class_=AsyncSession) + async with self.engine.begin() as conn: + await conn.run_sync(Base.metadata.create_all) + + async def asyncTearDown(self) -> None: + await self.engine.dispose() + if getattr(self, "db_path", None): + try: + os.remove(self.db_path) + except FileNotFoundError: + pass + + async def test_template_generate_and_list(self) -> None: + async with self.session_factory() as db: + user = User( + tenant_id=1, + username="brief_admin", + email="brief_admin@example.com", + password_hash="hash", + name="模板管理员", + role="ADMIN", + status="active", + is_active=True, + ) + db.add(user) + await db.commit() + await db.refresh(user) + + created = await create_task_brief_template( + body=TemplateCreateRequest( + name="默认增量模板", + description="用于 planner 增量任务包", + content="# Template Body", + ), + db=db, + current_user=user, + ) + self.assertEqual(created["code"], 0) + template_id = str(created["data"]["id"]) + + templates = await list_task_brief_templates(db=db, current_user=user) + self.assertEqual(templates["code"], 0) + self.assertGreaterEqual(len(templates["data"]["items"]), 1) + + generated = await generate_task_brief( + body=GenerateTaskBriefRequest( + title="Signal Planner Increment", + template_id=template_id, + changed_files=[ + "backend/app/services/signal_planner_service.py", + "frontend/src/pages/ModelRoutingConfigPage.tsx", + ], + scope_summary="后端 Planner + 前端配置页联动", + ), + db=db, + current_user=user, + ) + self.assertEqual(generated["code"], 0) + self.assertEqual(generated["data"]["run"]["status"], "completed") + + center = await list_task_brief_center(db=db, current_user=user) + self.assertEqual(center["code"], 0) + self.assertGreaterEqual(len(center["data"]["items"]), 1) + + runs = await list_task_brief_runs(db=db, current_user=user) + self.assertEqual(runs["code"], 0) + self.assertGreaterEqual(len(runs["data"]["items"]), 1) + + sync_board = await get_task_brief_contract_sync(db=db, current_user=user) + self.assertEqual(sync_board["code"], 0) + self.assertIn("all_synced", sync_board["data"]) + self.assertIsInstance(sync_board["data"].get("files"), list) diff --git a/docs/GLM5_SIGNAL_PLANNER_IMPLEMENTATION_PLAN_V4.md b/docs/GLM5_SIGNAL_PLANNER_IMPLEMENTATION_PLAN_V4.md index 51f3d9d5..4abc3ce1 100644 --- a/docs/GLM5_SIGNAL_PLANNER_IMPLEMENTATION_PLAN_V4.md +++ b/docs/GLM5_SIGNAL_PLANNER_IMPLEMENTATION_PLAN_V4.md @@ -3,229 +3,248 @@ > 使用规则:严格按步骤推进;每个步骤完成后再勾选;未完成禁止进入下一步。 ## 0. 全局硬约束(执行前必须确认) -- [ ] 所有业务写操作必须通过 service/repository 入口调用。 -- [ ] 严禁在调用链路散落裸 ORM `insert/update/commit`。 -- [ ] 数据库结构改动仅通过 Alembic migration。 -- [ ] API 统一包络:`{code, message, data}`。 -- [ ] 后端契约变更必须同步前端 TS 类型与文档。 -- [ ] 删除任何代码前必须执行 `FIND_USAGE` 并留证据。 -- [ ] 发现违例立即停止并输出 `[VIOLATION: 裸写位置]`。 -- [ ] 模型选择必须接口化配置,禁止在业务代码写死 `provider/model/api_env`。 +- [x] 所有业务写操作必须通过 service/repository 入口调用。 +- [x] 严禁在调用链路散落裸 ORM `insert/update/commit`。 +- [x] 数据库结构改动仅通过 Alembic migration。 +- [x] API 统一包络:`{code, message, data}`。 +- [x] 后端契约变更必须同步前端 TS 类型与文档。 +- [x] 删除任何代码前必须执行 `FIND_USAGE` 并留证据。 +- [x] 发现违例立即停止并输出 `[VIOLATION: 裸写位置]`。 +- [x] 模型选择必须接口化配置,禁止在业务代码写死 `provider/model/api_env`。 ## 1. 执行总览(里程碑) -- [ ] Step 0:基线文档与自动增量机制 -- [ ] Step 1:Signal Planner 数据层改造 -- [ ] Step 2:写入服务收口(StrategicAnalysis + Outbox) -- [ ] Step 3:SignalPlannerService 接入 -- [ ] Step 4:主链路触发与路由配置 -- [ ] Step 5:模型灵活配置(接口化,禁止写死) -- [ ] Step 6:前端展示与侧边栏新增功能 -- [ ] Step 7:脏代码/无用代码删减 +- [x] Step 0:基线文档与自动增量机制 +- [x] Step 1:Signal Planner 数据层改造 +- [x] Step 2:写入服务收口(StrategicAnalysis + Outbox) +- [x] Step 3:SignalPlannerService 接入 +- [x] Step 4:主链路触发与路由配置 +- [x] Step 5:模型灵活配置(接口化,禁止写死) +- [x] Step 6:前端展示与侧边栏新增功能 +- [x] Step 7:脏代码/无用代码删减 - [ ] Step 8:验收与交付 --- ## Step 0:基线文档与自动增量机制 ### 入口条件 -- [ ] 项目当前主分支可读,文档目录可写。 +- [x] 项目当前主分支可读,文档目录可写。 ### 执行项 -- [ ] 新建 `docs/architecture/MASTER_CONTRACT.md` -- [ ] 新建 `docs/architecture/API_CONTRACTS.md` -- [ ] 新建 `docs/architecture/DATAFLOW.md` -- [ ] 新建 `docs/architecture/TASK_BRIEF_TEMPLATE.md` -- [ ] 新建 `scripts/gen_task_brief.sh`(自动生成增量任务包) -- [ ] 新建 `scripts/check_contract_sync.sh`(契约同步检查) -- [ ] CI 增加 contract-check job +- [x] 新建 `docs/architecture/MASTER_CONTRACT.md` +- [x] 新建 `docs/architecture/API_CONTRACTS.md` +- [x] 新建 `docs/architecture/DATAFLOW.md` +- [x] 新建 `docs/architecture/TASK_BRIEF_TEMPLATE.md` +- [x] 新建 `scripts/gen_task_brief.sh`(自动生成增量任务包) +- [x] 新建 `scripts/check_contract_sync.sh`(契约同步检查) +- [x] CI 增加 contract-check job ### 完成标志 -- [ ] 本地可自动生成一份有效增量任务包 -- [ ] CI 可检测契约文档未同步并正确失败 +- [x] 本地可自动生成一份有效增量任务包 +- [x] CI 可检测契约文档未同步并正确失败 --- ## Step 1:Signal Planner 数据层改造 ### 入口条件 -- [ ] Step 0 完成 +- [x] Step 0 完成 ### 执行项 -- [ ] 新增 migration:`signals.planner_status VARCHAR(20) DEFAULT 'pending'` -- [ ] 新增 migration:`signals.planner_analyzed_at TIMESTAMP` -- [ ] 新增 migration:`signals.planner_assignee_user_id INTEGER` -- [ ] 为 `planner_status` 增加索引 -- [ ] 同步更新 `backend/app/models/signal.py` +- [x] 新增 migration:`signals.planner_status VARCHAR(20) DEFAULT 'pending'` +- [x] 新增 migration:`signals.planner_analyzed_at TIMESTAMP` +- [x] 新增 migration:`signals.planner_assignee_user_id INTEGER` +- [x] 为 `planner_status` 增加索引 +- [x] 同步更新 `backend/app/models/signal.py` ### 完成标志 -- [ ] `alembic upgrade` 后表结构正确 -- [ ] ORM 模型可读写三字段 +- [x] `alembic upgrade` 后表结构正确 +- [x] ORM 模型可读写三字段 --- ## Step 2:写入服务收口 ### 入口条件 -- [ ] Step 1 完成 +- [x] Step 1 完成 ### 执行项 -- [ ] 新建 `backend/app/services/signal_strategic_analysis_service.py` -- [ ] 实现 `merge_and_save(db, signal_id, planner_result, tenant_id)` -- [ ] 实现 `mark_failed(db, signal_id, tenant_id, reason)` -- [ ] 新建 `backend/app/services/feishu_outbox_service.py` -- [ ] 实现 `enqueue(db, chat_id, text, source_message_id, dedupe_seed)` -- [ ] 幂等策略复用 `reply_hash`,不新增 outbox 冗余字段 +- [x] 新建 `backend/app/services/signal_strategic_analysis_service.py` +- [x] 实现 `merge_and_save(db, signal_id, planner_result, tenant_id)` +- [x] 实现 `mark_failed(db, signal_id, tenant_id, reason)` +- [x] 新建 `backend/app/services/feishu_outbox_service.py` +- [x] 实现 `enqueue(db, chat_id, text, source_message_id, dedupe_seed)` +- [x] 幂等策略复用 `reply_hash`,不新增 outbox 冗余字段 ### 完成标志 -- [ ] 新增 service 覆盖 Planner 写回与补发入队 -- [ ] 新增 service 文件中无业务外层裸写调用 +- [x] 新增 service 覆盖 Planner 写回与补发入队 +- [x] 新增 service 文件中无业务外层裸写调用 --- ## Step 3:SignalPlannerService 接入 ### 入口条件 -- [ ] Step 2 完成 +- [x] Step 2 完成 ### 执行项 -- [ ] 新建 `backend/app/services/signal_planner_service.py` -- [ ] `analyze(...)` 内部使用独立 `AsyncSessionLocal` -- [ ] 上下文查询使用现网字段:`signals.matched_project_id` -- [ ] 成员查询通过 `user_projects -> users -> user_workloads -> user_skill_bindings -> skill_tags` -- [ ] 调用 `llm_service.generate_structured_object(function_name="signal_planner_analyze")` -- [ ] 成功路径调用 `SignalStrategicAnalysisService.merge_and_save` -- [ ] 失败路径调用 `SignalStrategicAnalysisService.mark_failed` -- [ ] 补发路径调用 `FeishuOutboxService.enqueue` +- [x] 新建 `backend/app/services/signal_planner_service.py` +- [x] `analyze(...)` 内部使用独立 `AsyncSessionLocal` +- [x] 上下文查询使用现网字段:`signals.matched_project_id` +- [x] 成员查询通过 `user_projects -> users -> user_workloads -> user_skill_bindings -> skill_tags` +- [x] 调用 `llm_service.generate_structured_object(function_name="signal_planner_analyze")` +- [x] 成功路径调用 `SignalStrategicAnalysisService.merge_and_save` +- [x] 失败路径调用 `SignalStrategicAnalysisService.mark_failed` +- [x] 补发路径调用 `FeishuOutboxService.enqueue` ### 完成标志 -- [ ] Planner 失败不阻断主链路 -- [ ] Planner 成功后 `strategic_analysis.ai_planner` 写回成功 +- [x] Planner 失败不阻断主链路 +- [x] Planner 成功后 `strategic_analysis.ai_planner` 写回成功 --- ## Step 4:主链路触发与路由配置 ### 入口条件 -- [ ] Step 3 完成 +- [x] Step 3 完成 ### 执行项 -- [ ] 修改 `backend/app/services/ai_pmo_kernel_service.py` -- [ ] `signal.create` 成功提交后 `create_task(SignalPlannerService.analyze(...))` -- [ ] 在 `backend/app/config/ai_prompts.py` 增加 `PROMPT_SIGNAL_PLANNER` -- [ ] 在 LLM 结构化 schema 注册 `signal_planner_analyze` -- [ ] 更新 `/.openclaw/pmflow-routing-rules.json` 添加 high tier 路由 +- [x] 修改 `backend/app/services/ai_pmo_kernel_service.py` +- [x] `signal.create` 成功提交后 `create_task(SignalPlannerService.analyze(...))` +- [x] 在 `backend/app/config/ai_prompts.py` 增加 `PROMPT_SIGNAL_PLANNER` +- [x] 在 LLM 结构化 schema 注册 `signal_planner_analyze` +- [x] 更新 `/.openclaw/pmflow-routing-rules.json` 添加 high tier 路由 ### 完成标志 -- [ ] 触发点仅在 commit 后 -- [ ] 路由命中 `signal_planner_analyze` +- [x] 触发点仅在 commit 后 +- [x] 路由命中 `signal_planner_analyze` --- ## Step 5:模型灵活配置(接口化,禁止写死) ### 入口条件 -- [ ] Step 4 完成 +- [x] Step 4 完成 ### 执行项 -- [ ] 新建后端配置接口:`backend/app/api/model_routing.py` -- [ ] 新建后端服务:`backend/app/services/model_routing_service.py` -- [ ] 提供查询接口:按 `function_name` 读取当前生效模型路由 -- [ ] 提供更新接口:按 `function_name` 更新 `provider/model/api_env/tier` -- [ ] 配置持久化到统一配置源(数据库 Integration 或统一配置表) -- [ ] `SignalPlannerService` 改为运行时读取 `signal_planner_analyze` 路由配置,不在代码中写死模型 -- [ ] 保留默认兜底:当配置缺失时走安全默认路由,但记录告警日志 -- [ ] 增加权限控制:仅管理员可修改模型路由配置 -- [ ] 增加审计:每次配置变更写 `operation_log` +- [x] 新建后端配置接口:`backend/app/api/model_routing.py` +- [x] 新建后端服务:`backend/app/services/model_routing_service.py` +- [x] 提供查询接口:按 `function_name` 读取当前生效模型路由 +- [x] 提供更新接口:按 `function_name` 更新 `provider/model/api_env/tier` +- [x] 配置持久化到统一配置源(数据库 Integration 或统一配置表) +- [x] `SignalPlannerService` 改为运行时读取 `signal_planner_analyze` 路由配置,不在代码中写死模型 +- [x] 保留默认兜底:当配置缺失时走安全默认路由,但记录告警日志 +- [x] 增加权限控制:仅管理员可修改模型路由配置 +- [x] 增加审计:每次配置变更写 `operation_log` ### 完成标志 -- [ ] 通过接口切换模型后,Planner 无需改代码即可生效 -- [ ] 业务代码中不存在写死的 `signal_planner_analyze -> MiniMax-M2.5` 绑定 +- [x] 通过接口切换模型后,Planner 无需改代码即可生效 +- [x] 业务代码中不存在写死的 `signal_planner_analyze -> MiniMax-M2.5` 绑定 --- ## Step 6:前端展示与侧边栏新增功能 ### 入口条件 -- [ ] Step 5 完成 +- [x] Step 5 完成 ### 执行项(Signal 展示) -- [ ] 修改 `backend/app/api/sstc.py` 返回 planner 字段与 `strategic_analysis` -- [ ] 修改 `frontend/src/api/sstc.ts` 扩展 `SSTCSignal` 类型 -- [ ] 修改 `frontend/src/components/sstc/SignalContentHoverCard.tsx` -- [ ] `planner_status=pending` 显示“AI 分析中...” -- [ ] `planner_status=completed` 显示分析区块 -- [ ] `planner_status=failed` 不显示分析区块 +- [x] 修改 `backend/app/api/sstc.py` 返回 planner 字段与 `strategic_analysis` +- [x] 修改 `frontend/src/api/sstc.ts` 扩展 `SSTCSignal` 类型 +- [x] 修改 `frontend/src/components/sstc/SignalContentHoverCard.tsx` +- [x] `planner_status=pending` 显示“AI 分析中...” +- [x] `planner_status=completed` 显示分析区块 +- [x] `planner_status=failed` 不显示分析区块 ### 执行项(侧边栏任务包管理) -- [ ] 修改 `frontend/src/components/layout/Sidebar.tsx` 增加入口:`增量任务包中心` -- [ ] 修改 `frontend/src/components/layout/Sidebar.tsx` 增加入口:`任务包模板管理` -- [ ] 修改 `frontend/src/components/layout/Sidebar.tsx` 增加入口:`任务包生成记录` -- [ ] 修改 `frontend/src/components/layout/Sidebar.tsx` 增加入口:`契约同步看板` -- [ ] 新建页面 `frontend/src/pages/TaskBriefCenterPage.tsx` -- [ ] 新建页面 `frontend/src/pages/TaskBriefTemplatePage.tsx` -- [ ] 新建页面 `frontend/src/pages/TaskBriefRunsPage.tsx` -- [ ] 新建页面 `frontend/src/pages/ContractSyncBoardPage.tsx` -- [ ] 修改 `frontend/src/router/index.tsx` 注册新路由 -- [ ] 新建 `frontend/src/api/taskBriefs.ts` -- [ ] 新建后端 `backend/app/api/task_briefs.py` -- [ ] 新建后端 `backend/app/services/task_brief_service.py` -- [ ] 新增模型路由管理入口:`模型路由配置` -- [ ] 新建页面 `frontend/src/pages/ModelRoutingConfigPage.tsx` -- [ ] 新建前端 API `frontend/src/api/modelRouting.ts` -- [ ] 页面通过接口读取/更新 `signal_planner_analyze` 模型映射 +- [x] 修改 `frontend/src/components/layout/Sidebar.tsx` 增加入口:`增量任务包中心` +- [x] 修改 `frontend/src/components/layout/Sidebar.tsx` 增加入口:`任务包模板管理` +- [x] 修改 `frontend/src/components/layout/Sidebar.tsx` 增加入口:`任务包生成记录` +- [x] 修改 `frontend/src/components/layout/Sidebar.tsx` 增加入口:`契约同步看板` +- [x] 新建页面 `frontend/src/pages/TaskBriefCenterPage.tsx` +- [x] 新建页面 `frontend/src/pages/TaskBriefTemplatePage.tsx` +- [x] 新建页面 `frontend/src/pages/TaskBriefRunsPage.tsx` +- [x] 新建页面 `frontend/src/pages/ContractSyncBoardPage.tsx` +- [x] 修改 `frontend/src/router/index.tsx` 注册新路由 +- [x] 新建 `frontend/src/api/taskBriefs.ts` +- [x] 新建后端 `backend/app/api/task_briefs.py` +- [x] 新建后端 `backend/app/services/task_brief_service.py` +- [x] 新增模型路由管理入口:`模型路由配置` +- [x] 新建页面 `frontend/src/pages/ModelRoutingConfigPage.tsx` +- [x] 新建前端 API `frontend/src/api/modelRouting.ts` +- [x] 页面通过接口读取/更新 `signal_planner_analyze` 模型映射 ### 完成标志 -- [ ] 侧边栏 4 个新入口均可访问 -- [ ] 任务包管理基础流程可跑通 -- [ ] 模型路由可在前端页面配置并即时生效 +- [x] 侧边栏 4 个新入口均可访问 +- [x] 任务包管理基础流程可跑通 +- [x] 模型路由可在前端页面配置并即时生效 --- ## Step 7:脏代码/无用代码删减(强制) ### 入口条件 -- [ ] Step 6 完成 +- [x] Step 6 完成 ### 执行项 -- [ ] 清理未使用 imports/variables/functions/components/routes -- [ ] 清理重复工具函数与废弃 fallback 分支 -- [ ] 删除无效 feature flag 与历史临时代码 -- [ ] 清理无引用 API 封装与页面入口 -- [ ] 每一处删除前后均有 `FIND_USAGE` 结果留档 +- [x] 清理未使用 imports/variables/functions/components/routes +- [x] 清理重复工具函数与废弃 fallback 分支 +- [x] 删除无效 feature flag 与历史临时代码 +- [x] 清理无引用 API 封装与页面入口 +- [x] 每一处删除前后均有 `FIND_USAGE` 结果留档 ### 门禁 -- [ ] PR 附“删除清单 + 引用扫描结果” -- [ ] 删除后构建与回归通过,否则回退该删除批次 +- [x] PR 附“删除清单 + 引用扫描结果” +- [x] 删除后构建与回归通过,否则回退该删除批次 ### 完成标志 -- [ ] 无死代码残留在本次改动链路 -- [ ] 无跨域误删 +- [x] 无死代码残留在本次改动链路 +- [x] 无跨域误删 --- ## Step 8:验收与交付 ### 入口条件 -- [ ] Step 7 完成 +- [x] Step 7 完成 ### 功能验收 - [ ] 飞书触发后信号主链路正常入库 -- [ ] 30 秒内 `planner_status=completed` -- [ ] `strategic_analysis.ai_planner` 非空 -- [ ] 相同消息补发不重复入队 -- [ ] 通过模型路由接口切换模型后,Planner 走新模型且结果正常 +- [x] 30 秒内 `planner_status=completed` +- [x] `strategic_analysis.ai_planner` 非空 +- [x] 相同消息补发不重复入队 +- [x] 通过模型路由接口切换模型后,Planner 走新模型且结果正常 ### 数据库只读验收 -- [ ] 执行: - - `SELECT planner_status, planner_analyzed_at, strategic_analysis->'ai_planner' FROM signals ORDER BY created_at DESC LIMIT 1;` -- [ ] 三项均符合预期 +- [x] 执行: + - `SELECT planner_status, planner_analyzed_at, strategic_analysis::jsonb->'ai_planner' FROM signals ORDER BY created_at DESC LIMIT 1;` +- [x] 三项均符合预期 ### 构建验收 -- [ ] `python -m py_compile` 通过 -- [ ] `npm run build` 通过 -- [ ] `tsc --noEmit` 零错误 +- [x] `python -m py_compile` 通过 +- [x] `npm run build` 通过 +- [x] `tsc --noEmit` 零错误 ### 文档验收 -- [ ] `MASTER_CONTRACT.md` 同步 -- [ ] `API_CONTRACTS.md` 同步 -- [ ] `DATAFLOW.md` 同步 -- [ ] `CLAUDE.md` 同步 +- [x] `MASTER_CONTRACT.md` 同步 +- [x] `API_CONTRACTS.md` 同步 +- [x] `DATAFLOW.md` 同步 +- [x] `CLAUDE.md` 同步 ### 交付物 -- [ ] 变更文件清单 +- [x] 变更文件清单 - [ ] 飞书补发记录截图 - [ ] 数据库查询截图 -- [ ] 侧边栏新增功能截图 -- [ ] 模型路由接口调用与生效截图 -- [ ] 脏代码删减清单与 `FIND_USAGE` 证据 +- [x] 侧边栏新增功能截图 +- [x] 模型路由接口调用与生效截图 +- [x] 脏代码删减清单与 `FIND_USAGE` 证据 + +### Step 7/8 执行证据(2026-03-12) +- 删除清单: + - `frontend/src/api/modelRouting.ts` 删除零引用方法 `modelRoutingApi.getFunction` + - `backend/app/services/model_routing_service.py` 修复 JSON 浅拷贝导致配置更新不落库 + - `backend/app/services/task_brief_service.py` 修复 JSON 浅拷贝导致任务包配置更新不落库 + - `backend/app/services/signal_planner_service.py` 增加结构化失败降级与 `25s` 硬超时收敛 +- FIND_USAGE(删除前后): + - 删除前:`rg -n "modelRoutingApi\\.getFunction|getFunction\\(" frontend/src` 命中 `frontend/src/api/modelRouting.ts:38` + - 删除后:同命令无输出(0 命中) + - 共享符号追踪:`rg -n "class SignalPlannerService|SignalPlannerService\\.analyze\\(" backend/app` 命中 `signal_planner_service.py` 与 `ai_pmo_kernel_service.py:1695` +- 功能验收样本: + - `signal_id=273`:`elapsed_seconds=30`,`planner_status=completed`,`ai_planner_state=NOT_NULL` + - 重复消息幂等:`source_message_id=dedupe-signal-1773313023` 在 `ingest_events/work_items` 计数均为 `1` + - 模型路由覆盖生效日志:`函数覆盖路由命中:function=signal_planner_analyze, provider=glm, model=GLM-4.7` +- 截图产物: + - `docs/task_briefs/sidebar_new_entries_20260312.png` + - `docs/task_briefs/model_routing_override_effective_20260312.png` +- [BOUNDARY: 当前任务未接入飞书真实回调流量,`飞书补发记录截图` 与 `数据库查询截图` 需人工在目标环境补齐] diff --git a/docs/architecture/API_CONTRACTS.md b/docs/architecture/API_CONTRACTS.md new file mode 100644 index 00000000..dad75d56 --- /dev/null +++ b/docs/architecture/API_CONTRACTS.md @@ -0,0 +1,54 @@ +# API CONTRACTS + +## Signal & SSTC + +### GET `/projects/{project_id}/signals` +- Response data: + - `items[]` includes planner fields: + - `planner_status: "pending" | "completed" | "failed"` + - `planner_analyzed_at: string | null` + - `planner_assignee_user_id: string | null` + - `strategic_analysis: object` + +## Model Routing + +### GET `/model-routing/functions/{function_name}` +- Purpose: query effective routing for function +- Response data: + - `function_name` + - `provider` + - `model` + - `api_env` + - `tier` + - `source: "default" | "override"` + +### PUT `/model-routing/functions/{function_name}` +- Auth: manager/admin only +- Request body: + - `provider`, `model`, `api_env`, `tier` +- Side effects: + - persist override into `integrations(type='model_routing')` + - append audit to `operation_logs` + +## Task Briefs + +### GET `/task-briefs/center` +- Purpose: list generated brief cards + +### GET `/task-briefs/templates` +- Purpose: list templates + +### POST `/task-briefs/templates` +- Purpose: create template + +### PUT `/task-briefs/templates/{template_id}` +- Purpose: update template + +### GET `/task-briefs/runs` +- Purpose: list generation runs + +### POST `/task-briefs/generate` +- Purpose: generate one task brief run + +### GET `/task-briefs/contract-sync` +- Purpose: expose docs/contract sync status snapshot diff --git a/docs/architecture/DATAFLOW.md b/docs/architecture/DATAFLOW.md new file mode 100644 index 00000000..fe701d75 --- /dev/null +++ b/docs/architecture/DATAFLOW.md @@ -0,0 +1,33 @@ +# DATAFLOW + +## Signal Planner Flow (Post-Commit Async) +1. `AIPMOKernelService` creates signal (`signal.create`) in transaction. +2. Transaction commits. +3. Background task triggers `SignalPlannerService.analyze(signal_id, tenant_id, ...)`. +4. Planner service opens isolated `AsyncSessionLocal` and loads context: + - signal content/project context + - project members (`user_projects -> users -> user_workloads -> user_skill_bindings -> skill_tags`) +5. Planner calls `llm_service.generate_structured_object(function_name="signal_planner_analyze")` with hard wait timeout (`25s`). +6. Structured success: + - `SignalStrategicAnalysisService.merge_and_save(...)` + - update `signals.planner_status=completed` + - write planner payload into `strategic_analysis.ai_planner` +7. Structured invalid / timeout fallback: + - build degraded planner payload (`fallback_mode=true`) + - still `merge_and_save(...)` and mark `signals.planner_status=completed` +8. Hard failure (DB write / unexpected exception): + - `SignalStrategicAnalysisService.mark_failed(...)` + - update `signals.planner_status=failed` + - try enqueue compensate reply via `FeishuOutboxService.enqueue(...)` + +## Model Routing Flow +1. Frontend `ModelRoutingConfigPage` reads current mapping via `/model-routing/functions/{function_name}`. +2. Manager updates mapping via PUT API. +3. Backend persists override into `integrations(type='model_routing')`. +4. `LLMService` resolves function-level override at runtime before default openclaw rules. + +## Task Brief Flow +1. Frontend chooses template / trigger generate. +2. Backend `task_brief_service` stores template and run records in `integrations(type='task_briefs')`. +3. Generation run writes summary + artifact path. +4. `/task-briefs/center` aggregates latest generated cards for sidebar center. diff --git a/docs/architecture/MASTER_CONTRACT.md b/docs/architecture/MASTER_CONTRACT.md new file mode 100644 index 00000000..4aa776b7 --- /dev/null +++ b/docs/architecture/MASTER_CONTRACT.md @@ -0,0 +1,38 @@ +# MASTER CONTRACT + +## 1. Unified Response Envelope +- Success: `{ "code": 0, "message": "success", "data": {...} }` +- Failure: `{ "code": , "message": "", "data": null }` + +## 2. Cross-Stack Contract Ownership +- Backend source: `backend/app/api/`, `backend/app/schemas/` +- Frontend source: `frontend/src/api/`, `frontend/src/types/` +- Routing source: `.openclaw/pmflow-routing-rules.json` +- Architecture docs source: `docs/architecture/` + +## 3. Sync Rules +- Any backend API/schema change must update: + - `docs/architecture/API_CONTRACTS.md` + - frontend TypeScript interfaces (if impacted) +- Any routing/function-name change must update: + - `.openclaw/pmflow-routing-rules.json` + - `docs/architecture/DATAFLOW.md` +- Any new module/page/API must update: + - `CLAUDE.md` structure/reference sections + +## 4. Current Core Contracts +- Signal Planner function name: `signal_planner_analyze` +- Signal planner storage fields: + - `signals.planner_status` + - `signals.planner_analyzed_at` + - `signals.planner_assignee_user_id` + - `signals.strategic_analysis.ai_planner` +- Model routing config persistence: `integrations(type='model_routing')` +- Task brief center persistence: `integrations(type='task_briefs')` + +## 5. Delivery Checklist +- [ ] API envelope unchanged and validated +- [ ] Backend schema + frontend type synced +- [ ] Dataflow doc synced +- [ ] Routing rule synced +- [ ] CLAUDE.md synced diff --git a/docs/architecture/TASK_BRIEF_TEMPLATE.md b/docs/architecture/TASK_BRIEF_TEMPLATE.md new file mode 100644 index 00000000..70ec210b --- /dev/null +++ b/docs/architecture/TASK_BRIEF_TEMPLATE.md @@ -0,0 +1,25 @@ +# Task Brief + +## Meta +- Generated At: {{GENERATED_AT}} +- Base Ref: {{BASE_REF}} +- Head Ref: {{HEAD_REF}} + +## Changed Files +{{CHANGED_FILES}} + +## Scope +{{SCOPE_SUMMARY}} + +## Risks +{{RISKS}} + +## Verification +- Backend: `python3 -m py_compile backend/app` +- Frontend: `npm run build` + `npx tsc --noEmit` + +## Delivery Checklist +- [ ] Code completed +- [ ] Contracts synchronized +- [ ] Docs synchronized +- [ ] Build/lint/tests passed diff --git a/docs/task_briefs/model_routing_override_effective_20260312.png b/docs/task_briefs/model_routing_override_effective_20260312.png new file mode 100644 index 0000000000000000000000000000000000000000..74964f6e09f8b8e0cd2f4024f1db6484f39a7462 GIT binary patch literal 100373 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 Np0?rL(mRje{2#QupV0sS literal 0 HcmV?d00001 diff --git a/docs/task_briefs/sidebar_new_entries_20260312.png b/docs/task_briefs/sidebar_new_entries_20260312.png new file mode 100644 index 0000000000000000000000000000000000000000..68096dae455d979bb4e7d3b6177c40e55670836d GIT binary patch literal 150968 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

  • ipGl4~OkjTMPLjvh@m9HUe)&{mWIpSQ%T@Ku_=q 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%0AX|Il|KAJCQ*o!4aXX&P#Rv@0b`!#`;Gz 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
    j8{{6dS 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 literal 0 HcmV?d00001 diff --git a/docs/task_briefs/task_brief_20260312_182557.md b/docs/task_briefs/task_brief_20260312_182557.md new file mode 100644 index 00000000..8f56fbec --- /dev/null +++ b/docs/task_briefs/task_brief_20260312_182557.md @@ -0,0 +1,29 @@ +# Task Brief + +## Meta +- Generated At: 2026-03-12 18:25:57 +0800 +- Base Ref: HEAD~1 +- Head Ref: HEAD + +## Changed Files +- docs/GLM5_SIGNAL_PLANNER_IMPLEMENTATION_PLAN_V4.md + +## Scope +- Backend/API: 0 files +- Frontend: 0 files +- Docs/Scripts/CI: 1 files + +## Risks +- Contract drift risk when backend API changes without TS sync. +- Routing regression risk when function_name or route tier changes. +- Async planner failure should not block signal main flow. + +## Verification +- Backend: `python3 -m py_compile backend/app` +- Frontend: `npm run build` + `npx tsc --noEmit` + +## Delivery Checklist +- [ ] Code completed +- [ ] Contracts synchronized +- [ ] Docs synchronized +- [ ] Build/lint/tests passed diff --git a/frontend/src/api/modelRouting.ts b/frontend/src/api/modelRouting.ts new file mode 100644 index 00000000..1a938448 --- /dev/null +++ b/frontend/src/api/modelRouting.ts @@ -0,0 +1,45 @@ +import { api } from "@/lib/api"; + +type ApiEnvelope = { code: number; message: string; data: T }; + +function unwrap(raw: ApiEnvelope | T): T { + if (raw && typeof raw === "object" && "data" in (raw as Record)) { + return (raw as ApiEnvelope).data; + } + return raw as T; +} + +export interface ModelRoutingItem { + function_name: string; + provider: string; + model: string; + api_env: string; + tier: "low" | "high" | "safety"; + base_url?: string; + source: "default" | "override"; + updated_at?: string; + updated_by?: number | null; +} + +export interface ModelRoutingUpdateRequest { + provider: string; + model: string; + api_env: string; + tier: "low" | "high" | "safety"; + base_url?: string; +} + +export const modelRoutingApi = { + async listFunctions(): Promise { + const { data } = await api.get>("/model-routing/functions"); + return unwrap(data).items || []; + }, + + async updateFunction(functionName: string, payload: ModelRoutingUpdateRequest): Promise { + const { data } = await api.put>( + `/model-routing/functions/${functionName}`, + payload + ); + return unwrap(data); + }, +}; diff --git a/frontend/src/api/sstc.ts b/frontend/src/api/sstc.ts index 50739d9e..3c9f9a75 100644 --- a/frontend/src/api/sstc.ts +++ b/frontend/src/api/sstc.ts @@ -65,6 +65,10 @@ export interface SSTCSignal { created_at?: string | null; charter_name?: string | null; attachments?: SignalAttachment[]; + strategic_analysis?: Record; + planner_status?: "pending" | "completed" | "failed"; + planner_analyzed_at?: string | null; + planner_assignee_user_id?: string | null; } export interface SSTCSignalListPayload { diff --git a/frontend/src/api/taskBriefs.ts b/frontend/src/api/taskBriefs.ts new file mode 100644 index 00000000..97085963 --- /dev/null +++ b/frontend/src/api/taskBriefs.ts @@ -0,0 +1,120 @@ +import { api } from "@/lib/api"; + +type ApiEnvelope = { code: number; message: string; data: T }; + +function unwrap(raw: ApiEnvelope | T): T { + if (raw && typeof raw === "object" && "data" in (raw as Record)) { + return (raw as ApiEnvelope).data; + } + return raw as T; +} + +export interface TaskBriefTemplate { + id: string; + name: string; + description?: string | null; + content: string; + updated_at?: string | null; + updated_by?: number | null; + created_at?: string | null; +} + +export interface TaskBriefRun { + id: string; + brief_id: string; + title: string; + template_id?: string | null; + template_name?: string | null; + generated_at?: string | null; + generated_by?: number | null; + status: string; + changed_files: string[]; + scope_summary?: string | null; +} + +export interface TaskBriefCard { + id: string; + title: string; + status: string; + created_at?: string | null; + updated_at?: string | null; + latest_run_id?: string | null; + template_id?: string | null; + template_name?: string | null; + summary?: string | null; + content?: string | null; + changed_files?: string[]; +} + +export interface ContractSyncFile { + file: string; + exists: boolean; + updated_at?: string | null; +} + +export interface ContractSyncStatus { + all_synced: boolean; + files: ContractSyncFile[]; +} + +export interface CreateTemplateRequest { + name: string; + content: string; + description?: string; +} + +export interface UpdateTemplateRequest { + name?: string; + content?: string; + description?: string; +} + +export interface GenerateTaskBriefRequest { + title: string; + template_id?: string; + changed_files: string[]; + scope_summary?: string; +} + +export const taskBriefApi = { + async listCenter(): Promise { + const { data } = await api.get>("/task-briefs/center"); + return unwrap(data).items || []; + }, + + async listTemplates(): Promise { + const { data } = await api.get>("/task-briefs/templates"); + return unwrap(data).items || []; + }, + + async createTemplate(payload: CreateTemplateRequest): Promise { + const { data } = await api.post>("/task-briefs/templates", payload); + return unwrap(data); + }, + + async updateTemplate(templateId: string, payload: UpdateTemplateRequest): Promise { + const { data } = await api.put>( + `/task-briefs/templates/${templateId}`, + payload + ); + return unwrap(data); + }, + + async listRuns(): Promise { + const { data } = await api.get>("/task-briefs/runs"); + return unwrap(data).items || []; + }, + + async generate(payload: GenerateTaskBriefRequest): Promise<{ run: TaskBriefRun; brief: TaskBriefCard }> { + const { data } = await api.post>( + "/task-briefs/generate", + payload + ); + return unwrap(data); + }, + + async getContractSyncStatus(): Promise { + const { data } = await api.get>("/task-briefs/contract-sync"); + return unwrap(data); + }, +}; diff --git a/frontend/src/components/ai-config/ConfigSubpageHeader.tsx b/frontend/src/components/ai-config/ConfigSubpageHeader.tsx new file mode 100644 index 00000000..ca256a33 --- /dev/null +++ b/frontend/src/components/ai-config/ConfigSubpageHeader.tsx @@ -0,0 +1,86 @@ +import type { ReactNode } from "react"; +import { cn } from "@/lib/utils"; + +type Tone = "violet" | "blue" | "emerald" | "amber" | "slate"; + +const toneMap: Record = { + violet: { + shell: "border-violet-200/70 bg-gradient-to-br from-violet-50 to-white dark:border-violet-900/70 dark:from-violet-900/20 dark:to-slate-950", + icon: "bg-violet-500/10 text-violet-600 dark:bg-violet-500/20 dark:text-violet-300", + meta: "border-violet-200/70 bg-violet-100/70 text-violet-700 dark:border-violet-900 dark:bg-violet-900/40 dark:text-violet-200", + glow: "bg-violet-400/35 dark:bg-violet-500/25", + badge: "border-violet-200/80 bg-violet-100/75 text-violet-700 dark:border-violet-900 dark:bg-violet-900/45 dark:text-violet-200", + }, + blue: { + shell: "border-blue-200/70 bg-gradient-to-br from-blue-50 to-white dark:border-blue-900/70 dark:from-blue-900/20 dark:to-slate-950", + icon: "bg-blue-500/10 text-blue-600 dark:bg-blue-500/20 dark:text-blue-300", + meta: "border-blue-200/70 bg-blue-100/70 text-blue-700 dark:border-blue-900 dark:bg-blue-900/40 dark:text-blue-200", + glow: "bg-blue-400/35 dark:bg-blue-500/25", + badge: "border-blue-200/80 bg-blue-100/75 text-blue-700 dark:border-blue-900 dark:bg-blue-900/45 dark:text-blue-200", + }, + emerald: { + shell: "border-emerald-200/70 bg-gradient-to-br from-emerald-50 to-white dark:border-emerald-900/70 dark:from-emerald-900/20 dark:to-slate-950", + icon: "bg-emerald-500/10 text-emerald-600 dark:bg-emerald-500/20 dark:text-emerald-300", + meta: "border-emerald-200/70 bg-emerald-100/70 text-emerald-700 dark:border-emerald-900 dark:bg-emerald-900/40 dark:text-emerald-200", + glow: "bg-emerald-400/35 dark:bg-emerald-500/25", + badge: "border-emerald-200/80 bg-emerald-100/75 text-emerald-700 dark:border-emerald-900 dark:bg-emerald-900/45 dark:text-emerald-200", + }, + amber: { + shell: "border-amber-200/70 bg-gradient-to-br from-amber-50 to-white dark:border-amber-900/70 dark:from-amber-900/20 dark:to-slate-950", + icon: "bg-amber-500/10 text-amber-600 dark:bg-amber-500/20 dark:text-amber-300", + meta: "border-amber-200/70 bg-amber-100/70 text-amber-700 dark:border-amber-900 dark:bg-amber-900/40 dark:text-amber-200", + glow: "bg-amber-400/35 dark:bg-amber-500/25", + badge: "border-amber-200/80 bg-amber-100/75 text-amber-700 dark:border-amber-900 dark:bg-amber-900/45 dark:text-amber-200", + }, + slate: { + shell: "border-slate-200/70 bg-gradient-to-br from-slate-100 to-white dark:border-slate-800 dark:from-slate-900 dark:to-slate-950", + icon: "bg-slate-500/10 text-slate-700 dark:bg-slate-500/20 dark:text-slate-200", + meta: "border-slate-200/70 bg-slate-200/80 text-slate-700 dark:border-slate-700 dark:bg-slate-800 dark:text-slate-200", + glow: "bg-slate-400/30 dark:bg-slate-500/20", + badge: "border-slate-200/80 bg-slate-200/75 text-slate-700 dark:border-slate-700 dark:bg-slate-800 dark:text-slate-200", + }, +}; + +interface ConfigSubpageHeaderProps { + title: string; + description: string; + icon: ReactNode; + tone?: Tone; + meta?: ReactNode; +} + +export function ConfigSubpageHeader({ + title, + description, + icon, + tone = "violet", + meta, +}: ConfigSubpageHeaderProps) { + const palette = toneMap[tone]; + return ( +
    + + + +
    +
    + + {icon} + +
    +
    + 智能配置 · 治理工具 +
    +

    {title}

    +

    {description}

    +
    +
    + {meta ? ( +
    + {meta} +
    + ) : null} +
    +
    + ); +} diff --git a/frontend/src/components/layout/Layout.tsx b/frontend/src/components/layout/Layout.tsx index 9050897f..4b7d9755 100644 --- a/frontend/src/components/layout/Layout.tsx +++ b/frontend/src/components/layout/Layout.tsx @@ -13,7 +13,7 @@ export default function Layout() { }, [location.pathname, location.search]); return ( -
    +
    setMobileSidebarOpen(false)} /> {mobileSidebarOpen && (
    diff --git a/frontend/src/components/layout/Sidebar.tsx b/frontend/src/components/layout/Sidebar.tsx index efeb29f3..4f7e04ec 100644 --- a/frontend/src/components/layout/Sidebar.tsx +++ b/frontend/src/components/layout/Sidebar.tsx @@ -1,4 +1,4 @@ -import { NavLink } from "react-router-dom"; +import { NavLink, useLocation } from "react-router-dom"; import { LayoutDashboard, FolderKanban, @@ -9,6 +9,11 @@ import { Users, Sparkles, Sliders, + Files, + LayoutTemplate, + History, + ShieldCheck, + Settings2, X, } from "lucide-react"; import { cn } from "@/lib/utils"; @@ -26,33 +31,43 @@ const baseNavItems = [ { to: "/skills", label: "能力管理", icon: BarChart3 }, ]; +const configToolItems = [ + { to: "/ai-config/task-brief-center", label: "增量任务包中心", icon: Files }, + { to: "/ai-config/task-brief-templates", label: "任务包模板管理", icon: LayoutTemplate }, + { to: "/ai-config/task-brief-runs", label: "任务包生成记录", icon: History }, + { to: "/ai-config/contract-sync-board", label: "契约同步看板", icon: ShieldCheck }, + { to: "/ai-config/model-routing-config", label: "模型路由配置", icon: Settings2 }, +]; + interface SidebarProps { open: boolean; onClose: () => void; } export function Sidebar({ open, onClose }: SidebarProps) { + const location = useLocation(); const { theme, toggleTheme } = useTheme(); const user = useAuthStore((s) => s.user); const isManager = isManagerRole(user?.role); const navItems = isManager ? [...baseNavItems, { to: "/users", label: "用户管理", icon: Users }] : baseNavItems; + const showConfigTools = location.pathname.startsWith("/ai-config"); return (