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.
- package/.github/extensions/pmx-canvas/extension.mjs +149 -70
- package/CHANGELOG.md +32 -1
- package/Readme.md +40 -13
- package/dist/canvas/global.css +94 -15
- package/dist/canvas/index.js +76 -76
- package/dist/types/cli/daemon.d.ts +5 -5
- package/dist/types/cli/shared.d.ts +3 -1
- package/dist/types/client/canvas/ExternalWriters.d.ts +3 -3
- package/dist/types/client/icons.d.ts +15 -0
- package/dist/types/client/nodes/ExtAppFrame.d.ts +1 -1
- package/dist/types/client/nodes/FileNode.d.ts +0 -12
- package/dist/types/shared/delimited-text.d.ts +14 -0
- package/docs/cli.md +14 -2
- package/docs/http-api.md +12 -8
- package/docs/mcp.md +8 -1
- package/docs/sdk.md +2 -2
- package/package.json +1 -1
- package/skills/pmx-canvas/SKILL.md +35 -14
- package/skills/pmx-canvas/evals/evals.json +171 -0
- package/skills/pmx-canvas/references/full-reference.md +6 -1
- package/skills/pmx-canvas/references/github-copilot-app-adapter.md +17 -3
- package/skills/pmx-canvas/references/installing-pmx-canvas.md +4 -4
- package/skills/pmx-canvas/references/tours-and-recording.md +69 -0
- package/skills/pmx-canvas-testing/SKILL.md +7 -2
- package/src/cli/commands/apps.ts +1 -1
- package/src/cli/commands/backup.ts +15 -4
- package/src/cli/commands/boards.ts +16 -3
- package/src/cli/commands/export.ts +9 -2
- package/src/cli/daemon.ts +37 -7
- package/src/cli/shared.ts +11 -2
- package/src/client/App.tsx +0 -1
- package/src/client/canvas/AttentionHistory.tsx +2 -1
- package/src/client/canvas/AttentionToast.tsx +5 -3
- package/src/client/canvas/BoardSwitcher.tsx +3 -3
- package/src/client/canvas/CanvasNode.tsx +17 -9
- package/src/client/canvas/CommandBar.tsx +2 -2
- package/src/client/canvas/ContextMenu.tsx +0 -1
- package/src/client/canvas/ContextPinBar.tsx +3 -1
- package/src/client/canvas/ExpandedNodeOverlay.tsx +3 -3
- package/src/client/canvas/ExportDialog.tsx +3 -1
- package/src/client/canvas/ExternalWriters.tsx +4 -3
- package/src/client/canvas/FeedbackDialog.tsx +2 -1
- package/src/client/canvas/IntentLayer.tsx +2 -2
- package/src/client/canvas/Presentation.tsx +39 -9
- package/src/client/canvas/SelectionBar.tsx +2 -4
- package/src/client/canvas/SessionPanel.tsx +6 -4
- package/src/client/canvas/SessionReceipt.tsx +2 -1
- package/src/client/canvas/SnapshotPanel.tsx +3 -2
- package/src/client/canvas/ToolRail.tsx +2 -1
- package/src/client/canvas/TopBar.tsx +2 -2
- package/src/client/icons.tsx +118 -1
- package/src/client/nodes/AttachmentNode.tsx +27 -30
- package/src/client/nodes/BoardNode.tsx +2 -1
- package/src/client/nodes/ExtAppFrame.tsx +3 -1
- package/src/client/nodes/FileNode.tsx +4 -78
- package/src/client/nodes/ImageNode.tsx +2 -1
- package/src/client/nodes/MarkdownNode.tsx +2 -1
- package/src/client/nodes/PromptNode.tsx +3 -1
- package/src/client/state/attention-bridge.ts +3 -1
- package/src/client/state/sse-bridge.ts +3 -1
- package/src/client/theme/global.css +94 -15
- package/src/mcp/server.ts +2 -2
- package/src/server/agent-presence.ts +17 -11
- package/src/server/board-export.ts +97 -32
- package/src/server/index.ts +9 -7
- package/src/server/operations/composites.ts +3 -2
- package/src/server/operations/ops/ax-presence.ts +7 -3
- package/src/server/operations/ops/boards.ts +12 -5
- package/src/server/operations/ops/imports.ts +19 -3
- package/src/server/operations/registry.ts +4 -13
- package/src/server/server.ts +10 -3
- package/src/shared/delimited-text.ts +75 -0
package/dist/canvas/global.css
CHANGED
|
@@ -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
|
-
|
|
1970
|
-
|
|
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(
|
|
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:
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
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-
|
|
7271
|
-
.
|
|
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); }
|