Releases: andeya/aineer
Aineer v0.7.1
Full Changelog: v0.7.0...v0.7.1
Aineer v0.7.0
Platform & distribution
- Tauri 2 + React + Vite: Desktop app shell with Bun/Biome toolchain, IPC split by domain modules.
- Embedded CLI: Run
aineer-clifrom the app with--cli/-c. - Workspace & branding:
.aineerconfig, crate renames (aineer-protocol,aineer-engine,aineer-cli), Aineer branding; remove legacy GPUI/native UI crates in favor of web UI + Tauri. - Release: Version 0.7.0;
version:patch|minor|majorandversion:setscripts.
Chat, AI & agent (desktop)
- Real streaming:
send_ai_message→ CLIdesktopbridge;ai_stream_deltawithkind: text | thinking. - Agent:
start_agentruns tool loop via desktop path;stop_agent(block_id); error events askind: error. - Concurrency:
spawn_blocking+ unified block IDs; optional cancel flags for streams. - Chat UX: Event listeners, safety timeouts, IPC failure recovery, model/cwd/shell-context passed from UI.
Shell & terminal
- PTY: Session, PTY manager, tray; execute commands with timeout.
- Shell completion (rewritten): Rust-native file/dir completion under project cwd;
$PATHcommand completion; history hints from~/.zsh_history/~/.bash_history;isFirstWordso argument lines don’t mix in commands;CompletionItem+isDir(trailing/vs space); LCP fill in UI; disable OS autocorrect on prompt.
Memory & settings
- Memory: Synchronous API; cross-platform home dir;
forget; Tauri commands without fake async. - Settings: Extended schema/loader; CodeMirror JSON editor (lazy).
- Cache: Scheduled auto-cleanup on startup.
Tooling & quality
- Workspace clippy (
all=warn,unsafe_code=forbid), rustfmt, cargo clippy --all-targets aligned with CI andpackage.jsonscripts.
平台与发布
- Tauri 2 + React + Vite 桌面栈,Bun/Biome,IPC 按领域拆分。
- 内嵌 CLI:应用内通过
--cli/-c调用aineer-cli。 - 工作区与品牌:
.aineer配置、crate 重命名(aineer-protocol、aineer-engine、aineer-cli)、Aineer 品牌;弃用旧 GPUI/原生 UI crate,统一为 Web UI + Tauri。 - 版本:升至 0.7.0;
version:patch|minor|major与version:set脚本。
对话、AI 与 Agent(桌面)
- 真实流式:
send_ai_message→ CLIdesktop桥接;ai_stream_delta支持kind: text | thinking。 - Agent:
start_agent经 desktop 跑工具回路;stop_agent(block_id);错误以kind: error推送。 - 并发:
spawn_blocking+ 统一 block ID;流式/任务可取消。 - 聊天体验:事件监听、安全超时、IPC 失败恢复;前端传 model/cwd/shell 上下文。
Shell 与终端
- PTY:会话、PTY 管理、托盘;带超时的命令执行。
- Shell 补全(重写):Rust 原生 目录/文件(相对项目 cwd)、
$PATH命令、历史(zsh/bash);首词与参数补全分离;目录后缀/与公共前缀填充;输入框关闭系统自动纠正。
记忆与设置
- 记忆:同步 API、跨平台主目录、删除接口;Tauri 侧去掉伪 async。
- 设置:配置 schema/加载器扩展;CodeMirror JSON 编辑器(懒加载)。
- 缓存:启动时定时自动清理。
工程与质量
- 工作区 Clippy、rustfmt、CI 与 package.json 中 clippy/fmt 命令对齐(含
--all-targets)。
Full Changelog: v0.6.9...v0.7.0
Full Changelog: v0.6.9...v0.7.0
Aineer Nightly
Automated nightly build from main branch.
Warning: This is an unstable development build.
Codineer v0.6.9
Codineer v0.6.8
Features
- Runtime fallback to
~/.codineer/— when no.codineer/settings.jsonexists in
the ancestor chain, all runtime artifacts (sessions, agents, todos, sandbox dirs)
automatically fall back to~/.codineer/instead of creating a stray.codineer/
directory in arbitrary locations. (feat(runtime)) MultiEdittool — apply multiple file edits in a single tool call. (feat(tools))AskUserQuestiontool — present structured multiple-choice questions to the user
mid-session. (feat(tools))codineer initfull scaffold — generates the complete.codineer/layout
(plugins/,skills/,agents/,sessions/,settings.json,.gitignore,
CODINEER.md) and silently auto-completes~/.codineer/on every startup.
(feat(init))- Bundled plugins embedded in binary — built-in plugins are compiled in via
include_str!and extracted to~/.codineer/plugins/on launch; no separate
source directory is required in the distributed binary. (feat(plugins))
Bug Fixes
is_initializedfalse-positive on banner — the "run/init" hint was incorrectly
suppressed for any directory under$HOMEbecause~/.codineer/settings.jsonmatched
the ancestor walk. Now onlycwd/.codineer/settings.jsonis checked. (fix(banner))- Windows dead-code warning — the
executablefield ofBundledPluginFiletriggered
a-D dead-codelint on Windows (field is#[cfg(unix)]-only); suppressed with
#[cfg_attr(not(unix), allow(dead_code))]. (fix(plugins))
Refactoring & Internal Improvements
find_project_codineer_dir()helper — shared ancestor-walk logic extracted and
used consistently bycodineer_runtime_dir(),ConfigLoader::discover(), and skill
path resolution.ConfigLoaderuses project root detection — running from a project sub-directory
now correctly picks up the nearest ancestor.codineer/settings.json.sandbox_dirs()helper — eliminates duplicatecodineer_runtime_dir()calls in
sandbox_env()andgenerate_seatbelt_profile()..codineer.jsonflat config removed — only directory-basedsettings.jsonis
supported; the redundant flat config and its error-handling code have been deleted.CODINEER.mdmoved into.codineer/— project memory file now lives at
.codineer/CODINEER.md; the legacy root-level location is still checked for reading..codineer/.gitignorescaffold —initgenerates a nested.gitignoreinside
.codineer/to tracksettings.json,plugins/,skills/, andCODINEER.mdwhile
ignoring runtime artifacts; root-level.gitignorecleaned up accordingly.- Plugin manifest convention simplified — dropped the
.codineer-plugin/
subdirectory;plugin.jsonnow lives at the plugin directory root directly. OnceLockreplaceslazy_static— vim-detection one-time init migrated to
std::sync::OnceLock; externallazy_staticdependency removed.- Sandbox and agent dirs moved under
.codineer/—sandbox-home/,sandbox-tmp/,
andagents/are now stored under.codineer/for a cleaner workspace layout. resolve_skill_pathunified — skill discovery usescodineer_runtime_dir()to
match other runtime artifacts; removed stale~/.agents/skillslegacy path.
Documentation
- Comprehensive plugin development guide added (
crates/plugins/README.md+
Chinese translationREADME_CN.md). CODINEER.mdrewritten with real project context: crate layout, toolchain, coding
conventions, key design decisions, and working agreement.- Plugin discovery table corrected:
.codineer/plugins/is not auto-discovered;
useplugins.externalDirectoriesto register project-local plugins. CODINEER_CONFIG_HOMEdescription corrected (removed stale flat-config references).- Root
README.md/README_CN.mdupdated withCODINEER.mdpurpose and monorepo
support explanation.
新功能
- 运行时目录自动回退
~/.codineer/— 当祖先目录链中不存在.codineer/settings.json时,
所有运行时产物(sessions、agents、todos、sandbox 目录)自动回退到~/.codineer/,
不再在任意目录生成散乱的.codineer/。 MultiEdit工具 — 单次工具调用对多个文件执行批量编辑。AskUserQuestion工具 — 会话中途向用户展示结构化多选问题。codineer init完整脚手架 — 一键生成完整.codineer/目录结构
(plugins/、skills/、agents/、sessions/、settings.json、.gitignore、CODINEER.md),
并在每次启动时静默补全~/.codineer/。- 内置插件嵌入二进制 — 通过
include_str!将内置插件编译进二进制,启动时解压到
~/.codineer/plugins/;发布的二进制无需携带额外插件源目录。
Bug 修复
- 欢迎横幅
is_initialized误判 — 在$HOME下任意子目录运行时,因祖先遍历命中
~/.codineer/settings.json,"运行/init" 提示被错误隐藏;现在仅检测
cwd/.codineer/settings.json。 - Windows 死代码警告 —
BundledPluginFile.executable字段仅在#[cfg(unix)]
中使用,在 Windows 触发-D dead-codelint;已通过cfg_attr屏蔽。
重构与内部改进
find_project_codineer_dir()公共 helper — 提取祖先目录遍历逻辑,供
codineer_runtime_dir()、ConfigLoader::discover()和技能路径解析统一复用。ConfigLoader对齐项目根检测 — 在项目子目录运行时,现在能正确找到最近祖先的
.codineer/settings.json。sandbox_dirs()helper — 消除sandbox_env()与generate_seatbelt_profile()
中重复的codineer_runtime_dir()调用。- 移除
.codineer.json扁平配置 — 仅保留目录式settings.json;冗余的扁平配置
及其错误处理代码已全部删除。 CODINEER.md迁入.codineer/— 项目记忆文件现位于.codineer/CODINEER.md;
根目录旧位置仍可回退读取(向后兼容)。.codineer/.gitignore脚手架 —init在.codineer/内生成独立.gitignore,
追踪settings.json、plugins/、skills/、CODINEER.md,忽略运行时产物;
根目录.gitignore同步清理。- 插件 manifest 规范简化 — 废弃
.codineer-plugin/子目录,plugin.json直接位于插件目录根部。 OnceLock替换lazy_static— vim 检测改用标准库std::sync::OnceLock;
移除外部lazy_static依赖。- sandbox 及 agent 目录迁入
.codineer/—sandbox-home/、sandbox-tmp/、agents/
统一收拢到.codineer/下,工作区更整洁。 resolve_skill_path统一 — 技能发现改用codineer_runtime_dir(),
与其他运行时产物保持一致;移除遗留的~/.agents/skills路径。
文档
- 新增完整插件开发教程(
crates/plugins/README.md+ 中文版README_CN.md)。 CODINEER.md以真实项目信息重写:crate 布局、工具链、编码规范、关键设计决策、工作协议。- 插件发现表格更正:
.codineer/plugins/不被自动发现,需在
plugins.externalDirectories中显式配置。 CODINEER_CONFIG_HOME描述修正(移除对已删除扁平配置的过时说明)。- 根目录
README.md/README_CN.md补充CODINEER.md的用途及 monorepo 支持说明。
Full Changelog: v0.6.7...v0.6.8
Full Changelog: v0.6.7...v0.6.8
Full Changelog: v0.6.7...v0.6.8
Codineer v0.6.7
✨ New Features
-
Multimodal Input (Image Attachments):
-
Attach images via
@image.png, paste from clipboard (Ctrl+V//image), or drag-and-drop into the terminal. -
Supports Anthropic, OpenAI, and other multimodal-capable providers.
-
Added support for Google Gemini with a free API key via the OpenAI-compatible endpoint.
-
Customizable Model Aliases:
-
Define your own short model names in
settings.jsonusing themodelAliasesfield. -
Removed built-in model aliases, giving users full control over model naming.
-
codineer modelsnow displays your configured aliases.
🛠️ Improvements
- Enhanced Error Reporting: API error messages now include the request URL for easier debugging.
- Refined
@-mention Processing: - Support for specifying line numbers or ranges in file attachments (e.g.,
@src/main.rs:10-50). - Binary files are now attached with metadata (size, type) instead of attempting to read their content.
- General Code Refinements: Various internal code improvements and dependency updates for stability and future enhancements.
🐞 Bug Fixes
- Addressed an issue where some model aliases were not correctly resolved internally.
✨ 新功能
-
多模态输入(图片附件):
-
通过
@image.png附加图片、从剪贴板粘贴(Ctrl+V//image)或将文件拖拽到终端。 -
支持 Anthropic、OpenAI 及其他兼容多模态的 Provider。
-
新增支持 Google Gemini,可通过 OpenAI 兼容端点使用免费 API Key。
-
可自定义模型别名:
-
现在可以在
settings.json中使用modelAliases字段定义自己的模型短名。 -
移除了内置模型别名,赋予用户完全的模型命名控制权。
-
codineer models命令现在会显示你配置的别名。
🛠️ 改进
- 增强错误报告: API 错误消息现在包含请求 URL,以便更轻松地进行调试。
- 优化
@提及处理: - 文件附件现在支持指定行号或行范围(例如
@src/main.rs:10-50)。 - 二进制文件现在会附加元数据(大小、类型),而不再尝试读取其内容。
- 通用代码优化: 各种内部代码改进和依赖更新,以提高稳定性和为未来的增强做准备。
🐞 Bug 修复
- 修复了某些模型别名在内部未能正确解析的问题。
Full Changelog: v0.6.6...v0.6.7
Full Changelog: v0.6.6...v0.6.7
Codineer v0.6.6
Support using openclaw-zero-token as a provider.
Full Changelog: v0.6.5...v0.6.6
Codineer v0.6.5
Full Changelog: v0.6.4...v0.6.5
Full Changelog: v0.6.4...v0.6.5
Codineer v0.6.4
Bug Fixes
-
fix(runtime):
build_runtimenow returns the resolved model name alongside the runtime instance, so the banner and status output always display the actual model (e.g.claude-3-5-sonnet) instead of the raw input alias like"auto". -
fix(cli/resume): Global flags
--model,--permission-mode, and--allowed-toolsare now correctly forwarded when combined with--resume; previously they were silently discarded. Additionally,codineer --resume <session>with no trailing slash commands now opens the interactive REPL with the session pre-loaded, instead of falling through to a non-interactive code path.
New Features
-
feat(banner): The startup banner now adapts dynamically to terminal width (minimum 80 cols) and re-renders correctly on window resize. The
--resumecommand in the banner is wrapped across multiple lines using display-width-aware wrapping so it is never truncated regardless of session path length.tilde_session_pathis now exported for use across crates. -
feat(repl/ux): Interactive REPL behaviour aligned with Claude Code:
?inline shortcuts panel — typing?at the start of the prompt instantly shows a shortcuts reference panel below the prompt; any further input hides it.?+ Enter submits?to the AI as normal text.- Double Ctrl+C to exit — first
Ctrl+Con an empty prompt shows an inline "Press Ctrl-C again to exit" hint below the prompt; a secondCtrl+Cwithin 1.5 s exits. Any other key clears the hint. !bash mode — typing! <command>(e.g.! ls -la) sends the shell command to the AI as a run request instead of plain chat input.\+ Enter for newline — pressing Enter with a trailing\inserts a literal newline (same asShift+Enter/Ctrl+J).- Double-tap Esc to clear — two rapid
Escpresses (within 1.5 s) in plain mode clear the current input line. - Session restore —
run_replnow accepts an optionalresume_path; when present the session is activated before the first prompt is drawn. - Goodbye message — on exit the resume command for the finished session is printed so users can easily re-attach later.
Tests
- test: Added 16 new unit tests for the editor covering double Ctrl+C exit,
\+Enter newline, double-Esc clear, Ctrl+D behaviour,?shortcuts panel rendering,InterruptHintaction distinctness, andsubmit_or_togglelogic. CLI tests updated to assert the newresume_pathfield and added an end-to-end test verifying that--model/--permission-modesurvive--resumeparsing. Overall unit test coverage ≥ 95%.
Documentation
- docs: README (EN & CN) interactive REPL keyboard shortcuts table updated to reflect all new shortcuts; prompt character updated from
>to❯.
Chores
- chore: Version bumped to
0.6.4.
问题修复
-
fix(runtime):
build_runtime现在同时返回运行时实例和已解析的 model 名称,Banner 及状态栏将显示实际 model(如claude-3-5-sonnet),而非原始别名(如"auto")。 -
fix(cli/resume): 当
--resume与--model、--permission-mode、--allowed-tools同时使用时,全局 flag 不再被静默丢弃,均可正常生效。此外,codineer --resume <session>若未附带 slash 命令,现在将正确进入交互式 REPL 并预加载历史会话,不再走非交互代码路径。
新功能
-
feat(banner): 启动 Banner 自适应终端宽度(最小 80 列),调整窗口大小后实时重绘。
--resume命令按显示宽度自动换行,无论 session 路径多长均不再截断。tilde_session_path提升为pub(crate)供跨模块使用。 -
feat(repl/ux): 交互式 REPL 体验全面对齐 Claude Code:
?内联快捷键面板 — 在提示符首位输入?即时在提示符下方展示快捷键参考面板;继续输入任意字符自动隐藏;?+ Enter 将?正常发送给 AI。- 双击 Ctrl+C 退出 — 空提示符下首次按
Ctrl+C在提示符下方显示"Press Ctrl-C again to exit"提示;1.5 秒内再次按Ctrl+C退出;按任意其他键自动隐藏提示。 !bash 模式 — 输入! <命令>(如! ls -la)会将 shell 命令作为执行请求发送给 AI,而非普通聊天输入。\+ Enter 换行 — 在行尾输入\后按 Enter 插入换行符(等同于Shift+Enter/Ctrl+J)。- 双击 Esc 清空输入 — 普通模式下 1.5 秒内连按两次
Esc清空当前输入行。 - 会话恢复 —
run_repl现在接受可选resume_path参数,会在首次显示提示符前自动恢复指定会话。 - 退出提示 — 退出时打印当前会话的 resume 命令,方便下次快速续接。
测试
- test: 新增 16 个 editor 单元测试,覆盖双击 Ctrl+C 退出、
\+Enter 换行、双击 Esc 清空、Ctrl+D 行为、?快捷键面板渲染、InterruptHintaction 独立性及submit_or_toggle逻辑。CLI 测试同步更新以适配新增的resume_path字段,并新增端到端测试验证--model/--permission-mode经--resume解析后的正确透传。整体单测覆盖率 ≥ 95%。
文档
- docs: README(英文及中文)交互式 REPL 快捷键表更新,反映所有新快捷键;提示符字符由
>更新为❯。
Full Changelog: v0.6.3...v0.6.4
Full Changelog: v0.6.3...v0.6.4
Codineer v0.6.3
Bug Fixes
API / Provider
-
Strip provider prefix from
modelfield in OpenAI-compat requests
ollama/qwen3-coder→qwen3-coderbefore sending to the upstream API,
preventing model-not-found errors on strict endpoints. -
Accept
reasoning_content/ arraycontentin OpenAI-compat SSE
DashScope and similar providers that returnreasoning_contentor array-typed
contentblocks are now parsed and surfaced correctly. -
Harden OpenAI-compat response handling, model routing & Azure queries
- Tolerate missing / null fields in streamed delta objects.
- Azure: append
api-versionquery param whenapiVersionis set. - Model routing: prefer
defaultModelfrom the provider config when no
explicit model is given.
CLI
-
DashScope stream resilience — auto-retry with a non-streaming request
when the assistant stream produces no content (common with some DashScope
model variants). -
Fix
codineer config setignoringCODINEER_CONFIG_HOME
The command now writes to$CODINEER_CONFIG_HOME/settings.jsoninstead of
the hardcoded~/.codineer/settings.json. -
Fix nested Tokio runtime creation
CliToolExecutornow shares the runtimeArcinstead of spawning a new one
per MCP tool call. -
Fix
pick_best_coding_modelpanic on empty candidate list.
Refactoring
- Modularize oversized source files (net −2 800 lines):
runtime_client.rs(1 387 L) →runtime_client/directory module
(mod / model / stream / messages / permission / tool_executor / tests)main.rs(1 697 L) →main.rs+bootstrap.rs+main_tests.rslive_cli.rs(1 095 L) →live_cli.rs+lsp_detect.rs+turn_helpers.rsopenai_compat.rs(1 140 L) →openai_compat.rs+openai_compat_sse.rsopenai_compat_stream.rs
UX Improvements
-
@//suggestion navigation — Up / Down no longer resets the
selected item on every keystroke. -
"Thinking…" indicator position — fixed raw-mode line-ending (
\r\n) so
the spinner always starts at column 0 on a new line. -
Trailing space after completion — pressing Enter on a
@or/
suggestion appends a space so the next typed word is cleanly separated. -
@pathmention handling —@pathtokens are stripped from the text
sent to the AI; file / directory content is injected as structured XML
blocks (<attached_file>,<attached_directory>,<not_found>). -
OS-appropriate config paths in
--help— Windows shows
%USERPROFILE%\.codineer\…with backslashes; Unix / macOS shows
~/.codineer/…. -
Claude-style REPL welcome banner — richer context panel on startup.
Documentation
-
Added
Actual pathcolumn to the settings-files table in bothREADME.md
andREADME_CN.mdto make clear that.codineer.jsonlives in the project
root (not inside.codineer/). -
Clarified that directory-based and flat config files per scope are not
duplicates: directory form wins when both exist;codineer config set
always writes the directory form. -
Documented
mcpServersmerge semantics: same-name server from a later file
replaces (does not deep-merge) the earlier definition. -
Updated
CODINEER_CONFIG_HOMEdescription to note the flat config relocates
to the parent of the custom dir.
缺陷修复
API / Provider
-
OpenAI 兼容请求中剥离 Provider 前缀
发送给上游 API 时将ollama/qwen3-coder裁剪为qwen3-coder,
避免严格端点返回"模型不存在"错误。 -
支持
reasoning_content/ 数组型content的 SSE 解析
DashScope 等返回reasoning_content字段或数组content块的
Provider 现可正确解析并展示。 -
强化 OpenAI 兼容响应处理、模型路由及 Azure 请求
- 兼容流式 delta 对象中缺失 / null 字段的情况。
- Azure:若配置了
apiVersion,自动将api-version附加到请求 URL。 - 模型路由:无显式模型时优先使用 Provider 配置中的
defaultModel。
CLI
-
DashScope 流式容错 — 当助手流无内容输出时,自动补发一次
非流式请求(适配部分 DashScope 模型变体)。 -
修复
codineer config set忽略CODINEER_CONFIG_HOME
现在写入$CODINEER_CONFIG_HOME/settings.json,不再硬编码~/.codineer/settings.json。 -
修复嵌套 Tokio Runtime 创建
CliToolExecutor现在共享同一个Arc<Runtime>,不再每次 MCP
工具调用时都新建 Runtime。 -
修复
pick_best_coding_model在候选列表为空时 panic。
重构
- 拆分超大源文件(净减少约 2 800 行):
runtime_client.rs(1 387 行)→runtime_client/目录模块main.rs(1 697 行)→main.rs+bootstrap.rs+main_tests.rslive_cli.rs(1 095 行)→live_cli.rs+lsp_detect.rs+turn_helpers.rsopenai_compat.rs(1 140 行)→openai_compat.rs+openai_compat_sse.rsopenai_compat_stream.rs
交互体验
-
@//建议项导航 — 按上下方向键不再每次重置选中项。 -
"Thinking…" 指示器位置 — 修复 raw 模式下换行符(
\r\n),
确保进度指示器始终从新行行首显示。 -
补全后自动加空格 — 回车确认
@或/补全项后,
自动在末尾追加空格,方便继续输入后续内容。 -
@path引用处理 — 发送给 AI 的文本中剥离原始@path标记,
转而注入结构化 XML 块(<attached_file>、<attached_directory>、<not_found>)。 -
--help中显示操作系统对应的配置路径 — Windows 显示
%USERPROFILE%\.codineer\…(反斜杠),Unix / macOS 显示~/.codineer/…。 -
Claude 风格的 REPL 欢迎横幅 — 启动时展示更丰富的上下文面板。
文档
-
在
README.md和README_CN.md的配置文件表格中新增"路径示意"列,
明确.codineer.json位于项目根目录(而非.codineer/子目录)。 -
说明目录形式与扁平形式配置文件并非重复:同时存在时目录形式优先;
codineer config set始终写入目录形式。 -
补充
mcpServers合并语义:同名服务器以后加载的文件完整替换(不深度合并)。 -
更新
CODINEER_CONFIG_HOME说明:该变量同时改变全局扁平配置文件的位置。
Full Changelog: v0.6.2...v0.6.3
Full Changelog: v0.6.2...v0.6.3