@jesdi/skills 0.0.39 → 0.0.40
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.
package/package.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
|
-
"explorer": ["claude-sonnet-5@medium"],
|
|
3
|
-
"test-writer": ["claude-sonnet-5@medium", "openai/gpt-6.1-sol@medium"],
|
|
4
|
-
"implementer": ["claude-sonnet-5@medium", "openai/gpt-6.1-sol@medium"],
|
|
5
|
-
"reviewer": ["openai/gpt-6-astra@medium", "claude-opus-5@medium"],
|
|
6
|
-
"correctness": ["openai/gpt-6-astra@medium", "claude-opus-5@medium"],
|
|
7
|
-
"fixer": ["claude-opus-5@medium"],
|
|
8
|
-
"final-reviewer": ["openai/gpt-6-astra@medium", "claude-opus-5@medium"],
|
|
9
|
-
"conflict": ["claude-opus-5@medium"],
|
|
10
|
-
"pr-writer": ["claude-opus-5@medium"]
|
|
2
|
+
"explorer": ["claude-sonnet-5-5@medium"],
|
|
3
|
+
"test-writer": ["claude-sonnet-5-5@medium", "openai/gpt-6.1-sol@medium"],
|
|
4
|
+
"implementer": ["claude-sonnet-5-5@medium", "openai/gpt-6.1-sol@medium"],
|
|
5
|
+
"reviewer": ["openai/gpt-6-astra@medium", "claude-opus-5-5@medium"],
|
|
6
|
+
"correctness": ["openai/gpt-6-astra@medium", "claude-opus-5-5@medium"],
|
|
7
|
+
"fixer": ["claude-opus-5-5@medium"],
|
|
8
|
+
"final-reviewer": ["openai/gpt-6-astra@medium", "claude-opus-5-5@medium"],
|
|
9
|
+
"conflict": ["claude-opus-5-5@medium"],
|
|
10
|
+
"pr-writer": ["claude-opus-5-5@medium"]
|
|
11
11
|
}
|
|
@@ -74,7 +74,7 @@ def test_models_file_checks_the_first_entry_of_each_role(repo, capsys, tmp_path,
|
|
|
74
74
|
monkeypatch.setattr(driver_agents.shutil, "which", lambda cli: None if cli == "codex" else cli)
|
|
75
75
|
models = tmp_path.parent / f"{tmp_path.name}-models.json"
|
|
76
76
|
# The default reviewer and final-reviewer start on codex, so this file gives both a claude entry.
|
|
77
|
-
claude = {"reviewer": ["claude-opus-5@medium"], "final-reviewer": ["claude-opus-5@medium"]}
|
|
77
|
+
claude = {"reviewer": ["claude-opus-5-5@medium"], "final-reviewer": ["claude-opus-5-5@medium"]}
|
|
78
78
|
models.write_text(json.dumps({"implementer": ["openai/gpt-sol@medium"], **claude,
|
|
79
79
|
"correctness": ["openai/gpt-sol@medium"], "fixer": ["other/x@low"]}))
|
|
80
80
|
assert run(capsys, "--models", str(models)) == (
|
|
@@ -90,11 +90,14 @@ def test_models_file_checks_the_first_entry_of_each_role(repo, capsys, tmp_path,
|
|
|
90
90
|
3, "correctness: codex is not on PATH (model entry openai/gpt-sol@low)\n")
|
|
91
91
|
|
|
92
92
|
|
|
93
|
-
|
|
93
|
+
# Each entry is invalid on purpose: `turbo` is no effort of the anthropic provider, the second entry has no
|
|
94
|
+
# effort, and the third has no model.
|
|
95
|
+
@pytest.mark.parametrize("entry", ["claude-opus-5-5@turbo", "openai/gpt-sol", "openai/@low"],
|
|
96
|
+
ids=["unknown-effort", "no-effort", "no-model"])
|
|
94
97
|
def test_an_entry_needs_a_model_and_an_effort_of_its_provider(repo, capsys, tmp_path, entry):
|
|
95
98
|
repo(t01=ticket("01"))
|
|
96
99
|
models = tmp_path.parent / f"{tmp_path.name}-models.json"
|
|
97
|
-
models.write_text(json.dumps({"reviewer": ["claude-opus-5@low", entry]}))
|
|
100
|
+
models.write_text(json.dumps({"reviewer": ["claude-opus-5-5@low", entry]}))
|
|
98
101
|
code, out = run(capsys, "--models", str(models))
|
|
99
102
|
assert code == 3 and out.startswith(f"reviewer: model entry {entry} needs a model and an effort from ")
|
|
100
103
|
|
|
@@ -173,7 +176,7 @@ def test_accepted_reports_end_the_run_with_exit_0(repo, tmp_path, capsys):
|
|
|
173
176
|
assert code == 0
|
|
174
177
|
tip = walked("--short=7")
|
|
175
178
|
assert [line.partition(" for ")[0] for line in ledger] == [
|
|
176
|
-
"Ticket 01: test-writer ran on claude-sonnet-5@medium", "Ticket 01: implementer ran on claude-sonnet-5@medium",
|
|
179
|
+
"Ticket 01: test-writer ran on claude-sonnet-5-5@medium", "Ticket 01: implementer ran on claude-sonnet-5-5@medium",
|
|
177
180
|
f"Ticket 01: the gate is green on {tip}, record .agent/implement/01/gate-{tip}.log.",
|
|
178
181
|
"Ticket 01: reviewer ran on openai/gpt-6-astra@medium",
|
|
179
182
|
f"Ticket 01: merged into feat/x as a fast-forward at {tip}."]
|
|
@@ -413,7 +416,7 @@ def test_a_merge_conflict_goes_to_the_conflict_agent_once_and_its_commit_is_gate
|
|
|
413
416
|
number, tip = line[7:9], walked()
|
|
414
417
|
assert line.endswith(f" at {tip[:7]}.") and len(out_of("git", "rev-list", "--parents", "-n1", tip).split()) == 3
|
|
415
418
|
assert f"Ticket {number}: the gate is green on {tip[:7]}, record .agent/implement/{number}/gate-{tip[:7]}.log." in ledger
|
|
416
|
-
assert "| gates run | 4 |" in out and "| agents, conflict on claude-opus-5@medium | 1 |" in out
|
|
419
|
+
assert "| gates run | 4 |" in out and "| agents, conflict on claude-opus-5-5@medium | 1 |" in out
|
|
417
420
|
assert dict(state_of(tmp_path)["run"]["landed"])[number] == tip
|
|
418
421
|
prompt = (tmp_path / f".agent/implement/{number}/conflict-0.prompt.md").read_text()
|
|
419
422
|
assert "Files in conflict: work.txt\n" in prompt and prompt.rstrip().endswith("one ref store.")
|
|
@@ -794,7 +797,7 @@ def test_the_preflight_asks_each_used_entry_once_and_names_each_cli_that_fails(t
|
|
|
794
797
|
monkeypatch.setattr(driver_agents, "PREFLIGHT_MINUTES", 0.02)
|
|
795
798
|
models, _ = driver_agents.load_models(None)
|
|
796
799
|
models["reviewer"] = ["openai/gpt-astra@medium"]
|
|
797
|
-
assert driver_agents.used_entries(models) == ["claude-opus-5@medium", "claude-sonnet-5@medium",
|
|
800
|
+
assert driver_agents.used_entries(models) == ["claude-opus-5-5@medium", "claude-sonnet-5-5@medium",
|
|
798
801
|
"openai/gpt-6-astra@medium", "openai/gpt-6.1-sol@medium",
|
|
799
802
|
"openai/gpt-astra@medium"]
|
|
800
803
|
assert driver_agents.preflight(models) == [
|
|
@@ -8,10 +8,10 @@ import pytest
|
|
|
8
8
|
from test_cli import RUN, SKILL, drive, env, make_repo, three # noqa: F401 (env is a fixture)
|
|
9
9
|
|
|
10
10
|
STANDARD = {
|
|
11
|
-
"implementer": ["claude-sonnet-5@medium", "openai/gpt-6.1-sol@medium"],
|
|
12
|
-
"test-writer": ["claude-sonnet-5@medium", "openai/gpt-6.1-sol@medium"],
|
|
13
|
-
"reviewer": ["openai/gpt-6-astra@medium", "claude-opus-5@medium"],
|
|
14
|
-
"final-reviewer": ["openai/gpt-6-astra@medium", "claude-opus-5@medium"],
|
|
11
|
+
"implementer": ["claude-sonnet-5-5@medium", "openai/gpt-6.1-sol@medium"],
|
|
12
|
+
"test-writer": ["claude-sonnet-5-5@medium", "openai/gpt-6.1-sol@medium"],
|
|
13
|
+
"reviewer": ["openai/gpt-6-astra@medium", "claude-opus-5-5@medium"],
|
|
14
|
+
"final-reviewer": ["openai/gpt-6-astra@medium", "claude-opus-5-5@medium"],
|
|
15
15
|
}
|
|
16
16
|
ENTRY = re.compile(r"^(?:(?:anthropic|openai)/)?[\w.-]+@(?:minimal|low|medium|high|xhigh|max)$")
|
|
17
17
|
|
package/skills-manifest.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
|
-
"generatedAt": "2026-10-15T23:
|
|
3
|
+
"generatedAt": "2026-10-15T23:44:37.469Z",
|
|
4
4
|
"skills": [
|
|
5
5
|
{
|
|
6
6
|
"name": "backlog",
|
|
@@ -46,8 +46,8 @@
|
|
|
46
46
|
},
|
|
47
47
|
{
|
|
48
48
|
"name": "implement-spec",
|
|
49
|
-
"version": "0.1.
|
|
50
|
-
"hash": "sha256-
|
|
49
|
+
"version": "0.1.16",
|
|
50
|
+
"hash": "sha256-8f7e4b06072b26e3a6699974dced9afe2745917c01784f9f6166d972c3ba60f1",
|
|
51
51
|
"description": "Implement a specification in code."
|
|
52
52
|
},
|
|
53
53
|
{
|