@chainingintention/pi-web-cn 2.202610.5 → 2.202611.1
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 +4 -2
- package/dist/bin/pi-web-server.sh +91 -0
- package/dist/bin/pi-web-sessiond.sh +91 -0
- package/dist/bin/pi-web.sh +91 -0
- package/dist/cli.js +33 -29
- package/dist/cli.js.map +1 -1
- package/dist/client/assets/3d-Dr68X8h8.svg +1 -0
- package/dist/client/assets/PiWebApp-D9e-Nrxi.js +3952 -0
- package/dist/client/assets/SettingsDialog-BvlvoXvD.js +1129 -0
- package/dist/client/assets/abap-uAHVFerN.svg +1 -0
- package/dist/client/assets/abc-CXjdSXsv.svg +1 -0
- package/dist/client/assets/actionscript-BCkIwjgm.svg +1 -0
- package/dist/client/assets/ada-GL6JWmc_.svg +1 -0
- package/dist/client/assets/adobe-illustrator-DhGvkpwi.svg +1 -0
- package/dist/client/assets/adobe-photoshop-0hmnA7cm.svg +1 -0
- package/dist/client/assets/adobe-swc-myFGSGFT.svg +1 -0
- package/dist/client/assets/adonis-SdGYdzCA.svg +1 -0
- package/dist/client/assets/advpl-BWLgf_Ky.svg +1 -0
- package/dist/client/assets/advpl-include-DYgH3R0u.svg +1 -0
- package/dist/client/assets/advpl-ptm-C5Y5ffZi.svg +1 -0
- package/dist/client/assets/advpl-tlpp-BAlVwpPL.svg +1 -0
- package/dist/client/assets/agent-DAWBwR7s.svg +1 -0
- package/dist/client/assets/amplify-BAWPaFFb.svg +1 -0
- package/dist/client/assets/android-TigHCxTb.svg +1 -0
- package/dist/client/assets/angular-D2ijCUIg.svg +1 -0
- package/dist/client/assets/angular-component-eczQQRE6.svg +1 -0
- package/dist/client/assets/angular-directive-C_jq8cjP.svg +1 -0
- package/dist/client/assets/angular-guard-B4iC5rXF.svg +1 -0
- package/dist/client/assets/angular-interceptor-CJvi6DuQ.svg +1 -0
- package/dist/client/assets/angular-pipe-BQZMATB_.svg +1 -0
- package/dist/client/assets/angular-service-DHYn6jIk.svg +1 -0
- package/dist/client/assets/antlr-DkzdiGgY.svg +1 -0
- package/dist/client/assets/apiblueprint-BDRvCIBM.svg +1 -0
- package/dist/client/assets/apollo-BAVoyYDs.svg +1 -0
- package/dist/client/assets/applescript-Bm_R8YT0.svg +1 -0
- package/dist/client/assets/apps-script-6efl-CXu.svg +1 -0
- package/dist/client/assets/appveyor-6B1suIBr.svg +1 -0
- package/dist/client/assets/appwrite-D7AlK8SW.svg +1 -0
- package/dist/client/assets/architecture-CtuqF8rD.svg +1 -0
- package/dist/client/assets/arduino-DFxCIupZ.svg +1 -0
- package/dist/client/assets/asciidoc-DUAdVwVP.svg +1 -0
- package/dist/client/assets/assembly-BKikEKKy.svg +1 -0
- package/dist/client/assets/astro-Bivf18eC.svg +1 -0
- package/dist/client/assets/astro-config-Cr5suFul.svg +1 -0
- package/dist/client/assets/astyle-BiqOWu-0.svg +1 -0
- package/dist/client/assets/audio-B4FatEUD.svg +1 -0
- package/dist/client/assets/aurelia-CnUjHPcZ.svg +1 -0
- package/dist/client/assets/authors-DdaDoKVR.svg +1 -0
- package/dist/client/assets/auto-BOO_fhxh.svg +1 -0
- package/dist/client/assets/autohotkey-D87F33UG.svg +1 -0
- package/dist/client/assets/autoit-DQTGS66r.svg +1 -0
- package/dist/client/assets/azure-DMSkMABH.svg +1 -0
- package/dist/client/assets/azure-pipelines-CcGJw3Rl.svg +1 -0
- package/dist/client/assets/babel-DFMbiqHA.svg +1 -0
- package/dist/client/assets/ballerina-BT8MyHl8.svg +1 -0
- package/dist/client/assets/bashly-settings-Ch9mIpw9.svg +1 -0
- package/dist/client/assets/bazel-CPXexffJ.svg +1 -0
- package/dist/client/assets/bbx-CB-6IYxw.svg +1 -0
- package/dist/client/assets/beancount-DR_GSwds.svg +1 -0
- package/dist/client/assets/bench-js-DOHd4EZB.svg +1 -0
- package/dist/client/assets/bench-jsx-CLJJl81D.svg +1 -0
- package/dist/client/assets/bench-ts-BM8GsfrF.svg +1 -0
- package/dist/client/assets/bibliography-D3emS1pd.svg +1 -0
- package/dist/client/assets/bibtex-style-CVY4tTiP.svg +1 -0
- package/dist/client/assets/bicep-BMMGt18P.svg +1 -0
- package/dist/client/assets/biome-Bf2373dl.svg +1 -0
- package/dist/client/assets/bitbucket-BQr8Az5R.svg +1 -0
- package/dist/client/assets/bithound-BOh7-s-G.svg +1 -0
- package/dist/client/assets/blender-B7Vz8gxa.svg +1 -0
- package/dist/client/assets/blink-DVWcfhba.svg +1 -0
- package/dist/client/assets/blitz-B4hhOxPa.svg +1 -0
- package/dist/client/assets/bower-CkFcC1Ou.svg +1 -0
- package/dist/client/assets/brainfuck-BXozg9z7.svg +1 -0
- package/dist/client/assets/browserlist-CUbhNMS9.svg +1 -0
- package/dist/client/assets/bruno-CoSNrNfv.svg +1 -0
- package/dist/client/assets/buck-BRuOl0ko.svg +1 -0
- package/dist/client/assets/bucklescript-TfoVgTnq.svg +1 -0
- package/dist/client/assets/buildkite-BrDKWLhW.svg +1 -0
- package/dist/client/assets/bun-CZtgPBjt.svg +1 -0
- package/dist/client/assets/c-CCkhSkL9.svg +1 -0
- package/dist/client/assets/c3-J0cVtsWq.svg +1 -0
- package/dist/client/assets/cabal-CQb4_DnV.svg +1 -0
- package/dist/client/assets/caddy-ywaArsUF.svg +1 -0
- package/dist/client/assets/cadence-BRBsaulT.svg +1 -0
- package/dist/client/assets/cairo-Cls19dwE.svg +1 -0
- package/dist/client/assets/cake-DpuWz3gE.svg +1 -0
- package/dist/client/assets/capacitor-CugB3p3d.svg +1 -0
- package/dist/client/assets/capnp-DtxOZ2_z.svg +1 -0
- package/dist/client/assets/cbx-QvSmyWq4.svg +1 -0
- package/dist/client/assets/cds-Bi3ghsEA.svg +1 -0
- package/dist/client/assets/certificate-B5QPOK_C.svg +1 -0
- package/dist/client/assets/changelog-mhp3hE32.svg +1 -0
- package/dist/client/assets/chess-4hVz24Rg.svg +1 -0
- package/dist/client/assets/chromatic-DRZoj4Hg.svg +1 -0
- package/dist/client/assets/chrome-ox3b9yI4.svg +1 -0
- package/dist/client/assets/circleci-DubwoSEv.svg +1 -0
- package/dist/client/assets/citation-ldCt-JF8.svg +1 -0
- package/dist/client/assets/clangd-bL8W2_13.svg +1 -0
- package/dist/client/assets/claude-DypBvzkn.svg +1 -0
- package/dist/client/assets/cline-Dd7x4bMT.svg +1 -0
- package/dist/client/assets/clojure-wfCfR06G.svg +1 -0
- package/dist/client/assets/cloudfoundry-BS-9yLUv.svg +1 -0
- package/dist/client/assets/cmake-B7q-R28A.svg +1 -0
- package/dist/client/assets/coala-D4YHPVOS.svg +1 -0
- package/dist/client/assets/cobol-wDz3o6g-.svg +1 -0
- package/dist/client/assets/coconut-C7cPswso.svg +1 -0
- package/dist/client/assets/code-climate-BJrwzyOv.svg +1 -0
- package/dist/client/assets/codecov-CXg1oY95.svg +1 -0
- package/dist/client/assets/codeowners-D_rztV49.svg +1 -0
- package/dist/client/assets/coderabbit-ai-DGoTDlyw.svg +1 -0
- package/dist/client/assets/coffee-D5JGmA63.svg +1 -0
- package/dist/client/assets/coldfusion-DhOnvVS_.svg +1 -0
- package/dist/client/assets/coloredpetrinets-DY894G_S.svg +1 -0
- package/dist/client/assets/command-Df3AkI2A.svg +1 -0
- package/dist/client/assets/commitizen-9SU1u7to.svg +1 -0
- package/dist/client/assets/commitlint-3vvjpxJt.svg +1 -0
- package/dist/client/assets/composerShortcuts-BggqvE9J.js +31 -0
- package/dist/client/assets/concourse-DAGkX2vY.svg +1 -0
- package/dist/client/assets/conduct-2Bm8RK0N.svg +1 -0
- package/dist/client/assets/console-pcgGAn8Z.svg +1 -0
- package/dist/client/assets/contentlayer-vXTwXOHk.svg +1 -0
- package/dist/client/assets/context-CebLrksE.svg +1 -0
- package/dist/client/assets/contributing-DLcmDS34.svg +1 -0
- package/dist/client/assets/controller-Doc75EnV.svg +1 -0
- package/dist/client/assets/copilot-DBlNrZ6L.svg +1 -0
- package/dist/client/assets/cpp-DT2939hp.svg +1 -0
- package/dist/client/assets/craco-BySmcQ23.svg +1 -0
- package/dist/client/assets/credits-GALyqcNu.svg +1 -0
- package/dist/client/assets/crystal-BbNQlJLs.svg +1 -0
- package/dist/client/assets/csharp-D5ZKsaqY.svg +1 -0
- package/dist/client/assets/css-JKwEyWYb.svg +1 -0
- package/dist/client/assets/css-map-Ctu4D9Ve.svg +1 -0
- package/dist/client/assets/cucumber-B3ZYwjRe.svg +1 -0
- package/dist/client/assets/cuda-CRW2z42A.svg +1 -0
- package/dist/client/assets/cue-ni2TTLiZ.svg +1 -0
- package/dist/client/assets/cursor-CJahHGg2.svg +1 -0
- package/dist/client/assets/cypress-DR0JRbfI.svg +1 -0
- package/dist/client/assets/d-B87zyVMx.svg +1 -0
- package/dist/client/assets/dart-Dx2oVcaR.svg +1 -0
- package/dist/client/assets/dart_generated-Wk58pte9.svg +1 -0
- package/dist/client/assets/database-B_oKaDcf.svg +1 -0
- package/dist/client/assets/deepsource-DUTIJ9mv.svg +1 -0
- package/dist/client/assets/denizenscript-BJc2vgOS.svg +1 -0
- package/dist/client/assets/deno-CyFvrzCm.svg +1 -0
- package/dist/client/assets/dependabot-BgJkJLU3.svg +1 -0
- package/dist/client/assets/dependencies-update-CdGy9ujO.svg +1 -0
- package/dist/client/assets/dhall-Dmhh82EO.svg +1 -0
- package/dist/client/assets/diff-6SXDCokN.svg +1 -0
- package/dist/client/assets/dinophp-D9hQnqAR.svg +1 -0
- package/dist/client/assets/disc-h_dLNGEL.svg +1 -0
- package/dist/client/assets/django-N1UNAXk1.svg +1 -0
- package/dist/client/assets/dll-1DkaBp0q.svg +1 -0
- package/dist/client/assets/docker-CfHcr61D.svg +1 -0
- package/dist/client/assets/doctex-installer-Cs7SA-ct.svg +1 -0
- package/dist/client/assets/document-o-3iA9GQ.svg +1 -0
- package/dist/client/assets/dotjs-DIyH7Gzv.svg +1 -0
- package/dist/client/assets/drawio-2RVDLi9g.svg +1 -0
- package/dist/client/assets/drizzle-hhBCZx1t.svg +1 -0
- package/dist/client/assets/drone-KvQ2n-xY.svg +1 -0
- package/dist/client/assets/dtx-DdGk8fFj.svg +1 -0
- package/dist/client/assets/duc-CHcAZQos.svg +1 -0
- package/dist/client/assets/dune-DuGO6qDA.svg +1 -0
- package/dist/client/assets/edge-ChHKXrYp.svg +1 -0
- package/dist/client/assets/editorconfig-BUzUAwRX.svg +1 -0
- package/dist/client/assets/ejs-D_Li05n3.svg +1 -0
- package/dist/client/assets/elixir-75mYTx2s.svg +1 -0
- package/dist/client/assets/elm-DE_LIp02.svg +1 -0
- package/dist/client/assets/email-G8mUttGa.svg +1 -0
- package/dist/client/assets/ember-B1y9-Oks.svg +1 -0
- package/dist/client/assets/epub-DPvrBCNf.svg +1 -0
- package/dist/client/assets/erlang-DosS6spf.svg +1 -0
- package/dist/client/assets/esbuild-DV6xNZ-T.svg +1 -0
- package/dist/client/assets/eslint-IU_g232-.svg +1 -0
- package/dist/client/assets/excalidraw-BllKd-7L.svg +1 -0
- package/dist/client/assets/exe-SfcXmkQy.svg +1 -0
- package/dist/client/assets/expo-B4PonO4I.svg +1 -0
- package/dist/client/assets/external-Bawe0tSn.js +1 -0
- package/dist/client/assets/fastlane-C4SZDg50.svg +1 -0
- package/dist/client/assets/favicon-VsCcG-A-.svg +1 -0
- package/dist/client/assets/figma-C8Gjq2Xj.svg +1 -0
- package/dist/client/assets/file-BEIHQH8Q.svg +256 -0
- package/dist/client/assets/firebase-DHIO0glR.svg +1 -0
- package/dist/client/assets/flash-Dck7x_rj.svg +1 -0
- package/dist/client/assets/flow-DD4KQiTg.svg +1 -0
- package/dist/client/assets/font-ChbWr8nk.svg +1 -0
- package/dist/client/assets/forth-C3qwGqMh.svg +1 -0
- package/dist/client/assets/fortran-B0jORJ3v.svg +1 -0
- package/dist/client/assets/foxpro-D3Wp1B1h.svg +1 -0
- package/dist/client/assets/freemarker-BLonnh3h.svg +1 -0
- package/dist/client/assets/fsharp-QwwPC8x_.svg +1 -0
- package/dist/client/assets/fusebox-DqjzyXyI.svg +1 -0
- package/dist/client/assets/gamemaker-C82Pt646.svg +1 -0
- package/dist/client/assets/garden-BUsWpFKW.svg +1 -0
- package/dist/client/assets/gatsby-OA1TADMJ.svg +1 -0
- package/dist/client/assets/gcp-CW2RG_Wp.svg +1 -0
- package/dist/client/assets/gemfile-1RY6BqSx.svg +1 -0
- package/dist/client/assets/gemini-CIgUY8Tg.svg +1 -0
- package/dist/client/assets/gemini-ai-Bwe7HeFb.svg +1 -0
- package/dist/client/assets/git-BEMs8TOZ.svg +1 -0
- package/dist/client/assets/gitlab-zt07_Oa4.svg +1 -0
- package/dist/client/assets/gitpod-BtZJQuF0.svg +1 -0
- package/dist/client/assets/gleam-CKPcrRAD.svg +1 -0
- package/dist/client/assets/gnuplot-BvFqM0ms.svg +1 -0
- package/dist/client/assets/go-ByY4sxRu.svg +1 -0
- package/dist/client/assets/go-mod-CB6BWQDr.svg +1 -0
- package/dist/client/assets/godot-C1EmL4jR.svg +1 -0
- package/dist/client/assets/godot-assets-D-FMsuJX.svg +1 -0
- package/dist/client/assets/google-BnrMOJ4V.svg +1 -0
- package/dist/client/assets/gradle-zsQ12U1q.svg +1 -0
- package/dist/client/assets/grafana-alloy-D2DQ33BM.svg +1 -0
- package/dist/client/assets/grain-5NkvKROL.svg +1 -0
- package/dist/client/assets/graphcool-CInCTIdE.svg +1 -0
- package/dist/client/assets/graphql-DnNt2maR.svg +1 -0
- package/dist/client/assets/gridsome-C2H5SpaD.svg +1 -0
- package/dist/client/assets/groovy-B93RxI7a.svg +1 -0
- package/dist/client/assets/grunt-cwitasVS.svg +1 -0
- package/dist/client/assets/gulp-BIZ8EAl0.svg +1 -0
- package/dist/client/assets/h-1bd73y8t.svg +1 -0
- package/dist/client/assets/hack-Bsd1y9bu.svg +1 -0
- package/dist/client/assets/hadolint-D1aEtESc.svg +1 -0
- package/dist/client/assets/haml-BKq8hU-U.svg +1 -0
- package/dist/client/assets/handlebars-Dem98Ago.svg +1 -0
- package/dist/client/assets/happo-B64XokX0.svg +1 -0
- package/dist/client/assets/hardhat-ByFzkuf4.svg +1 -0
- package/dist/client/assets/harmonix-CUh3S11M.svg +1 -0
- package/dist/client/assets/haskell-C6GxEwdX.svg +1 -0
- package/dist/client/assets/haxe-DdxZWPQy.svg +1 -0
- package/dist/client/assets/hcl-BJiZ3gWE.svg +1 -0
- package/dist/client/assets/helm-CF4Mi35z.svg +1 -0
- package/dist/client/assets/heroku-B6vPz_TJ.svg +1 -0
- package/dist/client/assets/hex-BuGJuqn1.svg +1 -0
- package/dist/client/assets/hip-DB4xe1Ab.svg +1 -0
- package/dist/client/assets/histoire-BMTufysg.svg +1 -0
- package/dist/client/assets/hjson-Dl4ZTgK4.svg +1 -0
- package/dist/client/assets/horusec-z6vyrVAy.svg +1 -0
- package/dist/client/assets/hosts-BydfWJ9z.svg +1 -0
- package/dist/client/assets/hpp-HerxyIaC.svg +1 -0
- package/dist/client/assets/html-BNRzQ3jk.svg +1 -0
- package/dist/client/assets/http-Cp7RCu8F.svg +1 -0
- package/dist/client/assets/huff-t3uGT10D.svg +1 -0
- package/dist/client/assets/hurl-S3Fvmz3R.svg +1 -0
- package/dist/client/assets/husky-A0ALYNcp.svg +1 -0
- package/dist/client/assets/i18n-BezCQ09L.svg +1 -0
- package/dist/client/assets/idris-CfHPjxcM.svg +1 -0
- package/dist/client/assets/ifanr-cloud-DnqgZYHA.svg +1 -0
- package/dist/client/assets/image-DYZiZ4CP.svg +1 -0
- package/dist/client/assets/imba-C1Q6aK1I.svg +1 -0
- package/dist/client/assets/index-0z4D-18M.js +2 -0
- package/dist/client/assets/installation-p19cVXO7.svg +1 -0
- package/dist/client/assets/instructions-CaWEzdge.svg +1 -0
- package/dist/client/assets/ionic-Xp-47Icg.svg +1 -0
- package/dist/client/assets/istanbul-DJKvMwnq.svg +1 -0
- package/dist/client/assets/jar-BaN44U3v.svg +1 -0
- package/dist/client/assets/java-QyMrrPma.svg +1 -0
- package/dist/client/assets/javaclass-BU8_3KBR.svg +1 -0
- package/dist/client/assets/javascript-CQjpTQab.svg +1 -0
- package/dist/client/assets/javascript-map-BQGiWnDM.svg +1 -0
- package/dist/client/assets/jenkins-Bf7aNz-w.svg +1 -0
- package/dist/client/assets/jest-BgbiFFEd.svg +1 -0
- package/dist/client/assets/jinja-4WR9tA6i.svg +1 -0
- package/dist/client/assets/jsconfig-ZAi6fTF1.svg +1 -0
- package/dist/client/assets/json-NsberLUP.svg +1 -0
- package/dist/client/assets/json_schema-sOuobP_H.svg +1 -0
- package/dist/client/assets/jsr-CWVSPSyV.svg +1 -0
- package/dist/client/assets/julia-DCKDSo9T.svg +1 -0
- package/dist/client/assets/jupyter-BKV2q0IB.svg +1 -0
- package/dist/client/assets/just-WQgcj-TR.svg +1 -0
- package/dist/client/assets/karma-Dm3AtiMd.svg +1 -0
- package/dist/client/assets/kcl-CyzArNE1.svg +1 -0
- package/dist/client/assets/key-CrFjkQiv.svg +1 -0
- package/dist/client/assets/keystatic-BECeLiHJ.svg +1 -0
- package/dist/client/assets/kivy-baDYR7ar.svg +1 -0
- package/dist/client/assets/kl-Dy3qeUbd.svg +1 -0
- package/dist/client/assets/knip-BWpBMXqu.svg +1 -0
- package/dist/client/assets/kotlin-DcjME28v.svg +1 -0
- package/dist/client/assets/kubernetes-B5EEXb3e.svg +1 -0
- package/dist/client/assets/kusto-CIjvTfRW.svg +1 -0
- package/dist/client/assets/label-AKZOJqFh.svg +1 -0
- package/dist/client/assets/laravel-DWauj5w4.svg +1 -0
- package/dist/client/assets/latexmk-DQ0u8QMa.svg +1 -0
- package/dist/client/assets/lbx-BMCQe48q.svg +1 -0
- package/dist/client/assets/lean-COOrALn9.svg +1 -0
- package/dist/client/assets/lefthook-DClcp3br.svg +1 -0
- package/dist/client/assets/lerna-BsWY3uYS.svg +1 -0
- package/dist/client/assets/less-0c0PeB1Z.svg +1 -0
- package/dist/client/assets/liara-CSN9sJzE.svg +1 -0
- package/dist/client/assets/lib-B-NXM8aC.svg +1 -0
- package/dist/client/assets/license-DmydDYqK.svg +1 -0
- package/dist/client/assets/lighthouse-CtbIoCdK.svg +1 -0
- package/dist/client/assets/lilypond-CBSm3LFL.svg +1 -0
- package/dist/client/assets/lintstaged-Bj1Eddi5.svg +1 -0
- package/dist/client/assets/liquid-ClnkrScY.svg +1 -0
- package/dist/client/assets/lisp-CMn3epg5.svg +1 -0
- package/dist/client/assets/lit-CJ6w1GHF.js +2 -0
- package/dist/client/assets/livescript-B5PkWD8e.svg +1 -0
- package/dist/client/assets/lock-DRloBj1S.svg +1 -0
- package/dist/client/assets/log-Db6NwxHZ.svg +1 -0
- package/dist/client/assets/lolcode-C6q6fY1O.svg +1 -0
- package/dist/client/assets/lottie-ExyLYhtq.svg +1 -0
- package/dist/client/assets/lua-CUh_Iwk8.svg +1 -0
- package/dist/client/assets/luau-De_4eP_9.svg +1 -0
- package/dist/client/assets/lynx-B49IBNBN.svg +1 -0
- package/dist/client/assets/lyric-Bm3UlVp3.svg +1 -0
- package/dist/client/assets/macaulay2-0YotwNnE.svg +1 -0
- package/dist/client/assets/main-DDgPZEYp.js +2 -0
- package/dist/client/assets/makefile-B2WlY55Y.svg +1 -0
- package/dist/client/assets/markdoc-DjROVW5I.svg +1 -0
- package/dist/client/assets/markdoc-config-BpVRhg1B.svg +1 -0
- package/dist/client/assets/markdown-Bm_LLmmi.svg +1 -0
- package/dist/client/assets/markdownlint-D4M2LXbH.svg +1 -0
- package/dist/client/assets/markojs-BohUrSLp.svg +1 -0
- package/dist/client/assets/mathematica-BGWNQXSR.svg +1 -0
- package/dist/client/assets/maven-BffVB5hm.svg +1 -0
- package/dist/client/assets/mdsvex-Dc9CFJJa.svg +1 -0
- package/dist/client/assets/mdx-D6qa5U8C.svg +1 -0
- package/dist/client/assets/mercurial-BDoD6ubd.svg +1 -0
- package/dist/client/assets/merlin-D5wTXfO4.svg +1 -0
- package/dist/client/assets/mermaid-BTscZDRS.svg +1 -0
- package/dist/client/assets/meson-dcvm8lmo.svg +1 -0
- package/dist/client/assets/metro-XIyWX0Go.svg +1 -0
- package/dist/client/assets/minecraft-CE8xXE3-.svg +1 -0
- package/dist/client/assets/minecraft-fabric-wG6LwgIf.svg +1 -0
- package/dist/client/assets/mint-Cb-YXACo.svg +1 -0
- package/dist/client/assets/mist-DAm4UkTw.svg +1 -0
- package/dist/client/assets/mjml-C_r30C5E.svg +1 -0
- package/dist/client/assets/mocha-BF5_j65C.svg +1 -0
- package/dist/client/assets/modernizr-89IMS8eL.svg +1 -0
- package/dist/client/assets/mojo-CscjT2Jm.svg +1 -0
- package/dist/client/assets/moon-_L_nTq1_.svg +1 -0
- package/dist/client/assets/moonscript-Ayut2PrD.svg +1 -0
- package/dist/client/assets/mrpack-BVpGpKVf.svg +1 -0
- package/dist/client/assets/mxml-B21Nbdgw.svg +1 -0
- package/dist/client/assets/nano-staged-CAVSFkY8.svg +1 -0
- package/dist/client/assets/ndst-DpYLiHkx.svg +1 -0
- package/dist/client/assets/nest-CUu_iPqI.svg +1 -0
- package/dist/client/assets/netlify-Bb7vRMfV.svg +1 -0
- package/dist/client/assets/next-2gAImGWJ.svg +1 -0
- package/dist/client/assets/nextflow-dPJG5e3G.svg +1 -0
- package/dist/client/assets/nginx-Ss9U_SJ3.svg +1 -0
- package/dist/client/assets/nim-CXHB5kuH.svg +1 -0
- package/dist/client/assets/nix-DoxxkZ2k.svg +1 -0
- package/dist/client/assets/nodejs-Czg5JT6z.svg +1 -0
- package/dist/client/assets/nodemon-CprsexAJ.svg +1 -0
- package/dist/client/assets/npm-BSKPS9CC.svg +1 -0
- package/dist/client/assets/nuget-D_mqKH22.svg +1 -0
- package/dist/client/assets/nunjucks-CSL1En7R.svg +1 -0
- package/dist/client/assets/nuxt-BszScKzK.svg +1 -0
- package/dist/client/assets/nx-CTIqtdbG.svg +1 -0
- package/dist/client/assets/objective-c-3E5wWl6u.svg +1 -0
- package/dist/client/assets/objective-cpp-DjpoLOMo.svg +1 -0
- package/dist/client/assets/ocaml-T4fLeZFT.svg +1 -0
- package/dist/client/assets/odin-DlWnbZWN.svg +1 -0
- package/dist/client/assets/onnx-C6WInyrb.svg +1 -0
- package/dist/client/assets/opa-D5GoZW5M.svg +1 -0
- package/dist/client/assets/opam-3IZadro4.svg +1 -0
- package/dist/client/assets/openapi-DjlVyoOp.svg +1 -0
- package/dist/client/assets/opencode-BaYncWio.svg +1 -0
- package/dist/client/assets/opentofu-jFw9lQBP.svg +1 -0
- package/dist/client/assets/otne-SLiO8whA.svg +1 -0
- package/dist/client/assets/oxc-DN6_023j.svg +1 -0
- package/dist/client/assets/packship-UyLXQ_8n.svg +1 -0
- package/dist/client/assets/palette-C0GOsJgu.svg +1 -0
- package/dist/client/assets/panda-D469wGns.svg +1 -0
- package/dist/client/assets/parcel-BrXQSBYb.svg +1 -0
- package/dist/client/assets/pascal-oxGvvJ_x.svg +1 -0
- package/dist/client/assets/pawn-BvapPd-t.svg +1 -0
- package/dist/client/assets/payload-Cks6N40-.svg +1 -0
- package/dist/client/assets/pdf-DtjgBDdX.svg +1 -0
- package/dist/client/assets/pdm-CbwhGqOl.svg +1 -0
- package/dist/client/assets/peg-BJdFn78b.svg +1 -0
- package/dist/client/assets/percy-CWbuYL05.svg +1 -0
- package/dist/client/assets/perl-DUX0zwsQ.svg +1 -0
- package/dist/client/assets/php-5lebFt-d.svg +1 -0
- package/dist/client/assets/php-cs-fixer-D3Vv91zO.svg +1 -0
- package/dist/client/assets/phpstan-D9FJYotS.svg +1 -0
- package/dist/client/assets/phpunit-BlNyjrEw.svg +1 -0
- package/dist/client/assets/pinejs-CDuWmsOY.svg +1 -0
- package/dist/client/assets/pipeline-CCHJ-CIC.svg +1 -0
- package/dist/client/assets/pkl-CzHZDqdt.svg +1 -0
- package/dist/client/assets/plastic-CvMMB3c5.svg +1 -0
- package/dist/client/assets/playwright-C8c_RKic.svg +1 -0
- package/dist/client/assets/plop-D4uymN-_.svg +1 -0
- package/dist/client/assets/pm2-ecosystem-Cv28zGx9.svg +1 -0
- package/dist/client/assets/pnpm-ndvMXYUu.svg +1 -0
- package/dist/client/assets/poetry-ClZfXo_0.svg +1 -0
- package/dist/client/assets/postcss-g3C3DDoi.svg +1 -0
- package/dist/client/assets/posthtml-BkDCsIkz.svg +1 -0
- package/dist/client/assets/powerpoint-CCXYfzLu.svg +1 -0
- package/dist/client/assets/powershell-DnXi9Rjx.svg +1 -0
- package/dist/client/assets/pre-commit-DXbl2unR.svg +1 -0
- package/dist/client/assets/preload-helper-CRzLMJPS.js +1 -0
- package/dist/client/assets/prettier-DFxlFAp4.svg +1 -0
- package/dist/client/assets/prisma-BgG1MIwh.svg +1 -0
- package/dist/client/assets/processing-B1bs0VmW.svg +1 -0
- package/dist/client/assets/prolog-CxwCfnlm.svg +1 -0
- package/dist/client/assets/prompt-7jgVTNou.svg +1 -0
- package/dist/client/assets/proto-Bv4-L0XU.svg +1 -0
- package/dist/client/assets/protractor-CJWv1lK-.svg +1 -0
- package/dist/client/assets/pug-BXlORXuH.svg +1 -0
- package/dist/client/assets/puppet-CKCVJvZX.svg +1 -0
- package/dist/client/assets/puppeteer-DDZkfQNZ.svg +1 -0
- package/dist/client/assets/purescript-CUdIfJrp.svg +1 -0
- package/dist/client/assets/python-misc-BZ5TXfdG.svg +1 -0
- package/dist/client/assets/python-oHA753pt.svg +1 -0
- package/dist/client/assets/pytorch-f0udCMaw.svg +1 -0
- package/dist/client/assets/qsharp-BaFNvoXS.svg +1 -0
- package/dist/client/assets/quarto-zhC7oGOB.svg +1 -0
- package/dist/client/assets/quasar-BXE2pW5w.svg +1 -0
- package/dist/client/assets/quokka-DrMOw93T.svg +1 -0
- package/dist/client/assets/r-AQewf3lz.svg +1 -0
- package/dist/client/assets/racket-BCyLzvrP.svg +1 -0
- package/dist/client/assets/raml-WDbT4cRb.svg +1 -0
- package/dist/client/assets/razor-BAUCpTxC.svg +1 -0
- package/dist/client/assets/rbxmk-CZ9pB7X6.svg +1 -0
- package/dist/client/assets/rc-BDgxm_A8.svg +1 -0
- package/dist/client/assets/react-CdMrIyLK.svg +1 -0
- package/dist/client/assets/react_ts-9WeLJBIj.svg +1 -0
- package/dist/client/assets/readme-BSIQKZwq.svg +1 -0
- package/dist/client/assets/reason-m9vOqeqw.svg +1 -0
- package/dist/client/assets/red-Dzf3O8j4.svg +1 -0
- package/dist/client/assets/regedit-DJzxfiQN.svg +1 -0
- package/dist/client/assets/remark-C55cxr93.svg +1 -0
- package/dist/client/assets/remix-Bk2h4zH7.svg +1 -0
- package/dist/client/assets/renovate-zzi8oRFv.svg +1 -0
- package/dist/client/assets/replit-BpeMxcBh.svg +1 -0
- package/dist/client/assets/requiredTerminalPlugin-ZZOwUcbr.js +3 -0
- package/dist/client/assets/rescript-interface-a87dYX5u.svg +1 -0
- package/dist/client/assets/rescript-qPAwtDLa.svg +1 -0
- package/dist/client/assets/restql-CnZcZpny.svg +1 -0
- package/dist/client/assets/riot-DjRzaRVp.svg +1 -0
- package/dist/client/assets/roadmap-DWpVc5P5.svg +1 -0
- package/dist/client/assets/roblox-Bv5zbklC.svg +1 -0
- package/dist/client/assets/robot-Cto_i8jo.svg +1 -0
- package/dist/client/assets/robots-COnOCAqh.svg +1 -0
- package/dist/client/assets/rocket-CAmUpMm6.svg +1 -0
- package/dist/client/assets/rolldown-Cy_4AzVW.svg +1 -0
- package/dist/client/assets/rollup-2ZkmBeWV.svg +1 -0
- package/dist/client/assets/rome-Cq3lb2xY.svg +1 -0
- package/dist/client/assets/routing-BNxHhbXZ.svg +1 -0
- package/dist/client/assets/rspec-CoEmfx5H.svg +1 -0
- package/dist/client/assets/rstack-DzJ3cPXM.svg +1 -0
- package/dist/client/assets/rubocop-CokGq15J.svg +1 -0
- package/dist/client/assets/ruby-DTGQ4xCM.svg +1 -0
- package/dist/client/assets/ruff-BN0KpNzC.svg +1 -0
- package/dist/client/assets/rust-B122pUHY.svg +1 -0
- package/dist/client/assets/salt-B8j0OVNV.svg +1 -0
- package/dist/client/assets/san-C0UnyaU4.svg +1 -0
- package/dist/client/assets/sas-RNoBA0-Y.svg +1 -0
- package/dist/client/assets/sass-B7y5mYt_.svg +1 -0
- package/dist/client/assets/sbt-DosCci-d.svg +1 -0
- package/dist/client/assets/scala-CsGkKwl5.svg +1 -0
- package/dist/client/assets/scheme-CS2UbTis.svg +1 -0
- package/dist/client/assets/scons-CyqfFgvx.svg +1 -0
- package/dist/client/assets/screwdriver-DjTKuDz7.svg +1 -0
- package/dist/client/assets/search-fq7VxV09.svg +1 -0
- package/dist/client/assets/semantic-release-BbLzZX96.svg +1 -0
- package/dist/client/assets/semgrep-Cl6VUQtd.svg +1 -0
- package/dist/client/assets/sentry-MrouyD-P.svg +1 -0
- package/dist/client/assets/sequelize-BQWikTCs.svg +1 -0
- package/dist/client/assets/serverless-C7Jdn6_T.svg +1 -0
- package/dist/client/assets/settings-CtzL1evz.svg +1 -0
- package/dist/client/assets/shader-BZXKDeiD.svg +1 -0
- package/dist/client/assets/shellcheck-BgWOclub.svg +1 -0
- package/dist/client/assets/simulink-yQnKyx__.svg +1 -0
- package/dist/client/assets/siyuan-CPWD86-6.svg +1 -0
- package/dist/client/assets/sketch-NbltjaPf.svg +1 -0
- package/dist/client/assets/skill-BThvgH87.svg +1 -0
- package/dist/client/assets/slim-CTjdZAfz.svg +1 -0
- package/dist/client/assets/slint-B0xbkqgr.svg +1 -0
- package/dist/client/assets/slug-CWkQgR9s.svg +1 -0
- package/dist/client/assets/smarty-BXDiLQNt.svg +1 -0
- package/dist/client/assets/sml-DMkoWEN5.svg +1 -0
- package/dist/client/assets/snakemake-xG7xUrdI.svg +1 -0
- package/dist/client/assets/snapcraft-zvgAcZ4p.svg +1 -0
- package/dist/client/assets/snowpack-l0uHt304.svg +1 -0
- package/dist/client/assets/snyk-DCW3rtvv.svg +1 -0
- package/dist/client/assets/solidity-C4TQWJKU.svg +1 -0
- package/dist/client/assets/sonarcloud-ClLIXGyx.svg +1 -0
- package/dist/client/assets/spwn-31WG9ftR.svg +1 -0
- package/dist/client/assets/stackblitz-ZX6aBRKb.svg +1 -0
- package/dist/client/assets/stan-CPcUXbxB.svg +1 -0
- package/dist/client/assets/steadybit-BZtlLY-3.svg +1 -0
- package/dist/client/assets/stencil-D0FNO32O.svg +1 -0
- package/dist/client/assets/stitches-BYlEJvuz.svg +1 -0
- package/dist/client/assets/storybook-KxGhpZYa.svg +1 -0
- package/dist/client/assets/stryker-CYflxT_R.svg +1 -0
- package/dist/client/assets/sty-C4HqHV4z.svg +1 -0
- package/dist/client/assets/stylable-Bi9Gr97T.svg +1 -0
- package/dist/client/assets/styleSources-CdF2T_pj.js +1 -0
- package/dist/client/assets/stylelint-JSbd-yhE.svg +1 -0
- package/dist/client/assets/styles-BwN5rgmt.js +10 -0
- package/dist/client/assets/styles-DK4aKhCE.js +1 -0
- package/dist/client/assets/stylus-ZoqbP9jE.svg +1 -0
- package/dist/client/assets/sublime-DFvp_Ess.svg +1 -0
- package/dist/client/assets/subtitles-BNOc1mEf.svg +1 -0
- package/dist/client/assets/supabase-CX7cap86.svg +1 -0
- package/dist/client/assets/svelte-B8HKO6BX.svg +1 -0
- package/dist/client/assets/svelte_js-C_RKcwSP.svg +1 -0
- package/dist/client/assets/svelte_ts-APH7lcVp.svg +1 -0
- package/dist/client/assets/svg-DVy7iktw.svg +1 -0
- package/dist/client/assets/svgo-CJXaeDEN.svg +1 -0
- package/dist/client/assets/svgr-Dn8OFGar.svg +1 -0
- package/dist/client/assets/swagger-Dqyrwr4g.svg +1 -0
- package/dist/client/assets/sway-C1Kkif7r.svg +1 -0
- package/dist/client/assets/swc-BUhoW8cb.svg +1 -0
- package/dist/client/assets/swift-D4_pkWil.svg +1 -0
- package/dist/client/assets/syncpack-DtZ994Gf.svg +1 -0
- package/dist/client/assets/table-YhsaNNk_.svg +1 -0
- package/dist/client/assets/tailwindcss-DODJSdj1.svg +1 -0
- package/dist/client/assets/tape-DGYhnMht.svg +1 -0
- package/dist/client/assets/taskfile-f5DM79_-.svg +1 -0
- package/dist/client/assets/tauri-DBBtDoCo.svg +1 -0
- package/dist/client/assets/taze-BPR9LgXp.svg +1 -0
- package/dist/client/assets/tcl-CiAJKGaA.svg +1 -0
- package/dist/client/assets/teal-WyfAQok0.svg +1 -0
- package/dist/client/assets/templ-BHla0pe-.svg +1 -0
- package/dist/client/assets/template-qJWiB5gQ.svg +1 -0
- package/dist/client/assets/terraform-R86_iPhv.svg +1 -0
- package/dist/client/assets/test-js-A34KrdbK.svg +1 -0
- package/dist/client/assets/test-jsx-C2PQBkQP.svg +1 -0
- package/dist/client/assets/test-ts-fdt299ek.svg +1 -0
- package/dist/client/assets/tex-DpewR4UN.svg +1 -0
- package/dist/client/assets/textlint-pjwsbDhs.svg +1 -0
- package/dist/client/assets/themeCatalog-B3yda95n.js +1 -0
- package/dist/client/assets/themePreference-BBiJxLjs.js +1 -0
- package/dist/client/assets/themeStartup-0b02tNrh.js +2 -0
- package/dist/client/assets/tilt-Dwon5dv-.svg +1 -0
- package/dist/client/assets/tldraw-BnDJmluq.svg +1 -0
- package/dist/client/assets/tobi-CQ-666uh.svg +1 -0
- package/dist/client/assets/tobimake-DzDbTYW1.svg +1 -0
- package/dist/client/assets/toc-nUTycYjl.svg +1 -0
- package/dist/client/assets/todo-CpcorlsE.svg +1 -0
- package/dist/client/assets/toml-DvUt-GOd.svg +1 -0
- package/dist/client/assets/toon-CGe9RDKY.svg +1 -0
- package/dist/client/assets/travis-CH6zNy43.svg +1 -0
- package/dist/client/assets/tree-epW9JaxP.svg +1 -0
- package/dist/client/assets/trigger-CqdxCyG0.svg +1 -0
- package/dist/client/assets/tsconfig-ROp_YdWL.svg +1 -0
- package/dist/client/assets/tsdoc-BEXcYgLD.svg +1 -0
- package/dist/client/assets/tsdown-B96z16my.svg +1 -0
- package/dist/client/assets/tsil-D-U9yWS8.svg +1 -0
- package/dist/client/assets/tune-DISlqKNZ.svg +1 -0
- package/dist/client/assets/turborepo-CWNwoZtI.svg +1 -0
- package/dist/client/assets/twig-CA70AYNK.svg +1 -0
- package/dist/client/assets/twine-BPJsGZd2.svg +1 -0
- package/dist/client/assets/typedoc-FY7jFoGW.svg +1 -0
- package/dist/client/assets/typescript-DjjXqw-n.svg +1 -0
- package/dist/client/assets/typescript-def-CTN5WM5i.svg +1 -0
- package/dist/client/assets/typst-CnDSkp_i.svg +1 -0
- package/dist/client/assets/uiua-BOsurlxn.svg +1 -0
- package/dist/client/assets/umi-DYOjFi8w.svg +1 -0
- package/dist/client/assets/uml-CYijxuna.svg +1 -0
- package/dist/client/assets/unity-CRNCEoK6.svg +1 -0
- package/dist/client/assets/unlicense-DG_b3BEE.svg +1 -0
- package/dist/client/assets/unocss-MqLuLfeL.svg +1 -0
- package/dist/client/assets/url-hE4h5p6b.svg +1 -0
- package/dist/client/assets/uv-DRTOVSi_.svg +1 -0
- package/dist/client/assets/vagrant-YnxMTuKe.svg +1 -0
- package/dist/client/assets/vala-m_i2ZWns.svg +1 -0
- package/dist/client/assets/vanilla-extract-76H6-A4R.svg +1 -0
- package/dist/client/assets/varnish-CX3oiNcp.svg +1 -0
- package/dist/client/assets/vedic-D6-oQUka.svg +1 -0
- package/dist/client/assets/velite-nLLNxKBA.svg +1 -0
- package/dist/client/assets/velocity-CSvfE9yM.svg +1 -0
- package/dist/client/assets/vercel-CgKLo9IO.svg +1 -0
- package/dist/client/assets/verdaccio-gsdiCbvv.svg +1 -0
- package/dist/client/assets/verified-BFLtqroG.svg +1 -0
- package/dist/client/assets/verilog-CbZvRaae.svg +1 -0
- package/dist/client/assets/verse-D_RZ0Bz0.svg +1 -0
- package/dist/client/assets/vfl-8CAM-hjs.svg +1 -0
- package/dist/client/assets/video-qxpJXkH6.svg +1 -0
- package/dist/client/assets/vim-CB8qTVuS.svg +1 -0
- package/dist/client/assets/virtual-Hoc2XbZN.svg +1 -0
- package/dist/client/assets/visualstudio-BHj2x5q7.svg +1 -0
- package/dist/client/assets/vite-JKzchVew.svg +1 -0
- package/dist/client/assets/vitest-Cl4_wKFu.svg +1 -0
- package/dist/client/assets/vlang-C3-DMUIm.svg +1 -0
- package/dist/client/assets/vscode-BtTXhPua.svg +1 -0
- package/dist/client/assets/vue-BlenztPP.svg +1 -0
- package/dist/client/assets/vue-config-o7yPAADv.svg +1 -0
- package/dist/client/assets/wakatime-DNz7qcxZ.svg +1 -0
- package/dist/client/assets/wallaby-C0UIkEOa.svg +1 -0
- package/dist/client/assets/wally-Ds1quKSG.svg +1 -0
- package/dist/client/assets/warp-B3X5Zoeh.svg +1 -0
- package/dist/client/assets/watchman-7EFq9LSa.svg +1 -0
- package/dist/client/assets/webassembly-Bs4UtU2T.svg +1 -0
- package/dist/client/assets/webhint-B4I6V0Ee.svg +1 -0
- package/dist/client/assets/webpack-zo2uWGOg.svg +1 -0
- package/dist/client/assets/wepy-Cho54Qlr.svg +1 -0
- package/dist/client/assets/werf-BW9FiKe5.svg +1 -0
- package/dist/client/assets/windicss-C_8y516i.svg +1 -0
- package/dist/client/assets/wolframlanguage-D6C1WBYh.svg +1 -0
- package/dist/client/assets/word-BcPLm6YH.svg +1 -0
- package/dist/client/assets/wrangler-CjgAkoTg.svg +1 -0
- package/dist/client/assets/wxt-c6drtC9H.svg +1 -0
- package/dist/client/assets/xaml-DE72OHNQ.svg +1 -0
- package/dist/client/assets/xmake-4WNmmIJj.svg +1 -0
- package/dist/client/assets/xml-S4aCxoUr.svg +1 -0
- package/dist/client/assets/yaml-DPTMsOTP.svg +1 -0
- package/dist/client/assets/yang-N-7dP4WI.svg +1 -0
- package/dist/client/assets/yarn-Cios8OFX.svg +1 -0
- package/dist/client/assets/zeabur-kqbNXTTH.svg +1 -0
- package/dist/client/assets/zig-CdphsgLN.svg +1 -0
- package/dist/client/assets/zip-GDnEynqi.svg +1 -0
- package/dist/client/assets/zizmor-IsFFdy6W.svg +1 -0
- package/dist/client/index.html +12 -6
- package/dist/config.js +233 -87
- package/dist/config.js.map +1 -1
- package/dist/configSessionNamingMigration.js +63 -0
- package/dist/configSessionNamingMigration.js.map +1 -0
- package/dist/nativeServices/serviceDoctor.js +3 -3
- package/dist/nativeServices/serviceDoctor.js.map +1 -1
- package/dist/nativeServices/servicePlan.js +53 -23
- package/dist/nativeServices/servicePlan.js.map +1 -1
- package/dist/nativeServices/serviceProbe.js +27 -7
- package/dist/nativeServices/serviceProbe.js.map +1 -1
- package/dist/pi-packages/relays/markdownDocument.js +8 -9
- package/dist/pi-packages/relays/pi-web-plugin.js +11 -11
- package/dist/pi-packages/relays/relays.messages.js +38 -0
- package/dist/pi-packages/relays/relaysLocalization.js +19 -0
- package/dist/pi-packages/relays/relaysPanelElement.js +151 -96
- package/dist/pi-packages/scheduled-tasks/browser/pi-web-plugin.js +1135 -0
- package/dist/pi-packages/scheduled-tasks/domain.js +63 -0
- package/dist/pi-packages/scheduled-tasks/extensions/index.js +710 -0
- package/dist/pi-packages/scheduled-tasks/package.json +30 -0
- package/dist/pi-packages/scheduled-tasks/scheduler.js +89 -0
- package/dist/pi-packages/scheduled-tasks/server-plugin.js +9872 -0
- package/dist/pi-packages/scheduled-tasks/service.js +178 -0
- package/dist/pi-packages/scheduled-tasks/skills/scheduled-tasks/SKILL.md +30 -0
- package/dist/pi-packages/scheduled-tasks/sqlite.js +18 -0
- package/dist/pi-packages/scheduled-tasks/store.js +230 -0
- package/dist/pi-packages/scheduled-tasks/vite.browser.config.mjs +16 -0
- package/dist/pi-packages/scheduled-tasks/vite.companion.config.mjs +17 -0
- package/dist/pi-packages/scheduled-tasks/vite.config.mjs +17 -0
- package/dist/pi-packages/session-naming/config.js +78 -0
- package/dist/pi-packages/session-naming/extensions/index.js +74 -0
- package/dist/pi-packages/session-naming/generator.js +76 -0
- package/dist/pi-packages/session-naming/package.json +15 -0
- package/dist/pi-packages/workflows/browser/pi-web-plugin.js +10 -7
- package/dist/pi-packages/workflows/browser/workflows.messages.js +32 -0
- package/dist/pi-packages/workflows/browser/worktreeDialog.js +71 -50
- package/dist/pi-packages/workflows/server-plugin.js +137 -23
- package/dist/pi-web-plugins/audio/audioElement.js +61 -0
- package/dist/pi-web-plugins/audio/audioFormats.js +18 -0
- package/dist/pi-web-plugins/audio/byteRange.js +21 -0
- package/dist/pi-web-plugins/audio/package.json +10 -0
- package/dist/pi-web-plugins/audio/pi-web-plugin.js +39 -0
- package/dist/pi-web-plugins/audio/server.js +71 -0
- package/dist/pi-web-plugins/code-highlight/browser/pi-web-plugin.js +4 -4
- package/dist/pi-web-plugins/custom-ui-codex/codex.css +8 -0
- package/dist/pi-web-plugins/custom-ui-codex/fileIcons.js +30 -0
- package/dist/pi-web-plugins/custom-ui-codex/package.json +8 -1
- package/dist/pi-web-plugins/custom-ui-codex/pi-web-plugin.js +8 -8
- package/dist/pi-web-plugins/files/browser/pi-web-plugin.js +236 -259
- package/dist/pi-web-plugins/git/browser/git-panel.js +138 -59
- package/dist/pi-web-plugins/git/browser/git.messages.js +47 -0
- package/dist/pi-web-plugins/git/browser/gitFileIcon.js +71 -0
- package/dist/pi-web-plugins/git/browser/pi-web-plugin.js +21 -4
- package/dist/pi-web-plugins/git/server-plugin.js +5 -3
- package/dist/pi-web-plugins/info/info.messages.js +66 -0
- package/dist/pi-web-plugins/info/infoInternals.js +217 -217
- package/dist/pi-web-plugins/info/pi-web-plugin.js +19 -14
- package/dist/pi-web-plugins/language-spanish/catalogs.js +1896 -0
- package/dist/pi-web-plugins/language-spanish/package.json +14 -0
- package/dist/pi-web-plugins/language-spanish/pi-web-plugin.js +90 -0
- package/dist/pi-web-plugins/language-swedish/catalogs.js +1896 -0
- package/dist/pi-web-plugins/language-swedish/package.json +14 -0
- package/dist/pi-web-plugins/language-swedish/pi-web-plugin.js +89 -0
- package/dist/pi-web-plugins/mermaid/browser/pi-web-plugin.js +4 -4
- package/dist/pi-web-plugins/terminal/browser/pi-web-plugin.js +71 -66
- package/dist/pi-web-plugins/terminal/bunPtyProvider.js +109 -0
- package/dist/pi-web-plugins/terminal/nodePtyProvider.js +75 -0
- package/dist/pi-web-plugins/terminal/nodePtySpawnHelper.js +36 -0
- package/dist/pi-web-plugins/terminal/ptyComposition.js +12 -0
- package/dist/pi-web-plugins/terminal/ptyProvider.js +2 -0
- package/dist/pi-web-plugins/terminal/server-plugin.js +42 -14
- package/dist/pi-web-plugins/terminal/terminalService.js +218 -76
- package/dist/pi-web-plugins/themes/assets/graphite.css +56 -0
- package/dist/pi-web-plugins/themes/assets/paper.css +56 -0
- package/dist/pi-web-plugins/themes/package.json +21 -0
- package/dist/pi-web-plugins/updates/pi-web-plugin.js +200 -155
- package/dist/pi-web-plugins/updates/updates.messages.js +59 -0
- package/dist/pi-web-plugins/updates/updatesLogic.js +27 -29
- package/dist/pi-web-plugins/workspace-tasks/config.js +18 -19
- package/dist/pi-web-plugins/workspace-tasks/pi-web-plugin.js +13 -8
- package/dist/pi-web-plugins/workspace-tasks/tasks.messages.js +45 -0
- package/dist/pi-web-plugins/workspace-tasks/tasksLocalization.js +33 -0
- package/dist/pi-web-plugins/workspace-tasks/tasksPanelElement.js +56 -42
- package/dist/pi-web-plugins/workspace-tasks/workspaceTasksClient.js +7 -33
- package/dist/pi-web-plugins/zh-cn/catalogs.json +1803 -0
- package/dist/pi-web-plugins/zh-cn/main.json +5 -1
- package/dist/pi-web-plugins/zh-cn/management-errors.json +6 -0
- package/dist/pi-web-plugins/zh-cn/pi-web-plugin.js +13 -4
- package/dist/pi-web-plugins/zh-cn/server.json +1 -1
- package/dist/piWebVersionReport.js +2 -0
- package/dist/piWebVersionReport.js.map +1 -1
- package/dist/plugin-api.d.ts +194 -9
- package/dist/runtimePreflight.js +14 -0
- package/dist/runtimePreflight.js.map +1 -0
- package/dist/server/activity/workspaceActivityService.js +18 -1
- package/dist/server/activity/workspaceActivityService.js.map +1 -1
- package/dist/server/app.js +45 -10
- package/dist/server/app.js.map +1 -1
- package/dist/server/configRoutes.js +117 -139
- package/dist/server/configRoutes.js.map +1 -1
- package/dist/server/configUpdates.js +104 -0
- package/dist/server/configUpdates.js.map +1 -0
- package/dist/server/deploymentIdentity.js +12 -10
- package/dist/server/deploymentIdentity.js.map +1 -1
- package/dist/server/deploymentIdentityRoutes.js +2 -1
- package/dist/server/deploymentIdentityRoutes.js.map +1 -1
- package/dist/server/diagnostics/nodePtyNativeModule.js +0 -18
- package/dist/server/diagnostics/nodePtyNativeModule.js.map +1 -1
- package/dist/server/diagnostics/terminalPrerequisites.js +54 -0
- package/dist/server/diagnostics/terminalPrerequisites.js.map +1 -0
- package/dist/server/index.js +9 -0
- package/dist/server/index.js.map +1 -1
- package/dist/server/knownAutoInstallPiPackages.js +6 -0
- package/dist/server/knownAutoInstallPiPackages.js.map +1 -1
- package/dist/server/knownPiPackages.js +4 -4
- package/dist/server/knownPiPackages.js.map +1 -1
- package/dist/server/machines/machineClient.js +39 -17
- package/dist/server/machines/machineClient.js.map +1 -1
- package/dist/server/machines/machinePluginProxyRoutes.js +3 -1
- package/dist/server/machines/machinePluginProxyRoutes.js.map +1 -1
- package/dist/server/machines/machineProxyRoutes.js +60 -9
- package/dist/server/machines/machineProxyRoutes.js.map +1 -1
- package/dist/server/machines/machineService.js +81 -13
- package/dist/server/machines/machineService.js.map +1 -1
- package/dist/server/machines/machineStore.js.map +1 -1
- package/dist/server/managementEmbed.js +4 -1
- package/dist/server/managementEmbed.js.map +1 -1
- package/dist/server/managementEntryRoutes.js +51 -0
- package/dist/server/managementEntryRoutes.js.map +1 -0
- package/dist/server/managementEntryTickets.js +46 -0
- package/dist/server/managementEntryTickets.js.map +1 -0
- package/dist/server/managementTransportLimits.js +5 -0
- package/dist/server/managementTransportLimits.js.map +1 -0
- package/dist/server/navigationPreferenceRoutes.js +20 -1
- package/dist/server/navigationPreferenceRoutes.js.map +1 -1
- package/dist/server/normalAuth.js +3 -1
- package/dist/server/normalAuth.js.map +1 -1
- package/dist/server/notices/serverNoticeStore.js +4 -0
- package/dist/server/notices/serverNoticeStore.js.map +1 -1
- package/dist/server/piPackageService.js +15 -1
- package/dist/server/piPackageService.js.map +1 -1
- package/dist/server/piWebPluginCatalog.js +23 -11
- package/dist/server/piWebPluginCatalog.js.map +1 -1
- package/dist/server/piWebPluginLifecycle.js +14 -4
- package/dist/server/piWebPluginLifecycle.js.map +1 -1
- package/dist/server/piWebPluginService.js +11 -5
- package/dist/server/piWebPluginService.js.map +1 -1
- package/dist/server/piWebStatus.js +12 -10
- package/dist/server/piWebStatus.js.map +1 -1
- package/dist/server/piWebStatusCache.js +3 -1
- package/dist/server/piWebStatusCache.js.map +1 -1
- package/dist/server/plugins/pluginBackendRegistry.js +229 -4
- package/dist/server/plugins/pluginBackendRegistry.js.map +1 -1
- package/dist/server/plugins/pluginBackendResourceProxyRoutes.js +40 -0
- package/dist/server/plugins/pluginBackendResourceProxyRoutes.js.map +1 -0
- package/dist/server/plugins/pluginBackendResourceResponse.js +84 -0
- package/dist/server/plugins/pluginBackendResourceResponse.js.map +1 -0
- package/dist/server/plugins/projectPluginSettings.js +9 -2
- package/dist/server/plugins/projectPluginSettings.js.map +1 -1
- package/dist/server/plugins/serverPluginCatalogCapability.js +7 -2
- package/dist/server/plugins/serverPluginCatalogCapability.js.map +1 -1
- package/dist/server/plugins/serverPluginPiSessionsCapability.js +16 -3
- package/dist/server/plugins/serverPluginPiSessionsCapability.js.map +1 -1
- package/dist/server/plugins/serverPluginRuntime.js +25 -9
- package/dist/server/plugins/serverPluginRuntime.js.map +1 -1
- package/dist/server/plugins/serverPluginSessionLifecycleCapability.js +87 -0
- package/dist/server/plugins/serverPluginSessionLifecycleCapability.js.map +1 -0
- package/dist/server/requestLogging.js +1 -1
- package/dist/server/requestLogging.js.map +1 -1
- package/dist/server/sessiond/agentHttpDispatcher.js +14 -7
- package/dist/server/sessiond/agentHttpDispatcher.js.map +1 -1
- package/dist/server/sessiond/autoInstallPiPackageSources.js +54 -0
- package/dist/server/sessiond/autoInstallPiPackageSources.js.map +1 -0
- package/dist/server/sessiond/autoInstallPiPackages.js +77 -30
- package/dist/server/sessiond/autoInstallPiPackages.js.map +1 -1
- package/dist/server/sessiond/pluginBackendChannelRoutes.js +3 -13
- package/dist/server/sessiond/pluginBackendChannelRoutes.js.map +1 -1
- package/dist/server/sessiond/pluginBackendResourceRoutes.js +62 -0
- package/dist/server/sessiond/pluginBackendResourceRoutes.js.map +1 -0
- package/dist/server/sessiond/pluginSessionLifecycleRoutes.js +45 -0
- package/dist/server/sessiond/pluginSessionLifecycleRoutes.js.map +1 -0
- package/dist/server/sessiond/sessionProxyRoutes.js +55 -11
- package/dist/server/sessiond/sessionProxyRoutes.js.map +1 -1
- package/dist/server/sessiond/sessionServiceDependencies.js +3 -0
- package/dist/server/sessiond/sessionServiceDependencies.js.map +1 -1
- package/dist/server/sessiond.js +46 -15
- package/dist/server/sessiond.js.map +1 -1
- package/dist/server/sessions/askUserDomain.js +24 -2
- package/dist/server/sessions/askUserDomain.js.map +1 -1
- package/dist/server/sessions/askUserTool.js +1 -1
- package/dist/server/sessions/askUserTool.js.map +1 -1
- package/dist/server/sessions/dockerEnvironmentFacts.js +10 -9
- package/dist/server/sessions/dockerEnvironmentFacts.js.map +1 -1
- package/dist/server/sessions/mcpOAuthCredentialAdapter.js +4 -4
- package/dist/server/sessions/mcpOAuthCredentialAdapter.js.map +1 -1
- package/dist/server/sessions/piSessionService.js +490 -257
- package/dist/server/sessions/piSessionService.js.map +1 -1
- package/dist/server/sessions/requestHumanInterventionTool.js +27 -0
- package/dist/server/sessions/requestHumanInterventionTool.js.map +1 -0
- package/dist/server/sessions/sendSessionMessageTool.js +32 -0
- package/dist/server/sessions/sendSessionMessageTool.js.map +1 -0
- package/dist/server/sessions/sessionActivityCoordinator.js.map +1 -1
- package/dist/server/sessions/sessionCleanup.js +18 -1
- package/dist/server/sessions/sessionCleanup.js.map +1 -1
- package/dist/server/sessions/sessionCommandService.js +58 -52
- package/dist/server/sessions/sessionCommandService.js.map +1 -1
- package/dist/server/sessions/sessionContentSearch.js +103 -30
- package/dist/server/sessions/sessionContentSearch.js.map +1 -1
- package/dist/server/sessions/sessionIntervention.js +29 -0
- package/dist/server/sessions/sessionIntervention.js.map +1 -0
- package/dist/server/sessions/sessionNameGenerator.js +0 -60
- package/dist/server/sessions/sessionNameGenerator.js.map +1 -1
- package/dist/server/sessions/sessionNotificationStore.js +2 -1
- package/dist/server/sessions/sessionNotificationStore.js.map +1 -1
- package/dist/server/sessions/sessionRoutes.js +25 -1
- package/dist/server/sessions/sessionRoutes.js.map +1 -1
- package/dist/server/sessions/sessionSummaryScanner.js +8 -0
- package/dist/server/sessions/sessionSummaryScanner.js.map +1 -1
- package/dist/server/sessions/sessionTreeProjection.js +108 -97
- package/dist/server/sessions/sessionTreeProjection.js.map +1 -1
- package/dist/server/sessions/sessionUiEvents.js +2 -0
- package/dist/server/sessions/sessionUiEvents.js.map +1 -1
- package/dist/server/sessions/sessionUnreadStore.js +11 -1
- package/dist/server/sessions/sessionUnreadStore.js.map +1 -1
- package/dist/server/sessions/spawnSubsessionTool.js +66 -15
- package/dist/server/sessions/spawnSubsessionTool.js.map +1 -1
- package/dist/server/sessions/subsessionCompletionDelivery.js +6 -3
- package/dist/server/sessions/subsessionCompletionDelivery.js.map +1 -1
- package/dist/server/sessions/subsessionCompletionInbox.js +6 -9
- package/dist/server/sessions/subsessionCompletionInbox.js.map +1 -1
- package/dist/server/status/machineStatusService.js +15 -3
- package/dist/server/status/machineStatusService.js.map +1 -1
- package/dist/server/storage/navigationPreferenceStore.js +11 -0
- package/dist/server/storage/navigationPreferenceStore.js.map +1 -1
- package/dist/server/storage/sessionPinStore.js +95 -0
- package/dist/server/storage/sessionPinStore.js.map +1 -0
- package/dist/server/terminals/maintenanceExecutionContext.js +18 -0
- package/dist/server/terminals/maintenanceExecutionContext.js.map +1 -0
- package/dist/server/terminals/maintenanceTerminalCapability.js +25 -0
- package/dist/server/terminals/maintenanceTerminalCapability.js.map +1 -0
- package/dist/server/terminals/requiredTerminalService.js.map +1 -1
- package/dist/server/terminals/terminalStatusRoutes.js +22 -0
- package/dist/server/terminals/terminalStatusRoutes.js.map +1 -0
- package/dist/server/themeBootstrap.js +123 -0
- package/dist/server/themeBootstrap.js.map +1 -0
- package/dist/server/themeCatalog.js +206 -0
- package/dist/server/themeCatalog.js.map +1 -0
- package/dist/server/themeMetadata.js +74 -0
- package/dist/server/themeMetadata.js.map +1 -0
- package/dist/server/webSocketBridge.js +16 -12
- package/dist/server/webSocketBridge.js.map +1 -1
- package/dist/server/webSocketPayloadLimit.js +17 -0
- package/dist/server/webSocketPayloadLimit.js.map +1 -0
- package/dist/server/workspaces/effectivePathAccess.js +1 -1
- package/dist/server/workspaces/effectivePathAccess.js.map +1 -1
- package/dist/server/workspaces/projectPiWebConfig.js +30 -7
- package/dist/server/workspaces/projectPiWebConfig.js.map +1 -1
- package/dist/server/workspaces/sessionDaemonWorkspaceCatalog.js +2 -0
- package/dist/server/workspaces/sessionDaemonWorkspaceCatalog.js.map +1 -1
- package/dist/server/workspaces/workspaceProviderRegistry.js +6 -2
- package/dist/server/workspaces/workspaceProviderRegistry.js.map +1 -1
- package/dist/server/workspaces/workspaceRemovalService.js +6 -4
- package/dist/server/workspaces/workspaceRemovalService.js.map +1 -1
- package/dist/server-plugin-api.d.ts +39 -1
- package/dist/server-plugin-api.js +18 -3
- package/dist/server-plugin-api.js.map +1 -1
- package/dist/sessiond/sessionDaemonClient.js +7 -1
- package/dist/sessiond/sessionDaemonClient.js.map +1 -1
- package/dist/sessiond/sessionDaemonTerminalStatus.js +27 -0
- package/dist/sessiond/sessionDaemonTerminalStatus.js.map +1 -0
- package/dist/shared/apiTypes.js +4 -0
- package/dist/shared/apiTypes.js.map +1 -1
- package/dist/shared/capabilities.js +6 -0
- package/dist/shared/capabilities.js.map +1 -1
- package/dist/shared/commandOutputPresentation.js +17 -0
- package/dist/shared/commandOutputPresentation.js.map +1 -0
- package/dist/shared/commandResultPresentation.js +51 -0
- package/dist/shared/commandResultPresentation.js.map +1 -0
- package/dist/shared/configResolution.js +99 -0
- package/dist/shared/configResolution.js.map +1 -0
- package/dist/shared/defaultLocalization.js +60 -0
- package/dist/shared/defaultLocalization.js.map +1 -0
- package/dist/shared/federatedRoutes.js +11 -1
- package/dist/shared/federatedRoutes.js.map +1 -1
- package/dist/shared/installationName.js +21 -0
- package/dist/shared/installationName.js.map +1 -0
- package/dist/shared/localization.d.ts +55 -0
- package/dist/shared/localization.js +4 -0
- package/dist/shared/machineStatus.js +2 -0
- package/dist/shared/machineStatus.js.map +1 -1
- package/dist/shared/piWebConfigParsing.js +16 -30
- package/dist/shared/piWebConfigParsing.js.map +1 -1
- package/dist/shared/piWebRuntime.js +17 -0
- package/dist/shared/piWebRuntime.js.map +1 -0
- package/dist/shared/piWebStatusParsing.js +5 -0
- package/dist/shared/piWebStatusParsing.js.map +1 -1
- package/dist/shared/pluginApiTypes.d.ts +35 -7
- package/dist/shared/pluginBackendProtocol.js +24 -0
- package/dist/shared/pluginBackendProtocol.js.map +1 -1
- package/dist/shared/pluginCatalogTypes.d.ts +8 -0
- package/dist/shared/pluginCatalogTypes.js +15 -0
- package/dist/shared/pluginCatalogTypes.js.map +1 -1
- package/dist/shared/pluginResourceMetadata.js +58 -0
- package/dist/shared/pluginResourceMetadata.js.map +1 -0
- package/dist/shared/pluginSessionLifecycleTypes.d.ts +24 -0
- package/dist/shared/pluginSessionLifecycleTypes.js +56 -0
- package/dist/shared/pluginSessionLifecycleTypes.js.map +1 -0
- package/dist/shared/serverNoticePresentation.d.ts +9 -0
- package/dist/shared/serverNoticePresentation.js +12 -0
- package/dist/shared/serverNoticePresentation.js.map +1 -0
- package/dist/shared/sessionActivityPresentation.js +73 -0
- package/dist/shared/sessionActivityPresentation.js.map +1 -0
- package/dist/shared/sessionNotificationPresentation.js +16 -0
- package/dist/shared/sessionNotificationPresentation.js.map +1 -0
- package/dist/shared/terminalCommandRun.js +4 -0
- package/dist/shared/terminalCommandRun.js.map +1 -1
- package/dist/shared/terminalServiceStatus.js +14 -0
- package/dist/shared/terminalServiceStatus.js.map +1 -0
- package/dist/shared/terminalTitlePresentation.d.ts +10 -0
- package/dist/shared/terminalTitlePresentation.js +13 -0
- package/dist/shared/terminalTitlePresentation.js.map +1 -0
- package/dist/shared/themeCatalog.js +2 -0
- package/dist/shared/themeCatalog.js.map +1 -0
- package/dist/shared/themePreference.js +1 -0
- package/dist/shared/themePreference.js.map +1 -1
- package/dist/shared/thinkingLevels.d.ts +29 -0
- package/dist/shared/thinkingLevels.js +6 -4
- package/dist/shared/thinkingLevels.js.map +1 -1
- package/dist/shared/versionCheckPolicy.js +10 -0
- package/dist/shared/versionCheckPolicy.js.map +1 -0
- package/dist/shared/workspaceRemovalPresentation.d.ts +8 -0
- package/dist/shared/workspaceRemovalPresentation.js +10 -0
- package/dist/shared/workspaceRemovalPresentation.js.map +1 -0
- package/docs/README.md +7 -3
- package/docs/assets/pi-web-desktop-graphite.png +0 -0
- package/docs/assets/pi-web-desktop-paper.png +0 -0
- package/docs/assets/pi-web-desktop-pi-web-dark.png +0 -0
- package/docs/assets/pi-web-desktop-pi-web-light.png +0 -0
- package/docs/assets/pi-web-desktop.png +0 -0
- package/docs/assets/pi-web-mobile-graphite.png +0 -0
- package/docs/assets/pi-web-mobile-paper.png +0 -0
- package/docs/assets/pi-web-mobile-pi-web-dark.png +0 -0
- package/docs/assets/pi-web-mobile-pi-web-light.png +0 -0
- package/docs/assets/pi-web-mobile-themes.gif +0 -0
- package/docs/assets/pi-web-mobile.png +0 -0
- package/docs/assets/pi-web-tablet-graphite.png +0 -0
- package/docs/assets/pi-web-tablet-paper.png +0 -0
- package/docs/assets/pi-web-tablet-pi-web-dark.png +0 -0
- package/docs/assets/pi-web-tablet-pi-web-light.png +0 -0
- package/docs/assets/pi-web-tablet-themes.gif +0 -0
- package/docs/assets/pi-web-tablet.png +0 -0
- package/docs/assets/pi-web-themes.gif +0 -0
- package/docs/config.md +193 -55
- package/docs/plugins.md +350 -21
- package/docs/scheduled-tasks.md +127 -0
- package/package.json +43 -19
- package/dist/client/assets/CommandPicker-8oDe6AaV.js +0 -70
- package/dist/client/assets/PiWebApp-TCQVYghs.js +0 -3761
- package/dist/client/assets/SettingsDialog-DFUpwUyp.js +0 -1015
- package/dist/client/assets/index-DzMPXVth.js +0 -2
- package/dist/client/assets/managementEmbed-Bx8Mwzdw.js +0 -2
- package/dist/client/assets/preload-helper-XpATwJ5c.js +0 -1
- package/dist/pi-packages/captains-log/README.md +0 -11
- package/dist/pi-packages/captains-log/dist/browser/channelProtocol.js +0 -29
- package/dist/pi-packages/captains-log/dist/browser/index.js +0 -143
- package/dist/pi-packages/captains-log/dist/browser/markdown.js +0 -68
- package/dist/pi-packages/captains-log/dist/browser/panel.js +0 -148
- package/dist/pi-packages/captains-log/dist/browser/protocol.js +0 -26
- package/dist/pi-packages/captains-log/dist/companion.js +0 -126
- package/dist/pi-packages/captains-log/dist/roundtrip.js +0 -62
- package/dist/pi-packages/captains-log/dist/server.js +0 -210
- package/dist/pi-packages/captains-log/dist/store.js +0 -75
- package/dist/pi-packages/captains-log/docs/usage.md +0 -29
- package/dist/pi-packages/captains-log/i18n.js +0 -7
- package/dist/pi-packages/captains-log/package.json +0 -35
- package/dist/pi-packages/captains-log/tsconfig.json +0 -21
- package/dist/pi-packages/captains-log/vite.config.mjs +0 -28
- package/examples/session-bridge-plugin/README.md +0 -20
- package/examples/session-bridge-plugin/docs/usage.md +0 -54
- package/examples/session-bridge-plugin/package.json +0 -26
- package/examples/session-bridge-plugin/src/browser/index.ts +0 -87
- package/examples/session-bridge-plugin/src/browser/protocol.ts +0 -24
- package/examples/session-bridge-plugin/src/companion.ts +0 -65
- package/examples/session-bridge-plugin/src/reviewRun.ts +0 -39
- package/examples/session-bridge-plugin/src/server.ts +0 -85
- package/examples/session-bridge-plugin/src/store.ts +0 -80
- package/examples/session-bridge-plugin/tsconfig.json +0 -21
- /package/dist/{client/assets/classic-CyM97Akm.css → pi-web-plugins/themes/assets/classic.css} +0 -0
- /package/dist/{client/assets/pi-web-dark-D_KtbM95.css → pi-web-plugins/themes/assets/pi-web-dark.css} +0 -0
- /package/dist/{client/assets/pi-web-light-DSNLMIBI.css → pi-web-plugins/themes/assets/pi-web-light.css} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 420 419"><metadata>Material Icon Theme 5.40.0. Copyright (c) 2025 Material Extensions. MIT. Source collections: Google Material Symbols / Pictogrammers (Apache-2.0; third-party exceptions). Full notices and licenses embedded in the bundled file.svg. Modified only to add this metadata.</metadata><circle cx="210" cy="209.5" r="188.15" fill="#fafafa" paint-order="stroke fill markers"/><path fill="#304ffe" d="M191.07 397.1c-35.512-4.049-66.779-16.485-95.318-37.913-22.723-17.061-44.027-43.274-56.077-68.997l-3.932-8.393 25.692-26.37c14.13-14.505 27.522-28.059 29.758-30.12l4.067-3.748 12.5 11.364c16.495 14.996 26.818 23.219 41.05 32.697 14.94 9.95 23.867 14.578 35.877 18.597 22.823 7.637 42.099 5.991 66.082-5.642 17.83-8.65 44.399-28.24 66.179-48.797l8.878-8.38 29.147 29.137c16.03 16.025 29.147 29.84 29.147 30.7s-1.6 4.912-3.554 9.005c-18.398 38.533-49.46 69.834-87.797 88.466-17.732 8.619-33.936 13.787-53.563 17.084-10.16 1.708-38.005 2.465-48.137 1.31zm6.3-123.69c-17.457-3.809-39.276-16.397-63.835-36.829-13.001-10.816-26.615-23.771-26.615-25.327 0-1.265 16.792-17.101 29.7-28.009 20.328-17.179 36.936-27.484 53.753-33.355 6.275-2.19 8.25-2.443 19.147-2.443 10.892 0 12.873.253 19.136 2.44 22.614 7.894 50.68 27.157 79.189 54.35 3.836 3.659 6.975 7.021 6.975 7.472 0 1.1-21.726 20.758-32.4 29.316-19.403 15.557-41.794 28.276-56.169 31.907-8.267 2.088-20.566 2.29-28.881.477zm37.472-20.429c14.201-7.184 18.451-9.747 19.779-11.925 1.556-2.552 1.692-4.934 1.692-29.774 0-24.91-.132-27.216-1.705-29.795-1.34-2.2-5.607-4.783-20.022-12.124-18.175-9.256-18.368-9.329-24.812-9.355-6.44-.026-6.632.044-22.95 8.376-10.12 5.168-17.582 9.58-19.38 11.462l-2.925 3.06.003 27.237c.003 25.164.134 27.452 1.712 30.04 1.301 2.134 5.186 4.602 16.288 10.35 20.15 10.433 22.925 11.538 29.04 11.571 4.82.026 6.487-.627 23.28-9.123m-40.872-12.388c-7.315-3.808-13.914-7.538-14.665-8.29-1.181-1.181-1.28-4.249-.736-22.667l.63-21.3 13.888-7.202c8.096-4.199 14.986-7.202 16.52-7.202 2.953 0 28.618 12.505 31.424 15.311 1.68 1.682 1.788 3.033 1.788 22.477v20.69l-3.46 2.183c-1.902 1.202-8.376 4.65-14.386 7.662-8.03 4.025-11.825 5.448-14.315 5.37-2.329-.075-7.546-2.273-16.688-7.032M29.5 263.432c-1.475-3.866-4.192-15.727-5.967-26.05-2.405-13.986-2.19-43.337.424-58.05 2.41-13.562 4.216-20.627 5.613-21.959.772-.736 7.977 6.088 27.938 26.459 14.794 15.098 26.902 27.655 26.906 27.906s-12.122 12.581-26.948 27.4L30.51 266.082zm333.59-24.851c-14.17-14.479-25.763-26.679-25.763-27.11 0-1.574 51.776-53.76 53.1-53.521 1.493.27 3.338 6.773 5.975 21.06 2.353 12.751 2.343 48.232-.017 61.072-2.37 12.886-5.358 24.1-6.527 24.49-.553.184-12.599-11.512-26.768-25.991M64.75 170.903c-26.893-26.902-29.95-30.252-29.354-32.175 1.335-4.308 8.33-18.529 12.565-25.546 28.808-47.732 75.832-79.809 131.42-89.647 15.231-2.696 45.201-2.944 59.361-.492 41.827 7.244 76.236 24.833 104.91 53.625 15.582 15.647 27.713 32.758 36.971 52.151 6.183 12.95 8.732 8.549-24.429 42.185-15.984 16.213-29.386 29.61-29.782 29.768-.396.16-5.695-4.244-11.775-9.786-32.548-29.67-61.86-48.734-85.116-55.361-7.771-2.215-9.327-2.357-22.05-2.009-12.468.34-14.427.627-21.965 3.212-23.775 8.152-49.675 26.108-80.457 55.78-4.75 4.579-9.006 8.325-9.457 8.325s-14.329-13.513-30.839-30.029z"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><metadata>Material Icon Theme 5.40.0. Copyright (c) 2025 Material Extensions. MIT. Source collections: Google Material Symbols / Pictogrammers (Apache-2.0; third-party exceptions). Full notices and licenses embedded in the bundled file.svg. Modified only to add this metadata.</metadata><path fill="#7c4dff" d="M22 18h4v4h-4z"/><path fill="#7c4dff" d="M20 2a4 4 0 0 1-8 0H2v28h28V2Zm-2 24h-2v2h-4v-2h-2v2H6v-2H4V16h2v10h4V16h2v10h4V16h2Zm10 2h-2v-4h-4v4h-2V18h2v-2h4v2h2Z"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 120 120"><metadata>Material Icon Theme 5.40.0. Copyright (c) 2025 Material Extensions. MIT. Source collections: Google Material Symbols / Pictogrammers (Apache-2.0; third-party exceptions). Full notices and licenses embedded in the bundled file.svg. Modified only to add this metadata.</metadata><path fill="#1e88e5" d="M115.45 23.033S97.961 33.27 97.534 33.412c-.427.284-.852.57-1.137.854-1.422 1.421-1.848 3.41-1.422 5.26.285.852.711 1.849 1.422 2.56.711.71 1.564 1.137 2.559 1.422 1.848.426 3.84 0 5.262-1.422q.638-.64.851-1.28l.143-.427 2.56-4.692zm-39.102 9.242c-27.441 0-31.99 13.08-31.99 29.29 0 3.838.569 7.962-1.99 11.942-3.84 5.972-8.957 5.828-10.236 5.828-1.706 0-7.962-.993-8.246-2.841h.994c6.682 0 11.658-5.404 11.658-12.655v-2.56h-5.686c-4.123 0-7.82 1.849-10.238 5.12-2.417-3.271-6.113-5.12-10.236-5.12h-5.83v2.56c0 7.11 5.688 12.795 12.797 12.795h1.848c0 4.124 5.687 20.332 47.63 20.332 16.352 0 40.665-2.843 40.665-33.697 0-5.829-1.848-11.23-4.691-15.78-.996.284-1.992.568-3.13.568a8.92 8.92 0 0 1-8.956-8.957q0-1.493.425-2.986c-4.265-2.702-8.53-3.838-14.787-3.838z"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><metadata>Material Icon Theme 5.40.0. Copyright (c) 2025 Material Extensions. MIT. Source collections: Google Material Symbols / Pictogrammers (Apache-2.0; third-party exceptions). Full notices and licenses embedded in the bundled file.svg. Modified only to add this metadata.</metadata><path fill="#fafafa" fill-opacity=".785" d="m19.376 15.988-7.708 4.45-7.709-4.45v-8.9l7.709-4.451 7.708 4.45z"/><path fill="#90caf9" d="M12.286 1.98c-.21 0-.41.059-.57.179l-7.9 4.44c-.32.17-.53.5-.53.88v9c0 .38.21.711.53.881l7.9 4.44c.16.12.36.18.57.18s.41-.06.57-.18l7.9-4.44c.32-.17.53-.5.53-.88v-9c0-.38-.21-.712-.53-.882l-7.9-4.44a.95.95 0 0 0-.57-.179zm0 2.15 7 3.94v2.103h-.016v5.177h.016v.54l-7 3.939-7-3.94V8.07zm0 2.08-4.9 2.83 4.9 2.83 4.9-2.83zm-5 5.08v3.58l4 2.309v-3.58l-4-2.31zm10 0-4 2.308v3.58l4-2.308z"/><path fill="#0277bd" d="m12.286 6.21-4.9 2.83 4.9 2.83 4.9-2.83zm-5 5.08v3.58l4 2.309v-3.58l-4-2.31zm10 0-4 2.308v3.58l4-2.308z"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><metadata>Material Icon Theme 5.40.0. Copyright (c) 2025 Material Extensions. MIT. Source collections: Google Material Symbols / Pictogrammers (Apache-2.0; third-party exceptions). Full notices and licenses embedded in the bundled file.svg. Modified only to add this metadata.</metadata><path fill="#4caf50" d="M16 2A14 14 0 0 0 2 16v12a2 2 0 0 0 2 2h12a14 14 0 0 0 0-28m0 24a10 10 0 1 1 10-10 10.01 10.01 0 0 1-10 10"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 111"><metadata>Material Icon Theme 5.40.0. Copyright (c) 2025 Material Extensions. MIT. Source collections: Google Material Symbols / Pictogrammers (Apache-2.0; third-party exceptions). Full notices and licenses embedded in the bundled file.svg. Modified only to add this metadata.</metadata><path fill="#1e88e5" d="m74.849 59.509 3.307 9.697 5.768-9.697zm-.601-20.967v17.932h9.788zm-3.095 10.125V34.182h-4.938zm-10.77-31.582 4.795 14.06h5.032l-8.166-14.959-1.236.668-.425.228zm-6.74 78.095h7.34l-2.77-5.008-.917.976a71.108 69.794 0 0 1-3.653 4.031zm-3.594-4.567.125-29.212a48.51 47.615 0 0 0-3.263 2.064c.125 3.608.715 15.891 3.137 27.147zm-8.374-23.137c.112 2.31.811 10.604 5.165 19.634-1.57-8.843-2.14-17.601-2.34-21.906a62.074 60.926 0 0 0-2.825 2.272m-2.68 27.704h7.64l-.584-.672a69.587 68.302 0 0 1-4.088-4.69l-2.967 5.36zm-2.442-22.688c.275 1.63 2.424 7.773 7.763 15.086-3.516-7.485-4.631-14.336-4.98-17.987a46.725 45.861 0 0 0-2.784 2.901zm3.86-15.062v6.948a46.951 46.083 0 0 1 3.884-2.96c3.425-2.488 4.818-3 5.698-3.055h-.006v-.933zm-24.358 2.08 6.167 10.364 4.244-10.364zm11.154-16.456L16.532 56.473h10.677zm3.097-3.889v10.974l7.509-18.34-1.004-.812-6.507 8.178zM80.198 71.8h6.218l1.548 1.52v23.377l-1.548 1.522H13.563L12.016 96.7V73.32l1.547-1.52h6.22l-7.76-13.04.115-1.701 23.21-29.167 2.11-.229.038-.052 10.428 7.677-1.857 2.431-5.638-4.153L24.199 73.2l12.145 20.407 3.595-6.496c-6.09-8.683-6.534-14.664-6.556-15l.363-1.07a62.861 61.699 0 0 1 3.57-3.827v-11.3l1.55-1.519h22.247l1.548 1.52V66.86a62.175 61.026 0 0 1 3.932 4.182l.361 1.067c-.019.343-.473 6.45-6.756 15.288l3.438 6.21 12.444-20.91-18.45-54.12-5.06 2.74-1.493-2.66 10.841-5.872 2.113.614 23.954 43.878"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 32 32"><metadata>Material Icon Theme 5.40.0. Copyright (c) 2025 Material Extensions. MIT. Source collections: Google Material Symbols / Pictogrammers (Apache-2.0; third-party exceptions). Full notices and licenses embedded in the bundled file.svg. Modified only to add this metadata.</metadata><path stroke="#42a5f5" stroke-miterlimit="3.339" stroke-width="4" d="M22 12a4 4 0 1 1 4 4H2m14 10a4 4 0 1 0 4-4H10M8 6a4 4 0 1 1 4 4H2"/><path fill="#42a5f5" d="M2 20h4v4H2z"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><metadata>Material Icon Theme 5.40.0. Copyright (c) 2025 Material Extensions. MIT. Source collections: Google Material Symbols / Pictogrammers (Apache-2.0; third-party exceptions). Full notices and licenses embedded in the bundled file.svg. Modified only to add this metadata.</metadata><g transform="translate(-.009 -.001)scale(.12121)"><circle cx="99.197" cy="98.946" r="83.28" fill="#212121"/><path fill="#e53935" d="M182.53 98.828a83.4 83.4 0 0 1-39.14 70.722.06.06 0 0 1-.037.019l-28.62-35.664 23.71 2.611s11.385 1.178 13.979 0c2.373-.938 15.174-18.963 15.174-18.963s-36.75-23.23-49.312-36.032c1.435-21.575-1.655-50.269-1.655-50.03-9.252 9.234-10.43 10.668-19.681 19.202-4.028-13.04-5.923-17.546-9.95-30.587-12.104 9.95-21.337 26.799-27.977 46.48a79 79 0 0 0-4.23 5.095 110 110 0 0 0-2.668 3.66 115 115 0 0 0-5.131 8 173 173 0 0 0-3.403 6.052c-7.707 14.476-14.034 31.067-19.515 46.002a1 1 0 0 1-.092-.184C8.993 104.299 14.48 67.36 37.804 42.138c23.325-25.223 59.722-33.574 91.71-21.045 31.988 12.53 53.029 43.382 53.017 77.736z"/><path fill="#fafafa" d="M101.45 69.178s-1.416-8.295-2.373-11.367c6.401-6.18 7.357-7.118 13.52-13.041.477 11.845.238 18.007-.479 32.482-3.55-3.568-10.668-8.075-10.668-8.075zm-27.737 40.778s-6.64-4.028-11.624-4.727c1.435-3.33 5.224-7.597 6.18-8.774-1.913.7-15.652 6.861-17.087 12.084a75 75 0 0 1 11.385 3.79 36 36 0 0 0-8.773 20.158s21.814-3.329 38.184-1.195c.283.168.608.25.938.239l8.534.239 27.11 45.137.222.35c-.037.018-.056.036-.074.036-51.133 18.485-88.085-15.542-95.975-27.442q.05-.153.074-.312c7.1-30.018 15.855-65.94 29.999-76.552 7.357-12.82 9.49-31.783 22.752-41.734 3.329 9.95 8.553 30.588 12.103 40.538 15.653 15.653 39.36 35.094 55.234 43.15 1.655.956 3.789 7.596 3.789 7.596l-6.401 8.056-68.275-6.879a55 55 0 0 0-4.58-.184 87 87 0 0 0-14.144 1.361c3.31-8.295 10.429-14.935 10.429-14.935m22.053-8.774c3.789-.46 7.817.957 12.323 3.569 4.267-1.196 4.745-1.435 9.013-2.612-5.463-4.028-11.385-8.295-19.442-7.118a47 47 0 0 0-1.895 6.161z"/></g></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><metadata>Material Icon Theme 5.40.0. Copyright (c) 2025 Material Extensions. MIT. Source collections: Google Material Symbols / Pictogrammers (Apache-2.0; third-party exceptions). Full notices and licenses embedded in the bundled file.svg. Modified only to add this metadata.</metadata><path fill="#01579b" d="M6 2h8l6 6v12a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2m7 1.5V9h5.5zM7 13l1.5 7h2l1.5-3 1.5 3h2l1.5-7h1v-2h-4v2h1l-.9 4.2L13 15h-2l-1.1 2.2L9 13h1v-2H6v2z"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><metadata>Material Icon Theme 5.40.0. Copyright (c) 2025 Material Extensions. MIT. Source collections: Google Material Symbols / Pictogrammers (Apache-2.0; third-party exceptions). Full notices and licenses embedded in the bundled file.svg. Modified only to add this metadata.</metadata><path fill="#f57f17" d="M22 20H10.5a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5H22v-6.449A5.95 5.95 0 0 0 18 10h-2a5.98 5.98 0 0 0-4.463 2H10a4 4 0 0 0-4 4 4 4 0 0 0-4 4v1.5a.5.5 0 0 0 .5.5H22Z"/><path fill="#ffab40" d="M24 14v4h1.5a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5H24v2h5.5a.5.5 0 0 0 .5-.5V20a6 6 0 0 0-6-6"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><metadata>Material Icon Theme 5.40.0. Copyright (c) 2025 Material Extensions. MIT. Source collections: Google Material Symbols / Pictogrammers (Apache-2.0; third-party exceptions). Full notices and licenses embedded in the bundled file.svg. Modified only to add this metadata.</metadata><path fill="#00c853" d="M14 8.9c.117 1.136-.854 2.043-2 2.1v2c0 .663-.337 1-1 1H8v-1c0-1.52-2-1.34-2 0v1H3c-.663 0-1-.337-1-1v-3h1s1-.1 1-1-1-1-1-1H2V5c0-.663.337-1 1-1h2c.025-1.06.885-1.995 2-2 1.123-.005 1.996.93 2 2h2c.663 0 1 .337 1 1v2c1.082.067 2.117.798 2 2m-3 1h1c.497 0 1-.503 1-1s-.503-1-1-1h-1V5H8V4c0-.497-.503-1-1-1s-1 .503-1 1v1H3v2c1.148.341 1.98.744 2 2 .02 1.226-.707 1.666-2 2v2h2c.156-1.452 1.055-1.948 2-2 1-.056 2.098.695 2 2h2z"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><metadata>Material Icon Theme 5.40.0. Copyright (c) 2025 Material Extensions. MIT. Source collections: Google Material Symbols / Pictogrammers (Apache-2.0; third-party exceptions). Full notices and licenses embedded in the bundled file.svg. Modified only to add this metadata.</metadata><path fill="#42a5f5" d="m32 16-5.387 9.333L24.307 24l4.613-8-4.613-8 2.306-1.333z"/><path fill="#42a5f5" d="m25.24 16-4.627 8h-9.226L6.76 16l4.627-8h9.226z"/><path fill="#42a5f5" d="m0 16 5.387-9.333L7.693 8 3.08 16l4.613 8-2.306 1.333z"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><metadata>Material Icon Theme 5.40.0. Copyright (c) 2025 Material Extensions. MIT. Source collections: Google Material Symbols / Pictogrammers (Apache-2.0; third-party exceptions). Full notices and licenses embedded in the bundled file.svg. Modified only to add this metadata.</metadata><circle cx="8" cy="8" r="7" fill="#e0f2f1"/><path fill="#e0f2f1" d="M11.759 2.944a6.3 6.3 0 0 0-8.932 1.462l3.281 2.023z"/><path fill="#8bc34a" d="M1.796 9.088 6.107 6.43l-3.28-2.025A6.27 6.27 0 0 0 1.7 8a6.4 6.4 0 0 0 .096 1.088"/><path fill="#4db6ac" d="M13.536 11.01a6.3 6.3 0 0 0-1.777-8.066l-5.65 3.485z"/><path fill="#009688" d="M1.796 9.088a6.3 6.3 0 0 0 11.74 1.922L6.108 6.428z"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><metadata>Material Icon Theme 5.40.0. Copyright (c) 2025 Material Extensions. MIT. Source collections: Google Material Symbols / Pictogrammers (Apache-2.0; third-party exceptions). Full notices and licenses embedded in the bundled file.svg. Modified only to add this metadata.</metadata><path fill="#8bc34a" d="M13 9h5.5L13 3.5zM6 2h8l6 6v12a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4c0-1.11.89-2 2-2m.12 13.5 3.74 3.74 1.42-1.41-2.33-2.33 2.33-2.33-1.42-1.41zm11.16 0-3.74-3.74-1.42 1.41 2.33 2.33-2.33 2.33 1.42 1.41z"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><metadata>Material Icon Theme 5.40.0. Copyright (c) 2025 Material Extensions. MIT. Source collections: Google Material Symbols / Pictogrammers (Apache-2.0; third-party exceptions). Full notices and licenses embedded in the bundled file.svg. Modified only to add this metadata.</metadata><path fill="#ff5252" d="M13 9h5.5L13 3.5zM6 2h8l6 6v12c0 1.1-.9 2-2 2H6c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2m12 16v-2H9v2zm-4-4v-2H6v2z"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><metadata>Material Icon Theme 5.40.0. Copyright (c) 2025 Material Extensions. MIT. Source collections: Google Material Symbols / Pictogrammers (Apache-2.0; third-party exceptions). Full notices and licenses embedded in the bundled file.svg. Modified only to add this metadata.</metadata><path fill="#42a5f5" d="M12 2a10 10 0 0 1 10 10 10 10 0 0 1-10 10A10 10 0 0 1 2 12 10 10 0 0 1 12 2m0 2a8 8 0 0 0-8 8 8 8 0 0 0 8 8 4 4 0 0 1-4-4 4 4 0 0 1 4-4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 2.5A1.5 1.5 0 0 1 13.5 8 1.5 1.5 0 0 1 12 9.5 1.5 1.5 0 0 1 10.5 8 1.5 1.5 0 0 1 12 6.5m0 8a1.5 1.5 0 0 0-1.5 1.5 1.5 1.5 0 0 0 1.5 1.5 1.5 1.5 0 0 0 1.5-1.5 1.5 1.5 0 0 0-1.5-1.5"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><metadata>Material Icon Theme 5.40.0. Copyright (c) 2025 Material Extensions. MIT. Source collections: Google Material Symbols / Pictogrammers (Apache-2.0; third-party exceptions). Full notices and licenses embedded in the bundled file.svg. Modified only to add this metadata.</metadata><path fill="#0288d1" d="M27.575 23.967a9.9 9.9 0 0 0-3.751 1.726 22.6 22.6 0 0 1-5.537 2.504 1.55 1.55 0 0 1-.931.52 59 59 0 0 1-6.11.548c-1.102.008-1.777-.282-1.965-.735a1.49 1.49 0 0 1 .82-1.965 3.6 3.6 0 0 1-.486-.359c-.163-.162-.334-.487-.385-.367-.213.52-.324 1.794-.897 2.366-.786.795-2.273.53-3.153.069-.965-.513.069-1.718.069-1.718a.69.69 0 0 1-.94-.324 4.6 4.6 0 0 1-.632-2.794 5.2 5.2 0 0 1 1.674-2.76 8.84 8.84 0 0 1 .624-4.17 9.9 9.9 0 0 1 3-3.469S7.136 11.015 7.82 9.177c.444-1.196.623-1.187.769-1.239a3.44 3.44 0 0 0 1.375-.811 4.99 4.99 0 0 1 4.178-1.607s1.094-3.357 2.12-2.7a17.4 17.4 0 0 1 1.452 2.735s1.213-.71 1.35-.445a10.74 10.74 0 0 1 .495 5.81 13.3 13.3 0 0 1-2.46 5.127c-.129.214 1.47.889 2.477 3.683.932 2.554.103 4.699.248 4.938.026.043.034.06.034.06s1.068.085 3.213-1.24a8.05 8.05 0 0 1 4.05-1.52 1.026 1.026 0 0 1 .453 2Z"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><metadata>Material Icon Theme 5.40.0. Copyright (c) 2025 Material Extensions. MIT. Source collections: Google Material Symbols / Pictogrammers (Apache-2.0; third-party exceptions). Full notices and licenses embedded in the bundled file.svg. Modified only to add this metadata.</metadata><path fill="#cfd8dc" d="m14 20 4 4-4 4H2v-8h8l10-8-6-4 6-4h10v8Z"/><path fill="#651fff" d="M20 4H2v8h18Z"/><path fill="#ff3d00" d="M30 20H14v8h16Z"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><metadata>Material Icon Theme 5.40.0. Copyright (c) 2025 Material Extensions. MIT. Source collections: Google Material Symbols / Pictogrammers (Apache-2.0; third-party exceptions). Full notices and licenses embedded in the bundled file.svg. Modified only to add this metadata.</metadata><path fill="#f9a825" d="M2 8h6v4H2zm8 0h12v4H10zm0 12h12v4H10zm14 0h2v4h-2zM8 20l-3 4H2V12h4v8zm14-8h-6l-6 8h6z"/><path fill="#f9a825" d="M16 20h-6l-6 8m12-16h6l6-8m2 4v16h-4V12h-2l3-4z"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><metadata>Material Icon Theme 5.40.0. Copyright (c) 2025 Material Extensions. MIT. Source collections: Google Material Symbols / Pictogrammers (Apache-2.0; third-party exceptions). Full notices and licenses embedded in the bundled file.svg. Modified only to add this metadata.</metadata><path fill="#afb42b" d="M14 17h-2v-2h-2v-2h2v2h2m0-6h-2v2h2v2h-2v-2h-2V9h2V7h-2V5h2v2h2m5-4H5c-1.11 0-2 .89-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V5a2 2 0 0 0-2-2"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><metadata>Material Icon Theme 5.40.0. Copyright (c) 2025 Material Extensions. MIT. Source collections: Google Material Symbols / Pictogrammers (Apache-2.0; third-party exceptions). Full notices and licenses embedded in the bundled file.svg. Modified only to add this metadata.</metadata><path fill="#f44336" d="M30 4c0-1.105-.897-2.007-1.998-1.929A28.02 28.02 0 0 0 10.2 10.2a28.02 28.02 0 0 0-8.129 17.802C1.993 29.103 2.895 30 4 30c0 0 .61.018 1 0 2-8.5 2.64-11.99 7.32-16.68C17.01 8.63 23.5 6 30 5z"/><path fill="#ffab00" d="M30 8V5a25 25 0 0 0-17.68 7.32A25.04 25.04 0 0 0 5 30h3c1-4 3.32-10.43 7.44-14.56C19.56 11.32 23.5 9.5 30 8"/><path fill="#fff176" d="M30 8v3c-5 .5-8.88 3-12.44 6.56C14 21.13 12 25 11 30H8c0-5.83 2.32-11.43 6.44-15.56A22 22 0 0 1 30 8"/><path fill="#00c853" d="M19.69 19.69C16.69 22.69 15 26 14 30h-3c0-5.04 2-9.87 5.56-13.44C20.12 13 24.96 11 30 11v3c-4.5 1-7.31 2.69-10.31 5.69"/><path fill="#3d5afe" d="M30 17v-3c-4.24 0-8.31 1.69-11.31 4.69S14 25.76 14 30h3c0-3.45 1.37-6.76 3.81-9.19C23.25 18.37 26.56 17 30 17"/><path fill="#9575cd" d="M30 18c0 1.105-.904 1.98-1.987 2.198a10.01 10.01 0 0 0-7.815 7.815C19.979 29.095 19.105 30 18 30h-1c0-3.45 1.37-6.76 3.81-9.19C23.25 18.37 26.56 17 30 17z"/></svg>
|
package/dist/client/index.html
CHANGED
|
@@ -1,20 +1,26 @@
|
|
|
1
1
|
<!doctype html>
|
|
2
|
-
<html lang="en">
|
|
2
|
+
<html lang="en" data-pi-web-loading>
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="UTF-8" />
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover, interactive-widget=resizes-content" />
|
|
6
6
|
<title>PI WEB</title>
|
|
7
7
|
<meta name="description" content="Remote web UI and browser control plane for persistent Pi Coding Agent sessions." />
|
|
8
|
-
<
|
|
8
|
+
<script id="pi-web-theme-data" type="application/json"></script>
|
|
9
9
|
<link rel="icon" type="image/svg+xml" href="./favicon.svg" />
|
|
10
10
|
<link rel="apple-touch-icon" href="./apple-touch-icon.png" />
|
|
11
11
|
<link rel="manifest" crossorigin="use-credentials" href="./manifest.webmanifest" />
|
|
12
|
-
<style>:root{--lightningcss-light:
|
|
13
|
-
<script type="module" crossorigin src="./assets/index-
|
|
14
|
-
<link rel="modulepreload" crossorigin href="./assets/
|
|
15
|
-
<link rel="modulepreload" crossorigin href="./assets/
|
|
12
|
+
<style>:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark;--pi-control-font-size:16px;--pi-control-font-family:var(--pi-font,system-ui, sans-serif);--pi-control-monospace-font-family:var(--pi-mono,ui-monospace, SFMono-Regular, Menlo, Consolas, monospace);--pi-bg:var(--pi-initial-bg);--pi-initial-bg:Canvas;--pi-initial-text:CanvasText;--pi-surface:color-mix(in srgb, var(--pi-bg) 95%, var(--pi-text));--pi-surface-hover:color-mix(in srgb, var(--pi-bg) 90%, var(--pi-text));--pi-terminal-bg:#05070a;--pi-terminal-text:#e6edf3;--pi-border:color-mix(in srgb, var(--pi-bg) 75%, var(--pi-text));--pi-border-muted:color-mix(in srgb, var(--pi-bg) 88%, var(--pi-text));--pi-text:var(--pi-initial-text);--pi-text-secondary:var(--pi-text);--pi-text-bright:var(--pi-text);--pi-muted:color-mix(in srgb, var(--pi-text) 65%, var(--pi-bg));--pi-dim:color-mix(in srgb, var(--pi-text) 50%, var(--pi-bg));--pi-accent:#58a6ff;--pi-accent-border:#2f81f7;--pi-selection-bg:#0d2847;--pi-success:#3fb950;--pi-success-border:#238636;--pi-success-bg:#0f1b12;--pi-success-surface:#0f2a16;--pi-success-ring:#3fb95055;--pi-warning:#d29922;--pi-warning-border:#6e5200;--pi-warning-surface:#1f1a10;--pi-danger:#ff7b72;--pi-purple:#d2a8ff;--pi-purple-border:#a371f7;--pi-purple-surface:#21132f;--pi-overlay:#0008;--pi-shadow-soft:#0006;--pi-shadow:#0008;--pi-shadow-strong:#000b;--pi-bg-overlay-soft:color-mix(in srgb, var(--pi-bg) 87%, transparent);--pi-bg-overlay:color-mix(in srgb, var(--pi-bg) 90%, transparent);--pi-success-bg-overlay:#0f1b12ee;--pi-terminal-selection:#264f78}@media (prefers-color-scheme:dark){:root{--lightningcss-light: ;--lightningcss-dark:initial}}html,body{background:var(--pi-bg);height:100%;color:var(--pi-text);margin:0;overflow:hidden}body{min-height:100dvh}html[data-pi-web-loading] pi-web-app{visibility:hidden}#pi-web-startup{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark;color:canvastext;background:canvas;place-content:center;justify-items:center;font:16px system-ui,sans-serif;display:grid;position:fixed;inset:0}@media (prefers-color-scheme:dark){#pi-web-startup{--lightningcss-light: ;--lightningcss-dark:initial}}#pi-web-startup svg{color:#00f0d8;fill:currentColor;width:96px;height:16px;filter:drop-shadow(0 0 4px color-mix(in srgb, currentColor 25%, transparent));animation:2.4s ease-in-out infinite alternate pi-web-startup-glow;overflow:visible}@media (prefers-color-scheme:light){#pi-web-startup svg{color:#008c82}}html[data-pi-web-deployment=dev] #pi-web-startup svg{color:#a371f7}@keyframes pi-web-startup-glow{to{filter:drop-shadow(0 0 8px color-mix(in srgb, currentColor 45%, transparent))}}@media (prefers-reduced-motion:reduce){#pi-web-startup svg{animation:none}}html:not([data-pi-web-loading]) #pi-web-startup{display:none}</style>
|
|
13
|
+
<script type="module" crossorigin src="./assets/index-0z4D-18M.js"></script>
|
|
14
|
+
<link rel="modulepreload" crossorigin href="./assets/preload-helper-CRzLMJPS.js">
|
|
15
|
+
<link rel="modulepreload" crossorigin href="./assets/themePreference-BBiJxLjs.js">
|
|
16
|
+
<link rel="modulepreload" crossorigin href="./assets/themeCatalog-B3yda95n.js">
|
|
17
|
+
<link rel="modulepreload" crossorigin href="./assets/styleSources-CdF2T_pj.js">
|
|
18
|
+
<link rel="modulepreload" crossorigin href="./assets/themeStartup-0b02tNrh.js">
|
|
16
19
|
</head>
|
|
17
20
|
<body>
|
|
21
|
+
<div id="pi-web-startup" role="status" aria-label="Loading PI WEB">
|
|
22
|
+
<svg viewBox="0 0 768 128" aria-hidden="true"><rect width="768" height="128" /></svg>
|
|
23
|
+
</div>
|
|
18
24
|
<pi-web-app></pi-web-app>
|
|
19
25
|
</body>
|
|
20
26
|
</html>
|
package/dist/config.js
CHANGED
|
@@ -1,8 +1,14 @@
|
|
|
1
|
-
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
1
|
+
import { chmodSync, existsSync, mkdirSync, readFileSync, realpathSync, renameSync, rmSync, statSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { randomUUID } from "node:crypto";
|
|
2
3
|
import { homedir } from "node:os";
|
|
3
4
|
import { basename, dirname, isAbsolute, join, normalize, resolve } from "node:path";
|
|
4
5
|
import { usesPiCodingAgentStateCompatibility } from "./shared/activeAgentProfile.js";
|
|
5
|
-
import { parsePiWebConfig as parseBasePiWebConfig
|
|
6
|
+
import { parsePiWebConfig as parseBasePiWebConfig } from "./shared/piWebConfigParsing.js";
|
|
7
|
+
import { parseSessionArchiveConfig } from "./shared/piWebConfigParsing.js";
|
|
8
|
+
import { migrateSessionNamingConfig } from "./configSessionNamingMigration.js";
|
|
9
|
+
import { PI_WEB_CONFIG_DEFINITIONS, overlayPiWebConfig, parsePiWebEnvBoolean, piWebConfigEnvName, piWebConfigNamespaceFields, piWebConfigSettingPointers } from "./shared/configResolution.js";
|
|
10
|
+
import { versionChecksDisabled } from "./shared/versionCheckPolicy.js";
|
|
11
|
+
export { overlayPiWebConfig } from "./shared/configResolution.js";
|
|
6
12
|
export function defaultPiWebConfigPath(env = process.env) {
|
|
7
13
|
const xdgConfigHome = env["XDG_CONFIG_HOME"];
|
|
8
14
|
return join(xdgConfigHome !== undefined && xdgConfigHome !== "" ? xdgConfigHome : join(homedir(), ".config"), "pi-web", "config.json");
|
|
@@ -25,6 +31,7 @@ export const DEFAULT_ATTACHMENT_FOLDER = ".pi-web/attachments";
|
|
|
25
31
|
* enabled.
|
|
26
32
|
*/
|
|
27
33
|
export const DEFAULT_EXTENSION_DIALOGS_TIMEOUT_MS = 300_000;
|
|
34
|
+
const MAX_TIMER_TIMEOUT_MS = 2_147_483_647;
|
|
28
35
|
export const DEFAULT_WORKBENCH_REQUEST_TIMEOUT_MS = 10_000;
|
|
29
36
|
export const DEFAULT_WORKBENCH_CAPABILITY_TIMEOUT_MS = 30_000;
|
|
30
37
|
export const DEFAULT_WORKBENCH_SKILL_BUNDLE_MAX_BYTES = 10 * 1024 * 1024;
|
|
@@ -108,11 +115,8 @@ export function effectiveAttachmentsConfig(config = {}) {
|
|
|
108
115
|
}
|
|
109
116
|
export function maxUploadBytes(env = process.env, config = {}) {
|
|
110
117
|
const fromEnv = env["PI_WEB_MAX_UPLOAD_BYTES"];
|
|
111
|
-
if (fromEnv !== undefined && fromEnv !== "")
|
|
112
|
-
|
|
113
|
-
if (Number.isInteger(parsed) && parsed > 0)
|
|
114
|
-
return parsed;
|
|
115
|
-
}
|
|
118
|
+
if (fromEnv !== undefined && fromEnv !== "")
|
|
119
|
+
return parseMaxUploadBytes(fromEnv, "PI_WEB_MAX_UPLOAD_BYTES");
|
|
116
120
|
if (config.maxUploadBytes !== undefined)
|
|
117
121
|
return config.maxUploadBytes;
|
|
118
122
|
return DEFAULT_MAX_UPLOAD_BYTES;
|
|
@@ -138,49 +142,72 @@ export function piWebConfigPath(env = process.env, cwd = process.cwd()) {
|
|
|
138
142
|
export function loadPiWebConfig(options = {}) {
|
|
139
143
|
const env = options.env ?? process.env;
|
|
140
144
|
const path = piWebConfigPath(env, options.cwd ?? process.cwd());
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
const
|
|
147
|
-
|
|
145
|
+
const defaultsSelector = envValue(env, "PI_WEB_DEFAULTS_CONFIG");
|
|
146
|
+
const defaultsPath = defaultsSelector === undefined ? undefined : resolve(options.cwd ?? process.cwd(), defaultsSelector);
|
|
147
|
+
// A selected defaults file is deployment policy: a missing or corrupt file fails visibly.
|
|
148
|
+
const defaultsRecord = defaultsPath === undefined ? undefined : readConfigObject(defaultsPath);
|
|
149
|
+
const defaultsConfig = defaultsRecord === undefined ? undefined : parseFileConfig(defaultsRecord, defaultsPath ?? path);
|
|
150
|
+
const exists = existsSync(path);
|
|
151
|
+
const record = exists ? readConfigObject(path) : {};
|
|
152
|
+
const config = parseFileConfig(record, path);
|
|
153
|
+
if (Object.hasOwn(record, "sessionNaming") || (defaultsRecord !== undefined && Object.hasOwn(defaultsRecord, "sessionNaming"))) {
|
|
154
|
+
migrateSessionNamingConfig({
|
|
155
|
+
agentDir: effectiveAgentConfig(env, overlayPiWebConfig(defaultsConfig ?? {}, config)).dir,
|
|
156
|
+
saved: { path, record },
|
|
157
|
+
...(defaultsPath !== undefined && defaultsRecord !== undefined ? { defaults: { path: defaultsPath, record: defaultsRecord } } : {}),
|
|
158
|
+
cleanup: () => {
|
|
159
|
+
if (defaultsPath !== undefined && realpathSync(path) === realpathSync(defaultsPath)) {
|
|
160
|
+
throw new Error(`Writable config selects deployment defaults; remove obsolete sessionNaming manually: ${path}`);
|
|
161
|
+
}
|
|
162
|
+
const current = readConfigObject(path);
|
|
163
|
+
if (JSON.stringify(current["sessionNaming"]) !== JSON.stringify(record["sessionNaming"])) {
|
|
164
|
+
throw new Error(`sessionNaming changed during migration: ${path}`);
|
|
165
|
+
}
|
|
166
|
+
Reflect.deleteProperty(current, "sessionNaming");
|
|
167
|
+
writeWritableConfig(path, current);
|
|
168
|
+
},
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
return {
|
|
172
|
+
path, exists, config,
|
|
173
|
+
...(defaultsPath !== undefined && defaultsConfig !== undefined ? { defaultsPath, defaultsConfig } : {}),
|
|
174
|
+
deprecatedAgentInputs: detectDeprecatedAgentInputs(env, overlayPiWebConfig(defaultsConfig ?? {}, config)),
|
|
175
|
+
};
|
|
148
176
|
}
|
|
149
177
|
export function effectivePiWebConfig(options = {}) {
|
|
150
178
|
return resolveEffectivePiWebConfig(loadPiWebConfig(options), options);
|
|
151
179
|
}
|
|
152
180
|
export function resolveEffectivePiWebConfig(loaded, options = {}) {
|
|
153
181
|
const env = options.env ?? process.env;
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
const
|
|
158
|
-
const agent = effectiveAgentConfig(env,
|
|
159
|
-
const workbenchIntegration = effectiveWorkbenchIntegrationConfig(env,
|
|
160
|
-
const auditLog = effectiveAuditLogConfig(
|
|
182
|
+
// These bootstrap policy aliases are not file settings, but invalid explicit
|
|
183
|
+
// values must fail startup rather than be discovered during a background check.
|
|
184
|
+
versionChecksDisabled(env);
|
|
185
|
+
const config = applyPiWebConfigEnv(overlayPiWebConfig(loaded.defaultsConfig ?? {}, loaded.config), env);
|
|
186
|
+
const agent = effectiveAgentConfig(env, config);
|
|
187
|
+
const workbenchIntegration = effectiveWorkbenchIntegrationConfig(env, config.workbenchIntegration);
|
|
188
|
+
const auditLog = effectiveAuditLogConfig(config.auditLog, env);
|
|
161
189
|
return {
|
|
162
190
|
...loaded,
|
|
163
191
|
config: {
|
|
164
|
-
...
|
|
165
|
-
...(host !== undefined && host !== "" ? { host } : {}),
|
|
166
|
-
...(port !== undefined && port !== "" ? { port: parsePort(port, "PI_WEB_PORT") } : {}),
|
|
167
|
-
...(allowedHosts !== undefined && allowedHosts !== "" ? { allowedHosts: parseAllowedHostsEnv(allowedHosts) } : {}),
|
|
168
|
-
...(maxUpload !== undefined && maxUpload !== "" ? { maxUploadBytes: parseMaxUploadBytes(maxUpload, "PI_WEB_MAX_UPLOAD_BYTES") } : {}),
|
|
192
|
+
...config,
|
|
169
193
|
...(workbenchIntegration === undefined ? {} : { workbenchIntegration }),
|
|
170
194
|
auditLog,
|
|
171
|
-
uploads: effectiveUploadsConfig(
|
|
172
|
-
attachments: effectiveAttachmentsConfig(
|
|
195
|
+
uploads: effectiveUploadsConfig(config),
|
|
196
|
+
attachments: effectiveAttachmentsConfig(config),
|
|
173
197
|
// Always resolved (on by default) so the effective config is the single
|
|
174
198
|
// source of truth for the runtime state and the settings UI toggle.
|
|
175
|
-
spawnSessions: spawnSessionsEnabled(
|
|
176
|
-
|
|
177
|
-
//
|
|
178
|
-
|
|
199
|
+
spawnSessions: spawnSessionsEnabled({}, config),
|
|
200
|
+
sessionMessages: sessionMessagesEnabled({}, config),
|
|
201
|
+
// Resolved on by default like the other capabilities,
|
|
202
|
+
// so the effective config is the single source of truth for the runtime
|
|
203
|
+
// state and the settings UI toggle.
|
|
204
|
+
subsessions: subsessionsEnabled({}, config),
|
|
179
205
|
// Always resolved (on by default); the user is present for every ask.
|
|
180
|
-
askUser: askUserEnabled(
|
|
181
|
-
|
|
206
|
+
askUser: askUserEnabled({}, config),
|
|
207
|
+
// Always resolved (on by default); inert outside Docker deployments.
|
|
208
|
+
environmentFacts: environmentFactsEnabled({}, config),
|
|
182
209
|
// Always resolved; the unattended-dialog safety valve, not a gate.
|
|
183
|
-
extensionDialogsTimeoutMs:
|
|
210
|
+
extensionDialogsTimeoutMs: config.extensionDialogsTimeoutMs ?? DEFAULT_EXTENSION_DIALOGS_TIMEOUT_MS,
|
|
184
211
|
agent: { command: agent.command, dir: agent.dir },
|
|
185
212
|
},
|
|
186
213
|
};
|
|
@@ -241,37 +268,136 @@ function positiveIntegerEnv(env, key) {
|
|
|
241
268
|
return parseMaxUploadBytes(value, key);
|
|
242
269
|
}
|
|
243
270
|
export function savePiWebConfig(config, options = {}) {
|
|
271
|
+
rejectRetiredSessionNaming(config, "save request");
|
|
244
272
|
const env = options.env ?? process.env;
|
|
245
273
|
const path = piWebConfigPath(env, options.cwd ?? process.cwd());
|
|
274
|
+
const defaultsSelector = envValue(env, "PI_WEB_DEFAULTS_CONFIG");
|
|
275
|
+
if (defaultsSelector !== undefined) {
|
|
276
|
+
const defaultsPath = resolve(options.cwd ?? process.cwd(), defaultsSelector);
|
|
277
|
+
const canonicalPath = (candidate) => existsSync(candidate) ? realpathSync(candidate) : resolve(candidate);
|
|
278
|
+
if (canonicalPath(path) === canonicalPath(defaultsPath))
|
|
279
|
+
throw new Error("PI_WEB_CONFIG must not select the PI_WEB_DEFAULTS_CONFIG file");
|
|
280
|
+
// Validate deployment policy before touching the writable file.
|
|
281
|
+
parseFileConfig(readConfigObject(defaultsPath), defaultsPath);
|
|
282
|
+
}
|
|
246
283
|
const normalized = parsePiWebConfig(piWebConfigRecord(config), path);
|
|
247
284
|
effectiveAgentConfig(env, normalized);
|
|
248
285
|
const existing = readExistingConfigObject(path);
|
|
249
286
|
if (existing["agent"] !== undefined)
|
|
250
287
|
parseAgentConfig(existing["agent"], path);
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
delete existing["defaultStreamingBehavior"];
|
|
257
|
-
delete existing["plugins"];
|
|
258
|
-
delete existing["pathAccess"];
|
|
259
|
-
delete existing["uploads"];
|
|
260
|
-
delete existing["attachments"];
|
|
261
|
-
delete existing["maxUploadBytes"];
|
|
262
|
-
delete existing["sessionNaming"];
|
|
263
|
-
delete existing["sessionArchive"];
|
|
264
|
-
delete existing["spawnSessions"];
|
|
265
|
-
delete existing["subsessions"];
|
|
266
|
-
delete existing["askUser"];
|
|
267
|
-
delete existing["respectProjectTrust"];
|
|
268
|
-
delete existing["environmentFacts"];
|
|
269
|
-
delete existing["agent"];
|
|
270
|
-
delete existing["workbenchIntegration"];
|
|
288
|
+
for (const key of [...Object.keys(PI_WEB_CONFIG_DEFINITIONS), "agent", "respectProjectTrust"]) {
|
|
289
|
+
if ((key === "normalAuth" || key === "auditLog" || key === "managementEmbed") && !Object.hasOwn(normalized, key))
|
|
290
|
+
continue;
|
|
291
|
+
Reflect.deleteProperty(existing, key);
|
|
292
|
+
}
|
|
271
293
|
const merged = { ...existing, ...piWebConfigRecord(normalized) };
|
|
294
|
+
writeWritableConfig(path, merged);
|
|
295
|
+
return loadPiWebConfig(options);
|
|
296
|
+
}
|
|
297
|
+
/** Replace the resolved target atomically, preserving config symlinks and permissions. */
|
|
298
|
+
function writeWritableConfig(path, config) {
|
|
272
299
|
mkdirSync(dirname(path), { recursive: true });
|
|
273
|
-
|
|
274
|
-
|
|
300
|
+
const destination = existsSync(path) ? realpathSync(path) : path;
|
|
301
|
+
const mode = existsSync(destination) ? statSync(destination).mode & 0o777 : 0o600;
|
|
302
|
+
const temporary = join(dirname(destination), `.${basename(destination)}.${String(process.pid)}.${randomUUID()}.tmp`);
|
|
303
|
+
try {
|
|
304
|
+
writeFileSync(temporary, `${JSON.stringify(config, null, 2)}\n`, { encoding: "utf8", mode, flag: "wx" });
|
|
305
|
+
chmodSync(temporary, mode);
|
|
306
|
+
renameSync(temporary, destination);
|
|
307
|
+
}
|
|
308
|
+
finally {
|
|
309
|
+
rmSync(temporary, { force: true });
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
function readConfigObject(path) {
|
|
313
|
+
const parsed = JSON.parse(readFileSync(path, "utf8"));
|
|
314
|
+
if (!isRecord(parsed))
|
|
315
|
+
throw new Error(`PI WEB config must be a JSON object: ${path}`);
|
|
316
|
+
return parsed;
|
|
317
|
+
}
|
|
318
|
+
function parseFileConfig(record, path) {
|
|
319
|
+
const sanitized = { ...record };
|
|
320
|
+
Reflect.deleteProperty(sanitized, "sessionNaming");
|
|
321
|
+
return parsePiWebConfig(sanitized, path);
|
|
322
|
+
}
|
|
323
|
+
function rejectRetiredSessionNaming(value, path) {
|
|
324
|
+
if (Object.hasOwn(value, "sessionNaming"))
|
|
325
|
+
throw new Error(`PI WEB config sessionNaming is retired; use the Session naming Pi package config: ${path}`);
|
|
326
|
+
}
|
|
327
|
+
function parseEnvJson(value, source) {
|
|
328
|
+
try {
|
|
329
|
+
const parsed = JSON.parse(value);
|
|
330
|
+
return parsed;
|
|
331
|
+
}
|
|
332
|
+
catch (error) {
|
|
333
|
+
throw new Error(`${source} must contain valid JSON`, { cause: error });
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
function piWebConfigEnvOverrides(env) {
|
|
337
|
+
let config = {};
|
|
338
|
+
const enforced = {};
|
|
339
|
+
for (const [key, kind] of Object.entries(PI_WEB_CONFIG_DEFINITIONS)) {
|
|
340
|
+
const canonicalName = piWebConfigEnvName(key);
|
|
341
|
+
const name = key === "port" && env[canonicalName] === undefined ? "PORT" : canonicalName;
|
|
342
|
+
const value = env[name];
|
|
343
|
+
if (value === undefined)
|
|
344
|
+
continue;
|
|
345
|
+
// Existing scalar overrides treat empty as unset; new strings (notably
|
|
346
|
+
// installationName) retain meaningful empty values. Booleans are strict.
|
|
347
|
+
if (value === "" && ["host", "port", "allowedHosts", "maxUploadBytes"].includes(key))
|
|
348
|
+
continue;
|
|
349
|
+
let parsed;
|
|
350
|
+
if (kind === "json")
|
|
351
|
+
parsed = parseEnvJson(value, name);
|
|
352
|
+
else if (kind === "boolean")
|
|
353
|
+
parsed = parsePiWebEnvBoolean(value, name);
|
|
354
|
+
else if (kind === "number")
|
|
355
|
+
parsed = value === "" ? NaN : Number(value);
|
|
356
|
+
else if (kind === "allowedHosts")
|
|
357
|
+
parsed = parseAllowedHostsEnv(value);
|
|
358
|
+
else
|
|
359
|
+
parsed = value;
|
|
360
|
+
if (key === "plugins" && isRecord(parsed)) {
|
|
361
|
+
for (const [id, plugin] of Object.entries(parsed)) {
|
|
362
|
+
if (isRecord(plugin))
|
|
363
|
+
requireKnownConfigKeys(plugin, ["enabled", "settings"], `plugins.${id}`, name);
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
let override;
|
|
367
|
+
try {
|
|
368
|
+
override = parsePiWebConfig({ [key]: parsed }, name);
|
|
369
|
+
}
|
|
370
|
+
catch (error) {
|
|
371
|
+
throw new Error(`${name}: ${error instanceof Error ? error.message : String(error)}`, { cause: error });
|
|
372
|
+
}
|
|
373
|
+
config = overlayPiWebConfig(config, override);
|
|
374
|
+
for (const pointer of piWebConfigSettingPointers(override))
|
|
375
|
+
enforced[pointer] = name;
|
|
376
|
+
}
|
|
377
|
+
const archiveDir = envValue(env, "PI_WEB_SESSION_ARCHIVE_DIR");
|
|
378
|
+
if (archiveDir !== undefined) {
|
|
379
|
+
config = overlayPiWebConfig(config, { sessionArchive: parseSessionArchiveConfig({ directory: archiveDir }, "PI_WEB_SESSION_ARCHIVE_DIR") });
|
|
380
|
+
enforced["/sessionArchive/directory"] = "PI_WEB_SESSION_ARCHIVE_DIR";
|
|
381
|
+
}
|
|
382
|
+
return { config, enforced };
|
|
383
|
+
}
|
|
384
|
+
/** Apply after project participation as well as machine overlays. Does not mutate inputs. */
|
|
385
|
+
export function applyPiWebConfigEnv(config, env) {
|
|
386
|
+
return overlayPiWebConfig(config, piWebConfigEnvOverrides(env).config);
|
|
387
|
+
}
|
|
388
|
+
/** JSON-pointer setting identifiers mapped to the controlling environment variable. */
|
|
389
|
+
export function piWebConfigEnforcedSettings(env = process.env) {
|
|
390
|
+
return piWebConfigEnvOverrides(env).enforced;
|
|
391
|
+
}
|
|
392
|
+
/** Sources describe explicit settings only; omitted entries inherit built-in/feature defaults. */
|
|
393
|
+
export function piWebConfigSources(loaded, options = {}) {
|
|
394
|
+
const sources = {};
|
|
395
|
+
for (const pointer of piWebConfigSettingPointers(loaded.defaultsConfig ?? {}))
|
|
396
|
+
sources[pointer] = "defaults";
|
|
397
|
+
for (const pointer of piWebConfigSettingPointers(loaded.config))
|
|
398
|
+
sources[pointer] = "config";
|
|
399
|
+
Object.assign(sources, piWebConfigEnforcedSettings(options.env ?? process.env));
|
|
400
|
+
return sources;
|
|
275
401
|
}
|
|
276
402
|
function readExistingConfigObject(path) {
|
|
277
403
|
if (!existsSync(path))
|
|
@@ -282,21 +408,29 @@ function readExistingConfigObject(path) {
|
|
|
282
408
|
return parsed;
|
|
283
409
|
}
|
|
284
410
|
function piWebConfigRecord(config) {
|
|
285
|
-
return
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
411
|
+
return Object.fromEntries(Object.entries(config).filter(([key, value]) => value !== undefined && (Object.hasOwn(PI_WEB_CONFIG_DEFINITIONS, key) || key === "agent")));
|
|
412
|
+
}
|
|
413
|
+
function requireKnownConfigKeys(value, allowed, key, path) {
|
|
414
|
+
const unknown = Object.keys(value).find((name) => !allowed.includes(name));
|
|
415
|
+
if (unknown !== undefined)
|
|
416
|
+
throw new Error(`PI WEB config ${key} has unknown key ${JSON.stringify(unknown)}: ${path}`);
|
|
417
|
+
}
|
|
418
|
+
function requireNamespaceKeys(value, key, path) {
|
|
419
|
+
requireKnownConfigKeys(value, piWebConfigNamespaceFields(key) ?? [], key, path);
|
|
420
|
+
}
|
|
421
|
+
export function parsePiWebConfig(value, path = "request", pathHost = "current") {
|
|
422
|
+
rejectRetiredSessionNaming(value, path);
|
|
423
|
+
for (const key of ["pathAccess", "uploads", "attachments"]) {
|
|
424
|
+
const namespace = value[key];
|
|
425
|
+
if (isRecord(namespace))
|
|
426
|
+
requireNamespaceKeys(namespace, key, path);
|
|
427
|
+
}
|
|
294
428
|
return {
|
|
295
429
|
...parseBasePiWebConfig(value, path),
|
|
296
430
|
...(value["askUser"] === undefined ? {} : { askUser: parseAskUser(value["askUser"], path) }),
|
|
297
431
|
...(value["environmentFacts"] === undefined ? {} : { environmentFacts: parseBooleanKey(value["environmentFacts"], "environmentFacts", path) }),
|
|
298
432
|
...(value["extensionDialogsTimeoutMs"] !== undefined ? { extensionDialogsTimeoutMs: parseExtensionDialogsTimeoutMs(value["extensionDialogsTimeoutMs"], path) } : {}),
|
|
299
|
-
...(value["agent"] !== undefined ? { agent: parseAgentConfig(value["agent"], path) } : {}),
|
|
433
|
+
...(value["agent"] !== undefined ? { agent: parseAgentConfig(value["agent"], path, pathHost) } : {}),
|
|
300
434
|
};
|
|
301
435
|
}
|
|
302
436
|
function parseMaxUploadBytes(value, key, path = "environment") {
|
|
@@ -313,10 +447,17 @@ function parseMaxUploadBytes(value, key, path = "environment") {
|
|
|
313
447
|
*/
|
|
314
448
|
export function spawnSessionsEnabled(env = process.env, config = {}) {
|
|
315
449
|
const fromEnv = env["PI_WEB_SPAWN_SESSIONS"];
|
|
316
|
-
if (fromEnv !== undefined
|
|
317
|
-
return fromEnv
|
|
450
|
+
if (fromEnv !== undefined)
|
|
451
|
+
return parsePiWebEnvBoolean(fromEnv, "PI_WEB_SPAWN_SESSIONS");
|
|
318
452
|
return config.spawnSessions ?? true;
|
|
319
453
|
}
|
|
454
|
+
/** Whether LLMs may send messages to other sessions, independently of spawning. */
|
|
455
|
+
export function sessionMessagesEnabled(env = process.env, config = {}) {
|
|
456
|
+
const fromEnv = env["PI_WEB_SESSION_MESSAGES"];
|
|
457
|
+
if (fromEnv !== undefined)
|
|
458
|
+
return parsePiWebEnvBoolean(fromEnv, "PI_WEB_SESSION_MESSAGES");
|
|
459
|
+
return config.sessionMessages ?? true;
|
|
460
|
+
}
|
|
320
461
|
/**
|
|
321
462
|
* Whether LLMs may start tracked child sessions via the spawn_subsession
|
|
322
463
|
* family of tools. On by default; set the env var `PI_WEB_SUBSESSIONS` or the
|
|
@@ -326,14 +467,14 @@ export function spawnSessionsEnabled(env = process.env, config = {}) {
|
|
|
326
467
|
*/
|
|
327
468
|
export function subsessionsEnabled(env = process.env, config = {}) {
|
|
328
469
|
const fromEnv = env["PI_WEB_SUBSESSIONS"];
|
|
329
|
-
if (fromEnv !== undefined
|
|
330
|
-
return fromEnv
|
|
470
|
+
if (fromEnv !== undefined)
|
|
471
|
+
return parsePiWebEnvBoolean(fromEnv, "PI_WEB_SUBSESSIONS");
|
|
331
472
|
return config.subsessions ?? true;
|
|
332
473
|
}
|
|
333
474
|
export function environmentFactsEnabled(env = process.env, config = {}) {
|
|
334
475
|
const fromEnv = env["PI_WEB_ENVIRONMENT_FACTS"];
|
|
335
|
-
if (fromEnv !== undefined
|
|
336
|
-
return fromEnv
|
|
476
|
+
if (fromEnv !== undefined)
|
|
477
|
+
return parsePiWebEnvBoolean(fromEnv, "PI_WEB_ENVIRONMENT_FACTS");
|
|
337
478
|
return config.environmentFacts ?? true;
|
|
338
479
|
}
|
|
339
480
|
function parseBooleanKey(value, key, path) {
|
|
@@ -347,8 +488,8 @@ function parseAskUser(value, path) {
|
|
|
347
488
|
return value;
|
|
348
489
|
}
|
|
349
490
|
function parseExtensionDialogsTimeoutMs(value, path) {
|
|
350
|
-
if (typeof value !== "number" || !Number.isInteger(value) || value < 0) {
|
|
351
|
-
throw new Error(`PI WEB config extensionDialogsTimeoutMs must be a non-negative integer: ${path}`);
|
|
491
|
+
if (typeof value !== "number" || !Number.isInteger(value) || value < 0 || value > MAX_TIMER_TIMEOUT_MS) {
|
|
492
|
+
throw new Error(`PI WEB config extensionDialogsTimeoutMs must be a non-negative integer no greater than ${String(MAX_TIMER_TIMEOUT_MS)}: ${path}`);
|
|
352
493
|
}
|
|
353
494
|
return value;
|
|
354
495
|
}
|
|
@@ -361,22 +502,27 @@ function parseExtensionDialogsTimeoutMs(value, path) {
|
|
|
361
502
|
*/
|
|
362
503
|
export function askUserEnabled(env = process.env, config = {}) {
|
|
363
504
|
const fromEnv = env["PI_WEB_ASK_USER"];
|
|
364
|
-
if (fromEnv !== undefined
|
|
365
|
-
return fromEnv
|
|
505
|
+
if (fromEnv !== undefined)
|
|
506
|
+
return parsePiWebEnvBoolean(fromEnv, "PI_WEB_ASK_USER");
|
|
366
507
|
return config.askUser ?? true;
|
|
367
508
|
}
|
|
368
509
|
const OFFLINE_ENV_KEYS = ["PI_WEB_OFFLINE", "PI_OFFLINE"];
|
|
369
510
|
/**
|
|
370
511
|
* Whether the operator asked PI WEB (or pi itself) to stay offline, meaning
|
|
371
|
-
* background network access must be skipped.
|
|
372
|
-
*
|
|
512
|
+
* background network access must be skipped. Both aliases use strict boolean
|
|
513
|
+
* parsing; false/0 no longer enable offline mode.
|
|
373
514
|
*
|
|
374
515
|
* Deliberately narrower than `piWebStatus`'s update-check suppression: the
|
|
375
516
|
* `*_SKIP_VERSION_CHECK` keys only silence release lookups, while these keys ask
|
|
376
517
|
* for no background network at all.
|
|
377
518
|
*/
|
|
378
519
|
export function offlineModeEnabled(env = process.env) {
|
|
379
|
-
|
|
520
|
+
// Validate every supplied alias, even if another alias already enables offline mode.
|
|
521
|
+
const values = OFFLINE_ENV_KEYS.map((key) => {
|
|
522
|
+
const value = env[key];
|
|
523
|
+
return value === undefined ? false : parsePiWebEnvBoolean(value, key);
|
|
524
|
+
});
|
|
525
|
+
return values.some(Boolean);
|
|
380
526
|
}
|
|
381
527
|
function parseString(value, key, path) {
|
|
382
528
|
if (typeof value !== "string" || value === "")
|
|
@@ -444,20 +590,18 @@ function isPortableAbsoluteAgentPath(value) {
|
|
|
444
590
|
function isSafeAgentDirPath(value) {
|
|
445
591
|
return value !== "" && value === value.trim() && !hasControlCharacter(value);
|
|
446
592
|
}
|
|
447
|
-
function parsePort(value, key, path = "environment") {
|
|
448
|
-
const port = typeof value === "number" ? value : typeof value === "string" && value !== "" ? Number(value) : NaN;
|
|
449
|
-
if (!Number.isInteger(port) || port < 1 || port > 65535)
|
|
450
|
-
throw new Error(`PI WEB config ${key} must be an integer from 1 to 65535: ${path}`);
|
|
451
|
-
return port;
|
|
452
|
-
}
|
|
453
593
|
function parseAllowedHostsEnv(value) {
|
|
454
|
-
if (value === "true")
|
|
594
|
+
if (value.trim() === "true")
|
|
455
595
|
return true;
|
|
596
|
+
if (["[", "{", "\"", "]"].some((prefix) => value.trimStart().startsWith(prefix)) || /^(false|null)$/.test(value.trim())) {
|
|
597
|
+
return parseBasePiWebConfig({ allowedHosts: parseEnvJson(value, "PI_WEB_ALLOWED_HOSTS") }, "PI_WEB_ALLOWED_HOSTS").allowedHosts ?? [];
|
|
598
|
+
}
|
|
456
599
|
return value.split(",").map((host) => host.trim()).filter((host) => host !== "");
|
|
457
600
|
}
|
|
458
601
|
export function parsePathAccessConfig(value, path) {
|
|
459
602
|
if (!isRecord(value))
|
|
460
603
|
throw new Error(`PI WEB config pathAccess must be an object: ${path}`);
|
|
604
|
+
requireNamespaceKeys(value, "pathAccess", path);
|
|
461
605
|
const allowedPaths = value["allowedPaths"];
|
|
462
606
|
return {
|
|
463
607
|
...(allowedPaths !== undefined ? { allowedPaths: parseAllowedPaths(allowedPaths, path) } : {}),
|
|
@@ -471,6 +615,7 @@ function parseAllowedPaths(value, path) {
|
|
|
471
615
|
export function parseUploadsConfig(value, path) {
|
|
472
616
|
if (!isRecord(value))
|
|
473
617
|
throw new Error(`PI WEB config uploads must be an object: ${path}`);
|
|
618
|
+
requireNamespaceKeys(value, "uploads", path);
|
|
474
619
|
const defaultFolder = value["defaultFolder"];
|
|
475
620
|
return {
|
|
476
621
|
...(defaultFolder !== undefined ? { defaultFolder: parseWorkspaceRelativeFolder(defaultFolder, "uploads.defaultFolder", path) } : {}),
|
|
@@ -479,6 +624,7 @@ export function parseUploadsConfig(value, path) {
|
|
|
479
624
|
export function parseAttachmentsConfig(value, path) {
|
|
480
625
|
if (!isRecord(value))
|
|
481
626
|
throw new Error(`PI WEB config attachments must be an object: ${path}`);
|
|
627
|
+
requireNamespaceKeys(value, "attachments", path);
|
|
482
628
|
const defaultFolder = value["defaultFolder"];
|
|
483
629
|
return {
|
|
484
630
|
...(defaultFolder !== undefined ? { defaultFolder: parseWorkspaceRelativeFolder(defaultFolder, "attachments.defaultFolder", path) } : {}),
|