@trohde/agentic-canvas 0.1.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.
- package/CHANGELOG.md +11 -0
- package/LICENSE +21 -0
- package/README.md +160 -0
- package/SECURITY.md +19 -0
- package/dist/cli/index.js +1873 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/web/assets/Assistant-Bold-gm-uSS1B.woff2 +0 -0
- package/dist/web/assets/Assistant-Medium-DrcxCXg3.woff2 +0 -0
- package/dist/web/assets/Assistant-Regular-DVxZuzxb.woff2 +0 -0
- package/dist/web/assets/Assistant-SemiBold-SCI4bEL9.woff2 +0 -0
- package/dist/web/assets/ar-SA-G6X2FPQ2-Bx_JGCzc.js +10 -0
- package/dist/web/assets/arc-CZEYm-X2.js +1 -0
- package/dist/web/assets/architecture-7EHR7CIX-BW08P3jh.js +1 -0
- package/dist/web/assets/architectureDiagram-3BPJPVTR-BX4UqKAe.js +36 -0
- package/dist/web/assets/array-BifhSqXX.js +1 -0
- package/dist/web/assets/az-AZ-76LH7QW2-CQnzCEm_.js +1 -0
- package/dist/web/assets/bg-BG-XCXSNQG7-B6OhJNg1.js +5 -0
- package/dist/web/assets/blockDiagram-GPEHLZMM-DOaLZNH2.js +132 -0
- package/dist/web/assets/bn-BD-2XOGV67Q-CL8DmeD-.js +5 -0
- package/dist/web/assets/c4Diagram-AAUBKEIU-BOYbD4o9.js +10 -0
- package/dist/web/assets/ca-ES-6MX7JW3Y-DqXuGb3N.js +8 -0
- package/dist/web/assets/channel-jlcmNkDM.js +1 -0
- package/dist/web/assets/chunk-2J33WTMH-9pRDhFmL.js +1 -0
- package/dist/web/assets/chunk-3OPIFGDE-Cxtej-eZ.js +62 -0
- package/dist/web/assets/chunk-4BX2VUAB-WGnRPgB4.js +1 -0
- package/dist/web/assets/chunk-55IACEB6-By23tM0L.js +1 -0
- package/dist/web/assets/chunk-5ZQYHXKU-BbvpmZDT.js +2 -0
- package/dist/web/assets/chunk-727SXJPM-DeN-6nx2.js +206 -0
- package/dist/web/assets/chunk-AQP2D5EJ-3vlT2osY.js +231 -0
- package/dist/web/assets/chunk-BSJP7CBP-ggZwEsYs.js +1 -0
- package/dist/web/assets/chunk-CSCIHK7Q-CkCt7BGB.js +124 -0
- package/dist/web/assets/chunk-EIO257PC-DhAXVvAc.js +22 -0
- package/dist/web/assets/chunk-FMBD7UC4-BWW1dpup.js +15 -0
- package/dist/web/assets/chunk-KSCS5N6A-ByGpruIk.js +10 -0
- package/dist/web/assets/chunk-L5ZTLDWV-Brj903IS.js +1 -0
- package/dist/web/assets/chunk-LZXEDZCA-B0E6SbHa.js +2 -0
- package/dist/web/assets/chunk-ND2GUHAM-cgO1vAyy.js +1 -0
- package/dist/web/assets/chunk-NNHCCRGN-DlpIbxXb.js +159 -0
- package/dist/web/assets/chunk-NZK2D7GU-rJf6zpwf.js +1 -0
- package/dist/web/assets/chunk-O5CBEL6O-DZpUP7B-.js +70 -0
- package/dist/web/assets/chunk-QZHKN3VN-B2hsWqvV.js +1 -0
- package/dist/web/assets/chunk-WU5MYG2G-ad-_f9bA.js +1 -0
- package/dist/web/assets/chunk-XPW4576I-DRG_5uRX.js +32 -0
- package/dist/web/assets/classDiagram-4FO5ZUOK-pgvxJ5K2.js +1 -0
- package/dist/web/assets/classDiagram-v2-Q7XG4LA2-pgvxJ5K2.js +1 -0
- package/dist/web/assets/cose-bilkent-S5V4N54A-Dzdtq3ax.js +1 -0
- package/dist/web/assets/cs-CZ-2BRQDIVT-C9Hi60ft.js +11 -0
- package/dist/web/assets/cytoscape.esm-h6BdjjI9.js +321 -0
- package/dist/web/assets/da-DK-5WZEPLOC-DuscK2dU.js +5 -0
- package/dist/web/assets/dagre-BM42HDAG-DG-1WRTH.js +4 -0
- package/dist/web/assets/dagre-Bx709z4p.js +1 -0
- package/dist/web/assets/de-DE-XR44H4JA-BUknVi9m.js +8 -0
- package/dist/web/assets/defaultLocale-C8Fc0cco.js +1 -0
- package/dist/web/assets/diagram-2AECGRRQ-C01yy19V.js +43 -0
- package/dist/web/assets/diagram-5GNKFQAL-9Ly54gPf.js +10 -0
- package/dist/web/assets/diagram-KO2AKTUF-Bnzn_Fk2.js +3 -0
- package/dist/web/assets/diagram-LMA3HP47-CkQJH7qS.js +24 -0
- package/dist/web/assets/diagram-OG6HWLK6-sYTSt9S6.js +24 -0
- package/dist/web/assets/directory-open-01563666-D4xXyWb_.js +1 -0
- package/dist/web/assets/directory-open-4ed118d0-1i309Asm.js +1 -0
- package/dist/web/assets/dist--k9jX8ko.js +27 -0
- package/dist/web/assets/dist-CHteZrRU.js +1 -0
- package/dist/web/assets/el-GR-BZB4AONW-CBx8IJCe.js +10 -0
- package/dist/web/assets/en-B4ZKOASM-D04FpeSQ.js +1 -0
- package/dist/web/assets/erDiagram-TEJ5UH35-kBTcPhaQ.js +85 -0
- package/dist/web/assets/es-ES-U4NZUMDT-nQPOkQIb.js +9 -0
- package/dist/web/assets/eu-ES-A7QVB2H4-OVL5j0Bz.js +11 -0
- package/dist/web/assets/eventmodeling-FCH6USID-3Z5bJ280.js +1 -0
- package/dist/web/assets/fa-IR-HGAKTJCU-BXJbxYFk.js +8 -0
- package/dist/web/assets/fi-FI-Z5N7JZ37-DoZfr4yv.js +6 -0
- package/dist/web/assets/file-open-002ab408-BHUWm0Sh.js +1 -0
- package/dist/web/assets/file-open-7c801643-DZtJT5zp.js +1 -0
- package/dist/web/assets/file-save-3189631c-CO9S4HFW.js +1 -0
- package/dist/web/assets/file-save-745eba88-Bwdfz6OZ.js +1 -0
- package/dist/web/assets/flowDiagram-I6XJVG4X-CwQyslgb.js +162 -0
- package/dist/web/assets/fr-FR-RHASNOE6-CXLv0m_p.js +9 -0
- package/dist/web/assets/ganttDiagram-6RSMTGT7-B-1gME9q.js +292 -0
- package/dist/web/assets/gitGraph-WXDBUCRP-BC3bsb5A.js +1 -0
- package/dist/web/assets/gitGraphDiagram-PVQCEYII-DUh_E2g-.js +106 -0
- package/dist/web/assets/gl-ES-HMX3MZ6V-DMYtQjyy.js +10 -0
- package/dist/web/assets/graphlib-B8gBHxth.js +1 -0
- package/dist/web/assets/he-IL-6SHJWFNN-BXviMgxV.js +10 -0
- package/dist/web/assets/hi-IN-IWLTKZ5I-B6s0F0bv.js +4 -0
- package/dist/web/assets/hu-HU-A5ZG7DT2-DZY88thP.js +7 -0
- package/dist/web/assets/id-ID-SAP4L64H-CsRPE_UY.js +10 -0
- package/dist/web/assets/image-GAAHSSAO-Ufj_572K.js +1 -0
- package/dist/web/assets/image-blob-reduce.esm-NzmDxm1v.js +2 -0
- package/dist/web/assets/index-DedR31Vl.css +1 -0
- package/dist/web/assets/index-Do_WCY2x.js +207 -0
- package/dist/web/assets/info-J43DQDTF-DgcAwO7L.js +1 -0
- package/dist/web/assets/infoDiagram-5YYISTIA-BVoRZtf6.js +2 -0
- package/dist/web/assets/init-D6jRqBbL.js +1 -0
- package/dist/web/assets/ishikawaDiagram-YF4QCWOH-Pc0lSZjn.js +70 -0
- package/dist/web/assets/it-IT-JPQ66NNP-D6QIIUKx.js +11 -0
- package/dist/web/assets/ja-JP-DBVTYXUO-BKIOpiiN.js +8 -0
- package/dist/web/assets/journeyDiagram-JHISSGLW-CUTIkP_3.js +139 -0
- package/dist/web/assets/kaa-6HZHGXH3-Ck2PqClI.js +1 -0
- package/dist/web/assets/kab-KAB-ZGHBKWFO-9067fQ1h.js +8 -0
- package/dist/web/assets/kanban-definition-UN3LZRKU-f9h-Kl6S.js +89 -0
- package/dist/web/assets/katex-Vhh-h91d.js +257 -0
- package/dist/web/assets/kk-KZ-P5N5QNE5-Ds5pD5Rs.js +1 -0
- package/dist/web/assets/km-KH-HSX4SM5Z-BvgABkMn.js +11 -0
- package/dist/web/assets/ko-KR-MTYHY66A-BI-VJ_qS.js +9 -0
- package/dist/web/assets/ku-TR-6OUDTVRD-CzO0QxpT.js +9 -0
- package/dist/web/assets/line-BM7n-WSY.js +1 -0
- package/dist/web/assets/linear-CoV0e-iv.js +1 -0
- package/dist/web/assets/lt-LT-XHIRWOB4-Wdr8437y.js +3 -0
- package/dist/web/assets/lv-LV-5QDEKY6T-Baqs6ETz.js +7 -0
- package/dist/web/assets/mermaid-parser.core-BxU7L1C-.js +4 -0
- package/dist/web/assets/mindmap-definition-RKZ34NQL-e2CkjxCV.js +96 -0
- package/dist/web/assets/mr-IN-CRQNXWMA-_P3j2iZu.js +13 -0
- package/dist/web/assets/my-MM-5M5IBNSE-u-YXjqOx.js +1 -0
- package/dist/web/assets/nb-NO-T6EIAALU-BVTkGOfM.js +10 -0
- package/dist/web/assets/nl-NL-IS3SIHDZ-Dz45KRHt.js +8 -0
- package/dist/web/assets/nn-NO-6E72VCQL-Bv1T99Os.js +8 -0
- package/dist/web/assets/oc-FR-POXYY2M6-CWPx0BPy.js +8 -0
- package/dist/web/assets/ordinal-hYBb2elL.js +1 -0
- package/dist/web/assets/pa-IN-N4M65BXN-CUAufnLD.js +4 -0
- package/dist/web/assets/packet-YPE3B663-DSUdqwD6.js +1 -0
- package/dist/web/assets/path-BWPyau1x.js +1 -0
- package/dist/web/assets/percentages-BXMCSKIN-BRi-lUYV.js +1 -0
- package/dist/web/assets/pica-lghYzniR.js +2 -0
- package/dist/web/assets/pie-LRSECV5Y-CtaLKxkL.js +1 -0
- package/dist/web/assets/pieDiagram-4H26LBE5-KQxiMI7y.js +30 -0
- package/dist/web/assets/pl-PL-T2D74RX3-BYDGKTrw.js +9 -0
- package/dist/web/assets/pt-BR-5N22H2LF-DiLHA1Fv.js +9 -0
- package/dist/web/assets/pt-PT-UZXXM6DQ-DO4nqrjh.js +9 -0
- package/dist/web/assets/quadrantDiagram-W4KKPZXB-DYnhMBii.js +7 -0
- package/dist/web/assets/radar-GUYGQ44K-BWVL_5jd.js +1 -0
- package/dist/web/assets/requirementDiagram-4Y6WPE33-CLSyCDmb.js +84 -0
- package/dist/web/assets/ro-RO-JPDTUUEW-CkArAo01.js +11 -0
- package/dist/web/assets/rough.esm-CSKSodPl.js +1 -0
- package/dist/web/assets/roundRect-D01gJrlt.js +1 -0
- package/dist/web/assets/ru-RU-B4JR7IUQ-CF7qZR2L.js +9 -0
- package/dist/web/assets/sankeyDiagram-5OEKKPKP-fCrXqVCu.js +40 -0
- package/dist/web/assets/sequenceDiagram-3UESZ5HK-Ibg1UsPm.js +162 -0
- package/dist/web/assets/si-LK-N5RQ5JYF-SlyZ_B_5.js +1 -0
- package/dist/web/assets/sk-SK-C5VTKIMK-B59JZXsV.js +6 -0
- package/dist/web/assets/sl-SI-NN7IZMDC-CkVIpRnH.js +6 -0
- package/dist/web/assets/src-Dc-yDLup.js +1 -0
- package/dist/web/assets/stateDiagram-AJRCARHV-Cg6ervwo.js +1 -0
- package/dist/web/assets/stateDiagram-v2-BHNVJYJU-Z9e_4KHc.js +1 -0
- package/dist/web/assets/subset-shared.chunk-CnjPFGnW.js +1 -0
- package/dist/web/assets/subset-worker.chunk-DN4FBbFb.js +1 -0
- package/dist/web/assets/sv-SE-XGPEYMSR-BwnaFVSC.js +10 -0
- package/dist/web/assets/ta-IN-2NMHFXQM-Digwj7d-.js +9 -0
- package/dist/web/assets/th-TH-HPSO5L25-Ck3FgDpQ.js +2 -0
- package/dist/web/assets/timeline-definition-PNZ67QCA-Sxfm8qnw.js +120 -0
- package/dist/web/assets/tr-TR-DEFEU3FU-CZntbglt.js +7 -0
- package/dist/web/assets/treeView-BLDUP644-Cx8t5kj4.js +1 -0
- package/dist/web/assets/treemap-LRROVOQU-Dfh_IQDp.js +1 -0
- package/dist/web/assets/uk-UA-QMV73CPH-B0wjKowt.js +6 -0
- package/dist/web/assets/vennDiagram-CIIHVFJN-BMEOJ0gl.js +34 -0
- package/dist/web/assets/vi-VN-M7AON7JQ-Dj0BUYxm.js +5 -0
- package/dist/web/assets/wardley-L42UT6IY-EJTnFNq7.js +1 -0
- package/dist/web/assets/wardleyDiagram-YWT4CUSO-BJjdV56L.js +78 -0
- package/dist/web/assets/xychartDiagram-2RQKCTM6-CBQ88pV0.js +7 -0
- package/dist/web/assets/zh-CN-LNUGB5OW-K1_YaWy1.js +10 -0
- package/dist/web/assets/zh-HK-E62DVLB3-DCU_gXiJ.js +1 -0
- package/dist/web/assets/zh-TW-RAJ6MFWO-1ApXhCfP.js +9 -0
- package/dist/web/index.html +13 -0
- package/package.json +96 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
This project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
6
|
+
|
|
7
|
+
## 0.1.0 - Unreleased
|
|
8
|
+
|
|
9
|
+
- Initial local-first Agentic Canvas implementation.
|
|
10
|
+
- Added Excalidraw-backed browser canvas, MCP Streamable HTTP tools, WebSocket scene sync, save/open, and screenshot support.
|
|
11
|
+
- Added production npm package metadata, CI, release documentation, and package smoke checks.
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Thomas Klok Rohde
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
# Agentic Canvas
|
|
2
|
+
|
|
3
|
+
Agentic Canvas is a local-first visual canvas that an AI agent drives through a local MCP server. The first plugin embeds Excalidraw in a browser page, while a single local Node process serves the page, exposes MCP over Streamable HTTP, and syncs scene changes over WebSocket.
|
|
4
|
+
|
|
5
|
+
Published package: `@trohde/agentic-canvas`
|
|
6
|
+
|
|
7
|
+
Executable: `agentic-canvas`
|
|
8
|
+
|
|
9
|
+
## Prerequisites
|
|
10
|
+
|
|
11
|
+
- Node.js 20.19 or newer
|
|
12
|
+
- npm
|
|
13
|
+
- A modern browser
|
|
14
|
+
- An MCP-capable client, such as Claude Code or Claude Desktop
|
|
15
|
+
|
|
16
|
+
## Setup
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
npm install
|
|
20
|
+
npm run build
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Run
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
npm start -- --canvas excalidraw
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
For package usage after publishing:
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
npx @trohde/agentic-canvas --canvas excalidraw
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Flags:
|
|
36
|
+
|
|
37
|
+
- `--canvas <name>`: canvas plugin, currently only `excalidraw`
|
|
38
|
+
- `--port <n>`: port, default `3333`
|
|
39
|
+
- `--host <host>`: bind host, default `127.0.0.1`
|
|
40
|
+
- `--workspace <dir>`: root for save/open/screenshot files, default current directory
|
|
41
|
+
- `--open` / `--no-open`: open the browser on startup, default open
|
|
42
|
+
|
|
43
|
+
Optional environment overrides are `AGENTIC_CANVAS_PORT`, `AGENTIC_CANVAS_HOST`, and `AGENTIC_CANVAS_WORKSPACE`. No secrets or `.env` file are required.
|
|
44
|
+
|
|
45
|
+
## Develop
|
|
46
|
+
|
|
47
|
+
For backend, MCP tool, plugin, or workspace changes:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
npm run dev
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
For browser HMR, run the backend and Vite dev server in separate terminals:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
npm run dev:server
|
|
57
|
+
npm run dev:web
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Open `http://127.0.0.1:5173` for the Vite UI. MCP clients should still connect to the backend at `http://127.0.0.1:3333/mcp`.
|
|
61
|
+
|
|
62
|
+
See `docs/mcp-dev.md` for Codex configuration, MCP Inspector usage, and restart expectations.
|
|
63
|
+
|
|
64
|
+
## Connect An MCP Client
|
|
65
|
+
|
|
66
|
+
With the server running on the default port:
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
claude mcp add --transport http agentic-canvas http://127.0.0.1:3333/mcp
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
Example tool flow:
|
|
73
|
+
|
|
74
|
+
1. Call `draw_rectangle` with `{ "x": 100, "y": 100, "width": 200, "height": 120, "text": "Hello" }`; a labeled rectangle appears in the browser.
|
|
75
|
+
2. Select the rectangle in the browser and call `get_selected_objects`; the tool returns the selected normalized object.
|
|
76
|
+
3. Call `screenshot`; the tool returns a PNG image.
|
|
77
|
+
4. Call `save_canvas` with `{ "path": "demo.excalidraw" }`; the file is written inside the workspace.
|
|
78
|
+
5. Call `clear_canvas`, then `open_canvas` with `{ "path": "demo.excalidraw" }`; the saved scene is restored.
|
|
79
|
+
|
|
80
|
+
## Test And Build
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
npm run verify
|
|
84
|
+
npm run build
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
Individual checks:
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
npm run typecheck
|
|
91
|
+
npm run lint
|
|
92
|
+
npm test
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
Built-server smoke test:
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
node dist/cli/index.js --no-open --port 3939
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
Then probe `http://127.0.0.1:3939/healthz` and call `get_canvas_state` through an MCP Streamable HTTP client.
|
|
102
|
+
|
|
103
|
+
MCP Inspector:
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
npm run inspect:mcp
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
## Manual UI Verification
|
|
110
|
+
|
|
111
|
+
1. Run `npm run build && npm start -- --canvas excalidraw`.
|
|
112
|
+
2. Connect an MCP client to `http://127.0.0.1:3333/mcp`.
|
|
113
|
+
3. Call `draw_rectangle`, `add_text`, `draw_arrow`, and `create_flowchart`.
|
|
114
|
+
4. Confirm the shapes appear live in the browser.
|
|
115
|
+
5. Call `save_canvas`, `clear_canvas`, and `open_canvas`; confirm the scene clears and reloads.
|
|
116
|
+
6. Select a shape in the browser, then call `get_selected_objects`; confirm the selected object id is returned.
|
|
117
|
+
7. Call `screenshot`; confirm a PNG is returned and, when `path` is provided, written in the workspace.
|
|
118
|
+
8. Drag or edit a shape by hand in the browser, then call `list_objects`; confirm the listing reflects the human edit.
|
|
119
|
+
|
|
120
|
+
## Release Checks
|
|
121
|
+
|
|
122
|
+
This project follows Semantic Versioning. Version scripts update `package.json` and `package-lock.json` without committing or tagging:
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
npm run version:patch
|
|
126
|
+
npm run version:minor
|
|
127
|
+
npm run version:major
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
Before publishing, run:
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
npm run release:dry-run
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
See `docs/release.md` for the GitHub Actions and npm trusted publishing flow.
|
|
137
|
+
|
|
138
|
+
## Project Structure
|
|
139
|
+
|
|
140
|
+
```text
|
|
141
|
+
src/cli/ CLI entry
|
|
142
|
+
src/server/ Express, MCP HTTP, WebSocket bridge, workspace safety
|
|
143
|
+
src/mcp/ MCP server registration and baseline tools
|
|
144
|
+
src/core/ Plugin interface and normalized scene types
|
|
145
|
+
src/plugins/excalidraw/ Excalidraw plugin, element builder, adapter, tools
|
|
146
|
+
src/web/ React + Excalidraw browser app
|
|
147
|
+
src/shared/ Shared protocol and logger
|
|
148
|
+
tests/ Vitest unit and integration tests
|
|
149
|
+
docs/ Architecture notes
|
|
150
|
+
scripts/ Release and package smoke scripts
|
|
151
|
+
.github/workflows/ CI and npm publish workflows
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
## Known Limitations
|
|
155
|
+
|
|
156
|
+
- HTTP MCP transport only; no stdio transport in v1.
|
|
157
|
+
- Single browser session is the expected mode.
|
|
158
|
+
- Full-scene sync is used instead of diffs or CRDT collaboration.
|
|
159
|
+
- Screenshot and selected-object lookup require a connected browser.
|
|
160
|
+
- The Excalidraw tool surface is intentionally small: shapes, text, frames, groups, arrows, flowcharts, save/open, and screenshot.
|
package/SECURITY.md
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Security Policy
|
|
2
|
+
|
|
3
|
+
## Supported Versions
|
|
4
|
+
|
|
5
|
+
The project is pre-1.0. Security fixes target the latest published version unless otherwise noted in the release notes.
|
|
6
|
+
|
|
7
|
+
## Reporting A Vulnerability
|
|
8
|
+
|
|
9
|
+
Report security issues privately by emailing Thomas Klok Rohde at <rohde.thomas@gmail.com>.
|
|
10
|
+
|
|
11
|
+
Please include:
|
|
12
|
+
|
|
13
|
+
- affected version or commit;
|
|
14
|
+
- operating system and Node.js version;
|
|
15
|
+
- steps to reproduce;
|
|
16
|
+
- expected and observed behavior;
|
|
17
|
+
- any relevant logs or sample files.
|
|
18
|
+
|
|
19
|
+
Do not include real secrets in reports. Agentic Canvas is local-first and should not require secrets for normal use.
|