tono 0.2.0 → 0.3.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/README.md +95 -3
- package/dist/cli/checks.js +504 -0
- package/dist/cli/checks.js.map +1 -0
- package/dist/cli/commands/config.js +20 -3
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/configure.js +1 -1
- package/dist/cli/commands/configure.js.map +1 -1
- package/dist/cli/commands/doctor.js +22 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/gateway.js +23 -10
- package/dist/cli/commands/gateway.js.map +1 -1
- package/dist/cli/commands/init.js +22 -3
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/start.js +72 -18
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/commands/worker.js +458 -0
- package/dist/cli/commands/worker.js.map +1 -0
- package/dist/cli/index.js +28 -9
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/launchd.js +5 -5
- package/dist/cli/launchd.js.map +1 -1
- package/dist/server/app.js +90 -14
- package/dist/server/app.js.map +1 -1
- package/dist/server/config/load.js +19 -1
- package/dist/server/config/load.js.map +1 -1
- package/dist/server/config/schema.json +19 -0
- package/dist/server/db/client.js +50 -1
- package/dist/server/db/client.js.map +1 -1
- package/dist/server/db/queries.js +126 -3
- package/dist/server/db/queries.js.map +1 -1
- package/dist/server/db/schema.sql +36 -21
- package/dist/server/events.js.map +1 -1
- package/dist/server/server.js +28 -11
- package/dist/server/server.js.map +1 -1
- package/dist/server/worker/agent.js +396 -0
- package/dist/server/worker/agent.js.map +1 -0
- package/dist/server/worker/pty-bridge.js +27 -0
- package/dist/server/worker/pty-bridge.js.map +1 -0
- package/dist/server/workers/github-poller.js +26 -8
- package/dist/server/workers/github-poller.js.map +1 -1
- package/dist/server/workers/reaper.js +44 -0
- package/dist/server/workers/reaper.js.map +1 -0
- package/dist/server/workers/registry.js +166 -0
- package/dist/server/workers/registry.js.map +1 -0
- package/dist/server/workers/scheduler.js +79 -130
- package/dist/server/workers/scheduler.js.map +1 -1
- package/dist/server/ws/pty.js +66 -54
- package/dist/server/ws/pty.js.map +1 -1
- package/dist/server/ws/workers.js +206 -0
- package/dist/server/ws/workers.js.map +1 -0
- package/dist/shared/types.js +4 -1
- package/dist/shared/types.js.map +1 -1
- package/dist/shared/version.js +18 -0
- package/dist/shared/version.js.map +1 -0
- package/dist/shared/worker-protocol.js +28 -0
- package/dist/shared/worker-protocol.js.map +1 -0
- package/dist/web/assets/{index-5VFn-lxF.js → index-DPB0x7SX.js} +21 -21
- package/dist/web/index.html +1 -1
- package/package.json +18 -26
|
@@ -0,0 +1,458 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, unlinkSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
import { dirname, join, resolve } from "node:path";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
5
|
+
import { randomUUID } from "node:crypto";
|
|
6
|
+
import { execSync, spawnSync } from "node:child_process";
|
|
7
|
+
import { WorkerAgent } from "../../server/worker/agent.js";
|
|
8
|
+
import { WORKER_LABEL, buildPlist, plistPath } from "../launchd.js";
|
|
9
|
+
const HELP = `tono worker <subcommand>
|
|
10
|
+
|
|
11
|
+
Run a tono worker that connects to a remote gateway and executes agent tasks
|
|
12
|
+
on this machine. Workers are network-trusted via Tailscale; they MUST run on
|
|
13
|
+
the same tailnet as the gateway.
|
|
14
|
+
|
|
15
|
+
run run the worker in the FOREGROUND (this terminal). ^C to stop.
|
|
16
|
+
start install (or update) the LaunchAgent and load it; runs in BACKGROUND
|
|
17
|
+
stop unload the LaunchAgent (worker.json kept on disk)
|
|
18
|
+
restart unload + load (apply binary or settings changes)
|
|
19
|
+
status show LaunchAgent + connection status
|
|
20
|
+
uninstall unload and remove the LaunchAgent
|
|
21
|
+
logs tail ~/.tono/logs/worker.{out,err}.log
|
|
22
|
+
|
|
23
|
+
Settings persist in ~/.tono/worker.json after the first run/start, so subsequent
|
|
24
|
+
invocations don't need flags. Pass new flags to override and re-persist.
|
|
25
|
+
|
|
26
|
+
Common flags (run / start):
|
|
27
|
+
--gateway <host:port> gateway host (required first time, no scheme)
|
|
28
|
+
--workspaces <path> bare-clone + worktree root (default: ~/.tono/workspaces)
|
|
29
|
+
--logs <path> PTY log dir (default: ~/.tono/logs)
|
|
30
|
+
--agent <name=command> advertise an agent CLI; repeatable
|
|
31
|
+
--concurrency <agent=N/M> max simultaneous (implement/review) for an agent
|
|
32
|
+
|
|
33
|
+
Prerequisites on this machine:
|
|
34
|
+
- gh (authenticated: \`gh auth login\`)
|
|
35
|
+
- the agent CLIs you advertise (claude / codex / opencode)
|
|
36
|
+
- Tailscale (or some trusted network reach to the gateway)
|
|
37
|
+
`;
|
|
38
|
+
function parseArgs(argv) {
|
|
39
|
+
const out = {
|
|
40
|
+
agentCommands: new Map(),
|
|
41
|
+
concurrency: new Map(),
|
|
42
|
+
help: false,
|
|
43
|
+
};
|
|
44
|
+
for (let i = 0; i < argv.length; i++) {
|
|
45
|
+
const a = argv[i];
|
|
46
|
+
if (a === "--help" || a === "-h") {
|
|
47
|
+
out.help = true;
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
if (a === "--gateway") {
|
|
51
|
+
out.gateway = argv[++i];
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
if (a === "--workspaces") {
|
|
55
|
+
out.workspaces = argv[++i];
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
if (a === "--logs") {
|
|
59
|
+
out.logs = argv[++i];
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
if (a === "--agent") {
|
|
63
|
+
const v = argv[++i] ?? "";
|
|
64
|
+
const eq = v.indexOf("=");
|
|
65
|
+
if (eq <= 0)
|
|
66
|
+
throw new Error(`bad --agent value: ${v}`);
|
|
67
|
+
out.agentCommands.set(v.slice(0, eq), v.slice(eq + 1));
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
if (a === "--concurrency") {
|
|
71
|
+
const v = argv[++i] ?? "";
|
|
72
|
+
const eq = v.indexOf("=");
|
|
73
|
+
if (eq <= 0)
|
|
74
|
+
throw new Error(`bad --concurrency value: ${v}`);
|
|
75
|
+
const name = v.slice(0, eq);
|
|
76
|
+
const [imp, rev] = v.slice(eq + 1).split("/");
|
|
77
|
+
const implement = Number(imp);
|
|
78
|
+
const review = Number(rev ?? imp);
|
|
79
|
+
if (!Number.isFinite(implement) || !Number.isFinite(review)) {
|
|
80
|
+
throw new Error(`bad --concurrency value: ${v}`);
|
|
81
|
+
}
|
|
82
|
+
out.concurrency.set(name, { implement, review });
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
throw new Error(`unknown argument: ${a}`);
|
|
86
|
+
}
|
|
87
|
+
return out;
|
|
88
|
+
}
|
|
89
|
+
function tonoHomeDir() {
|
|
90
|
+
return process.env.TONO_HOME ?? join(homedir(), ".tono");
|
|
91
|
+
}
|
|
92
|
+
function workerStatePath() {
|
|
93
|
+
return join(tonoHomeDir(), "worker.json");
|
|
94
|
+
}
|
|
95
|
+
function loadOrCreateState() {
|
|
96
|
+
const path = workerStatePath();
|
|
97
|
+
if (existsSync(path)) {
|
|
98
|
+
try {
|
|
99
|
+
const parsed = JSON.parse(readFileSync(path, "utf8"));
|
|
100
|
+
if (typeof parsed.workerId === "string" && parsed.workerId.length > 0) {
|
|
101
|
+
return {
|
|
102
|
+
workerId: parsed.workerId,
|
|
103
|
+
gatewayUrl: parsed.gatewayUrl,
|
|
104
|
+
agentCommands: parsed.agentCommands,
|
|
105
|
+
concurrency: parsed.concurrency,
|
|
106
|
+
workspacesRoot: parsed.workspacesRoot,
|
|
107
|
+
logsDir: parsed.logsDir,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
catch {
|
|
112
|
+
// fall through; rewrite below
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
const fresh = { workerId: randomUUID() };
|
|
116
|
+
mkdirSync(tonoHomeDir(), { recursive: true });
|
|
117
|
+
writeFileSync(path, JSON.stringify(fresh, null, 2) + "\n");
|
|
118
|
+
return fresh;
|
|
119
|
+
}
|
|
120
|
+
function saveState(s) {
|
|
121
|
+
mkdirSync(tonoHomeDir(), { recursive: true });
|
|
122
|
+
writeFileSync(workerStatePath(), JSON.stringify(s, null, 2) + "\n");
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Merge CLI args onto persisted state. CLI args win when present; missing
|
|
126
|
+
* args fall back to whatever's in worker.json. Returns the merged state and
|
|
127
|
+
* persists it back so the launchd-spawned process sees the same settings.
|
|
128
|
+
*/
|
|
129
|
+
function mergeAndPersist(state, args) {
|
|
130
|
+
const out = { ...state };
|
|
131
|
+
if (args.gateway)
|
|
132
|
+
out.gatewayUrl = normalizeGatewayUrl(args.gateway);
|
|
133
|
+
if (args.workspaces)
|
|
134
|
+
out.workspacesRoot = expandHomePath(args.workspaces);
|
|
135
|
+
if (args.logs)
|
|
136
|
+
out.logsDir = expandHomePath(args.logs);
|
|
137
|
+
if (args.agentCommands.size > 0) {
|
|
138
|
+
out.agentCommands = { ...(out.agentCommands ?? {}) };
|
|
139
|
+
for (const [k, v] of args.agentCommands.entries())
|
|
140
|
+
out.agentCommands[k] = v;
|
|
141
|
+
}
|
|
142
|
+
if (args.concurrency.size > 0) {
|
|
143
|
+
out.concurrency = { ...(out.concurrency ?? {}) };
|
|
144
|
+
for (const [k, v] of args.concurrency.entries())
|
|
145
|
+
out.concurrency[k] = v;
|
|
146
|
+
}
|
|
147
|
+
saveState(out);
|
|
148
|
+
return out;
|
|
149
|
+
}
|
|
150
|
+
function detectVersion(cmd) {
|
|
151
|
+
try {
|
|
152
|
+
const out = execSync(`${cmd} --version`, { stdio: ["ignore", "pipe", "ignore"], timeout: 5000 }).toString().trim();
|
|
153
|
+
return out.split("\n")[0]?.trim();
|
|
154
|
+
}
|
|
155
|
+
catch {
|
|
156
|
+
return undefined;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
function commandOnPath(cmd) {
|
|
160
|
+
try {
|
|
161
|
+
execSync(`command -v ${cmd}`, { stdio: ["ignore", "pipe", "ignore"], shell: "/bin/sh", timeout: 3000 });
|
|
162
|
+
return true;
|
|
163
|
+
}
|
|
164
|
+
catch {
|
|
165
|
+
return false;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
function buildCapabilities(agentCommands) {
|
|
169
|
+
const defaults = {
|
|
170
|
+
"claude-code": "claude",
|
|
171
|
+
"codex": "codex",
|
|
172
|
+
"opencode": "opencode",
|
|
173
|
+
};
|
|
174
|
+
const resolved = new Map();
|
|
175
|
+
const seen = new Set();
|
|
176
|
+
for (const [name, cmd] of Object.entries(agentCommands ?? {})) {
|
|
177
|
+
seen.add(name);
|
|
178
|
+
if (commandOnPath(cmd))
|
|
179
|
+
resolved.set(name, cmd);
|
|
180
|
+
else
|
|
181
|
+
process.stderr.write(`tono worker: agent command "${cmd}" for ${name} not on PATH; skipping\n`);
|
|
182
|
+
}
|
|
183
|
+
for (const [name, cmd] of Object.entries(defaults)) {
|
|
184
|
+
if (seen.has(name))
|
|
185
|
+
continue;
|
|
186
|
+
if (commandOnPath(cmd))
|
|
187
|
+
resolved.set(name, cmd);
|
|
188
|
+
}
|
|
189
|
+
const agents = {};
|
|
190
|
+
for (const [name, cmd] of resolved.entries()) {
|
|
191
|
+
agents[name] = { version: detectVersion(cmd) };
|
|
192
|
+
}
|
|
193
|
+
return { capabilities: { agents }, resolved };
|
|
194
|
+
}
|
|
195
|
+
function buildCapacity(resolved, overrides) {
|
|
196
|
+
const byAgent = {};
|
|
197
|
+
for (const name of resolved.keys()) {
|
|
198
|
+
byAgent[name] = overrides?.[name] ?? { implement: 2, review: 2 };
|
|
199
|
+
}
|
|
200
|
+
return { byAgent };
|
|
201
|
+
}
|
|
202
|
+
function expandHomePath(p) {
|
|
203
|
+
if (p === "~")
|
|
204
|
+
return homedir();
|
|
205
|
+
if (p.startsWith("~/"))
|
|
206
|
+
return join(homedir(), p.slice(2));
|
|
207
|
+
return p;
|
|
208
|
+
}
|
|
209
|
+
function normalizeGatewayUrl(host) {
|
|
210
|
+
// Accept "host:port", "ws://host:port", "wss://host:port" (plus optional trailing /).
|
|
211
|
+
const stripped = host.replace(/\/$/, "");
|
|
212
|
+
if (stripped.startsWith("ws://") || stripped.startsWith("wss://")) {
|
|
213
|
+
return `${stripped}/api/workers/connect`;
|
|
214
|
+
}
|
|
215
|
+
return `ws://${stripped}/api/workers/connect`;
|
|
216
|
+
}
|
|
217
|
+
// ---- subcommand: run (foreground) ----
|
|
218
|
+
export async function runWorkerForeground(args) {
|
|
219
|
+
const state = mergeAndPersist(loadOrCreateState(), args);
|
|
220
|
+
if (!state.gatewayUrl) {
|
|
221
|
+
console.error("error: --gateway is required on first run");
|
|
222
|
+
console.error("");
|
|
223
|
+
console.error(HELP);
|
|
224
|
+
process.exit(2);
|
|
225
|
+
}
|
|
226
|
+
const { capabilities, resolved } = buildCapabilities(state.agentCommands);
|
|
227
|
+
if (resolved.size === 0) {
|
|
228
|
+
console.error("error: no agent CLIs detected on PATH. Install at least one of: claude, codex, opencode");
|
|
229
|
+
console.error("Or pass --agent <name>=<command> to point at custom binaries.");
|
|
230
|
+
process.exit(1);
|
|
231
|
+
}
|
|
232
|
+
const capacity = buildCapacity(resolved, state.concurrency);
|
|
233
|
+
const workspacesRoot = state.workspacesRoot ?? join(homedir(), ".tono", "workspaces");
|
|
234
|
+
const logsDir = state.logsDir ?? join(homedir(), ".tono", "logs");
|
|
235
|
+
mkdirSync(workspacesRoot, { recursive: true });
|
|
236
|
+
mkdirSync(logsDir, { recursive: true });
|
|
237
|
+
process.stdout.write(`tono worker ${state.workerId.slice(0, 8)} → ${state.gatewayUrl}\n`);
|
|
238
|
+
process.stdout.write(` agents: ${[...resolved.keys()].join(", ")}\n`);
|
|
239
|
+
for (const [name, cap] of Object.entries(capacity.byAgent)) {
|
|
240
|
+
if (!cap)
|
|
241
|
+
continue;
|
|
242
|
+
process.stdout.write(` ${name}: implement=${cap.implement} review=${cap.review}\n`);
|
|
243
|
+
}
|
|
244
|
+
process.stdout.write(` workspaces: ${workspacesRoot}\n`);
|
|
245
|
+
const agent = new WorkerAgent({
|
|
246
|
+
workerId: state.workerId,
|
|
247
|
+
gatewayUrl: state.gatewayUrl,
|
|
248
|
+
workspacesRoot,
|
|
249
|
+
logsDir,
|
|
250
|
+
capacity,
|
|
251
|
+
capabilities,
|
|
252
|
+
});
|
|
253
|
+
agent.start();
|
|
254
|
+
let shuttingDown = false;
|
|
255
|
+
const shutdown = async (signal) => {
|
|
256
|
+
if (shuttingDown)
|
|
257
|
+
return;
|
|
258
|
+
shuttingDown = true;
|
|
259
|
+
process.stdout.write(`tono worker received ${signal}; shutting down\n`);
|
|
260
|
+
await agent.stop();
|
|
261
|
+
setTimeout(() => process.exit(0), 1000);
|
|
262
|
+
};
|
|
263
|
+
process.on("SIGINT", () => void shutdown("SIGINT"));
|
|
264
|
+
process.on("SIGTERM", () => void shutdown("SIGTERM"));
|
|
265
|
+
await new Promise(() => { });
|
|
266
|
+
}
|
|
267
|
+
// ---- subcommand: start / stop / restart / status / uninstall / logs (launchd) ----
|
|
268
|
+
function entryPath() {
|
|
269
|
+
// dist/cli/commands/worker.js → ../index.js
|
|
270
|
+
const here = dirname(fileURLToPath(import.meta.url));
|
|
271
|
+
return resolve(here, "..", "index.js");
|
|
272
|
+
}
|
|
273
|
+
function projectRoot() {
|
|
274
|
+
const here = dirname(fileURLToPath(import.meta.url));
|
|
275
|
+
return resolve(here, "..", "..", "..");
|
|
276
|
+
}
|
|
277
|
+
function exec(cmd, argv) {
|
|
278
|
+
const r = spawnSync(cmd, argv, { encoding: "utf8" });
|
|
279
|
+
return { code: r.status ?? -1, stdout: r.stdout ?? "", stderr: r.stderr ?? "" };
|
|
280
|
+
}
|
|
281
|
+
function ensureWorkerPlist(state) {
|
|
282
|
+
if (!state.gatewayUrl) {
|
|
283
|
+
console.error("error: worker has no gateway configured. Pass --gateway <host>:<port> on first 'tono worker start'.");
|
|
284
|
+
process.exit(1);
|
|
285
|
+
}
|
|
286
|
+
const plistFile = plistPath(WORKER_LABEL);
|
|
287
|
+
const home = tonoHomeDir();
|
|
288
|
+
const logsDir = join(home, "logs");
|
|
289
|
+
mkdirSync(dirname(plistFile), { recursive: true });
|
|
290
|
+
mkdirSync(logsDir, { recursive: true });
|
|
291
|
+
const userPath = process.env.PATH ?? "";
|
|
292
|
+
const fallbackPath = "/usr/local/bin:/opt/homebrew/bin:/usr/bin:/bin:/usr/sbin:/sbin";
|
|
293
|
+
const mergedPath = [userPath, fallbackPath].filter(Boolean).join(":");
|
|
294
|
+
// Background invocation: `tono worker run` reads worker.json for everything.
|
|
295
|
+
// We don't bake flags into ProgramArguments so that re-running `tono worker
|
|
296
|
+
// start --concurrency ...` just rewrites worker.json and (after restart)
|
|
297
|
+
// picks it up — no plist regeneration needed for setting tweaks.
|
|
298
|
+
const xml = buildPlist({
|
|
299
|
+
label: WORKER_LABEL,
|
|
300
|
+
programArgs: [process.execPath, entryPath(), "worker", "run"],
|
|
301
|
+
outLog: join(logsDir, "worker.out.log"),
|
|
302
|
+
errLog: join(logsDir, "worker.err.log"),
|
|
303
|
+
workingDir: projectRoot(),
|
|
304
|
+
tonoHome: home,
|
|
305
|
+
path: mergedPath,
|
|
306
|
+
home: process.env.HOME,
|
|
307
|
+
});
|
|
308
|
+
if (!existsSync(plistFile) || readFileSync(plistFile, "utf8") !== xml) {
|
|
309
|
+
writeFileSync(plistFile, xml);
|
|
310
|
+
console.log(`wrote ${plistFile}`);
|
|
311
|
+
}
|
|
312
|
+
return { plistFile, logsDir };
|
|
313
|
+
}
|
|
314
|
+
function start(args) {
|
|
315
|
+
const state = mergeAndPersist(loadOrCreateState(), args);
|
|
316
|
+
// If launchctl already has it loaded, refuse — like the gateway command does.
|
|
317
|
+
const existing = exec("launchctl", ["list", WORKER_LABEL]);
|
|
318
|
+
if (existing.code === 0) {
|
|
319
|
+
const pid = existing.stdout.match(/"PID"\s*=\s*(\d+)/)?.[1];
|
|
320
|
+
console.log(`worker already running (${WORKER_LABEL}${pid ? `, pid ${pid}` : ""})`);
|
|
321
|
+
console.log(`use 'tono worker restart' to reload, 'tono worker status' to inspect.`);
|
|
322
|
+
return;
|
|
323
|
+
}
|
|
324
|
+
const { plistFile, logsDir } = ensureWorkerPlist(state);
|
|
325
|
+
const r = exec("launchctl", ["load", "-w", plistFile]);
|
|
326
|
+
if (r.code !== 0) {
|
|
327
|
+
console.error(`launchctl load failed: ${r.stderr.trim() || r.stdout.trim()}`);
|
|
328
|
+
process.exit(1);
|
|
329
|
+
}
|
|
330
|
+
console.log(`worker started (${WORKER_LABEL})`);
|
|
331
|
+
console.log(` gateway: ${state.gatewayUrl}`);
|
|
332
|
+
console.log(` logs: ${logsDir}/worker.{out,err}.log`);
|
|
333
|
+
}
|
|
334
|
+
function stop() {
|
|
335
|
+
const plistFile = plistPath(WORKER_LABEL);
|
|
336
|
+
if (!existsSync(plistFile)) {
|
|
337
|
+
console.log(`worker not installed (no plist at ${plistFile})`);
|
|
338
|
+
return;
|
|
339
|
+
}
|
|
340
|
+
const r = exec("launchctl", ["unload", plistFile]);
|
|
341
|
+
if (r.code !== 0 && !/could not find specified service/i.test(r.stderr)) {
|
|
342
|
+
console.error(`launchctl unload returned ${r.code}: ${r.stderr.trim() || r.stdout.trim()}`);
|
|
343
|
+
process.exit(1);
|
|
344
|
+
}
|
|
345
|
+
console.log(`worker stopped (${WORKER_LABEL})`);
|
|
346
|
+
}
|
|
347
|
+
function restart(args) {
|
|
348
|
+
const plistFile = plistPath(WORKER_LABEL);
|
|
349
|
+
if (!existsSync(plistFile) && args.agentCommands.size === 0 && !args.gateway) {
|
|
350
|
+
console.error(`worker not installed; run 'tono worker start --gateway <host:port>' first`);
|
|
351
|
+
process.exit(1);
|
|
352
|
+
}
|
|
353
|
+
const state = mergeAndPersist(loadOrCreateState(), args);
|
|
354
|
+
ensureWorkerPlist(state);
|
|
355
|
+
exec("launchctl", ["unload", plistFile]);
|
|
356
|
+
const r = exec("launchctl", ["load", "-w", plistFile]);
|
|
357
|
+
if (r.code !== 0) {
|
|
358
|
+
console.error(`launchctl load failed: ${r.stderr.trim() || r.stdout.trim()}`);
|
|
359
|
+
process.exit(1);
|
|
360
|
+
}
|
|
361
|
+
console.log(`worker restarted (${WORKER_LABEL})`);
|
|
362
|
+
}
|
|
363
|
+
function uninstall() {
|
|
364
|
+
const plistFile = plistPath(WORKER_LABEL);
|
|
365
|
+
if (!existsSync(plistFile)) {
|
|
366
|
+
console.log(`${plistFile} does not exist; nothing to do`);
|
|
367
|
+
return;
|
|
368
|
+
}
|
|
369
|
+
exec("launchctl", ["unload", plistFile]);
|
|
370
|
+
unlinkSync(plistFile);
|
|
371
|
+
console.log(`removed ${plistFile}`);
|
|
372
|
+
}
|
|
373
|
+
function status() {
|
|
374
|
+
const plistFile = plistPath(WORKER_LABEL);
|
|
375
|
+
console.log(`plist: ${existsSync(plistFile) ? plistFile : "(not installed)"}`);
|
|
376
|
+
const state = existsSync(workerStatePath()) ? loadOrCreateState() : null;
|
|
377
|
+
if (state) {
|
|
378
|
+
console.log(`worker id: ${state.workerId}`);
|
|
379
|
+
console.log(`gateway: ${state.gatewayUrl ?? "(not set)"}`);
|
|
380
|
+
}
|
|
381
|
+
else {
|
|
382
|
+
console.log(`worker id: (none — never run)`);
|
|
383
|
+
}
|
|
384
|
+
const r = exec("launchctl", ["list", WORKER_LABEL]);
|
|
385
|
+
if (r.code === 0) {
|
|
386
|
+
const pid = r.stdout.match(/"PID"\s*=\s*(\d+)/)?.[1];
|
|
387
|
+
const lastExit = r.stdout.match(/"LastExitStatus"\s*=\s*(-?\d+)/)?.[1];
|
|
388
|
+
console.log(`launchctl: loaded${pid ? ` (pid ${pid})` : ""}${lastExit && lastExit !== "0" && !pid ? ` last exit ${lastExit}` : ""}`);
|
|
389
|
+
}
|
|
390
|
+
else {
|
|
391
|
+
console.log(`launchctl: not loaded`);
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
function logs(args) {
|
|
395
|
+
const which = args[0] ?? "out";
|
|
396
|
+
const file = which === "err"
|
|
397
|
+
? join(tonoHomeDir(), "logs", "worker.err.log")
|
|
398
|
+
: join(tonoHomeDir(), "logs", "worker.out.log");
|
|
399
|
+
if (!existsSync(file)) {
|
|
400
|
+
console.error(`no log file at ${file} (worker hasn't run yet?)`);
|
|
401
|
+
process.exit(1);
|
|
402
|
+
}
|
|
403
|
+
const child = spawnSync("tail", ["-n", "200", "-f", file], { stdio: "inherit" });
|
|
404
|
+
process.exit(child.status ?? 0);
|
|
405
|
+
}
|
|
406
|
+
// ---- entry point ----
|
|
407
|
+
export async function runWorker(argv) {
|
|
408
|
+
const sub = argv[0];
|
|
409
|
+
if (sub === undefined || sub === "help" || sub === "--help" || sub === "-h") {
|
|
410
|
+
console.log(HELP);
|
|
411
|
+
return;
|
|
412
|
+
}
|
|
413
|
+
// Anything else takes optional flags after the subcommand.
|
|
414
|
+
const rest = argv.slice(1);
|
|
415
|
+
let parsed;
|
|
416
|
+
try {
|
|
417
|
+
parsed = parseArgs(rest);
|
|
418
|
+
}
|
|
419
|
+
catch (err) {
|
|
420
|
+
console.error(err.message);
|
|
421
|
+
console.error("");
|
|
422
|
+
console.error(HELP);
|
|
423
|
+
process.exit(2);
|
|
424
|
+
}
|
|
425
|
+
if (parsed.help) {
|
|
426
|
+
console.log(HELP);
|
|
427
|
+
return;
|
|
428
|
+
}
|
|
429
|
+
switch (sub) {
|
|
430
|
+
case "run":
|
|
431
|
+
await runWorkerForeground(parsed);
|
|
432
|
+
return;
|
|
433
|
+
case "start":
|
|
434
|
+
start(parsed);
|
|
435
|
+
return;
|
|
436
|
+
case "stop":
|
|
437
|
+
stop();
|
|
438
|
+
return;
|
|
439
|
+
case "restart":
|
|
440
|
+
restart(parsed);
|
|
441
|
+
return;
|
|
442
|
+
case "status":
|
|
443
|
+
status();
|
|
444
|
+
return;
|
|
445
|
+
case "uninstall":
|
|
446
|
+
uninstall();
|
|
447
|
+
return;
|
|
448
|
+
case "logs":
|
|
449
|
+
logs(rest);
|
|
450
|
+
return;
|
|
451
|
+
default:
|
|
452
|
+
console.error(`unknown subcommand: worker ${sub}`);
|
|
453
|
+
console.error("");
|
|
454
|
+
console.error(HELP);
|
|
455
|
+
process.exit(2);
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
//# sourceMappingURL=worker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../../../src/cli/commands/worker.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/index.js
CHANGED
|
@@ -4,8 +4,10 @@ import { runConfig } from "./commands/config.js";
|
|
|
4
4
|
import { runConfigure } from "./commands/configure.js";
|
|
5
5
|
import { runStart } from "./commands/start.js";
|
|
6
6
|
import { runGateway } from "./commands/gateway.js";
|
|
7
|
+
import { runWorker } from "./commands/worker.js";
|
|
7
8
|
import { runOpen } from "./commands/open.js";
|
|
8
|
-
|
|
9
|
+
import { runDoctor } from "./commands/doctor.js";
|
|
10
|
+
import { VERSION } from "../shared/version.js";
|
|
9
11
|
const HELP = `tono ${VERSION}
|
|
10
12
|
|
|
11
13
|
Usage:
|
|
@@ -14,14 +16,25 @@ Usage:
|
|
|
14
16
|
Commands:
|
|
15
17
|
init [--force] initialize ~/.tono with default config and database
|
|
16
18
|
configure interactive setup wizard
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
gateway
|
|
21
|
-
|
|
19
|
+
doctor check that gh, git, and the configured agent CLIs are present and working
|
|
20
|
+
start run tono in the FOREGROUND (this terminal). Stops when you ^C or close the shell.
|
|
21
|
+
Best for dev / first-run sanity checks.
|
|
22
|
+
gateway start run tono in the BACKGROUND via a macOS LaunchAgent. Survives logout, restarts on
|
|
23
|
+
crash, auto-starts at login. Best for the always-on Mac mini setup.
|
|
24
|
+
gateway stop unload the background LaunchAgent (config kept on disk)
|
|
25
|
+
gateway restart reload the background LaunchAgent (apply plist or node-binary changes)
|
|
26
|
+
gateway status show LaunchAgent + HTTP health
|
|
27
|
+
gateway uninstall unload and remove the LaunchAgent
|
|
22
28
|
gateway logs [out|err]
|
|
23
|
-
tail the gateway log file
|
|
24
|
-
|
|
29
|
+
tail the background gateway's log file
|
|
30
|
+
worker run run a worker in the FOREGROUND, connecting to a remote gateway
|
|
31
|
+
worker start install + load a worker LaunchAgent (BACKGROUND, auto-restart)
|
|
32
|
+
worker stop unload the worker LaunchAgent
|
|
33
|
+
worker restart reload the worker LaunchAgent (apply settings changes)
|
|
34
|
+
worker status show worker LaunchAgent + connection state
|
|
35
|
+
worker uninstall unload and remove the worker LaunchAgent
|
|
36
|
+
worker logs [out|err]
|
|
37
|
+
tail the background worker's log file
|
|
25
38
|
open open the web UI in the default browser
|
|
26
39
|
config path print the config file path
|
|
27
40
|
config validate validate the config against the schema
|
|
@@ -44,14 +57,20 @@ async function main(argv) {
|
|
|
44
57
|
console.log(VERSION);
|
|
45
58
|
return;
|
|
46
59
|
case "init":
|
|
47
|
-
runInit({ force: rest.includes("--force") });
|
|
60
|
+
await runInit({ force: rest.includes("--force") });
|
|
48
61
|
return;
|
|
49
62
|
case "configure":
|
|
50
63
|
await runConfigure();
|
|
51
64
|
return;
|
|
65
|
+
case "doctor":
|
|
66
|
+
await runDoctor();
|
|
67
|
+
return;
|
|
52
68
|
case "start":
|
|
53
69
|
await runStart();
|
|
54
70
|
return;
|
|
71
|
+
case "worker":
|
|
72
|
+
await runWorker(rest);
|
|
73
|
+
return;
|
|
55
74
|
case "gateway":
|
|
56
75
|
runGateway(rest);
|
|
57
76
|
return;
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE/C,MAAM,IAAI,GAAG,QAAQ,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiC3B,CAAC;AAEF,KAAK,UAAU,IAAI,CAAC,IAAc;IAChC,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IAE5B,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,SAAS,CAAC;QACf,KAAK,MAAM,CAAC;QACZ,KAAK,QAAQ,CAAC;QACd,KAAK,IAAI;YACP,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClB,OAAO;QACT,KAAK,SAAS,CAAC;QACf,KAAK,WAAW,CAAC;QACjB,KAAK,IAAI;YACP,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACrB,OAAO;QACT,KAAK,MAAM;YACT,MAAM,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;YACnD,OAAO;QACT,KAAK,WAAW;YACd,MAAM,YAAY,EAAE,CAAC;YACrB,OAAO;QACT,KAAK,QAAQ;YACX,MAAM,SAAS,EAAE,CAAC;YAClB,OAAO;QACT,KAAK,OAAO;YACV,MAAM,QAAQ,EAAE,CAAC;YACjB,OAAO;QACT,KAAK,QAAQ;YACX,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;YACtB,OAAO;QACT,KAAK,SAAS;YACZ,UAAU,CAAC,IAAI,CAAC,CAAC;YACjB,OAAO;QACT,KAAK,QAAQ;YACX,OAAO,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC;YAC1E,UAAU,CAAC,IAAI,CAAC,CAAC;YACjB,OAAO;QACT,KAAK,MAAM;YACT,OAAO,EAAE,CAAC;YACV,OAAO;QACT,KAAK,QAAQ;YACX,SAAS,CAAC,IAAI,CAAC,CAAC;YAChB,OAAO;QACT;YACE,OAAO,CAAC,KAAK,CAAC,oBAAoB,GAAG,EAAE,CAAC,CAAC;YACzC,OAAO,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;YAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACH,CAAC;AAED,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACxC,OAAO,CAAC,KAAK,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;IACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
package/dist/cli/launchd.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { homedir } from "node:os";
|
|
2
2
|
import { join } from "node:path";
|
|
3
3
|
export const GATEWAY_LABEL = "com.tono.gateway";
|
|
4
|
-
export
|
|
5
|
-
|
|
4
|
+
export const WORKER_LABEL = "com.tono.worker";
|
|
5
|
+
export function plistPath(label = GATEWAY_LABEL) {
|
|
6
|
+
return join(homedir(), "Library", "LaunchAgents", `${label}.plist`);
|
|
6
7
|
}
|
|
7
8
|
function escapeXml(s) {
|
|
8
9
|
return s.replace(/[<>&'"]/g, (c) => {
|
|
@@ -17,16 +18,15 @@ function escapeXml(s) {
|
|
|
17
18
|
});
|
|
18
19
|
}
|
|
19
20
|
export function buildPlist(inp) {
|
|
20
|
-
const args = [inp.nodeBinary, inp.entry, "start"];
|
|
21
21
|
return `<?xml version="1.0" encoding="UTF-8"?>
|
|
22
22
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
23
23
|
<plist version="1.0">
|
|
24
24
|
<dict>
|
|
25
25
|
<key>Label</key>
|
|
26
|
-
<string>${
|
|
26
|
+
<string>${escapeXml(inp.label)}</string>
|
|
27
27
|
<key>ProgramArguments</key>
|
|
28
28
|
<array>
|
|
29
|
-
${
|
|
29
|
+
${inp.programArgs.map((a) => ` <string>${escapeXml(a)}</string>`).join("\n")}
|
|
30
30
|
</array>
|
|
31
31
|
<key>WorkingDirectory</key>
|
|
32
32
|
<string>${escapeXml(inp.workingDir)}</string>
|
package/dist/cli/launchd.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"launchd.js","sourceRoot":"","sources":["../../src/cli/launchd.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,CAAC,MAAM,aAAa,GAAG,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"launchd.js","sourceRoot":"","sources":["../../src/cli/launchd.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,CAAC,MAAM,aAAa,GAAG,kBAAkB,CAAC;AAChD,MAAM,CAAC,MAAM,YAAY,GAAG,iBAAiB,CAAC;AAE9C,MAAM,UAAU,SAAS,CAAC,QAAgB,aAAa;IACrD,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,GAAG,KAAK,QAAQ,CAAC,CAAC;AACtE,CAAC;AAiBD,SAAS,SAAS,CAAC,CAAS;IAC1B,OAAO,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE;QACjC,QAAQ,CAAC,EAAE,CAAC;YACV,KAAK,GAAG,CAAC,CAAC,OAAO,MAAM,CAAC;YACxB,KAAK,GAAG,CAAC,CAAC,OAAO,MAAM,CAAC;YACxB,KAAK,GAAG,CAAC,CAAC,OAAO,OAAO,CAAC;YACzB,KAAK,GAAG,CAAC,CAAC,OAAO,QAAQ,CAAC;YAC1B,KAAK,GAAG,CAAC,CAAC,OAAO,QAAQ,CAAC;YAC1B,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC;QACpB,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAgB;IACzC,OAAO;;;;;YAKG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;;;EAG9B,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;YAGnE,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC;;;;cAIvB,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;;cAEvB,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;;cAE1C,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE;;;YAGrC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;;YAErB,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;;;;;;;;;CAShC,CAAC;AACF,CAAC"}
|