# opccmp
**Repository Path**: joyapple2020/opccmp
## Basic Information
- **Project Name**: opccmp
- **Description**: opccmpopccmpopccmpopccmp
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-08-27
- **Last Updated**: 2026-08-31
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Hi OPC · 一人公司
**把老板的一句话目标,交给一个由 AI 员工组成的"小公司"去完成。**
一个基于 [pi agent sdk](https://github.com/badlogic/pi-mono)(`@mariozechner/pi-ai` + `@mariozechner/pi-agent-core`)构建的多智能体编排系统:CEO 接收任务、拆解计划、并行派工,员工(市场调研 / 内容创作 / 电商运营 / 运营专员)各司其职,共享黑板协作,CEO 自动审核返工,老板全程掌控。
```
🔒 商业软件 · 未经授权禁止使用
Copyright © 2026 joyapple2020 · All Rights Reserved
```
---
## ✨ 功能特性
| 能力 | 说明 |
|---|---|
| 🧠 **层级智能体架构** | CEO(组织者)+ 审核官 + 4 类内置岗位 + 自定义岗位(插件化) |
| ⚡ **并行派工** | `assign_task` 异步启动,`await_tasks` 收集结果,多员工同时干活 |
| 📋 **自动审核返工** | CEO 标准 checklist 审核,不合格自动打回,超上限升级老板裁决 |
| 📝 **共享黑板** | 员工不拉群,所有协作写黑板,结构化站会同步全局 |
| 🗂️ **历史归档** | 每轮任务自动快照到 `runtime/history/`;支持归档/删除轮次与交付物 |
| 🖥️ **Web 驾驶舱** | 浅色 Linear 风 SPA + **暗色模式 + ⌘K 命令面板 + 桌面通知** |
| 🌐 **多模型配置** | 统一默认 + 每座位 text/image/video 三用途;20+ 厂商可选 |
| 🔑 **密钥管理** | Web UI 配置 API key;**AES-256-GCM 加密存储**,脱敏展示,真实连通性测试 |
| 🛡️ **Web 安全** | 访问口令 / **多用户(admin+只读)角色** + Origin 校验(仅本机浏览器) |
| 🛠️ **真实工具** | `web_fetch` / `web_search`(Bing 兜底)/ `read_pdf` / `write_file` / `generate_image` / `generate_video` / `export_docx` / `export_xlsx` / `generate_chart` / `analyze_data` / `read_image` / `export_pptx` |
| 🧠 **跨轮记忆** | 每轮结论入知识库,**向量检索**下轮 CEO 自动参考 |
| 📊 **数据洞察** | 成本趋势图 / **交付物全文搜索** / **运营周报自动生成** |
| 📐 **任务模板库** | 预置「新品上市」等模板,填变量一键下达 |
| ⏰ **定时自动化** | cron 调度,到点自动启动目标任务 |
| 🏢 **多公司隔离** | `ONECMP_COMPANY=name` 启动,各公司数据互相隔离 |
| 💰 **预算控制** | 每轮成本上限,超限自动叫停并告警 |
| 🛟 **可靠性** | 员工回合上限 + 失败自动重试 + **模型自动降级** + **断点续跑** |
| 📜 **审计日志** | 模型/密钥/任务/删除等敏感操作全记录(runtime/audit.log) |
| 🎭 **演示模式** | 无需任何 API key 即可跑通全流程(mock),真实模式一键切换 |
## 🏗️ 公司架构
```
┌────────────┐
│ 老板(你) │ ← Web UI / 控制台 介入
└──────┬─────┘
│ 下达目标
┌──────▼─────┐
│ CEO │ ← 拆解计划、并行派工、站会、审核、提交
└──┬──────┬──┘
并行│ │并行
┌─────────▼─┐ ┌─▼─────────┐ ┌──────────┐ ┌────────────┐
│ 市场调研员 │ │ 内容主笔 │ │ 电商运营 │ │ 运营专员 │
└───────────┘ └───────────┘ └──────────┘ └────────────┘
↑ ↑ ↑ ↑
└──── 共享黑板 + 真实工具(web_fetch / search / pdf) ──┘
```
| 角色 | 职责 | 默认模型 |
|---|---|---|
| **CEO** | 拆解计划、并行派工、站会、提交最终交付 | deepseek-v4-flash |
| **审核官** | 每次交付按 checklist 自动审,可打回返工 | deepseek-v4-flash |
| **市场调研员** | 调研报告、竞品分析 | deepseek-v4-flash |
| **内容主笔** | 公众号 / 小红书 / 脚本 / 文案 | deepseek-v4-flash |
| **电商运营专家** | 选品、listing、定价 | deepseek-v4-flash |
| **运营专员** | 增长、活动、复盘 | deepseek-v4-flash |
> 模型厂商与型号全部在 `company.config.json` 中配置,支持 20+ 厂商
> (OpenAI / Anthropic / DeepSeek / Kimi / MiniMax / Google / xAI / Groq / OpenRouter / Mistral …),不同岗位可混用。
## 🚀 快速开始
### 环境要求
- Node.js ≥ 20
- npm
### 1. 安装依赖
```bash
npm install
```
### 2. 演示模式(无需任何 API key)
```bash
npm run demo # 控制台版:完整跑一遍全流程
npm run web # Web UI 版:浏览器打开 http://127.0.0.1:7717
```
### 3. 真实模型模式
```bash
# 方式 A:Web UI 配置(推荐)
npm run web # 启动后进「模型与密钥」页,粘贴你的 API key
# 方式 B:.env 文件
cp .env.example .env
# 编辑 .env,填入你拥有的 key(填一个即可,再把 company.config.json 的座位指向该厂商)
```
启动后下达任务:
```bash
npm start -- "为一款便携榨汁杯做新品上市:出竞品调研 + 小红书种草文 + 电商 listing 优化建议"
# 或
npm start -- --web -- "做一份 Q4 内容运营方案"
```
> 💡 `BRAVE_API_KEY` 可选:配置后 `web_search` 走 Brave API;不配置会自动降级到 Bing 无 key 抓取。
> 💡 省钱建议:日常任务用便宜模型(如 `deepseek-v4-flash`),关键角色(CEO/审核官)单独用更强模型。
## 🖥️ Web 驾驶舱
`npm run web` 启动后,浏览器打开 **http://127.0.0.1:7717**:
- **工作台**(首页):4 张指标卡(成本/任务/在岗/评分)+ 三栏实时视图(任务列表 / 实时工作流 / 成本+黑板)
- **交付物**:按项目(当前轮 + 历史归档)分组浏览,支持 md/pdf/图片/视频/Word/Excel 等格式预览与下载
- **模型配置**:统一默认 + 每座位 text/image/video 三用途 + 密钥管理面板
- **历史**:轮次时间线,含最终交付包 / 团队参与 / 任务明细 / 黑板回放
- 全程 SSE 实时推送,老板可随时 `插话 / 叫停 / 审批`
## ⚙️ 配置说明
### 模型座位表 `company.config.json`
```jsonc
{
"defaults": {
"text": { "provider": "deepseek", "model": "deepseek-v4-flash" },
"image": { "provider": "openai", "model": "gpt-image-1" },
"video": { "provider": "minimax", "model": "MiniMax-M2.7" }
},
"ceo": { "provider": "deepseek", "model": "deepseek-v4-flash" },
"review": { "provider": "deepseek", "model": "deepseek-v4-flash", "maxRevisions": 2 },
"workers": {
"researcher": { "provider": "deepseek", "model": "deepseek-v4-flash" },
"writer": { "provider": "deepseek", "model": "deepseek-v4-flash" }
// ...
},
"approvals": { "plan": true, "final": true },
"maxCeoTurns": 40
}
```
- **统一默认**:改 `defaults`,未单独配置的座位自动跟随;「应用到所有员工」一键下发(CEO/审核官/员工全覆盖)
- **单独覆盖**:每个座位可配 `models.text / image / video`,分别用于对话、生图、生视频
- **密钥**:Web UI「模型与密钥」页直接配置,或放 `runtime/secrets.json`,启动时自动注入
### API key 环境变量
| Provider | 环境变量 |
|---|---|
| OpenAI | `OPENAI_API_KEY` |
| Anthropic | `ANTHROPIC_API_KEY` |
| DeepSeek | `DEEPSEEK_API_KEY` |
| Kimi(Moonshot) | `MOONSHOT_API_KEY` |
| MiniMax | `MINIMAX_API_KEY` / `MINIMAX_CN_API_KEY` |
| Google | `GEMINI_API_KEY` |
| xAI | `XAI_API_KEY` |
| OpenRouter | `OPENROUTER_API_KEY` |
| 搜索(Brave,可选) | `BRAVE_API_KEY` |
## 📁 目录结构
```
onecmp/
├── company.config.json # 模型座位表(统一默认 + 每座位多用途)
├── package.json
├── tsconfig.json
├── .env.example # 各厂商 API key 环境变量模板
├── LICENSE # 商业软件许可协议(未授权禁止使用)
├── README.md
├── src/
│ ├── config.ts # 配置加载 + 模型解析 + .env
│ ├── secrets.ts # 运行时密钥管理(runtime/secrets.json)
│ ├── blackboard.ts # 共享黑板(jsonl + md)
│ ├── roles.ts # 岗位 system prompt
│ ├── tools.ts # 员工工具:write_artifact / web_fetch / search / pdf / write_file / 生成 / 导出 …
│ ├── tools/research.ts # 真实工具实现(HTML 抓取 / 搜索 / PDF / 图像生成)
│ ├── tools/video.ts # 视频生成(OpenAI Sora 可插拔)
│ ├── tools/export.ts # docx / xlsx 报告导出
│ ├── scheduler.ts # 极简 cron 定时调度
│ ├── review.ts # CEO 标准自动审核
│ ├── company.ts # 编排器:任务状态机、并行派工、审核循环、输入总线
│ ├── ui.ts # 控制台渲染 + 兜底审批
│ ├── mock.ts # 演示用剧本化 streamFn(无 key 可跑)
│ ├── web/server.ts # HTTP Server + SSE + 命令路由
│ ├── web/auth.ts # 访问口令 / 会话 / Origin 校验 / AES 加解密
│ ├── index.ts # CLI 入口
│ └── types/ # 第三方无类型声明的兜底
├── web/ # Web UI 静态资源(React + htm + Tailwind,零构建)
│ ├── index.html / styles.css / icons.js / app.js
└── runtime/ # 运行时生成(已 gitignore,不进仓库)
├── blackboard.md / .jsonl # 全公司协作记录
├── state.json # 任务状态机
├── final-delivery.md # 最终交付包
├── tasks// # 每任务交付物
├── history/<时间戳>/ # 每轮归档快照
└── secrets.json # 你的 API key(勿提交!)
```
## 🔐 安全与运维
| 能力 | 用法 |
|---|---|
| Web 访问口令 | `npm start -- --web --password=你的口令`;设置后浏览器需先登录,所有 API 受保护 |
| 多用户角色 | `npm start -- --web --user=admin:密码:admin --user=小明:密码:readonly`;只读账号不能做任何写操作 |
| 密钥加密 | 设了口令后 `runtime/secrets.json` 用 **AES-256-GCM** 加密存储;未设口令则明文(启动会提示) |
| Origin 校验 | 服务端拒绝非本机来源的浏览器请求(防 CSRF) |
| 密钥连通测试 | 「模型与密钥」页点「测」→ 真实调用一次最便宜模型验证 key |
| 审计日志 | 模型/密钥/任务/删除等敏感操作自动记录到 `runtime/audit.log` |
| 预算上限 | `company.config.json` 加 `"budgetLimit": 5`,累计成本超限自动叫停并告警 |
| 中断恢复 | 服务重启时自动检测未完成任务并归档,不污染新一轮 |
| 定时任务 | `company.config.json` 加 `"schedules": [{"cron": "0 9 * * 1-5", "objective": "..."}]`(5 段 cron) |
| 多公司 | `ONECMP_COMPANY=公司名 npm start -- --web` 启动独立实例,数据隔离到 `runtime/companies/<名>/` |
| 任务模板 | 新建 `runtime/templates/xxx.md`(首行 `# 模板名`,支持 `{{变量}}`),Web UI 下达目标时选模板填变量 |
## 🧩 自定义扩展
- **加岗位(改代码)**:编辑 `src/roles.ts` 加一段 `RoleDef`,`company.config.json` 的 `workers` 加一行
- **加岗位(不改代码)**:在 `runtime/custom-roles.json` 加一条 `{id, name, jobDescription, systemPrompt, provider?, model?}` 即可热加载
- **改审核标准**:编辑 `src/review.ts` 的 `DEFAULT_CHECKLIST`
- **接真实业务工具**:员工工具在 `src/tools.ts`,可直接加 web 搜索/图表生成/文档导出等
- **技能市场**:扩展页「技能市场」tab 可一键安装内置技能库(docx/xlsx/pptx/pdf/web-research/translate,已适配 Node 工具链、零 Python 依赖);也可粘贴 GitHub / Gitee 仓库或 `skill.json` 直链远程安装(自动找 `SKILL.md`,GitHub 不可达时自动走 Gitee 镜像),安装后在「Skills」或「团队」页分配岗位
- **换 UI 主题**:`web/styles.css` + `web/app.js` 的 Tailwind 配置
## 📜 许可证
**本软件为商业软件,采用商业软件许可协议,未经授权禁止使用。**
- 未经许可方书面授权,不得使用、复制、修改、分发、商业化本软件全部或部分
- 本仓库仅作展示;如需授权或商务合作,请通过 Gitee 仓库联系
- 详细条款见 [LICENSE](LICENSE)
```
🔒 商业软件 · 未经授权禁止使用
Copyright © 2026 joyapple2020 · All Rights Reserved
```