Commit Graph

598 Commits

Author SHA1 Message Date
NCBM df8f6bf959 core/tools: rename run_command_batch to run_argv_batch (steps/argv keys) 2026-08-04 21:40:25 +08:00
NCBM d698fbf06f core/tools: rename run_command to run_argv (argv param) 2026-08-04 21:38:20 +08:00
NCBM 23f7b4e299 core/tools: clear argv error when run_command gets a string 2026-08-04 20:35:22 +08:00
NCBM c1dfdc8478 release: plyngent 0.3.0 v0.3.0 2026-08-04 00:06:18 +08:00
NCBM 3449f3a77d lint: drop mypy-style type ignore comments 2026-08-03 23:38:32 +08:00
NCBM a834984bcc core/memory: merge session schema migrations by version 2026-08-01 02:47:08 +08:00
NCBM 8954d855d5 docs: document DeepSeek Anthropic convention support 2026-08-01 02:32:45 +08:00
NCBM a198fa9d41 runtime: route DeepSeek convention=anthropic to Anthropic client 2026-08-01 02:31:21 +08:00
NCBM 439c24a1ce lmproto: add DeepSeek Anthropic client 2026-08-01 02:30:19 +08:00
NCBM 6e4d229f6f config: default deepseek anthropic convention url 2026-08-01 02:27:23 +08:00
NCBM f6072ce2a6 core/agent: interleave responses tool outputs after their calls 2026-08-01 02:16:48 +08:00
NCBM 6932937f87 docs: document DeepSeek Responses via convention field 2026-08-01 02:05:53 +08:00
NCBM 4b7cc93917 runtime: route DeepSeek convention=responses to Responses client 2026-08-01 02:03:52 +08:00
NCBM bfafe74a6f core/agent: handle incomplete/failed Responses stream terminals 2026-08-01 02:03:02 +08:00
NCBM db6d2a83f4 lmproto: add DeepSeek Responses client 2026-08-01 02:01:06 +08:00
NCBM 8ad33af652 config: add typed DeepSeek convention field for API surface 2026-08-01 01:59:39 +08:00
NCBM a877dba8c1 cli/repl: keep second Ctrl+C inside the REPL 2026-08-01 01:45:10 +08:00
NCBM 3fe1c4cf91 core/agent: add model-friendly hint to truncated tool results 2026-08-01 01:42:17 +08:00
NCBM 49a3ef0004 docs: describe read-line edit guard in tool playbook 2026-08-01 01:25:22 +08:00
NCBM 19ac4533d4 core/tools: invalidate lineno read state on file mutation 2026-08-01 01:22:30 +08:00
NCBM 56ac8d17d7 core/tools: restrict edit_lineno to lines read with line numbers 2026-08-01 01:21:00 +08:00
NCBM 0cb7a29f21 core/agent: track per-line lineno read state 2026-08-01 01:20:51 +08:00
NCBM 1d4e48f6f3 core/agent: normalize provider usage structs in token_usage_from_api 2026-08-01 01:09:12 +08:00
NCBM 626012e92f core/agent: unify provider finish_reason mapping 2026-08-01 01:05:26 +08:00
NCBM 5198a8da20 core/agent: align missing-terminal contract in messages dispatch 2026-08-01 01:05:17 +08:00
NCBM e29e66dbc7 core/agent: surface openai responses stream error events 2026-08-01 01:05:09 +08:00
NCBM 9aea91e77c core/agent: share stream chunk builders across responses and messages bridges 2026-08-01 00:48:44 +08:00
NCBM 06f1b386a0 test/lmproto: cover anthropic messages client HTTP round-trips 2026-08-01 00:41:59 +08:00
NCBM 556eca66db docs: document openai responses and anthropic messages wiring 2026-08-01 00:34:48 +08:00
NCBM 44a5f047ba core/runtime: plumb anthropic HTTP timeout 2026-08-01 00:34:41 +08:00
NCBM 3a671f73ea core/agent: wire anthropic messages bridge and dispatch 2026-08-01 00:34:32 +08:00
NCBM de7cae83e4 core/agent: restore OpenAI responses dispatch and provider_tools 2026-08-01 00:34:15 +08:00
NCBM ad58d6cdc6 lint: drop dead code that blocks basedpyright (unused helper and import) 2026-08-01 00:33:25 +08:00
NCBM ef3594ad62 core/tools: change ask_user_choice and ask_user_form params from JSON strings to typed lists 2026-07-29 01:42:00 +08:00
NCBM f5b566b371 core/tools: add per-turn guard requiring lineno read before edit_lineno 2026-07-29 01:40:31 +08:00
NCBM 39ecd55ddd cli: fix limit prompt redundancy and line-break 2026-07-29 01:38:04 +08:00
NCBM 60f9c9b56d core/agent: danger classification overrides YOLO tag in confirm pipeline 2026-07-29 01:37:17 +08:00
NCBM 904ac3d982 core/agent: remove turn-start todo nag -- nag only fires after complete turn 2026-07-29 01:07:59 +08:00
NCBM f60fd876c6 test: update for kind-based dispatch and remove ResponsesChatClient references 2026-07-29 00:46:08 +08:00
NCBM f0c27bf366 core: wire kind-based dispatch through agent, runtime, and state 2026-07-29 00:40:23 +08:00
NCBM 4562eaa1cb core/agent: remove ChatClient protocol and ResponsesChatClient wrapper 2026-07-29 00:36:19 +08:00
NCBM 6eaadd6ebf core/lmproto: add kind property to all clients + AnyLLMClient type 2026-07-29 00:34:42 +08:00
NCBM 49e878fe3a core/lmproto: add Anthropic messages models, config, and client 2026-07-29 00:33:58 +08:00
NCBM 200bde0bfb core/todo-nag: inject reasoning_content on synthetic assistant messages
DeepSeek's reasoning API enforces: if an assistant with tool_calls sits
between two user messages, its reasoning_content must be passed back.
The synthetic todo nag pair creates an AssistantChatMessage with tool_calls
but no reasoning_content, which triggered a 400 error:
"The reasoning_content in the thinking mode must be passed back to the API."

Fix:
1. _append_synthetic_todo_list now sets reasoning_content="" so NEW pairs
   carry the field.
2. refresh_synthetic_todo_nags runs _inject_reasoning_content_for_synthetic
   to fix EXISTING pairs (in DB) even if reasoning_content was UNSET.
3. The earlier _inject_thinking change is reverted in the next commit since
   the real root cause was the missing reasoning_content on forged tool_call
   messages, not the thinking parameter itself.
2026-07-29 00:03:04 +08:00
NCBM 0ce9ed84a0 core/agent: suppress end-of-turn todo nag on retry when turn-start pair survived 2026-07-28 23:52:06 +08:00
NCBM a83c67ba6d test/agent: cover synthetic_tool todo nag retry detection
Adds 7 unit tests for _synthetic_todo_pair_after and committed_prefix_end
with synthetic todo nag pairs: survival across rollback, detection at
correct index, immunity to real tool calls, and multiple rollbacks.

These directly verify the guard that prevents duplicate turn-start
nag injection on /retry when a synthetic pair from a previous failed
attempt survived rollback (committed tool batch).
2026-07-28 23:45:27 +08:00
NCBM 3a5c715e8f core/deepseek: inject thinking parameter to satisfy API reasoning mode requirement
DeepSeek's reasoning model requires the `thinking` parameter to be
explicitly set in every request (default is enabled). The agent loop
constructs the base ChatCompletionsParam which lacks this field, so the
DeepseekOpenAIClient now injects `thinking: {type: "enabled"}` into the
JSON request body after msgspec encoding.

Fixes the HTTP 400 error:
"The `reasoning_content` in the thinking mode must be passed back to the API."
which occurred when a cancelled turn was retried and the request history
contained assistant messages with reasoning_content but no thinking param.
2026-07-28 23:32:02 +08:00
NCBM fc98b080e1 core/agent: skip duplicate synthetic todo nag injection on retry 2026-07-28 22:44:21 +08:00
NCBM 9600d2f757 core/lmproto: coerce developer role for chat completions 2026-07-28 22:16:36 +08:00
NCBM c7ee9b0063 test/config: cover model-level preset routing 2026-07-28 21:45:59 +08:00