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.
- package/CHANGELOG.md +31 -0
- package/Readme.md +27 -6
- package/dist/canvas/global.css +90 -4
- package/dist/canvas/index.js +93 -91
- package/dist/canvas/mermaid-entry.js +258 -258
- package/dist/types/cli/agent.d.ts +1 -0
- package/dist/types/cli/commands/record.d.ts +12 -0
- package/dist/types/client/canvas/FeedbackDialog.d.ts +4 -0
- package/dist/types/client/canvas/Presentation.d.ts +13 -0
- package/dist/types/client/canvas/use-node-drag.d.ts +2 -1
- package/dist/types/client/nodes/McpAppNode.d.ts +24 -1
- package/dist/types/client/state/presentation.d.ts +3 -0
- package/dist/types/client/types.d.ts +1 -1
- package/dist/types/json-render/catalog.d.ts +2 -2
- package/dist/types/json-render/server.d.ts +2 -0
- package/dist/types/server/canvas-db.d.ts +2 -0
- package/dist/types/server/canvas-operations.d.ts +22 -0
- package/dist/types/server/canvas-schema.d.ts +1 -0
- package/dist/types/server/canvas-state.d.ts +6 -0
- package/dist/types/server/canvas-validation.d.ts +3 -0
- package/dist/types/server/html-surface.d.ts +1 -1
- package/dist/types/server/index.d.ts +4 -0
- package/dist/types/server/operations/ops/app.d.ts +2 -0
- package/dist/types/server/operations/ops/json-render.d.ts +2 -0
- package/dist/types/server/operations/ops/nodes.d.ts +3 -1
- package/dist/types/server/web-artifacts.d.ts +3 -0
- package/dist/types/shared/tour.d.ts +72 -0
- package/docs/cli.md +96 -2
- package/docs/http-api.md +79 -4
- package/docs/mcp.md +25 -1
- package/docs/node-types.md +123 -1
- package/docs/product-context-vision-2026-09.md +1 -1
- package/docs/product-vision-2026-09.md +135 -42
- package/docs/product-vision-review-2026-09.md +277 -0
- package/package.json +1 -1
- package/skills/pmx-canvas/SKILL.md +19 -4
- package/skills/pmx-canvas/evals/evals.json +46 -0
- package/skills/pmx-canvas/references/full-reference.md +1 -1
- package/skills/pmx-canvas/references/installing-pmx-canvas.md +4 -4
- package/src/cli/agent.ts +5 -0
- package/src/cli/commands/nodes.ts +10 -0
- package/src/cli/commands/record.ts +218 -0
- package/src/cli/index.ts +2 -0
- package/src/client/App.tsx +7 -1
- package/src/client/canvas/AgentPresenceLayer.tsx +1 -1
- package/src/client/canvas/CanvasNode.tsx +8 -0
- package/src/client/canvas/FeedbackDialog.tsx +86 -0
- package/src/client/canvas/IntentLayer.tsx +9 -2
- package/src/client/canvas/Presentation.tsx +108 -0
- package/src/client/canvas/ToolRail.tsx +225 -189
- package/src/client/canvas/TopBar.tsx +28 -2
- package/src/client/canvas/use-node-drag.ts +8 -3
- package/src/client/mermaid-entry.ts +39 -0
- package/src/client/nodes/HtmlNode.tsx +12 -13
- package/src/client/nodes/McpAppNode.tsx +105 -13
- package/src/client/nodes/MermaidNode.tsx +3 -2
- package/src/client/state/intent-store.ts +5 -1
- package/src/client/state/presentation.ts +7 -0
- package/src/client/state/session-store.ts +3 -0
- package/src/client/state/sse-bridge.ts +3 -0
- package/src/client/theme/global.css +90 -4
- package/src/json-render/server.ts +29 -0
- package/src/server/agent-presence.ts +15 -9
- package/src/server/canvas-db.ts +15 -0
- package/src/server/canvas-operations.ts +115 -22
- package/src/server/canvas-schema.ts +10 -0
- package/src/server/canvas-state.ts +39 -4
- package/src/server/canvas-validation.ts +9 -1
- package/src/server/demo-state.json +11 -7
- package/src/server/html-primitives.ts +199 -91
- package/src/server/html-surface.ts +8 -3
- package/src/server/index.ts +12 -0
- package/src/server/operations/composites.ts +3 -1
- package/src/server/operations/ops/app.ts +10 -0
- package/src/server/operations/ops/batch.ts +12 -3
- package/src/server/operations/ops/groups.ts +14 -7
- package/src/server/operations/ops/json-render.ts +37 -5
- package/src/server/operations/ops/nodes.ts +42 -16
- package/src/server/operations/ops/viewport.ts +32 -0
- package/src/server/operations/registry.ts +6 -0
- package/src/server/scope-fence.ts +1 -1
- package/src/server/server.ts +9 -6
- package/src/server/web-artifacts.ts +9 -2
- package/src/server/workboard.ts +3 -3
- 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.
|
|
10
|
-
|
|
11
|
-
|
|
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.
|
|
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
|
|
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
|
package/dist/canvas/global.css
CHANGED
|
@@ -1210,13 +1210,13 @@ body,
|
|
|
1210
1210
|
font-size: 9px;
|
|
1211
1211
|
padding: 1px 6px;
|
|
1212
1212
|
}
|
|
1213
|
-
/*
|
|
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
|
|
1218
|
-
|
|
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
|
+
}
|