convertible-cli 0.2.0__tar.gz → 0.2.2__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 (98) hide show
  1. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/CHANGELOG.md +12 -0
  2. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/CLAUDE.md +2 -1
  3. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/PKG-INFO +14 -1
  4. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/README.md +13 -0
  5. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/convertible/engines/vllm_openai.py +4 -2
  6. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/pyproject.toml +1 -1
  7. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/tests/test_vllm_live.py +2 -2
  8. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/uv.lock +1 -1
  9. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/.claude/skills/agent-config/SKILL.md +0 -0
  10. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/.claude/skills/agent-config/data/backend-fingerprints.yaml +0 -0
  11. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/.claude/skills/agent-config/scripts/show.sh +0 -0
  12. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/.claude/skills/assign-to-workforce/SKILL.md +0 -0
  13. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/.claude/skills/assign-to-workforce/scripts/assign-to-workforce.sh +0 -0
  14. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/.claude/skills/cicd/SKILL.md +0 -0
  15. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/.claude/skills/cicd/scripts/_resolve-nick.sh +0 -0
  16. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/.claude/skills/cicd/scripts/portability-lint.sh +0 -0
  17. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/.claude/skills/cicd/scripts/pr-reply.sh +0 -0
  18. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/.claude/skills/cicd/scripts/pr-status.sh +0 -0
  19. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/.claude/skills/cicd/scripts/workflow.sh +0 -0
  20. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/.claude/skills/communicate/SKILL.md +0 -0
  21. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/.claude/skills/communicate/scripts/fetch-issues.sh +0 -0
  22. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/.claude/skills/communicate/scripts/mesh-message.sh +0 -0
  23. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/.claude/skills/communicate/scripts/post-comment.sh +0 -0
  24. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/.claude/skills/communicate/scripts/post-issue.sh +0 -0
  25. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/.claude/skills/communicate/scripts/templates/skill-new-brief.md +0 -0
  26. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/.claude/skills/communicate/scripts/templates/skill-update-brief.md +0 -0
  27. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/.claude/skills/doc-test-alignment/SKILL.md +0 -0
  28. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/.claude/skills/doc-test-alignment/scripts/check.sh +0 -0
  29. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/.claude/skills/pypi-maintainer/SKILL.md +0 -0
  30. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/.claude/skills/pypi-maintainer/scripts/switch-source.sh +0 -0
  31. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/.claude/skills/run-tests/SKILL.md +0 -0
  32. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/.claude/skills/run-tests/scripts/test.sh +0 -0
  33. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/.claude/skills/sonarclaude/SKILL.md +0 -0
  34. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/.claude/skills/sonarclaude/scripts/sonar.sh +0 -0
  35. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/.claude/skills/spec-to-plan/SKILL.md +0 -0
  36. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/.claude/skills/spec-to-plan/scripts/spec-to-plan.sh +0 -0
  37. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/.claude/skills/think/SKILL.md +0 -0
  38. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/.claude/skills/think/scripts/think.sh +0 -0
  39. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/.claude/skills/version-bump/SKILL.md +0 -0
  40. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/.claude/skills/version-bump/scripts/bump.py +0 -0
  41. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/.claude/skills.local.yaml.example +0 -0
  42. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/.devague/current +0 -0
  43. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/.devague/current_plan +0 -0
  44. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/.devague/frames/convertible-v0-ships-point-it-at-a-repo-task-and-i.json +0 -0
  45. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/.devague/plans/convertible-v0-ships-point-it-at-a-repo-task-and-i.json +0 -0
  46. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/.flake8 +0 -0
  47. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/.github/workflows/publish.yml +0 -0
  48. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/.github/workflows/tests.yml +0 -0
  49. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/.gitignore +0 -0
  50. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/.markdownlint-cli2.yaml +0 -0
  51. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/LICENSE +0 -0
  52. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/convertible/__init__.py +0 -0
  53. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/convertible/__main__.py +0 -0
  54. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/convertible/artifact.py +0 -0
  55. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/convertible/cli/__init__.py +0 -0
  56. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/convertible/cli/_commands/__init__.py +0 -0
  57. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/convertible/cli/_commands/cli.py +0 -0
  58. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/convertible/cli/_commands/doctor.py +0 -0
  59. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/convertible/cli/_commands/drive.py +0 -0
  60. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/convertible/cli/_commands/explain.py +0 -0
  61. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/convertible/cli/_commands/learn.py +0 -0
  62. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/convertible/cli/_commands/overview.py +0 -0
  63. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/convertible/cli/_commands/wheels.py +0 -0
  64. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/convertible/cli/_commands/whoami.py +0 -0
  65. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/convertible/cli/_errors.py +0 -0
  66. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/convertible/cli/_output.py +0 -0
  67. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/convertible/config.py +0 -0
  68. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/convertible/contract.py +0 -0
  69. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/convertible/engine.py +0 -0
  70. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/convertible/engines/__init__.py +0 -0
  71. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/convertible/engines/mock.py +0 -0
  72. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/convertible/explain/__init__.py +0 -0
  73. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/convertible/explain/catalog.py +0 -0
  74. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/convertible/handoff.py +0 -0
  75. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/convertible/loop.py +0 -0
  76. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/convertible/registry.py +0 -0
  77. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/convertible/tools.py +0 -0
  78. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/culture.yaml +0 -0
  79. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/docs/plans/2026-05-26-convertible-v0-ships-point-it-at-a-repo-task-and-i.md +0 -0
  80. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/docs/skill-sources.md +0 -0
  81. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/docs/specs/2026-05-26-convertible-v0-ships-point-it-at-a-repo-task-and-i.md +0 -0
  82. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/sonar-project.properties +0 -0
  83. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/tests/__init__.py +0 -0
  84. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/tests/test_artifact.py +0 -0
  85. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/tests/test_cli.py +0 -0
  86. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/tests/test_cli_introspection.py +0 -0
  87. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/tests/test_config.py +0 -0
  88. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/tests/test_contract.py +0 -0
  89. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/tests/test_drive.py +0 -0
  90. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/tests/test_e2e_mock.py +0 -0
  91. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/tests/test_engine.py +0 -0
  92. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/tests/test_handoff.py +0 -0
  93. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/tests/test_loop.py +0 -0
  94. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/tests/test_mock_engine.py +0 -0
  95. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/tests/test_registry.py +0 -0
  96. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/tests/test_tools.py +0 -0
  97. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/tests/test_vllm_openai.py +0 -0
  98. {convertible_cli-0.2.0 → convertible_cli-0.2.2}/tests/test_wheels.py +0 -0
@@ -5,6 +5,18 @@ All notable changes to this project will be documented in this file.
5
5
  Format follows [Keep a Changelog](https://keepachangelog.com/). This project
6
6
  adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [0.2.2] - 2026-05-27
9
+
10
+ ### Added
11
+
12
+ - README tip (anecdotal, n=1): qwen3_coder handled tool-argument escaping more reliably than hermes for an NVFP4 Qwen3 checkpoint — a hermes run over-escaped docstring triple-quotes into a SyntaxError. Framed as a single observation, not a benchmark.
13
+
14
+ ## [0.2.1] - 2026-05-27
15
+
16
+ ### Changed
17
+
18
+ - Generalized the vLLM tool-call-parser docs from hermes-specific to model-appropriate (e.g. hermes or qwen3_coder); the engine is parser-agnostic and only needs OpenAI-format tool calls. Touches vllm_openai docstring, the live-proof test docstring, README, and CLAUDE.md.
19
+
8
20
  ## [0.2.0] - 2026-05-27
9
21
 
10
22
  ### Added
@@ -75,7 +75,8 @@ uv run teken cli doctor . --strict # agent-first rubric gate
75
75
  ```
76
76
 
77
77
  The live vLLM proof is opt-in (the reference rig must expose tool calling:
78
- `--enable-auto-tool-choice --tool-call-parser hermes`):
78
+ `--enable-auto-tool-choice` plus a model-appropriate `--tool-call-parser`, e.g.
79
+ `hermes` or `qwen3_coder`):
79
80
 
80
81
  ```bash
81
82
  CONVERTIBLE_VLLM_E2E=1 uv run pytest tests/test_vllm_live.py -v
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: convertible-cli
3
- Version: 0.2.0
3
+ Version: 0.2.2
4
4
  Summary: Convertible CLI is a swappable coder-agent harness that turns different models into repo workers behind one shared task contract.
5
5
  Project-URL: Homepage, https://github.com/agentculture/convertible
6
6
  Project-URL: Issues, https://github.com/agentculture/convertible/issues
@@ -86,6 +86,19 @@ vllm serve Qwen/Qwen3-32B \
86
86
  --tool-call-parser hermes
87
87
  ```
88
88
 
89
+ The right `--tool-call-parser` depends on the model **and** the vLLM build:
90
+ `hermes` works for many models (including `Qwen/Qwen3-32B` above), while other
91
+ builds need a different one — e.g. an NVFP4 Qwen3 checkpoint served via vLLM may
92
+ want `qwen3_coder`. The engine itself is parser-agnostic — any parser that makes
93
+ the server emit OpenAI-format tool calls works.
94
+
95
+ > **Tip (anecdotal).** With an NVFP4 Qwen3 checkpoint, `qwen3_coder` handled
96
+ > tool-argument escaping more reliably than `hermes` in our testing: a `hermes`
97
+ > run over-escaped the triple-quotes in a generated docstring (writing `\"\"\"`
98
+ > instead of `"""`), producing a `SyntaxError`, where `qwen3_coder` wrote the
99
+ > same file cleanly. This is a single observation, not a benchmark — but if a
100
+ > parser garbles quote-heavy edits, trying the other one is worth a shot.
101
+
89
102
  Then point Convertible at it (defaults already target `localhost:8001`):
90
103
 
91
104
  ```bash
@@ -69,6 +69,19 @@ vllm serve Qwen/Qwen3-32B \
69
69
  --tool-call-parser hermes
70
70
  ```
71
71
 
72
+ The right `--tool-call-parser` depends on the model **and** the vLLM build:
73
+ `hermes` works for many models (including `Qwen/Qwen3-32B` above), while other
74
+ builds need a different one — e.g. an NVFP4 Qwen3 checkpoint served via vLLM may
75
+ want `qwen3_coder`. The engine itself is parser-agnostic — any parser that makes
76
+ the server emit OpenAI-format tool calls works.
77
+
78
+ > **Tip (anecdotal).** With an NVFP4 Qwen3 checkpoint, `qwen3_coder` handled
79
+ > tool-argument escaping more reliably than `hermes` in our testing: a `hermes`
80
+ > run over-escaped the triple-quotes in a generated docstring (writing `\"\"\"`
81
+ > instead of `"""`), producing a `SyntaxError`, where `qwen3_coder` wrote the
82
+ > same file cleanly. This is a single observation, not a benchmark — but if a
83
+ > parser garbles quote-heavy edits, trying the other one is worth a shot.
84
+
72
85
  Then point Convertible at it (defaults already target `localhost:8001`):
73
86
 
74
87
  ```bash
@@ -7,8 +7,10 @@ stdlib ``urllib`` rather than any vendor SDK — pointing :class:`EngineConfig`
7
7
  any OpenAI-compatible server (vLLM, llama.cpp, an OpenAI proxy) is a config
8
8
  change, never a code change (honesty condition h2).
9
9
 
10
- vLLM note: Qwen-family tool calling needs the server started with
11
- ``--enable-auto-tool-choice --tool-call-parser hermes``.
10
+ vLLM note: tool calling needs the server started with ``--enable-auto-tool-choice``
11
+ and a ``--tool-call-parser`` matching the model (e.g. ``hermes`` for many models,
12
+ ``qwen3_coder`` for some Qwen3 builds). The engine is parser-agnostic — it only
13
+ needs the server to emit OpenAI-format tool calls.
12
14
  """
13
15
 
14
16
  from __future__ import annotations
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "convertible-cli"
3
- version = "0.2.0"
3
+ version = "0.2.2"
4
4
  description = "Convertible CLI is a swappable coder-agent harness that turns different models into repo workers behind one shared task contract."
5
5
  readme = "README.md"
6
6
  license = "MIT"
@@ -12,8 +12,8 @@ Run it (with the reference rig up) like::
12
12
  CONVERTIBLE_MODEL=Qwen/Qwen3-32B \\
13
13
  uv run pytest tests/test_vllm_live.py -v
14
14
 
15
- The server must expose tool calling (vLLM:
16
- ``--enable-auto-tool-choice --tool-call-parser hermes``).
15
+ The server must expose tool calling (vLLM: ``--enable-auto-tool-choice`` plus a
16
+ ``--tool-call-parser`` for the model, e.g. ``hermes`` or ``qwen3_coder``).
17
17
  """
18
18
 
19
19
  from __future__ import annotations
@@ -72,7 +72,7 @@ wheels = [
72
72
 
73
73
  [[package]]
74
74
  name = "convertible-cli"
75
- version = "0.2.0"
75
+ version = "0.2.2"
76
76
  source = { editable = "." }
77
77
 
78
78
  [package.dev-dependencies]
File without changes
File without changes