cluxion-agentplugin-supercoder 0.2.10__tar.gz → 0.2.11__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.10 → cluxion_agentplugin_supercoder-0.2.11}/PKG-INFO +1 -1
- {cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/plugin.yaml +1 -1
- {cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/pyproject.toml +1 -1
- {cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/src/cluxion_agentplugin_supercoder/core/hash_patch.py +13 -4
- {cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/tests/test_hash_patch.py +18 -0
- {cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/uv.lock +1 -1
- {cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/.github/workflows/ci.yml +0 -0
- {cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/.github/workflows/publish.yml +0 -0
- {cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/.gitignore +0 -0
- {cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/ARCHITECTURE.md +0 -0
- {cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/Docs/README.md +0 -0
- {cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/Docs/agent-surfaces.md +0 -0
- {cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/Docs/architecture.md +0 -0
- {cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/Docs/capabilities.md +0 -0
- {cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/Docs/design.md +0 -0
- {cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/Docs/installation.md +0 -0
- {cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/Docs/rust-architecture.md +0 -0
- {cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/Docs/tools.md +0 -0
- {cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/LICENSE +0 -0
- {cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/README.md +0 -0
- {cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/__init__.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/adapters/claude/.claude-plugin/plugin.json +0 -0
- {cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/adapters/claude/skills/supercoder/SKILL.md +0 -0
- {cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/adapters/codex/config-snippet.toml +0 -0
- {cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/adapters/hermes/README.md +0 -0
- {cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/rust/supercoder_index/Cargo.lock +0 -0
- {cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/rust/supercoder_index/Cargo.toml +0 -0
- {cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/rust/supercoder_index/pyproject.toml +0 -0
- {cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/rust/supercoder_index/src/lib.rs +0 -0
- {cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/rust/supercoder_index/src/main.rs +0 -0
- {cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/rust/supercoder_index/src/outline.rs +0 -0
- {cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/rust/supercoder_index/src/syntax.rs +0 -0
- {cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/scripts/repack_native_wheel.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/src/cluxion_agentplugin_supercoder/__init__.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/src/cluxion_agentplugin_supercoder/cli.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/src/cluxion_agentplugin_supercoder/core/cursor.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/src/cluxion_agentplugin_supercoder/core/line_budget.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/src/cluxion_agentplugin_supercoder/core/lint_gate.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/src/cluxion_agentplugin_supercoder/core/queue.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/src/cluxion_agentplugin_supercoder/core/repo_map.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/src/cluxion_agentplugin_supercoder/core/retry_loop.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/src/cluxion_agentplugin_supercoder/core/safety.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/src/cluxion_agentplugin_supercoder/core/syntax_gate.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/src/cluxion_agentplugin_supercoder/core/test_gate.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/src/cluxion_agentplugin_supercoder/doctor/__init__.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/src/cluxion_agentplugin_supercoder/doctor/catalog.json +0 -0
- {cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/src/cluxion_agentplugin_supercoder/doctor/framework.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/src/cluxion_agentplugin_supercoder/doctor/probes.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/src/cluxion_agentplugin_supercoder/plugin.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/src/cluxion_agentplugin_supercoder/runner.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/src/cluxion_agentplugin_supercoder/rust_bridge.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/src/cluxion_agentplugin_supercoder/schemas.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/tests/test_cursor.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/tests/test_doctor.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/tests/test_line_budget.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/tests/test_lint_gate.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/tests/test_plugin.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/tests/test_queue.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/tests/test_repo_map.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/tests/test_retry_loop.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/tests/test_rust_bridge.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/tests/test_safety.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/tests/test_syntax_gate.py +0 -0
- {cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/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.11
|
|
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.10 → cluxion_agentplugin_supercoder-0.2.11}/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.11"
|
|
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"
|
|
@@ -5,6 +5,7 @@ from __future__ import annotations
|
|
|
5
5
|
import hashlib
|
|
6
6
|
import os
|
|
7
7
|
import tempfile
|
|
8
|
+
import threading
|
|
8
9
|
from contextlib import contextmanager
|
|
9
10
|
from dataclasses import dataclass
|
|
10
11
|
from difflib import SequenceMatcher
|
|
@@ -19,14 +20,22 @@ DEFAULT_FUZZY_THRESHOLD = 0.86
|
|
|
19
20
|
MAX_CONTEXT_SCAN = 8
|
|
20
21
|
MAX_LINE_DRIFT = 2
|
|
21
22
|
|
|
23
|
+
_thread_fallback_lock = threading.Lock()
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def _lock_path(path: Path) -> Path:
|
|
27
|
+
return path.parent / f".{path.name}.cluxion-lock"
|
|
28
|
+
|
|
22
29
|
|
|
23
30
|
@contextmanager
|
|
24
31
|
def _exclusive_lock(path: Path):
|
|
25
|
-
"""Exclusive advisory lock on
|
|
26
|
-
if fcntl is None
|
|
27
|
-
|
|
32
|
+
"""Exclusive advisory lock on stable sidecar file (fcntl.flock). Graceful degrade on non-POSIX."""
|
|
33
|
+
if fcntl is None:
|
|
34
|
+
with _thread_fallback_lock:
|
|
35
|
+
yield
|
|
28
36
|
return
|
|
29
|
-
|
|
37
|
+
lock_path = _lock_path(path)
|
|
38
|
+
fd = os.open(str(lock_path), os.O_CREAT | os.O_RDWR, 0o600)
|
|
30
39
|
try:
|
|
31
40
|
fcntl.flock(fd, fcntl.LOCK_EX)
|
|
32
41
|
yield
|
|
@@ -158,6 +158,24 @@ def test_concurrent_patches_no_lost_update(tmp_path: Path) -> None:
|
|
|
158
158
|
assert new_hash != file_hash(initial)
|
|
159
159
|
|
|
160
160
|
|
|
161
|
+
def test_concurrent_patches_no_lost_update_stress(tmp_path: Path) -> None:
|
|
162
|
+
"""50 iterations of 8 concurrent workers: zero lost updates across all runs."""
|
|
163
|
+
for _ in range(50):
|
|
164
|
+
path = tmp_path / "concurrent_stress.py"
|
|
165
|
+
initial = "\n".join(f"# UNIQUE_PATCH_{i}_START" for i in range(8)) + "\n"
|
|
166
|
+
path.write_text(initial, encoding="utf-8")
|
|
167
|
+
|
|
168
|
+
with concurrent.futures.ThreadPoolExecutor(max_workers=8) as executor:
|
|
169
|
+
futures = [executor.submit(_worker_apply, i, path) for i in range(8)]
|
|
170
|
+
successes = [f.result() for f in concurrent.futures.as_completed(futures)]
|
|
171
|
+
|
|
172
|
+
assert all(successes), "Some patches lost due to race"
|
|
173
|
+
final = path.read_text(encoding="utf-8")
|
|
174
|
+
for i in range(8):
|
|
175
|
+
assert f"# UNIQUE_PATCH_{i}_DONE" in final
|
|
176
|
+
assert f"# UNIQUE_PATCH_{i}_START" not in final
|
|
177
|
+
|
|
178
|
+
|
|
161
179
|
def test_atomic_write_interruption_leaves_original_intact(tmp_path: Path) -> None:
|
|
162
180
|
"""Simulated mid-write crash leaves ORIGINAL file intact (temp may remain, no truncate)."""
|
|
163
181
|
path = tmp_path / "atomic_test.txt"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/ARCHITECTURE.md
RENAMED
|
File without changes
|
{cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/Docs/README.md
RENAMED
|
File without changes
|
|
File without changes
|
{cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/Docs/architecture.md
RENAMED
|
File without changes
|
{cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/Docs/capabilities.md
RENAMED
|
File without changes
|
{cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/Docs/design.md
RENAMED
|
File without changes
|
{cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/Docs/installation.md
RENAMED
|
File without changes
|
|
File without changes
|
{cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/tests/test_cursor.py
RENAMED
|
File without changes
|
{cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/tests/test_doctor.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/tests/test_plugin.py
RENAMED
|
File without changes
|
{cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/tests/test_queue.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cluxion_agentplugin_supercoder-0.2.10 → cluxion_agentplugin_supercoder-0.2.11}/tests/test_safety.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|