@isarai/maestro 0.1.0 → 0.1.2
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/index.js +15 -4
- package/dist/index.js.map +2 -2
- package/dist/server.js +196 -165
- package/dist/server.js.map +4 -4
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -9,7 +9,8 @@ var MAESTRO_DIR = path.join(os.homedir(), ".maestro");
|
|
|
9
9
|
var PID_PATH = path.join(MAESTRO_DIR, "server.pid");
|
|
10
10
|
var META_PATH = path.join(MAESTRO_DIR, "server-meta.json");
|
|
11
11
|
var LOG_PATH = path.join(MAESTRO_DIR, "server.log");
|
|
12
|
-
var TOKEN_PATH = path.join(MAESTRO_DIR, "
|
|
12
|
+
var TOKEN_PATH = path.join(MAESTRO_DIR, "token");
|
|
13
|
+
var LEGACY_TOKEN_PATH = path.join(MAESTRO_DIR, "api-token");
|
|
13
14
|
var SERVER_PATH = path.join(PACKAGE_ROOT, "dist", "server.js");
|
|
14
15
|
var DEFAULT_HOST = process.env.HOST || "0.0.0.0";
|
|
15
16
|
var DEFAULT_PORT = process.env.PORT || "4800";
|
|
@@ -76,6 +77,15 @@ function cleanupState() {
|
|
|
76
77
|
} catch {
|
|
77
78
|
}
|
|
78
79
|
}
|
|
80
|
+
function resolveTokenPath() {
|
|
81
|
+
if (fs.existsSync(TOKEN_PATH)) {
|
|
82
|
+
return TOKEN_PATH;
|
|
83
|
+
}
|
|
84
|
+
if (fs.existsSync(LEGACY_TOKEN_PATH)) {
|
|
85
|
+
return LEGACY_TOKEN_PATH;
|
|
86
|
+
}
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
79
89
|
function displayHost(host) {
|
|
80
90
|
if (!host || host === "0.0.0.0" || host === "::") {
|
|
81
91
|
return "127.0.0.1";
|
|
@@ -170,16 +180,17 @@ function status() {
|
|
|
170
180
|
console.log(`Log: ${LOG_PATH}`);
|
|
171
181
|
}
|
|
172
182
|
function auth() {
|
|
173
|
-
|
|
183
|
+
const tokenPath = resolveTokenPath();
|
|
184
|
+
if (!tokenPath) {
|
|
174
185
|
fail(`Maestro API token not found at ${TOKEN_PATH}. Start Maestro first.`);
|
|
175
186
|
}
|
|
176
|
-
const token = fs.readFileSync(
|
|
187
|
+
const token = fs.readFileSync(tokenPath, "utf8").trim();
|
|
177
188
|
const current = getStatus();
|
|
178
189
|
const host = displayHost(current.meta?.host || DEFAULT_HOST);
|
|
179
190
|
const port = current.meta?.port || DEFAULT_PORT;
|
|
180
191
|
console.log(`Server URL: http://${host}:${port}`);
|
|
181
192
|
console.log(`API token: ${token}`);
|
|
182
|
-
console.log(`Token path: ${
|
|
193
|
+
console.log(`Token path: ${tokenPath}`);
|
|
183
194
|
}
|
|
184
195
|
function help() {
|
|
185
196
|
console.log("Usage: maestro <command>");
|
package/dist/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/index.ts"],
|
|
4
|
-
"sourcesContent": ["import * as fs from \"node:fs\";\nimport * as os from \"node:os\";\nimport * as path from \"node:path\";\nimport { spawn } from \"node:child_process\";\nimport { fileURLToPath } from \"node:url\";\n\nconst PACKAGE_ROOT = path.resolve(path.dirname(fileURLToPath(import.meta.url)), \"..\");\nconst MAESTRO_DIR = path.join(os.homedir(), \".maestro\");\nconst PID_PATH = path.join(MAESTRO_DIR, \"server.pid\");\nconst META_PATH = path.join(MAESTRO_DIR, \"server-meta.json\");\nconst LOG_PATH = path.join(MAESTRO_DIR, \"server.log\");\nconst TOKEN_PATH = path.join(MAESTRO_DIR, \"api-token\");\nconst SERVER_PATH = path.join(PACKAGE_ROOT, \"dist\", \"server.js\");\nconst DEFAULT_HOST = process.env.HOST || \"0.0.0.0\";\nconst DEFAULT_PORT = process.env.PORT || \"4800\";\n\ninterface ServerMeta {\n pid: number;\n host: string;\n port: string;\n logPath: string;\n startedAt: string;\n cwd: string;\n}\n\nfunction ensureMaestroDir(): void {\n fs.mkdirSync(MAESTRO_DIR, { recursive: true });\n}\n\nfunction fail(message: string): never {\n console.error(message);\n process.exit(1);\n}\n\nfunction preflight(): void {\n if (!fs.existsSync(SERVER_PATH)) {\n fail(`Maestro server bundle not found at ${SERVER_PATH}`);\n }\n}\n\nfunction readPid(): number | null {\n try {\n const raw = fs.readFileSync(PID_PATH, \"utf8\").trim();\n if (!raw) return null;\n const pid = Number(raw);\n return Number.isInteger(pid) && pid > 0 ? pid : null;\n } catch {\n return null;\n }\n}\n\nfunction isProcessAlive(pid: number): boolean {\n try {\n process.kill(pid, 0);\n if (process.platform === \"linux\") {\n try {\n const stat = fs.readFileSync(`/proc/${pid}/stat`, \"utf8\");\n const fields = stat.trim().split(\" \");\n if (fields[2] === \"Z\") {\n return false;\n }\n } catch {\n // Ignore /proc read failures and fall back to kill(0).\n }\n }\n return true;\n } catch (error) {\n return Boolean(\n error &&\n typeof error === \"object\" &&\n \"code\" in error &&\n (error as NodeJS.ErrnoException).code === \"EPERM\"\n );\n }\n}\n\nfunction readMeta(): ServerMeta | null {\n try {\n return JSON.parse(fs.readFileSync(META_PATH, \"utf8\")) as ServerMeta;\n } catch {\n return null;\n }\n}\n\nfunction writeMeta(meta: ServerMeta): void {\n ensureMaestroDir();\n fs.writeFileSync(META_PATH, JSON.stringify(meta, null, 2) + \"\\n\", \"utf8\");\n}\n\nfunction cleanupState(): void {\n try {\n fs.unlinkSync(PID_PATH);\n } catch {}\n try {\n fs.unlinkSync(META_PATH);\n } catch {}\n}\n\nfunction displayHost(host: string | undefined): string {\n if (!host || host === \"0.0.0.0\" || host === \"::\") {\n return \"127.0.0.1\";\n }\n return host;\n}\n\nfunction getStatus(): { running: boolean; pid: number | null; meta: ServerMeta | null } {\n const pid = readPid();\n const meta = readMeta();\n\n if (!pid) {\n return { running: false, pid: null, meta };\n }\n\n if (!isProcessAlive(pid)) {\n cleanupState();\n return { running: false, pid: null, meta };\n }\n\n return { running: true, pid, meta };\n}\n\nfunction start(): void {\n preflight();\n ensureMaestroDir();\n\n const current = getStatus();\n if (current.running) {\n const host = displayHost(current.meta?.host || DEFAULT_HOST);\n const port = current.meta?.port || DEFAULT_PORT;\n console.log(`Maestro is already running (pid ${current.pid})`);\n console.log(`URL: http://${host}:${port}`);\n console.log(`Log: ${LOG_PATH}`);\n return;\n }\n\n const out = fs.openSync(LOG_PATH, \"a\");\n const env = {\n ...process.env,\n NODE_ENV: process.env.NODE_ENV || \"production\",\n HOST: DEFAULT_HOST,\n PORT: DEFAULT_PORT,\n MAESTRO_INSTALL_ROOT: PACKAGE_ROOT,\n };\n\n const child = spawn(process.execPath, [SERVER_PATH], {\n cwd: process.cwd(),\n detached: true,\n stdio: [\"ignore\", out, out],\n env,\n });\n\n child.unref();\n\n fs.writeFileSync(PID_PATH, `${child.pid}\\n`, \"utf8\");\n writeMeta({\n pid: child.pid ?? 0,\n host: env.HOST,\n port: env.PORT,\n logPath: LOG_PATH,\n startedAt: new Date().toISOString(),\n cwd: process.cwd(),\n });\n\n console.log(`Started Maestro (pid ${child.pid})`);\n console.log(`URL: http://${displayHost(env.HOST)}:${env.PORT}`);\n console.log(`Log: ${LOG_PATH}`);\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nasync function stop(): Promise<void> {\n const status = getStatus();\n if (!status.running || !status.pid) {\n console.log(\"Maestro is not running\");\n cleanupState();\n return;\n }\n\n process.kill(status.pid, \"SIGTERM\");\n\n const deadline = Date.now() + 10_000;\n while (Date.now() < deadline) {\n if (!isProcessAlive(status.pid)) {\n cleanupState();\n console.log(`Stopped Maestro (pid ${status.pid})`);\n return;\n }\n await sleep(200);\n }\n\n fail(`Timed out waiting for Maestro (pid ${status.pid}) to stop`);\n}\n\nfunction status(): void {\n const current = getStatus();\n if (!current.running) {\n console.log(\"Maestro is not running\");\n return;\n }\n\n const host = displayHost(current.meta?.host || DEFAULT_HOST);\n const port = current.meta?.port || DEFAULT_PORT;\n console.log(`Maestro is running (pid ${current.pid})`);\n console.log(`URL: http://${host}:${port}`);\n console.log(`Log: ${LOG_PATH}`);\n}\n\nfunction auth(): void {\n if (!
|
|
5
|
-
"mappings": ";AAAA,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,UAAU;AACtB,SAAS,aAAa;AACtB,SAAS,qBAAqB;AAE9B,IAAM,eAAoB,aAAa,aAAQ,cAAc,YAAY,GAAG,CAAC,GAAG,IAAI;AACpF,IAAM,cAAmB,UAAQ,WAAQ,GAAG,UAAU;AACtD,IAAM,WAAgB,UAAK,aAAa,YAAY;AACpD,IAAM,YAAiB,UAAK,aAAa,kBAAkB;AAC3D,IAAM,WAAgB,UAAK,aAAa,YAAY;AACpD,IAAM,aAAkB,UAAK,aAAa,WAAW;
|
|
4
|
+
"sourcesContent": ["import * as fs from \"node:fs\";\nimport * as os from \"node:os\";\nimport * as path from \"node:path\";\nimport { spawn } from \"node:child_process\";\nimport { fileURLToPath } from \"node:url\";\n\nconst PACKAGE_ROOT = path.resolve(path.dirname(fileURLToPath(import.meta.url)), \"..\");\nconst MAESTRO_DIR = path.join(os.homedir(), \".maestro\");\nconst PID_PATH = path.join(MAESTRO_DIR, \"server.pid\");\nconst META_PATH = path.join(MAESTRO_DIR, \"server-meta.json\");\nconst LOG_PATH = path.join(MAESTRO_DIR, \"server.log\");\nconst TOKEN_PATH = path.join(MAESTRO_DIR, \"token\");\nconst LEGACY_TOKEN_PATH = path.join(MAESTRO_DIR, \"api-token\");\nconst SERVER_PATH = path.join(PACKAGE_ROOT, \"dist\", \"server.js\");\nconst DEFAULT_HOST = process.env.HOST || \"0.0.0.0\";\nconst DEFAULT_PORT = process.env.PORT || \"4800\";\n\ninterface ServerMeta {\n pid: number;\n host: string;\n port: string;\n logPath: string;\n startedAt: string;\n cwd: string;\n}\n\nfunction ensureMaestroDir(): void {\n fs.mkdirSync(MAESTRO_DIR, { recursive: true });\n}\n\nfunction fail(message: string): never {\n console.error(message);\n process.exit(1);\n}\n\nfunction preflight(): void {\n if (!fs.existsSync(SERVER_PATH)) {\n fail(`Maestro server bundle not found at ${SERVER_PATH}`);\n }\n}\n\nfunction readPid(): number | null {\n try {\n const raw = fs.readFileSync(PID_PATH, \"utf8\").trim();\n if (!raw) return null;\n const pid = Number(raw);\n return Number.isInteger(pid) && pid > 0 ? pid : null;\n } catch {\n return null;\n }\n}\n\nfunction isProcessAlive(pid: number): boolean {\n try {\n process.kill(pid, 0);\n if (process.platform === \"linux\") {\n try {\n const stat = fs.readFileSync(`/proc/${pid}/stat`, \"utf8\");\n const fields = stat.trim().split(\" \");\n if (fields[2] === \"Z\") {\n return false;\n }\n } catch {\n // Ignore /proc read failures and fall back to kill(0).\n }\n }\n return true;\n } catch (error) {\n return Boolean(\n error &&\n typeof error === \"object\" &&\n \"code\" in error &&\n (error as NodeJS.ErrnoException).code === \"EPERM\"\n );\n }\n}\n\nfunction readMeta(): ServerMeta | null {\n try {\n return JSON.parse(fs.readFileSync(META_PATH, \"utf8\")) as ServerMeta;\n } catch {\n return null;\n }\n}\n\nfunction writeMeta(meta: ServerMeta): void {\n ensureMaestroDir();\n fs.writeFileSync(META_PATH, JSON.stringify(meta, null, 2) + \"\\n\", \"utf8\");\n}\n\nfunction cleanupState(): void {\n try {\n fs.unlinkSync(PID_PATH);\n } catch {}\n try {\n fs.unlinkSync(META_PATH);\n } catch {}\n}\n\nfunction resolveTokenPath(): string | null {\n if (fs.existsSync(TOKEN_PATH)) {\n return TOKEN_PATH;\n }\n if (fs.existsSync(LEGACY_TOKEN_PATH)) {\n return LEGACY_TOKEN_PATH;\n }\n return null;\n}\n\nfunction displayHost(host: string | undefined): string {\n if (!host || host === \"0.0.0.0\" || host === \"::\") {\n return \"127.0.0.1\";\n }\n return host;\n}\n\nfunction getStatus(): { running: boolean; pid: number | null; meta: ServerMeta | null } {\n const pid = readPid();\n const meta = readMeta();\n\n if (!pid) {\n return { running: false, pid: null, meta };\n }\n\n if (!isProcessAlive(pid)) {\n cleanupState();\n return { running: false, pid: null, meta };\n }\n\n return { running: true, pid, meta };\n}\n\nfunction start(): void {\n preflight();\n ensureMaestroDir();\n\n const current = getStatus();\n if (current.running) {\n const host = displayHost(current.meta?.host || DEFAULT_HOST);\n const port = current.meta?.port || DEFAULT_PORT;\n console.log(`Maestro is already running (pid ${current.pid})`);\n console.log(`URL: http://${host}:${port}`);\n console.log(`Log: ${LOG_PATH}`);\n return;\n }\n\n const out = fs.openSync(LOG_PATH, \"a\");\n const env = {\n ...process.env,\n NODE_ENV: process.env.NODE_ENV || \"production\",\n HOST: DEFAULT_HOST,\n PORT: DEFAULT_PORT,\n MAESTRO_INSTALL_ROOT: PACKAGE_ROOT,\n };\n\n const child = spawn(process.execPath, [SERVER_PATH], {\n cwd: process.cwd(),\n detached: true,\n stdio: [\"ignore\", out, out],\n env,\n });\n\n child.unref();\n\n fs.writeFileSync(PID_PATH, `${child.pid}\\n`, \"utf8\");\n writeMeta({\n pid: child.pid ?? 0,\n host: env.HOST,\n port: env.PORT,\n logPath: LOG_PATH,\n startedAt: new Date().toISOString(),\n cwd: process.cwd(),\n });\n\n console.log(`Started Maestro (pid ${child.pid})`);\n console.log(`URL: http://${displayHost(env.HOST)}:${env.PORT}`);\n console.log(`Log: ${LOG_PATH}`);\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nasync function stop(): Promise<void> {\n const status = getStatus();\n if (!status.running || !status.pid) {\n console.log(\"Maestro is not running\");\n cleanupState();\n return;\n }\n\n process.kill(status.pid, \"SIGTERM\");\n\n const deadline = Date.now() + 10_000;\n while (Date.now() < deadline) {\n if (!isProcessAlive(status.pid)) {\n cleanupState();\n console.log(`Stopped Maestro (pid ${status.pid})`);\n return;\n }\n await sleep(200);\n }\n\n fail(`Timed out waiting for Maestro (pid ${status.pid}) to stop`);\n}\n\nfunction status(): void {\n const current = getStatus();\n if (!current.running) {\n console.log(\"Maestro is not running\");\n return;\n }\n\n const host = displayHost(current.meta?.host || DEFAULT_HOST);\n const port = current.meta?.port || DEFAULT_PORT;\n console.log(`Maestro is running (pid ${current.pid})`);\n console.log(`URL: http://${host}:${port}`);\n console.log(`Log: ${LOG_PATH}`);\n}\n\nfunction auth(): void {\n const tokenPath = resolveTokenPath();\n if (!tokenPath) {\n fail(`Maestro API token not found at ${TOKEN_PATH}. Start Maestro first.`);\n }\n\n const token = fs.readFileSync(tokenPath, \"utf8\").trim();\n const current = getStatus();\n const host = displayHost(current.meta?.host || DEFAULT_HOST);\n const port = current.meta?.port || DEFAULT_PORT;\n\n console.log(`Server URL: http://${host}:${port}`);\n console.log(`API token: ${token}`);\n console.log(`Token path: ${tokenPath}`);\n}\n\nfunction help(): void {\n console.log(\"Usage: maestro <command>\");\n console.log(\"\");\n console.log(\"Commands:\");\n console.log(\" start Start the Maestro server in the background\");\n console.log(\" stop Stop the background Maestro server\");\n console.log(\" status Show whether the Maestro server is running\");\n console.log(\" auth Print the local Maestro API token\");\n}\n\nasync function main(): Promise<void> {\n const cmd = process.argv[2];\n\n switch (cmd) {\n case \"start\":\n start();\n break;\n case \"stop\":\n await stop();\n break;\n case \"status\":\n status();\n break;\n case \"auth\":\n auth();\n break;\n case \"help\":\n case \"--help\":\n case \"-h\":\n case undefined:\n help();\n break;\n default:\n fail(`Unknown command: ${cmd}`);\n }\n}\n\nvoid main();\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["resolve", "status"]
|
|
7
7
|
}
|