rockycode 0.1.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.
- rockycode-0.1.0/.dockerignore +22 -0
- rockycode-0.1.0/.github/workflows/ci.yml +27 -0
- rockycode-0.1.0/.github/workflows/release.yml +73 -0
- rockycode-0.1.0/.gitignore +46 -0
- rockycode-0.1.0/CHANGELOG.md +20 -0
- rockycode-0.1.0/CONTRIBUTING.md +63 -0
- rockycode-0.1.0/Dockerfile +23 -0
- rockycode-0.1.0/Dockerfile.sandbox +13 -0
- rockycode-0.1.0/LICENSE +21 -0
- rockycode-0.1.0/PKG-INFO +488 -0
- rockycode-0.1.0/README.md +455 -0
- rockycode-0.1.0/README.zh-CN.md +393 -0
- rockycode-0.1.0/SECURITY.md +72 -0
- rockycode-0.1.0/bench/tasks/dev10.json +12 -0
- rockycode-0.1.0/bench/tasks/test20.json +22 -0
- rockycode-0.1.0/brand/rockycode-note.svg +28 -0
- rockycode-0.1.0/brand/rockycode-wordmark.svg +11 -0
- rockycode-0.1.0/docker-compose.yml +39 -0
- rockycode-0.1.0/prompts/README.md +35 -0
- rockycode-0.1.0/prompts/rocky-v1.txt +16 -0
- rockycode-0.1.0/prompts/rocky-v2-search-first.txt +18 -0
- rockycode-0.1.0/prompts/rocky-v3-decisive.txt +21 -0
- rockycode-0.1.0/prompts/rocky-zh-closer.txt +31 -0
- rockycode-0.1.0/prompts/rocky-zh-full-closer.txt +29 -0
- rockycode-0.1.0/prompts/rocky-zh-full.txt +20 -0
- rockycode-0.1.0/pyproject.toml +83 -0
- rockycode-0.1.0/rockycode/__init__.py +1 -0
- rockycode-0.1.0/rockycode/banner.py +37 -0
- rockycode-0.1.0/rockycode/cli.py +1386 -0
- rockycode-0.1.0/rockycode/config.py +178 -0
- rockycode-0.1.0/rockycode/dream/__init__.py +9 -0
- rockycode-0.1.0/rockycode/dream/core.py +523 -0
- rockycode-0.1.0/rockycode/dream/judge.py +134 -0
- rockycode-0.1.0/rockycode/dream/mining.py +152 -0
- rockycode-0.1.0/rockycode/dream/proposals.py +440 -0
- rockycode-0.1.0/rockycode/engine/__init__.py +10 -0
- rockycode-0.1.0/rockycode/engine/artifact.py +367 -0
- rockycode-0.1.0/rockycode/engine/budget.py +90 -0
- rockycode-0.1.0/rockycode/engine/checks.py +157 -0
- rockycode-0.1.0/rockycode/engine/compaction.py +181 -0
- rockycode-0.1.0/rockycode/engine/container.py +225 -0
- rockycode-0.1.0/rockycode/engine/effort.py +46 -0
- rockycode-0.1.0/rockycode/engine/events.py +101 -0
- rockycode-0.1.0/rockycode/engine/explore.py +592 -0
- rockycode-0.1.0/rockycode/engine/goal.py +541 -0
- rockycode-0.1.0/rockycode/engine/goal_review.py +161 -0
- rockycode-0.1.0/rockycode/engine/goal_session.py +259 -0
- rockycode-0.1.0/rockycode/engine/headless.py +481 -0
- rockycode-0.1.0/rockycode/engine/loop.py +711 -0
- rockycode-0.1.0/rockycode/engine/lsp.py +473 -0
- rockycode-0.1.0/rockycode/engine/mcp.py +364 -0
- rockycode-0.1.0/rockycode/engine/modes.py +123 -0
- rockycode-0.1.0/rockycode/engine/outcome.py +81 -0
- rockycode-0.1.0/rockycode/engine/permission.py +198 -0
- rockycode-0.1.0/rockycode/engine/planmode.py +249 -0
- rockycode-0.1.0/rockycode/engine/providers.py +196 -0
- rockycode-0.1.0/rockycode/engine/redact.py +83 -0
- rockycode-0.1.0/rockycode/engine/safety.py +139 -0
- rockycode-0.1.0/rockycode/engine/sandbox.py +219 -0
- rockycode-0.1.0/rockycode/engine/server.py +431 -0
- rockycode-0.1.0/rockycode/engine/skills.py +178 -0
- rockycode-0.1.0/rockycode/engine/titler.py +46 -0
- rockycode-0.1.0/rockycode/engine/tools.py +479 -0
- rockycode-0.1.0/rockycode/engine/trajectory.py +131 -0
- rockycode-0.1.0/rockycode/engine/web.py +431 -0
- rockycode-0.1.0/rockycode/engine/worktree.py +128 -0
- rockycode-0.1.0/rockycode/memory/__init__.py +7 -0
- rockycode-0.1.0/rockycode/memory/index.py +260 -0
- rockycode-0.1.0/rockycode/memory/store.py +331 -0
- rockycode-0.1.0/rockycode/modes/learn/learn.md +46 -0
- rockycode-0.1.0/rockycode/modes/research/deep-research.md +53 -0
- rockycode-0.1.0/rockycode/modes/research/paper-reading.md +49 -0
- rockycode-0.1.0/rockycode/modes/research/prove.md +60 -0
- rockycode-0.1.0/rockycode/modes/research/whiteboard.md +64 -0
- rockycode-0.1.0/rockycode/onboarding.py +332 -0
- rockycode-0.1.0/rockycode/palette.py +15 -0
- rockycode-0.1.0/rockycode/pricing.py +178 -0
- rockycode-0.1.0/rockycode/prompts/__init__.py +0 -0
- rockycode-0.1.0/rockycode/prompts/rocky.py +257 -0
- rockycode-0.1.0/rockycode/routines.py +287 -0
- rockycode-0.1.0/rockycode/runners/__init__.py +0 -0
- rockycode-0.1.0/rockycode/runners/agent.py +273 -0
- rockycode-0.1.0/rockycode/runners/data.py +61 -0
- rockycode-0.1.0/rockycode/runners/raw.py +176 -0
- rockycode-0.1.0/rockycode/score.py +114 -0
- rockycode-0.1.0/rockycode/session.py +298 -0
- rockycode-0.1.0/rockycode/skills/architecture-viz/SKILL.md +71 -0
- rockycode-0.1.0/rockycode/skills/architecture-viz/template.html +87 -0
- rockycode-0.1.0/rockycode/skills/lean-prover/SKILL.md +155 -0
- rockycode-0.1.0/rockycode/skills/lean-prover/torchlean-api.md +85 -0
- rockycode-0.1.0/rockycode/tui/__init__.py +1 -0
- rockycode-0.1.0/rockycode/tui/app.py +2450 -0
- rockycode-0.1.0/rockycode/tui/exitsheet.py +181 -0
- rockycode-0.1.0/rockycode/tui/goal_screen.py +315 -0
- rockycode-0.1.0/rockycode/tui/mdterm.py +232 -0
- rockycode-0.1.0/rockycode/tui/mdview.py +99 -0
- rockycode-0.1.0/rockycode/tui/modepicker.py +103 -0
- rockycode-0.1.0/rockycode/tui/permission.py +154 -0
- rockycode-0.1.0/rockycode/tui/plangate.py +110 -0
- rockycode-0.1.0/rockycode/tui/prompt_history.py +77 -0
- rockycode-0.1.0/rockycode/tui/proposalcard.py +126 -0
- rockycode-0.1.0/rockycode/tui/resume.py +142 -0
- rockycode-0.1.0/rockycode/tui/rocky_pet.py +96 -0
- rockycode-0.1.0/rockycode/tui/routinecard.py +123 -0
- rockycode-0.1.0/rockycode-vscode/.gitignore +4 -0
- rockycode-0.1.0/rockycode-vscode/.vscode/launch.json +16 -0
- rockycode-0.1.0/rockycode-vscode/.vscode/tasks.json +13 -0
- rockycode-0.1.0/rockycode-vscode/.vscodeignore +8 -0
- rockycode-0.1.0/rockycode-vscode/CHANGELOG.md +15 -0
- rockycode-0.1.0/rockycode-vscode/LICENSE +21 -0
- rockycode-0.1.0/rockycode-vscode/README.md +58 -0
- rockycode-0.1.0/rockycode-vscode/esbuild.config.mjs +51 -0
- rockycode-0.1.0/rockycode-vscode/media/chat.html +983 -0
- rockycode-0.1.0/rockycode-vscode/media/icon-marketplace.svg +4 -0
- rockycode-0.1.0/rockycode-vscode/media/icon.png +0 -0
- rockycode-0.1.0/rockycode-vscode/media/marked.js +79 -0
- rockycode-0.1.0/rockycode-vscode/media/rocky-icon.svg +28 -0
- rockycode-0.1.0/rockycode-vscode/package-lock.json +551 -0
- rockycode-0.1.0/rockycode-vscode/package.json +209 -0
- rockycode-0.1.0/rockycode-vscode/src/diffManager.ts +97 -0
- rockycode-0.1.0/rockycode-vscode/src/editorContext.ts +187 -0
- rockycode-0.1.0/rockycode-vscode/src/extension.ts +179 -0
- rockycode-0.1.0/rockycode-vscode/src/permissionManager.ts +112 -0
- rockycode-0.1.0/rockycode-vscode/src/protocol.ts +114 -0
- rockycode-0.1.0/rockycode-vscode/src/rockyConnection.ts +259 -0
- rockycode-0.1.0/rockycode-vscode/src/rockyProvider.ts +403 -0
- rockycode-0.1.0/rockycode-vscode/src/statusBar.ts +58 -0
- rockycode-0.1.0/rockycode-vscode/src/webview-highlight.ts +45 -0
- rockycode-0.1.0/rockycode-vscode/tsconfig.json +18 -0
- rockycode-0.1.0/tests/fake_lsp_server.py +101 -0
- rockycode-0.1.0/tests/fake_mcp_server.py +20 -0
- rockycode-0.1.0/tests/invariants.py +44 -0
- rockycode-0.1.0/tests/real_planmode.py +96 -0
- rockycode-0.1.0/tests/real_reasoning_roundtrip.py +125 -0
- rockycode-0.1.0/tests/real_tool_contract.py +76 -0
- rockycode-0.1.0/tests/run_all.py +65 -0
- rockycode-0.1.0/tests/run_real.py +37 -0
- rockycode-0.1.0/tests/smoke_approver.py +112 -0
- rockycode-0.1.0/tests/smoke_artifact.py +211 -0
- rockycode-0.1.0/tests/smoke_bash.py +34 -0
- rockycode-0.1.0/tests/smoke_bash_grant.py +98 -0
- rockycode-0.1.0/tests/smoke_bilang_prompt.py +44 -0
- rockycode-0.1.0/tests/smoke_budget.py +68 -0
- rockycode-0.1.0/tests/smoke_checks.py +108 -0
- rockycode-0.1.0/tests/smoke_compaction.py +268 -0
- rockycode-0.1.0/tests/smoke_container.py +110 -0
- rockycode-0.1.0/tests/smoke_credentials.py +149 -0
- rockycode-0.1.0/tests/smoke_dream.py +139 -0
- rockycode-0.1.0/tests/smoke_dream_trigger.py +92 -0
- rockycode-0.1.0/tests/smoke_effort.py +45 -0
- rockycode-0.1.0/tests/smoke_engine.py +106 -0
- rockycode-0.1.0/tests/smoke_exec.py +226 -0
- rockycode-0.1.0/tests/smoke_explore.py +401 -0
- rockycode-0.1.0/tests/smoke_goal.py +95 -0
- rockycode-0.1.0/tests/smoke_goal_driver.py +133 -0
- rockycode-0.1.0/tests/smoke_goal_review.py +101 -0
- rockycode-0.1.0/tests/smoke_goal_runner.py +146 -0
- rockycode-0.1.0/tests/smoke_interrupt.py +108 -0
- rockycode-0.1.0/tests/smoke_judge.py +161 -0
- rockycode-0.1.0/tests/smoke_lsp.py +50 -0
- rockycode-0.1.0/tests/smoke_mcp.py +84 -0
- rockycode-0.1.0/tests/smoke_mdterm.py +164 -0
- rockycode-0.1.0/tests/smoke_mdview.py +88 -0
- rockycode-0.1.0/tests/smoke_memory.py +84 -0
- rockycode-0.1.0/tests/smoke_memory_index.py +96 -0
- rockycode-0.1.0/tests/smoke_mining.py +156 -0
- rockycode-0.1.0/tests/smoke_modes.py +160 -0
- rockycode-0.1.0/tests/smoke_onboarding.py +47 -0
- rockycode-0.1.0/tests/smoke_outcome.py +147 -0
- rockycode-0.1.0/tests/smoke_parallel.py +111 -0
- rockycode-0.1.0/tests/smoke_permission.py +113 -0
- rockycode-0.1.0/tests/smoke_planmode.py +146 -0
- rockycode-0.1.0/tests/smoke_pricing.py +95 -0
- rockycode-0.1.0/tests/smoke_prompt_history.py +65 -0
- rockycode-0.1.0/tests/smoke_proposals.py +194 -0
- rockycode-0.1.0/tests/smoke_providers.py +120 -0
- rockycode-0.1.0/tests/smoke_redact.py +64 -0
- rockycode-0.1.0/tests/smoke_resume_handoff.py +142 -0
- rockycode-0.1.0/tests/smoke_routine_run.py +119 -0
- rockycode-0.1.0/tests/smoke_routines.py +99 -0
- rockycode-0.1.0/tests/smoke_safety.py +61 -0
- rockycode-0.1.0/tests/smoke_score.py +31 -0
- rockycode-0.1.0/tests/smoke_serve.py +178 -0
- rockycode-0.1.0/tests/smoke_session.py +95 -0
- rockycode-0.1.0/tests/smoke_skills.py +104 -0
- rockycode-0.1.0/tests/smoke_submit_race.py +69 -0
- rockycode-0.1.0/tests/smoke_today.py +46 -0
- rockycode-0.1.0/tests/smoke_tools.py +47 -0
- rockycode-0.1.0/tests/smoke_tools_jail.py +116 -0
- rockycode-0.1.0/tests/smoke_trajectory.py +44 -0
- rockycode-0.1.0/tests/smoke_tui_artifact_modal.py +62 -0
- rockycode-0.1.0/tests/smoke_tui_bash_gate.py +150 -0
- rockycode-0.1.0/tests/smoke_tui_copy.py +57 -0
- rockycode-0.1.0/tests/smoke_tui_envwarn.py +48 -0
- rockycode-0.1.0/tests/smoke_tui_exitsheet.py +212 -0
- rockycode-0.1.0/tests/smoke_tui_goal_screen.py +237 -0
- rockycode-0.1.0/tests/smoke_tui_input_nav.py +102 -0
- rockycode-0.1.0/tests/smoke_tui_model.py +70 -0
- rockycode-0.1.0/tests/smoke_tui_permission.py +246 -0
- rockycode-0.1.0/tests/smoke_tui_plan.py +186 -0
- rockycode-0.1.0/tests/smoke_tui_proposals.py +125 -0
- rockycode-0.1.0/tests/smoke_tui_read_grant.py +132 -0
- rockycode-0.1.0/tests/smoke_tui_routines.py +138 -0
- rockycode-0.1.0/tests/smoke_tui_scroll.py +118 -0
- rockycode-0.1.0/tests/smoke_tui_shell.py +52 -0
- rockycode-0.1.0/tests/smoke_tui_toggle.py +132 -0
- rockycode-0.1.0/tests/smoke_web.py +149 -0
- rockycode-0.1.0/uv.lock +3089 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
__pycache__/
|
|
2
|
+
*.py[cod]
|
|
3
|
+
*.egg-info/
|
|
4
|
+
dist/
|
|
5
|
+
build/
|
|
6
|
+
.venv/
|
|
7
|
+
venv/
|
|
8
|
+
.cache/
|
|
9
|
+
.pytest_cache/
|
|
10
|
+
.ruff_cache/
|
|
11
|
+
.mypy_cache/
|
|
12
|
+
results/
|
|
13
|
+
logs/
|
|
14
|
+
.git/
|
|
15
|
+
.gitignore
|
|
16
|
+
.dockerignore
|
|
17
|
+
docker-compose.yml
|
|
18
|
+
Dockerfile
|
|
19
|
+
*.md
|
|
20
|
+
!README.md
|
|
21
|
+
.env
|
|
22
|
+
.env.*.local
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
name: ci
|
|
2
|
+
|
|
3
|
+
# Smoke tier only: pure tests (fake DeepSeek streams) — no API key, no docker,
|
|
4
|
+
# no network. Runs on every push/PR, including fork PRs, because there are no
|
|
5
|
+
# secrets to leak. The real (token-spending) canary stays local; see
|
|
6
|
+
# tests/run_real.py.
|
|
7
|
+
on:
|
|
8
|
+
push:
|
|
9
|
+
branches: [main, permit]
|
|
10
|
+
pull_request:
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
smoke:
|
|
14
|
+
runs-on: ubuntu-latest
|
|
15
|
+
steps:
|
|
16
|
+
- uses: actions/checkout@v7
|
|
17
|
+
|
|
18
|
+
- name: Install uv
|
|
19
|
+
uses: astral-sh/setup-uv@v8.2.0 # no floating v8 tag; pin the exact release
|
|
20
|
+
with:
|
|
21
|
+
enable-cache: true
|
|
22
|
+
|
|
23
|
+
- name: Sync deps from the lockfile
|
|
24
|
+
run: uv sync --frozen
|
|
25
|
+
|
|
26
|
+
- name: Smoke tests (the CORE gate)
|
|
27
|
+
run: uv run python tests/run_all.py
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags: ["v*"]
|
|
6
|
+
workflow_dispatch:
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
release:
|
|
10
|
+
runs-on: macos-13 # x86_64 Mac — the only platform missing cbor2 wheels
|
|
11
|
+
strategy:
|
|
12
|
+
matrix:
|
|
13
|
+
python: ["3.11", "3.12", "3.13"]
|
|
14
|
+
steps:
|
|
15
|
+
- uses: actions/checkout@v4
|
|
16
|
+
|
|
17
|
+
- name: Setup uv
|
|
18
|
+
uses: astral-sh/setup-uv@v5
|
|
19
|
+
with:
|
|
20
|
+
enable-cache: true
|
|
21
|
+
python-version: ${{ matrix.python }}
|
|
22
|
+
|
|
23
|
+
- name: Install Rust (cbor2 needs it on macOS x86_64)
|
|
24
|
+
run: rustup update stable
|
|
25
|
+
|
|
26
|
+
- name: Build rockycode wheel (only once)
|
|
27
|
+
if: matrix.python == '3.11'
|
|
28
|
+
run: uv build
|
|
29
|
+
|
|
30
|
+
- name: Build cbor2 wheel
|
|
31
|
+
run: uv pip wheel cbor2==6.1.2 --no-deps -w dist/
|
|
32
|
+
|
|
33
|
+
- name: Upload wheels
|
|
34
|
+
uses: actions/upload-artifact@v4
|
|
35
|
+
with:
|
|
36
|
+
name: wheels-${{ matrix.python }}
|
|
37
|
+
path: dist/
|
|
38
|
+
|
|
39
|
+
publish:
|
|
40
|
+
needs: release
|
|
41
|
+
runs-on: ubuntu-latest
|
|
42
|
+
steps:
|
|
43
|
+
- name: Download all wheels
|
|
44
|
+
uses: actions/download-artifact@v4
|
|
45
|
+
with:
|
|
46
|
+
path: dist/
|
|
47
|
+
pattern: wheels-*
|
|
48
|
+
merge-multiple: true
|
|
49
|
+
|
|
50
|
+
- name: Show artifacts
|
|
51
|
+
run: ls -la dist/
|
|
52
|
+
|
|
53
|
+
- name: Release
|
|
54
|
+
uses: softprops/action-gh-release@v2
|
|
55
|
+
with:
|
|
56
|
+
files: dist/*
|
|
57
|
+
generate_release_notes: true
|
|
58
|
+
|
|
59
|
+
# rockycode is pure-Python, so PyPI publishing builds on Ubuntu and does NOT
|
|
60
|
+
# depend on the macOS `release` job (which only exists for the cbor2 wheel on
|
|
61
|
+
# the GitHub-Release side). This keeps publishing off the slow macOS queue.
|
|
62
|
+
pypi:
|
|
63
|
+
runs-on: ubuntu-latest
|
|
64
|
+
permissions:
|
|
65
|
+
id-token: write # OIDC — this is what Trusted Publishing uses
|
|
66
|
+
steps:
|
|
67
|
+
- uses: actions/checkout@v4
|
|
68
|
+
- name: Setup uv
|
|
69
|
+
uses: astral-sh/setup-uv@v5
|
|
70
|
+
- name: Build rockycode (sdist + wheel — only our project lands in dist/)
|
|
71
|
+
run: uv build
|
|
72
|
+
- name: Publish to PyPI (Trusted Publishing, no token)
|
|
73
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Python
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
*.egg-info/
|
|
6
|
+
dist/
|
|
7
|
+
build/
|
|
8
|
+
|
|
9
|
+
# Virtual envs
|
|
10
|
+
.venv/
|
|
11
|
+
venv/
|
|
12
|
+
.python-version
|
|
13
|
+
|
|
14
|
+
# Env / secrets
|
|
15
|
+
.env
|
|
16
|
+
.env.local
|
|
17
|
+
.env.*.local
|
|
18
|
+
|
|
19
|
+
# Caches
|
|
20
|
+
.cache/
|
|
21
|
+
.pytest_cache/
|
|
22
|
+
.ruff_cache/
|
|
23
|
+
.mypy_cache/
|
|
24
|
+
|
|
25
|
+
# Benchmark run artifacts (predictions, eval logs, scorer summaries)
|
|
26
|
+
results/predictions/
|
|
27
|
+
results/runs/
|
|
28
|
+
results/*.jsonl
|
|
29
|
+
logs/
|
|
30
|
+
/raw-*.json
|
|
31
|
+
/rockycode-*.json
|
|
32
|
+
|
|
33
|
+
# rockycode runtime (trajectories, artifacts, local config)
|
|
34
|
+
.rockycode/
|
|
35
|
+
|
|
36
|
+
# OS
|
|
37
|
+
.DS_Store
|
|
38
|
+
|
|
39
|
+
# Editors
|
|
40
|
+
.vscode/
|
|
41
|
+
.idea/
|
|
42
|
+
*.swp
|
|
43
|
+
# ...but the VS Code extension commits its own launch/build config so
|
|
44
|
+
# contributors can F5 the Extension Development Host. Re-include it.
|
|
45
|
+
!rockycode-vscode/.vscode/
|
|
46
|
+
!rockycode-vscode/.vscode/*
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to rockycode are recorded here. The format follows
|
|
4
|
+
[Keep a Changelog](https://keepachangelog.com/), and the project follows
|
|
5
|
+
[Semantic Versioning](https://semver.org/) — pre-1.0, so the surface may still
|
|
6
|
+
change between minor versions.
|
|
7
|
+
|
|
8
|
+
## [Unreleased]
|
|
9
|
+
|
|
10
|
+
_Nothing yet._
|
|
11
|
+
|
|
12
|
+
## [0.1.0] — first public release
|
|
13
|
+
|
|
14
|
+
Initial public release. One repo, one engine, three ways to use it — interactive
|
|
15
|
+
`chat`, autonomous `goal`, and the `bench` measurement rig — running on DeepSeek
|
|
16
|
+
or any OpenAI-compatible model.
|
|
17
|
+
|
|
18
|
+
Some capabilities ship as **experimental and default-off** (self-improvement,
|
|
19
|
+
`prove` / `lean-prover`, `explore`, and providers other than DeepSeek); see the
|
|
20
|
+
README's Experimental section for what they are and how to enable them.
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# Contributing to rockycode
|
|
2
|
+
|
|
3
|
+
Thanks for wanting to help Rocky get there anyway. This is a small, opinionated
|
|
4
|
+
project, so a little context up front saves everyone time.
|
|
5
|
+
|
|
6
|
+
## What rockycode is trying to be
|
|
7
|
+
|
|
8
|
+
- **Its own agent, not a clone.** We borrow good ideas from Claude Code, Codex,
|
|
9
|
+
and others selectively — but the design is our own, and *minimal* is the
|
|
10
|
+
default. A feature earns its place; it doesn't get in because a bigger tool has
|
|
11
|
+
it.
|
|
12
|
+
- **Small core, honest extras.** The base install stays lean. Anything heavy
|
|
13
|
+
(SWE-bench, pandas, PDF, keyring) lives behind an extra. A PR that pulls a big
|
|
14
|
+
new runtime dependency into the core needs a strong reason.
|
|
15
|
+
- **Security-conscious by default.** rockycode is built to run inside repos you
|
|
16
|
+
don't fully trust. New code that touches shell, network, file paths, config
|
|
17
|
+
loading, or credentials is held to that bar — see [SECURITY.md](SECURITY.md).
|
|
18
|
+
- **Measured, not guessed.** Behavior changes to the agent should come with a
|
|
19
|
+
way to tell if they helped. The `bench` harness exists for exactly this.
|
|
20
|
+
|
|
21
|
+
## Getting set up
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
git clone https://github.com/cicialgo/rockycode.git
|
|
25
|
+
cd rockycode
|
|
26
|
+
uv pip install -e . # or: pip install -e .
|
|
27
|
+
# extras as needed:
|
|
28
|
+
uv pip install -e '.[bench]' # SWE-bench harness (heavy: docker, datasets)
|
|
29
|
+
uv pip install -e '.[keyring]' # store your key in the OS keychain
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
First run walks you through pasting an API key (DeepSeek or any
|
|
33
|
+
OpenAI-compatible endpoint). Then:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
rockycode chat # interactive TUI
|
|
37
|
+
rockycode goal "…" # autonomous run (sandboxed worktree copy)
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Before you open a PR
|
|
41
|
+
|
|
42
|
+
1. **Run the test suite** — `python tests/run_all.py`. It should be green.
|
|
43
|
+
2. **Lint** — `ruff check .` (config is in `pyproject.toml`).
|
|
44
|
+
3. **Match the surrounding code.** Read the file you're editing and mirror its
|
|
45
|
+
naming, comment density, and idioms. New code should be indistinguishable in
|
|
46
|
+
style from what's around it.
|
|
47
|
+
4. **Keep the diff tight.** One change per PR. No drive-by reformatting of files
|
|
48
|
+
you didn't otherwise touch — it buries the real change in noise.
|
|
49
|
+
5. **Explain the why.** The PR description should say what problem this solves,
|
|
50
|
+
not just what it does. If it changes agent behavior, say how you checked it
|
|
51
|
+
helped.
|
|
52
|
+
|
|
53
|
+
## Reporting bugs and ideas
|
|
54
|
+
|
|
55
|
+
- **Bugs / features** — open a GitHub issue with enough to reproduce (command,
|
|
56
|
+
OS, what you expected vs. saw).
|
|
57
|
+
- **Security vulnerabilities** — **do not** open a public issue. Use GitHub's
|
|
58
|
+
private advisory flow; see [SECURITY.md](SECURITY.md).
|
|
59
|
+
|
|
60
|
+
## Licensing
|
|
61
|
+
|
|
62
|
+
rockycode is MIT-licensed. By contributing, you agree your contribution is
|
|
63
|
+
licensed under the same terms.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
FROM ghcr.io/astral-sh/uv:python3.12-bookworm
|
|
2
|
+
|
|
3
|
+
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
4
|
+
git \
|
|
5
|
+
docker.io \
|
|
6
|
+
&& rm -rf /var/lib/apt/lists/*
|
|
7
|
+
|
|
8
|
+
WORKDIR /app
|
|
9
|
+
COPY pyproject.toml uv.lock ./
|
|
10
|
+
RUN uv sync --frozen --no-dev --no-install-project
|
|
11
|
+
|
|
12
|
+
COPY rockycode /app/rockycode
|
|
13
|
+
COPY prompts /app/prompts
|
|
14
|
+
COPY bench /app/bench
|
|
15
|
+
COPY README.md /app/README.md
|
|
16
|
+
|
|
17
|
+
RUN uv sync --frozen --no-dev
|
|
18
|
+
|
|
19
|
+
ENV PATH="/app/.venv/bin:$PATH"
|
|
20
|
+
ENV TEXTUAL_DISABLE_KITTY_KEY=1
|
|
21
|
+
|
|
22
|
+
ENTRYPOINT ["rockycode"]
|
|
23
|
+
CMD ["chat"]
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
FROM debian:bookworm-slim
|
|
2
|
+
|
|
3
|
+
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
4
|
+
git \
|
|
5
|
+
python3 \
|
|
6
|
+
python3-pip \
|
|
7
|
+
curl \
|
|
8
|
+
grep \
|
|
9
|
+
findutils \
|
|
10
|
+
&& rm -rf /var/lib/apt/lists/*
|
|
11
|
+
|
|
12
|
+
WORKDIR /workspace
|
|
13
|
+
CMD ["tail", "-f", "/dev/null"]
|
rockycode-0.1.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 rockycode 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.
|