@botiverse/oar 0.0.4 → 0.0.5
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 +15 -4
- package/dist/contracts/account-usage.d.ts +1 -0
- package/dist/contracts/account-usage.d.ts.map +1 -1
- package/dist/contracts/model-catalog.d.ts +51 -0
- package/dist/contracts/model-catalog.d.ts.map +1 -0
- package/dist/contracts/model-catalog.js +9 -0
- package/dist/contracts/model-catalog.js.map +1 -0
- package/dist/contracts/provider-auth.d.ts +77 -0
- package/dist/contracts/provider-auth.d.ts.map +1 -0
- package/dist/contracts/provider-auth.js +9 -0
- package/dist/contracts/provider-auth.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17 -1
- package/dist/index.js.map +1 -1
- package/dist/runtimes/claude/account-usage.d.ts +3 -1
- package/dist/runtimes/claude/account-usage.d.ts.map +1 -1
- package/dist/runtimes/claude/account-usage.js +26 -5
- package/dist/runtimes/claude/account-usage.js.map +1 -1
- package/dist/runtimes/codex/account-usage.d.ts +21 -0
- package/dist/runtimes/codex/account-usage.d.ts.map +1 -1
- package/dist/runtimes/codex/account-usage.js +27 -10
- package/dist/runtimes/codex/account-usage.js.map +1 -1
- package/dist/runtimes/grok/account-usage.d.ts +6 -0
- package/dist/runtimes/grok/account-usage.d.ts.map +1 -0
- package/dist/runtimes/grok/account-usage.js +142 -0
- package/dist/runtimes/grok/account-usage.js.map +1 -0
- package/dist/runtimes/grok/index.d.ts +9 -0
- package/dist/runtimes/grok/index.d.ts.map +1 -0
- package/dist/runtimes/grok/index.js +13 -0
- package/dist/runtimes/grok/index.js.map +1 -0
- package/dist/runtimes/grok/installation.d.ts +4 -0
- package/dist/runtimes/grok/installation.d.ts.map +1 -0
- package/dist/runtimes/grok/installation.js +19 -0
- package/dist/runtimes/grok/installation.js.map +1 -0
- package/dist/runtimes/grok/session.d.ts +10 -0
- package/dist/runtimes/grok/session.d.ts.map +1 -0
- package/dist/runtimes/grok/session.js +66 -0
- package/dist/runtimes/grok/session.js.map +1 -0
- package/dist/runtimes/kimi/account-usage.d.ts +9 -0
- package/dist/runtimes/kimi/account-usage.d.ts.map +1 -0
- package/dist/runtimes/kimi/account-usage.js +241 -0
- package/dist/runtimes/kimi/account-usage.js.map +1 -0
- package/dist/runtimes/kimi/auth-config.d.ts +12 -0
- package/dist/runtimes/kimi/auth-config.d.ts.map +1 -0
- package/dist/runtimes/kimi/auth-config.js +90 -0
- package/dist/runtimes/kimi/auth-config.js.map +1 -0
- package/dist/runtimes/kimi/index.d.ts +9 -0
- package/dist/runtimes/kimi/index.d.ts.map +1 -0
- package/dist/runtimes/kimi/index.js +13 -0
- package/dist/runtimes/kimi/index.js.map +1 -0
- package/dist/runtimes/kimi/installation.d.ts +4 -0
- package/dist/runtimes/kimi/installation.d.ts.map +1 -0
- package/dist/runtimes/kimi/installation.js +18 -0
- package/dist/runtimes/kimi/installation.js.map +1 -0
- package/dist/runtimes/kimi/oauth-token.d.ts +12 -0
- package/dist/runtimes/kimi/oauth-token.d.ts.map +1 -0
- package/dist/runtimes/kimi/oauth-token.js +38 -0
- package/dist/runtimes/kimi/oauth-token.js.map +1 -0
- package/dist/runtimes/kimi/session.d.ts +7 -0
- package/dist/runtimes/kimi/session.d.ts.map +1 -0
- package/dist/runtimes/kimi/session.js +39 -0
- package/dist/runtimes/kimi/session.js.map +1 -0
- package/dist/runtimes/pi/auth.d.ts +16 -0
- package/dist/runtimes/pi/auth.d.ts.map +1 -0
- package/dist/runtimes/pi/auth.js +124 -0
- package/dist/runtimes/pi/auth.js.map +1 -0
- package/dist/runtimes/pi/catalog.d.ts +10 -0
- package/dist/runtimes/pi/catalog.d.ts.map +1 -0
- package/dist/runtimes/pi/catalog.js +66 -0
- package/dist/runtimes/pi/catalog.js.map +1 -0
- package/dist/shared/acp/errors.d.ts +16 -0
- package/dist/shared/acp/errors.d.ts.map +1 -0
- package/dist/shared/acp/errors.js +25 -0
- package/dist/shared/acp/errors.js.map +1 -0
- package/dist/shared/acp/process.d.ts +24 -0
- package/dist/shared/acp/process.d.ts.map +1 -0
- package/dist/shared/acp/process.js +88 -0
- package/dist/shared/acp/process.js.map +1 -0
- package/dist/shared/acp/profile.d.ts +36 -0
- package/dist/shared/acp/profile.d.ts.map +1 -0
- package/dist/shared/acp/profile.js +104 -0
- package/dist/shared/acp/profile.js.map +1 -0
- package/dist/shared/acp/projection.d.ts +21 -0
- package/dist/shared/acp/projection.d.ts.map +1 -0
- package/dist/shared/acp/projection.js +160 -0
- package/dist/shared/acp/projection.js.map +1 -0
- package/dist/shared/acp/session.d.ts +5 -0
- package/dist/shared/acp/session.d.ts.map +1 -0
- package/dist/shared/acp/session.js +254 -0
- package/dist/shared/acp/session.js.map +1 -0
- package/dist/shared/acp/terminal.d.ts +17 -0
- package/dist/shared/acp/terminal.d.ts.map +1 -0
- package/dist/shared/acp/terminal.js +193 -0
- package/dist/shared/acp/terminal.js.map +1 -0
- package/dist/shared/executable/index.d.ts +0 -1
- package/dist/shared/executable/index.d.ts.map +1 -1
- package/dist/shared/executable/index.js.map +1 -1
- package/dist/shared/executable/process.d.ts +16 -15
- package/dist/shared/executable/process.d.ts.map +1 -1
- package/dist/shared/executable/process.js +46 -32
- package/dist/shared/executable/process.js.map +1 -1
- package/dist/shared/executable/resolve.d.ts +2 -15
- package/dist/shared/executable/resolve.d.ts.map +1 -1
- package/dist/shared/executable/resolve.js +4 -61
- package/dist/shared/executable/resolve.js.map +1 -1
- package/dist/shared/executable/version.d.ts +1 -1
- package/dist/shared/executable/version.d.ts.map +1 -1
- package/dist/shared/executable/version.js +2 -2
- package/dist/shared/executable/version.js.map +1 -1
- package/dist/shared/installation.d.ts +6 -1
- package/dist/shared/installation.d.ts.map +1 -1
- package/dist/shared/installation.js +11 -9
- package/dist/shared/installation.js.map +1 -1
- package/package.json +6 -3
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/* oxlint-disable typescript/promise-function-async -- Deadline callbacks deliberately return the SDK's native promises. */
|
|
2
|
+
import { client as createClient, methods, PROTOCOL_VERSION, RequestError, } from "@agentclientprotocol/sdk";
|
|
3
|
+
import { startAcpProcess, withAcpDeadline } from "../../shared/acp/process.js";
|
|
4
|
+
import { utcInstantFromDate } from "../../shared/instant.js";
|
|
5
|
+
import { asNumber, asRecord } from "../../shared/json.js";
|
|
6
|
+
import { grokInitializeMeta, selectGrokAuthMethod } from "./session.js";
|
|
7
|
+
function centValue(value) {
|
|
8
|
+
return asNumber(asRecord(value)?.val);
|
|
9
|
+
}
|
|
10
|
+
function resetInstant(value) {
|
|
11
|
+
if (typeof value !== "string") {
|
|
12
|
+
return undefined;
|
|
13
|
+
}
|
|
14
|
+
return utcInstantFromDate(new Date(value)) ?? undefined;
|
|
15
|
+
}
|
|
16
|
+
function periodLabel(value) {
|
|
17
|
+
if (typeof value !== "string") {
|
|
18
|
+
return "Included usage";
|
|
19
|
+
}
|
|
20
|
+
const normalized = value.replace(/^USAGE_PERIOD_TYPE_/u, "").toLowerCase();
|
|
21
|
+
return `${normalized.charAt(0).toUpperCase()}${normalized.slice(1)} included usage`;
|
|
22
|
+
}
|
|
23
|
+
/** Extract identity only from Grok's authenticated `_x.ai/auth/info` result. */
|
|
24
|
+
export function grokAccountEmail(result) {
|
|
25
|
+
const email = asRecord(result)?.email;
|
|
26
|
+
if (typeof email !== "string") {
|
|
27
|
+
return undefined;
|
|
28
|
+
}
|
|
29
|
+
const trimmed = email.trim();
|
|
30
|
+
return trimmed.length > 0 ? trimmed : undefined;
|
|
31
|
+
}
|
|
32
|
+
export function projectGrokUsage(result, email) {
|
|
33
|
+
const root = asRecord(result);
|
|
34
|
+
const config = asRecord(root?.config);
|
|
35
|
+
if (config === null) {
|
|
36
|
+
return { kind: "unsupported" };
|
|
37
|
+
}
|
|
38
|
+
const explicitPercent = asNumber(config.creditUsagePercent);
|
|
39
|
+
const used = centValue(config.used);
|
|
40
|
+
const limit = centValue(config.monthlyLimit);
|
|
41
|
+
const usedPercent = explicitPercent
|
|
42
|
+
?? (used !== null && limit !== null && limit > 0 ? (used / limit) * 100 : null);
|
|
43
|
+
if (usedPercent === null || usedPercent < 0) {
|
|
44
|
+
throw new Error("Grok returned no usable account usage percentage");
|
|
45
|
+
}
|
|
46
|
+
const period = asRecord(config.currentPeriod);
|
|
47
|
+
const resetsAt = resetInstant(period?.end ?? config.billingPeriodEnd);
|
|
48
|
+
const prepaidBalance = Math.abs(centValue(config.prepaidBalance) ?? 0);
|
|
49
|
+
const onDemandCap = centValue(config.onDemandCap) ?? 0;
|
|
50
|
+
const legacyOnDemandUsed = used !== null && limit !== null ? Math.max(0, used - limit) : 0;
|
|
51
|
+
const onDemandUsed = centValue(config.onDemandUsed) ?? legacyOnDemandUsed;
|
|
52
|
+
const onDemandRatio = onDemandCap > 0
|
|
53
|
+
? Math.max(0, Math.min(1, onDemandUsed / onDemandCap))
|
|
54
|
+
: null;
|
|
55
|
+
const windows = [{
|
|
56
|
+
label: periodLabel(period?.type),
|
|
57
|
+
usedRatio: Number(Math.min(1, usedPercent / 100).toFixed(6)),
|
|
58
|
+
...(resetsAt === undefined ? {} : { resetsAt }),
|
|
59
|
+
}, ...(onDemandRatio === null ? [] : [{
|
|
60
|
+
label: "Pay-as-you-go",
|
|
61
|
+
usedRatio: Number(onDemandRatio.toFixed(6)),
|
|
62
|
+
...(resetsAt === undefined ? {} : { resetsAt }),
|
|
63
|
+
}])];
|
|
64
|
+
// The current ACP extension serializes its Rust top-level field as
|
|
65
|
+
// `subscription_tier`; accept the earlier camel-case spelling as a
|
|
66
|
+
// compatibility fallback. Nested billing config fields remain camel-case.
|
|
67
|
+
const rawPlan = root?.subscription_tier ?? root?.subscriptionTier;
|
|
68
|
+
const plan = typeof rawPlan === "string" && rawPlan.trim().length > 0
|
|
69
|
+
? rawPlan.trim()
|
|
70
|
+
: undefined;
|
|
71
|
+
// Grok's own credit-bar projection treats a positive prepaid balance or an
|
|
72
|
+
// unexhausted on-demand cap as usable headroom after included usage reaches
|
|
73
|
+
// 100%; do not report the account as rate-limited while either remains.
|
|
74
|
+
const rateLimited = usedPercent >= 100
|
|
75
|
+
&& prepaidBalance === 0
|
|
76
|
+
&& (onDemandRatio === null || onDemandRatio >= 1);
|
|
77
|
+
return {
|
|
78
|
+
kind: "available",
|
|
79
|
+
...(plan === undefined ? {} : { plan }),
|
|
80
|
+
...(email === undefined ? {} : { email }),
|
|
81
|
+
rateLimited,
|
|
82
|
+
windows,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
async function readBilling(command, timeoutMs) {
|
|
86
|
+
const runtime = startAcpProcess(command, ["agent", "--always-approve", "--no-leader", "stdio"], createClient({ name: "oar" }), { env: process.env });
|
|
87
|
+
try {
|
|
88
|
+
const initialize = methods.agent.initialize;
|
|
89
|
+
const response = await withAcpDeadline(runtime, initialize, timeoutMs, (requestOptions) => runtime.connection.agent.request(initialize, {
|
|
90
|
+
protocolVersion: PROTOCOL_VERSION,
|
|
91
|
+
clientCapabilities: {
|
|
92
|
+
fs: { readTextFile: false, writeTextFile: false },
|
|
93
|
+
terminal: false,
|
|
94
|
+
},
|
|
95
|
+
clientInfo: { name: "oar", version: "0.0.0" },
|
|
96
|
+
_meta: grokInitializeMeta({ cwd: process.cwd() }),
|
|
97
|
+
}, requestOptions));
|
|
98
|
+
const initialized = asRecord(response) ?? {};
|
|
99
|
+
const method = selectGrokAuthMethod(initialized);
|
|
100
|
+
if (method !== undefined) {
|
|
101
|
+
const authenticate = methods.agent.authenticate;
|
|
102
|
+
await withAcpDeadline(runtime, authenticate, timeoutMs, (requestOptions) => runtime.connection.agent.request(authenticate, { methodId: method }, requestOptions));
|
|
103
|
+
}
|
|
104
|
+
const billing = await withAcpDeadline(runtime, "_x.ai/billing", timeoutMs, (requestOptions) => runtime.connection.agent.request("_x.ai/billing", {}, requestOptions));
|
|
105
|
+
let email = undefined;
|
|
106
|
+
try {
|
|
107
|
+
const authInfo = await withAcpDeadline(runtime, "_x.ai/auth/info", timeoutMs, (requestOptions) => runtime.connection.agent.request("_x.ai/auth/info", {}, requestOptions));
|
|
108
|
+
email = grokAccountEmail(authInfo);
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
// Older Grok builds and transient identity failures must not hide the
|
|
112
|
+
// billing result that was already read successfully.
|
|
113
|
+
email = undefined;
|
|
114
|
+
}
|
|
115
|
+
return { billing, ...(email === undefined ? {} : { email }) };
|
|
116
|
+
}
|
|
117
|
+
finally {
|
|
118
|
+
runtime.kill();
|
|
119
|
+
await runtime.exited;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
export const grokAccountUsage = async (installation, options = {}) => {
|
|
123
|
+
if (installation.via !== "executable") {
|
|
124
|
+
return { kind: "unsupported" };
|
|
125
|
+
}
|
|
126
|
+
try {
|
|
127
|
+
const payload = await readBilling(installation.command, options.timeoutMs ?? 10_000);
|
|
128
|
+
return projectGrokUsage(payload.billing, payload.email);
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
if (error instanceof RequestError) {
|
|
132
|
+
if (error.code === -32_601) {
|
|
133
|
+
return { kind: "unsupported" };
|
|
134
|
+
}
|
|
135
|
+
if (error.code === -32_000 || /auth(?:entication)?|log(?:ged)? ?in/iu.test(error.message)) {
|
|
136
|
+
return { kind: "reauth_required" };
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
throw new Error("Failed to read Grok account usage", { cause: error });
|
|
140
|
+
}
|
|
141
|
+
};
|
|
142
|
+
//# sourceMappingURL=account-usage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"account-usage.js","sourceRoot":"","sources":["../../../src/runtimes/grok/account-usage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare const grokRuntime: {
|
|
2
|
+
readonly id: "grok";
|
|
3
|
+
readonly installation: import("../../index.js").InstallationProbe;
|
|
4
|
+
readonly accountUsage: import("../../index.js").AccountUsageReader;
|
|
5
|
+
readonly session: import("../../index.js").StartSession;
|
|
6
|
+
};
|
|
7
|
+
export { grokAccountEmail, grokAccountUsage, projectGrokUsage } from "./account-usage.js";
|
|
8
|
+
export { grokSession } from "./session.js";
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/runtimes/grok/index.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,WAAW;;;;;CAKtB,CAAC;AAEH,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC1F,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { defineRuntime } from "../../contracts/runtime.js";
|
|
2
|
+
import { grokAccountUsage } from "./account-usage.js";
|
|
3
|
+
import { grokInstallation } from "./installation.js";
|
|
4
|
+
import { grokSession } from "./session.js";
|
|
5
|
+
export const grokRuntime = defineRuntime({
|
|
6
|
+
id: "grok",
|
|
7
|
+
installation: grokInstallation,
|
|
8
|
+
accountUsage: grokAccountUsage,
|
|
9
|
+
session: grokSession,
|
|
10
|
+
});
|
|
11
|
+
export { grokAccountEmail, grokAccountUsage, projectGrokUsage } from "./account-usage.js";
|
|
12
|
+
export { grokSession } from "./session.js";
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/runtimes/grok/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAC;IACvC,EAAE,EAAE,MAAM;IACV,YAAY,EAAE,gBAAgB;IAC9B,YAAY,EAAE,gBAAgB;IAC9B,OAAO,EAAE,WAAW;CACrB,CAAC,CAAC;AAEH,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC1F,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** Official script/npm layouts that can be invisible to GUI-process PATH. */
|
|
2
|
+
export declare function grokInstalledExecutableCandidates(platform?: NodeJS.Platform, home?: string, env?: Readonly<NodeJS.ProcessEnv>): readonly string[];
|
|
3
|
+
export declare const grokInstallation: import("../../index.js").InstallationProbe;
|
|
4
|
+
//# sourceMappingURL=installation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"installation.d.ts","sourceRoot":"","sources":["../../../src/runtimes/grok/installation.ts"],"names":[],"mappings":"AAIA,6EAA6E;AAC7E,wBAAgB,iCAAiC,CAC/C,QAAQ,GAAE,MAAM,CAAC,QAA2B,EAC5C,IAAI,GAAE,MAAkB,EACxB,GAAG,GAAE,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAe,GAC7C,SAAS,MAAM,EAAE,CAYnB;AAED,eAAO,MAAM,gBAAgB,4CAK5B,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { homedir } from "node:os";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { executableInstallation } from "../../shared/installation.js";
|
|
4
|
+
/** Official script/npm layouts that can be invisible to GUI-process PATH. */
|
|
5
|
+
export function grokInstalledExecutableCandidates(platform = process.platform, home = homedir(), env = process.env) {
|
|
6
|
+
const paths = platform === "win32" ? path.win32 : path.posix;
|
|
7
|
+
const executable = platform === "win32" ? "grok.exe" : "grok";
|
|
8
|
+
return [
|
|
9
|
+
...(env.GROK_BIN_DIR === undefined || env.GROK_BIN_DIR === ""
|
|
10
|
+
? []
|
|
11
|
+
: [paths.join(env.GROK_BIN_DIR, executable)]),
|
|
12
|
+
...(env.GROK_HOME === undefined || env.GROK_HOME === ""
|
|
13
|
+
? []
|
|
14
|
+
: [paths.join(env.GROK_HOME, "bin", executable)]),
|
|
15
|
+
paths.join(home, ".grok", "bin", executable),
|
|
16
|
+
];
|
|
17
|
+
}
|
|
18
|
+
export const grokInstallation = executableInstallation("OAR_GROK_BIN", "grok", grokInstalledExecutableCandidates, ["agent", "stdio", "--help"]);
|
|
19
|
+
//# sourceMappingURL=installation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"installation.js","sourceRoot":"","sources":["../../../src/runtimes/grok/installation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAEtE,6EAA6E;AAC7E,MAAM,UAAU,iCAAiC,CAC/C,WAA4B,OAAO,CAAC,QAAQ,EAC5C,OAAe,OAAO,EAAE,EACxB,MAAmC,OAAO,CAAC,GAAG;IAE9C,MAAM,KAAK,GAAG,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;IAC7D,MAAM,UAAU,GAAG,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC;IAC9D,OAAO;QACL,GAAG,CAAC,GAAG,CAAC,YAAY,KAAK,SAAS,IAAI,GAAG,CAAC,YAAY,KAAK,EAAE;YAC3D,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC;QAC/C,GAAG,CAAC,GAAG,CAAC,SAAS,KAAK,SAAS,IAAI,GAAG,CAAC,SAAS,KAAK,EAAE;YACrD,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;QACnD,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC;KAC7C,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,sBAAsB,CACpD,cAAc,EACd,MAAM,EACN,iCAAiC,EACjC,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,CAC7B,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ContextUsage, SessionOptions } from "../../contracts/session.js";
|
|
2
|
+
import { type AcpSessionProfile } from "../../shared/acp/session.js";
|
|
3
|
+
import { type JsonRecord } from "../../shared/json.js";
|
|
4
|
+
export declare function selectGrokAuthMethod(initialized: JsonRecord): string | undefined;
|
|
5
|
+
export declare function grokInitializeMeta(options: SessionOptions): JsonRecord;
|
|
6
|
+
/** Grok prompt responses carry an authoritative usage snapshot in `_meta`. */
|
|
7
|
+
export declare function grokContextUsage(response: JsonRecord): ContextUsage | null;
|
|
8
|
+
export declare const grokAcpProfile: AcpSessionProfile;
|
|
9
|
+
export declare const grokSession: import("../../contracts/session.js").StartSession;
|
|
10
|
+
//# sourceMappingURL=session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../src/runtimes/grok/session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC/E,OAAO,EAAc,KAAK,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACjF,OAAO,EAAsB,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAS3E,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,UAAU,GAAG,MAAM,GAAG,SAAS,CAQhF;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,cAAc,GAAG,UAAU,CAYtE;AAYD,8EAA8E;AAC9E,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,UAAU,GAAG,YAAY,GAAG,IAAI,CAc1E;AAED,eAAO,MAAM,cAAc,EAAE,iBAQ5B,CAAC;AAEF,eAAO,MAAM,WAAW,mDAA6B,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { acpSession } from "../../shared/acp/session.js";
|
|
2
|
+
import { asNumber, asRecord } from "../../shared/json.js";
|
|
3
|
+
function authMethodIds(initialized) {
|
|
4
|
+
return (Array.isArray(initialized.authMethods) ? initialized.authMethods : [])
|
|
5
|
+
.map((method) => asRecord(method))
|
|
6
|
+
.map((method) => method?.id)
|
|
7
|
+
.filter((id) => typeof id === "string");
|
|
8
|
+
}
|
|
9
|
+
export function selectGrokAuthMethod(initialized) {
|
|
10
|
+
const ids = authMethodIds(initialized);
|
|
11
|
+
// oxlint-disable-next-line eslint/no-underscore-dangle -- `_meta` is the ACP extension envelope.
|
|
12
|
+
const preferred = asRecord(initialized._meta)?.defaultAuthMethodId;
|
|
13
|
+
if (typeof preferred === "string" && ids.includes(preferred)) {
|
|
14
|
+
return preferred;
|
|
15
|
+
}
|
|
16
|
+
return ids.includes("cached_token") ? "cached_token" : undefined;
|
|
17
|
+
}
|
|
18
|
+
export function grokInitializeMeta(options) {
|
|
19
|
+
return {
|
|
20
|
+
clientIdentifier: "oar",
|
|
21
|
+
clientType: "generic",
|
|
22
|
+
startupHints: {
|
|
23
|
+
nonInteractive: true,
|
|
24
|
+
skipGitStatus: true,
|
|
25
|
+
skipProjectLayout: true,
|
|
26
|
+
},
|
|
27
|
+
...(options.systemPrompt === undefined ? {} : { systemPromptOverride: options.systemPrompt }),
|
|
28
|
+
...(options.appendSystemPrompt === undefined ? {} : { rules: options.appendSystemPrompt }),
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
function firstNumber(record, names) {
|
|
32
|
+
for (const name of names) {
|
|
33
|
+
const value = asNumber(record?.[name]);
|
|
34
|
+
if (value !== null) {
|
|
35
|
+
return value;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
/** Grok prompt responses carry an authoritative usage snapshot in `_meta`. */
|
|
41
|
+
export function grokContextUsage(response) {
|
|
42
|
+
// oxlint-disable-next-line eslint/no-underscore-dangle -- `_meta` is the ACP extension envelope.
|
|
43
|
+
const meta = asRecord(response._meta);
|
|
44
|
+
// `meta.totalTokens` is Grok's running context count. `meta.usage` is the
|
|
45
|
+
// whole prompt's multi-call billing ledger and is not context fullness.
|
|
46
|
+
const tokens = firstNumber(meta, ["totalTokens", "contextTokens"]);
|
|
47
|
+
const contextWindow = firstNumber(meta, ["contextWindow", "context_window", "maxContextTokens"]);
|
|
48
|
+
if (tokens === null && contextWindow === null) {
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
const percent = tokens === null || contextWindow === null || contextWindow === 0
|
|
52
|
+
? null
|
|
53
|
+
: Math.round((tokens / contextWindow) * 100);
|
|
54
|
+
return { tokens, contextWindow, percent };
|
|
55
|
+
}
|
|
56
|
+
export const grokAcpProfile = {
|
|
57
|
+
args: ["agent", "--always-approve", "--no-leader", "stdio"],
|
|
58
|
+
terminalShellCommand: true,
|
|
59
|
+
initializeMeta: grokInitializeMeta,
|
|
60
|
+
sessionMeta: () => ({ yoloMode: true }),
|
|
61
|
+
selectAuthMethod: selectGrokAuthMethod,
|
|
62
|
+
steerParams: () => ({ _meta: { sendNow: true } }),
|
|
63
|
+
promptContextUsage: grokContextUsage,
|
|
64
|
+
};
|
|
65
|
+
export const grokSession = acpSession(grokAcpProfile);
|
|
66
|
+
//# sourceMappingURL=session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/runtimes/grok/session.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { AccountUsageReader, AccountUsageSnapshot } from "../../contracts/account-usage.js";
|
|
2
|
+
/** Extract identity only from Kimi's authenticated `/me` profile shape. */
|
|
3
|
+
export declare function kimiAccountEmail(payload: unknown): string | undefined;
|
|
4
|
+
/** Extract the human-readable membership level reported by Kimi's `/me` profile. */
|
|
5
|
+
export declare function kimiAccountPlan(payload: unknown): string | undefined;
|
|
6
|
+
/** Project the same managed quota rows that Kimi Code 0.38.0 renders in `/usage`. */
|
|
7
|
+
export declare function projectKimiUsage(payload: unknown, email?: string, plan?: string): AccountUsageSnapshot;
|
|
8
|
+
export declare const kimiAccountUsage: AccountUsageReader;
|
|
9
|
+
//# sourceMappingURL=account-usage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"account-usage.d.ts","sourceRoot":"","sources":["../../../src/runtimes/kimi/account-usage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,oBAAoB,EAGrB,MAAM,kCAAkC,CAAC;AAoJ1C,2EAA2E;AAC3E,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAGrE;AAED,oFAAoF;AACpF,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAGpE;AAED,qFAAqF;AACrF,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,OAAO,EAChB,KAAK,CAAC,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,MAAM,GACZ,oBAAoB,CA4CtB;AAkDD,eAAO,MAAM,gBAAgB,EAAE,kBAiC9B,CAAC"}
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
import { utcInstantFromDate } from "../../shared/instant.js";
|
|
2
|
+
import { asNumber, asRecord, parseJson } from "../../shared/json.js";
|
|
3
|
+
import { kimiRemainingMs, resolveKimiAuth } from "./auth-config.js";
|
|
4
|
+
import { KimiReauthError, storedKimiAccessToken } from "./oauth-token.js";
|
|
5
|
+
function text(value) {
|
|
6
|
+
if (typeof value !== "string") {
|
|
7
|
+
return undefined;
|
|
8
|
+
}
|
|
9
|
+
const trimmed = value.trim();
|
|
10
|
+
return trimmed.length > 0 ? trimmed : undefined;
|
|
11
|
+
}
|
|
12
|
+
function numeric(value) {
|
|
13
|
+
if (typeof value === "string") {
|
|
14
|
+
const parsed = Number(value);
|
|
15
|
+
return Number.isFinite(parsed) ? Math.trunc(parsed) : null;
|
|
16
|
+
}
|
|
17
|
+
const parsed = asNumber(value);
|
|
18
|
+
return parsed === null ? null : Math.trunc(parsed);
|
|
19
|
+
}
|
|
20
|
+
function resetInstant(value) {
|
|
21
|
+
if (typeof value !== "string") {
|
|
22
|
+
return undefined;
|
|
23
|
+
}
|
|
24
|
+
return utcInstantFromDate(new Date(value)) ?? undefined;
|
|
25
|
+
}
|
|
26
|
+
function usageUnit(value) {
|
|
27
|
+
switch (value) {
|
|
28
|
+
case "TIME_UNIT_MINUTE":
|
|
29
|
+
return "minute";
|
|
30
|
+
case "TIME_UNIT_HOUR":
|
|
31
|
+
return "hour";
|
|
32
|
+
case "TIME_UNIT_DAY":
|
|
33
|
+
return "day";
|
|
34
|
+
case "TIME_UNIT_WEEK":
|
|
35
|
+
return "week";
|
|
36
|
+
default:
|
|
37
|
+
return undefined;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
function usageWindow(value) {
|
|
41
|
+
const record = asRecord(value);
|
|
42
|
+
const duration = numeric(record?.duration);
|
|
43
|
+
const unit = usageUnit(record?.timeUnit);
|
|
44
|
+
if (duration === null || duration <= 0 || unit === undefined) {
|
|
45
|
+
return undefined;
|
|
46
|
+
}
|
|
47
|
+
if (unit === "minute" && duration >= 60 && duration % 60 === 0) {
|
|
48
|
+
return { duration: duration / 60, unit: "hour" };
|
|
49
|
+
}
|
|
50
|
+
return { duration, unit };
|
|
51
|
+
}
|
|
52
|
+
function usageRow(value, extra = {}) {
|
|
53
|
+
const record = asRecord(value);
|
|
54
|
+
const used = numeric(record?.used);
|
|
55
|
+
const limit = numeric(record?.limit);
|
|
56
|
+
if (used === null && limit === null) {
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
const name = extra.name ?? text(record?.name);
|
|
60
|
+
const resetsAt = resetInstant(record?.resetTime);
|
|
61
|
+
return {
|
|
62
|
+
...(name === undefined ? {} : { name }),
|
|
63
|
+
...(extra.window === undefined ? {} : { window: extra.window }),
|
|
64
|
+
used: used ?? 0,
|
|
65
|
+
limit: limit ?? 0,
|
|
66
|
+
...(resetsAt === undefined ? {} : { resetsAt }),
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
function usageLabel(row) {
|
|
70
|
+
const window = row.window;
|
|
71
|
+
if (window !== undefined) {
|
|
72
|
+
if (window.unit === "week") {
|
|
73
|
+
return "Weekly limit";
|
|
74
|
+
}
|
|
75
|
+
return `${window.duration}${window.unit.charAt(0)} limit`;
|
|
76
|
+
}
|
|
77
|
+
return row.name ?? "Limit";
|
|
78
|
+
}
|
|
79
|
+
function projectWindow(row) {
|
|
80
|
+
if (row.limit <= 0 || row.used < 0) {
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
return {
|
|
84
|
+
label: usageLabel(row),
|
|
85
|
+
usedRatio: Number(Math.max(0, Math.min(1, row.used / row.limit)).toFixed(6)),
|
|
86
|
+
...(row.resetsAt === undefined ? {} : { resetsAt: row.resetsAt }),
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
function moneyCents(value) {
|
|
90
|
+
const cents = numeric(asRecord(value)?.priceInCents);
|
|
91
|
+
return cents === null || cents < 0 ? null : cents;
|
|
92
|
+
}
|
|
93
|
+
function boosterWallet(value) {
|
|
94
|
+
const record = asRecord(value);
|
|
95
|
+
const balance = asRecord(record?.balance);
|
|
96
|
+
const total = numeric(balance?.amount);
|
|
97
|
+
if (balance?.type !== "BOOSTER" || total === null || total <= 0) {
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
const amountLeft = numeric(balance.amountLeft) ?? 0;
|
|
101
|
+
const limit = record?.monthlyChargeLimitEnabled === true
|
|
102
|
+
? moneyCents(record.monthlyChargeLimit)
|
|
103
|
+
: null;
|
|
104
|
+
return {
|
|
105
|
+
balance: Math.max(0, amountLeft),
|
|
106
|
+
monthlyLimit: limit !== null && limit > 0 ? limit : null,
|
|
107
|
+
monthlyUsed: moneyCents(record?.monthlyUsed) ?? 0,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
/** Extract identity only from Kimi's authenticated `/me` profile shape. */
|
|
111
|
+
export function kimiAccountEmail(payload) {
|
|
112
|
+
const profile = asRecord(payload);
|
|
113
|
+
return text(profile?.user_id) === undefined ? undefined : text(profile?.email);
|
|
114
|
+
}
|
|
115
|
+
/** Extract the human-readable membership level reported by Kimi's `/me` profile. */
|
|
116
|
+
export function kimiAccountPlan(payload) {
|
|
117
|
+
const profile = asRecord(payload);
|
|
118
|
+
return text(profile?.user_id) === undefined ? undefined : text(profile?.user_level_name);
|
|
119
|
+
}
|
|
120
|
+
/** Project the same managed quota rows that Kimi Code 0.38.0 renders in `/usage`. */
|
|
121
|
+
export function projectKimiUsage(payload, email, plan) {
|
|
122
|
+
const root = asRecord(payload);
|
|
123
|
+
const rows = [];
|
|
124
|
+
const summary = usageRow(root?.usage, { window: { duration: 1, unit: "week" } });
|
|
125
|
+
if (summary !== null) {
|
|
126
|
+
rows.push(summary);
|
|
127
|
+
}
|
|
128
|
+
const limits = root?.limits;
|
|
129
|
+
if (Array.isArray(limits)) {
|
|
130
|
+
for (const value of limits) {
|
|
131
|
+
const limit = asRecord(value);
|
|
132
|
+
const name = text(limit?.name);
|
|
133
|
+
const window = usageWindow(limit?.window);
|
|
134
|
+
const row = usageRow(limit?.detail, {
|
|
135
|
+
...(name === undefined ? {} : { name }),
|
|
136
|
+
...(window === undefined ? {} : { window }),
|
|
137
|
+
});
|
|
138
|
+
if (row !== null) {
|
|
139
|
+
rows.push(row);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
const windows = rows
|
|
144
|
+
.map((row) => projectWindow(row))
|
|
145
|
+
.filter((window) => window !== null);
|
|
146
|
+
const extraUsage = boosterWallet(root?.boosterWallet);
|
|
147
|
+
if (extraUsage?.monthlyLimit !== null && extraUsage?.monthlyLimit !== undefined) {
|
|
148
|
+
windows.push({
|
|
149
|
+
label: "Extra Usage monthly limit",
|
|
150
|
+
usedRatio: Number(Math.min(1, extraUsage.monthlyUsed / extraUsage.monthlyLimit).toFixed(6)),
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
// Kimi's Extra Usage balance bypasses exhausted weekly/hourly subscription
|
|
154
|
+
// quotas. A configured monthly spending cap is the only additional blocker.
|
|
155
|
+
const extraUsageHeadroom = extraUsage !== null
|
|
156
|
+
&& extraUsage.balance > 0
|
|
157
|
+
&& (extraUsage.monthlyLimit === null || extraUsage.monthlyUsed < extraUsage.monthlyLimit);
|
|
158
|
+
return {
|
|
159
|
+
kind: "available",
|
|
160
|
+
...(plan === undefined ? {} : { plan }),
|
|
161
|
+
...(email === undefined ? {} : { email }),
|
|
162
|
+
rateLimited: rows.some((row) => projectWindow(row)?.usedRatio === 1) && !extraUsageHeadroom,
|
|
163
|
+
windows,
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
async function fetchUsage(auth, accessToken, deadline) {
|
|
167
|
+
try {
|
|
168
|
+
return await fetch(`${auth.baseUrl}/usages`, {
|
|
169
|
+
headers: {
|
|
170
|
+
"Authorization": `Bearer ${accessToken}`,
|
|
171
|
+
"Accept": "application/json",
|
|
172
|
+
},
|
|
173
|
+
signal: AbortSignal.timeout(kimiRemainingMs(deadline)),
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
catch (error) {
|
|
177
|
+
throw new Error("Failed to reach Kimi usage endpoint", { cause: error });
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
async function fetchAccountIdentity(auth, accessToken, deadline) {
|
|
181
|
+
try {
|
|
182
|
+
const response = await fetch(`${auth.baseUrl}/me`, {
|
|
183
|
+
headers: {
|
|
184
|
+
"Authorization": `Bearer ${accessToken}`,
|
|
185
|
+
"Accept": "application/json",
|
|
186
|
+
},
|
|
187
|
+
signal: AbortSignal.timeout(kimiRemainingMs(deadline)),
|
|
188
|
+
});
|
|
189
|
+
if (!response.ok) {
|
|
190
|
+
return {};
|
|
191
|
+
}
|
|
192
|
+
const profile = parseJson(await response.text());
|
|
193
|
+
const email = kimiAccountEmail(profile);
|
|
194
|
+
const plan = kimiAccountPlan(profile);
|
|
195
|
+
return {
|
|
196
|
+
...(email === undefined ? {} : { email }),
|
|
197
|
+
...(plan === undefined ? {} : { plan }),
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
catch {
|
|
201
|
+
// Identity is a best-effort add-on: a missing/older profile endpoint or a
|
|
202
|
+
// transient failure must not discard an otherwise valid quota snapshot.
|
|
203
|
+
return {};
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
export const kimiAccountUsage = async (installation, options = {}) => {
|
|
207
|
+
if (installation.via !== "executable") {
|
|
208
|
+
return { kind: "unsupported" };
|
|
209
|
+
}
|
|
210
|
+
// Kimi's Node launcher is measurably slow under the behavior suite's
|
|
211
|
+
// concurrent process load; match the runtime probe/session budget.
|
|
212
|
+
const deadline = Date.now() + (options.timeoutMs ?? 30_000);
|
|
213
|
+
const auth = await resolveKimiAuth(installation.command, deadline);
|
|
214
|
+
if (auth === null || auth.storage !== "file") {
|
|
215
|
+
return { kind: "unsupported" };
|
|
216
|
+
}
|
|
217
|
+
try {
|
|
218
|
+
const accessToken = await storedKimiAccessToken(auth);
|
|
219
|
+
const [response, identity] = await Promise.all([
|
|
220
|
+
fetchUsage(auth, accessToken, deadline),
|
|
221
|
+
fetchAccountIdentity(auth, accessToken, deadline),
|
|
222
|
+
]);
|
|
223
|
+
if (response.status === 401 || response.status === 403) {
|
|
224
|
+
return { kind: "reauth_required" };
|
|
225
|
+
}
|
|
226
|
+
if (response.status === 404) {
|
|
227
|
+
return { kind: "unsupported" };
|
|
228
|
+
}
|
|
229
|
+
if (!response.ok) {
|
|
230
|
+
throw new Error(`Kimi usage endpoint returned HTTP ${response.status}`);
|
|
231
|
+
}
|
|
232
|
+
return projectKimiUsage(parseJson(await response.text()), identity.email, identity.plan);
|
|
233
|
+
}
|
|
234
|
+
catch (error) {
|
|
235
|
+
if (error instanceof KimiReauthError) {
|
|
236
|
+
return { kind: "reauth_required" };
|
|
237
|
+
}
|
|
238
|
+
throw new Error("Failed to read Kimi account usage", { cause: error });
|
|
239
|
+
}
|
|
240
|
+
};
|
|
241
|
+
//# sourceMappingURL=account-usage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"account-usage.js","sourceRoot":"","sources":["../../../src/runtimes/kimi/account-usage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface KimiAuthContext {
|
|
2
|
+
readonly baseUrl: string;
|
|
3
|
+
readonly oauthHost: string;
|
|
4
|
+
readonly storage: "file" | "other";
|
|
5
|
+
readonly storageName: string;
|
|
6
|
+
readonly home: string;
|
|
7
|
+
readonly credentialPath: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function kimiRemainingMs(deadline: number): number;
|
|
10
|
+
/** Resolve Kimi's own managed provider, environment, and credential slot. */
|
|
11
|
+
export declare function resolveKimiAuth(command: string, deadline: number): Promise<KimiAuthContext | null>;
|
|
12
|
+
//# sourceMappingURL=auth-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-config.d.ts","sourceRoot":"","sources":["../../../src/runtimes/kimi/auth-config.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IACnC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAoCD,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAMxD;AAED,6EAA6E;AAC7E,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CA2CjC"}
|