@open-agent-toolkit/cli 0.3.9 → 0.3.10
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/assets/bundle-metadata.json +1 -1
- package/assets/config/dispatch-matrix-recommendation.json +6 -6
- package/assets/docs/cli-utilities/configuration.md +12 -8
- package/assets/docs/cli-utilities/workflow-gates.md +1 -1
- package/assets/docs/contributing/updating-model-guidance.md +34 -6
- package/assets/docs/contributing/verifying-cursor-pins.md +38 -9
- package/assets/docs/provider-sync/providers.md +4 -4
- package/assets/docs/workflows/projects/dispatch-ceiling.md +21 -14
- package/assets/docs/workflows/projects/implementation-execution.md +4 -1
- package/assets/public-package-versions.json +4 -4
- package/assets/skills/oat-dispatch-subagents/SKILL.md +1 -1
- package/assets/skills/oat-dispatch-subagents/references/provider-cursor.md +5 -2
- package/assets/skills/oat-project-implement/SKILL.md +1 -1
- package/assets/skills/oat-project-implement/references/dispatch-and-dry-run.md +1 -1
- package/assets/skills/oat-project-plan-writing/SKILL.md +3 -3
- package/assets/skills/subagent-orchestration/SKILL.md +1 -1
- package/assets/skills/subagent-orchestration/references/evidence-and-refresh.md +20 -8
- package/assets/skills/subagent-orchestration/references/provider-claude.md +25 -12
- package/assets/skills/subagent-orchestration/references/provider-codex.md +27 -18
- package/assets/skills/subagent-orchestration/references/provider-cursor.md +40 -10
- package/dist/providers/claude/dispatch-envelope.d.ts.map +1 -1
- package/dist/providers/claude/dispatch-envelope.js +1 -0
- package/dist/providers/claude/targets.d.ts +1 -0
- package/dist/providers/claude/targets.d.ts.map +1 -1
- package/dist/providers/claude/targets.js +3 -1
- package/dist/providers/codex/codec/shared.d.ts +3 -0
- package/dist/providers/codex/codec/shared.d.ts.map +1 -1
- package/dist/providers/codex/codec/shared.js +4 -0
- package/dist/providers/cursor/codec/catalog.d.ts +2 -2
- package/dist/providers/cursor/codec/catalog.d.ts.map +1 -1
- package/dist/providers/cursor/codec/catalog.js +45 -0
- package/dist/providers/cursor/codec/mapping-validation.d.ts +4 -0
- package/dist/providers/cursor/codec/mapping-validation.d.ts.map +1 -0
- package/dist/providers/cursor/codec/mapping-validation.js +25 -0
- package/dist/providers/cursor/codec/materialize.d.ts.map +1 -1
- package/dist/providers/cursor/codec/materialize.js +2 -11
- package/dist/providers/cursor/codec/sync-extension.d.ts.map +1 -1
- package/dist/providers/cursor/codec/sync-extension.js +2 -11
- package/package.json +2 -2
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "2026-
|
|
2
|
+
"version": "2026-10-01.1",
|
|
3
3
|
"providers": {
|
|
4
4
|
"codex": {
|
|
5
5
|
"economy": {
|
|
@@ -39,17 +39,17 @@
|
|
|
39
39
|
"candidates": [
|
|
40
40
|
{
|
|
41
41
|
"harness": "codex",
|
|
42
|
-
"model": "gpt-6-sol",
|
|
42
|
+
"model": "gpt-6.1-sol",
|
|
43
43
|
"effort": "low"
|
|
44
44
|
},
|
|
45
45
|
{
|
|
46
46
|
"harness": "codex",
|
|
47
|
-
"model": "gpt-6-sol",
|
|
47
|
+
"model": "gpt-6.1-sol",
|
|
48
48
|
"effort": "medium"
|
|
49
49
|
},
|
|
50
50
|
{
|
|
51
51
|
"harness": "codex",
|
|
52
|
-
"model": "gpt-6-sol",
|
|
52
|
+
"model": "gpt-6.1-sol",
|
|
53
53
|
"effort": "high"
|
|
54
54
|
}
|
|
55
55
|
]
|
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
"candidates": [
|
|
59
59
|
{
|
|
60
60
|
"harness": "codex",
|
|
61
|
-
"model": "gpt-6-sol",
|
|
61
|
+
"model": "gpt-6.1-sol",
|
|
62
62
|
"effort": "xhigh"
|
|
63
63
|
},
|
|
64
64
|
{
|
|
@@ -80,7 +80,7 @@
|
|
|
80
80
|
"haiku",
|
|
81
81
|
{
|
|
82
82
|
"harness": "claude",
|
|
83
|
-
"model": "claude-sonnet-5",
|
|
83
|
+
"model": "claude-sonnet-5-5",
|
|
84
84
|
"effort": "medium"
|
|
85
85
|
}
|
|
86
86
|
]
|
|
@@ -497,11 +497,11 @@ The example above is illustrative rather than a copy of the bundled ladder; its
|
|
|
497
497
|
tiers are trimmed for readability.
|
|
498
498
|
|
|
499
499
|
The bundled recommendation covers 11 Codex model/effort combinations: GPT-6
|
|
500
|
-
Luna at `low` through `max`, GPT-6 Sol at `low` through `high` plus `xhigh`,
|
|
500
|
+
Luna at `low` through `max`, GPT-6.1 Sol at `low` through `high` plus `xhigh`,
|
|
501
501
|
and GPT-6 Astra at `high` and `xhigh`.
|
|
502
502
|
Claude covers `haiku`, plus explicit Sonnet, Opus, and Fable
|
|
503
503
|
model/effort pairs. Effort-pinned Claude cells require a recognized versioned
|
|
504
|
-
model ID (`fable-5-1`, `fable-5`, `opus-5-5`, `sonnet-5`,
|
|
504
|
+
model ID (`fable-5-1`, `fable-5`, `opus-5-5`, `sonnet-5-5`, `sonnet-5`,
|
|
505
505
|
`opus-4-7`, `opus-4-6`, or `sonnet-4-6`) or a matching
|
|
506
506
|
`ANTHROPIC_DEFAULT_<FAMILY>_MODEL` pin. A custom provider pin must declare
|
|
507
507
|
matching capability through `<PIN>_SUPPORTED_CAPABILITIES`: `effort` enables
|
|
@@ -513,14 +513,17 @@ Model-only Claude aliases remain compatible through the per-call model argument
|
|
|
513
513
|
and report `effortAxis: not-applicable` because the Agent API exposes no
|
|
514
514
|
per-call effort argument. The recommendation carries 16 Cursor candidates
|
|
515
515
|
across four tiers, drawn from a materialization
|
|
516
|
-
catalogue with
|
|
517
|
-
(Sonnet, Opus 5.5, Fable 5, and Fable 5.1), GPT, and Grok 4.5 and 4.6; the two figures differ because some
|
|
516
|
+
catalogue with 31 catalogued multi-family flat IDs spanning Composer, Claude
|
|
517
|
+
(Sonnet 5, Sonnet 5.5, Opus 5.5, Fable 5, and Fable 5.1), GPT, and Grok 4.5 and 4.6; the two figures differ because some
|
|
518
518
|
approved mappings stay materializable without being recommended. An explicit
|
|
519
|
-
mapping connects each flat ladder ID to
|
|
520
|
-
|
|
519
|
+
mapping connects each flat ladder ID to its verified frontmatter model.
|
|
520
|
+
Existing mappings keep their bracket selectors; Sonnet 5.5 uses per-pin
|
|
521
|
+
verified exact IDs. The 31 mappings produce 62 pinned role variants.
|
|
522
|
+
Configuration and skills never derive selectors or admit arbitrary flat IDs.
|
|
521
523
|
|
|
522
524
|
The corresponding pinned Codex variant catalogue includes
|
|
523
|
-
`gpt-
|
|
525
|
+
`gpt-6-1-sol-high` and `gpt-6-1-sol-max`, alongside compatible older targets
|
|
526
|
+
such as `gpt-5.6-luna-high`, `gpt-5.6-terra-xhigh`, `gpt-5.6-sol-high`, and
|
|
524
527
|
`gpt-5.6-sol-max`. Configuration selects from that materialized catalogue; it
|
|
525
528
|
does not construct an unregistered role during dispatch.
|
|
526
529
|
|
|
@@ -664,7 +667,8 @@ the exact registered role, pinned child, or resolver-returned model argument.
|
|
|
664
667
|
|
|
665
668
|
`oat doctor` compares configured Cursor flat IDs with the current Cursor
|
|
666
669
|
catalogue and reports availability drift. This check is diagnostic: catalogue
|
|
667
|
-
presence does not prove that a
|
|
670
|
+
presence does not prove that a definition pin was honored, whether its
|
|
671
|
+
selector is bracket-form or an approved exact ID.
|
|
668
672
|
|
|
669
673
|
Each shipped mapping has mapping-specific native-launch evidence, but Cursor
|
|
670
674
|
can silently fallback when account, plan, or administration constraints prevent
|
|
@@ -241,7 +241,7 @@ line. The reviewer's resolver stamp describes the project reviewer policy, so
|
|
|
241
241
|
gate-originated artifacts label it as the policy view:
|
|
242
242
|
|
|
243
243
|
```markdown
|
|
244
|
-
**Dispatch audit (policy view):** `Dispatch: scope=p01 action=review role=reviewer ... target=oat-reviewer-gpt-6-sol-high`
|
|
244
|
+
**Dispatch audit (policy view):** `Dispatch: scope=p01 action=review role=reviewer ... target=oat-reviewer-gpt-6-1-sol-high`
|
|
245
245
|
```
|
|
246
246
|
|
|
247
247
|
The gate reads reviewer stamps (`action=review role=reviewer`) from audit lines
|
|
@@ -26,7 +26,9 @@ they choose to adopt a newer recommendation.
|
|
|
26
26
|
|
|
27
27
|
A model can remain supported for a user's explicit configuration without being
|
|
28
28
|
recommended by the new ladder. For example, this refresh keeps GPT-5.6 Codex
|
|
29
|
-
and Cursor targets available while preferring GPT-6
|
|
29
|
+
and Cursor targets available while preferring GPT-6.1 Sol and GPT-6 Luna in
|
|
30
|
+
Codex. GPT-6 Sol remains supported for explicit compatibility configurations.
|
|
31
|
+
Claude Opus 4.8
|
|
30
32
|
and 5.0 have left current supported generations and recommendations; historical
|
|
31
33
|
probe records can still describe past behavior, clearly labeled as historical.
|
|
32
34
|
|
|
@@ -34,7 +36,11 @@ probe records can still describe past behavior, clearly labeled as historical.
|
|
|
34
36
|
|
|
35
37
|
Check the provider's official model documentation and the local runtime before
|
|
36
38
|
editing an ID or effort range. The [OpenAI model catalog](https://developers.openai.com/api/docs/models)
|
|
37
|
-
lists GPT-6 Astra, Sol, and Luna. The
|
|
39
|
+
lists GPT-6.1 Sol and GPT-6 Astra, Sol, and Luna. The
|
|
40
|
+
[GPT-6.1 Sol model page](https://developers.openai.com/api/docs/models/gpt-6.1-sol)
|
|
41
|
+
identifies `gpt-6.1-sol` and supports `low`, `medium`, `high`, `xhigh`, and
|
|
42
|
+
`max`; `none` and `minimal` are not supported efforts for this family. Direct
|
|
43
|
+
API tool calls require the Responses API. The
|
|
38
44
|
[Astra model page](https://developers.openai.com/api/docs/models/gpt-6-astra)
|
|
39
45
|
names `gpt-6-astra` and documents `low`, `medium`, `high`, `xhigh`, and `max`;
|
|
40
46
|
compare it with the installed Codex runtime model cache for the exact names and
|
|
@@ -42,7 +48,11 @@ local effort set. Catalog presence establishes support, not relative task
|
|
|
42
48
|
quality. The
|
|
43
49
|
[Anthropic Opus 5.5 documentation](https://www.anthropic.com/claude-opus-5-5)
|
|
44
50
|
names `claude-opus-5-5`; confirm a Claude Code invocation reports that exact
|
|
45
|
-
assistant model before admitting it to the Claude catalog.
|
|
51
|
+
assistant model before admitting it to the Claude catalog. The
|
|
52
|
+
[Sonnet 5.5 overview](https://platform.claude.com/docs/en/models/sonnet-5-5/overview)
|
|
53
|
+
and [effort reference](https://platform.claude.com/docs/en/build-with-claude/effort)
|
|
54
|
+
identify `claude-sonnet-5-5` and its five low-through-max efforts. Verify
|
|
55
|
+
Claude Code identity separately. Claude subagent
|
|
46
56
|
`model` and `effort` frontmatter select a per-agent route; see the
|
|
47
57
|
[Claude Code subagent fields](https://code.claude.com/docs/en/sub-agents).
|
|
48
58
|
An API model announcement alone does not prove a third-party harness supports
|
|
@@ -66,14 +76,32 @@ The positive Sonnet control resolved, while invalid family and effort controls
|
|
|
66
76
|
fell back to defaults. Five Opus 5.5 mappings are now approved for desktop
|
|
67
77
|
subagents; the CLI result alone does not establish that the same bracket syntax
|
|
68
78
|
works as a CLI top-level `--model` argument. Likewise, do not add GPT-6
|
|
69
|
-
Cursor targets until that runtime lists and verifies them.
|
|
79
|
+
or GPT-6.1 Cursor targets until that runtime lists and verifies them.
|
|
70
80
|
|
|
71
81
|
A 2026-09-25 desktop 3.21.18 probe added Grok 4.6 and Fable 5.1 mappings
|
|
72
82
|
and moved the bundled Cursor ladder to them. The same probe showed Grok 4.7
|
|
73
|
-
resolves only bare flat IDs, never bracket selectors
|
|
74
|
-
|
|
83
|
+
resolves only bare flat IDs, never bracket selectors. It still needs its own
|
|
84
|
+
approved registry entry and complete per-pin evidence before admission; see [Verifying Cursor Pins](verifying-cursor-pins.md). See [Dispatch Policy](../workflows/projects/dispatch-ceiling.md#cursor-evidence-authority)
|
|
75
85
|
for the distinction between catalog, configured mapping, and runtime identity.
|
|
76
86
|
|
|
87
|
+
The October 1 refresh migrates Codex Sol defaults and examples to
|
|
88
|
+
`gpt-6.1-sol` while preserving existing effort choices, including medium for
|
|
89
|
+
intelligent recon. Claude Economy moves to `claude-sonnet-5-5` medium by user
|
|
90
|
+
direction. GPT-6 Sol and Sonnet 5 remain explicitly supported. Cursor lists
|
|
91
|
+
Sonnet 5.5 flat IDs at low through max. Cursor 3.22.12 native probes matched
|
|
92
|
+
those exact IDs at start, Shell execution, and stop while every Sonnet 5.5
|
|
93
|
+
bracket pin fell back to the account default. The existing Opus low control
|
|
94
|
+
matched; unknown-family and Sonnet `ultra` exact-ID controls fell back. The
|
|
95
|
+
fixture summary and event records at
|
|
96
|
+
`packages/cli/src/providers/cursor/codec/__fixtures__/cursor-pin-probe-2026-10-01{,-events}.jsonl`
|
|
97
|
+
retain both rounds. Ship explicit, evidence-backed exact-ID mappings for that family;
|
|
98
|
+
keep existing bracket mappings. An exact-ID mapping requires the same per-pin
|
|
99
|
+
native evidence and controls as a bracket mapping. Do not enable generic
|
|
100
|
+
pass-through of CLI IDs. Cursor does not list GPT-6 Sol or
|
|
101
|
+
GPT-6.1 Sol in the observed catalog. Do not carry Codex model IDs into Cursor
|
|
102
|
+
configurations. These selector changes do not import a separate vault policy
|
|
103
|
+
refresh or claim newly measured task-performance gains.
|
|
104
|
+
|
|
77
105
|
## Change and Validate
|
|
78
106
|
|
|
79
107
|
1. Update the supported catalog for each verified runtime and its tests. Preserve
|
|
@@ -7,7 +7,8 @@ description: 'Runbook for probe-verifying a Cursor model pin before shipping it:
|
|
|
7
7
|
|
|
8
8
|
A Cursor model pin maps an OAT ladder model ID to the frontmatter selector that
|
|
9
9
|
materialized role files carry, for example `gpt-5.6-sol-medium` to
|
|
10
|
-
`gpt-5.6-sol[reasoning=medium]
|
|
10
|
+
`gpt-5.6-sol[reasoning=medium]`, or the verified exact ID
|
|
11
|
+
`claude-sonnet-5-5-medium`. Adding one to
|
|
11
12
|
`packages/cli/src/providers/cursor/codec/catalog.ts` requires evidence that
|
|
12
13
|
Cursor actually resolves that selector to the intended model.
|
|
13
14
|
|
|
@@ -81,10 +82,22 @@ flat IDs such as `grok-4.7-medium` resolved exactly. Two lessons follow:
|
|
|
81
82
|
control and probe non-default rungs. Here even `effort=low,fast=false`
|
|
82
83
|
landed on the high-fast default.
|
|
83
84
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
directory.
|
|
85
|
+
The 2026-10-01 revision of `DR-260718-explicit-cursor-pin-mapping` permits
|
|
86
|
+
verified exact-ID entries as well as bracket selectors. Grok 4.7 remains
|
|
87
|
+
outside the shipped catalog until its own entry is added and approved. The
|
|
88
|
+
redacted evidence is in the same fixtures directory.
|
|
89
|
+
|
|
90
|
+
The 2026-10-01 Sonnet 5.5 probe on Cursor 3.22.12 confirmed the same syntax
|
|
91
|
+
distinction: every `claude-sonnet-5-5[effort=...]` selector fell back to
|
|
92
|
+
`grok-4.7-high-fast`, but all five exact IDs
|
|
93
|
+
`claude-sonnet-5-5-low|medium|high|xhigh|max` resolved correctly. Both rounds
|
|
94
|
+
included a working Opus 5.5 low control and unknown-family and unsupported-effort
|
|
95
|
+
controls that fell back. The summary and 64 correlated native events are
|
|
96
|
+
retained beside the earlier fixtures.
|
|
97
|
+
|
|
98
|
+
[Cursor documents specific model IDs and bracket parameters](https://cursor.com/docs/subagents#model-configuration).
|
|
99
|
+
Choose a candidate from the live catalog, then probe its exact frontmatter
|
|
100
|
+
spelling. Documentation and catalog presence do not replace native evidence.
|
|
88
101
|
|
|
89
102
|
## Prerequisites
|
|
90
103
|
|
|
@@ -272,10 +285,19 @@ approved it:
|
|
|
272
285
|
|
|
273
286
|
```ts
|
|
274
287
|
approvedMapping(
|
|
275
|
-
'
|
|
276
|
-
'
|
|
277
|
-
'
|
|
278
|
-
{
|
|
288
|
+
'claude-sonnet-5-5-medium',
|
|
289
|
+
'claude-sonnet-5-5-medium',
|
|
290
|
+
'explicit-model-id',
|
|
291
|
+
{
|
|
292
|
+
probeName: 'zz-pin-probe-sonnet55-flat-medium',
|
|
293
|
+
probeRecord: {
|
|
294
|
+
submittedSelector: 'claude-sonnet-5-5-medium',
|
|
295
|
+
resolvedModel: 'claude-sonnet-5-5-medium',
|
|
296
|
+
verifiedAt: '2026-10-01',
|
|
297
|
+
evidencePath:
|
|
298
|
+
'packages/cli/src/providers/cursor/codec/__fixtures__/cursor-pin-probe-2026-10-01.jsonl',
|
|
299
|
+
},
|
|
300
|
+
},
|
|
279
301
|
),
|
|
280
302
|
```
|
|
281
303
|
|
|
@@ -287,6 +309,13 @@ than inheriting an approval that never covered the new selector.
|
|
|
287
309
|
Retain the raw payloads alongside the summary. They are the primary evidence;
|
|
288
310
|
the summary is an interpretation of them.
|
|
289
311
|
|
|
312
|
+
For an exact-ID mapping, use the `explicit-model-id` syntax family and a
|
|
313
|
+
mapping-specific probe record. The frontmatter selector must equal the ladder
|
|
314
|
+
ID, and the independently captured submitted selector and resolved model must
|
|
315
|
+
agree with both. Missing or mismatched evidence must fail materialization;
|
|
316
|
+
there is no generic model-ID pass-through. Preserve rejected selector results
|
|
317
|
+
and control observations alongside the successful rungs.
|
|
318
|
+
|
|
290
319
|
## Cleanup
|
|
291
320
|
|
|
292
321
|
Delete every temporary artifact:
|
|
@@ -26,11 +26,11 @@ description: 'Provider-specific path mappings for Claude, Cursor, Copilot, Gemin
|
|
|
26
26
|
- Interactive `oat init` and `oat status` ask for an individual disposition for each unresolved Cursor-local skill: adopt it into `.agents/skills` or keep it Cursor-only and remember the exact path in sync config
|
|
27
27
|
- Keep-local is blocked when a canonical skill has the same name because Cursor does not document a safe duplicate-resolution order
|
|
28
28
|
- During upgrades, OAT removes only verified clean legacy managed skill views. Changed or replaced views are preserved, detached from manifest ownership, and offered for migration.
|
|
29
|
-
- Sync materializes pinned Markdown definitions for both `oat-phase-implementer` and `oat-reviewer` in addition to the base roles, which sync like any other canonical agent at both scopes. Each generated name keeps the configured flat ladder ID, while an explicit verified mapping writes
|
|
29
|
+
- Sync materializes pinned Markdown definitions for both `oat-phase-implementer` and `oat-reviewer` in addition to the base roles, which sync like any other canonical agent at both scopes. Each generated name keeps the configured flat ladder ID, while an explicit verified mapping writes its frontmatter model: a bracket-form selector for existing families or an exact ID for Sonnet 5.5. The supported catalogue contains 31 pins and 62 pinned role variants. OAT never derives a selector from the ladder ID or passes through an unregistered ID.
|
|
30
30
|
- Generated definitions carry `supported-catalogue`, `project-config`, or `user-config` ownership. Project and supported output lives in the tracked `.cursor/agents` view; user-owned output lives under `~/.cursor/agents`. Cleanup reconciles only the applicable owner.
|
|
31
31
|
- Managed dispatch requires `providers.cursor.dispatchArgs.variant` and launches that exact resolver-selected native agent type first. Skills do not pass a Task-level model argument or normalize Cursor model strings.
|
|
32
32
|
- Cursor may silently fallback when a definition pin cannot be honored. Variant acceptance therefore establishes launcher-owned `configured` provenance only; runtime identity remains `not-reported` unless independently observed.
|
|
33
|
-
- `oat doctor` checks whether each flat ID is still present in the current Cursor catalogue and reports availability drift. Catalogue availability is diagnostic and does not prove that a definition-level
|
|
33
|
+
- `oat doctor` checks whether each flat ID is still present in the current Cursor catalogue and reports availability drift. Catalogue availability is diagnostic and does not prove that a definition-level pin ran as configured.
|
|
34
34
|
- Rule files render as `.cursor/rules/*.mdc`
|
|
35
35
|
|
|
36
36
|
=== "Copilot"
|
|
@@ -59,7 +59,7 @@ description: 'Provider-specific path mappings for Claude, Cursor, Copilot, Gemin
|
|
|
59
59
|
- `.codex/agents/<role>.toml`
|
|
60
60
|
- `.codex/config.toml` (`[features] multi_agent = true`, `[agents.<role>]` upserts)
|
|
61
61
|
- Codex role files include OAT managed provenance headers and are regenerated by `oat sync --scope project|user|all`
|
|
62
|
-
- Project sync writes and maintains the version-controlled supported catalogue: GPT-6 Luna, Sol, and Astra at `low`, `medium`, `high`, `xhigh`, and `max`; GPT-5.6 Luna and Terra through `xhigh`; and GPT-5.6 Sol through `max`. Both `oat-phase-implementer` and `oat-reviewer` receive each supported pair (
|
|
62
|
+
- Project sync writes and maintains the version-controlled supported catalogue: GPT-6.1 Sol and GPT-6 Luna, Sol, and Astra at `low`, `medium`, `high`, `xhigh`, and `max`; GPT-5.6 Luna and Terra through `xhigh`; and GPT-5.6 Sol through `max`. Both `oat-phase-implementer` and `oat-reviewer` receive each supported pair (66 pinned variants). Sync writes files; it does not create a Git commit.
|
|
63
63
|
- Custom targets follow configuration provenance: user-config targets write only under `~/.codex`; shared, repo-local, and active-project targets write under the project's tracked `.codex` view.
|
|
64
64
|
- User sync loads only the bundled canonical `oat-phase-implementer` and `oat-reviewer` definitions needed to expand user-config targets. It does not enable general user-agent mirroring, and it refuses stale user-role cleanup if either managed definition is unavailable.
|
|
65
65
|
- Generated variants carry `supported-catalogue`, `user-config`, or `project-config` ownership. Cleanup removes stale entries only for the owner being reconciled and preserves other scopes plus unrelated Codex entries.
|
|
@@ -67,7 +67,7 @@ description: 'Provider-specific path mappings for Claude, Cursor, Copilot, Gemin
|
|
|
67
67
|
- A single role can be materialized directly with `oat providers codex materialize <agent-name> --model <model-id> --effort <reasoning-effort>`; `--agent-path` selects a specific canonical markdown agent, `--role-name` overrides the generated role name, and `--scope user` writes a user-config-owned role.
|
|
68
68
|
- Aggregate Codex config drift metadata (`aggregateConfigHash`) is emitted in sync/status codex extension output and intentionally not stored as a separate manifest row
|
|
69
69
|
- Sync-time materialization is best effort; managed workflow correctness uses exact registered roles or a fresh child pinned to the resolved model plus reasoning effort with canonical role instructions. After a successful provider-visible file change, OAT conservatively advises starting a new Codex session so it has an opportunity to load the role. This repository policy is not a Codex hot-reload contract, an application-process restart requirement, or proof that the new session exposed the role.
|
|
70
|
-
- Codex `max` is a first-class dispatch effort. It is supported for GPT-6 Luna, Sol, and Astra, plus GPT-5.6 Sol, for both implementer and reviewer roles.
|
|
70
|
+
- Codex `max` is a first-class dispatch effort. It is supported for GPT-6.1 Sol, GPT-6 Luna, Sol, and Astra, plus GPT-5.6 Sol, for both implementer and reviewer roles.
|
|
71
71
|
- Codex multi-agent dispatch uses config-defined roles (`[agents.<name>]`) and `agent_type`
|
|
72
72
|
- Codex subagent workflows require `[features] multi_agent = true` in active Codex config layers
|
|
73
73
|
- Default managed Codex execution requires root (depth 0) → phase implementer (depth 1). `agents.max_depth >= 2` enables optional nested phase-agent work; sync and direct materialization still merge that capability floor without lowering a higher target value.
|
|
@@ -85,13 +85,15 @@ Run the same command without `--dry-run` to replace bundled cells. Use
|
|
|
85
85
|
`--shared` or `--local` instead when that scope owns the ladder. Add
|
|
86
86
|
`--keep-existing` to fill only missing cells and preserve existing choices.
|
|
87
87
|
|
|
88
|
-
Version `2026-
|
|
89
|
-
GPT-6 Luna and Sol in Codex, then Sol xhigh, Astra high, and Astra xhigh in
|
|
88
|
+
Version `2026-10-01.1` is the current bundled recommendation. It prefers
|
|
89
|
+
GPT-6 Luna and GPT-6.1 Sol in Codex, then Sol 6.1 xhigh, Astra high, and Astra xhigh in
|
|
90
90
|
Codex Frontier. Astra's task advantage has not been measured locally; this is
|
|
91
91
|
an explicit user-directed preference, not acceptance by the separately
|
|
92
|
-
maintained model-selection policy.
|
|
92
|
+
maintained model-selection policy. Sonnet 5.5 medium replaces Sonnet 5 medium
|
|
93
|
+
in Claude Economy; the older generation stays supported for explicit cells.
|
|
94
|
+
Opus 5.5 low/medium/high remains in Claude High.
|
|
93
95
|
The Claude low option suits bounded intelligent recon in Balanced or High;
|
|
94
|
-
medium remains the implementation starting point under High. GPT-5.6 targets remain
|
|
96
|
+
medium remains the implementation starting point under High. GPT-6 Sol and GPT-5.6 targets remain
|
|
95
97
|
supported for explicit Codex and Cursor configurations. Cursor's preferred
|
|
96
98
|
ladder interleaves verified GPT-5.6 and Opus 5.5 mappings: Balanced adds
|
|
97
99
|
Opus 5.5 low above Terra high, High orders Sol medium, Opus low, Sol high,
|
|
@@ -249,19 +251,23 @@ oat_dispatch_policy:
|
|
|
249
251
|
The bundled ladder is a curated subset of the supported targets:
|
|
250
252
|
|
|
251
253
|
- **Codex:** GPT-6 Luna at `low` through `max` across Economy and Balanced;
|
|
252
|
-
GPT-6 Sol at `low` through `high` in High and `xhigh` in Frontier; then
|
|
254
|
+
GPT-6.1 Sol at `low` through `high` in High and `xhigh` in Frontier; then
|
|
253
255
|
GPT-6 Astra at `high` and `xhigh` in Frontier. Astra and Sol remain supported
|
|
254
|
-
at `low`, `medium`, `high`, `xhigh`, and `max`, while GPT-5.6 variants remain
|
|
256
|
+
at `low`, `medium`, `high`, `xhigh`, and `max`, while GPT-6 Sol and GPT-5.6 variants remain
|
|
255
257
|
available outside this preferred ladder.
|
|
256
|
-
- **Claude:** `haiku` and Sonnet 5 at Economy
|
|
257
|
-
|
|
258
|
+
- **Claude:** `haiku` and Sonnet 5.5 medium at Economy; Opus 5.5 low at
|
|
259
|
+
Balanced, low/medium/high at High, and xhigh/max at Frontier; Fable 5.1
|
|
260
|
+
high ends Frontier. Sonnet 5 remains supported for explicit configurations.
|
|
258
261
|
- **Cursor:** the preferred ladder uses approved Composer 2.5, GPT-5.6, Grok
|
|
259
262
|
4.6, Opus 5.5, and Fable 5.1 targets. The catalogue maps each flat ladder ID
|
|
260
|
-
to its separately verified
|
|
263
|
+
to its separately verified frontmatter model. Sonnet 5.5 exact-ID pins
|
|
264
|
+
remain supported outside the ladder; existing families keep their bracket
|
|
265
|
+
selectors. Grok 4.6 (`low`
|
|
261
266
|
through `xhigh`) and Fable 5.1 (`low` through `max`, thinking variants) were
|
|
262
267
|
approved from a 2026-09-25 [native desktop probe](../../contributing/verifying-cursor-pins.md);
|
|
263
268
|
targets outside the ladder remain available for explicit selection. Grok
|
|
264
|
-
4.7
|
|
269
|
+
4.7 stays outside the shipped catalogue pending its own approved mapping
|
|
270
|
+
and per-pin evidence; exact-ID support does not admit arbitrary CLI IDs.
|
|
265
271
|
|
|
266
272
|
The final candidate in a named tier defines that tier's reviewer ceiling. Lower
|
|
267
273
|
reviewer selection requires a separate reviewed contract; a normal reviewer
|
|
@@ -363,9 +369,9 @@ branch replaces, rather than supplements, preferred selection.
|
|
|
363
369
|
|
|
364
370
|
An effort-pinned Claude candidate must establish the exact generation and that
|
|
365
371
|
generation's supported effort. Current directly recognized generations include
|
|
366
|
-
`claude-fable-5-1`, `claude-fable-5`, `claude-opus-5-5`, `claude-sonnet-5`,
|
|
372
|
+
`claude-fable-5-1`, `claude-fable-5`, `claude-opus-5-5`, `claude-sonnet-5-5`, `claude-sonnet-5`,
|
|
367
373
|
`claude-opus-4-7`, `claude-opus-4-6`, and `claude-sonnet-4-6`.
|
|
368
|
-
Opus 5.5
|
|
374
|
+
Opus 5.5 and Sonnet 5.5 support `low`, `medium`, `high`, `xhigh`, and `max`; consult the
|
|
369
375
|
[updating guide](../../contributing/updating-model-guidance.md) before adding
|
|
370
376
|
further generations or rungs. Retired Opus 5.0 and 4.8 are no longer directly
|
|
371
377
|
recognized for effort-pinned dispatch.
|
|
@@ -413,8 +419,9 @@ Cursor selection, pin mapping, catalogue availability, and runtime identity are
|
|
|
413
419
|
separate evidence layers:
|
|
414
420
|
|
|
415
421
|
- The candidate ladder and resolver use an opaque flat ID.
|
|
416
|
-
- The materialized definition uses the mapping's explicit
|
|
417
|
-
|
|
422
|
+
- The materialized definition uses the mapping's explicit frontmatter model,
|
|
423
|
+
either a verified bracket selector or a separately verified exact ID.
|
|
424
|
+
Sonnet 5.5 uses exact IDs; existing families keep their bracket mappings.
|
|
418
425
|
- Mapping-specific native-launch evidence authorizes the shipped mapping data.
|
|
419
426
|
An approved mapping may carry a probe record whose `submittedSelector` must
|
|
420
427
|
equal the mapping's `frontmatterModel` and whose `resolvedModel` must equal
|
|
@@ -389,8 +389,11 @@ Provider controls remain exact: Codex uses
|
|
|
389
389
|
`providers.claude.dispatchArgs.variant` for an effort-pinned target and
|
|
390
390
|
`providers.claude.dispatchArgs.model` only for a legacy model-only target; and
|
|
391
391
|
Cursor uses `providers.cursor.dispatchArgs.variant`. Cursor launches that exact
|
|
392
|
-
resolver-selected native agent type first; the flat ID and
|
|
392
|
+
resolver-selected native agent type first; the flat ID and frontmatter pin
|
|
393
393
|
remain inside the explicit mapping and are never normalized by workflow prose.
|
|
394
|
+
A mapping may retain a verified bracket-form selector or use a separately
|
|
395
|
+
verified exact ID, as Sonnet 5.5 does. Exact IDs require an approved mapping
|
|
396
|
+
and native probe evidence; catalog presence alone never enables pass-through.
|
|
394
397
|
The launcher records this selection as `configured`, while runtime identity
|
|
395
398
|
remains `not-reported` without independent observation. Only a pre-start native
|
|
396
399
|
role-selection rejection permits another target-preserving route.
|
|
@@ -46,8 +46,11 @@ prohibited.
|
|
|
46
46
|
|
|
47
47
|
Outer lifecycle implementer and reviewer dispatch uses the exact
|
|
48
48
|
`providers.cursor.dispatchArgs.variant` returned by the lifecycle resolver.
|
|
49
|
-
The resolver maps an opaque flat model ID
|
|
50
|
-
inside the materialized definition
|
|
49
|
+
The resolver maps an opaque flat model ID to the mapping's explicit frontmatter
|
|
50
|
+
pin inside the materialized definition. Existing families keep their verified
|
|
51
|
+
bracket-form pins; Sonnet 5.5 uses verified exact-ID pins. Each exact ID needs
|
|
52
|
+
its own native evidence and approved registry entry: this is not generic
|
|
53
|
+
pass-through of any CLI catalog ID. Skills never parse, normalize, or
|
|
51
54
|
reconstruct either model string.
|
|
52
55
|
|
|
53
56
|
1. Require a non-empty resolver-returned variant for managed dispatch.
|
|
@@ -727,7 +727,7 @@ Dispatch policy: {policy}; selected={selected value | none}; cap={value | none}
|
|
|
727
727
|
```text
|
|
728
728
|
Dispatch policy: balanced; selected=xhigh; cap=xhigh (codex, enforced — variant oat-phase-implementer-gpt-5-6-terra-xhigh)
|
|
729
729
|
Dispatch policy: inherit host defaults; selected=none; cap=none (codex, advisory — base role follows provider default)
|
|
730
|
-
Dispatch policy: balanced; selected=claude-sonnet-5/high; cap=claude-sonnet-5/high (claude, enforced — native variant oat-phase-implementer-claude-claude-sonnet-5-high)
|
|
730
|
+
Dispatch policy: balanced; selected=claude-sonnet-5-5/high; cap=claude-sonnet-5-5/high (claude, enforced — native variant oat-phase-implementer-claude-claude-sonnet-5-5-high)
|
|
731
731
|
Cursor materialized-variant example: Dispatch policy: frontier; selected=gpt-5.6-sol-max; cap=gpt-5.6-sol-max (cursor, enforced — native variant oat-phase-implementer-gpt-5-6-sol-max)
|
|
732
732
|
Dispatch policy: unresolved; selected=none; cap=none (codex, advisory — policy set but no value resolved)
|
|
733
733
|
```
|
|
@@ -5,7 +5,7 @@ disable-model-invocation: true
|
|
|
5
5
|
user-invocable: false
|
|
6
6
|
allowed-tools: Read, Write, Glob, Grep
|
|
7
7
|
metadata:
|
|
8
|
-
version: 1.2.
|
|
8
|
+
version: 1.2.34
|
|
9
9
|
---
|
|
10
10
|
|
|
11
11
|
# Plan Writing Contract
|
|
@@ -121,8 +121,8 @@ asking to write anything:
|
|
|
121
121
|
|
|
122
122
|
| Provider | Economy | Balanced | High | Frontier |
|
|
123
123
|
| --------------- | --------------------------------------------------------- | --------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
|
|
124
|
-
| Codex | gpt-6-luna/low, gpt-6-luna/medium, gpt-6-luna/high | gpt-6-luna/xhigh, gpt-6-luna/max | gpt-6-sol/low, gpt-6-sol/medium, gpt-6-sol/high
|
|
125
|
-
| Claude | haiku, claude-sonnet-5/medium
|
|
124
|
+
| Codex | gpt-6-luna/low, gpt-6-luna/medium, gpt-6-luna/high | gpt-6-luna/xhigh, gpt-6-luna/max | gpt-6.1-sol/low, gpt-6.1-sol/medium, gpt-6.1-sol/high | gpt-6.1-sol/xhigh, gpt-6-astra/high, gpt-6-astra/xhigh |
|
|
125
|
+
| Claude | haiku, claude-sonnet-5-5/medium | claude-opus-5-5/low | claude-opus-5-5/low, claude-opus-5-5/medium, claude-opus-5-5/high | claude-opus-5-5/xhigh, claude-opus-5-5/max, claude-fable-5-1/high |
|
|
126
126
|
| Cursor (opaque) | `composer-2.5`, `gpt-5.6-luna-high`, `gpt-5.6-luna-xhigh` | `cursor-grok-4.6-medium`, `gpt-5.6-terra-high`, `claude-opus-5-5-low` | `gpt-5.6-sol-medium`, `claude-opus-5-5-low`, `gpt-5.6-sol-high`, `claude-opus-5-5-medium`, `claude-opus-5-5-high` | `gpt-5.6-sol-xhigh`, `gpt-5.6-sol-max`, `claude-opus-5-5-high`, `claude-opus-5-5-xhigh`, `claude-fable-5-1-thinking-high` |
|
|
127
127
|
|
|
128
128
|
In an interactive run, ask the user to select the owning scope explicitly
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# Evidence and Refresh Policy
|
|
2
2
|
|
|
3
3
|
```yaml
|
|
4
|
-
guidance_version: 2026-
|
|
5
|
-
last_verified: 2026-
|
|
6
|
-
review_after: 2026-10-
|
|
7
|
-
stale_after: 2026-10-
|
|
4
|
+
guidance_version: 2026-10-01
|
|
5
|
+
last_verified: 2026-10-01
|
|
6
|
+
review_after: 2026-10-15
|
|
7
|
+
stale_after: 2026-10-30
|
|
8
8
|
```
|
|
9
9
|
|
|
10
10
|
This file governs dated provider examples. It does not override a live catalog,
|
|
@@ -17,7 +17,9 @@ authorization boundary.
|
|
|
17
17
|
- `review-required`: older than 45 days, a newer family is observed, or a material control, price, tool, context, alias, or harness change is detected.
|
|
18
18
|
- `stale`: older than 90 days, named models are unavailable or deprecated, or the launching surface can no longer express the recorded controls.
|
|
19
19
|
|
|
20
|
-
The
|
|
20
|
+
The October 1 availability refresh adds GPT-6.1 Sol and Sonnet 5.5 support;
|
|
21
|
+
it migrates active Codex Sol selectors by user direction while preserving
|
|
22
|
+
efforts. Earlier provider observations retain their own dates.
|
|
21
23
|
The benchmark observations below remain dated to 2026-07-25 and require
|
|
22
24
|
review before making a new cross-provider performance claim. Each provider
|
|
23
25
|
reference carries its own verification date; availability refresh does not
|
|
@@ -83,8 +85,9 @@ publish a provider-independent effort conversion.
|
|
|
83
85
|
explicit user direction. No local task evaluation establishes an Astra
|
|
84
86
|
advantage, and this preference is not acceptance by the separately
|
|
85
87
|
maintained model-selection policy.
|
|
86
|
-
- GPT-6 Sol and Luna are
|
|
87
|
-
|
|
88
|
+
- GPT-6.1 Sol and GPT-6 Luna are the default new-work selectors in
|
|
89
|
+
`provider-codex.md`. The Sol migration preserves existing effort choices,
|
|
90
|
+
including medium for intelligent recon. GPT-6 Sol and GPT-5.6 Sol/Luna/Terra
|
|
88
91
|
remain supported for explicit configurations. The July independent coding
|
|
89
92
|
data on GPT-5.6 Luna/Terra supported a mechanical floor of Luna high; this
|
|
90
93
|
is historical evidence, not a measured GPT-6 performance comparison.
|
|
@@ -93,7 +96,12 @@ publish a provider-independent effort conversion.
|
|
|
93
96
|
evidence. Earlier Opus 5 effort observations are historical and do not
|
|
94
97
|
establish an Opus 5.5 benchmark result. Consequence adds independent review
|
|
95
98
|
rather than automatically raising effort.
|
|
96
|
-
- Sonnet 5 is a conditional route
|
|
99
|
+
- Sonnet 5.5 is a supported Claude conditional route and the user-selected
|
|
100
|
+
Economy medium candidate. Cursor 3.22.12 native probes matched Sonnet 5.5
|
|
101
|
+
exact-ID pins; its bracket-form pins fell back. Every pin requires its own
|
|
102
|
+
approved evidence and registry entry. Sonnet 5 remains
|
|
103
|
+
supported for compatibility and established workflows. Sonnet is a
|
|
104
|
+
conditional route when measured latency, throughput, access,
|
|
97
105
|
rate limits, or end-to-end workload economics win. Fable 5 is an
|
|
98
106
|
eligibility-gated specialist; its missing-domain-concept or long-horizon
|
|
99
107
|
reviewer instantiation remains provisional, and zero-data-retention
|
|
@@ -195,6 +203,10 @@ component it cannot resolve. Probe a non-default rung as well, or a result that
|
|
|
195
203
|
merely matches the family default cannot distinguish an honored parameter from
|
|
196
204
|
an ignored one.
|
|
197
205
|
|
|
206
|
+
An exact-ID Cursor pin meets the same evidence gate as a bracket-form pin;
|
|
207
|
+
CLI catalog presence alone never permits generic pass-through. The Sonnet 5.5
|
|
208
|
+
refresh uses explicit exact-ID mappings because its bracket-form pins fell back.
|
|
209
|
+
|
|
198
210
|
The six Cursor `claude-opus-5` and `claude-opus-4-8` mappings shipped on
|
|
199
211
|
2026-07-25 met this gate; their resolved identities are listed in
|
|
200
212
|
`provider-cursor.md`.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
guidance_version: 2026-
|
|
3
|
-
last_verified: 2026-
|
|
4
|
-
review_after: 2026-12-
|
|
2
|
+
guidance_version: 2026-10-01
|
|
3
|
+
last_verified: 2026-10-01
|
|
4
|
+
review_after: 2026-12-30
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Claude Model Selection
|
|
@@ -17,7 +17,12 @@ the dated model examples below. Launch mechanics for OAT dispatch live in
|
|
|
17
17
|
high-volume, mechanically verified work.
|
|
18
18
|
- `claude-opus-5-5`: normal substantive route and the default for
|
|
19
19
|
interpretation-heavy implementation, hard reasoning, and consequential work.
|
|
20
|
-
- `claude-sonnet-5`: conditional route
|
|
20
|
+
- `claude-sonnet-5-5`: supported conditional route at `low`, `medium`,
|
|
21
|
+
`high`, `xhigh`, and `max`; qualify it against the relevant Opus route on
|
|
22
|
+
representative work. The bundled Economy tier selects medium by explicit
|
|
23
|
+
user direction; this is separate from task-performance qualification.
|
|
24
|
+
- `claude-sonnet-5`: supported compatibility and established-workflow route
|
|
25
|
+
when measured latency, throughput,
|
|
21
26
|
access, rate limits, or established-workflow economics beat the relevant
|
|
22
27
|
Opus route.
|
|
23
28
|
- `claude-fable-5-1`: eligibility-gated specialist for a directly relevant
|
|
@@ -45,6 +50,12 @@ host.
|
|
|
45
50
|
is the bottleneck or an evaluated long-horizon workload benefits. Max is
|
|
46
51
|
exceptional and requires a workload-specific effort sweep or an explicit
|
|
47
52
|
quality-first exception.
|
|
53
|
+
- Sonnet 5.5: availability and its five efforts are documented in the
|
|
54
|
+
[Sonnet 5.5 overview](https://platform.claude.com/docs/en/models/sonnet-5-5/overview)
|
|
55
|
+
and [effort reference](https://platform.claude.com/docs/en/build-with-claude/effort).
|
|
56
|
+
The existing conditional-route posture applies; availability is not an
|
|
57
|
+
evaluated workload ranking. Check the installed Claude Code version and
|
|
58
|
+
returned assistant model before launch.
|
|
48
59
|
- Sonnet 5: use medium or high only when measured latency, throughput, access,
|
|
49
60
|
or workload economics justify the conditional route. Do not preserve xhigh
|
|
50
61
|
or max as generic workhorse settings.
|
|
@@ -65,13 +76,13 @@ These routes are dated guidance and benchmark-derived routing hypotheses.
|
|
|
65
76
|
Evaluate them on representative local work before treating fine boundaries as
|
|
66
77
|
stable.
|
|
67
78
|
|
|
68
|
-
| Task class | Default | Economy
|
|
69
|
-
| ------------------------ | ------------------------------------- |
|
|
70
|
-
| `mechanical-recon` | Haiku 4.5 | Same, with strict output and mechanical verification
|
|
71
|
-
| `intelligent-recon` | Opus 5.5 low | Sonnet 5 medium/high only when its measured route wins | Opus 5.5 medium; high when deeper reasoning is needed | Verify silent-miss-prone conclusions; do not use Sonnet low for open-ended recon. |
|
|
72
|
-
| `default-implementation` | Opus 5.5 medium | Sonnet 5 medium/high for evaluated bounded throughput | Opus 5.5 high | Fable is not a routine implementation or economy route. |
|
|
73
|
-
| `hard-reasoning` | Opus 5.5 high | Opus 5.5 medium only after narrowing and evaluation
|
|
74
|
-
| `consequential` | Opus 5.5 high plus independent review | No routine economy route
|
|
79
|
+
| Task class | Default | Economy | Escalation | Floor notes |
|
|
80
|
+
| ------------------------ | ------------------------------------- | -------------------------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------------------------------------------------- |
|
|
81
|
+
| `mechanical-recon` | Haiku 4.5 | Same, with strict output and mechanical verification | Opus 5.5 medium | Haiku is below floor for semantic audits and silent-miss-prone exploration. |
|
|
82
|
+
| `intelligent-recon` | Opus 5.5 low | Sonnet 5.5 medium/high only when its measured route wins | Opus 5.5 medium; high when deeper reasoning is needed | Verify silent-miss-prone conclusions; do not use Sonnet low for open-ended recon. |
|
|
83
|
+
| `default-implementation` | Opus 5.5 medium | Sonnet 5.5 medium/high for evaluated bounded throughput | Opus 5.5 high | Fable is not a routine implementation or economy route. |
|
|
84
|
+
| `hard-reasoning` | Opus 5.5 high | Opus 5.5 medium only after narrowing and evaluation | Opus 5.5 xhigh for a reasoning-depth bottleneck | Use max only after a workload-specific effort sweep. |
|
|
85
|
+
| `consequential` | Opus 5.5 high plus independent review | No routine economy route | Opus 5.5 xhigh when deeper reasoning is also required | Consequence adds review and root authorization; it does not automatically require xhigh or max. |
|
|
75
86
|
|
|
76
87
|
## Root and Subagent Cost Posture
|
|
77
88
|
|
|
@@ -108,7 +119,9 @@ verified before selection.
|
|
|
108
119
|
|
|
109
120
|
Eligibility filters the candidate set before capability or economy is compared.
|
|
110
121
|
A route that fails one of these gates is unavailable regardless of benchmark
|
|
111
|
-
standing. The
|
|
122
|
+
standing. The table below records existing generations; it does not establish Sonnet 5.5
|
|
123
|
+
retention, service tiers, or context limits. Verify those separately.
|
|
124
|
+
The non-Opus constraints are dated observations; reverify against the live
|
|
112
125
|
schema and the organization's actual plan before launch. Do not transfer Opus 5
|
|
113
126
|
service-tier or retention claims to Opus 5.5 without fresh evidence.
|
|
114
127
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
guidance_version: 2026-
|
|
3
|
-
last_verified: 2026-
|
|
4
|
-
review_after: 2026-12-
|
|
2
|
+
guidance_version: 2026-10-01
|
|
3
|
+
last_verified: 2026-10-01
|
|
4
|
+
review_after: 2026-12-30
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Codex and OpenAI Model Selection
|
|
@@ -13,16 +13,19 @@ model examples below. Launch mechanics for OAT dispatch live in
|
|
|
13
13
|
|
|
14
14
|
## Current Families
|
|
15
15
|
|
|
16
|
-
Use
|
|
16
|
+
Use `gpt-6.1-sol` for new Sol routes and `gpt-6-luna` for bounded Luna work.
|
|
17
|
+
This Sol selector migration preserves the existing task-class effort guidance;
|
|
18
|
+
it does not claim a newly measured workload advantage. GPT-6 Astra
|
|
17
19
|
is a supported Frontier candidate:
|
|
18
20
|
|
|
19
21
|
- `gpt-6-astra`: Frontier candidate for especially demanding work; the bundled
|
|
20
22
|
recommendation uses high and xhigh, while the supported catalogue also
|
|
21
23
|
permits low, medium, and max;
|
|
22
|
-
- `gpt-6-sol`: high-capability implementation and reasoning route;
|
|
24
|
+
- `gpt-6.1-sol`: high-capability implementation and reasoning route;
|
|
23
25
|
- `gpt-6-luna`: cost-sensitive, bounded work.
|
|
24
26
|
|
|
25
|
-
|
|
27
|
+
The earlier public engineering benchmarks show task-dependent Astra gains
|
|
28
|
+
over GPT-6 Sol, with
|
|
26
29
|
cost and runtime tradeoffs; they do not establish a universal replacement. The
|
|
27
30
|
September frontier-release comparison remains review-pending in the separate
|
|
28
31
|
model-selection vault, and no matched OAT workload evaluation has qualified a
|
|
@@ -30,8 +33,8 @@ routine default change. Astra's Frontier inclusion is a user-directed
|
|
|
30
33
|
preference. Keep the Sol task-class defaults below while that evidence is
|
|
31
34
|
reconciled and local task fit is evaluated.
|
|
32
35
|
|
|
33
|
-
|
|
34
|
-
and established workloads. Re-evaluate economics and qualitative routing on
|
|
36
|
+
GPT-6 Sol (`gpt-6-sol`) and the GPT-5.6 Sol/Luna/Terra targets remain supported
|
|
37
|
+
for explicit configurations and established workloads. Re-evaluate economics and qualitative routing on
|
|
35
38
|
representative work before carrying over GPT-5.6-specific comparisons.
|
|
36
39
|
|
|
37
40
|
Direct API specialist routes:
|
|
@@ -48,18 +51,24 @@ name includes `codex`.
|
|
|
48
51
|
## Dated Task-Class Matrix
|
|
49
52
|
|
|
50
53
|
These are current task-class starting points, not an evaluated ordering across
|
|
51
|
-
providers or a promise about relative GPT-6 latency and price. All shown
|
|
54
|
+
providers or a promise about relative GPT-6 or GPT-6.1 latency and price. All shown
|
|
52
55
|
model/effort pairs are in the local Codex catalogue.
|
|
53
56
|
|
|
54
|
-
| Task class | Default
|
|
55
|
-
| ------------------------ |
|
|
56
|
-
| `mechanical-recon` | `gpt-6-luna`, high
|
|
57
|
-
| `intelligent-recon` | `gpt-6-sol`, medium | Sol high | Preserve verification for silent-miss-prone reconnaissance. |
|
|
58
|
-
| `default-implementation` | `gpt-6-sol`, medium | Sol high | Luna is for independently bounded, strongly verified work. |
|
|
59
|
-
| `hard-reasoning` | `gpt-6-sol`, high | Sol xhigh | Narrow the problem before raising effort. |
|
|
60
|
-
| `consequential` | `gpt-6-sol`, high, plus independent review | Sol xhigh for a reasoning-depth bottleneck; max only after evaluation | The root retains consequential authorization. |
|
|
61
|
-
|
|
62
|
-
|
|
57
|
+
| Task class | Default | Escalation | Floor notes |
|
|
58
|
+
| ------------------------ | -------------------------------------------- | --------------------------------------------------------------------- | ----------------------------------------------------------------------------- |
|
|
59
|
+
| `mechanical-recon` | `gpt-6-luna`, high | `gpt-6.1-sol`, medium | Lower effort is suitable only when a miss is cheap and mechanically detected. |
|
|
60
|
+
| `intelligent-recon` | `gpt-6.1-sol`, medium | Sol high | Preserve verification for silent-miss-prone reconnaissance. |
|
|
61
|
+
| `default-implementation` | `gpt-6.1-sol`, medium | Sol high | Luna is for independently bounded, strongly verified work. |
|
|
62
|
+
| `hard-reasoning` | `gpt-6.1-sol`, high | Sol xhigh | Narrow the problem before raising effort. |
|
|
63
|
+
| `consequential` | `gpt-6.1-sol`, high, plus independent review | Sol xhigh for a reasoning-depth bottleneck; max only after evaluation | The root retains consequential authorization. |
|
|
64
|
+
|
|
65
|
+
[OpenAI's GPT-6.1 Sol model reference](https://developers.openai.com/api/docs/models/gpt-6.1-sol)
|
|
66
|
+
identifies `gpt-6.1-sol` and the supported efforts `low`, `medium`, `high`,
|
|
67
|
+
`xhigh`, and `max`. Do not emit `none` or `minimal` for this family. For direct
|
|
68
|
+
API tool calls, use the Responses API. Verify the launching Codex runtime
|
|
69
|
+
independently of API availability.
|
|
70
|
+
|
|
71
|
+
The bundled Frontier ladder ends with Astra xhigh after Sol 6.1 xhigh and Astra
|
|
63
72
|
high. The supported Astra and Sol effort sets both end at max, so Sol max
|
|
64
73
|
remains available for explicit configuration even though it is no longer in
|
|
65
74
|
the bundled Frontier recommendation.
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
---
|
|
2
|
-
guidance_version: 2026-
|
|
3
|
-
last_verified: 2026-
|
|
4
|
-
review_after: 2026-12-
|
|
2
|
+
guidance_version: 2026-10-01
|
|
3
|
+
last_verified: 2026-10-01
|
|
4
|
+
review_after: 2026-12-30
|
|
5
5
|
catalog_basis:
|
|
6
6
|
Cursor desktop 3.21.18 resolved Grok 4.6 and Fable 5.1 effort selectors in
|
|
7
7
|
native subagent hooks, and Grok 4.7 only as bare flat IDs; Cursor desktop
|
|
8
8
|
3.20.14 resolved all five Opus 5.5 effort selectors; GPT-6 Sol/Luna were
|
|
9
|
-
absent from the observed Cursor catalog
|
|
9
|
+
absent from the observed Cursor catalog; the 2026-10-01 CLI catalog lists
|
|
10
|
+
Sonnet 5.5 flat IDs; Cursor desktop 3.22.12 matched five exact-ID Sonnet
|
|
11
|
+
5.5 pins while every bracket-form Sonnet 5.5 probe fell back
|
|
10
12
|
---
|
|
11
13
|
|
|
12
14
|
# Cursor Model Selection
|
|
@@ -51,8 +53,8 @@ Cursor desktop 3.20.14 resolved all five `claude-opus-5-5[effort=...]`
|
|
|
51
53
|
selectors to corresponding flat IDs in native hooks; on 2026-09-25, Cursor
|
|
52
54
|
desktop 3.21.18 did the same for Grok 4.6 and Fable 5.1. See the
|
|
53
55
|
probe records at `packages/cli/src/providers/cursor/codec/__fixtures__/README.md`.
|
|
54
|
-
GPT-6 Sol/Luna were absent from the
|
|
55
|
-
availability does not authorize Cursor routes.
|
|
56
|
+
GPT-6 Sol/Luna and GPT-6.1 Sol were absent from the 2026-10-01 Cursor CLI
|
|
57
|
+
catalogue, so their Codex availability does not authorize Cursor routes.
|
|
56
58
|
|
|
57
59
|
| Task class | Default | Economy | Escalation | Floor notes |
|
|
58
60
|
| ------------------------ | ------------------------------------------------------------------- | -------------------------------------------------- | ----------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
|
|
@@ -90,8 +92,34 @@ Grok 4.7 has no approved mapping. Every bracket spelling tried
|
|
|
90
92
|
(`grok-4.7[effort=...]` with and without `fast`, `reasoning=`, and
|
|
91
93
|
`grok-4-7[...]`) fell back to that same account default, which is easy to
|
|
92
94
|
mistake for success because it is itself a Grok 4.7 model. Only bare flat IDs
|
|
93
|
-
such as `grok-4.7-medium` resolved as requested,
|
|
94
|
-
|
|
95
|
+
such as `grok-4.7-medium` resolved as requested, but Grok 4.7 still lacks
|
|
96
|
+
its own approved registry entry and complete per-pin evidence. It stays outside
|
|
97
|
+
the shipped catalogue. This is a family-specific admission gap, not a blanket
|
|
98
|
+
prohibition of exact-ID pins.
|
|
99
|
+
|
|
100
|
+
## Sonnet 5.5 Exact-ID Pin Evidence
|
|
101
|
+
|
|
102
|
+
The 2026-10-01 Cursor CLI catalogue lists
|
|
103
|
+
`claude-sonnet-5-5-low|medium|high|xhigh|max`. In Cursor desktop 3.22.12,
|
|
104
|
+
every `claude-sonnet-5-5[effort=...]` probe fell back to the account default,
|
|
105
|
+
`grok-4.7-high-fast`. Exact-ID pins
|
|
106
|
+
`claude-sonnet-5-5-low|medium|high|xhigh|max` instead matched their requested
|
|
107
|
+
rungs in `subagentStart`, Shell `preToolUse`, and `subagentStop`. The Opus 5.5
|
|
108
|
+
low positive control matched its established mapping; unknown-family and
|
|
109
|
+
Sonnet 5.5 `ultra` exact-ID controls both fell back to `grok-4.7-high-fast`.
|
|
110
|
+
Catalog visibility or a subagent self-report does not establish those results.
|
|
111
|
+
The 16 correlated summary rows and 64 native events from both rounds live in
|
|
112
|
+
`packages/cli/src/providers/cursor/codec/__fixtures__/cursor-pin-probe-2026-10-01.jsonl`
|
|
113
|
+
and `cursor-pin-probe-2026-10-01-events.jsonl`; the adjacent `README.md` records
|
|
114
|
+
provenance and excludes unrelated discovery calls.
|
|
115
|
+
|
|
116
|
+
Sonnet 5.5 mappings write the verified exact ID as frontmatter `model`.
|
|
117
|
+
Existing Sonnet 5, Opus, Fable, GPT, and Grok mappings retain their independently
|
|
118
|
+
verified selectors. Neither selector form is universally valid: every exact-ID
|
|
119
|
+
mapping requires native hook evidence, non-default-rung and invalid-selector
|
|
120
|
+
controls, and an explicit approved registry entry. There is no generic
|
|
121
|
+
pass-through of flat CLI IDs. See the
|
|
122
|
+
[probe runbook](../../../../apps/oat-docs/docs/contributing/verifying-cursor-pins.md).
|
|
95
123
|
|
|
96
124
|
## Historical Opus Cursor Probe Evidence (Retired)
|
|
97
125
|
|
|
@@ -177,8 +205,10 @@ and non-thinking variants.
|
|
|
177
205
|
- `claude-fable-5-1-thinking-high`: eligible specialist for hard reasoning and
|
|
178
206
|
the bundled Frontier terminal target; xhigh only for evaluated long-horizon
|
|
179
207
|
work. Cursor lists Fable as "NO ZDR"; confirm retention eligibility.
|
|
180
|
-
- `claude-sonnet-5-
|
|
181
|
-
|
|
208
|
+
- `claude-sonnet-5-5-high`: exact-ID provider-diversity option for normal
|
|
209
|
+
implementation and agentic work; qualify task performance separately.
|
|
210
|
+
- `claude-sonnet-5-thinking-high`: supported compatibility option for
|
|
211
|
+
established workflows.
|
|
182
212
|
- `gpt-5.4-mini-medium`: economical general tool and coding worker.
|
|
183
213
|
- `gpt-5.4-nano-medium`: strict extraction, classification, ranking, and simple
|
|
184
214
|
read-only tool calls. Not a semantic repository worker.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dispatch-envelope.d.ts","sourceRoot":"","sources":["../../../src/providers/claude/dispatch-envelope.ts"],"names":[],"mappings":"AACA,OAAO,EAOL,KAAK,qBAAqB,EAC3B,MAAM,6CAA6C,CAAC;AAErD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAEL,KAAK,wBAAwB,EAE9B,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"dispatch-envelope.d.ts","sourceRoot":"","sources":["../../../src/providers/claude/dispatch-envelope.ts"],"names":[],"mappings":"AACA,OAAO,EAOL,KAAK,qBAAqB,EAC3B,MAAM,6CAA6C,CAAC;AAErD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAEL,KAAK,wBAAwB,EAE9B,MAAM,WAAW,CAAC;AA6FnB,MAAM,WAAW,4BAA4B;IAC3C,aAAa,EAAE,CAAC,CAAC;IACjB,QAAQ,EAAE,QAAQ,CAAC;IACnB,YAAY,EAAE,aAAa,GAAG,UAAU,CAAC;IACzC,QAAQ,EAAE,uBAAuB,GAAG,cAAc,CAAC;IACnD,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,kBAAkB,EAAE,wBAAwB,CAAC;IAC7C,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE;QACP,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAgBD,KAAK,YAAY,GAAG,4BAA4B,CAAC,cAAc,CAAC,CAAC;AAEjE;;;;;;GAMG;AACH,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAOD,qEAAqE;AACrE,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,GAAG,IAAI,EACrB,IAAI,EAAE,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GACjC,MAAM,CAWR;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GAAG,IAAI,EACrB,KAAK,EAAE,CAAC,CAAC,QAAQ,GAChB,sBAAsB,EAAE,CAM1B;AAsID;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE;IAChD,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;CACjB,GAAG,4BAA4B,CAgC/B;AASD;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAAC,YAAY,EAAE,OAAO,GAAG;IACpE,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;IAClC,UAAU,EAAE,sBAAsB,EAAE,CAAC;IACrC,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,CAqDA;AAuDD;;;;;;GAMG;AACH,wBAAgB,iCAAiC,CAC/C,SAAS,EAAE,OAAO,EAClB,YAAY,EAAE,YAAY,GAAG,IAAI,GAChC;IAAE,UAAU,EAAE,sBAAsB,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAkE7D;AAMD;;;;GAIG;AACH,qBAAa,oCAAqC,SAAQ,KAAK;IAC7D,QAAQ,CAAC,UAAU,EAAE,SAAS,sBAAsB,EAAE,CAAC;IACvD,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAEpC,YACE,UAAU,EAAE,SAAS,sBAAsB,EAAE,EAC7C,OAAO,GAAE,SAAS,MAAM,EAAO,EAyBhC;CACF;AAmBD,kFAAkF;AAClF,wBAAgB,yBAAyB,CAAC,KAAK,EAAE;IAC/C,QAAQ,EAAE,4BAA4B,CAAC;IACvC,UAAU,EAAE,OAAO,CAAC;CACrB,GAAG,qBAAqB,CA2CxB"}
|
|
@@ -4,6 +4,7 @@ declare const CLAUDE_GENERATION_EFFORTS: {
|
|
|
4
4
|
readonly 'fable-5-1': readonly ["low", "medium", "high", "xhigh", "max"];
|
|
5
5
|
readonly 'fable-5': readonly ["low", "medium", "high", "xhigh", "max"];
|
|
6
6
|
readonly 'opus-5-5': readonly ["low", "medium", "high", "xhigh", "max"];
|
|
7
|
+
readonly 'sonnet-5-5': readonly ["low", "medium", "high", "xhigh", "max"];
|
|
7
8
|
readonly 'sonnet-5': readonly ["low", "medium", "high", "xhigh", "max"];
|
|
8
9
|
readonly 'opus-4-7': readonly ["low", "medium", "high", "xhigh", "max"];
|
|
9
10
|
readonly 'opus-4-6': readonly ["low", "medium", "high", "max"];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"targets.d.ts","sourceRoot":"","sources":["../../../src/providers/claude/targets.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,YAAI,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAU,CAAC;AAEhF,eAAO,MAAM,mBAAmB,YAC9B,KAAK,EACL,QAAQ,EACR,MAAM,EACN,OAAO,EACP,KAAK,CACG,CAAC;AAEX,QAAA,MAAM,yBAAyB
|
|
1
|
+
{"version":3,"file":"targets.d.ts","sourceRoot":"","sources":["../../../src/providers/claude/targets.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,YAAI,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAU,CAAC;AAEhF,eAAO,MAAM,mBAAmB,YAC9B,KAAK,EACL,QAAQ,EACR,MAAM,EACN,OAAO,EACP,KAAK,CACG,CAAC;AAEX,QAAA,MAAM,yBAAyB;;;;;;;;;CASuB,CAAC;AAGvD,MAAM,MAAM,qBAAqB,GAAG,MAAM,OAAO,yBAAyB,CAAC;AAC3E,MAAM,MAAM,sBAAsB,GAC9B,mBAAmB,GACnB,qBAAqB,GACrB,wBAAwB,GACxB,8BAA8B,CAAC;AAEnC,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,sBAAsB,CAAC;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,qBAAqB,CAAC;IACnC,mBAAmB,CAAC,EAAE,qBAAqB,EAAE,CAAC;IAC9C,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AASD,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kBAAkB,CAAC,EAAE,wBAAwB,CAAC;CAC/C;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kBAAkB,CAAC,EAAE,wBAAwB,CAAC;CAC/C;AAkBD,kFAAkF;AAClF,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,GACZ,qBAAqB,GAAG,IAAI,CAe9B;AA4ID,8EAA8E;AAC9E,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,IAAI,CAAC,oBAAoB,EAAE,OAAO,GAAG,oBAAoB,CAAC,EAClE,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,sBAAsB,CAgBxB;AAED,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,oBAAoB,GAC3B,sBAAsB,CAoBxB;AAED,6EAA6E;AAC7E,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,oBAAoB,EAC5B,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,sBAAsB,CAexB;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQ7D;AAED,wBAAgB,4BAA4B,CAAC,OAAO,EAAE;IACpD,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,MAAM,CAeT;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,oBAAoB,GAC3B,CAAC,MAAM,EAAE,MAAM,CAAC,CAQlB"}
|
|
@@ -10,6 +10,7 @@ const CLAUDE_GENERATION_EFFORTS = {
|
|
|
10
10
|
'fable-5-1': CLAUDE_EFFORT_ORDER,
|
|
11
11
|
'fable-5': CLAUDE_EFFORT_ORDER,
|
|
12
12
|
'opus-5-5': CLAUDE_EFFORT_ORDER,
|
|
13
|
+
'sonnet-5-5': CLAUDE_EFFORT_ORDER,
|
|
13
14
|
'sonnet-5': CLAUDE_EFFORT_ORDER,
|
|
14
15
|
'opus-4-7': CLAUDE_EFFORT_ORDER,
|
|
15
16
|
'opus-4-6': ['low', 'medium', 'high', 'max'],
|
|
@@ -35,7 +36,8 @@ function modelFamily(model) {
|
|
|
35
36
|
/** Extract a documented effort-capability generation from a provider model ID. */
|
|
36
37
|
export function claudeModelGeneration(model) {
|
|
37
38
|
const normalized = model.toLowerCase().replace(/\[1m\]$/u, '');
|
|
38
|
-
|
|
39
|
+
const generations = Object.keys(CLAUDE_GENERATION_EFFORTS).sort((left, right) => right.length - left.length);
|
|
40
|
+
for (const generation of generations) {
|
|
39
41
|
const [family, ...versionParts] = generation.split('-');
|
|
40
42
|
const version = versionParts.join('[-.]');
|
|
41
43
|
const pattern = new RegExp(`(?:^|[./:_-])(?:claude-)?${family}-${version}(?=$|[-@.:/[])`, 'u');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../../src/providers/codex/codec/shared.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,uBAAuB,wBAAwB,CAAC;AAC7D,eAAO,MAAM,4BAA4B,iBAAiB,CAAC;AAC3D,eAAO,MAAM,6BAA6B,kBAAkB,CAAC;AAE7D,MAAM,MAAM,cAAc,GACtB,qBAAqB,GACrB,aAAa,GACb,gBAAgB,CAAC;AAoBrB,eAAO,MAAM,4BAA4B
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../../src/providers/codex/codec/shared.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,uBAAuB,wBAAwB,CAAC;AAC7D,eAAO,MAAM,4BAA4B,iBAAiB,CAAC;AAC3D,eAAO,MAAM,6BAA6B,kBAAkB,CAAC;AAE7D,MAAM,MAAM,cAAc,GACtB,qBAAqB,GACrB,aAAa,GACb,gBAAgB,CAAC;AAoBrB,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;IA6B/B,CAAC;AAEX,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAO5D;AAQD,wBAAgB,oCAAoC,CAAC,OAAO,EAAE;IAC5D,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,MAAM,CAiBT;AAgDD,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAOT;AAED,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,MAAM,CAER;AAED,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,MAAM,GACd,cAAc,GAAG,IAAI,CAEvB;AAED,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,cAAc,GACpB,MAAM,CAkBR;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAErE"}
|
|
@@ -12,6 +12,10 @@ const STANDARD_SUPPORTED_CODEX_EFFORTS = [
|
|
|
12
12
|
'xhigh',
|
|
13
13
|
];
|
|
14
14
|
export const SUPPORTED_CODEX_ROLE_TARGETS = [
|
|
15
|
+
...[...STANDARD_SUPPORTED_CODEX_EFFORTS, 'max'].map((effort) => ({
|
|
16
|
+
model: 'gpt-6.1-sol',
|
|
17
|
+
effort,
|
|
18
|
+
})),
|
|
15
19
|
...[...STANDARD_SUPPORTED_CODEX_EFFORTS, 'max'].map((effort) => ({
|
|
16
20
|
model: 'gpt-6-astra',
|
|
17
21
|
effort,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type CursorPinSyntaxFamily = 'gpt-reasoning' | 'claude-effort' | 'composer-fast' | 'grok-effort-fast';
|
|
1
|
+
export type CursorPinSyntaxFamily = 'explicit-model-id' | 'gpt-reasoning' | 'claude-effort' | 'composer-fast' | 'grok-effort-fast';
|
|
2
2
|
/**
|
|
3
3
|
* What a probe submitted and what the harness resolved it to, transcribed from
|
|
4
4
|
* the probe evidence.
|
|
@@ -29,7 +29,7 @@ export interface CursorModelPinMapping {
|
|
|
29
29
|
gateEvidence: CursorPinGateEvidence;
|
|
30
30
|
catalogue: boolean;
|
|
31
31
|
}
|
|
32
|
-
export declare const CURSOR_MODEL_PIN_MAPPINGS: readonly [CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping];
|
|
32
|
+
export declare const CURSOR_MODEL_PIN_MAPPINGS: readonly [CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping, CursorModelPinMapping];
|
|
33
33
|
export declare const SUPPORTED_CURSOR_ROLE_TARGETS: CursorModelPinMapping[];
|
|
34
34
|
export declare const SUPPORTED_CURSOR_BASE_ROLES: readonly ['oat-phase-implementer', 'oat-reviewer'];
|
|
35
35
|
export declare function findCursorModelPinMapping(ladderModelId: string): CursorModelPinMapping | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../../../src/providers/cursor/codec/catalog.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,qBAAqB,GAC7B,eAAe,GACf,eAAe,GACf,eAAe,GACf,kBAAkB,CAAC;AAEvB;;;;;;;;;;GAUG;AACH,MAAM,WAAW,oBAAoB;IACnC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,KAAK,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,UAAU,CAAC;IACxB,WAAW,CAAC,EAAE,oBAAoB,CAAC;CACpC;AAED,MAAM,WAAW,qBAAqB;IACpC,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,qBAAqB,CAAC;IACpC,YAAY,EAAE,qBAAqB,CAAC;IACpC,SAAS,EAAE,OAAO,CAAC;CACpB;AA+BD,eAAO,MAAM,yBAAyB,
|
|
1
|
+
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../../../src/providers/cursor/codec/catalog.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,qBAAqB,GAC7B,mBAAmB,GACnB,eAAe,GACf,eAAe,GACf,eAAe,GACf,kBAAkB,CAAC;AAEvB;;;;;;;;;;GAUG;AACH,MAAM,WAAW,oBAAoB;IACnC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,KAAK,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,UAAU,CAAC;IACxB,WAAW,CAAC,EAAE,oBAAoB,CAAC;CACpC;AAED,MAAM,WAAW,qBAAqB;IACpC,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,qBAAqB,CAAC;IACpC,YAAY,EAAE,qBAAqB,CAAC;IACpC,SAAS,EAAE,OAAO,CAAC;CACpB;AA+BD,eAAO,MAAM,yBAAyB,gzBAwXe,CAAC;AAEtD,eAAO,MAAM,6BAA6B,yBAEzC,CAAC;AAEF,eAAO,MAAM,2BAA2B,YACtC,uBAAuB,EACvB,cAAc,CACN,CAAC;AAEX,wBAAgB,yBAAyB,CACvC,aAAa,EAAE,MAAM,GACpB,qBAAqB,GAAG,SAAS,CAInC"}
|
|
@@ -27,6 +27,51 @@ export const CURSOR_MODEL_PIN_MAPPINGS = [
|
|
|
27
27
|
},
|
|
28
28
|
}),
|
|
29
29
|
approvedMapping('claude-sonnet-5-high', 'claude-sonnet-5[effort=high]', 'claude-effort', { catalogue: false }),
|
|
30
|
+
approvedMapping('claude-sonnet-5-5-low', 'claude-sonnet-5-5-low', 'explicit-model-id', {
|
|
31
|
+
probeName: 'zz-pin-probe-sonnet55-flat-low',
|
|
32
|
+
probeRecord: {
|
|
33
|
+
submittedSelector: 'claude-sonnet-5-5-low',
|
|
34
|
+
resolvedModel: 'claude-sonnet-5-5-low',
|
|
35
|
+
verifiedAt: '2026-10-01',
|
|
36
|
+
evidencePath: 'packages/cli/src/providers/cursor/codec/__fixtures__/cursor-pin-probe-2026-10-01.jsonl',
|
|
37
|
+
},
|
|
38
|
+
}),
|
|
39
|
+
approvedMapping('claude-sonnet-5-5-medium', 'claude-sonnet-5-5-medium', 'explicit-model-id', {
|
|
40
|
+
probeName: 'zz-pin-probe-sonnet55-flat-medium',
|
|
41
|
+
probeRecord: {
|
|
42
|
+
submittedSelector: 'claude-sonnet-5-5-medium',
|
|
43
|
+
resolvedModel: 'claude-sonnet-5-5-medium',
|
|
44
|
+
verifiedAt: '2026-10-01',
|
|
45
|
+
evidencePath: 'packages/cli/src/providers/cursor/codec/__fixtures__/cursor-pin-probe-2026-10-01.jsonl',
|
|
46
|
+
},
|
|
47
|
+
}),
|
|
48
|
+
approvedMapping('claude-sonnet-5-5-high', 'claude-sonnet-5-5-high', 'explicit-model-id', {
|
|
49
|
+
probeName: 'zz-pin-probe-sonnet55-flat-high',
|
|
50
|
+
probeRecord: {
|
|
51
|
+
submittedSelector: 'claude-sonnet-5-5-high',
|
|
52
|
+
resolvedModel: 'claude-sonnet-5-5-high',
|
|
53
|
+
verifiedAt: '2026-10-01',
|
|
54
|
+
evidencePath: 'packages/cli/src/providers/cursor/codec/__fixtures__/cursor-pin-probe-2026-10-01.jsonl',
|
|
55
|
+
},
|
|
56
|
+
}),
|
|
57
|
+
approvedMapping('claude-sonnet-5-5-xhigh', 'claude-sonnet-5-5-xhigh', 'explicit-model-id', {
|
|
58
|
+
probeName: 'zz-pin-probe-sonnet55-flat-xhigh',
|
|
59
|
+
probeRecord: {
|
|
60
|
+
submittedSelector: 'claude-sonnet-5-5-xhigh',
|
|
61
|
+
resolvedModel: 'claude-sonnet-5-5-xhigh',
|
|
62
|
+
verifiedAt: '2026-10-01',
|
|
63
|
+
evidencePath: 'packages/cli/src/providers/cursor/codec/__fixtures__/cursor-pin-probe-2026-10-01.jsonl',
|
|
64
|
+
},
|
|
65
|
+
}),
|
|
66
|
+
approvedMapping('claude-sonnet-5-5-max', 'claude-sonnet-5-5-max', 'explicit-model-id', {
|
|
67
|
+
probeName: 'zz-pin-probe-sonnet55-flat-max',
|
|
68
|
+
probeRecord: {
|
|
69
|
+
submittedSelector: 'claude-sonnet-5-5-max',
|
|
70
|
+
resolvedModel: 'claude-sonnet-5-5-max',
|
|
71
|
+
verifiedAt: '2026-10-01',
|
|
72
|
+
evidencePath: 'packages/cli/src/providers/cursor/codec/__fixtures__/cursor-pin-probe-2026-10-01.jsonl',
|
|
73
|
+
},
|
|
74
|
+
}),
|
|
30
75
|
approvedMapping('claude-opus-5-5-low', 'claude-opus-5-5[effort=low]', 'claude-effort', {
|
|
31
76
|
probeName: 'zz-pin-probe-opus55-low',
|
|
32
77
|
probeRecord: {
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { CursorModelPinMapping } from './catalog.js';
|
|
2
|
+
/** Validate at both target collection and rendering, before any role writes. */
|
|
3
|
+
export declare function assertApprovedCursorModelPinMapping(mapping: CursorModelPinMapping): void;
|
|
4
|
+
//# sourceMappingURL=mapping-validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapping-validation.d.ts","sourceRoot":"","sources":["../../../../src/providers/cursor/codec/mapping-validation.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAEvD,gFAAgF;AAChF,wBAAgB,mCAAmC,CACjD,OAAO,EAAE,qBAAqB,GAC7B,IAAI,CAkCN"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { CliError } from '../../../errors/index.js';
|
|
2
|
+
/** Validate at both target collection and rendering, before any role writes. */
|
|
3
|
+
export function assertApprovedCursorModelPinMapping(mapping) {
|
|
4
|
+
if (mapping.gateEvidence.gate !== 'g01' ||
|
|
5
|
+
mapping.gateEvidence.disposition !== 'approved' ||
|
|
6
|
+
!mapping.gateEvidence.probeName.trim()) {
|
|
7
|
+
throw new CliError(`Cannot materialize Cursor model ${mapping.ladderModelId}: mapping-specific gate g01 approval is required.`);
|
|
8
|
+
}
|
|
9
|
+
if (mapping.syntaxFamily === 'explicit-model-id') {
|
|
10
|
+
const record = mapping.gateEvidence.probeRecord;
|
|
11
|
+
if (!/^[a-z0-9]+(?:[.-][a-z0-9]+)*$/.test(mapping.frontmatterModel) ||
|
|
12
|
+
mapping.frontmatterModel !== mapping.ladderModelId ||
|
|
13
|
+
!record ||
|
|
14
|
+
record.submittedSelector !== mapping.frontmatterModel ||
|
|
15
|
+
record.resolvedModel !== mapping.ladderModelId ||
|
|
16
|
+
!/^\d{4}-\d{2}-\d{2}$/.test(record.verifiedAt) ||
|
|
17
|
+
!record.evidencePath.trim()) {
|
|
18
|
+
throw new CliError(`Cannot materialize Cursor model ${mapping.ladderModelId}: explicit model ID requires matching mapping-specific native probe evidence.`);
|
|
19
|
+
}
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
if (!/\[[^\]]+\]$/.test(mapping.frontmatterModel)) {
|
|
23
|
+
throw new CliError(`Cannot materialize Cursor model ${mapping.ladderModelId}: frontmatter model must include a non-empty bracket segment.`);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"materialize.d.ts","sourceRoot":"","sources":["../../../../src/providers/cursor/codec/materialize.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAKhE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"materialize.d.ts","sourceRoot":"","sources":["../../../../src/providers/cursor/codec/materialize.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAKhE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAEvD,OAAO,EAKL,KAAK,eAAe,EACrB,MAAM,UAAU,CAAC;AAQlB,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,eAAe,CAAC;IACvB,OAAO,EAAE,qBAAqB,CAAC;CAChC;AAED,MAAM,WAAW,6BAA6B;IAC5C,KAAK,EAAE,sBAAsB,CAAC;IAC9B,OAAO,EAAE,qBAAqB,CAAC;IAC/B,KAAK,EAAE,eAAe,CAAC;CACxB;AAWD,wBAAgB,sBAAsB,CAAC,EACrC,KAAK,EACL,OAAO,EACP,KAAK,GACN,EAAE,6BAA6B,GAAG,uBAAuB,CA8BzD;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE;IAC/C,MAAM,EAAE,sBAAsB,EAAE,CAAC;IACjC,OAAO,EAAE,SAAS,qBAAqB,EAAE,CAAC;IAC1C,KAAK,EAAE,eAAe,CAAC;CACxB,GAAG,uBAAuB,EAAE,CAwB5B;AAqCD,wBAAsB,sCAAsC,CAC1D,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,GACjC,OAAO,CAAC,IAAI,CAAC,CA0Ef"}
|
|
@@ -3,28 +3,19 @@ import { join } from 'node:path';
|
|
|
3
3
|
import { CliError } from '../../../errors/index.js';
|
|
4
4
|
import { validateRealPathWithinScope } from '../../../fs/paths.js';
|
|
5
5
|
import YAML from 'yaml';
|
|
6
|
+
import { assertApprovedCursorModelPinMapping } from './mapping-validation.js';
|
|
6
7
|
import { buildCursorMaterializedRoleName, isOatManagedCursorRoleFile, normalizeCursorRoleName, renderCursorManagedComments, } from './shared.js';
|
|
7
8
|
const CURSOR_AGENT_DISCOVERY_DIRECTORIES = [
|
|
8
9
|
'.cursor/agents',
|
|
9
10
|
'.claude/agents',
|
|
10
11
|
'.codex/agents',
|
|
11
12
|
];
|
|
12
|
-
function assertApprovedMapping(mapping) {
|
|
13
|
-
if (mapping.gateEvidence.gate !== 'g01' ||
|
|
14
|
-
mapping.gateEvidence.disposition !== 'approved' ||
|
|
15
|
-
!mapping.gateEvidence.probeName.trim()) {
|
|
16
|
-
throw new CliError(`Cannot materialize Cursor model ${mapping.ladderModelId}: mapping-specific gate g01 approval is required.`);
|
|
17
|
-
}
|
|
18
|
-
if (!/\[[^\]]+\]$/.test(mapping.frontmatterModel)) {
|
|
19
|
-
throw new CliError(`Cannot materialize Cursor model ${mapping.ladderModelId}: frontmatter model must include a non-empty bracket segment.`);
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
13
|
function optionalCursorBoolean(agent, field) {
|
|
23
14
|
const value = field === 'readonly' ? agent.readonly : agent.frontmatter[field];
|
|
24
15
|
return typeof value === 'boolean' ? value : undefined;
|
|
25
16
|
}
|
|
26
17
|
export function materializeCursorAgent({ agent, mapping, owner, }) {
|
|
27
|
-
|
|
18
|
+
assertApprovedCursorModelPinMapping(mapping);
|
|
28
19
|
const roleName = buildCursorMaterializedRoleName({
|
|
29
20
|
agentName: agent.name,
|
|
30
21
|
ladderModelId: mapping.ladderModelId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-extension.d.ts","sourceRoot":"","sources":["../../../../src/providers/cursor/codec/sync-extension.ts"],"names":[],"mappings":"AAqBA,OAAO,EAEL,KAAK,cAAc,EACpB,MAAM,eAAe,CAAC;AAIvB,OAAO,EAIL,KAAK,0BAA0B,EAC/B,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,EAC7B,KAAK,wBAAwB,EAC7B,KAAK,mBAAmB,EACxB,KAAK,6BAA6B,EACnC,MAAM,mBAAmB,CAAC;AAI3B,OAAO,EAIL,KAAK,qBAAqB,EAC3B,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"sync-extension.d.ts","sourceRoot":"","sources":["../../../../src/providers/cursor/codec/sync-extension.ts"],"names":[],"mappings":"AAqBA,OAAO,EAEL,KAAK,cAAc,EACpB,MAAM,eAAe,CAAC;AAIvB,OAAO,EAIL,KAAK,0BAA0B,EAC/B,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,EAC7B,KAAK,wBAAwB,EAC7B,KAAK,mBAAmB,EACxB,KAAK,6BAA6B,EACnC,MAAM,mBAAmB,CAAC;AAI3B,OAAO,EAIL,KAAK,qBAAqB,EAC3B,MAAM,WAAW,CAAC;AAOnB,OAAO,EAIL,KAAK,eAAe,EACrB,MAAM,UAAU,CAAC;AAElB,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC;AAE3C,MAAM,WAAW,wBAAyB,SAAQ,wBAAwB,CACxE,QAAQ,EACR,qBAAqB,CACtB;IACC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,6BAA8B,SAAQ,6BAA6B,CAClF,QAAQ,EACR,qBAAqB,CACtB;IACC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,2BAA2B;IAC1C,aAAa,EAAE,eAAe,EAAE,CAAC;IACjC,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,mBAAoB,SAAQ,mBAAmB,CAC9D,QAAQ,EACR,qBAAqB,EACrB,2BAA2B,CAC5B;IACC,UAAU,EAAE,6BAA6B,EAAE,CAAC;CAC7C;AAED,MAAM,MAAM,0BAA0B,GAAG,0BAA0B,CAAC;AAQpE,MAAM,WAAW,kCAAkC;IACjD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,SAAS,qBAAqB,EAAE,CAAC;IACjD,gBAAgB,CAAC,EAAE,SAAS,qBAAqB,EAAE,CAAC;CACrD;AAgVD,wBAAsB,iCAAiC,CACrD,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,cAAc,EAAE,EAClC,qBAAqB,CAAC,EAAE,MAAM,EAAE,EAChC,OAAO,GAAE,kCAAuC,GAC/C,OAAO,CAAC,mBAAmB,CAAC,CAmH9B;AA6DD,wBAAsB,+BAA+B,CACnD,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,mBAAmB,GACxB,OAAO,CAAC,0BAA0B,CAAC,CA4DrC;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAE5E;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,mBAAmB,GAAG;IACnE,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;CACjB,CAEA;AAED,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,mBAAmB,GACxB,wBAAwB,EAAE,CAM5B;AAED,eAAO,MAAM,8BAA8B,EAAE,wBAAwB,CACnE,mBAAmB,EACnB,sBAAsB,CAAC,kCAAkC,CAAC,CAY3D,CAAC"}
|
|
@@ -12,6 +12,7 @@ import { validateRealPathWithinScope } from '../../../fs/paths.js';
|
|
|
12
12
|
import { hasMaterializationChanges, summarizeMaterializationPlan, toMaterializationOperations, } from '../../shared/index.js';
|
|
13
13
|
import YAML from 'yaml';
|
|
14
14
|
import { CURSOR_MODEL_PIN_MAPPINGS, SUPPORTED_CURSOR_BASE_ROLES, SUPPORTED_CURSOR_ROLE_TARGETS, } from './catalog.js';
|
|
15
|
+
import { assertApprovedCursorModelPinMapping } from './mapping-validation.js';
|
|
15
16
|
import { assertNoUnmanagedCursorAgentCollisions, materializeCursorAgent, } from './materialize.js';
|
|
16
17
|
import { isOatManagedCursorRoleFile, readOatManagedCursorRoleOwner, readOatManagedCursorRoleName, } from './shared.js';
|
|
17
18
|
const OWNER_PRECEDENCE = {
|
|
@@ -29,22 +30,12 @@ function isUserCursorScope(scopeRoot, options) {
|
|
|
29
30
|
return Boolean(options.userConfigDir &&
|
|
30
31
|
resolve(scopeRoot) === resolve(options.userConfigDir, '..'));
|
|
31
32
|
}
|
|
32
|
-
function assertApprovedMapping(mapping) {
|
|
33
|
-
if (mapping.gateEvidence.gate !== 'g01' ||
|
|
34
|
-
mapping.gateEvidence.disposition !== 'approved' ||
|
|
35
|
-
!mapping.gateEvidence.probeName.trim()) {
|
|
36
|
-
throw new CliError(`Cannot materialize Cursor model ${mapping.ladderModelId}: mapping-specific gate g01 approval is required.`);
|
|
37
|
-
}
|
|
38
|
-
if (!/\[[^\]]+\]$/.test(mapping.frontmatterModel)) {
|
|
39
|
-
throw new CliError(`Cannot materialize Cursor model ${mapping.ladderModelId}: approved mapping must include a non-empty bracket segment.`);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
33
|
function addCursorTarget(ladderModelId, owner, source, targets, mappings) {
|
|
43
34
|
const mapping = mappings.find((candidate) => candidate.ladderModelId === ladderModelId);
|
|
44
35
|
if (!mapping) {
|
|
45
36
|
throw new CliError(`Cannot materialize unknown Cursor model mapping "${ladderModelId}" from ${source}. Add mapping-specific gate g01 evidence before using this target.`);
|
|
46
37
|
}
|
|
47
|
-
|
|
38
|
+
assertApprovedCursorModelPinMapping(mapping);
|
|
48
39
|
const existing = targets.get(ladderModelId);
|
|
49
40
|
if (!existing ||
|
|
50
41
|
OWNER_PRECEDENCE[owner] >= OWNER_PRECEDENCE[existing.owner]) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@open-agent-toolkit/cli",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.10",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Open Agent Toolkit CLI",
|
|
6
6
|
"homepage": "https://github.com/voxmedia/open-agent-toolkit/tree/main/packages/cli",
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"ora": "^9.0.0",
|
|
35
35
|
"yaml": "2.8.2",
|
|
36
36
|
"zod": "^3.25.76",
|
|
37
|
-
"@open-agent-toolkit/control-plane": "0.3.
|
|
37
|
+
"@open-agent-toolkit/control-plane": "0.3.10"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
40
|
"@types/node": "^22.10.0",
|