Compare commits

..
Author SHA1 Message Date
Chris Tate 40b37ae367 Fix harness chat reset and signed charts 2026-06-15 10:51:00 -05:00
Chris Tate f6d3e813f6 harness-chat: add mermaid diagrams to README
- Replace the ASCII data-flow sketch with a mermaid flowchart and a sequence diagram of a turn
- Update prose/setup to reflect the three-agent selector (Claude Code / Codex / Pi)
2026-06-15 10:40:07 -05:00
Chris Tate 7d20b57db5 harness-chat: agent picker, charts, and design polish
- Add a UI agent selector (Claude Code / Codex / Pi) with per-agent harness sessions and monochrome brand marks
- Add monochrome bar/line chart components to the catalog and registry
- Polish the chat shell: minimalist Geist/Geist-Mono design, tool-call icons + containers, inline-code shading, and a working text shimmer
2026-06-15 10:28:11 -05:00
Chris Tate e150668742 harness-chat: fix dev-runtime issues found in live run
- allowedDevOrigins for the portless proxy origin (Next 16 silently fails to hydrate on non-allowlisted cross-origin dev requests)
- serverExternalPackages for the harness adapter, which loads its sandbox bridge via new URL(..., import.meta.url) and cannot be bundled
- README: document CLI-login (TTY) vs OIDC sandbox auth paths
2026-06-15 10:27:50 -05:00
Chris Tate 9d8c086d03 Add harness-chat example: json-render as the UI for agent harnesses
A Claude Code agent runs in a Vercel Sandbox via AI SDK 7's experimental HarnessAgent and reports its work (steps, file changes, terminal output, test results) as a streamed json-render spec. Because HarnessAgent.stream() returns a standard StreamTextResult, the existing pipeJsonRender -> useJsonRenderMessage pipeline works unchanged.

The example pins matching AI SDK 7 canary packages so the harness adapter, React hooks, and Vercel sandbox transport resolve together under the workspace release-age policy.
2026-06-15 10:27:48 -05:00
2 changed files with 3 additions and 5 deletions
+1 -2
View File
@@ -206,6 +206,5 @@ export async function renderToPng(
const resvg = new Resvg(svg);
const pngData = resvg.render();
const png = pngData.asPng();
return new Uint8Array(png.buffer, png.byteOffset, png.byteLength);
return pngData.asPng();
}
+2 -3
View File
@@ -153,8 +153,7 @@ export async function renderToBuffer(
options?: RenderOptions,
): Promise<Uint8Array> {
const document = buildDocument(spec, options);
const buffer = await pdfRenderToBuffer(document as any);
return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);
return pdfRenderToBuffer(document as any);
}
/**
@@ -163,7 +162,7 @@ export async function renderToBuffer(
export async function renderToStream(
spec: Spec,
options?: RenderOptions,
): Promise<NodeJS.ReadableStream> {
): Promise<ReadableStream> {
const document = buildDocument(spec, options);
return pdfRenderToStream(document as any);
}