@femtomc/mu-agent 26.2.107 → 26.2.109
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/README.md +5 -22
- package/assets/mu-tui-logo.png +0 -0
- package/dist/extensions/index.d.ts +0 -1
- package/dist/extensions/index.d.ts.map +1 -1
- package/dist/extensions/index.js +0 -1
- package/dist/extensions/mu-operator.d.ts.map +1 -1
- package/dist/extensions/mu-operator.js +0 -2
- package/dist/extensions/mu-serve.d.ts.map +1 -1
- package/dist/extensions/mu-serve.js +0 -2
- package/dist/extensions/ui.d.ts.map +1 -1
- package/dist/extensions/ui.js +806 -34
- package/dist/operator.d.ts +7 -337
- package/dist/operator.d.ts.map +1 -1
- package/dist/operator.js +1 -62
- package/package.json +33 -33
- package/prompts/skills/core/SKILL.md +8 -5
- package/prompts/skills/core/memory/SKILL.md +2 -2
- package/prompts/skills/core/mu/SKILL.md +20 -7
- package/prompts/skills/core/programmable-ui/SKILL.md +299 -0
- package/prompts/skills/subagents/SKILL.md +92 -8
- package/prompts/skills/subagents/control-flow/SKILL.md +118 -13
- package/prompts/skills/subagents/execution/SKILL.md +144 -31
- package/prompts/skills/subagents/model-routing/SKILL.md +146 -13
- package/prompts/skills/subagents/planning/SKILL.md +239 -90
- package/prompts/skills/writing/SKILL.md +2 -2
- package/dist/extensions/hud.d.ts +0 -4
- package/dist/extensions/hud.d.ts.map +0 -1
- package/dist/extensions/hud.js +0 -483
- package/prompts/skills/subagents/hud/SKILL.md +0 -205
|
@@ -12,7 +12,7 @@ This skill is execution-supervision focused:
|
|
|
12
12
|
|
|
13
13
|
- `mu heartbeats` / `mu cron` = orchestrator wake cadence
|
|
14
14
|
- `tmux` + `mu exec` = parallel worker execution
|
|
15
|
-
-
|
|
15
|
+
- `mu_ui` status + prompt docs = operator↔human communication surface
|
|
16
16
|
|
|
17
17
|
Source of truth remains in `mu issues` + `mu forum`.
|
|
18
18
|
|
|
@@ -22,7 +22,7 @@ Source of truth remains in `mu issues` + `mu forum`.
|
|
|
22
22
|
- [Control-flow dependency](#control-flow-dependency)
|
|
23
23
|
- [Model-routing dependency](#model-routing-dependency)
|
|
24
24
|
- [Model quality defaults for orchestration](#model-quality-defaults-for-orchestration)
|
|
25
|
-
- [
|
|
25
|
+
- [mu_ui communication dependency](#mu_ui-communication-dependency)
|
|
26
26
|
- [tmux skill dependency](#tmux-skill-dependency)
|
|
27
27
|
- [When to use](#when-to-use)
|
|
28
28
|
- [Success condition](#success-condition)
|
|
@@ -30,7 +30,7 @@ Source of truth remains in `mu issues` + `mu forum`.
|
|
|
30
30
|
- [Orchestration loops](#orchestration-loops)
|
|
31
31
|
- [Bootstrap and queue targeting](#bootstrap-and-queue-targeting)
|
|
32
32
|
- [Dispatch templates](#dispatch-templates)
|
|
33
|
-
- [Execution
|
|
33
|
+
- [Execution UI (subagents profile)](#execution-ui-subagents-profile)
|
|
34
34
|
- [Evaluation scenarios](#evaluation-scenarios)
|
|
35
35
|
- [Reconciliation](#reconciliation)
|
|
36
36
|
- [Safety](#safety)
|
|
@@ -92,13 +92,20 @@ Operational rules:
|
|
|
92
92
|
5. Helper shell workflows must fail fast with actionable usage text whenever
|
|
93
93
|
required provider/model/thinking args are missing.
|
|
94
94
|
|
|
95
|
-
##
|
|
95
|
+
## mu_ui communication dependency
|
|
96
96
|
|
|
97
|
-
Before
|
|
98
|
-
|
|
97
|
+
Before publishing execution visibility or user prompts, use **`mu_ui`** as the
|
|
98
|
+
primary communication surface.
|
|
99
99
|
|
|
100
|
-
-
|
|
101
|
-
-
|
|
100
|
+
- Use one status doc at `ui_id:"ui:subagents"` for queue/worker visibility.
|
|
101
|
+
- Encode status profile metadata with:
|
|
102
|
+
- `metadata.profile.id: "subagents"`
|
|
103
|
+
- `metadata.profile.variant: "status"`
|
|
104
|
+
- `metadata.profile.snapshot.compact|multiline` for deterministic snapshots.
|
|
105
|
+
- Keep status docs non-interactive (`actions: []`); publish user prompts in a
|
|
106
|
+
separate interactive `ui_id` (for example `ui:subagents:handoff`).
|
|
107
|
+
- Use `/mu ui status` and `/mu ui snapshot [compact|multiline]` to verify live
|
|
108
|
+
communication state during orchestration passes.
|
|
102
109
|
|
|
103
110
|
## tmux skill dependency
|
|
104
111
|
|
|
@@ -161,7 +168,8 @@ mu forum read issue:<root-id> --limit 20 --pretty
|
|
|
161
168
|
2. Choose exactly one action/primitive from `protocol`.
|
|
162
169
|
3. Apply it.
|
|
163
170
|
4. Verify (`get`, `children`, `ready`, `validate`).
|
|
164
|
-
5.
|
|
171
|
+
5. Upsert `ui_id:"ui:subagents"` via `mu_ui` (required) and keep the status
|
|
172
|
+
snapshot current.
|
|
165
173
|
6. Post a human-facing `ORCH_PASS` update to forum:
|
|
166
174
|
- start with a short title that captures status in plain language
|
|
167
175
|
- follow with one concise paragraph covering: project objective context, milestone moved this pass, impact, overall progress, and next high-level step
|
|
@@ -210,7 +218,7 @@ thinking="${4:-}"
|
|
|
210
218
|
if [ -z "$root_id" ] || [ -z "$provider" ] || [ -z "$model" ] || [ -z "$thinking" ]; then
|
|
211
219
|
cat >&2 <<'USAGE'
|
|
212
220
|
usage: ./orch-heartbeat.sh <root-id> <provider> <model> <thinking>
|
|
213
|
-
example: ./orch-heartbeat.sh mu-
|
|
221
|
+
example: ./orch-heartbeat.sh mu-root-1234 openai-codex gpt-5.3-codex xhigh
|
|
214
222
|
USAGE
|
|
215
223
|
exit 64
|
|
216
224
|
fi
|
|
@@ -219,7 +227,7 @@ mu heartbeats create \
|
|
|
219
227
|
--title "hierarchical-work-v1 ${root_id}" \
|
|
220
228
|
--reason orchestration_v1 \
|
|
221
229
|
--every-ms 15000 \
|
|
222
|
-
--prompt "Use skills subagents, protocol, execution, control-flow, model-routing, and
|
|
230
|
+
--prompt "Use skills subagents, protocol, execution, control-flow, model-routing, and mu for root ${root_id}. Run exactly one bounded orchestration pass: inspect the proto:hierarchical-work-v1 queue, perform exactly one corrective orchestration action (including in_progress-without-worker drift recovery) or claim/work-start one ready issue, then verify state. Maintain operator↔human communication via mu_ui in this pass: keep ui:subagents updated as a status-profile doc (metadata.profile.id=subagents, metadata.profile.variant=status) and, when user input is required, publish a separate interactive ui_id doc with action metadata.command_text. If flow:* policy tags are present, apply one control-flow transition from the control-flow skill in this pass. If route:* policy tags are present, apply one model-routing transition from the model-routing skill in this pass using live `mu control harness` capabilities and per-turn provider/model/thinking overrides. If route:* policy tags are absent, use the high-quality orchestration profile (openai-codex / gpt-5.3-codex / xhigh) for any execution launch in this pass. Any execution launch in this pass must pass explicit overrides: --provider ${provider} --model ${model} --thinking ${thinking}; if this tuple cannot be used, stop and post BLOCKED with remediation options. Report human-facing progress as a titled status note plus one concise paragraph that explains project context, milestone moved, impact, overall progress, and next high-level step; avoid low-level orchestration internals unless diagnosing a blocker/anomaly. Post a matching ORCH_PASS update to issue:${root_id}. Stop when 'mu issues validate ${root_id}' is final."
|
|
223
231
|
```
|
|
224
232
|
|
|
225
233
|
Reusable status-voice add-on for heartbeat prompts (copy/paste):
|
|
@@ -244,7 +252,7 @@ limit="${5:-3}"
|
|
|
244
252
|
if [ -z "$root_id" ] || [ -z "$provider" ] || [ -z "$model" ] || [ -z "$thinking" ]; then
|
|
245
253
|
cat >&2 <<'USAGE'
|
|
246
254
|
usage: ./orch-fanout.sh <root-id> <provider> <model> <thinking> [limit]
|
|
247
|
-
example: ./orch-fanout.sh mu-
|
|
255
|
+
example: ./orch-fanout.sh mu-root-1234 openai-codex gpt-5.3-codex xhigh 3
|
|
248
256
|
USAGE
|
|
249
257
|
exit 64
|
|
250
258
|
fi
|
|
@@ -253,33 +261,137 @@ run_id="$(date +%Y%m%d-%H%M%S)"
|
|
|
253
261
|
for issue_id in $(mu issues ready --root "$root_id" --tag proto:hierarchical-work-v1 --json | jq -r '.[].id' | head -n "$limit"); do
|
|
254
262
|
session="mu-sub-${run_id}-${issue_id}"
|
|
255
263
|
tmux new-session -d -s "$session" \
|
|
256
|
-
"cd '$PWD' && mu exec --provider '$provider' --model '$model' --thinking '$thinking' 'Use skills subagents, protocol, execution, control-flow, model-routing, and
|
|
264
|
+
"cd '$PWD' && mu exec --provider '$provider' --model '$model' --thinking '$thinking' 'Use skills subagents, protocol, execution, control-flow, model-routing, and mu. Work issue ${issue_id} using hierarchical-work.protocol/v1. Keep ui:subagents current via mu_ui status-profile updates and publish separate interactive ui_id docs for user decisions. If flow:* policy tags are present, apply the control-flow overlay before selecting the next primitive. If route:* policy tags are present, apply the model-routing overlay using live harness capabilities before selecting the next primitive. Claim first, then run one full control loop.' ; rc=\$?; echo __MU_DONE__:\$rc"
|
|
257
265
|
done
|
|
258
266
|
```
|
|
259
267
|
|
|
260
|
-
## Execution
|
|
268
|
+
## Execution UI (subagents profile)
|
|
261
269
|
|
|
262
|
-
|
|
270
|
+
Use `mu_ui` for active execution communication. Truth still lives in issues/forum.
|
|
263
271
|
|
|
264
272
|
```text
|
|
265
|
-
/mu
|
|
266
|
-
/mu
|
|
267
|
-
/mu
|
|
273
|
+
/mu ui status
|
|
274
|
+
/mu ui snapshot compact
|
|
275
|
+
/mu ui snapshot multiline
|
|
268
276
|
```
|
|
269
277
|
|
|
270
|
-
|
|
278
|
+
### Canonical status update (`ui:subagents`)
|
|
279
|
+
|
|
280
|
+
```json
|
|
281
|
+
{
|
|
282
|
+
"action": "set",
|
|
283
|
+
"doc": {
|
|
284
|
+
"v": 1,
|
|
285
|
+
"ui_id": "ui:subagents",
|
|
286
|
+
"title": "Subagents execution status",
|
|
287
|
+
"summary": "workers=2 · ready=3 · blocked=1",
|
|
288
|
+
"components": [
|
|
289
|
+
{
|
|
290
|
+
"kind": "key_value",
|
|
291
|
+
"id": "queue",
|
|
292
|
+
"title": "Queue",
|
|
293
|
+
"rows": [
|
|
294
|
+
{ "key": "ready", "value": "3" },
|
|
295
|
+
{ "key": "active", "value": "2" },
|
|
296
|
+
{ "key": "blocked", "value": "1" },
|
|
297
|
+
{ "key": "next", "value": "Validate final synth issue" }
|
|
298
|
+
],
|
|
299
|
+
"metadata": {}
|
|
300
|
+
},
|
|
301
|
+
{
|
|
302
|
+
"kind": "list",
|
|
303
|
+
"id": "activity",
|
|
304
|
+
"title": "Recent activity",
|
|
305
|
+
"items": [
|
|
306
|
+
{ "id": "a1", "label": "Renderer work completed", "detail": "channel render updates merged" },
|
|
307
|
+
{ "id": "a2", "label": "Docs pass in progress", "detail": "execution docs update running" }
|
|
308
|
+
],
|
|
309
|
+
"metadata": {}
|
|
310
|
+
}
|
|
311
|
+
],
|
|
312
|
+
"actions": [],
|
|
313
|
+
"revision": { "id": "subagents-status", "version": 12 },
|
|
314
|
+
"updated_at_ms": 1772067300000,
|
|
315
|
+
"metadata": {
|
|
316
|
+
"profile": {
|
|
317
|
+
"id": "subagents",
|
|
318
|
+
"variant": "status",
|
|
319
|
+
"snapshot": {
|
|
320
|
+
"compact": "workers=2 · ready=3 · blocked=1",
|
|
321
|
+
"multiline": "workers: 2\nready: 3\nblocked: 1\nnext: validate synth issue"
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
### Canonical user prompt (`ui:subagents:handoff`)
|
|
330
|
+
|
|
331
|
+
```json
|
|
332
|
+
{
|
|
333
|
+
"action": "set",
|
|
334
|
+
"doc": {
|
|
335
|
+
"v": 1,
|
|
336
|
+
"ui_id": "ui:subagents:handoff",
|
|
337
|
+
"title": "Execution handoff decision",
|
|
338
|
+
"summary": "Need user confirmation before final close.",
|
|
339
|
+
"components": [
|
|
340
|
+
{
|
|
341
|
+
"kind": "text",
|
|
342
|
+
"id": "question",
|
|
343
|
+
"text": "Should execution close the root now or open a follow-up issue?",
|
|
344
|
+
"metadata": {}
|
|
345
|
+
},
|
|
346
|
+
{
|
|
347
|
+
"kind": "list",
|
|
348
|
+
"id": "options",
|
|
349
|
+
"title": "Choices",
|
|
350
|
+
"items": [
|
|
351
|
+
{ "id": "opt-close", "label": "Close root now" },
|
|
352
|
+
{ "id": "opt-followup", "label": "Create follow-up issue first" }
|
|
353
|
+
],
|
|
354
|
+
"metadata": {}
|
|
355
|
+
}
|
|
356
|
+
],
|
|
357
|
+
"actions": [
|
|
358
|
+
{
|
|
359
|
+
"id": "close-root",
|
|
360
|
+
"label": "Close root",
|
|
361
|
+
"kind": "primary",
|
|
362
|
+
"payload": {},
|
|
363
|
+
"metadata": { "command_text": "/answer close-root" }
|
|
364
|
+
},
|
|
365
|
+
{
|
|
366
|
+
"id": "create-followup",
|
|
367
|
+
"label": "Create follow-up",
|
|
368
|
+
"kind": "secondary",
|
|
369
|
+
"payload": { "title": "Document remaining follow-up gaps" },
|
|
370
|
+
"metadata": { "command_text": "/answer followup {{title}}" }
|
|
371
|
+
}
|
|
372
|
+
],
|
|
373
|
+
"revision": { "id": "subagents-handoff", "version": 1 },
|
|
374
|
+
"updated_at_ms": 1772067310000,
|
|
375
|
+
"metadata": {
|
|
376
|
+
"profile": {
|
|
377
|
+
"id": "subagents-handoff",
|
|
378
|
+
"variant": "interactive"
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
```
|
|
271
384
|
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
-
|
|
275
|
-
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
- Follow the HUD ownership and teardown protocol from `hud` skill for completion and handoff.
|
|
385
|
+
### Teardown / handoff semantics
|
|
386
|
+
|
|
387
|
+
- Remove execution-owned interactive docs when the question is resolved.
|
|
388
|
+
- Remove or replace `ui:subagents` when execution completes or hands off.
|
|
389
|
+
- Prefer `remove` over `clear` so other skills keep their docs intact.
|
|
390
|
+
|
|
391
|
+
```json
|
|
392
|
+
{"action":"remove","ui_id":"ui:subagents:handoff"}
|
|
393
|
+
{"action":"remove","ui_id":"ui:subagents"}
|
|
394
|
+
```
|
|
283
395
|
|
|
284
396
|
## Evaluation scenarios
|
|
285
397
|
|
|
@@ -305,7 +417,8 @@ Tool: `mu_hud`
|
|
|
305
417
|
- Merge synth-node outputs into one final user-facing result.
|
|
306
418
|
- Convert unresolved gaps into new child issues tagged `proto:hierarchical-work-v1`.
|
|
307
419
|
- Tear down temporary tmux sessions.
|
|
308
|
-
- Tear down/handoff `
|
|
420
|
+
- Tear down/handoff execution-owned `ui_id`s (at minimum `ui:subagents`) with
|
|
421
|
+
explicit `mu_ui remove` actions.
|
|
309
422
|
|
|
310
423
|
## Safety
|
|
311
424
|
|
|
@@ -23,7 +23,7 @@ semantics.
|
|
|
23
23
|
- [Planning handoff contract](#planning-handoff-contract)
|
|
24
24
|
- [Subagents/heartbeat execution contract](#subagentsheartbeat-execution-contract)
|
|
25
25
|
- [Failure + fallback policy](#failure--fallback-policy)
|
|
26
|
-
- [
|
|
26
|
+
- [mu_ui visibility and handoff](#mu_ui-visibility-and-handoff)
|
|
27
27
|
- [Evaluation scenarios](#evaluation-scenarios)
|
|
28
28
|
|
|
29
29
|
## Purpose
|
|
@@ -44,7 +44,7 @@ Load these skills before applying model-routing policies:
|
|
|
44
44
|
- `protocol` (protocol primitives/invariants)
|
|
45
45
|
- `execution` (durable execution runtime)
|
|
46
46
|
- `heartbeats` and/or `crons` (scheduler clock)
|
|
47
|
-
- `
|
|
47
|
+
- `mu` (for `/mu ui` inspection commands and communication checks)
|
|
48
48
|
- `control-flow` (optional; when loop/termination overlays are also active)
|
|
49
49
|
|
|
50
50
|
## Core contract
|
|
@@ -245,7 +245,7 @@ For one-shot execution:
|
|
|
245
245
|
|
|
246
246
|
```bash
|
|
247
247
|
mu exec --provider <provider> --model <model> --thinking <thinking> \
|
|
248
|
-
"Use skills subagents, protocol, execution, model-routing, and
|
|
248
|
+
"Use skills subagents, protocol, execution, model-routing, and mu. Work issue <issue-id> and keep routing visibility current via mu_ui."
|
|
249
249
|
```
|
|
250
250
|
|
|
251
251
|
For existing session turn:
|
|
@@ -299,18 +299,19 @@ Per orchestrator tick:
|
|
|
299
299
|
5. Verify with:
|
|
300
300
|
- `mu issues ready --root <root-id> --tag proto:hierarchical-work-v1 --pretty`
|
|
301
301
|
- `mu issues validate <root-id>`
|
|
302
|
-
6.
|
|
302
|
+
6. Upsert routing visibility via `mu_ui` (`ui_id:"ui:subagents"` when orchestration is shared, or `ui_id:"ui:model-routing"` when standalone).
|
|
303
303
|
7. Post one concise `ORCH_PASS` status update.
|
|
304
304
|
8. If root is final, disable supervising heartbeat.
|
|
305
305
|
|
|
306
306
|
Reusable heartbeat prompt fragment:
|
|
307
307
|
|
|
308
308
|
```text
|
|
309
|
-
Use skills subagents, protocol, execution, model-routing, and
|
|
309
|
+
Use skills subagents, protocol, execution, model-routing, and mu.
|
|
310
310
|
For root <root-id>, enforce route:model-routing-v1.
|
|
311
311
|
Run exactly one bounded routing/orchestration transition pass: compute or validate
|
|
312
312
|
one issue's model recommendation from live `mu control harness` capabilities,
|
|
313
|
-
apply one action,
|
|
313
|
+
apply one action, keep route status current via mu_ui (`ui:subagents` or
|
|
314
|
+
`ui:model-routing`), verify DAG state, post one ORCH_PASS, then stop.
|
|
314
315
|
If validate is final, disable the supervising heartbeat and report completion.
|
|
315
316
|
```
|
|
316
317
|
|
|
@@ -334,15 +335,147 @@ If validate is final, disable the supervising heartbeat and report completion.
|
|
|
334
335
|
- every route change emits forum packet (`ROUTE_RECOMMENDATION`,
|
|
335
336
|
`ROUTE_FALLBACK`, `ROUTE_DEGRADED`)
|
|
336
337
|
|
|
337
|
-
##
|
|
338
|
+
## mu_ui visibility and handoff
|
|
338
339
|
|
|
339
|
-
|
|
340
|
+
Use `mu_ui` as the primary communication surface for active model-routing
|
|
341
|
+
execution.
|
|
340
342
|
|
|
341
|
-
-
|
|
342
|
-
|
|
343
|
-
-
|
|
344
|
-
-
|
|
345
|
-
-
|
|
343
|
+
- Publish routing status in one status-profile doc:
|
|
344
|
+
- shared orchestration: `ui_id:"ui:subagents"`
|
|
345
|
+
- standalone model-routing loop: `ui_id:"ui:model-routing"`
|
|
346
|
+
- Set status profile metadata for deterministic snapshots:
|
|
347
|
+
- `metadata.profile.id: "subagents"` or `"model-routing"`
|
|
348
|
+
- `metadata.profile.variant: "status"`
|
|
349
|
+
- `metadata.profile.snapshot.compact|multiline`
|
|
350
|
+
- Keep status docs non-interactive (`actions: []`).
|
|
351
|
+
- For user decisions (for example hard-constraint escalation), publish a separate
|
|
352
|
+
interactive prompt doc (for example `ui_id:"ui:model-routing:escalation"`).
|
|
353
|
+
- Update routing status docs each bounded pass before posting `ORCH_PASS`.
|
|
354
|
+
- On completion or handoff, remove model-routing-owned docs with explicit
|
|
355
|
+
`mu_ui remove` actions. Prefer `remove` over `clear`.
|
|
356
|
+
|
|
357
|
+
### Canonical status doc (`ui:model-routing`)
|
|
358
|
+
|
|
359
|
+
```json
|
|
360
|
+
{
|
|
361
|
+
"action": "set",
|
|
362
|
+
"doc": {
|
|
363
|
+
"v": 1,
|
|
364
|
+
"ui_id": "ui:model-routing",
|
|
365
|
+
"title": "Model-routing status",
|
|
366
|
+
"summary": "issue=<issue-id> · selected=openai-codex/gpt-5.3-codex/xhigh · alternates=2",
|
|
367
|
+
"components": [
|
|
368
|
+
{
|
|
369
|
+
"kind": "key_value",
|
|
370
|
+
"id": "route",
|
|
371
|
+
"title": "Current route",
|
|
372
|
+
"rows": [
|
|
373
|
+
{ "key": "policy", "value": "route:model-routing-v1" },
|
|
374
|
+
{ "key": "issue", "value": "<issue-id>" },
|
|
375
|
+
{ "key": "selected", "value": "openai-codex/gpt-5.3-codex/xhigh" },
|
|
376
|
+
{ "key": "alternates", "value": "2" },
|
|
377
|
+
{ "key": "next", "value": "Launch worker with explicit overrides" }
|
|
378
|
+
],
|
|
379
|
+
"metadata": {}
|
|
380
|
+
},
|
|
381
|
+
{
|
|
382
|
+
"kind": "list",
|
|
383
|
+
"id": "recent",
|
|
384
|
+
"title": "Recent routing events",
|
|
385
|
+
"items": [
|
|
386
|
+
{
|
|
387
|
+
"id": "e1",
|
|
388
|
+
"label": "ROUTE_RECOMMENDATION posted",
|
|
389
|
+
"detail": "selected openai-codex/gpt-5.3-codex/xhigh"
|
|
390
|
+
},
|
|
391
|
+
{
|
|
392
|
+
"id": "e2",
|
|
393
|
+
"label": "fallback budget",
|
|
394
|
+
"detail": "openrouter/google/gemini-3.1-pro-preview/high"
|
|
395
|
+
}
|
|
396
|
+
],
|
|
397
|
+
"metadata": {}
|
|
398
|
+
}
|
|
399
|
+
],
|
|
400
|
+
"actions": [],
|
|
401
|
+
"revision": { "id": "model-routing-status", "version": 7 },
|
|
402
|
+
"updated_at_ms": 1772069500000,
|
|
403
|
+
"metadata": {
|
|
404
|
+
"profile": {
|
|
405
|
+
"id": "model-routing",
|
|
406
|
+
"variant": "status",
|
|
407
|
+
"snapshot": {
|
|
408
|
+
"compact": "selected=openai-codex/gpt-5.3-codex/xhigh · alternates=2",
|
|
409
|
+
"multiline": "issue: <issue-id>\nselected: openai-codex/gpt-5.3-codex/xhigh\nalternates: 2\nnext: launch worker"
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
```
|
|
416
|
+
|
|
417
|
+
### Canonical escalation prompt (`ui:model-routing:escalation`)
|
|
418
|
+
|
|
419
|
+
```json
|
|
420
|
+
{
|
|
421
|
+
"action": "set",
|
|
422
|
+
"doc": {
|
|
423
|
+
"v": 1,
|
|
424
|
+
"ui_id": "ui:model-routing:escalation",
|
|
425
|
+
"title": "Routing escalation required",
|
|
426
|
+
"summary": "No authenticated model satisfies image + deep reasoning constraints.",
|
|
427
|
+
"components": [
|
|
428
|
+
{
|
|
429
|
+
"kind": "text",
|
|
430
|
+
"id": "question",
|
|
431
|
+
"text": "Routing is blocked by missing provider capability. Should execution wait for provider auth or run with degraded constraints?",
|
|
432
|
+
"metadata": {}
|
|
433
|
+
},
|
|
434
|
+
{
|
|
435
|
+
"kind": "list",
|
|
436
|
+
"id": "options",
|
|
437
|
+
"title": "Choices",
|
|
438
|
+
"items": [
|
|
439
|
+
{ "id": "opt-auth", "label": "Pause and authenticate provider" },
|
|
440
|
+
{ "id": "opt-degrade", "label": "Proceed with degraded route" }
|
|
441
|
+
],
|
|
442
|
+
"metadata": {}
|
|
443
|
+
}
|
|
444
|
+
],
|
|
445
|
+
"actions": [
|
|
446
|
+
{
|
|
447
|
+
"id": "wait-for-auth",
|
|
448
|
+
"label": "Wait for provider auth",
|
|
449
|
+
"kind": "primary",
|
|
450
|
+
"payload": {},
|
|
451
|
+
"metadata": { "command_text": "/answer wait-for-auth" }
|
|
452
|
+
},
|
|
453
|
+
{
|
|
454
|
+
"id": "approve-degraded-route",
|
|
455
|
+
"label": "Approve degraded route",
|
|
456
|
+
"kind": "secondary",
|
|
457
|
+
"payload": {},
|
|
458
|
+
"metadata": { "command_text": "/answer approve-degraded-route" }
|
|
459
|
+
}
|
|
460
|
+
],
|
|
461
|
+
"revision": { "id": "model-routing-escalation", "version": 1 },
|
|
462
|
+
"updated_at_ms": 1772069510000,
|
|
463
|
+
"metadata": {
|
|
464
|
+
"profile": {
|
|
465
|
+
"id": "model-routing-escalation",
|
|
466
|
+
"variant": "interactive"
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
```
|
|
472
|
+
|
|
473
|
+
### Teardown / handoff
|
|
474
|
+
|
|
475
|
+
```json
|
|
476
|
+
{"action":"remove","ui_id":"ui:model-routing:escalation"}
|
|
477
|
+
{"action":"remove","ui_id":"ui:model-routing"}
|
|
478
|
+
```
|
|
346
479
|
|
|
347
480
|
## Evaluation scenarios
|
|
348
481
|
|