queravel-cli 0.9.27__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.
- queravel_cli-0.9.27/PKG-INFO +168 -0
- queravel_cli-0.9.27/README.md +144 -0
- queravel_cli-0.9.27/pyproject.toml +56 -0
- queravel_cli-0.9.27/queravel_cli/__init__.py +30 -0
- queravel_cli-0.9.27/queravel_cli/__main__.py +999 -0
- queravel_cli-0.9.27/queravel_cli/adapters/__init__.py +49 -0
- queravel_cli-0.9.27/queravel_cli/adapters/anthropic_adapter.py +96 -0
- queravel_cli-0.9.27/queravel_cli/adapters/base.py +146 -0
- queravel_cli-0.9.27/queravel_cli/adapters/fireworks_adapter.py +302 -0
- queravel_cli-0.9.27/queravel_cli/adapters/local_adapter.py +85 -0
- queravel_cli-0.9.27/queravel_cli/adapters/queravel_adapter.py +72 -0
- queravel_cli-0.9.27/queravel_cli/agent.py +1285 -0
- queravel_cli-0.9.27/queravel_cli/agents.py +174 -0
- queravel_cli-0.9.27/queravel_cli/artifact.py +236 -0
- queravel_cli-0.9.27/queravel_cli/attachments.py +100 -0
- queravel_cli-0.9.27/queravel_cli/auth.py +380 -0
- queravel_cli-0.9.27/queravel_cli/checkpoints.py +52 -0
- queravel_cli-0.9.27/queravel_cli/chrome_bridge.py +274 -0
- queravel_cli-0.9.27/queravel_cli/chrome_host.py +87 -0
- queravel_cli-0.9.27/queravel_cli/claude_code.py +395 -0
- queravel_cli-0.9.27/queravel_cli/clipboard.py +127 -0
- queravel_cli-0.9.27/queravel_cli/code.py +320 -0
- queravel_cli-0.9.27/queravel_cli/commands.py +183 -0
- queravel_cli-0.9.27/queravel_cli/config.py +377 -0
- queravel_cli-0.9.27/queravel_cli/context.py +151 -0
- queravel_cli-0.9.27/queravel_cli/daemon.py +285 -0
- queravel_cli-0.9.27/queravel_cli/device.py +161 -0
- queravel_cli-0.9.27/queravel_cli/filepicker.py +130 -0
- queravel_cli-0.9.27/queravel_cli/history.py +53 -0
- queravel_cli-0.9.27/queravel_cli/hooks.py +116 -0
- queravel_cli-0.9.27/queravel_cli/importer.py +258 -0
- queravel_cli-0.9.27/queravel_cli/inline_app.py +645 -0
- queravel_cli-0.9.27/queravel_cli/local_host.py +308 -0
- queravel_cli-0.9.27/queravel_cli/local_models.py +382 -0
- queravel_cli-0.9.27/queravel_cli/local_server.py +154 -0
- queravel_cli-0.9.27/queravel_cli/mcp_client.py +138 -0
- queravel_cli-0.9.27/queravel_cli/permissions.py +136 -0
- queravel_cli-0.9.27/queravel_cli/remote.py +241 -0
- queravel_cli-0.9.27/queravel_cli/research.py +106 -0
- queravel_cli-0.9.27/queravel_cli/router.py +54 -0
- queravel_cli-0.9.27/queravel_cli/scheduler.py +118 -0
- queravel_cli-0.9.27/queravel_cli/session.py +334 -0
- queravel_cli-0.9.27/queravel_cli/skills.py +222 -0
- queravel_cli-0.9.27/queravel_cli/subagent.py +120 -0
- queravel_cli-0.9.27/queravel_cli/terminal_setup.py +113 -0
- queravel_cli-0.9.27/queravel_cli/tools/__init__.py +4 -0
- queravel_cli-0.9.27/queravel_cli/tools/diagnostics.py +49 -0
- queravel_cli-0.9.27/queravel_cli/tools/fs.py +215 -0
- queravel_cli-0.9.27/queravel_cli/tools/notebook.py +63 -0
- queravel_cli-0.9.27/queravel_cli/tools/registry.py +434 -0
- queravel_cli-0.9.27/queravel_cli/tools/shell.py +146 -0
- queravel_cli-0.9.27/queravel_cli/tools/tasks.py +42 -0
- queravel_cli-0.9.27/queravel_cli/tools/web.py +207 -0
- queravel_cli-0.9.27/queravel_cli/tui.py +4627 -0
- queravel_cli-0.9.27/queravel_cli/ui.py +172 -0
- queravel_cli-0.9.27/queravel_cli/update.py +269 -0
- queravel_cli-0.9.27/queravel_cli/voice.py +340 -0
- queravel_cli-0.9.27/queravel_cli/workflow.py +281 -0
- queravel_cli-0.9.27/queravel_cli/workflow_runtime.py +326 -0
- queravel_cli-0.9.27/queravel_cli/worktree.py +95 -0
- queravel_cli-0.9.27/queravel_cli.egg-info/PKG-INFO +168 -0
- queravel_cli-0.9.27/queravel_cli.egg-info/SOURCES.txt +67 -0
- queravel_cli-0.9.27/queravel_cli.egg-info/dependency_links.txt +1 -0
- queravel_cli-0.9.27/queravel_cli.egg-info/entry_points.txt +2 -0
- queravel_cli-0.9.27/queravel_cli.egg-info/requires.txt +18 -0
- queravel_cli-0.9.27/queravel_cli.egg-info/top_level.txt +1 -0
- queravel_cli-0.9.27/setup.cfg +4 -0
- queravel_cli-0.9.27/tests/test_sessions.py +257 -0
- queravel_cli-0.9.27/tests/test_tools.py +4495 -0
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: queravel-cli
|
|
3
|
+
Version: 0.9.27
|
|
4
|
+
Summary: Queravel CLI — an agentic coding assistant for the terminal
|
|
5
|
+
Author: Queravel
|
|
6
|
+
Requires-Python: >=3.10
|
|
7
|
+
Description-Content-Type: text/markdown
|
|
8
|
+
Requires-Dist: openai>=1.40
|
|
9
|
+
Requires-Dist: rich>=13.7
|
|
10
|
+
Requires-Dist: textual>=0.80
|
|
11
|
+
Requires-Dist: prompt_toolkit>=3.0
|
|
12
|
+
Requires-Dist: mcp>=1.0
|
|
13
|
+
Requires-Dist: python-socketio[client]>=5.11
|
|
14
|
+
Requires-Dist: aiohttp>=3.9
|
|
15
|
+
Requires-Dist: certifi>=2024.0
|
|
16
|
+
Requires-Dist: sounddevice>=0.4
|
|
17
|
+
Requires-Dist: numpy>=1.24
|
|
18
|
+
Requires-Dist: websockets>=12
|
|
19
|
+
Requires-Dist: segno>=1.5
|
|
20
|
+
Provides-Extra: anthropic
|
|
21
|
+
Requires-Dist: anthropic>=1.0; extra == "anthropic"
|
|
22
|
+
Provides-Extra: dev
|
|
23
|
+
Requires-Dist: pytest>=8.0; extra == "dev"
|
|
24
|
+
|
|
25
|
+
# Queravel CLI
|
|
26
|
+
|
|
27
|
+
An agentic coding assistant for your terminal — reads and writes your local codebase, runs
|
|
28
|
+
builds/tests/git, and drives long-running tasks — built on Queravel's agent engine. Runs on the
|
|
29
|
+
free **Queravel** models by default (Kimi K3 / GLM 5.3 Flash / DeepSeek V4.1 Flash) — **no third-party
|
|
30
|
+
API keys required**.
|
|
31
|
+
|
|
32
|
+
> **Status:** Phase 1 core is live: Textual TUI, diff review, **plan mode + permission modes**,
|
|
33
|
+
> **todos**, **sub-agents**, and **context auto-compaction**. It finds code by **agentic search
|
|
34
|
+
> (grep/glob/read) — no RAG, no index**. See `memory/phase-status.md`.
|
|
35
|
+
|
|
36
|
+
## Install
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
# One-liner (macOS / Linux) — installs the binary + keeps it auto-updated:
|
|
40
|
+
curl -fsSL https://queravel.com/install.sh | sh
|
|
41
|
+
# Windows (PowerShell): irm https://queravel.com/install.ps1 | iex
|
|
42
|
+
|
|
43
|
+
# Homebrew:
|
|
44
|
+
brew install SiliconBlast/queravel/queravel
|
|
45
|
+
|
|
46
|
+
# Python (pipx):
|
|
47
|
+
pipx install queravel-cli
|
|
48
|
+
|
|
49
|
+
# From a clone (dev):
|
|
50
|
+
git clone <repo> && cd queravel-cli && make dev
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Then run `queravel` in any repo. First time in a project, `queravel init` writes a
|
|
54
|
+
`QUERAVEL.md` so the agent learns your build/test commands and conventions.
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
queravel design "a landing page for my app" # generate a self-contained HTML page locally + open it (/design in the TUI)
|
|
58
|
+
queravel --browser "check if example.com loads" # browser automation via Playwright MCP (navigate/click/type/screenshot)
|
|
59
|
+
queravel research "how does WASM GC work" --breadth 5 # multi-agent deep research → cited report (/research in the TUI)
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
Deep research fans out one web sub-agent per angle in parallel, verifies claims against sources, and
|
|
63
|
+
writes a cited Markdown report. **Search backend:** when you're **signed in** (`queravel login`),
|
|
64
|
+
search routes through **Queravel's own engine** — 15 free providers + neural rerank + cache, **no key
|
|
65
|
+
needed**. Signed out, it falls back to `TAVILY_API_KEY` → `BRAVE_API_KEY` → keyless (Wikipedia + DDG
|
|
66
|
+
instant answers). Force the local path with `QUERAVEL_WEB_SEARCH=direct`.
|
|
67
|
+
|
|
68
|
+
Switch models in the TUI with **`/model`** (no id → interactive picker) or `/model <id>`.
|
|
69
|
+
|
|
70
|
+
**Voice input** — in the TUI, `/voice` records from your mic and drops the transcript into the prompt
|
|
71
|
+
(you review before sending). Install the extra and set a speech-to-text key:
|
|
72
|
+
`pip install 'queravel-cli[voice]'` + `GROQ_API_KEY` (fast) or `OPENAI_API_KEY`.
|
|
73
|
+
|
|
74
|
+
## Auth
|
|
75
|
+
|
|
76
|
+
Uses the free Queravel Fireworks models. The key is read at runtime from `FIREWORKS_API_KEY`, or
|
|
77
|
+
(dev convenience) from the Queravel *personal* backend's `.env`. Nothing is stored in this repo.
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
export FIREWORKS_API_KEY=fw_... # optional if the personal backend .env has it
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
To use another provider's model, set its API key and pass `--model <id>`.
|
|
84
|
+
|
|
85
|
+
## Use
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
queravel # interactive TUI
|
|
89
|
+
queravel "refactor utils.py to remove the duplicate helper" # TUI, pre-seeded with a first task
|
|
90
|
+
queravel -p "run the tests and summarize failures" # headless (print) mode, no TUI
|
|
91
|
+
|
|
92
|
+
# Sessions — resume where you left off
|
|
93
|
+
queravel -c "and now add tests for it" # --continue: resume the latest session in this dir
|
|
94
|
+
queravel --resume # pick from a list (this dir; Ctrl+A = all dirs, / = search)
|
|
95
|
+
queravel --resume 20260917-004541-645844 # resume a specific session id directly
|
|
96
|
+
queravel --resume <id> --fork-session # branch it into a NEW session (original untouched)
|
|
97
|
+
|
|
98
|
+
# In the picker: →/← expand a group's branches, / to search (or paste a PR URL to
|
|
99
|
+
# find the session that opened it). In a session, /branch forks the current thread.
|
|
100
|
+
|
|
101
|
+
# Options
|
|
102
|
+
queravel --model glm-5.3-flash --cwd /path/to/repo "..." # models: kimi-k3 | glm-5.3-flash | deepseek-v4.1-flash
|
|
103
|
+
queravel --auto -p "create hello.py and run it" # auto-approve side effects (scratch targets)
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### Approval / permission modes
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
queravel # default: prompt every side effect (edits show a diff to accept/reject)
|
|
110
|
+
queravel --accept-edits # auto-approve file edits; still confirm shell commands
|
|
111
|
+
queravel --plan # read-only: research & propose a plan, change nothing
|
|
112
|
+
queravel --auto # approve everything except denied/dangerous commands
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Cycle modes live with **Ctrl+P → "Cycle approval mode"**. Manage **allow / ask / deny** rules
|
|
116
|
+
interactively with **`/permissions`** (add/remove, user or project scope), or edit
|
|
117
|
+
`~/.queravel/settings.json` / `.queravel/settings.json` directly:
|
|
118
|
+
`{"permissions": {"allow": ["Bash(npm test:*)", "Read(src/*)"], "ask": ["Bash(git push*)"], "deny": ["WebFetch(domain:evil.com)"]}}`.
|
|
119
|
+
Rule syntax: `Bash(<glob>)`, `Read/Write/Edit(<glob>)`, `WebFetch(domain:x)`,
|
|
120
|
+
`mcp__server__tool`, a bare tool name, or `*`. Precedence is **deny > ask > allow**; dangerous
|
|
121
|
+
commands (`rm -rf`, fork bombs, `curl|sh`, force-push, …) never auto-run.
|
|
122
|
+
|
|
123
|
+
### Power features
|
|
124
|
+
|
|
125
|
+
- **Todos** — the agent plans multi-step work; a live panel tracks progress.
|
|
126
|
+
- **Sub-agents** — it delegates large investigations to an isolated **read-only** sub-agent (`task`)
|
|
127
|
+
that returns a findings report, keeping the main context clean.
|
|
128
|
+
- **Context auto-compaction** — long sessions summarize older turns automatically to stay in-window.
|
|
129
|
+
- **Checkpoint / undo** — every file edit is snapshotted; `/undo` reverts the last change.
|
|
130
|
+
- **Hooks** — run shell commands at `PreToolUse` (non-zero exit blocks the tool) / `PostToolUse`
|
|
131
|
+
(e.g. auto-format after edits) via `settings.json`; matched by a regex on the tool name.
|
|
132
|
+
- **QUERAVEL.md `@`-imports** — recursively include other files into your project memory.
|
|
133
|
+
- **Agentic search, not RAG** — it navigates your repo with grep/glob/read on demand (always fresh,
|
|
134
|
+
no index to build).
|
|
135
|
+
|
|
136
|
+
## Project memory — `QUERAVEL.md`
|
|
137
|
+
|
|
138
|
+
Drop a `QUERAVEL.md` in your repo (and/or `~/.queravel/QUERAVEL.md` for global prefs). Its contents
|
|
139
|
+
are injected into the agent's system prompt every run, so your project conventions, build/test
|
|
140
|
+
commands, and do's/don'ts persist without re-explaining.
|
|
141
|
+
|
|
142
|
+
Sessions are saved under `~/.queravel/sessions/`; the system prompt (and thus `QUERAVEL.md`) is
|
|
143
|
+
rebuilt on every run, so editing `QUERAVEL.md` always takes effect — even on `--continue`.
|
|
144
|
+
|
|
145
|
+
## Web & MCP
|
|
146
|
+
|
|
147
|
+
- **Web tools**: the agent can `web_fetch` a URL and `web_search` (set `TAVILY_API_KEY` for a
|
|
148
|
+
reliable search API; otherwise a best-effort keyless search is used).
|
|
149
|
+
- **MCP servers**: connect external tool servers (standard MCP config) in
|
|
150
|
+
`~/.queravel/mcp.json` or `.queravel/mcp.json`:
|
|
151
|
+
```json
|
|
152
|
+
{"mcpServers": {"github": {"command": "npx", "args": ["-y", "@modelcontextprotocol/server-github"]}}}
|
|
153
|
+
```
|
|
154
|
+
Their tools appear as `mcp__<server>__<tool>` and are gated by your approval mode.
|
|
155
|
+
|
|
156
|
+
## Tools (Phase 0/1)
|
|
157
|
+
|
|
158
|
+
`read_file` · `write_file` · `edit_file` (surgical) · `multi_edit` (atomic multi-change) ·
|
|
159
|
+
`list_dir` · `glob` · `grep` · `run_command` (bash). All execute **in-process on your machine**,
|
|
160
|
+
whole-repo, no cloud caps.
|
|
161
|
+
|
|
162
|
+
## Architecture (short)
|
|
163
|
+
|
|
164
|
+
A local, provider-agnostic tool-use loop (`adapters/base.py`) — Fireworks (OpenAI-compatible) by
|
|
165
|
+
default, with optional BYOK providers — driving in-process local tools, rendered through a UI abstraction
|
|
166
|
+
(`ui.py`) that backs both the Textual TUI (`tui.py`) and the headless `-p` mode. Mirrors the shape
|
|
167
|
+
of Queravel's backend agent engine so it can be extracted and shared (Phase 1 next step). See
|
|
168
|
+
`memory/` for the concept, decisions, and engine-extraction plan.
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
# Queravel CLI
|
|
2
|
+
|
|
3
|
+
An agentic coding assistant for your terminal — reads and writes your local codebase, runs
|
|
4
|
+
builds/tests/git, and drives long-running tasks — built on Queravel's agent engine. Runs on the
|
|
5
|
+
free **Queravel** models by default (Kimi K3 / GLM 5.3 Flash / DeepSeek V4.1 Flash) — **no third-party
|
|
6
|
+
API keys required**.
|
|
7
|
+
|
|
8
|
+
> **Status:** Phase 1 core is live: Textual TUI, diff review, **plan mode + permission modes**,
|
|
9
|
+
> **todos**, **sub-agents**, and **context auto-compaction**. It finds code by **agentic search
|
|
10
|
+
> (grep/glob/read) — no RAG, no index**. See `memory/phase-status.md`.
|
|
11
|
+
|
|
12
|
+
## Install
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
# One-liner (macOS / Linux) — installs the binary + keeps it auto-updated:
|
|
16
|
+
curl -fsSL https://queravel.com/install.sh | sh
|
|
17
|
+
# Windows (PowerShell): irm https://queravel.com/install.ps1 | iex
|
|
18
|
+
|
|
19
|
+
# Homebrew:
|
|
20
|
+
brew install SiliconBlast/queravel/queravel
|
|
21
|
+
|
|
22
|
+
# Python (pipx):
|
|
23
|
+
pipx install queravel-cli
|
|
24
|
+
|
|
25
|
+
# From a clone (dev):
|
|
26
|
+
git clone <repo> && cd queravel-cli && make dev
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Then run `queravel` in any repo. First time in a project, `queravel init` writes a
|
|
30
|
+
`QUERAVEL.md` so the agent learns your build/test commands and conventions.
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
queravel design "a landing page for my app" # generate a self-contained HTML page locally + open it (/design in the TUI)
|
|
34
|
+
queravel --browser "check if example.com loads" # browser automation via Playwright MCP (navigate/click/type/screenshot)
|
|
35
|
+
queravel research "how does WASM GC work" --breadth 5 # multi-agent deep research → cited report (/research in the TUI)
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Deep research fans out one web sub-agent per angle in parallel, verifies claims against sources, and
|
|
39
|
+
writes a cited Markdown report. **Search backend:** when you're **signed in** (`queravel login`),
|
|
40
|
+
search routes through **Queravel's own engine** — 15 free providers + neural rerank + cache, **no key
|
|
41
|
+
needed**. Signed out, it falls back to `TAVILY_API_KEY` → `BRAVE_API_KEY` → keyless (Wikipedia + DDG
|
|
42
|
+
instant answers). Force the local path with `QUERAVEL_WEB_SEARCH=direct`.
|
|
43
|
+
|
|
44
|
+
Switch models in the TUI with **`/model`** (no id → interactive picker) or `/model <id>`.
|
|
45
|
+
|
|
46
|
+
**Voice input** — in the TUI, `/voice` records from your mic and drops the transcript into the prompt
|
|
47
|
+
(you review before sending). Install the extra and set a speech-to-text key:
|
|
48
|
+
`pip install 'queravel-cli[voice]'` + `GROQ_API_KEY` (fast) or `OPENAI_API_KEY`.
|
|
49
|
+
|
|
50
|
+
## Auth
|
|
51
|
+
|
|
52
|
+
Uses the free Queravel Fireworks models. The key is read at runtime from `FIREWORKS_API_KEY`, or
|
|
53
|
+
(dev convenience) from the Queravel *personal* backend's `.env`. Nothing is stored in this repo.
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
export FIREWORKS_API_KEY=fw_... # optional if the personal backend .env has it
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
To use another provider's model, set its API key and pass `--model <id>`.
|
|
60
|
+
|
|
61
|
+
## Use
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
queravel # interactive TUI
|
|
65
|
+
queravel "refactor utils.py to remove the duplicate helper" # TUI, pre-seeded with a first task
|
|
66
|
+
queravel -p "run the tests and summarize failures" # headless (print) mode, no TUI
|
|
67
|
+
|
|
68
|
+
# Sessions — resume where you left off
|
|
69
|
+
queravel -c "and now add tests for it" # --continue: resume the latest session in this dir
|
|
70
|
+
queravel --resume # pick from a list (this dir; Ctrl+A = all dirs, / = search)
|
|
71
|
+
queravel --resume 20260917-004541-645844 # resume a specific session id directly
|
|
72
|
+
queravel --resume <id> --fork-session # branch it into a NEW session (original untouched)
|
|
73
|
+
|
|
74
|
+
# In the picker: →/← expand a group's branches, / to search (or paste a PR URL to
|
|
75
|
+
# find the session that opened it). In a session, /branch forks the current thread.
|
|
76
|
+
|
|
77
|
+
# Options
|
|
78
|
+
queravel --model glm-5.3-flash --cwd /path/to/repo "..." # models: kimi-k3 | glm-5.3-flash | deepseek-v4.1-flash
|
|
79
|
+
queravel --auto -p "create hello.py and run it" # auto-approve side effects (scratch targets)
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### Approval / permission modes
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
queravel # default: prompt every side effect (edits show a diff to accept/reject)
|
|
86
|
+
queravel --accept-edits # auto-approve file edits; still confirm shell commands
|
|
87
|
+
queravel --plan # read-only: research & propose a plan, change nothing
|
|
88
|
+
queravel --auto # approve everything except denied/dangerous commands
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Cycle modes live with **Ctrl+P → "Cycle approval mode"**. Manage **allow / ask / deny** rules
|
|
92
|
+
interactively with **`/permissions`** (add/remove, user or project scope), or edit
|
|
93
|
+
`~/.queravel/settings.json` / `.queravel/settings.json` directly:
|
|
94
|
+
`{"permissions": {"allow": ["Bash(npm test:*)", "Read(src/*)"], "ask": ["Bash(git push*)"], "deny": ["WebFetch(domain:evil.com)"]}}`.
|
|
95
|
+
Rule syntax: `Bash(<glob>)`, `Read/Write/Edit(<glob>)`, `WebFetch(domain:x)`,
|
|
96
|
+
`mcp__server__tool`, a bare tool name, or `*`. Precedence is **deny > ask > allow**; dangerous
|
|
97
|
+
commands (`rm -rf`, fork bombs, `curl|sh`, force-push, …) never auto-run.
|
|
98
|
+
|
|
99
|
+
### Power features
|
|
100
|
+
|
|
101
|
+
- **Todos** — the agent plans multi-step work; a live panel tracks progress.
|
|
102
|
+
- **Sub-agents** — it delegates large investigations to an isolated **read-only** sub-agent (`task`)
|
|
103
|
+
that returns a findings report, keeping the main context clean.
|
|
104
|
+
- **Context auto-compaction** — long sessions summarize older turns automatically to stay in-window.
|
|
105
|
+
- **Checkpoint / undo** — every file edit is snapshotted; `/undo` reverts the last change.
|
|
106
|
+
- **Hooks** — run shell commands at `PreToolUse` (non-zero exit blocks the tool) / `PostToolUse`
|
|
107
|
+
(e.g. auto-format after edits) via `settings.json`; matched by a regex on the tool name.
|
|
108
|
+
- **QUERAVEL.md `@`-imports** — recursively include other files into your project memory.
|
|
109
|
+
- **Agentic search, not RAG** — it navigates your repo with grep/glob/read on demand (always fresh,
|
|
110
|
+
no index to build).
|
|
111
|
+
|
|
112
|
+
## Project memory — `QUERAVEL.md`
|
|
113
|
+
|
|
114
|
+
Drop a `QUERAVEL.md` in your repo (and/or `~/.queravel/QUERAVEL.md` for global prefs). Its contents
|
|
115
|
+
are injected into the agent's system prompt every run, so your project conventions, build/test
|
|
116
|
+
commands, and do's/don'ts persist without re-explaining.
|
|
117
|
+
|
|
118
|
+
Sessions are saved under `~/.queravel/sessions/`; the system prompt (and thus `QUERAVEL.md`) is
|
|
119
|
+
rebuilt on every run, so editing `QUERAVEL.md` always takes effect — even on `--continue`.
|
|
120
|
+
|
|
121
|
+
## Web & MCP
|
|
122
|
+
|
|
123
|
+
- **Web tools**: the agent can `web_fetch` a URL and `web_search` (set `TAVILY_API_KEY` for a
|
|
124
|
+
reliable search API; otherwise a best-effort keyless search is used).
|
|
125
|
+
- **MCP servers**: connect external tool servers (standard MCP config) in
|
|
126
|
+
`~/.queravel/mcp.json` or `.queravel/mcp.json`:
|
|
127
|
+
```json
|
|
128
|
+
{"mcpServers": {"github": {"command": "npx", "args": ["-y", "@modelcontextprotocol/server-github"]}}}
|
|
129
|
+
```
|
|
130
|
+
Their tools appear as `mcp__<server>__<tool>` and are gated by your approval mode.
|
|
131
|
+
|
|
132
|
+
## Tools (Phase 0/1)
|
|
133
|
+
|
|
134
|
+
`read_file` · `write_file` · `edit_file` (surgical) · `multi_edit` (atomic multi-change) ·
|
|
135
|
+
`list_dir` · `glob` · `grep` · `run_command` (bash). All execute **in-process on your machine**,
|
|
136
|
+
whole-repo, no cloud caps.
|
|
137
|
+
|
|
138
|
+
## Architecture (short)
|
|
139
|
+
|
|
140
|
+
A local, provider-agnostic tool-use loop (`adapters/base.py`) — Fireworks (OpenAI-compatible) by
|
|
141
|
+
default, with optional BYOK providers — driving in-process local tools, rendered through a UI abstraction
|
|
142
|
+
(`ui.py`) that backs both the Textual TUI (`tui.py`) and the headless `-p` mode. Mirrors the shape
|
|
143
|
+
of Queravel's backend agent engine so it can be extracted and shared (Phase 1 next step). See
|
|
144
|
+
`memory/` for the concept, decisions, and engine-extraction plan.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
[project]
|
|
2
|
+
name = "queravel-cli"
|
|
3
|
+
version = "0.9.27"
|
|
4
|
+
description = "Queravel CLI — an agentic coding assistant for the terminal"
|
|
5
|
+
readme = "README.md"
|
|
6
|
+
requires-python = ">=3.10"
|
|
7
|
+
authors = [{ name = "Queravel" }]
|
|
8
|
+
dependencies = [
|
|
9
|
+
# Fireworks.ai (the default provider) speaks the OpenAI-compatible API.
|
|
10
|
+
"openai>=1.40",
|
|
11
|
+
"rich>=13.7",
|
|
12
|
+
# Textual powers the classic full-screen TUI.
|
|
13
|
+
"textual>=0.80",
|
|
14
|
+
# prompt_toolkit powers the native inline frontend (normal buffer, no mouse capture,
|
|
15
|
+
# so the terminal owns scroll + selection + copy — Claude Code's default model).
|
|
16
|
+
"prompt_toolkit>=3.0",
|
|
17
|
+
# MCP client (connect external tool servers over stdio).
|
|
18
|
+
"mcp>=1.0",
|
|
19
|
+
# Remote control: Socket.IO client to the Queravel backend (the relay).
|
|
20
|
+
"python-socketio[client]>=5.11",
|
|
21
|
+
# On-device ("Local") model host: `code-host --local-serve` runs a Socket.IO SERVER
|
|
22
|
+
# on 127.0.0.1 via socketio.AsyncServer(async_mode="aiohttp"). The socketio[client]
|
|
23
|
+
# extra above only pulls the websocket CLIENT — the aiohttp async SERVER backend is a
|
|
24
|
+
# separate dependency and MUST be declared, or the local host crashes with
|
|
25
|
+
# ModuleNotFoundError: No module named 'aiohttp' in the shipped (PyInstaller) binary.
|
|
26
|
+
"aiohttp>=3.9",
|
|
27
|
+
# CA certificates for HTTPS. Declared + bundled (see queravel.spec) so the FROZEN
|
|
28
|
+
# binary verifies TLS on ANY machine: a PyInstaller build otherwise bakes in the
|
|
29
|
+
# build host's cert path (e.g. .../anaconda3/ssl/cert.pem), which doesn't exist on
|
|
30
|
+
# users' machines → every HTTPS download (models, llama-server) fails. __init__ points
|
|
31
|
+
# SSL_CERT_FILE at the bundled certifi bundle.
|
|
32
|
+
"certifi>=2024.0",
|
|
33
|
+
# Voice input (/voice): mic capture. Wheels bundle PortAudio on macOS/Windows/Linux,
|
|
34
|
+
# so voice works out of the box; transcription routes through the Queravel backend.
|
|
35
|
+
"sounddevice>=0.4",
|
|
36
|
+
"numpy>=1.24",
|
|
37
|
+
# Streaming voice (/voice hold-to-talk): full-duplex WebSocket to the backend STT relay.
|
|
38
|
+
"websockets>=12",
|
|
39
|
+
# /rc Remote Control: render a scannable QR of the session link in the terminal.
|
|
40
|
+
"segno>=1.5",
|
|
41
|
+
]
|
|
42
|
+
|
|
43
|
+
[project.optional-dependencies]
|
|
44
|
+
# Anthropic is an OPTIONAL provider (used only for --model claude-…).
|
|
45
|
+
anthropic = ["anthropic>=1.0"]
|
|
46
|
+
dev = ["pytest>=8.0"]
|
|
47
|
+
|
|
48
|
+
[project.scripts]
|
|
49
|
+
queravel = "queravel_cli.__main__:main"
|
|
50
|
+
|
|
51
|
+
[build-system]
|
|
52
|
+
requires = ["setuptools>=68"]
|
|
53
|
+
build-backend = "setuptools.build_meta"
|
|
54
|
+
|
|
55
|
+
[tool.setuptools.packages.find]
|
|
56
|
+
include = ["queravel_cli*"]
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"""Queravel CLI — an agentic coding assistant for the terminal.
|
|
2
|
+
|
|
3
|
+
Phase 0: a minimal, self-contained agent loop that proves local tool execution
|
|
4
|
+
end-to-end, mirroring the interface of Queravel's backend agent engine so the
|
|
5
|
+
engine can be extracted and shared in Phase 1. See memory/ for the full concept.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
__version__ = "0.9.27"
|
|
9
|
+
|
|
10
|
+
# HTTPS trust store for the FROZEN binary. PyInstaller bakes in the build host's OpenSSL
|
|
11
|
+
# cert path (e.g. .../anaconda3/ssl/cert.pem), which does NOT exist on users' machines, so
|
|
12
|
+
# stdlib ssl/urllib would fail every TLS handshake (model + llama-server downloads). Point
|
|
13
|
+
# SSL_CERT_FILE at the bundled certifi CA bundle (certifi is collected into the binary by
|
|
14
|
+
# queravel.spec) so verification works on any machine. Runs at import, before any HTTPS.
|
|
15
|
+
# No-op from source when the env/certs are already valid (setdefault won't override).
|
|
16
|
+
def _ensure_ca_bundle() -> None:
|
|
17
|
+
import os
|
|
18
|
+
if os.environ.get("SSL_CERT_FILE"):
|
|
19
|
+
return
|
|
20
|
+
try:
|
|
21
|
+
import certifi
|
|
22
|
+
ca = certifi.where()
|
|
23
|
+
if ca and os.path.exists(ca):
|
|
24
|
+
os.environ["SSL_CERT_FILE"] = ca
|
|
25
|
+
os.environ.setdefault("REQUESTS_CA_BUNDLE", ca)
|
|
26
|
+
except Exception:
|
|
27
|
+
pass
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
_ensure_ca_bundle()
|