[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-2287":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":8,"htmlUrl":8,"language":9,"languages":8,"totalLinesOfCode":8,"stars":10,"forks":11,"watchers":12,"openIssues":12,"contributorsCount":13,"subscribersCount":13,"size":13,"stars1d":14,"stars7d":14,"stars30d":15,"stars90d":13,"forks30d":13,"starsTrendScore":16,"compositeScore":17,"rankGlobal":8,"rankLanguage":8,"license":18,"archived":19,"fork":19,"defaultBranch":20,"hasWiki":21,"hasPages":19,"topics":22,"createdAt":8,"pushedAt":8,"updatedAt":23,"readmeContent":24,"aiSummary":25,"trendingCount":13,"starSnapshotCount":13,"syncStatus":26,"lastSyncTime":27,"discoverSource":28},2287,"Astudio","Candouber\u002FAstudio","Candouber",null,"Python",186,12,3,0,49,50,147,3.34,"MIT License",false,"main",true,[],"2026-06-12 02:00:39","\u003Cp align=\"center\">\n  \u003Cimg src=\".\u002Fstatic\u002Fastudio-logo.png\" alt=\"AStudio\" width=\"720\">\n\u003C\u002Fp>\n\n# AStudio\n\n\u003Cp align=\"center\">\n  \u003Cstrong>本地优先的多 Agent 协作任务执行工作台\u003C\u002Fstrong>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  中文\n  ·\n  \u003Ca href=\".\u002FREADME.en.md\">English\u003C\u002Fa>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\".\u002FLICENSE\">MIT License\u003C\u002Fa>\n  ·\n  \u003Ca href=\".\u002Fdocs\u002Farchitecture.md\">架构文档\u003C\u002Fa>\n  ·\n  \u003Ca href=\".\u002Fdocs\u002Fstudio-system.md\">Studio 体系\u003C\u002Fa>\n  ·\n  \u003Ca href=\".\u002FCONTRIBUTING.md\">参与贡献\u003C\u002Fa>\n\u003C\u002Fp>\n\nAStudio 把一次复杂请求拆成可路由、可审批、可执行、可追踪、可复用的任务流水线。用户提交需求后，Agent Zero 先判断任务类型：可直接回答的简单问题会快速结束；平台管理类请求会进入 Studio 0；业务任务会复用已有 Studio，或创建新的专业工作室。Studio Leader 负责澄清需求、生成 DAG 执行计划、分配 Sub-agent、质检产出；Sub-agent 使用 Skill、附件工具、搜索工具和任务沙箱完成具体步骤。任务结束后，系统再进行结果汇总、成本记录和记忆沉淀。\n\n项目默认在本地运行。模型密钥、任务数据库、附件、沙箱产物和运行日志都保存在本机，默认不会提交到仓库。\n\n## 目录\n\n- [核心能力](#核心能力)\n- [使用流程](#使用流程)\n- [系统架构](#系统架构)\n- [文档入口](#文档入口)\n- [技术栈](#技术栈)\n- [安装](#安装)\n- [模型与搜索配置](#模型与搜索配置)\n- [本地数据](#本地数据)\n- [开发命令](#开发命令)\n- [参与贡献](#参与贡献)\n- [License](#license)\n\n## 核心能力\n\n- **任务编排引擎**：从 `\u002Fapi\u002Ftasks\u002Fask` 创建任务，后台 worker 进程负责路由、规划和执行，FastAPI 主进程保持响应。\n- **Agent Zero 路由层**：根据 Studio Card、系统管理分类器和兜底规则，将任务分配给已有 Studio、Studio 0，或触发新 Studio 创建。\n- **Studio 工作室模型**：每个 Studio 拥有场景描述、能力标签、近期话题、用户事实、Leader 和多名 Sub-agent。\n- **DAG 执行计划**：Leader 输出带 `id`、`depends_on`、`assign_to_role` 的步骤，后端校验依赖、修剪环路，并并发执行可并行节点。\n- **审批与澄清**：需求不完整时进入 `need_clarification`；执行前进入 `await_leader_plan_approval`，用户可以批准或要求重新规划。\n- **Leader 质检闭环**：Sub-agent 提交 deliverable 后先进入 `pending_review`，Leader 可接受或打回重做，超过重试上限后保留最后结果。\n- **Skill 池与动态招聘**：内置文件、搜索、代码、沙箱、定时任务等工具；支持从 SkillHub \u002F ClawHub 导入 bundle skill，也支持 AI 生成本地 Skill。\n- **任务沙箱**：每个任务可拥有独立目录和端口，支持写文件、运行命令、保存日志、启动预览链接和保留工具型产物。\n- **附件分析**：上传 Excel\u002FCSV、PDF、图片和文本后，任务会自动获得附件读取、表格预览、PDF 抽文本和图片元数据工具。\n- **人类介入与级联重算**：用户可以重试阻塞节点，也可以手动编辑某步输出，系统会按依赖关系重跑下游步骤。\n- **长期记忆沉淀**：任务完成后，经验会写回参与员工的 `soul`，Studio Card 会更新近期话题、能力标签和用户事实。\n- **可观测与恢复**：SSE 推送任务状态、节点增量、心跳和运行进度；watchdog 会处理长时间无进展的任务，保留原方案以便重跑。\n- **桌面应用**：Electron 桌面包内置前端与本地后端 sidecar，启动后自动使用空闲端口和用户数据目录。\n\n## 使用流程\n\n### 1. 配置模型\n\nCLI 很适合开发者，但面向普通用户时，AStudio 选择把模型配置放进图形界面。首次启动后，在左侧设置里添加 Provider、API Key、模型列表和不同角色使用的模型。\n\n![设置中配置模型](.\u002Fstatic\u002FPasted%20image%2020260428161644.png)\n\n### 2. 提交任务，补充必要信息\n\n当任务描述太宽泛时，Leader 会先列出需要补充的问题。用户补充后，系统会把原始需求和澄清答案合并，再生成新的执行计划。\n\n![需求澄清表单](.\u002Fstatic\u002FPasted%20image%2020260428163324.png)\n\n### 3. 审批执行计划\n\nLeader 会把任务拆成多个步骤，标明执行角色和依赖关系。用户可以先查看计划，再决定开始执行；也可以给出反馈，让 Leader 重新规划。\n\n![前往补充需求](.\u002Fstatic\u002FPasted%20image%2020260428163935.png)\n\n![审批界面](.\u002Fstatic\u002FPasted%20image%2020260428163755.png)\n\n### 4. 由 Studio 接管任务\n\nStudio 面向具体场景沉淀经验。Agent Zero 会根据 Studio Card 做路由，已有工作室能处理时优先复用；没有合适工作室时，会创建新的专业工作室。\n\n![工作室](.\u002Fstatic\u002FPasted%20image%2020260428162406.png)\n\n### 5. Sub-agent 执行 DAG\n\n真正执行任务的是 Sub-agent。Leader 将步骤分配给不同角色，后端按 DAG 依赖启动节点；某个上游节点阻塞时，下游节点会被级联跳过，用户补充信息后可从阻塞点恢复。\n\n![员工与 DAG](.\u002Fstatic\u002FPasted%20image%2020260428164110.png)\n\nSub-agent 的 `agent.md`、`soul` 和 Skills 都可以编辑。稳定任务场景可以沉淀为固定角色，而临时缺少的能力也可以由 Leader 触发“招聘”流程补充。\n\n![编辑 agent 与 skills](.\u002Fstatic\u002FPasted%20image%2020260428171534.png)\n\n### 6. 查看结果、批注和沙箱产物\n\n文本结果支持批注式追问，适合在长结论里针对局部内容继续讨论。\n\n![文本结果与批注](.\u002Fstatic\u002Fastudio-demo-result.gif)\n\n如果任务生成了代码、页面、脚本或转换工具，产物会保留在任务沙箱里。用户可以查看文件、运行命令、打开预览，也可以把结果作为后续任务的基础。\n\n![沙箱工具](.\u002Fstatic\u002Fastudio-demo-sandbox.gif)\n\n## 系统架构\n\nAStudio 的核心链路可以概括为四层：\n\n| 层级 | 主要职责 | 相关模块 |\n| --- | --- | --- |\n| 桌面与前端层 | Electron 桌面壳、React 界面、任务看板、Studio 管理、沙箱文件、Skill 池、SSE 状态订阅 | `web\u002F`、`web\u002Felectron\u002Fmain.cjs` |\n| API 与状态层 | FastAPI 路由、SQLite\u002FWAL、本地配置、附件保存、任务\u002FStudio\u002FSandbox\u002FSchedule 存储 | `server\u002Fmain.py`、`server\u002Frouters\u002F`、`server\u002Fstorage\u002F` |\n| 编排执行层 | Agent Zero 路由、Leader 规划、DAG 调度、Sub-agent ReAct 执行、Leader 质检、最终汇总 | `server\u002Fagents\u002F`、`server\u002Frouters\u002Ftask.py` |\n| 工具与记忆层 | Skill Registry、内置工具、bundle skill、沙箱命令、搜索、附件分析、定时任务、soul 和 Studio Card 沉淀 | `server\u002Ftools\u002F`、`server\u002Fcore\u002F`、`server\u002Fservices\u002F` |\n\n### 任务生命周期\n\n1. 用户创建任务，后端写入 `tasks` 和初始 iteration。\n2. 隔离 worker 进程开始执行，避免长任务阻塞 API 主进程。\n3. Agent Zero 做任务路由：系统管理、直接回答、复用 Studio、创建 Studio。\n4. Studio Leader 生成计划；计划可能要求澄清，也可能等待用户审批。\n5. 用户批准后，后端按 DAG 创建 UI 节点和边，依赖满足的步骤并发执行。\n6. Sub-agent 使用工具执行任务，通过 `submit_task_deliverable` 或 `report_system_blocker` 上报结果。\n7. Leader 对每步产出做质量审查，必要时打回修订。\n8. 所有步骤结束后，Leader 汇总 findings，Agent Zero 生成最终答复。\n9. Task Monitor 写回最终状态，并触发员工 `soul`、Studio Card 和用户事实更新。\n\n### 可靠性设计\n\n- **进程隔离**：默认每条任务流水线由 `workers.task_worker` 独立执行，异常退出会被标记到任务状态。\n- **任务锁与终止**：同一任务避免重复编排；用户终止会取消运行中的 coroutine 和 worker。\n- **SSE 增量推送**：前端通过 `\u002Fapi\u002Ftasks\u002F{task_id}\u002Fstream` 接收状态、节点、心跳和暂停事件。\n- **watchdog**：长期无活动的 planning \u002F executing 任务会被自动标记为失败或终止，已保存计划可重新执行。\n- **成本与耗时记录**：每个 SubTask 记录 tokens、duration、cost 和模型名，方便后续观察不同角色的消耗。\n- **安全执行边界**：沙箱命令经过本地执行安全校验，文件操作限制在任务沙箱路径内。\n\n## 文档入口\n\nREADME 只放项目主线。更细的设计说明放在 `docs\u002F` 中：\n\n| 文档 | 内容 |\n| --- | --- |\n| [整体架构设计](.\u002Fdocs\u002Farchitecture.md) | Agent Zero、Studio、Canvas 的整体分层 |\n| [Studio 体系架构](.\u002Fdocs\u002Fstudio-system.md) | Studio Card、Soul、Agent.md 和实例化逻辑 |\n| [Agent Zero 设计](.\u002Fdocs\u002Fagent-zero.md) | 路由、拆解、汇总和工作室晋升 |\n| [Canvas Engine](.\u002Fdocs\u002Fcanvas-engine.md) | React Flow、SSE、节点状态和画布交互 |\n| [上下文蒸馏](.\u002Fdocs\u002Fcontext-distillation.md) | 节点摘要、长期记忆和上下文压缩 |\n| [LLM 集成策略](.\u002Fdocs\u002Fllm-integration.md) | LiteLLM、角色模型路由和热加载 |\n\n## 技术栈\n\n- **前端**：React 19、TypeScript、Vite、React Router、Zustand、React Flow、Lucide Icons\n- **后端**：FastAPI、Pydantic、SQLite WAL、SSE、LiteLLM、Playwright、uv\n- **编排**：Agent Zero、Studio Leader、Sub-agent ReAct、Skill Registry、任务 worker、watchdog\n- **桌面应用**：Electron、electron-builder、PyInstaller sidecar\n- **包管理**：pnpm workspace、uv\n\n## 安装\n\n### 方式一：下载安装包\n\n普通用户建议直接下载桌面安装包，不需要安装 Node.js、Python、pnpm 或 uv。\n\n1. 打开 [GitHub Releases](https:\u002F\u002Fgithub.com\u002FCandouber\u002FAstudio\u002Freleases)。\n2. 下载与你系统匹配的安装包。\n3. 启动 AStudio，在设置页配置模型 Provider、API Key 和角色模型分路。\n\n| 系统 | 下载文件 | 说明 |\n| --- | --- | --- |\n| Windows x64 | `AStudio-*-win-x64.exe` | 双击安装或启动 |\n| macOS Apple Silicon | `AStudio-*-mac-arm64.dmg` | 适用于 M 系列芯片 |\n| macOS Intel | `AStudio-*-mac-x64.dmg` | 适用于 Intel 芯片 |\n| Linux x64 | `AStudio-*-linux-x86_64.AppImage` | 赋予执行权限后启动 |\n\n桌面包会自动拉起本地后端。应用数据、模型配置、数据库、日志和沙箱文件会写入系统用户数据目录，不会写入仓库目录。\n\n### 方式二：从源码运行\n\n开发者可以从源码启动 AStudio。\n\n#### 环境要求\n\n- Node.js 20+\n- pnpm 8+，建议通过 Corepack 启用\n- Python 3.11+\n- uv\n\nmacOS 可以使用 Homebrew 安装 uv：\n\n```bash\nbrew install uv\n```\n\n#### 获取项目并安装依赖\n\n```bash\ngit clone \u003Cyour-repo-url>\ncd \u003Crepo-dir>\ncorepack enable\npnpm setup\n```\n\n`pnpm setup` 会完成：\n\n- 安装根目录和前端 Node 依赖；\n- 进入 `server\u002F` 执行 `uv sync`。\n\n浏览器检索增强能力是可选项。默认情况下，`web_search` 会先使用配置的搜索 provider，失败后尝试调用系统里的 Chrome \u002F Edge \u002F Chromium headless CLI。需要内置 Playwright Chromium 时再执行：\n\n```bash\npnpm setup:browser\n```\n\n#### 启动开发环境\n\n```bash\npnpm dev\n```\n\n启动后访问：\n\n- Web 界面：http:\u002F\u002F127.0.0.1:5173\n- 后端健康检查：http:\u002F\u002F127.0.0.1:8000\u002Fapi\u002Fhealth\n\n#### 启动本地稳定模式\n\n```bash\npnpm start\n```\n\n该命令会先构建前端，再由 FastAPI 托管 `web\u002Fdist`。启动后访问：\n\n- AStudio：http:\u002F\u002F127.0.0.1:8000\n\n#### 启动 Electron\n\n开发调试：\n\n```bash\npnpm electron:dev\n```\n\n本地稳定入口：\n\n```bash\npnpm electron:start\n```\n\nElectron 会优先复用健康的本地后端；没有可用后端时会启动 FastAPI。桌面打包态默认使用空闲端口，数据写入 Electron 用户数据目录，后端日志写入 `logs\u002Fbackend.log`。\n\n## 模型与搜索配置\n\n首次启动后，可以在左侧设置中配置模型；也可以复制示例文件后手动编辑：\n\n```bash\nmkdir -p data\ncp config.example.yaml data\u002Fconfig.yaml\n```\n\n模型配置由三部分组成：\n\n- `llm_providers`：供应商名称、API Key、Endpoint、模型列表、展示名和 OAuth 标记。\n- `model_aliases`：把 AStudio 内部模型名映射到供应商真实模型 ID，适合 OpenAI 兼容网关。\n- `model_assignment`：为 `agent_zero`、`sub_agents`、`distillation` 分配模型、推理强度和思考模式；Studio Leader 当前复用 `agent_zero` 配置。\n\n### 模型配置原则\n\n- `name` 是 AStudio 内部使用的 Provider 名称，也会作为角色分路里的前缀，例如 `deepseek\u002Fdeepseek-chat`。\n- `litellm_provider` 是 LiteLLM 实际路由前缀。使用 OpenAI 兼容网关时，`name` 可以写成 `siliconflow`、`oneapi` 等自定义名称，但 `litellm_provider` 通常要写 `openai`。\n- `models` 是界面里可选的本地模型名。可以写短名，例如 `qwen-max`；保存后系统会按 `Provider Name\u002F模型名` 作为本地引用。\n- `model_aliases` 用于“界面展示的本地模型名”和“真实调用模型 ID”不一致的情况。调用 LiteLLM 时会使用真实模型 ID。\n- `model_display_names` 只影响界面和任务记录展示，不影响实际调用。\n- `model_assignment.*.model` 建议使用 `Provider Name\u002F模型名`，避免多个 Provider 下模型短名重复。\n\n简单 API Key Provider 示例：\n\n```yaml\nllm_providers:\n  - name: deepseek\n    api_key: \"sk-...\"\n    endpoint: null\n    models:\n      - deepseek-chat\n      - deepseek-coder\n    model_aliases: {}\n    model_display_names: {}\n    is_oauth: false\n\nmodel_assignment:\n  agent_zero:\n    model: deepseek\u002Fdeepseek-chat\n    reasoning_effort: high\n    thinking_type: default\n    thinking_budget_tokens: null\n  sub_agents:\n    model: deepseek\u002Fdeepseek-chat\n    reasoning_effort: low\n    thinking_type: default\n    thinking_budget_tokens: null\n  distillation:\n    model: deepseek\u002Fdeepseek-chat\n    reasoning_effort: default\n    thinking_type: default\n    thinking_budget_tokens: null\n```\n\nOpenAI 兼容网关示例：\n\n```yaml\nllm_providers:\n  - name: siliconflow\n    litellm_provider: openai\n    api_key: \"sk-...\"\n    endpoint: \"https:\u002F\u002Fapi.siliconflow.cn\u002Fv1\"\n    models:\n      - qwen-max\n    model_aliases:\n      qwen-max: Qwen\u002FQwen3-235B-A22B-Instruct-2507\n    model_display_names:\n      qwen-max: \"Qwen Max (SiliconFlow)\"\n\nmodel_assignment:\n  agent_zero:\n    model: siliconflow\u002Fqwen-max\n    reasoning_effort: high\n    thinking_type: default\n    thinking_budget_tokens: null\n  sub_agents:\n    model: siliconflow\u002Fqwen-max\n    reasoning_effort: low\n    thinking_type: default\n    thinking_budget_tokens: null\n  distillation:\n    model: siliconflow\u002Fqwen-max\n    reasoning_effort: default\n    thinking_type: default\n    thinking_budget_tokens: null\n```\n\n推理相关字段说明：\n\n- `reasoning_effort`：`default`、`none`、`minimal`、`low`、`medium`、`high`、`xhigh`。是否生效取决于具体模型和 Provider。\n- `thinking_type`：`default`、`enabled`、`adaptive`。当前主要用于支持 thinking 参数的模型。\n- `thinking_budget_tokens`：思考预算 token。留空表示不单独指定；Anthropic thinking 模型会使用该字段。\n\n配置从界面保存后会热加载，通常不需要重启。手动编辑 `data\u002Fconfig.yaml` 后，建议回到设置页重新保存一次，或重启后端以确保所有运行中的 worker 使用新配置。\n\nWeb Search 支持 DuckDuckGo、Brave、Tavily、SearXNG 和 Jina。普通检索失败时，系统会尝试使用可选 Playwright 浏览器搜索；没有安装 Playwright 时，会尝试调用系统里的 Chrome \u002F Edge \u002F Chromium headless CLI 兜底。\n\n## 本地数据\n\n常见本地文件如下：\n\n- `data\u002F`：任务、配置、数据库、沙箱、附件和 Skill bundle。\n- `data\u002Fconfig.yaml`：模型与检索配置。\n- `data\u002Fstudios\u002F`：Studio 和 Sub-agent 的记忆与角色文件。\n- `data\u002Fsandboxes\u002F`：任务沙箱目录、运行日志和产物。\n- `server\u002F.venv\u002F`：后端虚拟环境。\n- `web\u002Fdist\u002F`：前端构建产物。\n- Electron 用户数据目录：桌面打包态的配置、数据库、日志和沙箱。\n\n这些路径已通过 `.gitignore` 处理。请不要提交 API Key、数据库、日志、沙箱产物或构建产物。\n\n## 开发命令\n\n| 命令 | 说明 |\n| --- | --- |\n| `pnpm setup` | 安装 Node 和 Python 依赖 |\n| `pnpm setup:browser` | 可选安装 Playwright Chromium 浏览器检索能力 |\n| `pnpm dev` | 同时启动 FastAPI 和 Vite |\n| `pnpm start` | 构建前端并由后端托管 |\n| `pnpm build:web` | 构建前端 |\n| `pnpm electron:dev` | Electron + Vite 开发调试 |\n| `pnpm electron:start` | 构建前端后启动 Electron |\n| `pnpm electron:pack` | 生成 Electron 本地包 |\n| `pnpm electron:pack:sidecar` | 构建后端 sidecar 并打包桌面应用 |\n\n## 参与贡献\n\n欢迎围绕 Agent 编排、Studio 记忆、任务沙箱、Skill 池、模型路由、桌面应用和文档完善提交改动。开始前请阅读 [CONTRIBUTING.md](.\u002FCONTRIBUTING.md)。\n\n## License\n\nAStudio 使用 [MIT License](.\u002FLICENSE)。\n","AStudio 是一个本地优先的多 Agent 协作任务执行工作台，旨在将复杂请求拆解为可路由、可审批、可执行、可追踪和可复用的任务流水线。其核心功能包括任务编排引擎、Agent Zero 路由层、DAG 执行计划生成以及内置的多种工具支持（如文件处理、搜索、代码执行等）。此外，它还具备审批与澄清机制、Leader 质检闭环、动态招聘及技能池管理等功能，确保任务高效且准确地完成。AStudio 适合需要在本地环境中进行复杂任务分解与协作处理的场景，特别是在涉及敏感数据或对隐私有高要求的情况下。通过保持所有关键信息（如模型密钥、附件、日志等）仅限于本机存储，AStudio 提供了一个安全可控的工作环境。",2,"2026-06-11 02:49:17","CREATED_QUERY"]