@cmmd-center/forge 0.13.64 → 0.13.66
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 +75 -19
- package/dist/bin.mjs +75 -19
- package/dist/client/assets/{DiffPanel-CMYTuX9T.js → DiffPanel-C3dfPMJX.js} +2 -2
- package/dist/client/assets/{DiffPanel.logic-Bo8iewty.js → DiffPanel.logic-N-_02IKx.js} +2 -2
- package/dist/client/assets/{DiffPanelShell-BOfiU8pF.js → DiffPanelShell-COwQln6y.js} +3 -3
- package/dist/client/assets/{DiffWorkerPoolProvider-BJM597MG.js → DiffWorkerPoolProvider-CZp4PR1Z.js} +2 -2
- package/dist/client/assets/{PullRequestCodePanel-Dp0Gub8R.js → PullRequestCodePanel-1kcdbX1w.js} +2 -2
- package/dist/client/assets/{Virtualizer-DA9X_YiJ.js → Virtualizer-BYyEY2Dk.js} +2 -2
- package/dist/client/assets/{index-unGMBg6C.js → index-D5-o0PGO.js} +60 -60
- package/dist/client/index.html +4 -4
- package/dist/forge-build.json +1 -1
- package/package.json +1 -1
package/dist/bin.cjs
CHANGED
|
@@ -26977,6 +26977,24 @@ const RelayWsRpcGroup = WsRpcGroup.middleware(RelayAuthorizationMiddleware).midd
|
|
|
26977
26977
|
*/
|
|
26978
26978
|
const SessionWsRpcGroup = WsRpcGroup.middleware(SessionAuthorizationMiddleware);
|
|
26979
26979
|
//#endregion
|
|
26980
|
+
//#region ../../packages/contracts/src/cmmdRuntimeSpriteIdentity.ts
|
|
26981
|
+
function nonEmptyString$3(value) {
|
|
26982
|
+
return typeof value === "string" && value.length > 0 ? value : null;
|
|
26983
|
+
}
|
|
26984
|
+
/**
|
|
26985
|
+
* Resolve the operational Sprite name for provision / connect / readiness gates.
|
|
26986
|
+
*
|
|
26987
|
+
* @see CmmdRuntimeSpriteIdentitySource for the dual-contract rules.
|
|
26988
|
+
*/
|
|
26989
|
+
function resolveCmmdRuntimeSpriteName(runtime) {
|
|
26990
|
+
if (Object.hasOwn(runtime, "spriteName")) return nonEmptyString$3(runtime.spriteName);
|
|
26991
|
+
return nonEmptyString$3(runtime.flyMachineId);
|
|
26992
|
+
}
|
|
26993
|
+
/** True when the payload carries an operational Sprite name after dual-read. */
|
|
26994
|
+
function hasCmmdRuntimeSpriteIdentity(runtime) {
|
|
26995
|
+
return resolveCmmdRuntimeSpriteName(runtime) !== null;
|
|
26996
|
+
}
|
|
26997
|
+
//#endregion
|
|
26980
26998
|
//#region ../../packages/contracts/src/cmmdRuntimeThreadLifecycle.ts
|
|
26981
26999
|
const FORGE_LIFECYCLE_METADATA_KEY = "forgeLifecycle";
|
|
26982
27000
|
const FORGE_LIFECYCLE_SCHEMA_VERSION = 1;
|
|
@@ -66257,7 +66275,7 @@ function normalizeNumberish(value) {
|
|
|
66257
66275
|
}
|
|
66258
66276
|
//#endregion
|
|
66259
66277
|
//#region package.json
|
|
66260
|
-
var version$1 = "0.13.
|
|
66278
|
+
var version$1 = "0.13.66";
|
|
66261
66279
|
//#endregion
|
|
66262
66280
|
//#region src/sentry.ts
|
|
66263
66281
|
const SERVER_APP_NAME = "forge-server";
|
|
@@ -89349,26 +89367,60 @@ var GitHubBroker = class {
|
|
|
89349
89367
|
}
|
|
89350
89368
|
/**
|
|
89351
89369
|
* On a "github" scope cache miss, re-requests it once through the existing
|
|
89352
|
-
* CMMD client before the caller refuses (CMMD-Center/forge#3496
|
|
89353
|
-
* delivers the grant proactively on
|
|
89354
|
-
* on a woken runtime is a cache or
|
|
89355
|
-
* request: this closes the gap where the
|
|
89356
|
-
* authority cache mid-request, and logs the
|
|
89357
|
-
* cause is visible instead of a silent refusal.
|
|
89370
|
+
* CMMD client before the caller refuses (CMMD-Center/forge#3496,
|
|
89371
|
+
* CMMD-Center/forge#3498). CMMD delivers the grant proactively on
|
|
89372
|
+
* thread.create and the kick, so a miss on a woken runtime is a cache or
|
|
89373
|
+
* ticket TTL problem, not a missing request: this closes the gap where the
|
|
89374
|
+
* ticket lands in the broker authority cache mid-request, and logs the
|
|
89375
|
+
* outcome on failure so the cause is visible instead of a silent refusal.
|
|
89376
|
+
*
|
|
89377
|
+
* A CMMD cloud runtime (every sprite) must still make this round trip
|
|
89378
|
+
* itself: `status()`'s own grant gate fails closed before ever reaching
|
|
89379
|
+
* the network for that runtime class (ADR-015 — it must never fall
|
|
89380
|
+
* through to the human JWT), so this uses `probeRuntimeGithubGrantDelivery`
|
|
89381
|
+
* instead, which makes the identical round trip without that JWT
|
|
89382
|
+
* fallback.
|
|
89358
89383
|
*/
|
|
89359
89384
|
async requestRuntimeGithubGrant() {
|
|
89360
89385
|
const cached = this.runtimeGrantAuthContext("github");
|
|
89361
89386
|
if (cached) return cached;
|
|
89362
89387
|
const runtimeId = process.env.FORGE_CMMD_RUNTIME_ID?.trim();
|
|
89363
89388
|
if (!runtimeId) return null;
|
|
89364
|
-
|
|
89389
|
+
if (this.isCmmdCloudRuntimeMode) await this.probeRuntimeGithubGrantDelivery(runtimeId);
|
|
89390
|
+
else await this.status({
|
|
89365
89391
|
sessionId: AuthSessionId.make(`cmmd-runtime:${runtimeId}`),
|
|
89366
89392
|
subject: `runtime:${runtimeId}`
|
|
89367
89393
|
});
|
|
89368
89394
|
const grant = this.runtimeGrantAuthContext("github");
|
|
89369
|
-
console.warn(`[github-broker] re-requested the github scope grant for runtime ${runtimeId}:
|
|
89395
|
+
if (!grant) console.warn(`[github-broker] re-requested the github scope grant for runtime ${runtimeId}: still missing after one network round trip`);
|
|
89370
89396
|
return grant;
|
|
89371
89397
|
}
|
|
89398
|
+
/**
|
|
89399
|
+
* The cloud-runtime half of `requestRuntimeGithubGrant`'s re-request.
|
|
89400
|
+
*
|
|
89401
|
+
* CMMD's status route always requires a Bearer that already carries the
|
|
89402
|
+
* "github" scope (verified server-side against the presented ticket's own
|
|
89403
|
+
* claims — see `forge-runtime-grants.routes.ts` on CMMD main), and there is
|
|
89404
|
+
* no separate CMMD route that mints a "github"-scoped grant on demand. So
|
|
89405
|
+
* this call's own response can never carry a grant to install; its purpose
|
|
89406
|
+
* is the wait. CMMD delivers a fresh grant on this same runtime's inbound
|
|
89407
|
+
* thread.create/kick requests (`ServerAuth.authenticateHttpRequest` /
|
|
89408
|
+
* `authenticateWebSocketUpgrade`, which install it into the broker
|
|
89409
|
+
* authority cache as a side effect of authenticating each request), and a
|
|
89410
|
+
* delivery already in flight when the caller checked the cache gets this
|
|
89411
|
+
* round trip's worth of extra time to land before the caller gives up.
|
|
89412
|
+
* Bounded by the same timeout as every other runtime-grant call, and
|
|
89413
|
+
* deliberately unauthenticated: sending no Bearer is exactly as
|
|
89414
|
+
* informative to CMMD as sending one lacking the required scope, and
|
|
89415
|
+
* skips resolving one for a request whose own response is never used.
|
|
89416
|
+
*/
|
|
89417
|
+
async probeRuntimeGithubGrantDelivery(runtimeId) {
|
|
89418
|
+
const response = await this.fetchImpl(makeUrl(this.commandAppUrl, `/api/forge/runtimes/${encodeURIComponent(runtimeId)}/github/status`), {
|
|
89419
|
+
method: "GET",
|
|
89420
|
+
signal: AbortSignal.timeout(GITHUB_BROKER_REQUEST_TIMEOUT_MS)
|
|
89421
|
+
}).catch(() => null);
|
|
89422
|
+
if (response !== null) await parseResponseBody(response);
|
|
89423
|
+
}
|
|
89372
89424
|
async workspaceStatus(input) {
|
|
89373
89425
|
const cwdValidation = validateCwd(input.cwd);
|
|
89374
89426
|
if (cwdValidation) return cwdValidation;
|
|
@@ -151589,7 +151641,9 @@ const SERVER_ONLY_PROVIDER_CHILD_ENV_KEYS = new Set([
|
|
|
151589
151641
|
"FORGE_CMMD_RUNTIME_PUBLIC_KEY",
|
|
151590
151642
|
"FORGE_PROVIDER_PROXY_URL",
|
|
151591
151643
|
"FORGE_PROXY_HMAC_SECRET",
|
|
151592
|
-
"FORGE_PPROXY_HMAC_SECRET"
|
|
151644
|
+
"FORGE_PPROXY_HMAC_SECRET",
|
|
151645
|
+
"SPRITE_API_TOKEN",
|
|
151646
|
+
"SPRITES_TOKEN"
|
|
151593
151647
|
]);
|
|
151594
151648
|
function scrubForgeProviderChildEnvSecrets(env) {
|
|
151595
151649
|
const scrubbed = { ...env };
|
|
@@ -298346,7 +298400,7 @@ function resolveBuildCommitFromEnv(env) {
|
|
|
298346
298400
|
* environment descriptor down instead of reporting an honest "unknown".
|
|
298347
298401
|
*/
|
|
298348
298402
|
function readBakedBuildCommit() {
|
|
298349
|
-
return "
|
|
298403
|
+
return "00be113a2d44d7842004edc5cef20ef7e4f24518";
|
|
298350
298404
|
}
|
|
298351
298405
|
async function resolveServerBuildCommit(input) {
|
|
298352
298406
|
if (isFullCommitSha(input.baked)) return input.baked;
|
|
@@ -311019,7 +311073,10 @@ function isLegacyRuntimeConnection(value, expectedRuntimeId) {
|
|
|
311019
311073
|
return [
|
|
311020
311074
|
runtime.runtimeId === expectedRuntimeId,
|
|
311021
311075
|
runtime.runtimeCapabilityMode === "legacy_env",
|
|
311022
|
-
|
|
311076
|
+
hasCmmdRuntimeSpriteIdentity({
|
|
311077
|
+
...Object.hasOwn(runtime, "spriteName") ? { spriteName: typeof runtime.spriteName === "string" ? runtime.spriteName : null } : {},
|
|
311078
|
+
...Object.hasOwn(runtime, "flyMachineId") ? { flyMachineId: typeof runtime.flyMachineId === "string" ? runtime.flyMachineId : null } : {}
|
|
311079
|
+
}),
|
|
311023
311080
|
!Object.hasOwn(runtime, "brokerAuthorityAttestedForgeGitCommit"),
|
|
311024
311081
|
runtime.brokerAuthorityAttestedImageRef === null,
|
|
311025
311082
|
runtime.brokerAuthorityAttestedImageVersion === null,
|
|
@@ -321134,7 +321191,7 @@ const execFilePromise = (0, node_util.promisify)(node_child_process.execFile);
|
|
|
321134
321191
|
const COMMAND_TIMEOUT_MS = 15e3;
|
|
321135
321192
|
const MAX_COMMAND_OUTPUT_BYTES = 32e3;
|
|
321136
321193
|
const MAX_PROCESSES = 80;
|
|
321137
|
-
const sanitizeRuntimeDiagnosticText = (value) => value.replace(/\b(OPENAI_API_KEY|ANTHROPIC_API_KEY|ANTHROPIC_AUTH_TOKEN|FLY_ACCESS_TOKEN|FLY_API_TOKEN|GITHUB_TOKEN|FORGE_CMMD_RUNTIME_GRANT_TOKEN|FORGE_NPM_PROXY_TOKEN|FORGE_PROXY_HMAC_SECRET|FORGE_PPROXY_HMAC_SECRET|CMMD_FORGE_RUNTIME_TICKET_PRIVATE_KEY|CMMD_FORGE_RUNTIME_BROWSER_WEBRTC_ICE_SERVERS)=\S+/g, "$1=[redacted]").replace(/\bforge_proxy_[A-Za-z0-9._-]+/g, "forge_proxy_[redacted]").replace(/\bcmmd_provider_[A-Za-z0-9._-]+/g, "cmmd_provider_[redacted]").replace(/\bruntime-grant\.[A-Za-z0-9._-]+/g, "runtime-grant.[redacted]").replace(/\b(sk|ghp|github_pat)_[A-Za-z0-9._-]+/g, "$1_[redacted]").replace(/\bsk-[A-Za-z0-9._-]+/g, "sk-[redacted]");
|
|
321194
|
+
const sanitizeRuntimeDiagnosticText = (value) => value.replace(/\b(OPENAI_API_KEY|ANTHROPIC_API_KEY|ANTHROPIC_AUTH_TOKEN|FLY_ACCESS_TOKEN|FLY_API_TOKEN|SPRITES_TOKEN|SPRITE_API_TOKEN|GITHUB_TOKEN|FORGE_CMMD_RUNTIME_GRANT_TOKEN|FORGE_NPM_PROXY_TOKEN|FORGE_PROXY_HMAC_SECRET|FORGE_PPROXY_HMAC_SECRET|CMMD_FORGE_RUNTIME_TICKET_PRIVATE_KEY|CMMD_FORGE_RUNTIME_BROWSER_WEBRTC_ICE_SERVERS)=\S+/g, "$1=[redacted]").replace(/\bforge_proxy_[A-Za-z0-9._-]+/g, "forge_proxy_[redacted]").replace(/\bcmmd_provider_[A-Za-z0-9._-]+/g, "cmmd_provider_[redacted]").replace(/\bruntime-grant\.[A-Za-z0-9._-]+/g, "runtime-grant.[redacted]").replace(/\b(sk|ghp|github_pat)_[A-Za-z0-9._-]+/g, "$1_[redacted]").replace(/\bsk-[A-Za-z0-9._-]+/g, "sk-[redacted]");
|
|
321138
321195
|
const sanitizeRuntimeDiagnosticValue = (value) => {
|
|
321139
321196
|
const trimmed = value?.trim();
|
|
321140
321197
|
if (!trimmed) return void 0;
|
|
@@ -321181,16 +321238,15 @@ const parseProcessList = (output) => output.split("\n").map((line) => line.trim(
|
|
|
321181
321238
|
if (!Number.isFinite(pid) || !Number.isFinite(ppid) || !stat || !command) return void 0;
|
|
321182
321239
|
const cpuPercent = parseMeasurement(cpuRaw);
|
|
321183
321240
|
const rssKb = parseMeasurement(rssRaw);
|
|
321184
|
-
const
|
|
321185
|
-
if (cpuPercent !== null) measurements.cpuPercent = cpuPercent;
|
|
321186
|
-
if (rssKb !== null) measurements.rssKb = rssKb;
|
|
321187
|
-
return {
|
|
321241
|
+
const parsed = {
|
|
321188
321242
|
pid,
|
|
321189
321243
|
ppid,
|
|
321190
321244
|
stat: sanitizeRuntimeDiagnosticText(stat),
|
|
321191
|
-
command: sanitizeRuntimeDiagnosticText(command)
|
|
321192
|
-
...measurements
|
|
321245
|
+
command: sanitizeRuntimeDiagnosticText(command)
|
|
321193
321246
|
};
|
|
321247
|
+
if (cpuPercent !== null) parsed.cpuPercent = cpuPercent;
|
|
321248
|
+
if (rssKb !== null) parsed.rssKb = rssKb;
|
|
321249
|
+
return parsed;
|
|
321194
321250
|
}).filter((process) => process !== void 0).slice(0, MAX_PROCESSES);
|
|
321195
321251
|
/**
|
|
321196
321252
|
* The process tree, or the reason there isn't one.
|
package/dist/bin.mjs
CHANGED
|
@@ -26689,6 +26689,24 @@ const RelayWsRpcGroup = WsRpcGroup.middleware(RelayAuthorizationMiddleware).midd
|
|
|
26689
26689
|
*/
|
|
26690
26690
|
const SessionWsRpcGroup = WsRpcGroup.middleware(SessionAuthorizationMiddleware);
|
|
26691
26691
|
//#endregion
|
|
26692
|
+
//#region ../../packages/contracts/src/cmmdRuntimeSpriteIdentity.ts
|
|
26693
|
+
function nonEmptyString$3(value) {
|
|
26694
|
+
return typeof value === "string" && value.length > 0 ? value : null;
|
|
26695
|
+
}
|
|
26696
|
+
/**
|
|
26697
|
+
* Resolve the operational Sprite name for provision / connect / readiness gates.
|
|
26698
|
+
*
|
|
26699
|
+
* @see CmmdRuntimeSpriteIdentitySource for the dual-contract rules.
|
|
26700
|
+
*/
|
|
26701
|
+
function resolveCmmdRuntimeSpriteName(runtime) {
|
|
26702
|
+
if (Object.hasOwn(runtime, "spriteName")) return nonEmptyString$3(runtime.spriteName);
|
|
26703
|
+
return nonEmptyString$3(runtime.flyMachineId);
|
|
26704
|
+
}
|
|
26705
|
+
/** True when the payload carries an operational Sprite name after dual-read. */
|
|
26706
|
+
function hasCmmdRuntimeSpriteIdentity(runtime) {
|
|
26707
|
+
return resolveCmmdRuntimeSpriteName(runtime) !== null;
|
|
26708
|
+
}
|
|
26709
|
+
//#endregion
|
|
26692
26710
|
//#region ../../packages/contracts/src/cmmdRuntimeThreadLifecycle.ts
|
|
26693
26711
|
const FORGE_LIFECYCLE_METADATA_KEY = "forgeLifecycle";
|
|
26694
26712
|
const FORGE_LIFECYCLE_SCHEMA_VERSION = 1;
|
|
@@ -65961,7 +65979,7 @@ function normalizeNumberish(value) {
|
|
|
65961
65979
|
}
|
|
65962
65980
|
//#endregion
|
|
65963
65981
|
//#region package.json
|
|
65964
|
-
var version$1 = "0.13.
|
|
65982
|
+
var version$1 = "0.13.66";
|
|
65965
65983
|
//#endregion
|
|
65966
65984
|
//#region src/sentry.ts
|
|
65967
65985
|
const SERVER_APP_NAME = "forge-server";
|
|
@@ -88993,26 +89011,60 @@ var GitHubBroker = class {
|
|
|
88993
89011
|
}
|
|
88994
89012
|
/**
|
|
88995
89013
|
* On a "github" scope cache miss, re-requests it once through the existing
|
|
88996
|
-
* CMMD client before the caller refuses (CMMD-Center/forge#3496
|
|
88997
|
-
* delivers the grant proactively on
|
|
88998
|
-
* on a woken runtime is a cache or
|
|
88999
|
-
* request: this closes the gap where the
|
|
89000
|
-
* authority cache mid-request, and logs the
|
|
89001
|
-
* cause is visible instead of a silent refusal.
|
|
89014
|
+
* CMMD client before the caller refuses (CMMD-Center/forge#3496,
|
|
89015
|
+
* CMMD-Center/forge#3498). CMMD delivers the grant proactively on
|
|
89016
|
+
* thread.create and the kick, so a miss on a woken runtime is a cache or
|
|
89017
|
+
* ticket TTL problem, not a missing request: this closes the gap where the
|
|
89018
|
+
* ticket lands in the broker authority cache mid-request, and logs the
|
|
89019
|
+
* outcome on failure so the cause is visible instead of a silent refusal.
|
|
89020
|
+
*
|
|
89021
|
+
* A CMMD cloud runtime (every sprite) must still make this round trip
|
|
89022
|
+
* itself: `status()`'s own grant gate fails closed before ever reaching
|
|
89023
|
+
* the network for that runtime class (ADR-015 — it must never fall
|
|
89024
|
+
* through to the human JWT), so this uses `probeRuntimeGithubGrantDelivery`
|
|
89025
|
+
* instead, which makes the identical round trip without that JWT
|
|
89026
|
+
* fallback.
|
|
89002
89027
|
*/
|
|
89003
89028
|
async requestRuntimeGithubGrant() {
|
|
89004
89029
|
const cached = this.runtimeGrantAuthContext("github");
|
|
89005
89030
|
if (cached) return cached;
|
|
89006
89031
|
const runtimeId = process.env.FORGE_CMMD_RUNTIME_ID?.trim();
|
|
89007
89032
|
if (!runtimeId) return null;
|
|
89008
|
-
|
|
89033
|
+
if (this.isCmmdCloudRuntimeMode) await this.probeRuntimeGithubGrantDelivery(runtimeId);
|
|
89034
|
+
else await this.status({
|
|
89009
89035
|
sessionId: AuthSessionId.make(`cmmd-runtime:${runtimeId}`),
|
|
89010
89036
|
subject: `runtime:${runtimeId}`
|
|
89011
89037
|
});
|
|
89012
89038
|
const grant = this.runtimeGrantAuthContext("github");
|
|
89013
|
-
console.warn(`[github-broker] re-requested the github scope grant for runtime ${runtimeId}:
|
|
89039
|
+
if (!grant) console.warn(`[github-broker] re-requested the github scope grant for runtime ${runtimeId}: still missing after one network round trip`);
|
|
89014
89040
|
return grant;
|
|
89015
89041
|
}
|
|
89042
|
+
/**
|
|
89043
|
+
* The cloud-runtime half of `requestRuntimeGithubGrant`'s re-request.
|
|
89044
|
+
*
|
|
89045
|
+
* CMMD's status route always requires a Bearer that already carries the
|
|
89046
|
+
* "github" scope (verified server-side against the presented ticket's own
|
|
89047
|
+
* claims — see `forge-runtime-grants.routes.ts` on CMMD main), and there is
|
|
89048
|
+
* no separate CMMD route that mints a "github"-scoped grant on demand. So
|
|
89049
|
+
* this call's own response can never carry a grant to install; its purpose
|
|
89050
|
+
* is the wait. CMMD delivers a fresh grant on this same runtime's inbound
|
|
89051
|
+
* thread.create/kick requests (`ServerAuth.authenticateHttpRequest` /
|
|
89052
|
+
* `authenticateWebSocketUpgrade`, which install it into the broker
|
|
89053
|
+
* authority cache as a side effect of authenticating each request), and a
|
|
89054
|
+
* delivery already in flight when the caller checked the cache gets this
|
|
89055
|
+
* round trip's worth of extra time to land before the caller gives up.
|
|
89056
|
+
* Bounded by the same timeout as every other runtime-grant call, and
|
|
89057
|
+
* deliberately unauthenticated: sending no Bearer is exactly as
|
|
89058
|
+
* informative to CMMD as sending one lacking the required scope, and
|
|
89059
|
+
* skips resolving one for a request whose own response is never used.
|
|
89060
|
+
*/
|
|
89061
|
+
async probeRuntimeGithubGrantDelivery(runtimeId) {
|
|
89062
|
+
const response = await this.fetchImpl(makeUrl(this.commandAppUrl, `/api/forge/runtimes/${encodeURIComponent(runtimeId)}/github/status`), {
|
|
89063
|
+
method: "GET",
|
|
89064
|
+
signal: AbortSignal.timeout(GITHUB_BROKER_REQUEST_TIMEOUT_MS)
|
|
89065
|
+
}).catch(() => null);
|
|
89066
|
+
if (response !== null) await parseResponseBody(response);
|
|
89067
|
+
}
|
|
89016
89068
|
async workspaceStatus(input) {
|
|
89017
89069
|
const cwdValidation = validateCwd(input.cwd);
|
|
89018
89070
|
if (cwdValidation) return cwdValidation;
|
|
@@ -151162,7 +151214,9 @@ const SERVER_ONLY_PROVIDER_CHILD_ENV_KEYS = new Set([
|
|
|
151162
151214
|
"FORGE_CMMD_RUNTIME_PUBLIC_KEY",
|
|
151163
151215
|
"FORGE_PROVIDER_PROXY_URL",
|
|
151164
151216
|
"FORGE_PROXY_HMAC_SECRET",
|
|
151165
|
-
"FORGE_PPROXY_HMAC_SECRET"
|
|
151217
|
+
"FORGE_PPROXY_HMAC_SECRET",
|
|
151218
|
+
"SPRITE_API_TOKEN",
|
|
151219
|
+
"SPRITES_TOKEN"
|
|
151166
151220
|
]);
|
|
151167
151221
|
function scrubForgeProviderChildEnvSecrets(env) {
|
|
151168
151222
|
const scrubbed = { ...env };
|
|
@@ -297791,7 +297845,7 @@ function resolveBuildCommitFromEnv(env) {
|
|
|
297791
297845
|
* environment descriptor down instead of reporting an honest "unknown".
|
|
297792
297846
|
*/
|
|
297793
297847
|
function readBakedBuildCommit() {
|
|
297794
|
-
return "
|
|
297848
|
+
return "00be113a2d44d7842004edc5cef20ef7e4f24518";
|
|
297795
297849
|
}
|
|
297796
297850
|
async function resolveServerBuildCommit(input) {
|
|
297797
297851
|
if (isFullCommitSha(input.baked)) return input.baked;
|
|
@@ -310392,7 +310446,10 @@ function isLegacyRuntimeConnection(value, expectedRuntimeId) {
|
|
|
310392
310446
|
return [
|
|
310393
310447
|
runtime.runtimeId === expectedRuntimeId,
|
|
310394
310448
|
runtime.runtimeCapabilityMode === "legacy_env",
|
|
310395
|
-
|
|
310449
|
+
hasCmmdRuntimeSpriteIdentity({
|
|
310450
|
+
...Object.hasOwn(runtime, "spriteName") ? { spriteName: typeof runtime.spriteName === "string" ? runtime.spriteName : null } : {},
|
|
310451
|
+
...Object.hasOwn(runtime, "flyMachineId") ? { flyMachineId: typeof runtime.flyMachineId === "string" ? runtime.flyMachineId : null } : {}
|
|
310452
|
+
}),
|
|
310396
310453
|
!Object.hasOwn(runtime, "brokerAuthorityAttestedForgeGitCommit"),
|
|
310397
310454
|
runtime.brokerAuthorityAttestedImageRef === null,
|
|
310398
310455
|
runtime.brokerAuthorityAttestedImageVersion === null,
|
|
@@ -320464,7 +320521,7 @@ const execFilePromise = promisify$1(execFile);
|
|
|
320464
320521
|
const COMMAND_TIMEOUT_MS = 15e3;
|
|
320465
320522
|
const MAX_COMMAND_OUTPUT_BYTES = 32e3;
|
|
320466
320523
|
const MAX_PROCESSES = 80;
|
|
320467
|
-
const sanitizeRuntimeDiagnosticText = (value) => value.replace(/\b(OPENAI_API_KEY|ANTHROPIC_API_KEY|ANTHROPIC_AUTH_TOKEN|FLY_ACCESS_TOKEN|FLY_API_TOKEN|GITHUB_TOKEN|FORGE_CMMD_RUNTIME_GRANT_TOKEN|FORGE_NPM_PROXY_TOKEN|FORGE_PROXY_HMAC_SECRET|FORGE_PPROXY_HMAC_SECRET|CMMD_FORGE_RUNTIME_TICKET_PRIVATE_KEY|CMMD_FORGE_RUNTIME_BROWSER_WEBRTC_ICE_SERVERS)=\S+/g, "$1=[redacted]").replace(/\bforge_proxy_[A-Za-z0-9._-]+/g, "forge_proxy_[redacted]").replace(/\bcmmd_provider_[A-Za-z0-9._-]+/g, "cmmd_provider_[redacted]").replace(/\bruntime-grant\.[A-Za-z0-9._-]+/g, "runtime-grant.[redacted]").replace(/\b(sk|ghp|github_pat)_[A-Za-z0-9._-]+/g, "$1_[redacted]").replace(/\bsk-[A-Za-z0-9._-]+/g, "sk-[redacted]");
|
|
320524
|
+
const sanitizeRuntimeDiagnosticText = (value) => value.replace(/\b(OPENAI_API_KEY|ANTHROPIC_API_KEY|ANTHROPIC_AUTH_TOKEN|FLY_ACCESS_TOKEN|FLY_API_TOKEN|SPRITES_TOKEN|SPRITE_API_TOKEN|GITHUB_TOKEN|FORGE_CMMD_RUNTIME_GRANT_TOKEN|FORGE_NPM_PROXY_TOKEN|FORGE_PROXY_HMAC_SECRET|FORGE_PPROXY_HMAC_SECRET|CMMD_FORGE_RUNTIME_TICKET_PRIVATE_KEY|CMMD_FORGE_RUNTIME_BROWSER_WEBRTC_ICE_SERVERS)=\S+/g, "$1=[redacted]").replace(/\bforge_proxy_[A-Za-z0-9._-]+/g, "forge_proxy_[redacted]").replace(/\bcmmd_provider_[A-Za-z0-9._-]+/g, "cmmd_provider_[redacted]").replace(/\bruntime-grant\.[A-Za-z0-9._-]+/g, "runtime-grant.[redacted]").replace(/\b(sk|ghp|github_pat)_[A-Za-z0-9._-]+/g, "$1_[redacted]").replace(/\bsk-[A-Za-z0-9._-]+/g, "sk-[redacted]");
|
|
320468
320525
|
const sanitizeRuntimeDiagnosticValue = (value) => {
|
|
320469
320526
|
const trimmed = value?.trim();
|
|
320470
320527
|
if (!trimmed) return void 0;
|
|
@@ -320511,16 +320568,15 @@ const parseProcessList = (output) => output.split("\n").map((line) => line.trim(
|
|
|
320511
320568
|
if (!Number.isFinite(pid) || !Number.isFinite(ppid) || !stat || !command) return void 0;
|
|
320512
320569
|
const cpuPercent = parseMeasurement(cpuRaw);
|
|
320513
320570
|
const rssKb = parseMeasurement(rssRaw);
|
|
320514
|
-
const
|
|
320515
|
-
if (cpuPercent !== null) measurements.cpuPercent = cpuPercent;
|
|
320516
|
-
if (rssKb !== null) measurements.rssKb = rssKb;
|
|
320517
|
-
return {
|
|
320571
|
+
const parsed = {
|
|
320518
320572
|
pid,
|
|
320519
320573
|
ppid,
|
|
320520
320574
|
stat: sanitizeRuntimeDiagnosticText(stat),
|
|
320521
|
-
command: sanitizeRuntimeDiagnosticText(command)
|
|
320522
|
-
...measurements
|
|
320575
|
+
command: sanitizeRuntimeDiagnosticText(command)
|
|
320523
320576
|
};
|
|
320577
|
+
if (cpuPercent !== null) parsed.cpuPercent = cpuPercent;
|
|
320578
|
+
if (rssKb !== null) parsed.rssKb = rssKb;
|
|
320579
|
+
return parsed;
|
|
320524
320580
|
}).filter((process) => process !== void 0).slice(0, MAX_PROCESSES);
|
|
320525
320581
|
/**
|
|
320526
320582
|
* The process tree, or the reason there isn't one.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{Ha as t,Mi as n,Ua as r,Wa as i}from"./Stream-mUTFnSY9.js";import{Al as a,Fn as o,Gc as s,Hr as c,Jc as l,Qr as u,Rr as d,Sr as f,Tn as p,Uc as m,Xr as h,_r as g,d as _,fn as v,fr as y,gr as b,i as x,is as S,jn as C,l as w,m as T,ms as E,n as D,qc as O,qt as k,r as A,u as j,za as M,zr as N}from"./DiffPanelShell-
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{Ha as t,Mi as n,Ua as r,Wa as i}from"./Stream-mUTFnSY9.js";import{Al as a,Fn as o,Gc as s,Hr as c,Jc as l,Qr as u,Rr as d,Sr as f,Tn as p,Uc as m,Xr as h,_r as g,d as _,fn as v,fr as y,gr as b,i as x,is as S,jn as C,l as w,m as T,ms as E,n as D,qc as O,qt as k,r as A,u as j,za as M,zr as N}from"./DiffPanelShell-COwQln6y.js";import{hn as P}from"./CompositeItem-BsSeqHOM.js";import{a as F,c as I,f as L,i as R,l as z,m as B,n as V,o as H,p as U,r as W,s as G,t as K}from"./Virtualizer-BYyEY2Dk.js";import{Dn as q,at as J,it as ee}from"./src-IM0FnQax.js";import{a as te,c as ne,d as re,h as ie,i as ae,l as oe,m as se,n as ce,o as Y,p as le,r as ue,s as de,t as fe,u as pe}from"./DiffPanel.logic-N-_02IKx.js";var X=e(i(),1),me=typeof window>`u`?X.useEffect:X.useLayoutEffect;function he({fileDiff:e,options:t,editorOptions:n,lineAnnotations:r,selectedLines:i,prerenderedHTML:a,metrics:o,hasGutterRenderUtility:s,hasCustomHeader:c,disableWorkerPool:l,edit:u}){let d=V(),f=i!==void 0,p=(0,X.useContext)(x),m=j(),h=(0,X.useRef)(null),g=_(n=>{if(n!=null){if(h.current!=null)throw Error(`useFileDiffInstance: An instance should not already exist when a node is created`);d==null?h.current=new re(Z({controlledSelection:f,hasCustomHeader:c,hasGutterRenderUtility:s,options:t}),l?void 0:p,!0):h.current=new pe(Z({controlledSelection:f,hasCustomHeader:c,hasGutterRenderUtility:s,options:t}),d,o,l?void 0:p,!0),h.current.hydrate({fileDiff:e,fileContainer:n,lineAnnotations:r,prerenderedHTML:a})}else{if(h.current==null)throw Error(`useFileDiffInstance: A FileDiff instance should exist when unmounting`);h.current.cleanUp(),h.current=null}});return me(()=>{let{current:n}=h;if(n==null)return;let a=Z({controlledSelection:f,hasCustomHeader:c,hasGutterRenderUtility:s,options:t}),o=a!==void 0&&!k(n.options,a);n.setOptions(a),n.render({forceRender:o,fileDiff:e,lineAnnotations:r}),i!==void 0&&n.setSelectedLines(i)}),me(()=>{if(u&&h.current!=null){if(m===void 0)throw Error(`FileDiff: EditContext is not attached`);let e=m(n??{});if(e==null)throw Error(`FileDiff: EditProvider.createEditor must return an editor instance`);try{return e.edit(h.current)}catch(t){throw e.cleanUp(),t}}},[u]),{ref:g,getHoveredLine:(0,X.useCallback)(()=>h.current?.getHoveredLine(),[])}}function Z({options:e,controlledSelection:t,hasCustomHeader:n,hasGutterRenderUtility:r}){return t||r||n?{...e,controlledSelection:t,renderCustomHeader:n?w:e?.renderCustomHeader,renderGutterUtility:r?w:e?.renderGutterUtility}:e}var Q=r();function ge({fileDiff:e,options:t,editorOptions:n,metrics:r,lineAnnotations:i,selectedLines:a,className:o,style:s,prerenderedHTML:c,renderAnnotation:l,renderCustomHeader:u,renderHeaderPrefix:d,renderHeaderFilenameSuffix:f,renderHeaderMetadata:p,renderGutterUtility:m,disableWorkerPool:h=!1,edit:g=!1}){let{ref:_,getHoveredLine:y}=he({fileDiff:e,options:t,editorOptions:n,metrics:r,lineAnnotations:i,selectedLines:a,prerenderedHTML:c,hasGutterRenderUtility:m!=null,hasCustomHeader:u!=null,disableWorkerPool:h,edit:g});return(0,Q.jsx)(v,{ref:_,className:o,style:s,children:W(oe({fileDiff:e,renderCustomHeader:u,renderHeaderPrefix:d,renderHeaderFilenameSuffix:f,renderHeaderMetadata:p,renderAnnotation:l,renderGutterUtility:m,lineAnnotations:i,getHoveredLine:y}),c)})}var $=t();function _e(e){return e.fromTurnCount===0?q(ee)({threadId:e.threadId,toTurnCount:e.toTurnCount}).pipe(n(e=>({kind:`fullThreadDiff`,input:e}))):q(J)({threadId:e.threadId,fromTurnCount:e.fromTurnCount,toTurnCount:e.toTurnCount}).pipe(n(e=>({kind:`turnDiff`,input:e})))}function ve(e){return e instanceof Error?e.message:typeof e==`string`?e:``}function ye(e){let t=ve(e).trim();if(t.length===0)return`Failed to load checkpoint diff.`;let n=t.toLowerCase();if(n.includes(`not a git repository`))return`Turn diffs are unavailable because this project is not a git repository.`;if(n.includes(`checkpoint unavailable for thread`)||n.includes(`checkpoint invariant violation`)){let e=t.indexOf(`:`);if(e>=0){let n=t.slice(e+1).trim();if(n.length>0)return n}}return t}function be(e){let t=ve(e).toLowerCase();return t.includes(`exceeds current turn count`)||t.includes(`checkpoint is unavailable for turn`)||t.includes(`filesystem checkpoint is unavailable`)}function xe(e){let t=_e(e);return O({queryKey:M.checkpointDiff(e),queryFn:async({signal:n})=>{if(!e.environmentId||!e.threadId||t._tag===`None`)throw Error(`Checkpoint diff is unavailable.`);let r=c(e.environmentId);try{return t.value.kind===`fullThreadDiff`?await r.orchestration.getFullThreadDiff(t.value.input,{signal:n}):await r.orchestration.getTurnDiff(t.value.input,{signal:n})}catch(e){throw Error(ye(e),{cause:e})}},enabled:(e.enabled??!0)&&!!e.environmentId&&!!e.threadId&&t._tag===`Some`,staleTime:1/0,retry:(e,t)=>be(t)?e<12:e<3,retryDelay:(e,t)=>be(t)?Math.min(5e3,250*2**(e-1)):Math.min(1e3,100*2**(e-1))})}function Se(e){if(!(!e.canScrollLeft&&!e.canScrollRight))return{maskImage:`linear-gradient(to right, ${e.canScrollLeft?`transparent 24px, black 72px`:`black`}, ${e.canScrollRight?`black calc(100% - 72px), transparent calc(100% - 24px)`:`black`})`}}function Ce(e){return e instanceof Error?e.message:e?`Failed to load checkpoint diff.`:null}function we(e){return{environmentId:e.environmentId??null,threadId:e.threadId,fromTurnCount:e.range?.fromTurnCount??null,toTurnCount:e.range?.toTurnCount??null,cacheScope:e.selectedTurnId?`turn:${e.selectedTurnId}`:e.conversationCacheScope,enabled:e.enabled}}function Te(){let e=(0,$.c)(8),t=(0,X.useRef)(null),[n,r]=(0,X.useState)(!1),[i,a]=(0,X.useState)(!1),o;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(o=()=>{let e=t.current;if(!e){r(!1),a(!1);return}let n=de({scrollLeft:e.scrollLeft,scrollWidth:e.scrollWidth,clientWidth:e.clientWidth});r(n.canScrollLeft),a(n.canScrollRight)},e[0]=o):o=e[0];let s=o,c;e[1]===Symbol.for(`react.memo_cache_sentinel`)?(c=e=>{t.current?.scrollBy({left:e,behavior:`smooth`})},e[1]=c):c=e[1];let l=c,u;e[2]===Symbol.for(`react.memo_cache_sentinel`)?(u=e=>{let n=t.current;n&&ne({scrollWidth:n.scrollWidth,clientWidth:n.clientWidth,deltaX:e.deltaX,deltaY:e.deltaY})&&(e.preventDefault(),n.scrollBy({left:e.deltaY,behavior:`auto`}))},e[2]=u):u=e[2];let d=u,f,p;e[3]===Symbol.for(`react.memo_cache_sentinel`)?(f=()=>{let e=t.current;if(!e)return;let n=window.requestAnimationFrame(s),r=()=>s();e.addEventListener(`scroll`,r,{passive:!0});let i=new ResizeObserver(()=>s());return i.observe(e),()=>{window.cancelAnimationFrame(n),e.removeEventListener(`scroll`,r),i.disconnect()}},p=[s],e[3]=f,e[4]=p):(f=e[3],p=e[4]),(0,X.useEffect)(f,p);let m;return e[5]!==n||e[6]!==i?(m={ref:t,canScrollLeft:n,canScrollRight:i,scrollBy:l,onWheel:d,remeasure:s},e[5]=n,e[6]=i,e[7]=m):m=e[7],m}function Ee(e,t){let n=(0,$.c)(5),r;n[0]===e.current?r=n[1]:(r=()=>{(e.current?.querySelector(`[data-turn-chip-selected='true']`))?.scrollIntoView({block:`nearest`,inline:`nearest`,behavior:`smooth`})},n[0]=e.current,n[1]=r);let i;n[2]!==e||n[3]!==t?(i=[e,t],n[2]=e,n[3]=t,n[4]=i):i=n[4],(0,X.useEffect)(r,i)}var De=`
|
|
2
2
|
[data-diffs-header],
|
|
3
3
|
[data-diff],
|
|
4
4
|
[data-file],
|
|
@@ -61,4 +61,4 @@ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{Ha as t,Mi as n,Ua as
|
|
|
61
61
|
text-decoration-color: currentColor;
|
|
62
62
|
}
|
|
63
63
|
`;function Oe(e){let t=(0,$.c)(44),{mode:n}=e,r=n===void 0?`inline`:n,{resolvedTheme:i}=b(),a=g(),[c,l]=(0,X.useState)(`stacked`),[u,d]=(0,X.useState)(a.diffWordWrap),h=(0,X.useRef)(null),_=(0,X.useRef)(!1),v=Te(),{activeCwd:y,activeThread:x,bodyState:S,diffOpen:C,inferredCheckpointTurnCountByTurnId:w,orderedTurnDiffSummaries:T,renderableFiles:E,renderablePatch:D,selectedFilePath:O,selectedTurn:k,selectedTurnId:j}=Le(i),M,P;t[0]!==C||t[1]!==a.diffWordWrap?(M=()=>{C&&!_.current&&d(a.diffWordWrap),_.current=C},P=[C,a.diffWordWrap],t[0]=C,t[1]=a.diffWordWrap,t[2]=M,t[3]=P):(M=t[2],P=t[3]),(0,X.useEffect)(M,P);let F;t[4]===O?F=t[5]:(F=()=>{!O||!h.current||Array.from(h.current.querySelectorAll(`[data-diff-file-path]`)).find(e=>e.dataset.diffFilePath===O)?.scrollIntoView({block:`nearest`})},t[4]=O,t[5]=F);let I;t[6]!==E||t[7]!==O?(I=[O,E],t[6]=E,t[7]=O,t[8]=I):I=t[8],(0,X.useEffect)(F,I);let L;t[9]===y?L=t[10]:(L=e=>{let t=f();if(!t)return;let n=y?p(e,y):e;N(t,n).catch(ke)},t[9]=y,t[10]=L);let R=L,z;t[11]===x?z=t[12]:(z=e=>{x&&o.getState().openDiff(s(m(x.environmentId,x.id)),e)},t[11]=x,t[12]=z);let B=z,V;t[13]===x?V=t[14]:(V=()=>{x&&o.getState().openDiff(s(m(x.environmentId,x.id)))},t[13]=x,t[14]=V);let H=V,U;t[15]===v.remeasure?U=t[16]:(U=()=>{let e=window.requestAnimationFrame(v.remeasure);return()=>window.cancelAnimationFrame(e)},t[15]=v.remeasure,t[16]=U);let W;t[17]!==T||t[18]!==j||t[19]!==v.remeasure?(W=[T,j,v.remeasure],t[17]=T,t[18]=j,t[19]=v.remeasure,t[20]=W):W=t[20],(0,X.useEffect)(U,W),Ee(v.ref,k?.turnId??j);let G;t[21]!==c||t[22]!==u||t[23]!==w||t[24]!==T||t[25]!==B||t[26]!==H||t[27]!==k||t[28]!==j||t[29]!==a||t[30]!==v?(G=(0,Q.jsx)(Ae,{diffRenderMode:c,diffWordWrap:u,inferredCheckpointTurnCountByTurnId:w,orderedTurnDiffSummaries:T,selectTurn:B,selectWholeConversation:H,selectedTurn:k,selectedTurnId:j,setDiffRenderMode:l,setDiffWordWrap:d,settings:a,turnStrip:v}),t[21]=c,t[22]=u,t[23]=w,t[24]=T,t[25]=B,t[26]=H,t[27]=k,t[28]=j,t[29]=a,t[30]=v,t[31]=G):G=t[31];let K=G,q;t[32]!==S||t[33]!==c||t[34]!==u||t[35]!==R||t[36]!==E||t[37]!==D||t[38]!==i?(q=(0,Q.jsx)(je,{bodyState:S,diffRenderMode:c,diffWordWrap:u,openDiffFileInEditor:R,patchViewportRef:h,renderableFiles:E,renderablePatch:D,resolvedTheme:i}),t[32]=S,t[33]=c,t[34]=u,t[35]=R,t[36]=E,t[37]=D,t[38]=i,t[39]=q):q=t[39];let J;return t[40]!==K||t[41]!==r||t[42]!==q?(J=(0,Q.jsx)(A,{mode:r,header:K,children:q}),t[40]=K,t[41]=r,t[42]=q,t[43]=J):J=t[43],J}function ke(e){console.warn(`Failed to open diff file in editor.`,e)}function Ae(e){let t=(0,$.c)(59),{diffRenderMode:n,diffWordWrap:r,inferredCheckpointTurnCountByTurnId:i,orderedTurnDiffSummaries:a,selectTurn:o,selectWholeConversation:s,selectedTurn:c,selectedTurnId:l,setDiffRenderMode:u,setDiffWordWrap:d,settings:f,turnStrip:p}=e,m,h;t[0]===p?(m=t[1],h=t[2]):(m=(0,Q.jsx)(Be,{direction:`left`,strip:p}),h=(0,Q.jsx)(Be,{direction:`right`,strip:p}),t[0]=p,t[1]=m,t[2]=h);let g=p.ref,_;t[3]!==p.canScrollLeft||t[4]!==p.canScrollRight?(_=Se({canScrollLeft:p.canScrollLeft,canScrollRight:p.canScrollRight}),t[3]=p.canScrollLeft,t[4]=p.canScrollRight,t[5]=_):_=t[5];let v=p.onWheel,y=l===null,b=l===null?`border-border bg-accent text-accent-foreground`:`border-border/70 bg-background/70 text-muted-foreground/80 hover:border-border hover:text-foreground/80`,x;t[6]===b?x=t[7]:(x=P(`rounded-md border px-2 py-1 text-left transition-colors`,b),t[6]=b,t[7]=x);let S;t[8]===Symbol.for(`react.memo_cache_sentinel`)?(S=(0,Q.jsx)(`div`,{className:`text-[10px] leading-tight font-medium`,children:`All turns`}),t[8]=S):S=t[8];let C;t[9]===x?C=t[10]:(C=(0,Q.jsx)(`div`,{className:x,children:S}),t[9]=x,t[10]=C);let w;t[11]!==s||t[12]!==C||t[13]!==y?(w=(0,Q.jsx)(`button`,{type:`button`,className:`shrink-0 rounded-md`,onClick:s,"data-turn-chip-selected":y,children:C}),t[11]=s,t[12]=C,t[13]=y,t[14]=w):w=t[14];let T;if(t[15]!==i||t[16]!==a||t[17]!==o||t[18]!==c?.turnId||t[19]!==f){let e;t[21]!==i||t[22]!==o||t[23]!==c?.turnId||t[24]!==f?(e=e=>(0,Q.jsx)(Ve,{summary:e,selected:e.turnId===c?.turnId,turnCount:e.checkpointTurnCount??i[e.turnId],timestampFormat:f.timestampFormat,onSelect:o},e.turnId),t[21]=i,t[22]=o,t[23]=c?.turnId,t[24]=f,t[25]=e):e=t[25],T=a.map(e),t[15]=i,t[16]=a,t[17]=o,t[18]=c?.turnId,t[19]=f,t[20]=T}else T=t[20];let E;t[26]!==w||t[27]!==T||t[28]!==_||t[29]!==p.onWheel||t[30]!==p.ref?(E=(0,Q.jsxs)(`div`,{ref:g,className:`turn-chip-strip flex gap-1 overflow-x-auto px-8 py-0.5`,style:_,onWheel:v,children:[w,T]}),t[26]=w,t[27]=T,t[28]=_,t[29]=p.onWheel,t[30]=p.ref,t[31]=E):E=t[31];let D;t[32]!==m||t[33]!==E||t[34]!==h?(D=(0,Q.jsxs)(`div`,{className:`relative min-w-0 flex-1 [-webkit-app-region:no-drag]`,children:[m,h,E]}),t[32]=m,t[33]=E,t[34]=h,t[35]=D):D=t[35];let O;t[36]===n?O=t[37]:(O=[n],t[36]=n,t[37]=O);let k;t[38]===u?k=t[39]:(k=e=>{let t=e[0];(t===`stacked`||t===`split`)&&u(t)},t[38]=u,t[39]=k);let A;t[40]===Symbol.for(`react.memo_cache_sentinel`)?(A=(0,Q.jsx)(R,{"aria-label":`Stacked diff view`,value:`stacked`,children:(0,Q.jsx)(se,{className:`size-3`})}),t[40]=A):A=t[40];let j;t[41]===Symbol.for(`react.memo_cache_sentinel`)?(j=(0,Q.jsx)(R,{"aria-label":`Split diff view`,value:`split`,children:(0,Q.jsx)(ie,{className:`size-3`})}),t[41]=j):j=t[41];let M;t[42]!==O||t[43]!==k?(M=(0,Q.jsxs)(F,{className:`shrink-0`,variant:`outline`,size:`xs`,value:O,onValueChange:k,children:[A,j]}),t[42]=O,t[43]=k,t[44]=M):M=t[44];let N=r?`Disable diff line wrapping`:`Enable diff line wrapping`,I=r?`Disable line wrapping`:`Enable line wrapping`,L;t[45]===d?L=t[46]:(L=e=>{d(!!e)},t[45]=d,t[46]=L);let z;t[47]===Symbol.for(`react.memo_cache_sentinel`)?(z=(0,Q.jsx)(le,{className:`size-3`}),t[47]=z):z=t[47];let B;t[48]!==r||t[49]!==N||t[50]!==I||t[51]!==L?(B=(0,Q.jsx)(R,{"aria-label":N,title:I,variant:`outline`,size:`xs`,pressed:r,onPressedChange:L,children:z}),t[48]=r,t[49]=N,t[50]=I,t[51]=L,t[52]=B):B=t[52];let V;t[53]!==M||t[54]!==B?(V=(0,Q.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1 [-webkit-app-region:no-drag]`,children:[M,B]}),t[53]=M,t[54]=B,t[55]=V):V=t[55];let H;return t[56]!==D||t[57]!==V?(H=(0,Q.jsxs)(Q.Fragment,{children:[D,V]}),t[56]=D,t[57]=V,t[58]=H):H=t[58],H}function je(e){let t=(0,$.c)(18),{bodyState:n,diffRenderMode:r,diffWordWrap:i,openDiffFileInEditor:a,patchViewportRef:o,renderableFiles:s,renderablePatch:c,resolvedTheme:l}=e;if(n.kind===`no-thread`){let e;return t[0]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,Q.jsx)(Ne,{children:`Select a thread to inspect turn diffs.`}),t[0]=e):e=t[0],e}if(n.kind===`not-git-repo`){let e;return t[1]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,Q.jsx)(Ne,{children:`Turn diffs are unavailable because this project is not a git repository.`}),t[1]=e):e=t[1],e}if(n.kind===`no-completed-turns`){let e;return t[2]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,Q.jsx)(Ne,{children:`No completed turns yet.`}),t[2]=e):e=t[2],e}let u;t[3]!==n.error||t[4]!==c?(u=n.error&&!c&&(0,Q.jsx)(`div`,{className:`px-3`,children:(0,Q.jsx)(`p`,{className:`mb-2 text-[11px] text-destructive-foreground`,children:n.error})}),t[3]=n.error,t[4]=c,t[5]=u):u=t[5];let d;t[6]!==n||t[7]!==r||t[8]!==i||t[9]!==a||t[10]!==s||t[11]!==c||t[12]!==l?(d=c?c.kind===`files`?(0,Q.jsx)(K,{className:`diff-render-surface h-full min-h-0 overflow-auto px-2 pb-2`,config:{overscrollSize:600,intersectionObserverMargin:1200},children:s.map(e=>{let t=Y(e),n=`${fe(e)}:${l}`;return(0,Q.jsx)(`div`,{"data-diff-file-path":t,className:`diff-render-file mb-2 rounded-md first:mt-2 last:mb-0`,onClickCapture:e=>{(e.nativeEvent.composedPath?.()??[]).some(Me)&&a(t)},children:(0,Q.jsx)(ge,{fileDiff:e,options:{diffStyle:r===`split`?`split`:`unified`,lineDiffType:`none`,overflow:i?`wrap`:`scroll`,theme:T(l),themeType:l,unsafeCSS:De}})},n)})}):(0,Q.jsx)(`div`,{className:`h-full overflow-auto p-2`,children:(0,Q.jsxs)(`div`,{className:`space-y-2`,children:[(0,Q.jsx)(`p`,{className:`text-[11px] text-muted-foreground/75`,children:c.reason}),(0,Q.jsx)(`pre`,{className:P(`max-h-[72vh] rounded-md border border-border/70 bg-background/70 p-3 font-mono text-[11px] leading-relaxed text-muted-foreground/90`,i?`overflow-auto whitespace-pre-wrap wrap-break-word`:`overflow-auto`),children:c.text})]})}):(0,Q.jsx)(Re,{bodyState:n}),t[6]=n,t[7]=r,t[8]=i,t[9]=a,t[10]=s,t[11]=c,t[12]=l,t[13]=d):d=t[13];let f;return t[14]!==o||t[15]!==u||t[16]!==d?(f=(0,Q.jsx)(Q.Fragment,{children:(0,Q.jsxs)(`div`,{ref:o,className:`diff-panel-viewport min-h-0 min-w-0 flex-1 overflow-hidden`,children:[u,d]})}),t[14]=o,t[15]=u,t[16]=d,t[17]=f):f=t[17],f}function Me(e){return e instanceof Element&&e.hasAttribute(`data-title`)}function Ne(e){let t=(0,$.c)(2),{children:n}=e,r;return t[0]===n?r=t[1]:(r=(0,Q.jsx)(`div`,{className:`flex flex-1 items-center justify-center px-5 text-center text-xs text-muted-foreground/70`,children:n}),t[0]=n,t[1]=r),r}function Pe(){let e=(0,$.c)(19),t;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t={strict:!1,select:Ie},e[0]=t):t=e[0];let n=a(t),r;e[1]===Symbol.for(`react.memo_cache_sentinel`)?(r={strict:!1,select:Fe},e[1]=r):r=e[1];let i=B(r),o=i.rightPanel===`diff`,s=n?.threadId??null,c,l;e[2]===n?l=e[3]:(l=C(n),e[2]=n,e[3]=l),c=l;let u=E(c),f=He(u),p=u?.worktreePath,m=f?.cwd,h;e[4]!==p||e[5]!==m?(h=I({threadWorktreePath:p,projectCwd:m}),e[4]=p,e[5]=m,e[6]=h):h=e[6];let g=h,_=u?.environmentId??null,v=g??null,y;e[7]!==_||e[8]!==v?(y={environmentId:_,cwd:v},e[7]=_,e[8]=v,e[9]=y):y=e[9];let b=d(y),x;e[10]===b.data?x=e[11]:(x=z(b.data),e[10]=b.data,e[11]=x);let S=x,w;return e[12]!==g||e[13]!==u||e[14]!==s||e[15]!==o||e[16]!==i||e[17]!==S?(w={activeThread:u,activeThreadId:s,activeCwd:g,isGitRepo:S,diffSearch:i,diffOpen:o},e[12]=g,e[13]=u,e[14]=s,e[15]=o,e[16]=i,e[17]=S,e[18]=w):w=e[18],w}function Fe(e){return G(e)}function Ie(e){return h(e)}function Le(e){let{activeThread:t,activeThreadId:n,activeCwd:r,isGitRepo:i,diffSearch:a,diffOpen:o}=Pe(),{turnDiffSummaries:s,inferredCheckpointTurnCountByTurnId:c}=H(t),u=a.diffTurnId??null,d=u===null?null:a.diffFilePath??null,{activeCheckpointRange:f,conversationCacheScope:p,orderedTurnDiffSummaries:m,selectedTurn:h}=(0,X.useMemo)(()=>te({summaries:s,inferredCheckpointTurnCountByTurnId:c,selectedTurnId:u}),[c,u,s]),g=l(xe(we({environmentId:t?.environmentId,threadId:n,range:f,selectedTurnId:h?.turnId,conversationCacheScope:p,enabled:i}))),_=g.isLoading,v=Ce(g.error),y=g.data?.diff,b=typeof y==`string`&&y.trim().length===0,{emptyDiffMessage:x}=(0,X.useMemo)(()=>ae(h),[h]),S=(0,X.useMemo)(()=>ce(y,`diff-panel:${e}`),[e,y]),C=(0,X.useMemo)(()=>Ue(S),[S]);return{activeCwd:r,activeThread:t,bodyState:ue({hasActiveThread:!!t,isGitRepo:i,turnSummaryCount:m.length,checkpointDiffError:v,hasRenderablePatch:!!S,isLoadingCheckpointDiff:_,hasNoNetChanges:b,emptyDiffMessage:x}),diffOpen:o,inferredCheckpointTurnCountByTurnId:c,orderedTurnDiffSummaries:m,renderableFiles:C,renderablePatch:S,selectedFilePath:d,selectedTurn:h,selectedTurnId:u}}function Re(e){let t=(0,$.c)(4),{bodyState:n}=e;if(n.kind===`loading`){let e;return t[0]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,Q.jsx)(D,{label:`Loading checkpoint diff...`}),t[0]=e):e=t[0],e}let r;t[1]===Symbol.for(`react.memo_cache_sentinel`)?(r=(0,Q.jsx)(L,{className:`size-7 text-muted-foreground/25`}),t[1]=r):r=t[1];let i=n.kind===`empty`?n.message:`No diff is available for this range.`,a;return t[2]===i?a=t[3]:(a=(0,Q.jsxs)(`div`,{className:`flex h-full flex-col items-center justify-center gap-2 px-5 py-2 text-center`,children:[r,(0,Q.jsx)(`p`,{className:`text-xs text-muted-foreground/70`,children:i})]}),t[2]=i,t[3]=a),a}var ze=180;function Be(e){let t=(0,$.c)(14),{direction:n,strip:r}=e,i=n===`left`,a=i?r.canScrollLeft:r.canScrollRight,o=i?U:u,s=i?`left-0`:`right-0`,c=a?`border-border/70 hover:border-border hover:text-foreground`:`cursor-not-allowed border-border/40 text-muted-foreground/40`,l;t[0]!==s||t[1]!==c?(l=P(`absolute top-1/2 z-20 inline-flex size-6 -translate-y-1/2 items-center justify-center rounded-md border bg-background/90 text-muted-foreground transition-colors`,s,c),t[0]=s,t[1]=c,t[2]=l):l=t[2];let d;t[3]!==i||t[4]!==r?(d=()=>r.scrollBy(i?-180:ze),t[3]=i,t[4]=r,t[5]=d):d=t[5];let f=!a,p=`Scroll turn list ${n}`,m;t[6]===o?m=t[7]:(m=(0,Q.jsx)(o,{className:`size-3.5`}),t[6]=o,t[7]=m);let h;return t[8]!==l||t[9]!==d||t[10]!==f||t[11]!==p||t[12]!==m?(h=(0,Q.jsx)(`button`,{type:`button`,className:l,onClick:d,disabled:f,"aria-label":p,children:m}),t[8]=l,t[9]=d,t[10]=f,t[11]=p,t[12]=m,t[13]=h):h=t[13],h}function Ve(e){let t=(0,$.c)(23),{summary:n,selected:r,turnCount:i,timestampFormat:a,onSelect:o}=e,s;t[0]!==o||t[1]!==n.turnId?(s=()=>o(n.turnId),t[0]=o,t[1]=n.turnId,t[2]=s):s=t[2];let c=n.turnId,l=r?`border-border bg-accent text-accent-foreground`:`border-border/70 bg-background/70 text-muted-foreground/80 hover:border-border hover:text-foreground/80`,u;t[3]===l?u=t[4]:(u=P(`rounded-md border px-2 py-1 text-left transition-colors`,l),t[3]=l,t[4]=u);let d=i??`?`,f;t[5]===d?f=t[6]:(f=(0,Q.jsxs)(`span`,{className:`text-[10px] leading-tight font-medium`,children:[`Turn `,d]}),t[5]=d,t[6]=f);let p;t[7]!==n.completedAt||t[8]!==a?(p=y(n.completedAt,a),t[7]=n.completedAt,t[8]=a,t[9]=p):p=t[9];let m;t[10]===p?m=t[11]:(m=(0,Q.jsx)(`span`,{className:`text-[9px] leading-tight opacity-70`,children:p}),t[10]=p,t[11]=m);let h;t[12]!==f||t[13]!==m?(h=(0,Q.jsxs)(`div`,{className:`flex items-center gap-1`,children:[f,m]}),t[12]=f,t[13]=m,t[14]=h):h=t[14];let g;t[15]!==u||t[16]!==h?(g=(0,Q.jsx)(`div`,{className:u,children:h}),t[15]=u,t[16]=h,t[17]=g):g=t[17];let _;return t[18]!==r||t[19]!==n.turnId||t[20]!==s||t[21]!==g?(_=(0,Q.jsx)(`button`,{type:`button`,className:`shrink-0 rounded-md`,onClick:s,title:c,"data-turn-chip-selected":r,children:g}),t[18]=r,t[19]=n.turnId,t[20]=s,t[21]=g,t[22]=_):_=t[22],_}function He(e){let t=(0,$.c)(3),n=e?.environmentId,r=e?.projectId,i;return t[0]!==n||t[1]!==r?(i=e=>n&&r?S(e,{environmentId:n,projectId:r}):void 0,t[0]=n,t[1]=r,t[2]=i):i=t[2],E(i)}function Ue(e){return!e||e.kind!==`files`?[]:e.files.toSorted((e,t)=>Y(e).localeCompare(Y(t),void 0,{numeric:!0,sensitivity:`base`}))}export{Oe as default};
|
|
64
|
-
//# sourceMappingURL=DiffPanel-
|
|
64
|
+
//# sourceMappingURL=DiffPanel-C3dfPMJX.js.map
|