# agentoffice **Repository Path**: artifacttrace/agentoffice ## Basic Information - **Project Name**: agentoffice - **Description**: No description available - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-07-11 - **Last Updated**: 2026-08-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # AgentOffice AgentOffice 是一个基于 Rust 和 Slint 的本地桌面应用。它从 FusionHub 获取最近会话,通过 ArtifactTrace 启动 AOInbox Run,将聊天内容整理为候选任务、候选 Run、任务变更或外部智能体工作卡。 ## 工作原理 AgentOffice 本身不负责判断聊天内容是不是任务。它负责确定性的编排工作,语义判断由 ArtifactTrace 中的 AOInbox Agent 完成。 一次 AOInbox 批次按以下方式工作: 1. 用户点击“提交 AOInbox”,或者自动收取定时器到期; 2. AgentOffice 读取设置,检查 FusionHub、ArtifactTrace、AOInbox Task 目录和 prompt; 3. 如果启用的来源需要候选工单判断,AgentOffice 先启动“任务语义编目”Run,更新 `07-17-任务语义编目/tasks.md`; 4. AgentOffice 从 FusionHub 获取时间窗口内的最近会话; 5. 会话按来源分组并切成 chunk,同时写入本批次的 request、snapshot 和任务索引; 6. AgentOffice 根据来源选择固定 route,并通过 ArtifactTrace 启动对应 Agent; 7. AOInbox Agent 读取本批次被授权的文件,将结果写入 AOInbox Task 的 `outputs` 或 `working` 目录; 8. AgentOffice 等待或刷新输出,对模型生成的 Markdown 做确定性校验和解析; 9. 候选结果显示在“任务信箱”。只有用户确认后,AgentOffice 才会创建 Task、创建 Run 或记录任务变更。 ### 流程图 ```mermaid flowchart TD Start["用户提交 AOInbox
或自动收取到期"] --> Preflight["读取设置并检查
连接、Task 目录和 Prompt"] Preflight --> Catalog{"当前来源是否需要
候选工单判断"} Catalog -- "是" --> CatalogRun["通过 ArtifactTrace 启动
任务语义编目 Run"] CatalogRun --> CatalogFile["更新任务语义索引
07-17-任务语义编目/tasks.md"] Catalog -- "否" --> Fetch CatalogFile --> Fetch["从 FusionHub 获取最近会话"] Fetch --> Prepare["按来源分组和切片
生成 request、chunk、snapshot 和索引"] Prepare --> Route{"按来源选择固定 Route"} Route -- "微信等人类聊天" --> HumanFacts["阿本提取 Facts
使用 fact-schema.md"] HumanFacts --> HumanDecision["阿云生成候选工单
使用 chat-candidate-decision.md"] Route -- "DeepSeek、Qwen、Kimi 等" --> AiDecision["阿云直接生成候选工单
使用 ai-chat-candidate-decision.md"] Route -- "Codex、Claude" --> WorkCard["阿云提取外部工作卡
使用 coding-agent.md"] HumanDecision --> Outputs["写入 AOInbox 输出文件"] AiDecision --> Outputs WorkCard --> Outputs Outputs --> Validate["AgentOffice 确定性校验并解析 Markdown"] Validate --> Inbox["在任务信箱展示候选结果"] Inbox --> Confirm{"用户确认"} Confirm -- "确认" --> Dispatch["创建 Task、启动 Run
或记录本地任务变更"] Confirm -- "暂不处理" --> Keep["保留、停放或忽略候选"] ``` ### 三类处理 Route #### 1. 人类聊天 微信等人类聊天采用两个阶段,避免同一个 Agent 同时提取事实和做任务判断: 1. 阿本读取 request 中列出的 chunk; 2. 阿本根据 `fact-schema.md` 提取可核验 Facts,写入本批次的 `working/<批次>/facts.md`; 3. Facts Run 完成后,AgentOffice 再启动阿云; 4. 阿云读取 Facts、任务索引和任务语义索引; 5. 阿云根据 `chat-candidate-decision.md` 输出候选任务、候选 Run、任务变更或无动作结论。 #### 2. AI 对话 DeepSeek、Qwen、元宝、豆包、Kimi、ChatGPT 和 Gemini 等 AI 对话采用单阶段处理: 1. 阿云读取 request 授权的全部 chunk; 2. 同时读取本批次冻结的任务索引和任务语义索引; 3. 根据 `ai-chat-candidate-decision.md` 还原对话中的工作事项; 4. 输出候选任务、候选 Run、任务变更或无动作结论。 #### 3. 外部代码智能体 Codex 和 Claude 会话不生成普通候选工单,而是生成外部智能体工作进展卡: 1. 阿云读取 request 授权的 chunk; 2. chunk 信息不足时,按规则有限回溯 snapshot; 3. 根据 `coding-agent.md` 提取工作目的、当前进度、后续计划、阻塞和失败点; 4. 将工作卡写入 `outputs/external-agent-work.<来源>.<批次>.md`。 ### 为什么需要任务语义编目 仅有 Task ID 和标题通常不足以判断一段新对话属于哪个已有 Task。“任务语义编目”Task 会将当前任务情况整理到 `tasks.md`,AOInbox 再将它与本批次的结构化任务索引一起使用: - `task-index.json` 冻结本批次允许引用的 Task ID; - `tasks.md` 提供这些 Task 的语义背景; - AgentOffice 的本地校验器确保模型不能引用本批次索引之外的 Task。 模型负责语义匹配,AgentOffice 负责路径、批次、白名单和输出格式等确定性约束。 ## 运行前准备 需要准备: - Rust 工具链; - 正在运行的 FusionHub; - 正在运行的 ArtifactTrace; - ArtifactTrace workspace 中的 AOInbox Task; - ArtifactTrace workspace 中的“任务语义编目”Task。 ## 首次设置 打开 AgentOffice 的“设置”页面,填写: 1. `FusionHub URL`,例如 `http://localhost:8866`; 2. `ArtifactTrace WS`,例如 `ws://127.0.0.1:8868/ws`; 3. `AOInbox Task 目录`。 点击“选择目录”,选择 AOInbox Task 本身,不要选择它下面的 `prompts` 目录。 示例: ```text Windows: D:\artifacttrace-workspace\tasks\07-12-aoinbox macOS: /Users/yourname/artifacttrace/tasks/07-12-aoinbox ``` 点击“保存设置”。AgentOffice 会检查: - 路径是否为可访问的绝对目录; - 当前启用的数据源所需的 prompt 文件是否存在; - prompt 文件是否为空。 设置保存在当前使用的 SQLite 数据库中。复制数据库到另一台电脑时,其中的绝对路径不会自动变化,需要重新选择目录。 ## ArtifactTrace 目录约定 AOInbox Task 和“任务语义编目”Task 必须位于同一个 `tasks` 目录下: ```text / └── tasks/ ├── 07-12-aoinbox/ │ ├── TASK.md │ ├── prompts/ │ │ ├── fact-schema.md │ │ ├── chat-candidate-decision.md │ │ ├── ai-chat-candidate-decision.md │ │ └── coding-agent.md │ ├── inputs/ │ ├── outputs/ │ └── working/ └── 07-17-任务语义编目/ ├── TASK.md └── tasks.md ``` AgentOffice 根据所选 AOInbox Task 目录的父目录,自动查找: ```text ../07-17-任务语义编目/tasks.md ``` 因此不需要再配置一条“任务语义编目”绝对路径,但 Task ID 当前固定为 `07-17-任务语义编目`。如果 ArtifactTrace 中使用了其他 Task ID,需要同步修改 AgentOffice 代码。 ## Prompt 从哪里读取 每次提交 AOInbox 时,AgentOffice 会从所选 Task 的 `prompts` 目录读取规则: | 文件 | 用途 | | --- | --- | | `fact-schema.md` | 从微信等人类聊天提取 Facts | | `chat-candidate-decision.md` | 根据 Facts 生成候选工单 | | `ai-chat-candidate-decision.md` | 从 AI 对话生成候选工单 | | `coding-agent.md` | 从 Codex、Claude 等会话提取工作卡 | 修改这些文件后,下一批 AOInbox Run 会直接使用新内容,不需要重新编译 AgentOffice。 ## 基本使用流程 1. 启动 FusionHub 和 ArtifactTrace; 2. 启动 AgentOffice; 3. 在设置页完成连接和 AOInbox Task 目录配置; 4. 在“任务信箱”点击“提交 AOInbox”; 5. 等待 AOInbox Run 完成并刷新输出; 6. 检查候选任务、候选 Run、任务变更和外部智能体工作卡; 7. 确认候选后再派发到 ArtifactTrace。