@trohde/agentic-canvas 0.1.0 → 0.2.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 (147) hide show
  1. package/CHANGELOG.md +13 -1
  2. package/README.md +10 -7
  3. package/dist/cli/index.js +660 -52
  4. package/dist/cli/index.js.map +1 -1
  5. package/dist/web/assets/{ar-SA-G6X2FPQ2-Bx_JGCzc.js → ar-SA-G6X2FPQ2-Cm_aowk8.js} +1 -1
  6. package/dist/web/assets/{arc-CZEYm-X2.js → arc-BfEOcH9b.js} +1 -1
  7. package/dist/web/assets/architecture-7EHR7CIX-D9uaHVVA.js +1 -0
  8. package/dist/web/assets/{architectureDiagram-3BPJPVTR-BX4UqKAe.js → architectureDiagram-3BPJPVTR-D6EV9nh8.js} +1 -1
  9. package/dist/web/assets/{az-AZ-76LH7QW2-CQnzCEm_.js → az-AZ-76LH7QW2-BKDm9AO9.js} +1 -1
  10. package/dist/web/assets/{bg-BG-XCXSNQG7-B6OhJNg1.js → bg-BG-XCXSNQG7-Bhj2ixUd.js} +1 -1
  11. package/dist/web/assets/{blockDiagram-GPEHLZMM-DOaLZNH2.js → blockDiagram-GPEHLZMM-uuVOs3ER.js} +1 -1
  12. package/dist/web/assets/{bn-BD-2XOGV67Q-CL8DmeD-.js → bn-BD-2XOGV67Q-CnDq7W6e.js} +1 -1
  13. package/dist/web/assets/{c4Diagram-AAUBKEIU-BOYbD4o9.js → c4Diagram-AAUBKEIU-CyjNcZVo.js} +1 -1
  14. package/dist/web/assets/{ca-ES-6MX7JW3Y-DqXuGb3N.js → ca-ES-6MX7JW3Y-CzFlQ5Bd.js} +1 -1
  15. package/dist/web/assets/channel-DcqTbL2I.js +1 -0
  16. package/dist/web/assets/{chunk-2J33WTMH-9pRDhFmL.js → chunk-2J33WTMH-DJms322I.js} +1 -1
  17. package/dist/web/assets/{chunk-3OPIFGDE-Cxtej-eZ.js → chunk-3OPIFGDE-DDQRiaw9.js} +1 -1
  18. package/dist/web/assets/{chunk-4BX2VUAB-WGnRPgB4.js → chunk-4BX2VUAB-8fkcN1qh.js} +1 -1
  19. package/dist/web/assets/{chunk-55IACEB6-By23tM0L.js → chunk-55IACEB6-C_yQ14T3.js} +1 -1
  20. package/dist/web/assets/{chunk-5ZQYHXKU-BbvpmZDT.js → chunk-5ZQYHXKU-ZNEPgpb3.js} +1 -1
  21. package/dist/web/assets/{chunk-727SXJPM-DeN-6nx2.js → chunk-727SXJPM-DH8nxAzX.js} +1 -1
  22. package/dist/web/assets/{chunk-AQP2D5EJ-3vlT2osY.js → chunk-AQP2D5EJ-DfLHvN4q.js} +1 -1
  23. package/dist/web/assets/{chunk-BSJP7CBP-ggZwEsYs.js → chunk-BSJP7CBP-Cf2UEop4.js} +1 -1
  24. package/dist/web/assets/{chunk-CSCIHK7Q-CkCt7BGB.js → chunk-CSCIHK7Q-Bt5Wp92e.js} +1 -1
  25. package/dist/web/assets/{chunk-EIO257PC-DhAXVvAc.js → chunk-EIO257PC-CzqCX7ih.js} +1 -1
  26. package/dist/web/assets/{chunk-FMBD7UC4-BWW1dpup.js → chunk-FMBD7UC4-Dn7yJ4Og.js} +1 -1
  27. package/dist/web/assets/{chunk-KSCS5N6A-ByGpruIk.js → chunk-KSCS5N6A-Ckb-EIkQ.js} +1 -1
  28. package/dist/web/assets/{chunk-L5ZTLDWV-Brj903IS.js → chunk-L5ZTLDWV-DMOYXaNY.js} +1 -1
  29. package/dist/web/assets/{chunk-LZXEDZCA-B0E6SbHa.js → chunk-LZXEDZCA-BZJbFie6.js} +2 -2
  30. package/dist/web/assets/{chunk-ND2GUHAM-cgO1vAyy.js → chunk-ND2GUHAM-CH3bRn4I.js} +1 -1
  31. package/dist/web/assets/{chunk-NZK2D7GU-rJf6zpwf.js → chunk-NZK2D7GU-I17AXEJG.js} +1 -1
  32. package/dist/web/assets/{chunk-O5CBEL6O-DZpUP7B-.js → chunk-O5CBEL6O-hgdRiomR.js} +1 -1
  33. package/dist/web/assets/chunk-QZHKN3VN-DsIBQWIa.js +1 -0
  34. package/dist/web/assets/chunk-WU5MYG2G-CvtGRUhe.js +1 -0
  35. package/dist/web/assets/{chunk-XPW4576I-DRG_5uRX.js → chunk-XPW4576I-9ec1XdXl.js} +1 -1
  36. package/dist/web/assets/classDiagram-4FO5ZUOK-BnjqOVph.js +1 -0
  37. package/dist/web/assets/classDiagram-v2-Q7XG4LA2-BnjqOVph.js +1 -0
  38. package/dist/web/assets/{cose-bilkent-S5V4N54A-Dzdtq3ax.js → cose-bilkent-S5V4N54A-CTAH7-Na.js} +1 -1
  39. package/dist/web/assets/{cs-CZ-2BRQDIVT-C9Hi60ft.js → cs-CZ-2BRQDIVT-BqCGlckY.js} +1 -1
  40. package/dist/web/assets/{da-DK-5WZEPLOC-DuscK2dU.js → da-DK-5WZEPLOC-CQW71ILY.js} +1 -1
  41. package/dist/web/assets/{dagre-BM42HDAG-DG-1WRTH.js → dagre-BM42HDAG-jBLuWLOm.js} +1 -1
  42. package/dist/web/assets/{de-DE-XR44H4JA-BUknVi9m.js → de-DE-XR44H4JA-BGJ_QF0p.js} +1 -1
  43. package/dist/web/assets/{diagram-2AECGRRQ-C01yy19V.js → diagram-2AECGRRQ-Bdk2bzIQ.js} +1 -1
  44. package/dist/web/assets/{diagram-5GNKFQAL-9Ly54gPf.js → diagram-5GNKFQAL-BtXDpnfX.js} +1 -1
  45. package/dist/web/assets/{diagram-KO2AKTUF-Bnzn_Fk2.js → diagram-KO2AKTUF-Dzpy-rDd.js} +1 -1
  46. package/dist/web/assets/{diagram-LMA3HP47-CkQJH7qS.js → diagram-LMA3HP47-DpyU3oY9.js} +1 -1
  47. package/dist/web/assets/{diagram-OG6HWLK6-sYTSt9S6.js → diagram-OG6HWLK6-D_vZYBEy.js} +1 -1
  48. package/dist/web/assets/{dist-CHteZrRU.js → dist-D2xqQQPY.js} +1 -1
  49. package/dist/web/assets/{dist--k9jX8ko.js → dist-DbhSHjHs.js} +4 -4
  50. package/dist/web/assets/{el-GR-BZB4AONW-CBx8IJCe.js → el-GR-BZB4AONW-CtK8iWZk.js} +1 -1
  51. package/dist/web/assets/{en-B4ZKOASM-D04FpeSQ.js → en-B4ZKOASM-QIuF9S_L.js} +1 -1
  52. package/dist/web/assets/{erDiagram-TEJ5UH35-kBTcPhaQ.js → erDiagram-TEJ5UH35-CPSP5rtu.js} +1 -1
  53. package/dist/web/assets/{es-ES-U4NZUMDT-nQPOkQIb.js → es-ES-U4NZUMDT-BGRuwoLW.js} +1 -1
  54. package/dist/web/assets/{eu-ES-A7QVB2H4-OVL5j0Bz.js → eu-ES-A7QVB2H4-BffwZaTm.js} +1 -1
  55. package/dist/web/assets/eventmodeling-FCH6USID-DsUO1N_d.js +1 -0
  56. package/dist/web/assets/{fa-IR-HGAKTJCU-BXJbxYFk.js → fa-IR-HGAKTJCU-DPSCuyoW.js} +1 -1
  57. package/dist/web/assets/{fi-FI-Z5N7JZ37-DoZfr4yv.js → fi-FI-Z5N7JZ37-8dRu4kif.js} +1 -1
  58. package/dist/web/assets/{flowDiagram-I6XJVG4X-CwQyslgb.js → flowDiagram-I6XJVG4X-pB7KUsSZ.js} +1 -1
  59. package/dist/web/assets/{fr-FR-RHASNOE6-CXLv0m_p.js → fr-FR-RHASNOE6-C8e_ndFO.js} +1 -1
  60. package/dist/web/assets/{ganttDiagram-6RSMTGT7-B-1gME9q.js → ganttDiagram-6RSMTGT7-DEwygfiX.js} +1 -1
  61. package/dist/web/assets/{gitGraph-WXDBUCRP-BC3bsb5A.js → gitGraph-WXDBUCRP-DyH-gphX.js} +1 -1
  62. package/dist/web/assets/{gitGraphDiagram-PVQCEYII-DUh_E2g-.js → gitGraphDiagram-PVQCEYII-C580aOqP.js} +1 -1
  63. package/dist/web/assets/{gl-ES-HMX3MZ6V-DMYtQjyy.js → gl-ES-HMX3MZ6V-DZvyfyMN.js} +1 -1
  64. package/dist/web/assets/{he-IL-6SHJWFNN-BXviMgxV.js → he-IL-6SHJWFNN-DdcdKhtV.js} +1 -1
  65. package/dist/web/assets/{hi-IN-IWLTKZ5I-B6s0F0bv.js → hi-IN-IWLTKZ5I-BluyCJ3K.js} +1 -1
  66. package/dist/web/assets/{hu-HU-A5ZG7DT2-DZY88thP.js → hu-HU-A5ZG7DT2-Dg3oGdTy.js} +1 -1
  67. package/dist/web/assets/{id-ID-SAP4L64H-CsRPE_UY.js → id-ID-SAP4L64H-BLUaAQdX.js} +1 -1
  68. package/dist/web/assets/image-GAAHSSAO-Du_312iO.js +1 -0
  69. package/dist/web/assets/{index-Do_WCY2x.js → index-CaeNa0Nd.js} +8 -8
  70. package/dist/web/assets/{info-J43DQDTF-DgcAwO7L.js → info-J43DQDTF-CT6GvwIw.js} +1 -1
  71. package/dist/web/assets/{infoDiagram-5YYISTIA-BVoRZtf6.js → infoDiagram-5YYISTIA-DajsEaol.js} +1 -1
  72. package/dist/web/assets/{ishikawaDiagram-YF4QCWOH-Pc0lSZjn.js → ishikawaDiagram-YF4QCWOH-B4l6Aaj1.js} +1 -1
  73. package/dist/web/assets/{it-IT-JPQ66NNP-D6QIIUKx.js → it-IT-JPQ66NNP-CjKMpPiP.js} +1 -1
  74. package/dist/web/assets/{ja-JP-DBVTYXUO-BKIOpiiN.js → ja-JP-DBVTYXUO-7hTYylEN.js} +1 -1
  75. package/dist/web/assets/{journeyDiagram-JHISSGLW-CUTIkP_3.js → journeyDiagram-JHISSGLW-BYZtl1Hi.js} +1 -1
  76. package/dist/web/assets/{kaa-6HZHGXH3-Ck2PqClI.js → kaa-6HZHGXH3-DZbKTMJH.js} +1 -1
  77. package/dist/web/assets/{kab-KAB-ZGHBKWFO-9067fQ1h.js → kab-KAB-ZGHBKWFO-CfiL0AkF.js} +1 -1
  78. package/dist/web/assets/{kanban-definition-UN3LZRKU-f9h-Kl6S.js → kanban-definition-UN3LZRKU-3KTfHyGo.js} +1 -1
  79. package/dist/web/assets/{kk-KZ-P5N5QNE5-Ds5pD5Rs.js → kk-KZ-P5N5QNE5-CL1X8K-V.js} +1 -1
  80. package/dist/web/assets/{km-KH-HSX4SM5Z-BvgABkMn.js → km-KH-HSX4SM5Z-DkiDM0om.js} +1 -1
  81. package/dist/web/assets/{ko-KR-MTYHY66A-BI-VJ_qS.js → ko-KR-MTYHY66A-DeAZ7jFA.js} +1 -1
  82. package/dist/web/assets/{ku-TR-6OUDTVRD-CzO0QxpT.js → ku-TR-6OUDTVRD-BOybWoIi.js} +1 -1
  83. package/dist/web/assets/{line-BM7n-WSY.js → line-BVaj9bp2.js} +1 -1
  84. package/dist/web/assets/{linear-CoV0e-iv.js → linear-BbEWsyY4.js} +1 -1
  85. package/dist/web/assets/{lt-LT-XHIRWOB4-Wdr8437y.js → lt-LT-XHIRWOB4-C5H7N0uM.js} +1 -1
  86. package/dist/web/assets/{lv-LV-5QDEKY6T-Baqs6ETz.js → lv-LV-5QDEKY6T-T9e_HCTF.js} +1 -1
  87. package/dist/web/assets/{mermaid-parser.core-BxU7L1C-.js → mermaid-parser.core-CBlXvD0u.js} +2 -2
  88. package/dist/web/assets/{mindmap-definition-RKZ34NQL-e2CkjxCV.js → mindmap-definition-RKZ34NQL-DQbTUk5-.js} +1 -1
  89. package/dist/web/assets/{mr-IN-CRQNXWMA-_P3j2iZu.js → mr-IN-CRQNXWMA-B-PthEKF.js} +1 -1
  90. package/dist/web/assets/{my-MM-5M5IBNSE-u-YXjqOx.js → my-MM-5M5IBNSE-BvaKSQfh.js} +1 -1
  91. package/dist/web/assets/{nb-NO-T6EIAALU-BVTkGOfM.js → nb-NO-T6EIAALU-AVukMlbc.js} +1 -1
  92. package/dist/web/assets/{nl-NL-IS3SIHDZ-Dz45KRHt.js → nl-NL-IS3SIHDZ-1Ais5hls.js} +1 -1
  93. package/dist/web/assets/{nn-NO-6E72VCQL-Bv1T99Os.js → nn-NO-6E72VCQL-CMMf615t.js} +1 -1
  94. package/dist/web/assets/{oc-FR-POXYY2M6-CWPx0BPy.js → oc-FR-POXYY2M6-COfJfqJD.js} +1 -1
  95. package/dist/web/assets/{pa-IN-N4M65BXN-CUAufnLD.js → pa-IN-N4M65BXN-BMA3pTXK.js} +1 -1
  96. package/dist/web/assets/{packet-YPE3B663-DSUdqwD6.js → packet-YPE3B663-BBkze78i.js} +1 -1
  97. package/dist/web/assets/percentages-BXMCSKIN-D6JI391u.js +1 -0
  98. package/dist/web/assets/{pica-lghYzniR.js → pica-0kffCCbc.js} +1 -1
  99. package/dist/web/assets/{pie-LRSECV5Y-CtaLKxkL.js → pie-LRSECV5Y-CKSNEbTP.js} +1 -1
  100. package/dist/web/assets/{pieDiagram-4H26LBE5-KQxiMI7y.js → pieDiagram-4H26LBE5-BBbcOiMW.js} +1 -1
  101. package/dist/web/assets/{pl-PL-T2D74RX3-BYDGKTrw.js → pl-PL-T2D74RX3-BynL7lcx.js} +1 -1
  102. package/dist/web/assets/{pt-BR-5N22H2LF-DiLHA1Fv.js → pt-BR-5N22H2LF-C4hPdgZm.js} +1 -1
  103. package/dist/web/assets/{pt-PT-UZXXM6DQ-DO4nqrjh.js → pt-PT-UZXXM6DQ-CohDul9s.js} +1 -1
  104. package/dist/web/assets/{quadrantDiagram-W4KKPZXB-DYnhMBii.js → quadrantDiagram-W4KKPZXB-DbFZ4mVF.js} +1 -1
  105. package/dist/web/assets/{radar-GUYGQ44K-BWVL_5jd.js → radar-GUYGQ44K-nUUcbbyf.js} +1 -1
  106. package/dist/web/assets/{requirementDiagram-4Y6WPE33-CLSyCDmb.js → requirementDiagram-4Y6WPE33-BE4DIJ6B.js} +1 -1
  107. package/dist/web/assets/{ro-RO-JPDTUUEW-CkArAo01.js → ro-RO-JPDTUUEW-NPZ6H5_k.js} +1 -1
  108. package/dist/web/assets/{ru-RU-B4JR7IUQ-CF7qZR2L.js → ru-RU-B4JR7IUQ-DUYJexox.js} +1 -1
  109. package/dist/web/assets/{sankeyDiagram-5OEKKPKP-fCrXqVCu.js → sankeyDiagram-5OEKKPKP-BBgQr7tO.js} +1 -1
  110. package/dist/web/assets/{sequenceDiagram-3UESZ5HK-Ibg1UsPm.js → sequenceDiagram-3UESZ5HK-Bve3KCrM.js} +1 -1
  111. package/dist/web/assets/{si-LK-N5RQ5JYF-SlyZ_B_5.js → si-LK-N5RQ5JYF-YQIyxfwu.js} +1 -1
  112. package/dist/web/assets/{sk-SK-C5VTKIMK-B59JZXsV.js → sk-SK-C5VTKIMK-naC01XZT.js} +1 -1
  113. package/dist/web/assets/{sl-SI-NN7IZMDC-CkVIpRnH.js → sl-SI-NN7IZMDC-c8M-xB_J.js} +1 -1
  114. package/dist/web/assets/{src-Dc-yDLup.js → src-5GYS8Ljo.js} +1 -1
  115. package/dist/web/assets/{stateDiagram-AJRCARHV-Cg6ervwo.js → stateDiagram-AJRCARHV-ooB93unN.js} +1 -1
  116. package/dist/web/assets/stateDiagram-v2-BHNVJYJU-CQKTJr2T.js +1 -0
  117. package/dist/web/assets/subset-shared.chunk-Lb-_zEfd.js +1 -0
  118. package/dist/web/assets/{subset-worker.chunk-DN4FBbFb.js → subset-worker.chunk-Cm3Hfued.js} +1 -1
  119. package/dist/web/assets/{sv-SE-XGPEYMSR-BwnaFVSC.js → sv-SE-XGPEYMSR-BxQJQlZm.js} +1 -1
  120. package/dist/web/assets/{ta-IN-2NMHFXQM-Digwj7d-.js → ta-IN-2NMHFXQM-CLstIlbu.js} +1 -1
  121. package/dist/web/assets/{th-TH-HPSO5L25-Ck3FgDpQ.js → th-TH-HPSO5L25-C1Fw6Lrv.js} +1 -1
  122. package/dist/web/assets/{timeline-definition-PNZ67QCA-Sxfm8qnw.js → timeline-definition-PNZ67QCA-DSwgdcbw.js} +1 -1
  123. package/dist/web/assets/{tr-TR-DEFEU3FU-CZntbglt.js → tr-TR-DEFEU3FU-yIjSKsYZ.js} +1 -1
  124. package/dist/web/assets/{treeView-BLDUP644-Cx8t5kj4.js → treeView-BLDUP644-qRIad0RL.js} +1 -1
  125. package/dist/web/assets/{treemap-LRROVOQU-Dfh_IQDp.js → treemap-LRROVOQU-DkzmeI5b.js} +1 -1
  126. package/dist/web/assets/{uk-UA-QMV73CPH-B0wjKowt.js → uk-UA-QMV73CPH-Cxu2wJjR.js} +1 -1
  127. package/dist/web/assets/{vennDiagram-CIIHVFJN-BMEOJ0gl.js → vennDiagram-CIIHVFJN-C9IbTAeZ.js} +1 -1
  128. package/dist/web/assets/{vi-VN-M7AON7JQ-Dj0BUYxm.js → vi-VN-M7AON7JQ-CVlx5WSz.js} +1 -1
  129. package/dist/web/assets/{wardley-L42UT6IY-EJTnFNq7.js → wardley-L42UT6IY-BoetX5iL.js} +1 -1
  130. package/dist/web/assets/{wardleyDiagram-YWT4CUSO-BJjdV56L.js → wardleyDiagram-YWT4CUSO-BnSF5czb.js} +1 -1
  131. package/dist/web/assets/{xychartDiagram-2RQKCTM6-CBQ88pV0.js → xychartDiagram-2RQKCTM6-CnGeJixh.js} +1 -1
  132. package/dist/web/assets/{zh-CN-LNUGB5OW-K1_YaWy1.js → zh-CN-LNUGB5OW-Cnl39PI9.js} +1 -1
  133. package/dist/web/assets/{zh-HK-E62DVLB3-DCU_gXiJ.js → zh-HK-E62DVLB3-D0hO_t0Q.js} +1 -1
  134. package/dist/web/assets/{zh-TW-RAJ6MFWO-1ApXhCfP.js → zh-TW-RAJ6MFWO-Cq71LAZa.js} +1 -1
  135. package/dist/web/index.html +1 -1
  136. package/package.json +1 -1
  137. package/dist/web/assets/architecture-7EHR7CIX-BW08P3jh.js +0 -1
  138. package/dist/web/assets/channel-jlcmNkDM.js +0 -1
  139. package/dist/web/assets/chunk-QZHKN3VN-B2hsWqvV.js +0 -1
  140. package/dist/web/assets/chunk-WU5MYG2G-ad-_f9bA.js +0 -1
  141. package/dist/web/assets/classDiagram-4FO5ZUOK-pgvxJ5K2.js +0 -1
  142. package/dist/web/assets/classDiagram-v2-Q7XG4LA2-pgvxJ5K2.js +0 -1
  143. package/dist/web/assets/eventmodeling-FCH6USID-3Z5bJ280.js +0 -1
  144. package/dist/web/assets/image-GAAHSSAO-Ufj_572K.js +0 -1
  145. package/dist/web/assets/percentages-BXMCSKIN-BRi-lUYV.js +0 -1
  146. package/dist/web/assets/stateDiagram-v2-BHNVJYJU-Z9e_4KHc.js +0 -1
  147. package/dist/web/assets/subset-shared.chunk-CnjPFGnW.js +0 -1
package/CHANGELOG.md CHANGED
@@ -4,7 +4,19 @@ All notable changes to this project will be documented in this file.
4
4
 
5
5
  This project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
- ## 0.1.0 - Unreleased
7
+ ## 0.2.0 - 2026-06-13
8
+
9
+ - Added browser-backed `select_objects`, shared `set_canvas_background`, and in-memory `undo`/`redo` MCP tools.
10
+ - Added Excalidraw `ungroup_objects` and `remove_from_frame` tools.
11
+ - Hardened object validation, grouping, deletion reporting, flowchart planning, and derived label/arrow geometry after edits.
12
+ - Added WebSocket support for programmatic selection and expanded MCP, plugin, controller, and WebSocket tests.
13
+
14
+ ## 0.1.1 - 2026-06-13
15
+
16
+ - Patch release to verify GitHub Actions trusted publishing after the first npm publication.
17
+ - No runtime behavior changes.
18
+
19
+ ## 0.1.0 - 2026-06-13
8
20
 
9
21
  - Initial local-first Agentic Canvas implementation.
10
22
  - Added Excalidraw-backed browser canvas, MCP Streamable HTTP tools, WebSocket scene sync, save/open, and screenshot support.
package/README.md CHANGED
@@ -40,7 +40,7 @@ Flags:
40
40
  - `--workspace <dir>`: root for save/open/screenshot files, default current directory
41
41
  - `--open` / `--no-open`: open the browser on startup, default open
42
42
 
43
- Optional environment overrides are `AGENTIC_CANVAS_PORT`, `AGENTIC_CANVAS_HOST`, and `AGENTIC_CANVAS_WORKSPACE`. No secrets or `.env` file are required.
43
+ Optional environment overrides are `AGENTIC_CANVAS_PORT`, `AGENTIC_CANVAS_HOST`, and `AGENTIC_CANVAS_WORKSPACE`. `save_canvas`, `open_canvas`, and screenshot file writes are constrained to the configured workspace root. No secrets or `.env` file are required.
44
44
 
45
45
  ## Develop
46
46
 
@@ -73,9 +73,10 @@ Example tool flow:
73
73
 
74
74
  1. Call `draw_rectangle` with `{ "x": 100, "y": 100, "width": 200, "height": 120, "text": "Hello" }`; a labeled rectangle appears in the browser.
75
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.
76
+ 3. Call `select_objects` with the rectangle id to select it from the MCP client.
77
+ 4. Call `screenshot`; the tool returns a PNG image.
78
+ 5. Call `save_canvas` with `{ "path": "demo.excalidraw" }`; the file is written inside the workspace.
79
+ 6. Call `clear_canvas`, then `open_canvas` with `{ "path": "demo.excalidraw" }`; the saved scene is restored.
79
80
 
80
81
  ## Test And Build
81
82
 
@@ -114,8 +115,10 @@ npm run inspect:mcp
114
115
  4. Confirm the shapes appear live in the browser.
115
116
  5. Call `save_canvas`, `clear_canvas`, and `open_canvas`; confirm the scene clears and reloads.
116
117
  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.
118
+ 7. Call `select_objects`; confirm the browser selection changes.
119
+ 8. Call `undo` and `redo`; confirm the browser scene follows the server history.
120
+ 9. Call `screenshot`; confirm a PNG is returned and, when `path` is provided, written in the workspace.
121
+ 10. Drag or edit a shape by hand in the browser, then call `list_objects`; confirm the listing reflects the human edit.
119
122
 
120
123
  ## Release Checks
121
124
 
@@ -156,5 +159,5 @@ scripts/ Release and package smoke scripts
156
159
  - HTTP MCP transport only; no stdio transport in v1.
157
160
  - Single browser session is the expected mode.
158
161
  - Full-scene sync is used instead of diffs or CRDT collaboration.
159
- - Screenshot and selected-object lookup require a connected browser.
162
+ - Screenshot and selection tools require a connected browser.
160
163
  - The Excalidraw tool surface is intentionally small: shapes, text, frames, groups, arrows, flowcharts, save/open, and screenshot.