cluxion-agentplugin-supercoder 0.2.15__tar.gz → 0.2.17__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.
- cluxion_agentplugin_supercoder-0.2.17/.claude-plugin/plugin.json +8 -0
- cluxion_agentplugin_supercoder-0.2.17/.codex-plugin/plugin.json +8 -0
- cluxion_agentplugin_supercoder-0.2.17/Docs/agent-surfaces.md +48 -0
- cluxion_agentplugin_supercoder-0.2.17/Docs/installation.md +65 -0
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/PKG-INFO +17 -3
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/README.md +16 -2
- cluxion_agentplugin_supercoder-0.2.17/commands/supercoder-doctor.md +9 -0
- cluxion_agentplugin_supercoder-0.2.17/commands/supercoder.md +18 -0
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/plugin.yaml +1 -1
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/pyproject.toml +1 -1
- cluxion_agentplugin_supercoder-0.2.17/skills/supercoder/SKILL.md +48 -0
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/src/cluxion_agentplugin_supercoder/cli.py +40 -1
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/src/cluxion_agentplugin_supercoder/plugin.py +2 -33
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/src/cluxion_agentplugin_supercoder/runner.py +29 -0
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/src/cluxion_agentplugin_supercoder/slash_commands.py +8 -3
- cluxion_agentplugin_supercoder-0.2.17/tests/test_cli_contract.py +28 -0
- cluxion_agentplugin_supercoder-0.2.17/tests/test_packaging_policy.py +29 -0
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/tests/test_slash_commands.py +15 -0
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/uv.lock +1 -1
- cluxion_agentplugin_supercoder-0.2.15/Docs/agent-surfaces.md +0 -24
- cluxion_agentplugin_supercoder-0.2.15/Docs/installation.md +0 -45
- cluxion_agentplugin_supercoder-0.2.15/adapters/claude/.claude-plugin/plugin.json +0 -6
- cluxion_agentplugin_supercoder-0.2.15/adapters/claude/skills/supercoder/SKILL.md +0 -30
- cluxion_agentplugin_supercoder-0.2.15/adapters/codex/config-snippet.toml +0 -6
- cluxion_agentplugin_supercoder-0.2.15/adapters/hermes/README.md +0 -20
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/.github/workflows/ci.yml +0 -0
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/.github/workflows/publish.yml +0 -0
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/.gitignore +0 -0
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/.grok-briefs/ci-hermes-probe-skip.md +0 -0
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/.grok-briefs/fix-empty-oldtext-infinite-loop.md +0 -0
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/.grok-briefs/fix-hash-patch-race-0619.md +0 -0
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/.grok-briefs/fix-live-audit-0619.md +0 -0
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/.grok-briefs/p0-read-path-security.md +0 -0
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/.grok-briefs/p2-doctor-security-probes.md +0 -0
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/.grok-briefs/perf-0619.md +0 -0
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/ARCHITECTURE.md +0 -0
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/Docs/README.md +0 -0
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/Docs/architecture.md +0 -0
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/Docs/capabilities.md +0 -0
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/Docs/design.md +0 -0
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/Docs/rust-architecture.md +0 -0
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/Docs/tools.md +0 -0
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/LICENSE +0 -0
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/__init__.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/dist-merged/cluxion_agentplugin_supercoder-0.2.13-cp311-abi3-macosx_11_0_arm64.whl +0 -0
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/rust/supercoder_index/Cargo.lock +0 -0
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/rust/supercoder_index/Cargo.toml +0 -0
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/rust/supercoder_index/pyproject.toml +0 -0
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/rust/supercoder_index/src/lib.rs +0 -0
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/rust/supercoder_index/src/main.rs +0 -0
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/rust/supercoder_index/src/outline.rs +0 -0
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/rust/supercoder_index/src/syntax.rs +0 -0
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/rust/supercoder_index/uv.lock +0 -0
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/scripts/repack_native_wheel.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/src/cluxion_agentplugin_supercoder/__init__.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/src/cluxion_agentplugin_supercoder/core/cursor.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/src/cluxion_agentplugin_supercoder/core/hash_patch.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/src/cluxion_agentplugin_supercoder/core/line_budget.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/src/cluxion_agentplugin_supercoder/core/lint_gate.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/src/cluxion_agentplugin_supercoder/core/queue.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/src/cluxion_agentplugin_supercoder/core/repo_map.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/src/cluxion_agentplugin_supercoder/core/retry_loop.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/src/cluxion_agentplugin_supercoder/core/safety.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/src/cluxion_agentplugin_supercoder/core/syntax_gate.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/src/cluxion_agentplugin_supercoder/core/test_gate.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/src/cluxion_agentplugin_supercoder/doctor/__init__.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/src/cluxion_agentplugin_supercoder/doctor/catalog.json +0 -0
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/src/cluxion_agentplugin_supercoder/doctor/framework.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/src/cluxion_agentplugin_supercoder/doctor/probes.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/src/cluxion_agentplugin_supercoder/rust_bridge.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/src/cluxion_agentplugin_supercoder/schemas.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/tests/test_cursor.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/tests/test_doctor.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/tests/test_hash_patch.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/tests/test_line_budget.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/tests/test_lint_gate.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/tests/test_plugin.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/tests/test_queue.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/tests/test_repo_map.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/tests/test_retry_loop.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/tests/test_rust_bridge.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/tests/test_safety.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/tests/test_syntax_gate.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/tests/test_test_gate.py +0 -0
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "cluxion-agentplugin-supercoder",
|
|
3
|
+
"version": "0.2.17",
|
|
4
|
+
"description": "Universal agent coding harness plugin: cursor logic, safe patch, line budget, Rust index, and test gates.",
|
|
5
|
+
"author": "cluxion",
|
|
6
|
+
"commands": "./commands",
|
|
7
|
+
"skills": "./skills"
|
|
8
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "cluxion-agentplugin-supercoder",
|
|
3
|
+
"version": "0.2.17",
|
|
4
|
+
"description": "Universal agent coding harness plugin: cursor logic, safe patch, line budget, Rust index, and test gates.",
|
|
5
|
+
"author": "cluxion",
|
|
6
|
+
"commands": "./commands",
|
|
7
|
+
"skills": "./skills"
|
|
8
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Agent Surfaces
|
|
2
|
+
|
|
3
|
+
Supercoder uses one root plugin artifact for Codex and Claude Code, plus the existing Hermes
|
|
4
|
+
entry point. Every surface calls the same `cluxion-supercoder` JSON contracts.
|
|
5
|
+
|
|
6
|
+
## Codex
|
|
7
|
+
|
|
8
|
+
Codex uses the root marketplace artifact:
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
codex plugin marketplace add cluxion-local /path/to/cluxion-Agentplugin-supercoder
|
|
12
|
+
codex plugin add cluxion-agentplugin-supercoder@cluxion-local
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Files:
|
|
16
|
+
|
|
17
|
+
- `.codex-plugin/plugin.json`
|
|
18
|
+
- `commands/`
|
|
19
|
+
- `skills/supercoder/SKILL.md`
|
|
20
|
+
|
|
21
|
+
No `[plugins.<name>] command = [...]` schema exists.
|
|
22
|
+
|
|
23
|
+
## Claude Code
|
|
24
|
+
|
|
25
|
+
Claude Code uses the same root layout:
|
|
26
|
+
|
|
27
|
+
- `.claude-plugin/plugin.json`
|
|
28
|
+
- `commands/`
|
|
29
|
+
- `skills/supercoder/SKILL.md`
|
|
30
|
+
|
|
31
|
+
## Hermes
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
hermes plugins enable cluxion-agentplugin-supercoder
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Hermes registers the `supercoder` toolset through `hermes_agent.plugins`.
|
|
38
|
+
|
|
39
|
+
Tools (10): `supercoder_plan`, `supercoder_repo_map`, `supercoder_read_window`, `supercoder_patch`,
|
|
40
|
+
`supercoder_cursor_map`, `supercoder_syntax_gate`, `supercoder_lint_gate`, `supercoder_test_gate`,
|
|
41
|
+
`supercoder_brief`, `supercoder_doctor`
|
|
42
|
+
|
|
43
|
+
## Host Agent Rules
|
|
44
|
+
|
|
45
|
+
1. Run `cluxion-supercoder plan --json-stdin` only for coding requests; respect `mode=bypass`.
|
|
46
|
+
2. Run `read-window` before each patch and use the returned `file_hash`.
|
|
47
|
+
3. Run suggested tests in the host terminal and record evidence in `brief`.
|
|
48
|
+
4. Report stale cursors, retry exhaustion, and blocked checks honestly.
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# Installation
|
|
2
|
+
|
|
3
|
+
## Requirements
|
|
4
|
+
|
|
5
|
+
- Python 3.11+
|
|
6
|
+
- Optional Rust toolchain for `supercoder-index`
|
|
7
|
+
|
|
8
|
+
## Python package
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
pip install cluxion-agentplugin-supercoder
|
|
12
|
+
cluxion-supercoder check
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Development:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
uv venv && uv pip install -e ".[dev]"
|
|
19
|
+
uv run pytest
|
|
20
|
+
uv run ruff check .
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Codex marketplace install
|
|
24
|
+
|
|
25
|
+
Local path example:
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
codex plugin marketplace add cluxion-local /path/to/cluxion-Agentplugin-supercoder
|
|
29
|
+
codex plugin add cluxion-agentplugin-supercoder@cluxion-local
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Git URL example:
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
codex plugin marketplace add cluxion https://github.com/cluxion/cluxion-Agentplugin-supercoder
|
|
36
|
+
codex plugin add cluxion-agentplugin-supercoder@cluxion
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Do not use a `[plugins.<name>] command = [...]` block; Codex plugins are marketplace plugins.
|
|
40
|
+
|
|
41
|
+
## Claude Code plugin install
|
|
42
|
+
|
|
43
|
+
Install the same repository from the root `.claude-plugin/plugin.json`, then use the `supercoder`
|
|
44
|
+
skill or `/supercoder` and `/supercoder-doctor` commands. The commands call `cluxion-supercoder`
|
|
45
|
+
and leave model execution to the host agent.
|
|
46
|
+
|
|
47
|
+
## Hermes Agent
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
hermes plugins enable cluxion-agentplugin-supercoder
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
toolset: `supercoder`
|
|
54
|
+
|
|
55
|
+
Hermes support stays on the existing `hermes_agent.plugins` entry point. Slash commands are registered
|
|
56
|
+
by the plugin at session start.
|
|
57
|
+
|
|
58
|
+
## Rust sidecar (optional)
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
cargo build --release --manifest-path rust/supercoder_index/Cargo.toml
|
|
62
|
+
export CLUXION_SUPERCODER_INDEX_BIN=/path/to/supercoder-index
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
`cluxion-supercoder check` reports `rust_index: true` when the sidecar is available.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: cluxion-agentplugin-supercoder
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.17
|
|
4
4
|
Summary: Universal agent coding harness plugin: cursor logic, safe patch, line budget, Rust index, test gates.
|
|
5
5
|
Project-URL: Homepage, https://github.com/cluxion/cluxion-Agentplugin-supercoder
|
|
6
6
|
Project-URL: Repository, https://github.com/cluxion/cluxion-Agentplugin-supercoder
|
|
@@ -73,7 +73,7 @@ cluxion-supercoder doctor --json # 구조화 출력
|
|
|
73
73
|
|
|
74
74
|
Hermes 안에서는 `supercoder_doctor` 도구로도 노출됩니다.
|
|
75
75
|
|
|
76
|
-
##
|
|
76
|
+
## Slash commands and marketplace plugins (0.2.17+)
|
|
77
77
|
|
|
78
78
|
```
|
|
79
79
|
/supercoder fix failing auth tests and run gates
|
|
@@ -87,6 +87,13 @@ Hermes 안에서는 `supercoder_doctor` 도구로도 노출됩니다.
|
|
|
87
87
|
|
|
88
88
|
`/` 입력 시 `/super`로 필터 가능 · `deliver=agent`로 작업 지시가 에이전트 턴에 전달됩니다.
|
|
89
89
|
|
|
90
|
+
Codex와 Claude Code는 루트 plugin artifact를 설치합니다:
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
codex plugin marketplace add cluxion-local /path/to/cluxion-Agentplugin-supercoder
|
|
94
|
+
codex plugin add cluxion-agentplugin-supercoder@cluxion-local
|
|
95
|
+
```
|
|
96
|
+
|
|
90
97
|
## 라이선스
|
|
91
98
|
|
|
92
99
|
Apache-2.0
|
|
@@ -142,7 +149,7 @@ cluxion-supercoder doctor --json # structured output
|
|
|
142
149
|
|
|
143
150
|
Also exposed inside Hermes as the `supercoder_doctor` tool.
|
|
144
151
|
|
|
145
|
-
##
|
|
152
|
+
## Slash commands and marketplace plugins (0.2.17+)
|
|
146
153
|
|
|
147
154
|
```
|
|
148
155
|
/supercoder fix failing auth tests and run gates
|
|
@@ -156,6 +163,13 @@ Also exposed inside Hermes as the `supercoder_doctor` tool.
|
|
|
156
163
|
|
|
157
164
|
Filter with `/super` · uses `deliver=agent` so the harness directive becomes the next agent turn.
|
|
158
165
|
|
|
166
|
+
Codex and Claude Code install from the root plugin artifact:
|
|
167
|
+
|
|
168
|
+
```bash
|
|
169
|
+
codex plugin marketplace add cluxion-local /path/to/cluxion-Agentplugin-supercoder
|
|
170
|
+
codex plugin add cluxion-agentplugin-supercoder@cluxion-local
|
|
171
|
+
```
|
|
172
|
+
|
|
159
173
|
## License
|
|
160
174
|
|
|
161
175
|
Apache-2.0
|
|
@@ -50,7 +50,7 @@ cluxion-supercoder doctor --json # 구조화 출력
|
|
|
50
50
|
|
|
51
51
|
Hermes 안에서는 `supercoder_doctor` 도구로도 노출됩니다.
|
|
52
52
|
|
|
53
|
-
##
|
|
53
|
+
## Slash commands and marketplace plugins (0.2.17+)
|
|
54
54
|
|
|
55
55
|
```
|
|
56
56
|
/supercoder fix failing auth tests and run gates
|
|
@@ -64,6 +64,13 @@ Hermes 안에서는 `supercoder_doctor` 도구로도 노출됩니다.
|
|
|
64
64
|
|
|
65
65
|
`/` 입력 시 `/super`로 필터 가능 · `deliver=agent`로 작업 지시가 에이전트 턴에 전달됩니다.
|
|
66
66
|
|
|
67
|
+
Codex와 Claude Code는 루트 plugin artifact를 설치합니다:
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
codex plugin marketplace add cluxion-local /path/to/cluxion-Agentplugin-supercoder
|
|
71
|
+
codex plugin add cluxion-agentplugin-supercoder@cluxion-local
|
|
72
|
+
```
|
|
73
|
+
|
|
67
74
|
## 라이선스
|
|
68
75
|
|
|
69
76
|
Apache-2.0
|
|
@@ -119,7 +126,7 @@ cluxion-supercoder doctor --json # structured output
|
|
|
119
126
|
|
|
120
127
|
Also exposed inside Hermes as the `supercoder_doctor` tool.
|
|
121
128
|
|
|
122
|
-
##
|
|
129
|
+
## Slash commands and marketplace plugins (0.2.17+)
|
|
123
130
|
|
|
124
131
|
```
|
|
125
132
|
/supercoder fix failing auth tests and run gates
|
|
@@ -133,6 +140,13 @@ Also exposed inside Hermes as the `supercoder_doctor` tool.
|
|
|
133
140
|
|
|
134
141
|
Filter with `/super` · uses `deliver=agent` so the harness directive becomes the next agent turn.
|
|
135
142
|
|
|
143
|
+
Codex and Claude Code install from the root plugin artifact:
|
|
144
|
+
|
|
145
|
+
```bash
|
|
146
|
+
codex plugin marketplace add cluxion-local /path/to/cluxion-Agentplugin-supercoder
|
|
147
|
+
codex plugin add cluxion-agentplugin-supercoder@cluxion-local
|
|
148
|
+
```
|
|
149
|
+
|
|
136
150
|
## License
|
|
137
151
|
|
|
138
152
|
Apache-2.0
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Run Cluxion Supercoder planning for a coding task.
|
|
3
|
+
argument-hint: "<task>"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Run:
|
|
7
|
+
|
|
8
|
+
```bash
|
|
9
|
+
cluxion-supercoder plan --json-stdin
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
stdin:
|
|
13
|
+
|
|
14
|
+
```json
|
|
15
|
+
{"prompt":"$ARGUMENTS","cwd":"$PWD"}
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
Use the JSON contract to decide whether the task is a coding task. If `mode` is `coding_queue`, follow the Supercoder workflow from the `supercoder` skill before editing.
|
{cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/pyproject.toml
RENAMED
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "cluxion-agentplugin-supercoder"
|
|
7
|
-
version = "0.2.
|
|
7
|
+
version = "0.2.17"
|
|
8
8
|
description = "Universal agent coding harness plugin: cursor logic, safe patch, line budget, Rust index, test gates."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.11"
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cluxion-supercoder
|
|
3
|
+
description: Use Cluxion Supercoder for coding tasks that need bounded reads, hash-verified patches, syntax/lint/test gates, or evidence-based briefs.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Cluxion Supercoder
|
|
7
|
+
|
|
8
|
+
Call the package CLI. It returns JSON contracts; the host agent owns file reads, edits, terminal commands, and final answers.
|
|
9
|
+
|
|
10
|
+
## Plan
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
cluxion-supercoder plan --json-stdin
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Minimum stdin:
|
|
17
|
+
|
|
18
|
+
```json
|
|
19
|
+
{"prompt":"<user request>","cwd":"<workspace>"}
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
If the result is `mode=bypass`, continue without Supercoder. If the result is `mode=coding_queue`, follow this workflow:
|
|
23
|
+
|
|
24
|
+
1. Use the plan and embedded `repo_map` for orientation; call `repo-map` when more map context is needed.
|
|
25
|
+
2. Call `read-window` before each edit and use the returned `file_hash`.
|
|
26
|
+
3. Call `patch` with exact `old_text`, `new_text`, and `expected_file_hash`.
|
|
27
|
+
4. Call `syntax-gate`, `lint-gate`, and `test-gate`; the host must run any suggested tests in the terminal.
|
|
28
|
+
5. Call `brief` with `files_changed`, `tests_run`, `verification_status`, and remaining risks.
|
|
29
|
+
|
|
30
|
+
## JSON Commands
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
cluxion-supercoder read-window --json-stdin
|
|
34
|
+
cluxion-supercoder patch --json-stdin
|
|
35
|
+
cluxion-supercoder cursor-map --json-stdin
|
|
36
|
+
cluxion-supercoder repo-map --json-stdin
|
|
37
|
+
cluxion-supercoder syntax-gate --json-stdin
|
|
38
|
+
cluxion-supercoder lint-gate --json-stdin
|
|
39
|
+
cluxion-supercoder test-gate --json-stdin
|
|
40
|
+
cluxion-supercoder brief --json-stdin
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Doctor
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
cluxion-supercoder doctor
|
|
47
|
+
cluxion-supercoder doctor --json
|
|
48
|
+
```
|
|
@@ -7,11 +7,23 @@ from collections.abc import Sequence
|
|
|
7
7
|
from importlib.resources import files
|
|
8
8
|
from pathlib import Path
|
|
9
9
|
|
|
10
|
-
from cluxion_agentplugin_supercoder import __version__
|
|
10
|
+
from cluxion_agentplugin_supercoder import __version__, runner
|
|
11
11
|
from cluxion_agentplugin_supercoder.doctor import render_json, render_text, run_doctor
|
|
12
12
|
from cluxion_agentplugin_supercoder.doctor.probes import PROBES
|
|
13
13
|
from cluxion_agentplugin_supercoder.rust_bridge import index_available, resolve_backend
|
|
14
14
|
|
|
15
|
+
_JSON_COMMANDS = {
|
|
16
|
+
"plan": runner.plan,
|
|
17
|
+
"read-window": runner.read_window_tool,
|
|
18
|
+
"patch": runner.patch_tool,
|
|
19
|
+
"cursor-map": runner.cursor_map_tool,
|
|
20
|
+
"syntax-gate": runner.syntax_gate_tool,
|
|
21
|
+
"lint-gate": runner.lint_gate_tool,
|
|
22
|
+
"repo-map": runner.repo_map_tool,
|
|
23
|
+
"test-gate": runner.test_gate_tool,
|
|
24
|
+
"brief": runner.brief_tool,
|
|
25
|
+
}
|
|
26
|
+
|
|
15
27
|
|
|
16
28
|
def main(argv: Sequence[str] | None = None) -> int:
|
|
17
29
|
parser = argparse.ArgumentParser(prog="cluxion-supercoder")
|
|
@@ -21,6 +33,9 @@ def main(argv: Sequence[str] | None = None) -> int:
|
|
|
21
33
|
doctor_p = sub.add_parser("doctor", help="Run embedded doctor checks")
|
|
22
34
|
doctor_p.add_argument("--json", action="store_true", help="Output JSON to stdout")
|
|
23
35
|
doctor_p.add_argument("--verbose", action="store_true", help="Verbose text output")
|
|
36
|
+
for name in _JSON_COMMANDS:
|
|
37
|
+
command_p = sub.add_parser(name, help=f"Run {name} JSON contract")
|
|
38
|
+
command_p.add_argument("--json-stdin", action="store_true", help="Read request payload as JSON from stdin")
|
|
24
39
|
args = parser.parse_args(argv)
|
|
25
40
|
if args.command == "check":
|
|
26
41
|
payload = {
|
|
@@ -45,10 +60,34 @@ def main(argv: Sequence[str] | None = None) -> int:
|
|
|
45
60
|
if args.json:
|
|
46
61
|
print(render_json(result))
|
|
47
62
|
return 0 if result.ok else 1
|
|
63
|
+
if args.command in _JSON_COMMANDS:
|
|
64
|
+
return _run_json_command(args.command, bool(args.json_stdin))
|
|
48
65
|
parser.print_help(sys.stderr)
|
|
49
66
|
return 2
|
|
50
67
|
|
|
51
68
|
|
|
69
|
+
def _run_json_command(command: str, json_stdin: bool) -> int:
|
|
70
|
+
if not json_stdin:
|
|
71
|
+
print(json.dumps({"ok": False, "error": "--json-stdin is required"}, ensure_ascii=False, sort_keys=True))
|
|
72
|
+
return 2
|
|
73
|
+
try:
|
|
74
|
+
raw = sys.stdin.read()
|
|
75
|
+
payload = json.loads(raw or "{}")
|
|
76
|
+
except json.JSONDecodeError as exc:
|
|
77
|
+
print(json.dumps({"ok": False, "error": f"invalid JSON stdin: {exc.msg}"}, ensure_ascii=False, sort_keys=True))
|
|
78
|
+
return 2
|
|
79
|
+
if not isinstance(payload, dict):
|
|
80
|
+
print(json.dumps({"ok": False, "error": "JSON stdin must be an object"}, ensure_ascii=False, sort_keys=True))
|
|
81
|
+
return 2
|
|
82
|
+
try:
|
|
83
|
+
result = _JSON_COMMANDS[command](payload)
|
|
84
|
+
except (ValueError, TypeError, OSError) as exc:
|
|
85
|
+
print(json.dumps({"ok": False, "error": str(exc)}, ensure_ascii=False, sort_keys=True))
|
|
86
|
+
return 1
|
|
87
|
+
print(result.to_json())
|
|
88
|
+
return 0 if result.ok else 1
|
|
89
|
+
|
|
90
|
+
|
|
52
91
|
def load_catalog_for_text(catalog_path):
|
|
53
92
|
# helper to avoid circular, but since framework has load_catalog
|
|
54
93
|
from cluxion_agentplugin_supercoder.doctor.framework import load_catalog
|
|
@@ -4,7 +4,6 @@ import json
|
|
|
4
4
|
from collections.abc import Callable, Mapping
|
|
5
5
|
|
|
6
6
|
from cluxion_agentplugin_supercoder import runner
|
|
7
|
-
from cluxion_agentplugin_supercoder.core.test_gate import suggest_test_commands
|
|
8
7
|
from cluxion_agentplugin_supercoder.schemas import (
|
|
9
8
|
BRIEF_SCHEMA,
|
|
10
9
|
CURSOR_MAP_SCHEMA,
|
|
@@ -69,11 +68,11 @@ def register(ctx: object) -> None:
|
|
|
69
68
|
name="supercoder_test_gate",
|
|
70
69
|
toolset="supercoder",
|
|
71
70
|
schema=TEST_GATE_SCHEMA,
|
|
72
|
-
handler=
|
|
71
|
+
handler=_wrap(runner.test_gate_tool),
|
|
73
72
|
emoji="🧪",
|
|
74
73
|
)
|
|
75
74
|
ctx.register_tool(
|
|
76
|
-
name="supercoder_brief", toolset="supercoder", schema=BRIEF_SCHEMA, handler=
|
|
75
|
+
name="supercoder_brief", toolset="supercoder", schema=BRIEF_SCHEMA, handler=_wrap(runner.brief_tool), emoji="📋"
|
|
77
76
|
)
|
|
78
77
|
# doctor tool registration (additive)
|
|
79
78
|
from importlib.resources import files
|
|
@@ -149,34 +148,4 @@ def _wrap(callback: Callable[[dict[str, object]], runner.ToolResult]) -> Callabl
|
|
|
149
148
|
return handler
|
|
150
149
|
|
|
151
150
|
|
|
152
|
-
def _handle_test_gate(args: dict[str, object], **_: object) -> str:
|
|
153
|
-
from pathlib import Path
|
|
154
|
-
|
|
155
|
-
raw_files = args.get("files_changed", [])
|
|
156
|
-
files_changed = [str(item) for item in raw_files] if isinstance(raw_files, list) else []
|
|
157
|
-
cwd_raw = str(args.get("cwd", ".")).strip() or "."
|
|
158
|
-
payload = suggest_test_commands(
|
|
159
|
-
files_changed,
|
|
160
|
-
command=str(args.get("command", "")).strip() or None,
|
|
161
|
-
cwd=Path(cwd_raw).expanduser().resolve(),
|
|
162
|
-
)
|
|
163
|
-
return json.dumps(payload, ensure_ascii=False, sort_keys=True)
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
def _handle_brief(args: dict[str, object], **_: object) -> str:
|
|
167
|
-
return json.dumps(
|
|
168
|
-
{
|
|
169
|
-
"ok": True,
|
|
170
|
-
"brief": {
|
|
171
|
-
"files_changed": args.get("files_changed", []),
|
|
172
|
-
"tests_run": args.get("tests_run", []),
|
|
173
|
-
"verification_status": args.get("verification_status", "unknown_after_check"),
|
|
174
|
-
"remaining_risks": args.get("remaining_risks", []),
|
|
175
|
-
},
|
|
176
|
-
},
|
|
177
|
-
ensure_ascii=False,
|
|
178
|
-
sort_keys=True,
|
|
179
|
-
)
|
|
180
|
-
|
|
181
|
-
|
|
182
151
|
__all__ = ["register"]
|
|
@@ -11,6 +11,7 @@ from cluxion_agentplugin_supercoder.core.hash_patch import apply_patch
|
|
|
11
11
|
from cluxion_agentplugin_supercoder.core.line_budget import budget_for, is_coding_task
|
|
12
12
|
from cluxion_agentplugin_supercoder.core.queue import plan_coding_task
|
|
13
13
|
from cluxion_agentplugin_supercoder.core.safety import pre_tool_gate
|
|
14
|
+
from cluxion_agentplugin_supercoder.core.test_gate import suggest_test_commands
|
|
14
15
|
|
|
15
16
|
|
|
16
17
|
def _int(v: object, default: int) -> int:
|
|
@@ -199,8 +200,35 @@ def repo_map_tool(payload: Mapping[str, object]) -> ToolResult:
|
|
|
199
200
|
return ToolResult(bool(result.get("ok", False)), {key: value for key, value in result.items() if key != "ok"})
|
|
200
201
|
|
|
201
202
|
|
|
203
|
+
def test_gate_tool(payload: Mapping[str, object]) -> ToolResult:
|
|
204
|
+
raw_files = payload.get("files_changed", [])
|
|
205
|
+
files_changed = [str(item) for item in raw_files] if isinstance(raw_files, list) else []
|
|
206
|
+
cwd_raw = str(payload.get("cwd", ".")).strip() or "."
|
|
207
|
+
body = suggest_test_commands(
|
|
208
|
+
files_changed,
|
|
209
|
+
command=str(payload.get("command", "")).strip() or None,
|
|
210
|
+
cwd=Path(cwd_raw).expanduser().resolve(),
|
|
211
|
+
)
|
|
212
|
+
return ToolResult(bool(body.get("ok", False)), {key: value for key, value in body.items() if key != "ok"})
|
|
213
|
+
|
|
214
|
+
|
|
215
|
+
def brief_tool(payload: Mapping[str, object]) -> ToolResult:
|
|
216
|
+
return ToolResult(
|
|
217
|
+
True,
|
|
218
|
+
{
|
|
219
|
+
"brief": {
|
|
220
|
+
"files_changed": payload.get("files_changed", []),
|
|
221
|
+
"tests_run": payload.get("tests_run", []),
|
|
222
|
+
"verification_status": payload.get("verification_status", "unknown_after_check"),
|
|
223
|
+
"remaining_risks": payload.get("remaining_risks", []),
|
|
224
|
+
},
|
|
225
|
+
},
|
|
226
|
+
)
|
|
227
|
+
|
|
228
|
+
|
|
202
229
|
__all__ = [
|
|
203
230
|
"ToolResult",
|
|
231
|
+
"brief_tool",
|
|
204
232
|
"cursor_map_tool",
|
|
205
233
|
"lint_gate_tool",
|
|
206
234
|
"patch_tool",
|
|
@@ -208,4 +236,5 @@ __all__ = [
|
|
|
208
236
|
"read_window_tool",
|
|
209
237
|
"repo_map_tool",
|
|
210
238
|
"syntax_gate_tool",
|
|
239
|
+
"test_gate_tool",
|
|
211
240
|
]
|
|
@@ -22,10 +22,13 @@ Examples:
|
|
|
22
22
|
|
|
23
23
|
Notes:
|
|
24
24
|
- Patches are hash-verified; empty old_text is rejected immediately
|
|
25
|
-
-
|
|
25
|
+
- Slash dispatch skips repo_map (fast); agent calls supercoder_plan for map
|
|
26
26
|
- Diagnostics: /supercoder-doctor
|
|
27
27
|
"""
|
|
28
28
|
|
|
29
|
+
# Hermes Desktop gateway RPC times out at 30s; repo_map on large cwds can exceed that.
|
|
30
|
+
_SLASH_PLAN_KWARGS: dict[str, object] = {"repo_map": False}
|
|
31
|
+
|
|
29
32
|
|
|
30
33
|
def build_supercoder_directive(task: str, plan_payload: dict[str, object]) -> str:
|
|
31
34
|
plan_block = json.dumps(plan_payload, ensure_ascii=False, indent=2)
|
|
@@ -34,7 +37,7 @@ def build_supercoder_directive(task: str, plan_payload: dict[str, object]) -> st
|
|
|
34
37
|
"Use the supercoder toolset for all code changes in this task.\n\n"
|
|
35
38
|
f"Task: {task}\n\n"
|
|
36
39
|
"Required sequence:\n"
|
|
37
|
-
"1. Use the supercoder_plan
|
|
40
|
+
"1. Use the plan below; call supercoder_plan for a fresh repo_map if needed\n"
|
|
38
41
|
"2. supercoder_read_window before each edit\n"
|
|
39
42
|
"3. supercoder_patch only with verified old_text hashes\n"
|
|
40
43
|
"4. supercoder_syntax_gate → supercoder_lint_gate → supercoder_test_gate after edits\n"
|
|
@@ -49,7 +52,9 @@ def handle_supercoder(raw_args: str, ctx: object | None = None) -> str:
|
|
|
49
52
|
if not task or task.lower() in {"help", "-h", "--help"}:
|
|
50
53
|
return SUPERCODER_HELP
|
|
51
54
|
try:
|
|
52
|
-
result = runner.plan(
|
|
55
|
+
result = runner.plan(
|
|
56
|
+
{"prompt": task, "cwd": str(Path.cwd()), **_SLASH_PLAN_KWARGS},
|
|
57
|
+
)
|
|
53
58
|
payload = json.loads(result.to_json())
|
|
54
59
|
if not payload.get("ok"):
|
|
55
60
|
return f"supercoder error: {payload.get('error', 'plan failed')}"
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import json
|
|
4
|
+
|
|
5
|
+
from cluxion_agentplugin_supercoder import cli
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def test_plan_cli_reads_json_stdin(tmp_path, monkeypatch, capsys) -> None:
|
|
9
|
+
monkeypatch.setattr(
|
|
10
|
+
"sys.stdin",
|
|
11
|
+
type("Stdin", (), {"read": lambda self: json.dumps({"prompt": "fix tests", "cwd": str(tmp_path)})})(),
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
assert cli.main(["plan", "--json-stdin"]) == 0
|
|
15
|
+
|
|
16
|
+
payload = json.loads(capsys.readouterr().out)
|
|
17
|
+
assert payload["ok"] is True
|
|
18
|
+
assert payload["mode"] == "coding_queue"
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def test_cli_reports_bad_json_stdin(monkeypatch, capsys) -> None:
|
|
22
|
+
monkeypatch.setattr("sys.stdin", type("Stdin", (), {"read": lambda self: "not json"})())
|
|
23
|
+
|
|
24
|
+
assert cli.main(["plan", "--json-stdin"]) == 2
|
|
25
|
+
|
|
26
|
+
payload = json.loads(capsys.readouterr().out)
|
|
27
|
+
assert payload["ok"] is False
|
|
28
|
+
assert "invalid JSON" in payload["error"]
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import json
|
|
4
|
+
import tomllib
|
|
5
|
+
from pathlib import Path
|
|
6
|
+
|
|
7
|
+
import yaml
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def test_root_plugin_artifacts_are_version_synced() -> None:
|
|
11
|
+
pyproject = tomllib.loads(Path("pyproject.toml").read_text(encoding="utf-8"))
|
|
12
|
+
version = pyproject["project"]["version"]
|
|
13
|
+
|
|
14
|
+
claude = json.loads(Path(".claude-plugin/plugin.json").read_text(encoding="utf-8"))
|
|
15
|
+
codex = json.loads(Path(".codex-plugin/plugin.json").read_text(encoding="utf-8"))
|
|
16
|
+
root_yaml = yaml.safe_load(Path("plugin.yaml").read_text(encoding="utf-8"))
|
|
17
|
+
|
|
18
|
+
assert claude["version"] == version
|
|
19
|
+
assert codex["version"] == version
|
|
20
|
+
assert str(root_yaml["version"]) == version
|
|
21
|
+
assert Path("commands/supercoder.md").is_file()
|
|
22
|
+
assert Path("commands/supercoder-doctor.md").is_file()
|
|
23
|
+
assert Path("skills/supercoder/SKILL.md").is_file()
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def test_per_surface_adapter_forks_are_removed() -> None:
|
|
27
|
+
assert not Path("adapters/codex").exists()
|
|
28
|
+
assert not Path("adapters/claude").exists()
|
|
29
|
+
|
|
@@ -2,6 +2,7 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import json
|
|
4
4
|
|
|
5
|
+
from cluxion_agentplugin_supercoder import runner
|
|
5
6
|
from cluxion_agentplugin_supercoder.slash_commands import (
|
|
6
7
|
SUPERCODER_HELP,
|
|
7
8
|
build_supercoder_directive,
|
|
@@ -28,6 +29,20 @@ def test_handle_supercoder_bypass(tmp_path, monkeypatch) -> None:
|
|
|
28
29
|
assert "not a coding task" in out
|
|
29
30
|
|
|
30
31
|
|
|
32
|
+
def test_handle_supercoder_skips_repo_map_for_fast_dispatch(tmp_path, monkeypatch) -> None:
|
|
33
|
+
monkeypatch.chdir(tmp_path)
|
|
34
|
+
captured: list[dict[str, object]] = []
|
|
35
|
+
|
|
36
|
+
def _spy(payload: dict[str, object]) -> runner.ToolResult:
|
|
37
|
+
captured.append(dict(payload))
|
|
38
|
+
return runner.plan(payload)
|
|
39
|
+
|
|
40
|
+
monkeypatch.setattr(runner, "plan", _spy)
|
|
41
|
+
handle_supercoder("implement pagination in the users API")
|
|
42
|
+
assert captured
|
|
43
|
+
assert captured[0].get("repo_map") is False
|
|
44
|
+
|
|
45
|
+
|
|
31
46
|
def test_handle_supercoder_returns_directive(tmp_path, monkeypatch) -> None:
|
|
32
47
|
monkeypatch.chdir(tmp_path)
|
|
33
48
|
(tmp_path / "a.py").write_text("x=1\n", encoding="utf-8")
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
# Agent Surfaces
|
|
2
|
-
|
|
3
|
-
Supercoder는 Hermes plugin + `supercoder` toolset으로 연결됩니다.
|
|
4
|
-
**연결된 AI**가 코딩 task에서 `supercoder_*` 도구를 호출합니다.
|
|
5
|
-
|
|
6
|
-
## Hermes
|
|
7
|
-
|
|
8
|
-
```bash
|
|
9
|
-
hermes plugins enable cluxion-agentplugin-supercoder
|
|
10
|
-
```
|
|
11
|
-
|
|
12
|
-
Tools (9): `supercoder_plan`, `supercoder_repo_map`, `supercoder_read_window`, `supercoder_patch`, `supercoder_cursor_map`, `supercoder_syntax_gate`, `supercoder_lint_gate`, `supercoder_test_gate`, `supercoder_brief`
|
|
13
|
-
|
|
14
|
-
## Claude / Codex / Grok
|
|
15
|
-
|
|
16
|
-
동일 tool semantics를 skill·CLI로 안내합니다.
|
|
17
|
-
코딩 bounded read·patch·evidence 규칙은 Hermes와 같습니다.
|
|
18
|
-
|
|
19
|
-
## 연결된 AI 규칙
|
|
20
|
-
|
|
21
|
-
1. 코딩 요청만 `supercoder_plan` — 그 외 `bypass`
|
|
22
|
-
2. patch 전 `read_window`로 hash 확보
|
|
23
|
-
3. 테스트는 host terminal 실행 후 brief에 evidence 기록
|
|
24
|
-
4. stale·blocked 시 사용자에게 명시적 보고
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
# Installation
|
|
2
|
-
|
|
3
|
-
## 요구 사항
|
|
4
|
-
|
|
5
|
-
- Python 3.11+
|
|
6
|
-
- (선택) Rust — `supercoder-index` 빌드
|
|
7
|
-
|
|
8
|
-
## 설치
|
|
9
|
-
|
|
10
|
-
```bash
|
|
11
|
-
pip install cluxion-agentplugin-supercoder
|
|
12
|
-
cluxion-supercoder check
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
개발:
|
|
16
|
-
|
|
17
|
-
```bash
|
|
18
|
-
uv venv && uv pip install -e ".[dev]"
|
|
19
|
-
uv run pytest
|
|
20
|
-
uv run ruff check .
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
## Hermes Agent
|
|
24
|
-
|
|
25
|
-
```bash
|
|
26
|
-
hermes plugins enable cluxion-agentplugin-supercoder
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
toolset: `supercoder`
|
|
30
|
-
|
|
31
|
-
레거시 entry point 이름 `hermes-supercoder`도 호환용으로 제공됩니다.
|
|
32
|
-
|
|
33
|
-
## Rust sidecar (선택)
|
|
34
|
-
|
|
35
|
-
```bash
|
|
36
|
-
cargo build --release --manifest-path rust/supercoder_index/Cargo.toml
|
|
37
|
-
export CLUXION_SUPERCODER_INDEX_BIN=/path/to/supercoder-index
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
`cluxion-supercoder check`에서 `rust_index: true` 확인.
|
|
41
|
-
|
|
42
|
-
## 다른 에이전트
|
|
43
|
-
|
|
44
|
-
Claude / Codex / Grok: `plugin.yaml`의 `surfaces` 목록 참고.
|
|
45
|
-
각 환경의 공식 plugin/skill 메커니즘으로 `register()` 또는 skill 문서를 연결합니다.
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: cluxion-supercoder
|
|
3
|
-
description: Coding harness for bounded reads, hash-verified patches, and evidence-based briefs. You (the connected AI) call supercoder tools before editing code.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Supercoder — 연결된 AI 지시문
|
|
7
|
-
|
|
8
|
-
코딩 작업에서 **당신(연결된 AI)** 이 `supercoder_*` 도구를 호출합니다.
|
|
9
|
-
|
|
10
|
-
## 흐름
|
|
11
|
-
|
|
12
|
-
1. `supercoder_plan` — 코딩 task면 WorkUnit 큐, 아니면 `bypass`
|
|
13
|
-
2. `supercoder_cursor_map` / `supercoder_read_window` — bounded context + hashes
|
|
14
|
-
3. `supercoder_patch` — `expected_file_hash` 필수
|
|
15
|
-
4. host terminal에서 테스트 실행
|
|
16
|
-
5. `supercoder_brief` — `files_changed`, `tests_run` evidence 필수
|
|
17
|
-
|
|
18
|
-
## 규칙
|
|
19
|
-
|
|
20
|
-
- patch 전 반드시 read_window로 hash 확보
|
|
21
|
-
- stale hash면 patch 거부 — 다시 read
|
|
22
|
-
- 테스트 통과를 주장하려면 실제 실행 결과를 brief에 기록
|
|
23
|
-
- 비코딩 질문은 plan bypass로 오버헤드 최소화
|
|
24
|
-
|
|
25
|
-
## 설치 확인
|
|
26
|
-
|
|
27
|
-
```bash
|
|
28
|
-
cluxion-supercoder check
|
|
29
|
-
hermes plugins enable cluxion-agentplugin-supercoder
|
|
30
|
-
```
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
# Hermes adapter
|
|
2
|
-
|
|
3
|
-
```bash
|
|
4
|
-
pip install cluxion-agentplugin-supercoder
|
|
5
|
-
hermes plugins enable cluxion-agentplugin-supercoder
|
|
6
|
-
cluxion-supercoder check
|
|
7
|
-
```
|
|
8
|
-
|
|
9
|
-
Tools: `supercoder_plan`, `supercoder_read_window`, `supercoder_patch`, `supercoder_cursor_map`, `supercoder_test_gate`, `supercoder_brief`
|
|
10
|
-
|
|
11
|
-
연결된 AI가 코딩 task에서 위 도구를 순서대로 호출합니다.
|
|
12
|
-
|
|
13
|
-
## 슬래시 (0.2.15+)
|
|
14
|
-
|
|
15
|
-
```
|
|
16
|
-
/supercoder <task> # 코딩 모드 — plan + 패치/게이트 워크플로우 지시
|
|
17
|
-
/supercoder-doctor
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
`/` 입력 시 `/super`로 필터 · `/supercoder`는 에이전트 턴으로 전달(`deliver=agent`).
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/ARCHITECTURE.md
RENAMED
|
File without changes
|
{cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/Docs/README.md
RENAMED
|
File without changes
|
{cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/Docs/architecture.md
RENAMED
|
File without changes
|
{cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/Docs/capabilities.md
RENAMED
|
File without changes
|
{cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/Docs/design.md
RENAMED
|
File without changes
|
|
File without changes
|
{cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/Docs/tools.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/tests/test_cursor.py
RENAMED
|
File without changes
|
{cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/tests/test_doctor.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/tests/test_plugin.py
RENAMED
|
File without changes
|
{cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/tests/test_queue.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cluxion_agentplugin_supercoder-0.2.15 → cluxion_agentplugin_supercoder-0.2.17}/tests/test_safety.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|