拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Company Brain 架构解析:Cloudflare Worker 入口 + 每组织一实例的 Durable Object Agent

【免费下载链接】company-brainOpen-sourcing our company brain - A teammate in your Slack that remembers everything your team says, and can go do the work.项目地址https://gitcode.com/gh_mirrors/co/company-brain点击查看免费下载Company Brain 是 Supermemory 开源的「组织级 Agent」一个常驻 Slack 的队友记得团队说过的每件事并能实际去完成工作。本文基于 docs/architecture.md 展开结合仓库源码逐层拆解它的端到端系统架构——从 Slack 事件如何进入 Cloudflare Worker到每个组织一个CompanyBrainAgentDurable ObjectDO如何承接轮次turns、记忆、工具、自动化与后台任务最后落到记忆隔离、工具装配与存储落盘的实现细节。读完你将掌握这套「Worker 无状态入口 DO 有状态核」架构的关键设计决策以及各模块对应的源码锚点可直接在仓库中逐行验证。说明原架构文档中的代码锚点写为apps/api/src/lib/brain/**在当前镜像仓库中对应src/brain/**HTTP 路由根apps/api/src/routes/brain/index.ts对应 src/routes/index.ts。下文统一使用仓库内实际路径。系统总览两个边界一个 DOCompany Brain 的部署形态可以概括为「薄入口 厚核心」入口Cloudflare WorkerHono 应用承载features.companyBrain特性开关下的/brain/*路由负责 Slack 事件的 HMAC 验签、AUTH_KV幂等去重、workspace → org 解析以及 Supermemory Web 前端的内部 HTTP 接口模型、设置、MCP 连接、研究、自动化等。核心CompanyBrainAgent一个基于 Agents SDK 的 Durable Object每个 Supermemory orgId 一个实例独占该组织全部的 Slack 轮次、chime、公聊频道 rollout、团队邀请、研究、自动化、频道观察observe、审批、租约leases、定时任务与试用提醒。Slack workspace Supermemory web · internal HTTP Events · OAuth · interactions /brain/models, settings, │ mcp-connections, research, │ automations, … ▼ ┌──────────────────────────────────────────────────────────┐ │ Cloudflare Worker (Hono) │ │ features.companyBrain → route /brain/* │ │ Slack: HMAC verify · AUTH_KV dedupe · resolve org │ └────────────────────────────┬─────────────────────────────┘ │ getAgentByName(COMPANY_BRAIN_AGENT, orgId) ▼ ┌──────────────────────────────────────────────────────────┐ │ CompanyBrainAgent (Agents SDK Durable Object) │ │ one instance per Supermemory orgId │ │ │ │ owns: Slack turns · chime · rollout · team invite · │ │ research · automations · observe · approvals · │ │ leases · scheduled tasks · trial reminders │ └───┬───────────────┬───────────────────┬──────────────────┘ │ │ │ ▼ ▼ ▼ Memory spaces Tool runtime Slack Web API (containers) MCP / Google / streams · Block Kit sandbox / web reactions · files用 mermaid 描述同一拓扑更便于嵌入文档与流程图工具关键结论Worker 不持有业务状态只做准入与分发一切有状态逻辑收敛到按 org 隔离的 DO 实例内天然获得组织级的数据与并发隔离。特性开关与路由挂载从源码看/brain/*是独立的 Hono 子路由树。路由根 src/routes/index.ts 依次挂载了路由前缀职责/slackSlack 安装、事件、交互见 src/routes/slack/index.ts/mcp-connectionsMCP 连接管理/company-summary、/automations、/skills、/research摘要、自动化、技能、研究/models、/settings、/overview、/graph、/memories模型、设置、总览、记忆图谱、记忆读写/trial、/workspace-prompt试用与工作区提示词这印证了架构图中「Supermemory web · internal HTTP」一侧的接口面。Worker 收到请求后通过getAgentByName(COMPANY_BRAIN_AGENT, orgId)定位到目标 DO把控制权交给组织级实例。主路径一次 Slack 回答的八步旅程架构文档给出了从安装到回复的完整主链路仓库代码与之逐条对应安装管理员在已认证的 Supermemory 组织内从 Slack 发起安装GET /brain/slack/oauth/install。src/brain/slack/install-greeting.ts、connect-landing.ts等模块处理安装向导与落地页。凭据落库Bot token 加密写入slack_workspace解密逻辑见 src/brain/slack/client.ts 中的decryptToken使用点bootstrap 创建或接管#company-brain频道src/brain/slack/bootstrap.ts并把家频道home channel写回 DOsetHomeChannel。事件签名Slack 向POST /brain/slack/events投递签名事件路由见 src/routes/slack/index.ts。准入与分发Worker 校验 HMAC 签名、用AUTH_KV去重、将 workspace 解析为 org先返回{ok:true}给 Slack再通过waitUntil异步派发到 DO——保证 Slack 3 秒超时窗口内快速确认。DO 分类事件进入 src/brain/turn/agent.ts 的onSlackEvent后先启动一个Slack turn fiberstartSlackTurnFiber随后在实现层分类为显式轮次explicit turn/ chime / 纯上下文context-only/ 生命周期事件team_join、user_change等。生命周期事件分别路由到onSlackTeamJoin、onSlackUserChange等 DO 方法。被动 triage被动线程与频道 chime 会先跑 triage 分类ANSWER | ACK | INVESTIGATE | PASS解析失败或模型失败时保守回退为PASS显式 提及与私聊跳过 triage。triage 的完整判定文法集中在 src/brain/slack/triage.ts其提示词对每个类别给出了带示例的判定边界例如 INVESTIGATE 要求存在可核查的声明——具名的故障、指标、人或事件PASS 则要求有「这是人类闲聊/纯致谢」的正面证据而非仅凭没有问号。主轮次computeTurnsrc/brain/turn/compute.ts按消息内容选择深度——直接回复、记忆检索、实时工具调用或更深入的工作如研究。回复与落盘私聊/助手场景走流式回复stream频道场景走公开进度卡片 最终线程消息所有写入经过作用域记忆scoped memory可能产生后果的工具调用先挂起审批见下文 Tools 与 Storage 章节。可恢复的 Slack 轮次fiber 机制DO 壳 src/brain/turn/agent.ts 的一个实现细节值得单独说明每次 Slack 轮次都封装为具名 fiberSLACK_TURN_FIBER_NAME用基于可恢复消息的slackTurnFiberIdempotencyKey做幂等重复事件直接忽略并在accepted → running → completed各阶段用fiber.stash(snapshot)落检查点。DO 崩溃恢复时onFiberRecovered读取快照已回复/已审批则判定完成有终局提案则调用finalizeInterruptedSlackTurn收尾否则以恢复快照重新启动 fiber 直到MAX_SLACK_TURN_RECOVERY_ATTEMPTS上限。这把「Slack 重试 DO 重启 幂等投递」组合成了可靠的一次性轮次语义。另外DO 壳本身刻意保持薄注释写明「heavy turn logic lives in agent.impl.ts and loads on first use」loadImpl()用动态import(./agent.impl)按需加载避免把全量业务代码压进 Worker 全局启动预算Cloudflare 校验窗口内。记忆容器标签、读写作用域与混合检索容器划分记忆空间由**容器标签container tag**按作用域划分常量定义在 src/compat/lib/spaces/provisioning.ts写入端解析在 src/brain/memory/writeback.ts 的slackMemoryContainerTag作用域容器标签说明公开 / 团队共享sm_org_sharedSHARED_TEAM_BRAIN_CONTAINER_TAG团队级共享记忆私聊个人user_{supermemoryUserId}privateContainerTagFor(userId)生成私密频道 / 群组私聊slack_channel_{channelId}每频道一个隔离容器写规则一次 Slack 写入只能落一个容器且必须落在 Slack 作用域对应的那个私聊若无映射的userIdscope.kind dm但无userIdslackMemoryContainerTag返回undefined直接不写。读规则src/brain/memory/read-scope.ts 的resolveBrainReadContainerTags任何轮次总是读sm_org_shared 当前作用域标签私聊DM额外读提问者可访问的每一个私密频道容器通过成员表readableSlackChannelContainerTagsForUser解析无上限——并发由 search 层的批次并发兜底。公开/私密频道则只读共享容器 自身标签。代码注释还强调了一个边界管理台可显式传入override表面此时完全替换派生集合且空数组语义是「什么都不读」而不是回退。写入管线写入入口writeMemorysrc/brain/memory/index.ts在buildSlackMemoryWriteRequestwriteback.ts的基础上完成了完整管线内容规整无内容返回null有eventDate则追加(as of YYYY-MM-DD)内容前强制加DOCUMENT_DATE:锚点避免提取器把日期默认到过时年份。标签规范化normalizeBrainMemoryTags去重、修正若模型写出了channel_*标签则重写为规范键channel_{channelId}源码注释引用 issue #2673保证环境召回与写入一致无合法标签的写入会被拦截并上报异常。幂等 IDslackMemoryCustomId用sha256(标题/内容键 标签 内容)生成company-brain-slack:{date}:{hash}并按记忆重置代次epoch加后缀防止旧代次写入去重覆盖到新代次文档。元数据写入sm_source: company-brain、source_type: company-brain-slack、memory_scope、memory_key、标签键/标签名数组等供召回过滤与检索。落库与副作用走addMemorySingledreaming: instant、preserveBrainTags: true入向量管线成功后注册标签、按pickNodePaths建树节点并waitUntil(maybeSplitNode)切分大节点配额/参数/建空间/文档上传等错误分别捕获记录。混合检索参数searchBrainsrc/brain/memory/search-brain.ts的参数与架构文档完全一致并给出了实现细节模式hybrid混合检索rerank: false、aggregate: false、rewriteQuery: false只取chunks。每容器limit: 40相关性阈值BRAIN_RELEVANCE_THRESHOLD即文档中的0.3。批次并发CONTAINER_SEARCH_CONCURRENCY 6按 6 个容器一批Promise.all避免 DM 提问者身处大量私密频道时一次扇出成向量查询风暴。去重与排序按记忆 id 去重保留更高相似度者按相似度降序最终只返回top 40。聚焦标签focus_tags转换为对brain_tags元数据的OR过滤实现「只在这些人员/项目/客户/主题标签里找」的语义检索。search_company_brain工具的输入 schema见 src/brain/turn/tools.ts也印证了这一点query要求自然语言问题而非关键词碎片focus_tags接受person_u12345、topic_billing、project_atlas、customer_acme等规范标签键。架构文档还提到其余容器sm_org_shared_inbox共享收件箱与sm_agent_selfAgent 自身记忆AGENT_SELF_CONTAINER_TAG——它们不是默认的 Slack 写入路径。工具装配、连接隔离与审批闸门装配面工具在 src/brain/turn/tools.ts 的assembleTurnTools中按轮次动态装配四类来源公司知识search_company_brain以及标签树辅助工具list_memory_tags/outline_memory_tree等。实时应用MCP 风格的 search / describe / execute外加内嵌 Google如 Gmail见 src/brain/tools/mcp/google/。Slack 上下文在 Slack 中时才装配的频道检索工具runSlackChannelLookup、runSlackChannelsSearch并先做checkAskerCanSearchChannel权限检查。副作用连接引导connect prompts、调度器、沙箱产物、send_to、记忆遗忘工具、技能工具、终局工具finish_turn等。装配还支持懒加载工具族createLazyToolState/LAZY_TOOL_FAMILIES并可在审批恢复时通过snapshotTurnToolAssembly/restoreTurnToolAssembly序列化、重建整套工具面——这正是审批挂起后能无缝续跑的底座。个人连接隔离架构文档的关键约束在 src/brain/slack/turn.ts 中兑现Slack 轮次设置personalConnectionsOnly: true组织共享的 MCP 连接不参与成员在 Slack 内的动作装配日志会打印personalOnlyyes/no供排障。公聊频道 rollout 的佐证另有独立机制crosscheckThemesWithConnectedToolssrc/brain/slack/connected-tool-crosscheck.ts只使用组织共享连接且运行时fail-closed 只读orgSharedOnly: true, readOnly: true, redactToolLogs: true注释明确「个人凭据与写类 MCP 方法不可被选中或执行」并把工具证据定位为「非持久记忆真相」——交叉验证的结果不当作可信记忆写入。审批闸门写类工具send / create / update / delete …会挂起为 Block KitApprove/Deny卡片只有原始提问者能决定src/brain/turn/approval.ts。实现细节审批状态机包含pending / approved / denied / expired / executed / cancelled / error七态APPROVAL_EXPIRY_MS 15 * 60 * 100015 分钟过期过期由runApprovalExpiry定时回调折叠卡片PendingApproval连同ApprovalResumeState含完整消息序列、工具装配快照、记忆作用域与待写回记忆持久化在 DO SQL批准后经resumeTurnAfterApproval恢复轮次。可选Code Mode / 沙箱路径位于 src/brain/tools/mcp/ 与 src/brain/tools/sandbox/按需启用。存储分层四类数据各自归位存储角色典型内容PostgresHyperdrive 代理关系型事实slack_workspace含加密 Bot token、成员、MCP 连接/授权、组织元数据schema 见 src/db/schema/slack.ts 与 src/db/schema/brain/mcp.tsAUTH_KV短生命周期键OAuth state、事件/chime 去重键DO SQL轮次级状态turns、审批、rollout 游标、chime 预算、邀请、技能草稿、自动化调度等向量/记忆管线可检索文档经writeMemory写入并索引的公司脑文档从实现看Postgres 侧由repo/db的runInDbScope封装DO 侧方法大量使用agent.sql建表如brain_pending_approval。架构文档强调AUTH_KV的去重职责与 DO SQL 的「事件溯源 调度游标」职责二者分别对应 Worker 入口的幂等与 DO 内部的长时状态。本文不覆盖的内容按架构文档的自述边界以下主题留给专门文档均已转换为仓库根相对路径完整 triage 文法与 chime 规则 → docs/slack.md每个 DO 方法、模型选择表与计费 → docs/agent.md分析事件 schema →docs/product/product-analytics.md当前仓库未见该目录属文档遗留锚点本地开发Slack 沙箱、隧道、/brain安装、DO 拆分 runbook、Slack App manifest → 见 docs/README.md 的文档清单代码锚点速查架构文档给出的锚点在本仓库中的对应位置文档锚点原路径仓库内对应路径作用apps/api/src/cloud-extras.ts特性开关挂载当前仓库以features.companyBrain配置形式存在功能启用apps/api/src/routes/brain/index.tssrc/routes/index.ts/brain/*路由树apps/api/src/lib/brain/turn/agent.tssrc/brain/turn/agent.tsDO 壳 fiber 恢复apps/api/src/lib/brain/slack/turn.tssrc/brain/slack/turn.tsSlack 轮次入口personalConnectionsOnlyapps/api/src/lib/brain/memory/read-scope.tssrc/brain/memory/read-scope.ts读容器解析apps/api/src/lib/brain/memory/writeback.tssrc/brain/memory/writeback.ts写容器解析apps/api/src/lib/brain/turn/tools.tssrc/brain/turn/tools.ts工具装配想要进一步验证本文全部论断可直接在仓库执行文档提供的快速核查命令路径以当前仓库为准rg -n SHARED_TEAM_BRAIN_CONTAINER_TAG src/compat/lib/spaces/provisioning.ts rg -n personalConnectionsOnly: true src/brain/slack/turn.ts rg -n limit: 40 src/brain/memory/search-brain.ts rg -n CONTAINER_SEARCH_CONCURRENCY src/brain/memory/search-brain.ts小结Company Brain 的架构核心是一句话Worker 做准入与分发DO 做一切。/brain/*路由把 Slack 事件与 Web 请求转译为对CompanyBrainAgent每 org 一实例的方法调用DO 内部以 fiber 检查点 幂等键保证 Slack 轮次可靠执行以容器标签实现「公开共享 / 个人 / 私密频道」三级记忆隔离以personalConnectionsOnly与 fail-closed 只读运行时分隔个人与组织的工具面再以 Block Kit 审批卡闸住写类副作用。这套设计让一个「有记忆、能办事」的团队队友能以组织为单位安全、隔离、可恢复地运行在 Cloudflare 的边缘平台上。赞分享【免费下载链接】company-brainOpen-sourcing our company brain - A teammate in your Slack that remembers everything your team says, and can go do the work.项目地址https://gitcode.com/gh_mirrors/co/company-brain点击查看免费下载相关推荐TestDisk 数据恢复终极实战一次搞定分区表修复与误删文件找回TestDisk 数据恢复终极实战一次搞定分区表修复与误删文件找回 TestDisk 是一款开源的磁盘分区修复与数据恢复工具专门解决分区表损坏、分区丢失、误Company Brain Agent Runtime 深度解析Durable Object 承载的 Slack 团队大脑Company Brain Agent Runtime 深度解析Durable Object 承载的 Slack 团队大脑 本篇技术指南基于开源仓库 comp终极Nuke特效工具包150免费插件彻底改变你的视觉特效工作流终极Nuke特效工具包150免费插件彻底改变你的视觉特效工作流 Nuke Survival ToolkitNST是一套包含150多个专业级插件的 免费NAI AgentAgent 框架后端云原生MCP 服务实时通信创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门