NCBM
a54fa534f3
test/tools: clean shell confirm format test
2026-07-19 13:05:43 +08:00
NCBM
fa9f28687f
test/tools: fix shell confirm format test syntax
2026-07-19 13:02:24 +08:00
NCBM
95f277eda7
core/tools: shell confirm argv uses $(command); full -c body indented
2026-07-19 13:01:06 +08:00
NCBM
f13ea9f316
core/tools: soft-confirm file overwrite only, not partial edits
2026-07-19 03:05:01 +08:00
NCBM
f51d11d46f
core/tools/process: add run_command_batch with pipe_out and mix_stderr
2026-07-19 02:46:21 +08:00
NCBM
5b51de12e0
core/cli: skip blocking GET /models on chat ready
...
Only fetch remote catalog when interactive model pick needs it; otherwise
use config/--model/session and warm Tab cache in the background. Cap list
fetch at 5s so a dead API cannot hang startup.
2026-07-19 02:08:58 +08:00
NCBM
badcb3c9f3
core/cli: fix Ctrl+C after mid-turn prompts (SIGINT cancel)
...
asyncio signal handlers freeze ContextVars at install time; reinstalling
while allow_task_cancel was still False left cancel permanently disabled.
Use a process-level prompt depth counter and reinstall only after depth=0.
2026-07-18 19:31:40 +08:00
NCBM
fc74b271bd
core/cli: richer Tab completion for slash commands
...
Complete /todos actions and todo ids, session ids for /resume|/delete
(from cache after /sessions), /rounds hints, and --flags. Pass prior
tokens so multi-arg completion works.
2026-07-18 19:04:45 +08:00
NCBM
1012894f0d
core/cli: multi-line boxed tool confirm prompts
...
Echo a terminal-width box with wrapped reason (argv / -c code) before a
short Allow? y/N prompt so shell confirms are not jammed on one line.
2026-07-18 18:41:00 +08:00
NCBM
020e9215bf
tools: new_temporary_workspace with cross-platform allowlist
...
Create scratch dirs under system temp (tempfile), allow absolute paths
under them without rebinding the project workspace or session. Cleanup
owned temps on chat exit. Cap 16 concurrent temps; sanitize prefix.
2026-07-18 18:16:06 +08:00
NCBM
de79dec96f
tools/file: add with_lineno option to read_file
...
When true, prefix each returned line with absolute 1-based line numbers
(N|…) for edit_lineno-friendly reads; works with offset/limit.
2026-07-18 17:52:25 +08:00
NCBM
b1a8c23582
core/tools: soft-confirm shells, REPLs, and python/bash -c one-liners
...
classify_danger prompts on interactive shell/runtime launches and any -c
code (with argv + snippet preview). Confirm deny can attach a user comment
for the model. Restores ToolRegistry.execute after WIP breakage.
2026-07-18 17:41:44 +08:00
NCBM
9a9c808ea0
core/agent: agent-facing [TODO OPEN] review nag
2026-07-18 16:48:20 +08:00
NCBM
edd54a427c
core/tools/process: drop host TTY restore; rely on CSI sanitize only
2026-07-18 16:26:23 +08:00
NCBM
896dc98d20
core/tools/process: skip host TTY restore when no PTY closed
2026-07-18 16:14:19 +08:00
NCBM
c8a0aeda8d
core/agent: reuse todo ids after clear/pop; todo_push titles as array
2026-07-18 16:09:09 +08:00
NCBM
29230af911
core/tools/process: split write_pty (literal) vs write_pty_keys
2026-07-18 15:46:11 +08:00
NCBM
4ff03d8135
core/tools/process: host TTY restore, sanitize read_pty CSI, write_pty key escapes
2026-07-18 15:20:36 +08:00
NCBM
a7166d863b
core/agent: todo stack is LIFO of task groups, not per-task push
...
push(titles) creates one group of siblings; pop removes the whole top
group. Matches breakdown: push[T1,T2] → push[T1.1,T1.2] → pop → push[T2.1].
2026-07-18 14:47:38 +08:00
NCBM
9b38a3b333
ci/lint: prek commit gateway (ruff check/format + basedpyright)
...
Add prek.toml so git commit runs ruff-pre-commit (fix then format) and
pdm-based basedpyright. Document install/install-hook; clear type warnings
that made basedpyright exit non-zero under recommended mode.
2026-07-18 14:10:04 +08:00
NCBM
39f9a7f636
ci/lint: ruff format todo stack and related CLI/agent files
2026-07-18 13:22:42 +08:00
NCBM
7f49c47105
core/agent: todo is a real LIFO stack (not a queue or frame list)
...
TOP = last element only for pop; multi-push puts first title on top for DFS
breakdown. Dropped nested-frame model; migrate old frames JSON to flat stack.
2026-07-18 13:20:37 +08:00
NCBM
c95d1df028
core/agent: nested todo frames for hierarchical push/pop breakdown
...
push of one or more titles opens a new frame (siblings at one depth);
pop leaves the frame. Supports T1,T2 → T1.1,T1.2 → pop → T2.1 pattern.
Legacy flat session JSON migrates to a single root frame.
2026-07-18 13:15:57 +08:00
NCBM
fb5b9f187b
core/cli: /history last and --full with Rich markdown
2026-07-18 13:02:46 +08:00
NCBM
abcb345c0d
core/agent: todo review nag as developer role, not fake user
...
Internal control uses DeveloperChatMessage so retry/history treat it as
non-human. Responses bridge maps developer mid-turn; compact/history label it.
2026-07-18 12:27:15 +08:00
NCBM
596af1ea1b
core/agent+tools: session todo/task stack with review nag
...
Sub-task stack stored on session.todo_stack; model tools todo_*; slash
/todos for human ops; agent loop injects a review user message when open
todos exist and no todo_* tool ran this turn. Stack carries across /compact.
2026-07-18 01:59:13 +08:00
NCBM
96cdd98e62
tools/file: tree skip_dirs noise defaults and path_denylist walk
...
Default noise basenames (node_modules, __pycache__, …); skip_dirs=[] disables;
apply_path_denylist hides denied children mid-tree.
2026-07-18 01:32:06 +08:00
NCBM
2368e46efd
core/config+cli: /model --persist and /models --persist to TOML
...
ensure_model / merge_models update the provider catalog in memory; --persist
writes plyngent.toml so next launch has a warmer model list.
2026-07-18 01:32:06 +08:00
NCBM
65d248064e
core/agent: classify empty/truncated/missing stream terminals as errors
2026-07-18 00:56:45 +08:00
NCBM
e04fda4bc6
core/agent+cli: fix compact session restore and persist cursor
...
After /compact, reload seed from DB so _persist_from matches stored rows.
rebuild_client preserves the checkpoint via replace_messages. Clarify that
the active session is summary-only and full history stays on the old id.
2026-07-18 00:25:13 +08:00
NCBM
f7a562740e
core/cli: 10 auto-retries with 5/10/15/20 then +10s waits
...
default_retry_delays builds (5,10,15,20,30,…80) for DEFAULT_MAX_AUTO_RETRIES=10.
2026-07-17 15:36:29 +08:00
NCBM
39acd5967e
tools/chat: rename tools to ask_user_line, ask_user_choice, ask_user_form
...
Model-facing names via @tool(name=…); Python symbols unchanged.
2026-07-17 15:36:29 +08:00
NCBM
b8ed9e0ee9
core/cli: assistant/reasoning on new lines; flush markdown on source change
...
Labels end with a newline before content. Switching reasoning↔assistant or
hitting tools/errors flushes the assistant markdown buffer so streams do not mix.
2026-07-17 15:36:29 +08:00
NCBM
8ebe68b3af
core/cli: remote-first model lists; always fetch GET /models
...
Prefer provider catalog over config for selection/Tab; fetch at startup,
/provider, /model, and /models. Config-only ids remain as fallback.
2026-07-17 15:36:06 +08:00
NCBM
2761877460
core/cli: YOLO mode on|off|once for soft destructive confirms
...
Session /yolo and --yes skip classify_danger prompts; once expires after the
next user turn. Hard path/command denylists unchanged.
2026-07-17 14:55:34 +08:00
NCBM
5d2f0c5539
core/cli: Rich markdown for assistant text at end of turn
...
Stream plain tokens; on TTY re-render with Rich. /markdown and PLYNGENT_PLAIN.
2026-07-15 22:21:18 +08:00
NCBM
d267a5f869
ci/lint: apply ruff format and import sort fixes
2026-07-15 22:09:52 +08:00
NCBM
074a3313ce
core/config: default OpenAI provider_tools to web_search
...
Omitted provider_tools enables web_search; use [] to disable hosted tools.
2026-07-15 21:43:39 +08:00
NCBM
84a83e0485
core/config: default OpenAI preset and model catalog
...
Missing preset becomes openai; omitted models seed gpt-5.4 / mini / nano.
2026-07-15 21:40:43 +08:00
NCBM
16992be743
core/config+agent: OpenAI provider_tools for hosted Responses tools
...
Merge opaque tool dicts (web_search, file_search, …) into POST /responses; local ToolRegistry unchanged.
2026-07-15 21:16:05 +08:00
NCBM
5dd102a016
core/agent: route OpenAI provider through Responses API
...
ResponsesChatClient adapts chat-shaped agent history/tools to POST /responses; compat and DeepSeek unchanged.
2026-07-15 20:59:47 +08:00
NCBM
38edc09854
core/lmproto: move Responses API into openai package
...
openai_compatible stays chat-completions-only; OpenAI provider uses lmproto.openai.OpenAIClient.
2026-07-15 20:52:17 +08:00
NCBM
3e20b1559c
core/lmproto: add OpenAI Responses API models and client
...
POST/GET/DELETE /responses with stream events; helpers for output_text and function_call items.
2026-07-15 20:43:11 +08:00
NCBM
fbba2c2a14
core/tools+test: make process and path checks Windows-portable
...
Use sys.executable for process tests; normalize denylist/glob paths; skip readline when missing.
2026-07-15 20:20:25 +08:00
NCBM
c466d09173
core/process: cross-platform PTY via backend and pywinpty
...
POSIX openpty/fork and Windows ConPTY; win32 marker dep plus typings stub.
2026-07-15 20:01:43 +08:00
NCBM
611147b0a5
core/config+cli: recover empty-models providers via models()
...
Keep empty models as recoverable; promote to ready after remote list or --model.
2026-07-15 17:32:10 +08:00
NCBM
6bd80cb915
core/cli: /models and remote catalog for model selection
...
Cache GET /models, merge with config ids for Tab and choose; free-form model ids allowed.
2026-07-15 17:32:04 +08:00
NCBM
e1ea43cb8f
core/lmproto: add OpenAI-compatible models() list API
...
Decode GET /models into ModelsResponse and return sorted unique ids.
2026-07-15 17:31:57 +08:00
NCBM
cf7d331634
core/agent: checkpoint tool rounds so /retry does not redo side effects
...
After each completed assistant+tool batch, persist and keep that prefix on
failure. Rollback only unfinished assistant/stream suffix. pending_retry
and /retry also apply when history ends with tool results (continue model
without re-executing tools).
2026-07-15 15:01:15 +08:00
NCBM
54712b541a
core/cli: /config opens plyngent.toml and reloads
...
Add slash /config to edit the active config path in $EDITOR, then reload
providers/agent settings while keeping a valid provider/model selection.
2026-07-15 14:52:19 +08:00