@cmmd-center/forge 0.9.13 → 0.9.15
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/bin.cjs +301 -140
- package/dist/bin.mjs +322 -162
- package/dist/client/assets/{DiffWorkerPoolProvider-DuP7DBdu.js → DiffWorkerPoolProvider-tFSGuVfC.js} +51 -51
- package/dist/client/assets/PullRequestCodePanel-inwJYfZC.js +5 -0
- package/dist/client/assets/{index-BtUnlnWs.js → index-Bublmabf.js} +56 -56
- package/dist/client/index.html +2 -2
- package/dist/{open-FIgTDosf.mjs → open-D8mGyWmt.mjs} +3 -3
- package/dist/runtimeBootstrap.cjs +1 -1
- package/dist/runtimeBootstrap.mjs +1 -1
- package/dist/{runtimeControlAuthority-45DPznyK.cjs → runtimeControlAuthority-BdIovv-r.cjs} +28 -1
- package/dist/{runtimeControlAuthority-akIBTI-S.mjs → runtimeControlAuthority-COHmz_WT.mjs} +23 -2
- package/package.json +3 -2
- package/dist/client/assets/PullRequestCodePanel-BID-ZM7w.js +0 -5
package/dist/bin.mjs
CHANGED
|
@@ -11,7 +11,7 @@ import { a as make$48, i as keys, n as getOption, o as makeWith$1, r as invalida
|
|
|
11
11
|
import { S as layer$9, _ as defaultEscape, a as DeadlockError, b as makeCompiler$1, c as SqlError, d as UnknownError, g as custom, h as make$49, i as ConstraintError, l as SqlSyntaxError, m as SqlClient, n as AuthorizationError, o as LockTimeoutError, r as ConnectionError, s as SerializationError, t as AuthenticationError, u as StatementTimeoutError, v as defaultTransforms, y as fragment } from "./SqlError-B2g5pJux.mjs";
|
|
12
12
|
import { r as wrapper_default, t as Mime_default } from "./Mime-Dq9IoNiV.mjs";
|
|
13
13
|
import { a as diag, c as SpanKind$1, d as TraceFlags, f as ROOT_CONTEXT, i as propagation, l as isSpanContextValid, m as DiagLogLevel, n as init_esm$1, o as context$1, p as createContextKey, r as trace, s as SpanStatusCode, t as esm_exports$1 } from "./esm-wLIF-u3N.mjs";
|
|
14
|
-
import { a as verifyCmmdAuthRuntimeTicket, c as
|
|
14
|
+
import { a as verifyCmmdAuthRuntimeTicket, c as verifyCmmdRuntimeTicket, d as setRuntimeGrantToken, f as createReadOnceFileTokenAccessor, i as sendRuntimeControlHeartbeat, l as verifyCmmdRuntimeTicketRefreshProof, n as bootstrapRuntimeControlAuthorityFromNarrowGrant, o as verifyCmmdClaudeReadinessTicket, r as readRuntimeControlAuthority, s as verifyCmmdClaudeUsageTicket, t as bootstrapRuntimeControlAuthority, u as runtimeGrantToken } from "./runtimeControlAuthority-COHmz_WT.mjs";
|
|
15
15
|
import { n as PtySpawnError, t as PtyAdapter } from "./PTY-Cx_YKiEO.mjs";
|
|
16
16
|
import { createRequire } from "node:module";
|
|
17
17
|
import * as HE from "node:child_process";
|
|
@@ -22,7 +22,7 @@ import { createCipheriv, createDecipheriv, createHash, createHmac, createPublicK
|
|
|
22
22
|
import * as FS$1 from "node:fs";
|
|
23
23
|
import fs, { accessSync, chmodSync, constants, createReadStream, existsSync, mkdirSync, mkdtempSync, promises, readFile, readFileSync, readdir, readdirSync, realpathSync, rmSync, statSync, writeFileSync } from "node:fs";
|
|
24
24
|
import * as NodeOS from "node:os";
|
|
25
|
-
import
|
|
25
|
+
import $U, { homedir, networkInterfaces, tmpdir } from "node:os";
|
|
26
26
|
import * as Path$1 from "node:path";
|
|
27
27
|
import path, { basename, delimiter, dirname, extname, isAbsolute, join, posix, relative, resolve, sep } from "node:path";
|
|
28
28
|
import { pathToFileURL } from "node:url";
|
|
@@ -32066,7 +32066,7 @@ function requiredString(value, minimumLength = 1) {
|
|
|
32066
32066
|
if (typeof value !== "string" || value.length < minimumLength) return identityCorrupt();
|
|
32067
32067
|
return value;
|
|
32068
32068
|
}
|
|
32069
|
-
function positiveInteger$
|
|
32069
|
+
function positiveInteger$2(value) {
|
|
32070
32070
|
if (!Number.isInteger(value) || Number(value) <= 0) return identityCorrupt();
|
|
32071
32071
|
return Number(value);
|
|
32072
32072
|
}
|
|
@@ -32086,7 +32086,7 @@ function parseChallenge(value) {
|
|
|
32086
32086
|
if (!value || typeof value !== "object") return identityCorrupt();
|
|
32087
32087
|
const record = value;
|
|
32088
32088
|
return {
|
|
32089
|
-
deviceId: positiveInteger$
|
|
32089
|
+
deviceId: positiveInteger$2(record.deviceId),
|
|
32090
32090
|
challengeId: requiredString(record.challengeId, 8),
|
|
32091
32091
|
signingPayload: requiredString(record.signingPayload),
|
|
32092
32092
|
currentKeyId: requiredString(record.currentKeyId),
|
|
@@ -49482,7 +49482,7 @@ function _supportsColor(haveStream, { streamIsTTY, sniffFlags = true } = {}) {
|
|
|
49482
49482
|
const min = forceColor || 0;
|
|
49483
49483
|
if (env.TERM === "dumb") return min;
|
|
49484
49484
|
if (process$1.platform === "win32") {
|
|
49485
|
-
const osRelease =
|
|
49485
|
+
const osRelease = $U.release().split(".");
|
|
49486
49486
|
if (Number(osRelease[0]) >= 10 && Number(osRelease[2]) >= 10586) return Number(osRelease[2]) >= 14931 ? 3 : 2;
|
|
49487
49487
|
return 1;
|
|
49488
49488
|
}
|
|
@@ -51925,7 +51925,7 @@ var require_ProcessDetector = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
51925
51925
|
exports.processDetector = void 0;
|
|
51926
51926
|
const api_1 = (init_esm$1(), __toCommonJS(esm_exports$1));
|
|
51927
51927
|
const semconv_1 = require_semconv$1();
|
|
51928
|
-
const os$
|
|
51928
|
+
const os$3 = __require("os");
|
|
51929
51929
|
/**
|
|
51930
51930
|
* ProcessDetector will be used to detect the resources related current process running
|
|
51931
51931
|
* and being instrumented from the NodeJS Process module.
|
|
@@ -51947,7 +51947,7 @@ var require_ProcessDetector = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
51947
51947
|
};
|
|
51948
51948
|
if (process.argv.length > 1) attributes[semconv_1.ATTR_PROCESS_COMMAND] = process.argv[1];
|
|
51949
51949
|
try {
|
|
51950
|
-
const userInfo = os$
|
|
51950
|
+
const userInfo = os$3.userInfo();
|
|
51951
51951
|
attributes[semconv_1.ATTR_PROCESS_OWNER] = userInfo.username;
|
|
51952
51952
|
} catch (e) {
|
|
51953
51953
|
api_1.diag.debug(`error obtaining process owner: ${e}`);
|
|
@@ -64870,7 +64870,7 @@ function normalizeNumberish(value) {
|
|
|
64870
64870
|
}
|
|
64871
64871
|
//#endregion
|
|
64872
64872
|
//#region package.json
|
|
64873
|
-
var version$1 = "0.9.
|
|
64873
|
+
var version$1 = "0.9.15";
|
|
64874
64874
|
//#endregion
|
|
64875
64875
|
//#region src/sentry.ts
|
|
64876
64876
|
const SERVER_APP_NAME = "forge-server";
|
|
@@ -65343,7 +65343,7 @@ function readCmmdAvatarUrl(raw) {
|
|
|
65343
65343
|
function readTrimmedString$2(value) {
|
|
65344
65344
|
return typeof value === "string" ? value.trim() || null : null;
|
|
65345
65345
|
}
|
|
65346
|
-
function asRecord$
|
|
65346
|
+
function asRecord$12(value) {
|
|
65347
65347
|
return value && typeof value === "object" ? value : null;
|
|
65348
65348
|
}
|
|
65349
65349
|
function readDirectPlanLabelFromRecord(obj) {
|
|
@@ -65355,26 +65355,26 @@ function readNestedPlanLabelFromRecord(obj) {
|
|
|
65355
65355
|
function readCmmdPlanLabel(obj) {
|
|
65356
65356
|
const direct = readDirectPlanLabelFromRecord(obj);
|
|
65357
65357
|
if (direct) return direct;
|
|
65358
|
-
const plan = asRecord$
|
|
65358
|
+
const plan = asRecord$12(obj["plan"]);
|
|
65359
65359
|
if (plan) {
|
|
65360
65360
|
const label = readNestedPlanLabelFromRecord(plan);
|
|
65361
65361
|
if (label) return label;
|
|
65362
65362
|
}
|
|
65363
|
-
const subscription = asRecord$
|
|
65363
|
+
const subscription = asRecord$12(obj["subscription"]);
|
|
65364
65364
|
if (subscription) {
|
|
65365
65365
|
const label = readNestedPlanLabelFromRecord(subscription);
|
|
65366
65366
|
if (label) return label;
|
|
65367
|
-
const subscriptionPlan = asRecord$
|
|
65367
|
+
const subscriptionPlan = asRecord$12(subscription["plan"]);
|
|
65368
65368
|
if (subscriptionPlan) {
|
|
65369
65369
|
const nestedLabel = readNestedPlanLabelFromRecord(subscriptionPlan);
|
|
65370
65370
|
if (nestedLabel) return nestedLabel;
|
|
65371
65371
|
}
|
|
65372
65372
|
}
|
|
65373
|
-
const billing = asRecord$
|
|
65373
|
+
const billing = asRecord$12(obj["billing"]);
|
|
65374
65374
|
if (billing) {
|
|
65375
65375
|
const label = readNestedPlanLabelFromRecord(billing);
|
|
65376
65376
|
if (label) return label;
|
|
65377
|
-
const billingPlan = asRecord$
|
|
65377
|
+
const billingPlan = asRecord$12(billing["plan"]);
|
|
65378
65378
|
if (billingPlan) return readNestedPlanLabelFromRecord(billingPlan);
|
|
65379
65379
|
}
|
|
65380
65380
|
return null;
|
|
@@ -65511,7 +65511,7 @@ function constantTimeEqual(left, right) {
|
|
|
65511
65511
|
function integerSeconds(value) {
|
|
65512
65512
|
return Number.isSafeInteger(value) && value >= 0 ? value : null;
|
|
65513
65513
|
}
|
|
65514
|
-
function positiveInteger(value) {
|
|
65514
|
+
function positiveInteger$1(value) {
|
|
65515
65515
|
return Number.isSafeInteger(value) && value > 0 ? value : null;
|
|
65516
65516
|
}
|
|
65517
65517
|
function parseAssertion(token) {
|
|
@@ -65538,7 +65538,7 @@ function hasExpectedPayloadContext(payload) {
|
|
|
65538
65538
|
function readRequiredClaims(payload) {
|
|
65539
65539
|
const subject = nonEmptyString$1(payload["sub"]);
|
|
65540
65540
|
if (!subject) return null;
|
|
65541
|
-
const userId = positiveInteger(payload["user_id"]);
|
|
65541
|
+
const userId = positiveInteger$1(payload["user_id"]);
|
|
65542
65542
|
if (!userId) return null;
|
|
65543
65543
|
const jti = nonEmptyString$1(payload["jti"]);
|
|
65544
65544
|
if (!jti) return null;
|
|
@@ -66692,13 +66692,13 @@ function validateCommandBootstrapPayload(payload) {
|
|
|
66692
66692
|
});
|
|
66693
66693
|
const payloadIdentity = normalizeCmmdUserIdentity(payload.user);
|
|
66694
66694
|
if (payloadIdentity) {
|
|
66695
|
-
const cmmdIdentity = payloadIdentity.avatarUrl ? payloadIdentity : mergeCmmdUserIdentity(payloadIdentity, yield* fetchOptionalCmmdIdentityForAccessToken(payload
|
|
66695
|
+
const cmmdIdentity = payloadIdentity.avatarUrl ? payloadIdentity : mergeCmmdUserIdentity(payloadIdentity, yield* fetchOptionalCmmdIdentityForAccessToken(cmmdUserCredential(payload)));
|
|
66696
66696
|
return {
|
|
66697
66697
|
subjectUserId: cmmdIdentity.id,
|
|
66698
66698
|
cmmdIdentity
|
|
66699
66699
|
};
|
|
66700
66700
|
}
|
|
66701
|
-
const tokenIdentity = yield* fetchCmmdIdentityForAccessToken(payload
|
|
66701
|
+
const tokenIdentity = yield* fetchCmmdIdentityForAccessToken(cmmdUserCredential(payload));
|
|
66702
66702
|
if (tokenIdentity) return {
|
|
66703
66703
|
subjectUserId: tokenIdentity.id,
|
|
66704
66704
|
cmmdIdentity: tokenIdentity
|
|
@@ -66791,6 +66791,23 @@ function isCmmdJwtToken(token) {
|
|
|
66791
66791
|
return token?.startsWith("eyJ") ?? false;
|
|
66792
66792
|
}
|
|
66793
66793
|
/**
|
|
66794
|
+
* The credential CMMD's userinfo accepts.
|
|
66795
|
+
*
|
|
66796
|
+
* Since CMMD's OAuth update, `access_token` is a JWT and the personal access
|
|
66797
|
+
* token arrives separately as `mcp_token`. userinfo authenticates the PAT and
|
|
66798
|
+
* rejects the JWT with `INVALID_OR_NON_USER_TOKEN`, so presenting the JWT
|
|
66799
|
+
* resolves no identity: the bootstrap then finds no subject and answers 401,
|
|
66800
|
+
* even though the sign-in itself succeeded and the caller did nothing wrong.
|
|
66801
|
+
*
|
|
66802
|
+
* `resolveCmmdTokenBundleCredentials` already draws this distinction for the
|
|
66803
|
+
* owner lanes. This is the same rule for the bootstrap lane, which had only ever
|
|
66804
|
+
* seen the pre-update shape where `access_token` was itself the PAT.
|
|
66805
|
+
*/
|
|
66806
|
+
function cmmdUserCredential(payload) {
|
|
66807
|
+
const pat = payload.mcpToken?.trim();
|
|
66808
|
+
return isCmmdJwtToken(payload.accessToken) && pat ? pat : payload.accessToken;
|
|
66809
|
+
}
|
|
66810
|
+
/**
|
|
66794
66811
|
* Read one CMMD token-exchange response into the credential set Forge stores.
|
|
66795
66812
|
*
|
|
66796
66813
|
* Both owner lanes redeem the same `cmmd-forge-web` authorization code — the
|
|
@@ -69135,22 +69152,22 @@ const EMPTY_PARSED_ERROR = {
|
|
|
69135
69152
|
message: null,
|
|
69136
69153
|
raw: null
|
|
69137
69154
|
};
|
|
69138
|
-
function asRecord$
|
|
69155
|
+
function asRecord$11(value) {
|
|
69139
69156
|
return value !== null && typeof value === "object" && !Array.isArray(value) ? value : null;
|
|
69140
69157
|
}
|
|
69141
69158
|
function readTrimmedString$1(value) {
|
|
69142
69159
|
return (typeof value === "string" ? value.trim() : "") || null;
|
|
69143
69160
|
}
|
|
69144
69161
|
function readErrorEnvelope(record) {
|
|
69145
|
-
return asRecord$
|
|
69162
|
+
return asRecord$11(record["error"]);
|
|
69146
69163
|
}
|
|
69147
69164
|
function readUpstreamErrorCode(body) {
|
|
69148
|
-
const record = asRecord$
|
|
69165
|
+
const record = asRecord$11(body);
|
|
69149
69166
|
if (record === null) return null;
|
|
69150
69167
|
return readTrimmedString$1(record["code"]) ?? readTrimmedString$1(readErrorEnvelope(record)?.["code"]);
|
|
69151
69168
|
}
|
|
69152
69169
|
function readErrorMessage$2(raw) {
|
|
69153
|
-
const record = asRecord$
|
|
69170
|
+
const record = asRecord$11(raw);
|
|
69154
69171
|
if (record === null) return null;
|
|
69155
69172
|
const error = record["error"];
|
|
69156
69173
|
const nestedMessage = readErrorEnvelope(record)?.["message"];
|
|
@@ -69782,7 +69799,7 @@ function buildProxyErrorResponse(error) {
|
|
|
69782
69799
|
code: error.code
|
|
69783
69800
|
}, { status: 403 });
|
|
69784
69801
|
if (error instanceof CmmdProxyRequestError) {
|
|
69785
|
-
const status = error.status >= 500 ? 502 : error.status;
|
|
69802
|
+
const status = error.status === 503 ? 503 : error.status >= 500 ? 502 : error.status;
|
|
69786
69803
|
return jsonUnsafe({
|
|
69787
69804
|
error: error.detail ?? "CMMD REST request failed.",
|
|
69788
69805
|
code: error.code,
|
|
@@ -73483,7 +73500,7 @@ var require_node_gyp_build = /* @__PURE__ */ __commonJSMin(((exports, module) =>
|
|
|
73483
73500
|
var fs$6 = __require("fs");
|
|
73484
73501
|
var path$5 = __require("path");
|
|
73485
73502
|
var url$1 = __require("url");
|
|
73486
|
-
var os$
|
|
73503
|
+
var os$2 = __require("os");
|
|
73487
73504
|
var runtimeRequire = typeof __webpack_require__ === "function" ? __non_webpack_require__ : __require;
|
|
73488
73505
|
var vars = process.config && process.config.variables || {};
|
|
73489
73506
|
var prebuildsOnly = !!process.env.PREBUILDS_ONLY;
|
|
@@ -73491,8 +73508,8 @@ var require_node_gyp_build = /* @__PURE__ */ __commonJSMin(((exports, module) =>
|
|
|
73491
73508
|
var abi = versions.modules;
|
|
73492
73509
|
if (versions.deno || process.isBun) abi = "unsupported";
|
|
73493
73510
|
var runtime = isElectron() ? "electron" : isNwjs() ? "node-webkit" : "node";
|
|
73494
|
-
var arch = process.env.npm_config_arch || os$
|
|
73495
|
-
var platform = process.env.npm_config_platform || os$
|
|
73511
|
+
var arch = process.env.npm_config_arch || os$2.arch();
|
|
73512
|
+
var platform = process.env.npm_config_platform || os$2.platform();
|
|
73496
73513
|
var libc = process.env.LIBC || (isMusl(platform) ? "musl" : "glibc");
|
|
73497
73514
|
var armv = process.env.ARM_VERSION || (arch === "arm64" ? "8" : vars.arm_version) || "";
|
|
73498
73515
|
var uv = (versions.uv || "").split(".")[0];
|
|
@@ -91150,7 +91167,7 @@ const launchDetached = (launch) => gen(function* () {
|
|
|
91150
91167
|
});
|
|
91151
91168
|
const OpenLive = effect(Open, gen(function* () {
|
|
91152
91169
|
const open = yield* tryPromise({
|
|
91153
|
-
try: () => import("./open-
|
|
91170
|
+
try: () => import("./open-D8mGyWmt.mjs"),
|
|
91154
91171
|
catch: (cause) => new OpenError$1({
|
|
91155
91172
|
message: "failed to load browser opener",
|
|
91156
91173
|
cause
|
|
@@ -92509,7 +92526,7 @@ function hasValidRuntimeIdentity(value) {
|
|
|
92509
92526
|
}
|
|
92510
92527
|
function decodeRuntime$1(value) {
|
|
92511
92528
|
if (!isRecord$16(value) || !hasValidRuntimeIdentity(value)) return null;
|
|
92512
|
-
if (!nullableString(value.endpointUrl) || value.endpointUrl !== null && !URL.canParse(value.endpointUrl) || !nullableInteger(value.deviceId) || !
|
|
92529
|
+
if (!nullableString(value.endpointUrl) || value.endpointUrl !== null && !URL.canParse(value.endpointUrl) || !nullableInteger(value.deviceId) || !nullableString(value.workspaceRoot) || !nullableString(value.githubRepoFullName) || !(value.lastSeenAt === null || isIsoDateTime(value.lastSeenAt)) || !(value.metadata === null || isRecord$16(value.metadata))) return null;
|
|
92513
92530
|
return value;
|
|
92514
92531
|
}
|
|
92515
92532
|
function decodeProject(value) {
|
|
@@ -92820,8 +92837,6 @@ function replicaRuntimeMatches(left, right) {
|
|
|
92820
92837
|
[left.status, right.status],
|
|
92821
92838
|
[left.endpointUrl, right.endpointUrl],
|
|
92822
92839
|
[left.deviceId, right.deviceId],
|
|
92823
|
-
[left.projectId, right.projectId],
|
|
92824
|
-
[left.projectName, right.projectName],
|
|
92825
92840
|
[left.workspaceRoot, right.workspaceRoot],
|
|
92826
92841
|
[left.githubRepoFullName, right.githubRepoFullName],
|
|
92827
92842
|
[left.lastSeenAt, right.lastSeenAt]
|
|
@@ -96479,7 +96494,7 @@ const EMPTY_PLAN_VALUES = new Set([
|
|
|
96479
96494
|
"none",
|
|
96480
96495
|
"null"
|
|
96481
96496
|
]);
|
|
96482
|
-
function asRecord$
|
|
96497
|
+
function asRecord$10(value) {
|
|
96483
96498
|
if (!value || typeof value !== "object" || Array.isArray(value)) return void 0;
|
|
96484
96499
|
return value;
|
|
96485
96500
|
}
|
|
@@ -96496,7 +96511,7 @@ function decodeJwtClaims(token) {
|
|
|
96496
96511
|
try {
|
|
96497
96512
|
const decoded = Buffer.from(payload, "base64url");
|
|
96498
96513
|
if (decoded.byteLength > MAX_CLAIMS_BYTES) return void 0;
|
|
96499
|
-
return asRecord$
|
|
96514
|
+
return asRecord$10(JSON.parse(decoded.toString("utf8")));
|
|
96500
96515
|
} catch {
|
|
96501
96516
|
return;
|
|
96502
96517
|
}
|
|
@@ -96518,7 +96533,7 @@ function findPlanType(claims) {
|
|
|
96518
96533
|
const direct = fromRecord(claims);
|
|
96519
96534
|
if (direct) return direct;
|
|
96520
96535
|
for (const value of Object.values(claims)) {
|
|
96521
|
-
const nested = asRecord$
|
|
96536
|
+
const nested = asRecord$10(value);
|
|
96522
96537
|
if (!nested) continue;
|
|
96523
96538
|
const found = fromRecord(nested);
|
|
96524
96539
|
if (found) return found;
|
|
@@ -96535,7 +96550,7 @@ function readCodexAuthIdentity(authJson) {
|
|
|
96535
96550
|
} catch {
|
|
96536
96551
|
return {};
|
|
96537
96552
|
}
|
|
96538
|
-
const claims = decodeJwtClaims(asRecord$
|
|
96553
|
+
const claims = decodeJwtClaims(asRecord$10(asRecord$10(parsed)?.tokens)?.id_token);
|
|
96539
96554
|
if (!claims) return {};
|
|
96540
96555
|
const email = findEmail(claims);
|
|
96541
96556
|
const planType = findPlanType(claims);
|
|
@@ -96732,11 +96747,6 @@ function recordClaudeRateLimitTelemetry(info, generationHash = currentClaudeUsag
|
|
|
96732
96747
|
observedAt: [fiveHourObservedAt, sevenDayObservedAt].filter((value) => value !== null).toSorted()[0]
|
|
96733
96748
|
});
|
|
96734
96749
|
}
|
|
96735
|
-
function getLatestClaudeRateLimitTelemetry(generationHash = currentClaudeUsageGenerationHash(), providerAccountId) {
|
|
96736
|
-
if (generationHash === null) return null;
|
|
96737
|
-
const cacheKey = providerAccountId ? `${providerAccountId}:${generationHash}` : generationHash;
|
|
96738
|
-
return cachedSnapshots.get(cacheKey) ?? null;
|
|
96739
|
-
}
|
|
96740
96750
|
//#endregion
|
|
96741
96751
|
//#region src/providerAuth/ClaudeDeviceAuth.ts
|
|
96742
96752
|
const AUTHORIZE_URL_PATTERN = /https:\/\/[^\s]*\/oauth\/authorize\?[^\s]+/u;
|
|
@@ -97115,17 +97125,23 @@ async function loadClaudeAccountMetadataFromCli(homePath) {
|
|
|
97115
97125
|
function extractClaudeCredentialGenerationId(response) {
|
|
97116
97126
|
if (typeof response !== "object" || response === null || !("data" in response)) return null;
|
|
97117
97127
|
const data = response.data;
|
|
97118
|
-
if (typeof data !== "object" || data === null
|
|
97119
|
-
if (
|
|
97120
|
-
|
|
97128
|
+
if (typeof data !== "object" || data === null) return null;
|
|
97129
|
+
if ("connected" in data && data.connected === true && "generationId" in data && typeof data.generationId === "string") {
|
|
97130
|
+
const generationId = data.generationId.trim();
|
|
97131
|
+
return generationId.length > 0 ? generationId : null;
|
|
97132
|
+
}
|
|
97133
|
+
if (!("account" in data) || typeof data.account !== "object" || data.account === null) return null;
|
|
97134
|
+
const account = data.account;
|
|
97135
|
+
if (!("credentialGenerationId" in account) || typeof account.credentialGenerationId !== "string") return null;
|
|
97136
|
+
const generationId = account.credentialGenerationId.trim();
|
|
97121
97137
|
return generationId.length > 0 ? generationId : null;
|
|
97122
97138
|
}
|
|
97123
97139
|
function extractClaudeProviderAccountId(response) {
|
|
97124
|
-
const generationId = extractClaudeCredentialGenerationId(response);
|
|
97125
|
-
if (generationId !== null) return generationId;
|
|
97126
97140
|
if (typeof response !== "object" || response === null || !("data" in response)) return null;
|
|
97127
97141
|
const data = response.data;
|
|
97128
|
-
if (typeof data !== "object" || data === null
|
|
97142
|
+
if (typeof data !== "object" || data === null) return null;
|
|
97143
|
+
if ("connected" in data && data.connected === true) return extractClaudeCredentialGenerationId(response);
|
|
97144
|
+
if (!("account" in data)) return null;
|
|
97129
97145
|
const account = data.account;
|
|
97130
97146
|
if (typeof account !== "object" || account === null || !("providerAccountId" in account) || typeof account.providerAccountId !== "string") return null;
|
|
97131
97147
|
const providerAccountId = account.providerAccountId.trim();
|
|
@@ -97153,7 +97169,7 @@ async function publishClaudeUsageAfterSync(input) {
|
|
|
97153
97169
|
path: input.auth.path === AUTH_RUNTIME_CLAUDE_CREDENTIAL_PATH ? AUTH_RUNTIME_CLAUDE_USAGE_PATH : USER_CLAUDE_USAGE_PATH,
|
|
97154
97170
|
body: {
|
|
97155
97171
|
providerAccountId: input.providerAccountId,
|
|
97156
|
-
credentialGenerationId: input.
|
|
97172
|
+
credentialGenerationId: input.credentialGenerationId,
|
|
97157
97173
|
accountEmail: input.accountEmail,
|
|
97158
97174
|
accountDisplayName: input.accountDisplayName,
|
|
97159
97175
|
planType: input.planType,
|
|
@@ -97170,11 +97186,13 @@ async function publishClaudeUsageAfterSync(input) {
|
|
|
97170
97186
|
}
|
|
97171
97187
|
async function finalizeClaudeCredentialSync(input) {
|
|
97172
97188
|
const providerAccountId = extractClaudeProviderAccountId(input.response);
|
|
97173
|
-
|
|
97174
|
-
if (
|
|
97189
|
+
const credentialGenerationId = extractClaudeCredentialGenerationId(input.response);
|
|
97190
|
+
if (providerAccountId === null || credentialGenerationId === null) return null;
|
|
97191
|
+
if (input.auth.path === USER_CLAUDE_CREDENTIAL_PATH) setLocalClaudeUsageGeneration(credentialGenerationId);
|
|
97175
97192
|
return publishClaudeUsageAfterSync({
|
|
97176
97193
|
auth: input.auth,
|
|
97177
97194
|
providerAccountId,
|
|
97195
|
+
credentialGenerationId,
|
|
97178
97196
|
accountEmail: input.accountEmail,
|
|
97179
97197
|
accountDisplayName: input.accountDisplayName,
|
|
97180
97198
|
planType: input.planType,
|
|
@@ -184355,7 +184373,7 @@ var Vce = {
|
|
|
184355
184373
|
function Ve() {
|
|
184356
184374
|
return Vce;
|
|
184357
184375
|
}
|
|
184358
|
-
var Us =
|
|
184376
|
+
var Us = $U.homedir(), lk = $U.tmpdir(), { env: Vc } = process$1, Yce = (e) => {
|
|
184359
184377
|
let t = path.join(Us, "Library");
|
|
184360
184378
|
return {
|
|
184361
184379
|
data: path.join(t, "Application Support", e),
|
|
@@ -194555,12 +194573,12 @@ function qZ(e, t) {
|
|
|
194555
194573
|
}
|
|
194556
194574
|
return n;
|
|
194557
194575
|
}
|
|
194558
|
-
var os$
|
|
194576
|
+
var os$1 = "https://code.claude.com/docs/en", kKe = [
|
|
194559
194577
|
{
|
|
194560
194578
|
matches: (e) => e.path === "permissions.defaultMode" && e.code === "invalid_value",
|
|
194561
194579
|
tip: {
|
|
194562
194580
|
suggestion: "Valid modes: \"acceptEdits\" (ask before file changes), \"plan\" (analysis only), \"bypassPermissions\" (auto-accept all), or \"default\" (standard behavior)",
|
|
194563
|
-
docLink: `${os$
|
|
194581
|
+
docLink: `${os$1}/iam#permission-modes`
|
|
194564
194582
|
}
|
|
194565
194583
|
},
|
|
194566
194584
|
{
|
|
@@ -194575,7 +194593,7 @@ var os$2 = "https://code.claude.com/docs/en", kKe = [
|
|
|
194575
194593
|
matches: (e) => e.path.startsWith("env.") && e.code === "invalid_type",
|
|
194576
194594
|
tip: {
|
|
194577
194595
|
suggestion: "Environment variables must be strings. Wrap numbers and booleans in quotes. Example: \"DEBUG\": \"true\", \"PORT\": \"3000\"",
|
|
194578
|
-
docLink: `${os$
|
|
194596
|
+
docLink: `${os$1}/settings#environment-variables`
|
|
194579
194597
|
}
|
|
194580
194598
|
},
|
|
194581
194599
|
{
|
|
@@ -194586,14 +194604,14 @@ var os$2 = "https://code.claude.com/docs/en", kKe = [
|
|
|
194586
194604
|
matches: (e) => e.path.startsWith("hooks.") && e.code === "invalid_key",
|
|
194587
194605
|
tip: {
|
|
194588
194606
|
suggestion: "Not a recognized hook event. Common events: PreToolUse, PostToolUse, UserPromptSubmit, SessionStart, SessionEnd, Stop. Check spelling and capitalization.",
|
|
194589
|
-
docLink: `${os$
|
|
194607
|
+
docLink: `${os$1}/hooks`
|
|
194590
194608
|
}
|
|
194591
194609
|
},
|
|
194592
194610
|
{
|
|
194593
194611
|
matches: (e) => /\.hooks\.\d+\.command$/.test(e.path) && e.code === "invalid_type" && e.received === "undefined",
|
|
194594
194612
|
tip: {
|
|
194595
194613
|
suggestion: "Command hooks require `command`. For exec form (no shell), set `command` to the executable and `args` to its arguments: {\"type\": \"command\", \"command\": \"echo\", \"args\": [\"hi\"]}. For shell form, set `command` to the full shell string: {\"type\": \"command\", \"command\": \"echo hi\"}.",
|
|
194596
|
-
docLink: `${os$
|
|
194614
|
+
docLink: `${os$1}/hooks#exec-form-and-shell-form`
|
|
194597
194615
|
}
|
|
194598
194616
|
},
|
|
194599
194617
|
{
|
|
@@ -194608,7 +194626,7 @@ var os$2 = "https://code.claude.com/docs/en", kKe = [
|
|
|
194608
194626
|
matches: (e) => e.code === "unrecognized_keys",
|
|
194609
194627
|
tip: {
|
|
194610
194628
|
suggestion: "Check for typos or refer to the documentation for valid fields",
|
|
194611
|
-
docLink: `${os$
|
|
194629
|
+
docLink: `${os$1}/settings`
|
|
194612
194630
|
}
|
|
194613
194631
|
},
|
|
194614
194632
|
{
|
|
@@ -194623,13 +194641,13 @@ var os$2 = "https://code.claude.com/docs/en", kKe = [
|
|
|
194623
194641
|
matches: (e) => e.path === "permissions.additionalDirectories" && e.code === "invalid_type",
|
|
194624
194642
|
tip: {
|
|
194625
194643
|
suggestion: "Must be an array of directory paths. Example: [\"~/projects\", \"/tmp/workspace\"]. You can also use --add-dir flag or /add-dir command",
|
|
194626
|
-
docLink: `${os$
|
|
194644
|
+
docLink: `${os$1}/iam#working-directories`
|
|
194627
194645
|
}
|
|
194628
194646
|
}
|
|
194629
194647
|
], AKe = {
|
|
194630
|
-
permissions: `${os$
|
|
194631
|
-
env: `${os$
|
|
194632
|
-
hooks: `${os$
|
|
194648
|
+
permissions: `${os$1}/iam#configuring-permissions`,
|
|
194649
|
+
env: `${os$1}/settings#environment-variables`,
|
|
194650
|
+
hooks: `${os$1}/hooks`
|
|
194633
194651
|
};
|
|
194634
194652
|
function GZ(e) {
|
|
194635
194653
|
let t = kKe.find((r) => r.matches(e));
|
|
@@ -203517,7 +203535,7 @@ const collectStreamAsString = (stream) => stream.pipe(decodeText$1(), runFold(()
|
|
|
203517
203535
|
//#region src/orchestration/WorkerPlanCodexTools.ts
|
|
203518
203536
|
const FORGE_PROPOSE_WORKER_TASKS_TOOL = "forge_propose_worker_tasks";
|
|
203519
203537
|
const MAX_WORKER_PLAN_ITEMS = 5;
|
|
203520
|
-
function asRecord$
|
|
203538
|
+
function asRecord$9(value) {
|
|
203521
203539
|
return typeof value === "object" && value !== null && !Array.isArray(value) ? value : void 0;
|
|
203522
203540
|
}
|
|
203523
203541
|
function readTrimmedString(value) {
|
|
@@ -203533,7 +203551,7 @@ function isValidWorkerSummary(value) {
|
|
|
203533
203551
|
return value !== void 0 && value.length > 0 && value.length <= 4e3;
|
|
203534
203552
|
}
|
|
203535
203553
|
function decodeWorkerPlanItem(value) {
|
|
203536
|
-
const item = asRecord$
|
|
203554
|
+
const item = asRecord$9(value);
|
|
203537
203555
|
const slug = readTrimmedString(item?.slug);
|
|
203538
203556
|
const title = readTrimmedString(item?.title);
|
|
203539
203557
|
const summary = readTrimmedString(item?.summary);
|
|
@@ -203597,7 +203615,7 @@ function createWorkerPlanDynamicTools() {
|
|
|
203597
203615
|
function createWorkerPlanDynamicToolHandler() {
|
|
203598
203616
|
return async (input) => {
|
|
203599
203617
|
if (input.tool !== "forge_propose_worker_tasks") throw new Error(`Unsupported worker-plan tool: ${input.tool}`);
|
|
203600
|
-
if (!decodeWorkerPlanItems(asRecord$
|
|
203618
|
+
if (!decodeWorkerPlanItems(asRecord$9(input.arguments)?.items)) throw new Error("Worker plans require one to five unique, fully described items.");
|
|
203601
203619
|
return {
|
|
203602
203620
|
success: true,
|
|
203603
203621
|
contentItems: [{
|
|
@@ -205315,25 +205333,25 @@ const AUTH_METHOD_CONTAINER_KEYS = [
|
|
|
205315
205333
|
/** Lift an unknown value into `Option<string>` if it is a non-empty string. */
|
|
205316
205334
|
const asNonEmptyString = (v) => typeof v === "string" && v.length > 0 ? some(v) : none$4();
|
|
205317
205335
|
/** Lift an unknown value into `Option<Record>` if it is a plain object. */
|
|
205318
|
-
const asRecord$
|
|
205336
|
+
const asRecord$8 = (v) => typeof v === "object" && v !== null && !globalThis.Array.isArray(v) ? some(v) : none$4();
|
|
205319
205337
|
/**
|
|
205320
205338
|
* Walk an unknown parsed JSON value looking for a subscription/plan
|
|
205321
205339
|
* identifier, returning the first match as an `Option`.
|
|
205322
205340
|
*/
|
|
205323
205341
|
function findSubscriptionType(value) {
|
|
205324
205342
|
if (globalThis.Array.isArray(value)) return firstSomeOf(value.map(findSubscriptionType));
|
|
205325
|
-
return asRecord$
|
|
205343
|
+
return asRecord$8(value).pipe(flatMap$2((record) => {
|
|
205326
205344
|
const direct = firstSomeOf(SUBSCRIPTION_TYPE_KEYS.map((key) => asNonEmptyString(record[key])));
|
|
205327
205345
|
if (isSome(direct)) return direct;
|
|
205328
|
-
return firstSomeOf(SUBSCRIPTION_CONTAINER_KEYS.map((key) => asRecord$
|
|
205346
|
+
return firstSomeOf(SUBSCRIPTION_CONTAINER_KEYS.map((key) => asRecord$8(record[key]).pipe(flatMap$2(findSubscriptionType))));
|
|
205329
205347
|
}));
|
|
205330
205348
|
}
|
|
205331
205349
|
function findAuthMethod(value) {
|
|
205332
205350
|
if (globalThis.Array.isArray(value)) return firstSomeOf(value.map(findAuthMethod));
|
|
205333
|
-
return asRecord$
|
|
205351
|
+
return asRecord$8(value).pipe(flatMap$2((record) => {
|
|
205334
205352
|
const direct = firstSomeOf(AUTH_METHOD_KEYS.map((key) => asNonEmptyString(record[key])));
|
|
205335
205353
|
if (isSome(direct)) return direct;
|
|
205336
|
-
return firstSomeOf(AUTH_METHOD_CONTAINER_KEYS.map((key) => asRecord$
|
|
205354
|
+
return firstSomeOf(AUTH_METHOD_CONTAINER_KEYS.map((key) => asRecord$8(record[key]).pipe(flatMap$2(findAuthMethod))));
|
|
205337
205355
|
}));
|
|
205338
205356
|
}
|
|
205339
205357
|
/**
|
|
@@ -206481,7 +206499,7 @@ function userInputQuestionsFromToolInput(toolInput) {
|
|
|
206481
206499
|
return (Array.isArray(toolInput.questions) ? toolInput.questions : []).map((question, idx) => userInputQuestionFromUnknown(question, idx));
|
|
206482
206500
|
}
|
|
206483
206501
|
function userInputQuestionFromUnknown(question, idx) {
|
|
206484
|
-
const value = asRecord$
|
|
206502
|
+
const value = asRecord$7(question) ?? {};
|
|
206485
206503
|
return {
|
|
206486
206504
|
id: typeof value.header === "string" ? value.header : `q-${idx}`,
|
|
206487
206505
|
header: typeof value.header === "string" ? value.header : `Question ${idx + 1}`,
|
|
@@ -206491,13 +206509,13 @@ function userInputQuestionFromUnknown(question, idx) {
|
|
|
206491
206509
|
};
|
|
206492
206510
|
}
|
|
206493
206511
|
function userInputOptionFromUnknown(option) {
|
|
206494
|
-
const value = asRecord$
|
|
206512
|
+
const value = asRecord$7(option) ?? {};
|
|
206495
206513
|
return {
|
|
206496
206514
|
label: typeof value.label === "string" ? value.label : "",
|
|
206497
206515
|
description: typeof value.description === "string" ? value.description : ""
|
|
206498
206516
|
};
|
|
206499
206517
|
}
|
|
206500
|
-
function asRecord$
|
|
206518
|
+
function asRecord$7(value) {
|
|
206501
206519
|
return value !== null && typeof value === "object" && !Array.isArray(value) ? value : void 0;
|
|
206502
206520
|
}
|
|
206503
206521
|
function permissionResultFromDecision(decision, toolInput, suggestions) {
|
|
@@ -207304,7 +207322,7 @@ const makeClaudeAdapter = fn$1("makeClaudeAdapter")(function* (options) {
|
|
|
207304
207322
|
const updateResumeCursor = fn$1("updateResumeCursor")(function* (context) {
|
|
207305
207323
|
const threadId = context.session.threadId;
|
|
207306
207324
|
if (!threadId) return;
|
|
207307
|
-
const providerDeliveryBinding = readProviderDeliveryBinding(asRecord$
|
|
207325
|
+
const providerDeliveryBinding = readProviderDeliveryBinding(asRecord$7(context.session.resumeCursor)?.providerDeliveryBinding);
|
|
207308
207326
|
const resumeCursor = {
|
|
207309
207327
|
threadId,
|
|
207310
207328
|
...context.resumeSessionId ? { resume: context.resumeSessionId } : {},
|
|
@@ -212370,7 +212388,7 @@ function makeAcpContentDeltaEvent(input) {
|
|
|
212370
212388
|
}
|
|
212371
212389
|
//#endregion
|
|
212372
212390
|
//#region ../../packages/shared/src/toolActivity.ts
|
|
212373
|
-
function asRecord$
|
|
212391
|
+
function asRecord$6(value) {
|
|
212374
212392
|
return value !== null && typeof value === "object" && !Array.isArray(value) ? value : void 0;
|
|
212375
212393
|
}
|
|
212376
212394
|
function asTrimmedString(value) {
|
|
@@ -212396,10 +212414,10 @@ function extractCommandFromTitle$1(title) {
|
|
|
212396
212414
|
return /`([^`]+)`/u.exec(title)?.[1]?.trim() || void 0;
|
|
212397
212415
|
}
|
|
212398
212416
|
function extractToolCommand(data, title) {
|
|
212399
|
-
const item = asRecord$
|
|
212400
|
-
const itemInput = asRecord$
|
|
212401
|
-
const itemResult = asRecord$
|
|
212402
|
-
const rawInput = asRecord$
|
|
212417
|
+
const item = asRecord$6(data?.item);
|
|
212418
|
+
const itemInput = asRecord$6(item?.input);
|
|
212419
|
+
const itemResult = asRecord$6(item?.result);
|
|
212420
|
+
const rawInput = asRecord$6(data?.rawInput);
|
|
212403
212421
|
const direct = [
|
|
212404
212422
|
normalizeCommandValue$1(item?.command),
|
|
212405
212423
|
normalizeCommandValue$1(itemInput?.command),
|
|
@@ -212427,7 +212445,7 @@ function collectPaths(value, paths, seen, depth) {
|
|
|
212427
212445
|
}
|
|
212428
212446
|
return;
|
|
212429
212447
|
}
|
|
212430
|
-
const record = asRecord$
|
|
212448
|
+
const record = asRecord$6(value);
|
|
212431
212449
|
if (!record) return;
|
|
212432
212450
|
for (const key of [
|
|
212433
212451
|
"path",
|
|
@@ -212486,7 +212504,7 @@ function deriveToolActivityPresentation(input) {
|
|
|
212486
212504
|
const title = asTrimmedString(input.title);
|
|
212487
212505
|
const detail = stripTrailingExitCode(asTrimmedString(input.detail));
|
|
212488
212506
|
const fallbackSummary = asTrimmedString(input.fallbackSummary) ?? "Tool";
|
|
212489
|
-
const data = asRecord$
|
|
212507
|
+
const data = asRecord$6(input.data);
|
|
212490
212508
|
const command = extractToolCommand(data, title);
|
|
212491
212509
|
const primaryPath = extractPrimaryPath(data);
|
|
212492
212510
|
const action = classifyToolAction({
|
|
@@ -212510,7 +212528,7 @@ function deriveToolActivityPresentation(input) {
|
|
|
212510
212528
|
...primaryPath ? { detail: primaryPath } : {}
|
|
212511
212529
|
};
|
|
212512
212530
|
if (action === "search") {
|
|
212513
|
-
const query = asTrimmedString(asRecord$
|
|
212531
|
+
const query = asTrimmedString(asRecord$6(data?.rawInput)?.query) ?? asTrimmedString(asRecord$6(data?.rawInput)?.pattern) ?? asTrimmedString(asRecord$6(data?.rawInput)?.searchTerm);
|
|
212514
212532
|
return {
|
|
212515
212533
|
summary: "Searched files",
|
|
212516
212534
|
...query ? { detail: query } : {}
|
|
@@ -258882,7 +258900,7 @@ var import_multicast_dns = /* @__PURE__ */ __toESM((/* @__PURE__ */ __commonJSMi
|
|
|
258882
258900
|
var dgram = __require("dgram");
|
|
258883
258901
|
var thunky = require_thunky();
|
|
258884
258902
|
var events = __require("events");
|
|
258885
|
-
var os
|
|
258903
|
+
var os = __require("os");
|
|
258886
258904
|
var noop = function() {};
|
|
258887
258905
|
module.exports = function(opts) {
|
|
258888
258906
|
if (!opts) opts = {};
|
|
@@ -259013,14 +259031,14 @@ var import_multicast_dns = /* @__PURE__ */ __toESM((/* @__PURE__ */ __commonJSMi
|
|
|
259013
259031
|
return that;
|
|
259014
259032
|
};
|
|
259015
259033
|
function defaultInterface() {
|
|
259016
|
-
var networks = os
|
|
259034
|
+
var networks = os.networkInterfaces();
|
|
259017
259035
|
var names = Object.keys(networks);
|
|
259018
259036
|
for (var i = 0; i < names.length; i++) {
|
|
259019
259037
|
var net = networks[names[i]];
|
|
259020
259038
|
for (var j = 0; j < net.length; j++) {
|
|
259021
259039
|
var iface = net[j];
|
|
259022
259040
|
if (isIPv4(iface.family) && !iface.internal) {
|
|
259023
|
-
if (os
|
|
259041
|
+
if (os.platform() === "darwin" && names[i] === "en0") return iface.address;
|
|
259024
259042
|
return "0.0.0.0";
|
|
259025
259043
|
}
|
|
259026
259044
|
}
|
|
@@ -259028,7 +259046,7 @@ var import_multicast_dns = /* @__PURE__ */ __toESM((/* @__PURE__ */ __commonJSMi
|
|
|
259028
259046
|
return "127.0.0.1";
|
|
259029
259047
|
}
|
|
259030
259048
|
function allInterfaces() {
|
|
259031
|
-
var networks = os
|
|
259049
|
+
var networks = os.networkInterfaces();
|
|
259032
259050
|
var names = Object.keys(networks);
|
|
259033
259051
|
var res = [];
|
|
259034
259052
|
for (var i = 0; i < names.length; i++) {
|
|
@@ -278901,7 +278919,7 @@ function makeApprovedWorkerPlanEventState() {
|
|
|
278901
278919
|
function promptKey(masterThreadId, promptId) {
|
|
278902
278920
|
return `${masterThreadId}\n${promptId}`;
|
|
278903
278921
|
}
|
|
278904
|
-
function asRecord$
|
|
278922
|
+
function asRecord$5(value) {
|
|
278905
278923
|
return typeof value === "object" && value !== null && !Array.isArray(value) ? value : null;
|
|
278906
278924
|
}
|
|
278907
278925
|
function exactMaterializedTaskIds(value, expectedCount) {
|
|
@@ -278911,7 +278929,7 @@ function exactMaterializedTaskIds(value, expectedCount) {
|
|
|
278911
278929
|
}
|
|
278912
278930
|
function readyBatchFromActivity(state, event) {
|
|
278913
278931
|
if (event.payload.activity.kind !== "plan.task-creation.batch-succeeded") return null;
|
|
278914
|
-
const payload = asRecord$
|
|
278932
|
+
const payload = asRecord$5(event.payload.activity.payload);
|
|
278915
278933
|
const promptId = payload?.["promptId"];
|
|
278916
278934
|
if (typeof promptId !== "string") return null;
|
|
278917
278935
|
const key = promptKey(event.payload.threadId, promptId);
|
|
@@ -280049,7 +280067,7 @@ function runtimeGrantNeedsRefresh(token, identity, nowSeconds = Math.floor(Date.
|
|
|
280049
280067
|
return claims.expiresAtSeconds - nowSeconds <= RUNTIME_GRANT_REFRESH_SKEW_SECONDS;
|
|
280050
280068
|
}
|
|
280051
280069
|
/** Narrow an unknown to a plain object, or null. */
|
|
280052
|
-
function asRecord$
|
|
280070
|
+
function asRecord$4(value) {
|
|
280053
280071
|
return value !== null && typeof value === "object" ? value : null;
|
|
280054
280072
|
}
|
|
280055
280073
|
/** The raw (untrimmed) string when it is present and not blank, else null. */
|
|
@@ -280061,7 +280079,7 @@ function asTimestamp(value) {
|
|
|
280061
280079
|
return typeof value === "string" && Number.isFinite(Date.parse(value)) ? value : null;
|
|
280062
280080
|
}
|
|
280063
280081
|
function parseRuntimeGrantRefreshResponse(runtimeId, value) {
|
|
280064
|
-
const data = asRecord$
|
|
280082
|
+
const data = asRecord$4(asRecord$4(value)?.data);
|
|
280065
280083
|
if (!data || data.runtimeId !== runtimeId) return null;
|
|
280066
280084
|
const grantToken = asNonBlankString(data.grantToken);
|
|
280067
280085
|
const expiresAt = asTimestamp(data.expiresAt);
|
|
@@ -296157,6 +296175,74 @@ const LocalAutomationSchedulerLive = effectDiscard(gen(function* () {
|
|
|
296157
296175
|
yield* forkScoped(startup.awaitCommandReady.pipe(andThen(forever$1(tick.pipe(andThen(sleep$4("60 seconds")))))));
|
|
296158
296176
|
}));
|
|
296159
296177
|
//#endregion
|
|
296178
|
+
//#region src/command/providerUsageEnvironment.ts
|
|
296179
|
+
function asRecord$3(value) {
|
|
296180
|
+
return value !== null && typeof value === "object" && !Array.isArray(value) ? value : null;
|
|
296181
|
+
}
|
|
296182
|
+
function positiveInteger(value) {
|
|
296183
|
+
return typeof value === "number" && Number.isSafeInteger(value) && value > 0 ? value : null;
|
|
296184
|
+
}
|
|
296185
|
+
function readEnvironmentId(value) {
|
|
296186
|
+
return typeof value === "string" && value.trim() !== "" ? value : null;
|
|
296187
|
+
}
|
|
296188
|
+
function readEligibleStatus(value) {
|
|
296189
|
+
return value === "running" || value === "suspended" ? value : null;
|
|
296190
|
+
}
|
|
296191
|
+
function isOwnedRuntime(row, ownerUserId) {
|
|
296192
|
+
return positiveInteger(row["userId"]) === ownerUserId;
|
|
296193
|
+
}
|
|
296194
|
+
function readRuntimeId(row) {
|
|
296195
|
+
const runtimeId = row["runtimeId"];
|
|
296196
|
+
return typeof runtimeId === "string" && runtimeId.trim() !== "" ? runtimeId : null;
|
|
296197
|
+
}
|
|
296198
|
+
function readCandidate(runtime, ownerUserId) {
|
|
296199
|
+
const row = asRecord$3(runtime);
|
|
296200
|
+
if (row === null || !isOwnedRuntime(row, ownerUserId) || row["desiredState"] !== "running") return null;
|
|
296201
|
+
const organizationId = positiveInteger(row["organizationId"]);
|
|
296202
|
+
const environmentId = readEnvironmentId(row["environmentId"]);
|
|
296203
|
+
const runtimeId = readRuntimeId(row);
|
|
296204
|
+
const status = readEligibleStatus(row["status"]);
|
|
296205
|
+
if (organizationId === null || environmentId === null || runtimeId === null || status === null) return null;
|
|
296206
|
+
return {
|
|
296207
|
+
organizationId,
|
|
296208
|
+
environmentId,
|
|
296209
|
+
runtimeId,
|
|
296210
|
+
status
|
|
296211
|
+
};
|
|
296212
|
+
}
|
|
296213
|
+
function candidateKey(candidate) {
|
|
296214
|
+
return `${candidate.organizationId}:${candidate.environmentId ?? ""}`;
|
|
296215
|
+
}
|
|
296216
|
+
function statusRank(status) {
|
|
296217
|
+
return status === "running" ? 0 : 1;
|
|
296218
|
+
}
|
|
296219
|
+
function deduplicateCandidates(candidates) {
|
|
296220
|
+
const byEnvironment = /* @__PURE__ */ new Map();
|
|
296221
|
+
for (const candidate of candidates) {
|
|
296222
|
+
const key = candidateKey(candidate);
|
|
296223
|
+
const existing = byEnvironment.get(key);
|
|
296224
|
+
if (existing === void 0 || statusRank(candidate.status) < statusRank(existing.status)) byEnvironment.set(key, candidate);
|
|
296225
|
+
}
|
|
296226
|
+
return [...byEnvironment.values()];
|
|
296227
|
+
}
|
|
296228
|
+
/**
|
|
296229
|
+
* Selects one authenticated owner's Environment from CMMD's projectless runtime
|
|
296230
|
+
* catalog. A tied best candidate fails closed, so Forge never chooses an
|
|
296231
|
+
* organization from browser input.
|
|
296232
|
+
*/
|
|
296233
|
+
function selectProviderUsageEnvironment(rawCatalog, ownerUserId) {
|
|
296234
|
+
const runtimes = asRecord$3(asRecord$3(rawCatalog)?.["data"])?.["runtimes"];
|
|
296235
|
+
if (!Array.isArray(runtimes)) return { kind: "unavailable" };
|
|
296236
|
+
const candidates = deduplicateCandidates(runtimes.map((runtime) => readCandidate(runtime, ownerUserId)).filter((candidate) => candidate !== null));
|
|
296237
|
+
const bestRank = Math.min(...candidates.map((candidate) => statusRank(candidate.status)));
|
|
296238
|
+
const bestCandidates = candidates.filter((candidate) => statusRank(candidate.status) === bestRank);
|
|
296239
|
+
if (bestCandidates.length !== 1) return { kind: "unavailable" };
|
|
296240
|
+
return {
|
|
296241
|
+
kind: "ready",
|
|
296242
|
+
organizationId: bestCandidates[0].organizationId
|
|
296243
|
+
};
|
|
296244
|
+
}
|
|
296245
|
+
//#endregion
|
|
296160
296246
|
//#region src/command/wsToken.ts
|
|
296161
296247
|
/**
|
|
296162
296248
|
* Build the WS token response given an optional PAT and the configured CMMD
|
|
@@ -296193,13 +296279,13 @@ function resolveWsUrl(baseUrl) {
|
|
|
296193
296279
|
const callCmmdTool = legacyCmmdToolBridge.callTool;
|
|
296194
296280
|
const extractMcpToolText = legacyCmmdToolBridge.extractText;
|
|
296195
296281
|
const isCmmdMcpAuthError = legacyCmmdToolBridge.isAuthError;
|
|
296196
|
-
var ClaudeUsageReadError = class extends TaggedError("ClaudeUsageReadError") {};
|
|
296197
296282
|
/**
|
|
296198
296283
|
* CMMD-side path for the PROJECT-keyed Forge Cloud catalog. Shared by the list
|
|
296199
296284
|
* proxy, the SSE poll-and-emit proxy, and the register/unregister proxies so the
|
|
296200
296285
|
* upstream contract lives in exactly one place.
|
|
296201
296286
|
*/
|
|
296202
296287
|
const CMMD_CLOUD_PROJECTS_PATH = "/api/forge/context/cloud-projects";
|
|
296288
|
+
const CMMD_RUNTIMES_PATH = "/api/forge/context/runtimes";
|
|
296203
296289
|
/**
|
|
296204
296290
|
* Authenticate the browser session and resolve the CMMD JWT to forward
|
|
296205
296291
|
* upstream. Returns null when no token could be resolved, which every caller
|
|
@@ -296323,6 +296409,10 @@ const cmmdBillingSeriesRouteLayer = registerProxyRoute({
|
|
|
296323
296409
|
const cmmdRestUnavailable = () => new CmmdProxyAuthenticationRequiredError("CMMD connection required. Reconnect CMMD to continue.");
|
|
296324
296410
|
function runCmmdRestProxy(session, proxy, dependencies = {}) {
|
|
296325
296411
|
return gen(function* () {
|
|
296412
|
+
if (dependencies.jwt !== void 0) {
|
|
296413
|
+
const explicitJwt = dependencies.jwt;
|
|
296414
|
+
return yield* promise(() => (dependencies.runProxy ?? runProxy)(() => proxy(explicitJwt)));
|
|
296415
|
+
}
|
|
296326
296416
|
const resolveJwt = dependencies.resolveJwt ?? resolveCmmdJwtForSession;
|
|
296327
296417
|
const jwt = yield* resolveJwt({
|
|
296328
296418
|
sessionId: session.sessionId,
|
|
@@ -297863,59 +297953,6 @@ const cmmdSetProviderAccountDefaultRouteLayer = registerProxyRoute({
|
|
|
297863
297953
|
orgIdSource: "none",
|
|
297864
297954
|
responseShape: "unwrapData"
|
|
297865
297955
|
});
|
|
297866
|
-
const resolveConnectedClaudeGeneration = (session) => gen(function* () {
|
|
297867
|
-
const outcome = yield* runCmmdRestProxy(session, (jwt) => cmmdGateway.request({
|
|
297868
|
-
method: "GET",
|
|
297869
|
-
jwt,
|
|
297870
|
-
path: "/api/forge/context/providers/claude/credential"
|
|
297871
|
-
}));
|
|
297872
|
-
if (!outcome.ok) return outcome;
|
|
297873
|
-
const state = unwrapForgeEnvelope(outcome.value);
|
|
297874
|
-
if (state === null || typeof state !== "object" || !("connected" in state) || state.connected !== true || !("generationId" in state) || typeof state.generationId !== "string") return {
|
|
297875
|
-
ok: true,
|
|
297876
|
-
value: null
|
|
297877
|
-
};
|
|
297878
|
-
return {
|
|
297879
|
-
ok: true,
|
|
297880
|
-
value: {
|
|
297881
|
-
generationId: state.generationId,
|
|
297882
|
-
generationHash: createHash("sha256").update(state.generationId).digest("hex")
|
|
297883
|
-
}
|
|
297884
|
-
};
|
|
297885
|
-
});
|
|
297886
|
-
/**
|
|
297887
|
-
* The GET path is read-only. The explicit per-account POST refresh invokes
|
|
297888
|
-
* this helper and propagates any CMMD forward failure to the caller.
|
|
297889
|
-
*/
|
|
297890
|
-
const forwardClaudeUsageTelemetry = (session, requestedProviderAccountId, activelyPoll = false, fetchClaudeUsage = fetchClaudeUsageViaOfficialClient) => gen(function* () {
|
|
297891
|
-
const credentialOutcome = yield* resolveConnectedClaudeGeneration(session);
|
|
297892
|
-
if (!credentialOutcome.ok) return credentialOutcome;
|
|
297893
|
-
if (credentialOutcome.value === null) return null;
|
|
297894
|
-
const { generationId, generationHash } = credentialOutcome.value;
|
|
297895
|
-
const providerAccountId = requestedProviderAccountId ?? generationId;
|
|
297896
|
-
const activeSnapshot = activelyPoll && providerAccountId === generationId ? yield* tryPromise({
|
|
297897
|
-
try: () => fetchClaudeUsage({ binaryPath: resolveClaudeBinaryPath("claude") }),
|
|
297898
|
-
catch: (cause) => new ClaudeUsageReadError({ cause })
|
|
297899
|
-
}).pipe(orElseSucceed(() => null)) : null;
|
|
297900
|
-
const snapshot = activeSnapshot ? {
|
|
297901
|
-
...activeSnapshot,
|
|
297902
|
-
observedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
297903
|
-
} : getLatestClaudeRateLimitTelemetry(generationHash, providerAccountId);
|
|
297904
|
-
if (!snapshot) return null;
|
|
297905
|
-
return yield* runCmmdRestProxy(session, (jwt) => cmmdGateway.request({
|
|
297906
|
-
method: "POST",
|
|
297907
|
-
jwt,
|
|
297908
|
-
path: "/api/forge/context/providers/usage/claude/telemetry",
|
|
297909
|
-
body: {
|
|
297910
|
-
providerAccountId,
|
|
297911
|
-
credentialGenerationId: generationId,
|
|
297912
|
-
source: activeSnapshot ? "active_poll" : "passive_sdk_telemetry",
|
|
297913
|
-
fiveHour: snapshot.fiveHour,
|
|
297914
|
-
sevenDay: snapshot.sevenDay,
|
|
297915
|
-
observedAt: snapshot.observedAt
|
|
297916
|
-
}
|
|
297917
|
-
}));
|
|
297918
|
-
});
|
|
297919
297956
|
const cmmdGetProviderUsageRouteLayer = add$1("GET", "/api/cmmd/providers/usage", gen(function* () {
|
|
297920
297957
|
const request = yield* HttpServerRequest;
|
|
297921
297958
|
const outcome = yield* runCmmdRestProxy(yield* (yield* ServerAuth).authenticateHttpRequest(request), (jwt) => cmmdGateway.request({
|
|
@@ -297936,15 +297973,62 @@ function parseProviderUsageRefreshInput(rawBody) {
|
|
|
297936
297973
|
providerAccountId: body.providerAccountId
|
|
297937
297974
|
};
|
|
297938
297975
|
}
|
|
297939
|
-
|
|
297940
|
-
const
|
|
297941
|
-
const
|
|
297942
|
-
|
|
297943
|
-
|
|
297944
|
-
|
|
297945
|
-
|
|
297946
|
-
|
|
297947
|
-
|
|
297976
|
+
function resolveProviderUsageOwnerUserId(session) {
|
|
297977
|
+
const identity = readCmmdUserIdentityForSession(session.sessionId);
|
|
297978
|
+
const userId = identity === null ? NaN : Number(identity.id);
|
|
297979
|
+
return Number.isSafeInteger(userId) && userId > 0 ? userId : null;
|
|
297980
|
+
}
|
|
297981
|
+
function buildClaudeUsageRefreshErrorResponse(error) {
|
|
297982
|
+
return jsonUnsafe({
|
|
297983
|
+
error: "Claude usage refresh is unavailable.",
|
|
297984
|
+
code: "CLAUDE_USAGE_REFRESH_UNAVAILABLE"
|
|
297985
|
+
}, { status: error instanceof CmmdProxyRequestError && error.status === 503 ? 503 : 502 });
|
|
297986
|
+
}
|
|
297987
|
+
function makeRefreshProviderUsageHandler(dependencies = {}) {
|
|
297988
|
+
return gen(function* () {
|
|
297989
|
+
const request = yield* HttpServerRequest;
|
|
297990
|
+
const session = yield* (yield* ServerAuth).authenticateHttpRequest(request);
|
|
297991
|
+
const input = parseProviderUsageRefreshInput(yield* request.json);
|
|
297992
|
+
if (input === null) return jsonUnsafe({ error: "provider and providerAccountId must identify a connected provider account" }, { status: 400 });
|
|
297993
|
+
if (input.provider === "claude") {
|
|
297994
|
+
const requestJwt = yield* (dependencies.resolveJwt ?? resolveCmmdJwtForSession)({
|
|
297995
|
+
sessionId: session.sessionId,
|
|
297996
|
+
subject: session.subject,
|
|
297997
|
+
logPrefix: "claude-usage-refresh"
|
|
297998
|
+
});
|
|
297999
|
+
if (!requestJwt) return buildClaudeUsageRefreshErrorResponse(/* @__PURE__ */ new Error("CMMD authentication required."));
|
|
298000
|
+
const ownerUserId = resolveProviderUsageOwnerUserId(session);
|
|
298001
|
+
if (ownerUserId === null) return jsonUnsafe({
|
|
298002
|
+
error: "CMMD owner identity is unavailable for Claude usage refresh.",
|
|
298003
|
+
code: "CLAUDE_USAGE_ENVIRONMENT_UNAVAILABLE"
|
|
298004
|
+
}, { status: 503 });
|
|
298005
|
+
const catalogOutcome = yield* runCmmdRestProxy(session, (jwt) => cmmdGateway.request({
|
|
298006
|
+
method: "GET",
|
|
298007
|
+
jwt,
|
|
298008
|
+
path: CMMD_RUNTIMES_PATH
|
|
298009
|
+
}), { jwt: requestJwt });
|
|
298010
|
+
if (!catalogOutcome.ok) return buildClaudeUsageRefreshErrorResponse(catalogOutcome.error);
|
|
298011
|
+
const target = selectProviderUsageEnvironment(catalogOutcome.value, ownerUserId);
|
|
298012
|
+
if (target.kind === "unavailable") return jsonUnsafe({
|
|
298013
|
+
error: "No owned Environment with running intent is available for Claude usage refresh.",
|
|
298014
|
+
code: "CLAUDE_USAGE_ENVIRONMENT_UNAVAILABLE"
|
|
298015
|
+
}, { status: 503 });
|
|
298016
|
+
const refreshOutcome = yield* runCmmdRestProxy(session, (jwt) => cmmdGateway.request({
|
|
298017
|
+
method: "POST",
|
|
298018
|
+
jwt,
|
|
298019
|
+
path: "/api/forge/context/providers/usage/claude/refresh",
|
|
298020
|
+
body: { providerAccountId: input.providerAccountId },
|
|
298021
|
+
orgId: String(target.organizationId)
|
|
298022
|
+
}), { jwt: requestJwt });
|
|
298023
|
+
if (!refreshOutcome.ok) return buildClaudeUsageRefreshErrorResponse(refreshOutcome.error);
|
|
298024
|
+
const snapshotOutcome = yield* runCmmdRestProxy(session, (jwt) => cmmdGateway.request({
|
|
298025
|
+
method: "GET",
|
|
298026
|
+
jwt,
|
|
298027
|
+
path: "/api/forge/context/providers/usage"
|
|
298028
|
+
}), { jwt: requestJwt });
|
|
298029
|
+
if (!snapshotOutcome.ok) return buildClaudeUsageRefreshErrorResponse(snapshotOutcome.error);
|
|
298030
|
+
return jsonUnsafe(unwrapForgeEnvelope(snapshotOutcome.value), { status: 200 });
|
|
298031
|
+
}
|
|
297948
298032
|
const refreshOutcome = yield* runCmmdRestProxy(session, (jwt) => cmmdGateway.request({
|
|
297949
298033
|
method: "POST",
|
|
297950
298034
|
jwt,
|
|
@@ -297952,16 +298036,16 @@ const cmmdRefreshProviderUsageRouteLayer = add$1("POST", "/api/cmmd/providers/us
|
|
|
297952
298036
|
body: { providerAccountId: input.providerAccountId }
|
|
297953
298037
|
}));
|
|
297954
298038
|
if (!refreshOutcome.ok) return buildProxyErrorResponse(refreshOutcome.error);
|
|
297955
|
-
|
|
297956
|
-
|
|
297957
|
-
|
|
297958
|
-
|
|
297959
|
-
|
|
297960
|
-
|
|
297961
|
-
|
|
297962
|
-
|
|
297963
|
-
|
|
297964
|
-
|
|
298039
|
+
const snapshotOutcome = yield* runCmmdRestProxy(session, (jwt) => cmmdGateway.request({
|
|
298040
|
+
method: "GET",
|
|
298041
|
+
jwt,
|
|
298042
|
+
path: "/api/forge/context/providers/usage"
|
|
298043
|
+
}));
|
|
298044
|
+
if (!snapshotOutcome.ok) return buildProxyErrorResponse(snapshotOutcome.error);
|
|
298045
|
+
return jsonUnsafe(unwrapForgeEnvelope(snapshotOutcome.value), { status: 200 });
|
|
298046
|
+
}).pipe(catchTag("AuthError", (error) => respondToAuthError(error)));
|
|
298047
|
+
}
|
|
298048
|
+
const cmmdRefreshProviderUsageRouteLayer = add$1("POST", "/api/cmmd/providers/usage/refresh", makeRefreshProviderUsageHandler());
|
|
297965
298049
|
const cmmdGetUserCodexCredentialRouteLayer = registerProxyRoute({
|
|
297966
298050
|
forgePath: "/api/cmmd/providers/codex/credential",
|
|
297967
298051
|
method: "GET",
|
|
@@ -308993,6 +309077,82 @@ const claudeNativeGenerationProofRouteLayer = add$1("GET", "/api/runtime/provide
|
|
|
308993
309077
|
generationHash: yield* readUsableClaudeGenerationHash(config)
|
|
308994
309078
|
});
|
|
308995
309079
|
}));
|
|
309080
|
+
const defaultClaudeUsageRouteDependencies = {
|
|
309081
|
+
readCredential: async (token) => {
|
|
309082
|
+
const base = process.env.FORGE_CMMD_RUNTIME_CONTROL_PLANE_URL?.trim() ?? "";
|
|
309083
|
+
if (!base) return null;
|
|
309084
|
+
const response = await fetch(`${base.replace(/\/+$/u, "")}/api/forge/context/auth-runtime-claude-credential`, {
|
|
309085
|
+
headers: {
|
|
309086
|
+
authorization: `Bearer ${token}`,
|
|
309087
|
+
accept: "application/json"
|
|
309088
|
+
},
|
|
309089
|
+
signal: AbortSignal.timeout(2e4)
|
|
309090
|
+
});
|
|
309091
|
+
return response.ok ? response.text() : null;
|
|
309092
|
+
},
|
|
309093
|
+
createDirectory: () => mkdtemp(join(tmpdir(), "forge-claude-usage-")),
|
|
309094
|
+
writeCredential: (directory, credential) => writeFile(join(directory, ".credentials.json"), credential, { mode: 384 }),
|
|
309095
|
+
loadUsage: (directory) => fetchClaudeUsageViaOfficialClient({
|
|
309096
|
+
binaryPath: resolveClaudeBinaryPath("claude"),
|
|
309097
|
+
claudeConfigDir: directory
|
|
309098
|
+
}),
|
|
309099
|
+
removeDirectory: (directory) => rm(directory, {
|
|
309100
|
+
recursive: true,
|
|
309101
|
+
force: false
|
|
309102
|
+
}),
|
|
309103
|
+
now: () => /* @__PURE__ */ new Date()
|
|
309104
|
+
};
|
|
309105
|
+
const claudeUsageHandler = (dependencies) => gen(function* () {
|
|
309106
|
+
const request = yield* HttpServerRequest;
|
|
309107
|
+
const config = yield* ServerConfig;
|
|
309108
|
+
const token = claudeReadinessToken(request.headers.authorization);
|
|
309109
|
+
const required = completeClaudeReadinessExpectations(config);
|
|
309110
|
+
if (!token || !required) return unauthorizedClaudeReadinessResponse();
|
|
309111
|
+
const claims = verifyCmmdClaudeUsageTicket(token, required);
|
|
309112
|
+
if (!claims) return unauthorizedClaudeReadinessResponse();
|
|
309113
|
+
const claimed = claimClaudeReadinessJti({
|
|
309114
|
+
jti: claims.jti,
|
|
309115
|
+
expiresAtSeconds: claims.expiresAtSeconds,
|
|
309116
|
+
nowSeconds: Math.floor(Date.now() / 1e3)
|
|
309117
|
+
});
|
|
309118
|
+
if (claimed === "replayed") return unauthorizedClaudeReadinessResponse();
|
|
309119
|
+
if (claimed === "capacity_exhausted") return jsonUnsafe({ error: "temporarily_unavailable" }, { status: 503 });
|
|
309120
|
+
return yield* promise(async () => {
|
|
309121
|
+
let directory = null;
|
|
309122
|
+
let response = jsonUnsafe({ error: "temporarily_unavailable" }, { status: 503 });
|
|
309123
|
+
try {
|
|
309124
|
+
directory = await dependencies.createDirectory();
|
|
309125
|
+
const credentialJson = await dependencies.readCredential(token);
|
|
309126
|
+
if (credentialJson !== null && isClaudeSubscriptionCredential(credentialJson)) {
|
|
309127
|
+
await dependencies.writeCredential(directory, credentialJson);
|
|
309128
|
+
const usage = await dependencies.loadUsage(directory);
|
|
309129
|
+
response = jsonUnsafe({
|
|
309130
|
+
fiveHour: usage.fiveHour,
|
|
309131
|
+
sevenDay: usage.sevenDay,
|
|
309132
|
+
observedAt: dependencies.now().toISOString(),
|
|
309133
|
+
receipt: {
|
|
309134
|
+
orgId: claims.orgId,
|
|
309135
|
+
userId: claims.userId,
|
|
309136
|
+
runtimeId: claims.runtimeId,
|
|
309137
|
+
machineId: claims.machineId,
|
|
309138
|
+
credentialEpoch: claims.credentialEpoch,
|
|
309139
|
+
providerAccountId: claims.providerAccountId,
|
|
309140
|
+
credentialGenerationId: claims.generationId
|
|
309141
|
+
}
|
|
309142
|
+
}, { headers: { "cache-control": "no-store" } });
|
|
309143
|
+
}
|
|
309144
|
+
} catch {}
|
|
309145
|
+
if (directory === null) return response;
|
|
309146
|
+
try {
|
|
309147
|
+
await dependencies.removeDirectory(directory);
|
|
309148
|
+
} catch {
|
|
309149
|
+
return jsonUnsafe({ error: "temporarily_unavailable" }, { status: 503 });
|
|
309150
|
+
}
|
|
309151
|
+
return response;
|
|
309152
|
+
});
|
|
309153
|
+
});
|
|
309154
|
+
const createClaudeUsageRouteLayer = (dependencies = defaultClaudeUsageRouteDependencies) => add$1("POST", "/api/runtime/provider-usage/claude", claudeUsageHandler(dependencies));
|
|
309155
|
+
const claudeUsageRouteLayer = createClaudeUsageRouteLayer();
|
|
308996
309156
|
/**
|
|
308997
309157
|
* FINDING-CB1 — workspace readiness SSE endpoint.
|
|
308998
309158
|
*
|
|
@@ -309336,7 +309496,7 @@ const MiscRuntimeLayerLive = mergeAll(AnalyticsServiceLayerLive, OpenLive, Serve
|
|
|
309336
309496
|
const RuntimeDependenciesWithoutPullRequestsLive = ReactorLayerLive.pipe(provideMerge(CheckpointingLayerLive), provideMerge(GitLayerLive), provideMerge(OrchestrationLayerLive), provideMerge(ProviderLayerLive), provideMerge(TerminalLayerLive), provideMerge(AgentBrowserManagerLive), provideMerge(mergeAll(ThreadDevRuntimeLive, DevTunnelLive.pipe(provide$1(ThreadDevRuntimeLive)))), provideMerge(PersistenceLayerLive), provideMerge(KeybindingsLive), provideMerge(ProviderRegistryLive), provideMerge(mergeAll(ServerSettingsLive, UsageServiceLive.pipe(provide$1(ServerSettingsLive)))), provideMerge(WorkspaceLayerLive), provideMerge(WorkspaceReadinessStateLive), provideMerge(ProjectFaviconResolverLive), provideMerge(RepositoryIdentityResolverLive), provideMerge(ServerEnvironmentLive), provideMerge(AuthLayerLive), provideMerge(ServerSecretStoreLayerLive), provideMerge(mergeAll(CloudRedisCoordinationLive, CloudStateSyncLive.pipe(provide$1(PersistenceLayerLive)))), provideMerge(MiscRuntimeLayerLive));
|
|
309337
309497
|
const RuntimeDependenciesLive = pullRequestServiceFactoryLayer.pipe(provideMerge(RuntimeDependenciesWithoutPullRequestsLive), provideMerge(cmmdProjectIdentityResolverLive.pipe(provide$1(RuntimeDependenciesWithoutPullRequestsLive))), provideMerge(pullRequestProviderRuntimeLive));
|
|
309338
309498
|
const RuntimeServicesLive = ServerRuntimeStartupLive.pipe(provideMerge(RuntimeDependenciesLive));
|
|
309339
|
-
const makeRoutesLayer = mergeAll(authBearerBootstrapRouteLayer, authBootstrapRouteLayer, authCommandBearerBootstrapRouteLayer, authCommandBootstrapRouteLayer, authOAuthTokenExchangeRouteLayer, authWebSocketTicketRouteLayer, authCmmdOAuthDeviceRouteLayer, authCmmdOAuthTokenRouteLayer, authCmmdPasswordTokenRouteLayer, authClientsRevokeOthersRouteLayer, authClientsRevokeRouteLayer, authClientsRouteLayer, authLogoutRouteLayer, authPairingLinksRevokeRouteLayer, authPairingLinksRouteLayer, authPairingCredentialRouteLayer, authSessionRouteLayer, authWebSocketTokenRouteLayer, authWebLoginRouteLayer, authWebCallbackRouteLayer, desktopLocalWebBridgePublishRouteLayer, desktopLocalWebBridgeBootstrapRouteLayer, desktopRelayControlPlaneRouteLayer, apiDocsHtmlRouteLayer, apiDocsOpenApiRouteLayer, pulseSignalStateListRouteLayer, pulseSignalStateUpsertRouteLayer, cmmdProfileRouteLayer, cmmdCreateBrainDocRouteLayer, cmmdUpdateTaskRouteLayer, cmmdUpsertTaskPullRequestRouteLayer, ...cmmdPullRequestRouteLayers, cmmdAddTaskCommentRouteLayer, cmmdWorkIntakeRouteLayer, cmmdWsTokenRouteLayer, cmmdSearchTasksRouteLayer, cmmdGetTaskCommentsRouteLayer, cmmdGetProjectCommentsRouteLayer, cmmdAddProjectCommentRouteLayer, cmmdUpdateProjectRouteLayer, cmmdGetOrgMembersRouteLayer, cmmdSimHostsRouteLayer, cmmdSimLeaseReadRouteLayer, cmmdSimLeaseClaimRouteLayer, cmmdSimLeaseReleaseRouteLayer, cmmdSimLeaseRenewRouteLayer, cmmdUploadTaskAttachmentRouteLayer, cmmdGetTaskAttachmentsRouteLayer, cmmdUpdateTaskCommentRouteLayer, cmmdDeleteTaskCommentRouteLayer, cmmdGetProjectRepositoryRouteLayer, cmmdListProjectRepositoriesRouteLayer, cmmdArchiveTaskRouteLayer, cmmdUnarchiveTaskRouteLayer, cmmdListTasksRouteLayer, cmmdCreateTaskRouteLayer, cmmdListCampaignsRouteLayer, cmmdGetCampaignRouteLayer, cmmdCreateCampaignRouteLayer, cmmdUpdateCampaignRouteLayer, cmmdDeleteCampaignRouteLayer, cmmdListSavedViewsRouteLayer, cmmdCreateSavedViewRouteLayer, cmmdImportSavedViewRouteLayer, cmmdUpdateSavedViewRouteLayer, cmmdDeleteSavedViewRouteLayer, cmmdListProjectsRouteLayer, cmmdGetProjectRouteLayer, cmmdCreateProjectRouteLayer, cmmdDeleteProjectRouteLayer, cmmdMoveProjectRouteLayer, cmmdGetProjectMembersRouteLayer, cmmdListWorkspaceMembersRouteLayer, cmmdAddProjectMemberRouteLayer, cmmdGetProjectMilestonesRouteLayer, cmmdCreateProjectMilestoneRouteLayer, cmmdUpdateProjectMilestoneRouteLayer, cmmdDeleteProjectMilestoneRouteLayer, cmmdGetProjectUpdatesRouteLayer, cmmdCreateProjectUpdateRouteLayer, cmmdUpdateProjectUpdateRouteLayer, cmmdDeleteProjectUpdateRouteLayer, cmmdImproveProjectContentRouteLayer, cmmdCreateProjectTaskDraftRouteLayer, cmmdGetProjectTaskDraftRouteLayer, cmmdUpdateProjectTaskDraftRouteLayer, cmmdPreviewProjectTaskDraftRouteLayer, cmmdCommitProjectTaskDraftRouteLayer, cmmdDiscardProjectTaskDraftRouteLayer, cmmdGetProjectLeadPlanRouteLayer, cmmdActivateProjectLeadAuthorityRouteLayer, cmmdGetProjectLeadReadinessRouteLayer, cmmdGetProjectLeadCapabilitiesRouteLayer, cmmdGetProjectLeadSummaryRouteLayer, cmmdGetProjectLeadDetailRouteLayer, cmmdGetProjectLeadBriefingRouteLayer, cmmdListProjectLeadEventsRouteLayer, cmmdExplainProjectLeadRouteLayer, cmmdPauseProjectLeadRouteLayer, cmmdResumeProjectLeadRouteLayer, cmmdReserveProjectLeadTaskRouteLayer, cmmdReleaseProjectLeadReservationRouteLayer, cmmdReconcileProjectLeadRouteLayer, cmmdResolveProjectLeadAttentionRouteLayer, cmmdClaimProjectLeadControllerRouteLayer, cmmdRenewProjectLeadControllerClaimRouteLayer, cmmdYieldProjectLeadControllerClaimRouteLayer, cmmdAcknowledgeProjectLeadControllerEventRouteLayer, cmmdRecordProjectLeadControllerDecisionRouteLayer, cmmdListForgeAutomationPresetsRouteLayer, cmmdListUserForgeAutomationRulesRouteLayer, cmmdCreateUserForgeAutomationRuleRouteLayer, cmmdUpdateUserForgeAutomationRuleRouteLayer, cmmdListUserForgeAutomationRunsRouteLayer, cmmdStartUserForgeAutomationRunRouteLayer, cmmdListForgeAutomationRulesRouteLayer, cmmdCreateForgeAutomationRuleRouteLayer, cmmdUpdateForgeAutomationRuleRouteLayer, cmmdListForgeAutomationRunsRouteLayer, cmmdStartForgeAutomationRunRouteLayer, cmmdGetForgeAutomationRunRouteLayer, cmmdRetryForgeAutomationRunRouteLayer, cmmdCancelForgeAutomationRunRouteLayer, cmmdApproveForgeAutomationEscalationRouteLayer, cmmdRejectForgeAutomationEscalationRouteLayer, cmmdListProjectAgentMembersRouteLayer, cmmdCreateProjectAgentMemberRouteLayer, cmmdGetProjectAgentMemberRouteLayer, cmmdRenameProjectAgentMemberRouteLayer, cmmdRetireProjectAgentMemberRouteLayer, cmmdUpdateProjectAgentMemberAvatarRouteLayer, cmmdListProjectAgentMemberInstancesRouteLayer, cmmdPreviewProjectAgentMemberConsolidationRouteLayer, cmmdApplyProjectAgentMemberConsolidationRouteLayer, cmmdPutProjectTaskAssignmentRouteLayer, cmmdListProjectBoardRouteLayer, cmmdGetProjectTaskWorkflowRouteLayer, cmmdUpdateProjectTaskWorkflowRouteLayer, cmmdCreateProjectBoardTaskRouteLayer, cmmdUpdateProjectBoardTaskRouteLayer, cmmdUpdateProjectBoardTaskStatusRouteLayer, cmmdListTaskExecutionOptionsRouteLayer, cmmdCreateTaskWorkSessionRouteLayer, cmmdListProjectWorkSessionsRouteLayer, cmmdGetWorkSessionRouteLayer, cmmdUpdateWorkSessionRouteLayer, cmmdAttachWorkSessionThreadRouteLayer, cmmdListTaskConversationsRouteLayer, cmmdLinkTaskConversationRouteLayer, cmmdGetTaskHistoryRouteLayer, cmmdGetTaskConversationRouteLayer, cmmdSpawnForgeThreadFromBoardTaskRouteLayer, cmmdListCenterBoardRouteLayer, cmmdCreateCenterBoardTaskRouteLayer, cmmdCreateFeedbackRouteLayer, cmmdUpdateCenterBoardTaskRouteLayer, cmmdMoveCenterBoardTaskRouteLayer, cmmdMoveProjectBoardTaskRouteLayer, cmmdArchiveProjectBoardTaskRouteLayer, cmmdUnarchiveProjectBoardTaskRouteLayer, cmmdArchiveCenterBoardTaskRouteLayer, cmmdUnarchiveCenterBoardTaskRouteLayer, cmmdBootstrapRouteLayer, cmmdGetAccountPreferencesRouteLayer, cmmdUpdateAccountPreferencesRouteLayer, cmmdGetOrgProviderPolicyRouteLayer, cmmdListChatsRouteLayer, cmmdGetChatRouteLayer, cmmdListDevicesRouteLayer, runtimeReplicationStatusRouteLayer, cmmdRegisterDeviceRouteLayer, cmmdHeartbeatRuntimeRouteLayer, cmmdGrantRuntimeAccessRouteLayer, cmmdRevokeRuntimeAccessRouteLayer, cmmdCreateRelayControlRouteLayer, cmmdCreateRelayActionGrantRouteLayer, cmmdReplaceRuntimeInventoryRouteLayer, cmmdListRuntimeInventoryRouteLayer, cmmdGetRuntimeDiagnosticsRouteLayer, cmmdProvisionAuthRuntimeRouteLayer, cmmdGetAuthRuntimeRouteLayer, cmmdDestroyAuthRuntimeRouteLayer, cmmdConnectAuthRuntimeRouteLayer, cmmdGetProviderAccountsRouteLayer, cmmdDeleteProviderAccountRouteLayer, cmmdSetProviderAccountDefaultRouteLayer, cmmdGetProviderUsageRouteLayer, cmmdRefreshProviderUsageRouteLayer, cmmdGetUserCodexCredentialRouteLayer, cmmdDeleteUserCodexCredentialRouteLayer, cmmdGetUserClaudeCredentialRouteLayer, cmmdDeleteUserClaudeCredentialRouteLayer, cmmdGetClaudeRuntimeReadinessRouteLayer, cmmdAppendRuntimeThreadEventsRouteLayer, cmmdGetRuntimeThreadReplicaRouteLayer, cmmdRenameDeviceRouteLayer, cmmdRevokeDeviceRouteLayer, cmmdInstallConnectorRouteLayer, cmmdListConnectorsRouteLayer, cmmdForgeCloudProjectsListRouteLayer, cmmdForgeCloudProjectsEventsRouteLayer, cmmdForgeCloudProjectRegisterRouteLayer, cmmdForgeCloudProjectUnregisterRouteLayer, cmmdForgeCloudProjectLifecyclePreflightRouteLayer, cmmdForgeCloudProjectRemovalRouteLayer, cmmdForgeCloudProjectRemovalPreviewRouteLayer, cmmdForgeCloudProjectRemovalReceiptRouteLayer, cmmdForgeRuntimesEnsureRouteLayer, cmmdForgeRuntimesConnectRouteLayer, ownerRuntimeCodexReadinessRouteLayer, cmmdForgeRuntimesStatusRouteLayer, cmmdForgeRuntimesStartRouteLayer, cmmdForgeRuntimesStopRouteLayer, cmmdForgeRuntimesRecycleRouteLayer, cmmdForgeRuntimesUpdateCommitRouteLayer, cmmdForgeRuntimesDestroyRouteLayer, cmmdGetTaskRouteLayer, commandUpdateTaskRouteLayer, mobileProviderCatalogRouteLayer, cmmdUsageSummaryRouteLayer, cmmdBillingRouteLayer, cmmdBillingSeriesRouteLayer, attachmentsRouteLayer, orchestrationDispatchRouteLayer, orchestrationCmmdWorkRunEventRouteLayer, orchestrationAutomationStartThreadRouteLayer, orchestrationAutomationRebindRouteLayer, orchestrationAutomationTerminalReconcileRouteLayer, mobileGitRunStackedActionRouteLayer, pullRequestDiffRouteLayer, orchestrationSnapshotRouteLayer, localAutomationListRouteLayer, localAutomationCreateRouteLayer, localAutomationUpdateRouteLayer, localAutomationDeleteRouteLayer, localAutomationRunRouteLayer, otlpTracesProxyRouteLayer, devTunnelProxyRouteLayer, devTunnelLocalPortProxyRouteLayer, projectFaviconRouteLayer, serverEnvironmentRouteLayer, browserWebRtcReadinessRouteLayer, staticAndDevRouteLayer, githubStatusRouteLayer, githubAuthorizeUrlRouteLayer, githubDisconnectRouteLayer, githubReposRouteLayer, githubCloneRouteLayer, githubCloneJobStartRouteLayer, githubCloneJobStatusRouteLayer, githubRefreshCredentialsRouteLayer, githubToolConfirmationApproveRouteLayer, projectLinkGetRouteLayer, projectLinkListRouteLayer, projectLinkSetRouteLayer, projectLinkDeleteRouteLayer, cmmdWorkspacesRouteLayer, cmmdCampaignsRouteLayer, cmmdProjectLinksRouteLayer, cmmdEnsureGitHubProjectContextRouteLayer, cmmdProjectRepositoryEnsureRouteLayer, cmmdProjectsGetRouteLayer, cmmdProjectsCreateRouteLayer, workspaceReadinessRouteLayer, runtimeLivenessRouteLayer, claudeNativeGenerationProofRouteLayer, codexRuntimeProviderReadinessRouteLayer, runtimeDiagnosticsRouteLayer, cloudFoldersRouteLayer, cloudProjectCreateRouteLayer, gitUrlCloneRouteLayer, websocketRpcRouteLayer).pipe(provide$1(browserApiCorsLayer));
|
|
309499
|
+
const makeRoutesLayer = mergeAll(authBearerBootstrapRouteLayer, authBootstrapRouteLayer, authCommandBearerBootstrapRouteLayer, authCommandBootstrapRouteLayer, authOAuthTokenExchangeRouteLayer, authWebSocketTicketRouteLayer, authCmmdOAuthDeviceRouteLayer, authCmmdOAuthTokenRouteLayer, authCmmdPasswordTokenRouteLayer, authClientsRevokeOthersRouteLayer, authClientsRevokeRouteLayer, authClientsRouteLayer, authLogoutRouteLayer, authPairingLinksRevokeRouteLayer, authPairingLinksRouteLayer, authPairingCredentialRouteLayer, authSessionRouteLayer, authWebSocketTokenRouteLayer, authWebLoginRouteLayer, authWebCallbackRouteLayer, desktopLocalWebBridgePublishRouteLayer, desktopLocalWebBridgeBootstrapRouteLayer, desktopRelayControlPlaneRouteLayer, apiDocsHtmlRouteLayer, apiDocsOpenApiRouteLayer, pulseSignalStateListRouteLayer, pulseSignalStateUpsertRouteLayer, cmmdProfileRouteLayer, cmmdCreateBrainDocRouteLayer, cmmdUpdateTaskRouteLayer, cmmdUpsertTaskPullRequestRouteLayer, ...cmmdPullRequestRouteLayers, cmmdAddTaskCommentRouteLayer, cmmdWorkIntakeRouteLayer, cmmdWsTokenRouteLayer, cmmdSearchTasksRouteLayer, cmmdGetTaskCommentsRouteLayer, cmmdGetProjectCommentsRouteLayer, cmmdAddProjectCommentRouteLayer, cmmdUpdateProjectRouteLayer, cmmdGetOrgMembersRouteLayer, cmmdSimHostsRouteLayer, cmmdSimLeaseReadRouteLayer, cmmdSimLeaseClaimRouteLayer, cmmdSimLeaseReleaseRouteLayer, cmmdSimLeaseRenewRouteLayer, cmmdUploadTaskAttachmentRouteLayer, cmmdGetTaskAttachmentsRouteLayer, cmmdUpdateTaskCommentRouteLayer, cmmdDeleteTaskCommentRouteLayer, cmmdGetProjectRepositoryRouteLayer, cmmdListProjectRepositoriesRouteLayer, cmmdArchiveTaskRouteLayer, cmmdUnarchiveTaskRouteLayer, cmmdListTasksRouteLayer, cmmdCreateTaskRouteLayer, cmmdListCampaignsRouteLayer, cmmdGetCampaignRouteLayer, cmmdCreateCampaignRouteLayer, cmmdUpdateCampaignRouteLayer, cmmdDeleteCampaignRouteLayer, cmmdListSavedViewsRouteLayer, cmmdCreateSavedViewRouteLayer, cmmdImportSavedViewRouteLayer, cmmdUpdateSavedViewRouteLayer, cmmdDeleteSavedViewRouteLayer, cmmdListProjectsRouteLayer, cmmdGetProjectRouteLayer, cmmdCreateProjectRouteLayer, cmmdDeleteProjectRouteLayer, cmmdMoveProjectRouteLayer, cmmdGetProjectMembersRouteLayer, cmmdListWorkspaceMembersRouteLayer, cmmdAddProjectMemberRouteLayer, cmmdGetProjectMilestonesRouteLayer, cmmdCreateProjectMilestoneRouteLayer, cmmdUpdateProjectMilestoneRouteLayer, cmmdDeleteProjectMilestoneRouteLayer, cmmdGetProjectUpdatesRouteLayer, cmmdCreateProjectUpdateRouteLayer, cmmdUpdateProjectUpdateRouteLayer, cmmdDeleteProjectUpdateRouteLayer, cmmdImproveProjectContentRouteLayer, cmmdCreateProjectTaskDraftRouteLayer, cmmdGetProjectTaskDraftRouteLayer, cmmdUpdateProjectTaskDraftRouteLayer, cmmdPreviewProjectTaskDraftRouteLayer, cmmdCommitProjectTaskDraftRouteLayer, cmmdDiscardProjectTaskDraftRouteLayer, cmmdGetProjectLeadPlanRouteLayer, cmmdActivateProjectLeadAuthorityRouteLayer, cmmdGetProjectLeadReadinessRouteLayer, cmmdGetProjectLeadCapabilitiesRouteLayer, cmmdGetProjectLeadSummaryRouteLayer, cmmdGetProjectLeadDetailRouteLayer, cmmdGetProjectLeadBriefingRouteLayer, cmmdListProjectLeadEventsRouteLayer, cmmdExplainProjectLeadRouteLayer, cmmdPauseProjectLeadRouteLayer, cmmdResumeProjectLeadRouteLayer, cmmdReserveProjectLeadTaskRouteLayer, cmmdReleaseProjectLeadReservationRouteLayer, cmmdReconcileProjectLeadRouteLayer, cmmdResolveProjectLeadAttentionRouteLayer, cmmdClaimProjectLeadControllerRouteLayer, cmmdRenewProjectLeadControllerClaimRouteLayer, cmmdYieldProjectLeadControllerClaimRouteLayer, cmmdAcknowledgeProjectLeadControllerEventRouteLayer, cmmdRecordProjectLeadControllerDecisionRouteLayer, cmmdListForgeAutomationPresetsRouteLayer, cmmdListUserForgeAutomationRulesRouteLayer, cmmdCreateUserForgeAutomationRuleRouteLayer, cmmdUpdateUserForgeAutomationRuleRouteLayer, cmmdListUserForgeAutomationRunsRouteLayer, cmmdStartUserForgeAutomationRunRouteLayer, cmmdListForgeAutomationRulesRouteLayer, cmmdCreateForgeAutomationRuleRouteLayer, cmmdUpdateForgeAutomationRuleRouteLayer, cmmdListForgeAutomationRunsRouteLayer, cmmdStartForgeAutomationRunRouteLayer, cmmdGetForgeAutomationRunRouteLayer, cmmdRetryForgeAutomationRunRouteLayer, cmmdCancelForgeAutomationRunRouteLayer, cmmdApproveForgeAutomationEscalationRouteLayer, cmmdRejectForgeAutomationEscalationRouteLayer, cmmdListProjectAgentMembersRouteLayer, cmmdCreateProjectAgentMemberRouteLayer, cmmdGetProjectAgentMemberRouteLayer, cmmdRenameProjectAgentMemberRouteLayer, cmmdRetireProjectAgentMemberRouteLayer, cmmdUpdateProjectAgentMemberAvatarRouteLayer, cmmdListProjectAgentMemberInstancesRouteLayer, cmmdPreviewProjectAgentMemberConsolidationRouteLayer, cmmdApplyProjectAgentMemberConsolidationRouteLayer, cmmdPutProjectTaskAssignmentRouteLayer, cmmdListProjectBoardRouteLayer, cmmdGetProjectTaskWorkflowRouteLayer, cmmdUpdateProjectTaskWorkflowRouteLayer, cmmdCreateProjectBoardTaskRouteLayer, cmmdUpdateProjectBoardTaskRouteLayer, cmmdUpdateProjectBoardTaskStatusRouteLayer, cmmdListTaskExecutionOptionsRouteLayer, cmmdCreateTaskWorkSessionRouteLayer, cmmdListProjectWorkSessionsRouteLayer, cmmdGetWorkSessionRouteLayer, cmmdUpdateWorkSessionRouteLayer, cmmdAttachWorkSessionThreadRouteLayer, cmmdListTaskConversationsRouteLayer, cmmdLinkTaskConversationRouteLayer, cmmdGetTaskHistoryRouteLayer, cmmdGetTaskConversationRouteLayer, cmmdSpawnForgeThreadFromBoardTaskRouteLayer, cmmdListCenterBoardRouteLayer, cmmdCreateCenterBoardTaskRouteLayer, cmmdCreateFeedbackRouteLayer, cmmdUpdateCenterBoardTaskRouteLayer, cmmdMoveCenterBoardTaskRouteLayer, cmmdMoveProjectBoardTaskRouteLayer, cmmdArchiveProjectBoardTaskRouteLayer, cmmdUnarchiveProjectBoardTaskRouteLayer, cmmdArchiveCenterBoardTaskRouteLayer, cmmdUnarchiveCenterBoardTaskRouteLayer, cmmdBootstrapRouteLayer, cmmdGetAccountPreferencesRouteLayer, cmmdUpdateAccountPreferencesRouteLayer, cmmdGetOrgProviderPolicyRouteLayer, cmmdListChatsRouteLayer, cmmdGetChatRouteLayer, cmmdListDevicesRouteLayer, runtimeReplicationStatusRouteLayer, cmmdRegisterDeviceRouteLayer, cmmdHeartbeatRuntimeRouteLayer, cmmdGrantRuntimeAccessRouteLayer, cmmdRevokeRuntimeAccessRouteLayer, cmmdCreateRelayControlRouteLayer, cmmdCreateRelayActionGrantRouteLayer, cmmdReplaceRuntimeInventoryRouteLayer, cmmdListRuntimeInventoryRouteLayer, cmmdGetRuntimeDiagnosticsRouteLayer, cmmdProvisionAuthRuntimeRouteLayer, cmmdGetAuthRuntimeRouteLayer, cmmdDestroyAuthRuntimeRouteLayer, cmmdConnectAuthRuntimeRouteLayer, cmmdGetProviderAccountsRouteLayer, cmmdDeleteProviderAccountRouteLayer, cmmdSetProviderAccountDefaultRouteLayer, cmmdGetProviderUsageRouteLayer, cmmdRefreshProviderUsageRouteLayer, cmmdGetUserCodexCredentialRouteLayer, cmmdDeleteUserCodexCredentialRouteLayer, cmmdGetUserClaudeCredentialRouteLayer, cmmdDeleteUserClaudeCredentialRouteLayer, cmmdGetClaudeRuntimeReadinessRouteLayer, cmmdAppendRuntimeThreadEventsRouteLayer, cmmdGetRuntimeThreadReplicaRouteLayer, cmmdRenameDeviceRouteLayer, cmmdRevokeDeviceRouteLayer, cmmdInstallConnectorRouteLayer, cmmdListConnectorsRouteLayer, cmmdForgeCloudProjectsListRouteLayer, cmmdForgeCloudProjectsEventsRouteLayer, cmmdForgeCloudProjectRegisterRouteLayer, cmmdForgeCloudProjectUnregisterRouteLayer, cmmdForgeCloudProjectLifecyclePreflightRouteLayer, cmmdForgeCloudProjectRemovalRouteLayer, cmmdForgeCloudProjectRemovalPreviewRouteLayer, cmmdForgeCloudProjectRemovalReceiptRouteLayer, cmmdForgeRuntimesEnsureRouteLayer, cmmdForgeRuntimesConnectRouteLayer, ownerRuntimeCodexReadinessRouteLayer, cmmdForgeRuntimesStatusRouteLayer, cmmdForgeRuntimesStartRouteLayer, cmmdForgeRuntimesStopRouteLayer, cmmdForgeRuntimesRecycleRouteLayer, cmmdForgeRuntimesUpdateCommitRouteLayer, cmmdForgeRuntimesDestroyRouteLayer, cmmdGetTaskRouteLayer, commandUpdateTaskRouteLayer, mobileProviderCatalogRouteLayer, cmmdUsageSummaryRouteLayer, cmmdBillingRouteLayer, cmmdBillingSeriesRouteLayer, attachmentsRouteLayer, orchestrationDispatchRouteLayer, orchestrationCmmdWorkRunEventRouteLayer, orchestrationAutomationStartThreadRouteLayer, orchestrationAutomationRebindRouteLayer, orchestrationAutomationTerminalReconcileRouteLayer, mobileGitRunStackedActionRouteLayer, pullRequestDiffRouteLayer, orchestrationSnapshotRouteLayer, localAutomationListRouteLayer, localAutomationCreateRouteLayer, localAutomationUpdateRouteLayer, localAutomationDeleteRouteLayer, localAutomationRunRouteLayer, otlpTracesProxyRouteLayer, devTunnelProxyRouteLayer, devTunnelLocalPortProxyRouteLayer, projectFaviconRouteLayer, serverEnvironmentRouteLayer, browserWebRtcReadinessRouteLayer, staticAndDevRouteLayer, githubStatusRouteLayer, githubAuthorizeUrlRouteLayer, githubDisconnectRouteLayer, githubReposRouteLayer, githubCloneRouteLayer, githubCloneJobStartRouteLayer, githubCloneJobStatusRouteLayer, githubRefreshCredentialsRouteLayer, githubToolConfirmationApproveRouteLayer, projectLinkGetRouteLayer, projectLinkListRouteLayer, projectLinkSetRouteLayer, projectLinkDeleteRouteLayer, cmmdWorkspacesRouteLayer, cmmdCampaignsRouteLayer, cmmdProjectLinksRouteLayer, cmmdEnsureGitHubProjectContextRouteLayer, cmmdProjectRepositoryEnsureRouteLayer, cmmdProjectsGetRouteLayer, cmmdProjectsCreateRouteLayer, workspaceReadinessRouteLayer, runtimeLivenessRouteLayer, claudeNativeGenerationProofRouteLayer, claudeUsageRouteLayer, codexRuntimeProviderReadinessRouteLayer, runtimeDiagnosticsRouteLayer, cloudFoldersRouteLayer, cloudProjectCreateRouteLayer, gitUrlCloneRouteLayer, websocketRpcRouteLayer).pipe(provide$1(browserApiCorsLayer));
|
|
309340
309500
|
const runServer = launch$1(unwrap(gen(function* () {
|
|
309341
309501
|
const config = yield* ServerConfig;
|
|
309342
309502
|
fixPath();
|
|
@@ -310266,7 +310426,7 @@ const connectLoginCommand = make$32("login", {
|
|
|
310266
310426
|
})).json();
|
|
310267
310427
|
},
|
|
310268
310428
|
openBrowser: async (url) => {
|
|
310269
|
-
const open = (await import("./open-
|
|
310429
|
+
const open = (await import("./open-D8mGyWmt.mjs")).default;
|
|
310270
310430
|
await open(url);
|
|
310271
310431
|
return true;
|
|
310272
310432
|
},
|