coderio 0.4.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- coderio-0.4.0/.github/dependabot.yml +28 -0
- coderio-0.4.0/.github/workflows/ci.yml +100 -0
- coderio-0.4.0/.github/workflows/release.yml +122 -0
- coderio-0.4.0/.gitignore +41 -0
- coderio-0.4.0/CHANGELOG.md +390 -0
- coderio-0.4.0/CONTRIBUTING.md +83 -0
- coderio-0.4.0/LICENSE +21 -0
- coderio-0.4.0/PKG-INFO +490 -0
- coderio-0.4.0/README.md +442 -0
- coderio-0.4.0/README_en.md +445 -0
- coderio-0.4.0/THIRD_PARTY_LICENSES.md +18 -0
- coderio-0.4.0/docs/coderio-architecture.md +446 -0
- coderio-0.4.0/pyproject.toml +234 -0
- coderio-0.4.0/scripts/verify_deepagent_live.py +85 -0
- coderio-0.4.0/scripts/verify_harness_live.py +136 -0
- coderio-0.4.0/src/coderio/__init__.py +14 -0
- coderio-0.4.0/src/coderio/agent/__init__.py +5 -0
- coderio-0.4.0/src/coderio/agent/_deepagents_compat.py +139 -0
- coderio-0.4.0/src/coderio/agent/command_review.py +140 -0
- coderio-0.4.0/src/coderio/agent/deep_loop.py +758 -0
- coderio-0.4.0/src/coderio/agent/harness.py +768 -0
- coderio-0.4.0/src/coderio/agent/harness_middleware.py +293 -0
- coderio-0.4.0/src/coderio/agent/permission_middleware.py +52 -0
- coderio-0.4.0/src/coderio/agent/prompts.py +304 -0
- coderio-0.4.0/src/coderio/agent/skill_tool.py +70 -0
- coderio-0.4.0/src/coderio/agent/state.py +144 -0
- coderio-0.4.0/src/coderio/agent/stream.py +93 -0
- coderio-0.4.0/src/coderio/cli/__init__.py +0 -0
- coderio-0.4.0/src/coderio/cli/app.py +257 -0
- coderio-0.4.0/src/coderio/cli/commands.py +339 -0
- coderio-0.4.0/src/coderio/cli/credentials.py +70 -0
- coderio-0.4.0/src/coderio/cli/mcp_cmd.py +227 -0
- coderio-0.4.0/src/coderio/cli/multimodal.py +94 -0
- coderio-0.4.0/src/coderio/cli/onboarding.py +270 -0
- coderio-0.4.0/src/coderio/cli/providers.py +113 -0
- coderio-0.4.0/src/coderio/cli/render.py +28 -0
- coderio-0.4.0/src/coderio/cli/repl.py +189 -0
- coderio-0.4.0/src/coderio/cli/run_cmd.py +171 -0
- coderio-0.4.0/src/coderio/cli/skills_cmd.py +77 -0
- coderio-0.4.0/src/coderio/cli/stream.py +224 -0
- coderio-0.4.0/src/coderio/cli/tui.py +1584 -0
- coderio-0.4.0/src/coderio/cli/tui_onboarding.py +465 -0
- coderio-0.4.0/src/coderio/cli/tui_screens.py +334 -0
- coderio-0.4.0/src/coderio/cli/tui_widgets.py +453 -0
- coderio-0.4.0/src/coderio/config/__init__.py +21 -0
- coderio-0.4.0/src/coderio/config/bootstrap.py +38 -0
- coderio-0.4.0/src/coderio/config/loader.py +273 -0
- coderio-0.4.0/src/coderio/config/models.py +193 -0
- coderio-0.4.0/src/coderio/config/trust.py +136 -0
- coderio-0.4.0/src/coderio/llm/__init__.py +3 -0
- coderio-0.4.0/src/coderio/llm/factory.py +164 -0
- coderio-0.4.0/src/coderio/llm/probe.py +153 -0
- coderio-0.4.0/src/coderio/mcp_loader.py +274 -0
- coderio-0.4.0/src/coderio/session/__init__.py +3 -0
- coderio-0.4.0/src/coderio/session/message.py +79 -0
- coderio-0.4.0/src/coderio/session/store.py +244 -0
- coderio-0.4.0/src/coderio/skills/__init__.py +4 -0
- coderio-0.4.0/src/coderio/skills/bundled/executing-plans/SKILL.md +15 -0
- coderio-0.4.0/src/coderio/skills/lion-skills/LICENSE +21 -0
- coderio-0.4.0/src/coderio/skills/lion-skills/README.md +114 -0
- coderio-0.4.0/src/coderio/skills/lion-skills/skills/clarifying-questions/SKILL.md +119 -0
- coderio-0.4.0/src/coderio/skills/lion-skills/skills/clarifying-questions/evals/evals.json +40 -0
- coderio-0.4.0/src/coderio/skills/lion-skills/skills/code-review/SKILL.md +102 -0
- coderio-0.4.0/src/coderio/skills/lion-skills/skills/code-review/evals/evals.json +40 -0
- coderio-0.4.0/src/coderio/skills/lion-skills/skills/commit-message/SKILL.md +97 -0
- coderio-0.4.0/src/coderio/skills/lion-skills/skills/commit-message/evals/evals.json +20 -0
- coderio-0.4.0/src/coderio/skills/lion-skills/skills/debugging/SKILL.md +116 -0
- coderio-0.4.0/src/coderio/skills/lion-skills/skills/debugging/evals/evals.json +40 -0
- coderio-0.4.0/src/coderio/skills/lion-skills/skills/error-handling/SKILL.md +74 -0
- coderio-0.4.0/src/coderio/skills/lion-skills/skills/error-handling/evals/evals.json +20 -0
- coderio-0.4.0/src/coderio/skills/lion-skills/skills/lion-writing-skills/SKILL.md +85 -0
- coderio-0.4.0/src/coderio/skills/lion-skills/skills/lion-writing-skills/evals/evals.json +20 -0
- coderio-0.4.0/src/coderio/skills/lion-skills/skills/naming/SKILL.md +85 -0
- coderio-0.4.0/src/coderio/skills/lion-skills/skills/naming/evals/evals.json +20 -0
- coderio-0.4.0/src/coderio/skills/lion-skills/skills/onboarding-unknown-codebase/SKILL.md +95 -0
- coderio-0.4.0/src/coderio/skills/lion-skills/skills/onboarding-unknown-codebase/evals/evals.json +20 -0
- coderio-0.4.0/src/coderio/skills/lion-skills/skills/spec-writing/SKILL.md +154 -0
- coderio-0.4.0/src/coderio/skills/lion-skills/skills/spec-writing/evals/evals.json +40 -0
- coderio-0.4.0/src/coderio/skills/lion-skills/skills/task-breakdown/SKILL.md +134 -0
- coderio-0.4.0/src/coderio/skills/lion-skills/skills/task-breakdown/evals/evals.json +46 -0
- coderio-0.4.0/src/coderio/skills/lion-skills/skills/testing/SKILL.md +134 -0
- coderio-0.4.0/src/coderio/skills/lion-skills/skills/testing/evals/evals.json +40 -0
- coderio-0.4.0/src/coderio/skills/lion-skills/skills/verify-and-fix/SKILL.md +132 -0
- coderio-0.4.0/src/coderio/skills/lion-skills/skills/verify-and-fix/evals/evals.json +40 -0
- coderio-0.4.0/src/coderio/skills/models.py +66 -0
- coderio-0.4.0/src/coderio/skills/parser.py +50 -0
- coderio-0.4.0/src/coderio/skills/store.py +102 -0
- coderio-0.4.0/src/coderio/tools/__init__.py +94 -0
- coderio-0.4.0/src/coderio/tools/base.py +55 -0
- coderio-0.4.0/src/coderio/tools/bash.py +168 -0
- coderio-0.4.0/src/coderio/tools/command_policy.py +364 -0
- coderio-0.4.0/src/coderio/tools/edit_file.py +55 -0
- coderio-0.4.0/src/coderio/tools/glob_tool.py +21 -0
- coderio-0.4.0/src/coderio/tools/grep_tool.py +90 -0
- coderio-0.4.0/src/coderio/tools/linux_sandbox.py +196 -0
- coderio-0.4.0/src/coderio/tools/list_dir.py +58 -0
- coderio-0.4.0/src/coderio/tools/multi_edit.py +62 -0
- coderio-0.4.0/src/coderio/tools/note.py +72 -0
- coderio-0.4.0/src/coderio/tools/permission.py +214 -0
- coderio-0.4.0/src/coderio/tools/read_file.py +51 -0
- coderio-0.4.0/src/coderio/tools/sandbox_runner.py +113 -0
- coderio-0.4.0/src/coderio/tools/todo.py +71 -0
- coderio-0.4.0/src/coderio/tools/web_fetch.py +188 -0
- coderio-0.4.0/src/coderio/tools/web_search.py +49 -0
- coderio-0.4.0/src/coderio/tools/win_job.py +214 -0
- coderio-0.4.0/src/coderio/tools/win_sandbox.py +639 -0
- coderio-0.4.0/src/coderio/tools/write_file.py +25 -0
- coderio-0.4.0/tests/__init__.py +0 -0
- coderio-0.4.0/tests/agent/__init__.py +0 -0
- coderio-0.4.0/tests/agent/conftest.py +121 -0
- coderio-0.4.0/tests/agent/test_command_review.py +237 -0
- coderio-0.4.0/tests/agent/test_deep_integration.py +387 -0
- coderio-0.4.0/tests/agent/test_deep_loop.py +234 -0
- coderio-0.4.0/tests/agent/test_deep_loop_unit.py +454 -0
- coderio-0.4.0/tests/agent/test_deepagents_compat.py +201 -0
- coderio-0.4.0/tests/agent/test_harness.py +818 -0
- coderio-0.4.0/tests/agent/test_harness_middleware.py +354 -0
- coderio-0.4.0/tests/agent/test_perf_baseline.py +155 -0
- coderio-0.4.0/tests/agent/test_prompts.py +179 -0
- coderio-0.4.0/tests/agent/test_skill_tool.py +68 -0
- coderio-0.4.0/tests/agent/test_state.py +111 -0
- coderio-0.4.0/tests/agent/test_stream.py +251 -0
- coderio-0.4.0/tests/cli/__init__.py +0 -0
- coderio-0.4.0/tests/cli/test_app.py +24 -0
- coderio-0.4.0/tests/cli/test_command_menu.py +224 -0
- coderio-0.4.0/tests/cli/test_commands.py +283 -0
- coderio-0.4.0/tests/cli/test_credentials.py +39 -0
- coderio-0.4.0/tests/cli/test_input_isolation.py +69 -0
- coderio-0.4.0/tests/cli/test_live_thinking.py +201 -0
- coderio-0.4.0/tests/cli/test_mcp_cmd.py +244 -0
- coderio-0.4.0/tests/cli/test_multimodal.py +79 -0
- coderio-0.4.0/tests/cli/test_onboarding.py +130 -0
- coderio-0.4.0/tests/cli/test_onboarding_logic.py +152 -0
- coderio-0.4.0/tests/cli/test_providers.py +65 -0
- coderio-0.4.0/tests/cli/test_render.py +30 -0
- coderio-0.4.0/tests/cli/test_repl_loop.py +49 -0
- coderio-0.4.0/tests/cli/test_repl_reset.py +65 -0
- coderio-0.4.0/tests/cli/test_run_cmd.py +152 -0
- coderio-0.4.0/tests/cli/test_skills_cmd.py +67 -0
- coderio-0.4.0/tests/cli/test_status_bar.py +145 -0
- coderio-0.4.0/tests/cli/test_stream.py +117 -0
- coderio-0.4.0/tests/cli/test_truncation.py +125 -0
- coderio-0.4.0/tests/cli/test_tui_onboarding.py +239 -0
- coderio-0.4.0/tests/cli/test_tui_picker.py +85 -0
- coderio-0.4.0/tests/cli/test_tui_screens.py +292 -0
- coderio-0.4.0/tests/cli/test_tui_startup.py +222 -0
- coderio-0.4.0/tests/cli/test_tui_widgets.py +474 -0
- coderio-0.4.0/tests/cli/test_ux_features.py +124 -0
- coderio-0.4.0/tests/config/__init__.py +0 -0
- coderio-0.4.0/tests/config/test_bootstrap.py +20 -0
- coderio-0.4.0/tests/config/test_loader.py +383 -0
- coderio-0.4.0/tests/config/test_models.py +21 -0
- coderio-0.4.0/tests/config/test_trust.py +93 -0
- coderio-0.4.0/tests/conftest.py +9 -0
- coderio-0.4.0/tests/e2e/__init__.py +0 -0
- coderio-0.4.0/tests/llm/__init__.py +0 -0
- coderio-0.4.0/tests/llm/test_factory.py +240 -0
- coderio-0.4.0/tests/llm/test_probe.py +160 -0
- coderio-0.4.0/tests/session/__init__.py +0 -0
- coderio-0.4.0/tests/session/test_message.py +81 -0
- coderio-0.4.0/tests/session/test_store.py +216 -0
- coderio-0.4.0/tests/skills/__init__.py +0 -0
- coderio-0.4.0/tests/skills/test_bundled.py +16 -0
- coderio-0.4.0/tests/skills/test_parser.py +46 -0
- coderio-0.4.0/tests/skills/test_skill_tools.py +101 -0
- coderio-0.4.0/tests/skills/test_store.py +49 -0
- coderio-0.4.0/tests/test_mcp_loader.py +285 -0
- coderio-0.4.0/tests/test_p0_stability.py +77 -0
- coderio-0.4.0/tests/test_repl.py +72 -0
- coderio-0.4.0/tests/test_version.py +38 -0
- coderio-0.4.0/tests/tools/__init__.py +0 -0
- coderio-0.4.0/tests/tools/test_bash.py +84 -0
- coderio-0.4.0/tests/tools/test_command_policy.py +369 -0
- coderio-0.4.0/tests/tools/test_concrete_gates.py +27 -0
- coderio-0.4.0/tests/tools/test_edit_prefix.py +33 -0
- coderio-0.4.0/tests/tools/test_file_tools.py +67 -0
- coderio-0.4.0/tests/tools/test_glob_tool.py +55 -0
- coderio-0.4.0/tests/tools/test_grep_tool.py +122 -0
- coderio-0.4.0/tests/tools/test_list_dir.py +56 -0
- coderio-0.4.0/tests/tools/test_multi_edit.py +144 -0
- coderio-0.4.0/tests/tools/test_note.py +67 -0
- coderio-0.4.0/tests/tools/test_permission.py +306 -0
- coderio-0.4.0/tests/tools/test_registry.py +20 -0
- coderio-0.4.0/tests/tools/test_sandbox.py +413 -0
- coderio-0.4.0/tests/tools/test_search_tools.py +56 -0
- coderio-0.4.0/tests/tools/test_todo.py +35 -0
- coderio-0.4.0/tests/tools/test_web.py +72 -0
- coderio-0.4.0/tests/tools/test_web_fetch.py +65 -0
- coderio-0.4.0/tests/tools/test_win_job.py +113 -0
- coderio-0.4.0/uv.lock +3224 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
version: 2
|
|
2
|
+
updates:
|
|
3
|
+
# Python dependencies — checks pyproject.toml for updates
|
|
4
|
+
- package-ecosystem: "pip"
|
|
5
|
+
directory: "/"
|
|
6
|
+
schedule:
|
|
7
|
+
interval: "weekly"
|
|
8
|
+
open-pull-requests-limit: 5
|
|
9
|
+
labels:
|
|
10
|
+
- "dependencies"
|
|
11
|
+
commit-message:
|
|
12
|
+
prefix: "deps"
|
|
13
|
+
# Group minor/patch updates to reduce PR noise
|
|
14
|
+
groups:
|
|
15
|
+
minor-patch:
|
|
16
|
+
update-types:
|
|
17
|
+
- "minor"
|
|
18
|
+
- "patch"
|
|
19
|
+
|
|
20
|
+
# GitHub Actions — keeps workflow action versions current
|
|
21
|
+
- package-ecosystem: "github-actions"
|
|
22
|
+
directory: "/"
|
|
23
|
+
schedule:
|
|
24
|
+
interval: "weekly"
|
|
25
|
+
labels:
|
|
26
|
+
- "ci"
|
|
27
|
+
commit-message:
|
|
28
|
+
prefix: "ci"
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [main]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
lint:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
steps:
|
|
13
|
+
- uses: actions/checkout@v7
|
|
14
|
+
- uses: actions/setup-python@v7
|
|
15
|
+
with:
|
|
16
|
+
python-version: "3.12"
|
|
17
|
+
- name: Install ruff
|
|
18
|
+
run: pip install "ruff>=0.16"
|
|
19
|
+
- name: Ruff check (lint)
|
|
20
|
+
run: ruff check src tests
|
|
21
|
+
- name: Ruff format check
|
|
22
|
+
# --check only verifies, doesn't modify files. Fails if any file
|
|
23
|
+
# isn't formatted — catches "forgot to format" in PRs.
|
|
24
|
+
run: ruff format --check src tests
|
|
25
|
+
|
|
26
|
+
test:
|
|
27
|
+
runs-on: ${{ matrix.os }}
|
|
28
|
+
strategy:
|
|
29
|
+
fail-fast: false
|
|
30
|
+
matrix:
|
|
31
|
+
os: [ubuntu-latest, windows-latest, macos-latest]
|
|
32
|
+
python-version: ["3.11", "3.12"]
|
|
33
|
+
|
|
34
|
+
env:
|
|
35
|
+
# Windows runners default to cp1252; Rich/Textual output contains CJK
|
|
36
|
+
# text (Chinese UI strings) that charmap can't encode. Force UTF-8 so
|
|
37
|
+
# `coderio --help` and subprocess-based tests don't crash with
|
|
38
|
+
# UnicodeEncodeError on windows-latest.
|
|
39
|
+
PYTHONIOENCODING: utf-8
|
|
40
|
+
PYTHONUTF8: "1"
|
|
41
|
+
|
|
42
|
+
steps:
|
|
43
|
+
- uses: actions/checkout@v7
|
|
44
|
+
|
|
45
|
+
# uv replaces pip for dependency installation (2026-08-14 migration).
|
|
46
|
+
# uv.lock is a first-class lockfile for both uv and Dependabot: CI gets
|
|
47
|
+
# fully reproducible installs (P1-4), while Dependabot updates pyproject
|
|
48
|
+
# constraints AND regenerates uv.lock in its PRs — the two mechanisms
|
|
49
|
+
# cooperate instead of fighting (the bare requirements-dev.txt approach
|
|
50
|
+
# had Dependabot produce internally-inconsistent updates; see PR #6).
|
|
51
|
+
- uses: astral-sh/setup-uv@v7
|
|
52
|
+
with:
|
|
53
|
+
python-version: ${{ matrix.python-version }}
|
|
54
|
+
enable-cache: true
|
|
55
|
+
|
|
56
|
+
- name: Install dependencies (locked)
|
|
57
|
+
# --frozen: install EXACTLY what uv.lock pins; error if the lock is
|
|
58
|
+
# out of sync with pyproject.toml (forces committing both together).
|
|
59
|
+
# --extra dev: the dev dependency group (pytest/ruff/mypy/build).
|
|
60
|
+
run: uv sync --frozen --extra dev
|
|
61
|
+
|
|
62
|
+
- name: Check dependency consistency
|
|
63
|
+
# uv-managed venvs ship WITHOUT the pip module (uv manages installs
|
|
64
|
+
# itself), so `python -m pip check` fails there. `uv pip check` reads
|
|
65
|
+
# the same installed-package metadata via uv's own interface.
|
|
66
|
+
run: uv pip check
|
|
67
|
+
|
|
68
|
+
- name: Audit dependencies for known vulnerabilities
|
|
69
|
+
# Scans installed packages against the PyPI advisory database.
|
|
70
|
+
# Non-blocking (continue-on-error) — reports issues without failing CI.
|
|
71
|
+
shell: bash
|
|
72
|
+
continue-on-error: true
|
|
73
|
+
run: |
|
|
74
|
+
uv pip install pip-audit
|
|
75
|
+
uv run pip-audit
|
|
76
|
+
|
|
77
|
+
- name: Run tests with coverage
|
|
78
|
+
# Enforces a coverage floor so coverage can't silently regress.
|
|
79
|
+
# The 70% floor is conservative (current baseline is ~75%) — it catches
|
|
80
|
+
# gross regressions (a module losing its tests) without failing on
|
|
81
|
+
# minor fluctuations. pyproject.toml's [tool.coverage.report]
|
|
82
|
+
# fail_under=60 is the local-dev default; CI enforces the stricter 70%.
|
|
83
|
+
shell: bash
|
|
84
|
+
run: |
|
|
85
|
+
uv run python -m pytest -q --cov=coderio --cov-report=term-missing --cov-fail-under=70
|
|
86
|
+
|
|
87
|
+
- name: Type check (mypy)
|
|
88
|
+
# HARD GATE for clean modules. pyproject.toml's [[tool.mypy.overrides]]
|
|
89
|
+
# lists modules with known type issues (ignore_errors=true) — each is a
|
|
90
|
+
# tracked cleanup TODO. Modules NOT in that list must stay type-clean,
|
|
91
|
+
# so new type errors in clean code fail CI.
|
|
92
|
+
shell: bash
|
|
93
|
+
run: |
|
|
94
|
+
uv run python -m mypy src/coderio
|
|
95
|
+
|
|
96
|
+
- name: Build wheel (smoke)
|
|
97
|
+
shell: bash
|
|
98
|
+
run: |
|
|
99
|
+
uv build --wheel -o /tmp/wheel-test
|
|
100
|
+
echo "Wheel built successfully"
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
|
|
3
|
+
# Triggered by pushing a tag like v0.4.0. Builds wheel + sdist, runs the test
|
|
4
|
+
# suite, verifies both artifacts in a clean venv, publishes to PyPI (Trusted
|
|
5
|
+
# Publishing, no token) and attaches both to a GitHub Release.
|
|
6
|
+
#
|
|
7
|
+
# To cut a release:
|
|
8
|
+
# git tag v0.4.0
|
|
9
|
+
# git push origin v0.4.0
|
|
10
|
+
#
|
|
11
|
+
# PyPI publishing uses Trusted Publishing (OIDC). One-time setup (repo owner):
|
|
12
|
+
# pypi.org → Account settings → Publishing → Add a new pending publisher:
|
|
13
|
+
# PyPI project name: coderio
|
|
14
|
+
# Owner: Lion-1209 / Repository: coderio
|
|
15
|
+
# Workflow name: release.yml / Environment: pypi
|
|
16
|
+
# Then create the "pypi" environment in the repo (Settings → Environments).
|
|
17
|
+
|
|
18
|
+
on:
|
|
19
|
+
push:
|
|
20
|
+
tags:
|
|
21
|
+
- "v*"
|
|
22
|
+
|
|
23
|
+
permissions:
|
|
24
|
+
contents: write # needed to create the release + upload assets
|
|
25
|
+
|
|
26
|
+
jobs:
|
|
27
|
+
# Test gate: a tag is a release — it must not ship broken code. The CI
|
|
28
|
+
# workflow covers pushes/PRs, but a tag could be cut from a commit that
|
|
29
|
+
# predates a fix; this gate makes the release itself fail loudly instead.
|
|
30
|
+
test:
|
|
31
|
+
runs-on: ubuntu-latest
|
|
32
|
+
steps:
|
|
33
|
+
- uses: actions/checkout@v7
|
|
34
|
+
- uses: astral-sh/setup-uv@v7
|
|
35
|
+
with:
|
|
36
|
+
python-version: "3.12"
|
|
37
|
+
enable-cache: true
|
|
38
|
+
- name: Run test suite
|
|
39
|
+
run: |
|
|
40
|
+
uv sync --frozen --extra dev
|
|
41
|
+
uv run python -m pytest -q
|
|
42
|
+
|
|
43
|
+
release:
|
|
44
|
+
needs: test
|
|
45
|
+
runs-on: ubuntu-latest
|
|
46
|
+
steps:
|
|
47
|
+
- uses: actions/checkout@v7
|
|
48
|
+
|
|
49
|
+
- uses: actions/setup-python@v7
|
|
50
|
+
with:
|
|
51
|
+
python-version: "3.12"
|
|
52
|
+
|
|
53
|
+
- name: Build wheel + sdist
|
|
54
|
+
run: |
|
|
55
|
+
pip install build
|
|
56
|
+
python -m build
|
|
57
|
+
|
|
58
|
+
- name: Verify wheel in clean venv (full deps)
|
|
59
|
+
# Install the wheel WITH all dependencies (not --no-deps) to verify
|
|
60
|
+
# the full user install path. Then run --help + import the deepagents
|
|
61
|
+
# engine + verify bundled skills. This catches missing deps that the
|
|
62
|
+
# old --no-deps + manual 5-package approach missed.
|
|
63
|
+
run: |
|
|
64
|
+
python -m venv /tmp/wheel-test-venv
|
|
65
|
+
/tmp/wheel-test-venv/bin/pip install dist/*.whl
|
|
66
|
+
/tmp/wheel-test-venv/bin/coderio --help
|
|
67
|
+
/tmp/wheel-test-venv/bin/coderio run --help
|
|
68
|
+
# Verify the deepagents engine imports (the production path).
|
|
69
|
+
/tmp/wheel-test-venv/bin/python -c "
|
|
70
|
+
from coderio.agent.deep_loop import run_deep_agent
|
|
71
|
+
from coderio.agent.harness_middleware import HarnessMiddleware
|
|
72
|
+
from coderio.agent.permission_middleware import PermissionMiddleware
|
|
73
|
+
from coderio.cli.tui import CoderioTUI
|
|
74
|
+
print('deepagents engine imports OK')
|
|
75
|
+
"
|
|
76
|
+
# Verify bundled skills are importable from the installed package.
|
|
77
|
+
/tmp/wheel-test-venv/bin/python -c "
|
|
78
|
+
from coderio.skills.store import load_skill_store
|
|
79
|
+
from pathlib import Path
|
|
80
|
+
import coderio
|
|
81
|
+
pkg = Path(coderio.__file__).parent / 'skills'
|
|
82
|
+
store = load_skill_store(pkg, 0, None)
|
|
83
|
+
assert len(store.names()) > 0, 'no bundled skills found'
|
|
84
|
+
print(f'{len(store.names())} bundled skills OK')
|
|
85
|
+
"
|
|
86
|
+
|
|
87
|
+
- name: Verify sdist installs
|
|
88
|
+
# sdist is the source-of-truth artifact; verify it installs and runs
|
|
89
|
+
# too (a broken sdist — missing files, bad metadata — only shows up
|
|
90
|
+
# at install time).
|
|
91
|
+
run: |
|
|
92
|
+
python -m venv /tmp/sdist-test-venv
|
|
93
|
+
/tmp/sdist-test-venv/bin/pip install dist/*.tar.gz
|
|
94
|
+
/tmp/sdist-test-venv/bin/coderio --help
|
|
95
|
+
|
|
96
|
+
- name: Create GitHub Release + attach artifacts
|
|
97
|
+
uses: softprops/action-gh-release@v3
|
|
98
|
+
with:
|
|
99
|
+
generate_release_notes: true
|
|
100
|
+
files: dist/*.whl dist/*.tar.gz
|
|
101
|
+
|
|
102
|
+
publish-pypi:
|
|
103
|
+
# PyPI via Trusted Publishing (OIDC) — no API token to manage or leak.
|
|
104
|
+
# Requires the one-time pending-publisher setup described at the top.
|
|
105
|
+
needs: release
|
|
106
|
+
runs-on: ubuntu-latest
|
|
107
|
+
environment: pypi
|
|
108
|
+
permissions:
|
|
109
|
+
id-token: write # OIDC token for Trusted Publishing
|
|
110
|
+
steps:
|
|
111
|
+
- uses: actions/checkout@v7
|
|
112
|
+
- uses: actions/setup-python@v7
|
|
113
|
+
with:
|
|
114
|
+
python-version: "3.12"
|
|
115
|
+
- name: Build (same commit as the verified artifacts)
|
|
116
|
+
run: |
|
|
117
|
+
pip install build
|
|
118
|
+
python -m build
|
|
119
|
+
- name: Publish to PyPI
|
|
120
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
121
|
+
with:
|
|
122
|
+
attestations: true
|
coderio-0.4.0/.gitignore
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# OS
|
|
2
|
+
.DS_Store
|
|
3
|
+
Thumbs.db
|
|
4
|
+
desktop.ini
|
|
5
|
+
|
|
6
|
+
# IDE / Editor
|
|
7
|
+
.vscode/
|
|
8
|
+
.idea/
|
|
9
|
+
*.swp
|
|
10
|
+
*.swo
|
|
11
|
+
|
|
12
|
+
# Node
|
|
13
|
+
node_modules/
|
|
14
|
+
npm-debug.log*
|
|
15
|
+
yarn-debug.log*
|
|
16
|
+
yarn-error.log*
|
|
17
|
+
|
|
18
|
+
# Python
|
|
19
|
+
__pycache__/
|
|
20
|
+
*.py[cod]
|
|
21
|
+
.venv/
|
|
22
|
+
venv/
|
|
23
|
+
*.egg-info/
|
|
24
|
+
build/
|
|
25
|
+
dist/
|
|
26
|
+
|
|
27
|
+
# Testing / linting
|
|
28
|
+
.pytest_cache/
|
|
29
|
+
.mypy_cache/
|
|
30
|
+
.coverage
|
|
31
|
+
coverage.xml
|
|
32
|
+
htmlcov/
|
|
33
|
+
|
|
34
|
+
# coderio user data (project-local layer)
|
|
35
|
+
.coderio/
|
|
36
|
+
|
|
37
|
+
# Misc
|
|
38
|
+
*.log
|
|
39
|
+
.tmp/
|
|
40
|
+
tmp/
|
|
41
|
+
.zcode/
|