@cmmd-center/forge 0.13.108 → 0.13.110

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.
Files changed (24) hide show
  1. package/dist/bin.cjs +62 -8
  2. package/dist/bin.mjs +86 -32
  3. package/dist/client/assets/CanvasPanel-Cg4D-ISF.js +441 -0
  4. package/dist/client/assets/{CompositeItem-DYaCFJOM.js → CompositeItem-CYjaZm9j.js} +2 -2
  5. package/dist/client/assets/{DiffPanel-CzFJNXLw.js → DiffPanel-DA0QAING.js} +2 -2
  6. package/dist/client/assets/{DiffPanel.logic-Bk9XyjyJ.js → DiffPanel.logic-Cg5xBiSE.js} +2 -2
  7. package/dist/client/assets/{DiffWorkerPoolProvider-AxaO3o2S.js → DiffWorkerPoolProvider-BJSpQ5VY.js} +52 -52
  8. package/dist/client/assets/{PullRequestCodePanel-C_6uE9uq.js → PullRequestCodePanel-C8WlU2iQ.js} +3 -3
  9. package/dist/client/assets/{Virtualizer-C96hhBBx.js → Virtualizer-V8jZ5w_U.js} +2 -2
  10. package/dist/client/assets/{WorkerPoolContext-D3gbYcsV.js → WorkerPoolContext-CLHqIrE4.js} +3 -3
  11. package/dist/client/assets/canvasStateStore-BejjlUiS.js +2 -0
  12. package/dist/client/assets/{cmmdAuthRedirect-D9b4x37X.js → cmmdAuthRedirect-PUmt8-ZY.js} +2 -2
  13. package/dist/client/assets/index-Dq5A7gWd.css +1 -0
  14. package/dist/client/assets/{index-JCoiPxpo.js → index-yDeHcRkt.js} +68 -68
  15. package/dist/client/assets/{popover-BLN6-1Lv.js → popover-kIpfozNc.js} +2 -2
  16. package/dist/client/assets/{src-CP7pFzq9.js → src-D27YeBpH.js} +2 -2
  17. package/dist/client/assets/{toggle-D5P2us-a.js → toggle-BNOwunZr.js} +2 -2
  18. package/dist/client/index.html +11 -11
  19. package/dist/forge-build.json +1 -1
  20. package/dist/{open-yHTUkd2Y.mjs → open-2-reBrpv.mjs} +3 -3
  21. package/package.json +1 -1
  22. package/dist/client/assets/CanvasPanel-DUT9sMKg.js +0 -441
  23. package/dist/client/assets/canvasStateStore-Dk-UG8_D.js +0 -2
  24. package/dist/client/assets/index-CB79B6jT.css +0 -1
package/dist/bin.cjs CHANGED
@@ -21242,6 +21242,7 @@ const RuntimeErrorClass = require_Schema$1.Literals([
21242
21242
  "transport_error",
21243
21243
  "permission_error",
21244
21244
  "validation_error",
21245
+ "usage_limit",
21245
21246
  "unknown"
21246
21247
  ]);
21247
21248
  const TOOL_LIFECYCLE_ITEM_TYPES = [
@@ -66335,7 +66336,7 @@ function normalizeNumberish(value) {
66335
66336
  }
66336
66337
  //#endregion
66337
66338
  //#region package.json
66338
- var version$1 = "0.13.108";
66339
+ var version$1 = "0.13.110";
66339
66340
  //#endregion
66340
66341
  //#region src/sentry.ts
66341
66342
  const SERVER_APP_NAME = "forge-server";
@@ -98570,11 +98571,12 @@ function classifyProviderTurnStartFailureReason(detail) {
98570
98571
  * follow-up issue) that would stop Codex from retrying against that wall in
98571
98572
  * the first place.
98572
98573
  */
98573
- function classifyMidTurnFailureReason(detail) {
98574
+ function classifyMidTurnFailureReason(detail, errorClass) {
98574
98575
  const message = detail && detail.trim().length > 0 ? detail : "The runtime reported an error while this run was in progress.";
98575
- const classified = classifyRetryableProviderFailure(detail);
98576
+ const classifiedFailure = classifyRetryableProviderFailure(detail);
98577
+ const classifiedTerminal = classifiedFailure?.kind === "terminal" && classifiedFailure.reason === "quota";
98576
98578
  return {
98577
- code: classified?.kind === "terminal" && classified.reason === "quota" ? "provider_usage_limit" : "provider_turn_failed",
98579
+ code: errorClass === "usage_limit" || classifiedTerminal ? "provider_usage_limit" : "provider_turn_failed",
98578
98580
  message
98579
98581
  };
98580
98582
  }
@@ -98778,6 +98780,11 @@ function errorMessageOf(payload) {
98778
98780
  const message = payload.errorMessage;
98779
98781
  return typeof message === "string" && message.trim().length > 0 ? message : null;
98780
98782
  }
98783
+ function errorClassOf(payload) {
98784
+ if (!payload || typeof payload !== "object") return null;
98785
+ const cls = payload.errorClass;
98786
+ return typeof cls === "string" && cls.trim().length > 0 ? cls : null;
98787
+ }
98781
98788
  /**
98782
98789
  * Turns the one durable activity `Layers/CheckpointReactor.ts` records when a
98783
98790
  * turn ends into CMMD's `turn_status` terminal event (CMMD-Center/forge#3562
@@ -98797,7 +98804,7 @@ function serializeTurnTerminalStatusActivity(activity) {
98797
98804
  if (activity.kind !== "turn.terminal-status" || !activity.turnId) return null;
98798
98805
  const outcome = outcomeOf(activity.payload);
98799
98806
  if (outcome === null) return null;
98800
- const reason = outcome === "failed" ? classifyMidTurnFailureReason(errorMessageOf(activity.payload)) : null;
98807
+ const reason = outcome === "failed" ? classifyMidTurnFailureReason(errorMessageOf(activity.payload), errorClassOf(activity.payload)) : null;
98801
98808
  return {
98802
98809
  sourceSequence: null,
98803
98810
  event: {
@@ -214137,13 +214144,32 @@ const codexRealtimeMethodMappers = {
214137
214144
  function mapCodexRuntimeErrorEvent(event, canonicalThreadId, payload) {
214138
214145
  const message = asString$2(asObject$2(payload?.error)?.message) ?? event.message ?? "Provider runtime error";
214139
214146
  const willRetry = payload?.willRetry === true;
214147
+ const detail = event.payload !== void 0 ? { detail: event.payload } : {};
214148
+ if (asString$2(asObject$2(payload?.error)?.codexErrorInfo) === "usageLimitExceeded") return [{
214149
+ type: "runtime.error",
214150
+ ...runtimeEventBase(event, canonicalThreadId),
214151
+ payload: {
214152
+ message,
214153
+ class: "usage_limit",
214154
+ ...detail
214155
+ }
214156
+ }];
214157
+ if (classifyRetryableProviderFailure(message)?.kind === "terminal") return [{
214158
+ type: "runtime.error",
214159
+ ...runtimeEventBase(event, canonicalThreadId),
214160
+ payload: {
214161
+ message,
214162
+ class: "usage_limit",
214163
+ ...detail
214164
+ }
214165
+ }];
214140
214166
  return [{
214141
214167
  type: willRetry ? "runtime.warning" : "runtime.error",
214142
214168
  ...runtimeEventBase(event, canonicalThreadId),
214143
214169
  payload: {
214144
214170
  message,
214145
214171
  ...!willRetry ? { class: "provider_error" } : {},
214146
- ...event.payload !== void 0 ? { detail: event.payload } : {}
214172
+ ...detail
214147
214173
  }
214148
214174
  }];
214149
214175
  }
@@ -291440,7 +291466,10 @@ function runtimeStatusEventToActivities(event) {
291440
291466
  tone: "error",
291441
291467
  kind: "runtime.error",
291442
291468
  summary: "Runtime error",
291443
- payload: { message: truncateDetail(event.payload.message) }
291469
+ payload: {
291470
+ message: truncateDetail(event.payload.message),
291471
+ ...event.payload.class !== void 0 ? { class: event.payload.class } : {}
291472
+ }
291444
291473
  }];
291445
291474
  case "codeweb.workspace.required": return [{
291446
291475
  ...activityBase(event),
@@ -292847,6 +292876,31 @@ const make$8 = require_Schema$1.fn("make")(function* () {
292847
292876
  },
292848
292877
  createdAt: event.createdAt
292849
292878
  });
292879
+ if (activeTurnId !== null && eventTurnId !== void 0 && sameId$1(activeTurnId, eventTurnId)) {
292880
+ const activityId = turnTerminalStatusActivityId(eventTurnId);
292881
+ if (!thread.activities.some((a) => a.id === activityId)) {
292882
+ const recordedAt = (/* @__PURE__ */ new Date()).toISOString();
292883
+ yield* orchestrationEngine.dispatch({
292884
+ type: "thread.activity.append",
292885
+ commandId: providerCommandId(event, "mid-turn-terminal-status"),
292886
+ threadId: thread.id,
292887
+ activity: {
292888
+ id: EventId.make(activityId),
292889
+ tone: "error",
292890
+ kind: TURN_TERMINAL_STATUS_ACTIVITY_KIND,
292891
+ summary: "Turn failed",
292892
+ payload: {
292893
+ outcome: "failed",
292894
+ errorMessage: publicProviderRuntimeError(event.payload.message) ?? "CMMD is temporarily unavailable. Check the workspace AI connection and retry.",
292895
+ ...event.payload.class ? { errorClass: event.payload.class } : {}
292896
+ },
292897
+ turnId: eventTurnId,
292898
+ createdAt: recordedAt
292899
+ },
292900
+ createdAt: recordedAt
292901
+ });
292902
+ }
292903
+ }
292850
292904
  });
292851
292905
  const handleThreadMetadata = require_Schema$1.fn("handleThreadMetadata")(function* (event, thread) {
292852
292906
  if (event.type !== "thread.metadata.updated" || !event.payload.name) return;
@@ -300341,7 +300395,7 @@ function resolveBuildCommitFromEnv(env) {
300341
300395
  * environment descriptor down instead of reporting an honest "unknown".
300342
300396
  */
300343
300397
  function readBakedBuildCommit() {
300344
- return "121c9714626f7a3cee33a1e0378f096f7f4c1f8b";
300398
+ return "037bb9952083dd6c284e0ed8ab8af478c1756914";
300345
300399
  }
300346
300400
  async function resolveServerBuildCommit(input) {
300347
300401
  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";
@@ -21110,6 +21110,7 @@ const RuntimeErrorClass = Literals([
21110
21110
  "transport_error",
21111
21111
  "permission_error",
21112
21112
  "validation_error",
21113
+ "usage_limit",
21113
21114
  "unknown"
21114
21115
  ]);
21115
21116
  const TOOL_LIFECYCLE_ITEM_TYPES = [
@@ -50656,7 +50657,7 @@ function _supportsColor(haveStream, { streamIsTTY, sniffFlags = true } = {}) {
50656
50657
  const min = forceColor || 0;
50657
50658
  if (env.TERM === "dumb") return min;
50658
50659
  if (process$1.platform === "win32") {
50659
- const osRelease = os.release().split(".");
50660
+ const osRelease = $U.release().split(".");
50660
50661
  if (Number(osRelease[0]) >= 10 && Number(osRelease[2]) >= 10586) return Number(osRelease[2]) >= 14931 ? 3 : 2;
50661
50662
  return 1;
50662
50663
  }
@@ -53099,7 +53100,7 @@ var require_ProcessDetector = /* @__PURE__ */ __commonJSMin(((exports) => {
53099
53100
  exports.processDetector = void 0;
53100
53101
  const api_1 = (init_esm$1(), __toCommonJS(esm_exports$1));
53101
53102
  const semconv_1 = require_semconv$1();
53102
- const os$4 = __require("os");
53103
+ const os$3 = __require("os");
53103
53104
  /**
53104
53105
  * ProcessDetector will be used to detect the resources related current process running
53105
53106
  * and being instrumented from the NodeJS Process module.
@@ -53121,7 +53122,7 @@ var require_ProcessDetector = /* @__PURE__ */ __commonJSMin(((exports) => {
53121
53122
  };
53122
53123
  if (process.argv.length > 1) attributes[semconv_1.ATTR_PROCESS_COMMAND] = process.argv[1];
53123
53124
  try {
53124
- const userInfo = os$4.userInfo();
53125
+ const userInfo = os$3.userInfo();
53125
53126
  attributes[semconv_1.ATTR_PROCESS_OWNER] = userInfo.username;
53126
53127
  } catch (e) {
53127
53128
  api_1.diag.debug(`error obtaining process owner: ${e}`);
@@ -66044,7 +66045,7 @@ function normalizeNumberish(value) {
66044
66045
  }
66045
66046
  //#endregion
66046
66047
  //#region package.json
66047
- var version$1 = "0.13.108";
66048
+ var version$1 = "0.13.110";
66048
66049
  //#endregion
66049
66050
  //#region src/sentry.ts
66050
66051
  const SERVER_APP_NAME = "forge-server";
@@ -76114,7 +76115,7 @@ var require_node_gyp_build = /* @__PURE__ */ __commonJSMin(((exports, module) =>
76114
76115
  var fs$6 = __require("fs");
76115
76116
  var path$5 = __require("path");
76116
76117
  var url$1 = __require("url");
76117
- var os$3 = __require("os");
76118
+ var os$2 = __require("os");
76118
76119
  var runtimeRequire = typeof __webpack_require__ === "function" ? __non_webpack_require__ : __require;
76119
76120
  var vars = process.config && process.config.variables || {};
76120
76121
  var prebuildsOnly = !!process.env.PREBUILDS_ONLY;
@@ -76122,8 +76123,8 @@ var require_node_gyp_build = /* @__PURE__ */ __commonJSMin(((exports, module) =>
76122
76123
  var abi = versions.modules;
76123
76124
  if (versions.deno || process.isBun) abi = "unsupported";
76124
76125
  var runtime = isElectron() ? "electron" : isNwjs() ? "node-webkit" : "node";
76125
- var arch = process.env.npm_config_arch || os$3.arch();
76126
- var platform = process.env.npm_config_platform || os$3.platform();
76126
+ var arch = process.env.npm_config_arch || os$2.arch();
76127
+ var platform = process.env.npm_config_platform || os$2.platform();
76127
76128
  var libc = process.env.LIBC || (isMusl(platform) ? "musl" : "glibc");
76128
76129
  var armv = process.env.ARM_VERSION || (arch === "arm64" ? "8" : vars.arm_version) || "";
76129
76130
  var uv = (versions.uv || "").split(".")[0];
@@ -93967,7 +93968,7 @@ const launchDetached = (launch) => gen(function* () {
93967
93968
  });
93968
93969
  const OpenLive = effect(Open, gen(function* () {
93969
93970
  const open = yield* tryPromise({
93970
- try: () => import("./open-yHTUkd2Y.mjs"),
93971
+ try: () => import("./open-2-reBrpv.mjs"),
93971
93972
  catch: (cause) => new OpenError$1({
93972
93973
  message: "failed to load browser opener",
93973
93974
  cause
@@ -98180,11 +98181,12 @@ function classifyProviderTurnStartFailureReason(detail) {
98180
98181
  * follow-up issue) that would stop Codex from retrying against that wall in
98181
98182
  * the first place.
98182
98183
  */
98183
- function classifyMidTurnFailureReason(detail) {
98184
+ function classifyMidTurnFailureReason(detail, errorClass) {
98184
98185
  const message = detail && detail.trim().length > 0 ? detail : "The runtime reported an error while this run was in progress.";
98185
- const classified = classifyRetryableProviderFailure(detail);
98186
+ const classifiedFailure = classifyRetryableProviderFailure(detail);
98187
+ const classifiedTerminal = classifiedFailure?.kind === "terminal" && classifiedFailure.reason === "quota";
98186
98188
  return {
98187
- code: classified?.kind === "terminal" && classified.reason === "quota" ? "provider_usage_limit" : "provider_turn_failed",
98189
+ code: errorClass === "usage_limit" || classifiedTerminal ? "provider_usage_limit" : "provider_turn_failed",
98188
98190
  message
98189
98191
  };
98190
98192
  }
@@ -98388,6 +98390,11 @@ function errorMessageOf(payload) {
98388
98390
  const message = payload.errorMessage;
98389
98391
  return typeof message === "string" && message.trim().length > 0 ? message : null;
98390
98392
  }
98393
+ function errorClassOf(payload) {
98394
+ if (!payload || typeof payload !== "object") return null;
98395
+ const cls = payload.errorClass;
98396
+ return typeof cls === "string" && cls.trim().length > 0 ? cls : null;
98397
+ }
98391
98398
  /**
98392
98399
  * Turns the one durable activity `Layers/CheckpointReactor.ts` records when a
98393
98400
  * turn ends into CMMD's `turn_status` terminal event (CMMD-Center/forge#3562
@@ -98407,7 +98414,7 @@ function serializeTurnTerminalStatusActivity(activity) {
98407
98414
  if (activity.kind !== "turn.terminal-status" || !activity.turnId) return null;
98408
98415
  const outcome = outcomeOf(activity.payload);
98409
98416
  if (outcome === null) return null;
98410
- const reason = outcome === "failed" ? classifyMidTurnFailureReason(errorMessageOf(activity.payload)) : null;
98417
+ const reason = outcome === "failed" ? classifyMidTurnFailureReason(errorMessageOf(activity.payload), errorClassOf(activity.payload)) : null;
98411
98418
  return {
98412
98419
  sourceSequence: null,
98413
98420
  event: {
@@ -192236,7 +192243,7 @@ var Vce = {
192236
192243
  function Ve() {
192237
192244
  return Vce;
192238
192245
  }
192239
- var Us = os.homedir(), lk = os.tmpdir(), { env: Vc } = process$1, Yce = (e) => {
192246
+ var Us = $U.homedir(), lk = $U.tmpdir(), { env: Vc } = process$1, Yce = (e) => {
192240
192247
  let t = path.join(Us, "Library");
192241
192248
  return {
192242
192249
  data: path.join(t, "Application Support", e),
@@ -202436,12 +202443,12 @@ function qZ(e, t) {
202436
202443
  }
202437
202444
  return n;
202438
202445
  }
202439
- var os$2 = "https://code.claude.com/docs/en", kKe = [
202446
+ var os$1 = "https://code.claude.com/docs/en", kKe = [
202440
202447
  {
202441
202448
  matches: (e) => e.path === "permissions.defaultMode" && e.code === "invalid_value",
202442
202449
  tip: {
202443
202450
  suggestion: "Valid modes: \"acceptEdits\" (ask before file changes), \"plan\" (analysis only), \"bypassPermissions\" (auto-accept all), or \"default\" (standard behavior)",
202444
- docLink: `${os$2}/iam#permission-modes`
202451
+ docLink: `${os$1}/iam#permission-modes`
202445
202452
  }
202446
202453
  },
202447
202454
  {
@@ -202456,7 +202463,7 @@ var os$2 = "https://code.claude.com/docs/en", kKe = [
202456
202463
  matches: (e) => e.path.startsWith("env.") && e.code === "invalid_type",
202457
202464
  tip: {
202458
202465
  suggestion: "Environment variables must be strings. Wrap numbers and booleans in quotes. Example: \"DEBUG\": \"true\", \"PORT\": \"3000\"",
202459
- docLink: `${os$2}/settings#environment-variables`
202466
+ docLink: `${os$1}/settings#environment-variables`
202460
202467
  }
202461
202468
  },
202462
202469
  {
@@ -202467,14 +202474,14 @@ var os$2 = "https://code.claude.com/docs/en", kKe = [
202467
202474
  matches: (e) => e.path.startsWith("hooks.") && e.code === "invalid_key",
202468
202475
  tip: {
202469
202476
  suggestion: "Not a recognized hook event. Common events: PreToolUse, PostToolUse, UserPromptSubmit, SessionStart, SessionEnd, Stop. Check spelling and capitalization.",
202470
- docLink: `${os$2}/hooks`
202477
+ docLink: `${os$1}/hooks`
202471
202478
  }
202472
202479
  },
202473
202480
  {
202474
202481
  matches: (e) => /\.hooks\.\d+\.command$/.test(e.path) && e.code === "invalid_type" && e.received === "undefined",
202475
202482
  tip: {
202476
202483
  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\"}.",
202477
- docLink: `${os$2}/hooks#exec-form-and-shell-form`
202484
+ docLink: `${os$1}/hooks#exec-form-and-shell-form`
202478
202485
  }
202479
202486
  },
202480
202487
  {
@@ -202489,7 +202496,7 @@ var os$2 = "https://code.claude.com/docs/en", kKe = [
202489
202496
  matches: (e) => e.code === "unrecognized_keys",
202490
202497
  tip: {
202491
202498
  suggestion: "Check for typos or refer to the documentation for valid fields",
202492
- docLink: `${os$2}/settings`
202499
+ docLink: `${os$1}/settings`
202493
202500
  }
202494
202501
  },
202495
202502
  {
@@ -202504,13 +202511,13 @@ var os$2 = "https://code.claude.com/docs/en", kKe = [
202504
202511
  matches: (e) => e.path === "permissions.additionalDirectories" && e.code === "invalid_type",
202505
202512
  tip: {
202506
202513
  suggestion: "Must be an array of directory paths. Example: [\"~/projects\", \"/tmp/workspace\"]. You can also use --add-dir flag or /add-dir command",
202507
- docLink: `${os$2}/iam#working-directories`
202514
+ docLink: `${os$1}/iam#working-directories`
202508
202515
  }
202509
202516
  }
202510
202517
  ], AKe = {
202511
- permissions: `${os$2}/iam#configuring-permissions`,
202512
- env: `${os$2}/settings#environment-variables`,
202513
- hooks: `${os$2}/hooks`
202518
+ permissions: `${os$1}/iam#configuring-permissions`,
202519
+ env: `${os$1}/settings#environment-variables`,
202520
+ hooks: `${os$1}/hooks`
202514
202521
  };
202515
202522
  function GZ(e) {
202516
202523
  let t = kKe.find((r) => r.matches(e));
@@ -213712,13 +213719,32 @@ const codexRealtimeMethodMappers = {
213712
213719
  function mapCodexRuntimeErrorEvent(event, canonicalThreadId, payload) {
213713
213720
  const message = asString$2(asObject$2(payload?.error)?.message) ?? event.message ?? "Provider runtime error";
213714
213721
  const willRetry = payload?.willRetry === true;
213722
+ const detail = event.payload !== void 0 ? { detail: event.payload } : {};
213723
+ if (asString$2(asObject$2(payload?.error)?.codexErrorInfo) === "usageLimitExceeded") return [{
213724
+ type: "runtime.error",
213725
+ ...runtimeEventBase(event, canonicalThreadId),
213726
+ payload: {
213727
+ message,
213728
+ class: "usage_limit",
213729
+ ...detail
213730
+ }
213731
+ }];
213732
+ if (classifyRetryableProviderFailure(message)?.kind === "terminal") return [{
213733
+ type: "runtime.error",
213734
+ ...runtimeEventBase(event, canonicalThreadId),
213735
+ payload: {
213736
+ message,
213737
+ class: "usage_limit",
213738
+ ...detail
213739
+ }
213740
+ }];
213715
213741
  return [{
213716
213742
  type: willRetry ? "runtime.warning" : "runtime.error",
213717
213743
  ...runtimeEventBase(event, canonicalThreadId),
213718
213744
  payload: {
213719
213745
  message,
213720
213746
  ...!willRetry ? { class: "provider_error" } : {},
213721
- ...event.payload !== void 0 ? { detail: event.payload } : {}
213747
+ ...detail
213722
213748
  }
213723
213749
  }];
213724
213750
  }
@@ -271035,7 +271061,7 @@ var import_multicast_dns = /* @__PURE__ */ __toESM((/* @__PURE__ */ __commonJSMi
271035
271061
  var dgram = __require("dgram");
271036
271062
  var thunky = require_thunky();
271037
271063
  var events = __require("events");
271038
- var os$1 = __require("os");
271064
+ var os = __require("os");
271039
271065
  var noop = function() {};
271040
271066
  module.exports = function(opts) {
271041
271067
  if (!opts) opts = {};
@@ -271166,14 +271192,14 @@ var import_multicast_dns = /* @__PURE__ */ __toESM((/* @__PURE__ */ __commonJSMi
271166
271192
  return that;
271167
271193
  };
271168
271194
  function defaultInterface() {
271169
- var networks = os$1.networkInterfaces();
271195
+ var networks = os.networkInterfaces();
271170
271196
  var names = Object.keys(networks);
271171
271197
  for (var i = 0; i < names.length; i++) {
271172
271198
  var net = networks[names[i]];
271173
271199
  for (var j = 0; j < net.length; j++) {
271174
271200
  var iface = net[j];
271175
271201
  if (isIPv4(iface.family) && !iface.internal) {
271176
- if (os$1.platform() === "darwin" && names[i] === "en0") return iface.address;
271202
+ if (os.platform() === "darwin" && names[i] === "en0") return iface.address;
271177
271203
  return "0.0.0.0";
271178
271204
  }
271179
271205
  }
@@ -271181,7 +271207,7 @@ var import_multicast_dns = /* @__PURE__ */ __toESM((/* @__PURE__ */ __commonJSMi
271181
271207
  return "127.0.0.1";
271182
271208
  }
271183
271209
  function allInterfaces() {
271184
- var networks = os$1.networkInterfaces();
271210
+ var networks = os.networkInterfaces();
271185
271211
  var names = Object.keys(networks);
271186
271212
  var res = [];
271187
271213
  for (var i = 0; i < names.length; i++) {
@@ -290924,7 +290950,10 @@ function runtimeStatusEventToActivities(event) {
290924
290950
  tone: "error",
290925
290951
  kind: "runtime.error",
290926
290952
  summary: "Runtime error",
290927
- payload: { message: truncateDetail(event.payload.message) }
290953
+ payload: {
290954
+ message: truncateDetail(event.payload.message),
290955
+ ...event.payload.class !== void 0 ? { class: event.payload.class } : {}
290956
+ }
290928
290957
  }];
290929
290958
  case "codeweb.workspace.required": return [{
290930
290959
  ...activityBase(event),
@@ -292330,6 +292359,31 @@ const ProviderRuntimeIngestionLive = effect(ProviderRuntimeIngestionService, fn$
292330
292359
  },
292331
292360
  createdAt: event.createdAt
292332
292361
  });
292362
+ if (activeTurnId !== null && eventTurnId !== void 0 && sameId$1(activeTurnId, eventTurnId)) {
292363
+ const activityId = turnTerminalStatusActivityId(eventTurnId);
292364
+ if (!thread.activities.some((a) => a.id === activityId)) {
292365
+ const recordedAt = (/* @__PURE__ */ new Date()).toISOString();
292366
+ yield* orchestrationEngine.dispatch({
292367
+ type: "thread.activity.append",
292368
+ commandId: providerCommandId(event, "mid-turn-terminal-status"),
292369
+ threadId: thread.id,
292370
+ activity: {
292371
+ id: EventId.make(activityId),
292372
+ tone: "error",
292373
+ kind: TURN_TERMINAL_STATUS_ACTIVITY_KIND,
292374
+ summary: "Turn failed",
292375
+ payload: {
292376
+ outcome: "failed",
292377
+ errorMessage: publicProviderRuntimeError(event.payload.message) ?? "CMMD is temporarily unavailable. Check the workspace AI connection and retry.",
292378
+ ...event.payload.class ? { errorClass: event.payload.class } : {}
292379
+ },
292380
+ turnId: eventTurnId,
292381
+ createdAt: recordedAt
292382
+ },
292383
+ createdAt: recordedAt
292384
+ });
292385
+ }
292386
+ }
292333
292387
  });
292334
292388
  const handleThreadMetadata = fn$1("handleThreadMetadata")(function* (event, thread) {
292335
292389
  if (event.type !== "thread.metadata.updated" || !event.payload.name) return;
@@ -299788,7 +299842,7 @@ function resolveBuildCommitFromEnv(env) {
299788
299842
  * environment descriptor down instead of reporting an honest "unknown".
299789
299843
  */
299790
299844
  function readBakedBuildCommit() {
299791
- return "121c9714626f7a3cee33a1e0378f096f7f4c1f8b";
299845
+ return "037bb9952083dd6c284e0ed8ab8af478c1756914";
299792
299846
  }
299793
299847
  async function resolveServerBuildCommit(input) {
299794
299848
  if (isFullCommitSha(input.baked)) return input.baked;
@@ -324810,7 +324864,7 @@ const connectLoginCommand = make$33("login", {
324810
324864
  })).json();
324811
324865
  },
324812
324866
  openBrowser: async (url) => {
324813
- const open = (await import("./open-yHTUkd2Y.mjs")).default;
324867
+ const open = (await import("./open-2-reBrpv.mjs")).default;
324814
324868
  await open(url);
324815
324869
  return true;
324816
324870
  },