pmx-canvas 0.7.2 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (251) hide show
  1. package/.github/extensions/pmx-canvas/THIRD_PARTY_LICENSES.txt +331 -0
  2. package/.github/extensions/pmx-canvas/extension.mjs +25 -172
  3. package/.github/extensions/pmx-canvas/mcp-bootstrap.ts +198 -0
  4. package/.github/extensions/pmx-canvas/runtime.d.mts +41 -0
  5. package/.github/extensions/pmx-canvas/runtime.json +3 -0
  6. package/.github/extensions/pmx-canvas/runtime.mjs +194 -0
  7. package/.github/extensions/pmx-canvas/start-mcp.mjs +51 -0
  8. package/.github/extensions/pmx-canvas/tools.json +2560 -0
  9. package/CHANGELOG.md +60 -0
  10. package/Readme.md +44 -16
  11. package/dist/canvas/fonts/OFL.txt +93 -0
  12. package/dist/canvas/fonts/ibm-plex-mono-latin-400-normal.woff2 +0 -0
  13. package/dist/canvas/fonts/ibm-plex-mono-latin-500-normal.woff2 +0 -0
  14. package/dist/canvas/fonts/ibm-plex-mono-latin-ext-400-normal.woff2 +0 -0
  15. package/dist/canvas/fonts/ibm-plex-mono-latin-ext-500-normal.woff2 +0 -0
  16. package/dist/canvas/fonts/ibm-plex-sans-latin-400-normal.woff2 +0 -0
  17. package/dist/canvas/fonts/ibm-plex-sans-latin-500-normal.woff2 +0 -0
  18. package/dist/canvas/fonts/ibm-plex-sans-latin-600-normal.woff2 +0 -0
  19. package/dist/canvas/fonts/ibm-plex-sans-latin-ext-400-normal.woff2 +0 -0
  20. package/dist/canvas/fonts/ibm-plex-sans-latin-ext-500-normal.woff2 +0 -0
  21. package/dist/canvas/fonts/ibm-plex-sans-latin-ext-600-normal.woff2 +0 -0
  22. package/dist/canvas/global.css +844 -710
  23. package/dist/canvas/index.js +92 -90
  24. package/dist/canvas/mcp-app.html +7878 -0
  25. package/dist/canvas/mermaid-entry.js +1 -1
  26. package/dist/canvas/surface-theme.css +151 -46
  27. package/dist/json-render/index.css +1 -1
  28. package/dist/json-render/index.js +55 -55
  29. package/dist/types/cli/commands/record.d.ts +1 -1
  30. package/dist/types/client/canvas/ChoiceMenu.d.ts +13 -0
  31. package/dist/types/client/canvas/NodeContextMark.d.ts +24 -0
  32. package/dist/types/client/canvas/SessionReceipt.d.ts +3 -1
  33. package/dist/types/client/icons.d.ts +1 -2
  34. package/dist/types/client/mcp-app/index.d.ts +1 -0
  35. package/dist/types/client/nodes/McpAppNode.d.ts +2 -1
  36. package/dist/types/client/nodes/ax-node-actions.d.ts +2 -2
  37. package/dist/types/client/nodes/markdown-sanitize.d.ts +2 -0
  38. package/dist/types/client/nodes/use-workbench-asset.d.ts +2 -0
  39. package/dist/types/client/nodes/viewer-runtime-state.d.ts +1 -0
  40. package/dist/types/client/state/attention-store.d.ts +0 -5
  41. package/dist/types/client/state/canvas-store.d.ts +2 -0
  42. package/dist/types/client/state/context-status-store.d.ts +53 -0
  43. package/dist/types/client/state/intent-bridge.d.ts +4 -1
  44. package/dist/types/client/state/near-pin-store.d.ts +16 -0
  45. package/dist/types/client/state/presence-store.d.ts +5 -0
  46. package/dist/types/client/state/session-store.d.ts +33 -3
  47. package/dist/types/client/state/workbench-transport.d.ts +16 -0
  48. package/dist/types/client/theme/tokens.d.ts +1 -3
  49. package/dist/types/client/types.d.ts +9 -0
  50. package/dist/types/json-render/renderer/index.d.ts +2 -1
  51. package/dist/types/json-render/server.d.ts +3 -1
  52. package/dist/types/mcp/app-server.d.ts +3 -0
  53. package/dist/types/mcp/canvas-access.d.ts +1 -1
  54. package/dist/types/mcp/canvas-app.d.ts +4 -0
  55. package/dist/types/mcp/workbench-app.d.ts +4 -0
  56. package/dist/types/server/agent-presence.d.ts +1 -1
  57. package/dist/types/server/ax-state.d.ts +1 -1
  58. package/dist/types/server/canvas-db.d.ts +8 -0
  59. package/dist/types/server/canvas-geometry.d.ts +25 -0
  60. package/dist/types/server/canvas-operations.d.ts +1 -11
  61. package/dist/types/server/canvas-state.d.ts +25 -3
  62. package/dist/types/server/context-brief.d.ts +8 -1
  63. package/dist/types/server/context-reads.d.ts +30 -7
  64. package/dist/types/server/index.d.ts +6 -1
  65. package/dist/types/server/mcp-app-runtime.d.ts +1 -0
  66. package/dist/types/server/operations/http.d.ts +2 -0
  67. package/dist/types/server/operations/invoker.d.ts +4 -2
  68. package/dist/types/server/operations/ops/nodes.d.ts +0 -6
  69. package/dist/types/server/server.d.ts +1 -0
  70. package/dist/types/server/spatial-analysis.d.ts +2 -0
  71. package/dist/types/shared/agent-context.d.ts +22 -0
  72. package/dist/types/shared/agent-presence.d.ts +3 -10
  73. package/dist/types/shared/ax-surface-protocol.d.ts +2 -0
  74. package/dist/types/shared/canvas-app.d.ts +54 -0
  75. package/dist/types/shared/themes.d.ts +1 -1
  76. package/docs/RELEASE.md +7 -3
  77. package/docs/agent-plugin.md +123 -0
  78. package/docs/ax-host-adapter-contract.md +13 -2
  79. package/docs/ax-state-contract.md +40 -0
  80. package/docs/cli.md +7 -2
  81. package/docs/design/AgentContext.dc.html +186 -0
  82. package/docs/design/Before.dc.html +208 -0
  83. package/docs/design/BoardPins.dc.html +151 -0
  84. package/docs/design/Chrome.dc.html +208 -0
  85. package/docs/design/Context.dc.html +239 -0
  86. package/docs/design/Flows.dc.html +181 -0
  87. package/docs/design/Home.dc.html +209 -0
  88. package/docs/design/HomeGraph.dc.html +211 -0
  89. package/docs/design/HomeMap.dc.html +117 -0
  90. package/docs/design/HomeTeam.dc.html +176 -0
  91. package/docs/design/Light.dc.html +28 -0
  92. package/docs/design/Main.dc.html +280 -0
  93. package/docs/design/NearPin.dc.html +260 -0
  94. package/docs/design/Pane600.dc.html +120 -0
  95. package/docs/design/Relations.dc.html +297 -0
  96. package/docs/design/Themes.dc.html +121 -0
  97. package/docs/design/TokenSystem.dc.html +136 -0
  98. package/docs/design/Tokens.dc.html +163 -0
  99. package/docs/design/Types1.dc.html +177 -0
  100. package/docs/design/Types2.dc.html +226 -0
  101. package/docs/design/Types3.dc.html +195 -0
  102. package/docs/design/Uses.dc.html +152 -0
  103. package/docs/design/Vision.dc.html +116 -0
  104. package/docs/design/Zoom.dc.html +82 -0
  105. package/docs/design/canvas.json +274 -0
  106. package/docs/design.md +214 -0
  107. package/docs/environment.md +1 -1
  108. package/docs/http-api.md +80 -15
  109. package/docs/mcp.md +198 -3
  110. package/docs/node-types.md +34 -10
  111. package/docs/plans/plan-009-tech-debt-backlog.md +1 -1
  112. package/docs/plans/plan-015-design-foundation-wave-0.md +177 -0
  113. package/docs/plans/plan-016-context-made-visible-wave-1.md +148 -0
  114. package/docs/product-vision-2026-09.md +47 -7
  115. package/docs/screenshot.png +0 -0
  116. package/docs/sdk.md +1 -0
  117. package/package.json +10 -4
  118. package/plugins/pmx-canvas/LICENSE +21 -0
  119. package/plugins/pmx-canvas/THIRD_PARTY_LICENSES.txt +331 -0
  120. package/plugins/pmx-canvas/assets/preview.png +0 -0
  121. package/plugins/pmx-canvas/com.github.copilot/extensions/pmx-canvas/extension.mjs +930 -0
  122. package/plugins/pmx-canvas/com.github.copilot/extensions/pmx-canvas/runtime.json +3 -0
  123. package/plugins/pmx-canvas/com.github.copilot/extensions/pmx-canvas/runtime.mjs +194 -0
  124. package/plugins/pmx-canvas/com.github.copilot/extensions/pmx-canvas/steering-delivery.mjs +79 -0
  125. package/plugins/pmx-canvas/mcp.json +12 -0
  126. package/plugins/pmx-canvas/plugin.json +24 -0
  127. package/plugins/pmx-canvas/runtime.json +3 -0
  128. package/plugins/pmx-canvas/runtime.mjs +194 -0
  129. package/plugins/pmx-canvas/start-mcp.mjs +51 -0
  130. package/plugins/pmx-canvas/tools.json +2560 -0
  131. package/skills/pmx-canvas/SKILL.md +31 -16
  132. package/skills/pmx-canvas/evals/evals.json +69 -0
  133. package/skills/pmx-canvas/references/full-reference.md +14 -10
  134. package/skills/pmx-canvas/references/github-copilot-app-adapter.md +20 -8
  135. package/skills/pmx-canvas/references/installing-pmx-canvas.md +76 -4
  136. package/skills/pmx-canvas-testing/SKILL.md +54 -4
  137. package/src/cli/commands/copilot.ts +5 -0
  138. package/src/cli/commands/view.ts +1 -1
  139. package/src/cli/index.ts +8 -3
  140. package/src/client/App.tsx +6 -1
  141. package/src/client/canvas/AgentPresenceLayer.tsx +3 -3
  142. package/src/client/canvas/AnnotationLayer.tsx +1 -1
  143. package/src/client/canvas/CanvasNode.tsx +208 -220
  144. package/src/client/canvas/CanvasViewport.tsx +6 -2
  145. package/src/client/canvas/ChoiceMenu.tsx +122 -0
  146. package/src/client/canvas/CommandBar.tsx +25 -23
  147. package/src/client/canvas/CommandPalette.tsx +3 -2
  148. package/src/client/canvas/ContextMenu.tsx +11 -0
  149. package/src/client/canvas/EdgeLayer.tsx +1 -1
  150. package/src/client/canvas/ExportDialog.tsx +33 -6
  151. package/src/client/canvas/FeedbackDialog.tsx +10 -8
  152. package/src/client/canvas/IntentLayer.tsx +2 -2
  153. package/src/client/canvas/Minimap.tsx +12 -7
  154. package/src/client/canvas/NodeContextMark.tsx +156 -0
  155. package/src/client/canvas/SessionPanel.tsx +4 -7
  156. package/src/client/canvas/SessionReceipt.tsx +114 -17
  157. package/src/client/canvas/ShortcutOverlay.tsx +6 -1
  158. package/src/client/canvas/SnapshotPanel.tsx +11 -2
  159. package/src/client/canvas/ToolRail.tsx +58 -108
  160. package/src/client/canvas/TopBar.tsx +16 -11
  161. package/src/client/icons.tsx +2 -12
  162. package/src/client/mcp-app/index.tsx +137 -0
  163. package/src/client/mcp-app/style.css +10 -0
  164. package/src/client/nodes/AttachmentNode.tsx +8 -1
  165. package/src/client/nodes/AxStepControls.tsx +1 -1
  166. package/src/client/nodes/ContextNode.tsx +9 -9
  167. package/src/client/nodes/ExtAppFrame.tsx +13 -8
  168. package/src/client/nodes/FileNode.tsx +8 -5
  169. package/src/client/nodes/ImageNode.tsx +4 -2
  170. package/src/client/nodes/InlineMarkdownEditor.tsx +2 -1
  171. package/src/client/nodes/LedgerNode.tsx +2 -2
  172. package/src/client/nodes/MarkdownNode.tsx +44 -9
  173. package/src/client/nodes/McpAppNode.tsx +22 -4
  174. package/src/client/nodes/PromptNode.tsx +5 -17
  175. package/src/client/nodes/ResponseNode.tsx +3 -15
  176. package/src/client/nodes/StatusNode.tsx +2 -2
  177. package/src/client/nodes/StatusSummary.tsx +3 -1
  178. package/src/client/nodes/TraceNode.tsx +6 -4
  179. package/src/client/nodes/WebpageNode.tsx +1 -1
  180. package/src/client/nodes/ax-node-actions.ts +2 -2
  181. package/src/client/nodes/iframe-document-url.ts +3 -2
  182. package/src/client/nodes/markdown-sanitize.ts +10 -0
  183. package/src/client/nodes/surface-url.ts +10 -0
  184. package/src/client/nodes/use-ax-surface-bridge.ts +4 -2
  185. package/src/client/nodes/use-surface-frame.ts +3 -1
  186. package/src/client/nodes/use-workbench-asset.ts +26 -0
  187. package/src/client/nodes/viewer-runtime-state.ts +78 -0
  188. package/src/client/state/attention-bridge.ts +0 -8
  189. package/src/client/state/attention-store.ts +0 -17
  190. package/src/client/state/canvas-store.ts +7 -2
  191. package/src/client/state/context-status-store.ts +66 -0
  192. package/src/client/state/human-store.ts +2 -0
  193. package/src/client/state/iframe-mode.ts +5 -0
  194. package/src/client/state/intent-bridge.ts +24 -6
  195. package/src/client/state/near-pin-store.ts +53 -0
  196. package/src/client/state/presence-store.ts +5 -10
  197. package/src/client/state/session-store.ts +106 -9
  198. package/src/client/state/sse-bridge.ts +26 -7
  199. package/src/client/state/theme-override.ts +1 -1
  200. package/src/client/state/workbench-transport.ts +36 -0
  201. package/src/client/theme/global.css +844 -710
  202. package/src/client/theme/surface-theme.css +151 -46
  203. package/src/client/theme/tokens.ts +7 -11
  204. package/src/client/types.ts +10 -0
  205. package/src/json-render/renderer/index.tsx +58 -38
  206. package/src/json-render/server.ts +79 -15
  207. package/src/mcp/app-server.ts +64 -0
  208. package/src/mcp/canvas-access.ts +14 -11
  209. package/src/mcp/canvas-app.ts +318 -0
  210. package/src/mcp/server.ts +1 -1
  211. package/src/mcp/workbench-app.ts +211 -0
  212. package/src/server/agent-presence.ts +45 -6
  213. package/src/server/ax-context.ts +1 -1
  214. package/src/server/ax-state.ts +1 -1
  215. package/src/server/board-export.ts +5 -2
  216. package/src/server/canvas-db.ts +46 -12
  217. package/src/server/canvas-geometry.ts +64 -0
  218. package/src/server/canvas-operations.ts +6 -24
  219. package/src/server/canvas-state.ts +105 -15
  220. package/src/server/canvas-validation.ts +19 -4
  221. package/src/server/context-brief.ts +39 -2
  222. package/src/server/context-reads.ts +86 -15
  223. package/src/server/demo-state.json +31 -31
  224. package/src/server/html-surface.ts +4 -5
  225. package/src/server/index.ts +19 -3
  226. package/src/server/mcp-app-runtime.ts +11 -0
  227. package/src/server/operations/composites.ts +4 -3
  228. package/src/server/operations/http.ts +4 -4
  229. package/src/server/operations/invoker.ts +13 -4
  230. package/src/server/operations/ops/ax-read.ts +1 -1
  231. package/src/server/operations/ops/ax-timeline.ts +37 -0
  232. package/src/server/operations/ops/boards.ts +1 -1
  233. package/src/server/operations/ops/canvas-wire.ts +3 -6
  234. package/src/server/operations/ops/intent.ts +31 -2
  235. package/src/server/operations/ops/json-render.ts +1 -1
  236. package/src/server/operations/ops/nodes.ts +8 -76
  237. package/src/server/operations/ops/query.ts +8 -2
  238. package/src/server/operations/ops/snapshots.ts +4 -1
  239. package/src/server/operations/ops/viewport.ts +29 -5
  240. package/src/server/operations/registry.ts +38 -4
  241. package/src/server/scope-fence.ts +55 -10
  242. package/src/server/server.ts +86 -6
  243. package/src/server/spatial-analysis.ts +2 -2
  244. package/src/server/workboard.ts +6 -1
  245. package/src/{server → shared}/agent-context.ts +2 -2
  246. package/src/shared/agent-presence.ts +3 -15
  247. package/src/shared/ax-surface-protocol.ts +3 -0
  248. package/src/shared/canvas-app.ts +62 -0
  249. package/src/shared/themes.ts +5 -5
  250. package/src/client/canvas/FocusFieldLayer.tsx +0 -116
  251. package/src/client/canvas/kind-colors.ts +0 -23
package/CHANGELOG.md CHANGED
@@ -3,6 +3,66 @@
3
3
  All notable changes to `pmx-canvas` are documented here. This project follows
4
4
  [Semantic Versioning](https://semver.org/).
5
5
 
6
+ ## [0.8.0] - 2026-10-06
7
+
8
+ ### Highlights
9
+
10
+ - A new look across the canvas: IBM Plex everywhere, one meaning per colour (blue in context, violet what the agent did, amber needs a look), quieter node headers.
11
+ - Every pinned node now shows whether an agent has read it and whether its copy is out of date.
12
+ - After an agent session, the receipt shows what it read, pinned, created and edited, and can dim everything it did not touch.
13
+ - Cards near a pin travel into the agent's brief as a short summary and are marked "near" on the board.
14
+
15
+ ### Breaking
16
+
17
+ - The `dark` and `light` themes are renamed `harbor` and `daylight`, with no aliases: `--theme=light`, `PMX_CANVAS_THEME=light`, `?theme=light` and a saved Light choice now fall back to Harbor, so pick Daylight once after upgrading.
18
+
19
+ ### Added
20
+
21
+ - Pinned nodes show "not read", "read" or amber "changed since read", with who read them and when on hover.
22
+ - Pins record who pinned them, when and why; agents can pass a `reason` to `canvas_pin_nodes`, and an agent's pin carries a violet dot.
23
+ - Nodes an agent created or edited show its name until you edit them.
24
+ - The session receipt lists what the session read, pinned, created and edited, flags pins changed since the agent read them, and has a "Dim untouched nodes" switch.
25
+ - The context brief carries each pin's nearby cards (up to five within 600 px) as title and short summary, and the board marks them "near".
26
+ - `GET /api/canvas/ax/context-status`, `canvas_ax_timeline { action: "read-status" }` and `getNodeReadStatus()` report, per node, the latest agent read and the revision it read.
27
+ - A create intent may omit its position: the ghost forms where the node will land and the linked create lands on it.
28
+ - Subagents have their own fuchsia colour, beside the agent violet.
29
+ - `POST /api/canvas/viewport` accepts `center: {x, y}` to centre a world point in the visible canvas area, and the HTTP and MCP docs now explain the viewport coordinate space.
30
+
31
+ ### Changed
32
+
33
+ - IBM Plex Sans and Mono ship with the app, and every control uses them.
34
+ - Pinned nodes use a blue border, tinted header and an always-visible pin badge; the amber halos and focus glow are gone.
35
+ - Node headers show expand and the context pin at rest; the other actions sit behind ⋯ and × on hover, and "Open in new tab" moved into the node menu.
36
+ - Selection draws a ring outside the border, so a selected pinned node keeps its pin styling.
37
+ - Type icons and the minimap are neutral; only meaning colours (pinned, agent at work) stand out, and agents are told apart by name.
38
+ - Daylight uses neutral white surfaces instead of beige.
39
+ - The reference cases run at 600, 1024 and 1920 px.
40
+
41
+ ### Fixed
42
+
43
+ - Agent ghosts no longer appear in the top-left corner when an agent announces work before it knows the layout.
44
+ - The Copilot panel shows "No matching PMX Canvas server is running" again when the server is unreachable.
45
+ - json-render form inputs given a plain `value` now show it instead of rendering empty.
46
+ - Sessions that end together now share one receipt instead of the later one replacing the earlier.
47
+ - An agent that reports a working phase and then streams cursor moves keeps showing as working instead of dropping to Idle.
48
+ - Fleet workers stay visible in the top bar after their orchestrator ends its session, and only the orchestrator's chip counts its workers.
49
+ - `validate` no longer reports nodes inside nested groups as overlapping their outer group's frame.
50
+ - Long unbroken words in work board item titles wrap inside their card instead of spilling into the next column.
51
+ - On Windows, the portable agent plugin no longer accepts its own installation folder as the project workspace.
52
+
53
+ ## [0.7.3] - 2026-10-01
54
+
55
+ ### Fixed
56
+
57
+ - JSON form values and dynamic lists survive expanding and closing focus mode without silently saving drafts to the server; authored spec updates still reset runtime state.
58
+ - Interactive surfaces register their action bridge before first paint.
59
+ - Bundled skill quick references match live MCP discovery, including board opening and workboards, and distinguish local JSON runtime state from durable data.
60
+ - Amp setup guidance covers workspace trust approval, portal targeting and native steering verification; testing guidance preserves first-failure evidence and distinguishes host coverage gaps.
61
+ - The main toolbar keeps Markdown, Attach files, Webpage and Group; one file picker replaces separate File, Image and HTML buttons, with supported formats explained in its tooltip.
62
+ - Draw, Text note and Eraser are separate toolbar buttons for quick board feedback.
63
+ - Connection handles are easier to grab at any zoom, and saved connections appear without waiting for the next background update.
64
+ - Feedback and agent selectors use themed menus, and Cancel actions have clearer button styling.
65
+
6
66
  ## [0.7.2] - 2026-09-30
7
67
 
8
68
  ### Added
package/Readme.md CHANGED
@@ -112,6 +112,10 @@ Steer the agent and see its work, without prompt engineering or copy-paste.
112
112
  Pin a node in the browser and the MCP server fires a
113
113
  `notifications/resources/updated` event the agent's harness picks up
114
114
  immediately — an explicit, low-noise control over what the agent sees next.
115
+ Each pinned node then shows whether an agent has read it since you pinned it,
116
+ and turns amber with "changed since read" when you edit it after the agent's
117
+ last read. Nodes an agent created or edited carry its name until you edit them,
118
+ and a pin an agent made carries a violet dot with its reason on hover.
115
119
 
116
120
  On top of pins, a host-agnostic **AX (agent-experience) layer** turns the
117
121
  canvas into a shared workspace between you and the agent:
@@ -160,14 +164,14 @@ vendor-specific.
160
164
 
161
165
  ### 05 / Run several agents on one board
162
166
 
163
- The canvas is built for more than one writer. Every connected agent gets a
164
- stable **identity color** carried by its cursor, its top-bar session chip, and
165
- its minimap dot — you always see who is where. Workers roll up under their
167
+ The canvas is built for more than one writer. Every connected agent is named on
168
+ its cursor, its top-bar session chip, and its activity rows, all in the agent
169
+ violet (subagents in their own fuchsia) — you always see who is where. Workers roll up under their
166
170
  orchestrator's chip (`+2 workers`), each session chip has its own End button,
167
171
  and an idle board with no writers stays byte-clean.
168
172
 
169
173
  <p align="center">
170
- <img src="docs/screenshots/multi-agent-live.png" alt="Two agent sessions and three rolled-up workers live on one board — identity-colored cursors on the cards, per-chip End buttons, the attributed session timeline, and the all-agents composer" width="100%" />
174
+ <img src="docs/screenshots/multi-agent-live.png" alt="Two agent sessions and three rolled-up workers live on one board — named agent cursors on the cards, per-chip End buttons, the attributed session timeline, and the all-agents composer" width="100%" />
171
175
  </p>
172
176
  <p align="center"><sub>Two agent sessions (Claude Code +3 workers, GitHub Copilot) and their cursors live on one board, with the writer-attributed timeline and the all-agents composer.</sub></p>
173
177
 
@@ -259,7 +263,7 @@ surfaces (the core never imports a host SDK).
259
263
  (MCP + in-app Browser) are exactly what the canvas requires.
260
264
  - **Claude Code desktop app** — the workbench runs in the desktop app's
261
265
  built-in browser pane alongside the PMX MCP server, same zero-adapter recipe
262
- as Codex: open `http://localhost:4313/workbench?theme=light` (or
266
+ as Codex: open `http://localhost:4313/workbench?theme=daylight` (or
263
267
  `?theme=auto` to follow the app's appearance) in the app's browser and the
264
268
  live board, pins, and Ghost Cursor all work in-panel — themed to match the
265
269
  pane without changing what other clients see.
@@ -316,6 +320,12 @@ bunx pmx-canvas --mcp # Run as MCP server (stdio)
316
320
  bunx pmx-canvas --help # All commands
317
321
  ```
318
322
 
323
+ For the experimental ChatGPT/MCP Apps integration, use the separate
324
+ [`--mcp-app` profile](docs/mcp.md#private-mcp-app-preview). It embeds the real
325
+ PMX workbench with selection/pin context; prompts stay in ChatGPT's own composer.
326
+ Host iframe policy and trusted-human restrictions still apply; this is not
327
+ yet a published plugin or a natively verified ChatGPT integration.
328
+
319
329
  Themes are a tool-rail picker away too, and any one panel can override the
320
330
  shared theme for itself with `?theme=<name|auto>`.
321
331
 
@@ -361,6 +371,10 @@ validation — JSON report, exit 1 on failure.
361
371
 
362
372
  ### Use inside the GitHub Copilot app
363
373
 
374
+ The standalone [agent plugin](docs/agent-plugin.md) in `plugins/pmx-canvas/` bundles PMX's
375
+ MCP tools and native Copilot canvas. It uses the Agent Plugins 1.0 format: other compatible
376
+ clients get the MCP tools and browser workbench, not Copilot's native side panel.
377
+
364
378
  This repository includes a project canvas extension:
365
379
 
366
380
  ```text
@@ -397,20 +411,33 @@ merge this into the workspace's `.amp/settings.json` (not `.mcp.json`):
397
411
  "amp.mcpServers": {
398
412
  "canvas": {
399
413
  "command": "bunx",
400
- "args": ["pmx-canvas@0.7.2", "--mcp"]
414
+ "args": ["pmx-canvas@0.8.0", "--mcp"],
415
+ "includeTools": ["canvas_*"],
416
+ "env": {
417
+ "PMX_CANVAS_WORKSPACE_ROOT": "/absolute/path/to/project",
418
+ "PMX_CANVAS_PORT": "14313",
419
+ "PMX_CANVAS_URL": "",
420
+ "PMX_CANVAS_AGENT_SOURCE": "amp"
421
+ }
401
422
  }
402
423
  }
403
424
  }
404
425
  ```
405
426
 
427
+ Replace the root and example port with the portal service's actual workspace and local
428
+ listening port, including an orb-assigned port. Configure this inside the orb/runner;
429
+ settings on your laptop are not automatically available there.
406
430
  In the PMX product checkout, use `"command": "bun"` and
407
431
  `"args": ["run", "src/mcp/server.ts"]` to test the checked-out source instead.
408
- Reload MCP connections and complete any host trust prompt. Confirm Canvas tools
409
- are discoverable and the target `/health.workspace` and version match before
410
- mutating a board. If discovery is empty, inspect Amp's MCP connection status;
411
- an open portal or a successful standalone MCP handshake does not prove a native
412
- connection, skill activation, or steering delivery. See
413
- [Amp MCP configuration](https://ampcode.com/docs/customize/mcp).
432
+ Run `amp mcp doctor` in that workspace. If it reports `awaiting approval`, the user
433
+ must review the command and run `amp mcp approve canvas` there; the agent must not
434
+ self-approve or bypass workspace trust. Then reload MCP connections and confirm
435
+ `connected`, Canvas tool discovery, and matching `/health.workspace`, version and
436
+ active board before writes. An open portal or standalone MCP handshake does not prove
437
+ native discovery. PMX ships no dedicated Amp lifecycle adapter: an active agent can
438
+ poll steering, but MCP setup alone does not wake an idle thread or activate skills.
439
+ See the bundled [Amp setup and verification guide](skills/pmx-canvas/references/installing-pmx-canvas.md#amp-connect-the-agent-separately-from-the-portal)
440
+ and [Amp MCP configuration](https://ampcode.com/docs/customize/mcp).
414
441
 
415
442
  For the visible workbench, run `pmx-canvas` as an orb service (the orb sets
416
443
  `AMP_ORB` in the environment automatically) and open the workbench through the
@@ -428,7 +455,7 @@ services:
428
455
  ```bash
429
456
  # .agents/setup — install the CLI (pin the exact version: a fresh orb running
430
457
  # @latest can silently pick up a newer release than the one you validated)
431
- npm install -g pmx-canvas@0.7.2
458
+ npm install -g pmx-canvas@0.8.0
432
459
  ```
433
460
 
434
461
  The server binds the portal-assigned `$PORT` automatically (gated on the
@@ -444,9 +471,10 @@ be inlined and stay blocked by the portal embed: cross-origin hosted apps (e.g.
444
471
  the hosted Excalidraw MCP app), and PDF file nodes — a PDF node offers an
445
472
  "Open PDF" link there instead of a preview.
446
473
  Debug overrides: `/workbench?transport=poll|sse` and
447
- `?iframe-mode=srcdoc|src`. Once the service is up, `pmx-canvas smoke` verifies
448
- the whole stack (health, versions, MCP handshake, node lifecycle, validation)
449
- in one command.
474
+ `?iframe-mode=srcdoc|src`. After verifying the workspace, `pmx-canvas smoke --port=<actual-port>`
475
+ checks health, versions, a standalone MCP handshake, node lifecycle and validation.
476
+ Use a disposable board: it performs temporary writes and leaves history. This does
477
+ not verify native Amp discovery or browser rendering.
450
478
 
451
479
  ### Install the agent skill (recommended)
452
480
 
@@ -0,0 +1,93 @@
1
+ Copyright 2019 IBM Corp. All rights reserved. IBMPlexSans-Italic[wdth,wght].ttf: Copyright 2019 IBM Corp. All rights reserved.
2
+
3
+ This Font Software is licensed under the SIL Open Font License, Version 1.1.
4
+ This license is copied below, and is also available with a FAQ at:
5
+ http://scripts.sil.org/OFL
6
+
7
+
8
+ -----------------------------------------------------------
9
+ SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
10
+ -----------------------------------------------------------
11
+
12
+ PREAMBLE
13
+ The goals of the Open Font License (OFL) are to stimulate worldwide
14
+ development of collaborative font projects, to support the font creation
15
+ efforts of academic and linguistic communities, and to provide a free and
16
+ open framework in which fonts may be shared and improved in partnership
17
+ with others.
18
+
19
+ The OFL allows the licensed fonts to be used, studied, modified and
20
+ redistributed freely as long as they are not sold by themselves. The
21
+ fonts, including any derivative works, can be bundled, embedded,
22
+ redistributed and/or sold with any software provided that any reserved
23
+ names are not used by derivative works. The fonts and derivatives,
24
+ however, cannot be released under any other type of license. The
25
+ requirement for fonts to remain under this license does not apply
26
+ to any document created using the fonts or their derivatives.
27
+
28
+ DEFINITIONS
29
+ "Font Software" refers to the set of files released by the Copyright
30
+ Holder(s) under this license and clearly marked as such. This may
31
+ include source files, build scripts and documentation.
32
+
33
+ "Reserved Font Name" refers to any names specified as such after the
34
+ copyright statement(s).
35
+
36
+ "Original Version" refers to the collection of Font Software components as
37
+ distributed by the Copyright Holder(s).
38
+
39
+ "Modified Version" refers to any derivative made by adding to, deleting,
40
+ or substituting -- in part or in whole -- any of the components of the
41
+ Original Version, by changing formats or by porting the Font Software to a
42
+ new environment.
43
+
44
+ "Author" refers to any designer, engineer, programmer, technical
45
+ writer or other person who contributed to the Font Software.
46
+
47
+ PERMISSION & CONDITIONS
48
+ Permission is hereby granted, free of charge, to any person obtaining
49
+ a copy of the Font Software, to use, study, copy, merge, embed, modify,
50
+ redistribute, and sell modified and unmodified copies of the Font
51
+ Software, subject to the following conditions:
52
+
53
+ 1) Neither the Font Software nor any of its individual components,
54
+ in Original or Modified Versions, may be sold by itself.
55
+
56
+ 2) Original or Modified Versions of the Font Software may be bundled,
57
+ redistributed and/or sold with any software, provided that each copy
58
+ contains the above copyright notice and this license. These can be
59
+ included either as stand-alone text files, human-readable headers or
60
+ in the appropriate machine-readable metadata fields within text or
61
+ binary files as long as those fields can be easily viewed by the user.
62
+
63
+ 3) No Modified Version of the Font Software may use the Reserved Font
64
+ Name(s) unless explicit written permission is granted by the corresponding
65
+ Copyright Holder. This restriction only applies to the primary font name as
66
+ presented to the users.
67
+
68
+ 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
69
+ Software shall not be used to promote, endorse or advertise any
70
+ Modified Version, except to acknowledge the contribution(s) of the
71
+ Copyright Holder(s) and the Author(s) or with their explicit written
72
+ permission.
73
+
74
+ 5) The Font Software, modified or unmodified, in part or in whole,
75
+ must be distributed entirely under this license, and must not be
76
+ distributed under any other license. The requirement for fonts to
77
+ remain under this license does not apply to any document created
78
+ using the Font Software.
79
+
80
+ TERMINATION
81
+ This license becomes null and void if any of the above conditions are
82
+ not met.
83
+
84
+ DISCLAIMER
85
+ THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
86
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
87
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
88
+ OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
89
+ COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
90
+ INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
91
+ DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
92
+ FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
93
+ OTHER DEALINGS IN THE FONT SOFTWARE.