cluxion-agentplugin-supercoder 0.2.16__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.
Files changed (84) hide show
  1. cluxion_agentplugin_supercoder-0.2.17/.claude-plugin/plugin.json +8 -0
  2. cluxion_agentplugin_supercoder-0.2.17/.codex-plugin/plugin.json +8 -0
  3. cluxion_agentplugin_supercoder-0.2.17/Docs/agent-surfaces.md +48 -0
  4. cluxion_agentplugin_supercoder-0.2.17/Docs/installation.md +65 -0
  5. {cluxion_agentplugin_supercoder-0.2.16 → cluxion_agentplugin_supercoder-0.2.17}/PKG-INFO +17 -3
  6. {cluxion_agentplugin_supercoder-0.2.16 → cluxion_agentplugin_supercoder-0.2.17}/README.md +16 -2
  7. cluxion_agentplugin_supercoder-0.2.17/commands/supercoder-doctor.md +9 -0
  8. cluxion_agentplugin_supercoder-0.2.17/commands/supercoder.md +18 -0
  9. {cluxion_agentplugin_supercoder-0.2.16 → cluxion_agentplugin_supercoder-0.2.17}/plugin.yaml +1 -1
  10. {cluxion_agentplugin_supercoder-0.2.16 → cluxion_agentplugin_supercoder-0.2.17}/pyproject.toml +1 -1
  11. cluxion_agentplugin_supercoder-0.2.17/skills/supercoder/SKILL.md +48 -0
  12. {cluxion_agentplugin_supercoder-0.2.16 → cluxion_agentplugin_supercoder-0.2.17}/src/cluxion_agentplugin_supercoder/cli.py +40 -1
  13. {cluxion_agentplugin_supercoder-0.2.16 → cluxion_agentplugin_supercoder-0.2.17}/src/cluxion_agentplugin_supercoder/plugin.py +2 -33
  14. {cluxion_agentplugin_supercoder-0.2.16 → cluxion_agentplugin_supercoder-0.2.17}/src/cluxion_agentplugin_supercoder/runner.py +29 -0
  15. cluxion_agentplugin_supercoder-0.2.17/tests/test_cli_contract.py +28 -0
  16. cluxion_agentplugin_supercoder-0.2.17/tests/test_packaging_policy.py +29 -0
  17. {cluxion_agentplugin_supercoder-0.2.16 → cluxion_agentplugin_supercoder-0.2.17}/uv.lock +1 -1
  18. cluxion_agentplugin_supercoder-0.2.16/Docs/agent-surfaces.md +0 -24
  19. cluxion_agentplugin_supercoder-0.2.16/Docs/installation.md +0 -45
  20. cluxion_agentplugin_supercoder-0.2.16/adapters/claude/.claude-plugin/plugin.json +0 -6
  21. cluxion_agentplugin_supercoder-0.2.16/adapters/claude/skills/supercoder/SKILL.md +0 -30
  22. cluxion_agentplugin_supercoder-0.2.16/adapters/codex/config-snippet.toml +0 -6
  23. cluxion_agentplugin_supercoder-0.2.16/adapters/hermes/README.md +0 -20
  24. {cluxion_agentplugin_supercoder-0.2.16 → cluxion_agentplugin_supercoder-0.2.17}/.github/workflows/ci.yml +0 -0
  25. {cluxion_agentplugin_supercoder-0.2.16 → cluxion_agentplugin_supercoder-0.2.17}/.github/workflows/publish.yml +0 -0
  26. {cluxion_agentplugin_supercoder-0.2.16 → cluxion_agentplugin_supercoder-0.2.17}/.gitignore +0 -0
  27. {cluxion_agentplugin_supercoder-0.2.16 → cluxion_agentplugin_supercoder-0.2.17}/.grok-briefs/ci-hermes-probe-skip.md +0 -0
  28. {cluxion_agentplugin_supercoder-0.2.16 → cluxion_agentplugin_supercoder-0.2.17}/.grok-briefs/fix-empty-oldtext-infinite-loop.md +0 -0
  29. {cluxion_agentplugin_supercoder-0.2.16 → cluxion_agentplugin_supercoder-0.2.17}/.grok-briefs/fix-hash-patch-race-0619.md +0 -0
  30. {cluxion_agentplugin_supercoder-0.2.16 → cluxion_agentplugin_supercoder-0.2.17}/.grok-briefs/fix-live-audit-0619.md +0 -0
  31. {cluxion_agentplugin_supercoder-0.2.16 → cluxion_agentplugin_supercoder-0.2.17}/.grok-briefs/p0-read-path-security.md +0 -0
  32. {cluxion_agentplugin_supercoder-0.2.16 → cluxion_agentplugin_supercoder-0.2.17}/.grok-briefs/p2-doctor-security-probes.md +0 -0
  33. {cluxion_agentplugin_supercoder-0.2.16 → cluxion_agentplugin_supercoder-0.2.17}/.grok-briefs/perf-0619.md +0 -0
  34. {cluxion_agentplugin_supercoder-0.2.16 → cluxion_agentplugin_supercoder-0.2.17}/ARCHITECTURE.md +0 -0
  35. {cluxion_agentplugin_supercoder-0.2.16 → cluxion_agentplugin_supercoder-0.2.17}/Docs/README.md +0 -0
  36. {cluxion_agentplugin_supercoder-0.2.16 → cluxion_agentplugin_supercoder-0.2.17}/Docs/architecture.md +0 -0
  37. {cluxion_agentplugin_supercoder-0.2.16 → cluxion_agentplugin_supercoder-0.2.17}/Docs/capabilities.md +0 -0
  38. {cluxion_agentplugin_supercoder-0.2.16 → cluxion_agentplugin_supercoder-0.2.17}/Docs/design.md +0 -0
  39. {cluxion_agentplugin_supercoder-0.2.16 → cluxion_agentplugin_supercoder-0.2.17}/Docs/rust-architecture.md +0 -0
  40. {cluxion_agentplugin_supercoder-0.2.16 → cluxion_agentplugin_supercoder-0.2.17}/Docs/tools.md +0 -0
  41. {cluxion_agentplugin_supercoder-0.2.16 → cluxion_agentplugin_supercoder-0.2.17}/LICENSE +0 -0
  42. {cluxion_agentplugin_supercoder-0.2.16 → cluxion_agentplugin_supercoder-0.2.17}/__init__.py +0 -0
  43. {cluxion_agentplugin_supercoder-0.2.16 → cluxion_agentplugin_supercoder-0.2.17}/dist-merged/cluxion_agentplugin_supercoder-0.2.13-cp311-abi3-macosx_11_0_arm64.whl +0 -0
  44. {cluxion_agentplugin_supercoder-0.2.16 → cluxion_agentplugin_supercoder-0.2.17}/rust/supercoder_index/Cargo.lock +0 -0
  45. {cluxion_agentplugin_supercoder-0.2.16 → cluxion_agentplugin_supercoder-0.2.17}/rust/supercoder_index/Cargo.toml +0 -0
  46. {cluxion_agentplugin_supercoder-0.2.16 → cluxion_agentplugin_supercoder-0.2.17}/rust/supercoder_index/pyproject.toml +0 -0
  47. {cluxion_agentplugin_supercoder-0.2.16 → cluxion_agentplugin_supercoder-0.2.17}/rust/supercoder_index/src/lib.rs +0 -0
  48. {cluxion_agentplugin_supercoder-0.2.16 → cluxion_agentplugin_supercoder-0.2.17}/rust/supercoder_index/src/main.rs +0 -0
  49. {cluxion_agentplugin_supercoder-0.2.16 → cluxion_agentplugin_supercoder-0.2.17}/rust/supercoder_index/src/outline.rs +0 -0
  50. {cluxion_agentplugin_supercoder-0.2.16 → cluxion_agentplugin_supercoder-0.2.17}/rust/supercoder_index/src/syntax.rs +0 -0
  51. {cluxion_agentplugin_supercoder-0.2.16 → cluxion_agentplugin_supercoder-0.2.17}/rust/supercoder_index/uv.lock +0 -0
  52. {cluxion_agentplugin_supercoder-0.2.16 → cluxion_agentplugin_supercoder-0.2.17}/scripts/repack_native_wheel.py +0 -0
  53. {cluxion_agentplugin_supercoder-0.2.16 → cluxion_agentplugin_supercoder-0.2.17}/src/cluxion_agentplugin_supercoder/__init__.py +0 -0
  54. {cluxion_agentplugin_supercoder-0.2.16 → cluxion_agentplugin_supercoder-0.2.17}/src/cluxion_agentplugin_supercoder/core/cursor.py +0 -0
  55. {cluxion_agentplugin_supercoder-0.2.16 → cluxion_agentplugin_supercoder-0.2.17}/src/cluxion_agentplugin_supercoder/core/hash_patch.py +0 -0
  56. {cluxion_agentplugin_supercoder-0.2.16 → cluxion_agentplugin_supercoder-0.2.17}/src/cluxion_agentplugin_supercoder/core/line_budget.py +0 -0
  57. {cluxion_agentplugin_supercoder-0.2.16 → cluxion_agentplugin_supercoder-0.2.17}/src/cluxion_agentplugin_supercoder/core/lint_gate.py +0 -0
  58. {cluxion_agentplugin_supercoder-0.2.16 → cluxion_agentplugin_supercoder-0.2.17}/src/cluxion_agentplugin_supercoder/core/queue.py +0 -0
  59. {cluxion_agentplugin_supercoder-0.2.16 → cluxion_agentplugin_supercoder-0.2.17}/src/cluxion_agentplugin_supercoder/core/repo_map.py +0 -0
  60. {cluxion_agentplugin_supercoder-0.2.16 → cluxion_agentplugin_supercoder-0.2.17}/src/cluxion_agentplugin_supercoder/core/retry_loop.py +0 -0
  61. {cluxion_agentplugin_supercoder-0.2.16 → cluxion_agentplugin_supercoder-0.2.17}/src/cluxion_agentplugin_supercoder/core/safety.py +0 -0
  62. {cluxion_agentplugin_supercoder-0.2.16 → cluxion_agentplugin_supercoder-0.2.17}/src/cluxion_agentplugin_supercoder/core/syntax_gate.py +0 -0
  63. {cluxion_agentplugin_supercoder-0.2.16 → cluxion_agentplugin_supercoder-0.2.17}/src/cluxion_agentplugin_supercoder/core/test_gate.py +0 -0
  64. {cluxion_agentplugin_supercoder-0.2.16 → cluxion_agentplugin_supercoder-0.2.17}/src/cluxion_agentplugin_supercoder/doctor/__init__.py +0 -0
  65. {cluxion_agentplugin_supercoder-0.2.16 → cluxion_agentplugin_supercoder-0.2.17}/src/cluxion_agentplugin_supercoder/doctor/catalog.json +0 -0
  66. {cluxion_agentplugin_supercoder-0.2.16 → cluxion_agentplugin_supercoder-0.2.17}/src/cluxion_agentplugin_supercoder/doctor/framework.py +0 -0
  67. {cluxion_agentplugin_supercoder-0.2.16 → cluxion_agentplugin_supercoder-0.2.17}/src/cluxion_agentplugin_supercoder/doctor/probes.py +0 -0
  68. {cluxion_agentplugin_supercoder-0.2.16 → cluxion_agentplugin_supercoder-0.2.17}/src/cluxion_agentplugin_supercoder/rust_bridge.py +0 -0
  69. {cluxion_agentplugin_supercoder-0.2.16 → cluxion_agentplugin_supercoder-0.2.17}/src/cluxion_agentplugin_supercoder/schemas.py +0 -0
  70. {cluxion_agentplugin_supercoder-0.2.16 → cluxion_agentplugin_supercoder-0.2.17}/src/cluxion_agentplugin_supercoder/slash_commands.py +0 -0
  71. {cluxion_agentplugin_supercoder-0.2.16 → cluxion_agentplugin_supercoder-0.2.17}/tests/test_cursor.py +0 -0
  72. {cluxion_agentplugin_supercoder-0.2.16 → cluxion_agentplugin_supercoder-0.2.17}/tests/test_doctor.py +0 -0
  73. {cluxion_agentplugin_supercoder-0.2.16 → cluxion_agentplugin_supercoder-0.2.17}/tests/test_hash_patch.py +0 -0
  74. {cluxion_agentplugin_supercoder-0.2.16 → cluxion_agentplugin_supercoder-0.2.17}/tests/test_line_budget.py +0 -0
  75. {cluxion_agentplugin_supercoder-0.2.16 → cluxion_agentplugin_supercoder-0.2.17}/tests/test_lint_gate.py +0 -0
  76. {cluxion_agentplugin_supercoder-0.2.16 → cluxion_agentplugin_supercoder-0.2.17}/tests/test_plugin.py +0 -0
  77. {cluxion_agentplugin_supercoder-0.2.16 → cluxion_agentplugin_supercoder-0.2.17}/tests/test_queue.py +0 -0
  78. {cluxion_agentplugin_supercoder-0.2.16 → cluxion_agentplugin_supercoder-0.2.17}/tests/test_repo_map.py +0 -0
  79. {cluxion_agentplugin_supercoder-0.2.16 → cluxion_agentplugin_supercoder-0.2.17}/tests/test_retry_loop.py +0 -0
  80. {cluxion_agentplugin_supercoder-0.2.16 → cluxion_agentplugin_supercoder-0.2.17}/tests/test_rust_bridge.py +0 -0
  81. {cluxion_agentplugin_supercoder-0.2.16 → cluxion_agentplugin_supercoder-0.2.17}/tests/test_safety.py +0 -0
  82. {cluxion_agentplugin_supercoder-0.2.16 → cluxion_agentplugin_supercoder-0.2.17}/tests/test_slash_commands.py +0 -0
  83. {cluxion_agentplugin_supercoder-0.2.16 → cluxion_agentplugin_supercoder-0.2.17}/tests/test_syntax_gate.py +0 -0
  84. {cluxion_agentplugin_supercoder-0.2.16 → 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.16
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
- ## Hermes 슬래시 커맨드 (0.2.15+)
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
- ## Hermes slash commands (0.2.15+)
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
- ## Hermes 슬래시 커맨드 (0.2.15+)
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
- ## Hermes slash commands (0.2.15+)
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,9 @@
1
+ ---
2
+ description: Run Cluxion Supercoder diagnostics.
3
+ ---
4
+
5
+ Run:
6
+
7
+ ```bash
8
+ cluxion-supercoder doctor
9
+ ```
@@ -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.
@@ -1,5 +1,5 @@
1
1
  name: cluxion-agentplugin-supercoder
2
- version: 0.2.14
2
+ version: 0.2.17
3
3
  description: "Universal agent coding harness: cursor, safe patch, line budget, Rust index."
4
4
  author: cluxion
5
5
  kind: standalone
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "cluxion-agentplugin-supercoder"
7
- version = "0.2.16"
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=_handle_test_gate,
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=_handle_brief, emoji="📋"
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
  ]
@@ -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
+
@@ -160,7 +160,7 @@ wheels = [
160
160
 
161
161
  [[package]]
162
162
  name = "cluxion-agentplugin-supercoder"
163
- version = "0.2.16"
163
+ version = "0.2.17"
164
164
  source = { editable = "." }
165
165
  dependencies = [
166
166
  { name = "psutil" },
@@ -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,6 +0,0 @@
1
- {
2
- "name": "cluxion-supercoder",
3
- "version": "0.1.0",
4
- "description": "Coding harness plugin for Claude Code",
5
- "author": "cluxion"
6
- }
@@ -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,6 +0,0 @@
1
- # Codex 연동 참고 — 연결된 AI가 supercoder 도구/CLI 사용
2
- # Hermes: hermes plugins enable cluxion-agentplugin-supercoder
3
- # Skill 규칙: adapters/claude/skills/supercoder/SKILL.md 와 동일
4
-
5
- # 코딩 task 시:
6
- # supercoder_plan → read_window → patch (hash) → test (host terminal) → brief
@@ -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`).