@edgehero/pi-dispatch-admin 4.0.0 → 4.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/README.md CHANGED
@@ -129,7 +129,7 @@ Four things to know before you build on it:
129
129
  One command puts a live terminal view over the whole deployment:
130
130
 
131
131
  <p align="center">
132
- <img src="https://raw.githubusercontent.com/edgehero/pi-dispatch/main/docs/images/dispatch-dashboard.png?v=2026-10-05" alt="The /dispatch panel: status, spend meters, dollar windows, triggers with a portfolio trigger, pause windows, scoped limits with their dollar caps, held and failed jobs, runs with their projects, and settings" width="820">
132
+ <img src="https://raw.githubusercontent.com/edgehero/pi-dispatch/main/docs/images/dispatch-dashboard.png?v=2026-10-09" alt="The /dispatch panel: status, spend meters, dollar windows, triggers with a portfolio trigger, pause windows, scoped limits with their dollar caps, held and failed jobs, runs with their projects and the u hosts key, and settings" width="820">
133
133
  </p>
134
134
 
135
135
  - **Status and spend.** Queue and worker state, day, week and month spend meters, a daily token counter,
@@ -138,12 +138,12 @@ One command puts a live terminal view over the whole deployment:
138
138
  - **Insights, the one analytics page.** Press `i` (or type `/dispatch insights`) and one self contained
139
139
  page opens in your browser. It shows the budget dials, plan verdicts against API rates, daily,
140
140
  cumulative and per flow spend charts, five breakdowns (by flow, trigger, model, repo and project), the
141
- budget split with each project's share, spend and floor and the split's history, and the trigger and flow
142
- topology with spend on each trigger. A plan covered run never shows as $0.00, and an estimate is
141
+ budget split with each project's share, spend and floor and the split's history, how busy each host was
142
+ (jobs only), and the trigger and flow topology with spend on each trigger. A plan covered run never shows as $0.00, and an estimate is
143
143
  always marked as one ([`docs/insights.md`](https://github.com/edgehero/pi-dispatch/blob/main/docs/insights.md)).
144
144
 
145
145
  <p align="center">
146
- <img src="https://raw.githubusercontent.com/edgehero/pi-dispatch/main/docs/images/insights-view.png?v=2026-10-05" alt="The insights page: KPI tiles, budget dials, the budget split, a plan verdict, spend charts, the five breakdowns, and the topology with spend badges" width="820">
146
+ <img src="https://raw.githubusercontent.com/edgehero/pi-dispatch/main/docs/images/insights-view.png?v=2026-10-09.2" alt="The insights page: KPI tiles, budget dials, the budget split, a plan verdict, spend charts, the five breakdowns, how busy each host was, and the topology with spend badges" width="820">
147
147
  </p>
148
148
 
149
149
  - **Triggers, editable live.** Add, edit and delete triggers without a restart. Drill-ins show what
@@ -172,6 +172,18 @@ One command puts a live terminal view over the whole deployment:
172
172
  the runs list. `dispatch_projects` lists them, and `dispatch_project_add`, `dispatch_project_edit` and
173
173
  `dispatch_project_delete` change `projects.json` behind your confirm
174
174
  ([`docs/projects.md`](https://github.com/edgehero/pi-dispatch/blob/main/docs/projects.md)).
175
+ - **Hosts.** `u` shows each worker host: its slots in use of its limit, what its budget has promised its jobs,
176
+ how many jobs wait for its budget, and its running jobs with project, size and age, then how busy it was over the last 7 days (busy
177
+ share, jobs at once, time full, the wait and the top projects), labelled with when they were read. The 7 days
178
+ are read when the view opens and again on `u` in it. Time before a host's history starts is said and not counted,
179
+ but a host that is new, or was down, inside history that is here reads as idle for that time. `dispatch_capacity` returns the same report
180
+ ([`docs/multi-host.md`](https://github.com/edgehero/pi-dispatch/blob/main/docs/multi-host.md#what-the-panel-and-doctor-show-you)).
181
+ It counts jobs only: a machine busy with other work reads as idle.
182
+
183
+ <p align="center">
184
+ <img src="https://raw.githubusercontent.com/edgehero/pi-dispatch/main/docs/images/dispatch-hosts.png?v=2026-10-09" alt="The panel's hosts view: three machines, each with its slots in use, the memory and CPU its budget has promised, its running jobs with project, size and age, a stale host with an orphaned container, and the last 7 days as busy share, jobs at once, time full, the wait and the top projects" width="820">
185
+ </p>
186
+
175
187
  - **The budget split.** With an allocation envelope (a dollar total per window and a floor per project), `b`
176
188
  in the list shows each project's share and spend, the applied plan with the reasons it gave, and the history.
177
189
  `r` on a history row reverts to it after a yes or no. `dispatch_priorities_set` sets a plan of weights with
@@ -212,6 +224,9 @@ One command puts a live terminal view over the whole deployment:
212
224
  The console reads the whole deployment, not one host. The status line names the workers once they have
213
225
  names. The run detail names the machine that ran a job. The pause switch stops every queue, and the
214
226
  scheduler view spans hosts. On a single host none of that shows, because there is nothing to tell apart.
227
+ The HOSTS view (`u`) shows each machine's slots, budget and running jobs now and how busy it was over the last 7
228
+ days; `pi-dispatch capacity`, doctor, the insights page and `dispatch_capacity` read the same capacity report, from
229
+ the run records (jobs only: a machine busy with other work reads as idle).
215
230
  See [`docs/multi-host.md`](https://github.com/edgehero/pi-dispatch/blob/main/docs/multi-host.md).
216
231
 
217
232
  ## Install