cluxion-agentplugin-supercoder 0.2.5__tar.gz → 0.2.6__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.5 → cluxion_agentplugin_supercoder-0.2.6}/PKG-INFO +1 -1
- {cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/pyproject.toml +1 -1
- {cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/src/cluxion_agentplugin_supercoder/__init__.py +1 -1
- {cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/src/cluxion_agentplugin_supercoder/core/hash_patch.py +16 -0
- {cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/tests/test_hash_patch.py +36 -0
- {cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/uv.lock +1 -1
- {cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/.github/workflows/ci.yml +0 -0
- {cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/.github/workflows/publish.yml +0 -0
- {cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/.gitignore +0 -0
- {cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/ARCHITECTURE.md +0 -0
- {cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/Docs/README.md +0 -0
- {cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/Docs/agent-surfaces.md +0 -0
- {cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/Docs/architecture.md +0 -0
- {cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/Docs/capabilities.md +0 -0
- {cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/Docs/design.md +0 -0
- {cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/Docs/installation.md +0 -0
- {cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/Docs/rust-architecture.md +0 -0
- {cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/Docs/tools.md +0 -0
- {cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/LICENSE +0 -0
- {cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/README.md +0 -0
- {cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/__init__.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/adapters/claude/.claude-plugin/plugin.json +0 -0
- {cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/adapters/claude/skills/supercoder/SKILL.md +0 -0
- {cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/adapters/codex/config-snippet.toml +0 -0
- {cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/adapters/hermes/README.md +0 -0
- {cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/plugin.yaml +0 -0
- {cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/rust/supercoder_index/Cargo.lock +0 -0
- {cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/rust/supercoder_index/Cargo.toml +0 -0
- {cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/rust/supercoder_index/pyproject.toml +0 -0
- {cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/rust/supercoder_index/src/lib.rs +0 -0
- {cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/rust/supercoder_index/src/main.rs +0 -0
- {cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/rust/supercoder_index/src/outline.rs +0 -0
- {cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/rust/supercoder_index/src/syntax.rs +0 -0
- {cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/scripts/repack_native_wheel.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/src/cluxion_agentplugin_supercoder/cli.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/src/cluxion_agentplugin_supercoder/core/cursor.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/src/cluxion_agentplugin_supercoder/core/line_budget.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/src/cluxion_agentplugin_supercoder/core/lint_gate.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/src/cluxion_agentplugin_supercoder/core/queue.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/src/cluxion_agentplugin_supercoder/core/repo_map.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/src/cluxion_agentplugin_supercoder/core/retry_loop.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/src/cluxion_agentplugin_supercoder/core/safety.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/src/cluxion_agentplugin_supercoder/core/syntax_gate.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/src/cluxion_agentplugin_supercoder/core/test_gate.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/src/cluxion_agentplugin_supercoder/doctor/__init__.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/src/cluxion_agentplugin_supercoder/doctor/catalog.json +0 -0
- {cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/src/cluxion_agentplugin_supercoder/doctor/framework.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/src/cluxion_agentplugin_supercoder/doctor/probes.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/src/cluxion_agentplugin_supercoder/plugin.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/src/cluxion_agentplugin_supercoder/runner.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/src/cluxion_agentplugin_supercoder/rust_bridge.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/src/cluxion_agentplugin_supercoder/schemas.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/tests/test_cursor.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/tests/test_doctor.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/tests/test_line_budget.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/tests/test_lint_gate.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/tests/test_plugin.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/tests/test_queue.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/tests/test_repo_map.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/tests/test_retry_loop.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/tests/test_rust_bridge.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/tests/test_safety.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/tests/test_syntax_gate.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/tests/test_test_gate.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: cluxion-agentplugin-supercoder
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.6
|
|
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
|
{cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/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.6"
|
|
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"
|
|
@@ -114,13 +114,29 @@ def _candidate_spans(text: str, reference: str, line_drift: int) -> list[tuple[i
|
|
|
114
114
|
|
|
115
115
|
def _best_fuzzy_span(text: str, reference: str) -> tuple[int, int, str, float, bool] | None:
|
|
116
116
|
best: tuple[int, int, str, float] | None = None
|
|
117
|
+
best_lines: tuple[int, int] | None = None
|
|
117
118
|
ambiguous = False
|
|
119
|
+
lines = text.splitlines(keepends=True)
|
|
120
|
+
offsets = [0]
|
|
121
|
+
for line in lines:
|
|
122
|
+
offsets.append(offsets[-1] + len(line))
|
|
118
123
|
for start, end, block in _candidate_spans(text, reference, MAX_LINE_DRIFT):
|
|
124
|
+
# compute line range [start_line, end_line) for overlap test
|
|
125
|
+
start_line = 0
|
|
126
|
+
while start_line < len(offsets) - 1 and offsets[start_line + 1] <= start:
|
|
127
|
+
start_line += 1
|
|
128
|
+
end_line = start_line
|
|
129
|
+
while end_line < len(offsets) - 1 and offsets[end_line] < end:
|
|
130
|
+
end_line += 1
|
|
119
131
|
score = SequenceMatcher(None, block, reference, autojunk=False).ratio()
|
|
120
132
|
if best is None or score > best[3]:
|
|
121
133
|
best = (start, end, block, score)
|
|
134
|
+
best_lines = (start_line, end_line)
|
|
122
135
|
ambiguous = False
|
|
123
136
|
elif score >= DEFAULT_FUZZY_THRESHOLD and best and abs(score - best[3]) < 0.015:
|
|
137
|
+
# only treat as ambiguous if a genuinely different (non-overlapping) location matches closely
|
|
138
|
+
if best_lines is not None and not (end_line <= best_lines[0] or start_line >= best_lines[1]):
|
|
139
|
+
continue # overlapping window on same location -> not real ambiguity
|
|
124
140
|
ambiguous = True
|
|
125
141
|
if best is None:
|
|
126
142
|
return None
|
|
@@ -80,3 +80,39 @@ def test_sha256_prefix_and_bad_hash_rejected(tmp_path: Path) -> None:
|
|
|
80
80
|
path.write_text("one\n", encoding="utf-8")
|
|
81
81
|
with pytest.raises(ValueError):
|
|
82
82
|
apply_patch(path, old_text="one\n", new_text="two\n", expected_file_hash="abc")
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
def test_fuzzy_short_2line_block_with_drift_applies(tmp_path: Path) -> None:
|
|
86
|
+
# regression: 2-line unique target with minor drift (trailing space + typo) must apply
|
|
87
|
+
# even though different window widths produce overlapping candidates
|
|
88
|
+
path = tmp_path / "multi.py"
|
|
89
|
+
body = """def foo():
|
|
90
|
+
x = 1
|
|
91
|
+
return x
|
|
92
|
+
|
|
93
|
+
def bar():
|
|
94
|
+
y = 2
|
|
95
|
+
return y
|
|
96
|
+
"""
|
|
97
|
+
path.write_text(body, encoding="utf-8")
|
|
98
|
+
# drifted old_text: trailing space on first line of block, one-char typo on second
|
|
99
|
+
drifted = " y = 2 \n return z\n"
|
|
100
|
+
new = " y = 42\n return y\n"
|
|
101
|
+
result = apply_patch(path, old_text=drifted, new_text=new)
|
|
102
|
+
assert result.success is True
|
|
103
|
+
assert result.strategy == "fuzzy"
|
|
104
|
+
content = path.read_text(encoding="utf-8")
|
|
105
|
+
assert "y = 42" in content
|
|
106
|
+
assert "return y" in content
|
|
107
|
+
assert "def bar():" in content
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
def test_duplicate_blocks_still_ambiguous(tmp_path: Path) -> None:
|
|
111
|
+
# genuine duplicate (non-overlapping) must still refuse
|
|
112
|
+
path = tmp_path / "dups.py"
|
|
113
|
+
block = "def f():\n return 1\n"
|
|
114
|
+
path.write_text(block + "\n" + block, encoding="utf-8")
|
|
115
|
+
near = "def f():\n return 2\n"
|
|
116
|
+
result = apply_patch(path, old_text=near, new_text="def f():\n return 3\n")
|
|
117
|
+
assert result.success is False
|
|
118
|
+
assert result.strategy == "no_match"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/ARCHITECTURE.md
RENAMED
|
File without changes
|
{cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/Docs/README.md
RENAMED
|
File without changes
|
{cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/Docs/agent-surfaces.md
RENAMED
|
File without changes
|
{cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/Docs/architecture.md
RENAMED
|
File without changes
|
{cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/Docs/capabilities.md
RENAMED
|
File without changes
|
{cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/Docs/design.md
RENAMED
|
File without changes
|
{cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/Docs/installation.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
|
|
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.5 → cluxion_agentplugin_supercoder-0.2.6}/tests/test_cursor.py
RENAMED
|
File without changes
|
{cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/tests/test_doctor.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/tests/test_plugin.py
RENAMED
|
File without changes
|
{cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/tests/test_queue.py
RENAMED
|
File without changes
|
{cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/tests/test_repo_map.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cluxion_agentplugin_supercoder-0.2.5 → cluxion_agentplugin_supercoder-0.2.6}/tests/test_safety.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|