pmx-canvas 0.7.0 → 0.7.2

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 (72) hide show
  1. package/.github/extensions/pmx-canvas/extension.mjs +149 -70
  2. package/CHANGELOG.md +32 -1
  3. package/Readme.md +40 -13
  4. package/dist/canvas/global.css +94 -15
  5. package/dist/canvas/index.js +76 -76
  6. package/dist/types/cli/daemon.d.ts +5 -5
  7. package/dist/types/cli/shared.d.ts +3 -1
  8. package/dist/types/client/canvas/ExternalWriters.d.ts +3 -3
  9. package/dist/types/client/icons.d.ts +15 -0
  10. package/dist/types/client/nodes/ExtAppFrame.d.ts +1 -1
  11. package/dist/types/client/nodes/FileNode.d.ts +0 -12
  12. package/dist/types/shared/delimited-text.d.ts +14 -0
  13. package/docs/cli.md +14 -2
  14. package/docs/http-api.md +12 -8
  15. package/docs/mcp.md +8 -1
  16. package/docs/sdk.md +2 -2
  17. package/package.json +1 -1
  18. package/skills/pmx-canvas/SKILL.md +35 -14
  19. package/skills/pmx-canvas/evals/evals.json +171 -0
  20. package/skills/pmx-canvas/references/full-reference.md +6 -1
  21. package/skills/pmx-canvas/references/github-copilot-app-adapter.md +17 -3
  22. package/skills/pmx-canvas/references/installing-pmx-canvas.md +4 -4
  23. package/skills/pmx-canvas/references/tours-and-recording.md +69 -0
  24. package/skills/pmx-canvas-testing/SKILL.md +7 -2
  25. package/src/cli/commands/apps.ts +1 -1
  26. package/src/cli/commands/backup.ts +15 -4
  27. package/src/cli/commands/boards.ts +16 -3
  28. package/src/cli/commands/export.ts +9 -2
  29. package/src/cli/daemon.ts +37 -7
  30. package/src/cli/shared.ts +11 -2
  31. package/src/client/App.tsx +0 -1
  32. package/src/client/canvas/AttentionHistory.tsx +2 -1
  33. package/src/client/canvas/AttentionToast.tsx +5 -3
  34. package/src/client/canvas/BoardSwitcher.tsx +3 -3
  35. package/src/client/canvas/CanvasNode.tsx +17 -9
  36. package/src/client/canvas/CommandBar.tsx +2 -2
  37. package/src/client/canvas/ContextMenu.tsx +0 -1
  38. package/src/client/canvas/ContextPinBar.tsx +3 -1
  39. package/src/client/canvas/ExpandedNodeOverlay.tsx +3 -3
  40. package/src/client/canvas/ExportDialog.tsx +3 -1
  41. package/src/client/canvas/ExternalWriters.tsx +4 -3
  42. package/src/client/canvas/FeedbackDialog.tsx +2 -1
  43. package/src/client/canvas/IntentLayer.tsx +2 -2
  44. package/src/client/canvas/Presentation.tsx +39 -9
  45. package/src/client/canvas/SelectionBar.tsx +2 -4
  46. package/src/client/canvas/SessionPanel.tsx +6 -4
  47. package/src/client/canvas/SessionReceipt.tsx +2 -1
  48. package/src/client/canvas/SnapshotPanel.tsx +3 -2
  49. package/src/client/canvas/ToolRail.tsx +2 -1
  50. package/src/client/canvas/TopBar.tsx +2 -2
  51. package/src/client/icons.tsx +118 -1
  52. package/src/client/nodes/AttachmentNode.tsx +27 -30
  53. package/src/client/nodes/BoardNode.tsx +2 -1
  54. package/src/client/nodes/ExtAppFrame.tsx +3 -1
  55. package/src/client/nodes/FileNode.tsx +4 -78
  56. package/src/client/nodes/ImageNode.tsx +2 -1
  57. package/src/client/nodes/MarkdownNode.tsx +2 -1
  58. package/src/client/nodes/PromptNode.tsx +3 -1
  59. package/src/client/state/attention-bridge.ts +3 -1
  60. package/src/client/state/sse-bridge.ts +3 -1
  61. package/src/client/theme/global.css +94 -15
  62. package/src/mcp/server.ts +2 -2
  63. package/src/server/agent-presence.ts +17 -11
  64. package/src/server/board-export.ts +97 -32
  65. package/src/server/index.ts +9 -7
  66. package/src/server/operations/composites.ts +3 -2
  67. package/src/server/operations/ops/ax-presence.ts +7 -3
  68. package/src/server/operations/ops/boards.ts +12 -5
  69. package/src/server/operations/ops/imports.ts +19 -3
  70. package/src/server/operations/registry.ts +4 -13
  71. package/src/server/server.ts +10 -3
  72. package/src/shared/delimited-text.ts +75 -0
@@ -760,6 +760,11 @@ body,
760
760
  border-radius: calc(3px * var(--node-chrome-scale, 1));
761
761
  }
762
762
 
763
+ .canvas-node .node-controls button svg {
764
+ width: 1em;
765
+ height: 1em;
766
+ }
767
+
763
768
  .canvas-node .node-controls button:hover {
764
769
  background: var(--c-surface-hover);
765
770
  color: var(--c-text);
@@ -1466,6 +1471,10 @@ body,
1466
1471
  animation: presence-pulse 1.4s ease-in-out infinite;
1467
1472
  }
1468
1473
  .session-collapse {
1474
+ display: inline-flex;
1475
+ align-items: center;
1476
+ justify-content: center;
1477
+ padding: 0;
1469
1478
  width: 26px;
1470
1479
  height: 26px;
1471
1480
  border: 1px solid transparent;
@@ -1682,8 +1691,9 @@ body,
1682
1691
  }
1683
1692
  }
1684
1693
  .session-section-chevron {
1694
+ display: inline-flex;
1695
+ flex-shrink: 0;
1685
1696
  color: var(--c-muted);
1686
- font-size: 13px;
1687
1697
  transition: transform 0.15s ease;
1688
1698
  }
1689
1699
  .session-section-chevron.is-open {
@@ -1966,8 +1976,13 @@ body,
1966
1976
  white-space: nowrap;
1967
1977
  }
1968
1978
  .command-bar-chip-unpin {
1969
- width: 14px;
1970
- height: 14px;
1979
+ display: inline-flex;
1980
+ align-items: center;
1981
+ justify-content: center;
1982
+ flex-shrink: 0;
1983
+ padding: 0;
1984
+ width: 20px;
1985
+ height: 20px;
1971
1986
  border: none;
1972
1987
  border-radius: 50%;
1973
1988
  background: none;
@@ -4784,7 +4799,7 @@ html.is-node-resizing .ext-app-preview-catcher {
4784
4799
  position: absolute;
4785
4800
  top: 18px;
4786
4801
  right: 18px;
4787
- max-width: min(260px, calc(100% - 24px));
4802
+ max-width: min(360px, calc(100% - 36px));
4788
4803
  display: inline-flex;
4789
4804
  align-items: center;
4790
4805
  gap: 8px;
@@ -4792,7 +4807,7 @@ html.is-node-resizing .ext-app-preview-catcher {
4792
4807
  background: color-mix(in srgb, var(--c-panel-glass) 96%, transparent);
4793
4808
  backdrop-filter: blur(14px);
4794
4809
  border: 1px solid color-mix(in srgb, var(--c-line) 76%, var(--c-warn) 24%);
4795
- border-radius: 999px;
4810
+ border-radius: 12px;
4796
4811
  box-shadow: 0 8px 22px var(--c-shadow);
4797
4812
  color: var(--c-text);
4798
4813
  font: inherit;
@@ -4831,15 +4846,27 @@ html.is-node-resizing .ext-app-preview-catcher {
4831
4846
  box-shadow: 0 0 0 2px color-mix(in srgb, currentColor 28%, transparent);
4832
4847
  }
4833
4848
 
4849
+ .attention-toast-copy {
4850
+ display: grid;
4851
+ gap: 4px;
4852
+ min-width: 0;
4853
+ text-align: left;
4854
+ overflow-wrap: anywhere;
4855
+ }
4856
+
4857
+ .attention-toast-detail {
4858
+ color: var(--c-text-soft);
4859
+ font-size: 12px;
4860
+ line-height: 1.45;
4861
+ max-height: 9em;
4862
+ overflow: auto;
4863
+ }
4864
+
4834
4865
  .attention-toast-title {
4835
4866
  font-size: 12px;
4836
4867
  font-weight: 600;
4837
4868
  line-height: 1.2;
4838
4869
  letter-spacing: -0.005em;
4839
- white-space: nowrap;
4840
- overflow: hidden;
4841
- text-overflow: ellipsis;
4842
- max-width: 200px;
4843
4870
  }
4844
4871
 
4845
4872
  .attention-history {
@@ -6841,12 +6868,23 @@ html.is-node-dragging .intent-line-layer {
6841
6868
  padding: 4px 12px;
6842
6869
  cursor: pointer;
6843
6870
  }
6844
- .is-presenting > :not(.app-main):not(.presentation-error),
6871
+ .is-presenting > :not(.app-main):not(.presentation-error):not(.presentation-navigation),
6845
6872
  .is-presenting .app-main > :not(.canvas-region),
6846
6873
  .is-presenting .canvas-region > :not(.canvas-viewport) {
6847
6874
  display: none !important;
6848
6875
  }
6849
6876
  .is-presenting .canvas-viewport { pointer-events: none; }
6877
+ .presentation-navigation {
6878
+ position: fixed;
6879
+ inset: 0;
6880
+ z-index: 99;
6881
+ }
6882
+ .presentation-exit {
6883
+ position: absolute;
6884
+ top: 16px;
6885
+ right: 16px;
6886
+ box-shadow: 0 2px 12px var(--c-shadow);
6887
+ }
6850
6888
  .presentation-error {
6851
6889
  position: fixed;
6852
6890
  bottom: 16px;
@@ -6873,7 +6911,7 @@ html.is-node-dragging .intent-line-layer {
6873
6911
  align-items: center;
6874
6912
  gap: 6px;
6875
6913
  max-width: 280px;
6876
- padding: 4px 8px;
6914
+ padding: 6px 8px;
6877
6915
  margin-left: -8px;
6878
6916
  background: none;
6879
6917
  border: 1px solid transparent;
@@ -6891,7 +6929,8 @@ html.is-node-dragging .intent-line-layer {
6891
6929
  white-space: nowrap;
6892
6930
  }
6893
6931
  .board-switcher-caret {
6894
- font-size: 10px;
6932
+ display: inline-flex;
6933
+ flex-shrink: 0;
6895
6934
  color: var(--c-text-soft);
6896
6935
  }
6897
6936
  .board-switcher-menu {
@@ -7104,10 +7143,17 @@ html.is-node-dragging .intent-line-layer {
7104
7143
  }
7105
7144
  .export-dialog-links {
7106
7145
  display: flex;
7146
+ flex-wrap: wrap;
7107
7147
  gap: 12px;
7148
+ margin-top: 12px;
7108
7149
  }
7109
7150
  .export-dialog-links a {
7110
- color: var(--c-accent);
7151
+ display: inline-flex;
7152
+ align-items: center;
7153
+ justify-content: center;
7154
+ box-sizing: border-box;
7155
+ text-decoration: none;
7156
+ word-break: normal;
7111
7157
  }
7112
7158
 
7113
7159
  /* ── Home categories ── */
@@ -7267,9 +7313,42 @@ html.is-node-dragging .intent-line-layer {
7267
7313
  .attachment-node p { margin: 0; color: var(--c-text-soft); line-height: 1.5; }
7268
7314
  .attachment-node a, .md-import-source a { color: var(--c-accent); }
7269
7315
  .attachment-status { font-weight: 600; }
7270
- .attachment-node .home-board-action { border-color: var(--c-line); color: var(--c-text); min-height: 34px; }
7271
- .attachment-node .home-board-action:hover { background: var(--c-panel); border-color: var(--c-accent); }
7316
+ .attachment-button,
7317
+ .presentation-exit,
7318
+ .export-dialog-links a {
7319
+ min-height: 38px;
7320
+ padding: 8px 14px;
7321
+ border: 1px solid var(--c-text-soft);
7322
+ border-radius: 8px;
7323
+ background: var(--c-panel);
7324
+ color: var(--c-text);
7325
+ font: inherit;
7326
+ font-weight: 600;
7327
+ cursor: pointer;
7328
+ }
7329
+ .attachment-button.is-primary,
7330
+ .export-dialog-links a.is-primary { background: var(--c-accent); border-color: var(--c-accent); color: var(--c-bg); }
7331
+ .attachment-button:hover:not(:disabled),
7332
+ .presentation-exit:hover,
7333
+ .export-dialog-links a:hover { filter: brightness(1.12); }
7334
+ .attachment-button:focus-visible,
7335
+ .presentation-exit:focus-visible,
7336
+ .export-dialog-links a:focus-visible { outline: 2px solid var(--c-accent); outline-offset: 3px; }
7337
+ .attachment-button:disabled { opacity: 0.5; cursor: default; }
7272
7338
  .attachment-review { width: 100%; border-top: 1px solid var(--c-line); padding-top: 12px; }
7339
+ .attachment-review-actions {
7340
+ position: sticky;
7341
+ bottom: -16px;
7342
+ display: flex;
7343
+ flex-wrap: wrap;
7344
+ justify-content: flex-end;
7345
+ gap: 12px;
7346
+ margin-top: 24px;
7347
+ padding: 16px 0;
7348
+ border-top: 1px solid var(--c-line);
7349
+ background: var(--c-panel);
7350
+ z-index: 1;
7351
+ }
7273
7352
  .attachment-review pre { white-space: pre-wrap; overflow-wrap: anywhere; font: 12px/1.6 var(--mono); padding: 12px; background: var(--c-bg); border-radius: 8px; }
7274
7353
  .attachment-review h4 { margin-bottom: 6px; }
7275
7354
  .md-import-source { padding: 6px 12px; font-size: 11px; overflow-wrap: anywhere; color: var(--c-text-soft); border-top: 1px solid var(--c-line); }