openwork-server 0.18.49 → 0.18.56
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +31 -1
- package/bin/openwork-server.mjs +28 -20
- package/bin/platform.mjs +28 -0
- package/dist/opencode-plugin-deps-1.18.30.tgz +0 -0
- package/dist/opencode-plugins/agent-instruction-compose.js +81 -0
- package/dist/opencode-plugins/gmail-attachment-fulfillment.js +199 -0
- package/dist/opencode-plugins/managed-policy-client.js +39 -0
- package/dist/opencode-plugins/managed-policy-next.js +13894 -0
- package/dist/opencode-plugins/managed-policy.js +100 -0
- package/dist/opencode-plugins/openwork-anthropic-adaptive-thinking.js +83 -0
- package/dist/opencode-plugins/openwork-anthropic-tool-schema.js +154 -0
- package/dist/opencode-plugins/openwork-capabilities-knowledge.js +13842 -0
- package/dist/opencode-plugins/openwork-chrome-devtools.js +13690 -0
- package/dist/opencode-plugins/openwork-context-v2.js +84 -0
- package/dist/opencode-plugins/openwork-extensions-preview-steering.js +295 -0
- package/dist/opencode-plugins/openwork-extensions-preview.js +16388 -0
- package/dist/opencode-plugins/openwork-gateway-quota-v2.js +13816 -0
- package/dist/opencode-plugins/openwork-gateway-quota.js +14141 -0
- package/dist/opencode-plugins/openwork-mcp-results-v2.js +154 -0
- package/dist/opencode-plugins/openwork-office-attachments.js +3013 -0
- package/dist/opencode-plugins/openwork-pdf-attachments.js +23811 -0
- package/dist/opencode-plugins/openwork-provider-adapters.js +292 -0
- package/dist/opencode-plugins/openwork-provider-filters-v2.js +69 -0
- package/dist/opencode-plugins/openwork-read-transport.js +2 -0
- package/dist/opencode-plugins/openwork-spreadsheets.js +16582 -0
- package/dist/opencode-plugins/openwork-title-recovery.js +255 -0
- package/dist/opencode-plugins/openwork-ui-bridge.js +81 -0
- package/dist/opencode-plugins/pdfium.wasm +0 -0
- package/dist/opencode-plugins/session-activity.js +45 -0
- package/dist/opencode-plugins/workspace-file-identity.js +162 -0
- package/dist/openwork-server.mjs +114735 -0
- package/dist/pdfium.wasm +0 -0
- package/package.json +7 -1
- package/web/apple-touch-icon.png +0 -0
- package/web/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- package/web/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- package/web/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- package/web/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- package/web/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- package/web/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- package/web/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- package/web/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- package/web/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- package/web/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- package/web/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- package/web/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- package/web/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- package/web/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- package/web/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- package/web/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- package/web/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- package/web/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- package/web/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- package/web/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- package/web/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- package/web/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- package/web/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- package/web/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- package/web/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- package/web/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- package/web/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- package/web/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- package/web/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- package/web/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- package/web/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- package/web/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- package/web/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- package/web/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- package/web/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- package/web/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- package/web/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- package/web/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- package/web/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- package/web/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- package/web/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- package/web/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- package/web/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- package/web/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- package/web/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- package/web/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- package/web/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- package/web/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- package/web/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- package/web/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- package/web/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- package/web/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- package/web/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- package/web/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- package/web/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- package/web/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- package/web/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- package/web/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- package/web/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- package/web/assets/abap-BdImnpbu.js +1 -0
- package/web/assets/abnfDiagram-VCTEODGH-Dr1YMfll.js +1 -0
- package/web/assets/actionscript-3-CoDkCxhg.js +1 -0
- package/web/assets/ada-bCR0ucgS.js +1 -0
- package/web/assets/andromeeda-C4gqWexZ.js +1 -0
- package/web/assets/angular-html-DA-rfuFy.js +1 -0
- package/web/assets/angular-ts-BrjP3tb8.js +1 -0
- package/web/assets/apache-Pmp26Uib.js +1 -0
- package/web/assets/apex-D8_7TLub.js +1 -0
- package/web/assets/apl-CORt7UWP.js +1 -0
- package/web/assets/app-D9Nvta88.js +2631 -0
- package/web/assets/app-DOrYoP_4.css +32 -0
- package/web/assets/applescript-Co6uUVPk.js +1 -0
- package/web/assets/ara-BRHolxvo.js +1 -0
- package/web/assets/arc-7SoIBvT7.js +1 -0
- package/web/assets/architectureDiagram-5GKGNRK7-BZwevfH9.js +36 -0
- package/web/assets/artifact-code-view-WLwX_I1h.js +1906 -0
- package/web/assets/artifact-spreadsheet-editor-BvEnxKsm.js +11 -0
- package/web/assets/artifact-text-editor-BHyVrNyR.js +34 -0
- package/web/assets/asciidoc-Ve4PFQV2.js +1 -0
- package/web/assets/asm-D_Q5rh1f.js +1 -0
- package/web/assets/astro-HNnZUWAn.js +1 -0
- package/web/assets/aurora-x-D-2ljcwZ.js +1 -0
- package/web/assets/awk-DMzUqQB5.js +1 -0
- package/web/assets/ayu-dark-DYE7WIF3.js +1 -0
- package/web/assets/ayu-light-BA47KaF1.js +1 -0
- package/web/assets/ayu-mirage-32ctXXKs.js +1 -0
- package/web/assets/ballerina-BFfxhgS-.js +1 -0
- package/web/assets/bat-BkioyH1T.js +1 -0
- package/web/assets/beancount-k_qm7-4y.js +1 -0
- package/web/assets/berry-uYugtg8r.js +1 -0
- package/web/assets/bibtex-CHM0blh-.js +1 -0
- package/web/assets/bicep-Bmn6On1c.js +1 -0
- package/web/assets/bird2-BIv1doCn.js +1 -0
- package/web/assets/blade-BjGOyj-B.js +1 -0
- package/web/assets/blockDiagram-OSKFZWR5-Cvqr9DPi.js +129 -0
- package/web/assets/bsl-BO_Y6i37.js +1 -0
- package/web/assets/c-BIGW1oBm.js +1 -0
- package/web/assets/c3-eo99z4R2.js +1 -0
- package/web/assets/c4Diagram-7LVT6UL2-CWTWC9C1.js +38 -0
- package/web/assets/cadence-Bv_4Rxtq.js +1 -0
- package/web/assets/cairo-KRGpt6FW.js +1 -0
- package/web/assets/catppuccin-frappe-DFWUc33u.js +1 -0
- package/web/assets/catppuccin-latte-C9dUb6Cb.js +1 -0
- package/web/assets/catppuccin-macchiato-DQyhUUbL.js +1 -0
- package/web/assets/catppuccin-mocha-D87Tk5Gz.js +1 -0
- package/web/assets/channel-BkgEJbR-.js +1 -0
- package/web/assets/chunk-2Q5K7J3B-DpJkzZ5x.js +1 -0
- package/web/assets/chunk-5VM5RSS4-BtTBnr9m.js +15 -0
- package/web/assets/chunk-F27PBJKO-BbAvFJAg.js +1 -0
- package/web/assets/chunk-HLEWEB6X-DX5mKBrj.js +206 -0
- package/web/assets/chunk-JWPE2WC7-CugB1e5O.js +1 -0
- package/web/assets/chunk-POPQ4Y6H-BQ-bWmmo.js +1 -0
- package/web/assets/chunk-SVP7TREG-szCI_Kz9.js +88 -0
- package/web/assets/chunk-XXDRQBXY-C5UTO899.js +1 -0
- package/web/assets/chunk-ZLD2IHE6-D5v_jiDg.js +231 -0
- package/web/assets/clarity-D53aC0YG.js +1 -0
- package/web/assets/classDiagram-CYGNFDIV-BHINh3-f.js +1 -0
- package/web/assets/classDiagram-v2-TLXNO2FR-BHINh3-f.js +1 -0
- package/web/assets/clojure-P80f7IUj.js +1 -0
- package/web/assets/cmake-D1j8_8rp.js +1 -0
- package/web/assets/cobol-nBiQ_Alo.js +1 -0
- package/web/assets/codeowners-Bp6g37R7.js +1 -0
- package/web/assets/codeql-DsOJ9woJ.js +1 -0
- package/web/assets/coffee-Ch7k5sss.js +1 -0
- package/web/assets/common-lisp-Cg-RD9OK.js +1 -0
- package/web/assets/coq-DkFqJrB1.js +1 -0
- package/web/assets/cose-bilkent-JH36ORCC-BhG_zAfo.js +1 -0
- package/web/assets/cpp-CofmeUqb.js +1 -0
- package/web/assets/crystal-DNxU26gB.js +1 -0
- package/web/assets/csharp-COcwbKMJ.js +1 -0
- package/web/assets/css-CLj8gQPS.js +1 -0
- package/web/assets/csv-fuZLfV_i.js +1 -0
- package/web/assets/cue-D82EKSYY.js +1 -0
- package/web/assets/cynefin-OW5HDTMX-DSTjm6jO.js +178 -0
- package/web/assets/cynefinDiagram-5FMLGOSQ-Dqkgb6tF.js +62 -0
- package/web/assets/cypher-COkxafJQ.js +1 -0
- package/web/assets/cytoscape.esm-CNiYdHpY.js +331 -0
- package/web/assets/d-85-TOEBH.js +1 -0
- package/web/assets/dagre-OS7QT2EB-BZMseQyA.js +4 -0
- package/web/assets/dark-plus-C3mMm8J8.js +1 -0
- package/web/assets/dart-bE4Kk8sk.js +1 -0
- package/web/assets/dax-CEL-wOlO.js +1 -0
- package/web/assets/defaultLocale-DX6XiGOO.js +1 -0
- package/web/assets/desktop-BmXAJ9_W.js +1 -0
- package/web/assets/diagram-S7CK7UJ4-Cs2hsmEJ.js +30 -0
- package/web/assets/diagram-UQ7AKVKN-CDnRP_yz.js +41 -0
- package/web/assets/diagram-VSXAHHWV-DxKXQXAC.js +3 -0
- package/web/assets/diagram-VX7I27RA-BJKoseDf.js +24 -0
- package/web/assets/diagram-Z3DM3KII-DDcMvRxo.js +24 -0
- package/web/assets/diff-D97Zzqfu.js +1 -0
- package/web/assets/docker-BcOcwvcX.js +1 -0
- package/web/assets/dotenv-Da5cRb03.js +1 -0
- package/web/assets/dracula-BzJJZx-M.js +1 -0
- package/web/assets/dracula-soft-BXkSAIEj.js +1 -0
- package/web/assets/dream-maker-BtqSS_iP.js +1 -0
- package/web/assets/ebnfDiagram-PWID7BFC-C2uUm-CC.js +1 -0
- package/web/assets/edge-FbVlp4U3.js +1 -0
- package/web/assets/elixir-CkH2-t6x.js +1 -0
- package/web/assets/elm-DbKCFpqz.js +1 -0
- package/web/assets/emacs-lisp-CXvaQtF9.js +1 -0
- package/web/assets/erDiagram-2YWLMYGG-B0Mdv5WO.js +99 -0
- package/web/assets/erb-BYCe7drp.js +1 -0
- package/web/assets/erlang-DsQrWhSR.js +1 -0
- package/web/assets/everforest-dark-BgDCqdQA.js +1 -0
- package/web/assets/everforest-light-C8M2exoo.js +1 -0
- package/web/assets/fennel-BYunw83y.js +1 -0
- package/web/assets/fish-BvzEVeQv.js +1 -0
- package/web/assets/flowDiagram-T62WH6J4-CUnt9AMo.js +168 -0
- package/web/assets/fluent-C4IJs8-o.js +1 -0
- package/web/assets/fortran-fixed-form-CkoXwp7k.js +1 -0
- package/web/assets/fortran-free-form-BxgE0vQu.js +1 -0
- package/web/assets/fsharp-CXgrBDvD.js +1 -0
- package/web/assets/ganttDiagram-EL5Y4UJY-CENsUToC.js +292 -0
- package/web/assets/gdresource-BOOCDP_w.js +1 -0
- package/web/assets/gdscript-C5YyOfLZ.js +1 -0
- package/web/assets/gdshader-DkwncUOv.js +1 -0
- package/web/assets/geist-cyrillic-wght-normal-CHSlOQsW.woff2 +0 -0
- package/web/assets/geist-latin-ext-wght-normal-DMtmJ5ZE.woff2 +0 -0
- package/web/assets/geist-latin-wght-normal-Dm3htQBi.woff2 +0 -0
- package/web/assets/genie-D0YGMca9.js +1 -0
- package/web/assets/gherkin-DyxjwDmM.js +1 -0
- package/web/assets/git-commit-F4YmCXRG.js +1 -0
- package/web/assets/git-rebase-r7XF79zn.js +1 -0
- package/web/assets/gitGraphDiagram-WWUBYQGX-CrbKh94B.js +106 -0
- package/web/assets/github-dark-DHJKELXO.js +1 -0
- package/web/assets/github-dark-default-Cuk6v7N8.js +1 -0
- package/web/assets/github-dark-dimmed-DH5Ifo-i.js +1 -0
- package/web/assets/github-dark-high-contrast-E3gJ1_iC.js +1 -0
- package/web/assets/github-light-DAi9KRSo.js +1 -0
- package/web/assets/github-light-default-D7oLnXFd.js +1 -0
- package/web/assets/github-light-high-contrast-BfjtVDDH.js +1 -0
- package/web/assets/gleam-BspZqrRM.js +1 -0
- package/web/assets/glimmer-js-ByusRIyA.js +1 -0
- package/web/assets/glimmer-ts-BfAWNZQY.js +1 -0
- package/web/assets/glsl-DplSGwfg.js +1 -0
- package/web/assets/gn-n2N0HUVH.js +1 -0
- package/web/assets/gnuplot-DdkO51Og.js +1 -0
- package/web/assets/go-C27-OAKa.js +1 -0
- package/web/assets/graphql-ChdNCCLP.js +1 -0
- package/web/assets/groovy-gcz8RCvz.js +1 -0
- package/web/assets/gruvbox-dark-hard-CFHQjOhq.js +1 -0
- package/web/assets/gruvbox-dark-medium-GsRaNv29.js +1 -0
- package/web/assets/gruvbox-dark-soft-CVdnzihN.js +1 -0
- package/web/assets/gruvbox-light-hard-CH1njM8p.js +1 -0
- package/web/assets/gruvbox-light-medium-DRw_LuNl.js +1 -0
- package/web/assets/gruvbox-light-soft-hJgmCMqR.js +1 -0
- package/web/assets/hack-i7_Ulhet.js +1 -0
- package/web/assets/haml-D5jkg6IW.js +1 -0
- package/web/assets/handlebars-BpdQsYii.js +1 -0
- package/web/assets/haskell-Df6bDoY_.js +1 -0
- package/web/assets/haxe-CzTSHFRz.js +1 -0
- package/web/assets/hcl-BWvSN4gD.js +1 -0
- package/web/assets/hjson-D5-asLiD.js +1 -0
- package/web/assets/hlsl-D3lLCCz7.js +1 -0
- package/web/assets/horizon-BUw7H-hv.js +1 -0
- package/web/assets/horizon-bright-CUuTKBJd.js +1 -0
- package/web/assets/houston-DnULxvSX.js +1 -0
- package/web/assets/html-derivative-DlHx6ybY.js +1 -0
- package/web/assets/html-pp8916En.js +1 -0
- package/web/assets/http-jrhK8wxY.js +1 -0
- package/web/assets/hurl-irOxFIW8.js +1 -0
- package/web/assets/hxml-Bvhsp5Yf.js +1 -0
- package/web/assets/hy-DFXneXwc.js +1 -0
- package/web/assets/ibm-plex-sans-cyrillic-ext-wght-normal-d45eAU9y.woff2 +0 -0
- package/web/assets/ibm-plex-sans-cyrillic-wght-normal-BAAhND-U.woff2 +0 -0
- package/web/assets/ibm-plex-sans-greek-wght-normal-CmyJS8uq.woff2 +0 -0
- package/web/assets/ibm-plex-sans-latin-ext-wght-normal-CIII54If.woff2 +0 -0
- package/web/assets/ibm-plex-sans-latin-wght-normal-IvpUvPa2.woff2 +0 -0
- package/web/assets/ibm-plex-sans-vietnamese-wght-normal-Dg1JeJN0.woff2 +0 -0
- package/web/assets/imba-DGztddWO.js +1 -0
- package/web/assets/index-CyyMNIC_.css +1 -0
- package/web/assets/index-D6FUvVB1.js +49 -0
- package/web/assets/infoDiagram-FKFFQAWI-B-U-x_qU.js +2 -0
- package/web/assets/ini-BEwlwnbL.js +1 -0
- package/web/assets/init-Gi6I4Gst.js +1 -0
- package/web/assets/ishikawaDiagram-5VMMS53U-jNVSJSu1.js +70 -0
- package/web/assets/java-CylS5w8V.js +1 -0
- package/web/assets/javascript-wDzz0qaB.js +1 -0
- package/web/assets/jinja-f2NsQr07.js +1 -0
- package/web/assets/jison-wvAkD_A8.js +1 -0
- package/web/assets/journeyDiagram-EYS64GPL-De3j0gPh.js +139 -0
- package/web/assets/json-Cp-IABpG.js +1 -0
- package/web/assets/json5-C9tS-k6U.js +1 -0
- package/web/assets/jsonc-Des-eS-w.js +1 -0
- package/web/assets/jsonl-DcaNXYhu.js +1 -0
- package/web/assets/jsonnet-DFQXde-d.js +1 -0
- package/web/assets/jssm-C2t-YnRu.js +1 -0
- package/web/assets/jsx-g9-lgVsj.js +1 -0
- package/web/assets/julia-CxzCAyBv.js +1 -0
- package/web/assets/just-VxiPbLrw.js +1 -0
- package/web/assets/kanagawa-dragon-CkXjmgJE.js +1 -0
- package/web/assets/kanagawa-lotus-CfQXZHmo.js +1 -0
- package/web/assets/kanagawa-wave-DWedfzmr.js +1 -0
- package/web/assets/kanban-definition-UXKFOSKX-Bbc8wjhq.js +89 -0
- package/web/assets/katex-HP8lGamR.js +257 -0
- package/web/assets/kdl-DV7GczEv.js +1 -0
- package/web/assets/kotlin-BdnUsdx6.js +1 -0
- package/web/assets/kusto-wEQ09or8.js +1 -0
- package/web/assets/laserwave-DUszq2jm.js +1 -0
- package/web/assets/latex-CWtU0Tv5.js +1 -0
- package/web/assets/layout-BIjP2nup.js +1 -0
- package/web/assets/lean-BZvkOJ9d.js +1 -0
- package/web/assets/less-B1dDrJ26.js +1 -0
- package/web/assets/light-plus-B7mTdjB0.js +1 -0
- package/web/assets/linear-lvQZOiHM.js +1 -0
- package/web/assets/liquid-C0sCDyMI.js +1 -0
- package/web/assets/llvm-DjAJT7YJ.js +1 -0
- package/web/assets/log-2UxHyX5q.js +1 -0
- package/web/assets/logo-BtOb2qkB.js +1 -0
- package/web/assets/lua-BaeVxFsk.js +1 -0
- package/web/assets/luau-C-HG3fhB.js +1 -0
- package/web/assets/make-CHLpvVh8.js +1 -0
- package/web/assets/markdown-Cvjx9yec.js +1 -0
- package/web/assets/marko-DjSrsDqO.js +1 -0
- package/web/assets/material-theme-D5KoaKCx.js +1 -0
- package/web/assets/material-theme-darker-BfHTSMKl.js +1 -0
- package/web/assets/material-theme-lighter-B0m2ddpp.js +1 -0
- package/web/assets/material-theme-ocean-CyktbL80.js +1 -0
- package/web/assets/material-theme-palenight-Csfq5Kiy.js +1 -0
- package/web/assets/matlab-D7o27uSR.js +1 -0
- package/web/assets/mdc-DTYItulj.js +1 -0
- package/web/assets/mdx-Cmh6b_Ma.js +1 -0
- package/web/assets/mermaid-mWjccvbQ.js +1 -0
- package/web/assets/mermaid.core-LJPf4T7o.js +310 -0
- package/web/assets/min-dark-CafNBF8u.js +1 -0
- package/web/assets/min-light-CTRr51gU.js +1 -0
- package/web/assets/mindmap-definition-THT77NOG-DiboHsg8.js +96 -0
- package/web/assets/mipsasm-CKIfxQSi.js +1 -0
- package/web/assets/mojo-rZm6bMo-.js +1 -0
- package/web/assets/monokai-D4h5O-jR.js +1 -0
- package/web/assets/moonbit-_H4v1dQx.js +1 -0
- package/web/assets/move-IF9eRakj.js +1 -0
- package/web/assets/narrat-DRg8JJMk.js +1 -0
- package/web/assets/nextflow-C-mBbutL.js +1 -0
- package/web/assets/nextflow-groovy-vE_lwT2v.js +1 -0
- package/web/assets/nginx-BpAMiNFr.js +1 -0
- package/web/assets/night-owl-C39BiMTA.js +1 -0
- package/web/assets/night-owl-light-CMTm3GFP.js +1 -0
- package/web/assets/nim-BIad80T-.js +1 -0
- package/web/assets/nix-CwoSXNpI.js +1 -0
- package/web/assets/nord-Ddv68eIx.js +1 -0
- package/web/assets/nushell-Cz2AlsmD.js +1 -0
- package/web/assets/objective-c-DXmwc3jG.js +1 -0
- package/web/assets/objective-cpp-CLxacb5B.js +1 -0
- package/web/assets/ocaml-C0hk2d4L.js +1 -0
- package/web/assets/odin-BBf5iR-q.js +1 -0
- package/web/assets/one-dark-pro-DVMEJ2y_.js +1 -0
- package/web/assets/one-light-C3Wv6jpd.js +1 -0
- package/web/assets/openscad-C4EeE6gA.js +1 -0
- package/web/assets/ordinal-Cboi1Yqb.js +1 -0
- package/web/assets/overlay-DA5SOee-.js +1 -0
- package/web/assets/pascal-D93ZcfNL.js +1 -0
- package/web/assets/pegDiagram-XKGWAZYB-DO_edVtr.js +1 -0
- package/web/assets/perl-NvoQZIq0.js +1 -0
- package/web/assets/php-R6g_5hLQ.js +1 -0
- package/web/assets/pieDiagram-E7YTZNPT-bPvBuBuG.js +39 -0
- package/web/assets/pierre-dark-CyvmCCZW.js +1 -0
- package/web/assets/pierre-dark-protanopia-deuteranopia-Rgc0TwpF.js +1 -0
- package/web/assets/pierre-dark-soft-BHGpRqa4.js +1 -0
- package/web/assets/pierre-dark-tritanopia-Beq2gCRQ.js +1 -0
- package/web/assets/pierre-dark-vibrant-BWBVywrn.js +1 -0
- package/web/assets/pierre-light-480U9XYS.js +1 -0
- package/web/assets/pierre-light-protanopia-deuteranopia-CaVOBURG.js +1 -0
- package/web/assets/pierre-light-soft-CVdyfjmI.js +1 -0
- package/web/assets/pierre-light-tritanopia-B4_gpKOM.js +1 -0
- package/web/assets/pierre-light-vibrant-DdTDNdfJ.js +1 -0
- package/web/assets/pkl-u5AG7uiY.js +1 -0
- package/web/assets/plastic-3e1v2bzS.js +1 -0
- package/web/assets/plsql-ChMvpjG-.js +1 -0
- package/web/assets/po-BTJTHyun.js +1 -0
- package/web/assets/poimandres-CS3Unz2-.js +1 -0
- package/web/assets/polar-C0HS_06l.js +1 -0
- package/web/assets/postcss-CXtECtnM.js +1 -0
- package/web/assets/powerquery-CEu0bR-o.js +1 -0
- package/web/assets/powershell-Dpen1YoG.js +1 -0
- package/web/assets/prisma-Dd19v3D-.js +1 -0
- package/web/assets/prolog-CbFg5uaA.js +1 -0
- package/web/assets/proto-C7zT0LnQ.js +1 -0
- package/web/assets/pug-DKIMFp6K.js +1 -0
- package/web/assets/puppet-BMWR74SV.js +1 -0
- package/web/assets/purescript-CklMAg4u.js +1 -0
- package/web/assets/python-B6aJPvgy.js +1 -0
- package/web/assets/qml-3beO22l8.js +1 -0
- package/web/assets/qmldir-C8lEn-DE.js +1 -0
- package/web/assets/qss-IeuSbFQv.js +1 -0
- package/web/assets/quadrantDiagram-AXDQQJYC-BGyrQhlH.js +7 -0
- package/web/assets/r-Dspwwk_N.js +1 -0
- package/web/assets/racket-BqYA7rlc.js +1 -0
- package/web/assets/railroadDiagram-O6MQD6OU-XhPIuoOE.js +1 -0
- package/web/assets/raku-DXvB9xmW.js +1 -0
- package/web/assets/razor-BDqjjVU7.js +1 -0
- package/web/assets/red-bN70gL4F.js +1 -0
- package/web/assets/reg-C-SQnVFl.js +1 -0
- package/web/assets/regexp-CDVJQ6XC.js +1 -0
- package/web/assets/rel-C3B-1QV4.js +1 -0
- package/web/assets/requirementDiagram-IS5BZ75X-atdASt4G.js +84 -0
- package/web/assets/riscv-BM1_JUlF.js +1 -0
- package/web/assets/ron-D8l8udqQ.js +1 -0
- package/web/assets/rose-pine-dawn-DHQR4-dF.js +1 -0
- package/web/assets/rose-pine-moon-D4_iv3hh.js +1 -0
- package/web/assets/rose-pine-qdsjHGoJ.js +1 -0
- package/web/assets/rosmsg-BJDFO7_C.js +1 -0
- package/web/assets/rst-CRjBmOyv.js +1 -0
- package/web/assets/ruby-Wjq7vjNf.js +1 -0
- package/web/assets/rust-B1yitclQ.js +1 -0
- package/web/assets/sankeyDiagram-P5KCCOFB-BV9prEKy.js +40 -0
- package/web/assets/sas-cz2c8ADy.js +1 -0
- package/web/assets/sass-Cj5Yp3dK.js +1 -0
- package/web/assets/scala-C151Ov-r.js +1 -0
- package/web/assets/scheme-C98Dy4si.js +1 -0
- package/web/assets/scss-D5BDwBP9.js +1 -0
- package/web/assets/sdbl-DVxCFoDh.js +1 -0
- package/web/assets/sequenceDiagram-WJ2MYXX4-Csfm-fZ-.js +162 -0
- package/web/assets/shaderlab-Dg9Lc6iA.js +1 -0
- package/web/assets/shellscript-Yzrsuije.js +1 -0
- package/web/assets/shellsession-BADoaaVG.js +1 -0
- package/web/assets/sizeCapture-INFHLROL-CLmH-AjF.js +1 -0
- package/web/assets/slack-dark-BthQWCQV.js +1 -0
- package/web/assets/slack-ochin-DqwNpetd.js +1 -0
- package/web/assets/smalltalk-BERRCDM3.js +1 -0
- package/web/assets/snazzy-light-Bw305WKR.js +1 -0
- package/web/assets/solarized-dark-DXbdFlpD.js +1 -0
- package/web/assets/solarized-light-L9t79GZl.js +1 -0
- package/web/assets/solidity-rGO070M0.js +1 -0
- package/web/assets/soy-8wufbnw4.js +1 -0
- package/web/assets/sparql-rVzFXLq3.js +1 -0
- package/web/assets/splunk-BtCnVYZw.js +1 -0
- package/web/assets/sql-BLtJtn59.js +1 -0
- package/web/assets/ssh-config-_ykCGR6B.js +1 -0
- package/web/assets/stata-BH5u7GGu.js +1 -0
- package/web/assets/stateDiagram-XQSTLZYL-yiSt2fJK.js +1 -0
- package/web/assets/stateDiagram-v2-IH3M54BS-BEhxOujx.js +1 -0
- package/web/assets/stylus-BEDo0Tqx.js +1 -0
- package/web/assets/surrealql-Bq5Q-fJD.js +1 -0
- package/web/assets/svelte-Cy7k_4gC.js +1 -0
- package/web/assets/swift-D82vCrfD.js +1 -0
- package/web/assets/swimlanes-V6O3JKXN-BpXNggx9.js +1 -0
- package/web/assets/swimlanesDiagram-JKAHXJPX-DWqwFv9F.js +8 -0
- package/web/assets/synthwave-84-CbfX1IO0.js +1 -0
- package/web/assets/system-verilog-CnnmHF94.js +1 -0
- package/web/assets/systemd-4A_iFExJ.js +1 -0
- package/web/assets/talonscript-CkByrt1z.js +1 -0
- package/web/assets/tasl-QIJgUcNo.js +1 -0
- package/web/assets/tcl-dwOrl1Do.js +1 -0
- package/web/assets/templ-DhtptRzy.js +1 -0
- package/web/assets/terraform-BETggiCN.js +1 -0
- package/web/assets/tex-idrVyKtj.js +1 -0
- package/web/assets/timeline-definition-24CTP7MA-C8X71OnL.js +120 -0
- package/web/assets/tokyo-night-hegEt444.js +1 -0
- package/web/assets/toml-vGWfd6FD.js +1 -0
- package/web/assets/ts-tags-DQrlYJgV.js +1 -0
- package/web/assets/tsv-B_m7g4N7.js +1 -0
- package/web/assets/tsx-COt5Ahok.js +1 -0
- package/web/assets/turtle-BsS91CYL.js +1 -0
- package/web/assets/twig-xg9kU7Mw.js +1 -0
- package/web/assets/typescript-BPQ3VLAy.js +1 -0
- package/web/assets/typespec-CAFt9gP4.js +1 -0
- package/web/assets/typst-DHCkPAjA.js +1 -0
- package/web/assets/v-BcVCzyr7.js +1 -0
- package/web/assets/vala-CsfeWuGM.js +1 -0
- package/web/assets/vb-D17OF-Vu.js +1 -0
- package/web/assets/vennDiagram-4TSXK5OY-BZo-99ra.js +34 -0
- package/web/assets/verilog-BQ8w6xss.js +1 -0
- package/web/assets/vesper-DU1UobuO.js +1 -0
- package/web/assets/vhdl-CeAyd5Ju.js +1 -0
- package/web/assets/viml-CJc9bBzg.js +1 -0
- package/web/assets/vitesse-black-Bkuqu6BP.js +1 -0
- package/web/assets/vitesse-dark-D0r3Knsf.js +1 -0
- package/web/assets/vitesse-light-CVO1_9PV.js +1 -0
- package/web/assets/vue-D2xRrEX4.js +1 -0
- package/web/assets/vue-html-AaS7Mt5G.js +1 -0
- package/web/assets/vue-vine-BoDAl6tE.js +1 -0
- package/web/assets/vyper-CDx5xZoG.js +1 -0
- package/web/assets/wardleyDiagram-VM6X3IG4-BHwH6ZLg.js +78 -0
- package/web/assets/wasm-CG6Dc4jp.js +1 -0
- package/web/assets/wasm-MzD3tlZU.js +1 -0
- package/web/assets/wenyan-BV7otONQ.js +1 -0
- package/web/assets/wgsl-Dx-B1_4e.js +1 -0
- package/web/assets/wikitext-BhOHFoWU.js +1 -0
- package/web/assets/wit-5i3qLPDT.js +1 -0
- package/web/assets/wolfram-lXgVvXCa.js +1 -0
- package/web/assets/workspace-file-tree-C8iSfvPt.js +1278 -0
- package/web/assets/xml-sdJ4AIDG.js +1 -0
- package/web/assets/xsl-CtQFsRM5.js +1 -0
- package/web/assets/xychartDiagram-S5SC5T6Z-BieEi319.js +7 -0
- package/web/assets/yaml-Buea-lGh.js +1 -0
- package/web/assets/zenscript-DVFEvuxE.js +1 -0
- package/web/assets/zig-VOosw3JB.js +1 -0
- package/web/ext-context7.svg +1 -0
- package/web/ext-github.svg +1 -0
- package/web/ext-google-workspace.svg +6 -0
- package/web/ext-hubspot.svg +1 -0
- package/web/ext-linear.svg +1 -0
- package/web/ext-notion.svg +1 -0
- package/web/ext-ollama.svg +1 -0
- package/web/ext-openai.svg +1 -0
- package/web/ext-sentry.svg +1 -0
- package/web/ext-slack.svg +1 -0
- package/web/ext-stripe.svg +1 -0
- package/web/favicon-16x16.png +0 -0
- package/web/favicon-32x32.png +0 -0
- package/web/grain-art/extension/extension-001.png +0 -0
- package/web/grain-art/extension/extension-002.png +0 -0
- package/web/grain-art/extension/extension-003.png +0 -0
- package/web/grain-art/extension/extension-004.png +0 -0
- package/web/grain-art/extension/extension-005.png +0 -0
- package/web/grain-art/extension/extension-006.png +0 -0
- package/web/grain-art/extension/extension-007.png +0 -0
- package/web/grain-art/extension/extension-008.png +0 -0
- package/web/grain-art/extension/extension-009.png +0 -0
- package/web/grain-art/extension/extension-010.png +0 -0
- package/web/grain-art/extension/extension-011.png +0 -0
- package/web/grain-art/extension/extension-012.png +0 -0
- package/web/grain-art/extension/extension-013.png +0 -0
- package/web/grain-art/extension/extension-014.png +0 -0
- package/web/grain-art/extension/extension-015.png +0 -0
- package/web/grain-art/extension/extension-016.png +0 -0
- package/web/grain-art/extension/extension-017.png +0 -0
- package/web/grain-art/extension/extension-018.png +0 -0
- package/web/grain-art/extension/extension-019.png +0 -0
- package/web/grain-art/extension/extension-020.png +0 -0
- package/web/grain-art/extension/extension-021.png +0 -0
- package/web/grain-art/extension/extension-022.png +0 -0
- package/web/grain-art/extension/extension-023.png +0 -0
- package/web/grain-art/extension/extension-024.png +0 -0
- package/web/grain-art/extension/extension-025.png +0 -0
- package/web/grain-art/extension/extension-026.png +0 -0
- package/web/grain-art/extension/extension-027.png +0 -0
- package/web/grain-art/extension/extension-028.png +0 -0
- package/web/grain-art/extension/extension-029.png +0 -0
- package/web/grain-art/extension/extension-030.png +0 -0
- package/web/grain-art/extension/extension-031.png +0 -0
- package/web/grain-art/extension/extension-032.png +0 -0
- package/web/grain-art/fallback/fallback-001.png +0 -0
- package/web/grain-art/fallback/fallback-002.png +0 -0
- package/web/grain-art/fallback/fallback-003.png +0 -0
- package/web/grain-art/fallback/fallback-004.png +0 -0
- package/web/grain-art/fallback/fallback-005.png +0 -0
- package/web/grain-art/fallback/fallback-006.png +0 -0
- package/web/grain-art/fallback/fallback-007.png +0 -0
- package/web/grain-art/fallback/fallback-008.png +0 -0
- package/web/grain-art/fallback/fallback-009.png +0 -0
- package/web/grain-art/fallback/fallback-010.png +0 -0
- package/web/grain-art/fallback/fallback-011.png +0 -0
- package/web/grain-art/fallback/fallback-012.png +0 -0
- package/web/grain-art/fallback/fallback-013.png +0 -0
- package/web/grain-art/fallback/fallback-014.png +0 -0
- package/web/grain-art/fallback/fallback-015.png +0 -0
- package/web/grain-art/fallback/fallback-016.png +0 -0
- package/web/grain-art/fallback/fallback-017.png +0 -0
- package/web/grain-art/fallback/fallback-018.png +0 -0
- package/web/grain-art/fallback/fallback-019.png +0 -0
- package/web/grain-art/fallback/fallback-020.png +0 -0
- package/web/grain-art/fallback/fallback-021.png +0 -0
- package/web/grain-art/fallback/fallback-022.png +0 -0
- package/web/grain-art/fallback/fallback-023.png +0 -0
- package/web/grain-art/fallback/fallback-024.png +0 -0
- package/web/grain-art/fallback/fallback-025.png +0 -0
- package/web/grain-art/fallback/fallback-026.png +0 -0
- package/web/grain-art/fallback/fallback-027.png +0 -0
- package/web/grain-art/fallback/fallback-028.png +0 -0
- package/web/grain-art/fallback/fallback-029.png +0 -0
- package/web/grain-art/fallback/fallback-030.png +0 -0
- package/web/grain-art/fallback/fallback-031.png +0 -0
- package/web/grain-art/fallback/fallback-032.png +0 -0
- package/web/grain-art/mcps/mcps-001.png +0 -0
- package/web/grain-art/mcps/mcps-002.png +0 -0
- package/web/grain-art/mcps/mcps-003.png +0 -0
- package/web/grain-art/mcps/mcps-004.png +0 -0
- package/web/grain-art/mcps/mcps-005.png +0 -0
- package/web/grain-art/mcps/mcps-006.png +0 -0
- package/web/grain-art/mcps/mcps-007.png +0 -0
- package/web/grain-art/mcps/mcps-008.png +0 -0
- package/web/grain-art/mcps/mcps-009.png +0 -0
- package/web/grain-art/mcps/mcps-010.png +0 -0
- package/web/grain-art/mcps/mcps-011.png +0 -0
- package/web/grain-art/mcps/mcps-012.png +0 -0
- package/web/grain-art/mcps/mcps-013.png +0 -0
- package/web/grain-art/mcps/mcps-014.png +0 -0
- package/web/grain-art/mcps/mcps-015.png +0 -0
- package/web/grain-art/mcps/mcps-016.png +0 -0
- package/web/grain-art/mcps/mcps-017.png +0 -0
- package/web/grain-art/mcps/mcps-018.png +0 -0
- package/web/grain-art/mcps/mcps-019.png +0 -0
- package/web/grain-art/mcps/mcps-020.png +0 -0
- package/web/grain-art/mcps/mcps-021.png +0 -0
- package/web/grain-art/mcps/mcps-022.png +0 -0
- package/web/grain-art/mcps/mcps-023.png +0 -0
- package/web/grain-art/mcps/mcps-024.png +0 -0
- package/web/grain-art/mcps/mcps-025.png +0 -0
- package/web/grain-art/mcps/mcps-026.png +0 -0
- package/web/grain-art/mcps/mcps-027.png +0 -0
- package/web/grain-art/mcps/mcps-028.png +0 -0
- package/web/grain-art/mcps/mcps-029.png +0 -0
- package/web/grain-art/mcps/mcps-030.png +0 -0
- package/web/grain-art/mcps/mcps-031.png +0 -0
- package/web/grain-art/mcps/mcps-032.png +0 -0
- package/web/grain-art/plugins/plugins-001.png +0 -0
- package/web/grain-art/plugins/plugins-002.png +0 -0
- package/web/grain-art/plugins/plugins-003.png +0 -0
- package/web/grain-art/plugins/plugins-004.png +0 -0
- package/web/grain-art/plugins/plugins-005.png +0 -0
- package/web/grain-art/plugins/plugins-006.png +0 -0
- package/web/grain-art/plugins/plugins-007.png +0 -0
- package/web/grain-art/plugins/plugins-008.png +0 -0
- package/web/grain-art/plugins/plugins-009.png +0 -0
- package/web/grain-art/plugins/plugins-010.png +0 -0
- package/web/grain-art/plugins/plugins-011.png +0 -0
- package/web/grain-art/plugins/plugins-012.png +0 -0
- package/web/grain-art/plugins/plugins-013.png +0 -0
- package/web/grain-art/plugins/plugins-014.png +0 -0
- package/web/grain-art/plugins/plugins-015.png +0 -0
- package/web/grain-art/plugins/plugins-016.png +0 -0
- package/web/grain-art/plugins/plugins-017.png +0 -0
- package/web/grain-art/plugins/plugins-018.png +0 -0
- package/web/grain-art/plugins/plugins-019.png +0 -0
- package/web/grain-art/plugins/plugins-020.png +0 -0
- package/web/grain-art/plugins/plugins-021.png +0 -0
- package/web/grain-art/plugins/plugins-022.png +0 -0
- package/web/grain-art/plugins/plugins-023.png +0 -0
- package/web/grain-art/plugins/plugins-024.png +0 -0
- package/web/grain-art/plugins/plugins-025.png +0 -0
- package/web/grain-art/plugins/plugins-026.png +0 -0
- package/web/grain-art/plugins/plugins-027.png +0 -0
- package/web/grain-art/plugins/plugins-028.png +0 -0
- package/web/grain-art/plugins/plugins-029.png +0 -0
- package/web/grain-art/plugins/plugins-030.png +0 -0
- package/web/grain-art/plugins/plugins-031.png +0 -0
- package/web/grain-art/plugins/plugins-032.png +0 -0
- package/web/grain-art/skills/skills-001.png +0 -0
- package/web/grain-art/skills/skills-002.png +0 -0
- package/web/grain-art/skills/skills-003.png +0 -0
- package/web/grain-art/skills/skills-004.png +0 -0
- package/web/grain-art/skills/skills-005.png +0 -0
- package/web/grain-art/skills/skills-006.png +0 -0
- package/web/grain-art/skills/skills-007.png +0 -0
- package/web/grain-art/skills/skills-008.png +0 -0
- package/web/grain-art/skills/skills-009.png +0 -0
- package/web/grain-art/skills/skills-010.png +0 -0
- package/web/grain-art/skills/skills-011.png +0 -0
- package/web/grain-art/skills/skills-012.png +0 -0
- package/web/grain-art/skills/skills-013.png +0 -0
- package/web/grain-art/skills/skills-014.png +0 -0
- package/web/grain-art/skills/skills-015.png +0 -0
- package/web/grain-art/skills/skills-016.png +0 -0
- package/web/grain-art/skills/skills-017.png +0 -0
- package/web/grain-art/skills/skills-018.png +0 -0
- package/web/grain-art/skills/skills-019.png +0 -0
- package/web/grain-art/skills/skills-020.png +0 -0
- package/web/grain-art/skills/skills-021.png +0 -0
- package/web/grain-art/skills/skills-022.png +0 -0
- package/web/grain-art/skills/skills-023.png +0 -0
- package/web/grain-art/skills/skills-024.png +0 -0
- package/web/grain-art/skills/skills-025.png +0 -0
- package/web/grain-art/skills/skills-026.png +0 -0
- package/web/grain-art/skills/skills-027.png +0 -0
- package/web/grain-art/skills/skills-028.png +0 -0
- package/web/grain-art/skills/skills-029.png +0 -0
- package/web/grain-art/skills/skills-030.png +0 -0
- package/web/grain-art/skills/skills-031.png +0 -0
- package/web/grain-art/skills/skills-032.png +0 -0
- package/web/grain-art/workspaces/workspaces-001.png +0 -0
- package/web/grain-art/workspaces/workspaces-002.png +0 -0
- package/web/grain-art/workspaces/workspaces-003.png +0 -0
- package/web/grain-art/workspaces/workspaces-004.png +0 -0
- package/web/grain-art/workspaces/workspaces-005.png +0 -0
- package/web/grain-art/workspaces/workspaces-006.png +0 -0
- package/web/grain-art/workspaces/workspaces-007.png +0 -0
- package/web/grain-art/workspaces/workspaces-008.png +0 -0
- package/web/grain-art/workspaces/workspaces-009.png +0 -0
- package/web/grain-art/workspaces/workspaces-010.png +0 -0
- package/web/grain-art/workspaces/workspaces-011.png +0 -0
- package/web/grain-art/workspaces/workspaces-012.png +0 -0
- package/web/grain-art/workspaces/workspaces-013.png +0 -0
- package/web/grain-art/workspaces/workspaces-014.png +0 -0
- package/web/grain-art/workspaces/workspaces-015.png +0 -0
- package/web/grain-art/workspaces/workspaces-016.png +0 -0
- package/web/grain-art/workspaces/workspaces-017.png +0 -0
- package/web/grain-art/workspaces/workspaces-018.png +0 -0
- package/web/grain-art/workspaces/workspaces-019.png +0 -0
- package/web/grain-art/workspaces/workspaces-020.png +0 -0
- package/web/grain-art/workspaces/workspaces-021.png +0 -0
- package/web/grain-art/workspaces/workspaces-022.png +0 -0
- package/web/grain-art/workspaces/workspaces-023.png +0 -0
- package/web/grain-art/workspaces/workspaces-024.png +0 -0
- package/web/grain-art/workspaces/workspaces-025.png +0 -0
- package/web/grain-art/workspaces/workspaces-026.png +0 -0
- package/web/grain-art/workspaces/workspaces-027.png +0 -0
- package/web/grain-art/workspaces/workspaces-028.png +0 -0
- package/web/grain-art/workspaces/workspaces-029.png +0 -0
- package/web/grain-art/workspaces/workspaces-030.png +0 -0
- package/web/grain-art/workspaces/workspaces-031.png +0 -0
- package/web/grain-art/workspaces/workspaces-032.png +0 -0
- package/web/index.html +130 -0
- package/web/manifest.webmanifest +22 -0
- package/web/openwork-logo-square.svg +2 -0
- package/web/openwork-logo.svg +1 -0
- package/web/openwork-mark.svg +16 -0
- package/web/openwork-sidebar-mark.svg +17 -0
- package/web/overlay.html +29 -0
- package/dist/bin/openwork-server +0 -4
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { createRequire } from "node:module";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
4
|
+
var __defProp = Object.defineProperty;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
function __accessProp(key) {
|
|
8
|
+
return this[key];
|
|
9
|
+
}
|
|
10
|
+
var __toESMCache_node;
|
|
11
|
+
var __toESMCache_esm;
|
|
12
|
+
var __toESM = (mod, isNodeMode, target) => {
|
|
13
|
+
var canCache = mod != null && typeof mod === "object";
|
|
14
|
+
if (canCache) {
|
|
15
|
+
var cache = isNodeMode ? __toESMCache_node ??= new WeakMap : __toESMCache_esm ??= new WeakMap;
|
|
16
|
+
var cached = cache.get(mod);
|
|
17
|
+
if (cached)
|
|
18
|
+
return cached;
|
|
19
|
+
}
|
|
20
|
+
target = mod != null ? __create(__getProtoOf(mod)) : {};
|
|
21
|
+
const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
|
|
22
|
+
for (let key of __getOwnPropNames(mod))
|
|
23
|
+
if (!__hasOwnProp.call(to, key))
|
|
24
|
+
__defProp(to, key, {
|
|
25
|
+
get: __accessProp.bind(mod, key),
|
|
26
|
+
enumerable: true
|
|
27
|
+
});
|
|
28
|
+
if (canCache)
|
|
29
|
+
cache.set(mod, to);
|
|
30
|
+
return to;
|
|
31
|
+
};
|
|
32
|
+
var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
|
|
33
|
+
var __returnValue = (v) => v;
|
|
34
|
+
function __exportSetter(name, newValue) {
|
|
35
|
+
this[name] = __returnValue.bind(null, newValue);
|
|
36
|
+
}
|
|
37
|
+
var __export = (target, all) => {
|
|
38
|
+
for (var name in all)
|
|
39
|
+
__defProp(target, name, {
|
|
40
|
+
get: all[name],
|
|
41
|
+
enumerable: true,
|
|
42
|
+
configurable: true,
|
|
43
|
+
set: __exportSetter.bind(all, name)
|
|
44
|
+
});
|
|
45
|
+
};
|
|
46
|
+
var __require = /* @__PURE__ */ createRequire(import.meta.url);
|
|
47
|
+
|
|
48
|
+
// src/opencode-plugins/openwork-context-v2.ts
|
|
49
|
+
var openwork_context_v2_default = {
|
|
50
|
+
id: "openwork.context",
|
|
51
|
+
async setup(context) {
|
|
52
|
+
const registration = await context.tool.transform((editor) => {
|
|
53
|
+
for (const name of ["openwork_context", "openwork_query"]) {
|
|
54
|
+
editor.add({
|
|
55
|
+
name,
|
|
56
|
+
description: name === "openwork_context" ? "Read OpenWork app context and available read-only affordances. Use this to discover session.search and session.read for other conversations." : "Read an OpenWork affordance without changing the app or navigating. Use the exact id and arguments from openwork_context; session.read includes live background-agent activity.",
|
|
57
|
+
input: name === "openwork_context" ? { type: "object", properties: {}, additionalProperties: false } : {
|
|
58
|
+
type: "object",
|
|
59
|
+
properties: { id: { type: "string" }, args: { type: "object", additionalProperties: true } },
|
|
60
|
+
required: ["id"],
|
|
61
|
+
additionalProperties: false
|
|
62
|
+
},
|
|
63
|
+
options: { codemode: false },
|
|
64
|
+
async execute(input, call) {
|
|
65
|
+
const response = await fetch(context.options.url, {
|
|
66
|
+
method: "POST",
|
|
67
|
+
redirect: "error",
|
|
68
|
+
signal: call.signal,
|
|
69
|
+
headers: { Authorization: `Bearer ${context.options.token}`, "Content-Type": "application/json" },
|
|
70
|
+
body: JSON.stringify({ name, input })
|
|
71
|
+
});
|
|
72
|
+
if (!response.ok)
|
|
73
|
+
throw new Error(`OpenWork read failed (${response.status})`);
|
|
74
|
+
return { content: [{ type: "text", text: await response.text() }] };
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
return () => registration.dispose();
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
export {
|
|
83
|
+
openwork_context_v2_default as default
|
|
84
|
+
};
|
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
const cloudFailureSchema = z.object({
|
|
3
|
+
code: z.string(),
|
|
4
|
+
stage: z.string(),
|
|
5
|
+
recommendedAction: z.string(),
|
|
6
|
+
message: z.string(),
|
|
7
|
+
}).passthrough();
|
|
8
|
+
const cloudHealthSchema = z.object({
|
|
9
|
+
usable: z.boolean(),
|
|
10
|
+
usableByCurrentModel: z.boolean().nullable(),
|
|
11
|
+
phase: z.string(),
|
|
12
|
+
connectCatalogEnabled: z.boolean().optional(),
|
|
13
|
+
workspace: z.object({
|
|
14
|
+
id: z.string(),
|
|
15
|
+
directory: z.string().nullable(),
|
|
16
|
+
}).passthrough(),
|
|
17
|
+
desired: z.object({
|
|
18
|
+
present: z.boolean(),
|
|
19
|
+
revision: z.string().nullable(),
|
|
20
|
+
}).passthrough(),
|
|
21
|
+
delivery: z.object({
|
|
22
|
+
appliedRevision: z.string().nullable().optional(),
|
|
23
|
+
}).passthrough().optional(),
|
|
24
|
+
engine: z.object({
|
|
25
|
+
status: z.string().optional(),
|
|
26
|
+
}).passthrough().optional(),
|
|
27
|
+
firstFailure: cloudFailureSchema.nullable(),
|
|
28
|
+
}).passthrough();
|
|
29
|
+
const connectStateResponseSchema = z.object({
|
|
30
|
+
ok: z.literal(true),
|
|
31
|
+
schemaVersion: z.number(),
|
|
32
|
+
connectEnabled: z.boolean(),
|
|
33
|
+
connectCatalogEnabled: z.boolean().optional(),
|
|
34
|
+
cloudMcpPresent: z.boolean(),
|
|
35
|
+
cloudHealth: cloudHealthSchema.nullable().optional(),
|
|
36
|
+
workspace: z.object({
|
|
37
|
+
resolution: z.string().optional(),
|
|
38
|
+
id: z.string().nullable().optional(),
|
|
39
|
+
directory: z.string().nullable().optional(),
|
|
40
|
+
reason: z.string().optional(),
|
|
41
|
+
}).passthrough().optional(),
|
|
42
|
+
}).passthrough();
|
|
43
|
+
// Both catalogs answer with the same envelope: a rendered prompt section.
|
|
44
|
+
const connectCatalogResponseSchema = z.object({
|
|
45
|
+
ok: z.literal(true),
|
|
46
|
+
schemaVersion: z.number(),
|
|
47
|
+
instruction: z.string(),
|
|
48
|
+
}).passthrough();
|
|
49
|
+
export const OPENWORK_GOOGLE_CONNECTION_INSTRUCTION = `Google Workspace uses OpenWork Cloud Connect only, with the member's Google connection managed by the Cloud backend. Do not set up local Google OAuth, request Google tokens, or offer a legacy Google extension or another provider stack. OpenWork Cloud readiness alone does not establish Google connection readiness. When the user requests Google setup or the requested operation is blocked by its connection, follow the exact live Cloud connection status action returned for that connection under the openwork-cloud server instructions. Never invent a connection status, connection id, or setup action; if no live status action is available, report that limitation.
|
|
50
|
+
For Google Drive uploads and Gmail attachments, Cloud search results alone do not establish that upload is unavailable. Discover the native Gmail draft schema before declaring attachments unsupported: OpenWork fulfills its attachment paths through host file transport, preserving the selected connection. Draft creation does not send email; sending is a separate, permissioned operation that requires the user's authorization. For Google Drive uploads, when OpenWork host tools are exposed, first query extension.actions with extensionId openwork-cloud-uploads. Only if drive_upload_file is returned and the user authorizes the upload, execute that exact action through openwork_execute id extension.call with extensionId openwork-cloud-uploads and args containing path and optional folderId. This host action supports files up to 4 MiB under authorized roots and preserves bytes outside model context. Drive uses the member's default Google connection and cannot select another named connection; do not substitute it for a requested account unless it is confirmed to be the default. If using the Gmail host action directly, only if gmail_create_draft_with_attachments is returned and the user authorizes draft creation, execute it with authorized paths and draft fields from its returned input schema, including the selected connectionId. It creates a reviewable draft, does not send email, and supports up to 10 files totaling 4 MiB. The bridge uses the Cloud backend member connection, not local Google credentials. Never load file bytes into model context or tool arguments, extract tokens, or use shell uploads as a fallback. If host tools or the action are absent, including in external MCP-only clients, report that limitation rather than claiming this host upload route is available. Do not retry or switch routes after an uncertain result; verify whether the draft was created first.`;
|
|
51
|
+
export const OPENWORK_EXTENSION_DISCOVERY_INSTRUCTION = `If the user asks for something you cannot do with obvious built-in tools, check OpenWork extensions before saying the capability is unavailable. Use openwork_query with id extension.actions to inspect available extension actions, then openwork_execute with id extension.call for the matching action. Do not use another route to bypass a failed connection; follow its connection guidance. ${OPENWORK_GOOGLE_CONNECTION_INSTRUCTION}`;
|
|
52
|
+
export const OPENWORK_CLOUD_SKILL_AUTHORING_INSTRUCTION = "Skill creation: Cloud. When the user asks to create a skill, retrieve and follow the listed create-skill remote skill by calling openwork-cloud_get_skill with { name: \"create-skill\" }, or openwork-cloud_execute_capability with its exact <capability> when get_skill is not exposed. Create the skill in OpenWork Cloud as a private plugin, not in the workspace. For later steps, use share-plugin when the user wants a specific person or team to use a skill, and use add-to-marketplace or add-user-to-marketplace only when the user asks. Use a workspace-local skill only when the user explicitly requests one. Do not create both copies.";
|
|
53
|
+
export const OPENWORK_LOCAL_SKILL_AUTHORING_INSTRUCTION = "Skill creation: Local. Create or update a workspace-local skill only when the user requests one. Keep one skill in .opencode/skills/<skill-name>/SKILL.md, validate it, and re-read it after writing. Do not create a Cloud copy.";
|
|
54
|
+
export const OPENWORK_ON_DEMAND_DISCOVERY_INSTRUCTION = `For remote skills and plugin instructions, read the exact known remote skill with openwork-cloud_get_skill by its name or capability, or list every available one with openwork-cloud_list_skills; when those tools are not exposed, execute the exact known remote skill capability with openwork-cloud_execute_capability, or discover it with openwork-cloud_search_capabilities, then execute the exact returned name and follow its instructions. Discover Workflows and Automations on demand; read live before reporting their current state. Follow the openwork-cloud server instructions when its tools are exposed. No Cloud readiness probe has been performed for this prompt; do not infer that Cloud is ready, disconnected, or unavailable.
|
|
55
|
+
When the user asks to create a Cloud skill, read the create-skill remote skill with openwork-cloud_get_skill and follow it to create a private Cloud plugin. For skill creation without an explicit local request, read create-skill rather than defaulting to a local copy because Cloud is unprobed. Discover share-plugin for requested sharing, or add-to-marketplace and add-user-to-marketplace when requested. Do not create both copies. ${OPENWORK_LOCAL_SKILL_AUTHORING_INSTRUCTION}`;
|
|
56
|
+
// Cloud availability plus shared Google guidance. The base agent prompt names the two
|
|
57
|
+
// Connect tools and the catalog rule, and the detailed Connect contract
|
|
58
|
+
// (search-first discovery, MCP Apps, connection_status handling, schema
|
|
59
|
+
// guidance, retry semantics, "a successful search proves authorization")
|
|
60
|
+
// ships with the connection itself as the openwork-cloud server's MCP
|
|
61
|
+
// initialize instructions — guaranteed present exactly when this "ready"
|
|
62
|
+
// steering is selected. Restating either here costs characters on every
|
|
63
|
+
// request and drifts.
|
|
64
|
+
export const OPENWORK_CLOUD_CONNECTION_INSTRUCTION = `The OpenWork Cloud connection is verified ready for this exact workspace/model. The openwork-cloud server instructions in this prompt are authoritative for search-first discovery, MCP Apps, connection_status results, schema guidance, and retry rules; follow them instead of improvising. ${OPENWORK_EXTENSION_DISCOVERY_INSTRUCTION}`;
|
|
65
|
+
export const OPENWORK_CONNECT_SIGN_IN_INSTRUCTION = `${OPENWORK_EXTENSION_DISCOVERY_INSTRUCTION} OpenWork Cloud is not signed in or no desired agent access configuration exists for this workspace. Direct the user to sign in to OpenWork and connect the service in Settings → Connect.`;
|
|
66
|
+
export const OPENWORK_CONNECT_DISABLED_INSTRUCTION = `${OPENWORK_EXTENSION_DISCOVERY_INSTRUCTION} OpenWork Cloud agent access is explicitly disabled for this workspace. Explain that the user can enable agent access in Settings → Connect.`;
|
|
67
|
+
const OPENWORK_CLOUD_MCP_NAME = "openwork-cloud";
|
|
68
|
+
function isRecord(value) {
|
|
69
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
70
|
+
}
|
|
71
|
+
function readString(value) {
|
|
72
|
+
return typeof value === "string" && value.trim().length > 0 ? value.trim() : undefined;
|
|
73
|
+
}
|
|
74
|
+
function getRecordProperty(value, key) {
|
|
75
|
+
return isRecord(value) ? value[key] : undefined;
|
|
76
|
+
}
|
|
77
|
+
function readNestedString(value, keys) {
|
|
78
|
+
let current = value;
|
|
79
|
+
for (const key of keys)
|
|
80
|
+
current = getRecordProperty(current, key);
|
|
81
|
+
return readString(current);
|
|
82
|
+
}
|
|
83
|
+
function readContext(input) {
|
|
84
|
+
const context = getRecordProperty(input, "context");
|
|
85
|
+
const session = getRecordProperty(input, "session");
|
|
86
|
+
const directory = readNestedString(input, ["directory"]) ?? readNestedString(context, ["directory"]) ?? readNestedString(session, ["directory"]);
|
|
87
|
+
const worktree = readNestedString(input, ["worktree"]) ?? readNestedString(context, ["worktree"]) ?? readNestedString(session, ["worktree"]);
|
|
88
|
+
const workspaceId = readNestedString(input, ["workspaceId"]) ?? readNestedString(input, ["workspaceID"]) ?? readNestedString(context, ["workspaceId"]) ?? readNestedString(context, ["workspaceID"]);
|
|
89
|
+
return {
|
|
90
|
+
...(directory ? { directory } : {}),
|
|
91
|
+
...(worktree ? { worktree } : {}),
|
|
92
|
+
...(workspaceId ? { workspaceId } : {}),
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
function readProviderModel(input) {
|
|
96
|
+
const model = getRecordProperty(input, "model");
|
|
97
|
+
const provider = readNestedString(model, ["providerID"]) ?? readNestedString(model, ["provider"]) ?? readNestedString(input, ["provider"]);
|
|
98
|
+
const modelId = readNestedString(model, ["modelID"]) ?? readNestedString(model, ["id"]) ?? readNestedString(input, ["modelID"]);
|
|
99
|
+
if (provider && modelId)
|
|
100
|
+
return { provider, model: modelId };
|
|
101
|
+
const combined = modelId?.includes("/") ? modelId : readNestedString(input, ["model"]) ?? readNestedString(model, ["name"]);
|
|
102
|
+
if (combined?.includes("/")) {
|
|
103
|
+
const [providerPart, ...modelParts] = combined.split("/");
|
|
104
|
+
const joinedModel = modelParts.join("/").trim();
|
|
105
|
+
if (providerPart?.trim() && joinedModel)
|
|
106
|
+
return { provider: providerPart.trim(), model: joinedModel };
|
|
107
|
+
}
|
|
108
|
+
return undefined;
|
|
109
|
+
}
|
|
110
|
+
function serverUrl() {
|
|
111
|
+
return String(process.env.OPENWORK_SERVER_URL || "").replace(/\/$/, "");
|
|
112
|
+
}
|
|
113
|
+
function serverToken() {
|
|
114
|
+
return String(process.env.OPENWORK_SERVER_TOKEN || "");
|
|
115
|
+
}
|
|
116
|
+
function requireOpenWorkServer() {
|
|
117
|
+
const url = serverUrl();
|
|
118
|
+
const token = serverToken();
|
|
119
|
+
if (!url || !token) {
|
|
120
|
+
throw new Error("OpenWork extension tools are only available when OpenCode is launched by OpenWork.");
|
|
121
|
+
}
|
|
122
|
+
return { url, token };
|
|
123
|
+
}
|
|
124
|
+
async function parseResponse(response) {
|
|
125
|
+
const text = await response.text();
|
|
126
|
+
if (!text)
|
|
127
|
+
return null;
|
|
128
|
+
try {
|
|
129
|
+
return JSON.parse(text);
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
return { message: text };
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
function getStringProperty(value, key) {
|
|
136
|
+
if (!isRecord(value))
|
|
137
|
+
return null;
|
|
138
|
+
const property = value[key];
|
|
139
|
+
return typeof property === "string" ? property : null;
|
|
140
|
+
}
|
|
141
|
+
function errorMessage(payload, fallback) {
|
|
142
|
+
return getStringProperty(payload, "message") ?? getStringProperty(payload, "code") ?? fallback;
|
|
143
|
+
}
|
|
144
|
+
function readEngineDirectory(input, fallback) {
|
|
145
|
+
const context = readContext(input);
|
|
146
|
+
return context.directory ?? context.worktree ?? readString(fallback);
|
|
147
|
+
}
|
|
148
|
+
function engineStatusPayload(result) {
|
|
149
|
+
if (!isRecord(result))
|
|
150
|
+
return result;
|
|
151
|
+
const data = result.data;
|
|
152
|
+
if (data !== undefined)
|
|
153
|
+
return data;
|
|
154
|
+
if (result.error !== undefined)
|
|
155
|
+
throw new Error("OpenCode MCP status request failed");
|
|
156
|
+
const responseOk = getRecordProperty(result.response, "ok");
|
|
157
|
+
if (responseOk === false)
|
|
158
|
+
throw new Error("OpenCode MCP status request failed");
|
|
159
|
+
return result;
|
|
160
|
+
}
|
|
161
|
+
function readEngineMcpStatus(result) {
|
|
162
|
+
const entry = getRecordProperty(engineStatusPayload(result), OPENWORK_CLOUD_MCP_NAME);
|
|
163
|
+
if (entry === undefined)
|
|
164
|
+
return { found: false };
|
|
165
|
+
if (typeof entry === "string")
|
|
166
|
+
return { found: true, status: readString(entry) };
|
|
167
|
+
return { found: true, status: readNestedString(entry, ["status"]) };
|
|
168
|
+
}
|
|
169
|
+
async function fetchEngineMcpStatus(input, engine) {
|
|
170
|
+
if (!engine.client)
|
|
171
|
+
return { found: false };
|
|
172
|
+
const directory = readEngineDirectory(input, engine.directory);
|
|
173
|
+
const request = directory ? { query: { directory } } : undefined;
|
|
174
|
+
return readEngineMcpStatus(await engine.client.mcp.status(request));
|
|
175
|
+
}
|
|
176
|
+
async function fetchOpenWorkConnectState(input, fetcher) {
|
|
177
|
+
const { url, token } = requireOpenWorkServer();
|
|
178
|
+
const context = readContext(input);
|
|
179
|
+
const providerModel = readProviderModel(input);
|
|
180
|
+
const query = new URLSearchParams();
|
|
181
|
+
const workspaceId = context.workspaceId ?? context.workspaceID;
|
|
182
|
+
const directory = context.worktree ?? context.directory;
|
|
183
|
+
if (workspaceId)
|
|
184
|
+
query.set("workspaceId", workspaceId);
|
|
185
|
+
if (directory)
|
|
186
|
+
query.set("directory", directory);
|
|
187
|
+
if (providerModel) {
|
|
188
|
+
query.set("provider", providerModel.provider);
|
|
189
|
+
query.set("model", providerModel.model);
|
|
190
|
+
}
|
|
191
|
+
const suffix = query.size ? `?${query.toString()}` : "";
|
|
192
|
+
const response = await fetcher(`${url}/experimental/connect/state${suffix}`, {
|
|
193
|
+
headers: { Authorization: `Bearer ${token}` },
|
|
194
|
+
});
|
|
195
|
+
const payload = await parseResponse(response);
|
|
196
|
+
if (!response.ok)
|
|
197
|
+
throw new Error(errorMessage(payload, "OpenWork connect state request failed"));
|
|
198
|
+
const parsed = connectStateResponseSchema.parse(payload);
|
|
199
|
+
return {
|
|
200
|
+
connectEnabled: parsed.connectEnabled,
|
|
201
|
+
connectCatalogEnabled: parsed.connectCatalogEnabled ?? parsed.connectEnabled,
|
|
202
|
+
cloudMcpPresent: parsed.cloudMcpPresent,
|
|
203
|
+
cloudHealth: parsed.cloudHealth ?? null,
|
|
204
|
+
...(parsed.workspace ? { workspace: parsed.workspace } : {}),
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
export async function resolveOpenWorkConnectSkillInstruction(_input, fetcher = fetch) {
|
|
208
|
+
try {
|
|
209
|
+
const { url, token } = requireOpenWorkServer();
|
|
210
|
+
// Connect skills are server-scoped; workspace/directory query params are unused.
|
|
211
|
+
const response = await fetcher(`${url}/experimental/connect/skills`, {
|
|
212
|
+
headers: { Authorization: `Bearer ${token}` },
|
|
213
|
+
});
|
|
214
|
+
if (!response.ok)
|
|
215
|
+
return "";
|
|
216
|
+
return connectCatalogResponseSchema.parse(await parseResponse(response)).instruction;
|
|
217
|
+
}
|
|
218
|
+
catch {
|
|
219
|
+
return "";
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
export async function resolveOpenWorkAutomationInstruction(_input, fetcher = fetch) {
|
|
223
|
+
try {
|
|
224
|
+
const { url, token } = requireOpenWorkServer();
|
|
225
|
+
// Automations are account-scoped like Connect skills, not per-workspace.
|
|
226
|
+
const response = await fetcher(`${url}/experimental/connect/automations`, {
|
|
227
|
+
headers: { Authorization: `Bearer ${token}` },
|
|
228
|
+
});
|
|
229
|
+
if (!response.ok)
|
|
230
|
+
return "";
|
|
231
|
+
return connectCatalogResponseSchema.parse(await parseResponse(response)).instruction;
|
|
232
|
+
}
|
|
233
|
+
catch {
|
|
234
|
+
return "";
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
export function composeOpenWorkExtensionDiscoveryInstruction(state) {
|
|
238
|
+
if (!state)
|
|
239
|
+
return OPENWORK_EXTENSION_DISCOVERY_INSTRUCTION;
|
|
240
|
+
if (state.workspace?.resolution && state.workspace.resolution !== "resolved")
|
|
241
|
+
return OPENWORK_EXTENSION_DISCOVERY_INSTRUCTION;
|
|
242
|
+
const health = state.cloudHealth;
|
|
243
|
+
if (health?.usable === true && health.usableByCurrentModel !== false)
|
|
244
|
+
return OPENWORK_CLOUD_CONNECTION_INSTRUCTION;
|
|
245
|
+
if (health?.phase === "engine_disabled" || health?.firstFailure?.code === "engine_disabled" || health?.firstFailure?.code === "cloud_mcp_disabled")
|
|
246
|
+
return OPENWORK_CONNECT_DISABLED_INSTRUCTION;
|
|
247
|
+
if (health) {
|
|
248
|
+
if (!health.desired.present || health.firstFailure?.code === "cloud_mcp_missing")
|
|
249
|
+
return OPENWORK_CONNECT_SIGN_IN_INSTRUCTION;
|
|
250
|
+
return OPENWORK_EXTENSION_DISCOVERY_INSTRUCTION;
|
|
251
|
+
}
|
|
252
|
+
if (!state.connectCatalogEnabled)
|
|
253
|
+
return OPENWORK_EXTENSION_DISCOVERY_INSTRUCTION;
|
|
254
|
+
return OPENWORK_CONNECT_SIGN_IN_INSTRUCTION;
|
|
255
|
+
}
|
|
256
|
+
export function composeSteeringFromEngineMcpStatus(status) {
|
|
257
|
+
if (status === "connected")
|
|
258
|
+
return OPENWORK_CLOUD_CONNECTION_INSTRUCTION;
|
|
259
|
+
if (status === "disabled")
|
|
260
|
+
return OPENWORK_CONNECT_DISABLED_INSTRUCTION;
|
|
261
|
+
if (status === "needs_auth" || status === "needs_client_registration")
|
|
262
|
+
return OPENWORK_CONNECT_SIGN_IN_INSTRUCTION;
|
|
263
|
+
return OPENWORK_EXTENSION_DISCOVERY_INSTRUCTION;
|
|
264
|
+
}
|
|
265
|
+
export function composeSkillAuthoringInstruction(extensionInstruction) {
|
|
266
|
+
if (extensionInstruction === OPENWORK_CLOUD_CONNECTION_INSTRUCTION) {
|
|
267
|
+
return { mode: "cloud", prompt: OPENWORK_CLOUD_SKILL_AUTHORING_INSTRUCTION };
|
|
268
|
+
}
|
|
269
|
+
return { mode: "local", prompt: OPENWORK_LOCAL_SKILL_AUTHORING_INSTRUCTION };
|
|
270
|
+
}
|
|
271
|
+
export function resetOpenWorkExtensionDiscoveryInstructionCacheForTests() {
|
|
272
|
+
// Retained for older tests; steering is deliberately uncached so repair is observed immediately.
|
|
273
|
+
}
|
|
274
|
+
export async function resolveOpenWorkExtensionDiscoveryInstruction(input, fetcher = fetch, engine = {}) {
|
|
275
|
+
if (engine.client) {
|
|
276
|
+
try {
|
|
277
|
+
// Invariant: the OpenCode engine owns MCP registration and builds the
|
|
278
|
+
// prompt tool list, so tool-availability steering must come from that
|
|
279
|
+
// same in-process MCP state. Server health probes may fail for reasons
|
|
280
|
+
// (for example corporate TLS trust) that do not affect engine tools.
|
|
281
|
+
const engineStatus = await fetchEngineMcpStatus(input, engine);
|
|
282
|
+
if (engineStatus.found)
|
|
283
|
+
return composeSteeringFromEngineMcpStatus(engineStatus.status);
|
|
284
|
+
}
|
|
285
|
+
catch {
|
|
286
|
+
return OPENWORK_EXTENSION_DISCOVERY_INSTRUCTION;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
try {
|
|
290
|
+
return composeOpenWorkExtensionDiscoveryInstruction(await fetchOpenWorkConnectState(input, fetcher));
|
|
291
|
+
}
|
|
292
|
+
catch {
|
|
293
|
+
return OPENWORK_EXTENSION_DISCOVERY_INSTRUCTION;
|
|
294
|
+
}
|
|
295
|
+
}
|