@edgehero/pi-dispatch-admin 1.10.2 → 2.0.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 +165 -45
- package/dist/index.mjs +164975 -24947
- package/package.json +5 -3
- package/skills/operate-pi-dispatch/SKILL.md +28 -5
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@edgehero/pi-dispatch-admin",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "Operator console
|
|
3
|
+
"version": "2.0.0",
|
|
4
|
+
"description": "Operator console for pi-dispatch, as a pi extension: a /dispatch panel over the queue, spend caps, scoped limits, run history and insights, editable cron and GitHub, GitLab, Forgejo and Azure DevOps triggers, pause windows, and human-confirmed tools your AI can operate.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"pi-package",
|
|
7
7
|
"pi-extension",
|
|
@@ -19,7 +19,9 @@
|
|
|
19
19
|
"job-queue",
|
|
20
20
|
"cron",
|
|
21
21
|
"tui",
|
|
22
|
-
"dashboard"
|
|
22
|
+
"dashboard",
|
|
23
|
+
"podman",
|
|
24
|
+
"docker"
|
|
23
25
|
],
|
|
24
26
|
"license": "MIT",
|
|
25
27
|
"author": "Rob Boerman",
|
|
@@ -44,9 +44,11 @@ dialog before it takes effect**:
|
|
|
44
44
|
- `dispatch_waits` — list the jobs the worker is HOLDING on a trigger's `run.waitFor` condition: job id,
|
|
45
45
|
an id-only target, the operator's own words for what it waits on, and how long it has waited. Different
|
|
46
46
|
from the queue's `delayed` count, which also mixes cron next-occurrences, retry backoff and quiet hours.
|
|
47
|
-
- `dispatch_wait_cancel` — remove a held job so it never runs (confirm-gated).
|
|
48
|
-
|
|
49
|
-
|
|
47
|
+
- `dispatch_wait_cancel` — remove a held job so it never runs (confirm-gated). The caps cannot do this: a
|
|
48
|
+
held job spends nothing while it waits, so no budget cap will refuse it, and deleting the trigger does not
|
|
49
|
+
reach a job already enqueued. The operator has the same lever without you: `pi-dispatch cancel <jobId>`
|
|
50
|
+
at a terminal, or `h` then `x` in the panel — that CLI verb also removes a plain queued job and stops a
|
|
51
|
+
RUNNING one (its record then says `operator-cancel`), both beyond this tool's reach.
|
|
50
52
|
- `dispatch_limit_add` / `dispatch_limit_edit` / `dispatch_limit_delete` — manage scoped limits (per
|
|
51
53
|
repo/folder budget caps and concurrency: `day`/`week`/`month` job-count caps refuse a job pre-spend with
|
|
52
54
|
reason `scope-cap`, never retried; `concurrent` defers the excess, never drops it; `dispatch_limits`
|
|
@@ -132,6 +134,26 @@ cannot, and that it is an edit they make to `triggers.json` themselves.** Do not
|
|
|
132
134
|
built or pulled on the worker's own host, because jobs run with `--pull=never` and nothing is fetched at
|
|
133
135
|
job time; and `pi-dispatch doctor` lists every image their triggers name and flags one that is missing.
|
|
134
136
|
|
|
137
|
+
## Tool exclusion — `run.excludeTools`, and why you cannot set it
|
|
138
|
+
|
|
139
|
+
A trigger may carry `run.excludeTools`: built-in pi tools its jobs' sessions do NOT have. It exists so a
|
|
140
|
+
read-only flow (a triage that must not edit, a report that must not run a shell) is read-only by
|
|
141
|
+
construction rather than by request: the excluded tools are removed from the session's tool registry, so
|
|
142
|
+
nothing inside the job can switch them back on, and every such job logs the active tool list read back.
|
|
143
|
+
The drill-in states it beside the image row either way (`full pinned tool set` when absent).
|
|
144
|
+
|
|
145
|
+
**You cannot change it, in either direction.** `dispatch_trigger_add` and `dispatch_trigger_edit` have no
|
|
146
|
+
such parameter, and a chained job's request file can neither set nor drop it (the child inherits the
|
|
147
|
+
parent's exclusions). This is a permission surface, and the widening direction (a name quietly dropped
|
|
148
|
+
from the array) would read as harmless in any confirm dialog, which is exactly why no model-callable
|
|
149
|
+
route exists.
|
|
150
|
+
|
|
151
|
+
So if a user asks you to exclude a tool from a trigger, or to restore one: **say plainly that you cannot,
|
|
152
|
+
and that it is an edit they make to `triggers.json` themselves.** Two useful things you *can* say: only
|
|
153
|
+
the built-in names are legal (`read`, `bash`, `edit`, `write`, `grep`, `find`, `ls`; a misspelling
|
|
154
|
+
refuses at load rather than silently excluding nothing), and a genuinely read-only trigger usually also
|
|
155
|
+
wants `"packages": false`, because extension tools are not excludable.
|
|
156
|
+
|
|
135
157
|
## Vault secrets — `run.secrets`, and why you cannot set it
|
|
136
158
|
|
|
137
159
|
A trigger may carry `run.secrets`: a map of environment variable name to an opaque **reference**, plus
|
|
@@ -267,8 +289,9 @@ What that means when you are asked about a job that "has not run":
|
|
|
267
289
|
script is broken rather than the condition slow. `wait-expired` means a bound was reached.
|
|
268
290
|
`wait-skew` / `wait-unreadable` mean two services in the deployment disagree about the field and one needs
|
|
269
291
|
upgrading or restarting.
|
|
270
|
-
- **Cancelling is an operator decision.** `dispatch_wait_cancel` needs a confirm, writes no run record
|
|
271
|
-
job never ran
|
|
292
|
+
- **Cancelling is an operator decision.** `dispatch_wait_cancel` needs a confirm, writes no run record of its
|
|
293
|
+
own (a held job usually never ran; one held again on a retry keeps whatever its earlier attempts recorded), and
|
|
294
|
+
cannot be undone: the delivery is gone, and a webhook does not resend itself.
|
|
272
295
|
|
|
273
296
|
## Scoped limits — and the folder mutex you cannot turn off
|
|
274
297
|
|