@pasko70/pibo 2.1.1 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent-runtime/capabilities.js +68 -0
- package/dist/agent-runtime/context-build.js +13 -5
- package/dist/agent-runtime/portable-history.js +526 -0
- package/dist/agent-runtime/profile-validation.js +13 -7
- package/dist/agent-runtime/resource-files.js +26 -10
- package/dist/agent-runtime/resource-service.js +216 -13
- package/dist/agent-runtimes/codex-native/adapter.js +38 -1
- package/dist/agent-runtimes/codex-native/auth.js +24 -3
- package/dist/agent-runtimes/codex-native/portable-history.js +73 -0
- package/dist/agent-runtimes/codex-native/process.js +38 -27
- package/dist/agent-runtimes/codex-native/resource-delivery.js +39 -16
- package/dist/agent-runtimes/codex-native/turn.js +68 -5
- package/dist/agent-runtimes/omp/adapter.js +43 -8
- package/dist/agent-runtimes/omp/process.js +26 -10
- package/dist/agent-runtimes/omp/resource-delivery.js +150 -84
- package/dist/agent-runtimes/pi/adapter.js +32 -1
- package/dist/agent-runtimes/pi/auth.js +34 -29
- package/dist/agent-runtimes/pi/credentials.js +43 -0
- package/dist/agent-runtimes/pi/model-catalog.js +7 -3
- package/dist/agent-runtimes/pi/portable-history.js +99 -0
- package/dist/agent-runtimes/pi/routed-session.js +1 -1
- package/dist/agent-runtimes/pi/runtime.js +31 -15
- package/dist/apps/chat/agent-profiles.js +1 -0
- package/dist/apps/chat/agent-store.js +20 -7
- package/dist/apps/chat/chat-files.js +19 -6
- package/dist/apps/chat/chat-request-normalizers.js +13 -0
- package/dist/apps/chat/web-app.js +55 -6
- package/dist/apps/chat-ui/assets/{apl-14BqhLYK.js → apl-gfMMiTNf.js} +1 -1
- package/dist/apps/chat-ui/assets/asciiarmor-C_eisQCp.js +1 -0
- package/dist/apps/{context-files-ui/assets/asn1-Bg4FbdCg.js → chat-ui/assets/asn1-DCl_8MCW.js} +1 -1
- package/dist/apps/{context-files-ui/assets/asterisk-B2MO-X4d.js → chat-ui/assets/asterisk-BEn0Cwpx.js} +1 -1
- package/dist/apps/chat-ui/assets/clike-D_6L3tnO.js +1 -0
- package/dist/apps/chat-ui/assets/cmake-84nbDH0I.js +1 -0
- package/dist/apps/chat-ui/assets/cobol-DHLQUbN7.js +1 -0
- package/dist/apps/chat-ui/assets/coffeescript-De_zI4J0.js +1 -0
- package/dist/apps/chat-ui/assets/commonlisp-DgAKBe0r.js +1 -0
- package/dist/apps/chat-ui/assets/crystal-Bsdphhtm.js +1 -0
- package/dist/apps/chat-ui/assets/css-CnaYoQib.js +1 -0
- package/dist/apps/chat-ui/assets/{d-TPqSVaHM.js → d-DWkQyNnU.js} +1 -1
- package/dist/apps/{context-files-ui/assets/dist-DxEGebCR.js → chat-ui/assets/dist-BB8loWTa.js} +1 -1
- package/dist/apps/chat-ui/assets/dist-BJ-TIk3N.js +1 -0
- package/dist/apps/chat-ui/assets/dist-CBPDkWd4.js +1 -0
- package/dist/apps/chat-ui/assets/dist-CHInEWhr.js +1 -0
- package/dist/apps/chat-ui/assets/dist-CqM4On9D.js +13 -0
- package/dist/apps/chat-ui/assets/dist-CswnpKik.js +1 -0
- package/dist/apps/{context-files-ui/assets/dist-B7gXtTZC.js → chat-ui/assets/dist-CwS16H7k.js} +1 -1
- package/dist/apps/chat-ui/assets/dist-DHvUPfrF.js +1 -0
- package/dist/apps/chat-ui/assets/dist-DLJCGrGQ.js +1 -0
- package/dist/apps/chat-ui/assets/{dist-DLMjd26T.js → dist-DMiglryg.js} +1 -1
- package/dist/apps/chat-ui/assets/dist-DTeLDijr.js +9 -0
- package/dist/apps/chat-ui/assets/{dist-DKoyMSNr.js → dist-DpF08Yd7.js} +1 -1
- package/dist/apps/chat-ui/assets/dist-LCx98fA_.js +11 -0
- package/dist/apps/chat-ui/assets/{dist-DotDq_kD.js → dist-RKTRnzGb.js} +1 -1
- package/dist/apps/chat-ui/assets/dist-S3zJGntM.js +1 -0
- package/dist/apps/{context-files-ui/assets/dist-BkUONE3N.js → chat-ui/assets/dist-XVYGiB-c.js} +1 -1
- package/dist/apps/chat-ui/assets/dist-eddbbGyw.js +1 -0
- package/dist/apps/chat-ui/assets/dist-fPhZsAUX.js +1 -0
- package/dist/apps/chat-ui/assets/dist-mpRGeo_R.js +2 -0
- package/dist/apps/chat-ui/assets/{dist-sZgJkWZb.js → dist-nU3BVpFi.js} +1 -1
- package/dist/apps/chat-ui/assets/{dockerfile-CJb2sekW.js → dockerfile-DJkHQgkl.js} +1 -1
- package/dist/apps/chat-ui/assets/{dylan-08Azy1NK.js → dylan-BCDoL_-p.js} +1 -1
- package/dist/apps/chat-ui/assets/{ecl-dhxjHL8y.js → ecl-BVIeWmwY.js} +1 -1
- package/dist/apps/{context-files-ui/assets/erlang-BD5LkVkR.js → chat-ui/assets/erlang-BV0c4Hdn.js} +1 -1
- package/dist/apps/chat-ui/assets/{factor-B2EMQZkP.js → factor-LKH5gN8L.js} +1 -1
- package/dist/apps/chat-ui/assets/groovy-CUpZ7dEl.js +1 -0
- package/dist/apps/chat-ui/assets/{haxe-BJVKtprM.js → haxe-DjVOVvNP.js} +1 -1
- package/dist/apps/chat-ui/assets/index-CQuka3bs.js +226 -0
- package/dist/apps/chat-ui/assets/index-DUXboQnI.css +1 -0
- package/dist/apps/chat-ui/assets/javascript-DoL9Wb-Q.js +1 -0
- package/dist/apps/chat-ui/assets/{lua-BxuTHaF7.js → lua-CiA1ziua.js} +1 -1
- package/dist/apps/chat-ui/assets/{mumps-Ds_ZaumL.js → mumps-BSzj6Xyz.js} +1 -1
- package/dist/apps/{context-files-ui/assets/nsis-DOo3SJmd.js → chat-ui/assets/nsis-CfSuhXs5.js} +1 -1
- package/dist/apps/chat-ui/assets/{ntriples-DLHGTvHs.js → ntriples-B9h1VB_g.js} +1 -1
- package/dist/apps/chat-ui/assets/perl-BkSkiI9m.js +1 -0
- package/dist/apps/chat-ui/assets/{powershell-B4IPkVxR.js → powershell-BcIto6Sf.js} +1 -1
- package/dist/apps/{context-files-ui/assets/pug-QU72BPAa.js → chat-ui/assets/pug-Gsm0M45u.js} +1 -1
- package/dist/apps/chat-ui/assets/puppet-BZyAS7I4.js +1 -0
- package/dist/apps/chat-ui/assets/python-B_1Jd8HM.js +1 -0
- package/dist/apps/chat-ui/assets/r-CxDmU1I4.js +1 -0
- package/dist/apps/chat-ui/assets/ruby-BjXV7-Qa.js +1 -0
- package/dist/apps/chat-ui/assets/scheme-D9qYN0V5.js +1 -0
- package/dist/apps/chat-ui/assets/{shell-BjiMLAaM.js → shell-DwuoZtxw.js} +1 -1
- package/dist/apps/chat-ui/assets/{simple-mode-DnMbQuKW.js → simple-mode-DXiLM1-G.js} +1 -1
- package/dist/apps/chat-ui/assets/sql-DuQMFDvy.js +1 -0
- package/dist/apps/chat-ui/assets/{stex-BCRT8IJ3.js → stex-DNzd62Q_.js} +1 -1
- package/dist/apps/chat-ui/assets/{stylus-CARoeVE9.js → stylus-BOVgKnng.js} +1 -1
- package/dist/apps/chat-ui/assets/textile-C4jVoHG1.js +1 -0
- package/dist/apps/chat-ui/assets/tiki-AK6FwT8q.js +1 -0
- package/dist/apps/chat-ui/assets/toml-BPTmHmyx.js +1 -0
- package/dist/apps/chat-ui/assets/{ttcn-GvRgs2AT.js → ttcn-PPSTk1ow.js} +1 -1
- package/dist/apps/chat-ui/assets/{ttcn-cfg-CGCXz7Vo.js → ttcn-cfg-2b4Gb5sE.js} +1 -1
- package/dist/apps/chat-ui/assets/turtle-Cx3rYX2g.js +1 -0
- package/dist/apps/chat-ui/assets/{verilog-DVCHmufx.js → verilog-7LoJAqYT.js} +1 -1
- package/dist/apps/chat-ui/assets/vhdl-kS471soi.js +1 -0
- package/dist/apps/{context-files-ui/assets/xquery-5f0hn7cg.js → chat-ui/assets/xquery-BKJx4mf9.js} +1 -1
- package/dist/apps/chat-ui/assets/z80-Co3PbHdE.js +1 -0
- package/dist/apps/chat-ui/index.html +5 -3
- package/dist/apps/chat-vscode-web/assets/index-CF1-9PKU.css +2 -0
- package/dist/apps/chat-vscode-web/assets/index-Dp1TzeRL.js +41 -0
- package/dist/apps/chat-vscode-web/index.html +2 -2
- package/dist/apps/context-files-ui/assets/{apl-14BqhLYK.js → apl-gfMMiTNf.js} +1 -1
- package/dist/apps/context-files-ui/assets/asciiarmor-C_eisQCp.js +1 -0
- package/dist/apps/{chat-ui/assets/asn1-Bg4FbdCg.js → context-files-ui/assets/asn1-DCl_8MCW.js} +1 -1
- package/dist/apps/{chat-ui/assets/asterisk-B2MO-X4d.js → context-files-ui/assets/asterisk-BEn0Cwpx.js} +1 -1
- package/dist/apps/context-files-ui/assets/clike-D_6L3tnO.js +1 -0
- package/dist/apps/context-files-ui/assets/cmake-84nbDH0I.js +1 -0
- package/dist/apps/context-files-ui/assets/cobol-DHLQUbN7.js +1 -0
- package/dist/apps/context-files-ui/assets/coffeescript-De_zI4J0.js +1 -0
- package/dist/apps/context-files-ui/assets/commonlisp-DgAKBe0r.js +1 -0
- package/dist/apps/context-files-ui/assets/crystal-Bsdphhtm.js +1 -0
- package/dist/apps/context-files-ui/assets/css-CnaYoQib.js +1 -0
- package/dist/apps/context-files-ui/assets/{d-TPqSVaHM.js → d-DWkQyNnU.js} +1 -1
- package/dist/apps/{chat-ui/assets/dist-C6LPDFXU.js → context-files-ui/assets/dist-BAqbgxUS.js} +1 -1
- package/dist/apps/context-files-ui/assets/dist-BJ-TIk3N.js +1 -0
- package/dist/apps/context-files-ui/assets/dist-BcauuFwf.js +1 -0
- package/dist/apps/context-files-ui/assets/dist-BecMXs79.js +1 -0
- package/dist/apps/context-files-ui/assets/{dist-C-Jm45P4.js → dist-Ci2NSlf1.js} +1 -1
- package/dist/apps/context-files-ui/assets/dist-CqM4On9D.js +13 -0
- package/dist/apps/context-files-ui/assets/dist-CswnpKik.js +1 -0
- package/dist/apps/{chat-ui/assets/dist-I26VB0QO.js → context-files-ui/assets/dist-D-xpsbZI.js} +1 -1
- package/dist/apps/context-files-ui/assets/dist-DHvUPfrF.js +1 -0
- package/dist/apps/context-files-ui/assets/dist-DLJCGrGQ.js +1 -0
- package/dist/apps/context-files-ui/assets/{dist-DLMjd26T.js → dist-DMiglryg.js} +1 -1
- package/dist/apps/context-files-ui/assets/dist-DTeLDijr.js +9 -0
- package/dist/apps/context-files-ui/assets/{dist-DKoyMSNr.js → dist-DpF08Yd7.js} +1 -1
- package/dist/apps/context-files-ui/assets/dist-LCx98fA_.js +11 -0
- package/dist/apps/context-files-ui/assets/{dist-DotDq_kD.js → dist-RKTRnzGb.js} +1 -1
- package/dist/apps/context-files-ui/assets/dist-S3zJGntM.js +1 -0
- package/dist/apps/{chat-ui/assets/dist-BkUONE3N.js → context-files-ui/assets/dist-XVYGiB-c.js} +1 -1
- package/dist/apps/context-files-ui/assets/dist-eddbbGyw.js +1 -0
- package/dist/apps/context-files-ui/assets/dist-fPhZsAUX.js +1 -0
- package/dist/apps/context-files-ui/assets/dist-mpRGeo_R.js +2 -0
- package/dist/apps/context-files-ui/assets/{dockerfile-CJb2sekW.js → dockerfile-DJkHQgkl.js} +1 -1
- package/dist/apps/context-files-ui/assets/{dylan-08Azy1NK.js → dylan-BCDoL_-p.js} +1 -1
- package/dist/apps/context-files-ui/assets/{ecl-dhxjHL8y.js → ecl-BVIeWmwY.js} +1 -1
- package/dist/apps/{chat-ui/assets/erlang-BD5LkVkR.js → context-files-ui/assets/erlang-BV0c4Hdn.js} +1 -1
- package/dist/apps/context-files-ui/assets/{factor-B2EMQZkP.js → factor-LKH5gN8L.js} +1 -1
- package/dist/apps/context-files-ui/assets/groovy-CUpZ7dEl.js +1 -0
- package/dist/apps/context-files-ui/assets/{haxe-BJVKtprM.js → haxe-DjVOVvNP.js} +1 -1
- package/dist/apps/context-files-ui/assets/index-CkWXlBNn.js +191 -0
- package/dist/apps/context-files-ui/assets/{index-Cs4XQITe.css → index-D8TsUizd.css} +1 -1
- package/dist/apps/context-files-ui/assets/javascript-DoL9Wb-Q.js +1 -0
- package/dist/apps/context-files-ui/assets/{lua-BxuTHaF7.js → lua-CiA1ziua.js} +1 -1
- package/dist/apps/context-files-ui/assets/{mumps-Ds_ZaumL.js → mumps-BSzj6Xyz.js} +1 -1
- package/dist/apps/{chat-ui/assets/nsis-DOo3SJmd.js → context-files-ui/assets/nsis-CfSuhXs5.js} +1 -1
- package/dist/apps/context-files-ui/assets/{ntriples-DLHGTvHs.js → ntriples-B9h1VB_g.js} +1 -1
- package/dist/apps/context-files-ui/assets/perl-BkSkiI9m.js +1 -0
- package/dist/apps/context-files-ui/assets/{powershell-B4IPkVxR.js → powershell-BcIto6Sf.js} +1 -1
- package/dist/apps/{chat-ui/assets/pug-QU72BPAa.js → context-files-ui/assets/pug-Gsm0M45u.js} +1 -1
- package/dist/apps/context-files-ui/assets/puppet-BZyAS7I4.js +1 -0
- package/dist/apps/context-files-ui/assets/python-B_1Jd8HM.js +1 -0
- package/dist/apps/context-files-ui/assets/r-CxDmU1I4.js +1 -0
- package/dist/apps/context-files-ui/assets/ruby-BjXV7-Qa.js +1 -0
- package/dist/apps/context-files-ui/assets/scheme-D9qYN0V5.js +1 -0
- package/dist/apps/context-files-ui/assets/{shell-BjiMLAaM.js → shell-DwuoZtxw.js} +1 -1
- package/dist/apps/context-files-ui/assets/{simple-mode-DnMbQuKW.js → simple-mode-DXiLM1-G.js} +1 -1
- package/dist/apps/context-files-ui/assets/sql-DuQMFDvy.js +1 -0
- package/dist/apps/context-files-ui/assets/{stex-BCRT8IJ3.js → stex-DNzd62Q_.js} +1 -1
- package/dist/apps/context-files-ui/assets/{stylus-CARoeVE9.js → stylus-BOVgKnng.js} +1 -1
- package/dist/apps/context-files-ui/assets/textile-C4jVoHG1.js +1 -0
- package/dist/apps/context-files-ui/assets/tiki-AK6FwT8q.js +1 -0
- package/dist/apps/context-files-ui/assets/toml-BPTmHmyx.js +1 -0
- package/dist/apps/context-files-ui/assets/{ttcn-GvRgs2AT.js → ttcn-PPSTk1ow.js} +1 -1
- package/dist/apps/context-files-ui/assets/{ttcn-cfg-CGCXz7Vo.js → ttcn-cfg-2b4Gb5sE.js} +1 -1
- package/dist/apps/context-files-ui/assets/turtle-Cx3rYX2g.js +1 -0
- package/dist/apps/context-files-ui/assets/{verilog-DVCHmufx.js → verilog-7LoJAqYT.js} +1 -1
- package/dist/apps/context-files-ui/assets/vhdl-kS471soi.js +1 -0
- package/dist/apps/{chat-ui/assets/xquery-5f0hn7cg.js → context-files-ui/assets/xquery-BKJx4mf9.js} +1 -1
- package/dist/apps/context-files-ui/assets/z80-Co3PbHdE.js +1 -0
- package/dist/apps/context-files-ui/index.html +5 -3
- package/dist/apps/vscode-artifacts/latest.vsix +0 -0
- package/dist/apps/vscode-artifacts/pibo-vscode-ext-2.2.0.vsix +0 -0
- package/dist/auth/better-auth.js +223 -30
- package/dist/auth/cli.js +10 -1
- package/dist/auth/machine-keys.js +8 -4
- package/dist/auth/openai-codex-usage.js +4 -4
- package/dist/cli-session/fakeSessionSource.js +2 -2
- package/dist/cli-session/localSessionSource.js +2 -2
- package/dist/cli.js +3 -1
- package/dist/config/config.js +9 -4
- package/dist/core/compaction-prompt.js +3 -1
- package/dist/core/context-build.js +1 -0
- package/dist/core/pibo-home.js +24 -1
- package/dist/core/private-path.js +146 -0
- package/dist/core/profiles.js +8 -0
- package/dist/core/sensitive-data-redaction.js +36 -0
- package/dist/core/session-model.js +1 -0
- package/dist/core/session-router.js +219 -29
- package/dist/data/pibo-store.js +5 -1
- package/dist/gateway/server.js +9 -0
- package/dist/plugins/context-files.js +11 -0
- package/dist/plugins/registry.js +1 -0
- package/dist/providers/openai-gpt56.js +0 -11
- package/dist/reliability/store.js +5 -1
- package/dist/resources/lifecycle.js +13 -3
- package/dist/runs/resource-isolation.js +159 -8
- package/dist/runs/tools.js +44 -1
- package/dist/sessions/pibo-data-store.js +3 -0
- package/dist/tools/codex-browser-node-repl.js +4 -2
- package/dist/tools/codex-browser.js +1 -1
- package/dist/tools/codex-image-generation.js +4 -4
- package/dist/tools/runtime/node-backend.js +4 -1
- package/dist/tools/runtime/python-backend.js +4 -1
- package/dist/web-annotations/api.js +22 -2
- package/npm-shrinkwrap.json +16707 -0
- package/package.json +19 -14
- package/dist/apps/chat-ui/assets/asciiarmor-WLvjqI7d.js +0 -1
- package/dist/apps/chat-ui/assets/clike-CjmcUpt6.js +0 -1
- package/dist/apps/chat-ui/assets/cmake-i2VDNaRq.js +0 -1
- package/dist/apps/chat-ui/assets/cobol-BwO6DF08.js +0 -1
- package/dist/apps/chat-ui/assets/coffeescript-BtivDvRz.js +0 -1
- package/dist/apps/chat-ui/assets/commonlisp-DFkEQdLP.js +0 -1
- package/dist/apps/chat-ui/assets/crystal-CU0NkcVL.js +0 -1
- package/dist/apps/chat-ui/assets/css-CbMZAQ1W.js +0 -1
- package/dist/apps/chat-ui/assets/dist-9v2ZXT6V.js +0 -11
- package/dist/apps/chat-ui/assets/dist-B1LVAytl.js +0 -9
- package/dist/apps/chat-ui/assets/dist-B5PTVnox.js +0 -1
- package/dist/apps/chat-ui/assets/dist-B5ZAfwf5.js +0 -1
- package/dist/apps/chat-ui/assets/dist-D1KyNDg5.js +0 -13
- package/dist/apps/chat-ui/assets/dist-DVtXxfHc.js +0 -1
- package/dist/apps/chat-ui/assets/dist-DW4Qrfbd.js +0 -2
- package/dist/apps/chat-ui/assets/dist-DmbsHdMC.js +0 -1
- package/dist/apps/chat-ui/assets/dist-DyvwuSFO.js +0 -1
- package/dist/apps/chat-ui/assets/dist-QQuDy4KA.js +0 -1
- package/dist/apps/chat-ui/assets/dist-RtHbJRPV.js +0 -1
- package/dist/apps/chat-ui/assets/groovy-Cmduloe1.js +0 -1
- package/dist/apps/chat-ui/assets/index-BPbNvcZe.css +0 -1
- package/dist/apps/chat-ui/assets/index-CIOf2uL2.js +0 -237
- package/dist/apps/chat-ui/assets/javascript-C5pDVaoP.js +0 -1
- package/dist/apps/chat-ui/assets/perl-D6YJObi_.js +0 -1
- package/dist/apps/chat-ui/assets/puppet-B_0GFuyD.js +0 -1
- package/dist/apps/chat-ui/assets/python-Cs7sNzy_.js +0 -1
- package/dist/apps/chat-ui/assets/r-CN5s4f3o.js +0 -1
- package/dist/apps/chat-ui/assets/ruby-BVPradRk.js +0 -1
- package/dist/apps/chat-ui/assets/scheme-CvNgHAnh.js +0 -1
- package/dist/apps/chat-ui/assets/sql-DYI2GwJR.js +0 -1
- package/dist/apps/chat-ui/assets/textile-Yg_UWn-t.js +0 -1
- package/dist/apps/chat-ui/assets/tiki-CC_ic8g0.js +0 -1
- package/dist/apps/chat-ui/assets/toml-B7gGzVkJ.js +0 -1
- package/dist/apps/chat-ui/assets/turtle-CwIpz2yy.js +0 -1
- package/dist/apps/chat-ui/assets/vhdl-BGDk4f1d.js +0 -1
- package/dist/apps/chat-ui/assets/z80-B7Dfb4UO.js +0 -1
- package/dist/apps/chat-vscode-web/assets/index-1ivRyjFs.js +0 -41
- package/dist/apps/chat-vscode-web/assets/index-Dupu1DzQ.css +0 -2
- package/dist/apps/context-files-ui/assets/asciiarmor-WLvjqI7d.js +0 -1
- package/dist/apps/context-files-ui/assets/clike-CjmcUpt6.js +0 -1
- package/dist/apps/context-files-ui/assets/cmake-i2VDNaRq.js +0 -1
- package/dist/apps/context-files-ui/assets/cobol-BwO6DF08.js +0 -1
- package/dist/apps/context-files-ui/assets/coffeescript-BtivDvRz.js +0 -1
- package/dist/apps/context-files-ui/assets/commonlisp-DFkEQdLP.js +0 -1
- package/dist/apps/context-files-ui/assets/crystal-CU0NkcVL.js +0 -1
- package/dist/apps/context-files-ui/assets/css-CbMZAQ1W.js +0 -1
- package/dist/apps/context-files-ui/assets/dist-B5PTVnox.js +0 -1
- package/dist/apps/context-files-ui/assets/dist-B5ZAfwf5.js +0 -1
- package/dist/apps/context-files-ui/assets/dist-BD262Ouw.js +0 -1
- package/dist/apps/context-files-ui/assets/dist-BKuGdcnX.js +0 -9
- package/dist/apps/context-files-ui/assets/dist-CHdx1Jri.js +0 -1
- package/dist/apps/context-files-ui/assets/dist-CULMH-fB.js +0 -11
- package/dist/apps/context-files-ui/assets/dist-Cjq6RWEt.js +0 -1
- package/dist/apps/context-files-ui/assets/dist-CntqFySz.js +0 -1
- package/dist/apps/context-files-ui/assets/dist-D1KyNDg5.js +0 -13
- package/dist/apps/context-files-ui/assets/dist-QQuDy4KA.js +0 -1
- package/dist/apps/context-files-ui/assets/dist-kPuQud7t.js +0 -2
- package/dist/apps/context-files-ui/assets/groovy-Cmduloe1.js +0 -1
- package/dist/apps/context-files-ui/assets/index-DZWsbuvg.js +0 -202
- package/dist/apps/context-files-ui/assets/javascript-C5pDVaoP.js +0 -1
- package/dist/apps/context-files-ui/assets/perl-D6YJObi_.js +0 -1
- package/dist/apps/context-files-ui/assets/puppet-B_0GFuyD.js +0 -1
- package/dist/apps/context-files-ui/assets/python-Cs7sNzy_.js +0 -1
- package/dist/apps/context-files-ui/assets/r-CN5s4f3o.js +0 -1
- package/dist/apps/context-files-ui/assets/ruby-BVPradRk.js +0 -1
- package/dist/apps/context-files-ui/assets/scheme-CvNgHAnh.js +0 -1
- package/dist/apps/context-files-ui/assets/sql-DYI2GwJR.js +0 -1
- package/dist/apps/context-files-ui/assets/textile-Yg_UWn-t.js +0 -1
- package/dist/apps/context-files-ui/assets/tiki-CC_ic8g0.js +0 -1
- package/dist/apps/context-files-ui/assets/toml-B7gGzVkJ.js +0 -1
- package/dist/apps/context-files-ui/assets/turtle-CwIpz2yy.js +0 -1
- package/dist/apps/context-files-ui/assets/vhdl-BGDk4f1d.js +0 -1
- package/dist/apps/context-files-ui/assets/z80-B7Dfb4UO.js +0 -1
- /package/dist/apps/chat-ui/assets/{brainfuck-CV9kufud.js → brainfuck-D5EjA2JK.js} +0 -0
- /package/dist/apps/chat-ui/assets/{clojure-De3QGfx6.js → clojure-BflJGmDX.js} +0 -0
- /package/dist/apps/chat-ui/assets/{cypher-Dke5QOzv.js → cypher-p9eYesGn.js} +0 -0
- /package/dist/apps/chat-ui/assets/{diff-B365LSoZ.js → diff-ChtP43wD.js} +0 -0
- /package/dist/apps/chat-ui/assets/{dtd-CBMymJ7O.js → dtd-DTF72YNO.js} +0 -0
- /package/dist/apps/chat-ui/assets/{ebnf-Dkum_1J8.js → ebnf-D4c0_ac3.js} +0 -0
- /package/dist/apps/chat-ui/assets/{eiffel-C446m6dI.js → eiffel-BEjRio4Q.js} +0 -0
- /package/dist/apps/chat-ui/assets/{elm-po1E9de0.js → elm-Cshzl8qu.js} +0 -0
- /package/dist/apps/chat-ui/assets/{fcl-DkEOamHd.js → fcl-ClOhbFR7.js} +0 -0
- /package/dist/apps/chat-ui/assets/{forth-dCg2_HVB.js → forth-Cezjo90N.js} +0 -0
- /package/dist/apps/chat-ui/assets/{fortran-3ZpXLFh1.js → fortran-Bt6PBEDR.js} +0 -0
- /package/dist/apps/chat-ui/assets/{gas-DMmxLZRI.js → gas-BHEdbvp9.js} +0 -0
- /package/dist/apps/chat-ui/assets/{gherkin-DUSFg2R6.js → gherkin-oBAE_ms0.js} +0 -0
- /package/dist/apps/chat-ui/assets/{haskell-Cyr255R9.js → haskell-BRsoo5mP.js} +0 -0
- /package/dist/apps/chat-ui/assets/{http-DszHFpc-.js → http-CLVgA2GD.js} +0 -0
- /package/dist/apps/chat-ui/assets/{idl-Cati9Nrv.js → idl-BUZw3wgd.js} +0 -0
- /package/dist/apps/chat-ui/assets/{julia-DlqY1cTU.js → julia-CQfgDRfP.js} +0 -0
- /package/dist/apps/chat-ui/assets/{livescript-C6p8-2W1.js → livescript-BXxG0Yva.js} +0 -0
- /package/dist/apps/chat-ui/assets/{mathematica-nDHZUMJT.js → mathematica-u8YMmbU0.js} +0 -0
- /package/dist/apps/chat-ui/assets/{mbox-DAaR0Hcz.js → mbox-BEMVcqjs.js} +0 -0
- /package/dist/apps/chat-ui/assets/{mirc-CCA0FRfl.js → mirc-C9zpzAZU.js} +0 -0
- /package/dist/apps/chat-ui/assets/{mllike-Cw3Iccsb.js → mllike-B45xgp2S.js} +0 -0
- /package/dist/apps/chat-ui/assets/{modelica-Czx80fNR.js → modelica-CqHI_q-D.js} +0 -0
- /package/dist/apps/chat-ui/assets/{mscgen-BmfuTbzG.js → mscgen-qgSLujhx.js} +0 -0
- /package/dist/apps/chat-ui/assets/{nginx-D9M2PQ4U.js → nginx-BMaDbqW3.js} +0 -0
- /package/dist/apps/chat-ui/assets/{octave-8jj96JiC.js → octave-D2Q8cUp1.js} +0 -0
- /package/dist/apps/chat-ui/assets/{oz-BmMq7iC4.js → oz-BwTct_5T.js} +0 -0
- /package/dist/apps/chat-ui/assets/{pascal-BgMr6XpT.js → pascal-Dp_KdFgX.js} +0 -0
- /package/dist/apps/chat-ui/assets/{pig-nx7uchs8.js → pig-AF4Hwhju.js} +0 -0
- /package/dist/apps/chat-ui/assets/{properties-CoavQdLC.js → properties-C357ku5U.js} +0 -0
- /package/dist/apps/chat-ui/assets/{protobuf-D5EWhcmc.js → protobuf-D1ij_kNL.js} +0 -0
- /package/dist/apps/chat-ui/assets/{q-BIB9pPtI.js → q-B9NhS7L_.js} +0 -0
- /package/dist/apps/chat-ui/assets/{rpm-Ct_Ck8mQ.js → rpm-gpDK5sbt.js} +0 -0
- /package/dist/apps/chat-ui/assets/{sas-DN4j74IF.js → sas-C2OyD2Y6.js} +0 -0
- /package/dist/apps/chat-ui/assets/{sieve-C2U1O5Z4.js → sieve-BAxa3IjF.js} +0 -0
- /package/dist/apps/chat-ui/assets/{smalltalk-DkYwYufV.js → smalltalk-BLp5-jwC.js} +0 -0
- /package/dist/apps/chat-ui/assets/{solr-BopnSD-v.js → solr-BBopId9w.js} +0 -0
- /package/dist/apps/chat-ui/assets/{sparql-Cpg3YQfd.js → sparql-Dz-mlCAC.js} +0 -0
- /package/dist/apps/chat-ui/assets/{spreadsheet-kRxtVt9J.js → spreadsheet-CTIncYxj.js} +0 -0
- /package/dist/apps/chat-ui/assets/{swift-DKNaLAK6.js → swift-DKB6_1j6.js} +0 -0
- /package/dist/apps/chat-ui/assets/{tcl-CQyXkgMH.js → tcl-BGfruO1u.js} +0 -0
- /package/dist/apps/chat-ui/assets/{tiddlywiki-dqVbkfX4.js → tiddlywiki-VlUiK86J.js} +0 -0
- /package/dist/apps/chat-ui/assets/{troff-Bq3z6oAu.js → troff-C2dAgh7P.js} +0 -0
- /package/dist/apps/chat-ui/assets/{vb-BmcHUM2C.js → vb-BthdM_4N.js} +0 -0
- /package/dist/apps/chat-ui/assets/{vbscript-Cs9dylre.js → vbscript-D9f6rSsU.js} +0 -0
- /package/dist/apps/chat-ui/assets/{velocity-CBWU0VCy.js → velocity-CqftRsjg.js} +0 -0
- /package/dist/apps/chat-ui/assets/{webidl-egXQEWlC.js → webidl-D5jiJvOU.js} +0 -0
- /package/dist/apps/chat-ui/assets/{yacas-DNs9XkmQ.js → yacas-CXXgtw0p.js} +0 -0
- /package/dist/apps/context-files-ui/assets/{brainfuck-CV9kufud.js → brainfuck-D5EjA2JK.js} +0 -0
- /package/dist/apps/context-files-ui/assets/{clojure-De3QGfx6.js → clojure-BflJGmDX.js} +0 -0
- /package/dist/apps/context-files-ui/assets/{cypher-Dke5QOzv.js → cypher-p9eYesGn.js} +0 -0
- /package/dist/apps/context-files-ui/assets/{diff-B365LSoZ.js → diff-ChtP43wD.js} +0 -0
- /package/dist/apps/context-files-ui/assets/{dtd-CBMymJ7O.js → dtd-DTF72YNO.js} +0 -0
- /package/dist/apps/context-files-ui/assets/{ebnf-Dkum_1J8.js → ebnf-D4c0_ac3.js} +0 -0
- /package/dist/apps/context-files-ui/assets/{eiffel-C446m6dI.js → eiffel-BEjRio4Q.js} +0 -0
- /package/dist/apps/context-files-ui/assets/{elm-po1E9de0.js → elm-Cshzl8qu.js} +0 -0
- /package/dist/apps/context-files-ui/assets/{fcl-DkEOamHd.js → fcl-ClOhbFR7.js} +0 -0
- /package/dist/apps/context-files-ui/assets/{forth-dCg2_HVB.js → forth-Cezjo90N.js} +0 -0
- /package/dist/apps/context-files-ui/assets/{fortran-3ZpXLFh1.js → fortran-Bt6PBEDR.js} +0 -0
- /package/dist/apps/context-files-ui/assets/{gas-DMmxLZRI.js → gas-BHEdbvp9.js} +0 -0
- /package/dist/apps/context-files-ui/assets/{gherkin-DUSFg2R6.js → gherkin-oBAE_ms0.js} +0 -0
- /package/dist/apps/context-files-ui/assets/{haskell-Cyr255R9.js → haskell-BRsoo5mP.js} +0 -0
- /package/dist/apps/context-files-ui/assets/{http-DszHFpc-.js → http-CLVgA2GD.js} +0 -0
- /package/dist/apps/context-files-ui/assets/{idl-Cati9Nrv.js → idl-BUZw3wgd.js} +0 -0
- /package/dist/apps/context-files-ui/assets/{julia-DlqY1cTU.js → julia-CQfgDRfP.js} +0 -0
- /package/dist/apps/context-files-ui/assets/{livescript-C6p8-2W1.js → livescript-BXxG0Yva.js} +0 -0
- /package/dist/apps/context-files-ui/assets/{mathematica-nDHZUMJT.js → mathematica-u8YMmbU0.js} +0 -0
- /package/dist/apps/context-files-ui/assets/{mbox-DAaR0Hcz.js → mbox-BEMVcqjs.js} +0 -0
- /package/dist/apps/context-files-ui/assets/{mirc-CCA0FRfl.js → mirc-C9zpzAZU.js} +0 -0
- /package/dist/apps/context-files-ui/assets/{mllike-Cw3Iccsb.js → mllike-B45xgp2S.js} +0 -0
- /package/dist/apps/context-files-ui/assets/{modelica-Czx80fNR.js → modelica-CqHI_q-D.js} +0 -0
- /package/dist/apps/context-files-ui/assets/{mscgen-BmfuTbzG.js → mscgen-qgSLujhx.js} +0 -0
- /package/dist/apps/context-files-ui/assets/{nginx-D9M2PQ4U.js → nginx-BMaDbqW3.js} +0 -0
- /package/dist/apps/context-files-ui/assets/{octave-8jj96JiC.js → octave-D2Q8cUp1.js} +0 -0
- /package/dist/apps/context-files-ui/assets/{oz-BmMq7iC4.js → oz-BwTct_5T.js} +0 -0
- /package/dist/apps/context-files-ui/assets/{pascal-BgMr6XpT.js → pascal-Dp_KdFgX.js} +0 -0
- /package/dist/apps/context-files-ui/assets/{pig-nx7uchs8.js → pig-AF4Hwhju.js} +0 -0
- /package/dist/apps/context-files-ui/assets/{properties-CoavQdLC.js → properties-C357ku5U.js} +0 -0
- /package/dist/apps/context-files-ui/assets/{protobuf-D5EWhcmc.js → protobuf-D1ij_kNL.js} +0 -0
- /package/dist/apps/context-files-ui/assets/{q-BIB9pPtI.js → q-B9NhS7L_.js} +0 -0
- /package/dist/apps/context-files-ui/assets/{rpm-Ct_Ck8mQ.js → rpm-gpDK5sbt.js} +0 -0
- /package/dist/apps/context-files-ui/assets/{sas-DN4j74IF.js → sas-C2OyD2Y6.js} +0 -0
- /package/dist/apps/context-files-ui/assets/{sieve-C2U1O5Z4.js → sieve-BAxa3IjF.js} +0 -0
- /package/dist/apps/context-files-ui/assets/{smalltalk-DkYwYufV.js → smalltalk-BLp5-jwC.js} +0 -0
- /package/dist/apps/context-files-ui/assets/{solr-BopnSD-v.js → solr-BBopId9w.js} +0 -0
- /package/dist/apps/context-files-ui/assets/{sparql-Cpg3YQfd.js → sparql-Dz-mlCAC.js} +0 -0
- /package/dist/apps/context-files-ui/assets/{spreadsheet-kRxtVt9J.js → spreadsheet-CTIncYxj.js} +0 -0
- /package/dist/apps/context-files-ui/assets/{swift-DKNaLAK6.js → swift-DKB6_1j6.js} +0 -0
- /package/dist/apps/context-files-ui/assets/{tcl-CQyXkgMH.js → tcl-BGfruO1u.js} +0 -0
- /package/dist/apps/context-files-ui/assets/{tiddlywiki-dqVbkfX4.js → tiddlywiki-VlUiK86J.js} +0 -0
- /package/dist/apps/context-files-ui/assets/{troff-Bq3z6oAu.js → troff-C2dAgh7P.js} +0 -0
- /package/dist/apps/context-files-ui/assets/{vb-BmcHUM2C.js → vb-BthdM_4N.js} +0 -0
- /package/dist/apps/context-files-ui/assets/{vbscript-Cs9dylre.js → vbscript-D9f6rSsU.js} +0 -0
- /package/dist/apps/context-files-ui/assets/{velocity-CBWU0VCy.js → velocity-CqftRsjg.js} +0 -0
- /package/dist/apps/context-files-ui/assets/{webidl-egXQEWlC.js → webidl-D5jiJvOU.js} +0 -0
- /package/dist/apps/context-files-ui/assets/{yacas-DNs9XkmQ.js → yacas-CXXgtw0p.js} +0 -0
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { getModels } from "@earendil-works/pi-ai/compat";
|
|
2
|
-
import { getOAuthProvider } from "@earendil-works/pi-ai/oauth";
|
|
3
2
|
export const OPENAI_PROVIDER_ID = "openai";
|
|
4
3
|
export const OPENAI_RESPONSES_API = "openai-responses";
|
|
5
4
|
export const OPENAI_BASE_URL = "https://api.openai.com/v1";
|
|
@@ -74,12 +73,9 @@ export function registerOpenAiGpt56Models(modelRegistry, options = {}) {
|
|
|
74
73
|
const baseOpenAiCodexModels = options.baseOpenAiCodexModels ?? getBuiltInOpenAiCodexModels();
|
|
75
74
|
const openAiCodexModels = buildOpenAiCodexGpt56Models(baseOpenAiCodexModels);
|
|
76
75
|
const openAiCodexAdded = countMissingGpt56Models(baseOpenAiCodexModels, OPENAI_CODEX_PROVIDER_ID);
|
|
77
|
-
const openAiCodexOAuth = getOpenAiCodexOAuthConfig();
|
|
78
76
|
modelRegistry.registerProvider(OPENAI_CODEX_PROVIDER_ID, {
|
|
79
|
-
name: openAiCodexOAuth.name,
|
|
80
77
|
baseUrl: OPENAI_CODEX_BASE_URL,
|
|
81
78
|
api: OPENAI_CODEX_RESPONSES_API,
|
|
82
|
-
oauth: openAiCodexOAuth,
|
|
83
79
|
models: openAiCodexModels,
|
|
84
80
|
});
|
|
85
81
|
return {
|
|
@@ -144,10 +140,3 @@ function openAiGpt56ModelToRegistryModel(model, options) {
|
|
|
144
140
|
maxTokens: GPT_56_MAX_TOKENS,
|
|
145
141
|
};
|
|
146
142
|
}
|
|
147
|
-
function getOpenAiCodexOAuthConfig() {
|
|
148
|
-
const provider = getOAuthProvider(OPENAI_CODEX_PROVIDER_ID);
|
|
149
|
-
if (!provider)
|
|
150
|
-
throw new Error("OpenAI Codex OAuth provider is unavailable.");
|
|
151
|
-
const { id: _id, ...oauth } = provider;
|
|
152
|
-
return oauth;
|
|
153
|
-
}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { randomUUID } from "node:crypto";
|
|
2
2
|
import { mkdirSync } from "node:fs";
|
|
3
3
|
import { dirname, resolve } from "node:path";
|
|
4
|
-
import { piboHomePath } from "../core/pibo-home.js";
|
|
4
|
+
import { ensurePrivatePiboHomeForPath, piboHomePath } from "../core/pibo-home.js";
|
|
5
|
+
import { protectPrivateFileSync } from "../core/private-path.js";
|
|
5
6
|
import { sqliteTableColumns } from "../data/sqlite-schema.js";
|
|
6
7
|
import { DatabaseSync } from "node:sqlite";
|
|
7
8
|
function now() {
|
|
@@ -43,9 +44,12 @@ export class PiboReliabilityStore {
|
|
|
43
44
|
getEventByTopicIdempotencyKeyStatement;
|
|
44
45
|
constructor(path = piboHomePath("pibo-events.sqlite")) {
|
|
45
46
|
const resolvedPath = path === ":memory:" ? path : resolve(path);
|
|
47
|
+
const insidePiboHome = ensurePrivatePiboHomeForPath(resolvedPath);
|
|
46
48
|
if (resolvedPath !== ":memory:")
|
|
47
49
|
mkdirSync(dirname(resolvedPath), { recursive: true });
|
|
48
50
|
this.db = new DatabaseSync(resolvedPath);
|
|
51
|
+
if (insidePiboHome)
|
|
52
|
+
protectPrivateFileSync(resolvedPath);
|
|
49
53
|
this.db.exec("PRAGMA busy_timeout = 5000");
|
|
50
54
|
this.db.exec("PRAGMA foreign_keys = ON");
|
|
51
55
|
if (resolvedPath !== ":memory:")
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { execFile } from "node:child_process";
|
|
2
2
|
import { existsSync } from "node:fs";
|
|
3
3
|
import { readdir, readFile, rm } from "node:fs/promises";
|
|
4
|
-
import { dirname, isAbsolute, join, resolve } from "node:path";
|
|
4
|
+
import { dirname, isAbsolute, join, relative, resolve } from "node:path";
|
|
5
5
|
import { promisify } from "node:util";
|
|
6
6
|
import { applyComputeWorkerReapPlan, buildComputeWorkerReapPlan, planReapWorkers, } from "../compute/docker.js";
|
|
7
7
|
import { defaultBrowserPoolRoot, defaultBrowserUseHome, getComputeResourceHealth, parseProcessList, } from "../compute/resource-health.js";
|
|
@@ -67,7 +67,7 @@ export async function planResourceReap(options = {}) {
|
|
|
67
67
|
exemptBrowserUserDataDirs: [],
|
|
68
68
|
}),
|
|
69
69
|
]);
|
|
70
|
-
const unmanagedBrowsers = buildUnmanagedBrowserPlanItems(health.browserProcesses.unassignedMainProcessDetails, resolved.unmanagedBrowserGraceMinutes, new Set(resolved.exemptBrowserPids), new Set(resolved.exemptBrowserUserDataDirs));
|
|
70
|
+
const unmanagedBrowsers = buildUnmanagedBrowserPlanItems(health.browserProcesses.unassignedMainProcessDetails, resolved.unmanagedBrowserGraceMinutes, new Set(resolved.exemptBrowserPids), new Set(resolved.exemptBrowserUserDataDirs), resolved.browserUseHome);
|
|
71
71
|
return buildResourceReapPlan({ now, options: resolved, records, staleFiles, unmanagedBrowsers, compute });
|
|
72
72
|
}
|
|
73
73
|
export function buildResourceReapPlan(input) {
|
|
@@ -134,7 +134,7 @@ function resolveReapOptions(options) {
|
|
|
134
134
|
exemptBrowserUserDataDirs: normalizeBrowserUserDataDirs(options.exemptBrowserUserDataDirs ?? readExemptBrowserUserDataDirs()),
|
|
135
135
|
};
|
|
136
136
|
}
|
|
137
|
-
export function buildUnmanagedBrowserPlanItems(processes, graceMinutes, exemptPids
|
|
137
|
+
export function buildUnmanagedBrowserPlanItems(processes, graceMinutes, exemptPids, exemptUserDataDirs, browserUseHome) {
|
|
138
138
|
const graceSeconds = graceMinutes * 60;
|
|
139
139
|
return processes.map((process) => {
|
|
140
140
|
let action = "terminate";
|
|
@@ -151,6 +151,10 @@ export function buildUnmanagedBrowserPlanItems(processes, graceMinutes, exemptPi
|
|
|
151
151
|
action = "skip";
|
|
152
152
|
reason = "explicitly exempted browser user-data-dir";
|
|
153
153
|
}
|
|
154
|
+
else if (!browserUserDataDirIsWithinHome(process.userDataDir, browserUseHome)) {
|
|
155
|
+
action = "skip";
|
|
156
|
+
reason = "browser user-data-dir is outside this Pibo browser-use home";
|
|
157
|
+
}
|
|
154
158
|
else if (process.elapsedSeconds !== undefined && process.elapsedSeconds < graceSeconds) {
|
|
155
159
|
action = "skip";
|
|
156
160
|
reason = `process age ${process.elapsedSeconds}s is within ${graceSeconds}s grace period`;
|
|
@@ -235,6 +239,12 @@ function browserUserDataDirIsExempt(userDataDir, exemptions) {
|
|
|
235
239
|
return false;
|
|
236
240
|
return exemptions.has(resolve(userDataDir));
|
|
237
241
|
}
|
|
242
|
+
function browserUserDataDirIsWithinHome(userDataDir, browserUseHome) {
|
|
243
|
+
if (!userDataDir || !isAbsolute(userDataDir) || !isAbsolute(browserUseHome))
|
|
244
|
+
return false;
|
|
245
|
+
const pathFromHome = relative(resolve(browserUseHome), resolve(userDataDir));
|
|
246
|
+
return pathFromHome === "" || (!pathFromHome.startsWith("..") && !isAbsolute(pathFromHome));
|
|
247
|
+
}
|
|
238
248
|
function buildBrowserReapPlanItem(record, now, idleTimeoutMinutes) {
|
|
239
249
|
const { state } = record;
|
|
240
250
|
let action = "skip";
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { randomUUID } from "node:crypto";
|
|
2
2
|
import { execFile } from "node:child_process";
|
|
3
3
|
import { existsSync, readFileSync, unlinkSync } from "node:fs";
|
|
4
|
+
import { tmpdir } from "node:os";
|
|
5
|
+
import { join } from "node:path";
|
|
4
6
|
import { promisify } from "node:util";
|
|
5
7
|
const execFileAsync = promisify(execFile);
|
|
6
8
|
export class PiboRunResourceLimitError extends Error {
|
|
@@ -12,7 +14,7 @@ export class PiboRunResourceLimitError extends Error {
|
|
|
12
14
|
}
|
|
13
15
|
}
|
|
14
16
|
const DEFAULT_POLICY = Object.freeze({
|
|
15
|
-
mode: "systemd",
|
|
17
|
+
mode: process.platform === "win32" ? "windows-process-tree" : "systemd",
|
|
16
18
|
memoryHighBytes: 1280 * 1024 * 1024,
|
|
17
19
|
memoryMaxBytes: 1792 * 1024 * 1024,
|
|
18
20
|
tasksMax: 128,
|
|
@@ -76,23 +78,44 @@ export function parseLinuxPressure(input) {
|
|
|
76
78
|
export function prepareYieldedRunExecution(toolName, params, options = {}) {
|
|
77
79
|
const policy = resolveYieldedRunResourcePolicy(options.env);
|
|
78
80
|
const command = bashCommand(params);
|
|
79
|
-
const
|
|
80
|
-
const
|
|
81
|
+
const shouldUseSystemd = policy.mode === "systemd" && toolName === "bash" && command !== undefined;
|
|
82
|
+
const shouldUseWindowsProcessTree = policy.mode === "windows-process-tree" && toolName === "bash" && command !== undefined;
|
|
83
|
+
const unitName = shouldUseSystemd ? options.unitName ?? yieldedRunUnitName() : undefined;
|
|
81
84
|
const metricsPath = unitName ? `/tmp/${unitName}.metrics` : undefined;
|
|
85
|
+
const windowsPidPath = shouldUseWindowsProcessTree
|
|
86
|
+
? join(tmpdir(), `pibo-yielded-${randomUUID()}.winpid`)
|
|
87
|
+
: undefined;
|
|
82
88
|
const resources = {
|
|
83
|
-
isolationMode:
|
|
89
|
+
isolationMode: shouldUseSystemd ? "systemd" : shouldUseWindowsProcessTree ? "windows-process-tree" : "off",
|
|
84
90
|
...(unitName ? { unitName } : {}),
|
|
85
91
|
policy,
|
|
86
92
|
admission: collectYieldedRunHostResourceSnapshot({ now: options.now }),
|
|
87
93
|
};
|
|
88
|
-
const preparedParams =
|
|
94
|
+
const preparedParams = shouldUseSystemd
|
|
89
95
|
? { ...params, command: systemdRunCommand(command, unitName, policy, metricsPath) }
|
|
90
|
-
:
|
|
96
|
+
: shouldUseWindowsProcessTree && windowsPidPath
|
|
97
|
+
? { ...params, command: windowsProcessTreeCommand(command, windowsPidPath) }
|
|
98
|
+
: params;
|
|
91
99
|
return {
|
|
92
100
|
params: preparedParams,
|
|
93
101
|
resources,
|
|
102
|
+
async cancel() {
|
|
103
|
+
if (shouldUseSystemd && unitName)
|
|
104
|
+
await terminateSystemdUnit(unitName);
|
|
105
|
+
if (shouldUseWindowsProcessTree && windowsPidPath)
|
|
106
|
+
await terminateWindowsProcessTree(windowsPidPath);
|
|
107
|
+
},
|
|
94
108
|
async execute(operation) {
|
|
95
|
-
if (
|
|
109
|
+
if (shouldUseWindowsProcessTree && windowsPidPath) {
|
|
110
|
+
resources.startedAt = new Date().toISOString();
|
|
111
|
+
try {
|
|
112
|
+
return await operation();
|
|
113
|
+
}
|
|
114
|
+
finally {
|
|
115
|
+
unlinkOptional(windowsPidPath);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
if (!shouldUseSystemd || !unitName)
|
|
96
119
|
return await operation();
|
|
97
120
|
if (process.platform !== "linux" || !existsSync("/run/systemd/system")) {
|
|
98
121
|
resources.limitReason = "systemd isolation is unavailable on this host";
|
|
@@ -122,6 +145,130 @@ export function prepareYieldedRunExecution(toolName, params, options = {}) {
|
|
|
122
145
|
},
|
|
123
146
|
};
|
|
124
147
|
}
|
|
148
|
+
export function windowsProcessTreeCommand(command, pidPath) {
|
|
149
|
+
const portablePidPath = pidPath.replaceAll("\\", "/");
|
|
150
|
+
return [
|
|
151
|
+
"__pibo_win_pid=\"$(ps -W | awk -v p=$$ 'NR > 1 && $1 == p { print $4; exit }')\"",
|
|
152
|
+
"if [ -z \"$__pibo_win_pid\" ]; then printf '%s\\n' 'Pibo could not identify the Windows Bash process.' >&2; exit 125; fi",
|
|
153
|
+
`printf '%s %s' "$$" "$__pibo_win_pid" > ${bashSingleQuote(portablePidPath)}`,
|
|
154
|
+
"unset __pibo_win_pid",
|
|
155
|
+
command,
|
|
156
|
+
].join("\n");
|
|
157
|
+
}
|
|
158
|
+
async function terminateWindowsProcessTree(pidPath) {
|
|
159
|
+
const identity = await waitForWindowsProcessIdentity(pidPath);
|
|
160
|
+
if (!identity)
|
|
161
|
+
return;
|
|
162
|
+
try {
|
|
163
|
+
const rows = await listWindowsProcessTree(identity.msysPid);
|
|
164
|
+
for (const row of rows) {
|
|
165
|
+
try {
|
|
166
|
+
process.kill(row.windowsPid, "SIGKILL");
|
|
167
|
+
}
|
|
168
|
+
catch {
|
|
169
|
+
// The process may have exited between the snapshot and termination.
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
for (let attempt = 0; attempt < 100 && processIsAlive(identity.windowsPid); attempt += 1) {
|
|
173
|
+
await new Promise((resolveWait) => setTimeout(resolveWait, 25));
|
|
174
|
+
}
|
|
175
|
+
if (processIsAlive(identity.windowsPid)) {
|
|
176
|
+
throw new Error(`Windows yielded-run process tree rooted at PID ${identity.windowsPid} is still active after termination.`);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
finally {
|
|
180
|
+
unlinkOptional(pidPath);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
async function waitForWindowsProcessIdentity(pidPath) {
|
|
184
|
+
for (let attempt = 0; attempt < 80; attempt += 1) {
|
|
185
|
+
try {
|
|
186
|
+
const match = readFileSync(pidPath, "utf8").trim().match(/^([1-9]\d*)\s+([1-9]\d*)$/);
|
|
187
|
+
if (match)
|
|
188
|
+
return { msysPid: Number(match[1]), windowsPid: Number(match[2]) };
|
|
189
|
+
}
|
|
190
|
+
catch {
|
|
191
|
+
// The Bash wrapper may still be starting.
|
|
192
|
+
}
|
|
193
|
+
await new Promise((resolveWait) => setTimeout(resolveWait, 25));
|
|
194
|
+
}
|
|
195
|
+
return undefined;
|
|
196
|
+
}
|
|
197
|
+
async function listWindowsProcessTree(rootMsysPid) {
|
|
198
|
+
const { stdout } = await execFileAsync(windowsBashExecutable(), ["-lc", "ps -W"], {
|
|
199
|
+
encoding: "utf8",
|
|
200
|
+
timeout: 5_000,
|
|
201
|
+
windowsHide: true,
|
|
202
|
+
});
|
|
203
|
+
const rows = stdout.split(/\r?\n/).flatMap((line) => {
|
|
204
|
+
const fields = line.trim().split(/\s+/);
|
|
205
|
+
if (fields.length < 4 || !fields.slice(0, 4).every((field) => /^\d+$/.test(field)))
|
|
206
|
+
return [];
|
|
207
|
+
return [{
|
|
208
|
+
msysPid: Number(fields[0]),
|
|
209
|
+
parentMsysPid: Number(fields[1]),
|
|
210
|
+
processGroupId: Number(fields[2]),
|
|
211
|
+
windowsPid: Number(fields[3]),
|
|
212
|
+
}];
|
|
213
|
+
});
|
|
214
|
+
const selected = new Set([rootMsysPid]);
|
|
215
|
+
for (let changed = true; changed;) {
|
|
216
|
+
changed = false;
|
|
217
|
+
for (const row of rows) {
|
|
218
|
+
if (selected.has(row.msysPid))
|
|
219
|
+
continue;
|
|
220
|
+
if (row.processGroupId === rootMsysPid || selected.has(row.parentMsysPid)) {
|
|
221
|
+
selected.add(row.msysPid);
|
|
222
|
+
changed = true;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
return rows
|
|
227
|
+
.filter((row) => selected.has(row.msysPid) && row.windowsPid > 0)
|
|
228
|
+
.sort((left, right) => processTreeDepth(right, rows) - processTreeDepth(left, rows));
|
|
229
|
+
}
|
|
230
|
+
function processTreeDepth(row, rows) {
|
|
231
|
+
const byPid = new Map(rows.map((candidate) => [candidate.msysPid, candidate]));
|
|
232
|
+
let depth = 0;
|
|
233
|
+
let current = row;
|
|
234
|
+
const seen = new Set();
|
|
235
|
+
while (!seen.has(current.msysPid)) {
|
|
236
|
+
seen.add(current.msysPid);
|
|
237
|
+
const parent = byPid.get(current.parentMsysPid);
|
|
238
|
+
if (!parent)
|
|
239
|
+
break;
|
|
240
|
+
depth += 1;
|
|
241
|
+
current = parent;
|
|
242
|
+
}
|
|
243
|
+
return depth;
|
|
244
|
+
}
|
|
245
|
+
function windowsBashExecutable() {
|
|
246
|
+
const candidates = [
|
|
247
|
+
process.env.ProgramFiles ? join(process.env.ProgramFiles, "Git", "bin", "bash.exe") : undefined,
|
|
248
|
+
process.env["ProgramFiles(x86)"] ? join(process.env["ProgramFiles(x86)"], "Git", "bin", "bash.exe") : undefined,
|
|
249
|
+
].filter((candidate) => Boolean(candidate));
|
|
250
|
+
return candidates.find((candidate) => existsSync(candidate)) ?? "bash.exe";
|
|
251
|
+
}
|
|
252
|
+
function processIsAlive(pid) {
|
|
253
|
+
try {
|
|
254
|
+
process.kill(pid, 0);
|
|
255
|
+
return true;
|
|
256
|
+
}
|
|
257
|
+
catch {
|
|
258
|
+
return false;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
function unlinkOptional(path) {
|
|
262
|
+
try {
|
|
263
|
+
unlinkSync(path);
|
|
264
|
+
}
|
|
265
|
+
catch {
|
|
266
|
+
// Best-effort transient process metadata cleanup.
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
function bashSingleQuote(value) {
|
|
270
|
+
return `'${value.replaceAll("'", `'"'"'`)}'`;
|
|
271
|
+
}
|
|
125
272
|
export function systemdRunCommand(command, unitName, policy, metricsPath = `/tmp/${unitName}.metrics`) {
|
|
126
273
|
const captureScript = [
|
|
127
274
|
'/bin/bash -c "$1"',
|
|
@@ -415,9 +562,13 @@ function finiteNumber(value) {
|
|
|
415
562
|
}
|
|
416
563
|
function parseIsolationMode(value, fallback) {
|
|
417
564
|
const normalized = value?.trim().toLowerCase();
|
|
565
|
+
if (normalized === "off" || normalized === "0" || normalized === "false")
|
|
566
|
+
return "off";
|
|
567
|
+
if (process.platform === "win32")
|
|
568
|
+
return "windows-process-tree";
|
|
418
569
|
if (!normalized)
|
|
419
570
|
return fallback;
|
|
420
|
-
return
|
|
571
|
+
return "systemd";
|
|
421
572
|
}
|
|
422
573
|
function parsePositiveInteger(value, fallback) {
|
|
423
574
|
const parsed = Number(value);
|
package/dist/runs/tools.js
CHANGED
|
@@ -27,6 +27,22 @@ function requireTool(tools, name) {
|
|
|
27
27
|
}
|
|
28
28
|
return tool;
|
|
29
29
|
}
|
|
30
|
+
async function waitForRunCancellationSettlement(settled, timeoutMs = 15_000) {
|
|
31
|
+
let timer;
|
|
32
|
+
try {
|
|
33
|
+
await Promise.race([
|
|
34
|
+
settled,
|
|
35
|
+
new Promise((_resolve, reject) => {
|
|
36
|
+
timer = setTimeout(() => reject(new Error(`Yielded run did not settle within ${timeoutMs}ms after cancellation.`)), timeoutMs);
|
|
37
|
+
timer.unref?.();
|
|
38
|
+
}),
|
|
39
|
+
]);
|
|
40
|
+
}
|
|
41
|
+
finally {
|
|
42
|
+
if (timer)
|
|
43
|
+
clearTimeout(timer);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
30
46
|
export function createRunToolDefinitions(yieldableTools, controller) {
|
|
31
47
|
const toolNames = yieldableTools.map((tool) => tool.name);
|
|
32
48
|
return [
|
|
@@ -49,6 +65,13 @@ export function createRunToolDefinitions(yieldableTools, controller) {
|
|
|
49
65
|
const timeoutMs = resolveRunTimeoutMs(tool.name, params.arguments);
|
|
50
66
|
const serviceWarning = foregroundServiceWarning(tool.name, params.arguments, timeoutMs);
|
|
51
67
|
const prepared = prepareYieldedRunExecution(tool.name, params.arguments);
|
|
68
|
+
const runAbortController = new AbortController();
|
|
69
|
+
const runSignal = signal ? AbortSignal.any([signal, runAbortController.signal]) : runAbortController.signal;
|
|
70
|
+
let executionStarted = false;
|
|
71
|
+
let resolveExecutionSettled;
|
|
72
|
+
const executionSettled = new Promise((resolve) => {
|
|
73
|
+
resolveExecutionSettled = resolve;
|
|
74
|
+
});
|
|
52
75
|
let observedOutput = false;
|
|
53
76
|
const run = controller.startToolRun({
|
|
54
77
|
toolName: tool.name,
|
|
@@ -57,9 +80,26 @@ export function createRunToolDefinitions(yieldableTools, controller) {
|
|
|
57
80
|
timeoutMs,
|
|
58
81
|
serviceWarning,
|
|
59
82
|
resources: prepared.resources,
|
|
83
|
+
async cancel() {
|
|
84
|
+
let processCancellationError;
|
|
85
|
+
try {
|
|
86
|
+
await prepared.cancel();
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
processCancellationError = error;
|
|
90
|
+
}
|
|
91
|
+
finally {
|
|
92
|
+
runAbortController.abort(new Error("Yielded run was cancelled."));
|
|
93
|
+
}
|
|
94
|
+
if (processCancellationError)
|
|
95
|
+
throw processCancellationError;
|
|
96
|
+
if (executionStarted)
|
|
97
|
+
await waitForRunCancellationSettlement(executionSettled);
|
|
98
|
+
},
|
|
60
99
|
async execute() {
|
|
100
|
+
executionStarted = true;
|
|
61
101
|
try {
|
|
62
|
-
const result = await prepared.execute(() => tool.execute(toolCallId, prepared.params,
|
|
102
|
+
const result = await prepared.execute(() => tool.execute(toolCallId, prepared.params, runSignal, (update) => {
|
|
63
103
|
observedOutput ||= hasMeaningfulTimeoutOutput(update);
|
|
64
104
|
onUpdate?.(update);
|
|
65
105
|
}, ctx));
|
|
@@ -79,6 +119,9 @@ export function createRunToolDefinitions(yieldableTools, controller) {
|
|
|
79
119
|
throw new PiboRunExecutionTimeoutError(error instanceof Error ? error.message : String(error), observedOutput ? "lifetime" : "startup");
|
|
80
120
|
throw error;
|
|
81
121
|
}
|
|
122
|
+
finally {
|
|
123
|
+
resolveExecutionSettled?.();
|
|
124
|
+
}
|
|
82
125
|
},
|
|
83
126
|
});
|
|
84
127
|
const prefix = serviceWarning ? `Started yielded run ${run.runId}.\nWarning: ${serviceWarning}` : `Started yielded run ${run.runId}.`;
|
|
@@ -115,12 +115,14 @@ export class CodexBrowserNodeRepl {
|
|
|
115
115
|
return { status: "failed", reset: false, error: errorSummary(error) };
|
|
116
116
|
}
|
|
117
117
|
}
|
|
118
|
-
dispose() {
|
|
118
|
+
async dispose() {
|
|
119
119
|
if (!this.isAlive())
|
|
120
120
|
return;
|
|
121
121
|
this.alive = false;
|
|
122
|
-
this.child.kill("SIGTERM");
|
|
123
122
|
this.rejectAll(new Error("node_repl worker was disposed"));
|
|
123
|
+
const closed = new Promise((resolve) => this.child.once("close", () => resolve()));
|
|
124
|
+
this.child.kill("SIGTERM");
|
|
125
|
+
await closed;
|
|
124
126
|
}
|
|
125
127
|
waitReady(timeoutMs) {
|
|
126
128
|
return new Promise((resolve, reject) => {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
2
2
|
import { platform, release, arch } from "node:os";
|
|
3
3
|
import { dirname, extname, isAbsolute, join, resolve } from "node:path";
|
|
4
|
-
import { AuthStorage } from "@earendil-works/pi-coding-agent";
|
|
5
4
|
import { Type } from "typebox";
|
|
5
|
+
import { readPiCredential, resolvePiProviderAuth, } from "../agent-runtimes/pi/credentials.js";
|
|
6
6
|
import { definePiboTool } from "./contract.js";
|
|
7
7
|
import { getPiboHome } from "../core/pibo-home.js";
|
|
8
8
|
const OPENAI_CODEX_PROVIDER = "openai-codex";
|
|
@@ -47,12 +47,12 @@ function getOpenAiAccountId(accessToken, storedAccountId) {
|
|
|
47
47
|
return typeof accountId === "string" && accountId.trim().length > 0 ? accountId : undefined;
|
|
48
48
|
}
|
|
49
49
|
async function getCodexImageAuth() {
|
|
50
|
-
const
|
|
51
|
-
const credential = authStorage.get(OPENAI_CODEX_PROVIDER);
|
|
50
|
+
const credential = await readPiCredential(OPENAI_CODEX_PROVIDER);
|
|
52
51
|
if (credential?.type !== "oauth") {
|
|
53
52
|
throw new Error("codex_image_generation requires ChatGPT/Codex OAuth login for provider openai-codex. Use the existing OpenAI Codex login flow; API keys are not supported for this tool.");
|
|
54
53
|
}
|
|
55
|
-
const
|
|
54
|
+
const resolvedAuth = await resolvePiProviderAuth(OPENAI_CODEX_PROVIDER);
|
|
55
|
+
const accessToken = resolvedAuth?.auth.apiKey;
|
|
56
56
|
if (!accessToken) {
|
|
57
57
|
throw new Error("codex_image_generation could not load a ChatGPT/Codex OAuth access token for provider openai-codex. Please log in again with the OpenAI Codex login flow.");
|
|
58
58
|
}
|
|
@@ -67,7 +67,7 @@ export class NodeRuntimeBackend {
|
|
|
67
67
|
}
|
|
68
68
|
static async start(baseCwd, input) {
|
|
69
69
|
const target = input.target ?? {};
|
|
70
|
-
const backend = new NodeRuntimeBackend(resolveCwd(baseCwd, target.cwd), target.executable ??
|
|
70
|
+
const backend = new NodeRuntimeBackend(resolveCwd(baseCwd, target.cwd), target.executable ?? process.execPath, target.args ?? [], target.env);
|
|
71
71
|
await backend.waitReady(input.timeoutMs ?? 10000);
|
|
72
72
|
return backend;
|
|
73
73
|
}
|
|
@@ -146,8 +146,10 @@ export class NodeRuntimeBackend {
|
|
|
146
146
|
async close(force = false) {
|
|
147
147
|
if (!this.isAlive())
|
|
148
148
|
return;
|
|
149
|
+
const closed = new Promise((resolve) => this.child.once("close", () => resolve()));
|
|
149
150
|
if (force) {
|
|
150
151
|
this.child.kill("SIGKILL");
|
|
152
|
+
await closed;
|
|
151
153
|
return;
|
|
152
154
|
}
|
|
153
155
|
try {
|
|
@@ -156,6 +158,7 @@ export class NodeRuntimeBackend {
|
|
|
156
158
|
catch {
|
|
157
159
|
this.child.kill("SIGTERM");
|
|
158
160
|
}
|
|
161
|
+
await closed;
|
|
159
162
|
}
|
|
160
163
|
waitReady(timeoutMs) {
|
|
161
164
|
return new Promise((resolveWait, rejectWait) => {
|
|
@@ -67,7 +67,7 @@ export class PythonRuntimeBackend {
|
|
|
67
67
|
}
|
|
68
68
|
static async start(baseCwd, input) {
|
|
69
69
|
const target = input.target ?? {};
|
|
70
|
-
const backend = new PythonRuntimeBackend(resolveCwd(baseCwd, target.cwd), target.executable ?? "python3", target.args ?? [], target.env);
|
|
70
|
+
const backend = new PythonRuntimeBackend(resolveCwd(baseCwd, target.cwd), target.executable ?? (process.platform === "win32" ? "python" : "python3"), target.args ?? [], target.env);
|
|
71
71
|
await backend.waitReady(input.timeoutMs ?? 10000);
|
|
72
72
|
return backend;
|
|
73
73
|
}
|
|
@@ -145,8 +145,10 @@ export class PythonRuntimeBackend {
|
|
|
145
145
|
async close(force = false) {
|
|
146
146
|
if (!this.isAlive())
|
|
147
147
|
return;
|
|
148
|
+
const closed = new Promise((resolve) => this.child.once("close", () => resolve()));
|
|
148
149
|
if (force) {
|
|
149
150
|
this.child.kill("SIGKILL");
|
|
151
|
+
await closed;
|
|
150
152
|
return;
|
|
151
153
|
}
|
|
152
154
|
try {
|
|
@@ -155,6 +157,7 @@ export class PythonRuntimeBackend {
|
|
|
155
157
|
catch {
|
|
156
158
|
this.child.kill("SIGTERM");
|
|
157
159
|
}
|
|
160
|
+
await closed;
|
|
158
161
|
}
|
|
159
162
|
waitReady(timeoutMs) {
|
|
160
163
|
return new Promise((resolveWait, rejectWait) => {
|
|
@@ -8,10 +8,21 @@ import { assertWebAnnotationStatusTransition, normalizeWebAnnotationLimit, norma
|
|
|
8
8
|
export const WEB_ANNOTATIONS_API_PREFIX = "/api/web-annotations";
|
|
9
9
|
export const WEB_ANNOTATIONS_APP_MOUNT = "/apps/web-annotations";
|
|
10
10
|
let defaultStore;
|
|
11
|
-
|
|
11
|
+
let defaultStoreUsers = 0;
|
|
12
|
+
function acquireDefaultStore() {
|
|
12
13
|
defaultStore ??= createDefaultWebAnnotationStore();
|
|
14
|
+
defaultStoreUsers += 1;
|
|
13
15
|
return defaultStore;
|
|
14
16
|
}
|
|
17
|
+
function releaseDefaultStore(store) {
|
|
18
|
+
if (defaultStore !== store)
|
|
19
|
+
return;
|
|
20
|
+
defaultStoreUsers = Math.max(0, defaultStoreUsers - 1);
|
|
21
|
+
if (defaultStoreUsers > 0)
|
|
22
|
+
return;
|
|
23
|
+
store.close();
|
|
24
|
+
defaultStore = undefined;
|
|
25
|
+
}
|
|
15
26
|
function createSameOriginBinding(store, request, context, body) {
|
|
16
27
|
const bindingToken = randomBytes(24).toString("base64url");
|
|
17
28
|
const binding = store.createBinding({
|
|
@@ -32,12 +43,21 @@ function createSameOriginBinding(store, request, context, body) {
|
|
|
32
43
|
};
|
|
33
44
|
}
|
|
34
45
|
export function createWebAnnotationsWebApp(options = {}) {
|
|
35
|
-
const
|
|
46
|
+
const usesDefaultStore = options.store === undefined;
|
|
47
|
+
const store = options.store ?? acquireDefaultStore();
|
|
36
48
|
const baseService = options.cdpService ?? createWebAnnotationCdpService({ store });
|
|
49
|
+
let disposed = false;
|
|
37
50
|
return {
|
|
38
51
|
name: "web-annotations",
|
|
39
52
|
mountPath: WEB_ANNOTATIONS_APP_MOUNT,
|
|
40
53
|
apiPrefix: WEB_ANNOTATIONS_API_PREFIX,
|
|
54
|
+
dispose() {
|
|
55
|
+
if (disposed)
|
|
56
|
+
return;
|
|
57
|
+
disposed = true;
|
|
58
|
+
if (usesDefaultStore)
|
|
59
|
+
releaseDefaultStore(store);
|
|
60
|
+
},
|
|
41
61
|
async handleRequest(request, context) {
|
|
42
62
|
const url = new URL(request.url);
|
|
43
63
|
if (url.pathname === `${WEB_ANNOTATIONS_APP_MOUNT}/overlay.js` && request.method === "GET") {
|