From 39f2ac80bbbccfb2ac408c5c90bdeb944ed85599 Mon Sep 17 00:00:00 2001 From: Shy Alter Date: Wed, 22 Jul 2026 13:03:31 +0200 Subject: [PATCH] Add HTML document canvases with anchored teammate comments A new "html" canvas template lets the agent generate standalone HTML documents (reports, specs, one-pagers) alongside freeform React canvases, published through the same desktop-file-system canvas flow. Documents render in a null-origin sandboxed iframe with a locked-down CSP and an injected annotation shim; teammates can comment by selecting text, picking an element, or on the whole page, with numbered pins and a side-panel thread view backed by PostHog's comments API. Generated-By: PostHog Code Task-Id: b6ef557f-b02a-45d6-9128-577e1fbad8b1 --- .claude/skills/canvas-templates/SKILL.md | 9 + .../src/renderer/desktop-contributions.ts | 2 + apps/web/src/web-container.ts | 2 + packages/api-client/src/posthog-client.ts | 61 ++ .../core/src/canvas/canvasComments.module.ts | 10 + .../core/src/canvas/canvasCommentsSchemas.ts | 44 ++ .../src/canvas/canvasCommentsService.test.ts | 187 +++++ .../core/src/canvas/canvasCommentsService.ts | 135 ++++ packages/core/src/canvas/canvasTemplates.ts | 76 +- .../core/src/canvas/htmlCanvasSchemas.test.ts | 124 ++++ packages/core/src/canvas/htmlCanvasSchemas.ts | 184 +++++ .../components/WebsiteChannelArtifacts.tsx | 3 +- .../components/WebsiteDashboardsIndex.tsx | 40 +- .../canvas/components/canvasTemplateIcon.tsx | 7 +- .../canvas/freeform/CanvasSidePanel.tsx | 62 +- .../canvas/freeform/FreeformCanvasView.tsx | 117 +++- .../canvas/freeform/FreeformGenerateBar.tsx | 9 +- .../features/canvas/freeformPrompt.test.ts | 36 + .../ui/src/features/canvas/freeformPrompt.ts | 70 +- .../canvas/hooks/useCanvasComments.ts | 90 +++ .../canvas/html/CanvasCommentsPanel.tsx | 305 ++++++++ .../canvas/html/HtmlArtifactFrame.tsx | 231 +++++++ .../features/canvas/html/HtmlCanvasBody.tsx | 226 ++++++ .../canvas/html/annotationShim.test.ts | 150 ++++ .../features/canvas/html/annotationShim.ts | 653 ++++++++++++++++++ .../features/canvas/html/htmlSandbox.test.ts | 66 ++ .../src/features/canvas/html/htmlSandbox.ts | 52 ++ .../canvas/stores/canvasCommentsStore.ts | 51 ++ 28 files changed, 2931 insertions(+), 71 deletions(-) create mode 100644 packages/core/src/canvas/canvasComments.module.ts create mode 100644 packages/core/src/canvas/canvasCommentsSchemas.ts create mode 100644 packages/core/src/canvas/canvasCommentsService.test.ts create mode 100644 packages/core/src/canvas/canvasCommentsService.ts create mode 100644 packages/core/src/canvas/htmlCanvasSchemas.test.ts create mode 100644 packages/core/src/canvas/htmlCanvasSchemas.ts create mode 100644 packages/ui/src/features/canvas/hooks/useCanvasComments.ts create mode 100644 packages/ui/src/features/canvas/html/CanvasCommentsPanel.tsx create mode 100644 packages/ui/src/features/canvas/html/HtmlArtifactFrame.tsx create mode 100644 packages/ui/src/features/canvas/html/HtmlCanvasBody.tsx create mode 100644 packages/ui/src/features/canvas/html/annotationShim.test.ts create mode 100644 packages/ui/src/features/canvas/html/annotationShim.ts create mode 100644 packages/ui/src/features/canvas/html/htmlSandbox.test.ts create mode 100644 packages/ui/src/features/canvas/html/htmlSandbox.ts create mode 100644 packages/ui/src/features/canvas/stores/canvasCommentsStore.ts diff --git a/.claude/skills/canvas-templates/SKILL.md b/.claude/skills/canvas-templates/SKILL.md index 9bc9490e74..52f9f15279 100644 --- a/.claude/skills/canvas-templates/SKILL.md +++ b/.claude/skills/canvas-templates/SKILL.md @@ -17,6 +17,15 @@ A canvas's `kind` (set at create time, persisted in file meta) decides everythin | --- | --- | --- | --- | --- | | **json-render** | `"json-render"` | JSONL patches against a component catalog | `ViewRenderer` (Quill component tree) | `state.queries` HogQL, re-run by `dashboardsService` on refresh | | **freeform / React** | `"freeform"` | a single-file React app | sandboxed `