@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.
Files changed (79) hide show
  1. package/README.md +8 -1
  2. package/dist/agent.d.ts.map +1 -1
  3. package/dist/agent.js +76 -16
  4. package/dist/agent.js.map +1 -1
  5. package/dist/api.d.ts +18 -12
  6. package/dist/api.d.ts.map +1 -1
  7. package/dist/api.js +52 -17
  8. package/dist/api.js.map +1 -1
  9. package/dist/auth.d.ts +2 -0
  10. package/dist/auth.d.ts.map +1 -1
  11. package/dist/auth.js +46 -28
  12. package/dist/auth.js.map +1 -1
  13. package/dist/authority.d.ts +2 -0
  14. package/dist/authority.d.ts.map +1 -0
  15. package/dist/authority.js +63 -0
  16. package/dist/authority.js.map +1 -0
  17. package/dist/detectors.d.ts.map +1 -1
  18. package/dist/detectors.js +4 -3
  19. package/dist/detectors.js.map +1 -1
  20. package/dist/dropoffs.d.ts.map +1 -1
  21. package/dist/dropoffs.js +12 -4
  22. package/dist/dropoffs.js.map +1 -1
  23. package/dist/format.d.ts +0 -1
  24. package/dist/format.d.ts.map +1 -1
  25. package/dist/format.js +19 -0
  26. package/dist/format.js.map +1 -1
  27. package/dist/governance.d.ts +13 -0
  28. package/dist/governance.d.ts.map +1 -0
  29. package/dist/governance.js +69 -0
  30. package/dist/governance.js.map +1 -0
  31. package/dist/identity.d.ts.map +1 -1
  32. package/dist/identity.js +131 -1
  33. package/dist/identity.js.map +1 -1
  34. package/dist/inbound-webhooks.d.ts +3 -0
  35. package/dist/inbound-webhooks.d.ts.map +1 -1
  36. package/dist/inbound-webhooks.js +4 -1
  37. package/dist/inbound-webhooks.js.map +1 -1
  38. package/dist/index.js +80 -25
  39. package/dist/index.js.map +1 -1
  40. package/dist/intents.d.ts.map +1 -1
  41. package/dist/intents.js +25 -30
  42. package/dist/intents.js.map +1 -1
  43. package/dist/llm.d.ts +1 -0
  44. package/dist/llm.d.ts.map +1 -1
  45. package/dist/llm.js +20 -13
  46. package/dist/llm.js.map +1 -1
  47. package/dist/partner.d.ts.map +1 -1
  48. package/dist/partner.js +62 -0
  49. package/dist/partner.js.map +1 -1
  50. package/dist/passports.d.ts.map +1 -1
  51. package/dist/passports.js +67 -17
  52. package/dist/passports.js.map +1 -1
  53. package/dist/pii.d.ts +2 -0
  54. package/dist/pii.d.ts.map +1 -0
  55. package/dist/pii.js +95 -0
  56. package/dist/pii.js.map +1 -0
  57. package/dist/proxy-serve.d.ts.map +1 -1
  58. package/dist/proxy-serve.js +29 -14
  59. package/dist/proxy-serve.js.map +1 -1
  60. package/dist/quickstart.d.ts +17 -0
  61. package/dist/quickstart.d.ts.map +1 -1
  62. package/dist/quickstart.js +54 -8
  63. package/dist/quickstart.js.map +1 -1
  64. package/dist/secret-input.d.ts +3 -0
  65. package/dist/secret-input.d.ts.map +1 -0
  66. package/dist/secret-input.js +41 -0
  67. package/dist/secret-input.js.map +1 -0
  68. package/dist/services.d.ts +10 -0
  69. package/dist/services.d.ts.map +1 -1
  70. package/dist/services.js +152 -20
  71. package/dist/services.js.map +1 -1
  72. package/dist/setup.d.ts +11 -0
  73. package/dist/setup.d.ts.map +1 -0
  74. package/dist/setup.js +226 -0
  75. package/dist/setup.js.map +1 -0
  76. package/dist/usage.d.ts.map +1 -1
  77. package/dist/usage.js +45 -5
  78. package/dist/usage.js.map +1 -1
  79. package/package.json +2 -2
@@ -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 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)
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
- // 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.
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
- `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`);
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; 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
+ // 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 revocable in <60s, but it is no longer localhost-only.\n`);
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. Revoke the agent any time for a <60s global kill.\n\n`);
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;
@@ -1 +1 @@
1
- {"version":3,"file":"proxy-serve.js","sourceRoot":"","sources":["../src/proxy-serve.ts"],"names":[],"mappings":"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"}
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,qEAAqE;AACrE,0EAA0E;AAC1E,wDAAwD;AACxD,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,iEAAiE;AACjE,wEAAwE;AACxE,mEAAmE;AACnE,+CAA+C;AAC/C,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,GAClB,OAAO,KAAK,kBAAkB;YAC5B,CAAC,CAAC,2CAA2C,UAAU,CAAC,gBAAgB,OAAO,EAAE,CAAC,GAAG;YACrF,CAAC,CAAC,EAAE,CAAC;QACT,MAAM,CAAC,KAAK,CACV,yCAAyC,OAAO,KAAK,GAAG,MAAM;YAC5D,iCAAiC,UAAU,CAAC,YAAY,CAAC,sCAAsC;YAC/F,GAAG,cAAc,IAAI,CACxB,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,iEAAiE;oBACjE,4DAA4D;oBAC5D,8BAA8B;oBAC9B,EAAE;oBACF,qEAAqE;oBACrE,8DAA8D;oBAC9D,qEAAqE;oBACrE,qEAAqE;oBACrE,uCAAuC;oBACvC,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,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,cAAc,EAAE,CAAC;4BAC1C,MAAM,CAAC,KAAK,CACV,8CAA8C,OAAO,8BAA8B;gCACjF,8DAA8D,CACjE,CAAC;4BACF,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,qFAAqF;YACrF,2CAA2C,CAC9C,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,gFAAgF,CACnF,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,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
@@ -1 +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"}
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"}
@@ -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('quickstart')}\n\n`);
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 hasProvider = connected.some((c) => c.provider === providerInput && c.status === 'active');
91
- if (!hasProvider) {
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 (idempotent-ish: reuse an
99
- // existing same-named agent if present).
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 agent ${agentName} (${agentId})\n`);
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
@@ -1 +1 @@
1
- {"version":3,"file":"quickstart.js","sourceRoot":"","sources":["../src/quickstart.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"quickstart.js","sourceRoot":"","sources":["../src/quickstart.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ /** Read one secret without placing it in argv or echoing it to the terminal. */
2
+ export declare function readSecretFromStdin(promptText: string): Promise<string>;
3
+ //# sourceMappingURL=secret-input.d.ts.map
@@ -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"}
@@ -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
@@ -1 +1 @@
1
- {"version":3,"file":"services.d.ts","sourceRoot":"","sources":["../src/services.ts"],"names":[],"mappings":"AAyIA,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA0D9D"}
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
- // /v1/services returns the catalog (services + connections). Dashboard
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 api('GET', `/v1/services/${encodeURIComponent(connectionId)}`);
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 --from-file <config.json>')}\n` +
67
- `The JSON should include provider, name, credentials, etc. — see the dashboard custom-service form.\n`);
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
- if (typeof agentNameOrId !== 'string' || typeof connectionId !== 'string' || scopes.length === 0) {
87
- stderr.write(`usage: ${invokeHint('service grant --agent <name-or-id> --connection <connection-id> --scopes scope1,scope2')}\n`
88
- + `--scopes must list at least one scope. Use \`service show <connection-id>\` to see available scopes.\n`);
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(agentNameOrId);
92
- const body = {
93
- agent_id: agentId,
94
- service_connection_id: connectionId,
95
- scopes,
96
- };
97
- const out = await api('POST', '/v1/services/grant', { body });
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);