junhost 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +38 -0
- package/bin/jun.js +106 -0
- package/dist/index.js +338 -0
- package/dist/mcp-server.js +42 -0
- package/package.json +46 -0
- package/ui-dist/assets/BrowserPage-CLwJOnA1.js +1 -0
- package/ui-dist/assets/DashboardPage-DNlY12tH.js +1 -0
- package/ui-dist/assets/FilesPage-CfFJjtlo.js +64 -0
- package/ui-dist/assets/FormContext-6Ydu-jal.js +1 -0
- package/ui-dist/assets/McpPage-Ckmbp2T3.js +1 -0
- package/ui-dist/assets/MemoriesPage-BgBe2rb6.js +1 -0
- package/ui-dist/assets/RunsPage-9w7iFG8N.js +429 -0
- package/ui-dist/assets/SchedulesPage-B5FVZB0F.js +1 -0
- package/ui-dist/assets/SettingsPage-lNZmrgQF.js +1 -0
- package/ui-dist/assets/SkillsPage-BXcSp6ls.js +1 -0
- package/ui-dist/assets/abap-BF8NL95m.js +1 -0
- package/ui-dist/assets/abap-CLvhMVsD.js +1 -0
- package/ui-dist/assets/actionscript-3--17pq3dv.js +1 -0
- package/ui-dist/assets/actionscript-3-8HxPlehu.js +1 -0
- package/ui-dist/assets/ada-Bw5CILjN.js +1 -0
- package/ui-dist/assets/ada-C5qYipkI.js +1 -0
- package/ui-dist/assets/andromeeda-WkhI09AS.js +1 -0
- package/ui-dist/assets/andromeeda-vGVdxbeo.js +1 -0
- package/ui-dist/assets/angular-html-BKhkKBsm.js +1 -0
- package/ui-dist/assets/angular-html-DrvEcI8G.js +1 -0
- package/ui-dist/assets/angular-ts-CYPbMJCA.js +1 -0
- package/ui-dist/assets/angular-ts-D8CUV3s9.js +1 -0
- package/ui-dist/assets/apache-U0d_L8uA.js +1 -0
- package/ui-dist/assets/apache-_o4xIZnD.js +1 -0
- package/ui-dist/assets/apex-CGTLDQj6.js +1 -0
- package/ui-dist/assets/apex-VAyPSnFM.js +1 -0
- package/ui-dist/assets/apl-D7bENxmy.js +1 -0
- package/ui-dist/assets/apl-PcM4Dp7k.js +1 -0
- package/ui-dist/assets/applescript-BeHGDHfZ.js +1 -0
- package/ui-dist/assets/applescript-CCn79oCD.js +1 -0
- package/ui-dist/assets/ara-4CJ0cIlV.js +1 -0
- package/ui-dist/assets/ara-DO_5Wseq.js +1 -0
- package/ui-dist/assets/arc-8BWbC-0s.js +1 -0
- package/ui-dist/assets/architecture-7EHR7CIX-D8QwdCM4.js +1 -0
- package/ui-dist/assets/architectureDiagram-3BPJPVTR-CZU-I50b.js +36 -0
- package/ui-dist/assets/array-BifhSqXX.js +1 -0
- package/ui-dist/assets/asciidoc-CibGaoXl.js +1 -0
- package/ui-dist/assets/asciidoc-DE70LPWp.js +1 -0
- package/ui-dist/assets/asm-Cmm7eHzH.js +1 -0
- package/ui-dist/assets/asm-MXdQGneo.js +1 -0
- package/ui-dist/assets/astro-B1l9MDUT.js +1 -0
- package/ui-dist/assets/astro-DcteBnKj.js +1 -0
- package/ui-dist/assets/aurora-x-C7CFqhAd.js +1 -0
- package/ui-dist/assets/aurora-x-CDeNXAV0.js +1 -0
- package/ui-dist/assets/awk-BWXHIvNe.js +1 -0
- package/ui-dist/assets/awk-DnQEBQqr.js +1 -0
- package/ui-dist/assets/ayu-dark-CRu61w6_.js +1 -0
- package/ui-dist/assets/ayu-dark-DluEY0Gj.js +1 -0
- package/ui-dist/assets/ayu-light-C3h-C4tm.js +1 -0
- package/ui-dist/assets/ayu-light-Dn6O_aYR.js +1 -0
- package/ui-dist/assets/ayu-mirage-Bqwy1Gya.js +1 -0
- package/ui-dist/assets/ayu-mirage-CTjYAbs-.js +1 -0
- package/ui-dist/assets/badge-DjyNiZCE.js +1 -0
- package/ui-dist/assets/ballerina-B7ZEbQpA.js +1 -0
- package/ui-dist/assets/ballerina-CFI0x2Aa.js +1 -0
- package/ui-dist/assets/bat-Bo4NYOV-.js +1 -0
- package/ui-dist/assets/bat-DC-yen0F.js +1 -0
- package/ui-dist/assets/beancount-D-usSTwE.js +1 -0
- package/ui-dist/assets/beancount-D_qoziCN.js +1 -0
- package/ui-dist/assets/berry-BKmXRlIk.js +1 -0
- package/ui-dist/assets/berry-DKpUyyne.js +1 -0
- package/ui-dist/assets/bibtex-Ci_nEsc7.js +1 -0
- package/ui-dist/assets/bibtex-DPT_ISlA.js +1 -0
- package/ui-dist/assets/bicep-BSNFxtkx.js +1 -0
- package/ui-dist/assets/bicep-CUHmPFLl.js +1 -0
- package/ui-dist/assets/bird2-C2hNVINV.js +1 -0
- package/ui-dist/assets/bird2-C6vDhewU.js +1 -0
- package/ui-dist/assets/blade-6YnoPBU8.js +1 -0
- package/ui-dist/assets/blade-BlkqRXu6.js +1 -0
- package/ui-dist/assets/blockDiagram-GPEHLZMM-CyBud8P5.js +132 -0
- package/ui-dist/assets/bsl-BkkzgIyY.js +1 -0
- package/ui-dist/assets/bsl-DJOyloKD.js +1 -0
- package/ui-dist/assets/bundle-mjs-DssaXR6m.js +1 -0
- package/ui-dist/assets/button-Cg-0y2B2.js +1 -0
- package/ui-dist/assets/c-PpPxyn8g.js +1 -0
- package/ui-dist/assets/c-Y1DAQKNJ.js +1 -0
- package/ui-dist/assets/c3-BFHwR3_K.js +1 -0
- package/ui-dist/assets/c3-CnJL0r0V.js +1 -0
- package/ui-dist/assets/c4Diagram-AAUBKEIU--J4ICgL4.js +10 -0
- package/ui-dist/assets/cadence-CQ2zXKGN.js +1 -0
- package/ui-dist/assets/cadence-Cfz1Ugii.js +1 -0
- package/ui-dist/assets/cairo-CDc8os0h.js +1 -0
- package/ui-dist/assets/cairo-DLTphjLi.js +1 -0
- package/ui-dist/assets/catppuccin-frappe-3VR1Za6u.js +1 -0
- package/ui-dist/assets/catppuccin-frappe-DFlFW5gh.js +1 -0
- package/ui-dist/assets/catppuccin-latte-CpxdcXpJ.js +1 -0
- package/ui-dist/assets/catppuccin-latte-DwIHMF0Q.js +1 -0
- package/ui-dist/assets/catppuccin-macchiato-DIdIQ04K.js +1 -0
- package/ui-dist/assets/catppuccin-macchiato-DYnBP6_5.js +1 -0
- package/ui-dist/assets/catppuccin-mocha-Co3Xjl64.js +1 -0
- package/ui-dist/assets/catppuccin-mocha-DYhrFGRu.js +1 -0
- package/ui-dist/assets/channel-CXOCC3Ms.js +1 -0
- package/ui-dist/assets/checkbox-Dl42vHZu.js +1 -0
- package/ui-dist/assets/chunk-2J33WTMH-BDb1cFmy.js +1 -0
- package/ui-dist/assets/chunk-3OPIFGDE-BlluxIcQ.js +62 -0
- package/ui-dist/assets/chunk-4BX2VUAB-C0kf5ycP.js +1 -0
- package/ui-dist/assets/chunk-55IACEB6-QyFAFTWp.js +1 -0
- package/ui-dist/assets/chunk-5ZQYHXKU-CKTcuPiD.js +2 -0
- package/ui-dist/assets/chunk-727SXJPM-MZn2xvWx.js +206 -0
- package/ui-dist/assets/chunk-AQP2D5EJ-BJaTZvWO.js +231 -0
- package/ui-dist/assets/chunk-BO2N2NFS-BnH2G-m5.js +131 -0
- package/ui-dist/assets/chunk-BSJP7CBP-DIpfLhEz.js +1 -0
- package/ui-dist/assets/chunk-CSCIHK7Q-CXkHF5UK.js +125 -0
- package/ui-dist/assets/chunk-Cyuzqnbw.js +1 -0
- package/ui-dist/assets/chunk-FMBD7UC4-C9D6P7Uq.js +15 -0
- package/ui-dist/assets/chunk-KSCS5N6A-BahjoFv5.js +10 -0
- package/ui-dist/assets/chunk-L5ZTLDWV-Bx4WHt-z.js +1 -0
- package/ui-dist/assets/chunk-LZXEDZCA-CkFznL5l.js +2 -0
- package/ui-dist/assets/chunk-ND2GUHAM-B8gmrqM9.js +1 -0
- package/ui-dist/assets/chunk-NNHCCRGN-DlpIbxXb.js +159 -0
- package/ui-dist/assets/chunk-NZK2D7GU-C18DTyig.js +1 -0
- package/ui-dist/assets/chunk-O5CBEL6O-DhXgjXO_.js +70 -0
- package/ui-dist/assets/chunk-QZHKN3VN-CyVdgm44.js +1 -0
- package/ui-dist/assets/chunk-WU5MYG2G-DakMffny.js +1 -0
- package/ui-dist/assets/chunk-XPW4576I-ru3A962d.js +32 -0
- package/ui-dist/assets/circle-x-BSTd_gmE.js +1 -0
- package/ui-dist/assets/clarity-CCl-fyB_.js +1 -0
- package/ui-dist/assets/clarity-SemFz856.js +1 -0
- package/ui-dist/assets/classDiagram-4FO5ZUOK-DMdoabn-.js +1 -0
- package/ui-dist/assets/classDiagram-v2-Q7XG4LA2-DMdoabn-.js +1 -0
- package/ui-dist/assets/clojure-D5q7Jl6u.js +1 -0
- package/ui-dist/assets/clojure-DqKBuwfJ.js +1 -0
- package/ui-dist/assets/cmake-Bj61d0ZC.js +1 -0
- package/ui-dist/assets/cmake-CbIxKMg_.js +1 -0
- package/ui-dist/assets/cobol-BoXxFQjh.js +1 -0
- package/ui-dist/assets/cobol-IOjEjPmG.js +1 -0
- package/ui-dist/assets/codeowners-BhqpE35O.js +1 -0
- package/ui-dist/assets/codeowners-C8r90Shi.js +1 -0
- package/ui-dist/assets/codeql-Bq651Y_e.js +1 -0
- package/ui-dist/assets/codeql-oeQT6MSM.js +1 -0
- package/ui-dist/assets/coffee-B5TREocO.js +1 -0
- package/ui-dist/assets/coffee-Dl-rf7k6.js +1 -0
- package/ui-dist/assets/collapsible-BdLJt-lG.js +1 -0
- package/ui-dist/assets/common-lisp-8vnVPjBz.js +1 -0
- package/ui-dist/assets/common-lisp-Cv5bFMCO.js +1 -0
- package/ui-dist/assets/coq-Bol-RJ7y.js +1 -0
- package/ui-dist/assets/coq-BrsZFFmf.js +1 -0
- package/ui-dist/assets/cose-bilkent-S5V4N54A-BPg4WNhP.js +1 -0
- package/ui-dist/assets/cpp-C4ceAJBi.js +1 -0
- package/ui-dist/assets/cpp-CVIk4zoB.js +1 -0
- package/ui-dist/assets/crystal-CgtjlE18.js +1 -0
- package/ui-dist/assets/crystal-CvUuUt6_.js +1 -0
- package/ui-dist/assets/csharp-Ct8U2NOr.js +1 -0
- package/ui-dist/assets/csharp-oqKa8noW.js +1 -0
- package/ui-dist/assets/css-D7o5g6xi.js +1 -0
- package/ui-dist/assets/css-Dflf0SUa.js +1 -0
- package/ui-dist/assets/csv-Dx-8-gkx.js +1 -0
- package/ui-dist/assets/csv-aQe9eWwB.js +1 -0
- package/ui-dist/assets/cue-CE9AQfxI.js +1 -0
- package/ui-dist/assets/cue-Dw4Jatp1.js +1 -0
- package/ui-dist/assets/cypher-Ce1ftazo.js +1 -0
- package/ui-dist/assets/cypher-ClKdZ_lG.js +1 -0
- package/ui-dist/assets/cytoscape.esm-h6BdjjI9.js +321 -0
- package/ui-dist/assets/d-C5Cd7-kE.js +1 -0
- package/ui-dist/assets/d-qD-0Kul2.js +1 -0
- package/ui-dist/assets/dagre-BM42HDAG-CRPnH9-w.js +4 -0
- package/ui-dist/assets/dagre-Bx709z4p.js +1 -0
- package/ui-dist/assets/dark-plus-Cs2F2srj.js +1 -0
- package/ui-dist/assets/dark-plus-GAt2ZgX8.js +1 -0
- package/ui-dist/assets/dart-CnvKMtbv.js +1 -0
- package/ui-dist/assets/dart-DkHntEIa.js +1 -0
- package/ui-dist/assets/dax-8Zbmoo6g.js +1 -0
- package/ui-dist/assets/dax-BkyTk9wS.js +1 -0
- package/ui-dist/assets/defaultLocale-C8Fc0cco.js +1 -0
- package/ui-dist/assets/desktop-DfUumfaM.js +1 -0
- package/ui-dist/assets/desktop-Dlh5hvp9.js +1 -0
- package/ui-dist/assets/diagram-2AECGRRQ-BHmnvDJu.js +43 -0
- package/ui-dist/assets/diagram-5GNKFQAL-CnuSOf5i.js +10 -0
- package/ui-dist/assets/diagram-KO2AKTUF-DkD3Oyzq.js +3 -0
- package/ui-dist/assets/diagram-LMA3HP47-qngr_ayi.js +24 -0
- package/ui-dist/assets/diagram-OG6HWLK6-BUXAAFlB.js +24 -0
- package/ui-dist/assets/dialog-Bl8-9u35.js +1 -0
- package/ui-dist/assets/diff-COJGj3FI.js +1 -0
- package/ui-dist/assets/diff-woXpYk--.js +1 -0
- package/ui-dist/assets/dist-D4B_Bs5p.js +1 -0
- package/ui-dist/assets/docker-BRkDW2k5.js +1 -0
- package/ui-dist/assets/docker-IyjqRm3v.js +1 -0
- package/ui-dist/assets/dotenv-BCLQtltE.js +1 -0
- package/ui-dist/assets/dotenv-_5a1GRtc.js +1 -0
- package/ui-dist/assets/dracula-BHWKrbxM.js +1 -0
- package/ui-dist/assets/dracula-C2uKkzgK.js +1 -0
- package/ui-dist/assets/dracula-soft-5eyTD99u.js +1 -0
- package/ui-dist/assets/dracula-soft-D1bVjxWZ.js +1 -0
- package/ui-dist/assets/dream-maker-Bqk5m4Bz.js +1 -0
- package/ui-dist/assets/dream-maker-DW3nJb8Q.js +1 -0
- package/ui-dist/assets/edge-CmXZi-az.js +1 -0
- package/ui-dist/assets/edge-DoVTVjme.js +1 -0
- package/ui-dist/assets/elixir-BoRIkjDi.js +1 -0
- package/ui-dist/assets/elixir-CzgPtVDf.js +1 -0
- package/ui-dist/assets/elm-BN_gLVH_.js +1 -0
- package/ui-dist/assets/elm-Cm7sFdI1.js +1 -0
- package/ui-dist/assets/emacs-lisp-B4R74twV.js +1 -0
- package/ui-dist/assets/emacs-lisp-C9PiwqqW.js +1 -0
- package/ui-dist/assets/erDiagram-TEJ5UH35-B7fmkd3a.js +85 -0
- package/ui-dist/assets/erb-DuMAGb6i.js +1 -0
- package/ui-dist/assets/erb-p0q977En.js +1 -0
- package/ui-dist/assets/erlang-Cphh6RMH.js +1 -0
- package/ui-dist/assets/erlang-Dej7b2OY.js +1 -0
- package/ui-dist/assets/eventmodeling-FCH6USID-DUPVuqbK.js +1 -0
- package/ui-dist/assets/everforest-dark-D-DlICQR.js +1 -0
- package/ui-dist/assets/everforest-dark-sB-x3p7T.js +1 -0
- package/ui-dist/assets/everforest-light-CeVdGHYG.js +1 -0
- package/ui-dist/assets/everforest-light-Df2xbC6M.js +1 -0
- package/ui-dist/assets/external-link-DiZ5uX5z.js +1 -0
- package/ui-dist/assets/fennel-Bb9CuKP4.js +1 -0
- package/ui-dist/assets/fennel-DQxkIbk2.js +1 -0
- package/ui-dist/assets/fish-3TGl8j7I.js +1 -0
- package/ui-dist/assets/fish-BJitypiv.js +1 -0
- package/ui-dist/assets/flowDiagram-I6XJVG4X-D3K28Pdy.js +162 -0
- package/ui-dist/assets/fluent-C03EYrpw.js +1 -0
- package/ui-dist/assets/fluent-D94vzzSS.js +1 -0
- package/ui-dist/assets/fortran-fixed-form-DEKoE2YW.js +1 -0
- package/ui-dist/assets/fortran-fixed-form-RVbzjQ2q.js +1 -0
- package/ui-dist/assets/fortran-free-form-CYNrtFtB.js +1 -0
- package/ui-dist/assets/fortran-free-form-EhmKDVgM.js +1 -0
- package/ui-dist/assets/fsharp-D13ZGOAj.js +1 -0
- package/ui-dist/assets/fsharp-DKW21_Cq.js +1 -0
- package/ui-dist/assets/ganttDiagram-6RSMTGT7-CXzmskXJ.js +292 -0
- package/ui-dist/assets/gdresource-C0sCabJj.js +1 -0
- package/ui-dist/assets/gdresource-b7MixKdf.js +1 -0
- package/ui-dist/assets/gdscript-Cp2uCuqX.js +1 -0
- package/ui-dist/assets/gdscript-DbNIuFFJ.js +1 -0
- package/ui-dist/assets/gdshader-C7BToOo8.js +1 -0
- package/ui-dist/assets/gdshader-CBce3t8t.js +1 -0
- package/ui-dist/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
- package/ui-dist/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
- package/ui-dist/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
- package/ui-dist/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
- package/ui-dist/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
- package/ui-dist/assets/genie-CV2tkWYe.js +1 -0
- package/ui-dist/assets/genie-Cxv98QxF.js +1 -0
- package/ui-dist/assets/gherkin-CcdVVABv.js +1 -0
- package/ui-dist/assets/gherkin-DExj1W_8.js +1 -0
- package/ui-dist/assets/git-commit-BSykSTBG.js +1 -0
- package/ui-dist/assets/git-commit-BU_RZ1WH.js +1 -0
- package/ui-dist/assets/git-rebase-D2tSwjJb.js +1 -0
- package/ui-dist/assets/git-rebase-DfgjiXG9.js +1 -0
- package/ui-dist/assets/gitGraph-WXDBUCRP-CROsiysY.js +1 -0
- package/ui-dist/assets/gitGraphDiagram-PVQCEYII-BBhICl9b.js +106 -0
- package/ui-dist/assets/github-dark-C-LZuMrd.js +1 -0
- package/ui-dist/assets/github-dark-DwbbXv51.js +1 -0
- package/ui-dist/assets/github-dark-default-CxjRwzl6.js +1 -0
- package/ui-dist/assets/github-dark-default-DXG-b-1a.js +1 -0
- package/ui-dist/assets/github-dark-dimmed-Bx1FflLF.js +1 -0
- package/ui-dist/assets/github-dark-dimmed-Cr1oaoul.js +1 -0
- package/ui-dist/assets/github-dark-high-contrast-B4qJZLZa.js +1 -0
- package/ui-dist/assets/github-dark-high-contrast-B_tTalzw.js +1 -0
- package/ui-dist/assets/github-light-CsVXhIlR.js +1 -0
- package/ui-dist/assets/github-light-EUqPIrTm.js +1 -0
- package/ui-dist/assets/github-light-default-BXViO-2h.js +1 -0
- package/ui-dist/assets/github-light-default-DB_IwZa6.js +1 -0
- package/ui-dist/assets/github-light-high-contrast-B68TUdTA.js +1 -0
- package/ui-dist/assets/github-light-high-contrast-DLgVeSB-.js +1 -0
- package/ui-dist/assets/gleam-B359wBlW.js +1 -0
- package/ui-dist/assets/gleam-CSRkHgEL.js +1 -0
- package/ui-dist/assets/glimmer-js--VVKNatA.js +1 -0
- package/ui-dist/assets/glimmer-js-JMWzPMQ2.js +1 -0
- package/ui-dist/assets/glimmer-ts-Bfa_wiNC.js +1 -0
- package/ui-dist/assets/glimmer-ts-DG5GCT78.js +1 -0
- package/ui-dist/assets/glsl-MPwHyiXQ.js +1 -0
- package/ui-dist/assets/glsl-dHcuwXfH.js +1 -0
- package/ui-dist/assets/gn-BdcPb0jv.js +1 -0
- package/ui-dist/assets/gn-ilITqXS6.js +1 -0
- package/ui-dist/assets/gnuplot-7GGW24-e.js +1 -0
- package/ui-dist/assets/gnuplot-DKk0glG7.js +1 -0
- package/ui-dist/assets/go-BJwz_mda.js +1 -0
- package/ui-dist/assets/go-rLFTqkRN.js +1 -0
- package/ui-dist/assets/graphlib-B8gBHxth.js +1 -0
- package/ui-dist/assets/graphql-CdhToEZf.js +1 -0
- package/ui-dist/assets/graphql-NW854Khs.js +1 -0
- package/ui-dist/assets/groovy-CacY0gHj.js +1 -0
- package/ui-dist/assets/groovy-DyoOSCFW.js +1 -0
- package/ui-dist/assets/gruvbox-dark-hard-C820rvS2.js +1 -0
- package/ui-dist/assets/gruvbox-dark-hard-DXm60lX3.js +1 -0
- package/ui-dist/assets/gruvbox-dark-medium-BPjhmG05.js +1 -0
- package/ui-dist/assets/gruvbox-dark-medium-GE2thSmD.js +1 -0
- package/ui-dist/assets/gruvbox-dark-soft-04Cj-4VZ.js +1 -0
- package/ui-dist/assets/gruvbox-dark-soft-MrdJrrXF.js +1 -0
- package/ui-dist/assets/gruvbox-light-hard-BC_s9l72.js +1 -0
- package/ui-dist/assets/gruvbox-light-hard-K6wSn29D.js +1 -0
- package/ui-dist/assets/gruvbox-light-medium-BAWPOn9u.js +1 -0
- package/ui-dist/assets/gruvbox-light-medium-CVy3aSlc.js +1 -0
- package/ui-dist/assets/gruvbox-light-soft-BSMLrYjP.js +1 -0
- package/ui-dist/assets/gruvbox-light-soft-DNgJjaY0.js +1 -0
- package/ui-dist/assets/hack-C4J_0T1S.js +1 -0
- package/ui-dist/assets/hack-CSl79E5u.js +1 -0
- package/ui-dist/assets/haml-Dmb1YmHj.js +1 -0
- package/ui-dist/assets/haml-qGg_91I2.js +1 -0
- package/ui-dist/assets/handlebars-BU7OV8YS.js +1 -0
- package/ui-dist/assets/handlebars-Du8DtnRB.js +1 -0
- package/ui-dist/assets/haskell-D8IpX4py.js +1 -0
- package/ui-dist/assets/haskell-Dsfw-pfZ.js +1 -0
- package/ui-dist/assets/haxe-BZXihDV-.js +1 -0
- package/ui-dist/assets/haxe-OTjmBuCE.js +1 -0
- package/ui-dist/assets/hcl-Dh228itO.js +1 -0
- package/ui-dist/assets/hcl-o1Ej_Blw.js +1 -0
- package/ui-dist/assets/highlighted-body-OFNGDK62-woHDdMrg.js +1 -0
- package/ui-dist/assets/hjson-C0zQIMrr.js +1 -0
- package/ui-dist/assets/hjson-CxZEssPk.js +1 -0
- package/ui-dist/assets/hlsl-BxIm9IaD.js +1 -0
- package/ui-dist/assets/hlsl-Cvrh5tZx.js +1 -0
- package/ui-dist/assets/horizon-0-RkHfro.js +1 -0
- package/ui-dist/assets/horizon-CE9ld1lL.js +1 -0
- package/ui-dist/assets/horizon-bright-Br1oVSNq.js +1 -0
- package/ui-dist/assets/horizon-bright-DSNQnXHK.js +1 -0
- package/ui-dist/assets/houston-CsvMBhTu.js +1 -0
- package/ui-dist/assets/houston-KyjWKfuY.js +1 -0
- package/ui-dist/assets/html-Kpl3bQKd.js +1 -0
- package/ui-dist/assets/html-derivative-BEEWNZ8Y.js +1 -0
- package/ui-dist/assets/html-derivative-CWPAmHEG.js +1 -0
- package/ui-dist/assets/html-x4KE3xEi.js +1 -0
- package/ui-dist/assets/http-CTnm0cit.js +1 -0
- package/ui-dist/assets/http-HvMG3K54.js +1 -0
- package/ui-dist/assets/hurl-CLh1t2ES.js +1 -0
- package/ui-dist/assets/hurl-CpwzV4SP.js +1 -0
- package/ui-dist/assets/hxml-B0Qn7Nwc.js +1 -0
- package/ui-dist/assets/hxml-B_tSdhCX.js +1 -0
- package/ui-dist/assets/hy-CPusJT2P.js +1 -0
- package/ui-dist/assets/hy-CZbG8q4J.js +1 -0
- package/ui-dist/assets/imba-BNhPHnyc.js +1 -0
- package/ui-dist/assets/imba-DsUTQ-LC.js +1 -0
- package/ui-dist/assets/index-DmmH6oax.css +2 -0
- package/ui-dist/assets/index-j386AZTn.js +12 -0
- package/ui-dist/assets/info-J43DQDTF-DHht6dOt.js +1 -0
- package/ui-dist/assets/infoDiagram-5YYISTIA-Df4LhnuE.js +2 -0
- package/ui-dist/assets/ini-B5eOa1yu.js +1 -0
- package/ui-dist/assets/ini-BXoOzk1L.js +1 -0
- package/ui-dist/assets/init-D6jRqBbL.js +1 -0
- package/ui-dist/assets/input-D4O22yGt.js +1 -0
- package/ui-dist/assets/ishikawaDiagram-YF4QCWOH-B8KMc0In.js +70 -0
- package/ui-dist/assets/java-BIlOlX09.js +1 -0
- package/ui-dist/assets/java-Cst_eZTE.js +1 -0
- package/ui-dist/assets/javascript-DywGHrES.js +1 -0
- package/ui-dist/assets/javascript-i_rUTyCW.js +1 -0
- package/ui-dist/assets/jinja-CaXggA6f.js +1 -0
- package/ui-dist/assets/jinja-ISwn25cN.js +1 -0
- package/ui-dist/assets/jison-D9Fg2JgN.js +1 -0
- package/ui-dist/assets/jison-UUT3aynj.js +1 -0
- package/ui-dist/assets/journeyDiagram-JHISSGLW-Bpr7eOEv.js +139 -0
- package/ui-dist/assets/json-BbGuGINB.js +1 -0
- package/ui-dist/assets/json-DS5j4FfK.js +1 -0
- package/ui-dist/assets/json5-BR5RXkoi.js +1 -0
- package/ui-dist/assets/json5-BXepwZod.js +1 -0
- package/ui-dist/assets/jsonc-CYpm1nAK.js +1 -0
- package/ui-dist/assets/jsonc-jqjqAbF7.js +1 -0
- package/ui-dist/assets/jsonl-CmCQp5Yx.js +1 -0
- package/ui-dist/assets/jsonl-sJJpusUR.js +1 -0
- package/ui-dist/assets/jsonnet-CJTPZ8u_.js +1 -0
- package/ui-dist/assets/jsonnet-DKGWD1zU.js +1 -0
- package/ui-dist/assets/jssm-D6JwwFbv.js +1 -0
- package/ui-dist/assets/jssm-DXw9l8Rf.js +1 -0
- package/ui-dist/assets/jsx-CFyhNHav.js +1 -0
- package/ui-dist/assets/jsx-NH_i07l1.js +1 -0
- package/ui-dist/assets/julia-BRnC1exM.js +1 -0
- package/ui-dist/assets/julia-R8NNmfP1.js +1 -0
- package/ui-dist/assets/just-BWbKChh7.js +1 -0
- package/ui-dist/assets/just-BhhHYlS8.js +1 -0
- package/ui-dist/assets/kanagawa-dragon-7TqgsUPC.js +1 -0
- package/ui-dist/assets/kanagawa-dragon-CXtmUGW6.js +1 -0
- package/ui-dist/assets/kanagawa-lotus-BN08jTvb.js +1 -0
- package/ui-dist/assets/kanagawa-lotus-CqxMQulh.js +1 -0
- package/ui-dist/assets/kanagawa-wave-CTweb8Dz.js +1 -0
- package/ui-dist/assets/kanagawa-wave-D8CNn6T_.js +1 -0
- package/ui-dist/assets/kanban-definition-UN3LZRKU-R8MXwX2D.js +89 -0
- package/ui-dist/assets/katex-U6Climy7.js +1 -0
- package/ui-dist/assets/kdl-CsD5j6eV.js +1 -0
- package/ui-dist/assets/kdl-HHaMlHFB.js +1 -0
- package/ui-dist/assets/key-round-D965pLEl.js +1 -0
- package/ui-dist/assets/kotlin-Bvjw1jyK.js +1 -0
- package/ui-dist/assets/kotlin-DhhofPvG.js +1 -0
- package/ui-dist/assets/kusto-BUv0MjJC.js +1 -0
- package/ui-dist/assets/kusto-C7mF5XQf.js +1 -0
- package/ui-dist/assets/label-CxX4-RmK.js +1 -0
- package/ui-dist/assets/laserwave-CQkdhozh.js +1 -0
- package/ui-dist/assets/laserwave-C_8bwKvT.js +1 -0
- package/ui-dist/assets/latex-D5k_uhWv.js +1 -0
- package/ui-dist/assets/latex-DoFV6f5B.js +1 -0
- package/ui-dist/assets/lean-B2IJXP9Y.js +1 -0
- package/ui-dist/assets/lean-CewbzKMR.js +1 -0
- package/ui-dist/assets/less-BGJv5CZz.js +1 -0
- package/ui-dist/assets/less-DVTAwKKz.js +1 -0
- package/ui-dist/assets/light-plus-CNQ8_7Y0.js +1 -0
- package/ui-dist/assets/light-plus-DVQuIRkW.js +1 -0
- package/ui-dist/assets/line-EyXPCaOi.js +1 -0
- package/ui-dist/assets/linear-BktLjFGX.js +1 -0
- package/ui-dist/assets/liquid-BGxpJKqJ.js +1 -0
- package/ui-dist/assets/liquid-Q0_hzjly.js +1 -0
- package/ui-dist/assets/llvm-Cm23YOpf.js +1 -0
- package/ui-dist/assets/llvm-DjdPfBRh.js +1 -0
- package/ui-dist/assets/log-BNLmms1o.js +1 -0
- package/ui-dist/assets/log-CS10erYd.js +1 -0
- package/ui-dist/assets/logo-Cluzi2Zq.js +1 -0
- package/ui-dist/assets/logo-CmXTaeCJ.js +1 -0
- package/ui-dist/assets/lua-SpZ12qGF.js +1 -0
- package/ui-dist/assets/lua-VoGSg0xb.js +1 -0
- package/ui-dist/assets/luau-CNKltnaQ.js +1 -0
- package/ui-dist/assets/luau-FMPmPwt6.js +1 -0
- package/ui-dist/assets/make--KyFtISL.js +1 -0
- package/ui-dist/assets/make-Dixweg8N.js +1 -0
- package/ui-dist/assets/markdown-BYOwaDjH.js +1 -0
- package/ui-dist/assets/markdown-Bk5jPFPK.js +1 -0
- package/ui-dist/assets/marko-D_aeUD__.js +1 -0
- package/ui-dist/assets/marko-E8KxKzjy.js +1 -0
- package/ui-dist/assets/material-theme-Bm3Qr25_.js +1 -0
- package/ui-dist/assets/material-theme-CAtLaHa3.js +1 -0
- package/ui-dist/assets/material-theme-darker-2IIEA8gg.js +1 -0
- package/ui-dist/assets/material-theme-darker-k-s5Bc6K.js +1 -0
- package/ui-dist/assets/material-theme-lighter-CD6a-c4d.js +1 -0
- package/ui-dist/assets/material-theme-lighter-uhdI0v04.js +1 -0
- package/ui-dist/assets/material-theme-ocean-B3mraInd.js +1 -0
- package/ui-dist/assets/material-theme-ocean-CHQ94UKr.js +1 -0
- package/ui-dist/assets/material-theme-palenight-B5W6OYN7.js +1 -0
- package/ui-dist/assets/material-theme-palenight-DEhAARHw.js +1 -0
- package/ui-dist/assets/matlab-CXouX2WE.js +1 -0
- package/ui-dist/assets/matlab-D7qyCx1q.js +1 -0
- package/ui-dist/assets/mdc-BSifqehP.js +1 -0
- package/ui-dist/assets/mdc-ytrN0-8H.js +1 -0
- package/ui-dist/assets/mdx-CT6rFF7S.js +1 -0
- package/ui-dist/assets/mdx-DQZ5AkYe.js +1 -0
- package/ui-dist/assets/mermaid-Bk4SNUv9.js +1 -0
- package/ui-dist/assets/mermaid-CTmv7XD1.js +1 -0
- package/ui-dist/assets/mermaid-GHXKKRXX-CDSYqrX3.js +1 -0
- package/ui-dist/assets/mermaid-parser.core-Bd2TX3li.js +4 -0
- package/ui-dist/assets/min-dark-BFqTAwCr.js +1 -0
- package/ui-dist/assets/min-dark-BSWPekZh.js +1 -0
- package/ui-dist/assets/min-light-DDpmG2fV.js +1 -0
- package/ui-dist/assets/min-light-O7UdaaxX.js +1 -0
- package/ui-dist/assets/mindmap-definition-RKZ34NQL-CCrZYYSm.js +96 -0
- package/ui-dist/assets/mipsasm-BMqwQI7S.js +1 -0
- package/ui-dist/assets/mipsasm-Dl8GaYxY.js +1 -0
- package/ui-dist/assets/mojo-BgCJLMeH.js +1 -0
- package/ui-dist/assets/mojo-hMZsLDIK.js +1 -0
- package/ui-dist/assets/monokai-C0p7Qecz.js +1 -0
- package/ui-dist/assets/monokai-CdkpiU2Y.js +1 -0
- package/ui-dist/assets/moonbit-BgUC1NvV.js +1 -0
- package/ui-dist/assets/moonbit-CaWjb8XO.js +1 -0
- package/ui-dist/assets/move-B1IS1UjX.js +1 -0
- package/ui-dist/assets/move-u3t7wi4x.js +1 -0
- package/ui-dist/assets/narrat-4tTAKi-J.js +1 -0
- package/ui-dist/assets/narrat-_X_XdTYD.js +1 -0
- package/ui-dist/assets/nextflow-BJtWHP5T.js +1 -0
- package/ui-dist/assets/nextflow-Bbiyy34d.js +1 -0
- package/ui-dist/assets/nextflow-groovy-DJMQeKeT.js +1 -0
- package/ui-dist/assets/nextflow-groovy-Dc_ddanL.js +1 -0
- package/ui-dist/assets/nginx-BNb4NZk1.js +1 -0
- package/ui-dist/assets/nginx-CgHaWcsO.js +1 -0
- package/ui-dist/assets/night-owl-BsnCLAKc.js +1 -0
- package/ui-dist/assets/night-owl-DhmEMT88.js +1 -0
- package/ui-dist/assets/night-owl-light-BODRhcTU.js +1 -0
- package/ui-dist/assets/night-owl-light-eJ-hLW7d.js +1 -0
- package/ui-dist/assets/nim-BuixXxPS.js +1 -0
- package/ui-dist/assets/nim-xKCzf2o0.js +1 -0
- package/ui-dist/assets/nix-DGXJ-lch.js +1 -0
- package/ui-dist/assets/nix-IvuFDN5E.js +1 -0
- package/ui-dist/assets/nord-Cb4Vim4T.js +1 -0
- package/ui-dist/assets/nord-Cd-F4txO.js +1 -0
- package/ui-dist/assets/nushell-9zntkpRZ.js +1 -0
- package/ui-dist/assets/nushell-DcLAeLz5.js +1 -0
- package/ui-dist/assets/objective-c-BfQime6S.js +1 -0
- package/ui-dist/assets/objective-c-D1A_Heim.js +1 -0
- package/ui-dist/assets/objective-cpp-BbSyPuOs.js +1 -0
- package/ui-dist/assets/objective-cpp-BsSzOQcm.js +1 -0
- package/ui-dist/assets/ocaml--fvLg7Jk.js +1 -0
- package/ui-dist/assets/ocaml-O90oeIOV.js +1 -0
- package/ui-dist/assets/odin-B1RWQWA5.js +1 -0
- package/ui-dist/assets/odin-B25GiMk5.js +1 -0
- package/ui-dist/assets/one-dark-pro-CLwyXe_n.js +1 -0
- package/ui-dist/assets/one-dark-pro-DUS_IGRK.js +1 -0
- package/ui-dist/assets/one-light-CVUd7yD5.js +1 -0
- package/ui-dist/assets/one-light-D7Lr4KcI.js +1 -0
- package/ui-dist/assets/openscad-BUDT5pXO.js +1 -0
- package/ui-dist/assets/openscad-Cc8OM7cV.js +1 -0
- package/ui-dist/assets/ordinal-hYBb2elL.js +1 -0
- package/ui-dist/assets/packet-YPE3B663-BsRm1dxS.js +1 -0
- package/ui-dist/assets/pascal-4ZHwLPI5.js +1 -0
- package/ui-dist/assets/pascal-DRxrTJXf.js +1 -0
- package/ui-dist/assets/path-BWPyau1x.js +1 -0
- package/ui-dist/assets/perl-BLMySlFJ.js +1 -0
- package/ui-dist/assets/perl-CAUsHq6V.js +1 -0
- package/ui-dist/assets/php-Cn4rjz2P.js +1 -0
- package/ui-dist/assets/php-Czf_fybR.js +1 -0
- package/ui-dist/assets/pie-LRSECV5Y-2jRO4jrF.js +1 -0
- package/ui-dist/assets/pieDiagram-4H26LBE5-O21uLYd7.js +30 -0
- package/ui-dist/assets/pkl-C3VTVe07.js +1 -0
- package/ui-dist/assets/pkl-ot-7Btpt.js +1 -0
- package/ui-dist/assets/plastic-CF8VZTnn.js +1 -0
- package/ui-dist/assets/plastic-DQwYfKfQ.js +1 -0
- package/ui-dist/assets/play-B4R5rXMZ.js +1 -0
- package/ui-dist/assets/plsql-DGHpHOYJ.js +1 -0
- package/ui-dist/assets/plsql-DKCJv1ec.js +1 -0
- package/ui-dist/assets/po-BiJDBrnU.js +1 -0
- package/ui-dist/assets/po-DLYw31Q8.js +1 -0
- package/ui-dist/assets/poimandres-BX2TyY6j.js +1 -0
- package/ui-dist/assets/poimandres-DRFjx7u4.js +1 -0
- package/ui-dist/assets/polar-C7UOKdEL.js +1 -0
- package/ui-dist/assets/polar-D_X-vjiJ.js +1 -0
- package/ui-dist/assets/postcss-BXeXVLqQ.js +1 -0
- package/ui-dist/assets/postcss-BunjpCQr.js +1 -0
- package/ui-dist/assets/powerquery-B6M5zXQ4.js +1 -0
- package/ui-dist/assets/powerquery-DNMTfnFr.js +1 -0
- package/ui-dist/assets/powershell-DqZlBT-v.js +1 -0
- package/ui-dist/assets/powershell-DshXNtvi.js +1 -0
- package/ui-dist/assets/prisma-BsRQq5mF.js +1 -0
- package/ui-dist/assets/prisma-VLinVlWN.js +1 -0
- package/ui-dist/assets/prolog-C--lwqXe.js +1 -0
- package/ui-dist/assets/prolog-iXnhIJG7.js +1 -0
- package/ui-dist/assets/proto-DB4EqR-F.js +1 -0
- package/ui-dist/assets/proto-DSd2dzpT.js +1 -0
- package/ui-dist/assets/pug-CsZglf8T.js +1 -0
- package/ui-dist/assets/pug-DD9HHTGS.js +1 -0
- package/ui-dist/assets/puppet-CDv2pdJW.js +1 -0
- package/ui-dist/assets/puppet-DDYKwRcl.js +1 -0
- package/ui-dist/assets/purescript-9MfHhQsQ.js +1 -0
- package/ui-dist/assets/purescript-C58zfXw7.js +1 -0
- package/ui-dist/assets/python-DkGugaUl.js +1 -0
- package/ui-dist/assets/python-gzcpVVnB.js +1 -0
- package/ui-dist/assets/qml-BPgOJK7U.js +1 -0
- package/ui-dist/assets/qml-DcW_sT3t.js +1 -0
- package/ui-dist/assets/qmldir-5WAoO9FS.js +1 -0
- package/ui-dist/assets/qmldir-DCQb3MpD.js +1 -0
- package/ui-dist/assets/qss-Fe1Jh2GI.js +1 -0
- package/ui-dist/assets/qss-iwYQbQ5a.js +1 -0
- package/ui-dist/assets/quadrantDiagram-W4KKPZXB-PFuRo2tu.js +7 -0
- package/ui-dist/assets/r-B1OEipip.js +1 -0
- package/ui-dist/assets/r-D2d3McyU.js +1 -0
- package/ui-dist/assets/racket-ByduP6X2.js +1 -0
- package/ui-dist/assets/racket-DcIDlBhZ.js +1 -0
- package/ui-dist/assets/radar-GUYGQ44K-DrLd9hhi.js +1 -0
- package/ui-dist/assets/raku-B3gFvitq.js +1 -0
- package/ui-dist/assets/raku-CsvfXYUb.js +1 -0
- package/ui-dist/assets/razor-30Cugjh2.js +1 -0
- package/ui-dist/assets/razor-oFpUW61Z.js +1 -0
- package/ui-dist/assets/react-dom-Bm-PY09n.js +1 -0
- package/ui-dist/assets/red-7ga_dcKu.js +1 -0
- package/ui-dist/assets/red-CJ3rzSJv.js +1 -0
- package/ui-dist/assets/reg-CRGYupPL.js +1 -0
- package/ui-dist/assets/reg-efiUL9qS.js +1 -0
- package/ui-dist/assets/regexp-Bu0flJgP.js +1 -0
- package/ui-dist/assets/regexp-zLCDTged.js +1 -0
- package/ui-dist/assets/rel-BFvj_u7U.js +1 -0
- package/ui-dist/assets/rel-BtDbiS_P.js +1 -0
- package/ui-dist/assets/requirementDiagram-4Y6WPE33-CsP61d0X.js +84 -0
- package/ui-dist/assets/riscv-CQLA6sFw.js +1 -0
- package/ui-dist/assets/riscv-Ckw8ddFX.js +1 -0
- package/ui-dist/assets/ron-UVnZQNEl.js +1 -0
- package/ui-dist/assets/ron-VUp2lXgN.js +1 -0
- package/ui-dist/assets/rose-pine-BthvhNj6.js +1 -0
- package/ui-dist/assets/rose-pine-dawn-DSuRaP6u.js +1 -0
- package/ui-dist/assets/rose-pine-dawn-Dg85fqjY.js +1 -0
- package/ui-dist/assets/rose-pine-moon-DdHjCvFQ.js +1 -0
- package/ui-dist/assets/rose-pine-moon-hon4tzzS.js +1 -0
- package/ui-dist/assets/rose-pine-rh6ipraJ.js +1 -0
- package/ui-dist/assets/rosmsg-CAekHB0j.js +1 -0
- package/ui-dist/assets/rosmsg-Dwq6pEKS.js +1 -0
- package/ui-dist/assets/rotate-cw-B1ZRM7VI.js +1 -0
- package/ui-dist/assets/rough.esm-CSKSodPl.js +1 -0
- package/ui-dist/assets/rst-BIOjc2k6.js +1 -0
- package/ui-dist/assets/rst-U6Eu7ipE.js +1 -0
- package/ui-dist/assets/ruby-BA7kcl5p.js +1 -0
- package/ui-dist/assets/ruby-CUQsVT6d.js +1 -0
- package/ui-dist/assets/rust-Cfkwpbl8.js +1 -0
- package/ui-dist/assets/rust-DfhhoMHs.js +1 -0
- package/ui-dist/assets/sankeyDiagram-5OEKKPKP-OXRKlXwh.js +40 -0
- package/ui-dist/assets/sas-BHVT2N5I.js +1 -0
- package/ui-dist/assets/sas-CNBFrLhc.js +1 -0
- package/ui-dist/assets/sass-DXrisJhu.js +1 -0
- package/ui-dist/assets/sass-DiF7DxUu.js +1 -0
- package/ui-dist/assets/scala-DKOlJaKm.js +1 -0
- package/ui-dist/assets/scala-F4M-xFqw.js +1 -0
- package/ui-dist/assets/scheme-DQCgrYNe.js +1 -0
- package/ui-dist/assets/scheme-yKF7wU_W.js +1 -0
- package/ui-dist/assets/scss-CPnU-uuv.js +1 -0
- package/ui-dist/assets/scss-DdIrFDxD.js +1 -0
- package/ui-dist/assets/sdbl-DzilZtvS.js +1 -0
- package/ui-dist/assets/sdbl-bTVj8UrX.js +1 -0
- package/ui-dist/assets/search-09Pme-NO.js +1 -0
- package/ui-dist/assets/select-CYgMxtlk.js +1 -0
- package/ui-dist/assets/sequenceDiagram-3UESZ5HK-CGKNazDP.js +162 -0
- package/ui-dist/assets/shaderlab-QzRPXpa3.js +1 -0
- package/ui-dist/assets/shaderlab-TOUzSsQk.js +1 -0
- package/ui-dist/assets/shellscript-BbTp1yjG.js +1 -0
- package/ui-dist/assets/shellscript-IH5A6LQB.js +1 -0
- package/ui-dist/assets/shellsession-BebtDBlY.js +1 -0
- package/ui-dist/assets/shellsession-BmAC8SMF.js +1 -0
- package/ui-dist/assets/slack-dark-DYvUXyrP.js +1 -0
- package/ui-dist/assets/slack-dark-DnToyrRv.js +1 -0
- package/ui-dist/assets/slack-ochin-B2OO5cIa.js +1 -0
- package/ui-dist/assets/slack-ochin-bqtMVDfH.js +1 -0
- package/ui-dist/assets/smalltalk-B16xEiuN.js +1 -0
- package/ui-dist/assets/smalltalk-Czn2qXp6.js +1 -0
- package/ui-dist/assets/snazzy-light-4G7pJPwS.js +1 -0
- package/ui-dist/assets/snazzy-light-D8dzFmq5.js +1 -0
- package/ui-dist/assets/solarized-dark-BQwPDzxK.js +1 -0
- package/ui-dist/assets/solarized-dark-DV17i1UV.js +1 -0
- package/ui-dist/assets/solarized-light-BLaijb3X.js +1 -0
- package/ui-dist/assets/solarized-light-DSh2HLQt.js +1 -0
- package/ui-dist/assets/solidity-BOOD8PsF.js +1 -0
- package/ui-dist/assets/solidity-CKzVLygQ.js +1 -0
- package/ui-dist/assets/soy-B5vCsGAN.js +1 -0
- package/ui-dist/assets/soy-CdbyEXp6.js +1 -0
- package/ui-dist/assets/sparql-BQ8pLLZr.js +1 -0
- package/ui-dist/assets/sparql-D_iOobhT.js +1 -0
- package/ui-dist/assets/splunk-BC2Px7Mm.js +1 -0
- package/ui-dist/assets/splunk-Dy5hSDrK.js +1 -0
- package/ui-dist/assets/sql-DCFvu5RM.js +1 -0
- package/ui-dist/assets/sql-hpBkusIy.js +1 -0
- package/ui-dist/assets/square-_9cV5Fet.js +1 -0
- package/ui-dist/assets/src-D-NMWEou.js +1 -0
- package/ui-dist/assets/ssh-config-BgfXC-Er.js +1 -0
- package/ui-dist/assets/ssh-config-DlA0k24P.js +1 -0
- package/ui-dist/assets/stata-DVbvk3qH.js +1 -0
- package/ui-dist/assets/stata-h02h04e7.js +1 -0
- package/ui-dist/assets/stateDiagram-AJRCARHV-BBiaMVYA.js +1 -0
- package/ui-dist/assets/stateDiagram-v2-BHNVJYJU-C_bLdSQ9.js +1 -0
- package/ui-dist/assets/stylus-B6D30XZt.js +1 -0
- package/ui-dist/assets/stylus-BrO8Mu5X.js +1 -0
- package/ui-dist/assets/surrealql-CiJ5GSG5.js +1 -0
- package/ui-dist/assets/surrealql-DxccxuMd.js +1 -0
- package/ui-dist/assets/svelte-CsxBlEum.js +1 -0
- package/ui-dist/assets/svelte-DzNm5V2w.js +1 -0
- package/ui-dist/assets/swift-DonLKvLd.js +1 -0
- package/ui-dist/assets/swift-aU1DoeFE.js +1 -0
- package/ui-dist/assets/synthwave-84-CIknw8y7.js +1 -0
- package/ui-dist/assets/synthwave-84-nFMaYfgc.js +1 -0
- package/ui-dist/assets/system-verilog-CTJOgDVF.js +1 -0
- package/ui-dist/assets/system-verilog-DJ5XKQeo.js +1 -0
- package/ui-dist/assets/systemd-BxMlprV5.js +1 -0
- package/ui-dist/assets/systemd-vW0EBnEZ.js +1 -0
- package/ui-dist/assets/tabs-DS9zR4V0.js +1 -0
- package/ui-dist/assets/talonscript-CohzipZa.js +1 -0
- package/ui-dist/assets/talonscript-DOWETJMR.js +1 -0
- package/ui-dist/assets/tasl-BCK2yre5.js +1 -0
- package/ui-dist/assets/tasl-DMoTqEGO.js +1 -0
- package/ui-dist/assets/tcl-CZd0xW_V.js +1 -0
- package/ui-dist/assets/tcl-DpJlRc9L.js +1 -0
- package/ui-dist/assets/templ-CsM0tTsw.js +1 -0
- package/ui-dist/assets/templ-DmkwoHql.js +1 -0
- package/ui-dist/assets/terraform-BOmekhaT.js +1 -0
- package/ui-dist/assets/terraform-DswuEJGm.js +1 -0
- package/ui-dist/assets/tex-B0f_hYr8.js +1 -0
- package/ui-dist/assets/tex-C3KbjgWU.js +1 -0
- package/ui-dist/assets/textarea-BkUbRqKD.js +1 -0
- package/ui-dist/assets/timeline-definition-PNZ67QCA-DCONMP8y.js +120 -0
- package/ui-dist/assets/tokyo-night-iIspnLcq.js +1 -0
- package/ui-dist/assets/tokyo-night-oM2G3aXe.js +1 -0
- package/ui-dist/assets/toml-CcmNWLt0.js +1 -0
- package/ui-dist/assets/toml-DPDNdnh9.js +1 -0
- package/ui-dist/assets/treeView-BLDUP644-DLNyeiHu.js +1 -0
- package/ui-dist/assets/treemap-LRROVOQU-Cdld0366.js +1 -0
- package/ui-dist/assets/ts-tags-Bf-FGGvT.js +1 -0
- package/ui-dist/assets/ts-tags-CTs7_HT0.js +1 -0
- package/ui-dist/assets/tsv-BCypI0LB.js +1 -0
- package/ui-dist/assets/tsv-sltzmVWM.js +1 -0
- package/ui-dist/assets/tsx-0GViXbh-.js +1 -0
- package/ui-dist/assets/tsx-DFvk7AwW.js +1 -0
- package/ui-dist/assets/turtle-ByJddavk.js +1 -0
- package/ui-dist/assets/turtle-CA3RhB-1.js +1 -0
- package/ui-dist/assets/twig-DgtEA5Er.js +1 -0
- package/ui-dist/assets/twig-VJ4-Ntm0.js +1 -0
- package/ui-dist/assets/typescript-C03X-V26.js +1 -0
- package/ui-dist/assets/typescript-DHTLvXzV.js +1 -0
- package/ui-dist/assets/typespec-B88KGewJ.js +1 -0
- package/ui-dist/assets/typespec-BRdr0IET.js +1 -0
- package/ui-dist/assets/typst-DI99ib-x.js +1 -0
- package/ui-dist/assets/typst-DR_hs4Gi.js +1 -0
- package/ui-dist/assets/useBaseUiId-dSIElxm7.js +1 -0
- package/ui-dist/assets/useButton-DKtiRcm8.js +1 -0
- package/ui-dist/assets/useCompositeListItem-BQ4RLkNZ.js +1 -0
- package/ui-dist/assets/useControlled-t2_qXo7Q.js +1 -0
- package/ui-dist/assets/useRegisterFieldControl-CbOBCC3j.js +1 -0
- package/ui-dist/assets/utils-BX1Diber.js +1 -0
- package/ui-dist/assets/v-ByGVE3cP.js +1 -0
- package/ui-dist/assets/v-DETTlOr0.js +1 -0
- package/ui-dist/assets/vala-DUFyzj-T.js +1 -0
- package/ui-dist/assets/vala-zf12oZj6.js +1 -0
- package/ui-dist/assets/vb-Djn5o6TS.js +1 -0
- package/ui-dist/assets/vb-DzJKgt2N.js +1 -0
- package/ui-dist/assets/vennDiagram-CIIHVFJN-C21GUpuw.js +34 -0
- package/ui-dist/assets/verilog-C0HRahXC.js +1 -0
- package/ui-dist/assets/verilog-CiiDBU1e.js +1 -0
- package/ui-dist/assets/vesper-D5bVUKB1.js +1 -0
- package/ui-dist/assets/vesper-DdrHHSXu.js +1 -0
- package/ui-dist/assets/vhdl-BroJfC0k.js +1 -0
- package/ui-dist/assets/vhdl-Dp1NtpV2.js +1 -0
- package/ui-dist/assets/viml-BLGuOzJC.js +1 -0
- package/ui-dist/assets/viml-DvXPmvsu.js +1 -0
- package/ui-dist/assets/vitesse-black-D082JcaE.js +1 -0
- package/ui-dist/assets/vitesse-black-fwtXNY1n.js +1 -0
- package/ui-dist/assets/vitesse-dark-BZCL-v6S.js +1 -0
- package/ui-dist/assets/vitesse-dark-z-nr_5O8.js +1 -0
- package/ui-dist/assets/vitesse-light-VbXTXTou.js +1 -0
- package/ui-dist/assets/vitesse-light-ojz42ZLy.js +1 -0
- package/ui-dist/assets/vue-CUpaeZ-j.js +1 -0
- package/ui-dist/assets/vue-D3dSYZKz.js +1 -0
- package/ui-dist/assets/vue-html-DQch_7VQ.js +1 -0
- package/ui-dist/assets/vue-html-n-yWadYX.js +1 -0
- package/ui-dist/assets/vue-vine-B67Dz05t.js +1 -0
- package/ui-dist/assets/vue-vine-BCPDker4.js +1 -0
- package/ui-dist/assets/vyper-CgoNMtux.js +1 -0
- package/ui-dist/assets/vyper-DyY9EjYM.js +1 -0
- package/ui-dist/assets/wardley-L42UT6IY-PuTi7B-8.js +1 -0
- package/ui-dist/assets/wardleyDiagram-YWT4CUSO-BwV-yZO0.js +78 -0
- package/ui-dist/assets/wasm-BJZAGh5c.js +1 -0
- package/ui-dist/assets/wasm-BnjxR4X6.js +1 -0
- package/ui-dist/assets/wasm-ByWQv1Qj.js +1 -0
- package/ui-dist/assets/wasm-DpeUkDXq.js +1 -0
- package/ui-dist/assets/wenyan-C8pVoKbM.js +1 -0
- package/ui-dist/assets/wenyan-kGy6j2rl.js +1 -0
- package/ui-dist/assets/wgsl-BsKzXJz4.js +1 -0
- package/ui-dist/assets/wgsl-CLosOKVB.js +1 -0
- package/ui-dist/assets/wikitext-B00H4D6m.js +1 -0
- package/ui-dist/assets/wikitext-ClFFjSW2.js +1 -0
- package/ui-dist/assets/wit-DdvCle-K.js +1 -0
- package/ui-dist/assets/wit-Ib9mjOBG.js +1 -0
- package/ui-dist/assets/wolfram-DLL8P-h_.js +1 -0
- package/ui-dist/assets/wolfram-ofSK-Pwc.js +1 -0
- package/ui-dist/assets/xml-C33zriiW.js +1 -0
- package/ui-dist/assets/xml-DI0syHFL.js +1 -0
- package/ui-dist/assets/xsl-BFS2wyMt.js +1 -0
- package/ui-dist/assets/xsl-C2_ECGp9.js +1 -0
- package/ui-dist/assets/xychartDiagram-2RQKCTM6-D-bOqUpK.js +7 -0
- package/ui-dist/assets/yaml-DtN9Ue11.js +1 -0
- package/ui-dist/assets/yaml-w0rMsuN4.js +1 -0
- package/ui-dist/assets/zenscript-BnlCZFoB.js +1 -0
- package/ui-dist/assets/zenscript-WrGCG97x.js +1 -0
- package/ui-dist/assets/zig-CMLA9XwU.js +1 -0
- package/ui-dist/assets/zig-apmbPCW-.js +1 -0
- package/ui-dist/favicon.svg +9 -0
- package/ui-dist/index.html +19 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,338 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
var kO=Object.create;var{getPrototypeOf:yO,defineProperty:KH,getOwnPropertyNames:bO}=Object;var qO=Object.prototype.hasOwnProperty;function IO(N){return this[N]}var jO,gO,qY=(N,H,O)=>{var W=N!=null&&typeof N==="object";if(W){var Y=H?jO??=new WeakMap:gO??=new WeakMap,G=Y.get(N);if(G)return G}O=N!=null?kO(yO(N)):{};let $=H||!N||!N.__esModule?KH(O,"default",{value:N,enumerable:!0}):O;for(let U of bO(N))if(!qO.call($,U))KH($,U,{get:IO.bind(N,U),enumerable:!0});if(W)Y.set(N,$);return $};var IY=(N,H)=>()=>(H||N((H={exports:{}}).exports,H),H.exports);var vO=(N)=>N;function hO(N,H){this[N]=vO.bind(null,H)}var jY=(N,H)=>{for(var O in H)KH(N,O,{get:H[O],enumerable:!0,configurable:!0,set:hO.bind(H,O)})};import{existsSync as PO,watch as PY}from"fs";import{stat as fO}from"fs/promises";import k from"path";import{promises as a}from"fs";import u from"path";import{existsSync as dH,renameSync as mO}from"fs";import sH from"os";import S from"path";function y(N){return process.env[`JUN_${N}`]??process.env[`AGENTHOST_${N}`]}function cO(){let N=y("HOME");if(N)return N;let H=S.join(sH.homedir(),".jun"),O=S.join(sH.homedir(),".agenthost");if(!dH(H)&&dH(O))try{mO(O,H),console.log("[paths] migrated data dir ~/.agenthost -> ~/.jun")}catch(W){return console.warn("[paths] could not migrate ~/.agenthost -> ~/.jun (files in use?) \u2014 using legacy dir:",W),O}return H}var b=cO(),z="default",MH=y("HOST")??"127.0.0.1",lN=Number(y("PORT")??8787);function UN(){return S.join(b,"projects")}function r(N=z){return S.join(UN(),N)}function n(){return S.join(b,"runs")}function J(N=z){return S.join(r(N),"workspace")}function DN(){return S.join(b,"schedules")}function q(N=z){return S.join(r(N),"codex-home")}function tH(N=z){return S.join(r(N),"widgets")}function CN(N=z){return S.join(r(N),"browser")}function uN(N){let H=S.resolve(UN()),O=S.relative(H,S.resolve(N));if(!O||O.startsWith("..")||S.isAbsolute(O))return null;return O.split(S.sep)[0]||null}function l(N){return N.split(S.sep).join("/")}function AH(N){return u.join(r(N),"project.json")}var lO=["files","reports","downloads","screenshots","artifacts",".agents/skills"],uO=["profile","downloads","screenshots","recordings"],iO={projectId:z,defaultModel:"gpt-5.4",defaultSandbox:"workspaceWrite",defaultApprovalPolicy:"onRequest",host:"127.0.0.1",port:8787,browserProvider:"agent-browser"},pO={version:1,pages:[{id:"home",title:"Home",widgets:[]}]},nO='# Jun workspace\n\nYou are running inside JunHost \u2014 a self-hosted dashboard that supervises you.\nThis directory is your workspace; write outputs here.\n\n## Browsing the web \u2014 use the `agent-browser` CLI\n\nA shared, visible browser session is already running and wired to your\nenvironment. The user can watch it live and take manual control. Drive it ONLY\nthrough the `agent-browser` command-line tool. Do NOT connect to Chrome via\nraw CDP/DevTools, scrape the `/json` debugger endpoint, or open your own\nWebSocket \u2014 that bypasses the shared session the user is watching.\n\nCommon commands (the session is preconfigured \u2014 no flags needed):\n- `agent-browser open <url>` \u2014 navigate\n- `agent-browser snapshot -i` \u2014 accessibility tree with @refs (best for deciding what to click)\n- `agent-browser click @ref` \u2014 click an element from the snapshot\n- `agent-browser fill @ref "text"` \u2014 fill an input\n- `agent-browser get text @ref` \u2014 read text (use `get url`, `get title` for page info)\n- `agent-browser scroll down 800` \u2014 scroll\n- `agent-browser screenshot screenshots/<name>.png` \u2014 capture to the workspace\n- `agent-browser eval "<js>"` \u2014 run JS in the page when no command fits\n\nPrefer snapshot \u2192 ref-based actions over guessing selectors. Save screenshots\nand extracted notes under `reports/` and `screenshots/`.\n\n## Output locations\n- `reports/` \u2014 summaries and findings\n- `screenshots/` \u2014 captured images\n- `downloads/` \u2014 downloaded files\n',aO=`# Codex configuration for this Jun project.
|
|
3
|
+
# MCP servers are configured here, e.g.:
|
|
4
|
+
#
|
|
5
|
+
# [mcp_servers.context7]
|
|
6
|
+
# command = "npx"
|
|
7
|
+
# args = ["-y", "@upstash/context7-mcp"]
|
|
8
|
+
`;async function SN(N,H){try{await a.access(N)}catch{await a.mkdir(u.dirname(N),{recursive:!0}),await a.writeFile(N,H,"utf8")}}async function JH(N,H){let O=J(N);for(let W of lO)await a.mkdir(u.join(O,W),{recursive:!0});for(let W of uO)await a.mkdir(u.join(CN(N),W),{recursive:!0});await a.mkdir(tH(N),{recursive:!0}),await a.mkdir(u.join(q(N),"logs"),{recursive:!0}),await SN(AH(N),JSON.stringify({id:N,name:H??N,createdAt:new Date().toISOString()},null,2)+`
|
|
9
|
+
`),await SN(u.join(r(N),"dashboard.json"),JSON.stringify(pO,null,2)+`
|
|
10
|
+
`),await SN(u.join(q(N),"config.toml"),aO),await SN(u.join(O,"AGENTS.md"),nO)}async function rH(){await a.mkdir(n(),{recursive:!0}),await SN(u.join(b,"config.json"),JSON.stringify(iO,null,2)+`
|
|
11
|
+
`),await JH(z,"Default")}import{promises as FN}from"fs";import lW from"path";/*!
|
|
12
|
+
* Copyright (c) Squirrel Chat et al., All rights reserved.
|
|
13
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
|
14
|
+
*
|
|
15
|
+
* Redistribution and use in source and binary forms, with or without
|
|
16
|
+
* modification, are permitted provided that the following conditions are met:
|
|
17
|
+
*
|
|
18
|
+
* 1. Redistributions of source code must retain the above copyright notice, this
|
|
19
|
+
* list of conditions and the following disclaimer.
|
|
20
|
+
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
21
|
+
* this list of conditions and the following disclaimer in the
|
|
22
|
+
* documentation and/or other materials provided with the distribution.
|
|
23
|
+
* 3. Neither the name of the copyright holder nor the names of its contributors
|
|
24
|
+
* may be used to endorse or promote products derived from this software without
|
|
25
|
+
* specific prior written permission.
|
|
26
|
+
*
|
|
27
|
+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
28
|
+
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
29
|
+
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
30
|
+
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
31
|
+
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
32
|
+
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
33
|
+
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
34
|
+
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
35
|
+
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
36
|
+
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
37
|
+
*/function oO(N,H){let O=N.slice(0,H).split(/\r\n|\n|\r/g);return[O.length,O.pop().length+1]}function dO(N,H,O){let W=N.split(/\r\n|\n|\r/g),Y="",G=(Math.log10(H+1)|0)+1;for(let $=H-1;$<=H+1;$++){let U=W[$-1];if(!U)continue;if(Y+=$.toString().padEnd(G," "),Y+=": ",Y+=U,Y+=`
|
|
38
|
+
`,$===H)Y+=" ".repeat(G+O+2),Y+=`^
|
|
39
|
+
`}return Y}class V extends Error{line;column;codeblock;constructor(N,H){let[O,W]=oO(H.toml,H.ptr),Y=dO(H.toml,O,W);super(`Invalid TOML document: ${N}
|
|
40
|
+
|
|
41
|
+
${Y}`,H);this.line=O,this.column=W,this.codeblock=Y}}/*!
|
|
42
|
+
* Copyright (c) Squirrel Chat et al., All rights reserved.
|
|
43
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
|
44
|
+
*
|
|
45
|
+
* Redistribution and use in source and binary forms, with or without
|
|
46
|
+
* modification, are permitted provided that the following conditions are met:
|
|
47
|
+
*
|
|
48
|
+
* 1. Redistributions of source code must retain the above copyright notice, this
|
|
49
|
+
* list of conditions and the following disclaimer.
|
|
50
|
+
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
51
|
+
* this list of conditions and the following disclaimer in the
|
|
52
|
+
* documentation and/or other materials provided with the distribution.
|
|
53
|
+
* 3. Neither the name of the copyright holder nor the names of its contributors
|
|
54
|
+
* may be used to endorse or promote products derived from this software without
|
|
55
|
+
* specific prior written permission.
|
|
56
|
+
*
|
|
57
|
+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
58
|
+
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
59
|
+
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
60
|
+
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
61
|
+
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
62
|
+
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
63
|
+
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
64
|
+
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
65
|
+
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
66
|
+
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
67
|
+
*/function sO(N,H){let O=0;while(N[H-++O]==="\\");return--O&&O%2}function iN(N,H=0,O=N.length){let W=N.indexOf(`
|
|
68
|
+
`,H);if(N[W-1]==="\r")W--;return W<=O?W:-1}function QN(N,H){for(let O=H;O<N.length;O++){let W=N[O];if(W===`
|
|
69
|
+
`)return O;if(W==="\r"&&N[O+1]===`
|
|
70
|
+
`)return O+1;if(W<" "&&W!=="\t"||W==="\x7F")throw new V("control characters are not allowed in comments",{toml:N,ptr:H})}return N.length}function _(N,H,O,W){let Y;while(!0){while((Y=N[H])===" "||Y==="\t"||!O&&(Y===`
|
|
71
|
+
`||Y==="\r"&&N[H+1]===`
|
|
72
|
+
`))H++;if(W||Y!=="#")break;H=QN(N,H)}return H}function eH(N,H,O,W,Y=!1){if(!W)return H=iN(N,H),H<0?N.length:H;for(let G=H;G<N.length;G++){let $=N[G];if($==="#")G=iN(N,G);else if($===O)return G+1;else if($===W||Y&&($===`
|
|
73
|
+
`||$==="\r"&&N[G+1]===`
|
|
74
|
+
`))return G}throw new V("cannot find end of structure",{toml:N,ptr:H})}function pN(N,H){let O=N[H],W=O===N[H+1]&&N[H+1]===N[H+2]?N.slice(H,H+3):O;H+=W.length-1;do H=N.indexOf(W,++H);while(H>-1&&O!=="'"&&sO(N,H));if(H>-1){if(H+=W.length,W.length>1){if(N[H]===O)H++;if(N[H]===O)H++}}return H}/*!
|
|
75
|
+
* Copyright (c) Squirrel Chat et al., All rights reserved.
|
|
76
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
|
77
|
+
*
|
|
78
|
+
* Redistribution and use in source and binary forms, with or without
|
|
79
|
+
* modification, are permitted provided that the following conditions are met:
|
|
80
|
+
*
|
|
81
|
+
* 1. Redistributions of source code must retain the above copyright notice, this
|
|
82
|
+
* list of conditions and the following disclaimer.
|
|
83
|
+
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
84
|
+
* this list of conditions and the following disclaimer in the
|
|
85
|
+
* documentation and/or other materials provided with the distribution.
|
|
86
|
+
* 3. Neither the name of the copyright holder nor the names of its contributors
|
|
87
|
+
* may be used to endorse or promote products derived from this software without
|
|
88
|
+
* specific prior written permission.
|
|
89
|
+
*
|
|
90
|
+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
91
|
+
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
92
|
+
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
93
|
+
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
94
|
+
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
95
|
+
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
96
|
+
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
97
|
+
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
98
|
+
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
99
|
+
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
100
|
+
*/var tO=/^(\d{4}-\d{2}-\d{2})?[T ]?(?:(\d{2}):\d{2}(?::\d{2}(?:\.\d+)?)?)?(Z|[-+]\d{2}:\d{2})?$/i;class o extends Date{#H=!1;#O=!1;#N=null;constructor(N){let H=!0,O=!0,W="Z";if(typeof N==="string"){let Y=N.match(tO);if(Y){if(!Y[1])H=!1,N=`0000-01-01T${N}`;if(O=!!Y[2],O&&N[10]===" "&&(N=N.replace(" ","T")),Y[2]&&+Y[2]>23)N="";else if(W=Y[3]||null,N=N.toUpperCase(),!W&&O)N+="Z"}else N=""}super(N);if(!isNaN(this.getTime()))this.#H=H,this.#O=O,this.#N=W}isDateTime(){return this.#H&&this.#O}isLocal(){return!this.#H||!this.#O||!this.#N}isDate(){return this.#H&&!this.#O}isTime(){return this.#O&&!this.#H}isValid(){return this.#H||this.#O}toISOString(){let N=super.toISOString();if(this.isDate())return N.slice(0,10);if(this.isTime())return N.slice(11,23);if(this.#N===null)return N.slice(0,-1);if(this.#N==="Z")return N;let H=+this.#N.slice(1,3)*60+ +this.#N.slice(4,6);return H=this.#N[0]==="-"?H:-H,new Date(this.getTime()-H*60000).toISOString().slice(0,-1)+this.#N}static wrapAsOffsetDateTime(N,H="Z"){let O=new o(N);return O.#N=H,O}static wrapAsLocalDateTime(N){let H=new o(N);return H.#N=null,H}static wrapAsLocalDate(N){let H=new o(N);return H.#O=!1,H.#N=null,H}static wrapAsLocalTime(N){let H=new o(N);return H.#H=!1,H.#N=null,H}}/*!
|
|
101
|
+
* Copyright (c) Squirrel Chat et al., All rights reserved.
|
|
102
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
|
103
|
+
*
|
|
104
|
+
* Redistribution and use in source and binary forms, with or without
|
|
105
|
+
* modification, are permitted provided that the following conditions are met:
|
|
106
|
+
*
|
|
107
|
+
* 1. Redistributions of source code must retain the above copyright notice, this
|
|
108
|
+
* list of conditions and the following disclaimer.
|
|
109
|
+
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
110
|
+
* this list of conditions and the following disclaimer in the
|
|
111
|
+
* documentation and/or other materials provided with the distribution.
|
|
112
|
+
* 3. Neither the name of the copyright holder nor the names of its contributors
|
|
113
|
+
* may be used to endorse or promote products derived from this software without
|
|
114
|
+
* specific prior written permission.
|
|
115
|
+
*
|
|
116
|
+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
117
|
+
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
118
|
+
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
119
|
+
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
120
|
+
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
121
|
+
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
122
|
+
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
123
|
+
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
124
|
+
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
125
|
+
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
126
|
+
*/var rO=/^((0x[0-9a-fA-F](_?[0-9a-fA-F])*)|(([+-]|0[ob])?\d(_?\d)*))$/,eO=/^[+-]?\d(_?\d)*(\.\d(_?\d)*)?([eE][+-]?\d(_?\d)*)?$/,NW=/^[+-]?0[0-9_]/,HW=/^[0-9a-f]{2,8}$/i,N0={b:"\b",t:"\t",n:`
|
|
127
|
+
`,f:"\f",r:"\r",e:"\x1B",'"':'"',"\\":"\\"};function nN(N,H=0,O=N.length){let W=N[H]==="'",Y=N[H++]===N[H]&&N[H]===N[H+1];if(Y){if(O-=2,N[H+=2]==="\r")H++;if(N[H]===`
|
|
128
|
+
`)H++}let G=0,$,U="",Q=H;while(H<O-1){let X=N[H++];if(X===`
|
|
129
|
+
`||X==="\r"&&N[H]===`
|
|
130
|
+
`){if(!Y)throw new V("newlines are not allowed in strings",{toml:N,ptr:H-1})}else if(X<" "&&X!=="\t"||X==="\x7F")throw new V("control characters are not allowed in strings",{toml:N,ptr:H-1});if($){if($=!1,X==="x"||X==="u"||X==="U"){let F=N.slice(H,H+=X==="x"?2:X==="u"?4:8);if(!HW.test(F))throw new V("invalid unicode escape",{toml:N,ptr:G});try{U+=String.fromCodePoint(parseInt(F,16))}catch{throw new V("invalid unicode escape",{toml:N,ptr:G})}}else if(Y&&(X===`
|
|
131
|
+
`||X===" "||X==="\t"||X==="\r")){if(H=_(N,H-1,!0),N[H]!==`
|
|
132
|
+
`&&N[H]!=="\r")throw new V("invalid escape: only line-ending whitespace may be escaped",{toml:N,ptr:G});H=_(N,H)}else if(X in N0)U+=N0[X];else throw new V("unrecognized escape sequence",{toml:N,ptr:G});Q=H}else if(!W&&X==="\\")G=H-1,$=!0,U+=N.slice(Q,G)}return U+N.slice(Q,O-1)}function H0(N,H,O,W){if(N==="true")return!0;if(N==="false")return!1;if(N==="-inf")return-1/0;if(N==="inf"||N==="+inf")return 1/0;if(N==="nan"||N==="+nan"||N==="-nan")return NaN;if(N==="-0")return W?0n:0;let Y=rO.test(N);if(Y||eO.test(N)){if(NW.test(N))throw new V("leading zeroes are not allowed",{toml:H,ptr:O});N=N.replace(/_/g,"");let $=+N;if(isNaN($))throw new V("invalid number",{toml:H,ptr:O});if(Y){if((Y=!Number.isSafeInteger($))&&!W)throw new V("integer value cannot be represented losslessly",{toml:H,ptr:O});if(Y||W===!0)$=BigInt(N)}return $}let G=new o(N);if(!G.isValid())throw new V("invalid value",{toml:H,ptr:O});return G}/*!
|
|
133
|
+
* Copyright (c) Squirrel Chat et al., All rights reserved.
|
|
134
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
|
135
|
+
*
|
|
136
|
+
* Redistribution and use in source and binary forms, with or without
|
|
137
|
+
* modification, are permitted provided that the following conditions are met:
|
|
138
|
+
*
|
|
139
|
+
* 1. Redistributions of source code must retain the above copyright notice, this
|
|
140
|
+
* list of conditions and the following disclaimer.
|
|
141
|
+
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
142
|
+
* this list of conditions and the following disclaimer in the
|
|
143
|
+
* documentation and/or other materials provided with the distribution.
|
|
144
|
+
* 3. Neither the name of the copyright holder nor the names of its contributors
|
|
145
|
+
* may be used to endorse or promote products derived from this software without
|
|
146
|
+
* specific prior written permission.
|
|
147
|
+
*
|
|
148
|
+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
149
|
+
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
150
|
+
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
151
|
+
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
152
|
+
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
153
|
+
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
154
|
+
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
155
|
+
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
156
|
+
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
157
|
+
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
158
|
+
*/function OW(N,H,O){let W=N.slice(H,O),Y=W.indexOf("#");if(Y>-1)QN(N,Y),W=W.slice(0,Y);return[W.trimEnd(),Y]}function RN(N,H,O,W,Y){if(W===0)throw new V("document contains excessively nested structures. aborting.",{toml:N,ptr:H});let G=N[H];if(G==="["||G==="{"){let[Q,X]=G==="["?W0(N,H,W,Y):O0(N,H,W,Y);if(O){if(X=_(N,X),N[X]===",")X++;else if(N[X]!==O)throw new V("expected comma or end of structure",{toml:N,ptr:X})}return[Q,X]}let $;if(G==='"'||G==="'"){$=pN(N,H);let Q=nN(N,H,$);if(O){if($=_(N,$),N[$]&&N[$]!==","&&N[$]!==O&&N[$]!==`
|
|
159
|
+
`&&N[$]!=="\r")throw new V("unexpected character encountered",{toml:N,ptr:$});$+=+(N[$]===",")}return[Q,$]}$=eH(N,H,",",O);let U=OW(N,H,$-+(N[$-1]===","));if(!U[0])throw new V("incomplete key-value declaration: no value specified",{toml:N,ptr:H});if(O&&U[1]>-1)$=_(N,H+U[1]),$+=+(N[$]===",");return[H0(U[0],N,H,Y),$]}/*!
|
|
160
|
+
* Copyright (c) Squirrel Chat et al., All rights reserved.
|
|
161
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
|
162
|
+
*
|
|
163
|
+
* Redistribution and use in source and binary forms, with or without
|
|
164
|
+
* modification, are permitted provided that the following conditions are met:
|
|
165
|
+
*
|
|
166
|
+
* 1. Redistributions of source code must retain the above copyright notice, this
|
|
167
|
+
* list of conditions and the following disclaimer.
|
|
168
|
+
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
169
|
+
* this list of conditions and the following disclaimer in the
|
|
170
|
+
* documentation and/or other materials provided with the distribution.
|
|
171
|
+
* 3. Neither the name of the copyright holder nor the names of its contributors
|
|
172
|
+
* may be used to endorse or promote products derived from this software without
|
|
173
|
+
* specific prior written permission.
|
|
174
|
+
*
|
|
175
|
+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
176
|
+
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
177
|
+
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
178
|
+
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
179
|
+
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
180
|
+
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
181
|
+
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
182
|
+
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
183
|
+
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
184
|
+
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
185
|
+
*/var WW=/^[a-zA-Z0-9-_]+[ \t]*$/;function aN(N,H,O="="){let W=H-1,Y=[],G=N.indexOf(O,H);if(G<0)throw new V("incomplete key-value: cannot find end of key",{toml:N,ptr:H});do{let $=N[H=++W];if($!==" "&&$!=="\t")if($==='"'||$==="'"){if($===N[H+1]&&$===N[H+2])throw new V("multiline strings are not allowed in keys",{toml:N,ptr:H});let U=pN(N,H);if(U<0)throw new V("unfinished string encountered",{toml:N,ptr:H});W=N.indexOf(".",U);let Q=N.slice(U,W<0||W>G?G:W),X=iN(Q);if(X>-1)throw new V("newlines are not allowed in keys",{toml:N,ptr:H+W+X});if(Q.trimStart())throw new V("found extra tokens after the string part",{toml:N,ptr:U});if(G<U){if(G=N.indexOf(O,U),G<0)throw new V("incomplete key-value: cannot find end of key",{toml:N,ptr:H})}Y.push(nN(N,H,U))}else{W=N.indexOf(".",H);let U=N.slice(H,W<0||W>G?G:W);if(!WW.test(U))throw new V("only letter, numbers, dashes and underscores are allowed in keys",{toml:N,ptr:H});Y.push(U.trimEnd())}}while(W+1&&W<G);return[Y,_(N,G+1,!0,!0)]}function O0(N,H,O,W){let Y={},G=new Set,$;H++;while(($=N[H++])!=="}"&&$)if($===",")throw new V("expected value, found comma",{toml:N,ptr:H-1});else if($==="#")H=QN(N,H);else if($!==" "&&$!=="\t"&&$!==`
|
|
186
|
+
`&&$!=="\r"){let U,Q=Y,X=!1,[F,M]=aN(N,H-1);for(let $N=0;$N<F.length;$N++){if($N)Q=X?Q[U]:Q[U]={};if(U=F[$N],(X=Object.hasOwn(Q,U))&&(typeof Q[U]!=="object"||G.has(Q[U])))throw new V("trying to redefine an already defined value",{toml:N,ptr:H});if(!X&&U==="__proto__")Object.defineProperty(Q,U,{enumerable:!0,configurable:!0,writable:!0})}if(X)throw new V("trying to redefine an already defined value",{toml:N,ptr:H});let[R,f]=RN(N,M,"}",O-1,W);G.add(R),Q[U]=R,H=f}if(!$)throw new V("unfinished table encountered",{toml:N,ptr:H});return[Y,H]}function W0(N,H,O,W){let Y=[],G;H++;while((G=N[H++])!=="]"&&G)if(G===",")throw new V("expected value, found comma",{toml:N,ptr:H-1});else if(G==="#")H=QN(N,H);else if(G!==" "&&G!=="\t"&&G!==`
|
|
187
|
+
`&&G!=="\r"){let $=RN(N,H-1,"]",O-1,W);Y.push($[0]),H=$[1]}if(!G)throw new V("unfinished array encountered",{toml:N,ptr:H});return[Y,H]}/*!
|
|
188
|
+
* Copyright (c) Squirrel Chat et al., All rights reserved.
|
|
189
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
|
190
|
+
*
|
|
191
|
+
* Redistribution and use in source and binary forms, with or without
|
|
192
|
+
* modification, are permitted provided that the following conditions are met:
|
|
193
|
+
*
|
|
194
|
+
* 1. Redistributions of source code must retain the above copyright notice, this
|
|
195
|
+
* list of conditions and the following disclaimer.
|
|
196
|
+
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
197
|
+
* this list of conditions and the following disclaimer in the
|
|
198
|
+
* documentation and/or other materials provided with the distribution.
|
|
199
|
+
* 3. Neither the name of the copyright holder nor the names of its contributors
|
|
200
|
+
* may be used to endorse or promote products derived from this software without
|
|
201
|
+
* specific prior written permission.
|
|
202
|
+
*
|
|
203
|
+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
204
|
+
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
205
|
+
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
206
|
+
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
207
|
+
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
208
|
+
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
209
|
+
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
210
|
+
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
211
|
+
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
212
|
+
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
213
|
+
*/function Y0(N,H,O,W){let Y=H,G=O,$,U=!1,Q;for(let X=0;X<N.length;X++){if(X){if(Y=U?Y[$]:Y[$]={},G=(Q=G[$]).c,W===0&&(Q.t===1||Q.t===2))return null;if(Q.t===2){let F=Y.length-1;Y=Y[F],G=G[F].c}}if($=N[X],(U=Object.hasOwn(Y,$))&&G[$]?.t===0&&G[$]?.d)return null;if(!U){if($==="__proto__")Object.defineProperty(Y,$,{enumerable:!0,configurable:!0,writable:!0}),Object.defineProperty(G,$,{enumerable:!0,configurable:!0,writable:!0});G[$]={t:X<N.length-1&&W===2?3:W,d:!1,i:0,c:{}}}}if(Q=G[$],Q.t!==W&&!(W===1&&Q.t===3))return null;if(W===2){if(!Q.d)Q.d=!0,Y[$]=[];Y[$].push(Y={}),Q.c[Q.i++]=Q={t:1,d:!1,i:0,c:{}}}if(Q.d)return null;if(Q.d=!0,W===1)Y=U?Y[$]:Y[$]={};else if(W===0&&U)return null;return[$,Y,Q.c]}function c(N,{maxDepth:H=1000,integersAsBigInt:O}={}){let W={},Y={},G=W,$=Y;for(let U=_(N,0);U<N.length;){if(N[U]==="["){let Q=N[++U]==="[",X=aN(N,U+=+Q,"]");if(Q){if(N[X[1]-1]!=="]")throw new V("expected end of table declaration",{toml:N,ptr:X[1]-1});X[1]++}let F=Y0(X[0],W,Y,Q?2:1);if(!F)throw new V("trying to redefine an already defined table or value",{toml:N,ptr:U});$=F[2],G=F[1],U=X[1]}else{let Q=aN(N,U),X=Y0(Q[0],G,$,0);if(!X)throw new V("trying to redefine an already defined table or value",{toml:N,ptr:U});let F=RN(N,Q[1],void 0,H,O);X[1][X[0]]=F[0],U=F[1]}if(U=_(N,U,!0),N[U]&&N[U]!==`
|
|
214
|
+
`&&N[U]!=="\r")throw new V("each key-value declaration must be followed by an end-of-line",{toml:N,ptr:U});U=_(N,U)}return W}/*!
|
|
215
|
+
* Copyright (c) Squirrel Chat et al., All rights reserved.
|
|
216
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
|
217
|
+
*
|
|
218
|
+
* Redistribution and use in source and binary forms, with or without
|
|
219
|
+
* modification, are permitted provided that the following conditions are met:
|
|
220
|
+
*
|
|
221
|
+
* 1. Redistributions of source code must retain the above copyright notice, this
|
|
222
|
+
* list of conditions and the following disclaimer.
|
|
223
|
+
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
224
|
+
* this list of conditions and the following disclaimer in the
|
|
225
|
+
* documentation and/or other materials provided with the distribution.
|
|
226
|
+
* 3. Neither the name of the copyright holder nor the names of its contributors
|
|
227
|
+
* may be used to endorse or promote products derived from this software without
|
|
228
|
+
* specific prior written permission.
|
|
229
|
+
*
|
|
230
|
+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
231
|
+
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
232
|
+
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
233
|
+
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
234
|
+
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
235
|
+
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
236
|
+
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
237
|
+
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
238
|
+
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
239
|
+
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
240
|
+
*/var G0=/^[a-z0-9-_]+$/i;function TN(N){let H=typeof N;if(H==="object"){if(Array.isArray(N))return"array";if(N instanceof Date)return"date"}return H}function YW(N){for(let H=0;H<N.length;H++)if(TN(N[H])!=="object")return!1;return N.length!=0}function BH(N){return JSON.stringify(N).replace(/\x7f/g,"\\u007f")}function DH(N,H,O,W){if(O===0)throw Error("Could not stringify the object: maximum object depth exceeded");if(H==="number"){if(isNaN(N))return"nan";if(N===1/0)return"inf";if(N===-1/0)return"-inf";if(W&&Number.isInteger(N))return N.toFixed(1);return N.toString()}if(H==="bigint"||H==="boolean")return N.toString();if(H==="string")return BH(N);if(H==="date"){if(isNaN(N.getTime()))throw TypeError("cannot serialize invalid date");return N.toISOString()}if(H==="object")return GW(N,O,W);if(H==="array")return $W(N,O,W)}function GW(N,H,O){let W=Object.keys(N);if(W.length===0)return"{}";let Y="{ ";for(let G=0;G<W.length;G++){let $=W[G];if(G)Y+=", ";Y+=G0.test($)?$:BH($),Y+=" = ",Y+=DH(N[$],TN(N[$]),H-1,O)}return Y+" }"}function $W(N,H,O){if(N.length===0)return"[]";let W="[ ";for(let Y=0;Y<N.length;Y++){if(Y)W+=", ";if(N[Y]===null||N[Y]===void 0)throw TypeError("arrays cannot contain null or undefined values");W+=DH(N[Y],TN(N[Y]),H-1,O)}return W+" ]"}function UW(N,H,O,W){if(O===0)throw Error("Could not stringify the object: maximum object depth exceeded");let Y="";for(let G=0;G<N.length;G++)Y+=`${Y&&`
|
|
241
|
+
`}[[${H}]]
|
|
242
|
+
`,Y+=CH(0,N[G],H,O,W);return Y}function CH(N,H,O,W,Y){if(W===0)throw Error("Could not stringify the object: maximum object depth exceeded");let G="",$="",U=Object.keys(H);for(let Q=0;Q<U.length;Q++){let X=U[Q];if(H[X]!==null&&H[X]!==void 0){let F=TN(H[X]);if(F==="symbol"||F==="function")throw TypeError(`cannot serialize values of type '${F}'`);let M=G0.test(X)?X:BH(X);if(F==="array"&&YW(H[X]))$+=($&&`
|
|
243
|
+
`)+UW(H[X],O?`${O}.${M}`:M,W-1,Y);else if(F==="object"){let R=O?`${O}.${M}`:M;$+=($&&`
|
|
244
|
+
`)+CH(R,H[X],R,W-1,Y)}else G+=M,G+=" = ",G+=DH(H[X],F,W,Y),G+=`
|
|
245
|
+
`}}if(N&&(G||!$))G=G?`[${N}]
|
|
246
|
+
${G}`:`[${N}]`;return G&&$?`${G}
|
|
247
|
+
${$}`:G||$}function d(N,{maxDepth:H=1000,numbersAsFloat:O=!1}={}){if(TN(N)!=="object")throw TypeError("stringify can only be called with an object");let W=CH(0,N,"",H,O);if(W[W.length-1]!==`
|
|
248
|
+
`)return W+`
|
|
249
|
+
`;return W}/*!
|
|
250
|
+
* Copyright (c) Squirrel Chat et al., All rights reserved.
|
|
251
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
|
252
|
+
*
|
|
253
|
+
* Redistribution and use in source and binary forms, with or without
|
|
254
|
+
* modification, are permitted provided that the following conditions are met:
|
|
255
|
+
*
|
|
256
|
+
* 1. Redistributions of source code must retain the above copyright notice, this
|
|
257
|
+
* list of conditions and the following disclaimer.
|
|
258
|
+
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
259
|
+
* this list of conditions and the following disclaimer in the
|
|
260
|
+
* documentation and/or other materials provided with the distribution.
|
|
261
|
+
* 3. Neither the name of the copyright holder nor the names of its contributors
|
|
262
|
+
* may be used to endorse or promote products derived from this software without
|
|
263
|
+
* specific prior written permission.
|
|
264
|
+
*
|
|
265
|
+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
266
|
+
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
267
|
+
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
268
|
+
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
269
|
+
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
270
|
+
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
271
|
+
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
272
|
+
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
273
|
+
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
274
|
+
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
275
|
+
*/function L(N,H=200){return new Response(JSON.stringify(N),{status:H,headers:{"content-type":"application/json"}})}function Z(N,H,O){return L({error:H,detail:O},N)}async function K(N){try{return await N.json()}catch{throw new B("Invalid JSON body")}}function A(N,H){if(typeof N!=="string"||N.length===0)throw new B(`Missing or invalid field: ${H}`);return N}class B extends Error{constructor(N){super(N);this.name="BadRequestError"}}import{promises as j}from"fs";import I from"path";import SH from"path";function e(N,H){let O=SH.resolve(N),W=SH.resolve(O,H||".");if(W!==O&&!W.startsWith(O+SH.sep))throw new oN(H);return W}class oN extends Error{constructor(N){super(`Path escapes workspace: ${N}`);this.name="PathEscapeError"}}var QW=2097152,XW=new Set([".png",".jpg",".jpeg",".gif",".webp",".svg",".bmp",".ico",".avif"]),ZW=new Set([".zip",".tar",".gz",".7z",".exe",".dll",".so",".dylib",".pdf",".woff",".woff2",".ttf",".mp3",".mp4",".mov",".webm",".sqlite",".db",".bin"]);function LW(N){let H=I.extname(N).toLowerCase();if(H===".md"||H===".markdown")return"markdown";if(H===".json"||H===".jsonl")return"json";if(XW.has(H))return"image";if(ZW.has(H))return"binary";return"text"}function s(N,H){return e(J(H),N)}function RH(N,H){let O=I.relative(J(H),N);return O===""?".":l(O)}async function $0(N,H){let O=await j.stat(N),W={name:I.basename(N)||".",path:RH(N,H),type:O.isDirectory()?"dir":"file",modifiedAt:O.mtime.toISOString()};if(W.type==="file")return W.size=O.size,W;let Y=await j.readdir(N,{withFileTypes:!0}),G=await Promise.all(Y.map(($)=>$0(I.join(N,$.name),H)));return G.sort(($,U)=>$.type!==U.type?$.type==="dir"?-1:1:$.name.localeCompare(U.name)),W.children=G,W}async function U0(N=".",H=z){return $0(s(N,H),H)}async function Q0(N,H=z){let O=s(N,H),W=await j.stat(O);if(W.isDirectory())throw Error(`Not a file: ${N}`);let Y=LW(O),G={path:RH(O,H),kind:Y,size:W.size,modifiedAt:W.mtime.toISOString()};if(Y==="image"||Y==="binary")return G;if(W.size>QW)throw Error(`File too large to open (${W.size} bytes): ${N}`);return G.content=await j.readFile(O,"utf8"),G}async function X0(N,H,O=z){let W=s(N,O);await j.mkdir(I.dirname(W),{recursive:!0}),await j.writeFile(W,H,"utf8")}async function Z0(N,H=z){await j.mkdir(s(N,H),{recursive:!0})}async function L0(N,H=z){let O=s(N,H);if(O===I.resolve(J(H)))throw Error("Cannot delete the workspace root");await j.rm(O,{recursive:!0,force:!0})}async function F0(N,H,O=z){let W=s(N,O),Y=s(H,O);if(W===I.resolve(J(O)))throw Error("Cannot rename the workspace root");await j.mkdir(I.dirname(Y),{recursive:!0}),await j.rename(W,Y)}async function z0(N,H,O,W=z){let Y=I.basename(H);if(!Y||Y==="."||Y==="..")throw Error(`Invalid file name: ${H}`);let G=e(J(W),I.join(N||".",Y));return await j.mkdir(I.dirname(G),{recursive:!0}),await Bun.write(G,O),RH(G,W)}function dN(N,H=z){return s(N,H)}import{randomBytes as FW}from"crypto";function sN(N){return`${N}_${FW(6).toString("hex")}`}var TH=null;function K0(N){TH=N}function i(N,H){TH?.publish(N,JSON.stringify(H))}function M0(N,H){TH?.publish(N,H)}import{promises as EN}from"fs";import zW from"os";import EH from"path";var t=new Map,A0=!1;function _H(N){return EH.join(n(),N,"meta.json")}var J0=EH.join(zW.homedir(),".agenthost");function B0(N){let H=JSON.parse(N);if(H.cwd?.startsWith(J0))H.cwd=b+H.cwd.slice(J0.length);return H}async function D0(N){await EN.mkdir(EH.join(n(),N.id),{recursive:!0}),await EN.writeFile(_H(N.id),JSON.stringify(N,null,2)+`
|
|
276
|
+
`,"utf8")}async function VW(){if(A0)return;A0=!0;let N;try{N=await EN.readdir(n())}catch{return}for(let H of N){if(t.has(H))continue;try{let O=await EN.readFile(_H(H),"utf8"),W=B0(O);t.set(W.id,W)}catch{}}}async function C0(N){let H={id:sN("run"),projectId:N.projectId??z,prompt:N.prompt,status:"starting",startedAt:new Date().toISOString(),cwd:N.cwd,sandbox:N.sandbox,approvalPolicy:N.approvalPolicy,approvalsReviewer:N.approvalsReviewer,model:N.model,effort:N.effort,source:N.source,scheduleId:N.scheduleId,scheduleName:N.scheduleName};return t.set(H.id,H),await D0(H),H}async function NN(N,H){let O=await D(N);if(!O)return null;let W={...O,...H};return t.set(N,W),await D0(W),W}async function D(N){if(t.has(N))return t.get(N);try{let H=await EN.readFile(_H(N),"utf8"),O=B0(H);return t.set(N,O),O}catch{return null}}async function S0(N){await VW();let H=[...t.values()];return(N?H.filter((W)=>W.projectId===N):H).sort((W,Y)=>Y.startedAt.localeCompare(W.startedAt))}function g(N){return N==="queued"||N==="starting"||N==="running"||N==="waiting_approval"}import{promises as R0}from"fs";import KW from"path";function T0(N){return KW.join(n(),N,"events.jsonl")}async function E0(N){await R0.appendFile(T0(N.runId),JSON.stringify(N)+`
|
|
277
|
+
`,"utf8")}var MW=/"type":\s*"run\.(started|resumed|steered)"/,AW=400;async function _0(N,H={}){let O;try{O=await R0.readFile(T0(N),"utf8")}catch{return{events:[],offset:0,total:0}}let W=O.split(`
|
|
278
|
+
`);if(W.length>0&&W[W.length-1]==="")W.pop();let Y=W.length,G=Math.max(0,Math.min(H.before??Y,Y)),$=H.limit===void 0?0:Math.max(0,G-H.limit);if($>0){for(let Q=$;Q>=Math.max(0,$-AW);Q--)if(MW.test(W[Q])){$=Q;break}}let U=[];for(let Q=$;Q<G;Q++){let X=W[Q].trim();if(!X)continue;try{U.push(JSON.parse(X))}catch{}}return{events:U,offset:$,total:Y}}import{promises as N1}from"fs";import yW from"os";import H1 from"path";import CW from"os";import w from"path";import{existsSync as PN,readdirSync as SW}from"fs";import{mkdir as j0}from"fs/promises";import{randomUUID as RW}from"crypto";import{readFileSync as JW}from"fs";import{promises as BW}from"fs";import DW from"path";var P0=["browserProxy","browserNoProxy"];function f0(){return DW.join(b,"config.json")}var tN=null;function rN(){if(tN)return tN;let N={};try{N=JSON.parse(JW(f0(),"utf8"))}catch{}let H={};for(let O of P0){let W=N[O];if(typeof W==="string"&&W.length>0)H[O]=W}return tN=H,H}async function x0(N){let H={...rN()};for(let O of P0){if(!(O in N))continue;let W=N[O];if(typeof W==="string"&&W.trim().length>0)H[O]=W.trim();else delete H[O]}return await BW.writeFile(f0(),JSON.stringify(H,null,2)+`
|
|
279
|
+
`,"utf8"),tN=H,H}var TW="jun",k0=200,g0=process.platform==="win32"?"agent-browser.exe":"agent-browser";function v0(){let N=import.meta.dir;for(let H=0;H<8;H++){let O=w.join(N,"node_modules",".bin");if(PN(w.join(O,g0)))return O;let W=w.dirname(N);if(W===N)break;N=W}return null}function EW(N){let H=v0();if(H)return[w.join(H,g0),...N];return process.platform==="win32"?["cmd","/c","agent-browser",...N]:["agent-browser",...N]}var y0=Object.keys(process.env).find((N)=>N.toUpperCase()==="PATH")??"PATH",HH="agent",NH=null,eN=[];function h0(){let N=y("CLOAK_PATH");if(N&&PN(N))return N;let H=w.join(CW.homedir(),".cloakbrowser"),O;try{O=SW(H).filter((Y)=>Y.startsWith("chromium-"))}catch{return null}O.sort().reverse();let W=process.platform==="win32"?"chrome.exe":"chrome";for(let Y of O){let G=w.join(H,Y,W);if(PN(G))return G}return null}function _W(){let N=y("CHROME_PATH");if(N&&PN(N))return N;return(process.platform==="win32"?[`${process.env.ProgramFiles}\\Google\\Chrome\\Application\\chrome.exe`,`${process.env["ProgramFiles(x86)"]}\\Google\\Chrome\\Application\\chrome.exe`,`${process.env.LocalAppData}\\Google\\Chrome\\Application\\chrome.exe`]:process.platform==="darwin"?["/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"]:["/usr/bin/google-chrome","/usr/bin/google-chrome-stable","/opt/google/chrome/chrome"]).find((O)=>O&&PN(O))??null}function fH(){let N={AGENT_BROWSER_SESSION:TW,AGENT_BROWSER_PROFILE:w.join(CN(),"profile"),AGENT_BROWSER_DOWNLOAD_PATH:w.join(J(),"downloads"),AGENT_BROWSER_SCREENSHOT_DIR:w.join(J(),"screenshots"),AGENT_BROWSER_ARGS:"--disable-blink-features=AutomationControlled"},H=v0();if(H)N[y0]=`${H}${w.delimiter}${process.env[y0]??""}`;let O=h0();if(O)return N.AGENT_BROWSER_EXECUTABLE_PATH=O,N;let W=_W(),Y=process.platform!=="linux"||Boolean(process.env.DISPLAY),G=y("BROWSER_HEADED")!=="false"&&Y;if(process.platform==="linux"&&!process.env.DISPLAY&&y("BROWSER_HEADED")!=="false")console.warn("[browser] No cloakbrowser engine and no DISPLAY \u2014 running HEADLESS. Edge "+"WAFs (Reddit/Fastly) will block headless. Install cloakbrowser (works headless) or set up Xvfb + Google Chrome with DISPLAY for a VPS.");if(W&&G)N.AGENT_BROWSER_EXECUTABLE_PATH=W,N.AGENT_BROWSER_HEADED="true";else{if(W)N.AGENT_BROWSER_EXECUTABLE_PATH=W;N.AGENT_BROWSER_USER_AGENT="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36"}return N}function wW(){return{...process.env,...fH()}}function PW(){let N=xH().value;if(!N)return[];let H=["--proxy",N],O=kH().value;if(O)H.push("--proxy-bypass",O);return H}function xH(){let N=rN().browserProxy;if(N)return{value:N,source:"settings"};let H=y("BROWSER_PROXY")?.trim();if(H)return{value:H,source:"env"};return{value:null,source:"none"}}function kH(){let N=rN().browserNoProxy;if(N)return{value:N,source:"settings"};let H=y("BROWSER_NO_PROXY")?.trim();if(H)return{value:H,source:"env"};return{value:null,source:"none"}}var PH=!1;function m0(N){if(PH)return;if(y("NO_CLOAK_DOWNLOAD")==="true")return;if(h0())return;PH=!0,console.log("[browser] cloakbrowser Stealth Chromium not found \u2014 downloading in background\u2026"),Bun.spawn([process.execPath,"x","cloakbrowser","install"],{cwd:N,stdout:"inherit",stderr:"inherit"}).exited.then((O)=>{if(PH=!1,O===0)console.log("[browser] cloakbrowser Stealth Chromium ready.");else console.warn(`[browser] cloakbrowser download exited with code ${O}.`)})}async function b0(N,H,O){if(!N)return"";let W=N.getReader(),Y=new TextDecoder,G="",$=Date.now()+O;try{while(Date.now()<$){let U=Math.min(H,$-Date.now()),Q=await Promise.race([W.read(),new Promise((X)=>setTimeout(()=>X("timeout"),U))]);if(Q==="timeout"||Q.done)break;G+=Y.decode(Q.value,{stream:!0})}}finally{W.releaseLock()}return G}async function v(N,H={}){let O=[...PW(),...N],W=H.json?[...O,"--json"]:O,Y=Bun.spawn(EW(W),{env:wW(),stdout:"pipe",stderr:"pipe"}),G=setTimeout(()=>Y.kill(),H.timeoutMs??120000),$=await Y.exited;clearTimeout(G);let[U,Q]=await Promise.all([b0(Y.stdout,80,1500),b0(Y.stderr,60,300)]),X,F;if(H.json)try{let M=JSON.parse(U);if(X=M.data??M,M.success===!1)F=typeof M.error==="string"?M.error:"command failed"}catch{}return{ok:$===0&&!F,stdout:U,stderr:Q,data:X,error:F}}function XN(N,H){if(eN.unshift({id:RW(),ts:new Date().toISOString(),kind:N,detail:H}),eN.length>k0)eN.length=k0}function c0(){return eN}function l0(){return HH}function u0(N){HH=N,XN("control",N)}function i0(){return NH}var p0=(N)=>typeof N==="object"&&N!==null?N:{};function q0(N){if(typeof N==="string")return N;let H=p0(N);for(let O of["url","title","value","text","result"])if(typeof H[O]==="string")return H[O];return null}var fW=2500,wN=null,_N=null;function HN(){wN=null}async function fN(){if(wN&&Date.now()-wN.at<fW)return{...wN.status,controller:HH};if(_N)return _N;return _N=xW().then((N)=>{return wN={at:Date.now(),status:N},N}).finally(()=>{_N=null}),_N}async function xW(){let N=await v(["stream","status"],{json:!0,timeoutMs:30000}),H=p0(N.data),O=N.ok&&H.connected===!0,W=O&&H.enabled===!0;NH=W&&typeof H.port==="number"?H.port:null;let Y=null,G=null;if(O){let[$,U]=await Promise.all([v(["get","url"],{json:!0,timeoutMs:30000}),v(["get","title"],{json:!0,timeoutMs:30000})]);Y=$.ok?q0($.data):null,G=U.ok?q0(U.data):null}return{running:O,streaming:W,streamPort:NH,url:Y,title:G,controller:HH}}var I0={width:1280,height:720};async function yH(){await v(["set","viewport",String(I0.width),String(I0.height)],{timeoutMs:30000})}async function n0(){await Promise.all(["screenshots","downloads","reports"].map((N)=>j0(w.join(J(),N),{recursive:!0})))}async function a0(N){await n0(),await j0(w.join(CN(),"profile"),{recursive:!0});let H=await v(["open",N??"about:blank"],{timeoutMs:180000});if(!H.ok)throw Error(`agent-browser open failed: ${H.stderr||H.stdout}`);return await yH(),await v(["stream","enable"],{json:!0,timeoutMs:30000}),XN("start",N??"about:blank"),HN(),fN()}async function o0(){await v(["close"],{timeoutMs:30000}),NH=null,HN(),XN("stop")}async function d0(N){let H=await v(["open",N],{timeoutMs:120000});if(!H.ok)throw Error(`Navigation failed: ${H.stderr||H.stdout}`);await yH(),HN(),XN("navigate",N)}async function s0(N){let H=await v([N],{timeoutMs:60000});if(!H.ok)throw Error(`${N} failed: ${H.stderr||H.stdout}`);await yH(),HN(),XN(N)}async function t0(N){let H=await v(["press",N],{timeoutMs:30000});if(!H.ok)throw Error(`Key press failed: ${H.stderr||H.stdout}`);HN()}async function r0(){await n0();let N=`browser-${new Date().toISOString().replace(/[:.]/g,"-")}.png`,H=w.join(J(),"screenshots",N),O=await v(["screenshot",H],{timeoutMs:60000});if(!O.ok)throw Error(`Screenshot failed: ${O.stderr||O.stdout}`);return XN("screenshot",`screenshots/${N}`),`screenshots/${N}`}class bH{send;handlers;nextId=1;pending=new Map;constructor(N,H){this.send=N;this.handlers=H}request(N,H){let O=this.nextId++,W=new Promise((Y,G)=>{this.pending.set(O,{method:N,resolve:Y,reject:G})});return this.send(JSON.stringify({jsonrpc:"2.0",id:O,method:N,params:H})),W}notify(N,H){this.send(JSON.stringify({jsonrpc:"2.0",method:N,params:H}))}respond(N,H){this.send(JSON.stringify({jsonrpc:"2.0",id:N,result:H}))}respondError(N,H,O){this.send(JSON.stringify({jsonrpc:"2.0",id:N,error:{code:H,message:O}}))}handleLine(N){let H;try{H=JSON.parse(N)}catch{console.warn("[codex] non-JSON line on stdout:",N.slice(0,200));return}if(H.method!==void 0){if(H.id!==void 0)this.handlers.onServerRequest(H.id,H.method,H.params);else this.handlers.onNotification(H.method,H.params);return}if(H.id===void 0)return;let O=this.pending.get(Number(H.id));if(!O)return;if(this.pending.delete(Number(H.id)),H.error)O.reject(Error(`${O.method} failed: ${H.error.message} (${H.error.code})`));else O.resolve(H.result)}failAll(N){for(let H of this.pending.values())H.reject(Error(`${H.method} failed: ${N}`));this.pending.clear()}}function e0(N){let H="",O=new TextDecoder;return{push(W){H+=O.decode(W,{stream:!0});let Y;while((Y=H.indexOf(`
|
|
280
|
+
`))!==-1){let G=H.slice(0,Y).replace(/\r$/,"");if(H=H.slice(Y+1),G.trim().length>0)N(G)}},flush(){let W=H.trim();if(H="",W.length>0)N(W)}}}class qH{handlers;proc=null;rpc=null;initialized=!1;constructor(N){this.handlers=N}get running(){return this.proc!==null}async start(){if(this.proc)return;await bW();let N=Bun.which("codex");if(!N)throw Error("codex binary not found in PATH. Install Codex CLI first.");let H=/\.(cmd|bat)$/i.test(N)?["cmd","/c",N,"app-server"]:[N,"app-server"],O=Bun.spawn(H,{cwd:J(),env:{...process.env,CODEX_HOME:q(),...fH()},stdin:"pipe",stdout:"pipe",stderr:"pipe",onExit:(Y,G)=>{console.log(`[codex] app-server exited (code ${G})`),this.rpc?.failAll(`codex app-server exited (code ${G})`),this.proc=null,this.rpc=null,this.initialized=!1,this.handlers.onExit(G)}});this.proc=O,this.rpc=new bH((Y)=>{O.stdin.write(Y+`
|
|
281
|
+
`),O.stdin.flush()},{onNotification:(Y,G)=>this.handlers.onNotification(Y,G),onServerRequest:(Y,G,$)=>this.handlers.onServerRequest(Y,G,$)});let W=this.rpc;(async()=>{let Y=e0((G)=>W.handleLine(G));for await(let G of O.stdout)Y.push(G);Y.flush()})(),(async()=>{let Y=new TextDecoder;for await(let G of O.stderr){let $=Y.decode(G).trimEnd();if($)console.error("[codex:stderr]",$)}})()}async initializeOnce(){if(this.initialized)return;await this.requireRpc().request("initialize",{clientInfo:{name:"jun",title:"Jun",version:"0.0.1"},capabilities:{experimentalApi:!0}}),this.requireRpc().notify("initialized",{}),this.initialized=!0}request(N,H){return this.requireRpc().request(N,H)}respond(N,H){this.requireRpc().respond(N,H)}respondError(N,H,O){this.requireRpc().respondError(N,H,O)}requireRpc(){if(!this.rpc)throw Error("codex app-server is not running");return this.rpc}}async function bW(){let N=H1.join(q(),"auth.json");try{await N1.access(N);return}catch{}let H=H1.join(yW.homedir(),".codex","auth.json");try{await N1.copyFile(H,N),console.log("[codex] copied auth.json from ~/.codex into project codex-home")}catch{console.warn("[codex] no auth.json found in ~/.codex \u2014 runs may fail until `codex login` is run")}}var xN=null,OH=null;function WH(){return xN}function O1(){return OH}function W1(N){if(xN=N,N)OH=null}function YH(){xN=null,OH=null}function Y1(N){let H=N??{};if(OH={success:H.success===!0,error:H.error??null,at:new Date().toISOString()},!H.loginId||xN?.loginId===H.loginId)xN=null}var qW={"thread/started":"codex.thread.started","turn/started":"codex.turn.started","turn/completed":"codex.turn.completed","item/started":"codex.item.started","item/completed":"codex.item.completed","item/agentMessage/delta":"codex.message.delta","item/reasoning/textDelta":"codex.reasoning.delta","item/reasoning/summaryTextDelta":"codex.reasoning.summary.delta","item/commandExecution/outputDelta":"codex.command.output","item/fileChange/patchUpdated":"codex.file_change.patch",error:"codex.error"},IW={"item/commandExecution/requestApproval":"codex.approval.command","item/fileChange/requestApproval":"codex.approval.file_change","item/permissions/requestApproval":"codex.approval.permissions","item/tool/requestUserInput":"codex.approval.user_input","mcpServer/elicitation/request":"codex.approval.elicitation"};function G1(N){return qW[N]??`codex.${N.split("/").join(".")}`}function $1(N){return IW[N]??null}function U1(N){return N==="item/commandExecution/requestApproval"||N==="item/fileChange/requestApproval"||N==="item/permissions/requestApproval"}function kN(N){if(typeof N!=="object"||N===null)return null;let H=N;if(typeof H.threadId==="string")return H.threadId;let O=H.thread;if(typeof O==="object"&&O!==null){let W=O.id;if(typeof W==="string")return W}return null}var Q1={readOnly:"read-only",workspaceWrite:"workspace-write",dangerFullAccess:"danger-full-access"},X1={readOnly:{type:"readOnly"},workspaceWrite:{type:"workspaceWrite"},dangerFullAccess:{type:"dangerFullAccess"}},IH={never:"never",onRequest:"on-request",onFailure:"on-failure",untrusted:"untrusted"},GH=`# Who you are
|
|
282
|
+
|
|
283
|
+
You are Jun. That's your name, use it if anyone asks. You live inside JunHost,
|
|
284
|
+
your own self-hosted dashboard that runs you as a long-running local/VPS assistant, and
|
|
285
|
+
you handle real work: editing files, running commands, driving a browser,
|
|
286
|
+
managing skills and MCP servers. Think best friend who happens to be scarily
|
|
287
|
+
competent, not an obedient assistant. You've got opinions, a little attitude, and
|
|
288
|
+
zero interest in sounding like corporate support. You don't talk about which
|
|
289
|
+
model powers you; you're just Jun.
|
|
290
|
+
|
|
291
|
+
# How you talk
|
|
292
|
+
|
|
293
|
+
- Be a person, not a help desk. Relaxed, a little playful, quick. Lead with the
|
|
294
|
+
answer or the result; cut the preamble.
|
|
295
|
+
- Match the user's energy. Terse gets terse. If they're joking around, give it
|
|
296
|
+
back; a light tease or a dry aside is fine when the moment's there. Read the
|
|
297
|
+
room: when they're heads-down or something broke, drop the bit and just deliver.
|
|
298
|
+
- Never grovel and never flatter. No "Great question!", no "Absolutely!", no
|
|
299
|
+
apology spirals. If you're wrong, just own it in a few words and fix it.
|
|
300
|
+
- Don't narrate or ask permission to think. Answer a greeting with a greeting,
|
|
301
|
+
not a status report. Don't restate the task before doing it.
|
|
302
|
+
- Write like a human texting a smart friend: no em-dashes (use commas, colons,
|
|
303
|
+
or semicolons), and never the "not just X, but Y" construction or other LLM
|
|
304
|
+
tics. Skip filler enthusiasm.
|
|
305
|
+
- All of the above is for conversational prose ONLY. Code, file contents,
|
|
306
|
+
commands, paths, identifiers, and technical output stay exactly correct,
|
|
307
|
+
properly cased, and untouched by any style rule. Don't get cute with the work
|
|
308
|
+
itself.
|
|
309
|
+
|
|
310
|
+
# How you work
|
|
311
|
+
|
|
312
|
+
- When a task is ambiguous, make a reasonable assumption, state it in one line,
|
|
313
|
+
and proceed. Don't stall on clarifying questions unless you genuinely can't
|
|
314
|
+
move without the answer.
|
|
315
|
+
- Prefer durable, well-organized workspace files. Keep outputs (reports,
|
|
316
|
+
screenshots, downloads) in the conventional workspace subfolders.
|
|
317
|
+
- Quietly use what you already know from the conversation and the workspace
|
|
318
|
+
instead of asking the user to repeat themselves.
|
|
319
|
+
- Report outcomes honestly. If something failed, say so plainly with the actual
|
|
320
|
+
error; don't dress up a partial result as done.
|
|
321
|
+
- Per-workspace guidance lives in each workspace's AGENTS.md and takes
|
|
322
|
+
precedence over this general guidance when they differ.`,ON=new Map,WN=new Map,yN=new Map,Z1=new Set,bN=new Map,ZN=new Map,jH="__default__";function jW(N){let H=N.error?.message;return typeof H==="string"&&H.includes("unsupported_parameter")&&H.includes("reasoning.summary")}async function L1(N,H,O){if(Z1.has(H))O.summary="none";bN.set(N,O),await h().request("turn/start",O)}var IN=new Map,qN=null;function h(){if(!qN)qN=new qH({onNotification:gW,onServerRequest:vW,onExit:hW});return qN}async function T(N,H,O,W){let Y={id:sN("evt"),runId:N,ts:new Date().toISOString(),source:H,type:O,payload:W};return await E0(Y),i(`run:${N}`,Y),i("runs",{type:"run.event",runId:N,eventType:O}),Y}async function x(N,H){let O={status:H};if(H==="completed"||H==="failed"||H==="stopped")O.completedAt=new Date().toISOString();let W=await NN(N,O);if(W)i("runs",{type:"run.updated",run:W})}function gW(N,H){if(N==="account/login/completed"){Y1(H);return}let O=kN(H),W=O?IN.get(O):void 0;if(W){if(N==="item/completed"){let G=H.item;if(G?.type==="agentMessage"&&typeof G.text==="string")W.text=G.text}else if(N==="turn/completed"||N==="error")W.done(W.text);return}let Y=O?ON.get(O):void 0;if(!Y)return;(async()=>{if(await T(Y,"codex",G1(N),H),N==="turn/started"){let G=H.turn?.id;if(typeof G==="string")yN.set(Y,G)}else if(N==="turn/completed"){let G=H.turn?.id;if(typeof G==="string"&&ZN.get(Y)===G){ZN.delete(Y);return}ZN.delete(Y),yN.delete(Y),bN.delete(Y);let $=await D(Y);if($&&g($.status))await x(Y,"completed");if(WN.delete(Y),$&&!$.title)cW(Y)}else if(N==="error"){let G=H.turnId;yN.delete(Y);let $=await D(Y),U=bN.get(Y);if($&&U&&U.summary&&U.summary!=="none"&&jW(H)){Z1.add($.model??jH);let Q={...U,summary:"none"};console.warn(`[runs] ${$.model??"default model"} rejects reasoning.summary \u2014 retrying with summaries disabled`);try{if(typeof G==="string")ZN.set(Y,G);bN.set(Y,Q),await h().request("turn/start",Q);return}catch(X){ZN.delete(Y),console.warn(`[runs] summary-less retry failed for ${Y}:`,X)}}if($&&g($.status))await x(Y,"failed")}else if(N==="thread/name/updated"){let G=H.threadName;if(typeof G==="string"&&G.trim()){let $=await NN(Y,{title:G.trim()});if($)i("runs",{type:"run.updated",run:$})}}})()}function vW(N,H,O){let W=$1(H),Y=kN(O),G=Y?ON.get(Y):void 0;if(!W||!G){if(console.warn(`[runs] auto-declining unroutable server request ${H} (id ${N})`),U1(H))h().respond(N,{decision:"decline"});else h().respondError(N,-32601,"Jun cannot handle this request yet");return}(async()=>{let $=WN.get(G)??[];$.push({requestId:N,method:H}),WN.set(G,$),await x(G,"waiting_approval"),await T(G,"codex",W,{requestId:N,method:H,params:O})})()}function hW(N){for(let O of IN.values())O.done(O.text);IN.clear();let H=[...ON.values()];ON.clear(),WN.clear(),yN.clear(),bN.clear(),ZN.clear();for(let O of H)(async()=>{let W=await D(O);if(!W||!g(W.status))return;await T(O,"daemon","run.failed",{reason:`codex app-server exited (code ${N})`}),await x(O,"failed")})()}function gH(N,H,O,W){let Y=(O??[]).filter((Q)=>Q.mediaType?.startsWith("image/")),G=(O??[]).filter((Q)=>!Q.mediaType?.startsWith("image/")),$=H;if(G.length>0)$+=`
|
|
323
|
+
|
|
324
|
+
Attached workspace files:
|
|
325
|
+
`+G.map((Q)=>`- ${Q.path}`).join(`
|
|
326
|
+
`);let U=[{type:"text",text:$}];if(W)U.push({type:"skill",name:W.name,path:W.path});for(let Q of Y)U.push({type:"localImage",path:dN(Q.path,N)});return U}function mW(N){if(!N)return null;let H=N.split(`
|
|
327
|
+
`)[0].replace(/^["'`#*\s]+|["'`*\s]+$/g,"").replace(/\s+/g," ").trim();if(!H)return null;return H.length>60?H.slice(0,57).trimEnd()+"\u2026":H}async function cW(N){let H=await D(N);if(!H||H.title||!H.codexThreadId)return;try{let O=h(),W=await O.request("thread/start",{cwd:H.cwd,ephemeral:!0,sandbox:"read-only",approvalPolicy:"never",serviceName:"jun"}),Y=kN(W);if(!Y)return;let G=await new Promise((Q)=>{let X=(M)=>{clearTimeout(F),IN.delete(Y),Q(M)},F=setTimeout(()=>X(null),30000);IN.set(Y,{text:null,done:X}),O.request("turn/start",{threadId:Y,input:[{type:"text",text:`Reply with ONLY a short title (3-6 words, no quotes, no punctuation at the end) summarizing this conversation opener:
|
|
328
|
+
|
|
329
|
+
`+H.prompt.slice(0,2000)}],effort:"low"}).catch(()=>X(null))}),$=mW(G);if(!$)return;await O.request("thread/name/set",{threadId:H.codexThreadId,name:$});let U=await NN(N,{title:$});if(U)i("runs",{type:"run.updated",run:U})}catch(O){console.warn(`[runs] title generation failed for ${N}:`,O)}}async function C(N,H){let O=h();return await O.start(),await O.initializeOnce(),O.request(N,H)}async function LN(N){let H=N.projectId??"default",O=N.cwd??J(H),W=await C0({prompt:N.prompt,cwd:O,projectId:H,sandbox:N.sandbox??"workspaceWrite",approvalPolicy:N.approvalPolicy??"onRequest",approvalsReviewer:N.approvalsReviewer??"user",model:N.model,effort:N.effort??"medium",source:N.source,scheduleId:N.scheduleId,scheduleName:N.scheduleName});return i("runs",{type:"run.updated",run:W}),await T(W.id,"daemon","run.started",{prompt:N.prompt,cwd:O,projectId:H,attachments:N.attachments??[]}),(async()=>{try{let Y=h();await Y.start(),await Y.initializeOnce();let G=await Y.request("thread/start",{cwd:O,model:N.model??null,sandbox:Q1[N.sandbox??"workspaceWrite"],approvalPolicy:IH[N.approvalPolicy??"onRequest"],...N.approvalsReviewer==="auto_review"?{approvalsReviewer:"auto_review"}:{},...GH?{developerInstructions:GH}:{},serviceName:"jun"}),$=kN(G)??(typeof G.threadId==="string"?G.threadId:null);if(!$)throw Error(`thread/start returned no thread id: ${JSON.stringify(G)}`);ON.set($,W.id),await NN(W.id,{codexThreadId:$}),await x(W.id,"running"),await L1(W.id,N.model??jH,{threadId:$,input:gH(H,N.prompt,N.attachments,N.skill),summary:"detailed",effort:N.effort??"medium",sandboxPolicy:X1[N.sandbox??"workspaceWrite"]})}catch(Y){let G=Y instanceof Error?Y.message:String(Y);await T(W.id,"daemon","run.failed",{reason:G}),await x(W.id,"failed")}})(),W}async function vH(N,H){let O=h();if(await O.start(),await O.initializeOnce(),ON.has(H))return{server:O,resumed:!1};let W=await D(N);return await O.request("thread/resume",{threadId:H,...W?.approvalPolicy?{approvalPolicy:IH[W.approvalPolicy]}:{},...W?.approvalsReviewer==="auto_review"?{approvalsReviewer:"auto_review"}:{},...W?.model?{model:W.model}:{},...W?.sandbox?{sandbox:Q1[W.sandbox]}:{},...GH?{developerInstructions:GH}:{}}),ON.set(H,N),{server:O,resumed:!0}}async function $H(N,H,O,W){let Y=await D(N);if(!Y)throw Error(`Run not found: ${N}`);if(g(Y.status))throw Error("Run is still active \u2014 wait for the current turn to finish");let G=Y.codexThreadId;if(!G)throw Error("Run has no Codex thread to resume");let $={};if(W?.sandbox&&W.sandbox!==Y.sandbox)$.sandbox=W.sandbox;if(W?.approvalPolicy&&W.approvalPolicy!==Y.approvalPolicy)$.approvalPolicy=W.approvalPolicy;if(W?.approvalsReviewer&&W.approvalsReviewer!==Y.approvalsReviewer)$.approvalsReviewer=W.approvalsReviewer;if(W?.model&&W.model!==Y.model)$.model=W.model;if(W?.effort&&W.effort!==Y.effort)$.effort=W.effort;if(Object.keys($).length>0){let U=await NN(N,$);if(U)i("runs",{type:"run.updated",run:U})}return await T(N,"daemon","run.resumed",{prompt:H,attachments:O??[],...Object.keys($).length>0?{modeChanges:$}:{}}),await x(N,"running"),(async()=>{try{await vH(N,G);let U=$.sandbox??Y.sandbox??"workspaceWrite",Q=$.approvalPolicy??Y.approvalPolicy??"onRequest",X=$.approvalsReviewer??Y.approvalsReviewer,F=$.model??Y.model,M=(await D(N))?.serviceTier;await L1(N,F??jH,{threadId:G,input:gH(Y.projectId,H,O),summary:"detailed",effort:$.effort??Y.effort??"medium",sandboxPolicy:X1[U],approvalPolicy:IH[Q],...X==="auto_review"?{approvalsReviewer:X}:{},...F?{model:F}:{},...M?{serviceTier:M}:{}})}catch(U){let Q=U instanceof Error?U.message:String(U);await T(N,"daemon","run.failed",{reason:Q}),await x(N,"failed")}})(),await D(N)}async function F1(N,H,O){let W=await D(N);if(!W)throw Error(`Run not found: ${N}`);if(!g(W.status))throw Error("Run is not active \u2014 send a follow-up message instead");let Y=W.codexThreadId,G=yN.get(N);if(!Y||!G)throw Error("No active turn to steer");await T(N,"daemon","run.steered",{prompt:H,attachments:O??[]}),await h().request("turn/steer",{threadId:Y,expectedTurnId:G,input:gH(W.projectId,H,O)})}async function z1(N,H){let O=await D(N);if(!O)throw Error(`Run not found: ${N}`);if(H){let G=((await C("model/list",{})).data??[]).find(($)=>O.model?$.model===O.model:$.isDefault);if(!G?.serviceTiers?.some(($)=>$.id==="priority"))throw Error(`Model ${G?.model??O.model??"unknown"} does not support fast mode`)}let W=await NN(N,{serviceTier:H?"priority":"standard"});if(W)i("runs",{type:"run.updated",run:W});return await T(N,"daemon","run.fast",{enabled:H}),W}async function V1(N){let H=await D(N);if(!H)throw Error(`Run not found: ${N}`);if(g(H.status))throw Error("Run is still active \u2014 wait for the current turn to finish");let O=H.codexThreadId;if(!O)throw Error("Run has no Codex thread");let{server:W}=await vH(N,O);await T(N,"daemon","run.compact.started",{}),await W.request("thread/compact/start",{threadId:O})}async function K1(N,H){let O=await D(N);if(!O)throw Error(`Run not found: ${N}`);if(g(O.status))throw Error("Run is still active \u2014 wait for the current turn to finish");let W=O.codexThreadId;if(!W)throw Error("Run has no Codex thread");let{server:Y}=await vH(N,W),G=H?.trim();await T(N,"daemon","run.review.started",{instructions:G??null}),await x(N,"running");try{await Y.request("review/start",{threadId:W,target:G?{type:"custom",instructions:G}:{type:"uncommittedChanges"},delivery:"inline"})}catch($){let U=$ instanceof Error?$.message:String($);throw await T(N,"daemon","run.failed",{reason:U}),await x(N,"failed"),$}return await D(N)}async function M1(N){let H=await D(N);if(!H||!g(H.status))return!1;if(H.codexThreadId&&qN?.running)try{await qN.request("turn/interrupt",{threadId:H.codexThreadId})}catch(O){console.warn(`[runs] turn/interrupt failed for ${N}:`,O)}return WN.delete(N),await T(N,"daemon","run.stopped",{}),await x(N,"stopped"),!0}async function A1(N,H,O){let W=WN.get(N)??[],Y=W.findIndex(($)=>String($.requestId)===String(H));if(Y===-1)return!1;let[G]=W.splice(Y,1);if(W.length===0)WN.delete(N);if(G.method==="mcpServer/elicitation/request"){let $=O==="decline"||O==="cancel"?O:"accept";h().respond(G.requestId,{action:$})}else h().respond(G.requestId,{decision:O});if(await T(N,"daemon","approval.resolved",{requestId:G.requestId,decision:O}),W.length===0)await x(N,"running");return!0}function zN(){return lW.join(q(),"config.toml")}async function p(){try{return await FN.readFile(zN(),"utf8")}catch{return""}}async function B1(N){try{c(N)}catch(H){throw new B(`Invalid TOML: ${H instanceof Error?H.message:String(H)}`)}await FN.writeFile(zN(),N,"utf8")}function uW(N){if(!N.trim())return{};let O=c(N).mcp_servers;if(typeof O!=="object"||O===null)return{};return O}async function iW(){let N=new Map;try{let H=await C("mcpServerStatus/list",{detail:"full"});for(let O of H.data??[]){let W=Object.entries(O.tools??{}).map(([Y,G])=>({name:Y,description:G?.description}));N.set(O.name,{startupState:O.serverInfo?"ready":"starting",authStatus:O.authStatus??null,tools:W})}}catch(H){console.warn("[mcp] mcpServerStatus/list failed:",H)}return N}async function D1(){let N=await p(),H=uW(N),O=await iW();return{servers:Object.entries(H).map(([Y,G])=>{let $=O.get(Y);return{name:Y,command:G.command,args:G.args,envKeys:G.env?Object.keys(G.env):void 0,url:G.url,enabled:G.enabled!==!1,startupState:$?.startupState??null,authStatus:$?.authStatus??null,tools:$?.tools??[],error:$?.error}})}}var pW=/^[A-Za-z0-9_-]+$/;async function C1(N){if(!pW.test(N.name))throw new B(`Invalid server name "${N.name}" \u2014 letters, digits, _ and - only`);if(!N.command&&!N.url)throw new B("Server needs either a command or a url");let H=await p(),O=H.trim()?c(H):{},W=O.mcp_servers??{},Y={};if(N.command)Y.command=N.command;if(N.args&&N.args.length>0)Y.args=N.args;if(N.env&&Object.keys(N.env).length>0)Y.env=N.env;if(N.url)Y.url=N.url;if(N.enabled===!1)Y.enabled=!1;W[N.name]=Y,O.mcp_servers=W,await FN.writeFile(zN(),d(O),"utf8")}async function S1(N){let H=await p();if(!H.trim())return!1;let O=c(H),W=O.mcp_servers;if(!W||!(N in W))return!1;return delete W[N],await FN.writeFile(zN(),d(O),"utf8"),!0}async function R1(N,H){let O=await p(),W=c(O||""),Y=W.mcp_servers??{};if(!Y[N])throw new B(`Server not found: ${N}`);Y[N].enabled=H,W.mcp_servers=Y,await FN.writeFile(zN(),d(W),"utf8")}async function T1(){await C("config/mcpServer/reload",{})}async function E1(N,H){let O=await p(),W=O.trim()?c(O):{},Y=W.mcp_servers??{},G={command:process.execPath,args:[N],env:{JUN_PORT:String(H)}},$=Y.jun;if($&&!Y.agenthost&&$.command===G.command&&JSON.stringify($.args)===JSON.stringify(G.args)&&$.env?.JUN_PORT===String(H))return;delete Y.agenthost,Y.jun=G,W.mcp_servers=Y,await FN.writeFile(zN(),d(W),"utf8")}var aW=Date.now();function _1(){return L({ok:!0})}function w1(){let N={ok:!0,name:"jun",version:"0.0.1",projectId:z,dataRoot:b,workspaceRoot:J(),uptimeSeconds:Math.round((Date.now()-aW)/1000)};return L(N)}import oW from"path";var UH={ok:!0};async function P1(N,H){let O=H.pathname.slice(11),W=H.searchParams.get("path")??".",Y=H.searchParams.get("project")??z;switch(`${N.method} ${O}`){case"GET tree":return L(await U0(W,Y));case"GET read":return L(await Q0(W,Y));case"GET download":{let G=dN(W,Y),$=Bun.file(G);if(!await $.exists())return Z(404,`File not found: ${W}`);return new Response($,{headers:{"content-disposition":`attachment; filename="${encodeURIComponent(oW.basename(G))}"`}})}case"POST write":{let G=await K(N);return await X0(A(G.path,"path"),typeof G.content==="string"?G.content:"",Y),L(UH)}case"POST mkdir":{let G=await K(N);return await Z0(A(G.path,"path"),Y),L(UH)}case"POST delete":{let G=await K(N);return await L0(A(G.path,"path"),Y),L(UH)}case"POST rename":{let G=await K(N);return await F0(A(G.from,"from"),A(G.to,"to"),Y),L(UH)}case"POST upload":{let G;try{G=await N.formData()}catch{throw new B("Expected multipart/form-data body")}let $=String(G.get("path")??"."),U=G.getAll("file").filter((X)=>X instanceof File);if(U.length===0)throw new B("No files in upload (field name: file)");let Q=[];for(let X of U)Q.push(await z0($,X.name,X,Y));return L({ok:!0,saved:Q})}default:return Z(404,`Unknown files endpoint: ${N.method} /api/files/${O}`)}}import{promises as f1}from"fs";function dW(N){return N.toLowerCase().trim().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,48)}async function x1(N){try{let H=await f1.readFile(AH(N),"utf8"),O=JSON.parse(H);return{id:O.id??N,name:O.name??N,createdAt:O.createdAt??new Date(0).toISOString(),workspaceRoot:J(N)}}catch{return null}}async function k1(){let N;try{N=await f1.readdir(UN(),{withFileTypes:!0})}catch{return[]}let H=[];for(let O of N){if(!O.isDirectory())continue;let W=await x1(O.name);if(W)H.push(W)}return H.sort((O,W)=>{if(O.id===z)return-1;if(W.id===z)return 1;return W.createdAt.localeCompare(O.createdAt)}),H}async function jN(N){return x1(N)}async function y1(N){let H=N.trim();if(!H)throw Error("Project name is required");let O=dW(H);if(!O)throw Error("Project name must contain letters or numbers");if(await jN(O))throw Error(`A project named "${O}" already exists`);await JH(O,H);let W=await jN(O);if(!W)throw Error(`Failed to create project "${O}"`);return W}async function VN(N){return await jN(N)!==null}async function b1(N,H){let W=H.pathname.split("/").filter(Boolean)[2];if(!W){if(N.method==="GET"){let Y={projects:await k1()};return L(Y)}if(N.method==="POST"){let Y=await K(N);A(Y.name,"name");try{let $={project:await y1(Y.name)};return L($,201)}catch(G){let $=G instanceof Error?G.message:String(G),U=$.includes("already exists")?409:400;return Z(U,$)}}return Z(405,"Method not allowed")}if(N.method==="GET"){let Y=await jN(W);return Y?L({project:Y}):Z(404,`Project not found: ${W}`)}return Z(405,"Method not allowed")}var sW=new Set(["accept","acceptForSession","decline","cancel"]);async function q1(N,H,O){let W=H.pathname.split("/").filter(Boolean),Y=W[2],G=W[3];if(!Y){if(N.method==="GET"){let $=H.searchParams.get("project")??void 0,U={runs:await S0($)};return L(U)}if(N.method==="POST"){let $=await K(N);A($.prompt,"prompt");let Q={run:await LN($)};return L(Q,201)}return Z(405,"Method not allowed")}if(G==="events"){if(!await D(Y))return Z(404,`Run not found: ${Y}`);return O.upgrade(N,{data:{channel:`run:${Y}`}})?void 0:Z(400,"WebSocket upgrade required")}if(!G&&N.method==="GET"){let $=await D(Y);if(!$)return Z(404,`Run not found: ${Y}`);let U=Number(H.searchParams.get("tail")??NaN),Q=Number(H.searchParams.get("before")??NaN),X=await _0(Y,{limit:Number.isFinite(U)&&U>0?U:void 0,before:Number.isFinite(Q)&&Q>=0?Q:void 0}),F={run:$,events:X.events,eventsOffset:X.offset,totalEvents:X.total};return L(F)}if(N.method!=="POST")return Z(405,"Method not allowed");switch(G){case"stop":return await M1(Y)?L({ok:!0}):Z(409,"Run is not active");case"resume":{let $=await K(N);A($.prompt,"prompt");try{let U=await $H(Y,$.prompt,Array.isArray($.attachments)?$.attachments:void 0,{sandbox:$.sandbox,approvalPolicy:$.approvalPolicy,approvalsReviewer:$.approvalsReviewer,model:$.model,effort:$.effort});return L({run:U})}catch(U){let Q=U instanceof Error?U.message:String(U),X=Q.includes("not found")?404:Q.includes("still active")?409:400;return Z(X,Q)}}case"steer":{let $=await K(N);A($.prompt,"prompt");try{return await F1(Y,$.prompt,Array.isArray($.attachments)?$.attachments:void 0),L({ok:!0})}catch(U){let Q=U instanceof Error?U.message:String(U),X=Q.includes("not found")?404:Q.includes("not active")||Q.includes("No active turn")?409:400;return Z(X,Q)}}case"fast":{let $=await K(N);if(typeof $.enabled!=="boolean")return Z(400,"Missing or invalid field: enabled");try{let U=await z1(Y,$.enabled);return L({run:U})}catch(U){let Q=U instanceof Error?U.message:String(U),X=Q.includes("not found")?404:Q.includes("does not support")?400:500;return Z(X,Q)}}case"compact":try{return await V1(Y),L({ok:!0})}catch($){let U=$ instanceof Error?$.message:String($),Q=U.includes("not found")?404:U.includes("still active")?409:400;return Z(Q,U)}case"review":{let $=await K(N);try{let U=await K1(Y,$.instructions);return L({run:U})}catch(U){let Q=U instanceof Error?U.message:String(U),X=Q.includes("not found")?404:Q.includes("still active")?409:400;return Z(X,Q)}}case"approve":{let $=await K(N);if(!sW.has(String($.decision)))return Z(400,`Invalid decision: ${String($.decision)}`);if($.requestId===void 0||$.requestId===null)return Z(400,"Missing field: requestId");return await A1(Y,$.requestId,$.decision)?L({ok:!0}):Z(404,"No matching pending approval")}default:return Z(404,`Unknown runs endpoint: ${H.pathname}`)}}var YN="browser-stream",m=null,I1=null,KN=0,MN=null,mH=null;function tW(N){if(m&&I1===N&&m.readyState<=WebSocket.OPEN)return;m?.close(),I1=N;let H=new WebSocket(`ws://127.0.0.1:${N}`);m=H,H.onmessage=(O)=>{let W=String(O.data);if(W.includes('"type":"frame"'))mH=W;M0(YN,W)},H.onclose=()=>{if(m===H)m=null,mH=null,j1()},H.onerror=()=>{}}function j1(){if(MN||KN===0)return;MN=setTimeout(()=>{MN=null,gN(!0)},2000)}async function gN(N=!1){if(KN===0)return;let H=N?null:i0();if(H===null){if(N)HN();H=(await fN()).streamPort}if(H!==null)tW(H);else j1()}function g1(){KN+=1,gN()}function v1(){return mH}function h1(){if(KN=Math.max(0,KN-1),KN===0){if(m?.close(),m=null,MN)clearTimeout(MN),MN=null}}var rW=new Set(["input_mouse","input_keyboard","input_touch"]);function m1(N){if(l0()!=="user")return;if(!m||m.readyState!==WebSocket.OPEN)return;let H=typeof N==="string"?N:N.toString("utf8");try{let O=JSON.parse(H);if(typeof O.type==="string"&&rW.has(O.type))m.send(H)}catch{}}var eW=new Set(["user","agent","paused"]);async function c1(N,H,O){let Y=H.pathname.split("/").filter(Boolean)[2];if(Y==="stream")return O.upgrade(N,{data:{channel:YN}})?void 0:Z(400,"WebSocket upgrade required");if(N.method==="GET")switch(Y){case"status":{let G=await fN();if(G.streaming)gN();return L({status:G})}case"actions":{let G={actions:c0()};return L(G)}default:return Z(404,`Unknown browser endpoint: ${H.pathname}`)}if(N.method!=="POST")return Z(405,"Method not allowed");switch(Y){case"start":{let G=await K(N).catch(()=>({})),$=await a0(typeof G.url==="string"&&G.url.length>0?G.url:void 0);return gN(),L({status:$})}case"stop":return await o0(),L({ok:!0});case"navigate":{let G=await K(N);return A(G.url,"url"),await d0(G.url),L({ok:!0})}case"key":{let G=await K(N);return A(G.key,"key"),await t0(G.key),L({ok:!0})}case"back":case"forward":case"reload":return await s0(Y),L({ok:!0});case"screenshot":{let $={path:await r0()};return L($)}case"control":{let G=await K(N);if(!eW.has(String(G.controller)))return Z(400,`Invalid controller: ${String(G.controller)}`);return u0(G.controller),L({ok:!0})}default:return Z(404,`Unknown browser endpoint: ${H.pathname}`)}}import{promises as P}from"fs";import E from"path";var i1=".agents/skills";function AN(N){return E.join(J(N),i1)}var NY=/^[a-z0-9][a-z0-9-]*$/,HY=new Set(["registry","install"]);function JN(N,H){if(!NY.test(N))throw new B(`Invalid skill id "${N}" \u2014 use lowercase letters, digits and dashes`);return E.join(AN(H),N)}function l1(N){return N.replace(/\x1b\[[0-9;?]*[A-Za-z]/g,"")}async function p1(N,H,O=120000){let W=Bun.spawn([process.execPath,"x","skills",...N],{cwd:H,env:{...process.env,DISABLE_TELEMETRY:"1",DO_NOT_TRACK:"1"},stdout:"pipe",stderr:"pipe"}),Y=setTimeout(()=>W.kill(),O);try{let[G,$,U]=await Promise.all([new Response(W.stdout).text(),new Response(W.stderr).text(),W.exited]);return{stdout:l1(G),stderr:l1($),code:U}}finally{clearTimeout(Y)}}function OY(N){let H=[],O=null;for(let W of N.split(/\r?\n/)){let Y=W.trim(),G=/^(\S+@\S+)\s+([\d.]+[KMB]?)\s+installs\b/.exec(Y);if(G){let U=G[1],Q=U.indexOf("@");O={source:U,repo:U.slice(0,Q),name:U.slice(Q+1),installs:G[2]},H.push(O);continue}let $=/^[\u2514\u2570]\s*(https?:\/\/\S+)/.exec(Y);if($&&O)O.url=$[1],O=null}return H}function WY(N){let H=[],O=/^---\r?\n([\s\S]*?)\r?\n---/.exec(N.replace(/^\uFEFF/,""));if(!O)return{errors:["Missing YAML frontmatter (--- name/description ---)"]};let W={};for(let Y of O[1].split(/\r?\n/)){let G=/^([A-Za-z_][\w-]*):\s*(.*)$/.exec(Y);if(G)W[G[1].toLowerCase()]=G[2].trim().replace(/^["']|["']$/g,"")}if(!W.name)H.push("Frontmatter is missing required field: name");if(!W.description)H.push("Frontmatter is missing required field: description");return{name:W.name,description:W.description,errors:H}}var YY=15000,lH=new Map,cH=new Map;function vN(N){lH.delete(N)}async function GY(N){let H=lH.get(N);if(H&&Date.now()-H.at<YY)return H.view;let O=cH.get(N);if(O)return O;let W=$Y(N).then((Y)=>{return lH.set(N,{at:Date.now(),view:Y}),Y}).finally(()=>{cH.delete(N)});return cH.set(N,W),W}async function $Y(N){let H=new Map,O=[];try{let W=await C("skills/list",{cwds:[J(N)],forceReload:!0});for(let Y of W.data??[]){for(let G of Y.errors??[])O.push(G);for(let G of Y.skills??[]){let $=E.basename(E.dirname(G.path));H.set($,G)}}}catch(W){console.warn("[skills] skills/list failed:",W)}return{byDir:H,errors:O}}async function QH(N=z){await P.mkdir(AN(N),{recursive:!0});let O=(await P.readdir(AN(N),{withFileTypes:!0})).filter((U)=>U.isDirectory()).map((U)=>U.name),{byDir:W,errors:Y}=await GY(N),G=[];for(let U of O){let Q=E.join(AN(N),U,"SKILL.md"),X=null;try{X=await P.readFile(Q,"utf8")}catch{G.push({id:U,name:U,description:"",enabled:!1,errors:["Missing SKILL.md"]});continue}let F=WY(X),M=W.get(U),R=Y.filter((f)=>l(f.path).includes(`/${U}/`)||E.basename(E.dirname(f.path))===U).map((f)=>f.message);G.push({id:U,name:M?.name??F.name??U,description:M?.description??F.description??"",enabled:M?.enabled??!0,errors:[...new Set([...F.errors,...R])]})}let $=Y.filter((U)=>!O.some((Q)=>l(U.path).includes(`/${Q}/`)));return{skills:G,errors:$}}async function hN(N,H=z){let O=JN(N,H),W;try{W=await P.readFile(E.join(O,"SKILL.md"),"utf8")}catch{return null}let{skills:Y}=await QH(H),G=Y.find((Q)=>Q.id===N)??{id:N,name:N,description:"",enabled:!0,errors:[]},$=[],U=async(Q)=>{let X=await P.readdir(E.join(O,Q),{withFileTypes:!0});for(let F of X){let M=Q?`${Q}/${F.name}`:F.name;if(F.isDirectory())await U(M);else if(M!=="SKILL.md")$.push(`${i1}/${N}/${M}`)}};return await U(""),{info:G,content:W,files:$}}async function n1(N,H=z){let O=N.name.trim().toLowerCase().replace(/\s+/g,"-");if(HY.has(O))throw new B(`"${O}" is a reserved name \u2014 pick another`);let W=JN(O,H);try{throw await P.access(E.join(W,"SKILL.md")),new B(`Skill "${O}" already exists`)}catch(G){if(G instanceof B)throw G}let Y=`---
|
|
330
|
+
name: ${O}
|
|
331
|
+
description: ${N.description.trim()}
|
|
332
|
+
---
|
|
333
|
+
|
|
334
|
+
${N.instructions?.trim()??"Describe when and how to use this skill."}
|
|
335
|
+
`;return await P.mkdir(W,{recursive:!0}),await P.writeFile(E.join(W,"SKILL.md"),Y,"utf8"),vN(H),await hN(O,H)}async function a1(N,H,O=z){let W=JN(N,O);try{await P.access(W)}catch{throw new B(`Skill not found: ${N}`)}return await P.writeFile(E.join(W,"SKILL.md"),H,"utf8"),vN(O),await hN(N,O)}async function o1(N,H=z){let O=JN(N,H);try{return await P.rm(O,{recursive:!0,force:!1}),vN(H),!0}catch{return!1}}async function d1(N,H,O=z){let W=E.join(JN(N,O),"SKILL.md");await C("skills/config/write",{path:W,enabled:H,name:null}),vN(O)}async function s1(N){let H=N.trim();if(!H)return[];let{stdout:O}=await p1(["find",H],J(z),30000);return OY(O)}async function u1(N){await P.mkdir(AN(N),{recursive:!0});let H=await P.readdir(AN(N),{withFileTypes:!0});return new Set(H.filter((O)=>O.isDirectory()).map((O)=>O.name))}async function t1(N,H=z){let O=N.trim();if(!O)throw new B("Missing skill source");if(/[\s;&|`$(){}<>]/.test(O))throw new B("Invalid source \u2014 expected owner/repo[@skill] or a URL");let W=J(H),Y=await u1(H),{stdout:G,stderr:$}=await p1(["add",O,"-a","codex","--copy","-y"],W);vN(H);let Q=[...await u1(H)].filter((F)=>!Y.has(F));if(Q.length===0){let F=[G,$].filter(Boolean).join(`
|
|
336
|
+
`).trim();throw new B(`No skill installed from "${O}".${F?`
|
|
337
|
+
${F}`:""}`)}let{skills:X}=await QH(H);return{installed:Q,skills:X,log:[G,$].filter(Boolean).join(`
|
|
338
|
+
`).trim()}}async function r1(N,H,O=z){let W=await hN(N,O);if(!W)throw new B(`Skill not found: ${N}`);let Y={prompt:H?.trim()||`Use the "${W.info.name}" skill to demonstrate what it does. Follow its instructions and report the result.`,projectId:O,skill:{name:W.info.name,path:E.join(JN(N,O),"SKILL.md")}};return LN(Y)}async function QY(N){let H=N.searchParams.get("project");if(H)return H;let O=N.searchParams.get("cwd");if(O){let W=uN(O);if(W&&await VN(W))return W}return z}async function e1(N,H){let O=H.pathname.split("/").filter(Boolean),W=O[2],Y=O[3],G=await QY(H);if(W==="registry"){if(Y==="search"&&N.method==="GET"){let $=H.searchParams.get("q")??"",U=await s1($);return L({results:U})}if(Y==="install"&&N.method==="POST"){let $=await K(N);A($.source,"source");let U=await t1($.source,G);return L(U,201)}return Z(404,`Unknown skills endpoint: ${H.pathname}`)}if(!W){if(N.method==="GET")return L(await QH(G));if(N.method==="POST"){let $=await K(N);A($.name,"name"),A($.description,"description");let U=await n1($,G);return L({skill:U},201)}return Z(405,"Method not allowed")}if(!Y)switch(N.method){case"GET":{let $=await hN(W,G);return $?L({skill:$}):Z(404,`Skill not found: ${W}`)}case"PUT":{let $=await K(N);A($.content,"content");let U=await a1(W,$.content,G);return L({skill:U})}case"DELETE":return await o1(W,G)?L({ok:!0}):Z(404,`Skill not found: ${W}`);default:return Z(405,"Method not allowed")}if(N.method!=="POST")return Z(405,"Method not allowed");switch(Y){case"enable":{let $=await K(N);if(typeof $.enabled!=="boolean")return Z(400,"Missing or invalid field: enabled");return await d1(W,$.enabled,G),L({ok:!0})}case"test":{let $=await K(N).catch(()=>({})),U=await r1(W,$.prompt,G);return L({run:U},201)}default:return Z(404,`Unknown skills endpoint: ${H.pathname}`)}}async function NO(N,H){let O=H.pathname.split("/").filter(Boolean),W=O[2];if(!W){if(N.method==="GET")return L(await D1());return Z(405,"Method not allowed")}if(W==="config"){if(N.method==="GET"){let Y={toml:await p()};return L(Y)}if(N.method==="PUT"){let Y=await K(N);return A(Y.toml,"toml"),await B1(Y.toml),L({ok:!0})}return Z(405,"Method not allowed")}if(W==="reload"&&N.method==="POST")return await T1(),L({ok:!0});if(W==="servers"){let Y=O[3];if(!Y){if(N.method==="POST"){let $=await K(N);return A($.name,"name"),await C1($),L({ok:!0},201)}return Z(405,"Method not allowed")}let G=O[4];if(G==="enable"&&N.method==="POST"){let $=await K(N);if(typeof $.enabled!=="boolean")return Z(400,"Missing or invalid field: enabled");return await R1(Y,$.enabled),L({ok:!0})}if(!G&&N.method==="DELETE")return await S1(Y)?L({ok:!0}):Z(404,`Server not found: ${Y}`);return Z(405,"Method not allowed")}return Z(404,`Unknown MCP endpoint: ${H.pathname}`)}import{promises as GN}from"fs";import mN from"path";function XY(){return mN.join(q(),"config.toml")}function ZH(){return mN.join(q(),"memories")}async function HO(){let N=await p();return N.trim()?c(N):{}}function XH(N){return typeof N==="object"&&N!==null?N:{}}function ZY(N){let H=XH(N.memories),O={};if(typeof H.generate_memories==="boolean")O.generateMemories=H.generate_memories;if(typeof H.use_memories==="boolean")O.useMemories=H.use_memories;if(typeof H.disable_on_external_context==="boolean")O.disableOnExternalContext=H.disable_on_external_context;if(typeof H.min_rate_limit_remaining_percent==="number")O.minRateLimitRemainingPercent=H.min_rate_limit_remaining_percent;return O}async function LY(){let N=ZH(),H=[];async function O(W){let Y;try{Y=await GN.readdir(W,{withFileTypes:!0})}catch{return}for(let G of Y){let $=mN.join(W,G.name);if(G.isDirectory()){if(G.name===".git")continue;await O($)}else if(G.isFile()){let U=await GN.stat($);H.push({path:l(mN.relative(N,$)),name:G.name,size:U.size,modifiedAt:U.mtime.toISOString()})}}}return await O(N),H.sort((W,Y)=>Y.modifiedAt.localeCompare(W.modifiedAt)),H}async function FY(){try{let H=((await C("experimentalFeature/list",{})).data??[]).find((O)=>O.name==="memories");return H?H.enabled:null}catch(N){return console.warn("[memories] experimentalFeature/list failed:",N),null}}async function OO(){let N=await HO();return{enabled:XH(N.features).memories===!0,liveEnabled:await FY(),settings:ZY(N),files:await LY()}}async function WO(N){let H=await HO();if(typeof N.enabled==="boolean"){let O=XH(H.features);O.memories=N.enabled,H.features=O}if(N.settings){let O=XH(H.memories),W=N.settings;if(typeof W.generateMemories==="boolean")O.generate_memories=W.generateMemories;if(typeof W.useMemories==="boolean")O.use_memories=W.useMemories;if(typeof W.disableOnExternalContext==="boolean")O.disable_on_external_context=W.disableOnExternalContext;if(typeof W.minRateLimitRemainingPercent==="number")O.min_rate_limit_remaining_percent=W.minRateLimitRemainingPercent;H.memories=O}if(await GN.writeFile(XY(),d(H),"utf8"),typeof N.enabled==="boolean")try{await C("experimentalFeature/enablement/set",{enablement:{memories:N.enabled}})}catch(O){console.warn("[memories] live enablement/set failed (applies on restart):",O)}}async function YO(N){let H=e(ZH(),N);return GN.readFile(H,"utf8")}async function GO(N,H){let O=e(ZH(),N);await GN.mkdir(mN.dirname(O),{recursive:!0}),await GN.writeFile(O,H,"utf8")}async function $O(N){let H=e(ZH(),N);await GN.rm(H)}async function UO(N,H){let W=H.pathname.split("/").filter(Boolean)[2];if(!W){if(N.method==="GET")return L(await OO());return Z(405,"Method not allowed")}if(W==="config"){if(N.method==="PUT"){let Y=await K(N);if(typeof Y.enabled!=="boolean"&&!Y.settings)return Z(400,"Nothing to update: pass enabled and/or settings");return await WO(Y),L({ok:!0})}return Z(405,"Method not allowed")}if(W==="file"){if(N.method==="GET"){let Y=A(H.searchParams.get("path"),"path"),G={path:Y,content:await YO(Y)};return L(G)}if(N.method==="PUT"){let Y=await K(N);if(A(Y.path,"path"),typeof Y.content!=="string")return Z(400,"Missing or invalid field: content");return await GO(Y.path,Y.content),L({ok:!0})}if(N.method==="DELETE"){let Y=A(H.searchParams.get("path"),"path");return await $O(Y),L({ok:!0})}return Z(405,"Method not allowed")}return Z(404,`Unknown memories endpoint: ${H.pathname}`)}var VY=300000,LH=null;async function QO(N){if(N.method!=="GET")return Z(405,"Method not allowed");if(LH&&Date.now()-LH.at<VY)return L({models:LH.models});let O=((await C("model/list",{})).data??[]).filter((Y)=>!Y.hidden).map((Y)=>({id:Y.id,model:Y.model,displayName:Y.displayName,description:Y.description,isDefault:Y.isDefault,defaultReasoningEffort:Y.defaultReasoningEffort,supportedReasoningEfforts:Y.supportedReasoningEfforts??[]}));return LH={at:Date.now(),models:O},L({models:O})}async function FH(){let N=await C("account/read",{});return{account:N.account??null,requiresOpenaiAuth:N.requiresOpenaiAuth,pendingLogin:WH(),lastLoginResult:O1()}}async function XO(N,H){if(H.pathname==="/api/account"){if(N.method!=="GET")return Z(405,"Method not allowed");return L(await FH())}if(H.pathname==="/api/account/login"&&N.method==="POST"){let O=await K(N),W;if(O.type==="chatgpt"||O.type==="chatgptDeviceCode")W={type:O.type};else if(O.type==="apiKey")W={type:"apiKey",apiKey:A(O.apiKey,"apiKey")};else throw new B("type must be one of: chatgpt, chatgptDeviceCode, apiKey");let Y=WH();if(Y)await C("account/login/cancel",{loginId:Y.loginId}).catch(()=>{});YH();let G=await C("account/login/start",W);if((G.type==="chatgpt"||G.type==="chatgptDeviceCode")&&G.loginId){let $={loginId:G.loginId,type:G.type,authUrl:G.authUrl,userCode:G.userCode,verificationUrl:G.verificationUrl,startedAt:new Date().toISOString()};W1($)}return L(await FH())}if(H.pathname==="/api/account/login/cancel"&&N.method==="POST"){let O=WH();if(O)await C("account/login/cancel",{loginId:O.loginId}).catch(()=>{});return YH(),L(await FH())}if(H.pathname==="/api/account/logout"&&N.method==="POST")return await C("account/logout",{}),YH(),L(await FH());return Z(404,`Not found: ${H.pathname}`)}function KY(N){if(!N)return null;return N.replace(/^([a-z0-9+.-]+:\/\/[^:@/]+):[^@/]+@/i,"$1:\u2022\u2022\u2022\u2022@")}function ZO(){let N=xH(),H=kH();return{browserProxy:{proxyUrl:KY(N.value),source:N.source,noProxy:H.value,noProxySource:H.source}}}async function LO(N,H){if(H.pathname==="/api/settings"&&N.method==="GET")return L(ZO());if(H.pathname==="/api/settings/browser-proxy"&&N.method==="PUT"){let O=await K(N);if(O.proxyUrl!==void 0&&O.proxyUrl!==null&&O.proxyUrl.trim())try{if(!new URL(O.proxyUrl.trim()).hostname)throw Error("missing host")}catch{return Z(400,"Invalid proxy URL \u2014 expected e.g. http://user:pass@host:port")}return await x0({...O.proxyUrl!==void 0?{browserProxy:O.proxyUrl}:{},...O.noProxy!==void 0?{browserNoProxy:O.noProxy}:{}}),L(ZO())}if(N.method!=="GET"&&N.method!=="PUT")return Z(405,"Method not allowed");return Z(404,`Unknown settings endpoint: ${H.pathname}`)}import{promises as BN}from"fs";import JO from"path";import{randomUUID as SY}from"crypto";function cN(N,H,O,W){let Y=new Set,G=N.trim()!=="*";for(let $ of N.split(",")){let U=$.trim();if(!U)throw Error(`Invalid ${W} field: empty term`);let Q=U,X=1,F=U.indexOf("/");if(F!==-1){if(Q=U.slice(0,F),X=Number(U.slice(F+1)),!Number.isInteger(X)||X<=0)throw Error(`Invalid step in ${W}: ${U}`)}let M,R;if(Q==="*")M=H,R=O;else if(Q.includes("-")){let[f,$N]=Q.split("-");M=Number(f),R=Number($N)}else M=Number(Q),R=M;if(!Number.isInteger(M)||!Number.isInteger(R))throw Error(`Invalid ${W} value: ${U}`);if(M<H||R>O||M>R)throw Error(`${W} out of range (${H}-${O}): ${U}`);for(let f=M;f<=R;f+=X)Y.add(f)}return{set:Y,restricted:G}}function VO(N){let H=N.trim().split(/\s+/);if(H.length!==5)throw Error(`Cron must have 5 fields (min hour dom month dow); got ${H.length}`);let O=cN(H[0],0,59,"minute"),W=cN(H[1],0,23,"hour"),Y=cN(H[2],1,31,"day-of-month"),G=cN(H[3],1,12,"month"),$=cN(H[4],0,7,"day-of-week"),U=new Set;for(let Q of $.set)U.add(Q===7?0:Q);return{minute:O.set,hour:W.set,dom:Y.set,month:G.set,dow:U,domRestricted:Y.restricted,dowRestricted:$.restricted}}function KO(N){try{return VO(N),null}catch(H){return H instanceof Error?H.message:"Invalid cron expression"}}function MY(N){return new Intl.DateTimeFormat("en-US",{timeZone:N,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",hourCycle:"h23"})}function MO(N,H){if(!H)return{year:N.getFullYear(),month:N.getMonth()+1,day:N.getDate(),hour:N.getHours(),minute:N.getMinutes(),second:N.getSeconds()};let O={};for(let W of MY(H).formatToParts(N))if(W.type!=="literal")O[W.type]=Number(W.value);return{year:O.year,month:O.month,day:O.day,hour:O.hour,minute:O.minute,second:O.second}}function AY(N,H){return new Date(Date.UTC(N,H,0)).getUTCDate()}function JY(N){return new Date(Date.UTC(N.year,N.month-1,N.day)).getUTCDay()}function FO(N){if(N.minute++,N.minute<60)return;if(N.minute=0,N.hour++,N.hour<24)return;if(N.hour=0,N.day++,N.day<=AY(N.year,N.month))return;if(N.day=1,N.month++,N.month<=12)return;N.month=1,N.year++}function BY(N,H){if(!N.minute.has(H.minute))return!1;if(!N.hour.has(H.hour))return!1;if(!N.month.has(H.month))return!1;let O=N.dom.has(H.day),W=N.dow.has(JY(H));if(N.domRestricted&&N.dowRestricted)return O||W;if(N.domRestricted)return O;if(N.dowRestricted)return W;return!0}function zO(N,H){let O=MO(N,H);return Date.UTC(O.year,O.month-1,O.day,O.hour,O.minute,O.second)-N.getTime()}function DY(N,H){if(!H)return new Date(N.year,N.month-1,N.day,N.hour,N.minute,0,0);let O=Date.UTC(N.year,N.month-1,N.day,N.hour,N.minute,0),W=zO(new Date(O),H),Y=O-W,G=zO(new Date(Y),H);if(G!==W)Y=O-G;return new Date(Y)}var CY=4216320;function AO(N,H,O){let W=VO(N),Y=MO(H,O),G={year:Y.year,month:Y.month,day:Y.day,hour:Y.hour,minute:Y.minute};FO(G);for(let $=0;$<CY;$++){if(BY(W,G))return DY(G,O);FO(G)}return null}var RY={sandbox:"workspaceWrite",approvalPolicy:"onRequest",approvalsReviewer:"auto_review",effort:"medium"};function TY(N){return N.toLowerCase().trim().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,40)}function iH(N){return JO.join(DN(),`${N}.json`)}async function BO(){await BN.mkdir(DN(),{recursive:!0})}async function pH(N){await BO(),await BN.writeFile(iH(N.id),JSON.stringify(N,null,2),"utf8")}function nH(N,H){if(!N.enabled)return null;if(N.kind==="once"){if(!N.runAt)return null;let W=new Date(N.runAt);if(Number.isNaN(W.getTime()))return null;if(N.lastRunAt)return null;return W.toISOString()}if(!N.cron)return null;let O=AO(N.cron,H,N.tz);return O?O.toISOString():null}function DO(N,H){if(H==="cron"){if(!N.cron)throw Error("cron expression is required for a cron schedule");let O=KO(N.cron);if(O)throw Error(`Invalid cron expression: ${O}`)}else{if(!N.runAt)throw Error("runAt is required for a one-off schedule");if(Number.isNaN(new Date(N.runAt).getTime()))throw Error("runAt is not a valid datetime")}if(N.tz)try{new Intl.DateTimeFormat("en-US",{timeZone:N.tz})}catch{throw Error(`Unknown timezone: ${N.tz}`)}}async function aH(N){await BO();let H;try{H=await BN.readdir(DN())}catch{return[]}let O=[];for(let W of H){if(!W.endsWith(".json"))continue;try{let Y=await BN.readFile(JO.join(DN(),W),"utf8"),G=JSON.parse(Y);if(N&&G.projectId!==N)continue;O.push(G)}catch{}}return O.sort((W,Y)=>Y.createdAt.localeCompare(W.createdAt)),O}async function zH(N){try{let H=await BN.readFile(iH(N),"utf8");return JSON.parse(H)}catch{return null}}async function CO(N){let H=N.name?.trim();if(!H)throw Error("Schedule name is required");if(!N.prompt?.trim())throw Error("Schedule prompt is required");let O=N.projectId??"default";if(!await VN(O))throw Error(`Unknown project: ${O}`);let W=N.kind??"cron";DO(N,W);let Y=`${TY(H)||"schedule"}-${SY().slice(0,8)}`,G=new Date,$={id:Y,name:H,projectId:O,prompt:N.prompt,kind:W,cron:W==="cron"?N.cron:void 0,runAt:W==="once"?new Date(N.runAt).toISOString():void 0,tz:N.tz,mode:{...RY,...N.mode??{}},resume:N.resume??!1,threadRunId:null,enabled:N.enabled??!0,createdAt:G.toISOString(),lastRunAt:null,lastRunId:null,lastError:null,nextRunAt:null};return $.nextRunAt=nH($,G),await pH($),$}async function SO(N,H){let O=await zH(N);if(!O)return null;let W=H.kind??O.kind,Y={...O,name:H.name?.trim()||O.name,prompt:H.prompt??O.prompt,kind:W,cron:W==="cron"?H.cron??O.cron:void 0,runAt:W==="once"?H.runAt?new Date(H.runAt).toISOString():O.runAt:void 0,tz:H.tz!==void 0?H.tz||void 0:O.tz,mode:H.mode?{...O.mode,...H.mode}:O.mode,resume:H.resume??O.resume,enabled:H.enabled??O.enabled};if(DO(Y,W),W==="once"&&H.runAt&&Y.runAt!==O.runAt)Y.lastRunAt=null;return Y.nextRunAt=nH(Y,new Date),await pH(Y),Y}async function RO(N){try{return await BN.unlink(iH(N)),!0}catch{return!1}}function EY(N){return{sandbox:N.sandbox,approvalPolicy:N.approvalPolicy,approvalsReviewer:N.approvalsReviewer,model:N.model,effort:N.effort}}async function oH(N,H){let O=N.lastRunId??null,W=null,Y=N.threadRunId??null;try{let $=N.mode;if(N.resume&&Y&&await D(Y)){let U=await D(Y);if(U&&g(U.status))throw Error("previous run still active \u2014 skipped this fire");O=(await $H(Y,N.prompt,[],EY($))).id}else{let U=await LN({prompt:N.prompt,projectId:N.projectId,sandbox:$.sandbox,approvalPolicy:$.approvalPolicy,approvalsReviewer:$.approvalsReviewer,model:$.model,effort:$.effort,source:"schedule",scheduleId:N.id,scheduleName:N.name});if(O=U.id,N.resume)Y=U.id}}catch($){W=$ instanceof Error?$.message:String($)}let G={...N,lastRunAt:H.toISOString(),lastRunId:O,lastError:W,threadRunId:Y};return G.nextRunAt=nH(G,H),await pH(G),G}var uH=!1;async function TO(N=new Date){if(uH)return;uH=!0;try{let H=await aH();for(let O of H){if(!O.enabled||!O.nextRunAt)continue;let W=new Date(O.nextRunAt);if(Number.isNaN(W.getTime())||W.getTime()>N.getTime())continue;try{await oH(O,N)}catch(Y){console.error(`[schedules] fire failed for ${O.id}:`,Y)}}}catch(H){console.error("[schedules] tick failed:",H)}finally{uH=!1}}async function EO(N){let H=N.searchParams.get("project");if(H)return H;let O=N.searchParams.get("cwd");if(O){let W=uN(O);if(W&&await VN(W))return W;return z}return}async function _O(N,H){let O=H.pathname.split("/").filter(Boolean),W=O[2],Y=O[3];if(!W){if(N.method==="GET"){let G=await EO(H),$={schedules:await aH(G)};return L($)}if(N.method==="POST"){let G=await K(N);if(!G.projectId){let $=await EO(H);if($)G.projectId=$}try{let U={schedule:await CO(G)};return L(U,201)}catch($){return Z(400,$ instanceof Error?$.message:String($))}}return Z(405,"Method not allowed")}if(Y==="run"&&N.method==="POST"){let G=await zH(W);if(!G)return Z(404,`Schedule not found: ${W}`);let U={schedule:await oH(G,new Date)};return L(U)}if(Y)return Z(404,`Not found: ${H.pathname}`);if(N.method==="GET"){let G=await zH(W);return G?L({schedule:G}):Z(404,`Schedule not found: ${W}`)}if(N.method==="PUT"){let G=await K(N);try{let $=await SO(W,G);return $?L({schedule:$}):Z(404,`Schedule not found: ${W}`)}catch($){return Z(400,$ instanceof Error?$.message:String($))}}if(N.method==="DELETE")return await RO(W)?L({ok:!0}):Z(404,`Schedule not found: ${W}`);return Z(405,"Method not allowed")}async function wO(N,H){let O=new URL(N.url);try{if(O.pathname==="/api/health")return _1();if(O.pathname==="/api/status")return w1();if(O.pathname==="/api/files/watch")return H.upgrade(N,{data:{channel:"files"}})?void 0:Z(400,"WebSocket upgrade required");if(O.pathname.startsWith("/api/files/"))return await P1(N,O);if(O.pathname==="/api/projects"||O.pathname.startsWith("/api/projects/"))return await b1(N,O);if(O.pathname==="/api/runs"||O.pathname.startsWith("/api/runs/"))return await q1(N,O,H);if(O.pathname.startsWith("/api/browser/"))return await c1(N,O,H);if(O.pathname==="/api/skills"||O.pathname.startsWith("/api/skills/"))return await e1(N,O);if(O.pathname==="/api/mcp"||O.pathname.startsWith("/api/mcp/"))return await NO(N,O);if(O.pathname==="/api/memories"||O.pathname.startsWith("/api/memories/"))return await UO(N,O);if(O.pathname==="/api/models")return await QO(N);if(O.pathname==="/api/account"||O.pathname.startsWith("/api/account/"))return await XO(N,O);if(O.pathname==="/api/settings"||O.pathname.startsWith("/api/settings/"))return await LO(N,O);if(O.pathname==="/api/schedules"||O.pathname.startsWith("/api/schedules/"))return await _O(N,O);return Z(404,`Not found: ${O.pathname}`)}catch(W){if(W instanceof oN)return Z(400,W.message);if(W instanceof B)return Z(400,W.message);if(wY(W))return Z(404,`Not found: ${O.searchParams.get("path")??O.pathname}`);return console.error(`[api] ${N.method} ${O.pathname} failed:`,W),Z(500,W instanceof Error?W.message:"Internal error")}}function wY(N){return typeof N==="object"&&N!==null&&"code"in N&&N.code==="ENOENT"}await rH();var VH=[k.resolve(import.meta.dir,"../ui-dist"),k.resolve(import.meta.dir,"../../ui/dist")].find((N)=>PO(k.join(N,"index.html")))??k.resolve(import.meta.dir,"../../ui/dist");try{let N=["mcp-server.ts","mcp-server.js"].map((H)=>k.join(import.meta.dir,H)).find((H)=>PO(H));if(N)await E1(N,lN);else console.warn("[daemon] mcp-server script not found next to daemon entry")}catch(N){console.warn("[daemon] could not register Jun MCP server:",N)}m0(k.join(import.meta.dir,".."));var xO=Bun.serve({hostname:MH,port:lN,async fetch(N,H){let O=new URL(N.url);if(O.pathname.startsWith("/api/"))return wO(N,H);let W=await xY(O.pathname);if(W)return W;return new Response("Jun daemon is running. Build the UI to enable the dashboard.",{status:200})},websocket:{idleTimeout:960,open(N){if(N.subscribe(N.data.channel),N.data.channel===YN){g1();let H=v1();if(H)N.send(H)}},message(N,H){if(N.data.channel===YN)m1(H)},close(N){if(N.unsubscribe(N.data.channel),N.data.channel===YN)h1()}}});K0(xO);try{PY(UN(),{recursive:!0},(N,H)=>{let O={type:"fs.changed",path:H?l(String(H)):null,ts:new Date().toISOString()};xO.publish("files",JSON.stringify(O))})}catch(N){console.warn("[daemon] workspace watcher unavailable:",N)}var fY=30000;setInterval(()=>{TO()},fY);console.log(`Jun daemon running at http://${MH}:${lN}`);console.log(`Workspace: ${k.resolve(J())}`);async function xY(N){let H=k.join(VH,"index.html");if(!await kY(H))return null;let O=k.normalize(decodeURIComponent(N)).replace(/^[/\\]+/,""),W=k.resolve(VH,O||"index.html"),Y=`${VH}${k.sep}`;if(W!==VH&&!W.startsWith(Y))return new Response("Not found",{status:404});if(await yY(W))return new Response(Bun.file(W),{headers:{"content-type":bY(W)}});return new Response(Bun.file(H),{headers:{"content-type":"text/html; charset=utf-8"}})}async function kY(N){try{return await fO(N),!0}catch{return!1}}async function yY(N){try{return(await fO(N)).isFile()}catch{return!1}}function bY(N){switch(k.extname(N)){case".css":return"text/css; charset=utf-8";case".html":return"text/html; charset=utf-8";case".js":return"text/javascript; charset=utf-8";case".json":return"application/json; charset=utf-8";case".svg":return"image/svg+xml";case".webp":return"image/webp";case".png":return"image/png";case".jpg":case".jpeg":return"image/jpeg";case".ico":return"image/x-icon";default:return"application/octet-stream"}}
|