# code-automaton 中文文档

规范地址：https://npmcn.com/package/code-automaton/

版本：1\.6\.2
npm 元数据更新时间：2026-11-03T07:51:23.365Z
中文译文更新时间：2026-11-03T08:51:46.615Z
软件包许可：MIT

本文由上游 README 机器翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/code-automaton
原文对照：https://npmcn.com/package/code-automaton/?lang=original
项目主页：https://github.com/National-Automaton/code-automaton#readme
源码仓库：https://github.com/National-Automaton/code-automaton

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：251 kB，30 个文件
- 模块格式：ES Module
- TypeScript 类型：未声明
- Node.js 要求：\>=18
- 运行依赖：2 个
- 首次发布：2026-10-31T02:53:06.069Z
- 最新版本发布：2026-11-03T07:51:22.973Z
- 已发布版本数：20（近 12 个月 20 个）

## 中文简介

代码自动-一个终端代理编码工具与会话召回。

## 安装

```sh
npm install code-automaton
```

也可以使用：`pnpm add code-automaton`、`yarn add code-automaton`、`bun add code-automaton`

## README

# 代码自动机

具有会话召回功能的终端代理编码工具。它与任何 openai兼容的API （DeepSeek默认），具有全屏TUI和 每个终端有多个实时会话。

## 会话

`coda` 在一个终端上保持多个对话同时打开。每一个 会话流独立：从繁忙会话和繁忙会话之间切换 反应不断累积，然后切换回去看它。

`coda` 从一个 **新会话**，光标已经在输入- a中 保存的会话永远不会为您打开。您之前的会话是一个按键 :新闻 **←** (或 `Ctrl+R`)打开拾取器，和 `Esc` 返回到 新会话。选择器有一个文本提示符：

-   **输入消息并按“Enter”** →开始一个全新的会话 消息作为它的第一回合。
-   **类型 `/command` 并按Enter键** →运行该命令(`/help`， `/rename`， )，而不是开始一个会话。中报告了一个未知的命令 Picker， Picker保持开着，你可以修复它。
-   **按Enter键，不输入任何内容** →打开以。突出显示的会话 `↑`/`↓`。
-   **`Ctrl+X`** 删除突出显示的会话； **`Alt+R`** 重命名它。
-   输入并 _不_ 过滤列表-使用 `↑`/`↓` 穿过它。

在选择器中，每个可打印的键都是新会话消息的文本；否 字母是一种快捷方式，所以信息可以以任何字符开头。删除和 Rename是修饰词和弦 `Ctrl+X` 和 `Alt+R`，所以它们不会碰撞 打字。

| 关键 | 行动 |
| --- | --- |
| `Enter` | 发送当前的线路，或者，在转弯中，将其折叠到运行的转弯中 |
| `←` | 空输入：打开拾取器·非空：向左移动光标 |
| `→` / `Home` / `End` | 移动光标 |
| `Ctrl+A` / `Ctrl+E` | 跳到行首/行尾 |
| `Backspace` / `Delete` | 删除光标之前/下面的内容 |
| `Ctrl+W` / `Alt+Backspace` | 删除前一个单词 |
| `Alt+D` | 删除下一个单词 |
| `Ctrl+U` / `Ctrl+K` | 删除到行首/行尾 |
| `Alt+B` / `Alt+F` | 向后/向前移动一个单词 |
| `↑` / `↓` | 滚动文本一行 |
| `PgUp` / `PgDn` | 滚动文本一页 |
| 鼠标滚轮 | 卷轴抄本（每个缺口3行） |
| `End` (滚动) | 跳转回最新的输出 |
| `Ctrl+R` | 打开会话选择器 |
| _类型_ (选择) | `Enter` 开始一个 **新** 会话使用该文本（不过滤列表）。一个 `/command` 而是运行命令 |
| `↑` / `↓` (选择) | 完成会话 |
| `Enter` 没有任何输入 | **开放** 重点环节 |
| `Ctrl+X` (选择) | **删除** 重点环节 |
| `Alt+R` (选择) | **重命名** 重点环节 |
| `Esc` (选择) | 关闭选择器 |
| `Alt+R` | 重命名当前会话（Enter保存，Esc取消） |
| `Ctrl+V` | 附加剪贴板图像(仅限图像的剪贴板；参见 [图片](https://npmcn.com/package/code-automaton/#readme-images)） |
| `Ctrl+T` | 新会话 |
| `Ctrl+X` | 关闭当前会话 |
| `Ctrl+C` | 退出 |
| `/help` | 显示命令和键引用 |
| `/quit` · `/exit` | 退出（与输入相同） `quit` / `exit`;会话被保存) |

会话以JSON格式保存在 `~/.coda/sessions/` (模式 `600`)，并重新装入 下次你开始的时候 `coda`。

打开选择器将重新读取该目录，因此会话开始、重命名或 删除在 **另一个终端** 这里也显示：新会话被添加， 重命名和新消息被拾取，会话在其他地方被删除 消失。在这个终端中仍然运行一个回合的会话被留下 单独来看——它的飞行中输出还没有写入，因此它将遭受重创。

选择器总是按最近更新的先排序，所以两个终端列表 他们可以以相同的顺序看到会话。这是一场尚未结束的会议 已使用的会话不在磁盘上（空会话不会保存），因此它只出现在 启动它的终端，直到它发出第一条消息。

你打开的会话是 **锁** 只要这个终端在上面，所以a 第二终端不能打开同一会话并覆盖您的工作。锁 是咨询-小 `<id>.lock` 文件放在会话旁边，用 心跳, `coda` 运行-并在您切换时释放，关闭 会话，或者退出。默认情况下 `coda` 会不会一直不开会议 另一个终端保存它，并告诉哪个进程保存它；这就是防丢失 默认，因为一个会话的两个写入器会静默地相互覆盖。一个锁 由崩溃的终端所留下的，它自己就失效了（一个死进程） 同一台机器，或者不同机器之间的心跳时间超过30秒) 自动接管。

### 滚动回

长答案和工具输出滚动过可见窗口。 `coda` 使 整个会议记录并滚动浏览

-   **鼠标滚轮** -每个缺口滚动几行文本。
-   **`↑`/`↓`** -一行一行； **`PgUp`/`PgDn`** -一页。
-   **`End`** -返回最新的输出。

页眉显示 `▲ scrolled back N` 当你读历史的时候。滚动是 独立于流：仍在到达的回复继续追加到 的时候，您可以读取之前的输出 模特还在写作。

`coda` 启用终端鼠标报告（SGR）， `1000`+`1006`)，所以 车轮滚动 _它的_ 文字记录-整个会议，而不仅仅是发生了什么 出现在屏幕上。这样做的代价是终端会停止转动自己的轮子 滚动和拖拽选择 `coda` 是开放的;持有 **`Shift`** 而 拖动以选择和复制文本，这是Windows中标准的逃生舱口 终端和大多数其他仿真器。鼠标报告在退出时关闭， 包括 `Ctrl+C` 和 `SIGTERM`。

如果拖动选择对你来说比滚轮更重要，禁用鼠标 完全不同的报告:

```bash
export CODA_MOUSE=off
```

`coda` 然后就不用管鼠标了——终端自带的拖拽选择和滚轮 滚动像往常一样工作-并且文本被滚动 **`↑`/`↓`**， **`PgUp`/`PgDn`**, **`End`** 代替。这是终端发生故障时的修复 不遵守Shift-to-select，或者当Shift-drag选择不可靠时。

`coda` 还重新绘制它的框架，而不是擦除屏幕上的每一个 渲染。每帧有一个全屏擦除，并且有一个流回复 每个数据块——让终端没有东西可以滚动。屏幕清空一次 在启动时;之后每一帧就地覆盖，最后一帧 在退出时留在屏幕上，因此它留在终端自己的回滚中。

### 重命名会话

会话以其第一条消息命名。要重命名它，按 **`Alt+R`** 在聊天视图中-或键入 `/rename` -输入行变成标题 编辑器，预先填充当前标题。打字 `/rename Some title` 重命名 直接写，不需要编辑。在会话选择器中， **`Alt+R`** 重命名的 当前在列表中突出显示的会话。

-   **输入** 节省了。 **Esc** 取消并保留旧标题。
-   `←`/`→`， `Home`/`End`， `Backspace`和往常一样 `Ctrl+A`/`Ctrl+E`/`Ctrl+W` 和 `Alt+B`/`Alt+F`/`Alt+D` 编辑键在编辑时都可以工作。
-   清除标题并按Enter键将其返回到自动标题设置，因此下一个 消息再次命名会话。

新标题立即写入磁盘，并显示在页眉和目录中 选择器。

## 安装

```bash
npm install -g code-automaton
```

包被命名为 `code-automaton`，但它安装的命令是 `coda`：

```bash
coda --version
coda --help
```

您需要一个API密钥。将它导出到shell中，或者放在 `.env` 文件:

```bash
export CODA_API_KEY=sk-...
```

`.env` 是可选的，从当前目录中读取，然后从 项目的根。 `coda` 解析它自己-没有什么 `source` 也没有 `dotenv-cli` 需要的。环境中已经设置的变量总是有效的，所以 导出的密钥优先于 `.env`。

这个 `-g` 事项： `npm install code-automaton` 只链接 `coda` 命令为 `./node_modules/.bin/`，这不在你的 `PATH`。

## 开发

从克隆中，安装依赖并直接从TypeScript运行 源, `tsx` 动态编译，所以没有构建步骤：

```bash
npm install
cp .env.example .env   # then put your CODA_API_KEY in .env
npm run dev
```

通过传递CLI标志 `--`：

```bash
npm run dev -- --help
npm run dev -- --version
```

全局安装的 `coda` 运行 **编译** 输出 `dist/`,这 仅在构建时刷新：

```bash
npm run build
node dist/index.js
```

所以 `npm run dev` 立即反映您的编辑和 `coda` 不-重建 在通过global命令测试更改之前。

## 操纵急转弯

当一个转弯是运行-这与工具调用，可以是一个时间-按压 **输入** 不为以后的文本排队。它把它折成一个弯 消息被附加到对话中，因为完整的历史记录是 在代理循环的每一步都重新发送，模型在下一步看到它， 通常在工具调用之间。在文字记录中显示为 `(mid-turn) …`。

这意味着你可以打断一个长 `bash` 命令或重定向多步骤 不等待任务完成。这是尽最大努力而不是放弃： 如果模型已经形成了最终的答案，引导会在之后到达 它。要完全停止一个回合，关闭会话(`Ctrl+X`)或重新开始 （`Ctrl+T`）.

## 图片

将截图附加到消息中，模型可以对此进行推理：

| 输入 | 它是做什么的 |
| --- | --- |
| **Ctrl + V** | 如果剪贴板包含图像而没有文本，则附加剪贴板图像 |
| `/paste` | 附加剪贴板图像，而不考虑附带的任何文本 |
| `/image <path>` | 附加图像文件(`png`， `jpeg`， `webp`， `gif`;（最大5 MB） |

Ctrl+V仅在剪贴板为纯图像时触发，因此普通文本可以粘贴 仍然到达终点站。剪贴板可以保存图像 _和_ 〇立即发短信 从电子表格或浏览器图像中复制图表及其源URL - 在这种情况下，文本粘贴获胜。使用 `/paste` 当你想要图像的时候。

携带图像的消息被路由到视觉模型；其他的都去了 到文本模型。两者都是单独配置的(参见 [配置](https://npmcn.com/package/code-automaton/#readme-config))，所以 纯文本设置保持工作不变。

附件作为类存储在会话中 `[image: path]` 占位符,而 而不是图像字节：否则1 MB的屏幕截图会放1.4 MB的base64 到每个会话文件中。当会话被重新加载时，文件被重新读取，所以a 移动或删除的图像降级为占位符。

**剪贴板访问仅限wsdl**，因为Windows终端无法传递图像 数据通过标准输入到程序中——从剪贴板中读取 Windows侧通过PowerShell。在macOS/Linux上使用 `/image <path>`。

## 工具

-   `read_file` -读取文件
-   `write_file` -创建/覆盖文件
-   `edit_file` -替换字符串的第一次出现
-   `list_dir` -列出目录
-   `bash` -执行shell命令

## 命令

斜杠命令被输入到输入中，然后用Enter键发送。

| 命令 | 它是做什么的 |
| --- | --- |
| `/help`， `/?` | 将命令和键引用打印到抄本中 |
| `/quit`， `/exit` | 退出 `coda` 保存会话。和打字一样 `quit` / `exit`,或 `Ctrl+C` |
| `/paste` | 附加剪贴板图像(参见 [图片](https://npmcn.com/package/code-automaton/#readme-images)） |
| `/image <path>` | 附加一个映像文件(参见 [图片](https://npmcn.com/package/code-automaton/#readme-images)） |
| `/rename <title>` | 重命名当前会话。如果没有标题，则打开交互式标题编辑器(与 `Alt+R`） |

以…开头的一行 `/` 但是名字没有已知的命令 **不** 送到 模型。而不是 `coda` 报告 `unknown command: …` 在笔录和树叶中 您的文本在输入，以便您可以纠正它(或按 `Esc` 清除它)。这 保持打字错误 `/quti` 从被解释为提示。一个光秃秃的 `/` 在其 Own是豁免的，并作为普通文本发送（例如粘贴的绝对路径）。

## 配置

| Env var | 默认的 |
| --- | --- |
| `CODA_API_KEY` | (必需的；退回到 `DEEPSEEK_API_KEY`， `OPENAI_API_KEY`,然后 `ANTHROPIC_API_KEY`） |
| `CODA_BASE_URL` | `https://api.deepseek.com` (也读 `DEEPSEEK_BASE_URL` / `OPENAI_BASE_URL`） |
| `CODA_MODEL` | `deepseek-chat` (也读 `DEEPSEEK_MODEL` / `OPENAI_MODEL`） |
| `CODA_SESSIONS_DIR` | `~/.coda/sessions` (也读老年人的书 `DSC_SESSIONS_DIR`） |
| `CODA_MOUSE` | `on` -设置为 `off` 将鼠标选择留给终端(请参阅 [滚动回](https://npmcn.com/package/code-automaton/#readme-scrolling-back)） |
| `CODA_VISION_MODEL` | 的价值 `CODA_MODEL` |
| `CODA_VISION_BASE_URL` | 的价值 `CODA_BASE_URL` |
| `CODA_VISION_API_KEY` | 的价值 `CODA_API_KEY` |

这个 `CODA_VISION_*` 变量选择用于包含的消息的模型 的形象。他们回到了他们的文本对应物，但没有视觉的模型 支持将默默地忽略图像而不是错误-所以设置它们 如果附上截图，则明确显示。

如果没有找到API密钥， `coda` 退出，并显示解释该变量的错误 它寻找的名字。

注意： `ANTHROPIC_BASE_URL` 是故意 **不** 阅读。Anthropic-shaped url (如。 `https://api.deepseek.com/anthropic`)不兼容openai，也不会 失败;只有 _关键_ 是从 `ANTHROPIC_API_KEY`，所以和an配对 显式的 `CODA_BASE_URL` 如果你依靠那个退路。

## 释放

版本由CI在版本标签上分级，然后手工批准。 `main` 是 受保护，所以版本碰撞必须通过拉请求着陆-直接 `git push` 来 `main` 被存储库规则拒绝，并且在 碰撞被合并将指向不在分支上的提交。订单 下面让两者保持一致：

```bash
# 1. Bump the version on a branch (npm version also builds dist/).
npm version patch                 # or minor / major — commits 1.4.3 + tags locally
git switch -c chore/release-$(node -p "require('./package.json').version")
git push -u origin chore/release-$(node -p "require('./package.json').version")

# 2. Open a PR and merge it. Do NOT squash: that rewrites the commit the
#    local version tag points at. Use a merge commit or fast-forward.
gh pr create --fill && gh pr merge --merge

# 3. Now push the tag, once its commit is on main.
git switch main && git pull --ff-only
git push origin v$(node -p "require('./package.json').version")
```

CI构建，检查标记是否匹配 `package.json`对藏物进行烟熏测试 运行 `npm stage publish --provenance`． 它还创建了一个GitHub版本。

，然后审批阶段版本 **npm web UI** (账户→分期 包)。这种批准是2FA的存在证明，所以它仍然是手动的 这就是CI令牌不需要2FA绕过的原因。一旦批准，标记放行 最新的:

```bash
gh release edit v1.4.3 --latest   # substitute the version just released
```

这个发布是用 `--latest=false` 因为舞台剧不是 可安装;“Latest”应该遵循npm实际提供的内容。

在决定重用版本号之前，请检查 **版本** 端点, 顶层包文档被缓存，可能会延迟：

```bash
curl -s https://registry.npmjs.org/code-automaton/<version>
```

## 许可证

MIT -见 [许可证](https://npmcn.com/package/code-automaton/LICENSE)。

## 常见问题

### code-automaton 是什么？

代码自动-一个终端代理编码工具与会话召回。

### 如何安装 code-automaton？

在项目目录运行 npm install code-automaton，或使用 pnpm add / yarn add / bun add。它还提供命令行工具 coda，可以用 npx coda 直接运行。

### code-automaton 支持 TypeScript 吗？

该包的 package\.json 没有声明类型入口。需要类型提示时，可以在 npm 上查找社区维护的 @types/code-automaton 是否存在。

### code-automaton 支持 ESM 还是 CommonJS？

以 ES Module 形式发布，推荐使用 import 引入。在 CommonJS 项目中，Node\.js 20\.19\+ / 22\.12\+ 可以直接 require\(\) 不含顶层 await 的 ES Module，更早的版本需要改用动态 import\(\)。

### code-automaton 需要什么版本的 Node\.js？

package\.json 的 engines 字段要求 Node\.js \>=18。版本不符时 npm 默认只给出警告，开启 engine-strict 后会拒绝安装。

### code-automaton 可以商用吗？

code-automaton 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### code-automaton 还在维护吗？

最新版本 1\.6\.2 发布于 2026/11/03（今天）；至今共发布 20 个版本，其中过去 12 个月发布了 20 个；首次发布于 2026/10/31。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

