@repo-prism/dispatch-hub 1.1.16 → 1.1.17
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 +2 -1
- package/dist/Prism.app/Contents/Info.plist +16 -0
- package/dist/Prism.app/Contents/MacOS/prism-notify +0 -0
- package/dist/auth.d.ts +8 -0
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +22 -1
- package/dist/auth.js.map +1 -1
- package/dist/dashboard/app.css +1 -1
- package/dist/dashboard/app.js +161 -111
- package/dist/dashboard/app.js.map +108 -6
- package/dist/dashboard/hub.css +13306 -1
- package/dist/dashboard/index.html +2 -1
- package/dist/dashboard/prism-mark.png +0 -0
- package/dist/hub-record.d.ts.map +1 -1
- package/dist/hub-record.js +36 -1
- package/dist/hub-record.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/intelligence.d.ts +37 -0
- package/dist/intelligence.d.ts.map +1 -0
- package/dist/intelligence.js +102 -0
- package/dist/intelligence.js.map +1 -0
- package/dist/notes.d.ts +32 -0
- package/dist/notes.d.ts.map +1 -0
- package/dist/notes.js +117 -0
- package/dist/notes.js.map +1 -0
- package/dist/notify.d.ts +6 -0
- package/dist/notify.d.ts.map +1 -1
- package/dist/notify.js +73 -12
- package/dist/notify.js.map +1 -1
- package/dist/paths.d.ts +25 -1
- package/dist/paths.d.ts.map +1 -1
- package/dist/paths.js +30 -2
- package/dist/paths.js.map +1 -1
- package/dist/server.d.ts +8 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +233 -17
- package/dist/server.js.map +1 -1
- package/dist/snapshot.d.ts +14 -2
- package/dist/snapshot.d.ts.map +1 -1
- package/dist/snapshot.js +28 -9
- package/dist/snapshot.js.map +1 -1
- package/dist/statusline.d.ts +2 -0
- package/dist/statusline.d.ts.map +1 -1
- package/dist/statusline.js +23 -5
- package/dist/statusline.js.map +1 -1
- package/dist/types.d.ts +56 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -1
- package/dist/watch.d.ts +22 -5
- package/dist/watch.d.ts.map +1 -1
- package/dist/watch.js +59 -13
- package/dist/watch.js.map +1 -1
- package/package.json +7 -3
package/dist/statusline.d.ts
CHANGED
|
@@ -28,6 +28,8 @@ export declare function formatStatusline(current: readonly JobRecord[], others:
|
|
|
28
28
|
* a quiet footer is the correct default.
|
|
29
29
|
*/
|
|
30
30
|
export declare function buildStatusline(stdinRaw: string, env?: HubEnv): Promise<string>;
|
|
31
|
+
/** Jobs parked on a gate need naming, or the user waits for something that will never move. */
|
|
32
|
+
export declare function confirmCount(jobs: readonly JobRecord[]): number;
|
|
31
33
|
/** The settings.json block Claude Code needs, for `statusline --setup`. */
|
|
32
34
|
export declare function statuslineSetupSnippet(): string;
|
|
33
35
|
//# sourceMappingURL=statusline.d.ts.map
|
package/dist/statusline.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"statusline.d.ts","sourceRoot":"","sources":["../src/statusline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"statusline.d.ts","sourceRoot":"","sources":["../src/statusline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAGL,KAAK,SAAS,EACf,MAAM,sBAAsB,CAAC;AAG9B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEzC,mEAAmE;AACnE,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,CAAC,EAAE;QAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACxD,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,CAQjE;AAuBD,mEAAmE;AACnE,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,SAAS,SAAS,EAAE,EAC7B,MAAM,EAAE,SAAS,SAAS,EAAE,EAC5B,GAAG,SAAa,GACf,MAAM,CAwCR;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,GAAG,GAAE,MAAoB,GACxB,OAAO,CAAC,MAAM,CAAC,CAmBjB;AAED,+FAA+F;AAC/F,wBAAgB,YAAY,CAAC,IAAI,EAAE,SAAS,SAAS,EAAE,GAAG,MAAM,CAE/D;AAED,2EAA2E;AAC3E,wBAAgB,sBAAsB,IAAI,MAAM,CAa/C"}
|
package/dist/statusline.js
CHANGED
|
@@ -9,7 +9,8 @@
|
|
|
9
9
|
* Claude Code pipes session JSON on stdin; we use `workspace.current_dir` to
|
|
10
10
|
* put the repo you're sitting in first.
|
|
11
11
|
*/
|
|
12
|
-
import {
|
|
12
|
+
import { isLiveJobStatus, reapJobs, } from "@repo-prism/dispatch";
|
|
13
|
+
import { formatDuration, primaryDurationMs } from "@repo-prism/shared";
|
|
13
14
|
import { loadRegistry } from "./registry.js";
|
|
14
15
|
export function parseStatuslineStdin(raw) {
|
|
15
16
|
try {
|
|
@@ -27,11 +28,17 @@ function isAwaitingReview(job) {
|
|
|
27
28
|
function isFailed(job) {
|
|
28
29
|
return job.status === "error";
|
|
29
30
|
}
|
|
31
|
+
/**
|
|
32
|
+
* The same duration the board shows for the same job (M-067 P-S1).
|
|
33
|
+
*
|
|
34
|
+
* This used to measure from `updatedAt` while the board measured from
|
|
35
|
+
* `createdAt`, so a single job displayed two different times depending on
|
|
36
|
+
* where you looked. Both now go through `primaryDurationMs`, and both show
|
|
37
|
+
* seconds — the old `formatStallDuration` floored to whole minutes, so a
|
|
38
|
+
* 40-second job read as `0m`.
|
|
39
|
+
*/
|
|
30
40
|
function elapsed(job, now) {
|
|
31
|
-
|
|
32
|
-
if (!Number.isFinite(started))
|
|
33
|
-
return "";
|
|
34
|
-
return formatStallDuration(Math.max(0, now - started));
|
|
41
|
+
return formatDuration(primaryDurationMs(job, now)) ?? "";
|
|
35
42
|
}
|
|
36
43
|
/** One line, ≤ ~120 chars, ADR-0039 voice: titles, never paths. */
|
|
37
44
|
export function formatStatusline(current, others, now = Date.now()) {
|
|
@@ -50,6 +57,13 @@ export function formatStatusline(current, others, now = Date.now()) {
|
|
|
50
57
|
if (live.length > 1)
|
|
51
58
|
parts.push(`+${live.length - 1} running`);
|
|
52
59
|
}
|
|
60
|
+
// A gated job will never move on its own, so it outranks a review in the
|
|
61
|
+
// footer: the user is the only thing that can unblock it.
|
|
62
|
+
for (const gated of current
|
|
63
|
+
.filter((row) => row.status === "needs_confirm")
|
|
64
|
+
.slice(0, 2)) {
|
|
65
|
+
parts.push(`? ${gated.title || gated.id} needs your OK`);
|
|
66
|
+
}
|
|
53
67
|
for (const job of review.slice(0, 2)) {
|
|
54
68
|
parts.push(`✓ ${job.title || job.id} ready for review`);
|
|
55
69
|
}
|
|
@@ -89,6 +103,10 @@ export async function buildStatusline(stdinRaw, env = process.env) {
|
|
|
89
103
|
}
|
|
90
104
|
return formatStatusline(current, others);
|
|
91
105
|
}
|
|
106
|
+
/** Jobs parked on a gate need naming, or the user waits for something that will never move. */
|
|
107
|
+
export function confirmCount(jobs) {
|
|
108
|
+
return jobs.filter((job) => job.status === "needs_confirm").length;
|
|
109
|
+
}
|
|
92
110
|
/** The settings.json block Claude Code needs, for `statusline --setup`. */
|
|
93
111
|
export function statuslineSetupSnippet() {
|
|
94
112
|
return JSON.stringify({
|
package/dist/statusline.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"statusline.js","sourceRoot":"","sources":["../src/statusline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"statusline.js","sourceRoot":"","sources":["../src/statusline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EACL,eAAe,EACf,QAAQ,GAET,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAS7C,MAAM,UAAU,oBAAoB,CAAC,GAAW;IAC9C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAoB,CAAC;QAClD,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,EAAE,WAAW,IAAI,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;QAC9D,OAAO,EAAE,GAAG,EAAE,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;IACrB,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAc;IACtC,OAAO,GAAG,CAAC,MAAM,KAAK,cAAc,CAAC;AACvC,CAAC;AAED,SAAS,QAAQ,CAAC,GAAc;IAC9B,OAAO,GAAG,CAAC,MAAM,KAAK,OAAO,CAAC;AAChC,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,OAAO,CAAC,GAAc,EAAE,GAAW;IAC1C,OAAO,cAAc,CAAC,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAC3D,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,gBAAgB,CAC9B,OAA6B,EAC7B,MAA4B,EAC5B,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;IAEhB,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IAClE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACxC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAC7B,CAAC,GAAG,EAAE,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,gBAAgB,CAAC,GAAG,CAAC,CAC9D,CAAC;IAEF,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACvC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CACvC,CAAC,CAAC,CAAC,CAAC;IACL,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC;QAC/C,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QACpC,KAAK,CAAC,IAAI,CACR,CAAC,KAAK,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACpE,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,KAAK,CAAC,CACf,CAAC;QACF,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,UAAU,CAAC,CAAC;IACjE,CAAC;IACD,yEAAyE;IACzE,0DAA0D;IAC1D,KAAK,MAAM,KAAK,IAAI,OAAO;SACxB,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,KAAK,eAAe,CAAC;SAC/C,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,EAAE,gBAAgB,CAAC,CAAC;IAC3D,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,EAAE,mBAAmB,CAAC,CAAC;IAC1D,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAC1E,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,EAAE,UAAU,CAAC,CAAC;IACjD,CAAC;IACD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,MAAM,iBAAiB,CAAC,CAAC;IACnD,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC7B,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,QAAgB,EAChB,MAAc,OAAO,CAAC,GAAG;IAEzB,MAAM,EAAE,GAAG,EAAE,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAC/C,MAAM,UAAU,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAgB,EAAE,CAAC;IAChC,MAAM,MAAM,GAAgB,EAAE,CAAC;IAC/B,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;QAC/B,IAAI,IAAI,GAAgB,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC;QAAC,MAAM,CAAC;YACP,SAAS,CAAC,4CAA4C;QACxD,CAAC;QACD,IAAI,GAAG,IAAI,CAAC,GAAG,KAAK,KAAK,CAAC,IAAI,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC;YACpE,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QACxB,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IACD,OAAO,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AAC3C,CAAC;AAED,+FAA+F;AAC/F,MAAM,UAAU,YAAY,CAAC,IAA0B;IACrD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,KAAK,eAAe,CAAC,CAAC,MAAM,CAAC;AACrE,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,sBAAsB;IACpC,OAAO,IAAI,CAAC,SAAS,CACnB;QACE,UAAU,EAAE;YACV,IAAI,EAAE,SAAS;YACf,OAAO,EACL,mEAAmE;YACrE,eAAe,EAAE,CAAC;SACnB;KACF,EACD,IAAI,EACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { JobRecord, JobReview } from "@repo-prism/dispatch";
|
|
1
|
+
import type { JobConfirm, JobRecord, JobReview } from "@repo-prism/dispatch";
|
|
2
2
|
export type JobStatus = JobRecord["status"];
|
|
3
|
-
export type { JobReview };
|
|
3
|
+
export type { JobConfirm, JobReview };
|
|
4
4
|
export type HubRecord = {
|
|
5
5
|
readonly port: number;
|
|
6
6
|
readonly pid: number;
|
|
@@ -34,15 +34,65 @@ export type JobSnapshot = {
|
|
|
34
34
|
readonly nextStep?: string;
|
|
35
35
|
/** checkout = editing your working tree; worktree = isolated branch. */
|
|
36
36
|
readonly placement?: JobRecord["placement"];
|
|
37
|
+
/**
|
|
38
|
+
* Where the job's branch is checked out on disk.
|
|
39
|
+
*
|
|
40
|
+
* ADR-0039 keeps paths out of *chat*, because a spoken path is noise. A job
|
|
41
|
+
* detail is the opposite case: it is the one place someone needs the path,
|
|
42
|
+
* to go look at the branch themselves.
|
|
43
|
+
*/
|
|
44
|
+
readonly worktreePath?: string;
|
|
37
45
|
/** Why a job is waiting, e.g. "stalled". */
|
|
38
46
|
readonly waitingOn?: string;
|
|
47
|
+
/**
|
|
48
|
+
* When the worker last wrote output. The evidence behind a `running` badge:
|
|
49
|
+
* a status alone cannot say whether the process is still doing anything.
|
|
50
|
+
*/
|
|
51
|
+
readonly lastHeartbeat?: string;
|
|
52
|
+
/** The gate this job is parked on, when status is `needs_confirm`. */
|
|
53
|
+
readonly confirm?: JobConfirm;
|
|
54
|
+
/**
|
|
55
|
+
* Raw timestamps only — no server-computed duration (M-067 P-S1). Clients
|
|
56
|
+
* tick locally via `jobDurations` from `@repo-prism/shared`, which is what
|
|
57
|
+
* makes a running job advance smoothly and a finished job stay put.
|
|
58
|
+
*/
|
|
39
59
|
readonly createdAt: string;
|
|
60
|
+
readonly queuedAt?: string;
|
|
61
|
+
readonly startedAt?: string;
|
|
62
|
+
readonly finishedAt?: string;
|
|
40
63
|
readonly updatedAt: string;
|
|
41
|
-
|
|
64
|
+
/** Agent CLI that ran this job. Absent on older records. */
|
|
65
|
+
readonly workerBackend?: JobRecord["workerBackend"];
|
|
66
|
+
/** Model id the worker reported. */
|
|
67
|
+
readonly workerModel?: string;
|
|
68
|
+
/** Thinking / effort the worker reported. */
|
|
69
|
+
readonly workerThinking?: string;
|
|
70
|
+
/** Write-ups under `.prism/dispatch/notes/`. */
|
|
71
|
+
readonly notes?: readonly string[];
|
|
72
|
+
/** Cited paths the agent claimed but did not write. */
|
|
73
|
+
readonly citedMissing?: readonly string[];
|
|
74
|
+
};
|
|
75
|
+
/** A workspace the Console could not read, and why. */
|
|
76
|
+
export type WorkspaceError = {
|
|
77
|
+
readonly workspacePath: string;
|
|
78
|
+
readonly label: string;
|
|
79
|
+
readonly detail: string;
|
|
42
80
|
};
|
|
43
81
|
export type HubEvent = {
|
|
44
82
|
readonly type: "snapshot";
|
|
45
83
|
readonly jobs: readonly JobSnapshot[];
|
|
84
|
+
/**
|
|
85
|
+
* When this list was read. The client shows it, and marks itself stale
|
|
86
|
+
* when SSE drops, rather than presenting a frozen list as current
|
|
87
|
+
* (ADR-0048).
|
|
88
|
+
*/
|
|
89
|
+
readonly asOf: string;
|
|
90
|
+
/**
|
|
91
|
+
* Workspaces that failed to read. These used to be swallowed, so a repo
|
|
92
|
+
* whose `.prism/dispatch` went unreadable looked exactly like a repo
|
|
93
|
+
* with no jobs.
|
|
94
|
+
*/
|
|
95
|
+
readonly errors: readonly WorkspaceError[];
|
|
46
96
|
} | {
|
|
47
97
|
readonly type: "job.updated";
|
|
48
98
|
readonly job: JobSnapshot;
|
|
@@ -50,6 +100,9 @@ export type HubEvent = {
|
|
|
50
100
|
readonly type: "job.finished";
|
|
51
101
|
readonly job: JobSnapshot;
|
|
52
102
|
readonly notice: string;
|
|
103
|
+
} | {
|
|
104
|
+
readonly type: "job.removed";
|
|
105
|
+
readonly job: JobSnapshot;
|
|
53
106
|
};
|
|
54
107
|
export declare const IN_FLIGHT_STATUSES: readonly JobStatus[];
|
|
55
108
|
export declare const TERMINAL_STATUSES: readonly JobStatus[];
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
CHANGED
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
export const IN_FLIGHT_STATUSES = [
|
|
2
|
+
// Accepted work the user is waiting on, whether or not a process exists yet.
|
|
3
|
+
// `queued` and `needs_confirm` belong here: leaving them out is what let the
|
|
4
|
+
// header say "nothing running" above a list with rows in it.
|
|
5
|
+
"queued",
|
|
6
|
+
"needs_confirm",
|
|
2
7
|
"ready",
|
|
3
8
|
"booting",
|
|
4
9
|
"running",
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAgHA,MAAM,CAAC,MAAM,kBAAkB,GAAyB;IACtD,6EAA6E;IAC7E,6EAA6E;IAC7E,6DAA6D;IAC7D,QAAQ;IACR,eAAe;IACf,OAAO;IACP,SAAS;IACT,SAAS;IACT,gBAAgB;IAChB,SAAS;CACV,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAyB;IACrD,MAAM;IACN,OAAO;IACP,WAAW;IACX,4EAA4E;IAC5E,6EAA6E;IAC7E,wDAAwD;IACxD,cAAc;CACf,CAAC"}
|
package/dist/watch.d.ts
CHANGED
|
@@ -1,22 +1,39 @@
|
|
|
1
|
-
import { type HubEvent, type JobSnapshot, type WorkspaceEntry } from "./types.js";
|
|
1
|
+
import { type HubEvent, type JobSnapshot, type WorkspaceEntry, type WorkspaceError } from "./types.js";
|
|
2
|
+
export type { WorkspaceError };
|
|
2
3
|
export type WatchEmit = (event: HubEvent) => void;
|
|
4
|
+
export type CollectResult = {
|
|
5
|
+
readonly jobs: JobSnapshot[];
|
|
6
|
+
readonly errors: WorkspaceError[];
|
|
7
|
+
};
|
|
3
8
|
export type WorkspaceWatch = {
|
|
4
|
-
readonly refresh: (
|
|
9
|
+
readonly refresh: (opts?: {
|
|
10
|
+
drain?: boolean;
|
|
11
|
+
}) => Promise<void>;
|
|
5
12
|
readonly close: () => void;
|
|
6
13
|
readonly jobs: () => readonly JobSnapshot[];
|
|
14
|
+
readonly errors: () => readonly WorkspaceError[];
|
|
15
|
+
/** When the last successful read completed — the board's "as of" time. */
|
|
16
|
+
readonly asOf: () => string;
|
|
7
17
|
};
|
|
8
18
|
declare function pathExists(path: string): Promise<boolean>;
|
|
9
19
|
export declare function isInFlight(job: JobSnapshot): boolean;
|
|
10
20
|
export declare function isTerminal(job: JobSnapshot): boolean;
|
|
11
|
-
export declare function collectJobs(workspaces: readonly WorkspaceEntry[], now?: number): Promise<JobSnapshot[]>;
|
|
12
21
|
/**
|
|
13
|
-
*
|
|
14
|
-
*
|
|
22
|
+
* Read every registered workspace.
|
|
23
|
+
*
|
|
24
|
+
* Failures are **reported, not swallowed** (M-067 P-S2 data integrity). The
|
|
25
|
+
* old empty `catch` meant a repo whose `.prism/dispatch` had gone unreadable
|
|
26
|
+
* simply vanished from the board with no explanation — indistinguishable from
|
|
27
|
+
* a repo with no jobs. Now the caller gets the error and the UI can say which
|
|
28
|
+
* workspace it could not read.
|
|
15
29
|
*/
|
|
30
|
+
export declare function collectJobs(workspaces: readonly WorkspaceEntry[]): Promise<CollectResult>;
|
|
16
31
|
export declare function diffJobs(previous: readonly JobSnapshot[], next: readonly JobSnapshot[], seenFinished: Set<string>): HubEvent[];
|
|
17
32
|
export declare function watchWorkspaces(getWorkspaces: () => readonly WorkspaceEntry[], emit: WatchEmit, options?: {
|
|
18
33
|
readonly debounceMs?: number | undefined;
|
|
19
34
|
readonly pollMs?: number | undefined;
|
|
35
|
+
/** Advance the job queue for one workspace before reading it (ADR-0047). */
|
|
36
|
+
readonly drain?: ((workspacePath: string) => Promise<void>) | undefined;
|
|
20
37
|
}): WorkspaceWatch;
|
|
21
38
|
export { pathExists };
|
|
22
39
|
//# sourceMappingURL=watch.d.ts.map
|
package/dist/watch.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../src/watch.ts"],"names":[],"mappings":"AAMA,OAAO,EAGL,KAAK,QAAQ,EACb,KAAK,WAAW,EAChB,KAAK,cAAc,EACpB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../src/watch.ts"],"names":[],"mappings":"AAMA,OAAO,EAGL,KAAK,QAAQ,EACb,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,cAAc,EACpB,MAAM,YAAY,CAAC;AAEpB,YAAY,EAAE,cAAc,EAAE,CAAC;AAK/B,MAAM,MAAM,SAAS,GAAG,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;AAElD,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChE,QAAQ,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,SAAS,WAAW,EAAE,CAAC;IAC5C,QAAQ,CAAC,MAAM,EAAE,MAAM,SAAS,cAAc,EAAE,CAAC;IACjD,0EAA0E;IAC1E,QAAQ,CAAC,IAAI,EAAE,MAAM,MAAM,CAAC;CAC7B,CAAC;AAEF,iBAAe,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOxD;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAEpD;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAEpD;AAED;;;;;;;;GAQG;AACH,wBAAsB,WAAW,CAC/B,UAAU,EAAE,SAAS,cAAc,EAAE,GACpC,OAAO,CAAC,aAAa,CAAC,CAkBxB;AAUD,wBAAgB,QAAQ,CACtB,QAAQ,EAAE,SAAS,WAAW,EAAE,EAChC,IAAI,EAAE,SAAS,WAAW,EAAE,EAC5B,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,GACxB,QAAQ,EAAE,CA+BZ;AAED,wBAAgB,eAAe,CAC7B,aAAa,EAAE,MAAM,SAAS,cAAc,EAAE,EAC9C,IAAI,EAAE,SAAS,EACf,OAAO,GAAE;IACP,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,4EAA4E;IAC5E,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,aAAa,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC;CACpE,GACL,cAAc,CA8GhB;AAED,OAAO,EAAE,UAAU,EAAE,CAAC"}
|
package/dist/watch.js
CHANGED
|
@@ -22,30 +22,48 @@ export function isInFlight(job) {
|
|
|
22
22
|
export function isTerminal(job) {
|
|
23
23
|
return TERMINAL_STATUSES.includes(job.status);
|
|
24
24
|
}
|
|
25
|
-
|
|
25
|
+
/**
|
|
26
|
+
* Read every registered workspace.
|
|
27
|
+
*
|
|
28
|
+
* Failures are **reported, not swallowed** (M-067 P-S2 data integrity). The
|
|
29
|
+
* old empty `catch` meant a repo whose `.prism/dispatch` had gone unreadable
|
|
30
|
+
* simply vanished from the board with no explanation — indistinguishable from
|
|
31
|
+
* a repo with no jobs. Now the caller gets the error and the UI can say which
|
|
32
|
+
* workspace it could not read.
|
|
33
|
+
*/
|
|
34
|
+
export async function collectJobs(workspaces) {
|
|
26
35
|
const jobs = [];
|
|
36
|
+
const errors = [];
|
|
27
37
|
for (const entry of workspaces) {
|
|
28
38
|
try {
|
|
29
39
|
const records = await reapJobs(entry.path);
|
|
30
40
|
for (const record of records) {
|
|
31
|
-
jobs.push(toSnapshot(record, entry.path
|
|
41
|
+
jobs.push(toSnapshot(record, entry.path));
|
|
32
42
|
}
|
|
33
43
|
}
|
|
34
|
-
catch {
|
|
35
|
-
|
|
44
|
+
catch (cause) {
|
|
45
|
+
errors.push({
|
|
46
|
+
workspacePath: entry.path,
|
|
47
|
+
label: entry.label,
|
|
48
|
+
detail: cause instanceof Error ? cause.message : String(cause),
|
|
49
|
+
});
|
|
36
50
|
}
|
|
37
51
|
}
|
|
38
|
-
return jobs;
|
|
52
|
+
return { jobs, errors };
|
|
39
53
|
}
|
|
40
54
|
/**
|
|
41
55
|
* Diff two snapshots. `job.finished` fires once per terminal transition
|
|
42
56
|
* (deduped by workspace+id+status+updatedAt).
|
|
43
57
|
*/
|
|
58
|
+
function jobKey(job) {
|
|
59
|
+
return `${job.workspacePath}:${job.id}`;
|
|
60
|
+
}
|
|
44
61
|
export function diffJobs(previous, next, seenFinished) {
|
|
45
|
-
const prevById = new Map(previous.map((job) => [
|
|
62
|
+
const prevById = new Map(previous.map((job) => [jobKey(job), job]));
|
|
63
|
+
const nextKeys = new Set(next.map(jobKey));
|
|
46
64
|
const events = [];
|
|
47
65
|
for (const job of next) {
|
|
48
|
-
const key =
|
|
66
|
+
const key = jobKey(job);
|
|
49
67
|
const before = prevById.get(key);
|
|
50
68
|
if (!before) {
|
|
51
69
|
events.push({ type: "job.updated", job });
|
|
@@ -66,25 +84,48 @@ export function diffJobs(previous, next, seenFinished) {
|
|
|
66
84
|
}
|
|
67
85
|
}
|
|
68
86
|
}
|
|
87
|
+
for (const job of previous) {
|
|
88
|
+
if (!nextKeys.has(jobKey(job))) {
|
|
89
|
+
events.push({ type: "job.removed", job });
|
|
90
|
+
}
|
|
91
|
+
}
|
|
69
92
|
return events;
|
|
70
93
|
}
|
|
71
94
|
export function watchWorkspaces(getWorkspaces, emit, options = {}) {
|
|
72
95
|
const debounceMs = options.debounceMs ?? DEBOUNCE_MS;
|
|
73
96
|
const pollMs = options.pollMs ?? POLL_MS;
|
|
74
97
|
let snapshots = [];
|
|
98
|
+
let workspaceErrors = [];
|
|
99
|
+
let asOf = new Date().toISOString();
|
|
75
100
|
const seenFinished = new Set();
|
|
76
101
|
const watchers = new Map();
|
|
77
102
|
let timer;
|
|
78
103
|
let poll;
|
|
79
104
|
let closed = false;
|
|
80
|
-
const refresh = async () => {
|
|
105
|
+
const refresh = async (opts) => {
|
|
81
106
|
if (closed)
|
|
82
107
|
return;
|
|
83
|
-
|
|
108
|
+
// Drain before reading, so a queued job becomes a running job in the same
|
|
109
|
+
// tick the board renders (ADR-0047). This is the safety net for jobs whose
|
|
110
|
+
// originating MCP process exited before its own kick landed.
|
|
111
|
+
// Control actions (delete) skip drain so the board does not wait on a
|
|
112
|
+
// worker spawn just to drop a row that is already gone from disk.
|
|
113
|
+
if (opts?.drain !== false && options.drain) {
|
|
114
|
+
for (const entry of getWorkspaces()) {
|
|
115
|
+
await options.drain(entry.path).catch(() => {
|
|
116
|
+
/* a failed drain leaves the job queued; the next tick retries */
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
const { jobs: next, errors } = await collectJobs(getWorkspaces());
|
|
84
121
|
const events = diffJobs(snapshots, next, seenFinished);
|
|
122
|
+
const errorsChanged = errors.length !== workspaceErrors.length ||
|
|
123
|
+
errors.some((row, i) => row.detail !== workspaceErrors[i]?.detail);
|
|
85
124
|
snapshots = next;
|
|
86
|
-
|
|
87
|
-
|
|
125
|
+
workspaceErrors = errors;
|
|
126
|
+
asOf = new Date().toISOString();
|
|
127
|
+
if (events.length > 0 || errorsChanged) {
|
|
128
|
+
emit({ type: "snapshot", jobs: next, asOf, errors });
|
|
88
129
|
for (const event of events)
|
|
89
130
|
emit(event);
|
|
90
131
|
}
|
|
@@ -128,12 +169,15 @@ export function watchWorkspaces(getWorkspaces, emit, options = {}) {
|
|
|
128
169
|
}
|
|
129
170
|
};
|
|
130
171
|
void (async () => {
|
|
131
|
-
|
|
172
|
+
const initial = await collectJobs(getWorkspaces());
|
|
173
|
+
snapshots = initial.jobs;
|
|
174
|
+
workspaceErrors = initial.errors;
|
|
175
|
+
asOf = new Date().toISOString();
|
|
132
176
|
for (const job of snapshots) {
|
|
133
177
|
if (isTerminal(job))
|
|
134
178
|
seenFinished.add(finishedKey(job));
|
|
135
179
|
}
|
|
136
|
-
emit({ type: "snapshot", jobs: snapshots });
|
|
180
|
+
emit({ type: "snapshot", jobs: snapshots, asOf, errors: workspaceErrors });
|
|
137
181
|
syncWatchers();
|
|
138
182
|
if (closed)
|
|
139
183
|
return;
|
|
@@ -146,6 +190,8 @@ export function watchWorkspaces(getWorkspaces, emit, options = {}) {
|
|
|
146
190
|
return {
|
|
147
191
|
refresh,
|
|
148
192
|
jobs: () => snapshots,
|
|
193
|
+
errors: () => workspaceErrors,
|
|
194
|
+
asOf: () => asOf,
|
|
149
195
|
close: () => {
|
|
150
196
|
closed = true;
|
|
151
197
|
if (timer)
|
package/dist/watch.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watch.js","sourceRoot":"","sources":["../src/watch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAkB,MAAM,SAAS,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,EACL,kBAAkB,EAClB,iBAAiB,
|
|
1
|
+
{"version":3,"file":"watch.js","sourceRoot":"","sources":["../src/watch.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@repo-prism/dispatch-hub",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.17",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Prism Hub — loopback dashboard and OS notifications for Dispatch jobs",
|
|
6
6
|
"exports": {
|
|
@@ -16,15 +16,19 @@
|
|
|
16
16
|
"dist"
|
|
17
17
|
],
|
|
18
18
|
"scripts": {
|
|
19
|
-
"build": "tsc -p tsconfig.json && bun run scripts/build-dashboard.ts",
|
|
19
|
+
"build": "tsc -p tsconfig.json && bun run scripts/build-dashboard.ts && bun run scripts/build-notify.ts",
|
|
20
20
|
"start": "node dist/bin.js",
|
|
21
21
|
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
22
22
|
"test": "vitest run"
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@repo-prism/dispatch": "1.1.
|
|
25
|
+
"@repo-prism/dispatch": "1.1.17",
|
|
26
|
+
"@repo-prism/host-session": "1.1.17",
|
|
27
|
+
"@repo-prism/shared": "1.1.1"
|
|
26
28
|
},
|
|
27
29
|
"devDependencies": {
|
|
30
|
+
"gsap": "^3.15.0",
|
|
31
|
+
"lucide-react": "^1.25.0",
|
|
28
32
|
"@types/react": "^19.2.17",
|
|
29
33
|
"@types/react-dom": "^19.2.3",
|
|
30
34
|
"react": "^19.2.7",
|