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.
Files changed (113) hide show
  1. {cluxion_agentplugin_preprocessing-0.3.24/adapters/claude → cluxion_agentplugin_preprocessing-0.3.25}/.claude-plugin/plugin.json +3 -3
  2. cluxion_agentplugin_preprocessing-0.3.25/.codex-plugin/plugin.json +8 -0
  3. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/Docs/README.md +3 -3
  4. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/PKG-INFO +7 -5
  5. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/README.md +6 -4
  6. cluxion_agentplugin_preprocessing-0.3.25/commands/cluxion-doctor.md +9 -0
  7. cluxion_agentplugin_preprocessing-0.3.25/commands/cluxion-plan.md +18 -0
  8. cluxion_agentplugin_preprocessing-0.3.25/commands/loop-auto.md +16 -0
  9. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/pyproject.toml +10 -4
  10. cluxion_agentplugin_preprocessing-0.3.25/skills/preprocess/SKILL.md +47 -0
  11. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_agentplugin_preprocessing/cli.py +6 -12
  12. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_agentplugin_preprocessing/doctor/catalog.json +33 -0
  13. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_agentplugin_preprocessing/doctor/probes.py +58 -2
  14. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_agentplugin_preprocessing/guard_watch.py +0 -18
  15. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_agentplugin_preprocessing/hermes_deliver_patch.py +11 -9
  16. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_agentplugin_preprocessing/plugin.py +0 -1
  17. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_agentplugin_preprocessing/plugin.yaml +2 -2
  18. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_agentplugin_preprocessing/schemas.py +1 -2
  19. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_agentplugin_preprocessing/slash_commands.py +5 -5
  20. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/cli.py +4 -1
  21. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/core/loop_auto.py +64 -10
  22. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/guard_daemon_host.py +47 -10
  23. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/resources/guard_bridge.py +125 -43
  24. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/resources/rust_bridge.py +5 -2
  25. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/tests/runtime/test_cluxion_runtime_spine.py +26 -1
  26. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/tests/runtime/test_guard.py +11 -0
  27. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/tests/runtime/test_guard_daemon_host.py +13 -1
  28. cluxion_agentplugin_preprocessing-0.3.25/tests/runtime/test_loop_auto.py +215 -0
  29. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/tests/test_doctor.py +20 -0
  30. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/tests/test_guard_watch.py +18 -0
  31. cluxion_agentplugin_preprocessing-0.3.25/tests/test_hermes_deliver_patch.py +57 -0
  32. cluxion_agentplugin_preprocessing-0.3.25/tests/test_packaging_policy.py +40 -0
  33. cluxion_agentplugin_preprocessing-0.3.24/adapters/claude/skills/preprocess/SKILL.md +0 -36
  34. cluxion_agentplugin_preprocessing-0.3.24/adapters/codex/config-snippet.toml +0 -5
  35. cluxion_agentplugin_preprocessing-0.3.24/tests/runtime/test_loop_auto.py +0 -106
  36. cluxion_agentplugin_preprocessing-0.3.24/tests/test_hermes_deliver_patch.py +0 -21
  37. cluxion_agentplugin_preprocessing-0.3.24/tests/test_packaging_policy.py +0 -16
  38. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/.github/profile/README.md +0 -0
  39. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/.gitignore +0 -0
  40. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/LICENSE +0 -0
  41. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/cluxion-Docs/README.md +0 -0
  42. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/cluxion-Docs/architecture.md +0 -0
  43. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/cluxion-Docs/harness-logic.md +0 -0
  44. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/cluxion-Docs/honesty-preprocessing.md +0 -0
  45. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/cluxion-Docs/install-and-operations.md +0 -0
  46. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/cluxion-Docs/security.md +0 -0
  47. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/rust/cluxion_queue/Cargo.lock +0 -0
  48. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/rust/cluxion_queue/Cargo.toml +0 -0
  49. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/rust/cluxion_queue/pyproject.toml +0 -0
  50. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/rust/cluxion_queue/src/context.rs +0 -0
  51. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/rust/cluxion_queue/src/dispatch.rs +0 -0
  52. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/rust/cluxion_queue/src/guard.rs +0 -0
  53. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/rust/cluxion_queue/src/lib.rs +0 -0
  54. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/rust/cluxion_queue/src/main.rs +0 -0
  55. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/rust/cluxion_queue/src/queue.rs +0 -0
  56. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/rust/cluxion_queue/src/types.rs +0 -0
  57. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/rust/cluxion_queue/uv.lock +0 -0
  58. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_agentplugin_preprocessing/__init__.py +0 -0
  59. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_agentplugin_preprocessing/doctor/__init__.py +0 -0
  60. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_agentplugin_preprocessing/doctor/framework.py +0 -0
  61. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_agentplugin_preprocessing/hermes_config.py +0 -0
  62. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_agentplugin_preprocessing/patches/hermes-deliver-agent.patch +0 -0
  63. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_agentplugin_preprocessing/runner.py +0 -0
  64. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/__init__.py +0 -0
  65. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/__main__.py +0 -0
  66. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/adapters/__init__.py +0 -0
  67. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/adapters/contract.py +0 -0
  68. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/adapters/grok_build.py +0 -0
  69. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/adapters/hermes.py +0 -0
  70. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/adapters/spec.py +0 -0
  71. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/bootstrap.py +0 -0
  72. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/core/__init__.py +0 -0
  73. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/core/clarification.py +0 -0
  74. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/core/context_compress.py +0 -0
  75. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/core/dispatch_store.py +0 -0
  76. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/core/harness.py +0 -0
  77. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/core/hybrid_forget.py +0 -0
  78. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/core/intent.py +0 -0
  79. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/core/ledger.py +0 -0
  80. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/core/ledger_codec.py +0 -0
  81. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/core/llm_compress.py +0 -0
  82. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/core/plan_codec.py +0 -0
  83. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/core/preprocess.py +0 -0
  84. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/core/types.py +0 -0
  85. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/core/work_queue.py +0 -0
  86. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/models/__init__.py +0 -0
  87. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/models/supervisor.py +0 -0
  88. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/models/vllm_mlx.py +0 -0
  89. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/resources/__init__.py +0 -0
  90. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/resources/py_queue.py +0 -0
  91. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/resources/queue_bridge.py +0 -0
  92. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/web/__init__.py +0 -0
  93. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/src/cluxion_runtime/web/browser_bridge.py +0 -0
  94. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/tests/runtime/test_auto_compress_middleware.py +0 -0
  95. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/tests/runtime/test_bin_resolution.py +0 -0
  96. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/tests/runtime/test_browser_bridge.py +0 -0
  97. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/tests/runtime/test_clarification.py +0 -0
  98. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/tests/runtime/test_context_compress.py +0 -0
  99. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/tests/runtime/test_context_compress_llm_forget.py +0 -0
  100. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/tests/runtime/test_contract.py +0 -0
  101. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/tests/runtime/test_dispatch_store.py +0 -0
  102. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/tests/runtime/test_estimate_tokens.py +0 -0
  103. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/tests/runtime/test_ledger.py +0 -0
  104. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/tests/runtime/test_py_queue_concurrency.py +0 -0
  105. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/tests/runtime/test_queue_backends.py +0 -0
  106. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/tests/runtime/test_runtime_adapter_cli.py +0 -0
  107. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/tests/runtime/test_rust_queue.py +0 -0
  108. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/tests/runtime/test_supervisor.py +0 -0
  109. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/tests/test_bootstrap.py +0 -0
  110. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/tests/test_hermes_config.py +0 -0
  111. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/tests/test_plugin.py +0 -0
  112. {cluxion_agentplugin_preprocessing-0.3.24 → cluxion_agentplugin_preprocessing-0.3.25}/tests/test_runner.py +0 -0
  113. {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.2.0",
4
- "description": "Cluxion preprocessing: honesty, clarification, Rust work queue, resource admission.",
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
+ }
@@ -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`. Hermes 작업은 `/loopauto` 또는 `loop_auto: true`(기본)로 자동 드레인.
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: [`adapters/claude/skills/preprocess/SKILL.md`](../adapters/claude/skills/preprocess/SKILL.md)
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를 사용해 주세요.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cluxion-agentplugin-preprocessing
3
- Version: 0.3.24
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 + 자동 큐 드레인 (`/loopAuto` 지시어와 동일) |
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
- 비활성: `export CLUXION_LOOP_AUTO=0` · 상세: `Docs/cluxion-plugins-guide.md` §5-A (통합 가이드)
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>` | Plan + autonomous queue drain (same as `/loopAuto` directive) |
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
- Disable auto-loop: `export CLUXION_LOOP_AUTO=0`.
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
 
@@ -58,7 +58,7 @@ Hermes 안에서는 `cluxion_doctor` 도구로도 노출됩니다.
58
58
 
59
59
  | 슬래시 | 용도 |
60
60
  |---|---|
61
- | `/loopauto <prompt>` | plan + 자동 큐 드레인 (`/loopAuto` 지시어와 동일) |
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
- 비활성: `export CLUXION_LOOP_AUTO=0` · 상세: `Docs/cluxion-plugins-guide.md` §5-A (통합 가이드)
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>` | Plan + autonomous queue drain (same as `/loopAuto` directive) |
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
- Disable auto-loop: `export CLUXION_LOOP_AUTO=0`.
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,9 @@
1
+ ---
2
+ description: Run Cluxion plugin diagnostics.
3
+ ---
4
+
5
+ Run:
6
+
7
+ ```bash
8
+ cluxion-preprocess doctor
9
+ ```
@@ -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
+ ```
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "cluxion-agentplugin-preprocessing"
7
- version = "0.3.24"
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
- "adapters" = "cluxion_agentplugin_adapters"
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
- "adapters",
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="Apply or verify Hermes deliver=agent patch (/supercoder routing)",
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="Only report patch status (default: ensure applied)",
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
- patch = _ensure_hermes_patch(dry_run=bool(args.dry_run))
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 if patch.status in {"applied", "no_hermes"} or args.dry_run else 1
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 "warn", "not in plugins.enabled"
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
+ ]
@@ -222,7 +222,6 @@ def _plan_args_with_loop_auto(args: dict[str, object]) -> dict[str, object]:
222
222
  cleaned, had_directive = strip_loop_auto_directive(prompt)
223
223
  if had_directive:
224
224
  payload["prompt"] = cleaned
225
- payload["loop_auto"] = True
226
225
  return payload
227
226
 
228
227
 
@@ -1,5 +1,5 @@
1
1
  name: cluxion-agentplugin-preprocessing
2
- version: 0.3.23
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
- "Equivalent to /loopAuto: next segment -> hermes -z -> record -> ... -> briefing. "
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 prefixing a prompt with /loopAuto on cluxion_plan
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": f"/loopAuto {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
- "Check CLUXION_LOOP_AUTO=1 and hermes on PATH (cluxion-preprocess doctor)."
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