@joeyshi12/casper 0.7.2 → 0.8.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 (408) hide show
  1. package/README.md +12 -1
  2. package/dist/agents/casper.json +11 -2
  3. package/dist/mcp.js +412 -0
  4. package/dist/server.js +528 -31
  5. package/dist/web/assets/{abap-DsBKuouk.js → abap-jokb6lkK.js} +1 -1
  6. package/dist/web/assets/{abnfDiagram-N423BO3Z-BntXFWDC.js → abnfDiagram-N423BO3Z-J5DaDTt8.js} +1 -1
  7. package/dist/web/assets/{actionscript-3-D_z4Izcz.js → actionscript-3-BXYeDGJT.js} +1 -1
  8. package/dist/web/assets/{ada-727ZlQH0.js → ada-CBhgZKLz.js} +1 -1
  9. package/dist/web/assets/andromeeda-C6FuwQ60.js +1 -0
  10. package/dist/web/assets/{angular-html-LfdN0zeE.js → angular-html-1hX26BPZ.js} +1 -1
  11. package/dist/web/assets/angular-ts-NOFjJDBC.js +1 -0
  12. package/dist/web/assets/{apache-Dn00JSTd.js → apache-DZWQkMCk.js} +1 -1
  13. package/dist/web/assets/{apex-COJ4H7py.js → apex-yOx7_f90.js} +1 -1
  14. package/dist/web/assets/{apl-BBq3IX1j.js → apl-COek7QEF.js} +1 -1
  15. package/dist/web/assets/{applescript-Bu5BbsvL.js → applescript-DK6hSn4y.js} +1 -1
  16. package/dist/web/assets/{ara-7O62HKoU.js → ara-NyGvP6OL.js} +1 -1
  17. package/dist/web/assets/arc-CXWeATz6.js +1 -0
  18. package/dist/web/assets/architectureDiagram-T3A2C74G-ecXfY9My.js +36 -0
  19. package/dist/web/assets/{asciidoc-BPT9niGB.js → asciidoc-DDMctdp3.js} +1 -1
  20. package/dist/web/assets/{asm-Dhn9LcZ4.js → asm-C-s1ZrQ8.js} +1 -1
  21. package/dist/web/assets/{astro-CqkE3fuf.js → astro-CNP7wUB9.js} +1 -1
  22. package/dist/web/assets/aurora-x-C0VKFdlO.js +1 -0
  23. package/dist/web/assets/{awk-eg146-Ew.js → awk-DUctW4RQ.js} +1 -1
  24. package/dist/web/assets/ayu-dark-_V__kATy.js +1 -0
  25. package/dist/web/assets/{ballerina-Du268qiB.js → ballerina-DCDyHuU_.js} +1 -1
  26. package/dist/web/assets/{bat-fje9CFhw.js → bat-CYJ1VtZ8.js} +1 -1
  27. package/dist/web/assets/{beancount-BwXTMy5W.js → beancount-DXz1TR4C.js} +1 -1
  28. package/dist/web/assets/{berry-3xVqZejG.js → berry-DSxfSjpQ.js} +1 -1
  29. package/dist/web/assets/{bibtex-xW4inM5L.js → bibtex-D3osIjO9.js} +1 -1
  30. package/dist/web/assets/{bicep-DHo0CJ0O.js → bicep-BJtoMy_l.js} +1 -1
  31. package/dist/web/assets/{blade-a8OxSdnT.js → blade-BrTmz5zY.js} +1 -1
  32. package/dist/web/assets/{blockDiagram-VBNYF7ZC-Brv9Aqj6.js → blockDiagram-VBNYF7ZC-D5ClKOWV.js} +1 -1
  33. package/dist/web/assets/{bsl-Dgyn0ogV.js → bsl-BOq_oGzx.js} +1 -1
  34. package/dist/web/assets/{c-C3t2pwGQ.js → c-C7geQHiD.js} +1 -1
  35. package/dist/web/assets/{c4Diagram-5PPSVZJV-CsCCridM.js → c4Diagram-5PPSVZJV-BxW2-O4j.js} +1 -1
  36. package/dist/web/assets/{cadence-DNquZEk8.js → cadence-B8exyrQ2.js} +1 -1
  37. package/dist/web/assets/{cairo--RitsXJZ.js → cairo-CvnV_g6b.js} +1 -1
  38. package/dist/web/assets/catppuccin-frappe-7hveN6gg.js +1 -0
  39. package/dist/web/assets/catppuccin-latte-CDftU3M4.js +1 -0
  40. package/dist/web/assets/catppuccin-macchiato-DVaPwPDs.js +1 -0
  41. package/dist/web/assets/catppuccin-mocha-CYOEdfgP.js +1 -0
  42. package/dist/web/assets/channel-BXz-ycSk.js +1 -0
  43. package/dist/web/assets/{chunk-2GRJ4B5K-D_ANB_P2.js → chunk-2GRJ4B5K-BBWhz2x0.js} +1 -1
  44. package/dist/web/assets/{chunk-2Q5K7J3B-DW22WjpO.js → chunk-2Q5K7J3B-CfD68qFQ.js} +1 -1
  45. package/dist/web/assets/{chunk-5RXB4S5H-wtOenker.js → chunk-5RXB4S5H-DaznI8_V.js} +3 -3
  46. package/dist/web/assets/{chunk-5VM5RSS4-D1yDtOMG.js → chunk-5VM5RSS4-BYxWXCvw.js} +1 -1
  47. package/dist/web/assets/{chunk-6Q2QTUOP-Bk0pf9ER.js → chunk-6Q2QTUOP-C8zmDMoc.js} +3 -3
  48. package/dist/web/assets/{chunk-GF5L2VYU-DsdtNU_v.js → chunk-GF5L2VYU-BXGR_P0f.js} +1 -1
  49. package/dist/web/assets/{chunk-JWPE2WC7--SnlIo8Q.js → chunk-JWPE2WC7-DsHbIvH7.js} +1 -1
  50. package/dist/web/assets/{chunk-KBJHAD2P-DtWSCQMb.js → chunk-KBJHAD2P-B8G6QD3I.js} +1 -1
  51. package/dist/web/assets/{chunk-RYQCIY6F-Du4c_cV1.js → chunk-RYQCIY6F-B1rujkgY.js} +1 -1
  52. package/dist/web/assets/{chunk-XXDRQBXY-DZ8cNm58.js → chunk-XXDRQBXY-hjvfwopv.js} +1 -1
  53. package/dist/web/assets/{clarity-BHOwM8T6.js → clarity-BspLniIr.js} +1 -1
  54. package/dist/web/assets/classDiagram-JCYQIIEL-CRBj8GMD.js +1 -0
  55. package/dist/web/assets/classDiagram-v2-OCEON4UE-CRBj8GMD.js +1 -0
  56. package/dist/web/assets/{clojure-DxSadP1t.js → clojure-TcMZRJXX.js} +1 -1
  57. package/dist/web/assets/{cmake-DbXoA79R.js → cmake-Cq1xYuce.js} +1 -1
  58. package/dist/web/assets/{cobol-PTqiYgYu.js → cobol-DQNJTdu9.js} +1 -1
  59. package/dist/web/assets/{codeowners-Bp6g37R7.js → codeowners-CtwIM3TN.js} +1 -1
  60. package/dist/web/assets/{codeql-sacFqUAJ.js → codeql-Dfnujan1.js} +1 -1
  61. package/dist/web/assets/{coffee-dyiR41kL.js → coffee-CvgfVqck.js} +1 -1
  62. package/dist/web/assets/{common-lisp-C7gG9l05.js → common-lisp-DdDwuCTO.js} +1 -1
  63. package/dist/web/assets/{coq-Dsg_Bt_b.js → coq-xi22SHg_.js} +1 -1
  64. package/dist/web/assets/{cose-bilkent-JH36ORCC-9Wf3tO4_.js → cose-bilkent-JH36ORCC-D4S1nlYR.js} +1 -1
  65. package/dist/web/assets/{cpp-BksuvNSY.js → cpp-CZnLxZIX.js} +1 -1
  66. package/dist/web/assets/{crystal-DtDmRg-F.js → crystal-DtOJ9C4F.js} +1 -1
  67. package/dist/web/assets/{csharp-D9R-vmeu.js → csharp-D5GhjuXM.js} +1 -1
  68. package/dist/web/assets/{css-BPhBrDlE.js → css-DsSsXWQB.js} +1 -1
  69. package/dist/web/assets/{csv-B0qRVHPH.js → csv-CXMJgpSL.js} +1 -1
  70. package/dist/web/assets/{cue-DtFQj3wx.js → cue-usmCabPr.js} +1 -1
  71. package/dist/web/assets/{cynefin-VYW2F7L2-DR-DJAgB.js → cynefin-VYW2F7L2-DtN8m_GE.js} +1 -1
  72. package/dist/web/assets/{cynefinDiagram-MW4NZA55-BN8dtb3y.js → cynefinDiagram-MW4NZA55-Dkk-H0Nw.js} +2 -2
  73. package/dist/web/assets/{cypher-m2LEI-9-.js → cypher-CrL00TIU.js} +1 -1
  74. package/dist/web/assets/{d-BoXegm-a.js → d-CFhQIz9L.js} +1 -1
  75. package/dist/web/assets/{dagre-VZM6K2ZE-bEGuwESr.js → dagre-VZM6K2ZE-BSkCOa-Z.js} +1 -1
  76. package/dist/web/assets/dark-plus-DLU5INA3.js +1 -0
  77. package/dist/web/assets/{dart-B9wLZaAG.js → dart-DMtosjLs.js} +1 -1
  78. package/dist/web/assets/{dax-ClGRhx96.js → dax-vckHzldx.js} +1 -1
  79. package/dist/web/assets/{desktop-DEIpsLCJ.js → desktop-B6eBibaS.js} +1 -1
  80. package/dist/web/assets/{diagram-7IWD3JNH-DY3RlWAl.js → diagram-7IWD3JNH-Bses1wzI.js} +3 -3
  81. package/dist/web/assets/{diagram-B4RE2ZJO-P-8DDSKD.js → diagram-B4RE2ZJO-BW7sntb1.js} +3 -3
  82. package/dist/web/assets/{diagram-LBJQPF4R-COyMwTD5.js → diagram-LBJQPF4R-DHzgX2HL.js} +2 -2
  83. package/dist/web/assets/{diagram-Q27KOJAE-C9-App7G.js → diagram-Q27KOJAE-mcXdgoK9.js} +1 -1
  84. package/dist/web/assets/{diagram-UB23O5K3-D5hjqgyv.js → diagram-UB23O5K3-BO5P9LAa.js} +1 -1
  85. package/dist/web/assets/{diff-BgYniUM_.js → diff-DSVZyKbn.js} +1 -1
  86. package/dist/web/assets/{docker-COcR7UxN.js → docker-CVy4PnLq.js} +1 -1
  87. package/dist/web/assets/{dotenv-BjQB5zDj.js → dotenv-Wk8gXVAW.js} +1 -1
  88. package/dist/web/assets/dracula-XcYHBZy6.js +1 -0
  89. package/dist/web/assets/dracula-soft-BPeX9gxW.js +1 -0
  90. package/dist/web/assets/{dream-maker-C-nORZOA.js → dream-maker-DSOBmQ4T.js} +1 -1
  91. package/dist/web/assets/{ebnfDiagram-BXEA7PRR-Cf_WxbBp.js → ebnfDiagram-BXEA7PRR-F0zOfsYe.js} +1 -1
  92. package/dist/web/assets/{edge-D5gP-w-T.js → edge-DV1oJ-z-.js} +1 -1
  93. package/dist/web/assets/{elixir-CLiX3zqd.js → elixir-BAy7E9hx.js} +1 -1
  94. package/dist/web/assets/{elm-CmHSxxaM.js → elm-DI0HhLqI.js} +1 -1
  95. package/dist/web/assets/{emacs-lisp-BX77sIaO.js → emacs-lisp-CNyc7xnE.js} +1 -1
  96. package/dist/web/assets/{erDiagram-JOGREHBK-BLpPP0gJ.js → erDiagram-JOGREHBK-aOYH_ZnE.js} +5 -5
  97. package/dist/web/assets/{erb-BYTLMnw6.js → erb-C2MyKaut.js} +1 -1
  98. package/dist/web/assets/{erlang-B-DoSBHF.js → erlang-qdDNB3kS.js} +1 -1
  99. package/dist/web/assets/everforest-dark-WOub3wle.js +1 -0
  100. package/dist/web/assets/everforest-light-DCUg8VH8.js +1 -0
  101. package/dist/web/assets/{fennel-bCA53EVm.js → fennel-C169Wmtk.js} +1 -1
  102. package/dist/web/assets/{fish-w-ucz2PV.js → fish-DdzwuySR.js} +1 -1
  103. package/dist/web/assets/{flowDiagram-UKHOOZJN-M3Qk_Suq.js → flowDiagram-UKHOOZJN-DmtkMJ60.js} +10 -10
  104. package/dist/web/assets/{fluent-Dayu4EKP.js → fluent-e88iTpwM.js} +1 -1
  105. package/dist/web/assets/{fortran-fixed-form-TqA4NnZg.js → fortran-fixed-form-DOoUYCKo.js} +1 -1
  106. package/dist/web/assets/{fortran-free-form-DKXYxT9g.js → fortran-free-form-entkArVT.js} +1 -1
  107. package/dist/web/assets/{fsharp-XplgxFYe.js → fsharp-BnQYn4eh.js} +1 -1
  108. package/dist/web/assets/{ganttDiagram-PKOTCBZU-CngEKyD4.js → ganttDiagram-PKOTCBZU-BFy8QpeS.js} +1 -1
  109. package/dist/web/assets/{gdresource-BHYsBjWJ.js → gdresource-BBYl1svN.js} +1 -1
  110. package/dist/web/assets/{gdscript-DfxzS6Rs.js → gdscript-CN9EyWwI.js} +1 -1
  111. package/dist/web/assets/{gdshader-SKMF96pI.js → gdshader-Bs2FnG4i.js} +1 -1
  112. package/dist/web/assets/{genie-ajMbGru0.js → genie-LZ41QQzG.js} +1 -1
  113. package/dist/web/assets/{gherkin--30QC5Em.js → gherkin-DdFu5Ka3.js} +1 -1
  114. package/dist/web/assets/{git-commit-i4q6IMui.js → git-commit-C_Fd7mZn.js} +1 -1
  115. package/dist/web/assets/{git-rebase-B-v9cOL2.js → git-rebase-AtJUntN1.js} +1 -1
  116. package/dist/web/assets/{gitGraphDiagram-DS77QQ5N-DWTBtgDc.js → gitGraphDiagram-DS77QQ5N-CjbCeQfE.js} +7 -7
  117. package/dist/web/assets/github-dark-BQV5ugrc.js +1 -0
  118. package/dist/web/assets/github-dark-default-DLWDM7FH.js +1 -0
  119. package/dist/web/assets/github-dark-dimmed-D1FmiR_p.js +1 -0
  120. package/dist/web/assets/github-dark-high-contrast-BilLoi0o.js +1 -0
  121. package/dist/web/assets/github-light-Rcb2q3L5.js +1 -0
  122. package/dist/web/assets/github-light-default-CQ75esMw.js +1 -0
  123. package/dist/web/assets/github-light-high-contrast-CRF1wyLy.js +1 -0
  124. package/dist/web/assets/{gleam-B430Bg39.js → gleam-Cuj-GTDu.js} +1 -1
  125. package/dist/web/assets/{glimmer-js-D-cwc0-E.js → glimmer-js-CQwQIxfr.js} +1 -1
  126. package/dist/web/assets/{glimmer-ts-pgjy16dm.js → glimmer-ts-DzkKMqPs.js} +1 -1
  127. package/dist/web/assets/{glsl-DBO2IWDn.js → glsl-B5tAdZD8.js} +1 -1
  128. package/dist/web/assets/{gnuplot-CM8KxXT1.js → gnuplot-CZzrWc6Z.js} +1 -1
  129. package/dist/web/assets/{go-B1SYOhNW.js → go-CAz2AAgI.js} +1 -1
  130. package/dist/web/assets/{graphql-cDcHW_If.js → graphql-CsbcjAOe.js} +1 -1
  131. package/dist/web/assets/{groovy-DkBy-JyN.js → groovy-BHAqdEGB.js} +1 -1
  132. package/dist/web/assets/{hack-D1yCygmZ.js → hack-D_TkyKTp.js} +1 -1
  133. package/dist/web/assets/{haml-B2EZWmdv.js → haml-BsJe1mlH.js} +1 -1
  134. package/dist/web/assets/{handlebars-BQGss363.js → handlebars-DzHj2frt.js} +1 -1
  135. package/dist/web/assets/{haskell-BILxekzW.js → haskell-DBZShPJZ.js} +1 -1
  136. package/dist/web/assets/{haxe-C5wWYbrZ.js → haxe-BnfKaULB.js} +1 -1
  137. package/dist/web/assets/{hcl-HzYwdGDm.js → hcl-DG6oviwm.js} +1 -1
  138. package/dist/web/assets/highlightWorker-DJp1Ce5p.js +1 -0
  139. package/dist/web/assets/{hjson-T-Tgc4AT.js → hjson-9x786Szp.js} +1 -1
  140. package/dist/web/assets/{hlsl-ifBTmRxC.js → hlsl-BIjXBe-u.js} +1 -1
  141. package/dist/web/assets/houston-RHIKkNfR.js +1 -0
  142. package/dist/web/assets/{html-C2L_23MC.js → html-BfEhAfys.js} +1 -1
  143. package/dist/web/assets/{html-derivative-CSfWNPLT.js → html-derivative-khQn7CEq.js} +1 -1
  144. package/dist/web/assets/{http-FRrOvY1W.js → http-CkaUdRI6.js} +1 -1
  145. package/dist/web/assets/{hxml-TIA70rKU.js → hxml-DEEAihpB.js} +1 -1
  146. package/dist/web/assets/{hy-BMj5Y0dO.js → hy-BhTqYOi9.js} +1 -1
  147. package/dist/web/assets/{imba-bv_oIlVt.js → imba-BN90XemW.js} +1 -1
  148. package/dist/web/assets/index-Bbzvwn2R.js +507 -0
  149. package/dist/web/assets/index-POlrwDS0.css +1 -0
  150. package/dist/web/assets/index-t_Fnpkbb.js +12 -0
  151. package/dist/web/assets/{infoDiagram-6WML65LV-BStJJxiK.js → infoDiagram-6WML65LV-CGFvyGjJ.js} +1 -1
  152. package/dist/web/assets/{ini-BjABl1g7.js → ini-CNYq1Vbh.js} +1 -1
  153. package/dist/web/assets/{ishikawaDiagram-WSZJBQD7-CxPNb82h.js → ishikawaDiagram-WSZJBQD7-BbVf1sRd.js} +4 -4
  154. package/dist/web/assets/{java-xI-RfyKK.js → java-BOuFdpVK.js} +1 -1
  155. package/dist/web/assets/{javascript-ySlJ1b_l.js → javascript-C1WZzX5w.js} +1 -1
  156. package/dist/web/assets/jinja-CPlEC2oM.js +1 -0
  157. package/dist/web/assets/{jison-BqZprYcd.js → jison-_WNGvU9Z.js} +1 -1
  158. package/dist/web/assets/{journeyDiagram-NVQOT4AX-DI2FdYe2.js → journeyDiagram-NVQOT4AX-BNevDB-1.js} +1 -1
  159. package/dist/web/assets/{json-BQoSv7ci.js → json-CG0XIpmU.js} +1 -1
  160. package/dist/web/assets/{json5-w8dY5SsB.js → json5-wmRZLYNM.js} +1 -1
  161. package/dist/web/assets/{jsonc-TU54ms6u.js → jsonc-CJ5AVGwp.js} +1 -1
  162. package/dist/web/assets/{jsonl-DREVFZK8.js → jsonl-BZ9Ocixn.js} +1 -1
  163. package/dist/web/assets/{jsonnet-BfivnA6A.js → jsonnet-C1k_anf1.js} +1 -1
  164. package/dist/web/assets/{jssm-P4WzXJd0.js → jssm-DPmvb5V-.js} +1 -1
  165. package/dist/web/assets/{jsx-BAng5TT0.js → jsx-CKOz0mFu.js} +1 -1
  166. package/dist/web/assets/{julia-BBuGR-5E.js → julia-C-s-RWKo.js} +1 -1
  167. package/dist/web/assets/kanagawa-dragon-BOvIHJVT.js +1 -0
  168. package/dist/web/assets/kanagawa-lotus-Bwcd7Bvx.js +1 -0
  169. package/dist/web/assets/kanagawa-wave-0SAlpf0s.js +1 -0
  170. package/dist/web/assets/{kanban-definition-27J2QSJJ-DdrpquL_.js → kanban-definition-27J2QSJJ-BdmYFEey.js} +8 -8
  171. package/dist/web/assets/{kotlin-B5lbUyaz.js → kotlin-DCv8F5Dl.js} +1 -1
  172. package/dist/web/assets/{kusto-mebxcVVE.js → kusto-BzMM2K9O.js} +1 -1
  173. package/dist/web/assets/laserwave-si7wuSrt.js +1 -0
  174. package/dist/web/assets/{latex-C-cWTeAZ.js → latex-C6cEKF_r.js} +1 -1
  175. package/dist/web/assets/{lean-XBlWyCtg.js → lean-DlZiO-DR.js} +1 -1
  176. package/dist/web/assets/{less-BfCpw3nA.js → less-DPX9Q-iF.js} +1 -1
  177. package/dist/web/assets/light-plus-g_Fi9vkG.js +1 -0
  178. package/dist/web/assets/{linear-CClJBsYj.js → linear-DJt4yr3f.js} +1 -1
  179. package/dist/web/assets/{liquid-D3W5UaiH.js → liquid-BKbSSNuo.js} +1 -1
  180. package/dist/web/assets/{log-Cc5clBb7.js → log-DlRS7YvK.js} +1 -1
  181. package/dist/web/assets/{logo-IuBKFhSY.js → logo-VN04mNZ6.js} +1 -1
  182. package/dist/web/assets/{lua-CvWAzNxB.js → lua-DanyZPH_.js} +1 -1
  183. package/dist/web/assets/{luau-Du5NY7AG.js → luau-D93ufwnm.js} +1 -1
  184. package/dist/web/assets/{make-Bvotw-X0.js → make-CL8frSFP.js} +1 -1
  185. package/dist/web/assets/{markdown-UIAJJxZW.js → markdown-ByrpALUI.js} +1 -1
  186. package/dist/web/assets/{marko-z0MBrx5-.js → marko-DRSg2OrD.js} +1 -1
  187. package/dist/web/assets/material-theme-CIJ3cGaW.js +1 -0
  188. package/dist/web/assets/material-theme-darker-BWg3m1GB.js +1 -0
  189. package/dist/web/assets/material-theme-lighter-DR8HWMN7.js +1 -0
  190. package/dist/web/assets/material-theme-ocean-CZf9pk28.js +1 -0
  191. package/dist/web/assets/material-theme-palenight-BF01YeZy.js +1 -0
  192. package/dist/web/assets/{matlab-D9-PGadD.js → matlab-BHcro1_y.js} +1 -1
  193. package/dist/web/assets/{mdc-DB_EDNY_.js → mdc-CVTKaK9l.js} +1 -1
  194. package/dist/web/assets/{mdx-sdHcTMYB.js → mdx-CCTQUHLn.js} +1 -1
  195. package/dist/web/assets/{mermaid-Ci6OQyBP.js → mermaid-QUEeqX1B.js} +1 -1
  196. package/dist/web/assets/{mermaid.core-ONfBNVRk.js → mermaid.core-D-YupbG3.js} +6 -6
  197. package/dist/web/assets/min-dark-DhfaepVE.js +1 -0
  198. package/dist/web/assets/min-light-6xx0uMgm.js +1 -0
  199. package/dist/web/assets/{mindmap-definition-FAOFIHXS-CBQ7h3OO.js → mindmap-definition-FAOFIHXS-toscoNiP.js} +3 -3
  200. package/dist/web/assets/{mipsasm-BC5c_5Pe.js → mipsasm-q9X1oIjH.js} +1 -1
  201. package/dist/web/assets/{mojo-Tz6hzZYG.js → mojo-XjOS2v-j.js} +1 -1
  202. package/dist/web/assets/monokai-BodnsaDQ.js +1 -0
  203. package/dist/web/assets/{move-DB_GagMm.js → move-BX9wJykM.js} +1 -1
  204. package/dist/web/assets/{narrat-DLbgOhZU.js → narrat-BIAE-JNJ.js} +1 -1
  205. package/dist/web/assets/{nextflow-B0XVJmRM.js → nextflow-C3Zpn0NH.js} +1 -1
  206. package/dist/web/assets/{nginx-D_VnBJ67.js → nginx-K8be3xw8.js} +1 -1
  207. package/dist/web/assets/night-owl-EdP2Hztp.js +1 -0
  208. package/dist/web/assets/{nim-ZlGxZxc3.js → nim-BXrdZEnW.js} +1 -1
  209. package/dist/web/assets/{nix-shcSOmrb.js → nix-BJFrXuto.js} +1 -1
  210. package/dist/web/assets/nord-BAu0wM6c.js +1 -0
  211. package/dist/web/assets/{nushell-D4Tzg5kh.js → nushell-DEgT14oF.js} +1 -1
  212. package/dist/web/assets/{objective-c-Deuh7S70.js → objective-c-CYCTDIQP.js} +1 -1
  213. package/dist/web/assets/{objective-cpp-BUEGK8hf.js → objective-cpp-CAecc67Z.js} +1 -1
  214. package/dist/web/assets/{ocaml-BNioltXt.js → ocaml-Bsxv_Kxh.js} +1 -1
  215. package/dist/web/assets/one-dark-pro-BsKIA8GN.js +1 -0
  216. package/dist/web/assets/one-light-s-s--efq.js +1 -0
  217. package/dist/web/assets/{pascal-JqZropPD.js → pascal-BDJShKAI.js} +1 -1
  218. package/dist/web/assets/{pegDiagram-VL7TDLO6-Buje72cq.js → pegDiagram-VL7TDLO6-42qysB7S.js} +1 -1
  219. package/dist/web/assets/{perl-CHQXSrWU.js → perl-C2vWUXWi.js} +1 -1
  220. package/dist/web/assets/{php-B5ebYQev.js → php-DK-qQ6uC.js} +1 -1
  221. package/dist/web/assets/pieDiagram-7S7Q4E2Y-DeC8rSjm.js +39 -0
  222. package/dist/web/assets/plastic-CXnNNlFZ.js +1 -0
  223. package/dist/web/assets/{plsql-LKU2TuZ1.js → plsql-B9Xnh5qb.js} +1 -1
  224. package/dist/web/assets/{po-BFLt1xDp.js → po-DMjhmVbd.js} +1 -1
  225. package/dist/web/assets/poimandres-BrOVMvuE.js +1 -0
  226. package/dist/web/assets/{polar-DKykz6zU.js → polar-yYtLLj-r.js} +1 -1
  227. package/dist/web/assets/{postcss-B3ZDOciz.js → postcss-CJ1yqXqD.js} +1 -1
  228. package/dist/web/assets/{powerquery-CSHBycmS.js → powerquery-DC5VyW2x.js} +1 -1
  229. package/dist/web/assets/{powershell-BIEUsx6d.js → powershell-EzVS97da.js} +1 -1
  230. package/dist/web/assets/{prisma-B48N-Iqd.js → prisma-CHOHSoLN.js} +1 -1
  231. package/dist/web/assets/{prolog-BY-TUvya.js → prolog-DwYUCN91.js} +1 -1
  232. package/dist/web/assets/{proto-zocC4JxJ.js → proto-62gbbcWM.js} +1 -1
  233. package/dist/web/assets/{pug-CM9l7STV.js → pug-CkZF2A-M.js} +1 -1
  234. package/dist/web/assets/{puppet-Cza_XSSt.js → puppet-DBtA4RyP.js} +1 -1
  235. package/dist/web/assets/{purescript-Bg-kzb6g.js → purescript-CtNtlKn6.js} +1 -1
  236. package/dist/web/assets/{python-DhUJRlN_.js → python-Cmxmv3et.js} +1 -1
  237. package/dist/web/assets/{qml-D8XfuvdV.js → qml-Bp5NUdYD.js} +1 -1
  238. package/dist/web/assets/{qmldir-C8lEn-DE.js → qmldir-DXd9s5XC.js} +1 -1
  239. package/dist/web/assets/{qss-DhMKtDLN.js → qss-COHgjnFa.js} +1 -1
  240. package/dist/web/assets/{quadrantDiagram-CIZ2JOQS-DfjvRhwZ.js → quadrantDiagram-CIZ2JOQS-BsmBMVxR.js} +1 -1
  241. package/dist/web/assets/{r-CwjWoCRV.js → r-fEWCeYop.js} +1 -1
  242. package/dist/web/assets/{racket-CzouJOBO.js → racket-DeqZVGhA.js} +1 -1
  243. package/dist/web/assets/{railroadDiagram-AXF67PYL-CLC53cPk.js → railroadDiagram-AXF67PYL-CUEYoy5N.js} +1 -1
  244. package/dist/web/assets/{raku-B1bQXN8T.js → raku-2Ooz0w2a.js} +1 -1
  245. package/dist/web/assets/{razor-CNLDkMZG.js → razor-BSfiIh5a.js} +1 -1
  246. package/dist/web/assets/red-DR6ZwibK.js +1 -0
  247. package/dist/web/assets/{reg-5LuOXUq_.js → reg-B-dYDP6y.js} +1 -1
  248. package/dist/web/assets/{regexp-DWJ3fJO_.js → regexp-CZXE-O4g.js} +1 -1
  249. package/dist/web/assets/{rel-DJlmqQ1C.js → rel-CFc0GWi_.js} +1 -1
  250. package/dist/web/assets/{requirementDiagram-LRYGKXZP-Bh0xhzbL.js → requirementDiagram-LRYGKXZP-QOIVNSdo.js} +3 -3
  251. package/dist/web/assets/{riscv-QhoSD0DR.js → riscv-BXk1R-Oi.js} +1 -1
  252. package/dist/web/assets/rose-pine-BdvZjiDe.js +1 -0
  253. package/dist/web/assets/rose-pine-dawn-C0sjdsEC.js +1 -0
  254. package/dist/web/assets/rose-pine-moon-DYFWp_hT.js +1 -0
  255. package/dist/web/assets/{rst-4NLicBqY.js → rst-BLGbJK1H.js} +1 -1
  256. package/dist/web/assets/{ruby-DeZ3UC14.js → ruby-D2E7iJ0s.js} +1 -1
  257. package/dist/web/assets/{rust-Be6lgOlo.js → rust-BsY_F5cx.js} +1 -1
  258. package/dist/web/assets/{sankeyDiagram-W5VNT64P-KSOJwFOV.js → sankeyDiagram-W5VNT64P-BTvBZ4O6.js} +2 -2
  259. package/dist/web/assets/{sas-BmTFh92c.js → sas-DMLSfKIw.js} +1 -1
  260. package/dist/web/assets/{sass-BJ4Li9vH.js → sass-DmSX4WtY.js} +1 -1
  261. package/dist/web/assets/{scala-DQVVAn-B.js → scala-DYeJBAW8.js} +1 -1
  262. package/dist/web/assets/{scheme-BJGe-b2p.js → scheme-CCAsyj2s.js} +1 -1
  263. package/dist/web/assets/{scss-C31hgJw-.js → scss-0gJUc9a6.js} +1 -1
  264. package/dist/web/assets/{sdbl-BLhTXw86.js → sdbl-BxOweiR9.js} +1 -1
  265. package/dist/web/assets/{sequenceDiagram-SI44F4Z6-Brj5mw1M.js → sequenceDiagram-SI44F4Z6-PgaCw-bZ.js} +4 -4
  266. package/dist/web/assets/{shaderlab-B7qAK45m.js → shaderlab-CbagduOQ.js} +1 -1
  267. package/dist/web/assets/{shellscript-atvbtKCR.js → shellscript-D3bMYZAJ.js} +1 -1
  268. package/dist/web/assets/{shellsession-C_rIy8kc.js → shellsession-BPnHQqN9.js} +1 -1
  269. package/dist/web/assets/{sizeCapture-X5ZJPWSS-CH05wdHR.js → sizeCapture-X5ZJPWSS-xVBXwmWY.js} +1 -1
  270. package/dist/web/assets/slack-dark-CWRQmTmo.js +1 -0
  271. package/dist/web/assets/slack-ochin-DO_ok7XK.js +1 -0
  272. package/dist/web/assets/{smalltalk-DkLiglaE.js → smalltalk-BMwf8jcw.js} +1 -1
  273. package/dist/web/assets/snazzy-light-B5llO_gK.js +1 -0
  274. package/dist/web/assets/solarized-dark-G9yBjKj_.js +1 -0
  275. package/dist/web/assets/solarized-light-DeSzljQz.js +1 -0
  276. package/dist/web/assets/{solidity-C1w2a3ep.js → solidity-BxZpkxtV.js} +1 -1
  277. package/dist/web/assets/{soy-C-lX7w71.js → soy-BtgE62v-.js} +1 -1
  278. package/dist/web/assets/{sparql-bYkjHRlG.js → sparql-_iLxUxfJ.js} +1 -1
  279. package/dist/web/assets/{splunk-Cf8iN4DR.js → splunk-CDXNg1TZ.js} +1 -1
  280. package/dist/web/assets/{sql-COK4E0Yg.js → sql-DWijR-2F.js} +1 -1
  281. package/dist/web/assets/{ssh-config-BknIz3MU.js → ssh-config-D_LcGZIn.js} +1 -1
  282. package/dist/web/assets/{stata-DorPZHa4.js → stata-4mZtT6ij.js} +1 -1
  283. package/dist/web/assets/stateDiagram-OKZ733FA-BWvlFx8p.js +1 -0
  284. package/dist/web/assets/stateDiagram-v2-UEYNNEHI-CWroHbLn.js +1 -0
  285. package/dist/web/assets/{stylus-BeQkCIfX.js → stylus-DrmVbdhX.js} +1 -1
  286. package/dist/web/assets/{svelte-MSaWC3Je.js → svelte-ka6mjOzI.js} +1 -1
  287. package/dist/web/assets/{swift-BSxZ-RaX.js → swift-DkIjBhB-.js} +1 -1
  288. package/dist/web/assets/{swimlanes-SLNWSIFB-ELf6gJKu.js → swimlanes-SLNWSIFB-B6SREfpi.js} +2 -2
  289. package/dist/web/assets/swimlanesDiagram-ULZ7WXOC-B7_kKLQV.js +8 -0
  290. package/dist/web/assets/synthwave-84-DRVv-_m_.js +1 -0
  291. package/dist/web/assets/{system-verilog-C7L56vO4.js → system-verilog-CZLUg-Ri.js} +1 -1
  292. package/dist/web/assets/{systemd-CUnW07Te.js → systemd-BuJkd4yg.js} +1 -1
  293. package/dist/web/assets/{talonscript-C1XDQQGZ.js → talonscript-BMPZxVzx.js} +1 -1
  294. package/dist/web/assets/{tasl-CQjiPCtT.js → tasl-DVVRcRkA.js} +1 -1
  295. package/dist/web/assets/{tcl-DQ1-QYvQ.js → tcl-CA1YyYjY.js} +1 -1
  296. package/dist/web/assets/{templ-dwX3ZSMB.js → templ-bd1y3IAS.js} +1 -1
  297. package/dist/web/assets/{terraform-BbSNqyBO.js → terraform-Dz7t1_iL.js} +1 -1
  298. package/dist/web/assets/{tex-rYs2v40G.js → tex-Bvf-FxBj.js} +1 -1
  299. package/dist/web/assets/{timeline-definition-Z64GVDOM-DeaTiF-8.js → timeline-definition-Z64GVDOM-pOrViFO-.js} +3 -3
  300. package/dist/web/assets/tokyo-night-BpPvklgd.js +1 -0
  301. package/dist/web/assets/{toml-CB2ApiWb.js → toml-CghlGpNM.js} +1 -1
  302. package/dist/web/assets/ts-tags-27UfV0Yx.js +1 -0
  303. package/dist/web/assets/{tsv-B_m7g4N7.js → tsv-BFtm7NXx.js} +1 -1
  304. package/dist/web/assets/{tsx-B6W0miNI.js → tsx-CvLnrXoc.js} +1 -1
  305. package/dist/web/assets/{turtle-BMR_PYu6.js → turtle-CLj0zYni.js} +1 -1
  306. package/dist/web/assets/{twig-NC5TFiHP.js → twig-BEYz8PCZ.js} +1 -1
  307. package/dist/web/assets/{typescript-Dj6nwHGl.js → typescript-ChR4GJfA.js} +1 -1
  308. package/dist/web/assets/{typespec-BpWG_bgh.js → typespec-BsO-HK2h.js} +1 -1
  309. package/dist/web/assets/{typst-BVUVsWT6.js → typst-C9z_G1G3.js} +1 -1
  310. package/dist/web/assets/{v-CAQ2eGtk.js → v-UOp3PMQa.js} +1 -1
  311. package/dist/web/assets/{vala-BFOHcciG.js → vala-9t0Jazjg.js} +1 -1
  312. package/dist/web/assets/{vb-CdO5JTpU.js → vb-BjPFQNKy.js} +1 -1
  313. package/dist/web/assets/{vennDiagram-T6HMQDX7-B_pKKDwZ.js → vennDiagram-T6HMQDX7-DXbf3Z8V.js} +4 -4
  314. package/dist/web/assets/{verilog-CJaU5se_.js → verilog-3_G7wE-H.js} +1 -1
  315. package/dist/web/assets/vesper-DXVBNDlZ.js +1 -0
  316. package/dist/web/assets/{vhdl-DYoNaHQp.js → vhdl-KKKa5jXK.js} +1 -1
  317. package/dist/web/assets/{viml-m4uW47V2.js → viml-B0JfLneA.js} +1 -1
  318. package/dist/web/assets/vitesse-black-B_BYPdvp.js +1 -0
  319. package/dist/web/assets/vitesse-dark-DOSOf2Sz.js +1 -0
  320. package/dist/web/assets/vitesse-light-gUX51GpB.js +1 -0
  321. package/dist/web/assets/vue-Bvh4pc9M.js +1 -0
  322. package/dist/web/assets/{vue-html-xdeiXROB.js → vue-html-WOs3W6Bt.js} +1 -1
  323. package/dist/web/assets/{vyper-nyqBNV6O.js → vyper-CDIMwK9O.js} +1 -1
  324. package/dist/web/assets/{wardleyDiagram-T6FBY63Y-jLsFKv0C.js → wardleyDiagram-T6FBY63Y-BulJVCrV.js} +1 -1
  325. package/dist/web/assets/{wasm-C6j12Q_x.js → wasm-DnnIR_xd.js} +1 -1
  326. package/dist/web/assets/{wenyan-7A4Fjokl.js → wenyan-BKvj6Muf.js} +1 -1
  327. package/dist/web/assets/{wgsl-CB0Krxn9.js → wgsl-DQkNTPT4.js} +1 -1
  328. package/dist/web/assets/{wikitext-DCE3LsBG.js → wikitext-Bx_2Gb24.js} +1 -1
  329. package/dist/web/assets/{wolfram-C3FkfJm5.js → wolfram-CfjDyZMz.js} +1 -1
  330. package/dist/web/assets/{xml-e3z08dGr.js → xml-D2mywr7C.js} +1 -1
  331. package/dist/web/assets/{xsl-Dd0NUgwM.js → xsl-BazRubtb.js} +1 -1
  332. package/dist/web/assets/{xychartDiagram-ELKLHX3M-BA6zkq4L.js → xychartDiagram-ELKLHX3M-MI1zCRjW.js} +1 -1
  333. package/dist/web/assets/{yaml-CVw76BM1.js → yaml-CcrPW8Jr.js} +1 -1
  334. package/dist/web/assets/{zenscript-HnGAYVZD.js → zenscript-C_cgpljH.js} +1 -1
  335. package/dist/web/assets/{zig-BVz_zdnA.js → zig-2aGeTlGI.js} +1 -1
  336. package/dist/web/index.html +2 -2
  337. package/dist/web/sw.js +1 -1
  338. package/package.json +1 -1
  339. package/dist/web/assets/andromeeda-C3khCPGq.js +0 -1
  340. package/dist/web/assets/angular-ts-CKsD7JZE.js +0 -1
  341. package/dist/web/assets/arc-PxLvJSnb.js +0 -1
  342. package/dist/web/assets/architectureDiagram-T3A2C74G-C3W7640R.js +0 -36
  343. package/dist/web/assets/aurora-x-D-2ljcwZ.js +0 -1
  344. package/dist/web/assets/ayu-dark-Cv9koXgw.js +0 -1
  345. package/dist/web/assets/catppuccin-frappe-CD_QflpE.js +0 -1
  346. package/dist/web/assets/catppuccin-latte-DRW-0cLl.js +0 -1
  347. package/dist/web/assets/catppuccin-macchiato-C-_shW-Y.js +0 -1
  348. package/dist/web/assets/catppuccin-mocha-LGGdnPYs.js +0 -1
  349. package/dist/web/assets/channel-BIucJZnb.js +0 -1
  350. package/dist/web/assets/classDiagram-JCYQIIEL-BGlLKBgl.js +0 -1
  351. package/dist/web/assets/classDiagram-v2-OCEON4UE-BGlLKBgl.js +0 -1
  352. package/dist/web/assets/dark-plus-C3mMm8J8.js +0 -1
  353. package/dist/web/assets/dracula-BzJJZx-M.js +0 -1
  354. package/dist/web/assets/dracula-soft-BXkSAIEj.js +0 -1
  355. package/dist/web/assets/everforest-dark-BgDCqdQA.js +0 -1
  356. package/dist/web/assets/everforest-light-C8M2exoo.js +0 -1
  357. package/dist/web/assets/github-dark-DHJKELXO.js +0 -1
  358. package/dist/web/assets/github-dark-default-Cuk6v7N8.js +0 -1
  359. package/dist/web/assets/github-dark-dimmed-DH5Ifo-i.js +0 -1
  360. package/dist/web/assets/github-dark-high-contrast-E3gJ1_iC.js +0 -1
  361. package/dist/web/assets/github-light-DAi9KRSo.js +0 -1
  362. package/dist/web/assets/github-light-default-D7oLnXFd.js +0 -1
  363. package/dist/web/assets/github-light-high-contrast-BfjtVDDH.js +0 -1
  364. package/dist/web/assets/houston-DnULxvSX.js +0 -1
  365. package/dist/web/assets/index-BHQqzlI6.js +0 -13
  366. package/dist/web/assets/index-BL8L2yQv.css +0 -1
  367. package/dist/web/assets/index-ouQFVkG-.js +0 -342
  368. package/dist/web/assets/jinja-DGy0s7-h.js +0 -1
  369. package/dist/web/assets/kanagawa-dragon-CkXjmgJE.js +0 -1
  370. package/dist/web/assets/kanagawa-lotus-CfQXZHmo.js +0 -1
  371. package/dist/web/assets/kanagawa-wave-DWedfzmr.js +0 -1
  372. package/dist/web/assets/laserwave-DUszq2jm.js +0 -1
  373. package/dist/web/assets/light-plus-B7mTdjB0.js +0 -1
  374. package/dist/web/assets/material-theme-D5KoaKCx.js +0 -1
  375. package/dist/web/assets/material-theme-darker-BfHTSMKl.js +0 -1
  376. package/dist/web/assets/material-theme-lighter-B0m2ddpp.js +0 -1
  377. package/dist/web/assets/material-theme-ocean-CyktbL80.js +0 -1
  378. package/dist/web/assets/material-theme-palenight-Csfq5Kiy.js +0 -1
  379. package/dist/web/assets/min-dark-CafNBF8u.js +0 -1
  380. package/dist/web/assets/min-light-CTRr51gU.js +0 -1
  381. package/dist/web/assets/monokai-D4h5O-jR.js +0 -1
  382. package/dist/web/assets/night-owl-C39BiMTA.js +0 -1
  383. package/dist/web/assets/nord-Ddv68eIx.js +0 -1
  384. package/dist/web/assets/one-dark-pro-GBQ2dnAY.js +0 -1
  385. package/dist/web/assets/one-light-PoHY5YXO.js +0 -1
  386. package/dist/web/assets/pieDiagram-7S7Q4E2Y-DNQc-yHW.js +0 -39
  387. package/dist/web/assets/plastic-3e1v2bzS.js +0 -1
  388. package/dist/web/assets/poimandres-CS3Unz2-.js +0 -1
  389. package/dist/web/assets/red-bN70gL4F.js +0 -1
  390. package/dist/web/assets/rose-pine-CmCqftbK.js +0 -1
  391. package/dist/web/assets/rose-pine-dawn-Ds-gbosJ.js +0 -1
  392. package/dist/web/assets/rose-pine-moon-CjDtw9vr.js +0 -1
  393. package/dist/web/assets/slack-dark-BthQWCQV.js +0 -1
  394. package/dist/web/assets/slack-ochin-DqwNpetd.js +0 -1
  395. package/dist/web/assets/snazzy-light-Bw305WKR.js +0 -1
  396. package/dist/web/assets/solarized-dark-DXbdFlpD.js +0 -1
  397. package/dist/web/assets/solarized-light-L9t79GZl.js +0 -1
  398. package/dist/web/assets/stateDiagram-OKZ733FA-B9AFHzH-.js +0 -1
  399. package/dist/web/assets/stateDiagram-v2-UEYNNEHI-DXjkPo3z.js +0 -1
  400. package/dist/web/assets/swimlanesDiagram-ULZ7WXOC-uM2fmMPE.js +0 -8
  401. package/dist/web/assets/synthwave-84-CbfX1IO0.js +0 -1
  402. package/dist/web/assets/tokyo-night-DBQeEorK.js +0 -1
  403. package/dist/web/assets/ts-tags-CipyTH0X.js +0 -1
  404. package/dist/web/assets/vesper-BEBZ7ncR.js +0 -1
  405. package/dist/web/assets/vitesse-black-Bkuqu6BP.js +0 -1
  406. package/dist/web/assets/vitesse-dark-D0r3Knsf.js +0 -1
  407. package/dist/web/assets/vitesse-light-CVO1_9PV.js +0 -1
  408. package/dist/web/assets/vue-BuYVFjOK.js +0 -1
package/README.md CHANGED
@@ -22,6 +22,9 @@ exactly what it missed.
22
22
  calls with their status, input and output.
23
23
  - **File browser** for the session's workspace, previewing text, images and PDFs.
24
24
  HTML renders as a live page, sandboxed, and either can go fullscreen.
25
+ - **Widgets**: the agent calls a `show_widget` tool over MCP and the result renders
26
+ inline as a live page. Charts, simulations, animated diagrams. Sandboxed, and they
27
+ can send a message back.
25
28
  - **Observability** for credits spent, context-window usage and turn duration.
26
29
  - **PWA** that installs to a home screen and reconnects when the network returns.
27
30
 
@@ -53,11 +56,19 @@ systemd is optional. Without it, run `casper` from your own init system, under
53
56
  | `casper` | Run the server in the foreground |
54
57
  | `casper token` | Print the access token |
55
58
  | `casper reset-token [value]` | Set a new token and sign every device out |
56
- | `casper doctor` | Check kiro-cli, settings, data directory and web app |
59
+ | `casper doctor` | Check kiro-cli, settings, data directory, web app and MCP server |
60
+ | `casper mcp` | Run the widget MCP server on stdio (kiro spawns this for you) |
57
61
  | `casper service install` | Run as a systemd user service |
58
62
  | `casper service uninstall` | Remove the service, keeping settings and sessions |
59
63
  | `casper service status` | Show the service status |
60
64
 
65
+ The `casper` agent gets the widget tools automatically. To give them to another
66
+ agent, point it at the same server:
67
+
68
+ ```bash
69
+ kiro-cli mcp add --name casper --agent <agent> --command casper --args mcp
70
+ ```
71
+
61
72
  To update, `npm install -g @joeyshi12/casper@latest`. Re-run
62
73
  `casper service install` afterwards if you use the service: the unit records
63
74
  absolute node and package paths, and both move on upgrade. Your token and sessions
@@ -1,8 +1,17 @@
1
1
  {
2
2
  "name": "casper",
3
3
  "description": "Casper \u2014 a coding agent for developing from the chat web interface.",
4
- "prompt": "You are Casper, an AI coding agent. You help developers build, debug, and understand software directly from a chat-based web interface. Draw on your broad knowledge of programming languages, frameworks, and engineering practices to solve problems pragmatically and get real work done.\n\nCommunication\n- Be concise, direct, and friendly. Prioritize actionable guidance over narrating your work. Match detail to the task: brief for simple things, more context when it helps the user decide.\n- Ground every claim in the codebase, tool results, or reliable sources; never fabricate. State assumptions and label inferences.\n- Prioritize correctness over agreement. If something is wrong or risky, say so plainly and explain why.\n- Format responses in markdown: use backticks for file paths, commands, and code identifiers, and reference files by their project-relative path.\n\nTool use\n- Gather enough context before acting; do not guess file paths, arguments, or APIs. Read the relevant code before changing it.\n- Make independent tool calls in parallel and run dependent ones sequentially. Prefer the most direct tool for the job.\n- Do not re-read a file just to confirm a successful edit.\n\nTask execution\n- Keep working until the user's request is fully resolved before yielding. Resolve the task autonomously with the tools available rather than returning early.\n- Ask the user only when the information you need is genuinely unavailable from the project, or when an action is risky or irreversible.\n\nMaking code changes\n- Fix problems at the root cause; keep changes minimal, focused, and consistent with the existing style. Prefer dependencies and patterns already used in the project.\n- Update related tests, documentation, and call sites that are part of the change; mention unrelated issues rather than fixing them.\n- Do not commit or create branches unless asked. Never overwrite or revert work you did not make.\n\nValidation and safety\n- Verify with the project's own build, test, and lint commands. Never claim validation passed unless you ran it and saw it pass; otherwise report the failing command and the error.\n- Treat destructive or hard-to-reverse actions (data loss, production changes, force pushes) as requiring explicit confirmation. Never expose or hardcode secrets.\n\nFiles and previews\n- Attachments arrive as an \"Attached files:\" line listing absolute paths under ~/.casper/sessions/<id>/uploads. Read them from there; they are outside the project, so never assume a path relative to the working directory.\n- Do not write into ~/.casper. It is Casper's own state directory. Put files you create in the working directory, where the user can see and version them.\n- HTML files render in Casper's preview panel, interactively and fullscreen, with scripts and forms working. A self-contained .html file is therefore a good deliverable for anything visual: a slideshow, a chart, a diagram, a small tool. Images and PDFs preview too.\n- Write that HTML as one file. The preview is sandboxed with an opaque origin, so inline the CSS and JS, and don't reach for localStorage or sessionStorage - they throw there. Keep state in memory for the life of the page. Scripts from a CDN do load.\n- Say where you put a file the user is meant to look at, by path. Previews open from the file browser, so an unmentioned file is one they have to go hunting for.\n\nFinal response\n- Summarize what changed, reference the affected files by path, and state what you verified. Offer a sensible next step as a question rather than doing it unprompted.",
5
- "mcpServers": {},
4
+ "prompt": "You are Casper, an AI coding agent. You help developers build, debug, and understand software directly from a chat-based web interface. Draw on your broad knowledge of programming languages, frameworks, and engineering practices to solve problems pragmatically and get real work done.\n\nCommunication\n- Be concise, direct, and friendly. Prioritize actionable guidance over narrating your work. Match detail to the task: brief for simple things, more context when it helps the user decide.\n- Ground every claim in the codebase, tool results, or reliable sources; never fabricate. State assumptions and label inferences.\n- Prioritize correctness over agreement. If something is wrong or risky, say so plainly and explain why.\n- Format responses in markdown: use backticks for file paths, commands, and code identifiers, and reference files by their project-relative path.\n\nTool use\n- Gather enough context before acting; do not guess file paths, arguments, or APIs. Read the relevant code before changing it.\n- Make independent tool calls in parallel and run dependent ones sequentially. Prefer the most direct tool for the job.\n- Do not re-read a file just to confirm a successful edit.\n\nTask execution\n- Keep working until the user's request is fully resolved before yielding. Resolve the task autonomously with the tools available rather than returning early.\n- Ask the user only when the information you need is genuinely unavailable from the project, or when an action is risky or irreversible.\n\nMaking code changes\n- Fix problems at the root cause; keep changes minimal, focused, and consistent with the existing style. Prefer dependencies and patterns already used in the project.\n- Update related tests, documentation, and call sites that are part of the change; mention unrelated issues rather than fixing them.\n- Do not commit or create branches unless asked. Never overwrite or revert work you did not make.\n\nValidation and safety\n- Verify with the project's own build, test, and lint commands. Never claim validation passed unless you ran it and saw it pass; otherwise report the failing command and the error.\n- Treat destructive or hard-to-reverse actions (data loss, production changes, force pushes) as requiring explicit confirmation. Never expose or hardcode secrets.\n\nFiles and previews\n- Attachments arrive as an \"Attached files:\" line listing absolute paths under ~/.casper/sessions/<id>/uploads. Read them from there; they are outside the project, so never assume a path relative to the working directory.\n- Do not write into ~/.casper. It is Casper's own state directory. Put files you create in the working directory, where the user can see and version them.\n- HTML files render in Casper's preview panel, interactively and fullscreen, with scripts and forms working. A self-contained .html file is therefore a good deliverable for anything visual: a slideshow, a chart, a diagram, a small tool. Images and PDFs preview too.\n- Write that HTML as one file. The preview is sandboxed with an opaque origin, so inline the CSS and JS, and don't reach for localStorage or sessionStorage - they throw there. Keep state in memory for the life of the page. Scripts from a CDN do load.\n- Say where you put a file the user is meant to look at, by path. Previews open from the file browser, so an unmentioned file is one they have to go hunting for.\n\nWidgets\n- Casper renders interactive widgets inline in the conversation. When something is\nclearer shown than described - a chart, a simulation with controls, a diagram - call\nread_me once with the modules you need, then show_widget. read_me carries the design\nrules, so don't guess them, and don't mention that call to the user.\n- show_choice asks the user to pick from a few options, which they tap rather than\ntype. Use it wherever you would otherwise end a message asking which way to go.\n- The widget is the explanation. Don't restate its content in prose afterwards.\n- Widgets aren't saved anywhere. When the user wants something to keep, write an\n.html file instead.\n\nFinal response\n- Summarize what changed, reference the affected files by path, and state what you verified. Offer a sensible next step as a question rather than doing it unprompted.",
5
+ "mcpServers": {
6
+ "casper": {
7
+ "command": "casper",
8
+ "args": [
9
+ "mcp"
10
+ ],
11
+ "env": {},
12
+ "timeout": 10000
13
+ }
14
+ },
6
15
  "tools": [
7
16
  "*"
8
17
  ],
package/dist/mcp.js ADDED
@@ -0,0 +1,412 @@
1
+ // server/src/mcp/server.ts
2
+ import { createInterface } from "node:readline";
3
+
4
+ // server/src/mcp/guidelines.ts
5
+ var MODULES = ["interactive", "chart", "diagram", "art"];
6
+ var CORE = `# Widgets
7
+
8
+ A widget is a self-contained HTML fragment rendered inline in the conversation. No
9
+ doctype, html, head or body tag - just content. It is not a file and not a
10
+ deliverable; it is part of what you are saying. Reach for one when a picture
11
+ answers better than a paragraph.
12
+
13
+ ## Structure, in this order
14
+
15
+ 1. A short \`<style>\` block.
16
+ 2. The content markup.
17
+ 3. A single \`<script>\` at the end.
18
+
19
+ Order matters. Content renders as it arrives, and scripts run only once the message
20
+ is complete, so a widget whose script sits at the top looks inert until the end.
21
+
22
+ ## Hard rules
23
+
24
+ - No gradients, drop shadows or blur. They flash while content is patched in.
25
+ - No HTML comments. They cost tokens and buy nothing.
26
+ - Two font weights only: 400 and 500. Never 600 or 700.
27
+ - Sentence case for every label, heading and button. Never Title Case, never ALL CAPS.
28
+ - Never hardcode a colour that has a variable below.
29
+ - Size text in px, 11 to 15 for body and labels, up to 18 for a single heading.
30
+ - Keep the whole widget under 600px tall unless the content genuinely needs more.
31
+
32
+ ## The sandbox
33
+
34
+ The frame has an opaque origin. localStorage, sessionStorage, cookies and requests
35
+ to Casper all throw or fail. Hold state in a variable for the life of the page.
36
+
37
+ Libraries load from these hosts only: cdnjs.cloudflare.com, cdn.jsdelivr.net,
38
+ unpkg.com, esm.sh. Anything else is refused by the content security policy, as is
39
+ eval and new Function, so pick libraries that don't rely on them.
40
+
41
+ ## Theme
42
+
43
+ The background is transparent and the app's own variables are set. Use them:
44
+
45
+ --color-text-primary, --color-text-secondary
46
+ --color-background-primary, --color-background-secondary
47
+ --color-border
48
+ --color-accent, --color-accent-alt
49
+ --color-teal, --color-green, --color-yellow, --color-orange, --color-red
50
+ --font-body, --font-mono
51
+
52
+ Read them in script with getComputedStyle(document.documentElement).getPropertyValue.
53
+
54
+ ## Talking back
55
+
56
+ casper.sendPrompt(text) sends a message as if the user typed it, indistinguishable
57
+ in the transcript from one they wrote. Most widgets need no button at all. Add one
58
+ only when the obvious next step is a question they would otherwise type out by hand,
59
+ and never as decoration or to invite engagement. One at most.`;
60
+ var COLOR = `## Colour
61
+
62
+ Six accents are available: --color-accent (purple), --color-accent-alt (pink),
63
+ --color-teal, --color-green, --color-yellow, --color-orange, --color-red.
64
+
65
+ Colour encodes meaning, never sequence. If two series differ only by being
66
+ different series, use one accent at two opacities rather than two hues. Two or
67
+ three hues per widget is the ceiling.
68
+
69
+ Semantics people already expect: green for success or growth, red for error or
70
+ loss, orange for warning or pending, teal for neutral information, purple for the
71
+ primary subject.
72
+
73
+ For text on a filled background, use --color-background-primary as the text colour
74
+ rather than black. For a tint, use the accent at 12 to 20 percent opacity with the
75
+ accent itself as the border.`;
76
+ var UI = `## Components
77
+
78
+ Card: background --color-background-secondary, 1px --color-border, radius 10px,
79
+ padding 12px 14px. No shadow.
80
+
81
+ Metric: label 11px --color-text-secondary above a 20px 500-weight value. Group
82
+ metrics in a grid with 12px gaps, never a table.
83
+
84
+ Button: 12px text, background --color-background-secondary, 1px --color-border,
85
+ radius 6px, padding 5px 10px. On hover, move the border to --color-accent. Never
86
+ paint a button in an accent colour unless it is the single primary action.
87
+
88
+ Input and range: set accent-color to var(--color-accent) and let the browser style
89
+ the rest.
90
+
91
+ Table: only for genuinely tabular data. 1px --color-border between rows, no
92
+ vertical rules, 12px text, numbers right-aligned in --font-mono.
93
+
94
+ Rows of key and value: a flex row with the label in --color-text-secondary and the
95
+ value in --font-mono, separated by a border-bottom on all but the last.`;
96
+ var CHARTS = `## Charts
97
+
98
+ Chart.js from cdn.jsdelivr.net is the default choice. Load it with a script tag
99
+ before your own script; it will have finished loading by the time your script runs,
100
+ so there's no need to poll for it.
101
+
102
+ Wrap every canvas in a div with position relative and an explicit height, and set
103
+ maintainAspectRatio to false. Without both, the canvas grows without bound.
104
+
105
+ Turn the built-in legend off (plugins.legend.display false) and write the legend as
106
+ HTML if it's needed - the built-in one ignores the theme.
107
+
108
+ Grid lines in --color-border at low opacity, ticks in --color-text-secondary, 11px.
109
+ Datasets take an accent colour with borderWidth 2 and no point markers unless
110
+ individual readings matter.
111
+
112
+ Format numbers so the sign leads: -$5M, never $-5M. Abbreviate above four digits
113
+ (12.4k, 3.1M). Percentages get one decimal at most.
114
+
115
+ Pick the form from the question: trend over time is a line, comparison across
116
+ categories is a horizontal bar when labels are words, composition is a stacked bar
117
+ rather than a pie unless there are three slices or fewer.`;
118
+ var SVG = `## SVG
119
+
120
+ Set viewBox and leave width and height off, so the drawing scales to the frame.
121
+ Compute the viewBox from the content bounds and add 8 units of padding on every
122
+ side; anything drawn outside is invisible and reviewers will not see the mistake.
123
+
124
+ Text width is the usual cause of overflow. At font-size 12 with the body font,
125
+ budget 6.2px per character for lowercase and 7.4px for uppercase, then size boxes
126
+ from the longest label rather than by eye.
127
+
128
+ Connector paths need fill="none" explicitly. SVG fills paths black by default, so a
129
+ curve without it renders as a filled blob.
130
+
131
+ Define arrowheads once in defs with a marker whose fill is context-stroke, so the
132
+ head inherits the line colour instead of needing one marker per colour.
133
+
134
+ Stroke widths: 1.5 for connectors, 2 for emphasis, 1 for gridlines. Never below 1.`;
135
+ var DIAGRAMS = `## Diagrams
136
+
137
+ Two mistakes account for most bad diagrams. First, arrows that cross boxes they
138
+ have nothing to do with: trace every arrow's straight path and if it passes through
139
+ a box, route it around or move the box. Second, boxes sized by guess rather than by
140
+ the longest label they contain.
141
+
142
+ Route on the verb, not the noun. "How does a request flow" wants a sequence, "what
143
+ are the parts" wants a structural diagram, "why is it slow" wants an annotated
144
+ before and after.
145
+
146
+ Budgets: at most four boxes across one tier, at most five words in a label, at most
147
+ three tiers deep. Beyond that, split into two diagrams or drop detail.
148
+
149
+ Label every arrow that isn't obvious, in 10px --color-text-secondary. An unlabelled
150
+ arrow asserts a relationship without saying which.
151
+
152
+ Lay out left to right for flow and top to bottom for hierarchy, and keep a single
153
+ consistent gap between tiers.`;
154
+ var ART = `## Illustration
155
+
156
+ Build from geometry: circles, rounded rectangles, and paths with two or three
157
+ control points. Detail beyond that reads as noise at conversation size.
158
+
159
+ Use flat fills from the palette with no more than three colours plus a background.
160
+ Depth comes from overlap and size, never from gradients or shadows.
161
+
162
+ Animate with CSS on transform and opacity only, 0.3s or slower, and only where the
163
+ motion carries meaning. Anything faster or busier is a distraction in a chat.
164
+
165
+ For anything representational, prefer a diagram with labels. An unlabelled drawing
166
+ of a concept is decoration.`;
167
+ var MODULE_SECTIONS = {
168
+ interactive: [UI, COLOR],
169
+ chart: [UI, COLOR, CHARTS],
170
+ diagram: [COLOR, SVG, DIAGRAMS],
171
+ art: [COLOR, SVG, ART]
172
+ };
173
+ function getGuidelines(modules) {
174
+ const parts = [CORE];
175
+ const seen = /* @__PURE__ */ new Set();
176
+ for (const mod of modules) {
177
+ const sections = MODULE_SECTIONS[mod];
178
+ if (!sections) continue;
179
+ for (const section of sections) {
180
+ if (seen.has(section)) continue;
181
+ seen.add(section);
182
+ parts.push(section);
183
+ }
184
+ }
185
+ return parts.join("\n\n");
186
+ }
187
+
188
+ // server/src/mcp/choice.ts
189
+ var MAX_OPTIONS = 6;
190
+ function validateChoice(data) {
191
+ if (typeof data !== "object" || data === null || Array.isArray(data)) {
192
+ return "arguments must be an object.";
193
+ }
194
+ const d = data;
195
+ if (typeof d.question !== "string" || !d.question.trim()) {
196
+ return "question is required: what you are asking the user to decide.";
197
+ }
198
+ if (!Array.isArray(d.options) || d.options.length < 2) {
199
+ return "at least two options are needed.";
200
+ }
201
+ if (d.options.length > MAX_OPTIONS) {
202
+ return `at most ${MAX_OPTIONS} options; ${d.options.length} is too many to tap through.`;
203
+ }
204
+ for (const [i, raw] of d.options.entries()) {
205
+ if (typeof raw !== "object" || raw === null) return `options[${i}] must be an object.`;
206
+ const o = raw;
207
+ if (typeof o.label !== "string" || !o.label.trim()) {
208
+ return `options[${i}].label is required and must be a short phrase.`;
209
+ }
210
+ if (o.prompt !== void 0 && typeof o.prompt !== "string") {
211
+ return `options[${i}].prompt must be a string when given.`;
212
+ }
213
+ if (o.detail !== void 0 && typeof o.detail !== "string") {
214
+ return `options[${i}].detail must be a string when given.`;
215
+ }
216
+ }
217
+ return null;
218
+ }
219
+
220
+ // server/src/mcp/protocol.ts
221
+ var DEFAULT_PROTOCOL_VERSION = "2025-06-18";
222
+ var SERVER_NAME = "casper-generative-ui";
223
+ var MAX_WIDGET_CHARS = 256 * 1024;
224
+ var TOOLS = [
225
+ {
226
+ name: "read_me",
227
+ title: "Widget design guidelines",
228
+ description: "Read the widget design guidelines. Call this once, before your first show_widget call, with the modules relevant to what you are about to build. Do not mention this call to the user.",
229
+ inputSchema: {
230
+ type: "object",
231
+ properties: {
232
+ modules: {
233
+ type: "array",
234
+ items: { type: "string", enum: [...MODULES] },
235
+ minItems: 1,
236
+ description: "interactive for controls, sketches and simulations, chart for data, diagram for structure and flow, art for illustration."
237
+ }
238
+ },
239
+ required: ["modules"]
240
+ }
241
+ },
242
+ {
243
+ name: "show_widget",
244
+ title: "Show widget",
245
+ description: "Render an interactive widget inline in the conversation. Pass an HTML fragment: no doctype, html or body tag. Style first, then content, then a single script last. Use this instead of describing something visual in prose.",
246
+ inputSchema: {
247
+ type: "object",
248
+ properties: {
249
+ i_have_seen_read_me: {
250
+ type: "boolean",
251
+ description: "True only if you have already called read_me in this conversation."
252
+ },
253
+ title: {
254
+ type: "string",
255
+ description: "Short snake_case identifier, e.g. compound_interest."
256
+ },
257
+ widget_code: {
258
+ type: "string",
259
+ description: "The HTML fragment to render."
260
+ }
261
+ },
262
+ required: ["i_have_seen_read_me", "title", "widget_code"]
263
+ }
264
+ },
265
+ {
266
+ name: "show_choice",
267
+ title: "Ask the user to choose",
268
+ description: "Ask the user to pick from a few options, which they tap instead of typing. Use it wherever you would otherwise end a message asking which of several ways to proceed.",
269
+ inputSchema: {
270
+ type: "object",
271
+ properties: {
272
+ question: { type: "string", description: "What they are deciding." },
273
+ options: {
274
+ type: "array",
275
+ minItems: 2,
276
+ maxItems: MAX_OPTIONS,
277
+ items: {
278
+ type: "object",
279
+ properties: {
280
+ label: { type: "string", description: "Short, tappable phrase." },
281
+ detail: { type: "string", description: "One line of context." },
282
+ prompt: {
283
+ type: "string",
284
+ description: "Message sent when tapped. Defaults to the label."
285
+ }
286
+ },
287
+ required: ["label"]
288
+ }
289
+ }
290
+ },
291
+ required: ["question", "options"]
292
+ }
293
+ }
294
+ ];
295
+ function ok(id, result) {
296
+ return { jsonrpc: "2.0", id, result };
297
+ }
298
+ function text(body, isError = false) {
299
+ return { content: [{ type: "text", text: body }], isError };
300
+ }
301
+ function callError(id, message) {
302
+ return ok(id, text(message, true));
303
+ }
304
+ function asStringArray(value) {
305
+ return Array.isArray(value) ? value.filter((v) => typeof v === "string") : [];
306
+ }
307
+ function handleReadMe(id, args) {
308
+ const modules = asStringArray(args.modules);
309
+ const known = modules.filter((m) => MODULES.includes(m));
310
+ if (known.length === 0) {
311
+ return callError(id, `Name at least one module: ${MODULES.join(", ")}.`);
312
+ }
313
+ return ok(id, text(getGuidelines(known)));
314
+ }
315
+ function handleShowWidget(id, args) {
316
+ if (args.i_have_seen_read_me !== true) {
317
+ return callError(id, "Call read_me first, then set i_have_seen_read_me to true.");
318
+ }
319
+ const title = typeof args.title === "string" ? args.title.trim() : "";
320
+ if (!title) return callError(id, "title is required: a short snake_case identifier.");
321
+ const code = typeof args.widget_code === "string" ? args.widget_code : "";
322
+ if (!code.trim()) return callError(id, "widget_code is required.");
323
+ if (code.length > MAX_WIDGET_CHARS) {
324
+ return callError(
325
+ id,
326
+ `widget_code is ${Math.round(code.length / 1024)} KB, over the ${MAX_WIDGET_CHARS / 1024} KB limit. Simplify it.`
327
+ );
328
+ }
329
+ if (/<(!doctype|html|head|body)\b/i.test(code)) {
330
+ return callError(id, "Pass a fragment, not a document: drop the doctype, html and body tags.");
331
+ }
332
+ return ok(id, text(`Widget "${title}" is on screen. Don't repeat its content in prose.`));
333
+ }
334
+ function handleChoice(id, args) {
335
+ const problem = validateChoice(args);
336
+ if (problem) return callError(id, problem);
337
+ return ok(id, text("Options are on screen. Wait for the user to pick one."));
338
+ }
339
+ function handleMessage(req, version) {
340
+ const id = req.id ?? null;
341
+ const method = req.method ?? "";
342
+ const params = req.params ?? {};
343
+ if (method.startsWith("notifications/")) return null;
344
+ switch (method) {
345
+ case "initialize": {
346
+ const asked = typeof params.protocolVersion === "string" ? params.protocolVersion : null;
347
+ return ok(id, {
348
+ protocolVersion: asked ?? DEFAULT_PROTOCOL_VERSION,
349
+ capabilities: { tools: { listChanged: false } },
350
+ serverInfo: { name: SERVER_NAME, version }
351
+ });
352
+ }
353
+ case "ping":
354
+ return ok(id, {});
355
+ case "tools/list":
356
+ return ok(id, { tools: TOOLS });
357
+ case "tools/call": {
358
+ const name = typeof params.name === "string" ? params.name : "";
359
+ const args = params.arguments ?? {};
360
+ if (name === "read_me") return handleReadMe(id, args);
361
+ if (name === "show_widget") return handleShowWidget(id, args);
362
+ if (name === "show_choice") return handleChoice(id, args);
363
+ return { jsonrpc: "2.0", id, error: { code: -32602, message: `Unknown tool: ${name}` } };
364
+ }
365
+ default:
366
+ if (id === null) return null;
367
+ return { jsonrpc: "2.0", id, error: { code: -32601, message: `Unknown method: ${method}` } };
368
+ }
369
+ }
370
+
371
+ // server/src/mcp/server.ts
372
+ var VERSION = true ? "0.8.0" : "dev";
373
+ function runMcpServer() {
374
+ const rl = createInterface({ input: process.stdin });
375
+ rl.on("line", (line) => {
376
+ const trimmed = line.trim();
377
+ if (!trimmed) return;
378
+ let req;
379
+ try {
380
+ req = JSON.parse(trimmed);
381
+ } catch {
382
+ process.stdout.write(
383
+ JSON.stringify({
384
+ jsonrpc: "2.0",
385
+ id: null,
386
+ error: { code: -32700, message: "Parse error" }
387
+ }) + "\n"
388
+ );
389
+ return;
390
+ }
391
+ try {
392
+ const res = handleMessage(req, VERSION);
393
+ if (res) process.stdout.write(JSON.stringify(res) + "\n");
394
+ } catch (err) {
395
+ process.stderr.write(`casper-mcp: ${err.message}
396
+ `);
397
+ if (req.id !== void 0 && req.id !== null) {
398
+ process.stdout.write(
399
+ JSON.stringify({
400
+ jsonrpc: "2.0",
401
+ id: req.id,
402
+ error: { code: -32603, message: "Internal error" }
403
+ }) + "\n"
404
+ );
405
+ }
406
+ }
407
+ });
408
+ rl.on("close", () => process.exit(0));
409
+ }
410
+
411
+ // server/src/mcp/index.ts
412
+ runMcpServer();