@jovie/cli 26.9.15 → 26.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +205 -17
- package/dist/cli.d.ts +30 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +261 -18
- package/dist/cli.js.map +1 -1
- package/dist/client.d.ts +30 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +344 -31
- package/dist/client.js.map +1 -1
- package/dist/commands.d.ts +13 -0
- package/dist/commands.d.ts.map +1 -1
- package/dist/commands.js +87 -1
- package/dist/commands.js.map +1 -1
- package/dist/fleet-client.d.ts +10 -0
- package/dist/fleet-client.d.ts.map +1 -0
- package/dist/fleet-client.js +92 -0
- package/dist/fleet-client.js.map +1 -0
- package/dist/fleet-contract.generated.d.ts +342 -0
- package/dist/fleet-contract.generated.d.ts.map +1 -0
- package/dist/fleet-contract.generated.js +376 -0
- package/dist/fleet-contract.generated.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts +2 -0
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +54 -12
- package/dist/init.js.map +1 -1
- package/dist/mcp.d.ts +4 -10
- package/dist/mcp.d.ts.map +1 -1
- package/dist/mcp.js +81 -16
- package/dist/mcp.js.map +1 -1
- package/dist/mesh.d.ts +50 -0
- package/dist/mesh.d.ts.map +1 -0
- package/dist/mesh.js +332 -0
- package/dist/mesh.js.map +1 -0
- package/dist/skill.d.ts +1 -1
- package/dist/skill.d.ts.map +1 -1
- package/dist/skill.js +32 -3
- package/dist/skill.js.map +1 -1
- package/package.json +7 -6
package/dist/client.js
CHANGED
|
@@ -14,21 +14,218 @@ export class JovieRequestError extends Error {
|
|
|
14
14
|
responseBody;
|
|
15
15
|
retryAfterSeconds;
|
|
16
16
|
apiCode;
|
|
17
|
+
retryable;
|
|
17
18
|
code = 'REQUEST_FAILED';
|
|
18
19
|
constructor(message, url, status, responseBody, retryAfterSeconds,
|
|
19
20
|
/** Stable server error code (e.g. RATE_LIMITED) when the API sent one. */
|
|
20
|
-
apiCode) {
|
|
21
|
+
apiCode, retryable) {
|
|
21
22
|
super(message);
|
|
22
23
|
this.url = url;
|
|
23
24
|
this.status = status;
|
|
24
25
|
this.responseBody = responseBody;
|
|
25
26
|
this.retryAfterSeconds = retryAfterSeconds;
|
|
26
27
|
this.apiCode = apiCode;
|
|
28
|
+
this.retryable = retryable;
|
|
27
29
|
this.name = 'JovieRequestError';
|
|
28
30
|
}
|
|
29
31
|
}
|
|
32
|
+
export function safeDiagnostic(value) {
|
|
33
|
+
return value.replace(/(?:Bearer\s+[^\s"']+|jwf\.[A-Za-z0-9._-]+|sk-[A-Za-z0-9_-]{16,})/gi, '[redacted]');
|
|
34
|
+
}
|
|
30
35
|
function errorMessage(error) {
|
|
31
|
-
return error instanceof Error ? error.message : String(error);
|
|
36
|
+
return safeDiagnostic(error instanceof Error ? error.message : String(error));
|
|
37
|
+
}
|
|
38
|
+
/** Echo untrusted text on one bounded terminal line (no escape sequences). */
|
|
39
|
+
export function displayValue(value, max = 120) {
|
|
40
|
+
const flat = safeDiagnostic(value).replace(/[\u0000-\u001f\u007f-\u009f]/g, ' ');
|
|
41
|
+
return flat.length > max ? `${flat.slice(0, max)}…` : flat;
|
|
42
|
+
}
|
|
43
|
+
const TLS_ERROR = /^(?:CERT_|ERR_TLS_|ERR_SSL_|DEPTH_ZERO_SELF_SIGNED_CERT$|SELF_SIGNED_CERT_IN_CHAIN$|UNABLE_TO_(?:VERIFY_LEAF_SIGNATURE|GET_ISSUER_CERT(?:_LOCALLY)?)$|HOSTNAME_MISMATCH$)/;
|
|
44
|
+
/** Walk an undici `fetch failed` cause chain for the first system error code. */
|
|
45
|
+
function transportCode(error) {
|
|
46
|
+
for (let current = error, depth = 0; current && depth < 5; depth++) {
|
|
47
|
+
const { code, name, message } = current;
|
|
48
|
+
if (typeof message === 'string' && /^Proxy response \(\d+\)/.test(message))
|
|
49
|
+
return 'PROXY';
|
|
50
|
+
if (name === 'TimeoutError')
|
|
51
|
+
return 'TIMEOUT';
|
|
52
|
+
if (name === 'AbortError' && code !== 'UND_ERR_ABORTED')
|
|
53
|
+
return 'ABORTED';
|
|
54
|
+
if (typeof code === 'string' && code !== 'ABORT_ERR')
|
|
55
|
+
return code;
|
|
56
|
+
if (typeof message === 'string' && /unexpected redirect/i.test(message))
|
|
57
|
+
return 'REDIRECT';
|
|
58
|
+
if (typeof message === 'string' && /^bad port$/i.test(message))
|
|
59
|
+
return 'BAD_PORT';
|
|
60
|
+
current = current.cause;
|
|
61
|
+
}
|
|
62
|
+
return undefined;
|
|
63
|
+
}
|
|
64
|
+
/** One actionable line per failure class; unknown failures keep the cause. */
|
|
65
|
+
function describeTransportFailure(method, url, error, timeoutMs) {
|
|
66
|
+
const host = new URL(url).host;
|
|
67
|
+
const code = transportCode(error);
|
|
68
|
+
if (code === 'ENOTFOUND' || code === 'EAI_AGAIN' || code === 'EAI_NONAME')
|
|
69
|
+
return {
|
|
70
|
+
message: `Could not resolve ${host}. Check your internet connection or --base-url.`,
|
|
71
|
+
retry: code === 'EAI_AGAIN',
|
|
72
|
+
};
|
|
73
|
+
if (code === 'ECONNREFUSED')
|
|
74
|
+
return {
|
|
75
|
+
message: `Could not connect to ${host} (connection refused). Check --base-url or try again later.`,
|
|
76
|
+
retry: true,
|
|
77
|
+
};
|
|
78
|
+
if (code === 'TIMEOUT' ||
|
|
79
|
+
code === 'ETIMEDOUT' ||
|
|
80
|
+
code === 'UND_ERR_CONNECT_TIMEOUT' ||
|
|
81
|
+
code === 'UND_ERR_HEADERS_TIMEOUT' ||
|
|
82
|
+
code === 'UND_ERR_BODY_TIMEOUT')
|
|
83
|
+
return {
|
|
84
|
+
message: `${host} did not respond within ${Math.round(timeoutMs / 1000)}s. Check your connection and try again.`,
|
|
85
|
+
retry: code !== 'TIMEOUT',
|
|
86
|
+
};
|
|
87
|
+
if (code === 'ABORTED')
|
|
88
|
+
return { message: `${method} ${url} was canceled.`, retry: false };
|
|
89
|
+
if (code && TLS_ERROR.test(code))
|
|
90
|
+
return {
|
|
91
|
+
message: `TLS certificate check failed for ${host} (${code}). Behind a TLS-inspecting proxy, set NODE_EXTRA_CA_CERTS to its CA bundle.`,
|
|
92
|
+
retry: false,
|
|
93
|
+
};
|
|
94
|
+
if (code === 'PROXY')
|
|
95
|
+
return {
|
|
96
|
+
message: `The proxy refused to connect to ${host}. Check HTTP_PROXY, HTTPS_PROXY, and NO_PROXY.`,
|
|
97
|
+
retry: false,
|
|
98
|
+
};
|
|
99
|
+
if (code === 'BAD_PORT')
|
|
100
|
+
return {
|
|
101
|
+
message: `Port ${new URL(url).port} is blocked for HTTP clients. Use a different port in --base-url.`,
|
|
102
|
+
retry: false,
|
|
103
|
+
};
|
|
104
|
+
if (code === 'REDIRECT')
|
|
105
|
+
return {
|
|
106
|
+
message: `${host} redirected the request. Pass the final origin with --base-url.`,
|
|
107
|
+
retry: false,
|
|
108
|
+
};
|
|
109
|
+
if (code === 'ECONNRESET' ||
|
|
110
|
+
code === 'EPIPE' ||
|
|
111
|
+
code === 'ENETUNREACH' ||
|
|
112
|
+
code === 'EHOSTUNREACH' ||
|
|
113
|
+
code === 'ENETDOWN' ||
|
|
114
|
+
code === 'UND_ERR_SOCKET')
|
|
115
|
+
return {
|
|
116
|
+
message: `Network error reaching ${host} (${code}). Check your connection and try again.`,
|
|
117
|
+
retry: true,
|
|
118
|
+
};
|
|
119
|
+
return {
|
|
120
|
+
message: `${method} ${url} failed: ${errorMessage(error)}`,
|
|
121
|
+
retry: true,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
function serverErrorMessage(body) {
|
|
125
|
+
try {
|
|
126
|
+
const parsed = JSON.parse(body);
|
|
127
|
+
const error = parsed?.error;
|
|
128
|
+
const message = typeof error === 'string'
|
|
129
|
+
? error
|
|
130
|
+
: error && typeof error === 'object'
|
|
131
|
+
? error.message
|
|
132
|
+
: parsed?.message;
|
|
133
|
+
return typeof message === 'string' && message.trim()
|
|
134
|
+
? displayValue(message.trim(), 200)
|
|
135
|
+
: undefined;
|
|
136
|
+
}
|
|
137
|
+
catch {
|
|
138
|
+
return undefined;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
/** Status-first guidance; a structured server message wins when present. */
|
|
142
|
+
function describeHttpFailure(method, url, status, body, retryAfterSeconds) {
|
|
143
|
+
const host = new URL(url).host;
|
|
144
|
+
const server = serverErrorMessage(body);
|
|
145
|
+
const where = `${method} ${url} returned HTTP ${status}`;
|
|
146
|
+
if (status === 429)
|
|
147
|
+
return `Rate limited by ${host}. ${retryAfterSeconds === undefined
|
|
148
|
+
? 'Wait a minute and try again.'
|
|
149
|
+
: `Retry in ${retryAfterSeconds}s.`} (${where})`;
|
|
150
|
+
if (server)
|
|
151
|
+
return `${server} (${where})`;
|
|
152
|
+
if (status === 404)
|
|
153
|
+
return `Not found. Check that ${new URL(url).origin} is a Jovie deployment. (${where})`;
|
|
154
|
+
if (status === 401 || status === 403)
|
|
155
|
+
return `${host} refused the request. (${where})`;
|
|
156
|
+
if (status >= 500)
|
|
157
|
+
return `${host} is temporarily unavailable. Try again shortly. (${where})`;
|
|
158
|
+
return where;
|
|
159
|
+
}
|
|
160
|
+
const RETRY_STATUSES = new Set([429, 502, 503, 504]);
|
|
161
|
+
/** Reads make at most this many attempts inside one shared deadline. */
|
|
162
|
+
export const MAX_READ_ATTEMPTS = 3;
|
|
163
|
+
/** Longer server-requested waits are surfaced instead of slept through. */
|
|
164
|
+
const MAX_RETRY_AFTER_SECONDS = 5;
|
|
165
|
+
function backoffMs(attempt, retryAfterSeconds) {
|
|
166
|
+
if (retryAfterSeconds !== undefined)
|
|
167
|
+
return retryAfterSeconds * 1000;
|
|
168
|
+
return 250 * 4 ** attempt + Math.floor(Math.random() * 100);
|
|
169
|
+
}
|
|
170
|
+
function sleep(ms, signal) {
|
|
171
|
+
return new Promise(resolve => {
|
|
172
|
+
if (signal.aborted)
|
|
173
|
+
return resolve();
|
|
174
|
+
const timer = setTimeout(done, ms);
|
|
175
|
+
function done() {
|
|
176
|
+
clearTimeout(timer);
|
|
177
|
+
signal.removeEventListener('abort', done);
|
|
178
|
+
resolve();
|
|
179
|
+
}
|
|
180
|
+
signal.addEventListener('abort', done, { once: true });
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
/** Response consumption shares the request deadline and has a hard byte cap. */
|
|
184
|
+
export async function readResponseBody(response, signal) {
|
|
185
|
+
if (!response.body) {
|
|
186
|
+
if (signal.aborted)
|
|
187
|
+
throw new Error('Response deadline exceeded or canceled.');
|
|
188
|
+
return '';
|
|
189
|
+
}
|
|
190
|
+
const reader = response.body.getReader();
|
|
191
|
+
if (signal.aborted) {
|
|
192
|
+
void reader.cancel().catch(() => { });
|
|
193
|
+
reader.releaseLock();
|
|
194
|
+
throw new Error('Response deadline exceeded or canceled.');
|
|
195
|
+
}
|
|
196
|
+
const chunks = [];
|
|
197
|
+
let size = 0;
|
|
198
|
+
let rejectAbort = () => { };
|
|
199
|
+
const aborted = new Promise((_resolve, reject) => {
|
|
200
|
+
rejectAbort = reject;
|
|
201
|
+
});
|
|
202
|
+
const onAbort = () => {
|
|
203
|
+
rejectAbort(new Error('Response deadline exceeded or canceled.'));
|
|
204
|
+
void reader.cancel().catch(() => { });
|
|
205
|
+
};
|
|
206
|
+
signal.addEventListener('abort', onAbort, { once: true });
|
|
207
|
+
if (signal.aborted)
|
|
208
|
+
onAbort();
|
|
209
|
+
try {
|
|
210
|
+
for (;;) {
|
|
211
|
+
const part = await Promise.race([reader.read(), aborted]);
|
|
212
|
+
if (signal.aborted)
|
|
213
|
+
throw new Error('Response deadline exceeded or canceled.');
|
|
214
|
+
if (part.done)
|
|
215
|
+
break;
|
|
216
|
+
size += part.value.length;
|
|
217
|
+
if (size > 1_048_576) {
|
|
218
|
+
void reader.cancel().catch(() => { });
|
|
219
|
+
throw new Error('Response body exceeds 1 MiB.');
|
|
220
|
+
}
|
|
221
|
+
chunks.push(part.value);
|
|
222
|
+
}
|
|
223
|
+
return new TextDecoder('utf-8').decode(Buffer.concat(chunks));
|
|
224
|
+
}
|
|
225
|
+
finally {
|
|
226
|
+
signal.removeEventListener('abort', onAbort);
|
|
227
|
+
reader.releaseLock();
|
|
228
|
+
}
|
|
32
229
|
}
|
|
33
230
|
/** Normalize a deployment root without accepting credentials or query state. */
|
|
34
231
|
export function normalizeBaseUrl(baseUrl = DEFAULT_BASE_URL) {
|
|
@@ -37,7 +234,7 @@ export function normalizeBaseUrl(baseUrl = DEFAULT_BASE_URL) {
|
|
|
37
234
|
url = new URL(baseUrl);
|
|
38
235
|
}
|
|
39
236
|
catch {
|
|
40
|
-
throw new JovieInputError(
|
|
237
|
+
throw new JovieInputError('Invalid base URL. Expected an origin like https://jov.ie.');
|
|
41
238
|
}
|
|
42
239
|
if (!['http:', 'https:'].includes(url.protocol) ||
|
|
43
240
|
url.username ||
|
|
@@ -61,7 +258,7 @@ function requestSignal(options) {
|
|
|
61
258
|
function getFetch(options) {
|
|
62
259
|
return options.fetchImpl ?? ((input, init) => globalThis.fetch(input, init));
|
|
63
260
|
}
|
|
64
|
-
function parseRetryAfterSeconds(value, nowMs = Date.now()) {
|
|
261
|
+
export function parseRetryAfterSeconds(value, nowMs = Date.now()) {
|
|
65
262
|
if (!value)
|
|
66
263
|
return undefined;
|
|
67
264
|
if (/^\d+$/.test(value.trim())) {
|
|
@@ -75,8 +272,8 @@ function parseRetryAfterSeconds(value, nowMs = Date.now()) {
|
|
|
75
272
|
}
|
|
76
273
|
function parseApiCode(body) {
|
|
77
274
|
try {
|
|
78
|
-
const
|
|
79
|
-
|
|
275
|
+
const parsed = JSON.parse(body);
|
|
276
|
+
const code = parsed?.error?.code ?? parsed?.code;
|
|
80
277
|
return typeof code === 'string' ? code : undefined;
|
|
81
278
|
}
|
|
82
279
|
catch {
|
|
@@ -87,29 +284,77 @@ async function request(pathname, accept, options, jsonBody) {
|
|
|
87
284
|
const baseUrl = normalizeBaseUrl(options.baseUrl);
|
|
88
285
|
const url = resourceUrl(baseUrl, pathname);
|
|
89
286
|
const method = jsonBody === undefined ? 'GET' : 'POST';
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
287
|
+
const timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
288
|
+
// One deadline covers every attempt, backoff, and the body, so a command
|
|
289
|
+
// never waits longer than timeoutMs however the server misbehaves.
|
|
290
|
+
const signal = requestSignal(options);
|
|
291
|
+
// Only reads retry. A timed-out write may have committed; retrying without a
|
|
292
|
+
// server idempotency key can create duplicate profiles or reports.
|
|
293
|
+
const maxAttempts = method === 'GET' ? MAX_READ_ATTEMPTS : 1;
|
|
294
|
+
for (let attempt = 0;; attempt++) {
|
|
295
|
+
const last = attempt + 1 >= maxAttempts;
|
|
296
|
+
let response;
|
|
297
|
+
try {
|
|
298
|
+
response = await getFetch(options)(url, {
|
|
299
|
+
method,
|
|
300
|
+
headers: {
|
|
301
|
+
Accept: accept,
|
|
302
|
+
'User-Agent': options.userAgent ?? DEFAULT_USER_AGENT,
|
|
303
|
+
...(jsonBody === undefined
|
|
304
|
+
? {}
|
|
305
|
+
: { 'Content-Type': 'application/json' }),
|
|
306
|
+
},
|
|
307
|
+
...(jsonBody === undefined ? {} : { body: JSON.stringify(jsonBody) }),
|
|
308
|
+
signal,
|
|
309
|
+
redirect: 'error',
|
|
310
|
+
});
|
|
311
|
+
}
|
|
312
|
+
catch (error) {
|
|
313
|
+
const failure = describeTransportFailure(method, url, signal.aborted && !options.signal?.aborted
|
|
314
|
+
? Object.assign(new Error('timeout'), { name: 'TimeoutError' })
|
|
315
|
+
: error, timeoutMs);
|
|
316
|
+
if (last || !failure.retry || signal.aborted) {
|
|
317
|
+
throw Object.assign(new JovieRequestError(failure.message, url, undefined, undefined, undefined, undefined, failure.retry), { cause: error });
|
|
318
|
+
}
|
|
319
|
+
await sleep(backoffMs(attempt), signal);
|
|
320
|
+
continue;
|
|
321
|
+
}
|
|
322
|
+
let body;
|
|
323
|
+
try {
|
|
324
|
+
body = await readResponseBody(response, signal);
|
|
325
|
+
}
|
|
326
|
+
catch (error) {
|
|
327
|
+
const host = new URL(url).host;
|
|
328
|
+
if (signal.aborted && !options.signal?.aborted) {
|
|
329
|
+
throw new JovieRequestError(`${host} did not finish responding within ${Math.round(timeoutMs / 1000)}s. Try again.`, url, response.status, undefined, undefined, undefined, true);
|
|
330
|
+
}
|
|
331
|
+
// undici reports a mid-body disconnect as a bare `terminated`.
|
|
332
|
+
const dropped = transportCode(error) === 'UND_ERR_SOCKET';
|
|
333
|
+
if (dropped && !last && !signal.aborted) {
|
|
334
|
+
await sleep(backoffMs(attempt), signal);
|
|
335
|
+
continue;
|
|
336
|
+
}
|
|
337
|
+
throw new JovieRequestError(dropped
|
|
338
|
+
? `${host} dropped the connection mid-response. Try again.`
|
|
339
|
+
: errorMessage(error), url, response.status, undefined, undefined, undefined, dropped || undefined);
|
|
340
|
+
}
|
|
341
|
+
if (response.ok)
|
|
342
|
+
return { body, url };
|
|
343
|
+
const retryAfterSeconds = parseRetryAfterSeconds(response.headers.get('retry-after'));
|
|
344
|
+
const apiCode = parseApiCode(body);
|
|
345
|
+
const retryable = RETRY_STATUSES.has(response.status) &&
|
|
346
|
+
// A structured 502 is an application answer (e.g. LOOKUP_FAILED).
|
|
347
|
+
!(response.status === 502 && apiCode);
|
|
348
|
+
if (!last &&
|
|
349
|
+
retryable &&
|
|
350
|
+
(retryAfterSeconds === undefined ||
|
|
351
|
+
retryAfterSeconds <= MAX_RETRY_AFTER_SECONDS)) {
|
|
352
|
+
await sleep(backoffMs(attempt, retryAfterSeconds), signal);
|
|
353
|
+
if (!signal.aborted)
|
|
354
|
+
continue;
|
|
355
|
+
}
|
|
356
|
+
throw new JovieRequestError(describeHttpFailure(method, url, response.status, body, retryAfterSeconds), url, response.status, safeDiagnostic(body.slice(0, 1_000)), retryAfterSeconds, apiCode, RETRY_STATUSES.has(response.status) ? true : undefined);
|
|
104
357
|
}
|
|
105
|
-
catch (error) {
|
|
106
|
-
throw new JovieRequestError(`${method} ${url} failed: ${errorMessage(error)}`, url);
|
|
107
|
-
}
|
|
108
|
-
const body = await response.text();
|
|
109
|
-
if (!response.ok) {
|
|
110
|
-
throw new JovieRequestError(`${method} ${url} returned HTTP ${response.status}`, url, response.status, body.slice(0, 1_000), parseRetryAfterSeconds(response.headers.get('retry-after')), parseApiCode(body));
|
|
111
|
-
}
|
|
112
|
-
return { body, url };
|
|
113
358
|
}
|
|
114
359
|
async function requestJson(pathname, options, jsonBody) {
|
|
115
360
|
const { body, url } = await request(pathname, 'application/json', options, jsonBody);
|
|
@@ -133,10 +378,22 @@ export function validateUsername(username) {
|
|
|
133
378
|
}
|
|
134
379
|
return normalized;
|
|
135
380
|
}
|
|
381
|
+
/** A 404 on an artist route means the username, not the network, is wrong. */
|
|
382
|
+
async function explainMissingArtist(username, pending) {
|
|
383
|
+
try {
|
|
384
|
+
return await pending;
|
|
385
|
+
}
|
|
386
|
+
catch (error) {
|
|
387
|
+
if (error instanceof JovieRequestError && error.status === 404) {
|
|
388
|
+
throw new JovieRequestError(`No public Jovie artist named "${username}". Check the username.`, error.url, error.status, error.responseBody, error.retryAfterSeconds, error.apiCode ?? 'ARTIST_NOT_FOUND', false);
|
|
389
|
+
}
|
|
390
|
+
throw error;
|
|
391
|
+
}
|
|
392
|
+
}
|
|
136
393
|
/** Fetch the public, unauthenticated artist API response. */
|
|
137
394
|
export function fetchArtist(username, options = {}) {
|
|
138
395
|
const normalized = validateUsername(username);
|
|
139
|
-
return requestJson(`/api/v1/${encodeURIComponent(normalized)}`, options);
|
|
396
|
+
return explainMissingArtist(normalized, requestJson(`/api/v1/${encodeURIComponent(normalized)}`, options));
|
|
140
397
|
}
|
|
141
398
|
/** Fetch the canonical public OpenAPI 3.1 contract. */
|
|
142
399
|
export function fetchOpenApi(options = {}) {
|
|
@@ -149,7 +406,7 @@ export function fetchSiteLlms(full, options = {}) {
|
|
|
149
406
|
/** Fetch the machine-readable guide for one public artist. */
|
|
150
407
|
export function fetchArtistLlms(username, options = {}) {
|
|
151
408
|
const normalized = validateUsername(username);
|
|
152
|
-
return requestText(`/${encodeURIComponent(normalized)}/llms.txt`, options);
|
|
409
|
+
return explainMissingArtist(normalized, requestText(`/${encodeURIComponent(normalized)}/llms.txt`, options));
|
|
153
410
|
}
|
|
154
411
|
/**
|
|
155
412
|
* Create (or find) a Jovie profile for a Spotify artist. Returns the public
|
|
@@ -162,7 +419,7 @@ export function createProfile(spotifyArtistUrl, options = {}) {
|
|
|
162
419
|
url = new URL(spotifyArtistUrl.trim());
|
|
163
420
|
}
|
|
164
421
|
catch {
|
|
165
|
-
throw new JovieInputError(`Invalid URL: ${spotifyArtistUrl}`);
|
|
422
|
+
throw new JovieInputError(`Invalid URL: ${displayValue(spotifyArtistUrl)}`);
|
|
166
423
|
}
|
|
167
424
|
if (url.protocol !== 'https:' ||
|
|
168
425
|
!/(^|\.)spotify\.com$/.test(url.hostname) ||
|
|
@@ -171,4 +428,60 @@ export function createProfile(spotifyArtistUrl, options = {}) {
|
|
|
171
428
|
}
|
|
172
429
|
return requestJson('/api/agents/profiles', options, { url: url.toString() });
|
|
173
430
|
}
|
|
431
|
+
const CREATOR_HANDLE = /^[A-Za-z0-9](?:[A-Za-z0-9._-]{0,99})$/;
|
|
432
|
+
/** `platform:handle` expands to the canonical profile URL for that platform. */
|
|
433
|
+
const HANDLE_SOURCES = {
|
|
434
|
+
instagram: handle => `https://www.instagram.com/${handle}`,
|
|
435
|
+
linktree: handle => `https://linktr.ee/${handle}`,
|
|
436
|
+
tiktok: handle => `https://www.tiktok.com/@${handle}`,
|
|
437
|
+
youtube: handle => /^UC[\w-]{22}$/.test(handle)
|
|
438
|
+
? `https://www.youtube.com/channel/${handle}`
|
|
439
|
+
: `https://www.youtube.com/@${handle}`,
|
|
440
|
+
};
|
|
441
|
+
function expandCreatorInput(input) {
|
|
442
|
+
const match = /^([a-z]+):([^:]+)$/.exec(input);
|
|
443
|
+
if (!match)
|
|
444
|
+
return input;
|
|
445
|
+
const build = HANDLE_SOURCES[match[1]];
|
|
446
|
+
if (!build)
|
|
447
|
+
return input;
|
|
448
|
+
const handle = match[2].replace(/^@+/, '');
|
|
449
|
+
if (!CREATOR_HANDLE.test(handle)) {
|
|
450
|
+
throw new JovieInputError(`Invalid handle in ${displayValue(input)}. Expected <platform>:<handle> using letters, numbers, dots, underscores, or hyphens.`);
|
|
451
|
+
}
|
|
452
|
+
return build(handle);
|
|
453
|
+
}
|
|
454
|
+
/** Extract public creator fields without creating or modifying a profile. */
|
|
455
|
+
export function lookupCreator(creatorUrl, options = {}) {
|
|
456
|
+
const candidate = expandCreatorInput(creatorUrl.trim());
|
|
457
|
+
let url;
|
|
458
|
+
try {
|
|
459
|
+
url = new URL(candidate);
|
|
460
|
+
}
|
|
461
|
+
catch {
|
|
462
|
+
throw new JovieInputError(`Invalid URL: ${displayValue(creatorUrl)}`);
|
|
463
|
+
}
|
|
464
|
+
if (candidate.length > 2048 ||
|
|
465
|
+
url.protocol !== 'https:' ||
|
|
466
|
+
url.username ||
|
|
467
|
+
url.password) {
|
|
468
|
+
throw new JovieInputError('Expected an HTTPS YouTube, Instagram, TikTok, or Linktree profile URL.');
|
|
469
|
+
}
|
|
470
|
+
return requestJson(`/api/agents/creator-lookup?url=${encodeURIComponent(url.toString())}`, options);
|
|
471
|
+
}
|
|
472
|
+
/** File a bug or feedback report. Returns `{ reportId }`. */
|
|
473
|
+
export function reportIssue(report, context = {}, options = {}) {
|
|
474
|
+
const title = report.title.trim();
|
|
475
|
+
const details = report.details.trim();
|
|
476
|
+
if (!title || !details) {
|
|
477
|
+
throw new JovieInputError('A report needs both a title and details.');
|
|
478
|
+
}
|
|
479
|
+
const safeContext = Object.fromEntries(Object.entries(context).filter(([, value]) => value));
|
|
480
|
+
return requestJson('/api/agents/feedback', options, {
|
|
481
|
+
kind: report.kind,
|
|
482
|
+
title,
|
|
483
|
+
details,
|
|
484
|
+
context: safeContext,
|
|
485
|
+
});
|
|
486
|
+
}
|
|
174
487
|
//# sourceMappingURL=client.js.map
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/commands.d.ts
CHANGED
|
@@ -2,6 +2,17 @@ import { type ResourceOptions } from './client.js';
|
|
|
2
2
|
export interface CommandInput {
|
|
3
3
|
readonly arg?: string;
|
|
4
4
|
readonly full?: boolean;
|
|
5
|
+
readonly flags?: Readonly<Record<string, string | undefined>>;
|
|
6
|
+
/** Set by the caller (CLI or MCP); attached to reports as safe context. */
|
|
7
|
+
readonly meta?: {
|
|
8
|
+
readonly channel: 'cli' | 'mcp';
|
|
9
|
+
readonly version: string;
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
export interface FlagSpec {
|
|
13
|
+
readonly name: string;
|
|
14
|
+
readonly description: string;
|
|
15
|
+
readonly required?: boolean;
|
|
5
16
|
}
|
|
6
17
|
/** One definition drives CLI dispatch, `--help`, and MCP tools. */
|
|
7
18
|
export interface CommandSpec {
|
|
@@ -13,7 +24,9 @@ export interface CommandSpec {
|
|
|
13
24
|
readonly description: string;
|
|
14
25
|
};
|
|
15
26
|
readonly acceptsFull?: boolean;
|
|
27
|
+
readonly flags?: readonly FlagSpec[];
|
|
16
28
|
readonly readOnly: boolean;
|
|
29
|
+
readonly internal?: boolean;
|
|
17
30
|
readonly run: (input: CommandInput, options: ResourceOptions) => Promise<unknown>;
|
|
18
31
|
}
|
|
19
32
|
export declare const COMMANDS: readonly CommandSpec[];
|
package/dist/commands.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"AAAA,OAAO,EAQL,KAAK,eAAe,EAErB,MAAM,aAAa,CAAC;AAIrB,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;IAC9D,2EAA2E;IAC3E,QAAQ,CAAC,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,KAAK,GAAG,KAAK,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/E;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,mEAAmE;AACnE,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,GAAG,CAAC,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IACvE,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,QAAQ,EAAE,CAAC;IACrC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,GAAG,EAAE,CACZ,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,eAAe,KACrB,OAAO,CAAC,OAAO,CAAC,CAAC;CACvB;AAuCD,eAAO,MAAM,QAAQ,EAAE,SAAS,WAAW,EAkH1C,CAAC;AAEF,wBAAgB,WAAW,CACzB,WAAW,EAAE,SAAS,MAAM,EAAE,GAC7B,WAAW,GAAG,SAAS,CAKzB"}
|
package/dist/commands.js
CHANGED
|
@@ -1,8 +1,67 @@
|
|
|
1
|
-
import { createProfile, fetchArtist, fetchArtistLlms, fetchOpenApi, fetchSiteLlms, } from './client.js';
|
|
1
|
+
import { createProfile, fetchArtist, fetchArtistLlms, fetchOpenApi, fetchSiteLlms, lookupCreator, reportIssue, } from './client.js';
|
|
2
|
+
import { invokeFleetAction } from './fleet-client.js';
|
|
3
|
+
import { FLEET_COMMANDS } from './fleet-contract.generated.js';
|
|
2
4
|
function required(input) {
|
|
3
5
|
return input.arg ?? '';
|
|
4
6
|
}
|
|
7
|
+
const REPORT_FLAGS = [
|
|
8
|
+
{ name: 'title', description: 'One-line summary', required: true },
|
|
9
|
+
{
|
|
10
|
+
name: 'details',
|
|
11
|
+
description: 'What you tried, what happened, what you expected',
|
|
12
|
+
required: true,
|
|
13
|
+
},
|
|
14
|
+
{ name: 'command', description: 'Jovie command or tool that failed' },
|
|
15
|
+
{ name: 'code', description: 'apiCode/error code you received' },
|
|
16
|
+
{ name: 'scenario', description: 'Task or scenario you were attempting' },
|
|
17
|
+
];
|
|
18
|
+
function report(kind) {
|
|
19
|
+
return (input, options) => reportIssue({
|
|
20
|
+
kind,
|
|
21
|
+
title: input.flags?.title ?? '',
|
|
22
|
+
details: input.flags?.details ?? '',
|
|
23
|
+
}, {
|
|
24
|
+
command: input.flags?.command,
|
|
25
|
+
apiCode: input.flags?.code,
|
|
26
|
+
scenario: input.flags?.scenario,
|
|
27
|
+
channel: input.meta?.channel,
|
|
28
|
+
cliVersion: input.meta?.version,
|
|
29
|
+
platform: `${process.platform}-${process.arch}`,
|
|
30
|
+
runtime: `node ${process.versions.node}`,
|
|
31
|
+
}, options);
|
|
32
|
+
}
|
|
5
33
|
export const COMMANDS = [
|
|
34
|
+
...FLEET_COMMANDS.map(command => ({
|
|
35
|
+
internal: true,
|
|
36
|
+
path: command.path,
|
|
37
|
+
tool: command.tool,
|
|
38
|
+
summary: command.summary,
|
|
39
|
+
readOnly: command.readOnly,
|
|
40
|
+
flags: [
|
|
41
|
+
{
|
|
42
|
+
name: 'profile',
|
|
43
|
+
description: 'Provisioned worker profile UUID',
|
|
44
|
+
required: true,
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
name: 'idempotency-key',
|
|
48
|
+
description: 'Stable retry key for this invocation',
|
|
49
|
+
required: true,
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
name: 'input',
|
|
53
|
+
description: 'Canonical domain input as JSON',
|
|
54
|
+
required: true,
|
|
55
|
+
},
|
|
56
|
+
],
|
|
57
|
+
run: (input, options) => invokeFleetAction(command.id, {
|
|
58
|
+
profile: input.flags?.profile ?? '',
|
|
59
|
+
key: input.flags?.['idempotency-key'] ?? '',
|
|
60
|
+
value: input.flags?.input ?? '',
|
|
61
|
+
channel: input.meta?.channel ?? 'cli',
|
|
62
|
+
version: input.meta?.version ?? '0.0.0',
|
|
63
|
+
}, options),
|
|
64
|
+
})),
|
|
6
65
|
{
|
|
7
66
|
path: ['profile', 'create'],
|
|
8
67
|
tool: 'create_profile',
|
|
@@ -14,6 +73,17 @@ export const COMMANDS = [
|
|
|
14
73
|
readOnly: false,
|
|
15
74
|
run: (input, options) => createProfile(required(input), options),
|
|
16
75
|
},
|
|
76
|
+
{
|
|
77
|
+
path: ['creator', 'lookup'],
|
|
78
|
+
tool: 'lookup_creator',
|
|
79
|
+
summary: 'Resolve a creator to their existing Jovie profile or extract public fields. Accepts a profile URL or platform:handle (youtube, instagram, tiktok, linktree). Never creates a profile.',
|
|
80
|
+
arg: {
|
|
81
|
+
name: 'url-or-handle',
|
|
82
|
+
description: 'Creator profile URL or platform:handle, e.g. youtube:@creator',
|
|
83
|
+
},
|
|
84
|
+
readOnly: true,
|
|
85
|
+
run: (input, options) => lookupCreator(required(input), options),
|
|
86
|
+
},
|
|
17
87
|
{
|
|
18
88
|
path: ['artist', 'get'],
|
|
19
89
|
tool: 'get_artist',
|
|
@@ -45,6 +115,22 @@ export const COMMANDS = [
|
|
|
45
115
|
readOnly: true,
|
|
46
116
|
run: (input, options) => fetchSiteLlms(input.full === true, options),
|
|
47
117
|
},
|
|
118
|
+
{
|
|
119
|
+
path: ['report', 'bug'],
|
|
120
|
+
tool: 'report_issue',
|
|
121
|
+
summary: 'Report a Jovie bug you hit (something failed or returned wrong data). Returns a reportId.',
|
|
122
|
+
flags: REPORT_FLAGS,
|
|
123
|
+
readOnly: false,
|
|
124
|
+
run: report('bug'),
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
path: ['report', 'feedback'],
|
|
128
|
+
tool: 'report_feedback',
|
|
129
|
+
summary: 'Send feedback on Jovie (confusing, missing, or slow). Returns a reportId.',
|
|
130
|
+
flags: REPORT_FLAGS,
|
|
131
|
+
readOnly: false,
|
|
132
|
+
run: report('feedback'),
|
|
133
|
+
},
|
|
48
134
|
];
|
|
49
135
|
export function findCommand(positionals) {
|
|
50
136
|
return COMMANDS.find(command => command.path[0] === positionals[0] && command.path[1] === positionals[1]);
|
package/dist/commands.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,WAAW,EACX,eAAe,EACf,YAAY,EACZ,aAAa,
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"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"}
|