From 4714e9fad4b6092924de9a328ccefa4c944ce776 Mon Sep 17 00:00:00 2001 From: John Haugabook Date: Mon, 17 Aug 2026 17:48:39 -0400 Subject: [PATCH 1/8] canvas-extension: new chat cards extension --- .github/plugin/marketplace.json | 6 + docs/README.plugins.md | 1 + extensions/chat-cards/README.md | 157 ++ extensions/chat-cards/assets/canvas.html | 821 ++++++++++ extensions/chat-cards/assets/icon.png | Bin 0 -> 4443 bytes extensions/chat-cards/assets/preview.png | Bin 0 -> 260855 bytes extensions/chat-cards/cards-core.mjs | 1484 ++++++++++++++++++ extensions/chat-cards/copilot-extension.json | 21 + extensions/chat-cards/extension.mjs | 739 +++++++++ extensions/chat-cards/package.json | 19 + plugins/chat-cards/README.md | 22 + plugins/chat-cards/plugin.json | 21 + 12 files changed, 3291 insertions(+) create mode 100644 extensions/chat-cards/README.md create mode 100644 extensions/chat-cards/assets/canvas.html create mode 100644 extensions/chat-cards/assets/icon.png create mode 100644 extensions/chat-cards/assets/preview.png create mode 100644 extensions/chat-cards/cards-core.mjs create mode 100644 extensions/chat-cards/copilot-extension.json create mode 100644 extensions/chat-cards/extension.mjs create mode 100644 extensions/chat-cards/package.json create mode 100644 plugins/chat-cards/README.md create mode 100644 plugins/chat-cards/plugin.json diff --git a/.github/plugin/marketplace.json b/.github/plugin/marketplace.json index e1394b4324..1d84efe57a 100644 --- a/.github/plugin/marketplace.json +++ b/.github/plugin/marketplace.json @@ -280,6 +280,12 @@ "sha": "0c2716ca4f28df375529c67b4504b41f7bd29a66" } }, + { + "name": "chat-cards", + "source": "plugins/chat-cards", + "description": "Interactive card deck in a GHCP canvas: tab cards, tables, SVG charts, show/hide sections, numbered outlines, rendered markdown documents, video clips, and forms whose submissions come back to the conversation as prompts.", + "version": "0.1.0" + }, { "name": "chrome-devtools-plugin", "description": "Reliable automation, in-depth debugging, and performance analysis in Chrome using Chrome DevTools and Puppeteer.", diff --git a/docs/README.plugins.md b/docs/README.plugins.md index 0d89c85ffc..ba76c8438a 100644 --- a/docs/README.plugins.md +++ b/docs/README.plugins.md @@ -41,6 +41,7 @@ See [CONTRIBUTING.md](../CONTRIBUTING.md#adding-plugins) for guidelines on how t | [backlog-swipe-triage](../plugins/backlog-swipe-triage/README.md) | Quickly swipe through backlog issues to triage decisions like assign, needs-info, defer, close, or ignore. | 1 items | agent-assignment, backlog-triage, github-issues, issue-prioritization, swipe-interface, workflow-automation | | [backrooms-canvas](../plugins/backrooms-canvas/README.md) | Wander an endless first-person backrooms in a Copilot canvas while agents work; their status ghost-writes on the walls. | 1 items | backrooms, copilot-canvas, interactive-canvas, first-person, procedural-generation, session-breaks | | [cast-imaging](../plugins/cast-imaging/README.md) | A comprehensive collection of specialized agents for software analysis, impact assessment, structural quality advisories, and architectural review using CAST Imaging. | 3 items | cast-imaging, software-analysis, architecture, quality, impact-analysis, devops | +| [chat-cards](../plugins/chat-cards/README.md) | Interactive card deck in a GHCP canvas: tab cards, tables, SVG charts, show/hide sections, numbered outlines, rendered markdown documents, video clips, and forms whose submissions come back to the conversation as prompts. | 1 items | interactive-cards, charts, forms, education, visual-explanations | | [chromium-control-canvas](../plugins/chromium-control-canvas/README.md) | Opens a real Chromium window you can navigate and interact with from a Copilot canvas control panel and agent actions. | 1 items | browser-control, chromium-browser, interactive-canvas, playwright-automation, screenshots, ui-testing, web-navigation | | [clojure-interactive-programming](../plugins/clojure-interactive-programming/README.md) | Tools for REPL-first Clojure workflows featuring Clojure instructions, the interactive programming chat mode and supporting guidance. | 2 items | clojure, repl, interactive-programming | | [cms-development](../plugins/cms-development/README.md) | Skills for CMS development across themes, plugins, admin tooling, media workflows, markdown rendering, and static export pipelines. | 3 items | cms, content-management-system, wordpress, shopify, drupal, theme, plugin, media, static-site | diff --git a/extensions/chat-cards/README.md b/extensions/chat-cards/README.md new file mode 100644 index 0000000000..e61e4381b8 --- /dev/null +++ b/extensions/chat-cards/README.md @@ -0,0 +1,157 @@ +# Chat Cards + +Interactive card deck for GitHub Copilot canvas. Instead of walls of text, the +agent explains things visually with a live deck of interactive cards: tab boxes, +tables, SVG charts, forms, collapsible sections, numbered outlines, rendered +markdown documents, and short video clips. Forms are two-way: submitting one +sends the values back to the conversation as the agent's next prompt, so a card +can gather context and steer the session as easily as it presents information. + +The extension is a port of an MCP server, which is similar; but renders the cards +inline of the coversation, instead of rendering the HTML in a separate panel. + +![Chat Cards canvas preview](assets/preview.png) + +## What is in the deck + +| Action | Card | +| ------ | ---- | +| `create_tab_card` | Tabbed views of one subject (markdown, text, HTML, or code per tab with copy buttons) | +| `create_table_card` | HTML table from explicit rows or loosely delimited raw text (delimiter auto-detected, URL cells become links) | +| `create_chart_card` | SVG bar, line, pie, or donut chart with legend and a collapsible data table | +| `create_form_card` | Form whose submission becomes the next conversation prompt | +| `create_reveal_card` | Collapsible show/hide sections with show-all/hide-all controls | +| `create_list_card` | Nested sequential outline numbered 1., 1.1., 1.1.1. | +| `create_markdown_card` | Render a markdown document as one card: H1 becomes the title, H2 sections fold into reveals | +| `create_video_card` | HTML video player for a short clip (direct file URL, `data:video/*`, or `blob:`) | +| `update_card` | Re-render an existing card in place | +| `remove_card` / `clear_cards` | Take cards off the deck | +| `list_cards` | See the deck (the user may have reordered or removed cards) | +| `get_form_responses` | Read form submissions, newest first | + +Every card keeps the signature interactions of the MCP version: a "Copy card" button that +copies the card as a standalone HTML document, a `` toggle that shows the card's own +HTML source, a collapse toggle, drag to reorder cards in the deck, tutor terms that show +tooltips after a hover dwell, and model-defined right-click actions that send prompts back +to the conversation (`{{selection}}` in an action prompt is replaced with the user's +selected text). The deck has a light and a dark theme. + +## Example action inputs + +`create_table_card`: + +```json +{ + "title": "JavaScript array methods", + "headers": ["Method", "Purpose"], + "rows": [ + ["map", "Transform each item"], + ["filter", "Keep matching items"], + ["reduce", "Fold items into one value"] + ] +} +``` + +`create_form_card`: + +```json +{ + "title": "Study preferences", + "promptTemplate": "Teach {{topic}} with {{style}} examples.", + "fields": [ + { "name": "topic", "label": "Topic", "required": true }, + { "name": "style", "type": "select", "options": ["practical", "theoretical"] } + ] +} +``` + +When the user submits the form, the filled template is handed to the agent as the next +prompt. If the handoff fails, the card reveals the prompt text with a copy button, and the +agent can always read submissions later with `get_form_responses`. + +## Installation + +Requires Node.js 18.17 or newer and a GitHub Copilot client that supports +canvas extensions (*such as GitHub Copilot CLI*). + +Drop this folder at `~/.copilot/extensions/chat-cards/` for user scope, or +in a repository at `.github/extensions/chat-cards/` for project scope. Then +install dependencies from inside the copied folder: + +```bash +# User scope +cd ~/.copilot/extensions/chat-cards + +# Or project scope, from the repository root +cd .github/extensions/chat-cards + +npm install +``` + +`npm install` pulls the extension's single dependency (`@github/copilot-sdk`). +Then register the `extension/` folder with your Copilot client as a local +extension, start a session, and ask the agent to open the Chat Cards canvas. +The MCP server at the repository root is separate and is not affected by +installing the extension (*and vice versa*); install whichever fits your host, +or both. + +Reload extensions in the GitHub Copilot app, then open the chat-cards canvas in +a conversation. + +## How the port maps to the MCP server + +| MCP server | Canvas extension | +| ---------- | ---------------- | +| MCP tools (`create_tab_card`, ...) | Canvas actions with the same names and input shapes | +| MCP Apps iframe / embedded HTML resource | Live canvas page served on `127.0.0.1` | +| Form submit posts `ui/message` to the host | Form submit calls `session.send({ prompt })` | +| Card HTML per tool result | Deck state pushed to the page over SSE | +| `src/cards/*` + `src/util/*` (TypeScript) | `cards-core.mjs` (dependency-free port, testable without the SDK) | + +Deliberate differences: + +- **Stricter HTML sanitizing.** Tab and reveal content can be markdown, text, code, or + HTML, like the MCP server, but where the server sanitizes HTML with a parser dependency, + the extension rebuilds it against a strict tag and attribute allowlist: unknown or + malformed tags render as visible literal text, attributes are re-emitted from scratch, + and closing tags are balanced. A tab or section with no usable content is rejected with + an error naming it, instead of rendering an empty panel. +- **No file, archive, or web-fetch actions.** `read_local_file`, `unpack_archive`, + `fetch_reference`, `mirror_web_form`, and `submit_web_form` stay MCP-only: a Copilot + agent already reads files and pages natively, so it passes content inline (for example + `create_markdown_card` takes the markdown itself rather than a path). +- **No multi-part splitting.** MCP hosts cap tool-result sizes, so the server splits large + documents into parts. The canvas renders directly and needs no parts; the deck instead + keeps at most 60 cards, dropping the oldest. + +## Folder layout + +```text +extension/ + extension.mjs Canvas/session wiring, actions, local HTTP + SSE server + cards-core.mjs Card builders and rendering (no SDK import; unit-testable) + copilot-extension.json Plugin manifest for the awesome-copilot submission + package.json Extension package manifest + assets/ + canvas.html The canvas page (theme, card runtime, deck UI) + preview.png Screenshot used as the extension logo/preview +``` + +## Security notes + +- The card server binds to `127.0.0.1` on an ephemeral port; every request must carry the + per-canvas token, and request bodies are size-capped. +- All model- and user-supplied text is HTML-escaped before it reaches card markup, and the + markdown renderer emits only escaped text nodes. +- The canvas page loads no external scripts, stylesheets, or fonts. +- Prompts sent from the canvas (form submissions and context actions) are length-capped. + +## Development + +The rendering core has no SDK dependency, so it can be exercised directly: + +```bash +node -e "import('./cards-core.mjs').then(m => console.log(m.buildTableCard({ title: 'Demo', rows: [['a', 'b']] }).summary))" +``` + +To run the extension itself, follow [Installation](#installation) above. diff --git a/extensions/chat-cards/assets/canvas.html b/extensions/chat-cards/assets/canvas.html new file mode 100644 index 0000000000..203ab80c36 --- /dev/null +++ b/extensions/chat-cards/assets/canvas.html @@ -0,0 +1,821 @@ + + + + + +Chat Cards + + + +
+
+ Chat Cards + +
+
+ +
+
+
+

No cards yet

+

Ask your agent for a tab, table, chart, form, show/hide, list, document, or video card
and it will appear here.

+
+
+ +
+ + + + diff --git a/extensions/chat-cards/assets/icon.png b/extensions/chat-cards/assets/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..5c943f4842daaf9756c534f607f02a696644f1fd GIT binary patch literal 4443 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 literal 0 HcmV?d00001 diff --git a/extensions/chat-cards/assets/preview.png b/extensions/chat-cards/assets/preview.png new file mode 100644 index 0000000000000000000000000000000000000000..9b77d64726b54861c31c42c06c1dcfc3ea5e4b67 GIT binary patch literal 260855 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

`Trs+%WG*8jc!MfWjg8BHzk1Gv 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

< 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 literal 0 HcmV?d00001 diff --git a/extensions/chat-cards/cards-core.mjs b/extensions/chat-cards/cards-core.mjs new file mode 100644 index 0000000000..d92086af36 --- /dev/null +++ b/extensions/chat-cards/cards-core.mjs @@ -0,0 +1,1484 @@ +// Card building core for the Chat Cards canvas extension. This module is a +// dependency-free port of the mcp-chat-cards renderers (src/cards and +// src/util) so the extension folder stays self-contained for reuse outside +// this repository. It knows nothing about the Copilot SDK or the HTTP server; +// extension.mjs wires those. Everything here is pure string logic, so it can +// be exercised with plain Node without joining a session. + +// --------------------------------------------------------------------------- +// Escaping and small string helpers (ported from src/util/html.ts) +// --------------------------------------------------------------------------- + +const HTML_ESCAPES = { + "&": "&", + "<": "<", + ">": ">", + '"': """, + "'": "'", +}; + +// Every text field an action accepts is PLAIN text and is escaped here, so a +// caller must not pre-escape. Callers do it anyway, and turning their +// "&" into "&amp;" shows the entity literally in the card. A "&" that +// already begins a well-formed character reference is therefore left alone. +// This costs nothing in safety: < > " and ' are still escaped +// unconditionally, so no pre-escaped text can reopen a tag or an attribute. +const ESCAPE_PATTERN = + /[<>"']|&(?!#\d{1,7};|#[xX][0-9a-fA-F]{1,6};|[a-zA-Z][a-zA-Z0-9]{1,31};)/g; + +export function escapeHtml(value) { + return String(value ?? "").replace(ESCAPE_PATTERN, (ch) => HTML_ESCAPES[ch]); +} + +let uidCounter = 0; + +export function uid(prefix = "mcc") { + uidCounter += 1; + return `${prefix}-${Date.now().toString(36)}-${uidCounter.toString(36)}`; +} + +export function escapeRegExp(value) { + return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); +} + +export function isHttpUrl(value) { + try { + const url = new URL(value); + return url.protocol === "http:" || url.protocol === "https:"; + } catch { + return false; + } +} + +export function looksLikeUrl(value) { + return /^https?:\/\/\S+$/i.test(String(value ?? "").trim()); +} + +export function isDataUrlOfType(value, type) { + return new RegExp(`^data:${type}/[a-z0-9.+-]+\\s*[;,]`, "i").test(String(value ?? "").trim()); +} + +export function isBlobUrl(value) { + return /^blob:\S+$/i.test(String(value ?? "").trim()); +} + +// Sources a

${escapeHtml(block).replace(/\n/g, "
")}

`) + .join("\n"); +} + +// --------------------------------------------------------------------------- +// HTML sanitizing +// --------------------------------------------------------------------------- +// The MCP server sanitizes caller HTML with an HTML parser dependency. The +// extension stays dependency-free, so this is a strict rebuild-only +// sanitizer: a tag survives only if its name is allowlisted, and it is then +// re-emitted from scratch with only allowlisted, validated attributes. +// Anything else (unknown tags, malformed tags) is escaped and shown as +// literal text, so a mistake is visible instead of silently dropped. Closing +// tags are balanced against a stack, so caller HTML can never close the +// card's own containers or leak an open element into the rest of the page. + +const SAFE_HTML_TAGS = new Set([ + "a", "abbr", "b", "blockquote", "br", "caption", "code", "dd", "details", + "div", "dl", "dt", "em", "figcaption", "figure", "h1", "h2", "h3", "h4", + "h5", "h6", "hr", "i", "img", "kbd", "li", "mark", "ol", "p", "pre", "q", + "s", "samp", "section", "small", "span", "strong", "sub", "summary", "sup", + "table", "tbody", "td", "tfoot", "th", "thead", "tr", "u", "ul", "var", +]); + +const SANITIZE_VOID_TAGS = new Set(["br", "hr", "img"]); + +// Per-tag attribute allowlist with a validator per attribute. An attribute +// missing here, or failing its validator, is dropped. +const SAFE_CLASS_PATTERN = /^[a-zA-Z0-9_ -]*$/; +const SAFE_ATTR_RULES = { + "*": { class: (v) => SAFE_CLASS_PATTERN.test(v), title: () => true }, + a: { href: (v) => isHttpUrl(v.trim()) }, + img: { + src: (v) => isDisplayableImageUrl(v), + alt: () => true, + width: (v) => /^\d{1,4}$/.test(v), + height: (v) => /^\d{1,4}$/.test(v), + }, + td: { colspan: (v) => /^\d{1,3}$/.test(v), rowspan: (v) => /^\d{1,3}$/.test(v) }, + th: { + colspan: (v) => /^\d{1,3}$/.test(v), + rowspan: (v) => /^\d{1,3}$/.test(v), + scope: (v) => v === "col" || v === "row", + }, + details: { open: () => true }, + ol: { start: (v) => /^\d{1,6}$/.test(v), type: (v) => /^[1AaIi]$/.test(v) }, +}; + +const ATTR_PATTERN = /([a-zA-Z][a-zA-Z0-9-]*)\s*(?:=\s*(?:"([^"]*)"|'([^']*)'|([^\s"'>]+)))?/g; + +function rebuildTag(name, attrText) { + const rules = { ...SAFE_ATTR_RULES["*"], ...(SAFE_ATTR_RULES[name] ?? {}) }; + let out = `<${name}`; + ATTR_PATTERN.lastIndex = 0; + let match; + while ((match = ATTR_PATTERN.exec(attrText)) !== null) { + const attr = match[1].toLowerCase(); + const value = match[2] ?? match[3] ?? match[4]; + const validator = rules[attr]; + if (!validator) continue; + if (value === undefined) { + // Boolean attribute (e.g.
). + if (validator("")) out += ` ${attr}`; + continue; + } + if (validator(value)) out += ` ${attr}="${escapeHtml(value)}"`; + } + // Links open outside the canvas, matching the table and markdown renderers. + if (name === "a" && out.includes(' href="')) { + out += ' target="_blank" rel="noopener noreferrer nofollow"'; + } + return `${out}>`; +} + +// Strip active content from caller-supplied HTML so it can be embedded in a +// card. Unknown or malformed tags render as visible literal text. +export function sanitizeHtml(html) { + const segments = String(html ?? "").split(/(<[^>]*>)/); + const openStack = []; + let out = ""; + + for (const segment of segments) { + if (segment.length === 0) continue; + if (!segment.startsWith("<")) { + out += escapeHtml(segment); + continue; + } + const match = /^<\s*(\/?)\s*([a-zA-Z][a-zA-Z0-9-]*)([^>]*?)\/?\s*>$/.exec(segment); + const name = match?.[2]?.toLowerCase(); + if (!match || !SAFE_HTML_TAGS.has(name)) { + out += escapeHtml(segment); + continue; + } + if (match[1] === "/") { + // Emit the close only if the element is actually open, closing any + // elements opened after it first so nesting stays valid. + const depth = openStack.lastIndexOf(name); + if (depth === -1) continue; + while (openStack.length > depth) { + out += ``; + } + continue; + } + out += rebuildTag(name, match[3] ?? ""); + if (!SANITIZE_VOID_TAGS.has(name)) openStack.push(name); + } + + while (openStack.length > 0) { + out += ``; + } + return out; +} + +// --------------------------------------------------------------------------- +// Tutor terms (ported from src/util/html.ts wrapTermsInHtml) +// --------------------------------------------------------------------------- + +const DEFAULT_MAX_PER_TERM = 1; +const DEFAULT_MAX_TOTAL = 40; + +// Text inside these elements is not visible prose. A span here is either +// shown literally or breaks the element: SVG is the native tooltip, +// so markup inside it turns the tooltip into raw text. +const TERM_SKIP_TAGS = new Set(["script", "style", "title", "desc", "head", "textarea", "option", "select"]); + +const TERM_CODE_TAGS = new Set(["pre", "code", "kbd", "samp", "var"]); + +// Elements with no closing tag, which therefore never open a region. +const VOID_TAGS = new Set([ + "area", "base", "br", "col", "embed", "hr", "img", "input", + "link", "meta", "param", "source", "track", "wbr", +]); + +// Comments, doctypes, and a stray "<" all return null: they open nothing. +function readTag(token) { + const match = /^<\s*(\/?)\s*([a-zA-Z][a-zA-Z0-9:-]*)/.exec(token); + if (!match) return null; + return { + name: match[2].toLowerCase(), + closing: match[1] === "/", + selfClosing: /\/\s*>$/.test(token), + isTerm: /class\s*=\s*["'][^"']*\bmcc-term\b/.test(token), + }; +} + +function prepareTerms(terms) { + const seen = new Set(); + const prepared = []; + for (const entry of terms) { + const trimmed = (entry?.term ?? "").trim(); + if (trimmed.length === 0) continue; + const key = trimmed.toLowerCase(); + // Identical terms listed twice would otherwise burn the per-term budget + // twice over and produce two tips for the same word. + if (seen.has(key)) continue; + seen.add(key); + prepared.push({ key, tip: entry.tip ?? "", escaped: escapeHtml(trimmed) }); + } + // Longest first, so "memory safety" claims the position rather than the + // "memory" that starts at the same index. + prepared.sort((a, b) => b.escaped.length - a.escaped.length || a.key.localeCompare(b.key)); + return prepared; +} + +// Wrap visible-text occurrences of tutor terms in .mcc-term spans so the +// canvas page can show dwell tooltips. Every match is emitted straight to the +// output and never rescanned, and a single alternation over all terms does +// the scanning, so one term can never land inside markup produced for +// another. Regions that are not visible prose (attributes, <title>, <script>, +// <style>, code samples, and text already inside an .mcc-term span) are +// skipped outright. +export function wrapTermsInHtml(html, terms, options = {}) { + const maxPerTerm = options.maxPerTerm ?? DEFAULT_MAX_PER_TERM; + const maxTotal = options.maxTotal ?? DEFAULT_MAX_TOTAL; + const prepared = prepareTerms(terms ?? []); + if (prepared.length === 0 || maxPerTerm < 1 || maxTotal < 1) return html; + + const skipTags = new Set(TERM_SKIP_TAGS); + if (!options.includeCode) for (const tag of TERM_CODE_TAGS) skipTags.add(tag); + + const byMatch = new Map(prepared.map((term) => [term.escaped.toLowerCase(), term])); + const pattern = new RegExp( + `(?<![\\w-])(?:${prepared.map((term) => escapeRegExp(term.escaped)).join("|")})(?![\\w-])`, + "gi", + ); + + const used = new Map(); + const openTags = []; + const segments = html.split(/(<[^>]*>)/); + let total = 0; + + for (let i = 0; i < segments.length; i++) { + const segment = segments[i]; + if (segment.length === 0) continue; + + if (segment.startsWith("<")) { + const tag = readTag(segment); + if (!tag) continue; + if (tag.closing) { + for (let depth = openTags.length - 1; depth >= 0; depth--) { + if (openTags[depth].name === tag.name) { + openTags.length = depth; + break; + } + } + } else if (!tag.selfClosing && !VOID_TAGS.has(tag.name)) { + openTags.push({ name: tag.name, skip: skipTags.has(tag.name) || tag.isTerm }); + } + continue; + } + + if (total >= maxTotal) continue; + if (openTags.some((open) => open.skip)) continue; + + pattern.lastIndex = 0; + let out = ""; + let last = 0; + let match; + while (total < maxTotal && (match = pattern.exec(segment)) !== null) { + const term = byMatch.get(match[0].toLowerCase()); + if (!term) continue; + const count = used.get(term.key) ?? 0; + if (count >= maxPerTerm) continue; + used.set(term.key, count + 1); + total += 1; + out += + segment.slice(last, match.index) + + `<span class="mcc-term" data-tip="${escapeHtml(term.tip)}">${match[0]}</span>`; + last = match.index + match[0].length; + } + if (last > 0) segments[i] = out + segment.slice(last); + } + + return segments.join(""); +} + +// --------------------------------------------------------------------------- +// Text to table (ported from src/util/text-to-table.ts) +// --------------------------------------------------------------------------- + +const CANDIDATE_DELIMITERS = ["\t", "|", ";", ","]; + +// Pick the first candidate delimiter that appears on most non-empty lines. +export function detectCellDelimiter(lines) { + if (lines.length === 0) return null; + const threshold = Math.max(1, Math.ceil(lines.length * 0.6)); + for (const delimiter of CANDIDATE_DELIMITERS) { + const linesWithDelimiter = lines.filter((line) => line.includes(delimiter)).length; + if (linesWithDelimiter >= threshold) return delimiter; + } + return null; +} + +// Pad or trim header titles to exactly `count` columns. +export function balanceHeaders(headers, count) { + const out = headers.slice(0, count).map((h) => h.trim()); + while (out.length < count) out.push(`Column ${out.length + 1}`); + return out; +} + +export function textToTable(text, options = {}) { + const rowDelimiter = options.rowDelimiter ?? "\n"; + const lines = String(text ?? "") + .split(rowDelimiter) + .map((line) => line.trim()) + .filter((line) => line.length > 0); + + if (lines.length === 0) { + const width = options.columns ?? options.headers?.length ?? 1; + return { headers: options.headers ? balanceHeaders(options.headers, width) : [], rows: [] }; + } + + const delimiter = options.cellDelimiter ?? detectCellDelimiter(lines); + let rows; + if (delimiter) { + rows = lines.map((line) => + line + .split(delimiter) + .map((cell) => cell.trim()) + // Drop empty edge cells produced by markdown-style "| a | b |" rows. + .filter((cell, index, cells) => cell.length > 0 || (index > 0 && index < cells.length - 1)), + ); + } else { + const columns = Math.max(1, options.columns ?? options.headers?.length ?? 2); + rows = []; + for (let i = 0; i < lines.length; i += columns) { + rows.push(lines.slice(i, i + columns)); + } + } + + const width = Math.max( + 1, + options.columns ?? Math.max(options.headers?.length ?? 0, ...rows.map((row) => row.length)), + ); + rows = rows.map((row) => { + const cells = row.slice(0, width); + while (cells.length < width) cells.push(""); + return cells; + }); + + return { + headers: options.headers ? balanceHeaders(options.headers, width) : [], + rows, + }; +} + +// Ensure explicit row data is rectangular, padding short rows with blanks. +export function normalizeRows(rows, headers = []) { + const width = Math.max(1, headers.length, ...rows.map((row) => row.length)); + const balanced = rows.map((row) => { + const cells = row.slice(0, width).map((cell) => String(cell ?? "")); + while (cells.length < width) cells.push(""); + return cells; + }); + return { + headers: headers.length > 0 ? balanceHeaders(headers, width) : [], + rows: balanced, + }; +} + +// --------------------------------------------------------------------------- +// Markdown rendering +// --------------------------------------------------------------------------- +// The MCP server parses markdown with the `marked` package and sanitizes the +// result. The extension stays dependency-free, so this is a small renderer +// covering what a model-written guide actually uses: headings, paragraphs, +// nested lists, fenced code, pipe tables, blockquotes, rules, and the inline +// set (code, bold, italic, links, images). Every text node passes through +// escapeHtml, so the output cannot carry active content. + +function renderInline(raw) { + // Null bytes would collide with the placeholder markers below. + let text = escapeHtml(String(raw ?? "").replace(/\u0000/g, "")); + + // Code spans first: their content is protected from the other inline rules. + const codeSpans = []; + text = text.replace(/`([^`]+)`/g, (_, code) => { + codeSpans.push(`<code>${code}</code>`); + return `\u0000${codeSpans.length - 1}\u0000`; + }); + + // Images before links, so ![alt](src) is not half-eaten by the link rule. + text = text.replace(/!\[([^\]]*)\]\(([^()\s]+)\)/g, (whole, alt, src) => { + if (/^https?:\/\//i.test(src) || /^data:image\//i.test(src)) { + return `<img src="${src}" alt="${alt}">`; + } + return whole; + }); + text = text.replace(/\[([^\]]+)\]\(([^()\s]+)\)/g, (whole, label, href) => { + if (/^https?:\/\//i.test(href)) { + return `<a href="${href}" target="_blank" rel="noopener noreferrer nofollow">${label}</a>`; + } + return whole; + }); + + text = text.replace(/\*\*([^*]+)\*\*/g, "<strong>$1</strong>"); + text = text.replace(/__([^_]+)__/g, "<strong>$1</strong>"); + text = text.replace(/\*([^*\s][^*]*)\*/g, "<em>$1</em>"); + text = text.replace(/(^|\s)_([^_]+)_(?=\s|[.,;:!?)]|$)/g, "$1<em>$2</em>"); + + return text.replace(/\u0000(\d+)\u0000/g, (_, index) => codeSpans[Number(index)]); +} + +function renderCodeBlock(code, language) { + return ( + '<div class="mcc-codewrap">' + + '<button type="button" class="mcc-btn mcc-copy-code">Copy</button>' + + `<pre><code class="language-${escapeHtml(language || "text")}">${escapeHtml(code)}</code></pre>` + + "</div>" + ); +} + +function isTableSeparator(line) { + return /^\s*\|?\s*:?-{2,}:?\s*(\|\s*:?-{2,}:?\s*)*\|?\s*$/.test(line); +} + +function splitTableRow(line) { + const cells = line.split("|").map((cell) => cell.trim()); + if (cells.length > 0 && cells[0] === "") cells.shift(); + if (cells.length > 0 && cells[cells.length - 1] === "") cells.pop(); + return cells; +} + +const LIST_ITEM_PATTERN = /^(\s*)([-*+]|\d+[.)])\s+(.*)$/; + +function renderList(lines, start) { + // Returns { html, next }. Nesting follows indentation width; two or more + // extra spaces open a child list, matching how models format outlines. + const stack = []; + let html = ""; + let index = start; + + const closeTo = (depth) => { + while (stack.length > depth) { + const top = stack.pop(); + html += `</li></${top.tag}>`; + } + }; + + while (index < lines.length) { + const match = LIST_ITEM_PATTERN.exec(lines[index]); + if (!match) break; + const indent = match[1].replace(/\t/g, " ").length; + const ordered = /\d/.test(match[2][0]); + const tag = ordered ? "ol" : "ul"; + + while (stack.length > 0 && indent < stack[stack.length - 1].indent) { + const top = stack.pop(); + html += `</li></${top.tag}>`; + } + + if (stack.length === 0 || indent > stack[stack.length - 1].indent + 1) { + stack.push({ indent, tag }); + html += `<${tag}><li>${renderInline(match[3])}`; + } else { + html += `</li><li>${renderInline(match[3])}`; + } + index += 1; + } + closeTo(0); + return { html, next: index }; +} + +// Render a markdown fragment to card-styled HTML (no section folding). +export function renderMarkdownFragment(markdown) { + const lines = String(markdown ?? "").replace(/\r\n?/g, "\n").split("\n"); + const parts = []; + let paragraph = []; + + const flushParagraph = () => { + if (paragraph.length === 0) return; + parts.push(`<p>${paragraph.map(renderInline).join("<br>")}</p>`); + paragraph = []; + }; + + let i = 0; + while (i < lines.length) { + const line = lines[i]; + const trimmed = line.trim(); + + const fence = /^```\s*([a-zA-Z0-9+#._-]*)\s*$/.exec(trimmed); + if (fence) { + flushParagraph(); + const code = []; + i += 1; + while (i < lines.length && !/^```\s*$/.test(lines[i].trim())) { + code.push(lines[i]); + i += 1; + } + i += 1; + parts.push(renderCodeBlock(code.join("\n"), fence[1])); + continue; + } + + if (trimmed.length === 0) { + flushParagraph(); + i += 1; + continue; + } + + const heading = /^(#{1,6})\s+(.*?)\s*#*\s*$/.exec(trimmed); + if (heading) { + flushParagraph(); + const level = heading[1].length; + parts.push(`<h${level}>${renderInline(heading[2])}</h${level}>`); + i += 1; + continue; + } + + if (/^(-{3,}|\*{3,}|_{3,})$/.test(trimmed)) { + flushParagraph(); + parts.push("<hr>"); + i += 1; + continue; + } + + if (trimmed.startsWith(">")) { + flushParagraph(); + const quoted = []; + while (i < lines.length && lines[i].trim().startsWith(">")) { + quoted.push(lines[i].trim().replace(/^>\s?/, "")); + i += 1; + } + const inner = quoted + .join("\n") + .split(/\n{2,}/) + .map((block) => `<p>${block.split("\n").map(renderInline).join("<br>")}</p>`) + .join(""); + parts.push(`<blockquote>${inner}</blockquote>`); + continue; + } + + if (trimmed.includes("|") && i + 1 < lines.length && isTableSeparator(lines[i + 1])) { + flushParagraph(); + const headers = splitTableRow(trimmed); + const rows = []; + i += 2; + while (i < lines.length && lines[i].includes("|") && lines[i].trim().length > 0) { + rows.push(splitTableRow(lines[i].trim())); + i += 1; + } + const thead = `<thead><tr>${headers.map((h) => `<th scope="col">${renderInline(h)}</th>`).join("")}</tr></thead>`; + const tbody = rows + .map((row) => `<tr>${headers.map((_, c) => `<td>${renderInline(row[c] ?? "")}</td>`).join("")}</tr>`) + .join(""); + parts.push( + `<div class="mcc-table-scroll"><table class="mcc-table">${thead}<tbody>${tbody}</tbody></table></div>`, + ); + continue; + } + + if (LIST_ITEM_PATTERN.test(line)) { + flushParagraph(); + const list = renderList(lines, i); + parts.push(list.html); + i = list.next; + continue; + } + + paragraph.push(trimmed); + i += 1; + } + flushParagraph(); + return parts.join("\n"); +} + +// Parse a markdown document the way the MCP document card does: the first H1 +// becomes the title, and the body splits into sections on H2 headings (the +// content before the first H2 is the intro section with a null heading). +export function parseMarkdownDocument(markdown) { + const source = String(markdown ?? "").replace(/\r\n?/g, "\n"); + const lines = source.split("\n"); + let title; + const sections = []; + let current = { heading: null, lines: [] }; + let inFence = false; + + for (const line of lines) { + const trimmed = line.trim(); + if (/^```/.test(trimmed)) inFence = !inFence; + if (!inFence) { + const h1 = /^#\s+(.*?)\s*#*\s*$/.exec(trimmed); + if (h1 && title === undefined) { + title = h1[1]; + continue; + } + const h2 = /^##\s+(.*?)\s*#*\s*$/.exec(trimmed); + if (h2) { + if (current.lines.join("").trim().length > 0 || current.heading !== null) sections.push(current); + current = { heading: h2[1], lines: [] }; + continue; + } + } + current.lines.push(line); + } + if (current.lines.join("").trim().length > 0 || current.heading !== null) sections.push(current); + + return { + title, + sections: sections.map((section) => ({ + heading: section.heading, + html: renderMarkdownFragment(section.lines.join("\n")), + })), + }; +} + +function renderMarkdownSections(sections, options = {}) { + const folded = options.folded !== false; + const headed = sections.filter((section) => section.heading !== null); + const parts = []; + + if (!folded || headed.length === 0) { + for (const section of sections) { + if (section.heading !== null) parts.push(`<h2>${escapeHtml(section.heading)}</h2>`); + parts.push(section.html); + } + return parts.join(""); + } + + let firstOpenUsed = false; + let controlsAdded = false; + for (const section of sections) { + if (section.heading === null) { + parts.push(section.html); + continue; + } + if (!controlsAdded) { + controlsAdded = true; + parts.push(`<div style="display:flex;gap:6px;justify-content:flex-end;margin-bottom:8px"> +<button type="button" class="mcc-btn" data-mcc-expand="all">Show all</button> +<button type="button" class="mcc-btn" data-mcc-expand="none">Hide all</button> +</div>`); + } + const open = !firstOpenUsed && options.openFirst !== false ? " open" : ""; + firstOpenUsed = true; + parts.push(`<details class="mcc-reveal"${open}> +<summary>${escapeHtml(section.heading)}</summary> +<div class="mcc-reveal-body">${section.html}</div> +</details>`); + } + return parts.join("\n"); +} + +// --------------------------------------------------------------------------- +// Chart rendering (ported from src/cards/chart.ts) +// --------------------------------------------------------------------------- +// One deliberate change from the MCP version: axis, grid, and separator +// colors reference the card theme variables (with the original light values +// as fallbacks) instead of fixed hex values. The canvas page inlines the SVG +// in its own DOM, so the chart follows the light/dark theme for free. + +const PALETTE = ["#2b6cb0", "#2f855a", "#0e7490", "#5b6b7b", "#1d4e89", "#38a169", "#4c7ba8"]; + +const CHART_WIDTH = 640; +const CHART_HEIGHT = 340; +const MARGIN = { top: 20, right: 20, bottom: 56, left: 52 }; + +const GRID_STROKE = "var(--mcc-border, #d8e2ec)"; +const TICK_FILL = "var(--mcc-muted, #5b6b7b)"; +const LABEL_FILL = "var(--mcc-text, #1f2328)"; +const SLICE_STROKE = "var(--mcc-surface, #ffffff)"; + +// Steps a reader can do arithmetic on, in ascending order within each decade. +const STEP_MANTISSAS = [1, 2, 2.5, 5]; + +// Choose an axis top and tick step covering [0, maxValue] in at most maxTicks +// intervals, picking the SMALLEST readable step that fits rather than slicing +// the range into a fixed number of equal parts. Integer data is additionally +// held to an integer step, so a 1-5 rating scale reads 0, 1, 2, 3, 4, 5. +export function niceScale(maxValue, maxTicks = 6, integerData = false) { + if (!(maxValue > 0) || !Number.isFinite(maxValue)) return { max: 1, step: 1, ticks: [0, 1] }; + + let step = 0; + const startExponent = Math.floor(Math.log10(maxValue)) - 2; + for (let exponent = startExponent; exponent <= startExponent + 9 && step === 0; exponent++) { + for (const mantissa of STEP_MANTISSAS) { + const candidate = mantissa * 10 ** exponent; + if (candidate <= 0) continue; + if (integerData && !Number.isInteger(candidate)) continue; + // The epsilon keeps a max that is an exact multiple of the candidate + // from being counted as one interval too many. + if (Math.ceil(maxValue / candidate - 1e-9) <= maxTicks) { + step = candidate; + break; + } + } + } + if (step === 0) step = maxValue / maxTicks; + + const max = Number((Math.ceil(maxValue / step - 1e-9) * step).toFixed(6)); + const ticks = []; + // Half a step of slack absorbs the float drift that would otherwise drop + // the top tick when max is an exact multiple of step. + for (let value = 0; value <= max + step / 2; value += step) { + ticks.push(Number(value.toFixed(6))); + } + return { max, step, ticks }; +} + +// Data made only of integers gets an integer axis. A 1-5 rating scale is the +// common case, and fractional ticks on it are noise. +function seriesScale(series) { + const values = series.flatMap((s) => s.values).filter((value) => Number.isFinite(value)); + return niceScale(Math.max(...values, 0), 6, values.every((value) => Number.isInteger(value))); +} + +// Only the decimals the step actually needs, so a 0.25 step reads "0.25" and +// a whole-number step never prints "3.0". +function decimalsForStep(step) { + if (Number.isInteger(step)) return 0; + const text = step.toPrecision(12).replace(/0+$/, ""); + const dot = text.indexOf("."); + return dot === -1 ? 0 : Math.min(6, text.length - dot - 1); +} + +function formatTick(value, step) { + if (Number.isInteger(value)) return String(value); + return value.toFixed(decimalsForStep(step)); +} + +function axisAndGrid(scale, plotWidth, plotHeight) { + let out = ""; + for (const value of scale.ticks) { + const y = MARGIN.top + plotHeight - (plotHeight * value) / scale.max; + out += `<line x1="${MARGIN.left}" y1="${y.toFixed(1)}" x2="${MARGIN.left + plotWidth}" y2="${y.toFixed(1)}" stroke="${GRID_STROKE}" stroke-width="1"/>`; + out += `<text x="${MARGIN.left - 8}" y="${(y + 4).toFixed(1)}" text-anchor="end" font-size="11" fill="${TICK_FILL}">${escapeHtml( + formatTick(value, scale.step), + )}</text>`; + } + return out; +} + +// Break a label across at most maxLines lines without splitting words. A word +// too long to fit on its own line is left alone rather than hyphenated; the +// full text is always reachable from the <title> either way. +export function wrapLabel(label, maxChars, maxLines) { + const words = label.split(/\s+/).filter((word) => word.length > 0); + if (words.length === 0) return [label]; + const lines = []; + let current = ""; + for (const word of words) { + const candidate = current.length === 0 ? word : `${current} ${word}`; + if (candidate.length <= maxChars || current.length === 0) { + current = candidate; + } else { + lines.push(current); + current = word; + } + } + if (current.length > 0) lines.push(current); + if (lines.length <= maxLines) return lines; + const kept = lines.slice(0, maxLines); + kept[maxLines - 1] = `${kept[maxLines - 1]}...`; + return kept; +} + +function xLabels(labels, plotWidth, plotHeight) { + const step = plotWidth / Math.max(1, labels.length); + const maxChars = Math.max(6, Math.floor(step / 6)); + return labels + .map((label, i) => { + const x = MARGIN.left + step * i + step / 2; + const y = MARGIN.top + plotHeight + 16; + const lines = wrapLabel(label, maxChars, 2); + const tspans = lines + .map((line, index) => `<tspan x="${x.toFixed(1)}" dy="${index === 0 ? 0 : 12}">${escapeHtml(line)}</tspan>`) + .join(""); + return ( + `<text x="${x.toFixed(1)}" y="${y}" text-anchor="middle" font-size="11" fill="${LABEL_FILL}">` + + `<title>${escapeHtml(label)}${tspans}` + ); + }) + .join(""); +} + +function barChartSvg(labels, series) { + const plotWidth = CHART_WIDTH - MARGIN.left - MARGIN.right; + const plotHeight = CHART_HEIGHT - MARGIN.top - MARGIN.bottom; + const scale = seriesScale(series); + const maxValue = scale.max; + const groupStep = plotWidth / Math.max(1, labels.length); + const barWidth = Math.max(4, (groupStep * 0.7) / Math.max(1, series.length)); + + let bars = ""; + series.forEach((s, si) => { + s.values.slice(0, labels.length).forEach((value, li) => { + const height = Math.max(0, (value / maxValue) * plotHeight); + const x = MARGIN.left + groupStep * li + groupStep * 0.15 + barWidth * si; + const y = MARGIN.top + plotHeight - height; + bars += + `${escapeHtml(`${s.name} - ${labels[li]}: ${value}`)}`; + }); + }); + + return ( + `` + + axisAndGrid(scale, plotWidth, plotHeight) + + bars + + xLabels(labels, plotWidth, plotHeight) + + "" + ); +} + +function lineChartSvg(labels, series) { + const plotWidth = CHART_WIDTH - MARGIN.left - MARGIN.right; + const plotHeight = CHART_HEIGHT - MARGIN.top - MARGIN.bottom; + const scale = seriesScale(series); + const maxValue = scale.max; + const step = plotWidth / Math.max(1, labels.length); + + let lines = ""; + series.forEach((s, si) => { + const color = PALETTE[si % PALETTE.length]; + const points = s.values + .slice(0, labels.length) + .map((value, li) => { + const x = MARGIN.left + step * li + step / 2; + const y = MARGIN.top + plotHeight - (value / maxValue) * plotHeight; + return `${x.toFixed(1)},${y.toFixed(1)}`; + }) + .join(" "); + lines += ``; + s.values.slice(0, labels.length).forEach((value, li) => { + const x = MARGIN.left + step * li + step / 2; + const y = MARGIN.top + plotHeight - (value / maxValue) * plotHeight; + lines += + `` + + `${escapeHtml(`${s.name} - ${labels[li]}: ${value}`)}`; + }); + }); + + return ( + `` + + axisAndGrid(scale, plotWidth, plotHeight) + + lines + + xLabels(labels, plotWidth, plotHeight) + + "" + ); +} + +function pieChartSvg(slices, donut) { + const size = 300; + const cx = size / 2; + const cy = size / 2; + const radius = size / 2 - 10; + const total = slices.reduce((sum, slice) => sum + Math.max(0, slice.value), 0) || 1; + + let angle = -Math.PI / 2; + let paths = ""; + slices.forEach((slice, i) => { + const share = Math.max(0, slice.value) / total; + const sweep = share * Math.PI * 2; + const x1 = cx + radius * Math.cos(angle); + const y1 = cy + radius * Math.sin(angle); + const end = angle + sweep; + const x2 = cx + radius * Math.cos(end); + const y2 = cy + radius * Math.sin(end); + const largeArc = sweep > Math.PI ? 1 : 0; + const percent = (share * 100).toFixed(1); + if (share >= 0.999) { + paths += `${escapeHtml( + `${slice.label}: ${slice.value} (${percent}%)`, + )}`; + } else if (share > 0) { + paths += + `` + + `${escapeHtml(`${slice.label}: ${slice.value} (${percent}%)`)}`; + } + angle = end; + }); + if (donut) { + paths += ``; + } + return `${paths}`; +} + +function chartLegend(entries) { + const items = entries + .map((entry) => `
  • ${escapeHtml(entry.label)}
  • `) + .join(""); + return `
      ${items}
    `; +} + +function chartDataTable(options) { + let head = ""; + let rows = ""; + if (options.type === "pie" || options.type === "donut") { + head = 'LabelValue'; + rows = (options.values ?? []) + .map((slice) => `${escapeHtml(slice.label)}${escapeHtml(String(slice.value))}`) + .join(""); + } else { + const labels = options.labels ?? []; + head = + 'Series' + + labels.map((label) => `${escapeHtml(label)}`).join("") + + ""; + rows = (options.series ?? []) + .map( + (s) => + `${escapeHtml(s.name)}` + + labels.map((_, i) => `${escapeHtml(String(s.values[i] ?? ""))}`).join("") + + "", + ) + .join(""); + } + return `
    View data
    +
    ${head}${rows}
    +
    `; +} + +// --------------------------------------------------------------------------- +// Card shell (ported from src/cards/shell.ts) +// --------------------------------------------------------------------------- + +// The canvas page renders header toggles for every card; these attributes are +// how a builder opts a card out (mirroring data-mcc-no-code/-no-collapse in +// the MCP shell). +function renderCardShell(options) { + const id = uid("card"); + let body = options.body; + if (options.tutorTerms && options.tutorTerms.length > 0) { + body = wrapTermsInHtml(body, options.tutorTerms, { + includeCode: options.tutorTermsInCode === true, + }); + } + + const config = { + id, + kind: options.kind, + dwellMs: options.dwellMs ?? 1200, + contextActions: (options.contextActions ?? []).map((action) => ({ + label: String(action.label ?? ""), + prompt: String(action.prompt ?? ""), + })), + draggable: options.draggable !== false, + }; + + const subtitle = options.subtitle + ? `

    ${escapeHtml(options.subtitle)}

    ` + : ""; + const toggles = + '' + + '' + + '' + + ''; + + const articleHtml = `
    +
    +
    +

    ${escapeHtml(options.title)}

    + ${subtitle} +
    +
    ${toggles}
    +
    +
    +${body} +
    +
    chat-cards · ${escapeHtml(options.kind)} card
    +
    `; + + return { id, articleHtml, config }; +} + +function finishCard(shellOptions, summary) { + const { id, articleHtml, config } = renderCardShell(shellOptions); + return { + id, + kind: shellOptions.kind, + title: shellOptions.title, + articleHtml, + config, + summary, + }; +} + +function requireTitle(options) { + const title = String(options?.title ?? "").trim(); + if (title.length === 0) throw new Error("A non-empty title is required."); + return title; +} + +// Tab panels and reveal sections accept markdown (with "content" as an +// alias, because that is the key agents reach for unprompted), code, HTML +// (sanitized to an allowlisted subset), or plain text, checked in that +// order. A part with none of them is an error, not an empty panel: +// rendering nothing silently is exactly the failure an agent cannot see +// and correct. +function richContent(part, what) { + const markdown = [part.markdown, part.content].find( + (value) => value !== undefined && String(value).trim().length > 0, + ); + if (markdown !== undefined) { + return `
    ${renderMarkdownFragment(markdown)}
    `; + } + if (part.code !== undefined && String(part.code).trim().length > 0) { + return renderCodeBlock(String(part.code), part.language); + } + if (part.html !== undefined && String(part.html).trim().length > 0) { + return sanitizeHtml(part.html); + } + if (part.text !== undefined && String(part.text).trim().length > 0) { + return textToParagraphs(part.text); + } + throw new Error( + `${what} has no content. Provide non-empty "markdown" (alias "content"), "code", "html", or "text".`, + ); +} + +// --------------------------------------------------------------------------- +// Card builders (ported from src/cards/*.ts) +// --------------------------------------------------------------------------- + +export function buildTabCard(options) { + const title = requireTitle(options); + const tabs = Array.isArray(options.tabs) ? options.tabs : []; + if (tabs.length === 0) throw new Error("Provide at least one tab."); + + const groupId = uid("tabs"); + const buttons = tabs + .map((tab, index) => { + const selected = index === 0 ? "true" : "false"; + return ( + `` + ); + }) + .join("\n"); + const panels = tabs + .map((tab, index) => { + const hidden = index === 0 ? "" : " hidden"; + return ( + `
    ${richContent(tab, `Tab "${tab.label ?? index + 1}"`)}
    ` + ); + }) + .join("\n"); + + const body = `
    +
    +${buttons} +
    +${panels} +
    `; + + const labels = tabs.map((tab, index) => tab.label ?? `Tab ${index + 1}`).join(", "); + return finishCard( + { + title, + subtitle: options.subtitle, + kind: "tabs", + body, + tutorTerms: options.tutorTerms, + tutorTermsInCode: options.tutorTermsInCode, + contextActions: options.contextActions, + }, + `Created tab card "${title}" with ${tabs.length} tab(s): ${labels}.`, + ); +} + +function renderTableCell(value, columnIndex, options) { + const autoLink = options.autoLinkUrls !== false; + const isLinkColumn = options.linkColumns?.includes(columnIndex) ?? false; + if ((isLinkColumn || autoLink) && looksLikeUrl(value)) { + const href = escapeHtml(value.trim()); + return `${href}`; + } + return escapeHtml(value); +} + +export function tableDataToHtml(data, options = {}) { + const caption = options.caption ? `${escapeHtml(options.caption)}` : ""; + const thead = + data.headers.length > 0 + ? `${data.headers.map((h) => `${escapeHtml(h)}`).join("")}` + : ""; + const tbody = data.rows + .map((row) => `${row.map((cell, index) => `${renderTableCell(cell, index, options)}`).join("")}`) + .join("\n"); + return `
    ${caption}${thead} +${tbody} +
    `; +} + +export function buildTableCard(options) { + const title = requireTitle(options); + if ((!options.rows || options.rows.length === 0) && !options.text) { + throw new Error("Provide either rows or text."); + } + const data = + options.rows && options.rows.length > 0 + ? normalizeRows(options.rows, options.headers ?? []) + : textToTable(options.text ?? "", { + columns: options.columns, + headers: options.headers, + cellDelimiter: options.cellDelimiter, + }); + + const body = `
    +${tableDataToHtml(data, options)} +
    `; + + return finishCard( + { + title, + subtitle: options.subtitle, + kind: "table", + body, + tutorTerms: options.tutorTerms, + contextActions: options.contextActions, + }, + `Created table card "${title}" with ${data.rows.length} row(s)` + + ` and ${Math.max(data.headers.length, data.rows[0]?.length ?? 0)} column(s).`, + ); +} + +export function buildChartCard(options) { + const title = requireTitle(options); + const type = options.type; + if (!["bar", "line", "pie", "donut"].includes(type)) { + throw new Error('Chart type must be one of "bar", "line", "pie", "donut".'); + } + if ((type === "pie" || type === "donut") && (!options.values || options.values.length === 0)) { + throw new Error("Pie and donut charts require values."); + } + if ((type === "bar" || type === "line") && (!options.series?.length || !options.labels?.length)) { + throw new Error("Bar and line charts require labels and series."); + } + + let svg; + let legendHtml; + if (type === "pie" || type === "donut") { + const slices = options.values ?? []; + svg = pieChartSvg(slices, type === "donut"); + const total = slices.reduce((sum, slice) => sum + Math.max(0, slice.value), 0) || 1; + legendHtml = chartLegend( + slices.map((slice, i) => ({ + label: `${slice.label} (${((Math.max(0, slice.value) / total) * 100).toFixed(1)}%)`, + color: PALETTE[i % PALETTE.length], + })), + ); + } else { + const labels = options.labels ?? []; + const series = options.series ?? []; + svg = type === "line" ? lineChartSvg(labels, series) : barChartSvg(labels, series); + legendHtml = + series.length > 1 + ? chartLegend(series.map((s, i) => ({ label: s.name, color: PALETTE[i % PALETTE.length] }))) + : ""; + } + + const description = options.description ? `

    ${escapeHtml(options.description)}

    ` : ""; + const yLabel = options.yLabel ? `

    ${escapeHtml(options.yLabel)}

    ` : ""; + + const body = `
    +${description}${yLabel} +${svg} +${legendHtml} +${chartDataTable(options)} +
    `; + + const points = + type === "pie" || type === "donut" + ? `${options.values?.length ?? 0} slice(s)` + : `${options.series?.length ?? 0} series over ${options.labels?.length ?? 0} label(s)`; + return finishCard( + { + title, + subtitle: options.subtitle, + kind: `chart-${type}`, + body, + tutorTerms: options.tutorTerms, + contextActions: options.contextActions, + }, + `Created ${type} chart card "${title}" (${points}) as an SVG with a collapsible data table.`, + ); +} + +function normalizeFieldOptions(options = []) { + return options.map((option) => + typeof option === "string" ? { label: option, value: option } : { ...option, value: option.value ?? option.label }, + ); +} + +function renderFormField(field, formId) { + const type = field.type ?? "text"; + const fieldId = `${formId}-${String(field.name).replace(/[^a-zA-Z0-9_-]/g, "_")}`; + const name = escapeHtml(field.name); + const required = field.required ? " required" : ""; + const requiredMark = field.required ? '*' : ""; + const label = escapeHtml(field.label ?? field.name); + const placeholder = field.placeholder ? ` placeholder="${escapeHtml(field.placeholder)}"` : ""; + const value = field.value !== undefined ? escapeHtml(field.value) : ""; + const help = field.help ? `${escapeHtml(field.help)}` : ""; + + if (type === "hidden") { + return ``; + } + if (type === "textarea") { + return `
    +${help}
    `; + } + if (type === "select") { + const optionTags = normalizeFieldOptions(field.options) + .map((option) => { + const selected = option.value === field.value ? " selected" : ""; + return ``; + }) + .join(""); + return `
    +${help}
    `; + } + if (type === "checkbox" || type === "radio") { + const choices = normalizeFieldOptions(field.options ?? [{ label: field.label ?? field.name, value: "yes" }]) + .map((option, index) => { + const choiceId = `${fieldId}-${index}`; + const checked = option.value === field.value ? " checked" : ""; + return ``; + }) + .join("\n"); + return `
    + +${choices}${help}
    `; + } + return `
    +${help}
    `; +} + +export function buildFormCard(options) { + const title = requireTitle(options); + const fields = Array.isArray(options.fields) ? options.fields : []; + if (fields.length === 0) throw new Error("Provide at least one field."); + + const formId = uid("form"); + const fieldHtml = fields.map((field) => renderFormField(field, formId)).join("\n"); + const description = options.description ? `

    ${escapeHtml(options.description)}

    ` : ""; + const templateAttr = options.promptTemplate + ? ` data-prompt-template="${escapeHtml(options.promptTemplate)}"` + : ""; + + const body = `
    +${description} +
    +${fieldHtml} +
    + +
    +

    +
    +

    If the agent did not pick this up automatically, copy the text below and send it as your next message.

    + + +
    +
    +
    `; + + return finishCard( + { + title, + subtitle: options.subtitle, + kind: "form", + body, + contextActions: options.contextActions, + // Reordering a form away from its explanatory neighbors is harmless, + // but the MCP version pins forms and the port keeps that behavior. + draggable: false, + }, + `Created form card "${title}" with ${fields.length} field(s). ` + + "Submitting it sends the values back to the conversation as the next prompt.", + ); +} + +export function buildRevealCard(options) { + const title = requireTitle(options); + const sections = Array.isArray(options.sections) ? options.sections : []; + if (sections.length === 0) throw new Error("Provide at least one section."); + + const sectionHtml = sections + .map((section) => { + const open = section.open ? " open" : ""; + return `
    +${escapeHtml(section.heading ?? "Section")} +
    ${richContent(section, `Section "${section.heading ?? "Section"}"`)}
    +
    `; + }) + .join("\n"); + + const body = `
    + + +
    +${sectionHtml}`; + + return finishCard( + { + title, + subtitle: options.subtitle, + kind: "show-hide", + body, + tutorTerms: options.tutorTerms, + contextActions: options.contextActions, + }, + `Created show/hide card "${title}" with ${sections.length} collapsible section(s).`, + ); +} + +function countListItems(items) { + return items.reduce((sum, item) => sum + 1 + countListItems(item.children ?? []), 0); +} + +function renderListItems(items) { + const lis = items + .map((item) => { + const children = item.children?.length ? renderListItems(item.children) : ""; + return `
  • ${escapeHtml(item.text)}${children}
  • `; + }) + .join("\n"); + return `
      \n${lis}\n
    `; +} + +export function buildListCard(options) { + const title = requireTitle(options); + const items = Array.isArray(options.items) ? options.items : []; + if (items.length === 0) throw new Error("Provide at least one item."); + + const intro = options.intro ? textToParagraphs(options.intro) : ""; + const body = `
    +${intro} +${renderListItems(items)} +
    `; + + return finishCard( + { + title, + subtitle: options.subtitle, + kind: "list", + body, + tutorTerms: options.tutorTerms, + contextActions: options.contextActions, + }, + `Created sequential list card "${title}" with ${countListItems(items)} item(s).`, + ); +} + +export function buildMarkdownCard(options) { + const markdown = String(options.markdown ?? ""); + if (markdown.trim().length === 0) throw new Error("Provide markdown content."); + const doc = parseMarkdownDocument(markdown); + const title = options.title ?? doc.title ?? "Document"; + + const bodyHtml = renderMarkdownSections(doc.sections, { + folded: options.splitSections, + openFirst: options.openFirst, + }); + const body = `
    +${bodyHtml} +
    `; + + const headings = doc.sections.filter((section) => section.heading !== null).map((section) => section.heading); + const described = + headings.length > 0 + ? `${headings.length} collapsible section(s): ${headings.join(", ")}` + : "a single flowing section"; + return finishCard( + { + title, + subtitle: options.subtitle, + kind: "document", + body, + tutorTerms: options.tutorTerms, + contextActions: options.contextActions, + }, + `Created document card "${title}" from markdown with ${described}.`, + ); +} + +export function buildVideoCard(options) { + const title = requireTitle(options); + const src = String(options.src ?? "").trim(); + if (!isPlayableMediaUrl(src)) { + throw new Error( + "src must be a direct http(s) video file URL, a data:video/* URI, or a blob: URL " + + "(not a streaming platform page).", + ); + } + const poster = + options.poster && isDisplayableImageUrl(options.poster) + ? ` poster="${escapeHtml(String(options.poster).trim())}"` + : ""; + const description = options.description ? `

    ${escapeHtml(options.description)}

    ` : ""; + const link = isHttpUrl(src) + ? `

    Open the clip directly

    ` + : ""; + + const body = `
    +${description} +
    + +
    +${link} +
    `; + + return finishCard( + { + title, + subtitle: options.subtitle, + kind: "video", + body, + contextActions: options.contextActions, + }, + `Created video card "${title}" for ${src.slice(0, 120)}.`, + ); +} + +// Dispatch table used by extension.mjs for create and update actions. +export const CARD_BUILDERS = { + tabs: buildTabCard, + table: buildTableCard, + chart: buildChartCard, + form: buildFormCard, + "show-hide": buildRevealCard, + list: buildListCard, + document: buildMarkdownCard, + video: buildVideoCard, +}; + +export function buildCard(kind, options) { + const builder = CARD_BUILDERS[kind]; + if (!builder) { + throw new Error(`Unknown card kind "${kind}". Valid kinds: ${Object.keys(CARD_BUILDERS).join(", ")}.`); + } + return builder(options); +} diff --git a/extensions/chat-cards/copilot-extension.json b/extensions/chat-cards/copilot-extension.json new file mode 100644 index 0000000000..cd4a2415bb --- /dev/null +++ b/extensions/chat-cards/copilot-extension.json @@ -0,0 +1,21 @@ +{ + "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json", + "name": "chat-cards", + "description": "Interactive card deck in a GHCP canvas: tab cards, tables, SVG charts, show/hide sections, numbered outlines, rendered markdown documents, video clips, and forms whose submissions come back to the conversation as prompts.", + "version": "0.1.0", + "keywords": [ + "interactive-cards", + "charts", + "forms", + "education", + "visual-explanations" + ], + "author": { "name": "John Haugabook" }, + "repository": "https://github.com/github/awesome-copilot", + "license": "MIT", + "extensions": { + "com.github.copilot": { + "logo": "assets/preview.png" + } + } +} diff --git a/extensions/chat-cards/extension.mjs b/extensions/chat-cards/extension.mjs new file mode 100644 index 0000000000..0ade39be15 --- /dev/null +++ b/extensions/chat-cards/extension.mjs @@ -0,0 +1,739 @@ +// Extension: chat-cards +// GitHub Copilot canvas port of the mcp-chat-cards MCP server. The agent +// builds interactive cards (tabs, tables, charts, forms, show/hide sections, +// sequential lists, markdown documents, video) through canvas actions; the +// canvas renders them as a live deck. Form submissions and per-card context +// actions travel back to the conversation as prompts via session.send. +// +// All rendering lives in cards-core.mjs (dependency-free, testable without +// the SDK); this file wires the canvas/session lifecycle, the local HTTP + +// SSE server behind the canvas page, and the action surface. +import http from "node:http"; +import crypto from "node:crypto"; +import { readFileSync } from "node:fs"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import { joinSession, createCanvas } from "@github/copilot-sdk/extension"; +import { buildCard, CARD_BUILDERS } from "./cards-core.mjs"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const CANVAS_PAGE = readFileSync(path.join(__dirname, "assets", "canvas.html"), "utf8"); + +// Deck limits. The MCP server keeps the last 24 rendered cards; a live deck +// can hold more, but it is still a conversation surface, not a database. +const MAX_CARDS = 60; +const MAX_SUBMISSIONS = 50; +const MAX_BODY_BYTES = 1024 * 1024; +const MAX_PROMPT_CHARS = 16000; + +let session = null; + +// instanceId -> { token, cards: [], submissions: [] } +const instances = new Map(); +// instanceId -> Set of SSE responses +const sseClients = new Map(); + +function getInstance(instanceId) { + let instance = instances.get(instanceId); + if (!instance) { + instance = { + token: crypto.randomBytes(16).toString("hex"), + cards: [], + submissions: [], + }; + instances.set(instanceId, instance); + } + return instance; +} + +function validateToken(instanceId, token) { + const instance = instances.get(instanceId); + return Boolean(instance && token && instance.token === token); +} + +function broadcast(instanceId, event, data) { + const clients = sseClients.get(instanceId); + if (!clients) return; + const message = `event: ${event}\ndata: ${JSON.stringify(data)}\n\n`; + for (const res of clients) { + try { + res.write(message); + } catch { + clients.delete(res); + } + } +} + +// Hand a prompt to the agent. Returns whether the handoff was accepted, so +// the form card can fall back to its copyable prompt when it was not. +async function sendPrompt(prompt) { + if (!session) return false; + try { + await Promise.resolve(session.send({ prompt })); + return true; + } catch { + return false; + } +} + +function findCardIndex(instance, cardId) { + return instance.cards.findIndex((card) => card.id === cardId); +} + +function cardListing(instance) { + return instance.cards.map((card) => ({ cardId: card.id, kind: card.kind, title: card.title })); +} + +// Create a card of the given kind, append it to the deck (trimming the +// oldest cards past the limit), and notify the canvas. +function createCardAction(instanceId, kind, input) { + const instance = getInstance(instanceId); + const card = buildCard(kind, input ?? {}); + instance.cards.push(card); + let note = ""; + while (instance.cards.length > MAX_CARDS) { + const dropped = instance.cards.shift(); + broadcast(instanceId, "remove", { cardId: dropped.id }); + note = ` The deck was at its ${MAX_CARDS}-card limit, so the oldest card ("${dropped.title}") was removed.`; + } + broadcast(instanceId, "upsert", { card }); + return { + ok: true, + cardId: card.id, + kind: card.kind, + title: card.title, + summary: + card.summary + + note + + " The card is visible in the canvas; also state its key takeaway in the conversation for surfaces without the canvas.", + }; +} + +function actionError(error) { + return { error: error instanceof Error ? error.message : String(error) }; +} + +// --------------------------------------------------------------------------- +// Shared schema fragments (mirroring the MCP server's zod schemas) +// --------------------------------------------------------------------------- + +const TUTOR_TERMS_SCHEMA = { + type: "array", + description: + "Educational terms to mark in the card. Hovering a marked term for a moment shows its tip as a tooltip.", + items: { + type: "object", + properties: { + term: { type: "string", description: "Exact term as it appears in the card text" }, + tip: { type: "string", description: "Short plain-text definition shown on hover" }, + }, + required: ["term"], + }, +}; + +const CONTEXT_ACTIONS_SCHEMA = { + type: "array", + description: + "Right-click actions for the card. Choosing one sends its prompt to the conversation; {{selection}} in a prompt is replaced with the user's selected text.", + items: { + type: "object", + properties: { + label: { type: "string", description: "Menu item label" }, + prompt: { type: "string", description: "Prompt sent to the conversation when chosen" }, + }, + required: ["label", "prompt"], + }, +}; + +const COMMON_CARD_PROPERTIES = { + title: { type: "string", description: "Card title (plain text; the extension escapes it)" }, + subtitle: { type: "string", description: "Optional subtitle under the title" }, + tutorTerms: TUTOR_TERMS_SCHEMA, + contextActions: CONTEXT_ACTIONS_SCHEMA, +}; + +const TAB_CARD_PROPERTIES = { + ...COMMON_CARD_PROPERTIES, + tabs: { + type: "array", + minItems: 1, + description: + "One entry per tab. Give each tab exactly one of markdown, code, html, or text (non-empty).", + items: { + type: "object", + properties: { + label: { type: "string", description: "Tab label" }, + markdown: { type: "string", description: "Markdown content for the tab" }, + content: { type: "string", description: "Alias of markdown" }, + text: { type: "string", description: "Plain text content for the tab" }, + code: { type: "string", description: "Code sample shown with a copy button" }, + language: { type: "string", description: "Language for the code sample" }, + html: { type: "string", description: "HTML content (sanitized to an allowlisted subset)" }, + }, + required: ["label"], + }, + }, + tutorTermsInCode: { + type: "boolean", + description: "Also mark tutor terms inside code samples (off by default)", + }, +}; + +const TABLE_CARD_PROPERTIES = { + ...COMMON_CARD_PROPERTIES, + caption: { type: "string" }, + headers: { + type: "array", + items: { type: "string" }, + description: "Column titles; padded if fewer than columns", + }, + rows: { + type: "array", + items: { type: "array", items: { type: "string" } }, + description: "Explicit cell data, row-major", + }, + text: { type: "string", description: "Raw text to convert when rows are not given (delimiter auto-detected)" }, + columns: { type: "integer", minimum: 1, maximum: 12 }, + cellDelimiter: { type: "string" }, + linkColumns: { + type: "array", + items: { type: "integer", minimum: 0 }, + description: "Zero-based column indexes whose cell values render as links", + }, + autoLinkUrls: { type: "boolean", description: "Render URL-shaped cells as links (default true)" }, +}; + +const CHART_CARD_PROPERTIES = { + ...COMMON_CARD_PROPERTIES, + type: { type: "string", enum: ["bar", "line", "pie", "donut"] }, + labels: { type: "array", items: { type: "string" }, description: "X-axis labels (bar/line)" }, + series: { + type: "array", + description: "Data series (bar/line)", + items: { + type: "object", + properties: { + name: { type: "string" }, + values: { type: "array", items: { type: "number" } }, + }, + required: ["name", "values"], + }, + }, + values: { + type: "array", + description: "Slices (pie/donut)", + items: { + type: "object", + properties: { + label: { type: "string" }, + value: { type: "number", minimum: 0 }, + }, + required: ["label", "value"], + }, + }, + yLabel: { type: "string" }, + description: { type: "string" }, +}; + +const FORM_CARD_PROPERTIES = { + ...COMMON_CARD_PROPERTIES, + description: { type: "string", description: "Help text shown above the fields" }, + submitLabel: { type: "string" }, + promptTemplate: { + type: "string", + description: "Prompt sent on submit; {{fieldName}} tokens are replaced with values", + }, + fields: { + type: "array", + minItems: 1, + items: { + type: "object", + properties: { + name: { type: "string" }, + label: { type: "string" }, + type: { + type: "string", + enum: ["text", "textarea", "select", "checkbox", "radio", "number", "email", "url", "date", "hidden"], + }, + options: { + type: "array", + description: "Choices for select/checkbox/radio; strings or { label, value } objects", + items: {}, + }, + required: { type: "boolean" }, + placeholder: { type: "string" }, + value: { type: "string" }, + help: { type: "string" }, + }, + required: ["name"], + }, + }, +}; + +const REVEAL_CARD_PROPERTIES = { + ...COMMON_CARD_PROPERTIES, + sections: { + type: "array", + minItems: 1, + description: + "Collapsible sections. Give each section markdown, html, or text content (non-empty).", + items: { + type: "object", + properties: { + heading: { type: "string" }, + markdown: { type: "string" }, + content: { type: "string", description: "Alias of markdown" }, + text: { type: "string" }, + html: { type: "string", description: "HTML content (sanitized to an allowlisted subset)" }, + open: { type: "boolean", description: "Start the section expanded" }, + }, + required: ["heading"], + }, + }, +}; + +const LIST_CARD_PROPERTIES = { + ...COMMON_CARD_PROPERTIES, + intro: { type: "string", description: "Optional plain-text intro shown above the outline" }, + items: { + type: "array", + minItems: 1, + description: "Outline items; nest with children arrays of the same { text, children } shape", + items: { + type: "object", + properties: { + text: { type: "string" }, + children: { type: "array", items: { type: "object" }, description: "Nested items of the same shape" }, + }, + required: ["text"], + }, + }, +}; + +const MARKDOWN_CARD_PROPERTIES = { + ...COMMON_CARD_PROPERTIES, + title: { type: "string", description: "Card title; defaults to the document's first H1" }, + markdown: { type: "string", description: "The markdown document to render" }, + splitSections: { + type: "boolean", + description: "Fold H2 sections into collapsible reveals (default true)", + }, + openFirst: { type: "boolean", description: "With folding, open the first section initially (default true)" }, +}; + +const VIDEO_CARD_PROPERTIES = { + ...COMMON_CARD_PROPERTIES, + src: { + type: "string", + description: + "Direct video file URL (mp4/webm), data:video/* URI, or blob: URL. Not a streaming platform page URL.", + }, + poster: { type: "string", description: "Optional poster image URL" }, + description: { type: "string", description: "Help text shown above the player" }, +}; + +const KIND_SCHEMAS = { + tabs: TAB_CARD_PROPERTIES, + table: TABLE_CARD_PROPERTIES, + chart: CHART_CARD_PROPERTIES, + form: FORM_CARD_PROPERTIES, + "show-hide": REVEAL_CARD_PROPERTIES, + list: LIST_CARD_PROPERTIES, + document: MARKDOWN_CARD_PROPERTIES, + video: VIDEO_CARD_PROPERTIES, +}; + +function cardActionSchema(properties, required) { + return { type: "object", properties, required }; +} + +function makeCreateAction(name, kind, description, properties, required) { + return { + name, + description, + inputSchema: cardActionSchema(properties, required), + handler: (ctx) => { + try { + return createCardAction(ctx.instanceId, kind, ctx.input); + } catch (error) { + return actionError(error); + } + }, + }; +} + +// --------------------------------------------------------------------------- +// Canvas +// --------------------------------------------------------------------------- + +const canvas = createCanvas({ + id: "chat-cards", + displayName: "Chat Cards", + description: + "Interactive card deck for explaining things visually: tab cards, tables, SVG charts, forms whose " + + "submissions come back to the conversation as prompts, show/hide sections, numbered outlines, " + + "rendered markdown documents, and short video clips. Ported from the mcp-chat-cards MCP server. " + + "Use it for research, education, professional and hobbyist skills, history, and news topics " + + "whenever a card communicates better than text. Cards render only in the canvas, so also state " + + "each card's key conclusion in the conversation.", + inputSchema: { + type: "object", + properties: { + title: { type: "string", description: "Optional canvas title" }, + }, + }, + actions: [ + makeCreateAction( + "create_tab_card", + "tabs", + "Render an interactive card with tabs, each showing a different context of the same subject " + + "(for example one tab per programming language, OS, or skill level). Tab content can be " + + "markdown, plain text, HTML, or code with a copy button.", + TAB_CARD_PROPERTIES, + ["title", "tabs"], + ), + makeCreateAction( + "create_table_card", + "table", + "Render an HTML table card from explicit rows, or convert loosely delimited text into a " + + "balanced table (delimiter auto-detected; newlines can mark cells). URL cells become links.", + TABLE_CARD_PROPERTIES, + ["title"], + ), + makeCreateAction( + "create_chart_card", + "chart", + "Render a dynamically generated SVG chart card (bar, line, pie, or donut) with a legend and " + + "a collapsible data table. Use for useful graphics summarizing referenced data.", + CHART_CARD_PROPERTIES, + ["title", "type"], + ), + makeCreateAction( + "create_form_card", + "form", + "Render a form card the user fills in to give the conversation context and direction. " + + "Submitting sends the values back to the conversation as the next prompt (optionally shaped " + + "by promptTemplate with {{fieldName}} tokens). Check get_form_responses if no prompt arrives.", + FORM_CARD_PROPERTIES, + ["title", "fields"], + ), + makeCreateAction( + "create_reveal_card", + "show-hide", + "Render a card of collapsible show/hide sections with show-all/hide-all controls. Good for " + + "FAQs, step-by-step detail, and progressive disclosure.", + REVEAL_CARD_PROPERTIES, + ["title", "sections"], + ), + makeCreateAction( + "create_list_card", + "list", + "Render a nested sequential outline card numbered 1., 1.1., 1.1.1. for plans, procedures, " + + "and structured overviews.", + LIST_CARD_PROPERTIES, + ["title", "items"], + ), + makeCreateAction( + "create_markdown_card", + "document", + "Render a markdown document (a guide or walkthrough you wrote) as one interactive card: the " + + "first H1 becomes the title, H2 sections fold into show/hide reveals, tables get card " + + "styling, and fenced code gets copy buttons. Pass the markdown content inline.", + MARKDOWN_CARD_PROPERTIES, + ["markdown"], + ), + makeCreateAction( + "create_video_card", + "video", + "Render a card with an HTML video player for a short clip. src must point straight at a " + + "video file (mp4/webm), not a streaming platform page: a direct http(s) URL, a small " + + "data:video/* URI, or a blob: URL.", + VIDEO_CARD_PROPERTIES, + ["title", "src"], + ), + { + name: "update_card", + description: + "Re-render an existing card in place, keeping its position in the deck. Pass the cardId, " + + "the card's kind, and the full replacement spec in the same shape the matching create " + + "action takes.", + inputSchema: { + type: "object", + properties: { + cardId: { type: "string", description: "The id returned when the card was created" }, + kind: { type: "string", enum: Object.keys(CARD_BUILDERS) }, + }, + required: ["cardId", "kind"], + additionalProperties: true, + }, + handler: (ctx) => { + try { + const instance = getInstance(ctx.instanceId); + const { cardId, kind, ...spec } = ctx.input ?? {}; + const index = findCardIndex(instance, cardId); + if (index === -1) return { error: `No card with id "${cardId}". Use list_cards to see the deck.` }; + const card = buildCard(kind, spec); + // Keep the original id so the canvas replaces the card in place. + card.articleHtml = card.articleHtml.replace(`data-card-id="${card.id}"`, `data-card-id="${cardId}"`); + card.config.id = cardId; + card.id = cardId; + instance.cards[index] = card; + broadcast(ctx.instanceId, "upsert", { card }); + return { ok: true, cardId, kind: card.kind, title: card.title, summary: `Updated card in place. ${card.summary}` }; + } catch (error) { + return actionError(error); + } + }, + }, + { + name: "remove_card", + description: "Remove one card from the deck by id.", + inputSchema: { + type: "object", + properties: { cardId: { type: "string" } }, + required: ["cardId"], + }, + handler: (ctx) => { + const instance = getInstance(ctx.instanceId); + const index = findCardIndex(instance, ctx.input?.cardId); + if (index === -1) return { error: `No card with id "${ctx.input?.cardId}".` }; + const [removed] = instance.cards.splice(index, 1); + broadcast(ctx.instanceId, "remove", { cardId: removed.id }); + return { ok: true, removed: { cardId: removed.id, kind: removed.kind, title: removed.title } }; + }, + }, + { + name: "clear_cards", + description: "Remove every card from the deck.", + inputSchema: { type: "object", properties: {}, additionalProperties: false }, + handler: (ctx) => { + const instance = getInstance(ctx.instanceId); + const count = instance.cards.length; + instance.cards = []; + broadcast(ctx.instanceId, "clear", {}); + return { ok: true, removedCount: count }; + }, + }, + { + name: "list_cards", + description: + "List the cards currently in the deck (id, kind, title) in display order. The user may " + + "have reordered or removed cards since they were created.", + inputSchema: { type: "object", properties: {}, additionalProperties: false }, + handler: (ctx) => { + const instance = getInstance(ctx.instanceId); + return { ok: true, count: instance.cards.length, cards: cardListing(instance) }; + }, + }, + { + name: "get_form_responses", + description: + "Read form submissions received from the canvas, newest first. Submissions normally arrive " + + "as conversation prompts too; use this when one did not come through or to review earlier " + + "answers.", + inputSchema: { + type: "object", + properties: { + cardId: { type: "string", description: "Only submissions from this form card" }, + }, + }, + handler: (ctx) => { + const instance = getInstance(ctx.instanceId); + const wanted = ctx.input?.cardId; + const responses = instance.submissions + .filter((submission) => !wanted || submission.cardId === wanted) + .slice() + .reverse(); + return { ok: true, count: responses.length, responses }; + }, + }, + ], + open: (ctx) => { + const instance = getInstance(ctx.instanceId); + return { + url: `http://127.0.0.1:${port}/?instance=${encodeURIComponent(ctx.instanceId)}&token=${instance.token}`, + title: ctx.input?.title || "Chat Cards", + status: instance.cards.length > 0 ? `${instance.cards.length} card(s)` : "Ready", + }; + }, + onClose: (ctx) => { + const clients = sseClients.get(ctx.instanceId); + if (clients) { + for (const res of clients) { + try { + res.end(); + } catch {} + } + sseClients.delete(ctx.instanceId); + } + instances.delete(ctx.instanceId); + }, +}); + +// --------------------------------------------------------------------------- +// Local HTTP server behind the canvas page +// --------------------------------------------------------------------------- + +function json(res, code, data) { + res.writeHead(code, { "Content-Type": "application/json; charset=utf-8" }); + res.end(JSON.stringify(data)); +} + +function readJsonBody(req) { + return new Promise((resolve, reject) => { + const chunks = []; + let received = 0; + req.on("data", (chunk) => { + received += chunk.length; + if (received > MAX_BODY_BYTES) { + req.destroy(); + reject(new Error("Request body too large.")); + return; + } + chunks.push(chunk); + }); + req.on("end", () => { + const body = Buffer.concat(chunks).toString("utf8"); + if (!body.trim()) { + resolve({}); + return; + } + try { + resolve(JSON.parse(body)); + } catch { + reject(new Error("Request body must be valid JSON.")); + } + }); + req.on("error", reject); + }); +} + +const server = http.createServer(async (req, res) => { + let url; + try { + url = new URL(req.url, `http://${req.headers.host ?? "127.0.0.1"}`); + } catch { + res.writeHead(400); + res.end("Bad request"); + return; + } + const instanceId = url.searchParams.get("instance"); + const token = url.searchParams.get("token"); + if (!instanceId || !validateToken(instanceId, token)) { + res.writeHead(403); + res.end("Forbidden"); + return; + } + const instance = getInstance(instanceId); + + try { + if (req.method === "GET" && url.pathname === "/") { + res.writeHead(200, { "Content-Type": "text/html; charset=utf-8" }); + res.end(CANVAS_PAGE); + return; + } + + if (req.method === "GET" && url.pathname === "/events") { + res.writeHead(200, { + "Content-Type": "text/event-stream", + "Cache-Control": "no-cache", + Connection: "keep-alive", + }); + if (!sseClients.has(instanceId)) sseClients.set(instanceId, new Set()); + sseClients.get(instanceId).add(res); + req.on("close", () => { + const clients = sseClients.get(instanceId); + if (clients) clients.delete(res); + }); + res.write(`event: init\ndata: ${JSON.stringify({ cards: instance.cards })}\n\n`); + return; + } + + if (req.method === "GET" && url.pathname === "/api/state") { + json(res, 200, { cards: instance.cards }); + return; + } + + if (req.method === "POST" && url.pathname === "/api/submit") { + const body = await readJsonBody(req); + const prompt = String(body.prompt ?? "").slice(0, MAX_PROMPT_CHARS); + if (!prompt.trim()) { + json(res, 400, { error: "A non-empty prompt is required." }); + return; + } + const cardId = typeof body.cardId === "string" ? body.cardId : null; + const cardIndex = cardId ? findCardIndex(instance, cardId) : -1; + const values = body.values && typeof body.values === "object" && !Array.isArray(body.values) ? body.values : {}; + const delivered = await sendPrompt(prompt); + instance.submissions.push({ + id: crypto.randomBytes(6).toString("hex"), + cardId, + cardTitle: cardIndex === -1 ? null : instance.cards[cardIndex].title, + values, + prompt, + delivered, + receivedAt: new Date().toISOString(), + }); + while (instance.submissions.length > MAX_SUBMISSIONS) instance.submissions.shift(); + json(res, 200, { ok: true, delivered }); + return; + } + + if (req.method === "POST" && url.pathname === "/api/prompt") { + const body = await readJsonBody(req); + const prompt = String(body.prompt ?? "").slice(0, MAX_PROMPT_CHARS); + if (!prompt.trim()) { + json(res, 400, { error: "A non-empty prompt is required." }); + return; + } + const delivered = await sendPrompt(prompt); + json(res, 200, { ok: true, delivered }); + return; + } + + if (req.method === "POST" && url.pathname === "/api/remove") { + const body = await readJsonBody(req); + const index = findCardIndex(instance, String(body.cardId ?? "")); + if (index !== -1) { + const [removed] = instance.cards.splice(index, 1); + broadcast(instanceId, "remove", { cardId: removed.id }); + } + json(res, 200, { ok: true }); + return; + } + + if (req.method === "POST" && url.pathname === "/api/reorder") { + const body = await readJsonBody(req); + const order = Array.isArray(body.order) ? body.order.map(String) : []; + const byId = new Map(instance.cards.map((card) => [card.id, card])); + const reordered = []; + for (const cardId of order) { + const card = byId.get(cardId); + if (card) { + reordered.push(card); + byId.delete(cardId); + } + } + // Cards missing from the requested order (for example one created while + // the drag was in flight) keep their relative position at the end. + for (const card of instance.cards) { + if (byId.has(card.id)) reordered.push(card); + } + instance.cards = reordered; + broadcast(instanceId, "reorder", { order: instance.cards.map((card) => card.id) }); + json(res, 200, { ok: true }); + return; + } + + res.writeHead(404); + res.end("Not found"); + } catch (error) { + json(res, 400, { error: error instanceof Error ? error.message : "Bad request" }); + } +}); + +const port = await new Promise((resolve) => { + server.listen(0, "127.0.0.1", () => resolve(server.address().port)); +}); + +session = await joinSession({ canvases: [canvas] }); diff --git a/extensions/chat-cards/package.json b/extensions/chat-cards/package.json new file mode 100644 index 0000000000..c877d08bab --- /dev/null +++ b/extensions/chat-cards/package.json @@ -0,0 +1,19 @@ +{ + "name": "chat-cards", + "version": "0.1.0", + "type": "module", + "main": "extension.mjs", + "description": "Interactive card deck in a GHCP canvas: tab cards, tables, SVG charts, show/hide sections, numbered outlines, rendered markdown documents, video clips, and forms whose submissions come back to the conversation as prompts. A canvas port of the mcp-chat-cards MCP server.", + "dependencies": { + "@github/copilot-sdk": "latest" + }, + "keywords": [ + "interactive-cards", + "charts", + "forms", + "education", + "research", + "visual-explanations", + "canvas" + ] +} diff --git a/plugins/chat-cards/README.md b/plugins/chat-cards/README.md new file mode 100644 index 0000000000..c3134848b2 --- /dev/null +++ b/plugins/chat-cards/README.md @@ -0,0 +1,22 @@ +# Chat Cards Plugin + +Interactive card deck for GitHub Copilot canvas. Instead of walls of text, the +agent explains things visually with a live deck of interactive cards: tab boxes, +tables, SVG charts, forms, collapsible sections, numbered outlines, rendered +markdown documents, and short video clips. Forms are two-way: submitting one +sends the values back to the conversation as the agent's next prompt, so a card +can gather context and steer the session as easily as it presents information. + +## Installation + +``bash +copilot plugin install chat-cards@awesome-copilot +`` + +## Source + +This plugin is part of [Awesome Copilot](https://github.com/github/awesome-copilot). + +## License + +MIT diff --git a/plugins/chat-cards/plugin.json b/plugins/chat-cards/plugin.json new file mode 100644 index 0000000000..cd4a2415bb --- /dev/null +++ b/plugins/chat-cards/plugin.json @@ -0,0 +1,21 @@ +{ + "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json", + "name": "chat-cards", + "description": "Interactive card deck in a GHCP canvas: tab cards, tables, SVG charts, show/hide sections, numbered outlines, rendered markdown documents, video clips, and forms whose submissions come back to the conversation as prompts.", + "version": "0.1.0", + "keywords": [ + "interactive-cards", + "charts", + "forms", + "education", + "visual-explanations" + ], + "author": { "name": "John Haugabook" }, + "repository": "https://github.com/github/awesome-copilot", + "license": "MIT", + "extensions": { + "com.github.copilot": { + "logo": "assets/preview.png" + } + } +} From 8dd0a6a8eb8bf8870bcf53620f0c534e408372eb Mon Sep 17 00:00:00 2001 From: John Haugabook Date: Mon, 17 Aug 2026 18:11:03 -0400 Subject: [PATCH 2/8] codespell: resolve mispelling --- extensions/chat-cards/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions/chat-cards/README.md b/extensions/chat-cards/README.md index e61e4381b8..5c48fa80af 100644 --- a/extensions/chat-cards/README.md +++ b/extensions/chat-cards/README.md @@ -8,7 +8,7 @@ sends the values back to the conversation as the agent's next prompt, so a card can gather context and steer the session as easily as it presents information. The extension is a port of an MCP server, which is similar; but renders the cards -inline of the coversation, instead of rendering the HTML in a separate panel. +inline of the conversation, instead of rendering the HTML in a separate panel. ![Chat Cards canvas preview](assets/preview.png) From b1147c2a67952b1a28b40264c6519eddd709508a Mon Sep 17 00:00:00 2001 From: John Haugabook Date: Mon, 17 Aug 2026 22:32:09 -0400 Subject: [PATCH 3/8] code review, debug extension finding github app issue --- extensions/chat-cards/README.md | 3 - extensions/chat-cards/assets/canvas.html | 119 +++++-- extensions/chat-cards/cards-core.mjs | 78 +++-- extensions/chat-cards/extension.mjs | 386 ++++++++++++++++++++--- extensions/chat-cards/package.json | 2 +- plugins/chat-cards/README.md | 4 +- 6 files changed, 493 insertions(+), 99 deletions(-) diff --git a/extensions/chat-cards/README.md b/extensions/chat-cards/README.md index 5c48fa80af..5ee84d780d 100644 --- a/extensions/chat-cards/README.md +++ b/extensions/chat-cards/README.md @@ -91,9 +91,6 @@ npm install `npm install` pulls the extension's single dependency (`@github/copilot-sdk`). Then register the `extension/` folder with your Copilot client as a local extension, start a session, and ask the agent to open the Chat Cards canvas. -The MCP server at the repository root is separate and is not affected by -installing the extension (*and vice versa*); install whichever fits your host, -or both. Reload extensions in the GitHub Copilot app, then open the chat-cards canvas in a conversation. diff --git a/extensions/chat-cards/assets/canvas.html b/extensions/chat-cards/assets/canvas.html index 203ab80c36..6e3fd60cd8 100644 --- a/extensions/chat-cards/assets/canvas.html +++ b/extensions/chat-cards/assets/canvas.html @@ -5,7 +5,7 @@ Chat Cards