@cmmd-center/forge 0.13.68 → 0.13.70

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 CHANGED
@@ -66275,7 +66275,7 @@ function normalizeNumberish(value) {
66275
66275
  }
66276
66276
  //#endregion
66277
66277
  //#region package.json
66278
- var version$1 = "0.13.68";
66278
+ var version$1 = "0.13.70";
66279
66279
  //#endregion
66280
66280
  //#region src/sentry.ts
66281
66281
  const SERVER_APP_NAME = "forge-server";
@@ -87868,6 +87868,38 @@ function readRuntimeBrokerAuthority(input) {
87868
87868
  if (authority.credentialEpoch !== input.credentialEpoch) return null;
87869
87869
  return authority.token;
87870
87870
  }
87871
+ /**
87872
+ * Why a scoped lookup would miss, without mutating the map.
87873
+ *
87874
+ * "no live broker authority for this session" used to be one flat reason
87875
+ * whether nothing had ever been recorded, an entry had just expired, or an
87876
+ * entry existed for the wrong runtime, machine, or epoch. This lets a caller
87877
+ * name the distinction to an operator reading a production refusal.
87878
+ *
87879
+ * Read-only by design: call this BEFORE readRuntimeBrokerAuthority for the
87880
+ * same input. That read evicts an expired entry as it scans, so calling this
87881
+ * afterward would find the entry already gone and report "absent" for what
87882
+ * was really "expired".
87883
+ */
87884
+ function describeRuntimeBrokerAuthorityMiss(input) {
87885
+ const nowSeconds = input.nowSeconds ?? Math.floor(Date.now() / 1e3);
87886
+ const scopedAuthorities = authorities.get(input.sessionId)?.get(input.requiredScope);
87887
+ if (!scopedAuthorities || scopedAuthorities.size === 0) return "absent";
87888
+ let selected = null;
87889
+ let sawExpired = false;
87890
+ for (const authority of scopedAuthorities.values()) {
87891
+ if (authority.expiresAtSeconds <= nowSeconds) {
87892
+ sawExpired = true;
87893
+ continue;
87894
+ }
87895
+ if (!selected || authority.expiresAtSeconds >= selected.expiresAtSeconds) selected = authority;
87896
+ }
87897
+ if (!selected) return sawExpired ? "expired" : "absent";
87898
+ if (selected.runtimeId !== input.runtimeId) return "runtime mismatch";
87899
+ if (selected.machineId !== input.machineId) return "machine mismatch";
87900
+ if (selected.credentialEpoch !== input.credentialEpoch) return "epoch mismatch";
87901
+ return "absent";
87902
+ }
87871
87903
  function readRuntimeBrokerAuthorityForRuntime(input) {
87872
87904
  for (const sessionId of authorities.keys()) {
87873
87905
  const token = readRuntimeBrokerAuthority({
@@ -152394,6 +152426,30 @@ function runtimeAuthoritySessionId(input) {
152394
152426
  if (input.authSessionId) return input.authSessionId;
152395
152427
  return input.threadId ? readThreadSessionId(input.threadId) : null;
152396
152428
  }
152429
+ const BROKER_AUTHORITY_MISS_PHRASE = {
152430
+ absent: "nothing has ever been recorded for this session and scope",
152431
+ expired: "the recorded authority already passed its expiry",
152432
+ "runtime mismatch": "the recorded authority names a different runtime",
152433
+ "machine mismatch": "the recorded authority names a different machine",
152434
+ "epoch mismatch": "the recorded authority names a different credential epoch"
152435
+ };
152436
+ /**
152437
+ * The base "no live broker authority" reason, enriched with what the lookup
152438
+ * compared and why it missed when that detail is available.
152439
+ *
152440
+ * A production refusal used to say only "no live broker authority for this
152441
+ * session", true whether nothing had ever been recorded, an entry had just
152442
+ * expired, or an entry existed for the wrong runtime, machine, or epoch. An
152443
+ * operator reading the log had no way to tell those apart (CMMD-Center/forge#3547).
152444
+ * `missDetail` is optional so a caller that has not resolved it (or a test
152445
+ * pinning the plain-outcome mapping) still gets the original, unqualified
152446
+ * sentence.
152447
+ */
152448
+ function describeNoLiveBrokerAuthorityReason(sessionId, missDetail) {
152449
+ const base = "no live broker authority for this session";
152450
+ if (!missDetail) return base;
152451
+ return `${base} (looked up session ${sessionId}, scope ${missDetail.requiredScope}, runtime ${missDetail.runtimeId}, machine ${missDetail.machineId}, epoch ${missDetail.credentialEpoch}: ${BROKER_AUTHORITY_MISS_PHRASE[missDetail.missReason]})`;
152452
+ }
152397
152453
  /**
152398
152454
  * Pure mapping from the three preconditions to an outcome.
152399
152455
  *
@@ -152419,7 +152475,7 @@ function resolveBrokerTicketOutcome(input) {
152419
152475
  token: input.brokerAuthority
152420
152476
  } : {
152421
152477
  kind: "unavailable",
152422
- reason: "no live broker authority for this session"
152478
+ reason: describeNoLiveBrokerAuthorityReason(input.sessionId, input.missDetail ?? null)
152423
152479
  };
152424
152480
  }
152425
152481
  /**
@@ -152451,17 +152507,43 @@ function runtimeProviderBrokerToken(input) {
152451
152507
  brokerAuthority: null
152452
152508
  });
152453
152509
  const sessionId = runtimeAuthoritySessionId(input);
152510
+ if (!sessionId) return resolveBrokerTicketOutcome({
152511
+ identityMode: "exact",
152512
+ legacyGrantToken: null,
152513
+ sessionId: null,
152514
+ brokerAuthority: null
152515
+ });
152516
+ const runtimeId = process.env.FORGE_CMMD_RUNTIME_ID;
152517
+ const requiredScope = "provider";
152518
+ const nowSeconds = Math.floor(Date.now() / 1e3);
152519
+ const missReason = describeRuntimeBrokerAuthorityMiss({
152520
+ sessionId,
152521
+ runtimeId,
152522
+ machineId: identity.machineId,
152523
+ credentialEpoch: identity.credentialEpoch,
152524
+ requiredScope,
152525
+ nowSeconds
152526
+ });
152527
+ const brokerAuthority = readRuntimeBrokerAuthority({
152528
+ sessionId,
152529
+ runtimeId,
152530
+ machineId: identity.machineId,
152531
+ credentialEpoch: identity.credentialEpoch,
152532
+ requiredScope,
152533
+ nowSeconds
152534
+ });
152454
152535
  return resolveBrokerTicketOutcome({
152455
152536
  identityMode: "exact",
152456
152537
  legacyGrantToken: null,
152457
152538
  sessionId,
152458
- brokerAuthority: sessionId ? readRuntimeBrokerAuthority({
152459
- sessionId,
152460
- runtimeId: process.env.FORGE_CMMD_RUNTIME_ID,
152539
+ brokerAuthority,
152540
+ missDetail: brokerAuthority ? null : {
152541
+ requiredScope,
152542
+ runtimeId,
152461
152543
  machineId: identity.machineId,
152462
152544
  credentialEpoch: identity.credentialEpoch,
152463
- requiredScope: "provider"
152464
- }) : null
152545
+ missReason
152546
+ }
152465
152547
  });
152466
152548
  }
152467
152549
  async function fetchRuntimeProviderGrant(input) {
@@ -298409,7 +298491,7 @@ function resolveBuildCommitFromEnv(env) {
298409
298491
  * environment descriptor down instead of reporting an honest "unknown".
298410
298492
  */
298411
298493
  function readBakedBuildCommit() {
298412
- return "bd02196ba68ab5100573edfc3d4642930c103b2d";
298494
+ return "1f99504d8e9ac5a370ea5685016f9bda4160da76";
298413
298495
  }
298414
298496
  async function resolveServerBuildCommit(input) {
298415
298497
  if (isFullCommitSha(input.baked)) return input.baked;
package/dist/bin.mjs CHANGED
@@ -23,7 +23,7 @@ import { createCipheriv, createDecipheriv, createHash, createHmac, createPublicK
23
23
  import * as FS$1 from "node:fs";
24
24
  import fs, { accessSync, chmodSync, constants, createReadStream, existsSync, mkdirSync, mkdtempSync, promises, readFile, readFileSync, readdir, readdirSync, realpathSync, rmSync, statSync, unlinkSync, writeFileSync } from "node:fs";
25
25
  import * as NodeOS from "node:os";
26
- import os, { homedir, networkInterfaces, tmpdir } from "node:os";
26
+ import $U, { homedir, networkInterfaces, tmpdir } from "node:os";
27
27
  import * as Path$1 from "node:path";
28
28
  import path, { basename, delimiter, dirname, extname, isAbsolute, join, posix, relative, resolve, sep } from "node:path";
29
29
  import { pathToFileURL } from "node:url";
@@ -50591,7 +50591,7 @@ function _supportsColor(haveStream, { streamIsTTY, sniffFlags = true } = {}) {
50591
50591
  const min = forceColor || 0;
50592
50592
  if (env.TERM === "dumb") return min;
50593
50593
  if (process$1.platform === "win32") {
50594
- const osRelease = os.release().split(".");
50594
+ const osRelease = $U.release().split(".");
50595
50595
  if (Number(osRelease[0]) >= 10 && Number(osRelease[2]) >= 10586) return Number(osRelease[2]) >= 14931 ? 3 : 2;
50596
50596
  return 1;
50597
50597
  }
@@ -53034,7 +53034,7 @@ var require_ProcessDetector = /* @__PURE__ */ __commonJSMin(((exports) => {
53034
53034
  exports.processDetector = void 0;
53035
53035
  const api_1 = (init_esm$1(), __toCommonJS(esm_exports$1));
53036
53036
  const semconv_1 = require_semconv$1();
53037
- const os$4 = __require("os");
53037
+ const os$3 = __require("os");
53038
53038
  /**
53039
53039
  * ProcessDetector will be used to detect the resources related current process running
53040
53040
  * and being instrumented from the NodeJS Process module.
@@ -53056,7 +53056,7 @@ var require_ProcessDetector = /* @__PURE__ */ __commonJSMin(((exports) => {
53056
53056
  };
53057
53057
  if (process.argv.length > 1) attributes[semconv_1.ATTR_PROCESS_COMMAND] = process.argv[1];
53058
53058
  try {
53059
- const userInfo = os$4.userInfo();
53059
+ const userInfo = os$3.userInfo();
53060
53060
  attributes[semconv_1.ATTR_PROCESS_OWNER] = userInfo.username;
53061
53061
  } catch (e) {
53062
53062
  api_1.diag.debug(`error obtaining process owner: ${e}`);
@@ -65979,7 +65979,7 @@ function normalizeNumberish(value) {
65979
65979
  }
65980
65980
  //#endregion
65981
65981
  //#region package.json
65982
- var version$1 = "0.13.68";
65982
+ var version$1 = "0.13.70";
65983
65983
  //#endregion
65984
65984
  //#region src/sentry.ts
65985
65985
  const SERVER_APP_NAME = "forge-server";
@@ -75862,7 +75862,7 @@ var require_node_gyp_build = /* @__PURE__ */ __commonJSMin(((exports, module) =>
75862
75862
  var fs$6 = __require("fs");
75863
75863
  var path$5 = __require("path");
75864
75864
  var url$1 = __require("url");
75865
- var os$3 = __require("os");
75865
+ var os$2 = __require("os");
75866
75866
  var runtimeRequire = typeof __webpack_require__ === "function" ? __non_webpack_require__ : __require;
75867
75867
  var vars = process.config && process.config.variables || {};
75868
75868
  var prebuildsOnly = !!process.env.PREBUILDS_ONLY;
@@ -75870,8 +75870,8 @@ var require_node_gyp_build = /* @__PURE__ */ __commonJSMin(((exports, module) =>
75870
75870
  var abi = versions.modules;
75871
75871
  if (versions.deno || process.isBun) abi = "unsupported";
75872
75872
  var runtime = isElectron() ? "electron" : isNwjs() ? "node-webkit" : "node";
75873
- var arch = process.env.npm_config_arch || os$3.arch();
75874
- var platform = process.env.npm_config_platform || os$3.platform();
75873
+ var arch = process.env.npm_config_arch || os$2.arch();
75874
+ var platform = process.env.npm_config_platform || os$2.platform();
75875
75875
  var libc = process.env.LIBC || (isMusl(platform) ? "musl" : "glibc");
75876
75876
  var armv = process.env.ARM_VERSION || (arch === "arm64" ? "8" : vars.arm_version) || "";
75877
75877
  var uv = (versions.uv || "").split(".")[0];
@@ -87512,6 +87512,38 @@ function readRuntimeBrokerAuthority(input) {
87512
87512
  if (authority.credentialEpoch !== input.credentialEpoch) return null;
87513
87513
  return authority.token;
87514
87514
  }
87515
+ /**
87516
+ * Why a scoped lookup would miss, without mutating the map.
87517
+ *
87518
+ * "no live broker authority for this session" used to be one flat reason
87519
+ * whether nothing had ever been recorded, an entry had just expired, or an
87520
+ * entry existed for the wrong runtime, machine, or epoch. This lets a caller
87521
+ * name the distinction to an operator reading a production refusal.
87522
+ *
87523
+ * Read-only by design: call this BEFORE readRuntimeBrokerAuthority for the
87524
+ * same input. That read evicts an expired entry as it scans, so calling this
87525
+ * afterward would find the entry already gone and report "absent" for what
87526
+ * was really "expired".
87527
+ */
87528
+ function describeRuntimeBrokerAuthorityMiss(input) {
87529
+ const nowSeconds = input.nowSeconds ?? Math.floor(Date.now() / 1e3);
87530
+ const scopedAuthorities = authorities.get(input.sessionId)?.get(input.requiredScope);
87531
+ if (!scopedAuthorities || scopedAuthorities.size === 0) return "absent";
87532
+ let selected = null;
87533
+ let sawExpired = false;
87534
+ for (const authority of scopedAuthorities.values()) {
87535
+ if (authority.expiresAtSeconds <= nowSeconds) {
87536
+ sawExpired = true;
87537
+ continue;
87538
+ }
87539
+ if (!selected || authority.expiresAtSeconds >= selected.expiresAtSeconds) selected = authority;
87540
+ }
87541
+ if (!selected) return sawExpired ? "expired" : "absent";
87542
+ if (selected.runtimeId !== input.runtimeId) return "runtime mismatch";
87543
+ if (selected.machineId !== input.machineId) return "machine mismatch";
87544
+ if (selected.credentialEpoch !== input.credentialEpoch) return "epoch mismatch";
87545
+ return "absent";
87546
+ }
87515
87547
  function readRuntimeBrokerAuthorityForRuntime(input) {
87516
87548
  for (const sessionId of authorities.keys()) {
87517
87549
  const token = readRuntimeBrokerAuthority({
@@ -93680,7 +93712,7 @@ const launchDetached = (launch) => gen(function* () {
93680
93712
  });
93681
93713
  const OpenLive = effect(Open, gen(function* () {
93682
93714
  const open = yield* tryPromise({
93683
- try: () => import("./open-yHTUkd2Y.mjs"),
93715
+ try: () => import("./open-2-reBrpv.mjs"),
93684
93716
  catch: (cause) => new OpenError$1({
93685
93717
  message: "failed to load browser opener",
93686
93718
  cause
@@ -151967,6 +151999,30 @@ function runtimeAuthoritySessionId(input) {
151967
151999
  if (input.authSessionId) return input.authSessionId;
151968
152000
  return input.threadId ? readThreadSessionId(input.threadId) : null;
151969
152001
  }
152002
+ const BROKER_AUTHORITY_MISS_PHRASE = {
152003
+ absent: "nothing has ever been recorded for this session and scope",
152004
+ expired: "the recorded authority already passed its expiry",
152005
+ "runtime mismatch": "the recorded authority names a different runtime",
152006
+ "machine mismatch": "the recorded authority names a different machine",
152007
+ "epoch mismatch": "the recorded authority names a different credential epoch"
152008
+ };
152009
+ /**
152010
+ * The base "no live broker authority" reason, enriched with what the lookup
152011
+ * compared and why it missed when that detail is available.
152012
+ *
152013
+ * A production refusal used to say only "no live broker authority for this
152014
+ * session", true whether nothing had ever been recorded, an entry had just
152015
+ * expired, or an entry existed for the wrong runtime, machine, or epoch. An
152016
+ * operator reading the log had no way to tell those apart (CMMD-Center/forge#3547).
152017
+ * `missDetail` is optional so a caller that has not resolved it (or a test
152018
+ * pinning the plain-outcome mapping) still gets the original, unqualified
152019
+ * sentence.
152020
+ */
152021
+ function describeNoLiveBrokerAuthorityReason(sessionId, missDetail) {
152022
+ const base = "no live broker authority for this session";
152023
+ if (!missDetail) return base;
152024
+ return `${base} (looked up session ${sessionId}, scope ${missDetail.requiredScope}, runtime ${missDetail.runtimeId}, machine ${missDetail.machineId}, epoch ${missDetail.credentialEpoch}: ${BROKER_AUTHORITY_MISS_PHRASE[missDetail.missReason]})`;
152025
+ }
151970
152026
  /**
151971
152027
  * Pure mapping from the three preconditions to an outcome.
151972
152028
  *
@@ -151992,7 +152048,7 @@ function resolveBrokerTicketOutcome(input) {
151992
152048
  token: input.brokerAuthority
151993
152049
  } : {
151994
152050
  kind: "unavailable",
151995
- reason: "no live broker authority for this session"
152051
+ reason: describeNoLiveBrokerAuthorityReason(input.sessionId, input.missDetail ?? null)
151996
152052
  };
151997
152053
  }
151998
152054
  /**
@@ -152024,17 +152080,43 @@ function runtimeProviderBrokerToken(input) {
152024
152080
  brokerAuthority: null
152025
152081
  });
152026
152082
  const sessionId = runtimeAuthoritySessionId(input);
152083
+ if (!sessionId) return resolveBrokerTicketOutcome({
152084
+ identityMode: "exact",
152085
+ legacyGrantToken: null,
152086
+ sessionId: null,
152087
+ brokerAuthority: null
152088
+ });
152089
+ const runtimeId = process.env.FORGE_CMMD_RUNTIME_ID;
152090
+ const requiredScope = "provider";
152091
+ const nowSeconds = Math.floor(Date.now() / 1e3);
152092
+ const missReason = describeRuntimeBrokerAuthorityMiss({
152093
+ sessionId,
152094
+ runtimeId,
152095
+ machineId: identity.machineId,
152096
+ credentialEpoch: identity.credentialEpoch,
152097
+ requiredScope,
152098
+ nowSeconds
152099
+ });
152100
+ const brokerAuthority = readRuntimeBrokerAuthority({
152101
+ sessionId,
152102
+ runtimeId,
152103
+ machineId: identity.machineId,
152104
+ credentialEpoch: identity.credentialEpoch,
152105
+ requiredScope,
152106
+ nowSeconds
152107
+ });
152027
152108
  return resolveBrokerTicketOutcome({
152028
152109
  identityMode: "exact",
152029
152110
  legacyGrantToken: null,
152030
152111
  sessionId,
152031
- brokerAuthority: sessionId ? readRuntimeBrokerAuthority({
152032
- sessionId,
152033
- runtimeId: process.env.FORGE_CMMD_RUNTIME_ID,
152112
+ brokerAuthority,
152113
+ missDetail: brokerAuthority ? null : {
152114
+ requiredScope,
152115
+ runtimeId,
152034
152116
  machineId: identity.machineId,
152035
152117
  credentialEpoch: identity.credentialEpoch,
152036
- requiredScope: "provider"
152037
- }) : null
152118
+ missReason
152119
+ }
152038
152120
  });
152039
152121
  }
152040
152122
  async function fetchRuntimeProviderGrant(input) {
@@ -191569,7 +191651,7 @@ var Vce = {
191569
191651
  function Ve() {
191570
191652
  return Vce;
191571
191653
  }
191572
- var Us = os.homedir(), lk = os.tmpdir(), { env: Vc } = process$1, Yce = (e) => {
191654
+ var Us = $U.homedir(), lk = $U.tmpdir(), { env: Vc } = process$1, Yce = (e) => {
191573
191655
  let t = path.join(Us, "Library");
191574
191656
  return {
191575
191657
  data: path.join(t, "Application Support", e),
@@ -201769,12 +201851,12 @@ function qZ(e, t) {
201769
201851
  }
201770
201852
  return n;
201771
201853
  }
201772
- var os$2 = "https://code.claude.com/docs/en", kKe = [
201854
+ var os$1 = "https://code.claude.com/docs/en", kKe = [
201773
201855
  {
201774
201856
  matches: (e) => e.path === "permissions.defaultMode" && e.code === "invalid_value",
201775
201857
  tip: {
201776
201858
  suggestion: "Valid modes: \"acceptEdits\" (ask before file changes), \"plan\" (analysis only), \"bypassPermissions\" (auto-accept all), or \"default\" (standard behavior)",
201777
- docLink: `${os$2}/iam#permission-modes`
201859
+ docLink: `${os$1}/iam#permission-modes`
201778
201860
  }
201779
201861
  },
201780
201862
  {
@@ -201789,7 +201871,7 @@ var os$2 = "https://code.claude.com/docs/en", kKe = [
201789
201871
  matches: (e) => e.path.startsWith("env.") && e.code === "invalid_type",
201790
201872
  tip: {
201791
201873
  suggestion: "Environment variables must be strings. Wrap numbers and booleans in quotes. Example: \"DEBUG\": \"true\", \"PORT\": \"3000\"",
201792
- docLink: `${os$2}/settings#environment-variables`
201874
+ docLink: `${os$1}/settings#environment-variables`
201793
201875
  }
201794
201876
  },
201795
201877
  {
@@ -201800,14 +201882,14 @@ var os$2 = "https://code.claude.com/docs/en", kKe = [
201800
201882
  matches: (e) => e.path.startsWith("hooks.") && e.code === "invalid_key",
201801
201883
  tip: {
201802
201884
  suggestion: "Not a recognized hook event. Common events: PreToolUse, PostToolUse, UserPromptSubmit, SessionStart, SessionEnd, Stop. Check spelling and capitalization.",
201803
- docLink: `${os$2}/hooks`
201885
+ docLink: `${os$1}/hooks`
201804
201886
  }
201805
201887
  },
201806
201888
  {
201807
201889
  matches: (e) => /\.hooks\.\d+\.command$/.test(e.path) && e.code === "invalid_type" && e.received === "undefined",
201808
201890
  tip: {
201809
201891
  suggestion: "Command hooks require `command`. For exec form (no shell), set `command` to the executable and `args` to its arguments: {\"type\": \"command\", \"command\": \"echo\", \"args\": [\"hi\"]}. For shell form, set `command` to the full shell string: {\"type\": \"command\", \"command\": \"echo hi\"}.",
201810
- docLink: `${os$2}/hooks#exec-form-and-shell-form`
201892
+ docLink: `${os$1}/hooks#exec-form-and-shell-form`
201811
201893
  }
201812
201894
  },
201813
201895
  {
@@ -201822,7 +201904,7 @@ var os$2 = "https://code.claude.com/docs/en", kKe = [
201822
201904
  matches: (e) => e.code === "unrecognized_keys",
201823
201905
  tip: {
201824
201906
  suggestion: "Check for typos or refer to the documentation for valid fields",
201825
- docLink: `${os$2}/settings`
201907
+ docLink: `${os$1}/settings`
201826
201908
  }
201827
201909
  },
201828
201910
  {
@@ -201837,13 +201919,13 @@ var os$2 = "https://code.claude.com/docs/en", kKe = [
201837
201919
  matches: (e) => e.path === "permissions.additionalDirectories" && e.code === "invalid_type",
201838
201920
  tip: {
201839
201921
  suggestion: "Must be an array of directory paths. Example: [\"~/projects\", \"/tmp/workspace\"]. You can also use --add-dir flag or /add-dir command",
201840
- docLink: `${os$2}/iam#working-directories`
201922
+ docLink: `${os$1}/iam#working-directories`
201841
201923
  }
201842
201924
  }
201843
201925
  ], AKe = {
201844
- permissions: `${os$2}/iam#configuring-permissions`,
201845
- env: `${os$2}/settings#environment-variables`,
201846
- hooks: `${os$2}/hooks`
201926
+ permissions: `${os$1}/iam#configuring-permissions`,
201927
+ env: `${os$1}/settings#environment-variables`,
201928
+ hooks: `${os$1}/hooks`
201847
201929
  };
201848
201930
  function GZ(e) {
201849
201931
  let t = kKe.find((r) => r.matches(e));
@@ -269795,7 +269877,7 @@ var import_multicast_dns = /* @__PURE__ */ __toESM((/* @__PURE__ */ __commonJSMi
269795
269877
  var dgram = __require("dgram");
269796
269878
  var thunky = require_thunky();
269797
269879
  var events = __require("events");
269798
- var os$1 = __require("os");
269880
+ var os = __require("os");
269799
269881
  var noop = function() {};
269800
269882
  module.exports = function(opts) {
269801
269883
  if (!opts) opts = {};
@@ -269926,14 +270008,14 @@ var import_multicast_dns = /* @__PURE__ */ __toESM((/* @__PURE__ */ __commonJSMi
269926
270008
  return that;
269927
270009
  };
269928
270010
  function defaultInterface() {
269929
- var networks = os$1.networkInterfaces();
270011
+ var networks = os.networkInterfaces();
269930
270012
  var names = Object.keys(networks);
269931
270013
  for (var i = 0; i < names.length; i++) {
269932
270014
  var net = networks[names[i]];
269933
270015
  for (var j = 0; j < net.length; j++) {
269934
270016
  var iface = net[j];
269935
270017
  if (isIPv4(iface.family) && !iface.internal) {
269936
- if (os$1.platform() === "darwin" && names[i] === "en0") return iface.address;
270018
+ if (os.platform() === "darwin" && names[i] === "en0") return iface.address;
269937
270019
  return "0.0.0.0";
269938
270020
  }
269939
270021
  }
@@ -269941,7 +270023,7 @@ var import_multicast_dns = /* @__PURE__ */ __toESM((/* @__PURE__ */ __commonJSMi
269941
270023
  return "127.0.0.1";
269942
270024
  }
269943
270025
  function allInterfaces() {
269944
- var networks = os$1.networkInterfaces();
270026
+ var networks = os.networkInterfaces();
269945
270027
  var names = Object.keys(networks);
269946
270028
  var res = [];
269947
270029
  for (var i = 0; i < names.length; i++) {
@@ -297854,7 +297936,7 @@ function resolveBuildCommitFromEnv(env) {
297854
297936
  * environment descriptor down instead of reporting an honest "unknown".
297855
297937
  */
297856
297938
  function readBakedBuildCommit() {
297857
- return "bd02196ba68ab5100573edfc3d4642930c103b2d";
297939
+ return "1f99504d8e9ac5a370ea5685016f9bda4160da76";
297858
297940
  }
297859
297941
  async function resolveServerBuildCommit(input) {
297860
297942
  if (isFullCommitSha(input.baked)) return input.baked;
@@ -322452,7 +322534,7 @@ const connectLoginCommand = make$34("login", {
322452
322534
  })).json();
322453
322535
  },
322454
322536
  openBrowser: async (url) => {
322455
- const open = (await import("./open-yHTUkd2Y.mjs")).default;
322537
+ const open = (await import("./open-2-reBrpv.mjs")).default;
322456
322538
  await open(url);
322457
322539
  return true;
322458
322540
  },
@@ -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-BwQnMXdl.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-Zx0OYb3Y.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-BC9m-cA_.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=`
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-BBd3OHCC.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-B5hUOqvZ.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-CtEl6NVr.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-033mtsKj.js.map
64
+ //# sourceMappingURL=DiffPanel-DILjIwCG.js.map