@cmmd-center/forge 0.9.12 → 0.9.14
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 +331 -140
- package/dist/bin.mjs +328 -138
- package/dist/client/assets/{CanvasPanel-CNtJjkFi.js → CanvasPanel-Dc8j2ouo.js} +2 -2
- package/dist/client/assets/{CompositeItem-BYLWaYF6.js → CompositeItem-Cn5DdObI.js} +2 -2
- package/dist/client/assets/{DiffPanel-BilYcllQ.js → DiffPanel-CRdkVPEz.js} +3 -3
- package/dist/client/assets/{DiffPanel.logic-Caky6F_f.js → DiffPanel.logic-BIPcNz_o.js} +2 -2
- package/dist/client/assets/DiffPanelShell-tIdXu7mn.js +2531 -0
- package/dist/client/assets/{DiffWorkerPoolProvider-CTUAka0e.js → DiffWorkerPoolProvider-tFSGuVfC.js} +51 -51
- package/dist/client/assets/PullRequestCodePanel-inwJYfZC.js +5 -0
- package/dist/client/assets/{Virtualizer-CFg_81uW.js → Virtualizer-DeKxnAeU.js} +2 -2
- package/dist/client/assets/{canvasStateStore-BdDORpO9.js → canvasStateStore-Dlm4tanv.js} +2 -2
- package/dist/client/assets/{cmmdAuthRedirect-CrxxHqHr.js → cmmdAuthRedirect-C1FjO86g.js} +2 -2
- package/dist/client/assets/index-4a61qSZ4.css +1 -0
- package/dist/client/assets/{index-BUY6pZDx.js → index-Bublmabf.js} +59 -59
- package/dist/client/assets/src-DljvAdHI.js +3 -0
- package/dist/client/assets/{toggle-BUlphA25.js → toggle-It2CvaLA.js} +2 -2
- package/dist/client/assets/{useTriggerFocusGuards-D2jbdUMe.js → useTriggerFocusGuards-DfUh9uvu.js} +2 -2
- package/dist/client/index.html +11 -11
- 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/DiffPanelShell-DXP_jwHj.js +0 -2531
- package/dist/client/assets/PullRequestCodePanel-4bf4PYHp.js +0 -5
- package/dist/client/assets/index-BydoCpMZ.css +0 -1
- package/dist/client/assets/src-Dqe_-4FQ.js +0 -3
package/dist/bin.cjs
CHANGED
|
@@ -12,7 +12,7 @@ const require_Cache = require("./Cache-U1fkdGvV.cjs");
|
|
|
12
12
|
const require_SqlError = require("./SqlError-CSsHBaKF.cjs");
|
|
13
13
|
const require_Mime = require("./Mime-Bilnh8zE.cjs");
|
|
14
14
|
const require_esm = require("./esm-BZhXwX5p.cjs");
|
|
15
|
-
const require_runtimeControlAuthority = require("./runtimeControlAuthority-
|
|
15
|
+
const require_runtimeControlAuthority = require("./runtimeControlAuthority-BdIovv-r.cjs");
|
|
16
16
|
const require_PTY = require("./PTY-CNa0j0w2.cjs");
|
|
17
17
|
let node_child_process = require("node:child_process");
|
|
18
18
|
node_child_process = require_chunk.__toESM(node_child_process);
|
|
@@ -32319,7 +32319,7 @@ function requiredString(value, minimumLength = 1) {
|
|
|
32319
32319
|
if (typeof value !== "string" || value.length < minimumLength) return identityCorrupt();
|
|
32320
32320
|
return value;
|
|
32321
32321
|
}
|
|
32322
|
-
function positiveInteger$
|
|
32322
|
+
function positiveInteger$2(value) {
|
|
32323
32323
|
if (!Number.isInteger(value) || Number(value) <= 0) return identityCorrupt();
|
|
32324
32324
|
return Number(value);
|
|
32325
32325
|
}
|
|
@@ -32339,7 +32339,7 @@ function parseChallenge(value) {
|
|
|
32339
32339
|
if (!value || typeof value !== "object") return identityCorrupt();
|
|
32340
32340
|
const record = value;
|
|
32341
32341
|
return {
|
|
32342
|
-
deviceId: positiveInteger$
|
|
32342
|
+
deviceId: positiveInteger$2(record.deviceId),
|
|
32343
32343
|
challengeId: requiredString(record.challengeId, 8),
|
|
32344
32344
|
signingPayload: requiredString(record.signingPayload),
|
|
32345
32345
|
currentKeyId: requiredString(record.currentKeyId),
|
|
@@ -65123,7 +65123,7 @@ function normalizeNumberish(value) {
|
|
|
65123
65123
|
}
|
|
65124
65124
|
//#endregion
|
|
65125
65125
|
//#region package.json
|
|
65126
|
-
var version$1 = "0.9.
|
|
65126
|
+
var version$1 = "0.9.14";
|
|
65127
65127
|
//#endregion
|
|
65128
65128
|
//#region src/sentry.ts
|
|
65129
65129
|
const SERVER_APP_NAME = "forge-server";
|
|
@@ -65596,7 +65596,7 @@ function readCmmdAvatarUrl(raw) {
|
|
|
65596
65596
|
function readTrimmedString$2(value) {
|
|
65597
65597
|
return typeof value === "string" ? value.trim() || null : null;
|
|
65598
65598
|
}
|
|
65599
|
-
function asRecord$
|
|
65599
|
+
function asRecord$12(value) {
|
|
65600
65600
|
return value && typeof value === "object" ? value : null;
|
|
65601
65601
|
}
|
|
65602
65602
|
function readDirectPlanLabelFromRecord(obj) {
|
|
@@ -65608,26 +65608,26 @@ function readNestedPlanLabelFromRecord(obj) {
|
|
|
65608
65608
|
function readCmmdPlanLabel(obj) {
|
|
65609
65609
|
const direct = readDirectPlanLabelFromRecord(obj);
|
|
65610
65610
|
if (direct) return direct;
|
|
65611
|
-
const plan = asRecord$
|
|
65611
|
+
const plan = asRecord$12(obj["plan"]);
|
|
65612
65612
|
if (plan) {
|
|
65613
65613
|
const label = readNestedPlanLabelFromRecord(plan);
|
|
65614
65614
|
if (label) return label;
|
|
65615
65615
|
}
|
|
65616
|
-
const subscription = asRecord$
|
|
65616
|
+
const subscription = asRecord$12(obj["subscription"]);
|
|
65617
65617
|
if (subscription) {
|
|
65618
65618
|
const label = readNestedPlanLabelFromRecord(subscription);
|
|
65619
65619
|
if (label) return label;
|
|
65620
|
-
const subscriptionPlan = asRecord$
|
|
65620
|
+
const subscriptionPlan = asRecord$12(subscription["plan"]);
|
|
65621
65621
|
if (subscriptionPlan) {
|
|
65622
65622
|
const nestedLabel = readNestedPlanLabelFromRecord(subscriptionPlan);
|
|
65623
65623
|
if (nestedLabel) return nestedLabel;
|
|
65624
65624
|
}
|
|
65625
65625
|
}
|
|
65626
|
-
const billing = asRecord$
|
|
65626
|
+
const billing = asRecord$12(obj["billing"]);
|
|
65627
65627
|
if (billing) {
|
|
65628
65628
|
const label = readNestedPlanLabelFromRecord(billing);
|
|
65629
65629
|
if (label) return label;
|
|
65630
|
-
const billingPlan = asRecord$
|
|
65630
|
+
const billingPlan = asRecord$12(billing["plan"]);
|
|
65631
65631
|
if (billingPlan) return readNestedPlanLabelFromRecord(billingPlan);
|
|
65632
65632
|
}
|
|
65633
65633
|
return null;
|
|
@@ -65764,7 +65764,7 @@ function constantTimeEqual(left, right) {
|
|
|
65764
65764
|
function integerSeconds(value) {
|
|
65765
65765
|
return Number.isSafeInteger(value) && value >= 0 ? value : null;
|
|
65766
65766
|
}
|
|
65767
|
-
function positiveInteger(value) {
|
|
65767
|
+
function positiveInteger$1(value) {
|
|
65768
65768
|
return Number.isSafeInteger(value) && value > 0 ? value : null;
|
|
65769
65769
|
}
|
|
65770
65770
|
function parseAssertion(token) {
|
|
@@ -65791,7 +65791,7 @@ function hasExpectedPayloadContext(payload) {
|
|
|
65791
65791
|
function readRequiredClaims(payload) {
|
|
65792
65792
|
const subject = nonEmptyString$1(payload["sub"]);
|
|
65793
65793
|
if (!subject) return null;
|
|
65794
|
-
const userId = positiveInteger(payload["user_id"]);
|
|
65794
|
+
const userId = positiveInteger$1(payload["user_id"]);
|
|
65795
65795
|
if (!userId) return null;
|
|
65796
65796
|
const jti = nonEmptyString$1(payload["jti"]);
|
|
65797
65797
|
if (!jti) return null;
|
|
@@ -69408,22 +69408,22 @@ const EMPTY_PARSED_ERROR = {
|
|
|
69408
69408
|
message: null,
|
|
69409
69409
|
raw: null
|
|
69410
69410
|
};
|
|
69411
|
-
function asRecord$
|
|
69411
|
+
function asRecord$11(value) {
|
|
69412
69412
|
return value !== null && typeof value === "object" && !Array.isArray(value) ? value : null;
|
|
69413
69413
|
}
|
|
69414
69414
|
function readTrimmedString$1(value) {
|
|
69415
69415
|
return (typeof value === "string" ? value.trim() : "") || null;
|
|
69416
69416
|
}
|
|
69417
69417
|
function readErrorEnvelope(record) {
|
|
69418
|
-
return asRecord$
|
|
69418
|
+
return asRecord$11(record["error"]);
|
|
69419
69419
|
}
|
|
69420
69420
|
function readUpstreamErrorCode(body) {
|
|
69421
|
-
const record = asRecord$
|
|
69421
|
+
const record = asRecord$11(body);
|
|
69422
69422
|
if (record === null) return null;
|
|
69423
69423
|
return readTrimmedString$1(record["code"]) ?? readTrimmedString$1(readErrorEnvelope(record)?.["code"]);
|
|
69424
69424
|
}
|
|
69425
69425
|
function readErrorMessage$2(raw) {
|
|
69426
|
-
const record = asRecord$
|
|
69426
|
+
const record = asRecord$11(raw);
|
|
69427
69427
|
if (record === null) return null;
|
|
69428
69428
|
const error = record["error"];
|
|
69429
69429
|
const nestedMessage = readErrorEnvelope(record)?.["message"];
|
|
@@ -70055,7 +70055,7 @@ function buildProxyErrorResponse(error) {
|
|
|
70055
70055
|
code: error.code
|
|
70056
70056
|
}, { status: 403 });
|
|
70057
70057
|
if (error instanceof CmmdProxyRequestError) {
|
|
70058
|
-
const status = error.status >= 500 ? 502 : error.status;
|
|
70058
|
+
const status = error.status === 503 ? 503 : error.status >= 500 ? 502 : error.status;
|
|
70059
70059
|
return require_HttpServer.jsonUnsafe({
|
|
70060
70060
|
error: error.detail ?? "CMMD REST request failed.",
|
|
70061
70061
|
code: error.code,
|
|
@@ -96807,7 +96807,7 @@ const EMPTY_PLAN_VALUES = new Set([
|
|
|
96807
96807
|
"none",
|
|
96808
96808
|
"null"
|
|
96809
96809
|
]);
|
|
96810
|
-
function asRecord$
|
|
96810
|
+
function asRecord$10(value) {
|
|
96811
96811
|
if (!value || typeof value !== "object" || Array.isArray(value)) return void 0;
|
|
96812
96812
|
return value;
|
|
96813
96813
|
}
|
|
@@ -96824,7 +96824,7 @@ function decodeJwtClaims(token) {
|
|
|
96824
96824
|
try {
|
|
96825
96825
|
const decoded = Buffer.from(payload, "base64url");
|
|
96826
96826
|
if (decoded.byteLength > MAX_CLAIMS_BYTES) return void 0;
|
|
96827
|
-
return asRecord$
|
|
96827
|
+
return asRecord$10(JSON.parse(decoded.toString("utf8")));
|
|
96828
96828
|
} catch {
|
|
96829
96829
|
return;
|
|
96830
96830
|
}
|
|
@@ -96846,7 +96846,7 @@ function findPlanType(claims) {
|
|
|
96846
96846
|
const direct = fromRecord(claims);
|
|
96847
96847
|
if (direct) return direct;
|
|
96848
96848
|
for (const value of Object.values(claims)) {
|
|
96849
|
-
const nested = asRecord$
|
|
96849
|
+
const nested = asRecord$10(value);
|
|
96850
96850
|
if (!nested) continue;
|
|
96851
96851
|
const found = fromRecord(nested);
|
|
96852
96852
|
if (found) return found;
|
|
@@ -96863,7 +96863,7 @@ function readCodexAuthIdentity(authJson) {
|
|
|
96863
96863
|
} catch {
|
|
96864
96864
|
return {};
|
|
96865
96865
|
}
|
|
96866
|
-
const claims = decodeJwtClaims(asRecord$
|
|
96866
|
+
const claims = decodeJwtClaims(asRecord$10(asRecord$10(parsed)?.tokens)?.id_token);
|
|
96867
96867
|
if (!claims) return {};
|
|
96868
96868
|
const email = findEmail(claims);
|
|
96869
96869
|
const planType = findPlanType(claims);
|
|
@@ -97060,11 +97060,6 @@ function recordClaudeRateLimitTelemetry(info, generationHash = currentClaudeUsag
|
|
|
97060
97060
|
observedAt: [fiveHourObservedAt, sevenDayObservedAt].filter((value) => value !== null).toSorted()[0]
|
|
97061
97061
|
});
|
|
97062
97062
|
}
|
|
97063
|
-
function getLatestClaudeRateLimitTelemetry(generationHash = currentClaudeUsageGenerationHash(), providerAccountId) {
|
|
97064
|
-
if (generationHash === null) return null;
|
|
97065
|
-
const cacheKey = providerAccountId ? `${providerAccountId}:${generationHash}` : generationHash;
|
|
97066
|
-
return cachedSnapshots.get(cacheKey) ?? null;
|
|
97067
|
-
}
|
|
97068
97063
|
//#endregion
|
|
97069
97064
|
//#region src/providerAuth/ClaudeDeviceAuth.ts
|
|
97070
97065
|
const AUTHORIZE_URL_PATTERN = /https:\/\/[^\s]*\/oauth\/authorize\?[^\s]+/u;
|
|
@@ -97153,6 +97148,7 @@ const runClaudeLogout = (runtime) => new Promise((resolve, reject) => {
|
|
|
97153
97148
|
const execFileAsync$4 = (0, node_util.promisify)(node_child_process.execFile);
|
|
97154
97149
|
const USAGE_ARGS = [
|
|
97155
97150
|
"--safe-mode",
|
|
97151
|
+
"--no-session-persistence",
|
|
97156
97152
|
"-p",
|
|
97157
97153
|
"/usage",
|
|
97158
97154
|
"--output-format",
|
|
@@ -97220,7 +97216,7 @@ function zonedDateTimeToUtc(input) {
|
|
|
97220
97216
|
}
|
|
97221
97217
|
}
|
|
97222
97218
|
function parseResetAt(value, now) {
|
|
97223
|
-
const match = /^(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\d{1,2}) at (\d{1,2})(?::(\d{2}))?(am|pm) \(([^)]+)\)$/.exec(value);
|
|
97219
|
+
const match = /^(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\d{1,2})(?:,| at) (\d{1,2})(?::(\d{2}))?(am|pm) \(([^)]+)\)$/.exec(value);
|
|
97224
97220
|
if (!match) return null;
|
|
97225
97221
|
const month = MONTH_BY_NAME[match[1]];
|
|
97226
97222
|
if (month === void 0) return null;
|
|
@@ -97442,17 +97438,23 @@ async function loadClaudeAccountMetadataFromCli(homePath) {
|
|
|
97442
97438
|
function extractClaudeCredentialGenerationId(response) {
|
|
97443
97439
|
if (typeof response !== "object" || response === null || !("data" in response)) return null;
|
|
97444
97440
|
const data = response.data;
|
|
97445
|
-
if (typeof data !== "object" || data === null
|
|
97446
|
-
if (
|
|
97447
|
-
|
|
97441
|
+
if (typeof data !== "object" || data === null) return null;
|
|
97442
|
+
if ("connected" in data && data.connected === true && "generationId" in data && typeof data.generationId === "string") {
|
|
97443
|
+
const generationId = data.generationId.trim();
|
|
97444
|
+
return generationId.length > 0 ? generationId : null;
|
|
97445
|
+
}
|
|
97446
|
+
if (!("account" in data) || typeof data.account !== "object" || data.account === null) return null;
|
|
97447
|
+
const account = data.account;
|
|
97448
|
+
if (!("credentialGenerationId" in account) || typeof account.credentialGenerationId !== "string") return null;
|
|
97449
|
+
const generationId = account.credentialGenerationId.trim();
|
|
97448
97450
|
return generationId.length > 0 ? generationId : null;
|
|
97449
97451
|
}
|
|
97450
97452
|
function extractClaudeProviderAccountId(response) {
|
|
97451
|
-
const generationId = extractClaudeCredentialGenerationId(response);
|
|
97452
|
-
if (generationId !== null) return generationId;
|
|
97453
97453
|
if (typeof response !== "object" || response === null || !("data" in response)) return null;
|
|
97454
97454
|
const data = response.data;
|
|
97455
|
-
if (typeof data !== "object" || data === null
|
|
97455
|
+
if (typeof data !== "object" || data === null) return null;
|
|
97456
|
+
if ("connected" in data && data.connected === true) return extractClaudeCredentialGenerationId(response);
|
|
97457
|
+
if (!("account" in data)) return null;
|
|
97456
97458
|
const account = data.account;
|
|
97457
97459
|
if (typeof account !== "object" || account === null || !("providerAccountId" in account) || typeof account.providerAccountId !== "string") return null;
|
|
97458
97460
|
const providerAccountId = account.providerAccountId.trim();
|
|
@@ -97480,7 +97482,7 @@ async function publishClaudeUsageAfterSync(input) {
|
|
|
97480
97482
|
path: input.auth.path === AUTH_RUNTIME_CLAUDE_CREDENTIAL_PATH ? AUTH_RUNTIME_CLAUDE_USAGE_PATH : USER_CLAUDE_USAGE_PATH,
|
|
97481
97483
|
body: {
|
|
97482
97484
|
providerAccountId: input.providerAccountId,
|
|
97483
|
-
credentialGenerationId: input.
|
|
97485
|
+
credentialGenerationId: input.credentialGenerationId,
|
|
97484
97486
|
accountEmail: input.accountEmail,
|
|
97485
97487
|
accountDisplayName: input.accountDisplayName,
|
|
97486
97488
|
planType: input.planType,
|
|
@@ -97497,11 +97499,13 @@ async function publishClaudeUsageAfterSync(input) {
|
|
|
97497
97499
|
}
|
|
97498
97500
|
async function finalizeClaudeCredentialSync(input) {
|
|
97499
97501
|
const providerAccountId = extractClaudeProviderAccountId(input.response);
|
|
97500
|
-
|
|
97501
|
-
if (
|
|
97502
|
+
const credentialGenerationId = extractClaudeCredentialGenerationId(input.response);
|
|
97503
|
+
if (providerAccountId === null || credentialGenerationId === null) return null;
|
|
97504
|
+
if (input.auth.path === USER_CLAUDE_CREDENTIAL_PATH) setLocalClaudeUsageGeneration(credentialGenerationId);
|
|
97502
97505
|
return publishClaudeUsageAfterSync({
|
|
97503
97506
|
auth: input.auth,
|
|
97504
97507
|
providerAccountId,
|
|
97508
|
+
credentialGenerationId,
|
|
97505
97509
|
accountEmail: input.accountEmail,
|
|
97506
97510
|
accountDisplayName: input.accountDisplayName,
|
|
97507
97511
|
planType: input.planType,
|
|
@@ -172079,7 +172083,7 @@ function em(e) {
|
|
|
172079
172083
|
BO ??= new Int32Array(new SharedArrayBuffer(4)), Atomics.wait(BO, 0, 0, SY);
|
|
172080
172084
|
}
|
|
172081
172085
|
}
|
|
172082
|
-
function rm$
|
|
172086
|
+
function rm$5(e, t) {
|
|
172083
172087
|
let n = (0, path.resolve)(t).toLowerCase(), r = (0, path.dirname)((0, path.resolve)(e)).toLowerCase();
|
|
172084
172088
|
if (r === n || KO(r, n) || qO(r, n, "lexical")) return !0;
|
|
172085
172089
|
let o = em(t)?.toLowerCase();
|
|
@@ -184929,7 +184933,7 @@ function Wo() {
|
|
|
184929
184933
|
}
|
|
184930
184934
|
function sle(e) {
|
|
184931
184935
|
let t = process.cwd();
|
|
184932
|
-
return e.filter((n) => !rm$
|
|
184936
|
+
return e.filter((n) => !rm$5(n, t));
|
|
184933
184937
|
}
|
|
184934
184938
|
function ZU(e) {
|
|
184935
184939
|
let t = Bun.which(e);
|
|
@@ -203869,7 +203873,7 @@ const collectStreamAsString = (stream) => stream.pipe(require_Path.decodeText(),
|
|
|
203869
203873
|
//#region src/orchestration/WorkerPlanCodexTools.ts
|
|
203870
203874
|
const FORGE_PROPOSE_WORKER_TASKS_TOOL = "forge_propose_worker_tasks";
|
|
203871
203875
|
const MAX_WORKER_PLAN_ITEMS = 5;
|
|
203872
|
-
function asRecord$
|
|
203876
|
+
function asRecord$9(value) {
|
|
203873
203877
|
return typeof value === "object" && value !== null && !Array.isArray(value) ? value : void 0;
|
|
203874
203878
|
}
|
|
203875
203879
|
function readTrimmedString(value) {
|
|
@@ -203885,7 +203889,7 @@ function isValidWorkerSummary(value) {
|
|
|
203885
203889
|
return value !== void 0 && value.length > 0 && value.length <= 4e3;
|
|
203886
203890
|
}
|
|
203887
203891
|
function decodeWorkerPlanItem(value) {
|
|
203888
|
-
const item = asRecord$
|
|
203892
|
+
const item = asRecord$9(value);
|
|
203889
203893
|
const slug = readTrimmedString(item?.slug);
|
|
203890
203894
|
const title = readTrimmedString(item?.title);
|
|
203891
203895
|
const summary = readTrimmedString(item?.summary);
|
|
@@ -203949,7 +203953,7 @@ function createWorkerPlanDynamicTools() {
|
|
|
203949
203953
|
function createWorkerPlanDynamicToolHandler() {
|
|
203950
203954
|
return async (input) => {
|
|
203951
203955
|
if (input.tool !== "forge_propose_worker_tasks") throw new Error(`Unsupported worker-plan tool: ${input.tool}`);
|
|
203952
|
-
if (!decodeWorkerPlanItems(asRecord$
|
|
203956
|
+
if (!decodeWorkerPlanItems(asRecord$9(input.arguments)?.items)) throw new Error("Worker plans require one to five unique, fully described items.");
|
|
203953
203957
|
return {
|
|
203954
203958
|
success: true,
|
|
203955
203959
|
contentItems: [{
|
|
@@ -205672,25 +205676,25 @@ const AUTH_METHOD_CONTAINER_KEYS = [
|
|
|
205672
205676
|
/** Lift an unknown value into `Option<string>` if it is a non-empty string. */
|
|
205673
205677
|
const asNonEmptyString = (v) => typeof v === "string" && v.length > 0 ? require_Schema$1.some(v) : require_Schema$1.none();
|
|
205674
205678
|
/** Lift an unknown value into `Option<Record>` if it is a plain object. */
|
|
205675
|
-
const asRecord$
|
|
205679
|
+
const asRecord$8 = (v) => typeof v === "object" && v !== null && !globalThis.Array.isArray(v) ? require_Schema$1.some(v) : require_Schema$1.none();
|
|
205676
205680
|
/**
|
|
205677
205681
|
* Walk an unknown parsed JSON value looking for a subscription/plan
|
|
205678
205682
|
* identifier, returning the first match as an `Option`.
|
|
205679
205683
|
*/
|
|
205680
205684
|
function findSubscriptionType(value) {
|
|
205681
205685
|
if (globalThis.Array.isArray(value)) return require_Schema$1.firstSomeOf(value.map(findSubscriptionType));
|
|
205682
|
-
return asRecord$
|
|
205686
|
+
return asRecord$8(value).pipe(require_Schema$1.flatMap$2((record) => {
|
|
205683
205687
|
const direct = require_Schema$1.firstSomeOf(SUBSCRIPTION_TYPE_KEYS.map((key) => asNonEmptyString(record[key])));
|
|
205684
205688
|
if (require_Schema$1.isSome(direct)) return direct;
|
|
205685
|
-
return require_Schema$1.firstSomeOf(SUBSCRIPTION_CONTAINER_KEYS.map((key) => asRecord$
|
|
205689
|
+
return require_Schema$1.firstSomeOf(SUBSCRIPTION_CONTAINER_KEYS.map((key) => asRecord$8(record[key]).pipe(require_Schema$1.flatMap$2(findSubscriptionType))));
|
|
205686
205690
|
}));
|
|
205687
205691
|
}
|
|
205688
205692
|
function findAuthMethod(value) {
|
|
205689
205693
|
if (globalThis.Array.isArray(value)) return require_Schema$1.firstSomeOf(value.map(findAuthMethod));
|
|
205690
|
-
return asRecord$
|
|
205694
|
+
return asRecord$8(value).pipe(require_Schema$1.flatMap$2((record) => {
|
|
205691
205695
|
const direct = require_Schema$1.firstSomeOf(AUTH_METHOD_KEYS.map((key) => asNonEmptyString(record[key])));
|
|
205692
205696
|
if (require_Schema$1.isSome(direct)) return direct;
|
|
205693
|
-
return require_Schema$1.firstSomeOf(AUTH_METHOD_CONTAINER_KEYS.map((key) => asRecord$
|
|
205697
|
+
return require_Schema$1.firstSomeOf(AUTH_METHOD_CONTAINER_KEYS.map((key) => asRecord$8(record[key]).pipe(require_Schema$1.flatMap$2(findAuthMethod))));
|
|
205694
205698
|
}));
|
|
205695
205699
|
}
|
|
205696
205700
|
/**
|
|
@@ -206838,7 +206842,7 @@ function userInputQuestionsFromToolInput(toolInput) {
|
|
|
206838
206842
|
return (Array.isArray(toolInput.questions) ? toolInput.questions : []).map((question, idx) => userInputQuestionFromUnknown(question, idx));
|
|
206839
206843
|
}
|
|
206840
206844
|
function userInputQuestionFromUnknown(question, idx) {
|
|
206841
|
-
const value = asRecord$
|
|
206845
|
+
const value = asRecord$7(question) ?? {};
|
|
206842
206846
|
return {
|
|
206843
206847
|
id: typeof value.header === "string" ? value.header : `q-${idx}`,
|
|
206844
206848
|
header: typeof value.header === "string" ? value.header : `Question ${idx + 1}`,
|
|
@@ -206848,13 +206852,13 @@ function userInputQuestionFromUnknown(question, idx) {
|
|
|
206848
206852
|
};
|
|
206849
206853
|
}
|
|
206850
206854
|
function userInputOptionFromUnknown(option) {
|
|
206851
|
-
const value = asRecord$
|
|
206855
|
+
const value = asRecord$7(option) ?? {};
|
|
206852
206856
|
return {
|
|
206853
206857
|
label: typeof value.label === "string" ? value.label : "",
|
|
206854
206858
|
description: typeof value.description === "string" ? value.description : ""
|
|
206855
206859
|
};
|
|
206856
206860
|
}
|
|
206857
|
-
function asRecord$
|
|
206861
|
+
function asRecord$7(value) {
|
|
206858
206862
|
return value !== null && typeof value === "object" && !Array.isArray(value) ? value : void 0;
|
|
206859
206863
|
}
|
|
206860
206864
|
function permissionResultFromDecision(decision, toolInput, suggestions) {
|
|
@@ -207662,7 +207666,7 @@ const makeClaudeAdapter = require_Schema$1.fn("makeClaudeAdapter")(function* (op
|
|
|
207662
207666
|
const updateResumeCursor = require_Schema$1.fn("updateResumeCursor")(function* (context) {
|
|
207663
207667
|
const threadId = context.session.threadId;
|
|
207664
207668
|
if (!threadId) return;
|
|
207665
|
-
const providerDeliveryBinding = readProviderDeliveryBinding(asRecord$
|
|
207669
|
+
const providerDeliveryBinding = readProviderDeliveryBinding(asRecord$7(context.session.resumeCursor)?.providerDeliveryBinding);
|
|
207666
207670
|
const resumeCursor = {
|
|
207667
207671
|
threadId,
|
|
207668
207672
|
...context.resumeSessionId ? { resume: context.resumeSessionId } : {},
|
|
@@ -212731,7 +212735,7 @@ function makeAcpContentDeltaEvent(input) {
|
|
|
212731
212735
|
}
|
|
212732
212736
|
//#endregion
|
|
212733
212737
|
//#region ../../packages/shared/src/toolActivity.ts
|
|
212734
|
-
function asRecord$
|
|
212738
|
+
function asRecord$6(value) {
|
|
212735
212739
|
return value !== null && typeof value === "object" && !Array.isArray(value) ? value : void 0;
|
|
212736
212740
|
}
|
|
212737
212741
|
function asTrimmedString(value) {
|
|
@@ -212757,10 +212761,10 @@ function extractCommandFromTitle$1(title) {
|
|
|
212757
212761
|
return /`([^`]+)`/u.exec(title)?.[1]?.trim() || void 0;
|
|
212758
212762
|
}
|
|
212759
212763
|
function extractToolCommand(data, title) {
|
|
212760
|
-
const item = asRecord$
|
|
212761
|
-
const itemInput = asRecord$
|
|
212762
|
-
const itemResult = asRecord$
|
|
212763
|
-
const rawInput = asRecord$
|
|
212764
|
+
const item = asRecord$6(data?.item);
|
|
212765
|
+
const itemInput = asRecord$6(item?.input);
|
|
212766
|
+
const itemResult = asRecord$6(item?.result);
|
|
212767
|
+
const rawInput = asRecord$6(data?.rawInput);
|
|
212764
212768
|
const direct = [
|
|
212765
212769
|
normalizeCommandValue$1(item?.command),
|
|
212766
212770
|
normalizeCommandValue$1(itemInput?.command),
|
|
@@ -212788,7 +212792,7 @@ function collectPaths(value, paths, seen, depth) {
|
|
|
212788
212792
|
}
|
|
212789
212793
|
return;
|
|
212790
212794
|
}
|
|
212791
|
-
const record = asRecord$
|
|
212795
|
+
const record = asRecord$6(value);
|
|
212792
212796
|
if (!record) return;
|
|
212793
212797
|
for (const key of [
|
|
212794
212798
|
"path",
|
|
@@ -212847,7 +212851,7 @@ function deriveToolActivityPresentation(input) {
|
|
|
212847
212851
|
const title = asTrimmedString(input.title);
|
|
212848
212852
|
const detail = stripTrailingExitCode(asTrimmedString(input.detail));
|
|
212849
212853
|
const fallbackSummary = asTrimmedString(input.fallbackSummary) ?? "Tool";
|
|
212850
|
-
const data = asRecord$
|
|
212854
|
+
const data = asRecord$6(input.data);
|
|
212851
212855
|
const command = extractToolCommand(data, title);
|
|
212852
212856
|
const primaryPath = extractPrimaryPath(data);
|
|
212853
212857
|
const action = classifyToolAction({
|
|
@@ -212871,7 +212875,7 @@ function deriveToolActivityPresentation(input) {
|
|
|
212871
212875
|
...primaryPath ? { detail: primaryPath } : {}
|
|
212872
212876
|
};
|
|
212873
212877
|
if (action === "search") {
|
|
212874
|
-
const query = asTrimmedString(asRecord$
|
|
212878
|
+
const query = asTrimmedString(asRecord$6(data?.rawInput)?.query) ?? asTrimmedString(asRecord$6(data?.rawInput)?.pattern) ?? asTrimmedString(asRecord$6(data?.rawInput)?.searchTerm);
|
|
212875
212879
|
return {
|
|
212876
212880
|
summary: "Searched files",
|
|
212877
212881
|
...query ? { detail: query } : {}
|
|
@@ -224915,6 +224919,9 @@ function isMissingGitCwdError(error) {
|
|
|
224915
224919
|
const normalized = `${error.detail}\n${error.message}`.toLowerCase();
|
|
224916
224920
|
return normalized.includes("no such file or directory") || normalized.includes("notfound: filesystem.access") || normalized.includes("enoent") || normalized.includes("not a directory");
|
|
224917
224921
|
}
|
|
224922
|
+
function isUnregisteredWorktreeError(error) {
|
|
224923
|
+
return `${error.detail}\n${error.message}`.toLowerCase().includes("is not a working tree");
|
|
224924
|
+
}
|
|
224918
224925
|
function toGitCommandError(input, detail) {
|
|
224919
224926
|
return (cause) => require_Schema$1.is(GitCommandError)(cause) ? cause : new GitCommandError({
|
|
224920
224927
|
operation: input.operation,
|
|
@@ -225314,6 +225321,20 @@ const makeGitCore = require_Schema$1.fn("makeGitCore")(function* (options) {
|
|
|
225314
225321
|
if (firstRemote) return firstRemote;
|
|
225315
225322
|
return yield* createGitCommandError("GitCore.resolvePrimaryRemoteName", cwd, ["remote"], "No git remote is configured for this repository.");
|
|
225316
225323
|
});
|
|
225324
|
+
const resolveNormalizedPrimaryRemoteUrl = require_Schema$1.fn("resolveNormalizedPrimaryRemoteUrl")(function* (cwd) {
|
|
225325
|
+
const remoteName = yield* resolvePrimaryRemoteName(cwd);
|
|
225326
|
+
const remoteUrl = yield* runGitStdout("GitCore.resolvePrimaryRemoteUrl", cwd, [
|
|
225327
|
+
"remote",
|
|
225328
|
+
"get-url",
|
|
225329
|
+
remoteName
|
|
225330
|
+
]).pipe(require_Schema$1.map((stdout) => normalizeRemoteUrl(stdout)));
|
|
225331
|
+
if (remoteUrl.length > 0) return remoteUrl;
|
|
225332
|
+
return yield* createGitCommandError("GitCore.resolvePrimaryRemoteUrl", cwd, [
|
|
225333
|
+
"remote",
|
|
225334
|
+
"get-url",
|
|
225335
|
+
remoteName
|
|
225336
|
+
], `Remote '${remoteName}' has no URL.`);
|
|
225337
|
+
});
|
|
225317
225338
|
const resolvePushRemoteName = require_Schema$1.fn("resolvePushRemoteName")(function* (cwd, branch) {
|
|
225318
225339
|
const branchPushRemote = yield* runGitStdout("GitCore.resolvePushRemoteName.branchPushRemote", cwd, [
|
|
225319
225340
|
"config",
|
|
@@ -225985,10 +226006,33 @@ const makeGitCore = require_Schema$1.fn("makeGitCore")(function* (options) {
|
|
|
225985
226006
|
const args = ["worktree", "remove"];
|
|
225986
226007
|
if (input.force) args.push("--force");
|
|
225987
226008
|
args.push(input.path);
|
|
225988
|
-
|
|
226009
|
+
const executeRemoval = (cwd, removalArgs) => executeGit("GitCore.removeWorktree", cwd, removalArgs, {
|
|
225989
226010
|
timeoutMs: 15e3,
|
|
225990
226011
|
fallbackErrorMessage: "git worktree remove failed"
|
|
225991
|
-
}).pipe(require_Schema$1.mapError((error) => createGitCommandError("GitCore.removeWorktree",
|
|
226012
|
+
}).pipe(require_Schema$1.mapError((error) => createGitCommandError("GitCore.removeWorktree", cwd, removalArgs, `${commandLabel(removalArgs)} failed (cwd: ${cwd}): ${error.message}`, error)), require_Schema$1.asVoid);
|
|
226013
|
+
yield* executeRemoval(input.cwd, args).pipe(require_Schema$1.catch_((originalError) => {
|
|
226014
|
+
if (!input.force || !isUnregisteredWorktreeError(originalError)) return require_Schema$1.fail(originalError);
|
|
226015
|
+
return require_Schema$1.gen(function* () {
|
|
226016
|
+
const targetExists = yield* require_Schema$1.option(fileSystem.exists(input.path));
|
|
226017
|
+
if (require_Schema$1.isNone(targetExists)) return yield* originalError;
|
|
226018
|
+
if (!targetExists.value) return;
|
|
226019
|
+
const ownerContext = yield* require_Schema$1.option(require_Schema$1.all({
|
|
226020
|
+
callerRemoteUrl: resolveNormalizedPrimaryRemoteUrl(input.cwd),
|
|
226021
|
+
targetRemoteUrl: resolveNormalizedPrimaryRemoteUrl(input.path),
|
|
226022
|
+
targetGitCommonDir: resolveGitCommonDir(input.path)
|
|
226023
|
+
}));
|
|
226024
|
+
if (require_Schema$1.isNone(ownerContext) || ownerContext.value.callerRemoteUrl !== ownerContext.value.targetRemoteUrl) return yield* originalError;
|
|
226025
|
+
const ownerArgs = [
|
|
226026
|
+
"--git-dir",
|
|
226027
|
+
ownerContext.value.targetGitCommonDir,
|
|
226028
|
+
"worktree",
|
|
226029
|
+
"remove",
|
|
226030
|
+
"--force",
|
|
226031
|
+
input.path
|
|
226032
|
+
];
|
|
226033
|
+
yield* executeRemoval(input.cwd, ownerArgs);
|
|
226034
|
+
});
|
|
226035
|
+
}));
|
|
225992
226036
|
});
|
|
225993
226037
|
const pruneWorktrees = require_Schema$1.fn("pruneWorktrees")(function* (cwd) {
|
|
225994
226038
|
yield* executeGit("GitCore.pruneWorktrees", cwd, [
|
|
@@ -279279,7 +279323,7 @@ function makeApprovedWorkerPlanEventState() {
|
|
|
279279
279323
|
function promptKey(masterThreadId, promptId) {
|
|
279280
279324
|
return `${masterThreadId}\n${promptId}`;
|
|
279281
279325
|
}
|
|
279282
|
-
function asRecord$
|
|
279326
|
+
function asRecord$5(value) {
|
|
279283
279327
|
return typeof value === "object" && value !== null && !Array.isArray(value) ? value : null;
|
|
279284
279328
|
}
|
|
279285
279329
|
function exactMaterializedTaskIds(value, expectedCount) {
|
|
@@ -279289,7 +279333,7 @@ function exactMaterializedTaskIds(value, expectedCount) {
|
|
|
279289
279333
|
}
|
|
279290
279334
|
function readyBatchFromActivity(state, event) {
|
|
279291
279335
|
if (event.payload.activity.kind !== "plan.task-creation.batch-succeeded") return null;
|
|
279292
|
-
const payload = asRecord$
|
|
279336
|
+
const payload = asRecord$5(event.payload.activity.payload);
|
|
279293
279337
|
const promptId = payload?.["promptId"];
|
|
279294
279338
|
if (typeof promptId !== "string") return null;
|
|
279295
279339
|
const key = promptKey(event.payload.threadId, promptId);
|
|
@@ -280451,7 +280495,7 @@ function runtimeGrantNeedsRefresh(token, identity, nowSeconds = Math.floor(Date.
|
|
|
280451
280495
|
return claims.expiresAtSeconds - nowSeconds <= RUNTIME_GRANT_REFRESH_SKEW_SECONDS;
|
|
280452
280496
|
}
|
|
280453
280497
|
/** Narrow an unknown to a plain object, or null. */
|
|
280454
|
-
function asRecord$
|
|
280498
|
+
function asRecord$4(value) {
|
|
280455
280499
|
return value !== null && typeof value === "object" ? value : null;
|
|
280456
280500
|
}
|
|
280457
280501
|
/** The raw (untrimmed) string when it is present and not blank, else null. */
|
|
@@ -280463,7 +280507,7 @@ function asTimestamp(value) {
|
|
|
280463
280507
|
return typeof value === "string" && Number.isFinite(Date.parse(value)) ? value : null;
|
|
280464
280508
|
}
|
|
280465
280509
|
function parseRuntimeGrantRefreshResponse(runtimeId, value) {
|
|
280466
|
-
const data = asRecord$
|
|
280510
|
+
const data = asRecord$4(asRecord$4(value)?.data);
|
|
280467
280511
|
if (!data || data.runtimeId !== runtimeId) return null;
|
|
280468
280512
|
const grantToken = asNonBlankString(data.grantToken);
|
|
280469
280513
|
const expiresAt = asTimestamp(data.expiresAt);
|
|
@@ -296683,6 +296727,74 @@ const LocalAutomationSchedulerLive = require_Schema$1.effectDiscard(require_Sche
|
|
|
296683
296727
|
yield* require_Schema$1.forkScoped(startup.awaitCommandReady.pipe(require_Schema$1.andThen(require_Schema$1.forever(tick.pipe(require_Schema$1.andThen(require_Schema$1.sleep("60 seconds")))))));
|
|
296684
296728
|
}));
|
|
296685
296729
|
//#endregion
|
|
296730
|
+
//#region src/command/providerUsageEnvironment.ts
|
|
296731
|
+
function asRecord$3(value) {
|
|
296732
|
+
return value !== null && typeof value === "object" && !Array.isArray(value) ? value : null;
|
|
296733
|
+
}
|
|
296734
|
+
function positiveInteger(value) {
|
|
296735
|
+
return typeof value === "number" && Number.isSafeInteger(value) && value > 0 ? value : null;
|
|
296736
|
+
}
|
|
296737
|
+
function readEnvironmentId(value) {
|
|
296738
|
+
return typeof value === "string" && value.trim() !== "" ? value : null;
|
|
296739
|
+
}
|
|
296740
|
+
function readEligibleStatus(value) {
|
|
296741
|
+
return value === "running" || value === "suspended" ? value : null;
|
|
296742
|
+
}
|
|
296743
|
+
function isOwnedRuntime(row, ownerUserId) {
|
|
296744
|
+
return positiveInteger(row["userId"]) === ownerUserId;
|
|
296745
|
+
}
|
|
296746
|
+
function readRuntimeId(row) {
|
|
296747
|
+
const runtimeId = row["runtimeId"];
|
|
296748
|
+
return typeof runtimeId === "string" && runtimeId.trim() !== "" ? runtimeId : null;
|
|
296749
|
+
}
|
|
296750
|
+
function readCandidate(runtime, ownerUserId) {
|
|
296751
|
+
const row = asRecord$3(runtime);
|
|
296752
|
+
if (row === null || !isOwnedRuntime(row, ownerUserId) || row["desiredState"] !== "running") return null;
|
|
296753
|
+
const organizationId = positiveInteger(row["organizationId"]);
|
|
296754
|
+
const environmentId = readEnvironmentId(row["environmentId"]);
|
|
296755
|
+
const runtimeId = readRuntimeId(row);
|
|
296756
|
+
const status = readEligibleStatus(row["status"]);
|
|
296757
|
+
if (organizationId === null || environmentId === null || runtimeId === null || status === null) return null;
|
|
296758
|
+
return {
|
|
296759
|
+
organizationId,
|
|
296760
|
+
environmentId,
|
|
296761
|
+
runtimeId,
|
|
296762
|
+
status
|
|
296763
|
+
};
|
|
296764
|
+
}
|
|
296765
|
+
function candidateKey(candidate) {
|
|
296766
|
+
return `${candidate.organizationId}:${candidate.environmentId ?? ""}`;
|
|
296767
|
+
}
|
|
296768
|
+
function statusRank(status) {
|
|
296769
|
+
return status === "running" ? 0 : 1;
|
|
296770
|
+
}
|
|
296771
|
+
function deduplicateCandidates(candidates) {
|
|
296772
|
+
const byEnvironment = /* @__PURE__ */ new Map();
|
|
296773
|
+
for (const candidate of candidates) {
|
|
296774
|
+
const key = candidateKey(candidate);
|
|
296775
|
+
const existing = byEnvironment.get(key);
|
|
296776
|
+
if (existing === void 0 || statusRank(candidate.status) < statusRank(existing.status)) byEnvironment.set(key, candidate);
|
|
296777
|
+
}
|
|
296778
|
+
return [...byEnvironment.values()];
|
|
296779
|
+
}
|
|
296780
|
+
/**
|
|
296781
|
+
* Selects one authenticated owner's Environment from CMMD's projectless runtime
|
|
296782
|
+
* catalog. A tied best candidate fails closed, so Forge never chooses an
|
|
296783
|
+
* organization from browser input.
|
|
296784
|
+
*/
|
|
296785
|
+
function selectProviderUsageEnvironment(rawCatalog, ownerUserId) {
|
|
296786
|
+
const runtimes = asRecord$3(asRecord$3(rawCatalog)?.["data"])?.["runtimes"];
|
|
296787
|
+
if (!Array.isArray(runtimes)) return { kind: "unavailable" };
|
|
296788
|
+
const candidates = deduplicateCandidates(runtimes.map((runtime) => readCandidate(runtime, ownerUserId)).filter((candidate) => candidate !== null));
|
|
296789
|
+
const bestRank = Math.min(...candidates.map((candidate) => statusRank(candidate.status)));
|
|
296790
|
+
const bestCandidates = candidates.filter((candidate) => statusRank(candidate.status) === bestRank);
|
|
296791
|
+
if (bestCandidates.length !== 1) return { kind: "unavailable" };
|
|
296792
|
+
return {
|
|
296793
|
+
kind: "ready",
|
|
296794
|
+
organizationId: bestCandidates[0].organizationId
|
|
296795
|
+
};
|
|
296796
|
+
}
|
|
296797
|
+
//#endregion
|
|
296686
296798
|
//#region src/command/wsToken.ts
|
|
296687
296799
|
/**
|
|
296688
296800
|
* Build the WS token response given an optional PAT and the configured CMMD
|
|
@@ -296719,13 +296831,13 @@ function resolveWsUrl(baseUrl) {
|
|
|
296719
296831
|
const callCmmdTool = legacyCmmdToolBridge.callTool;
|
|
296720
296832
|
const extractMcpToolText = legacyCmmdToolBridge.extractText;
|
|
296721
296833
|
const isCmmdMcpAuthError = legacyCmmdToolBridge.isAuthError;
|
|
296722
|
-
var ClaudeUsageReadError = class extends require_Schema$1.TaggedError("ClaudeUsageReadError") {};
|
|
296723
296834
|
/**
|
|
296724
296835
|
* CMMD-side path for the PROJECT-keyed Forge Cloud catalog. Shared by the list
|
|
296725
296836
|
* proxy, the SSE poll-and-emit proxy, and the register/unregister proxies so the
|
|
296726
296837
|
* upstream contract lives in exactly one place.
|
|
296727
296838
|
*/
|
|
296728
296839
|
const CMMD_CLOUD_PROJECTS_PATH = "/api/forge/context/cloud-projects";
|
|
296840
|
+
const CMMD_RUNTIMES_PATH = "/api/forge/context/runtimes";
|
|
296729
296841
|
/**
|
|
296730
296842
|
* Authenticate the browser session and resolve the CMMD JWT to forward
|
|
296731
296843
|
* upstream. Returns null when no token could be resolved, which every caller
|
|
@@ -296849,6 +296961,10 @@ const cmmdBillingSeriesRouteLayer = registerProxyRoute({
|
|
|
296849
296961
|
const cmmdRestUnavailable = () => new CmmdProxyAuthenticationRequiredError("CMMD connection required. Reconnect CMMD to continue.");
|
|
296850
296962
|
function runCmmdRestProxy(session, proxy, dependencies = {}) {
|
|
296851
296963
|
return require_Schema$1.gen(function* () {
|
|
296964
|
+
if (dependencies.jwt !== void 0) {
|
|
296965
|
+
const explicitJwt = dependencies.jwt;
|
|
296966
|
+
return yield* require_Schema$1.promise(() => (dependencies.runProxy ?? runProxy)(() => proxy(explicitJwt)));
|
|
296967
|
+
}
|
|
296852
296968
|
const resolveJwt = dependencies.resolveJwt ?? resolveCmmdJwtForSession;
|
|
296853
296969
|
const jwt = yield* resolveJwt({
|
|
296854
296970
|
sessionId: session.sessionId,
|
|
@@ -298392,59 +298508,6 @@ const cmmdSetProviderAccountDefaultRouteLayer = registerProxyRoute({
|
|
|
298392
298508
|
orgIdSource: "none",
|
|
298393
298509
|
responseShape: "unwrapData"
|
|
298394
298510
|
});
|
|
298395
|
-
const resolveConnectedClaudeGeneration = (session) => require_Schema$1.gen(function* () {
|
|
298396
|
-
const outcome = yield* runCmmdRestProxy(session, (jwt) => cmmdGateway.request({
|
|
298397
|
-
method: "GET",
|
|
298398
|
-
jwt,
|
|
298399
|
-
path: "/api/forge/context/providers/claude/credential"
|
|
298400
|
-
}));
|
|
298401
|
-
if (!outcome.ok) return outcome;
|
|
298402
|
-
const state = unwrapForgeEnvelope(outcome.value);
|
|
298403
|
-
if (state === null || typeof state !== "object" || !("connected" in state) || state.connected !== true || !("generationId" in state) || typeof state.generationId !== "string") return {
|
|
298404
|
-
ok: true,
|
|
298405
|
-
value: null
|
|
298406
|
-
};
|
|
298407
|
-
return {
|
|
298408
|
-
ok: true,
|
|
298409
|
-
value: {
|
|
298410
|
-
generationId: state.generationId,
|
|
298411
|
-
generationHash: (0, node_crypto.createHash)("sha256").update(state.generationId).digest("hex")
|
|
298412
|
-
}
|
|
298413
|
-
};
|
|
298414
|
-
});
|
|
298415
|
-
/**
|
|
298416
|
-
* The GET path is read-only. The explicit per-account POST refresh invokes
|
|
298417
|
-
* this helper and propagates any CMMD forward failure to the caller.
|
|
298418
|
-
*/
|
|
298419
|
-
const forwardClaudeUsageTelemetry = (session, requestedProviderAccountId, activelyPoll = false, fetchClaudeUsage = fetchClaudeUsageViaOfficialClient) => require_Schema$1.gen(function* () {
|
|
298420
|
-
const credentialOutcome = yield* resolveConnectedClaudeGeneration(session);
|
|
298421
|
-
if (!credentialOutcome.ok) return credentialOutcome;
|
|
298422
|
-
if (credentialOutcome.value === null) return null;
|
|
298423
|
-
const { generationId, generationHash } = credentialOutcome.value;
|
|
298424
|
-
const providerAccountId = requestedProviderAccountId ?? generationId;
|
|
298425
|
-
const activeSnapshot = activelyPoll && providerAccountId === generationId ? yield* require_Schema$1.tryPromise({
|
|
298426
|
-
try: () => fetchClaudeUsage({ binaryPath: resolveClaudeBinaryPath("claude") }),
|
|
298427
|
-
catch: (cause) => new ClaudeUsageReadError({ cause })
|
|
298428
|
-
}).pipe(require_Schema$1.orElseSucceed(() => null)) : null;
|
|
298429
|
-
const snapshot = activeSnapshot ? {
|
|
298430
|
-
...activeSnapshot,
|
|
298431
|
-
observedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
298432
|
-
} : getLatestClaudeRateLimitTelemetry(generationHash, providerAccountId);
|
|
298433
|
-
if (!snapshot) return null;
|
|
298434
|
-
return yield* runCmmdRestProxy(session, (jwt) => cmmdGateway.request({
|
|
298435
|
-
method: "POST",
|
|
298436
|
-
jwt,
|
|
298437
|
-
path: "/api/forge/context/providers/usage/claude/telemetry",
|
|
298438
|
-
body: {
|
|
298439
|
-
providerAccountId,
|
|
298440
|
-
credentialGenerationId: generationId,
|
|
298441
|
-
source: activeSnapshot ? "active_poll" : "passive_sdk_telemetry",
|
|
298442
|
-
fiveHour: snapshot.fiveHour,
|
|
298443
|
-
sevenDay: snapshot.sevenDay,
|
|
298444
|
-
observedAt: snapshot.observedAt
|
|
298445
|
-
}
|
|
298446
|
-
}));
|
|
298447
|
-
});
|
|
298448
298511
|
const cmmdGetProviderUsageRouteLayer = add$1("GET", "/api/cmmd/providers/usage", require_Schema$1.gen(function* () {
|
|
298449
298512
|
const request = yield* require_HttpServer.HttpServerRequest;
|
|
298450
298513
|
const outcome = yield* runCmmdRestProxy(yield* (yield* ServerAuth).authenticateHttpRequest(request), (jwt) => cmmdGateway.request({
|
|
@@ -298465,15 +298528,63 @@ function parseProviderUsageRefreshInput(rawBody) {
|
|
|
298465
298528
|
providerAccountId: body.providerAccountId
|
|
298466
298529
|
};
|
|
298467
298530
|
}
|
|
298468
|
-
|
|
298469
|
-
const
|
|
298470
|
-
const
|
|
298471
|
-
|
|
298472
|
-
|
|
298473
|
-
|
|
298474
|
-
|
|
298475
|
-
|
|
298476
|
-
|
|
298531
|
+
function resolveProviderUsageOwnerUserId(session) {
|
|
298532
|
+
const identity = readCmmdUserIdentityForSession(session.sessionId);
|
|
298533
|
+
const userId = identity === null ? NaN : Number(identity.id);
|
|
298534
|
+
return Number.isSafeInteger(userId) && userId > 0 ? userId : null;
|
|
298535
|
+
}
|
|
298536
|
+
function buildClaudeUsageRefreshErrorResponse(error) {
|
|
298537
|
+
const status = error instanceof CmmdProxyRequestError && error.status === 503 ? 503 : 502;
|
|
298538
|
+
return require_HttpServer.jsonUnsafe({
|
|
298539
|
+
error: "Claude usage refresh is unavailable.",
|
|
298540
|
+
code: "CLAUDE_USAGE_REFRESH_UNAVAILABLE"
|
|
298541
|
+
}, { status });
|
|
298542
|
+
}
|
|
298543
|
+
function makeRefreshProviderUsageHandler(dependencies = {}) {
|
|
298544
|
+
return require_Schema$1.gen(function* () {
|
|
298545
|
+
const request = yield* require_HttpServer.HttpServerRequest;
|
|
298546
|
+
const session = yield* (yield* ServerAuth).authenticateHttpRequest(request);
|
|
298547
|
+
const input = parseProviderUsageRefreshInput(yield* request.json);
|
|
298548
|
+
if (input === null) return require_HttpServer.jsonUnsafe({ error: "provider and providerAccountId must identify a connected provider account" }, { status: 400 });
|
|
298549
|
+
if (input.provider === "claude") {
|
|
298550
|
+
const requestJwt = yield* (dependencies.resolveJwt ?? resolveCmmdJwtForSession)({
|
|
298551
|
+
sessionId: session.sessionId,
|
|
298552
|
+
subject: session.subject,
|
|
298553
|
+
logPrefix: "claude-usage-refresh"
|
|
298554
|
+
});
|
|
298555
|
+
if (!requestJwt) return buildClaudeUsageRefreshErrorResponse(/* @__PURE__ */ new Error("CMMD authentication required."));
|
|
298556
|
+
const ownerUserId = resolveProviderUsageOwnerUserId(session);
|
|
298557
|
+
if (ownerUserId === null) return require_HttpServer.jsonUnsafe({
|
|
298558
|
+
error: "CMMD owner identity is unavailable for Claude usage refresh.",
|
|
298559
|
+
code: "CLAUDE_USAGE_ENVIRONMENT_UNAVAILABLE"
|
|
298560
|
+
}, { status: 503 });
|
|
298561
|
+
const catalogOutcome = yield* runCmmdRestProxy(session, (jwt) => cmmdGateway.request({
|
|
298562
|
+
method: "GET",
|
|
298563
|
+
jwt,
|
|
298564
|
+
path: CMMD_RUNTIMES_PATH
|
|
298565
|
+
}), { jwt: requestJwt });
|
|
298566
|
+
if (!catalogOutcome.ok) return buildClaudeUsageRefreshErrorResponse(catalogOutcome.error);
|
|
298567
|
+
const target = selectProviderUsageEnvironment(catalogOutcome.value, ownerUserId);
|
|
298568
|
+
if (target.kind === "unavailable") return require_HttpServer.jsonUnsafe({
|
|
298569
|
+
error: "No owned Environment with running intent is available for Claude usage refresh.",
|
|
298570
|
+
code: "CLAUDE_USAGE_ENVIRONMENT_UNAVAILABLE"
|
|
298571
|
+
}, { status: 503 });
|
|
298572
|
+
const refreshOutcome = yield* runCmmdRestProxy(session, (jwt) => cmmdGateway.request({
|
|
298573
|
+
method: "POST",
|
|
298574
|
+
jwt,
|
|
298575
|
+
path: "/api/forge/context/providers/usage/claude/refresh",
|
|
298576
|
+
body: { providerAccountId: input.providerAccountId },
|
|
298577
|
+
orgId: String(target.organizationId)
|
|
298578
|
+
}), { jwt: requestJwt });
|
|
298579
|
+
if (!refreshOutcome.ok) return buildClaudeUsageRefreshErrorResponse(refreshOutcome.error);
|
|
298580
|
+
const snapshotOutcome = yield* runCmmdRestProxy(session, (jwt) => cmmdGateway.request({
|
|
298581
|
+
method: "GET",
|
|
298582
|
+
jwt,
|
|
298583
|
+
path: "/api/forge/context/providers/usage"
|
|
298584
|
+
}), { jwt: requestJwt });
|
|
298585
|
+
if (!snapshotOutcome.ok) return buildClaudeUsageRefreshErrorResponse(snapshotOutcome.error);
|
|
298586
|
+
return require_HttpServer.jsonUnsafe(unwrapForgeEnvelope(snapshotOutcome.value), { status: 200 });
|
|
298587
|
+
}
|
|
298477
298588
|
const refreshOutcome = yield* runCmmdRestProxy(session, (jwt) => cmmdGateway.request({
|
|
298478
298589
|
method: "POST",
|
|
298479
298590
|
jwt,
|
|
@@ -298481,16 +298592,16 @@ const cmmdRefreshProviderUsageRouteLayer = add$1("POST", "/api/cmmd/providers/us
|
|
|
298481
298592
|
body: { providerAccountId: input.providerAccountId }
|
|
298482
298593
|
}));
|
|
298483
298594
|
if (!refreshOutcome.ok) return buildProxyErrorResponse(refreshOutcome.error);
|
|
298484
|
-
|
|
298485
|
-
|
|
298486
|
-
|
|
298487
|
-
|
|
298488
|
-
|
|
298489
|
-
|
|
298490
|
-
|
|
298491
|
-
|
|
298492
|
-
|
|
298493
|
-
|
|
298595
|
+
const snapshotOutcome = yield* runCmmdRestProxy(session, (jwt) => cmmdGateway.request({
|
|
298596
|
+
method: "GET",
|
|
298597
|
+
jwt,
|
|
298598
|
+
path: "/api/forge/context/providers/usage"
|
|
298599
|
+
}));
|
|
298600
|
+
if (!snapshotOutcome.ok) return buildProxyErrorResponse(snapshotOutcome.error);
|
|
298601
|
+
return require_HttpServer.jsonUnsafe(unwrapForgeEnvelope(snapshotOutcome.value), { status: 200 });
|
|
298602
|
+
}).pipe(require_Schema$1.catchTag("AuthError", (error) => respondToAuthError(error)));
|
|
298603
|
+
}
|
|
298604
|
+
const cmmdRefreshProviderUsageRouteLayer = add$1("POST", "/api/cmmd/providers/usage/refresh", makeRefreshProviderUsageHandler());
|
|
298494
298605
|
const cmmdGetUserCodexCredentialRouteLayer = registerProxyRoute({
|
|
298495
298606
|
forgePath: "/api/cmmd/providers/codex/credential",
|
|
298496
298607
|
method: "GET",
|
|
@@ -298656,9 +298767,10 @@ const cmmdForgeCloudProjectRemovalReceiptRouteLayer = registerProxyRoute({
|
|
|
298656
298767
|
});
|
|
298657
298768
|
const FORGE_RUNTIMES_POLL_INTERVAL = require_Schema$1.seconds(5);
|
|
298658
298769
|
const FORGE_RUNTIMES_KEEPALIVE_INTERVAL = require_Schema$1.seconds(25);
|
|
298659
|
-
function encodeForgeCloudProjectsFrame(projects, capacity = null) {
|
|
298770
|
+
function encodeForgeCloudProjectsFrame(projects, environments, capacity = null) {
|
|
298660
298771
|
return new TextEncoder().encode(`event: cloud-projects\ndata: ${JSON.stringify({
|
|
298661
298772
|
projects,
|
|
298773
|
+
environments,
|
|
298662
298774
|
capacity
|
|
298663
298775
|
})}\n\n`);
|
|
298664
298776
|
}
|
|
@@ -298702,7 +298814,10 @@ function makeFetchCloudProjectsFrameEffect(upstreamUrl, accessToken) {
|
|
|
298702
298814
|
}
|
|
298703
298815
|
const json = await res.json();
|
|
298704
298816
|
const unwrapped = json && typeof json === "object" && "data" in json && json["data"] ? json["data"] : json;
|
|
298705
|
-
|
|
298817
|
+
const projects = unwrapped?.["projects"];
|
|
298818
|
+
const environments = unwrapped?.["environments"];
|
|
298819
|
+
if (!Array.isArray(projects) || !Array.isArray(environments)) return null;
|
|
298820
|
+
return encodeForgeCloudProjectsFrame(projects, environments, unwrapped?.["capacity"] ?? null);
|
|
298706
298821
|
})).pipe(require_Schema$1.catch_(() => require_Schema$1.succeed(null)));
|
|
298707
298822
|
}
|
|
298708
298823
|
const cmmdForgeCloudProjectsEventsRouteLayer = add$1("GET", "/api/cmmd/forge-cloud-projects/events", require_Schema$1.gen(function* () {
|
|
@@ -309564,6 +309679,82 @@ const claudeNativeGenerationProofRouteLayer = add$1("GET", "/api/runtime/provide
|
|
|
309564
309679
|
generationHash
|
|
309565
309680
|
});
|
|
309566
309681
|
}));
|
|
309682
|
+
const defaultClaudeUsageRouteDependencies = {
|
|
309683
|
+
readCredential: async (token) => {
|
|
309684
|
+
const base = process.env.FORGE_CMMD_RUNTIME_CONTROL_PLANE_URL?.trim() ?? "";
|
|
309685
|
+
if (!base) return null;
|
|
309686
|
+
const response = await fetch(`${base.replace(/\/+$/u, "")}/api/forge/context/auth-runtime-claude-credential`, {
|
|
309687
|
+
headers: {
|
|
309688
|
+
authorization: `Bearer ${token}`,
|
|
309689
|
+
accept: "application/json"
|
|
309690
|
+
},
|
|
309691
|
+
signal: AbortSignal.timeout(2e4)
|
|
309692
|
+
});
|
|
309693
|
+
return response.ok ? response.text() : null;
|
|
309694
|
+
},
|
|
309695
|
+
createDirectory: () => (0, node_fs_promises.mkdtemp)((0, node_path.join)((0, node_os.tmpdir)(), "forge-claude-usage-")),
|
|
309696
|
+
writeCredential: (directory, credential) => (0, node_fs_promises.writeFile)((0, node_path.join)(directory, ".credentials.json"), credential, { mode: 384 }),
|
|
309697
|
+
loadUsage: (directory) => fetchClaudeUsageViaOfficialClient({
|
|
309698
|
+
binaryPath: resolveClaudeBinaryPath("claude"),
|
|
309699
|
+
claudeConfigDir: directory
|
|
309700
|
+
}),
|
|
309701
|
+
removeDirectory: (directory) => (0, node_fs_promises.rm)(directory, {
|
|
309702
|
+
recursive: true,
|
|
309703
|
+
force: false
|
|
309704
|
+
}),
|
|
309705
|
+
now: () => /* @__PURE__ */ new Date()
|
|
309706
|
+
};
|
|
309707
|
+
const claudeUsageHandler = (dependencies) => require_Schema$1.gen(function* () {
|
|
309708
|
+
const request = yield* require_HttpServer.HttpServerRequest;
|
|
309709
|
+
const config = yield* ServerConfig;
|
|
309710
|
+
const token = claudeReadinessToken(request.headers.authorization);
|
|
309711
|
+
const required = completeClaudeReadinessExpectations(config);
|
|
309712
|
+
if (!token || !required) return unauthorizedClaudeReadinessResponse();
|
|
309713
|
+
const claims = require_runtimeControlAuthority.verifyCmmdClaudeUsageTicket(token, required);
|
|
309714
|
+
if (!claims) return unauthorizedClaudeReadinessResponse();
|
|
309715
|
+
const claimed = claimClaudeReadinessJti({
|
|
309716
|
+
jti: claims.jti,
|
|
309717
|
+
expiresAtSeconds: claims.expiresAtSeconds,
|
|
309718
|
+
nowSeconds: Math.floor(Date.now() / 1e3)
|
|
309719
|
+
});
|
|
309720
|
+
if (claimed === "replayed") return unauthorizedClaudeReadinessResponse();
|
|
309721
|
+
if (claimed === "capacity_exhausted") return require_HttpServer.jsonUnsafe({ error: "temporarily_unavailable" }, { status: 503 });
|
|
309722
|
+
return yield* require_Schema$1.promise(async () => {
|
|
309723
|
+
let directory = null;
|
|
309724
|
+
let response = require_HttpServer.jsonUnsafe({ error: "temporarily_unavailable" }, { status: 503 });
|
|
309725
|
+
try {
|
|
309726
|
+
directory = await dependencies.createDirectory();
|
|
309727
|
+
const credentialJson = await dependencies.readCredential(token);
|
|
309728
|
+
if (credentialJson !== null && isClaudeSubscriptionCredential(credentialJson)) {
|
|
309729
|
+
await dependencies.writeCredential(directory, credentialJson);
|
|
309730
|
+
const usage = await dependencies.loadUsage(directory);
|
|
309731
|
+
response = require_HttpServer.jsonUnsafe({
|
|
309732
|
+
fiveHour: usage.fiveHour,
|
|
309733
|
+
sevenDay: usage.sevenDay,
|
|
309734
|
+
observedAt: dependencies.now().toISOString(),
|
|
309735
|
+
receipt: {
|
|
309736
|
+
orgId: claims.orgId,
|
|
309737
|
+
userId: claims.userId,
|
|
309738
|
+
runtimeId: claims.runtimeId,
|
|
309739
|
+
machineId: claims.machineId,
|
|
309740
|
+
credentialEpoch: claims.credentialEpoch,
|
|
309741
|
+
providerAccountId: claims.providerAccountId,
|
|
309742
|
+
credentialGenerationId: claims.generationId
|
|
309743
|
+
}
|
|
309744
|
+
}, { headers: { "cache-control": "no-store" } });
|
|
309745
|
+
}
|
|
309746
|
+
} catch {}
|
|
309747
|
+
if (directory === null) return response;
|
|
309748
|
+
try {
|
|
309749
|
+
await dependencies.removeDirectory(directory);
|
|
309750
|
+
} catch {
|
|
309751
|
+
return require_HttpServer.jsonUnsafe({ error: "temporarily_unavailable" }, { status: 503 });
|
|
309752
|
+
}
|
|
309753
|
+
return response;
|
|
309754
|
+
});
|
|
309755
|
+
});
|
|
309756
|
+
const createClaudeUsageRouteLayer = (dependencies = defaultClaudeUsageRouteDependencies) => add$1("POST", "/api/runtime/provider-usage/claude", claudeUsageHandler(dependencies));
|
|
309757
|
+
const claudeUsageRouteLayer = createClaudeUsageRouteLayer();
|
|
309567
309758
|
/**
|
|
309568
309759
|
* FINDING-CB1 — workspace readiness SSE endpoint.
|
|
309569
309760
|
*
|
|
@@ -309911,7 +310102,7 @@ const MiscRuntimeLayerLive = require_Schema$1.mergeAll(AnalyticsServiceLayerLive
|
|
|
309911
310102
|
const RuntimeDependenciesWithoutPullRequestsLive = ReactorLayerLive.pipe(require_Schema$1.provideMerge(CheckpointingLayerLive), require_Schema$1.provideMerge(GitLayerLive), require_Schema$1.provideMerge(OrchestrationLayerLive), require_Schema$1.provideMerge(ProviderLayerLive), require_Schema$1.provideMerge(TerminalLayerLive), require_Schema$1.provideMerge(AgentBrowserManagerLive), require_Schema$1.provideMerge(require_Schema$1.mergeAll(ThreadDevRuntimeLive, DevTunnelLive.pipe(require_Schema$1.provide$1(ThreadDevRuntimeLive)))), require_Schema$1.provideMerge(PersistenceLayerLive), require_Schema$1.provideMerge(KeybindingsLive), require_Schema$1.provideMerge(ProviderRegistryLive), require_Schema$1.provideMerge(require_Schema$1.mergeAll(ServerSettingsLive, UsageServiceLive.pipe(require_Schema$1.provide$1(ServerSettingsLive)))), require_Schema$1.provideMerge(WorkspaceLayerLive), require_Schema$1.provideMerge(WorkspaceReadinessStateLive), require_Schema$1.provideMerge(ProjectFaviconResolverLive), require_Schema$1.provideMerge(RepositoryIdentityResolverLive), require_Schema$1.provideMerge(ServerEnvironmentLive), require_Schema$1.provideMerge(AuthLayerLive), require_Schema$1.provideMerge(ServerSecretStoreLayerLive), require_Schema$1.provideMerge(require_Schema$1.mergeAll(CloudRedisCoordinationLive, CloudStateSyncLive.pipe(require_Schema$1.provide$1(PersistenceLayerLive)))), require_Schema$1.provideMerge(MiscRuntimeLayerLive));
|
|
309912
310103
|
const RuntimeDependenciesLive = pullRequestServiceFactoryLayer.pipe(require_Schema$1.provideMerge(RuntimeDependenciesWithoutPullRequestsLive), require_Schema$1.provideMerge(cmmdProjectIdentityResolverLive.pipe(require_Schema$1.provide$1(RuntimeDependenciesWithoutPullRequestsLive))), require_Schema$1.provideMerge(pullRequestProviderRuntimeLive));
|
|
309913
310104
|
const RuntimeServicesLive = ServerRuntimeStartupLive.pipe(require_Schema$1.provideMerge(RuntimeDependenciesLive));
|
|
309914
|
-
const makeRoutesLayer = require_Schema$1.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(require_Schema$1.provide$1(browserApiCorsLayer));
|
|
310105
|
+
const makeRoutesLayer = require_Schema$1.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(require_Schema$1.provide$1(browserApiCorsLayer));
|
|
309915
310106
|
const makeServerLayer = require_Schema$1.unwrap(require_Schema$1.gen(function* () {
|
|
309916
310107
|
const config = yield* ServerConfig;
|
|
309917
310108
|
fixPath();
|