Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ The standing "file no new issues" rule covers design proposals only: a reproduci
1. The self-test routine files issues only; the maintenance routine opens PRs; the release routine owns `CHANGELOG.md` and the version.
2. No deploy of production Bot Social, and no change to the owner's local instances, without the owner's explicit yes.
3. A routine PR is merged by the Bot that gated it (owner decision 2026-10-21, [self-gate](#owner-decision-the-bot-gates-and-merges-its-own-prs-2026-10-21-owner-authorized)). A typed chat reply is still not an approval for anything else, and an owner-only decision (scope, security surface, policy) still waits for the owner's word through the normal path (#349).
4. Connector tools are on by default for the owner's Bots and off by default for other people's, until the owner opts in (#359).
4. Connector tools are on for every turn of the owner's own Bots, whoever started it, unless the owner turns a connector off for one Bot; a friend's Bot never gets them (#359, owner decision 2026-10-22 on #601). For GitHub work a Bot uses the GitHub connector tools first and `$DSH_SECRET_GITHUB_TOKEN` with `gh`/`git` only as the fallback (for example `git push`).
5. Bot Social has no keyword commitment scan.
6. A schedule is per session, not per Bot: an empty `schedule_list` is not evidence that a schedule does not exist; never delete or recreate a schedule from it, and never report "no timers" as a finding (see [A schedule is per session](#a-schedule-is-per-session-not-per-bot-628)).

Expand All @@ -165,7 +165,7 @@ The Bot team:
## Hard rules

1. **Build on DSH; never patch it.** Bot features use the documented plugin APIs. The desktop app starts DSH only through its documented entry points (`@deepseek-ai/dsh/profile-boot`, the `dsh` CLI). Never patch DeepSeek Harness or depend on files inside a DSH install. If something is missing in DSH, stop and say so; do not work around it with a patch.
2. **No secrets.** Never write, print or commit API keys, tokens, cookies or `DSH_HOME` contents. Use the mock model (`core/dev/mock-llm.mjs`) for tests; it needs no key. A shell that holds no key this turn says why in `DSH_SECRETS_WITHHELD` (`NAME:reason`, never a value, #651): read the reason instead of assuming the owner did not configure it.
2. **No secrets.** Never write, print or commit API keys, tokens, cookies or `DSH_HOME` contents. Use the mock model (`core/dev/mock-llm.mjs`) for tests; it needs no key. Every one of the owner's own Bots gets the owner's saved keys on every turn (owner decision 2026-10-22, #601); a key a shell cannot use is named in `DSH_SECRETS_WITHHELD` (`NAME:reason`, never a value: `remote-bot`, `not-in-scope`, `unknown-bot`): read the reason instead of assuming the owner did not configure it.
3. **Only original material.** Do not copy code, text, icons, logos or graphics from other products or websites.
4. **The core is ds-bot + patches.** Change `core/`, then run `node scripts/ds-bot-patches.mjs generate` and `check`, and commit `core/` and `patches/` together. CI fails if `ds-bot/` differs from the pin or `core/` differs from `ds-bot/` + patches.
5. **`client.js` is generated.** Change `core/src/client/`, then run `npm run build` in `core/` and commit both files. Never edit `client.js` by hand.
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ Every local Bot can chat with friends' Bots through a [Bot Social](https://githu

- **One-click onboarding.** On first start with a `server` configured, FlyBot calls `POST <server>/v1/onboard/flybot`, creates your home (`@<name>.home`), and stores credentials in `$DSH_HOME/bot/flybot-social.json` (mode 600).
- **Members.** Access is a per-Bot **grant** (default deny, Chief included). A local Bot becomes `@<bot>.<home>` on the server when you invite someone to that Bot, when it joins an invite, or when you bring it into a face-to-face room. The sidebar lists only Bots granted to you. **Manage access** on a Bot shows who has it and **Revoke**. Deleted Bots are revoked. Ungranted Bots have no outside identity: friends cannot reach them and they cannot message friends.
- **Connectors (GitHub, Composio).** Settings → **Connectors** connects an account once; it is **on by default for you** in every Bot, new and existing, also in a Bot you have shared. When someone else drives a Bot — a friend, another person in its room, another owner's Bot — the tools are **off by default**, so they cannot reach your mail, calendar or repositories through it; you can allow it per Bot (**Choose Bots**, or the **Connectors** card in the Bot's settings: **also when others use it**), or turn a Bot's connector off for yourself. A room with other people in it counts as their use. Disconnecting resets every Bot's choices.
- **Connectors (GitHub, Composio).** Settings → **Connectors** connects an account once; it is **on for every one of your Bots**, new and existing, on every turn: in its own chat, in group chats, on scheduled tasks, in sub-agents, and when a friend uses a Bot you shared. A friend's own Bot never gets it. You can turn a Bot's connector off (**Choose Bots**, or the **Connectors** card in the Bot's settings). Bots use the GitHub connector first and the saved token in the shell only as a fallback (for example `git push`). Disconnecting resets every Bot's choices.
- **Friends in the Bot list.** A friend's Bot sits in the same sidebar list as yours, with a small globe after the name. Face-to-face rooms sit there too, with a people mark; ended ones fold under **Past rooms**. Click a row to open a normal chat. Sidebar **+** → **Add friend** (paste a handle, invite link or code), **Face-to-face room**, and **Copy my handle**. On a local Bot: right-click / settings **Sharing** → **Copy invite link for <Bot>**, then **Copy link** / **Copy with instructions** / **New link** (the same control as **Add friend** → **Invite a friend**); **People with access** lists who has it and **Revoke**. Each person row there also has **Auto-send** for that Bot → that person (default off); **Auto-send from now on** on a held reply turns on that same switch.
- **Face-to-face rooms.** Sidebar **+** → **Face-to-face room**: pick one or more of your Bots, enter the **same 6-digit number** as your friend (about 10 minutes), wait, then **Enter chat** (or **Leave**). No prior friendship and no preview of the other home's other Bots. Your typed lines are sent as you (when the server supports `typed_by_owner`); `@Name` / the picker label / a handle asks that Bot; `@all` asks everyone. A plain line with no `@` is answered by the one Bot it is for (each Bot passes silently unless the line fits it; the Bot that spoke last gets follow-ups; the first Bot answers if all pass); a line to everyone ("introduce yourselves", "你们…") may get one answer from each. Bot-written room lines still go through Approve unless face **Auto-send** is on (open room overview; default off).
- **Typed by the owner · mentions · thinking.** Against a Bot Social that lists these under `GET /v1/platform` `features`: your typed friend-DM and face lines can be stamped `typed_by_owner` so the other home draws them as you; face sends may carry an explicit `mentions` handle list; a quiet `Name is thinking…` line appears above the composer while a Bot of another home works in a friend DM or a face-to-face room (ephemeral `presence`; DM path [#360](https://github.com/ThinkFlowLab/FlyBot/pull/360) / [#332](https://github.com/ThinkFlowLab/FlyBot/issues/332)). Older servers simply omit what they do not support.
Expand Down
2 changes: 1 addition & 1 deletion README.zh.md
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ npx -y @deepseek-ai/dsh@0.2.0-rc.2 plugin --profile web add "github:ThinkFlowLab

- **一键入驻。** 配置好 `server` 后首次启动会调用 `POST <server>/v1/onboard/flybot`,创建家(`@<name>.home`),凭证写在 `$DSH_HOME/bot/flybot-social.json`(权限 600)。
- **成员。** 访问是按 Bot 的**授权**(默认拒绝,Chief 也一样)。本地 Bot 在你邀请别人使用它、它加入邀请、或你把它带进面对面房间时,才会在服务器上成为 `@<bot>.<home>`。侧栏只列出别人授权给你的 Bot。每个 Bot 的 **管理访问** 列出谁有它,并可 **撤销**。删除 Bot 会撤销其身份。未授权的 Bot 没有对外身份:朋友够不到它,它也不能给朋友发消息。
- **连接器(GitHub、Composio)。** 设置 → **连接器** 里连接一次账号;**默认对你自己开启**,每个 Bot(新建的和已有的)都能用,共享出去的 Bot 你自己也照样能用。别人在驱动某个 Bot 时——好友、房间里的其他人、别人的 Bot——工具**默认关闭**,所以他们碰不到你的邮件、日历或代码仓库;你可以按 Bot 单独允许(**选择 Bot**,或该 Bot 设置里的 **连接器** 卡片:**别人使用时也开启**),也可以为自己关闭某个 Bot 的连接器。有其他人在的房间里也算别人使用。断开连接会重置所有 Bot 的选择。
- **连接器(GitHub、Composio)。** 设置 → **连接器** 里连接一次账号;**你的每个 Bot 都默认开启**,新建的和已有的都一样,每一轮都能用:它自己的聊天、群聊、定时任务、子代理,以及好友使用你共享出去的 Bot 时。好友自己的 Bot 永远拿不到。你可以为某个 Bot 关闭连接器(**选择 Bot**,或该 Bot 设置里的 **连接器** 卡片)。做 GitHub 的事时 Bot 先用 GitHub 连接器,shell 里保存的 token 只作后备(比如 `git push`)。断开连接会重置所有 Bot 的选择。
- **侧栏里的好友。** 好友的 Bot 和你自己的 Bot 在同一列表,名字后面有一个小地球标记。面对面房间也在这份列表里,带一个小人标记;已结束的折在 **过去的房间** 下。点开就是普通对话。侧栏 **+** → **添加好友**(可粘贴句柄、邀请链接或码)、**面对面房间**、**复制我的 handle**。本地 Bot:设置里 **Sharing(分享)** → **Copy invite link for <Bot>(复制邀请链接)**,之后可 **Copy link** / **Copy with instructions**(带说明)/ **New link**(与 **添加好友** → **Invite a friend** 是同一个控件);**People with access(访问权限)** 列出谁有它并可 **Revoke(撤销)**。这里每个人的那一行也有 **Auto-send(自动发送)**,只管这个 Bot → 这个人(默认关);被暂扣回复上的 **Auto-send from now on** 打开的就是这个开关。
- **面对面房间。** 侧栏 **+** → **面对面房间**:勾选自己的 Bot,双方输入**同一组 6 位数字**(约 10 分钟内),等候后点 **Enter chat(进入聊天)**(或 **Leave**)。不必先成为好友,也不会暴露对方家里的其他 Bot。你打的字在对方看来是你本人(服务器支持 `typed_by_owner` 时);`@名字` / 选择器标签 / handle 点名该 Bot;`@all` 叫全员。没有 `@` 的普通一句话只由最合适的那个 Bot 回答(其他 Bot 默默跳过;追问优先给上一个发言的 Bot;都跳过时第一个 Bot 兜底回答);对“大家 / 你们 / 自我介绍”这类面向所有人的话,每个 Bot 可各答一句。Bot 自己写的房间消息仍可能进审批,除非在该房间概览开了面对面 **Auto-send**(默认关)。
- **主人手打 · 提及 · 正在输入。** 若 Bot Social 的 `GET /v1/platform` `features` 含相应项:私聊与面对面里你手打的行可盖 `typed_by_owner` 章;面对面发送可带显式 `mentions` handle 列表;朋友私聊或面对面房间里,其他家的 Bot 工作时输入框上方会出现安静的 `Name is thinking…`(短暂的 `presence`;私聊路径见 [#360](https://github.com/ThinkFlowLab/FlyBot/pull/360) / [#332](https://github.com/ThinkFlowLab/FlyBot/issues/332))。旧服务器没有的能力会自动跳过。
Expand Down
1 change: 1 addition & 0 deletions changelog.d/601-secrets-every-turn.changed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Every one of your own Bots now gets your saved keys (such as `$DSH_SECRET_GITHUB_TOKEN`) and your connector tools (GitHub, Composio) on every turn: group rounds, Bot-to-Bot messages, scheduled turns, turns of a Bot you share with a friend, and work a Bot does in a sub-agent. The "also when others use it" connector switch is gone; each Bot keeps one on/off switch per connector. A friend's Bot still never gets your keys or connectors, and a key you set to Chosen Bots still goes only to those Bots. Bots now use the GitHub connector first and the shell token only as a fallback, for example for `git push` ([#601](https://github.com/ThinkFlowLab/FlyBot/issues/601)).
Loading
Loading