@reticlehq/server 2.2.0 → 2.2.1
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/cli-parse.d.ts +19 -1
- package/dist/cli-parse.d.ts.map +1 -1
- package/dist/cli-parse.js +40 -2
- package/dist/cli-parse.js.map +1 -1
- package/dist/cli-verify.d.ts +2 -0
- package/dist/cli-verify.d.ts.map +1 -1
- package/dist/cli-verify.js +24 -2
- package/dist/cli-verify.js.map +1 -1
- package/dist/cli.d.ts +2 -3
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +94 -7
- package/dist/cli.js.map +1 -1
- package/dist/cloud/cloud-config.d.ts +37 -0
- package/dist/cloud/cloud-config.d.ts.map +1 -0
- package/dist/cloud/cloud-config.js +87 -0
- package/dist/cloud/cloud-config.js.map +1 -0
- package/dist/cloud/cloud-sync.d.ts +96 -3
- package/dist/cloud/cloud-sync.d.ts.map +1 -1
- package/dist/cloud/cloud-sync.js +131 -2
- package/dist/cloud/cloud-sync.js.map +1 -1
- package/dist/cloud-cli.d.ts +4 -0
- package/dist/cloud-cli.d.ts.map +1 -0
- package/dist/cloud-cli.js +507 -0
- package/dist/cloud-cli.js.map +1 -0
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +52 -7
- package/dist/daemon.js.map +1 -1
- package/dist/flows/flow-replay-run.d.ts.map +1 -1
- package/dist/flows/flow-replay-run.js +22 -5
- package/dist/flows/flow-replay-run.js.map +1 -1
- package/dist/flows/flow-tools.d.ts.map +1 -1
- package/dist/flows/flow-tools.js +24 -8
- package/dist/flows/flow-tools.js.map +1 -1
- package/dist/flows/server-verify.d.ts +16 -0
- package/dist/flows/server-verify.d.ts.map +1 -0
- package/dist/flows/server-verify.js +43 -0
- package/dist/flows/server-verify.js.map +1 -0
- package/dist/pool/playwright-launcher.d.ts +2 -0
- package/dist/pool/playwright-launcher.d.ts.map +1 -1
- package/dist/pool/playwright-launcher.js +13 -1
- package/dist/pool/playwright-launcher.js.map +1 -1
- package/dist/project/baselines.d.ts.map +1 -1
- package/dist/project/baselines.js +5 -3
- package/dist/project/baselines.js.map +1 -1
- package/dist/project/project-store.js +20 -8
- package/dist/project/project-store.js.map +1 -1
- package/dist/project/project-tools.d.ts.map +1 -1
- package/dist/project/project-tools.js +29 -6
- package/dist/project/project-tools.js.map +1 -1
- package/dist/runs/verification-sync.d.ts +24 -0
- package/dist/runs/verification-sync.d.ts.map +1 -0
- package/dist/runs/verification-sync.js +67 -0
- package/dist/runs/verification-sync.js.map +1 -0
- package/dist/telemetry/telemetry.d.ts +41 -0
- package/dist/telemetry/telemetry.d.ts.map +1 -0
- package/dist/telemetry/telemetry.js +220 -0
- package/dist/telemetry/telemetry.js.map +1 -0
- package/dist/tools/dynamic-tools.js +1 -1
- package/dist/tools/dynamic-tools.js.map +1 -1
- package/dist/tools/invoke-tool.d.ts.map +1 -1
- package/dist/tools/invoke-tool.js +4 -0
- package/dist/tools/invoke-tool.js.map +1 -1
- package/dist/update/update-checker.d.ts.map +1 -1
- package/dist/update/update-checker.js +26 -1
- package/dist/update/update-checker.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,507 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cloud subcommands for the `reticle` CLI — the user/agent door to Reticle Cloud, folded into the ONE
|
|
3
|
+
* tool (was the standalone `reticle-cloud` bootstrap script). These are THIN clients over the `/v1` API:
|
|
4
|
+
* the moat is the server, not these verbs, and OSS reticle already ships the cloud-sync client — this just
|
|
5
|
+
* surfaces it. Creds live under `~/.reticle`: `session.json` (human token from `reticle login`) and
|
|
6
|
+
* `credentials.json` (per-project api keys from `reticle link`). The non-secret repo binding + sync policy
|
|
7
|
+
* is `<repo>/.reticle/cloud.json`. Auth for a command = `RETICLE_CLOUD_KEY` env (agent) OR the login token.
|
|
8
|
+
*/
|
|
9
|
+
import { mkdir, writeFile, readFile } from 'node:fs/promises';
|
|
10
|
+
import { spawn } from 'node:child_process';
|
|
11
|
+
import { setTimeout as sleep } from 'node:timers/promises';
|
|
12
|
+
import { homedir } from 'node:os';
|
|
13
|
+
import { join } from 'node:path';
|
|
14
|
+
import { z } from 'zod';
|
|
15
|
+
import { createNodeFileSystem } from './project/fs-port.js';
|
|
16
|
+
import { RunStore } from './runs/run-store.js';
|
|
17
|
+
import { resolveProjectCloud } from './cloud/cloud-config.js';
|
|
18
|
+
import { syncRunToCloud, SyncOutcome } from './cloud/cloud-sync.js';
|
|
19
|
+
const DEFAULT_URL = 'http://localhost:8890';
|
|
20
|
+
const RETICLE_DIR = '.reticle';
|
|
21
|
+
const SESSION_FILE = 'session.json';
|
|
22
|
+
const CREDENTIALS_FILE = 'credentials.json';
|
|
23
|
+
const CLOUD_LINK_FILE = 'cloud.json';
|
|
24
|
+
const DEFAULT_PROJECT_ID = 'default';
|
|
25
|
+
const CLOUD_COMMANDS = new Set([
|
|
26
|
+
'login',
|
|
27
|
+
'logout',
|
|
28
|
+
'whoami',
|
|
29
|
+
'link',
|
|
30
|
+
'project',
|
|
31
|
+
'config',
|
|
32
|
+
'push',
|
|
33
|
+
'runs',
|
|
34
|
+
'regression',
|
|
35
|
+
'share',
|
|
36
|
+
]);
|
|
37
|
+
export const isCloudCommand = (cmd) => cmd !== undefined && CLOUD_COMMANDS.has(cmd);
|
|
38
|
+
const home = () => join(homedir(), RETICLE_DIR);
|
|
39
|
+
const err = (msg) => {
|
|
40
|
+
process.stderr.write(`reticle: ${msg}\n`);
|
|
41
|
+
};
|
|
42
|
+
/** A next-step nudge on stderr (humans read it; agents parse stdout JSON and ignore this). */
|
|
43
|
+
const hint = (msg) => {
|
|
44
|
+
process.stderr.write(`→ ${msg}\n`);
|
|
45
|
+
};
|
|
46
|
+
const emit = (obj) => {
|
|
47
|
+
process.stdout.write(`${JSON.stringify(obj, null, 2)}\n`);
|
|
48
|
+
};
|
|
49
|
+
/** Read + parse a JSON file, or null when missing/malformed (never throws). */
|
|
50
|
+
const readJson = async (path) => {
|
|
51
|
+
try {
|
|
52
|
+
return JSON.parse(await readFile(path, 'utf8'));
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
/** Parse `--flag value` pairs out of an argv tail. */
|
|
59
|
+
const flags = (argv) => {
|
|
60
|
+
const f = {};
|
|
61
|
+
for (let i = 0; i < argv.length; i += 1) {
|
|
62
|
+
const a = argv[i];
|
|
63
|
+
if (a !== undefined && a.startsWith('--') && i + 1 < argv.length) {
|
|
64
|
+
const v = argv[i + 1];
|
|
65
|
+
if (v !== undefined)
|
|
66
|
+
f[a.slice(2)] = v;
|
|
67
|
+
i += 1;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return f;
|
|
71
|
+
};
|
|
72
|
+
const SessionSchema = z.object({ url: z.string(), token: z.string(), orgName: z.string() });
|
|
73
|
+
const readSession = async () => {
|
|
74
|
+
const parsed = SessionSchema.safeParse(await readJson(join(home(), SESSION_FILE)));
|
|
75
|
+
return parsed.success ? parsed.data : null;
|
|
76
|
+
};
|
|
77
|
+
const baseUrl = (session) => {
|
|
78
|
+
const env = process.env['RETICLE_CLOUD_URL'];
|
|
79
|
+
return env !== undefined && env.length > 0
|
|
80
|
+
? env.replace(/\/+$/, '')
|
|
81
|
+
: (session?.url ?? DEFAULT_URL);
|
|
82
|
+
};
|
|
83
|
+
/** Bearer for a command: an explicit api key (agent) wins, else the human login token. */
|
|
84
|
+
const bearer = (session) => {
|
|
85
|
+
const key = process.env['RETICLE_CLOUD_KEY'];
|
|
86
|
+
if (key !== undefined && key.length > 0)
|
|
87
|
+
return key;
|
|
88
|
+
return session?.token ?? null;
|
|
89
|
+
};
|
|
90
|
+
/** One `/v1` call. Throws a friendly Error on a non-2xx so the command surfaces it and exits 1. */
|
|
91
|
+
const api = async (method, url, token, body) => {
|
|
92
|
+
const headers = {};
|
|
93
|
+
if (token !== null)
|
|
94
|
+
headers['authorization'] = `Bearer ${token}`;
|
|
95
|
+
if (body !== undefined)
|
|
96
|
+
headers['content-type'] = 'application/json';
|
|
97
|
+
const init = {
|
|
98
|
+
method,
|
|
99
|
+
headers,
|
|
100
|
+
};
|
|
101
|
+
if (body !== undefined)
|
|
102
|
+
init.body = JSON.stringify(body);
|
|
103
|
+
const res = await fetch(url, init);
|
|
104
|
+
const text = await res.text();
|
|
105
|
+
const json = text.length > 0 ? JSON.parse(text) : null;
|
|
106
|
+
if (!res.ok) {
|
|
107
|
+
const parsed = z.object({ error: z.object({ message: z.string() }) }).safeParse(json);
|
|
108
|
+
throw new Error(parsed.success ? parsed.data.error.message : `${res.status} ${res.statusText}`);
|
|
109
|
+
}
|
|
110
|
+
return json;
|
|
111
|
+
};
|
|
112
|
+
const LoginSchema = z.object({ token: z.string(), org: z.object({ name: z.string() }) });
|
|
113
|
+
const KeySchema = z.object({ projectId: z.string(), projectName: z.string(), key: z.string() });
|
|
114
|
+
const WhoamiSchema = z.object({ projectId: z.string(), projectName: z.string() });
|
|
115
|
+
const CreatedProjectSchema = z.object({ projectId: z.string(), name: z.string() });
|
|
116
|
+
const ProjectsListSchema = z.object({
|
|
117
|
+
projects: z.array(z.object({ projectId: z.string(), name: z.string() })),
|
|
118
|
+
});
|
|
119
|
+
/** Resolve a --project value that may be a slug id OR a display name into the canonical projectId. */
|
|
120
|
+
const resolveProjectId = async (url, token, wanted) => {
|
|
121
|
+
const { projects } = ProjectsListSchema.parse(await api('GET', `${url}/v1/projects`, token));
|
|
122
|
+
const lc = wanted.toLowerCase();
|
|
123
|
+
const match = projects.find((p) => p.projectId === wanted || p.name.toLowerCase() === lc);
|
|
124
|
+
if (match === undefined)
|
|
125
|
+
throw new Error(`no project "${wanted}" — create it with \`reticle project create "${wanted}"\``);
|
|
126
|
+
return match.projectId;
|
|
127
|
+
};
|
|
128
|
+
/**
|
|
129
|
+
* `reticle login --email <e> [--org <name>] [--code <123456>]` — sign in, cache the token under
|
|
130
|
+
* ~/.reticle.
|
|
131
|
+
*
|
|
132
|
+
* TWO STEPS, because the cloud proves you own the inbox before it hands out a session: ask for a code,
|
|
133
|
+
* then exchange it. (It used to take an email alone — which meant anyone who knew your address owned your
|
|
134
|
+
* org.) `--org` is only consulted when the account is brand new; a returning user never needs it.
|
|
135
|
+
*
|
|
136
|
+
* Without `--code` we request one and stop, telling the user to re-run with it. The one exception is a
|
|
137
|
+
* LOCAL cloud, whose dev mailer cannot actually deliver mail and so echoes the code back in its response
|
|
138
|
+
* (`devCode`) — there we complete the login in a single command rather than asking a developer to read a
|
|
139
|
+
* code out of a server log they may not even be tailing.
|
|
140
|
+
*/
|
|
141
|
+
const RequestCodeSchema = z.object({ devCode: z.string().optional() });
|
|
142
|
+
const DeviceStartSchema = z.object({
|
|
143
|
+
deviceCode: z.string(),
|
|
144
|
+
userCode: z.string(),
|
|
145
|
+
verificationUri: z.string(),
|
|
146
|
+
verificationUriComplete: z.string(),
|
|
147
|
+
interval: z.number(),
|
|
148
|
+
expiresAt: z.number(),
|
|
149
|
+
});
|
|
150
|
+
const DevicePollSchema = z.object({
|
|
151
|
+
status: z.string(),
|
|
152
|
+
token: z.string().optional(),
|
|
153
|
+
org: z.object({ name: z.string() }).optional(),
|
|
154
|
+
});
|
|
155
|
+
/** Best-effort open the approval page in the default browser; the printed URL is the headless fallback. */
|
|
156
|
+
const openBrowser = (target) => {
|
|
157
|
+
const cmd = process.platform === 'darwin' ? 'open' : process.platform === 'win32' ? 'cmd' : 'xdg-open';
|
|
158
|
+
const args = process.platform === 'win32' ? ['/c', 'start', '', target] : [target];
|
|
159
|
+
try {
|
|
160
|
+
const child = spawn(cmd, args, { stdio: 'ignore', detached: true });
|
|
161
|
+
child.on('error', () => undefined);
|
|
162
|
+
child.unref();
|
|
163
|
+
}
|
|
164
|
+
catch {
|
|
165
|
+
/* no opener available — the user opens the printed URL manually */
|
|
166
|
+
}
|
|
167
|
+
};
|
|
168
|
+
/** Persist a session token under ~/.reticle and print the next step. Shared by both login paths. */
|
|
169
|
+
const writeSession = async (url, token, orgName) => {
|
|
170
|
+
await mkdir(home(), { recursive: true });
|
|
171
|
+
await writeFile(join(home(), SESSION_FILE), `${JSON.stringify({ url, token, orgName }, null, 2)}\n`);
|
|
172
|
+
emit({ loggedIn: orgName, session: join(home(), SESSION_FILE) });
|
|
173
|
+
hint('next: `reticle link` to bind this repo to your Default project (or `reticle project create <name>` first)');
|
|
174
|
+
};
|
|
175
|
+
/**
|
|
176
|
+
* Browser device flow — the DEFAULT `reticle login` (like `gh auth login`): fetch a device + user code,
|
|
177
|
+
* open the browser to approve, then poll until the user confirms. No email to type, no code to copy back.
|
|
178
|
+
*/
|
|
179
|
+
const cmdLoginDevice = async () => {
|
|
180
|
+
const url = baseUrl(null);
|
|
181
|
+
const started = DeviceStartSchema.parse(await api('POST', `${url}/v1/auth/device/start`, null, {}));
|
|
182
|
+
hint(`Opening ${started.verificationUri} — confirm this code in the browser: ${started.userCode}`);
|
|
183
|
+
openBrowser(started.verificationUriComplete);
|
|
184
|
+
const intervalMs = Math.max(1, started.interval) * 1000;
|
|
185
|
+
for (;;) {
|
|
186
|
+
await sleep(intervalMs);
|
|
187
|
+
const poll = DevicePollSchema.parse(await api('POST', `${url}/v1/auth/device/token`, null, { deviceCode: started.deviceCode }));
|
|
188
|
+
if (poll.status === 'approved' && poll.token !== undefined && poll.org !== undefined) {
|
|
189
|
+
await writeSession(url, poll.token, poll.org.name);
|
|
190
|
+
return 0;
|
|
191
|
+
}
|
|
192
|
+
if (poll.status === 'pending') {
|
|
193
|
+
if (Date.now() > started.expiresAt) {
|
|
194
|
+
err('device login expired — run `reticle login` again');
|
|
195
|
+
return 1;
|
|
196
|
+
}
|
|
197
|
+
continue;
|
|
198
|
+
}
|
|
199
|
+
err(poll.status === 'denied'
|
|
200
|
+
? 'device login was denied in the browser'
|
|
201
|
+
: 'device login expired — run `reticle login` again');
|
|
202
|
+
return 1;
|
|
203
|
+
}
|
|
204
|
+
};
|
|
205
|
+
/**
|
|
206
|
+
* `reticle login` — browser device flow by default; `--email <e>` (or a positional email) keeps the
|
|
207
|
+
* headless two-step code path for CI/servers where opening a browser makes no sense.
|
|
208
|
+
*/
|
|
209
|
+
const cmdLogin = async (argv) => {
|
|
210
|
+
const f = flags(argv);
|
|
211
|
+
const positional = argv[0] !== undefined && !argv[0].startsWith('--') ? argv[0] : undefined;
|
|
212
|
+
const email = f['email'] ?? positional;
|
|
213
|
+
if (email === undefined)
|
|
214
|
+
return cmdLoginDevice();
|
|
215
|
+
const org = f['org'];
|
|
216
|
+
const url = baseUrl(null);
|
|
217
|
+
let code = f['code'];
|
|
218
|
+
if (code === undefined) {
|
|
219
|
+
const requested = RequestCodeSchema.parse(await api('POST', `${url}/v1/auth/request-code`, null, {
|
|
220
|
+
email,
|
|
221
|
+
...(org !== undefined ? { orgName: org } : {}),
|
|
222
|
+
}));
|
|
223
|
+
// A real cloud mails the code and never echoes it; a local one cannot mail, so it hands it back.
|
|
224
|
+
if (requested.devCode === undefined) {
|
|
225
|
+
emit({ codeSent: true, to: email });
|
|
226
|
+
hint(`check your inbox, then: \`reticle login --email ${email} --code <the 6-digit code>\``);
|
|
227
|
+
return 0;
|
|
228
|
+
}
|
|
229
|
+
code = requested.devCode;
|
|
230
|
+
}
|
|
231
|
+
const parsed = LoginSchema.parse(await api('POST', `${url}/v1/auth/login`, null, { email, code }));
|
|
232
|
+
await writeSession(url, parsed.token, parsed.org.name);
|
|
233
|
+
return 0;
|
|
234
|
+
};
|
|
235
|
+
/** `reticle logout` — forget the cached session token (per-project keys under credentials.json stay). */
|
|
236
|
+
const cmdLogout = async () => {
|
|
237
|
+
await writeFile(join(home(), SESSION_FILE), '').catch(() => undefined);
|
|
238
|
+
emit({ loggedOut: true });
|
|
239
|
+
return 0;
|
|
240
|
+
};
|
|
241
|
+
/**
|
|
242
|
+
* `reticle whoami` — the one call an agent (or a confused human) makes to know its state: who am I logged
|
|
243
|
+
* in as, and is THIS repo attached to a cloud project (and with what sync policy / verify mode)?
|
|
244
|
+
*/
|
|
245
|
+
const cmdWhoami = async () => {
|
|
246
|
+
const session = await readSession();
|
|
247
|
+
const fs = createNodeFileSystem();
|
|
248
|
+
const cloud = await resolveProjectCloud(fs, join(process.cwd(), RETICLE_DIR), homedir(), process.env);
|
|
249
|
+
emit({
|
|
250
|
+
loggedInAs: session?.orgName ?? null,
|
|
251
|
+
repo: {
|
|
252
|
+
attached: cloud.config !== null,
|
|
253
|
+
projectId: cloud.projectId,
|
|
254
|
+
url: cloud.config?.url ?? null,
|
|
255
|
+
sync: cloud.policy,
|
|
256
|
+
verify: cloud.verify,
|
|
257
|
+
},
|
|
258
|
+
});
|
|
259
|
+
if (cloud.config === null)
|
|
260
|
+
hint('this repo is not attached — run `reticle link`');
|
|
261
|
+
return 0;
|
|
262
|
+
};
|
|
263
|
+
/** `reticle project ls` / `reticle project create <name>` — key- or session-authed. */
|
|
264
|
+
const cmdProject = async (argv) => {
|
|
265
|
+
const session = await readSession();
|
|
266
|
+
const token = bearer(session);
|
|
267
|
+
const url = baseUrl(session);
|
|
268
|
+
if (token === null) {
|
|
269
|
+
err('run `reticle login` first, or set RETICLE_CLOUD_KEY');
|
|
270
|
+
return 2;
|
|
271
|
+
}
|
|
272
|
+
const sub = argv[0];
|
|
273
|
+
if (sub === 'ls') {
|
|
274
|
+
emit(await api('GET', `${url}/v1/projects`, token));
|
|
275
|
+
return 0;
|
|
276
|
+
}
|
|
277
|
+
if (sub === 'create') {
|
|
278
|
+
const name = argv.slice(1).join(' ').trim();
|
|
279
|
+
if (name.length === 0) {
|
|
280
|
+
err('usage: reticle project create <name>');
|
|
281
|
+
return 2;
|
|
282
|
+
}
|
|
283
|
+
const created = CreatedProjectSchema.parse(await api('POST', `${url}/v1/projects`, token, { name }));
|
|
284
|
+
emit(created);
|
|
285
|
+
hint(`next: \`reticle link --project ${created.projectId}\` to bind this repo`);
|
|
286
|
+
return 0;
|
|
287
|
+
}
|
|
288
|
+
if (sub === 'rename') {
|
|
289
|
+
const id = argv[1];
|
|
290
|
+
const name = argv.slice(2).join(' ').trim();
|
|
291
|
+
if (id === undefined || name.length === 0) {
|
|
292
|
+
err('usage: reticle project rename <projectId> <new name>');
|
|
293
|
+
return 2;
|
|
294
|
+
}
|
|
295
|
+
emit(await api('PATCH', `${url}/v1/projects/${encodeURIComponent(id)}`, token, { name }));
|
|
296
|
+
return 0;
|
|
297
|
+
}
|
|
298
|
+
if (sub === 'rm' || sub === 'delete') {
|
|
299
|
+
const id = argv[1];
|
|
300
|
+
if (id === undefined) {
|
|
301
|
+
err('usage: reticle project rm <projectId>');
|
|
302
|
+
return 2;
|
|
303
|
+
}
|
|
304
|
+
emit(await api('DELETE', `${url}/v1/projects/${encodeURIComponent(id)}`, token));
|
|
305
|
+
return 0;
|
|
306
|
+
}
|
|
307
|
+
err('usage: reticle project <ls|create <name>|rename <id> <name>|rm <id>>');
|
|
308
|
+
return 2;
|
|
309
|
+
};
|
|
310
|
+
/**
|
|
311
|
+
* `reticle link [--project <id>]` — bind THIS repo to a cloud project. With a login token it MINTS a
|
|
312
|
+
* project-scoped key (no pasting); with a pre-set RETICLE_CLOUD_KEY it resolves the key's project via
|
|
313
|
+
* whoami. Writes the non-secret binding to <repo>/.reticle/cloud.json and the secret key to
|
|
314
|
+
* ~/.reticle/credentials.json (keyed by projectId).
|
|
315
|
+
*/
|
|
316
|
+
const cmdLink = async (argv) => {
|
|
317
|
+
const f = flags(argv);
|
|
318
|
+
const session = await readSession();
|
|
319
|
+
const url = baseUrl(session);
|
|
320
|
+
const envKey = process.env['RETICLE_CLOUD_KEY'];
|
|
321
|
+
let projectId;
|
|
322
|
+
let projectName;
|
|
323
|
+
let key;
|
|
324
|
+
if (envKey !== undefined && envKey.length > 0) {
|
|
325
|
+
const who = WhoamiSchema.parse(await api('GET', `${url}/v1/cloud/whoami`, envKey));
|
|
326
|
+
projectId = who.projectId;
|
|
327
|
+
projectName = who.projectName;
|
|
328
|
+
key = envKey;
|
|
329
|
+
}
|
|
330
|
+
else if (session !== null) {
|
|
331
|
+
// --project accepts a slug id OR a display name; default when omitted. Resolve to the canonical id.
|
|
332
|
+
const wanted = f['project'];
|
|
333
|
+
const targetId = wanted === undefined
|
|
334
|
+
? DEFAULT_PROJECT_ID
|
|
335
|
+
: await resolveProjectId(url, session.token, wanted);
|
|
336
|
+
const minted = KeySchema.parse(await api('POST', `${url}/v1/keys`, session.token, {
|
|
337
|
+
name: 'reticle-cli',
|
|
338
|
+
projectId: targetId,
|
|
339
|
+
}));
|
|
340
|
+
projectId = minted.projectId;
|
|
341
|
+
projectName = minted.projectName;
|
|
342
|
+
key = minted.key;
|
|
343
|
+
}
|
|
344
|
+
else {
|
|
345
|
+
err('run `reticle login` first, or set RETICLE_CLOUD_KEY to link with an existing key');
|
|
346
|
+
return 2;
|
|
347
|
+
}
|
|
348
|
+
const reticleDir = join(process.cwd(), RETICLE_DIR);
|
|
349
|
+
await mkdir(reticleDir, { recursive: true });
|
|
350
|
+
const linkPath = join(reticleDir, CLOUD_LINK_FILE);
|
|
351
|
+
const prev = await readJson(linkPath);
|
|
352
|
+
const prevObj = typeof prev === 'object' && prev !== null ? prev : {};
|
|
353
|
+
const cloudJson = {
|
|
354
|
+
projectId,
|
|
355
|
+
projectName,
|
|
356
|
+
url,
|
|
357
|
+
sync: prevObj['sync'] ?? { runs: true, memory: true, flows: true },
|
|
358
|
+
verify: prevObj['verify'] ?? 'local',
|
|
359
|
+
};
|
|
360
|
+
await writeFile(linkPath, `${JSON.stringify(cloudJson, null, 2)}\n`);
|
|
361
|
+
await mkdir(home(), { recursive: true });
|
|
362
|
+
const credPath = join(home(), CREDENTIALS_FILE);
|
|
363
|
+
const creds = (await readJson(credPath)) ?? {};
|
|
364
|
+
const credObj = typeof creds === 'object' && creds !== null ? creds : {};
|
|
365
|
+
credObj[projectId] = key;
|
|
366
|
+
await writeFile(credPath, `${JSON.stringify(credObj, null, 2)}\n`);
|
|
367
|
+
emit({ linked: projectName, projectId, cloudJson: linkPath, credentials: credPath });
|
|
368
|
+
hint('linked ✓ runs auto-push on `reticle verify`; `reticle push` sends existing local runs; `reticle whoami` shows state');
|
|
369
|
+
return 0;
|
|
370
|
+
};
|
|
371
|
+
/** `reticle config [--runs on|off] [--memory on|off] [--flows on|off] [--verify local|server]`. */
|
|
372
|
+
const cmdConfig = async (argv) => {
|
|
373
|
+
const f = flags(argv);
|
|
374
|
+
const linkPath = join(process.cwd(), RETICLE_DIR, CLOUD_LINK_FILE);
|
|
375
|
+
const raw = await readJson(linkPath);
|
|
376
|
+
if (raw === null || typeof raw !== 'object') {
|
|
377
|
+
err('no .reticle/cloud.json here — run `reticle link` first');
|
|
378
|
+
return 2;
|
|
379
|
+
}
|
|
380
|
+
const cfg = raw;
|
|
381
|
+
const sync = typeof cfg['sync'] === 'object' && cfg['sync'] !== null
|
|
382
|
+
? cfg['sync']
|
|
383
|
+
: { runs: true, memory: true, flows: true };
|
|
384
|
+
const onoff = (v) => v === 'on' ? true : v === 'off' ? false : undefined;
|
|
385
|
+
for (const k of ['runs', 'memory', 'flows']) {
|
|
386
|
+
if (f[k] === undefined)
|
|
387
|
+
continue;
|
|
388
|
+
const b = onoff(f[k]);
|
|
389
|
+
if (b === undefined) {
|
|
390
|
+
err(`--${k} must be on|off`);
|
|
391
|
+
return 2;
|
|
392
|
+
}
|
|
393
|
+
sync[k] = b;
|
|
394
|
+
}
|
|
395
|
+
cfg['sync'] = sync;
|
|
396
|
+
if (f['verify'] !== undefined) {
|
|
397
|
+
if (f['verify'] !== 'local' && f['verify'] !== 'server') {
|
|
398
|
+
err('--verify must be local|server');
|
|
399
|
+
return 2;
|
|
400
|
+
}
|
|
401
|
+
cfg['verify'] = f['verify'];
|
|
402
|
+
}
|
|
403
|
+
await writeFile(linkPath, `${JSON.stringify(cfg, null, 2)}\n`);
|
|
404
|
+
emit({ updated: linkPath, sync: cfg['sync'], verify: cfg['verify'] });
|
|
405
|
+
return 0;
|
|
406
|
+
};
|
|
407
|
+
/** `reticle push` — best-effort push of local run artifacts to the linked project (honors sync policy). */
|
|
408
|
+
const cmdPush = async () => {
|
|
409
|
+
const fs = createNodeFileSystem();
|
|
410
|
+
const reticleRoot = join(process.cwd(), RETICLE_DIR);
|
|
411
|
+
const cloud = await resolveProjectCloud(fs, reticleRoot, homedir(), process.env);
|
|
412
|
+
if (cloud.config === null) {
|
|
413
|
+
err('cloud not attached here — run `reticle link` (or set RETICLE_CLOUD_URL/KEY)');
|
|
414
|
+
return 1;
|
|
415
|
+
}
|
|
416
|
+
if (!cloud.policy.runs) {
|
|
417
|
+
emit({ pushed: 0, skipped: 'sync.runs is off for this project (reticle config --runs on)' });
|
|
418
|
+
return 0;
|
|
419
|
+
}
|
|
420
|
+
const store = new RunStore(fs, reticleRoot);
|
|
421
|
+
const ids = await store.list();
|
|
422
|
+
let pushed = 0;
|
|
423
|
+
let failed = 0;
|
|
424
|
+
for (const id of ids) {
|
|
425
|
+
const read = await store.read(id);
|
|
426
|
+
if (!read.ok)
|
|
427
|
+
continue;
|
|
428
|
+
const res = await syncRunToCloud(read.run, cloud.config, (u, init) => fetch(u, init));
|
|
429
|
+
if (res.outcome === SyncOutcome.SYNCED)
|
|
430
|
+
pushed += 1;
|
|
431
|
+
else if (res.outcome === SyncOutcome.FAILED)
|
|
432
|
+
failed += 1;
|
|
433
|
+
}
|
|
434
|
+
emit({ pushed, failed, total: ids.length, project: cloud.projectId });
|
|
435
|
+
if (pushed > 0)
|
|
436
|
+
hint(`pushed ✓ see them in the dashboard Runs tab (${cloud.config.url})`);
|
|
437
|
+
return 0;
|
|
438
|
+
};
|
|
439
|
+
/** Resolve THIS repo's linked cloud (url + project-scoped key). Throws a friendly error if not attached. */
|
|
440
|
+
const repoCloud = async () => {
|
|
441
|
+
const fs = createNodeFileSystem();
|
|
442
|
+
const cloud = await resolveProjectCloud(fs, join(process.cwd(), RETICLE_DIR), homedir(), process.env);
|
|
443
|
+
if (cloud.config === null)
|
|
444
|
+
throw new Error('cloud not attached here — run `reticle link` (or set RETICLE_CLOUD_URL/KEY)');
|
|
445
|
+
return cloud.config;
|
|
446
|
+
};
|
|
447
|
+
/** `reticle runs` — the linked project's recent run artifacts (the key scopes it server-side). */
|
|
448
|
+
const cmdRuns = async () => {
|
|
449
|
+
const { url, apiKey } = await repoCloud();
|
|
450
|
+
emit(await api('GET', `${url}/v1/runs`, apiKey));
|
|
451
|
+
return 0;
|
|
452
|
+
};
|
|
453
|
+
/** `reticle regression` — the CI gate: broken flows vs before. Exit 3 if any regressed (pipeline-friendly). */
|
|
454
|
+
const cmdRegression = async () => {
|
|
455
|
+
const { url, apiKey } = await repoCloud();
|
|
456
|
+
const report = await api('GET', `${url}/v1/project/regression`, apiKey);
|
|
457
|
+
emit(report);
|
|
458
|
+
const parsed = z.object({ broken: z.array(z.unknown()) }).safeParse(report);
|
|
459
|
+
return parsed.success && parsed.data.broken.length > 0 ? 3 : 0;
|
|
460
|
+
};
|
|
461
|
+
/** `reticle share <runId>` — mint a public proof link for one run. */
|
|
462
|
+
const cmdShare = async (argv) => {
|
|
463
|
+
const runId = argv[0];
|
|
464
|
+
if (runId === undefined) {
|
|
465
|
+
err('usage: reticle share <runId>');
|
|
466
|
+
return 2;
|
|
467
|
+
}
|
|
468
|
+
const { url, apiKey } = await repoCloud();
|
|
469
|
+
emit(await api('POST', `${url}/v1/runs/${encodeURIComponent(runId)}/share`, apiKey));
|
|
470
|
+
return 0;
|
|
471
|
+
};
|
|
472
|
+
/** Dispatch a cloud subcommand. Returns the process exit code. */
|
|
473
|
+
export const runCloudCommand = async (argv) => {
|
|
474
|
+
const [cmd, ...rest] = argv;
|
|
475
|
+
try {
|
|
476
|
+
switch (cmd) {
|
|
477
|
+
case 'login':
|
|
478
|
+
return await cmdLogin(rest);
|
|
479
|
+
case 'logout':
|
|
480
|
+
return await cmdLogout();
|
|
481
|
+
case 'whoami':
|
|
482
|
+
return await cmdWhoami();
|
|
483
|
+
case 'project':
|
|
484
|
+
return await cmdProject(rest);
|
|
485
|
+
case 'link':
|
|
486
|
+
return await cmdLink(rest);
|
|
487
|
+
case 'config':
|
|
488
|
+
return await cmdConfig(rest);
|
|
489
|
+
case 'push':
|
|
490
|
+
return await cmdPush();
|
|
491
|
+
case 'runs':
|
|
492
|
+
return await cmdRuns();
|
|
493
|
+
case 'regression':
|
|
494
|
+
return await cmdRegression();
|
|
495
|
+
case 'share':
|
|
496
|
+
return await cmdShare(rest);
|
|
497
|
+
default:
|
|
498
|
+
err(`unknown cloud command '${cmd ?? ''}'`);
|
|
499
|
+
return 2;
|
|
500
|
+
}
|
|
501
|
+
}
|
|
502
|
+
catch (e) {
|
|
503
|
+
err(e instanceof Error ? e.message : String(e));
|
|
504
|
+
return 1;
|
|
505
|
+
}
|
|
506
|
+
};
|
|
507
|
+
//# sourceMappingURL=cloud-cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloud-cli.js","sourceRoot":"","sources":["../src/cloud-cli.ts"],"names":[],"mappings":"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"}
|
package/dist/daemon.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"AA+BA,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE5C;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAKnD;AAED,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAO5C;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAG3C;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,GAAG,IAAI,EACpB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,OAAO,GACb,OAAO,CAET;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,SAAc,GAAG,IAAI,CASvE;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACxE,IAAI,CAcN;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAOvD;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAoBzF;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAG/C;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,GAAG,IAAI,CAclD;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,GAAE,MAAqB,EAC3B,QAAQ,GAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAiB,GAC3C,MAAM,EAAE,CA8BV;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CACzB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,EAAE,MAAM,GACX,OAAO,
|
|
1
|
+
{"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"AA+BA,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE5C;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAKnD;AAED,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAO5C;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAG3C;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,GAAG,IAAI,EACpB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,OAAO,GACb,OAAO,CAET;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,SAAc,GAAG,IAAI,CASvE;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACxE,IAAI,CAcN;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAOvD;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAoBzF;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAG/C;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,GAAG,IAAI,CAclD;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,GAAE,MAAqB,EAC3B,QAAQ,GAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAiB,GAC3C,MAAM,EAAE,CA8BV;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CACzB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,EAAE,MAAM,GACX,OAAO,CAsET"}
|
package/dist/daemon.js
CHANGED
|
@@ -207,14 +207,59 @@ export function spawnDaemon(nodeExec, scriptPath, args, port) {
|
|
|
207
207
|
return false; // lost a concurrent reclaim race
|
|
208
208
|
}
|
|
209
209
|
}
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
210
|
+
let logFd;
|
|
211
|
+
try {
|
|
212
|
+
logFd = openSync(logPath(port), 'a');
|
|
213
|
+
}
|
|
214
|
+
catch {
|
|
215
|
+
// Log path unwritable (permissions, disk full). Clean up the lock so we don't leave a ghost.
|
|
216
|
+
closeSync(lockFd);
|
|
217
|
+
try {
|
|
218
|
+
unlinkSync(path);
|
|
219
|
+
}
|
|
220
|
+
catch {
|
|
221
|
+
// racing another reclaimer — fine
|
|
222
|
+
}
|
|
223
|
+
return false;
|
|
224
|
+
}
|
|
225
|
+
let child;
|
|
226
|
+
try {
|
|
227
|
+
child = spawn(nodeExec, [scriptPath, ...args], {
|
|
228
|
+
detached: true,
|
|
229
|
+
stdio: ['ignore', logFd, logFd],
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
catch {
|
|
233
|
+
// spawn can throw synchronously on some platforms (e.g. ENOMEM, invalid args).
|
|
234
|
+
closeSync(logFd);
|
|
235
|
+
closeSync(lockFd);
|
|
236
|
+
try {
|
|
237
|
+
unlinkSync(path);
|
|
238
|
+
}
|
|
239
|
+
catch {
|
|
240
|
+
// racing another reclaimer — fine
|
|
241
|
+
}
|
|
242
|
+
return false;
|
|
243
|
+
}
|
|
244
|
+
// The parent's copy of logFd is no longer needed — spawn duplicated it into the child.
|
|
245
|
+
closeSync(logFd);
|
|
246
|
+
// Suppress the async ENOENT/EACCES that fires when the executable is missing or unexecutable.
|
|
247
|
+
// The failure is already detected synchronously via `child.pid === undefined`; without this
|
|
248
|
+
// handler the error propagates as an uncaught exception and crashes the parent process.
|
|
249
|
+
child.on('error', () => undefined);
|
|
250
|
+
if (child.pid === undefined) {
|
|
251
|
+
// Spawn failed silently (resource exhaustion, invalid executable on some platforms). The pidfile
|
|
252
|
+
// is empty — clean it up so discovery doesn't see a ghost, and report failure honestly.
|
|
253
|
+
closeSync(lockFd);
|
|
254
|
+
try {
|
|
255
|
+
unlinkSync(path);
|
|
256
|
+
}
|
|
257
|
+
catch {
|
|
258
|
+
// racing another reclaimer — fine
|
|
259
|
+
}
|
|
260
|
+
return false;
|
|
217
261
|
}
|
|
262
|
+
writeFileSync(lockFd, String(child.pid), 'utf8');
|
|
218
263
|
closeSync(lockFd);
|
|
219
264
|
child.unref();
|
|
220
265
|
return true;
|
package/dist/daemon.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daemon.js","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"daemon.js","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"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"}
|