cluxion-agentplugin-preprocessing 0.3.24__tar.gz → 0.3.25__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_preprocessing-0.3.24/adapters/claude → cluxion_agentplugin_preprocessing-0.3.25}/.claude-plugin/plugin.json +3 -3
- cluxion_agentplugin_preprocessing-0.3.25/.codex-plugin/plugin.json +8 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/Docs/README.md +3 -3
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/PKG-INFO +7 -5
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/README.md +6 -4
- cluxion_agentplugin_preprocessing-0.3.25/commands/cluxion-doctor.md +9 -0
- cluxion_agentplugin_preprocessing-0.3.25/commands/cluxion-plan.md +18 -0
- cluxion_agentplugin_preprocessing-0.3.25/commands/loop-auto.md +16 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/pyproject.toml +10 -4
- cluxion_agentplugin_preprocessing-0.3.25/skills/preprocess/SKILL.md +47 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_agentplugin_preprocessing/cli.py +6 -12
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_agentplugin_preprocessing/doctor/catalog.json +33 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_agentplugin_preprocessing/doctor/probes.py +58 -2
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_agentplugin_preprocessing/guard_watch.py +0 -18
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_agentplugin_preprocessing/hermes_deliver_patch.py +11 -9
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_agentplugin_preprocessing/plugin.py +0 -1
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_agentplugin_preprocessing/plugin.yaml +2 -2
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_agentplugin_preprocessing/schemas.py +1 -2
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_agentplugin_preprocessing/slash_commands.py +5 -5
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/cli.py +4 -1
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/core/loop_auto.py +64 -10
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/guard_daemon_host.py +47 -10
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/resources/guard_bridge.py +125 -43
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/resources/rust_bridge.py +5 -2
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/tests/runtime/test_cluxion_runtime_spine.py +26 -1
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/tests/runtime/test_guard.py +11 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/tests/runtime/test_guard_daemon_host.py +13 -1
- cluxion_agentplugin_preprocessing-0.3.25/tests/runtime/test_loop_auto.py +215 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/tests/test_doctor.py +20 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/tests/test_guard_watch.py +18 -0
- cluxion_agentplugin_preprocessing-0.3.25/tests/test_hermes_deliver_patch.py +57 -0
- cluxion_agentplugin_preprocessing-0.3.25/tests/test_packaging_policy.py +40 -0
- cluxion_agentplugin_preprocessing-0.3.24/adapters/claude/skills/preprocess/SKILL.md +0 -36
- cluxion_agentplugin_preprocessing-0.3.24/adapters/codex/config-snippet.toml +0 -5
- cluxion_agentplugin_preprocessing-0.3.24/tests/runtime/test_loop_auto.py +0 -106
- cluxion_agentplugin_preprocessing-0.3.24/tests/test_hermes_deliver_patch.py +0 -21
- cluxion_agentplugin_preprocessing-0.3.24/tests/test_packaging_policy.py +0 -16
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/.github/profile/README.md +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/.gitignore +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/LICENSE +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/cluxion-Docs/README.md +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/cluxion-Docs/architecture.md +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/cluxion-Docs/harness-logic.md +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/cluxion-Docs/honesty-preprocessing.md +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/cluxion-Docs/install-and-operations.md +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/cluxion-Docs/security.md +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/rust/cluxion_queue/Cargo.lock +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/rust/cluxion_queue/Cargo.toml +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/rust/cluxion_queue/pyproject.toml +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/rust/cluxion_queue/src/context.rs +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/rust/cluxion_queue/src/dispatch.rs +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/rust/cluxion_queue/src/guard.rs +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/rust/cluxion_queue/src/lib.rs +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/rust/cluxion_queue/src/main.rs +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/rust/cluxion_queue/src/queue.rs +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/rust/cluxion_queue/src/types.rs +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/rust/cluxion_queue/uv.lock +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_agentplugin_preprocessing/__init__.py +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_agentplugin_preprocessing/doctor/__init__.py +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_agentplugin_preprocessing/doctor/framework.py +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_agentplugin_preprocessing/hermes_config.py +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_agentplugin_preprocessing/patches/hermes-deliver-agent.patch +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_agentplugin_preprocessing/runner.py +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/__init__.py +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/__main__.py +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/adapters/__init__.py +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/adapters/contract.py +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/adapters/grok_build.py +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/adapters/hermes.py +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/adapters/spec.py +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/bootstrap.py +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/core/__init__.py +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/core/clarification.py +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/core/context_compress.py +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/core/dispatch_store.py +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/core/harness.py +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/core/hybrid_forget.py +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/core/intent.py +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/core/ledger.py +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/core/ledger_codec.py +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/core/llm_compress.py +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/core/plan_codec.py +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/core/preprocess.py +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/core/types.py +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/core/work_queue.py +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/models/__init__.py +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/models/supervisor.py +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/models/vllm_mlx.py +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/resources/__init__.py +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/resources/py_queue.py +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/resources/queue_bridge.py +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/web/__init__.py +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/web/browser_bridge.py +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/tests/runtime/test_auto_compress_middleware.py +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/tests/runtime/test_bin_resolution.py +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/tests/runtime/test_browser_bridge.py +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/tests/runtime/test_clarification.py +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/tests/runtime/test_context_compress.py +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/tests/runtime/test_context_compress_llm_forget.py +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/tests/runtime/test_contract.py +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/tests/runtime/test_dispatch_store.py +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/tests/runtime/test_estimate_tokens.py +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/tests/runtime/test_ledger.py +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/tests/runtime/test_py_queue_concurrency.py +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/tests/runtime/test_queue_backends.py +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/tests/runtime/test_runtime_adapter_cli.py +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/tests/runtime/test_rust_queue.py +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/tests/runtime/test_supervisor.py +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/tests/test_bootstrap.py +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/tests/test_hermes_config.py +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/tests/test_plugin.py +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/tests/test_runner.py +0 -0
- {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/tests/test_slash_commands.py +0 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cluxion-agentplugin-preprocessing",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Cluxion preprocessing: honesty, clarification,
|
|
3
|
+
"version": "0.3.25",
|
|
4
|
+
"description": "Cluxion preprocessing: honesty, clarification, durable work queue, loop_auto, doctor, and resource guard contracts.",
|
|
5
5
|
"author": "cluxion",
|
|
6
6
|
"commands": "./commands",
|
|
7
7
|
"skills": "./skills"
|
|
8
|
-
}
|
|
8
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "cluxion-agentplugin-preprocessing",
|
|
3
|
+
"version": "0.3.25",
|
|
4
|
+
"description": "Cluxion preprocessing: honesty, clarification, durable work queue, loop_auto, doctor, and resource guard contracts.",
|
|
5
|
+
"author": "cluxion",
|
|
6
|
+
"commands": "./commands",
|
|
7
|
+
"skills": "./skills"
|
|
8
|
+
}
|
{cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/Docs/README.md
RENAMED
|
@@ -17,11 +17,11 @@
|
|
|
17
17
|
|
|
18
18
|
1. 사용자 요청 수신 → `cluxion_plan` (또는 `cluxion-runtime plan`)
|
|
19
19
|
2. `clarification.required`이면 사용자에게 질문, 작업 보류
|
|
20
|
-
3. `queued` 모드: 수동이면 `cluxion_queue_next` → … → `cluxion_queue_brief`.
|
|
20
|
+
3. `queued` 모드: 수동이면 `cluxion_queue_next` → … → `cluxion_queue_brief`. 자동 드레인은 `/loopauto`, `loop_auto: true`, 또는 전용 `loop-auto` 명령으로만 실행합니다.
|
|
21
21
|
4. `answer_policy.required_checks`를 지키며 응답
|
|
22
22
|
5. (선택) `cluxion_queue_brief` 결과를 ForgetForge에 저장: `forgetforge import-brief --source preprocessing`
|
|
23
23
|
|
|
24
|
-
Skill: [`
|
|
24
|
+
Skill: [`skills/preprocess/SKILL.md`](../skills/preprocess/SKILL.md)
|
|
25
25
|
|
|
26
26
|
### 사람(개발자)이 할 일
|
|
27
27
|
|
|
@@ -50,4 +50,4 @@ cluxion-preprocess enable # Hermes
|
|
|
50
50
|
- 플러그인이 host 대신 LLM completion을 대체하는 것
|
|
51
51
|
- 비공개 인프라·배포 비밀
|
|
52
52
|
|
|
53
|
-
이슈는 GitHub Issues를 사용해 주세요.
|
|
53
|
+
이슈는 GitHub Issues를 사용해 주세요.
|
{cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: cluxion-agentplugin-preprocessing
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.25
|
|
4
4
|
Summary: Universal agent plugin for Cluxion preprocessing, honesty contracts, clarification, Rust work queue, and resource-aware harness handoff.
|
|
5
5
|
Project-URL: Homepage, https://github.com/cluxion/cluxion-Agentplugin-preprocessing
|
|
6
6
|
Project-URL: Repository, https://github.com/cluxion/cluxion-Agentplugin-preprocessing
|
|
@@ -90,7 +90,7 @@ Hermes 안에서는 `cluxion_doctor` 도구로도 노출됩니다.
|
|
|
90
90
|
|
|
91
91
|
| 슬래시 | 용도 |
|
|
92
92
|
|---|---|
|
|
93
|
-
| `/loopauto <prompt>` | plan + 자동 큐 드레인
|
|
93
|
+
| `/loopauto <prompt>` | 명시적 plan + 자동 큐 드레인 |
|
|
94
94
|
| `/cluxion-doctor` | doctor (CLI `cluxion-preprocess doctor`와 동일) |
|
|
95
95
|
|
|
96
96
|
```
|
|
@@ -98,7 +98,8 @@ Hermes 안에서는 `cluxion_doctor` 도구로도 노출됩니다.
|
|
|
98
98
|
/cluxion-doctor
|
|
99
99
|
```
|
|
100
100
|
|
|
101
|
-
|
|
101
|
+
`/loopAuto` prompt prefix는 이제 queue 계약만 만들고, blocking drain은 `loop_auto=true` 또는 전용
|
|
102
|
+
`loop-auto` 명령에서만 실행됩니다.
|
|
102
103
|
|
|
103
104
|
## 문제 해결
|
|
104
105
|
|
|
@@ -174,7 +175,7 @@ Type `/` to see plugin commands with a 🔌 badge.
|
|
|
174
175
|
|
|
175
176
|
| Slash | Purpose |
|
|
176
177
|
|---|---|
|
|
177
|
-
| `/loopauto <prompt>` |
|
|
178
|
+
| `/loopauto <prompt>` | Explicit plan + autonomous queue drain |
|
|
178
179
|
| `/cluxion-doctor` | Run doctor (same as `cluxion-preprocess doctor`) |
|
|
179
180
|
|
|
180
181
|
```
|
|
@@ -182,7 +183,8 @@ Type `/` to see plugin commands with a 🔌 badge.
|
|
|
182
183
|
/cluxion-doctor
|
|
183
184
|
```
|
|
184
185
|
|
|
185
|
-
|
|
186
|
+
The `/loopAuto` prompt prefix now only queues work. Blocking drain requires explicit `loop_auto=true`
|
|
187
|
+
or the dedicated `loop-auto` command.
|
|
186
188
|
|
|
187
189
|
## Troubleshooting
|
|
188
190
|
|
{cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/README.md
RENAMED
|
@@ -58,7 +58,7 @@ Hermes 안에서는 `cluxion_doctor` 도구로도 노출됩니다.
|
|
|
58
58
|
|
|
59
59
|
| 슬래시 | 용도 |
|
|
60
60
|
|---|---|
|
|
61
|
-
| `/loopauto <prompt>` | plan + 자동 큐 드레인
|
|
61
|
+
| `/loopauto <prompt>` | 명시적 plan + 자동 큐 드레인 |
|
|
62
62
|
| `/cluxion-doctor` | doctor (CLI `cluxion-preprocess doctor`와 동일) |
|
|
63
63
|
|
|
64
64
|
```
|
|
@@ -66,7 +66,8 @@ Hermes 안에서는 `cluxion_doctor` 도구로도 노출됩니다.
|
|
|
66
66
|
/cluxion-doctor
|
|
67
67
|
```
|
|
68
68
|
|
|
69
|
-
|
|
69
|
+
`/loopAuto` prompt prefix는 이제 queue 계약만 만들고, blocking drain은 `loop_auto=true` 또는 전용
|
|
70
|
+
`loop-auto` 명령에서만 실행됩니다.
|
|
70
71
|
|
|
71
72
|
## 문제 해결
|
|
72
73
|
|
|
@@ -142,7 +143,7 @@ Type `/` to see plugin commands with a 🔌 badge.
|
|
|
142
143
|
|
|
143
144
|
| Slash | Purpose |
|
|
144
145
|
|---|---|
|
|
145
|
-
| `/loopauto <prompt>` |
|
|
146
|
+
| `/loopauto <prompt>` | Explicit plan + autonomous queue drain |
|
|
146
147
|
| `/cluxion-doctor` | Run doctor (same as `cluxion-preprocess doctor`) |
|
|
147
148
|
|
|
148
149
|
```
|
|
@@ -150,7 +151,8 @@ Type `/` to see plugin commands with a 🔌 badge.
|
|
|
150
151
|
/cluxion-doctor
|
|
151
152
|
```
|
|
152
153
|
|
|
153
|
-
|
|
154
|
+
The `/loopAuto` prompt prefix now only queues work. Blocking drain requires explicit `loop_auto=true`
|
|
155
|
+
or the dedicated `loop-auto` command.
|
|
154
156
|
|
|
155
157
|
## Troubleshooting
|
|
156
158
|
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Run Cluxion preprocessing and return the JSON contract.
|
|
3
|
+
argument-hint: "<prompt>"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Run:
|
|
7
|
+
|
|
8
|
+
```bash
|
|
9
|
+
cluxion-runtime plan --surface codex --json-stdin
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
stdin:
|
|
13
|
+
|
|
14
|
+
```json
|
|
15
|
+
{"prompt":"$ARGUMENTS","cwd":"$PWD"}
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
Return the JSON contract to the host flow. Do not run `loop-auto` unless `loop_auto=true` is explicitly present.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Explicitly drain a queued Cluxion work bundle.
|
|
3
|
+
argument-hint: "<work_id>"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Run:
|
|
7
|
+
|
|
8
|
+
```bash
|
|
9
|
+
cluxion-runtime loop-auto --work-id "$ARGUMENTS" --json-stdin
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
stdin:
|
|
13
|
+
|
|
14
|
+
```json
|
|
15
|
+
{"work_id":"$ARGUMENTS"}
|
|
16
|
+
```
|
{cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/pyproject.toml
RENAMED
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "cluxion-agentplugin-preprocessing"
|
|
7
|
-
version = "0.3.
|
|
7
|
+
version = "0.3.25"
|
|
8
8
|
description = "Universal agent plugin for Cluxion preprocessing, honesty contracts, clarification, Rust work queue, and resource-aware harness handoff."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.11"
|
|
@@ -67,14 +67,20 @@ packages = ["src/cluxion_agentplugin_preprocessing", "src/cluxion_runtime"]
|
|
|
67
67
|
[tool.hatch.build.targets.wheel.force-include]
|
|
68
68
|
"cluxion-Docs" = "cluxion_agentplugin_docs/cluxion-Docs"
|
|
69
69
|
".github/profile/README.md" = "cluxion_agentplugin_docs/github-profile/README.md"
|
|
70
|
-
"
|
|
70
|
+
".claude-plugin" = ".claude-plugin"
|
|
71
|
+
".codex-plugin" = ".codex-plugin"
|
|
72
|
+
"commands" = "commands"
|
|
73
|
+
"skills" = "skills"
|
|
71
74
|
|
|
72
75
|
[tool.hatch.build.targets.sdist]
|
|
73
76
|
include = [
|
|
74
77
|
"src/cluxion_agentplugin_preprocessing",
|
|
75
78
|
"src/cluxion_runtime",
|
|
76
79
|
"rust/cluxion_queue",
|
|
77
|
-
"
|
|
80
|
+
".claude-plugin",
|
|
81
|
+
".codex-plugin",
|
|
82
|
+
"commands",
|
|
83
|
+
"skills",
|
|
78
84
|
"tests",
|
|
79
85
|
"cluxion-Docs",
|
|
80
86
|
".github/profile",
|
|
@@ -93,4 +99,4 @@ line-length = 120
|
|
|
93
99
|
src = ["src", "tests"]
|
|
94
100
|
|
|
95
101
|
[tool.ruff.lint]
|
|
96
|
-
select = ["F", "I", "UP", "B", "SIM", "RUF"]
|
|
102
|
+
select = ["F", "I", "UP", "B", "SIM", "RUF"]
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cluxion-preprocess
|
|
3
|
+
description: Use Cluxion preprocessing before agent work that needs clarification, queueing, loop_auto, doctor checks, or surface-specific JSON contracts.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Cluxion Preprocess
|
|
7
|
+
|
|
8
|
+
Call the runtime CLI. The plugin returns JSON contracts; the host agent owns model calls and final answers.
|
|
9
|
+
|
|
10
|
+
## Plan
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
cluxion-runtime plan --surface codex --json-stdin
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Use `--surface claude` in Claude Code. Minimum stdin:
|
|
17
|
+
|
|
18
|
+
```json
|
|
19
|
+
{"prompt":"<user request>","cwd":"<workspace>"}
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Rules:
|
|
23
|
+
|
|
24
|
+
1. If `clarification.required` is true, ask the user before starting work.
|
|
25
|
+
2. If `host_execution.queue_required` is true, process the queue with `queue-next`, `queue-record`, and `queue-brief`, or call `loop-auto` only when the user or payload explicitly opts in with `loop_auto=true`.
|
|
26
|
+
3. A `/loopAuto` prompt prefix only requests queueing and is stripped by `plan`; it does not start a blocking drain.
|
|
27
|
+
4. Never claim checks were run unless the host actually ran them.
|
|
28
|
+
|
|
29
|
+
## Queue
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
cluxion-runtime queue-next --work-id <work_id>
|
|
33
|
+
cluxion-runtime queue-record --work-id <work_id> --step-id <step_id> --json-stdin
|
|
34
|
+
cluxion-runtime queue-brief --work-id <work_id>
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Explicit loop_auto
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
cluxion-runtime loop-auto --work-id <work_id> --json-stdin
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Doctor
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
cluxion-preprocess doctor
|
|
47
|
+
```
|
|
@@ -87,12 +87,13 @@ def _parser() -> argparse.ArgumentParser:
|
|
|
87
87
|
doctor.add_argument("--verbose", action="store_true")
|
|
88
88
|
patch = subparsers.add_parser(
|
|
89
89
|
"hermes-patch",
|
|
90
|
-
help="
|
|
90
|
+
help="Explicitly apply or verify Hermes deliver=agent patch",
|
|
91
91
|
)
|
|
92
|
+
patch.add_argument("action", nargs="?", choices=("status", "apply"), default="status")
|
|
92
93
|
patch.add_argument(
|
|
93
94
|
"--status",
|
|
94
95
|
action="store_true",
|
|
95
|
-
help="
|
|
96
|
+
help="Deprecated alias for: hermes-patch status",
|
|
96
97
|
)
|
|
97
98
|
patch.add_argument("--dry-run", action="store_true")
|
|
98
99
|
patch.add_argument(
|
|
@@ -134,10 +135,9 @@ def _status(args: argparse.Namespace) -> int:
|
|
|
134
135
|
|
|
135
136
|
def _enable(args: argparse.Namespace) -> int:
|
|
136
137
|
result = hermes_config.enable_plugin(args.home, dry_run=bool(args.dry_run))
|
|
137
|
-
|
|
138
|
-
payload = {"ok": True, **result.to_dict(), "hermes_patch": patch.to_dict()}
|
|
138
|
+
payload = {"ok": True, **result.to_dict()}
|
|
139
139
|
print(json.dumps(payload, ensure_ascii=False, sort_keys=True))
|
|
140
|
-
return 0
|
|
140
|
+
return 0
|
|
141
141
|
|
|
142
142
|
|
|
143
143
|
def _disable(args: argparse.Namespace) -> int:
|
|
@@ -166,15 +166,9 @@ def _hermes_root_arg(args: argparse.Namespace) -> Path | None:
|
|
|
166
166
|
return Path(raw).expanduser() if raw else None
|
|
167
167
|
|
|
168
168
|
|
|
169
|
-
def _ensure_hermes_patch(*, dry_run: bool, hermes_root: Path | None = None) -> hermes_deliver_patch.PatchResult:
|
|
170
|
-
if dry_run:
|
|
171
|
-
return hermes_deliver_patch.patch_status(hermes_root)
|
|
172
|
-
return hermes_deliver_patch.ensure_applied(hermes_root=hermes_root)
|
|
173
|
-
|
|
174
|
-
|
|
175
169
|
def _hermes_patch(args: argparse.Namespace) -> int:
|
|
176
170
|
root = _hermes_root_arg(args)
|
|
177
|
-
if args.status:
|
|
171
|
+
if args.status or args.action == "status":
|
|
178
172
|
result = hermes_deliver_patch.patch_status(root)
|
|
179
173
|
else:
|
|
180
174
|
result = hermes_deliver_patch.ensure_applied(hermes_root=root, dry_run=bool(args.dry_run))
|
|
@@ -513,6 +513,39 @@
|
|
|
513
513
|
"change_robust": "Enforce sort_keys=True in all queue/dispatch serialization; add docstring reminding of determinism requirement",
|
|
514
514
|
"detection_method": "python -c 'import json; d = {\"z\": 1, \"a\": 2}; j1 = json.dumps(d, sort_keys=True); j2 = json.dumps(d, sort_keys=True); assert j1 == j2, f\"{j1} != {j2}\"'"
|
|
515
515
|
},
|
|
516
|
+
{
|
|
517
|
+
"check_id": "hermes_deliver_patch_status",
|
|
518
|
+
"category": "hermes_contract",
|
|
519
|
+
"severity": "high",
|
|
520
|
+
"what_it_checks": "Hermes deliver=agent source patch is absent, fully applied, or partially applied",
|
|
521
|
+
"failure_symptom": "deliver=agent slash behavior silently does not exist or only some Hermes paths support it",
|
|
522
|
+
"likely_causes": [
|
|
523
|
+
"Hermes source changed and patch anchors no longer match",
|
|
524
|
+
"A previous manual patch only touched some files",
|
|
525
|
+
"HERMES_AGENT_ROOT points at the wrong checkout"
|
|
526
|
+
],
|
|
527
|
+
"fix_steps": [
|
|
528
|
+
"Run: cluxion-preprocess hermes-patch status",
|
|
529
|
+
"If needed, run: cluxion-preprocess hermes-patch apply",
|
|
530
|
+
"If anchors mismatch, restore or update the Hermes checkout before applying"
|
|
531
|
+
],
|
|
532
|
+
"change_robust": "Patch is explicit opt-in and reports applied/partial/no-hermes/anchors-mismatch instead of silently editing on session start"
|
|
533
|
+
},
|
|
534
|
+
{
|
|
535
|
+
"check_id": "version_files_synced",
|
|
536
|
+
"category": "install",
|
|
537
|
+
"severity": "high",
|
|
538
|
+
"what_it_checks": "pyproject, plugin.yaml, package plugin.yaml, and Codex/Claude plugin manifests use the same version",
|
|
539
|
+
"failure_symptom": "Marketplace plugin metadata, Hermes adapter metadata, and installed Python distribution report different versions",
|
|
540
|
+
"likely_causes": [
|
|
541
|
+
"Version bumped in pyproject only",
|
|
542
|
+
"Root plugin artifact added without updating package metadata"
|
|
543
|
+
],
|
|
544
|
+
"fix_steps": [
|
|
545
|
+
"Set every plugin manifest version to pyproject.toml project.version"
|
|
546
|
+
],
|
|
547
|
+
"change_robust": "Doctor compares repo metadata files directly and fails on any drift"
|
|
548
|
+
},
|
|
516
549
|
{
|
|
517
550
|
"check_id": "temp_file_cleanup",
|
|
518
551
|
"category": "resource",
|
|
@@ -9,7 +9,9 @@ import os
|
|
|
9
9
|
import shutil
|
|
10
10
|
import sys
|
|
11
11
|
import tempfile
|
|
12
|
+
import tomllib
|
|
12
13
|
from collections.abc import Callable
|
|
14
|
+
from pathlib import Path
|
|
13
15
|
|
|
14
16
|
from .framework import DoctorContext
|
|
15
17
|
|
|
@@ -306,12 +308,66 @@ def hermes_plugin_enabled(ctx: DoctorContext) -> tuple[str, str]:
|
|
|
306
308
|
if n in enabled and n not in disabled:
|
|
307
309
|
return "pass", f"{n} in enabled"
|
|
308
310
|
if any(n in enabled for n in names):
|
|
309
|
-
return "warn", "present but also disabled
|
|
310
|
-
return "
|
|
311
|
+
return "warn", "present but also disabled; fix: remove it from plugins.disabled"
|
|
312
|
+
return "fail", "not in plugins.enabled; fix: run cluxion-preprocess enable"
|
|
311
313
|
except Exception as e:
|
|
312
314
|
return "skip", f"uncertainty: {type(e).__name__}"
|
|
313
315
|
|
|
314
316
|
|
|
317
|
+
@_register("hermes_deliver_patch_status")
|
|
318
|
+
def hermes_deliver_patch_status(ctx: DoctorContext) -> tuple[str, str]:
|
|
319
|
+
del ctx
|
|
320
|
+
try:
|
|
321
|
+
from cluxion_agentplugin_preprocessing import hermes_deliver_patch
|
|
322
|
+
|
|
323
|
+
result = hermes_deliver_patch.patch_status()
|
|
324
|
+
if result.status == "applied":
|
|
325
|
+
return "pass", "applied"
|
|
326
|
+
if result.status == "no_hermes":
|
|
327
|
+
return "skip", "no Hermes source tree; fix: set HERMES_AGENT_ROOT or skip deliver=agent patch"
|
|
328
|
+
if result.status == "partial":
|
|
329
|
+
return "fail", "partial patch; fix: restore Hermes tree then run cluxion-preprocess hermes-patch apply"
|
|
330
|
+
return "warn", f"{result.status}; fix: run cluxion-preprocess hermes-patch apply"
|
|
331
|
+
except Exception as e:
|
|
332
|
+
return "fail", f"patch status error: {e}; fix: run cluxion-preprocess hermes-patch status"
|
|
333
|
+
|
|
334
|
+
|
|
335
|
+
@_register("version_files_synced")
|
|
336
|
+
def version_files_synced(ctx: DoctorContext) -> tuple[str, str]:
|
|
337
|
+
try:
|
|
338
|
+
pyproject_path = ctx.cwd / "pyproject.toml"
|
|
339
|
+
if not pyproject_path.exists():
|
|
340
|
+
return "skip", "repo files not present"
|
|
341
|
+
version = tomllib.loads(pyproject_path.read_text(encoding="utf-8"))["project"]["version"]
|
|
342
|
+
paths = {
|
|
343
|
+
"plugin.yaml": ctx.cwd / "plugin.yaml",
|
|
344
|
+
"package plugin.yaml": ctx.cwd / "src" / "cluxion_agentplugin_preprocessing" / "plugin.yaml",
|
|
345
|
+
"claude plugin": ctx.cwd / ".claude-plugin" / "plugin.json",
|
|
346
|
+
"codex plugin": ctx.cwd / ".codex-plugin" / "plugin.json",
|
|
347
|
+
}
|
|
348
|
+
drift: list[str] = []
|
|
349
|
+
for label, path in paths.items():
|
|
350
|
+
if not path.exists():
|
|
351
|
+
drift.append(f"{label}=missing")
|
|
352
|
+
continue
|
|
353
|
+
found = _version_from_file(path)
|
|
354
|
+
if found != version:
|
|
355
|
+
drift.append(f"{label}={found}")
|
|
356
|
+
if drift:
|
|
357
|
+
return "fail", f"pyproject={version} drift={'; '.join(drift)}; fix: sync plugin versions"
|
|
358
|
+
return "pass", version
|
|
359
|
+
except Exception as e:
|
|
360
|
+
return "fail", f"version check error: {e}; fix: inspect pyproject/plugin metadata"
|
|
361
|
+
|
|
362
|
+
|
|
363
|
+
def _version_from_file(path: Path) -> str:
|
|
364
|
+
if path.suffix == ".json":
|
|
365
|
+
return str(_json.loads(path.read_text(encoding="utf-8")).get("version", ""))
|
|
366
|
+
import yaml
|
|
367
|
+
|
|
368
|
+
return str(yaml.safe_load(path.read_text(encoding="utf-8")).get("version", ""))
|
|
369
|
+
|
|
370
|
+
|
|
315
371
|
@_register("env_var_consistency")
|
|
316
372
|
def env_var_consistency(ctx: DoctorContext) -> tuple[str, str]:
|
|
317
373
|
try:
|
|
@@ -38,7 +38,6 @@ def on_session_start(**_: Any) -> None:
|
|
|
38
38
|
Startup is idempotent: an already-running daemon is success. Hook failures
|
|
39
39
|
are logged as one concise stderr warning and never propagated to the host.
|
|
40
40
|
"""
|
|
41
|
-
_maybe_apply_hermes_deliver_patch()
|
|
42
41
|
if not _autostart_enabled():
|
|
43
42
|
return
|
|
44
43
|
try:
|
|
@@ -52,23 +51,6 @@ def on_session_start(**_: Any) -> None:
|
|
|
52
51
|
_warn(f"cluxion guard autostart failed: {reason}")
|
|
53
52
|
|
|
54
53
|
|
|
55
|
-
def _maybe_apply_hermes_deliver_patch() -> None:
|
|
56
|
-
"""Best-effort Hermes deliver=agent patch (``CLUXION_HERMES_PATCH_AUTOFIX``, default on)."""
|
|
57
|
-
try:
|
|
58
|
-
from cluxion_agentplugin_preprocessing import hermes_deliver_patch
|
|
59
|
-
|
|
60
|
-
if not hermes_deliver_patch.autostart_enabled():
|
|
61
|
-
return
|
|
62
|
-
status = hermes_deliver_patch.patch_status()
|
|
63
|
-
if status.status == "applied":
|
|
64
|
-
return
|
|
65
|
-
result = hermes_deliver_patch.ensure_applied()
|
|
66
|
-
if result.status != "applied" and result.status != "no_hermes":
|
|
67
|
-
_warn(f"cluxion hermes deliver patch: {result.detail}")
|
|
68
|
-
except Exception as exc:
|
|
69
|
-
_warn(f"cluxion hermes deliver patch failed: {exc}")
|
|
70
|
-
|
|
71
|
-
|
|
72
54
|
def post_tool_call(**_: Any) -> None:
|
|
73
55
|
"""Run a throttled guard watch after tool calls.
|
|
74
56
|
|
|
@@ -15,7 +15,7 @@ from typing import Literal
|
|
|
15
15
|
PATCH_RESOURCE = "patches/hermes-deliver-agent.patch"
|
|
16
16
|
BRANCH_NAME = "cluxion/plugin-deliver-agent"
|
|
17
17
|
|
|
18
|
-
Status = Literal["applied", "missing", "partial", "no_hermes"]
|
|
18
|
+
Status = Literal["applied", "missing", "partial", "no_hermes", "anchors-mismatch"]
|
|
19
19
|
|
|
20
20
|
|
|
21
21
|
@dataclass(frozen=True)
|
|
@@ -129,6 +129,15 @@ def ensure_applied(
|
|
|
129
129
|
)
|
|
130
130
|
|
|
131
131
|
after = patch_status(current.hermes_root)
|
|
132
|
+
if after.status != "applied":
|
|
133
|
+
return PatchResult(
|
|
134
|
+
current.hermes_root,
|
|
135
|
+
"anchors-mismatch",
|
|
136
|
+
False,
|
|
137
|
+
False,
|
|
138
|
+
"failed",
|
|
139
|
+
after.detail,
|
|
140
|
+
)
|
|
132
141
|
return PatchResult(
|
|
133
142
|
current.hermes_root,
|
|
134
143
|
after.status,
|
|
@@ -358,16 +367,9 @@ def _patch_tui_gateway(root: Path) -> bool:
|
|
|
358
367
|
path.write_text(text, encoding="utf-8")
|
|
359
368
|
return changed
|
|
360
369
|
|
|
361
|
-
|
|
362
|
-
def autostart_enabled() -> bool:
|
|
363
|
-
value = os.environ.get("CLUXION_HERMES_PATCH_AUTOFIX", "1").strip().lower()
|
|
364
|
-
return value not in {"0", "false", "no", "off"}
|
|
365
|
-
|
|
366
|
-
|
|
367
370
|
__all__ = [
|
|
368
371
|
"PatchResult",
|
|
369
|
-
"autostart_enabled",
|
|
370
372
|
"ensure_applied",
|
|
371
373
|
"patch_status",
|
|
372
374
|
"resolve_hermes_agent_root",
|
|
373
|
-
]
|
|
375
|
+
]
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
name: cluxion-agentplugin-preprocessing
|
|
2
|
-
version: 0.3.
|
|
2
|
+
version: 0.3.25
|
|
3
3
|
description: "Universal agent preprocessing plugin: honesty contracts, clarification, Rust work queue, resource-aware harness handoff. Connected AI calls cluxion tools; plugin does not own models."
|
|
4
4
|
author: cluxion
|
|
5
5
|
kind: standalone
|
|
@@ -20,4 +20,4 @@ provides_tools:
|
|
|
20
20
|
- cluxion_browser_extract
|
|
21
21
|
- cluxion_browser_click
|
|
22
22
|
- cluxion_browser_type
|
|
23
|
-
- cluxion_doctor
|
|
23
|
+
- cluxion_doctor
|
|
@@ -171,8 +171,7 @@ LOOP_AUTO_SCHEMA = {
|
|
|
171
171
|
"name": "cluxion_loop_auto",
|
|
172
172
|
"description": (
|
|
173
173
|
"Autonomously drain the Cluxion dispatch queue via Hermes oneshot calls. "
|
|
174
|
-
"
|
|
175
|
-
"Use after cluxion_plan queued a durable work bundle, or pass loop_auto on plan."
|
|
174
|
+
"Use after cluxion_plan queued a durable work bundle, or pass explicit loop_auto=true on plan."
|
|
176
175
|
),
|
|
177
176
|
"parameters": {
|
|
178
177
|
"type": "object",
|
|
@@ -20,8 +20,7 @@ Examples:
|
|
|
20
20
|
/loopauto refactor auth module with tests
|
|
21
21
|
|
|
22
22
|
Notes:
|
|
23
|
-
- Equivalent to
|
|
24
|
-
- Disable auto-loop: export CLUXION_LOOP_AUTO=0
|
|
23
|
+
- Equivalent to cluxion_plan with loop_auto=true
|
|
25
24
|
- Diagnostics only: add loop_auto_dry_run via cluxion_plan tool
|
|
26
25
|
"""
|
|
27
26
|
|
|
@@ -52,9 +51,10 @@ def handle_loopauto(raw_args: str) -> str:
|
|
|
52
51
|
try:
|
|
53
52
|
result = runner.plan(
|
|
54
53
|
{
|
|
55
|
-
"prompt":
|
|
54
|
+
"prompt": prompt,
|
|
56
55
|
"cwd": str(Path.cwd()),
|
|
57
56
|
"clarification_answers": "confirmed via /loopauto slash command",
|
|
57
|
+
"loop_auto": True,
|
|
58
58
|
}
|
|
59
59
|
)
|
|
60
60
|
return _format_plan_response(result.to_json())
|
|
@@ -108,7 +108,7 @@ def _format_plan_response(raw_json: str) -> str:
|
|
|
108
108
|
if isinstance(host, dict) and host.get("queue_required"):
|
|
109
109
|
return (
|
|
110
110
|
"Plan queued but loop_auto did not run. "
|
|
111
|
-
"
|
|
111
|
+
"Call cluxion_loop_auto or pass explicit loop_auto=true; check hermes on PATH."
|
|
112
112
|
)
|
|
113
113
|
return json.dumps(body, ensure_ascii=False, indent=2)[:8000]
|
|
114
114
|
|
|
@@ -118,4 +118,4 @@ __all__ = [
|
|
|
118
118
|
"handle_cluxion_doctor",
|
|
119
119
|
"handle_loopauto",
|
|
120
120
|
"register_slash_commands",
|
|
121
|
-
]
|
|
121
|
+
]
|
|
@@ -86,6 +86,7 @@ def _build_parser() -> argparse.ArgumentParser:
|
|
|
86
86
|
plan.add_argument("--expected-ram-mb", type=int, default=0)
|
|
87
87
|
plan.add_argument("--context-tokens", type=int, default=0)
|
|
88
88
|
plan.add_argument("--cwd", default="")
|
|
89
|
+
plan.add_argument("--loop-auto", action="store_true")
|
|
89
90
|
plan.add_argument("--json-stdin", action="store_true")
|
|
90
91
|
serve = subparsers.add_parser("serve-local", help="Prepare a vLLM-MLX server endpoint for a local model")
|
|
91
92
|
serve.add_argument("--model", required=True)
|
|
@@ -159,6 +160,8 @@ def _run_plan(args: argparse.Namespace) -> int:
|
|
|
159
160
|
surface = AgentSurface(str(args.surface))
|
|
160
161
|
payload = _payload_from_stdin() if args.json_stdin else _payload_from_args(args)
|
|
161
162
|
payload = _apply_loop_auto_directive(payload)
|
|
163
|
+
if bool(getattr(args, "loop_auto", False)):
|
|
164
|
+
payload["loop_auto"] = True
|
|
162
165
|
item = work_item_from_adapter_payload(payload, default_surface=surface)
|
|
163
166
|
plan = build_harness_plan(item)
|
|
164
167
|
persisted = persist_dispatch_bundle(plan)
|
|
@@ -441,6 +444,7 @@ def _payload_from_args(args: argparse.Namespace) -> dict[str, object]:
|
|
|
441
444
|
"expected_ram_mb": int(args.expected_ram_mb),
|
|
442
445
|
"context_tokens": int(args.context_tokens),
|
|
443
446
|
"cwd": str(args.cwd),
|
|
447
|
+
"loop_auto": bool(args.loop_auto),
|
|
444
448
|
}
|
|
445
449
|
|
|
446
450
|
|
|
@@ -451,7 +455,6 @@ def _apply_loop_auto_directive(payload: dict[str, object]) -> dict[str, object]:
|
|
|
451
455
|
return payload
|
|
452
456
|
updated = dict(payload)
|
|
453
457
|
updated["prompt"] = cleaned
|
|
454
|
-
updated["loop_auto"] = True
|
|
455
458
|
return updated
|
|
456
459
|
|
|
457
460
|
|