@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/paths.js
CHANGED
|
@@ -31,8 +31,36 @@ export function hubEnabled(env = process.env) {
|
|
|
31
31
|
return false;
|
|
32
32
|
return true;
|
|
33
33
|
}
|
|
34
|
-
|
|
35
|
-
|
|
34
|
+
/**
|
|
35
|
+
* The address bar name (ADR-0048).
|
|
36
|
+
*
|
|
37
|
+
* `prismhq.localhost` is the default. RFC 6761 reserves `.localhost`, so
|
|
38
|
+
* browsers resolve it to loopback with no DNS, hosts file, or sudo. The
|
|
39
|
+
* daemon still binds `127.0.0.1:17330`. `local.prismhq.in` stays an opt-in
|
|
40
|
+
* (`PRISM_CONSOLE_ALIAS=1`) exact-name alias — never a `*.prismhq.in` suffix.
|
|
41
|
+
*/
|
|
42
|
+
export const CONSOLE_HOST = "prismhq.localhost";
|
|
43
|
+
/** Branded loopback alias. Exact name only — never a `*.prismhq.in` suffix. */
|
|
44
|
+
export const CONSOLE_ALIAS_HOST = "local.prismhq.in";
|
|
45
|
+
export function consoleHost(env = process.env) {
|
|
46
|
+
if (env.PRISM_CONSOLE_HOST?.trim())
|
|
47
|
+
return env.PRISM_CONSOLE_HOST.trim();
|
|
48
|
+
if (env.PRISM_CONSOLE_ALIAS === "1")
|
|
49
|
+
return CONSOLE_ALIAS_HOST;
|
|
50
|
+
return CONSOLE_HOST;
|
|
51
|
+
}
|
|
52
|
+
export function dashboardUrl(port, token, env = process.env) {
|
|
53
|
+
const base = `http://${consoleHost(env)}:${port}/`;
|
|
36
54
|
return token ? `${base}?token=${encodeURIComponent(token)}` : base;
|
|
37
55
|
}
|
|
56
|
+
/**
|
|
57
|
+
* The address the daemon binds and that health checks dial.
|
|
58
|
+
*
|
|
59
|
+
* Deliberately still the literal loopback IP: a name is a nicety for the
|
|
60
|
+
* address bar, but `ensureHub` polling a name it cannot resolve would turn a
|
|
61
|
+
* cosmetic feature into a broken dispatch.
|
|
62
|
+
*/
|
|
63
|
+
export function hubOrigin(port) {
|
|
64
|
+
return `http://127.0.0.1:${port}`;
|
|
65
|
+
}
|
|
38
66
|
//# sourceMappingURL=paths.js.map
|
package/dist/paths.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,4DAA4D;AAC5D,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,CAAC;AAE9B,MAAM,CAAC,MAAM,YAAY,GAAG,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,4DAA4D;AAC5D,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,CAAC;AAE9B,MAAM,CAAC,MAAM,YAAY,GAAG,YAAY,CAAC;AAczC,MAAM,UAAU,OAAO,CAAC,MAAc,OAAO,CAAC,GAAG;IAC/C,MAAM,QAAQ,GAAG,GAAG,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC;IAC5C,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAI,GAAG,OAAO,EAAE;IAC5C,OAAO,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAI,GAAG,OAAO,EAAE;IAC9C,OAAO,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,MAAc,OAAO,CAAC,GAAG;IAC/C,MAAM,GAAG,GAAG,GAAG,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC;IACvC,IAAI,GAAG,KAAK,GAAG;QAAE,OAAO,CAAC,CAAC;IAC1B,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IACzD,OAAO,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAc,OAAO,CAAC,GAAG;IAClD,IAAI,GAAG,CAAC,SAAS,KAAK,GAAG;QAAE,OAAO,KAAK,CAAC;IACxC,2EAA2E;IAC3E,0CAA0C;IAC1C,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,IAAI,GAAG,CAAC,SAAS,KAAK,GAAG;QAAE,OAAO,KAAK,CAAC;IACjE,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,mBAAmB,CAAC;AAEhD,+EAA+E;AAC/E,MAAM,CAAC,MAAM,kBAAkB,GAAG,kBAAkB,CAAC;AAErD,MAAM,UAAU,WAAW,CAAC,MAAc,OAAO,CAAC,GAAG;IACnD,IAAI,GAAG,CAAC,kBAAkB,EAAE,IAAI,EAAE;QAAE,OAAO,GAAG,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC;IACzE,IAAI,GAAG,CAAC,mBAAmB,KAAK,GAAG;QAAE,OAAO,kBAAkB,CAAC;IAC/D,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,IAAY,EACZ,KAAc,EACd,MAAc,OAAO,CAAC,GAAG;IAEzB,MAAM,IAAI,GAAG,UAAU,WAAW,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC;IACnD,OAAO,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,UAAU,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACrE,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,OAAO,oBAAoB,IAAI,EAAE,CAAC;AACpC,CAAC"}
|
package/dist/server.d.ts
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
|
+
import { type IntelligencePlane } from "./intelligence.js";
|
|
1
2
|
import { type NotifyFn } from "./notify.js";
|
|
2
3
|
import { type HubEnv } from "./paths.js";
|
|
3
4
|
import type { HubRecord } from "./types.js";
|
|
4
|
-
export type JobControlFn = (workspacePath: string, jobId: string, action: string
|
|
5
|
+
export type JobControlFn = (workspacePath: string, jobId: string, action: string, extra?: {
|
|
6
|
+
readonly path?: string;
|
|
7
|
+
}) => Promise<unknown>;
|
|
5
8
|
export type HubOptions = {
|
|
6
9
|
readonly env?: HubEnv;
|
|
7
10
|
readonly notify?: NotifyFn;
|
|
@@ -10,6 +13,10 @@ export type HubOptions = {
|
|
|
10
13
|
readonly assetsDir?: string;
|
|
11
14
|
readonly control?: JobControlFn;
|
|
12
15
|
readonly version?: string;
|
|
16
|
+
/** Injected in tests; production drains through `@repo-prism/dispatch`. */
|
|
17
|
+
readonly drain?: (workspacePath: string) => Promise<void>;
|
|
18
|
+
/** Injected in tests; production lazily imports Core (ADR-0048). */
|
|
19
|
+
readonly intelligence?: IntelligencePlane;
|
|
13
20
|
};
|
|
14
21
|
export type StartedHub = {
|
|
15
22
|
readonly record: HubRecord;
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AA+BA,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,mBAAmB,CAAC;AAS3B,OAAO,EAAoB,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAyB,KAAK,MAAM,EAAE,MAAM,YAAY,CAAC;AAEhE,OAAO,KAAK,EAEV,SAAS,EAIV,MAAM,YAAY,CAAC;AAgBpB,MAAM,MAAM,YAAY,GAAG,CACzB,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,KAAK,CAAC,EAAE;IAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,KAC/B,OAAO,CAAC,OAAO,CAAC,CAAC;AAEtB,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC;IAChC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,2EAA2E;IAC3E,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,oEAAoE;IACpE,QAAQ,CAAC,YAAY,CAAC,EAAE,iBAAiB,CAAC;CAC3C,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACrC,CAAC;AA+CF,wBAAsB,QAAQ,CAC5B,OAAO,GAAE,UAAe,GACvB,OAAO,CAAC,UAAU,GAAG;IAAE,cAAc,EAAE,IAAI,CAAA;CAAE,CAAC,CA4dhD"}
|
package/dist/server.js
CHANGED
|
@@ -3,11 +3,14 @@ import { access } from "node:fs/promises";
|
|
|
3
3
|
import { createReadStream } from "node:fs";
|
|
4
4
|
import { dirname, extname, join } from "node:path";
|
|
5
5
|
import { fileURLToPath } from "node:url";
|
|
6
|
-
import { createClaudeWorkerPort, createCursorWorkerPort, createDispatchRuntime, readRunLog, } from "@repo-prism/dispatch";
|
|
7
|
-
import {
|
|
6
|
+
import { createClaudeWorkerPort, createCursorWorkerPort, createDispatchRuntime, DispatchConfigSchema, discoverHostConnectors, vendorCoverage, drainWorkspace, loadConfig, readRunLog, saveConfig, } from "@repo-prism/dispatch";
|
|
7
|
+
import { parseHostRequest } from "@repo-prism/host-session/protocol";
|
|
8
|
+
import { originAllowed, tokenFromRequest, tokensMatch, hubCookieHeader, } from "./auth.js";
|
|
8
9
|
import { createIdleTimer, IDLE_MS } from "./idle.js";
|
|
9
|
-
import {
|
|
10
|
+
import { createIntelligencePlane, } from "./intelligence.js";
|
|
11
|
+
import { newHubToken, packageVersion, readHubRecord, writeHubRecord, } from "./hub-record.js";
|
|
10
12
|
import { formatJobFinishedNotice } from "./notice.js";
|
|
13
|
+
import { listJobNotes, readJobNote } from "./notes.js";
|
|
11
14
|
import { createOsNotifier } from "./notify.js";
|
|
12
15
|
import { dashboardUrl, hubPort } from "./paths.js";
|
|
13
16
|
import { dropMissingWorkspaces, registerWorkspace } from "./registry.js";
|
|
@@ -22,13 +25,35 @@ const MIME = {
|
|
|
22
25
|
function defaultAssetsDir() {
|
|
23
26
|
return join(dirname(fileURLToPath(import.meta.url)), "dashboard");
|
|
24
27
|
}
|
|
25
|
-
async function defaultControl(workspacePath, jobId, action) {
|
|
28
|
+
async function defaultControl(workspacePath, jobId, action, extra) {
|
|
26
29
|
const runtime = createDispatchRuntime({
|
|
27
30
|
workspaceRoot: workspacePath,
|
|
28
31
|
worker: createCursorWorkerPort(),
|
|
29
32
|
claudeWorker: createClaudeWorkerPort(),
|
|
30
33
|
});
|
|
31
|
-
return runtime.handle("job_control", {
|
|
34
|
+
return runtime.handle("job_control", {
|
|
35
|
+
jobId,
|
|
36
|
+
action,
|
|
37
|
+
...(extra?.path ? { path: extra.path } : {}),
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Advance one workspace's job queue (ADR-0047).
|
|
42
|
+
*
|
|
43
|
+
* The hub is the only always-on process on the machine, which makes it the
|
|
44
|
+
* right owner of the drain: a job queued by an MCP server that has since
|
|
45
|
+
* exited still starts, and a job parked behind the cap starts as soon as a
|
|
46
|
+
* slot frees.
|
|
47
|
+
*/
|
|
48
|
+
async function defaultDrain(workspacePath) {
|
|
49
|
+
const cursor = createCursorWorkerPort();
|
|
50
|
+
const claude = createClaudeWorkerPort();
|
|
51
|
+
const runtime = createDispatchRuntime({
|
|
52
|
+
workspaceRoot: workspacePath,
|
|
53
|
+
worker: cursor,
|
|
54
|
+
claudeWorker: claude,
|
|
55
|
+
});
|
|
56
|
+
await drainWorkspace(runtime.drainDeps());
|
|
32
57
|
}
|
|
33
58
|
export async function startHub(options = {}) {
|
|
34
59
|
const env = options.env ?? process.env;
|
|
@@ -36,11 +61,19 @@ export async function startHub(options = {}) {
|
|
|
36
61
|
const assetsDir = options.assetsDir ?? defaultAssetsDir();
|
|
37
62
|
const control = options.control ?? defaultControl;
|
|
38
63
|
const version = options.version ?? packageVersion();
|
|
39
|
-
const
|
|
64
|
+
const intelligence = options.intelligence ?? createIntelligencePlane();
|
|
65
|
+
const previous = await readHubRecord(env);
|
|
66
|
+
const token = typeof previous?.token === "string" && previous.token.length >= 16
|
|
67
|
+
? previous.token
|
|
68
|
+
: newHubToken();
|
|
40
69
|
const wantedPort = hubPort(env);
|
|
41
70
|
let workspaces = await dropMissingWorkspaces(pathExists, env);
|
|
42
71
|
const sse = new Set();
|
|
43
72
|
let jobs = [];
|
|
73
|
+
// Mirrored from the watcher so every payload can state when it was read and
|
|
74
|
+
// which workspaces failed, rather than presenting a partial list as whole.
|
|
75
|
+
let asOf = new Date().toISOString();
|
|
76
|
+
let workspaceErrors = [];
|
|
44
77
|
let server;
|
|
45
78
|
let closed = false;
|
|
46
79
|
let liveRecord = {
|
|
@@ -51,8 +84,11 @@ export async function startHub(options = {}) {
|
|
|
51
84
|
startedAt: new Date().toISOString(),
|
|
52
85
|
};
|
|
53
86
|
const broadcast = (event) => {
|
|
54
|
-
if (event.type === "snapshot")
|
|
87
|
+
if (event.type === "snapshot") {
|
|
55
88
|
jobs = [...event.jobs];
|
|
89
|
+
asOf = event.asOf;
|
|
90
|
+
workspaceErrors = [...event.errors];
|
|
91
|
+
}
|
|
56
92
|
if (event.type === "job.updated") {
|
|
57
93
|
jobs = [
|
|
58
94
|
...jobs.filter((row) => !(row.id === event.job.id &&
|
|
@@ -60,6 +96,10 @@ export async function startHub(options = {}) {
|
|
|
60
96
|
event.job,
|
|
61
97
|
];
|
|
62
98
|
}
|
|
99
|
+
if (event.type === "job.removed") {
|
|
100
|
+
jobs = jobs.filter((row) => !(row.id === event.job.id &&
|
|
101
|
+
row.workspacePath === event.job.workspacePath));
|
|
102
|
+
}
|
|
63
103
|
const payload = `data: ${JSON.stringify(event)}\n\n`;
|
|
64
104
|
for (const client of sse) {
|
|
65
105
|
try {
|
|
@@ -77,8 +117,12 @@ export async function startHub(options = {}) {
|
|
|
77
117
|
}
|
|
78
118
|
idle.touch();
|
|
79
119
|
};
|
|
120
|
+
// The hub tick is the queue's safety net (ADR-0047). `start_job` kicks its
|
|
121
|
+
// own drain, but that kick dies with the MCP process; this catches anything
|
|
122
|
+
// left `queued`, and re-checks jobs parked behind the concurrency cap.
|
|
80
123
|
const watcher = watchWorkspaces(() => workspaces, onEvent, {
|
|
81
124
|
pollMs: options.pollMs,
|
|
125
|
+
drain: options.drain ?? defaultDrain,
|
|
82
126
|
});
|
|
83
127
|
const idle = createIdleTimer({
|
|
84
128
|
idleMs: options.idleMs ?? IDLE_MS,
|
|
@@ -93,6 +137,7 @@ export async function startHub(options = {}) {
|
|
|
93
137
|
closed = true;
|
|
94
138
|
idle.stop();
|
|
95
139
|
watcher.close();
|
|
140
|
+
intelligence.close();
|
|
96
141
|
for (const client of sse) {
|
|
97
142
|
try {
|
|
98
143
|
client.res.end();
|
|
@@ -133,8 +178,13 @@ export async function startHub(options = {}) {
|
|
|
133
178
|
}
|
|
134
179
|
liveRecord = { ...liveRecord, port: listen.port };
|
|
135
180
|
await writeHubRecord(liveRecord, env);
|
|
136
|
-
|
|
137
|
-
broadcast({
|
|
181
|
+
const initial = await collectJobs(workspaces);
|
|
182
|
+
broadcast({
|
|
183
|
+
type: "snapshot",
|
|
184
|
+
jobs: initial.jobs,
|
|
185
|
+
asOf: new Date().toISOString(),
|
|
186
|
+
errors: initial.errors,
|
|
187
|
+
});
|
|
138
188
|
async function handleRequest(req, res) {
|
|
139
189
|
const host = req.headers.host ?? `127.0.0.1:${liveRecord.port}`;
|
|
140
190
|
const url = new URL(req.url ?? "/", `http://${host}`);
|
|
@@ -149,6 +199,12 @@ export async function startHub(options = {}) {
|
|
|
149
199
|
pid: process.pid,
|
|
150
200
|
version,
|
|
151
201
|
workspaces: workspaces.length,
|
|
202
|
+
// Whether the Intelligence plane has actually loaded Core, and on
|
|
203
|
+
// what. A reader can tell an idle Console from a busy one.
|
|
204
|
+
intelligence: {
|
|
205
|
+
loaded: intelligence.loaded(),
|
|
206
|
+
workspace: intelligence.openWorkspace() ?? null,
|
|
207
|
+
},
|
|
152
208
|
});
|
|
153
209
|
return;
|
|
154
210
|
}
|
|
@@ -158,7 +214,43 @@ export async function startHub(options = {}) {
|
|
|
158
214
|
return;
|
|
159
215
|
}
|
|
160
216
|
if (req.method === "GET" && url.pathname === "/api/jobs") {
|
|
161
|
-
json(res, 200, {
|
|
217
|
+
json(res, 200, {
|
|
218
|
+
jobs: [...watcher.jobs()],
|
|
219
|
+
asOf: watcher.asOf(),
|
|
220
|
+
errors: [...watcher.errors()],
|
|
221
|
+
});
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
// The Repos plane needs to tell "no repositories registered" apart from
|
|
225
|
+
// "registered, but no jobs" — two very different things the old board
|
|
226
|
+
// rendered as one empty sentence (ADR-0048).
|
|
227
|
+
if (req.method === "GET" && url.pathname === "/api/repos") {
|
|
228
|
+
json(res, 200, {
|
|
229
|
+
repos: workspaces.map((entry) => ({
|
|
230
|
+
path: entry.path,
|
|
231
|
+
label: entry.label,
|
|
232
|
+
lastSeenAt: entry.lastSeenAt,
|
|
233
|
+
jobCount: jobs.filter((job) => job.workspacePath === entry.path)
|
|
234
|
+
.length,
|
|
235
|
+
error: workspaceErrors.find((row) => row.workspacePath === entry.path)
|
|
236
|
+
?.detail,
|
|
237
|
+
})),
|
|
238
|
+
asOf,
|
|
239
|
+
});
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
242
|
+
// What the user's agent window already has connected (ADR-0049). Served
|
|
243
|
+
// from here rather than read directly by the IDE, so the extension keeps
|
|
244
|
+
// its one dependency on Dispatch — HTTP — instead of importing it.
|
|
245
|
+
if (req.method === "GET" && url.pathname === "/api/connectors") {
|
|
246
|
+
const workspace = url.searchParams.get("workspace")?.trim() || workspaces[0]?.path;
|
|
247
|
+
const discovery = await discoverHostConnectors(workspace ? { workspaceRoot: workspace } : {});
|
|
248
|
+
json(res, 200, {
|
|
249
|
+
connectors: discovery.connectors,
|
|
250
|
+
unreadable: discovery.unreadable,
|
|
251
|
+
vendors: vendorCoverage(discovery.connectors),
|
|
252
|
+
asOf: new Date().toISOString(),
|
|
253
|
+
});
|
|
162
254
|
return;
|
|
163
255
|
}
|
|
164
256
|
// Per-job console for the board's expander (M-066 P-P6).
|
|
@@ -178,6 +270,44 @@ export async function startHub(options = {}) {
|
|
|
178
270
|
json(res, 200, page);
|
|
179
271
|
return;
|
|
180
272
|
}
|
|
273
|
+
const notesMatch = /^\/api\/jobs\/([^/]+)\/notes$/.exec(url.pathname);
|
|
274
|
+
if (req.method === "GET" && notesMatch) {
|
|
275
|
+
const jobId = decodeURIComponent(notesMatch[1] ?? "");
|
|
276
|
+
const job = jobs.find((row) => row.id === jobId);
|
|
277
|
+
const workspace = url.searchParams.get("workspace") ?? job?.workspacePath ?? "";
|
|
278
|
+
if (!workspace) {
|
|
279
|
+
json(res, 400, { error: "workspace required" });
|
|
280
|
+
return;
|
|
281
|
+
}
|
|
282
|
+
const rel = url.searchParams.get("path")?.trim();
|
|
283
|
+
try {
|
|
284
|
+
if (rel) {
|
|
285
|
+
const file = await readJobNote({
|
|
286
|
+
workspace,
|
|
287
|
+
rel,
|
|
288
|
+
...(job?.worktreePath ? { worktreePath: job.worktreePath } : {}),
|
|
289
|
+
});
|
|
290
|
+
if (!file) {
|
|
291
|
+
json(res, 404, { error: "note not found" });
|
|
292
|
+
return;
|
|
293
|
+
}
|
|
294
|
+
json(res, 200, file);
|
|
295
|
+
return;
|
|
296
|
+
}
|
|
297
|
+
const listed = await listJobNotes({
|
|
298
|
+
workspace,
|
|
299
|
+
jobId,
|
|
300
|
+
...(job?.worktreePath ? { worktreePath: job.worktreePath } : {}),
|
|
301
|
+
...(job?.resultSummary ? { summary: job.resultSummary } : {}),
|
|
302
|
+
...(job?.notes ? { stored: job.notes } : {}),
|
|
303
|
+
});
|
|
304
|
+
json(res, 200, { notes: listed });
|
|
305
|
+
}
|
|
306
|
+
catch {
|
|
307
|
+
json(res, 500, { error: "note read failed" });
|
|
308
|
+
}
|
|
309
|
+
return;
|
|
310
|
+
}
|
|
181
311
|
if (req.method === "GET" && url.pathname === "/api/events") {
|
|
182
312
|
res.writeHead(200, {
|
|
183
313
|
"Content-Type": "text/event-stream",
|
|
@@ -187,7 +317,12 @@ export async function startHub(options = {}) {
|
|
|
187
317
|
const client = { res };
|
|
188
318
|
sse.add(client);
|
|
189
319
|
idle.touch();
|
|
190
|
-
res.write(`data: ${JSON.stringify({
|
|
320
|
+
res.write(`data: ${JSON.stringify({
|
|
321
|
+
type: "snapshot",
|
|
322
|
+
jobs: [...watcher.jobs()],
|
|
323
|
+
asOf: watcher.asOf(),
|
|
324
|
+
errors: [...watcher.errors()],
|
|
325
|
+
})}\n\n`);
|
|
191
326
|
req.on("close", () => {
|
|
192
327
|
sse.delete(client);
|
|
193
328
|
});
|
|
@@ -205,6 +340,43 @@ export async function startHub(options = {}) {
|
|
|
205
340
|
json(res, 200, { workspaces });
|
|
206
341
|
return;
|
|
207
342
|
}
|
|
343
|
+
// The Intelligence plane (ADR-0048). Same `HostRequest`/`HostResponse`
|
|
344
|
+
// contract the IDE webview already speaks, so `@repo-prism/app-shell`
|
|
345
|
+
// mounts against it unchanged — but behind this Console's token and origin
|
|
346
|
+
// allowlist, rather than the retired bridge's `Access-Control-Allow-Origin: *`.
|
|
347
|
+
if (req.method === "POST" && url.pathname === "/api/host") {
|
|
348
|
+
const body = await readBody(req);
|
|
349
|
+
const id = typeof body.id === "string" ? body.id : "?";
|
|
350
|
+
// Validated with the same guard the webview host uses, so an unknown
|
|
351
|
+
// method is a 400 here rather than an unhandled cast three layers down.
|
|
352
|
+
const parsed = parseHostRequest(body);
|
|
353
|
+
if (!parsed.ok) {
|
|
354
|
+
json(res, 400, { id, ok: false, error: parsed.reason });
|
|
355
|
+
return;
|
|
356
|
+
}
|
|
357
|
+
const workspace = (typeof body.workspace === "string" ? body.workspace.trim() : "") ||
|
|
358
|
+
url.searchParams.get("workspace") ||
|
|
359
|
+
workspaces[0]?.path ||
|
|
360
|
+
"";
|
|
361
|
+
if (!workspace) {
|
|
362
|
+
json(res, 200, {
|
|
363
|
+
id,
|
|
364
|
+
ok: false,
|
|
365
|
+
error: "No repository registered with Prism yet. Open a repo in your editor, or run a Prism command in it.",
|
|
366
|
+
});
|
|
367
|
+
return;
|
|
368
|
+
}
|
|
369
|
+
idle.touch();
|
|
370
|
+
try {
|
|
371
|
+
const answer = await intelligence.handle(workspace, parsed.value);
|
|
372
|
+
json(res, 200, answer);
|
|
373
|
+
}
|
|
374
|
+
catch (cause) {
|
|
375
|
+
const message = cause instanceof Error ? cause.message : String(cause);
|
|
376
|
+
json(res, 200, { id, ok: false, error: message });
|
|
377
|
+
}
|
|
378
|
+
return;
|
|
379
|
+
}
|
|
208
380
|
const controlMatch = /^\/api\/jobs\/([^/]+)\/control$/.exec(url.pathname);
|
|
209
381
|
if (req.method === "POST" && controlMatch) {
|
|
210
382
|
const jobId = decodeURIComponent(controlMatch[1] ?? "");
|
|
@@ -217,8 +389,8 @@ export async function startHub(options = {}) {
|
|
|
217
389
|
return;
|
|
218
390
|
}
|
|
219
391
|
try {
|
|
220
|
-
const result = await control(workspace, jobId, action);
|
|
221
|
-
|
|
392
|
+
const result = await control(workspace, jobId, action, typeof body.path === "string" ? { path: body.path } : {});
|
|
393
|
+
await watcher.refresh({ drain: false });
|
|
222
394
|
json(res, 200, result ?? { ok: true });
|
|
223
395
|
}
|
|
224
396
|
catch (cause) {
|
|
@@ -227,9 +399,51 @@ export async function startHub(options = {}) {
|
|
|
227
399
|
}
|
|
228
400
|
return;
|
|
229
401
|
}
|
|
402
|
+
if (req.method === "GET" && url.pathname === "/api/settings") {
|
|
403
|
+
const workspace = url.searchParams.get("workspace")?.trim() || workspaces[0]?.path;
|
|
404
|
+
if (!workspace) {
|
|
405
|
+
json(res, 400, { error: "workspace required" });
|
|
406
|
+
return;
|
|
407
|
+
}
|
|
408
|
+
const config = await loadConfig(workspace);
|
|
409
|
+
const entry = workspaces.find((row) => row.path === workspace);
|
|
410
|
+
json(res, 200, {
|
|
411
|
+
workspace,
|
|
412
|
+
label: entry?.label ?? workspace,
|
|
413
|
+
config,
|
|
414
|
+
});
|
|
415
|
+
return;
|
|
416
|
+
}
|
|
417
|
+
if (req.method === "POST" && url.pathname === "/api/settings") {
|
|
418
|
+
const body = await readBody(req);
|
|
419
|
+
const workspace = String(body.workspace ?? "").trim() || workspaces[0]?.path;
|
|
420
|
+
if (!workspace) {
|
|
421
|
+
json(res, 400, { error: "workspace required" });
|
|
422
|
+
return;
|
|
423
|
+
}
|
|
424
|
+
const parsed = DispatchConfigSchema.partial().safeParse(body);
|
|
425
|
+
if (!parsed.success) {
|
|
426
|
+
json(res, 400, { error: parsed.error.message });
|
|
427
|
+
return;
|
|
428
|
+
}
|
|
429
|
+
const patch = {};
|
|
430
|
+
for (const [key, value] of Object.entries(parsed.data)) {
|
|
431
|
+
if (value !== undefined)
|
|
432
|
+
patch[key] = value;
|
|
433
|
+
}
|
|
434
|
+
const config = await saveConfig(workspace, patch);
|
|
435
|
+
json(res, 200, { workspace, config });
|
|
436
|
+
return;
|
|
437
|
+
}
|
|
230
438
|
if (req.method === "GET" &&
|
|
231
439
|
(url.pathname === "/" || url.pathname === "/index.html")) {
|
|
232
|
-
|
|
440
|
+
const headers = {
|
|
441
|
+
"Content-Type": "text/html; charset=utf-8",
|
|
442
|
+
};
|
|
443
|
+
if (tokensMatch(liveRecord.token, tokenFromRequest(req, url))) {
|
|
444
|
+
headers["Set-Cookie"] = hubCookieHeader(liveRecord.token);
|
|
445
|
+
}
|
|
446
|
+
await serveFile(res, join(assetsDir, "index.html"), headers);
|
|
233
447
|
return;
|
|
234
448
|
}
|
|
235
449
|
if (req.method === "GET" && url.pathname.startsWith("/assets/")) {
|
|
@@ -239,7 +453,9 @@ export async function startHub(options = {}) {
|
|
|
239
453
|
return;
|
|
240
454
|
}
|
|
241
455
|
const file = join(assetsDir, relative);
|
|
242
|
-
await serveFile(res, file,
|
|
456
|
+
await serveFile(res, file, {
|
|
457
|
+
"Content-Type": MIME[extname(file)] ?? "application/octet-stream",
|
|
458
|
+
});
|
|
243
459
|
return;
|
|
244
460
|
}
|
|
245
461
|
json(res, 404, { error: "not found" });
|
|
@@ -268,7 +484,7 @@ async function readBody(req) {
|
|
|
268
484
|
return {};
|
|
269
485
|
}
|
|
270
486
|
}
|
|
271
|
-
async function serveFile(res, path,
|
|
487
|
+
async function serveFile(res, path, headers) {
|
|
272
488
|
try {
|
|
273
489
|
await access(path);
|
|
274
490
|
}
|
|
@@ -276,7 +492,7 @@ async function serveFile(res, path, mime) {
|
|
|
276
492
|
json(res, 404, { error: "not found" });
|
|
277
493
|
return;
|
|
278
494
|
}
|
|
279
|
-
res.writeHead(200,
|
|
495
|
+
res.writeHead(200, headers);
|
|
280
496
|
createReadStream(path).pipe(res);
|
|
281
497
|
}
|
|
282
498
|
//# sourceMappingURL=server.js.map
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/dist/snapshot.d.ts
CHANGED
|
@@ -1,7 +1,19 @@
|
|
|
1
1
|
import type { JobRecord } from "@repo-prism/dispatch";
|
|
2
2
|
import type { JobSnapshot } from "./types.js";
|
|
3
|
-
/**
|
|
4
|
-
|
|
3
|
+
/**
|
|
4
|
+
* Chat-safe job row. Never includes a worktree path (ADR-0039).
|
|
5
|
+
*
|
|
6
|
+
* Deliberately carries **no computed duration** (M-067 P-S1). The server used
|
|
7
|
+
* to send `elapsedMs`, which broke three ways at once: it only changed when a
|
|
8
|
+
* job's snapshot key changed, so it froze and then jumped; every snapshot
|
|
9
|
+
* recomputed *all* rows against `Date.now()`, so a finished job's time kept
|
|
10
|
+
* growing whenever any unrelated job updated; and the statusline measured from
|
|
11
|
+
* a different field, so one job showed two durations in two places.
|
|
12
|
+
*
|
|
13
|
+
* Shipping the raw timestamps and letting each client tick locally through
|
|
14
|
+
* `jobDurations` in `@repo-prism/shared` removes all three at once.
|
|
15
|
+
*/
|
|
16
|
+
export declare function toSnapshot(job: JobRecord, workspacePath: string): JobSnapshot;
|
|
5
17
|
export declare function snapshotKey(job: JobSnapshot): string;
|
|
6
18
|
export declare function finishedKey(job: JobSnapshot): string;
|
|
7
19
|
//# sourceMappingURL=snapshot.d.ts.map
|
package/dist/snapshot.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../src/snapshot.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../src/snapshot.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,GAAG,WAAW,CAwC7E;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,WAAW,GAAG,MAAM,CAapD;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,WAAW,GAAG,MAAM,CAEpD"}
|
package/dist/snapshot.js
CHANGED
|
@@ -1,12 +1,18 @@
|
|
|
1
1
|
import { workspaceLabel } from "./registry.js";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
2
|
+
/**
|
|
3
|
+
* Chat-safe job row. Never includes a worktree path (ADR-0039).
|
|
4
|
+
*
|
|
5
|
+
* Deliberately carries **no computed duration** (M-067 P-S1). The server used
|
|
6
|
+
* to send `elapsedMs`, which broke three ways at once: it only changed when a
|
|
7
|
+
* job's snapshot key changed, so it froze and then jumped; every snapshot
|
|
8
|
+
* recomputed *all* rows against `Date.now()`, so a finished job's time kept
|
|
9
|
+
* growing whenever any unrelated job updated; and the statusline measured from
|
|
10
|
+
* a different field, so one job showed two durations in two places.
|
|
11
|
+
*
|
|
12
|
+
* Shipping the raw timestamps and letting each client tick locally through
|
|
13
|
+
* `jobDurations` in `@repo-prism/shared` removes all three at once.
|
|
14
|
+
*/
|
|
15
|
+
export function toSnapshot(job, workspacePath) {
|
|
10
16
|
return {
|
|
11
17
|
id: job.id,
|
|
12
18
|
title: job.title,
|
|
@@ -29,10 +35,22 @@ export function toSnapshot(job, workspacePath, now = Date.now()) {
|
|
|
29
35
|
// Whether a teammate is in your working tree is not a detail: it is the
|
|
30
36
|
// difference between "safe to keep editing" and "do not touch this repo".
|
|
31
37
|
...(job.placement ? { placement: job.placement } : {}),
|
|
38
|
+
...(job.worktreePath ? { worktreePath: job.worktreePath } : {}),
|
|
32
39
|
...(job.waitingOn ? { waitingOn: job.waitingOn } : {}),
|
|
40
|
+
...(job.lastHeartbeat ? { lastHeartbeat: job.lastHeartbeat } : {}),
|
|
41
|
+
// The gate question travels with the row so the board can render a Confirm
|
|
42
|
+
// action instead of the job silently never starting (ADR-0047).
|
|
43
|
+
...(job.confirm ? { confirm: job.confirm } : {}),
|
|
33
44
|
createdAt: job.createdAt,
|
|
45
|
+
...(job.queuedAt ? { queuedAt: job.queuedAt } : {}),
|
|
46
|
+
...(job.startedAt ? { startedAt: job.startedAt } : {}),
|
|
47
|
+
...(job.finishedAt ? { finishedAt: job.finishedAt } : {}),
|
|
34
48
|
updatedAt: job.updatedAt,
|
|
35
|
-
|
|
49
|
+
...(job.workerBackend ? { workerBackend: job.workerBackend } : {}),
|
|
50
|
+
...(job.workerModel ? { workerModel: job.workerModel } : {}),
|
|
51
|
+
...(job.workerThinking ? { workerThinking: job.workerThinking } : {}),
|
|
52
|
+
...(job.notes?.length ? { notes: job.notes } : {}),
|
|
53
|
+
...(job.citedMissing?.length ? { citedMissing: job.citedMissing } : {}),
|
|
36
54
|
};
|
|
37
55
|
}
|
|
38
56
|
export function snapshotKey(job) {
|
|
@@ -45,6 +63,7 @@ export function snapshotKey(job) {
|
|
|
45
63
|
// A review arriving is a visible change; leaving it out of the key means
|
|
46
64
|
// the board would not re-render when the file list lands.
|
|
47
65
|
job.review ? String(job.review.files.length) : "",
|
|
66
|
+
job.review?.keptPaths?.length ? String(job.review.keptPaths.length) : "",
|
|
48
67
|
job.updatedAt,
|
|
49
68
|
].join(":");
|
|
50
69
|
}
|
package/dist/snapshot.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../src/snapshot.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAG/C
|
|
1
|
+
{"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../src/snapshot.ts"],"names":[],"mappings":"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"}
|