@dev.fast/whiteboard 0.4.1-preview.20261027.141 → 0.4.1-preview.20261030.143
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/{account-alias-AJ6miBT5.js → account-alias-DtN9zBzt.js} +5 -6
- package/dist/{agent-cli-DIC2tBpL.js → agent-cli-D2WEQwul.js} +8 -9
- package/dist/agent-cli-m3uWrslh.js +2 -0
- package/dist/{agent-client-DyNmSHfO.js → agent-client-CXXjD60Q.js} +4 -4
- package/dist/{authoring-tools-B9MhiKw4.js → authoring-tools-BEGW2s0A.js} +34 -49
- package/dist/{background-server-CZaB8zFH.js → background-server-Cw7lddwb.js} +1 -1
- package/dist/{background-server-DlgbnDVt.js → background-server-D_4Xt3fF.js} +7 -6
- package/dist/build-info.json +1 -1
- package/dist/{cli-D7Lpc4ws.js → cli-SDWXOZPY.js} +1 -1
- package/dist/{cli-runner-JPkbHD7I.js → cli-runner-DaPGJWRf.js} +22 -23
- package/dist/cli.js +2 -2
- package/dist/{fuzzy-match-rWIeloqo.js → fuzzy-match-BMcd-rQ0.js} +3 -3
- package/dist/{headless-host-DmuAjcgt.js → headless-host-CMDr4BpH.js} +1 -1
- package/dist/{headless-host-Cn6WDmaL.js → headless-host-DDYA2wwn.js} +139 -223
- package/dist/{import-CUNdl3NP.js → import-LsDP99A9.js} +198 -506
- package/dist/{local-data-DxkQXCNG.js → local-data-G2I-77FX.js} +128 -105
- package/dist/{mcp-B154Vpj0.js → mcp-tqD6Fwvy.js} +12 -13
- package/dist/{package-paths-LcO6HNp_.js → package-paths-Cg6fnaGp.js} +1 -1
- package/dist/profile-Bw0hDDNd.js +2 -0
- package/dist/{profile-hC1iAoRB.js → profile-i2n1HdIg.js} +2 -2
- package/dist/{remote-attach-DhvNHMe1.js → remote-attach-BsOO_ER4.js} +4 -4
- package/dist/{remote-extensions-VLpt_4Tn.js → remote-extensions-Bw029iIS.js} +1 -1
- package/dist/{remote-extensions-DMKyDjAs.js → remote-extensions-MUUgbLJn.js} +2 -2
- package/dist/{remote-language-server-zgvAe8wb.js → remote-language-server-AamAHhw_.js} +4 -4
- package/dist/{remote-uninstall-BR-rIuvK.js → remote-uninstall-BH2ovwP1.js} +5 -5
- package/dist/{request-origin-BnA7Nnca.js → request-origin-BkrzpcVd.js} +3 -4
- package/dist/{review-app-launcher-B0Z4B8By.js → review-app-launcher-1tcH84u6.js} +2 -2
- package/dist/{src-KTjWplV9.js → review-home-paths-LdGS4SpR.js} +48 -8
- package/dist/{review-telemetry-yuCLNpDu.js → review-telemetry-B6mxAOXA.js} +4 -5
- package/dist/{runtime-5WG8rRgg.js → runtime-Bhk5L_SN.js} +1 -1
- package/dist/runtime.js +1 -1
- package/dist/server/desktop-host.js +35 -49
- package/dist/{server-discovery-Dj_xSDSa.js → server-discovery-nLX2SH_v.js} +2 -3
- package/dist/sharing/index.d.ts +893 -314
- package/dist/sharing/index.js +2 -2
- package/dist/{stored-document-migration-fQWLDqDx.js → src-B2b8cCoI.js} +1611 -2621
- package/dist/{src-BJ_MeEmN.js → src-Coec7jLU.js} +2 -1
- package/dist/{src-BTCRHmRM.js → src-Y30gweiK.js} +7 -1
- package/dist/stored-document-migration-Ca9BWqEF.js +1342 -0
- package/dist/{thread-state-BburMvgn.js → thread-state-DosGpp3S.js} +22 -2
- package/dist/tool-failure-CwTgI76j.js +715 -0
- package/instructions/animation.md +49 -318
- package/instructions/authoring.md +1 -1
- package/instructions/whiteboard.d.ts +286 -0
- package/package.json +8 -6
- package/src/animation-stage-kit.ts +413 -0
- package/src/review-api/README.md +5 -5
- package/src/review-api/activity.ts +10 -45
- package/src/review-api/agent-client.ts +2 -2
- package/src/review-api/anchor-quotes.ts +4 -6
- package/src/review-api/animation-drafts.ts +354 -0
- package/src/review-api/animation-runs.ts +54 -0
- package/src/review-api/ask-history.ts +4 -15
- package/src/review-api/authoring-tools.ts +61 -10
- package/src/review-api/azure-devops-provider.ts +1 -1
- package/src/review-api/comparison-coverage.ts +5 -3
- package/src/review-api/document-headings.ts +5 -3
- package/src/review-api/document-text.ts +37 -5
- package/src/review-api/file-lenses.ts +6 -4
- package/src/review-api/foreign-references.ts +2 -2
- package/src/review-api/github-provider.ts +1 -1
- package/src/review-api/http.ts +234 -390
- package/src/review-api/image-decode.ts +1 -1
- package/src/review-api/instructions.ts +19 -4
- package/src/review-api/lens-alignment.ts +1 -1
- package/src/review-api/link-preview.ts +1 -1
- package/src/review-api/local-data.ts +44 -75
- package/src/review-api/mcp.ts +10 -15
- package/src/review-api/onboarding.ts +1 -1
- package/src/review-api/provider.ts +2 -1
- package/src/review-api/public-tools.ts +91 -3
- package/src/review-api/pull-request.ts +1 -2
- package/src/review-api/read-schemas.ts +4 -3
- package/src/review-api/review-progress.ts +13 -20
- package/src/review-api/scratchpad-plan-upgrade.ts +1 -1
- package/src/review-api/store.ts +163 -47
- package/src/review-api/tool-failure.ts +1 -1
- package/src/review-api/traces.ts +1 -2
- package/src/review-api/workspaces.ts +18 -49
- package/src/review-api/worktree-source.ts +1 -1
- package/src/review-api/worktree-structural.integration.ts +1 -1
- package/src/review-checkout-paths.ts +2 -5
- package/src/review-head-checkout.ts +3 -14
- package/src/server/background-server.ts +4 -2
- package/src/server/desktop-host.ts +17 -9
- package/src/server/desktop-server.ts +4 -6
- package/src/server/json-review-reporting.ts +5 -24
- package/src/server/review-gateway-pushes.ts +1 -10
- package/src/server/review-server-core.ts +9 -14
- package/src/sharing/auth.ts +1 -1
- package/src/sharing/client.ts +86 -2
- package/src/sharing/export.ts +7 -8
- package/src/sharing/host.ts +112 -89
- package/src/sharing/import.ts +177 -714
- package/src/sharing/index.ts +1 -7
- package/src/sharing/repository.ts +19 -50
- package/src/stored-document-migration.ts +7 -4
- package/src/ui-telemetry-events.ts +1 -2
- package/src/viewed-coverage.ts +6 -20
- package/dist/agent-cli-BDcF54b3.js +0 -2
- package/dist/fs-utils-BMPLt0cr.js +0 -22
- package/dist/input-error-OLgB_h31.js +0 -11
- package/dist/lens-selection-BQxqiuWY.js +0 -223
- package/dist/profile-BLToeYh6.js +0 -2
- package/dist/review-home-paths-CjHB5c8m.js +0 -39
- package/dist/tool-failure-BuvwfVeF.js +0 -105
- package/src/lens-selection.ts +0 -266
- package/src/markdown-latex-math.ts +0 -230
- package/src/markdown.ts +0 -123
- package/src/review-api/blocks/animation.ts +0 -98
- package/src/review-api/blocks/call_stack_diff.ts +0 -75
- package/src/review-api/blocks/callout.ts +0 -24
- package/src/review-api/blocks/code.ts +0 -9
- package/src/review-api/blocks/code_peek.ts +0 -13
- package/src/review-api/blocks/database_lens.ts +0 -155
- package/src/review-api/blocks/definition.ts +0 -42
- package/src/review-api/blocks/divider.ts +0 -6
- package/src/review-api/blocks/flow_diagram.ts +0 -111
- package/src/review-api/blocks/image.ts +0 -10
- package/src/review-api/blocks/index.ts +0 -110
- package/src/review-api/blocks/markdown.ts +0 -17
- package/src/review-api/blocks/section.ts +0 -24
- package/src/review-api/blocks/sequence.ts +0 -136
- package/src/review-api/blocks/software_map.ts +0 -9
- package/src/review-api/blocks/trace_quote.ts +0 -10
- package/src/review-api/component-reference.ts +0 -47
- package/src/review-api/diff-lenses.ts +0 -175
- package/src/review-api/document.ts +0 -1260
- package/src/review-api/input-error.ts +0 -9
- package/src/sharing/routes.ts +0 -35
- package/src/source.ts +0 -92
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { n as isJsonObject } from "./src-X9phtB2j.js";
|
|
2
|
-
import { E as ReviewCliInstallStampSchema } from "./src-
|
|
3
|
-
import {
|
|
2
|
+
import { E as ReviewCliInstallStampSchema } from "./src-Coec7jLU.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-
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import { c as findExecutable, s as executableCommand } from "./fuzzy-match-rWIeloqo.js";
|
|
5
|
+
import { i as readReviewPackageVersion } from "./package-paths-Cg6fnaGp.js";
|
|
6
|
+
import { f as isDirectory, p as isFile } from "./thread-state-DosGpp3S.js";
|
|
7
|
+
import { c as findExecutable, s as executableCommand } from "./fuzzy-match-BMcd-rQ0.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 {
|
|
3
|
-
import { a as toolResultText, i as connectReviewInstance, s as ReviewApiError } from "./agent-client-
|
|
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-CXXjD60Q.js";
|
|
4
4
|
import { N as devReviewHome } from "./s3-config-CjcLyFV5.js";
|
|
5
|
-
import { n as readBuildCommit } from "./package-paths-
|
|
6
|
-
import "./
|
|
7
|
-
import {
|
|
8
|
-
import { n as
|
|
9
|
-
import {
|
|
10
|
-
import { i as publicTool, n as RECOVERY, r as callPublicTool, t as toolFailure } from "./tool-failure-BuvwfVeF.js";
|
|
5
|
+
import { n as readBuildCommit } from "./package-paths-Cg6fnaGp.js";
|
|
6
|
+
import { b as selectReviewInstance, u as REVIEW_INSTANCE_ENV } from "./server-discovery-nLX2SH_v.js";
|
|
7
|
+
import { n as reviewSessionAgent } from "./review-telemetry-B6mxAOXA.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-BkrzpcVd.js";
|
|
9
|
+
import { i as publicTool, n as RECOVERY, r as callPublicTool, t as toolFailure } from "./tool-failure-CwTgI76j.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-
|
|
46
|
+
const { serveReviewMcp } = await import("./mcp-tqD6Fwvy.js");
|
|
48
47
|
exitOnInstallUpdate(input.stderr);
|
|
49
48
|
await serveReviewMcp(async (key, agentKind) => {
|
|
50
49
|
const connected = await connectReviewInstance(key ? {
|
|
@@ -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-
|
|
3
|
-
import
|
|
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-
|
|
2
|
+
import { ot as ReviewInputError } from "./src-B2b8cCoI.js";
|
|
3
|
+
import "./src-Coec7jLU.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-nLX2SH_v.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-
|
|
262
|
+
const { ensureServerWithoutDesktop } = await import("./background-server-Cw7lddwb.js");
|
|
263
263
|
const server = await ensureServerWithoutDesktop({
|
|
264
264
|
selection,
|
|
265
265
|
env,
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { n as isJsonObject } from "./src-X9phtB2j.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { t as
|
|
5
|
-
import { t as findReviewPackageRoot } from "./package-paths-LcO6HNp_.js";
|
|
2
|
+
import { F as writableBlockTypes, N as componentReference, ct as activityEndSchema, f as pathTargetSchema, g as publishedEdits, lt as activityUpdateSchema, ot as ReviewInputError, st as activityBeginSchema } from "./src-B2b8cCoI.js";
|
|
3
|
+
import { n as uploadSchema, r as commandSchema } from "./local-data-G2I-77FX.js";
|
|
4
|
+
import { t as findReviewPackageRoot } from "./package-paths-Cg6fnaGp.js";
|
|
6
5
|
import { z } from "zod";
|
|
7
6
|
import { readFile } from "node:fs/promises";
|
|
8
7
|
import path from "node:path";
|
|
@@ -67,52 +66,15 @@ const readQuerySchemas = {
|
|
|
67
66
|
}),
|
|
68
67
|
commits: z.strictObject({ version })
|
|
69
68
|
};
|
|
70
|
-
//#endregion
|
|
71
|
-
//#region src/review-api/component-reference.ts
|
|
72
|
-
/** The animation component, shown only while Animations are on. */
|
|
73
|
-
const ANIMATION = ["- animation {title, html, frames: {key, title, label?, caption?, duration? (ms)}[] (1 to 60), code?: {name: anchor}, height?: \"auto\" (default) | number (120 to 1200 CSS px), pins?}; declare every possible frame", "Use an animation for change over time that a static diagram cannot show: state before and after, a cache filling, data changing as a request crosses layers. It can sit in design beside the diagram, or replace it when the motion is the point. If nothing changes between frames, use a sequence or flow_diagram instead: their steps and nodes link to code. Read session_get_instructions({topic:\"animation\"}) before writing one."];
|
|
74
|
-
/** Every component's fields, for session_get_instructions: the edit tool's
|
|
75
|
-
* description must stay short enough that clients don't cut it off. */
|
|
76
|
-
const COMPONENT_REFERENCE = [
|
|
77
|
-
"## Components",
|
|
78
|
-
"",
|
|
79
|
-
"session_edit's content is one component, named by its type. Fields, with ? for optional and anchor for a source anchor string:",
|
|
80
|
-
"",
|
|
81
|
-
"- markdown {markdown, pins?}",
|
|
82
|
-
"- code {text, language?, caption?}",
|
|
83
|
-
"- divider {}",
|
|
84
|
-
"- code_peek {source: anchor, caption?, pins?}",
|
|
85
|
-
"- section {title, children: component[], defaultCollapsed?}",
|
|
86
|
-
"- callout {children: component[], title?, tone?: info|warning|danger|success}",
|
|
87
|
-
"- image {assetId from session_upload, alt, caption?}",
|
|
88
|
-
"- trace_quote {traceId, eventId, text}",
|
|
89
|
-
"- software_map {mapVersionId, focusElementId?}",
|
|
90
|
-
"- sequence {title, actors: {key: label}, steps: step[], pins?}",
|
|
91
|
-
"- step {from, to (actor keys), label, style?: call|return|async, and exactly one of source: anchor or anchor[] (at most 4), explanation, or code: {text, language?}; pins?}",
|
|
92
|
-
"A step's source is the line where its arrow leaves `from` (the call, return or emit). Add an additional range only when that line can't be read without it: the type or schema of what it passes, or the code that builds its argument. Never the callee's body; that is the next step.",
|
|
93
|
-
"- flow_diagram {title, nodes: flow_node[] (1 to 100), edges: flow_edge[], description?, direction?: right|down, pins?}",
|
|
94
|
-
"- flow_node {key, label, description?, kind?: process|decision|terminal, attachments?: {label, sources: anchor[], pins?}[], link?: {from or to, label?, style?}}",
|
|
95
|
-
"- flow_edge {from, to (node keys), label?, style?: solid|dashed}",
|
|
96
|
-
"- call_stack_diff {title, base: frame[], head: frame[], pins?}; either side may be empty",
|
|
97
|
-
"- frame {source: anchor, label?, key?, parentKey? (an earlier frame on that side), callSite?: anchor, contextSources?: anchor[], via?: {kind: call|queue|callback|rpc, reason}, pins?}",
|
|
98
|
-
"- database_lens {title, actors: {key: label}, stores: {key: store}, useCases: useCase[] (1 or more), pins?}",
|
|
99
|
-
"- store {label, storage: relational|document, collections: {key: {label, fields: {key: field}, source?: anchor of its schema declaration}}, dataStoreKind?: database|objectStore|bucket|artifactStore|fileStore}",
|
|
100
|
-
"- field {label, dataType, nullable?, primaryKey?, references?: {store, collection, field}, fields?: {key: field}}",
|
|
101
|
-
"- useCase {label, summary?, operations: operation[] (1 or more)}; operation {kind: read|write, actor, store, collection, label, source: anchor, field?, detail?, pins?}, naming declared keys",
|
|
102
|
-
...ANIMATION,
|
|
103
|
-
"",
|
|
104
|
-
"Example (replace its path and lines with verified ones): {\"type\":\"sequence\",\"title\":\"Request\",\"actors\":{\"a\":\"Client\",\"b\":\"Server\"},\"steps\":[{\"from\":\"a\",\"to\":\"b\",\"label\":\"Send\",\"source\":\"head/src/app.ts#L10-L20\"}]}"
|
|
105
|
-
].join("\n");
|
|
106
|
-
/** Keep disabled experimental components out of agent guidance. */
|
|
107
|
-
function componentReference(animationsEnabled) {
|
|
108
|
-
return animationsEnabled ? COMPONENT_REFERENCE : COMPONENT_REFERENCE.split("\n").filter((line) => !ANIMATION.includes(line)).join("\n");
|
|
109
|
-
}
|
|
110
69
|
const instructionsQuerySchema = z.strictObject({ topic: z.enum([
|
|
111
70
|
"authoring",
|
|
112
71
|
"animation",
|
|
113
72
|
"file-lenses",
|
|
114
73
|
"trace-archaeology"
|
|
115
74
|
]).default("authoring") });
|
|
75
|
+
/** Keep disabled experimental components out of agent guidance. */
|
|
76
|
+
const desktopBlockTypes = (animationsEnabled) => writableBlockTypes.filter((type) => animationsEnabled || type !== "animation");
|
|
77
|
+
const COMPONENT_EXAMPLE = "Example (replace its path and lines with verified ones): {\"type\":\"sequence\",\"title\":\"Request\",\"actors\":{\"a\":\"Client\",\"b\":\"Server\"},\"steps\":[{\"from\":\"a\",\"to\":\"b\",\"label\":\"Send\",\"source\":\"head/src/app.ts#L10-L20\"}]}";
|
|
116
78
|
const cache = /* @__PURE__ */ new Map();
|
|
117
79
|
function read(root, name) {
|
|
118
80
|
const file = path.join(root, "instructions", `${name}.md`);
|
|
@@ -133,7 +95,11 @@ async function renderInstructions(topic, context, root = findReviewPackageRoot(i
|
|
|
133
95
|
const more = [...context.traceEnabled ? ["- Why code exists / past agent sessions: `session_get_instructions({topic:\"trace-archaeology\"})`"] : []];
|
|
134
96
|
return [
|
|
135
97
|
await read(root, "authoring"),
|
|
136
|
-
|
|
98
|
+
[
|
|
99
|
+
componentReference(desktopBlockTypes(context.animationsEnabled === true)),
|
|
100
|
+
"",
|
|
101
|
+
COMPONENT_EXAMPLE
|
|
102
|
+
].join("\n"),
|
|
137
103
|
...context.traceEnabled ? ["## Traces\n\nAt the end, run `whiteboard trace list --session <sessionId> --json`, which covers every commit in the review. If it lists no sessions, there are no traces to quote: skip this step. Otherwise read `session_get_instructions({topic:\"trace-archaeology\"})` and rewrite as much as possible of the what/why, design, and requirements sections in terms of literal trace quotes from the user."] : [],
|
|
138
104
|
...more.length ? [`## More guidance\n\n${more.join("\n")}`] : []
|
|
139
105
|
].join("\n\n");
|
|
@@ -178,7 +144,8 @@ function authoringTools(traceEnabled = false, animationsEnabled = false) {
|
|
|
178
144
|
"Anchors are head/path#L10-L20 or base/path#L7, or diff/path#L84-R90 for a range across sides, with repository-relative paths and 1-based inclusive lines. pins {head, base?} say which commits of the whiteboard's repository anchors quote: a step, frame, attachment or operation without pins uses its block's, and a block without them the review's.",
|
|
179
145
|
"insert adds content: parentId nests it, afterId places it, and omitted placement appends. update patches a component's own fields; null removes an optional one. A section's children and a diagram's units change through their own IDs; a call stack's frames change by replacing the call stack. move and remove take a targetId; removing a flow_node removes its edges.",
|
|
180
146
|
"The host assigns short durable IDs. The result names the edited component and, for an insert or replace, its first-level children, and quotes the first and last line of each anchor the edit added or changed (the first 20; unquotedAnchors counts the rest): check they are the lines you meant. Accepted edits save at once. An edit to a block the user is editing is refused with an error: edit another block, or retry later.",
|
|
181
|
-
"While a reader may be watching, write small and often: one paragraph per edit. Insert a new diagram whole. Change one already drawn a unit at a time (a flow_node, flow_edge or step, with parentId naming the diagram), and link each added flow_node to a node already drawn."
|
|
147
|
+
"While a reader may be watching, write small and often: one paragraph per edit. Insert a new diagram whole. Change one already drawn a unit at a time (a flow_node, flow_edge or step, with parentId naming the diagram), and link each added flow_node to a node already drawn.",
|
|
148
|
+
...animationsEnabled ? ["An animation is edited as files: review_checkout writes it to a folder, you edit the files with your own file tools, and an edit with fromFiles naming that folder publishes it in place of content or changes. Publish the same folder again after each round of edits."] : []
|
|
182
149
|
].join("\n"),
|
|
183
150
|
lens_edit: "Edit one Diff-view lens. Lenses partition the review's change for the Diff view; they sit beside the document (never in it) and version with it. The host assigns durable lens IDs; updates replace only the fields supplied. Write one lens per call while a reader may be watching; each draws in on the Diffs page. Pass your activityId so your courier draws each lens. The result identifies the lens and reports uncategorized: changed lines no lens selects yet, grouped by file. Keep adding lenses until it is empty or what remains is deliberate. review_lens_get reads the current lenses and gaps.",
|
|
184
151
|
rename: "Change the review title.",
|
|
@@ -221,9 +188,14 @@ function authoringTools(traceEnabled = false, animationsEnabled = false) {
|
|
|
221
188
|
open: z.boolean().optional()
|
|
222
189
|
},
|
|
223
190
|
...type === "set_target" && { target: pathTargetSchema },
|
|
224
|
-
...type === "edit" && { edit: publishedEdits(
|
|
191
|
+
...type === "edit" && { edit: animationsEnabled ? withDraftFiles(publishedEdits(desktopBlockTypes(true))) : publishedEdits(desktopBlockTypes(false)) }
|
|
225
192
|
}), "POST", "/commands", type);
|
|
226
193
|
}),
|
|
194
|
+
...animationsEnabled ? [tool("checkout", "Write an animation to a folder of files to edit with your own file tools: animation.html (its html), frames.json (its frames, each with its data), scenarios.json and block.json (title, code, height, pins). Then publish the folder with review_edit, giving fromFiles instead of content or changes. dir defaults to a folder Whiteboard manages; checking out again overwrites it. A publish is refused if the animation changed after the checkout.", z.strictObject({
|
|
195
|
+
...review,
|
|
196
|
+
targetId: id,
|
|
197
|
+
dir: id.optional()
|
|
198
|
+
}), "GET", "/:reviewId/inspect")] : [],
|
|
227
199
|
tool("list", "List saved reviews.", z.strictObject({}), "GET", ""),
|
|
228
200
|
tool("get", "Read a readable, nested text outline with editable IDs. targetId reads one component in full; full:true reads all content. Use format:json for raw node data or snapshots instead of text.", z.strictObject({
|
|
229
201
|
...review,
|
|
@@ -231,8 +203,8 @@ function authoringTools(traceEnabled = false, animationsEnabled = false) {
|
|
|
231
203
|
}), "GET", "/:reviewId/inspect"),
|
|
232
204
|
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
205
|
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
|
|
235
|
-
tool("environment", "Acquire and recheck this review's current
|
|
206
|
+
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"),
|
|
207
|
+
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
208
|
...review,
|
|
237
209
|
retry: z.boolean().optional()
|
|
238
210
|
}), "POST", "/:reviewId/environment"),
|
|
@@ -240,6 +212,19 @@ function authoringTools(traceEnabled = false, animationsEnabled = false) {
|
|
|
240
212
|
tool("upload", "Retain an image or trace for use in a review. kind:\"image\" takes base64; kind:\"trace\" takes trace. Reusing an upload ID requires identical content; rejected uploads are not saved.", uploadInput, "POST", "/resources")
|
|
241
213
|
];
|
|
242
214
|
}
|
|
215
|
+
/** Agents may publish an animation's draft folder in place of content or
|
|
216
|
+
* changes; the agent boundary reads the files before the host sees the edit. */
|
|
217
|
+
function withDraftFiles(edit) {
|
|
218
|
+
const fromFiles = z.string().min(1).describe("An animation's draft folder, from review_checkout or written yourself: publishes its files as the content (insert, replace) or changes (update).");
|
|
219
|
+
const [insert, replace, update, move, remove] = edit.options;
|
|
220
|
+
return z.discriminatedUnion("type", [
|
|
221
|
+
insert.partial({ content: true }).extend({ fromFiles: fromFiles.optional() }),
|
|
222
|
+
replace.partial({ content: true }).extend({ fromFiles: fromFiles.optional() }),
|
|
223
|
+
update.partial({ changes: true }).extend({ fromFiles: fromFiles.optional() }),
|
|
224
|
+
move,
|
|
225
|
+
remove
|
|
226
|
+
]);
|
|
227
|
+
}
|
|
243
228
|
/** Drops repositoryId from pins: the host fills in the board's own. */
|
|
244
229
|
function withoutRepositoryIds(schema) {
|
|
245
230
|
return JSON.parse(JSON.stringify(schema), (_key, value) => {
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as headlessServerOwner, c as stopBackgroundServer, i as ensureServerWithoutDesktop, r as ensureBackgroundServer } from "./background-server-
|
|
1
|
+
import { a as headlessServerOwner, c as stopBackgroundServer, i as ensureServerWithoutDesktop, r as ensureBackgroundServer } from "./background-server-D_4Xt3fF.js";
|
|
2
2
|
export { ensureBackgroundServer, ensureServerWithoutDesktop, headlessServerOwner, stopBackgroundServer };
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import "./
|
|
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-
|
|
4
|
-
import { a as readReviewServerHealth, c as reviewServerStateDir, i as readReviewServerDiscovery, n as desktopOwnsHome, p as desktopUsesHome, r as headlessServerLockPath } from "./server-discovery-
|
|
5
|
-
import { t as desktopApplicationInstalled } from "./review-app-launcher-
|
|
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-nLX2SH_v.js";
|
|
5
|
+
import { t as desktopApplicationInstalled } from "./review-app-launcher-1tcH84u6.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
|
-
|
|
33
|
+
const started = discovery?.serverPid === child.pid;
|
|
34
|
+
if (discovery && (started || child.exited)) return {
|
|
34
35
|
discovery,
|
|
35
|
-
started
|
|
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) {
|
package/dist/build-info.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":"0.4.1-preview.
|
|
1
|
+
{"version":"0.4.1-preview.20261030.143","commit":"6900e30267289f6b6d3d16ecf8b7f626ff0c355f","dirty":true,"builtAt":"2026-10-30T04:40:00.211Z"}
|
|
@@ -1,19 +1,18 @@
|
|
|
1
|
-
import { D as __commonJSMin, E as setLocalVcsCommandObserver, O as __require, k as __toESM } from "./src-
|
|
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-
|
|
4
|
-
import { $ as
|
|
5
|
-
import { o as ReviewApiClient, s as ReviewApiError } from "./agent-client-
|
|
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-Coec7jLU.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-CXXjD60Q.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-
|
|
9
|
-
import { t as resolveReviewRoot } from "./runtime-
|
|
10
|
-
import "./
|
|
11
|
-
import {
|
|
12
|
-
import { t as
|
|
13
|
-
import { t as
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import { t as reviewAgentCliHelp } from "./agent-cli-DIC2tBpL.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-nLX2SH_v.js";
|
|
11
|
+
import { t as ReviewTelemetry } from "./review-telemetry-B6mxAOXA.js";
|
|
12
|
+
import { t as fuzzyRank } from "./fuzzy-match-BMcd-rQ0.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-DtN9zBzt.js";
|
|
14
|
+
import { n as focusReviewDesktop, r as runReviewAppLaunch } from "./review-app-launcher-1tcH84u6.js";
|
|
15
|
+
import { t as reviewAgentCliHelp } from "./agent-cli-D2WEQwul.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-
|
|
4336
|
+
const { ensureBackgroundServer } = await import("./background-server-Cw7lddwb.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-
|
|
4358
|
+
const { HeadlessServerBusyError, runHeadlessServer } = await import("./headless-host-CMDr4BpH.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-
|
|
4395
|
+
const { headlessServerOwner, stopBackgroundServer } = await import("./background-server-Cw7lddwb.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-
|
|
4423
|
+
const [{ openReviewProfile }, { withHeadlessServerLock }] = await Promise.all([import("./profile-Bw0hDDNd.js"), import("./headless-host-CMDr4BpH.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-
|
|
4445
|
+
const { remoteAttach } = await import("./remote-attach-BsOO_ER4.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-
|
|
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-
|
|
4487
|
+
const { remoteUninstall } = await import("./remote-uninstall-BH2ovwP1.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-
|
|
4709
|
+
const { runShareCli } = await import("./cli-SDWXOZPY.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-
|
|
4716
|
+
const { runShareCli } = await import("./cli-SDWXOZPY.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-
|
|
4797
|
+
const { runReviewAgentCli } = await import("./agent-cli-m3uWrslh.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-
|
|
3
|
+
import "./src-Coec7jLU.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-
|
|
20
|
+
const { runReviewCli } = await import("./cli-runner-DaPGJWRf.js");
|
|
21
21
|
return runReviewCli({
|
|
22
22
|
argv,
|
|
23
23
|
cliPaths: {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import "./
|
|
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-
|
|
4
|
-
import { t as ASK_THREAD_ENV } from "./request-origin-
|
|
3
|
+
import { n as askAgentIds } from "./thread-state-DosGpp3S.js";
|
|
4
|
+
import { t as ASK_THREAD_ENV } from "./request-origin-BkrzpcVd.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";
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { i as withHeadlessServerLock, n as runHeadlessServer, r as takeOverServerHome, t as HeadlessServerBusyError } from "./headless-host-
|
|
1
|
+
import { i as withHeadlessServerLock, n as runHeadlessServer, r as takeOverServerHome, t as HeadlessServerBusyError } from "./headless-host-DDYA2wwn.js";
|
|
2
2
|
export { HeadlessServerBusyError, runHeadlessServer, takeOverServerHome, withHeadlessServerLock };
|