@chainingintention/pi-web-cn 2.202610.5 → 2.202611.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (995) 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/relays.messages.js +38 -0
  620. package/dist/pi-packages/relays/relaysLocalization.js +19 -0
  621. package/dist/pi-packages/relays/relaysPanelElement.js +151 -96
  622. package/dist/pi-packages/scheduled-tasks/browser/pi-web-plugin.js +1135 -0
  623. package/dist/pi-packages/scheduled-tasks/domain.js +63 -0
  624. package/dist/pi-packages/scheduled-tasks/extensions/index.js +710 -0
  625. package/dist/pi-packages/scheduled-tasks/package.json +30 -0
  626. package/dist/pi-packages/scheduled-tasks/scheduler.js +89 -0
  627. package/dist/pi-packages/scheduled-tasks/server-plugin.js +9872 -0
  628. package/dist/pi-packages/scheduled-tasks/service.js +178 -0
  629. package/dist/pi-packages/scheduled-tasks/skills/scheduled-tasks/SKILL.md +30 -0
  630. package/dist/pi-packages/scheduled-tasks/sqlite.js +18 -0
  631. package/dist/pi-packages/scheduled-tasks/store.js +230 -0
  632. package/dist/pi-packages/scheduled-tasks/vite.browser.config.mjs +16 -0
  633. package/dist/pi-packages/scheduled-tasks/vite.companion.config.mjs +17 -0
  634. package/dist/pi-packages/scheduled-tasks/vite.config.mjs +17 -0
  635. package/dist/pi-packages/session-naming/config.js +78 -0
  636. package/dist/pi-packages/session-naming/extensions/index.js +74 -0
  637. package/dist/pi-packages/session-naming/generator.js +76 -0
  638. package/dist/pi-packages/session-naming/package.json +15 -0
  639. package/dist/pi-packages/workflows/browser/pi-web-plugin.js +10 -7
  640. package/dist/pi-packages/workflows/browser/workflows.messages.js +32 -0
  641. package/dist/pi-packages/workflows/browser/worktreeDialog.js +71 -50
  642. package/dist/pi-packages/workflows/server-plugin.js +137 -23
  643. package/dist/pi-web-plugins/audio/audioElement.js +61 -0
  644. package/dist/pi-web-plugins/audio/audioFormats.js +18 -0
  645. package/dist/pi-web-plugins/audio/byteRange.js +21 -0
  646. package/dist/pi-web-plugins/audio/package.json +10 -0
  647. package/dist/pi-web-plugins/audio/pi-web-plugin.js +39 -0
  648. package/dist/pi-web-plugins/audio/server.js +71 -0
  649. package/dist/pi-web-plugins/code-highlight/browser/pi-web-plugin.js +4 -4
  650. package/dist/pi-web-plugins/custom-ui-codex/codex.css +8 -0
  651. package/dist/pi-web-plugins/custom-ui-codex/fileIcons.js +30 -0
  652. package/dist/pi-web-plugins/custom-ui-codex/package.json +8 -1
  653. package/dist/pi-web-plugins/custom-ui-codex/pi-web-plugin.js +8 -8
  654. package/dist/pi-web-plugins/files/browser/pi-web-plugin.js +236 -259
  655. package/dist/pi-web-plugins/git/browser/git-panel.js +138 -59
  656. package/dist/pi-web-plugins/git/browser/git.messages.js +47 -0
  657. package/dist/pi-web-plugins/git/browser/gitFileIcon.js +71 -0
  658. package/dist/pi-web-plugins/git/browser/pi-web-plugin.js +21 -4
  659. package/dist/pi-web-plugins/git/server-plugin.js +5 -3
  660. package/dist/pi-web-plugins/info/info.messages.js +66 -0
  661. package/dist/pi-web-plugins/info/infoInternals.js +217 -217
  662. package/dist/pi-web-plugins/info/pi-web-plugin.js +19 -14
  663. package/dist/pi-web-plugins/language-spanish/catalogs.js +1896 -0
  664. package/dist/pi-web-plugins/language-spanish/package.json +14 -0
  665. package/dist/pi-web-plugins/language-spanish/pi-web-plugin.js +90 -0
  666. package/dist/pi-web-plugins/language-swedish/catalogs.js +1896 -0
  667. package/dist/pi-web-plugins/language-swedish/package.json +14 -0
  668. package/dist/pi-web-plugins/language-swedish/pi-web-plugin.js +89 -0
  669. package/dist/pi-web-plugins/mermaid/browser/pi-web-plugin.js +4 -4
  670. package/dist/pi-web-plugins/terminal/browser/pi-web-plugin.js +71 -66
  671. package/dist/pi-web-plugins/terminal/bunPtyProvider.js +109 -0
  672. package/dist/pi-web-plugins/terminal/nodePtyProvider.js +75 -0
  673. package/dist/pi-web-plugins/terminal/nodePtySpawnHelper.js +36 -0
  674. package/dist/pi-web-plugins/terminal/ptyComposition.js +12 -0
  675. package/dist/pi-web-plugins/terminal/ptyProvider.js +2 -0
  676. package/dist/pi-web-plugins/terminal/server-plugin.js +42 -14
  677. package/dist/pi-web-plugins/terminal/terminalService.js +218 -76
  678. package/dist/pi-web-plugins/themes/assets/graphite.css +56 -0
  679. package/dist/pi-web-plugins/themes/assets/paper.css +56 -0
  680. package/dist/pi-web-plugins/themes/package.json +21 -0
  681. package/dist/pi-web-plugins/updates/pi-web-plugin.js +200 -155
  682. package/dist/pi-web-plugins/updates/updates.messages.js +59 -0
  683. package/dist/pi-web-plugins/updates/updatesLogic.js +27 -29
  684. package/dist/pi-web-plugins/workspace-tasks/config.js +18 -19
  685. package/dist/pi-web-plugins/workspace-tasks/pi-web-plugin.js +13 -8
  686. package/dist/pi-web-plugins/workspace-tasks/tasks.messages.js +45 -0
  687. package/dist/pi-web-plugins/workspace-tasks/tasksLocalization.js +33 -0
  688. package/dist/pi-web-plugins/workspace-tasks/tasksPanelElement.js +56 -42
  689. package/dist/pi-web-plugins/workspace-tasks/workspaceTasksClient.js +7 -33
  690. package/dist/pi-web-plugins/zh-cn/catalogs.json +1803 -0
  691. package/dist/pi-web-plugins/zh-cn/main.json +5 -1
  692. package/dist/pi-web-plugins/zh-cn/management-errors.json +6 -0
  693. package/dist/pi-web-plugins/zh-cn/pi-web-plugin.js +13 -4
  694. package/dist/pi-web-plugins/zh-cn/server.json +1 -1
  695. package/dist/piWebVersionReport.js +2 -0
  696. package/dist/piWebVersionReport.js.map +1 -1
  697. package/dist/plugin-api.d.ts +194 -9
  698. package/dist/runtimePreflight.js +14 -0
  699. package/dist/runtimePreflight.js.map +1 -0
  700. package/dist/server/activity/workspaceActivityService.js +18 -1
  701. package/dist/server/activity/workspaceActivityService.js.map +1 -1
  702. package/dist/server/app.js +45 -10
  703. package/dist/server/app.js.map +1 -1
  704. package/dist/server/configRoutes.js +117 -139
  705. package/dist/server/configRoutes.js.map +1 -1
  706. package/dist/server/configUpdates.js +104 -0
  707. package/dist/server/configUpdates.js.map +1 -0
  708. package/dist/server/deploymentIdentity.js +12 -10
  709. package/dist/server/deploymentIdentity.js.map +1 -1
  710. package/dist/server/deploymentIdentityRoutes.js +2 -1
  711. package/dist/server/deploymentIdentityRoutes.js.map +1 -1
  712. package/dist/server/diagnostics/nodePtyNativeModule.js +0 -18
  713. package/dist/server/diagnostics/nodePtyNativeModule.js.map +1 -1
  714. package/dist/server/diagnostics/terminalPrerequisites.js +54 -0
  715. package/dist/server/diagnostics/terminalPrerequisites.js.map +1 -0
  716. package/dist/server/index.js +9 -0
  717. package/dist/server/index.js.map +1 -1
  718. package/dist/server/knownAutoInstallPiPackages.js +6 -0
  719. package/dist/server/knownAutoInstallPiPackages.js.map +1 -1
  720. package/dist/server/knownPiPackages.js +4 -4
  721. package/dist/server/knownPiPackages.js.map +1 -1
  722. package/dist/server/machines/machineClient.js +39 -17
  723. package/dist/server/machines/machineClient.js.map +1 -1
  724. package/dist/server/machines/machinePluginProxyRoutes.js +3 -1
  725. package/dist/server/machines/machinePluginProxyRoutes.js.map +1 -1
  726. package/dist/server/machines/machineProxyRoutes.js +60 -9
  727. package/dist/server/machines/machineProxyRoutes.js.map +1 -1
  728. package/dist/server/machines/machineService.js +81 -13
  729. package/dist/server/machines/machineService.js.map +1 -1
  730. package/dist/server/machines/machineStore.js.map +1 -1
  731. package/dist/server/managementEmbed.js +4 -1
  732. package/dist/server/managementEmbed.js.map +1 -1
  733. package/dist/server/managementEntryRoutes.js +51 -0
  734. package/dist/server/managementEntryRoutes.js.map +1 -0
  735. package/dist/server/managementEntryTickets.js +46 -0
  736. package/dist/server/managementEntryTickets.js.map +1 -0
  737. package/dist/server/managementTransportLimits.js +5 -0
  738. package/dist/server/managementTransportLimits.js.map +1 -0
  739. package/dist/server/navigationPreferenceRoutes.js +20 -1
  740. package/dist/server/navigationPreferenceRoutes.js.map +1 -1
  741. package/dist/server/normalAuth.js +3 -1
  742. package/dist/server/normalAuth.js.map +1 -1
  743. package/dist/server/notices/serverNoticeStore.js +4 -0
  744. package/dist/server/notices/serverNoticeStore.js.map +1 -1
  745. package/dist/server/piPackageService.js +15 -1
  746. package/dist/server/piPackageService.js.map +1 -1
  747. package/dist/server/piWebPluginCatalog.js +23 -11
  748. package/dist/server/piWebPluginCatalog.js.map +1 -1
  749. package/dist/server/piWebPluginLifecycle.js +14 -4
  750. package/dist/server/piWebPluginLifecycle.js.map +1 -1
  751. package/dist/server/piWebPluginService.js +11 -5
  752. package/dist/server/piWebPluginService.js.map +1 -1
  753. package/dist/server/piWebStatus.js +12 -10
  754. package/dist/server/piWebStatus.js.map +1 -1
  755. package/dist/server/piWebStatusCache.js +3 -1
  756. package/dist/server/piWebStatusCache.js.map +1 -1
  757. package/dist/server/plugins/pluginBackendRegistry.js +229 -4
  758. package/dist/server/plugins/pluginBackendRegistry.js.map +1 -1
  759. package/dist/server/plugins/pluginBackendResourceProxyRoutes.js +40 -0
  760. package/dist/server/plugins/pluginBackendResourceProxyRoutes.js.map +1 -0
  761. package/dist/server/plugins/pluginBackendResourceResponse.js +84 -0
  762. package/dist/server/plugins/pluginBackendResourceResponse.js.map +1 -0
  763. package/dist/server/plugins/projectPluginSettings.js +9 -2
  764. package/dist/server/plugins/projectPluginSettings.js.map +1 -1
  765. package/dist/server/plugins/serverPluginCatalogCapability.js +7 -2
  766. package/dist/server/plugins/serverPluginCatalogCapability.js.map +1 -1
  767. package/dist/server/plugins/serverPluginPiSessionsCapability.js +16 -3
  768. package/dist/server/plugins/serverPluginPiSessionsCapability.js.map +1 -1
  769. package/dist/server/plugins/serverPluginRuntime.js +25 -9
  770. package/dist/server/plugins/serverPluginRuntime.js.map +1 -1
  771. package/dist/server/plugins/serverPluginSessionLifecycleCapability.js +87 -0
  772. package/dist/server/plugins/serverPluginSessionLifecycleCapability.js.map +1 -0
  773. package/dist/server/requestLogging.js +1 -1
  774. package/dist/server/requestLogging.js.map +1 -1
  775. package/dist/server/sessiond/agentHttpDispatcher.js +14 -7
  776. package/dist/server/sessiond/agentHttpDispatcher.js.map +1 -1
  777. package/dist/server/sessiond/autoInstallPiPackageSources.js +54 -0
  778. package/dist/server/sessiond/autoInstallPiPackageSources.js.map +1 -0
  779. package/dist/server/sessiond/autoInstallPiPackages.js +77 -30
  780. package/dist/server/sessiond/autoInstallPiPackages.js.map +1 -1
  781. package/dist/server/sessiond/pluginBackendChannelRoutes.js +3 -13
  782. package/dist/server/sessiond/pluginBackendChannelRoutes.js.map +1 -1
  783. package/dist/server/sessiond/pluginBackendResourceRoutes.js +62 -0
  784. package/dist/server/sessiond/pluginBackendResourceRoutes.js.map +1 -0
  785. package/dist/server/sessiond/pluginSessionLifecycleRoutes.js +45 -0
  786. package/dist/server/sessiond/pluginSessionLifecycleRoutes.js.map +1 -0
  787. package/dist/server/sessiond/sessionProxyRoutes.js +55 -11
  788. package/dist/server/sessiond/sessionProxyRoutes.js.map +1 -1
  789. package/dist/server/sessiond/sessionServiceDependencies.js +3 -0
  790. package/dist/server/sessiond/sessionServiceDependencies.js.map +1 -1
  791. package/dist/server/sessiond.js +46 -15
  792. package/dist/server/sessiond.js.map +1 -1
  793. package/dist/server/sessions/askUserDomain.js +24 -2
  794. package/dist/server/sessions/askUserDomain.js.map +1 -1
  795. package/dist/server/sessions/askUserTool.js +1 -1
  796. package/dist/server/sessions/askUserTool.js.map +1 -1
  797. package/dist/server/sessions/dockerEnvironmentFacts.js +10 -9
  798. package/dist/server/sessions/dockerEnvironmentFacts.js.map +1 -1
  799. package/dist/server/sessions/mcpOAuthCredentialAdapter.js +4 -4
  800. package/dist/server/sessions/mcpOAuthCredentialAdapter.js.map +1 -1
  801. package/dist/server/sessions/piSessionService.js +490 -257
  802. package/dist/server/sessions/piSessionService.js.map +1 -1
  803. package/dist/server/sessions/requestHumanInterventionTool.js +27 -0
  804. package/dist/server/sessions/requestHumanInterventionTool.js.map +1 -0
  805. package/dist/server/sessions/sendSessionMessageTool.js +32 -0
  806. package/dist/server/sessions/sendSessionMessageTool.js.map +1 -0
  807. package/dist/server/sessions/sessionActivityCoordinator.js.map +1 -1
  808. package/dist/server/sessions/sessionCleanup.js +18 -1
  809. package/dist/server/sessions/sessionCleanup.js.map +1 -1
  810. package/dist/server/sessions/sessionCommandService.js +58 -52
  811. package/dist/server/sessions/sessionCommandService.js.map +1 -1
  812. package/dist/server/sessions/sessionContentSearch.js +103 -30
  813. package/dist/server/sessions/sessionContentSearch.js.map +1 -1
  814. package/dist/server/sessions/sessionIntervention.js +29 -0
  815. package/dist/server/sessions/sessionIntervention.js.map +1 -0
  816. package/dist/server/sessions/sessionNameGenerator.js +0 -60
  817. package/dist/server/sessions/sessionNameGenerator.js.map +1 -1
  818. package/dist/server/sessions/sessionNotificationStore.js +2 -1
  819. package/dist/server/sessions/sessionNotificationStore.js.map +1 -1
  820. package/dist/server/sessions/sessionRoutes.js +25 -1
  821. package/dist/server/sessions/sessionRoutes.js.map +1 -1
  822. package/dist/server/sessions/sessionSummaryScanner.js +8 -0
  823. package/dist/server/sessions/sessionSummaryScanner.js.map +1 -1
  824. package/dist/server/sessions/sessionTreeProjection.js +108 -97
  825. package/dist/server/sessions/sessionTreeProjection.js.map +1 -1
  826. package/dist/server/sessions/sessionUiEvents.js +2 -0
  827. package/dist/server/sessions/sessionUiEvents.js.map +1 -1
  828. package/dist/server/sessions/sessionUnreadStore.js +11 -1
  829. package/dist/server/sessions/sessionUnreadStore.js.map +1 -1
  830. package/dist/server/sessions/spawnSubsessionTool.js +66 -15
  831. package/dist/server/sessions/spawnSubsessionTool.js.map +1 -1
  832. package/dist/server/sessions/subsessionCompletionDelivery.js +6 -3
  833. package/dist/server/sessions/subsessionCompletionDelivery.js.map +1 -1
  834. package/dist/server/sessions/subsessionCompletionInbox.js +6 -9
  835. package/dist/server/sessions/subsessionCompletionInbox.js.map +1 -1
  836. package/dist/server/status/machineStatusService.js +15 -3
  837. package/dist/server/status/machineStatusService.js.map +1 -1
  838. package/dist/server/storage/navigationPreferenceStore.js +11 -0
  839. package/dist/server/storage/navigationPreferenceStore.js.map +1 -1
  840. package/dist/server/storage/sessionPinStore.js +95 -0
  841. package/dist/server/storage/sessionPinStore.js.map +1 -0
  842. package/dist/server/terminals/maintenanceExecutionContext.js +18 -0
  843. package/dist/server/terminals/maintenanceExecutionContext.js.map +1 -0
  844. package/dist/server/terminals/maintenanceTerminalCapability.js +25 -0
  845. package/dist/server/terminals/maintenanceTerminalCapability.js.map +1 -0
  846. package/dist/server/terminals/requiredTerminalService.js.map +1 -1
  847. package/dist/server/terminals/terminalStatusRoutes.js +22 -0
  848. package/dist/server/terminals/terminalStatusRoutes.js.map +1 -0
  849. package/dist/server/themeBootstrap.js +123 -0
  850. package/dist/server/themeBootstrap.js.map +1 -0
  851. package/dist/server/themeCatalog.js +206 -0
  852. package/dist/server/themeCatalog.js.map +1 -0
  853. package/dist/server/themeMetadata.js +74 -0
  854. package/dist/server/themeMetadata.js.map +1 -0
  855. package/dist/server/webSocketBridge.js +16 -12
  856. package/dist/server/webSocketBridge.js.map +1 -1
  857. package/dist/server/webSocketPayloadLimit.js +17 -0
  858. package/dist/server/webSocketPayloadLimit.js.map +1 -0
  859. package/dist/server/workspaces/effectivePathAccess.js +1 -1
  860. package/dist/server/workspaces/effectivePathAccess.js.map +1 -1
  861. package/dist/server/workspaces/projectPiWebConfig.js +30 -7
  862. package/dist/server/workspaces/projectPiWebConfig.js.map +1 -1
  863. package/dist/server/workspaces/sessionDaemonWorkspaceCatalog.js +2 -0
  864. package/dist/server/workspaces/sessionDaemonWorkspaceCatalog.js.map +1 -1
  865. package/dist/server/workspaces/workspaceProviderRegistry.js +6 -2
  866. package/dist/server/workspaces/workspaceProviderRegistry.js.map +1 -1
  867. package/dist/server/workspaces/workspaceRemovalService.js +6 -4
  868. package/dist/server/workspaces/workspaceRemovalService.js.map +1 -1
  869. package/dist/server-plugin-api.d.ts +39 -1
  870. package/dist/server-plugin-api.js +18 -3
  871. package/dist/server-plugin-api.js.map +1 -1
  872. package/dist/sessiond/sessionDaemonClient.js +7 -1
  873. package/dist/sessiond/sessionDaemonClient.js.map +1 -1
  874. package/dist/sessiond/sessionDaemonTerminalStatus.js +27 -0
  875. package/dist/sessiond/sessionDaemonTerminalStatus.js.map +1 -0
  876. package/dist/shared/apiTypes.js +4 -0
  877. package/dist/shared/apiTypes.js.map +1 -1
  878. package/dist/shared/capabilities.js +6 -0
  879. package/dist/shared/capabilities.js.map +1 -1
  880. package/dist/shared/commandOutputPresentation.js +17 -0
  881. package/dist/shared/commandOutputPresentation.js.map +1 -0
  882. package/dist/shared/commandResultPresentation.js +51 -0
  883. package/dist/shared/commandResultPresentation.js.map +1 -0
  884. package/dist/shared/configResolution.js +99 -0
  885. package/dist/shared/configResolution.js.map +1 -0
  886. package/dist/shared/defaultLocalization.js +60 -0
  887. package/dist/shared/defaultLocalization.js.map +1 -0
  888. package/dist/shared/federatedRoutes.js +11 -1
  889. package/dist/shared/federatedRoutes.js.map +1 -1
  890. package/dist/shared/installationName.js +21 -0
  891. package/dist/shared/installationName.js.map +1 -0
  892. package/dist/shared/localization.d.ts +55 -0
  893. package/dist/shared/localization.js +4 -0
  894. package/dist/shared/machineStatus.js +2 -0
  895. package/dist/shared/machineStatus.js.map +1 -1
  896. package/dist/shared/piWebConfigParsing.js +16 -30
  897. package/dist/shared/piWebConfigParsing.js.map +1 -1
  898. package/dist/shared/piWebRuntime.js +17 -0
  899. package/dist/shared/piWebRuntime.js.map +1 -0
  900. package/dist/shared/piWebStatusParsing.js +5 -0
  901. package/dist/shared/piWebStatusParsing.js.map +1 -1
  902. package/dist/shared/pluginApiTypes.d.ts +35 -7
  903. package/dist/shared/pluginBackendProtocol.js +24 -0
  904. package/dist/shared/pluginBackendProtocol.js.map +1 -1
  905. package/dist/shared/pluginCatalogTypes.d.ts +8 -0
  906. package/dist/shared/pluginCatalogTypes.js +15 -0
  907. package/dist/shared/pluginCatalogTypes.js.map +1 -1
  908. package/dist/shared/pluginResourceMetadata.js +58 -0
  909. package/dist/shared/pluginResourceMetadata.js.map +1 -0
  910. package/dist/shared/pluginSessionLifecycleTypes.d.ts +24 -0
  911. package/dist/shared/pluginSessionLifecycleTypes.js +56 -0
  912. package/dist/shared/pluginSessionLifecycleTypes.js.map +1 -0
  913. package/dist/shared/serverNoticePresentation.d.ts +9 -0
  914. package/dist/shared/serverNoticePresentation.js +12 -0
  915. package/dist/shared/serverNoticePresentation.js.map +1 -0
  916. package/dist/shared/sessionActivityPresentation.js +73 -0
  917. package/dist/shared/sessionActivityPresentation.js.map +1 -0
  918. package/dist/shared/sessionNotificationPresentation.js +16 -0
  919. package/dist/shared/sessionNotificationPresentation.js.map +1 -0
  920. package/dist/shared/terminalCommandRun.js +4 -0
  921. package/dist/shared/terminalCommandRun.js.map +1 -1
  922. package/dist/shared/terminalServiceStatus.js +14 -0
  923. package/dist/shared/terminalServiceStatus.js.map +1 -0
  924. package/dist/shared/terminalTitlePresentation.d.ts +10 -0
  925. package/dist/shared/terminalTitlePresentation.js +13 -0
  926. package/dist/shared/terminalTitlePresentation.js.map +1 -0
  927. package/dist/shared/themeCatalog.js +2 -0
  928. package/dist/shared/themeCatalog.js.map +1 -0
  929. package/dist/shared/themePreference.js +1 -0
  930. package/dist/shared/themePreference.js.map +1 -1
  931. package/dist/shared/thinkingLevels.d.ts +29 -0
  932. package/dist/shared/thinkingLevels.js +6 -4
  933. package/dist/shared/thinkingLevels.js.map +1 -1
  934. package/dist/shared/versionCheckPolicy.js +10 -0
  935. package/dist/shared/versionCheckPolicy.js.map +1 -0
  936. package/dist/shared/workspaceRemovalPresentation.d.ts +8 -0
  937. package/dist/shared/workspaceRemovalPresentation.js +10 -0
  938. package/dist/shared/workspaceRemovalPresentation.js.map +1 -0
  939. package/docs/README.md +7 -3
  940. package/docs/assets/pi-web-desktop-graphite.png +0 -0
  941. package/docs/assets/pi-web-desktop-paper.png +0 -0
  942. package/docs/assets/pi-web-desktop-pi-web-dark.png +0 -0
  943. package/docs/assets/pi-web-desktop-pi-web-light.png +0 -0
  944. package/docs/assets/pi-web-desktop.png +0 -0
  945. package/docs/assets/pi-web-mobile-graphite.png +0 -0
  946. package/docs/assets/pi-web-mobile-paper.png +0 -0
  947. package/docs/assets/pi-web-mobile-pi-web-dark.png +0 -0
  948. package/docs/assets/pi-web-mobile-pi-web-light.png +0 -0
  949. package/docs/assets/pi-web-mobile-themes.gif +0 -0
  950. package/docs/assets/pi-web-mobile.png +0 -0
  951. package/docs/assets/pi-web-tablet-graphite.png +0 -0
  952. package/docs/assets/pi-web-tablet-paper.png +0 -0
  953. package/docs/assets/pi-web-tablet-pi-web-dark.png +0 -0
  954. package/docs/assets/pi-web-tablet-pi-web-light.png +0 -0
  955. package/docs/assets/pi-web-tablet-themes.gif +0 -0
  956. package/docs/assets/pi-web-tablet.png +0 -0
  957. package/docs/assets/pi-web-themes.gif +0 -0
  958. package/docs/config.md +193 -55
  959. package/docs/plugins.md +350 -21
  960. package/docs/scheduled-tasks.md +127 -0
  961. package/package.json +43 -19
  962. package/dist/client/assets/CommandPicker-8oDe6AaV.js +0 -70
  963. package/dist/client/assets/PiWebApp-TCQVYghs.js +0 -3761
  964. package/dist/client/assets/SettingsDialog-DFUpwUyp.js +0 -1015
  965. package/dist/client/assets/index-DzMPXVth.js +0 -2
  966. package/dist/client/assets/managementEmbed-Bx8Mwzdw.js +0 -2
  967. package/dist/client/assets/preload-helper-XpATwJ5c.js +0 -1
  968. package/dist/pi-packages/captains-log/README.md +0 -11
  969. package/dist/pi-packages/captains-log/dist/browser/channelProtocol.js +0 -29
  970. package/dist/pi-packages/captains-log/dist/browser/index.js +0 -143
  971. package/dist/pi-packages/captains-log/dist/browser/markdown.js +0 -68
  972. package/dist/pi-packages/captains-log/dist/browser/panel.js +0 -148
  973. package/dist/pi-packages/captains-log/dist/browser/protocol.js +0 -26
  974. package/dist/pi-packages/captains-log/dist/companion.js +0 -126
  975. package/dist/pi-packages/captains-log/dist/roundtrip.js +0 -62
  976. package/dist/pi-packages/captains-log/dist/server.js +0 -210
  977. package/dist/pi-packages/captains-log/dist/store.js +0 -75
  978. package/dist/pi-packages/captains-log/docs/usage.md +0 -29
  979. package/dist/pi-packages/captains-log/i18n.js +0 -7
  980. package/dist/pi-packages/captains-log/package.json +0 -35
  981. package/dist/pi-packages/captains-log/tsconfig.json +0 -21
  982. package/dist/pi-packages/captains-log/vite.config.mjs +0 -28
  983. package/examples/session-bridge-plugin/README.md +0 -20
  984. package/examples/session-bridge-plugin/docs/usage.md +0 -54
  985. package/examples/session-bridge-plugin/package.json +0 -26
  986. package/examples/session-bridge-plugin/src/browser/index.ts +0 -87
  987. package/examples/session-bridge-plugin/src/browser/protocol.ts +0 -24
  988. package/examples/session-bridge-plugin/src/companion.ts +0 -65
  989. package/examples/session-bridge-plugin/src/reviewRun.ts +0 -39
  990. package/examples/session-bridge-plugin/src/server.ts +0 -85
  991. package/examples/session-bridge-plugin/src/store.ts +0 -80
  992. package/examples/session-bridge-plugin/tsconfig.json +0 -21
  993. /package/dist/{client/assets/classic-CyM97Akm.css → pi-web-plugins/themes/assets/classic.css} +0 -0
  994. /package/dist/{client/assets/pi-web-dark-D_KtbM95.css → pi-web-plugins/themes/assets/pi-web-dark.css} +0 -0
  995. /package/dist/{client/assets/pi-web-light-DSNLMIBI.css → pi-web-plugins/themes/assets/pi-web-light.css} +0 -0
@@ -1,11 +1,13 @@
1
1
  // Generated from pi-web-plugins/git/browser/git-panel.ts. Do not edit directly.
2
2
  import { t } from "./i18n.js";
3
3
  import { GIT_DIFF_OPERATION, GIT_STATUS_OPERATION, parseGitDiffResponse, parseGitStatusResponse, } from "./git-contract.js";
4
+ import { defineGitFileIconElement } from "./gitFileIcon.js";
4
5
  import { buildGitFileList } from "./gitFileList.js";
5
6
  import { buildGitFileTree, collectGitFileTreeDirectoryPaths } from "./gitFileTree.js";
6
7
  import { readGitFileView, writeGitFileView } from "./gitFileViewPreference.js";
7
8
  import { createGitDiffRoute } from "./gitRoute.js";
8
9
  import { parseUnifiedDiff } from "./unifiedDiff.js";
10
+ import definitions from "./git.messages.js";
9
11
  const GIT_PANEL_LOCAL_ID = "workspace.git";
10
12
  const GIT_POLL_INTERVAL_MS = 8_000;
11
13
  const LARGE_GIT_POLL_INTERVAL_MS = 30_000;
@@ -17,9 +19,10 @@ const GIT_WORKSPACE_STATE_LIMIT = 8;
17
19
  const activityElementTag = "pi-web-git-panel-activity";
18
20
  const EMPTY_LIST_MODEL = { submodules: [], files: [] };
19
21
  const EMPTY_VIEW_STATE = { nodes: [], listModel: EMPTY_LIST_MODEL, expandablePaths: [] };
20
- export function createGitBrowserContributions(sourcePluginId, runtimePluginId, html, svg, stylesheetIntegration = () => undefined) {
22
+ export function createGitBrowserContributions(sourcePluginId, runtimePluginId, html, svg, stylesheetIntegration, localization, fileIcons) {
21
23
  const panelId = `${runtimePluginId}:${GIT_PANEL_LOCAL_ID}`;
22
- const controller = new GitUiController(sourcePluginId, createGitDiffRoute(panelId));
24
+ const controller = new GitUiController(sourcePluginId, createGitDiffRoute(panelId), localization, fileIcons);
25
+ defineGitFileIconElement();
23
26
  defineGitPanelActivityElement();
24
27
  return {
25
28
  actions: createGitActions(panelId, controller),
@@ -29,15 +32,22 @@ export function createGitBrowserContributions(sourcePluginId, runtimePluginId, h
29
32
  class GitUiController {
30
33
  sourcePluginId;
31
34
  route;
35
+ localization;
36
+ getFileIcons;
37
+ messages;
32
38
  states = new Map();
33
39
  activeWorkspaceKey;
34
40
  connectedWorkspaceKey;
35
41
  routeNavigationPending = true;
36
42
  view = readGitFileView();
37
- constructor(sourcePluginId, route) {
43
+ constructor(sourcePluginId, route, localization, getFileIcons) {
38
44
  this.sourcePluginId = sourcePluginId;
39
45
  this.route = route;
46
+ this.localization = localization;
47
+ this.getFileIcons = getFileIcons;
48
+ this.messages = localization.registerMessages("panel", definitions);
40
49
  }
50
+ get fileIcons() { return this.getFileIcons(); }
41
51
  canInspectWorkspace(workspace) {
42
52
  return workspace !== undefined && (workspace.provider === undefined || workspace.provider.pluginId === this.sourcePluginId);
43
53
  }
@@ -134,7 +144,7 @@ class GitUiController {
134
144
  })
135
145
  .catch((error) => {
136
146
  if (state.retained)
137
- state.error = errorMessage(error);
147
+ state.error = gitError(error);
138
148
  })
139
149
  .finally(() => {
140
150
  if (state.statusRequest !== request)
@@ -318,7 +328,7 @@ class GitUiController {
318
328
  catch (error) {
319
329
  if (!state.retained || state.diffRequestSequence !== sequence || state.selectedDiffPath !== path)
320
330
  return;
321
- state.error = errorMessage(error);
331
+ state.error = gitError(error);
322
332
  }
323
333
  finally {
324
334
  if (state.retained && state.diffRequestSequence === sequence && state.selectedDiffPath === path) {
@@ -340,19 +350,19 @@ function createGitActions(panelId, controller) {
340
350
  return [
341
351
  {
342
352
  id: "view.git",
343
- title: t("client.actions.go.to.git.0d4886", "Go to Git"),
353
+ get title() { return controller.messages.t("goToGit"); },
344
354
  shortcut: "mod+3",
345
355
  shortcutAliases: ["core:view.git"],
346
- group: t("client.actions.navigation.e72622", "Navigation"),
356
+ get group() { return controller.messages.t("navigation"); },
347
357
  enabled: hasGitWorkspace,
348
358
  run: (context) => { context.selectWorkspaceTool(panelId); },
349
359
  },
350
360
  {
351
361
  id: "workspace.refresh-git",
352
- title: t("client.actions.refresh.git.496f8a", "Refresh Git"),
362
+ get title() { return controller.messages.t("refreshGit"); },
353
363
  shortcut: "mod+shift+g",
354
364
  shortcutAliases: ["core:workspace.refresh-git"],
355
- group: t("bundled.workspace-tasks.workspace.379798", "Workspace"),
365
+ get group() { return controller.messages.t("workspace"); },
356
366
  enabled: hasGitWorkspace,
357
367
  run: (context) => context.refreshWorkspacePanels(panelId),
358
368
  },
@@ -361,7 +371,7 @@ function createGitActions(panelId, controller) {
361
371
  function createGitPanel(html, svg, controller, stylesheetIntegration) {
362
372
  return {
363
373
  id: GIT_PANEL_LOCAL_ID,
364
- title: "Git",
374
+ get title() { return controller.messages.t("git"); },
365
375
  icon: svg `
366
376
  <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
367
377
  <circle cx="6" cy="6" r="2"></circle>
@@ -382,7 +392,7 @@ function createGitPanel(html, svg, controller, stylesheetIntegration) {
382
392
  }
383
393
  function requestGitBackend(context, operation, input) {
384
394
  if (context.peer?.request === undefined) {
385
- return Promise.reject(new Error(t("ui.main.fc3b27465765", "Git workspace backend is unavailable. Update and restart PI WEB on this machine, then reload the browser.")));
395
+ return Promise.reject(new GitBackendUnavailableError());
386
396
  }
387
397
  return context.peer.request(operation, input);
388
398
  }
@@ -392,30 +402,30 @@ function renderGitPanel(html, controller, context, stylesheetIntegration) {
392
402
  return html `
393
403
  <section class="git-panel">
394
404
  <style data-git-styles .textContent=${gitPanelStyles}></style>
395
- <pi-web-git-panel-activity .stylesheetIntegration=${stylesheetIntegration} .controller=${controller} .context=${context}></pi-web-git-panel-activity>
405
+ <pi-web-git-panel-activity .fileIcons=${controller.fileIcons} .stylesheetIntegration=${stylesheetIntegration} .localization=${controller.localization} .controller=${controller} .context=${context}></pi-web-git-panel-activity>
396
406
  <section class="ui-toolbar git-toolbar">
397
- <strong>Git</strong>
398
- ${state.stale ? html `<span class="git-stale">${t("ui.main.3468df3f1fe9", "stale")}</span>` : null}
407
+ <strong>${controller.messages.t("git")}</strong>
408
+ ${state.stale ? html `<span class="git-stale">${controller.messages.t("stale")}</span>` : null}
399
409
  <div class="ui-toolbar-group git-toolbar-actions">
400
410
  ${viewState.expandablePaths.length === 0 ? null : renderExpandCollapseAll(html, controller, context, state, viewState.expandablePaths)}
401
411
  ${renderViewToggle(html, controller, context)}
402
- <button class="ui-button" type="button" ?disabled=${state.statusLoading} @click=${() => { void controller.refresh(context); }}>${t("bundled.relays.refresh.aee887", "Refresh")}</button>
412
+ <button type="button" class="ui-button" ?disabled=${state.statusLoading} @click=${() => { void controller.refresh(context); }}>${controller.messages.t("refresh")}</button>
403
413
  </div>
404
414
  </section>
405
- ${state.error === undefined ? null : html `<div class="git-error" role="alert">${state.error}</div>`}
415
+ ${state.error === undefined ? null : html `<div class="git-error" role="alert">${controller.messages.t(state.error)}</div>`}
406
416
  ${state.status?.truncated === true ? html `<div class="git-warning" role="status">${t("ui.main.1634590c49b8", "Git status output was too large; the file list was truncated.")}</div>` : null}
407
417
  <section class="git-split">
408
418
  <div class="ui-file-list git-file-list">${renderFileList(html, controller, context, state, viewState)}</div>
409
- <div class="git-viewer">${renderDiffViewer(html, state)}</div>
419
+ <div class="git-viewer">${renderDiffViewer(html, state, controller)}</div>
410
420
  </section>
411
421
  </section>
412
422
  `;
413
423
  }
414
424
  function renderViewToggle(html, controller, context) {
415
425
  return html `
416
- <div class="ui-toolbar-group git-view-toggle" role="group" aria-label="${t("ui.main.898449210b9d", "Changed files view")}">
417
- ${renderViewToggleButton(html, controller, context, "list", t("ui.workspaceGitPanel.list", "List"))}
418
- ${renderViewToggleButton(html, controller, context, "tree", t("ui.main.7f32c63d2d35", "Tree"))}
426
+ <div class="ui-toolbar-group git-view-toggle" role="group" aria-label=${controller.messages.t("changedFilesView")}>
427
+ ${renderViewToggleButton(html, controller, context, "list", controller.messages.t("list"))}
428
+ ${renderViewToggleButton(html, controller, context, "tree", controller.messages.t("tree"))}
419
429
  </div>
420
430
  `;
421
431
  }
@@ -425,17 +435,17 @@ function renderViewToggleButton(html, controller, context, view, label) {
425
435
  }
426
436
  function renderExpandCollapseAll(html, controller, context, state, expandablePaths) {
427
437
  const allExpanded = expandablePaths.every((path) => state.expandedDirectories.has(path));
428
- return html `<button class="ui-button" type="button" @click=${() => { controller.toggleExpandAll(context, expandablePaths, allExpanded); }}>${allExpanded ? t("ui.workspaceGitPanel.collapseAll", "Collapse all") : t("ui.workspaceGitPanel.expandAll", "Expand all")}</button>`;
438
+ return html `<button type="button" class="ui-button" @click=${() => { controller.toggleExpandAll(context, expandablePaths, allExpanded); }}>${controller.messages.t(allExpanded ? "collapseAll" : "expandAll")}</button>`;
429
439
  }
430
440
  function renderFileList(html, controller, context, state, viewState) {
431
441
  const status = state.status;
432
442
  if (status === undefined)
433
- return html `<p class="git-muted">${state.error === undefined ? t("ui.main.f2cb84a98270", "Loading status…") : t("ui.main.d2302e08b20b", "Status unavailable.")}</p>`;
443
+ return html `<p class="git-muted">${controller.messages.t(state.error === undefined ? "loadingStatus" : "statusUnavailable")}</p>`;
434
444
  if (!status.isGitRepo)
435
- return html `<p class="git-muted">${t("ui.main.b4b1ea928fc3", "Not a git repository.")}</p>`;
436
- const summary = html `<p class="git-summary">${gitSummary(status)}</p>`;
445
+ return html `<p class="git-muted">${controller.messages.t("notRepository")}</p>`;
446
+ const summary = html `<p class="git-summary">${gitSummary(html, status, controller)}</p>`;
437
447
  if (status.files.length === 0)
438
- return html `${summary}<p class="git-muted">${t("ui.workspaceGitPanel.noChanges", "No changes.")}</p>`;
448
+ return html `${summary}<p class="git-muted">${controller.messages.t("noChanges")}</p>`;
439
449
  state.remainingRows = state.visibleFileLimit;
440
450
  state.hasMoreRows = status.files.length > state.visibleFileLimit;
441
451
  const body = controller.currentView() === "tree"
@@ -460,7 +470,7 @@ function renderSubmoduleGroup(html, controller, context, state, group) {
460
470
  return html `
461
471
  <button type="button" class="ui-button ui-file-row" style="--depth:0" title=${group.path} aria-expanded=${String(expanded)} @click=${() => { controller.toggleDirectory(context, group.path); }}>
462
472
  <span class="ui-file-leading" aria-hidden="true">${expanded ? "▾" : "▸"}</span>
463
- <span class="ui-file-label">${group.name}${submoduleBadge(html)}</span>
473
+ <span class="ui-file-label"><bdi dir="ltr">${group.name}</bdi>${submoduleBadge(html, controller)}</span>
464
474
  </button>
465
475
  ${expanded ? html `
466
476
  ${group.pointer === undefined ? null : renderSelectableRow(html, controller, context, state, group.path, group.pointer.name, group.pointer.file, 1)}
@@ -479,7 +489,7 @@ function renderTreeNode(html, controller, context, state, node, depth) {
479
489
  return html `
480
490
  <button type="button" class="ui-button ui-file-row" style=${`--depth:${String(depth)}`} title=${node.path} aria-expanded=${String(expanded)} @click=${() => { controller.toggleDirectory(context, node.path); }}>
481
491
  <span class="ui-file-leading" aria-hidden="true">${expanded ? "▾" : "▸"}</span>
482
- <span class="ui-file-label">${node.name}${node.isSubmodule === true ? submoduleBadge(html) : null}</span>
492
+ <span class="ui-file-label"><bdi dir="ltr">${node.name}</bdi>${node.isSubmodule === true ? submoduleBadge(html, controller) : null}</span>
483
493
  </button>
484
494
  ${expanded ? node.children.map((child) => renderTreeNode(html, controller, context, state, child, depth + 1)) : null}
485
495
  `;
@@ -493,25 +503,38 @@ function renderSelectableRow(html, controller, context, state, path, label, file
493
503
  if (!consumeGitRow(state))
494
504
  return html ``;
495
505
  const selected = state.selectedDiffPath === path;
506
+ const status = file.index === "conflicted" || file.workingTree === "conflicted"
507
+ ? "conflicted" : file.workingTree !== "unmodified" ? file.workingTree : file.index;
508
+ const description = controller.messages.t("fileState", { state: status });
509
+ const staged = file.index !== "unmodified";
510
+ const unstaged = file.workingTree !== "unmodified";
511
+ const staging = status === "conflicted" || status === "untracked" || status === "ignored"
512
+ ? undefined : staged && unstaged ? "bothChanges" : staged ? "stagedChanges" : "unstagedChanges";
496
513
  return html `
497
- <button type="button" class=${selected ? "ui-button ui-file-row selected" : "ui-button ui-file-row"} style=${`--depth:${String(depth)}`} title=${path} aria-current=${selected ? "page" : "false"} @click=${() => { controller.selectDiff(context, path); }}>
498
- <span class="ui-file-leading" aria-hidden="true"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8Z"></path><path d="M14 2v6h6"></path></svg></span>
499
- <span class="ui-file-label">${label}</span>
500
- <span class="ui-file-meta">${stateLabel(file.index, file.workingTree)}</span>
514
+ <button type="button" class=${selected ? "ui-button ui-file-row selected" : "ui-button ui-file-row"} data-git-state=${status} style=${`--depth:${String(depth)}`} title=${path} aria-current=${selected ? "page" : "false"} @click=${() => { controller.selectDiff(context, path); }}>
515
+ <span class="ui-file-leading" aria-hidden="true"><pi-web-git-file-icon .url=${controller.fileIcons?.resolveIcon(file.path)}></pi-web-git-file-icon></span>
516
+ <span class="ui-file-label"><bdi dir="ltr">${label}</bdi></span>
517
+ <span class="git-file-details">
518
+ ${staging === undefined ? null : html `<span class="git-staging" title=${controller.messages.t("stagingDetail", {
519
+ index: controller.messages.t("fileState", { state: file.index }),
520
+ workingTree: controller.messages.t("fileState", { state: file.workingTree }),
521
+ })}>${controller.messages.t(staging)}</span>`}
522
+ <span class="ui-file-meta git-status" title=${description} aria-label=${description}>${status === "conflicted" ? description : stateLabel(status)}</span>
523
+ </span>
501
524
  </button>
502
525
  `;
503
526
  }
504
- function renderDiffViewer(html, state) {
527
+ function renderDiffViewer(html, state, controller) {
505
528
  if (state.selectedDiffPath === undefined)
506
- return html `<p class="git-muted">${t("ui.main.77ed4aee3792", "Select a changed file.")}</p>`;
529
+ return html `<p class="git-muted">${controller.messages.t("selectFile")}</p>`;
507
530
  const unstaged = state.selectedDiff;
508
531
  const staged = state.selectedStagedDiff;
509
532
  if (unstaged === undefined || staged === undefined)
510
- return html `<p class="git-muted">${t("ui.workspaceGitPanel.loadingDiff", "Loading diff…")}</p>`;
533
+ return html `<p class="git-muted">${controller.messages.t("loadingDiff")}</p>`;
511
534
  const diffs = [staged, unstaged].filter((diff) => diff.response.diff !== "");
512
535
  if (diffs.length === 0)
513
- return html `<p class="git-muted">${t("ui.workspaceGitPanel.noStagedOrUnstagedDiff", "No staged or unstaged diff.")}</p>`;
514
- return html `<div class=${diffs.length === 1 ? "git-diffs is-single" : "git-diffs"}>${diffs.map((diff) => renderDiffSection(html, diff))}</div>`;
536
+ return html `<p class="git-muted">${controller.messages.t("noStagedDiff")}</p>`;
537
+ return html `<div class=${diffs.length === 1 ? "git-diffs is-single" : "git-diffs"}>${diffs.map((diff) => renderDiffSection(html, diff, controller))}</div>`;
515
538
  }
516
539
  function consumeGitRow(state) {
517
540
  if (state.remainingRows > 0) {
@@ -521,27 +544,27 @@ function consumeGitRow(state) {
521
544
  state.hasMoreRows = true;
522
545
  return false;
523
546
  }
524
- function renderDiffSection(html, view) {
547
+ function renderDiffSection(html, view, controller) {
525
548
  const diff = view.response;
526
549
  const lines = view.lines ??= parseUnifiedDiff(diff.diff);
527
550
  return html `
528
551
  <section class="git-diff-section">
529
- <div class="git-viewer-header"><strong>${diff.path ?? t("ui.workspaceGitPanel.diff", "Diff")}</strong><small>${diff.staged ? t("ui.workspaceGitPanel.staged", "Staged") : t("ui.workspaceGitPanel.unstaged", "Unstaged")}${diff.truncated ? t("ui.workspaceGitPanel.truncated", " · Truncated") : ""}</small></div>
530
- ${lines.length === 0 ? html `<p class="git-muted">${t("ui.unifiedDiffViewer.noDiff", "No diff.")}</p>` : html `
552
+ <div class="git-viewer-header"><strong><bdi dir="ltr">${diff.path ?? controller.messages.t("diff")}</bdi></strong><small>${controller.messages.t("diffState", { staged: diff.staged ? "yes" : "no", truncated: diff.truncated ? "yes" : "no" })}</small></div>
553
+ ${lines.length === 0 ? html `<p class="git-muted">${controller.messages.t("noDiff")}</p>` : html `
531
554
  <div class="git-diff-scroller">
532
- <div class="git-diff-grid" role="table" aria-label="${t("ui.unifiedDiffViewer.unifiedDiff", "Unified diff")}">
533
- ${lines.map((line) => renderDiffLine(html, line))}
555
+ <div class="git-diff-grid" role="table" aria-label=${controller.messages.t("unifiedDiff")} dir="ltr">
556
+ ${lines.map((line) => renderDiffLine(html, line, controller))}
534
557
  </div>
535
558
  </div>
536
559
  `}
537
560
  </section>
538
561
  `;
539
562
  }
540
- function renderDiffLine(html, line) {
563
+ function renderDiffLine(html, line, controller) {
541
564
  return html `
542
565
  <div class="git-diff-line" role="row">
543
- <span class=${`git-diff-cell git-line-number ${line.kind}`} role="cell">${formatLineNumber(line.oldLineNumber)}</span>
544
- <span class=${`git-diff-cell git-line-number ${line.kind}`} role="cell">${formatLineNumber(line.newLineNumber)}</span>
566
+ <span class=${`git-diff-cell git-line-number ${line.kind}`} role="cell">${formatLineNumber(line.oldLineNumber, controller)}</span>
567
+ <span class=${`git-diff-cell git-line-number ${line.kind}`} role="cell">${formatLineNumber(line.newLineNumber, controller)}</span>
545
568
  <span class=${`git-diff-cell git-prefix ${line.kind}`} role="cell">${line.prefix}</span>
546
569
  <span class=${`git-diff-cell git-content ${line.kind}`} role="cell">${renderDiffSpans(html, line.spans)}</span>
547
570
  </div>
@@ -594,6 +617,36 @@ function defineGitPanelActivityElement() {
594
617
  pollTimer;
595
618
  integration;
596
619
  releaseStyles;
620
+ localizationValue;
621
+ releaseLocalization;
622
+ icons;
623
+ releaseIcons;
624
+ set fileIcons(value) {
625
+ if (value === this.icons)
626
+ return;
627
+ this.releaseIcons?.();
628
+ this.releaseIcons = undefined;
629
+ this.icons = value;
630
+ this.subscribeIcons();
631
+ }
632
+ subscribeIcons() {
633
+ if (!this.isConnected || this.releaseIcons !== undefined)
634
+ return;
635
+ this.releaseIcons = this.icons?.subscribe(() => this.contextValue?.host.requestRender());
636
+ }
637
+ set localization(value) {
638
+ if (this.localizationValue === value)
639
+ return;
640
+ this.releaseLocalization?.();
641
+ this.releaseLocalization = undefined;
642
+ this.localizationValue = value;
643
+ this.subscribeLocalization();
644
+ }
645
+ subscribeLocalization() {
646
+ if (!this.isConnected || this.releaseLocalization !== undefined)
647
+ return;
648
+ this.releaseLocalization = this.localizationValue?.subscribe(() => this.contextValue?.host.requestRender());
649
+ }
597
650
  set stylesheetIntegration(value) {
598
651
  if (this.integration === value)
599
652
  return;
@@ -624,11 +677,18 @@ function defineGitPanelActivityElement() {
624
677
  }
625
678
  connectedCallback() {
626
679
  this.registerStyles();
680
+ this.subscribeLocalization();
681
+ this.subscribeIcons();
682
+ this.contextValue?.host.requestRender();
627
683
  window.addEventListener("popstate", this.onPopState);
628
684
  document.addEventListener("visibilitychange", this.onVisibilityChange);
629
685
  this.restart();
630
686
  }
631
687
  disconnectedCallback() {
688
+ this.releaseIcons?.();
689
+ this.releaseIcons = undefined;
690
+ this.releaseLocalization?.();
691
+ this.releaseLocalization = undefined;
632
692
  this.releaseStyles?.();
633
693
  this.releaseStyles = undefined;
634
694
  window.removeEventListener("popstate", this.onPopState);
@@ -666,21 +726,26 @@ function defineGitPanelActivityElement() {
666
726
  }
667
727
  customElements.define(activityElementTag, GitPanelActivityElement);
668
728
  }
669
- function submoduleBadge(html) {
670
- return html `<span class="submodule-badge">${t("ui.workspaceGitPanel.submodule", "Submodule")}</span>`;
729
+ function submoduleBadge(html, controller) {
730
+ return html `<span class="submodule-badge">${controller.messages.t("submodule")}</span>`;
671
731
  }
672
- function gitSummary(status) {
673
- const branch = status.branch ?? t("ui.workspaceGitPanel.detachedHead", "Detached HEAD");
732
+ function gitSummary(html, status, controller) {
733
+ const branch = status.branch ?? controller.messages.t("detached");
674
734
  const ahead = status.ahead ?? 0;
675
735
  const behind = status.behind ?? 0;
676
- return ahead === 0 && behind === 0 ? branch : `${branch} · ↑${String(ahead)} ↓${String(behind)}`;
736
+ return ahead === 0 && behind === 0
737
+ ? html `<bdi dir="ltr">${branch}</bdi>`
738
+ : controller.messages.rich("branchSummary", { branch, ahead, behind, name: (parts) => html `<bdi dir="ltr">${parts}</bdi>` });
677
739
  }
678
- function stateLabel(index, workingTree) {
679
- const label = workingTree !== "unmodified" ? workingTree : index;
680
- return label.slice(0, 1).toUpperCase();
740
+ function stateLabel(state) {
741
+ if (state === "untracked")
742
+ return "?";
743
+ if (state === "ignored")
744
+ return "!";
745
+ return state.slice(0, 1).toUpperCase();
681
746
  }
682
- function formatLineNumber(lineNumber) {
683
- return lineNumber === undefined ? "" : String(lineNumber);
747
+ function formatLineNumber(lineNumber, controller) {
748
+ return lineNumber === undefined ? "" : controller.localization.number(lineNumber, { useGrouping: false });
684
749
  }
685
750
  function createDiffView(response, previous) {
686
751
  if (previous?.response.hash !== response.hash)
@@ -693,16 +758,21 @@ function createDiffView(response, previous) {
693
758
  function workspaceContextKey(context) {
694
759
  return JSON.stringify([context.machine.id, context.workspace.projectId, context.workspace.id]);
695
760
  }
696
- function errorMessage(error) {
697
- return error instanceof Error ? error.message : String(error);
761
+ class GitBackendUnavailableError extends Error {
762
+ }
763
+ function gitError(error) {
764
+ if (error instanceof GitBackendUnavailableError)
765
+ return "backendUnavailable";
766
+ console.error("Git request failed", error);
767
+ return "requestFailed";
698
768
  }
699
769
  const gitPanelStyles = `
700
770
  .git-panel { flex: 1 1 auto; min-height: 0; display: flex; flex-direction: column; overflow: hidden; color: var(--pi-text); background: var(--pi-bg); font: 13px var(--pi-font, system-ui, sans-serif); }
701
771
  .git-panel ${activityElementTag} { display: none; }
702
772
  .git-panel small, .git-panel .git-muted { color: var(--pi-muted); }
703
773
  .git-panel p { margin: 10px; }
704
- .git-panel .git-toolbar { flex: 0 0 auto; border-bottom: 1px solid var(--pi-border-muted); font-size: 12px; color: var(--pi-muted); }
705
- .git-panel .git-toolbar-actions { margin-left: auto; }
774
+ .git-panel .git-toolbar { overflow-x: auto; flex: 0 0 auto; font-size: 12px; color: var(--pi-muted); }
775
+ .git-panel .git-toolbar-actions { margin-inline-start: auto; }
706
776
  .git-panel .git-toolbar > strong { display: flex; align-items: center; padding-inline: 10px; font-weight: 500; }
707
777
  .git-panel .git-toolbar .ui-button { white-space: nowrap; }
708
778
  .git-panel .git-toolbar .ui-button[aria-pressed="true"] { background: var(--pi-surface-hover); color: var(--pi-text); }
@@ -712,8 +782,17 @@ const gitPanelStyles = `
712
782
  .git-panel .git-load-more { margin: 8px auto; }
713
783
  .git-panel .git-split { flex: 1 1 auto; min-height: 0; display: grid; grid-template-rows: minmax(160px, 34%) minmax(0, 1fr); }
714
784
  .git-panel .git-file-list { border-bottom: 1px solid var(--pi-border); }
785
+ .git-panel [data-git-state] { --git-status-color: var(--pi-muted); }
786
+ .git-panel [data-git-state="added"], .git-panel [data-git-state="untracked"] { --git-status-color: var(--pi-success); }
787
+ .git-panel [data-git-state="modified"] { --git-status-color: var(--pi-warning); }
788
+ .git-panel [data-git-state="deleted"], .git-panel [data-git-state="conflicted"] { --git-status-color: var(--pi-danger); }
789
+ .git-panel [data-git-state="renamed"], .git-panel [data-git-state="copied"] { --git-status-color: var(--pi-accent); }
790
+ .git-panel [data-git-state] .ui-file-label, .git-panel .git-status { color: var(--git-status-color); }
791
+ .git-panel .git-status { font-weight: 600; }
792
+ .git-panel .git-file-details { display: flex; align-items: center; gap: 8px; white-space: nowrap; }
793
+ .git-panel .git-staging { color: var(--pi-muted); font-size: 11px; white-space: nowrap; }
715
794
  .git-panel .git-summary { margin: 10px 12px 8px; color: var(--pi-muted); }
716
- .git-panel .submodule-badge { display: inline-block; margin-left: 6px; border: 1px solid var(--pi-border); border-radius: 999px; color: var(--pi-muted); padding: 0 5px; font-size: 11px; font-weight: 400; vertical-align: baseline; }
795
+ .git-panel .submodule-badge { display: inline-block; margin-inline-start: 6px; border: 1px solid var(--pi-border); border-radius: 999px; color: var(--pi-muted); padding: 0 5px; font-size: 11px; font-weight: 400; vertical-align: baseline; }
717
796
  .git-panel .git-viewer { min-height: 0; overflow: auto; display: flex; flex-direction: column; }
718
797
  .git-panel .git-diffs { flex: 1 1 auto; min-height: 0; overflow: auto; display: grid; grid-template-rows: minmax(120px, 1fr) minmax(120px, 1fr); }
719
798
  .git-panel .git-diffs.is-single { grid-template-rows: minmax(0, 1fr); }
@@ -0,0 +1,47 @@
1
+ // Generated from pi-web-plugins/git/browser/git.messages.ts. Do not edit directly.
2
+ const git = { "message": "Git", "description": "Git panel title; product name" };
3
+ const goToGit = { "message": "Go to Git", "description": "Navigate to the Git panel" };
4
+ const refreshGit = { "message": "Refresh Git", "description": "Action to refresh repository status" };
5
+ const navigation = { "message": "Navigation", "description": "Action palette group for navigation" };
6
+ const workspace = { "message": "Workspace", "description": "Action palette group for workspace actions" };
7
+ const stale = { "message": "stale", "description": "Repository status is out of date" };
8
+ const refresh = { "message": "Refresh", "description": "Reload Git status" };
9
+ const changedFilesView = { "message": "Changed files view", "description": "Accessible name of list/tree view controls" };
10
+ const list = { "message": "List", "description": "Flat changed-file view" };
11
+ const tree = { "message": "Tree", "description": "Hierarchical changed-file view" };
12
+ const collapseAll = { "message": "Collapse all", "description": "Collapse all directories and submodules" };
13
+ const expandAll = { "message": "Expand all", "description": "Expand all directories and submodules" };
14
+ const loadingStatus = { "message": "Loading status…", "description": "Repository status request is pending" };
15
+ const statusUnavailable = { "message": "Status unavailable.", "description": "Repository status could not be loaded" };
16
+ const notRepository = { "message": "Not a git repository.", "description": "Selected workspace is not in a Git repository" };
17
+ const noChanges = { "message": "No changes.", "description": "Repository has no changed files" };
18
+ const selectFile = { "message": "Select a changed file.", "description": "Diff viewer before file selection" };
19
+ const loadingDiff = { "message": "Loading diff…", "description": "Diff request is pending" };
20
+ const noStagedDiff = { "message": "No staged or unstaged diff.", "description": "Selected file has no diff to display" };
21
+ const diff = { "message": "diff", "description": "Fallback title for a diff with no path" };
22
+ const noDiff = { "message": "No diff.", "description": "Diff response has no lines" };
23
+ const unifiedDiff = { "message": "Unified diff", "description": "Accessible name for the diff table" };
24
+ const submodule = { "message": "submodule", "description": "Badge identifying a Git submodule" };
25
+ const detached = { "message": "detached", "description": "Repository is not on a named branch" };
26
+ const backendUnavailable = { "message": "Git workspace backend is unavailable. Update and restart PI WEB on this machine, then reload the browser.", "description": "Recovery instructions when the paired Git backend is missing" };
27
+ const requestFailed = { "message": "Could not refresh Git. Try refreshing again.", "description": "Repository status or diff request failed; technical details are logged" };
28
+ const diffState = {
29
+ message: "{staged, select, yes {{truncated, select, yes {staged · truncated} other {staged}}} other {{truncated, select, yes {unstaged · truncated} other {unstaged}}}}",
30
+ description: "Diff staging state, with optional truncation warning; translate each complete alternative",
31
+ };
32
+ const branchSummary = {
33
+ message: "<name>{branch}</name> · ↑{ahead, number} ↓{behind, number}",
34
+ description: "Branch name with commits ahead and behind upstream; arrows indicate ahead and behind",
35
+ };
36
+ const fileState = {
37
+ message: "{state, select, modified {Modified} added {Added} deleted {Deleted} renamed {Renamed} copied {Copied} untracked {Untracked} ignored {Ignored} conflicted {Conflicted} other {Unmodified}}",
38
+ description: "Full accessible description of the changed file state; visible letters are Git notation",
39
+ };
40
+ const stagedChanges = { message: "Staged", description: "File has staged changes only" };
41
+ const unstagedChanges = { message: "Unstaged", description: "File has unstaged changes only" };
42
+ const bothChanges = { message: "Both", description: "File has both staged and unstaged changes" };
43
+ const stagingDetail = {
44
+ message: "Staged: {index} · Unstaged: {workingTree}",
45
+ description: "File status in the index and working tree; values are localized file states",
46
+ };
47
+ export default { stagedChanges, unstagedChanges, bothChanges, stagingDetail, git, goToGit, refreshGit, navigation, workspace, stale, refresh, changedFilesView, list, tree, collapseAll, expandAll, loadingStatus, statusUnavailable, notRepository, noChanges, selectFile, loadingDiff, noStagedDiff, diff, noDiff, unifiedDiff, submodule, detached, backendUnavailable, requestFailed, diffState, branchSummary, fileState };
@@ -0,0 +1,71 @@
1
+ // Generated from pi-web-plugins/git/browser/gitFileIcon.ts. Do not edit directly.
2
+ const tag = "pi-web-git-file-icon";
3
+ /** Git consumes alpha masks, not artwork colours or another plugin's elements. */
4
+ export function defineGitFileIconElement() {
5
+ if (typeof customElements === "undefined" || typeof HTMLElement === "undefined" || customElements.get(tag) !== undefined)
6
+ return;
7
+ class GitFileIcon extends HTMLElement {
8
+ value;
9
+ image;
10
+ root = this.attachShadow({ mode: "open" });
11
+ content = document.createElement("span");
12
+ constructor() {
13
+ super();
14
+ const style = document.createElement("style");
15
+ style.textContent = ":host { display: inline-flex; align-items: center; justify-content: center; width: 16px; height: 16px; color: var(--pi-muted, currentColor); } .content { display: contents; } .mask { display: block; width: 16px; height: 16px; background-color: currentColor; mask-size: contain; mask-repeat: no-repeat; mask-position: center; }";
16
+ this.content.className = "content";
17
+ this.root.append(style, this.content);
18
+ this.showFallback();
19
+ }
20
+ set url(value) {
21
+ if (value === this.value)
22
+ return;
23
+ this.value = value;
24
+ this.showFallback();
25
+ if (value === undefined)
26
+ return;
27
+ const image = document.createElement("img");
28
+ image.alt = "";
29
+ image.hidden = true;
30
+ image.draggable = false;
31
+ image.crossOrigin = "anonymous";
32
+ image.referrerPolicy = "no-referrer";
33
+ image.addEventListener("load", () => {
34
+ if (this.image !== image)
35
+ return;
36
+ const mask = document.createElement("span");
37
+ mask.className = "mask";
38
+ mask.setAttribute("aria-hidden", "true");
39
+ mask.style.maskImage = `url(${JSON.stringify(value)})`;
40
+ this.content.querySelector("svg")?.replaceWith(mask);
41
+ }, { once: true });
42
+ image.addEventListener("error", () => {
43
+ if (this.image !== image)
44
+ return;
45
+ console.warn("Failed to load Git file icon", value);
46
+ this.showFallback();
47
+ }, { once: true });
48
+ this.content.append(image);
49
+ this.image = image;
50
+ image.src = value;
51
+ }
52
+ showFallback() {
53
+ this.image = undefined;
54
+ const svg = document.createElementNS("http://www.w3.org/2000/svg", "svg");
55
+ svg.setAttribute("width", "14");
56
+ svg.setAttribute("height", "14");
57
+ svg.setAttribute("viewBox", "0 0 24 24");
58
+ svg.setAttribute("fill", "none");
59
+ svg.setAttribute("stroke", "currentColor");
60
+ svg.setAttribute("stroke-width", "1.6");
61
+ svg.setAttribute("aria-hidden", "true");
62
+ for (const d of ["M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8Z", "M14 2v6h6"]) {
63
+ const path = document.createElementNS("http://www.w3.org/2000/svg", "path");
64
+ path.setAttribute("d", d);
65
+ svg.append(path);
66
+ }
67
+ this.content.replaceChildren(svg);
68
+ }
69
+ }
70
+ customElements.define(tag, GitFileIcon);
71
+ }
@@ -1,6 +1,6 @@
1
1
  // Generated from pi-web-plugins/git/browser/pi-web-plugin.ts. Do not edit directly.
2
- import { setTranslator } from "./i18n.js";
3
2
  import { createGitBrowserContributions } from "./git-panel.js";
3
+ import { setTranslator } from "./i18n.js";
4
4
  const stylesheetIntegrationCapability = {
5
5
  pluginId: "pi-web", id: "stylesheet-integration", version: 1,
6
6
  parse: (value) => {
@@ -16,18 +16,35 @@ function isStylesheetIntegration(value) {
16
16
  && "subscribe" in value && typeof value.subscribe === "function"
17
17
  && "createController" in value && typeof value.createController === "function";
18
18
  }
19
+ const fileIconsCapability = {
20
+ pluginId: "pi-web", id: "file-icons", version: 1,
21
+ parse(value) {
22
+ if (!isFileIcons(value))
23
+ throw new Error("Invalid PI WEB file icons capability v1");
24
+ return value;
25
+ },
26
+ };
27
+ function isFileIcons(value) {
28
+ return typeof value === "object" && value !== null
29
+ && "resolveIcon" in value && typeof value.resolveIcon === "function"
30
+ && "subscribe" in value && typeof value.subscribe === "function";
31
+ }
19
32
  const plugin = {
20
33
  apiVersion: 4,
21
34
  name: "Git",
22
- requires: [stylesheetIntegrationCapability],
23
- activate: ({ pluginId, runtimePluginId, html, svg, translate }) => {
35
+ requires: [stylesheetIntegrationCapability, fileIconsCapability],
36
+ activate: ({ pluginId, runtimePluginId, html, svg, localization, translate }) => {
24
37
  setTranslator(translate);
38
+ if (localization === undefined)
39
+ throw new Error("The Git plugin requires a localization-capable PI WEB host");
25
40
  let stylesheetIntegration;
41
+ let fileIcons;
26
42
  return {
27
43
  start: ({ capabilities }) => {
28
44
  stylesheetIntegration = capabilities.resolve(stylesheetIntegrationCapability);
45
+ fileIcons = capabilities.resolve(fileIconsCapability);
29
46
  },
30
- contributions: createGitBrowserContributions(pluginId, runtimePluginId, html, svg, () => stylesheetIntegration),
47
+ contributions: createGitBrowserContributions(pluginId, runtimePluginId, html, svg, () => stylesheetIntegration, localization, () => fileIcons),
31
48
  };
32
49
  },
33
50
  };
@@ -115,7 +115,8 @@ export function createGitWorkspaceProvider(context, instanceNamespace = "") {
115
115
  if (current.bare === true)
116
116
  throw new Error(t("ui.main.e316bd0c1e32", "A bare Git workspace cannot be removed as a linked worktree"));
117
117
  return {
118
- title: t("ui.shared.168f8f19045c", "Delete workspace: {workspace}", { workspace: workspace.label }),
118
+ title: `Delete workspace: ${workspace.label}`,
119
+ titlePresentation: { kind: "workspaceRemoval", label: workspace.label },
119
120
  command: `git worktree remove ${shellQuote(workspace.path)}`,
120
121
  };
121
122
  },
@@ -157,8 +158,9 @@ function singleGitWorkspace(project) {
157
158
  }
158
159
  function gitRemovalPresentation(label, path) {
159
160
  return {
160
- actionLabel: t("client.actions.delete.workspace.1bca7e", "Delete workspace"),
161
- confirmation: t("ui.main.8e2b2416adcd", "Delete workspace {arg0}?\n\nThis runs git worktree remove and deletes:\n{arg1}\n\nThe corresponding Git branch will not be deleted.", { arg0: label, arg1: path }),
161
+ localization: { kind: "gitWorktree", label, path },
162
+ actionLabel: "Delete workspace",
163
+ confirmation: `Delete workspace ${label}?\n\nThis will run git worktree remove and delete:\n${path}\n\nThe Git branch will not be deleted.`,
162
164
  };
163
165
  }
164
166
  function gitPrivateWorktreePath(workspace) {