@getstackrun/cli 0.8.2 → 0.9.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/api.d.ts CHANGED
@@ -11,7 +11,7 @@ export declare function requireToken(): Promise<string>;
11
11
  * Returns parsed JSON on success. On error: prints to stderr (with the
12
12
  * actual API reason) and exits 1.
13
13
  */
14
- export declare function api<T = unknown>(method: 'GET' | 'POST' | 'PATCH' | 'DELETE', path: string, opts?: {
14
+ export declare function api<T = unknown>(method: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE', path: string, opts?: {
15
15
  body?: unknown;
16
16
  query?: Record<string, string | number | undefined>;
17
17
  expectEmpty?: boolean;
package/dist/api.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAeA,eAAO,MAAM,OAAO,QAAqD,CAAC;AAE1E;;;;GAIG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAOpD;AAED;;;;;GAKG;AACH,wBAAsB,GAAG,CAAC,CAAC,GAAG,OAAO,EACnC,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,EAC3C,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAA;CAAE,GACpG,OAAO,CAAC,CAAC,CAAC,CAuCZ;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAUnF;AAED;;;;;;;;;GASG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAYtE"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAeA,eAAO,MAAM,OAAO,QAAqD,CAAC;AAE1E;;;;GAIG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAOpD;AAED;;;;;GAKG;AACH,wBAAsB,GAAG,CAAC,CAAC,GAAG,OAAO,EACnC,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,EACnD,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAA;CAAE,GACpG,OAAO,CAAC,CAAC,CAAC,CAuCZ;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAUnF;AAED;;;;;;;;;GASG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAYtE"}
package/dist/api.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
package/dist/auth.d.ts CHANGED
@@ -8,6 +8,10 @@ export declare function cmdLogout(): Promise<void>;
8
8
  * Returns a fresh access token by exchanging the stored refresh token.
9
9
  * Falls back to STACK_API_KEY env var for back-compat with existing
10
10
  * users who haven't migrated. Returns null when no auth source exists.
11
+ *
12
+ * Refresh rotation is single-flight per machine via a file lock at
13
+ * ~/.stack/credentials.lock. See acquireRefreshLock above for the
14
+ * race this prevents.
11
15
  */
12
16
  export declare function getAccessToken(): Promise<string | null>;
13
17
  //# sourceMappingURL=auth.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAkCA,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAGrD;AAMD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAYzD;AA0HD,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CA0E9C;AAED,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAkB/C;AAED,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAmB/C;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA2C7D"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAkCA,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAGrD;AAMD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAYzD;AA+KD,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CA0E9C;AAED,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAkB/C;AAED,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAmB/C;AAED;;;;;;;;;GASG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAyD7D"}
package/dist/auth.js CHANGED
@@ -15,7 +15,7 @@
15
15
  import { stdout, stderr, env, exit, platform, argv } from 'node:process';
16
16
  import { homedir } from 'node:os';
17
17
  import { join } from 'node:path';
18
- import { mkdir, writeFile, readFile, chmod, unlink } from 'node:fs/promises';
18
+ import { mkdir, writeFile, readFile, chmod, unlink, stat } from 'node:fs/promises';
19
19
  import { spawn } from 'node:child_process';
20
20
  import { createHash, randomBytes } from 'node:crypto';
21
21
  const API_URL = env['STACK_API_URL'] ?? 'https://api.getstack.run';
@@ -66,6 +66,64 @@ const C = {
66
66
  };
67
67
  const CREDS_DIR = join(homedir(), '.stack');
68
68
  const CREDS_PATH = join(CREDS_DIR, 'credentials.json');
69
+ const LOCK_PATH = join(CREDS_DIR, 'credentials.lock');
70
+ // Single-flight lock around refresh-token rotation. Two concurrent
71
+ // `npx @getstackrun/cli ...` invocations would otherwise both POST the
72
+ // same refresh_token A; the server rotates A→B for the first caller,
73
+ // then sees A again from the second caller, detects family reuse, and
74
+ // revokes the whole family. Founder hit this 2× on 2026-05-11.
75
+ //
76
+ // Mechanism: atomic exclusive-create writeFile(..., flag: 'wx'). Whoever
77
+ // wins the create holds the lock; losers wait + retry. After acquiring
78
+ // the lock the caller MUST re-read creds from disk, because the
79
+ // previous holder may have just rotated A→B (the disk now holds B —
80
+ // posting A would still fire reuse detection on the server). Stale
81
+ // locks (process crashed without releasing) self-clear after 30s by
82
+ // mtime check.
83
+ const LOCK_ACQUIRE_TIMEOUT_MS = 5_000;
84
+ const LOCK_RETRY_INTERVAL_MS = 50;
85
+ const LOCK_STALE_MS = 30_000;
86
+ async function acquireRefreshLock() {
87
+ await mkdir(CREDS_DIR, { recursive: true });
88
+ const deadline = Date.now() + LOCK_ACQUIRE_TIMEOUT_MS;
89
+ while (Date.now() < deadline) {
90
+ try {
91
+ // 'wx' = O_CREAT | O_EXCL — fails with EEXIST if the file exists.
92
+ // Atomic on every platform Node supports. Write our PID so a
93
+ // future cross-process diagnostic can identify the holder.
94
+ await writeFile(LOCK_PATH, String(process.pid), { flag: 'wx' });
95
+ return async () => {
96
+ try {
97
+ await unlink(LOCK_PATH);
98
+ }
99
+ catch { /* already gone */ }
100
+ };
101
+ }
102
+ catch (err) {
103
+ if (err.code !== 'EEXIST') {
104
+ // Permission error / disk full / etc. Degrade to lock-free —
105
+ // equivalent to pre-fix behavior, not worse.
106
+ return async () => { };
107
+ }
108
+ // Stale-lock detection: the holder may have crashed without
109
+ // releasing. mtime older than LOCK_STALE_MS → safe to clear.
110
+ try {
111
+ const st = await stat(LOCK_PATH);
112
+ if (Date.now() - st.mtimeMs > LOCK_STALE_MS) {
113
+ try {
114
+ await unlink(LOCK_PATH);
115
+ }
116
+ catch { /* race with another waiter; retry */ }
117
+ continue;
118
+ }
119
+ }
120
+ catch { /* lock vanished between EEXIST and stat — loop and retry create */ }
121
+ await new Promise((r) => setTimeout(r, LOCK_RETRY_INTERVAL_MS));
122
+ }
123
+ }
124
+ // Timed out. Proceed lock-free — same race window as today, no worse.
125
+ return async () => { };
126
+ }
69
127
  async function readCreds() {
70
128
  try {
71
129
  const raw = await readFile(CREDS_PATH, 'utf8');
@@ -281,50 +339,69 @@ export async function cmdLogout() {
281
339
  * Returns a fresh access token by exchanging the stored refresh token.
282
340
  * Falls back to STACK_API_KEY env var for back-compat with existing
283
341
  * users who haven't migrated. Returns null when no auth source exists.
342
+ *
343
+ * Refresh rotation is single-flight per machine via a file lock at
344
+ * ~/.stack/credentials.lock. See acquireRefreshLock above for the
345
+ * race this prevents.
284
346
  */
285
347
  export async function getAccessToken() {
286
348
  const apiKey = env['STACK_API_KEY'];
287
349
  if (apiKey)
288
- return apiKey; // legacy path
289
- const creds = await readCreds();
290
- if (!creds)
350
+ return apiKey; // legacy path — no rotation, no lock needed
351
+ // Early-exit when not signed in. Avoids acquiring a lock just to
352
+ // discover there are no creds.
353
+ const probe = await readCreds();
354
+ if (!probe)
291
355
  return null;
292
- const res = await fetch(`${API_URL}/oauth/token`, {
293
- method: 'POST',
294
- headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
295
- body: new URLSearchParams({
296
- grant_type: 'refresh_token',
297
- refresh_token: creds.refresh_token,
298
- client_id: creds.client_id,
299
- }),
300
- });
301
- if (!res.ok) {
302
- const data = (await res.json().catch(() => ({})));
303
- // Surface the actual reason on stderr instead of silently returning
304
- // null. Previously a refresh failure produced just "not signed in"
305
- // downstream — impossible to diagnose. Now: print the OAuth error
306
- // code (invalid_grant, expired, reuse_detected, etc.) before falling
307
- // through. Caller still gets null so existing branches don't change.
308
- const reason = stringifyOAuthError(data);
309
- stderr.write(`${C.yellow}stack-cli:${C.reset} refresh failed (${reason}). Re-authenticate with ${C.cyan}${invokeHint('auth login')}${C.reset}.\n`);
310
- const errorCode = typeof data.error === 'string'
311
- ? data.error
312
- : (typeof data.error === 'object' && data.error?.code) || '';
313
- if (errorCode === 'invalid_grant') {
314
- // Refresh revoked or family broken — wipe and force re-login.
315
- await deleteCreds();
356
+ const releaseLock = await acquireRefreshLock();
357
+ try {
358
+ // CRITICAL: re-read AFTER acquiring the lock. A peer process may
359
+ // have rotated A→B while we waited; the disk now holds B and
360
+ // posting the stale A would fire the server's family-reuse detector
361
+ // and revoke everyone's refresh.
362
+ const creds = await readCreds();
363
+ if (!creds)
364
+ return null;
365
+ const res = await fetch(`${API_URL}/oauth/token`, {
366
+ method: 'POST',
367
+ headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
368
+ body: new URLSearchParams({
369
+ grant_type: 'refresh_token',
370
+ refresh_token: creds.refresh_token,
371
+ client_id: creds.client_id,
372
+ }),
373
+ });
374
+ if (!res.ok) {
375
+ const data = (await res.json().catch(() => ({})));
376
+ // Surface the actual reason on stderr instead of silently returning
377
+ // null. Previously a refresh failure produced just "not signed in"
378
+ // downstream — impossible to diagnose. Now: print the OAuth error
379
+ // code (invalid_grant, expired, reuse_detected, etc.) before falling
380
+ // through. Caller still gets null so existing branches don't change.
381
+ const reason = stringifyOAuthError(data);
382
+ stderr.write(`${C.yellow}stack-cli:${C.reset} refresh failed (${reason}). Re-authenticate with ${C.cyan}${invokeHint('auth login')}${C.reset}.\n`);
383
+ const errorCode = typeof data.error === 'string'
384
+ ? data.error
385
+ : (typeof data.error === 'object' && data.error?.code) || '';
386
+ if (errorCode === 'invalid_grant') {
387
+ // Refresh revoked or family broken — wipe and force re-login.
388
+ await deleteCreds();
389
+ }
390
+ return null;
316
391
  }
317
- return null;
392
+ const data = (await res.json());
393
+ // Rotate stored refresh.
394
+ await writeCreds({
395
+ ...creds,
396
+ refresh_token: data.refresh_token,
397
+ issued_at: Math.floor(Date.now() / 1000),
398
+ refresh_expires_at: Math.floor(Date.now() / 1000) + 30 * 24 * 60 * 60,
399
+ });
400
+ return data.access_token;
401
+ }
402
+ finally {
403
+ await releaseLock();
318
404
  }
319
- const data = (await res.json());
320
- // Rotate stored refresh.
321
- await writeCreds({
322
- ...creds,
323
- refresh_token: data.refresh_token,
324
- issued_at: Math.floor(Date.now() / 1000),
325
- refresh_expires_at: Math.floor(Date.now() / 1000) + 30 * 24 * 60 * 60,
326
- });
327
- return data.access_token;
328
405
  }
329
406
  // Suppress unused-import warnings for crypto helpers we may need in
330
407
  // future Phase-2 SDK-keypair-style additions; safe no-op today.
package/dist/auth.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"detectors.d.ts","sourceRoot":"","sources":["../src/detectors.ts"],"names":[],"mappings":"AA8EA,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAuB/D"}
1
+ {"version":3,"file":"detectors.d.ts","sourceRoot":"","sources":["../src/detectors.ts"],"names":[],"mappings":"AAqGA,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA+B/D"}
package/dist/detectors.js CHANGED
@@ -1,73 +1,89 @@
1
- // detectors subcommands — per-operator detector configuration + the
2
- // named-intent catalog.
1
+ // detectors subcommands — per-operator detector customization (L7).
2
+ //
3
+ // API shape (apps/api/src/routes/detector-config.ts):
4
+ // GET /v1/detectors/config → { configs: [...] }
5
+ // GET /v1/detectors/:detector_key/config → single row (404 if none)
6
+ // PUT /v1/detectors/:detector_key/config → upsert
7
+ // DELETE /v1/detectors/:detector_key/config → reset to defaults
8
+ //
9
+ // PUT body (UpsertInput, studio+ only):
10
+ // {
11
+ // custom_patterns?: [{id, regex, severity: 'warning'|'critical', description}],
12
+ // whitelist_patterns?: [{id, regex, description}],
13
+ // severity_overrides?: { <pattern_id>: 'warning'|'critical' },
14
+ // enabled?: boolean
15
+ // }
16
+ //
17
+ // The earlier CLI used the wrong URL pattern (`/v1/detectors/configs`
18
+ // plural, with detector_id IN the body), the wrong method (POST instead
19
+ // of PUT), and a fictitious flat body shape (severity / threshold).
20
+ // All four CLI subcommands would have 404'd or 400'd today.
3
21
  import { stdout, stderr, exit } from 'node:process';
4
22
  import { readFile } from 'node:fs/promises';
5
23
  import { api, takeFlag } from './api.js';
6
24
  import { invokeHint } from './auth.js';
7
25
  import { printJson, printTable, printRecord, fmt } from './format.js';
8
26
  async function cmdList(json) {
9
- const out = await api('GET', '/v1/detectors/configs');
27
+ const out = await api('GET', '/v1/detectors/config');
28
+ const list = Array.isArray(out) ? out : (out?.configs ?? []);
10
29
  if (json)
11
- return printJson(out);
12
- if (!Array.isArray(out) || out.length === 0) {
13
- stdout.write('(no detector configs — all detectors using defaults)\n');
30
+ return printJson(list);
31
+ if (!Array.isArray(list) || list.length === 0) {
32
+ stdout.write('(no detector configs — every detector running on defaults)\n');
14
33
  return;
15
34
  }
16
- const rows = out.map((d) => [
17
- d.detector_id,
18
- d.severity ?? '—',
19
- d.enabled === false ? fmt.dim('off') : fmt.ok('on'),
20
- d.threshold != null ? String(d.threshold) : '—',
21
- ]);
22
- printTable(['DETECTOR', 'SEVERITY', 'ENABLED', 'THRESHOLD'], rows);
35
+ const rows = list.map((d) => {
36
+ const customCount = Array.isArray(d.custom_patterns) ? d.custom_patterns.length : 0;
37
+ const whitelistCount = Array.isArray(d.whitelist_patterns) ? d.whitelist_patterns.length : 0;
38
+ const overrideCount = d.severity_overrides ? Object.keys(d.severity_overrides).length : 0;
39
+ return [
40
+ d.detector_key,
41
+ d.enabled === false ? fmt.dim('off') : fmt.ok('on'),
42
+ String(customCount),
43
+ String(whitelistCount),
44
+ String(overrideCount),
45
+ ];
46
+ });
47
+ printTable(['DETECTOR', 'STATE', 'CUSTOM', 'WHITELIST', 'OVERRIDES'], rows);
23
48
  }
24
- async function cmdShow(detectorId, json) {
25
- const out = await api('GET', `/v1/detectors/configs/${encodeURIComponent(detectorId)}`);
49
+ async function cmdShow(detectorKey, json) {
50
+ const out = await api('GET', `/v1/detectors/${encodeURIComponent(detectorKey)}/config`);
26
51
  if (json)
27
52
  return printJson(out);
28
53
  printRecord(out);
29
54
  }
30
- async function cmdUpsert(detectorId, args, json) {
31
- const severity = takeFlag(args, '--severity');
32
- const enabled = takeFlag(args, '--enabled');
33
- const threshold = takeFlag(args, '--threshold');
55
+ async function cmdEnable(detectorKey, enabled, json) {
56
+ const out = await api('PUT', `/v1/detectors/${encodeURIComponent(detectorKey)}/config`, {
57
+ body: { enabled },
58
+ });
59
+ if (json)
60
+ return printJson(out);
61
+ stdout.write(`${detectorKey} → ${enabled ? 'enabled' : 'disabled'}\n`);
62
+ }
63
+ async function cmdConfigure(detectorKey, args, json) {
64
+ // Free-form config edits go through --from-file because the shape
65
+ // (custom_patterns / whitelist_patterns / severity_overrides) is too
66
+ // structured for ergonomic CLI flags.
34
67
  const fromFile = takeFlag(args, '--from-file');
35
- let body = { detector_id: detectorId };
36
- if (typeof fromFile === 'string') {
37
- body = { ...body, ...JSON.parse(await readFile(fromFile, 'utf8')) };
38
- }
39
- else {
40
- if (typeof severity === 'string')
41
- body.severity = severity;
42
- if (enabled !== undefined)
43
- body.enabled = enabled === true || enabled === 'true';
44
- if (typeof threshold === 'string')
45
- body.threshold = parseFloat(threshold);
46
- }
47
- if (Object.keys(body).length === 1) {
48
- stderr.write(`usage: ${invokeHint(`detector upsert ${detectorId} [--severity ...] [--enabled true|false] [--threshold N] OR --from-file <config.json>`)}\n`);
68
+ if (typeof fromFile !== 'string') {
69
+ stderr.write(`usage: ${invokeHint(`detector configure ${detectorKey} --from-file <config.json>`)}\n`
70
+ + `Body shape: { custom_patterns?: [{id, regex, severity, description}],\n`
71
+ + ` whitelist_patterns?: [{id, regex, description}],\n`
72
+ + ` severity_overrides?: { <pattern_id>: 'warning'|'critical' },\n`
73
+ + ` enabled?: boolean }\n`);
49
74
  exit(2);
50
75
  }
51
- const out = await api('POST', '/v1/detectors/configs', { body });
76
+ const body = JSON.parse(await readFile(fromFile, 'utf8'));
77
+ const out = await api('PUT', `/v1/detectors/${encodeURIComponent(detectorKey)}/config`, { body });
52
78
  if (json)
53
79
  return printJson(out);
54
80
  printRecord(out);
55
81
  }
56
- async function cmdReset(detectorId, json) {
57
- const out = await api('DELETE', `/v1/detectors/configs/${encodeURIComponent(detectorId)}`);
82
+ async function cmdReset(detectorKey, json) {
83
+ const out = await api('DELETE', `/v1/detectors/${encodeURIComponent(detectorKey)}/config`);
58
84
  if (json)
59
85
  return printJson(out);
60
- stdout.write(`reset ${detectorId} to defaults\n`);
61
- }
62
- async function cmdIntents(args, json) {
63
- const provider = takeFlag(args, '--provider');
64
- const out = await api('GET', '/v1/intents', {
65
- query: { provider: typeof provider === 'string' ? provider : undefined },
66
- });
67
- const list = Array.isArray(out) ? out : (out?.intents ?? []);
68
- if (json)
69
- return printJson(list);
70
- printJson(list);
86
+ stdout.write(`reset ${detectorKey} to defaults\n`);
71
87
  }
72
88
  export async function cmdDetector(args) {
73
89
  const json = !!takeFlag(args, '--json');
@@ -77,28 +93,41 @@ export async function cmdDetector(args) {
77
93
  return cmdList(json);
78
94
  if (sub === 'show' || sub === 'get') {
79
95
  if (!arg1) {
80
- stderr.write(`usage: ${invokeHint('detector show <detector-id>')}\n`);
96
+ stderr.write(`usage: ${invokeHint('detector show <detector-key>')}\n`);
81
97
  exit(2);
82
98
  }
83
99
  return cmdShow(arg1, json);
84
100
  }
85
- if (sub === 'upsert' || sub === 'set') {
101
+ if (sub === 'enable') {
102
+ if (!arg1) {
103
+ stderr.write(`usage: ${invokeHint('detector enable <detector-key>')}\n`);
104
+ exit(2);
105
+ }
106
+ return cmdEnable(arg1, true, json);
107
+ }
108
+ if (sub === 'disable') {
109
+ if (!arg1) {
110
+ stderr.write(`usage: ${invokeHint('detector disable <detector-key>')}\n`);
111
+ exit(2);
112
+ }
113
+ return cmdEnable(arg1, false, json);
114
+ }
115
+ if (sub === 'configure' || sub === 'upsert' || sub === 'set') {
86
116
  if (!arg1) {
87
- stderr.write(`usage: ${invokeHint('detector upsert <detector-id> [--severity ...] [--enabled ...] [--threshold ...]')}\n`);
117
+ stderr.write(`usage: ${invokeHint('detector configure <detector-key> --from-file <config.json>')}\n`);
88
118
  exit(2);
89
119
  }
90
- return cmdUpsert(arg1, args.slice(2), json);
120
+ return cmdConfigure(arg1, args.slice(2), json);
91
121
  }
92
122
  if (sub === 'reset') {
93
123
  if (!arg1) {
94
- stderr.write(`usage: ${invokeHint('detector reset <detector-id>')}\n`);
124
+ stderr.write(`usage: ${invokeHint('detector reset <detector-key>')}\n`);
95
125
  exit(2);
96
126
  }
97
127
  return cmdReset(arg1, json);
98
128
  }
99
- if (sub === 'intents')
100
- return cmdIntents(args.slice(1), json);
101
- stderr.write(`error: unknown detector subcommand "${sub ?? ''}".\nUse list | show | upsert | reset | intents\n`);
129
+ stderr.write(`error: unknown detector subcommand "${sub ?? ''}".\nUse list | show | enable | disable | configure | reset\n`
130
+ + `(configure/enable/disable/reset require studio+ tier on the API side)\n`);
102
131
  exit(2);
103
132
  }
104
133
  //# sourceMappingURL=detectors.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"detectors.js","sourceRoot":"","sources":["../src/detectors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"detectors.js","sourceRoot":"","sources":["../src/detectors.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"dropoffs.d.ts","sourceRoot":"","sources":["../src/dropoffs.ts"],"names":[],"mappings":"AA+GA,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAwC9D"}
1
+ {"version":3,"file":"dropoffs.d.ts","sourceRoot":"","sources":["../src/dropoffs.ts"],"names":[],"mappings":"AAwHA,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAwC9D"}
package/dist/dropoffs.js CHANGED
@@ -5,7 +5,7 @@
5
5
  // CLI reads + parses it before POSTing.
6
6
  import { stdout, stderr, exit } from 'node:process';
7
7
  import { readFile } from 'node:fs/promises';
8
- import { api, takeFlag } from './api.js';
8
+ import { api, takeFlag, resolveAgentId } from './api.js';
9
9
  import { invokeHint } from './auth.js';
10
10
  import { printJson, printTable, printRecord, fmt, fmtTs } from './format.js';
11
11
  async function readJsonFile(path) {
@@ -30,19 +30,26 @@ async function cmdShow(id, json) {
30
30
  printRecord(out);
31
31
  }
32
32
  async function cmdCreate(args, json) {
33
- const from = takeFlag(args, '--from');
34
- const to = takeFlag(args, '--to');
33
+ const fromArg = takeFlag(args, '--from');
34
+ const toArg = takeFlag(args, '--to');
35
35
  const schemaPath = takeFlag(args, '--schema');
36
36
  const ttl = takeFlag(args, '--ttl');
37
37
  const onExpire = takeFlag(args, '--on-expire');
38
- if (typeof from !== 'string' || typeof to !== 'string' || typeof schemaPath !== 'string') {
39
- stderr.write(`usage: ${invokeHint('dropoff create --from <agent-id> --to <agent-id> --schema <file.json> [--ttl <seconds>] [--on-expire notify|retry|fail]')}\n`);
38
+ if (typeof fromArg !== 'string' || typeof toArg !== 'string' || typeof schemaPath !== 'string') {
39
+ stderr.write(`usage: ${invokeHint('dropoff create --from <name-or-id> --to <name-or-id> --schema <file.json> [--ttl <seconds>] [--on-expire notify|retry|fail]')}\n`);
40
40
  exit(2);
41
41
  }
42
+ // Resolve human names → agt_* ids before posting. Mirrors the pattern
43
+ // every other --agent-style flag in the CLI uses.
44
+ const from = await resolveAgentId(fromArg);
45
+ const to = await resolveAgentId(toArg);
42
46
  const schema = await readJsonFile(schemaPath);
47
+ // Field names match CreateDropoffInput in @stack/shared: from_agent /
48
+ // to_agent (NOT from_agent_id / to_agent_id — earlier CLI sent the
49
+ // _id-suffixed names and got a ZodError).
43
50
  const body = {
44
- from_agent_id: from,
45
- to_agent_id: to,
51
+ from_agent: from,
52
+ to_agent: to,
46
53
  schema,
47
54
  };
48
55
  if (typeof ttl === 'string')
@@ -55,12 +62,13 @@ async function cmdCreate(args, json) {
55
62
  stdout.write(`created ${out.id}\n from ${out.from_agent_id} → ${out.to_agent_id}\n expires ${fmtTs(out.expires_at)}\n`);
56
63
  }
57
64
  async function cmdDeposit(id, args, json) {
58
- const agentId = takeFlag(args, '--agent');
65
+ const agentArg = takeFlag(args, '--agent');
59
66
  const payloadPath = takeFlag(args, '--payload');
60
- if (typeof agentId !== 'string' || typeof payloadPath !== 'string') {
61
- stderr.write(`usage: ${invokeHint('dropoff deposit <id> --agent <agent-id> --payload <file.json>')}\n`);
67
+ if (typeof agentArg !== 'string' || typeof payloadPath !== 'string') {
68
+ stderr.write(`usage: ${invokeHint('dropoff deposit <id> --agent <name-or-id> --payload <file.json>')}\n`);
62
69
  exit(2);
63
70
  }
71
+ const agentId = await resolveAgentId(agentArg);
64
72
  const payload = await readJsonFile(payloadPath);
65
73
  const out = await api('POST', `/v1/dropoffs/${encodeURIComponent(id)}/deposit`, {
66
74
  body: { agent_id: agentId, payload },
@@ -70,11 +78,12 @@ async function cmdDeposit(id, args, json) {
70
78
  stdout.write(`deposited to ${id}\n`);
71
79
  }
72
80
  async function cmdCollect(id, args, json) {
73
- const agentId = takeFlag(args, '--agent');
74
- if (typeof agentId !== 'string') {
75
- stderr.write(`usage: ${invokeHint('dropoff collect <id> --agent <agent-id>')}\n`);
81
+ const agentArg = takeFlag(args, '--agent');
82
+ if (typeof agentArg !== 'string') {
83
+ stderr.write(`usage: ${invokeHint('dropoff collect <id> --agent <name-or-id>')}\n`);
76
84
  exit(2);
77
85
  }
86
+ const agentId = await resolveAgentId(agentArg);
78
87
  const out = await api('POST', `/v1/dropoffs/${encodeURIComponent(id)}/collect`, {
79
88
  body: { agent_id: agentId },
80
89
  });
@@ -114,14 +123,14 @@ export async function cmdDropoff(args) {
114
123
  return cmdCreate(args.slice(1), json);
115
124
  if (sub === 'deposit') {
116
125
  if (!arg1) {
117
- stderr.write(`usage: ${invokeHint('dropoff deposit <id> --agent <agent-id> --payload <file.json>')}\n`);
126
+ stderr.write(`usage: ${invokeHint('dropoff deposit <id> --agent <name-or-id> --payload <file.json>')}\n`);
118
127
  exit(2);
119
128
  }
120
129
  return cmdDeposit(arg1, args.slice(2), json);
121
130
  }
122
131
  if (sub === 'collect') {
123
132
  if (!arg1) {
124
- stderr.write(`usage: ${invokeHint('dropoff collect <id> --agent <agent-id>')}\n`);
133
+ stderr.write(`usage: ${invokeHint('dropoff collect <id> --agent <name-or-id>')}\n`);
125
134
  exit(2);
126
135
  }
127
136
  return cmdCollect(arg1, args.slice(2), json);