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
NCBM
95df11713d
core/agent+config: configurable compact prompts
...
Add agent config compact_system_prompt, compact_user_prefix, and
compact_seed_text; wire through summarize and seed messages. Fix default
user prefix to include {transcript}; use safe seed substitution so braces
in summaries do not break formatting.
2026-07-15 14:45:12 +08:00
NCBM
9cc2216807
core/lmproto: allow null logprobs and usage on stream chunks
...
Providers send logprobs=null (and sometimes usage=null) on SSE choices;
accept None so decode does not fail mid-stream.
2026-07-15 14:23:23 +08:00
NCBM
366752efb9
core/lmproto: allow null content on stream deltas
...
OpenAI-compatible and DeepSeek SSE chunks often set content and
reasoning_content to null; accept None so decode does not fail mid-stream.
2026-07-15 14:21:50 +08:00
NCBM
553d491cbc
core/config+cli: empty models are bad; prompt model on provider switch
...
Reject providers with no models into bad_providers and warn with reasons
on chat/providers. When /provider changes and the current model is not
listed, prompt for a new model (keep it when still supported).
2026-07-15 14:17:34 +08:00
NCBM
64d288a9b1
core/memory+cli: remember session LLM; readline prompts
...
Store provider_name/model on sessions (SQLite migrate); restore on
resume and persist on create//model//provider. Startup prefers session
selection over re-asking. ask/choose and provider/model pick use
readline with Tab completion when available.
2026-07-15 14:12:10 +08:00
NCBM
cc298c6cd2
core/runtime: DeepSeek default base URL without /v1
...
Use https://api.deepseek.com as the empty-url default for deepseek preset.
2026-07-15 13:58:17 +08:00
NCBM
2052967824
core/config: default DeepSeek models v4-flash and v4-pro
...
When preset deepseek omits models, seed deepseek-v4-flash and
deepseek-v4-pro as text-capable entries for selection and docs.
2026-07-15 13:57:29 +08:00
NCBM
0dc5c876ee
core/process+cli: PTY hardening and config/log polish
...
Mark PTY master FD non-inheritable; run read_pty/close_pty via to_thread;
close_all PTY sessions on chat exit. Add --log-level; clearer invalid
TOML errors. Keep export/status free of provider secrets.
2026-07-15 13:48:58 +08:00