@pasko70/pibo 1.0.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/.codex/skills/pi-agent-harness/SKILL.md +319 -0
- package/.codex/skills/pi-agent-harness/agents/openai.yaml +4 -0
- package/README.md +318 -0
- package/context/codex-base-prompt.md +144 -0
- package/context/pibo-compaction-prompt.md +100 -0
- package/context/pibo-system-prompt.md +17 -0
- package/dist/apps/chat/agent-profiles.js +26 -0
- package/dist/apps/chat/agent-store.js +336 -0
- package/dist/apps/chat/event-log.js +307 -0
- package/dist/apps/chat/read-model.js +218 -0
- package/dist/apps/chat/rooms.js +321 -0
- package/dist/apps/chat/session-metadata.js +14 -0
- package/dist/apps/chat/stream.js +122 -0
- package/dist/apps/chat/trace.js +1182 -0
- package/dist/apps/chat/web-app.js +2569 -0
- package/dist/apps/chat-ui/assets/apl-BxEMbctQ.js +1 -0
- package/dist/apps/chat-ui/assets/asciiarmor-eFjeGRuZ.js +1 -0
- package/dist/apps/chat-ui/assets/asn1-Cfx-0pt9.js +1 -0
- package/dist/apps/chat-ui/assets/asterisk-B5BHTsBr.js +1 -0
- package/dist/apps/chat-ui/assets/brainfuck-CAA2xofr.js +1 -0
- package/dist/apps/chat-ui/assets/clike-BoDCOLzN.js +1 -0
- package/dist/apps/chat-ui/assets/clojure-kVFSWX0o.js +1 -0
- package/dist/apps/chat-ui/assets/cmake-BUPAhezI.js +1 -0
- package/dist/apps/chat-ui/assets/cobol-BfgHZgup.js +1 -0
- package/dist/apps/chat-ui/assets/coffeescript-G1Pe_1AZ.js +1 -0
- package/dist/apps/chat-ui/assets/commonlisp-B3N0CjHn.js +1 -0
- package/dist/apps/chat-ui/assets/crystal-C15ndaGM.js +1 -0
- package/dist/apps/chat-ui/assets/css-BqOeyZOV.js +1 -0
- package/dist/apps/chat-ui/assets/cypher-KjIKv-wW.js +1 -0
- package/dist/apps/chat-ui/assets/d-BlT5AEC-.js +1 -0
- package/dist/apps/chat-ui/assets/diff-oF98tbqj.js +1 -0
- package/dist/apps/chat-ui/assets/dist--55mTWk3.js +1 -0
- package/dist/apps/chat-ui/assets/dist-B5rcjVCj.js +1 -0
- package/dist/apps/chat-ui/assets/dist-BPv5MdlL.js +1 -0
- package/dist/apps/chat-ui/assets/dist-BZ39rB1W.js +1 -0
- package/dist/apps/chat-ui/assets/dist-BsedZGJo.js +1 -0
- package/dist/apps/chat-ui/assets/dist-BvO6SpaM.js +9 -0
- package/dist/apps/chat-ui/assets/dist-C5YJOwhH.js +1 -0
- package/dist/apps/chat-ui/assets/dist-C5oXtFSP.js +1 -0
- package/dist/apps/chat-ui/assets/dist-CG_gRSwv.js +23 -0
- package/dist/apps/chat-ui/assets/dist-CKM5j-iy.js +1 -0
- package/dist/apps/chat-ui/assets/dist-CUp9us2q.js +1 -0
- package/dist/apps/chat-ui/assets/dist-CZ9T4Cly.js +1 -0
- package/dist/apps/chat-ui/assets/dist-D4HhiFWB.js +6 -0
- package/dist/apps/chat-ui/assets/dist-DHE-yBLH.js +1 -0
- package/dist/apps/chat-ui/assets/dist-DSKQpPaz.js +1 -0
- package/dist/apps/chat-ui/assets/dist-L1B-KWZO.js +1 -0
- package/dist/apps/chat-ui/assets/dist-SVPsM5Oi.js +13 -0
- package/dist/apps/chat-ui/assets/dist-Zqt9kNG9.js +1 -0
- package/dist/apps/chat-ui/assets/dist-_DPv0-QF.js +1 -0
- package/dist/apps/chat-ui/assets/dist-_oM7g0eh.js +11 -0
- package/dist/apps/chat-ui/assets/dist-laadbMWg.js +1 -0
- package/dist/apps/chat-ui/assets/dist-nFui3f-r.js +2 -0
- package/dist/apps/chat-ui/assets/dist-tGfufz3b.js +1 -0
- package/dist/apps/chat-ui/assets/dockerfile-CUaqzcqp.js +1 -0
- package/dist/apps/chat-ui/assets/dtd-VCA9yr61.js +1 -0
- package/dist/apps/chat-ui/assets/dylan-O-V5Dw5W.js +1 -0
- package/dist/apps/chat-ui/assets/ebnf-SPmdBkvT.js +1 -0
- package/dist/apps/chat-ui/assets/ecl-ChfCttfI.js +1 -0
- package/dist/apps/chat-ui/assets/eiffel-cB9EbjeN.js +1 -0
- package/dist/apps/chat-ui/assets/elm-BTiVflBU.js +1 -0
- package/dist/apps/chat-ui/assets/erlang-egf0TXFm.js +1 -0
- package/dist/apps/chat-ui/assets/factor-C2tAxNob.js +1 -0
- package/dist/apps/chat-ui/assets/fcl-BiCjh1tj.js +1 -0
- package/dist/apps/chat-ui/assets/forth-C4kDGW6u.js +1 -0
- package/dist/apps/chat-ui/assets/fortran-DzkLaPnd.js +1 -0
- package/dist/apps/chat-ui/assets/gas-DMOxskQF.js +1 -0
- package/dist/apps/chat-ui/assets/gherkin-BPxBpp-k.js +1 -0
- package/dist/apps/chat-ui/assets/groovy-CkEnc0ZY.js +1 -0
- package/dist/apps/chat-ui/assets/haskell-Dadpo9-w.js +1 -0
- package/dist/apps/chat-ui/assets/haxe-CDNZL9MW.js +1 -0
- package/dist/apps/chat-ui/assets/http-jy9Zxxt3.js +1 -0
- package/dist/apps/chat-ui/assets/idl-CGSB6iiy.js +1 -0
- package/dist/apps/chat-ui/assets/index-BdcqTugD.js +151 -0
- package/dist/apps/chat-ui/assets/index-Dk-opWl3.css +1 -0
- package/dist/apps/chat-ui/assets/javascript-DSlzRUd8.js +1 -0
- package/dist/apps/chat-ui/assets/julia-DTiF9v6R.js +1 -0
- package/dist/apps/chat-ui/assets/livescript-Ci8Xxna6.js +1 -0
- package/dist/apps/chat-ui/assets/lua-eVxIrt9t.js +1 -0
- package/dist/apps/chat-ui/assets/mathematica-Da3grj36.js +1 -0
- package/dist/apps/chat-ui/assets/mbox-BWBMSafM.js +1 -0
- package/dist/apps/chat-ui/assets/mirc-CtHu9S1B.js +1 -0
- package/dist/apps/chat-ui/assets/mllike-wTFlPWXS.js +1 -0
- package/dist/apps/chat-ui/assets/modelica-cKbQ0UXu.js +1 -0
- package/dist/apps/chat-ui/assets/mscgen-C5pXQCMK.js +1 -0
- package/dist/apps/chat-ui/assets/mumps-CKBHkOQq.js +1 -0
- package/dist/apps/chat-ui/assets/nginx-B00AiQel.js +1 -0
- package/dist/apps/chat-ui/assets/nsis-SMDwKltR.js +1 -0
- package/dist/apps/chat-ui/assets/ntriples-B_36EBV0.js +1 -0
- package/dist/apps/chat-ui/assets/octave-BXPjzAif.js +1 -0
- package/dist/apps/chat-ui/assets/oz-Dedpat1M.js +1 -0
- package/dist/apps/chat-ui/assets/pascal-CMcUg72K.js +1 -0
- package/dist/apps/chat-ui/assets/perl-DoVTbnzt.js +1 -0
- package/dist/apps/chat-ui/assets/pig-CULXT1YV.js +1 -0
- package/dist/apps/chat-ui/assets/powershell-Cv5Uhf6b.js +1 -0
- package/dist/apps/chat-ui/assets/properties-CQ1C2P-M.js +1 -0
- package/dist/apps/chat-ui/assets/protobuf-SRlvzrl6.js +1 -0
- package/dist/apps/chat-ui/assets/pug-Bo3wfL-f.js +1 -0
- package/dist/apps/chat-ui/assets/puppet-ClSqCGj6.js +1 -0
- package/dist/apps/chat-ui/assets/python-C2_X1GpX.js +1 -0
- package/dist/apps/chat-ui/assets/q-B_6Gdyzl.js +1 -0
- package/dist/apps/chat-ui/assets/r-BD07NGED.js +1 -0
- package/dist/apps/chat-ui/assets/rolldown-runtime-S-ySWqyJ.js +1 -0
- package/dist/apps/chat-ui/assets/rpm-CRu5Z2Jl.js +1 -0
- package/dist/apps/chat-ui/assets/ruby-dZPnOz8h.js +1 -0
- package/dist/apps/chat-ui/assets/sas-S2t8_sDI.js +1 -0
- package/dist/apps/chat-ui/assets/scheme-WcyFWLW2.js +1 -0
- package/dist/apps/chat-ui/assets/shell-DUelnYSh.js +1 -0
- package/dist/apps/chat-ui/assets/sieve-jDjlVhNh.js +1 -0
- package/dist/apps/chat-ui/assets/simple-mode-CL04yRVp.js +1 -0
- package/dist/apps/chat-ui/assets/smalltalk-ddWDYy10.js +1 -0
- package/dist/apps/chat-ui/assets/solr-C7rQhLuW.js +1 -0
- package/dist/apps/chat-ui/assets/sparql--fPCCgVd.js +1 -0
- package/dist/apps/chat-ui/assets/spreadsheet-DjthqD5G.js +1 -0
- package/dist/apps/chat-ui/assets/sql-D_dieYbr.js +1 -0
- package/dist/apps/chat-ui/assets/stex-rHcFYcA0.js +1 -0
- package/dist/apps/chat-ui/assets/stylus-DxF70RNr.js +1 -0
- package/dist/apps/chat-ui/assets/swift-T0hDoOb-.js +1 -0
- package/dist/apps/chat-ui/assets/tcl-Dlzy1mPk.js +1 -0
- package/dist/apps/chat-ui/assets/textile-Dy5rFZe5.js +1 -0
- package/dist/apps/chat-ui/assets/tiddlywiki-DQP1OymS.js +1 -0
- package/dist/apps/chat-ui/assets/tiki-0vOj3DB2.js +1 -0
- package/dist/apps/chat-ui/assets/toml-DEltN0lI.js +1 -0
- package/dist/apps/chat-ui/assets/troff-CRbBpEqY.js +1 -0
- package/dist/apps/chat-ui/assets/ttcn-M5q1nLKg.js +1 -0
- package/dist/apps/chat-ui/assets/ttcn-cfg-Rmw9NWq9.js +1 -0
- package/dist/apps/chat-ui/assets/turtle-BCDWhJK0.js +1 -0
- package/dist/apps/chat-ui/assets/vb-QQ7LGlOz.js +1 -0
- package/dist/apps/chat-ui/assets/vbscript-BiSEdUzz.js +1 -0
- package/dist/apps/chat-ui/assets/velocity-CzMg5_6w.js +1 -0
- package/dist/apps/chat-ui/assets/verilog-BJOO83gk.js +1 -0
- package/dist/apps/chat-ui/assets/vhdl-ed4zAZAA.js +1 -0
- package/dist/apps/chat-ui/assets/webidl-Ddy6hbV6.js +1 -0
- package/dist/apps/chat-ui/assets/xquery-Bw1zwhh6.js +1 -0
- package/dist/apps/chat-ui/assets/yacas-DZdTXy3s.js +1 -0
- package/dist/apps/chat-ui/assets/z80-DMG02_YV.js +1 -0
- package/dist/apps/chat-ui/index.html +15 -0
- package/dist/apps/context-files-ui/assets/apl-14BqhLYK.js +1 -0
- package/dist/apps/context-files-ui/assets/asciiarmor-WLvjqI7d.js +1 -0
- package/dist/apps/context-files-ui/assets/asn1-Bg4FbdCg.js +1 -0
- package/dist/apps/context-files-ui/assets/asterisk-B2MO-X4d.js +1 -0
- package/dist/apps/context-files-ui/assets/brainfuck-CV9kufud.js +1 -0
- package/dist/apps/context-files-ui/assets/clike-CjmcUpt6.js +1 -0
- package/dist/apps/context-files-ui/assets/clojure-De3QGfx6.js +1 -0
- package/dist/apps/context-files-ui/assets/cmake-i2VDNaRq.js +1 -0
- package/dist/apps/context-files-ui/assets/cobol-BwO6DF08.js +1 -0
- package/dist/apps/context-files-ui/assets/coffeescript-BtivDvRz.js +1 -0
- package/dist/apps/context-files-ui/assets/commonlisp-DFkEQdLP.js +1 -0
- package/dist/apps/context-files-ui/assets/crystal-CU0NkcVL.js +1 -0
- package/dist/apps/context-files-ui/assets/css-CbMZAQ1W.js +1 -0
- package/dist/apps/context-files-ui/assets/cypher-Dke5QOzv.js +1 -0
- package/dist/apps/context-files-ui/assets/d-TPqSVaHM.js +1 -0
- package/dist/apps/context-files-ui/assets/diff-B365LSoZ.js +1 -0
- package/dist/apps/context-files-ui/assets/dist-B5PTVnox.js +1 -0
- package/dist/apps/context-files-ui/assets/dist-B5ZAfwf5.js +1 -0
- package/dist/apps/context-files-ui/assets/dist-BJW3917N.js +11 -0
- package/dist/apps/context-files-ui/assets/dist-BkUONE3N.js +1 -0
- package/dist/apps/context-files-ui/assets/dist-CKQF1zEu.js +1 -0
- package/dist/apps/context-files-ui/assets/dist-CwbH_3RN.js +1 -0
- package/dist/apps/context-files-ui/assets/dist-CxRLRmMx.js +2 -0
- package/dist/apps/context-files-ui/assets/dist-D1KyNDg5.js +13 -0
- package/dist/apps/context-files-ui/assets/dist-DFi2YGux.js +1 -0
- package/dist/apps/context-files-ui/assets/dist-DKoyMSNr.js +1 -0
- package/dist/apps/context-files-ui/assets/dist-DLMjd26T.js +1 -0
- package/dist/apps/context-files-ui/assets/dist-DQXzt2Ng.js +1 -0
- package/dist/apps/context-files-ui/assets/dist-DotDq_kD.js +1 -0
- package/dist/apps/context-files-ui/assets/dist-DyfSeBMu.js +1 -0
- package/dist/apps/context-files-ui/assets/dist-MyZgX9K2.js +9 -0
- package/dist/apps/context-files-ui/assets/dist-QQuDy4KA.js +1 -0
- package/dist/apps/context-files-ui/assets/dist-YwR9dpb-.js +1 -0
- package/dist/apps/context-files-ui/assets/dist-dTBsFYAl.js +1 -0
- package/dist/apps/context-files-ui/assets/dockerfile-CJb2sekW.js +1 -0
- package/dist/apps/context-files-ui/assets/dtd-CBMymJ7O.js +1 -0
- package/dist/apps/context-files-ui/assets/dylan-08Azy1NK.js +1 -0
- package/dist/apps/context-files-ui/assets/ebnf-Dkum_1J8.js +1 -0
- package/dist/apps/context-files-ui/assets/ecl-dhxjHL8y.js +1 -0
- package/dist/apps/context-files-ui/assets/eiffel-C446m6dI.js +1 -0
- package/dist/apps/context-files-ui/assets/elm-po1E9de0.js +1 -0
- package/dist/apps/context-files-ui/assets/erlang-BD5LkVkR.js +1 -0
- package/dist/apps/context-files-ui/assets/factor-B2EMQZkP.js +1 -0
- package/dist/apps/context-files-ui/assets/fcl-DkEOamHd.js +1 -0
- package/dist/apps/context-files-ui/assets/forth-dCg2_HVB.js +1 -0
- package/dist/apps/context-files-ui/assets/fortran-3ZpXLFh1.js +1 -0
- package/dist/apps/context-files-ui/assets/gas-DMmxLZRI.js +1 -0
- package/dist/apps/context-files-ui/assets/gherkin-DUSFg2R6.js +1 -0
- package/dist/apps/context-files-ui/assets/groovy-Cmduloe1.js +1 -0
- package/dist/apps/context-files-ui/assets/haskell-Cyr255R9.js +1 -0
- package/dist/apps/context-files-ui/assets/haxe-BJVKtprM.js +1 -0
- package/dist/apps/context-files-ui/assets/http-DszHFpc-.js +1 -0
- package/dist/apps/context-files-ui/assets/idl-Cati9Nrv.js +1 -0
- package/dist/apps/context-files-ui/assets/index-BwRDoHMC.css +1 -0
- package/dist/apps/context-files-ui/assets/index-GwvjXytt.js +202 -0
- package/dist/apps/context-files-ui/assets/javascript-C5pDVaoP.js +1 -0
- package/dist/apps/context-files-ui/assets/julia-DlqY1cTU.js +1 -0
- package/dist/apps/context-files-ui/assets/livescript-C6p8-2W1.js +1 -0
- package/dist/apps/context-files-ui/assets/lua-BxuTHaF7.js +1 -0
- package/dist/apps/context-files-ui/assets/mathematica-nDHZUMJT.js +1 -0
- package/dist/apps/context-files-ui/assets/mbox-DAaR0Hcz.js +1 -0
- package/dist/apps/context-files-ui/assets/mirc-CCA0FRfl.js +1 -0
- package/dist/apps/context-files-ui/assets/mllike-Cw3Iccsb.js +1 -0
- package/dist/apps/context-files-ui/assets/modelica-Czx80fNR.js +1 -0
- package/dist/apps/context-files-ui/assets/mscgen-BmfuTbzG.js +1 -0
- package/dist/apps/context-files-ui/assets/mumps-Ds_ZaumL.js +1 -0
- package/dist/apps/context-files-ui/assets/nginx-D9M2PQ4U.js +1 -0
- package/dist/apps/context-files-ui/assets/nsis-DOo3SJmd.js +1 -0
- package/dist/apps/context-files-ui/assets/ntriples-DLHGTvHs.js +1 -0
- package/dist/apps/context-files-ui/assets/octave-8jj96JiC.js +1 -0
- package/dist/apps/context-files-ui/assets/oz-BmMq7iC4.js +1 -0
- package/dist/apps/context-files-ui/assets/pascal-BgMr6XpT.js +1 -0
- package/dist/apps/context-files-ui/assets/perl-D6YJObi_.js +1 -0
- package/dist/apps/context-files-ui/assets/pig-nx7uchs8.js +1 -0
- package/dist/apps/context-files-ui/assets/powershell-B4IPkVxR.js +1 -0
- package/dist/apps/context-files-ui/assets/properties-CoavQdLC.js +1 -0
- package/dist/apps/context-files-ui/assets/protobuf-D5EWhcmc.js +1 -0
- package/dist/apps/context-files-ui/assets/pug-QU72BPAa.js +1 -0
- package/dist/apps/context-files-ui/assets/puppet-B_0GFuyD.js +1 -0
- package/dist/apps/context-files-ui/assets/python-Cs7sNzy_.js +1 -0
- package/dist/apps/context-files-ui/assets/q-BIB9pPtI.js +1 -0
- package/dist/apps/context-files-ui/assets/r-CN5s4f3o.js +1 -0
- package/dist/apps/context-files-ui/assets/rpm-Ct_Ck8mQ.js +1 -0
- package/dist/apps/context-files-ui/assets/ruby-BVPradRk.js +1 -0
- package/dist/apps/context-files-ui/assets/sas-DN4j74IF.js +1 -0
- package/dist/apps/context-files-ui/assets/scheme-CvNgHAnh.js +1 -0
- package/dist/apps/context-files-ui/assets/shell-BjiMLAaM.js +1 -0
- package/dist/apps/context-files-ui/assets/sieve-C2U1O5Z4.js +1 -0
- package/dist/apps/context-files-ui/assets/simple-mode-DnMbQuKW.js +1 -0
- package/dist/apps/context-files-ui/assets/smalltalk-DkYwYufV.js +1 -0
- package/dist/apps/context-files-ui/assets/solr-BopnSD-v.js +1 -0
- package/dist/apps/context-files-ui/assets/sparql-Cpg3YQfd.js +1 -0
- package/dist/apps/context-files-ui/assets/spreadsheet-kRxtVt9J.js +1 -0
- package/dist/apps/context-files-ui/assets/sql-DYI2GwJR.js +1 -0
- package/dist/apps/context-files-ui/assets/stex-BCRT8IJ3.js +1 -0
- package/dist/apps/context-files-ui/assets/stylus-CARoeVE9.js +1 -0
- package/dist/apps/context-files-ui/assets/swift-DKNaLAK6.js +1 -0
- package/dist/apps/context-files-ui/assets/tcl-CQyXkgMH.js +1 -0
- package/dist/apps/context-files-ui/assets/textile-Yg_UWn-t.js +1 -0
- package/dist/apps/context-files-ui/assets/tiddlywiki-dqVbkfX4.js +1 -0
- package/dist/apps/context-files-ui/assets/tiki-CC_ic8g0.js +1 -0
- package/dist/apps/context-files-ui/assets/toml-B7gGzVkJ.js +1 -0
- package/dist/apps/context-files-ui/assets/troff-Bq3z6oAu.js +1 -0
- package/dist/apps/context-files-ui/assets/ttcn-GvRgs2AT.js +1 -0
- package/dist/apps/context-files-ui/assets/ttcn-cfg-CGCXz7Vo.js +1 -0
- package/dist/apps/context-files-ui/assets/turtle-CwIpz2yy.js +1 -0
- package/dist/apps/context-files-ui/assets/vb-BmcHUM2C.js +1 -0
- package/dist/apps/context-files-ui/assets/vbscript-Cs9dylre.js +1 -0
- package/dist/apps/context-files-ui/assets/velocity-CBWU0VCy.js +1 -0
- package/dist/apps/context-files-ui/assets/verilog-DVCHmufx.js +1 -0
- package/dist/apps/context-files-ui/assets/vhdl-BGDk4f1d.js +1 -0
- package/dist/apps/context-files-ui/assets/webidl-egXQEWlC.js +1 -0
- package/dist/apps/context-files-ui/assets/xquery-5f0hn7cg.js +1 -0
- package/dist/apps/context-files-ui/assets/yacas-DNs9XkmQ.js +1 -0
- package/dist/apps/context-files-ui/assets/z80-B7Dfb4UO.js +1 -0
- package/dist/apps/context-files-ui/index.html +14 -0
- package/dist/auth/better-auth.js +129 -0
- package/dist/auth/types.js +14 -0
- package/dist/bin/pibo.js +3 -0
- package/dist/channels/types.js +1 -0
- package/dist/cli-errors.js +18 -0
- package/dist/cli.js +264 -0
- package/dist/config/config.js +167 -0
- package/dist/core/base-prompt.js +104 -0
- package/dist/core/codex-compat.js +44 -0
- package/dist/core/compaction-prompt.js +258 -0
- package/dist/core/events.js +1 -0
- package/dist/core/profiles.js +138 -0
- package/dist/core/routed-session.js +538 -0
- package/dist/core/runtime.js +323 -0
- package/dist/core/session-router.js +437 -0
- package/dist/core/system-prompt-template.js +56 -0
- package/dist/core/thinking.js +9 -0
- package/dist/core/workspace.js +5 -0
- package/dist/debug/events.js +92 -0
- package/dist/debug/index.js +631 -0
- package/dist/debug/session.js +200 -0
- package/dist/debug/sql.js +238 -0
- package/dist/debug/stores.js +49 -0
- package/dist/debug/trace.js +245 -0
- package/dist/env.js +32 -0
- package/dist/gateway/client.js +200 -0
- package/dist/gateway/protocol.js +46 -0
- package/dist/gateway/request.js +146 -0
- package/dist/gateway/server.js +221 -0
- package/dist/gateway/tool.js +69 -0
- package/dist/gateway/web.js +80 -0
- package/dist/index.js +23 -0
- package/dist/local/client.js +77 -0
- package/dist/local/extension.js +548 -0
- package/dist/local/tui.js +25 -0
- package/dist/mcp/agent-context.js +123 -0
- package/dist/mcp/client.js +332 -0
- package/dist/mcp/commands/call.js +146 -0
- package/dist/mcp/commands/grep.js +145 -0
- package/dist/mcp/commands/info.js +71 -0
- package/dist/mcp/commands/list.js +94 -0
- package/dist/mcp/config-command.js +217 -0
- package/dist/mcp/config.js +440 -0
- package/dist/mcp/daemon-client.js +266 -0
- package/dist/mcp/daemon.js +327 -0
- package/dist/mcp/errors.js +287 -0
- package/dist/mcp/index.js +431 -0
- package/dist/mcp/output.js +171 -0
- package/dist/mcp/python-runtime.js +131 -0
- package/dist/mcp/registry.js +116 -0
- package/dist/mcp/version.js +5 -0
- package/dist/pi-packages/cli.js +92 -0
- package/dist/pi-packages/installer.js +70 -0
- package/dist/pi-packages/metadata.js +231 -0
- package/dist/pi-packages/runtime.js +61 -0
- package/dist/pi-packages/store.js +175 -0
- package/dist/pi-packages/types.js +1 -0
- package/dist/plugins/better-auth.js +11 -0
- package/dist/plugins/builtin.js +249 -0
- package/dist/plugins/chat-web.js +11 -0
- package/dist/plugins/codex-compat.js +72 -0
- package/dist/plugins/context-files-store.js +354 -0
- package/dist/plugins/context-files.js +999 -0
- package/dist/plugins/core-tools.js +94 -0
- package/dist/plugins/example.js +67 -0
- package/dist/plugins/registry.js +368 -0
- package/dist/plugins/remote-agent.js +9 -0
- package/dist/plugins/types.js +1 -0
- package/dist/plugins/web.js +11 -0
- package/dist/reliability/store.js +759 -0
- package/dist/remote/channel.js +176 -0
- package/dist/remote/client.js +92 -0
- package/dist/remote/examples/tui-controller.js +263 -0
- package/dist/remote/protocol.js +55 -0
- package/dist/remote/session-client.js +189 -0
- package/dist/runs/registry.js +323 -0
- package/dist/runs/tools.js +185 -0
- package/dist/sessions/bindings.js +41 -0
- package/dist/sessions/sqlite-store.js +154 -0
- package/dist/sessions/store.js +125 -0
- package/dist/shared/trace-order.js +83 -0
- package/dist/subagents/tool.js +63 -0
- package/dist/tools/browser-use-cdp.js +207 -0
- package/dist/tools/browser-use-leases.js +338 -0
- package/dist/tools/browser-use-wrapper.js +338 -0
- package/dist/tools/codex-compat.js +85 -0
- package/dist/tools/desktop-env.js +90 -0
- package/dist/tools/guides.js +276 -0
- package/dist/tools/index.js +366 -0
- package/dist/tools/python-runtime.js +154 -0
- package/dist/tools/registry.js +107 -0
- package/dist/tools/web-search.js +137 -0
- package/dist/web/auth.js +10 -0
- package/dist/web/channel.js +151 -0
- package/dist/web/http.js +110 -0
- package/dist/web/types.js +1 -0
- package/package.json +74 -0
- package/src/mcp/LICENSE.mcp-cli +21 -0
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pi-agent-harness
|
|
3
|
+
description: Use when designing, specifying, implementing, or reviewing a modular system built around Pi Coding Agent / Pi Agent as an embedded agent engine. Trigger for Pi Agent docking, createAgentSession, custom tools, SessionManager, ResourceLoader, ExtensionRunner, Pi events, OpenClaw-style harnesses, plugin ecosystems, web chat channels, MCP/tool adapters, system prompt ownership, policy layers, or minimal runtimes around packages/coding-agent.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Pi Agent Harness
|
|
7
|
+
|
|
8
|
+
## Core Idea
|
|
9
|
+
|
|
10
|
+
Treat Pi Coding Agent as a small, strong inner engine, not as the whole product.
|
|
11
|
+
|
|
12
|
+
Pi should own the model loop, streaming, tool-call execution plumbing, session persistence, compaction, and extension lifecycle. Your outer runtime should own product policy: channels, user identity, tool catalog, sandbox, prompt contract, plugin API, output delivery, approvals, memory, and UI.
|
|
13
|
+
|
|
14
|
+
Default rule:
|
|
15
|
+
|
|
16
|
+
```text
|
|
17
|
+
Do not expand Pi into your product.
|
|
18
|
+
Embed Pi inside your product.
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
OpenClaw is the reference pattern, but do not copy its breadth by default. Keep the first implementation raw and narrow: one runtime controller, one channel if needed, one tool registry, one prompt builder, one event aggregator, and a small hook surface.
|
|
22
|
+
|
|
23
|
+
## Source Map
|
|
24
|
+
|
|
25
|
+
Read only what the task needs. These are the important paths:
|
|
26
|
+
|
|
27
|
+
Pi product layer:
|
|
28
|
+
|
|
29
|
+
- `/home/pibo/code/pi-mono/packages/coding-agent/README.md` - product philosophy: minimal core, modes, skills, extensions, explicit tools.
|
|
30
|
+
- `/home/pibo/code/pi-mono/packages/coding-agent/src/main.ts` - CLI entry and mode dispatch.
|
|
31
|
+
- `/home/pibo/code/pi-mono/packages/coding-agent/src/core/sdk.ts` - `createAgentSession(...)`, SDK options, model/auth/settings wiring.
|
|
32
|
+
- `/home/pibo/code/pi-mono/packages/coding-agent/src/core/agent-session.ts` - prompt pipeline, event persistence, compaction, tool registry, extension integration.
|
|
33
|
+
- `/home/pibo/code/pi-mono/packages/coding-agent/src/core/session-manager.ts` - append-only JSONL session tree, branch/fork/compaction context.
|
|
34
|
+
- `/home/pibo/code/pi-mono/packages/coding-agent/src/core/resource-loader.ts` - loads context files, skills, prompts, themes, extensions, `SYSTEM.md`, `APPEND_SYSTEM.md`.
|
|
35
|
+
- `/home/pibo/code/pi-mono/packages/coding-agent/src/core/system-prompt.ts` - default prompt builder and tool/context/skill prompt assembly.
|
|
36
|
+
- `/home/pibo/code/pi-mono/packages/coding-agent/src/core/extensions/types.ts` - extension contract and event names.
|
|
37
|
+
- `/home/pibo/code/pi-mono/packages/coding-agent/src/core/extensions/runner.ts` - extension lifecycle, stale-context guard, event dispatch.
|
|
38
|
+
- `/home/pibo/code/pi-mono/packages/coding-agent/src/modes/interactive/interactive-mode.ts` - TUI integration, commands, selectors, rendering of events.
|
|
39
|
+
|
|
40
|
+
Lower engine layers:
|
|
41
|
+
|
|
42
|
+
- `/home/pibo/code/pi-mono/packages/agent/src/agent.ts` - stateful agent wrapper, `subscribe`, `prompt`, `steer`, `followUp`.
|
|
43
|
+
- `/home/pibo/code/pi-mono/packages/agent/src/agent-loop.ts` - turn loop, streaming, tool execution, event emission.
|
|
44
|
+
- `/home/pibo/code/pi-mono/packages/ai/src/stream.ts` - provider dispatch.
|
|
45
|
+
- `/home/pibo/code/pi-mono/packages/tui/src/tui.ts` - terminal rendering if building TUI surfaces.
|
|
46
|
+
|
|
47
|
+
OpenClaw reference pattern:
|
|
48
|
+
|
|
49
|
+
- `/home/pibo/docs/research/tools/openclaw-pi-agent-docking-concept.md` - concise docking analysis.
|
|
50
|
+
- `/home/pibo/code/openclaw/src/agents/pi-embedded-runner/run/attempt.ts` - embedded runner assembly.
|
|
51
|
+
- `/home/pibo/code/openclaw/src/agents/pi-tools.ts` - OpenClaw tool catalog assembler.
|
|
52
|
+
- `/home/pibo/code/openclaw/src/agents/pi-tool-definition-adapter.ts` - OpenClaw tool to Pi `ToolDefinition` adapter.
|
|
53
|
+
- `/home/pibo/code/openclaw/src/agents/pi-embedded-runner/tool-split.ts` - custom-tool authority pattern.
|
|
54
|
+
- `/home/pibo/code/openclaw/src/agents/pi-embedded-runner/system-prompt.ts` - external system prompt ownership.
|
|
55
|
+
- `/home/pibo/code/openclaw/src/agents/pi-embedded-subscribe.ts` - Pi event subscription to product output.
|
|
56
|
+
- `/home/pibo/code/openclaw/src/plugins/types.ts` - broad plugin-hook vocabulary, useful as design reference.
|
|
57
|
+
|
|
58
|
+
## Mental Model
|
|
59
|
+
|
|
60
|
+
Pi Coding Agent has four relevant surfaces:
|
|
61
|
+
|
|
62
|
+
1. Runtime creation via `createAgentSession(...)`.
|
|
63
|
+
2. Persistent state via `SessionManager`.
|
|
64
|
+
3. Runtime resources via `DefaultResourceLoader` and extensions.
|
|
65
|
+
4. Streamed lifecycle events via `session.subscribe(...)` and underlying `agent.subscribe(...)`.
|
|
66
|
+
|
|
67
|
+
The minimal outer harness should look like this:
|
|
68
|
+
|
|
69
|
+
```text
|
|
70
|
+
User / Channel / Web App
|
|
71
|
+
-> Runtime Controller
|
|
72
|
+
-> Prompt Builder
|
|
73
|
+
-> Tool Registry + Policy + Sandbox + MCP adapters
|
|
74
|
+
-> Hook Runner / Plugin Registry
|
|
75
|
+
-> SessionManager
|
|
76
|
+
-> Pi createAgentSession(... customTools ...)
|
|
77
|
+
-> Event Aggregator
|
|
78
|
+
-> Product Reply / Run Result
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Keep product boundaries outside Pi. Pi events are internal engine events; transform them into your own run result before sending anything to a web UI, chat channel, API, or queue.
|
|
82
|
+
|
|
83
|
+
## Minimal Runner Pattern
|
|
84
|
+
|
|
85
|
+
Start from a thin runner. Add complexity only when a product requirement forces it.
|
|
86
|
+
|
|
87
|
+
```ts
|
|
88
|
+
import {
|
|
89
|
+
createAgentSession,
|
|
90
|
+
DefaultResourceLoader,
|
|
91
|
+
SessionManager,
|
|
92
|
+
SettingsManager,
|
|
93
|
+
} from "@mariozechner/pi-coding-agent";
|
|
94
|
+
|
|
95
|
+
const sessionManager = SessionManager.open(sessionFile, sessionDir, workspaceDir);
|
|
96
|
+
const settingsManager = SettingsManager.create(workspaceDir, agentDir);
|
|
97
|
+
|
|
98
|
+
const resourceLoader = new DefaultResourceLoader({
|
|
99
|
+
cwd: workspaceDir,
|
|
100
|
+
agentDir,
|
|
101
|
+
settingsManager,
|
|
102
|
+
extensionFactories,
|
|
103
|
+
});
|
|
104
|
+
await resourceLoader.reload();
|
|
105
|
+
|
|
106
|
+
const { session } = await createAgentSession({
|
|
107
|
+
cwd: workspaceDir,
|
|
108
|
+
agentDir,
|
|
109
|
+
model,
|
|
110
|
+
thinkingLevel,
|
|
111
|
+
sessionManager,
|
|
112
|
+
settingsManager,
|
|
113
|
+
resourceLoader,
|
|
114
|
+
noTools: "builtin",
|
|
115
|
+
customTools,
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
const unsubscribe = session.subscribe((event) => {
|
|
119
|
+
aggregatePiEventIntoProductRun(event);
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
await session.prompt(userText, { source: "rpc" });
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
Notes:
|
|
126
|
+
|
|
127
|
+
- Use `noTools: "builtin"` when your own custom tools should be the authority and Pi built-ins should not be visible.
|
|
128
|
+
- If using an explicit `tools` allowlist in current Pi SDK, include every custom tool name you still want exposed; an empty allowlist can filter custom tools too.
|
|
129
|
+
- Use `session.steer(...)` for steering while a run is active, `session.followUp(...)` for queued follow-up work after the agent would otherwise stop.
|
|
130
|
+
- Dispose/unsubscribe on session replacement or request shutdown.
|
|
131
|
+
|
|
132
|
+
## Tool Authority
|
|
133
|
+
|
|
134
|
+
Do not let the model see raw implementation power. Let it see a curated capability catalog.
|
|
135
|
+
|
|
136
|
+
Recommended shape:
|
|
137
|
+
|
|
138
|
+
```text
|
|
139
|
+
ProductTool
|
|
140
|
+
-> policy check
|
|
141
|
+
-> sandbox/workspace guard
|
|
142
|
+
-> plugin beforeToolCall hooks
|
|
143
|
+
-> execute
|
|
144
|
+
-> normalize result
|
|
145
|
+
-> plugin afterToolCall hooks
|
|
146
|
+
-> Pi ToolDefinition result
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
Use Pi `customTools` as the transport into the agent loop. Build your own adapter from product tools to Pi `ToolDefinition`:
|
|
150
|
+
|
|
151
|
+
- preserve `name`, `description`, `parameters`
|
|
152
|
+
- accept `toolCallId`, params, abort signal, update callback
|
|
153
|
+
- run policy before execution
|
|
154
|
+
- return normalized `content[]` tool results
|
|
155
|
+
- convert non-abort failures into structured tool errors
|
|
156
|
+
- avoid throwing raw product exceptions into the loop
|
|
157
|
+
|
|
158
|
+
For MCP, browser tools, filesystem tools, subprocesses, message sending, or hosted tools, use the same path: register them in your product registry, apply policy there, then adapt them to Pi custom tools. Do not expose MCP as an ungoverned side channel.
|
|
159
|
+
|
|
160
|
+
OpenClaw reference: `src/agents/pi-tool-definition-adapter.ts`.
|
|
161
|
+
|
|
162
|
+
## Prompt Ownership
|
|
163
|
+
|
|
164
|
+
Pi can build a good default system prompt, but a product harness usually needs one explicit runtime contract.
|
|
165
|
+
|
|
166
|
+
Own the prompt outside Pi when product behavior depends on:
|
|
167
|
+
|
|
168
|
+
- channel or delivery rules
|
|
169
|
+
- visible tool names
|
|
170
|
+
- workspace and sandbox rules
|
|
171
|
+
- user identity and trust boundaries
|
|
172
|
+
- memory/docs/skills policy
|
|
173
|
+
- plugin prompt contributions
|
|
174
|
+
- final-output formatting
|
|
175
|
+
|
|
176
|
+
Minimal prompt builder inputs:
|
|
177
|
+
|
|
178
|
+
```text
|
|
179
|
+
base persona
|
|
180
|
+
runtime info
|
|
181
|
+
workspace info
|
|
182
|
+
visible tool names
|
|
183
|
+
channel rules
|
|
184
|
+
policy boundaries
|
|
185
|
+
optional docs/memory/skills context
|
|
186
|
+
plugin prepend/append system context
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
Prefer public hooks first. If you must force a full prompt override, isolate that private-field access in one helper and mark it as version-sensitive. OpenClaw uses this pattern in `src/agents/pi-embedded-runner/system-prompt.ts`.
|
|
190
|
+
|
|
191
|
+
## Sessions
|
|
192
|
+
|
|
193
|
+
Treat Pi `SessionManager` as the durable transcript layer.
|
|
194
|
+
|
|
195
|
+
Important properties:
|
|
196
|
+
|
|
197
|
+
- sessions are append-only JSONL files
|
|
198
|
+
- entries form a tree with `id` and `parentId`
|
|
199
|
+
- the current leaf determines the active LLM context
|
|
200
|
+
- branch, fork, tree navigation, compaction, labels, model changes, and custom entries are part of the session model
|
|
201
|
+
- `buildSessionContext()` resolves the path from root to leaf and inserts compaction summaries
|
|
202
|
+
|
|
203
|
+
Product guidance:
|
|
204
|
+
|
|
205
|
+
- Keep product run metadata outside the raw message content unless the model must see it.
|
|
206
|
+
- Use custom entries for internal markers that belong in the session file.
|
|
207
|
+
- Guard or validate session files if external systems can create or modify them.
|
|
208
|
+
- Do not rewrite history casually; branch or append instead.
|
|
209
|
+
|
|
210
|
+
## Extensions And Hooks
|
|
211
|
+
|
|
212
|
+
Use Pi extensions for lifecycle integration close to Pi. Use your own plugin API for product integrations.
|
|
213
|
+
|
|
214
|
+
Pi extension events worth knowing:
|
|
215
|
+
|
|
216
|
+
- `resources_discover` - add skills, prompt templates, themes.
|
|
217
|
+
- `input` - transform or handle user input before prompt/template expansion.
|
|
218
|
+
- `before_agent_start` - add custom messages or modify the per-turn system prompt.
|
|
219
|
+
- `context` - transform message context before provider request.
|
|
220
|
+
- `before_provider_request` / `after_provider_response` - observe or rewrite provider payloads.
|
|
221
|
+
- `tool_call` / `tool_result` - mutate or block Pi tool calls and inspect results.
|
|
222
|
+
- `tool_execution_start/update/end` - stream product-visible tool status.
|
|
223
|
+
- `message_start/update/end` - aggregate assistant/user/tool messages.
|
|
224
|
+
- `session_before_compact` / `session_compact` - customize or observe compaction.
|
|
225
|
+
- `session_before_switch`, `session_before_fork`, `session_before_tree`, `session_shutdown` - protect session transitions.
|
|
226
|
+
|
|
227
|
+
Pi extension capabilities:
|
|
228
|
+
|
|
229
|
+
- `registerTool(...)`
|
|
230
|
+
- `registerCommand(...)`
|
|
231
|
+
- `registerShortcut(...)`
|
|
232
|
+
- `registerFlag(...)`
|
|
233
|
+
- custom UI methods when interactive UI exists
|
|
234
|
+
- custom message renderers
|
|
235
|
+
- provider registration through runtime actions
|
|
236
|
+
|
|
237
|
+
Stale-context rule: after `newSession`, `fork`, `switchSession`, or `reload`, old extension contexts are invalid. Move post-replacement work into the provided `withSession` callback.
|
|
238
|
+
|
|
239
|
+
## Product Plugin Layer
|
|
240
|
+
|
|
241
|
+
For a modular system inspired by OpenClaw, plugins should normally dock into your harness, not directly into Pi.
|
|
242
|
+
|
|
243
|
+
Start with a tiny hook API:
|
|
244
|
+
|
|
245
|
+
```ts
|
|
246
|
+
type Plugin = {
|
|
247
|
+
id: string;
|
|
248
|
+
tools?: ProductTool[];
|
|
249
|
+
beforePromptBuild?(ctx): PromptPatch | void | Promise<PromptPatch | void>;
|
|
250
|
+
beforeToolCall?(event, ctx): ToolDecision | void | Promise<ToolDecision | void>;
|
|
251
|
+
afterToolCall?(event, ctx): void | Promise<void>;
|
|
252
|
+
};
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
Keep V1 hooks boring:
|
|
256
|
+
|
|
257
|
+
- `beforePromptBuild` can add prepend/append system context.
|
|
258
|
+
- `beforeToolCall` can patch params, block, or request approval.
|
|
259
|
+
- `afterToolCall` can observe normalized results and side effects.
|
|
260
|
+
|
|
261
|
+
Add richer hooks only after a real integration needs them. This keeps Pi small and keeps your product policy testable outside the agent loop.
|
|
262
|
+
|
|
263
|
+
## Event Aggregation
|
|
264
|
+
|
|
265
|
+
Never wire Pi events directly to a product channel.
|
|
266
|
+
|
|
267
|
+
Build an aggregator that turns engine events into your product contract:
|
|
268
|
+
|
|
269
|
+
- final assistant text
|
|
270
|
+
- partial assistant updates
|
|
271
|
+
- reasoning stream if enabled
|
|
272
|
+
- tool start/update/end summaries
|
|
273
|
+
- normalized tool results
|
|
274
|
+
- usage and model metadata
|
|
275
|
+
- compaction/retry status
|
|
276
|
+
- side effects such as message sent or file changed
|
|
277
|
+
- final run status and error state
|
|
278
|
+
|
|
279
|
+
This gives you one stable boundary for web chat, CLI, API, queues, or future channels.
|
|
280
|
+
|
|
281
|
+
## Web-First Minimal Channel
|
|
282
|
+
|
|
283
|
+
If the product starts as a web chat, keep channel complexity outside the Pi runner:
|
|
284
|
+
|
|
285
|
+
```text
|
|
286
|
+
Web App
|
|
287
|
+
-> HTTP/SSE/WebSocket endpoint
|
|
288
|
+
-> Runtime Controller
|
|
289
|
+
-> Pi Runner
|
|
290
|
+
-> Event Aggregator
|
|
291
|
+
-> Web stream + persisted run result
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
The web channel should provide user/session identity, delivery format, and cancellation. The Pi runner should not know about DOM, routes, Telegram, Slack, WhatsApp, or frontend state. Future channels should reuse the same runtime controller and event aggregator.
|
|
295
|
+
|
|
296
|
+
## Design Checklist
|
|
297
|
+
|
|
298
|
+
Before implementing a Pi-based harness, answer these in writing:
|
|
299
|
+
|
|
300
|
+
- What does Pi own, and what does the product own?
|
|
301
|
+
- Where is the session file, and who may write it?
|
|
302
|
+
- Which tools are visible to the model for this run?
|
|
303
|
+
- Where do sandbox and workspace rules run?
|
|
304
|
+
- Which hook can block or mutate a tool call?
|
|
305
|
+
- Who builds the final system prompt?
|
|
306
|
+
- How are Pi events converted into product output?
|
|
307
|
+
- What is the smallest plugin API that satisfies V1?
|
|
308
|
+
- What is explicitly not in V1?
|
|
309
|
+
|
|
310
|
+
If the answer requires adding broad product behavior inside Pi itself, redesign the boundary.
|
|
311
|
+
|
|
312
|
+
## Common Mistakes
|
|
313
|
+
|
|
314
|
+
- Do not add channels, approvals, memory, MCP, or plugin policy directly to Pi core just because the outer product needs them.
|
|
315
|
+
- Do not rely only on prompt text for security-critical tool policy.
|
|
316
|
+
- Do not expose Pi built-in tools and product tools together without a deliberate allowlist.
|
|
317
|
+
- Do not let plugins mutate Pi internals directly when a harness hook can express the same behavior.
|
|
318
|
+
- Do not treat `agent_end` as a UI-ready response; aggregate and normalize first.
|
|
319
|
+
- Do not assume OpenClaw's broad implementation is the desired V1. Copy the docking principle, not the feature surface.
|
package/README.md
ADDED
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
# pibo
|
|
2
|
+
|
|
3
|
+
Pibo turns Pi Coding Agent into an agent-native runtime with discoverable CLI tools, plugins, channels, and local gateways.
|
|
4
|
+
|
|
5
|
+
Pi remains the inner engine for model turns, tools, streaming, sessions, and compaction. Pibo owns the outer product boundary: profiles, plugin registration, channels, routing, Pibo Sessions, auth, policy, and transport-specific adapters.
|
|
6
|
+
|
|
7
|
+
## Install
|
|
8
|
+
|
|
9
|
+
Pibo V1 targets Node.js 24+.
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
npm install -g @pasko70/pibo
|
|
13
|
+
pibo --help
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
For local development from source:
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
npm install
|
|
20
|
+
npm run build
|
|
21
|
+
npm run start -- --help
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Docs
|
|
25
|
+
|
|
26
|
+
- `docs/architecture.md` describes the current runtime architecture and boundaries.
|
|
27
|
+
- `docs/mcp.md` documents the MCP CLI and registry.
|
|
28
|
+
- `docs/tools.md` documents curated external CLI tools.
|
|
29
|
+
- `docs/pi-packages.md` documents registered Pi Coding Agent packages and per-agent selection.
|
|
30
|
+
- `docs/agent-run-yield-spec.md` documents yielded agent runs and run-control tools.
|
|
31
|
+
- `docs/chat-rooms-event-log.md` documents Chat Web rooms, default-room startup, durable chat events, unread cursors, SSE cursors, and idempotent sends.
|
|
32
|
+
- `docs/codex-compact-terminal-design.md` documents the compact Codex-style Chat session view.
|
|
33
|
+
- `docs/progress.md` is the short implementation status snapshot.
|
|
34
|
+
|
|
35
|
+
## Scripts
|
|
36
|
+
|
|
37
|
+
- `npm run dev` runs the TypeScript entrypoint with `tsx`.
|
|
38
|
+
- `npm run profile` prints the selected profile with loaded skills, tools, and context files.
|
|
39
|
+
- `npm run profile -- gateway-producer` prints the parked gateway producer profile.
|
|
40
|
+
- `npm run profile -- run-yield-qa` prints the yielded-run QA profile with subagents.
|
|
41
|
+
- `npm run tui` starts the Pi TUI through the pibo wrapper.
|
|
42
|
+
- `npm run tui:gateway` starts the Pi TUI with the gateway producer profile.
|
|
43
|
+
- `npm run gateway` starts the local pibo gateway daemon.
|
|
44
|
+
- `npm run gateway:web` starts the local gateway with Better Auth, the same-origin web host, and the chat app.
|
|
45
|
+
- `npm run client -- <piboSessionId>` starts a console client connected to the gateway.
|
|
46
|
+
- `npm run dev -- mcp` lists configured MCP servers and tools.
|
|
47
|
+
- `npm run dev -- tools` lists curated external CLI tools.
|
|
48
|
+
- `npm run dev -- pi-packages` lists registered Pi Coding Agent packages.
|
|
49
|
+
- `npm run dev -- debug` inspects local Pibo SQLite stores.
|
|
50
|
+
- `npm run dev -- config keys` lists supported local config keys.
|
|
51
|
+
- `npm run build` compiles to `dist/`.
|
|
52
|
+
- `npm run start` runs the compiled entrypoint.
|
|
53
|
+
- `npm test` builds and runs the test suite.
|
|
54
|
+
- `npm run typecheck` checks TypeScript without emitting files.
|
|
55
|
+
- `npm run clean` removes `dist/`.
|
|
56
|
+
|
|
57
|
+
## Philosophy
|
|
58
|
+
|
|
59
|
+
Keep the wrapper thin. Pi Coding Agent should remain the inner engine; pibo adds only the product boundary we actually need: profiles, plugins, channels, auth, policy, routing, and opt-in operator tooling.
|
|
60
|
+
|
|
61
|
+
Optional integrations stay outside the core package until the user installs them. MCP servers, Python virtual environments, and third-party CLIs are configured on demand through `pibo mcp` and `pibo tools`, not bundled into pibo itself.
|
|
62
|
+
|
|
63
|
+
## Plugin Layer
|
|
64
|
+
|
|
65
|
+
`src/plugins/` contains the minimal static plugin layer. Built-in plugins register tools, subagents, skills, context files, profiles, gateway actions, event listeners, channels, auth services, and web apps through `PiboPluginRegistry`.
|
|
66
|
+
|
|
67
|
+
This is an extension boundary, not a marketplace. Plugins are internal and statically loaded for now, which keeps the runtime simple while supporting web auth, web apps, new tools, new skills, subagents, and future transports.
|
|
68
|
+
|
|
69
|
+
The gateway producer plugin is parked outside the default plugin registry. It remains available for explicit local gateway experiments through the `gateway-producer` profile.
|
|
70
|
+
|
|
71
|
+
## Channels And Pibo Sessions
|
|
72
|
+
|
|
73
|
+
Plugins can register channels through `api.registerChannel(...)`. A channel maps an external transport into pibo events and maps pibo output events back to that transport.
|
|
74
|
+
|
|
75
|
+
The channel context exposes only the pibo boundary:
|
|
76
|
+
|
|
77
|
+
- `emit(event)` sends a `PiboInputEvent` to the session router.
|
|
78
|
+
- `subscribe(listener)` receives normalized `PiboOutputEvent` values.
|
|
79
|
+
- `getSession(id)`, `createSession(...)`, `updateSession(...)`, `deleteSession(...)`, and `findSessions(...)` work with first-class Pibo Session records.
|
|
80
|
+
- `getGatewayActions()` exposes discoverable execution actions for channel UIs.
|
|
81
|
+
|
|
82
|
+
Pibo Sessions are stored in SQLite by default at `.pibo/pibo-sessions.sqlite`. A Pibo Session keeps product identity (`id`), technical Pi identity (`piSessionId`), channel, kind, profile, owner scope, optional parent/origin relationships, optional workspace, title, and plugin metadata.
|
|
83
|
+
|
|
84
|
+
In the Chat Web App, personal sessions can be archived before deletion. Permanent deletion is available only for archived sessions and requires typing `Delete this session`; it removes the selected Pibo Session, child sessions, and their Chat Web read-model/event-log rows.
|
|
85
|
+
|
|
86
|
+
The Chat Web App also has Pibo Rooms. Each user gets a locked `Personal Chat` room automatically. The personal room is shown separately from user-created rooms and cannot be renamed, archived, or deleted. User-created rooms can be archived first, then permanently deleted after typing the room name. Archived rooms remain inspectable and show their contained sessions, but they are read-only: no new sessions, messages, or execution actions can be started in that room. Permanent room deletion removes the room subtree, contained sessions, subagent session descendants, and Chat Web read-model/event-log rows.
|
|
87
|
+
|
|
88
|
+
Within the Sessions area, the Chat Web App now has an internal session-view registry. The existing nested trace renderer remains the default `Trace` view, and the same `PiboSessionTraceView` data can also be rendered through a compact Codex-style `Terminal` view selected by `?view=trace|terminal` or by browser-local preference.
|
|
89
|
+
|
|
90
|
+
Managed context files are now a first-class product capability. The `pibo.context-files` plugin exposes editable global and agent-scoped markdown context files through `/api/context-files`, stores managed-file metadata and revisions in `.pibo/context-files/context-files.sqlite`, and emits product events when managed files are created, changed, removed, or updated on disk. Plugin-shipped context files remain immutable source files; the product can create linked managed copies from them, track source hashes and link state, diff the managed copy against its source, reset back to source, restore older revisions, or adopt a changed source as the new managed baseline.
|
|
91
|
+
|
|
92
|
+
The main source folders are:
|
|
93
|
+
|
|
94
|
+
- `src/core/` for runtime, events, profiles, and session routing
|
|
95
|
+
- `src/plugins/` for the static plugin registry and built-in plugins
|
|
96
|
+
- `src/channels/` for channel contracts
|
|
97
|
+
- `src/sessions/` for Pibo Session storage
|
|
98
|
+
- `src/gateway/` for the local TCP gateway transport
|
|
99
|
+
- `src/runs/` for yielded run tracking and run-control tools
|
|
100
|
+
- `src/auth/`, `src/web/`, and `src/apps/` for Better Auth, the same-origin web host, and web apps
|
|
101
|
+
|
|
102
|
+
## Agent Designer
|
|
103
|
+
|
|
104
|
+
The Chat Web App includes an Agent Designer in the Agents area. It creates custom agents, persists them in `.pibo/chat-agents.sqlite`, and registers each saved agent as a dynamic profile for routed sessions.
|
|
105
|
+
|
|
106
|
+
The Agents area uses one sidebar for both editable custom agents and read-only plugin profiles. Plugin profiles can be inspected with their registered tools, skills, context files, subagents, built-in tool mode, and run-control package state, then copied into a custom agent when changes are needed.
|
|
107
|
+
|
|
108
|
+
Custom agent names are profile names. They must be lowercase kebab-case, such as `test-agent`, and are used consistently in the UI, session records, and backend profile registry. Legacy `custom-agent:agent_*` names remain aliases for existing agents.
|
|
109
|
+
|
|
110
|
+
Custom agents can be archived before deletion. Archived custom agents are removed from the active profile catalog, cannot start new sessions, and become read-only until restored. Permanent deletion is available only for archived agents and requires typing the agent profile name; it deletes the custom agent and Chat sessions using that profile.
|
|
111
|
+
|
|
112
|
+
The designer configures native Pibo agent capabilities only: plugin-registered tools, skills, context files, subagents, automatic local context-file loading, built-in Pi tool visibility, and capability packages such as `pibo-run-control`. Curated external CLI tools from `pibo tools` remain global operator tooling and are not selected per agent.
|
|
113
|
+
|
|
114
|
+
The Chat Web App now also has a dedicated Context area at `/apps/chat/context`. It reuses the managed context-file APIs inside the main Chat UI shell so operators can create, edit, relocate, and remove managed context files without leaving the authenticated Chat Web App. Plugin context files are shown there as read-only sources, and both the Context area and Agent Designer can create linked managed copies when a user wants to customize shipped content safely.
|
|
115
|
+
|
|
116
|
+
The Context area also exposes the Pibo Base Prompt. The library prompt lives at `context/pibo-system-prompt.md`; the Chat Web App can switch between that read-only library prompt and a persisted custom prompt stored under `.pibo/base-prompt.md`. Runtime prompt templates replace `{{availableTools}}` and `{{guidelines}}` from the active Pi/Pibo tool surface before project context and skills are appended.
|
|
117
|
+
|
|
118
|
+
The Context area also exposes the Pibo Compaction Prompt. The library prompt lives at `context/pibo-compaction-prompt.md`; the Chat Web App can switch between that read-only library prompt and a persisted custom prompt stored under `.pibo/compaction-prompt.md`. At runtime Pibo handles Pi's `session_before_compact` hook and uses the active compaction prompt sections for summary creation, update-summary creation, and split-turn prefix summaries.
|
|
119
|
+
|
|
120
|
+
## Profiles
|
|
121
|
+
|
|
122
|
+
The default profile is registered by the core plugin. It loads the local `pi-agent-harness` skill and uses Pi Coding Agent's built-in tools for normal coding work.
|
|
123
|
+
|
|
124
|
+
The `codex` alias resolves to the `codex-compat-openai-web` profile. It keeps the Pibo runtime boundary while exposing Codex-like coding affordances: Pi/Pibo `read`, `edit`, and `write`; Pibo run-control `bash`; native `web_search`; `apply_patch` and `view_image`; generated `pibo_subagent_default`, `pibo_subagent_explorer`, and `pibo_subagent_worker`; and the `pibo_run_*` lifecycle tools. `web_search` is a normal Pibo native tool with a provider adapter; the default adapter injects OpenAI Responses hosted `web_search` into the model request instead of using a local DuckDuckGo function tool. It intentionally does not expose Pi's separate `grep`, `find`, or `ls` tools by default; codebase search remains Codex-style through `bash` and commands such as `rg`.
|
|
125
|
+
|
|
126
|
+
Profiles can opt into registered subagents. Pibo exposes enabled subagents to Pi as generated tools named `pibo_subagent_<name>`, routed through normal pibo sessions. Generated subagent tools are always parallel-capable; agents sequence subagent work by waiting for a direct result before issuing a later call or by using `pibo_run_start` for yielded work.
|
|
127
|
+
|
|
128
|
+
Subagent sessions use `parentId` for hierarchy and inherit the parent session's `metadata.chatRoomId` when the parent belongs to a Chat Web room, so room-scoped session views and room deletion include subagent work.
|
|
129
|
+
|
|
130
|
+
The `run-yield-qa` profile adds two simple QA subagents. Profiles with yieldable tools can expose generated run-control tools through the `pibo-run-control` capability package:
|
|
131
|
+
|
|
132
|
+
```text
|
|
133
|
+
pibo_run_start
|
|
134
|
+
pibo_run_list
|
|
135
|
+
pibo_run_status
|
|
136
|
+
pibo_run_wait
|
|
137
|
+
pibo_run_read
|
|
138
|
+
pibo_run_cancel
|
|
139
|
+
pibo_run_ack
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
Try the QA profile through the routed runtime:
|
|
143
|
+
|
|
144
|
+
```bash
|
|
145
|
+
npm run profile -- run-yield-qa
|
|
146
|
+
npm run tui:routed -- run-yield-qa
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
Subagent profiles require the routed runtime. Do not use direct `npm run tui -- run-yield-qa` for this profile.
|
|
150
|
+
|
|
151
|
+
## Gateway
|
|
152
|
+
|
|
153
|
+
The gateway is the current local transport boundary. It owns the session router, accepts newline-delimited JSON frames over TCP, routes messages by Pibo Session ID, and broadcasts normalized session events back to connected clients.
|
|
154
|
+
|
|
155
|
+
The parked gateway producer profile adds `pibo_gateway_send`, a tool that sends a message into a target gateway session and returns the correlated assistant reply. See `examples/gateway/README.md` for the two supported manual flows.
|
|
156
|
+
|
|
157
|
+
## MCP CLI
|
|
158
|
+
|
|
159
|
+
Pibo includes an MCP helper CLI under `pibo mcp`. It reads MCP server definitions from `mcp_servers.json`, starts stdio or HTTP MCP servers, lists their tools, shows schemas, searches by glob, and calls tools from shell-friendly JSON input. See `docs/mcp.md` for the full guide.
|
|
160
|
+
|
|
161
|
+
```bash
|
|
162
|
+
npm run dev -- mcp
|
|
163
|
+
npm run dev -- mcp info filesystem
|
|
164
|
+
npm run dev -- mcp grep "*file*"
|
|
165
|
+
npm run dev -- mcp call filesystem read_file '{"path":"README.md"}'
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
The config file is created automatically as `mcp_servers.json` when needed. Manage it with:
|
|
169
|
+
|
|
170
|
+
```bash
|
|
171
|
+
npm run dev -- mcp config init
|
|
172
|
+
npm run dev -- mcp config help
|
|
173
|
+
npm run dev -- mcp config path
|
|
174
|
+
npm run dev -- mcp config paths
|
|
175
|
+
npm run dev -- mcp config schema
|
|
176
|
+
npm run dev -- mcp config add filesystem '{"command":"npx","args":["-y","@modelcontextprotocol/server-filesystem","."]}'
|
|
177
|
+
npm run dev -- mcp config add deepwiki '{"url":"https://mcp.deepwiki.com/mcp"}'
|
|
178
|
+
npm run dev -- mcp config remove filesystem
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
Pibo also ships a small MCP registry for common optional servers. Presets are not active by default; install one when you want it:
|
|
182
|
+
|
|
183
|
+
```bash
|
|
184
|
+
npm run dev -- mcp registry list
|
|
185
|
+
npm run dev -- mcp registry show <name>
|
|
186
|
+
npm run dev -- mcp registry doctor <name>
|
|
187
|
+
npm run dev -- mcp registry install <name>
|
|
188
|
+
npm run dev -- mcp registry remove <name>
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
The registry currently has no bundled presets. The command surface remains in place so curated external MCP servers can be added later without changing the config model.
|
|
192
|
+
|
|
193
|
+
Config lookup order is `-c/--config`, `MCP_CONFIG_PATH`, `./mcp_servers.json`, `~/.mcp_servers.json`, then `~/.config/mcp/mcp_servers.json`. Use `MCP_NO_DAEMON=1` to force fresh MCP connections instead of using the short-lived connection cache.
|
|
194
|
+
|
|
195
|
+
## CLI Tools
|
|
196
|
+
|
|
197
|
+
Pibo includes a separate `pibo tools` registry for curated external CLI tools. These tools are not MCP servers and their guides are not loaded into every agent profile. Agents can discover them on demand:
|
|
198
|
+
|
|
199
|
+
```bash
|
|
200
|
+
npm run dev -- tools list
|
|
201
|
+
npm run dev -- tools installed
|
|
202
|
+
npm run dev -- tools show browser-use
|
|
203
|
+
npm run dev -- tools install browser-use
|
|
204
|
+
npm run dev -- tools remove browser-use
|
|
205
|
+
npm run dev -- tools doctor browser-use
|
|
206
|
+
npm run dev -- tools guides browser-use
|
|
207
|
+
npm run dev -- tools guide browser-use browser-use
|
|
208
|
+
npm run dev -- tools guide browser-use remote-browser
|
|
209
|
+
npm run dev -- tools path browser-use
|
|
210
|
+
npm run dev -- tools env browser-use
|
|
211
|
+
npm run dev -- tools browser-use
|
|
212
|
+
npm run dev -- tools browser-use targets
|
|
213
|
+
npm run dev -- tools browser-use attach-chat
|
|
214
|
+
npm run dev -- tools browser-use lease acquire
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
The first curated tool is `browser-use`, pinned to `browser-use[cli]==0.12.6` so the CLI surface stays aligned with the bundled guides. It is installed into an isolated runtime under `~/.pibo/tools/browser-use` and uses `~/.pibo/tools/browser-use/home` as its tool home. See `docs/tools.md`.
|
|
218
|
+
|
|
219
|
+
When using Browser Use from this repo, initialize its shell environment once in a persistent terminal with `eval "$(npm run --silent dev -- tools env browser-use)"`, then run later `browser-use` commands directly in that same terminal.
|
|
220
|
+
|
|
221
|
+
For Chat Web debugging, start by reusing the browser that already exists: `npm run dev -- tools browser-use targets` lists Chrome CDP targets with Chat auth/composer hints, and `npm run dev -- tools browser-use attach-chat` exports the best authenticated Chat target for direct CDP inspection.
|
|
222
|
+
|
|
223
|
+
## Debug CLI
|
|
224
|
+
|
|
225
|
+
Pibo includes a local operator CLI under `pibo debug` for targeted SQLite diagnostics. It is not an agent profile tool and does not load Pi transcripts or full Chat Web payloads automatically.
|
|
226
|
+
|
|
227
|
+
```bash
|
|
228
|
+
npm run dev -- debug db stores
|
|
229
|
+
npm run dev -- debug db schema sessions
|
|
230
|
+
npm run dev -- debug db query sessions "select id, profile from pibo_sessions limit 5"
|
|
231
|
+
npm run dev -- debug session /apps/chat/rooms/<roomId>/sessions/<piboSessionId>
|
|
232
|
+
npm run dev -- debug trace <piboSessionId> --running-only
|
|
233
|
+
npm run dev -- debug trace <piboSessionId> --check
|
|
234
|
+
npm run dev -- debug events <piboSessionId> --type tool_execution_finished --fields toolName,toolCallId,result.details.status
|
|
235
|
+
npm run dev -- debug events stats --topic pibo.output --session <piboSessionId> --retention live_delta
|
|
236
|
+
npm run dev -- debug events prune --topic pibo.output --retention live_delta --before 2026-05-01T00:00:00.000Z
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
`pibo debug db query` opens known stores read-only, accepts only one read-only SQL statement, applies a default row limit when the query has no `limit`, and supports `--json` for machine-readable output. `pibo debug trace` rebuilds the same Chat Web trace view as `/api/chat/trace`; `--check` adds trace consistency diagnostics for ids, parents, stable order metadata, and source/stable-key coverage. `pibo debug events` extracts selected payload fields without dumping full event payloads, can summarize retained event counts by topic/session/retention class, and can prune old `live_delta` rows once replay consumers no longer need them.
|
|
240
|
+
|
|
241
|
+
## Web Auth
|
|
242
|
+
|
|
243
|
+
`npm run gateway:web` starts three separate pieces on the same origin:
|
|
244
|
+
|
|
245
|
+
- `pibo.better-auth` registers the Better Auth service and owns `/api/auth/*`.
|
|
246
|
+
- `pibo.web-host` owns the HTTP server and dispatches same-origin web apps.
|
|
247
|
+
- `pibo.chat-web` registers the chat app under `/apps/chat` and `/api/chat/*`.
|
|
248
|
+
|
|
249
|
+
V1 uses Better Auth with Google OAuth, the Better Auth bearer plugin, and SQLite at `.pibo/auth.sqlite`. Add the exact Google OAuth redirect URI for your instance. For local QA with `auth.baseURL` set to `http://localhost:4788`, use:
|
|
250
|
+
|
|
251
|
+
```text
|
|
252
|
+
http://localhost:4788/api/auth/callback/google
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
For a deployed instance, replace the host with that instance's public HTTPS origin:
|
|
256
|
+
|
|
257
|
+
```text
|
|
258
|
+
https://pibo.example.com/api/auth/callback/google
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
LAN development through an sslip.io host is also supported when a local reverse proxy exposes Pibo on port 80:
|
|
262
|
+
|
|
263
|
+
```text
|
|
264
|
+
http://4788.192.168.0.204.sslip.io/api/auth/callback/google
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
Google OAuth redirect URIs are exact per instance. Wildcard or "all deployments" redirects are not supported for this web-server flow, so each self-hosted deployment needs its own Google OAuth client or an explicitly configured redirect URI.
|
|
268
|
+
|
|
269
|
+
Required config values:
|
|
270
|
+
|
|
271
|
+
```bash
|
|
272
|
+
npm run dev -- config set auth.baseURL http://localhost:4788
|
|
273
|
+
npm run dev -- config set auth.secret <32+ character secret>
|
|
274
|
+
npm run dev -- config set auth.googleClientId <google oauth client id>
|
|
275
|
+
npm run dev -- config set auth.googleClientSecret <google oauth client secret>
|
|
276
|
+
npm run dev -- config set auth.allowedEmails you@example.com,friend@example.com
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
For LAN access from another device, set the public origin as both the Better Auth base URL and a trusted origin:
|
|
280
|
+
|
|
281
|
+
```bash
|
|
282
|
+
npm run dev -- config set auth.baseURL http://4788.192.168.0.204.sslip.io
|
|
283
|
+
npm run dev -- config set auth.trustedOrigins http://4788.192.168.0.204.sslip.io
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
The web host binds to `127.0.0.1` when `auth.baseURL` is loopback. When `auth.baseURL` is a non-loopback host, `npm run gateway:web` binds the HTTP web host to `0.0.0.0` by default. The internal TCP gateway remains on loopback.
|
|
287
|
+
|
|
288
|
+
When running behind a local nginx sslip.io proxy, preserve the original browser origin:
|
|
289
|
+
|
|
290
|
+
```nginx
|
|
291
|
+
proxy_set_header Host 127.0.0.1:$target_port;
|
|
292
|
+
proxy_set_header X-Forwarded-Proto $scheme;
|
|
293
|
+
proxy_set_header X-Forwarded-Host $host;
|
|
294
|
+
proxy_pass http://127.0.0.1:$target_port;
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
Pibo trusts `X-Forwarded-Host` and `X-Forwarded-Proto` only from loopback proxy connections. Chat mutation routes still require JSON and same-origin `Origin` headers.
|
|
298
|
+
|
|
299
|
+
`auth.secret` must be at least 32 characters. `auth.allowedEmails` must contain at least one email; pibo fails closed if the allowlist is missing or empty. Authenticated Google users whose email is not listed receive `403` from the pibo web API. Unauthenticated pibo API requests receive `401`.
|
|
300
|
+
|
|
301
|
+
All web chat API requests require Better Auth, including localhost.
|
|
302
|
+
|
|
303
|
+
The Google provider requests `prompt=select_account`, so signing out of pibo and signing in again lets the user choose a different Google account. Pibo signout clears the Better Auth session; it does not sign the user out of Google globally.
|
|
304
|
+
|
|
305
|
+
## Config CLI
|
|
306
|
+
|
|
307
|
+
Pibo reads local config from `.pibo/config.json`. The current CLI is intentionally small:
|
|
308
|
+
|
|
309
|
+
```bash
|
|
310
|
+
npm run dev -- config set auth.allowedEmails you@example.com,friend@example.com
|
|
311
|
+
npm run dev -- config get auth.allowedEmails
|
|
312
|
+
npm run dev -- config del auth.allowedEmails
|
|
313
|
+
npm run dev -- config keys
|
|
314
|
+
npm run dev -- config show
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
Supported V1 keys are `auth.baseURL`, `auth.secret`, `auth.googleClientId`, `auth.googleClientSecret`, `auth.allowedEmails`, `auth.trustedOrigins`, and `auth.databasePath`.
|
|
318
|
+
Secret keys such as `auth.secret` and `auth.googleClientSecret` are stored in full but redacted in `config get` and `config show` output.
|