claudish 14.10.2 → 14.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +614 -168
- package/package.json +5 -5
package/dist/index.js
CHANGED
|
@@ -5491,7 +5491,7 @@ var init_onepassword_config = __esm(() => {
|
|
|
5491
5491
|
});
|
|
5492
5492
|
|
|
5493
5493
|
// src/version.ts
|
|
5494
|
-
var VERSION = "14.
|
|
5494
|
+
var VERSION = "14.11.0";
|
|
5495
5495
|
|
|
5496
5496
|
// src/redact.ts
|
|
5497
5497
|
function isPlaceholder(value) {
|
|
@@ -26267,6 +26267,7 @@ var init_antigravity_token = __esm(() => {
|
|
|
26267
26267
|
var exports_antigravity_user = {};
|
|
26268
26268
|
__export(exports_antigravity_user, {
|
|
26269
26269
|
antigravityHost: () => antigravityHost,
|
|
26270
|
+
antigravityUserAgentFor: () => antigravityUserAgentFor,
|
|
26270
26271
|
buildAntigravityUserAgent: () => buildAntigravityUserAgent,
|
|
26271
26272
|
fetchAntigravityAvailableModelsRaw: () => fetchAntigravityAvailableModelsRaw,
|
|
26272
26273
|
getAntigravityTierDisplayName: () => getAntigravityTierDisplayName,
|
|
@@ -26299,6 +26300,9 @@ function antigravityClientVersion() {
|
|
|
26299
26300
|
function userAgentFor(version) {
|
|
26300
26301
|
return `antigravity/cli/${version} (aidev_client; os_type=${process.platform}; arch=${process.arch}; auth_method=consumer)`;
|
|
26301
26302
|
}
|
|
26303
|
+
function antigravityUserAgentFor(version) {
|
|
26304
|
+
return userAgentFor(version);
|
|
26305
|
+
}
|
|
26302
26306
|
function buildAntigravityUserAgent() {
|
|
26303
26307
|
return userAgentFor(antigravityClientVersion());
|
|
26304
26308
|
}
|
|
@@ -90429,6 +90433,10 @@ ${h("SUBCOMMANDS")}
|
|
|
90429
90433
|
${green("claudish subscription models antigravity")} ${yellow("--raw --json")}
|
|
90430
90434
|
Print the raw Antigravity fetchAvailableModels
|
|
90431
90435
|
${dim("body as one JSON line (for models-index)")}
|
|
90436
|
+
${green("claudish subscription probe antigravity")} ${yellow("--model <id> --request-file <path> --raw --json")}
|
|
90437
|
+
Send the file's Gemini request once through the
|
|
90438
|
+
Antigravity login (generateContent, no retry, model
|
|
90439
|
+
${dim("id unchanged); print the raw answer as one JSON line")}
|
|
90432
90440
|
${green("claudish update")} Check for updates and install the latest version
|
|
90433
90441
|
|
|
90434
90442
|
${bold("Profiles:")}
|
|
@@ -104456,68 +104464,20 @@ var init_keychain_command = __esm(() => {
|
|
|
104456
104464
|
VALUE_FLAGS = new Set(["--config", "--from", "--only"]);
|
|
104457
104465
|
});
|
|
104458
104466
|
|
|
104459
|
-
// src/subscription-
|
|
104460
|
-
|
|
104461
|
-
|
|
104462
|
-
EXIT: () => EXIT,
|
|
104463
|
-
FAILURE_CODES: () => FAILURE_CODES,
|
|
104464
|
-
INTERNAL_ERROR_MESSAGE: () => INTERNAL_ERROR_MESSAGE,
|
|
104465
|
-
SECRET_GUARD_MESSAGE: () => SECRET_GUARD_MESSAGE,
|
|
104466
|
-
SUBSCRIPTION_MODELS_USAGE: () => SUBSCRIPTION_MODELS_USAGE,
|
|
104467
|
-
SUBSCRIPTION_MODEL_LIST_SCHEMA: () => SUBSCRIPTION_MODEL_LIST_SCHEMA,
|
|
104468
|
-
defaultSubscriptionModelsDeps: () => defaultSubscriptionModelsDeps,
|
|
104469
|
-
exitCodeFor: () => exitCodeFor,
|
|
104470
|
-
parseSubscriptionModelsArgs: () => parseSubscriptionModelsArgs,
|
|
104471
|
-
reportSubscriptionInternalError: () => reportSubscriptionInternalError,
|
|
104472
|
-
runAntigravityRawModelList: () => runAntigravityRawModelList,
|
|
104473
|
-
subscriptionModelsCommand: () => subscriptionModelsCommand
|
|
104474
|
-
});
|
|
104475
|
-
function exitCodeFor(failure) {
|
|
104476
|
-
if (failure.class === "internal")
|
|
104477
|
-
return failure.code === "usage" ? EXIT.usage : EXIT.internal;
|
|
104478
|
-
return EXIT[failure.class];
|
|
104479
|
-
}
|
|
104480
|
-
function defaultSubscriptionModelsDeps() {
|
|
104481
|
-
return {
|
|
104482
|
-
platform: () => process.platform,
|
|
104483
|
-
readStore: readAntigravityStoreClassified,
|
|
104484
|
-
tokenDeps: defaultAntigravityTokenDeps,
|
|
104485
|
-
now: () => Date.now(),
|
|
104486
|
-
httpTimeoutMs: 30000,
|
|
104487
|
-
keychainDeadlineMs: 1e4,
|
|
104488
|
-
writeStdout: (line) => new Promise((resolve, reject) => {
|
|
104489
|
-
process.stdout.write(line, (err) => err ? reject(err) : resolve());
|
|
104490
|
-
}),
|
|
104491
|
-
writeStderr: (line) => {
|
|
104492
|
-
process.stderr.write(line);
|
|
104493
|
-
}
|
|
104494
|
-
};
|
|
104495
|
-
}
|
|
104496
|
-
function parseSubscriptionModelsArgs(argv) {
|
|
104497
|
-
const positionals = argv.filter((a) => !a.startsWith("-"));
|
|
104498
|
-
const flags = argv.filter((a) => a.startsWith("-"));
|
|
104499
|
-
const positionalsOk = positionals.length === 2 && positionals[0] === "models" && positionals[1] === "antigravity";
|
|
104500
|
-
const flagsOk = flags.length === 2 && flags.includes("--raw") && flags.includes("--json");
|
|
104501
|
-
return positionalsOk && flagsOk ? { ok: true, provider: "antigravity" } : { ok: false };
|
|
104467
|
+
// src/subscription-antigravity-session.ts
|
|
104468
|
+
function newSecrets() {
|
|
104469
|
+
return { values: new Set };
|
|
104502
104470
|
}
|
|
104503
104471
|
function addSecret(secrets, value) {
|
|
104504
104472
|
if (typeof value === "string" && value.length > 0)
|
|
104505
104473
|
secrets.values.add(value);
|
|
104506
104474
|
}
|
|
104507
|
-
function
|
|
104508
|
-
|
|
104509
|
-
|
|
104510
|
-
|
|
104511
|
-
|
|
104512
|
-
|
|
104513
|
-
...facts.sourceUrl !== undefined ? { sourceUrl: facts.sourceUrl } : {},
|
|
104514
|
-
...facts.clientVersion !== undefined ? { clientVersion: facts.clientVersion } : {},
|
|
104515
|
-
...facts.clientVersionSource !== undefined ? { clientVersionSource: facts.clientVersionSource } : {},
|
|
104516
|
-
tokenRefreshed: facts.tokenRefreshed,
|
|
104517
|
-
...facts.httpStatus !== undefined ? { httpStatus: facts.httpStatus } : {},
|
|
104518
|
-
...failure ? { failure } : {},
|
|
104519
|
-
...body !== undefined ? { body } : {}
|
|
104520
|
-
};
|
|
104475
|
+
function containsSecret(secrets, ...texts) {
|
|
104476
|
+
for (const secret of secrets.values) {
|
|
104477
|
+
if (texts.some((text) => text?.includes(secret)))
|
|
104478
|
+
return true;
|
|
104479
|
+
}
|
|
104480
|
+
return false;
|
|
104521
104481
|
}
|
|
104522
104482
|
function failureOf2(cls, code, httpStatus) {
|
|
104523
104483
|
return { class: cls, code, ...httpStatus !== undefined ? { httpStatus } : {} };
|
|
@@ -104532,6 +104492,19 @@ function stripUserinfo(url) {
|
|
|
104532
104492
|
return url.replace(/^([a-z][a-z0-9+.-]*:\/\/)[^@/]*@/i, "$1");
|
|
104533
104493
|
}
|
|
104534
104494
|
}
|
|
104495
|
+
async function raceTimeout(work, ms) {
|
|
104496
|
+
let timer;
|
|
104497
|
+
const timedOut = new Promise((resolve) => {
|
|
104498
|
+
timer = setTimeout(() => resolve(TIMED_OUT), ms);
|
|
104499
|
+
});
|
|
104500
|
+
work.catch(() => {});
|
|
104501
|
+
try {
|
|
104502
|
+
return await Promise.race([work, timedOut]);
|
|
104503
|
+
} finally {
|
|
104504
|
+
if (timer)
|
|
104505
|
+
clearTimeout(timer);
|
|
104506
|
+
}
|
|
104507
|
+
}
|
|
104535
104508
|
function storeReadFailure(read) {
|
|
104536
104509
|
switch (read.kind) {
|
|
104537
104510
|
case "absent":
|
|
@@ -104574,29 +104547,171 @@ function loadCodeAssistFailure(err) {
|
|
|
104574
104547
|
return failureOf2("mint_failed", "load_code_assist_no_project");
|
|
104575
104548
|
return failureOf2("network", "load_code_assist_network_error");
|
|
104576
104549
|
}
|
|
104550
|
+
async function obtainAccessToken(deps, facts, secrets, preRaw) {
|
|
104551
|
+
const base = deps.tokenDeps();
|
|
104552
|
+
let firstRead = true;
|
|
104553
|
+
let refreshCalled = false;
|
|
104554
|
+
let refreshOutcome = null;
|
|
104555
|
+
const laterReads = [];
|
|
104556
|
+
const observed = {
|
|
104557
|
+
...base,
|
|
104558
|
+
readStore: () => {
|
|
104559
|
+
if (firstRead) {
|
|
104560
|
+
firstRead = false;
|
|
104561
|
+
return preRaw;
|
|
104562
|
+
}
|
|
104563
|
+
const raw = base.readStore();
|
|
104564
|
+
if (raw)
|
|
104565
|
+
laterReads.push(raw);
|
|
104566
|
+
return raw;
|
|
104567
|
+
},
|
|
104568
|
+
runAgyRefresh: () => {
|
|
104569
|
+
refreshCalled = true;
|
|
104570
|
+
facts.tokenRefreshed = true;
|
|
104571
|
+
refreshOutcome = base.runAgyRefresh();
|
|
104572
|
+
return refreshOutcome;
|
|
104573
|
+
}
|
|
104574
|
+
};
|
|
104575
|
+
let accessToken;
|
|
104576
|
+
try {
|
|
104577
|
+
accessToken = await getValidAntigravityAccessToken(observed);
|
|
104578
|
+
} catch {
|
|
104579
|
+
return { ok: false, failure: tokenFailure(refreshCalled, refreshOutcome) };
|
|
104580
|
+
}
|
|
104581
|
+
addSecret(secrets, accessToken);
|
|
104582
|
+
for (const raw of [preRaw, ...laterReads]) {
|
|
104583
|
+
addSecret(secrets, raw);
|
|
104584
|
+
addSecret(secrets, readSharedAntigravityToken({ ...base, readStore: () => raw })?.refresh_token);
|
|
104585
|
+
}
|
|
104586
|
+
return { ok: true, accessToken };
|
|
104587
|
+
}
|
|
104588
|
+
async function establishAntigravitySession(deps, secrets, facts) {
|
|
104589
|
+
if (deps.platform() !== "darwin") {
|
|
104590
|
+
return { ok: false, failure: failureOf2("credential_missing", "platform_unsupported") };
|
|
104591
|
+
}
|
|
104592
|
+
const read = await deps.readStore(deps.keychainDeadlineMs);
|
|
104593
|
+
if (read.kind !== "present")
|
|
104594
|
+
return { ok: false, failure: storeReadFailure(read) };
|
|
104595
|
+
addSecret(secrets, read.raw);
|
|
104596
|
+
const token = await obtainAccessToken(deps, facts, secrets, read.raw);
|
|
104597
|
+
if (!token.ok)
|
|
104598
|
+
return token;
|
|
104599
|
+
const version = resolveAntigravityClientVersion();
|
|
104600
|
+
facts.clientVersion = version.version;
|
|
104601
|
+
facts.clientVersionSource = version.source;
|
|
104602
|
+
let projectId;
|
|
104603
|
+
let tierId;
|
|
104604
|
+
try {
|
|
104605
|
+
const setup = await raceTimeout(setupAntigravityUser(token.accessToken), deps.httpTimeoutMs);
|
|
104606
|
+
if (setup === TIMED_OUT) {
|
|
104607
|
+
return { ok: false, failure: failureOf2("network", "load_code_assist_timeout") };
|
|
104608
|
+
}
|
|
104609
|
+
projectId = setup.projectId;
|
|
104610
|
+
tierId = setup.tierId;
|
|
104611
|
+
} catch (err) {
|
|
104612
|
+
return { ok: false, failure: loadCodeAssistFailure(err) };
|
|
104613
|
+
}
|
|
104614
|
+
addSecret(secrets, projectId);
|
|
104615
|
+
return { ok: true, accessToken: token.accessToken, projectId, tierId };
|
|
104616
|
+
}
|
|
104617
|
+
var SESSION_FAILURE_CODES, TIMED_OUT;
|
|
104618
|
+
var init_subscription_antigravity_session = __esm(() => {
|
|
104619
|
+
init_antigravity_token();
|
|
104620
|
+
init_antigravity_user();
|
|
104621
|
+
SESSION_FAILURE_CODES = {
|
|
104622
|
+
credential_missing: ["platform_unsupported", "keychain_item_absent", "token_unparseable"],
|
|
104623
|
+
keychain_locked: ["keychain_locked", "keychain_read_timeout", "keychain_read_failed"],
|
|
104624
|
+
mint_failed: [
|
|
104625
|
+
"agy_missing",
|
|
104626
|
+
"agy_refresh_failed",
|
|
104627
|
+
"agy_refresh_timeout",
|
|
104628
|
+
"agy_refresh_no_valid_token",
|
|
104629
|
+
"load_code_assist_4xx",
|
|
104630
|
+
"load_code_assist_no_project",
|
|
104631
|
+
"load_code_assist_bad_body"
|
|
104632
|
+
],
|
|
104633
|
+
network: [
|
|
104634
|
+
"load_code_assist_network_error",
|
|
104635
|
+
"load_code_assist_429",
|
|
104636
|
+
"load_code_assist_5xx",
|
|
104637
|
+
"load_code_assist_timeout"
|
|
104638
|
+
]
|
|
104639
|
+
};
|
|
104640
|
+
TIMED_OUT = Symbol("timed-out");
|
|
104641
|
+
});
|
|
104642
|
+
|
|
104643
|
+
// src/subscription-models-command.ts
|
|
104644
|
+
var exports_subscription_models_command = {};
|
|
104645
|
+
__export(exports_subscription_models_command, {
|
|
104646
|
+
EXIT: () => EXIT,
|
|
104647
|
+
FAILURE_CODES: () => FAILURE_CODES,
|
|
104648
|
+
INTERNAL_ERROR_MESSAGE: () => INTERNAL_ERROR_MESSAGE,
|
|
104649
|
+
SECRET_GUARD_MESSAGE: () => SECRET_GUARD_MESSAGE,
|
|
104650
|
+
SUBSCRIPTION_MODELS_USAGE: () => SUBSCRIPTION_MODELS_USAGE,
|
|
104651
|
+
SUBSCRIPTION_MODEL_LIST_SCHEMA: () => SUBSCRIPTION_MODEL_LIST_SCHEMA,
|
|
104652
|
+
defaultSubscriptionModelsDeps: () => defaultSubscriptionModelsDeps,
|
|
104653
|
+
exitCodeFor: () => exitCodeFor,
|
|
104654
|
+
parseSubscriptionModelsArgs: () => parseSubscriptionModelsArgs,
|
|
104655
|
+
reportSubscriptionInternalError: () => reportSubscriptionInternalError,
|
|
104656
|
+
runAntigravityRawModelList: () => runAntigravityRawModelList,
|
|
104657
|
+
subscriptionModelsCommand: () => subscriptionModelsCommand
|
|
104658
|
+
});
|
|
104659
|
+
function exitCodeFor(failure) {
|
|
104660
|
+
if (failure.class === "internal")
|
|
104661
|
+
return failure.code === "usage" ? EXIT.usage : EXIT.internal;
|
|
104662
|
+
return EXIT[failure.class];
|
|
104663
|
+
}
|
|
104664
|
+
function defaultSubscriptionModelsDeps() {
|
|
104665
|
+
return {
|
|
104666
|
+
platform: () => process.platform,
|
|
104667
|
+
readStore: readAntigravityStoreClassified,
|
|
104668
|
+
tokenDeps: defaultAntigravityTokenDeps,
|
|
104669
|
+
now: () => Date.now(),
|
|
104670
|
+
httpTimeoutMs: 30000,
|
|
104671
|
+
keychainDeadlineMs: 1e4,
|
|
104672
|
+
writeStdout: (line) => new Promise((resolve, reject) => {
|
|
104673
|
+
process.stdout.write(line, (err) => err ? reject(err) : resolve());
|
|
104674
|
+
}),
|
|
104675
|
+
writeStderr: (line) => {
|
|
104676
|
+
process.stderr.write(line);
|
|
104677
|
+
}
|
|
104678
|
+
};
|
|
104679
|
+
}
|
|
104680
|
+
function parseSubscriptionModelsArgs(argv) {
|
|
104681
|
+
const positionals = argv.filter((a) => !a.startsWith("-"));
|
|
104682
|
+
const flags = argv.filter((a) => a.startsWith("-"));
|
|
104683
|
+
const positionalsOk = positionals.length === 2 && positionals[0] === "models" && positionals[1] === "antigravity";
|
|
104684
|
+
const flagsOk = flags.length === 2 && flags.includes("--raw") && flags.includes("--json");
|
|
104685
|
+
return positionalsOk && flagsOk ? { ok: true, provider: "antigravity" } : { ok: false };
|
|
104686
|
+
}
|
|
104687
|
+
function buildEnvelope(facts, failure, body) {
|
|
104688
|
+
return {
|
|
104689
|
+
schema: SUBSCRIPTION_MODEL_LIST_SCHEMA,
|
|
104690
|
+
...facts.provider !== undefined ? { provider: facts.provider } : {},
|
|
104691
|
+
claudishVersion: VERSION,
|
|
104692
|
+
...facts.fetchedAt !== undefined ? { fetchedAt: facts.fetchedAt } : {},
|
|
104693
|
+
...facts.sourceUrl !== undefined ? { sourceUrl: facts.sourceUrl } : {},
|
|
104694
|
+
...facts.clientVersion !== undefined ? { clientVersion: facts.clientVersion } : {},
|
|
104695
|
+
...facts.clientVersionSource !== undefined ? { clientVersionSource: facts.clientVersionSource } : {},
|
|
104696
|
+
tokenRefreshed: facts.tokenRefreshed,
|
|
104697
|
+
...facts.httpStatus !== undefined ? { httpStatus: facts.httpStatus } : {},
|
|
104698
|
+
...failure ? { failure } : {},
|
|
104699
|
+
...body !== undefined ? { body } : {}
|
|
104700
|
+
};
|
|
104701
|
+
}
|
|
104702
|
+
function failureOf3(cls, code, httpStatus) {
|
|
104703
|
+
return failureOf2(cls, code, httpStatus);
|
|
104704
|
+
}
|
|
104577
104705
|
function listFailure(value, status) {
|
|
104578
104706
|
const models = value !== null && typeof value === "object" && !Array.isArray(value) ? value.models : undefined;
|
|
104579
104707
|
if (models === null || typeof models !== "object" || Array.isArray(models)) {
|
|
104580
|
-
return
|
|
104708
|
+
return failureOf3("list_incomplete", "models_absent", status);
|
|
104581
104709
|
}
|
|
104582
104710
|
if (Object.keys(models).length === 0) {
|
|
104583
|
-
return
|
|
104711
|
+
return failureOf3("list_incomplete", "models_empty", status);
|
|
104584
104712
|
}
|
|
104585
104713
|
return null;
|
|
104586
104714
|
}
|
|
104587
|
-
async function raceTimeout(work, ms) {
|
|
104588
|
-
let timer;
|
|
104589
|
-
const timedOut = new Promise((resolve) => {
|
|
104590
|
-
timer = setTimeout(() => resolve(TIMED_OUT), ms);
|
|
104591
|
-
});
|
|
104592
|
-
work.catch(() => {});
|
|
104593
|
-
try {
|
|
104594
|
-
return await Promise.race([work, timedOut]);
|
|
104595
|
-
} finally {
|
|
104596
|
-
if (timer)
|
|
104597
|
-
clearTimeout(timer);
|
|
104598
|
-
}
|
|
104599
|
-
}
|
|
104600
104715
|
function fail(facts, failure) {
|
|
104601
104716
|
return { envelope: buildEnvelope(facts, failure), exitCode: exitCodeFor(failure) };
|
|
104602
104717
|
}
|
|
@@ -104604,20 +104719,13 @@ function lineOf(envelope) {
|
|
|
104604
104719
|
return `${JSON.stringify(envelope)}
|
|
104605
104720
|
`;
|
|
104606
104721
|
}
|
|
104607
|
-
function containsSecret(secrets, ...texts) {
|
|
104608
|
-
for (const secret of secrets.values) {
|
|
104609
|
-
if (texts.some((text) => text?.includes(secret)))
|
|
104610
|
-
return true;
|
|
104611
|
-
}
|
|
104612
|
-
return false;
|
|
104613
|
-
}
|
|
104614
104722
|
function safeStderr(deps, line) {
|
|
104615
104723
|
try {
|
|
104616
104724
|
deps.writeStderr(line);
|
|
104617
104725
|
} catch {}
|
|
104618
104726
|
}
|
|
104619
104727
|
async function writeInternalFailure(deps, facts, code, stderrLine, secrets) {
|
|
104620
|
-
const failure =
|
|
104728
|
+
const failure = failureOf3("internal", code);
|
|
104621
104729
|
safeStderr(deps, `${stderrLine}
|
|
104622
104730
|
`);
|
|
104623
104731
|
const line = lineOf(buildEnvelope(facts, failure));
|
|
@@ -104639,51 +104747,13 @@ async function reportSubscriptionInternalError(deps) {
|
|
|
104639
104747
|
}
|
|
104640
104748
|
return writeInternalFailure(resolved, { tokenRefreshed: false }, "internal_error", INTERNAL_ERROR_MESSAGE);
|
|
104641
104749
|
}
|
|
104642
|
-
async function obtainAccessToken(deps, facts, secrets, preRaw) {
|
|
104643
|
-
const base = deps.tokenDeps();
|
|
104644
|
-
let firstRead = true;
|
|
104645
|
-
let refreshCalled = false;
|
|
104646
|
-
let refreshOutcome = null;
|
|
104647
|
-
const laterReads = [];
|
|
104648
|
-
const observed = {
|
|
104649
|
-
...base,
|
|
104650
|
-
readStore: () => {
|
|
104651
|
-
if (firstRead) {
|
|
104652
|
-
firstRead = false;
|
|
104653
|
-
return preRaw;
|
|
104654
|
-
}
|
|
104655
|
-
const raw = base.readStore();
|
|
104656
|
-
if (raw)
|
|
104657
|
-
laterReads.push(raw);
|
|
104658
|
-
return raw;
|
|
104659
|
-
},
|
|
104660
|
-
runAgyRefresh: () => {
|
|
104661
|
-
refreshCalled = true;
|
|
104662
|
-
facts.tokenRefreshed = true;
|
|
104663
|
-
refreshOutcome = base.runAgyRefresh();
|
|
104664
|
-
return refreshOutcome;
|
|
104665
|
-
}
|
|
104666
|
-
};
|
|
104667
|
-
let accessToken;
|
|
104668
|
-
try {
|
|
104669
|
-
accessToken = await getValidAntigravityAccessToken(observed);
|
|
104670
|
-
} catch {
|
|
104671
|
-
return { ok: false, result: fail(facts, tokenFailure(refreshCalled, refreshOutcome)) };
|
|
104672
|
-
}
|
|
104673
|
-
addSecret(secrets, accessToken);
|
|
104674
|
-
for (const raw of [preRaw, ...laterReads]) {
|
|
104675
|
-
addSecret(secrets, raw);
|
|
104676
|
-
addSecret(secrets, readSharedAntigravityToken({ ...base, readStore: () => raw })?.refresh_token);
|
|
104677
|
-
}
|
|
104678
|
-
return { ok: true, accessToken };
|
|
104679
|
-
}
|
|
104680
104750
|
function classifyAvailableModels(facts, raw, timedOut) {
|
|
104681
104751
|
facts.sourceUrl = stripUserinfo(raw.url);
|
|
104682
104752
|
facts.clientVersion = raw.clientVersion;
|
|
104683
104753
|
facts.clientVersionSource = raw.clientVersionSource;
|
|
104684
104754
|
const networkCode = timedOut ? "fetch_available_models_timeout" : "fetch_available_models_network_error";
|
|
104685
104755
|
if (raw.kind === "unreachable")
|
|
104686
|
-
return fail(facts,
|
|
104756
|
+
return fail(facts, failureOf3("network", networkCode));
|
|
104687
104757
|
facts.fetchedAt = raw.fetchedAt;
|
|
104688
104758
|
facts.httpStatus = raw.status;
|
|
104689
104759
|
if (raw.status < 200 || raw.status >= 300) {
|
|
@@ -104701,39 +104771,20 @@ function classifyAvailableModels(facts, raw, timedOut) {
|
|
|
104701
104771
|
};
|
|
104702
104772
|
}
|
|
104703
104773
|
case "not-json":
|
|
104704
|
-
return fail(facts,
|
|
104774
|
+
return fail(facts, failureOf3("list_incomplete", "body_not_json", raw.status));
|
|
104705
104775
|
default:
|
|
104706
|
-
return fail(facts,
|
|
104776
|
+
return fail(facts, failureOf3("network", networkCode, raw.status));
|
|
104707
104777
|
}
|
|
104708
104778
|
}
|
|
104709
104779
|
async function determine(deps, secrets, facts) {
|
|
104710
|
-
|
|
104711
|
-
|
|
104712
|
-
|
|
104713
|
-
const
|
|
104714
|
-
if (read.kind !== "present")
|
|
104715
|
-
return fail(facts, storeReadFailure(read));
|
|
104716
|
-
addSecret(secrets, read.raw);
|
|
104717
|
-
const token = await obtainAccessToken(deps, facts, secrets, read.raw);
|
|
104718
|
-
if (!token.ok)
|
|
104719
|
-
return token.result;
|
|
104720
|
-
const version = resolveAntigravityClientVersion();
|
|
104721
|
-
facts.clientVersion = version.version;
|
|
104722
|
-
facts.clientVersionSource = version.source;
|
|
104723
|
-
let projectId;
|
|
104724
|
-
try {
|
|
104725
|
-
const setup = await raceTimeout(setupAntigravityUser(token.accessToken), deps.httpTimeoutMs);
|
|
104726
|
-
if (setup === TIMED_OUT)
|
|
104727
|
-
return fail(facts, failureOf2("network", "load_code_assist_timeout"));
|
|
104728
|
-
projectId = setup.projectId;
|
|
104729
|
-
} catch (err) {
|
|
104730
|
-
return fail(facts, loadCodeAssistFailure(err));
|
|
104731
|
-
}
|
|
104732
|
-
addSecret(secrets, projectId);
|
|
104780
|
+
const session = await establishAntigravitySession(deps, secrets, facts);
|
|
104781
|
+
if (!session.ok)
|
|
104782
|
+
return fail(facts, session.failure);
|
|
104783
|
+
const { accessToken, projectId } = session;
|
|
104733
104784
|
const controller = new AbortController;
|
|
104734
104785
|
const timer = setTimeout(() => controller.abort(), deps.httpTimeoutMs);
|
|
104735
104786
|
try {
|
|
104736
|
-
const raw = await fetchAntigravityAvailableModelsRaw(
|
|
104787
|
+
const raw = await fetchAntigravityAvailableModelsRaw(accessToken, projectId, {
|
|
104737
104788
|
signal: controller.signal,
|
|
104738
104789
|
now: deps.now
|
|
104739
104790
|
});
|
|
@@ -104743,7 +104794,7 @@ async function determine(deps, secrets, facts) {
|
|
|
104743
104794
|
}
|
|
104744
104795
|
}
|
|
104745
104796
|
async function runAntigravityRawModelList(deps) {
|
|
104746
|
-
const secrets =
|
|
104797
|
+
const secrets = newSecrets();
|
|
104747
104798
|
const facts = { provider: "antigravity", tokenRefreshed: false };
|
|
104748
104799
|
let line;
|
|
104749
104800
|
let exitCode;
|
|
@@ -104774,27 +104825,17 @@ async function subscriptionModelsCommand(argv, deps = defaultSubscriptionModelsD
|
|
|
104774
104825
|
}
|
|
104775
104826
|
return runAntigravityRawModelList(deps);
|
|
104776
104827
|
}
|
|
104777
|
-
var SUBSCRIPTION_MODEL_LIST_SCHEMA = "claudish.subscription-model-list.v1", FAILURE_CODES, EXIT, SUBSCRIPTION_MODELS_USAGE = "usage: claudish subscription models antigravity --raw --json", SECRET_GUARD_MESSAGE = "[claudish subscription] refused: output contained a credential value", INTERNAL_ERROR_MESSAGE = "[claudish subscription] internal error"
|
|
104828
|
+
var SUBSCRIPTION_MODEL_LIST_SCHEMA = "claudish.subscription-model-list.v1", FAILURE_CODES, EXIT, SUBSCRIPTION_MODELS_USAGE = "usage: claudish subscription models antigravity --raw --json", SECRET_GUARD_MESSAGE = "[claudish subscription] refused: output contained a credential value", INTERNAL_ERROR_MESSAGE = "[claudish subscription] internal error";
|
|
104778
104829
|
var init_subscription_models_command = __esm(() => {
|
|
104779
104830
|
init_antigravity_token();
|
|
104780
104831
|
init_antigravity_user();
|
|
104832
|
+
init_subscription_antigravity_session();
|
|
104781
104833
|
FAILURE_CODES = {
|
|
104782
|
-
credential_missing:
|
|
104783
|
-
keychain_locked:
|
|
104784
|
-
mint_failed:
|
|
104785
|
-
"agy_missing",
|
|
104786
|
-
"agy_refresh_failed",
|
|
104787
|
-
"agy_refresh_timeout",
|
|
104788
|
-
"agy_refresh_no_valid_token",
|
|
104789
|
-
"load_code_assist_4xx",
|
|
104790
|
-
"load_code_assist_no_project",
|
|
104791
|
-
"load_code_assist_bad_body"
|
|
104792
|
-
],
|
|
104834
|
+
credential_missing: SESSION_FAILURE_CODES.credential_missing,
|
|
104835
|
+
keychain_locked: SESSION_FAILURE_CODES.keychain_locked,
|
|
104836
|
+
mint_failed: SESSION_FAILURE_CODES.mint_failed,
|
|
104793
104837
|
network: [
|
|
104794
|
-
|
|
104795
|
-
"load_code_assist_429",
|
|
104796
|
-
"load_code_assist_5xx",
|
|
104797
|
-
"load_code_assist_timeout",
|
|
104838
|
+
...SESSION_FAILURE_CODES.network,
|
|
104798
104839
|
"fetch_available_models_network_error",
|
|
104799
104840
|
"fetch_available_models_timeout"
|
|
104800
104841
|
],
|
|
@@ -104811,7 +104852,399 @@ var init_subscription_models_command = __esm(() => {
|
|
|
104811
104852
|
network: 6,
|
|
104812
104853
|
list_incomplete: 7
|
|
104813
104854
|
};
|
|
104814
|
-
|
|
104855
|
+
});
|
|
104856
|
+
|
|
104857
|
+
// src/subscription-dispatch.ts
|
|
104858
|
+
function isSubscriptionProbeArgv(argv) {
|
|
104859
|
+
for (let i = 0;i < argv.length; i++) {
|
|
104860
|
+
const token = argv[i];
|
|
104861
|
+
if (token === "--model" || token === "--request-file") {
|
|
104862
|
+
if (argv[i + 1] !== undefined && !argv[i + 1].startsWith("-"))
|
|
104863
|
+
i++;
|
|
104864
|
+
} else if (!token.startsWith("-")) {
|
|
104865
|
+
return token === "probe";
|
|
104866
|
+
}
|
|
104867
|
+
}
|
|
104868
|
+
return false;
|
|
104869
|
+
}
|
|
104870
|
+
function probeLoadFailureLine() {
|
|
104871
|
+
return `${JSON.stringify({
|
|
104872
|
+
schema: SUBSCRIPTION_PROBE_SCHEMA,
|
|
104873
|
+
claudishVersion: VERSION,
|
|
104874
|
+
tokenRefreshed: false,
|
|
104875
|
+
failure: { class: "internal", code: "internal_error" }
|
|
104876
|
+
})}
|
|
104877
|
+
`;
|
|
104878
|
+
}
|
|
104879
|
+
var SUBSCRIPTION_PROBE_SCHEMA = "claudish.subscription-probe.v1";
|
|
104880
|
+
var init_subscription_dispatch = () => {};
|
|
104881
|
+
|
|
104882
|
+
// src/subscription-probe-command.ts
|
|
104883
|
+
var exports_subscription_probe_command = {};
|
|
104884
|
+
__export(exports_subscription_probe_command, {
|
|
104885
|
+
MAX_UNESCAPE_ROUNDS: () => MAX_UNESCAPE_ROUNDS,
|
|
104886
|
+
PROBE_BODY_CAP_BYTES: () => PROBE_BODY_CAP_BYTES,
|
|
104887
|
+
PROBE_EXIT: () => PROBE_EXIT,
|
|
104888
|
+
PROBE_FAILURE_CODES: () => PROBE_FAILURE_CODES,
|
|
104889
|
+
PROBE_REQUEST_FILE_CAP_BYTES: () => PROBE_REQUEST_FILE_CAP_BYTES,
|
|
104890
|
+
PROBE_REQUEST_FILE_MESSAGE: () => PROBE_REQUEST_FILE_MESSAGE,
|
|
104891
|
+
REDACTED: () => REDACTED2,
|
|
104892
|
+
SUBSCRIPTION_PROBE_SCHEMA: () => SUBSCRIPTION_PROBE_SCHEMA,
|
|
104893
|
+
SUBSCRIPTION_PROBE_USAGE: () => SUBSCRIPTION_PROBE_USAGE,
|
|
104894
|
+
buildProbeEnvelopeBody: () => buildProbeEnvelopeBody,
|
|
104895
|
+
defaultSubscriptionProbeDeps: () => defaultSubscriptionProbeDeps,
|
|
104896
|
+
isSubscriptionProbeArgv: () => isSubscriptionProbeArgv,
|
|
104897
|
+
jsonUnescapedForms: () => jsonUnescapedForms,
|
|
104898
|
+
parseSubscriptionProbeArgs: () => parseSubscriptionProbeArgs,
|
|
104899
|
+
probeExitCodeFor: () => probeExitCodeFor,
|
|
104900
|
+
redactSecretValues: () => redactSecretValues,
|
|
104901
|
+
reportProbeInternalError: () => reportProbeInternalError,
|
|
104902
|
+
runAntigravityProbe: () => runAntigravityProbe,
|
|
104903
|
+
subscriptionProbeCommand: () => subscriptionProbeCommand
|
|
104904
|
+
});
|
|
104905
|
+
import { randomUUID as randomUUID10 } from "crypto";
|
|
104906
|
+
import { readFile as readFile8, stat as stat2 } from "fs/promises";
|
|
104907
|
+
function probeExitCodeFor(failure) {
|
|
104908
|
+
if (failure.class === "internal") {
|
|
104909
|
+
return CALLER_CODES.includes(failure.code) ? PROBE_EXIT.usage : PROBE_EXIT.internal;
|
|
104910
|
+
}
|
|
104911
|
+
return PROBE_EXIT[failure.class];
|
|
104912
|
+
}
|
|
104913
|
+
async function defaultReadRequestFile(path) {
|
|
104914
|
+
const info = await stat2(path);
|
|
104915
|
+
if (!info.isFile())
|
|
104916
|
+
throw new Error("not a file");
|
|
104917
|
+
if (info.size > PROBE_REQUEST_FILE_CAP_BYTES)
|
|
104918
|
+
return null;
|
|
104919
|
+
return readFile8(path, "utf8");
|
|
104920
|
+
}
|
|
104921
|
+
function defaultSubscriptionProbeDeps() {
|
|
104922
|
+
return {
|
|
104923
|
+
platform: () => process.platform,
|
|
104924
|
+
readStore: readAntigravityStoreClassified,
|
|
104925
|
+
tokenDeps: defaultAntigravityTokenDeps,
|
|
104926
|
+
now: () => Date.now(),
|
|
104927
|
+
httpTimeoutMs: 30000,
|
|
104928
|
+
keychainDeadlineMs: 1e4,
|
|
104929
|
+
requestTimeoutMs: 300000,
|
|
104930
|
+
readRequestFile: defaultReadRequestFile,
|
|
104931
|
+
writeStdout: (line) => new Promise((resolve, reject) => {
|
|
104932
|
+
process.stdout.write(line, (err) => err ? reject(err) : resolve());
|
|
104933
|
+
}),
|
|
104934
|
+
writeStderr: (line) => {
|
|
104935
|
+
process.stderr.write(line);
|
|
104936
|
+
}
|
|
104937
|
+
};
|
|
104938
|
+
}
|
|
104939
|
+
function parseSubscriptionProbeArgs(argv) {
|
|
104940
|
+
const positionals = [];
|
|
104941
|
+
const values = new Map;
|
|
104942
|
+
const switches = new Set;
|
|
104943
|
+
for (let i = 0;i < argv.length; i++) {
|
|
104944
|
+
const token = argv[i];
|
|
104945
|
+
if (token === "--model" || token === "--request-file") {
|
|
104946
|
+
const value = argv[i + 1];
|
|
104947
|
+
if (values.has(token) || value === undefined || value === "" || value.startsWith("-")) {
|
|
104948
|
+
return { ok: false };
|
|
104949
|
+
}
|
|
104950
|
+
values.set(token, value);
|
|
104951
|
+
i++;
|
|
104952
|
+
} else if (token === "--raw" || token === "--json") {
|
|
104953
|
+
if (switches.has(token))
|
|
104954
|
+
return { ok: false };
|
|
104955
|
+
switches.add(token);
|
|
104956
|
+
} else if (token.startsWith("-")) {
|
|
104957
|
+
return { ok: false };
|
|
104958
|
+
} else {
|
|
104959
|
+
positionals.push(token);
|
|
104960
|
+
}
|
|
104961
|
+
}
|
|
104962
|
+
const model = values.get("--model");
|
|
104963
|
+
const requestFile = values.get("--request-file");
|
|
104964
|
+
if (positionals.length !== 2 || positionals[0] !== "probe" || positionals[1] !== "antigravity" || switches.size !== 2 || model === undefined || requestFile === undefined) {
|
|
104965
|
+
return { ok: false };
|
|
104966
|
+
}
|
|
104967
|
+
return { ok: true, provider: "antigravity", model, requestFile };
|
|
104968
|
+
}
|
|
104969
|
+
function failureOf4(cls, code, httpStatus) {
|
|
104970
|
+
return failureOf2(cls, code, httpStatus);
|
|
104971
|
+
}
|
|
104972
|
+
function buildEnvelope2(facts, failure, body) {
|
|
104973
|
+
return {
|
|
104974
|
+
schema: SUBSCRIPTION_PROBE_SCHEMA,
|
|
104975
|
+
...facts.provider !== undefined ? { provider: facts.provider } : {},
|
|
104976
|
+
claudishVersion: VERSION,
|
|
104977
|
+
...facts.model !== undefined ? { model: facts.model } : {},
|
|
104978
|
+
...facts.fetchedAt !== undefined ? { fetchedAt: facts.fetchedAt } : {},
|
|
104979
|
+
...facts.sourceUrl !== undefined ? { sourceUrl: facts.sourceUrl } : {},
|
|
104980
|
+
...facts.clientVersion !== undefined ? { clientVersion: facts.clientVersion } : {},
|
|
104981
|
+
...facts.clientVersionSource !== undefined ? { clientVersionSource: facts.clientVersionSource } : {},
|
|
104982
|
+
tokenRefreshed: facts.tokenRefreshed,
|
|
104983
|
+
...facts.httpStatus !== undefined ? { httpStatus: facts.httpStatus } : {},
|
|
104984
|
+
...failure ? { failure } : {},
|
|
104985
|
+
...body ? { bodyRedacted: body.redacted, body: body.text } : {}
|
|
104986
|
+
};
|
|
104987
|
+
}
|
|
104988
|
+
function fail2(facts, failure) {
|
|
104989
|
+
return { envelope: buildEnvelope2(facts, failure), exitCode: probeExitCodeFor(failure) };
|
|
104990
|
+
}
|
|
104991
|
+
function lineOf2(envelope) {
|
|
104992
|
+
return `${JSON.stringify(envelope)}
|
|
104993
|
+
`;
|
|
104994
|
+
}
|
|
104995
|
+
function safeStderr2(deps, line) {
|
|
104996
|
+
try {
|
|
104997
|
+
deps.writeStderr(line);
|
|
104998
|
+
} catch {}
|
|
104999
|
+
}
|
|
105000
|
+
async function writeInternalFailure2(deps, facts, code, stderrLine, secrets) {
|
|
105001
|
+
const failure = failureOf4("internal", code);
|
|
105002
|
+
safeStderr2(deps, `${stderrLine}
|
|
105003
|
+
`);
|
|
105004
|
+
let line = lineOf2(buildEnvelope2(facts, failure));
|
|
105005
|
+
if (secrets && containsSecret(secrets, line)) {
|
|
105006
|
+
line = lineOf2(buildEnvelope2({ tokenRefreshed: facts.tokenRefreshed }, failure));
|
|
105007
|
+
}
|
|
105008
|
+
try {
|
|
105009
|
+
await deps.writeStdout(line);
|
|
105010
|
+
} catch {}
|
|
105011
|
+
return probeExitCodeFor(failure);
|
|
105012
|
+
}
|
|
105013
|
+
function redactSecretValues(text, secrets) {
|
|
105014
|
+
let out = text;
|
|
105015
|
+
const values = [...secrets.values].sort((a, b) => b.length - a.length);
|
|
105016
|
+
for (const value of values) {
|
|
105017
|
+
for (const form of new Set([value, value.replaceAll("/", "\\/")])) {
|
|
105018
|
+
if (out.includes(form))
|
|
105019
|
+
out = out.replaceAll(form, REDACTED2);
|
|
105020
|
+
}
|
|
105021
|
+
}
|
|
105022
|
+
return { text: out, redacted: out !== text };
|
|
105023
|
+
}
|
|
105024
|
+
function jsonUnescapedForms(text) {
|
|
105025
|
+
const forms = [];
|
|
105026
|
+
if (text === undefined)
|
|
105027
|
+
return { forms, complete: true };
|
|
105028
|
+
let current = text;
|
|
105029
|
+
for (let round = 0;round < MAX_UNESCAPE_ROUNDS; round++) {
|
|
105030
|
+
const next = current.replace(JSON_ESCAPE, (_match, hex, letter) => hex !== undefined ? String.fromCharCode(Number.parseInt(hex, 16)) : SIMPLE_ESCAPES[letter]);
|
|
105031
|
+
if (next === current)
|
|
105032
|
+
return { forms, complete: true };
|
|
105033
|
+
forms.push(next);
|
|
105034
|
+
current = next;
|
|
105035
|
+
}
|
|
105036
|
+
return { forms, complete: false };
|
|
105037
|
+
}
|
|
105038
|
+
async function readRequest(deps, path) {
|
|
105039
|
+
let text;
|
|
105040
|
+
try {
|
|
105041
|
+
text = await deps.readRequestFile(path);
|
|
105042
|
+
} catch {
|
|
105043
|
+
return { ok: false, code: "request_file_unreadable" };
|
|
105044
|
+
}
|
|
105045
|
+
if (text === null)
|
|
105046
|
+
return { ok: false, code: "request_file_invalid" };
|
|
105047
|
+
let value;
|
|
105048
|
+
try {
|
|
105049
|
+
value = JSON.parse(text);
|
|
105050
|
+
} catch {
|
|
105051
|
+
return { ok: false, code: "request_file_invalid" };
|
|
105052
|
+
}
|
|
105053
|
+
if (value === null || typeof value !== "object" || Array.isArray(value)) {
|
|
105054
|
+
return { ok: false, code: "request_file_invalid" };
|
|
105055
|
+
}
|
|
105056
|
+
return { ok: true, text };
|
|
105057
|
+
}
|
|
105058
|
+
function buildProbeEnvelopeBody(model, projectId, tierId, requestText, userPromptId = randomUUID10()) {
|
|
105059
|
+
const head = JSON.stringify({ model, project: projectId, user_prompt_id: userPromptId });
|
|
105060
|
+
const credits = tierId && tierId !== "free-tier" ? `,"enabled_credit_types":${JSON.stringify(["GOOGLE_ONE_AI"])}` : "";
|
|
105061
|
+
return `${head.slice(0, -1)},"request":${requestText}${credits}}`;
|
|
105062
|
+
}
|
|
105063
|
+
function createActivityRequestId3() {
|
|
105064
|
+
return Math.random().toString(36).substring(7);
|
|
105065
|
+
}
|
|
105066
|
+
async function readCapped(res, cap) {
|
|
105067
|
+
if (!res.body)
|
|
105068
|
+
return "";
|
|
105069
|
+
const reader = res.body.getReader();
|
|
105070
|
+
const chunks = [];
|
|
105071
|
+
let size = 0;
|
|
105072
|
+
for (;; ) {
|
|
105073
|
+
const { done, value } = await reader.read();
|
|
105074
|
+
if (done)
|
|
105075
|
+
break;
|
|
105076
|
+
size += value.byteLength;
|
|
105077
|
+
if (size > cap) {
|
|
105078
|
+
await reader.cancel().catch(() => {});
|
|
105079
|
+
return null;
|
|
105080
|
+
}
|
|
105081
|
+
chunks.push(value);
|
|
105082
|
+
}
|
|
105083
|
+
return Buffer.concat(chunks).toString("utf8");
|
|
105084
|
+
}
|
|
105085
|
+
async function determine2(deps, secrets, facts, args) {
|
|
105086
|
+
const request = await readRequest(deps, args.requestFile);
|
|
105087
|
+
if (!request.ok)
|
|
105088
|
+
return fail2(facts, failureOf4("internal", request.code));
|
|
105089
|
+
const session = await establishAntigravitySession(deps, secrets, facts);
|
|
105090
|
+
if (!session.ok)
|
|
105091
|
+
return fail2(facts, session.failure);
|
|
105092
|
+
const url = `${antigravityHost()}/v1internal:generateContent`;
|
|
105093
|
+
const version = resolveAntigravityClientVersion();
|
|
105094
|
+
facts.sourceUrl = stripUserinfo(url);
|
|
105095
|
+
facts.clientVersion = version.version;
|
|
105096
|
+
facts.clientVersionSource = version.source;
|
|
105097
|
+
const controller = new AbortController;
|
|
105098
|
+
const timer = setTimeout(() => controller.abort(), deps.requestTimeoutMs);
|
|
105099
|
+
const networkFailure = () => failureOf4("network", controller.signal.aborted ? "generate_content_timeout" : "generate_content_network_error", facts.httpStatus);
|
|
105100
|
+
try {
|
|
105101
|
+
let res;
|
|
105102
|
+
try {
|
|
105103
|
+
res = await fetch(url, {
|
|
105104
|
+
method: "POST",
|
|
105105
|
+
headers: {
|
|
105106
|
+
Authorization: `Bearer ${session.accessToken}`,
|
|
105107
|
+
"Content-Type": "application/json",
|
|
105108
|
+
"User-Agent": antigravityUserAgentFor(version.version),
|
|
105109
|
+
"x-activity-request-id": createActivityRequestId3()
|
|
105110
|
+
},
|
|
105111
|
+
body: buildProbeEnvelopeBody(args.model, session.projectId, session.tierId, request.text),
|
|
105112
|
+
signal: controller.signal,
|
|
105113
|
+
redirect: "manual"
|
|
105114
|
+
});
|
|
105115
|
+
} catch {
|
|
105116
|
+
return fail2(facts, networkFailure());
|
|
105117
|
+
}
|
|
105118
|
+
facts.fetchedAt = new Date(deps.now()).toISOString();
|
|
105119
|
+
facts.httpStatus = res.status;
|
|
105120
|
+
let text;
|
|
105121
|
+
try {
|
|
105122
|
+
text = await readCapped(res, PROBE_BODY_CAP_BYTES);
|
|
105123
|
+
} catch {
|
|
105124
|
+
return fail2(facts, networkFailure());
|
|
105125
|
+
}
|
|
105126
|
+
if (text === null)
|
|
105127
|
+
return fail2(facts, failureOf4("list_incomplete", "body_too_large", res.status));
|
|
105128
|
+
if (res.ok) {
|
|
105129
|
+
try {
|
|
105130
|
+
JSON.parse(text);
|
|
105131
|
+
} catch {
|
|
105132
|
+
return fail2(facts, failureOf4("list_incomplete", "body_not_json", res.status));
|
|
105133
|
+
}
|
|
105134
|
+
}
|
|
105135
|
+
const body = redactSecretValues(text, secrets);
|
|
105136
|
+
const unescaped = jsonUnescapedForms(body.text);
|
|
105137
|
+
if (!unescaped.complete) {
|
|
105138
|
+
return fail2(facts, failureOf4("list_incomplete", "body_unverifiable", res.status));
|
|
105139
|
+
}
|
|
105140
|
+
return {
|
|
105141
|
+
envelope: buildEnvelope2(facts, undefined, body),
|
|
105142
|
+
exitCode: PROBE_EXIT.ok,
|
|
105143
|
+
bodyText: body.text,
|
|
105144
|
+
bodyForms: unescaped.forms
|
|
105145
|
+
};
|
|
105146
|
+
} finally {
|
|
105147
|
+
clearTimeout(timer);
|
|
105148
|
+
}
|
|
105149
|
+
}
|
|
105150
|
+
async function runAntigravityProbe(deps, args) {
|
|
105151
|
+
const secrets = newSecrets();
|
|
105152
|
+
const facts = { provider: "antigravity", model: args.model, tokenRefreshed: false };
|
|
105153
|
+
let result;
|
|
105154
|
+
try {
|
|
105155
|
+
result = await determine2(deps, secrets, facts, args);
|
|
105156
|
+
} catch {
|
|
105157
|
+
return writeInternalFailure2(deps, { provider: facts.provider, model: facts.model, tokenRefreshed: facts.tokenRefreshed }, "internal_error", INTERNAL_ERROR_MESSAGE2, secrets);
|
|
105158
|
+
}
|
|
105159
|
+
if (result.envelope.failure?.code === "request_file_unreadable" || result.envelope.failure?.code === "request_file_invalid") {
|
|
105160
|
+
safeStderr2(deps, `${PROBE_REQUEST_FILE_MESSAGE}
|
|
105161
|
+
`);
|
|
105162
|
+
}
|
|
105163
|
+
const line = lineOf2(result.envelope);
|
|
105164
|
+
if (containsSecret(secrets, line, result.bodyText, ...result.bodyForms ?? [])) {
|
|
105165
|
+
return writeInternalFailure2(deps, facts, "secret_guard", SECRET_GUARD_MESSAGE2, secrets);
|
|
105166
|
+
}
|
|
105167
|
+
try {
|
|
105168
|
+
await deps.writeStdout(line);
|
|
105169
|
+
} catch {
|
|
105170
|
+
safeStderr2(deps, `${INTERNAL_ERROR_MESSAGE2}
|
|
105171
|
+
`);
|
|
105172
|
+
return PROBE_EXIT.internal;
|
|
105173
|
+
}
|
|
105174
|
+
return result.exitCode;
|
|
105175
|
+
}
|
|
105176
|
+
async function reportProbeInternalError(deps) {
|
|
105177
|
+
let resolved;
|
|
105178
|
+
try {
|
|
105179
|
+
resolved = deps ?? defaultSubscriptionProbeDeps();
|
|
105180
|
+
} catch {
|
|
105181
|
+
process.stderr.write(`${INTERNAL_ERROR_MESSAGE2}
|
|
105182
|
+
`);
|
|
105183
|
+
return PROBE_EXIT.internal;
|
|
105184
|
+
}
|
|
105185
|
+
return writeInternalFailure2(resolved, { tokenRefreshed: false }, "internal_error", INTERNAL_ERROR_MESSAGE2);
|
|
105186
|
+
}
|
|
105187
|
+
async function subscriptionProbeCommand(argv, deps = defaultSubscriptionProbeDeps()) {
|
|
105188
|
+
const args = parseSubscriptionProbeArgs(argv);
|
|
105189
|
+
if (!args.ok) {
|
|
105190
|
+
return writeInternalFailure2(deps, { tokenRefreshed: false }, "usage", SUBSCRIPTION_PROBE_USAGE);
|
|
105191
|
+
}
|
|
105192
|
+
return runAntigravityProbe(deps, args);
|
|
105193
|
+
}
|
|
105194
|
+
var PROBE_FAILURE_CODES, PROBE_EXIT, CALLER_CODES, PROBE_BODY_CAP_BYTES, PROBE_REQUEST_FILE_CAP_BYTES, REDACTED2 = "[REDACTED]", SUBSCRIPTION_PROBE_USAGE = "usage: claudish subscription probe antigravity --model <wire-model-id> --request-file <path> --raw --json", PROBE_REQUEST_FILE_MESSAGE = "[claudish subscription] the request file must hold one JSON object (the inner Gemini request)", SECRET_GUARD_MESSAGE2 = "[claudish subscription] refused: output contained a credential value", INTERNAL_ERROR_MESSAGE2 = "[claudish subscription] internal error", JSON_ESCAPE, SIMPLE_ESCAPES, MAX_UNESCAPE_ROUNDS = 64;
|
|
105195
|
+
var init_subscription_probe_command = __esm(() => {
|
|
105196
|
+
init_antigravity_token();
|
|
105197
|
+
init_antigravity_user();
|
|
105198
|
+
init_subscription_antigravity_session();
|
|
105199
|
+
init_subscription_dispatch();
|
|
105200
|
+
init_subscription_dispatch();
|
|
105201
|
+
PROBE_FAILURE_CODES = {
|
|
105202
|
+
credential_missing: SESSION_FAILURE_CODES.credential_missing,
|
|
105203
|
+
keychain_locked: SESSION_FAILURE_CODES.keychain_locked,
|
|
105204
|
+
mint_failed: SESSION_FAILURE_CODES.mint_failed,
|
|
105205
|
+
network: [
|
|
105206
|
+
...SESSION_FAILURE_CODES.network,
|
|
105207
|
+
"generate_content_network_error",
|
|
105208
|
+
"generate_content_timeout"
|
|
105209
|
+
],
|
|
105210
|
+
list_incomplete: ["body_too_large", "body_not_json", "body_unverifiable"],
|
|
105211
|
+
internal: [
|
|
105212
|
+
"usage",
|
|
105213
|
+
"request_file_unreadable",
|
|
105214
|
+
"request_file_invalid",
|
|
105215
|
+
"secret_guard",
|
|
105216
|
+
"internal_error"
|
|
105217
|
+
]
|
|
105218
|
+
};
|
|
105219
|
+
PROBE_EXIT = {
|
|
105220
|
+
ok: 0,
|
|
105221
|
+
internal: 1,
|
|
105222
|
+
usage: 2,
|
|
105223
|
+
credential_missing: 3,
|
|
105224
|
+
keychain_locked: 4,
|
|
105225
|
+
mint_failed: 5,
|
|
105226
|
+
network: 6,
|
|
105227
|
+
list_incomplete: 7
|
|
105228
|
+
};
|
|
105229
|
+
CALLER_CODES = [
|
|
105230
|
+
"usage",
|
|
105231
|
+
"request_file_unreadable",
|
|
105232
|
+
"request_file_invalid"
|
|
105233
|
+
];
|
|
105234
|
+
PROBE_BODY_CAP_BYTES = 512 * 1024;
|
|
105235
|
+
PROBE_REQUEST_FILE_CAP_BYTES = 8 * 1024 * 1024;
|
|
105236
|
+
JSON_ESCAPE = /\\(?:u([0-9a-fA-F]{4})|(["\\/bfnrt]))/g;
|
|
105237
|
+
SIMPLE_ESCAPES = {
|
|
105238
|
+
'"': '"',
|
|
105239
|
+
"\\": "\\",
|
|
105240
|
+
"/": "/",
|
|
105241
|
+
b: "\b",
|
|
105242
|
+
f: "\f",
|
|
105243
|
+
n: `
|
|
105244
|
+
`,
|
|
105245
|
+
r: "\r",
|
|
105246
|
+
t: "\t"
|
|
105247
|
+
};
|
|
104815
105248
|
});
|
|
104816
105249
|
|
|
104817
105250
|
// src/account-forecast-render.ts
|
|
@@ -115079,7 +115512,7 @@ var init_terminal_isolation = __esm(() => {
|
|
|
115079
115512
|
|
|
115080
115513
|
// src/claude-runner.ts
|
|
115081
115514
|
import { spawn as spawn4, spawnSync as spawnSync4 } from "child_process";
|
|
115082
|
-
import { randomUUID as
|
|
115515
|
+
import { randomUUID as randomUUID11 } from "crypto";
|
|
115083
115516
|
import {
|
|
115084
115517
|
chmodSync as chmodSync5,
|
|
115085
115518
|
closeSync as closeSync14,
|
|
@@ -116013,7 +116446,7 @@ Or set CLAUDE_PATH to your custom installation:`);
|
|
|
116013
116446
|
const sessionFlags = sessionFlagsOf(config.claudeArgs);
|
|
116014
116447
|
let driverLaunch = null;
|
|
116015
116448
|
if (surfaces.driver) {
|
|
116016
|
-
const minted = sessionFlags.sessionId || sessionFlags.resumes ? null :
|
|
116449
|
+
const minted = sessionFlags.sessionId || sessionFlags.resumes ? null : randomUUID11();
|
|
116017
116450
|
const turnDir = mkdtempSync4(join63(tmpdir3(), "claudish-turns-"));
|
|
116018
116451
|
chmodSync5(turnDir, 448);
|
|
116019
116452
|
claudeArgs.unshift(...driverLeadingArgs({ mintedSessionId: minted, turnDir }));
|
|
@@ -119200,12 +119633,25 @@ if (isMcpMode) {
|
|
|
119200
119633
|
}));
|
|
119201
119634
|
} else if (isSubscriptionCommand) {
|
|
119202
119635
|
const subscriptionArgIndex = args.indexOf("subscription");
|
|
119636
|
+
const subscriptionArgv = args.slice(subscriptionArgIndex + 1);
|
|
119203
119637
|
const subscriptionModule = () => Promise.resolve().then(() => (init_subscription_models_command(), exports_subscription_models_command));
|
|
119204
|
-
|
|
119638
|
+
const probeModule = () => Promise.resolve().then(() => (init_subscription_probe_command(), exports_subscription_probe_command));
|
|
119639
|
+
const writeLine = (line, code) => new Promise((resolve) => {
|
|
119640
|
+
process.stdout.write(line, () => resolve(code));
|
|
119641
|
+
});
|
|
119642
|
+
Promise.resolve().then(() => (init_subscription_dispatch(), {})).then((dispatch) => {
|
|
119643
|
+
const probe = isSubscriptionProbeArgv(subscriptionArgv);
|
|
119644
|
+
const run = probe ? probeModule().then((m) => m.subscriptionProbeCommand(subscriptionArgv)) : subscriptionModule().then((m) => m.subscriptionModelsCommand(subscriptionArgv));
|
|
119645
|
+
return run.catch(() => probe ? probeModule().then((m) => m.reportProbeInternalError()).catch(() => {
|
|
119646
|
+
process.stderr.write(`[claudish subscription] internal error
|
|
119647
|
+
`);
|
|
119648
|
+
return writeLine(probeLoadFailureLine(), 1);
|
|
119649
|
+
}) : subscriptionModule().then((m) => m.reportSubscriptionInternalError()));
|
|
119650
|
+
}).catch(() => {
|
|
119205
119651
|
process.stderr.write(`[claudish subscription] internal error
|
|
119206
119652
|
`);
|
|
119207
119653
|
return 1;
|
|
119208
|
-
})
|
|
119654
|
+
}).then((code) => process.exit(code));
|
|
119209
119655
|
} else if (isAccountCommand) {
|
|
119210
119656
|
const accountArgIndex = args.indexOf("account");
|
|
119211
119657
|
Promise.resolve().then(() => (init_account_command(), {})).then((m) => accountCommand(args.slice(accountArgIndex + 1)).catch((e) => {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "claudish",
|
|
3
|
-
"version": "14.
|
|
3
|
+
"version": "14.11.0",
|
|
4
4
|
"description": "Run Claude Code with any model - OpenRouter, Ollama, LM Studio & local models",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -71,10 +71,10 @@
|
|
|
71
71
|
"ai"
|
|
72
72
|
],
|
|
73
73
|
"optionalDependencies": {
|
|
74
|
-
"@claudish/magmux-darwin-arm64": "14.
|
|
75
|
-
"@claudish/magmux-darwin-x64": "14.
|
|
76
|
-
"@claudish/magmux-linux-arm64": "14.
|
|
77
|
-
"@claudish/magmux-linux-x64": "14.
|
|
74
|
+
"@claudish/magmux-darwin-arm64": "14.11.0",
|
|
75
|
+
"@claudish/magmux-darwin-x64": "14.11.0",
|
|
76
|
+
"@claudish/magmux-linux-arm64": "14.11.0",
|
|
77
|
+
"@claudish/magmux-linux-x64": "14.11.0"
|
|
78
78
|
},
|
|
79
79
|
"author": "Jack Rudenko <i@madappgang.com>",
|
|
80
80
|
"license": "MIT",
|