@repo-prism/dispatch-hub 1.9.0 → 1.11.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/dist/dashboard/app.css +1 -1
- package/dist/dashboard/app.js +179 -152
- package/dist/dashboard/app.js.map +90 -42
- package/dist/dashboard/hub.css +1660 -172
- package/dist/dashboard/index.html +2 -2
- package/dist/ensure.js +3 -3
- package/dist/ensure.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/paths.d.ts +9 -0
- package/dist/paths.d.ts.map +1 -1
- package/dist/paths.js +16 -0
- package/dist/paths.js.map +1 -1
- package/dist/playground.d.ts +28 -5
- package/dist/playground.d.ts.map +1 -1
- package/dist/playground.js +114 -15
- package/dist/playground.js.map +1 -1
- package/dist/registry.d.ts +6 -2
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +60 -7
- package/dist/registry.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +219 -22
- package/dist/server.js.map +1 -1
- package/dist/trees.d.ts +56 -0
- package/dist/trees.d.ts.map +1 -0
- package/dist/trees.js +170 -0
- package/dist/trees.js.map +1 -0
- package/dist/types.d.ts +1 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/update.d.ts +37 -0
- package/dist/update.d.ts.map +1 -0
- package/dist/update.js +146 -0
- package/dist/update.js.map +1 -0
- package/dist/watch.d.ts +2 -1
- package/dist/watch.d.ts.map +1 -1
- package/dist/watch.js +59 -23
- package/dist/watch.js.map +1 -1
- package/package.json +4 -4
package/dist/trees.js
ADDED
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import { resolve } from "node:path";
|
|
2
|
+
import { commitJobWork, defaultGitRunner, discoverWorktrees, gitDirtyPaths, isSkillPlaybook, mergeJobBranch, removeGitWorktree, sameWorktreePath, } from "@repo-prism/dispatch";
|
|
3
|
+
const TREE_JOB_RANK = {
|
|
4
|
+
running: 0,
|
|
5
|
+
booting: 0,
|
|
6
|
+
ready: 0,
|
|
7
|
+
queued: 1,
|
|
8
|
+
needs_confirm: 1,
|
|
9
|
+
paused: 2,
|
|
10
|
+
waiting_on_you: 2,
|
|
11
|
+
blocked: 2,
|
|
12
|
+
failed: 3,
|
|
13
|
+
error: 3,
|
|
14
|
+
needs_review: 4,
|
|
15
|
+
done: 5,
|
|
16
|
+
};
|
|
17
|
+
export function sortTreeJobs(jobs) {
|
|
18
|
+
return [...jobs].sort((a, b) => {
|
|
19
|
+
const rankA = TREE_JOB_RANK[a.status] ?? 6;
|
|
20
|
+
const rankB = TREE_JOB_RANK[b.status] ?? 6;
|
|
21
|
+
return rankA - rankB;
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
function treeSortRank(tree) {
|
|
25
|
+
if (tree.kind === "primary")
|
|
26
|
+
return 0;
|
|
27
|
+
const live = tree.jobStatus === "running" ||
|
|
28
|
+
tree.jobStatus === "booting" ||
|
|
29
|
+
tree.jobStatus === "ready";
|
|
30
|
+
if (live)
|
|
31
|
+
return 1;
|
|
32
|
+
if (tree.dirty)
|
|
33
|
+
return 2;
|
|
34
|
+
return 3;
|
|
35
|
+
}
|
|
36
|
+
function samePath(a, b) {
|
|
37
|
+
return sameWorktreePath(a, b);
|
|
38
|
+
}
|
|
39
|
+
function isSkillTreeJob(job) {
|
|
40
|
+
if (isSkillPlaybook(job.playbook))
|
|
41
|
+
return true;
|
|
42
|
+
return /^\s*skill:\s/i.test(job.title);
|
|
43
|
+
}
|
|
44
|
+
const TREE_CACHE_TTL_MS = 45_000;
|
|
45
|
+
const treeCache = new Map();
|
|
46
|
+
export function invalidateRepoTrees(workspacePath) {
|
|
47
|
+
if (!workspacePath) {
|
|
48
|
+
treeCache.clear();
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
treeCache.delete(resolve(workspacePath));
|
|
52
|
+
}
|
|
53
|
+
export async function collectRepoTrees(input, opts) {
|
|
54
|
+
const key = resolve(input.workspacePath);
|
|
55
|
+
const hit = treeCache.get(key);
|
|
56
|
+
if (!opts?.force && hit && Date.now() - hit.at < TREE_CACHE_TTL_MS) {
|
|
57
|
+
return hit.value;
|
|
58
|
+
}
|
|
59
|
+
const discovered = await discoverWorktrees(input.workspacePath);
|
|
60
|
+
const listed = discovered.length > 0
|
|
61
|
+
? discovered
|
|
62
|
+
: [
|
|
63
|
+
{
|
|
64
|
+
path: input.workspacePath,
|
|
65
|
+
branch: "",
|
|
66
|
+
source: "git",
|
|
67
|
+
},
|
|
68
|
+
];
|
|
69
|
+
const dirtyLists = await Promise.all(listed.map((tree) => gitDirtyPaths(tree.path).catch(() => [])));
|
|
70
|
+
const trees = [];
|
|
71
|
+
listed.forEach((tree, index) => {
|
|
72
|
+
const kind = samePath(tree.path, input.workspacePath)
|
|
73
|
+
? "primary"
|
|
74
|
+
: "linked";
|
|
75
|
+
const files = dirtyLists[index] ?? [];
|
|
76
|
+
const matches = input.jobs.filter((row) => {
|
|
77
|
+
if (isSkillTreeJob(row))
|
|
78
|
+
return false;
|
|
79
|
+
if (row.worktreePath)
|
|
80
|
+
return samePath(row.worktreePath, tree.path);
|
|
81
|
+
return (kind === "primary" &&
|
|
82
|
+
Boolean(row.workspacePath) &&
|
|
83
|
+
samePath(row.workspacePath, input.workspacePath));
|
|
84
|
+
});
|
|
85
|
+
const job = matches.find((row) => row.status === "running" ||
|
|
86
|
+
row.status === "booting" ||
|
|
87
|
+
row.status === "ready") ?? matches[0];
|
|
88
|
+
trees.push({
|
|
89
|
+
path: tree.path,
|
|
90
|
+
branch: tree.branch,
|
|
91
|
+
source: tree.source,
|
|
92
|
+
kind,
|
|
93
|
+
dirty: files.length > 0,
|
|
94
|
+
files: files.length,
|
|
95
|
+
jobCount: matches.length,
|
|
96
|
+
jobs: sortTreeJobs(matches)
|
|
97
|
+
.slice(0, 40)
|
|
98
|
+
.map((row) => ({
|
|
99
|
+
id: row.id,
|
|
100
|
+
title: row.title,
|
|
101
|
+
status: row.status,
|
|
102
|
+
})),
|
|
103
|
+
...(job
|
|
104
|
+
? {
|
|
105
|
+
jobId: job.id,
|
|
106
|
+
jobTitle: job.title,
|
|
107
|
+
jobStatus: job.status,
|
|
108
|
+
}
|
|
109
|
+
: {}),
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
trees.sort((a, b) => {
|
|
113
|
+
const rank = treeSortRank(a) - treeSortRank(b);
|
|
114
|
+
if (rank !== 0)
|
|
115
|
+
return rank;
|
|
116
|
+
return a.branch.localeCompare(b.branch);
|
|
117
|
+
});
|
|
118
|
+
const value = { path: input.workspacePath, label: input.label, trees };
|
|
119
|
+
treeCache.set(key, { at: Date.now(), value });
|
|
120
|
+
return value;
|
|
121
|
+
}
|
|
122
|
+
export async function runTreeAction(input) {
|
|
123
|
+
const tree = input.treePath.trim();
|
|
124
|
+
if (!tree)
|
|
125
|
+
return { ok: false, detail: "Missing worktree." };
|
|
126
|
+
if (input.action === "remove") {
|
|
127
|
+
if (samePath(tree, input.workspacePath)) {
|
|
128
|
+
return { ok: false, detail: "The primary checkout cannot be removed." };
|
|
129
|
+
}
|
|
130
|
+
const ok = await removeGitWorktree(input.workspacePath, tree);
|
|
131
|
+
return {
|
|
132
|
+
ok,
|
|
133
|
+
detail: ok ? "Removed the linked tree." : "Could not remove that tree.",
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
if (input.action === "merge") {
|
|
137
|
+
const branch = input.branch?.trim();
|
|
138
|
+
if (!branch)
|
|
139
|
+
return { ok: false, detail: "That tree has no branch." };
|
|
140
|
+
const result = await mergeJobBranch(input.workspacePath, branch);
|
|
141
|
+
return {
|
|
142
|
+
ok: result.ok,
|
|
143
|
+
detail: result.ok
|
|
144
|
+
? result.already
|
|
145
|
+
? `Already on ${result.into}.`
|
|
146
|
+
: `Merged into ${result.into}.`
|
|
147
|
+
: (result.error ?? "Merge failed."),
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
if (input.action === "commit") {
|
|
151
|
+
const result = await commitJobWork(tree, {
|
|
152
|
+
jobId: input.jobId?.trim() || "tree",
|
|
153
|
+
title: input.title?.trim() || input.branch?.trim() || "worktree",
|
|
154
|
+
});
|
|
155
|
+
return {
|
|
156
|
+
ok: result.committed,
|
|
157
|
+
detail: result.committed
|
|
158
|
+
? result.summary || "Committed."
|
|
159
|
+
: "Nothing to commit.",
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
const pushed = await defaultGitRunner(tree, ["push", "-u", "origin", "HEAD"]);
|
|
163
|
+
return {
|
|
164
|
+
ok: pushed.ok,
|
|
165
|
+
detail: pushed.ok
|
|
166
|
+
? "Pushed this branch."
|
|
167
|
+
: pushed.stderr.trim() || "Push failed.",
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=trees.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trees.js","sourceRoot":"","sources":["../src/trees.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
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,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAE7E,MAAM,MAAM,SAAS,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAC5C,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;AAEtC,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,UAAU,EAAE,SAAS,cAAc,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
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":"AA4HA,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/update.d.ts
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
export type NpmPack = (version: string, dest: string) => Promise<{
|
|
2
|
+
readonly ok: boolean;
|
|
3
|
+
readonly detail: string;
|
|
4
|
+
}>;
|
|
5
|
+
export declare function isNewerVersion(latest: string, current: string): boolean;
|
|
6
|
+
/**
|
|
7
|
+
* A checkout of this repo must not hop to npm — that would replace the code
|
|
8
|
+
* under development. Published npx/node_modules copies still hop.
|
|
9
|
+
*/
|
|
10
|
+
export declare function isLocalPrismInstall(entry?: string | undefined): boolean;
|
|
11
|
+
export declare function fetchLatestMcpVersion(fetchImpl?: typeof fetch): Promise<string | undefined>;
|
|
12
|
+
export type McpUpdateStatus = {
|
|
13
|
+
readonly current: string;
|
|
14
|
+
readonly latest?: string;
|
|
15
|
+
readonly stale: boolean;
|
|
16
|
+
readonly localCheckout: boolean;
|
|
17
|
+
readonly hop: "current" | "reload" | "local";
|
|
18
|
+
};
|
|
19
|
+
export declare function mcpUpdateStatus(currentVersion: string, fetchImpl?: typeof fetch, localCheckout?: boolean): Promise<McpUpdateStatus>;
|
|
20
|
+
export declare function defaultNpmPack(version: string, dest: string): Promise<{
|
|
21
|
+
readonly ok: boolean;
|
|
22
|
+
readonly detail: string;
|
|
23
|
+
}>;
|
|
24
|
+
export type ApplyMcpUpdateResult = {
|
|
25
|
+
readonly ok: boolean;
|
|
26
|
+
readonly current: string;
|
|
27
|
+
readonly latest?: string;
|
|
28
|
+
readonly cached: boolean;
|
|
29
|
+
readonly localCheckout: boolean;
|
|
30
|
+
readonly message: string;
|
|
31
|
+
};
|
|
32
|
+
export declare function applyMcpUpdate(currentVersion: string, options?: {
|
|
33
|
+
readonly pack?: NpmPack;
|
|
34
|
+
readonly fetchImpl?: typeof fetch;
|
|
35
|
+
readonly localCheckout?: boolean;
|
|
36
|
+
}): Promise<ApplyMcpUpdateResult>;
|
|
37
|
+
//# sourceMappingURL=update.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"AAYA,MAAM,MAAM,OAAO,GAAG,CACpB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,KACT,OAAO,CAAC;IAAE,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAEhE,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CASvE;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,qBAAkB,GAAG,OAAO,CASpE;AAED,wBAAsB,qBAAqB,CACzC,SAAS,GAAE,OAAO,KAAa,GAC9B,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAgB7B;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,GAAG,EAAE,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;CAC9C,CAAC;AAEF,wBAAsB,eAAe,CACnC,cAAc,EAAE,MAAM,EACtB,SAAS,GAAE,OAAO,KAAa,EAC/B,aAAa,UAAwB,GACpC,OAAO,CAAC,eAAe,CAAC,CAkB1B;AAED,wBAAsB,cAAc,CAClC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,GACX,OAAO,CAAC;IAAE,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAe5D;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,wBAAsB,cAAc,CAClC,cAAc,EAAE,MAAM,EACtB,OAAO,GAAE;IACP,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IAClC,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;CAC7B,GACL,OAAO,CAAC,oBAAoB,CAAC,CA2D/B"}
|
package/dist/update.js
ADDED
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { execFile } from "node:child_process";
|
|
2
|
+
import { mkdtemp, rm } from "node:fs/promises";
|
|
3
|
+
import { tmpdir } from "node:os";
|
|
4
|
+
import { join } from "node:path";
|
|
5
|
+
import { promisify } from "node:util";
|
|
6
|
+
const PACKAGE_NAME = "@repo-prism/mcp-server";
|
|
7
|
+
const REGISTRY_URL = "https://registry.npmjs.org/@repo-prism/mcp-server/latest";
|
|
8
|
+
const PACK_MS = 45_000;
|
|
9
|
+
const execFileAsync = promisify(execFile);
|
|
10
|
+
export function isNewerVersion(latest, current) {
|
|
11
|
+
const a = latest.split(".").map((part) => Number.parseInt(part, 10));
|
|
12
|
+
const b = current.split(".").map((part) => Number.parseInt(part, 10));
|
|
13
|
+
for (let i = 0; i < 3; i++) {
|
|
14
|
+
const left = Number.isFinite(a[i]) ? a[i] : 0;
|
|
15
|
+
const right = Number.isFinite(b[i]) ? b[i] : 0;
|
|
16
|
+
if (left !== right)
|
|
17
|
+
return left > right;
|
|
18
|
+
}
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* A checkout of this repo must not hop to npm — that would replace the code
|
|
23
|
+
* under development. Published npx/node_modules copies still hop.
|
|
24
|
+
*/
|
|
25
|
+
export function isLocalPrismInstall(entry = process.argv[1]) {
|
|
26
|
+
if (!entry)
|
|
27
|
+
return false;
|
|
28
|
+
const normalized = entry.replaceAll("\\", "/");
|
|
29
|
+
if (normalized.includes("/node_modules/"))
|
|
30
|
+
return false;
|
|
31
|
+
return (normalized.includes("/packages/dispatch-hub/") ||
|
|
32
|
+
normalized.includes("/packages/mcp-server/") ||
|
|
33
|
+
normalized.endsWith("/src/bin.ts"));
|
|
34
|
+
}
|
|
35
|
+
export async function fetchLatestMcpVersion(fetchImpl = fetch) {
|
|
36
|
+
const controller = new AbortController();
|
|
37
|
+
const timer = setTimeout(() => controller.abort(), 2000);
|
|
38
|
+
try {
|
|
39
|
+
const response = await fetchImpl(REGISTRY_URL, {
|
|
40
|
+
signal: controller.signal,
|
|
41
|
+
headers: { accept: "application/json" },
|
|
42
|
+
});
|
|
43
|
+
if (!response.ok)
|
|
44
|
+
return undefined;
|
|
45
|
+
const body = (await response.json());
|
|
46
|
+
return typeof body.version === "string" ? body.version : undefined;
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
return undefined;
|
|
50
|
+
}
|
|
51
|
+
finally {
|
|
52
|
+
clearTimeout(timer);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
export async function mcpUpdateStatus(currentVersion, fetchImpl = fetch, localCheckout = isLocalPrismInstall()) {
|
|
56
|
+
const latest = await fetchLatestMcpVersion(fetchImpl);
|
|
57
|
+
if (!latest) {
|
|
58
|
+
return {
|
|
59
|
+
current: currentVersion,
|
|
60
|
+
stale: false,
|
|
61
|
+
localCheckout,
|
|
62
|
+
hop: "current",
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
const stale = isNewerVersion(latest, currentVersion);
|
|
66
|
+
return {
|
|
67
|
+
current: currentVersion,
|
|
68
|
+
latest,
|
|
69
|
+
stale,
|
|
70
|
+
localCheckout,
|
|
71
|
+
hop: stale ? (localCheckout ? "local" : "reload") : "current",
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
export async function defaultNpmPack(version, dest) {
|
|
75
|
+
try {
|
|
76
|
+
await execFileAsync("npm", ["pack", `${PACKAGE_NAME}@${version}`, "--pack-destination", dest], { timeout: PACK_MS });
|
|
77
|
+
return { ok: true, detail: `Cached ${version}.` };
|
|
78
|
+
}
|
|
79
|
+
catch (cause) {
|
|
80
|
+
const detail = cause instanceof Error
|
|
81
|
+
? (cause.message.split("\n")[0] ?? cause.message)
|
|
82
|
+
: "npm pack failed.";
|
|
83
|
+
return { ok: false, detail };
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
export async function applyMcpUpdate(currentVersion, options = {}) {
|
|
87
|
+
const pack = options.pack ?? defaultNpmPack;
|
|
88
|
+
const fetchImpl = options.fetchImpl ?? fetch;
|
|
89
|
+
const localCheckout = options.localCheckout ?? isLocalPrismInstall();
|
|
90
|
+
const latest = await fetchLatestMcpVersion(fetchImpl);
|
|
91
|
+
if (!latest) {
|
|
92
|
+
return {
|
|
93
|
+
ok: false,
|
|
94
|
+
current: currentVersion,
|
|
95
|
+
cached: false,
|
|
96
|
+
localCheckout,
|
|
97
|
+
message: "Could not reach npm to see the latest Prism.",
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
if (!isNewerVersion(latest, currentVersion)) {
|
|
101
|
+
return {
|
|
102
|
+
ok: true,
|
|
103
|
+
current: currentVersion,
|
|
104
|
+
latest,
|
|
105
|
+
cached: false,
|
|
106
|
+
localCheckout,
|
|
107
|
+
message: `Already on ${currentVersion}.`,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
if (localCheckout) {
|
|
111
|
+
return {
|
|
112
|
+
ok: false,
|
|
113
|
+
current: currentVersion,
|
|
114
|
+
latest,
|
|
115
|
+
cached: false,
|
|
116
|
+
localCheckout,
|
|
117
|
+
message: `Prism ${latest} is on npm. This Console is a local ${currentVersion} build — reload will not hop until you publish or run the npx install.`,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
const dir = await mkdtemp(join(tmpdir(), "prism-mcp-pack-"));
|
|
121
|
+
try {
|
|
122
|
+
const packed = await pack(latest, dir);
|
|
123
|
+
if (!packed.ok) {
|
|
124
|
+
return {
|
|
125
|
+
ok: false,
|
|
126
|
+
current: currentVersion,
|
|
127
|
+
latest,
|
|
128
|
+
cached: false,
|
|
129
|
+
localCheckout,
|
|
130
|
+
message: packed.detail,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
return {
|
|
134
|
+
ok: true,
|
|
135
|
+
current: currentVersion,
|
|
136
|
+
latest,
|
|
137
|
+
cached: true,
|
|
138
|
+
localCheckout,
|
|
139
|
+
message: `Cached Prism ${latest}. Reload Prism MCP in this chat to hop — a running session cannot swap mid-flight.`,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
finally {
|
|
143
|
+
await rm(dir, { recursive: true, force: true });
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"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"}
|
package/dist/watch.d.ts
CHANGED
|
@@ -27,11 +27,12 @@ export declare function isTerminal(job: JobSnapshot): boolean;
|
|
|
27
27
|
* a repo with no jobs. Now the caller gets the error and the UI can say which
|
|
28
28
|
* workspace it could not read.
|
|
29
29
|
*/
|
|
30
|
-
export declare function collectJobs(workspaces: readonly WorkspaceEntry[]): Promise<CollectResult>;
|
|
30
|
+
export declare function collectJobs(workspaces: readonly WorkspaceEntry[], env?: NodeJS.ProcessEnv): Promise<CollectResult>;
|
|
31
31
|
export declare function diffJobs(previous: readonly JobSnapshot[], next: readonly JobSnapshot[], seenFinished: Set<string>): HubEvent[];
|
|
32
32
|
export declare function watchWorkspaces(getWorkspaces: () => readonly WorkspaceEntry[], emit: WatchEmit, options?: {
|
|
33
33
|
readonly debounceMs?: number | undefined;
|
|
34
34
|
readonly pollMs?: number | undefined;
|
|
35
|
+
readonly env?: NodeJS.ProcessEnv | undefined;
|
|
35
36
|
/** Advance the job queue for one workspace before reading it (ADR-0047). */
|
|
36
37
|
readonly drain?: ((workspacePath: string) => Promise<void>) | undefined;
|
|
37
38
|
}): WorkspaceWatch;
|
package/dist/watch.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../src/watch.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../src/watch.ts"],"names":[],"mappings":"AAcA,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,EACrC,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,OAAO,CAAC,aAAa,CAAC,CAsBxB;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,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC;IAC7C,4EAA4E;IAC5E,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,aAAa,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC;CACpE,GACL,cAAc,CAqJhB;AAED,OAAO,EAAE,UAAU,EAAE,CAAC"}
|
package/dist/watch.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { access } from "node:fs/promises";
|
|
2
2
|
import { watch } from "node:fs";
|
|
3
|
-
import { join } from "node:path";
|
|
4
|
-
import { reapJobs } from "@repo-prism/dispatch";
|
|
3
|
+
import { dirname, join } from "node:path";
|
|
4
|
+
import { jobsPath, listStoredWorkspaceRoots, reapJobs, runWithJobsEnv, useGlobalJobStore, } from "@repo-prism/dispatch";
|
|
5
5
|
import { formatJobFinishedNotice } from "./notice.js";
|
|
6
|
+
import { mergeHubEnv } from "./paths.js";
|
|
7
|
+
import { mergeWorkspaceEntries } from "./registry.js";
|
|
6
8
|
import { finishedKey, snapshotKey, toSnapshot } from "./snapshot.js";
|
|
7
9
|
import { IN_FLIGHT_STATUSES, TERMINAL_STATUSES, } from "./types.js";
|
|
8
10
|
const DEBOUNCE_MS = 250;
|
|
@@ -31,12 +33,13 @@ export function isTerminal(job) {
|
|
|
31
33
|
* a repo with no jobs. Now the caller gets the error and the UI can say which
|
|
32
34
|
* workspace it could not read.
|
|
33
35
|
*/
|
|
34
|
-
export async function collectJobs(workspaces) {
|
|
36
|
+
export async function collectJobs(workspaces, env = process.env) {
|
|
37
|
+
const listed = mergeWorkspaceEntries(workspaces, await listStoredWorkspaceRoots(env));
|
|
35
38
|
const jobs = [];
|
|
36
39
|
const errors = [];
|
|
37
|
-
for (const entry of
|
|
40
|
+
for (const entry of listed) {
|
|
38
41
|
try {
|
|
39
|
-
const records = await reapJobs(entry.path);
|
|
42
|
+
const records = await runWithJobsEnv(env, () => reapJobs(entry.path));
|
|
40
43
|
for (const record of records) {
|
|
41
44
|
jobs.push(toSnapshot(record, entry.path));
|
|
42
45
|
}
|
|
@@ -71,7 +74,7 @@ export function diffJobs(previous, next, seenFinished) {
|
|
|
71
74
|
else if (snapshotKey(before) !== snapshotKey(job)) {
|
|
72
75
|
events.push({ type: "job.updated", job });
|
|
73
76
|
}
|
|
74
|
-
if (isTerminal(job) &&
|
|
77
|
+
if (isTerminal(job) && before && !isTerminal(before)) {
|
|
75
78
|
const finish = finishedKey(job);
|
|
76
79
|
if (!seenFinished.has(finish)) {
|
|
77
80
|
seenFinished.add(finish);
|
|
@@ -94,30 +97,28 @@ export function diffJobs(previous, next, seenFinished) {
|
|
|
94
97
|
export function watchWorkspaces(getWorkspaces, emit, options = {}) {
|
|
95
98
|
const debounceMs = options.debounceMs ?? DEBOUNCE_MS;
|
|
96
99
|
const pollMs = options.pollMs ?? POLL_MS;
|
|
100
|
+
const env = mergeHubEnv(options.env);
|
|
97
101
|
let snapshots = [];
|
|
98
102
|
let workspaceErrors = [];
|
|
99
103
|
let asOf = new Date().toISOString();
|
|
100
104
|
const seenFinished = new Set();
|
|
101
105
|
const watchers = new Map();
|
|
106
|
+
let extraPaths = [];
|
|
102
107
|
let timer;
|
|
103
108
|
let poll;
|
|
104
109
|
let closed = false;
|
|
105
|
-
const
|
|
110
|
+
const listed = () => mergeWorkspaceEntries(getWorkspaces(), extraPaths);
|
|
111
|
+
const applySnapshot = async () => {
|
|
106
112
|
if (closed)
|
|
107
113
|
return;
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
/* a failed drain leaves the job queued; the next tick retries */
|
|
117
|
-
});
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
const { jobs: next, errors } = await collectJobs(getWorkspaces());
|
|
114
|
+
extraPaths = await listStoredWorkspaceRoots(env);
|
|
115
|
+
const { jobs: collected, errors } = await collectJobs(getWorkspaces(), env);
|
|
116
|
+
const failed = new Set(errors.map((row) => row.workspacePath));
|
|
117
|
+
const next = [
|
|
118
|
+
...collected,
|
|
119
|
+
...snapshots.filter((job) => failed.has(job.workspacePath) &&
|
|
120
|
+
!collected.some((row) => row.id === job.id && row.workspacePath === job.workspacePath)),
|
|
121
|
+
];
|
|
121
122
|
const events = diffJobs(snapshots, next, seenFinished);
|
|
122
123
|
const errorsChanged = errors.length !== workspaceErrors.length ||
|
|
123
124
|
errors.some((row, i) => row.detail !== workspaceErrors[i]?.detail);
|
|
@@ -130,6 +131,36 @@ export function watchWorkspaces(getWorkspaces, emit, options = {}) {
|
|
|
130
131
|
emit(event);
|
|
131
132
|
}
|
|
132
133
|
};
|
|
134
|
+
const runDrain = async () => {
|
|
135
|
+
if (!options.drain)
|
|
136
|
+
return;
|
|
137
|
+
for (const entry of listed()) {
|
|
138
|
+
if (closed)
|
|
139
|
+
return;
|
|
140
|
+
await options.drain(entry.path).catch(() => {
|
|
141
|
+
/* a failed drain leaves the job queued; the next tick retries */
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
};
|
|
145
|
+
const refresh = async (opts) => {
|
|
146
|
+
if (closed)
|
|
147
|
+
return;
|
|
148
|
+
// Drain so a queued job can become running (ADR-0047). Await it only when
|
|
149
|
+
// the caller just enqueued work (`drain: true`). The poll tick and
|
|
150
|
+
// workspace register must not wait — a slow worker-auth drain would freeze
|
|
151
|
+
// GET /api/jobs, which is how the board and these tests observe disk.
|
|
152
|
+
// Control actions (delete) skip drain so the board does not wait on a
|
|
153
|
+
// spawn just to drop a row that is already gone from disk.
|
|
154
|
+
if (opts?.drain === true && options.drain) {
|
|
155
|
+
await runDrain();
|
|
156
|
+
}
|
|
157
|
+
else if (opts?.drain !== false && options.drain) {
|
|
158
|
+
void runDrain().then(() => {
|
|
159
|
+
void applySnapshot();
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
await applySnapshot();
|
|
163
|
+
};
|
|
133
164
|
const schedule = () => {
|
|
134
165
|
if (timer)
|
|
135
166
|
clearTimeout(timer);
|
|
@@ -139,7 +170,7 @@ export function watchWorkspaces(getWorkspaces, emit, options = {}) {
|
|
|
139
170
|
timer.unref?.();
|
|
140
171
|
};
|
|
141
172
|
const syncWatchers = () => {
|
|
142
|
-
const live = new Set(
|
|
173
|
+
const live = new Set(listed().map((entry) => entry.path));
|
|
143
174
|
for (const [path, group] of watchers) {
|
|
144
175
|
if (live.has(path))
|
|
145
176
|
continue;
|
|
@@ -153,7 +184,11 @@ export function watchWorkspaces(getWorkspaces, emit, options = {}) {
|
|
|
153
184
|
const group = [];
|
|
154
185
|
const dispatch = join(path, ".prism", "dispatch");
|
|
155
186
|
const runs = join(dispatch, "runs");
|
|
156
|
-
|
|
187
|
+
const targets = [dispatch, runs];
|
|
188
|
+
if (useGlobalJobStore(env)) {
|
|
189
|
+
targets.push(dirname(jobsPath(path, env)));
|
|
190
|
+
}
|
|
191
|
+
for (const target of targets) {
|
|
157
192
|
try {
|
|
158
193
|
const watcher = watch(target, { persistent: false }, () => schedule());
|
|
159
194
|
watcher.on("error", () => {
|
|
@@ -169,7 +204,8 @@ export function watchWorkspaces(getWorkspaces, emit, options = {}) {
|
|
|
169
204
|
}
|
|
170
205
|
};
|
|
171
206
|
void (async () => {
|
|
172
|
-
|
|
207
|
+
extraPaths = await listStoredWorkspaceRoots(env);
|
|
208
|
+
const initial = await collectJobs(getWorkspaces(), env);
|
|
173
209
|
snapshots = initial.jobs;
|
|
174
210
|
workspaceErrors = initial.errors;
|
|
175
211
|
asOf = new Date().toISOString();
|
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;
|
|
1
|
+
{"version":3,"file":"watch.js","sourceRoot":"","sources":["../src/watch.ts"],"names":[],"mappings":"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"}
|