@azure-id/orc 1.2.1 → 1.4.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 CHANGED
@@ -10,6 +10,157 @@ Format: `### v<version> — <title> _(<date>)_`.
10
10
 
11
11
  ---
12
12
 
13
+ ### v1.4.0 - the agent panel, and the number that was missing _(2026-09-04)_
14
+
15
+ **Still on the unscoped `orc` package?** Do this once first — your `orc upgrade`
16
+ is the pre-v0.56.0 one and cannot install itself. Full detail in the CAUTION at
17
+ the top of this file.
18
+
19
+ - **Step 1 — release the command from the old package:** `npm uninstall -g orc`
20
+ - **Step 2 — install the current package:** `npm i -g @azure-id/orc`
21
+ - **Step 3 — re-apply it to your project:** `orc update`
22
+
23
+ **Do not use `npm i -g -f`.** Full detail in v0.56.0 below.
24
+
25
+ The second board. Claude Code renders a custom row for every subagent in the
26
+ agent panel, and that surface is ORC's exact domain: one row per dispatched
27
+ agent, live, while it runs.
28
+
29
+ ```
30
+ ● orc-executor-opus-5-low O5/low 84K ███▎░░░░ 42% for 17m
31
+ ✓ orc-reviewer-opus-5-med O5/med 31K █▌░░░░░░ 16% for 4m
32
+ ```
33
+
34
+ **AND IT ANSWERS A QUESTION v1.2.0 SAID COULD NOT BE ANSWERED.** That release
35
+ established that Claude Code records no token usage for a dispatched subagent —
36
+ `isSidechain` is never set, no sidechain message carries a usage block, verified
37
+ across every transcript on two machines — so `orc usage report` has reported
38
+ `tokens: null` for every Claude row ever since, and said why.
39
+
40
+ That is still true **of the transcript**. It is not true of the agent panel,
41
+ which carries `tokenCount` per task along with the resolved `model` and
42
+ `effort`. So the hook writes down what it is handed, and `orc usage report`
43
+ reads it.
44
+
45
+ - **It is a FLOOR, and it is labelled one everywhere it appears.** The hook sees
46
+ a task only while it is in the panel: an agent that started and finished
47
+ between two renders is never seen, and a count read just before an agent
48
+ finished is short by whatever came after. `not-seen` means exactly that and
49
+ is never `0`. A floor reported as a total would be the same class of lie as a
50
+ zero reported for an unknown.
51
+ - **The record is written even with the board OFF.** It is not part of the
52
+ display feature — it is a measurement Claude Code hands over either way, and
53
+ throwing it out because a display setting is off would be the wrong trade by a
54
+ wide margin. `orc init` and `orc update` wire `subagentStatusLine` for that
55
+ reason alone, and never clobber one you already have.
56
+ - **A count can only go up**, so a lower reading is a stale one and never
57
+ overwrites a higher one.
58
+ - **The model and effort are OBSERVED.** ORC's downgrade check has two readings
59
+ — one derived from the agent's name, one the agent reports about itself. This
60
+ is the third, and the only one nobody had to be trusted for.
61
+
62
+ **ONE COMPILER, TWO BOARDS.** The second board reuses the compiler, the render
63
+ program, every shape, every glyph set, the colour model, the validator and the
64
+ gate ladder. What differs is a component set, three filenames and a config key —
65
+ a table, not a fork. A test asserts there is exactly one compiler and that the
66
+ new hook grew no renderer of its own, because that is the cheap mistake this
67
+ whole design exists to avoid.
68
+
69
+ - **A component belongs to one board**, and the other refuses it by name with
70
+ the board it belongs to. Two catalogues would be two lists somebody has to
71
+ keep in step; this is one catalogue with a column.
72
+ - **A subagent row is one line by construction** — Claude Code renders one per
73
+ task — so the three-line board and its dense-prefix rule simply do not apply.
74
+ - **Three presets**: what the agent is and what it has cost, a watch view with
75
+ its own context window, and the downgrade check made visible per agent.
76
+ - Every gate rung falls back to **Claude Code's own row**, which is a real
77
+ answer and a better one than a blank. An empty render hides a task entirely,
78
+ which is almost never what anybody meant — so it is never emitted.
79
+
80
+ `subagent_line_custom`, default `off`. Off is Claude Code's row, unchanged.
81
+
82
+ ---
83
+
84
+ ### v1.3.0 - build your own status line _(2026-09-04)_
85
+
86
+ **Still on the unscoped `orc` package?** Do this once first — your `orc upgrade`
87
+ is the pre-v0.56.0 one and cannot install itself. Full detail in the CAUTION at
88
+ the top of this file.
89
+
90
+ - **Step 1 — release the command from the old package:** `npm uninstall -g orc`
91
+ - **Step 2 — install the current package:** `npm i -g @azure-id/orc`
92
+ - **Step 3 — re-apply it to your project:** `orc update`
93
+
94
+ **Do not use `npm i -g -f`.** Full detail in v0.56.0 below.
95
+
96
+ The status line becomes **yours**. Three lines, each holding one to five parts
97
+ from a catalogue ORC ships, each drawn through one of 35 shapes and restyled by
98
+ you: two colours, a colour that follows the value, its own words, its own
99
+ symbols, a stable width, and when it is allowed to appear at all.
100
+
101
+ **It is off by default, and off is byte-identical to what shipped.** That is a
102
+ test — nine states frozen glyph for glyph — not an intention.
103
+
104
+ Compose it in **`orc ui` ▸ CLI Hook Interface**. A CLI half exists so the panel
105
+ has something to run, and `orc statusline --help` says plainly that typing a
106
+ three-line layout is worse than dragging one.
107
+
108
+ ```
109
+ 🚀 ORC v1.3.0 · Opus 5/high · CTX ████▊░░░░░ 47% · 5h 61% main
110
+ ◐ orc · execution · agents 7 (2 running) · Dur 34m · MTok 312K
111
+ cache ● ███████▊░░ 91% · $0.42 · wiki ◐ 14c
112
+ ```
113
+
114
+ - **THE CLI COMPILES, THE HOOK RENDERS.** The layout you author is lowered into
115
+ a flat render program with every colour worked out in advance; the hook walks
116
+ it and resolves nothing. Three reasons, any one sufficient. Claude Code
117
+ debounces at 300 ms and **cancels** a script still running — and on Windows a
118
+ bare `node` start is 285 ms of that, so the hook has **about 15 ms**, and
119
+ resolving themes and ramps per keystroke is the wrong trade by four orders of
120
+ magnitude. Two ideas of what inheritance means would otherwise sit either side
121
+ of the one surface where you compare them. And a hook cannot refuse; it can
122
+ only fail silently or paint garbage, so validation has to happen where a
123
+ refusal is possible.
124
+ - **The preview IS the bar.** `orc statusline preview` and the hook require the
125
+ SAME render module, so what the panel draws and what your terminal prints
126
+ cannot diverge — by construction, not by a test that would eventually drift.
127
+ All three degraded forms sit under it and are always visible: you cannot
128
+ design a plain-text fallback you cannot see.
129
+ - **The illegal drop is made impossible.** A line may hold a part only if every
130
+ line above it holds at least one — so line 3 renders hatched and disabled with
131
+ the reason ON THE ZONE while line 2 is empty. Never a message after the fact.
132
+ Every drag has a keyboard path and a menu; a board only reachable by mouse is
133
+ a board a lot of people cannot use.
134
+ - **A composed layout can be FASTER than the built-in one.** The compiler
135
+ records which readings a layout needs, and the hook reads nothing else.
136
+ Measured on the cold path: 346.7 ms for the built-in lines, **298.2 ms** for a
137
+ composed `minimal` — which is the difference between rendering and being
138
+ cancelled.
139
+ - **Eight parts are REFUSED, each with the measurement.** `git status` is 53 ms
140
+ against 15 ms of headroom; three wiki numbers need a git walk PER DOCUMENT.
141
+ Reading a value that is not stored would have rendered a confident number
142
+ nobody measured, forever. `unknown` renders an em dash — **never `0`**, which
143
+ would say the thing was free.
144
+ - **Three things a terminal cannot do, said plainly** rather than offered as a
145
+ picker that does nothing: the terminal owns the font size (bold reads bigger,
146
+ and a part gets visually larger by taking more cells), blinking is refused,
147
+ and icon-font symbols are not shipped because ORC cannot check for the font
148
+ and will not put an empty box on your bar.
149
+ - **`orc doctor` gains three findings**, and only while the feature is armed — a
150
+ layout you built and never enabled is a draft, not a problem. An orphaned part
151
+ after an upgrade is REPORTED, never auto-repaired: which part replaces a
152
+ retired one is your decision.
153
+ - **A fix that shipped with it:** the wiki freshness segment used to run
154
+ `git rev-list` on EVERY redraw, outside the throttle everything else rides in.
155
+ In a repo with a wiki that pushed the render past the cancel line, so a fast
156
+ typist got no status line at all while they typed.
157
+
158
+ One config key, `statusline_custom`, default `off`. No key for a colour scheme —
159
+ the layout carries its own — and none for the parts: those are a document, not a
160
+ setting.
161
+
162
+ ---
163
+
13
164
  ### v1.2.1 - the status line says what ORC is doing _(2026-09-04)_
14
165
 
15
166
  **Still on the unscoped `orc` package?** Do this once first — your `orc upgrade`
package/README-id.md CHANGED
@@ -619,6 +619,50 @@ Bacalah sebagai catatan putaran itu, bukan sebagai audit terkini:
619
619
  **Riwayat lengkap: [CHANGELOG.md](CHANGELOG.md)** — atau `orc changelog`, yang
620
620
  hanya mencetak yang lebih baru dari versi yang Anda punya.
621
621
 
622
+ ### v1.3.0 - bangun sendiri baris status Anda _(04-09-2026)_
623
+
624
+ **Masih memakai paket `orc` yang tanpa awalan?** Lakukan ini sekali dulu —
625
+ `orc upgrade` Anda adalah versi sebelum v0.56.0 dan tidak dapat memasang
626
+ dirinya sendiri.
627
+
628
+ - **Langkah 1 — lepaskan perintahnya dari paket lama:** `npm uninstall -g orc`
629
+ - **Langkah 2 — pasang paket saat ini:** `npm i -g @azure-id/orc`
630
+ - **Langkah 3 — terapkan lagi ke proyek Anda:** `orc update`
631
+
632
+ **Jangan pakai `npm i -g -f`.**
633
+
634
+ Baris status kini **milik Anda**. Tiga baris, tiap baris memuat satu sampai lima
635
+ bagian dari katalog yang dikirim ORC, tiap bagian digambar lewat salah satu dari
636
+ 35 bentuk dan Anda beri gaya sendiri: dua warna, warna yang mengikuti nilai,
637
+ kata-katanya sendiri, simbolnya sendiri, lebar yang tetap, dan kapan bagian itu
638
+ boleh muncul.
639
+
640
+ **Fitur ini mati secara bawaan, dan saat mati hasilnya sama persis byte per byte
641
+ dengan sebelumnya.** Itu sebuah tes — sembilan keadaan dibekukan simbol demi
642
+ simbol — bukan sekadar niat.
643
+
644
+ Susun di **`orc ui` ▸ CLI Hook Interface**.
645
+
646
+ - **CLI YANG MENYUSUN, HOOK YANG MENGGAMBAR.** Tata letak Anda diturunkan jadi
647
+ daftar instruksi datar dengan setiap warna sudah dihitung; hook menjalankannya
648
+ dan tidak memutuskan apa pun. Claude Code menggambar ulang paling cepat tiap
649
+ 300 md dan **membatalkan** skrip yang masih berjalan — di Windows memulai
650
+ `node` saja sudah 285 md dari jatah itu, jadi hook hanya punya sekitar 15 md.
651
+ - **Pratinjau ITU bilahnya.** Pratinjau dan hook memakai modul penggambar yang
652
+ SAMA, jadi keduanya tidak mungkin berbeda.
653
+ - **Peletakan yang tidak sah dibuat MUSTAHIL.** Sebuah baris hanya boleh memuat
654
+ bagian jika setiap baris di atasnya sudah terisi. Setiap seret juga punya
655
+ jalur papan tombol dan menu.
656
+ - **Tata letak susunan Anda bisa LEBIH CEPAT** daripada bawaan: 346,7 md untuk
657
+ bawaan, **298,2 md** untuk `minimal` susunan sendiri.
658
+ - **Delapan bagian DITOLAK**, tiap-tiap dengan hasil pengukurannya. Nilai yang
659
+ tidak dapat dihitung tampil sebagai tanda pisah — **bukan `0`**, yang berarti
660
+ gratis.
661
+
662
+ **Rincian lengkap: [`guides/status-line.md`](guides/status-line.md).**
663
+
664
+ ---
665
+
622
666
  ### v1.0.0 - konfigurasi, fase, dan panggilan berhenti jadi prosa _(30-08-2026)_
623
667
 
624
668
  **Masih memakai paket `orc` yang tanpa awalan?** Lakukan ini sekali dulu —
package/README.md CHANGED
@@ -14,7 +14,7 @@
14
14
  ![Dependencies](https://img.shields.io/badge/dependencies-zero-lightgrey.svg?style=for-the-badge)
15
15
  ![GitHub stars](https://img.shields.io/github/stars/azure-id/orc?style=for-the-badge&color=yellow)
16
16
 
17
- **Latest: v1.2.1** · updated 2026-09-04 · [full changelog](CHANGELOG.md)
17
+ **Latest: v1.4.0** · updated 2026-09-04 · [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
 
@@ -575,7 +575,7 @@ a current audit: [EVAL-REPORT.md](EVAL-REPORT.md).
575
575
  **Full history: [CHANGELOG.md](CHANGELOG.md)** — or `orc changelog`, which prints
576
576
  only what is newer than the version you have.
577
577
 
578
- ### v1.2.1 - the status line says what ORC is doing _(2026-09-04)_
578
+ ### v1.4.0 - the agent panel, and the number that was missing _(2026-09-04)_
579
579
 
580
580
  **Still on the unscoped `orc` package?** Do this once first — your `orc upgrade`
581
581
  is the pre-v0.56.0 one and cannot install itself. Full detail in the CAUTION at
@@ -587,70 +587,62 @@ the top of this file.
587
587
 
588
588
  **Do not use `npm i -g -f`.** Full detail in v0.56.0 below.
589
589
 
590
- The second line arrived in v1.2.0 saying which lanes had run. It could not say
591
- what any of them was doing *now*. This release puts the running phase in front —
592
- with a small animated mark per kind of phase, borrowed from `orc-cli`'s lane
593
- menu — and finishes the line with the two facts a terminal should always carry:
594
- what the session has cost, and which branch it is on.
590
+ The second board. Claude Code renders a custom row for every subagent in the
591
+ agent panel, and that surface is ORC's exact domain: one row per dispatched
592
+ agent, live, while it runs.
595
593
 
596
594
  ```
597
- 🚀 ORC v1.2.1 - Opus 5/high · context (34%) · 5h 41% (2h13m) ↔ wk 12% · ucs 6% · wiki: fresh
598
- status: quick · Q3 DO · agents 7 (2 running) · orc-extra: on · Dur 48m · MTok 412K · main
595
+ orc-executor-opus-5-low O5/low 84K ███▎░░░░ 42% for 17m
596
+ orc-reviewer-opus-5-med O5/med 31K █▌░░░░░░ 16% for 4m
599
597
  ```
600
598
 
601
- - **The phase is CLI-computed and rendered, never derived.** `orc init` /
602
- `orc update` stamps `hooks/orc-lane-rails.json` from the same registries
603
- `orc lane phases` reads; the hook holds no idea of its own about what ORC's
604
- phases are. Inspect it with the new `orc lane rails [--json]`. A second phase
605
- table in a hook would be the Flow-stepper failure on a second surface, and no
606
- lint could see it — so it is a registered contract token instead.
607
- - **A phase the disk cannot prove is HIDDEN.** The floor is the trace hook's
608
- own `PHASE-EDGE`, written with zero model cooperation; a narrated verb the
609
- lane's rail publishes may only *refine* it, never invent one. The cost is
610
- stated rather than papered over: a phase that dispatches nothing and narrates
611
- nothing — `/orc-quick` `Q1 LOOK`, `Q2 ASK`, every ask-the-user gate — shows
612
- no segment at all. **Asking 24 spines to write a phase marker would have
613
- covered those, and it is the remembered-not-dispatched bet this repo has
614
- already lost five times.** A stale phase word gets believed.
615
- - **The animation is a liveness tell, not a progress bar.** A statusline is a
616
- pull surface, so the frame comes off the wall clock: it moves while you type
617
- and while ORC works, and freezes when the session is idle. `ORC_STATUSLINE_MOTION=0`
618
- **removes** the motion rather than slowing it (a frozen frame of a cycling
619
- animation is a bug that looks like a hang), and `ORC_STATUSLINE_ASCII=1`
620
- swaps in the ASCII twin every motif ships with.
621
- - **`MTok` MAIN token is honest about what it cannot see.** All four token
622
- kinds summed, read incrementally from the session transcript. **Claude Code
623
- records no token usage for a dispatched subagent**, so an hour of Opus
624
- executors adds almost nothing: this is your conversation's cost, not the
625
- run's. Unreadable renders `—`, **never `0`**, which would say the session was
626
- free. `orc usage report` and `/orc-budget` remain the four-kind truth.
627
- - **The rest of the line.** The verdict WORD becomes the installed version and
628
- the ICON keeps the verdict — the ⛔ branch still names every reason, because a
629
- warning with no reason is an emoji. `ctx` `context (N%)`. `sess +X%` → `ucs
630
- X%`, which now keeps its slot at zero. `Dur` labels the duration, and the
631
- branch comes off `.git/HEAD` with **no subprocess** on a per-keystroke
632
- surface.
633
- - **`lanes:` is replaced by `status:`.** The running lane is its first word;
634
- `orc stats` and `orc run list` still hold the session's whole history.
635
- - **The status line now explains itself.** `.claude/hooks/README.md` documents
636
- every segment in Simplified Technical English, including what each absent
637
- segment means.
638
-
639
- Everything rides in the one 5-second scan v1.2.0 already added. No new config
640
- keya status line is display, and a hook cannot resolve a lane's config anyway.
641
-
642
- **Full entry: [CHANGELOG.md](CHANGELOG.md).**
643
-
644
- <details>
645
- <summary>Earlier releases</summary>
646
-
647
- - **v1.2.0 - a retry that cloned the agent, and a window you can watch empty — _(2026-09-04)_**
648
- - **v1.1.0 - the wait, and a window ORC can finally see — _(2026-08-31)_**
649
- - **v1.0.0 - config, phases and calls stop being prose — _(2026-08-30)_**
650
-
651
- Full bodies for every one of these are in [CHANGELOG.md](CHANGELOG.md).
652
-
653
- </details>
599
+ **AND IT ANSWERS A QUESTION v1.2.0 SAID COULD NOT BE ANSWERED.** That release
600
+ established that Claude Code records no token usage for a dispatched subagent —
601
+ `isSidechain` is never set, no sidechain message carries a usage block, verified
602
+ across every transcript on two machines so `orc usage report` has reported
603
+ `tokens: null` for every Claude row ever since, and said why.
604
+
605
+ That is still true **of the transcript**. It is not true of the agent panel,
606
+ which carries `tokenCount` per task along with the resolved `model` and
607
+ `effort`. So the hook writes down what it is handed, and `orc usage report`
608
+ reads it.
609
+
610
+ - **It is a FLOOR, and it is labelled one everywhere it appears.** The hook sees
611
+ a task only while it is in the panel: an agent that started and finished
612
+ between two renders is never seen, and a count read just before an agent
613
+ finished is short by whatever came after. `not-seen` means exactly that and
614
+ is never `0`. A floor reported as a total would be the same class of lie as a
615
+ zero reported for an unknown.
616
+ - **The record is written even with the board OFF.** It is not part of the
617
+ display feature — it is a measurement Claude Code hands over either way, and
618
+ throwing it out because a display setting is off would be the wrong trade by a
619
+ wide margin. `orc init` and `orc update` wire `subagentStatusLine` for that
620
+ reason alone, and never clobber one you already have.
621
+ - **A count can only go up**, so a lower reading is a stale one and never
622
+ overwrites a higher one.
623
+ - **The model and effort are OBSERVED.** ORC's downgrade check has two readings
624
+ one derived from the agent's name, one the agent reports about itself. This
625
+ is the third, and the only one nobody had to be trusted for.
626
+
627
+ **ONE COMPILER, TWO BOARDS.** The second board reuses the compiler, the render
628
+ program, every shape, every glyph set, the colour model, the validator and the
629
+ gate ladder. What differs is a component set, three filenames and a config key —
630
+ a table, not a fork. A test asserts there is exactly one compiler and that the
631
+ new hook grew no renderer of its own, because that is the cheap mistake this
632
+ whole design exists to avoid.
633
+
634
+ - **A component belongs to one board**, and the other refuses it by name with
635
+ the board it belongs to. Two catalogues would be two lists somebody has to
636
+ keep in step; this is one catalogue with a column.
637
+ - **A subagent row is one line by construction** Claude Code renders one per
638
+ taskso the three-line board and its dense-prefix rule simply do not apply.
639
+ - **Three presets**: what the agent is and what it has cost, a watch view with
640
+ its own context window, and the downgrade check made visible per agent.
641
+ - Every gate rung falls back to **Claude Code's own row**, which is a real
642
+ answer and a better one than a blank. An empty render hides a task entirely,
643
+ which is almost never what anybody meant — so it is never emitted.
644
+
645
+ `subagent_line_custom`, default `off`. Off is Claude Code's row, unchanged.
654
646
 
655
647
  ---
656
648