llm-orchestrator 1.0.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 (70) hide show
  1. package/.claude-plugin/marketplace.json +14 -0
  2. package/.claude-plugin/plugin.json +19 -0
  3. package/COMPATIBILITY.md +27 -0
  4. package/IMPLEMENTATION.md +26 -0
  5. package/LICENSE +31 -0
  6. package/NOTICE +17 -0
  7. package/README.md +291 -0
  8. package/SKILL.md +125 -0
  9. package/adapters/agents.mjs +46 -0
  10. package/adapters/claude/index.mjs +9 -0
  11. package/adapters/codex/index.mjs +15 -0
  12. package/adapters/commands.mjs +117 -0
  13. package/adapters/kilo/index.mjs +5 -0
  14. package/adapters/opencode/index.mjs +5 -0
  15. package/bin/attribution-check.mjs +136 -0
  16. package/bin/cli-options.mjs +90 -0
  17. package/bin/discover-models.mjs +271 -0
  18. package/bin/doctor.mjs +191 -0
  19. package/bin/install.mjs +48 -0
  20. package/bin/llm-orchestrator.mjs +103 -0
  21. package/bin/model-thinking-report.mjs +165 -0
  22. package/bin/render.mjs +22 -0
  23. package/bin/route.mjs +139 -0
  24. package/bin/uninstall.mjs +15 -0
  25. package/lib/adapter-renderer.mjs +114 -0
  26. package/lib/capability-resolver.mjs +343 -0
  27. package/lib/dispatch-contract.mjs +583 -0
  28. package/lib/first-run.mjs +299 -0
  29. package/lib/harness.mjs +6 -0
  30. package/lib/installation.mjs +550 -0
  31. package/lib/project-discovery.mjs +434 -0
  32. package/lib/router.mjs +660 -0
  33. package/lib/tool-discovery.mjs +162 -0
  34. package/models/example-model-inventory.json +82 -0
  35. package/models/model-thinking-data.json +580 -0
  36. package/models/model-thinking-matrix.md +157 -0
  37. package/models/top-models.json +1299 -0
  38. package/package.json +65 -0
  39. package/policies/capabilities.md +144 -0
  40. package/policies/cleanup.md +51 -0
  41. package/policies/dispatch.md +284 -0
  42. package/policies/execution.md +116 -0
  43. package/policies/questions.md +75 -0
  44. package/policies/routing.md +677 -0
  45. package/policies/state.md +85 -0
  46. package/policies/verification.md +72 -0
  47. package/protocol.md +162 -0
  48. package/registries/agent-roles.json +1 -0
  49. package/registries/capabilities.json +58 -0
  50. package/registries/core-profile.json +183 -0
  51. package/registries/preferred-tools.json +595 -0
  52. package/registries/routing-matrix.json +394 -0
  53. package/registries/task-mappings.json +259 -0
  54. package/schemas/agent-roles.schema.json +1 -0
  55. package/schemas/capability-contract.schema.json +209 -0
  56. package/schemas/installation-manifest.schema.json +57 -0
  57. package/schemas/project-profile.schema.json +70 -0
  58. package/schemas/routing-matrix.schema.json +237 -0
  59. package/schemas/tool-inventory.schema.json +127 -0
  60. package/schemas/top-models.schema.json +235 -0
  61. package/skills/orchestrate-core/SKILL.md +18 -0
  62. package/workflows/bug-fix.md +59 -0
  63. package/workflows/config.md +57 -0
  64. package/workflows/deploy.md +57 -0
  65. package/workflows/feature.md +61 -0
  66. package/workflows/incident.md +61 -0
  67. package/workflows/investigation.md +62 -0
  68. package/workflows/refactor.md +53 -0
  69. package/workflows/research.md +61 -0
  70. package/workflows/review.md +58 -0
@@ -0,0 +1,70 @@
1
+ {
2
+ "_attribution": "llm-orchestrator · created by Bogdan-Gabriel Torcescu · https://www.linkedin.com/in/bogdantorcescu/ · keep this credit when copying or deriving",
3
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
4
+ "$id": "https://portable-orchestrator.dev/schemas/project-profile.schema.json",
5
+ "title": "ProjectProfile",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": ["schema_version", "observed_at", "root", "facts", "languages", "frameworks", "domains", "commands", "fingerprint", "coverage", "limitations"],
9
+ "properties": {
10
+ "_attribution": { "type": "string" },
11
+ "schema_version": { "const": "1.0" },
12
+ "observed_at": { "type": "string", "format": "date-time" },
13
+ "root": { "type": "string" },
14
+ "facts": {
15
+ "type": "array",
16
+ "items": {
17
+ "type": "object",
18
+ "additionalProperties": false,
19
+ "required": ["kind", "value", "evidence", "confidence"],
20
+ "properties": {
21
+ "kind": { "type": "string" },
22
+ "value": { "type": "string" },
23
+ "evidence": { "type": "array", "minItems": 1, "items": { "type": "string" } },
24
+ "confidence": { "enum": ["high", "medium", "low"] }
25
+ }
26
+ }
27
+ },
28
+ "languages": { "type": "array", "items": { "type": "string" } },
29
+ "frameworks": { "type": "array", "items": { "type": "string" } },
30
+ "domains": { "type": "array", "items": { "type": "string" } },
31
+ "commands": {
32
+ "type": "array",
33
+ "items": {
34
+ "type": "object",
35
+ "additionalProperties": false,
36
+ "required": ["command", "cwd", "package_manager", "evidence", "confidence"],
37
+ "properties": {
38
+ "command": { "type": "string" },
39
+ "cwd": { "type": "string" },
40
+ "package_manager": { "type": "string" },
41
+ "evidence": { "type": "array", "minItems": 1, "items": { "type": "string" } },
42
+ "confidence": { "enum": ["high", "medium", "low"] }
43
+ }
44
+ }
45
+ },
46
+ "fingerprint": { "type": "string", "pattern": "^[a-f0-9]{16}$" }
47
+ ,"bindings": {
48
+ "type": "object",
49
+ "additionalProperties": false,
50
+ "properties": {
51
+ "mandatory_commands": { "type": "array", "items": { "type": "string" } },
52
+ "live_mcps": { "type": "array", "items": { "type": "string" } },
53
+ "agent_overrides": { "type": "object", "additionalProperties": { "type": "string" } },
54
+ "domain_rules": { "type": "array", "items": { "type": "string" } }
55
+ }
56
+ }
57
+ ,"coverage": {
58
+ "type": "object",
59
+ "additionalProperties": false,
60
+ "required": ["max_files", "max_directory_entries", "listed_files", "truncated"],
61
+ "properties": {
62
+ "max_files": { "type": "integer", "minimum": 1 },
63
+ "max_directory_entries": { "type": "integer", "minimum": 1 },
64
+ "listed_files": { "type": "integer", "minimum": 0 },
65
+ "truncated": { "type": "boolean" }
66
+ }
67
+ },
68
+ "limitations": { "type": "array", "items": { "type": "string" } }
69
+ }
70
+ }
@@ -0,0 +1,237 @@
1
+ {
2
+ "_attribution": "llm-orchestrator · created by Bogdan-Gabriel Torcescu · https://www.linkedin.com/in/bogdantorcescu/ · keep this credit when copying or deriving",
3
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
4
+ "$id": "https://portable-orchestrator.dev/schemas/routing-matrix.schema.json",
5
+ "title": "Cost-aware routing matrix",
6
+ "description": "Machine-readable encoding of policies/routing.md: tiers, thinking levels, tier × thinking resolution, default routing, task flows, risk floors, agent defaults, escalation ladders, fan-out, caps and quota degradation.",
7
+ "type": "object",
8
+ "required": [
9
+ "_attribution",
10
+ "schema_version",
11
+ "tiers",
12
+ "tier_order",
13
+ "thinking_levels",
14
+ "thinking_level_order",
15
+ "resolution",
16
+ "pair_normalization",
17
+ "default_routing",
18
+ "task_flows",
19
+ "risk_floors",
20
+ "risk_to_review_floor",
21
+ "agent_defaults",
22
+ "escalation_ladder",
23
+ "fan_out_minimum",
24
+ "parallel_bounds",
25
+ "target_distribution",
26
+ "caps",
27
+ "quota_degradation_ladder",
28
+ "never_give_up",
29
+ "context_rules"
30
+ ],
31
+ "properties": {
32
+ "_attribution": { "type": "string" },
33
+ "schema_version": { "type": "integer", "minimum": 1 },
34
+ "observed_at": { "type": "string" },
35
+ "source_of_truth": { "type": "string" },
36
+ "note": { "type": "string" },
37
+ "tiers": {
38
+ "type": "object",
39
+ "patternProperties": {
40
+ "^[WSXF]$": {
41
+ "type": "object",
42
+ "required": ["name", "responsibility", "incumbents"],
43
+ "properties": {
44
+ "name": { "type": "string" },
45
+ "responsibility": { "type": "string" },
46
+ "incumbents": {
47
+ "type": "object",
48
+ "required": ["claude", "codex"],
49
+ "properties": {
50
+ "claude": { "type": "string" },
51
+ "codex": { "type": "string" }
52
+ }
53
+ },
54
+ "capped_exception": { "type": "object" }
55
+ },
56
+ "additionalProperties": false
57
+ }
58
+ }
59
+ },
60
+ "tier_order": { "type": "array", "items": { "enum": ["W", "S", "X", "F"] }, "minItems": 4 },
61
+ "thinking_levels": {
62
+ "type": "object",
63
+ "patternProperties": {
64
+ "^T[0-5]$": {
65
+ "type": "object",
66
+ "required": ["use", "claude_effort", "codex_reasoning_effort", "haiku_budget"],
67
+ "properties": {
68
+ "use": { "type": "string" },
69
+ "claude_effort": { "type": ["string", "null"] },
70
+ "codex_reasoning_effort": { "type": ["string", "null"] },
71
+ "codex_note": { "type": "string" },
72
+ "haiku_budget": { "type": "string" }
73
+ },
74
+ "additionalProperties": false
75
+ }
76
+ }
77
+ },
78
+ "thinking_level_order": { "type": "array", "items": { "type": "string" }, "minItems": 6 },
79
+ "haiku_budget_rule": { "type": "string" },
80
+ "resolution": {
81
+ "type": "object",
82
+ "patternProperties": {
83
+ "^[WSXF] T[0-5](-T[0-5])?$": {
84
+ "type": "object",
85
+ "required": ["claude", "codex"],
86
+ "properties": {
87
+ "claude": { "type": ["object", "null"] },
88
+ "claude_note": { "type": "string" },
89
+ "codex": { "type": ["object", "null"] },
90
+ "codex_note": { "type": "string" }
91
+ },
92
+ "additionalProperties": false
93
+ }
94
+ }
95
+ },
96
+ "pair_normalization": { "type": "object", "patternProperties": { "^[WSXF] T[0-5]$": { "type": "string" } } },
97
+ "default_routing": { "type": "object", "patternProperties": { "^[a-z_]+$": { "type": "string" } } },
98
+ "task_flows": {
99
+ "type": "object",
100
+ "patternProperties": {
101
+ "^[A-Z_]+$": {
102
+ "type": "object",
103
+ "required": ["phases"],
104
+ "properties": {
105
+ "phases": {
106
+ "type": "array",
107
+ "minItems": 1,
108
+ "items": {
109
+ "type": "object",
110
+ "required": ["phase", "pair", "roles", "gate", "parallelizable"],
111
+ "properties": {
112
+ "phase": { "type": "string" },
113
+ "pair": { "type": "string" },
114
+ "roles": { "type": "array", "items": { "type": "string" } },
115
+ "gate": { "type": ["string", "null"] },
116
+ "parallelizable": { "type": "boolean" },
117
+ "escalation": { "type": "string" }
118
+ },
119
+ "additionalProperties": false
120
+ }
121
+ }
122
+ },
123
+ "additionalProperties": false
124
+ }
125
+ }
126
+ },
127
+ "risk_floors": {
128
+ "type": "object",
129
+ "patternProperties": {
130
+ "^[a-z0-9-]+$": {
131
+ "type": "object",
132
+ "required": ["implementation", "review", "independent_review"],
133
+ "properties": {
134
+ "implementation": { "type": "string" },
135
+ "review": { "type": ["string", "null"] },
136
+ "independent_review": { "type": "boolean" }
137
+ },
138
+ "additionalProperties": false
139
+ }
140
+ }
141
+ },
142
+ "risk_to_review_floor": {
143
+ "type": "object",
144
+ "required": ["low", "medium", "high", "critical"],
145
+ "properties": {
146
+ "low": { "type": "string" },
147
+ "medium": { "type": "string" },
148
+ "high": { "type": "string" },
149
+ "critical": { "type": "string" }
150
+ },
151
+ "additionalProperties": false
152
+ },
153
+ "risk_floor_rule": { "type": "string" },
154
+ "agent_defaults": { "type": "object", "patternProperties": { "^[a-z0-9-]+$": { "type": "string" } } },
155
+ "agent_default_notes": { "type": "object" },
156
+ "escalation_ladder": {
157
+ "type": "object",
158
+ "required": ["claude", "codex"],
159
+ "properties": {
160
+ "claude": { "type": "array", "minItems": 2, "items": { "type": "object", "required": ["model", "effort"] } },
161
+ "codex": { "type": "array", "minItems": 2, "items": { "type": "object", "required": ["model", "effort"] } }
162
+ },
163
+ "additionalProperties": false
164
+ },
165
+ "escalation_rules": { "type": "array", "items": { "type": "string" } },
166
+ "fan_out_minimum": {
167
+ "type": "object",
168
+ "required": ["SIMPLE", "MODERATE", "COMPLEX", "CRITICAL"],
169
+ "properties": {
170
+ "SIMPLE": { "type": "integer", "minimum": 1 },
171
+ "MODERATE": { "type": "integer", "minimum": 1 },
172
+ "COMPLEX": { "type": "integer", "minimum": 1 },
173
+ "CRITICAL": { "type": "integer", "minimum": 1 }
174
+ },
175
+ "additionalProperties": false
176
+ },
177
+ "parallel_bounds": {
178
+ "type": "object",
179
+ "required": ["min", "max", "max_active_shards"],
180
+ "properties": {
181
+ "min": { "type": "integer", "minimum": 1 },
182
+ "max": { "type": "integer", "minimum": 1 },
183
+ "max_active_shards": { "type": "integer", "minimum": 1 }
184
+ },
185
+ "additionalProperties": false
186
+ },
187
+ "target_distribution": {
188
+ "type": "object",
189
+ "required": ["W", "S", "X", "F"],
190
+ "patternProperties": {
191
+ "^[WSXF]$": { "type": "array", "minItems": 2, "items": { "type": "number", "minimum": 0 } }
192
+ },
193
+ "additionalProperties": false
194
+ },
195
+ "cost_discipline": { "type": "object" },
196
+ "caps": {
197
+ "type": "object",
198
+ "required": ["fable_5_1_share_max", "terra_max_effort", "sol_max_effort", "codex_long_context_cliff_tokens", "haiku_context_cap"],
199
+ "properties": {
200
+ "fable_5_1_share_max": { "type": "number", "minimum": 0, "maximum": 1 },
201
+ "terra_max_effort": { "type": "string" },
202
+ "sol_max_effort": { "type": "string" },
203
+ "codex_long_context_cliff_tokens": { "type": "integer", "minimum": 1 },
204
+ "haiku_context_cap": { "type": "integer", "minimum": 1 }
205
+ },
206
+ "additionalProperties": false
207
+ },
208
+ "quota_degradation_ladder": {
209
+ "type": "array",
210
+ "minItems": 1,
211
+ "items": {
212
+ "type": "object",
213
+ "required": ["order", "give_up", "why"],
214
+ "properties": {
215
+ "order": { "type": "integer", "minimum": 1 },
216
+ "give_up": { "type": "string" },
217
+ "why": { "type": "string" }
218
+ },
219
+ "additionalProperties": false
220
+ }
221
+ },
222
+ "never_give_up": { "type": "array", "minItems": 1, "items": { "type": "string" } },
223
+ "context_rules": {
224
+ "type": "object",
225
+ "required": ["worker_context_cap_tokens", "worker_shard_soft_cap_tokens", "long_context_cliff_tokens", "rules"],
226
+ "properties": {
227
+ "worker_context_cap_tokens": { "type": "integer", "minimum": 1 },
228
+ "worker_shard_soft_cap_tokens": { "type": "integer", "minimum": 1 },
229
+ "long_context_cliff_tokens": { "type": "integer", "minimum": 1 },
230
+ "rules": { "type": "array", "items": { "type": "string" } }
231
+ },
232
+ "additionalProperties": false
233
+ },
234
+ "dispatch_metadata_fields": { "type": "array", "items": { "type": "string" } }
235
+ },
236
+ "additionalProperties": false
237
+ }
@@ -0,0 +1,127 @@
1
+ {
2
+ "_attribution": "llm-orchestrator · created by Bogdan-Gabriel Torcescu · https://www.linkedin.com/in/bogdantorcescu/ · keep this credit when copying or deriving",
3
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
4
+ "$id": "https://portable-orchestrator.dev/schemas/tool-inventory.schema.json",
5
+ "title": "ToolInventory",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": [
9
+ "schema_version",
10
+ "observed_at",
11
+ "harness",
12
+ "entries",
13
+ "revision"
14
+ ],
15
+ "properties": {
16
+ "_attribution": { "type": "string" },
17
+ "schema_version": {
18
+ "const": "1.0"
19
+ },
20
+ "observed_at": {
21
+ "type": "string",
22
+ "format": "date-time"
23
+ },
24
+ "harness": {
25
+ "enum": [
26
+ "codex",
27
+ "claude",
28
+ "opencode",
29
+ "kilo"
30
+ ]
31
+ },
32
+ "revision": {
33
+ "type": "string",
34
+ "pattern": "^[a-f0-9]{16}$"
35
+ },
36
+ "entries": {
37
+ "type": "array",
38
+ "items": {
39
+ "type": "object",
40
+ "required": [
41
+ "id",
42
+ "kind",
43
+ "capabilities",
44
+ "scope",
45
+ "source",
46
+ "status",
47
+ "permission",
48
+ "evidence",
49
+ "limitations"
50
+ ],
51
+ "properties": {
52
+ "id": {
53
+ "type": "string"
54
+ },
55
+ "aliases": {
56
+ "type": "array",
57
+ "items": {
58
+ "type": "string"
59
+ }
60
+ },
61
+ "kind": {
62
+ "enum": [
63
+ "skill",
64
+ "workflow",
65
+ "mcp",
66
+ "native_tool",
67
+ "cli",
68
+ "agent_role"
69
+ ]
70
+ },
71
+ "capabilities": {
72
+ "type": "array",
73
+ "items": {
74
+ "type": "string"
75
+ }
76
+ },
77
+ "scope": {
78
+ "type": "string"
79
+ },
80
+ "source": {
81
+ "type": "string"
82
+ },
83
+ "status": {
84
+ "enum": [
85
+ "installed",
86
+ "loaded",
87
+ "callable",
88
+ "denied",
89
+ "unknown"
90
+ ]
91
+ },
92
+ "permission": {
93
+ "enum": [
94
+ "read_only",
95
+ "read_write",
96
+ "denied",
97
+ "unknown"
98
+ ]
99
+ },
100
+ "evidence": {
101
+ "type": "array",
102
+ "items": {
103
+ "type": "string"
104
+ }
105
+ },
106
+ "limitations": {
107
+ "type": "array",
108
+ "items": {
109
+ "type": "string"
110
+ }
111
+ },
112
+ "operation_denied": {
113
+ "type": "boolean"
114
+ },
115
+ "denied_capabilities": {
116
+ "type": "array",
117
+ "items": {
118
+ "type": "string"
119
+ },
120
+ "uniqueItems": true
121
+ }
122
+ },
123
+ "additionalProperties": false
124
+ }
125
+ }
126
+ }
127
+ }
@@ -0,0 +1,235 @@
1
+ {
2
+ "_attribution": "llm-orchestrator · created by Bogdan-Gabriel Torcescu · https://www.linkedin.com/in/bogdantorcescu/ · keep this credit when copying or deriving",
3
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
4
+ "$id": "https://portable-orchestrator.dev/schemas/top-models.schema.json",
5
+ "title": "Curated model shortlist for agentic coding",
6
+ "description": "Twenty routable models — ten ladder incumbents plus ten measured candidates — and the unpromoted alternatives behind them. Every unsourced field is null by construction: nothing here is interpolated, estimated or inferred from a display name.",
7
+ "type": "object",
8
+ "required": ["_attribution", "schema_version", "observed_at", "measurement_source", "tier_bands", "models", "candidates"],
9
+ "properties": {
10
+ "_attribution": { "type": "string" },
11
+ "schema_version": { "type": "integer", "minimum": 1 },
12
+ "observed_at": { "type": "string" },
13
+ "purpose": { "type": "string" },
14
+ "measurement_source": {
15
+ "type": "object",
16
+ "required": ["dataset", "benchmark", "version", "note"],
17
+ "properties": {
18
+ "dataset": { "type": "string" },
19
+ "benchmark": { "type": "string" },
20
+ "version": { "type": "string" },
21
+ "leaderboard_url": { "type": "string" },
22
+ "note": { "type": "string" }
23
+ },
24
+ "additionalProperties": false
25
+ },
26
+ "harness_id_note": { "type": "string" },
27
+ "tier_note": { "type": "string" },
28
+ "admission_note": { "type": "string" },
29
+ "ladder_note": { "type": "string" },
30
+ "indices_note": { "type": "string" },
31
+ "tier_bands": {
32
+ "type": "object",
33
+ "required": ["basis", "applies_to", "bands", "note"],
34
+ "properties": {
35
+ "basis": { "type": "string" },
36
+ "applies_to": { "enum": ["candidate", "all"] },
37
+ "bands": {
38
+ "type": "object",
39
+ "required": ["W", "S", "X", "F"],
40
+ "properties": {
41
+ "W": { "type": "object", "required": ["min", "max"], "properties": { "min": { "type": ["number", "null"] }, "max": { "type": ["number", "null"] } }, "additionalProperties": false },
42
+ "S": { "type": "object", "required": ["min", "max"], "properties": { "min": { "type": ["number", "null"] }, "max": { "type": ["number", "null"] } }, "additionalProperties": false },
43
+ "X": { "type": "object", "required": ["min", "max"], "properties": { "min": { "type": ["number", "null"] }, "max": { "type": ["number", "null"] } }, "additionalProperties": false },
44
+ "F": { "type": "object", "required": ["min", "max"], "properties": { "min": { "type": ["number", "null"] }, "max": { "type": ["number", "null"] } }, "additionalProperties": false }
45
+ },
46
+ "additionalProperties": false
47
+ },
48
+ "note": { "type": "string" }
49
+ },
50
+ "additionalProperties": false
51
+ },
52
+ "models": {
53
+ "type": "array",
54
+ "minItems": 20,
55
+ "items": {
56
+ "type": "object",
57
+ "required": [
58
+ "key",
59
+ "display_name",
60
+ "provider",
61
+ "ladder",
62
+ "admission",
63
+ "tier",
64
+ "eligible_tiers",
65
+ "api_ids",
66
+ "context_window",
67
+ "max_output_tokens",
68
+ "thinking",
69
+ "price",
70
+ "long_context_surcharge",
71
+ "measured",
72
+ "indices",
73
+ "caps",
74
+ "notes",
75
+ "sources",
76
+ "observed_at"
77
+ ],
78
+ "properties": {
79
+ "key": { "type": "string" },
80
+ "display_name": { "type": "string" },
81
+ "provider": { "type": "string" },
82
+ "ladder": { "type": ["string", "null"], "enum": ["codex", "claude", "open", "third-party", null] },
83
+ "admission": { "enum": ["incumbent", "candidate"] },
84
+ "tier": { "type": ["string", "null"] },
85
+ "eligible_tiers": { "type": "array", "items": { "enum": ["W", "S", "X", "F"] } },
86
+ "api_ids": {
87
+ "type": "object",
88
+ "required": ["codex", "claude", "opencode", "kilo"],
89
+ "properties": {
90
+ "codex": { "type": ["string", "null"] },
91
+ "claude": { "type": ["string", "null"] },
92
+ "opencode": { "type": ["string", "null"] },
93
+ "kilo": { "type": ["string", "null"] }
94
+ },
95
+ "additionalProperties": false
96
+ },
97
+ "canonical_api_id": { "type": ["string", "null"] },
98
+ "context_window": { "type": ["integer", "null"], "minimum": 1 },
99
+ "max_output_tokens": { "type": ["integer", "null"], "minimum": 1 },
100
+ "thinking": {
101
+ "type": "object",
102
+ "required": ["control", "levels", "always_on"],
103
+ "properties": {
104
+ "control": { "enum": ["reasoning_effort", "effort", "budget_tokens", "provider-default"] },
105
+ "levels": { "type": "array", "minItems": 1, "items": { "type": "string" } },
106
+ "always_on": { "type": ["boolean", "null"] },
107
+ "default_for_tier": { "type": ["string", "null"] },
108
+ "note": { "type": "string" }
109
+ },
110
+ "additionalProperties": false
111
+ },
112
+ "price": {
113
+ "type": "object",
114
+ "required": ["input_usd_per_mtok", "output_usd_per_mtok"],
115
+ "properties": {
116
+ "input_usd_per_mtok": { "type": ["number", "null"], "minimum": 0 },
117
+ "output_usd_per_mtok": { "type": ["number", "null"], "minimum": 0 },
118
+ "cache_read_usd_per_mtok": { "type": ["number", "null"], "minimum": 0 },
119
+ "cache_write_multiplier": { "type": ["number", "null"], "minimum": 0 },
120
+ "fast_mode_note": { "type": "string" }
121
+ },
122
+ "additionalProperties": false
123
+ },
124
+ "long_context_surcharge": {
125
+ "type": ["object", "null"],
126
+ "required": ["threshold_input_tokens", "input_multiplier", "output_multiplier"],
127
+ "properties": {
128
+ "threshold_input_tokens": { "type": "integer", "minimum": 1 },
129
+ "input_multiplier": { "type": "number", "minimum": 1 },
130
+ "output_multiplier": { "type": "number", "minimum": 1 },
131
+ "effective_input_usd_per_mtok": { "type": "number", "minimum": 0 },
132
+ "effective_output_usd_per_mtok": { "type": "number", "minimum": 0 },
133
+ "note": { "type": "string" }
134
+ },
135
+ "additionalProperties": false
136
+ },
137
+ "measured": {
138
+ "type": "object",
139
+ "patternProperties": {
140
+ "^[a-z]+$": {
141
+ "type": "object",
142
+ "required": ["score", "usd_per_task"],
143
+ "properties": {
144
+ "score": { "type": ["number", "null"] },
145
+ "usd_per_task": { "type": ["number", "null"], "minimum": 0 }
146
+ },
147
+ "additionalProperties": false
148
+ }
149
+ }
150
+ },
151
+ "measurement_note": { "type": "string" },
152
+ "indices": {
153
+ "type": "object",
154
+ "required": ["thinking_cost_index", "marginal_thinking"],
155
+ "properties": {
156
+ "thinking_cost_index": {
157
+ "type": "object",
158
+ "patternProperties": { "^[a-z]+$": { "type": ["number", "null"], "minimum": 0 } },
159
+ "additionalProperties": false
160
+ },
161
+ "marginal_thinking": {
162
+ "type": "object",
163
+ "patternProperties": {
164
+ "^[a-z]+->[a-z]+$": {
165
+ "type": "object",
166
+ "required": ["delta_score", "cost_multiplier"],
167
+ "properties": {
168
+ "delta_score": { "type": "number" },
169
+ "cost_multiplier": { "type": "number", "minimum": 0 }
170
+ },
171
+ "additionalProperties": false
172
+ }
173
+ },
174
+ "additionalProperties": false
175
+ }
176
+ },
177
+ "additionalProperties": false
178
+ },
179
+ "caps": {
180
+ "type": "object",
181
+ "required": ["max_effort", "share_max"],
182
+ "properties": {
183
+ "max_effort": { "type": "string" },
184
+ "share_max": { "type": ["number", "null"], "minimum": 0, "maximum": 1 },
185
+ "requires_explicit_flag": { "type": "boolean" },
186
+ "context_cap_tokens": { "type": "integer", "minimum": 1 },
187
+ "t4_substitution": {
188
+ "type": "object",
189
+ "required": ["effort", "requires_independent_second_reviewer"],
190
+ "properties": {
191
+ "effort": { "type": "string" },
192
+ "requires_independent_second_reviewer": { "type": "boolean" }
193
+ },
194
+ "additionalProperties": false
195
+ }
196
+ },
197
+ "additionalProperties": false
198
+ },
199
+ "notes": { "type": "array", "items": { "type": "string" } },
200
+ "sources": { "type": "array", "minItems": 1, "items": { "type": "string" } },
201
+ "observed_at": { "type": "string" }
202
+ },
203
+ "additionalProperties": false
204
+ }
205
+ },
206
+ "candidates": {
207
+ "type": "array",
208
+ "items": {
209
+ "type": "object",
210
+ "required": ["key", "display_name", "provider", "canonical_api_id", "price", "measured", "note", "source"],
211
+ "properties": {
212
+ "key": { "type": "string" },
213
+ "display_name": { "type": "string" },
214
+ "provider": { "type": "string" },
215
+ "canonical_api_id": { "type": ["string", "null"] },
216
+ "price": {
217
+ "type": "object",
218
+ "required": ["input_usd_per_mtok", "output_usd_per_mtok"],
219
+ "properties": {
220
+ "input_usd_per_mtok": { "type": ["number", "null"], "minimum": 0 },
221
+ "output_usd_per_mtok": { "type": ["number", "null"], "minimum": 0 }
222
+ },
223
+ "additionalProperties": false
224
+ },
225
+ "measured": { "type": "object" },
226
+ "note": { "type": "string" },
227
+ "source": { "type": "string" }
228
+ },
229
+ "additionalProperties": false
230
+ }
231
+ },
232
+ "limitations": { "type": "array", "items": { "type": "string" } }
233
+ },
234
+ "additionalProperties": false
235
+ }