@somewhere-tech/cli 0.15.0 → 0.17.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/dist/commands/browser.js +194 -0
- package/dist/commands/browser.js.map +1 -0
- package/dist/commands/check.js +183 -0
- package/dist/commands/check.js.map +1 -0
- package/dist/commands/update.js +62 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/index.js +17 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/client.js +29 -10
- package/dist/lib/client.js.map +1 -1
- package/dist/lib/notify/index.js +54 -0
- package/dist/lib/notify/index.js.map +1 -0
- package/dist/lib/notify/providers/advisory.js +30 -0
- package/dist/lib/notify/providers/advisory.js.map +1 -0
- package/dist/lib/notify/providers/update.js +85 -0
- package/dist/lib/notify/providers/update.js.map +1 -0
- package/dist/lib/notify/types.js +2 -0
- package/dist/lib/notify/types.js.map +1 -0
- package/dist/swpx/render.js +65 -23
- package/dist/swpx/render.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
import { ApiClient, CliApiError } from '../lib/client.js';
|
|
2
|
+
import { getToken, loadProjectConfig } from '../lib/config.js';
|
|
3
|
+
import { dim, error, green, red, teal } from '../lib/output.js';
|
|
4
|
+
/** The browser run drives a real headless session server-side (navigate +
|
|
5
|
+
* settle + screenshot) — give it a wider budget than a normal API call. */
|
|
6
|
+
const BROWSER_TIMEOUT_MS = 90_000;
|
|
7
|
+
const looksLikeUrl = (s) => !!s && /^https?:\/\//i.test(s);
|
|
8
|
+
/**
|
|
9
|
+
* Build the POST /v1/browser request body from the positional `target` + flags.
|
|
10
|
+
*
|
|
11
|
+
* Target precedence: an explicit --url (or a positional that looks like a URL)
|
|
12
|
+
* becomes `url`; otherwise --project (or a non-URL positional, then the linked
|
|
13
|
+
* project) becomes `project_id`. The action flags compile to an ordered `steps`
|
|
14
|
+
* array (goto → wait_for → eval → screenshot). `--snapshot` is display-only
|
|
15
|
+
* (the DOM map is always returned) so it is NOT a step here.
|
|
16
|
+
*/
|
|
17
|
+
export function buildBrowserBody(target, opts, linkedProject) {
|
|
18
|
+
const body = {};
|
|
19
|
+
const url = opts.url ?? (looksLikeUrl(target) ? target : undefined);
|
|
20
|
+
const project = opts.project ?? (!looksLikeUrl(target) ? target : undefined) ?? linkedProject;
|
|
21
|
+
if (url)
|
|
22
|
+
body.url = url;
|
|
23
|
+
if (project)
|
|
24
|
+
body.project_id = project;
|
|
25
|
+
const steps = [];
|
|
26
|
+
if (opts.path)
|
|
27
|
+
steps.push({ action: 'goto', path: opts.path });
|
|
28
|
+
if (opts.wait)
|
|
29
|
+
steps.push({ action: 'wait_for', selector: opts.wait });
|
|
30
|
+
if (opts.eval)
|
|
31
|
+
steps.push({ action: 'eval', script: opts.eval });
|
|
32
|
+
if (opts.screenshot)
|
|
33
|
+
steps.push({ action: 'screenshot' });
|
|
34
|
+
if (steps.length)
|
|
35
|
+
body.steps = steps;
|
|
36
|
+
if (opts.viewport)
|
|
37
|
+
body.viewport = opts.viewport;
|
|
38
|
+
return body;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Exit non-zero when the page is UNHEALTHY: a step failed (`passed === false`),
|
|
42
|
+
* a request failed, or JS threw. Console errors alone are advisory (favicon
|
|
43
|
+
* 404s etc.) and don't fail the gate — they're still printed.
|
|
44
|
+
*/
|
|
45
|
+
export function browserExitCode(r) {
|
|
46
|
+
if (r.passed === false)
|
|
47
|
+
return 1;
|
|
48
|
+
if ((r.failed_requests?.length ?? 0) > 0)
|
|
49
|
+
return 1;
|
|
50
|
+
if ((r.page_errors?.length ?? 0) > 0)
|
|
51
|
+
return 1;
|
|
52
|
+
return 0;
|
|
53
|
+
}
|
|
54
|
+
function signalText(e) {
|
|
55
|
+
if (typeof e === 'string')
|
|
56
|
+
return e;
|
|
57
|
+
if (e && typeof e === 'object') {
|
|
58
|
+
const o = e;
|
|
59
|
+
const msg = o.message ?? o.text ?? o.error ?? JSON.stringify(o);
|
|
60
|
+
const loc = o.url ?? o.source;
|
|
61
|
+
return loc ? `${String(msg)} (${String(loc)})` : String(msg);
|
|
62
|
+
}
|
|
63
|
+
return String(e);
|
|
64
|
+
}
|
|
65
|
+
function failedRequestText(e) {
|
|
66
|
+
if (typeof e === 'string')
|
|
67
|
+
return e;
|
|
68
|
+
if (e && typeof e === 'object') {
|
|
69
|
+
const o = e;
|
|
70
|
+
const parts = [o.status ?? o.statusCode, o.method, o.url].filter((x) => x !== '' && x !== undefined && x !== null);
|
|
71
|
+
return parts.length ? parts.map(String).join(' ') : JSON.stringify(o);
|
|
72
|
+
}
|
|
73
|
+
return String(e);
|
|
74
|
+
}
|
|
75
|
+
function stringifyResult(v) {
|
|
76
|
+
if (typeof v === 'string')
|
|
77
|
+
return v;
|
|
78
|
+
try {
|
|
79
|
+
return JSON.stringify(v);
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
return String(v);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Render the combined health signal as grep-able lines (one signal per line,
|
|
87
|
+
* stable `label:` prefixes) — never the screenshot image itself, just its
|
|
88
|
+
* stored path. Returns the lines so the formatting is unit-testable.
|
|
89
|
+
*/
|
|
90
|
+
export function formatBrowserReport(r, opts = {}) {
|
|
91
|
+
const lines = [];
|
|
92
|
+
const ce = r.console_errors ?? [];
|
|
93
|
+
const pe = r.page_errors ?? [];
|
|
94
|
+
const fr = r.failed_requests ?? [];
|
|
95
|
+
const dom = r.dom_outline ?? [];
|
|
96
|
+
const verdict = r.passed === false ? red('FAIL') : green('PASS');
|
|
97
|
+
lines.push(`${verdict} ${teal(r.final_url ?? '(no url)')}`);
|
|
98
|
+
lines.push(`console_errors: ${ce.length}`);
|
|
99
|
+
lines.push(`page_errors: ${pe.length}`);
|
|
100
|
+
lines.push(`failed_requests: ${fr.length}`);
|
|
101
|
+
lines.push(`dom: ${dom.length} interactive element${dom.length === 1 ? '' : 's'}`);
|
|
102
|
+
for (const [i, s] of (r.steps ?? []).entries()) {
|
|
103
|
+
const ok = s.ok ?? s.passed;
|
|
104
|
+
const mark = ok === false ? red('✗') : green('✓');
|
|
105
|
+
const label = [s.action, s.selector ?? s.path ?? s.script].filter(Boolean).join(' ');
|
|
106
|
+
let line = `step ${i + 1} ${mark} ${label}`.trimEnd();
|
|
107
|
+
if (s.error)
|
|
108
|
+
line += ` ${dim(`— ${s.error}`)}`;
|
|
109
|
+
lines.push(line);
|
|
110
|
+
if (s.result !== undefined)
|
|
111
|
+
lines.push(` result: ${stringifyResult(s.result)}`);
|
|
112
|
+
}
|
|
113
|
+
for (const e of ce)
|
|
114
|
+
lines.push(`console_error: ${signalText(e)}`);
|
|
115
|
+
for (const e of pe)
|
|
116
|
+
lines.push(`page_error: ${signalText(e)}`);
|
|
117
|
+
for (const e of fr)
|
|
118
|
+
lines.push(`failed_request: ${failedRequestText(e)}`);
|
|
119
|
+
for (const shot of r.screenshots ?? []) {
|
|
120
|
+
const p = typeof shot === 'string' ? shot : shot.path ?? shot.url;
|
|
121
|
+
if (p)
|
|
122
|
+
lines.push(`screenshot: ${p}`);
|
|
123
|
+
}
|
|
124
|
+
// Full interactive-element map only on demand; the count above is the default.
|
|
125
|
+
if (opts.snapshot) {
|
|
126
|
+
for (const el of dom) {
|
|
127
|
+
const handle = el.testid ? `[data-testid=${el.testid}]` : el.selector ?? el.tag ?? '?';
|
|
128
|
+
const text = el.text ? ` "${el.text}"` : '';
|
|
129
|
+
lines.push(`dom: ${el.tag ?? '?'} ${handle}${text}`);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return lines;
|
|
133
|
+
}
|
|
134
|
+
export function registerBrowser(program) {
|
|
135
|
+
program
|
|
136
|
+
.command('browser [target]')
|
|
137
|
+
.description('Drive the agent-native browser against a deployed app (or any public URL) and print the ' +
|
|
138
|
+
'combined HEALTH SIGNAL — console errors, failed requests, JS page errors, and the ' +
|
|
139
|
+
'interactive-element (DOM) map — as grep-able text, not a dumped image. ' +
|
|
140
|
+
'`target` is a URL (https://…) or a project ref; defaults to the linked project. ' +
|
|
141
|
+
'Add steps with --path / --wait / --eval / --screenshot. ' +
|
|
142
|
+
'Exits non-zero when the page is unhealthy (a step failed, a request failed, or JS threw).')
|
|
143
|
+
.option('--project <ref>', 'Project to open (UUID, slug, or subdomain). Defaults to the linked project.')
|
|
144
|
+
.option('--url <url>', "Explicit URL to open — any public page, or a path on --project's origin.")
|
|
145
|
+
.option('--path <path>', 'Navigate to this path first (e.g. /login) before the other steps.')
|
|
146
|
+
.option('--wait <selector>', 'Wait for a CSS selector to appear before capturing the signal.')
|
|
147
|
+
.option('--eval <js>', 'Evaluate a JS expression in the page and print its result.')
|
|
148
|
+
.option('--screenshot', 'Capture a screenshot and print its stored path (requires a project).')
|
|
149
|
+
.option('--snapshot', 'Print the full interactive-element / DOM map, not just the count.')
|
|
150
|
+
.option('--viewport <size>', 'desktop (default) or mobile.')
|
|
151
|
+
.option('--json', 'Print the raw browser response envelope as JSON.')
|
|
152
|
+
.action(async (target, opts) => {
|
|
153
|
+
if (opts.viewport && opts.viewport !== 'desktop' && opts.viewport !== 'mobile') {
|
|
154
|
+
error(`--viewport must be "desktop" or "mobile" (got "${opts.viewport}")`);
|
|
155
|
+
process.exit(1);
|
|
156
|
+
}
|
|
157
|
+
const client = new ApiClient(getToken());
|
|
158
|
+
const linked = loadProjectConfig()?.project_id;
|
|
159
|
+
const body = buildBrowserBody(target, opts, linked);
|
|
160
|
+
if (!body.url && !body.project_id) {
|
|
161
|
+
error('Nothing to open. Pass a URL or --project, or run from a linked project directory.');
|
|
162
|
+
process.exit(1);
|
|
163
|
+
}
|
|
164
|
+
// The endpoint can only store a screenshot on a project you own.
|
|
165
|
+
if (opts.screenshot && !body.project_id) {
|
|
166
|
+
error('--screenshot needs a project to store the image — pass --project (or a project URL you own).');
|
|
167
|
+
process.exit(1);
|
|
168
|
+
}
|
|
169
|
+
let r;
|
|
170
|
+
try {
|
|
171
|
+
r = await client.call('POST', '/browser', body, undefined, {
|
|
172
|
+
timeoutMs: BROWSER_TIMEOUT_MS,
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
catch (err) {
|
|
176
|
+
if (err instanceof CliApiError) {
|
|
177
|
+
error(`${err.message} ${dim(`[${err.code}${err.statusCode ? `, HTTP ${err.statusCode}` : ''}]`)}`);
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
error(err instanceof Error ? err.message : String(err));
|
|
181
|
+
}
|
|
182
|
+
process.exit(1);
|
|
183
|
+
}
|
|
184
|
+
if (opts.json) {
|
|
185
|
+
console.log(JSON.stringify(r, null, 2));
|
|
186
|
+
process.exit(browserExitCode(r));
|
|
187
|
+
}
|
|
188
|
+
for (const line of formatBrowserReport(r, { snapshot: opts.snapshot })) {
|
|
189
|
+
console.log(line);
|
|
190
|
+
}
|
|
191
|
+
process.exit(browserExitCode(r));
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
//# sourceMappingURL=browser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/commands/browser.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAEhE;4EAC4E;AAC5E,MAAM,kBAAkB,GAAG,MAAM,CAAC;AA+ClC,MAAM,YAAY,GAAG,CAAC,CAAU,EAAW,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAE7E;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAC9B,MAA0B,EAC1B,IAAoB,EACpB,aAAsB;IAEtB,MAAM,IAAI,GAA4B,EAAE,CAAC;IAEzC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACpE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,aAAa,CAAC;IAC9F,IAAI,GAAG;QAAE,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACxB,IAAI,OAAO;QAAE,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC;IAEvC,MAAM,KAAK,GAAmC,EAAE,CAAC;IACjD,IAAI,IAAI,CAAC,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAC/D,IAAI,IAAI,CAAC,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACvE,IAAI,IAAI,CAAC,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACjE,IAAI,IAAI,CAAC,UAAU;QAAE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;IAC1D,IAAI,KAAK,CAAC,MAAM;QAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IAErC,IAAI,IAAI,CAAC,QAAQ;QAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IACjD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,CAAgB;IAC9C,IAAI,CAAC,CAAC,MAAM,KAAK,KAAK;QAAE,OAAO,CAAC,CAAC;IACjC,IAAI,CAAC,CAAC,CAAC,eAAe,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;QAAE,OAAO,CAAC,CAAC;IACnD,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;QAAE,OAAO,CAAC,CAAC;IAC/C,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,UAAU,CAAC,CAAU;IAC5B,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,CAAC,CAAC;IACpC,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC/B,MAAM,CAAC,GAAG,CAA4B,CAAC;QACvC,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAChE,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,MAAM,CAAC;QAC9B,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;AACnB,CAAC;AAED,SAAS,iBAAiB,CAAC,CAAU;IACnC,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,CAAC,CAAC;IACpC,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC/B,MAAM,CAAC,GAAG,CAA4B,CAAC;QACvC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAC9D,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,CACjD,CAAC;QACF,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;AACnB,CAAC;AAED,SAAS,eAAe,CAAC,CAAU;IACjC,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,CAAC,CAAC;IACpC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CACjC,CAAgB,EAChB,OAA+B,EAAE;IAEjC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,EAAE,GAAG,CAAC,CAAC,cAAc,IAAI,EAAE,CAAC;IAClC,MAAM,EAAE,GAAG,CAAC,CAAC,WAAW,IAAI,EAAE,CAAC;IAC/B,MAAM,EAAE,GAAG,CAAC,CAAC,eAAe,IAAI,EAAE,CAAC;IACnC,MAAM,GAAG,GAAG,CAAC,CAAC,WAAW,IAAI,EAAE,CAAC;IAEhC,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACjE,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;IAC5D,KAAK,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3C,KAAK,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;IACxC,KAAK,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5C,KAAK,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,MAAM,uBAAuB,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAEnF,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;QAC/C,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC;QAC5B,MAAM,IAAI,GAAG,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAClD,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrF,IAAI,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,KAAK,EAAE,CAAC,OAAO,EAAE,CAAC;QACtD,IAAI,CAAC,CAAC,KAAK;YAAE,IAAI,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC;QAC/C,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjB,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS;YAAE,KAAK,CAAC,IAAI,CAAC,aAAa,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACnF,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,EAAE;QAAE,KAAK,CAAC,IAAI,CAAC,kBAAkB,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAClE,KAAK,MAAM,CAAC,IAAI,EAAE;QAAE,KAAK,CAAC,IAAI,CAAC,eAAe,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC/D,KAAK,MAAM,CAAC,IAAI,EAAE;QAAE,KAAK,CAAC,IAAI,CAAC,mBAAmB,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAE1E,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,WAAW,IAAI,EAAE,EAAE,CAAC;QACvC,MAAM,CAAC,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC;QAClE,IAAI,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;IACxC,CAAC;IAED,+EAA+E;IAC/E,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;YACrB,MAAM,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC;YACvF,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5C,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI,MAAM,GAAG,IAAI,EAAE,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAgB;IAC9C,OAAO;SACJ,OAAO,CAAC,kBAAkB,CAAC;SAC3B,WAAW,CACV,0FAA0F;QACxF,oFAAoF;QACpF,yEAAyE;QACzE,kFAAkF;QAClF,0DAA0D;QAC1D,2FAA2F,CAC9F;SACA,MAAM,CACL,iBAAiB,EACjB,6EAA6E,CAC9E;SACA,MAAM,CACL,aAAa,EACb,0EAA0E,CAC3E;SACA,MAAM,CAAC,eAAe,EAAE,mEAAmE,CAAC;SAC5F,MAAM,CAAC,mBAAmB,EAAE,gEAAgE,CAAC;SAC7F,MAAM,CAAC,aAAa,EAAE,4DAA4D,CAAC;SACnF,MAAM,CAAC,cAAc,EAAE,sEAAsE,CAAC;SAC9F,MAAM,CAAC,YAAY,EAAE,mEAAmE,CAAC;SACzF,MAAM,CAAC,mBAAmB,EAAE,8BAA8B,CAAC;SAC3D,MAAM,CAAC,QAAQ,EAAE,kDAAkD,CAAC;SACpE,MAAM,CAAC,KAAK,EAAE,MAA0B,EAAE,IAAoB,EAAE,EAAE;QACjE,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC/E,KAAK,CAAC,kDAAkD,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC;YAC3E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,iBAAiB,EAAE,EAAE,UAAU,CAAC;QAC/C,MAAM,IAAI,GAAG,gBAAgB,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAEpD,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YAClC,KAAK,CACH,mFAAmF,CACpF,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,iEAAiE;QACjE,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACxC,KAAK,CAAC,8FAA8F,CAAC,CAAC;YACtG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,CAAgB,CAAC;QACrB,IAAI,CAAC;YACH,CAAC,GAAG,MAAM,MAAM,CAAC,IAAI,CAAgB,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE;gBACxE,SAAS,EAAE,kBAAkB;aAC9B,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,WAAW,EAAE,CAAC;gBAC/B,KAAK,CACH,GAAG,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAC5F,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1D,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACxC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;QACnC,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,mBAAmB,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC;YACvE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import { resolve } from 'node:path';
|
|
2
|
+
import ora from '../lib/spinner.js';
|
|
3
|
+
import { ApiClient, CliApiError, LONG_CALL_TIMEOUT_MS } from '../lib/client.js';
|
|
4
|
+
import { isBuildError, renderBuildError } from '../lib/build-errors.js';
|
|
5
|
+
import { getToken, loadProjectConfig } from '../lib/config.js';
|
|
6
|
+
import { collectFiles, formatBytes } from '../lib/files.js';
|
|
7
|
+
import { bold, dim, error, green, info, red, success, warn, yellow } from '../lib/output.js';
|
|
8
|
+
/** The dry-compile body: the same collected source tree `somewhere deploy`
|
|
9
|
+
* uploads, so the server compiles exactly what would deploy. */
|
|
10
|
+
export function buildCheckBody(collected, projectId) {
|
|
11
|
+
const body = { project_id: projectId, files: collected.files };
|
|
12
|
+
if (Object.keys(collected.functions).length > 0)
|
|
13
|
+
body.functions = collected.functions;
|
|
14
|
+
if (Object.keys(collected.binaryFiles).length > 0)
|
|
15
|
+
body.binary_files = collected.binaryFiles;
|
|
16
|
+
return body;
|
|
17
|
+
}
|
|
18
|
+
/** The compile-then-run body: the dry-compile tree plus the synthetic request
|
|
19
|
+
* to drive one handler against. */
|
|
20
|
+
export function buildCheckRunBody(collected, projectId, target) {
|
|
21
|
+
return { ...buildCheckBody(collected, projectId), target };
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Map an errors-as-data check response to a synthetic BUILD_ERROR so it renders
|
|
25
|
+
* through the exact same code-frame path as a /deploy failure (we have the
|
|
26
|
+
* local source on disk → real frames). Returns null when the response is clean.
|
|
27
|
+
*/
|
|
28
|
+
export function checkErrorsToCliError(r) {
|
|
29
|
+
if (!r || r.ok !== false || !Array.isArray(r.errors) || r.errors.length === 0)
|
|
30
|
+
return null;
|
|
31
|
+
return new CliApiError('BUILD_ERROR', `${r.errors.length} build error${r.errors.length === 1 ? '' : 's'} from the server-side compile`, 422, { errors: r.errors, build_log: r.build_log });
|
|
32
|
+
}
|
|
33
|
+
/** Format the --run handler response as lines (mirrors `somewhere run`). */
|
|
34
|
+
export function formatCheckRunResult(r) {
|
|
35
|
+
const lines = [];
|
|
36
|
+
const logs = r.logs ?? [];
|
|
37
|
+
if (logs.length) {
|
|
38
|
+
lines.push(bold('Logs'));
|
|
39
|
+
for (const entry of logs) {
|
|
40
|
+
if (typeof entry === 'string') {
|
|
41
|
+
lines.push(` ${dim(entry)}`);
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
const level = entry.level ? dim(`[${entry.level}] `) : '';
|
|
45
|
+
lines.push(` ${level}${entry.message ?? ''}`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
lines.push('');
|
|
49
|
+
}
|
|
50
|
+
if (r.error) {
|
|
51
|
+
const e = r.error;
|
|
52
|
+
const msg = typeof e === 'string' ? e : `${e.name ? `${e.name}: ` : ''}${e.message ?? ''}`;
|
|
53
|
+
lines.push(red(`Handler threw: ${msg}`));
|
|
54
|
+
if (typeof e !== 'string' && e.stack)
|
|
55
|
+
lines.push(dim(e.stack));
|
|
56
|
+
return lines;
|
|
57
|
+
}
|
|
58
|
+
const status = r.status ?? 0;
|
|
59
|
+
const color = status >= 500 ? red : status >= 400 ? yellow : green;
|
|
60
|
+
lines.push(`${color(String(status || '—'))} ${dim(r.duration_ms !== undefined ? `${r.duration_ms}ms` : '')}`.trimEnd());
|
|
61
|
+
try {
|
|
62
|
+
lines.push(JSON.stringify(r.body, null, 2));
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
lines.push(String(r.body));
|
|
66
|
+
}
|
|
67
|
+
return lines;
|
|
68
|
+
}
|
|
69
|
+
export function registerCheck(program) {
|
|
70
|
+
program
|
|
71
|
+
.command('deploy-check [dir]')
|
|
72
|
+
.description('SERVER-SIDE pre-deploy oracle: upload the current source and have the REAL platform ' +
|
|
73
|
+
'compiler dry-compile it (no deploy, no promote, nothing goes live) — the truest ' +
|
|
74
|
+
'"will this deploy succeed?" gate. Prints structured file:line errors. ' +
|
|
75
|
+
'With --run <path> it compiles AND invokes one handler against inputs. ' +
|
|
76
|
+
'Distinct from the LOCAL checks: `somewhere typecheck` runs `tsc --noEmit` on a pulled ' +
|
|
77
|
+
'tree on your machine, and `somewhere exec` / `run` execute against your real bindings ' +
|
|
78
|
+
'locally — `deploy-check` runs the actual server-side bundler that `deploy` uses, so it ' +
|
|
79
|
+
'catches what only the platform catches (cross-import resolution, bundling, bundled-deploy ' +
|
|
80
|
+
'rejects). (Unrelated to `somewhere check`, which is the swpx npm-package verdict.)')
|
|
81
|
+
.option('--project <ref>', 'Project to check against (defaults to the linked project).')
|
|
82
|
+
.option('--run <path>', 'Compile, then invoke the handler at this URL path against inputs (e.g. --run /api/hello).')
|
|
83
|
+
.option('-X, --method <method>', 'HTTP method for --run (default GET).')
|
|
84
|
+
.option('-d, --body <json>', 'Request body for --run.')
|
|
85
|
+
.option('-q, --query <querystring>', 'Query string for --run (a=1&b=2).')
|
|
86
|
+
.option('--json', 'Print the raw check response envelope as JSON.')
|
|
87
|
+
.action(async (dirArg, opts) => {
|
|
88
|
+
const targetDir = resolve(process.cwd(), dirArg ?? '.');
|
|
89
|
+
let projectId = opts.project;
|
|
90
|
+
if (!projectId) {
|
|
91
|
+
const config = loadProjectConfig(targetDir) ?? loadProjectConfig();
|
|
92
|
+
if (!config) {
|
|
93
|
+
error('No project linked. Run `somewhere init` or pass --project <ref>.');
|
|
94
|
+
process.exit(1);
|
|
95
|
+
}
|
|
96
|
+
projectId = config.project_id;
|
|
97
|
+
}
|
|
98
|
+
const client = new ApiClient(getToken());
|
|
99
|
+
const collected = collectFiles(targetDir);
|
|
100
|
+
const totalFiles = Object.keys(collected.files).length +
|
|
101
|
+
Object.keys(collected.functions).length +
|
|
102
|
+
Object.keys(collected.binaryFiles).length;
|
|
103
|
+
const isRun = opts.run !== undefined;
|
|
104
|
+
const spinner = ora(isRun
|
|
105
|
+
? `Compiling ${totalFiles} files + running ${opts.run} (server-side)...`
|
|
106
|
+
: `Dry-compiling ${totalFiles} files on the platform...`).start();
|
|
107
|
+
try {
|
|
108
|
+
if (isRun) {
|
|
109
|
+
const target = {
|
|
110
|
+
path: opts.run.startsWith('/') ? opts.run : `/${opts.run}`,
|
|
111
|
+
method: (opts.method ?? 'GET').toUpperCase(),
|
|
112
|
+
};
|
|
113
|
+
if (opts.body !== undefined)
|
|
114
|
+
target.body = opts.body;
|
|
115
|
+
if (opts.query !== undefined)
|
|
116
|
+
target.query = opts.query;
|
|
117
|
+
const r = await client.call('POST', '/deploy/check/run', buildCheckRunBody(collected, projectId, target), undefined, { timeoutMs: LONG_CALL_TIMEOUT_MS });
|
|
118
|
+
spinner.stop();
|
|
119
|
+
if (opts.json) {
|
|
120
|
+
console.log(JSON.stringify(r, null, 2));
|
|
121
|
+
process.exit(r.ok === false || r.error ? 1 : 0);
|
|
122
|
+
}
|
|
123
|
+
// Compile failed before the handler ran — render the build errors.
|
|
124
|
+
const compileErr = checkErrorsToCliError(r);
|
|
125
|
+
if (compileErr) {
|
|
126
|
+
renderBuildError(compileErr, targetDir);
|
|
127
|
+
process.exit(1);
|
|
128
|
+
}
|
|
129
|
+
console.log(`${bold(opts.method?.toUpperCase() ?? 'GET')} ${target.path}`);
|
|
130
|
+
for (const line of formatCheckRunResult(r))
|
|
131
|
+
console.log(line);
|
|
132
|
+
process.exit(r.error || (r.status ?? 0) >= 500 ? 1 : 0);
|
|
133
|
+
}
|
|
134
|
+
const r = await client.call('POST', '/deploy/check', buildCheckBody(collected, projectId), undefined, { timeoutMs: LONG_CALL_TIMEOUT_MS });
|
|
135
|
+
spinner.stop();
|
|
136
|
+
if (opts.json) {
|
|
137
|
+
console.log(JSON.stringify(r, null, 2));
|
|
138
|
+
process.exit(r.ok === false ? 1 : 0);
|
|
139
|
+
}
|
|
140
|
+
const compileErr = checkErrorsToCliError(r);
|
|
141
|
+
if (compileErr) {
|
|
142
|
+
renderBuildError(compileErr, targetDir);
|
|
143
|
+
process.exit(1);
|
|
144
|
+
}
|
|
145
|
+
// Clean. Pass through any advisory warnings + the build log.
|
|
146
|
+
if (r.warnings && r.warnings.length > 0) {
|
|
147
|
+
for (const w of r.warnings)
|
|
148
|
+
warn(w);
|
|
149
|
+
}
|
|
150
|
+
if (Array.isArray(r.build_log) && r.build_log.length > 0) {
|
|
151
|
+
console.log(`\n${dim('Build')}`);
|
|
152
|
+
for (const line of r.build_log)
|
|
153
|
+
info(dim(line));
|
|
154
|
+
console.log('');
|
|
155
|
+
}
|
|
156
|
+
success(`Server-side check clean (real platform compiler) — safe to deploy. ${dim(`(${totalFiles} files, ${formatBytes(sourceBytes(collected))})`)}`);
|
|
157
|
+
}
|
|
158
|
+
catch (err) {
|
|
159
|
+
spinner.fail(isRun ? 'Check run failed' : 'Check failed');
|
|
160
|
+
// The server may answer a compile failure with a thrown BUILD_ERROR
|
|
161
|
+
// (same payload as /deploy) instead of errors-as-data — render it the
|
|
162
|
+
// same way, with a local code frame.
|
|
163
|
+
if (isBuildError(err) && renderBuildError(err, targetDir)) {
|
|
164
|
+
process.exit(1);
|
|
165
|
+
}
|
|
166
|
+
if (err instanceof CliApiError) {
|
|
167
|
+
error(`${err.message} ${dim(err.statusCode ? `[${err.code}, HTTP ${err.statusCode}]` : `[${err.code}]`)}`);
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
error(err instanceof Error ? err.message : String(err));
|
|
171
|
+
}
|
|
172
|
+
process.exit(1);
|
|
173
|
+
}
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
function sourceBytes(c) {
|
|
177
|
+
const text = Object.values(c.files)
|
|
178
|
+
.concat(Object.values(c.functions))
|
|
179
|
+
.reduce((sum, s) => sum + s.length, 0);
|
|
180
|
+
const binary = Object.values(c.binaryFiles).reduce((sum, b64) => sum + Math.floor((b64.length * 3) / 4), 0);
|
|
181
|
+
return text + binary;
|
|
182
|
+
}
|
|
183
|
+
//# sourceMappingURL=check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
2
|
+
import { dirname, join } from 'node:path';
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
4
|
+
import { execSync } from 'node:child_process';
|
|
5
|
+
import { dim, error, info, success, teal } from '../lib/output.js';
|
|
6
|
+
const PACKAGE = '@somewhere-tech/cli';
|
|
7
|
+
/** Read the installed CLI's own version from its package.json (dist/commands/ →
|
|
8
|
+
* package root is two levels up). */
|
|
9
|
+
function currentVersion() {
|
|
10
|
+
try {
|
|
11
|
+
const pkg = JSON.parse(readFileSync(join(dirname(fileURLToPath(import.meta.url)), '..', '..', 'package.json'), 'utf8'));
|
|
12
|
+
return pkg.version;
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
return '0.0.0';
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export function registerUpdate(program) {
|
|
19
|
+
program
|
|
20
|
+
.command('update')
|
|
21
|
+
.description('Update the somewhere CLI to the latest published version (via npm).')
|
|
22
|
+
.option('--check', 'Only report whether an update is available; do not install.')
|
|
23
|
+
.action((opts) => {
|
|
24
|
+
const current = currentVersion();
|
|
25
|
+
let latest;
|
|
26
|
+
try {
|
|
27
|
+
latest = execSync(`npm view ${PACKAGE} version`, {
|
|
28
|
+
encoding: 'utf8',
|
|
29
|
+
stdio: ['ignore', 'pipe', 'ignore'],
|
|
30
|
+
}).trim();
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
error('Could not reach npm to check the latest version. Check your connection and try again.');
|
|
34
|
+
process.exit(1);
|
|
35
|
+
}
|
|
36
|
+
if (!latest) {
|
|
37
|
+
error('Could not determine the latest version from npm.');
|
|
38
|
+
process.exit(1);
|
|
39
|
+
}
|
|
40
|
+
if (latest === current) {
|
|
41
|
+
success(`You're on the latest version (${teal(current)}).`);
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
info(`Update available: ${dim(current)} → ${teal(latest)}`);
|
|
45
|
+
if (opts.check) {
|
|
46
|
+
info(`Run ${teal('somewhere update')} to install it.`);
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
info(`Updating ${PACKAGE} …`);
|
|
50
|
+
try {
|
|
51
|
+
// stdio inherited so npm's own progress shows; -g may need elevated perms,
|
|
52
|
+
// in which case npm's EACCES message is surfaced and we point at the manual fix.
|
|
53
|
+
execSync(`npm install -g ${PACKAGE}@latest`, { stdio: 'inherit' });
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
error(`Update failed. Try it manually: npm install -g ${PACKAGE}@latest`);
|
|
57
|
+
process.exit(1);
|
|
58
|
+
}
|
|
59
|
+
success(`Updated to ${latest}. Run ${teal('somewhere --version')} to confirm.`);
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAEnE,MAAM,OAAO,GAAG,qBAAqB,CAAC;AAEtC;sCACsC;AACtC,SAAS,cAAc;IACrB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CACpB,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CACzE,CAAC;QACzB,OAAO,GAAG,CAAC,OAAO,CAAC;IACrB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAgB;IAC7C,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,qEAAqE,CAAC;SAClF,MAAM,CAAC,SAAS,EAAE,6DAA6D,CAAC;SAChF,MAAM,CAAC,CAAC,IAAyB,EAAE,EAAE;QACpC,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;QAEjC,IAAI,MAAc,CAAC;QACnB,IAAI,CAAC;YACH,MAAM,GAAG,QAAQ,CAAC,YAAY,OAAO,UAAU,EAAE;gBAC/C,QAAQ,EAAE,MAAM;gBAChB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;aACpC,CAAC,CAAC,IAAI,EAAE,CAAC;QACZ,CAAC;QAAC,MAAM,CAAC;YACP,KAAK,CAAC,uFAAuF,CAAC,CAAC;YAC/F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,KAAK,CAAC,kDAAkD,CAAC,CAAC;YAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;YACvB,OAAO,CAAC,iCAAiC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC5D,OAAO;QACT,CAAC;QAED,IAAI,CAAC,qBAAqB,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC5D,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,OAAO,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,CAAC;YACvD,OAAO;QACT,CAAC;QAED,IAAI,CAAC,YAAY,OAAO,IAAI,CAAC,CAAC;QAC9B,IAAI,CAAC;YACH,2EAA2E;YAC3E,iFAAiF;YACjF,QAAQ,CAAC,kBAAkB,OAAO,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QACrE,CAAC;QAAC,MAAM,CAAC;YACP,KAAK,CAAC,mDAAmD,OAAO,SAAS,CAAC,CAAC;YAC3E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,CAAC,cAAc,MAAM,SAAS,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,CAAC;IAClF,CAAC,CAAC,CAAC;AACP,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -19,9 +19,13 @@ import { registerStatus } from './commands/status.js';
|
|
|
19
19
|
import { registerOpen } from './commands/open.js';
|
|
20
20
|
import { registerDev } from './commands/dev.js';
|
|
21
21
|
import { registerExec } from './commands/exec.js';
|
|
22
|
+
import { registerBrowser } from './commands/browser.js';
|
|
23
|
+
import { registerCheck } from './commands/check.js';
|
|
22
24
|
import { registerApi } from './commands/api.js';
|
|
23
25
|
import { registerMcp } from './commands/mcp.js';
|
|
24
26
|
import { registerSwpx } from './commands/swpx.js';
|
|
27
|
+
import { registerUpdate } from './commands/update.js';
|
|
28
|
+
import { collectNotices } from './lib/notify/index.js';
|
|
25
29
|
const pkg = JSON.parse(readFileSync(join(dirname(fileURLToPath(import.meta.url)), '..', 'package.json'), 'utf8'));
|
|
26
30
|
const program = new Command()
|
|
27
31
|
.name('somewhere')
|
|
@@ -48,8 +52,20 @@ registerStatus(program);
|
|
|
48
52
|
registerOpen(program);
|
|
49
53
|
registerDev(program);
|
|
50
54
|
registerExec(program);
|
|
55
|
+
registerBrowser(program);
|
|
56
|
+
registerCheck(program);
|
|
51
57
|
registerApi(program);
|
|
52
58
|
registerMcp(program);
|
|
53
59
|
registerSwpx(program);
|
|
54
|
-
program
|
|
60
|
+
registerUpdate(program);
|
|
61
|
+
// User-notification pipeline (update-available, advisories, announcements…).
|
|
62
|
+
// Centrally gated to interactive, non-CI, non-pass-through commands and emitted to
|
|
63
|
+
// STDERR as a parting line AFTER the command — never stdout, agent, or swpx/swpm
|
|
64
|
+
// safety output. Fail-open: collectNotices swallows all errors.
|
|
65
|
+
void (async () => {
|
|
66
|
+
const notices = await collectNotices(process.argv);
|
|
67
|
+
if (notices.length)
|
|
68
|
+
process.on('exit', () => process.stderr.write('\n' + notices.join('\n') + '\n'));
|
|
69
|
+
program.parse();
|
|
70
|
+
})();
|
|
55
71
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/client.js
CHANGED
|
@@ -37,8 +37,9 @@ export class ApiClient {
|
|
|
37
37
|
* cli-pair access key timed out — and with a stored refresh token, this
|
|
38
38
|
* swaps in a fresh access key via POST /v1/keys/cli-pair/refresh and
|
|
39
39
|
* retries ONCE, so a long-lived agent session never logs itself out
|
|
40
|
-
* (tsk_3642f3c4). Without a refresh token (older login flows)
|
|
41
|
-
*
|
|
40
|
+
* (tsk_3642f3c4). Without a refresh token (older login flows) refreshAccessKey
|
|
41
|
+
* throws a clear SESSION_EXPIRED "run `somewhere login`" error rather than
|
|
42
|
+
* letting the opaque 401 propagate (tsk_8ba2113d). */
|
|
42
43
|
async call(method, path, body, query, opts) {
|
|
43
44
|
try {
|
|
44
45
|
return await this.request(method, path, body, query, opts);
|
|
@@ -47,24 +48,42 @@ export class ApiClient {
|
|
|
47
48
|
if (!(err instanceof CliApiError) || err.code !== 'API_KEY_EXPIRED')
|
|
48
49
|
throw err;
|
|
49
50
|
const refreshed = await this.refreshAccessKey();
|
|
51
|
+
// refreshAccessKey now THROWS a clear re-login error when it can't refresh
|
|
52
|
+
// (no refresh token, or a dead one); a false return is only the rare
|
|
53
|
+
// malformed-refresh-response case, where the original expired-key error is
|
|
54
|
+
// the most honest thing to surface.
|
|
50
55
|
if (!refreshed)
|
|
51
|
-
throw err;
|
|
56
|
+
throw err;
|
|
52
57
|
// Retry exactly once with the new key. A second API_KEY_EXPIRED here is
|
|
53
58
|
// genuine — let it propagate rather than loop.
|
|
54
59
|
return await this.request(method, path, body, query, opts);
|
|
55
60
|
}
|
|
56
61
|
}
|
|
57
62
|
/** Exchange the stored cli-pair refresh token for a fresh access key and
|
|
58
|
-
* persist both. Returns true if the access key was swapped in.
|
|
59
|
-
*
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
+
* persist both. Returns true if the access key was swapped in. Throws a
|
|
64
|
+
* clear SESSION_EXPIRED CliApiError ("run `somewhere login`") when it can't
|
|
65
|
+
* refresh — either there's no refresh token (old-format config) or the
|
|
66
|
+
* refresh token itself is expired/revoked — so the user is told the cause +
|
|
67
|
+
* the fix instead of seeing a bare expired-key 401. Returns false only for a
|
|
68
|
+
* malformed refresh response, where the caller surfaces the original
|
|
69
|
+
* API_KEY_EXPIRED. */
|
|
63
70
|
async refreshAccessKey() {
|
|
64
71
|
const config = loadConfig();
|
|
65
72
|
const refreshToken = config?.refresh_token;
|
|
66
|
-
if (!refreshToken)
|
|
67
|
-
|
|
73
|
+
if (!refreshToken) {
|
|
74
|
+
// We only get here AFTER an API_KEY_EXPIRED — so the access key is dead and
|
|
75
|
+
// there's no refresh token to renew it (an old-format config written before
|
|
76
|
+
// the refresh flow: { token, user }, no refresh_token). Returning false here
|
|
77
|
+
// used to let the bare API_KEY_EXPIRED 401 propagate, which down the
|
|
78
|
+
// stdio-MCP path reached the agent as an opaque "(HTTP 401)" with no hint
|
|
79
|
+
// that `somewhere login` fixes it for good — so the user re-paired every
|
|
80
|
+
// ~24h without knowing why. Surface the cause + the one-line fix instead
|
|
81
|
+
// (tsk_8ba2113d). Same SESSION_EXPIRED contract as the dead-refresh-token
|
|
82
|
+
// case below: both mean "re-login required".
|
|
83
|
+
throw new CliApiError('SESSION_EXPIRED', 'Your somewhere session expired and there is no refresh token saved ' +
|
|
84
|
+
'(old login format). Run `somewhere login` to sign in again — that ' +
|
|
85
|
+
'upgrades your config so sessions refresh automatically from now on.', 401);
|
|
86
|
+
}
|
|
68
87
|
let pair;
|
|
69
88
|
try {
|
|
70
89
|
pair = await this.request('POST', '/keys/cli-pair/refresh', { refresh_token: refreshToken });
|
package/dist/lib/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/lib/client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,KAAK,IAAI,WAAW,EAAE,MAAM,QAAQ,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEvD;;wDAEwD;AACxD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,+BAA+B,CAAC;AAEtG;;;;;;4BAM4B;AAC5B,MAAM,eAAe,GACnB,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,+BAA+B,CAAC;AAE1F;0DAC0D;AAC1D,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAElC;8DAC8D;AAC9D,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,GAAG,MAAM,CAAC;AAEhD,MAAM,OAAO,SAAS;IACpB;gFAC4E;IACpE,KAAK,CAAS;IAEtB,YAAY,KAAa;QACvB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED;;;;6DAIyD;IACzD,KAAK,CAAC,UAAU,CACd,IAAa,EACb,IAA6B;QAE7B,OAAO,IAAI,CAAC,IAAI,CAAI,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,CAAC;IAC9F,CAAC;IAED
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/lib/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
2
|
+
import { dirname, join } from 'node:path';
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
4
|
+
import { updateProvider } from './providers/update.js';
|
|
5
|
+
// import { advisoryProvider } from './providers/advisory.js'; // dormant — see that file
|
|
6
|
+
/** Registered notice sources. Add a provider here to surface a new kind of notice;
|
|
7
|
+
* it inherits the gate + stderr emission below, so it can never reach stdout,
|
|
8
|
+
* agent/piped output, or swpx/swpm verdict grading. */
|
|
9
|
+
const PROVIDERS = [updateProvider];
|
|
10
|
+
/** `somewhere <sub>` forms that must stay silent: the verdict/safety pass-throughs
|
|
11
|
+
* (their own bins already bypass this entry, but `somewhere swpx …` reaches here)
|
|
12
|
+
* and the machine-oriented npx/npm aliases. */
|
|
13
|
+
const SKIP_SUBCOMMANDS = new Set(['swpx', 'swpm', 'x', 'm', 'npx', 'npm']);
|
|
14
|
+
function currentVersion() {
|
|
15
|
+
try {
|
|
16
|
+
// dist/lib/notify/index.js → package root is three levels up.
|
|
17
|
+
const pkg = JSON.parse(readFileSync(join(dirname(fileURLToPath(import.meta.url)), '..', '..', '..', 'package.json'), 'utf8'));
|
|
18
|
+
return pkg.version;
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return '0.0.0';
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/** The one gate every provider inherits. If this returns false, NO provider runs,
|
|
25
|
+
* so notices can never appear on non-interactive output, in CI, during a
|
|
26
|
+
* safety/pass-through command, or when the user opted out. */
|
|
27
|
+
function notificationsAllowed(argv) {
|
|
28
|
+
if (!process.stderr.isTTY)
|
|
29
|
+
return false; // agents, pipes, redirects, files
|
|
30
|
+
if (process.env.CI)
|
|
31
|
+
return false; // CI logs
|
|
32
|
+
if (process.env.SOMEWHERE_NO_NOTIFICATIONS)
|
|
33
|
+
return false; // global opt-out
|
|
34
|
+
const sub = argv[2];
|
|
35
|
+
if (!sub || sub.startsWith('-') || SKIP_SUBCOMMANDS.has(sub))
|
|
36
|
+
return false;
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
/** Run every provider (gated, in parallel, fail-open) and return the notices to
|
|
40
|
+
* display. Print these to STDERR after the command (e.g. via process.on('exit'))
|
|
41
|
+
* so they never touch stdout and land as a parting line. */
|
|
42
|
+
export async function collectNotices(argv) {
|
|
43
|
+
try {
|
|
44
|
+
if (!notificationsAllowed(argv))
|
|
45
|
+
return [];
|
|
46
|
+
const ctx = { argv, currentVersion: currentVersion() };
|
|
47
|
+
const results = await Promise.all(PROVIDERS.map((p) => p.getNotice(ctx).catch(() => null)));
|
|
48
|
+
return results.filter((n) => typeof n === 'string' && n.length > 0);
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
return []; // never let the notification pipeline break the CLI
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/notify/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,yFAAyF;AAEzF;;wDAEwD;AACxD,MAAM,SAAS,GAAqB,CAAC,cAAc,CAAC,CAAC;AAErD;;gDAEgD;AAChD,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;AAE3E,SAAS,cAAc;IACrB,IAAI,CAAC;QACH,8DAA8D;QAC9D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CACpB,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAC/E,CAAC;QACzB,OAAO,GAAG,CAAC,OAAO,CAAC;IACrB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED;;+DAE+D;AAC/D,SAAS,oBAAoB,CAAC,IAAc;IAC1C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC,CAAC,kCAAkC;IAC3E,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE;QAAE,OAAO,KAAK,CAAC,CAAC,UAAU;IAC5C,IAAI,OAAO,CAAC,GAAG,CAAC,0BAA0B;QAAE,OAAO,KAAK,CAAC,CAAC,iBAAiB;IAC3E,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3E,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;6DAE6D;AAC7D,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAc;IACjD,IAAI,CAAC;QACH,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;YAAE,OAAO,EAAE,CAAC;QAC3C,MAAM,GAAG,GAAkB,EAAE,IAAI,EAAE,cAAc,EAAE,cAAc,EAAE,EAAE,CAAC;QACtE,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5F,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACnF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC,CAAC,oDAAoD;IACjE,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/** DORMANT — the pipe for "a package you previously ran through swpx/swpm now has
|
|
2
|
+
* a security advisory." Not registered in ../index.ts yet; wire it when we want it.
|
|
3
|
+
*
|
|
4
|
+
* How to turn it on (kept separate from the verdict path so it can never affect
|
|
5
|
+
* safety grading):
|
|
6
|
+
*
|
|
7
|
+
* 1. RECORD USAGE — in the swpx/swpm bins, after a run resolves, append
|
|
8
|
+
* {name, version, ts} to ~/.somewhere/used-packages.json. This write MUST be
|
|
9
|
+
* fail-open and off the critical path (a try/catch around an async write); it
|
|
10
|
+
* must never block the install or change the verdict output.
|
|
11
|
+
*
|
|
12
|
+
* 2. CHECK HERE — read that file, throttle (e.g. a `checkedAt` stamp, once / 6h),
|
|
13
|
+
* batch-query the verdict API for those package@versions, and return a notice
|
|
14
|
+
* if any flipped to suspicious/blocked SINCE the user used them (compare
|
|
15
|
+
* against a stored last-seen verdict so we only alert on the transition, not
|
|
16
|
+
* every run). Keep it to one line, e.g.:
|
|
17
|
+
* "⚠ A package you used (foo@1.2.3) now has an advisory. swpx check foo@1.2.3"
|
|
18
|
+
*
|
|
19
|
+
* 3. REGISTER — add `advisoryProvider` to PROVIDERS in ../index.ts.
|
|
20
|
+
*
|
|
21
|
+
* It inherits the central gate, so it's already stderr-only, interactive-only,
|
|
22
|
+
* and silent during swpx/swpm runs — it surfaces as ambient awareness on normal
|
|
23
|
+
* `somewhere` usage, never inline with a live verdict. */
|
|
24
|
+
export const advisoryProvider = {
|
|
25
|
+
id: 'pkg-advisory',
|
|
26
|
+
async getNotice() {
|
|
27
|
+
return null; // pipe laid; dormant until the steps above are built
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=advisory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"advisory.js","sourceRoot":"","sources":["../../../../src/lib/notify/providers/advisory.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;2DAsB2D;AAC3D,MAAM,CAAC,MAAM,gBAAgB,GAAmB;IAC9C,EAAE,EAAE,cAAc;IAClB,KAAK,CAAC,SAAS;QACb,OAAO,IAAI,CAAC,CAAC,qDAAqD;IACpE,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { homedir } from 'node:os';
|
|
3
|
+
import { dirname, join } from 'node:path';
|
|
4
|
+
import { dim, teal } from '../../output.js';
|
|
5
|
+
const PACKAGE = '@somewhere-tech/cli';
|
|
6
|
+
const CACHE_PATH = join(homedir(), '.somewhere', 'update-check.json');
|
|
7
|
+
const REGISTRY = `https://registry.npmjs.org/${PACKAGE.replace('/', '%2F')}/latest`;
|
|
8
|
+
const ONE_DAY = 24 * 60 * 60 * 1000;
|
|
9
|
+
const FETCH_TIMEOUT_MS = 1000;
|
|
10
|
+
/** Numeric major.minor.patch compare, ignoring pre-release tags. Returns true when
|
|
11
|
+
* `a` is strictly newer than `b`, false on anything unparseable (exported for
|
|
12
|
+
* tests — a string compare would call 1.9.0 newer than 1.10.0). */
|
|
13
|
+
export function isNewer(a, b) {
|
|
14
|
+
const parse = (v) => v.split('-')[0].split('.').map((n) => Number(n));
|
|
15
|
+
const pa = parse(a);
|
|
16
|
+
const pb = parse(b);
|
|
17
|
+
if (pa.length < 3 || pb.length < 3 || [...pa, ...pb].some((n) => Number.isNaN(n)))
|
|
18
|
+
return false;
|
|
19
|
+
for (let i = 0; i < 3; i++) {
|
|
20
|
+
if (pa[i] !== pb[i])
|
|
21
|
+
return pa[i] > pb[i];
|
|
22
|
+
}
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
function readCache() {
|
|
26
|
+
try {
|
|
27
|
+
return JSON.parse(readFileSync(CACHE_PATH, 'utf8'));
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
function writeCache(latest) {
|
|
34
|
+
try {
|
|
35
|
+
const dir = dirname(CACHE_PATH);
|
|
36
|
+
if (!existsSync(dir))
|
|
37
|
+
mkdirSync(dir, { recursive: true });
|
|
38
|
+
writeFileSync(CACHE_PATH, JSON.stringify({ checkedAt: Date.now(), latest }) + '\n', { mode: 0o600 });
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
// best-effort cache; a failed write just means we re-check next time
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
async function fetchLatest() {
|
|
45
|
+
try {
|
|
46
|
+
const controller = new AbortController();
|
|
47
|
+
const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);
|
|
48
|
+
const res = await fetch(REGISTRY, { signal: controller.signal, headers: { accept: 'application/json' } });
|
|
49
|
+
clearTimeout(timer);
|
|
50
|
+
if (!res.ok)
|
|
51
|
+
return null;
|
|
52
|
+
const body = (await res.json());
|
|
53
|
+
return typeof body.version === 'string' ? body.version : null;
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/** Notice provider: a newer @somewhere-tech/cli is published. Self-throttled to one
|
|
60
|
+
* npm check per day (cached in ~/.somewhere/update-check.json). The pipeline's
|
|
61
|
+
* central gate already ensured this only runs on interactive, non-CI, non-pass-
|
|
62
|
+
* through commands, so this provider just answers "is there an update?". */
|
|
63
|
+
export const updateProvider = {
|
|
64
|
+
id: 'cli-update',
|
|
65
|
+
async getNotice({ currentVersion }) {
|
|
66
|
+
try {
|
|
67
|
+
let cache = readCache();
|
|
68
|
+
if (!cache || Date.now() - cache.checkedAt > ONE_DAY) {
|
|
69
|
+
const latest = await fetchLatest();
|
|
70
|
+
if (latest) {
|
|
71
|
+
writeCache(latest);
|
|
72
|
+
cache = { checkedAt: Date.now(), latest };
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
if (!cache?.latest || !isNewer(cache.latest, currentVersion))
|
|
76
|
+
return null;
|
|
77
|
+
return (` ${teal('▲ Update available')} ${dim(currentVersion)} → ${teal(cache.latest)}\n` +
|
|
78
|
+
` Run ${teal('somewhere update')} to upgrade. ${dim('(SOMEWHERE_NO_NOTIFICATIONS=1 to silence)')}`);
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
};
|
|
85
|
+
//# sourceMappingURL=update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../../src/lib/notify/providers/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAG5C,MAAM,OAAO,GAAG,qBAAqB,CAAC;AACtC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,mBAAmB,CAAC,CAAC;AACtE,MAAM,QAAQ,GAAG,8BAA8B,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC;AACpF,MAAM,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AACpC,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAO9B;;oEAEoE;AACpE,MAAM,UAAU,OAAO,CAAC,CAAS,EAAE,CAAS;IAC1C,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9E,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACpB,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACpB,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAChG,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAAE,OAAO,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,SAAS;IAChB,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAgB,CAAC;IACrE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,MAAc;IAChC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;QAChC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACvG,CAAC;IAAC,MAAM,CAAC;QACP,qEAAqE;IACvE,CAAC;AACH,CAAC;AAED,KAAK,UAAU,WAAW;IACxB,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,gBAAgB,CAAC,CAAC;QACrE,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,EAAE,CAAC,CAAC;QAC1G,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC;QACzB,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAyB,CAAC;QACxD,OAAO,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;IAChE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;6EAG6E;AAC7E,MAAM,CAAC,MAAM,cAAc,GAAmB;IAC5C,EAAE,EAAE,YAAY;IAChB,KAAK,CAAC,SAAS,CAAC,EAAE,cAAc,EAAE;QAChC,IAAI,CAAC;YACH,IAAI,KAAK,GAAG,SAAS,EAAE,CAAC;YACxB,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,GAAG,OAAO,EAAE,CAAC;gBACrD,MAAM,MAAM,GAAG,MAAM,WAAW,EAAE,CAAC;gBACnC,IAAI,MAAM,EAAE,CAAC;oBACX,UAAU,CAAC,MAAM,CAAC,CAAC;oBACnB,KAAK,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC;gBAC5C,CAAC;YACH,CAAC;YACD,IAAI,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,cAAc,CAAC;gBAAE,OAAO,IAAI,CAAC;YAC1E,OAAO,CACL,KAAK,IAAI,CAAC,oBAAoB,CAAC,KAAK,GAAG,CAAC,cAAc,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI;gBACnF,SAAS,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,GAAG,CAAC,2CAA2C,CAAC,EAAE,CACrG,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/lib/notify/types.ts"],"names":[],"mappings":""}
|
package/dist/swpx/render.js
CHANGED
|
@@ -27,6 +27,8 @@ function checkMark(level) {
|
|
|
27
27
|
}
|
|
28
28
|
/** 1400622 → "1.4M", 11000 → "11k", 11 → "11". */
|
|
29
29
|
function humanizeDownloads(n) {
|
|
30
|
+
if (n >= 1_000_000_000)
|
|
31
|
+
return `${(n / 1_000_000_000).toFixed(1).replace(/\.0$/, '')}B`;
|
|
30
32
|
if (n >= 1_000_000)
|
|
31
33
|
return `${(n / 1_000_000).toFixed(1).replace(/\.0$/, '')}M`;
|
|
32
34
|
if (n >= 10_000)
|
|
@@ -43,7 +45,27 @@ function humanizeAge(h) {
|
|
|
43
45
|
if (h < 48)
|
|
44
46
|
return `${Math.round(h)}h`;
|
|
45
47
|
const d = h / 24;
|
|
46
|
-
|
|
48
|
+
if (d < 60)
|
|
49
|
+
return `${Math.round(d)}d`;
|
|
50
|
+
const mo = d / 30;
|
|
51
|
+
return mo < 24 ? `${Math.round(mo)}mo` : `${Math.round(d / 365)}y`;
|
|
52
|
+
}
|
|
53
|
+
/** "20 verified · 2 flagged · 6 not yet checked" from the enrich breakdown
|
|
54
|
+
* counts, or null when the counts aren't present (a pre-enrich row). */
|
|
55
|
+
function depBreakdown(v) {
|
|
56
|
+
const verified = v.dep_verified;
|
|
57
|
+
const unknown = v.dep_unknown;
|
|
58
|
+
if (typeof verified !== 'number' && typeof unknown !== 'number')
|
|
59
|
+
return null;
|
|
60
|
+
const flagged = (v.dependency_flags ?? []).length;
|
|
61
|
+
const bits = [];
|
|
62
|
+
if (typeof verified === 'number')
|
|
63
|
+
bits.push(`${verified} verified`);
|
|
64
|
+
if (flagged)
|
|
65
|
+
bits.push(`${flagged} flagged`);
|
|
66
|
+
if (typeof unknown === 'number' && unknown > 0)
|
|
67
|
+
bits.push(`${unknown} not yet checked`);
|
|
68
|
+
return bits.join(' · ') || null;
|
|
47
69
|
}
|
|
48
70
|
/** The per-dimension evidence rows — "show the work, evidence not a grade".
|
|
49
71
|
* Every check the verdict layer ran becomes a row: ok (green ✓), warn
|
|
@@ -69,6 +91,18 @@ export function buildChecks(v) {
|
|
|
69
91
|
// A single-package (or brand-new) author is a caution; an established one reassures.
|
|
70
92
|
checks.push({ level: typeof pc === 'number' && pc <= 1 ? 'warn' : 'ok', text: `Author: ${v.publisher}${detail}` });
|
|
71
93
|
}
|
|
94
|
+
if (v.license) {
|
|
95
|
+
checks.push({ level: 'ok', text: `${v.license} licensed` });
|
|
96
|
+
}
|
|
97
|
+
if (v.maintainer_changed === true) {
|
|
98
|
+
checks.push({
|
|
99
|
+
level: 'warn',
|
|
100
|
+
text: `Publisher changed since previous release${v.previous_publisher ? ` (was ${v.previous_publisher})` : ''}`,
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
else if (v.maintainer_changed === false) {
|
|
104
|
+
checks.push({ level: 'ok', text: 'Same publisher as previous release' });
|
|
105
|
+
}
|
|
72
106
|
const ageH = ageHours(v.publish_time);
|
|
73
107
|
if (ageH != null) {
|
|
74
108
|
checks.push(ageH < 24
|
|
@@ -88,30 +122,30 @@ export function buildChecks(v) {
|
|
|
88
122
|
if (Array.isArray(v.dependencies)) {
|
|
89
123
|
const deps = v.dependencies;
|
|
90
124
|
const flags = Array.isArray(v.dependency_flags) ? v.dependency_flags : null;
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
checks.push({ level: 'ok', text: 'No dependencies' });
|
|
95
|
-
}
|
|
96
|
-
else if (flags.length) {
|
|
97
|
-
checks.push({
|
|
98
|
-
level: 'bad',
|
|
99
|
-
text: `${flags.length} of ${checked} flagged: ${flags.map((d) => `${d.name} (${d.verdict})`).join(', ')}`,
|
|
100
|
-
});
|
|
101
|
-
}
|
|
102
|
-
else {
|
|
103
|
-
// "none flagged" not "all verified": uncached deps are unknown, not
|
|
104
|
-
// verified — we surface the bad ones, so absence of flags ≠ all-clean.
|
|
105
|
-
// (Post-prewarm, when the tree is cached, this becomes a true all-clear.)
|
|
106
|
-
checks.push({
|
|
107
|
-
level: 'ok',
|
|
108
|
-
text: `${checked} dependenc${checked === 1 ? 'y' : 'ies'}, none flagged`,
|
|
109
|
-
});
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
else if (deps.length === 0) {
|
|
125
|
+
const breakdown = depBreakdown(v);
|
|
126
|
+
const checked = Math.min(deps.length, 50);
|
|
127
|
+
if (deps.length === 0) {
|
|
113
128
|
checks.push({ level: 'ok', text: 'No dependencies' });
|
|
114
129
|
}
|
|
130
|
+
else if (flags && flags.length) {
|
|
131
|
+
// Some dependency is known-bad — name them, with the verified/not-yet-
|
|
132
|
+
// checked context when the enrich breakdown is available.
|
|
133
|
+
const list = flags.map((d) => `${d.name} (${d.verdict})`).join(', ');
|
|
134
|
+
const level = flags.some((d) => d.verdict === 'blocked') ? 'bad' : 'warn';
|
|
135
|
+
checks.push({
|
|
136
|
+
level,
|
|
137
|
+
text: breakdown ? `${deps.length} dependencies — ${breakdown}: ${list}` : `${flags.length} of ${checked} flagged: ${list}`,
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
else if (breakdown) {
|
|
141
|
+
// Enrich ran: show the real verified / not-yet-checked split.
|
|
142
|
+
checks.push({ level: 'ok', text: `${deps.length} dependencies — ${breakdown}` });
|
|
143
|
+
}
|
|
144
|
+
else if (flags) {
|
|
145
|
+
// Flags array present but empty, no counts yet: bad ones surfaced, but
|
|
146
|
+
// uncached deps are unknown — "none flagged", not "all verified".
|
|
147
|
+
checks.push({ level: 'ok', text: `${checked} dependenc${checked === 1 ? 'y' : 'ies'}, none flagged` });
|
|
148
|
+
}
|
|
115
149
|
else if (deps.length <= 5) {
|
|
116
150
|
checks.push({ level: 'ok', text: `${deps.length} dependenc${deps.length === 1 ? 'y' : 'ies'}: ${deps.join(', ')}` });
|
|
117
151
|
}
|
|
@@ -148,6 +182,14 @@ export function buildChecks(v) {
|
|
|
148
182
|
checks.push({ level: 'ok', text: 'GitHub tag exists' });
|
|
149
183
|
else if (v.has_github_tag === 0)
|
|
150
184
|
checks.push({ level: 'warn', text: 'No GitHub tag' });
|
|
185
|
+
if (v.repo_archived === true)
|
|
186
|
+
checks.push({ level: 'warn', text: 'Source repo is archived' });
|
|
187
|
+
const lastCommitH = ageHours(v.repo_last_commit);
|
|
188
|
+
if (lastCommitH != null) {
|
|
189
|
+
const stale = lastCommitH > 365 * 24;
|
|
190
|
+
const issues = typeof v.repo_open_issues === 'number' ? `, ${v.repo_open_issues} open issue${v.repo_open_issues === 1 ? '' : 's'}` : '';
|
|
191
|
+
checks.push({ level: stale ? 'warn' : 'ok', text: `Repo last updated ${humanizeAge(lastCommitH)} ago${issues}` });
|
|
192
|
+
}
|
|
151
193
|
checks.push(v.has_provenance
|
|
152
194
|
? { level: 'ok', text: 'Provenance verified' }
|
|
153
195
|
: { level: 'warn', text: 'No provenance' });
|
package/dist/swpx/render.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/swpx/render.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/swpx/render.ts"],"names":[],"mappings":"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"}
|