pmx-canvas 0.6.3 → 0.6.5

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 (85) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/Readme.md +27 -6
  3. package/dist/canvas/global.css +90 -4
  4. package/dist/canvas/index.js +93 -91
  5. package/dist/canvas/mermaid-entry.js +258 -258
  6. package/dist/types/cli/agent.d.ts +1 -0
  7. package/dist/types/cli/commands/record.d.ts +12 -0
  8. package/dist/types/client/canvas/FeedbackDialog.d.ts +4 -0
  9. package/dist/types/client/canvas/Presentation.d.ts +13 -0
  10. package/dist/types/client/canvas/use-node-drag.d.ts +2 -1
  11. package/dist/types/client/nodes/McpAppNode.d.ts +24 -1
  12. package/dist/types/client/state/presentation.d.ts +3 -0
  13. package/dist/types/client/types.d.ts +1 -1
  14. package/dist/types/json-render/catalog.d.ts +2 -2
  15. package/dist/types/json-render/server.d.ts +2 -0
  16. package/dist/types/server/canvas-db.d.ts +2 -0
  17. package/dist/types/server/canvas-operations.d.ts +22 -0
  18. package/dist/types/server/canvas-schema.d.ts +1 -0
  19. package/dist/types/server/canvas-state.d.ts +6 -0
  20. package/dist/types/server/canvas-validation.d.ts +3 -0
  21. package/dist/types/server/html-surface.d.ts +1 -1
  22. package/dist/types/server/index.d.ts +4 -0
  23. package/dist/types/server/operations/ops/app.d.ts +2 -0
  24. package/dist/types/server/operations/ops/json-render.d.ts +2 -0
  25. package/dist/types/server/operations/ops/nodes.d.ts +3 -1
  26. package/dist/types/server/web-artifacts.d.ts +3 -0
  27. package/dist/types/shared/tour.d.ts +72 -0
  28. package/docs/cli.md +96 -2
  29. package/docs/http-api.md +79 -4
  30. package/docs/mcp.md +25 -1
  31. package/docs/node-types.md +123 -1
  32. package/docs/product-context-vision-2026-09.md +1 -1
  33. package/docs/product-vision-2026-09.md +135 -42
  34. package/docs/product-vision-review-2026-09.md +277 -0
  35. package/package.json +1 -1
  36. package/skills/pmx-canvas/SKILL.md +19 -4
  37. package/skills/pmx-canvas/evals/evals.json +46 -0
  38. package/skills/pmx-canvas/references/full-reference.md +1 -1
  39. package/skills/pmx-canvas/references/installing-pmx-canvas.md +4 -4
  40. package/src/cli/agent.ts +5 -0
  41. package/src/cli/commands/nodes.ts +10 -0
  42. package/src/cli/commands/record.ts +218 -0
  43. package/src/cli/index.ts +2 -0
  44. package/src/client/App.tsx +7 -1
  45. package/src/client/canvas/AgentPresenceLayer.tsx +1 -1
  46. package/src/client/canvas/CanvasNode.tsx +8 -0
  47. package/src/client/canvas/FeedbackDialog.tsx +86 -0
  48. package/src/client/canvas/IntentLayer.tsx +9 -2
  49. package/src/client/canvas/Presentation.tsx +108 -0
  50. package/src/client/canvas/ToolRail.tsx +225 -189
  51. package/src/client/canvas/TopBar.tsx +28 -2
  52. package/src/client/canvas/use-node-drag.ts +8 -3
  53. package/src/client/mermaid-entry.ts +39 -0
  54. package/src/client/nodes/HtmlNode.tsx +12 -13
  55. package/src/client/nodes/McpAppNode.tsx +105 -13
  56. package/src/client/nodes/MermaidNode.tsx +3 -2
  57. package/src/client/state/intent-store.ts +5 -1
  58. package/src/client/state/presentation.ts +7 -0
  59. package/src/client/state/session-store.ts +3 -0
  60. package/src/client/state/sse-bridge.ts +3 -0
  61. package/src/client/theme/global.css +90 -4
  62. package/src/json-render/server.ts +29 -0
  63. package/src/server/agent-presence.ts +15 -9
  64. package/src/server/canvas-db.ts +15 -0
  65. package/src/server/canvas-operations.ts +115 -22
  66. package/src/server/canvas-schema.ts +10 -0
  67. package/src/server/canvas-state.ts +39 -4
  68. package/src/server/canvas-validation.ts +9 -1
  69. package/src/server/demo-state.json +11 -7
  70. package/src/server/html-primitives.ts +199 -91
  71. package/src/server/html-surface.ts +8 -3
  72. package/src/server/index.ts +12 -0
  73. package/src/server/operations/composites.ts +3 -1
  74. package/src/server/operations/ops/app.ts +10 -0
  75. package/src/server/operations/ops/batch.ts +12 -3
  76. package/src/server/operations/ops/groups.ts +14 -7
  77. package/src/server/operations/ops/json-render.ts +37 -5
  78. package/src/server/operations/ops/nodes.ts +42 -16
  79. package/src/server/operations/ops/viewport.ts +32 -0
  80. package/src/server/operations/registry.ts +6 -0
  81. package/src/server/scope-fence.ts +1 -1
  82. package/src/server/server.ts +9 -6
  83. package/src/server/web-artifacts.ts +9 -2
  84. package/src/server/workboard.ts +3 -3
  85. package/src/shared/tour.ts +87 -0
package/CHANGELOG.md CHANGED
@@ -3,6 +3,37 @@
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.6.5] - 2026-09-26
7
+
8
+ ### Added
9
+
10
+ - Present saved board tours or derive stops from groups, with keyboard navigation and optional local PNG/MP4 capture using the same camera path.
11
+ - Creation responses report requested and applied sizes, including group fitting, across HTTP, MCP, and batches.
12
+ - JSON-render warns when unbound form values would be ignored.
13
+
14
+ ### Fixed
15
+
16
+ - Workboards use equal-width columns across narrow and wide frames.
17
+ - Embedded HTML and JSON-render updates keep the previous frame visible until the replacement is ready.
18
+ - Explicitly empty HTML primitive fields omit their sections instead of inserting example content.
19
+ - Mermaid diagrams fit overflowing content without enlarging small diagrams; authored sizes and optional natural scrolling are preserved.
20
+ - Titlebar clicks select nodes without adding a selection after a drag.
21
+ - Detached agents expire promptly, workers roll up under their parent, and camera operations no longer claim writer activity.
22
+ - Unchanged and worker sessions do not replace useful receipts or reopen the panel.
23
+ - Ghosts finish their rendered settle animation before removal, and tour-only changes create distinct snapshots.
24
+
25
+ ## [0.6.4] - 2026-09-24
26
+
27
+ ### Added
28
+
29
+ - A bug icon in the left toolbar opens a form for bug reports, feature requests, and general feedback, with a reviewable GitHub issue draft.
30
+
31
+ ### Internal
32
+
33
+ - Viewport-fit tests cancel pending animations during teardown so they cannot write the next test's nodes.
34
+ - Documented JSON-render state and slots, authored-card fitting limits, and bundled MCP skill resources.
35
+ - Clarified that the CLI pump skips and acknowledges startup backlog by default; added skill evals for skipping history and explicitly delivering reviewed backlog.
36
+
6
37
  ## [0.6.3] - 2026-09-23
7
38
 
8
39
  ### Added
package/Readme.md CHANGED
@@ -6,9 +6,9 @@ execution and carrying the learning forward.
6
6
 
7
7
  **The board is your extended memory and your agent's working memory.** Use it
8
8
  to research, analyze, work with dashboards, and start or plan coding and other
9
- knowledge work—not just to prepare context for an agent. The [long-term vision](docs/product-context-vision-2026-09.md#work-becomes-memory-and-memory-supports-more-work)
10
- connects that work to a growing memory graph and maintained wiki, bringing useful
11
- understanding back into whatever you do next.
9
+ knowledge work—not just to prepare context for an agent. In the [long-term vision](docs/product-vision-2026-09.md#the-one-line-vision)
10
+ your boards link into a wiki you can see as a map, bringing useful understanding
11
+ back into whatever you do next, and any board can be shared or presented.
12
12
 
13
13
  **A moldable canvas for agent-assisted thinking.** An infinite 2D surface
14
14
  where files, plans, status, charts, fetched web pages, annotations, code
@@ -18,6 +18,12 @@ structured panel into place as they generate it — not as a separate tooling
18
18
  project. Pin what matters and the agent reads your spatial curation as
19
19
  structured context.
20
20
 
21
+ **The board is the presentation.** Click **Present** to step through a saved tour
22
+ (or groups in reading order), with chrome hidden and smooth camera moves.
23
+ Optionally capture that same tour with
24
+ `pmx-canvas record --mode deterministic --present --output tour.mp4`. See the
25
+ [tour model and CLI walkthrough](docs/cli.md#tour-and-presentation).
26
+
21
27
  <p align="center">
22
28
  <img src="docs/screenshots/workbench-live-dark.png" alt="Live multi-agent workbench — dark theme: two agents on the board, review cards, an architecture diagram, and the writers pill" width="49%" />
23
29
  <img src="docs/screenshots/workbench-live-light.png" alt="Live multi-agent workbench — light theme" width="49%" />
@@ -67,6 +73,13 @@ the canvas is the union of its [built-in node types](docs/node-types.md) and
67
73
  **whatever your agent's harness already has access to** — MCP servers, CLIs,
68
74
  file reads, web fetch, anything on its toolbelt.
69
75
 
76
+ JSON-render panels support bound form state, nested repeats, watchers, and Card
77
+ header/footer slots. Form edits remain viewer-local until explicitly submitted;
78
+ see [JSON-render nodes](docs/node-types.md#json-render-nodes). Authored iframe cards
79
+ can grow with their content and move clear of neighbors, with human-grab deferral
80
+ and undoable relocation. This is grow-only height fitting, not shrink-to-content
81
+ or camera zoom; see [sizing limits](docs/node-types.md#automatic-sizing-of-authored-iframe-cards).
82
+
70
83
  ### 03 / Annotate
71
84
 
72
85
  Draw freehand marks directly on the canvas to circle, underline, connect, or
@@ -365,7 +378,7 @@ services:
365
378
  ```bash
366
379
  # .agents/setup — install the CLI (pin the exact version: a fresh orb running
367
380
  # @latest can silently pick up a newer release than the one you validated)
368
- npm install -g pmx-canvas@0.6.3
381
+ npm install -g pmx-canvas@0.6.5
369
382
  ```
370
383
 
371
384
  The server binds the portal-assigned `$PORT` automatically (gated on the
@@ -417,14 +430,22 @@ scripts, and assets at `skill://<name>/<path>`. Files come from the running MCP
417
430
  restart MCP after an upgrade. Host support determines automatic skill loading, and reading
418
431
  a skill never grants permission to execute its scripts. Filesystem installation remains available.
419
432
 
433
+ ## Bugs, feature requests, and feedback
434
+
435
+ Click the small bug icon below the logo in the left toolbar (**Bug and feedback**).
436
+ Choose Bug report, Feature request, or General feedback, then enter a title and
437
+ description. **Continue on GitHub** opens a prefilled issue in this repository;
438
+ sign in to GitHub, review it, and submit. Issues are public. No board data, workspace
439
+ paths, screenshots, or logs are attached automatically.
440
+
420
441
  ## Documentation
421
442
 
422
443
  - **[Node types](docs/node-types.md)** — every node type, edge types, and
423
444
  the three-tier visual matrix (json-render → html → web-artifact)
424
445
  - **[CLI reference](docs/cli.md)** — full command surface, daemon mode,
425
446
  watch streams, WebView automation
426
- - **[MCP reference](docs/mcp.md)** — 22 tools, 14 resources, change
427
- notifications, node-type routing
447
+ - **[MCP reference](docs/mcp.md)** — 22 tools, 14 core resources plus bundled
448
+ skill resources, Skills extension, change notifications, node-type routing
428
449
  - **[HTTP API](docs/http-api.md)** — REST endpoints, SSE, batch operations
429
450
  - **[AX host-adapter contract](docs/ax-host-adapter-contract.md)** — how native
430
451
  host adapters connect context, steering, activity, and human gates
@@ -1210,13 +1210,13 @@ body,
1210
1210
  font-size: 9px;
1211
1211
  padding: 1px 6px;
1212
1212
  }
1213
- /* Idle cursors leave the board (user feedback, 0.5.1 cycle): with many agents
1213
+ /* Parked idle cursors leave the board (user feedback, 0.5.1 cycle): with many agents
1214
1214
  attached, a wall of parked "Idle" pills covers real node content. The
1215
1215
  element stays MOUNTED — counts, twin-merge, and cursor-follow logic are
1216
1216
  untouched, and visibility (not display) keeps its layout box so position
1217
- polls still resolve — but it paints nothing; any non-idle phase fades it
1218
- back in. Placed after .is-worker so opacity: 0 wins that collision. */
1219
- .agent-cursor.phase-idle {
1217
+ polls still resolve — but it paints nothing. An explicitly reported cursor
1218
+ remains visible even while idle so cursor-only movement cannot disappear. */
1219
+ .agent-cursor.phase-idle:not(.has-explicit-cursor) {
1220
1220
  opacity: 0;
1221
1221
  visibility: hidden;
1222
1222
  transition:
@@ -4211,6 +4211,33 @@ html.is-node-resizing .ext-app-preview-catcher {
4211
4211
  }
4212
4212
 
4213
4213
  /* MCP app iframe */
4214
+ .mcp-app-frame-stack {
4215
+ position: relative;
4216
+ flex: 1;
4217
+ min-width: 0;
4218
+ min-height: 0;
4219
+ background: var(--c-panel-soft);
4220
+ overflow: hidden;
4221
+ border-radius: 0 0 calc(var(--radius) - 1px) calc(var(--radius) - 1px);
4222
+ }
4223
+
4224
+ .mcp-app-frame-stack:has(.html-node-frame) {
4225
+ width: 100%;
4226
+ height: 100%;
4227
+ min-height: 300px;
4228
+ background: var(--c-bg);
4229
+ border-radius: 6px;
4230
+ }
4231
+
4232
+ .mcp-app-frame-stack:has(.html-node-frame-presentation) {
4233
+ min-height: 0;
4234
+ border-radius: 0;
4235
+ }
4236
+
4237
+ .mcp-app-frame-stack:has(.html-node-frame-expanded) {
4238
+ min-height: 70vh;
4239
+ }
4240
+
4214
4241
  .mcp-app-frame {
4215
4242
  width: 100%;
4216
4243
  height: 100%;
@@ -4474,6 +4501,38 @@ html.is-node-resizing .ext-app-preview-catcher {
4474
4501
  font-weight: 600;
4475
4502
  }
4476
4503
 
4504
+ .feedback-backdrop {
4505
+ position: fixed;
4506
+ padding: 24px 0;
4507
+ align-items: center;
4508
+ }
4509
+ .feedback-dialog {
4510
+ width: min(480px, calc(100% - 32px));
4511
+ max-height: calc(100dvh - 48px);
4512
+ overflow-y: auto;
4513
+ color: var(--c-text);
4514
+ }
4515
+ .feedback-dialog label {
4516
+ display: flex;
4517
+ flex-direction: column;
4518
+ gap: 6px;
4519
+ font-size: 12px;
4520
+ }
4521
+ .feedback-note {
4522
+ margin: 0;
4523
+ color: var(--c-muted);
4524
+ font-size: 12px;
4525
+ line-height: 1.5;
4526
+ }
4527
+ .feedback-dialog textarea {
4528
+ resize: vertical;
4529
+ min-height: 100px;
4530
+ }
4531
+ .feedback-dialog button:disabled {
4532
+ opacity: 0.5;
4533
+ cursor: not-allowed;
4534
+ }
4535
+
4477
4536
  /* Selection action bar — floating bottom-center of the canvas region
4478
4537
  (rail-chrome-v2 phase 7, item 13). */
4479
4538
  /* In a session the command bar owns the bottom-center slot — lift the
@@ -6776,3 +6835,30 @@ html.is-node-dragging .intent-ghost,
6776
6835
  html.is-node-dragging .intent-line-layer {
6777
6836
  opacity: 0.5;
6778
6837
  }
6838
+
6839
+ .present-button {
6840
+ color: var(--c-text);
6841
+ background: var(--c-bg);
6842
+ border: 1px solid var(--c-line);
6843
+ border-radius: 6px;
6844
+ padding: 4px 12px;
6845
+ cursor: pointer;
6846
+ }
6847
+ .is-presenting > :not(.app-main):not(.presentation-error),
6848
+ .is-presenting .app-main > :not(.canvas-region),
6849
+ .is-presenting .canvas-region > :not(.canvas-viewport) {
6850
+ display: none !important;
6851
+ }
6852
+ .is-presenting .canvas-viewport { pointer-events: none; }
6853
+ .presentation-error {
6854
+ position: fixed;
6855
+ bottom: 16px;
6856
+ left: 16px;
6857
+ z-index: 100;
6858
+ max-width: calc(100% - 32px);
6859
+ padding: 10px 16px;
6860
+ border: 1px solid var(--c-line);
6861
+ border-radius: 6px;
6862
+ background: var(--c-panel);
6863
+ color: var(--c-text);
6864
+ }