@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.
Files changed (162) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/LICENSE +21 -0
  3. package/README.md +160 -0
  4. package/SECURITY.md +19 -0
  5. package/dist/cli/index.js +1873 -0
  6. package/dist/cli/index.js.map +1 -0
  7. package/dist/web/assets/Assistant-Bold-gm-uSS1B.woff2 +0 -0
  8. package/dist/web/assets/Assistant-Medium-DrcxCXg3.woff2 +0 -0
  9. package/dist/web/assets/Assistant-Regular-DVxZuzxb.woff2 +0 -0
  10. package/dist/web/assets/Assistant-SemiBold-SCI4bEL9.woff2 +0 -0
  11. package/dist/web/assets/ar-SA-G6X2FPQ2-Bx_JGCzc.js +10 -0
  12. package/dist/web/assets/arc-CZEYm-X2.js +1 -0
  13. package/dist/web/assets/architecture-7EHR7CIX-BW08P3jh.js +1 -0
  14. package/dist/web/assets/architectureDiagram-3BPJPVTR-BX4UqKAe.js +36 -0
  15. package/dist/web/assets/array-BifhSqXX.js +1 -0
  16. package/dist/web/assets/az-AZ-76LH7QW2-CQnzCEm_.js +1 -0
  17. package/dist/web/assets/bg-BG-XCXSNQG7-B6OhJNg1.js +5 -0
  18. package/dist/web/assets/blockDiagram-GPEHLZMM-DOaLZNH2.js +132 -0
  19. package/dist/web/assets/bn-BD-2XOGV67Q-CL8DmeD-.js +5 -0
  20. package/dist/web/assets/c4Diagram-AAUBKEIU-BOYbD4o9.js +10 -0
  21. package/dist/web/assets/ca-ES-6MX7JW3Y-DqXuGb3N.js +8 -0
  22. package/dist/web/assets/channel-jlcmNkDM.js +1 -0
  23. package/dist/web/assets/chunk-2J33WTMH-9pRDhFmL.js +1 -0
  24. package/dist/web/assets/chunk-3OPIFGDE-Cxtej-eZ.js +62 -0
  25. package/dist/web/assets/chunk-4BX2VUAB-WGnRPgB4.js +1 -0
  26. package/dist/web/assets/chunk-55IACEB6-By23tM0L.js +1 -0
  27. package/dist/web/assets/chunk-5ZQYHXKU-BbvpmZDT.js +2 -0
  28. package/dist/web/assets/chunk-727SXJPM-DeN-6nx2.js +206 -0
  29. package/dist/web/assets/chunk-AQP2D5EJ-3vlT2osY.js +231 -0
  30. package/dist/web/assets/chunk-BSJP7CBP-ggZwEsYs.js +1 -0
  31. package/dist/web/assets/chunk-CSCIHK7Q-CkCt7BGB.js +124 -0
  32. package/dist/web/assets/chunk-EIO257PC-DhAXVvAc.js +22 -0
  33. package/dist/web/assets/chunk-FMBD7UC4-BWW1dpup.js +15 -0
  34. package/dist/web/assets/chunk-KSCS5N6A-ByGpruIk.js +10 -0
  35. package/dist/web/assets/chunk-L5ZTLDWV-Brj903IS.js +1 -0
  36. package/dist/web/assets/chunk-LZXEDZCA-B0E6SbHa.js +2 -0
  37. package/dist/web/assets/chunk-ND2GUHAM-cgO1vAyy.js +1 -0
  38. package/dist/web/assets/chunk-NNHCCRGN-DlpIbxXb.js +159 -0
  39. package/dist/web/assets/chunk-NZK2D7GU-rJf6zpwf.js +1 -0
  40. package/dist/web/assets/chunk-O5CBEL6O-DZpUP7B-.js +70 -0
  41. package/dist/web/assets/chunk-QZHKN3VN-B2hsWqvV.js +1 -0
  42. package/dist/web/assets/chunk-WU5MYG2G-ad-_f9bA.js +1 -0
  43. package/dist/web/assets/chunk-XPW4576I-DRG_5uRX.js +32 -0
  44. package/dist/web/assets/classDiagram-4FO5ZUOK-pgvxJ5K2.js +1 -0
  45. package/dist/web/assets/classDiagram-v2-Q7XG4LA2-pgvxJ5K2.js +1 -0
  46. package/dist/web/assets/cose-bilkent-S5V4N54A-Dzdtq3ax.js +1 -0
  47. package/dist/web/assets/cs-CZ-2BRQDIVT-C9Hi60ft.js +11 -0
  48. package/dist/web/assets/cytoscape.esm-h6BdjjI9.js +321 -0
  49. package/dist/web/assets/da-DK-5WZEPLOC-DuscK2dU.js +5 -0
  50. package/dist/web/assets/dagre-BM42HDAG-DG-1WRTH.js +4 -0
  51. package/dist/web/assets/dagre-Bx709z4p.js +1 -0
  52. package/dist/web/assets/de-DE-XR44H4JA-BUknVi9m.js +8 -0
  53. package/dist/web/assets/defaultLocale-C8Fc0cco.js +1 -0
  54. package/dist/web/assets/diagram-2AECGRRQ-C01yy19V.js +43 -0
  55. package/dist/web/assets/diagram-5GNKFQAL-9Ly54gPf.js +10 -0
  56. package/dist/web/assets/diagram-KO2AKTUF-Bnzn_Fk2.js +3 -0
  57. package/dist/web/assets/diagram-LMA3HP47-CkQJH7qS.js +24 -0
  58. package/dist/web/assets/diagram-OG6HWLK6-sYTSt9S6.js +24 -0
  59. package/dist/web/assets/directory-open-01563666-D4xXyWb_.js +1 -0
  60. package/dist/web/assets/directory-open-4ed118d0-1i309Asm.js +1 -0
  61. package/dist/web/assets/dist--k9jX8ko.js +27 -0
  62. package/dist/web/assets/dist-CHteZrRU.js +1 -0
  63. package/dist/web/assets/el-GR-BZB4AONW-CBx8IJCe.js +10 -0
  64. package/dist/web/assets/en-B4ZKOASM-D04FpeSQ.js +1 -0
  65. package/dist/web/assets/erDiagram-TEJ5UH35-kBTcPhaQ.js +85 -0
  66. package/dist/web/assets/es-ES-U4NZUMDT-nQPOkQIb.js +9 -0
  67. package/dist/web/assets/eu-ES-A7QVB2H4-OVL5j0Bz.js +11 -0
  68. package/dist/web/assets/eventmodeling-FCH6USID-3Z5bJ280.js +1 -0
  69. package/dist/web/assets/fa-IR-HGAKTJCU-BXJbxYFk.js +8 -0
  70. package/dist/web/assets/fi-FI-Z5N7JZ37-DoZfr4yv.js +6 -0
  71. package/dist/web/assets/file-open-002ab408-BHUWm0Sh.js +1 -0
  72. package/dist/web/assets/file-open-7c801643-DZtJT5zp.js +1 -0
  73. package/dist/web/assets/file-save-3189631c-CO9S4HFW.js +1 -0
  74. package/dist/web/assets/file-save-745eba88-Bwdfz6OZ.js +1 -0
  75. package/dist/web/assets/flowDiagram-I6XJVG4X-CwQyslgb.js +162 -0
  76. package/dist/web/assets/fr-FR-RHASNOE6-CXLv0m_p.js +9 -0
  77. package/dist/web/assets/ganttDiagram-6RSMTGT7-B-1gME9q.js +292 -0
  78. package/dist/web/assets/gitGraph-WXDBUCRP-BC3bsb5A.js +1 -0
  79. package/dist/web/assets/gitGraphDiagram-PVQCEYII-DUh_E2g-.js +106 -0
  80. package/dist/web/assets/gl-ES-HMX3MZ6V-DMYtQjyy.js +10 -0
  81. package/dist/web/assets/graphlib-B8gBHxth.js +1 -0
  82. package/dist/web/assets/he-IL-6SHJWFNN-BXviMgxV.js +10 -0
  83. package/dist/web/assets/hi-IN-IWLTKZ5I-B6s0F0bv.js +4 -0
  84. package/dist/web/assets/hu-HU-A5ZG7DT2-DZY88thP.js +7 -0
  85. package/dist/web/assets/id-ID-SAP4L64H-CsRPE_UY.js +10 -0
  86. package/dist/web/assets/image-GAAHSSAO-Ufj_572K.js +1 -0
  87. package/dist/web/assets/image-blob-reduce.esm-NzmDxm1v.js +2 -0
  88. package/dist/web/assets/index-DedR31Vl.css +1 -0
  89. package/dist/web/assets/index-Do_WCY2x.js +207 -0
  90. package/dist/web/assets/info-J43DQDTF-DgcAwO7L.js +1 -0
  91. package/dist/web/assets/infoDiagram-5YYISTIA-BVoRZtf6.js +2 -0
  92. package/dist/web/assets/init-D6jRqBbL.js +1 -0
  93. package/dist/web/assets/ishikawaDiagram-YF4QCWOH-Pc0lSZjn.js +70 -0
  94. package/dist/web/assets/it-IT-JPQ66NNP-D6QIIUKx.js +11 -0
  95. package/dist/web/assets/ja-JP-DBVTYXUO-BKIOpiiN.js +8 -0
  96. package/dist/web/assets/journeyDiagram-JHISSGLW-CUTIkP_3.js +139 -0
  97. package/dist/web/assets/kaa-6HZHGXH3-Ck2PqClI.js +1 -0
  98. package/dist/web/assets/kab-KAB-ZGHBKWFO-9067fQ1h.js +8 -0
  99. package/dist/web/assets/kanban-definition-UN3LZRKU-f9h-Kl6S.js +89 -0
  100. package/dist/web/assets/katex-Vhh-h91d.js +257 -0
  101. package/dist/web/assets/kk-KZ-P5N5QNE5-Ds5pD5Rs.js +1 -0
  102. package/dist/web/assets/km-KH-HSX4SM5Z-BvgABkMn.js +11 -0
  103. package/dist/web/assets/ko-KR-MTYHY66A-BI-VJ_qS.js +9 -0
  104. package/dist/web/assets/ku-TR-6OUDTVRD-CzO0QxpT.js +9 -0
  105. package/dist/web/assets/line-BM7n-WSY.js +1 -0
  106. package/dist/web/assets/linear-CoV0e-iv.js +1 -0
  107. package/dist/web/assets/lt-LT-XHIRWOB4-Wdr8437y.js +3 -0
  108. package/dist/web/assets/lv-LV-5QDEKY6T-Baqs6ETz.js +7 -0
  109. package/dist/web/assets/mermaid-parser.core-BxU7L1C-.js +4 -0
  110. package/dist/web/assets/mindmap-definition-RKZ34NQL-e2CkjxCV.js +96 -0
  111. package/dist/web/assets/mr-IN-CRQNXWMA-_P3j2iZu.js +13 -0
  112. package/dist/web/assets/my-MM-5M5IBNSE-u-YXjqOx.js +1 -0
  113. package/dist/web/assets/nb-NO-T6EIAALU-BVTkGOfM.js +10 -0
  114. package/dist/web/assets/nl-NL-IS3SIHDZ-Dz45KRHt.js +8 -0
  115. package/dist/web/assets/nn-NO-6E72VCQL-Bv1T99Os.js +8 -0
  116. package/dist/web/assets/oc-FR-POXYY2M6-CWPx0BPy.js +8 -0
  117. package/dist/web/assets/ordinal-hYBb2elL.js +1 -0
  118. package/dist/web/assets/pa-IN-N4M65BXN-CUAufnLD.js +4 -0
  119. package/dist/web/assets/packet-YPE3B663-DSUdqwD6.js +1 -0
  120. package/dist/web/assets/path-BWPyau1x.js +1 -0
  121. package/dist/web/assets/percentages-BXMCSKIN-BRi-lUYV.js +1 -0
  122. package/dist/web/assets/pica-lghYzniR.js +2 -0
  123. package/dist/web/assets/pie-LRSECV5Y-CtaLKxkL.js +1 -0
  124. package/dist/web/assets/pieDiagram-4H26LBE5-KQxiMI7y.js +30 -0
  125. package/dist/web/assets/pl-PL-T2D74RX3-BYDGKTrw.js +9 -0
  126. package/dist/web/assets/pt-BR-5N22H2LF-DiLHA1Fv.js +9 -0
  127. package/dist/web/assets/pt-PT-UZXXM6DQ-DO4nqrjh.js +9 -0
  128. package/dist/web/assets/quadrantDiagram-W4KKPZXB-DYnhMBii.js +7 -0
  129. package/dist/web/assets/radar-GUYGQ44K-BWVL_5jd.js +1 -0
  130. package/dist/web/assets/requirementDiagram-4Y6WPE33-CLSyCDmb.js +84 -0
  131. package/dist/web/assets/ro-RO-JPDTUUEW-CkArAo01.js +11 -0
  132. package/dist/web/assets/rough.esm-CSKSodPl.js +1 -0
  133. package/dist/web/assets/roundRect-D01gJrlt.js +1 -0
  134. package/dist/web/assets/ru-RU-B4JR7IUQ-CF7qZR2L.js +9 -0
  135. package/dist/web/assets/sankeyDiagram-5OEKKPKP-fCrXqVCu.js +40 -0
  136. package/dist/web/assets/sequenceDiagram-3UESZ5HK-Ibg1UsPm.js +162 -0
  137. package/dist/web/assets/si-LK-N5RQ5JYF-SlyZ_B_5.js +1 -0
  138. package/dist/web/assets/sk-SK-C5VTKIMK-B59JZXsV.js +6 -0
  139. package/dist/web/assets/sl-SI-NN7IZMDC-CkVIpRnH.js +6 -0
  140. package/dist/web/assets/src-Dc-yDLup.js +1 -0
  141. package/dist/web/assets/stateDiagram-AJRCARHV-Cg6ervwo.js +1 -0
  142. package/dist/web/assets/stateDiagram-v2-BHNVJYJU-Z9e_4KHc.js +1 -0
  143. package/dist/web/assets/subset-shared.chunk-CnjPFGnW.js +1 -0
  144. package/dist/web/assets/subset-worker.chunk-DN4FBbFb.js +1 -0
  145. package/dist/web/assets/sv-SE-XGPEYMSR-BwnaFVSC.js +10 -0
  146. package/dist/web/assets/ta-IN-2NMHFXQM-Digwj7d-.js +9 -0
  147. package/dist/web/assets/th-TH-HPSO5L25-Ck3FgDpQ.js +2 -0
  148. package/dist/web/assets/timeline-definition-PNZ67QCA-Sxfm8qnw.js +120 -0
  149. package/dist/web/assets/tr-TR-DEFEU3FU-CZntbglt.js +7 -0
  150. package/dist/web/assets/treeView-BLDUP644-Cx8t5kj4.js +1 -0
  151. package/dist/web/assets/treemap-LRROVOQU-Dfh_IQDp.js +1 -0
  152. package/dist/web/assets/uk-UA-QMV73CPH-B0wjKowt.js +6 -0
  153. package/dist/web/assets/vennDiagram-CIIHVFJN-BMEOJ0gl.js +34 -0
  154. package/dist/web/assets/vi-VN-M7AON7JQ-Dj0BUYxm.js +5 -0
  155. package/dist/web/assets/wardley-L42UT6IY-EJTnFNq7.js +1 -0
  156. package/dist/web/assets/wardleyDiagram-YWT4CUSO-BJjdV56L.js +78 -0
  157. package/dist/web/assets/xychartDiagram-2RQKCTM6-CBQ88pV0.js +7 -0
  158. package/dist/web/assets/zh-CN-LNUGB5OW-K1_YaWy1.js +10 -0
  159. package/dist/web/assets/zh-HK-E62DVLB3-DCU_gXiJ.js +1 -0
  160. package/dist/web/assets/zh-TW-RAJ6MFWO-1ApXhCfP.js +9 -0
  161. package/dist/web/index.html +13 -0
  162. 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.