@algosuite/vo-mcp 0.2.0-beta.28 → 0.2.0-beta.29
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/dist/agent-auth-probe-cli.mjs +65 -35
- package/dist/cli.js +476 -42
- package/dist/cli.js.map +4 -4
- package/dist/index.js +467 -33
- package/dist/index.js.map +4 -4
- package/dist/runner-cli.js +247 -60
- package/dist/runner-cli.js.map +4 -4
- package/package.json +1 -1
|
@@ -151,6 +151,56 @@ function spawnClaudeSync(args = [], options = {}) {
|
|
|
151
151
|
}
|
|
152
152
|
}
|
|
153
153
|
|
|
154
|
+
// ../../scripts/virtual-office/code-runner/claude-credential-choice.mjs
|
|
155
|
+
var PREFER_LOGIN_ENV = "VO_RUNNER_PREFER_LOGIN";
|
|
156
|
+
var CLAUDE_PREFER_LOGIN_ENV = "VO_RUNNER_CLAUDE_PREFER_LOGIN";
|
|
157
|
+
var PREFER_KEY_ENV = "VO_RUNNER_PREFER_KEY";
|
|
158
|
+
var CLAUDE_PREFER_KEY_ENV = "VO_RUNNER_CLAUDE_PREFER_KEY";
|
|
159
|
+
var CLAUDE_CREDENTIAL_SOURCE = Object.freeze({
|
|
160
|
+
/** PREFER_LOGIN set (and not overridden): any API key is ignored. */
|
|
161
|
+
PREFER_LOGIN: "prefer_login",
|
|
162
|
+
/** An explicit ANTHROPIC_API_KEY in the environment — the manual override. */
|
|
163
|
+
ENV_KEY: "env_key",
|
|
164
|
+
/** No key anywhere; the spawn falls through to the login session. */
|
|
165
|
+
NO_KEY: "no_key",
|
|
166
|
+
/** A stored key, used because the operator explicitly opted out of tier 1. */
|
|
167
|
+
KEYCHAIN_PREFER_KEY: "keychain_prefer_key",
|
|
168
|
+
/** A stored key exists but a proven live subscription outranks it. */
|
|
169
|
+
SUBSCRIPTION_WINS: "subscription_wins",
|
|
170
|
+
/** A stored key, used because no live subscription was proven. */
|
|
171
|
+
KEYCHAIN: "keychain"
|
|
172
|
+
});
|
|
173
|
+
function isTruthyFlag(v) {
|
|
174
|
+
const s = String(v ?? "").trim().toLowerCase();
|
|
175
|
+
return s === "1" || s === "true" || s === "yes" || s === "on";
|
|
176
|
+
}
|
|
177
|
+
function wantsLogin(env) {
|
|
178
|
+
return isTruthyFlag(env[CLAUDE_PREFER_LOGIN_ENV]) || isTruthyFlag(env[PREFER_LOGIN_ENV]);
|
|
179
|
+
}
|
|
180
|
+
function wantsKey(env) {
|
|
181
|
+
return isTruthyFlag(env[CLAUDE_PREFER_KEY_ENV]) || isTruthyFlag(env[PREFER_KEY_ENV]);
|
|
182
|
+
}
|
|
183
|
+
function classifyClaudeCredential(baseEnv = {}, { getKey, probeLogin } = {}) {
|
|
184
|
+
const preferKey = wantsKey(baseEnv);
|
|
185
|
+
if (!preferKey && wantsLogin(baseEnv)) {
|
|
186
|
+
return { source: CLAUDE_CREDENTIAL_SOURCE.PREFER_LOGIN, key: null };
|
|
187
|
+
}
|
|
188
|
+
if (baseEnv.ANTHROPIC_API_KEY) {
|
|
189
|
+
return { source: CLAUDE_CREDENTIAL_SOURCE.ENV_KEY, key: null };
|
|
190
|
+
}
|
|
191
|
+
const key = getKey();
|
|
192
|
+
if (!key) {
|
|
193
|
+
return { source: CLAUDE_CREDENTIAL_SOURCE.NO_KEY, key: null };
|
|
194
|
+
}
|
|
195
|
+
if (preferKey) {
|
|
196
|
+
return { source: CLAUDE_CREDENTIAL_SOURCE.KEYCHAIN_PREFER_KEY, key };
|
|
197
|
+
}
|
|
198
|
+
if (probeLogin() === true) {
|
|
199
|
+
return { source: CLAUDE_CREDENTIAL_SOURCE.SUBSCRIPTION_WINS, key: null };
|
|
200
|
+
}
|
|
201
|
+
return { source: CLAUDE_CREDENTIAL_SOURCE.KEYCHAIN, key };
|
|
202
|
+
}
|
|
203
|
+
|
|
154
204
|
// ../../scripts/virtual-office/code-runner/anthropic-key-store.mjs
|
|
155
205
|
var require2 = createRequire(import.meta.url);
|
|
156
206
|
var KEY_SERVICE = "algosuite-vo";
|
|
@@ -175,50 +225,30 @@ function getAnthropicKey({ EntryCtor = defaultEntryCtor() } = {}) {
|
|
|
175
225
|
return null;
|
|
176
226
|
}
|
|
177
227
|
}
|
|
178
|
-
var PREFER_LOGIN_ENV = "VO_RUNNER_PREFER_LOGIN";
|
|
179
|
-
var CLAUDE_PREFER_LOGIN_ENV = "VO_RUNNER_CLAUDE_PREFER_LOGIN";
|
|
180
|
-
var PREFER_KEY_ENV = "VO_RUNNER_PREFER_KEY";
|
|
181
|
-
var CLAUDE_PREFER_KEY_ENV = "VO_RUNNER_CLAUDE_PREFER_KEY";
|
|
182
|
-
function isTruthyFlag(v) {
|
|
183
|
-
const s = String(v ?? "").trim().toLowerCase();
|
|
184
|
-
return s === "1" || s === "true" || s === "yes" || s === "on";
|
|
185
|
-
}
|
|
186
|
-
function wantsLogin(env) {
|
|
187
|
-
return isTruthyFlag(env[CLAUDE_PREFER_LOGIN_ENV]) || isTruthyFlag(env[PREFER_LOGIN_ENV]);
|
|
188
|
-
}
|
|
189
|
-
function wantsKey(env) {
|
|
190
|
-
return isTruthyFlag(env[CLAUDE_PREFER_KEY_ENV]) || isTruthyFlag(env[PREFER_KEY_ENV]);
|
|
191
|
-
}
|
|
192
228
|
function withAnthropicKey(baseEnv = {}, { getKey = getAnthropicKey, probeLogin = probeClaudeLoginState } = {}) {
|
|
193
|
-
const
|
|
194
|
-
|
|
195
|
-
|
|
229
|
+
const { source, key } = classifyClaudeCredential(baseEnv, { getKey, probeLogin });
|
|
230
|
+
const next = { ...baseEnv };
|
|
231
|
+
if (source === CLAUDE_CREDENTIAL_SOURCE.PREFER_LOGIN) {
|
|
196
232
|
delete next.ANTHROPIC_API_KEY;
|
|
197
233
|
return next;
|
|
198
234
|
}
|
|
199
|
-
if (
|
|
200
|
-
|
|
201
|
-
if (!key) return { ...baseEnv };
|
|
202
|
-
if (!preferKey && probeLogin() === true) return { ...baseEnv };
|
|
203
|
-
return { ...baseEnv, ANTHROPIC_API_KEY: key };
|
|
235
|
+
if (key !== null) next.ANTHROPIC_API_KEY = key;
|
|
236
|
+
return next;
|
|
204
237
|
}
|
|
205
238
|
function claudeCostBasis(env = process.env) {
|
|
206
239
|
return String(env.ANTHROPIC_API_KEY || "").trim() ? "vendor_billed" : "subscription_api_equivalent";
|
|
207
240
|
}
|
|
241
|
+
var AUTH_SOURCE_DESCRIPTION = Object.freeze({
|
|
242
|
+
[CLAUDE_CREDENTIAL_SOURCE.PREFER_LOGIN]: "claude auth login (VO_RUNNER_PREFER_LOGIN set \u2014 any API key ignored)",
|
|
243
|
+
[CLAUDE_CREDENTIAL_SOURCE.ENV_KEY]: "ANTHROPIC_API_KEY from environment",
|
|
244
|
+
[CLAUDE_CREDENTIAL_SOURCE.NO_KEY]: "claude auth login session (no API key set)",
|
|
245
|
+
[CLAUDE_CREDENTIAL_SOURCE.KEYCHAIN_PREFER_KEY]: "ANTHROPIC_API_KEY from OS keychain (VO_RUNNER_PREFER_KEY set \u2014 subscription ignored)",
|
|
246
|
+
[CLAUDE_CREDENTIAL_SOURCE.SUBSCRIPTION_WINS]: "claude auth login session (subscription beats the stored keychain key)",
|
|
247
|
+
[CLAUDE_CREDENTIAL_SOURCE.KEYCHAIN]: "ANTHROPIC_API_KEY from OS keychain"
|
|
248
|
+
});
|
|
208
249
|
function describeAnthropicAuthSource(baseEnv = {}, { getKey = getAnthropicKey, probeLogin = probeClaudeLoginState } = {}) {
|
|
209
|
-
const
|
|
210
|
-
|
|
211
|
-
return "claude auth login (VO_RUNNER_PREFER_LOGIN set \u2014 any API key ignored)";
|
|
212
|
-
}
|
|
213
|
-
if (baseEnv.ANTHROPIC_API_KEY) return "ANTHROPIC_API_KEY from environment";
|
|
214
|
-
if (!getKey()) return "claude auth login session (no API key set)";
|
|
215
|
-
if (preferKey) {
|
|
216
|
-
return "ANTHROPIC_API_KEY from OS keychain (VO_RUNNER_PREFER_KEY set \u2014 subscription ignored)";
|
|
217
|
-
}
|
|
218
|
-
if (probeLogin() === true) {
|
|
219
|
-
return "claude auth login session (subscription beats the stored keychain key)";
|
|
220
|
-
}
|
|
221
|
-
return "ANTHROPIC_API_KEY from OS keychain";
|
|
250
|
+
const { source } = classifyClaudeCredential(baseEnv, { getKey, probeLogin });
|
|
251
|
+
return AUTH_SOURCE_DESCRIPTION[source];
|
|
222
252
|
}
|
|
223
253
|
function probeClaudeLoginState({
|
|
224
254
|
spawn: spawn2 = spawnSync2,
|