@azure-id/orc 0.55.2 → 0.56.1
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 +2218 -2064
- package/README-id.md +726 -545
- package/README.md +188 -9
- package/bin/cli.js +849 -44
- package/bin/webui/i18n/en/overview.json +90 -89
- package/bin/webui/i18n/id/overview.json +90 -89
- package/bin/webui/js/03-md.js +9 -3
- package/bin/webui/js/panels/overview.js +453 -447
- package/package.json +39 -39
- package/templates/skills/_shared/extra-dispatch.md +135 -1
- package/templates/skills/orc-quick/SKILL.md +313 -313
- package/templates/skills/orc-quick/references/dispatch-gate.md +10 -1
package/README.md
CHANGED
|
@@ -7,14 +7,14 @@
|
|
|
7
7
|
*Intake → analyze → plan → score → parallel subagents → review → verify → ship.*
|
|
8
8
|
|
|
9
9
|

|
|
10
|
-

|
|
11
11
|

|
|
12
12
|

|
|
13
13
|

|
|
14
14
|

|
|
15
15
|

|
|
16
16
|
|
|
17
|
-
**Latest: v0.
|
|
17
|
+
**Latest: v0.56.1** · updated 2026-08-28 · [full changelog](CHANGELOG.md)
|
|
18
18
|
|
|
19
19
|
**On npm: [`@azure-id/orc`](https://www.npmjs.com/package/@azure-id/orc)** — `npm i -g @azure-id/orc`
|
|
20
20
|
|
|
@@ -24,6 +24,38 @@
|
|
|
24
24
|
|
|
25
25
|
---
|
|
26
26
|
|
|
27
|
+
> [!CAUTION]
|
|
28
|
+
> **Upgrading from a version before v0.56.0? Do this once.**
|
|
29
|
+
>
|
|
30
|
+
> The package moved from the unscoped `orc` to **`@azure-id/orc`**. Both declare
|
|
31
|
+
> the same `orc` command, and npm will not hand that command to the new package
|
|
32
|
+
> while the old one still holds it — so **every** install source fails with the
|
|
33
|
+
> same error, and `orc upgrade` cannot fix itself:
|
|
34
|
+
>
|
|
35
|
+
> ```text
|
|
36
|
+
> npm error code EEXIST
|
|
37
|
+
> npm error File exists: C:\Users\you\AppData\Roaming\npm\orc
|
|
38
|
+
> ```
|
|
39
|
+
>
|
|
40
|
+
> Run these two lines once. Nothing in your `.claude/` is touched, and your
|
|
41
|
+
> `orc.config.yaml` survives:
|
|
42
|
+
>
|
|
43
|
+
> ```bash
|
|
44
|
+
> npm uninstall -g orc # release the `orc` command from the old package
|
|
45
|
+
> npm i -g @azure-id/orc # install the current one
|
|
46
|
+
> orc update # re-apply into this project (add --global for ~/.claude)
|
|
47
|
+
> ```
|
|
48
|
+
>
|
|
49
|
+
> **From v0.56.0 onward `orc upgrade` handles this for you** — it removes the old
|
|
50
|
+
> package first, then installs, and says so while it does it. `orc doctor` also
|
|
51
|
+
> reports the old package by name if it is still there.
|
|
52
|
+
>
|
|
53
|
+
> Do **not** reach for `npm i -g -f`. `--force` overwrites the command file and
|
|
54
|
+
> leaves the superseded package installed underneath, owning nothing and never
|
|
55
|
+
> updated again.
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
27
59
|
> [!IMPORTANT]
|
|
28
60
|
> **`orc-open` is released — ORC for non-Claude agents.**
|
|
29
61
|
> A provider-agnostic port of the pipeline:
|
|
@@ -178,8 +210,11 @@ You do not have to run a command to hear about it: the same notice appears
|
|
|
178
210
|
inside Claude Code through ORC's hooks, at **zero model tokens** — hooks are
|
|
179
211
|
scripts Claude Code runs, not model turns.
|
|
180
212
|
|
|
181
|
-
|
|
182
|
-
|
|
213
|
+
`orc upgrade` tries the npm registry first, then a plain tarball, then the
|
|
214
|
+
GitHub spec — and it remembers which one worked. If the old unscoped `orc`
|
|
215
|
+
package is still installed, it removes that first (announced), because npm
|
|
216
|
+
cannot give the `orc` command to `@azure-id/orc` while another package owns it.
|
|
217
|
+
See the caution at the top of this README for the one-time manual version.
|
|
183
218
|
|
|
184
219
|
</details>
|
|
185
220
|
|
|
@@ -324,6 +359,8 @@ orc ui --stop # shut this project's server down
|
|
|
324
359
|
| Crosslink | **Design** (the boundary as a graph) and **Settings** (each peer's freshness) | `crosslink add` / `remove` |
|
|
325
360
|
| Promises · Boundary · Self-serve | the pact ledger, the boundary cards, and the surfaces a non-developer can change | `pact check`, `pact sync`, `handoff set` |
|
|
326
361
|
| **Docs** | every `/orc-doc` document as a **ribbon** — one block per section, sized by its length and coloured by its state — plus the section files with their sub-parts, the wave strip, the lint health card and the wave preview | `doc compile` · `doc migrate` |
|
|
362
|
+
| **Extra** | **six tabs**: the connection setup, the local tools and their state, the band ladder and the six positions, spending per profile per band, and **Recovery** — every dispatch that never reported back, with what it left on disk | `extra add` / `ping` / `route` / `role` |
|
|
363
|
+
| **Challenge** | every `/orc-challenge` cycle: the frozen goal, the council roster and what each lens raised, the findings with their dispositions, and whether the pass is computed or blocked | `challenge record` · `accept` · `rebut` |
|
|
327
364
|
| **Mocked Skill Use** | every mocked run that ships with ORC, grouped and searchable, with a reading pane | — |
|
|
328
365
|
| Learn | the `orc onboarding` walkthrough, one section at a time | — |
|
|
329
366
|
| Experiment | every lane with a copy button; opens a Claude session in a terminal | — |
|
|
@@ -349,6 +386,77 @@ CSS.
|
|
|
349
386
|
|
|
350
387
|
---
|
|
351
388
|
|
|
389
|
+
## Running part of the ladder somewhere else — `orc extra`
|
|
390
|
+
|
|
391
|
+
**The orchestrator is always Claude.** What Extra changes is *who executes a
|
|
392
|
+
slice*: a score band you own, or one of six named positions, can point at
|
|
393
|
+
DeepSeek, GLM, Kimi, MiniMax, Qwen, a local Ollama, or a coding CLI you already
|
|
394
|
+
have signed in (opencode, codex). Everything downstream — the smoke gate, the TDD
|
|
395
|
+
gate, the reviewer, the worktree-delta check — is engine-blind, so nothing learns
|
|
396
|
+
the work was foreign.
|
|
397
|
+
|
|
398
|
+
**Off by default, and it cannot be armed until something has actually answered.**
|
|
399
|
+
|
|
400
|
+
```bash
|
|
401
|
+
orc extra providers # the shipped, dated catalog — providers, never models
|
|
402
|
+
orc extra tools # local CLIs: absent · outdated · unauthenticated · ready
|
|
403
|
+
orc extra add ds --provider deepseek --engine api --env-key DEEPSEEK_API_KEY
|
|
404
|
+
orc extra ping ds # the connection gate: a ladder, and nothing reads stronger than it is
|
|
405
|
+
orc extra models ds --test <id> # a LISTED model can still be dead upstream
|
|
406
|
+
orc extra health ds --model <id> # …and a working model is not one that FINISHES
|
|
407
|
+
orc extra route set 40-55 ds/deepseek-chat # a score band
|
|
408
|
+
orc extra role set doc-writer ds/deepseek-chat # or a named position
|
|
409
|
+
orc config set extra_enabled true
|
|
410
|
+
```
|
|
411
|
+
|
|
412
|
+
- **The catalog ships providers and never models.** A shipped model id is wrong
|
|
413
|
+
within a quarter and wrong *silently* — a 404 mid-wave. `orc extra ping` reads
|
|
414
|
+
the live list and caches it; nothing invents a name. Same for price: a cost
|
|
415
|
+
figure ORC did not price itself is never printed, it reads as an em dash.
|
|
416
|
+
- **Every armed run says so before wave 1.** Routing work off Claude silently is
|
|
417
|
+
the failure this whole subsystem is shaped around.
|
|
418
|
+
- **Two hard hold-backs**: a task with a cited `risk[]` (auth, money, migration,
|
|
419
|
+
security, concurrency, data-integrity) stays on Claude unless you say
|
|
420
|
+
otherwise, and a `/orc-boundary` REFUSE area holds even in `warn`.
|
|
421
|
+
- **A foreign return is foreign input.** It is the only foreign class that edits
|
|
422
|
+
your worktree, so what it says it did is a *claim*, checked against the tree.
|
|
423
|
+
- **Your key never reaches a command line.** It travels on stdin into an
|
|
424
|
+
encrypted vault, or it stays in an environment variable, or the tool holds its
|
|
425
|
+
own — and the passphrase is a **deadline**, not a second factor.
|
|
426
|
+
- **Six positions for the lanes that pin an agent instead of scoring a task**:
|
|
427
|
+
`quick-executor` · `fast-executor` · `doc-writer` · `doc-checker` ·
|
|
428
|
+
`wiki-scanner-deep` · `wiki-scanner-light`. A position with no row keeps its
|
|
429
|
+
slot and reads as its pinned Claude agent — "I left the checker on Claude on
|
|
430
|
+
purpose" and "there is no checker" must never look the same.
|
|
431
|
+
|
|
432
|
+
**When a foreign worker fails, it is a position and not a blank page.** ORC
|
|
433
|
+
journals the baseline *before the first byte leaves the machine*, so a worker cut
|
|
434
|
+
off mid-write is **reconciled and resumed** — never re-dispatched from scratch
|
|
435
|
+
onto a file that is already two-thirds written.
|
|
436
|
+
|
|
437
|
+
- **`extra_stall_s` (default 180)** stops a worker that has produced nothing for
|
|
438
|
+
that long. It is reset by observable progress — the worker's stream, its
|
|
439
|
+
stderr, or a declared file that changed on disk — so it never fires on one that
|
|
440
|
+
is merely slow. `stalled` is retryable, which is what makes the resume ORC's
|
|
441
|
+
own spelling of typing `continue`.
|
|
442
|
+
- **`extra_fallback_agent` (default `band`)** decides who picks the task up.
|
|
443
|
+
`ask` stops and puts the menu to you; any installed agent name pins one. It
|
|
444
|
+
changes *who*, never the score, the declared files or the acceptance criteria.
|
|
445
|
+
- **Every dispatch writes its own spend record**, so a cost report never depends
|
|
446
|
+
on a run remembering to narrate what it spent. `orc extra stats` merges the
|
|
447
|
+
spend log, the traces and saved returns, and always says how many rows came
|
|
448
|
+
from each.
|
|
449
|
+
|
|
450
|
+
**`/orc-quick` is inert here** and announces it — that lane asks which agent
|
|
451
|
+
before every dispatch, so no setting may pre-answer it. **`/orc-challenge` never
|
|
452
|
+
routes foreign**: swapping a lens for a different model does not make the lane
|
|
453
|
+
cheaper, it changes what is being measured.
|
|
454
|
+
|
|
455
|
+
**The whole subsystem, with every command and key:
|
|
456
|
+
[guides/extra-models.md](guides/extra-models.md).**
|
|
457
|
+
|
|
458
|
+
---
|
|
459
|
+
|
|
352
460
|
## How the model is picked
|
|
353
461
|
|
|
354
462
|
Each task is scored 0–100 by **arithmetic, not judgement**: the planner reports
|
|
@@ -389,12 +497,13 @@ clobbers. `orc ui` ▸ Settings edits the same keys through the same validators.
|
|
|
389
497
|
|
|
390
498
|
```
|
|
391
499
|
templates/
|
|
392
|
-
├── skills/
|
|
393
|
-
│
|
|
394
|
-
│ orc-analyze-mini,
|
|
395
|
-
|
|
500
|
+
├── skills/ 31 skill folders, 38 SKILL.md files (a lane may ship subskills) —
|
|
501
|
+
│ the lanes above, plus the ones with no command of their own:
|
|
502
|
+
│ context-combiner, orc-advisor, orc-judge, orc-analyze-mini,
|
|
503
|
+
│ and _shared/ (cross-lane contract prose)
|
|
504
|
+
├── commands/ 29 slash commands
|
|
396
505
|
├── hooks/ effort guard (PreToolUse) · statusline warning · behavior trace
|
|
397
|
-
└── agents/
|
|
506
|
+
└── agents/ 51 model-pinned subagents + MODEL-MAPPING.md
|
|
398
507
|
bin/cli.js installer, config editor, flow composer, run-state reader, and
|
|
399
508
|
the deterministic half of every lane. Every read speaks --json
|
|
400
509
|
bin/webui/ `orc ui` — the local control panel: css/ + js/ + i18n/<lang>/ +
|
|
@@ -465,6 +574,76 @@ a current audit: [EVAL-REPORT.md](EVAL-REPORT.md).
|
|
|
465
574
|
**Full history: [CHANGELOG.md](CHANGELOG.md)** — or `orc changelog`, which prints
|
|
466
575
|
only what is newer than the version you have.
|
|
467
576
|
|
|
577
|
+
### v0.56.1 - a worker that is alive and doing nothing _(2026-08-28)_
|
|
578
|
+
|
|
579
|
+
**Still on the unscoped `orc` package?** Do this once before anything else -
|
|
580
|
+
your `orc upgrade` is the pre-v0.56.0 one and it cannot install itself:
|
|
581
|
+
|
|
582
|
+
- **Step 1 - release the command from the old package:** `npm uninstall -g orc`
|
|
583
|
+
- **Step 2 - install the current package:** `npm i -g @azure-id/orc`
|
|
584
|
+
- **Step 3 - re-apply it to your project:** `orc update`
|
|
585
|
+
|
|
586
|
+
**Do not use `npm i -g -f`.** Full detail in v0.56.0 below.
|
|
587
|
+
|
|
588
|
+
**An opencode dispatch that goes quiet mid-task used to burn the whole
|
|
589
|
+
fifteen-minute wall clock and then report `timeout`.** That word is a statement
|
|
590
|
+
about ORC's patience and reads as a budget somebody should raise. It was a
|
|
591
|
+
POSITION somebody should resume from.
|
|
592
|
+
|
|
593
|
+
- **`extra_stall_s` (default 180, `0` disables)** stops a foreign worker that
|
|
594
|
+
has produced NOTHING for that long. Reset by observable progress - the
|
|
595
|
+
worker's stream, its stderr, or a declared file that changed on disk - so it
|
|
596
|
+
never fires on a worker that is merely slow. Engine `cli` only.
|
|
597
|
+
- **`stalled` is its own failure class and it is RETRYABLE**, so
|
|
598
|
+
`orc extra reconcile` reads the position and `extra_resume` continues from
|
|
599
|
+
what is on disk instead of starting over. That is ORC's spelling of typing
|
|
600
|
+
`continue`. There is deliberately no stdin nudge: `opencode run` is not an
|
|
601
|
+
interactive session, so a keystroke nobody reads would be a fake fix.
|
|
602
|
+
- **Every engine-`cli` return carries a `timeline`** - first byte, last
|
|
603
|
+
progress, longest quiet gap, both budgets - on success as well as failure.
|
|
604
|
+
- **`orc extra health <profile> [--model <id>]`** answers "does this model
|
|
605
|
+
stall", through the SAME watchdog a dispatch uses. A listed model is not a
|
|
606
|
+
working model, and a working model is not a model that finishes.
|
|
607
|
+
- **`extra_fallback_agent` (default `band`)** decides who picks the task up.
|
|
608
|
+
`ask` STOPS and puts the menu to you; any installed agent name pins one. Under
|
|
609
|
+
`ask` the lane does not choose. It changes WHO, never the score, the declared
|
|
610
|
+
files or the acceptance criteria. INERT in `/orc-quick`.
|
|
611
|
+
|
|
612
|
+
### v0.56.0 - a rename moved the command, and nobody could reach the fix _(2026-08-27)_
|
|
613
|
+
|
|
614
|
+
**READ THIS FIRST IF YOUR `orc upgrade` IS FAILING.** On a version before
|
|
615
|
+
v0.56.0, this release cannot install itself - your `orc upgrade` is the OLD one.
|
|
616
|
+
Run these three lines once, by hand:
|
|
617
|
+
|
|
618
|
+
- **Step 1 - release the command from the old package:** `npm uninstall -g orc`
|
|
619
|
+
- **Step 2 - install the current package:** `npm i -g @azure-id/orc`
|
|
620
|
+
- **Step 3 - re-apply it to your project:** `orc update` (add `--global` to also
|
|
621
|
+
refresh `~/.claude`)
|
|
622
|
+
|
|
623
|
+
Then `orc version` should print 0.56.0 or newer. Your `.claude/` and your
|
|
624
|
+
`orc.config.yaml` are untouched. **Do not use `npm i -g -f`.**
|
|
625
|
+
|
|
626
|
+
**The package moved from the unscoped `orc` to `@azure-id/orc`, and every
|
|
627
|
+
upgrade path in the field died at once.** Both names declare the same `orc` bin,
|
|
628
|
+
and npm will not link it for the new package while the old one owns it - so the
|
|
629
|
+
tarball, the `github:` spec and the registry all failed with the same `EEXIST`
|
|
630
|
+
on the command file. It is a FILE conflict, not a source problem, which is why
|
|
631
|
+
changing sources never helped and `npm i -g -f` was the only thing that worked.
|
|
632
|
+
|
|
633
|
+
- **`orc upgrade` evicts the legacy package BEFORE trying any source**, because
|
|
634
|
+
the collision fails every source identically. Announced, never silent.
|
|
635
|
+
Detection is by OWNERSHIP - a package that does not declare the `orc` bin is
|
|
636
|
+
never touched.
|
|
637
|
+
- **The npm registry is tried first**, then the tarball, then the `github:` spec.
|
|
638
|
+
`freshCliPath()` now resolves the SCOPED directory, so step 2 stops re-applying
|
|
639
|
+
the templates step 1 just superseded.
|
|
640
|
+
- **`--force` is kept for the one case it fits** - an orphaned command file no
|
|
641
|
+
package owns - and never for an unrelated `EEXIST`.
|
|
642
|
+
- **`orc doctor` reports `legacy-global-package` by name.** Not `--fix`-able on
|
|
643
|
+
purpose: `--fix` is scoped to this project's `.claude/`.
|
|
644
|
+
- **A CAUTION at the top of this README** carries the one-time manual fix, since
|
|
645
|
+
anyone still on the old package does not have this code yet.
|
|
646
|
+
|
|
468
647
|
### v0.55.2 - a gate that is never probed is a gate that is always off _(2026-08-27)_
|
|
469
648
|
|
|
470
649
|
**`/orc-quick` and `/orc-fast` documented the foreign-worker option and then
|