@azure-id/orc 0.56.1 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +219 -0
- package/README-id.md +49 -107
- package/README.md +694 -719
- package/bin/build-agents.js +18 -11
- package/bin/cli.js +33699 -29855
- package/bin/onboarding-content.js +0 -3
- package/bin/test-run.js +491 -0
- package/bin/verify-contracts.js +4330 -3277
- package/bin/verify-package.js +76 -6
- package/bin/webui/api.js +1201 -1163
- package/bin/webui/app.html +210 -198
- package/bin/webui/css/06-responsive.css +120 -108
- package/bin/webui/css/panels/extra.css +29 -0
- package/bin/webui/css/panels/lanes.css +134 -0
- package/bin/webui/css/panels/settings.css +79 -3
- package/bin/webui/css/panels/wait.css +123 -0
- package/bin/webui/fixtures/extra.js +2036 -1934
- package/bin/webui/fixtures/flow.js +2 -2
- package/bin/webui/fixtures/index.js +510 -486
- package/bin/webui/fixtures/lanes.js +218 -0
- package/bin/webui/fixtures/settings.js +261 -34
- package/bin/webui/fixtures/stats.js +3 -3
- package/bin/webui/fixtures/wait.js +97 -0
- package/bin/webui/i18n/TERMS.md +135 -134
- package/bin/webui/i18n/en/extra.json +345 -313
- package/bin/webui/i18n/en/lanes.json +29 -0
- package/bin/webui/i18n/en/nav.json +21 -19
- package/bin/webui/i18n/en/overview.json +2 -0
- package/bin/webui/i18n/en/settings.json +16 -5
- package/bin/webui/i18n/en/wait.json +41 -0
- package/bin/webui/i18n/id/extra.json +345 -313
- package/bin/webui/i18n/id/lanes.json +29 -0
- package/bin/webui/i18n/id/nav.json +21 -19
- package/bin/webui/i18n/id/overview.json +2 -0
- package/bin/webui/i18n/id/settings.json +15 -4
- package/bin/webui/i18n/id/wait.json +41 -0
- package/bin/webui/js/01-i18n.js +151 -149
- package/bin/webui/js/panels/extra.js +3199 -3011
- package/bin/webui/js/panels/lanes.js +259 -0
- package/bin/webui/js/panels/overview.js +10 -0
- package/bin/webui/js/panels/settings.js +149 -3
- package/bin/webui/js/panels/wait.js +253 -0
- package/package.json +39 -39
- package/templates/agents/MODEL-MAPPING.md +23 -35
- package/templates/agents/orc-executor-opus-4-7-high.md +1 -1
- package/templates/agents/orc-executor-opus-4-7-med.md +1 -1
- package/templates/agents/orc-executor-opus-4-8-high.md +1 -1
- package/templates/agents/orc-executor-opus-5-high.md +1 -1
- package/templates/agents/orc-executor-opus-5-low.md +1 -1
- package/templates/agents/orc-executor-opus-5-med.md +1 -1
- package/templates/agents/orc-retro-opus-5-med.md +73 -73
- package/templates/agents/orc-retro-sonnet-5-high.md +72 -72
- package/templates/agents/orc-trace-writer-haiku-4-5.md +107 -107
- package/templates/commands/orc-route.md +1 -1
- package/templates/commands/orc-wait.md +19 -0
- package/templates/commands/orc.md +1 -1
- package/templates/hooks/orc-statusline.js +39 -0
- package/templates/skills/_shared/README.md +7 -3
- package/templates/skills/_shared/config-precedence.md +198 -0
- package/templates/skills/_shared/drift-recovery.md +1 -1
- package/templates/skills/_shared/extra-dispatch.md +159 -7
- package/templates/skills/_shared/interview.md +1 -1
- package/templates/skills/_shared/opus5-only.md +9 -7
- package/templates/skills/_shared/phases/README.md +82 -0
- package/templates/skills/{orc/references → _shared/phases}/analyst-gates.md +15 -3
- package/templates/skills/_shared/phases/execution.md +143 -0
- package/templates/skills/{orc/references → _shared/phases}/house-rules.md +13 -1
- package/templates/skills/{orc/references → _shared/phases}/intake.md +15 -2
- package/templates/skills/_shared/phases/mock-example.md +56 -0
- package/templates/skills/{orc/references → _shared/phases}/plan-handoff.md +16 -3
- package/templates/skills/_shared/phases/planning.md +135 -0
- package/templates/skills/_shared/phases/preflight.md +98 -0
- package/templates/skills/_shared/phases/review.md +53 -0
- package/templates/skills/_shared/phases/scoring.md +65 -0
- package/templates/skills/{orc/references → _shared/phases}/security-checklist.md +12 -1
- package/templates/skills/_shared/phases/security.md +55 -0
- package/templates/skills/_shared/phases/ship.md +88 -0
- package/templates/skills/{orc/references/stop-and-resume.md → _shared/phases/stop-resume.md} +169 -160
- package/templates/skills/_shared/phases/summary.md +48 -0
- package/templates/skills/_shared/phases/testgen.md +51 -0
- package/templates/skills/{orc/references/trace-protocol.md → _shared/phases/trace.md} +49 -6
- package/templates/skills/_shared/phases/verify.md +70 -0
- package/templates/skills/{orc/references → _shared/phases}/wave-grouping.md +14 -2
- package/templates/skills/{orc/references → _shared/phases}/wiki-consult.md +13 -1
- package/templates/skills/_shared/read-ladder.md +48 -0
- package/templates/skills/_shared/wait.md +240 -0
- package/templates/skills/context-combiner/SKILL.md +214 -187
- package/templates/skills/orc/README.md +148 -150
- package/templates/skills/orc/SKILL.md +75 -358
- package/templates/skills/orc/config.md +137 -389
- package/templates/skills/orc/examples/full-run-mock.md +1 -1
- package/templates/skills/orc/references/effort-and-mode.md +16 -18
- package/templates/skills/orc/references/phases/intake.md +47 -0
- package/templates/skills/orc/references/phases/integration.md +19 -0
- package/templates/skills/orc/references/preflight-report.md +4 -4
- package/templates/skills/orc/references/ultra-mode.md +117 -123
- package/templates/skills/orc/schemas/planning-output.md +279 -279
- package/templates/skills/orc/subskills/orc-planner/SKILL.md +260 -264
- package/templates/skills/orc/subskills/orc-pr/stack-gate.md +4 -1
- package/templates/skills/orc-aftermath/SKILL.md +158 -136
- package/templates/skills/orc-analyze/SKILL.md +252 -220
- package/templates/skills/orc-analyze/references/branching.md +51 -51
- package/templates/skills/orc-analyze/references/thin-input.md +1 -1
- package/templates/skills/orc-analyze-mini/SKILL.md +128 -112
- package/templates/skills/orc-boundary/SKILL.md +249 -208
- package/templates/skills/orc-brainstorm/SKILL.md +377 -339
- package/templates/skills/orc-budget/SKILL.md +248 -225
- package/templates/skills/orc-challenge/README.md +1 -1
- package/templates/skills/orc-challenge/SKILL.md +298 -255
- package/templates/skills/orc-challenge/examples/council-full-roster.md +1 -1
- package/templates/skills/orc-claude/SKILL.md +221 -199
- package/templates/skills/orc-diy/README.md +2 -1
- package/templates/skills/orc-diy/SKILL.md +132 -68
- package/templates/skills/orc-diy/references/blocks/analyze.md +1 -1
- package/templates/skills/orc-diy/references/compile.md +21 -7
- package/templates/skills/orc-diy/references/flow-schema.md +2 -2
- package/templates/skills/orc-doc/SKILL.md +49 -7
- package/templates/skills/orc-explain/SKILL.md +24 -0
- package/templates/skills/orc-export/SKILL.md +31 -5
- package/templates/skills/orc-fast/SKILL.md +218 -185
- package/templates/skills/orc-grill/SKILL.md +238 -207
- package/templates/skills/orc-handoff/SKILL.md +223 -204
- package/templates/skills/orc-learn/SKILL.md +181 -156
- package/templates/skills/orc-mini/SKILL.md +47 -24
- package/templates/skills/orc-pact/SKILL.md +255 -218
- package/templates/skills/orc-pattern/SKILL.md +154 -124
- package/templates/skills/orc-poly/SKILL.md +242 -216
- package/templates/skills/orc-poly/references/gather.md +1 -1
- package/templates/skills/orc-pr-driver/SKILL.md +196 -167
- package/templates/skills/orc-pr-driver/references/orc-run-split.md +1 -1
- package/templates/skills/orc-pr-setup/SKILL.md +212 -184
- package/templates/skills/orc-quick/README.md +2 -2
- package/templates/skills/orc-quick/SKILL.md +51 -13
- package/templates/skills/orc-quick/references/dispatch-gate.md +2 -3
- package/templates/skills/orc-retro/SKILL.md +249 -222
- package/templates/skills/orc-retro/examples/retro-mock.md +171 -171
- package/templates/skills/orc-route/SKILL.md +188 -165
- package/templates/skills/orc-verify/SKILL.md +103 -84
- package/templates/skills/orc-wait/SKILL.md +163 -0
- package/templates/skills/orc-wiki/SKILL.md +60 -206
- package/templates/skills/orc-wiki/references/phases/phase-0.md +71 -0
- package/templates/skills/orc-wiki/references/phases/phase-1.md +35 -0
- package/templates/skills/orc-wiki/references/phases/phase-2.md +52 -0
- package/templates/skills/orc-wiki/references/phases/phase-3.md +57 -0
- package/templates/skills/orc-wiki/references/phases/phase-3c.md +36 -0
- package/templates/agents/orc-advisor-fable-5.md +0 -50
- package/templates/agents/orc-analyst-fable-5.md +0 -115
- package/templates/agents/orc-judge-fable-5.md +0 -79
- package/templates/agents/orc-planner-fable-5.md +0 -152
- package/templates/agents/orc-reviewer-fable-5.md +0 -57
- package/templates/skills/_shared/fable5-override.md +0 -56
- package/templates/skills/orc-diy/references/blocks/execution.md +0 -42
- package/templates/skills/orc-diy/references/blocks/mock-example.md +0 -22
- package/templates/skills/orc-diy/references/blocks/planning.md +0 -34
- package/templates/skills/orc-diy/references/blocks/review.md +0 -18
- package/templates/skills/orc-diy/references/blocks/scoring.md +0 -16
- package/templates/skills/orc-diy/references/blocks/security.md +0 -25
- package/templates/skills/orc-diy/references/blocks/ship.md +0 -25
- package/templates/skills/orc-diy/references/blocks/summary.md +0 -18
- package/templates/skills/orc-diy/references/blocks/testgen.md +0 -17
- package/templates/skills/orc-diy/references/blocks/trace.md +0 -28
- package/templates/skills/orc-diy/references/blocks/verify.md +0 -25
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/* panels/wait.js — orc ui client
|
|
3
|
+
The usage window, and the wait that answers it.
|
|
4
|
+
|
|
5
|
+
THE PANEL DERIVES NOTHING. Not the state word, not which window is worst,
|
|
6
|
+
not the threshold, not a lane's checkpoint kind, not whether a wait is
|
|
7
|
+
running. It draws `orc usage check --json` and `orc wait … --json`. (The
|
|
8
|
+
Flow-stepper rule: a second idea of the mechanic is exactly the drift this
|
|
9
|
+
panel exists to make impossible.)
|
|
10
|
+
|
|
11
|
+
AND IT CANNOT START A WAIT. A wait lives in a Claude Code session, and
|
|
12
|
+
`orc ui` never runs a lane. What it can do is show the reading, show a wait
|
|
13
|
+
that is running, cancel one, and lift a block. Everything that COSTS a
|
|
14
|
+
decision — starting a wait, blocking a gate — is a copy-able command.
|
|
15
|
+
|
|
16
|
+
Loaded by app.html in the order its numeric prefix names. Classic script,
|
|
17
|
+
no import/export: an ES module import carries no query string, and every
|
|
18
|
+
static request here needs the per-launch session token. */
|
|
19
|
+
|
|
20
|
+
/* ------------------------------------------------------------------- WAIT */
|
|
21
|
+
|
|
22
|
+
// The CLI's own state words, and only those. A friendlier synonym would be a
|
|
23
|
+
// state that does not exist.
|
|
24
|
+
const USAGE_KIND = { ok: "ok", low: "warn", unknown: null };
|
|
25
|
+
|
|
26
|
+
PANELS.wait = function (host) {
|
|
27
|
+
head(host, t("wait.title"), t("wait.sub"));
|
|
28
|
+
|
|
29
|
+
section(
|
|
30
|
+
host,
|
|
31
|
+
() =>
|
|
32
|
+
Promise.all([
|
|
33
|
+
read("/api/usage").then((r) => r.data),
|
|
34
|
+
read("/api/wait/status").then((r) => r.data),
|
|
35
|
+
read("/api/wait/lanes").then((r) => r.data),
|
|
36
|
+
]),
|
|
37
|
+
([usage, status, lanes]) => {
|
|
38
|
+
const out = frag();
|
|
39
|
+
out.append(usageCard(usage));
|
|
40
|
+
out.append(runCard(status));
|
|
41
|
+
out.append(lanesCard(lanes));
|
|
42
|
+
out.append(settingsCard(usage));
|
|
43
|
+
return out;
|
|
44
|
+
}
|
|
45
|
+
);
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
// ── the reading ────────────────────────────────────────────────────────────
|
|
49
|
+
function usageCard(u) {
|
|
50
|
+
const c = card(t("wait.window"));
|
|
51
|
+
if (!u) return c;
|
|
52
|
+
|
|
53
|
+
// UNKNOWN IS A STATE, NOT A GAP. It gets the same card, the same size and a
|
|
54
|
+
// sentence saying a run is never stopped on it — because the alternative is a
|
|
55
|
+
// user believing the gate is watching when Claude Code sends no headers.
|
|
56
|
+
if (u.state === "unknown") {
|
|
57
|
+
const row = el("div", "row-actions");
|
|
58
|
+
row.append(chip(u.state, null));
|
|
59
|
+
c.append(row);
|
|
60
|
+
c.append(el("div", "note", u.reason || ""));
|
|
61
|
+
c.append(el("div", "note", u.note || ""));
|
|
62
|
+
c.append(gateNote(u));
|
|
63
|
+
return c;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
const row = el("div", "row-actions");
|
|
67
|
+
row.append(chip(u.state, USAGE_KIND[u.state]));
|
|
68
|
+
if (u.worst) row.append(chip(t("wait.worst", { w: u.worst }), u.state === "low" ? "warn" : null));
|
|
69
|
+
if (typeof u.reading_age_minutes === "number")
|
|
70
|
+
row.append(chip(tn(u.reading_age_minutes, "wait.age"), null));
|
|
71
|
+
c.append(row);
|
|
72
|
+
|
|
73
|
+
const rows = [];
|
|
74
|
+
for (const w of [u.five_hour, u.seven_day]) {
|
|
75
|
+
if (!w) continue;
|
|
76
|
+
rows.push([
|
|
77
|
+
w.window,
|
|
78
|
+
// The bar is a WIDTH INSIDE the row, so nothing can fight it for space.
|
|
79
|
+
barFor(w),
|
|
80
|
+
]);
|
|
81
|
+
}
|
|
82
|
+
const grid = el("div", "wait-windows");
|
|
83
|
+
for (const [label, node] of rows) {
|
|
84
|
+
const r = el("div", "wait-win");
|
|
85
|
+
r.append(el("span", "mono wait-win-label", label));
|
|
86
|
+
r.append(node);
|
|
87
|
+
grid.append(r);
|
|
88
|
+
}
|
|
89
|
+
c.append(grid);
|
|
90
|
+
|
|
91
|
+
// A context figure the CLI could not compute is an em dash, never a guess.
|
|
92
|
+
const ctx = el("div", "note");
|
|
93
|
+
ctx.textContent =
|
|
94
|
+
typeof u.context === "number"
|
|
95
|
+
? t("wait.context", { n: String(u.context) })
|
|
96
|
+
: t("wait.contextUnknown");
|
|
97
|
+
c.append(ctx);
|
|
98
|
+
if (typeof u.context === "number" && u.context >= 70)
|
|
99
|
+
c.append(el("div", "note warn", t("wait.contextLarge")));
|
|
100
|
+
|
|
101
|
+
c.append(el("div", "note", u.note || ""));
|
|
102
|
+
c.append(gateNote(u));
|
|
103
|
+
return c;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
function barFor(w) {
|
|
107
|
+
const wrap = el("div", "wait-bar-wrap");
|
|
108
|
+
const bar = el("div", "wait-bar" + (w.low ? " low" : ""));
|
|
109
|
+
const fill = el("div", "wait-bar-fill");
|
|
110
|
+
fill.style.width = Math.max(0, Math.min(100, w.used_percentage)) + "%";
|
|
111
|
+
bar.append(fill);
|
|
112
|
+
wrap.append(bar);
|
|
113
|
+
const txt = el("span", "wait-bar-text");
|
|
114
|
+
txt.textContent =
|
|
115
|
+
w.used_percentage +
|
|
116
|
+
"% · " +
|
|
117
|
+
t("wait.left", { n: String(w.remaining_percentage) }) +
|
|
118
|
+
(w.resets_in_minutes != null ? " · " + t("wait.resets", { t: mins(w.resets_in_minutes) }) : "");
|
|
119
|
+
wrap.append(txt);
|
|
120
|
+
return wrap;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
const mins = (n) => (n < 60 ? n + "m" : Math.floor(n / 60) + "h" + (n % 60 ? (n % 60) + "m" : ""));
|
|
124
|
+
|
|
125
|
+
function gateNote(u) {
|
|
126
|
+
const n = el("div", "note");
|
|
127
|
+
n.textContent =
|
|
128
|
+
u.gate === "off"
|
|
129
|
+
? t("wait.gateOff")
|
|
130
|
+
: t("wait.gateOn", { gate: u.gate, pct: String(u.stop_pct) });
|
|
131
|
+
return n;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// ── the run: a wait running, a block standing, or neither ──────────────────
|
|
135
|
+
function runCard(s) {
|
|
136
|
+
const c = card(t("wait.run"));
|
|
137
|
+
if (!s || !s.run) {
|
|
138
|
+
// KEEPS ITS SLOT. "No run in flight" is an answer.
|
|
139
|
+
c.append(empty(t("wait.noRun"), t("wait.noRunHint")));
|
|
140
|
+
c.append(laneCommand("/orc-wait 30", t("wait.startWhy")));
|
|
141
|
+
return c;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
const row = el("div", "row-actions");
|
|
145
|
+
row.append(el("span", "mono", s.run));
|
|
146
|
+
if (s.waiting) row.append(chip(t("wait.waiting"), "warn", true));
|
|
147
|
+
if (s.blocked) row.append(chip(t("wait.blocked"), "bad"));
|
|
148
|
+
if (!s.waiting && !s.blocked) row.append(chip(t("wait.idle"), null));
|
|
149
|
+
c.append(row);
|
|
150
|
+
|
|
151
|
+
if (s.waiting) {
|
|
152
|
+
c.append(
|
|
153
|
+
el(
|
|
154
|
+
"div",
|
|
155
|
+
"note",
|
|
156
|
+
t("wait.hops", {
|
|
157
|
+
mode: s.mode || "?",
|
|
158
|
+
done: String(s.hops_done || 0),
|
|
159
|
+
planned: String(s.hops_planned || "?"),
|
|
160
|
+
ends: s.ends_at ? new Date(s.ends_at).toLocaleTimeString() : "?",
|
|
161
|
+
})
|
|
162
|
+
)
|
|
163
|
+
);
|
|
164
|
+
c.append(el("div", "note", t("wait.zeroTokens")));
|
|
165
|
+
if (s.cancel_requested) c.append(el("div", "note warn", t("wait.cancelPending")));
|
|
166
|
+
// FREE action → a real button.
|
|
167
|
+
else c.append(actionRow("wait.cancel", "/api/wait/cancel", { slug: s.run }, t("wait.cancelWhy")));
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
if (s.blocked) {
|
|
171
|
+
const b = el("div", "wait-block");
|
|
172
|
+
b.append(el("div", "wait-block-head", t("wait.blockHead")));
|
|
173
|
+
// The reason VERBATIM. It is the record that makes the risk the user's.
|
|
174
|
+
b.append(el("div", "wait-block-reason", s.block_reason || ""));
|
|
175
|
+
// The AGE is what keeps an old block from applying invisibly — there is no
|
|
176
|
+
// auto-expiry, so the panel must always show how old it is.
|
|
177
|
+
if (typeof s.block_age_minutes === "number")
|
|
178
|
+
b.append(el("div", "note", tn(s.block_age_minutes, "wait.blockAge")));
|
|
179
|
+
b.append(el("div", "note", t("wait.blockRisk")));
|
|
180
|
+
b.append(actionRow("wait.unblock", "/api/wait/unblock", { slug: s.run }, t("wait.unblockWhy")));
|
|
181
|
+
c.append(b);
|
|
182
|
+
} else {
|
|
183
|
+
// A block CANNOT be created here: it needs a reason typed in the moment.
|
|
184
|
+
c.append(laneCommand("/orc-wait block <reason>", t("wait.blockWhy")));
|
|
185
|
+
}
|
|
186
|
+
return c;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
// NOTE the parameter name: `route` is the ROUTER's function, and shadowing it
|
|
190
|
+
// here made the post-action refresh call a string.
|
|
191
|
+
function actionRow(labelKey, endpoint, body, why) {
|
|
192
|
+
const wrap = el("div", null);
|
|
193
|
+
const row = el("div", "row-actions");
|
|
194
|
+
const b = el("button", "btn btn-sm", t(labelKey));
|
|
195
|
+
b.type = "button";
|
|
196
|
+
b.addEventListener("click", async () => {
|
|
197
|
+
b.disabled = true;
|
|
198
|
+
try {
|
|
199
|
+
const r = await post(endpoint, body);
|
|
200
|
+
toast(r && r.ok ? t("wait.done") : t("wait.failed"), r && r.ok ? "ok" : "bad");
|
|
201
|
+
route();
|
|
202
|
+
} catch (e) {
|
|
203
|
+
toast(t("wait.failed"), "bad", String(e));
|
|
204
|
+
b.disabled = false;
|
|
205
|
+
}
|
|
206
|
+
});
|
|
207
|
+
row.append(b);
|
|
208
|
+
wrap.append(row);
|
|
209
|
+
if (why) wrap.append(el("div", "note", why));
|
|
210
|
+
return wrap;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
// ── which lanes support a wait ─────────────────────────────────────────────
|
|
214
|
+
function lanesCard(d) {
|
|
215
|
+
const c = card(t("wait.lanes"));
|
|
216
|
+
if (!d || !d.lanes) return c;
|
|
217
|
+
c.append(el("div", "note", t("wait.lanesWhy")));
|
|
218
|
+
const list = el("div", "wait-lanes");
|
|
219
|
+
for (const l of d.lanes) {
|
|
220
|
+
const r = el("div", "wait-lane");
|
|
221
|
+
r.append(el("span", "mono wait-lane-name", l.lane));
|
|
222
|
+
// `none` KEEPS ITS SLOT and reads as its own state, never as a blank.
|
|
223
|
+
r.append(chip(l.checkpoint, l.modes_differ ? "ok" : null));
|
|
224
|
+
r.append(el("span", "wait-lane-safe", l.safe_point));
|
|
225
|
+
r.append(el("div", "note wait-lane-detail", l.detail));
|
|
226
|
+
list.append(r);
|
|
227
|
+
}
|
|
228
|
+
c.append(list);
|
|
229
|
+
c.append(el("div", "note", d.note || ""));
|
|
230
|
+
return c;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
// ── settings: read-only here, edited where every other key is edited ───────
|
|
234
|
+
function settingsCard(u) {
|
|
235
|
+
const c = card(t("wait.settings"));
|
|
236
|
+
c.append(
|
|
237
|
+
kvList([
|
|
238
|
+
["usage_gate", u && u.gate ? u.gate : "—"],
|
|
239
|
+
["usage_stop_pct", u && u.stop_pct != null ? String(u.stop_pct) : "—"],
|
|
240
|
+
])
|
|
241
|
+
);
|
|
242
|
+
// A SECOND editor for keys Settings already stages would be a second idea of
|
|
243
|
+
// the same thing — the drift this panel exists to prevent. Route to the panel
|
|
244
|
+
// that can change it instead (the FINDING_ROUTE rule).
|
|
245
|
+
c.append(el("div", "note", t("wait.settingsWhy")));
|
|
246
|
+
const b = el("button", "btn btn-ghost btn-sm", t("wait.openSettings"));
|
|
247
|
+
b.type = "button";
|
|
248
|
+
b.addEventListener("click", () => (location.hash = "#/settings"));
|
|
249
|
+
const row = el("div", "row-actions");
|
|
250
|
+
row.append(b);
|
|
251
|
+
c.append(row);
|
|
252
|
+
return c;
|
|
253
|
+
}
|
package/package.json
CHANGED
|
@@ -1,39 +1,39 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@azure-id/orc",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "ORC — an orchestrator skill constellation for Claude Code: intake, planning, scored parallel subagents, code-pattern matching, review, verify, ship, plus a project knowledge-base wiki.",
|
|
5
|
-
"bin": {
|
|
6
|
-
"orc": "bin/cli.js"
|
|
7
|
-
},
|
|
8
|
-
"files": [
|
|
9
|
-
"README.md",
|
|
10
|
-
"README-id.md",
|
|
11
|
-
"CHANGELOG.md",
|
|
12
|
-
"bin/",
|
|
13
|
-
"mock-run/",
|
|
14
|
-
"templates/"
|
|
15
|
-
],
|
|
16
|
-
"scripts": {
|
|
17
|
-
"postinstall": "node -e \"try{require('fs').accessSync(require('path').join(__dirname,'bin','cli.js'));console.log('\\nORC installed. Run: orc init (or orc init --global)\\n')}catch(e){console.error('\\n[orc] WARNING: bin/cli.js missing from this install — the repo/publish was incomplete. Reinstall from a complete source.\\n')}\"",
|
|
18
|
-
"build:agents": "node bin/build-agents.js",
|
|
19
|
-
"test": "node
|
|
20
|
-
"verify": "node bin/build-agents.js --check && node bin/verify-package.js && node bin/verify-contracts.js",
|
|
21
|
-
"prepack": "node bin/build-agents.js --check && node bin/verify-package.js && node bin/verify-contracts.js && node
|
|
22
|
-
},
|
|
23
|
-
"keywords": [
|
|
24
|
-
"claude",
|
|
25
|
-
"claude-code",
|
|
26
|
-
"orchestrator",
|
|
27
|
-
"skills",
|
|
28
|
-
"agents",
|
|
29
|
-
"ai"
|
|
30
|
-
],
|
|
31
|
-
"license": "MIT",
|
|
32
|
-
"engines": {
|
|
33
|
-
"node": ">=18"
|
|
34
|
-
},
|
|
35
|
-
"repository": {
|
|
36
|
-
"type": "git",
|
|
37
|
-
"url": "github:azure-id/orc"
|
|
38
|
-
}
|
|
39
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@azure-id/orc",
|
|
3
|
+
"version": "1.1.0",
|
|
4
|
+
"description": "ORC — an orchestrator skill constellation for Claude Code: intake, planning, scored parallel subagents, code-pattern matching, review, verify, ship, plus a project knowledge-base wiki.",
|
|
5
|
+
"bin": {
|
|
6
|
+
"orc": "bin/cli.js"
|
|
7
|
+
},
|
|
8
|
+
"files": [
|
|
9
|
+
"README.md",
|
|
10
|
+
"README-id.md",
|
|
11
|
+
"CHANGELOG.md",
|
|
12
|
+
"bin/",
|
|
13
|
+
"mock-run/",
|
|
14
|
+
"templates/"
|
|
15
|
+
],
|
|
16
|
+
"scripts": {
|
|
17
|
+
"postinstall": "node -e \"try{require('fs').accessSync(require('path').join(__dirname,'bin','cli.js'));console.log('\\nORC installed. Run: orc init (or orc init --global)\\n')}catch(e){console.error('\\n[orc] WARNING: bin/cli.js missing from this install — the repo/publish was incomplete. Reinstall from a complete source.\\n')}\"",
|
|
18
|
+
"build:agents": "node bin/build-agents.js",
|
|
19
|
+
"test": "node bin/test-run.js",
|
|
20
|
+
"verify": "node bin/build-agents.js --check && node bin/verify-package.js && node bin/verify-contracts.js",
|
|
21
|
+
"prepack": "node bin/build-agents.js --check && node bin/verify-package.js && node bin/verify-contracts.js && node bin/test-run.js"
|
|
22
|
+
},
|
|
23
|
+
"keywords": [
|
|
24
|
+
"claude",
|
|
25
|
+
"claude-code",
|
|
26
|
+
"orchestrator",
|
|
27
|
+
"skills",
|
|
28
|
+
"agents",
|
|
29
|
+
"ai"
|
|
30
|
+
],
|
|
31
|
+
"license": "MIT",
|
|
32
|
+
"engines": {
|
|
33
|
+
"node": ">=18"
|
|
34
|
+
},
|
|
35
|
+
"repository": {
|
|
36
|
+
"type": "git",
|
|
37
|
+
"url": "github:azure-id/orc"
|
|
38
|
+
}
|
|
39
|
+
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Single-role, model-specific agents. The orchestrator dispatches BY AGENT NAME —
|
|
4
4
|
model is pinned in frontmatter, not requested in prose. No agent is multi-role.
|
|
5
5
|
|
|
6
|
-
## Executors (score-mapped by the single
|
|
6
|
+
## Executors (score-mapped by the single 6-band table in config.md)
|
|
7
7
|
|
|
8
8
|
| Score band | Agent | Model | Effort |
|
|
9
9
|
|-----------|-------|-------|--------|
|
|
@@ -11,14 +11,20 @@ model is pinned in frontmatter, not requested in prose. No agent is multi-role.
|
|
|
11
11
|
| [30,40) | orc-executor-sonnet-4-6-med | claude-sonnet-4-6 | medium |
|
|
12
12
|
| [40,55) | orc-executor-sonnet-4-6-high | claude-sonnet-4-6 | high |
|
|
13
13
|
| [55,65) | orc-executor-sonnet-5-high | claude-sonnet-5 | high |
|
|
14
|
-
| [65,
|
|
15
|
-
| [
|
|
16
|
-
| [80,90) | orc-executor-opus-4-8-high | claude-opus-4-8 | high |
|
|
17
|
-
| [90,100] | orc-executor-opus-5-high | claude-opus-5 | high |
|
|
14
|
+
| [65,90) | orc-executor-opus-5-low | claude-opus-5 | low |
|
|
15
|
+
| [90,100] | orc-executor-opus-5-med | claude-opus-5 | medium |
|
|
18
16
|
|
|
19
|
-
Score→executor mapping lives in config.md (one canonical
|
|
17
|
+
Score→executor mapping lives in config.md (one canonical 6-band table;
|
|
20
18
|
`rubric_bands` is granularity only, not a preset selector).
|
|
21
19
|
|
|
20
|
+
**Executors no band names — they still ship.**
|
|
21
|
+
`orc-executor-opus-4-7-med`, `orc-executor-opus-4-7-high`,
|
|
22
|
+
`orc-executor-opus-4-8-high` and `orc-executor-opus-5-high` are still generated
|
|
23
|
+
and still installed. Since v1.0.0 they are reachable only when a user names one
|
|
24
|
+
explicitly: `rubric_bands_override`, `orc diy`'s `fixed_executor`, or
|
|
25
|
+
`extra_fallback_agent`. They are not deleted because a table change is not a
|
|
26
|
+
model change, and an agent's model change is always a RENAME.
|
|
27
|
+
|
|
22
28
|
## Fixed-role agents
|
|
23
29
|
|
|
24
30
|
| Agent | Model | Effort | Role |
|
|
@@ -36,8 +42,8 @@ Score→executor mapping lives in config.md (one canonical 8-band table;
|
|
|
36
42
|
| orc-retro-sonnet-5-high | claude-sonnet-5 | high | mine behavior traces → calibration report (/orc-retro; read-only) |
|
|
37
43
|
| orc-wiki-scanner-opus-4-8-high | claude-opus-4-8 | high | scan ONE wiki coverage area → evidence-anchored doc body + crosslink tags (/orc-wiki only; read-only against the project). The DEEP half of the v0.46.0 tier ladder: first scan · STRUCTURAL · wide delta · a new exported symbol |
|
|
38
44
|
| orc-wiki-scanner-sonnet-5-high | claude-sonnet-5 | high | the LIGHT half of the same ladder — an existing doc whose covered files moved by a small, no-new-surface delta. IDENTICAL return contract; it escalates with `needs_context` rather than under-delivering. Never used for a first scan |
|
|
39
|
-
| orc-executor-opus-5-med | claude-opus-5 | medium |
|
|
40
|
-
| orc-executor-opus-5-low | claude-opus-5 | low |
|
|
45
|
+
| orc-executor-opus-5-med | claude-opus-5 | medium | the `[90,100]` band in BOTH tables |
|
|
46
|
+
| orc-executor-opus-5-low | claude-opus-5 | low | the default table's `[65,90)`, `opus5_only`'s `[0,90)`, and the forced mini/fast executor |
|
|
41
47
|
| orc-advisor-opus-5-xhigh | claude-opus-5 | xhigh | ultra Phase U0 advisory brief + rubric + clarification questions (read-only; /orc-ultra only) |
|
|
42
48
|
| orc-judge-opus-5-xhigh | claude-opus-5 | xhigh | ultra judgment gates — analysis / plan / implementation (read-only; /orc-ultra only) |
|
|
43
49
|
| orc-learn-writer-opus-5-low | claude-opus-5 | low | deepen ONE feature → learning-docs/<slug>/ (/orc-learn only; git-ignored output) |
|
|
@@ -58,15 +64,14 @@ Score→executor mapping lives in config.md (one canonical 8-band table;
|
|
|
58
64
|
|
|
59
65
|
`opus5_only` FORCES every dispatched role onto `claude-opus-5`, with effort as
|
|
60
66
|
the only cost dial. Each agent below replaces its default with the same slice
|
|
61
|
-
and the same return contract. Effort is PINNED per role
|
|
62
|
-
|
|
67
|
+
and the same return contract. Effort is PINNED per role — no CLI rewrites
|
|
68
|
+
these. Full mapping + precedence:
|
|
63
69
|
`../skills/_shared/opus5-only.md`.
|
|
64
70
|
|
|
65
71
|
| Agent | Model | Effort | Replaces |
|
|
66
72
|
|-------|-------|--------|----------|
|
|
67
|
-
| orc-executor-opus-5-low | claude-opus-5 | low | the `[0,
|
|
68
|
-
| orc-executor-opus-5-med | claude-opus-5 | medium | the `[
|
|
69
|
-
| orc-executor-opus-5-high | claude-opus-5 | high | the `[80,100]` band |
|
|
73
|
+
| orc-executor-opus-5-low | claude-opus-5 | low | the `[0,90)` band · orc-mini's and orc-fast's fixed executor |
|
|
74
|
+
| orc-executor-opus-5-med | claude-opus-5 | medium | the `[90,100]` band |
|
|
70
75
|
| orc-analyze-mini-opus-5-med | claude-opus-5 | medium | orc-analyze-mini-sonnet-5-high |
|
|
71
76
|
| orc-planner-mini-opus-5-med | claude-opus-5 | medium | orc-planner-mini-sonnet-5-high |
|
|
72
77
|
| orc-scout-opus-5-low | claude-opus-5 | low | orc-scout-sonnet-4-6-high |
|
|
@@ -80,22 +85,6 @@ verifier, test-author, combiner, learn-writer, advisor, judge — dispatch
|
|
|
80
85
|
unchanged under this mode. **Never forced:** `orc-trace-writer-haiku-4-5` (it
|
|
81
86
|
transcribes a packet, no reasoning) and orc-diy (its table is compile-owned).
|
|
82
87
|
|
|
83
|
-
## Fable 5 role-override agents (hard-gated; dispatched only when configured)
|
|
84
|
-
|
|
85
|
-
*(Entirely INERT while `opus5_only: true` — that mode outranks this one.)*
|
|
86
|
-
|
|
87
|
-
Used ONLY when `fable5_enabled: true` and the role is in `fable5_roles` — each
|
|
88
|
-
replaces its default role agent with the same slice/contract. Effort defaults to
|
|
89
|
-
`medium` and is rewritten in-place by `orc config set fable5_effort <v>`.
|
|
90
|
-
|
|
91
|
-
| Agent | Model | Effort | Replaces |
|
|
92
|
-
|-------|-------|--------|----------|
|
|
93
|
-
| orc-analyst-fable-5 | claude-fable-5 | fable5_effort | orc-system-analyst-opus-5-high |
|
|
94
|
-
| orc-planner-fable-5 | claude-fable-5 | fable5_effort | orc-planner-opus-5-med |
|
|
95
|
-
| orc-advisor-fable-5 | claude-fable-5 | fable5_effort | orc-advisor-opus-5-xhigh (ultra) |
|
|
96
|
-
| orc-judge-fable-5 | claude-fable-5 | fable5_effort | orc-judge-opus-5-xhigh (ultra) |
|
|
97
|
-
| orc-reviewer-fable-5 | claude-fable-5 | fable5_effort | orc-reviewer-opus-5-med |
|
|
98
|
-
|
|
99
88
|
Mini execution reuses orc-executor-sonnet-5-high. Fast-lane (orc-fast)
|
|
100
89
|
execution reuses orc-executor-sonnet-4-6-high — no dedicated agent. Under
|
|
101
90
|
`opus5_only` both reuse orc-executor-opus-5-low.
|
|
@@ -114,8 +103,7 @@ agent to spawn before EVERY dispatch, and reuses shipped agents:
|
|
|
114
103
|
The only dispatch it does not re-ask is build-repair rounds 1–2, which reuse the
|
|
115
104
|
executor the user already chose for that entry; round 3 asks again.
|
|
116
105
|
|
|
117
|
-
**`opus5_only
|
|
118
|
-
all INERT in this lane** — they would silently collapse the user's choice. It is
|
|
106
|
+
**`opus5_only` and `rubric_bands_override` are both INERT in this lane** — they would silently collapse the user's choice. It is
|
|
119
107
|
the one exception to `opus5_only`'s otherwise flat precedence. See
|
|
120
108
|
`skills/_shared/opus5-only.md` and `skills/orc-quick/references/dispatch-gate.md`.
|
|
121
109
|
|
|
@@ -136,12 +124,12 @@ The orchestrator (main session) is NOT an agent file.
|
|
|
136
124
|
Model IDs use the Platform/API dateless format (confirmed at
|
|
137
125
|
platform.claude.com/docs/en/about-claude/models/model-ids-and-versions):
|
|
138
126
|
claude-haiku-4-5, claude-sonnet-4-6, claude-sonnet-5, claude-opus-4-7,
|
|
139
|
-
claude-opus-4-8
|
|
140
|
-
|
|
127
|
+
claude-opus-4-8 and claude-opus-5 (the top executor band + the core fixed
|
|
128
|
+
roles).
|
|
141
129
|
|
|
142
130
|
1. **Run `/agents`** to confirm Claude Code accepts these full IDs in agent
|
|
143
|
-
frontmatter — in particular `claude-haiku-4-5` and `claude-
|
|
144
|
-
|
|
131
|
+
frontmatter — in particular `claude-haiku-4-5` and `claude-opus-5`. If it
|
|
132
|
+
wants short aliases (opus/sonnet/haiku) or dated IDs, adjust
|
|
145
133
|
each `model:` field. The full IDs are valid at the API level but Claude Code
|
|
146
134
|
may normalize differently.
|
|
147
135
|
2. **Confirm `effort:` is a valid CLI frontmatter field.** If the CLI ignores
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: orc-executor-opus-4-7-high
|
|
3
3
|
description: >
|
|
4
4
|
ORC executor — claude-opus-4-7, high effort. Dispatched by the ORC orchestrator to implement
|
|
5
|
-
a single task whose score falls in the
|
|
5
|
+
a single task whose score falls in the no default band — reachable via rubric_bands_override, orc diy fixed_executor, or extra_fallback_agent band. Single-role: execution only.
|
|
6
6
|
Takes a task slice and implements exactly that task.
|
|
7
7
|
model: claude-opus-4-7
|
|
8
8
|
effort: high
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: orc-executor-opus-4-7-med
|
|
3
3
|
description: >
|
|
4
4
|
ORC executor — claude-opus-4-7, medium effort. Dispatched by the ORC orchestrator to implement
|
|
5
|
-
a single task whose score falls in the
|
|
5
|
+
a single task whose score falls in the no default band — reachable via rubric_bands_override, orc diy fixed_executor, or extra_fallback_agent band. Single-role: execution only.
|
|
6
6
|
Takes a task slice and implements exactly that task.
|
|
7
7
|
model: claude-opus-4-7
|
|
8
8
|
effort: medium
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: orc-executor-opus-4-8-high
|
|
3
3
|
description: >
|
|
4
4
|
ORC executor — claude-opus-4-8, high effort. Dispatched by the ORC orchestrator to implement
|
|
5
|
-
a single task whose score falls in the
|
|
5
|
+
a single task whose score falls in the no default band — reachable via rubric_bands_override, orc diy fixed_executor, or extra_fallback_agent band. Single-role: execution only.
|
|
6
6
|
Takes a task slice and implements exactly that task.
|
|
7
7
|
model: claude-opus-4-8
|
|
8
8
|
effort: high
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: orc-executor-opus-5-high
|
|
3
3
|
description: >
|
|
4
4
|
ORC executor — claude-opus-5, high effort. Dispatched by the ORC orchestrator to implement
|
|
5
|
-
a single task whose score falls in the
|
|
5
|
+
a single task whose score falls in the no default band — reachable via rubric_bands_override, orc diy fixed_executor, or extra_fallback_agent band. Single-role: execution only.
|
|
6
6
|
Takes a task slice and implements exactly that task.
|
|
7
7
|
model: claude-opus-5
|
|
8
8
|
effort: high
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: orc-executor-opus-5-low
|
|
3
3
|
description: >
|
|
4
4
|
ORC executor — claude-opus-5, low effort. Dispatched by the ORC orchestrator to implement
|
|
5
|
-
a single task whose score falls in the
|
|
5
|
+
a single task whose score falls in the upper-complexity [65,90) band. Single-role: execution only.
|
|
6
6
|
Takes a task slice and implements exactly that task.
|
|
7
7
|
model: claude-opus-5
|
|
8
8
|
effort: low
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: orc-executor-opus-5-med
|
|
3
3
|
description: >
|
|
4
4
|
ORC executor — claude-opus-5, medium effort. Dispatched by the ORC orchestrator to implement
|
|
5
|
-
a single task whose score falls in the
|
|
5
|
+
a single task whose score falls in the highest-complexity [90,100] band. Single-role: execution only.
|
|
6
6
|
Takes a task slice and implements exactly that task.
|
|
7
7
|
model: claude-opus-5
|
|
8
8
|
effort: medium
|