coderio 0.4.0__py3-none-any.whl
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.
- coderio/__init__.py +14 -0
- coderio/agent/__init__.py +5 -0
- coderio/agent/_deepagents_compat.py +139 -0
- coderio/agent/command_review.py +140 -0
- coderio/agent/deep_loop.py +758 -0
- coderio/agent/harness.py +768 -0
- coderio/agent/harness_middleware.py +293 -0
- coderio/agent/permission_middleware.py +52 -0
- coderio/agent/prompts.py +304 -0
- coderio/agent/skill_tool.py +70 -0
- coderio/agent/state.py +144 -0
- coderio/agent/stream.py +93 -0
- coderio/cli/__init__.py +0 -0
- coderio/cli/app.py +257 -0
- coderio/cli/commands.py +339 -0
- coderio/cli/credentials.py +70 -0
- coderio/cli/mcp_cmd.py +227 -0
- coderio/cli/multimodal.py +94 -0
- coderio/cli/onboarding.py +270 -0
- coderio/cli/providers.py +113 -0
- coderio/cli/render.py +28 -0
- coderio/cli/repl.py +189 -0
- coderio/cli/run_cmd.py +171 -0
- coderio/cli/skills_cmd.py +77 -0
- coderio/cli/stream.py +224 -0
- coderio/cli/tui.py +1584 -0
- coderio/cli/tui_onboarding.py +465 -0
- coderio/cli/tui_screens.py +334 -0
- coderio/cli/tui_widgets.py +453 -0
- coderio/config/__init__.py +21 -0
- coderio/config/bootstrap.py +38 -0
- coderio/config/loader.py +273 -0
- coderio/config/models.py +193 -0
- coderio/config/trust.py +136 -0
- coderio/llm/__init__.py +3 -0
- coderio/llm/factory.py +164 -0
- coderio/llm/probe.py +153 -0
- coderio/mcp_loader.py +274 -0
- coderio/session/__init__.py +3 -0
- coderio/session/message.py +79 -0
- coderio/session/store.py +244 -0
- coderio/skills/__init__.py +4 -0
- coderio/skills/bundled/executing-plans/SKILL.md +15 -0
- coderio/skills/lion-skills/LICENSE +21 -0
- coderio/skills/lion-skills/README.md +114 -0
- coderio/skills/lion-skills/skills/clarifying-questions/SKILL.md +119 -0
- coderio/skills/lion-skills/skills/clarifying-questions/evals/evals.json +40 -0
- coderio/skills/lion-skills/skills/code-review/SKILL.md +102 -0
- coderio/skills/lion-skills/skills/code-review/evals/evals.json +40 -0
- coderio/skills/lion-skills/skills/commit-message/SKILL.md +97 -0
- coderio/skills/lion-skills/skills/commit-message/evals/evals.json +20 -0
- coderio/skills/lion-skills/skills/debugging/SKILL.md +116 -0
- coderio/skills/lion-skills/skills/debugging/evals/evals.json +40 -0
- coderio/skills/lion-skills/skills/error-handling/SKILL.md +74 -0
- coderio/skills/lion-skills/skills/error-handling/evals/evals.json +20 -0
- coderio/skills/lion-skills/skills/lion-writing-skills/SKILL.md +85 -0
- coderio/skills/lion-skills/skills/lion-writing-skills/evals/evals.json +20 -0
- coderio/skills/lion-skills/skills/naming/SKILL.md +85 -0
- coderio/skills/lion-skills/skills/naming/evals/evals.json +20 -0
- coderio/skills/lion-skills/skills/onboarding-unknown-codebase/SKILL.md +95 -0
- coderio/skills/lion-skills/skills/onboarding-unknown-codebase/evals/evals.json +20 -0
- coderio/skills/lion-skills/skills/spec-writing/SKILL.md +154 -0
- coderio/skills/lion-skills/skills/spec-writing/evals/evals.json +40 -0
- coderio/skills/lion-skills/skills/task-breakdown/SKILL.md +134 -0
- coderio/skills/lion-skills/skills/task-breakdown/evals/evals.json +46 -0
- coderio/skills/lion-skills/skills/testing/SKILL.md +134 -0
- coderio/skills/lion-skills/skills/testing/evals/evals.json +40 -0
- coderio/skills/lion-skills/skills/verify-and-fix/SKILL.md +132 -0
- coderio/skills/lion-skills/skills/verify-and-fix/evals/evals.json +40 -0
- coderio/skills/models.py +66 -0
- coderio/skills/parser.py +50 -0
- coderio/skills/store.py +102 -0
- coderio/tools/__init__.py +94 -0
- coderio/tools/base.py +55 -0
- coderio/tools/bash.py +168 -0
- coderio/tools/command_policy.py +364 -0
- coderio/tools/edit_file.py +55 -0
- coderio/tools/glob_tool.py +21 -0
- coderio/tools/grep_tool.py +90 -0
- coderio/tools/linux_sandbox.py +196 -0
- coderio/tools/list_dir.py +58 -0
- coderio/tools/multi_edit.py +62 -0
- coderio/tools/note.py +72 -0
- coderio/tools/permission.py +214 -0
- coderio/tools/read_file.py +51 -0
- coderio/tools/sandbox_runner.py +113 -0
- coderio/tools/todo.py +71 -0
- coderio/tools/web_fetch.py +188 -0
- coderio/tools/web_search.py +49 -0
- coderio/tools/win_job.py +214 -0
- coderio/tools/win_sandbox.py +639 -0
- coderio/tools/write_file.py +25 -0
- coderio-0.4.0.dist-info/METADATA +490 -0
- coderio-0.4.0.dist-info/RECORD +97 -0
- coderio-0.4.0.dist-info/WHEEL +4 -0
- coderio-0.4.0.dist-info/entry_points.txt +2 -0
- coderio-0.4.0.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,490 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: coderio
|
|
3
|
+
Version: 0.4.0
|
|
4
|
+
Summary: A skill-driven coding agent — structural harness, foldable thinking TUI, deepagents engine.
|
|
5
|
+
Author: coderio contributors
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
License-File: LICENSE
|
|
8
|
+
Keywords: agent,ai-agent,cli,coding-agent,langchain,langgraph,llm,mcp,model-context-protocol,sandbox,skills,textual,tui
|
|
9
|
+
Classifier: Development Status :: 3 - Alpha
|
|
10
|
+
Classifier: Environment :: Console
|
|
11
|
+
Classifier: Intended Audience :: Developers
|
|
12
|
+
Classifier: Operating System :: MacOS
|
|
13
|
+
Classifier: Operating System :: Microsoft :: Windows
|
|
14
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
15
|
+
Classifier: Programming Language :: Python :: 3
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
19
|
+
Classifier: Topic :: Software Development :: Code Generators
|
|
20
|
+
Requires-Python: >=3.11
|
|
21
|
+
Requires-Dist: ddgs>=4.0
|
|
22
|
+
Requires-Dist: deepagents>=0.6
|
|
23
|
+
Requires-Dist: httpx>=0.27
|
|
24
|
+
Requires-Dist: langchain-anthropic>=0.2
|
|
25
|
+
Requires-Dist: langchain-core>=0.3
|
|
26
|
+
Requires-Dist: langchain-openai>=0.2
|
|
27
|
+
Requires-Dist: langchain>=0.3
|
|
28
|
+
Requires-Dist: langgraph-checkpoint-sqlite>=2.0
|
|
29
|
+
Requires-Dist: langgraph>=0.2
|
|
30
|
+
Requires-Dist: pydantic>=2
|
|
31
|
+
Requires-Dist: rich>=13
|
|
32
|
+
Requires-Dist: textual>=0.40
|
|
33
|
+
Requires-Dist: tomli-w>=1.0
|
|
34
|
+
Requires-Dist: typer>=0.12
|
|
35
|
+
Provides-Extra: dev
|
|
36
|
+
Requires-Dist: build>=1.2; extra == 'dev'
|
|
37
|
+
Requires-Dist: mypy>=1.10; extra == 'dev'
|
|
38
|
+
Requires-Dist: pytest-asyncio>=0.23; extra == 'dev'
|
|
39
|
+
Requires-Dist: pytest-cov>=4; extra == 'dev'
|
|
40
|
+
Requires-Dist: pytest>=8; extra == 'dev'
|
|
41
|
+
Requires-Dist: ruff>=0.16; extra == 'dev'
|
|
42
|
+
Provides-Extra: mcp
|
|
43
|
+
Requires-Dist: langchain-mcp-adapters>=0.3.2; extra == 'mcp'
|
|
44
|
+
Description-Content-Type: text/markdown
|
|
45
|
+
|
|
46
|
+
# coderio
|
|
47
|
+
|
|
48
|
+
[中文](README.md) | **English**
|
|
49
|
+
|
|
50
|
+
> A skill-driven coding agent — structural harness constraints, a foldable-thinking TUI, and a deepagents engine. Built on langchain + langgraph + deepagents + Lion-Skills. Windows-first, cross-platform.
|
|
51
|
+
|
|
52
|
+
## Why this project
|
|
53
|
+
|
|
54
|
+
It started as a way to spend some free tokens and walk the full langchain stack while building an agent. Once the framework was up, a plain REPL + CLI felt uninspiring, so I built a TUI — and that part I'm genuinely happy with.
|
|
55
|
+
|
|
56
|
+
The framework has not been finely tuned; it's a demo built in spare time. It's open-sourced not as a product, but as a working reference for anyone using the langchain stack: how to wire the deepagents engine, how to build structural harness constraints, how to do streaming rendering in a TUI — the code is all here, it runs, take it and play.
|
|
57
|
+
|
|
58
|
+
> About the name: **coderio = code + rio** (not coder + io). My English name is Lion; I first tried "codelion" but it felt odd, so coderio it is.
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
**coderio** is a skill-driven coding agent. Its skeleton is the [Lion-Skills](https://github.com/Lion-1209/Lion-Skills) suite (clarify → spec → task → execute → verify → commit workflow); coderio adds tools that actually get work done, a **harness layer** that enforces the workflow, and an interactive Textual TUI. The reference points are Claude Code / Codex / ZCode.
|
|
63
|
+
|
|
64
|
+
Core philosophy: **skills are the playbook, the harness is the discipline, tools are the hands.** Three layers, none substituting for another.
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## Features
|
|
69
|
+
|
|
70
|
+
- **Harness four-gate hard constraints**: when the agent writes code but declares "done" without running it, the harness intercepts termination and force-continues the loop — not a prompt-level soft rule, but a system-level structural control based on tool-call ground truth. VerifyGate parses shell exit codes (both coderio's legacy format and deepagents' native format), so failing tests no longer count as "verified"; permission-denied runs don't either; non-code files (.md/.json/.yaml docs) are intelligently skipped; CompletionGate checks for pending todos.
|
|
71
|
+
- **Explicit state machine**: execution phase derived in real time (explore → plan → implement → verify → complete), shown in the status bar; per-turn phase timelines persist to the session for replay/debugging.
|
|
72
|
+
- **deepagents engine**: production engine built on [deepagents](https://github.com/langchain-ai/deepagents) with context management (offload + summarization), subagents (task tool, incl. a read-only research subagent), a filesystem backend, and persistent checkpoints (SqliteSaver). deepagents' default prompt is fully replaced — coderio's system prompt is the only one the model sees.
|
|
73
|
+
- **Persistent checkpoints**: graph state persists to sqlite across turns; only the new message is sent (no full-history replay), and SummarizationMiddleware's accumulated state is preserved correctly.
|
|
74
|
+
- **Automatic context compaction**: deepagents' SummarizationMiddleware triggers near 60% of the context window (configurable via `[context].trigger_ratio`) — old messages are offloaded to files + LLM-summarized.
|
|
75
|
+
- **Intent classification**: CODE / QA / ANALYZE intents are auto-detected (bilingual signal words); coding tasks go through the workflow, questions are answered directly.
|
|
76
|
+
- **Progressive disclosure**: skill bodies load on demand; the system prompt stays ~2K tokens instead of piling everything in.
|
|
77
|
+
- **Interactive TUI**: Textual terminal UI with foldable thinking (Ctrl+O), streaming output, a tool-call status bar (animated spinner + step + task phase + timer + per-turn token count), slash-command autocomplete, a collapsible TODO panel (live ✓/→/○ progress), a vertical permission menu (↑↓ + Enter), session management (`/resume` + Del to delete), visual pickers (`/mode` `/profile`), file-change visualization, task interruption (Esc / ⏹ button), and error recovery.
|
|
78
|
+
- **Tool error resilience**: failed tool calls become tool results fed back to the model for self-correction instead of crashing the turn; the bash tool kills the whole process tree on timeout (Windows Job Object).
|
|
79
|
+
- **File path isolation**: the deepagents backend's `virtual_mode` confines file tools (write_file/edit_file/read_file/ls/grep/glob) to the workspace root — the agent's `/foo.py` maps to `{workdir}/foo.py`.
|
|
80
|
+
- **Command review layer**: shell (execute) commands are not covered by virtual_mode, so an additional `CommandReviewMiddleware` layer applies a built-in blacklist (`rm -rf /`, `mkfs`, fork bombs, `dd of=/dev/`, shutdown — blocked even in FULL mode) plus user-extendable `blocked_commands`. This is not a real OS sandbox (obfuscated commands can bypass regex), but it stops the vast majority of accidental damage. `network_allowed = false` disables the web tools entirely (offline mode).
|
|
81
|
+
- **SSRF-protected web_fetch**: scheme allowlist (http/https only), private/loopback/link-local IP blocking (incl. cloud metadata endpoints), per-hop redirect validation, and a 1 MB response cap.
|
|
82
|
+
- **Multi-layer OS sandbox** (Linux real isolation): `sandbox_mode = "job" | "write"` — Job Object resource limits on Windows; bubblewrap namespace isolation on Linux (read-only root, read-write workspace, optional network cutoff, Claude-Code-compatible filesystem 4-tuple `allow_write`/`deny_write`/`deny_read`/`allow_read`).
|
|
83
|
+
- **MCP support**: connect external MCP servers via `.mcp.json` (Claude Code-compatible format); stdio and HTTP transports; project-level config overrides user-level. `coderio mcp` CLI manages entries; MCP tools are gated by the permission system like built-in tools.
|
|
84
|
+
- **Repo-config trust confirmation**: first time a repository's `.coderio/config.toml` or `.mcp.json` is seen, coderio shows what it contains (permission mode, base_url, MCP commands) and requires explicit confirmation — content-hashed, so upstream edits re-trigger the prompt. Cloning a hostile repo no longer means silent arbitrary code execution.
|
|
85
|
+
- **Multiple providers + named profiles**: Zhipu GLM / StepFun coding plans (Anthropic protocol) + OpenAI-compatible endpoints; multiple profiles with runtime `/profile` switching.
|
|
86
|
+
- **Headless mode**: `coderio run "task"` for one-shot, non-interactive runs (CI, scripting, benchmark harnesses).
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## Quick start
|
|
91
|
+
|
|
92
|
+
### Install
|
|
93
|
+
|
|
94
|
+
**Option 1: pip from PyPI (recommended)**
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
pip install coderio
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
**Option 2: from GitHub**
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
pip install "coderio @ git+https://github.com/Lion-1209/coderio.git"
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
**Option 3: Release wheel (offline/intranet)**
|
|
107
|
+
|
|
108
|
+
Download the latest `coderio-*.whl` from the [Releases page](https://github.com/Lion-1209/coderio/releases), then:
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
pip install coderio-0.4.0-py3-none-any.whl
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
**Option 4: from source (developers, uv recommended)**
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
git clone https://github.com/Lion-1209/coderio.git
|
|
118
|
+
cd coderio
|
|
119
|
+
|
|
120
|
+
# uv (recommended — same as CI, deps locked in uv.lock)
|
|
121
|
+
uv sync --extra dev # creates .venv, installs exactly per uv.lock
|
|
122
|
+
uv run pytest -q # run commands via uv run
|
|
123
|
+
|
|
124
|
+
# or plain pip (does not read the lockfile; resolves latest compatible versions)
|
|
125
|
+
python -m venv .venv
|
|
126
|
+
.venv/Scripts/python.exe -m pip install -e ".[dev]" # Windows (Git Bash)
|
|
127
|
+
.venv/bin/python -m pip install -e ".[dev]" # Linux / macOS
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
Requirements: Python 3.11+; on Windows, Git Bash must be installed (the shell tool depends on it).
|
|
131
|
+
|
|
132
|
+
**Dependency management**: CI installs exactly per [uv.lock](uv.lock) via `uv sync --frozen` (reproducible); Dependabot's weekly upgrade PRs update pyproject.toml and uv.lock together. After changing dependencies, run `uv lock` and commit both files.
|
|
133
|
+
|
|
134
|
+
**MCP support** (optional): install the MCP extra to connect external MCP servers:
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
pip install "coderio[mcp]" # or: uv sync --extra dev --extra mcp
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
Without the extra, coderio works normally — `.mcp.json` is silently ignored.
|
|
141
|
+
|
|
142
|
+
### Configuration
|
|
143
|
+
|
|
144
|
+
The first interactive run triggers an onboarding wizard (pick provider, model, paste API key); config is written to `~/.coderio/config.toml` and `~/.coderio/credentials`. The wizard probes the model's context window and persists it, so compaction thresholds match the real model. Manual configuration:
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
# ~/.coderio/config.toml
|
|
148
|
+
[model]
|
|
149
|
+
provider_id = "bigmodel_coding_plan" # Zhipu/StepFun/OpenAI/Anthropic/Ollama/custom
|
|
150
|
+
default = "glm-5.2"
|
|
151
|
+
context_limit = 128000 # (optional) auto-probed by onboarding; 0 = use the default below
|
|
152
|
+
max_output_tokens = 16384 # (optional) max tokens per reply, default 16384
|
|
153
|
+
|
|
154
|
+
[tools]
|
|
155
|
+
permission_mode = "confirm" # confirm | plan | auto_edit | full
|
|
156
|
+
workspace_root = "" # shell backend CWD (empty = launch dir); file-path isolation is handled by deepagents virtual_mode
|
|
157
|
+
blocked_commands = [] # extra blacklist regexes, e.g. ["git push --force", "npm publish"]
|
|
158
|
+
network_allowed = true # false = disable web_fetch/web_search + Linux sandbox network cutoff (--unshare-net)
|
|
159
|
+
whitelist_mode = false # true = unknown commands degrade to confirm (see "Sandbox" below)
|
|
160
|
+
allowed_commands = [] # extend the built-in whitelist, e.g. ["docker", "kubectl"]
|
|
161
|
+
sandbox_mode = "off" # off | job | write (see "Sandbox" below)
|
|
162
|
+
auto_allow_if_sandboxed = false # auto-approve execute when sandbox is active (Claude Code "autoAllowBashIfSandboxed")
|
|
163
|
+
|
|
164
|
+
# Optional: sandbox filesystem isolation (Linux bubblewrap only; Windows ignores it for now)
|
|
165
|
+
[tools.sandbox_filesystem]
|
|
166
|
+
allow_write = [] # extra writable paths (workspace is always writable), e.g. ["/tmp/build", "~/.cache"]
|
|
167
|
+
deny_write = [] # forced read-only paths (even inside workspace), e.g. [".git/hooks"]
|
|
168
|
+
deny_read = [] # unreadable paths, e.g. ["~/.ssh", "~/.aws/credentials", "~/.gnupg"]
|
|
169
|
+
allow_read = [] # holes punched inside deny_read, e.g. ["~/.ssh/known_hosts"]
|
|
170
|
+
|
|
171
|
+
[context]
|
|
172
|
+
enabled = true # long-session auto-compaction (on by default)
|
|
173
|
+
trigger_ratio = 0.6 # trigger at 60% of the context window
|
|
174
|
+
keep_recent = 8 # keep the most recent N messages verbatim
|
|
175
|
+
model_context_limit = 200000 # fallback when the profile has no probed context_limit
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
**MCP configuration** (`.mcp.json`, Claude-Code-compatible):
|
|
179
|
+
|
|
180
|
+
Place `.mcp.json` in the project root (project scope) or `~/.coderio/mcp.json` (user scope). Configured servers and their tools load at startup:
|
|
181
|
+
|
|
182
|
+
```json
|
|
183
|
+
{
|
|
184
|
+
"mcpServers": {
|
|
185
|
+
"filesystem": {
|
|
186
|
+
"command": "npx",
|
|
187
|
+
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"]
|
|
188
|
+
},
|
|
189
|
+
"github": {
|
|
190
|
+
"type": "http",
|
|
191
|
+
"url": "https://api.githubcopilot.com/mcp/",
|
|
192
|
+
"headers": { "Authorization": "Bearer ghp_xxx" }
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
- **stdio servers**: `{command, args, env?, cwd?, timeoutMs?, enabled?}` — spawn a local subprocess (e.g. npx-run server-filesystem)
|
|
199
|
+
- **HTTP servers**: `{type: "http", url, headers?, timeoutMs?, enabled?}` — connect to a remote MCP endpoint
|
|
200
|
+
- **SSE servers**: `{type: "sse", url, headers?, timeoutMs?, enabled?}`
|
|
201
|
+
- **type inference**: omit `type` — a `command` implies stdio, a `url` implies http
|
|
202
|
+
- Tool names are prefixed with the server name (e.g. `filesystem_read_file`), never colliding with built-in tools
|
|
203
|
+
- Failed servers are skipped with a warning — startup is never blocked
|
|
204
|
+
- Requires the MCP extra: `pip install "coderio[mcp]"`
|
|
205
|
+
|
|
206
|
+
Optional fields (ZCode-compatible):
|
|
207
|
+
- `enabled: false` — temporarily disable a server without removing its config
|
|
208
|
+
- `cwd` — stdio subprocess working directory (often needed for npx/node on Windows)
|
|
209
|
+
- `timeoutMs` — per-request timeout in ms; forwarded to the adapter as `timeout` (seconds)
|
|
210
|
+
- Legacy field aliases auto-migrate: `enable`→`enabled`, `environment`→`env`, `http_headers`→`headers`, `type:"remote"`→`http`
|
|
211
|
+
|
|
212
|
+
**CLI management** (`coderio mcp`):
|
|
213
|
+
|
|
214
|
+
```bash
|
|
215
|
+
# Add a stdio server to the project .mcp.json
|
|
216
|
+
coderio mcp add filesystem --command npx --arg -y --arg @modelcontextprotocol/server-filesystem --arg /tmp
|
|
217
|
+
|
|
218
|
+
# Add an HTTP server to the user config
|
|
219
|
+
coderio mcp add github --type http --url https://api.githubcopilot.com/mcp/ --scope user
|
|
220
|
+
|
|
221
|
+
# List all configured servers (project + user)
|
|
222
|
+
coderio mcp list
|
|
223
|
+
|
|
224
|
+
# Remove a server
|
|
225
|
+
coderio mcp remove filesystem
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
**MCP tool permissions**: MCP tool names containing `write`/`create`/`delete`/`execute`/`run`/`fetch`/`request` (and similar keywords) are treated as destructive by the permission system (rejected in PLAN, prompted in CONFIRM, allowed in FULL) — same as built-in tools. Read-only MCP tools (`read`/`get`/`list`/`query`) pass in all modes.
|
|
229
|
+
|
|
230
|
+
**Sandbox & command security** (defense in depth):
|
|
231
|
+
|
|
232
|
+
coderio applies multiple security layers to shell (`execute`) commands, lightest to heaviest:
|
|
233
|
+
|
|
234
|
+
| Layer | Mechanism | Config | Strength |
|
|
235
|
+
|---|---|---|---|
|
|
236
|
+
| 1. Blacklist | Regex-blocks destructive commands (`rm -rf /`, `mkfs`, fork bombs, ...), even in FULL mode | `[tools].blocked_commands` extends | Accident prevention; bypassable via base64/variables |
|
|
237
|
+
| 2. Whitelist | Unknown commands (not in the ~60 built-in dev commands) degrade to confirm | `[tools].whitelist_mode = true` | Stronger (unknown commands prompt); still bypassable |
|
|
238
|
+
| 3. OS sandbox | Kernel-level isolation — the process physically lacks the permission to write outside bounds | `[tools].sandbox_mode` | The real security boundary |
|
|
239
|
+
|
|
240
|
+
`sandbox_mode` levels:
|
|
241
|
+
|
|
242
|
+
- **`off`** (default): no OS sandbox; blacklist + whitelist only. Existing behavior.
|
|
243
|
+
- **`job`**: Windows Job Object / POSIX process group + resource limits (process-count cap prevents fork bombs) + reliable process-tree kill. No file isolation, but stops resource abuse.
|
|
244
|
+
- **`write`**: file-write isolation.
|
|
245
|
+
- **Linux**: ✅ **real isolation** — `bubblewrap` (`bwrap`), the same approach as Claude Code on Linux. Read-only root mount, read-write workspace, `--unshare-net` when `network_allowed=false`. Requires `apt install bubblewrap`.
|
|
246
|
+
- **Windows**: ⚠️ **currently equivalent to `job`**. The `CreateRestrictedToken` + `CreateProcessAsUserW` plumbing is in place, but on non-admin accounts the token is a no-op (verified: original and restricted tokens both have Medium integrity — identical write permissions). True isolation needs per-directory ACLs (~500 lines), tracked as future work. **Windows users currently have no OS-level write isolation** — use `job`; `write` provides no extra protection.
|
|
247
|
+
|
|
248
|
+
```toml
|
|
249
|
+
# Recommended: job for daily dev (fork-bomb prevention + reliable cleanup)
|
|
250
|
+
# Linux users wanting real isolation: sandbox_mode = "write" (needs bubblewrap)
|
|
251
|
+
sandbox_mode = "job"
|
|
252
|
+
whitelist_mode = true
|
|
253
|
+
allowed_commands = ["docker", "kubectl"] # commands outside the whitelist trigger confirm
|
|
254
|
+
|
|
255
|
+
# Advanced: auto-approve shell commands when the sandbox is active (fewer prompts)
|
|
256
|
+
# This is Claude Code's "autoAllowBashIfSandboxed" design — the sandbox provides the
|
|
257
|
+
# real isolation boundary, so per-command prompts become noise. The blacklist still applies.
|
|
258
|
+
auto_allow_if_sandboxed = true
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
**Permission-sandbox interplay** (Claude Code "autoAllowBashIfSandboxed" design):
|
|
262
|
+
- Default (`auto_allow_if_sandboxed = false`): even with the sandbox on, every execute still prompts (backward compatible)
|
|
263
|
+
- `true`: execute auto-approves when the sandbox is active — the sandbox is the boundary, prompts are noise
|
|
264
|
+
- **The blacklist always applies**: `rm -rf /` is blocked even under sandbox + auto_allow (CommandReviewMiddleware is independent of the permission gate)
|
|
265
|
+
- **PLAN mode is unaffected**: PLAN is always read-only; the sandbox doesn't change that contract
|
|
266
|
+
|
|
267
|
+
**Linux filesystem 4-tuple isolation** (`[tools.sandbox_filesystem]`, bubblewrap only):
|
|
268
|
+
```toml
|
|
269
|
+
[tools.sandbox_filesystem]
|
|
270
|
+
# Keep secrets away from sandboxed processes (the real prompt-injection exfiltration threat)
|
|
271
|
+
deny_read = ["~/.ssh", "~/.aws/credentials", "~/.gnupg"]
|
|
272
|
+
allow_read = ["~/.ssh/known_hosts"] # punch a hole (SSH connection verification still works)
|
|
273
|
+
allow_write = ["/tmp/build", "~/.cache"] # extra writable paths
|
|
274
|
+
deny_write = [".git/hooks"] # forced read-only even inside the workspace
|
|
275
|
+
```
|
|
276
|
+
Paths support `~` (home), `./` or bare (workspace-relative), `/abs` (absolute). The `deny_read` tmpfs blackhole **must** mount before the `allow_read` ro-bind (later bwrap mounts override earlier ones) — the code guarantees this order.
|
|
277
|
+
|
|
278
|
+
**Security model, honestly stated**:
|
|
279
|
+
- **The blacklist/whitelist are accident prevention, NOT adversarial defense.** They intercept unintended destructive commands (wrong paths, missed consequences) but are **not a security boundary** — variable expansion (`X=/; rm -rf $X`), base64 encoding, and shell composition (`ls ; curl ... | sh`) all bypass regex matching. Real adversarial protection comes from the OS sandbox (Linux bubblewrap / `write` mode) + permission prompts; use a VM for hostile code. Do not trust untrusted code just because "a blacklist is configured".
|
|
280
|
+
- `job` mode: resource limits + process control, not a permission sandbox.
|
|
281
|
+
- `write` on Linux: bubblewrap provides full namespace isolation (out of the box) + the filesystem 4-tuple for fine-grained control.
|
|
282
|
+
- `write` on Windows: **no actual isolation effect today** (token is a no-op); equivalent to `job`. Real isolation awaits the ACL work.
|
|
283
|
+
- Whitelist degradation: in CONFIRM/AUTO_EDIT modes, commands outside the whitelist **run but carry a `[whitelist]` annotation** in the result (so the model/user knows the command is outside the trusted set); PLAN hard-rejects; FULL allows silently.
|
|
284
|
+
- For **fully untrusted code**, use a VM (Windows Sandbox / Docker) — do not rely on this sandbox.
|
|
285
|
+
|
|
286
|
+
Supported providers:
|
|
287
|
+
| provider_id | Description | Protocol |
|
|
288
|
+
|---|---|---|
|
|
289
|
+
| `bigmodel_coding_plan` | Zhipu GLM Coding Plan | Anthropic |
|
|
290
|
+
| `stepfun_coding_plan` | StepFun Step Plan | Anthropic |
|
|
291
|
+
| `bigmodel_api` / `stepfun_api` | Zhipu/StepFun direct API key | Anthropic / OpenAI |
|
|
292
|
+
| `openai` | OpenAI direct | OpenAI |
|
|
293
|
+
| `anthropic` | Anthropic Claude direct | Anthropic |
|
|
294
|
+
| `ollama` | Local Ollama (no key) | OpenAI |
|
|
295
|
+
| `openai_custom` | any OpenAI-compatible endpoint | OpenAI |
|
|
296
|
+
|
|
297
|
+
API keys live in `~/.coderio/credentials` (POSIX 0600 / Windows icacls protected).
|
|
298
|
+
|
|
299
|
+
### Running
|
|
300
|
+
|
|
301
|
+
```bash
|
|
302
|
+
# Interactive TUI (Ctrl+O unfolds thinking, scrollable history, / autocomplete)
|
|
303
|
+
coderio
|
|
304
|
+
# or directly (Windows)
|
|
305
|
+
.venv/Scripts/python.exe -m coderio.cli.app
|
|
306
|
+
# (Linux / macOS)
|
|
307
|
+
.venv/bin/python -m coderio.cli.app
|
|
308
|
+
|
|
309
|
+
# Specify provider/model
|
|
310
|
+
coderio --provider bigmodel_coding_plan --model glm-5.2
|
|
311
|
+
|
|
312
|
+
# Headless one-shot run (CI / scripting / benchmarks)
|
|
313
|
+
coderio run "write a hello-world script and test it"
|
|
314
|
+
coderio run "fix the failing test in tests/foo.py" --quiet # final result only
|
|
315
|
+
coderio run "continue" --session-id <id> # resume a session
|
|
316
|
+
|
|
317
|
+
# Manage skills (install pulls from GitHub; needs git on PATH)
|
|
318
|
+
coderio skills list
|
|
319
|
+
coderio skills install
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
---
|
|
323
|
+
|
|
324
|
+
## TUI commands
|
|
325
|
+
|
|
326
|
+
Inside the TUI, type `/` to trigger autocomplete:
|
|
327
|
+
|
|
328
|
+
| Command | Effect |
|
|
329
|
+
|------|------|
|
|
330
|
+
| `/help` | list all commands |
|
|
331
|
+
| `/exit` `/quit` | quit |
|
|
332
|
+
| `/config` | show current config (provider/model/mode) |
|
|
333
|
+
| `/mode` | switch permission mode (no arg opens a visual picker: confirm/plan/auto) |
|
|
334
|
+
| `/model <name>` | switch model at runtime |
|
|
335
|
+
| `/setup` | reconfigure provider/model (onboarding wizard, auto context-window probe) |
|
|
336
|
+
| `/profile` | switch saved config profiles (visual picker) |
|
|
337
|
+
| `/skills` | list skills (★ = activated) |
|
|
338
|
+
| `/cost` | show session token usage |
|
|
339
|
+
| `/clear` | reset context (fresh session) |
|
|
340
|
+
| `/sessions` | list recent sessions |
|
|
341
|
+
| `/resume` | resume a past session (↑↓ select, Enter resume, type to filter) |
|
|
342
|
+
| `/think` | unfold the latest turn's thinking |
|
|
343
|
+
| `/export [path]` | export the session to markdown |
|
|
344
|
+
|
|
345
|
+
**Shortcuts**:
|
|
346
|
+
|
|
347
|
+
| Key | Effect |
|
|
348
|
+
|------|------|
|
|
349
|
+
| `Ctrl+O` | unfold/fold the latest turn's thinking |
|
|
350
|
+
| `Esc` / `⏹ stop` | interrupt the running agent task (TUI stays up) |
|
|
351
|
+
| `↑↓` + `Enter` | command menu navigation (opens on `/`) |
|
|
352
|
+
|
|
353
|
+
Just type natural language to chat or assign coding tasks.
|
|
354
|
+
|
|
355
|
+
---
|
|
356
|
+
|
|
357
|
+
## Architecture
|
|
358
|
+
|
|
359
|
+
Layered monolith, dependencies flow downward:
|
|
360
|
+
|
|
361
|
+
```
|
|
362
|
+
CLI (cli/) Typer app + Textual TUI + slash commands
|
|
363
|
+
│
|
|
364
|
+
Agent (agent/) deepagents engine + harness/permission middleware + prompt building
|
|
365
|
+
│
|
|
366
|
+
Capabilities tools/ · skills/ · llm/ · session/ · config/
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
### Engine: deepagents + coderio middleware
|
|
370
|
+
|
|
371
|
+
coderio uses deepagents as the engine (context management, subagents, filesystem backend) and layers middlewares on top:
|
|
372
|
+
|
|
373
|
+
| Middleware | Role |
|
|
374
|
+
|---|---|
|
|
375
|
+
| **HarnessMiddleware** | coderio's four-gate hard constraints (verify/completion/grounding/plan) — deepagents itself does not enforce verification |
|
|
376
|
+
| **PermissionMiddleware** | four permission tiers (plan/confirm/auto_edit/full) — controls which tools may execute |
|
|
377
|
+
| **CommandReviewMiddleware** | content-level review: built-in destructive-command blacklist (active even in FULL mode) + SSRF/network policies |
|
|
378
|
+
|
|
379
|
+
deepagents' default BASE_AGENT_PROMPT is neutralized — coderio's system prompt stands alone, no conflicts.
|
|
380
|
+
|
|
381
|
+
**Subagents**: built-in research subagent (read-only, physically isolated — cannot write or execute) + general-purpose (full tools, carrying the same Harness/Permission/CommandReview middleware as the main agent). The main agent delegates via the task tool; contexts are isolated.
|
|
382
|
+
|
|
383
|
+
The old ReAct engine has been removed — deepagents is the only engine.
|
|
384
|
+
|
|
385
|
+
### The harness four gates (core)
|
|
386
|
+
|
|
387
|
+
| Gate | Strength | Mechanism |
|
|
388
|
+
|----|------|------|
|
|
389
|
+
| **VerifyGate** | hard, escalating | claims "done" after writing code without running it → intercepted, forced continuation; parses shell exit codes — **failing tests (non-zero) do not count as verified**; writing docs/configs (.md/.json/.yaml) doesn't trigger verification; releases after 2 interceptions + a red warning |
|
|
390
|
+
| **CompletionGate** | hard | claims "done" with pending todos → intercepted |
|
|
391
|
+
| **GroundingGate** | hard (CODE mode only) | after writing code, cites files never read via read_file → intercepted; **ANALYZE mode skips it** — mentioning filenames in an analysis is normal (based on a 105-session audit: 98.2% false-positive rate, never caught a real hallucinated citation) |
|
|
392
|
+
| **PlanGate** | soft nudge | writes code without a todo list → appends a nudge to the tool result |
|
|
393
|
+
|
|
394
|
+
### Context governance
|
|
395
|
+
|
|
396
|
+
deepagents' SummarizationMiddleware manages context automatically:
|
|
397
|
+
|
|
398
|
+
| Mechanism | Trigger | Behavior |
|
|
399
|
+
|------|------|------|
|
|
400
|
+
| **offload** | tool input/output >20K tokens | large blocks saved to disk + pointer left, context preserved |
|
|
401
|
+
| **summarize** | tokens reach 60% of the window (configurable `trigger_ratio`) | old messages LLM-summarized + originals offloaded to `/conversation_history/` |
|
|
402
|
+
| **checkpoint** | every turn end | graph state persisted to sqlite; next turn sends only the new message |
|
|
403
|
+
|
|
404
|
+
### Explicit state machine
|
|
405
|
+
|
|
406
|
+
The agent's execution phase is derived live and shown in the status bar (`step 3 · [implement] thinking · 12.4s`):
|
|
407
|
+
|
|
408
|
+
```
|
|
409
|
+
explore (read_file/grep) → plan (first write, no todos) → implement (write + todos)
|
|
410
|
+
→ verify (bash pytest) → complete
|
|
411
|
+
```
|
|
412
|
+
|
|
413
|
+
Each turn's phase timeline persists to the session jsonl (`kind="phase_timeline"`) for replay/debugging, but stays invisible to the model (never pollutes context).
|
|
414
|
+
|
|
415
|
+
Full architecture: [`docs/coderio-architecture.md`](docs/coderio-architecture.md).
|
|
416
|
+
|
|
417
|
+
---
|
|
418
|
+
|
|
419
|
+
## Testing
|
|
420
|
+
|
|
421
|
+
```bash
|
|
422
|
+
# Full unit test suite (~15s)
|
|
423
|
+
# Windows (Git Bash):
|
|
424
|
+
.venv/Scripts/python.exe -m pytest -q
|
|
425
|
+
# Linux / macOS:
|
|
426
|
+
.venv/bin/python -m pytest -q
|
|
427
|
+
|
|
428
|
+
# By module
|
|
429
|
+
.venv/Scripts/python.exe -m pytest tests/agent/ -v # Windows
|
|
430
|
+
.venv/bin/python -m pytest tests/agent/ -v # Linux / macOS
|
|
431
|
+
|
|
432
|
+
# Live verification (real model endpoint; requires ANTHROPIC_API_KEY)
|
|
433
|
+
# harness four gates against a real model:
|
|
434
|
+
ANTHROPIC_API_KEY=<key> .venv/Scripts/python.exe scripts/verify_harness_live.py # Windows
|
|
435
|
+
ANTHROPIC_API_KEY=<key> .venv/bin/python scripts/verify_harness_live.py # Linux / macOS
|
|
436
|
+
# deepagents engine integration:
|
|
437
|
+
ANTHROPIC_API_KEY=<key> .venv/Scripts/python.exe scripts/verify_deepagent_live.py # Windows
|
|
438
|
+
```
|
|
439
|
+
|
|
440
|
+
Three test layers: unit tests (logic) + live verification (real integration) + manual experience testing.
|
|
441
|
+
|
|
442
|
+
---
|
|
443
|
+
|
|
444
|
+
## Tech stack
|
|
445
|
+
|
|
446
|
+
| Dependency | Purpose |
|
|
447
|
+
|------|------|
|
|
448
|
+
| langchain >=0.3 | agent foundation |
|
|
449
|
+
| langgraph >=0.2 | state-graph orchestration |
|
|
450
|
+
| langchain-anthropic >=0.2 | Zhipu/StepFun endpoints (Anthropic protocol) |
|
|
451
|
+
| textual >=0.40 | interactive TUI |
|
|
452
|
+
| rich >=13 | terminal rendering |
|
|
453
|
+
| typer >=0.12 | CLI framework |
|
|
454
|
+
| deepagents >=0.6 | production engine (context management, subagents, filesystem backend) |
|
|
455
|
+
|
|
456
|
+
---
|
|
457
|
+
|
|
458
|
+
## Project structure
|
|
459
|
+
|
|
460
|
+
```
|
|
461
|
+
src/coderio/
|
|
462
|
+
├── agent/ # deepagents engine, harness/permission middleware, prompts, stream protocol
|
|
463
|
+
├── cli/ # Typer app, Textual TUI, slash commands, credentials/onboarding, headless run
|
|
464
|
+
├── tools/ # tool set + permission gate + langchain adapters + sandbox
|
|
465
|
+
├── skills/ # SkillStore 3-layer loading + Lion-Skills (bundled)
|
|
466
|
+
├── config/ # 3-layer TOML config merge + repo trust
|
|
467
|
+
├── session/ # jsonl session storage + resume
|
|
468
|
+
└── llm/ # model factory (provider registry)
|
|
469
|
+
```
|
|
470
|
+
|
|
471
|
+
Lion-Skills ship as bundled skills (`src/coderio/skills/lion-skills/`) — no separate install needed.
|
|
472
|
+
|
|
473
|
+
---
|
|
474
|
+
|
|
475
|
+
## Known limitations
|
|
476
|
+
|
|
477
|
+
- **Windows encoding**: shell output under GBK locales has a built-in mitigation (`_WinLocalShellBackend` decodes bytes with errors='replace')
|
|
478
|
+
- **Windows write sandbox**: `sandbox_mode = "write"` is currently equivalent to `job` on Windows (documented above under Sandbox)
|
|
479
|
+
|
|
480
|
+
---
|
|
481
|
+
|
|
482
|
+
## Contributing
|
|
483
|
+
|
|
484
|
+
Contributions welcome! See [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
485
|
+
|
|
486
|
+
---
|
|
487
|
+
|
|
488
|
+
## License
|
|
489
|
+
|
|
490
|
+
MIT (see [LICENSE](LICENSE)). Bundled Lion-Skills are also MIT (see [THIRD_PARTY_LICENSES.md](THIRD_PARTY_LICENSES.md)).
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
coderio/__init__.py,sha256=IBcx61GkSme78wZcxj2sOkaVOSLsDJyjPT0-FRH2XFo,686
|
|
2
|
+
coderio/mcp_loader.py,sha256=dK0BLvPbip636FQy_FSGTEmlp_BdT9N4CU0lu3GkMjw,10059
|
|
3
|
+
coderio/agent/__init__.py,sha256=dZQ7YPHC4JCSsJtJCI2C5s0Ing7fr8oaI6_jcveMEwE,255
|
|
4
|
+
coderio/agent/_deepagents_compat.py,sha256=q3xM_Y6wm2gcLZpE1y_1Y30QLyGYDnB-cF4IE-pqRvo,6175
|
|
5
|
+
coderio/agent/command_review.py,sha256=HSeUtKa9h9k7SeEHnI5OSpSh-th2amneJWX1L_3myns,7057
|
|
6
|
+
coderio/agent/deep_loop.py,sha256=Is5Lmj4n_3PdyV0eVK4k63F7lLUruKSSO0395m3u7ck,35859
|
|
7
|
+
coderio/agent/harness.py,sha256=UkxdvXqUUl-xLdqJj3sgzxlL16u_1tWYFndCXJMgL0s,36781
|
|
8
|
+
coderio/agent/harness_middleware.py,sha256=5t39aS0kfVNLoFdAljyxEzLT9nGWunfx59QL9DnQJX8,14616
|
|
9
|
+
coderio/agent/permission_middleware.py,sha256=MSeLJ2WK4rjw7X4xUxLojk7IMS07XyUjMFN2xsxMyzE,2113
|
|
10
|
+
coderio/agent/prompts.py,sha256=ZeXmmEAC2crDKsxBuQEAREIPmx8K2tVmv8G71940HzY,17769
|
|
11
|
+
coderio/agent/skill_tool.py,sha256=sdO-nYrac2c4oR-yS3rh8XKG7nfTXfChBDElukJlaLc,2743
|
|
12
|
+
coderio/agent/state.py,sha256=t9zkGTAk98NYam-zYLZ326hGSNPCx_KfQo1wZRTFliw,5568
|
|
13
|
+
coderio/agent/stream.py,sha256=oTtA16jmqD2t9gZWvE6qB1DfyaHPRuyp-Das3sHEq8A,3464
|
|
14
|
+
coderio/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
15
|
+
coderio/cli/app.py,sha256=1YbnMjTzj3jLZTXmoZBnaN3Y7hLUbvI4mGqjDvWt5-g,8960
|
|
16
|
+
coderio/cli/commands.py,sha256=2T_bMeyWhJ63FfKbobim0b-e0odpK4wTN2e_jyXlSKA,13934
|
|
17
|
+
coderio/cli/credentials.py,sha256=cv8GrBDuHDxU1gsvt91ZUT-8opq57FTCVfCCTLCJfR0,2298
|
|
18
|
+
coderio/cli/mcp_cmd.py,sha256=z7a6qp6c89ysT1fuHVzNQ03CvGfpqqQzt8tJrnHjyTo,7485
|
|
19
|
+
coderio/cli/multimodal.py,sha256=4KXat-d1jJZKfLRutfahQK03NzIdOaRbmaup_dGV-v4,3199
|
|
20
|
+
coderio/cli/onboarding.py,sha256=vIvVoWre0zwgZSc_8PwiTMmEfeAsoyhuMPiF06OrrS0,10891
|
|
21
|
+
coderio/cli/providers.py,sha256=pYGonvbjNTtPn62tUwPPNNVAuyZbg8zqZwtgXg2aydE,3525
|
|
22
|
+
coderio/cli/render.py,sha256=6HlDvoOi3bitq-2PPYUCkerKQzS6b7hsuY7fShHEvik,824
|
|
23
|
+
coderio/cli/repl.py,sha256=aEAaaRckV1WcyAkP7WE-RRnUVa_qFGbTuHUCo5U6Wo4,6995
|
|
24
|
+
coderio/cli/run_cmd.py,sha256=Q5nT9RZW5L__MCNeaAYhG3ht9vvfgX1uBw25CCXFa-A,6207
|
|
25
|
+
coderio/cli/skills_cmd.py,sha256=7BeahSELRqZR9akNXK6t3Bb4V73y0KJuX2OIePJbX4M,2423
|
|
26
|
+
coderio/cli/stream.py,sha256=flvENJ7-I-Osr5cZdBY08Hoe8h0dYzE8fAalPHNMTYc,8445
|
|
27
|
+
coderio/cli/tui.py,sha256=LdiraaS_r_ZkPEDj_4TM9Od_5dQ8XBBHtMkT-KZYqYU,70863
|
|
28
|
+
coderio/cli/tui_onboarding.py,sha256=c1ArjcOz1WjMwZ7H-pTyIJSeApoBTUe7xKIkp_ELVig,19598
|
|
29
|
+
coderio/cli/tui_screens.py,sha256=FphUhjWhm10YZfdifTY7d9O1nsKzUyVgB6LiXDsUkhc,13084
|
|
30
|
+
coderio/cli/tui_widgets.py,sha256=-PHP4nxgla_RnulmYiqPsoo0f6SKR-3G3iiUe5PboRM,19016
|
|
31
|
+
coderio/config/__init__.py,sha256=UkLeKyXEHfe2NqZpxS8d60SPaAI_neweOGnvmjvgbAM,362
|
|
32
|
+
coderio/config/bootstrap.py,sha256=Ug8alY6A-BQbyE4Cdwy1vibdyzzS-Ry0VBmCwtj-CG8,1165
|
|
33
|
+
coderio/config/loader.py,sha256=IMUSmr9RXlAQCOLLy3XViFksv8x0OrrwNM8pjuCq77Q,10749
|
|
34
|
+
coderio/config/models.py,sha256=PVOle3mGZl1KwP1MdbQAzDgRV4dp46i_62cKg0nIr9E,8778
|
|
35
|
+
coderio/config/trust.py,sha256=nVsXRvPUNcNCWCUhFgCYx-ANeoLlk2FpK2nuRe8EPMY,5720
|
|
36
|
+
coderio/llm/__init__.py,sha256=M6Xat7TaB5Lo3KEvqdsYbtv5Ksi4H2W5nssmwvVI73g,81
|
|
37
|
+
coderio/llm/factory.py,sha256=izaFfKSWE278Nx0u-zvXCbD6GGxG_lJMzkYEHbYmQOI,6570
|
|
38
|
+
coderio/llm/probe.py,sha256=ooWAlL0cU6rcU5kx_H6wXk2mm7ms-jFJK3UB5G1IpbI,5672
|
|
39
|
+
coderio/session/__init__.py,sha256=Cxi6gVbZG11jR0SyCyUT_EpKTz56gbJ8WwsO73X1zZg,89
|
|
40
|
+
coderio/session/message.py,sha256=uvjMxbUYtPwf-lk5mTZ_NAACLxVvO5QUI5HWV9K3pwg,2991
|
|
41
|
+
coderio/session/store.py,sha256=QDUyPc4mOYj42h3FcA__CZ-72QriVNlM_RjCNPY0Ec0,9892
|
|
42
|
+
coderio/skills/__init__.py,sha256=-pFpMNAURGF6ZlZ4z0qnTXlXV_mulwPXamlm_hqtQsI,132
|
|
43
|
+
coderio/skills/models.py,sha256=kufhhfi2jDDBuYaFmnQCB2ZiLnEcp3H29Ag8RgWP6WQ,2443
|
|
44
|
+
coderio/skills/parser.py,sha256=I8yiTkTOh7Dqb1TI6kWaa3b9rufl5wbxFmjLcKCInFo,1386
|
|
45
|
+
coderio/skills/store.py,sha256=j4JlGEtNxiPgd7LoNJ_Ma7HnlvkpxQpmKulL7M3yAhs,3669
|
|
46
|
+
coderio/skills/bundled/executing-plans/SKILL.md,sha256=NaG6teTm9NYMZIfzycJnyduNwzfQqdm2fWNWMf13r5s,681
|
|
47
|
+
coderio/skills/lion-skills/LICENSE,sha256=MpcHa7llf6sBOH_mzaHLaPxA9qt11JnxDqbkJS6Bfc8,1061
|
|
48
|
+
coderio/skills/lion-skills/README.md,sha256=goYuG18lO3AyR3GMNEes0jyggGqhCFToEHYcW_otNbA,5047
|
|
49
|
+
coderio/skills/lion-skills/skills/clarifying-questions/SKILL.md,sha256=DJutzNge4NlgCS9nrU119ippOdkK_ZK2FQvbDW5Yuf4,10568
|
|
50
|
+
coderio/skills/lion-skills/skills/clarifying-questions/evals/evals.json,sha256=HZoWAimIVIZiUnCfIK8m8l6yI93BGkoqtnUvXeqZl8g,3912
|
|
51
|
+
coderio/skills/lion-skills/skills/code-review/SKILL.md,sha256=1gpgBZcjJkiooGDu6XCp3l0gX9FLp25oSGmG6QxjmSw,8091
|
|
52
|
+
coderio/skills/lion-skills/skills/code-review/evals/evals.json,sha256=y6ftftk_xCWggzVcvwyfytZnfGL98mkemi-Ht0JxZLs,3772
|
|
53
|
+
coderio/skills/lion-skills/skills/commit-message/SKILL.md,sha256=gTedC9Pmx_52uYefvxrlF1dth45YinpBTl7SUK5M5bI,4236
|
|
54
|
+
coderio/skills/lion-skills/skills/commit-message/evals/evals.json,sha256=mqLa0sT9yQBvR4zTuCm1-GY3ekSvOZZxVRueIWMUYq0,889
|
|
55
|
+
coderio/skills/lion-skills/skills/debugging/SKILL.md,sha256=kLvI74dGzpONbCilYqYeAfABZFgbnfb8rxD9raR6-ms,9088
|
|
56
|
+
coderio/skills/lion-skills/skills/debugging/evals/evals.json,sha256=8mGV1m5lLyomxbD7zNt2fUVfnORChGt7YgdjAJnWz_w,4031
|
|
57
|
+
coderio/skills/lion-skills/skills/error-handling/SKILL.md,sha256=tbLc0MO66U_it3IeGWRBZv7DWRAmRuzW9YAJu8rPmJA,5022
|
|
58
|
+
coderio/skills/lion-skills/skills/error-handling/evals/evals.json,sha256=gdXBLvLNsudO6dChYA4feG65UilaQonpv04gPxmOfr8,1186
|
|
59
|
+
coderio/skills/lion-skills/skills/lion-writing-skills/SKILL.md,sha256=fANsRU7gLCnvw3xRfOEUjbBM8naz-KXd4naaYuJW7fg,5980
|
|
60
|
+
coderio/skills/lion-skills/skills/lion-writing-skills/evals/evals.json,sha256=DC1Vh6IHr7TsT5q5j4g51J5EncHZHJbUrc2ZdIhmrpc,865
|
|
61
|
+
coderio/skills/lion-skills/skills/naming/SKILL.md,sha256=a6E8-29vSqFRRNktiubbEEChsAXGhE_vbMBewjz6KBI,4548
|
|
62
|
+
coderio/skills/lion-skills/skills/naming/evals/evals.json,sha256=7V3V6h-78Mxof8qCxC5lThexqFob1s6JWcTYVYP-cBw,881
|
|
63
|
+
coderio/skills/lion-skills/skills/onboarding-unknown-codebase/SKILL.md,sha256=4cPg0_phJodUNvZSgIJ5dKOfC87E9SKgBX2W8QcJcYA,4851
|
|
64
|
+
coderio/skills/lion-skills/skills/onboarding-unknown-codebase/evals/evals.json,sha256=O2klgyXuF7xJ765IymwbCMVcLzH4FrV0YGr6uEauGbA,1064
|
|
65
|
+
coderio/skills/lion-skills/skills/spec-writing/SKILL.md,sha256=OOxWWXW5weBlYmhDYWjYzeBAguNsDcEJbrVWsA97ibA,12322
|
|
66
|
+
coderio/skills/lion-skills/skills/spec-writing/evals/evals.json,sha256=maqYgHYsg5pN0ZZ8JLu5w5nXG62cVjSs4JA7ZEPObro,4554
|
|
67
|
+
coderio/skills/lion-skills/skills/task-breakdown/SKILL.md,sha256=PQ6lkbKrQEy4WgepCkvamnYvIWaAPQ89ZO6G9YVbAtU,11217
|
|
68
|
+
coderio/skills/lion-skills/skills/task-breakdown/evals/evals.json,sha256=Ph1jlDgukA6Y0HwncezXQBNNEMss3_JIo93hfOS4NnI,4499
|
|
69
|
+
coderio/skills/lion-skills/skills/testing/SKILL.md,sha256=zxugv11K-1ihpHd1xrVvtE7zcMAf_iOg3gsLig3D5rU,9620
|
|
70
|
+
coderio/skills/lion-skills/skills/testing/evals/evals.json,sha256=vqNj1S5iiS9JfyyOo9lpVw_IulmjdgXnOwDjxettdrQ,4107
|
|
71
|
+
coderio/skills/lion-skills/skills/verify-and-fix/SKILL.md,sha256=10wOZRBQhsNeRPnDlf4OfSZjXimOOYmQYb-ZAeJPnIg,10453
|
|
72
|
+
coderio/skills/lion-skills/skills/verify-and-fix/evals/evals.json,sha256=W2nrGFJ4hcyr64O4vCW263sRPNr5j3ABg0QUYdEY7Uk,4565
|
|
73
|
+
coderio/tools/__init__.py,sha256=WauD3S1KrsaUn1Bsr9RZaCzx4m_PpdWn9qPEESv8keo,2898
|
|
74
|
+
coderio/tools/base.py,sha256=cSDh5gBb4WfAh5mE5WhlefsMl4vMd707SkW-O4pMS58,2220
|
|
75
|
+
coderio/tools/bash.py,sha256=zk2CvYhc5NpXrsocTk_3VcJXgO71RP_ExwBAb4nC7DA,7142
|
|
76
|
+
coderio/tools/command_policy.py,sha256=2gHsBfRizkSjI1iGq5oFZ87KfPKsGk3RtGQq_acBHxs,14753
|
|
77
|
+
coderio/tools/edit_file.py,sha256=iFVblW_RFFwC8Wet9q9786cHsrcGanFB9vw0lTJCggA,2308
|
|
78
|
+
coderio/tools/glob_tool.py,sha256=xZJnzZDa_XdTmrpS8Tu68LP6ATVxFgBZvptcv7DeINc,649
|
|
79
|
+
coderio/tools/grep_tool.py,sha256=ye54L7d1X_kTkd899D_hu2j4BoWfhcObTtMH0vPEM-c,3158
|
|
80
|
+
coderio/tools/linux_sandbox.py,sha256=5S2qfAQqUfDRPZNeLUytnzZ6BpO-wTodKcRYQqOJMhE,8089
|
|
81
|
+
coderio/tools/list_dir.py,sha256=2lxeGh1VrEg_6IGN1GQdH3bjiCc-p44UPcascSEs_j4,1976
|
|
82
|
+
coderio/tools/multi_edit.py,sha256=Mxxqofl4kjp1BnqjM58bcigDqfH0JCM1n6kgb2pNjZ0,2714
|
|
83
|
+
coderio/tools/note.py,sha256=wYZNDLNdBLPuR1cB8u6b9qRZx1w2IyhsFiUzZXf15xA,2983
|
|
84
|
+
coderio/tools/permission.py,sha256=04vOO2z2irYQTEfmpNHmd90j4SGyiOC1yutjXRo-_Iw,8886
|
|
85
|
+
coderio/tools/read_file.py,sha256=2oItLmw9vaB-SYhiDFVYrhMAPJ7p7CUJ1JWUxF4fCLI,2006
|
|
86
|
+
coderio/tools/sandbox_runner.py,sha256=YpUxHDXFxpSJZVqfUny7dbswy5G4y_g8XRz-3wCH9ac,4928
|
|
87
|
+
coderio/tools/todo.py,sha256=fU0cAvl1eB_hLu2i03NA-SC9h7zaLKE0s505x84NPh8,2320
|
|
88
|
+
coderio/tools/web_fetch.py,sha256=sWhS0MulWtjfTg8WJ9oeFhVHKxaMtmgMki7-7uXe0Is,7928
|
|
89
|
+
coderio/tools/web_search.py,sha256=bFoNtmqrh3JvBGvpo6xTSiE5II-FuiP51bMxZV9emUo,1856
|
|
90
|
+
coderio/tools/win_job.py,sha256=dYCKlSEvXWi33Q-VftNCBbKZE2_ltp_uHx0yIXHn1MI,8501
|
|
91
|
+
coderio/tools/win_sandbox.py,sha256=4rrInelwDLDo8IGkWjiFT_b_Gormn2nQf6ASYgWFoSE,27382
|
|
92
|
+
coderio/tools/write_file.py,sha256=KVLZ1_G0VBIxC9ejBtezXRSHL2gDT4eZTO9mVQk3U-o,761
|
|
93
|
+
coderio-0.4.0.dist-info/METADATA,sha256=YgT1R5IZHEq1iRWS7iGpcQctF47HkGZI9NbHR0gU2w4,27793
|
|
94
|
+
coderio-0.4.0.dist-info/WHEEL,sha256=zOwg4jB6zX2kU910N-cMawjivD6tO8NEWvE12je1bVk,87
|
|
95
|
+
coderio-0.4.0.dist-info/entry_points.txt,sha256=W7UKP7W8NlMloF1mvi86WGUshWmfMPBVjrYSOSNwkPw,55
|
|
96
|
+
coderio-0.4.0.dist-info/licenses/LICENSE,sha256=_Hx31iGkyJzw0_BcBPl2jLuPuJxeFg2MS6FVfWyN7aw,1077
|
|
97
|
+
coderio-0.4.0.dist-info/RECORD,,
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 coderio contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|