@dev.fast/whiteboard 0.4.0 → 0.4.1-preview.20261026.137
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-2yTAxoBx.js → account-alias-BpH8VvTR.js} +2 -2
- package/dist/agent-cli-DFWrNoGJ.js +2 -0
- package/dist/{agent-cli-CHNDd4Ga.js → agent-cli-DckMzOU_.js} +6 -6
- package/dist/{agent-client-Dc0vHFJt.js → agent-client-D4FSEDX4.js} +3 -3
- package/dist/{authoring-tools-D8EkIDjm.js → authoring-tools-DmIJZq0b.js} +21 -8
- package/dist/{background-server-DHWHzpo5.js → background-server-B1uwDQTr.js} +2 -2
- package/dist/{background-server-DyWnPJyZ.js → background-server-BPZ3GQan.js} +1 -1
- package/dist/build-info.json +1 -1
- package/dist/{cli-runner-DFBaVGij.js → cli-runner-DVEDbjXo.js} +17 -17
- package/dist/{cli-qZomwJmK.js → cli-tWBQpq27.js} +1 -1
- package/dist/cli.js +2 -2
- package/dist/{client-p9WB8Sj0.js → client-C8vT0mhW.js} +3 -3
- package/dist/{fuzzy-match-CfSxqzBF.js → fuzzy-match-BNLXmpbv.js} +2 -2
- package/dist/{headless-host-dwlqhqMY.js → headless-host-B63e2z2j.js} +1 -1
- package/dist/{headless-host-DJhcab6r.js → headless-host-Dl9g9Fvd.js} +37 -17
- package/dist/{lens-selection-9byzEgvU.js → lens-selection-EuZdag4Q.js} +1 -1
- package/dist/{local-data-DHedfhxw.js → local-data-C0OJttzT.js} +92 -63
- package/dist/{mcp-Br-r_wwR.js → mcp-D74cFQNM.js} +17 -8
- package/dist/profile-CAn8Qdeh.js +2 -0
- package/dist/{profile-D9wdlPgw.js → profile-DS1F6PBF.js} +1 -1
- package/dist/{remote-attach-DSGpTOJ4.js → remote-attach-DTByuwBs.js} +3 -3
- package/dist/{remote-language-server-Dx13Mg2m.js → remote-language-server-DQfg07BB.js} +1 -1
- package/dist/{remote-uninstall-Dp2o3qz0.js → remote-uninstall-aXApHJPy.js} +3 -3
- package/dist/{request-origin-CNSLVn7x.js → request-origin-BIBW432J.js} +12 -3
- package/dist/{review-app-launcher-BZAnR8Vp.js → review-app-launcher-Brn60fPu.js} +2 -2
- package/dist/{review-telemetry-BM-_KdLi.js → review-telemetry-ChlsTRPN.js} +2 -2
- package/dist/server/desktop-host.js +44 -10
- package/dist/{server-discovery-DKLIOgg3.js → server-discovery-BchUrwFW.js} +1 -1
- package/dist/sharing/index.d.ts +53 -3
- package/dist/sharing/index.js +1 -1
- package/dist/{src-DYHVzX3b.js → src-DEOc8bvC.js} +63 -2
- package/dist/{stored-document-migration-DEt8iwem.js → stored-document-migration-BCFx07Bq.js} +52 -11
- package/dist/{thread-state-CO97FUqK.js → thread-state-CbLB0jUA.js} +1 -1
- package/dist/{tool-failure-C1L1vJyz.js → tool-failure-DlU9hn7_.js} +2 -2
- package/instructions/animation.md +345 -0
- package/instructions/authoring.md +2 -2
- package/package.json +7 -7
- package/src/fixtures/blocks/animation.json +19 -0
- package/src/review-api/authoring-tools.ts +17 -6
- package/src/review-api/blocks/animation.ts +98 -0
- package/src/review-api/blocks/index.ts +3 -0
- package/src/review-api/blocks/sequence.ts +3 -1
- package/src/review-api/comparison-coverage.ts +120 -89
- package/src/review-api/component-reference.ts +16 -0
- package/src/review-api/document-text.ts +11 -0
- package/src/review-api/document.ts +26 -5
- package/src/review-api/http.ts +31 -2
- package/src/review-api/instructions.ts +11 -2
- package/src/review-api/local-data.ts +21 -4
- package/src/review-api/mcp.ts +22 -14
- package/src/review-preferences.ts +43 -0
- package/src/server/desktop-server.ts +24 -0
- package/src/server/review-server-core.ts +2 -0
- package/src/server/structural-comparisons.ts +5 -11
- package/src/server/structural-diff.ts +8 -2
- package/src/ui-telemetry-events.ts +9 -0
- package/dist/agent-cli-Cn4-16XA.js +0 -2
- package/dist/profile-BopGMZUh.js +0 -2
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { T as runVcsSync, _ as listTrackedFilesAtCommit, a as diff, b as resolveRepoContext, c as diffFileSummariesWorkingTree, d as git, f as gitAt, g as listCommitRange, h as jjRevisionIsConflicted, i as detectLocalVcs, l as diffTrees, m as gitCommonDirSync, n as createBlobBatchReader, p as gitCommonDir, s as diffFileSummariesTrees, t as LocalVcsToolsMissingError, u as diffWorkingTree, v as parseGitRemote, w as runVcs, x as resolveRevision, y as readFileAtCommit } from "./src-X9ZebeOD.js";
|
|
2
2
|
import { c as jsonString, m as isStringValue, n as isJsonObject, o as jsonObject, u as parseJsonText } from "./src-X9phtB2j.js";
|
|
3
|
-
import { F as structuralChangeCounts, P as
|
|
3
|
+
import { F as decodeStructuralDiffEvent, I as structuralChangeCounts, P as applyStructuralUpdate, c as boardIconKind, l as boardTitle } from "./src-DEOc8bvC.js";
|
|
4
4
|
import "./src-Z1x4-Qmb.js";
|
|
5
|
-
import { b as updateCoverage, c as parseAnchor, f as sourceAnchors, g as intersectIntervals, h as emptyCoverage, p as coverageSchema, v as subtractIntervals, y as unionIntervals } from "./lens-selection-
|
|
6
|
-
import { $ as lensEditSchema, A as editSchema, B as resourceReferences, C as applyEdit, D as boardRepositoryId, E as boardLinks, F as pinnedRepositoryIds, H as respellDocumentLinks, I as pinsSchema, J as checkReferences, K as sourceReferences, M as explicitPins, O as commitLinkCommits, P as pinDocumentReferences, Q as applyLensEdit, S as anchorPins, T as assignMissingIds, U as respellEditLinks, V as respellCommitLinks, W as reviewTargetSchema, Y as documentAdvice, _ as fetchPullRequest, a as SoftwareModelValidationError, at as requireVisibleSource, b as textIncludesQuote, c as traceSchema, ct as markdownText, d as setPullRequest, f as sourceBranchName, g as defaultPullRequestDeps, h as GitHubRefusedRead, i as readStoredDocument, it as fileLineRangeSchema, j as elements, k as documentSchema, l as pullRequestKey, lt as parseMarkdown, m as resolvePullRequest, n as migrateStoredDocument, nt as SourceRangeError, o as defineSoftwareMap, ot as sliceSourceRange, q as summarizeEdit, r as migrateStoredLenses, rt as checkSourcePath, st as markdownNodes, tt as lensSelections, u as pullRequestUrl, v as remoteUrls, w as assignFreshIds, x as adoptFlowUnits, y as azureRepositoryOf, z as resourceReference } from "./stored-document-migration-
|
|
5
|
+
import { b as updateCoverage, c as parseAnchor, f as sourceAnchors, g as intersectIntervals, h as emptyCoverage, p as coverageSchema, v as subtractIntervals, y as unionIntervals } from "./lens-selection-EuZdag4Q.js";
|
|
6
|
+
import { $ as lensEditSchema, A as editSchema, B as resourceReferences, C as applyEdit, D as boardRepositoryId, E as boardLinks, F as pinnedRepositoryIds, H as respellDocumentLinks, I as pinsSchema, J as checkReferences, K as sourceReferences, M as explicitPins, O as commitLinkCommits, P as pinDocumentReferences, Q as applyLensEdit, S as anchorPins, T as assignMissingIds, U as respellEditLinks, V as respellCommitLinks, W as reviewTargetSchema, Y as documentAdvice, _ as fetchPullRequest, a as SoftwareModelValidationError, at as requireVisibleSource, b as textIncludesQuote, c as traceSchema, ct as markdownText, d as setPullRequest, f as sourceBranchName, g as defaultPullRequestDeps, h as GitHubRefusedRead, i as readStoredDocument, it as fileLineRangeSchema, j as elements, k as documentSchema, l as pullRequestKey, lt as parseMarkdown, m as resolvePullRequest, n as migrateStoredDocument, nt as SourceRangeError, o as defineSoftwareMap, ot as sliceSourceRange, q as summarizeEdit, r as migrateStoredLenses, rt as checkSourcePath, st as markdownNodes, tt as lensSelections, u as pullRequestUrl, v as remoteUrls, w as assignFreshIds, x as adoptFlowUnits, y as azureRepositoryOf, z as resourceReference } from "./stored-document-migration-BCFx07Bq.js";
|
|
7
7
|
import { t as ReviewInputError } from "./input-error-OLgB_h31.js";
|
|
8
8
|
import { A as processStartIdentity, L as writePrivateJsonAtomic, O as pidReused, j as withFileLock, k as processIsAlive } from "./s3-config-CjcLyFV5.js";
|
|
9
9
|
import { t as errorMessage } from "./error-message-OtiDonty.js";
|
|
10
10
|
import { s as safeStorageSegment } from "./review-home-paths-CG-sb9Cw.js";
|
|
11
11
|
import { r as isMissingFileError } from "./fs-utils-BMPLt0cr.js";
|
|
12
|
-
import { a as askHistoryEntrySchema, i as askEntrySchema, o as askOfferSchema, s as askPermissionsSchema } from "./thread-state-
|
|
12
|
+
import { a as askHistoryEntrySchema, i as askEntrySchema, o as askOfferSchema, s as askPermissionsSchema } from "./thread-state-CbLB0jUA.js";
|
|
13
13
|
import { createRequire } from "node:module";
|
|
14
14
|
import crypto, { createHash, randomUUID } from "node:crypto";
|
|
15
15
|
import { z } from "zod";
|
|
@@ -819,7 +819,7 @@ async function* structuralDiff(input) {
|
|
|
819
819
|
break;
|
|
820
820
|
case "merge-base": args.push(`${comparison.base}...${comparison.head}`);
|
|
821
821
|
}
|
|
822
|
-
args.push("--", ...input.paths ?? []);
|
|
822
|
+
args.push("--defer", "--", ...input.paths ?? []);
|
|
823
823
|
const startupAbort = new AbortController();
|
|
824
824
|
const startup = setTimeout(() => startupAbort.abort(), 12e4);
|
|
825
825
|
const signal = AbortSignal.any([startupAbort.signal, input.signal]);
|
|
@@ -850,6 +850,7 @@ async function* structuralDiff(input) {
|
|
|
850
850
|
let completed = false;
|
|
851
851
|
let aborted;
|
|
852
852
|
let failed = 0;
|
|
853
|
+
const sent = /* @__PURE__ */ new Set();
|
|
853
854
|
const lines = createInterface({
|
|
854
855
|
input: child.stdout,
|
|
855
856
|
crlfDelay: Infinity
|
|
@@ -868,7 +869,8 @@ async function* structuralDiff(input) {
|
|
|
868
869
|
completed = true;
|
|
869
870
|
failed = event.failed;
|
|
870
871
|
aborted = event.aborted;
|
|
871
|
-
} else if (event.type
|
|
872
|
+
} else if (event.type === "file") sent.add((event.file.rhs ?? event.file.lhs).path);
|
|
873
|
+
else if (event.type !== "update" || !sent.has((event.file.rhs ?? event.file.lhs).path)) throw new Error(`Unexpected diffr event: ${event.type}`);
|
|
872
874
|
yield event;
|
|
873
875
|
}
|
|
874
876
|
if (!completed) {
|
|
@@ -908,11 +910,11 @@ var StructuralComparisons = class {
|
|
|
908
910
|
yield* entry.read(input.signal);
|
|
909
911
|
} finally {
|
|
910
912
|
entry.readers--;
|
|
911
|
-
if (!entry.done && !entry.
|
|
913
|
+
if (!entry.done && !entry.readers || entry.error || entry.failed) {
|
|
912
914
|
entry.abort.abort();
|
|
913
915
|
this.entries.delete(key);
|
|
914
916
|
}
|
|
915
|
-
const idle = [...this.entries].filter(([, value]) =>
|
|
917
|
+
const idle = [...this.entries].filter(([, value]) => value.done && !value.readers);
|
|
916
918
|
for (const [oldKey, old] of idle.slice(0, -10)) {
|
|
917
919
|
old.abort.abort();
|
|
918
920
|
this.entries.delete(oldKey);
|
|
@@ -959,7 +961,6 @@ var Comparison = class {
|
|
|
959
961
|
done = false;
|
|
960
962
|
error;
|
|
961
963
|
failed = false;
|
|
962
|
-
initialReady = false;
|
|
963
964
|
remaining;
|
|
964
965
|
listeners = /* @__PURE__ */ new Set();
|
|
965
966
|
constructor(input) {
|
|
@@ -971,13 +972,10 @@ var Comparison = class {
|
|
|
971
972
|
...input,
|
|
972
973
|
signal: this.abort.signal
|
|
973
974
|
})) {
|
|
974
|
-
if (event.type === "start")
|
|
975
|
-
|
|
976
|
-
this.initialReady = this.remaining.size === 0;
|
|
977
|
-
} else if (event.type === "file") {
|
|
975
|
+
if (event.type === "start") this.remaining = new Set(event.files.map((entry) => (entry.file.rhs ?? entry.file.lhs).path));
|
|
976
|
+
else if (event.type === "file") {
|
|
978
977
|
const path = (event.file.rhs ?? event.file.lhs).path;
|
|
979
978
|
if (!this.remaining?.delete(path)) throw new Error(`Unexpected structural result: ${path}`);
|
|
980
|
-
this.initialReady = this.remaining.size === 0;
|
|
981
979
|
}
|
|
982
980
|
if (event.type === "complete") this.failed = event.failed > 0 || !!event.aborted;
|
|
983
981
|
this.events.push(event);
|
|
@@ -1436,53 +1434,73 @@ async function comparisonCoverage(data, reviewId, pins, signal, publish) {
|
|
|
1436
1434
|
publish?.(current());
|
|
1437
1435
|
const baseFiles = new Map(coverage.files.map((file, index) => [file.previousPath ?? file.path, index]));
|
|
1438
1436
|
const headFiles = new Map(coverage.files.map((file, index) => [file.path, index]));
|
|
1439
|
-
|
|
1440
|
-
|
|
1441
|
-
|
|
1442
|
-
|
|
1443
|
-
|
|
1444
|
-
|
|
1445
|
-
|
|
1446
|
-
|
|
1447
|
-
|
|
1448
|
-
|
|
1449
|
-
|
|
1450
|
-
|
|
1451
|
-
|
|
1452
|
-
|
|
1453
|
-
|
|
1454
|
-
|
|
1455
|
-
|
|
1456
|
-
|
|
1457
|
-
|
|
1458
|
-
|
|
1459
|
-
|
|
1460
|
-
|
|
1461
|
-
|
|
1462
|
-
|
|
1463
|
-
|
|
1464
|
-
|
|
1465
|
-
|
|
1466
|
-
|
|
1467
|
-
|
|
1468
|
-
|
|
1469
|
-
|
|
1470
|
-
|
|
1471
|
-
|
|
1472
|
-
|
|
1437
|
+
return new Promise((resolve, reject) => {
|
|
1438
|
+
let resolved = false;
|
|
1439
|
+
const counted = () => {
|
|
1440
|
+
resolved = true;
|
|
1441
|
+
resolve(current());
|
|
1442
|
+
};
|
|
1443
|
+
(async () => {
|
|
1444
|
+
const remaining = /* @__PURE__ */ new Set();
|
|
1445
|
+
const diffs = /* @__PURE__ */ new Map();
|
|
1446
|
+
for await (const event of data.structuralChanges({
|
|
1447
|
+
reviewId,
|
|
1448
|
+
pins,
|
|
1449
|
+
signal
|
|
1450
|
+
})) {
|
|
1451
|
+
if (event.type === "start") {
|
|
1452
|
+
for (const entry of event.files) remaining.add((entry.file.rhs ?? entry.file.lhs).path);
|
|
1453
|
+
if (!remaining.size) break;
|
|
1454
|
+
continue;
|
|
1455
|
+
}
|
|
1456
|
+
if (event.type === "complete" && event.aborted) throw new Error(event.aborted.message);
|
|
1457
|
+
if (event.type !== "file" && event.type !== "update") continue;
|
|
1458
|
+
const path = (event.file.rhs ?? event.file.lhs).path;
|
|
1459
|
+
const baseIndex = event.file.lhs && baseFiles.get(event.file.lhs.path);
|
|
1460
|
+
const headIndex = event.file.rhs && headFiles.get(event.file.rhs.path);
|
|
1461
|
+
let diff;
|
|
1462
|
+
if (event.type === "update") {
|
|
1463
|
+
const previous = diffs.get(path);
|
|
1464
|
+
if (!previous) throw new Error(`Unexpected structural result: ${path}`);
|
|
1465
|
+
if (event.error) continue;
|
|
1466
|
+
diff = applyStructuralUpdate(previous, event);
|
|
1467
|
+
} else if (!remaining.delete(path)) throw new Error(`Unexpected structural result: ${path}`);
|
|
1468
|
+
else if (event.error) {
|
|
1469
|
+
if (event.error.code !== "unsupported_file_type" && event.error.code !== "not_utf8") throw new Error(`Cannot count ${path}: ${event.error.message}`);
|
|
1470
|
+
for (const index of [baseIndex, headIndex]) if (index !== void 0) unsupported.add(coverage.files[index].path);
|
|
1471
|
+
} else diff = event.diff;
|
|
1472
|
+
if (diff?.type === "text") {
|
|
1473
|
+
diffs.set(path, diff);
|
|
1474
|
+
const folded = foldedChanges(diff);
|
|
1475
|
+
for (const side of ["base", "head"]) {
|
|
1476
|
+
const source = side === "base" ? event.file.lhs : event.file.rhs;
|
|
1477
|
+
const index = source && (side === "base" ? baseFiles : headFiles).get(source.path);
|
|
1478
|
+
if (index === void 0) continue;
|
|
1479
|
+
const file = coverage.files[index];
|
|
1480
|
+
const visible = subtractIntervals(diff.structural_changes[side], folded[side]);
|
|
1481
|
+
coverage.files[index] = {
|
|
1482
|
+
...file,
|
|
1483
|
+
folded: {
|
|
1484
|
+
...file.folded ?? emptyCoverage(),
|
|
1485
|
+
[side]: subtractIntervals(file.changed[side], visible)
|
|
1486
|
+
}
|
|
1487
|
+
};
|
|
1473
1488
|
}
|
|
1474
|
-
|
|
1475
|
-
|
|
1476
|
-
|
|
1477
|
-
|
|
1478
|
-
|
|
1489
|
+
const index = headIndex ?? baseIndex;
|
|
1490
|
+
if (event.type === "file" && index !== void 0) {
|
|
1491
|
+
if ((coverage.fileSources.get(coverage.files[index].path) ?? []).every((source) => source.file === (source.side === "base" ? event.file.lhs : event.file.rhs)?.path)) coverage.alignments = new Map(coverage.alignments).set(coverage.files[index].path, structuralRows(diff));
|
|
1492
|
+
}
|
|
1493
|
+
}
|
|
1494
|
+
publish?.(current());
|
|
1495
|
+
if (!remaining.size && !resolved) counted();
|
|
1479
1496
|
}
|
|
1480
|
-
|
|
1481
|
-
|
|
1482
|
-
|
|
1483
|
-
|
|
1484
|
-
|
|
1485
|
-
|
|
1497
|
+
if (remaining.size) throw new Error("Structural coverage is incomplete.");
|
|
1498
|
+
if (!resolved) counted();
|
|
1499
|
+
})().catch((error) => {
|
|
1500
|
+
if (resolved) console.warn("Could not refine folded coverage:", error);
|
|
1501
|
+
else reject(error);
|
|
1502
|
+
});
|
|
1503
|
+
});
|
|
1486
1504
|
}
|
|
1487
1505
|
/**
|
|
1488
1506
|
* The changed lines diffr folds by default. A file it hides (lockfiles,
|
|
@@ -6125,14 +6143,25 @@ var LocalReviewData = class {
|
|
|
6125
6143
|
const key = JSON.stringify(pins);
|
|
6126
6144
|
let entry = this.coverageCache.get(key);
|
|
6127
6145
|
if (!entry || entry.state === "error") {
|
|
6128
|
-
const
|
|
6146
|
+
const worktree = pins.worktreeRevision ? JSON.stringify({
|
|
6147
|
+
...pins,
|
|
6148
|
+
worktreeRevision: void 0
|
|
6149
|
+
}) : void 0;
|
|
6150
|
+
for (const [cachedKey, cached] of this.coverageCache) if (worktree && cached.worktree === worktree) {
|
|
6151
|
+
cached.abort.abort();
|
|
6152
|
+
this.coverageCache.delete(cachedKey);
|
|
6153
|
+
}
|
|
6154
|
+
const abort = new AbortController();
|
|
6155
|
+
const promise = comparisonCoverage(this, reviewId, pins, AbortSignal.any([this.coverageAbort.signal, abort.signal]), (partial) => {
|
|
6129
6156
|
const current = this.coverageCache.get(key);
|
|
6130
6157
|
if (current) current.partial = partial;
|
|
6131
6158
|
this.notifyCoverage();
|
|
6132
6159
|
});
|
|
6133
6160
|
entry = {
|
|
6134
6161
|
promise,
|
|
6135
|
-
state: "pending"
|
|
6162
|
+
state: "pending",
|
|
6163
|
+
abort,
|
|
6164
|
+
worktree
|
|
6136
6165
|
};
|
|
6137
6166
|
this.coverageCache.set(key, entry);
|
|
6138
6167
|
const current = entry;
|
|
@@ -6146,7 +6175,7 @@ var LocalReviewData = class {
|
|
|
6146
6175
|
}
|
|
6147
6176
|
};
|
|
6148
6177
|
promise.then((value) => {
|
|
6149
|
-
current.partial
|
|
6178
|
+
current.partial ??= value;
|
|
6150
6179
|
if (!this.closed) this.store.setDiffStats(pins, {
|
|
6151
6180
|
fileCount: value.files.length,
|
|
6152
6181
|
additions: value.files.reduce((sum, file) => sum + structuralChangeCounts(file.changed).added, 0),
|
|
@@ -6155,7 +6184,7 @@ var LocalReviewData = class {
|
|
|
6155
6184
|
settled("ready");
|
|
6156
6185
|
}, (error) => settled("error", error));
|
|
6157
6186
|
}
|
|
6158
|
-
return entry.promise;
|
|
6187
|
+
return entry.state === "ready" && entry.partial ? Promise.resolve(entry.partial) : entry.promise;
|
|
6159
6188
|
}
|
|
6160
6189
|
async changes(pins, file, previousPath) {
|
|
6161
6190
|
if (file === void 0) return this.summaries(pins);
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { n as isJsonObject } from "./src-X9phtB2j.js";
|
|
2
|
+
import { a as toolResultText, s as ReviewApiError, t as ToolText } from "./agent-client-D4FSEDX4.js";
|
|
2
3
|
import { t as ReviewInputError } from "./input-error-OLgB_h31.js";
|
|
3
|
-
import { n as REVIEW_STATUS_TOOL, t as authoringTools } from "./authoring-tools-
|
|
4
|
-
import { i as publicTool, n as RECOVERY, r as callPublicTool, t as toolFailure } from "./tool-failure-
|
|
4
|
+
import { n as REVIEW_STATUS_TOOL, t as authoringTools } from "./authoring-tools-DmIJZq0b.js";
|
|
5
|
+
import { i as publicTool, n as RECOVERY, r as callPublicTool, t as toolFailure } from "./tool-failure-DlU9hn7_.js";
|
|
5
6
|
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
6
7
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
7
8
|
import { CallToolRequestSchema, ListToolsRequestSchema } from "@modelcontextprotocol/sdk/types.js";
|
|
@@ -32,6 +33,7 @@ function mcpAuthoringGuidance(context) {
|
|
|
32
33
|
return [
|
|
33
34
|
"Whiteboard explains code in documents the user reads in Whiteboard Desktop. Call session_get_instructions before creating or editing a Whiteboard and follow it. Read session_capabilities before authoring; session_create opens the new review in Desktop when it is available, so call session_open only for an existing review, and generate software maps only when softwareMapEnabled is true. When the user asks for a Whiteboard or to use Whiteboard (for example to plan work, review a branch or PR stack, or explain a system in Whiteboard), author a Whiteboard with the default topic.",
|
|
34
35
|
...context.traceEnabled ? ["For why code exists, what an agent was thinking, or whether an agent solved something before, call session_get_instructions({topic:\"trace-archaeology\"})."] : [],
|
|
36
|
+
"For programmatic MCP calls, use structuredContent when present; otherwise parse JSON from the text content when the result is JSON. An insert through session_edit uses edit.content for the actual document component, never the MCP transport wrapper containing content or structuredContent.",
|
|
35
37
|
"Never read or write Whiteboard files or SQL."
|
|
36
38
|
].join(" ");
|
|
37
39
|
}
|
|
@@ -103,10 +105,15 @@ async function serveReviewMcp(connect, stdin, stdout, stderr = process.stderr, t
|
|
|
103
105
|
type: "text",
|
|
104
106
|
text: RECOVERY
|
|
105
107
|
}] };
|
|
106
|
-
if (request.params.name === REVIEW_STATUS_TOOL.name && offlineStatus)
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
108
|
+
if (request.params.name === REVIEW_STATUS_TOOL.name && offlineStatus) {
|
|
109
|
+
const result = await offlineStatus(error instanceof Error ? error.message : String(error));
|
|
110
|
+
const response = { content: [{
|
|
111
|
+
type: "text",
|
|
112
|
+
text: JSON.stringify(result)
|
|
113
|
+
}] };
|
|
114
|
+
if (isJsonObject(result)) response.structuredContent = result;
|
|
115
|
+
return response;
|
|
116
|
+
}
|
|
110
117
|
throw error;
|
|
111
118
|
}
|
|
112
119
|
phase = "call";
|
|
@@ -115,10 +122,12 @@ async function serveReviewMcp(connect, stdin, stdout, stderr = process.stderr, t
|
|
|
115
122
|
const result = await callPublicTool(client, tool, request.params.arguments ?? {}, extra.signal);
|
|
116
123
|
const text = toolResultText(tool, result);
|
|
117
124
|
report();
|
|
118
|
-
|
|
125
|
+
const response = { content: [{
|
|
119
126
|
type: "text",
|
|
120
127
|
text: listedWhileDown && tool.name === instructionsTool.name ? `${RELOAD_TOOLS}\n\n${text}` : text
|
|
121
128
|
}] };
|
|
129
|
+
if (!(result instanceof ToolText) && isJsonObject(result)) response.structuredContent = result;
|
|
130
|
+
return response;
|
|
122
131
|
} catch (error) {
|
|
123
132
|
report(toolFailure(error, phase));
|
|
124
133
|
return {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as projectOfCheckout, g as CheckoutGroups, o as groupCheckoutsAhead, s as initializeReviewStoreSchema, t as openLocalReviewStore } from "./local-data-
|
|
1
|
+
import { a as projectOfCheckout, g as CheckoutGroups, o as groupCheckoutsAhead, s as initializeReviewStoreSchema, t as openLocalReviewStore } from "./local-data-C0OJttzT.js";
|
|
2
2
|
import "./src-Z1x4-Qmb.js";
|
|
3
3
|
import { j as withFileLock } from "./s3-config-CjcLyFV5.js";
|
|
4
4
|
import { access, mkdir } from "node:fs/promises";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { i as readReviewPackageVersion } from "./package-paths-BeYHYjeR.js";
|
|
2
|
-
import { a as readReviewServerHealth, l as serverNotReady } from "./server-discovery-
|
|
3
|
-
import { c as stopBackgroundServer, o as recordedBackgroundServer, r as ensureBackgroundServer } from "./background-server-
|
|
4
|
-
import { t as ensureRemoteLanguageServer } from "./remote-language-server-
|
|
2
|
+
import { a as readReviewServerHealth, l as serverNotReady } from "./server-discovery-BchUrwFW.js";
|
|
3
|
+
import { c as stopBackgroundServer, o as recordedBackgroundServer, r as ensureBackgroundServer } from "./background-server-B1uwDQTr.js";
|
|
4
|
+
import { t as ensureRemoteLanguageServer } from "./remote-language-server-DQfg07BB.js";
|
|
5
5
|
import path from "node:path";
|
|
6
6
|
import { spawn } from "node:child_process";
|
|
7
7
|
import { gt, valid } from "semver";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import "./src-Z1x4-Qmb.js";
|
|
2
2
|
import { A as processStartIdentity, j as withFileLock } from "./s3-config-CjcLyFV5.js";
|
|
3
3
|
import { t as findReviewPackageRoot } from "./package-paths-BeYHYjeR.js";
|
|
4
|
-
import { n as cliSpawn, s as spawnDetached } from "./background-server-
|
|
4
|
+
import { n as cliSpawn, s as spawnDetached } from "./background-server-B1uwDQTr.js";
|
|
5
5
|
import { r as remoteServerPaths, t as ensureRemoteExtensions } from "./remote-extensions-CsI_BJ_f.js";
|
|
6
6
|
import { randomBytes } from "node:crypto";
|
|
7
7
|
import { z } from "zod";
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { C as REVIEW_REMOTE_INSTALL_LOCK, w as REVIEW_REMOTE_WRAPPER_MARK } from "./src-
|
|
1
|
+
import { C as REVIEW_REMOTE_INSTALL_LOCK, w as REVIEW_REMOTE_WRAPPER_MARK } from "./src-DEOc8bvC.js";
|
|
2
2
|
import { M as DEV_REVIEW_HOME_ENV } from "./s3-config-CjcLyFV5.js";
|
|
3
3
|
import "./review-home-paths-CG-sb9Cw.js";
|
|
4
|
-
import { c as stopBackgroundServer, o as recordedBackgroundServer } from "./background-server-
|
|
4
|
+
import { c as stopBackgroundServer, o as recordedBackgroundServer } from "./background-server-B1uwDQTr.js";
|
|
5
5
|
import { i as whiteboardRemoteHome } from "./remote-extensions-CsI_BJ_f.js";
|
|
6
|
-
import { n as remoteLanguageServerGroups, r as stopProcessGroup } from "./remote-language-server-
|
|
6
|
+
import { n as remoteLanguageServerGroups, r as stopProcessGroup } from "./remote-language-server-DQfg07BB.js";
|
|
7
7
|
import { existsSync } from "node:fs";
|
|
8
8
|
import { lstat, mkdir, readFile, readdir, rm, stat } from "node:fs/promises";
|
|
9
9
|
import path from "node:path";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { a as jsonNumber, c as jsonString, i as jsonBoolean, n as isJsonObject } from "./src-X9phtB2j.js";
|
|
2
|
-
import { _ as REVIEW_DIFF_LAYOUTS, g as REVIEW_COLOR_THEME_KINDS, v as REVIEW_DIFF_LAYOUT_SCOPES } from "./src-
|
|
3
|
-
import { t as SELECTION_UNAVAILABLE_REASONS } from "./lens-selection-
|
|
4
|
-
import { n as askAgentIds } from "./thread-state-
|
|
2
|
+
import { _ as REVIEW_DIFF_LAYOUTS, g as REVIEW_COLOR_THEME_KINDS, v as REVIEW_DIFF_LAYOUT_SCOPES } from "./src-DEOc8bvC.js";
|
|
3
|
+
import { t as SELECTION_UNAVAILABLE_REASONS } from "./lens-selection-EuZdag4Q.js";
|
|
4
|
+
import { n as askAgentIds } from "./thread-state-CbLB0jUA.js";
|
|
5
5
|
import { z } from "zod";
|
|
6
6
|
//#region src/telemetry-clean-text.ts
|
|
7
7
|
const USER_DATA_REGEXES = [
|
|
@@ -712,6 +712,15 @@ const UI_TELEMETRY_EVENTS = {
|
|
|
712
712
|
files: "number"
|
|
713
713
|
}
|
|
714
714
|
},
|
|
715
|
+
diff_loaded: {
|
|
716
|
+
event: "review_diff_loaded",
|
|
717
|
+
properties: {
|
|
718
|
+
first_file_ms: "number",
|
|
719
|
+
updates_ms: "number",
|
|
720
|
+
files: "number",
|
|
721
|
+
update_errors: "number"
|
|
722
|
+
}
|
|
723
|
+
},
|
|
715
724
|
discord_clicked: {
|
|
716
725
|
event: "review_discord_clicked",
|
|
717
726
|
properties: { via: DISCORD_VIA }
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { o as parseReviewVerbResponse } from "./src-
|
|
2
|
-
import { b as selectReviewInstance, m as healthyReviewInstance, v as reviewInstanceStartHint, y as reviewInstanceUnavailable } from "./server-discovery-
|
|
1
|
+
import { o as parseReviewVerbResponse } from "./src-DEOc8bvC.js";
|
|
2
|
+
import { b as selectReviewInstance, m as healthyReviewInstance, v as reviewInstanceStartHint, y as reviewInstanceUnavailable } from "./server-discovery-BchUrwFW.js";
|
|
3
3
|
import { closeSync, existsSync, fstatSync, mkdtempSync, openSync, readSync } from "node:fs";
|
|
4
4
|
import path from "node:path";
|
|
5
5
|
import { homedir, tmpdir } from "node:os";
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { c as jsonString, l as jsonValueSchema, o as jsonObject, u as parseJsonText } from "./src-X9phtB2j.js";
|
|
2
|
-
import "./src-
|
|
2
|
+
import "./src-DEOc8bvC.js";
|
|
3
3
|
import "./src-Z1x4-Qmb.js";
|
|
4
4
|
import { F as writeFileAtomic, N as devReviewHome, j as withFileLock, k as processIsAlive } from "./s3-config-CjcLyFV5.js";
|
|
5
5
|
import { i as readReviewPackageVersion, t as findReviewPackageRoot } from "./package-paths-BeYHYjeR.js";
|
|
6
6
|
import "./review-home-paths-CG-sb9Cw.js";
|
|
7
|
-
import "./request-origin-
|
|
7
|
+
import "./request-origin-BIBW432J.js";
|
|
8
8
|
import { createHmac, randomUUID } from "node:crypto";
|
|
9
9
|
import { z } from "zod";
|
|
10
10
|
import { existsSync, readFileSync, rmSync } from "node:fs";
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { S as splitGitPatchFiles, a as diff, o as diffFileSummaries } from "../src-X9ZebeOD.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-
|
|
5
|
-
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, y as REVIEW_HOST_HEADER } from "../src-
|
|
4
|
+
import { f as StreamLimitError, i as SharedReviewStore, p as readBoundedStream } from "../client-C8vT0mhW.js";
|
|
5
|
+
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, y as REVIEW_HOST_HEADER } from "../src-DEOc8bvC.js";
|
|
6
6
|
import "../src-Z1x4-Qmb.js";
|
|
7
|
-
import { B as resourceReferences, p as pullRequestProvider } from "../stored-document-migration-
|
|
7
|
+
import { B as resourceReferences, p as pullRequestProvider } from "../stored-document-migration-BCFx07Bq.js";
|
|
8
8
|
import { t as ReviewInputError } from "../input-error-OLgB_h31.js";
|
|
9
9
|
import { L as writePrivateJsonAtomic, N as devReviewHome } from "../s3-config-CjcLyFV5.js";
|
|
10
10
|
import { t as errorMessage } from "../error-message-OtiDonty.js";
|
|
11
11
|
import { i as readReviewPackageVersion, t as findReviewPackageRoot } from "../package-paths-BeYHYjeR.js";
|
|
12
12
|
import { i as reviewInstanceDiscoveryPath, o as reviewLegacyDiscoveryPath } from "../review-home-paths-CG-sb9Cw.js";
|
|
13
|
-
import { _ as reviewInstanceIdentity, u as REVIEW_INSTANCE_ENV } from "../server-discovery-
|
|
14
|
-
import { t as openReviewProfile } from "../profile-
|
|
15
|
-
import { r as reviewTelemetryChannel, t as ReviewTelemetry } from "../review-telemetry-
|
|
16
|
-
import { l as REVIEW_TELEMETRY_TABS } from "../request-origin-
|
|
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-
|
|
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-
|
|
19
|
-
import { s as readQuerySchemas } from "../authoring-tools-
|
|
13
|
+
import { _ as reviewInstanceIdentity, u as REVIEW_INSTANCE_ENV } from "../server-discovery-BchUrwFW.js";
|
|
14
|
+
import { t as openReviewProfile } from "../profile-DS1F6PBF.js";
|
|
15
|
+
import { r as reviewTelemetryChannel, t as ReviewTelemetry } from "../review-telemetry-ChlsTRPN.js";
|
|
16
|
+
import { l as REVIEW_TELEMETRY_TABS } from "../request-origin-BIBW432J.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-BpH8VvTR.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-Dl9g9Fvd.js";
|
|
19
|
+
import { s as readQuerySchemas } from "../authoring-tools-DmIJZq0b.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";
|
|
@@ -265,6 +265,30 @@ function listenForDesktopHostShutdown(hostProcess, onShutdown, onTelemetrySettin
|
|
|
265
265
|
return () => hostProcess.off("message", handleMessage);
|
|
266
266
|
}
|
|
267
267
|
//#endregion
|
|
268
|
+
//#region src/review-preferences.ts
|
|
269
|
+
/**
|
|
270
|
+
* Machine-wide Review preferences the server itself needs. Workbench settings
|
|
271
|
+
* do not work here: the review server never reads the workbench
|
|
272
|
+
* configuration.
|
|
273
|
+
*/
|
|
274
|
+
function reviewPreferencesPath(devHome = devReviewHome()) {
|
|
275
|
+
return path.join(devHome, "preferences.json");
|
|
276
|
+
}
|
|
277
|
+
/** Whether agents are offered animation authoring; existing animations
|
|
278
|
+
* always render. A missing or unreadable file means off; it never throws. */
|
|
279
|
+
async function readAnimationsEnabled(devHome) {
|
|
280
|
+
try {
|
|
281
|
+
const raw = parseJsonText(await readFile(reviewPreferencesPath(devHome), "utf8"));
|
|
282
|
+
return isJsonObject(raw) && raw.animationsEnabled === true;
|
|
283
|
+
} catch {
|
|
284
|
+
return false;
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
async function writeAnimationsEnabled(enabled, devHome) {
|
|
288
|
+
await writePrivateJsonAtomic(reviewPreferencesPath(devHome), { animationsEnabled: enabled });
|
|
289
|
+
return enabled;
|
|
290
|
+
}
|
|
291
|
+
//#endregion
|
|
268
292
|
//#region src/server/crash-report.ts
|
|
269
293
|
const CRASH_REPORT_URL = "https://bug.dev.fast/api/v2/crashes";
|
|
270
294
|
const gzipAsync = promisify(gzip);
|
|
@@ -2099,6 +2123,7 @@ function createGlobalReviewServer(input) {
|
|
|
2099
2123
|
const openWatchdog = new ReviewOpenWatchdog({ onTimeout: (context, elapsedMs) => void telemetry.captureEvent("review_open_timeout", { elapsed_ms: elapsedMs }, context) });
|
|
2100
2124
|
let closing = false;
|
|
2101
2125
|
const cliPath = path.join(input.packageRoot, "dist", "cli.js");
|
|
2126
|
+
let animationsEnabled = false;
|
|
2102
2127
|
const discovery = {
|
|
2103
2128
|
version: 3,
|
|
2104
2129
|
instanceId,
|
|
@@ -2123,6 +2148,7 @@ function createGlobalReviewServer(input) {
|
|
|
2123
2148
|
relay,
|
|
2124
2149
|
token,
|
|
2125
2150
|
instanceId,
|
|
2151
|
+
animations: () => animationsEnabled,
|
|
2126
2152
|
status: () => {
|
|
2127
2153
|
const { key, channel, checkout, appVersion, cliVersion, instanceId } = discovery;
|
|
2128
2154
|
return {
|
|
@@ -2157,6 +2183,13 @@ function createGlobalReviewServer(input) {
|
|
|
2157
2183
|
app.all("/reviews-api", (context) => gateway.fetch(context.req.raw));
|
|
2158
2184
|
app.all("/reviews-api/*", (context) => gateway.fetch(context.req.raw));
|
|
2159
2185
|
app.get("/remote-hosts", () => serverJson(200, gateway.hosts()));
|
|
2186
|
+
app.get("/preferences/animations", () => serverJson(200, { enabled: animationsEnabled }));
|
|
2187
|
+
app.put("/preferences/animations", async (context) => {
|
|
2188
|
+
const request = z.object({ enabled: z.boolean() }).safeParse(await readBoundedRequestJson(context.req.raw));
|
|
2189
|
+
if (!request.success) throw new ReviewServerError("enabled must be a boolean.", 400);
|
|
2190
|
+
animationsEnabled = await writeAnimationsEnabled(request.data.enabled);
|
|
2191
|
+
return serverJson(200, { enabled: animationsEnabled });
|
|
2192
|
+
});
|
|
2160
2193
|
app.post("/app/focus", async () => {
|
|
2161
2194
|
const result = await relay.dispatch({
|
|
2162
2195
|
name: "focusWindow",
|
|
@@ -2282,6 +2315,7 @@ function createGlobalReviewServer(input) {
|
|
|
2282
2315
|
},
|
|
2283
2316
|
listen: async () => {
|
|
2284
2317
|
await migrateDiffrConfig();
|
|
2318
|
+
animationsEnabled = await readAnimationsEnabled();
|
|
2285
2319
|
boundPort = await listen(loopback.server, input.port);
|
|
2286
2320
|
discovery.url = urlForBoundPort();
|
|
2287
2321
|
for (const discoveryPath of discoveryPaths) await writePrivateJsonAtomic(discoveryPath, discovery);
|
|
@@ -1,5 +1,5 @@
|
|
|
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-
|
|
2
|
+
import { n as parseReviewDesktopDiscovery } from "./src-DEOc8bvC.js";
|
|
3
3
|
import "./src-Z1x4-Qmb.js";
|
|
4
4
|
import { M as DEV_REVIEW_HOME_ENV, N as devReviewHome, k as processIsAlive } from "./s3-config-CjcLyFV5.js";
|
|
5
5
|
import { a as reviewInstancesDir, o as reviewLegacyDiscoveryPath, r as reviewDevInstanceKey, t as reviewDefaultInstancePath } from "./review-home-paths-CG-sb9Cw.js";
|
package/dist/sharing/index.d.ts
CHANGED
|
@@ -126,7 +126,10 @@ type StructuralDiffEvent = {
|
|
|
126
126
|
} | ({
|
|
127
127
|
type: "file";
|
|
128
128
|
file: StructuralPairing<StructuralFileRef>;
|
|
129
|
-
} & StructuralOutcome) | {
|
|
129
|
+
} & StructuralOutcome) | ({
|
|
130
|
+
type: "update";
|
|
131
|
+
file: StructuralPairing<StructuralFileRef>;
|
|
132
|
+
} & StructuralUpdate) | {
|
|
130
133
|
type: "complete";
|
|
131
134
|
succeeded: number;
|
|
132
135
|
failed: number;
|
|
@@ -140,6 +143,23 @@ type StructuralOutcome = {
|
|
|
140
143
|
error: StructuralProblem;
|
|
141
144
|
diff?: never;
|
|
142
145
|
};
|
|
146
|
+
/**
|
|
147
|
+
* An update record carries the regions whose visibility deferred plugins
|
|
148
|
+
* changed, by region `id`, and the file's new `stats.visible`; or their error.
|
|
149
|
+
*/
|
|
150
|
+
type StructuralUpdate = {
|
|
151
|
+
regions: StructuralRegionVisibility[];
|
|
152
|
+
visible: StructuralLineCounts;
|
|
153
|
+
error?: never;
|
|
154
|
+
} | {
|
|
155
|
+
error: StructuralProblem;
|
|
156
|
+
regions?: never;
|
|
157
|
+
visible?: never;
|
|
158
|
+
};
|
|
159
|
+
/** A region's new visibility; absent fields are open and unlabelled. */
|
|
160
|
+
type StructuralRegionVisibility = {
|
|
161
|
+
id: number;
|
|
162
|
+
} & StructuralVisibility;
|
|
143
163
|
type StructuralSnapshot = {
|
|
144
164
|
type: "revision";
|
|
145
165
|
rev: string;
|
|
@@ -741,6 +761,21 @@ declare const leafSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
741
761
|
id: z.ZodOptional<z.ZodString>;
|
|
742
762
|
}, z.core.$strict>>;
|
|
743
763
|
pins: any;
|
|
764
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
765
|
+
type: z.ZodLiteral<"animation">;
|
|
766
|
+
id: z.ZodOptional<z.ZodString>;
|
|
767
|
+
title: z.ZodString;
|
|
768
|
+
html: z.ZodString;
|
|
769
|
+
frames: z.ZodArray<z.ZodObject<{
|
|
770
|
+
key: z.ZodString;
|
|
771
|
+
title: z.ZodString;
|
|
772
|
+
label: z.ZodOptional<z.ZodString>;
|
|
773
|
+
caption: z.ZodOptional<z.ZodString>;
|
|
774
|
+
duration: z.ZodOptional<z.ZodNumber>;
|
|
775
|
+
}, z.core.$strict>>;
|
|
776
|
+
code: z.ZodDefault<z.ZodRecord<z.ZodString, any>>;
|
|
777
|
+
height: z.ZodDefault<z.ZodUnion<readonly [z.ZodLiteral<"auto">, z.ZodNumber]>>;
|
|
778
|
+
pins: any;
|
|
744
779
|
}, z.core.$strict>], "type">;
|
|
745
780
|
type LeafBlock = z.infer<typeof leafSchema>;
|
|
746
781
|
type Block = LeafBlock | SectionBlock | CalloutBlock;
|
|
@@ -994,6 +1029,21 @@ declare const editSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
994
1029
|
id: z.ZodOptional<z.ZodString>;
|
|
995
1030
|
}, z.core.$strict>>;
|
|
996
1031
|
pins: any;
|
|
1032
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
1033
|
+
type: z.ZodLiteral<"animation">;
|
|
1034
|
+
id: z.ZodOptional<z.ZodString>;
|
|
1035
|
+
title: z.ZodString;
|
|
1036
|
+
html: z.ZodString;
|
|
1037
|
+
frames: z.ZodArray<z.ZodObject<{
|
|
1038
|
+
key: z.ZodString;
|
|
1039
|
+
title: z.ZodString;
|
|
1040
|
+
label: z.ZodOptional<z.ZodString>;
|
|
1041
|
+
caption: z.ZodOptional<z.ZodString>;
|
|
1042
|
+
duration: z.ZodOptional<z.ZodNumber>;
|
|
1043
|
+
}, z.core.$strict>>;
|
|
1044
|
+
code: z.ZodDefault<z.ZodRecord<z.ZodString, any>>;
|
|
1045
|
+
height: z.ZodDefault<z.ZodUnion<readonly [z.ZodLiteral<"auto">, z.ZodNumber]>>;
|
|
1046
|
+
pins: any;
|
|
997
1047
|
}, z.core.$strict>], "type">, z.ZodObject<{
|
|
998
1048
|
type: z.ZodLiteral<"section">;
|
|
999
1049
|
id: z.ZodOptional<z.ZodString>;
|
|
@@ -1287,8 +1337,8 @@ type AskOffer = z.infer<typeof askOfferSchema>;
|
|
|
1287
1337
|
/** What an agent may do without asking: nothing that changes the checkout,
|
|
1288
1338
|
* what its own judgment calls safe, or everything. */
|
|
1289
1339
|
declare const askPermissionsSchema: z.ZodEnum<{
|
|
1290
|
-
"read-only": "read-only";
|
|
1291
1340
|
auto: "auto";
|
|
1341
|
+
"read-only": "read-only";
|
|
1292
1342
|
bypass: "bypass";
|
|
1293
1343
|
}>;
|
|
1294
1344
|
type AskPermissions = z.infer<typeof askPermissionsSchema>;
|
|
@@ -1679,7 +1729,7 @@ declare class ReviewStore {
|
|
|
1679
1729
|
history(id: string): HistoryEntry[];
|
|
1680
1730
|
inspect(id: string, targetId?: string, version?: number): Element | {
|
|
1681
1731
|
id: string | undefined;
|
|
1682
|
-
type: "image" | "code" | "markdown" | "divider" | "code_peek" | "sequence" | "step" | "call_stack_diff" | "database_lens" | "trace_quote" | "software_map" | "flow_diagram" | "flow_node" | "flow_edge" | "section" | "callout";
|
|
1732
|
+
type: "image" | "code" | "markdown" | "divider" | "code_peek" | "sequence" | "step" | "call_stack_diff" | "database_lens" | "trace_quote" | "software_map" | "flow_diagram" | "flow_node" | "flow_edge" | "animation" | "section" | "callout";
|
|
1683
1733
|
label: any;
|
|
1684
1734
|
}[];
|
|
1685
1735
|
/** The host can seed a document; transport callers only supply a command. */
|
package/dist/sharing/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as sharedReviewId, c as verifyShareRepository, i as SharedReviewStore, l as exportShare, n as ShareClient, o as validateShareBundle } from "../client-
|
|
1
|
+
import { a as sharedReviewId, c as verifyShareRepository, i as SharedReviewStore, l as exportShare, n as ShareClient, o as validateShareBundle } from "../client-C8vT0mhW.js";
|
|
2
2
|
export { ShareClient, SharedReviewStore, exportShare, sharedReviewId, validateShareBundle, verifyShareRepository };
|