@chainingintention/pi-web-cn 2.202610.4 → 2.202611.1

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