@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.
Files changed (351) hide show
  1. package/.codex/skills/pi-agent-harness/SKILL.md +319 -0
  2. package/.codex/skills/pi-agent-harness/agents/openai.yaml +4 -0
  3. package/README.md +318 -0
  4. package/context/codex-base-prompt.md +144 -0
  5. package/context/pibo-compaction-prompt.md +100 -0
  6. package/context/pibo-system-prompt.md +17 -0
  7. package/dist/apps/chat/agent-profiles.js +26 -0
  8. package/dist/apps/chat/agent-store.js +336 -0
  9. package/dist/apps/chat/event-log.js +307 -0
  10. package/dist/apps/chat/read-model.js +218 -0
  11. package/dist/apps/chat/rooms.js +321 -0
  12. package/dist/apps/chat/session-metadata.js +14 -0
  13. package/dist/apps/chat/stream.js +122 -0
  14. package/dist/apps/chat/trace.js +1182 -0
  15. package/dist/apps/chat/web-app.js +2569 -0
  16. package/dist/apps/chat-ui/assets/apl-BxEMbctQ.js +1 -0
  17. package/dist/apps/chat-ui/assets/asciiarmor-eFjeGRuZ.js +1 -0
  18. package/dist/apps/chat-ui/assets/asn1-Cfx-0pt9.js +1 -0
  19. package/dist/apps/chat-ui/assets/asterisk-B5BHTsBr.js +1 -0
  20. package/dist/apps/chat-ui/assets/brainfuck-CAA2xofr.js +1 -0
  21. package/dist/apps/chat-ui/assets/clike-BoDCOLzN.js +1 -0
  22. package/dist/apps/chat-ui/assets/clojure-kVFSWX0o.js +1 -0
  23. package/dist/apps/chat-ui/assets/cmake-BUPAhezI.js +1 -0
  24. package/dist/apps/chat-ui/assets/cobol-BfgHZgup.js +1 -0
  25. package/dist/apps/chat-ui/assets/coffeescript-G1Pe_1AZ.js +1 -0
  26. package/dist/apps/chat-ui/assets/commonlisp-B3N0CjHn.js +1 -0
  27. package/dist/apps/chat-ui/assets/crystal-C15ndaGM.js +1 -0
  28. package/dist/apps/chat-ui/assets/css-BqOeyZOV.js +1 -0
  29. package/dist/apps/chat-ui/assets/cypher-KjIKv-wW.js +1 -0
  30. package/dist/apps/chat-ui/assets/d-BlT5AEC-.js +1 -0
  31. package/dist/apps/chat-ui/assets/diff-oF98tbqj.js +1 -0
  32. package/dist/apps/chat-ui/assets/dist--55mTWk3.js +1 -0
  33. package/dist/apps/chat-ui/assets/dist-B5rcjVCj.js +1 -0
  34. package/dist/apps/chat-ui/assets/dist-BPv5MdlL.js +1 -0
  35. package/dist/apps/chat-ui/assets/dist-BZ39rB1W.js +1 -0
  36. package/dist/apps/chat-ui/assets/dist-BsedZGJo.js +1 -0
  37. package/dist/apps/chat-ui/assets/dist-BvO6SpaM.js +9 -0
  38. package/dist/apps/chat-ui/assets/dist-C5YJOwhH.js +1 -0
  39. package/dist/apps/chat-ui/assets/dist-C5oXtFSP.js +1 -0
  40. package/dist/apps/chat-ui/assets/dist-CG_gRSwv.js +23 -0
  41. package/dist/apps/chat-ui/assets/dist-CKM5j-iy.js +1 -0
  42. package/dist/apps/chat-ui/assets/dist-CUp9us2q.js +1 -0
  43. package/dist/apps/chat-ui/assets/dist-CZ9T4Cly.js +1 -0
  44. package/dist/apps/chat-ui/assets/dist-D4HhiFWB.js +6 -0
  45. package/dist/apps/chat-ui/assets/dist-DHE-yBLH.js +1 -0
  46. package/dist/apps/chat-ui/assets/dist-DSKQpPaz.js +1 -0
  47. package/dist/apps/chat-ui/assets/dist-L1B-KWZO.js +1 -0
  48. package/dist/apps/chat-ui/assets/dist-SVPsM5Oi.js +13 -0
  49. package/dist/apps/chat-ui/assets/dist-Zqt9kNG9.js +1 -0
  50. package/dist/apps/chat-ui/assets/dist-_DPv0-QF.js +1 -0
  51. package/dist/apps/chat-ui/assets/dist-_oM7g0eh.js +11 -0
  52. package/dist/apps/chat-ui/assets/dist-laadbMWg.js +1 -0
  53. package/dist/apps/chat-ui/assets/dist-nFui3f-r.js +2 -0
  54. package/dist/apps/chat-ui/assets/dist-tGfufz3b.js +1 -0
  55. package/dist/apps/chat-ui/assets/dockerfile-CUaqzcqp.js +1 -0
  56. package/dist/apps/chat-ui/assets/dtd-VCA9yr61.js +1 -0
  57. package/dist/apps/chat-ui/assets/dylan-O-V5Dw5W.js +1 -0
  58. package/dist/apps/chat-ui/assets/ebnf-SPmdBkvT.js +1 -0
  59. package/dist/apps/chat-ui/assets/ecl-ChfCttfI.js +1 -0
  60. package/dist/apps/chat-ui/assets/eiffel-cB9EbjeN.js +1 -0
  61. package/dist/apps/chat-ui/assets/elm-BTiVflBU.js +1 -0
  62. package/dist/apps/chat-ui/assets/erlang-egf0TXFm.js +1 -0
  63. package/dist/apps/chat-ui/assets/factor-C2tAxNob.js +1 -0
  64. package/dist/apps/chat-ui/assets/fcl-BiCjh1tj.js +1 -0
  65. package/dist/apps/chat-ui/assets/forth-C4kDGW6u.js +1 -0
  66. package/dist/apps/chat-ui/assets/fortran-DzkLaPnd.js +1 -0
  67. package/dist/apps/chat-ui/assets/gas-DMOxskQF.js +1 -0
  68. package/dist/apps/chat-ui/assets/gherkin-BPxBpp-k.js +1 -0
  69. package/dist/apps/chat-ui/assets/groovy-CkEnc0ZY.js +1 -0
  70. package/dist/apps/chat-ui/assets/haskell-Dadpo9-w.js +1 -0
  71. package/dist/apps/chat-ui/assets/haxe-CDNZL9MW.js +1 -0
  72. package/dist/apps/chat-ui/assets/http-jy9Zxxt3.js +1 -0
  73. package/dist/apps/chat-ui/assets/idl-CGSB6iiy.js +1 -0
  74. package/dist/apps/chat-ui/assets/index-BdcqTugD.js +151 -0
  75. package/dist/apps/chat-ui/assets/index-Dk-opWl3.css +1 -0
  76. package/dist/apps/chat-ui/assets/javascript-DSlzRUd8.js +1 -0
  77. package/dist/apps/chat-ui/assets/julia-DTiF9v6R.js +1 -0
  78. package/dist/apps/chat-ui/assets/livescript-Ci8Xxna6.js +1 -0
  79. package/dist/apps/chat-ui/assets/lua-eVxIrt9t.js +1 -0
  80. package/dist/apps/chat-ui/assets/mathematica-Da3grj36.js +1 -0
  81. package/dist/apps/chat-ui/assets/mbox-BWBMSafM.js +1 -0
  82. package/dist/apps/chat-ui/assets/mirc-CtHu9S1B.js +1 -0
  83. package/dist/apps/chat-ui/assets/mllike-wTFlPWXS.js +1 -0
  84. package/dist/apps/chat-ui/assets/modelica-cKbQ0UXu.js +1 -0
  85. package/dist/apps/chat-ui/assets/mscgen-C5pXQCMK.js +1 -0
  86. package/dist/apps/chat-ui/assets/mumps-CKBHkOQq.js +1 -0
  87. package/dist/apps/chat-ui/assets/nginx-B00AiQel.js +1 -0
  88. package/dist/apps/chat-ui/assets/nsis-SMDwKltR.js +1 -0
  89. package/dist/apps/chat-ui/assets/ntriples-B_36EBV0.js +1 -0
  90. package/dist/apps/chat-ui/assets/octave-BXPjzAif.js +1 -0
  91. package/dist/apps/chat-ui/assets/oz-Dedpat1M.js +1 -0
  92. package/dist/apps/chat-ui/assets/pascal-CMcUg72K.js +1 -0
  93. package/dist/apps/chat-ui/assets/perl-DoVTbnzt.js +1 -0
  94. package/dist/apps/chat-ui/assets/pig-CULXT1YV.js +1 -0
  95. package/dist/apps/chat-ui/assets/powershell-Cv5Uhf6b.js +1 -0
  96. package/dist/apps/chat-ui/assets/properties-CQ1C2P-M.js +1 -0
  97. package/dist/apps/chat-ui/assets/protobuf-SRlvzrl6.js +1 -0
  98. package/dist/apps/chat-ui/assets/pug-Bo3wfL-f.js +1 -0
  99. package/dist/apps/chat-ui/assets/puppet-ClSqCGj6.js +1 -0
  100. package/dist/apps/chat-ui/assets/python-C2_X1GpX.js +1 -0
  101. package/dist/apps/chat-ui/assets/q-B_6Gdyzl.js +1 -0
  102. package/dist/apps/chat-ui/assets/r-BD07NGED.js +1 -0
  103. package/dist/apps/chat-ui/assets/rolldown-runtime-S-ySWqyJ.js +1 -0
  104. package/dist/apps/chat-ui/assets/rpm-CRu5Z2Jl.js +1 -0
  105. package/dist/apps/chat-ui/assets/ruby-dZPnOz8h.js +1 -0
  106. package/dist/apps/chat-ui/assets/sas-S2t8_sDI.js +1 -0
  107. package/dist/apps/chat-ui/assets/scheme-WcyFWLW2.js +1 -0
  108. package/dist/apps/chat-ui/assets/shell-DUelnYSh.js +1 -0
  109. package/dist/apps/chat-ui/assets/sieve-jDjlVhNh.js +1 -0
  110. package/dist/apps/chat-ui/assets/simple-mode-CL04yRVp.js +1 -0
  111. package/dist/apps/chat-ui/assets/smalltalk-ddWDYy10.js +1 -0
  112. package/dist/apps/chat-ui/assets/solr-C7rQhLuW.js +1 -0
  113. package/dist/apps/chat-ui/assets/sparql--fPCCgVd.js +1 -0
  114. package/dist/apps/chat-ui/assets/spreadsheet-DjthqD5G.js +1 -0
  115. package/dist/apps/chat-ui/assets/sql-D_dieYbr.js +1 -0
  116. package/dist/apps/chat-ui/assets/stex-rHcFYcA0.js +1 -0
  117. package/dist/apps/chat-ui/assets/stylus-DxF70RNr.js +1 -0
  118. package/dist/apps/chat-ui/assets/swift-T0hDoOb-.js +1 -0
  119. package/dist/apps/chat-ui/assets/tcl-Dlzy1mPk.js +1 -0
  120. package/dist/apps/chat-ui/assets/textile-Dy5rFZe5.js +1 -0
  121. package/dist/apps/chat-ui/assets/tiddlywiki-DQP1OymS.js +1 -0
  122. package/dist/apps/chat-ui/assets/tiki-0vOj3DB2.js +1 -0
  123. package/dist/apps/chat-ui/assets/toml-DEltN0lI.js +1 -0
  124. package/dist/apps/chat-ui/assets/troff-CRbBpEqY.js +1 -0
  125. package/dist/apps/chat-ui/assets/ttcn-M5q1nLKg.js +1 -0
  126. package/dist/apps/chat-ui/assets/ttcn-cfg-Rmw9NWq9.js +1 -0
  127. package/dist/apps/chat-ui/assets/turtle-BCDWhJK0.js +1 -0
  128. package/dist/apps/chat-ui/assets/vb-QQ7LGlOz.js +1 -0
  129. package/dist/apps/chat-ui/assets/vbscript-BiSEdUzz.js +1 -0
  130. package/dist/apps/chat-ui/assets/velocity-CzMg5_6w.js +1 -0
  131. package/dist/apps/chat-ui/assets/verilog-BJOO83gk.js +1 -0
  132. package/dist/apps/chat-ui/assets/vhdl-ed4zAZAA.js +1 -0
  133. package/dist/apps/chat-ui/assets/webidl-Ddy6hbV6.js +1 -0
  134. package/dist/apps/chat-ui/assets/xquery-Bw1zwhh6.js +1 -0
  135. package/dist/apps/chat-ui/assets/yacas-DZdTXy3s.js +1 -0
  136. package/dist/apps/chat-ui/assets/z80-DMG02_YV.js +1 -0
  137. package/dist/apps/chat-ui/index.html +15 -0
  138. package/dist/apps/context-files-ui/assets/apl-14BqhLYK.js +1 -0
  139. package/dist/apps/context-files-ui/assets/asciiarmor-WLvjqI7d.js +1 -0
  140. package/dist/apps/context-files-ui/assets/asn1-Bg4FbdCg.js +1 -0
  141. package/dist/apps/context-files-ui/assets/asterisk-B2MO-X4d.js +1 -0
  142. package/dist/apps/context-files-ui/assets/brainfuck-CV9kufud.js +1 -0
  143. package/dist/apps/context-files-ui/assets/clike-CjmcUpt6.js +1 -0
  144. package/dist/apps/context-files-ui/assets/clojure-De3QGfx6.js +1 -0
  145. package/dist/apps/context-files-ui/assets/cmake-i2VDNaRq.js +1 -0
  146. package/dist/apps/context-files-ui/assets/cobol-BwO6DF08.js +1 -0
  147. package/dist/apps/context-files-ui/assets/coffeescript-BtivDvRz.js +1 -0
  148. package/dist/apps/context-files-ui/assets/commonlisp-DFkEQdLP.js +1 -0
  149. package/dist/apps/context-files-ui/assets/crystal-CU0NkcVL.js +1 -0
  150. package/dist/apps/context-files-ui/assets/css-CbMZAQ1W.js +1 -0
  151. package/dist/apps/context-files-ui/assets/cypher-Dke5QOzv.js +1 -0
  152. package/dist/apps/context-files-ui/assets/d-TPqSVaHM.js +1 -0
  153. package/dist/apps/context-files-ui/assets/diff-B365LSoZ.js +1 -0
  154. package/dist/apps/context-files-ui/assets/dist-B5PTVnox.js +1 -0
  155. package/dist/apps/context-files-ui/assets/dist-B5ZAfwf5.js +1 -0
  156. package/dist/apps/context-files-ui/assets/dist-BJW3917N.js +11 -0
  157. package/dist/apps/context-files-ui/assets/dist-BkUONE3N.js +1 -0
  158. package/dist/apps/context-files-ui/assets/dist-CKQF1zEu.js +1 -0
  159. package/dist/apps/context-files-ui/assets/dist-CwbH_3RN.js +1 -0
  160. package/dist/apps/context-files-ui/assets/dist-CxRLRmMx.js +2 -0
  161. package/dist/apps/context-files-ui/assets/dist-D1KyNDg5.js +13 -0
  162. package/dist/apps/context-files-ui/assets/dist-DFi2YGux.js +1 -0
  163. package/dist/apps/context-files-ui/assets/dist-DKoyMSNr.js +1 -0
  164. package/dist/apps/context-files-ui/assets/dist-DLMjd26T.js +1 -0
  165. package/dist/apps/context-files-ui/assets/dist-DQXzt2Ng.js +1 -0
  166. package/dist/apps/context-files-ui/assets/dist-DotDq_kD.js +1 -0
  167. package/dist/apps/context-files-ui/assets/dist-DyfSeBMu.js +1 -0
  168. package/dist/apps/context-files-ui/assets/dist-MyZgX9K2.js +9 -0
  169. package/dist/apps/context-files-ui/assets/dist-QQuDy4KA.js +1 -0
  170. package/dist/apps/context-files-ui/assets/dist-YwR9dpb-.js +1 -0
  171. package/dist/apps/context-files-ui/assets/dist-dTBsFYAl.js +1 -0
  172. package/dist/apps/context-files-ui/assets/dockerfile-CJb2sekW.js +1 -0
  173. package/dist/apps/context-files-ui/assets/dtd-CBMymJ7O.js +1 -0
  174. package/dist/apps/context-files-ui/assets/dylan-08Azy1NK.js +1 -0
  175. package/dist/apps/context-files-ui/assets/ebnf-Dkum_1J8.js +1 -0
  176. package/dist/apps/context-files-ui/assets/ecl-dhxjHL8y.js +1 -0
  177. package/dist/apps/context-files-ui/assets/eiffel-C446m6dI.js +1 -0
  178. package/dist/apps/context-files-ui/assets/elm-po1E9de0.js +1 -0
  179. package/dist/apps/context-files-ui/assets/erlang-BD5LkVkR.js +1 -0
  180. package/dist/apps/context-files-ui/assets/factor-B2EMQZkP.js +1 -0
  181. package/dist/apps/context-files-ui/assets/fcl-DkEOamHd.js +1 -0
  182. package/dist/apps/context-files-ui/assets/forth-dCg2_HVB.js +1 -0
  183. package/dist/apps/context-files-ui/assets/fortran-3ZpXLFh1.js +1 -0
  184. package/dist/apps/context-files-ui/assets/gas-DMmxLZRI.js +1 -0
  185. package/dist/apps/context-files-ui/assets/gherkin-DUSFg2R6.js +1 -0
  186. package/dist/apps/context-files-ui/assets/groovy-Cmduloe1.js +1 -0
  187. package/dist/apps/context-files-ui/assets/haskell-Cyr255R9.js +1 -0
  188. package/dist/apps/context-files-ui/assets/haxe-BJVKtprM.js +1 -0
  189. package/dist/apps/context-files-ui/assets/http-DszHFpc-.js +1 -0
  190. package/dist/apps/context-files-ui/assets/idl-Cati9Nrv.js +1 -0
  191. package/dist/apps/context-files-ui/assets/index-BwRDoHMC.css +1 -0
  192. package/dist/apps/context-files-ui/assets/index-GwvjXytt.js +202 -0
  193. package/dist/apps/context-files-ui/assets/javascript-C5pDVaoP.js +1 -0
  194. package/dist/apps/context-files-ui/assets/julia-DlqY1cTU.js +1 -0
  195. package/dist/apps/context-files-ui/assets/livescript-C6p8-2W1.js +1 -0
  196. package/dist/apps/context-files-ui/assets/lua-BxuTHaF7.js +1 -0
  197. package/dist/apps/context-files-ui/assets/mathematica-nDHZUMJT.js +1 -0
  198. package/dist/apps/context-files-ui/assets/mbox-DAaR0Hcz.js +1 -0
  199. package/dist/apps/context-files-ui/assets/mirc-CCA0FRfl.js +1 -0
  200. package/dist/apps/context-files-ui/assets/mllike-Cw3Iccsb.js +1 -0
  201. package/dist/apps/context-files-ui/assets/modelica-Czx80fNR.js +1 -0
  202. package/dist/apps/context-files-ui/assets/mscgen-BmfuTbzG.js +1 -0
  203. package/dist/apps/context-files-ui/assets/mumps-Ds_ZaumL.js +1 -0
  204. package/dist/apps/context-files-ui/assets/nginx-D9M2PQ4U.js +1 -0
  205. package/dist/apps/context-files-ui/assets/nsis-DOo3SJmd.js +1 -0
  206. package/dist/apps/context-files-ui/assets/ntriples-DLHGTvHs.js +1 -0
  207. package/dist/apps/context-files-ui/assets/octave-8jj96JiC.js +1 -0
  208. package/dist/apps/context-files-ui/assets/oz-BmMq7iC4.js +1 -0
  209. package/dist/apps/context-files-ui/assets/pascal-BgMr6XpT.js +1 -0
  210. package/dist/apps/context-files-ui/assets/perl-D6YJObi_.js +1 -0
  211. package/dist/apps/context-files-ui/assets/pig-nx7uchs8.js +1 -0
  212. package/dist/apps/context-files-ui/assets/powershell-B4IPkVxR.js +1 -0
  213. package/dist/apps/context-files-ui/assets/properties-CoavQdLC.js +1 -0
  214. package/dist/apps/context-files-ui/assets/protobuf-D5EWhcmc.js +1 -0
  215. package/dist/apps/context-files-ui/assets/pug-QU72BPAa.js +1 -0
  216. package/dist/apps/context-files-ui/assets/puppet-B_0GFuyD.js +1 -0
  217. package/dist/apps/context-files-ui/assets/python-Cs7sNzy_.js +1 -0
  218. package/dist/apps/context-files-ui/assets/q-BIB9pPtI.js +1 -0
  219. package/dist/apps/context-files-ui/assets/r-CN5s4f3o.js +1 -0
  220. package/dist/apps/context-files-ui/assets/rpm-Ct_Ck8mQ.js +1 -0
  221. package/dist/apps/context-files-ui/assets/ruby-BVPradRk.js +1 -0
  222. package/dist/apps/context-files-ui/assets/sas-DN4j74IF.js +1 -0
  223. package/dist/apps/context-files-ui/assets/scheme-CvNgHAnh.js +1 -0
  224. package/dist/apps/context-files-ui/assets/shell-BjiMLAaM.js +1 -0
  225. package/dist/apps/context-files-ui/assets/sieve-C2U1O5Z4.js +1 -0
  226. package/dist/apps/context-files-ui/assets/simple-mode-DnMbQuKW.js +1 -0
  227. package/dist/apps/context-files-ui/assets/smalltalk-DkYwYufV.js +1 -0
  228. package/dist/apps/context-files-ui/assets/solr-BopnSD-v.js +1 -0
  229. package/dist/apps/context-files-ui/assets/sparql-Cpg3YQfd.js +1 -0
  230. package/dist/apps/context-files-ui/assets/spreadsheet-kRxtVt9J.js +1 -0
  231. package/dist/apps/context-files-ui/assets/sql-DYI2GwJR.js +1 -0
  232. package/dist/apps/context-files-ui/assets/stex-BCRT8IJ3.js +1 -0
  233. package/dist/apps/context-files-ui/assets/stylus-CARoeVE9.js +1 -0
  234. package/dist/apps/context-files-ui/assets/swift-DKNaLAK6.js +1 -0
  235. package/dist/apps/context-files-ui/assets/tcl-CQyXkgMH.js +1 -0
  236. package/dist/apps/context-files-ui/assets/textile-Yg_UWn-t.js +1 -0
  237. package/dist/apps/context-files-ui/assets/tiddlywiki-dqVbkfX4.js +1 -0
  238. package/dist/apps/context-files-ui/assets/tiki-CC_ic8g0.js +1 -0
  239. package/dist/apps/context-files-ui/assets/toml-B7gGzVkJ.js +1 -0
  240. package/dist/apps/context-files-ui/assets/troff-Bq3z6oAu.js +1 -0
  241. package/dist/apps/context-files-ui/assets/ttcn-GvRgs2AT.js +1 -0
  242. package/dist/apps/context-files-ui/assets/ttcn-cfg-CGCXz7Vo.js +1 -0
  243. package/dist/apps/context-files-ui/assets/turtle-CwIpz2yy.js +1 -0
  244. package/dist/apps/context-files-ui/assets/vb-BmcHUM2C.js +1 -0
  245. package/dist/apps/context-files-ui/assets/vbscript-Cs9dylre.js +1 -0
  246. package/dist/apps/context-files-ui/assets/velocity-CBWU0VCy.js +1 -0
  247. package/dist/apps/context-files-ui/assets/verilog-DVCHmufx.js +1 -0
  248. package/dist/apps/context-files-ui/assets/vhdl-BGDk4f1d.js +1 -0
  249. package/dist/apps/context-files-ui/assets/webidl-egXQEWlC.js +1 -0
  250. package/dist/apps/context-files-ui/assets/xquery-5f0hn7cg.js +1 -0
  251. package/dist/apps/context-files-ui/assets/yacas-DNs9XkmQ.js +1 -0
  252. package/dist/apps/context-files-ui/assets/z80-B7Dfb4UO.js +1 -0
  253. package/dist/apps/context-files-ui/index.html +14 -0
  254. package/dist/auth/better-auth.js +129 -0
  255. package/dist/auth/types.js +14 -0
  256. package/dist/bin/pibo.js +3 -0
  257. package/dist/channels/types.js +1 -0
  258. package/dist/cli-errors.js +18 -0
  259. package/dist/cli.js +264 -0
  260. package/dist/config/config.js +167 -0
  261. package/dist/core/base-prompt.js +104 -0
  262. package/dist/core/codex-compat.js +44 -0
  263. package/dist/core/compaction-prompt.js +258 -0
  264. package/dist/core/events.js +1 -0
  265. package/dist/core/profiles.js +138 -0
  266. package/dist/core/routed-session.js +538 -0
  267. package/dist/core/runtime.js +323 -0
  268. package/dist/core/session-router.js +437 -0
  269. package/dist/core/system-prompt-template.js +56 -0
  270. package/dist/core/thinking.js +9 -0
  271. package/dist/core/workspace.js +5 -0
  272. package/dist/debug/events.js +92 -0
  273. package/dist/debug/index.js +631 -0
  274. package/dist/debug/session.js +200 -0
  275. package/dist/debug/sql.js +238 -0
  276. package/dist/debug/stores.js +49 -0
  277. package/dist/debug/trace.js +245 -0
  278. package/dist/env.js +32 -0
  279. package/dist/gateway/client.js +200 -0
  280. package/dist/gateway/protocol.js +46 -0
  281. package/dist/gateway/request.js +146 -0
  282. package/dist/gateway/server.js +221 -0
  283. package/dist/gateway/tool.js +69 -0
  284. package/dist/gateway/web.js +80 -0
  285. package/dist/index.js +23 -0
  286. package/dist/local/client.js +77 -0
  287. package/dist/local/extension.js +548 -0
  288. package/dist/local/tui.js +25 -0
  289. package/dist/mcp/agent-context.js +123 -0
  290. package/dist/mcp/client.js +332 -0
  291. package/dist/mcp/commands/call.js +146 -0
  292. package/dist/mcp/commands/grep.js +145 -0
  293. package/dist/mcp/commands/info.js +71 -0
  294. package/dist/mcp/commands/list.js +94 -0
  295. package/dist/mcp/config-command.js +217 -0
  296. package/dist/mcp/config.js +440 -0
  297. package/dist/mcp/daemon-client.js +266 -0
  298. package/dist/mcp/daemon.js +327 -0
  299. package/dist/mcp/errors.js +287 -0
  300. package/dist/mcp/index.js +431 -0
  301. package/dist/mcp/output.js +171 -0
  302. package/dist/mcp/python-runtime.js +131 -0
  303. package/dist/mcp/registry.js +116 -0
  304. package/dist/mcp/version.js +5 -0
  305. package/dist/pi-packages/cli.js +92 -0
  306. package/dist/pi-packages/installer.js +70 -0
  307. package/dist/pi-packages/metadata.js +231 -0
  308. package/dist/pi-packages/runtime.js +61 -0
  309. package/dist/pi-packages/store.js +175 -0
  310. package/dist/pi-packages/types.js +1 -0
  311. package/dist/plugins/better-auth.js +11 -0
  312. package/dist/plugins/builtin.js +249 -0
  313. package/dist/plugins/chat-web.js +11 -0
  314. package/dist/plugins/codex-compat.js +72 -0
  315. package/dist/plugins/context-files-store.js +354 -0
  316. package/dist/plugins/context-files.js +999 -0
  317. package/dist/plugins/core-tools.js +94 -0
  318. package/dist/plugins/example.js +67 -0
  319. package/dist/plugins/registry.js +368 -0
  320. package/dist/plugins/remote-agent.js +9 -0
  321. package/dist/plugins/types.js +1 -0
  322. package/dist/plugins/web.js +11 -0
  323. package/dist/reliability/store.js +759 -0
  324. package/dist/remote/channel.js +176 -0
  325. package/dist/remote/client.js +92 -0
  326. package/dist/remote/examples/tui-controller.js +263 -0
  327. package/dist/remote/protocol.js +55 -0
  328. package/dist/remote/session-client.js +189 -0
  329. package/dist/runs/registry.js +323 -0
  330. package/dist/runs/tools.js +185 -0
  331. package/dist/sessions/bindings.js +41 -0
  332. package/dist/sessions/sqlite-store.js +154 -0
  333. package/dist/sessions/store.js +125 -0
  334. package/dist/shared/trace-order.js +83 -0
  335. package/dist/subagents/tool.js +63 -0
  336. package/dist/tools/browser-use-cdp.js +207 -0
  337. package/dist/tools/browser-use-leases.js +338 -0
  338. package/dist/tools/browser-use-wrapper.js +338 -0
  339. package/dist/tools/codex-compat.js +85 -0
  340. package/dist/tools/desktop-env.js +90 -0
  341. package/dist/tools/guides.js +276 -0
  342. package/dist/tools/index.js +366 -0
  343. package/dist/tools/python-runtime.js +154 -0
  344. package/dist/tools/registry.js +107 -0
  345. package/dist/tools/web-search.js +137 -0
  346. package/dist/web/auth.js +10 -0
  347. package/dist/web/channel.js +151 -0
  348. package/dist/web/http.js +110 -0
  349. package/dist/web/types.js +1 -0
  350. package/package.json +74 -0
  351. package/src/mcp/LICENSE.mcp-cli +21 -0
@@ -0,0 +1,321 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { mkdirSync } from "node:fs";
3
+ import { dirname, resolve } from "node:path";
4
+ import { DatabaseSync } from "node:sqlite";
5
+ export const CHAT_ROOM_ID_METADATA_KEY = "chatRoomId";
6
+ const CHAT_ROOM_ARCHIVED_AT_METADATA_KEY = "chatRoomArchivedAt";
7
+ const CHAT_ROOM_WORKSPACE_METADATA_KEY = "workspace";
8
+ export class PiboRoomStore {
9
+ db;
10
+ constructor(path) {
11
+ const resolvedPath = path === ":memory:" ? path : resolve(path);
12
+ if (resolvedPath !== ":memory:") {
13
+ mkdirSync(dirname(resolvedPath), { recursive: true });
14
+ }
15
+ this.db = new DatabaseSync(resolvedPath);
16
+ this.db.exec("PRAGMA busy_timeout = 5000");
17
+ if (resolvedPath !== ":memory:")
18
+ this.db.exec("PRAGMA journal_mode = WAL");
19
+ this.db.exec(`
20
+ CREATE TABLE IF NOT EXISTS pibo_rooms (
21
+ id TEXT PRIMARY KEY,
22
+ owner_scope TEXT NOT NULL,
23
+ name TEXT NOT NULL,
24
+ topic TEXT,
25
+ type TEXT NOT NULL,
26
+ parent_room_id TEXT,
27
+ created_at TEXT NOT NULL,
28
+ updated_at TEXT NOT NULL,
29
+ retention_policy_id TEXT,
30
+ metadata_json TEXT,
31
+ FOREIGN KEY(parent_room_id) REFERENCES pibo_rooms(id)
32
+ );
33
+
34
+ CREATE TABLE IF NOT EXISTS pibo_room_members (
35
+ room_id TEXT NOT NULL,
36
+ principal_id TEXT NOT NULL,
37
+ role TEXT NOT NULL,
38
+ joined_at TEXT NOT NULL,
39
+ last_read_stream_id INTEGER,
40
+ PRIMARY KEY(room_id, principal_id),
41
+ FOREIGN KEY(room_id) REFERENCES pibo_rooms(id)
42
+ );
43
+
44
+ CREATE INDEX IF NOT EXISTS idx_pibo_rooms_owner
45
+ ON pibo_rooms(owner_scope, updated_at);
46
+ CREATE INDEX IF NOT EXISTS idx_pibo_rooms_parent
47
+ ON pibo_rooms(parent_room_id, updated_at);
48
+ CREATE INDEX IF NOT EXISTS idx_pibo_room_members_principal
49
+ ON pibo_room_members(principal_id, room_id);
50
+ `);
51
+ }
52
+ createRoom(input) {
53
+ const now = new Date().toISOString();
54
+ const room = {
55
+ id: input.id ?? `room_${randomUUID()}`,
56
+ ownerScope: input.ownerScope,
57
+ name: input.name,
58
+ topic: input.topic,
59
+ workspace: roomWorkspaceFromMetadata(input.metadata),
60
+ type: input.type ?? "chat",
61
+ parentRoomId: input.parentRoomId,
62
+ createdAt: now,
63
+ updatedAt: now,
64
+ retentionPolicyId: input.retentionPolicyId,
65
+ metadata: input.metadata ?? {},
66
+ };
67
+ this.db
68
+ .prepare(`
69
+ INSERT INTO pibo_rooms (
70
+ id,
71
+ owner_scope,
72
+ name,
73
+ topic,
74
+ type,
75
+ parent_room_id,
76
+ created_at,
77
+ updated_at,
78
+ retention_policy_id,
79
+ metadata_json
80
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
81
+ `)
82
+ .run(room.id, room.ownerScope, room.name, room.topic ?? null, room.type, room.parentRoomId ?? null, room.createdAt, room.updatedAt, room.retentionPolicyId ?? null, JSON.stringify(room.metadata));
83
+ return room;
84
+ }
85
+ updateRoom(id, input) {
86
+ const existing = this.getRoom(id);
87
+ if (!existing)
88
+ return undefined;
89
+ const updated = {
90
+ ...existing,
91
+ name: input.name ?? existing.name,
92
+ topic: input.topic === null ? undefined : input.topic ?? existing.topic,
93
+ workspace: roomWorkspaceFromMetadata(input.metadata ?? existing.metadata),
94
+ parentRoomId: input.parentRoomId === null ? undefined : input.parentRoomId ?? existing.parentRoomId,
95
+ retentionPolicyId: input.retentionPolicyId === null ? undefined : input.retentionPolicyId ?? existing.retentionPolicyId,
96
+ metadata: input.metadata ?? existing.metadata,
97
+ updatedAt: new Date().toISOString(),
98
+ };
99
+ this.db
100
+ .prepare(`
101
+ UPDATE pibo_rooms SET
102
+ name = ?,
103
+ topic = ?,
104
+ parent_room_id = ?,
105
+ updated_at = ?,
106
+ retention_policy_id = ?,
107
+ metadata_json = ?
108
+ WHERE id = ?
109
+ `)
110
+ .run(updated.name, updated.topic ?? null, updated.parentRoomId ?? null, updated.updatedAt, updated.retentionPolicyId ?? null, JSON.stringify(updated.metadata), id);
111
+ return this.getRoom(id);
112
+ }
113
+ deleteRooms(ids) {
114
+ if (!ids.length)
115
+ return 0;
116
+ const placeholders = ids.map(() => "?").join(", ");
117
+ this.db.prepare(`DELETE FROM pibo_room_members WHERE room_id IN (${placeholders})`).run(...ids);
118
+ const result = this.db.prepare(`DELETE FROM pibo_rooms WHERE id IN (${placeholders})`).run(...ids);
119
+ return Number(result.changes ?? 0);
120
+ }
121
+ getRoom(id) {
122
+ const row = this.db.prepare("SELECT * FROM pibo_rooms WHERE id = ?").get(id);
123
+ return row ? roomFromRow(row) : undefined;
124
+ }
125
+ listRooms(ownerScope) {
126
+ return this.db
127
+ .prepare("SELECT * FROM pibo_rooms WHERE owner_scope = ? ORDER BY updated_at DESC, id ASC")
128
+ .all(ownerScope).map(roomFromRow);
129
+ }
130
+ listRoomTree(ownerScope) {
131
+ const rooms = this.listRooms(ownerScope);
132
+ const byId = new Map();
133
+ for (const room of rooms)
134
+ byId.set(room.id, { ...room, children: [] });
135
+ const roots = [];
136
+ for (const node of byId.values()) {
137
+ const parent = node.parentRoomId ? byId.get(node.parentRoomId) : undefined;
138
+ if (parent) {
139
+ parent.children.push(node);
140
+ }
141
+ else {
142
+ roots.push(node);
143
+ }
144
+ }
145
+ sortRoomNodes(roots);
146
+ return roots;
147
+ }
148
+ listRoomSubtree(roomId) {
149
+ const root = this.getRoom(roomId);
150
+ if (!root)
151
+ return [];
152
+ const rooms = this.listRooms(root.ownerScope);
153
+ const byParent = new Map();
154
+ for (const room of rooms) {
155
+ if (!room.parentRoomId)
156
+ continue;
157
+ const children = byParent.get(room.parentRoomId) ?? [];
158
+ children.push(room);
159
+ byParent.set(room.parentRoomId, children);
160
+ }
161
+ const result = [];
162
+ const visit = (room) => {
163
+ result.push(room);
164
+ for (const child of byParent.get(room.id) ?? [])
165
+ visit(child);
166
+ };
167
+ visit(root);
168
+ return result;
169
+ }
170
+ ensureDefaultRoom(input) {
171
+ const existing = this.listRooms(input.ownerScope).find((room) => room.metadata.default === true);
172
+ if (existing) {
173
+ this.ensureMember({
174
+ roomId: existing.id,
175
+ principalId: input.principalId,
176
+ role: "owner",
177
+ });
178
+ return existing;
179
+ }
180
+ const room = this.createRoom({
181
+ ownerScope: input.ownerScope,
182
+ name: input.name ?? "Personal Chat",
183
+ type: "chat",
184
+ metadata: { default: true },
185
+ });
186
+ this.ensureMember({ roomId: room.id, principalId: input.principalId, role: "owner" });
187
+ return room;
188
+ }
189
+ ensureMember(input) {
190
+ const now = new Date().toISOString();
191
+ this.db
192
+ .prepare(`
193
+ INSERT INTO pibo_room_members (room_id, principal_id, role, joined_at, last_read_stream_id)
194
+ VALUES (?, ?, ?, ?, NULL)
195
+ ON CONFLICT(room_id, principal_id) DO UPDATE SET
196
+ role = CASE
197
+ WHEN pibo_room_members.role = 'owner' THEN pibo_room_members.role
198
+ ELSE excluded.role
199
+ END
200
+ `)
201
+ .run(input.roomId, input.principalId, input.role, now);
202
+ const member = this.getMember(input.roomId, input.principalId);
203
+ if (!member)
204
+ throw new Error(`Failed to create room member for "${input.roomId}"`);
205
+ return member;
206
+ }
207
+ getMember(roomId, principalId) {
208
+ const row = this.db
209
+ .prepare("SELECT * FROM pibo_room_members WHERE room_id = ? AND principal_id = ?")
210
+ .get(roomId, principalId);
211
+ return row ? memberFromRow(row) : undefined;
212
+ }
213
+ updateReadCursor(roomId, principalId, lastReadStreamId) {
214
+ this.db
215
+ .prepare(`
216
+ UPDATE pibo_room_members
217
+ SET last_read_stream_id = MAX(COALESCE(last_read_stream_id, 0), ?)
218
+ WHERE room_id = ? AND principal_id = ?
219
+ `)
220
+ .run(lastReadStreamId, roomId, principalId);
221
+ return this.getMember(roomId, principalId);
222
+ }
223
+ requireRoomAccess(roomId, principalId, action = "read") {
224
+ const room = this.getRoom(roomId);
225
+ const member = room ? this.getMember(roomId, principalId) : undefined;
226
+ if (!room || !member)
227
+ throw new Error("Room is not available for this user");
228
+ if (action === "write" && member.role === "viewer")
229
+ throw new Error("Room write access is required");
230
+ if (action === "admin" && member.role !== "owner" && member.role !== "admin") {
231
+ throw new Error("Room admin access is required");
232
+ }
233
+ return room;
234
+ }
235
+ close() {
236
+ this.db.close();
237
+ }
238
+ }
239
+ export function createDefaultPiboRoomStore(cwd = process.cwd()) {
240
+ return new PiboRoomStore(resolve(cwd, ".pibo/web-chat.sqlite"));
241
+ }
242
+ export function chatRoomIdFromMetadata(metadata) {
243
+ const value = metadata?.[CHAT_ROOM_ID_METADATA_KEY];
244
+ return typeof value === "string" && value.length > 0 ? value : undefined;
245
+ }
246
+ export function withChatRoomId(metadata, roomId) {
247
+ return { ...(metadata ?? {}), [CHAT_ROOM_ID_METADATA_KEY]: roomId };
248
+ }
249
+ export function isDefaultPiboRoom(room) {
250
+ return room.metadata.default === true;
251
+ }
252
+ export function isPiboRoomArchived(room) {
253
+ return typeof room.metadata[CHAT_ROOM_ARCHIVED_AT_METADATA_KEY] === "string";
254
+ }
255
+ export function roomWorkspaceFromMetadata(metadata) {
256
+ const value = metadata?.[CHAT_ROOM_WORKSPACE_METADATA_KEY];
257
+ return typeof value === "string" && value.length > 0 ? value : undefined;
258
+ }
259
+ export function withPiboRoomArchived(metadata, archived) {
260
+ const next = { ...(metadata ?? {}) };
261
+ if (archived) {
262
+ next[CHAT_ROOM_ARCHIVED_AT_METADATA_KEY] = new Date().toISOString();
263
+ }
264
+ else {
265
+ delete next[CHAT_ROOM_ARCHIVED_AT_METADATA_KEY];
266
+ }
267
+ return next;
268
+ }
269
+ export function withPiboRoomWorkspace(metadata, workspace) {
270
+ const next = { ...(metadata ?? {}) };
271
+ if (workspace) {
272
+ next[CHAT_ROOM_WORKSPACE_METADATA_KEY] = workspace;
273
+ }
274
+ else {
275
+ delete next[CHAT_ROOM_WORKSPACE_METADATA_KEY];
276
+ }
277
+ return next;
278
+ }
279
+ function roomFromRow(row) {
280
+ const metadata = parseMetadata(row.metadata_json);
281
+ return {
282
+ id: row.id,
283
+ ownerScope: row.owner_scope,
284
+ name: row.name,
285
+ topic: row.topic ?? undefined,
286
+ workspace: roomWorkspaceFromMetadata(metadata),
287
+ type: row.type,
288
+ parentRoomId: row.parent_room_id ?? undefined,
289
+ createdAt: row.created_at,
290
+ updatedAt: row.updated_at,
291
+ retentionPolicyId: row.retention_policy_id ?? undefined,
292
+ metadata,
293
+ };
294
+ }
295
+ function memberFromRow(row) {
296
+ return {
297
+ roomId: row.room_id,
298
+ principalId: row.principal_id,
299
+ role: row.role,
300
+ joinedAt: row.joined_at,
301
+ lastReadStreamId: row.last_read_stream_id ?? undefined,
302
+ };
303
+ }
304
+ function parseMetadata(value) {
305
+ if (!value)
306
+ return {};
307
+ try {
308
+ const parsed = JSON.parse(value);
309
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed))
310
+ return {};
311
+ return parsed;
312
+ }
313
+ catch {
314
+ return {};
315
+ }
316
+ }
317
+ function sortRoomNodes(nodes) {
318
+ nodes.sort((left, right) => right.updatedAt.localeCompare(left.updatedAt) || left.name.localeCompare(right.name));
319
+ for (const node of nodes)
320
+ sortRoomNodes(node.children);
321
+ }
@@ -0,0 +1,14 @@
1
+ const CHAT_WEB_ARCHIVED_AT_KEY = "chatWebArchivedAt";
2
+ export function isChatWebSessionArchived(session) {
3
+ return typeof session.metadata?.[CHAT_WEB_ARCHIVED_AT_KEY] === "string";
4
+ }
5
+ export function withChatWebArchived(metadata, archived) {
6
+ const next = { ...(metadata ?? {}) };
7
+ if (archived) {
8
+ next[CHAT_WEB_ARCHIVED_AT_KEY] = new Date().toISOString();
9
+ }
10
+ else {
11
+ delete next[CHAT_WEB_ARCHIVED_AT_KEY];
12
+ }
13
+ return next;
14
+ }
@@ -0,0 +1,122 @@
1
+ export function createChatStreamState() {
2
+ return {
3
+ textMessageIds: new Set(),
4
+ reasoningMessageIds: new Set(),
5
+ toolCallIds: new Set(),
6
+ };
7
+ }
8
+ export function chatStreamFramesFromOutputEvent(event, state) {
9
+ const eventId = "eventId" in event && typeof event.eventId === "string" ? event.eventId : undefined;
10
+ const frames = [];
11
+ const reasoningMessageId = reasoningIdFromOutputEvent(event);
12
+ switch (event.type) {
13
+ case "message_started":
14
+ if (eventId) {
15
+ frames.push({
16
+ type: "RUN_STARTED",
17
+ runId: eventId,
18
+ input: { text: event.text, source: event.source },
19
+ });
20
+ }
21
+ break;
22
+ case "message_finished":
23
+ if (eventId)
24
+ frames.push({ type: "RUN_FINISHED", runId: eventId });
25
+ break;
26
+ case "assistant_delta":
27
+ if (eventId && event.text.length > 0) {
28
+ const messageId = textMessageIdFromOutputEvent(event);
29
+ ensureTextMessageStarted(frames, state, messageId, eventId);
30
+ frames.push({ type: "TEXT_MESSAGE_CONTENT", messageId, runId: eventId, delta: event.text });
31
+ }
32
+ break;
33
+ case "assistant_message":
34
+ if (eventId) {
35
+ const messageId = textMessageIdFromOutputEvent(event);
36
+ ensureTextMessageStarted(frames, state, messageId, eventId);
37
+ frames.push({ type: "TEXT_MESSAGE_END", messageId, runId: eventId, finalText: event.text });
38
+ }
39
+ break;
40
+ case "thinking_started":
41
+ if (reasoningMessageId)
42
+ ensureReasoningStarted(frames, state, reasoningMessageId, eventId);
43
+ break;
44
+ case "thinking_delta":
45
+ if (reasoningMessageId && event.text.length > 0) {
46
+ ensureReasoningStarted(frames, state, reasoningMessageId, eventId);
47
+ frames.push({ type: "REASONING_MESSAGE_CONTENT", messageId: reasoningMessageId, runId: eventId, delta: event.text });
48
+ }
49
+ break;
50
+ case "thinking_finished":
51
+ if (reasoningMessageId) {
52
+ ensureReasoningStarted(frames, state, reasoningMessageId, eventId);
53
+ frames.push({ type: "REASONING_MESSAGE_END", messageId: reasoningMessageId, runId: eventId, finalText: event.text });
54
+ }
55
+ break;
56
+ case "tool_call":
57
+ ensureToolCallStarted(frames, state, event.toolCallId, event.toolName, event.args, eventId);
58
+ frames.push({ type: "TOOL_CALL_ARGS", toolCallId: event.toolCallId, args: event.args, argsComplete: event.argsComplete });
59
+ break;
60
+ case "tool_execution_started":
61
+ ensureToolCallStarted(frames, state, event.toolCallId, event.toolName, event.args, eventId);
62
+ break;
63
+ case "tool_execution_updated":
64
+ ensureToolCallStarted(frames, state, event.toolCallId, event.toolName, event.args, eventId);
65
+ break;
66
+ case "tool_execution_finished":
67
+ ensureToolCallStarted(frames, state, event.toolCallId, event.toolName, undefined, eventId);
68
+ frames.push({ type: "TOOL_CALL_RESULT", toolCallId: event.toolCallId, result: event.result, isError: event.isError });
69
+ break;
70
+ case "subagent_session":
71
+ frames.push({
72
+ type: "AGENT_DELEGATION",
73
+ toolCallId: event.toolCallId,
74
+ toolName: event.toolName,
75
+ subagentName: event.subagentName,
76
+ childPiboSessionId: event.childPiboSessionId,
77
+ threadKey: event.threadKey,
78
+ });
79
+ break;
80
+ case "execution_result":
81
+ frames.push({ type: "EXECUTION_RESULT", runId: eventId, action: event.action, result: event.result });
82
+ break;
83
+ case "session_error":
84
+ frames.push({ type: "RUN_ERROR", runId: eventId, message: event.error });
85
+ break;
86
+ default:
87
+ frames.push({ type: "RAW_EVENT", event });
88
+ break;
89
+ }
90
+ return frames;
91
+ }
92
+ function reasoningIdFromOutputEvent(event) {
93
+ if (event.type !== "thinking_started" && event.type !== "thinking_delta" && event.type !== "thinking_finished") {
94
+ return undefined;
95
+ }
96
+ if (!event.eventId)
97
+ return undefined;
98
+ const partIndex = typeof event.thinkingIndex === "number" ? event.thinkingIndex : event.contentIndex;
99
+ return typeof partIndex === "number" ? `${event.eventId}:thinking:${partIndex}` : event.eventId;
100
+ }
101
+ function textMessageIdFromOutputEvent(event) {
102
+ const partIndex = typeof event.assistantIndex === "number" ? event.assistantIndex : event.contentIndex;
103
+ return partIndex === undefined || !event.eventId ? event.eventId ?? "" : `${event.eventId}:assistant:${partIndex}`;
104
+ }
105
+ function ensureTextMessageStarted(frames, state, messageId, runId) {
106
+ if (state.textMessageIds.has(messageId))
107
+ return;
108
+ state.textMessageIds.add(messageId);
109
+ frames.push({ type: "TEXT_MESSAGE_START", messageId, runId, role: "assistant" });
110
+ }
111
+ function ensureReasoningStarted(frames, state, messageId, runId) {
112
+ if (state.reasoningMessageIds.has(messageId))
113
+ return;
114
+ state.reasoningMessageIds.add(messageId);
115
+ frames.push({ type: "REASONING_MESSAGE_START", messageId, runId });
116
+ }
117
+ function ensureToolCallStarted(frames, state, toolCallId, toolName, args, runId) {
118
+ if (state.toolCallIds.has(toolCallId))
119
+ return;
120
+ state.toolCallIds.add(toolCallId);
121
+ frames.push({ type: "TOOL_CALL_START", toolCallId, toolName, args, runId });
122
+ }