| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
refactor(persona/verify): drop per-round status reminder; don't force verify when attended Two related cleanups that cut redundant reminders and over-forced behavior. A. Remove the per-round StatusReminderHook date/status tail. - The current date now comes SOLELY from the persona's frozen date anchor (cache-stable, present every round incl. round 1), so no ephemeral <system-reminder> tail rides each request. StatusReminderHook is dropped from the production hook chain (type kept, just unregistered). - persona: SYSTEM REMINDERS / MCP blocks now tell the model NOT to acknowledge or echo reminders ("已记录 / noted / continuing") -- read silently and act. - recall.rs doc, cache_prefix.rs (no date-tail stripping needed -- history is a pure byte prefix again), full_assembly.rs updated accordingly. B. Attended (interactive) runs do not FORCE the post-edit verify cadence. - CodingAgentConfig::interactive + is_attended(); VerifyCadenceHook::attended() + an ATOMCODE_VERIFY override (should_suppress_verify / parse_verify_env). Attended -> a present human can request a check; unattended / headless / scheduled keep forcing. Wired in parts.rs + assemble.rs; ACP sets interactive = true (mirrors its request_timeout = None). - persona: VERIFY skips pure styling / whitespace / copy edits; PROGRESS SIGNPOSTS / OUTPUT scoped to multi-step work with silent trivial calls allowed (drop the "silence is worse than one plain line" push). Mirrors codex's "hold off on tests in interactive modes; run them proactively only when unattended". Tests: verify-suppression unit tests (env + attendedness matrix); cache_prefix / full_assembly reflect the removed reminder tail; persona signpost assertions updated. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Provider-URL: https://gitcode.com/atomgit_atomcode/atomcode | 2 个月前 | |
refactor(timeout): 子代理/team/review 接上 first_token_timeout + 抽 env helper code-review 收尾 #4 + #5。 #4 子代理都吃到 prefill 预算(此前只主 agent 有,子代理退回 stream_timeout): - TaskTool:加 first_token_timeout 字段/with_first_token_timeout/穿到 build_task_child→builder.first_token_timeout;两处 child 构造点接线。 - TeamRunnerFactory:加字段 + with_runtime_policy 参数 + builder 接线。 - ReviewTool 全链(独立子系统,同款 config→assemble→provider+kernel): ReviewToolConfig/ReviewAgentConfig 加字段;assemble 的 provider 字节层 (#2)+ kernel builder(Part 1)都接上;parts.rs 三处从 cfg.first_token 播种。 ReviewAgentConfig 加 effective_first_token_timeout()=first_token.max(stream) 防倒挂(#3 同款护栏)——deep-review 把 stream 调到 700s 时 prefill 不被 默认 120s 掐断(既有 >10min review 测试即证)。 Option 型(Task/Team)缺省 None→内核回退 stream,无需护栏;Review 用具体 Duration 有静态默认才需 max。 #5 抽 env_duration_secs(var) 公共解析,default_stream_timeout / default_first_token_timeout 复用(去重,行为不变)。 coding 439 + review 101 + task 40 绿;full workspace+tests 编译干净。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Provider-URL: https://gitcode.com/atomgit_atomcode/atomcode | 1 个月前 | |
fix(provider): 字节层 idle 看门狗 phase-aware,prefill 用 first_token 预算 code-review #2 收尾:让 Part 1 对「静默本地 server」也真正闭环。 此前 provider 字节层 idle 看门狗(openai_compat/responses/anthropic/ollama 四家同款循环)对首字节也用 stream_timeout(300s),会先于内核 600s 的 first_token_timeout 触发——网关不发 keep-alive(vLLM/llama.cpp prefill 期间 常见)时,拆分完全落空且是硬失败(retryable=false)。 改动: - 三个 provider config(OpenAiCompatConfig 复用给 responses/anthropic/ollama) 新增 first_token_timeout 字段(默认 120s = idle 默认,不改无 wiring 行为)。 - 四个字节循环 phase-aware:按 first_byte_seen 选看门狗——首字节前用 first_token,首字节后收紧回 idle;每次 (re)open 重置(重连重启 prefill)。 keep-alive 字节会提前翻档,但也持续重置看门狗,不会误触发;完全静默的 prefill 拿到完整 first-token 预算,与内核层对齐。 - provider_factory(4 处)+ assemble(1 处)从 cfg.first_token_timeout 接线。 测试:http_mock 新增 timed_body_gateway,两测证明 prefill 用 first_token 预算(慢首字节不误超时)、inter-token 用 idle 预算(首字节后照常超时)。 14 http_mock + 439 coding 绿;retry 网络分类 3 例失败是沙箱代理伪影 (剥 proxy env 后 36 例全绿,retry.rs 未改)。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Provider-URL: https://gitcode.com/atomgit_atomcode/atomcode | 1 个月前 | |
refactor(timeout): 子代理/team/review 接上 first_token_timeout + 抽 env helper code-review 收尾 #4 + #5。 #4 子代理都吃到 prefill 预算(此前只主 agent 有,子代理退回 stream_timeout): - TaskTool:加 first_token_timeout 字段/with_first_token_timeout/穿到 build_task_child→builder.first_token_timeout;两处 child 构造点接线。 - TeamRunnerFactory:加字段 + with_runtime_policy 参数 + builder 接线。 - ReviewTool 全链(独立子系统,同款 config→assemble→provider+kernel): ReviewToolConfig/ReviewAgentConfig 加字段;assemble 的 provider 字节层 (#2)+ kernel builder(Part 1)都接上;parts.rs 三处从 cfg.first_token 播种。 ReviewAgentConfig 加 effective_first_token_timeout()=first_token.max(stream) 防倒挂(#3 同款护栏)——deep-review 把 stream 调到 700s 时 prefill 不被 默认 120s 掐断(既有 >10min review 测试即证)。 Option 型(Task/Team)缺省 None→内核回退 stream,无需护栏;Review 用具体 Duration 有静态默认才需 max。 #5 抽 env_duration_secs(var) 公共解析,default_stream_timeout / default_first_token_timeout 复用(去重,行为不变)。 coding 439 + review 101 + task 40 绿;full workspace+tests 编译干净。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Provider-URL: https://gitcode.com/atomgit_atomcode/atomcode | 1 个月前 | |
fix(loop): 空/无语义目标不再死循环——连续无进展轮熔断 /loop 下 goal 为空或不可验证(如"需要")时,评估器持续判 NotMet,运行时不断注入 "Keep working autonomously",模型重复输出模板回复烧到 max_rounds=100(实测 ~80 轮 / ~40k tokens)。根因:NotMet 路径无"无进展"熔断——unproductive 只对 Timeout/ProviderError 累加且每次 evaluate 清零,永远触发不了 MAX_UNPRODUCTIVE。 修:GoalState 加跨轮存活的 no_progress 计数 + MAX_STALLED_ROUNDS=3 + note_not_met() (有 tool call 清零,否则累加,>=3 返回 true);new/resume/resume_paused/retask 重置。 runtime 的 GoalResult::NotMet 分支按 held_turn 的 stats.tool_call_count>0 判进展, 连续 3 轮无工具且未达成 → finish(Stopped)+警告(提示给具体目标再 /loop),不再注入 continuation;有进展则原逻辑不变。round 计数移进 continuation 分支(与 Inconclusive/ Error 一致,stall 不虚增)。 效果:"需要"这类第 3 轮即停(而非 100 轮);正常 loop 每轮有 edit/bash/read, no_progress 每轮清零,零影响。 测试:3 新单测(连续无进展触发 / 进展轮重置 / retask 清零);controllers 27 + coding 全 lib 439 绿,构建无告警。code-review 高强度 7 角度无缺陷。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Provider-URL: https://gitcode.com/atomgit_atomcode/atomcode | 1 个月前 | |
fix(coding): honor explicit no-verification requests Provider-URL: https://gitcode.com/atomgit_atomcode/atomcode | 2 个月前 | |
feat(init): support configurable localized prompts Provider-URL: https://gitcode.com/atomgit_atomcode/atomcode | 2 个月前 | |
feat(init): support configurable localized prompts Provider-URL: https://gitcode.com/atomgit_atomcode/atomcode | 2 个月前 | |
style: cargo fmt --all(全仓格式化,为把 fmt 检查转成阻塞门做准备) 纯格式化,无行为变更。93 个文件、407 处 diff —— 这笔债从来没还过,导致 cargo fmt 在这棵树上是不可用的:任何人跑一次都会顺手改掉 90 多个无关文件, 于是没人敢跑,债继续滚。check.yml 里 fmt 检查挂着 continue-on-error 也正是 因为它第一次跑就是红的。 唯一一处非纯格式化的改动:background.rs 里 bash_start 参数错误消息所在的 match arm,rustfmt 在长字符串字面量上不收敛(cargo fmt 不改、--check 却 一直报),手工落成它要求的块形式并把字面量拆成续行。已用 rustc 实测拼接结果 与原字符串逐字节相同。这是把 fmt 设成阻塞门的前提 —— 否则 CI 会永久红。 验证:cargo fmt --all -- --check 退出 0;cargo check --workspace --all-targets 0 error;cargo test --workspace 全绿。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DZ6k3GPfpuJZg28kysCv4v | 1 个月前 | |
fix(coding): revert next-prompt-suggestion cap to 128 (1024 hit the gateway limit) The earlier 128→1024 bump was a net negative for heavy-reasoning models: AtomGit qwen3.8-27b's gateway rejects the larger cap with a generic HTTP 400 ("Provider returned error"), so a bigger budget only traded "empty answer" for "failed request" — no suggestion either way, plus error-log noise and a wasted call. Revert to 128, the value deepseek-v4-flash (light reasoning at low) is proven to work with. A heavy-reasoning model like qwen still gets no suggestion (its low-effort thinking overruns 128), but that's silent best-effort degradation with no error noise. The real fix — suppressing thinking on this prediction request (enable_thinking:false / /no_think) — needs per-endpoint support this qwen gateway does not reliably offer, so it's deferred. coding next_prompt_suggestion tests green. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Provider-URL: https://gitcode.com/atomgit_atomcode/atomcode | 2 个月前 | |
style: cargo fmt --all(bump 前存量格式债清偿) | 1 个月前 | |
fix(persona): signpost 只报任务动作,静默注入内容——治弱模型念 MCP/系统块 用户报 glm5.3-flash 执行 /init 时把对注入内容的元推理念出来 ("MCP 提示与当前任务无关,继续…")。对比 codex(trivial 免报)/opencode (禁 preamble)/oh-my-pi(直接"STOP narrating"),atomcode 是唯一"每批工具前 必报"最激进的,弱模型被逼把"读了 MCP 块"也当动作念。且 MCP 块显眼度不是主因 ——omp 同款 ## MCP Server Instructions 大标题却不念,差别只在 signpost。 根因关键:glm5.3-flash 属 GLM,而 GLM 不吃 FIRM_EXECUTION(只 DeepSeek/Qwen), 故主力修法落在通用段。 - 通用 ## PROGRESS SIGNPOSTS(所有模型含 GLM):signpost 只报对任务的动作; 系统提醒/MCP 指令/工具说明一律静默读、绝不 signpost(never "MCP 无关 / 与任务无关 / 已记录")。co-located 在 signpost 规则原地(弱模型不套远处规则)。 - FIRM signpost(DeepSeek/Qwen):同款静默注入内容 + trivial 免报例外,且基数 明确(≥2 的批次必报,仅单次 trivial 免报,防重开 DeepSeek 静默批次问题)。 persona 测试扩展:断言通用段含 anti-narration 且 GLM 确实拿到(无 FIRM signpost);56 persona + 439 coding 全绿。纯提示词,未真机(需 glm5.3-flash 验)。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Provider-URL: https://gitcode.com/atomgit_atomcode/atomcode | 1 个月前 | |
feat(approval): optional reason on ApprovalRequest (back-compat) Provider-URL: https://gitcode.com/atomgit_atomcode/atomcode | 1 个月前 | |
refactor(runtime): retire legacy engine bridge | 3 个月前 | |
style: cargo fmt --all(bump 前存量格式债清偿) | 1 个月前 | |
style: cargo fmt --all(全仓格式化,为把 fmt 检查转成阻塞门做准备) 纯格式化,无行为变更。93 个文件、407 处 diff —— 这笔债从来没还过,导致 cargo fmt 在这棵树上是不可用的:任何人跑一次都会顺手改掉 90 多个无关文件, 于是没人敢跑,债继续滚。check.yml 里 fmt 检查挂着 continue-on-error 也正是 因为它第一次跑就是红的。 唯一一处非纯格式化的改动:background.rs 里 bash_start 参数错误消息所在的 match arm,rustfmt 在长字符串字面量上不收敛(cargo fmt 不改、--check 却 一直报),手工落成它要求的块形式并把字面量拆成续行。已用 rustc 实测拼接结果 与原字符串逐字节相同。这是把 fmt 设成阻塞门的前提 —— 否则 CI 会永久红。 验证:cargo fmt --all -- --check 退出 0;cargo check --workspace --all-targets 0 error;cargo test --workspace 全绿。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DZ6k3GPfpuJZg28kysCv4v | 1 个月前 | |
fix(runtime): 会话健康探针改走 spawn_blocking,不再阻塞 tokio worker workspace review P1-4/5:native_session_health_error 在 async fn manage 的 fail-close 分支里被直接调用,内部 load_native_session 会取 OS meta-lock 并 thread::sleep 轮询(session/manager acquire_file_lock_until,上限 10s)。 跨进程锁竞争时会把当前 tokio worker 阻塞最长 10s,饿死同 worker 上其它任务。 修:改成 async,先同步 clone 出 Arc<SessionManager> + id(借用即结束),再 spawn_blocking 跑阻塞 load,await 结果;探针 panic 归为健康失败(fail-close, 不放行未校验会话)。唯一调用点加 .await。 daemon 编译通过(证明 manage future 仍 Send)+ coding 439 绿。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Provider-URL: https://gitcode.com/atomgit_atomcode/atomcode | 1 个月前 | |
fix(session): 会话自动命名与对话显示跳过注入的 system-reminder 消息 运行时注入的 <system-reminder> 是普通 Role::User 消息(不带 synthetic 标记),导致消费方把内部上下文当成用户发言: - 自动命名(auto_name_from_messages / first_exchange_text)把 reminder 当首条用户消息,/resume 里大量会话同名(#1347) - daemon/TUI 显示层把 reminder 当普通消息展示,泄漏内部系统 文本与任务进度(#1349) 修复:reminder.rs 新增 is_system_reminder() 统一检测,命名与 显示两条路径在取首条用户消息 / 构建显示消息时过滤 reminder 块。 fixes #1347, #1349 Co-Authored-By: AtomCode (deepseek-v4-flash) <noreply@atomgit.com> | 2 个月前 | |
style: cargo fmt --all(全仓格式化,为把 fmt 检查转成阻塞门做准备) 纯格式化,无行为变更。93 个文件、407 处 diff —— 这笔债从来没还过,导致 cargo fmt 在这棵树上是不可用的:任何人跑一次都会顺手改掉 90 多个无关文件, 于是没人敢跑,债继续滚。check.yml 里 fmt 检查挂着 continue-on-error 也正是 因为它第一次跑就是红的。 唯一一处非纯格式化的改动:background.rs 里 bash_start 参数错误消息所在的 match arm,rustfmt 在长字符串字面量上不收敛(cargo fmt 不改、--check 却 一直报),手工落成它要求的块形式并把字面量拆成续行。已用 rustc 实测拼接结果 与原字符串逐字节相同。这是把 fmt 设成阻塞门的前提 —— 否则 CI 会永久红。 验证:cargo fmt --all -- --check 退出 0;cargo check --workspace --all-targets 0 error;cargo test --workspace 全绿。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DZ6k3GPfpuJZg28kysCv4v | 1 个月前 | |
!1008 merge feat/configurable-429-retry into release/v5.0.7 feat(config): support configuring provider 429 retry attempts in config.toml Created-by: ChrisLSSjw Commit-by: ChrisLSSjw Merged-by: saulcy Description: ## What Adds a per-provider retry_max_attempts knob to config.toml so users can tune transient HTTP 429 / 5xx / timeout retry counts without a code change (implements #1404). ## Changes - ProviderConfig / ModelProfileConfig / ResolvedModelConfig gain an optional retry_max_attempts field (None keeps the adapter default of 3 attempts; 1 disables automatic retries). - The value is threaded through CodingRuntimeConfig / CodingAgentConfig (from_config, agent_config, apply_provider_config) and applied in the provider factory for the OpenAI-compat, Anthropic and Ollama adapters (clamped to >= 1 attempt). - All test literals updated; unit tests pass (atomcode-config 269, atomcode-coding 394) and cargo check passes for config/coding/codingplan/capabilities/tuix/daemon. Example config: toml [providers.my-deepseek] type = "openai" model = "deepseek-v4-flash" # retry 429/5xx/timeout up to 5 attempts (default 3); 1 disables retries retry_max_attempts = 5 Closes #1404 See merge request: atomgit_atomcode/atomcode!1008 | 2 个月前 | |
fix(read/compaction): widen read window, self-bounding tools bypass truncation, silence auto tool-fold marks Addresses the report that complex tasks "truncate constantly" and "waste tokens handling truncation". read_file: - per-read budget 10KiB -> 50KiB, default page 300 -> 1500 lines, so a normal window returns in ONE call instead of many pagination round-trips (each re-sends the whole growing context). Aligned with peer tools. artifact middleware (altitude): - add Tool::self_bounds_output(); read_file returns true. ArtifactMiddleware reads it off the resolved tool in after() (tool now threaded into the after-chain) instead of a hardcoded exemption list + before/after call-id tracking -- robust to before-chain Allow short-circuits, single source of truth on the tool. - ToolMiddleware::after gains an Option<&Arc<dyn Tool>> param (all impls updated). compaction marks: - CompactionOutcome::is_silent_auto_tool_fold(); daemon + webui projectors suppress the noisy "Tool output folded" mark for automatic in-place stub folding (manual / overflow / real drains stay visible). TUI keeps its stricter announce-based discriminator (documented; full unification needs a kernel flag). persona / tool descriptions: - steer models to native read_file/grep (offset/ranges, locate-then-read) over python/shell file slicing; extend the firm tool-discipline gate to qwen/longcat. Tests: +artifact self-bounds passthrough, +read budget/pagination, +is_silent predicate, +persona steering; affected suites green (2 pre-existing network-socket retry tests are unrelated and fail only under the sandbox). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Provider-URL: https://gitcode.com/atomgit_atomcode/atomcode | 2 个月前 | |
style: cargo fmt --all(全仓格式化,为把 fmt 检查转成阻塞门做准备) 纯格式化,无行为变更。93 个文件、407 处 diff —— 这笔债从来没还过,导致 cargo fmt 在这棵树上是不可用的:任何人跑一次都会顺手改掉 90 多个无关文件, 于是没人敢跑,债继续滚。check.yml 里 fmt 检查挂着 continue-on-error 也正是 因为它第一次跑就是红的。 唯一一处非纯格式化的改动:background.rs 里 bash_start 参数错误消息所在的 match arm,rustfmt 在长字符串字面量上不收敛(cargo fmt 不改、--check 却 一直报),手工落成它要求的块形式并把字面量拆成续行。已用 rustc 实测拼接结果 与原字符串逐字节相同。这是把 fmt 设成阻塞门的前提 —— 否则 CI 会永久红。 验证:cargo fmt --all -- --check 退出 0;cargo check --workspace --all-targets 0 error;cargo test --workspace 全绿。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DZ6k3GPfpuJZg28kysCv4v | 1 个月前 | |
feat(provider): add configurable vision capability Provider-URL: https://gitcode.com/atomgit_atomcode/atomcode | 2 个月前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 2 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 2 个月前 | ||
| 2 个月前 | ||
| 2 个月前 | ||
| 1 个月前 | ||
| 2 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 3 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 2 个月前 | ||
| 1 个月前 | ||
| 2 个月前 | ||
| 2 个月前 | ||
| 1 个月前 | ||
| 2 个月前 |