maestro-flow 0.3.5 → 0.3.7
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/.claude/commands/maestro-brainstorm.md +10 -1
- package/.claude/commands/maestro-milestone-audit.md +1 -1
- package/.claude/commands/maestro-milestone-complete.md +2 -1
- package/.claude/commands/maestro-milestone-release.md +96 -0
- package/.claude/commands/maestro-phase-add.md +9 -1
- package/.claude/commands/maestro-phase-transition.md +9 -1
- package/.claude/commands/maestro.md +6 -0
- package/.claude/commands/manage-codebase-rebuild.md +76 -50
- package/.claude/commands/manage-codebase-refresh.md +9 -1
- package/.claude/commands/quality-refactor.md +1 -1
- package/.claude/commands/quality-sync.md +9 -1
- package/.claude/commands/spec-setup.md +1 -1
- package/.codex/skills/maestro-coordinate/SKILL.md +20 -6
- package/.codex/skills/manage-issue-analyze/SKILL.md +1 -1
- package/.codex/skills/quality-retrospective/SKILL.md +3 -3
- package/.codex/skills/team-coordinate/SKILL.md +1 -1
- package/.codex/skills/team-coordinate/roles/coordinator/commands/monitor.md +19 -10
- package/.codex/skills/team-coordinate/roles/coordinator/role.md +2 -2
- package/.codex/skills/team-executor/SKILL.md +1 -1
- package/.codex/skills/team-executor/roles/executor/commands/monitor.md +20 -9
- package/.codex/skills/team-lifecycle-v4/SKILL.md +2 -2
- package/.codex/skills/team-lifecycle-v4/roles/coordinator/commands/monitor.md +31 -12
- package/.codex/skills/team-lifecycle-v4/roles/coordinator/role.md +1 -1
- package/.codex/skills/team-quality-assurance/SKILL.md +1 -1
- package/.codex/skills/team-quality-assurance/roles/coordinator/commands/monitor.md +20 -9
- package/.codex/skills/team-quality-assurance/roles/coordinator/role.md +1 -1
- package/.codex/skills/team-review/SKILL.md +1 -1
- package/.codex/skills/team-review/roles/coordinator/commands/monitor.md +20 -9
- package/.codex/skills/team-review/roles/coordinator/role.md +1 -1
- package/.codex/skills/team-tech-debt/SKILL.md +1 -1
- package/.codex/skills/team-tech-debt/roles/coordinator/commands/monitor.md +20 -9
- package/.codex/skills/team-tech-debt/roles/coordinator/role.md +1 -1
- package/.codex/skills/team-testing/SKILL.md +2 -2
- package/.codex/skills/team-testing/roles/coordinator/commands/monitor.md +20 -9
- package/.codex/skills/team-testing/roles/coordinator/role.md +1 -1
- package/chains/singles/spec-map.json +2 -2
- package/dashboard/dist-server/dashboard/src/server/agents/codex-cli-adapter.js +1 -1
- package/dashboard/dist-server/dashboard/src/server/agents/codex-cli-adapter.js.map +1 -1
- package/dashboard/dist-server/src/commands/delegate.d.ts +23 -0
- package/dashboard/dist-server/src/commands/delegate.js +91 -55
- package/dashboard/dist-server/src/commands/delegate.js.map +1 -1
- package/dist/src/brainstorm-visualize/frame.d.ts +8 -0
- package/dist/src/brainstorm-visualize/frame.d.ts.map +1 -0
- package/dist/src/brainstorm-visualize/frame.js +655 -0
- package/dist/src/brainstorm-visualize/frame.js.map +1 -0
- package/dist/src/brainstorm-visualize/server.d.ts +2 -0
- package/dist/src/brainstorm-visualize/server.d.ts.map +1 -0
- package/dist/src/brainstorm-visualize/server.js +180 -0
- package/dist/src/brainstorm-visualize/server.js.map +1 -0
- package/dist/src/cli.js +11 -1
- package/dist/src/cli.js.map +1 -1
- package/dist/src/commands/brainstorm-visualize.d.ts +3 -0
- package/dist/src/commands/brainstorm-visualize.d.ts.map +1 -0
- package/dist/src/commands/brainstorm-visualize.js +337 -0
- package/dist/src/commands/brainstorm-visualize.js.map +1 -0
- package/dist/src/commands/core-memory.d.ts +3 -0
- package/dist/src/commands/core-memory.d.ts.map +1 -0
- package/dist/src/commands/core-memory.js +101 -0
- package/dist/src/commands/core-memory.js.map +1 -0
- package/dist/src/commands/delegate.d.ts +23 -0
- package/dist/src/commands/delegate.d.ts.map +1 -1
- package/dist/src/commands/delegate.js +91 -55
- package/dist/src/commands/delegate.js.map +1 -1
- package/dist/src/mcp/delegate-channel-relay.d.ts.map +1 -1
- package/dist/src/mcp/delegate-channel-relay.js +6 -0
- package/dist/src/mcp/delegate-channel-relay.js.map +1 -1
- package/dist/src/mcp/server.d.ts.map +1 -1
- package/dist/src/mcp/server.js +27 -0
- package/dist/src/mcp/server.js.map +1 -1
- package/package.json +1 -1
- package/.claude/commands/spec-map.md +0 -82
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// Brainstorm visualizer server (runnable as a detached Node process).
|
|
3
|
+
//
|
|
4
|
+
// Spawned by `maestro brainstorm-visualize start`. Serves the HTML prototypes
|
|
5
|
+
// from BRAINSTORM_DIR. Selection is done out-of-band via AskUserQuestion in
|
|
6
|
+
// the parent conversation — this server only renders.
|
|
7
|
+
//
|
|
8
|
+
// Lifecycle:
|
|
9
|
+
// * parent sends SIGTERM/SIGINT (via `maestro brainstorm-visualize stop`)
|
|
10
|
+
// * BRAINSTORM_OWNER_PID is set and that process exits
|
|
11
|
+
// * no HTTP activity for IDLE_TIMEOUT_MS
|
|
12
|
+
//
|
|
13
|
+
// Wire protocol (stable — the command wrapper depends on it):
|
|
14
|
+
// stdout line: {"type":"server-started","port":N,"host":...,"url_host":...,
|
|
15
|
+
// "url":"...","screen_dir":"..."}
|
|
16
|
+
// HTTP GET / → index of all .html files in BRAINSTORM_DIR
|
|
17
|
+
// HTTP GET /screen/<name> → single screen by filename
|
|
18
|
+
// HTTP GET /healthz → {"ok":true}
|
|
19
|
+
// ---------------------------------------------------------------------------
|
|
20
|
+
import { createServer } from 'node:http';
|
|
21
|
+
import { existsSync, mkdirSync, readdirSync, readFileSync, statSync } from 'node:fs';
|
|
22
|
+
import { join, normalize } from 'node:path';
|
|
23
|
+
import { comparePage, emptyPage, indexPage, wrapScreen } from './frame.js';
|
|
24
|
+
const IDLE_TIMEOUT_MS = 30 * 60 * 1000;
|
|
25
|
+
const OWNER_CHECK_MS = 5_000;
|
|
26
|
+
const IDLE_CHECK_MS = 60_000;
|
|
27
|
+
function fail(msg) {
|
|
28
|
+
process.stderr.write(`[brainstorm-visualize] ${msg}\n`);
|
|
29
|
+
process.exit(1);
|
|
30
|
+
}
|
|
31
|
+
const contentDir = process.env.BRAINSTORM_DIR ?? fail('BRAINSTORM_DIR env var is required');
|
|
32
|
+
if (!existsSync(contentDir))
|
|
33
|
+
mkdirSync(contentDir, { recursive: true });
|
|
34
|
+
const host = process.env.BRAINSTORM_HOST ?? '127.0.0.1';
|
|
35
|
+
const urlHost = process.env.BRAINSTORM_URL_HOST ?? (host === '127.0.0.1' || host === 'localhost' ? 'localhost' : host);
|
|
36
|
+
const desiredPort = process.env.BRAINSTORM_PORT ? Number.parseInt(process.env.BRAINSTORM_PORT, 10) : 0;
|
|
37
|
+
const ownerPidRaw = process.env.BRAINSTORM_OWNER_PID ? Number.parseInt(process.env.BRAINSTORM_OWNER_PID, 10) : 0;
|
|
38
|
+
const ownerPid = Number.isFinite(ownerPidRaw) && ownerPidRaw > 0 ? ownerPidRaw : 0;
|
|
39
|
+
let lastActivity = Date.now();
|
|
40
|
+
function listScreens() {
|
|
41
|
+
try {
|
|
42
|
+
return readdirSync(contentDir)
|
|
43
|
+
.filter((f) => f.endsWith('.html'))
|
|
44
|
+
.map((f) => ({ f, mtime: statSync(join(contentDir, f)).mtimeMs }))
|
|
45
|
+
.sort((a, b) => a.f.localeCompare(b.f))
|
|
46
|
+
.map((e) => e.f);
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
return [];
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
function readScreen(name) {
|
|
53
|
+
const safe = normalize(name);
|
|
54
|
+
if (safe.includes('..') || safe.includes('/') || safe.includes('\\'))
|
|
55
|
+
return null;
|
|
56
|
+
try {
|
|
57
|
+
return readFileSync(join(contentDir, safe), 'utf-8');
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
// ---------------------------------------------------------------------------
|
|
64
|
+
// HTTP
|
|
65
|
+
// ---------------------------------------------------------------------------
|
|
66
|
+
function respond(res, status, contentType, body) {
|
|
67
|
+
res.writeHead(status, {
|
|
68
|
+
'content-type': contentType,
|
|
69
|
+
'cache-control': 'no-store',
|
|
70
|
+
'x-brainstorm-visualizer': '1',
|
|
71
|
+
});
|
|
72
|
+
res.end(body);
|
|
73
|
+
}
|
|
74
|
+
function handleRequest(req, res) {
|
|
75
|
+
lastActivity = Date.now();
|
|
76
|
+
const url = req.url ?? '/';
|
|
77
|
+
if (req.method !== 'GET' && req.method !== 'HEAD') {
|
|
78
|
+
respond(res, 405, 'text/plain; charset=utf-8', 'method not allowed');
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
if (url === '/' || url === '/index.html') {
|
|
82
|
+
const screens = listScreens();
|
|
83
|
+
if (screens.length === 0) {
|
|
84
|
+
respond(res, 200, 'text/html; charset=utf-8', emptyPage());
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
respond(res, 200, 'text/html; charset=utf-8', indexPage(screens));
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
if (url.startsWith('/screen/')) {
|
|
91
|
+
const name = decodeURIComponent(url.slice('/screen/'.length));
|
|
92
|
+
const body = readScreen(name);
|
|
93
|
+
if (body === null) {
|
|
94
|
+
respond(res, 404, 'text/plain; charset=utf-8', 'screen not found');
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
respond(res, 200, 'text/html; charset=utf-8', wrapScreen(name, body));
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
if (url.startsWith('/compare')) {
|
|
101
|
+
const params = new URL(url, 'http://localhost').searchParams;
|
|
102
|
+
const files = params.get('files')?.split(',').map((f) => decodeURIComponent(f.trim())).filter(Boolean);
|
|
103
|
+
if (!files || files.length === 0) {
|
|
104
|
+
respond(res, 400, 'text/plain; charset=utf-8', 'missing ?files=a.html,b.html');
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
const screens = [];
|
|
108
|
+
for (const f of files) {
|
|
109
|
+
const body = readScreen(f);
|
|
110
|
+
if (body !== null)
|
|
111
|
+
screens.push({ name: f, body });
|
|
112
|
+
}
|
|
113
|
+
if (screens.length === 0) {
|
|
114
|
+
respond(res, 404, 'text/plain; charset=utf-8', 'none of the requested screens found');
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
respond(res, 200, 'text/html; charset=utf-8', comparePage(screens));
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
if (url === '/healthz') {
|
|
121
|
+
respond(res, 200, 'application/json; charset=utf-8', JSON.stringify({ ok: true }));
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
respond(res, 404, 'text/plain; charset=utf-8', 'not found');
|
|
125
|
+
}
|
|
126
|
+
const httpServer = createServer(handleRequest);
|
|
127
|
+
// ---------------------------------------------------------------------------
|
|
128
|
+
// Lifecycle
|
|
129
|
+
// ---------------------------------------------------------------------------
|
|
130
|
+
function shutdown(reason) {
|
|
131
|
+
try {
|
|
132
|
+
httpServer.close();
|
|
133
|
+
}
|
|
134
|
+
catch { /* ignore */ }
|
|
135
|
+
setTimeout(() => {
|
|
136
|
+
process.stderr.write(`[brainstorm-visualize] shutdown: ${reason}\n`);
|
|
137
|
+
process.exit(0);
|
|
138
|
+
}, 500).unref();
|
|
139
|
+
}
|
|
140
|
+
process.on('SIGTERM', () => shutdown('SIGTERM'));
|
|
141
|
+
process.on('SIGINT', () => shutdown('SIGINT'));
|
|
142
|
+
if (ownerPid > 0) {
|
|
143
|
+
const ownerTimer = setInterval(() => {
|
|
144
|
+
try {
|
|
145
|
+
process.kill(ownerPid, 0);
|
|
146
|
+
}
|
|
147
|
+
catch {
|
|
148
|
+
clearInterval(ownerTimer);
|
|
149
|
+
shutdown(`owner pid ${ownerPid} exited`);
|
|
150
|
+
}
|
|
151
|
+
}, OWNER_CHECK_MS);
|
|
152
|
+
ownerTimer.unref();
|
|
153
|
+
}
|
|
154
|
+
const idleTimer = setInterval(() => {
|
|
155
|
+
if (Date.now() - lastActivity > IDLE_TIMEOUT_MS) {
|
|
156
|
+
clearInterval(idleTimer);
|
|
157
|
+
shutdown('idle timeout');
|
|
158
|
+
}
|
|
159
|
+
}, IDLE_CHECK_MS);
|
|
160
|
+
idleTimer.unref();
|
|
161
|
+
// ---------------------------------------------------------------------------
|
|
162
|
+
// Start
|
|
163
|
+
// ---------------------------------------------------------------------------
|
|
164
|
+
httpServer.listen(desiredPort, host, () => {
|
|
165
|
+
const address = httpServer.address();
|
|
166
|
+
if (!address || typeof address === 'string') {
|
|
167
|
+
fail('server address is unavailable after listen()');
|
|
168
|
+
}
|
|
169
|
+
const actualPort = address.port;
|
|
170
|
+
const announcement = {
|
|
171
|
+
type: 'server-started',
|
|
172
|
+
port: actualPort,
|
|
173
|
+
host,
|
|
174
|
+
url_host: urlHost,
|
|
175
|
+
url: `http://${urlHost}:${actualPort}`,
|
|
176
|
+
screen_dir: contentDir,
|
|
177
|
+
};
|
|
178
|
+
process.stdout.write(JSON.stringify(announcement) + '\n');
|
|
179
|
+
});
|
|
180
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/brainstorm-visualize/server.ts"],"names":[],"mappings":"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"}
|
package/dist/src/cli.js
CHANGED
|
@@ -32,6 +32,10 @@ const commandLoaders = {
|
|
|
32
32
|
overlay: async () => (await import('./commands/overlay.js')).registerOverlayCommand,
|
|
33
33
|
team: async () => (await import('./commands/team.js')).registerTeamCommand,
|
|
34
34
|
update: async () => (await import('./commands/update.js')).registerUpdateCommand,
|
|
35
|
+
'brainstorm-visualize': async () => (await import('./commands/brainstorm-visualize.js')).registerBrainstormVisualizeCommand,
|
|
36
|
+
bv: async () => (await import('./commands/brainstorm-visualize.js')).registerBrainstormVisualizeCommand,
|
|
37
|
+
'core-memory': async () => (await import('./commands/core-memory.js')).registerCoreMemoryCommand,
|
|
38
|
+
cm: async () => (await import('./commands/core-memory.js')).registerCoreMemoryCommand,
|
|
35
39
|
};
|
|
36
40
|
// Determine which command is being invoked from argv (if any)
|
|
37
41
|
const argv = process.argv.slice(2);
|
|
@@ -42,9 +46,15 @@ if (requestedCommand && requestedCommand in commandLoaders) {
|
|
|
42
46
|
register(program);
|
|
43
47
|
}
|
|
44
48
|
else {
|
|
45
|
-
// No command or unknown command (e.g., --help, --version) — register all
|
|
49
|
+
// No command or unknown command (e.g., --help, --version) — register all.
|
|
50
|
+
// Multiple keys may point to the same register function (e.g. a command and
|
|
51
|
+
// its alias share one module); deduplicate so we register each module once.
|
|
52
|
+
const seen = new Set();
|
|
46
53
|
for (const loader of Object.values(commandLoaders)) {
|
|
47
54
|
const register = await loader();
|
|
55
|
+
if (seen.has(register))
|
|
56
|
+
continue;
|
|
57
|
+
seen.add(register);
|
|
48
58
|
register(program);
|
|
49
59
|
}
|
|
50
60
|
}
|
package/dist/src/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,SAAS,CAAC;KACf,WAAW,CAAC,yEAAyE,CAAC;KACtF,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;AAEhC,8EAA8E;AAC9E,4BAA4B;AAC5B,EAAE;AACF,2EAA2E;AAC3E,6EAA6E;AAC7E,wDAAwD;AACxD,8EAA8E;AAE9E,MAAM,cAAc,GAAwD;IAC1E,KAAK,EAAO,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC,oBAAoB;IAClF,GAAG,EAAS,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,kBAAkB;IAC9E,GAAG,EAAS,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,kBAAkB;IAC9E,IAAI,EAAQ,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC,mBAAmB;IAChF,GAAG,EAAS,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,kBAAkB;IAC9E,OAAO,EAAK,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC,CAAC,sBAAsB;IACtF,SAAS,EAAG,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC,CAAC,wBAAwB;IAC1F,IAAI,EAAQ,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC,mBAAmB;IAChF,IAAI,EAAQ,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC,mBAAmB;IAChF,IAAI,EAAQ,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC,mBAAmB;IAChF,IAAI,EAAQ,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC,mBAAmB;IAChF,KAAK,EAAO,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC,oBAAoB;IAClF,UAAU,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC,CAAC,yBAAyB;IAC5F,QAAQ,EAAI,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC,CAAC,uBAAuB;IACxF,QAAQ,EAAI,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC,CAAC,uBAAuB;IACxF,GAAG,EAAS,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,kBAAkB;IAC9E,OAAO,EAAK,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC,CAAC,sBAAsB;IACtF,IAAI,EAAQ,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC,mBAAmB;IAChF,MAAM,EAAM,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC,CAAC,qBAAqB;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brainstorm-visualize.d.ts","sourceRoot":"","sources":["../../../src/commands/brainstorm-visualize.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0VzC,wBAAgB,kCAAkC,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkCzE"}
|
|
@@ -0,0 +1,337 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// `maestro brainstorm-visualize` — control the HTML prototype visualizer server.
|
|
3
|
+
//
|
|
4
|
+
// The server (src/brainstorm-visualize/server.ts) runs as a detached Node
|
|
5
|
+
// process. Its lifecycle is tracked via Maestro's DelegateBrokerClient with
|
|
6
|
+
// a dedicated state file so visualizer jobs never collide with `maestro
|
|
7
|
+
// delegate`: server PID, URL, and session dirs live in broker job metadata,
|
|
8
|
+
// so `stop` / `status` / cross-process discovery come for free.
|
|
9
|
+
// ---------------------------------------------------------------------------
|
|
10
|
+
import { spawn } from 'node:child_process';
|
|
11
|
+
import { existsSync, mkdirSync, openSync, readFileSync, rmSync, statSync } from 'node:fs';
|
|
12
|
+
import { dirname, join, resolve } from 'node:path';
|
|
13
|
+
import { fileURLToPath } from 'node:url';
|
|
14
|
+
import { DelegateBrokerClient } from '../async/index.js';
|
|
15
|
+
import { paths } from '../config/paths.js';
|
|
16
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
17
|
+
// __filename: dist/src/commands/brainstorm-visualize.js
|
|
18
|
+
// Server entry lives at: dist/src/brainstorm-visualize/server.js
|
|
19
|
+
const SERVER_SCRIPT = resolve(dirname(__filename), '..', 'brainstorm-visualize', 'server.js');
|
|
20
|
+
const STARTUP_TIMEOUT_MS = 5000;
|
|
21
|
+
// Dedicated broker storage — isolates visualizer jobs from `maestro delegate`
|
|
22
|
+
// state so the two never collide in listings, event streams, or cancellation.
|
|
23
|
+
const VIZ_BROKER_STATE = join(paths.data, 'brainstorm-visualize', 'broker.json');
|
|
24
|
+
const VIZ_BROKER_DB = join(paths.data, 'brainstorm-visualize', 'broker.sqlite');
|
|
25
|
+
function createVizBroker() {
|
|
26
|
+
return new DelegateBrokerClient({ statePath: VIZ_BROKER_STATE, dbPath: VIZ_BROKER_DB });
|
|
27
|
+
}
|
|
28
|
+
function generateExecId() {
|
|
29
|
+
const now = new Date();
|
|
30
|
+
const pad = (n, width = 2) => n.toString().padStart(width, '0');
|
|
31
|
+
const hhmmss = `${pad(now.getHours())}${pad(now.getMinutes())}${pad(now.getSeconds())}`;
|
|
32
|
+
const rand = Math.random().toString(16).slice(2, 6);
|
|
33
|
+
return `viz-${hhmmss}-${rand}`;
|
|
34
|
+
}
|
|
35
|
+
function resolveServeDir(cwd, opts, execId) {
|
|
36
|
+
if (opts.dir)
|
|
37
|
+
return resolve(opts.dir);
|
|
38
|
+
const base = join(cwd, '.workflow', '.brainstorm-visualize');
|
|
39
|
+
return opts.session ? join(base, opts.session) : join(base, execId);
|
|
40
|
+
}
|
|
41
|
+
function isProcessAlive(pid) {
|
|
42
|
+
try {
|
|
43
|
+
process.kill(pid, 0);
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
function killProcess(pid, force = false) {
|
|
51
|
+
try {
|
|
52
|
+
if (process.platform === 'win32') {
|
|
53
|
+
spawn('taskkill', ['/PID', String(pid), force ? '/F' : '/T', '/T'], { stdio: 'ignore' }).on('error', () => { });
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
process.kill(pid, force ? 'SIGKILL' : 'SIGTERM');
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
// best effort
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
async function startServer(opts) {
|
|
64
|
+
if (!existsSync(SERVER_SCRIPT)) {
|
|
65
|
+
console.error(JSON.stringify({ error: `Visualizer server script not found at ${SERVER_SCRIPT}` }));
|
|
66
|
+
process.exit(1);
|
|
67
|
+
}
|
|
68
|
+
const cwd = opts.cwd ? resolve(opts.cwd) : process.cwd();
|
|
69
|
+
const execId = generateExecId();
|
|
70
|
+
const serveDir = resolveServeDir(cwd, opts, execId);
|
|
71
|
+
mkdirSync(serveDir, { recursive: true });
|
|
72
|
+
// Log files live next to the serve dir (not inside — so they don't clutter listings).
|
|
73
|
+
const logDir = opts.dir
|
|
74
|
+
? join(cwd, '.workflow', '.brainstorm-visualize', execId)
|
|
75
|
+
: serveDir;
|
|
76
|
+
mkdirSync(logDir, { recursive: true });
|
|
77
|
+
const bindHost = opts.host ?? '127.0.0.1';
|
|
78
|
+
const urlHost = opts.urlHost ?? (bindHost === '127.0.0.1' || bindHost === 'localhost' ? 'localhost' : bindHost);
|
|
79
|
+
const env = {
|
|
80
|
+
...process.env,
|
|
81
|
+
BRAINSTORM_DIR: serveDir,
|
|
82
|
+
BRAINSTORM_HOST: bindHost,
|
|
83
|
+
BRAINSTORM_URL_HOST: urlHost,
|
|
84
|
+
MAESTRO_EXEC_ID: execId,
|
|
85
|
+
};
|
|
86
|
+
if (opts.port) {
|
|
87
|
+
env.BRAINSTORM_PORT = opts.port;
|
|
88
|
+
}
|
|
89
|
+
// Only bind lifecycle to an owner PID when the caller explicitly opts in.
|
|
90
|
+
// The ephemeral CLI PID would be wrong — it exits the moment start returns.
|
|
91
|
+
if (opts.ownerPid && /^[1-9]\d*$/.test(opts.ownerPid)) {
|
|
92
|
+
env.BRAINSTORM_OWNER_PID = opts.ownerPid;
|
|
93
|
+
}
|
|
94
|
+
// Redirect child stdio to files in logDir so the server can keep writing
|
|
95
|
+
// logs after the parent CLI exits (pipe-based capture would close when the
|
|
96
|
+
// parent detaches and kill the server on the next write).
|
|
97
|
+
const logPath = join(logDir, 'server.log');
|
|
98
|
+
const errPath = join(logDir, 'server.err');
|
|
99
|
+
const logFd = openSync(logPath, 'w');
|
|
100
|
+
const errFd = openSync(errPath, 'w');
|
|
101
|
+
const child = spawn(process.execPath, [SERVER_SCRIPT], {
|
|
102
|
+
cwd,
|
|
103
|
+
detached: true,
|
|
104
|
+
stdio: ['ignore', logFd, errFd],
|
|
105
|
+
env,
|
|
106
|
+
});
|
|
107
|
+
const broker = createVizBroker();
|
|
108
|
+
const startedAt = new Date().toISOString();
|
|
109
|
+
try {
|
|
110
|
+
broker.publishEvent({
|
|
111
|
+
jobId: execId,
|
|
112
|
+
type: 'queued',
|
|
113
|
+
status: 'queued',
|
|
114
|
+
payload: { summary: 'brainstorm-visualizer queued' },
|
|
115
|
+
jobMetadata: {
|
|
116
|
+
kind: 'brainstorm-visualizer',
|
|
117
|
+
workerPid: child.pid ?? null,
|
|
118
|
+
serveDir,
|
|
119
|
+
logDir,
|
|
120
|
+
sessionId: opts.session ?? null,
|
|
121
|
+
bindHost,
|
|
122
|
+
urlHost,
|
|
123
|
+
},
|
|
124
|
+
now: startedAt,
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
// Broker publish is best-effort.
|
|
129
|
+
}
|
|
130
|
+
// Tail the log file until we see the `server-started` line, or timeout.
|
|
131
|
+
const info = await waitForStartupLine(logPath, child, STARTUP_TIMEOUT_MS).catch((err) => err);
|
|
132
|
+
if (info instanceof Error || !info) {
|
|
133
|
+
killProcess(child.pid ?? 0, true);
|
|
134
|
+
try {
|
|
135
|
+
broker.publishEvent({
|
|
136
|
+
jobId: execId,
|
|
137
|
+
type: 'failed',
|
|
138
|
+
status: 'failed',
|
|
139
|
+
payload: { summary: info instanceof Error ? info.message : 'Server failed to start' },
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
catch { /* ignore */ }
|
|
143
|
+
console.error(JSON.stringify({ error: info instanceof Error ? info.message : 'Server failed to start within 5s' }));
|
|
144
|
+
process.exit(1);
|
|
145
|
+
}
|
|
146
|
+
try {
|
|
147
|
+
broker.publishEvent({
|
|
148
|
+
jobId: execId,
|
|
149
|
+
type: 'running',
|
|
150
|
+
status: 'running',
|
|
151
|
+
payload: { summary: `visualizer listening on ${info.url}` },
|
|
152
|
+
snapshot: {
|
|
153
|
+
url: info.url,
|
|
154
|
+
port: info.port,
|
|
155
|
+
screen_dir: info.screen_dir,
|
|
156
|
+
host: info.host,
|
|
157
|
+
url_host: info.url_host,
|
|
158
|
+
},
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
catch { /* ignore */ }
|
|
162
|
+
// Detach so the parent CLI can exit without waiting on the server.
|
|
163
|
+
child.unref();
|
|
164
|
+
console.log(JSON.stringify({
|
|
165
|
+
execId,
|
|
166
|
+
serveDir,
|
|
167
|
+
logDir,
|
|
168
|
+
...info,
|
|
169
|
+
}));
|
|
170
|
+
}
|
|
171
|
+
function waitForStartupLine(logPath, child, timeoutMs) {
|
|
172
|
+
const pollIntervalMs = 50;
|
|
173
|
+
return new Promise((resolveFn, rejectFn) => {
|
|
174
|
+
const deadline = Date.now() + timeoutMs;
|
|
175
|
+
let lastSize = 0;
|
|
176
|
+
let settled = false;
|
|
177
|
+
const onExit = (code) => {
|
|
178
|
+
if (settled)
|
|
179
|
+
return;
|
|
180
|
+
settled = true;
|
|
181
|
+
rejectFn(new Error(`Server exited prematurely (code ${code ?? 'null'})`));
|
|
182
|
+
};
|
|
183
|
+
child.once('exit', onExit);
|
|
184
|
+
const tick = () => {
|
|
185
|
+
if (settled)
|
|
186
|
+
return;
|
|
187
|
+
try {
|
|
188
|
+
const size = statSync(logPath).size;
|
|
189
|
+
if (size > lastSize) {
|
|
190
|
+
const content = readFileSync(logPath, 'utf-8');
|
|
191
|
+
lastSize = size;
|
|
192
|
+
for (const line of content.split('\n')) {
|
|
193
|
+
const trimmed = line.trim();
|
|
194
|
+
if (!trimmed)
|
|
195
|
+
continue;
|
|
196
|
+
try {
|
|
197
|
+
const msg = JSON.parse(trimmed);
|
|
198
|
+
if (msg.type === 'server-started' && msg.url && msg.screen_dir) {
|
|
199
|
+
settled = true;
|
|
200
|
+
child.off('exit', onExit);
|
|
201
|
+
resolveFn(msg);
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
catch {
|
|
206
|
+
// non-JSON line — skip
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
catch {
|
|
212
|
+
// file not yet visible — keep polling
|
|
213
|
+
}
|
|
214
|
+
if (Date.now() >= deadline) {
|
|
215
|
+
settled = true;
|
|
216
|
+
child.off('exit', onExit);
|
|
217
|
+
rejectFn(new Error(`Server did not emit server-started within ${timeoutMs}ms`));
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
setTimeout(tick, pollIntervalMs);
|
|
221
|
+
};
|
|
222
|
+
setTimeout(tick, pollIntervalMs);
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
function stopServer(execId, opts) {
|
|
226
|
+
const broker = createVizBroker();
|
|
227
|
+
const job = broker.getJob(execId);
|
|
228
|
+
if (!job) {
|
|
229
|
+
console.error(JSON.stringify({ error: `No visualizer job with execId: ${execId}` }));
|
|
230
|
+
process.exit(1);
|
|
231
|
+
}
|
|
232
|
+
const metadata = job.metadata ?? {};
|
|
233
|
+
const workerPid = typeof metadata.workerPid === 'number' ? metadata.workerPid : null;
|
|
234
|
+
const logDir = typeof metadata.logDir === 'string' ? metadata.logDir : null;
|
|
235
|
+
if (workerPid && isProcessAlive(workerPid)) {
|
|
236
|
+
killProcess(workerPid, false);
|
|
237
|
+
const deadline = Date.now() + 2000;
|
|
238
|
+
while (Date.now() < deadline && isProcessAlive(workerPid)) {
|
|
239
|
+
// busy-wait with small sleep
|
|
240
|
+
const end = Date.now() + 100;
|
|
241
|
+
while (Date.now() < end) { /* spin */ }
|
|
242
|
+
}
|
|
243
|
+
if (isProcessAlive(workerPid)) {
|
|
244
|
+
killProcess(workerPid, true);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
try {
|
|
248
|
+
broker.publishEvent({
|
|
249
|
+
jobId: execId,
|
|
250
|
+
type: 'cancelled',
|
|
251
|
+
status: 'cancelled',
|
|
252
|
+
payload: { summary: 'visualizer stopped via brainstorm-visualize stop' },
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
catch { /* ignore */ }
|
|
256
|
+
// Only remove ephemeral log dirs (under /tmp). The serveDir may hold the
|
|
257
|
+
// user's authored HTML — never auto-delete it.
|
|
258
|
+
if (opts.cleanTmp && logDir && (logDir.startsWith('/tmp/') || logDir.startsWith('/var/tmp/'))) {
|
|
259
|
+
try {
|
|
260
|
+
rmSync(logDir, { recursive: true, force: true });
|
|
261
|
+
}
|
|
262
|
+
catch { /* ignore */ }
|
|
263
|
+
}
|
|
264
|
+
console.log(JSON.stringify({ status: 'stopped', execId, workerPid }));
|
|
265
|
+
}
|
|
266
|
+
// ---------------------------------------------------------------------------
|
|
267
|
+
// status
|
|
268
|
+
// ---------------------------------------------------------------------------
|
|
269
|
+
function statusServer(execId) {
|
|
270
|
+
const broker = createVizBroker();
|
|
271
|
+
if (execId) {
|
|
272
|
+
const job = broker.getJob(execId);
|
|
273
|
+
if (!job) {
|
|
274
|
+
console.error(JSON.stringify({ error: `No visualizer job with execId: ${execId}` }));
|
|
275
|
+
process.exit(1);
|
|
276
|
+
}
|
|
277
|
+
const metadata = job.metadata ?? {};
|
|
278
|
+
const snapshot = job.latestSnapshot ?? {};
|
|
279
|
+
const pid = typeof metadata.workerPid === 'number' ? metadata.workerPid : null;
|
|
280
|
+
const alive = pid !== null ? isProcessAlive(pid) : null;
|
|
281
|
+
console.log(JSON.stringify({
|
|
282
|
+
execId,
|
|
283
|
+
status: job.status,
|
|
284
|
+
alive,
|
|
285
|
+
url: snapshot.url ?? null,
|
|
286
|
+
serveDir: metadata.serveDir ?? null,
|
|
287
|
+
logDir: metadata.logDir ?? null,
|
|
288
|
+
screen_dir: snapshot.screen_dir ?? null,
|
|
289
|
+
workerPid: pid,
|
|
290
|
+
updatedAt: job.updatedAt,
|
|
291
|
+
}, null, 2));
|
|
292
|
+
return;
|
|
293
|
+
}
|
|
294
|
+
// Without execId: broker has no kind-level filter, so caller must pass execId.
|
|
295
|
+
// Print a hint.
|
|
296
|
+
console.error(JSON.stringify({
|
|
297
|
+
error: 'Pass an execId: maestro brainstorm-visualize status <execId>',
|
|
298
|
+
hint: 'The execId is returned by `maestro brainstorm-visualize start`.',
|
|
299
|
+
}));
|
|
300
|
+
process.exit(1);
|
|
301
|
+
}
|
|
302
|
+
// ---------------------------------------------------------------------------
|
|
303
|
+
// Registration
|
|
304
|
+
// ---------------------------------------------------------------------------
|
|
305
|
+
export function registerBrainstormVisualizeCommand(program) {
|
|
306
|
+
const root = program
|
|
307
|
+
.command('brainstorm-visualize')
|
|
308
|
+
.alias('bv')
|
|
309
|
+
.description('Launch or control the brainstorm HTML prototype visualizer server');
|
|
310
|
+
root
|
|
311
|
+
.command('start')
|
|
312
|
+
.description('Start the visualizer server (detached, broker-tracked)')
|
|
313
|
+
.option('--dir <path>', 'Serve HTML files from this directory (e.g. .brainstorming/html-prototypes/)')
|
|
314
|
+
.option('--session <id>', 'Fallback when --dir is absent: bind files under .workflow/.brainstorm-visualize/<id>/')
|
|
315
|
+
.option('--host <host>', 'Bind host (default 127.0.0.1)', '127.0.0.1')
|
|
316
|
+
.option('--url-host <host>', 'Hostname shown in returned URL')
|
|
317
|
+
.option('--port <port>', 'Specific port (default: random high port)')
|
|
318
|
+
.option('--owner-pid <pid>', 'Auto-shutdown when this PID dies (otherwise server relies on 30m idle timeout + explicit stop)')
|
|
319
|
+
.option('--cd <dir>', 'Project working directory', process.cwd())
|
|
320
|
+
.action(async (opts) => {
|
|
321
|
+
await startServer(opts);
|
|
322
|
+
});
|
|
323
|
+
root
|
|
324
|
+
.command('stop <execId>')
|
|
325
|
+
.description('Stop a running visualizer server by execId')
|
|
326
|
+
.option('--clean-tmp', 'Also remove ephemeral /tmp session dir', false)
|
|
327
|
+
.action((execId, opts) => {
|
|
328
|
+
stopServer(execId, opts);
|
|
329
|
+
});
|
|
330
|
+
root
|
|
331
|
+
.command('status [execId]')
|
|
332
|
+
.description('Show status of a visualizer server')
|
|
333
|
+
.action((execId) => {
|
|
334
|
+
statusServer(execId);
|
|
335
|
+
});
|
|
336
|
+
}
|
|
337
|
+
//# sourceMappingURL=brainstorm-visualize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brainstorm-visualize.js","sourceRoot":"","sources":["../../../src/commands/brainstorm-visualize.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core-memory.d.ts","sourceRoot":"","sources":["../../../src/commands/core-memory.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4BzC,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2EhE"}
|