@hecer/yoke 1.1.1 → 1.2.0

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 (41) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/.codex-plugin/plugin.json +1 -1
  3. package/CHANGELOG.md +18 -3
  4. package/README.md +87 -21
  5. package/bench/README.md +46 -14
  6. package/bench/RESULTS.md +108 -11
  7. package/bench/analyze-routing-study.mjs +96 -0
  8. package/bench/fixtures/routing-queue/.yoke/config.yaml +30 -0
  9. package/bench/fixtures/routing-queue/.yoke/prd.yaml +24 -0
  10. package/bench/fixtures/routing-queue/bench-verify.mjs +9 -0
  11. package/bench/fixtures/routing-queue/package.json +9 -0
  12. package/bench/fixtures/routing-queue/src/task-queue.mjs +1 -0
  13. package/bench/fixtures/routing-queue/tests/STORY-1.test.mjs +68 -0
  14. package/bench/fixtures/routing-queue/tests/STORY-2.test.mjs +72 -0
  15. package/bench/results/routing-queue-codex-routing-off-2026-08-01T21-44-00.json +46 -0
  16. package/bench/results/routing-queue-codex-routing-on-2026-08-01T21-50-31.json +109 -0
  17. package/bench/results/yoke-codex-study-codex-routing-off-2026-08-02T07-58-56.json +65 -0
  18. package/bench/results/yoke-codex-study-codex-routing-off-2026-08-02T08-08-48.json +65 -0
  19. package/bench/results/yoke-codex-study-codex-routing-off-2026-08-02T08-34-45.json +65 -0
  20. package/bench/results/yoke-codex-study-codex-routing-on-2026-08-02T07-51-59.json +168 -0
  21. package/bench/results/yoke-codex-study-codex-routing-on-2026-08-02T08-18-59.json +168 -0
  22. package/bench/results/yoke-codex-study-codex-routing-on-2026-08-02T08-25-25.json +168 -0
  23. package/bench/results/yoke-large-codex-routing-off-2026-08-01T22-58-01.json +54 -0
  24. package/bench/results/yoke-large-codex-routing-on-2026-08-01T23-09-39.json +133 -0
  25. package/bench/run-large.mjs +188 -0
  26. package/bench/run.mjs +42 -21
  27. package/dist/agents/providers.js +19 -2
  28. package/dist/agents/telemetry.js +46 -7
  29. package/dist/cli.js +7 -5
  30. package/dist/loop/decision.js +3 -1
  31. package/dist/loop/loop.js +10 -0
  32. package/dist/loop/reporter.js +9 -0
  33. package/dist/loop/run-command.js +33 -5
  34. package/dist/loop/runner.js +68 -9
  35. package/dist/retrofit/config.js +21 -0
  36. package/dist/review/command.js +2 -2
  37. package/dist/routing/registry.js +92 -0
  38. package/dist/routing/router.js +195 -0
  39. package/dist/setup/command.js +23 -1
  40. package/gemini-extension.json +1 -1
  41. package/package.json +6 -4
@@ -0,0 +1,168 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "fixtureVersion": "yoke-codex-study@1",
4
+ "runner": "codex",
5
+ "sampleLabel": "codex-only-pair2-on",
6
+ "permissionProfile": "unsafe",
7
+ "yokeVersion": "1.1.1",
8
+ "fixture": "yoke-codex-study",
9
+ "routing": "on",
10
+ "startedAt": "2026-08-02T08:19:02.271Z",
11
+ "wallClockMs": 350819,
12
+ "exitCode": 0,
13
+ "finalState": "complete",
14
+ "verdict": "completed",
15
+ "blocker": null,
16
+ "conflicts": 0,
17
+ "iterations": 2,
18
+ "finalTestsPass": true,
19
+ "progress": {
20
+ "passed": 2,
21
+ "total": 2
22
+ },
23
+ "usageAvailable": true,
24
+ "modelAvailable": true,
25
+ "requestedParentModel": "gpt-5.6-sol",
26
+ "tokens": {
27
+ "inputTokens": 1300941,
28
+ "cachedInputTokens": 1190400,
29
+ "cacheWriteInputTokens": 0,
30
+ "outputTokens": 6937,
31
+ "reasoningOutputTokens": 661,
32
+ "calls": [
33
+ {
34
+ "role": "orchestrator",
35
+ "provider": "codex",
36
+ "requestedModel": "gpt-5.6-sol",
37
+ "requestedReasoningEffort": "low",
38
+ "inputTokens": 19164,
39
+ "cachedInputTokens": 11008,
40
+ "cacheWriteInputTokens": 0,
41
+ "outputTokens": 30,
42
+ "reasoningOutputTokens": 0,
43
+ "durationMs": 14281
44
+ },
45
+ {
46
+ "role": "worker",
47
+ "provider": "codex",
48
+ "profile": "codex-luna",
49
+ "requestedModel": "gpt-5.6-luna",
50
+ "requestedReasoningEffort": "low",
51
+ "inputTokens": 518512,
52
+ "cachedInputTokens": 478208,
53
+ "cacheWriteInputTokens": 0,
54
+ "outputTokens": 3741,
55
+ "reasoningOutputTokens": 343,
56
+ "durationMs": 158895
57
+ },
58
+ {
59
+ "role": "orchestrator",
60
+ "provider": "codex",
61
+ "requestedModel": "gpt-5.6-sol",
62
+ "requestedReasoningEffort": "low",
63
+ "inputTokens": 19161,
64
+ "cachedInputTokens": 11008,
65
+ "cacheWriteInputTokens": 0,
66
+ "outputTokens": 32,
67
+ "reasoningOutputTokens": 0,
68
+ "durationMs": 10792
69
+ },
70
+ {
71
+ "role": "worker",
72
+ "provider": "codex",
73
+ "profile": "codex-luna",
74
+ "requestedModel": "gpt-5.6-luna",
75
+ "requestedReasoningEffort": "low",
76
+ "inputTokens": 744104,
77
+ "cachedInputTokens": 690176,
78
+ "cacheWriteInputTokens": 0,
79
+ "outputTokens": 3134,
80
+ "reasoningOutputTokens": 318,
81
+ "durationMs": 162477
82
+ }
83
+ ]
84
+ },
85
+ "modelCalls": [
86
+ {
87
+ "role": "orchestrator",
88
+ "provider": "codex",
89
+ "requestedModel": "gpt-5.6-sol",
90
+ "requestedReasoningEffort": "low",
91
+ "inputTokens": 19164,
92
+ "cachedInputTokens": 11008,
93
+ "cacheWriteInputTokens": 0,
94
+ "outputTokens": 30,
95
+ "reasoningOutputTokens": 0,
96
+ "durationMs": 14281
97
+ },
98
+ {
99
+ "role": "worker",
100
+ "provider": "codex",
101
+ "profile": "codex-luna",
102
+ "requestedModel": "gpt-5.6-luna",
103
+ "requestedReasoningEffort": "low",
104
+ "inputTokens": 518512,
105
+ "cachedInputTokens": 478208,
106
+ "cacheWriteInputTokens": 0,
107
+ "outputTokens": 3741,
108
+ "reasoningOutputTokens": 343,
109
+ "durationMs": 158895
110
+ },
111
+ {
112
+ "role": "orchestrator",
113
+ "provider": "codex",
114
+ "requestedModel": "gpt-5.6-sol",
115
+ "requestedReasoningEffort": "low",
116
+ "inputTokens": 19161,
117
+ "cachedInputTokens": 11008,
118
+ "cacheWriteInputTokens": 0,
119
+ "outputTokens": 32,
120
+ "reasoningOutputTokens": 0,
121
+ "durationMs": 10792
122
+ },
123
+ {
124
+ "role": "worker",
125
+ "provider": "codex",
126
+ "profile": "codex-luna",
127
+ "requestedModel": "gpt-5.6-luna",
128
+ "requestedReasoningEffort": "low",
129
+ "inputTokens": 744104,
130
+ "cachedInputTokens": 690176,
131
+ "cacheWriteInputTokens": 0,
132
+ "outputTokens": 3134,
133
+ "reasoningOutputTokens": 318,
134
+ "durationMs": 162477
135
+ }
136
+ ],
137
+ "tokenBreakdown": {
138
+ "inputTokens": 1300941,
139
+ "cachedInputTokens": 1190400,
140
+ "freshInputTokens": 110541,
141
+ "cacheWriteInputTokens": 0,
142
+ "outputTokens": 6937,
143
+ "reasoningOutputTokens": 661
144
+ },
145
+ "stories": [
146
+ {
147
+ "id": "STUDY-1",
148
+ "durationMs": 174682,
149
+ "iterations": 1,
150
+ "finalTestsPass": true
151
+ },
152
+ {
153
+ "id": "STUDY-2",
154
+ "durationMs": 175072,
155
+ "iterations": 1,
156
+ "finalTestsPass": true
157
+ }
158
+ ],
159
+ "srcLoc": 5250,
160
+ "sourceFiles": 61,
161
+ "finalVerification": {
162
+ "buildExitCode": 0,
163
+ "testExitCode": 0,
164
+ "finalTestCount": 579,
165
+ "originalAcceptanceTestsExitCode": 0,
166
+ "originalAcceptanceTestCount": 6
167
+ }
168
+ }
@@ -0,0 +1,168 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "fixtureVersion": "yoke-codex-study@1",
4
+ "runner": "codex",
5
+ "sampleLabel": "codex-only-pair3-on",
6
+ "permissionProfile": "unsafe",
7
+ "yokeVersion": "1.1.1",
8
+ "fixture": "yoke-codex-study",
9
+ "routing": "on",
10
+ "startedAt": "2026-08-02T08:25:28.391Z",
11
+ "wallClockMs": 523110,
12
+ "exitCode": 0,
13
+ "finalState": "complete",
14
+ "verdict": "completed",
15
+ "blocker": null,
16
+ "conflicts": 0,
17
+ "iterations": 2,
18
+ "finalTestsPass": true,
19
+ "progress": {
20
+ "passed": 2,
21
+ "total": 2
22
+ },
23
+ "usageAvailable": true,
24
+ "modelAvailable": true,
25
+ "requestedParentModel": "gpt-5.6-sol",
26
+ "tokens": {
27
+ "inputTokens": 2162195,
28
+ "cachedInputTokens": 2034688,
29
+ "cacheWriteInputTokens": 0,
30
+ "outputTokens": 8080,
31
+ "reasoningOutputTokens": 1426,
32
+ "calls": [
33
+ {
34
+ "role": "orchestrator",
35
+ "provider": "codex",
36
+ "requestedModel": "gpt-5.6-sol",
37
+ "requestedReasoningEffort": "low",
38
+ "inputTokens": 19164,
39
+ "cachedInputTokens": 11008,
40
+ "cacheWriteInputTokens": 0,
41
+ "outputTokens": 32,
42
+ "reasoningOutputTokens": 0,
43
+ "durationMs": 16154
44
+ },
45
+ {
46
+ "role": "worker",
47
+ "provider": "codex",
48
+ "profile": "codex-luna",
49
+ "requestedModel": "gpt-5.6-luna",
50
+ "requestedReasoningEffort": "low",
51
+ "inputTokens": 480177,
52
+ "cachedInputTokens": 439552,
53
+ "cacheWriteInputTokens": 0,
54
+ "outputTokens": 3978,
55
+ "reasoningOutputTokens": 477,
56
+ "durationMs": 198278
57
+ },
58
+ {
59
+ "role": "orchestrator",
60
+ "provider": "codex",
61
+ "requestedModel": "gpt-5.6-sol",
62
+ "requestedReasoningEffort": "low",
63
+ "inputTokens": 18953,
64
+ "cachedInputTokens": 11008,
65
+ "cacheWriteInputTokens": 0,
66
+ "outputTokens": 31,
67
+ "reasoningOutputTokens": 0,
68
+ "durationMs": 15918
69
+ },
70
+ {
71
+ "role": "worker",
72
+ "provider": "codex",
73
+ "profile": "codex-luna",
74
+ "requestedModel": "gpt-5.6-luna",
75
+ "requestedReasoningEffort": "low",
76
+ "inputTokens": 1643901,
77
+ "cachedInputTokens": 1573120,
78
+ "cacheWriteInputTokens": 0,
79
+ "outputTokens": 4039,
80
+ "reasoningOutputTokens": 949,
81
+ "durationMs": 287697
82
+ }
83
+ ]
84
+ },
85
+ "modelCalls": [
86
+ {
87
+ "role": "orchestrator",
88
+ "provider": "codex",
89
+ "requestedModel": "gpt-5.6-sol",
90
+ "requestedReasoningEffort": "low",
91
+ "inputTokens": 19164,
92
+ "cachedInputTokens": 11008,
93
+ "cacheWriteInputTokens": 0,
94
+ "outputTokens": 32,
95
+ "reasoningOutputTokens": 0,
96
+ "durationMs": 16154
97
+ },
98
+ {
99
+ "role": "worker",
100
+ "provider": "codex",
101
+ "profile": "codex-luna",
102
+ "requestedModel": "gpt-5.6-luna",
103
+ "requestedReasoningEffort": "low",
104
+ "inputTokens": 480177,
105
+ "cachedInputTokens": 439552,
106
+ "cacheWriteInputTokens": 0,
107
+ "outputTokens": 3978,
108
+ "reasoningOutputTokens": 477,
109
+ "durationMs": 198278
110
+ },
111
+ {
112
+ "role": "orchestrator",
113
+ "provider": "codex",
114
+ "requestedModel": "gpt-5.6-sol",
115
+ "requestedReasoningEffort": "low",
116
+ "inputTokens": 18953,
117
+ "cachedInputTokens": 11008,
118
+ "cacheWriteInputTokens": 0,
119
+ "outputTokens": 31,
120
+ "reasoningOutputTokens": 0,
121
+ "durationMs": 15918
122
+ },
123
+ {
124
+ "role": "worker",
125
+ "provider": "codex",
126
+ "profile": "codex-luna",
127
+ "requestedModel": "gpt-5.6-luna",
128
+ "requestedReasoningEffort": "low",
129
+ "inputTokens": 1643901,
130
+ "cachedInputTokens": 1573120,
131
+ "cacheWriteInputTokens": 0,
132
+ "outputTokens": 4039,
133
+ "reasoningOutputTokens": 949,
134
+ "durationMs": 287697
135
+ }
136
+ ],
137
+ "tokenBreakdown": {
138
+ "inputTokens": 2162195,
139
+ "cachedInputTokens": 2034688,
140
+ "freshInputTokens": 127507,
141
+ "cacheWriteInputTokens": 0,
142
+ "outputTokens": 8080,
143
+ "reasoningOutputTokens": 1426
144
+ },
145
+ "stories": [
146
+ {
147
+ "id": "STUDY-1",
148
+ "durationMs": 215836,
149
+ "iterations": 1,
150
+ "finalTestsPass": true
151
+ },
152
+ {
153
+ "id": "STUDY-2",
154
+ "durationMs": 305358,
155
+ "iterations": 1,
156
+ "finalTestsPass": true
157
+ }
158
+ ],
159
+ "srcLoc": 5250,
160
+ "sourceFiles": 61,
161
+ "finalVerification": {
162
+ "buildExitCode": 0,
163
+ "testExitCode": 0,
164
+ "finalTestCount": 578,
165
+ "originalAcceptanceTestsExitCode": 0,
166
+ "originalAcceptanceTestCount": 6
167
+ }
168
+ }
@@ -0,0 +1,54 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "fixtureVersion": "yoke-large@1",
4
+ "runner": "codex",
5
+ "sampleLabel": "yoke-large-controlled-baseline",
6
+ "permissionProfile": "unsafe",
7
+ "yokeVersion": "1.1.1",
8
+ "fixture": "yoke-large",
9
+ "routing": "off",
10
+ "startedAt": "2026-08-01T22:58:03.670Z",
11
+ "wallClockMs": 660843,
12
+ "exitCode": 0,
13
+ "finalState": "complete",
14
+ "verdict": "completed",
15
+ "blocker": null,
16
+ "conflicts": 0,
17
+ "iterations": 2,
18
+ "finalTestsPass": true,
19
+ "progress": {
20
+ "passed": 2,
21
+ "total": 2
22
+ },
23
+ "usageAvailable": true,
24
+ "modelAvailable": true,
25
+ "requestedParentModel": "gpt-5.6-sol",
26
+ "tokens": {
27
+ "inputTokens": 1971273,
28
+ "outputTokens": 16850
29
+ },
30
+ "modelCalls": [],
31
+ "stories": [
32
+ {
33
+ "id": "LARGE-1",
34
+ "durationMs": 333022,
35
+ "iterations": 1,
36
+ "finalTestsPass": true
37
+ },
38
+ {
39
+ "id": "LARGE-2",
40
+ "durationMs": 327176,
41
+ "iterations": 1,
42
+ "finalTestsPass": true
43
+ }
44
+ ],
45
+ "srcLoc": 5325,
46
+ "sourceFiles": 61,
47
+ "finalVerification": {
48
+ "buildExitCode": 0,
49
+ "testExitCode": 0,
50
+ "finalTestCount": 578,
51
+ "originalAcceptanceTestsExitCode": 0,
52
+ "originalAcceptanceTestCount": 4
53
+ }
54
+ }
@@ -0,0 +1,133 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "fixtureVersion": "yoke-large@1",
4
+ "runner": "codex",
5
+ "sampleLabel": "yoke-large-controlled-routed",
6
+ "permissionProfile": "unsafe",
7
+ "yokeVersion": "1.1.1",
8
+ "fixture": "yoke-large",
9
+ "routing": "on",
10
+ "startedAt": "2026-08-01T23:09:41.394Z",
11
+ "wallClockMs": 640151,
12
+ "exitCode": 0,
13
+ "finalState": "complete",
14
+ "verdict": "completed",
15
+ "blocker": null,
16
+ "conflicts": 0,
17
+ "iterations": 2,
18
+ "finalTestsPass": true,
19
+ "progress": {
20
+ "passed": 2,
21
+ "total": 2
22
+ },
23
+ "usageAvailable": true,
24
+ "modelAvailable": true,
25
+ "requestedParentModel": "gpt-5.6-sol",
26
+ "tokens": {
27
+ "inputTokens": 2035962,
28
+ "outputTokens": 15483,
29
+ "calls": [
30
+ {
31
+ "role": "orchestrator",
32
+ "provider": "codex",
33
+ "requestedModel": "gpt-5.6-sol",
34
+ "requestedReasoningEffort": "high",
35
+ "inputTokens": 19085,
36
+ "outputTokens": 71,
37
+ "durationMs": 23794
38
+ },
39
+ {
40
+ "role": "parent",
41
+ "provider": "codex",
42
+ "profile": "SELF",
43
+ "requestedModel": "gpt-5.6-sol",
44
+ "requestedReasoningEffort": "high",
45
+ "inputTokens": 754095,
46
+ "outputTokens": 9178,
47
+ "durationMs": 286877
48
+ },
49
+ {
50
+ "role": "orchestrator",
51
+ "provider": "codex",
52
+ "requestedModel": "gpt-5.6-sol",
53
+ "requestedReasoningEffort": "high",
54
+ "inputTokens": 19271,
55
+ "outputTokens": 30,
56
+ "durationMs": 11587
57
+ },
58
+ {
59
+ "role": "parent",
60
+ "provider": "codex",
61
+ "profile": "SELF",
62
+ "requestedModel": "gpt-5.6-sol",
63
+ "requestedReasoningEffort": "high",
64
+ "inputTokens": 1243511,
65
+ "outputTokens": 6204,
66
+ "durationMs": 276210
67
+ }
68
+ ]
69
+ },
70
+ "modelCalls": [
71
+ {
72
+ "role": "orchestrator",
73
+ "provider": "codex",
74
+ "requestedModel": "gpt-5.6-sol",
75
+ "requestedReasoningEffort": "high",
76
+ "inputTokens": 19085,
77
+ "outputTokens": 71,
78
+ "durationMs": 23794
79
+ },
80
+ {
81
+ "role": "parent",
82
+ "provider": "codex",
83
+ "profile": "SELF",
84
+ "requestedModel": "gpt-5.6-sol",
85
+ "requestedReasoningEffort": "high",
86
+ "inputTokens": 754095,
87
+ "outputTokens": 9178,
88
+ "durationMs": 286877
89
+ },
90
+ {
91
+ "role": "orchestrator",
92
+ "provider": "codex",
93
+ "requestedModel": "gpt-5.6-sol",
94
+ "requestedReasoningEffort": "high",
95
+ "inputTokens": 19271,
96
+ "outputTokens": 30,
97
+ "durationMs": 11587
98
+ },
99
+ {
100
+ "role": "parent",
101
+ "provider": "codex",
102
+ "profile": "SELF",
103
+ "requestedModel": "gpt-5.6-sol",
104
+ "requestedReasoningEffort": "high",
105
+ "inputTokens": 1243511,
106
+ "outputTokens": 6204,
107
+ "durationMs": 276210
108
+ }
109
+ ],
110
+ "stories": [
111
+ {
112
+ "id": "LARGE-1",
113
+ "durationMs": 322735,
114
+ "iterations": 1,
115
+ "finalTestsPass": true
116
+ },
117
+ {
118
+ "id": "LARGE-2",
119
+ "durationMs": 303662,
120
+ "iterations": 1,
121
+ "finalTestsPass": true
122
+ }
123
+ ],
124
+ "srcLoc": 5290,
125
+ "sourceFiles": 61,
126
+ "finalVerification": {
127
+ "buildExitCode": 0,
128
+ "testExitCode": 0,
129
+ "finalTestCount": 579,
130
+ "originalAcceptanceTestsExitCode": 0,
131
+ "originalAcceptanceTestCount": 4
132
+ }
133
+ }