@chainingintention/pi-web-cn 2.202610.5 → 2.202611.2
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-Dur6Wi62.js +3952 -0
- package/dist/client/assets/SettingsDialog-SOljSiee.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-DjGXa4ZP.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-CInvlJKI.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-CWcn0Deu.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-B-0wkiKe.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 +58 -2
- 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 +76 -12
- 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 +47 -16
- 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 +491 -283
- 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 -28
- 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 +19 -2
- package/dist/server/storage/navigationPreferenceStore.js.map +1 -1
- package/dist/server/storage/sessionPinStore.js +101 -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 +5 -0
- package/dist/shared/apiTypes.js.map +1 -1
- package/dist/shared/capabilities.js +9 -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 -4
- 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/dist/server/sessions/sessionPinStore.js +0 -109
- package/dist/server/sessions/sessionPinStore.js.map +0 -1
- 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,178 @@
|
|
|
1
|
+
// Generated from pi-packages/scheduled-tasks/service.ts. Do not edit directly.
|
|
2
|
+
import { THINKING_LEVELS, text, validateTask } from "./domain.js";
|
|
3
|
+
/** Transport-independent operations shared by the companion and read-only dashboard. */
|
|
4
|
+
export class TaskService {
|
|
5
|
+
store;
|
|
6
|
+
scheduler;
|
|
7
|
+
validateTarget;
|
|
8
|
+
defaultTimezone;
|
|
9
|
+
now;
|
|
10
|
+
catalog;
|
|
11
|
+
constructor(store, scheduler, validateTarget, defaultTimezone, now, catalog) {
|
|
12
|
+
this.store = store;
|
|
13
|
+
this.scheduler = scheduler;
|
|
14
|
+
this.validateTarget = validateTarget;
|
|
15
|
+
this.defaultTimezone = defaultTimezone;
|
|
16
|
+
this.now = now;
|
|
17
|
+
this.catalog = catalog;
|
|
18
|
+
}
|
|
19
|
+
async request(operation, input, signal) {
|
|
20
|
+
const args = object(input ?? {});
|
|
21
|
+
switch (operation) {
|
|
22
|
+
case "targets": {
|
|
23
|
+
only(args, ["projectId"]);
|
|
24
|
+
const options = signal === undefined ? {} : { signal };
|
|
25
|
+
return args["projectId"] === undefined
|
|
26
|
+
? { projects: await this.catalog.projects.list(options) }
|
|
27
|
+
: { workspaces: await this.catalog.workspaces.list(identifier(args, "projectId"), options) };
|
|
28
|
+
}
|
|
29
|
+
case "overview":
|
|
30
|
+
only(args, []);
|
|
31
|
+
return { defaultTimezone: this.defaultTimezone ?? null, tasks: this.store.listTasks().map((task) => ({
|
|
32
|
+
...taskSummary(task), latestExecution: executionSummary(this.store.executions(task.id, 1)[0]),
|
|
33
|
+
})) };
|
|
34
|
+
case "inspect": {
|
|
35
|
+
only(args, ["taskId"]);
|
|
36
|
+
const id = identifier(args, "taskId");
|
|
37
|
+
return this.store.task(id);
|
|
38
|
+
}
|
|
39
|
+
case "history": {
|
|
40
|
+
only(args, ["taskId", "limit", "offset"]);
|
|
41
|
+
const taskId = args["taskId"] === undefined ? undefined : identifier(args, "taskId");
|
|
42
|
+
const limit = pageInteger(args["limit"] ?? 20, "limit", 1, 50);
|
|
43
|
+
const offset = pageInteger(args["offset"] ?? 0, "offset", 0, Number.MAX_SAFE_INTEGER);
|
|
44
|
+
const rows = this.store.executions(taskId, limit + 1, offset);
|
|
45
|
+
return { executions: rows.slice(0, limit).map(executionSummary), nextOffset: rows.length > limit ? offset + limit : null };
|
|
46
|
+
}
|
|
47
|
+
case "execution":
|
|
48
|
+
only(args, ["executionId"]);
|
|
49
|
+
return this.store.execution(identifier(args, "executionId"));
|
|
50
|
+
case "create": {
|
|
51
|
+
const task = parseDefinition(args, this.defaultTimezone, this.now());
|
|
52
|
+
await this.validateTarget(task);
|
|
53
|
+
return this.store.create(task, this.now());
|
|
54
|
+
}
|
|
55
|
+
case "update": {
|
|
56
|
+
only(args, ["taskId", "revision", "definition"]);
|
|
57
|
+
const task = parseDefinition(object(args["definition"]), this.defaultTimezone, this.now());
|
|
58
|
+
await this.validateTarget(task);
|
|
59
|
+
return this.store.update(identifier(args, "taskId"), revision(args), task, this.now());
|
|
60
|
+
}
|
|
61
|
+
case "pause":
|
|
62
|
+
only(args, ["taskId", "revision", "paused"]);
|
|
63
|
+
if (typeof args["paused"] !== "boolean")
|
|
64
|
+
throw new Error("paused must be a boolean");
|
|
65
|
+
return this.store.setPaused(identifier(args, "taskId"), revision(args), args["paused"], this.now());
|
|
66
|
+
case "archive":
|
|
67
|
+
only(args, ["taskId", "revision"]);
|
|
68
|
+
return this.store.archive(identifier(args, "taskId"), revision(args), this.now());
|
|
69
|
+
case "delete":
|
|
70
|
+
only(args, ["taskId", "revision"]);
|
|
71
|
+
return this.scheduler.deleteTask(identifier(args, "taskId"), revision(args));
|
|
72
|
+
case "dispatch":
|
|
73
|
+
only(args, ["taskId"]);
|
|
74
|
+
return this.scheduler.dispatchManually(identifier(args, "taskId"));
|
|
75
|
+
case "report":
|
|
76
|
+
only(args, ["executionId", "outcome", "summary"]);
|
|
77
|
+
return this.store.report(identifier(args, "executionId"), text(args["outcome"], "outcome", 32), text(args["summary"], "summary", 16 * 1024), this.now());
|
|
78
|
+
default: throw new Error("Unknown scheduled tasks operation");
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
export function configuredTimezone(value) {
|
|
83
|
+
if (value === undefined)
|
|
84
|
+
return undefined;
|
|
85
|
+
const timezone = text(value, "defaultTimezone", 256);
|
|
86
|
+
new Intl.DateTimeFormat("en", { timeZone: timezone }).format();
|
|
87
|
+
return timezone;
|
|
88
|
+
}
|
|
89
|
+
function parseDefinition(args, defaultTimezone, now) {
|
|
90
|
+
only(args, ["name", "projectId", "workspaceId", "prompt", "timezone", "schedule", "contextPaths", "model", "thinkingLevel"]);
|
|
91
|
+
const timezone = args["timezone"] === undefined ? defaultTimezone : args["timezone"];
|
|
92
|
+
if (timezone === undefined)
|
|
93
|
+
throw new Error("No default timezone is configured. Ask the user for a timezone before creating or rescheduling a task.");
|
|
94
|
+
const schedule = object(args["schedule"]);
|
|
95
|
+
let parsedSchedule;
|
|
96
|
+
if (schedule["kind"] === "once") {
|
|
97
|
+
only(schedule, ["kind", "at"]);
|
|
98
|
+
parsedSchedule = { kind: "once", at: text(schedule["at"], "at", 256) };
|
|
99
|
+
}
|
|
100
|
+
else if (schedule["kind"] === "cron") {
|
|
101
|
+
only(schedule, ["kind", "expression"]);
|
|
102
|
+
parsedSchedule = { kind: "cron", expression: text(schedule["expression"], "expression", 256) };
|
|
103
|
+
}
|
|
104
|
+
else
|
|
105
|
+
throw new Error("Schedule kind must be once or cron");
|
|
106
|
+
const paths = args["contextPaths"] ?? [];
|
|
107
|
+
if (!Array.isArray(paths))
|
|
108
|
+
throw new Error("contextPaths must be an array");
|
|
109
|
+
return validateTask({
|
|
110
|
+
name: text(args["name"], "name", 512), projectId: identifier(args, "projectId"), workspaceId: identifier(args, "workspaceId"),
|
|
111
|
+
prompt: text(args["prompt"], "prompt", 48 * 1024), timezone: text(timezone, "timezone", 256),
|
|
112
|
+
schedule: parsedSchedule, contextPaths: paths.map((path) => text(path, "context path", 1024)),
|
|
113
|
+
...(args["model"] === undefined ? {} : { model: text(args["model"], "model", 512) }),
|
|
114
|
+
...(args["thinkingLevel"] === undefined ? {} : { thinkingLevel: parseThinkingLevel(args["thinkingLevel"]) }),
|
|
115
|
+
}, now);
|
|
116
|
+
}
|
|
117
|
+
function parseThinkingLevel(value) {
|
|
118
|
+
const level = THINKING_LEVELS.find((candidate) => candidate === value);
|
|
119
|
+
if (level === undefined)
|
|
120
|
+
throw new Error("Invalid thinkingLevel");
|
|
121
|
+
return level;
|
|
122
|
+
}
|
|
123
|
+
function object(value) {
|
|
124
|
+
if (typeof value !== "object" || value === null || Array.isArray(value))
|
|
125
|
+
throw new Error("Expected an input object");
|
|
126
|
+
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- Narrowed JSON transport object.
|
|
127
|
+
return value;
|
|
128
|
+
}
|
|
129
|
+
function only(args, allowed) {
|
|
130
|
+
if (Object.keys(args).some((key) => !allowed.includes(key)))
|
|
131
|
+
throw new Error("Unexpected input field");
|
|
132
|
+
}
|
|
133
|
+
function identifier(args, key) { return text(args[key], key, 512); }
|
|
134
|
+
function revision(args) {
|
|
135
|
+
const value = args["revision"];
|
|
136
|
+
if (typeof value !== "number" || !Number.isSafeInteger(value) || value < 1)
|
|
137
|
+
throw new Error("Expected a positive task revision");
|
|
138
|
+
return value;
|
|
139
|
+
}
|
|
140
|
+
function pageInteger(value, label, min, max) {
|
|
141
|
+
if (typeof value !== "number" || !Number.isSafeInteger(value) || value < min || value > max) {
|
|
142
|
+
throw new Error(`${label} must be an integer from ${String(min)} to ${String(max)}`);
|
|
143
|
+
}
|
|
144
|
+
return value;
|
|
145
|
+
}
|
|
146
|
+
function taskSummary(task) {
|
|
147
|
+
return {
|
|
148
|
+
id: task.id, name: task.name, revision: task.revision, projectId: task.projectId, workspaceId: task.workspaceId,
|
|
149
|
+
schedule: task.schedule, timezone: task.timezone, paused: task.paused, archived: task.archived, nextDue: task.nextDue,
|
|
150
|
+
...(task.model === undefined ? {} : { model: task.model }),
|
|
151
|
+
...(task.thinkingLevel === undefined ? {} : { thinkingLevel: task.thinkingLevel }),
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
function executionSummary(execution) {
|
|
155
|
+
if (execution === undefined)
|
|
156
|
+
return null;
|
|
157
|
+
return {
|
|
158
|
+
id: execution.id, taskId: execution.taskId, task: taskSummary(execution.task), trigger: execution.trigger,
|
|
159
|
+
dueAt: execution.dueAt, createdAt: execution.createdAt, status: execution.status, sessionId: execution.sessionId,
|
|
160
|
+
dispatchError: execution.dispatchError, latestReport: execution.reports.at(-1) ?? null, notices: execution.notices,
|
|
161
|
+
...(execution.model === undefined ? {} : { model: execution.model }),
|
|
162
|
+
...(execution.thinkingLevel === undefined ? {} : { thinkingLevel: execution.thinkingLevel }),
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
/** Instructions are attributed in the ordinary initial message, not inferred from session activity. */
|
|
166
|
+
export function dispatchPrompt(execution) {
|
|
167
|
+
return [
|
|
168
|
+
"This conversation was dispatched by the Scheduled agent tasks plugin.",
|
|
169
|
+
`Task ID: ${execution.taskId}; execution ID: ${execution.id}; task revision: ${String(execution.task.revision)}.`,
|
|
170
|
+
"Discover scheduled_tasks tools through tool_search or codemode searchTools. Retrieve this execution's context with scheduled_tasks_execution.",
|
|
171
|
+
"After doing the work, use scheduled_tasks_report to explicitly report completed or errored with a summary for this execution ID. You may correct an earlier report; reports never stop the conversation.",
|
|
172
|
+
"You have the same task-management authority as an ordinary session. Do not infer an execution outcome from session activity.",
|
|
173
|
+
...(execution.task.contextPaths.length === 0 ? [] : [
|
|
174
|
+
`Read these workspace-relative shared context files before starting (their contents may have changed): ${JSON.stringify(execution.task.contextPaths)}`,
|
|
175
|
+
]),
|
|
176
|
+
"", "Task instructions:", execution.task.prompt,
|
|
177
|
+
].join("\n");
|
|
178
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: scheduled-tasks
|
|
3
|
+
description: Schedule agent work for later, create or change recurring tasks, pause or resume future scheduling, inspect task execution history, or explicitly report an outcome from a task-dispatched conversation in PI WEB.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Scheduled agent tasks
|
|
7
|
+
|
|
8
|
+
Discover the deferred `scheduled_tasks` tools with `tool_search` or codemode `searchTools`. Use `describeNamespace("scheduled_tasks")` for guidance and inspect each tool's schema before calling it. These tools require this package's enabled PI WEB backend on the session's machine; they do not use the browser's selected machine.
|
|
9
|
+
|
|
10
|
+
- Start with `scheduled_tasks_overview` for tasks and the configured default timezone. Use `scheduled_tasks_targets` to list registered projects, then supply a project ID to list its workspaces. Do not substitute filesystem paths for IDs.
|
|
11
|
+
- Translate the user's request into an initial prompt and either a one-off offset-bearing ISO timestamp or a five-field cron schedule. Store an explicit IANA timezone. If the user omitted it, use the configured default; if there is no default, ask rather than guessing. Resolve material schedule ambiguity before creating a task.
|
|
12
|
+
- Preserve intent; do not plan execution. Task creation is transcription plus scheduling, not task execution or investigation. Keep the prompt close to the user's request. Do not add goals, deliverables, obligations, workflows, assessment criteria, limits, tools, files, documentation references, or other implementation choices unless the user explicitly requested them. Leave investigation and execution decisions to the dispatched agent. Ask before making assumptions that materially change the work.
|
|
13
|
+
- Set optional `model` (provider/model ID) and `thinkingLevel` (`off`, `minimal`, `low`, `medium`, `high`, `xhigh`, `max`) only when requested. Omit either independently to use the session default. If the model is unavailable at dispatch, the scheduler falls back to the default model and records an execution notice. Unavailable thinking levels similarly fall back to the session default, with a notice. Inspect execution notices and effective selections in history or execution details. Do not remove or rewrite the requested task settings because one execution fell back.
|
|
14
|
+
- Populate optional `contextPaths` only when the user explicitly asks to include files. Paths are workspace-relative; the dispatched agent reads their current contents, not snapshots.
|
|
15
|
+
- Before creating a task or updating its definition, show the proposed name, exact prompt, schedule, timezone, target project/workspace, any context paths, and any model/thinking overrides; for updates, highlight what changes. Use `ask_user` to request explicit confirmation and wait for the answer before calling `scheduled_tasks_create` or `scheduled_tasks_update`. The initial request to schedule or change work is not confirmation of the proposed definition. Request confirmation again if substantive changes follow confirmation; harmless formatting or normalization that preserves meaning does not require renewed confirmation.
|
|
16
|
+
- Inspect before edits. `scheduled_tasks_update` replaces the full definition and requires its current revision; preserve unchanged fields. Pause/resume, archive, and delete also require the current revision. A stale revision means inspect again, not overwrite blindly.
|
|
17
|
+
- Pausing affects future scheduled dispatches only. Archiving also prevents manual dispatch. Neither affects existing conversations. A recurring task dispatches each occurrence independently, even when earlier executions have no outcome report.
|
|
18
|
+
- `scheduled_tasks_delete` permanently removes an archived task, all definition revisions, execution records, and outcome reports. Reject deletion of a task that is not archived; archive it first and inspect its new revision before deleting. Existing conversations and transcripts are neither deleted nor stopped. Deletion rejects while a dispatch is still being admitted; wait and inspect again before retrying. Deleted executions no longer accept outcome reports.
|
|
19
|
+
- Manual dispatch starts a normal independent conversation without consuming the next scheduled occurrence. Inspect history after a failed or uncertain launch; never blindly retry an ambiguous dispatch. There are no automatic retries after an uncertain launch; model/thinking fallback happens only after a typed rejection confirming that no initial prompt was submitted.
|
|
20
|
+
- Use `scheduled_tasks_history` for paged records and `scheduled_tasks_execution` for the exact dispatched task revision, prompt, context references, conversation ID, requested and effective model/thinking selections, dispatch notices and all outcome corrections.
|
|
21
|
+
|
|
22
|
+
## When dispatched from a task
|
|
23
|
+
|
|
24
|
+
The initial message identifies your task and execution IDs. Retrieve your context with `scheduled_tasks_execution`, read any shared files, then do the requested work. You have the same task-management authority as any ordinary session; no extra plugin-specific approval applies.
|
|
25
|
+
|
|
26
|
+
Explicitly call `scheduled_tasks_report` with your execution ID, `completed` or `errored`, and a useful summary when you have an outcome. You may correct an earlier report; all reports remain in history. If you are still working or waiting for an answer, leave the execution dispatched. Session idle/error/close signals do not determine its outcome. Reporting does not stop your conversation or disable future occurrences.
|
|
27
|
+
|
|
28
|
+
## Availability
|
|
29
|
+
|
|
30
|
+
The scheduler runs while its owning daemon is running, without a browser. It cannot wake the machine. After downtime it skips missed recurring occurrences and dispatches an overdue one-off once. Disabling the plugin stops future dispatches and preserves its SQLite tasks/history and existing conversations.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// Generated from pi-packages/scheduled-tasks/sqlite.ts. Do not edit directly.
|
|
2
|
+
import { createRequire } from "node:module";
|
|
3
|
+
/** Both supported runtimes provide SQLite; no native npm addon or external service is needed. */
|
|
4
|
+
export function openSqlite(path) {
|
|
5
|
+
const require = createRequire(import.meta.url);
|
|
6
|
+
const bun = process.versions["bun"] !== undefined;
|
|
7
|
+
const loaded = require(bun ? "bun:sqlite" : "node:sqlite");
|
|
8
|
+
const name = bun ? "Database" : "DatabaseSync";
|
|
9
|
+
if (!isSqliteModule(loaded, name))
|
|
10
|
+
throw new Error("Runtime does not provide SQLite");
|
|
11
|
+
const Database = loaded[name];
|
|
12
|
+
if (Database === undefined)
|
|
13
|
+
throw new Error("SQLite constructor unavailable");
|
|
14
|
+
return new Database(path);
|
|
15
|
+
}
|
|
16
|
+
function isSqliteModule(value, name) {
|
|
17
|
+
return typeof value === "object" && value !== null && typeof Reflect.get(value, name) === "function";
|
|
18
|
+
}
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
// Generated from pi-packages/scheduled-tasks/store.ts. Do not edit directly.
|
|
2
|
+
import { randomUUID } from "node:crypto";
|
|
3
|
+
import { nextOccurrence, text, validateTask } from "./domain.js";
|
|
4
|
+
import { openSqlite } from "./sqlite.js";
|
|
5
|
+
/** The daemon activation owns one store. Every multi-record mutation is a local SQLite transaction. */
|
|
6
|
+
export class TaskStore {
|
|
7
|
+
db;
|
|
8
|
+
id;
|
|
9
|
+
constructor(db, id = randomUUID) {
|
|
10
|
+
this.db = db;
|
|
11
|
+
this.id = id;
|
|
12
|
+
db.exec("PRAGMA foreign_keys = ON; PRAGMA journal_mode = WAL; PRAGMA busy_timeout = 5000;");
|
|
13
|
+
const version = db.prepare("PRAGMA user_version").get()?.["user_version"];
|
|
14
|
+
if (version !== 0 && version !== 1)
|
|
15
|
+
throw new Error("Unsupported scheduled tasks database version");
|
|
16
|
+
if (version === 0)
|
|
17
|
+
this.transaction(() => {
|
|
18
|
+
db.exec(`
|
|
19
|
+
CREATE TABLE tasks (id TEXT PRIMARY KEY, body TEXT NOT NULL);
|
|
20
|
+
CREATE TABLE revisions (
|
|
21
|
+
task_id TEXT NOT NULL REFERENCES tasks(id), revision INTEGER NOT NULL, body TEXT NOT NULL,
|
|
22
|
+
PRIMARY KEY (task_id, revision)
|
|
23
|
+
);
|
|
24
|
+
CREATE TABLE executions (
|
|
25
|
+
id TEXT PRIMARY KEY, task_id TEXT NOT NULL REFERENCES tasks(id),
|
|
26
|
+
occurrence TEXT UNIQUE, body TEXT NOT NULL
|
|
27
|
+
);
|
|
28
|
+
CREATE INDEX executions_task ON executions(task_id);
|
|
29
|
+
PRAGMA user_version = 1;
|
|
30
|
+
`);
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
static open(path) {
|
|
34
|
+
const db = openSqlite(path);
|
|
35
|
+
try {
|
|
36
|
+
return new TaskStore(db);
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
db.close();
|
|
40
|
+
throw error;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
close() { this.db.close(); }
|
|
44
|
+
listTasks() {
|
|
45
|
+
return this.db.prepare("SELECT body FROM tasks ORDER BY id").all().map((row) => decode(row));
|
|
46
|
+
}
|
|
47
|
+
task(id) {
|
|
48
|
+
const row = this.db.prepare("SELECT body FROM tasks WHERE id = ?").get(id);
|
|
49
|
+
if (row === undefined || row === null)
|
|
50
|
+
throw new Error("Task not found");
|
|
51
|
+
return decode(row);
|
|
52
|
+
}
|
|
53
|
+
revisions(taskId) {
|
|
54
|
+
return this.db.prepare("SELECT body FROM revisions WHERE task_id = ? ORDER BY revision").all(taskId).map((row) => decode(row));
|
|
55
|
+
}
|
|
56
|
+
create(input, now) {
|
|
57
|
+
const definition = validateTask(input, now);
|
|
58
|
+
const task = { ...definition, id: this.id(), revision: 1, paused: false, archived: false,
|
|
59
|
+
nextDue: nextOccurrence(definition, now), createdAt: now, updatedAt: now };
|
|
60
|
+
return this.transaction(() => {
|
|
61
|
+
this.db.prepare("INSERT INTO tasks (id, body) VALUES (?, ?)").run(task.id, JSON.stringify(task));
|
|
62
|
+
this.saveRevision(task);
|
|
63
|
+
return task;
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
update(id, revision, input, now) {
|
|
67
|
+
const definition = validateTask(input, now);
|
|
68
|
+
return this.change(id, revision, now, (task) => {
|
|
69
|
+
const scheduleChanged = JSON.stringify(definition.schedule) !== JSON.stringify(task.schedule) || definition.timezone !== task.timezone;
|
|
70
|
+
const updated = { ...task, ...definition, nextDue: scheduleChanged ? nextOccurrence(definition, now) : task.nextDue };
|
|
71
|
+
if (definition.model === undefined)
|
|
72
|
+
delete updated.model;
|
|
73
|
+
if (definition.thinkingLevel === undefined)
|
|
74
|
+
delete updated.thinkingLevel;
|
|
75
|
+
return updated;
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
setPaused(id, revision, paused, now) {
|
|
79
|
+
return this.change(id, revision, now, (task) => ({ ...task, paused,
|
|
80
|
+
nextDue: !paused && task.schedule.kind === "cron" ? nextOccurrence(task, now) : task.nextDue }));
|
|
81
|
+
}
|
|
82
|
+
archive(id, revision, now) {
|
|
83
|
+
return this.change(id, revision, now, (task) => ({ ...task, archived: true, nextDue: null }));
|
|
84
|
+
}
|
|
85
|
+
delete(id, revision) {
|
|
86
|
+
this.transaction(() => {
|
|
87
|
+
const task = this.task(id);
|
|
88
|
+
if (task.revision !== revision)
|
|
89
|
+
throw new Error("Task revision conflict; inspect the current task before deleting");
|
|
90
|
+
if (!task.archived)
|
|
91
|
+
throw new Error("Only archived tasks can be deleted; archive the task first");
|
|
92
|
+
this.db.prepare("DELETE FROM executions WHERE task_id = ?").run(id);
|
|
93
|
+
this.db.prepare("DELETE FROM revisions WHERE task_id = ?").run(id);
|
|
94
|
+
this.db.prepare("DELETE FROM tasks WHERE id = ?").run(id);
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
change(id, revision, now, change) {
|
|
98
|
+
return this.transaction(() => {
|
|
99
|
+
const old = this.task(id);
|
|
100
|
+
if (old.revision !== revision)
|
|
101
|
+
throw new Error("Task revision conflict; inspect the current task before editing");
|
|
102
|
+
if (old.archived)
|
|
103
|
+
throw new Error("Archived tasks cannot be modified");
|
|
104
|
+
const task = { ...change(old), revision: old.revision + 1, updatedAt: now };
|
|
105
|
+
this.saveTask(task);
|
|
106
|
+
this.saveRevision(task);
|
|
107
|
+
return task;
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
executions(taskId, limit = -1, offset = 0) {
|
|
111
|
+
const rows = taskId === undefined
|
|
112
|
+
? this.db.prepare("SELECT body FROM executions ORDER BY rowid DESC LIMIT ? OFFSET ?").all(limit, offset)
|
|
113
|
+
: this.db.prepare("SELECT body FROM executions WHERE task_id = ? ORDER BY rowid DESC LIMIT ? OFFSET ?").all(taskId, limit, offset);
|
|
114
|
+
return rows.map(decodeExecution);
|
|
115
|
+
}
|
|
116
|
+
execution(id) {
|
|
117
|
+
const row = this.db.prepare("SELECT body FROM executions WHERE id = ?").get(id);
|
|
118
|
+
if (row === undefined || row === null)
|
|
119
|
+
throw new Error("Execution not found");
|
|
120
|
+
return decodeExecution(row);
|
|
121
|
+
}
|
|
122
|
+
/** Called once before starting scheduling. Never retries an interrupted launch. */
|
|
123
|
+
recover(now) {
|
|
124
|
+
this.transaction(() => {
|
|
125
|
+
for (const execution of this.executions()) {
|
|
126
|
+
if (execution.status === "dispatching") {
|
|
127
|
+
this.saveExecution({ ...execution, status: "uncertain", dispatchError: "Daemon stopped before dispatch confirmation; not automatically retried" });
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
// Recurrences missed while stopped are skipped; overdue one-offs retain their due time.
|
|
131
|
+
for (const task of this.listTasks()) {
|
|
132
|
+
if (!task.archived && task.schedule.kind === "cron")
|
|
133
|
+
this.saveTask({ ...task, nextDue: nextOccurrence(task, now) });
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
/** Durable reservation precedes all session side effects. A one-off is consumed even if launch fails. */
|
|
138
|
+
claim(taskId, trigger, now) {
|
|
139
|
+
return this.transaction(() => {
|
|
140
|
+
const task = this.task(taskId);
|
|
141
|
+
if (task.archived)
|
|
142
|
+
throw new Error("Archived tasks cannot be dispatched");
|
|
143
|
+
if (trigger === "scheduled" && (task.paused || task.nextDue === null || task.nextDue > now))
|
|
144
|
+
return null;
|
|
145
|
+
const dueAt = trigger === "scheduled" ? task.nextDue : now;
|
|
146
|
+
if (dueAt === null)
|
|
147
|
+
return null;
|
|
148
|
+
const occurrence = trigger === "scheduled" ? `${task.id}:${dueAt}` : null;
|
|
149
|
+
if (occurrence !== null) {
|
|
150
|
+
const existing = this.db.prepare("SELECT id FROM executions WHERE occurrence = ?").get(occurrence);
|
|
151
|
+
if (existing !== undefined && existing !== null)
|
|
152
|
+
return null;
|
|
153
|
+
}
|
|
154
|
+
const execution = { id: this.id(), taskId, task, trigger, dueAt, createdAt: now,
|
|
155
|
+
status: "dispatching", sessionId: null, dispatchError: null, reports: [], notices: [] };
|
|
156
|
+
this.db.prepare("INSERT INTO executions (id, task_id, occurrence, body) VALUES (?, ?, ?, ?)")
|
|
157
|
+
.run(execution.id, taskId, occurrence, JSON.stringify(execution));
|
|
158
|
+
if (trigger === "scheduled")
|
|
159
|
+
this.saveTask({ ...task, nextDue: task.schedule.kind === "once" ? null : nextOccurrence(task, now) });
|
|
160
|
+
return execution;
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
recordNotices(id, notices) {
|
|
164
|
+
return this.mutateExecution(id, (execution) => ({ ...execution,
|
|
165
|
+
notices: [...execution.notices, ...notices] }));
|
|
166
|
+
}
|
|
167
|
+
confirmDispatch(id, sessionId, selection = {}) {
|
|
168
|
+
text(sessionId, "sessionId", 512);
|
|
169
|
+
return this.mutateExecution(id, (execution) => ({ ...execution, sessionId,
|
|
170
|
+
...(selection.model === undefined ? {} : { model: selection.model }),
|
|
171
|
+
...(selection.thinkingLevel === undefined ? {} : { thinkingLevel: selection.thinkingLevel }),
|
|
172
|
+
notices: [...execution.notices, ...(selection.notices ?? [])],
|
|
173
|
+
// An agent may explicitly report before the host's initial admission promise resolves.
|
|
174
|
+
status: execution.reports.length > 0 ? execution.status : "dispatched" }));
|
|
175
|
+
}
|
|
176
|
+
dispatchProblem(id, error, certainFailure) {
|
|
177
|
+
return this.mutateExecution(id, (execution) => ({ ...execution, dispatchError: error,
|
|
178
|
+
status: execution.reports.length > 0 ? execution.status : certainFailure ? "failed" : "uncertain" }));
|
|
179
|
+
}
|
|
180
|
+
report(id, outcome, summary, now) {
|
|
181
|
+
if (outcome !== "completed" && outcome !== "errored")
|
|
182
|
+
throw new Error("Unknown outcome");
|
|
183
|
+
text(summary, "summary", 16 * 1024);
|
|
184
|
+
return this.mutateExecution(id, (execution) => {
|
|
185
|
+
if (execution.status === "failed")
|
|
186
|
+
throw new Error("A rejected dispatch has no execution outcome to report");
|
|
187
|
+
return { ...execution, status: outcome, reports: [...execution.reports, { at: now, outcome, summary }] };
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
mutateExecution(id, mutate) {
|
|
191
|
+
return this.transaction(() => {
|
|
192
|
+
const execution = mutate(this.execution(id));
|
|
193
|
+
this.saveExecution(execution);
|
|
194
|
+
return execution;
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
saveTask(task) {
|
|
198
|
+
this.db.prepare("UPDATE tasks SET body = ? WHERE id = ?").run(JSON.stringify(task), task.id);
|
|
199
|
+
}
|
|
200
|
+
saveRevision(task) {
|
|
201
|
+
this.db.prepare("INSERT INTO revisions (task_id, revision, body) VALUES (?, ?, ?)").run(task.id, task.revision, JSON.stringify(task));
|
|
202
|
+
}
|
|
203
|
+
saveExecution(execution) {
|
|
204
|
+
this.db.prepare("UPDATE executions SET body = ? WHERE id = ?").run(JSON.stringify(execution), execution.id);
|
|
205
|
+
}
|
|
206
|
+
transaction(operation) {
|
|
207
|
+
this.db.exec("BEGIN IMMEDIATE");
|
|
208
|
+
try {
|
|
209
|
+
const value = operation();
|
|
210
|
+
this.db.exec("COMMIT");
|
|
211
|
+
return value;
|
|
212
|
+
}
|
|
213
|
+
catch (error) {
|
|
214
|
+
this.db.exec("ROLLBACK");
|
|
215
|
+
throw error;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
function decodeExecution(row) {
|
|
220
|
+
const execution = decode(row);
|
|
221
|
+
// Version 1 ledgers predate notices; optional selection fields already represent defaults.
|
|
222
|
+
return { ...execution, notices: execution.notices ?? [] };
|
|
223
|
+
}
|
|
224
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters -- The store owns the versioned schema and all JSON writes; callers select the table record type.
|
|
225
|
+
function decode(row) {
|
|
226
|
+
if (typeof row["body"] !== "string")
|
|
227
|
+
throw new Error("Invalid scheduled tasks database record");
|
|
228
|
+
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- Only read plugin-owned records written by this schema version, not transport input.
|
|
229
|
+
return JSON.parse(row["body"]);
|
|
230
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { fileURLToPath } from "node:url";
|
|
2
|
+
import { defineConfig } from "vite";
|
|
3
|
+
|
|
4
|
+
// The browser-public root contains only the self-contained dashboard bundle.
|
|
5
|
+
export default defineConfig({
|
|
6
|
+
build: {
|
|
7
|
+
emptyOutDir: true,
|
|
8
|
+
lib: {
|
|
9
|
+
entry: fileURLToPath(new URL("./browser/pi-web-plugin.ts", import.meta.url)),
|
|
10
|
+
formats: ["es"],
|
|
11
|
+
fileName: () => "pi-web-plugin.js",
|
|
12
|
+
},
|
|
13
|
+
target: "es2022",
|
|
14
|
+
minify: true,
|
|
15
|
+
},
|
|
16
|
+
});
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { fileURLToPath } from "node:url";
|
|
2
|
+
import { defineConfig } from "vite";
|
|
3
|
+
|
|
4
|
+
// Carry the public companion helper, but use Pi\'s host-provided SDK modules.
|
|
5
|
+
export default defineConfig({
|
|
6
|
+
build: {
|
|
7
|
+
emptyOutDir: false,
|
|
8
|
+
lib: {
|
|
9
|
+
entry: fileURLToPath(new URL("./extensions/index.ts", import.meta.url)),
|
|
10
|
+
formats: ["es"],
|
|
11
|
+
fileName: () => "extensions/index.js",
|
|
12
|
+
},
|
|
13
|
+
rollupOptions: { external: ["@earendil-works/pi-ai", "@earendil-works/pi-coding-agent"] },
|
|
14
|
+
target: "es2022",
|
|
15
|
+
minify: false,
|
|
16
|
+
},
|
|
17
|
+
});
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { fileURLToPath } from "node:url";
|
|
2
|
+
import { defineConfig } from "vite";
|
|
3
|
+
|
|
4
|
+
// Keep the server package installable without a second host or cron-parser copy.
|
|
5
|
+
export default defineConfig({
|
|
6
|
+
build: {
|
|
7
|
+
emptyOutDir: false,
|
|
8
|
+
lib: {
|
|
9
|
+
entry: fileURLToPath(new URL("./server-plugin.ts", import.meta.url)),
|
|
10
|
+
formats: ["es"],
|
|
11
|
+
fileName: () => "server-plugin.js",
|
|
12
|
+
},
|
|
13
|
+
rollupOptions: { external: [/^node:/u] },
|
|
14
|
+
target: "node22",
|
|
15
|
+
minify: false,
|
|
16
|
+
},
|
|
17
|
+
});
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
// Generated from pi-packages/session-naming/config.ts. Do not edit directly.
|
|
2
|
+
import { readFile } from "node:fs/promises";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { homedir } from "node:os";
|
|
5
|
+
// Compiled extensions must not resolve a second copy of the Pi SDK just to
|
|
6
|
+
// locate configuration. Pi exposes this profile directory through its public env contract.
|
|
7
|
+
export function sessionNamingAgentDir(env = process.env, home = homedir()) {
|
|
8
|
+
const configured = env["PI_CODING_AGENT_DIR"];
|
|
9
|
+
if (configured === undefined || configured === "")
|
|
10
|
+
return join(home, ".pi", "agent");
|
|
11
|
+
if (configured === "~")
|
|
12
|
+
return home;
|
|
13
|
+
if (configured.startsWith("~/") || configured.startsWith("~\\"))
|
|
14
|
+
return join(home, configured.slice(2));
|
|
15
|
+
return configured;
|
|
16
|
+
}
|
|
17
|
+
export function sessionNamingConfigPath(agentDir) {
|
|
18
|
+
return join(agentDir, "session-naming", "config.json");
|
|
19
|
+
}
|
|
20
|
+
/** Shared by the extension and hosts migrating previously stored tuning. */
|
|
21
|
+
export function parseSessionNamingConfig(value) {
|
|
22
|
+
if (!isRecord(value)) {
|
|
23
|
+
throw new Error("Session naming config must be an object");
|
|
24
|
+
}
|
|
25
|
+
const record = value;
|
|
26
|
+
for (const key of Object.keys(record)) {
|
|
27
|
+
if (!["model", "maxTokens", "thinkingLevel", "timeoutMs"].includes(key)) {
|
|
28
|
+
throw new Error(`Unknown session naming config field: ${key}`);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
const { model, maxTokens, thinkingLevel, timeoutMs } = record;
|
|
32
|
+
if (model !== undefined && (typeof model !== "string" || !/^[^/\s]+\/\S+$/.test(model))) {
|
|
33
|
+
throw new Error("Session naming model must be an exact provider/model-id");
|
|
34
|
+
}
|
|
35
|
+
if (maxTokens !== undefined && (typeof maxTokens !== "number" || !Number.isSafeInteger(maxTokens) || maxTokens < 1)) {
|
|
36
|
+
throw new Error("Session naming maxTokens must be a positive safe integer");
|
|
37
|
+
}
|
|
38
|
+
if (thinkingLevel !== undefined && !isThinkingLevel(thinkingLevel)) {
|
|
39
|
+
throw new Error("Session naming thinkingLevel must be a known thinking level");
|
|
40
|
+
}
|
|
41
|
+
if (timeoutMs !== undefined && (typeof timeoutMs !== "number" || !Number.isInteger(timeoutMs) || timeoutMs < 1 || timeoutMs > 2_147_483_647)) {
|
|
42
|
+
throw new Error("Session naming timeoutMs must be an integer from 1 to 2147483647");
|
|
43
|
+
}
|
|
44
|
+
return {
|
|
45
|
+
...(model !== undefined ? { model } : {}),
|
|
46
|
+
...(maxTokens !== undefined ? { maxTokens } : {}),
|
|
47
|
+
...(thinkingLevel !== undefined ? { thinkingLevel } : {}),
|
|
48
|
+
...(timeoutMs !== undefined ? { timeoutMs } : {}),
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
function isRecord(value) {
|
|
52
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
53
|
+
}
|
|
54
|
+
function isThinkingLevel(value) {
|
|
55
|
+
return typeof value === "string" && ["off", "minimal", "low", "medium", "high", "xhigh", "max"].includes(value);
|
|
56
|
+
}
|
|
57
|
+
/** Environment tuning overrides file tuning field by field; neither supports a toggle. */
|
|
58
|
+
export function resolveSessionNamingConfig(fileConfig = {}, overrideConfig = {}) {
|
|
59
|
+
return {
|
|
60
|
+
maxTokens: 24,
|
|
61
|
+
thinkingLevel: "minimal",
|
|
62
|
+
timeoutMs: 10_000,
|
|
63
|
+
...parseSessionNamingConfig(fileConfig),
|
|
64
|
+
...parseSessionNamingConfig(overrideConfig),
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
export async function loadSessionNamingConfig(agentDir, env = process.env) {
|
|
68
|
+
let file = {};
|
|
69
|
+
try {
|
|
70
|
+
file = JSON.parse(await readFile(sessionNamingConfigPath(agentDir), "utf8"));
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
if (!(error instanceof Error && "code" in error && error.code === "ENOENT"))
|
|
74
|
+
throw error;
|
|
75
|
+
}
|
|
76
|
+
const override = env["PI_WEB_SESSION_NAMING"] === undefined ? {} : JSON.parse(env["PI_WEB_SESSION_NAMING"]);
|
|
77
|
+
return resolveSessionNamingConfig(file, override);
|
|
78
|
+
}
|