Skip to content

Codineer v0.6.8

Choose a tag to compare

@andeya andeya released this 06 Apr 18:11
· 232 commits to main since this release

Features

  • Runtime fallback to ~/.codineer/ — when no .codineer/settings.json exists 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))
  • MultiEdit tool — apply multiple file edits in a single tool call. (feat(tools))
  • AskUserQuestion tool — present structured multiple-choice questions to the user
    mid-session. (feat(tools))
  • codineer init full 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_initialized false-positive on banner — the "run /init" hint was incorrectly
    suppressed for any directory under $HOME because ~/.codineer/settings.json matched
    the ancestor walk. Now only cwd/.codineer/settings.json is checked. (fix(banner))
  • Windows dead-code warning — the executable field of BundledPluginFile triggered
    a -D dead-code lint 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 by codineer_runtime_dir(), ConfigLoader::discover(), and skill
    path resolution.
  • ConfigLoader uses project root detection — running from a project sub-directory
    now correctly picks up the nearest ancestor .codineer/settings.json.
  • sandbox_dirs() helper — eliminates duplicate codineer_runtime_dir() calls in
    sandbox_env() and generate_seatbelt_profile().
  • .codineer.json flat config removed — only directory-based settings.json is
    supported; the redundant flat config and its error-handling code have been deleted.
  • CODINEER.md moved into .codineer/ — project memory file now lives at
    .codineer/CODINEER.md; the legacy root-level location is still checked for reading.
  • .codineer/.gitignore scaffoldinit generates a nested .gitignore inside
    .codineer/ to track settings.json, plugins/, skills/, and CODINEER.md while
    ignoring runtime artifacts; root-level .gitignore cleaned up accordingly.
  • Plugin manifest convention simplified — dropped the .codineer-plugin/
    subdirectory; plugin.json now lives at the plugin directory root directly.
  • OnceLock replaces lazy_static — vim-detection one-time init migrated to
    std::sync::OnceLock; external lazy_static dependency removed.
  • Sandbox and agent dirs moved under .codineer/sandbox-home/, sandbox-tmp/,
    and agents/ are now stored under .codineer/ for a cleaner workspace layout.
  • resolve_skill_path unified — skill discovery uses codineer_runtime_dir() to
    match other runtime artifacts; removed stale ~/.agents/skills legacy path.

Documentation

  • Comprehensive plugin development guide added (crates/plugins/README.md +
    Chinese translation README_CN.md).
  • CODINEER.md rewritten 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;
    use plugins.externalDirectories to register project-local plugins.
  • CODINEER_CONFIG_HOME description corrected (removed stale flat-config references).
  • Root README.md / README_CN.md updated with CODINEER.md purpose 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.gitignoreCODINEER.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-code lint;已通过 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.jsonplugins/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