@dev.fast/whiteboard 0.3.4-preview.20261019.126 → 0.3.4

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 (115) hide show
  1. package/dist/{account-alias-B5-HYi1D.js → account-alias-CprZojXd.js} +8 -13
  2. package/dist/agent-cli-C6SPSII0.js +2 -0
  3. package/dist/{agent-cli-CohHf6Ua.js → agent-cli-CThN7Q59.js} +10 -15
  4. package/dist/{agent-client-Dtc-Kn_w.js → agent-client-BOOi7EUR.js} +3 -13
  5. package/dist/{authoring-tools-B7KU04f7.js → authoring-tools-BNwuMnz6.js} +27 -34
  6. package/dist/{background-server-C03RKxKS.js → background-server-CkvxA-6O.js} +5 -5
  7. package/dist/{background-server-CB9C4uoc.js → background-server-DLSDogkI.js} +1 -1
  8. package/dist/build-info.json +1 -1
  9. package/dist/{cli-CJaEb7zC.js → cli-R4yfa5DT.js} +1 -1
  10. package/dist/{cli-runner-DGDIqh3V.js → cli-runner-Cuc9FSzu.js} +26 -26
  11. package/dist/cli.js +3 -4
  12. package/dist/{client-lKVF_Elo.js → client-BN_FDxFr.js} +47 -253
  13. package/dist/{fuzzy-match-BmVJJm9I.js → fuzzy-match-BO9bK37N.js} +4 -6
  14. package/dist/{headless-host-DRtjf9WA.js → headless-host-CVBOQyRS.js} +1 -1
  15. package/dist/{headless-host-XhL1X4vX.js → headless-host-Cog6SpS9.js} +140 -513
  16. package/dist/{local-data-Cpl4ENbJ.js → local-data-D_9tvdsp.js} +323 -2419
  17. package/dist/{mcp-ovmiUE_x.js → mcp-D1hziANa.js} +9 -5
  18. package/dist/{package-paths-BWxO-UEL.js → package-paths-C--__jEv.js} +1 -1
  19. package/dist/profile-CYPmvBoA.js +2 -0
  20. package/dist/{profile-BadSkCkI.js → profile-DokFw782.js} +8 -20
  21. package/dist/{remote-attach-Dd-YobM6.js → remote-attach-CEJ-kvDY.js} +4 -4
  22. package/dist/{remote-extensions-CNXwqK0D.js → remote-extensions-Blcjr9Ze.js} +3 -3
  23. package/dist/{remote-extensions-VP-kfq0C.js → remote-extensions-GN8Gf_qG.js} +1 -1
  24. package/dist/{remote-language-server-BXk87KCr.js → remote-language-server-BTKBQ7x4.js} +5 -5
  25. package/dist/{remote-uninstall-DuOzsvaD.js → remote-uninstall-DW7Gdryh.js} +6 -6
  26. package/dist/{request-origin-B9qCPiVB.js → request-origin-Zcn_CjX4.js} +12 -45
  27. package/dist/{review-app-launcher-C7el2Uoy.js → review-app-launcher-CkwLclzR.js} +2 -2
  28. package/dist/{review-home-paths-D8AoCdd2.js → review-home-paths-j2BRAaNv.js} +17 -19
  29. package/dist/{review-telemetry-BsoRMC2w.js → review-telemetry-BLNwYnLV.js} +5 -5
  30. package/dist/runtime-CKiWhGrf.js +52 -0
  31. package/dist/runtime.d.ts +1 -1
  32. package/dist/runtime.js +1 -1
  33. package/dist/{s3-CsG2EWED.js → s3-DtJFWC0G.js} +1 -1
  34. package/dist/{s3-config-CjcLyFV5.js → s3-config-BTO12tCC.js} +2 -4
  35. package/dist/{s3-config-zz4GWh2T.js → s3-config-CSy3fx8H.js} +1 -1
  36. package/dist/server/desktop-host.js +76 -29
  37. package/dist/{server-discovery-CKjw3-6h.js → server-discovery-Bey8IqXH.js} +3 -3
  38. package/dist/sharing/index.d.ts +70 -484
  39. package/dist/sharing/index.js +1 -1
  40. package/dist/{src-WPaQn75m.js → src-BMPuxWv4.js} +73 -208
  41. package/dist/{src-BiWNbcF_.js → src-DsM3jO8G.js} +12 -89
  42. package/dist/{stored-document-migration-dFbewRTG.js → stored-document-migration-CChxtFAy.js} +269 -270
  43. package/dist/{thread-state-Do5LX10I.js → thread-state-5pYr6_zM.js} +2 -7
  44. package/dist/{tool-failure-DvI-gys2.js → tool-failure-C9MpbXJJ.js} +3 -10
  45. package/instructions/authoring.md +2 -3
  46. package/instructions/scratchpad.md +23 -0
  47. package/package.json +4 -4
  48. package/src/ask/agents.ts +1 -13
  49. package/src/ask/checkout-files.ts +5 -2
  50. package/src/ask/thread-state.ts +0 -4
  51. package/src/ask/thread.ts +0 -16
  52. package/src/ask/threads.ts +3 -24
  53. package/src/cli-install.ts +2 -13
  54. package/src/cli-runner.ts +1 -4
  55. package/src/cli.ts +1 -4
  56. package/src/diff-selection-migration.ts +34 -48
  57. package/src/lens-selection.ts +2 -38
  58. package/src/review-api/README.md +13 -52
  59. package/src/review-api/activity.ts +4 -1
  60. package/src/review-api/agent-cli.ts +1 -9
  61. package/src/review-api/anchor-quotes.ts +7 -14
  62. package/src/review-api/ask-history.ts +51 -137
  63. package/src/review-api/authoring-tools.ts +30 -45
  64. package/src/review-api/blocks/definition.ts +1 -1
  65. package/src/review-api/blocks/markdown.ts +2 -2
  66. package/src/review-api/document-headings.ts +27 -58
  67. package/src/review-api/document-text.ts +2 -31
  68. package/src/review-api/document.ts +34 -281
  69. package/src/review-api/github-provider.ts +13 -51
  70. package/src/review-api/http.ts +123 -702
  71. package/src/review-api/instructions.ts +19 -0
  72. package/src/review-api/local-data.ts +46 -310
  73. package/src/review-api/mcp.ts +11 -3
  74. package/src/review-api/onboarding.ts +1 -1
  75. package/src/review-api/profile.ts +6 -37
  76. package/src/review-api/public-tools.ts +2 -24
  77. package/src/review-api/pull-request.ts +49 -82
  78. package/src/review-api/request-origin.ts +0 -10
  79. package/src/review-api/review-progress.ts +27 -61
  80. package/src/review-api/store-schema.ts +29 -38
  81. package/src/review-api/store.ts +478 -2142
  82. package/src/review-api/worktree-events.ts +5 -3
  83. package/src/review-api/worktree-source.ts +7 -3
  84. package/src/review-api/worktree-structural.integration.ts +0 -72
  85. package/src/review-preferences.ts +88 -0
  86. package/src/review-stack.ts +23 -15
  87. package/src/runtime.ts +30 -4
  88. package/src/server/desktop-host.ts +1 -6
  89. package/src/server/desktop-server.ts +31 -1
  90. package/src/server/headless-host.ts +2 -0
  91. package/src/server/hono-http.ts +1 -2
  92. package/src/server/legacy-tutorial-cleanup.ts +3 -2
  93. package/src/server/review-gateway-list.ts +5 -3
  94. package/src/server/review-gateway-memory.ts +1 -1
  95. package/src/server/review-lifecycle-telemetry.ts +2 -2
  96. package/src/server/review-server-core.ts +5 -1
  97. package/src/server/structural-comparisons.ts +0 -47
  98. package/src/sharing/export.ts +7 -36
  99. package/src/sharing/host.ts +14 -34
  100. package/src/sharing/import.ts +24 -156
  101. package/src/sharing/repository.ts +20 -128
  102. package/src/startup-trace.ts +3 -3
  103. package/src/stored-document-migration.ts +19 -110
  104. package/src/ui-telemetry-events.ts +11 -33
  105. package/dist/agent-cli-_YyMIMRY.js +0 -2
  106. package/dist/lens-selection-CyJapcsl.js +0 -214
  107. package/dist/profile-DJvkBJNQ.js +0 -2
  108. package/dist/runtime-Bj2tD33R.js +0 -27
  109. package/src/heading-anchors.ts +0 -42
  110. package/src/review-api/board-order.ts +0 -144
  111. package/src/review-api/checkout-groups.ts +0 -560
  112. package/src/review-api/foreign-references.ts +0 -328
  113. package/src/review-api/link-preview.ts +0 -113
  114. package/src/review-api/scratchpad-plan-upgrade.ts +0 -250
  115. package/src/review-api/store-migrations.ts +0 -357
@@ -1,22 +1,22 @@
1
1
  #!/usr/bin/env node
2
- import { a as diff, o as diffFileSummaries, w as splitGitPatchFiles } from "../src-WPaQn75m.js";
2
+ import { S as splitGitPatchFiles, a as diff, o as diffFileSummaries } from "../src-BMPuxWv4.js";
3
3
  import { c as jsonString, i as jsonBoolean, n as isJsonObject, p as isObjectValue, s as jsonProperty, u as parseJsonText } from "../src-X9phtB2j.js";
4
- import { f as StreamLimitError, i as SharedReviewStore, p as readBoundedStream } from "../client-lKVF_Elo.js";
5
- import { d as pullRequestProvider } from "../local-data-Cpl4ENbJ.js";
6
- import { A as ReviewGatewayHostSchema, D as ReviewConnectRequestSchema, N as reviewDiffrSummarizerInputSchema, d as ReviewBugReportRequestSchema, f as parseReviewBugReportResponse, m as REVIEW_CLIENT_REMOTE, p as REVIEW_CLIENT_HEADER, r as parseReviewDesktopVerbFrame, s as parseZod, t as parseReviewCliInstallApplyRequest, u as ReviewBugReportMetaV2Schema, v as REVIEW_HOST_HEADER } from "../src-BiWNbcF_.js";
7
- import { i as reviewInstanceDiscoveryPath, o as reviewLegacyDiscoveryPath } from "../review-home-paths-D8AoCdd2.js";
8
- import { A as resourceReferences } from "../stored-document-migration-dFbewRTG.js";
4
+ import { d as StreamLimitError, f as readBoundedStream, i as SharedReviewStore } from "../client-BN_FDxFr.js";
5
+ import { u as pullRequestProvider } from "../local-data-D_9tvdsp.js";
6
+ import { M as reviewDiffrSummarizerInputSchema, O as ReviewGatewayHostSchema, T as ReviewConnectRequestSchema, c as ReviewBugReportMetaV2Schema, d as REVIEW_CLIENT_HEADER, f as REVIEW_CLIENT_REMOTE, g as REVIEW_HOST_HEADER, l as ReviewBugReportRequestSchema, r as parseReviewDesktopVerbFrame, s as parseZod, t as parseReviewCliInstallApplyRequest, u as parseReviewBugReportResponse } from "../src-DsM3jO8G.js";
7
+ import { i as reviewInstanceDiscoveryPath, o as reviewLegacyDiscoveryPath } from "../review-home-paths-j2BRAaNv.js";
8
+ import { w as resourceReferences } from "../stored-document-migration-CChxtFAy.js";
9
9
  import { t as ReviewInputError } from "../input-error-OLgB_h31.js";
10
- import { L as writePrivateJsonAtomic, N as devReviewHome } from "../s3-config-CjcLyFV5.js";
10
+ import { L as writePrivateJsonAtomic, N as devReviewHome } from "../s3-config-BTO12tCC.js";
11
11
  import { t as errorMessage } from "../error-message-OtiDonty.js";
12
- import { i as readReviewPackageVersion, t as findReviewPackageRoot } from "../package-paths-BWxO-UEL.js";
13
- import { _ as reviewInstanceIdentity, u as REVIEW_INSTANCE_ENV } from "../server-discovery-CKjw3-6h.js";
14
- import { t as openReviewProfile } from "../profile-BadSkCkI.js";
15
- import { r as reviewTelemetryChannel, t as ReviewTelemetry } from "../review-telemetry-BsoRMC2w.js";
16
- import { l as REVIEW_TELEMETRY_TABS } from "../request-origin-B9qCPiVB.js";
17
- import { c as removeLegacyReviewSkills, d as skipCliInstall, h as detectConnectAgents, i as finishCliInstallUpdate, l as resetCliInstall, m as connectAgent, n as applyCliInstall, o as pathShimPath, r as declineCliInstall, s as removeCliInstall, t as aliasInstallationToAccount, u as resolveCliInstallStatus } from "../account-alias-B5-HYi1D.js";
18
- import { C as saveDiffrSummarizer, E as cliAskTools, S as readDiffrConfig, T as testDiffrSummarizer, _ as DEFAULT_MAX_REQUEST_BYTES, a as drainServerCrashReport, b as GlobalReviewDesktopVerbRelay, c as answerErrorsAsJson, d as legacyModeSchema, f as captureSanitizedUiTelemetry, g as readBoundedRequestJson, h as createNodeRequestListener, l as createWhiteboardCore, m as recordClientError, o as installProcessErrorTelemetry, p as clientErrorsForSession, r as takeOverServerHome, s as serverCrashReportPath, u as serverJson, v as HttpJsonError, w as setDiffrConfigValue, x as migrateDiffrConfig, y as ReviewServerError } from "../headless-host-XhL1X4vX.js";
19
- import { s as readQuerySchemas } from "../authoring-tools-B7KU04f7.js";
12
+ import { i as readReviewPackageVersion, t as findReviewPackageRoot } from "../package-paths-C--__jEv.js";
13
+ import { _ as reviewInstanceIdentity, u as REVIEW_INSTANCE_ENV } from "../server-discovery-Bey8IqXH.js";
14
+ import { t as openReviewProfile } from "../profile-DokFw782.js";
15
+ import { r as reviewTelemetryChannel, t as ReviewTelemetry } from "../review-telemetry-BLNwYnLV.js";
16
+ import { o as REVIEW_TELEMETRY_TABS } from "../request-origin-Zcn_CjX4.js";
17
+ import { c as removeLegacyReviewSkills, d as skipCliInstall, h as detectConnectAgents, i as finishCliInstallUpdate, l as resetCliInstall, m as connectAgent, n as applyCliInstall, o as pathShimPath, r as declineCliInstall, s as removeCliInstall, t as aliasInstallationToAccount, u as resolveCliInstallStatus } from "../account-alias-CprZojXd.js";
18
+ import { C as saveDiffrSummarizer, E as cliAskTools, S as readDiffrConfig, T as testDiffrSummarizer, _ as DEFAULT_MAX_REQUEST_BYTES, a as drainServerCrashReport, b as GlobalReviewDesktopVerbRelay, c as answerErrorsAsJson, d as legacyModeSchema, f as captureSanitizedUiTelemetry, g as readBoundedRequestJson, h as createNodeRequestListener, l as createWhiteboardCore, m as recordClientError, o as installProcessErrorTelemetry, p as clientErrorsForSession, r as takeOverServerHome, s as serverCrashReportPath, u as serverJson, v as HttpJsonError, w as setDiffrConfigValue, x as migrateDiffrConfig, y as ReviewServerError } from "../headless-host-Cog6SpS9.js";
19
+ import { c as readQuerySchemas } from "../authoring-tools-BNwuMnz6.js";
20
20
  import crypto, { createHash, randomBytes } from "node:crypto";
21
21
  import { z } from "zod";
22
22
  import fs, { existsSync, readFileSync } from "node:fs";
@@ -263,6 +263,39 @@ function listenForDesktopHostShutdown(hostProcess, onShutdown, onTelemetrySettin
263
263
  return () => hostProcess.off("message", handleMessage);
264
264
  }
265
265
  //#endregion
266
+ //#region src/review-preferences.ts
267
+ const DEFAULT_REVIEW_PREFERENCES = { scratchpadEnabled: false };
268
+ function reviewPreferencesPath(devHome = devReviewHome()) {
269
+ return path.join(devHome, "preferences.json");
270
+ }
271
+ /** A missing or unreadable file falls back to the defaults; it never throws. */
272
+ async function readReviewPreferences(devHome) {
273
+ try {
274
+ return { scratchpadEnabled: parseScratchpadEnabled(parseJsonText(await readFile(reviewPreferencesPath(devHome), "utf8"))) };
275
+ } catch {
276
+ return { ...DEFAULT_REVIEW_PREFERENCES };
277
+ }
278
+ }
279
+ async function writeReviewPreferences(preferences, devHome) {
280
+ const next = { scratchpadEnabled: preferences.scratchpadEnabled === true };
281
+ await writePrivateJsonAtomic(reviewPreferencesPath(devHome), next);
282
+ return next;
283
+ }
284
+ /** Reads the scratchpad preference; a missing file means off. */
285
+ async function readScratchpadEnabled(devHome) {
286
+ return (await readReviewPreferences(devHome)).scratchpadEnabled;
287
+ }
288
+ /** Sets the scratchpad preference, keeping the other preferences as they are. */
289
+ async function writeScratchpadEnabled(enabled, devHome) {
290
+ return (await writeReviewPreferences({
291
+ ...await readReviewPreferences(devHome),
292
+ scratchpadEnabled: enabled
293
+ }, devHome)).scratchpadEnabled;
294
+ }
295
+ function parseScratchpadEnabled(raw) {
296
+ return isJsonObject(raw) && raw.scratchpadEnabled === true;
297
+ }
298
+ //#endregion
266
299
  //#region src/server/crash-report.ts
267
300
  const CRASH_REPORT_URL = "https://bug.dev.fast/api/v2/crashes";
268
301
  const gzipAsync = promisify(gzip);
@@ -777,7 +810,10 @@ function createJsonReviewReporting(store, telemetry, options = {}) {
777
810
  async function removeLegacyTutorial(input) {
778
811
  const tutorialRoot = input.root ?? path.join(devReviewHome(), "tutorial");
779
812
  try {
780
- await input.store.removeLegacyTutorials();
813
+ for (const reviewId of input.store.legacyTutorialIds()) await input.store.execute({ operation: {
814
+ type: "delete",
815
+ reviewId
816
+ } });
781
817
  for (const repository of input.store.repositories()) {
782
818
  const relative = path.relative(tutorialRoot, repository.path);
783
819
  if (relative && !relative.startsWith("..") && !path.isAbsolute(relative)) await input.data.forgetRepository(repository.id);
@@ -1134,9 +1170,9 @@ function decorate(entry, state, hostState) {
1134
1170
  }).sentence;
1135
1171
  return {
1136
1172
  ...entry,
1137
- ...entry.project && { project: {
1138
- id: `${alias}:${entry.project.id}`,
1139
- name: entry.project.name
1173
+ ...entry.repositoryGroup && { repositoryGroup: {
1174
+ key: `${alias}:${entry.repositoryGroup.key}`,
1175
+ label: entry.repositoryGroup.label
1140
1176
  } },
1141
1177
  host: alias,
1142
1178
  hostState,
@@ -1189,9 +1225,9 @@ const listEntrySchema = z.looseObject({
1189
1225
  repositoryName: z.string(),
1190
1226
  viewedAt: z.string().nullable(),
1191
1227
  trashedAt: z.string().nullable(),
1192
- project: z.object({
1193
- id: z.string(),
1194
- name: z.string()
1228
+ repositoryGroup: z.object({
1229
+ key: z.string(),
1230
+ label: z.string()
1195
1231
  }).optional()
1196
1232
  });
1197
1233
  const listEntriesSchema = z.array(z.unknown()).transform((entries) => entries.filter((entry) => listEntrySchema.safeParse(entry).success));
@@ -1945,11 +1981,12 @@ function reviewLifecycleTelemetry(telemetry, firstCreatedAt, onLoggedIn, now = D
1945
1981
  const authoring = /* @__PURE__ */ new Map();
1946
1982
  const capture = (event, properties, reviewUuid) => void telemetry.captureEvent(event, properties, reviewUuid ? { reviewUuid } : void 0);
1947
1983
  return {
1948
- onReviewCreated: ({ reviewId, blocks, via, agentKind }) => {
1984
+ onReviewCreated: ({ reviewId, kind, blocks, via, agentKind }) => {
1949
1985
  if (reported.has(reviewId)) return;
1950
1986
  reported.add(reviewId);
1951
1987
  if (via === "api" || via === "mcp") authoring.set(reviewId, agentKind);
1952
1988
  const properties = {
1989
+ kind,
1953
1990
  blocks,
1954
1991
  via
1955
1992
  };
@@ -2034,6 +2071,7 @@ function createGlobalReviewServer(input) {
2034
2071
  const openWatchdog = new ReviewOpenWatchdog({ onTimeout: (context, elapsedMs) => void telemetry.captureEvent("review_open_timeout", { elapsed_ms: elapsedMs }, context) });
2035
2072
  let closing = false;
2036
2073
  const cliPath = path.join(input.packageRoot, "dist", "cli.js");
2074
+ let scratchpadEnabled = false;
2037
2075
  const discovery = {
2038
2076
  version: 3,
2039
2077
  instanceId,
@@ -2058,6 +2096,7 @@ function createGlobalReviewServer(input) {
2058
2096
  relay,
2059
2097
  token,
2060
2098
  instanceId,
2099
+ scratchpad: () => scratchpadEnabled,
2061
2100
  status: () => {
2062
2101
  const { key, channel, checkout, appVersion, cliVersion, instanceId } = discovery;
2063
2102
  return {
@@ -2092,6 +2131,15 @@ function createGlobalReviewServer(input) {
2092
2131
  app.all("/reviews-api", (context) => gateway.fetch(context.req.raw));
2093
2132
  app.all("/reviews-api/*", (context) => gateway.fetch(context.req.raw));
2094
2133
  app.get("/remote-hosts", () => serverJson(200, gateway.hosts()));
2134
+ app.get("/preferences/scratchpad", () => serverJson(200, { enabled: scratchpadEnabled }));
2135
+ app.put("/preferences/scratchpad", async (context) => {
2136
+ const request = z.object({ enabled: z.boolean() }).safeParse(await readBoundedRequestJson(context.req.raw));
2137
+ if (!request.success) throw new ReviewServerError("enabled must be a boolean.", 400);
2138
+ scratchpadEnabled = await writeScratchpadEnabled(request.data.enabled);
2139
+ if (scratchpadEnabled) await reviewStore.ensureScratchpad();
2140
+ reviewStore.invalidateCatalog();
2141
+ return serverJson(200, { enabled: scratchpadEnabled });
2142
+ });
2095
2143
  app.post("/app/focus", async () => {
2096
2144
  const result = await relay.dispatch({
2097
2145
  name: "focusWindow",
@@ -2220,6 +2268,7 @@ function createGlobalReviewServer(input) {
2220
2268
  store: reviewStore,
2221
2269
  data: input.reviewData
2222
2270
  });
2271
+ scratchpadEnabled = await readScratchpadEnabled();
2223
2272
  boundPort = await listen(httpServer, input.port);
2224
2273
  discovery.url = urlForBoundPort();
2225
2274
  for (const discoveryPath of discoveryPaths) await writePrivateJsonAtomic(discoveryPath, discovery);
@@ -2257,7 +2306,7 @@ function sessionStartedSource(reviewStore, reviewUuid) {
2257
2306
  if (!reviewUuid) return {};
2258
2307
  try {
2259
2308
  const snapshot = reviewStore.read(reviewUuid);
2260
- const sourceKind = snapshot.target?.kind;
2309
+ const sourceKind = snapshot.kind === "scratchpad" ? snapshot.kind : snapshot.target?.kind;
2261
2310
  const pullRequestUrl = snapshot.origin?.pullRequestUrl;
2262
2311
  const prProvider = pullRequestUrl && prProviderOf(pullRequestUrl);
2263
2312
  return {
@@ -2344,10 +2393,7 @@ async function runDesktopHost(env = process.env) {
2344
2393
  await mkdir(home, { recursive: true });
2345
2394
  const log = (message) => process.stdout.write(`[Whiteboard gateway] ${message}\n`);
2346
2395
  const { local, shared, server } = await takeOverServerHome(home, async () => {
2347
- const local = await openReviewProfile(home, {
2348
- manageWorkspaces: true,
2349
- pullRequestStates: true
2350
- });
2396
+ const local = await openReviewProfile(home, { manageWorkspaces: true });
2351
2397
  const shared = new SharedReviewStore(path.join(home, "shared-reviews"));
2352
2398
  shared.connect(local.store, local.data);
2353
2399
  await shared.load();
@@ -2421,7 +2467,8 @@ function requiredPositiveInteger(value, name) {
2421
2467
  return parsed;
2422
2468
  }
2423
2469
  if (process.env.DEV_FAST_REVIEW_DESKTOP_HOST_AUTOSTART !== "0") runDesktopHost().catch((error) => {
2424
- process.stderr.write(`${error instanceof Error ? error.stack ?? error.message : String(error)}\n`, () => process.exit(1));
2470
+ process.stderr.write(`${error instanceof Error ? error.stack ?? error.message : String(error)}\n`);
2471
+ process.exitCode = 1;
2425
2472
  });
2426
2473
  //#endregion
2427
2474
  export { runDesktopHost };
@@ -1,7 +1,7 @@
1
1
  import { a as jsonNumber, n as isJsonObject, s as jsonProperty, u as parseJsonText } from "./src-X9phtB2j.js";
2
- import { n as parseReviewDesktopDiscovery } from "./src-BiWNbcF_.js";
3
- import { a as reviewInstancesDir, o as reviewLegacyDiscoveryPath, r as reviewDevInstanceKey, t as reviewDefaultInstancePath } from "./review-home-paths-D8AoCdd2.js";
4
- import { M as DEV_REVIEW_HOME_ENV, N as devReviewHome, k as processIsAlive } from "./s3-config-CjcLyFV5.js";
2
+ import { n as parseReviewDesktopDiscovery } from "./src-DsM3jO8G.js";
3
+ import { a as reviewInstancesDir, o as reviewLegacyDiscoveryPath, r as reviewDevInstanceKey, t as reviewDefaultInstancePath } from "./review-home-paths-j2BRAaNv.js";
4
+ import { M as DEV_REVIEW_HOME_ENV, N as devReviewHome, k as processIsAlive } from "./s3-config-BTO12tCC.js";
5
5
  import { z } from "zod";
6
6
  import { mkdir, readFile, readdir, rm, writeFile } from "node:fs/promises";
7
7
  import path from "node:path";