Commit Graph

178 Commits

Author SHA1 Message Date
NCBM 3215a5cc35 core/cli: show context char estimate in /status
Surface soft budget usage (context_chars and tool_result_max) for
Phase D without introducing a local tokenizer.
2026-07-15 10:12:01 +08:00
NCBM 001619d9dd core/cli+agent: /compact and resume latest by workspace recency
Soft-compact history, model-summarize without tools, seed a new session;
/resume with no id loads the lately-used session for this workspace.
2026-07-15 10:03:22 +08:00
NCBM 19128735a2 core/memory: order sessions by recency and touch on activity
List/get-latest by updated_at; bump updated_at when messages are
appended so workspace resume picks the lately-used session.
2026-07-15 10:03:15 +08:00
NCBM a7d9c9879b core/cli+agent: run TTY confirms off the event loop
Max-rounds and destructive-tool prompts use asyncio.to_thread with
cancel paused on the main thread so multi-tool turns no longer look
like user cancel. Hooks may be sync or async.
2026-07-15 09:41:32 +08:00
NCBM b80ebf783a core/cli+memory: prompt on session workspace mismatch
When /resume or --session hits a different directory, ask keep (switch
tools root), update binding to current, or abort. Legacy unbound
sessions attach to the current workspace.
2026-07-15 09:33:39 +08:00
NCBM ede7dcccd6 core/cli: scope sessions to workspace directory
Create/resume/list sessions for the current workspace; resume rejects
mismatched workspace bindings.
2026-07-15 00:01:00 +08:00
NCBM 0a2dac2561 core/memory: bind sessions to workspace path with SQLite migrate
Add session.workspace column, create/list filters, and ALTER TABLE
migration for existing chat databases.
2026-07-15 00:00:50 +08:00
NCBM 566a06c996 core/cli: pause turn cancel during TTY confirm prompts
Max-rounds and destructive-tool confirms no longer cancel the in-flight
turn; SIGINT during the prompt aborts only the confirm.
2026-07-15 00:00:40 +08:00
NCBM f31032b801 core/agent+cli: wire max_context_chars and re-raise CancelledError
Propagate context budget from [agent] config; preserve cancel through
tool invoke for mid-turn interruption.
2026-07-14 23:42:55 +08:00
NCBM 5cfe4d6a24 core/agent: soft context compact and cooperative cancel points
Shrink older tool dumps for model requests without mutating history;
check task cancellation between tool/model steps.
2026-07-14 23:42:50 +08:00
NCBM 1da3e92f7c core/agent: enrich ErrorEvent and CancelledEvent metadata
Add retryable/source on errors and optional reason on cancel; show them
in the CLI renderer.
2026-07-14 23:42:44 +08:00
NCBM bcfd1098f8 core/cli+config: confirm destructive tools and path denylist
Wire [agent] confirm_destructive / path_denylist into CLI; default
confirm prompt denies; document Phase C safety hooks.
2026-07-14 23:30:17 +08:00
NCBM 35e89c4dcc core/agent: optional confirm hook on ToolRegistry execute
Serialise dangerous-tool prompts under a lock so parallel tool rounds
cannot race the TTY confirm.
2026-07-14 23:30:10 +08:00
NCBM 510dd67a54 core/tools: classify destructive tools and clarify policy denies
Add classify_danger for delete/move/overwrite paths, get_path_denylist,
and clearer path/command denial messages.
2026-07-14 23:30:02 +08:00
NCBM 81a30d0e4d core/tools/file: add edit_lineno line-range edit tool
1-based inclusive range replace/delete/append; document Phase B agent
and tool updates in CLAUDE.md.
2026-07-14 23:24:34 +08:00
NCBM 3363ab928b core/agent+cli: wire system prompt and agent budgets
ChatAgent accepts system_prompt, result budget, and parallel_tools;
CLI loads them from config [agent].
2026-07-14 23:24:23 +08:00
NCBM 9ec06c7398 core/config: add [agent] section for profile defaults
Parse and sync system_prompt, max_tool_result_chars, and parallel_tools.
2026-07-14 23:24:17 +08:00
NCBM b1964951ea core/agent: parallel tool calls and tool-result char budget
Truncate large tool outputs and run multiple tool calls in one round
concurrently when enabled.
2026-07-14 23:24:11 +08:00
NCBM a1cfc54f8e core/lmproto: await streaming AsyncResponse close
Support both sync and async close/aclose so stream cleanup does not
leave un-awaited coroutines.
2026-07-14 23:24:05 +08:00
NCBM bd6d98ceda core/lmproto+agent: stream via chat_completions(stream=True)
Keep library async-def→async-iterator shape; remove raw-lines path;
typed StreamToolCallDelta merge; scripted clients emit real chunks.
2026-07-14 22:40:24 +08:00
NCBM 4548828354 core/lmproto+agent: use normal stream API for chat loop
Accept async-def returning async iterator; stream via
chat_completions(..., stream=True); typed StreamToolCallDelta merge;
update scripted test clients to emit real chunks.
2026-07-14 22:40:15 +08:00
NCBM e6300cde43 ci/lint: enable strictGenericNarrowing; type-clean stream merge
strictGenericNarrowing=true; rewrite raw SSE tool-call merge with
typed Mapping helpers so basedpyright is warning-free.
2026-07-14 22:27:44 +08:00
NCBM bdb52bdef5 test/agent: cover merge_stream_tool_calls accumulation 2026-07-14 22:22:22 +08:00
NCBM e063efda20 core/agent: fix Phase A streaming await bug and polish
Do not await async generators for raw SSE; close stream on cancel;
merge tool calls without relying only on finish_reason; quieter tool
output; /status slash command.
2026-07-14 22:22:14 +08:00
NCBM 1b582e82d3 ci/lint: disable PLR0913 globally; fix type annotations and streaming
Add PLR0913 to ruff ignore; annotate ChatAgent.stream; remove
unnecessary casts; suppress basedpyright warnings in JSON parsing.
2026-07-14 22:14:50 +08:00
NCBM ed028dc00b core/cli: update display and state for streaming, error, cancel events 2026-07-14 22:11:30 +08:00
NCBM 42b50716f4 core/agent: document chat_completions_raw_lines as optional 2026-07-14 22:11:25 +08:00
NCBM 49eff9c947 core/agent: stream flag on ChatAgent; rollback on any exception 2026-07-14 22:11:25 +08:00
NCBM 8da9e9dd59 core/agent: streaming loop with text deltas and tool-call reconstruction 2026-07-14 22:11:25 +08:00
NCBM b83e7bffc0 core/agent: add ErrorEvent and CancelledEvent 2026-07-14 22:11:25 +08:00
NCBM 665c3f435d core/lmproto: add stream decoder and raw SSE tool-call merger
StreamChatCompletionChunk tolerant of partial tool calls;
merge_stream_tool_calls accumulates by index from raw bytes.
2026-07-14 22:11:25 +08:00
NCBM f26e13c2c1 core/tools/file: copy, move, and delete paths via shutil
Workspace-bound copy_path/move_path/delete_path for files and
directories; overwrite and recursive flags where needed.
2026-07-14 21:47:57 +08:00
NCBM 25ff849efe core/cli: level-1 cancel of in-flight turns via Ctrl+C
Run turns as asyncio tasks; SIGINT cancels the task; agent rolls back
and keeps pending_retry_text for /retry.
2026-07-14 21:02:54 +08:00
NCBM e0916a6352 core/agent+cli: defer DB write until turn success; auto/manual retry
Failed turns roll back memory and keep pending_retry_text; persist only
after success. CLI auto-retries 10s/20s/30s (cancellable) and /retry.
2026-07-14 20:56:08 +08:00
NCBM f079ab73df core/tools/file: add tree with depth, entry, and VCS filters
Workspace-relative tree; always skip VCS dirs; skip hidden dirs by
default; max_depth and max_entries caps.
2026-07-14 20:19:49 +08:00
NCBM 4f1e99fa4b core/tools/process: timeout partial output, per-session PTY budget
run_command keeps stdout/stderr on timeout with timed_out=true;
open_pty uses shlex.join; PTY output budget is per-session.
2026-07-14 20:07:07 +08:00
NCBM a634021a80 core/cli: interactive continue prompts for loop and PTY limits
on_limit raises tool-round allowance; PTY session/budget limits can
prompt to raise; MaxRoundsEvent.continued marks extended runs.
2026-07-14 19:53:34 +08:00
NCBM 1b53b415b6 core/tools/process: harden PTY sessions for agents
Structured alive/exit_code/data reads; until= wait; SIGTERM then
SIGKILL; exec-fail marker; session limit, idle TTL, output budget.
2026-07-14 19:47:32 +08:00
NCBM 73c11cee36 core/tools/process: run_command stdin/env and write_pty
Optional stdin and env overlay for run_command; write_pty for
interactive PTY input.
2026-07-14 19:36:46 +08:00
NCBM bd6f8f5d9a core/cli: resume sessions, history, editline Tab, higher tool rounds
Default to file SQLite DB and latest session; /history and /rounds;
bind Tab for libedit; max tool rounds default 32.
2026-07-14 19:15:12 +08:00
NCBM 366199fc0c core/lmproto: allow null assistant content and optional response fields
Providers return content=null with tool_calls; relax choice logprobs,
finish_reason, fingerprint, and usage for real API payloads.
2026-07-14 18:52:27 +08:00
NCBM 5d90e48618 core/cli: open config in $EDITOR with optional prompt
shlex-split EDITOR (e.g. codium --wait); prompt when no providers;
add config path/edit commands.
2026-07-14 18:44:32 +08:00
NCBM a017adda39 core/cli: readline Tab completion and persistent history
Complete slash commands and provider/model/tools args; store history
under platformdirs user data.
2026-07-14 18:33:34 +08:00
NCBM 054b2e8837 docs: document CLI in CLAUDE.md 2026-07-14 18:29:46 +08:00
NCBM 566c1d7d4d test/cli: cover selection, slash commands, and providers list 2026-07-14 18:29:46 +08:00
NCBM e1f71e7828 core/cli: click app, chat/providers commands, entry points
Expose plyngent console script and python -m plyngent.
2026-07-14 18:29:46 +08:00
NCBM 6be0ef5ac9 core/cli: readline REPL with slash commands 2026-07-14 18:29:46 +08:00
NCBM a1edfd2947 core/cli: provider selection, event display, REPL state 2026-07-14 18:29:46 +08:00
NCBM a64e3bf769 deps: add click for CLI 2026-07-14 18:29:46 +08:00
NCBM 2d589eb36f docs: document tools package in CLAUDE.md 2026-07-14 18:20:32 +08:00