farming-code 2.2.7 → 2.2.11
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.
- package/README.md +110 -199
- package/README.zh_cn.md +106 -237
- package/THIRD_PARTY_NOTICES.md +11 -2
- package/backend/acp-checkpoint-store.js +198 -0
- package/backend/acp-runtime.js +306 -83
- package/backend/acp-session-state.js +202 -6
- package/backend/acp-transcript.js +112 -0
- package/backend/agent-activity.js +6 -157
- package/backend/agent-manager.js +1496 -737
- package/backend/agent-provider-session.js +17 -242
- package/backend/agent-runtime-binding.js +219 -0
- package/backend/agent-session-history.js +66 -1
- package/backend/auth.js +79 -6
- package/backend/codex-models.js +81 -84
- package/backend/codex-session-archive.js +45 -0
- package/backend/codex-terminal-profile.js +500 -0
- package/backend/codex-transcript-sanitizer.js +12 -0
- package/backend/codex-transcript.js +230 -8
- package/backend/config-manager.js +30 -0
- package/backend/control-api.js +192 -17
- package/backend/farming-net-pass.js +285 -0
- package/backend/farming-net-registry.js +112 -0
- package/backend/farming-net-server.js +298 -0
- package/backend/farming-session-store.js +5 -13
- package/backend/git-worktree-info.js +181 -0
- package/backend/local-session-engine.js +411 -186
- package/backend/main-page-session.js +5 -2
- package/backend/native-pty-controller-generation.js +106 -0
- package/backend/native-pty-host-client.js +275 -7
- package/backend/native-pty-host-identity.js +86 -0
- package/backend/native-pty-host.js +813 -114
- package/backend/native-session-engine.js +100 -28
- package/backend/packaged-node-pty.js +22 -2
- package/backend/provider-adapters.js +253 -0
- package/backend/provider-session-service.js +241 -0
- package/backend/runtime-observation.js +81 -0
- package/backend/server.js +294 -86
- package/backend/session-engine-bridge.js +21 -2
- package/backend/session-engine-router.js +1 -1
- package/backend/session-engine.js +1 -1
- package/backend/session-stream-protocol.js +185 -0
- package/backend/storage-layout.js +55 -0
- package/backend/terminal-attach-checkpoint.js +74 -0
- package/backend/terminal-exit-quiescence.js +39 -0
- package/backend/terminal-reducer-flow-control.js +97 -0
- package/backend/terminal-screen-state.js +11 -2
- package/backend/terminal-screen-worker-pool.js +59 -6
- package/backend/terminal-screen-worker-thread.js +97 -57
- package/backend/terminal-screen-worker.js +133 -51
- package/backend/terminal-state-serialization.js +127 -0
- package/backend/terminal-status.js +23 -4
- package/backend/usage-monitor.js +81 -4
- package/backend/workspace-directory.js +152 -0
- package/backend/workspace-file-router.js +182 -76
- package/backend/workspace-file-service.js +319 -4
- package/backend/workspace-root-registry.js +164 -0
- package/dist/assets/App-CHYpgECZ.js +208 -0
- package/dist/assets/{FileEditorMarkdownPreview-elKWc8Im.js → FileEditorMarkdownPreview--Cri80nQ.js} +92 -92
- package/dist/assets/FileEditorPane-DGJlEKdf.js +2 -0
- package/dist/assets/IconGlyphs-Cc14sepw.js +1 -0
- package/dist/assets/ProjectFilesSection-Cz1wG4NT.js +12 -0
- package/dist/assets/{ReviewPage-BaXu1ZdX.js → ReviewPage-LonRc6Fz.js} +1 -1
- package/dist/assets/code-dark-B1pAtO_P.css +1 -0
- package/dist/assets/file-icons-Bw2qd5iT.js +1 -0
- package/dist/assets/{index-B8SHldPE.js → index-miO2r9IZ.js} +3 -3
- package/dist/assets/main-DNe0jPw-.css +1 -0
- package/dist/assets/workspace-editor-model-BQol4qbA.js +1 -0
- package/dist/assets/workspace-editor-monaco-5gFbeDPF.js +1 -0
- package/dist/assets/workspace-editor-monaco-xPv8JzHH.js +4 -0
- package/dist/assets/workspace-view-state-DvYG_9PH.js +7 -0
- package/dist/assets/workspace-working-copy-D8-s_Sgh.js +1 -0
- package/dist/index.html +1 -1
- package/frontend/farming-net/app.css +625 -0
- package/frontend/farming-net/app.js +268 -0
- package/frontend/farming-net/index.html +86 -0
- package/frontend/reading-anchor.js +198 -0
- package/frontend/session-bridge.js +12 -3
- package/frontend/session-modal-bridge.js +5 -12
- package/frontend/skins/crt/app.js +1976 -793
- package/frontend/skins/crt/index.html +313 -23
- package/frontend/skins/crt/styles/billing.css +294 -223
- package/frontend/skins/crt/styles/monochrome-green.css +7 -2
- package/frontend/terminal-replay.js +372 -0
- package/package.json +10 -3
- package/shared/browser-protocol.d.ts +5 -0
- package/shared/browser-protocol.js +130 -0
- package/dist/assets/App-iA2BU9P6.js +0 -124
- package/dist/assets/FileEditorPane-RWiFD2cq.js +0 -5
- package/dist/assets/IconGlyphs-DfL0EBnj.js +0 -1
- package/dist/assets/ProjectFilesSection-Q4PDsWmM.js +0 -12
- package/dist/assets/code-dark-CDkOQAtK.css +0 -1
- package/dist/assets/file-icons-EFUGSSwf.js +0 -1
- package/dist/assets/main-DpYuBonn.css +0 -1
- package/dist/assets/qoder-C9LmmOSf.svg +0 -1
- package/dist/assets/qoder-Cf9gl0Y5.svg +0 -1
- package/dist/assets/qoder-gHCinseV.svg +0 -1
- package/dist/assets/workspace-view-state-CTyDzk2D.js +0 -1
- package/dist/assets/zsh-CLpveKlF.svg +0 -1
- package/dist/assets/zsh-FxSpMPbz.svg +0 -1
- /package/dist/assets/{api-D1lyBYIQ.js → api-D8nyOEbz.js} +0 -0
- /package/dist/assets/{core-ZlAPicox.js → core-D0LFJkDt.js} +0 -0
- /package/dist/assets/{useWorkspaceMenuKeyboard-CneKAZUJ.js → useWorkspaceMenuKeyboard-Brws6Ar9.js} +0 -0
package/README.zh_cn.md
CHANGED
|
@@ -9,321 +9,190 @@
|
|
|
9
9
|

|
|
10
10
|

|
|
11
11
|
|
|
12
|
-
Farming
|
|
12
|
+
Farming 是一个开源、可自定义、运行在开发机上的浏览器 AI Coding Agent 工作台。它把多个实时 Agent、结构化对话、真实终端、项目文件、Review、历史记录和运行时控制放在一起,同时代码仓库和 Agent 进程仍然留在开发机上。
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
远程托管和多端浏览器接入是 Farming 的内核能力:agent、shell、项目文件和 git 状态都留在远程机器上持续运行;用户可以从电脑端浏览器做长时间操作,也可以从手机浏览器随时回到现场,看进度、切 session,或者做一次轻量介入。Farming 2 把这套能力组织成一个面向 Codex / Claude Code 的浏览器工作台,当前默认 UI 皮肤叫 Farming Code。
|
|
17
|
-
|
|
18
|
-
浏览器现在通过同一个后端提供两套实时 UI:`/farming/code/` 是 Farming Code,`/farming/crt/` 是原始 CRT 界面;`/farming/` 仍默认打开 Farming Code。当 Code 无法启动或渲染时,故障页面会在错误详情浮层后显示仍连接当前 Agent 的 CRT 界面,不会重启正在运行的 Agent。
|
|
19
|
-
|
|
20
|
-
产品介绍、截图和架构图见 [Farming 2 Wiki](https://github.com/zhuwenzhuang/farming/wiki)。
|
|
21
|
-
|
|
22
|
-

|
|
23
|
-
|
|
24
|
-
> 如果你是参与本仓库开发的 AI Agent,请先阅读 [`AGENTS.md`](./AGENTS.md),中文版本见 [`AGENTS.zh_cn.md`](./AGENTS.zh_cn.md)。
|
|
25
|
-
|
|
26
|
-
## 当前价值与长期目标
|
|
27
|
-
|
|
28
|
-
当前阶段,Farming 做的是一件很实在的事:把指挥 AI coding agent 时最常打开的工具能力放到一起。用户可以在同一个远程工作台里看 live terminal、恢复 Codex / Claude session、检查文件、搜索代码、做小修改、看 blame、看 usage 和 CPU/MEM 状态。它不是完整 IDE,也不是新的 agent 模型;它先把“观察现场”和“轻量介入”这两个高频动作变短。
|
|
29
|
-
|
|
30
|
-
远程托管是这里的关键价值。长任务可以继续跑在 Linux 开发机上,浏览器只是进入现场的入口;电脑端适合编辑、搜索、审查和长时间跟进,手机端适合离开电脑后查看状态、确认输出、发一句输入或启动一个简单 agent。这样用户不用把本地机器、远程 shell、agent session 和项目文件拆成几套上下文来回维护。
|
|
31
|
-
|
|
32
|
-
更长期的目标仍然是人的注意力管理。人类注意力有限,也没有真正的多线程处理能力;当多个 agent 同时工作时,真正消耗人的不是某一个终端,而是在不同页面、不同任务状态和不同上下文之间反复切换。
|
|
33
|
-
|
|
34
|
-
Farming 未来希望探索的是:让系统逐步判断哪些 agent 值得关注,哪些任务只是后台推进,哪些变化需要汇报,哪些地方需要人介入。Main Agent 是这个方向上的长期机制:它最终应该结合 Codex、Claude Code、shell agent 和更多工具型 agent,观察任务状态、组织子 agent、汇总进展,并减少人的上下文切换。
|
|
35
|
-
|
|
36
|
-
这部分仍在探索中,是 Farming 的终极目标;Farming 2 先把工具整合和远程工作台体验做好,作为后续 Main Agent 和多 agent 注意力管理能力的基础。
|
|
37
|
-
|
|
38
|
-
## Farming 2 带来的变化
|
|
39
|
-
|
|
40
|
-
Farming 2 是本仓库最近最大的一次产品变化。它把 Farming 从一个较轻的复古 agent monitor,推进成了更实用的远程 coding workbench,也为长期的 Main Agent 注意力管理目标补齐底座:
|
|
41
|
-
|
|
42
|
-
- 在浏览器里启动和管理 Codex、Claude、OpenCode、Qoder、bash 和 zsh session;
|
|
43
|
-
- 发现并恢复 Codex、Claude、OpenCode 和 Qoder 的本地历史 session,再重新接入 Farming 托管的实时 terminal;
|
|
44
|
-
- Codex / Claude 启动选项按 provider 收敛,不展示当前 agent 无法表达的控件;
|
|
45
|
-
- 在一个工作区里组织 project-scoped agents、pinned/unread sessions、Search、History 和 active terminals;
|
|
46
|
-
- 提供 Project Files:Open Editors、文件树、文件搜索、Monaco 编辑、Markdown/图片预览、git changes、git diff、行级 git blame;
|
|
47
|
-
- terminal 输出里的 `path:line` 可直接打开文件,`http(s)` URL 可直接在新标签页打开;
|
|
48
|
-
- Codex / Claude Composer 暴露底层运行时能表达的启动权限、模型和速度 profile;App Server Codex 会直接更新当前 thread 的权限,terminal-owned session 切换权限时才重启 CLI:已有 provider Session ID 时 resume,还没有可 resume 的 ID 时启动新会话;
|
|
49
|
-
- Composer 支持文本附件;粘贴或选择图片时会保存到 Farming 服务侧 `~/.farming/attachments`,并把图片路径插入消息,便于远端 Codex / Claude 读取;Farming 自动生成的图片附件默认保留 7 天后清理;
|
|
50
|
-
- 显示轻量 usage、context、token rate、quota 与机器状态,例如 CPU、MEM;
|
|
51
|
-
- 复用 Farming 的远程托管和多端浏览器接入能力,让桌面和手机访问同一套远程 Linux 服务。
|
|
52
|
-
|
|
53
|
-
具体截图、安装方式和产品说明见 [Farming 2 产品介绍](./docs/products/code/README.zh_cn.md)。
|
|
14
|
+
在 Coding CLI 已经能正常工作的开发机上运行 Farming,就可以从电脑或手机回到同一批任务。关闭浏览器不会停止 Agent;Farming Server 重启时,独立的原生 PTY Host 也可以保留正在运行的终端会话。
|
|
54
15
|
|
|
55
16
|
## 快速开始
|
|
56
17
|
|
|
57
|
-
|
|
18
|
+
准备好 Node.js 22 或更新版本,以及至少一个已安装、已登录的受支持 Coding CLI,然后用一行命令安装并启动 Farming:
|
|
58
19
|
|
|
59
20
|
```bash
|
|
60
|
-
npm install --global farming-code
|
|
61
|
-
farming daemon
|
|
21
|
+
npm install --global farming-code@latest && farming daemon
|
|
62
22
|
```
|
|
63
23
|
|
|
64
|
-
|
|
24
|
+
打开命令输出的带鉴权 URL,选择 **New Agent**、Agent 类型和 Workspace,然后从 Chat 或 Terminal 开始工作。
|
|
65
25
|
|
|
66
|
-
|
|
67
|
-
http://linux-host:6694/farming?token=<startup-token>
|
|
68
|
-
```
|
|
26
|
+

|
|
69
27
|
|
|
70
|
-
|
|
28
|
+
## 两套界面,同一套运行时
|
|
71
29
|
|
|
72
|
-
|
|
30
|
+
Farming 2 在同一批 Agent 和 Session 上提供两套完整的浏览器界面。
|
|
73
31
|
|
|
74
|
-
|
|
32
|
+
### Farming Code
|
|
75
33
|
|
|
76
|
-
|
|
34
|
+
默认工作台,适合阅读对话、介入任务、编辑文件和检查工作区修改。
|
|
77
35
|
|
|
78
|
-
|
|
79
|
-
| --- | --- | --- |
|
|
80
|
-
| macOS 与 Linux | `npm install --global farming-code` | 默认路径,需要 Node.js 22+,并且系统 runtime 能加载 `node-pty`。 |
|
|
81
|
-
| 不使用 npm 的环境 | GitHub Releases 平台 CLI | 手动安装,升级也需要手动替换。 |
|
|
82
|
-
| 目录部署 | `farming-<version>-<platform>-<arch>.tar.gz` | 包含 production dependencies 和 launcher 脚本的 App Bundle,直接使用目标系统 runtime。 |
|
|
83
|
-
| 老 Linux x64(glibc < 2.28) | `farming-<version>-linux-x64-legacy-glibc228.tar.gz` | 带固定 glibc 2.28 runtime 的首次安装引导包。它把 Farming 安装到 `~/.farming/npm`;后续与普通 npm 安装一样一键更新。目标机仍需 Node.js 22 和 npm。 |
|
|
84
|
-
| 自建老 Linux 包 | `farming-<version>-linux-x64-glibc217.tar.gz` | 独立构建的兼容包;基于 glibc 2.17 重新编译 `node-pty`,但仍要求目标机有可用的 Node.js runtime。 |
|
|
36
|
+

|
|
85
37
|
|
|
86
|
-
|
|
38
|
+
### Farming CRT
|
|
87
39
|
|
|
88
|
-
|
|
40
|
+
键盘优先的控制室,适合同时观察多个 Agent、打开结构化 Chat 或原生 Terminal、搜索历史和查看实时用量遥测。
|
|
89
41
|
|
|
90
|
-
|
|
91
|
-
浏览器皮肤
|
|
92
|
-
React + Vite + Monaco + terminal renderer
|
|
93
|
-
|
|
|
94
|
-
| HTTP / WebSocket
|
|
95
|
-
v
|
|
96
|
-
Farming 内核
|
|
97
|
-
Express server + token auth + agent manager + session providers
|
|
98
|
-
|
|
|
99
|
-
| native pty host + session engine
|
|
100
|
-
v
|
|
101
|
-
执行环境
|
|
102
|
-
bash / zsh / Codex / Claude Code
|
|
103
|
-
```
|
|
42
|
+

|
|
104
43
|
|
|
105
|
-
|
|
44
|
+
| | Farming Code | Farming CRT |
|
|
45
|
+
| --- | --- | --- |
|
|
46
|
+
| 更适合 | 长对话、文件、编辑、Diff、Review | 总览监控、键盘控制、终端操作、遥测 |
|
|
47
|
+
| 实时 Session | 结构化 Chat 与真实 PTY Terminal | 磷光风格 Chat 与真实 xterm Terminal |
|
|
48
|
+
| 导航方式 | 项目侧栏、Search、History、Files | 稳定 Agent 机位和键盘控制台 |
|
|
49
|
+
| 外观 | 浅色与深色 | CRT 效果、终端字号、可选 Dynamic Heat |
|
|
50
|
+
| 入口 | `/farming/code/` 或 `/farming/` | `/farming/crt/` |
|
|
106
51
|
|
|
107
|
-
|
|
52
|
+
切换界面不会重启或复制 Agent。如果 Farming Code 启动或渲染失败,有限范围的诊断层仍会保留后面的实时 CRT 界面,而不是把正在运行的 Session 一起遮掉。
|
|
108
53
|
|
|
109
|
-
|
|
54
|
+
完整能力矩阵和截图导览见 [Farming 2 产品总览](./docs/products/README.zh_cn.md)。两套界面的完整流程分别见 [Farming Code 指南](./docs/products/code/README.zh_cn.md) 和 [Farming CRT 指南](./docs/products/crt/README.zh_cn.md)。
|
|
110
55
|
|
|
111
|
-
Farming
|
|
56
|
+
## Farming Net:部署门户
|
|
112
57
|
|
|
113
|
-
|
|
58
|
+
Farming Net 是一套独立、带 Token 鉴权的 Farming 环境目录。卡片可以指向当前设备、远程开发机、内网地址或隧道中的 Farming;已登记的目标接受短时签名通行证,让用户只保留一个门户登录,不再分别记录每个部署地址和目标 Token。
|
|
114
59
|
|
|
115
60
|
```bash
|
|
116
|
-
npm
|
|
117
|
-
farming daemon
|
|
61
|
+
FARMING_NET_PORT=6693 FARMING_NET_BASE_PATH=/farming-net npm run start:net
|
|
118
62
|
```
|
|
119
63
|
|
|
120
|
-
|
|
64
|
+
门户自己的 Token、签名身份和私有 `instances.json` 注册表放在 `~/.farming-net/`。它不代理目标流量,也不保存目标 Token;每个目标仍是独立 Farming 服务,并且主动决定是否信任门户。登记方式和安全边界见 [Farming Net 指南](./docs/products/net/README.zh_cn.md)。
|
|
121
65
|
|
|
122
|
-
|
|
66
|
+
## 现在可以做什么
|
|
123
67
|
|
|
124
|
-
-
|
|
125
|
-
-
|
|
68
|
+
- 按项目组织实时 Agent,置顶或重命名重点工作、查看未读状态、搜索实时与历史 Session,并归档或恢复任务。
|
|
69
|
+
- Codex、Claude Code、OpenCode 和 Qoder 使用结构化 ACP Chat。计划、推理、工具调用、权限请求、内嵌终端、子 Session、附件、排队追问和精确修改摘要都可以保留,但不会淹没最终答案。
|
|
70
|
+
- 在结构化 Chat 与真实 PTY Terminal 之间切换同一个 Provider Session。支持的 Codex 模型、思考强度、Fast、Ultra 和权限修改会作用到实时工作流;兼容 Terminal 会立即应用模型修改,并在接受下一条 Composer 消息前确认 CLI 的真实状态。
|
|
71
|
+
- 浏览、搜索并轻量编辑 Project Files,通过复用 VS Code 图算法的 Git History 查看提交树与变更文件,检查 Git Changes、Diff 和 Blame,再把 Commit 或 Working Copy 修改送入带 Revision、行内评论和 Reviewed 状态的 Review。
|
|
72
|
+
- 在 Provider 提供所需数据时查看 CPU/MEM、Token Rate、Context、Quota、Provider 用量,以及 CRT 的按日/实时 Token 遥测。
|
|
73
|
+
- 从电脑或手机继续同一个 Farming Code 任务,Agent 进程始终留在开发机上。
|
|
126
74
|
|
|
127
|
-
|
|
75
|
+

|
|
128
76
|
|
|
129
|
-
|
|
77
|
+

|
|
130
78
|
|
|
131
|
-
|
|
79
|
+
## 支持的 Agent 路径
|
|
132
80
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
```bash
|
|
136
|
-
npm install
|
|
137
|
-
npm run release:cli
|
|
138
|
-
```
|
|
81
|
+
Farming 会发现开发机上已经安装的 CLI。有 ACP 支持的 Provider 使用更完整的结构化运行时,其他检测到的 Coding Agent 仍然可以作为一等 Terminal Session 使用。
|
|
139
82
|
|
|
140
|
-
|
|
83
|
+
| Agent | 结构化 Chat | 原生 Terminal | History / Resume |
|
|
84
|
+
| --- | --- | --- | --- |
|
|
85
|
+
| Codex | ACP | 是 | 是 |
|
|
86
|
+
| Claude Code | ACP | 是 | 是 |
|
|
87
|
+
| OpenCode | ACP | 是 | 是 |
|
|
88
|
+
| Qoder | ACP | 是 | 是 |
|
|
89
|
+
| Qwen Code | — | 是 | 取决于 CLI |
|
|
90
|
+
| Aider | — | 是 | 取决于 CLI |
|
|
91
|
+
| GitHub Copilot CLI | — | 是 | 取决于 CLI |
|
|
92
|
+
| Amazon Q | — | 是 | 取决于 CLI |
|
|
93
|
+
| bash / zsh | — | 是 | 没有 Provider Session Resume |
|
|
141
94
|
|
|
142
|
-
|
|
143
|
-
npm install
|
|
144
|
-
npm run release:app
|
|
145
|
-
```
|
|
95
|
+
Farming 承载的是已经能在同一台机器正常工作的 CLI,不替代 Provider 的安装、登录和账户配置。
|
|
146
96
|
|
|
147
|
-
|
|
97
|
+
## 运行默认值与 Daemon 命令
|
|
148
98
|
|
|
149
|
-
|
|
99
|
+
默认端口是 `6694`,Base Path 是 `/farming`,配置目录是 `~/.farming`,Token 鉴权默认开启。启动日志会打印类似下面的 URL:
|
|
150
100
|
|
|
151
|
-
```
|
|
152
|
-
|
|
153
|
-
```
|
|
154
|
-
|
|
155
|
-
它会生成 `farming-<version>-linux-x64-legacy-glibc228.tar.gz`。这是首次安装引导包:安装器把 runtime 解压到 `~/.farming/glibc228`,把包内 Farming 版本放入私有 prefix `~/.farming/npm`,并生成稳定入口 `~/.farming/bin/farming`。后续普通版本更新直接通过 npm 安装到同一 prefix,再用兼容 launcher 重启;不需要反复下载兼容 tar。
|
|
156
|
-
|
|
157
|
-
如果只需要将 `node-pty` 编译到更低 ABI,仍可在干净的 Linux x64 构建环境中准备 glibc 2.17、Node.js 22+、GCC/G++、Make 和 Python 3,然后运行:
|
|
158
|
-
|
|
159
|
-
```bash
|
|
160
|
-
npm run release:app:linux-compat
|
|
101
|
+
```text
|
|
102
|
+
http://development-host:6694/farming?token=<startup-token>
|
|
161
103
|
```
|
|
162
104
|
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
如果已经在配置好的 Linux x64 构建机上准备了干净源码,`scripts/build-linux-compat-release-on-builder.sh` 可以继续自动完成容器构建、ABI 校验、打包后 bash Agent 冒烟和产物输出。通过 `FARMING_COMPAT_IMAGE` 指定构建机上已经存在的镜像。脚本使用 `--pull=never`,并默认关闭容器网络,以复用已有镜像和缓存,避免发布时隐式下载构建环境;只有确实需要主动刷新缓存时才设置 `FARMING_COMPAT_ALLOW_NETWORK=1`。
|
|
166
|
-
|
|
167
|
-
### 启动单文件 CLI
|
|
168
|
-
|
|
169
|
-
拿到对应平台的单文件 `farming` 后:
|
|
105
|
+
常用守护进程命令:
|
|
170
106
|
|
|
171
107
|
```bash
|
|
172
|
-
|
|
173
|
-
|
|
108
|
+
farming status
|
|
109
|
+
farming url
|
|
110
|
+
farming logs
|
|
111
|
+
farming stop
|
|
174
112
|
```
|
|
175
113
|
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
### 启动 app bundle
|
|
179
|
-
|
|
180
|
-
普通 Linux 上:
|
|
181
|
-
|
|
182
|
-
```bash
|
|
183
|
-
tar -xzf farming-<version>-linux-x64.tar.gz
|
|
184
|
-
cd farming-<version>-linux-x64
|
|
185
|
-
./farming
|
|
186
|
-
```
|
|
114
|
+
第一次带鉴权启动会把随机、可读的 Token 写入 `~/.farming/.session-token`;后续重启和升级都会复用,除非显式设置 `FARMING_TOKEN`。Token 默认根据时区使用中文、日文或英文。
|
|
187
115
|
|
|
188
|
-
|
|
116
|
+

|
|
189
117
|
|
|
190
|
-
|
|
118
|
+
## 桌面与手机
|
|
191
119
|
|
|
192
|
-
|
|
193
|
-
./farming status
|
|
194
|
-
./farming logs
|
|
195
|
-
./farming stop
|
|
196
|
-
./farming start
|
|
197
|
-
./farming url
|
|
198
|
-
```
|
|
120
|
+
桌面端把项目、对话、文件和 Review 放在彼此靠近的位置。移动端一次聚焦一段对话、一个终端或一个文件,并把导航移入抽屉,更适合查看进度和发送短介入。
|
|
199
121
|
|
|
200
|
-
|
|
122
|
+
<p align="center">
|
|
123
|
+
<img src="./docs/products/code/assets/05-mobile-agent-chat.jpg" alt="Farming Code 手机界面" width="320">
|
|
124
|
+
</p>
|
|
201
125
|
|
|
202
|
-
|
|
126
|
+
Farming CRT 当前只作为桌面界面使用。手机请使用 Farming Code;CRT 手机方案目前仍是概念设计,不属于已支持的产品能力。
|
|
203
127
|
|
|
204
|
-
|
|
205
|
-
npm run release:remote
|
|
206
|
-
```
|
|
128
|
+
## 安装与更新
|
|
207
129
|
|
|
208
|
-
|
|
130
|
+
npm 包是默认分发方式。**Settings → Updates** 可以原地升级 npm 安装:Farming 会在当前 Server 仍运行时安装新包,只在安装成功后重启;新 Server 无法启动时会尝试回退。
|
|
209
131
|
|
|
210
|
-
|
|
132
|
+
GitHub Releases 也提供独立 CLI 和目录 Bundle。旧版 Linux x64 可以用 `linux-x64-legacy-glibc228` 完成第一次安装,后续应用更新继续使用同一个私有 npm Prefix。受控环境还可以单独构建 glibc 2.17 ABI Bundle。当前产物和版本说明见 [GitHub Releases](https://github.com/zhuwenzhuang/farming/releases)。
|
|
211
133
|
|
|
212
|
-
|
|
134
|
+
从源码开发:
|
|
213
135
|
|
|
214
136
|
```bash
|
|
215
137
|
npm install
|
|
216
138
|
npm start
|
|
217
139
|
```
|
|
218
140
|
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
```bash
|
|
222
|
-
npm run start:no-auth
|
|
223
|
-
```
|
|
224
|
-
|
|
225
|
-
远程安装和 release 细节见 [`docs/products/code/README.zh_cn.md`](./docs/products/code/README.zh_cn.md)。
|
|
226
|
-
|
|
227
|
-
## 配置
|
|
228
|
-
|
|
229
|
-
运行时配置存储在 `~/.farming/settings.json`。
|
|
230
|
-
Agent session 元数据单独存储在 `~/.farming/sessions/`。Farming 使用稳定的
|
|
231
|
-
`fsess_*` 文件作为自己的 Agent 记录;live `agent-...` id 以及 Codex / Claude
|
|
232
|
-
provider session id 都作为这些记录上的元数据保存。主页面 Projects membership
|
|
233
|
-
存放在 `sessions/index.json`,`mainPageSessionKeys` 只是为兼容 API 暴露出来的投影。
|
|
234
|
-
归档 run/history 存储在 `~/.farming/history/runs.json`,不属于 `settings.json`。
|
|
235
|
-
主题覆盖配置、启动 token、server pid/state/log 文件和 native pty host 日志也都在同一个 config 目录下。
|
|
236
|
-
|
|
237
|
-
主要用户配置项:
|
|
238
|
-
|
|
239
|
-
- `defaultLaunchAgent`:New Agent 默认 provider,目前是 `codex` 或 `claude`;
|
|
240
|
-
- `agentLaunchProfiles.codex`:Codex 的启动权限、模型、reasoning、service tier profile;
|
|
241
|
-
- `agentLaunchProfiles.claude`:Claude 的启动 permission、model、effort profile;
|
|
242
|
-
- `agentHomes`:管理 Codex、Claude、OpenCode、Qoder 的 agent home 元数据,每项只包含 `id` 和 `path`;每个 provider 都保留不可删除的 `default` home;
|
|
243
|
-
- `workspaceHistory`:New Agent 启动时使用的最近 workspace;
|
|
244
|
-
- `dangerouslySkipAgentPermissionsByDefault`:是否默认让支持的 coding agent(如 Codex、Claude、OpenCode、Qoder、Qwen、Aider、GitHub Copilot CLI、Amazon Q)使用各自最激进的权限绕过启动 flag。
|
|
245
|
-
|
|
246
|
-
Native terminal session 由 Farming pty host 托管,通过从 `configDir` 派生的本地 socket 连接。默认保留 host 以支持 server 重启恢复;最后一个 live session 和 client 都消失后,host 会在短暂空闲宽限期后自退出。后续 terminal runtime 工作应面向 native pty host 和 xterm.js 链路。
|
|
247
|
-
|
|
248
|
-
更新行为跟随安装方式:普通 npm 安装和通过 `-legacy-glibc228.tar.gz` 引导的老 Linux 安装都读取 npm registry,并在 **设置 → 更新** 提供一键升级。更新先安装到原有 npm prefix,旧服务在安装期间继续运行;随后重启,新服务启动失败时回退。源码 checkout 通过 Git 更新,单文件 CLI 手动替换。标准 App bundle 仍作为目录部署路径,可使用保存在 `settings.updateUrl` 中的可信 HTTP(S) 包目录或 manifest URL。
|
|
141
|
+
只有在可信本地开发环境中,才可以用 `npm run start:no-auth` 关闭 Token 鉴权。
|
|
249
142
|
|
|
250
|
-
|
|
143
|
+
## 工作原理
|
|
251
144
|
|
|
252
|
-
|
|
145
|
+
```text
|
|
146
|
+
Farming Code / Farming CRT
|
|
147
|
+
React, Monaco, xterm.js, CRT browser skin
|
|
148
|
+
│ HTTP + WebSocket
|
|
149
|
+
▼
|
|
150
|
+
Farming core
|
|
151
|
+
auth, Agent manager, ACP, history, files, review, usage
|
|
152
|
+
│ native PTY host + session providers
|
|
153
|
+
▼
|
|
154
|
+
Development host
|
|
155
|
+
repositories, shells, Codex, Claude Code, OpenCode, Qoder, ...
|
|
156
|
+
```
|
|
253
157
|
|
|
254
|
-
|
|
255
|
-
- `config/farming.install.env.example`
|
|
158
|
+
后端负责生命周期、鉴权、Session 路由、Workspace 边界、History 和配置。交互式 Terminal 默认由独立的原生 PTY Host 持有,因此浏览器和 Server 可以重新连接,而不需要替换实际进程。xterm.js WebGL 是唯一受支持的产品 Terminal Renderer;Ghostty Web Adapter 只保留为显式调试路径,不作为运行时 Fallback。
|
|
256
159
|
|
|
257
|
-
|
|
160
|
+
运行时设置存放在 `~/.farming/settings.json`。Farming Session 元数据、项目成员索引、归档运行、主题设置、更新状态、日志和启动 Token 使用 `~/.farming/` 下彼此独立的文件。外部 Provider History 仍然只读。
|
|
258
161
|
|
|
259
162
|
## 安全
|
|
260
163
|
|
|
261
|
-
Farming
|
|
262
|
-
|
|
263
|
-
启动 token 会同时保护 HTTP 页面和 WebSocket 连接。它在首次鉴权启动时随机生成,持久保存到 `~/.farming/.session-token`,并在后续重启和升级中复用。生成的新 token 刻意做成比长十六进制串更容易复制的可读口令:中文时区默认生成中文俳句式口令,日本时区默认生成日文俳句式口令,其它时区默认生成英文短语;也可以用 `FARMING_TOKEN_LOCALE=zh|ja|en|auto` 显式指定新 token 的生成语言。
|
|
264
|
-
|
|
265
|
-
`FARMING_DISABLE_AUTH=1` 只应该用于可信本地开发环境。terminal-owned 的 Codex / Claude session 切换权限时会用所选 flag 重启 CLI:已有 provider Session ID 时会 resume,还没有可 resume 的 ID 时启动新会话。App Server Codex 则直接在当前 thread 上更新审批和 sandbox 策略,不启动 CLI。
|
|
266
|
-
|
|
267
|
-
安全上报和部署注意事项见 [SECURITY.md](./SECURITY.md)。
|
|
164
|
+
Farming 会控制目标机器上的真实终端和文件。请只运行在可信开发机和可信网络中,不要在没有 VPN、SSH Tunnel、HTTPS Reverse Proxy 或等价访问控制时直接暴露到公网。
|
|
268
165
|
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
- **Codex 或 Claude Code 无法启动**:先确认同一台机器上对应 CLI 已安装、已登录,并能在普通 shell 中直接运行。
|
|
272
|
-
- **Native PTY 无法启动**:检查目标系统的 Node.js 与打包的 `node-pty` runtime 是否兼容;glibc 低于 2.28 的 Linux x64 请使用 `-legacy-glibc228` 包。
|
|
273
|
-
- **端口占用**:可以传 `--port <port>`;如果没有显式指定端口,默认 daemon 启动会自动上探选择可用端口。
|
|
274
|
-
- **手机访问不了**:使用启动日志里打印的 Network URL,并确认手机能访问目标开发机。
|
|
275
|
-
- **找不到 token URL**:运行 `./farming url`,或查看 `./farming logs`。
|
|
276
|
-
|
|
277
|
-
## 目录结构
|
|
278
|
-
|
|
279
|
-
```text
|
|
280
|
-
farming/
|
|
281
|
-
├── .gitattributes # 源码归档 export-ignore 规则
|
|
282
|
-
├── backend/ # Node.js server、session engine、agent manager、session/history/usage/file/slash-command APIs
|
|
283
|
-
├── src/ # React + Vite 前端;Farming Code 皮肤与交互 helper 位于 src/components/code/
|
|
284
|
-
├── frontend/skins/crt/ # 独立的实时 CRT 入口、应用逻辑与视觉效果
|
|
285
|
-
├── frontend/*.js # 多皮肤共享的 terminal/session 浏览器 bridge
|
|
286
|
-
├── docs/
|
|
287
|
-
│ ├── products/code/ # Farming 2 产品介绍、Farming Code 皮肤截图、安装说明和验收 dogfood 方案
|
|
288
|
-
│ └── products/crt/ # CRT 皮肤 README 和布局说明
|
|
289
|
-
├── config/ # 部署 / 安装配置模板
|
|
290
|
-
├── scripts/ # 部署、release、测试、产品截图和辅助脚本
|
|
291
|
-
├── tests/e2e/ # Playwright 展示与浏览器流程测试
|
|
292
|
-
├── reference/ # 外部项目源码、工具链和调研 walkthrough;不作为 Farming 运行时依赖
|
|
293
|
-
├── pkg.config.cjs # 平台 CLI 应用打包配置(@yao-pkg/pkg + legacy pkg)
|
|
294
|
-
└── bin/farming # 开发态产品 CLI;发布后二进制也叫 farming
|
|
295
|
-
```
|
|
166
|
+
Token 鉴权同时保护 HTTP 和 WebSocket。`FARMING_DISABLE_AUTH=1` 只适合可信本地开发;Workspace 文件 API 会校验所有路径都位于所选项目根目录内。报告和部署说明见 [SECURITY.md](./SECURITY.md)。
|
|
296
167
|
|
|
297
|
-
|
|
168
|
+
## 文档
|
|
298
169
|
|
|
299
|
-
|
|
170
|
+
- [Farming 2 产品总览与能力矩阵](./docs/products/README.zh_cn.md)
|
|
171
|
+
- [Farming Code 指南](./docs/products/code/README.zh_cn.md)
|
|
172
|
+
- [Farming CRT 指南](./docs/products/crt/README.zh_cn.md)
|
|
173
|
+
- [Farming Net 部署门户](./docs/products/net/README.zh_cn.md)
|
|
174
|
+
- [移动端指南](./docs/products/code/mobile-guide.zh_cn.md)
|
|
175
|
+
- [ACP 运行时](./docs/products/code/acp-runtime.zh_cn.md)
|
|
176
|
+
- [Review 基础](./docs/products/code/review-foundation.zh_cn.md)
|
|
177
|
+
- [版本历史](https://github.com/zhuwenzhuang/farming/releases)
|
|
178
|
+
- [贡献者说明](./AGENTS.zh_cn.md)
|
|
300
179
|
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
```bash
|
|
304
|
-
npm run check
|
|
305
|
-
```
|
|
306
|
-
|
|
307
|
-
常用单项命令:
|
|
180
|
+
## 开发检查
|
|
308
181
|
|
|
309
182
|
```bash
|
|
310
183
|
npm test
|
|
311
184
|
npm run typecheck
|
|
312
185
|
npm run lint
|
|
186
|
+
FARMING_BASE_PATH=/farming npm run build
|
|
313
187
|
npm run test:e2e:playwright
|
|
314
188
|
```
|
|
315
189
|
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
## 作者
|
|
190
|
+
产品截图由匿名 Demo Workspace 和真实浏览器流程生成:
|
|
319
191
|
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
## 贡献
|
|
324
|
-
|
|
325
|
-
欢迎提交 issue 和 pull request。开始前请阅读 [CONTRIBUTING.md](./CONTRIBUTING.md);如果改动影响用户可见行为、打包方式或部署方式,请同步更新 README、产品文档和相关验收说明。
|
|
192
|
+
```bash
|
|
193
|
+
npm run docs:product:screenshots
|
|
194
|
+
```
|
|
326
195
|
|
|
327
196
|
## License
|
|
328
197
|
|
|
329
|
-
MIT
|
|
198
|
+
Farming 使用 [MIT License](./LICENSE)。第三方组件声明见 [THIRD_PARTY_NOTICES.md](./THIRD_PARTY_NOTICES.md)。
|
package/THIRD_PARTY_NOTICES.md
CHANGED
|
@@ -15,8 +15,8 @@ preserved in bundled `node_modules` when bundled dependencies are enabled.
|
|
|
15
15
|
| Package | Version | License | Purpose |
|
|
16
16
|
| --- | --- | --- | --- |
|
|
17
17
|
| `@agentclientprotocol/sdk` | 1.2.1 | Apache-2.0 | ACP JSON-RPC client and protocol types |
|
|
18
|
-
| `@agentclientprotocol/codex-acp` | 1.1.
|
|
19
|
-
| `@agentclientprotocol/claude-agent-acp` | 0.
|
|
18
|
+
| `@agentclientprotocol/codex-acp` | 1.1.4 | Apache-2.0 | Codex ACP adapter |
|
|
19
|
+
| `@agentclientprotocol/claude-agent-acp` | 0.59.0 | Apache-2.0 | Claude Code ACP adapter |
|
|
20
20
|
| `@xterm/addon-clipboard` | 0.2.0 | MIT | Browser terminal clipboard integration |
|
|
21
21
|
| `@xterm/addon-fit` | 0.11.0 | MIT | Browser terminal sizing |
|
|
22
22
|
| `@xterm/addon-search` | 0.16.0 | MIT | Browser terminal search |
|
|
@@ -65,6 +65,15 @@ The CRT skin bundles one font file under `frontend/skins/crt/fonts/`:
|
|
|
65
65
|
|
|
66
66
|
The corresponding license texts are stored beside the font files.
|
|
67
67
|
|
|
68
|
+
## Adapted Source Code
|
|
69
|
+
|
|
70
|
+
Farming's Git history swimlane transform and graph-row renderer adapt the
|
|
71
|
+
Visual Studio Code SCM history graph from Microsoft Visual Studio Code commit
|
|
72
|
+
`0217c2f1a0defc7fdbfb4feba74e71e366de6822`. The adapted files retain the
|
|
73
|
+
Microsoft copyright and MIT license header. Visual Studio Code is licensed
|
|
74
|
+
under the MIT License:
|
|
75
|
+
https://github.com/microsoft/vscode/blob/0217c2f1a0defc7fdbfb4feba74e71e366de6822/LICENSE.txt
|
|
76
|
+
|
|
68
77
|
## Bundled Data
|
|
69
78
|
|
|
70
79
|
Farming includes a generated Chinese poetic token word list at
|