# novel-office **Repository Path**: lookmouse/novel-office ## Basic Information - **Project Name**: novel-office - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-04-20 - **Last Updated**: 2026-05-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Novel Office Novel Office 是一个本地优先的小说数字员工办公室,用来监控和驱动长期运行的 AI 小说生产流程。 它目前包含: - 基于文件的 `novel-wiki/` 小说知识库 - 作者、编辑、发布三个数字员工的状态 API - React + Vite 前端办公室画面 - 本地章节草稿、编辑报告和 wiki 写回流程 ## 项目结构 - `apps/server`:Express API,读取并更新 `novel-wiki/state` 里的工作流状态 - `apps/web`:React + Vite 前端,只展示数字员工办公室画面 - `packages/shared`:前后端共享的领域类型 - `novel-wiki`:Markdown 知识库、状态文件和事件历史 - `novel-text`:生成的小说正文草稿 ## 环境要求 - Node.js - pnpm `10.33.0` 如果本机没有 `pnpm`,可以先启用 Corepack: ```bash corepack prepare pnpm@10.33.0 --activate ``` 本仓库带有项目级 `.npmrc`,用于让 Node/npm 使用系统 CA 证书,避免依赖安装时出现证书链校验失败。 ## 启动项目 在项目根目录执行: ```bash pnpm install pnpm dev ``` 启动成功后访问: - 前端:http://localhost:5173 - 后端:http://localhost:4000 - 健康检查:http://localhost:4000/health 也可以分别启动: ```bash pnpm --filter @novel-office/server dev pnpm --filter @novel-office/web dev ``` ## 常用命令 ```bash pnpm build pnpm test ``` ## API 接口 - `GET /api/dashboard`:获取前端办公室画面需要的完整快照 - `POST /api/simulation/advance`:将示例工作流推进到下一阶段 - `POST /api/simulation/reset`:重置示例工作流 - `POST /api/workflow/run`:拉起作者 subagent 和编辑 subagent,生成章节草稿、编辑报告、作者讲解、主线预期和伏笔说明,并返回等待用户审批的 dashboard 快照 - `POST /api/workflow/approval`:处理用户审批;批准会拉起发布/wiki 回写 subagent,退回会把意见写进 wiki,并自动触发作者修订、编辑复审、再次提交审批 - `POST /api/workflow/schedule`:设置每日定时写作开关与时间,例如 `{"enabled":true,"dailyAt":"09:00"}` - `POST /api/workflow/schedule/run-due`:立即检查是否到达定时时间,主要用于调试 scheduler - `POST /api/integrations/feishu/events`:飞书机器人事件回调入口;支持回复 `批准:评论` 或 `退回:修改意见` ## 飞书审批 设置环境变量后,编辑 subagent 审核通过时会通过飞书机器人发审批消息: ```bash FEISHU_WEBHOOK_URL="https://open.feishu.cn/open-apis/bot/v2/hook/..." pnpm dev ``` 飞书机器人消息会提示你回复: - `批准:下一章推进祭船靠岸` - `退回:男女主初见张力还不够` 如果回复批准,发布 subagent 会发布并回写 wiki;如果回复退回,编辑会把意见传给作者 subagent 修订,编辑复审通过后再次发飞书审批消息。 ## cc-connect 审批通知 如果你使用 `cc-connect` 机器人,本项目会在进入待审批状态时优先通过该飞书应用私聊当前用户;只有拿不到用户 `open_id` 时,才会退回到群聊 `chat_id`。 同时也会尝试调用本机的: ```bash cc-connect send --stdin ``` 把审批内容推送到当前活跃会话。 默认行为: - 默认启用 `cc-connect` 通知 - 会优先查找项目名包含 `novel-office` 的活跃 session - 找到当前用户后,会把审批摘要、编辑报告路径和回复格式直接发到你的飞书私聊 可选环境变量: - `CC_CONNECT_SESSION`:显式指定 session,例如 `novel-office_d92e53f4:s1` - `CC_CONNECT_PROJECT`:显式指定项目名 - `CC_CONNECT_PROJECT_HINT`:模糊匹配项目名,默认是 `novel-office` - `CC_CONNECT_FEISHU_OPEN_ID`:显式指定接收审批私聊的飞书用户 `open_id` - `CC_CONNECT_BIN`:`cc-connect` 可执行文件路径,默认是 `cc-connect` - `CC_CONNECT_DATA_DIR`:自定义 `cc-connect` 数据目录 - `CC_CONNECT_NOTIFY_ENABLED=false`:关闭 `cc-connect` 通知 如果你的 `cc-connect` 机器人负责把用户回复转给本地 API,建议在它的 agent prompt 里调用: ```bash curl -X POST http://localhost:4000/api/integrations/feishu/events \ -H 'Content-Type: application/json' \ -d '{"text":"用户原始消息"}' ``` 这里虽然路径名还是 `feishu/events`,但也可以作为通用审批文本入口使用。 示例: ```bash curl -X POST http://localhost:4000/api/workflow/run \ -H 'Content-Type: application/json' \ -d '{"chapterNumber":1,"title":"雨夜入城","targetWords":1200}' curl -X POST http://localhost:4000/api/workflow/approval \ -H 'Content-Type: application/json' \ -d '{"decision":"approved","feedback":"下一章推进祭船靠岸"}' curl -X POST http://localhost:4000/api/workflow/schedule \ -H 'Content-Type: application/json' \ -d '{"enabled":true,"dailyAt":"09:00"}' ```