@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,710 @@
|
|
|
1
|
+
import { Type } from "@earendil-works/pi-ai";
|
|
2
|
+
import { defineTool } from "@earendil-works/pi-coding-agent";
|
|
3
|
+
// src/shared/thinkingLevels.ts
|
|
4
|
+
/**
|
|
5
|
+
* Known levels in increasing intensity, derived from pi's `ThinkingLevel` union.
|
|
6
|
+
* The `satisfies` clause makes this fail to compile if pi removes or renames a
|
|
7
|
+
* level; thinkingLevels.test.ts adds a compile-time check for additions too. When
|
|
8
|
+
* either breaks, update this list and give the new level a label/description
|
|
9
|
+
* where thinking levels are presented.
|
|
10
|
+
*/
|
|
11
|
+
var KNOWN_THINKING_LEVELS = [
|
|
12
|
+
"off",
|
|
13
|
+
"minimal",
|
|
14
|
+
"low",
|
|
15
|
+
"medium",
|
|
16
|
+
"high",
|
|
17
|
+
"xhigh",
|
|
18
|
+
"max"
|
|
19
|
+
];
|
|
20
|
+
function isKnownThinkingLevel(value) {
|
|
21
|
+
return KNOWN_THINKING_LEVELS.some((level) => level === value);
|
|
22
|
+
}
|
|
23
|
+
Object.freeze({
|
|
24
|
+
pluginId: "pi-web.host",
|
|
25
|
+
id: "catalog",
|
|
26
|
+
version: 1,
|
|
27
|
+
parse: snapshotCatalog
|
|
28
|
+
});
|
|
29
|
+
function snapshotCatalog(value) {
|
|
30
|
+
const catalog = record(value);
|
|
31
|
+
if (catalog["version"] !== 1) throw invalid$1();
|
|
32
|
+
const projects = methods(catalog["projects"]);
|
|
33
|
+
const workspaces = methods(catalog["workspaces"]);
|
|
34
|
+
const sessions = methods(catalog["sessions"]);
|
|
35
|
+
return Object.freeze({
|
|
36
|
+
version: 1,
|
|
37
|
+
projects: Object.freeze({
|
|
38
|
+
list: async (options) => array(await projects.list(options), snapshotProject),
|
|
39
|
+
get: async (projectId, options) => {
|
|
40
|
+
const id = text(projectId);
|
|
41
|
+
const result = snapshotProject(await projects.get(id, options));
|
|
42
|
+
if (result.id !== id) throw invalid$1();
|
|
43
|
+
return result;
|
|
44
|
+
}
|
|
45
|
+
}),
|
|
46
|
+
workspaces: Object.freeze({
|
|
47
|
+
list: async (projectId, options) => {
|
|
48
|
+
const id = text(projectId);
|
|
49
|
+
return array(await workspaces.list(id, options), (row) => workspaceFor(row, id));
|
|
50
|
+
},
|
|
51
|
+
get: async (selection, options) => {
|
|
52
|
+
const requested = snapshotSelection$1(selection);
|
|
53
|
+
const result = workspaceFor(await workspaces.get(requested, options), requested.projectId);
|
|
54
|
+
if (result.id !== requested.workspaceId) throw invalid$1();
|
|
55
|
+
return result;
|
|
56
|
+
}
|
|
57
|
+
}),
|
|
58
|
+
sessions: Object.freeze({
|
|
59
|
+
list: async (selection, options) => array(await sessions.list(snapshotSelection$1(selection), options), snapshotSession),
|
|
60
|
+
get: async (selection, options) => {
|
|
61
|
+
const requested = snapshotSelection$1(selection, true);
|
|
62
|
+
const result = snapshotSession(await sessions.get(requested, options));
|
|
63
|
+
if (result.id !== requested.sessionId) throw invalid$1();
|
|
64
|
+
return result;
|
|
65
|
+
}
|
|
66
|
+
})
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
function methods(value) {
|
|
70
|
+
const owner = record(value);
|
|
71
|
+
const list = owner["list"];
|
|
72
|
+
const get = owner["get"];
|
|
73
|
+
if (typeof list !== "function" || typeof get !== "function") throw invalid$1();
|
|
74
|
+
return {
|
|
75
|
+
list: (...args) => Promise.resolve(Reflect.apply(list, owner, args)),
|
|
76
|
+
get: (...args) => Promise.resolve(Reflect.apply(get, owner, args))
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
function snapshotProject(value) {
|
|
80
|
+
const row = record(value);
|
|
81
|
+
return Object.freeze({
|
|
82
|
+
id: text(row["id"]),
|
|
83
|
+
name: text(row["name"]),
|
|
84
|
+
path: text(row["path"])
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
function workspaceFor(value, projectId) {
|
|
88
|
+
const row = record(value);
|
|
89
|
+
if (row["projectId"] !== projectId || typeof row["isMain"] !== "boolean") throw invalid$1();
|
|
90
|
+
let provider;
|
|
91
|
+
if (row["provider"] !== void 0) {
|
|
92
|
+
const source = record(row["provider"]);
|
|
93
|
+
const capabilities = record(source["capabilities"]);
|
|
94
|
+
if (typeof capabilities["remove"] !== "boolean") throw invalid$1();
|
|
95
|
+
provider = Object.freeze({
|
|
96
|
+
pluginId: text(source["pluginId"]),
|
|
97
|
+
capabilities: Object.freeze({ remove: capabilities["remove"] }),
|
|
98
|
+
...source["metadata"] === void 0 ? {} : { metadata: jsonObject(source["metadata"]) }
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
const removal = row["removal"] === void 0 ? void 0 : record(row["removal"]);
|
|
102
|
+
return Object.freeze({
|
|
103
|
+
id: text(row["id"]),
|
|
104
|
+
projectId,
|
|
105
|
+
path: text(row["path"]),
|
|
106
|
+
label: text(row["label"]),
|
|
107
|
+
isMain: row["isMain"],
|
|
108
|
+
...provider === void 0 ? {} : { provider },
|
|
109
|
+
...removal === void 0 ? {} : { removal: Object.freeze({
|
|
110
|
+
actionLabel: text(removal["actionLabel"]),
|
|
111
|
+
confirmation: text(removal["confirmation"])
|
|
112
|
+
}) }
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
function snapshotSession(value) {
|
|
116
|
+
const row = record(value);
|
|
117
|
+
const runtime = row["runtime"];
|
|
118
|
+
if (typeof row["archived"] !== "boolean" || runtime !== "not-hosted" && runtime !== "idle" && runtime !== "busy") throw invalid$1();
|
|
119
|
+
let metadata;
|
|
120
|
+
if (row["metadata"] !== void 0) metadata = Object.freeze(Object.fromEntries(Object.entries(record(row["metadata"])).map(([key, data]) => [key, jsonObject(data)])));
|
|
121
|
+
if (row["name"] !== void 0 && typeof row["name"] !== "string") throw invalid$1();
|
|
122
|
+
if (typeof row["pinned"] !== "boolean") throw invalid$1();
|
|
123
|
+
const created = nullableTimestamp(row["created"]);
|
|
124
|
+
const modified = nullableTimestamp(row["modified"]);
|
|
125
|
+
const archivedAt = nullableTimestamp(row["archivedAt"]);
|
|
126
|
+
if (archivedAt !== null && !row["archived"]) throw invalid$1();
|
|
127
|
+
return Object.freeze({
|
|
128
|
+
id: text(row["id"]),
|
|
129
|
+
cwd: text(row["cwd"]),
|
|
130
|
+
archived: row["archived"],
|
|
131
|
+
runtime,
|
|
132
|
+
created,
|
|
133
|
+
modified,
|
|
134
|
+
archivedAt,
|
|
135
|
+
pinned: row["pinned"],
|
|
136
|
+
...row["name"] === void 0 ? {} : { name: row["name"] },
|
|
137
|
+
...metadata === void 0 ? {} : { metadata }
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
function nullableTimestamp(value) {
|
|
141
|
+
if (value === null) return null;
|
|
142
|
+
if (typeof value !== "string" || !Number.isFinite(Date.parse(value))) throw invalid$1();
|
|
143
|
+
return value;
|
|
144
|
+
}
|
|
145
|
+
function snapshotSelection$1(value, session = false) {
|
|
146
|
+
const row = record(value);
|
|
147
|
+
const keys = session ? [
|
|
148
|
+
"projectId",
|
|
149
|
+
"workspaceId",
|
|
150
|
+
"sessionId"
|
|
151
|
+
] : ["projectId", "workspaceId"];
|
|
152
|
+
if (Reflect.ownKeys(row).some((key) => typeof key !== "string" || !keys.includes(key))) throw invalid$1();
|
|
153
|
+
return Object.freeze({
|
|
154
|
+
projectId: text(row["projectId"]),
|
|
155
|
+
workspaceId: text(row["workspaceId"]),
|
|
156
|
+
...session ? { sessionId: text(row["sessionId"]) } : {}
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
function array(value, snapshot) {
|
|
160
|
+
if (!Array.isArray(value)) throw invalid$1();
|
|
161
|
+
return Object.freeze(value.map(snapshot));
|
|
162
|
+
}
|
|
163
|
+
function record(value) {
|
|
164
|
+
if (!isRecord(value)) throw invalid$1();
|
|
165
|
+
return value;
|
|
166
|
+
}
|
|
167
|
+
function isRecord(value) {
|
|
168
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) return false;
|
|
169
|
+
const prototype = Object.getPrototypeOf(value);
|
|
170
|
+
return prototype === Object.prototype || prototype === null;
|
|
171
|
+
}
|
|
172
|
+
function text(value) {
|
|
173
|
+
if (typeof value !== "string" || value.trim() === "") throw invalid$1();
|
|
174
|
+
return value;
|
|
175
|
+
}
|
|
176
|
+
function jsonObject(value, ancestors = /* @__PURE__ */ new Set()) {
|
|
177
|
+
const source = record(value);
|
|
178
|
+
if (ancestors.has(source)) throw invalid$1();
|
|
179
|
+
ancestors.add(source);
|
|
180
|
+
const result = Object.freeze(Object.fromEntries(Object.entries(source).map(([key, data]) => [key, json(data, ancestors)])));
|
|
181
|
+
ancestors.delete(source);
|
|
182
|
+
return result;
|
|
183
|
+
}
|
|
184
|
+
function json(value, ancestors) {
|
|
185
|
+
if (value === null || typeof value === "string" || typeof value === "boolean" || typeof value === "number" && Number.isFinite(value)) return value;
|
|
186
|
+
if (Array.isArray(value)) {
|
|
187
|
+
if (ancestors.has(value)) throw invalid$1();
|
|
188
|
+
ancestors.add(value);
|
|
189
|
+
const result = Object.freeze(value.map((item) => json(item, ancestors)));
|
|
190
|
+
ancestors.delete(value);
|
|
191
|
+
return result;
|
|
192
|
+
}
|
|
193
|
+
return jsonObject(value, ancestors);
|
|
194
|
+
}
|
|
195
|
+
function invalid$1() {
|
|
196
|
+
return /* @__PURE__ */ new Error("Invalid PI WEB host catalog capability v1 data");
|
|
197
|
+
}
|
|
198
|
+
Object.freeze({
|
|
199
|
+
pluginId: "pi-web.host",
|
|
200
|
+
id: "session-lifecycle",
|
|
201
|
+
version: 1,
|
|
202
|
+
parse: snapshotLifecycle
|
|
203
|
+
});
|
|
204
|
+
function snapshotLifecycle(value) {
|
|
205
|
+
if (typeof value !== "object" || value === null || !("version" in value) || value.version !== 1) throw invalid();
|
|
206
|
+
const owner = value;
|
|
207
|
+
const method = (name) => {
|
|
208
|
+
const fn = Reflect.get(owner, name);
|
|
209
|
+
if (typeof fn !== "function") throw invalid();
|
|
210
|
+
return async (selection, options) => {
|
|
211
|
+
const result = Reflect.apply(fn, owner, [snapshotSelection(selection), options]);
|
|
212
|
+
return await Promise.resolve(result);
|
|
213
|
+
};
|
|
214
|
+
};
|
|
215
|
+
const get = method("get");
|
|
216
|
+
const mutation = (name) => {
|
|
217
|
+
const invoke = method(name);
|
|
218
|
+
return async (selection, options) => {
|
|
219
|
+
await invoke(selection, options);
|
|
220
|
+
};
|
|
221
|
+
};
|
|
222
|
+
return Object.freeze({
|
|
223
|
+
version: 1,
|
|
224
|
+
get: async (selection, options) => {
|
|
225
|
+
const requested = snapshotSelection(selection);
|
|
226
|
+
const result = await get(requested, options);
|
|
227
|
+
if (typeof result !== "object" || result === null || !("sessionId" in result) || result.sessionId !== requested.sessionId || !("pinned" in result) || typeof result.pinned !== "boolean" || !("archived" in result) || typeof result.archived !== "boolean") throw invalid();
|
|
228
|
+
return Object.freeze({
|
|
229
|
+
sessionId: requested.sessionId,
|
|
230
|
+
pinned: result.pinned,
|
|
231
|
+
archived: result.archived
|
|
232
|
+
});
|
|
233
|
+
},
|
|
234
|
+
pin: mutation("pin"),
|
|
235
|
+
unpin: mutation("unpin"),
|
|
236
|
+
archive: mutation("archive"),
|
|
237
|
+
restore: mutation("restore"),
|
|
238
|
+
delete: mutation("delete")
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
function snapshotSelection(value) {
|
|
242
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) throw invalid();
|
|
243
|
+
const keys = [
|
|
244
|
+
"projectId",
|
|
245
|
+
"workspaceId",
|
|
246
|
+
"sessionId"
|
|
247
|
+
];
|
|
248
|
+
if (Reflect.ownKeys(value).some((key) => typeof key !== "string" || !keys.some((allowed) => key === allowed))) throw invalid();
|
|
249
|
+
const text = (key) => {
|
|
250
|
+
const field = Reflect.get(value, key);
|
|
251
|
+
if (typeof field !== "string" || field.trim() === "" || field.length > 512) throw invalid();
|
|
252
|
+
return field;
|
|
253
|
+
};
|
|
254
|
+
return Object.freeze({
|
|
255
|
+
projectId: text("projectId"),
|
|
256
|
+
workspaceId: text("workspaceId"),
|
|
257
|
+
sessionId: text("sessionId")
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
function invalid() {
|
|
261
|
+
return /* @__PURE__ */ new Error("Invalid PI WEB host session lifecycle capability v1 data");
|
|
262
|
+
}
|
|
263
|
+
// src/server-plugin-api.ts
|
|
264
|
+
/** Discover this package's local v5 backend on a hosted pi.events bus.
|
|
265
|
+
* Throws synchronously outside PI WEB or when the paired backend is unavailable.
|
|
266
|
+
* Extensions are trusted in-process code, not a sandbox.
|
|
267
|
+
*/
|
|
268
|
+
function createCompanionBackend(events, pluginId) {
|
|
269
|
+
let backend;
|
|
270
|
+
let failure;
|
|
271
|
+
events.emit("pi-web:companion-backend:discover", {
|
|
272
|
+
pluginId,
|
|
273
|
+
accept: (discover) => {
|
|
274
|
+
try {
|
|
275
|
+
backend = discover();
|
|
276
|
+
} catch (error) {
|
|
277
|
+
failure = error instanceof Error ? error : new Error(String(error));
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
});
|
|
281
|
+
if (failure !== void 0) throw failure;
|
|
282
|
+
if (backend === void 0) throw new Error("Companion backend discovery requires a hosted PI WEB event bus");
|
|
283
|
+
return backend;
|
|
284
|
+
}
|
|
285
|
+
Object.freeze({
|
|
286
|
+
pluginId: "pi-web.host",
|
|
287
|
+
id: "workspaces",
|
|
288
|
+
version: 1,
|
|
289
|
+
parse: snapshotPiWebHostWorkspacesV1
|
|
290
|
+
});
|
|
291
|
+
Object.freeze({
|
|
292
|
+
pluginId: "pi-web.host",
|
|
293
|
+
id: "pi-sessions",
|
|
294
|
+
version: 1,
|
|
295
|
+
parse: snapshotPiWebHostPiSessionsV1
|
|
296
|
+
});
|
|
297
|
+
Object.freeze({
|
|
298
|
+
pluginId: "pi-web.host",
|
|
299
|
+
id: "pi-session-events",
|
|
300
|
+
version: 1,
|
|
301
|
+
parse: snapshotPiWebHostPiSessionEventsV1
|
|
302
|
+
});
|
|
303
|
+
function snapshotPiWebHostWorkspacesV1(value) {
|
|
304
|
+
if (typeof value !== "object" || value === null) throw invalidPiWebHostWorkspaces();
|
|
305
|
+
const version = Reflect.get(value, "version");
|
|
306
|
+
const resolve = Reflect.get(value, "resolve");
|
|
307
|
+
if (version !== 1 || typeof resolve !== "function") throw invalidPiWebHostWorkspaces();
|
|
308
|
+
return Object.freeze({
|
|
309
|
+
version: 1,
|
|
310
|
+
resolve: async (selection) => {
|
|
311
|
+
const requested = snapshotPiWebHostWorkspaceSelection(selection);
|
|
312
|
+
return snapshotPiWebHostWorkspaceAuthority(await Reflect.apply(resolve, value, [requested]), requested);
|
|
313
|
+
}
|
|
314
|
+
});
|
|
315
|
+
}
|
|
316
|
+
function snapshotPiWebHostPiSessionEventsV1(value) {
|
|
317
|
+
if (typeof value !== "object" || value === null) throw new Error("Invalid PI session events capability");
|
|
318
|
+
const connect = Reflect.get(value, "connect");
|
|
319
|
+
if (Reflect.get(value, "version") !== 1 || typeof connect !== "function") throw new Error("Invalid PI session events capability");
|
|
320
|
+
return Object.freeze({
|
|
321
|
+
version: 1,
|
|
322
|
+
connect: async (selection) => {
|
|
323
|
+
const workspace = snapshotPiWebHostWorkspaceSelection({
|
|
324
|
+
projectId: selection.projectId,
|
|
325
|
+
workspaceId: selection.workspaceId
|
|
326
|
+
});
|
|
327
|
+
const sessionId = selection.sessionId;
|
|
328
|
+
if (typeof sessionId !== "string" || sessionId.trim() === "" || sessionId.length > 512) throw new Error("Invalid hosted session id");
|
|
329
|
+
const connection = await Reflect.apply(connect, value, [{
|
|
330
|
+
...workspace,
|
|
331
|
+
sessionId
|
|
332
|
+
}]);
|
|
333
|
+
if (typeof connection !== "object" || connection === null) throw new Error("Invalid PI session events connection");
|
|
334
|
+
const signal = Reflect.get(connection, "signal");
|
|
335
|
+
const on = Reflect.get(connection, "on");
|
|
336
|
+
const emit = Reflect.get(connection, "emit");
|
|
337
|
+
const close = Reflect.get(connection, "close");
|
|
338
|
+
if (!(signal instanceof AbortSignal) || typeof on !== "function" || typeof emit !== "function" || typeof close !== "function") throw new Error("Invalid PI session events connection");
|
|
339
|
+
return Object.freeze({
|
|
340
|
+
signal,
|
|
341
|
+
on: (channel, handler) => {
|
|
342
|
+
const unsubscribe = Reflect.apply(on, connection, [channel, handler]);
|
|
343
|
+
if (typeof unsubscribe !== "function") throw new Error("Invalid PI event unsubscribe function");
|
|
344
|
+
return () => {
|
|
345
|
+
Reflect.apply(unsubscribe, void 0, []);
|
|
346
|
+
};
|
|
347
|
+
},
|
|
348
|
+
emit: (channel, data) => {
|
|
349
|
+
Reflect.apply(emit, connection, [channel, data]);
|
|
350
|
+
},
|
|
351
|
+
close: () => {
|
|
352
|
+
Reflect.apply(close, connection, []);
|
|
353
|
+
}
|
|
354
|
+
});
|
|
355
|
+
}
|
|
356
|
+
});
|
|
357
|
+
}
|
|
358
|
+
function snapshotPiWebHostPiSessionsV1(value) {
|
|
359
|
+
if (typeof value !== "object" || value === null) throw invalidPiWebHostPiSessions();
|
|
360
|
+
const version = Reflect.get(value, "version");
|
|
361
|
+
const run = Reflect.get(value, "run");
|
|
362
|
+
const create = Reflect.get(value, "create");
|
|
363
|
+
if (version !== 1 || typeof run !== "function" || typeof create !== "function") throw invalidPiWebHostPiSessions();
|
|
364
|
+
return Object.freeze({
|
|
365
|
+
version: 1,
|
|
366
|
+
create: async (input) => {
|
|
367
|
+
const requested = snapshotPiWebHostWorkspaceSelection(input);
|
|
368
|
+
const result = await Reflect.apply(create, value, [requested]);
|
|
369
|
+
if (!isPublicJsonObject(result)) throw new Error("PI WEB host PI sessions capability v1 must return a created session object");
|
|
370
|
+
const sessionId = requiredBoundedPiSessionString(Reflect.get(result, "sessionId"), "returned sessionId", 512);
|
|
371
|
+
return Object.freeze({ sessionId });
|
|
372
|
+
},
|
|
373
|
+
run: async (input) => {
|
|
374
|
+
const requested = snapshotPiWebHostPiSessionRunInput(input);
|
|
375
|
+
return snapshotPiWebHostPiSessionRun(await Reflect.apply(run, value, [requested]));
|
|
376
|
+
}
|
|
377
|
+
});
|
|
378
|
+
}
|
|
379
|
+
function snapshotPiWebHostPiSessionRunInput(value) {
|
|
380
|
+
if (!isPublicJsonObject(value)) throw new Error("PI WEB host PI sessions capability v1 run input must be an object");
|
|
381
|
+
const supportedKeys = /* @__PURE__ */ new Set([
|
|
382
|
+
"projectId",
|
|
383
|
+
"workspaceId",
|
|
384
|
+
"prompt",
|
|
385
|
+
"model",
|
|
386
|
+
"thinkingLevel"
|
|
387
|
+
]);
|
|
388
|
+
for (const key of Reflect.ownKeys(value)) if (typeof key !== "string" || !supportedKeys.has(key)) throw new Error(`Unsupported PI WEB host PI sessions capability v1 run input field: ${String(key)}`);
|
|
389
|
+
if (!Object.hasOwn(value, "projectId") || !Object.hasOwn(value, "workspaceId") || !Object.hasOwn(value, "prompt")) throw new Error("PI WEB host PI sessions capability v1 run input must contain projectId, workspaceId, and prompt");
|
|
390
|
+
const projectId = requiredBoundedPiSessionString(Reflect.get(value, "projectId"), "projectId", 512);
|
|
391
|
+
const workspaceId = requiredBoundedPiSessionString(Reflect.get(value, "workspaceId"), "workspaceId", 512);
|
|
392
|
+
const prompt = requiredBoundedPiSessionUtf8String(Reflect.get(value, "prompt"), "prompt", 65536);
|
|
393
|
+
const settings = snapshotPiSessionSettings(value);
|
|
394
|
+
return Object.freeze({
|
|
395
|
+
projectId,
|
|
396
|
+
workspaceId,
|
|
397
|
+
prompt,
|
|
398
|
+
...settings
|
|
399
|
+
});
|
|
400
|
+
}
|
|
401
|
+
function snapshotPiWebHostPiSessionRun(value) {
|
|
402
|
+
if (!isPublicJsonObject(value)) throw new Error("PI WEB host PI sessions capability v1 must return a run object");
|
|
403
|
+
const sessionId = requiredBoundedPiSessionString(Reflect.get(value, "sessionId"), "returned sessionId", 512);
|
|
404
|
+
const completionValue = Reflect.get(value, "completion");
|
|
405
|
+
if (!isPromiseLike(completionValue)) throw new Error("PI WEB host PI sessions capability v1 run must expose completion");
|
|
406
|
+
const completion = Promise.resolve(completionValue).then(snapshotPiWebHostPiSessionRunCompletion);
|
|
407
|
+
return Object.freeze({
|
|
408
|
+
sessionId,
|
|
409
|
+
completion,
|
|
410
|
+
...snapshotPiSessionSettings(value)
|
|
411
|
+
});
|
|
412
|
+
}
|
|
413
|
+
function snapshotPiSessionSettings(value) {
|
|
414
|
+
const modelValue = Reflect.get(value, "model");
|
|
415
|
+
const thinkingValue = Reflect.get(value, "thinkingLevel");
|
|
416
|
+
const model = modelValue === void 0 ? void 0 : requiredBoundedPiSessionString(modelValue, "model", 512);
|
|
417
|
+
if (thinkingValue !== void 0 && (typeof thinkingValue !== "string" || !isKnownThinkingLevel(thinkingValue))) throw new Error("Invalid PI WEB host PI sessions thinkingLevel");
|
|
418
|
+
return {
|
|
419
|
+
...model === void 0 ? {} : { model },
|
|
420
|
+
...thinkingValue === void 0 ? {} : { thinkingLevel: thinkingValue }
|
|
421
|
+
};
|
|
422
|
+
}
|
|
423
|
+
function snapshotPiWebHostPiSessionRunCompletion(value) {
|
|
424
|
+
if (!isPublicJsonObject(value)) throw new Error("PI WEB host PI sessions capability v1 completion must be an object");
|
|
425
|
+
const status = Reflect.get(value, "status");
|
|
426
|
+
if (status === "completed" || status === "cancelled") return Object.freeze({ status });
|
|
427
|
+
if (status !== "failed") throw new Error("PI WEB host PI sessions capability v1 completion status is invalid");
|
|
428
|
+
const error = requiredBoundedPiSessionUtf8String(Reflect.get(value, "error"), "completion error", 4096);
|
|
429
|
+
return Object.freeze({
|
|
430
|
+
status,
|
|
431
|
+
error
|
|
432
|
+
});
|
|
433
|
+
}
|
|
434
|
+
function snapshotPiWebHostWorkspaceSelection(value) {
|
|
435
|
+
if (!isPublicJsonObject(value)) throw new Error("PI WEB host workspaces capability v1 selection must be an object");
|
|
436
|
+
const supportedKeys = /* @__PURE__ */ new Set(["projectId", "workspaceId"]);
|
|
437
|
+
for (const key of Reflect.ownKeys(value)) if (typeof key !== "string" || !supportedKeys.has(key)) throw new Error(`Unsupported PI WEB host workspaces capability v1 selection field: ${String(key)}`);
|
|
438
|
+
if (!Object.hasOwn(value, "projectId") || !Object.hasOwn(value, "workspaceId")) throw new Error("PI WEB host workspaces capability v1 selection must contain projectId and workspaceId");
|
|
439
|
+
const projectId = requiredPublicString(Reflect.get(value, "projectId"), "selection projectId");
|
|
440
|
+
const workspaceId = requiredPublicString(Reflect.get(value, "workspaceId"), "selection workspaceId");
|
|
441
|
+
return Object.freeze({
|
|
442
|
+
projectId,
|
|
443
|
+
workspaceId
|
|
444
|
+
});
|
|
445
|
+
}
|
|
446
|
+
function snapshotPiWebHostWorkspaceAuthority(value, requested) {
|
|
447
|
+
if (!isPublicJsonObject(value)) throw new Error("PI WEB host workspaces capability v1 must return an authority object");
|
|
448
|
+
const project = snapshotPiWebHostProject(Reflect.get(value, "project"));
|
|
449
|
+
const workspace = snapshotPiWebHostWorkspace(Reflect.get(value, "workspace"));
|
|
450
|
+
if (workspace.projectId !== project.id) throw new Error("PI WEB host workspaces capability v1 returned mismatched project and workspace scopes");
|
|
451
|
+
if (project.id !== requested.projectId || workspace.id !== requested.workspaceId) throw new Error("PI WEB host workspaces capability v1 returned authority outside the requested selection");
|
|
452
|
+
return Object.freeze({
|
|
453
|
+
project,
|
|
454
|
+
workspace
|
|
455
|
+
});
|
|
456
|
+
}
|
|
457
|
+
function snapshotPiWebHostProject(value) {
|
|
458
|
+
if (!isPublicJsonObject(value)) throw new Error("PI WEB host workspaces capability v1 project must be an object");
|
|
459
|
+
const id = requiredPublicString(Reflect.get(value, "id"), "project id");
|
|
460
|
+
const name = requiredPublicString(Reflect.get(value, "name"), "project name");
|
|
461
|
+
const path = requiredPublicString(Reflect.get(value, "path"), "project path");
|
|
462
|
+
return Object.freeze({
|
|
463
|
+
id,
|
|
464
|
+
name,
|
|
465
|
+
path
|
|
466
|
+
});
|
|
467
|
+
}
|
|
468
|
+
function snapshotPiWebHostWorkspace(value) {
|
|
469
|
+
if (!isPublicJsonObject(value)) throw new Error("PI WEB host workspaces capability v1 workspace must be an object");
|
|
470
|
+
const id = requiredPublicString(Reflect.get(value, "id"), "workspace id");
|
|
471
|
+
const projectId = requiredPublicString(Reflect.get(value, "projectId"), "workspace projectId");
|
|
472
|
+
const path = requiredPublicString(Reflect.get(value, "path"), "workspace path");
|
|
473
|
+
const label = requiredPublicString(Reflect.get(value, "label"), "workspace label");
|
|
474
|
+
const isMain = Reflect.get(value, "isMain");
|
|
475
|
+
if (typeof isMain !== "boolean") throw new Error("PI WEB host workspaces capability v1 workspace isMain must be a boolean");
|
|
476
|
+
const providerValue = Reflect.get(value, "provider");
|
|
477
|
+
const provider = providerValue === void 0 ? void 0 : snapshotPiWebHostWorkspaceProvider(providerValue);
|
|
478
|
+
return Object.freeze({
|
|
479
|
+
id,
|
|
480
|
+
projectId,
|
|
481
|
+
path,
|
|
482
|
+
label,
|
|
483
|
+
isMain,
|
|
484
|
+
...provider === void 0 ? {} : { provider }
|
|
485
|
+
});
|
|
486
|
+
}
|
|
487
|
+
function snapshotPiWebHostWorkspaceProvider(value) {
|
|
488
|
+
if (!isPublicJsonObject(value)) throw new Error("PI WEB host workspaces capability v1 workspace provider must be an object");
|
|
489
|
+
const pluginId = requiredPublicString(Reflect.get(value, "pluginId"), "workspace provider pluginId");
|
|
490
|
+
const capabilitiesValue = Reflect.get(value, "capabilities");
|
|
491
|
+
if (!isPublicJsonObject(capabilitiesValue)) throw new Error("PI WEB host workspaces capability v1 workspace provider capabilities are invalid");
|
|
492
|
+
const remove = Reflect.get(capabilitiesValue, "remove");
|
|
493
|
+
if (typeof remove !== "boolean") throw new Error("PI WEB host workspaces capability v1 workspace provider capabilities are invalid");
|
|
494
|
+
const capabilities = Object.freeze({ remove });
|
|
495
|
+
const metadataValue = Reflect.get(value, "metadata");
|
|
496
|
+
const metadata = metadataValue === void 0 ? void 0 : clonePublicJsonObject(metadataValue, "workspace provider metadata");
|
|
497
|
+
return Object.freeze({
|
|
498
|
+
pluginId,
|
|
499
|
+
capabilities,
|
|
500
|
+
...metadata === void 0 ? {} : { metadata }
|
|
501
|
+
});
|
|
502
|
+
}
|
|
503
|
+
function clonePublicJsonObject(value, label) {
|
|
504
|
+
if (!isPublicJsonObject(value)) throw new Error(`PI WEB host workspaces capability v1 ${label} must be a JSON object`);
|
|
505
|
+
return clonePublicJsonRecord(value, /* @__PURE__ */ new Set(), label);
|
|
506
|
+
}
|
|
507
|
+
function clonePublicJsonRecord(value, ancestors, label) {
|
|
508
|
+
if (ancestors.has(value)) throw new Error(`PI WEB host workspaces capability v1 ${label} must not contain cycles`);
|
|
509
|
+
ancestors.add(value);
|
|
510
|
+
try {
|
|
511
|
+
const output = {};
|
|
512
|
+
for (const key of Object.keys(value)) Object.defineProperty(output, key, {
|
|
513
|
+
value: clonePublicJsonValue(value[key], ancestors, label),
|
|
514
|
+
enumerable: true,
|
|
515
|
+
configurable: true,
|
|
516
|
+
writable: true
|
|
517
|
+
});
|
|
518
|
+
return Object.freeze(output);
|
|
519
|
+
} finally {
|
|
520
|
+
ancestors.delete(value);
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
function clonePublicJsonValue(value, ancestors, label) {
|
|
524
|
+
if (value === null || typeof value === "string" || typeof value === "boolean") return value;
|
|
525
|
+
if (typeof value === "number") {
|
|
526
|
+
if (!Number.isFinite(value)) throw new Error(`PI WEB host workspaces capability v1 ${label} must contain only finite JSON numbers`);
|
|
527
|
+
return value;
|
|
528
|
+
}
|
|
529
|
+
if (Array.isArray(value)) {
|
|
530
|
+
if (ancestors.has(value)) throw new Error(`PI WEB host workspaces capability v1 ${label} must not contain cycles`);
|
|
531
|
+
ancestors.add(value);
|
|
532
|
+
try {
|
|
533
|
+
const output = [];
|
|
534
|
+
for (let index = 0; index < value.length; index += 1) {
|
|
535
|
+
if (!Object.hasOwn(value, index)) throw new Error(`PI WEB host workspaces capability v1 ${label} must not contain sparse arrays`);
|
|
536
|
+
output.push(clonePublicJsonValue(value[index], ancestors, label));
|
|
537
|
+
}
|
|
538
|
+
return Object.freeze(output);
|
|
539
|
+
} finally {
|
|
540
|
+
ancestors.delete(value);
|
|
541
|
+
}
|
|
542
|
+
}
|
|
543
|
+
if (isPublicJsonObject(value)) return clonePublicJsonRecord(value, ancestors, label);
|
|
544
|
+
throw new Error(`PI WEB host workspaces capability v1 ${label} must contain only JSON values`);
|
|
545
|
+
}
|
|
546
|
+
function requiredPublicString(value, label) {
|
|
547
|
+
if (typeof value !== "string" || value === "") throw new Error(`PI WEB host workspaces capability v1 ${label} must be a non-empty string`);
|
|
548
|
+
return value;
|
|
549
|
+
}
|
|
550
|
+
function requiredBoundedPiSessionString(value, label, maxLength) {
|
|
551
|
+
if (typeof value !== "string" || value === "") throw new Error(`PI WEB host PI sessions capability v1 ${label} must be a non-empty string`);
|
|
552
|
+
if (value.length > maxLength) throw new Error(`PI WEB host PI sessions capability v1 ${label} must be at most ${String(maxLength)} characters`);
|
|
553
|
+
return value;
|
|
554
|
+
}
|
|
555
|
+
function requiredBoundedPiSessionUtf8String(value, label, maxBytes) {
|
|
556
|
+
if (typeof value !== "string" || value === "") throw new Error(`PI WEB host PI sessions capability v1 ${label} must be a non-empty string`);
|
|
557
|
+
if (publicStringExceedsUtf8ByteLimit(value, maxBytes)) throw new Error(`PI WEB host PI sessions capability v1 ${label} must be at most ${String(maxBytes)} UTF-8 bytes`);
|
|
558
|
+
return value;
|
|
559
|
+
}
|
|
560
|
+
function publicStringExceedsUtf8ByteLimit(value, maxBytes) {
|
|
561
|
+
let bytes = 0;
|
|
562
|
+
for (let index = 0; index < value.length; index += 1) {
|
|
563
|
+
const codePoint = value.codePointAt(index);
|
|
564
|
+
if (codePoint === void 0) break;
|
|
565
|
+
if (codePoint > 65535) index += 1;
|
|
566
|
+
bytes += codePoint <= 127 ? 1 : codePoint <= 2047 ? 2 : codePoint <= 65535 ? 3 : 4;
|
|
567
|
+
if (bytes > maxBytes) return true;
|
|
568
|
+
}
|
|
569
|
+
return false;
|
|
570
|
+
}
|
|
571
|
+
function isPromiseLike(value) {
|
|
572
|
+
return typeof value === "object" && value !== null || typeof value === "function" ? typeof Reflect.get(value, "then") === "function" : false;
|
|
573
|
+
}
|
|
574
|
+
function isPublicJsonObject(value) {
|
|
575
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) return false;
|
|
576
|
+
const prototype = Object.getPrototypeOf(value);
|
|
577
|
+
return prototype === Object.prototype || prototype === null;
|
|
578
|
+
}
|
|
579
|
+
function invalidPiWebHostWorkspaces() {
|
|
580
|
+
return /* @__PURE__ */ new Error("PI WEB host workspaces capability v1 must expose resolve");
|
|
581
|
+
}
|
|
582
|
+
function invalidPiWebHostPiSessions() {
|
|
583
|
+
return /* @__PURE__ */ new Error("PI WEB host PI sessions capability v1 must expose create and run");
|
|
584
|
+
}
|
|
585
|
+
// pi-packages/scheduled-tasks/extensions/index.ts
|
|
586
|
+
var id = (description) => Type.String({
|
|
587
|
+
minLength: 1,
|
|
588
|
+
maxLength: 512,
|
|
589
|
+
description
|
|
590
|
+
});
|
|
591
|
+
var taskId = id("Task ID returned by scheduled task tools.");
|
|
592
|
+
var executionId = id("Execution ID returned by dispatch or history, or included in the task's initial message.");
|
|
593
|
+
var revision = Type.Integer({
|
|
594
|
+
minimum: 1,
|
|
595
|
+
description: "Current task revision from inspect; stale writes reject. Read again before retrying."
|
|
596
|
+
});
|
|
597
|
+
var definition = Type.Object({
|
|
598
|
+
name: Type.String({
|
|
599
|
+
minLength: 1,
|
|
600
|
+
maxLength: 512
|
|
601
|
+
}),
|
|
602
|
+
projectId: id("Registered project ID from scheduled_tasks_targets; not a filesystem path."),
|
|
603
|
+
workspaceId: id("Registered workspace ID from scheduled_tasks_targets; not a filesystem path."),
|
|
604
|
+
prompt: Type.String({
|
|
605
|
+
minLength: 1,
|
|
606
|
+
maxLength: 49152,
|
|
607
|
+
description: "Initial instructions for a normal conversation."
|
|
608
|
+
}),
|
|
609
|
+
model: Type.Optional(Type.String({
|
|
610
|
+
minLength: 1,
|
|
611
|
+
maxLength: 512,
|
|
612
|
+
description: "Requested provider/model ID. Omit to use the session default. If unavailable at dispatch, the scheduler uses the default and records a notice."
|
|
613
|
+
})),
|
|
614
|
+
thinkingLevel: Type.Optional(Type.Enum([
|
|
615
|
+
"off",
|
|
616
|
+
"minimal",
|
|
617
|
+
"low",
|
|
618
|
+
"medium",
|
|
619
|
+
"high",
|
|
620
|
+
"xhigh",
|
|
621
|
+
"max"
|
|
622
|
+
], { description: "Requested thinking level. Omit to use the session default. If unavailable at dispatch, the scheduler uses the default and records a notice." })),
|
|
623
|
+
timezone: Type.Optional(Type.String({ description: "IANA timezone. Omit only to use the configured default; if no default exists, ask the user." })),
|
|
624
|
+
schedule: Type.Union([Type.Object({
|
|
625
|
+
kind: Type.Literal("once"),
|
|
626
|
+
at: Type.String({ description: "Future ISO timestamp with an explicit UTC offset or Z." })
|
|
627
|
+
}, { additionalProperties: false }), Type.Object({
|
|
628
|
+
kind: Type.Literal("cron"),
|
|
629
|
+
expression: Type.String({ description: "Deterministic five-field cron expression, evaluated in the task timezone." })
|
|
630
|
+
}, { additionalProperties: false })]),
|
|
631
|
+
contextPaths: Type.Optional(Type.Array(Type.String({ description: "Workspace-relative shared context file; read when dispatched, not snapshotted." }), { maxItems: 32 }))
|
|
632
|
+
}, { additionalProperties: false });
|
|
633
|
+
var object = (properties) => Type.Object(properties, { additionalProperties: false });
|
|
634
|
+
/** Thin deferred transport: the daemon owns all state, validation and dispatch. */
|
|
635
|
+
function scheduledTasksExtension(pi) {
|
|
636
|
+
function register(operation, description, parameters, readOnly) {
|
|
637
|
+
pi.registerTool(defineTool({
|
|
638
|
+
name: `scheduled_tasks_${operation}`,
|
|
639
|
+
label: `Scheduled tasks: ${operation}`,
|
|
640
|
+
description,
|
|
641
|
+
exposure: "deferred",
|
|
642
|
+
namespace: {
|
|
643
|
+
name: "scheduled_tasks",
|
|
644
|
+
description: "Create and manage machine-local scheduled agent tasks and explicit execution outcomes.",
|
|
645
|
+
instructions: "Use targets for registered project/workspace IDs. Inspect before revision-checked edits. Ask for timezone if no configured default exists. Pause/archive affect only future scheduling. Delete requires an archived task and permanently removes it and all its history, not conversations. Dispatch creates an ordinary independent conversation. Never infer an execution outcome from session activity; use report explicitly. Do not blindly repeat a dispatch after an error or uncertainty; inspect history first."
|
|
646
|
+
},
|
|
647
|
+
annotations: {
|
|
648
|
+
readOnlyHint: readOnly,
|
|
649
|
+
destructiveHint: operation === "delete",
|
|
650
|
+
openWorldHint: !readOnly,
|
|
651
|
+
idempotentHint: readOnly
|
|
652
|
+
},
|
|
653
|
+
parameters,
|
|
654
|
+
async execute(_toolCallId, input, signal) {
|
|
655
|
+
signal?.throwIfAborted();
|
|
656
|
+
const peer = createCompanionBackend(pi.events, "scheduled-tasks").forScope({ kind: "machine" });
|
|
657
|
+
if (peer.request === void 0) throw new Error("Scheduled tasks backend does not support requests");
|
|
658
|
+
const result = await peer.request(operation, input, signal === void 0 ? {} : { signal });
|
|
659
|
+
return {
|
|
660
|
+
content: [{
|
|
661
|
+
type: "text",
|
|
662
|
+
text: JSON.stringify(result)
|
|
663
|
+
}],
|
|
664
|
+
details: result
|
|
665
|
+
};
|
|
666
|
+
}
|
|
667
|
+
}));
|
|
668
|
+
}
|
|
669
|
+
register("targets", "List registered local projects, or workspaces for a project. Use these opaque IDs when creating tasks.", object({ projectId: Type.Optional(id("Omit to list projects; supply a project ID to list its workspaces.")) }), true);
|
|
670
|
+
register("overview", "List scheduled tasks, configured default timezone, next dispatches and latest explicit execution outcomes.", object({}), true);
|
|
671
|
+
register("inspect", "Read a task's full current definition and revision before editing it.", object({ taskId }), true);
|
|
672
|
+
register("create", "Create a one-off or recurring agent task. Resolve target IDs with targets first. If timezone is omitted and no default exists, ask the user; do not guess.", definition, false);
|
|
673
|
+
register("update", "Replace a task definition at its current revision. Preserve unchanged fields from inspect. Changes affect future dispatches, not existing conversations.", object({
|
|
674
|
+
taskId,
|
|
675
|
+
revision,
|
|
676
|
+
definition
|
|
677
|
+
}), false);
|
|
678
|
+
register("pause", "Pause or resume future scheduled dispatches. Does not pause or resume any existing conversation.", object({
|
|
679
|
+
taskId,
|
|
680
|
+
revision,
|
|
681
|
+
paused: Type.Boolean()
|
|
682
|
+
}), false);
|
|
683
|
+
register("archive", "Archive a task, preventing future scheduled and manual dispatches. Preserve history and existing conversations.", object({
|
|
684
|
+
taskId,
|
|
685
|
+
revision
|
|
686
|
+
}), false);
|
|
687
|
+
register("delete", "Permanently delete a task and all its revisions, execution history and outcome reports. Only archived tasks can be deleted; archive first and use its new revision. Existing conversations and their transcripts are not deleted or stopped. Rejects while dispatch admission is in progress; inspect again before retrying.", object({
|
|
688
|
+
taskId,
|
|
689
|
+
revision
|
|
690
|
+
}), false);
|
|
691
|
+
register("dispatch", "Manually dispatch one execution as a normal independent conversation, including for a paused task. Does not consume its scheduled occurrence. Inspect history before retrying any ambiguous result; no automatic retries.", object({ taskId }), false);
|
|
692
|
+
register("history", "Read paged execution history and conversation IDs, optionally limited to one task. Outcomes are explicit reports, not session status.", object({
|
|
693
|
+
taskId: Type.Optional(taskId),
|
|
694
|
+
limit: Type.Optional(Type.Integer({
|
|
695
|
+
minimum: 1,
|
|
696
|
+
maximum: 50
|
|
697
|
+
})),
|
|
698
|
+
offset: Type.Optional(Type.Integer({ minimum: 0 }))
|
|
699
|
+
}), true);
|
|
700
|
+
register("execution", "Retrieve an execution's dispatched task revision, instructions, shared context paths, conversation identity and full outcome correction history.", object({ executionId }), true);
|
|
701
|
+
register("report", "Explicitly report a completed or errored execution with a summary, or correct a previous report. Corrections retain history. Reporting does not stop the conversation or disable a recurring task.", object({
|
|
702
|
+
executionId,
|
|
703
|
+
outcome: Type.Enum(["completed", "errored"]),
|
|
704
|
+
summary: Type.String({
|
|
705
|
+
minLength: 1,
|
|
706
|
+
maxLength: 16384
|
|
707
|
+
})
|
|
708
|
+
}), false);
|
|
709
|
+
}
|
|
710
|
+
export { scheduledTasksExtension as default };
|