@getstackrun/cli 0.17.0 → 0.19.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.
@@ -1 +1 @@
1
- {"version":3,"file":"passports.js","sourceRoot":"","sources":["../src/passports.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"passports.js","sourceRoot":"","sources":["../src/passports.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function cmdProxy(args: string[]): Promise<void>;
2
+ //# sourceMappingURL=proxy-serve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy-serve.d.ts","sourceRoot":"","sources":["../src/proxy-serve.ts"],"names":[],"mappings":"AA+IA,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA4Q5D"}
@@ -0,0 +1,363 @@
1
+ // `stack proxy serve` — the localhost LLM-gateway shim (GET-242).
2
+ //
3
+ // The universal integration problem: every tool (LangChain, an SDK, a
4
+ // custom bot) expects an LLM API key in an env var and talks to the
5
+ // provider's native endpoint. STACK's pitch is "no key on the box." Those
6
+ // collide for EVERY integration. The only bridge used to be "rewrite your
7
+ // tool to use our SDK."
8
+ //
9
+ // This command removes that. It runs a localhost HTTP endpoint that speaks
10
+ // the provider's NATIVE shape (Anthropic Messages / OpenAI chat-
11
+ // completions). Point any tool's baseURL at it, give it any dummy key, and
12
+ // the shim:
13
+ // - ignores the dummy key the tool sends (that's the point — no real
14
+ // provider key ever lives on the box)
15
+ // - authenticates to STACK as an on-box agent identity: a fresh 60s
16
+ // EdDSA agent JWT minted from ~/.stack/agents/<id>.json, enrolled
17
+ // transparently on first run (the SDK's createAgentTokenProvider —
18
+ // no manual `agent enroll` step)
19
+ // - issues + auto-refreshes ONE passport for the agent
20
+ // - forwards to /v1/llm/<provider>/*, where STACK injects the real key
21
+ // from the vault, governs, logs, meters, and returns the provider's
22
+ // native response (JSON or SSE) verbatim
23
+ //
24
+ // Integration drops from "7 steps + rewrite your tool" to "change one URL."
25
+ //
26
+ // Auth posture / threat model (surfaced in --help + docs). The provider
27
+ // key ALWAYS stays in the vault; the dummy key the tool sends is discarded.
28
+ // Which STACK credential is on the box depends on the agent's key_mode:
29
+ // - stack_managed (default + the proxied-llm-bot preset): the agent has
30
+ // no on-box keypair (STACK signs server-side). The shim authenticates
31
+ // with the OPERATOR credential (STACK_API_KEY / the ~/.stack session)
32
+ // and issues agent-scoped passports. The operator credential sits on
33
+ // the box.
34
+ // - customer_managed: the agent owns an Ed25519 key on the box
35
+ // (~/.stack/agents/<id>.json, chmod 600), scoped to ONE agent and
36
+ // revocable in <60s. Agent-runtime mode signs each call with a 60s
37
+ // agent JWT; only the scoped agent key is on the box, no operator-wide
38
+ // credential. Strongest posture for an untrusted host.
39
+ // - Binds 127.0.0.1 by default. --host is honored but a non-loopback
40
+ // bind prints a loud warning — anyone who can reach the port can make
41
+ // governed calls as this agent (still bounded by the agent's grants +
42
+ // revocable, but no longer localhost-only).
43
+ import { env, stdout, stderr, argv } from 'node:process';
44
+ import { createServer } from 'node:http';
45
+ import { Stack, StackError } from '@getstackrun/sdk';
46
+ import { takeFlag } from './api.js';
47
+ import { invokeHint } from './auth.js';
48
+ const DEFAULT_PORT = 8788;
49
+ const DEFAULT_HOST = '127.0.0.1';
50
+ const ALL_PROVIDERS = ['anthropic', 'openai', 'openrouter'];
51
+ function matchRoute(pathname, providers) {
52
+ // Anthropic Messages — official SDK sends POST {baseURL}/v1/messages.
53
+ if (providers.has('anthropic') &&
54
+ (pathname === '/v1/messages' || pathname === '/messages')) {
55
+ return { provider: 'anthropic' };
56
+ }
57
+ // OpenAI / OpenRouter chat-completions — official SDKs send
58
+ // POST {baseURL}/chat/completions (baseURL usually already ends /v1).
59
+ if (pathname === '/v1/chat/completions' || pathname === '/chat/completions') {
60
+ if (providers.has('openai'))
61
+ return { provider: 'openai' };
62
+ if (providers.has('openrouter'))
63
+ return { provider: 'openrouter' };
64
+ }
65
+ return null;
66
+ }
67
+ async function readJsonBody(req) {
68
+ const chunks = [];
69
+ for await (const chunk of req)
70
+ chunks.push(chunk);
71
+ const raw = Buffer.concat(chunks).toString('utf8');
72
+ if (!raw)
73
+ return {};
74
+ return JSON.parse(raw);
75
+ }
76
+ // Dispatch a parsed body to the right SDK gateway call. Returns either the
77
+ // parsed JSON response (non-streaming) or an async iterable of provider SSE
78
+ // events (streaming). The SDK attaches the agent JWT (Bearer) + passport
79
+ // (X-Passport-Token) automatically.
80
+ async function callGateway(stack, provider, body, session) {
81
+ const opts = { passport: session };
82
+ if (provider === 'anthropic') {
83
+ return stack.llm.anthropic.messages.create(body, opts);
84
+ }
85
+ if (provider === 'openai') {
86
+ return stack.llm.openai.chat.completions.create(body, opts);
87
+ }
88
+ return stack.llm.openrouter.chat.completions.create(body, opts);
89
+ }
90
+ function sendJson(res, status, payload) {
91
+ const buf = Buffer.from(JSON.stringify(payload), 'utf8');
92
+ res.writeHead(status, {
93
+ 'content-type': 'application/json',
94
+ 'content-length': String(buf.byteLength),
95
+ });
96
+ res.end(buf);
97
+ }
98
+ // Map a STACK gateway failure to the provider's native error envelope so
99
+ // the tool's own error handling stays legible, and print a targeted hint
100
+ // to the shim's stderr (the operator watching the terminal).
101
+ function sendGatewayError(res, provider, err) {
102
+ const status = err instanceof StackError ? err.status : 502;
103
+ const message = err instanceof Error ? err.message : String(err);
104
+ // Anthropic + OpenAI both use `{ error: { type, message } }`.
105
+ sendJson(res, status, { error: { type: 'stack_gateway_error', message } });
106
+ if (status === 403) {
107
+ if (/not in passport scope/i.test(message)) {
108
+ stderr.write(` ↳ ${provider} is not in this agent's grants. Grant it: ` +
109
+ `${invokeHint(`service grant <connection-id> --agent <agent>`)} ` +
110
+ `(or connect ${provider} at https://getstack.run/services first).\n`);
111
+ }
112
+ else if (/no .* connection|connect .* first/i.test(message)) {
113
+ stderr.write(` ↳ ${provider} is not connected on this operator. ` +
114
+ `Connect it at https://getstack.run/services, then retry.\n`);
115
+ }
116
+ }
117
+ }
118
+ export async function cmdProxy(args) {
119
+ const sub = args[0];
120
+ if (sub !== 'serve') {
121
+ stderr.write(`error: unknown proxy subcommand "${sub ?? ''}". Use: ${invokeHint('proxy serve --agent <name|id>')}\n`);
122
+ process.exit(2);
123
+ }
124
+ const rest = args.slice(1);
125
+ const agentRef = takeFlag(rest, '--agent');
126
+ if (typeof agentRef !== 'string' || !agentRef) {
127
+ stderr.write(`usage: ${invokeHint('proxy serve --agent <name|id> [--port 8788] [--provider anthropic|openai|openrouter] [--host 127.0.0.1]')}\n\n` +
128
+ `Runs a localhost endpoint speaking the provider's native API shape.\n` +
129
+ `Point any tool's baseURL at it (dummy key is fine); STACK injects the\n` +
130
+ `real key from the vault and governs + logs the call. No provider key on the box.\n`);
131
+ process.exit(2);
132
+ }
133
+ const portFlag = takeFlag(rest, '--port');
134
+ const port = typeof portFlag === 'string' ? Number.parseInt(portFlag, 10) : DEFAULT_PORT;
135
+ if (!Number.isInteger(port) || port < 1 || port > 65535) {
136
+ stderr.write(`error: --port must be an integer 1-65535 (got "${String(portFlag)}").\n`);
137
+ process.exit(2);
138
+ }
139
+ const hostFlag = takeFlag(rest, '--host');
140
+ const host = typeof hostFlag === 'string' ? hostFlag : DEFAULT_HOST;
141
+ // --provider may be repeated or comma-separated; defaults to anthropic +
142
+ // openai (openrouter shares openai's path, so it's opt-in to avoid an
143
+ // ambiguous /chat/completions route).
144
+ const providerFlags = [];
145
+ for (;;) {
146
+ const p = takeFlag(rest, '--provider');
147
+ if (typeof p !== 'string')
148
+ break;
149
+ providerFlags.push(...p.split(',').map((s) => s.trim()).filter(Boolean));
150
+ }
151
+ let providers;
152
+ if (providerFlags.length === 0) {
153
+ providers = new Set(['anthropic', 'openai']);
154
+ }
155
+ else {
156
+ for (const p of providerFlags) {
157
+ if (!ALL_PROVIDERS.includes(p)) {
158
+ stderr.write(`error: --provider must be one of: ${ALL_PROVIDERS.join(', ')} (got "${p}").\n`);
159
+ process.exit(2);
160
+ }
161
+ }
162
+ providers = new Set(providerFlags);
163
+ if (providers.has('openai') && providers.has('openrouter')) {
164
+ stderr.write(`error: openai and openrouter both use the /chat/completions path and cannot be served together.\n` +
165
+ `Run one shim per provider on different ports.\n`);
166
+ process.exit(2);
167
+ }
168
+ }
169
+ const baseUrl = env['STACK_API_URL'] ?? 'https://api.getstack.run';
170
+ // Resolve --agent to an agt_* id + its key_mode via the operator-auth
171
+ // path (STACK_API_KEY or ~/.stack/credentials.json from `auth login`).
172
+ const opStack = new Stack({ baseUrl });
173
+ let agentId;
174
+ let keyMode;
175
+ try {
176
+ if (agentRef.startsWith('agt_')) {
177
+ const a = (await opStack.agents.get(agentRef));
178
+ agentId = a.id;
179
+ keyMode = a.key_mode ?? 'stack_managed';
180
+ }
181
+ else {
182
+ const list = (await opStack.agents.list());
183
+ const match = list.find((a) => a.name === agentRef);
184
+ if (!match) {
185
+ stderr.write(`error: no agent named "${agentRef}" on this operator.\n` +
186
+ `Register one for a bot that just runs:\n` +
187
+ ` ${invokeHint(`agent register ${agentRef} --profile proxied-llm-bot`)}\n`);
188
+ process.exit(1);
189
+ }
190
+ agentId = match.id;
191
+ keyMode = match.key_mode ?? 'stack_managed';
192
+ }
193
+ }
194
+ catch (err) {
195
+ const msg = err instanceof Error ? err.message : String(err);
196
+ stderr.write(`error: could not resolve agent "${agentRef}" (${msg}).\n` +
197
+ `Sign in first: ${invokeHint('auth login')} (or set STACK_API_KEY).\n`);
198
+ process.exit(1);
199
+ }
200
+ // Pick the auth model by the agent's signing model:
201
+ //
202
+ // stack_managed (default + the proxied-llm-bot preset): the agent has
203
+ // NO on-box keypair — STACK signs its claims server-side. The shim
204
+ // authenticates as the OPERATOR (the same STACK_API_KEY / session
205
+ // that resolved the agent) and issues agent-scoped passports. The
206
+ // operator credential is what sits on the box. The PROVIDER key
207
+ // still never leaves the vault.
208
+ //
209
+ // customer_managed: the agent owns an on-box Ed25519 keypair (via
210
+ // `agent enroll`). Agent-runtime mode signs each call with a fresh
211
+ // 60s agent JWT; only the scoped agent key is on the box — no
212
+ // operator-wide credential. Strongest "no key on the box" posture.
213
+ //
214
+ // Both keep the provider key in the vault; they differ in WHICH STACK
215
+ // credential is on the box.
216
+ const stack = keyMode === 'customer_managed' ? new Stack({ agent_id: agentId, baseUrl }) : new Stack({ baseUrl });
217
+ if (keyMode === 'customer_managed') {
218
+ stdout.write(` auth: on-box agent keypair (customer_managed) — only a scoped agent key on this box\n`);
219
+ }
220
+ else {
221
+ stdout.write(` auth: operator credential (stack_managed agent). For a box that holds only a\n` +
222
+ ` scoped agent key instead, use a customer_managed agent (agent enroll).\n`);
223
+ }
224
+ // One passport for the shim's lifetime, auto-refreshed ~60s before
225
+ // expiry. scopes omitted → all of the agent's granted scopes; the agent
226
+ // must be granted the provider(s) it will call. accountability comes
227
+ // from the AGENT record (a proxied-llm-bot agent is `logged`, so the
228
+ // approval gate is skipped and the first call just works — but a
229
+ // logged/enforced agent still requires an intent declaration at issue
230
+ // time, so we supply one naming the providers this shim serves).
231
+ const providerList = [...providers];
232
+ let session;
233
+ try {
234
+ session = await stack.issuePassport({
235
+ agent_id: agentId,
236
+ intent: {
237
+ summary: `proxy serve — governed LLM calls (${providerList.join(', ')})`,
238
+ services: providerList,
239
+ },
240
+ });
241
+ }
242
+ catch (err) {
243
+ const msg = err instanceof Error ? err.message : String(err);
244
+ stderr.write(`error: could not issue a passport for ${agentId} (${msg}).\n` +
245
+ `If this is the agent's first run, ensure you're signed in (${invokeHint('auth login')}) so\n` +
246
+ `the shim can enroll its keypair. If the agent is blocked, unblock it in the dashboard.\n`);
247
+ process.exit(1);
248
+ }
249
+ const server = createServer((req, res) => {
250
+ void (async () => {
251
+ const url = new URL(req.url ?? '/', `http://${host}:${port}`);
252
+ if (req.method === 'GET' && url.pathname === '/healthz') {
253
+ sendJson(res, 200, {
254
+ ok: true,
255
+ agent_id: agentId,
256
+ providers: [...providers],
257
+ passport_expires_at: session.expiresAt.toISOString(),
258
+ });
259
+ return;
260
+ }
261
+ if (req.method !== 'POST') {
262
+ sendJson(res, 405, { error: { type: 'method_not_allowed', message: 'POST only' } });
263
+ return;
264
+ }
265
+ const route = matchRoute(url.pathname, providers);
266
+ if (!route) {
267
+ sendJson(res, 404, {
268
+ error: {
269
+ type: 'not_found',
270
+ message: `No gateway route for ${url.pathname}. Served: ` +
271
+ [...providers]
272
+ .map((p) => (p === 'anthropic' ? '/v1/messages' : '/v1/chat/completions'))
273
+ .join(', '),
274
+ },
275
+ });
276
+ return;
277
+ }
278
+ let body;
279
+ try {
280
+ body = await readJsonBody(req);
281
+ }
282
+ catch {
283
+ sendJson(res, 400, { error: { type: 'invalid_request', message: 'body must be JSON' } });
284
+ return;
285
+ }
286
+ const isStreaming = body['stream'] === true;
287
+ try {
288
+ const result = await callGateway(stack, route.provider, body, session);
289
+ if (isStreaming) {
290
+ // Re-serialize the SDK's parsed provider events as SSE frames.
291
+ // Keeps the client stream byte-faithful to what the tool's SDK
292
+ // expects; the synthetic stack_leak_warning frame (if any) is
293
+ // NOT re-emitted — it's logged to stderr so the operator sees it
294
+ // without polluting the provider's native protocol.
295
+ res.writeHead(200, {
296
+ 'content-type': 'text/event-stream',
297
+ 'cache-control': 'no-cache',
298
+ connection: 'keep-alive',
299
+ });
300
+ const iterable = result;
301
+ for await (const evt of iterable) {
302
+ if (evt && evt['type'] === 'leak_detected') {
303
+ stderr.write(` ↳ STACK flagged a potential leak in a streamed response (agent ${agentId}).\n`);
304
+ continue;
305
+ }
306
+ res.write(`data: ${JSON.stringify(evt)}\n\n`);
307
+ }
308
+ res.end();
309
+ return;
310
+ }
311
+ sendJson(res, 200, result);
312
+ }
313
+ catch (err) {
314
+ if (res.headersSent) {
315
+ // Mid-stream failure — best we can do is end the stream.
316
+ res.end();
317
+ return;
318
+ }
319
+ sendGatewayError(res, route.provider, err);
320
+ }
321
+ })();
322
+ });
323
+ if (host !== '127.0.0.1' && host !== 'localhost') {
324
+ stderr.write(`\n ⚠ WARNING: binding ${host} (not loopback). Anyone who can reach ${host}:${port}\n` +
325
+ ` can make governed LLM calls as agent ${agentId}. This is still bounded by the\n` +
326
+ ` agent's grants and revocable in <60s, but it is no longer localhost-only.\n`);
327
+ }
328
+ server.listen(port, host, () => {
329
+ const providerLines = [...providers]
330
+ .map((p) => p === 'anthropic'
331
+ ? ` anthropic → http://${host}:${port}/v1/messages`
332
+ : ` ${p} → http://${host}:${port}/v1/chat/completions`)
333
+ .join('\n');
334
+ stdout.write(`\n STACK proxy serve — governed LLM gateway on the box\n` +
335
+ ` ───────────────────────────────────────────────────\n\n` +
336
+ ` agent: ${agentId}\n` +
337
+ ` listening: http://${host}:${port}\n` +
338
+ ` providers:\n${providerLines}\n\n` +
339
+ ` Point your tool at the base URL and use ANY dummy key — the real key\n` +
340
+ ` stays in the STACK vault. Example (Anthropic SDK):\n\n` +
341
+ (providers.has('anthropic')
342
+ ? ` ANTHROPIC_BASE_URL=http://${host}:${port} ANTHROPIC_API_KEY=dummy your-tool\n\n`
343
+ : ` OPENAI_BASE_URL=http://${host}:${port}/v1 OPENAI_API_KEY=dummy your-tool\n\n`) +
344
+ ` health: curl http://${host}:${port}/healthz\n` +
345
+ ` Ctrl-C to stop. Revoke the agent any time for a <60s global kill.\n\n`);
346
+ });
347
+ server.on('error', (err) => {
348
+ const e = err;
349
+ if (e.code === 'EADDRINUSE') {
350
+ stderr.write(`error: port ${port} is already in use. Pass --port <n> to pick another.\n`);
351
+ }
352
+ else {
353
+ stderr.write(`error: server failed: ${e.message}\n`);
354
+ }
355
+ process.exit(1);
356
+ });
357
+ }
358
+ // Allow `proxy-serve.ts` to be a standalone entry if ever spawned directly,
359
+ // though the canonical path is the `proxy` verb in index.ts.
360
+ if (import.meta.url === `file://${argv[1]}`) {
361
+ void cmdProxy(argv.slice(2));
362
+ }
363
+ //# sourceMappingURL=proxy-serve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy-serve.js","sourceRoot":"","sources":["../src/proxy-serve.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function cmdQuickstart(args: string[]): Promise<void>;
2
+ //# sourceMappingURL=quickstart.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quickstart.d.ts","sourceRoot":"","sources":["../src/quickstart.ts"],"names":[],"mappings":"AA0EA,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAiIjE"}
@@ -0,0 +1,162 @@
1
+ // `stack quickstart` / `stack init` — the guided zero-to-first-governed-
2
+ // LLM-call flow (GET-242).
3
+ //
4
+ // Every primitive to make a governed LLM call already exists; nothing
5
+ // sequences them, and the register-agent defaults are the opposite of what
6
+ // a "just let it run" bot wants. This command sequences the paved road and
7
+ // ends in proof — an audit row from a real call:
8
+ //
9
+ // 1. confirm the operator is signed in (no account creation here — that
10
+ // is dashboard-only, magic-link)
11
+ // 2. confirm the LLM provider is connected (can't connect from the CLI —
12
+ // the vault credential is added via the dashboard); guide there if not
13
+ // 3. register an agent with profile: 'proxied-llm-bot' (proxy_only +
14
+ // logged + stack_managed) so the first call just works
15
+ // 4. issue a passport + make ONE real LLM call through the STACK gateway
16
+ // (the agent keypair enrolls transparently on this first call)
17
+ // 5. print the audit row that call produced — "it worked, here's proof"
18
+ //
19
+ // No footgun decisions: the only inputs are the provider and an agent name,
20
+ // both with sane defaults.
21
+ import { env, stdout, stderr } from 'node:process';
22
+ import { createInterface } from 'node:readline/promises';
23
+ import { Stack } from '@getstackrun/sdk';
24
+ import { takeFlag } from './api.js';
25
+ import { getAccessToken, invokeHint } from './auth.js';
26
+ const DASHBOARD_URL = 'https://getstack.run';
27
+ const PROVIDER_CALLS = {
28
+ anthropic: (stack, session) => stack.llm.anthropic.messages.create({
29
+ model: 'claude-haiku-4-5-20251001',
30
+ max_tokens: 32,
31
+ messages: [{ role: 'user', content: 'Reply with the single word: works' }],
32
+ }, { passport: session }),
33
+ openai: (stack, session) => stack.llm.openai.chat.completions.create({
34
+ model: 'gpt-4o-mini',
35
+ max_tokens: 32,
36
+ messages: [{ role: 'user', content: 'Reply with the single word: works' }],
37
+ }, { passport: session }),
38
+ openrouter: (stack, session) => stack.llm.openrouter.chat.completions.create({
39
+ model: 'openai/gpt-4o-mini',
40
+ max_tokens: 32,
41
+ messages: [{ role: 'user', content: 'Reply with the single word: works' }],
42
+ }, { passport: session }),
43
+ };
44
+ async function prompt(question, fallback) {
45
+ // Non-interactive (piped / CI): take the fallback silently.
46
+ if (!process.stdin.isTTY)
47
+ return fallback;
48
+ const rl = createInterface({ input: process.stdin, output: process.stderr });
49
+ try {
50
+ const answer = (await rl.question(`${question} [${fallback}]: `)).trim();
51
+ return answer || fallback;
52
+ }
53
+ finally {
54
+ rl.close();
55
+ }
56
+ }
57
+ export async function cmdQuickstart(args) {
58
+ const baseUrl = env['STACK_API_URL'] ?? 'https://api.getstack.run';
59
+ // Flags let a non-interactive caller skip the prompts entirely.
60
+ const providerFlag = takeFlag(args, '--provider');
61
+ const agentFlag = takeFlag(args, '--agent');
62
+ // 1. Signed in?
63
+ const token = await getAccessToken();
64
+ if (!token) {
65
+ stderr.write(`\n You're not signed in. Two one-time steps in the dashboard first:\n\n` +
66
+ ` 1. Create your account (magic link): ${DASHBOARD_URL}\n` +
67
+ ` 2. Connect an LLM provider (Anthropic/OpenAI): ${DASHBOARD_URL}/services\n\n` +
68
+ ` Then sign this CLI in and re-run:\n` +
69
+ ` ${invokeHint('auth login')}\n` +
70
+ ` ${invokeHint('quickstart')}\n\n`);
71
+ process.exit(1);
72
+ }
73
+ const opStack = new Stack({ baseUrl });
74
+ // 2. Which provider — and is it connected?
75
+ const providerInput = (typeof providerFlag === 'string' && providerFlag
76
+ ? providerFlag
77
+ : await prompt(' LLM provider (anthropic/openai/openrouter)', 'anthropic')).trim();
78
+ if (!['anthropic', 'openai', 'openrouter'].includes(providerInput)) {
79
+ stderr.write(`error: provider must be anthropic, openai, or openrouter (got "${providerInput}").\n`);
80
+ process.exit(2);
81
+ }
82
+ let connected;
83
+ try {
84
+ connected = (await opStack.services.listConnected());
85
+ }
86
+ catch (err) {
87
+ stderr.write(`error: could not list connected services (${err.message}).\n`);
88
+ process.exit(1);
89
+ }
90
+ const hasProvider = connected.some((c) => c.provider === providerInput && c.status === 'active');
91
+ if (!hasProvider) {
92
+ stderr.write(`\n ${providerInput} is not connected on this operator yet.\n` +
93
+ ` Connect it in the dashboard (the API key goes in the vault, not on this box):\n\n` +
94
+ ` ${DASHBOARD_URL}/services\n\n` +
95
+ ` Then re-run: ${invokeHint(`quickstart --provider ${providerInput}`)}\n\n`);
96
+ process.exit(1);
97
+ }
98
+ // 3. Register the agent with the safe preset (idempotent-ish: reuse an
99
+ // existing same-named agent if present).
100
+ const agentName = (typeof agentFlag === 'string' && agentFlag ? agentFlag : await prompt(' Agent name', 'quickstart-bot')).trim();
101
+ let agentId;
102
+ const existing = (await opStack.agents.list()).find((a) => a.name === agentName);
103
+ if (existing) {
104
+ agentId = existing.id;
105
+ stdout.write(` ✓ using existing agent ${agentName} (${agentId})\n`);
106
+ }
107
+ else {
108
+ const agent = await opStack.agents.register({ name: agentName, profile: 'proxied-llm-bot' });
109
+ agentId = agent.id;
110
+ stdout.write(` ✓ registered ${agentName} (${agentId}) — proxy_only + logged + stack_managed\n`);
111
+ }
112
+ // 4. Issue a passport + make one real governed LLM call. The preset
113
+ // creates a stack_managed agent (no on-box keypair — STACK signs
114
+ // server-side), so we authenticate as the operator (opStack) and
115
+ // issue an agent-scoped passport. No agent-runtime enrollment.
116
+ stdout.write(` … issuing a passport and making one governed ${providerInput} call\n`);
117
+ let session;
118
+ try {
119
+ session = await opStack.issuePassport({
120
+ agent_id: agentId,
121
+ // logged-mode agents require an intent declaration at issue time.
122
+ intent: { summary: `quickstart — one governed ${providerInput} call`, services: [providerInput] },
123
+ });
124
+ }
125
+ catch (err) {
126
+ stderr.write(`error: could not issue a passport (${err.message}).\n`);
127
+ process.exit(1);
128
+ }
129
+ try {
130
+ await PROVIDER_CALLS[providerInput](opStack, session);
131
+ }
132
+ catch (err) {
133
+ stderr.write(`error: the governed ${providerInput} call failed (${err.message}).\n` +
134
+ `If this is a scope error, ensure the agent is granted ${providerInput}.\n`);
135
+ process.exit(1);
136
+ }
137
+ stdout.write(` ✓ call succeeded\n`);
138
+ // 5. Proof — the audit row that call produced.
139
+ try {
140
+ const { entries } = await opStack.audit.list({ agentId, limit: 1 });
141
+ const row = entries[0];
142
+ if (row) {
143
+ const ts = new Date(row.timestamp).toISOString();
144
+ stdout.write(`\n Here's your proof — the call landed in the tamper-evident audit chain:\n\n` +
145
+ ` ${ts} ${row.action} → ${row.outcome} (agent ${agentId})\n` +
146
+ ` entry_hash ${row.entry_hash.slice(0, 16)}…\n\n` +
147
+ ` What just happened: a real ${providerInput} call went through STACK. The provider\n` +
148
+ ` key never touched this box — it stayed in the vault and was injected at the gateway.\n\n` +
149
+ ` Keep going:\n` +
150
+ ` • Drop-in for any existing tool: ${invokeHint(`proxy serve --agent ${agentName}`)}\n` +
151
+ ` • Watch calls live: ${invokeHint('monitor --follow')}\n` +
152
+ ` • See spend: ${invokeHint('llm usage summary')}\n\n`);
153
+ }
154
+ else {
155
+ stdout.write(`\n Call succeeded. (Audit row not yet visible — it lands within a moment.)\n\n`);
156
+ }
157
+ }
158
+ catch {
159
+ stdout.write(`\n Call succeeded. (Could not read the audit tail just now.)\n\n`);
160
+ }
161
+ }
162
+ //# sourceMappingURL=quickstart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quickstart.js","sourceRoot":"","sources":["../src/quickstart.ts"],"names":[],"mappings":"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"}
package/dist/scan.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export declare function cmdScan(args: string[]): Promise<void>;
2
+ //# sourceMappingURL=scan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../src/scan.ts"],"names":[],"mappings":"AAWA,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAyC3D"}