@getstackrun/cli 0.23.0 → 1.1.1
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 +77 -17
- 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 +55 -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/fleets.d.ts +3 -0
- package/dist/fleets.d.ts.map +1 -0
- package/dist/fleets.js +86 -0
- package/dist/fleets.js.map +1 -0
- 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 +68 -12
- 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/missions.d.ts.map +1 -1
- package/dist/missions.js +10 -0
- package/dist/missions.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 +79 -26
- 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 +58 -9
- 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 +12 -13
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,8 +20,9 @@
|
|
|
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';
|
|
25
|
+
import { governedApi } from './governance.js';
|
|
26
26
|
const DASHBOARD_URL = 'https://getstack.run';
|
|
27
27
|
const PROVIDER_CALLS = {
|
|
28
28
|
anthropic: (stack, session) => stack.llm.anthropic.messages.create({
|
|
@@ -41,6 +41,29 @@ const PROVIDER_CALLS = {
|
|
|
41
41
|
messages: [{ role: 'user', content: 'Reply with the single word: works' }],
|
|
42
42
|
}, { passport: session }),
|
|
43
43
|
};
|
|
44
|
+
export function quickstartAgentProfileProblem(agent) {
|
|
45
|
+
const expected = {
|
|
46
|
+
credential_access: 'proxy_only',
|
|
47
|
+
accountability_mode: 'logged',
|
|
48
|
+
key_mode: 'stack_managed',
|
|
49
|
+
};
|
|
50
|
+
const mismatches = Object.entries(expected)
|
|
51
|
+
.filter(([field, value]) => agent[field] !== value)
|
|
52
|
+
.map(([field, value]) => `${field}=${String(agent[field] ?? 'unknown')} (expected ${value})`);
|
|
53
|
+
return mismatches.length > 0 ? mismatches.join(', ') : undefined;
|
|
54
|
+
}
|
|
55
|
+
export function quickstartGrantBody(connection, permissions, agentId) {
|
|
56
|
+
if (permissions.some((grant) => grant.service_connection_id === connection.id))
|
|
57
|
+
return undefined;
|
|
58
|
+
const scopes = connection.scopes ?? [];
|
|
59
|
+
if (scopes.length === 0)
|
|
60
|
+
throw new Error('the selected provider connection has no grantable scopes.');
|
|
61
|
+
return {
|
|
62
|
+
agent_id: agentId,
|
|
63
|
+
service_connection_id: connection.id,
|
|
64
|
+
scopes,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
44
67
|
async function prompt(question, fallback) {
|
|
45
68
|
// Non-interactive (piped / CI): take the fallback silently.
|
|
46
69
|
if (!process.stdin.isTTY)
|
|
@@ -67,7 +90,7 @@ export async function cmdQuickstart(args) {
|
|
|
67
90
|
` 2. Connect an LLM provider (Anthropic/OpenAI): ${DASHBOARD_URL}/services\n\n` +
|
|
68
91
|
` Then sign this CLI in and re-run:\n` +
|
|
69
92
|
` ${invokeHint('auth login')}\n` +
|
|
70
|
-
` ${invokeHint(
|
|
93
|
+
` ${invokeHint(`quickstart --provider ${typeof providerFlag === 'string' ? providerFlag : 'anthropic'}`)}\n\n`);
|
|
71
94
|
process.exit(1);
|
|
72
95
|
}
|
|
73
96
|
const opStack = new Stack({ baseUrl });
|
|
@@ -87,28 +110,54 @@ export async function cmdQuickstart(args) {
|
|
|
87
110
|
stderr.write(`error: could not list connected services (${err.message}).\n`);
|
|
88
111
|
process.exit(1);
|
|
89
112
|
}
|
|
90
|
-
const
|
|
91
|
-
if (!
|
|
113
|
+
const providerConnection = connected.find((c) => c.provider === providerInput && c.status === 'active');
|
|
114
|
+
if (!providerConnection) {
|
|
92
115
|
stderr.write(`\n ${providerInput} is not connected on this operator yet.\n` +
|
|
93
116
|
` Connect it in the dashboard (the API key goes in the vault, not on this box):\n\n` +
|
|
94
117
|
` ${DASHBOARD_URL}/services\n\n` +
|
|
95
118
|
` Then re-run: ${invokeHint(`quickstart --provider ${providerInput}`)}\n\n`);
|
|
96
119
|
process.exit(1);
|
|
97
120
|
}
|
|
98
|
-
// 3. Register the agent with the safe preset
|
|
99
|
-
//
|
|
121
|
+
// 3. Register the agent with the safe preset. Reuse a same-named agent
|
|
122
|
+
// only when its security posture is exactly the one this flow promises.
|
|
100
123
|
const agentName = (typeof agentFlag === 'string' && agentFlag ? agentFlag : await prompt(' Agent name', 'quickstart-bot')).trim();
|
|
101
124
|
let agentId;
|
|
102
125
|
const existing = (await opStack.agents.list()).find((a) => a.name === agentName);
|
|
103
126
|
if (existing) {
|
|
127
|
+
const profileProblem = quickstartAgentProfileProblem(existing);
|
|
128
|
+
if (profileProblem) {
|
|
129
|
+
stderr.write(`error: an agent named "${agentName}" already exists with a different security posture:\n` +
|
|
130
|
+
` ${profileProblem}\n` +
|
|
131
|
+
`Choose another name, for example:\n` +
|
|
132
|
+
` ${invokeHint(`quickstart --provider ${providerInput} --agent ${agentName}-stack`)}\n`);
|
|
133
|
+
process.exit(1);
|
|
134
|
+
}
|
|
104
135
|
agentId = existing.id;
|
|
105
|
-
stdout.write(` ✓ using existing
|
|
136
|
+
stdout.write(` ✓ using existing ${agentName} (${agentId}) — proxy_only + logged + stack_managed\n`);
|
|
106
137
|
}
|
|
107
138
|
else {
|
|
108
|
-
const agent = await
|
|
139
|
+
const agent = await governedApi('POST', '/v1/agents/register', {
|
|
140
|
+
body: { name: agentName, profile: 'proxied-llm-bot' },
|
|
141
|
+
});
|
|
109
142
|
agentId = agent.id;
|
|
110
143
|
stdout.write(` ✓ registered ${agentName} (${agentId}) — proxy_only + logged + stack_managed\n`);
|
|
111
144
|
}
|
|
145
|
+
// The intent can only narrow an existing service grant. It cannot create
|
|
146
|
+
// one. Keep an existing grant unchanged. Create the missing grant from the
|
|
147
|
+
// connection's own scope ceiling before passport issuance.
|
|
148
|
+
const permissions = await api('GET', `/v1/agents/${encodeURIComponent(agentId)}/permissions`);
|
|
149
|
+
let grantBody;
|
|
150
|
+
try {
|
|
151
|
+
grantBody = quickstartGrantBody(providerConnection, permissions, agentId);
|
|
152
|
+
}
|
|
153
|
+
catch {
|
|
154
|
+
stderr.write(`error: the ${providerInput} connection has no grantable scopes. Verify the connection in the Console.\n`);
|
|
155
|
+
process.exit(1);
|
|
156
|
+
}
|
|
157
|
+
if (grantBody) {
|
|
158
|
+
await governedApi('POST', '/v1/services/grant', { body: grantBody });
|
|
159
|
+
stdout.write(` ✓ granted ${providerInput} to ${agentName}\n`);
|
|
160
|
+
}
|
|
112
161
|
// 4. Issue a passport + make one real governed LLM call. The preset
|
|
113
162
|
// creates a stack_managed agent (no on-box keypair — STACK signs
|
|
114
163
|
// 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":"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,0EAA0E;AAC1E,EAAE;AACF,4EAA4E;AAC5E,2BAA2B;AAE3B,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,KAAK,EAAoB,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,MAAM,aAAa,GAAG,sBAAsB,CAAC;AAE7C,MAAM,cAAc,GAGhB;IACF,SAAS,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CAC5B,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CACjC;QACE,KAAK,EAAE,2BAA2B;QAClC,UAAU,EAAE,EAAE;QACd,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,mCAAmC,EAAE,CAAC;KAC3E,EACD,EAAE,QAAQ,EAAE,OAAgB,EAAE,CAC/B;IACH,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CACzB,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CACtC;QACE,KAAK,EAAE,aAAa;QACpB,UAAU,EAAE,EAAE;QACd,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,mCAAmC,EAAE,CAAC;KAC3E,EACD,EAAE,QAAQ,EAAE,OAAgB,EAAE,CAC/B;IACH,UAAU,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CAC7B,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAC1C;QACE,KAAK,EAAE,oBAAoB;QAC3B,UAAU,EAAE,EAAE;QACd,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,mCAAmC,EAAE,CAAC;KAC3E,EACD,EAAE,QAAQ,EAAE,OAAgB,EAAE,CAC/B;CACJ,CAAC;AAmBF,MAAM,UAAU,6BAA6B,CAAC,KAAsB;IAClE,MAAM,QAAQ,GAAG;QACf,iBAAiB,EAAE,YAAY;QAC/B,mBAAmB,EAAE,QAAQ;QAC7B,QAAQ,EAAE,eAAe;KACjB,CAAC;IACX,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;SACxC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,KAA8B,CAAC,KAAK,KAAK,CAAC;SAC3E,GAAG,CACF,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,CACjB,GAAG,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,KAA8B,CAAC,IAAI,SAAS,CAAC,cAAc,KAAK,GAAG,CAC/F,CAAC;IACJ,OAAO,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,UAAgC,EAChC,WAAmC,EACnC,OAAe;IAEf,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,qBAAqB,KAAK,UAAU,CAAC,EAAE,CAAC;QAAE,OAAO,SAAS,CAAC;IACjG,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,IAAI,EAAE,CAAC;IACvC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;IACtG,OAAO;QACL,QAAQ,EAAE,OAAO;QACjB,qBAAqB,EAAE,UAAU,CAAC,EAAE;QACpC,MAAM;KACP,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,MAAM,CAAC,QAAgB,EAAE,QAAgB;IACtD,4DAA4D;IAC5D,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK;QAAE,OAAO,QAAQ,CAAC;IAC1C,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7E,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,GAAG,QAAQ,KAAK,QAAQ,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACzE,OAAO,MAAM,IAAI,QAAQ,CAAC;IAC5B,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAc;IAChD,MAAM,OAAO,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,0BAA0B,CAAC;IACnE,gEAAgE;IAChE,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAClD,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAE5C,gBAAgB;IAChB,MAAM,KAAK,GAAG,MAAM,cAAc,EAAE,CAAC;IACrC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,CAAC,KAAK,CACV,0EAA0E;YACxE,6CAA6C,aAAa,IAAI;YAC9D,uDAAuD,aAAa,eAAe;YACnF,uCAAuC;YACvC,OAAO,UAAU,CAAC,YAAY,CAAC,IAAI;YACnC,OAAO,UAAU,CAAC,yBAAyB,OAAO,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,MAAM,CACpH,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IAEvC,2CAA2C;IAC3C,MAAM,aAAa,GAAG,CACpB,OAAO,YAAY,KAAK,QAAQ,IAAI,YAAY;QAC9C,CAAC,CAAC,YAAY;QACd,CAAC,CAAC,MAAM,MAAM,CAAC,8CAA8C,EAAE,WAAW,CAAC,CAC9E,CAAC,IAAI,EAAiB,CAAC;IACxB,IAAI,CAAE,CAAC,WAAW,EAAE,QAAQ,EAAE,YAAY,CAAc,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QACjF,MAAM,CAAC,KAAK,CAAC,kEAAkE,aAAa,OAAO,CAAC,CAAC;QACrG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,SAAqF,CAAC;IAC1F,IAAI,CAAC;QACH,SAAS,GAAG,CAAC,MAAM,OAAO,CAAC,QAAQ,CAAC,aAAa,EAAE,CAKjD,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,KAAK,CAAC,6CAA8C,GAAa,CAAC,OAAO,MAAM,CAAC,CAAC;QACxF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,kBAAkB,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,aAAa,IAAI,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC;IACxG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACxB,MAAM,CAAC,KAAK,CACV,OAAO,aAAa,2CAA2C;YAC7D,qFAAqF;YACrF,OAAO,aAAa,eAAe;YACnC,mBAAmB,UAAU,CAAC,yBAAyB,aAAa,EAAE,CAAC,MAAM,CAChF,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,uEAAuE;IACvE,2EAA2E;IAC3E,MAAM,SAAS,GAAG,CAChB,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,cAAc,EAAE,gBAAgB,CAAC,CACxG,CAAC,IAAI,EAAE,CAAC;IAET,IAAI,OAAe,CAAC;IACpB,MAAM,QAAQ,GAAI,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAuB,CAAC,IAAI,CACxE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAC5B,CAAC;IACF,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,cAAc,GAAG,6BAA6B,CAAC,QAAQ,CAAC,CAAC;QAC/D,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,CAAC,KAAK,CACV,0BAA0B,SAAS,uDAAuD;gBACxF,KAAK,cAAc,IAAI;gBACvB,qCAAqC;gBACrC,KAAK,UAAU,CAAC,yBAAyB,aAAa,YAAY,SAAS,QAAQ,CAAC,IAAI,CAC3F,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,GAAG,QAAQ,CAAC,EAAE,CAAC;QACtB,MAAM,CAAC,KAAK,CACV,sBAAsB,SAAS,KAAK,OAAO,2CAA2C,CACvF,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,MAAM,KAAK,GAAG,MAAM,WAAW,CAAkB,MAAM,EAAE,qBAAqB,EAAE;YAC9E,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,iBAAiB,EAAE;SACtD,CAAC,CAAC;QACH,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC;QACnB,MAAM,CAAC,KAAK,CACV,kBAAkB,SAAS,KAAK,OAAO,2CAA2C,CACnF,CAAC;IACJ,CAAC;IAED,yEAAyE;IACzE,2EAA2E;IAC3E,2DAA2D;IAC3D,MAAM,WAAW,GAAG,MAAM,GAAG,CAC3B,KAAK,EACL,cAAc,kBAAkB,CAAC,OAAO,CAAC,cAAc,CACxD,CAAC;IACF,IAAI,SAA8C,CAAC;IACnD,IAAI,CAAC;QACH,SAAS,GAAG,mBAAmB,CAAC,kBAAkB,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;IAC5E,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,CAAC,KAAK,CACV,cAAc,aAAa,8EAA8E,CAC1G,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,WAAW,CAAC,MAAM,EAAE,oBAAoB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;QACrE,MAAM,CAAC,KAAK,CAAC,eAAe,aAAa,OAAO,SAAS,IAAI,CAAC,CAAC;IACjE,CAAC;IAED,oEAAoE;IACpE,oEAAoE;IACpE,oEAAoE;IACpE,kEAAkE;IAClE,MAAM,CAAC,KAAK,CAAC,kDAAkD,aAAa,SAAS,CAAC,CAAC;IAEvF,IAAI,OAAgB,CAAC;IACrB,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC;YACpC,QAAQ,EAAE,OAAO;YACjB,kEAAkE;YAClE,MAAM,EAAE,EAAE,OAAO,EAAE,6BAA6B,aAAa,OAAO,EAAE,QAAQ,EAAE,CAAC,aAAa,CAAC,EAAE;SAClG,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,KAAK,CAAC,sCAAuC,GAAa,CAAC,OAAO,MAAM,CAAC,CAAC;QACjF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,cAAc,CAAC,aAAa,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACxD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,KAAK,CACV,uBAAuB,aAAa,iBAAkB,GAAa,CAAC,OAAO,MAAM;YAC/E,yDAAyD,aAAa,KAAK,CAC9E,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAErC,+CAA+C;IAC/C,IAAI,CAAC;QACH,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QACpE,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACvB,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;YACjD,MAAM,CAAC,KAAK,CACV,gFAAgF;gBAC9E,OAAO,EAAE,KAAK,GAAG,CAAC,MAAM,QAAQ,GAAG,CAAC,OAAO,YAAY,OAAO,KAAK;gBACnE,kBAAkB,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO;gBACpD,gCAAgC,aAAa,0CAA0C;gBACvF,4FAA4F;gBAC5F,iBAAiB;gBACjB,0CAA0C,UAAU,CAAC,uBAAuB,SAAS,EAAE,CAAC,IAAI;gBAC5F,0CAA0C,UAAU,CAAC,kBAAkB,CAAC,IAAI;gBAC5E,0CAA0C,UAAU,CAAC,mBAAmB,CAAC,MAAM,CAClF,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,KAAK,CAAC,iFAAiF,CAAC,CAAC;QAClG,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,CAAC,KAAK,CAAC,mEAAmE,CAAC,CAAC;IACpF,CAAC;AACH,CAAC"}
|
|
@@ -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);
|
package/dist/services.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"services.js","sourceRoot":"","sources":["../src/services.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAEhF,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAkBtE,KAAK,UAAU,UAAU,CAAC,IAAa;IACrC,MAAM,IAAI,GAAG,MAAM,GAAG,CAAY,KAAK,EAAE,cAAc,CAAC,CAAC;IACzD,IAAI,IAAI;QAAE,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC;IACjC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC5G,UAAU,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,IAAI,CAAC,CAAC;AACtD,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,IAAa;IACzC,uEAAuE;IACvE,mEAAmE;IACnE,mEAAmE;IACnE,MAAM,GAAG,GAAG,MAAM,GAAG,CAAwC,KAAK,EAAE,cAAc,CAAC,CAAC;IACpF,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,GAAsC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,WAAW,IAAI,EAAE,CAAC,CAAC;IACrG,IAAI,IAAI;QAAE,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAC3C,OAAO;IACT,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACxF,UAAU,CAAC,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC;AAC3D,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,YAAoB,EAAE,IAAa;IACxD,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,KAAK,EAAE,gBAAgB,kBAAkB,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IACjF,IAAI,IAAI;QAAE,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC;IAChC,WAAW,CAAC,GAA8B,CAAC,CAAC;AAC9C,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,YAAoB,EAAE,IAAa;IAC1D,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,MAAM,EAAE,gBAAgB,kBAAkB,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IACzF,IAAI,IAAI;QAAE,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC;IAChC,WAAW,CAAC,GAA8B,CAAC,CAAC;AAC9C,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,YAAoB,EAAE,IAAa;IAC9D,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,QAAQ,EAAE,gBAAgB,kBAAkB,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;IAC/F,IAAI,IAAI;QAAE,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,CAAC,KAAK,CAAC,gBAAgB,YAAY,IAAI,CAAC,CAAC;AACjD,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,QAAgB,EAAE,IAAa;IAC1D,mEAAmE;IACnE,oEAAoE;IACpE,gEAAgE;IAChE,iEAAiE;IACjE,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,KAAK,EAAE,mBAAmB,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAChF,IAAI,IAAI;QAAE,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC;IAChC,WAAW,CAAC,GAA8B,CAAC,CAAC;AAC9C,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,IAAa;IACvC,MAAM,GAAG,GAAG,MAAM,GAAG,CAAwC,KAAK,EAAE,wBAAwB,CAAC,CAAC;IAC9F,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,SAAS,IAAI,EAAE,CAAC,CAAC;IAC/D,IAAI,IAAI;QAAE,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC;IACjC,SAAS,CAAC,IAAI,CAAC,CAAC;AAClB,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,IAAc,EAAE,IAAa;IAC3D,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IAC/C,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjC,MAAM,CAAC,KAAK,CACV,UAAU,UAAU,CAAC,kDAAkD,CAAC,IAAI;YAC1E,sGAAsG,CACzG,CAAC;QACF,IAAI,CAAC,CAAC,CAAC,CAAC;IACV,CAAC;IACD,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;IACtD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;IAC1D,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,MAAM,EAAE,qBAAqB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/D,IAAI,IAAI;QAAE,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC;IAChC,WAAW,CAAC,GAA8B,CAAC,CAAC;AAC9C,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,IAAc,EAAE,IAAa;IACxD,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAChD,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IACpD,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC7C,sEAAsE;IACtE,wEAAwE;IACxE,MAAM,MAAM,GAAG,OAAO,SAAS,KAAK,QAAQ;QAC1C,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;QAC3D,CAAC,CAAC,EAAE,CAAC;IACP,IAAI,OAAO,aAAa,KAAK,QAAQ,IAAI,OAAO,YAAY,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjG,MAAM,CAAC,KAAK,CACV,UAAU,UAAU,CAAC,wFAAwF,CAAC,IAAI;cAChH,wGAAwG,CAC3G,CAAC;QACF,IAAI,CAAC,CAAC,CAAC,CAAC;IACV,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,aAAa,CAAC,CAAC;IACpD,MAAM,IAAI,GAA4B;QACpC,QAAQ,EAAE,OAAO;QACjB,qBAAqB,EAAE,YAAY;QACnC,MAAM;KACP,CAAC;IACF,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,MAAM,EAAE,oBAAoB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9D,IAAI,IAAI;QAAE,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC;IAChC,WAAW,CAAC,GAA8B,CAAC,CAAC;AAC9C,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,aAAqB,EAAE,IAAa;IAChE,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,aAAa,CAAC,CAAC;IACpD,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,QAAQ,EAAE,uBAAuB,kBAAkB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC7F,IAAI,IAAI;QAAE,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,CAAC,KAAK,CAAC,kCAAkC,aAAa,IAAI,CAAC,CAAC;AACpE,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,aAAqB,EAAE,IAAa;IACrE,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,aAAa,CAAC,CAAC;IACpD,MAAM,GAAG,GAAG,MAAM,GAAG,CAAY,KAAK,EAAE,cAAc,kBAAkB,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IACjG,IAAI,IAAI;QAAE,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC;IAChC,SAAS,CAAC,GAAG,CAAC,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAc;IAC7C,MAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACxC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAErB,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,WAAW,IAAI,GAAG,KAAK,MAAM;QAAE,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;IACxF,IAAI,GAAG,KAAK,aAAa,IAAI,GAAG,KAAK,WAAW;QAAE,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC;IAC9E,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;QACnB,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,CAAC,KAAK,CAAC,UAAU,UAAU,CAAC,8BAA8B,CAAC,IAAI,CAAC,CAAC;YACvE,IAAI,CAAC,CAAC,CAAC,CAAC;QACV,CAAC;QACD,OAAO,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC7B,CAAC;IACD,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;QACrB,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,CAAC,KAAK,CAAC,UAAU,UAAU,CAAC,gCAAgC,CAAC,IAAI,CAAC,CAAC;YACzE,IAAI,CAAC,CAAC,CAAC,CAAC;QACV,CAAC;QACD,OAAO,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC/B,CAAC;IACD,IAAI,GAAG,KAAK,YAAY,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,CAAC,KAAK,CAAC,UAAU,UAAU,CAAC,oCAAoC,CAAC,IAAI,CAAC,CAAC;YAC7E,IAAI,CAAC,CAAC,CAAC,CAAC;QACV,CAAC;QACD,OAAO,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC;IACD,IAAI,GAAG,KAAK,YAAY,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,CAAC,KAAK,CAAC,UAAU,UAAU,CAAC,+BAA+B,CAAC,IAAI,CAAC,CAAC;YACxE,IAAI,CAAC,CAAC,CAAC,CAAC;QACV,CAAC;QACD,OAAO,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC;IACD,IAAI,GAAG,KAAK,WAAW;QAAE,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC;IACnD,IAAI,GAAG,KAAK,gBAAgB,IAAI,GAAG,KAAK,QAAQ;QAAE,OAAO,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAC/F,IAAI,GAAG,KAAK,OAAO;QAAE,OAAO,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAC/D,IAAI,GAAG,KAAK,cAAc,EAAE,CAAC;QAC3B,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,CAAC,KAAK,CAAC,UAAU,UAAU,CAAC,iCAAiC,CAAC,IAAI,CAAC,CAAC;YAC1E,IAAI,CAAC,CAAC,CAAC,CAAC;QACV,CAAC;QACD,OAAO,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACpC,CAAC;IACD,IAAI,GAAG,KAAK,aAAa,EAAE,CAAC;QAC1B,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,CAAC,KAAK,CAAC,UAAU,UAAU,CAAC,gCAAgC,CAAC,IAAI,CAAC,CAAC;YACzE,IAAI,CAAC,CAAC,CAAC,CAAC;QACV,CAAC;QACD,OAAO,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACzC,CAAC;IACD,MAAM,CAAC,KAAK,CACV,sCAAsC,GAAG,IAAI,EAAE,MAAM;QACnD,yIAAyI;QACzI,0EAA0E,CAC7E,CAAC;IACF,IAAI,CAAC,CAAC,CAAC,CAAC;AACV,CAAC"}
|
|
1
|
+
{"version":3,"file":"services.js","sourceRoot":"","sources":["../src/services.ts"],"names":[],"mappings":"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"}
|
package/dist/setup.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export type SupportedMcpClient = 'claude' | 'codex' | 'cursor';
|
|
2
|
+
interface DetectedClient {
|
|
3
|
+
id: SupportedMcpClient;
|
|
4
|
+
label: string;
|
|
5
|
+
executable: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function parseClientSelection(value: string, detected: ReadonlyArray<Pick<DetectedClient, 'id'>>): SupportedMcpClient[];
|
|
8
|
+
export declare function setupCommands(client: SupportedMcpClient): ReadonlyArray<ReadonlyArray<string>>;
|
|
9
|
+
export declare function cmdSetup(args: string[]): Promise<void>;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=setup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE/D,UAAU,cAAc;IACtB,EAAE,EAAE,kBAAkB,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AA8CD,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,aAAa,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC,GAClD,kBAAkB,EAAE,CAkBtB;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,kBAAkB,GAAG,aAAa,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAgB9F;AAsHD,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAmC5D"}
|