@dev.fast/whiteboard 0.0.0-stage → 0.2.1-preview.20261005.98
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/LICENSE +21 -0
- package/README.md +146 -2
- package/THIRD_PARTY_NOTICES.md +93 -0
- package/dist/account-alias-DOHN1RSH.js +973 -0
- package/dist/agent-cli-ChOq0ZuO.js +117 -0
- package/dist/agent-cli-DzWfZr6G.js +2 -0
- package/dist/agent-client-CPQo7iTI.js +305 -0
- package/dist/authoring-tools-Cr6Kpjsx.js +234 -0
- package/dist/build-info.json +1 -0
- package/dist/cli-hVgHcdsv.js +47 -0
- package/dist/cli-runner-D8y2_luU.js +5095 -0
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +128 -0
- package/dist/client-DFoh50W3.js +950 -0
- package/dist/desktop-discovery-DBO-PM2V.js +164 -0
- package/dist/error-message-OtiDonty.js +6 -0
- package/dist/fs-utils-BMPLt0cr.js +22 -0
- package/dist/fuzzy-match-BoAmcyak.js +30 -0
- package/dist/headless-host-BJxf4dUU.js +94 -0
- package/dist/input-error-OLgB_h31.js +11 -0
- package/dist/local-data-CxLk75rx.js +4491 -0
- package/dist/mcp-QeF8vkdf.js +140 -0
- package/dist/package-paths-B6-zxvIO.js +47 -0
- package/dist/process-error-telemetry-v9e5h6D7.js +3952 -0
- package/dist/profile-4ry2f3AM.js +76 -0
- package/dist/profile-Bh5FIrmf.js +2 -0
- package/dist/request-origin-D_4QIdoN.js +811 -0
- package/dist/review-agent-traces-DNJFYzc8.js +3866 -0
- package/dist/review-home-paths-6zZH-1c9.js +2560 -0
- package/dist/review-telemetry-DEFnQsQ2.js +1195 -0
- package/dist/runtime-CKiWhGrf.js +52 -0
- package/dist/runtime.d.ts +9 -0
- package/dist/runtime.js +2 -0
- package/dist/s3-SzLpeCG6.js +345 -0
- package/dist/s3-config-BgxkSoOy.js +2 -0
- package/dist/s3-config-CAxhO9u_.js +676 -0
- package/dist/server/desktop-host.d.ts +4 -0
- package/dist/server/desktop-host.js +1702 -0
- package/dist/server-discovery-Dbzn3w6Z.js +66 -0
- package/dist/sharing/index.d.ts +1977 -0
- package/dist/sharing/index.js +2 -0
- package/dist/src-CGP5ytbV.js +283 -0
- package/dist/src-CmdiBL20.js +3676 -0
- package/dist/src-DnwdaQ2r.js +865 -0
- package/dist/src-X9phtB2j.js +68 -0
- package/dist/stored-document-migration-DHeMpLMb.js +2671 -0
- package/dist/tool-failure-C8zB73HV.js +98 -0
- package/dist/tutorial-trace-DrBvkaeL.js +43 -0
- package/instructions/authoring.md +36 -0
- package/instructions/file-lenses.md +13 -0
- package/instructions/scratchpad.md +23 -0
- package/instructions/trace-archaeology.md +113 -0
- package/onboarding.md +8 -0
- package/package.json +106 -3
- package/src/agent-selection.ts +100 -0
- package/src/agent-session-ref.ts +80 -0
- package/src/ask/agents.ts +351 -0
- package/src/ask/checkout-files.ts +47 -0
- package/src/ask/file-refs.ts +111 -0
- package/src/ask/pi-mcp.ts +154 -0
- package/src/ask/protocol.ts +244 -0
- package/src/ask/thread-state.ts +350 -0
- package/src/ask/thread.ts +1400 -0
- package/src/ask/threads.ts +219 -0
- package/src/ask/watch.ts +79 -0
- package/src/cli-install.ts +1041 -0
- package/src/cli-runner.ts +1461 -0
- package/src/cli-runtime-info.ts +35 -0
- package/src/cli.ts +222 -0
- package/src/connect-prompts.ts +248 -0
- package/src/cursor-deeplink.ts +11 -0
- package/src/desktop-discovery.ts +355 -0
- package/src/diff-selection-migration.ts +63 -0
- package/src/embedded-posthog-key.ts +6 -0
- package/src/error-telemetry.ts +247 -0
- package/src/evidence.ts +14 -0
- package/src/exception-telemetry.ts +126 -0
- package/src/fixtures/blocks/call_stack_diff.json +27 -0
- package/src/fixtures/blocks/callout.json +11 -0
- package/src/fixtures/blocks/code.json +9 -0
- package/src/fixtures/blocks/code_peek.json +8 -0
- package/src/fixtures/blocks/database_lens.json +51 -0
- package/src/fixtures/blocks/divider.json +1 -0
- package/src/fixtures/blocks/fixtures.ts +33 -0
- package/src/fixtures/blocks/flow_diagram.json +36 -0
- package/src/fixtures/blocks/ids.ts +8 -0
- package/src/fixtures/blocks/image.json +9 -0
- package/src/fixtures/blocks/markdown.json +7 -0
- package/src/fixtures/blocks/section.json +11 -0
- package/src/fixtures/blocks/sequence.json +31 -0
- package/src/fixtures/blocks/software_map.json +7 -0
- package/src/fixtures/blocks/trace_quote.json +9 -0
- package/src/fixtures/blocks/tutorial.json +51 -0
- package/src/fs-utils.ts +32 -0
- package/src/fuzzy-match.ts +94 -0
- package/src/install.ts +29 -0
- package/src/legacy-skills.ts +133 -0
- package/src/lens-selection.ts +230 -0
- package/src/markdown-latex-math.ts +230 -0
- package/src/markdown.ts +81 -0
- package/src/package-paths.ts +53 -0
- package/src/posthog-capture-client.ts +610 -0
- package/src/review-api/README.md +295 -0
- package/src/review-api/activity.ts +340 -0
- package/src/review-api/agent-cli.ts +219 -0
- package/src/review-api/agent-client.ts +188 -0
- package/src/review-api/anchor-quotes.ts +88 -0
- package/src/review-api/ask-history.ts +242 -0
- package/src/review-api/authoring-tools.ts +211 -0
- package/src/review-api/blocks/call_stack_diff.ts +75 -0
- package/src/review-api/blocks/callout.ts +24 -0
- package/src/review-api/blocks/code.ts +9 -0
- package/src/review-api/blocks/code_peek.ts +13 -0
- package/src/review-api/blocks/database_lens.ts +150 -0
- package/src/review-api/blocks/definition.ts +40 -0
- package/src/review-api/blocks/divider.ts +6 -0
- package/src/review-api/blocks/flow_diagram.ts +111 -0
- package/src/review-api/blocks/image.ts +10 -0
- package/src/review-api/blocks/index.ts +90 -0
- package/src/review-api/blocks/markdown.ts +17 -0
- package/src/review-api/blocks/section.ts +24 -0
- package/src/review-api/blocks/sequence.ts +56 -0
- package/src/review-api/blocks/software_map.ts +9 -0
- package/src/review-api/blocks/trace_quote.ts +10 -0
- package/src/review-api/blocks/tutorial.ts +39 -0
- package/src/review-api/checkout-fs.ts +14 -0
- package/src/review-api/client.ts +1 -0
- package/src/review-api/comparison-coverage.ts +304 -0
- package/src/review-api/component-reference.ts +30 -0
- package/src/review-api/diff-lenses.ts +175 -0
- package/src/review-api/document-headings.ts +51 -0
- package/src/review-api/document-text.ts +200 -0
- package/src/review-api/document.ts +906 -0
- package/src/review-api/file-lenses.ts +100 -0
- package/src/review-api/http.ts +1877 -0
- package/src/review-api/image-decode.ts +29 -0
- package/src/review-api/input-error.ts +9 -0
- package/src/review-api/instructions.ts +89 -0
- package/src/review-api/lens-alignment.ts +52 -0
- package/src/review-api/local-data.ts +1837 -0
- package/src/review-api/map-input.ts +154 -0
- package/src/review-api/mcp-client-agent.ts +32 -0
- package/src/review-api/mcp.ts +240 -0
- package/src/review-api/origin.ts +43 -0
- package/src/review-api/profile.ts +146 -0
- package/src/review-api/public-tools.ts +102 -0
- package/src/review-api/pull-request.ts +389 -0
- package/src/review-api/read-schemas.ts +85 -0
- package/src/review-api/recovery.ts +2 -0
- package/src/review-api/request-origin.ts +33 -0
- package/src/review-api/review-progress.ts +382 -0
- package/src/review-api/status-tool.ts +10 -0
- package/src/review-api/store-schema.ts +22 -0
- package/src/review-api/store.ts +1647 -0
- package/src/review-api/tool-failure.ts +64 -0
- package/src/review-api/trace-schema.ts +13 -0
- package/src/review-api/traces.ts +119 -0
- package/src/review-api/unsupported-files.integration.ts +91 -0
- package/src/review-api/workspaces.ts +692 -0
- package/src/review-api/worktree-source.ts +170 -0
- package/src/review-api/worktree-structural.integration.ts +320 -0
- package/src/review-app-launcher.ts +432 -0
- package/src/review-app-picker.ts +168 -0
- package/src/review-app.ts +134 -0
- package/src/review-bundled-tools.ts +249 -0
- package/src/review-checkout-paths.ts +37 -0
- package/src/review-diff-files.ts +89 -0
- package/src/review-head-checkout.ts +300 -0
- package/src/review-home-paths.ts +73 -0
- package/src/review-info.ts +59 -0
- package/src/review-instances.ts +113 -0
- package/src/review-logger.ts +183 -0
- package/src/review-preferences.ts +88 -0
- package/src/review-prepare.ts +291 -0
- package/src/review-stack.ts +112 -0
- package/src/review-telemetry.ts +1066 -0
- package/src/runtime.ts +74 -0
- package/src/server/account-alias.ts +30 -0
- package/src/server/bounded-stream.ts +34 -0
- package/src/server/bug-report.ts +301 -0
- package/src/server/client-error-budget.ts +45 -0
- package/src/server/crash-report.ts +273 -0
- package/src/server/desktop-host-shutdown.ts +64 -0
- package/src/server/desktop-host.ts +190 -0
- package/src/server/desktop-server.ts +703 -0
- package/src/server/diffr-config.ts +509 -0
- package/src/server/diffr-languages.ts +97 -0
- package/src/server/global-verb-relay.ts +190 -0
- package/src/server/headless-host.ts +149 -0
- package/src/server/hono-http.ts +162 -0
- package/src/server/http-json.ts +24 -0
- package/src/server/json-review-reporting.ts +174 -0
- package/src/server/process-error-telemetry.ts +174 -0
- package/src/server/review-api-parsers.ts +90 -0
- package/src/server/review-lifecycle-telemetry.ts +73 -0
- package/src/server/review-open-watchdog.ts +46 -0
- package/src/server/review-server-core.ts +290 -0
- package/src/server/structural-comparisons.ts +153 -0
- package/src/server/structural-diff.ts +186 -0
- package/src/server/tutorial-service.ts +241 -0
- package/src/server/ui-telemetry.ts +198 -0
- package/src/server-discovery.ts +95 -0
- package/src/session-markers.ts +132 -0
- package/src/sharing/auth.ts +41 -0
- package/src/sharing/cli.ts +83 -0
- package/src/sharing/client.ts +334 -0
- package/src/sharing/export.ts +195 -0
- package/src/sharing/host.ts +316 -0
- package/src/sharing/import.ts +787 -0
- package/src/sharing/index.ts +16 -0
- package/src/sharing/repository.ts +145 -0
- package/src/sharing/routes.ts +34 -0
- package/src/slug.ts +23 -0
- package/src/software-map-diff-counts.ts +517 -0
- package/src/software-map-model.ts +1147 -0
- package/src/software-map-topology-diff.ts +260 -0
- package/src/source.ts +92 -0
- package/src/startup-trace.ts +232 -0
- package/src/stored-document-migration.ts +151 -0
- package/src/telemetry-clean-text.ts +257 -0
- package/src/telemetry-config.ts +298 -0
- package/src/telemetry-debug-sink.ts +38 -0
- package/src/telemetry.ts +13 -0
- package/src/trace-cli.ts +156 -0
- package/src/trace-storage-cli.ts +509 -0
- package/src/tutorial-conversation.ts +18 -0
- package/src/ui-telemetry-events.ts +765 -0
- package/src/unified-diff.ts +71 -0
- package/src/viewed-coverage.ts +259 -0
- package/src/windows-cli.ts +125 -0
- package/tutorial/document.json +275 -0
- package/tutorial/runtime-manifest.json +12 -0
- package/tutorial/sample-service/package.json +9 -0
- package/tutorial/sample-service/src/api/checkout-api.ts +17 -0
- package/tutorial/sample-service/src/app.ts +26 -0
- package/tutorial/sample-service/src/database/schema.ts +10 -0
- package/tutorial/sample-service/src/fulfillment/fulfillment-queue.ts +15 -0
- package/tutorial/sample-service/src/fulfillment/fulfillment-worker.ts +24 -0
- package/tutorial/sample-service/src/inventory/inventory-service.ts +11 -0
- package/tutorial/sample-service/src/orders/order-service.ts +34 -0
- package/tutorial/sample-service/src/orders/order.ts +21 -0
- package/tutorial/sample-service/src/orders/orders-repository.ts +24 -0
- package/tutorial/sample-service/src/payments/payment-gateway.ts +12 -0
- package/tutorial/sample-service/src/shipping/shipping-gateway.ts +15 -0
- package/tutorial/sample-service/tsconfig.json +12 -0
- package/tutorial/software-map.json +139 -0
- package/tutorial/trace.json +20 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { ReviewInputError } from "./document.js";
|
|
2
|
+
|
|
3
|
+
/** The one decoder for images entering the store, whether uploaded by a client
|
|
4
|
+
* or read from a legacy review: bounded, single frame, re-encoded as PNG. */
|
|
5
|
+
export async function decodeImage(bytes: Uint8Array): Promise<Buffer> {
|
|
6
|
+
const { default: sharp } = await import("sharp");
|
|
7
|
+
|
|
8
|
+
try {
|
|
9
|
+
const decoder = sharp(Buffer.from(bytes), {
|
|
10
|
+
limitInputPixels: 20_000_000,
|
|
11
|
+
failOn: "warning",
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
const metadata = await decoder.metadata();
|
|
15
|
+
|
|
16
|
+
if (
|
|
17
|
+
!["png", "jpeg", "webp"].includes(metadata.format ?? "") ||
|
|
18
|
+
(metadata.pages ?? 1) !== 1
|
|
19
|
+
)
|
|
20
|
+
throw new Error("Unsupported image");
|
|
21
|
+
|
|
22
|
+
// One bounded full decode; retain a safe raster format, not the original file.
|
|
23
|
+
return await decoder.png().toBuffer();
|
|
24
|
+
} catch {
|
|
25
|
+
throw new ReviewInputError(
|
|
26
|
+
"Provide a valid single PNG, JPEG, or WebP image (at most 20 megapixels).",
|
|
27
|
+
);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
|
|
4
|
+
import { findReviewPackageRoot } from "@review/package-paths.js";
|
|
5
|
+
import { z } from "zod";
|
|
6
|
+
|
|
7
|
+
import { COMPONENT_REFERENCE } from "./component-reference.js";
|
|
8
|
+
|
|
9
|
+
export const INSTRUCTION_TOPICS = [
|
|
10
|
+
"authoring",
|
|
11
|
+
"file-lenses",
|
|
12
|
+
"scratchpad",
|
|
13
|
+
"trace-archaeology",
|
|
14
|
+
] as const;
|
|
15
|
+
|
|
16
|
+
export type InstructionTopic = (typeof INSTRUCTION_TOPICS)[number];
|
|
17
|
+
|
|
18
|
+
export const instructionsQuerySchema = z.strictObject({
|
|
19
|
+
topic: z.enum(INSTRUCTION_TOPICS).default("authoring"),
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
export interface InstructionContext {
|
|
23
|
+
desktopAvailable: boolean;
|
|
24
|
+
scratchpadEnabled: boolean;
|
|
25
|
+
traceEnabled: boolean;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export function scratchpadAvailable(context: InstructionContext): boolean {
|
|
29
|
+
return context.desktopAvailable && context.scratchpadEnabled;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
const cache = new Map<string, Promise<string>>();
|
|
33
|
+
|
|
34
|
+
function read(root: string, name: string): Promise<string> {
|
|
35
|
+
const file = path.join(root, "instructions", `${name}.md`);
|
|
36
|
+
let content = cache.get(file);
|
|
37
|
+
|
|
38
|
+
if (!content) {
|
|
39
|
+
content = readFile(file, "utf8").catch((error) => {
|
|
40
|
+
cache.delete(file);
|
|
41
|
+
throw error;
|
|
42
|
+
});
|
|
43
|
+
cache.set(file, content);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
return content;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export async function renderInstructions(
|
|
50
|
+
topic: InstructionTopic,
|
|
51
|
+
context: InstructionContext,
|
|
52
|
+
root = findReviewPackageRoot(import.meta.url),
|
|
53
|
+
): Promise<string> {
|
|
54
|
+
if (topic === "scratchpad" && !scratchpadAvailable(context)) {
|
|
55
|
+
return "The Whiteboard scratchpad is turned off or Whiteboard Desktop is not running. Answer in chat; the scratchpad can be turned on in Whiteboard Desktop Settings.";
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
if (topic === "trace-archaeology" && !context.traceEnabled)
|
|
59
|
+
return "Trace capture is off on this machine, so no agent traces are available. It can be turned on in Whiteboard Desktop Settings under Experimental Features.";
|
|
60
|
+
|
|
61
|
+
if (topic === "scratchpad")
|
|
62
|
+
return `${await read(root, topic)}\n\n${COMPONENT_REFERENCE}`;
|
|
63
|
+
|
|
64
|
+
if (topic !== "authoring") return read(root, topic);
|
|
65
|
+
|
|
66
|
+
const more = [
|
|
67
|
+
...(scratchpadAvailable(context)
|
|
68
|
+
? [
|
|
69
|
+
'- Explaining code visually outside a review: `session_get_instructions({topic:"scratchpad"})`',
|
|
70
|
+
]
|
|
71
|
+
: []),
|
|
72
|
+
...(context.traceEnabled
|
|
73
|
+
? [
|
|
74
|
+
'- Why code exists / past agent sessions: `session_get_instructions({topic:"trace-archaeology"})`',
|
|
75
|
+
]
|
|
76
|
+
: []),
|
|
77
|
+
];
|
|
78
|
+
|
|
79
|
+
return [
|
|
80
|
+
await read(root, "authoring"),
|
|
81
|
+
COMPONENT_REFERENCE,
|
|
82
|
+
...(context.traceEnabled
|
|
83
|
+
? [
|
|
84
|
+
'## 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.',
|
|
85
|
+
]
|
|
86
|
+
: []),
|
|
87
|
+
...(more.length ? [`## More guidance\n\n${more.join("\n")}`] : []),
|
|
88
|
+
].join("\n\n");
|
|
89
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { AlignmentRow } from "@review/lens-selection.js";
|
|
2
|
+
import { parseUnifiedPatch } from "@review/unified-diff.js";
|
|
3
|
+
|
|
4
|
+
/** Project the already-computed patch's runs, including unchanged gaps. */
|
|
5
|
+
export function textualRows(
|
|
6
|
+
path: string,
|
|
7
|
+
patch: string,
|
|
8
|
+
baseCount: number,
|
|
9
|
+
headCount: number,
|
|
10
|
+
): AlignmentRow[] {
|
|
11
|
+
const rows: AlignmentRow[] = [];
|
|
12
|
+
|
|
13
|
+
let base = 0,
|
|
14
|
+
head = 0;
|
|
15
|
+
|
|
16
|
+
const append = (baseEnd: number, headEnd: number) => {
|
|
17
|
+
while (base < baseEnd || head < headEnd)
|
|
18
|
+
rows.push([
|
|
19
|
+
base < baseEnd ? base++ : null,
|
|
20
|
+
head < headEnd ? head++ : null,
|
|
21
|
+
]);
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
for (const hunk of parseUnifiedPatch(path, patch)) {
|
|
25
|
+
append(
|
|
26
|
+
hunk.oldLines ? hunk.oldStart - 1 : hunk.oldStart,
|
|
27
|
+
hunk.newLines ? hunk.newStart - 1 : hunk.newStart,
|
|
28
|
+
);
|
|
29
|
+
|
|
30
|
+
let removed = 0,
|
|
31
|
+
added = 0;
|
|
32
|
+
|
|
33
|
+
const flush = () => {
|
|
34
|
+
append(base + removed, head + added);
|
|
35
|
+
removed = added = 0;
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
for (const line of hunk.lines) {
|
|
39
|
+
if (line.kind === "context") {
|
|
40
|
+
flush();
|
|
41
|
+
append(base + 1, head + 1);
|
|
42
|
+
} else if (line.kind === "add") added++;
|
|
43
|
+
else removed++;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
flush();
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
append(baseCount, headCount);
|
|
50
|
+
|
|
51
|
+
return rows;
|
|
52
|
+
}
|