Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,18 @@ Use `testing::TempDir()` or `std::filesystem::temp_directory_path()` for file I/

If CMake test discovery/build integration is unavailable in the editor, still keep changes compatible with the documented `cmake --build` and `ctest` commands. For web-only changes, at minimum run `pnpm test` and `pnpm build` from [web/](web).

## 研发实施中的通用注意事项

- 重构或迁移功能时,先明确新旧路径的责任边界,再逐步切换调用入口;如果新旧状态、事件处理或兼容分支同时生效,同一个输入可能被重复处理,问题通常只在特定交互顺序下暴露。
- 事件驱动程序需要明确每类事件的唯一所有者。键盘、鼠标、定时器、重绘和后台回调应经过统一适配层进入业务状态机,不能只迁移最常见的事件而遗漏边缘输入路径。
- 业务状态、传输格式和展示文本应分层维护。不要用格式化后的字符串推断状态;空字符串、缺失字段和显式的空值可能代表不同语义,跨线程或跨进程传输时应保留必要的结构化信息。
- 不要把布局、分页或超时等动态行为写成固定常量。可视区域、终端尺寸、配置值和运行时状态变化后,固定步长或固定边界容易产生越界、跳过内容或无法操作的问题。
- 将时间、外部 IO、线程调度和平台资源封装在边界上,核心逻辑尽量使用可注入的时钟、输入和依赖。这样既能避免测试永久等待,也能稳定覆盖超时、取消和竞态场景。
- Windows 增量构建前确认没有残留进程占用输出文件,并加载正确的编译器开发环境;链接错误有时来自文件锁或环境变量缺失,而不是源代码错误。
- 多步骤任务应采用“小范围修改 → 定向编译/测试 → 再扩大范围”的节奏。遇到失败先判断是代码错误、环境问题、并发进程、缓存还是测试基线问题,不要在未定位原因前反复重试。
- 修改前后都要检查工作区范围。不要使用会清理或覆盖无关用户文件的命令;提交时精确选择相关文件,并通过 `git diff --check`、差异审查和测试结果确认改动没有夹带无关内容。
- 非平凡行为变更应同步更新设计文档、任务清单和测试;不要等全部代码完成后才补记录,否则容易遗漏已验证的约束和未完成事项。

## Commit & Pull Request Guidelines

Recent history uses short imperative commits, sometimes with `feat:` prefixes, for example `feat: Implement AskUserQuestion tool` or `Add unit tests for session serialization`. Keep commits focused and mention tests when relevant.
Expand Down
9 changes: 8 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@
set(ACECODE_WEB_DIST "${CMAKE_SOURCE_DIR}/web/dist")
set(ACECODE_WEB_EMBED_DIR "${ACECODE_WEB_DIST}")
if(NOT EXISTS "${ACECODE_WEB_DIST}")
message(WARNING

Check warning on line 98 in CMakeLists.txt

View workflow job for this annotation

GitHub Actions / unit-tests (linux-x64)

[acecode] web/dist/ not found — embedding a minimal fallback page. Run
"[acecode] web/dist/ not found — embedding a minimal fallback page. "
"Run `pnpm install && pnpm build` inside web/ before re-configuring for the full UI.")
set(ACECODE_WEB_EMBED_DIR "${CMAKE_BINARY_DIR}/generated/web-dist-fallback")
Expand Down Expand Up @@ -259,7 +259,14 @@
${CMAKE_SOURCE_DIR}/src/markdown/mermaid_renderer.cpp
${CMAKE_SOURCE_DIR}/src/markdown/link_safety.cpp
${CMAKE_SOURCE_DIR}/src/markdown/syntax_highlight.cpp
${CMAKE_SOURCE_DIR}/src/tui/ask_question_overlay.cpp
${CMAKE_SOURCE_DIR}/src/tui/ask_question_controller.cpp
${CMAKE_SOURCE_DIR}/src/tui/ask_question_editor.cpp
${CMAKE_SOURCE_DIR}/src/tui/ask_question_layout.cpp
${CMAKE_SOURCE_DIR}/src/tui/ask_question_adapter.cpp
${CMAKE_SOURCE_DIR}/src/tui/ask_question_panel.cpp
${CMAKE_SOURCE_DIR}/src/tui/ask_question_view.cpp
${CMAKE_SOURCE_DIR}/src/tui/ask_question_session.cpp
${CMAKE_SOURCE_DIR}/src/tui/ask_question_text.cpp
${CMAKE_SOURCE_DIR}/src/tui/chat_file_link.cpp
${CMAKE_SOURCE_DIR}/src/tui/text_truncation.cpp
${CMAKE_SOURCE_DIR}/src/tui/paste_handler.cpp
Expand Down
10 changes: 8 additions & 2 deletions docs/help/configuration.html
Original file line number Diff line number Diff line change
Expand Up @@ -35,18 +35,24 @@
<main id="main-content" class="article" tabindex="-1">
<div class="breadcrumb"><a href="index.html">文档</a><span aria-hidden="true">›</span><span>配置与扩展</span></div>
<header class="article-header"><h1>配置文件与生效范围</h1><p class="lead">优先通过界面修改对应设置;需要手动编辑时,先确认数据目录、字段范围和保存方式。</p></header>
<details class="mobile-contents"><summary>本页内容<svg class="icon" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" aria-hidden="true"><path d="m8 5 7 7-7 7"/></svg></summary><ul><li><a href="#locations" data-toc-link>配置保存在哪里</a></li><li><a href="#save" data-toc-link>修改与生效</a></li><li><a href="#recovery" data-toc-link>手动编辑与错误恢复</a></li></ul></details>
<details class="mobile-contents"><summary>本页内容<svg class="icon" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" aria-hidden="true"><path d="m8 5 7 7-7 7"/></svg></summary><ul><li><a href="#locations" data-toc-link>配置保存在哪里</a></li><li><a href="#save" data-toc-link>修改与生效</a></li><li><a href="#tui-ask-user-question" data-toc-link>TUI 问答配置</a></li><li><a href="#recovery" data-toc-link>手动编辑与错误恢复</a></li></ul></details>

<section aria-labelledby="locations"><h2 id="locations">配置保存在哪里</h2><p>个人安装的主配置是 <code>~/.acecode/config.json</code>,Windows 对应 <code>%USERPROFILE%\.acecode\config.json</code>。模型预设、默认模型以及网络、技能、MCP 等全局选项保存在这套用户配置中。</p><p>Windows 服务模式使用 <code>%PROGRAMDATA%\acecode</code>,与个人安装的数据目录分开。连接远端后台时,配置属于远端用户或服务身份;编辑本机文件不会自动修改远端配置。</p>
<div class="table-scroll"><table><thead><tr><th scope="col">配置层</th><th scope="col">适合保存的内容</th></tr></thead><tbody><tr><td>全局配置</td><td>服务商连接、默认值、扩展连接与运行选项。</td></tr><tr><td>工作目录覆盖</td><td>例如 TUI 用 /model --cwd 保存的项目模型选择。</td></tr><tr><td>项目文件</td><td>项目规则、项目技能和项目 Hooks。</td></tr><tr><td>当前任务</td><td>任务选择的模型、权限与对话上下文。</td></tr></tbody></table></div>
<p>具体位置见<a href="reference.html#data">本地配置和数据</a>。复制配置到其他计算机前,检查其中的绝对路径、可执行文件位置和认证信息。</p></section>
<section aria-labelledby="save"><h2 id="save">修改与生效</h2><p>模型页通过保存模型或保存修改提交;个性化文本和 MCP JSON 等控件会在离开编辑区时保存,并显示保存状态。TUI 设置中心的 General、Appearance 开关通常即时保存,配置与模型表单按底部提示使用 <kbd>Ctrl+S</kbd>。</p><p>不同配置有不同生效边界。任务模型和权限使用专门的切换入口;后台连接与运行服务以界面的应用结果为准。出现“重启 daemon 后生效”时,保存正在进行的工作后重启。手动改动任意 JSON 文件,并不等于所有运行中的模块都已经重新加载。</p>
<aside class="note"><strong>配置片段需要合并</strong><p>文档中的 JSON 示例只展示相关字段。请合并到现有对象中,不要用片段替换整份配置,否则可能丢失已经保存的模型和其他设置。</p></aside></section>
<section aria-labelledby="tui-ask-user-question"><h2 id="tui-ask-user-question">TUI 问答配置</h2><p>TUI 中的 AskUserQuestion 会在选项较多或说明较长时使用可滚动内容区。以下字段位于配置文件的 <code>tui</code> 对象中:</p><div class="table-scroll"><table><thead><tr><th scope="col">字段</th><th scope="col">默认值</th><th scope="col">有效范围</th><th scope="col">说明</th></tr></thead><tbody><tr><td><code>question_min_visible_rows</code></td><td>4</td><td>2–12</td><td>AskUserQuestion 内容区的最小可见行数。内容超出视口后,可使用鼠标滚轮或滚动条查看。</td></tr><tr><td><code>question_selection_feedback_ms</code></td><td>200</td><td>0–1000</td><td>预设选项提交后保留选中视觉反馈的时长,单位为毫秒。设置为 <code>0</code> 可关闭反馈延迟。</td></tr></tbody></table></div><p>例如:</p><pre><code>{
"tui": {
"question_min_visible_rows": 4,
"question_selection_feedback_ms": 200
}
}</code></pre><p>这两个字段会在读取配置时限制在有效范围内。超出范围的整数会自动限制到边界,并记录警告;非整数值会被忽略并继续使用默认值。省略字段时使用默认值,配置保存采用稀疏写入,不会强制写出默认值。</p></section>
<section aria-labelledby="recovery"><h2 id="recovery">手动编辑与错误恢复</h2><ol><li>先备份当前有效配置,使用支持 UTF-8 的编辑器打开。</li><li>只修改目标字段,保持正确的 JSON 类型,不加入注释或尾随逗号。</li><li>重新加载相关功能,或按该功能要求重启。</li><li>检查界面实际值和一次小操作,确认修改已生效。</li></ol><p>当前版本会保存有效配置快照。配置损坏且存在有效快照时,会备份错误文件并尝试自动恢复;Web/Desktop 会显示一次<strong>配置已自动回滚</strong>提示。没有可用快照时仍会报告配置错误。按提示查看备份位置并修复目标字段,备份可能含密钥,不要直接公开。</p></section>
<nav class="page-navigation" aria-label="文章翻页"><a class="page-link previous" href="model-capabilities.html"><span>上一篇</span><strong><svg class="icon" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" aria-hidden="true"><path d="M20 12H5m6-6-6 6 6 6"/></svg>模型能力与参数</strong></a><a class="page-link next" href="permissions.html"><span>下一篇</span><strong>权限模式与操作确认<svg class="icon" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" aria-hidden="true"><path d="M4 12h15m-6-6 6 6-6 6"/></svg></strong></a></nav>
<footer class="article-footer"><span>ACECode 帮助文档</span><a href="https://github.com/tmoonlight/acecode/issues" target="_blank" rel="noopener noreferrer">反馈文档问题</a></footer>
</main>
<aside class="contents-rail" aria-label="本页内容"><div class="contents-sticky"><p class="contents-title">本页内容</p><nav aria-label="文章小节"><ul><li><a href="#locations" data-toc-link>配置保存在哪里</a></li><li><a href="#save" data-toc-link>修改与生效</a></li><li><a href="#recovery" data-toc-link>手动编辑与错误恢复</a></li></ul></nav><div class="rail-note"><span>配置与扩展</span><p>循着目录逐步了解 ACECode。</p><a href="quick-start.html">前往快速开始 →</a></div></div></aside>
<aside class="contents-rail" aria-label="本页内容"><div class="contents-sticky"><p class="contents-title">本页内容</p><nav aria-label="文章小节"><ul><li><a href="#locations" data-toc-link>配置保存在哪里</a></li><li><a href="#save" data-toc-link>修改与生效</a></li><li><a href="#tui-ask-user-question" data-toc-link>TUI 问答配置</a></li><li><a href="#recovery" data-toc-link>手动编辑与错误恢复</a></li></ul></nav><div class="rail-note"><span>配置与扩展</span><p>循着目录逐步了解 ACECode。</p><a href="quick-start.html">前往快速开始 →</a></div></div></aside>
</div>
<dialog class="search-dialog" aria-labelledby="search-title">
<div class="search-dialog-header"><svg class="icon " width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" aria-hidden="true"><circle cx="10.5" cy="10.5" r="5.5"/><path d="m15 15 4 4"/></svg><label class="sr-only" id="search-title" for="docs-search">搜索文档</label><input id="docs-search" type="search" placeholder="搜索文档、命令或操作…" autocomplete="off" spellcheck="false"><button class="search-close icon-button" type="button" aria-label="关闭搜索"><svg class="icon " width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" aria-hidden="true"><path d="m6 6 12 12M18 6 6 18"/></svg></button></div>
Expand Down
Loading
Loading