forked from admin/PlantAI-rag-new
- paper_writer_service(8097):FastAPI + MCP streamable-http 单端点,9 工具
(propose_paper_outline/write_paper_section/get_paper_progress/search_refs/
revise_paper_section/revise_paper/get_paper/complete_paper/cancel_paper),
SQLite 三表(papers/paper_sections/citations,WAL),GB/T 7714 引用协议
- BFF:services/paper/{mcp_client,agent}.py(裸 JSON-RPC 客户端 + 规则状态机)、
routers/paper.py、schemas.py 4 个 Paper*Block + ArtifactBlock 加 paper_id/citation_count、
config.py 开关、main.py 条件注册、docgen.py 抽 insert_artifact 公共 helper
- 前端:intent.js paperIntent 纯函数、Composer docgen 分支 sub-route、sendPaper/轮询、
PaperBriefCard/PaperOutlineCard/PaperProgressCard、DocPane cite-chip
- deploy/paper_restart.sh + toggle_paper.sh;compile_sdk.sh 白名单追加 paper 文件
- tests/paper 26 条(工具逻辑 + MCP 协议 + BFF 状态机 + 块 schema + 前端 intent 单测)
52 lines
1.8 KiB
Bash
Executable File
52 lines
1.8 KiB
Bash
Executable File
#!/bin/bash
|
||
# deploy/toggle_paper.sh —— 论文撰写快速开关(dev 树 175;不触碰生产 176 /srv/plantai)。
|
||
# 用法:bash deploy/toggle_paper.sh off|on
|
||
# 原理:BFF main.py 按 PAPER_WRITER_ENABLED 决定是否注册 /api/paper 路由;
|
||
# 不注册时 /api/paper/health 返回 404,前端探活落 offline,触发词落 docgen 单发降级。
|
||
set -uo pipefail
|
||
|
||
ACTION="${1:-}"
|
||
SDK_DIR="/home/xzq/5090/teamWorkspace/zh/PlantAI-rag-new/sdk"
|
||
ENV_FILE="$SDK_DIR/.env"
|
||
PY="/home/xzq/5090/teamWorkspace/zh/plantai-rag-new-venv/bin/python"
|
||
BIND="${PAPER_BFF_BIND:-0.0.0.0}"
|
||
|
||
if [ "$ACTION" != "off" ] && [ "$ACTION" != "on" ]; then
|
||
echo "用法: $0 <off|on>" >&2
|
||
exit 2
|
||
fi
|
||
|
||
VAL="true"
|
||
[ "$ACTION" = "off" ] && VAL="false"
|
||
|
||
# 1. 改 env(追加或覆盖)
|
||
if grep -q "^PAPER_WRITER_ENABLED=" "$ENV_FILE"; then
|
||
sed -i "s/^PAPER_WRITER_ENABLED=.*/PAPER_WRITER_ENABLED=$VAL/" "$ENV_FILE"
|
||
else
|
||
echo "PAPER_WRITER_ENABLED=$VAL" >> "$ENV_FILE"
|
||
fi
|
||
echo "PAPER_WRITER_ENABLED -> $VAL"
|
||
|
||
# 2. 重启 BFF 8090(dev 树;仅取 LISTEN 者;venv 必须绝对路径,cd sdk 后才能 import app.main)
|
||
kill $(lsof -ti tcp:8090 -sTCP:LISTEN) 2>/dev/null || true
|
||
sleep 2
|
||
cd "$SDK_DIR" && set -a && . .env && set +a
|
||
( cd "$SDK_DIR" && setsid "$PY" -m uvicorn app.main:app --host "$BIND" --port 8090 \
|
||
> /tmp/plantai-bff.log 2>&1 < /dev/null & ) && disown -a
|
||
|
||
# 3. 自检
|
||
for i in $(seq 1 20); do
|
||
sleep 2
|
||
curl -s -m 3 http://127.0.0.1:8090/api/health >/dev/null 2>&1 && break
|
||
done
|
||
curl -s -m 10 http://127.0.0.1:8090/api/health | head -c 120
|
||
echo
|
||
if [ "$ACTION" = "off" ]; then
|
||
CODE=$(curl -s -o /dev/null -w "%{http_code}" -m 8 http://127.0.0.1:8090/api/paper/health)
|
||
echo "paper/health HTTP $CODE (off 期望 404)"
|
||
[ "$CODE" = "404" ] && echo "OFF_OK" || echo "OFF_CHECK_FAIL"
|
||
else
|
||
curl -s -m 8 http://127.0.0.1:8090/api/paper/health | head -c 150
|
||
echo
|
||
fi
|