@getstackrun/cli 0.4.2 → 0.6.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 CHANGED
@@ -1,41 +1,65 @@
1
1
  # @getstackrun/cli
2
2
 
3
- Tail STACK runtime activity in your terminal.
3
+ Tail STACK runtime activity in your terminal. Sign in via OAuth Device flow.
4
4
 
5
5
  ```sh
6
- # replay a real-shape demo (no auth needed)
7
- npx @getstackrun/cli monitor --demo --loop
6
+ # Sign in (browser opens, RFC 8628 Device flow)
7
+ npx @getstackrun/cli auth login
8
8
 
9
- # tail your own audit_log
10
- STACK_API_KEY=sk_live_… npx @getstackrun/cli monitor --follow
9
+ # Tail your audit_log — no env vars needed after auth login
10
+ npx @getstackrun/cli monitor --follow
11
+
12
+ # Replay a real-shape demo (no auth needed)
13
+ npx @getstackrun/cli monitor --demo --loop
11
14
  ```
12
15
 
13
- Both modes render rows of the same shape — straight from `audit_log` columns
14
- on STACK's API. What you see in `--demo` is the same shape `--follow` will
15
- produce against your own data.
16
+ Both monitor modes render rows of the same shape — straight from `audit_log` columns
17
+ on STACK's API. What you see in `--demo` is the same shape `--follow` produces against
18
+ your own data.
16
19
 
17
20
  ## Commands
18
21
 
22
+ ### `auth`
23
+
24
+ ```
25
+ auth login Sign in via the browser (Device flow, RFC 8628).
26
+ Stores a refresh token at ~/.stack/credentials.json
27
+ with mode 0600. SDKs read it automatically.
28
+ auth status Show the current sign-in state (operator email, scope, expiry).
29
+ auth logout Revoke the refresh token and clear the local file.
30
+ ```
31
+
19
32
  ### `monitor`
20
33
 
21
34
  ```
22
35
  --demo Replay a real-shape mission (no auth needed).
23
36
  Same row format as --follow, just scripted.
24
- --follow Tail your operator's actual audit_log.
25
- Requires STACK_API_KEY env var. Polls every 2s.
37
+ --follow Tail your operator's actual audit_log. Polls
38
+ every 2s. Auth picked in priority order:
39
+ 1. STACK_API_KEY env var (legacy CI path)
40
+ 2. ~/.stack/credentials.json (auth login)
26
41
  --loop Loop the demo until Ctrl-C (default is one run).
27
42
  --agent <agent_id> (--follow) Only show entries for this agent.
28
43
  --jti <passport_jti> (--follow) Only show entries for this passport.
44
+ --sandbox (--follow) Tail the public sandbox feed at
45
+ https://api.getstack.run/v1/public/events.
46
+ No auth needed.
29
47
  ```
30
48
 
31
49
  #### Examples
32
50
 
33
51
  ```sh
34
52
  # Tail one agent
35
- STACK_API_KEY=sk_live_… npx @getstackrun/cli monitor --follow --agent abc123
53
+ npx @getstackrun/cli monitor --follow --agent agt_abc123
36
54
 
37
- # Tail one passport (e.g. for debugging a specific revoke chain)
38
- STACK_API_KEY=sk_live_… npx @getstackrun/cli monitor --follow --jti pas_xyz789
55
+ # Tail one passport (e.g. debugging a specific revoke chain)
56
+ npx @getstackrun/cli monitor --follow --jti pas_xyz789
57
+
58
+ # Tail the public sandbox (no signup, no key)
59
+ npx @getstackrun/cli monitor --follow --sandbox
60
+
61
+ # CI mode (no browser)
62
+ STACK_API_KEY=sk_live_… npx @getstackrun/cli monitor --follow
39
63
  ```
40
64
 
41
65
  ### `register`
@@ -46,10 +70,26 @@ npx @getstackrun/cli register
46
70
 
47
71
  Prints signup + MCP-install instructions for connecting STACK to Claude Code.
48
72
 
49
- ## Get an API key
73
+ ## Authentication
74
+
75
+ `auth login` runs the OAuth 2.1 Device Authorization Grant against
76
+ `https://api.getstack.run`:
77
+
78
+ 1. CLI dynamically registers itself as a public PKCE client (one client_id per install).
79
+ 2. Server issues a `device_code` + a human-readable `user_code` (e.g. `WDJB-MJHT`).
80
+ 3. CLI prints the URL + opens your browser to `https://getstack.run/cli/auth?code=...`.
81
+ 4. You confirm the code and approve.
82
+ 5. CLI persists the refresh token to `~/.stack/credentials.json` (mode 0600).
83
+
84
+ Refresh tokens auto-rotate on every use. The same file is also read by both SDKs
85
+ (`@getstackrun/sdk` for TS/JS, `getstack` for Python), so signing in once gives all
86
+ three surfaces a working credential.
87
+
88
+ For CI environments without a browser: keep `STACK_API_KEY=sk_live_...` —
89
+ the CLI still accepts it as a fallback.
50
90
 
51
- Sign up at [getstack.run](https://getstack.run) (magic link, no password).
52
- Copy your key from the dashboard. Set as `STACK_API_KEY` to use `monitor --follow`.
91
+ See [/docs/security/stack-auth](https://getstack.run/docs/security/stack-auth) for
92
+ the full auth model.
53
93
 
54
94
  ## License
55
95
 
@@ -0,0 +1,6 @@
1
+ export declare function cmdAgentEnroll(nameOrId: string, opts: {
2
+ force?: boolean;
3
+ }): Promise<void>;
4
+ export declare function cmdAgentRotate(nameOrId: string): Promise<void>;
5
+ export declare function cmdAgent(args: string[]): Promise<void>;
6
+ //# sourceMappingURL=agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AA0MA,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA4C/F;AAKD,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEpE;AAGD,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAuB5D"}
package/dist/agent.js ADDED
@@ -0,0 +1,229 @@
1
+ // `stack agent enroll <name|id>` and `stack agent rotate <name|id>`.
2
+ //
3
+ // Pre-enrolls an agent from the CLI so an operator doesn't have to write
4
+ // SDK code first. Closes the arturo-shaped activation hole: register an
5
+ // agent in the dashboard, then enroll its keypair with one CLI command,
6
+ // then any subsequent SDK call (Python or TS) finds the existing
7
+ // ~/.stack/agents/<id>.json and skips re-enrollment.
8
+ //
9
+ // Silent path only — uses the operator's OAuth bearer (from
10
+ // `stack auth login`) or STACK_API_KEY. No browser bootstrap; the human
11
+ // has already authenticated to run this CLI.
12
+ //
13
+ // Same wire contract as packages/sdk/src/agent-auth.ts and
14
+ // sdk-python/src/getstack/agent_auth.py:
15
+ // POST /v1/agents/:id/enrollment-challenge → { challenge_id, challenge }
16
+ // sign challenge bytes with locally-generated Ed25519 privkey
17
+ // POST /v1/agents/:id/enroll [?force=true]
18
+ // body { public_key (JWK), challenge_id, signed_challenge }
19
+ // persist { agent_id, publicKey, privateKey, enrolled_at } to
20
+ // ~/.stack/agents/<id>.json (mode 0600)
21
+ import { env, stdout, stderr } from 'node:process';
22
+ import { generateKeyPairSync, sign as cryptoSign } from 'node:crypto';
23
+ import { writeFile, mkdir, chmod, readFile } from 'node:fs/promises';
24
+ import { existsSync } from 'node:fs';
25
+ import { join } from 'node:path';
26
+ import { homedir } from 'node:os';
27
+ import { getAccessToken } from './auth.js';
28
+ const API_URL = env['STACK_API_URL'] ?? 'https://api.getstack.run';
29
+ function keyPath(agentId) {
30
+ return join(homedir(), '.stack', 'agents', `${agentId}.json`);
31
+ }
32
+ async function bearer() {
33
+ const token = await getAccessToken();
34
+ if (token)
35
+ return token;
36
+ stderr.write('error: not signed in.\n' +
37
+ 'Run `stack-cli auth login` first, or set STACK_API_KEY.\n');
38
+ process.exit(2);
39
+ }
40
+ // Resolve a name OR id to an agent row. Names without the agt_ prefix
41
+ // are looked up via /v1/agents (operator-scoped). IDs starting with
42
+ // agt_ are fetched directly via /v1/agents/:id to give a clean 404 if
43
+ // the operator doesn't own it.
44
+ async function resolveAgent(nameOrId, token) {
45
+ if (nameOrId.startsWith('agt_')) {
46
+ const res = await fetch(`${API_URL}/v1/agents/${encodeURIComponent(nameOrId)}`, {
47
+ headers: { Authorization: `Bearer ${token}` },
48
+ });
49
+ if (res.status === 404) {
50
+ stderr.write(`error: no agent with id "${nameOrId}" in your operator.\n`);
51
+ process.exit(1);
52
+ }
53
+ if (!res.ok) {
54
+ const body = await res.text();
55
+ stderr.write(`error: failed to fetch agent (${res.status}): ${body.slice(0, 200)}\n`);
56
+ process.exit(1);
57
+ }
58
+ return (await res.json());
59
+ }
60
+ const listRes = await fetch(`${API_URL}/v1/agents`, {
61
+ headers: { Authorization: `Bearer ${token}` },
62
+ });
63
+ if (!listRes.ok) {
64
+ const body = await listRes.text();
65
+ stderr.write(`error: failed to list agents (${listRes.status}): ${body.slice(0, 200)}\n`);
66
+ process.exit(1);
67
+ }
68
+ const agents = (await listRes.json());
69
+ const match = agents.find((a) => a.name === nameOrId);
70
+ if (!match) {
71
+ stderr.write(`error: no agent named "${nameOrId}" in your operator.\n` +
72
+ `Register it first at https://getstack.run/agents.\n`);
73
+ process.exit(1);
74
+ }
75
+ return match;
76
+ }
77
+ // Convert a Node `crypto` Ed25519 public key to a {kty, crv, x} JWK.
78
+ // jwkExport on the public key gives the right shape directly.
79
+ function publicJwkFromKey(publicKey) {
80
+ const jwk = publicKey.export({ format: 'jwk' });
81
+ if (jwk.kty !== 'OKP' || jwk.crv !== 'Ed25519' || !jwk.x) {
82
+ throw new Error('keypair export did not yield an Ed25519 OKP JWK');
83
+ }
84
+ return { kty: jwk.kty, crv: jwk.crv, x: jwk.x };
85
+ }
86
+ function privateJwkFromKey(privateKey) {
87
+ const jwk = privateKey.export({ format: 'jwk' });
88
+ if (jwk.kty !== 'OKP' || jwk.crv !== 'Ed25519' || !jwk.x || !jwk.d) {
89
+ throw new Error('keypair export did not yield a private Ed25519 OKP JWK');
90
+ }
91
+ return { kty: jwk.kty, crv: jwk.crv, x: jwk.x, d: jwk.d };
92
+ }
93
+ // Persist with mode 0600. Best-effort chmod on Windows.
94
+ async function persist(stored) {
95
+ const path = keyPath(stored.agent_id);
96
+ await mkdir(join(homedir(), '.stack', 'agents'), { recursive: true });
97
+ await writeFile(path, JSON.stringify(stored, null, 2), 'utf8');
98
+ try {
99
+ await chmod(path, 0o600);
100
+ }
101
+ catch {
102
+ /* Windows / unsupported FS */
103
+ }
104
+ }
105
+ async function runEnroll(agentId, token, force) {
106
+ // Step 1: challenge.
107
+ const cRes = await fetch(`${API_URL}/v1/agents/${encodeURIComponent(agentId)}/enrollment-challenge`, {
108
+ method: 'POST',
109
+ headers: { Authorization: `Bearer ${token}`, 'Content-Type': 'application/json' },
110
+ });
111
+ if (!cRes.ok) {
112
+ const errBody = (await cRes.json().catch(() => ({})));
113
+ throw new Error(`enrollment-challenge failed (${cRes.status}): ${errBody.error?.message ?? cRes.statusText}`);
114
+ }
115
+ const { challenge_id, challenge } = (await cRes.json());
116
+ // Step 2: generate keypair locally.
117
+ const { publicKey, privateKey } = generateKeyPairSync('ed25519');
118
+ const publicJwk = publicJwkFromKey(publicKey);
119
+ const privateJwk = privateJwkFromKey(privateKey);
120
+ // Step 3: sign challenge. Node Ed25519 sign uses `sign(null, ...)`.
121
+ const signature = cryptoSign(null, Buffer.from(challenge, 'utf8'), privateKey);
122
+ const signed_challenge = signature.toString('base64url');
123
+ // Step 4: POST /enroll (with ?force=true on rotation).
124
+ const url = `${API_URL}/v1/agents/${encodeURIComponent(agentId)}/enroll${force ? '?force=true' : ''}`;
125
+ const eRes = await fetch(url, {
126
+ method: 'POST',
127
+ headers: { Authorization: `Bearer ${token}`, 'Content-Type': 'application/json' },
128
+ body: JSON.stringify({ public_key: publicJwk, challenge_id, signed_challenge }),
129
+ });
130
+ if (!eRes.ok) {
131
+ const errBody = (await eRes.json().catch(() => ({})));
132
+ const msg = errBody.error?.message ?? eRes.statusText;
133
+ if (eRes.status === 409) {
134
+ throw new Error(`agent already enrolled. Use \`stack-cli agent rotate ${agentId}\` (or pass --force) to rotate the keypair. ` +
135
+ `Rotation requires operator-admin authority.`);
136
+ }
137
+ throw new Error(`enroll failed (${eRes.status}): ${msg}`);
138
+ }
139
+ const enrolled = (await eRes.json());
140
+ const stored = {
141
+ agent_id: agentId,
142
+ publicKey: publicJwk,
143
+ privateKey: privateJwk,
144
+ enrolled_at: enrolled.enrolled_at
145
+ ? Math.floor(new Date(enrolled.enrolled_at).getTime() / 1000)
146
+ : Math.floor(Date.now() / 1000),
147
+ };
148
+ await persist(stored);
149
+ return stored;
150
+ }
151
+ // Public entry: `stack-cli agent enroll <name|id> [--force]`.
152
+ //
153
+ // First-time enrollment: any auth (operator key, member, OAuth, session)
154
+ // that's not member-readonly.
155
+ // Rotation (when already enrolled OR --force passed): operator-admin
156
+ // authority required by the API; the CLI surfaces the 409/403 cleanly.
157
+ export async function cmdAgentEnroll(nameOrId, opts) {
158
+ if (!nameOrId) {
159
+ stderr.write('error: agent name or id required.\n');
160
+ stderr.write('usage: stack-cli agent enroll <name|id> [--force]\n');
161
+ process.exit(2);
162
+ }
163
+ const token = await bearer();
164
+ const agent = await resolveAgent(nameOrId, token);
165
+ const force = opts.force === true;
166
+ // Local guard before hitting the network: if we already have a
167
+ // privkey on disk for this agent and the caller didn't pass --force,
168
+ // refuse without consuming an enrollment-challenge slot.
169
+ const path = keyPath(agent.id);
170
+ if (existsSync(path) && !force) {
171
+ const raw = await readFile(path, 'utf8').catch(() => '');
172
+ let enrolledAt = '';
173
+ try {
174
+ const parsed = JSON.parse(raw);
175
+ if (parsed.enrolled_at)
176
+ enrolledAt = ` (enrolled ${new Date(parsed.enrolled_at * 1000).toISOString()})`;
177
+ }
178
+ catch {
179
+ /* corrupt local file — fall through */
180
+ }
181
+ stderr.write(`error: ${agent.id} already has a local keypair at ${path}${enrolledAt}.\n` +
182
+ `Use \`stack-cli agent rotate ${nameOrId}\` (or pass --force) to replace it. ` +
183
+ `Rotation requires operator-admin authority on the API.\n`);
184
+ process.exit(1);
185
+ }
186
+ try {
187
+ const stored = await runEnroll(agent.id, token, force);
188
+ stdout.write(`enrolled ${agent.name} (${agent.id})${force ? ' [rotated]' : ''}\n` +
189
+ ` keypair saved to ${path}\n` +
190
+ ` enrolled_at: ${new Date(stored.enrolled_at * 1000).toISOString()}\n` +
191
+ `\nThe Python and TS SDKs will pick up this keypair automatically. ` +
192
+ `Run any SDK call against agent_id=${agent.id} to mint the first passport.\n`);
193
+ }
194
+ catch (err) {
195
+ stderr.write(`error: ${err.message}\n`);
196
+ process.exit(1);
197
+ }
198
+ }
199
+ // `stack-cli agent rotate <name|id>` — alias for `enroll --force`.
200
+ // Same auth requirements; the API enforces operator-admin on the
201
+ // rotation branch.
202
+ export async function cmdAgentRotate(nameOrId) {
203
+ await cmdAgentEnroll(nameOrId, { force: true });
204
+ }
205
+ // Subcommand dispatcher: called from main() with args = argv.slice(3).
206
+ export async function cmdAgent(args) {
207
+ const sub = args[0];
208
+ const target = args[1];
209
+ const force = args.includes('--force');
210
+ if (sub === 'enroll') {
211
+ if (!target) {
212
+ stderr.write('usage: stack-cli agent enroll <name|id> [--force]\n');
213
+ process.exit(2);
214
+ }
215
+ await cmdAgentEnroll(target, { force });
216
+ return;
217
+ }
218
+ if (sub === 'rotate') {
219
+ if (!target) {
220
+ stderr.write('usage: stack-cli agent rotate <name|id>\n');
221
+ process.exit(2);
222
+ }
223
+ await cmdAgentRotate(target);
224
+ return;
225
+ }
226
+ stderr.write(`error: unknown agent subcommand "${sub ?? ''}". Use enroll | rotate.\n`);
227
+ process.exit(2);
228
+ }
229
+ //# sourceMappingURL=agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,EAAE;AACF,yEAAyE;AACzE,wEAAwE;AACxE,wEAAwE;AACxE,iEAAiE;AACjE,qDAAqD;AACrD,EAAE;AACF,4DAA4D;AAC5D,wEAAwE;AACxE,6CAA6C;AAC7C,EAAE;AACF,2DAA2D;AAC3D,yCAAyC;AACzC,2EAA2E;AAC3E,gEAAgE;AAChE,6CAA6C;AAC7C,mEAAmE;AACnE,gEAAgE;AAChE,0CAA0C;AAE1C,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,IAAI,IAAI,UAAU,EAAmB,MAAM,aAAa,CAAC;AACvF,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C,MAAM,OAAO,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,0BAA0B,CAAC;AAgBnE,SAAS,OAAO,CAAC,OAAe;IAC9B,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,OAAO,OAAO,CAAC,CAAC;AAChE,CAAC;AAED,KAAK,UAAU,MAAM;IACnB,MAAM,KAAK,GAAG,MAAM,cAAc,EAAE,CAAC;IACrC,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC;IACxB,MAAM,CAAC,KAAK,CACV,yBAAyB;QACvB,2DAA2D,CAC9D,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,sEAAsE;AACtE,oEAAoE;AACpE,sEAAsE;AACtE,+BAA+B;AAC/B,KAAK,UAAU,YAAY,CAAC,QAAgB,EAAE,KAAa;IACzD,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAChC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,cAAc,kBAAkB,CAAC,QAAQ,CAAC,EAAE,EAAE;YAC9E,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE;SAC9C,CAAC,CAAC;QACH,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACvB,MAAM,CAAC,KAAK,CAAC,4BAA4B,QAAQ,uBAAuB,CAAC,CAAC;YAC1E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YAC9B,MAAM,CAAC,KAAK,CAAC,iCAAiC,GAAG,CAAC,MAAM,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;YACtF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAa,CAAC;IACxC,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,YAAY,EAAE;QAClD,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE;KAC9C,CAAC,CAAC;IACH,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;QAChB,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;QAClC,MAAM,CAAC,KAAK,CAAC,iCAAiC,OAAO,CAAC,MAAM,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAC1F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,MAAM,GAAG,CAAC,MAAM,OAAO,CAAC,IAAI,EAAE,CAAe,CAAC;IACpD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;IACtD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,CAAC,KAAK,CACV,0BAA0B,QAAQ,uBAAuB;YACvD,qDAAqD,CACxD,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,qEAAqE;AACrE,8DAA8D;AAC9D,SAAS,gBAAgB,CAAC,SAA8D;IAKtF,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAA4D,CAAC;IAC3G,IAAI,GAAG,CAAC,GAAG,KAAK,KAAK,IAAI,GAAG,CAAC,GAAG,KAAK,SAAS,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QACzD,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;AAClD,CAAC;AAED,SAAS,iBAAiB,CAAC,UAAgE;IAMzF,MAAM,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAK9C,CAAC;IACF,IAAI,GAAG,CAAC,GAAG,KAAK,KAAK,IAAI,GAAG,CAAC,GAAG,KAAK,SAAS,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QACnE,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;AAC5D,CAAC;AAED,wDAAwD;AACxD,KAAK,UAAU,OAAO,CAAC,MAAiB;IACtC,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACtC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtE,MAAM,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAC/D,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,8BAA8B;IAChC,CAAC;AACH,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,OAAe,EAAE,KAAa,EAAE,KAAc;IACrE,qBAAqB;IACrB,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,cAAc,kBAAkB,CAAC,OAAO,CAAC,uBAAuB,EAAE;QACnG,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;KAClF,CAAC,CAAC;IACH,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAqC,CAAC;QAC1F,MAAM,IAAI,KAAK,CAAC,gCAAgC,IAAI,CAAC,MAAM,MAAM,OAAO,CAAC,KAAK,EAAE,OAAO,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;IAChH,CAAC;IACD,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAgD,CAAC;IAEvG,oCAAoC;IACpC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC;IACjE,MAAM,SAAS,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAC9C,MAAM,UAAU,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;IAEjD,oEAAoE;IACpE,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,UAAU,CAAC,CAAC;IAC/E,MAAM,gBAAgB,GAAG,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAEzD,uDAAuD;IACvD,MAAM,GAAG,GAAG,GAAG,OAAO,cAAc,kBAAkB,CAAC,OAAO,CAAC,UAAU,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IACtG,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAC5B,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QACjF,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,gBAAgB,EAAE,CAAC;KAChF,CAAC,CAAC;IACH,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAqC,CAAC;QAC1F,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,EAAE,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC;QACtD,IAAI,IAAI,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CACb,wDAAwD,OAAO,8CAA8C;gBAC3G,6CAA6C,CAChD,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,kBAAkB,IAAI,CAAC,MAAM,MAAM,GAAG,EAAE,CAAC,CAAC;IAC5D,CAAC;IACD,MAAM,QAAQ,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAA6B,CAAC;IAEjE,MAAM,MAAM,GAAc;QACxB,QAAQ,EAAE,OAAO;QACjB,SAAS,EAAE,SAAS;QACpB,UAAU,EAAE,UAAU;QACtB,WAAW,EAAE,QAAQ,CAAC,WAAW;YAC/B,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC;YAC7D,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;KAClC,CAAC;IACF,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACtB,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,8DAA8D;AAC9D,EAAE;AACF,yEAAyE;AACzE,8BAA8B;AAC9B,qEAAqE;AACrE,uEAAuE;AACvE,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,QAAgB,EAAE,IAAyB;IAC9E,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACpD,MAAM,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,MAAM,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC;IAElC,+DAA+D;IAC/D,qEAAqE;IACrE,yDAAyD;IACzD,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC/B,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QACzD,IAAI,UAAU,GAAG,EAAE,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAc,CAAC;YAC5C,IAAI,MAAM,CAAC,WAAW;gBAAE,UAAU,GAAG,cAAc,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC;QAC1G,CAAC;QAAC,MAAM,CAAC;YACP,uCAAuC;QACzC,CAAC;QACD,MAAM,CAAC,KAAK,CACV,UAAU,KAAK,CAAC,EAAE,mCAAmC,IAAI,GAAG,UAAU,KAAK;YACzE,gCAAgC,QAAQ,sCAAsC;YAC9E,0DAA0D,CAC7D,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QACvD,MAAM,CAAC,KAAK,CACV,YAAY,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,EAAE,IAAI,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,IAAI;YAClE,sBAAsB,IAAI,IAAI;YAC9B,kBAAkB,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,IAAI;YACvE,oEAAoE;YACpE,qCAAqC,KAAK,CAAC,EAAE,gCAAgC,CAChF,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,KAAK,CAAC,UAAW,GAAa,CAAC,OAAO,IAAI,CAAC,CAAC;QACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,mEAAmE;AACnE,iEAAiE;AACjE,mBAAmB;AACnB,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,QAAgB;IACnD,MAAM,cAAc,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAClD,CAAC;AAED,uEAAuE;AACvE,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAAc;IAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACvB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAEvC,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;QACrB,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;YACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,MAAM,cAAc,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QACxC,OAAO;IACT,CAAC;IACD,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;QACrB,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;YAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,MAAM,cAAc,CAAC,MAAM,CAAC,CAAC;QAC7B,OAAO;IACT,CAAC;IACD,MAAM,CAAC,KAAK,CAAC,oCAAoC,GAAG,IAAI,EAAE,2BAA2B,CAAC,CAAC;IACvF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
package/dist/auth.d.ts ADDED
@@ -0,0 +1,11 @@
1
+ export declare function cmdLogin(): Promise<void>;
2
+ export declare function cmdStatus(): Promise<void>;
3
+ export declare function cmdLogout(): Promise<void>;
4
+ /**
5
+ * Used by `monitor --follow` and any future authenticated command.
6
+ * Returns a fresh access token by exchanging the stored refresh token.
7
+ * Falls back to STACK_API_KEY env var for back-compat with existing
8
+ * users who haven't migrated. Returns null when no auth source exists.
9
+ */
10
+ export declare function getAccessToken(): Promise<string | null>;
11
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AA+IA,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,CAiC7D"}
package/dist/auth.js ADDED
@@ -0,0 +1,283 @@
1
+ // CLI auth — Device Authorization Grant (RFC 8628).
2
+ //
3
+ // stack-cli auth login → DCR-register a client (first run only), kick off
4
+ // the device flow, print user_code + URL, open the browser, poll the
5
+ // token endpoint, persist refresh_token to ~/.stack/credentials.json.
6
+ // stack-cli auth status → read credentials, exchange refresh → access,
7
+ // call /v1/operators/me, print operator + scope.
8
+ // stack-cli auth logout → revoke refresh, delete credentials file.
9
+ //
10
+ // No native deps. Refresh tokens live in a file with mode 0600. macOS
11
+ // Keychain / Windows Credential Manager / libsecret integration is a
12
+ // follow-up — Phase 3 closes the file-on-disk threat with passkey-rooted
13
+ // retrieval. Until then this matches the storage model of `aws cli`,
14
+ // `gcloud`, etc.
15
+ import { stdout, stderr, env, exit, platform } from 'node:process';
16
+ import { homedir } from 'node:os';
17
+ import { join } from 'node:path';
18
+ import { mkdir, writeFile, readFile, chmod, unlink } from 'node:fs/promises';
19
+ import { spawn } from 'node:child_process';
20
+ import { createHash, randomBytes } from 'node:crypto';
21
+ const API_URL = env['STACK_API_URL'] ?? 'https://api.getstack.run';
22
+ const RESOURCE = env['STACK_OAUTH_RESOURCE'] ?? `${API_URL}`;
23
+ const SCOPE = env['STACK_OAUTH_SCOPE'] ?? 'passports:read agents:read services:read audit:read';
24
+ const useColor = stdout.isTTY === true && !env['NO_COLOR'];
25
+ const color = (n) => (useColor ? `\x1b[${n}m` : '');
26
+ const C = {
27
+ reset: color('0'), bold: color('1'), dim: color('2'),
28
+ red: color('31'), green: color('32'), yellow: color('33'), cyan: color('36'), gray: color('90'), white: color('37'),
29
+ };
30
+ const CREDS_DIR = join(homedir(), '.stack');
31
+ const CREDS_PATH = join(CREDS_DIR, 'credentials.json');
32
+ async function readCreds() {
33
+ try {
34
+ const raw = await readFile(CREDS_PATH, 'utf8');
35
+ return JSON.parse(raw);
36
+ }
37
+ catch {
38
+ return null;
39
+ }
40
+ }
41
+ async function writeCreds(creds) {
42
+ await mkdir(CREDS_DIR, { recursive: true });
43
+ await writeFile(CREDS_PATH, JSON.stringify(creds, null, 2), 'utf8');
44
+ // Restrict to owner — best-effort on Windows where chmod is a no-op,
45
+ // but the default ACL on %USERPROFILE%\.stack is already user-scoped.
46
+ try {
47
+ await chmod(CREDS_PATH, 0o600);
48
+ }
49
+ catch {
50
+ /* Windows / unsupported FS — ignore */
51
+ }
52
+ }
53
+ async function deleteCreds() {
54
+ try {
55
+ await unlink(CREDS_PATH);
56
+ }
57
+ catch {
58
+ /* already gone */
59
+ }
60
+ }
61
+ function openBrowser(url) {
62
+ // Best-effort. Failure is silent — the URL is also printed.
63
+ try {
64
+ if (platform === 'darwin')
65
+ spawn('open', [url], { stdio: 'ignore', detached: true }).unref();
66
+ else if (platform === 'win32')
67
+ spawn('cmd', ['/c', 'start', '', url], { stdio: 'ignore', detached: true }).unref();
68
+ else
69
+ spawn('xdg-open', [url], { stdio: 'ignore', detached: true }).unref();
70
+ }
71
+ catch {
72
+ /* user opens manually */
73
+ }
74
+ }
75
+ async function ensureClientId(creds) {
76
+ if (creds?.client_id)
77
+ return creds.client_id;
78
+ // Dynamic Client Registration (RFC 7591). Public PKCE client; one
79
+ // client_id per CLI install — better blast radius than a single
80
+ // shared client_id.
81
+ const res = await fetch(`${API_URL}/oauth/register`, {
82
+ method: 'POST',
83
+ headers: { 'Content-Type': 'application/json' },
84
+ body: JSON.stringify({
85
+ client_name: 'STACK CLI',
86
+ redirect_uris: ['http://127.0.0.1/callback'], // unused for device flow but required by spec
87
+ grant_types: ['urn:ietf:params:oauth:grant-type:device_code', 'refresh_token'],
88
+ software_id: 'getstack.cli',
89
+ scope: SCOPE,
90
+ }),
91
+ });
92
+ if (!res.ok) {
93
+ const data = await res.json().catch(() => ({}));
94
+ throw new Error(`client registration failed: ${data.error_description ?? data.error ?? res.statusText}`);
95
+ }
96
+ const data = (await res.json());
97
+ return data.client_id;
98
+ }
99
+ async function pollToken(deviceCode, clientId, intervalSeconds) {
100
+ let interval = intervalSeconds * 1000;
101
+ // Cap total wait at the device code TTL (15 min) — the API will return
102
+ // expired_token once it lapses, but bail explicitly so the CLI doesn't
103
+ // loop indefinitely if the API is unreachable.
104
+ const deadline = Date.now() + 15 * 60 * 1000;
105
+ while (Date.now() < deadline) {
106
+ await new Promise((r) => setTimeout(r, interval));
107
+ const res = await fetch(`${API_URL}/oauth/token`, {
108
+ method: 'POST',
109
+ headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
110
+ body: new URLSearchParams({
111
+ grant_type: 'urn:ietf:params:oauth:grant-type:device_code',
112
+ device_code: deviceCode,
113
+ client_id: clientId,
114
+ }),
115
+ });
116
+ const data = (await res.json().catch(() => ({})));
117
+ if (res.ok && data.access_token && data.refresh_token) {
118
+ return { access_token: data.access_token, refresh_token: data.refresh_token, scope: data.scope ?? SCOPE };
119
+ }
120
+ if (data.error === 'authorization_pending')
121
+ continue;
122
+ if (data.error === 'slow_down') {
123
+ interval = Math.min(interval * 2, 60_000);
124
+ continue;
125
+ }
126
+ if (data.error === 'access_denied')
127
+ throw new Error('user denied the request');
128
+ if (data.error === 'expired_token')
129
+ throw new Error('device code expired — run `stack-cli auth login` again');
130
+ if (data.error)
131
+ throw new Error(`token endpoint: ${data.error}`);
132
+ }
133
+ throw new Error('device code expired (CLI timeout)');
134
+ }
135
+ export async function cmdLogin() {
136
+ const existing = await readCreds();
137
+ const clientId = await ensureClientId(existing);
138
+ // Kick off the device flow.
139
+ const deviceRes = await fetch(`${API_URL}/oauth/device/authorize`, {
140
+ method: 'POST',
141
+ headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
142
+ body: new URLSearchParams({ client_id: clientId, scope: SCOPE, resource: RESOURCE }),
143
+ });
144
+ if (!deviceRes.ok) {
145
+ const data = (await deviceRes.json().catch(() => ({})));
146
+ stderr.write(`${C.red}error:${C.reset} ${data.error_description ?? data.error ?? `HTTP ${deviceRes.status}`}\n`);
147
+ exit(1);
148
+ }
149
+ const device = (await deviceRes.json());
150
+ stdout.write(`
151
+ ${C.bold}STACK CLI sign-in${C.reset}
152
+ ${C.gray}─────────────────${C.reset}
153
+
154
+ ${C.dim}1.${C.reset} Open this URL in your browser:
155
+ ${C.cyan}${device.verification_uri_complete}${C.reset}
156
+
157
+ ${C.dim}2.${C.reset} Confirm this code matches what your browser shows:
158
+ ${C.bold}${C.green}${device.user_code}${C.reset}
159
+
160
+ ${C.gray}Waiting for approval...${C.reset}
161
+
162
+ `);
163
+ openBrowser(device.verification_uri_complete);
164
+ let tokens;
165
+ try {
166
+ tokens = await pollToken(device.device_code, clientId, device.interval);
167
+ }
168
+ catch (err) {
169
+ stderr.write(`${C.red}error:${C.reset} ${err.message}\n`);
170
+ exit(1);
171
+ }
172
+ // Fetch operator email for friendly status display. Best-effort.
173
+ let operatorEmail;
174
+ try {
175
+ const meRes = await fetch(`${API_URL}/v1/operators/me`, {
176
+ headers: { Authorization: `Bearer ${tokens.access_token}` },
177
+ });
178
+ if (meRes.ok) {
179
+ const me = (await meRes.json());
180
+ operatorEmail = me.email;
181
+ }
182
+ }
183
+ catch {
184
+ /* non-fatal */
185
+ }
186
+ await writeCreds({
187
+ client_id: clientId,
188
+ refresh_token: tokens.refresh_token,
189
+ issued_at: Math.floor(Date.now() / 1000),
190
+ refresh_expires_at: Math.floor(Date.now() / 1000) + 30 * 24 * 60 * 60,
191
+ operator_email: operatorEmail,
192
+ scope: tokens.scope,
193
+ });
194
+ stdout.write(` ${C.green}✓${C.reset} Signed in${operatorEmail ? ` as ${C.bold}${operatorEmail}${C.reset}` : ''}
195
+ ${C.gray}Credentials saved to ${CREDS_PATH}${C.reset}
196
+
197
+ `);
198
+ }
199
+ export async function cmdStatus() {
200
+ const creds = await readCreds();
201
+ if (!creds) {
202
+ stdout.write(`${C.gray}Not signed in.${C.reset} Run ${C.cyan}stack-cli auth login${C.reset}.\n`);
203
+ exit(1);
204
+ }
205
+ const refreshExpiresIn = creds.refresh_expires_at - Math.floor(Date.now() / 1000);
206
+ if (refreshExpiresIn <= 0) {
207
+ stdout.write(`${C.yellow}Session expired.${C.reset} Run ${C.cyan}stack-cli auth login${C.reset} again.\n`);
208
+ exit(1);
209
+ }
210
+ const days = Math.floor(refreshExpiresIn / 86400);
211
+ stdout.write(` ${C.green}✓${C.reset} Signed in${creds.operator_email ? ` as ${C.bold}${creds.operator_email}${C.reset}` : ''}
212
+ ${C.gray}Scope:${C.reset} ${creds.scope}
213
+ ${C.gray}Client:${C.reset} ${creds.client_id}
214
+ ${C.gray}Expires:${C.reset} in ${days} day${days === 1 ? '' : 's'}
215
+ ${C.gray}File:${C.reset} ${CREDS_PATH}
216
+ `);
217
+ }
218
+ export async function cmdLogout() {
219
+ const creds = await readCreds();
220
+ if (!creds) {
221
+ stdout.write(`${C.gray}Not signed in.${C.reset}\n`);
222
+ return;
223
+ }
224
+ // Best-effort revoke. Failure on the network doesn't stop us deleting
225
+ // the local file — that's the user's intent here.
226
+ try {
227
+ await fetch(`${API_URL}/oauth/revoke`, {
228
+ method: 'POST',
229
+ headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
230
+ body: new URLSearchParams({ token: creds.refresh_token, client_id: creds.client_id }),
231
+ });
232
+ }
233
+ catch {
234
+ /* network error — local file removal still succeeds */
235
+ }
236
+ await deleteCreds();
237
+ stdout.write(` ${C.green}✓${C.reset} Signed out\n`);
238
+ }
239
+ /**
240
+ * Used by `monitor --follow` and any future authenticated command.
241
+ * Returns a fresh access token by exchanging the stored refresh token.
242
+ * Falls back to STACK_API_KEY env var for back-compat with existing
243
+ * users who haven't migrated. Returns null when no auth source exists.
244
+ */
245
+ export async function getAccessToken() {
246
+ const apiKey = env['STACK_API_KEY'];
247
+ if (apiKey)
248
+ return apiKey; // legacy path
249
+ const creds = await readCreds();
250
+ if (!creds)
251
+ return null;
252
+ const res = await fetch(`${API_URL}/oauth/token`, {
253
+ method: 'POST',
254
+ headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
255
+ body: new URLSearchParams({
256
+ grant_type: 'refresh_token',
257
+ refresh_token: creds.refresh_token,
258
+ client_id: creds.client_id,
259
+ }),
260
+ });
261
+ if (!res.ok) {
262
+ const data = (await res.json().catch(() => ({})));
263
+ if (data.error === 'invalid_grant') {
264
+ // Refresh revoked or family broken — wipe and force re-login.
265
+ await deleteCreds();
266
+ }
267
+ return null;
268
+ }
269
+ const data = (await res.json());
270
+ // Rotate stored refresh.
271
+ await writeCreds({
272
+ ...creds,
273
+ refresh_token: data.refresh_token,
274
+ issued_at: Math.floor(Date.now() / 1000),
275
+ refresh_expires_at: Math.floor(Date.now() / 1000) + 30 * 24 * 60 * 60,
276
+ });
277
+ return data.access_token;
278
+ }
279
+ // Suppress unused-import warnings for crypto helpers we may need in
280
+ // future Phase-2 SDK-keypair-style additions; safe no-op today.
281
+ void createHash;
282
+ void randomBytes;
283
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,5 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { argv, env, stdout, stderr } from 'node:process';
3
+ import { cmdLogin, cmdLogout, cmdStatus, getAccessToken } from './auth.js';
4
+ import { cmdAgent } from './agent.js';
3
5
  const DASHBOARD_URL = 'https://getstack.run';
4
6
  const API_URL = env['STACK_API_URL'] ?? 'https://api.getstack.run';
5
7
  // ── ANSI helpers ────────────────────────────────────────────────────
@@ -101,14 +103,18 @@ async function runDemo(loop) {
101
103
  }
102
104
  } while (loop);
103
105
  }
104
- function authToken() {
105
- const key = env['STACK_API_KEY'] ?? '';
106
- if (!key) {
107
- stderr.write(`${C.red}error:${C.reset} STACK_API_KEY not set.\n` +
108
- `Run ${C.cyan}npx @getstackrun/cli register${C.reset} or grab your key from ${DASHBOARD_URL}/account.\n`);
109
- process.exit(2);
110
- }
111
- return key;
106
+ async function authToken() {
107
+ // Three sources, in priority order:
108
+ // 1. STACK_API_KEY env var (legacy sk_live_* path, preserved for CI)
109
+ // 2. ~/.stack/credentials.json refresh_token → exchange for access
110
+ // 3. Nothing — point user at `stack-cli auth login`
111
+ const token = await getAccessToken();
112
+ if (token)
113
+ return token;
114
+ stderr.write(`${C.red}error:${C.reset} not signed in.\n` +
115
+ `Run ${C.cyan}stack-cli auth login${C.reset} (recommended) ` +
116
+ `or set ${C.cyan}STACK_API_KEY${C.reset} for the legacy path.\n`);
117
+ process.exit(2);
112
118
  }
113
119
  /**
114
120
  * Map an audit row (wire layer + action) to its display layer.
@@ -179,7 +185,7 @@ async function runFollow(filters) {
179
185
  // API key needed; same shape as /v1/audit. Used by the landing
180
186
  // demo + anyone who wants to watch the shared sandbox stream.
181
187
  const sandbox = filters.sandbox === true;
182
- const key = sandbox ? null : authToken();
188
+ const key = sandbox ? null : await authToken();
183
189
  let watermark = null;
184
190
  let firstTick = true;
185
191
  const filterDesc = sandbox ? ' · public sandbox'
@@ -246,8 +252,13 @@ ${C.white}Usage${C.reset}
246
252
  npx @getstackrun/cli ${C.cyan}<command>${C.reset} [options]
247
253
 
248
254
  ${C.white}Commands${C.reset}
249
- ${C.cyan}register${C.reset} Print signup + MCP install instructions
250
- ${C.cyan}monitor${C.reset} [--demo|--follow] Tail STACK activity in your terminal
255
+ ${C.cyan}auth login${C.reset} Sign in via browser (Device flow, RFC 8628)
256
+ ${C.cyan}auth status${C.reset} Show current sign-in state
257
+ ${C.cyan}auth logout${C.reset} Revoke session and clear local credentials
258
+ ${C.cyan}agent enroll${C.reset} <name|id> Generate keypair + enroll an agent (operator-side)
259
+ ${C.cyan}agent rotate${C.reset} <name|id> Rotate an enrolled agent's keypair (admin only)
260
+ ${C.cyan}register${C.reset} Print signup + MCP install instructions
261
+ ${C.cyan}monitor${C.reset} [--demo|--follow] Tail STACK activity in your terminal
251
262
 
252
263
  ${C.white}monitor flags${C.reset}
253
264
  --demo Replay a real-shape mission (no auth needed).
@@ -262,6 +273,9 @@ ${C.white}monitor flags${C.reset}
262
273
  Same stream visitors see on getstack.run.
263
274
 
264
275
  ${C.white}Examples${C.reset}
276
+ ${C.gray}# enroll a freshly-registered agent so the SDK skips the dance${C.reset}
277
+ npx @getstackrun/cli agent enroll research-pipeline
278
+
265
279
  ${C.gray}# replay a credential-exfiltration-caught-by-scope_drift mission${C.reset}
266
280
  npx @getstackrun/cli monitor --demo --loop
267
281
 
@@ -277,6 +291,27 @@ ${C.white}Examples${C.reset}
277
291
  }
278
292
  async function main() {
279
293
  const command = argv[2];
294
+ if (command === 'auth') {
295
+ const sub = argv[3];
296
+ if (sub === 'login') {
297
+ await cmdLogin();
298
+ return;
299
+ }
300
+ if (sub === 'logout') {
301
+ await cmdLogout();
302
+ return;
303
+ }
304
+ if (sub === 'status') {
305
+ await cmdStatus();
306
+ return;
307
+ }
308
+ stderr.write(`error: unknown auth subcommand "${sub ?? ''}". Use login | logout | status.\n`);
309
+ process.exit(2);
310
+ }
311
+ if (command === 'agent') {
312
+ await cmdAgent(argv.slice(3));
313
+ return;
314
+ }
280
315
  if (command === 'register') {
281
316
  stdout.write(`
282
317
  STACK — Infrastructure for agents
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEzD,MAAM,aAAa,GAAG,sBAAsB,CAAC;AAC7C,MAAM,OAAO,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,0BAA0B,CAAC;AAEnE,uEAAuE;AAEvE,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC;AACpC,MAAM,QAAQ,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AAC3C,SAAS,IAAI,CAAC,IAAY;IACxB,OAAO,QAAQ,CAAC,CAAC,CAAC,QAAQ,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;AACzC,CAAC;AACD,MAAM,CAAC,GAAG;IACR,KAAK,EAAG,IAAI,CAAC,GAAG,CAAC;IACjB,GAAG,EAAK,IAAI,CAAC,GAAG,CAAC;IACjB,IAAI,EAAI,IAAI,CAAC,GAAG,CAAC;IACjB,GAAG,EAAK,IAAI,CAAC,IAAI,CAAC;IAClB,KAAK,EAAG,IAAI,CAAC,IAAI,CAAC;IAClB,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC;IAClB,IAAI,EAAI,IAAI,CAAC,IAAI,CAAC;IAClB,KAAK,EAAG,IAAI,CAAC,IAAI,CAAC;IAClB,IAAI,EAAI,IAAI,CAAC,IAAI,CAAC;CACnB,CAAC;AAiCF,SAAS,WAAW,CAAC,GAAa;IAChC,sEAAsE;IACtE,oEAAoE;IACpE,2DAA2D;IAC3D,IAAI,GAAG,CAAC,KAAK,KAAK,UAAU;QAAE,OAAO,OAAO,CAAC;IAC7C,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS;QAAE,OAAO,OAAO,CAAC;IAC9C,IAAI,GAAG,CAAC,OAAO,KAAK,UAAU;QAAE,OAAO,OAAO,CAAC;IAC/C,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,IAAI,GAAG,CAAC,aAAa;QAAE,OAAO,OAAO,CAAC;IACnE,IAAI,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,iBAAiB,CAAC;QAAE,OAAO,OAAO,CAAC;IAC7D,IAAI,GAAG,CAAC,MAAM,KAAK,mBAAmB;QAAE,OAAO,UAAU,CAAC;IAC1D,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,SAAS,CAAC,GAAa,EAAE,QAAe,WAAW,CAAC,GAAG,CAAC;IAC/D,MAAM,EAAE,GAAG,GAAG,CAAC,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IACxF,MAAM,MAAM,GACV,KAAK,KAAK,OAAO,CAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QAC9C,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;YACzB,GAAG,CAAC;IAC7B,MAAM,QAAQ,GAAG,GAAG,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;IAC7D,MAAM,SAAS,GAAG,GAAG,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;IACjE,MAAM,YAAY,GAChB,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACrC,GAAG,CAAC,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACpC,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;gBACtC,GAAG,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;oBACjC,CAAC,GAAG,CAAC,OAAO,KAAK,SAAS,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;wBAC1D,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;4BACP,CAAC,CAAC,MAAM,CAAC;IACvC,MAAM,UAAU,GAAG,GAAG,YAAY,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;IACvE,MAAM,MAAM,GAAG,GAAG,CAAC,WAAW,IAAI,IAAI;QACpC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE;QAC9D,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAC;IAC9B,MAAM,MAAM,GAAG,GAAG,CAAC,aAAa;QAC9B,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,aAAa,GAAG,CAAC,CAAC,KAAK,EAAE;QAC7C,CAAC,CAAC,EAAE,CAAC;IACP,OAAO,GAAG,MAAM,IAAI,CAAC,CAAC,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC,KAAK,KAAK,QAAQ,KAAK,SAAS,KAAK,UAAU,KAAK,MAAM,GAAG,MAAM,EAAE,CAAC;AAC5G,CAAC;AAED,SAAS,QAAQ,CAAC,IAAU,IAAI,IAAI,EAAE;IACpC,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACjD,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACnD,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACnD,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACzD,OAAO,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,GAAG,EAAE,CAAC;AACpC,CAAC;AAED,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;AACnD,CAAC;AAmBD,mEAAmE;AACnE,yEAAyE;AACzE,8DAA8D;AAC9D,MAAM,IAAI,GAAgB;IACxB,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,0BAA0B,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE;IAClI,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,gBAAgB,EAAY,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,EAAG,aAAa,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE;IAClI,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,mBAAmB,EAAS,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,EAAG,aAAa,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE;IACnI,EAAE,KAAK,EAAE,OAAO,EAAK,MAAM,EAAE,kBAAkB,EAAU,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE;IACnI,EAAE,KAAK,EAAE,OAAO,EAAK,MAAM,EAAE,kBAAkB,EAAU,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE;IACnI,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,qBAAqB,EAAO,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,EAAG,aAAa,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE;IACnI,EAAE,KAAK,EAAE,OAAO,EAAK,MAAM,EAAE,kBAAkB,EAAU,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE;IACnI,EAAE,KAAK,EAAE,OAAO,EAAK,MAAM,EAAE,kBAAkB,EAAU,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,EAAG,aAAa,EAAE,8DAA8D,EAAE,OAAO,EAAE,GAAG,EAAE;IAC5L,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,iBAAiB,EAAW,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,EAAG,aAAa,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE;IAClI,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,yBAAyB,EAAG,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,EAAG,aAAa,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE;IAClI,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,mBAAmB,EAAS,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,EAAG,aAAa,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE;CACpI,CAAC;AAEF,KAAK,UAAU,OAAO,CAAC,IAAa;IAClC,GAAG,CAAC;QACF,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,6BAA6B,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;QAChE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,6FAA6F,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC;QAClI,KAAK,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC;YACtB,MAAM,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;YACxB,MAAM,KAAK,GAAG,EAAE,CAAC,UAAU,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC;YAC/C,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;QAC5C,CAAC;QACD,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC;YACtD,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;IACH,CAAC,QAAQ,IAAI,EAAE;AACjB,CAAC;AA+BD,SAAS,SAAS;IAChB,MAAM,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;IACvC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,CAAC,KAAK,CACV,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,KAAK,2BAA2B;YACnD,OAAO,CAAC,CAAC,IAAI,gCAAgC,CAAC,CAAC,KAAK,0BAA0B,aAAa,aAAa,CACzG,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;GAIG;AACH,SAAS,qBAAqB,CAAC,SAAgB,EAAE,MAA0B;IACzE,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAC9B,IAAI,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,UAAU,CAAC;IACtD,IAAI,MAAM,KAAK,kBAAkB;QAAE,OAAO,OAAO,CAAC;IAClD,IAAI,MAAM,CAAC,UAAU,CAAC,aAAa,CAAC;QAAE,OAAO,YAAY,CAAC;IAC1D,IAAI,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,SAAS,CAAC;IACpD,IAAI,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,aAAa,CAAC;QAAE,OAAO,QAAQ,CAAC;IACrF,IAAI,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,UAAU,CAAC;IACtD,IAAI,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,UAAU,CAAC;IACtD,IAAI,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC;QAAE,OAAO,QAAQ,CAAC;IACrJ,IAAI,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,SAAS,CAAC;IACpF,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,mBAAmB,CAAC,CAAa;IACxC,IAAI,CAAC,CAAC,UAAU,KAAK,gBAAgB,EAAE,CAAC;QACtC,kEAAkE;QAClE,oEAAoE;QACpE,kEAAkE;QAClE,oEAAoE;QACpE,MAAM,GAAG,GAAG,CAAC,CAAC,QAAQ,IAAI,UAAU,CAAC;QACrC,MAAM,OAAO,GAAY,GAAG,KAAK,UAAU,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,MAAM;YAChF,CAAC,CAAC,GAAG;YACL,CAAC,CAAC,UAAU,CAAC;QACf,OAAO;YACL,KAAK,EAAE,UAAU;YACjB,MAAM,EAAE,CAAC,CAAC,WAAW,IAAI,SAAS;YAClC,OAAO;YACP,WAAW,EAAE,IAAI;YACjB,aAAa,EAAE,CAAC,CAAC,OAAO,IAAI,IAAI;YAChC,YAAY,EAAE,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI;SACnE,CAAC;IACJ,CAAC;IACD,MAAM,SAAS,GAAI,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAc,CAAC;QACnH,CAAC,CAAE,CAAC,CAAC,KAAe;QACpB,CAAC,CAAC,QAAQ,CAAC;IACb,MAAM,KAAK,GAAG,qBAAqB,CAAC,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;IACzD,MAAM,OAAO,GAAY,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS;QAC1D,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS;YACrC,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS;gBACrC,CAAC,CAAC,SAAS,CAAC;IACd,OAAO;QACL,KAAK;QACL,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,EAAE;QACtB,OAAO;QACP,WAAW,EAAE,CAAC,CAAC,WAAW,IAAI,IAAI;QAClC,aAAa,EAAE,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;QACtE,YAAY,EAAE,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI;KACnE,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,OAA8D;IACrF,mEAAmE;IACnE,+DAA+D;IAC/D,8DAA8D;IAC9D,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,KAAK,IAAI,CAAC;IACzC,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;IACzC,IAAI,SAAS,GAAkB,IAAI,CAAC;IACpC,IAAI,SAAS,GAAG,IAAI,CAAC;IAErB,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,mBAAmB;QAC9C,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,OAAO,CAAC,OAAO,EAAE;YACjD,CAAC,CAAC,OAAO,CAAC,GAAG,CAAK,CAAC,CAAC,UAAU,OAAO,CAAC,GAAG,EAAE;gBAC3C,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,WAAW,CAAC;IAC7D,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,+BAA+B,UAAU,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;IAC/E,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,aAAa,OAAO,GAAG,QAAQ,8BAA8B,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC;IAElG,OAAO,IAAI,EAAE,CAAC;QACZ,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACpD,IAAI,SAAS,IAAI,IAAI;gBAAE,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;YAC9D,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO;gBAAE,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;YACzE,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG;gBAAM,MAAM,CAAC,GAAG,CAAC,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;YACzE,MAAM,OAAO,GAA2B,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAC;YACvE,IAAI,GAAG;gBAAE,OAAO,CAAC,aAAa,GAAG,UAAU,GAAG,EAAE,CAAC;YACjD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,GAAG,QAAQ,IAAI,MAAM,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;YACnF,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;gBACZ,IAAI,SAAS,EAAE,CAAC;oBACd,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,KAAK,4BAA4B,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC;oBACjF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAA+B,CAAC;gBAC9D,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;gBACnC,MAAM,KAAK,GAAG,OAAO;qBAClB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC;qBACzE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;gBAC7D,0DAA0D;gBAC1D,yDAAyD;gBACzD,iDAAiD;gBACjD,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;oBACtB,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;oBACvD,IAAI,SAAS,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,SAAS,EAAE,CAAC;wBACzD,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;oBAClC,CAAC;oBACD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;wBAAE,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;gBACxC,CAAC;gBACD,SAAS,GAAG,KAAK,CAAC;YACpB,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,KAAK,IAAK,GAAa,CAAC,OAAO,IAAI,CAAC,CAAC;gBACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QACD,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;AACH,CAAC;AAED,uEAAuE;AAEvE,SAAS,SAAS;IAChB,MAAM,CAAC,KAAK,CAAC;EACb,CAAC,CAAC,IAAI,uBAAuB,CAAC,CAAC,KAAK;;EAEpC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,KAAK;yBACC,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC,KAAK;;EAEhD,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC,KAAK;IACvB,CAAC,CAAC,IAAI,WAAW,CAAC,CAAC,KAAK;IACxB,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,KAAK;;EAEzB,CAAC,CAAC,KAAK,gBAAgB,CAAC,CAAC,KAAK;;;;;;;;;6BASH,OAAO;;;EAGlC,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC,KAAK;IACvB,CAAC,CAAC,IAAI,mEAAmE,CAAC,CAAC,KAAK;;;IAGhF,CAAC,CAAC,IAAI,gDAAgD,CAAC,CAAC,KAAK;;;IAG7D,CAAC,CAAC,IAAI,0CAA0C,CAAC,CAAC,KAAK;;;IAGvD,CAAC,CAAC,IAAI,wBAAwB,CAAC,CAAC,KAAK;;CAExC,CAAC,CAAC;AACH,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAExB,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;QAC3B,MAAM,CAAC,KAAK,CAAC;;;;4BAIW,aAAa;;;;;OAKlC,CAAC,CAAC,IAAI,mHAAmH,CAAC,CAAC,KAAK;;CAEtI,CAAC,CAAC;QACC,OAAO;IACT,CAAC;IAED,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC3B,SAAS,SAAS,CAAC,IAAY;YAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC/B,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,GAAG,KAAK,IAAI,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,SAAS,CAAC;YAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;YAC3B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;gBAAE,OAAO,SAAS,CAAC;YACrD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACvC,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;QACrC,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;QAC/B,IAAI,MAAM,IAAI,QAAQ,EAAE,CAAC;YACvB,MAAM,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;YACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,IAAI,OAAO,IAAI,GAAG,EAAE,CAAC;YACnB,MAAM,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;YAClE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,IAAI,SAAS,IAAI,CAAC,OAAO,IAAI,GAAG,CAAC,EAAE,CAAC;YAClC,MAAM,CAAC,KAAK,CAAC,6DAA6D,CAAC,CAAC;YAC5E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,SAAS,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;YACtD,OAAO;QACT,CAAC;QACD,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;QACtB,OAAO;IACT,CAAC;IAED,SAAS,EAAE,CAAC;IACZ,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,KAAK,IAAK,GAAa,CAAC,OAAO,IAAI,CAAC,CAAC;IACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@getstackrun/cli",
3
- "version": "0.4.2",
3
+ "version": "0.6.0",
4
4
  "description": "Tail STACK runtime activity in your terminal — replay a real-shape demo or stream your own audit_log.",
5
5
  "type": "module",
6
6
  "bin": {