openwork-server 0.18.49 → 0.18.50

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 (684) hide show
  1. package/README.md +30 -0
  2. package/bin/openwork-server.mjs +3 -1
  3. package/dist/bin/openwork-server +2 -2
  4. package/dist/opencode-plugins/agent-instruction-compose.js +81 -0
  5. package/dist/opencode-plugins/gmail-attachment-fulfillment.js +199 -0
  6. package/dist/opencode-plugins/managed-policy-client.js +39 -0
  7. package/dist/opencode-plugins/managed-policy-next.js +13894 -0
  8. package/dist/opencode-plugins/managed-policy.js +100 -0
  9. package/dist/opencode-plugins/openwork-anthropic-adaptive-thinking.js +83 -0
  10. package/dist/opencode-plugins/openwork-anthropic-tool-schema.js +154 -0
  11. package/dist/opencode-plugins/openwork-capabilities-knowledge.js +13842 -0
  12. package/dist/opencode-plugins/openwork-chrome-devtools.js +13690 -0
  13. package/dist/opencode-plugins/openwork-extensions-preview-steering.js +295 -0
  14. package/dist/opencode-plugins/openwork-extensions-preview.js +16067 -0
  15. package/dist/opencode-plugins/openwork-gateway-quota-v2.js +13805 -0
  16. package/dist/opencode-plugins/openwork-gateway-quota.js +14130 -0
  17. package/dist/opencode-plugins/openwork-office-attachments.js +3008 -0
  18. package/dist/opencode-plugins/openwork-pdf-attachments.js +23811 -0
  19. package/dist/opencode-plugins/openwork-provider-adapters.js +292 -0
  20. package/dist/opencode-plugins/openwork-spreadsheets.js +16448 -0
  21. package/dist/opencode-plugins/openwork-title-recovery.js +255 -0
  22. package/dist/opencode-plugins/openwork-ui-bridge.js +81 -0
  23. package/dist/opencode-plugins/pdfium.wasm +0 -0
  24. package/dist/opencode-plugins/session-activity.js +45 -0
  25. package/dist/opencode-plugins/workspace-file-identity.js +162 -0
  26. package/package.json +1 -1
  27. package/web/apple-touch-icon.png +0 -0
  28. package/web/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  29. package/web/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  30. package/web/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  31. package/web/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  32. package/web/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  33. package/web/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  34. package/web/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  35. package/web/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  36. package/web/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  37. package/web/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  38. package/web/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  39. package/web/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  40. package/web/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  41. package/web/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  42. package/web/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  43. package/web/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  44. package/web/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  45. package/web/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  46. package/web/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  47. package/web/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  48. package/web/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  49. package/web/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  50. package/web/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  51. package/web/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  52. package/web/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  53. package/web/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  54. package/web/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  55. package/web/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  56. package/web/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  57. package/web/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  58. package/web/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  59. package/web/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  60. package/web/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  61. package/web/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  62. package/web/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  63. package/web/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  64. package/web/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  65. package/web/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  66. package/web/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  67. package/web/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  68. package/web/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  69. package/web/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  70. package/web/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  71. package/web/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  72. package/web/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  73. package/web/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  74. package/web/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  75. package/web/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  76. package/web/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  77. package/web/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  78. package/web/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  79. package/web/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  80. package/web/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  81. package/web/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  82. package/web/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  83. package/web/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  84. package/web/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  85. package/web/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  86. package/web/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  87. package/web/assets/abap-BdImnpbu.js +1 -0
  88. package/web/assets/abnfDiagram-VCTEODGH-BgnyE_Jl.js +1 -0
  89. package/web/assets/actionscript-3-CoDkCxhg.js +1 -0
  90. package/web/assets/ada-bCR0ucgS.js +1 -0
  91. package/web/assets/andromeeda-C4gqWexZ.js +1 -0
  92. package/web/assets/angular-html-DA-rfuFy.js +1 -0
  93. package/web/assets/angular-ts-BrjP3tb8.js +1 -0
  94. package/web/assets/apache-Pmp26Uib.js +1 -0
  95. package/web/assets/apex-D8_7TLub.js +1 -0
  96. package/web/assets/apl-CORt7UWP.js +1 -0
  97. package/web/assets/app-CyCqD289.js +2581 -0
  98. package/web/assets/app-DOrYoP_4.css +32 -0
  99. package/web/assets/applescript-Co6uUVPk.js +1 -0
  100. package/web/assets/ara-BRHolxvo.js +1 -0
  101. package/web/assets/arc-jSgX49-e.js +1 -0
  102. package/web/assets/architectureDiagram-5GKGNRK7-DD_aGn4v.js +36 -0
  103. package/web/assets/artifact-code-view-DFIq0k-c.js +1906 -0
  104. package/web/assets/artifact-spreadsheet-editor-DFVCYrL7.js +11 -0
  105. package/web/assets/artifact-text-editor-DBngc6bx.js +34 -0
  106. package/web/assets/asciidoc-Ve4PFQV2.js +1 -0
  107. package/web/assets/asm-D_Q5rh1f.js +1 -0
  108. package/web/assets/astro-HNnZUWAn.js +1 -0
  109. package/web/assets/aurora-x-D-2ljcwZ.js +1 -0
  110. package/web/assets/awk-DMzUqQB5.js +1 -0
  111. package/web/assets/ayu-dark-DYE7WIF3.js +1 -0
  112. package/web/assets/ayu-light-BA47KaF1.js +1 -0
  113. package/web/assets/ayu-mirage-32ctXXKs.js +1 -0
  114. package/web/assets/ballerina-BFfxhgS-.js +1 -0
  115. package/web/assets/bat-BkioyH1T.js +1 -0
  116. package/web/assets/beancount-k_qm7-4y.js +1 -0
  117. package/web/assets/berry-uYugtg8r.js +1 -0
  118. package/web/assets/bibtex-CHM0blh-.js +1 -0
  119. package/web/assets/bicep-Bmn6On1c.js +1 -0
  120. package/web/assets/bird2-BIv1doCn.js +1 -0
  121. package/web/assets/blade-BjGOyj-B.js +1 -0
  122. package/web/assets/blockDiagram-OSKFZWR5-CBcZLjLp.js +129 -0
  123. package/web/assets/bsl-BO_Y6i37.js +1 -0
  124. package/web/assets/c-BIGW1oBm.js +1 -0
  125. package/web/assets/c3-eo99z4R2.js +1 -0
  126. package/web/assets/c4Diagram-7LVT6UL2-DMrhFCLj.js +38 -0
  127. package/web/assets/cadence-Bv_4Rxtq.js +1 -0
  128. package/web/assets/cairo-KRGpt6FW.js +1 -0
  129. package/web/assets/catppuccin-frappe-DFWUc33u.js +1 -0
  130. package/web/assets/catppuccin-latte-C9dUb6Cb.js +1 -0
  131. package/web/assets/catppuccin-macchiato-DQyhUUbL.js +1 -0
  132. package/web/assets/catppuccin-mocha-D87Tk5Gz.js +1 -0
  133. package/web/assets/channel-BE8JEd1U.js +1 -0
  134. package/web/assets/chunk-2Q5K7J3B-Ce1X-FJQ.js +1 -0
  135. package/web/assets/chunk-5VM5RSS4-BS48ZtVI.js +15 -0
  136. package/web/assets/chunk-F27PBJKO-COdFZJ-M.js +1 -0
  137. package/web/assets/chunk-HLEWEB6X-Cdw4ABX3.js +206 -0
  138. package/web/assets/chunk-JWPE2WC7-FVVDYZmE.js +1 -0
  139. package/web/assets/chunk-POPQ4Y6H-C7acdUF3.js +1 -0
  140. package/web/assets/chunk-SVP7TREG-BUun0UWD.js +88 -0
  141. package/web/assets/chunk-XXDRQBXY-DLgpJmat.js +1 -0
  142. package/web/assets/chunk-ZLD2IHE6-BdMQ5Cr0.js +231 -0
  143. package/web/assets/clarity-D53aC0YG.js +1 -0
  144. package/web/assets/classDiagram-CYGNFDIV-Cy8V0GW-.js +1 -0
  145. package/web/assets/classDiagram-v2-TLXNO2FR-Cy8V0GW-.js +1 -0
  146. package/web/assets/clojure-P80f7IUj.js +1 -0
  147. package/web/assets/cmake-D1j8_8rp.js +1 -0
  148. package/web/assets/cobol-nBiQ_Alo.js +1 -0
  149. package/web/assets/codeowners-Bp6g37R7.js +1 -0
  150. package/web/assets/codeql-DsOJ9woJ.js +1 -0
  151. package/web/assets/coffee-Ch7k5sss.js +1 -0
  152. package/web/assets/common-lisp-Cg-RD9OK.js +1 -0
  153. package/web/assets/coq-DkFqJrB1.js +1 -0
  154. package/web/assets/cose-bilkent-JH36ORCC-CqWy3Swy.js +1 -0
  155. package/web/assets/cpp-CofmeUqb.js +1 -0
  156. package/web/assets/crystal-DNxU26gB.js +1 -0
  157. package/web/assets/csharp-COcwbKMJ.js +1 -0
  158. package/web/assets/css-CLj8gQPS.js +1 -0
  159. package/web/assets/csv-fuZLfV_i.js +1 -0
  160. package/web/assets/cue-D82EKSYY.js +1 -0
  161. package/web/assets/cynefin-OW5HDTMX-DslesE5Y.js +178 -0
  162. package/web/assets/cynefinDiagram-5FMLGOSQ-B54uZJn_.js +62 -0
  163. package/web/assets/cypher-COkxafJQ.js +1 -0
  164. package/web/assets/cytoscape.esm-CNiYdHpY.js +331 -0
  165. package/web/assets/d-85-TOEBH.js +1 -0
  166. package/web/assets/dagre-OS7QT2EB-Bkahh4gZ.js +4 -0
  167. package/web/assets/dark-plus-C3mMm8J8.js +1 -0
  168. package/web/assets/dart-bE4Kk8sk.js +1 -0
  169. package/web/assets/dax-CEL-wOlO.js +1 -0
  170. package/web/assets/defaultLocale-DX6XiGOO.js +1 -0
  171. package/web/assets/desktop-BmXAJ9_W.js +1 -0
  172. package/web/assets/diagram-S7CK7UJ4-CXQl7SfF.js +30 -0
  173. package/web/assets/diagram-UQ7AKVKN-BA0V8tjK.js +41 -0
  174. package/web/assets/diagram-VSXAHHWV-DlcR8qeO.js +3 -0
  175. package/web/assets/diagram-VX7I27RA-ewm16zDI.js +24 -0
  176. package/web/assets/diagram-Z3DM3KII-Bc2lRc88.js +24 -0
  177. package/web/assets/diff-D97Zzqfu.js +1 -0
  178. package/web/assets/docker-BcOcwvcX.js +1 -0
  179. package/web/assets/dotenv-Da5cRb03.js +1 -0
  180. package/web/assets/dracula-BzJJZx-M.js +1 -0
  181. package/web/assets/dracula-soft-BXkSAIEj.js +1 -0
  182. package/web/assets/dream-maker-BtqSS_iP.js +1 -0
  183. package/web/assets/ebnfDiagram-PWID7BFC-JwCaf6cT.js +1 -0
  184. package/web/assets/edge-FbVlp4U3.js +1 -0
  185. package/web/assets/elixir-CkH2-t6x.js +1 -0
  186. package/web/assets/elm-DbKCFpqz.js +1 -0
  187. package/web/assets/emacs-lisp-CXvaQtF9.js +1 -0
  188. package/web/assets/erDiagram-2YWLMYGG-DOqO-9Yf.js +99 -0
  189. package/web/assets/erb-BYCe7drp.js +1 -0
  190. package/web/assets/erlang-DsQrWhSR.js +1 -0
  191. package/web/assets/everforest-dark-BgDCqdQA.js +1 -0
  192. package/web/assets/everforest-light-C8M2exoo.js +1 -0
  193. package/web/assets/fennel-BYunw83y.js +1 -0
  194. package/web/assets/fish-BvzEVeQv.js +1 -0
  195. package/web/assets/flowDiagram-T62WH6J4-CCZxvIjW.js +168 -0
  196. package/web/assets/fluent-C4IJs8-o.js +1 -0
  197. package/web/assets/fortran-fixed-form-CkoXwp7k.js +1 -0
  198. package/web/assets/fortran-free-form-BxgE0vQu.js +1 -0
  199. package/web/assets/fsharp-CXgrBDvD.js +1 -0
  200. package/web/assets/ganttDiagram-EL5Y4UJY-BczG7RIu.js +292 -0
  201. package/web/assets/gdresource-BOOCDP_w.js +1 -0
  202. package/web/assets/gdscript-C5YyOfLZ.js +1 -0
  203. package/web/assets/gdshader-DkwncUOv.js +1 -0
  204. package/web/assets/geist-cyrillic-wght-normal-CHSlOQsW.woff2 +0 -0
  205. package/web/assets/geist-latin-ext-wght-normal-DMtmJ5ZE.woff2 +0 -0
  206. package/web/assets/geist-latin-wght-normal-Dm3htQBi.woff2 +0 -0
  207. package/web/assets/genie-D0YGMca9.js +1 -0
  208. package/web/assets/gherkin-DyxjwDmM.js +1 -0
  209. package/web/assets/git-commit-F4YmCXRG.js +1 -0
  210. package/web/assets/git-rebase-r7XF79zn.js +1 -0
  211. package/web/assets/gitGraphDiagram-WWUBYQGX-GOecDN3g.js +106 -0
  212. package/web/assets/github-dark-DHJKELXO.js +1 -0
  213. package/web/assets/github-dark-default-Cuk6v7N8.js +1 -0
  214. package/web/assets/github-dark-dimmed-DH5Ifo-i.js +1 -0
  215. package/web/assets/github-dark-high-contrast-E3gJ1_iC.js +1 -0
  216. package/web/assets/github-light-DAi9KRSo.js +1 -0
  217. package/web/assets/github-light-default-D7oLnXFd.js +1 -0
  218. package/web/assets/github-light-high-contrast-BfjtVDDH.js +1 -0
  219. package/web/assets/gleam-BspZqrRM.js +1 -0
  220. package/web/assets/glimmer-js-ByusRIyA.js +1 -0
  221. package/web/assets/glimmer-ts-BfAWNZQY.js +1 -0
  222. package/web/assets/glsl-DplSGwfg.js +1 -0
  223. package/web/assets/gn-n2N0HUVH.js +1 -0
  224. package/web/assets/gnuplot-DdkO51Og.js +1 -0
  225. package/web/assets/go-C27-OAKa.js +1 -0
  226. package/web/assets/graphql-ChdNCCLP.js +1 -0
  227. package/web/assets/groovy-gcz8RCvz.js +1 -0
  228. package/web/assets/gruvbox-dark-hard-CFHQjOhq.js +1 -0
  229. package/web/assets/gruvbox-dark-medium-GsRaNv29.js +1 -0
  230. package/web/assets/gruvbox-dark-soft-CVdnzihN.js +1 -0
  231. package/web/assets/gruvbox-light-hard-CH1njM8p.js +1 -0
  232. package/web/assets/gruvbox-light-medium-DRw_LuNl.js +1 -0
  233. package/web/assets/gruvbox-light-soft-hJgmCMqR.js +1 -0
  234. package/web/assets/hack-i7_Ulhet.js +1 -0
  235. package/web/assets/haml-D5jkg6IW.js +1 -0
  236. package/web/assets/handlebars-BpdQsYii.js +1 -0
  237. package/web/assets/haskell-Df6bDoY_.js +1 -0
  238. package/web/assets/haxe-CzTSHFRz.js +1 -0
  239. package/web/assets/hcl-BWvSN4gD.js +1 -0
  240. package/web/assets/hjson-D5-asLiD.js +1 -0
  241. package/web/assets/hlsl-D3lLCCz7.js +1 -0
  242. package/web/assets/horizon-BUw7H-hv.js +1 -0
  243. package/web/assets/horizon-bright-CUuTKBJd.js +1 -0
  244. package/web/assets/houston-DnULxvSX.js +1 -0
  245. package/web/assets/html-derivative-DlHx6ybY.js +1 -0
  246. package/web/assets/html-pp8916En.js +1 -0
  247. package/web/assets/http-jrhK8wxY.js +1 -0
  248. package/web/assets/hurl-irOxFIW8.js +1 -0
  249. package/web/assets/hxml-Bvhsp5Yf.js +1 -0
  250. package/web/assets/hy-DFXneXwc.js +1 -0
  251. package/web/assets/ibm-plex-sans-cyrillic-ext-wght-normal-d45eAU9y.woff2 +0 -0
  252. package/web/assets/ibm-plex-sans-cyrillic-wght-normal-BAAhND-U.woff2 +0 -0
  253. package/web/assets/ibm-plex-sans-greek-wght-normal-CmyJS8uq.woff2 +0 -0
  254. package/web/assets/ibm-plex-sans-latin-ext-wght-normal-CIII54If.woff2 +0 -0
  255. package/web/assets/ibm-plex-sans-latin-wght-normal-IvpUvPa2.woff2 +0 -0
  256. package/web/assets/ibm-plex-sans-vietnamese-wght-normal-Dg1JeJN0.woff2 +0 -0
  257. package/web/assets/imba-DGztddWO.js +1 -0
  258. package/web/assets/index-BZgplq0g.css +1 -0
  259. package/web/assets/index-_gYIQM_z.js +49 -0
  260. package/web/assets/infoDiagram-FKFFQAWI-BbgIVsQp.js +2 -0
  261. package/web/assets/ini-BEwlwnbL.js +1 -0
  262. package/web/assets/init-Gi6I4Gst.js +1 -0
  263. package/web/assets/ishikawaDiagram-5VMMS53U-xutQo5Ip.js +70 -0
  264. package/web/assets/java-CylS5w8V.js +1 -0
  265. package/web/assets/javascript-wDzz0qaB.js +1 -0
  266. package/web/assets/jinja-f2NsQr07.js +1 -0
  267. package/web/assets/jison-wvAkD_A8.js +1 -0
  268. package/web/assets/journeyDiagram-EYS64GPL-BIbzPGaa.js +139 -0
  269. package/web/assets/json-Cp-IABpG.js +1 -0
  270. package/web/assets/json5-C9tS-k6U.js +1 -0
  271. package/web/assets/jsonc-Des-eS-w.js +1 -0
  272. package/web/assets/jsonl-DcaNXYhu.js +1 -0
  273. package/web/assets/jsonnet-DFQXde-d.js +1 -0
  274. package/web/assets/jssm-C2t-YnRu.js +1 -0
  275. package/web/assets/jsx-g9-lgVsj.js +1 -0
  276. package/web/assets/julia-CxzCAyBv.js +1 -0
  277. package/web/assets/just-VxiPbLrw.js +1 -0
  278. package/web/assets/kanagawa-dragon-CkXjmgJE.js +1 -0
  279. package/web/assets/kanagawa-lotus-CfQXZHmo.js +1 -0
  280. package/web/assets/kanagawa-wave-DWedfzmr.js +1 -0
  281. package/web/assets/kanban-definition-UXKFOSKX-BCTiRzck.js +89 -0
  282. package/web/assets/katex-HP8lGamR.js +257 -0
  283. package/web/assets/kdl-DV7GczEv.js +1 -0
  284. package/web/assets/kotlin-BdnUsdx6.js +1 -0
  285. package/web/assets/kusto-wEQ09or8.js +1 -0
  286. package/web/assets/laserwave-DUszq2jm.js +1 -0
  287. package/web/assets/latex-CWtU0Tv5.js +1 -0
  288. package/web/assets/layout-Wpfi54TB.js +1 -0
  289. package/web/assets/lean-BZvkOJ9d.js +1 -0
  290. package/web/assets/less-B1dDrJ26.js +1 -0
  291. package/web/assets/light-plus-B7mTdjB0.js +1 -0
  292. package/web/assets/linear-DLJHPikh.js +1 -0
  293. package/web/assets/liquid-C0sCDyMI.js +1 -0
  294. package/web/assets/llvm-DjAJT7YJ.js +1 -0
  295. package/web/assets/log-2UxHyX5q.js +1 -0
  296. package/web/assets/logo-BtOb2qkB.js +1 -0
  297. package/web/assets/lua-BaeVxFsk.js +1 -0
  298. package/web/assets/luau-C-HG3fhB.js +1 -0
  299. package/web/assets/make-CHLpvVh8.js +1 -0
  300. package/web/assets/markdown-Cvjx9yec.js +1 -0
  301. package/web/assets/marko-DjSrsDqO.js +1 -0
  302. package/web/assets/material-theme-D5KoaKCx.js +1 -0
  303. package/web/assets/material-theme-darker-BfHTSMKl.js +1 -0
  304. package/web/assets/material-theme-lighter-B0m2ddpp.js +1 -0
  305. package/web/assets/material-theme-ocean-CyktbL80.js +1 -0
  306. package/web/assets/material-theme-palenight-Csfq5Kiy.js +1 -0
  307. package/web/assets/matlab-D7o27uSR.js +1 -0
  308. package/web/assets/mdc-DTYItulj.js +1 -0
  309. package/web/assets/mdx-Cmh6b_Ma.js +1 -0
  310. package/web/assets/mermaid-mWjccvbQ.js +1 -0
  311. package/web/assets/mermaid.core-CDRJkis7.js +310 -0
  312. package/web/assets/min-dark-CafNBF8u.js +1 -0
  313. package/web/assets/min-light-CTRr51gU.js +1 -0
  314. package/web/assets/mindmap-definition-THT77NOG-DtphSFs_.js +96 -0
  315. package/web/assets/mipsasm-CKIfxQSi.js +1 -0
  316. package/web/assets/mojo-rZm6bMo-.js +1 -0
  317. package/web/assets/monokai-D4h5O-jR.js +1 -0
  318. package/web/assets/moonbit-_H4v1dQx.js +1 -0
  319. package/web/assets/move-IF9eRakj.js +1 -0
  320. package/web/assets/narrat-DRg8JJMk.js +1 -0
  321. package/web/assets/nextflow-C-mBbutL.js +1 -0
  322. package/web/assets/nextflow-groovy-vE_lwT2v.js +1 -0
  323. package/web/assets/nginx-BpAMiNFr.js +1 -0
  324. package/web/assets/night-owl-C39BiMTA.js +1 -0
  325. package/web/assets/night-owl-light-CMTm3GFP.js +1 -0
  326. package/web/assets/nim-BIad80T-.js +1 -0
  327. package/web/assets/nix-CwoSXNpI.js +1 -0
  328. package/web/assets/nord-Ddv68eIx.js +1 -0
  329. package/web/assets/nushell-Cz2AlsmD.js +1 -0
  330. package/web/assets/objective-c-DXmwc3jG.js +1 -0
  331. package/web/assets/objective-cpp-CLxacb5B.js +1 -0
  332. package/web/assets/ocaml-C0hk2d4L.js +1 -0
  333. package/web/assets/odin-BBf5iR-q.js +1 -0
  334. package/web/assets/one-dark-pro-DVMEJ2y_.js +1 -0
  335. package/web/assets/one-light-C3Wv6jpd.js +1 -0
  336. package/web/assets/openscad-C4EeE6gA.js +1 -0
  337. package/web/assets/ordinal-Cboi1Yqb.js +1 -0
  338. package/web/assets/overlay-zA9qjYXH.js +1 -0
  339. package/web/assets/pascal-D93ZcfNL.js +1 -0
  340. package/web/assets/pegDiagram-XKGWAZYB-CzbjpqK7.js +1 -0
  341. package/web/assets/perl-NvoQZIq0.js +1 -0
  342. package/web/assets/php-R6g_5hLQ.js +1 -0
  343. package/web/assets/pieDiagram-E7YTZNPT-tjxtWWT7.js +39 -0
  344. package/web/assets/pierre-dark-CyvmCCZW.js +1 -0
  345. package/web/assets/pierre-dark-protanopia-deuteranopia-Rgc0TwpF.js +1 -0
  346. package/web/assets/pierre-dark-soft-BHGpRqa4.js +1 -0
  347. package/web/assets/pierre-dark-tritanopia-Beq2gCRQ.js +1 -0
  348. package/web/assets/pierre-dark-vibrant-BWBVywrn.js +1 -0
  349. package/web/assets/pierre-light-480U9XYS.js +1 -0
  350. package/web/assets/pierre-light-protanopia-deuteranopia-CaVOBURG.js +1 -0
  351. package/web/assets/pierre-light-soft-CVdyfjmI.js +1 -0
  352. package/web/assets/pierre-light-tritanopia-B4_gpKOM.js +1 -0
  353. package/web/assets/pierre-light-vibrant-DdTDNdfJ.js +1 -0
  354. package/web/assets/pkl-u5AG7uiY.js +1 -0
  355. package/web/assets/plastic-3e1v2bzS.js +1 -0
  356. package/web/assets/plsql-ChMvpjG-.js +1 -0
  357. package/web/assets/po-BTJTHyun.js +1 -0
  358. package/web/assets/poimandres-CS3Unz2-.js +1 -0
  359. package/web/assets/polar-C0HS_06l.js +1 -0
  360. package/web/assets/postcss-CXtECtnM.js +1 -0
  361. package/web/assets/powerquery-CEu0bR-o.js +1 -0
  362. package/web/assets/powershell-Dpen1YoG.js +1 -0
  363. package/web/assets/prisma-Dd19v3D-.js +1 -0
  364. package/web/assets/prolog-CbFg5uaA.js +1 -0
  365. package/web/assets/proto-C7zT0LnQ.js +1 -0
  366. package/web/assets/pug-DKIMFp6K.js +1 -0
  367. package/web/assets/puppet-BMWR74SV.js +1 -0
  368. package/web/assets/purescript-CklMAg4u.js +1 -0
  369. package/web/assets/python-B6aJPvgy.js +1 -0
  370. package/web/assets/qml-3beO22l8.js +1 -0
  371. package/web/assets/qmldir-C8lEn-DE.js +1 -0
  372. package/web/assets/qss-IeuSbFQv.js +1 -0
  373. package/web/assets/quadrantDiagram-AXDQQJYC-CFC1qey-.js +7 -0
  374. package/web/assets/r-Dspwwk_N.js +1 -0
  375. package/web/assets/racket-BqYA7rlc.js +1 -0
  376. package/web/assets/railroadDiagram-O6MQD6OU-73_BXhNP.js +1 -0
  377. package/web/assets/raku-DXvB9xmW.js +1 -0
  378. package/web/assets/razor-BDqjjVU7.js +1 -0
  379. package/web/assets/red-bN70gL4F.js +1 -0
  380. package/web/assets/reg-C-SQnVFl.js +1 -0
  381. package/web/assets/regexp-CDVJQ6XC.js +1 -0
  382. package/web/assets/rel-C3B-1QV4.js +1 -0
  383. package/web/assets/requirementDiagram-IS5BZ75X-B8i4BL2A.js +84 -0
  384. package/web/assets/riscv-BM1_JUlF.js +1 -0
  385. package/web/assets/ron-D8l8udqQ.js +1 -0
  386. package/web/assets/rose-pine-dawn-DHQR4-dF.js +1 -0
  387. package/web/assets/rose-pine-moon-D4_iv3hh.js +1 -0
  388. package/web/assets/rose-pine-qdsjHGoJ.js +1 -0
  389. package/web/assets/rosmsg-BJDFO7_C.js +1 -0
  390. package/web/assets/rst-CRjBmOyv.js +1 -0
  391. package/web/assets/ruby-Wjq7vjNf.js +1 -0
  392. package/web/assets/rust-B1yitclQ.js +1 -0
  393. package/web/assets/sankeyDiagram-P5KCCOFB-Dll4Naj0.js +40 -0
  394. package/web/assets/sas-cz2c8ADy.js +1 -0
  395. package/web/assets/sass-Cj5Yp3dK.js +1 -0
  396. package/web/assets/scala-C151Ov-r.js +1 -0
  397. package/web/assets/scheme-C98Dy4si.js +1 -0
  398. package/web/assets/scss-D5BDwBP9.js +1 -0
  399. package/web/assets/sdbl-DVxCFoDh.js +1 -0
  400. package/web/assets/sequenceDiagram-WJ2MYXX4-B8Rvjhb5.js +162 -0
  401. package/web/assets/shaderlab-Dg9Lc6iA.js +1 -0
  402. package/web/assets/shellscript-Yzrsuije.js +1 -0
  403. package/web/assets/shellsession-BADoaaVG.js +1 -0
  404. package/web/assets/sizeCapture-INFHLROL-h8YDF-c3.js +1 -0
  405. package/web/assets/slack-dark-BthQWCQV.js +1 -0
  406. package/web/assets/slack-ochin-DqwNpetd.js +1 -0
  407. package/web/assets/smalltalk-BERRCDM3.js +1 -0
  408. package/web/assets/snazzy-light-Bw305WKR.js +1 -0
  409. package/web/assets/solarized-dark-DXbdFlpD.js +1 -0
  410. package/web/assets/solarized-light-L9t79GZl.js +1 -0
  411. package/web/assets/solidity-rGO070M0.js +1 -0
  412. package/web/assets/soy-8wufbnw4.js +1 -0
  413. package/web/assets/sparql-rVzFXLq3.js +1 -0
  414. package/web/assets/splunk-BtCnVYZw.js +1 -0
  415. package/web/assets/sql-BLtJtn59.js +1 -0
  416. package/web/assets/ssh-config-_ykCGR6B.js +1 -0
  417. package/web/assets/stata-BH5u7GGu.js +1 -0
  418. package/web/assets/stateDiagram-XQSTLZYL-COorU6Ga.js +1 -0
  419. package/web/assets/stateDiagram-v2-IH3M54BS-BAu05WuT.js +1 -0
  420. package/web/assets/stylus-BEDo0Tqx.js +1 -0
  421. package/web/assets/surrealql-Bq5Q-fJD.js +1 -0
  422. package/web/assets/svelte-Cy7k_4gC.js +1 -0
  423. package/web/assets/swift-D82vCrfD.js +1 -0
  424. package/web/assets/swimlanes-V6O3JKXN-CAghInFw.js +1 -0
  425. package/web/assets/swimlanesDiagram-JKAHXJPX-CpJNl3pn.js +8 -0
  426. package/web/assets/synthwave-84-CbfX1IO0.js +1 -0
  427. package/web/assets/system-verilog-CnnmHF94.js +1 -0
  428. package/web/assets/systemd-4A_iFExJ.js +1 -0
  429. package/web/assets/talonscript-CkByrt1z.js +1 -0
  430. package/web/assets/tasl-QIJgUcNo.js +1 -0
  431. package/web/assets/tcl-dwOrl1Do.js +1 -0
  432. package/web/assets/templ-DhtptRzy.js +1 -0
  433. package/web/assets/terraform-BETggiCN.js +1 -0
  434. package/web/assets/tex-idrVyKtj.js +1 -0
  435. package/web/assets/timeline-definition-24CTP7MA-Dum2N-ex.js +120 -0
  436. package/web/assets/tokyo-night-hegEt444.js +1 -0
  437. package/web/assets/toml-vGWfd6FD.js +1 -0
  438. package/web/assets/ts-tags-DQrlYJgV.js +1 -0
  439. package/web/assets/tsv-B_m7g4N7.js +1 -0
  440. package/web/assets/tsx-COt5Ahok.js +1 -0
  441. package/web/assets/turtle-BsS91CYL.js +1 -0
  442. package/web/assets/twig-xg9kU7Mw.js +1 -0
  443. package/web/assets/typescript-BPQ3VLAy.js +1 -0
  444. package/web/assets/typespec-CAFt9gP4.js +1 -0
  445. package/web/assets/typst-DHCkPAjA.js +1 -0
  446. package/web/assets/v-BcVCzyr7.js +1 -0
  447. package/web/assets/vala-CsfeWuGM.js +1 -0
  448. package/web/assets/vb-D17OF-Vu.js +1 -0
  449. package/web/assets/vennDiagram-4TSXK5OY-D-JeJumX.js +34 -0
  450. package/web/assets/verilog-BQ8w6xss.js +1 -0
  451. package/web/assets/vesper-DU1UobuO.js +1 -0
  452. package/web/assets/vhdl-CeAyd5Ju.js +1 -0
  453. package/web/assets/viml-CJc9bBzg.js +1 -0
  454. package/web/assets/vitesse-black-Bkuqu6BP.js +1 -0
  455. package/web/assets/vitesse-dark-D0r3Knsf.js +1 -0
  456. package/web/assets/vitesse-light-CVO1_9PV.js +1 -0
  457. package/web/assets/vue-D2xRrEX4.js +1 -0
  458. package/web/assets/vue-html-AaS7Mt5G.js +1 -0
  459. package/web/assets/vue-vine-BoDAl6tE.js +1 -0
  460. package/web/assets/vyper-CDx5xZoG.js +1 -0
  461. package/web/assets/wardleyDiagram-VM6X3IG4-d99FKQIG.js +78 -0
  462. package/web/assets/wasm-CG6Dc4jp.js +1 -0
  463. package/web/assets/wasm-MzD3tlZU.js +1 -0
  464. package/web/assets/wenyan-BV7otONQ.js +1 -0
  465. package/web/assets/wgsl-Dx-B1_4e.js +1 -0
  466. package/web/assets/wikitext-BhOHFoWU.js +1 -0
  467. package/web/assets/wit-5i3qLPDT.js +1 -0
  468. package/web/assets/wolfram-lXgVvXCa.js +1 -0
  469. package/web/assets/workspace-file-tree-CAuhntUr.js +1278 -0
  470. package/web/assets/xml-sdJ4AIDG.js +1 -0
  471. package/web/assets/xsl-CtQFsRM5.js +1 -0
  472. package/web/assets/xychartDiagram-S5SC5T6Z-DdmevfkD.js +7 -0
  473. package/web/assets/yaml-Buea-lGh.js +1 -0
  474. package/web/assets/zenscript-DVFEvuxE.js +1 -0
  475. package/web/assets/zig-VOosw3JB.js +1 -0
  476. package/web/ext-context7.svg +1 -0
  477. package/web/ext-google-workspace.svg +6 -0
  478. package/web/ext-linear.svg +1 -0
  479. package/web/ext-notion.svg +1 -0
  480. package/web/ext-ollama.svg +1 -0
  481. package/web/ext-openai.svg +1 -0
  482. package/web/ext-sentry.svg +1 -0
  483. package/web/ext-stripe.svg +1 -0
  484. package/web/favicon-16x16.png +0 -0
  485. package/web/favicon-32x32.png +0 -0
  486. package/web/grain-art/extension/extension-001.png +0 -0
  487. package/web/grain-art/extension/extension-002.png +0 -0
  488. package/web/grain-art/extension/extension-003.png +0 -0
  489. package/web/grain-art/extension/extension-004.png +0 -0
  490. package/web/grain-art/extension/extension-005.png +0 -0
  491. package/web/grain-art/extension/extension-006.png +0 -0
  492. package/web/grain-art/extension/extension-007.png +0 -0
  493. package/web/grain-art/extension/extension-008.png +0 -0
  494. package/web/grain-art/extension/extension-009.png +0 -0
  495. package/web/grain-art/extension/extension-010.png +0 -0
  496. package/web/grain-art/extension/extension-011.png +0 -0
  497. package/web/grain-art/extension/extension-012.png +0 -0
  498. package/web/grain-art/extension/extension-013.png +0 -0
  499. package/web/grain-art/extension/extension-014.png +0 -0
  500. package/web/grain-art/extension/extension-015.png +0 -0
  501. package/web/grain-art/extension/extension-016.png +0 -0
  502. package/web/grain-art/extension/extension-017.png +0 -0
  503. package/web/grain-art/extension/extension-018.png +0 -0
  504. package/web/grain-art/extension/extension-019.png +0 -0
  505. package/web/grain-art/extension/extension-020.png +0 -0
  506. package/web/grain-art/extension/extension-021.png +0 -0
  507. package/web/grain-art/extension/extension-022.png +0 -0
  508. package/web/grain-art/extension/extension-023.png +0 -0
  509. package/web/grain-art/extension/extension-024.png +0 -0
  510. package/web/grain-art/extension/extension-025.png +0 -0
  511. package/web/grain-art/extension/extension-026.png +0 -0
  512. package/web/grain-art/extension/extension-027.png +0 -0
  513. package/web/grain-art/extension/extension-028.png +0 -0
  514. package/web/grain-art/extension/extension-029.png +0 -0
  515. package/web/grain-art/extension/extension-030.png +0 -0
  516. package/web/grain-art/extension/extension-031.png +0 -0
  517. package/web/grain-art/extension/extension-032.png +0 -0
  518. package/web/grain-art/fallback/fallback-001.png +0 -0
  519. package/web/grain-art/fallback/fallback-002.png +0 -0
  520. package/web/grain-art/fallback/fallback-003.png +0 -0
  521. package/web/grain-art/fallback/fallback-004.png +0 -0
  522. package/web/grain-art/fallback/fallback-005.png +0 -0
  523. package/web/grain-art/fallback/fallback-006.png +0 -0
  524. package/web/grain-art/fallback/fallback-007.png +0 -0
  525. package/web/grain-art/fallback/fallback-008.png +0 -0
  526. package/web/grain-art/fallback/fallback-009.png +0 -0
  527. package/web/grain-art/fallback/fallback-010.png +0 -0
  528. package/web/grain-art/fallback/fallback-011.png +0 -0
  529. package/web/grain-art/fallback/fallback-012.png +0 -0
  530. package/web/grain-art/fallback/fallback-013.png +0 -0
  531. package/web/grain-art/fallback/fallback-014.png +0 -0
  532. package/web/grain-art/fallback/fallback-015.png +0 -0
  533. package/web/grain-art/fallback/fallback-016.png +0 -0
  534. package/web/grain-art/fallback/fallback-017.png +0 -0
  535. package/web/grain-art/fallback/fallback-018.png +0 -0
  536. package/web/grain-art/fallback/fallback-019.png +0 -0
  537. package/web/grain-art/fallback/fallback-020.png +0 -0
  538. package/web/grain-art/fallback/fallback-021.png +0 -0
  539. package/web/grain-art/fallback/fallback-022.png +0 -0
  540. package/web/grain-art/fallback/fallback-023.png +0 -0
  541. package/web/grain-art/fallback/fallback-024.png +0 -0
  542. package/web/grain-art/fallback/fallback-025.png +0 -0
  543. package/web/grain-art/fallback/fallback-026.png +0 -0
  544. package/web/grain-art/fallback/fallback-027.png +0 -0
  545. package/web/grain-art/fallback/fallback-028.png +0 -0
  546. package/web/grain-art/fallback/fallback-029.png +0 -0
  547. package/web/grain-art/fallback/fallback-030.png +0 -0
  548. package/web/grain-art/fallback/fallback-031.png +0 -0
  549. package/web/grain-art/fallback/fallback-032.png +0 -0
  550. package/web/grain-art/mcps/mcps-001.png +0 -0
  551. package/web/grain-art/mcps/mcps-002.png +0 -0
  552. package/web/grain-art/mcps/mcps-003.png +0 -0
  553. package/web/grain-art/mcps/mcps-004.png +0 -0
  554. package/web/grain-art/mcps/mcps-005.png +0 -0
  555. package/web/grain-art/mcps/mcps-006.png +0 -0
  556. package/web/grain-art/mcps/mcps-007.png +0 -0
  557. package/web/grain-art/mcps/mcps-008.png +0 -0
  558. package/web/grain-art/mcps/mcps-009.png +0 -0
  559. package/web/grain-art/mcps/mcps-010.png +0 -0
  560. package/web/grain-art/mcps/mcps-011.png +0 -0
  561. package/web/grain-art/mcps/mcps-012.png +0 -0
  562. package/web/grain-art/mcps/mcps-013.png +0 -0
  563. package/web/grain-art/mcps/mcps-014.png +0 -0
  564. package/web/grain-art/mcps/mcps-015.png +0 -0
  565. package/web/grain-art/mcps/mcps-016.png +0 -0
  566. package/web/grain-art/mcps/mcps-017.png +0 -0
  567. package/web/grain-art/mcps/mcps-018.png +0 -0
  568. package/web/grain-art/mcps/mcps-019.png +0 -0
  569. package/web/grain-art/mcps/mcps-020.png +0 -0
  570. package/web/grain-art/mcps/mcps-021.png +0 -0
  571. package/web/grain-art/mcps/mcps-022.png +0 -0
  572. package/web/grain-art/mcps/mcps-023.png +0 -0
  573. package/web/grain-art/mcps/mcps-024.png +0 -0
  574. package/web/grain-art/mcps/mcps-025.png +0 -0
  575. package/web/grain-art/mcps/mcps-026.png +0 -0
  576. package/web/grain-art/mcps/mcps-027.png +0 -0
  577. package/web/grain-art/mcps/mcps-028.png +0 -0
  578. package/web/grain-art/mcps/mcps-029.png +0 -0
  579. package/web/grain-art/mcps/mcps-030.png +0 -0
  580. package/web/grain-art/mcps/mcps-031.png +0 -0
  581. package/web/grain-art/mcps/mcps-032.png +0 -0
  582. package/web/grain-art/plugins/plugins-001.png +0 -0
  583. package/web/grain-art/plugins/plugins-002.png +0 -0
  584. package/web/grain-art/plugins/plugins-003.png +0 -0
  585. package/web/grain-art/plugins/plugins-004.png +0 -0
  586. package/web/grain-art/plugins/plugins-005.png +0 -0
  587. package/web/grain-art/plugins/plugins-006.png +0 -0
  588. package/web/grain-art/plugins/plugins-007.png +0 -0
  589. package/web/grain-art/plugins/plugins-008.png +0 -0
  590. package/web/grain-art/plugins/plugins-009.png +0 -0
  591. package/web/grain-art/plugins/plugins-010.png +0 -0
  592. package/web/grain-art/plugins/plugins-011.png +0 -0
  593. package/web/grain-art/plugins/plugins-012.png +0 -0
  594. package/web/grain-art/plugins/plugins-013.png +0 -0
  595. package/web/grain-art/plugins/plugins-014.png +0 -0
  596. package/web/grain-art/plugins/plugins-015.png +0 -0
  597. package/web/grain-art/plugins/plugins-016.png +0 -0
  598. package/web/grain-art/plugins/plugins-017.png +0 -0
  599. package/web/grain-art/plugins/plugins-018.png +0 -0
  600. package/web/grain-art/plugins/plugins-019.png +0 -0
  601. package/web/grain-art/plugins/plugins-020.png +0 -0
  602. package/web/grain-art/plugins/plugins-021.png +0 -0
  603. package/web/grain-art/plugins/plugins-022.png +0 -0
  604. package/web/grain-art/plugins/plugins-023.png +0 -0
  605. package/web/grain-art/plugins/plugins-024.png +0 -0
  606. package/web/grain-art/plugins/plugins-025.png +0 -0
  607. package/web/grain-art/plugins/plugins-026.png +0 -0
  608. package/web/grain-art/plugins/plugins-027.png +0 -0
  609. package/web/grain-art/plugins/plugins-028.png +0 -0
  610. package/web/grain-art/plugins/plugins-029.png +0 -0
  611. package/web/grain-art/plugins/plugins-030.png +0 -0
  612. package/web/grain-art/plugins/plugins-031.png +0 -0
  613. package/web/grain-art/plugins/plugins-032.png +0 -0
  614. package/web/grain-art/skills/skills-001.png +0 -0
  615. package/web/grain-art/skills/skills-002.png +0 -0
  616. package/web/grain-art/skills/skills-003.png +0 -0
  617. package/web/grain-art/skills/skills-004.png +0 -0
  618. package/web/grain-art/skills/skills-005.png +0 -0
  619. package/web/grain-art/skills/skills-006.png +0 -0
  620. package/web/grain-art/skills/skills-007.png +0 -0
  621. package/web/grain-art/skills/skills-008.png +0 -0
  622. package/web/grain-art/skills/skills-009.png +0 -0
  623. package/web/grain-art/skills/skills-010.png +0 -0
  624. package/web/grain-art/skills/skills-011.png +0 -0
  625. package/web/grain-art/skills/skills-012.png +0 -0
  626. package/web/grain-art/skills/skills-013.png +0 -0
  627. package/web/grain-art/skills/skills-014.png +0 -0
  628. package/web/grain-art/skills/skills-015.png +0 -0
  629. package/web/grain-art/skills/skills-016.png +0 -0
  630. package/web/grain-art/skills/skills-017.png +0 -0
  631. package/web/grain-art/skills/skills-018.png +0 -0
  632. package/web/grain-art/skills/skills-019.png +0 -0
  633. package/web/grain-art/skills/skills-020.png +0 -0
  634. package/web/grain-art/skills/skills-021.png +0 -0
  635. package/web/grain-art/skills/skills-022.png +0 -0
  636. package/web/grain-art/skills/skills-023.png +0 -0
  637. package/web/grain-art/skills/skills-024.png +0 -0
  638. package/web/grain-art/skills/skills-025.png +0 -0
  639. package/web/grain-art/skills/skills-026.png +0 -0
  640. package/web/grain-art/skills/skills-027.png +0 -0
  641. package/web/grain-art/skills/skills-028.png +0 -0
  642. package/web/grain-art/skills/skills-029.png +0 -0
  643. package/web/grain-art/skills/skills-030.png +0 -0
  644. package/web/grain-art/skills/skills-031.png +0 -0
  645. package/web/grain-art/skills/skills-032.png +0 -0
  646. package/web/grain-art/workspaces/workspaces-001.png +0 -0
  647. package/web/grain-art/workspaces/workspaces-002.png +0 -0
  648. package/web/grain-art/workspaces/workspaces-003.png +0 -0
  649. package/web/grain-art/workspaces/workspaces-004.png +0 -0
  650. package/web/grain-art/workspaces/workspaces-005.png +0 -0
  651. package/web/grain-art/workspaces/workspaces-006.png +0 -0
  652. package/web/grain-art/workspaces/workspaces-007.png +0 -0
  653. package/web/grain-art/workspaces/workspaces-008.png +0 -0
  654. package/web/grain-art/workspaces/workspaces-009.png +0 -0
  655. package/web/grain-art/workspaces/workspaces-010.png +0 -0
  656. package/web/grain-art/workspaces/workspaces-011.png +0 -0
  657. package/web/grain-art/workspaces/workspaces-012.png +0 -0
  658. package/web/grain-art/workspaces/workspaces-013.png +0 -0
  659. package/web/grain-art/workspaces/workspaces-014.png +0 -0
  660. package/web/grain-art/workspaces/workspaces-015.png +0 -0
  661. package/web/grain-art/workspaces/workspaces-016.png +0 -0
  662. package/web/grain-art/workspaces/workspaces-017.png +0 -0
  663. package/web/grain-art/workspaces/workspaces-018.png +0 -0
  664. package/web/grain-art/workspaces/workspaces-019.png +0 -0
  665. package/web/grain-art/workspaces/workspaces-020.png +0 -0
  666. package/web/grain-art/workspaces/workspaces-021.png +0 -0
  667. package/web/grain-art/workspaces/workspaces-022.png +0 -0
  668. package/web/grain-art/workspaces/workspaces-023.png +0 -0
  669. package/web/grain-art/workspaces/workspaces-024.png +0 -0
  670. package/web/grain-art/workspaces/workspaces-025.png +0 -0
  671. package/web/grain-art/workspaces/workspaces-026.png +0 -0
  672. package/web/grain-art/workspaces/workspaces-027.png +0 -0
  673. package/web/grain-art/workspaces/workspaces-028.png +0 -0
  674. package/web/grain-art/workspaces/workspaces-029.png +0 -0
  675. package/web/grain-art/workspaces/workspaces-030.png +0 -0
  676. package/web/grain-art/workspaces/workspaces-031.png +0 -0
  677. package/web/grain-art/workspaces/workspaces-032.png +0 -0
  678. package/web/index.html +129 -0
  679. package/web/manifest.webmanifest +22 -0
  680. package/web/openwork-logo-square.svg +2 -0
  681. package/web/openwork-logo.svg +1 -0
  682. package/web/openwork-mark.svg +16 -0
  683. package/web/openwork-sidebar-mark.svg +17 -0
  684. package/web/overlay.html +29 -0
package/README.md CHANGED
@@ -11,6 +11,36 @@ openwork-server --workspace /path/to/workspace --approval auto
11
11
 
12
12
  `openwork-server` ships as a compiled binary, so Bun is not required at runtime.
13
13
 
14
+ ### Self-hosted web UI
15
+
16
+ ```bash
17
+ npm install -g openwork-server
18
+ cd /path/to/workspace
19
+ openwork-server web --open
20
+ ```
21
+
22
+ `openwork-server web` serves the OpenWork web UI and API from one origin and
23
+ runs a server-managed OpenCode engine. The npm package bundles the UI and the
24
+ OpenCode plugins; on first run it downloads the exact OpenCode version this
25
+ release was tested with into `~/.openwork/openwork-server/engines/` and reuses
26
+ it afterwards. Updating is `npm i -g openwork-server@latest`; the server prints
27
+ a hint on boot when a newer release exists (`OPENWORK_NO_UPDATE_CHECK=1` to
28
+ silence).
29
+
30
+ Defaults in `web` mode: bind `127.0.0.1`, approval `auto`, workspace = current
31
+ directory, and the browser is signed in automatically via a bootstrap token
32
+ (pass `--no-bootstrap-token` to require pasting the client token). Tokens are
33
+ persisted in `~/.openwork/openwork-server/web-tokens.json` so they survive
34
+ restarts; `--token`/`--host-token` or `OPENWORK_TOKEN`/`OPENWORK_HOST_TOKEN`
35
+ override them.
36
+
37
+ To reach it from other machines, keep the server on `127.0.0.1` and put a TLS
38
+ proxy in front (e.g. `tailscale serve --bg --https=8787 http://127.0.0.1:8787`).
39
+ Browsers require a secure context for the UI on any non-localhost origin.
40
+ Set `OPENWORK_OPENCODE_BIN` to use your own OpenCode install instead of the
41
+ managed download; `/health` reports both the pinned `opencodeVersion` and the
42
+ `opencodeInstalledVersion` actually running.
43
+
14
44
  Or from source:
15
45
 
16
46
  ```bash
@@ -14,7 +14,9 @@ const builtCli = fileURLToPath(new URL("./dist/cli.js", `${new URL("../", import
14
14
  const sourceCli = fileURLToPath(new URL("./src/cli.ts", `${new URL("../", import.meta.url)}`));
15
15
 
16
16
  function run(command, commandArgs) {
17
- const result = spawnSync(command, commandArgs, { stdio: "inherit" });
17
+ // Lets `openwork-server web` find the bundled web UI and plugins next to this launcher.
18
+ const env = { ...process.env, OPENWORK_PACKAGE_ROOT: process.env.OPENWORK_PACKAGE_ROOT ?? packageRoot };
19
+ const result = spawnSync(command, commandArgs, { stdio: "inherit", env });
18
20
  if (result.error) {
19
21
  if (result.error.code === "ENOENT") {
20
22
  console.error(`Missing runtime dependency: ${command}`);
@@ -1,4 +1,4 @@
1
1
  [diffend] Oversized file quarantined before diffing.
2
2
  name: package/dist/bin/openwork-server
3
- size: 107032735 bytes
4
- sha256: d43996d3c3e7323d649c0b7af8bf0850c2a3df53e80faa81f78d0bfd2f0f7cd3
3
+ size: 107054076 bytes
4
+ sha256: dcc228940a40da8e36e1b949c5d01041c0602c4c0185de6f1d8990e3bbdda1e0
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Kent-style instruction primitives for OpenWork system-prompt composition.
3
+ *
4
+ * create — build one named section
5
+ * combine — merge sections in order, one id wins (first non-empty)
6
+ * delete — drop a section by id
7
+ * expand — replace a section body with derived text when present
8
+ * compose — combine sections and return their prompt bodies
9
+ *
10
+ * Sections are the unit of overlap control: routing/tools/skills/session each
11
+ * own one id so transforms stop stacking contradictory brochure text.
12
+ */
13
+ export function createInstructionSection(id, body) {
14
+ return { id, body: body.trim() };
15
+ }
16
+ export function combineInstructionSections(...groups) {
17
+ const seen = new Set();
18
+ const combined = [];
19
+ for (const group of groups) {
20
+ if (!group)
21
+ continue;
22
+ const sections = Array.isArray(group) ? group : [group];
23
+ for (const section of sections) {
24
+ if (!section.body || seen.has(section.id))
25
+ continue;
26
+ seen.add(section.id);
27
+ combined.push(section);
28
+ }
29
+ }
30
+ return combined;
31
+ }
32
+ export function deleteInstructionSection(sections, id) {
33
+ return sections.filter((section) => section.id !== id);
34
+ }
35
+ export function expandInstructionSection(sections, id, expand) {
36
+ return sections.map((section) => (section.id === id
37
+ ? { ...section, body: expand(section.body).trim() }
38
+ : section)).filter((section) => section.body.length > 0);
39
+ }
40
+ export function composeAgentInstructions(...groups) {
41
+ const seen = new Set();
42
+ const instructions = [];
43
+ for (const group of groups) {
44
+ if (!group)
45
+ continue;
46
+ const sections = Array.isArray(group) ? group : [group];
47
+ for (const section of sections) {
48
+ if (seen.has(section.id))
49
+ continue;
50
+ const body = section.body;
51
+ if (!body)
52
+ continue;
53
+ seen.add(section.id);
54
+ instructions.push(body);
55
+ }
56
+ }
57
+ return instructions;
58
+ }
59
+ /**
60
+ * Extend the engine's system prompt in place from an
61
+ * `experimental.chat.system.transform` hook.
62
+ *
63
+ * OpenCode sends every entry of `system` as its own `role: "system"` message.
64
+ * Several chat templates behind OpenAI-compatible endpoints reject any system
65
+ * message after the first ("System message must be at the beginning."), so
66
+ * OpenWork folds its instructions into the existing entry instead of pushing a
67
+ * second one. The engine alone sends a single system message; this keeps that
68
+ * shape intact. Sections are separated by a blank line so each heading starts
69
+ * its own paragraph instead of trailing the previous sentence.
70
+ */
71
+ export function appendAgentInstructions(system, ...groups) {
72
+ const body = composeAgentInstructions(...groups).join("\n\n");
73
+ if (!body)
74
+ return;
75
+ const last = system.length - 1;
76
+ if (last < 0) {
77
+ system.push(body);
78
+ return;
79
+ }
80
+ system[last] = system[last] ? `${system[last]}\n\n${body}` : body;
81
+ }
@@ -0,0 +1,199 @@
1
+ import { z } from "zod";
2
+ const draftSchema = z.object({
3
+ to: z.string().trim().min(3).max(320),
4
+ cc: z.string().trim().min(3).max(1_000).optional(),
5
+ bcc: z.string().trim().min(3).max(1_000).optional(),
6
+ subject: z.string().trim().min(1).max(500),
7
+ body: z.string().min(1).max(50_000),
8
+ threadId: z.string().trim().min(1).max(512).optional(),
9
+ attachments: z.array(z.string().min(1).refine((path) => path.trim().length > 0 && !path.includes("\0"))).min(1).max(10),
10
+ }).strict().refine((draft) => !/^\s*(re|fwd?)\s*:/i.test(draft.subject) || !!draft.threadId);
11
+ const markerSchema = z.object({
12
+ ok: z.literal(false),
13
+ error: z.literal("file_input_requires_host"),
14
+ created: z.literal(false),
15
+ message: z.string(),
16
+ }).strict();
17
+ // Strip unexpected fields so neither inline bytes nor action descriptors can
18
+ // leak from a transport response into the model-visible draft receipt.
19
+ const receiptSchema = z.object({
20
+ ok: z.literal(true),
21
+ draftId: z.string().trim().min(1),
22
+ messageId: z.string().nullable().optional(),
23
+ draftUrl: z.string().nullable().optional(),
24
+ threadUrl: z.string().nullable().optional(),
25
+ to: z.string().optional(),
26
+ subject: z.string().optional(),
27
+ threadId: z.string().nullable().optional(),
28
+ quotedHistoryIncluded: z.boolean().optional(),
29
+ attachments: z.array(z.object({
30
+ filename: z.string(),
31
+ mimeType: z.string(),
32
+ size: z.number().int().nonnegative(),
33
+ })).optional(),
34
+ });
35
+ function isRecord(value) {
36
+ return typeof value === "object" && value !== null && !Array.isArray(value);
37
+ }
38
+ function normalizeJson(value) {
39
+ if (typeof value !== "string")
40
+ return value;
41
+ const text = value.trim();
42
+ if (!text.startsWith("{") && !text.startsWith("["))
43
+ return value;
44
+ try {
45
+ return JSON.parse(text);
46
+ }
47
+ catch {
48
+ return value;
49
+ }
50
+ }
51
+ const UNKNOWN_OUTCOME = "Gmail draft creation outcome unknown; verify drafts before retrying. Do not retry automatically or create a draft without attachments.";
52
+ const CANCELLED_BEFORE_UPLOAD = "Gmail attachment upload cancelled before dispatch; no draft created.";
53
+ const NATIVE_GMAIL = /^native:(google-workspace|emc_[A-Za-z0-9]+):postCapabilitiesGoogleWorkspaceGmailDrafts$/;
54
+ // These exact code/status pairs are returned before draft creation. In
55
+ // particular, never classify google_api_error, a 5xx, or a lost response here.
56
+ const LOCAL_NO_WRITE = new Set([
57
+ "invalid_payload:400", "file_not_found:404", "file_too_large:413", "files_too_large:413",
58
+ "cloud_not_connected:409", "cloud_endpoint_invalid:409", "gmail_host_unavailable:409",
59
+ "unauthorized:401", "forbidden:403", "gmail_attachment_cancelled:499",
60
+ ]);
61
+ const CLOUD_NO_WRITE = new Set([
62
+ "invalid_request:400", "invalid_request:413", "missing_thread_id:400",
63
+ "needs_connection:409", "unauthorized:401", "forbidden:403", "policy_blocked:403",
64
+ "missing_mcp_token:401", "invalid_mcp_token:401", "wrong_token_use:401", "wrong_mcp_resource:401",
65
+ "missing_mcp_principal:401", "mcp_grant_revoked:401", "mcp_session_required:401", "mcp_session_revoked:401",
66
+ "insufficient_mcp_scope:403", "mcp_membership_revoked:403",
67
+ ]);
68
+ function noWriteMessage(error) {
69
+ if (!isRecord(error) || typeof error.message !== "string")
70
+ return;
71
+ if (LOCAL_NO_WRITE.has(`${error.code}:${error.status}`))
72
+ return `${error.message} No draft created.`;
73
+ if (error.code === "cloud_upload_failed" && isRecord(error.details)
74
+ && CLOUD_NO_WRITE.has(`${error.details.upstreamCode}:${error.status}`)) {
75
+ return `${error.message} No draft created.`;
76
+ }
77
+ }
78
+ export function createGmailAttachmentFulfillment(dependencies, factoryContext = {}) {
79
+ // Retain invocation guards until disposal, including cancelled preflights.
80
+ // A later busy event must not revive a previous call's cancelled controller.
81
+ const calls = new Map();
82
+ const idleSessions = new Set();
83
+ let disposed = false;
84
+ function invocation(sessionID, callID) {
85
+ const key = JSON.stringify([sessionID, callID]);
86
+ const existing = calls.get(key);
87
+ if (existing)
88
+ return existing;
89
+ const call = { sessionID, controller: new AbortController(), attempted: false };
90
+ if (disposed || idleSessions.has(sessionID))
91
+ call.controller.abort();
92
+ calls.set(key, call);
93
+ return call;
94
+ }
95
+ const fulfill = async (input, output) => {
96
+ // OpenCode 1.18.18 McpCatalog.toolName preserves hyphens in server names.
97
+ if (!isRecord(input) || input.tool !== "openwork-cloud_execute_capability")
98
+ return;
99
+ if (!isRecord(input.args) || typeof input.args.name !== "string")
100
+ return;
101
+ const native = NATIVE_GMAIL.exec(input.args.name);
102
+ const connectionId = native?.[1];
103
+ if (!connectionId || !isRecord(output) || output.isError === true)
104
+ return;
105
+ // Only the whole native preflight payload is a marker, never embedded text
106
+ // or a nested descriptor from an external MCP. Conflicting projections fail closed.
107
+ if (!Array.isArray(output.content) || output.content.length !== 1)
108
+ return;
109
+ const part = output.content[0];
110
+ if (!isRecord(part) || part.type !== "text" || typeof part.text !== "string")
111
+ return;
112
+ if (!markerSchema.safeParse(normalizeJson(part.text)).success)
113
+ return;
114
+ if (output.structuredContent !== undefined && !markerSchema.safeParse(output.structuredContent).success)
115
+ return;
116
+ const draft = draftSchema.safeParse(normalizeJson(input.args.body));
117
+ if (!draft.success)
118
+ throw new Error("Invalid Gmail attachment draft arguments; no upload attempted.");
119
+ if (typeof input.sessionID !== "string" || !input.sessionID.trim()
120
+ || typeof input.callID !== "string" || !input.callID.trim()) {
121
+ throw new Error("Gmail attachment fulfillment requires invocation sessionID and callID; no upload attempted.");
122
+ }
123
+ const call = invocation(input.sessionID, input.callID);
124
+ if (call.attempted)
125
+ throw new Error(`Gmail attachment invocation already attempted. ${UNKNOWN_OUTCOME}`);
126
+ if (call.controller.signal.aborted)
127
+ throw new Error(CANCELLED_BEFORE_UPLOAD);
128
+ call.attempted = true;
129
+ const { attachments, ...fields } = draft.data;
130
+ let result;
131
+ try {
132
+ result = await dependencies.callExtension({
133
+ extensionId: "openwork-cloud-uploads",
134
+ action: "gmail_create_draft_with_attachments",
135
+ args: { ...fields, paths: attachments, connectionId },
136
+ context: { ...factoryContext, sessionId: input.sessionID, callId: input.callID },
137
+ }, call.controller.signal);
138
+ }
139
+ catch (error) {
140
+ const message = noWriteMessage(error);
141
+ if (message)
142
+ throw new Error(message);
143
+ // A lost response cannot prove that Gmail did not create the draft.
144
+ throw new Error(UNKNOWN_OUTCOME);
145
+ }
146
+ if (call.controller.signal.aborted)
147
+ throw new Error(UNKNOWN_OUTCOME);
148
+ if (isRecord(result) && result.ok === false) {
149
+ throw new Error(UNKNOWN_OUTCOME);
150
+ }
151
+ const receipt = receiptSchema.safeParse(result);
152
+ if (!receipt.success)
153
+ throw new Error(UNKNOWN_OUTCOME);
154
+ const text = JSON.stringify(receipt.data);
155
+ // The pinned engine projects content AFTER this hook, not output. Keep
156
+ // both consistent for consumers that already have a text projection.
157
+ output.content = [{ type: "text", text }];
158
+ output.structuredContent = receipt.data;
159
+ if ("output" in output)
160
+ output.output = text;
161
+ output.isError = false;
162
+ delete output._meta;
163
+ };
164
+ return Object.assign(fulfill, {
165
+ before: async (input, output) => {
166
+ if (!isRecord(input) || input.tool !== "openwork-cloud_execute_capability"
167
+ || typeof input.sessionID !== "string" || typeof input.callID !== "string"
168
+ || !isRecord(output) || !isRecord(output.args) || typeof output.args.name !== "string"
169
+ || !NATIVE_GMAIL.test(output.args.name))
170
+ return;
171
+ const body = normalizeJson(output.args.body);
172
+ if (isRecord(body) && Array.isArray(body.attachments))
173
+ invocation(input.sessionID, input.callID);
174
+ },
175
+ event: async (input) => {
176
+ // OpenCode 1.18.18 Runner.cancel -> onIdle -> SessionStatus.set;
177
+ // Plugin.event receives { event: { type, properties } }. No input.abort exists.
178
+ if (!isRecord(input) || !isRecord(input.event) || input.event.type !== "session.status")
179
+ return;
180
+ const props = input.event.properties;
181
+ if (!isRecord(props) || typeof props.sessionID !== "string" || !isRecord(props.status))
182
+ return;
183
+ if (props.status.type === "busy")
184
+ idleSessions.delete(props.sessionID);
185
+ if (props.status.type !== "idle")
186
+ return;
187
+ idleSessions.add(props.sessionID);
188
+ for (const call of calls.values()) {
189
+ if (call.sessionID === props.sessionID)
190
+ call.controller.abort();
191
+ }
192
+ },
193
+ dispose: async () => {
194
+ disposed = true;
195
+ for (const call of calls.values())
196
+ call.controller.abort();
197
+ },
198
+ });
199
+ }
@@ -0,0 +1,39 @@
1
+ function isRecord(value) {
2
+ return typeof value === "object" && value !== null && !Array.isArray(value);
3
+ }
4
+ function record(value) { return isRecord(value) ? value : {}; }
5
+ export async function checkManagedTool(tool, raw, evaluate = check) {
6
+ const input = record(raw);
7
+ let action;
8
+ if (tool === "bash" || tool === "shell")
9
+ action = "shell";
10
+ else if (["write", "edit", "apply_patch", "patch"].includes(tool))
11
+ action = "file_write";
12
+ else if (tool === "webfetch" || tool === "websearch")
13
+ action = tool;
14
+ else if (tool === "browser_navigate" || tool === "browser_open")
15
+ action = "browser";
16
+ else if (tool === "openwork_execute") {
17
+ if (input.id === "browser.open_url")
18
+ return evaluate("browser", record(input.args));
19
+ if (typeof input.id === "string" && /^(?:plugin|skill|mcp)\.(?:install|add|update|remove)/.test(input.id))
20
+ action = "extensions";
21
+ }
22
+ // Even read-only tools synchronize policy, so unknown identities cannot keep
23
+ // running with a previous member's loaded configuration.
24
+ await evaluate(action ?? "sync", input);
25
+ }
26
+ export async function check(action, input) {
27
+ const base = process.env.OPENWORK_SERVER_URL;
28
+ const token = process.env.OPENWORK_POLICY_TOKEN;
29
+ if (!base || !token)
30
+ throw new Error("OpenWork policy service is unavailable.");
31
+ const response = await fetch(`${base}/managed-policy/evaluate`, {
32
+ method: "POST", headers: { Authorization: `Bearer ${token}`, "Content-Type": "application/json" },
33
+ body: JSON.stringify({ action, input }), signal: AbortSignal.timeout(15_000),
34
+ });
35
+ if (!response.ok) {
36
+ const payload = record(await response.json());
37
+ throw new Error(typeof payload.message === "string" ? payload.message : "Your organization blocked this action.");
38
+ }
39
+ }