code-automaton

中文文档
1.6.2发布于 2026/11/03MITES Module构建来源已验证

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

中文使用文档
文档目录12 节
  1. 会话
  2. 滚动回
  3. 重命名会话
  4. 安装
  5. 开发
  6. 操纵急转弯
  7. 图片
  8. 工具
  9. 命令
  10. 配置
  11. 释放
  12. 许可证

代码自动机

具有会话召回功能的终端代理编码工具。它与任何 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附加剪贴板图像(仅限图像的剪贴板;参见 图片)
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。

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

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键将其返回到自动标题设置,因此下一个 消息再次命名会话。

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

安装

npm install -g code-automaton

包被命名为 code-automaton,但它安装的命令是 coda:

coda --version
coda --help

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

export CODA_API_KEY=sk-...

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

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

开发

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

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

通过传递CLI标志 --:

npm run dev -- --help
npm run dev -- --version

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

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 当你想要图像的时候。

携带图像的消息被路由到视觉模型;其他的都去了 到文本模型。两者都是单独配置的(参见 配置),所以 纯文本设置保持工作不变。

附件作为类存储在会话中 [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附加剪贴板图像(参见 图片)
/image <path>附加一个映像文件(参见 图片)
/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_URLhttps://api.deepseek.com (也读 DEEPSEEK_BASE_URL / OPENAI_BASE_URL)
CODA_MODELdeepseek-chat (也读 DEEPSEEK_MODEL / OPENAI_MODEL)
CODA_SESSIONS_DIR~/.coda/sessions (也读老年人的书 DSC_SESSIONS_DIR)
CODA_MOUSEon -设置为 off 将鼠标选择留给终端(请参阅 滚动回)
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 被存储库规则拒绝,并且在 碰撞被合并将指向不在分支上的提交。订单 下面让两者保持一致:

# 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绕过的原因。一旦批准,标记放行 最新的:

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

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

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

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

许可证

MIT -见 许可证。

版本与发布记录

code-automaton 共发布 20 个版本,首次发布于 2026/10/31;过去 12 个月发布了 20 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
1.6.2latest2026/11/03今天
1.6.12026/11/03今天
1.6.02026/11/03今天
1.5.12026/11/03今天
1.5.02026/11/03今天
1.4.42026/11/03今天

关于 code-automaton 的常见问题

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 和提交记录判断。