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.
Files changed (69) hide show
  1. queravel_cli-0.9.27/PKG-INFO +168 -0
  2. queravel_cli-0.9.27/README.md +144 -0
  3. queravel_cli-0.9.27/pyproject.toml +56 -0
  4. queravel_cli-0.9.27/queravel_cli/__init__.py +30 -0
  5. queravel_cli-0.9.27/queravel_cli/__main__.py +999 -0
  6. queravel_cli-0.9.27/queravel_cli/adapters/__init__.py +49 -0
  7. queravel_cli-0.9.27/queravel_cli/adapters/anthropic_adapter.py +96 -0
  8. queravel_cli-0.9.27/queravel_cli/adapters/base.py +146 -0
  9. queravel_cli-0.9.27/queravel_cli/adapters/fireworks_adapter.py +302 -0
  10. queravel_cli-0.9.27/queravel_cli/adapters/local_adapter.py +85 -0
  11. queravel_cli-0.9.27/queravel_cli/adapters/queravel_adapter.py +72 -0
  12. queravel_cli-0.9.27/queravel_cli/agent.py +1285 -0
  13. queravel_cli-0.9.27/queravel_cli/agents.py +174 -0
  14. queravel_cli-0.9.27/queravel_cli/artifact.py +236 -0
  15. queravel_cli-0.9.27/queravel_cli/attachments.py +100 -0
  16. queravel_cli-0.9.27/queravel_cli/auth.py +380 -0
  17. queravel_cli-0.9.27/queravel_cli/checkpoints.py +52 -0
  18. queravel_cli-0.9.27/queravel_cli/chrome_bridge.py +274 -0
  19. queravel_cli-0.9.27/queravel_cli/chrome_host.py +87 -0
  20. queravel_cli-0.9.27/queravel_cli/claude_code.py +395 -0
  21. queravel_cli-0.9.27/queravel_cli/clipboard.py +127 -0
  22. queravel_cli-0.9.27/queravel_cli/code.py +320 -0
  23. queravel_cli-0.9.27/queravel_cli/commands.py +183 -0
  24. queravel_cli-0.9.27/queravel_cli/config.py +377 -0
  25. queravel_cli-0.9.27/queravel_cli/context.py +151 -0
  26. queravel_cli-0.9.27/queravel_cli/daemon.py +285 -0
  27. queravel_cli-0.9.27/queravel_cli/device.py +161 -0
  28. queravel_cli-0.9.27/queravel_cli/filepicker.py +130 -0
  29. queravel_cli-0.9.27/queravel_cli/history.py +53 -0
  30. queravel_cli-0.9.27/queravel_cli/hooks.py +116 -0
  31. queravel_cli-0.9.27/queravel_cli/importer.py +258 -0
  32. queravel_cli-0.9.27/queravel_cli/inline_app.py +645 -0
  33. queravel_cli-0.9.27/queravel_cli/local_host.py +308 -0
  34. queravel_cli-0.9.27/queravel_cli/local_models.py +382 -0
  35. queravel_cli-0.9.27/queravel_cli/local_server.py +154 -0
  36. queravel_cli-0.9.27/queravel_cli/mcp_client.py +138 -0
  37. queravel_cli-0.9.27/queravel_cli/permissions.py +136 -0
  38. queravel_cli-0.9.27/queravel_cli/remote.py +241 -0
  39. queravel_cli-0.9.27/queravel_cli/research.py +106 -0
  40. queravel_cli-0.9.27/queravel_cli/router.py +54 -0
  41. queravel_cli-0.9.27/queravel_cli/scheduler.py +118 -0
  42. queravel_cli-0.9.27/queravel_cli/session.py +334 -0
  43. queravel_cli-0.9.27/queravel_cli/skills.py +222 -0
  44. queravel_cli-0.9.27/queravel_cli/subagent.py +120 -0
  45. queravel_cli-0.9.27/queravel_cli/terminal_setup.py +113 -0
  46. queravel_cli-0.9.27/queravel_cli/tools/__init__.py +4 -0
  47. queravel_cli-0.9.27/queravel_cli/tools/diagnostics.py +49 -0
  48. queravel_cli-0.9.27/queravel_cli/tools/fs.py +215 -0
  49. queravel_cli-0.9.27/queravel_cli/tools/notebook.py +63 -0
  50. queravel_cli-0.9.27/queravel_cli/tools/registry.py +434 -0
  51. queravel_cli-0.9.27/queravel_cli/tools/shell.py +146 -0
  52. queravel_cli-0.9.27/queravel_cli/tools/tasks.py +42 -0
  53. queravel_cli-0.9.27/queravel_cli/tools/web.py +207 -0
  54. queravel_cli-0.9.27/queravel_cli/tui.py +4627 -0
  55. queravel_cli-0.9.27/queravel_cli/ui.py +172 -0
  56. queravel_cli-0.9.27/queravel_cli/update.py +269 -0
  57. queravel_cli-0.9.27/queravel_cli/voice.py +340 -0
  58. queravel_cli-0.9.27/queravel_cli/workflow.py +281 -0
  59. queravel_cli-0.9.27/queravel_cli/workflow_runtime.py +326 -0
  60. queravel_cli-0.9.27/queravel_cli/worktree.py +95 -0
  61. queravel_cli-0.9.27/queravel_cli.egg-info/PKG-INFO +168 -0
  62. queravel_cli-0.9.27/queravel_cli.egg-info/SOURCES.txt +67 -0
  63. queravel_cli-0.9.27/queravel_cli.egg-info/dependency_links.txt +1 -0
  64. queravel_cli-0.9.27/queravel_cli.egg-info/entry_points.txt +2 -0
  65. queravel_cli-0.9.27/queravel_cli.egg-info/requires.txt +18 -0
  66. queravel_cli-0.9.27/queravel_cli.egg-info/top_level.txt +1 -0
  67. queravel_cli-0.9.27/setup.cfg +4 -0
  68. queravel_cli-0.9.27/tests/test_sessions.py +257 -0
  69. 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()