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.
- {dscli_agent-0.5.0/dscli_agent.egg-info → dscli_agent-0.7.0}/PKG-INFO +56 -24
- dscli_agent-0.5.0/PKG-INFO → dscli_agent-0.7.0/README.md +570 -568
- {dscli_agent-0.5.0 → dscli_agent-0.7.0}/dscli/__init__.py +1 -1
- {dscli_agent-0.5.0 → dscli_agent-0.7.0}/dscli/agent.py +109 -35
- {dscli_agent-0.5.0 → dscli_agent-0.7.0}/dscli/cli.py +79 -7
- {dscli_agent-0.5.0 → dscli_agent-0.7.0}/dscli/compaction.py +6 -0
- {dscli_agent-0.5.0 → dscli_agent-0.7.0}/dscli/config.py +1 -2
- {dscli_agent-0.5.0 → dscli_agent-0.7.0}/dscli/display.py +10 -3
- {dscli_agent-0.5.0 → dscli_agent-0.7.0}/dscli/prompts.py +30 -12
- {dscli_agent-0.5.0 → dscli_agent-0.7.0}/dscli/protocol.py +6 -0
- {dscli_agent-0.5.0 → dscli_agent-0.7.0}/dscli/tools.py +111 -18
- {dscli_agent-0.5.0 → dscli_agent-0.7.0}/dscli/tui.py +466 -73
- {dscli_agent-0.5.0 → dscli_agent-0.7.0}/dscli/ui.py +0 -17
- dscli_agent-0.5.0/README.md → dscli_agent-0.7.0/dscli_agent.egg-info/PKG-INFO +600 -538
- {dscli_agent-0.5.0 → dscli_agent-0.7.0}/pyproject.toml +3 -0
- {dscli_agent-0.5.0 → dscli_agent-0.7.0}/tests/test_agent.py +103 -16
- {dscli_agent-0.5.0 → dscli_agent-0.7.0}/tests/test_cli.py +168 -1
- {dscli_agent-0.5.0 → dscli_agent-0.7.0}/tests/test_compaction.py +26 -1
- {dscli_agent-0.5.0 → dscli_agent-0.7.0}/tests/test_display.py +2 -2
- {dscli_agent-0.5.0 → dscli_agent-0.7.0}/tests/test_protocol.py +8 -0
- {dscli_agent-0.5.0 → dscli_agent-0.7.0}/tests/test_tools.py +64 -0
- {dscli_agent-0.5.0 → dscli_agent-0.7.0}/tests/test_tui.py +232 -17
- {dscli_agent-0.5.0 → dscli_agent-0.7.0}/LICENSE +0 -0
- {dscli_agent-0.5.0 → dscli_agent-0.7.0}/dscli/__main__.py +0 -0
- {dscli_agent-0.5.0 → dscli_agent-0.7.0}/dscli/attachments.py +0 -0
- {dscli_agent-0.5.0 → dscli_agent-0.7.0}/dscli/branding.py +0 -0
- {dscli_agent-0.5.0 → dscli_agent-0.7.0}/dscli/browser.py +0 -0
- {dscli_agent-0.5.0 → dscli_agent-0.7.0}/dscli/providers.py +0 -0
- {dscli_agent-0.5.0 → dscli_agent-0.7.0}/dscli/scraper.py +0 -0
- {dscli_agent-0.5.0 → dscli_agent-0.7.0}/dscli/tokens.py +0 -0
- {dscli_agent-0.5.0 → dscli_agent-0.7.0}/dscli_agent.egg-info/SOURCES.txt +0 -0
- {dscli_agent-0.5.0 → dscli_agent-0.7.0}/dscli_agent.egg-info/dependency_links.txt +0 -0
- {dscli_agent-0.5.0 → dscli_agent-0.7.0}/dscli_agent.egg-info/entry_points.txt +0 -0
- {dscli_agent-0.5.0 → dscli_agent-0.7.0}/dscli_agent.egg-info/requires.txt +0 -0
- {dscli_agent-0.5.0 → dscli_agent-0.7.0}/dscli_agent.egg-info/top_level.txt +0 -0
- {dscli_agent-0.5.0 → dscli_agent-0.7.0}/setup.cfg +0 -0
- {dscli_agent-0.5.0 → dscli_agent-0.7.0}/tests/test_branding.py +0 -0
- {dscli_agent-0.5.0 → dscli_agent-0.7.0}/tests/test_browser.py +0 -0
- {dscli_agent-0.5.0 → dscli_agent-0.7.0}/tests/test_config.py +0 -0
- {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.
|
|
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,
|
|
110
|
-
|
|
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
|
|
113
|
-
|
|
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
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
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
|
-
| `
|
|
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, `/
|
|
218
|
-
conversation
|
|
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
|
|
229
|
-
|
|
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
|
|
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
|
|
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
|
|
408
|
-
`[y]es / [n]o / [a]ll / [q]uit` before changing anything.
|
|
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
|
|
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
|
|
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,
|