@dev.fast/whiteboard 0.4.1-preview.20261026.140 → 0.4.1-preview.20261028.142

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 (71) hide show
  1. package/dist/{account-alias-DpQNSiaM.js → account-alias-D1iIc7j5.js} +4 -5
  2. package/dist/{agent-cli-z_qF_J8n.js → agent-cli-B_gSzrhA.js} +8 -9
  3. package/dist/agent-cli-DtjnkDSL.js +2 -0
  4. package/dist/{agent-client-3980WBdQ.js → agent-client-DudPjH3I.js} +3 -3
  5. package/dist/{authoring-tools-CphR87Aa.js → authoring-tools-B-OyXmtR.js} +5 -5
  6. package/dist/{background-server-GMGjm8xu.js → background-server-CORnMQmu.js} +1 -1
  7. package/dist/{background-server-Dq8Zf4OM.js → background-server-CesuMV6N.js} +7 -6
  8. package/dist/build-info.json +1 -1
  9. package/dist/{cli-BPd7DLd-.js → cli-CIP_-Fvm.js} +1 -1
  10. package/dist/{cli-runner-iHNaGXZg.js → cli-runner-dHnKnyNw.js} +22 -23
  11. package/dist/cli.js +2 -2
  12. package/dist/{fuzzy-match-bbbTSBPK.js → fuzzy-match-CTvayutE.js} +3 -3
  13. package/dist/{headless-host-BEdTaS2j.js → headless-host-CWuFw-CO.js} +147 -231
  14. package/dist/{headless-host-CpqwtaaX.js → headless-host-Cnu-o0xk.js} +1 -1
  15. package/dist/{import-DG435Ifj.js → import-FOpJL22V.js} +198 -505
  16. package/dist/{lens-selection-fz59ca6x.js → lens-selection-B_LTVyTB.js} +1 -1
  17. package/dist/{local-data-C4TFet-6.js → local-data-BhNZ1Yep.js} +72 -91
  18. package/dist/{mcp-C__btJSK.js → mcp-2bWqlJNW.js} +3 -3
  19. package/dist/{package-paths-LcO6HNp_.js → package-paths-Cg6fnaGp.js} +1 -1
  20. package/dist/profile-BmtFpq8d.js +2 -0
  21. package/dist/{profile-Bpsilnd7.js → profile-DnwIJvlh.js} +2 -2
  22. package/dist/{remote-attach-BM9FaV1Q.js → remote-attach-C79X5M2Z.js} +4 -4
  23. package/dist/{remote-extensions-VLpt_4Tn.js → remote-extensions-Bw029iIS.js} +1 -1
  24. package/dist/{remote-extensions-DMKyDjAs.js → remote-extensions-MUUgbLJn.js} +2 -2
  25. package/dist/{remote-language-server-c4fdgeA8.js → remote-language-server-Dw1o27aF.js} +4 -4
  26. package/dist/{remote-uninstall-DvBENfrg.js → remote-uninstall-Aza0u1_3.js} +5 -5
  27. package/dist/{request-origin-CtTmXRoS.js → request-origin-DEQd09Db.js} +3 -3
  28. package/dist/{review-app-launcher-CffrNlrU.js → review-app-launcher-L7xKjTLQ.js} +2 -2
  29. package/dist/{src-KTjWplV9.js → review-home-paths-LdGS4SpR.js} +48 -8
  30. package/dist/{review-telemetry-_54CVkjH.js → review-telemetry-lmK8HPLI.js} +4 -5
  31. package/dist/{runtime-5WG8rRgg.js → runtime-Bhk5L_SN.js} +1 -1
  32. package/dist/runtime.js +1 -1
  33. package/dist/server/desktop-host.js +34 -48
  34. package/dist/{server-discovery-BjelO8cl.js → server-discovery-D-2vz5gG.js} +2 -3
  35. package/dist/sharing/index.d.ts +51 -144
  36. package/dist/sharing/index.js +2 -2
  37. package/dist/{src-D0h06Qsl.js → src-Bew3mW9I.js} +7 -2
  38. package/dist/{src-BTCRHmRM.js → src-Y30gweiK.js} +7 -1
  39. package/dist/{stored-document-migration-B2Wp1ePB.js → stored-document-migration-CZe65mkx.js} +20 -6
  40. package/dist/{thread-state-Dbs5siMf.js → thread-state-XgVKaQ3-.js} +1 -1
  41. package/dist/{tool-failure-pgc2CD1C.js → tool-failure-Bi_-Zck-.js} +2 -2
  42. package/instructions/animation.md +18 -68
  43. package/instructions/authoring.md +1 -1
  44. package/package.json +4 -4
  45. package/src/review-api/README.md +5 -5
  46. package/src/review-api/ask-history.ts +3 -13
  47. package/src/review-api/authoring-tools.ts +2 -2
  48. package/src/review-api/blocks/animation.ts +50 -0
  49. package/src/review-api/http.ts +259 -414
  50. package/src/review-api/local-data.ts +24 -53
  51. package/src/review-api/onboarding.ts +29 -2
  52. package/src/review-api/review-progress.ts +1 -5
  53. package/src/review-api/store.ts +95 -16
  54. package/src/review-api/workspaces.ts +17 -48
  55. package/src/review-checkout-paths.ts +2 -5
  56. package/src/review-head-checkout.ts +3 -14
  57. package/src/server/background-server.ts +4 -2
  58. package/src/server/desktop-host.ts +17 -9
  59. package/src/server/desktop-server.ts +4 -6
  60. package/src/server/json-review-reporting.ts +4 -23
  61. package/src/server/review-gateway-pushes.ts +1 -10
  62. package/src/server/review-server-core.ts +8 -13
  63. package/src/sharing/client.ts +86 -2
  64. package/src/sharing/host.ts +111 -88
  65. package/src/sharing/import.ts +173 -710
  66. package/src/sharing/index.ts +1 -7
  67. package/src/sharing/repository.ts +18 -49
  68. package/dist/agent-cli-D4JapSBa.js +0 -2
  69. package/dist/profile-DPqMPFYS.js +0 -2
  70. package/dist/review-home-paths-CjHB5c8m.js +0 -39
  71. package/src/sharing/routes.ts +0 -35
@@ -1,11 +1,10 @@
1
1
  import { n as isJsonObject } from "./src-X9phtB2j.js";
2
- import { E as ReviewCliInstallStampSchema } from "./src-D0h06Qsl.js";
3
- import { G as removeAgentTraceHook, H as AGENT_TRACE_HOOK_AGENTS, I as disableAllTraceRepositories, L as enableTraceRepository, Q as readStoreAuth, R as listTraceRepositoryRoots, U as describeTraceHookOwners, W as installHarnessHooks, Y as traceScope, g as disableTraceMachine, h as configureTraceMachine, rt as StoreClient, v as traceMachineEnabled, y as traceMachineStatus, z as traceRepositoryStatus } from "./src-KTjWplV9.js";
2
+ import { E as ReviewCliInstallStampSchema } from "./src-Bew3mW9I.js";
3
+ import { C as disableTraceMachine, E as traceMachineStatus, G as listTraceRepositoryRoots, K as traceRepositoryStatus, Q as removeAgentTraceHook, S as configureTraceMachine, T as traceMachineEnabled, U as disableAllTraceRepositories, W as enableTraceRepository, X as describeTraceHookOwners, Y as AGENT_TRACE_HOOK_AGENTS, Z as installHarnessHooks, at as readStoreAuth, n as reviewDesktopStateDir, nt as traceScope, ut as StoreClient } from "./review-home-paths-LdGS4SpR.js";
4
4
  import { I as writeFileAtomicAsync, L as writePrivateJsonAtomic, N as devReviewHome, j as withFileLock } from "./s3-config-CjcLyFV5.js";
5
- import { i as readReviewPackageVersion } from "./package-paths-LcO6HNp_.js";
6
- import { n as reviewDesktopStateDir } from "./review-home-paths-CjHB5c8m.js";
5
+ import { i as readReviewPackageVersion } from "./package-paths-Cg6fnaGp.js";
7
6
  import { n as isFile, t as isDirectory } from "./fs-utils-BMPLt0cr.js";
8
- import { c as findExecutable, s as executableCommand } from "./fuzzy-match-bbbTSBPK.js";
7
+ import { c as findExecutable, s as executableCommand } from "./fuzzy-match-CTvayutE.js";
9
8
  import { createHash } from "node:crypto";
10
9
  import { constants } from "node:fs";
11
10
  import { access, chmod, lstat, mkdir, readFile, rm, stat, writeFile } from "node:fs/promises";
@@ -1,13 +1,12 @@
1
1
  import { n as isJsonObject, u as parseJsonText } from "./src-X9phtB2j.js";
2
- import { v as traceMachineEnabled } from "./src-KTjWplV9.js";
3
- import { a as toolResultText, i as connectReviewInstance, s as ReviewApiError } from "./agent-client-3980WBdQ.js";
2
+ import { T as traceMachineEnabled } from "./review-home-paths-LdGS4SpR.js";
3
+ import { a as toolResultText, i as connectReviewInstance, s as ReviewApiError } from "./agent-client-DudPjH3I.js";
4
4
  import { N as devReviewHome } from "./s3-config-CjcLyFV5.js";
5
- import { n as readBuildCommit } from "./package-paths-LcO6HNp_.js";
6
- import "./review-home-paths-CjHB5c8m.js";
7
- import { b as selectReviewInstance, u as REVIEW_INSTANCE_ENV } from "./server-discovery-BjelO8cl.js";
8
- import { n as reviewSessionAgent } from "./review-telemetry-_54CVkjH.js";
9
- import { a as REVIEW_VIA_HEADER, i as REVIEW_THREAD_HEADER, n as REVIEW_AGENT_HEADER, t as ASK_THREAD_ENV } from "./request-origin-CtTmXRoS.js";
10
- import { i as publicTool, n as RECOVERY, r as callPublicTool, t as toolFailure } from "./tool-failure-pgc2CD1C.js";
5
+ import { n as readBuildCommit } from "./package-paths-Cg6fnaGp.js";
6
+ import { b as selectReviewInstance, u as REVIEW_INSTANCE_ENV } from "./server-discovery-D-2vz5gG.js";
7
+ import { n as reviewSessionAgent } from "./review-telemetry-lmK8HPLI.js";
8
+ import { a as REVIEW_VIA_HEADER, i as REVIEW_THREAD_HEADER, n as REVIEW_AGENT_HEADER, t as ASK_THREAD_ENV } from "./request-origin-DEQd09Db.js";
9
+ import { i as publicTool, n as RECOVERY, r as callPublicTool, t as toolFailure } from "./tool-failure-Bi_-Zck-.js";
11
10
  import { existsSync } from "node:fs";
12
11
  import path from "node:path";
13
12
  //#region src/review-api/install-update.ts
@@ -44,7 +43,7 @@ async function runReviewAgentCli(input) {
44
43
  [REVIEW_THREAD_HEADER, thread ?? ""]
45
44
  ]);
46
45
  if (mode === "mcp") {
47
- const { serveReviewMcp } = await import("./mcp-C__btJSK.js");
46
+ const { serveReviewMcp } = await import("./mcp-2bWqlJNW.js");
48
47
  exitOnInstallUpdate(input.stderr);
49
48
  await serveReviewMcp(async (key, agentKind) => {
50
49
  const connected = await connectReviewInstance(key ? {
@@ -0,0 +1,2 @@
1
+ import { n as runReviewAgentCli } from "./agent-cli-B_gSzrhA.js";
2
+ export { runReviewAgentCli };
@@ -1,7 +1,7 @@
1
1
  import { d as isBooleanValue, f as isNumberValue, m as isStringValue, u as parseJsonText } from "./src-X9phtB2j.js";
2
- import "./src-D0h06Qsl.js";
2
+ import "./src-Bew3mW9I.js";
3
3
  import { t as ReviewInputError } from "./input-error-OLgB_h31.js";
4
- import { b as selectReviewInstance, c as reviewServerStateDir, d as ReviewInstanceUnavailableError, i as readReviewServerDiscovery, l as serverNotReady, m as healthyReviewInstance, s as reviewServerIsHealthy, y as reviewInstanceUnavailable } from "./server-discovery-BjelO8cl.js";
4
+ import { b as selectReviewInstance, c as reviewServerStateDir, d as ReviewInstanceUnavailableError, i as readReviewServerDiscovery, l as serverNotReady, m as healthyReviewInstance, s as reviewServerIsHealthy, y as reviewInstanceUnavailable } from "./server-discovery-D-2vz5gG.js";
5
5
  //#region ../review-protocol/src/review-api-client.ts
6
6
  const defaultRequest = (url, init) => fetch(url, init);
7
7
  /** A non-2xx reply; the status tells a caller whether retrying can help. */
@@ -259,7 +259,7 @@ async function connectReviewInstance(env = process.env, headers = {}, options =
259
259
  const selection = await selectReviewInstance({ env });
260
260
  const discovery = healthyReviewInstance(selection);
261
261
  if (!discovery) {
262
- const { ensureServerWithoutDesktop } = await import("./background-server-GMGjm8xu.js");
262
+ const { ensureServerWithoutDesktop } = await import("./background-server-CORnMQmu.js");
263
263
  const server = await ensureServerWithoutDesktop({
264
264
  selection,
265
265
  env,
@@ -1,8 +1,8 @@
1
1
  import { n as isJsonObject } from "./src-X9phtB2j.js";
2
- import { c as activityBeginSchema, l as activityEndSchema, n as uploadSchema, r as commandSchema, u as activityUpdateSchema } from "./local-data-C4TFet-6.js";
3
- import { F as pathTargetSchema, z as publishedEdits } from "./stored-document-migration-B2Wp1ePB.js";
2
+ import { c as activityBeginSchema, l as activityEndSchema, n as uploadSchema, r as commandSchema, u as activityUpdateSchema } from "./local-data-BhNZ1Yep.js";
3
+ import { P as pathTargetSchema, R as publishedEdits } from "./stored-document-migration-CZe65mkx.js";
4
4
  import { t as ReviewInputError } from "./input-error-OLgB_h31.js";
5
- import { t as findReviewPackageRoot } from "./package-paths-LcO6HNp_.js";
5
+ import { t as findReviewPackageRoot } from "./package-paths-Cg6fnaGp.js";
6
6
  import { z } from "zod";
7
7
  import { readFile } from "node:fs/promises";
8
8
  import path from "node:path";
@@ -231,8 +231,8 @@ function authoringTools(traceEnabled = false, animationsEnabled = false) {
231
231
  }), "GET", "/:reviewId/inspect"),
232
232
  tool("lens_get", "Read the review's Diff-view lenses as authored (ids, titles, targets), each lens's resolved fileCount (and unavailable reason, if any), and uncategorized: the changed lines no lens selects yet, by file.", z.strictObject(review), "GET", "/:reviewId/lenses"),
233
233
  tool("history", "List saved document versions.", z.strictObject(review), "GET", "/:reviewId/history"),
234
- tool("open", "Show an active review immediately; restore it from Trash before opening it. Prepare current pinned checkouts in the background. Returns softwareMapEnabled and any already-recorded environmentIssues. Missing optional setup is not an issue; use review_environment to recheck.", z.strictObject(review), "POST", "/:reviewId/open"),
235
- tool("environment", "Acquire and recheck this review's current base/head language checkouts (not historical or selected commits). Returns acquisition issues, not full LSP health. Missing optional setup and failed setup with a usable checkout stay silent. Set retry:true to rerun failed preparation after an actual language-feature failure; preparation runs in the background.", z.strictObject({
234
+ tool("open", "Show an active review immediately; restore it from Trash before opening it. Prepare its pinned checkout in the background. Returns softwareMapEnabled and any already-recorded environmentIssues. Missing optional setup is not an issue; use review_environment to recheck.", z.strictObject(review), "POST", "/:reviewId/open"),
235
+ tool("environment", "Acquire and recheck this review's current head language checkout (not historical or selected commits). Returns acquisition issues, not full LSP health. Missing optional setup and failed setup with a usable checkout stay silent. Set retry:true to rerun failed preparation after an actual language-feature failure; preparation runs in the background.", z.strictObject({
236
236
  ...review,
237
237
  retry: z.boolean().optional()
238
238
  }), "POST", "/:reviewId/environment"),
@@ -1,2 +1,2 @@
1
- import { a as headlessServerOwner, c as stopBackgroundServer, i as ensureServerWithoutDesktop, r as ensureBackgroundServer } from "./background-server-Dq8Zf4OM.js";
1
+ import { a as headlessServerOwner, c as stopBackgroundServer, i as ensureServerWithoutDesktop, r as ensureBackgroundServer } from "./background-server-CesuMV6N.js";
2
2
  export { ensureBackgroundServer, ensureServerWithoutDesktop, headlessServerOwner, stopBackgroundServer };
@@ -1,8 +1,8 @@
1
- import "./src-KTjWplV9.js";
1
+ import "./review-home-paths-LdGS4SpR.js";
2
2
  import { D as liveLockOwner, k as processIsAlive } from "./s3-config-CjcLyFV5.js";
3
- import { t as findReviewPackageRoot } from "./package-paths-LcO6HNp_.js";
4
- import { a as readReviewServerHealth, c as reviewServerStateDir, i as readReviewServerDiscovery, n as desktopOwnsHome, p as desktopUsesHome, r as headlessServerLockPath } from "./server-discovery-BjelO8cl.js";
5
- import { t as desktopApplicationInstalled } from "./review-app-launcher-CffrNlrU.js";
3
+ import { t as findReviewPackageRoot } from "./package-paths-Cg6fnaGp.js";
4
+ import { a as readReviewServerHealth, c as reviewServerStateDir, i as readReviewServerDiscovery, n as desktopOwnsHome, p as desktopUsesHome, r as headlessServerLockPath } from "./server-discovery-D-2vz5gG.js";
5
+ import { t as desktopApplicationInstalled } from "./review-app-launcher-L7xKjTLQ.js";
6
6
  import { mkdir, open, readFile, realpath, stat } from "node:fs/promises";
7
7
  import path from "node:path";
8
8
  import { spawn } from "node:child_process";
@@ -30,9 +30,10 @@ async function ensureBackgroundServer(input) {
30
30
  let respawned = false;
31
31
  while (Date.now() < deadline) {
32
32
  const discovery = await healthyDiscovery(stateDir);
33
- if (discovery) return {
33
+ const started = discovery?.serverPid === child.pid;
34
+ if (discovery && (started || child.exited)) return {
34
35
  discovery,
35
- started: discovery.serverPid === child.pid
36
+ started
36
37
  };
37
38
  if (child.error) throw new Error(`Could not start the Whiteboard server: ${child.error.message}`);
38
39
  if (child.exited && await headlessServerOwner(stateDir) === void 0) {
@@ -1 +1 @@
1
- {"version":"0.4.1-preview.20261026.140","commit":"8f78d327ad257ae3b6ca94ee1c00b56cef50a063","dirty":true,"builtAt":"2026-10-26T22:50:38.752Z"}
1
+ {"version":"0.4.1-preview.20261028.142","commit":"bedb61d18982132726ec118b55337804e8992238","dirty":true,"builtAt":"2026-10-28T15:47:13.214Z"}
@@ -1,4 +1,4 @@
1
- import { r as connectReviewApi } from "./agent-client-3980WBdQ.js";
1
+ import { r as connectReviewApi } from "./agent-client-DudPjH3I.js";
2
2
  import { randomUUID } from "node:crypto";
3
3
  import { z } from "zod";
4
4
  //#region src/sharing/cli.ts
@@ -1,19 +1,18 @@
1
- import { D as __commonJSMin, E as setLocalVcsCommandObserver, O as __require, k as __toESM } from "./src-BTCRHmRM.js";
1
+ import { D as __commonJSMin, E as setLocalVcsCommandObserver, O as __require, k as __toESM } from "./src-Y30gweiK.js";
2
2
  import { c as jsonString, n as isJsonObject, u as parseJsonText } from "./src-X9phtB2j.js";
3
- import { S as REVIEW_REMOTE_ATTACH_END, b as REVIEW_REMOTE_AGENT_IDS, h as REVIEW_CLI_INSTALL_TARGET_LABELS, l as boardTitle, x as REVIEW_REMOTE_ATTACH_BEGIN } from "./src-D0h06Qsl.js";
4
- import { $ as runStoreLogin, A as loadS3TraceStorage, B as readTraceUserConfig, C as runTraceDeny, D as runTraceStoreInfo, E as runTraceStoreDelete, F as resolveTraceRepositoryTarget, J as traceHomeDir, K as resolveTraceCommand, M as selectTraceStorage, O as describeSelection, P as requireTraceConsent, Q as readStoreAuth, S as runTraceAllow, T as runTraceSessions, V as HOSTED_CAPTURE_SCOPE_DESCRIPTION, X as DEFAULT_STORE_ORIGIN, Y as traceScope, _ as readLegacyCaptureSettings, a as runTracePull$1, at as emitJsonEvent, c as runTraceEnable, ct as jsonRequestedInArgv, d as runTraceStatus, et as runStoreLogout, f as runTraceSync, i as runTraceList$1, it as withStoreAuthorization, l as runTraceInstallMachine, m as runTraceHook, n as resolveTraceReadStorage, nt as StoreApiError, o as runTraceShow, ot as failWithJsonError, p as runTraceGitHook, r as runTraceBlame, rt as StoreClient, s as runTraceDisable, st as humanStream, t as registerTraceCommands, tt as runStoreWhoami, u as runTraceRepair, v as traceMachineEnabled, w as runTraceOnboard, y as traceMachineStatus, z as traceRepositoryStatus } from "./src-KTjWplV9.js";
5
- import { o as ReviewApiClient, s as ReviewApiError } from "./agent-client-3980WBdQ.js";
3
+ import { S as REVIEW_REMOTE_ATTACH_END, b as REVIEW_REMOTE_AGENT_IDS, h as REVIEW_CLI_INSTALL_TARGET_LABELS, l as boardTitle, x as REVIEW_REMOTE_ATTACH_BEGIN } from "./src-Bew3mW9I.js";
4
+ import { $ as resolveTraceCommand, A as runTraceDeny, E as traceMachineStatus, F as describeSelection, H as resolveTraceRepositoryTarget, J as HOSTED_CAPTURE_SCOPE_DESCRIPTION, K as traceRepositoryStatus, L as loadS3TraceStorage, M as runTraceSessions, N as runTraceStoreDelete, P as runTraceStoreInfo, T as traceMachineEnabled, V as requireTraceConsent, _ as runTraceRepair, at as readStoreAuth, b as runTraceGitHook, c as registerTraceCommands, ct as runStoreWhoami, d as runTraceList$1, dt as withStoreAuthorization, f as runTracePull$1, ft as emitJsonEvent, g as runTraceInstallMachine, h as runTraceEnable, ht as jsonRequestedInArgv, j as runTraceOnboard, k as runTraceAllow, l as resolveTraceReadStorage, lt as StoreApiError, m as runTraceDisable, mt as humanStream, nt as traceScope, ot as runStoreLogin, p as runTraceShow, pt as failWithJsonError, q as readTraceUserConfig, rt as DEFAULT_STORE_ORIGIN, st as runStoreLogout, tt as traceHomeDir, u as runTraceBlame, ut as StoreClient, v as runTraceStatus, w as readLegacyCaptureSettings, x as runTraceHook, y as runTraceSync, z as selectTraceStorage } from "./review-home-paths-LdGS4SpR.js";
5
+ import { o as ReviewApiClient, s as ReviewApiError } from "./agent-client-DudPjH3I.js";
6
6
  import { C as s3ProfileSchema, E as writeTraceConfigFile, N as devReviewHome, P as normalizeStoreOrigin, S as readTraceConfigFile, T as sameS3Profile, _ as emptyTraceConfig, c as resolveS3Setup, g as currentStore, h as TraceConfigurationError, i as isS3MockMode, n as clearTraceEnvCache, o as readTraceEnvFile, p as traceSettingsPath, w as s3Store } from "./s3-config-CjcLyFV5.js";
7
7
  import { t as errorMessage } from "./error-message-OtiDonty.js";
8
- import { i as readReviewPackageVersion, r as readBuildInfo, t as findReviewPackageRoot } from "./package-paths-LcO6HNp_.js";
9
- import { t as resolveReviewRoot } from "./runtime-5WG8rRgg.js";
10
- import "./review-home-paths-CjHB5c8m.js";
11
- import { a as readReviewServerHealth, b as selectReviewInstance, c as reviewServerStateDir, d as ReviewInstanceUnavailableError, f as clearDefaultReviewInstance, g as requireHealthyReviewDesktop, h as readDefaultReviewInstance, i as readReviewServerDiscovery, l as serverNotReady, m as healthyReviewInstance, p as desktopUsesHome, t as DESKTOP_TAKEOVER_SIGNAL, u as REVIEW_INSTANCE_ENV, x as writeDefaultReviewInstance, y as reviewInstanceUnavailable } from "./server-discovery-BjelO8cl.js";
12
- import { t as ReviewTelemetry } from "./review-telemetry-_54CVkjH.js";
13
- import { t as fuzzyRank } from "./fuzzy-match-bbbTSBPK.js";
14
- import { _ as isInstallTarget, a as isOwnedShim, f as windowsInstallerCommand, g as ALL_INSTALL_TARGETS, h as detectConnectAgents, m as connectAgent, o as pathShimPath, p as scanLegacySkills, t as aliasInstallationToAccount, v as connectPrompts } from "./account-alias-DpQNSiaM.js";
15
- import { n as focusReviewDesktop, r as runReviewAppLaunch } from "./review-app-launcher-CffrNlrU.js";
16
- import { t as reviewAgentCliHelp } from "./agent-cli-z_qF_J8n.js";
8
+ import { i as readReviewPackageVersion, r as readBuildInfo, t as findReviewPackageRoot } from "./package-paths-Cg6fnaGp.js";
9
+ import { t as resolveReviewRoot } from "./runtime-Bhk5L_SN.js";
10
+ import { a as readReviewServerHealth, b as selectReviewInstance, c as reviewServerStateDir, d as ReviewInstanceUnavailableError, f as clearDefaultReviewInstance, g as requireHealthyReviewDesktop, h as readDefaultReviewInstance, i as readReviewServerDiscovery, l as serverNotReady, m as healthyReviewInstance, p as desktopUsesHome, t as DESKTOP_TAKEOVER_SIGNAL, u as REVIEW_INSTANCE_ENV, x as writeDefaultReviewInstance, y as reviewInstanceUnavailable } from "./server-discovery-D-2vz5gG.js";
11
+ import { t as ReviewTelemetry } from "./review-telemetry-lmK8HPLI.js";
12
+ import { t as fuzzyRank } from "./fuzzy-match-CTvayutE.js";
13
+ import { _ as isInstallTarget, a as isOwnedShim, f as windowsInstallerCommand, g as ALL_INSTALL_TARGETS, h as detectConnectAgents, m as connectAgent, o as pathShimPath, p as scanLegacySkills, t as aliasInstallationToAccount, v as connectPrompts } from "./account-alias-D1iIc7j5.js";
14
+ import { n as focusReviewDesktop, r as runReviewAppLaunch } from "./review-app-launcher-L7xKjTLQ.js";
15
+ import { t as reviewAgentCliHelp } from "./agent-cli-B_gSzrhA.js";
17
16
  import { existsSync, mkdirSync, renameSync, writeFileSync } from "node:fs";
18
17
  import { realpath } from "node:fs/promises";
19
18
  import path from "node:path";
@@ -4334,7 +4333,7 @@ async function runReviewCli(input) {
4334
4333
  if (!Number.isInteger(port) || port < 0 || port > 65535) throw new ReviewCliUsageError("--port must be an integer between 0 and 65535.");
4335
4334
  const stateDir = reviewServerStateDir(authoringEnv(options.stateDir));
4336
4335
  if (options.detach) {
4337
- const { ensureBackgroundServer } = await import("./background-server-GMGjm8xu.js");
4336
+ const { ensureBackgroundServer } = await import("./background-server-CORnMQmu.js");
4338
4337
  const { discovery, started } = await ensureBackgroundServer({
4339
4338
  stateDir,
4340
4339
  env,
@@ -4356,7 +4355,7 @@ async function runReviewCli(input) {
4356
4355
  process.once("SIGINT", stop);
4357
4356
  process.once("SIGTERM", stop);
4358
4357
  process.once(DESKTOP_TAKEOVER_SIGNAL, takeover);
4359
- const { HeadlessServerBusyError, runHeadlessServer } = await import("./headless-host-CpqwtaaX.js");
4358
+ const { HeadlessServerBusyError, runHeadlessServer } = await import("./headless-host-Cnu-o0xk.js");
4360
4359
  try {
4361
4360
  await runHeadlessServer({
4362
4361
  stateDir,
@@ -4393,7 +4392,7 @@ async function runReviewCli(input) {
4393
4392
  configureJsonOutput(serverCommand.command("stop").description("Stop a background server started by --detach, the CLI, or Desktop").option("--state-dir <path>", "directory selected when starting the server"), "plain").action(async (_options, command) => {
4394
4393
  const options = command.optsWithGlobals();
4395
4394
  const stateDir = reviewServerStateDir(authoringEnv(options.stateDir));
4396
- const { headlessServerOwner, stopBackgroundServer } = await import("./background-server-GMGjm8xu.js");
4395
+ const { headlessServerOwner, stopBackgroundServer } = await import("./background-server-CORnMQmu.js");
4397
4396
  const owner = await headlessServerOwner(stateDir);
4398
4397
  const discovery = await readReviewServerDiscovery(stateDir);
4399
4398
  if (owner === void 0) {
@@ -4421,7 +4420,7 @@ async function runReviewCli(input) {
4421
4420
  if (!existsSync(path.join(stateDir, "review-api.db"))) throw new Error(`No saved reviews in ${stateDir}, so there is no server id to reset. Check --state-dir.`);
4422
4421
  const inUse = `A Whiteboard server is using ${stateDir}. Stop it first, then run whiteboard server reset-id again.`;
4423
4422
  if (await desktopUsesHome(stateDir, env)) return refuse(inUse, options.json);
4424
- const [{ openReviewProfile }, { withHeadlessServerLock }] = await Promise.all([import("./profile-DPqMPFYS.js"), import("./headless-host-CpqwtaaX.js")]);
4423
+ const [{ openReviewProfile }, { withHeadlessServerLock }] = await Promise.all([import("./profile-BmtFpq8d.js"), import("./headless-host-Cnu-o0xk.js")]);
4425
4424
  const reset = await withHeadlessServerLock(await realpath(stateDir), async () => {
4426
4425
  const local = await openReviewProfile(stateDir, { manageWorkspaces: false });
4427
4426
  try {
@@ -4443,7 +4442,7 @@ async function runReviewCli(input) {
4443
4442
  configureJsonOutput(remote.command("attach").description("Start a background server if none is healthy and report how to reach it").option("--state-dir <path>", "directory for saved reviews and server discovery").option("--groups <groups>", "comma-separated optional extension groups the Desktop has enabled, such as go").option("--replace", "stop a running server of another version that the CLI or Desktop started, and start this one"), "plain").action(async (_options, command) => {
4444
4443
  const options = command.optsWithGlobals();
4445
4444
  const stateDir = reviewServerStateDir(authoringEnv(options.stateDir));
4446
- const { remoteAttach } = await import("./remote-attach-BM9FaV1Q.js");
4445
+ const { remoteAttach } = await import("./remote-attach-C79X5M2Z.js");
4447
4446
  let attach;
4448
4447
  try {
4449
4448
  attach = await remoteAttach({
@@ -4470,7 +4469,7 @@ async function runReviewCli(input) {
4470
4469
  });
4471
4470
  configureJsonOutput(remote.command("extensions").description("Language extensions for the language server on a remote").command("ensure").description("Download the curated extensions for this machine and list them for the language server").option("--groups <groups>", "comma-separated optional extension groups the Desktop has enabled, such as go"), "plain").action(async (_options, command) => {
4472
4471
  const { json, groups } = command.optsWithGlobals();
4473
- const { ensureRemoteExtensions } = await import("./remote-extensions-VLpt_4Tn.js");
4472
+ const { ensureRemoteExtensions } = await import("./remote-extensions-Bw029iIS.js");
4474
4473
  const result = await ensureRemoteExtensions({
4475
4474
  env,
4476
4475
  groups: groups?.split(",").map((group) => group.trim())
@@ -4485,7 +4484,7 @@ async function runReviewCli(input) {
4485
4484
  configureJsonOutput(remote.command("uninstall").description("Remove what Whiteboard Desktop installed on this host, stopping a server it started").addOption(new Option("--keep-reviews", "leave the saved reviews in place").conflicts("deleteReviews")).addOption(new Option("--delete-reviews", "also delete the saved reviews")).option("--state-dir <path>", "directory for saved reviews and server discovery"), "plain").action(async (_options, command) => {
4486
4485
  const options = command.optsWithGlobals();
4487
4486
  const stateDir = reviewServerStateDir(authoringEnv(options.stateDir));
4488
- const { remoteUninstall } = await import("./remote-uninstall-DvBENfrg.js");
4487
+ const { remoteUninstall } = await import("./remote-uninstall-Aza0u1_3.js");
4489
4488
  let deleteReviews = options.deleteReviews ? true : options.keepReviews ? false : void 0;
4490
4489
  if (deleteReviews === void 0 && !options.json && input.stdin?.isTTY) {
4491
4490
  const prompt = createInterface$1({
@@ -4707,14 +4706,14 @@ async function runReviewCli(input) {
4707
4706
  command.showHelpAfterError(false).error("Markdown review migration is no longer supported. Ask your agent to migrate your old Whiteboard reviews.");
4708
4707
  });
4709
4708
  configureJsonOutput(configureJsonOutput(program.command("share").description("Upload an immutable review snapshot and return its share link"), "plain").option("--review <id>", "review ID").option("--version <number>", "Saved version to share").option("--preview", "Open the share link in Whiteboard Preview by default").option("--request-id <uuid>", "Reuse this ID when retrying the same immutable upload").action(async (options) => {
4710
- const { runShareCli } = await import("./cli-BPd7DLd-.js");
4709
+ const { runShareCli } = await import("./cli-CIP_-Fvm.js");
4711
4710
  state.exitCode = await runShareCli({
4712
4711
  ...input,
4713
4712
  ...options,
4714
4713
  env: authoringEnv()
4715
4714
  });
4716
4715
  }).command("revoke <share-id>").description("Revoke future downloads of a share"), "plain").action(async (shareId, options) => {
4717
- const { runShareCli } = await import("./cli-BPd7DLd-.js");
4716
+ const { runShareCli } = await import("./cli-CIP_-Fvm.js");
4718
4717
  state.exitCode = await runShareCli({
4719
4718
  ...input,
4720
4719
  ...options,
@@ -4795,7 +4794,7 @@ async function runReviewCli(input) {
4795
4794
  return commands;
4796
4795
  } });
4797
4796
  for (const [name, description] of [["api", "Call a JSON review authoring tool on the running server"], ["mcp", "Serve the JSON review authoring tools over stdio MCP"]]) configureOutput(program.command(name).description(description).argument("[args...]", "tool name and JSON input").allowUnknownOption().allowExcessArguments().helpOption(false).passThroughOptions().addHelpText("after", `\n${reviewAgentCliHelp}`), "plain").action(async (args) => {
4798
- const { runReviewAgentCli } = await import("./agent-cli-D4JapSBa.js");
4797
+ const { runReviewAgentCli } = await import("./agent-cli-DtjnkDSL.js");
4799
4798
  state.exitCode = await runReviewAgentCli({
4800
4799
  ...input,
4801
4800
  env: authoringEnv(),
package/dist/cli.js CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { a as jsonNumber, c as jsonString, o as jsonObject, u as parseJsonText } from "./src-X9phtB2j.js";
3
- import "./src-D0h06Qsl.js";
3
+ import "./src-Bew3mW9I.js";
4
4
  import { existsSync, readFileSync, readdirSync, realpathSync } from "node:fs";
5
5
  import path from "node:path";
6
6
  import os from "node:os";
@@ -17,7 +17,7 @@ async function runCli(effectivePath) {
17
17
  `);
18
18
  return 1;
19
19
  }
20
- const { runReviewCli } = await import("./cli-runner-iHNaGXZg.js");
20
+ const { runReviewCli } = await import("./cli-runner-dHnKnyNw.js");
21
21
  return runReviewCli({
22
22
  argv,
23
23
  cliPaths: {
@@ -1,7 +1,7 @@
1
- import "./src-KTjWplV9.js";
1
+ import "./review-home-paths-LdGS4SpR.js";
2
2
  import { N as devReviewHome } from "./s3-config-CjcLyFV5.js";
3
- import { n as askAgentIds } from "./thread-state-Dbs5siMf.js";
4
- import { t as ASK_THREAD_ENV } from "./request-origin-CtTmXRoS.js";
3
+ import { n as askAgentIds } from "./thread-state-XgVKaQ3-.js";
4
+ import { t as ASK_THREAD_ENV } from "./request-origin-DEQd09Db.js";
5
5
  import { createRequire } from "node:module";
6
6
  import { constants } from "node:fs";
7
7
  import { access, chmod, mkdir, readFile, rename, stat, writeFile } from "node:fs/promises";