@foxden-app/foxclaw 0.11.1 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/.env.example +18 -1
  2. package/CHANGELOG.md +36 -0
  3. package/README.md +4 -3
  4. package/README_EN.md +4 -3
  5. package/dist/antigravity/account_ui.d.ts +34 -0
  6. package/dist/antigravity/account_ui.js +354 -0
  7. package/dist/antigravity/adapter.js +1 -1
  8. package/dist/antigravity/auth.d.ts +4 -1
  9. package/dist/antigravity/auth.js +17 -5
  10. package/dist/antigravity/controller.d.ts +3 -106
  11. package/dist/antigravity/controller.js +2 -2083
  12. package/dist/antigravity/conversation_ui.d.ts +56 -0
  13. package/dist/antigravity/conversation_ui.js +509 -0
  14. package/dist/antigravity/ui_callbacks.d.ts +6 -0
  15. package/dist/antigravity/ui_callbacks.js +6 -0
  16. package/dist/bridge/unified_bridge.d.ts +114 -0
  17. package/dist/bridge/unified_bridge.js +1343 -0
  18. package/dist/channels/bridge_messaging_router.d.ts +8 -4
  19. package/dist/channels/bridge_messaging_router.js +15 -4
  20. package/dist/channels/telegram/telegram_messaging_port.d.ts +16 -0
  21. package/dist/channels/telegram/telegram_messaging_port.js +22 -2
  22. package/dist/channels/text_actions.d.ts +14 -0
  23. package/dist/channels/text_actions.js +48 -0
  24. package/dist/channels/weixin/weixin_channel_adapter.d.ts +3 -4
  25. package/dist/channels/weixin/weixin_channel_adapter.js +2 -2
  26. package/dist/channels/weixin/weixin_messaging_port.d.ts +16 -1
  27. package/dist/channels/weixin/weixin_messaging_port.js +34 -7
  28. package/dist/codex_app/activity.d.ts +62 -0
  29. package/dist/codex_app/activity.js +418 -0
  30. package/dist/codex_app/adapter.d.ts +2 -2
  31. package/dist/codex_app/adapter.js +55 -25
  32. package/dist/codex_app/backend_ui.d.ts +4 -0
  33. package/dist/codex_app/backend_ui.js +48 -0
  34. package/dist/codex_app/client.js +0 -12
  35. package/dist/config.d.ts +4 -0
  36. package/dist/config.js +41 -5
  37. package/dist/controller/access.d.ts +1 -11
  38. package/dist/controller/access.js +1 -33
  39. package/dist/controller/activity.d.ts +1 -62
  40. package/dist/controller/activity.js +2 -418
  41. package/dist/controller/auth_errors.d.ts +11 -0
  42. package/dist/controller/auth_errors.js +124 -0
  43. package/dist/controller/auth_files.d.ts +13 -0
  44. package/dist/controller/auth_files.js +156 -0
  45. package/dist/controller/auth_presentation.d.ts +77 -0
  46. package/dist/controller/auth_presentation.js +697 -0
  47. package/dist/controller/auth_quota_service.d.ts +27 -0
  48. package/dist/controller/auth_quota_service.js +151 -0
  49. package/dist/controller/controller.d.ts +30 -56
  50. package/dist/controller/controller.js +181 -3497
  51. package/dist/controller/interactions.d.ts +74 -0
  52. package/dist/controller/interactions.js +560 -0
  53. package/dist/controller/local_usage_service.d.ts +19 -0
  54. package/dist/controller/local_usage_service.js +62 -0
  55. package/dist/controller/native_panel_service.d.ts +55 -0
  56. package/dist/controller/native_panel_service.js +214 -0
  57. package/dist/controller/native_panels.d.ts +61 -0
  58. package/dist/controller/native_panels.js +784 -0
  59. package/dist/controller/shared_helpers.d.ts +53 -0
  60. package/dist/controller/shared_helpers.js +399 -0
  61. package/dist/controller/state_types.d.ts +390 -0
  62. package/dist/controller/state_types.js +82 -0
  63. package/dist/controller/turn_rendering.d.ts +22 -0
  64. package/dist/controller/turn_rendering.js +288 -0
  65. package/dist/core/access.d.ts +11 -0
  66. package/dist/core/access.js +33 -0
  67. package/dist/core/attachment_files.d.ts +13 -0
  68. package/dist/core/attachment_files.js +180 -0
  69. package/dist/core/attachment_types.d.ts +22 -0
  70. package/dist/core/attachment_types.js +1 -0
  71. package/dist/core/attachments.d.ts +5 -3
  72. package/dist/core/attachments.js +2 -2
  73. package/dist/core/backend_registry.d.ts +22 -0
  74. package/dist/core/backend_registry.js +50 -0
  75. package/dist/core/backend_ui.d.ts +28 -0
  76. package/dist/core/backend_ui.js +1 -0
  77. package/dist/core/channel_events.d.ts +48 -0
  78. package/dist/core/channel_events.js +1 -0
  79. package/dist/core/channel_port.d.ts +52 -8
  80. package/dist/core/engine_spi.d.ts +20 -5
  81. package/dist/core/listener_scope.d.ts +11 -0
  82. package/dist/core/listener_scope.js +10 -0
  83. package/dist/core/message_text.d.ts +2 -0
  84. package/dist/core/message_text.js +28 -0
  85. package/dist/core/network_errors.d.ts +1 -0
  86. package/dist/core/network_errors.js +23 -0
  87. package/dist/core/orchestrator.d.ts +57 -22
  88. package/dist/core/orchestrator.js +877 -477
  89. package/dist/core/queued_engine_input.d.ts +12 -0
  90. package/dist/core/queued_engine_input.js +16 -0
  91. package/dist/core/runtime_supervisor.d.ts +19 -0
  92. package/dist/core/runtime_supervisor.js +45 -0
  93. package/dist/core/scope_operations.d.ts +7 -0
  94. package/dist/core/scope_operations.js +19 -0
  95. package/dist/core/stream_preview.js +21 -9
  96. package/dist/dsh/adapter.d.ts +48 -0
  97. package/dist/dsh/adapter.js +205 -0
  98. package/dist/dsh/backend.d.ts +7 -0
  99. package/dist/dsh/backend.js +21 -0
  100. package/dist/dsh/client.d.ts +46 -0
  101. package/dist/dsh/client.js +184 -0
  102. package/dist/dsh/permissions_plugin.d.ts +30 -0
  103. package/dist/dsh/permissions_plugin.js +21 -0
  104. package/dist/dsh/runtime.d.ts +20 -0
  105. package/dist/dsh/runtime.js +36 -0
  106. package/dist/dsh/ui.d.ts +38 -0
  107. package/dist/dsh/ui.js +342 -0
  108. package/dist/i18n.d.ts +4 -0
  109. package/dist/i18n.js +12 -0
  110. package/dist/main.js +144 -72
  111. package/dist/opencode/adapter.js +28 -9
  112. package/dist/opencode/controller.js +1 -1
  113. package/dist/store/channel_inbox.d.ts +14 -0
  114. package/dist/store/channel_inbox.js +21 -0
  115. package/dist/store/database.d.ts +10 -4
  116. package/dist/store/database.js +13 -3
  117. package/dist/store/task_journal.d.ts +32 -0
  118. package/dist/store/task_journal.js +70 -0
  119. package/dist/telegram/api.d.ts +2 -2
  120. package/dist/telegram/api.js +10 -28
  121. package/dist/telegram/gateway.d.ts +13 -27
  122. package/dist/telegram/gateway.js +86 -43
  123. package/dist/telegram/media.d.ts +2 -34
  124. package/dist/telegram/media.js +1 -180
  125. package/dist/telegram/task_preview.d.ts +13 -0
  126. package/dist/telegram/task_preview.js +92 -0
  127. package/dist/telegram/task_result.d.ts +2 -0
  128. package/dist/telegram/task_result.js +12 -0
  129. package/dist/telegram/text.d.ts +1 -1
  130. package/dist/telegram/text.js +2 -27
  131. package/dist/types.d.ts +2 -2
  132. package/docs/dsh.md +83 -0
  133. package/docs/release.md +13 -11
  134. package/docs/zh/architecture-review.md +106 -0
  135. package/docs/zh/dsh.md +83 -0
  136. package/docs/zh/release.md +13 -11
  137. package/docs/zh/telegram-experience.md +40 -0
  138. package/package.json +7 -5
package/docs/zh/dsh.md ADDED
@@ -0,0 +1,83 @@
1
+ # DeepSeek Harness 后端
2
+
3
+ FoxClaw 直接启动 DSH 的 `acp` profile,复用 Telegram 的任务进度、工具状态、最终回答、排队和中断功能。模型与推理档位读取 DSH 当前会话提供的选项;每个 Bot、聊天和话题分别保存会话与设置。
4
+
5
+ ## 接入现有 Bot
6
+
7
+ 在 FoxClaw 的 `.env` 中增加:
8
+
9
+ ```dotenv
10
+ DSH_ENABLED=true
11
+ DSH_SOURCE_DIR=/absolute/path/to/deepseek-harness
12
+ ```
13
+
14
+ DSH 源码目录需已安装依赖并准备好本机 native addon。源码模式使用 FoxClaw 的 Node 启动 `apps/cli/src/bin.ts`,从 DSH 目录加载 `tsx`。Linux 开发环境可先在 DSH 仓库执行 `pnpm install` 和 `pnpm run build:native-system`,其他平台按 DSH 自身安装说明准备。
15
+
16
+ 如果使用已安装的 CLI,则用 `DSH_CLI_BIN=/absolute/path/to/dsh` 替代 `DSH_SOURCE_DIR`;也支持 CLI 的 `.js`、`.mjs` 或 `.cjs` 入口。两项同时设置时优先源码目录。
17
+
18
+ 重启 FoxClaw 后,在现有 Codex 或 Antigravity Bot 中发送 `/backend dsh`,再发送 `/setup`。切回原后端后,原后端的会话和设置会恢复。正在执行任务时,先 `/interrupt` 再切换后端。
19
+
20
+ ## 独立 DSH Bot
21
+
22
+ ```dotenv
23
+ CODEX_BOT_TOKENS=
24
+ DSH_BOT_TOKEN=123456:your-independent-bot-token
25
+ DSH_SOURCE_DIR=/absolute/path/to/deepseek-harness
26
+ TG_ALLOWED_USER_ID=123456789
27
+ DEFAULT_CWD=/absolute/path/to/workspace
28
+ ```
29
+
30
+ `DSH_BOT_TOKEN` 自动启用 DSH,必须与其他后端的 Bot token 不同。独立 DSH 模式无需 Codex 或 Antigravity;执行 `foxclaw doctor` 检查,再正常启动服务。当前 DSH 接入范围是 Telegram,微信仍使用已有后端。
31
+
32
+ ## 配置与操作
33
+
34
+ | 配置 | 默认值 / 用途 |
35
+ | --- | --- |
36
+ | `DSH_HOME` | DSH 原有 home,通常 `~/.dsh`;复用其凭据、profile 和持久会话 |
37
+ | `DSH_PROFILE` | `acp`;自定义 profile 必须提供 ACP、模型控制和 `permissionPresets` 服务 |
38
+ | `DSH_PATCHES` | JSON 数组,如 `["/absolute/path/to/patch.yml"]`;按顺序传入 DSH |
39
+ | `DSH_STARTUP_TIMEOUT_MS` | `60000`;首次初始化 profile 的最长等待时间 |
40
+ | `DEFAULT_SANDBOX_MODE` | 初始权限,支持 `read-only`、`workspace-write`、`danger-full-access` |
41
+
42
+ Provider 与 API key 沿用 DSH 配置。使用环境变量的 provider,可将相应变量(如 `DEEPSEEK_API_KEY`)加入 FoxClaw `.env`,DSH 子进程会继承。这里不使用 Codex/AGY 的账号轮转或认证同步。
43
+
44
+ | 操作 | 用途 |
45
+ | --- | --- |
46
+ | `/setup` | 模型、推理档位、权限、排队/中断接管、会话与插件配置面板 |
47
+ | `/models`、`/model <provider/model>` | 选择 DSH 模型;`/model default` 恢复会话初始模型 |
48
+ | `/effort`、`/effort <档位>` | 使用当前模型提供的推理档位;切换模型会重置为该模型默认档位 |
49
+ | `/permissions read-only|default|full-access` | 只读、工作区写入、完全访问;也可从面板选择 |
50
+ | `/threads`、`/open <会话 ID>` | 列出并恢复 DSH 持久会话 |
51
+ | `/new [目录]` | 新会话,可指定工作目录 |
52
+ | `/active queue|steer`、`/queue`、`/steer <消息>`、`/interrupt` | 排队、中断接管与取消 |
53
+ | `/plugins` | 查看 profile 显式插件依赖和额外 patch 路径 |
54
+
55
+ 权限通过随桥加载的 `foxclaw-permissions` 插件设置 DSH 原生 preset,作用于根 Agent,子 Agent 按 DSH 自身规则继承。DSH 发出的工具审批会显示“允许本次 / 拒绝”按钮,中断或退出时取消等待中的审批。任务执行中不能修改权限。
56
+
57
+ ## 插件与支持边界
58
+
59
+ `/plugins` 展示 profile 的显式依赖和配置 patch,并非所有运行中的内置插件清单。安装或移除沿用 DSH 命令,使用与 FoxClaw 一致的 `DSH_HOME` 和 profile,完成后重启 FoxClaw:
60
+
61
+ ```bash
62
+ dsh plugin --profile acp add <package>
63
+ dsh plugin --profile acp remove <package>
64
+ ```
65
+
66
+ 源码模式下,可用 `node --import tsx/esm apps/cli/src/bin.ts plugin --profile acp ...` 在 DSH 仓库执行。FoxClaw 目前不提供聊天内安装/移除插件按钮。
67
+
68
+ 进度来自 ACP 的已提交消息和工具事件,不是模型原始 token 流。图片在 ACP 声明支持时原生发送,其余附件传入本地路径。DSH 当前 ACP 未提供历史消息回放、会话分叉、重命名、Agent/Plan 切换等接口;对应 Codex 专用按钮不会出现在 DSH 面板。
69
+
70
+ ACP 当前仅报告上下文占用,不提供逐轮输入、输出及缓存 token 消耗;DSH 状态页会明确说明统计未提供。
71
+
72
+ ## 开发验证
73
+
74
+ 普通 DSH 测试使用不需要 API key 的 ACP 子进程 fixture。真实源码联调使用 DSH 自带的控制面 fixture,不调用付费模型:
75
+
76
+ ```bash
77
+ FOXCLAW_DSH_TEST_SOURCE_DIR=/absolute/path/to/deepseek-harness \
78
+ DSH_TELEMETRY_DISABLED=1 node --test --import tsx src/dsh/source.integration.test.ts
79
+ ```
80
+
81
+ 联调使用临时 home 和会话目录,验证模型/推理设置、原生权限日志、恢复、工具事件和取消。未配置源码路径时跳过此项。
82
+
83
+ 先执行 `npm run build`,再追加 `FOXCLAW_DSH_TEST_BUILT=1` 可验证编译后的后端和随包发布的权限插件。
@@ -16,38 +16,40 @@
16
16
 
17
17
  ```bash
18
18
  git status --short --branch
19
- npm pkg get name version
20
- npm view @foxden-app/foxclaw version
19
+ node -p "require('./package.json').name + '@' + require('./package.json').version"
20
+ pnpm view @foxden-app/foxclaw version
21
21
  git tag --list 'v*' --sort=-v:refname | head
22
22
  ```
23
23
 
24
24
  确认目标版本还没有发布,也没有远端 tag:
25
25
 
26
26
  ```bash
27
- npm view @foxden-app/foxclaw@0.5.10 version 2>/dev/null || true
27
+ pnpm view @foxden-app/foxclaw@0.5.10 version 2>/dev/null || true
28
28
  git ls-remote --tags origin refs/tags/v0.5.10
29
29
  ```
30
30
 
31
+ 使用 `packageManager` 固定的 pnpm 版本,以 `pnpm install --frozen-lockfile` 安装依赖。发布流水线仅在 registry 鉴权和发布步骤使用 npm。
32
+
31
33
  运行与发布 workflow 对齐的本地校验:
32
34
 
33
35
  ```bash
34
- npm run lint
35
- npm run typecheck
36
- npm test
37
- npm pack --dry-run
36
+ pnpm lint
37
+ pnpm typecheck
38
+ pnpm test
39
+ pnpm pack --pack-destination /tmp/foxclaw-release
38
40
  git diff --check
39
41
  ```
40
42
 
41
- `npm pack --dry-run` 会执行 `prepack` 构建,并列出 npm 包内容。确认输出里有 `CHANGELOG.md`。
43
+ `pnpm pack` 会执行 `prepack` 构建并创建发布包。使用 `tar -tzf /tmp/foxclaw-release/*.tgz` 检查包含 `CHANGELOG.md`。
42
44
 
43
45
  ## 准备版本
44
46
 
45
- 1. 更新 `package.json` 和 `package-lock.json` 的版本号。
47
+ 1. 更新 `package.json` 和 `pnpm-lock.yaml` 的版本号。
46
48
  2. 在 `CHANGELOG.md` 顶部新增版本条目,包含 `### 中文` 和 `### English` 小节。
47
49
  3. 提交发布 commit,推荐格式:
48
50
 
49
51
  ```bash
50
- git add package.json package-lock.json CHANGELOG.md
52
+ git add package.json pnpm-lock.yaml CHANGELOG.md
51
53
  git commit -m "发布 0.5.10:一句话说明"
52
54
  ```
53
55
 
@@ -71,7 +73,7 @@ gh run watch <run-id> --repo foxden-app/foxclaw --exit-status
71
73
  成功后确认 npm 和 GitHub Release:
72
74
 
73
75
  ```bash
74
- npm view @foxden-app/foxclaw version
76
+ pnpm view @foxden-app/foxclaw version
75
77
  gh release view v0.5.10 --repo foxden-app/foxclaw --json tagName,name,url,publishedAt,isDraft,isPrerelease
76
78
  ```
77
79
 
@@ -0,0 +1,40 @@
1
+ # Telegram 主通道:能力评估与接入顺序
2
+
3
+ 日期:2026-10-06。Telegram 是主使用通道;微信保留文字菜单基础,观察模式的消息收纳方案明确后再扩展。
4
+
5
+ ## 官方能力与 FoxClaw 的用途
6
+
7
+ 官方最新列出的版本为 Bot API 10.3(2026-08-24)。10.1 加入富消息,10.2 加入群内定向临时消息,10.3 增加草稿停止控制和禁用按钮。[官方更新记录](https://core.telegram.org/bots/api#recent-changes)
8
+
9
+ | 优先级 | 能力 | 产品用途 | 当前状态与边界 |
10
+ | --- | --- | --- | --- |
11
+ | P0 | 编辑消息、富消息 | 一条任务进度卡,完成后换成结果;保留模型、权限、审批入口 | 统一任务路径已实现;私聊草稿与群聊持久卡分别管理,结果交付前结束预览。存量观察展示待收敛 |
12
+ | P1 | 草稿原生停止按钮 | 手机直接停止正在生成的回复 | 已接入。只停止对应任务,保留排队任务;群聊和草稿不支持时使用卡片按钮。等待原生取消完成后释放任务槽位 |
13
+ | P1 | 折叠内容、结构化块 | 摘要常驻,工具过程和长日志折叠;需要时查看完整结果 | 统一任务已实现回答在前、执行摘要折叠在后;长摘要限长,长回答按需分块。外部观察卡待统一 |
14
+ | P1 | 禁用按钮 | 正在切换账号、启动或取消任务时明确展示暂不可用的操作 | 待接入。后端仍必须验证操作有效性,展示状态不能代替校验 |
15
+ | P2 | 群内仅本人可见的临时面板 | 账号、模型和个人设置不占公共群消息流 | 待接入;需要独立处理临时消息标识、回调用户与删除/编辑接口 |
16
+ | P2 | 复制文本按钮 | 复制工作目录、恢复命令、任务编号 | 按场景加入,优先采用菜单可直接完成的操作 |
17
+
18
+ 草稿停止使用 `can_stop`、`keep_on_stop` 和 `stopped_message_generation` 更新。草稿限私聊且是临时预览,最终回答仍需发送持久消息。停止事件只携带聊天、主题和草稿编号,必须与当前任务匹配,忽略过期事件。[草稿接口](https://core.telegram.org/bots/api#sendrichmessagedraft)、[停止事件](https://core.telegram.org/bots/api#messagegenerationstopped)
19
+
20
+ 禁用按钮和颜色由 Telegram 键盘类型支持;群内个人面板需要定向临时消息及其专用编辑接口。[键盘按钮](https://core.telegram.org/bots/api#inlinekeyboardbutton)、[临时消息参数](https://core.telegram.org/bots/api#ephemeralmessageparameters)
21
+
22
+ 不把这些功能一次性塞入共享调度器。Telegram 通道声明展示能力并转换事件;调度器只处理任务状态、操作归属和取消结果;各后端提供自己的模型、权限与审批能力。
23
+
24
+ ## 推荐的任务与观察展示
25
+
26
+ 1. 每项任务维护一条进度卡:引擎、阶段、耗时、最近一项工具活动、停止入口。
27
+ 2. 增量内容合并、节流编辑,普通工具活动不新增聊天消息。
28
+ 3. 审批单独展示,保持明确的任务归属;完成后更新或撤销过期操作。
29
+ 4. 最终结果显示结论与必要证据,长过程折叠;文件按需提供。
30
+ 5. 观察外部会话沿用相同的信息结构,但保持只读语义。新增输入应明确排队或接管,不因展示重构而暗改。
31
+
32
+ 本轮已落地“单条进度卡 → 停止操作 → 完成后折叠摘要”,覆盖 Telegram 的 Codex / AGY / DSH 统一任务路径。草稿使用同一个编号刷新,运行期间保持更新;完成或停止后清除草稿并发送持久结果。停止事件验证允许的私聊、主题和当前草稿;群聊停止回调还验证用户与具体任务编号。旧按钮与旧草稿不会停止后来启动的任务。
33
+
34
+ 暂未接入定向临时设置面板和禁用按钮,存量外部会话观察展示也未统一。原生 API 能力有自动化模拟验证,手机上的实际交互效果需要上线后由用户验收。
35
+
36
+ ## 微信进入实用阶段的条件
37
+
38
+ 微信无法原地编辑进度卡,建议采用“开始提示 → 必要里程碑 → 最终摘要”。合并重复工具消息,不逐段推送生成文本;失败、审批和需要用户介入时即时提示。
39
+
40
+ 已接受使用文字菜单和命令。本轮增加有会话归属、有效期和单次使用约束的 `/choose` 操作。统一观察摘要、历史整理和完整多后端接入保留为后续工作,不先扩大微信使用范围。
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@foxden-app/foxclaw",
3
- "version": "0.11.1",
4
- "description": "Foxden local execution claw for controlling Codex, OpenCode, and Antigravity from trusted chat interfaces.",
3
+ "version": "0.13.0",
4
+ "description": "Foxden local execution claw for controlling Codex, OpenCode, Antigravity, and DeepSeek Harness from trusted chat interfaces.",
5
5
  "type": "module",
6
6
  "main": "dist/main.js",
7
7
  "bin": {
@@ -35,7 +35,7 @@
35
35
  },
36
36
  "scripts": {
37
37
  "clean": "node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"",
38
- "build": "npm run clean && tsc -p tsconfig.build.json",
38
+ "build": "pnpm clean && tsc -p tsconfig.build.json",
39
39
  "dev": "tsx src/main.ts serve",
40
40
  "serve": "node dist/main.js serve",
41
41
  "start-service": "node dist/main.js start",
@@ -52,9 +52,10 @@
52
52
  "typecheck": "tsc --noEmit",
53
53
  "lint": "eslint .",
54
54
  "test": "node --test --import tsx $(find src -name '*.test.ts' -print)",
55
- "prepack": "npm run build"
55
+ "prepack": "pnpm build"
56
56
  },
57
57
  "dependencies": {
58
+ "@agentclientprotocol/sdk": "1.4.0",
58
59
  "@opencode-ai/sdk": "1.18.15",
59
60
  "dotenv": "^16.6.1",
60
61
  "qrcode-terminal": "^0.12.0"
@@ -66,5 +67,6 @@
66
67
  "tsx": "^4.19.3",
67
68
  "typescript": "5.9.3",
68
69
  "typescript-eslint": "^8.58.0"
69
- }
70
+ },
71
+ "packageManager": "pnpm@10.33.2"
70
72
  }