dscli-agent 0.5.0__tar.gz → 0.7.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. {dscli_agent-0.5.0/dscli_agent.egg-info → dscli_agent-0.7.0}/PKG-INFO +56 -24
  2. dscli_agent-0.5.0/PKG-INFO → dscli_agent-0.7.0/README.md +570 -568
  3. {dscli_agent-0.5.0 → dscli_agent-0.7.0}/dscli/__init__.py +1 -1
  4. {dscli_agent-0.5.0 → dscli_agent-0.7.0}/dscli/agent.py +109 -35
  5. {dscli_agent-0.5.0 → dscli_agent-0.7.0}/dscli/cli.py +79 -7
  6. {dscli_agent-0.5.0 → dscli_agent-0.7.0}/dscli/compaction.py +6 -0
  7. {dscli_agent-0.5.0 → dscli_agent-0.7.0}/dscli/config.py +1 -2
  8. {dscli_agent-0.5.0 → dscli_agent-0.7.0}/dscli/display.py +10 -3
  9. {dscli_agent-0.5.0 → dscli_agent-0.7.0}/dscli/prompts.py +30 -12
  10. {dscli_agent-0.5.0 → dscli_agent-0.7.0}/dscli/protocol.py +6 -0
  11. {dscli_agent-0.5.0 → dscli_agent-0.7.0}/dscli/tools.py +111 -18
  12. {dscli_agent-0.5.0 → dscli_agent-0.7.0}/dscli/tui.py +466 -73
  13. {dscli_agent-0.5.0 → dscli_agent-0.7.0}/dscli/ui.py +0 -17
  14. dscli_agent-0.5.0/README.md → dscli_agent-0.7.0/dscli_agent.egg-info/PKG-INFO +600 -538
  15. {dscli_agent-0.5.0 → dscli_agent-0.7.0}/pyproject.toml +3 -0
  16. {dscli_agent-0.5.0 → dscli_agent-0.7.0}/tests/test_agent.py +103 -16
  17. {dscli_agent-0.5.0 → dscli_agent-0.7.0}/tests/test_cli.py +168 -1
  18. {dscli_agent-0.5.0 → dscli_agent-0.7.0}/tests/test_compaction.py +26 -1
  19. {dscli_agent-0.5.0 → dscli_agent-0.7.0}/tests/test_display.py +2 -2
  20. {dscli_agent-0.5.0 → dscli_agent-0.7.0}/tests/test_protocol.py +8 -0
  21. {dscli_agent-0.5.0 → dscli_agent-0.7.0}/tests/test_tools.py +64 -0
  22. {dscli_agent-0.5.0 → dscli_agent-0.7.0}/tests/test_tui.py +232 -17
  23. {dscli_agent-0.5.0 → dscli_agent-0.7.0}/LICENSE +0 -0
  24. {dscli_agent-0.5.0 → dscli_agent-0.7.0}/dscli/__main__.py +0 -0
  25. {dscli_agent-0.5.0 → dscli_agent-0.7.0}/dscli/attachments.py +0 -0
  26. {dscli_agent-0.5.0 → dscli_agent-0.7.0}/dscli/branding.py +0 -0
  27. {dscli_agent-0.5.0 → dscli_agent-0.7.0}/dscli/browser.py +0 -0
  28. {dscli_agent-0.5.0 → dscli_agent-0.7.0}/dscli/providers.py +0 -0
  29. {dscli_agent-0.5.0 → dscli_agent-0.7.0}/dscli/scraper.py +0 -0
  30. {dscli_agent-0.5.0 → dscli_agent-0.7.0}/dscli/tokens.py +0 -0
  31. {dscli_agent-0.5.0 → dscli_agent-0.7.0}/dscli_agent.egg-info/SOURCES.txt +0 -0
  32. {dscli_agent-0.5.0 → dscli_agent-0.7.0}/dscli_agent.egg-info/dependency_links.txt +0 -0
  33. {dscli_agent-0.5.0 → dscli_agent-0.7.0}/dscli_agent.egg-info/entry_points.txt +0 -0
  34. {dscli_agent-0.5.0 → dscli_agent-0.7.0}/dscli_agent.egg-info/requires.txt +0 -0
  35. {dscli_agent-0.5.0 → dscli_agent-0.7.0}/dscli_agent.egg-info/top_level.txt +0 -0
  36. {dscli_agent-0.5.0 → dscli_agent-0.7.0}/setup.cfg +0 -0
  37. {dscli_agent-0.5.0 → dscli_agent-0.7.0}/tests/test_branding.py +0 -0
  38. {dscli_agent-0.5.0 → dscli_agent-0.7.0}/tests/test_browser.py +0 -0
  39. {dscli_agent-0.5.0 → dscli_agent-0.7.0}/tests/test_config.py +0 -0
  40. {dscli_agent-0.5.0 → dscli_agent-0.7.0}/tests/test_tokens.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dscli-agent
3
- Version: 0.5.0
3
+ Version: 0.7.0
4
4
  Summary: A local coding agent that uses DeepSeek web chat as its model
5
5
  Author: Anish
6
6
  License-Expression: MIT
@@ -106,11 +106,33 @@ dscli
106
106
 
107
107
  dscli shows an inline terminal UI inspired by Claude Code: a cleared screen and gradient
108
108
  ASCII wordmark on launch, an animated spinner with rotating status verbs, a smoothly
109
- revealed streaming answer, compact tool cards (`⏺ Read(...)`, `⏺ Update(...)`,
110
- `⏺ Run(...)`), colored diffs for approvals, and the final answer rendered as Markdown.
109
+ revealed streaming answer, tree-style tool cards, approval prompts that name the action
110
+ and path without printing file contents, and the final answer rendered as Markdown.
111
+
112
+ Each tool call renders as a card with a short result summary and, when there is more to
113
+ see, a preview of the output:
114
+
115
+ ```text
116
+ ▪ Read(dscli/config.py · lines 1-40)
117
+ └ Read lines 1-40 of 120 (Ctrl+O to expand)
118
+
119
+ ▪ Edit(dscli/config.py)
120
+ └ Accepted config.py (Ctrl+O to expand)
121
+
122
+ ▪ Bash(grep -n "read_file" dscli/prompts.py)
123
+ └ 121:- Do NOT use read_file, write_file, apply_patch, list_files...
124
+ 243: non-empty plan. Start by investigating with read_file and list_files
125
+ … +2 lines (Ctrl+O to expand)
126
+ ```
127
+
128
+ Failed calls keep the `▪` header and show the error under the `└` branch. Long paths are
129
+ shortened in the middle and long commands are trimmed to keep the card on one line.
130
+ Press `Ctrl+O` at the prompt to print the full output of the most recent tool card or
131
+ thinking block.
111
132
  Accents use a muted palette that matches the wordmark: sage for success, dusty rose for
112
- errors, and soft teal for diffs and highlights. The same muted colors apply to the
113
- plain and non-TTY output.
133
+ errors, and soft teal for highlights. Markdown answers — streamed, interrupted, and
134
+ final — use the same palette for headings, links, inline code, and fenced code
135
+ highlighting. The same muted colors apply to the plain and non-TTY output.
114
136
  Output stays in normal scrollback after startup; dscli does not take over the full
115
137
  screen, and the welcome card shows the workspace, model, active modes, and shortcuts.
116
138
  Plans
@@ -132,12 +154,12 @@ DeepThink is always enabled, and the UI streams the model's reasoning live in a
132
154
  compact block above the reply:
133
155
 
134
156
  ```text
135
- Thinking
136
- │ I should inspect the configuration first.
137
- │ … +12 rows (Ctrl+O)
138
- │ charlie line
139
- │ delta line
140
- │ echo line
157
+ Thinking
158
+ │ I should inspect the configuration first.
159
+ │ … +12 rows (Ctrl+O to expand)
160
+ │ charlie line
161
+ │ delta line
162
+ │ echo line
141
163
  ```
142
164
 
143
165
  The first sentence stays pinned at the top while the newest three wrapped rows
@@ -182,6 +204,11 @@ runs before every model turn, so it also works mid-task; the TUI shows a
182
204
  `⟳ Compacted context at 1.0M tokens → … · new chat` notice. `/new` clears the recorded
183
205
  conversation as well.
184
206
 
207
+ Type `/compact` in `dscli chat` to compact on demand. dscli asks the current chat for the
208
+ summary, writes the compaction file, and starts a new DeepSeek chat; the next message you
209
+ send resumes the compacted conversation there, with the compaction attached. `/compact`
210
+ needs at least one earlier message, and `/new` discards a pending compaction.
211
+
185
212
  ### Deeplanning mode
186
213
 
187
214
  ```powershell
@@ -205,17 +232,19 @@ every run with `dscli config --set deeplanning=true`, or turn it off for one run
205
232
  | --- | --- |
206
233
  | `Enter` | Send the message (or accept a `/` completion). |
207
234
  | `Esc` then `Enter`, or `Ctrl+J` | Insert a newline for multi-line input. |
208
- | `Ctrl+C` | While the agent is working: interrupt the current turn, keep the browser session, and return to the prompt. At the prompt: clear the input. |
235
+ | `Esc` | While the agent is working: interrupt the current turn, keep the browser session, and return to the prompt. |
236
+ | `Ctrl+C` | While the agent is working: interrupt the current turn. At the prompt: clear the input. |
209
237
  | `Ctrl+D` | Exit dscli. |
210
238
  | `↑` / `↓` | Browse previous messages. |
211
- | `Ctrl+O` | Expand the last thinking block in full. |
239
+ | `Ctrl+O` | Expand the last thinking block or tool output in full. |
212
240
 
213
241
  Typing `/` opens an autocomplete menu. History is saved to
214
242
  `%APPDATA%\dscli\chat_history` (`~/Library/Application Support/dscli/chat_history` on
215
243
  macOS, `~/.config/dscli/chat_history` elsewhere).
216
244
 
217
- Slash commands: `/help` lists commands and shortcuts, `/new` starts a fresh
218
- conversation so the agent forgets earlier turns, and `/exit` (or `/quit`) closes dscli.
245
+ Slash commands: `/help` lists commands and shortcuts, `/compact` summarizes the
246
+ conversation and continues it in a new chat, `/new` starts a fresh conversation so the
247
+ agent forgets earlier turns, and `/exit` (or `/quit`) closes dscli.
219
248
 
220
249
  If Cloudflare interrupts a headless run, dscli opens the persistent profile in a visible
221
250
  Chrome window and resubmits the interrupted prompt. Complete the check in that window.
@@ -225,8 +254,8 @@ current model turn restarts with the same prompt in a fresh chat, so an answer t
225
254
  already streaming when the check appeared is fetched again. Set
226
255
  `dscli config --set auto_human_check=false` to fail fast instead.
227
256
 
228
- When dscli asks to write a file or run a command, it shows the title and a compact
229
- colored diff (additions green, deletions red, hunks cyan) even when `-y` is active.
257
+ When dscli asks to write a file or run a command, it shows the title and, for commands,
258
+ the exact command. File contents and diffs are never printed.
230
259
  Answer `y` to approve once, `n` to deny, `a` to approve everything for the rest of the
231
260
  session, or `q` to quit.
232
261
 
@@ -269,7 +298,7 @@ dscli run --prompt-file task.md -y
269
298
  dscli run "Review the docs" --no-shell
270
299
  ```
271
300
 
272
- The final answer is printed to stdout. Progress, diffs, and approval prompts go to
301
+ The final answer is printed to stdout. Progress and approval prompts go to
273
302
  stderr, so `dscli run ... > result.txt` captures only the answer. `run` never uses the
274
303
  interactive UI; its output contract is unchanged.
275
304
 
@@ -289,7 +318,7 @@ failures and unconfirmed completions are always logged to stderr, including unde
289
318
  | `--headed` / `--headless` | Show or hide the browser. Headless is the default. |
290
319
  | `--search` | Turn DeepSeek's Search mode on for the run (DeepThink is always on). |
291
320
  | `--deeplanning` | Require a non-empty `update_plan` before writes or commands (alias: `--deep-planning`). |
292
- | `--max-steps N` | Maximum model turns (default 12). |
321
+ | `--max-steps N` | Maximum model turns (default 20, cap 2000). |
293
322
  | `--timeout N` | Response timeout per turn in seconds (default 300). |
294
323
  | `--verify CMD` | Run CMD automatically after file edits; failures block success. |
295
324
  | `--no-verify` | Disable the configured `verify_command` for this run. |
@@ -357,6 +386,7 @@ creep and unnecessary abstractions, confirm hard-to-reverse actions, reference c
357
386
  | `write_file` | **Create** a new file. Refuses to overwrite an existing non-empty file. |
358
387
  | `apply_patch` | The only way to edit an existing file: exact `search` → `replace`. |
359
388
  | `list_files` | Bounded recursive listing. |
389
+ | `search_files` | Search text files for a literal string; returns `path:line` matches. |
360
390
  | `delete_file` | Delete one file when explicitly requested (approval required). |
361
391
  | `run_command` | Run a command with an approval prompt via PowerShell, cmd.exe, sh, or bash. |
362
392
  | `update_plan` | Create or revise the task plan; the task cannot finish while steps are unfinished. |
@@ -404,8 +434,9 @@ model can modify the files it checks, so review the final diff.
404
434
 
405
435
  - Tools are confined to the workspace unless `--allow-outside` is passed.
406
436
  - `.git` is never writable through the tools.
407
- - Every write, patch, delete, and command shows a diff/command and asks
408
- `[y]es / [n]o / [a]ll / [q]uit` before changing anything. `-y` skips the prompts.
437
+ - Every write, patch, delete, and command shows the action and affected path (or the
438
+ exact command) and asks `[y]es / [n]o / [a]ll / [q]uit` before changing anything.
439
+ File contents and diffs are never printed. `-y` skips the prompts.
409
440
  - Command execution is enabled by default, but every model-requested command still
410
441
  requires approval. The prompt names the interpreter (PowerShell, cmd.exe, sh, or
411
442
  bash). `--no-shell` disables model-requested commands for a run.
@@ -420,7 +451,8 @@ model can modify the files it checks, so review the final diff.
420
451
  through the browser.
421
452
 
422
453
  This is still an assistant with write access to your files. Use a clean workspace or
423
- version control, and review diffs before approving them.
454
+ version control, and review the changes in your VCS after a run; approval prompts show
455
+ only the action and path, not the file contents.
424
456
 
425
457
  ## Configuration
426
458
 
@@ -527,8 +559,8 @@ Debug screenshots and unparsed replies are written to `%APPDATA%\dscli\debug`.
527
559
  `complete: true`; tool calls still wait for the complete, validated JSON envelope.
528
560
  The context bar is likewise a local estimate of sent and received text, not usage
529
561
  reported by DeepSeek.
530
- - Interrupting with Ctrl+C clicks DeepSeek's labelled stop button when dscli can find
531
- it. If the page does not expose one, generation may continue in the web chat; the
562
+ - Interrupting with Esc or Ctrl+C clicks DeepSeek's labelled stop button when dscli can
563
+ find it. If the page does not expose one, generation may continue in the web chat; the
532
564
  interrupted answer is discarded, and the next message (or `/new`) re-establishes a
533
565
  clean turn.
534
566
  - Web-chat attachments accept only certain file types. When a file cannot be attached,