@getstackrun/cli 0.22.0 → 1.0.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 +8 -1
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +76 -16
- package/dist/agent.js.map +1 -1
- package/dist/api.d.ts +18 -12
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +52 -17
- package/dist/api.js.map +1 -1
- package/dist/auth.d.ts +2 -0
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +46 -28
- package/dist/auth.js.map +1 -1
- package/dist/authority.d.ts +2 -0
- package/dist/authority.d.ts.map +1 -0
- package/dist/authority.js +63 -0
- package/dist/authority.js.map +1 -0
- package/dist/detectors.d.ts.map +1 -1
- package/dist/detectors.js +4 -3
- package/dist/detectors.js.map +1 -1
- package/dist/dropoffs.d.ts.map +1 -1
- package/dist/dropoffs.js +12 -4
- package/dist/dropoffs.js.map +1 -1
- package/dist/format.d.ts +0 -1
- package/dist/format.d.ts.map +1 -1
- package/dist/format.js +19 -0
- package/dist/format.js.map +1 -1
- package/dist/governance.d.ts +13 -0
- package/dist/governance.d.ts.map +1 -0
- package/dist/governance.js +69 -0
- package/dist/governance.js.map +1 -0
- package/dist/identity.d.ts.map +1 -1
- package/dist/identity.js +131 -1
- package/dist/identity.js.map +1 -1
- package/dist/inbound-webhooks.d.ts +3 -0
- package/dist/inbound-webhooks.d.ts.map +1 -1
- package/dist/inbound-webhooks.js +4 -1
- package/dist/inbound-webhooks.js.map +1 -1
- package/dist/index.js +80 -25
- package/dist/index.js.map +1 -1
- package/dist/intents.d.ts.map +1 -1
- package/dist/intents.js +25 -30
- package/dist/intents.js.map +1 -1
- package/dist/llm.d.ts +1 -0
- package/dist/llm.d.ts.map +1 -1
- package/dist/llm.js +20 -13
- package/dist/llm.js.map +1 -1
- package/dist/partner.d.ts.map +1 -1
- package/dist/partner.js +62 -0
- package/dist/partner.js.map +1 -1
- package/dist/passports.d.ts.map +1 -1
- package/dist/passports.js +67 -17
- package/dist/passports.js.map +1 -1
- package/dist/pii.d.ts +2 -0
- package/dist/pii.d.ts.map +1 -0
- package/dist/pii.js +95 -0
- package/dist/pii.js.map +1 -0
- package/dist/proxy-serve.d.ts.map +1 -1
- package/dist/proxy-serve.js +29 -14
- package/dist/proxy-serve.js.map +1 -1
- package/dist/quickstart.d.ts +17 -0
- package/dist/quickstart.d.ts.map +1 -1
- package/dist/quickstart.js +54 -8
- package/dist/quickstart.js.map +1 -1
- package/dist/secret-input.d.ts +3 -0
- package/dist/secret-input.d.ts.map +1 -0
- package/dist/secret-input.js +41 -0
- package/dist/secret-input.js.map +1 -0
- package/dist/services.d.ts +10 -0
- package/dist/services.d.ts.map +1 -1
- package/dist/services.js +152 -20
- package/dist/services.js.map +1 -1
- package/dist/setup.d.ts +11 -0
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +226 -0
- package/dist/setup.js.map +1 -0
- package/dist/usage.d.ts.map +1 -1
- package/dist/usage.js +45 -5
- package/dist/usage.js.map +1 -1
- package/package.json +2 -2
package/dist/proxy-serve.js
CHANGED
|
@@ -12,10 +12,9 @@
|
|
|
12
12
|
// the shim:
|
|
13
13
|
// - ignores the dummy key the tool sends (that's the point — no real
|
|
14
14
|
// provider key ever lives on the box)
|
|
15
|
-
// - authenticates to STACK
|
|
16
|
-
//
|
|
17
|
-
//
|
|
18
|
-
// no manual `agent enroll` step)
|
|
15
|
+
// - authenticates to STACK using the credential appropriate to the
|
|
16
|
+
// agent's key mode: the signed-in operator session for stack_managed,
|
|
17
|
+
// or a local Ed25519 agent key for customer_managed
|
|
19
18
|
// - issues + auto-refreshes ONE passport for the agent
|
|
20
19
|
// - forwards to /v1/llm/<provider>/*, where STACK injects the real key
|
|
21
20
|
// from the vault, governs, logs, meters, and returns the provider's
|
|
@@ -33,9 +32,10 @@
|
|
|
33
32
|
// the box.
|
|
34
33
|
// - customer_managed: the agent owns an Ed25519 key on the box
|
|
35
34
|
// (~/.stack/agents/<id>.json, chmod 600), scoped to ONE agent and
|
|
36
|
-
//
|
|
37
|
-
//
|
|
38
|
-
//
|
|
35
|
+
// rejected on the next STACK-verified call after revocation.
|
|
36
|
+
// Agent-runtime mode signs each call with a 60s agent JWT; only the
|
|
37
|
+
// scoped agent key is on the box, no operator-wide credential.
|
|
38
|
+
// Strongest posture for an untrusted host.
|
|
39
39
|
// - Binds 127.0.0.1 by default. --host is honored but a non-loopback
|
|
40
40
|
// bind prints a loud warning — anyone who can reach the port can make
|
|
41
41
|
// governed calls as this agent (still bounded by the agent's grants +
|
|
@@ -241,9 +241,12 @@ export async function cmdProxy(args) {
|
|
|
241
241
|
}
|
|
242
242
|
catch (err) {
|
|
243
243
|
const msg = err instanceof Error ? err.message : String(err);
|
|
244
|
+
const enrollmentHint = keyMode === 'customer_managed'
|
|
245
|
+
? ` If the local agent key is missing, run ${invokeHint(`agent enroll ${agentId}`)}.`
|
|
246
|
+
: '';
|
|
244
247
|
stderr.write(`error: could not issue a passport for ${agentId} (${msg}).\n` +
|
|
245
|
-
`
|
|
246
|
-
|
|
248
|
+
`Check that you are signed in (${invokeHint('auth login')}) and that the agent is not blocked.` +
|
|
249
|
+
`${enrollmentHint}\n`);
|
|
247
250
|
process.exit(1);
|
|
248
251
|
}
|
|
249
252
|
const server = createServer((req, res) => {
|
|
@@ -289,9 +292,15 @@ export async function cmdProxy(args) {
|
|
|
289
292
|
if (isStreaming) {
|
|
290
293
|
// Re-serialize the SDK's parsed provider events as SSE frames.
|
|
291
294
|
// Keeps the client stream byte-faithful to what the tool's SDK
|
|
292
|
-
// expects;
|
|
293
|
-
//
|
|
294
|
-
//
|
|
295
|
+
// expects; STACK's synthetic frames are NOT re-emitted — they go
|
|
296
|
+
// to stderr so the operator sees them without polluting the
|
|
297
|
+
// provider's native protocol.
|
|
298
|
+
//
|
|
299
|
+
// Two synthetic frames exist (GET-267). `leak_detected` is a notice:
|
|
300
|
+
// the stream completed. `leak_blocked` means STACK refused to
|
|
301
|
+
// forward the next chunk and the stream ENDS THERE, so the tool sees
|
|
302
|
+
// a truncated response with no error of its own — say so plainly, or
|
|
303
|
+
// the operator debugs the wrong thing.
|
|
295
304
|
res.writeHead(200, {
|
|
296
305
|
'content-type': 'text/event-stream',
|
|
297
306
|
'cache-control': 'no-cache',
|
|
@@ -303,6 +312,11 @@ export async function cmdProxy(args) {
|
|
|
303
312
|
stderr.write(` ↳ STACK flagged a potential leak in a streamed response (agent ${agentId}).\n`);
|
|
304
313
|
continue;
|
|
305
314
|
}
|
|
315
|
+
if (evt && evt['type'] === 'leak_blocked') {
|
|
316
|
+
stderr.write(` ↳ STACK BLOCKED a leak mid-stream (agent ${agentId}). The response stops here; ` +
|
|
317
|
+
'content delivered before this point was scanned and clean.\n');
|
|
318
|
+
continue;
|
|
319
|
+
}
|
|
306
320
|
res.write(`data: ${JSON.stringify(evt)}\n\n`);
|
|
307
321
|
}
|
|
308
322
|
res.end();
|
|
@@ -323,7 +337,8 @@ export async function cmdProxy(args) {
|
|
|
323
337
|
if (host !== '127.0.0.1' && host !== 'localhost') {
|
|
324
338
|
stderr.write(`\n ⚠ WARNING: binding ${host} (not loopback). Anyone who can reach ${host}:${port}\n` +
|
|
325
339
|
` can make governed LLM calls as agent ${agentId}. This is still bounded by the\n` +
|
|
326
|
-
` agent's grants and
|
|
340
|
+
` agent's grants and rejected on its next STACK-verified call after revocation,\n` +
|
|
341
|
+
` but it is no longer localhost-only.\n`);
|
|
327
342
|
}
|
|
328
343
|
server.listen(port, host, () => {
|
|
329
344
|
const providerLines = [...providers]
|
|
@@ -342,7 +357,7 @@ export async function cmdProxy(args) {
|
|
|
342
357
|
? ` ANTHROPIC_BASE_URL=http://${host}:${port} ANTHROPIC_API_KEY=dummy your-tool\n\n`
|
|
343
358
|
: ` OPENAI_BASE_URL=http://${host}:${port}/v1 OPENAI_API_KEY=dummy your-tool\n\n`) +
|
|
344
359
|
` health: curl http://${host}:${port}/healthz\n` +
|
|
345
|
-
` Ctrl-C to stop.
|
|
360
|
+
` Ctrl-C to stop. Revoking the agent rejects its next STACK-verified call.\n\n`);
|
|
346
361
|
});
|
|
347
362
|
server.on('error', (err) => {
|
|
348
363
|
const e = err;
|
package/dist/proxy-serve.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proxy-serve.js","sourceRoot":"","sources":["../src/proxy-serve.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,0EAA0E;AAC1E,0EAA0E;AAC1E,wBAAwB;AACxB,EAAE;AACF,2EAA2E;AAC3E,iEAAiE;AACjE,2EAA2E;AAC3E,YAAY;AACZ,uEAAuE;AACvE,0CAA0C;AAC1C,sEAAsE;AACtE,sEAAsE;AACtE,uEAAuE;AACvE,qCAAqC;AACrC,yDAAyD;AACzD,yEAAyE;AACzE,wEAAwE;AACxE,6CAA6C;AAC7C,EAAE;AACF,4EAA4E;AAC5E,EAAE;AACF,wEAAwE;AACxE,4EAA4E;AAC5E,wEAAwE;AACxE,0EAA0E;AAC1E,0EAA0E;AAC1E,0EAA0E;AAC1E,yEAAyE;AACzE,eAAe;AACf,iEAAiE;AACjE,sEAAsE;AACtE,uEAAuE;AACvE,2EAA2E;AAC3E,2DAA2D;AAC3D,uEAAuE;AACvE,0EAA0E;AAC1E,0EAA0E;AAC1E,gDAAgD;AAEhD,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,YAAY,EAA6C,MAAM,WAAW,CAAC;AACpF,OAAO,EAAE,KAAK,EAAE,UAAU,EAA0C,MAAM,kBAAkB,CAAC;AAC7F,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,MAAM,YAAY,GAAG,IAAI,CAAC;AAC1B,MAAM,YAAY,GAAG,WAAW,CAAC;AACjC,MAAM,aAAa,GAAkB,CAAC,WAAW,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;AAa3E,SAAS,UAAU,CAAC,QAAgB,EAAE,SAA2B;IAC/D,sEAAsE;IACtE,IACE,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC;QAC1B,CAAC,QAAQ,KAAK,cAAc,IAAI,QAAQ,KAAK,WAAW,CAAC,EACzD,CAAC;QACD,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;IACnC,CAAC;IACD,4DAA4D;IAC5D,sEAAsE;IACtE,IAAI,QAAQ,KAAK,sBAAsB,IAAI,QAAQ,KAAK,mBAAmB,EAAE,CAAC;QAC5E,IAAI,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;YAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;QAC3D,IAAI,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC;YAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;IACrE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,GAAoB;IAC9C,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG;QAAE,MAAM,CAAC,IAAI,CAAC,KAAe,CAAC,CAAC;IAC5D,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACnD,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAA4B,CAAC;AACpD,CAAC;AAED,2EAA2E;AAC3E,4EAA4E;AAC5E,yEAAyE;AACzE,oCAAoC;AACpC,KAAK,UAAU,WAAW,CACxB,KAAY,EACZ,QAAqB,EACrB,IAA6B,EAC7B,OAAwB;IAExB,MAAM,IAAI,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;IACnC,IAAI,QAAQ,KAAK,WAAW,EAAE,CAAC;QAC7B,OAAO,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAa,EAAE,IAAI,CAAC,CAAC;IAClE,CAAC;IACD,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAa,EAAE,IAAI,CAAC,CAAC;IACvE,CAAC;IACD,OAAO,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAa,EAAE,IAAI,CAAC,CAAC;AAC3E,CAAC;AAED,SAAS,QAAQ,CAAC,GAAmB,EAAE,MAAc,EAAE,OAAgB;IACrE,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC;IACzD,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE;QACpB,cAAc,EAAE,kBAAkB;QAClC,gBAAgB,EAAE,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC;KACzC,CAAC,CAAC;IACH,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACf,CAAC;AAED,yEAAyE;AACzE,yEAAyE;AACzE,6DAA6D;AAC7D,SAAS,gBAAgB,CAAC,GAAmB,EAAE,QAAqB,EAAE,GAAY;IAChF,MAAM,MAAM,GAAG,GAAG,YAAY,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC;IAC5D,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACjE,8DAA8D;IAC9D,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,qBAAqB,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;IAE3E,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACnB,IAAI,wBAAwB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3C,MAAM,CAAC,KAAK,CACV,OAAO,QAAQ,4CAA4C;gBACzD,GAAG,UAAU,CAAC,+CAA+C,CAAC,GAAG;gBACjE,eAAe,QAAQ,6CAA6C,CACvE,CAAC;QACJ,CAAC;aAAM,IAAI,oCAAoC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC9D,MAAM,CAAC,KAAK,CACV,OAAO,QAAQ,sCAAsC;gBACnD,4DAA4D,CAC/D,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAAc;IAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;QACpB,MAAM,CAAC,KAAK,CACV,oCAAoC,GAAG,IAAI,EAAE,WAAW,UAAU,CAAC,+BAA+B,CAAC,IAAI,CACxG,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAE3B,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC3C,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC9C,MAAM,CAAC,KAAK,CACV,UAAU,UAAU,CAAC,yGAAyG,CAAC,MAAM;YACnI,uEAAuE;YACvE,yEAAyE;YACzE,oFAAoF,CACvF,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC1C,MAAM,IAAI,GAAG,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;IACzF,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,KAAK,EAAE,CAAC;QACxD,MAAM,CAAC,KAAK,CAAC,kDAAkD,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACxF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC1C,MAAM,IAAI,GAAG,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC;IAEpE,yEAAyE;IACzE,sEAAsE;IACtE,sCAAsC;IACtC,MAAM,aAAa,GAAa,EAAE,CAAC;IACnC,SAAS,CAAC;QACR,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QACvC,IAAI,OAAO,CAAC,KAAK,QAAQ;YAAE,MAAM;QACjC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3E,CAAC;IACD,IAAI,SAA2B,CAAC;IAChC,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,SAAS,GAAG,IAAI,GAAG,CAAc,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC5D,CAAC;SAAM,CAAC;QACN,KAAK,MAAM,CAAC,IAAI,aAAa,EAAE,CAAC;YAC9B,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAgB,CAAC,EAAE,CAAC;gBAC9C,MAAM,CAAC,KAAK,CAAC,qCAAqC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;gBAC9F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QACD,SAAS,GAAG,IAAI,GAAG,CAAC,aAA8B,CAAC,CAAC;QACpD,IAAI,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;YAC3D,MAAM,CAAC,KAAK,CACV,mGAAmG;gBACjG,iDAAiD,CACpD,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,0BAA0B,CAAC;IAEnE,sEAAsE;IACtE,uEAAuE;IACvE,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IACvC,IAAI,OAAe,CAAC;IACpB,IAAI,OAAe,CAAC;IACpB,IAAI,CAAC;QACH,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAChC,MAAM,CAAC,GAAG,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAsC,CAAC;YACpF,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC;YACf,OAAO,GAAG,CAAC,CAAC,QAAQ,IAAI,eAAe,CAAC;QAC1C,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,GAAG,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAA2D,CAAC;YACrG,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;YACpD,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,CAAC,KAAK,CACV,0BAA0B,QAAQ,uBAAuB;oBACvD,0CAA0C;oBAC1C,KAAK,UAAU,CAAC,kBAAkB,QAAQ,4BAA4B,CAAC,IAAI,CAC9E,CAAC;gBACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC;YACnB,OAAO,GAAG,KAAK,CAAC,QAAQ,IAAI,eAAe,CAAC;QAC9C,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,MAAM,CAAC,KAAK,CACV,mCAAmC,QAAQ,MAAM,GAAG,MAAM;YACxD,kBAAkB,UAAU,CAAC,YAAY,CAAC,4BAA4B,CACzE,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,oDAAoD;IACpD,EAAE;IACF,wEAAwE;IACxE,uEAAuE;IACvE,sEAAsE;IACtE,sEAAsE;IACtE,oEAAoE;IACpE,oCAAoC;IACpC,EAAE;IACF,oEAAoE;IACpE,uEAAuE;IACvE,kEAAkE;IAClE,uEAAuE;IACvE,EAAE;IACF,sEAAsE;IACtE,4BAA4B;IAC5B,MAAM,KAAK,GACT,OAAO,KAAK,kBAAkB,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IACtG,IAAI,OAAO,KAAK,kBAAkB,EAAE,CAAC;QACnC,MAAM,CAAC,KAAK,CAAC,yFAAyF,CAAC,CAAC;IAC1G,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,KAAK,CACV,kFAAkF;YAChF,kFAAkF,CACrF,CAAC;IACJ,CAAC;IAED,mEAAmE;IACnE,wEAAwE;IACxE,qEAAqE;IACrE,qEAAqE;IACrE,iEAAiE;IACjE,sEAAsE;IACtE,iEAAiE;IACjE,MAAM,YAAY,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC;IACpC,IAAI,OAAwB,CAAC;IAC7B,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,KAAK,CAAC,aAAa,CAAC;YAClC,QAAQ,EAAE,OAAO;YACjB,MAAM,EAAE;gBACN,OAAO,EAAE,qCAAqC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;gBACxE,QAAQ,EAAE,YAAY;aACvB;SACF,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,MAAM,CAAC,KAAK,CACV,yCAAyC,OAAO,KAAK,GAAG,MAAM;YAC5D,8DAA8D,UAAU,CAAC,YAAY,CAAC,QAAQ;YAC9F,0FAA0F,CAC7F,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACvC,KAAK,CAAC,KAAK,IAAI,EAAE;YACf,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,UAAU,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;YAC9D,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,GAAG,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;gBACxD,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE;oBACjB,EAAE,EAAE,IAAI;oBACR,QAAQ,EAAE,OAAO;oBACjB,SAAS,EAAE,CAAC,GAAG,SAAS,CAAC;oBACzB,mBAAmB,EAAE,OAAO,CAAC,SAAS,CAAC,WAAW,EAAE;iBACrD,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YACD,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC1B,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;gBACpF,OAAO;YACT,CAAC;YACD,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;YAClD,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE;oBACjB,KAAK,EAAE;wBACL,IAAI,EAAE,WAAW;wBACjB,OAAO,EACL,wBAAwB,GAAG,CAAC,QAAQ,YAAY;4BAChD,CAAC,GAAG,SAAS,CAAC;iCACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC;iCACzE,IAAI,CAAC,IAAI,CAAC;qBAChB;iBACF,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YAED,IAAI,IAA6B,CAAC;YAClC,IAAI,CAAC;gBACH,IAAI,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;YACjC,CAAC;YAAC,MAAM,CAAC;gBACP,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,mBAAmB,EAAE,EAAE,CAAC,CAAC;gBACzF,OAAO;YACT,CAAC;YAED,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC;YAC5C,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;gBAEvE,IAAI,WAAW,EAAE,CAAC;oBAChB,+DAA+D;oBAC/D,+DAA+D;oBAC/D,8DAA8D;oBAC9D,iEAAiE;oBACjE,oDAAoD;oBACpD,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE;wBACjB,cAAc,EAAE,mBAAmB;wBACnC,eAAe,EAAE,UAAU;wBAC3B,UAAU,EAAE,YAAY;qBACzB,CAAC,CAAC;oBACH,MAAM,QAAQ,GAAG,MAAgD,CAAC;oBAClE,IAAI,KAAK,EAAE,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;wBACjC,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,eAAe,EAAE,CAAC;4BAC3C,MAAM,CAAC,KAAK,CAAC,oEAAoE,OAAO,MAAM,CAAC,CAAC;4BAChG,SAAS;wBACX,CAAC;wBACD,GAAG,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;oBAChD,CAAC;oBACD,GAAG,CAAC,GAAG,EAAE,CAAC;oBACV,OAAO;gBACT,CAAC;gBAED,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;YAC7B,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;oBACpB,yDAAyD;oBACzD,GAAG,CAAC,GAAG,EAAE,CAAC;oBACV,OAAO;gBACT,CAAC;gBACD,gBAAgB,CAAC,GAAG,EAAE,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,IAAI,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;QACjD,MAAM,CAAC,KAAK,CACV,0BAA0B,IAAI,yCAAyC,IAAI,IAAI,IAAI,IAAI;YACrF,4CAA4C,OAAO,kCAAkC;YACrF,iFAAiF,CACpF,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE;QAC7B,MAAM,aAAa,GAAG,CAAC,GAAG,SAAS,CAAC;aACjC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACT,CAAC,KAAK,WAAW;YACf,CAAC,CAAC,4BAA4B,IAAI,IAAI,IAAI,cAAc;YACxD,CAAC,CAAC,OAAO,CAAC,eAAe,IAAI,IAAI,IAAI,sBAAsB,CAC9D;aACA,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,MAAM,CAAC,KAAK,CACV,2DAA2D;YACzD,2DAA2D;YAC3D,gBAAgB,OAAO,IAAI;YAC3B,uBAAuB,IAAI,IAAI,IAAI,IAAI;YACvC,iBAAiB,aAAa,MAAM;YACpC,0EAA0E;YAC1E,0DAA0D;YAC1D,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC;gBACzB,CAAC,CAAC,iCAAiC,IAAI,IAAI,IAAI,wCAAwC;gBACvF,CAAC,CAAC,8BAA8B,IAAI,IAAI,IAAI,wCAAwC,CAAC;YACvF,yBAAyB,IAAI,IAAI,IAAI,YAAY;YACjD,yEAAyE,CAC5E,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;QACzB,MAAM,CAAC,GAAG,GAA4B,CAAC;QACvC,IAAI,CAAC,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAC5B,MAAM,CAAC,KAAK,CAAC,eAAe,IAAI,wDAAwD,CAAC,CAAC;QAC5F,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC;QACvD,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,4EAA4E;AAC5E,6DAA6D;AAC7D,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,UAAU,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IAC5C,KAAK,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/B,CAAC"}
|
|
1
|
+
{"version":3,"file":"proxy-serve.js","sourceRoot":"","sources":["../src/proxy-serve.ts"],"names":[],"mappings":"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"}
|
package/dist/quickstart.d.ts
CHANGED
|
@@ -1,2 +1,19 @@
|
|
|
1
|
+
interface QuickstartConnection {
|
|
2
|
+
id: string;
|
|
3
|
+
scopes?: string[];
|
|
4
|
+
}
|
|
5
|
+
interface QuickstartPermission {
|
|
6
|
+
service_connection_id: string;
|
|
7
|
+
}
|
|
8
|
+
interface QuickstartAgent {
|
|
9
|
+
id: string;
|
|
10
|
+
name: string;
|
|
11
|
+
credential_access?: string;
|
|
12
|
+
accountability_mode?: string;
|
|
13
|
+
key_mode?: string;
|
|
14
|
+
}
|
|
15
|
+
export declare function quickstartAgentProfileProblem(agent: QuickstartAgent): string | undefined;
|
|
16
|
+
export declare function quickstartGrantBody(connection: QuickstartConnection, permissions: QuickstartPermission[], agentId: string): Record<string, unknown> | undefined;
|
|
1
17
|
export declare function cmdQuickstart(args: string[]): Promise<void>;
|
|
18
|
+
export {};
|
|
2
19
|
//# sourceMappingURL=quickstart.d.ts.map
|
package/dist/quickstart.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quickstart.d.ts","sourceRoot":"","sources":["../src/quickstart.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"quickstart.d.ts","sourceRoot":"","sources":["../src/quickstart.ts"],"names":[],"mappings":"AA6DA,UAAU,oBAAoB;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,UAAU,oBAAoB;IAC5B,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAED,UAAU,eAAe;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,GAAG,SAAS,CAaxF;AAED,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,oBAAoB,EAChC,WAAW,EAAE,oBAAoB,EAAE,EACnC,OAAO,EAAE,MAAM,GACd,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CASrC;AAcD,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAmKjE"}
|
package/dist/quickstart.js
CHANGED
|
@@ -13,7 +13,6 @@
|
|
|
13
13
|
// 3. register an agent with profile: 'proxied-llm-bot' (proxy_only +
|
|
14
14
|
// logged + stack_managed) so the first call just works
|
|
15
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
16
|
// 5. print the audit row that call produced — "it worked, here's proof"
|
|
18
17
|
//
|
|
19
18
|
// No footgun decisions: the only inputs are the provider and an agent name,
|
|
@@ -21,7 +20,7 @@
|
|
|
21
20
|
import { env, stdout, stderr } from 'node:process';
|
|
22
21
|
import { createInterface } from 'node:readline/promises';
|
|
23
22
|
import { Stack } from '@getstackrun/sdk';
|
|
24
|
-
import { takeFlag } from './api.js';
|
|
23
|
+
import { api, takeFlag } from './api.js';
|
|
25
24
|
import { getAccessToken, invokeHint } from './auth.js';
|
|
26
25
|
const DASHBOARD_URL = 'https://getstack.run';
|
|
27
26
|
const PROVIDER_CALLS = {
|
|
@@ -41,6 +40,29 @@ const PROVIDER_CALLS = {
|
|
|
41
40
|
messages: [{ role: 'user', content: 'Reply with the single word: works' }],
|
|
42
41
|
}, { passport: session }),
|
|
43
42
|
};
|
|
43
|
+
export function quickstartAgentProfileProblem(agent) {
|
|
44
|
+
const expected = {
|
|
45
|
+
credential_access: 'proxy_only',
|
|
46
|
+
accountability_mode: 'logged',
|
|
47
|
+
key_mode: 'stack_managed',
|
|
48
|
+
};
|
|
49
|
+
const mismatches = Object.entries(expected)
|
|
50
|
+
.filter(([field, value]) => agent[field] !== value)
|
|
51
|
+
.map(([field, value]) => `${field}=${String(agent[field] ?? 'unknown')} (expected ${value})`);
|
|
52
|
+
return mismatches.length > 0 ? mismatches.join(', ') : undefined;
|
|
53
|
+
}
|
|
54
|
+
export function quickstartGrantBody(connection, permissions, agentId) {
|
|
55
|
+
if (permissions.some((grant) => grant.service_connection_id === connection.id))
|
|
56
|
+
return undefined;
|
|
57
|
+
const scopes = connection.scopes ?? [];
|
|
58
|
+
if (scopes.length === 0)
|
|
59
|
+
throw new Error('the selected provider connection has no grantable scopes.');
|
|
60
|
+
return {
|
|
61
|
+
agent_id: agentId,
|
|
62
|
+
service_connection_id: connection.id,
|
|
63
|
+
scopes,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
44
66
|
async function prompt(question, fallback) {
|
|
45
67
|
// Non-interactive (piped / CI): take the fallback silently.
|
|
46
68
|
if (!process.stdin.isTTY)
|
|
@@ -67,7 +89,7 @@ export async function cmdQuickstart(args) {
|
|
|
67
89
|
` 2. Connect an LLM provider (Anthropic/OpenAI): ${DASHBOARD_URL}/services\n\n` +
|
|
68
90
|
` Then sign this CLI in and re-run:\n` +
|
|
69
91
|
` ${invokeHint('auth login')}\n` +
|
|
70
|
-
` ${invokeHint(
|
|
92
|
+
` ${invokeHint(`quickstart --provider ${typeof providerFlag === 'string' ? providerFlag : 'anthropic'}`)}\n\n`);
|
|
71
93
|
process.exit(1);
|
|
72
94
|
}
|
|
73
95
|
const opStack = new Stack({ baseUrl });
|
|
@@ -87,28 +109,52 @@ export async function cmdQuickstart(args) {
|
|
|
87
109
|
stderr.write(`error: could not list connected services (${err.message}).\n`);
|
|
88
110
|
process.exit(1);
|
|
89
111
|
}
|
|
90
|
-
const
|
|
91
|
-
if (!
|
|
112
|
+
const providerConnection = connected.find((c) => c.provider === providerInput && c.status === 'active');
|
|
113
|
+
if (!providerConnection) {
|
|
92
114
|
stderr.write(`\n ${providerInput} is not connected on this operator yet.\n` +
|
|
93
115
|
` Connect it in the dashboard (the API key goes in the vault, not on this box):\n\n` +
|
|
94
116
|
` ${DASHBOARD_URL}/services\n\n` +
|
|
95
117
|
` Then re-run: ${invokeHint(`quickstart --provider ${providerInput}`)}\n\n`);
|
|
96
118
|
process.exit(1);
|
|
97
119
|
}
|
|
98
|
-
// 3. Register the agent with the safe preset
|
|
99
|
-
//
|
|
120
|
+
// 3. Register the agent with the safe preset. Reuse a same-named agent
|
|
121
|
+
// only when its security posture is exactly the one this flow promises.
|
|
100
122
|
const agentName = (typeof agentFlag === 'string' && agentFlag ? agentFlag : await prompt(' Agent name', 'quickstart-bot')).trim();
|
|
101
123
|
let agentId;
|
|
102
124
|
const existing = (await opStack.agents.list()).find((a) => a.name === agentName);
|
|
103
125
|
if (existing) {
|
|
126
|
+
const profileProblem = quickstartAgentProfileProblem(existing);
|
|
127
|
+
if (profileProblem) {
|
|
128
|
+
stderr.write(`error: an agent named "${agentName}" already exists with a different security posture:\n` +
|
|
129
|
+
` ${profileProblem}\n` +
|
|
130
|
+
`Choose another name, for example:\n` +
|
|
131
|
+
` ${invokeHint(`quickstart --provider ${providerInput} --agent ${agentName}-stack`)}\n`);
|
|
132
|
+
process.exit(1);
|
|
133
|
+
}
|
|
104
134
|
agentId = existing.id;
|
|
105
|
-
stdout.write(` ✓ using existing
|
|
135
|
+
stdout.write(` ✓ using existing ${agentName} (${agentId}) — proxy_only + logged + stack_managed\n`);
|
|
106
136
|
}
|
|
107
137
|
else {
|
|
108
138
|
const agent = await opStack.agents.register({ name: agentName, profile: 'proxied-llm-bot' });
|
|
109
139
|
agentId = agent.id;
|
|
110
140
|
stdout.write(` ✓ registered ${agentName} (${agentId}) — proxy_only + logged + stack_managed\n`);
|
|
111
141
|
}
|
|
142
|
+
// The intent can only narrow an existing service grant. It cannot create
|
|
143
|
+
// one. Keep an existing grant unchanged. Create the missing grant from the
|
|
144
|
+
// connection's own scope ceiling before passport issuance.
|
|
145
|
+
const permissions = await api('GET', `/v1/agents/${encodeURIComponent(agentId)}/permissions`);
|
|
146
|
+
let grantBody;
|
|
147
|
+
try {
|
|
148
|
+
grantBody = quickstartGrantBody(providerConnection, permissions, agentId);
|
|
149
|
+
}
|
|
150
|
+
catch {
|
|
151
|
+
stderr.write(`error: the ${providerInput} connection has no grantable scopes. Verify the connection in the Console.\n`);
|
|
152
|
+
process.exit(1);
|
|
153
|
+
}
|
|
154
|
+
if (grantBody) {
|
|
155
|
+
await api('POST', '/v1/services/grant', { body: grantBody });
|
|
156
|
+
stdout.write(` ✓ granted ${providerInput} to ${agentName}\n`);
|
|
157
|
+
}
|
|
112
158
|
// 4. Issue a passport + make one real governed LLM call. The preset
|
|
113
159
|
// creates a stack_managed agent (no on-box keypair — STACK signs
|
|
114
160
|
// server-side), so we authenticate as the operator (opStack) and
|
package/dist/quickstart.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quickstart.js","sourceRoot":"","sources":["../src/quickstart.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,2BAA2B;AAC3B,EAAE;AACF,sEAAsE;AACtE,2EAA2E;AAC3E,2EAA2E;AAC3E,iDAAiD;AACjD,EAAE;AACF,0EAA0E;AAC1E,sCAAsC;AACtC,2EAA2E;AAC3E,4EAA4E;AAC5E,uEAAuE;AACvE,4DAA4D;AAC5D,2EAA2E;AAC3E,
|
|
1
|
+
{"version":3,"file":"quickstart.js","sourceRoot":"","sources":["../src/quickstart.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secret-input.d.ts","sourceRoot":"","sources":["../src/secret-input.ts"],"names":[],"mappings":"AAEA,gFAAgF;AAChF,wBAAsB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAkC7E"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { stdin, stderr } from 'node:process';
|
|
2
|
+
/** Read one secret without placing it in argv or echoing it to the terminal. */
|
|
3
|
+
export async function readSecretFromStdin(promptText) {
|
|
4
|
+
if (!stdin.isTTY) {
|
|
5
|
+
const chunks = [];
|
|
6
|
+
return new Promise((resolve, reject) => {
|
|
7
|
+
stdin.on('data', (chunk) => chunks.push(Buffer.from(chunk)));
|
|
8
|
+
stdin.once('end', () => resolve(Buffer.concat(chunks).toString('utf8').trim()));
|
|
9
|
+
stdin.once('error', reject);
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
stderr.write(promptText);
|
|
13
|
+
const wasRaw = stdin.isRaw === true;
|
|
14
|
+
stdin.setRawMode?.(true);
|
|
15
|
+
stdin.resume();
|
|
16
|
+
stdin.setEncoding('utf8');
|
|
17
|
+
return new Promise((resolve, reject) => {
|
|
18
|
+
let value = '';
|
|
19
|
+
const finish = (fn) => {
|
|
20
|
+
stdin.removeListener('data', onData);
|
|
21
|
+
stdin.setRawMode?.(wasRaw);
|
|
22
|
+
stdin.pause();
|
|
23
|
+
stderr.write('\n');
|
|
24
|
+
fn();
|
|
25
|
+
};
|
|
26
|
+
const onData = (chunk) => {
|
|
27
|
+
for (const char of chunk) {
|
|
28
|
+
if (char === '\r' || char === '\n')
|
|
29
|
+
return finish(() => resolve(value.trim()));
|
|
30
|
+
if (char === '\u0003' || char === '\u0004')
|
|
31
|
+
return finish(() => reject(new Error('cancelled')));
|
|
32
|
+
if (char === '\u007f' || char === '\b')
|
|
33
|
+
value = value.slice(0, -1);
|
|
34
|
+
else
|
|
35
|
+
value += char;
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
stdin.on('data', onData);
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=secret-input.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secret-input.js","sourceRoot":"","sources":["../src/secret-input.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE7C,gFAAgF;AAChF,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,UAAkB;IAC1D,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACjB,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC7C,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC7D,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YAChF,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACzB,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC;IACpC,KAAK,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC;IACzB,KAAK,CAAC,MAAM,EAAE,CAAC;IACf,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAC1B,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC7C,IAAI,KAAK,GAAG,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,CAAC,EAAc,EAAE,EAAE;YAChC,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACrC,KAAK,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC;YAC3B,KAAK,CAAC,KAAK,EAAE,CAAC;YACd,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACnB,EAAE,EAAE,CAAC;QACP,CAAC,CAAC;QACF,MAAM,MAAM,GAAG,CAAC,KAAa,EAAE,EAAE;YAC/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI;oBAAE,OAAO,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;gBAC/E,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,QAAQ;oBAAE,OAAO,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;gBAChG,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI;oBAAE,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;;oBAC9D,KAAK,IAAI,IAAI,CAAC;YACrB,CAAC;QACH,CAAC,CAAC;QACF,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/dist/services.d.ts
CHANGED
|
@@ -1,2 +1,12 @@
|
|
|
1
|
+
interface ServiceConnection {
|
|
2
|
+
id: string;
|
|
3
|
+
provider: string;
|
|
4
|
+
status: string;
|
|
5
|
+
scopes?: string[];
|
|
6
|
+
connected_at?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare const CONNECTED_SERVICES_PATH = "/v1/services/connected";
|
|
9
|
+
export declare function findConnectedService(connections: ServiceConnection[], connectionId: string): ServiceConnection | undefined;
|
|
1
10
|
export declare function cmdService(args: string[]): Promise<void>;
|
|
11
|
+
export {};
|
|
2
12
|
//# sourceMappingURL=services.d.ts.map
|
package/dist/services.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"services.d.ts","sourceRoot":"","sources":["../src/services.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"services.d.ts","sourceRoot":"","sources":["../src/services.ts"],"names":[],"mappings":"AAgBA,UAAU,iBAAiB;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,uBAAuB,2BAA2B,CAAC;AAEhE,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,iBAAiB,EAAE,EAChC,YAAY,EAAE,MAAM,GACnB,iBAAiB,GAAG,SAAS,CAE/B;AAwPD,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA0D9D"}
|
package/dist/services.js
CHANGED
|
@@ -1,8 +1,17 @@
|
|
|
1
1
|
// services subcommands — thin wrappers over /v1/services/* + /v1/credentials/*.
|
|
2
|
-
import { stdout, stderr, exit } from 'node:process';
|
|
2
|
+
import { stdout, stderr, stdin, exit } from 'node:process';
|
|
3
3
|
import { api, takeFlag, resolveAgentId } from './api.js';
|
|
4
4
|
import { invokeHint } from './auth.js';
|
|
5
5
|
import { printJson, printTable, printRecord, fmt } from './format.js';
|
|
6
|
+
import { governedApi } from './governance.js';
|
|
7
|
+
export const CONNECTED_SERVICES_PATH = '/v1/services/connected';
|
|
8
|
+
export function findConnectedService(connections, connectionId) {
|
|
9
|
+
return connections.find((connection) => connection.id === connectionId);
|
|
10
|
+
}
|
|
11
|
+
async function listConnections() {
|
|
12
|
+
const out = await api('GET', CONNECTED_SERVICES_PATH);
|
|
13
|
+
return Array.isArray(out) ? out : [];
|
|
14
|
+
}
|
|
6
15
|
async function cmdCatalog(json) {
|
|
7
16
|
const list = await api('GET', '/v1/services');
|
|
8
17
|
if (json)
|
|
@@ -11,11 +20,7 @@ async function cmdCatalog(json) {
|
|
|
11
20
|
printTable(['PROVIDER', 'NAME', 'AVAILABLE'], rows);
|
|
12
21
|
}
|
|
13
22
|
async function cmdConnections(json) {
|
|
14
|
-
|
|
15
|
-
// route returns `{connections: [...]}` envelope after auth filter.
|
|
16
|
-
// Re-use that path so a CLI user sees the same authoritative list.
|
|
17
|
-
const out = await api('GET', '/v1/services');
|
|
18
|
-
const list = Array.isArray(out) ? out : (out?.connections ?? []);
|
|
23
|
+
const list = await listConnections();
|
|
19
24
|
if (json)
|
|
20
25
|
return printJson(list);
|
|
21
26
|
if (list.length === 0) {
|
|
@@ -26,7 +31,11 @@ async function cmdConnections(json) {
|
|
|
26
31
|
printTable(['ID', 'PROVIDER', 'STATUS', 'SCOPES'], rows);
|
|
27
32
|
}
|
|
28
33
|
async function cmdShow(connectionId, json) {
|
|
29
|
-
const out = await
|
|
34
|
+
const out = findConnectedService(await listConnections(), connectionId);
|
|
35
|
+
if (!out) {
|
|
36
|
+
stderr.write(`error: service connection "${connectionId}" was not found.\n`);
|
|
37
|
+
exit(1);
|
|
38
|
+
}
|
|
30
39
|
if (json)
|
|
31
40
|
return printJson(out);
|
|
32
41
|
printRecord(out);
|
|
@@ -60,11 +69,110 @@ async function cmdTemplates(json) {
|
|
|
60
69
|
return printJson(list);
|
|
61
70
|
printJson(list);
|
|
62
71
|
}
|
|
72
|
+
/** Read a secret from stdin without echoing it.
|
|
73
|
+
*
|
|
74
|
+
* Two shapes, both normal:
|
|
75
|
+
* piped `cat key.txt | stack service connect-custom --stdin --name X`
|
|
76
|
+
* typed the same command with no pipe — we prompt, turn the terminal's
|
|
77
|
+
* echo off, and read one line.
|
|
78
|
+
*
|
|
79
|
+
* Echo is restored in a finally, or a wrong password ends with a terminal that
|
|
80
|
+
* has stopped showing what you type.
|
|
81
|
+
*/
|
|
82
|
+
async function readSecretFromStdin(promptText) {
|
|
83
|
+
if (!stdin.isTTY) {
|
|
84
|
+
// Piped. Read to EOF and do NOT touch the stream afterwards: pausing or
|
|
85
|
+
// detaching a closing pipe trips a libuv assertion on Windows.
|
|
86
|
+
const chunks = [];
|
|
87
|
+
return new Promise((resolve, reject) => {
|
|
88
|
+
stdin.on('data', (c) => chunks.push(Buffer.from(c)));
|
|
89
|
+
stdin.once('end', () => resolve(Buffer.concat(chunks).toString('utf-8').trim()));
|
|
90
|
+
stdin.once('error', reject);
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
stderr.write(promptText);
|
|
94
|
+
const wasRaw = stdin.isRaw === true;
|
|
95
|
+
stdin.setRawMode?.(true);
|
|
96
|
+
stdin.resume();
|
|
97
|
+
stdin.setEncoding('utf-8');
|
|
98
|
+
return new Promise((resolve, reject) => {
|
|
99
|
+
let buf = '';
|
|
100
|
+
const done = (fn) => {
|
|
101
|
+
stdin.removeListener('data', onData);
|
|
102
|
+
stdin.setRawMode?.(wasRaw);
|
|
103
|
+
stdin.pause();
|
|
104
|
+
stderr.write('\n');
|
|
105
|
+
fn();
|
|
106
|
+
};
|
|
107
|
+
const onData = (chunk) => {
|
|
108
|
+
for (const ch of chunk) {
|
|
109
|
+
if (ch === '\r' || ch === '\n')
|
|
110
|
+
return done(() => resolve(buf.trim()));
|
|
111
|
+
// Ctrl-C / Ctrl-D: leave without writing anything anywhere.
|
|
112
|
+
if (ch === '\u0003' || ch === '\u0004') {
|
|
113
|
+
return done(() => reject(new Error('cancelled')));
|
|
114
|
+
}
|
|
115
|
+
if (ch === '\u007f' || ch === '\b')
|
|
116
|
+
buf = buf.slice(0, -1);
|
|
117
|
+
else
|
|
118
|
+
buf += ch;
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
stdin.on('data', onData);
|
|
122
|
+
});
|
|
123
|
+
}
|
|
63
124
|
async function cmdConnectCustom(args, json) {
|
|
64
125
|
const fromFile = takeFlag(args, '--from-file');
|
|
126
|
+
const useStdin = args.includes('--stdin');
|
|
127
|
+
if (useStdin)
|
|
128
|
+
args.splice(args.indexOf('--stdin'), 1);
|
|
129
|
+
// The `wrangler secret put` shape: the credential is typed or piped, never
|
|
130
|
+
// an argv value. argv lands in shell history, in `ps`, and in any CI log
|
|
131
|
+
// that echoes the command.
|
|
132
|
+
//
|
|
133
|
+
// This is also the path that keeps a secret out of a MODEL's context. An
|
|
134
|
+
// agent calling stack_connect_custom_service passes the credential as a
|
|
135
|
+
// tool argument, which puts it in the transcript and the provider's logs.
|
|
136
|
+
// A human typing it here does not.
|
|
137
|
+
if (useStdin) {
|
|
138
|
+
const name = takeFlag(args, '--name');
|
|
139
|
+
if (typeof name !== 'string') {
|
|
140
|
+
stderr.write(`usage: ${invokeHint('service connect-custom --stdin --name <name> [--scopes a,b]')}\n` +
|
|
141
|
+
`The credential is read from stdin - piped, or typed at the prompt with echo off.\n`);
|
|
142
|
+
exit(2);
|
|
143
|
+
}
|
|
144
|
+
const scopesRaw = takeFlag(args, '--scopes');
|
|
145
|
+
const description = takeFlag(args, '--description');
|
|
146
|
+
// Required by the API, and rightly: without it the proxy cannot tell the
|
|
147
|
+
// operator's API from an attacker's host, so a stolen credential could be
|
|
148
|
+
// replayed anywhere. Omitted only when the credential itself carries a
|
|
149
|
+
// base_url the API can read the host from.
|
|
150
|
+
const allowedHosts = takeFlag(args, '--allowed-hosts');
|
|
151
|
+
const credential = await readSecretFromStdin(`Credential for ${name}: `);
|
|
152
|
+
if (!credential) {
|
|
153
|
+
stderr.write('no credential given; nothing was sent.\n');
|
|
154
|
+
exit(2);
|
|
155
|
+
}
|
|
156
|
+
const body = { name, credential };
|
|
157
|
+
if (typeof description === 'string')
|
|
158
|
+
body.description = description;
|
|
159
|
+
if (typeof scopesRaw === 'string') {
|
|
160
|
+
body.scopes = scopesRaw.split(',').map((x) => x.trim()).filter(Boolean);
|
|
161
|
+
}
|
|
162
|
+
if (typeof allowedHosts === 'string') {
|
|
163
|
+
body.allowed_hosts = allowedHosts.split(',').map((x) => x.trim()).filter(Boolean);
|
|
164
|
+
}
|
|
165
|
+
const out = await api('POST', '/v1/services/custom', { body });
|
|
166
|
+
if (json)
|
|
167
|
+
return printJson(out);
|
|
168
|
+
printRecord(out);
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
65
171
|
if (typeof fromFile !== 'string') {
|
|
66
|
-
stderr.write(`usage: ${invokeHint('service connect-custom --
|
|
67
|
-
`
|
|
172
|
+
stderr.write(`usage: ${invokeHint('service connect-custom --stdin --name <name>')}\n` +
|
|
173
|
+
` or: ${invokeHint('service connect-custom --from-file <config.json>')}\n` +
|
|
174
|
+
`--stdin reads the credential without echoing it and without putting it in argv.\n` +
|
|
175
|
+
`The JSON form should include provider, name, credentials, etc.\n`);
|
|
68
176
|
exit(2);
|
|
69
177
|
}
|
|
70
178
|
const { readFile } = await import('node:fs/promises');
|
|
@@ -75,26 +183,50 @@ async function cmdConnectCustom(args, json) {
|
|
|
75
183
|
printRecord(out);
|
|
76
184
|
}
|
|
77
185
|
async function cmdGrantAgent(args, json) {
|
|
186
|
+
const fromFile = takeFlag(args, '--from-file');
|
|
187
|
+
let body = {};
|
|
188
|
+
if (typeof fromFile === 'string') {
|
|
189
|
+
const { readFile } = await import('node:fs/promises');
|
|
190
|
+
const parsed = JSON.parse(await readFile(fromFile, 'utf8'));
|
|
191
|
+
if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
|
|
192
|
+
stderr.write('error: --from-file must contain one JSON object.\n');
|
|
193
|
+
exit(2);
|
|
194
|
+
}
|
|
195
|
+
body = { ...parsed };
|
|
196
|
+
}
|
|
78
197
|
const agentNameOrId = takeFlag(args, '--agent');
|
|
79
198
|
const connectionId = takeFlag(args, '--connection');
|
|
80
199
|
const scopesRaw = takeFlag(args, '--scopes');
|
|
200
|
+
const constraintsFile = takeFlag(args, '--constraints-file');
|
|
201
|
+
const intentsFile = takeFlag(args, '--intents-file');
|
|
202
|
+
const allowDataFrom = takeFlag(args, '--allow-data-from');
|
|
81
203
|
// GrantAgentAccessInput requires scopes (z.array(z.string()).min(1)).
|
|
82
204
|
// Earlier CLI made --scopes optional which 400'd ZodError when omitted.
|
|
83
205
|
const scopes = typeof scopesRaw === 'string'
|
|
84
206
|
? scopesRaw.split(',').map((s) => s.trim()).filter(Boolean)
|
|
85
|
-
: [];
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
207
|
+
: Array.isArray(body['scopes']) ? body['scopes'] : [];
|
|
208
|
+
const agentInput = typeof agentNameOrId === 'string' ? agentNameOrId : body['agent_id'];
|
|
209
|
+
const connectionInput = typeof connectionId === 'string' ? connectionId : body['service_connection_id'];
|
|
210
|
+
if (typeof agentInput !== 'string' || typeof connectionInput !== 'string' || scopes.length === 0) {
|
|
211
|
+
stderr.write(`usage: ${invokeHint('service grant --agent <name-or-id> --connection <connection-id> --scopes scope1,scope2 [--constraints-file constraints.json] [--intents-file intents.json] [--allow-data-from a,b]')}\n`
|
|
212
|
+
+ ` or: ${invokeHint('service grant --from-file grant.json')}\n`);
|
|
89
213
|
exit(2);
|
|
90
214
|
}
|
|
91
|
-
const agentId = await resolveAgentId(
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
215
|
+
const agentId = await resolveAgentId(agentInput);
|
|
216
|
+
body['agent_id'] = agentId;
|
|
217
|
+
body['service_connection_id'] = connectionInput;
|
|
218
|
+
body['scopes'] = scopes;
|
|
219
|
+
const { readFile } = await import('node:fs/promises');
|
|
220
|
+
if (typeof constraintsFile === 'string') {
|
|
221
|
+
body['constraints'] = JSON.parse(await readFile(constraintsFile, 'utf8'));
|
|
222
|
+
}
|
|
223
|
+
if (typeof intentsFile === 'string') {
|
|
224
|
+
body['intents'] = JSON.parse(await readFile(intentsFile, 'utf8'));
|
|
225
|
+
}
|
|
226
|
+
if (typeof allowDataFrom === 'string') {
|
|
227
|
+
body['allow_data_from'] = allowDataFrom.split(',').map((item) => item.trim()).filter(Boolean);
|
|
228
|
+
}
|
|
229
|
+
const out = await governedApi('POST', '/v1/services/grant', { body });
|
|
98
230
|
if (json)
|
|
99
231
|
return printJson(out);
|
|
100
232
|
printRecord(out);
|