@cmmd-center/forge 0.13.92 → 0.13.93
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 -91
- package/dist/bin.mjs +331 -91
- package/dist/client/assets/{DiffPanel-C37SDXUs.js → DiffPanel-CLk1Bgp1.js} +2 -2
- package/dist/client/assets/{DiffPanel.logic-D7Qjzo8o.js → DiffPanel.logic-CcHMZM1Y.js} +2 -2
- package/dist/client/assets/{DiffWorkerPoolProvider-B1C81-dL.js → DiffWorkerPoolProvider-FrL5ZM1K.js} +2 -2
- package/dist/client/assets/{PullRequestCodePanel-BLjOVvZc.js → PullRequestCodePanel-D4w7S-dm.js} +2 -2
- package/dist/client/assets/{Virtualizer-Bi-1tOHj.js → Virtualizer-CVkyeAyj.js} +2 -2
- package/dist/client/assets/{WorkerPoolContext-BwA1RAnm.js → WorkerPoolContext-DWQ4L294.js} +115 -115
- package/dist/client/assets/{cmmdAuthRedirect-Bx5ApJLL.js → cmmdAuthRedirect-DJMI3b92.js} +2 -2
- package/dist/client/assets/index-B9Alklxx.css +1 -0
- package/dist/client/assets/{index-PlTOUnMB.js → index-q03RpQPf.js} +60 -60
- package/dist/client/index.html +6 -6
- package/dist/forge-build.json +1 -1
- package/package.json +1 -1
- package/dist/client/assets/index-BvseDV5h.css +0 -1
package/dist/bin.mjs
CHANGED
|
@@ -26794,12 +26794,12 @@ function encodeCmmdRuntimeThreadWorkspaceMetadata(workspace) {
|
|
|
26794
26794
|
}
|
|
26795
26795
|
//#endregion
|
|
26796
26796
|
//#region ../../packages/contracts/src/cmmdRuntimeToolActivity.ts
|
|
26797
|
-
function isRecord$
|
|
26797
|
+
function isRecord$25(value) {
|
|
26798
26798
|
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
26799
26799
|
}
|
|
26800
26800
|
function encodeCmmdRuntimeToolActivityPayload(kind, payload) {
|
|
26801
26801
|
return {
|
|
26802
|
-
...isRecord$
|
|
26802
|
+
...isRecord$25(payload) ? payload : { sourcePayload: payload },
|
|
26803
26803
|
forgeToolActivity: {
|
|
26804
26804
|
schemaVersion: 1,
|
|
26805
26805
|
source: "native",
|
|
@@ -26822,7 +26822,7 @@ const WORKTREE_LAUNCH_ACTIVITY_KINDS = new Set([
|
|
|
26822
26822
|
]);
|
|
26823
26823
|
function encodeCmmdRuntimeWorktreeLaunchActivityPayload(kind, payload) {
|
|
26824
26824
|
return {
|
|
26825
|
-
...isRecord$
|
|
26825
|
+
...isRecord$25(payload) ? payload : { sourcePayload: payload },
|
|
26826
26826
|
forgeWorktreeLaunchActivity: {
|
|
26827
26827
|
schemaVersion: 1,
|
|
26828
26828
|
source: "native",
|
|
@@ -26842,7 +26842,7 @@ function isCmmdRuntimeWorktreeLaunchActivityKind(kind) {
|
|
|
26842
26842
|
const CMMD_RUNTIME_PLAN_ACTIVITY_KIND = "turn.plan.updated";
|
|
26843
26843
|
function encodeCmmdRuntimePlanActivityPayload(kind, payload) {
|
|
26844
26844
|
return {
|
|
26845
|
-
...isRecord$
|
|
26845
|
+
...isRecord$25(payload) ? payload : { sourcePayload: payload },
|
|
26846
26846
|
forgePlanActivity: {
|
|
26847
26847
|
schemaVersion: 1,
|
|
26848
26848
|
source: "native",
|
|
@@ -26851,15 +26851,15 @@ function encodeCmmdRuntimePlanActivityPayload(kind, payload) {
|
|
|
26851
26851
|
};
|
|
26852
26852
|
}
|
|
26853
26853
|
function decodeCmmdRuntimePlanActivity(payload) {
|
|
26854
|
-
if (!isRecord$
|
|
26854
|
+
if (!isRecord$25(payload)) return null;
|
|
26855
26855
|
const metadata = payload["forgePlanActivity"];
|
|
26856
|
-
if (!isRecord$
|
|
26856
|
+
if (!isRecord$25(metadata)) return null;
|
|
26857
26857
|
if (metadata["schemaVersion"] !== 1 || metadata["source"] !== "native" || metadata["kind"] !== "turn.plan.updated") return null;
|
|
26858
26858
|
const rawPlan = payload["plan"];
|
|
26859
26859
|
return {
|
|
26860
26860
|
kind: CMMD_RUNTIME_PLAN_ACTIVITY_KIND,
|
|
26861
26861
|
plan: Array.isArray(rawPlan) ? rawPlan.flatMap((entry) => {
|
|
26862
|
-
if (!isRecord$
|
|
26862
|
+
if (!isRecord$25(entry)) return [];
|
|
26863
26863
|
const step = entry["step"];
|
|
26864
26864
|
const status = entry["status"];
|
|
26865
26865
|
if (typeof step !== "string" || step.trim().length === 0) return [];
|
|
@@ -30875,13 +30875,13 @@ async function completePendingDesktopRelayIdentityRotation(input) {
|
|
|
30875
30875
|
}
|
|
30876
30876
|
//#endregion
|
|
30877
30877
|
//#region ../../packages/relay-host/src/internal/desktopRelayJws.ts
|
|
30878
|
-
function isRecord$
|
|
30878
|
+
function isRecord$24(value) {
|
|
30879
30879
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
30880
30880
|
}
|
|
30881
30881
|
function decodeBase64UrlJson$1(value) {
|
|
30882
30882
|
try {
|
|
30883
30883
|
const decoded = JSON.parse(Buffer.from(value, "base64url").toString("utf8"));
|
|
30884
|
-
return isRecord$
|
|
30884
|
+
return isRecord$24(decoded) ? decoded : null;
|
|
30885
30885
|
} catch {
|
|
30886
30886
|
return null;
|
|
30887
30887
|
}
|
|
@@ -31035,11 +31035,11 @@ var DesktopRelayControlPlaneError = class extends Error {
|
|
|
31035
31035
|
this.name = "DesktopRelayControlPlaneError";
|
|
31036
31036
|
}
|
|
31037
31037
|
};
|
|
31038
|
-
function isRecord$
|
|
31038
|
+
function isRecord$23(value) {
|
|
31039
31039
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
31040
31040
|
}
|
|
31041
31041
|
function parseErrorPayload(value) {
|
|
31042
|
-
return isRecord$
|
|
31042
|
+
return isRecord$23(value) ? value : {};
|
|
31043
31043
|
}
|
|
31044
31044
|
function messageFromErrorPayload(payload, fallback) {
|
|
31045
31045
|
return typeof payload.error === "string" && payload.error.trim().length > 0 ? payload.error.trim() : fallback;
|
|
@@ -31137,7 +31137,7 @@ async function postControlPlane(input) {
|
|
|
31137
31137
|
const errorPayload = parseErrorPayload(payload);
|
|
31138
31138
|
throw new DesktopRelayControlPlaneError(typeof errorPayload.code === "string" && errorPayload.code.trim().length > 0 ? errorPayload.code.trim() : `CMMD_HTTP_${response.status}`, messageFromErrorPayload(errorPayload, `CMMD relay request failed (${response.status}).`), response.status === 408 || response.status === 429 || response.status >= 500);
|
|
31139
31139
|
}
|
|
31140
|
-
if (!isRecord$
|
|
31140
|
+
if (!isRecord$23(payload) || !("data" in payload)) throw new DesktopRelayControlPlaneError("CONTROL_PLANE_INVALID_RESPONSE", "CMMD returned an invalid Forge relay response.", false);
|
|
31141
31141
|
return payload.data;
|
|
31142
31142
|
}
|
|
31143
31143
|
function resolveRegisteredDevice(input) {
|
|
@@ -66020,7 +66020,7 @@ function normalizeNumberish(value) {
|
|
|
66020
66020
|
}
|
|
66021
66021
|
//#endregion
|
|
66022
66022
|
//#region package.json
|
|
66023
|
-
var version$1 = "0.13.
|
|
66023
|
+
var version$1 = "0.13.93";
|
|
66024
66024
|
//#endregion
|
|
66025
66025
|
//#region src/sentry.ts
|
|
66026
66026
|
const SERVER_APP_NAME = "forge-server";
|
|
@@ -66636,17 +66636,17 @@ function readCmmdAvatarUrl(raw) {
|
|
|
66636
66636
|
}
|
|
66637
66637
|
//#endregion
|
|
66638
66638
|
//#region src/cmmdIdentity.ts
|
|
66639
|
-
function readTrimmedString$
|
|
66639
|
+
function readTrimmedString$3(value) {
|
|
66640
66640
|
return typeof value === "string" ? value.trim() || null : null;
|
|
66641
66641
|
}
|
|
66642
66642
|
function asRecord$14(value) {
|
|
66643
66643
|
return value && typeof value === "object" ? value : null;
|
|
66644
66644
|
}
|
|
66645
66645
|
function readDirectPlanLabelFromRecord(obj) {
|
|
66646
|
-
return readTrimmedString$
|
|
66646
|
+
return readTrimmedString$3(obj["planLabel"]) ?? readTrimmedString$3(obj["plan_label"]) ?? readTrimmedString$3(obj["planName"]) ?? readTrimmedString$3(obj["plan_name"]) ?? readTrimmedString$3(obj["subscriptionPlan"]) ?? readTrimmedString$3(obj["subscription_plan"]) ?? readTrimmedString$3(obj["billingPlan"]) ?? readTrimmedString$3(obj["billing_plan"]);
|
|
66647
66647
|
}
|
|
66648
66648
|
function readNestedPlanLabelFromRecord(obj) {
|
|
66649
|
-
return readDirectPlanLabelFromRecord(obj) ?? readTrimmedString$
|
|
66649
|
+
return readDirectPlanLabelFromRecord(obj) ?? readTrimmedString$3(obj["displayName"]) ?? readTrimmedString$3(obj["display_name"]) ?? readTrimmedString$3(obj["name"]) ?? readTrimmedString$3(obj["label"]) ?? readTrimmedString$3(obj["tier"]);
|
|
66650
66650
|
}
|
|
66651
66651
|
function readCmmdPlanLabel(obj) {
|
|
66652
66652
|
const direct = readDirectPlanLabelFromRecord(obj);
|
|
@@ -70470,11 +70470,23 @@ function createCloudflareTurnIceServerResolver(options) {
|
|
|
70470
70470
|
//#region src/http.ts
|
|
70471
70471
|
const PROJECT_FAVICON_CACHE_CONTROL = "public, max-age=3600";
|
|
70472
70472
|
const PROJECT_FAVICON_MISS_CACHE_CONTROL = "public, max-age=300";
|
|
70473
|
+
/**
|
|
70474
|
+
* Origins allowed to embed Forge's SPA (CMMD /forge iframe). Docs keep their
|
|
70475
|
+
* own CSP with frame-ancestors 'none'. Do not put a broad * here.
|
|
70476
|
+
*/
|
|
70477
|
+
const CMMD_FRAME_ANCESTORS = [
|
|
70478
|
+
"https://cmmd.ai",
|
|
70479
|
+
"https://*.cmmd.ai",
|
|
70480
|
+
"http://127.0.0.1:3015",
|
|
70481
|
+
"http://localhost:3015",
|
|
70482
|
+
"http://127.0.0.1:3000",
|
|
70483
|
+
"http://localhost:3000"
|
|
70484
|
+
];
|
|
70473
70485
|
const BROWSER_DOCUMENT_SECURITY_HEADERS = {
|
|
70474
70486
|
"permissions-policy": "camera=(), microphone=(), geolocation=()",
|
|
70475
70487
|
"referrer-policy": "no-referrer",
|
|
70476
70488
|
"x-content-type-options": "nosniff",
|
|
70477
|
-
"
|
|
70489
|
+
"content-security-policy": `frame-ancestors ${CMMD_FRAME_ANCESTORS.join(" ")}`
|
|
70478
70490
|
};
|
|
70479
70491
|
const STATIC_IMMUTABLE_CACHE_CONTROL = "public, max-age=31536000, immutable";
|
|
70480
70492
|
const STATIC_REVALIDATE_CACHE_CONTROL = "no-cache";
|
|
@@ -70496,19 +70508,31 @@ function normalizeConfiguredCorsOrigin(value) {
|
|
|
70496
70508
|
const CONFIGURED_CORS_ORIGINS = [normalizeConfiguredCorsOrigin(process.env.VITE_DEV_SERVER_URL), normalizeConfiguredCorsOrigin(process.env.FORGE_EXTRA_CORS_ORIGIN)].filter((origin) => origin !== void 0);
|
|
70497
70509
|
const ALLOWED_CORS_ORIGINS = new Set([
|
|
70498
70510
|
"http://localhost:3000",
|
|
70511
|
+
"http://localhost:3015",
|
|
70499
70512
|
"http://localhost:5733",
|
|
70500
70513
|
"http://localhost:13773",
|
|
70501
70514
|
"http://localhost:5173",
|
|
70502
70515
|
"http://127.0.0.1:3000",
|
|
70516
|
+
"http://127.0.0.1:3015",
|
|
70503
70517
|
"http://127.0.0.1:5733",
|
|
70504
70518
|
"http://127.0.0.1:13773",
|
|
70505
70519
|
"http://127.0.0.1:5173",
|
|
70520
|
+
"https://cmmd.ai",
|
|
70506
70521
|
"https://forge-cloud.cmmd.ai",
|
|
70507
70522
|
"forge://app",
|
|
70508
70523
|
...CONFIGURED_CORS_ORIGINS
|
|
70509
70524
|
]);
|
|
70525
|
+
function isCmmdAiCorsOrigin(origin) {
|
|
70526
|
+
try {
|
|
70527
|
+
const url = new URL(origin);
|
|
70528
|
+
if (url.protocol !== "https:") return false;
|
|
70529
|
+
return url.hostname === "cmmd.ai" || url.hostname.endsWith(".cmmd.ai");
|
|
70530
|
+
} catch {
|
|
70531
|
+
return false;
|
|
70532
|
+
}
|
|
70533
|
+
}
|
|
70510
70534
|
function isAllowedCorsOrigin(origin) {
|
|
70511
|
-
return ALLOWED_CORS_ORIGINS.has(origin);
|
|
70535
|
+
return ALLOWED_CORS_ORIGINS.has(origin) || isCmmdAiCorsOrigin(origin);
|
|
70512
70536
|
}
|
|
70513
70537
|
const browserApiCorsLayer = middleware(cors({
|
|
70514
70538
|
allowedOrigins: isAllowedCorsOrigin,
|
|
@@ -71606,7 +71630,7 @@ const EMPTY_PARSED_ERROR = {
|
|
|
71606
71630
|
function asRecord$13(value) {
|
|
71607
71631
|
return value !== null && typeof value === "object" && !Array.isArray(value) ? value : null;
|
|
71608
71632
|
}
|
|
71609
|
-
function readTrimmedString$
|
|
71633
|
+
function readTrimmedString$2(value) {
|
|
71610
71634
|
return (typeof value === "string" ? value.trim() : "") || null;
|
|
71611
71635
|
}
|
|
71612
71636
|
function readErrorEnvelope(record) {
|
|
@@ -71615,7 +71639,7 @@ function readErrorEnvelope(record) {
|
|
|
71615
71639
|
function readUpstreamErrorCode(body) {
|
|
71616
71640
|
const record = asRecord$13(body);
|
|
71617
71641
|
if (record === null) return null;
|
|
71618
|
-
return readTrimmedString$
|
|
71642
|
+
return readTrimmedString$2(record["code"]) ?? readTrimmedString$2(readErrorEnvelope(record)?.["code"]);
|
|
71619
71643
|
}
|
|
71620
71644
|
function readErrorMessage$2(raw) {
|
|
71621
71645
|
const record = asRecord$13(raw);
|
|
@@ -72856,12 +72880,12 @@ function resolveDesktopRelayControlPlaneTarget(path, configuredRuntimeId) {
|
|
|
72856
72880
|
code: "RELAY_OPERATION_DENIED"
|
|
72857
72881
|
};
|
|
72858
72882
|
}
|
|
72859
|
-
function isRecord$
|
|
72883
|
+
function isRecord$22(value) {
|
|
72860
72884
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
72861
72885
|
}
|
|
72862
72886
|
function relayControlPlaneBodyMatchesRuntime(path, body, configuredRuntimeId) {
|
|
72863
72887
|
if (path !== "/api/forge/context/devices/register") return true;
|
|
72864
|
-
if (!isRecord$
|
|
72888
|
+
if (!isRecord$22(body) || !isRecord$22(body.runtime)) return false;
|
|
72865
72889
|
return body.runtime.runtimeId === configuredRuntimeId;
|
|
72866
72890
|
}
|
|
72867
72891
|
/** Matches the client id `connect login` used, so CMMD accepts the refresh. */
|
|
@@ -72876,7 +72900,7 @@ function forbiddenResponse() {
|
|
|
72876
72900
|
return errorResponse(403, "RELAY_BRIDGE_FORBIDDEN", "Desktop relay bridge access denied.");
|
|
72877
72901
|
}
|
|
72878
72902
|
function relayProxyErrorResponse(error) {
|
|
72879
|
-
if (error instanceof CmmdProxyRequestError && isRecord$
|
|
72903
|
+
if (error instanceof CmmdProxyRequestError && isRecord$22(error.body)) {
|
|
72880
72904
|
const code = typeof error.body.code === "string" ? error.body.code : error.code;
|
|
72881
72905
|
const message = typeof error.body.error === "string" ? error.body.error : error.detail;
|
|
72882
72906
|
return errorResponse(error.status >= 500 ? 502 : error.status, code, message ?? "CMMD relay coordination failed.");
|
|
@@ -95499,7 +95523,7 @@ const REPLICA_THREAD_STATUSES = [
|
|
|
95499
95523
|
];
|
|
95500
95524
|
//#endregion
|
|
95501
95525
|
//#region src/runtimeReplication/replicaDecodeModel.ts
|
|
95502
|
-
function isRecord$
|
|
95526
|
+
function isRecord$21(value) {
|
|
95503
95527
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
95504
95528
|
}
|
|
95505
95529
|
function isNonBlankString(value) {
|
|
@@ -95519,7 +95543,7 @@ function nullableInteger(value) {
|
|
|
95519
95543
|
return value === null || typeof value === "number" && Number.isSafeInteger(value);
|
|
95520
95544
|
}
|
|
95521
95545
|
function unwrapEnvelope(payload, expectedDomain) {
|
|
95522
|
-
if (!isRecord$
|
|
95546
|
+
if (!isRecord$21(payload) || !isRecord$21(payload.meta) || !isRecord$21(payload.data)) return null;
|
|
95523
95547
|
const { domain, timestamp, version } = payload.meta;
|
|
95524
95548
|
if (!isNonBlankString(domain) || expectedDomain !== void 0 && domain !== expectedDomain || version !== "1.0" || !isIsoDateTime(timestamp)) return null;
|
|
95525
95549
|
return payload.data;
|
|
@@ -95532,12 +95556,12 @@ function hasValidRuntimeIdentity(value) {
|
|
|
95532
95556
|
].includes(String(value.runtimeKind)) && typeof value.displayName === "string" && typeof value.status === "string";
|
|
95533
95557
|
}
|
|
95534
95558
|
function decodeRuntime$1(value) {
|
|
95535
|
-
if (!isRecord$
|
|
95536
|
-
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 === void 0 || value.metadata === null || isRecord$
|
|
95559
|
+
if (!isRecord$21(value) || !hasValidRuntimeIdentity(value)) return null;
|
|
95560
|
+
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 === void 0 || value.metadata === null || isRecord$21(value.metadata))) return null;
|
|
95537
95561
|
return value;
|
|
95538
95562
|
}
|
|
95539
95563
|
function decodeProject(value) {
|
|
95540
|
-
if (!isRecord$
|
|
95564
|
+
if (!isRecord$21(value) || !isNonBlankString(value.projectId) || typeof value.title !== "string" || !nullableString(value.githubRepoFullName) || !nullableString(value.branch)) return null;
|
|
95541
95565
|
return {
|
|
95542
95566
|
projectId: value.projectId,
|
|
95543
95567
|
title: value.title,
|
|
@@ -95546,11 +95570,11 @@ function decodeProject(value) {
|
|
|
95546
95570
|
};
|
|
95547
95571
|
}
|
|
95548
95572
|
function decodeThread$1(value) {
|
|
95549
|
-
if (!isRecord$
|
|
95573
|
+
if (!isRecord$21(value) || !isNonBlankString(value.threadId) || typeof value.title !== "string" || !isReplicaThreadStatus(value.status) || !nullableString(value.model) || !nullableString(value.branch) || !(value.lastActivityAt === null || isIsoDateTime(value.lastActivityAt)) || !(value.metadata === void 0 || value.metadata === null || isRecord$21(value.metadata))) return null;
|
|
95550
95574
|
return value;
|
|
95551
95575
|
}
|
|
95552
95576
|
function decodeSummary(value) {
|
|
95553
|
-
if (!isRecord$
|
|
95577
|
+
if (!isRecord$21(value) || !nullableString(value.conversationId)) return null;
|
|
95554
95578
|
const project = decodeProject(value.project);
|
|
95555
95579
|
const thread = decodeThread$1(value.thread);
|
|
95556
95580
|
return project === null || thread === null ? null : {
|
|
@@ -95661,7 +95685,7 @@ function isNonNegativeInt(value) {
|
|
|
95661
95685
|
/** `usage` is null for an Unreported turn, otherwise exactly the five buckets. */
|
|
95662
95686
|
function isValidTurnUsageTokens(value) {
|
|
95663
95687
|
if (value === null) return true;
|
|
95664
|
-
if (!isRecord$
|
|
95688
|
+
if (!isRecord$21(value)) return false;
|
|
95665
95689
|
return turnUsageTokenKeys.every((key) => isNonNegativeInt(value[key])) && Object.keys(value).every((key) => turnUsageTokenKeys.includes(key));
|
|
95666
95690
|
}
|
|
95667
95691
|
/** The row itself: no text, no status, and the turn it belongs to. */
|
|
@@ -95670,7 +95694,7 @@ function hasValidTurnUsageEnvelope(value) {
|
|
|
95670
95694
|
}
|
|
95671
95695
|
/** What the row records: who ran it, what it spent, and what it says of itself. */
|
|
95672
95696
|
function hasValidTurnUsageRecord(payload) {
|
|
95673
|
-
return isRecord$
|
|
95697
|
+
return isRecord$21(payload) && isNonBlankString(payload.provider) && isNonBlankString(payload.model) && "usage" in payload && isValidTurnUsageTokens(payload.usage) && hasValidTurnUsageAttribution(payload);
|
|
95674
95698
|
}
|
|
95675
95699
|
/** A turn_usage row: no text, no status, and its record in `payload`. */
|
|
95676
95700
|
function hasValidTurnUsagePayload(value) {
|
|
@@ -95707,7 +95731,7 @@ function hasValidEventPayload(value) {
|
|
|
95707
95731
|
return isNonBlankString(value.text) && value.status === null;
|
|
95708
95732
|
}
|
|
95709
95733
|
function decodeEvent$1(value) {
|
|
95710
|
-
if (!isRecord$
|
|
95734
|
+
if (!isRecord$21(value) || !hasValidEventFields(value) || !hasValidEventPayload(value)) return null;
|
|
95711
95735
|
return value;
|
|
95712
95736
|
}
|
|
95713
95737
|
function decodeEvents(data) {
|
|
@@ -95728,11 +95752,11 @@ function decodeReplicaThreadDetail(payload) {
|
|
|
95728
95752
|
const thread = decodeThread$1(data.thread);
|
|
95729
95753
|
const reachability = decodeReachability(data.reachability);
|
|
95730
95754
|
const events = decodeEvents(data);
|
|
95731
|
-
if (runtime === null || project === null || thread === null || reachability === null || events === null || !isRecord$
|
|
95755
|
+
if (runtime === null || project === null || thread === null || reachability === null || events === null || !isRecord$21(data.execution) || typeof data.execution.available !== "boolean" || ![
|
|
95732
95756
|
null,
|
|
95733
95757
|
"runtime_offline",
|
|
95734
95758
|
"runtime_unavailable"
|
|
95735
|
-
].includes(data.execution.reason) || (data.execution.available ? data.execution.reason !== null : data.execution.reason === null) || !isRecord$
|
|
95759
|
+
].includes(data.execution.reason) || (data.execution.available ? data.execution.reason !== null : data.execution.reason === null) || !isRecord$21(data.replication) || data.replication.protocolVersion !== 2 || !isNonBlankString(data.replication.generationId) || !Number.isSafeInteger(data.replication.acknowledgedSequence) || Number(data.replication.acknowledgedSequence) < 0 || !isNonBlankString(data.replication.headHash)) return null;
|
|
95736
95760
|
return {
|
|
95737
95761
|
conversationId: data.conversationId,
|
|
95738
95762
|
runtime,
|
|
@@ -96807,7 +96831,7 @@ function resolveRuntimeReplicationRuntimeId(config) {
|
|
|
96807
96831
|
}
|
|
96808
96832
|
//#endregion
|
|
96809
96833
|
//#region src/usage/providerTokenBuckets.ts
|
|
96810
|
-
function isRecord$
|
|
96834
|
+
function isRecord$20(value) {
|
|
96811
96835
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
96812
96836
|
}
|
|
96813
96837
|
function count(record, ...keys) {
|
|
@@ -96828,7 +96852,7 @@ function reportedOrNull(tokens) {
|
|
|
96828
96852
|
* the app server sends camelCase.
|
|
96829
96853
|
*/
|
|
96830
96854
|
function codexTokenBuckets(value) {
|
|
96831
|
-
if (!isRecord$
|
|
96855
|
+
if (!isRecord$20(value)) return null;
|
|
96832
96856
|
const inputTokens = count(value, "input_tokens", "inputTokens");
|
|
96833
96857
|
const cachedInputTokens = count(value, "cached_input_tokens", "cachedInputTokens");
|
|
96834
96858
|
const cacheCreationTokens = count(value, "cache_write_input_tokens", "cacheWriteInputTokens");
|
|
@@ -96847,7 +96871,7 @@ function codexTokenBuckets(value) {
|
|
|
96847
96871
|
* tokens into output and does not break them out, so reasoning stays zero.
|
|
96848
96872
|
*/
|
|
96849
96873
|
function claudeTokenBuckets(value) {
|
|
96850
|
-
if (!isRecord$
|
|
96874
|
+
if (!isRecord$20(value)) return null;
|
|
96851
96875
|
return reportedOrNull({
|
|
96852
96876
|
uncachedInputTokens: count(value, "input_tokens", "inputTokens"),
|
|
96853
96877
|
cachedInputTokens: count(value, "cache_read_input_tokens", "cacheReadInputTokens"),
|
|
@@ -98018,7 +98042,7 @@ const replicaTurnStatuses = new Set([
|
|
|
98018
98042
|
"cancelled",
|
|
98019
98043
|
"interrupted"
|
|
98020
98044
|
]);
|
|
98021
|
-
function isRecord$
|
|
98045
|
+
function isRecord$19(value) {
|
|
98022
98046
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
98023
98047
|
}
|
|
98024
98048
|
function replicaSourceSequence(value) {
|
|
@@ -98031,7 +98055,7 @@ function replicaSourceTurn(sourceTurnId) {
|
|
|
98031
98055
|
return typeof sourceTurnId === "string" && sourceTurnId.length > 0 ? { turnId: sourceTurnId } : {};
|
|
98032
98056
|
}
|
|
98033
98057
|
function replicaActivitySource(activity) {
|
|
98034
|
-
if (!activity.kind.startsWith("replica.") || !isRecord$
|
|
98058
|
+
if (!activity.kind.startsWith("replica.") || !isRecord$19(activity.payload)) return null;
|
|
98035
98059
|
const sourceSequence = replicaSourceSequence(activity.sequence);
|
|
98036
98060
|
const eventId = replicaSourceEventId(activity.payload.sourceEventId);
|
|
98037
98061
|
if (sourceSequence === null || eventId === null) return null;
|
|
@@ -98044,7 +98068,7 @@ function replicaActivitySource(activity) {
|
|
|
98044
98068
|
}
|
|
98045
98069
|
function replicaSummaryEvent(activity, source) {
|
|
98046
98070
|
if (activity.kind !== "replica.activity_summary" && activity.kind !== "replica.error_summary") return null;
|
|
98047
|
-
const sourceText = isRecord$
|
|
98071
|
+
const sourceText = isRecord$19(activity.payload) ? activity.payload.text : null;
|
|
98048
98072
|
return {
|
|
98049
98073
|
sourceSequence: source.sourceSequence,
|
|
98050
98074
|
event: {
|
|
@@ -98057,7 +98081,7 @@ function replicaSummaryEvent(activity, source) {
|
|
|
98057
98081
|
};
|
|
98058
98082
|
}
|
|
98059
98083
|
function replicaTurnEvent(activity, source) {
|
|
98060
|
-
const status = isRecord$
|
|
98084
|
+
const status = isRecord$19(activity.payload) ? activity.payload.status : null;
|
|
98061
98085
|
if (activity.kind !== "replica.turn_status" || !replicaTurnStatuses.has(status)) return null;
|
|
98062
98086
|
return {
|
|
98063
98087
|
sourceSequence: source.sourceSequence,
|
|
@@ -98071,7 +98095,7 @@ function replicaTurnEvent(activity, source) {
|
|
|
98071
98095
|
};
|
|
98072
98096
|
}
|
|
98073
98097
|
function replicaToolCallEvent(activity, source) {
|
|
98074
|
-
if (activity.kind !== "replica.tool_call" || !isRecord$
|
|
98098
|
+
if (activity.kind !== "replica.tool_call" || !isRecord$19(activity.payload)) return null;
|
|
98075
98099
|
const sourceText = activity.payload.text;
|
|
98076
98100
|
const status = activity.payload.status;
|
|
98077
98101
|
if (typeof sourceText !== "string" || typeof status !== "string") return null;
|
|
@@ -98089,9 +98113,9 @@ function replicaToolCallEvent(activity, source) {
|
|
|
98089
98113
|
};
|
|
98090
98114
|
}
|
|
98091
98115
|
function replicaTurnUsageEvent(activity, source) {
|
|
98092
|
-
if (activity.kind !== "replica.turn_usage" || !isRecord$
|
|
98116
|
+
if (activity.kind !== "replica.turn_usage" || !isRecord$19(activity.payload)) return null;
|
|
98093
98117
|
const usage = activity.payload.payload;
|
|
98094
|
-
if (!("turnId" in source.turn) || !isRecord$
|
|
98118
|
+
if (!("turnId" in source.turn) || !isRecord$19(usage)) return null;
|
|
98095
98119
|
const provider = usage.provider;
|
|
98096
98120
|
const model = usage.model;
|
|
98097
98121
|
if (typeof provider !== "string" || typeof model !== "string" || !("usage" in usage)) return null;
|
|
@@ -99014,9 +99038,9 @@ function isUsageSessionLookupRuntimeNotFound(error) {
|
|
|
99014
99038
|
async function isRuntimeNotFoundResponse(response) {
|
|
99015
99039
|
if (response.status !== 404) return false;
|
|
99016
99040
|
const body = await response.json().catch(() => null);
|
|
99017
|
-
return isRecord$
|
|
99041
|
+
return isRecord$18(body) && body["code"] === "RUNTIME_NOT_FOUND";
|
|
99018
99042
|
}
|
|
99019
|
-
function isRecord$
|
|
99043
|
+
function isRecord$18(value) {
|
|
99020
99044
|
return typeof value === "object" && value !== null;
|
|
99021
99045
|
}
|
|
99022
99046
|
/**
|
|
@@ -99028,11 +99052,11 @@ function isRecord$17(value) {
|
|
|
99028
99052
|
* no count on the page saying so.
|
|
99029
99053
|
*/
|
|
99030
99054
|
function decodeHeldSessions(body) {
|
|
99031
|
-
const held = isRecord$
|
|
99055
|
+
const held = isRecord$18(body) && isRecord$18(body["data"]) ? body["data"]["held"] : void 0;
|
|
99032
99056
|
if (!Array.isArray(held)) throw new Error("The usage session lookup returned an invalid body.");
|
|
99033
99057
|
return held.map((row) => {
|
|
99034
|
-
const providerSessionId = isRecord$
|
|
99035
|
-
const runtimeId = isRecord$
|
|
99058
|
+
const providerSessionId = isRecord$18(row) ? row["providerSessionId"] : void 0;
|
|
99059
|
+
const runtimeId = isRecord$18(row) ? row["runtimeId"] : void 0;
|
|
99036
99060
|
if (typeof providerSessionId !== "string" || typeof runtimeId !== "string") throw new Error("The usage session lookup returned an invalid held row.");
|
|
99037
99061
|
return {
|
|
99038
99062
|
providerSessionId,
|
|
@@ -101842,7 +101866,7 @@ function emptyConfig(source, path) {
|
|
|
101842
101866
|
issues: []
|
|
101843
101867
|
};
|
|
101844
101868
|
}
|
|
101845
|
-
function isRecord$
|
|
101869
|
+
function isRecord$17(value) {
|
|
101846
101870
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
101847
101871
|
}
|
|
101848
101872
|
function stringArray(value) {
|
|
@@ -101870,7 +101894,7 @@ function terminalsFromValue(value) {
|
|
|
101870
101894
|
name: `Terminal ${index + 1}`,
|
|
101871
101895
|
command: terminal.trim()
|
|
101872
101896
|
}];
|
|
101873
|
-
if (!isRecord$
|
|
101897
|
+
if (!isRecord$17(terminal)) return [];
|
|
101874
101898
|
const command = typeof terminal.command === "string" ? terminal.command.trim() : "";
|
|
101875
101899
|
if (!command) return [];
|
|
101876
101900
|
return [{
|
|
@@ -101909,7 +101933,7 @@ function readConfigFile(source, path) {
|
|
|
101909
101933
|
}]
|
|
101910
101934
|
};
|
|
101911
101935
|
}
|
|
101912
|
-
if (!isRecord$
|
|
101936
|
+
if (!isRecord$17(parsed)) return {
|
|
101913
101937
|
...emptyConfig(source, path),
|
|
101914
101938
|
issues: [{
|
|
101915
101939
|
severity: "blocked",
|
|
@@ -103123,7 +103147,7 @@ const CLAUDE_IDENTITY_KEYS = new Set([
|
|
|
103123
103147
|
"credentialGenerationId"
|
|
103124
103148
|
]);
|
|
103125
103149
|
const CLAUDE_IDENTITY_OPTIONAL_KEYS = new Set(["providerAccountIdentity"]);
|
|
103126
|
-
function isRecord$
|
|
103150
|
+
function isRecord$16(value) {
|
|
103127
103151
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
103128
103152
|
}
|
|
103129
103153
|
function isStrictRfc3339DateTime(value) {
|
|
@@ -103152,7 +103176,7 @@ function hasAllowedKeys(value, required, optional) {
|
|
|
103152
103176
|
return keys.every((key) => required.has(key) || optional.has(key)) && [...required].every((key) => keys.includes(key));
|
|
103153
103177
|
}
|
|
103154
103178
|
function parseDeliveryIdentity(value, provider) {
|
|
103155
|
-
if (!isRecord$
|
|
103179
|
+
if (!isRecord$16(value)) return null;
|
|
103156
103180
|
if (provider === "openai") return parseCodexDeliveryIdentity(value);
|
|
103157
103181
|
if (provider === "anthropic") return parseClaudeDeliveryIdentity(value);
|
|
103158
103182
|
return null;
|
|
@@ -103187,7 +103211,7 @@ function parseClaudeDeliveryIdentity(value) {
|
|
|
103187
103211
|
};
|
|
103188
103212
|
}
|
|
103189
103213
|
function parseProviderRuntimeDeliveryReceipt(value, expected) {
|
|
103190
|
-
if (!isRecord$
|
|
103214
|
+
if (!isRecord$16(value) || !hasExactKeys$2(value, RECEIPT_KEYS)) return null;
|
|
103191
103215
|
const identity = parseDeliveryIdentity(value.identity, expected.provider);
|
|
103192
103216
|
if (!identity || typeof value.receiptId !== "string" || value.receiptId.length === 0 || value.receiptId.length > 256 || value.runtimeId !== expected.runtimeId || value.machineId !== expected.machineId || value.credentialEpoch !== expected.credentialEpoch || !Number.isInteger(value.credentialEpoch) || value.credentialEpoch < 0 || !isStrictRfc3339DateTime(value.issuedAt) || value.expiresAt !== expected.expiresAt || value.expiresAt !== null && !isStrictRfc3339DateTime(value.expiresAt)) return null;
|
|
103193
103217
|
return {
|
|
@@ -103209,8 +103233,8 @@ function providerDeliveryBindingFromReceipt(receipt) {
|
|
|
103209
103233
|
};
|
|
103210
103234
|
}
|
|
103211
103235
|
function readProviderDeliveryBinding(value) {
|
|
103212
|
-
if (!isRecord$
|
|
103213
|
-
const identityProvider = isRecord$
|
|
103236
|
+
if (!isRecord$16(value) || !hasExactKeys$2(value, BINDING_KEYS)) return null;
|
|
103237
|
+
const identityProvider = isRecord$16(value.identity) ? value.identity.provider : void 0;
|
|
103214
103238
|
const tokenProvider = identityProvider === "codex" ? "openai" : identityProvider === "claude" ? "anthropic" : null;
|
|
103215
103239
|
if (!tokenProvider) return null;
|
|
103216
103240
|
const identity = parseDeliveryIdentity(value.identity, tokenProvider);
|
|
@@ -150594,12 +150618,12 @@ function decodeProviderKind(providerName, operation) {
|
|
|
150594
150618
|
detail: `Unknown persisted provider '${providerName}'.`
|
|
150595
150619
|
}));
|
|
150596
150620
|
}
|
|
150597
|
-
function isRecord$
|
|
150621
|
+
function isRecord$15(value) {
|
|
150598
150622
|
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
150599
150623
|
}
|
|
150600
150624
|
function mergeRuntimePayload(existing, next) {
|
|
150601
150625
|
if (next === void 0) return existing ?? null;
|
|
150602
|
-
if (isRecord$
|
|
150626
|
+
if (isRecord$15(existing) && isRecord$15(next)) return {
|
|
150603
150627
|
...existing,
|
|
150604
150628
|
...next
|
|
150605
150629
|
};
|
|
@@ -152616,7 +152640,7 @@ const PAGINATION_KEYS = new Set([
|
|
|
152616
152640
|
"total",
|
|
152617
152641
|
"hasMore"
|
|
152618
152642
|
]);
|
|
152619
|
-
function isRecord$
|
|
152643
|
+
function isRecord$14(value) {
|
|
152620
152644
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
152621
152645
|
}
|
|
152622
152646
|
function hasOnlyKeys(value, allowed) {
|
|
@@ -152629,17 +152653,17 @@ function isRfc3339(value) {
|
|
|
152629
152653
|
return typeof value === "string" && RFC3339.test(value) && Number.isFinite(Date.parse(value));
|
|
152630
152654
|
}
|
|
152631
152655
|
function isEnvelopeMeta(value) {
|
|
152632
|
-
if (!isRecord$
|
|
152656
|
+
if (!isRecord$14(value) || !hasExactKeys$1(value, META_KEYS)) return false;
|
|
152633
152657
|
return typeof value.domain === "string" && value.domain.length > 0 && isRfc3339(value.timestamp) && typeof value.version === "string" && value.version.length > 0;
|
|
152634
152658
|
}
|
|
152635
152659
|
function isPagination(value) {
|
|
152636
|
-
if (!isRecord$
|
|
152660
|
+
if (!isRecord$14(value) || !hasExactKeys$1(value, PAGINATION_KEYS)) return false;
|
|
152637
152661
|
return Number.isInteger(value.page) && value.page >= 0 && Number.isInteger(value.limit) && value.limit >= 0 && Number.isInteger(value.total) && value.total >= 0 && typeof value.hasMore === "boolean";
|
|
152638
152662
|
}
|
|
152639
152663
|
function readLocalProviderAccountId(authJson) {
|
|
152640
152664
|
try {
|
|
152641
152665
|
const value = JSON.parse(authJson);
|
|
152642
|
-
if (!isRecord$
|
|
152666
|
+
if (!isRecord$14(value) || value.auth_mode !== "chatgpt" || !isRecord$14(value.tokens)) return null;
|
|
152643
152667
|
const providerAccountId = value.tokens.account_id;
|
|
152644
152668
|
if (typeof providerAccountId !== "string") return null;
|
|
152645
152669
|
const normalized = providerAccountId.trim();
|
|
@@ -152652,13 +152676,13 @@ function resolveLocalAuthJsonPath(homePath) {
|
|
|
152652
152676
|
return join(homePath?.trim() || process.env.CODEX_HOME?.trim() || join(homedir(), ".codex"), "auth.json");
|
|
152653
152677
|
}
|
|
152654
152678
|
function parseCodexAccountIdentityEnvelope(value) {
|
|
152655
|
-
if (!isRecord$
|
|
152679
|
+
if (!isRecord$14(value) || !hasOnlyKeys(value, ENVELOPE_KEYS)) return null;
|
|
152656
152680
|
if (!("data" in value) || !("meta" in value) || !isEnvelopeMeta(value.meta)) return null;
|
|
152657
152681
|
if (value.pagination !== void 0 && !isPagination(value.pagination)) return null;
|
|
152658
152682
|
return readCodexAccountIdentity(value.data);
|
|
152659
152683
|
}
|
|
152660
152684
|
function readCodexAccountIdentity(value) {
|
|
152661
|
-
if (!isRecord$
|
|
152685
|
+
if (!isRecord$14(value) || !hasExactKeys$1(value, IDENTITY_KEYS)) return null;
|
|
152662
152686
|
if (value.kind !== "provider_account" || value.provider !== "codex" || typeof value.providerAccountIdentity !== "string" || !PROVIDER_ACCOUNT_IDENTITY$1.test(value.providerAccountIdentity)) return null;
|
|
152663
152687
|
return {
|
|
152664
152688
|
kind: "provider_account",
|
|
@@ -212273,7 +212297,7 @@ const MAX_WORKER_PLAN_ITEMS = 5;
|
|
|
212273
212297
|
function asRecord$10(value) {
|
|
212274
212298
|
return typeof value === "object" && value !== null && !Array.isArray(value) ? value : void 0;
|
|
212275
212299
|
}
|
|
212276
|
-
function readTrimmedString(value) {
|
|
212300
|
+
function readTrimmedString$1(value) {
|
|
212277
212301
|
return typeof value === "string" ? value.trim() : void 0;
|
|
212278
212302
|
}
|
|
212279
212303
|
function isValidWorkerSlug(value) {
|
|
@@ -212287,9 +212311,9 @@ function isValidWorkerSummary(value) {
|
|
|
212287
212311
|
}
|
|
212288
212312
|
function decodeWorkerPlanItem(value) {
|
|
212289
212313
|
const item = asRecord$10(value);
|
|
212290
|
-
const slug = readTrimmedString(item?.slug);
|
|
212291
|
-
const title = readTrimmedString(item?.title);
|
|
212292
|
-
const summary = readTrimmedString(item?.summary);
|
|
212314
|
+
const slug = readTrimmedString$1(item?.slug);
|
|
212315
|
+
const title = readTrimmedString$1(item?.title);
|
|
212316
|
+
const summary = readTrimmedString$1(item?.summary);
|
|
212293
212317
|
if (!isValidWorkerSlug(slug)) return void 0;
|
|
212294
212318
|
if (!isValidWorkerTitle(title)) return void 0;
|
|
212295
212319
|
if (!isValidWorkerSummary(summary)) return void 0;
|
|
@@ -214548,8 +214572,8 @@ function cliSelectsOsStore(input) {
|
|
|
214548
214572
|
if (input.env[CLAUDE_FORCE_OS_CREDENTIAL_STORE_ENV] === "1") return true;
|
|
214549
214573
|
const config = readConfig(input);
|
|
214550
214574
|
if (config === null) return false;
|
|
214551
|
-
const features = isRecord$
|
|
214552
|
-
const flag = isRecord$
|
|
214575
|
+
const features = isRecord$13(config.parsed) ? config.parsed[CACHED_FEATURES_KEY] : void 0;
|
|
214576
|
+
const flag = isRecord$13(features) ? features[OS_STORE_FLAG_KEY] : void 0;
|
|
214553
214577
|
return typeof flag === "boolean" ? flag : null;
|
|
214554
214578
|
}
|
|
214555
214579
|
/**
|
|
@@ -214577,7 +214601,7 @@ function hasSessionBus(input) {
|
|
|
214577
214601
|
const runtimeDirectory = input.env.XDG_RUNTIME_DIR?.trim();
|
|
214578
214602
|
return runtimeDirectory ? input.fileExists(join(runtimeDirectory, "bus")) : false;
|
|
214579
214603
|
}
|
|
214580
|
-
function isRecord$
|
|
214604
|
+
function isRecord$13(value) {
|
|
214581
214605
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
214582
214606
|
}
|
|
214583
214607
|
//#endregion
|
|
@@ -215501,7 +215525,7 @@ function createCodewebAgentTokenMintClient(input) {
|
|
|
215501
215525
|
}
|
|
215502
215526
|
function parseMintResponse(httpStatus, body) {
|
|
215503
215527
|
if (httpStatus === 404) return { status: "unknown_identity" };
|
|
215504
|
-
if (!isRecord$
|
|
215528
|
+
if (!isRecord$12(body)) return { status: "unavailable" };
|
|
215505
215529
|
if (body["status"] === "minted" && typeof body["token"] === "string") return {
|
|
215506
215530
|
status: "minted",
|
|
215507
215531
|
token: body["token"]
|
|
@@ -215513,7 +215537,7 @@ function parseMintResponse(httpStatus, body) {
|
|
|
215513
215537
|
};
|
|
215514
215538
|
return { status: "unavailable" };
|
|
215515
215539
|
}
|
|
215516
|
-
function isRecord$
|
|
215540
|
+
function isRecord$12(value) {
|
|
215517
215541
|
return typeof value === "object" && value !== null;
|
|
215518
215542
|
}
|
|
215519
215543
|
//#endregion
|
|
@@ -222584,7 +222608,7 @@ function deriveToolActivityPresentation(input) {
|
|
|
222584
222608
|
}
|
|
222585
222609
|
//#endregion
|
|
222586
222610
|
//#region src/provider/acp/AcpRuntimeModel.ts
|
|
222587
|
-
function isRecord$
|
|
222611
|
+
function isRecord$11(value) {
|
|
222588
222612
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
222589
222613
|
}
|
|
222590
222614
|
function extractModelConfigId(sessionResponse) {
|
|
@@ -222656,7 +222680,7 @@ function extractCommandFromTitle(title) {
|
|
|
222656
222680
|
return /`([^`]+)`/.exec(title)?.[1]?.trim() || void 0;
|
|
222657
222681
|
}
|
|
222658
222682
|
function extractToolCallCommand(rawInput, title) {
|
|
222659
|
-
if (isRecord$
|
|
222683
|
+
if (isRecord$11(rawInput)) {
|
|
222660
222684
|
const directCommand = normalizeCommandValue(rawInput.command);
|
|
222661
222685
|
if (directCommand) return directCommand;
|
|
222662
222686
|
const executable = typeof rawInput.executable === "string" ? rawInput.executable.trim() : "";
|
|
@@ -224513,11 +224537,11 @@ function settlePendingApprovalsAsCancelled(pendingApprovals) {
|
|
|
224513
224537
|
function settlePendingUserInputsAsEmptyAnswers(pendingUserInputs) {
|
|
224514
224538
|
return forEach(Array.from(pendingUserInputs.values()), (pending) => succeed$3(pending.answers, {}).pipe(ignore), { discard: true });
|
|
224515
224539
|
}
|
|
224516
|
-
function isRecord$
|
|
224540
|
+
function isRecord$10(value) {
|
|
224517
224541
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
224518
224542
|
}
|
|
224519
224543
|
function parseCursorResume(raw) {
|
|
224520
|
-
if (!isRecord$
|
|
224544
|
+
if (!isRecord$10(raw)) return void 0;
|
|
224521
224545
|
if (raw.schemaVersion !== CURSOR_RESUME_VERSION) return void 0;
|
|
224522
224546
|
if (typeof raw.sessionId !== "string" || !raw.sessionId.trim()) return void 0;
|
|
224523
224547
|
return { sessionId: raw.sessionId.trim() };
|
|
@@ -234057,7 +234081,7 @@ function readinessData(value) {
|
|
|
234057
234081
|
return decodeClaudeRuntimeReadiness(value.data);
|
|
234058
234082
|
}
|
|
234059
234083
|
function decodeClaudeRuntimeReadiness(value) {
|
|
234060
|
-
if (!isRecord$
|
|
234084
|
+
if (!isRecord$9(value) || !hasValidClaudeRuntimeReadinessFields(value)) throw new ClaudeRuntimeReadinessError(CLAUDE_READINESS_COPY.unavailable);
|
|
234061
234085
|
return value;
|
|
234062
234086
|
}
|
|
234063
234087
|
function hasValidClaudeRuntimeReadinessFields(value) {
|
|
@@ -234066,7 +234090,7 @@ function hasValidClaudeRuntimeReadinessFields(value) {
|
|
|
234066
234090
|
function isNullableString$1(value) {
|
|
234067
234091
|
return value === null || typeof value === "string";
|
|
234068
234092
|
}
|
|
234069
|
-
function isRecord$
|
|
234093
|
+
function isRecord$9(value) {
|
|
234070
234094
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
234071
234095
|
}
|
|
234072
234096
|
function isRuntimeTicketSession(sessionId) {
|
|
@@ -288488,7 +288512,7 @@ function renderPipelineWorkerTaskPacket(input) {
|
|
|
288488
288512
|
"Recommended loop: forge-fix"
|
|
288489
288513
|
].join("\n\n");
|
|
288490
288514
|
}
|
|
288491
|
-
function isRecord$
|
|
288515
|
+
function isRecord$8(value) {
|
|
288492
288516
|
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
288493
288517
|
}
|
|
288494
288518
|
function nonEmptyStrings(value) {
|
|
@@ -288602,7 +288626,7 @@ function decodeStatefulGoldenPath(value, index, errors) {
|
|
|
288602
288626
|
};
|
|
288603
288627
|
}
|
|
288604
288628
|
function decodeGoldenPath(value, index, errors) {
|
|
288605
|
-
if (!isRecord$
|
|
288629
|
+
if (!isRecord$8(value)) {
|
|
288606
288630
|
errors.push(`workers[${index}].goldenPath must be an object`);
|
|
288607
288631
|
return null;
|
|
288608
288632
|
}
|
|
@@ -288612,7 +288636,7 @@ function decodeGoldenPath(value, index, errors) {
|
|
|
288612
288636
|
return null;
|
|
288613
288637
|
}
|
|
288614
288638
|
function decodeWorker(value, index, errors) {
|
|
288615
|
-
if (!isRecord$
|
|
288639
|
+
if (!isRecord$8(value)) {
|
|
288616
288640
|
errors.push(`workers[${index}] must be an object`);
|
|
288617
288641
|
return null;
|
|
288618
288642
|
}
|
|
@@ -288672,7 +288696,7 @@ function decodeLegacyFileScopes(value, index, errors) {
|
|
|
288672
288696
|
return scopes.map(normalizeScope);
|
|
288673
288697
|
}
|
|
288674
288698
|
function decodeLegacyWorker(value, index, errors) {
|
|
288675
|
-
if (!isRecord$
|
|
288699
|
+
if (!isRecord$8(value)) {
|
|
288676
288700
|
errors.push(`workers[${index}] must be an object`);
|
|
288677
288701
|
return null;
|
|
288678
288702
|
}
|
|
@@ -288734,7 +288758,7 @@ function validateMode(mode, riskLevel, workers, errors) {
|
|
|
288734
288758
|
}
|
|
288735
288759
|
function decodePipelineWorkerPlan(value) {
|
|
288736
288760
|
const errors = [];
|
|
288737
|
-
if (!isRecord$
|
|
288761
|
+
if (!isRecord$8(value)) return {
|
|
288738
288762
|
ok: false,
|
|
288739
288763
|
errors: ["worker plan must be an object"]
|
|
288740
288764
|
};
|
|
@@ -289606,7 +289630,7 @@ var ApprovedWorkerPlanInvariantError = class extends Error {
|
|
|
289606
289630
|
this.name = "ApprovedWorkerPlanInvariantError";
|
|
289607
289631
|
}
|
|
289608
289632
|
};
|
|
289609
|
-
function isRecord$
|
|
289633
|
+
function isRecord$7(value) {
|
|
289610
289634
|
return typeof value === "object" && value !== null;
|
|
289611
289635
|
}
|
|
289612
289636
|
function exactPositiveInteger(value) {
|
|
@@ -289621,7 +289645,7 @@ function assertApprovedWorkerIdentity(worker, expected) {
|
|
|
289621
289645
|
if (worker.id !== expected.workerThreadId || worker.kind !== "worker" || worker.parentThreadId !== expected.masterThreadId || worker.projectId !== expected.projectId || worker.anchorKind !== "task" || worker.anchorCmmdId !== expected.taskId || worker.branch !== expected.branch || worker.worktreePath !== expected.worktreePath) throw new ApprovedWorkerPlanInvariantError(`Existing worker '${expected.workerThreadId}' does not match the approved plan identity.`);
|
|
289622
289646
|
}
|
|
289623
289647
|
function activityMatchesPrompt(thread, kind, promptId) {
|
|
289624
|
-
return thread.activities.some((activity) => activity.kind === kind && isRecord$
|
|
289648
|
+
return thread.activities.some((activity) => activity.kind === kind && isRecord$7(activity.payload) && activity.payload["promptId"] === promptId);
|
|
289625
289649
|
}
|
|
289626
289650
|
function workerIdentity(prompt, slug) {
|
|
289627
289651
|
const token = createHash("sha256").update(`${prompt.masterThreadId}\n${prompt.promptId}\n${slug}`).digest("hex").slice(0, 24);
|
|
@@ -299205,7 +299229,7 @@ function resolveBuildCommitFromEnv(env) {
|
|
|
299205
299229
|
* environment descriptor down instead of reporting an honest "unknown".
|
|
299206
299230
|
*/
|
|
299207
299231
|
function readBakedBuildCommit() {
|
|
299208
|
-
return "
|
|
299232
|
+
return "52671486a7eccd32066591f8c8125252a3a6084a";
|
|
299209
299233
|
}
|
|
299210
299234
|
async function resolveServerBuildCommit(input) {
|
|
299211
299235
|
if (isFullCommitSha(input.baked)) return input.baked;
|
|
@@ -299426,6 +299450,219 @@ const ServerEnvironmentLive = effect(ServerEnvironment, fn$1("makeServerEnvironm
|
|
|
299426
299450
|
};
|
|
299427
299451
|
})());
|
|
299428
299452
|
//#endregion
|
|
299453
|
+
//#region src/auth/http/cmmdEmbedExchange.ts
|
|
299454
|
+
function oauthSubjectForUserId(userId) {
|
|
299455
|
+
return `user:${userId}`;
|
|
299456
|
+
}
|
|
299457
|
+
const EmbedExchangeInput = Struct({ code: String$1 });
|
|
299458
|
+
function isRecord$6(value) {
|
|
299459
|
+
return typeof value === "object" && value !== null;
|
|
299460
|
+
}
|
|
299461
|
+
function readTrimmedString(value) {
|
|
299462
|
+
if (typeof value !== "string") return void 0;
|
|
299463
|
+
const trimmed = value.trim();
|
|
299464
|
+
return trimmed.length > 0 ? trimmed : void 0;
|
|
299465
|
+
}
|
|
299466
|
+
function readFiniteNumber(value) {
|
|
299467
|
+
return typeof value === "number" && Number.isFinite(value) ? value : null;
|
|
299468
|
+
}
|
|
299469
|
+
function identityFromRedeemed(redeemed) {
|
|
299470
|
+
return normalizeCmmdUserIdentity(redeemed.user) ?? {
|
|
299471
|
+
id: String(redeemed.userId),
|
|
299472
|
+
firstName: null,
|
|
299473
|
+
lastName: null,
|
|
299474
|
+
email: `user-${redeemed.userId}@embed.local`,
|
|
299475
|
+
username: redeemed.displayName?.trim() || `user-${redeemed.userId}`
|
|
299476
|
+
};
|
|
299477
|
+
}
|
|
299478
|
+
function optionalRedeemedFields(body) {
|
|
299479
|
+
const refreshToken = readTrimmedString(body.refreshToken);
|
|
299480
|
+
const displayName = typeof body.displayName === "string" ? body.displayName : void 0;
|
|
299481
|
+
const forgeOwnerAssertion = readTrimmedString(body.forgeOwnerAssertion);
|
|
299482
|
+
const sessionGrant = readTrimmedString(body.sessionGrant);
|
|
299483
|
+
const sessionGrantExpiresAt = typeof body.sessionGrantExpiresAt === "string" ? body.sessionGrantExpiresAt : void 0;
|
|
299484
|
+
return {
|
|
299485
|
+
...refreshToken !== void 0 ? { refreshToken } : {},
|
|
299486
|
+
...displayName !== void 0 ? { displayName } : {},
|
|
299487
|
+
...forgeOwnerAssertion !== void 0 ? { forgeOwnerAssertion } : {},
|
|
299488
|
+
...sessionGrant !== void 0 ? { sessionGrant } : {},
|
|
299489
|
+
...sessionGrantExpiresAt !== void 0 ? { sessionGrantExpiresAt } : {}
|
|
299490
|
+
};
|
|
299491
|
+
}
|
|
299492
|
+
function readRedeemedEmbedHandoff(body) {
|
|
299493
|
+
if (!isRecord$6(body)) return null;
|
|
299494
|
+
const accessToken = readTrimmedString(body.accessToken);
|
|
299495
|
+
const mcpToken = readTrimmedString(body.mcpToken);
|
|
299496
|
+
const organizationId = readFiniteNumber(body.organizationId);
|
|
299497
|
+
const userId = readFiniteNumber(body.userId);
|
|
299498
|
+
if (accessToken === void 0 || mcpToken === void 0 || accessToken.length < 24 || mcpToken.length < 24 || organizationId === null || userId === null) return null;
|
|
299499
|
+
return {
|
|
299500
|
+
accessToken,
|
|
299501
|
+
mcpToken,
|
|
299502
|
+
organizationId,
|
|
299503
|
+
userId,
|
|
299504
|
+
user: body.user,
|
|
299505
|
+
...optionalRedeemedFields(body)
|
|
299506
|
+
};
|
|
299507
|
+
}
|
|
299508
|
+
function redeemEmbedCodeWithCmmd(code) {
|
|
299509
|
+
return tryPromise({
|
|
299510
|
+
try: () => fetch(resolveCommandAppEndpoint("/api/forge/embed/handoff/redeem"), {
|
|
299511
|
+
method: "POST",
|
|
299512
|
+
headers: { "content-type": "application/json" },
|
|
299513
|
+
body: JSON.stringify({ code })
|
|
299514
|
+
}),
|
|
299515
|
+
catch: (cause) => new AuthError({
|
|
299516
|
+
message: "Failed to redeem the CMMD embed handoff with CMMD.",
|
|
299517
|
+
status: 500,
|
|
299518
|
+
cause
|
|
299519
|
+
})
|
|
299520
|
+
}).pipe(flatMap((response) => tryPromise({
|
|
299521
|
+
try: async () => {
|
|
299522
|
+
const text = await response.text();
|
|
299523
|
+
let json = null;
|
|
299524
|
+
if (text.length > 0) try {
|
|
299525
|
+
json = JSON.parse(text);
|
|
299526
|
+
} catch {
|
|
299527
|
+
json = null;
|
|
299528
|
+
}
|
|
299529
|
+
return {
|
|
299530
|
+
ok: response.ok,
|
|
299531
|
+
status: response.status,
|
|
299532
|
+
json
|
|
299533
|
+
};
|
|
299534
|
+
},
|
|
299535
|
+
catch: (cause) => new AuthError({
|
|
299536
|
+
message: "Failed to read the CMMD embed handoff response.",
|
|
299537
|
+
status: 500,
|
|
299538
|
+
cause
|
|
299539
|
+
})
|
|
299540
|
+
})), flatMap(({ ok, status, json }) => {
|
|
299541
|
+
if (!ok) return fail(new AuthError({
|
|
299542
|
+
message: status === 400 || status === 401 || status === 404 ? "CMMD embed handoff code is invalid or expired." : "CMMD rejected the embed handoff redeem.",
|
|
299543
|
+
status: status === 400 || status === 401 || status === 404 ? 401 : 500
|
|
299544
|
+
}));
|
|
299545
|
+
const redeemed = readRedeemedEmbedHandoff(json);
|
|
299546
|
+
if (!redeemed) return fail(new AuthError({
|
|
299547
|
+
message: "CMMD returned an incomplete embed handoff payload.",
|
|
299548
|
+
status: 500
|
|
299549
|
+
}));
|
|
299550
|
+
return succeed(redeemed);
|
|
299551
|
+
}));
|
|
299552
|
+
}
|
|
299553
|
+
function persistLocalEmbedSession(input) {
|
|
299554
|
+
return gen(function* () {
|
|
299555
|
+
yield* setCommandAccessTokenForSession(input.sessionId, input.redeemed.mcpToken).pipe(mapError((cause) => new AuthError({
|
|
299556
|
+
message: "Failed to persist CMMD access token.",
|
|
299557
|
+
status: 500,
|
|
299558
|
+
cause
|
|
299559
|
+
})));
|
|
299560
|
+
yield* setCommandJwtForSession(input.sessionId, input.redeemed.accessToken, input.redeemed.refreshToken ? { refreshToken: input.redeemed.refreshToken } : {}).pipe(mapError((cause) => new AuthError({
|
|
299561
|
+
message: "Failed to persist CMMD JWT.",
|
|
299562
|
+
status: 500,
|
|
299563
|
+
cause
|
|
299564
|
+
})));
|
|
299565
|
+
const identity = identityFromRedeemed(input.redeemed);
|
|
299566
|
+
yield* setCmmdUserIdentityForSession(input.sessionId, identity).pipe(mapError((cause) => new AuthError({
|
|
299567
|
+
message: "Failed to persist CMMD identity.",
|
|
299568
|
+
status: 500,
|
|
299569
|
+
cause
|
|
299570
|
+
})));
|
|
299571
|
+
return identity;
|
|
299572
|
+
});
|
|
299573
|
+
}
|
|
299574
|
+
const authCmmdEmbedExchangeRouteLayer = add$1("POST", "/api/auth/cmmd-embed/exchange", gen(function* () {
|
|
299575
|
+
const request = yield* HttpServerRequest;
|
|
299576
|
+
const limited = rateLimitOrRespond({
|
|
299577
|
+
routeClass: "auth-bootstrap",
|
|
299578
|
+
clientKey: clientKeyFromRequest(request)
|
|
299579
|
+
});
|
|
299580
|
+
if (limited) return limited;
|
|
299581
|
+
const code = (yield* schemaBodyJson(EmbedExchangeInput).pipe(mapError((cause) => new AuthError({
|
|
299582
|
+
message: "Invalid CMMD embed handoff payload.",
|
|
299583
|
+
status: 400,
|
|
299584
|
+
cause
|
|
299585
|
+
})))).code.trim();
|
|
299586
|
+
if (code.length < 16) return yield* new AuthError({
|
|
299587
|
+
message: "Invalid CMMD embed handoff code.",
|
|
299588
|
+
status: 401
|
|
299589
|
+
});
|
|
299590
|
+
const redeemed = yield* redeemEmbedCodeWithCmmd(code);
|
|
299591
|
+
const serverAuth = yield* ServerAuth;
|
|
299592
|
+
const sessions = yield* SessionCredentialService;
|
|
299593
|
+
if (serverAuth.isForgeCloudShell?.() === true) {
|
|
299594
|
+
const assertionToken = redeemed.forgeOwnerAssertion?.trim();
|
|
299595
|
+
const sessionGrant = redeemed.sessionGrant?.trim();
|
|
299596
|
+
if (!assertionToken || !sessionGrant) return yield* new AuthError({
|
|
299597
|
+
message: "CMMD embed handoff did not include Forge Cloud owner credentials.",
|
|
299598
|
+
status: 500
|
|
299599
|
+
});
|
|
299600
|
+
const assertion = yield* validateCloudOwnerCallbackAssertion({
|
|
299601
|
+
serverAuth,
|
|
299602
|
+
assertionToken,
|
|
299603
|
+
authenticatedUserId: redeemed.userId
|
|
299604
|
+
});
|
|
299605
|
+
if (!assertion) return yield* new AuthError({
|
|
299606
|
+
message: "CMMD embed handoff owner assertion was rejected.",
|
|
299607
|
+
status: 401
|
|
299608
|
+
});
|
|
299609
|
+
const identity = identityFromRedeemed(redeemed);
|
|
299610
|
+
yield* persistCloudOwnerArtifacts({
|
|
299611
|
+
assertion,
|
|
299612
|
+
accessToken: redeemed.mcpToken,
|
|
299613
|
+
identity,
|
|
299614
|
+
jwtToken: redeemed.accessToken,
|
|
299615
|
+
refreshToken: redeemed.refreshToken,
|
|
299616
|
+
sessionGrant,
|
|
299617
|
+
sessionGrantExpiresAt: redeemed.sessionGrantExpiresAt
|
|
299618
|
+
});
|
|
299619
|
+
let response = yield* jsonUnsafe({
|
|
299620
|
+
authenticated: true,
|
|
299621
|
+
organizationId: redeemed.organizationId,
|
|
299622
|
+
cloudShell: true
|
|
299623
|
+
}, { status: 200 }).pipe(setCookie(FORGE_CLOUD_OWNER_ASSERTION_COOKIE, assertion.token, cloudOwnerAssertionCookieOptions(assertion)));
|
|
299624
|
+
const grantExpiresAt = redeemed.sessionGrantExpiresAt ? new Date(redeemed.sessionGrantExpiresAt) : new Date(Date.now() + 2160 * 60 * 60 * 1e3);
|
|
299625
|
+
response = yield* response.pipe(setCookie(FORGE_CLOUD_SESSION_GRANT_COOKIE, sessionGrant, cloudOwnerSessionGrantCookieOptions({
|
|
299626
|
+
token: sessionGrant,
|
|
299627
|
+
expiresAt: grantExpiresAt
|
|
299628
|
+
})));
|
|
299629
|
+
return response;
|
|
299630
|
+
}
|
|
299631
|
+
const issued = yield* sessions.issue({
|
|
299632
|
+
method: "browser-session-cookie",
|
|
299633
|
+
role: "owner",
|
|
299634
|
+
subject: oauthSubjectForUserId(redeemed.userId),
|
|
299635
|
+
client: deriveAuthClientMetadata({
|
|
299636
|
+
request,
|
|
299637
|
+
label: "CMMD embed"
|
|
299638
|
+
})
|
|
299639
|
+
}).pipe(mapError((cause) => new AuthError({
|
|
299640
|
+
message: "Failed to issue authenticated session.",
|
|
299641
|
+
cause
|
|
299642
|
+
})));
|
|
299643
|
+
const cmmdIdentity = yield* persistLocalEmbedSession({
|
|
299644
|
+
sessionId: issued.sessionId,
|
|
299645
|
+
redeemed
|
|
299646
|
+
});
|
|
299647
|
+
if (redeemed.sessionGrant) yield* setCommandSessionGrantForSession(issued.sessionId, redeemed.sessionGrant).pipe(ignore({ log: false }));
|
|
299648
|
+
const secure = shouldUseSecureCookie(forgePublicUrlForRequest(request));
|
|
299649
|
+
return yield* jsonUnsafe({
|
|
299650
|
+
authenticated: true,
|
|
299651
|
+
role: issued.role,
|
|
299652
|
+
sessionMethod: issued.method,
|
|
299653
|
+
expiresAt: toUtc(issued.expiresAt),
|
|
299654
|
+
cmmdIdentity,
|
|
299655
|
+
organizationId: redeemed.organizationId,
|
|
299656
|
+
cloudShell: false
|
|
299657
|
+
}, { status: 200 }).pipe(setCookie(sessions.cookieName, issued.token, {
|
|
299658
|
+
expires: toDate(issued.expiresAt),
|
|
299659
|
+
httpOnly: true,
|
|
299660
|
+
path: "/",
|
|
299661
|
+
sameSite: "lax",
|
|
299662
|
+
secure
|
|
299663
|
+
}));
|
|
299664
|
+
}).pipe(catchTag("AuthError", (error) => respondToAuthError(error))));
|
|
299665
|
+
//#endregion
|
|
299429
299666
|
//#region src/auth/http/cloudOwnerDeviceSession.ts
|
|
299430
299667
|
/**
|
|
299431
299668
|
* Native OAuth clients allowed to redeem a Forge Cloud session grant through
|
|
@@ -299569,7 +299806,10 @@ const cloudOwnerSessionRevokeRouteLayer = add$1("POST", "/api/auth/cloud/session
|
|
|
299569
299806
|
const SCALAR_API_REFERENCE_URL = "https://cdn.jsdelivr.net/npm/@scalar/api-reference@1.64.1";
|
|
299570
299807
|
const SCALAR_API_REFERENCE_INTEGRITY = "sha384-SmFRDuBBmEoCbbBCTcn8/+cIQONyH0xgOKpsp6OttBlI8uG9uc6iAO8SonYQ3e1W";
|
|
299571
299808
|
const API_DOCS_SECURITY_HEADERS = {
|
|
299572
|
-
|
|
299809
|
+
"permissions-policy": BROWSER_DOCUMENT_SECURITY_HEADERS["permissions-policy"],
|
|
299810
|
+
"referrer-policy": BROWSER_DOCUMENT_SECURITY_HEADERS["referrer-policy"],
|
|
299811
|
+
"x-content-type-options": BROWSER_DOCUMENT_SECURITY_HEADERS["x-content-type-options"],
|
|
299812
|
+
"x-frame-options": "DENY",
|
|
299573
299813
|
"content-security-policy": [
|
|
299574
299814
|
"default-src 'none'",
|
|
299575
299815
|
"script-src 'self' https://cdn.jsdelivr.net",
|
|
@@ -322990,7 +323230,7 @@ const MiscRuntimeLayerLive = mergeAll(AnalyticsServiceLayerLive, OpenLive, Serve
|
|
|
322990
323230
|
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), provide$1(UsageSessionLookupLive), provide$1(UsageRecordedSourceLive.pipe(provide$1(OrchestrationLayerLive), provide$1(RuntimeReplicationOutboxLive), provide$1(ProviderSessionRuntimeRepositoryLive), provide$1(TextGenerationSessionRepositoryLive)))))), provideMerge(WorkspaceLayerLive), provideMerge(WorkspaceReadinessStateLive), provideMerge(ProjectFaviconResolverLive), provideMerge(RepositoryIdentityResolverLive), provideMerge(ServerEnvironmentLive), provideMerge(AuthLayerLive), provideMerge(ServerSecretStoreLayerLive), provideMerge(mergeAll(CloudRedisCoordinationLive, CloudStateSyncLive.pipe(provide$1(PersistenceLayerLive)))), provideMerge(MiscRuntimeLayerLive));
|
|
322991
323231
|
const RuntimeDependenciesLive = pullRequestServiceFactoryLayer.pipe(provideMerge(RuntimeDependenciesWithoutPullRequestsLive), provideMerge(cmmdProjectIdentityResolverLive.pipe(provide$1(RuntimeDependenciesWithoutPullRequestsLive))), provideMerge(pullRequestProviderRuntimeLive));
|
|
322992
323232
|
const RuntimeServicesLive = ServerRuntimeStartupLive.pipe(provideMerge(RuntimeDependenciesLive));
|
|
322993
|
-
const makeRoutesLayer = mergeAll(attachmentUploadRouteLayer, authBearerBootstrapRouteLayer, authBootstrapRouteLayer, authCommandBearerBootstrapRouteLayer, authCommandBootstrapRouteLayer, authOAuthTokenExchangeRouteLayer, authWebSocketTicketRouteLayer, authCmmdOAuthDeviceRouteLayer, authCmmdOAuthTokenRouteLayer, authCmmdPasswordTokenRouteLayer, authClientsRevokeOthersRouteLayer, authClientsRevokeRouteLayer, authClientsRouteLayer, authLogoutRouteLayer, authPairingLinksRevokeRouteLayer, authPairingLinksRouteLayer, authPairingCredentialRouteLayer, authSessionRenewRouteLayer, authSessionRouteLayer, authWebSocketTokenRouteLayer, authWebLoginRouteLayer, authWebCallbackRouteLayer, cloudOwnerSessionRedeemRouteLayer, cloudOwnerSessionRevokeRouteLayer, desktopLocalWebBridgePublishRouteLayer, desktopLocalWebBridgeBootstrapRouteLayer, desktopRelayControlPlaneRouteLayer, apiDocsHtmlRouteLayer, apiDocsOpenApiRouteLayer, pulseSignalStateListRouteLayer, pulseSignalStateUpsertRouteLayer, cmmdProfileRouteLayer, ...cmmdProxyRouteLayers, cmmdWorkIntakeRouteLayer, cmmdWsTokenRouteLayer, cmmdGetProjectCommentsRouteLayer, cmmdAddProjectCommentRouteLayer, cmmdUpdateProjectRouteLayer, cmmdUploadTaskAttachmentRouteLayer, cmmdUpdateTaskCommentRouteLayer, cmmdListWorkspaceMembersRouteLayer, cmmdAddProjectMemberRouteLayer, cmmdUpdateProjectAgentMemberAvatarRouteLayer, runtimeReplicationStatusRouteLayer, cmmdRefreshProviderUsageRouteLayer, cmmdForgeCloudProjectsListRouteLayer, cmmdForgeCloudProjectsEventsRouteLayer, cmmdForgeEnvironmentsEventsRouteLayer, cmmdForgeRuntimesEnsureRouteLayer, cmmdForgeRuntimesConnectRouteLayer, ownerRuntimeCodexReadinessRouteLayer, cmmdForgeRuntimesStatusRouteLayer, cmmdForgeRuntimesStartRouteLayer, cmmdForgeRuntimesStopRouteLayer, cmmdForgeRuntimesRecycleRouteLayer, cmmdForgeRuntimesUpdateCommitRouteLayer, cmmdForgeRuntimesDestroyRouteLayer, mobileProviderCatalogRouteLayer, attachmentsRouteLayer, orchestrationDispatchRouteLayer, orchestrationCmmdWorkRunEventRouteLayer, orchestrationAutomationStartThreadRouteLayer, orchestrationAutomationRebindRouteLayer, orchestrationAutomationTerminalReconcileRouteLayer, mobileGitRunStackedActionRouteLayer, pullRequestDiffRouteLayer, orchestrationSnapshotRouteLayer, orchestrationThreadSnapshotRouteLayer, 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, runtimeFilesystemHealthRouteLayer, claudeNativeGenerationProofRouteLayer, claudeUsageRouteLayer, codexRuntimeProviderReadinessRouteLayer, runtimeDiagnosticsRouteLayer, cloudFoldersRouteLayer, cloudProjectCreateRouteLayer, gitUrlCloneRouteLayer, websocketRpcRouteLayer).pipe(provide$1(browserApiCorsLayer));
|
|
323233
|
+
const makeRoutesLayer = mergeAll(attachmentUploadRouteLayer, authBearerBootstrapRouteLayer, authBootstrapRouteLayer, authCommandBearerBootstrapRouteLayer, authCommandBootstrapRouteLayer, authCmmdEmbedExchangeRouteLayer, authOAuthTokenExchangeRouteLayer, authWebSocketTicketRouteLayer, authCmmdOAuthDeviceRouteLayer, authCmmdOAuthTokenRouteLayer, authCmmdPasswordTokenRouteLayer, authClientsRevokeOthersRouteLayer, authClientsRevokeRouteLayer, authClientsRouteLayer, authLogoutRouteLayer, authPairingLinksRevokeRouteLayer, authPairingLinksRouteLayer, authPairingCredentialRouteLayer, authSessionRenewRouteLayer, authSessionRouteLayer, authWebSocketTokenRouteLayer, authWebLoginRouteLayer, authWebCallbackRouteLayer, cloudOwnerSessionRedeemRouteLayer, cloudOwnerSessionRevokeRouteLayer, desktopLocalWebBridgePublishRouteLayer, desktopLocalWebBridgeBootstrapRouteLayer, desktopRelayControlPlaneRouteLayer, apiDocsHtmlRouteLayer, apiDocsOpenApiRouteLayer, pulseSignalStateListRouteLayer, pulseSignalStateUpsertRouteLayer, cmmdProfileRouteLayer, ...cmmdProxyRouteLayers, cmmdWorkIntakeRouteLayer, cmmdWsTokenRouteLayer, cmmdGetProjectCommentsRouteLayer, cmmdAddProjectCommentRouteLayer, cmmdUpdateProjectRouteLayer, cmmdUploadTaskAttachmentRouteLayer, cmmdUpdateTaskCommentRouteLayer, cmmdListWorkspaceMembersRouteLayer, cmmdAddProjectMemberRouteLayer, cmmdUpdateProjectAgentMemberAvatarRouteLayer, runtimeReplicationStatusRouteLayer, cmmdRefreshProviderUsageRouteLayer, cmmdForgeCloudProjectsListRouteLayer, cmmdForgeCloudProjectsEventsRouteLayer, cmmdForgeEnvironmentsEventsRouteLayer, cmmdForgeRuntimesEnsureRouteLayer, cmmdForgeRuntimesConnectRouteLayer, ownerRuntimeCodexReadinessRouteLayer, cmmdForgeRuntimesStatusRouteLayer, cmmdForgeRuntimesStartRouteLayer, cmmdForgeRuntimesStopRouteLayer, cmmdForgeRuntimesRecycleRouteLayer, cmmdForgeRuntimesUpdateCommitRouteLayer, cmmdForgeRuntimesDestroyRouteLayer, mobileProviderCatalogRouteLayer, attachmentsRouteLayer, orchestrationDispatchRouteLayer, orchestrationCmmdWorkRunEventRouteLayer, orchestrationAutomationStartThreadRouteLayer, orchestrationAutomationRebindRouteLayer, orchestrationAutomationTerminalReconcileRouteLayer, mobileGitRunStackedActionRouteLayer, pullRequestDiffRouteLayer, orchestrationSnapshotRouteLayer, orchestrationThreadSnapshotRouteLayer, 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, runtimeFilesystemHealthRouteLayer, claudeNativeGenerationProofRouteLayer, claudeUsageRouteLayer, codexRuntimeProviderReadinessRouteLayer, runtimeDiagnosticsRouteLayer, cloudFoldersRouteLayer, cloudProjectCreateRouteLayer, gitUrlCloneRouteLayer, websocketRpcRouteLayer).pipe(provide$1(browserApiCorsLayer));
|
|
322994
323234
|
const runServer = launch$1(unwrap(gen(function* () {
|
|
322995
323235
|
const config = yield* ServerConfig;
|
|
322996
323236
|
fixPath({ preferProcessPath: config.forgeCmmdRuntimeMode === true });
|