@pasko70/pibo 1.9.9 → 1.9.10

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 (667) hide show
  1. package/dist/api/simple-agent-api.js +136 -0
  2. package/dist/app-context.js +4 -0
  3. package/dist/apps/chat/agent-profiles.js +70 -0
  4. package/dist/apps/chat/agent-store.js +669 -0
  5. package/dist/apps/chat/chat-api-routes.js +325 -0
  6. package/dist/apps/chat/chat-capability-routes.js +90 -0
  7. package/dist/apps/chat/chat-files.js +178 -0
  8. package/dist/apps/chat/chat-request-normalizers.js +681 -0
  9. package/dist/apps/chat/chat-settings-routes.js +98 -0
  10. package/dist/apps/chat/chat-trace-helpers.js +139 -0
  11. package/dist/apps/chat/chat-user-skill-routes.js +178 -0
  12. package/dist/apps/chat/cron-api.js +213 -0
  13. package/dist/apps/chat/data/chat-data-mappers.js +82 -0
  14. package/dist/apps/chat/data/event-command-service.js +75 -0
  15. package/dist/apps/chat/data/navigation-query-service.js +11 -0
  16. package/dist/apps/chat/data/project-service.js +877 -0
  17. package/dist/apps/chat/data/read-state-service.js +42 -0
  18. package/dist/apps/chat/data/room-service.js +52 -0
  19. package/dist/apps/chat/data/session-query-service.js +126 -0
  20. package/dist/apps/chat/data/timeline-query-service.js +102 -0
  21. package/dist/apps/chat/event-log.js +1 -0
  22. package/dist/apps/chat/model-catalog.js +53 -0
  23. package/dist/apps/chat/output-compactor.js +126 -0
  24. package/dist/apps/chat/output-event-policy.js +17 -0
  25. package/dist/apps/chat/project-workflow-human-actions.js +347 -0
  26. package/dist/apps/chat/project-workflow-sessions.js +260 -0
  27. package/dist/apps/chat/provider-auth-actions.js +43 -0
  28. package/dist/apps/chat/ralph-api.js +156 -0
  29. package/dist/apps/chat/read-model.js +1 -0
  30. package/dist/apps/chat/rooms.js +1 -0
  31. package/dist/apps/chat/session-metadata.js +14 -0
  32. package/dist/apps/chat/static-assets.js +997 -0
  33. package/dist/apps/chat/stream.js +145 -0
  34. package/dist/apps/chat/telemetry-retention-service.js +69 -0
  35. package/dist/apps/chat/trace-v2.js +307 -0
  36. package/dist/apps/chat/trace.js +572 -0
  37. package/dist/apps/chat/types/event-store.js +1 -0
  38. package/dist/apps/chat/types/read-model.js +1 -0
  39. package/dist/apps/chat/types/rooms.js +36 -0
  40. package/dist/apps/chat/web-app.js +4605 -0
  41. package/dist/apps/chat/workflow-catalog.js +572 -0
  42. package/dist/apps/chat/workflow-edge-compatibility.js +51 -0
  43. package/dist/apps/chat/workflow-json-schema-validation.js +335 -0
  44. package/dist/apps/chat/workflow-manual-trigger-runtime.js +232 -0
  45. package/dist/apps/chat/workflow-persistence-model.js +140 -0
  46. package/dist/apps/chat/workflow-persistence.js +633 -0
  47. package/dist/apps/chat/workflow-registered-ref-params.js +130 -0
  48. package/dist/apps/chat/workflow-registered-ref-pickers.js +179 -0
  49. package/dist/apps/chat/workflow-registered-ref-validation.js +210 -0
  50. package/dist/apps/chat/workflow-v2-security-validation.js +93 -0
  51. package/dist/apps/chat/workflow-validation-helpers.js +114 -0
  52. package/dist/apps/chat-ui/assets/apl-BxEMbctQ.js +1 -0
  53. package/dist/apps/chat-ui/assets/asciiarmor-eFjeGRuZ.js +1 -0
  54. package/dist/apps/chat-ui/assets/asn1-Cfx-0pt9.js +1 -0
  55. package/dist/apps/chat-ui/assets/asterisk-B5BHTsBr.js +1 -0
  56. package/dist/apps/chat-ui/assets/brainfuck-CAA2xofr.js +1 -0
  57. package/dist/apps/chat-ui/assets/clike-BoDCOLzN.js +1 -0
  58. package/dist/apps/chat-ui/assets/clojure-kVFSWX0o.js +1 -0
  59. package/dist/apps/chat-ui/assets/cmake-BUPAhezI.js +1 -0
  60. package/dist/apps/chat-ui/assets/cobol-BfgHZgup.js +1 -0
  61. package/dist/apps/chat-ui/assets/coffeescript-G1Pe_1AZ.js +1 -0
  62. package/dist/apps/chat-ui/assets/commonlisp-B3N0CjHn.js +1 -0
  63. package/dist/apps/chat-ui/assets/crystal-C15ndaGM.js +1 -0
  64. package/dist/apps/chat-ui/assets/css-BqOeyZOV.js +1 -0
  65. package/dist/apps/chat-ui/assets/cypher-KjIKv-wW.js +1 -0
  66. package/dist/apps/chat-ui/assets/d-BlT5AEC-.js +1 -0
  67. package/dist/apps/chat-ui/assets/diff-oF98tbqj.js +1 -0
  68. package/dist/apps/chat-ui/assets/dist--55mTWk3.js +1 -0
  69. package/dist/apps/chat-ui/assets/dist--Sb99Zop.js +11 -0
  70. package/dist/apps/chat-ui/assets/dist-4VdcCJgh.js +6 -0
  71. package/dist/apps/chat-ui/assets/dist-BCqTb13C.js +1 -0
  72. package/dist/apps/chat-ui/assets/dist-BH4dS5wk.js +23 -0
  73. package/dist/apps/chat-ui/assets/dist-BXmdj7mb.js +9 -0
  74. package/dist/apps/chat-ui/assets/dist-BZ39rB1W.js +1 -0
  75. package/dist/apps/chat-ui/assets/dist-BsedZGJo.js +1 -0
  76. package/dist/apps/chat-ui/assets/dist-C5YJOwhH.js +1 -0
  77. package/dist/apps/chat-ui/assets/dist-C5oXtFSP.js +1 -0
  78. package/dist/apps/chat-ui/assets/dist-CDTTlyfG.js +1 -0
  79. package/dist/apps/chat-ui/assets/dist-CKM5j-iy.js +1 -0
  80. package/dist/apps/chat-ui/assets/dist-CUp9us2q.js +1 -0
  81. package/dist/apps/chat-ui/assets/dist-CZ9T4Cly.js +1 -0
  82. package/dist/apps/chat-ui/assets/dist-CdhJkLlg.js +1 -0
  83. package/dist/apps/chat-ui/assets/dist-D7FSg1x8.js +1 -0
  84. package/dist/apps/chat-ui/assets/dist-DSKQpPaz.js +1 -0
  85. package/dist/apps/chat-ui/assets/dist-Ds5VZTeC.js +2 -0
  86. package/dist/apps/chat-ui/assets/dist-SVPsM5Oi.js +13 -0
  87. package/dist/apps/chat-ui/assets/dist-ZN6fdzpB.js +1 -0
  88. package/dist/apps/chat-ui/assets/dist-Zqt9kNG9.js +1 -0
  89. package/dist/apps/chat-ui/assets/dist-qwl4CNfF.js +1 -0
  90. package/dist/apps/chat-ui/assets/dist-tGfufz3b.js +1 -0
  91. package/dist/apps/chat-ui/assets/dockerfile-CUaqzcqp.js +1 -0
  92. package/dist/apps/chat-ui/assets/dtd-VCA9yr61.js +1 -0
  93. package/dist/apps/chat-ui/assets/dylan-O-V5Dw5W.js +1 -0
  94. package/dist/apps/chat-ui/assets/ebnf-SPmdBkvT.js +1 -0
  95. package/dist/apps/chat-ui/assets/ecl-ChfCttfI.js +1 -0
  96. package/dist/apps/chat-ui/assets/eiffel-cB9EbjeN.js +1 -0
  97. package/dist/apps/chat-ui/assets/elm-BTiVflBU.js +1 -0
  98. package/dist/apps/chat-ui/assets/erlang-egf0TXFm.js +1 -0
  99. package/dist/apps/chat-ui/assets/factor-C2tAxNob.js +1 -0
  100. package/dist/apps/chat-ui/assets/fcl-BiCjh1tj.js +1 -0
  101. package/dist/apps/chat-ui/assets/forth-C4kDGW6u.js +1 -0
  102. package/dist/apps/chat-ui/assets/fortran-DzkLaPnd.js +1 -0
  103. package/dist/apps/chat-ui/assets/gas-DMOxskQF.js +1 -0
  104. package/dist/apps/chat-ui/assets/gherkin-BPxBpp-k.js +1 -0
  105. package/dist/apps/chat-ui/assets/groovy-CkEnc0ZY.js +1 -0
  106. package/dist/apps/chat-ui/assets/haskell-Dadpo9-w.js +1 -0
  107. package/dist/apps/chat-ui/assets/haxe-CDNZL9MW.js +1 -0
  108. package/dist/apps/chat-ui/assets/http-jy9Zxxt3.js +1 -0
  109. package/dist/apps/chat-ui/assets/idl-CGSB6iiy.js +1 -0
  110. package/dist/apps/chat-ui/assets/index-C0x9nEcf.css +1 -0
  111. package/dist/apps/chat-ui/assets/index-Gf-Zb-P-.js +173 -0
  112. package/dist/apps/chat-ui/assets/javascript-DSlzRUd8.js +1 -0
  113. package/dist/apps/chat-ui/assets/julia-DTiF9v6R.js +1 -0
  114. package/dist/apps/chat-ui/assets/livescript-Ci8Xxna6.js +1 -0
  115. package/dist/apps/chat-ui/assets/lua-eVxIrt9t.js +1 -0
  116. package/dist/apps/chat-ui/assets/mathematica-Da3grj36.js +1 -0
  117. package/dist/apps/chat-ui/assets/mbox-BWBMSafM.js +1 -0
  118. package/dist/apps/chat-ui/assets/mirc-CtHu9S1B.js +1 -0
  119. package/dist/apps/chat-ui/assets/mllike-wTFlPWXS.js +1 -0
  120. package/dist/apps/chat-ui/assets/modelica-cKbQ0UXu.js +1 -0
  121. package/dist/apps/chat-ui/assets/mscgen-C5pXQCMK.js +1 -0
  122. package/dist/apps/chat-ui/assets/mumps-CKBHkOQq.js +1 -0
  123. package/dist/apps/chat-ui/assets/nginx-B00AiQel.js +1 -0
  124. package/dist/apps/chat-ui/assets/nsis-SMDwKltR.js +1 -0
  125. package/dist/apps/chat-ui/assets/ntriples-B_36EBV0.js +1 -0
  126. package/dist/apps/chat-ui/assets/octave-BXPjzAif.js +1 -0
  127. package/dist/apps/chat-ui/assets/oz-Dedpat1M.js +1 -0
  128. package/dist/apps/chat-ui/assets/pascal-CMcUg72K.js +1 -0
  129. package/dist/apps/chat-ui/assets/perl-DoVTbnzt.js +1 -0
  130. package/dist/apps/chat-ui/assets/pig-CULXT1YV.js +1 -0
  131. package/dist/apps/chat-ui/assets/powershell-Cv5Uhf6b.js +1 -0
  132. package/dist/apps/chat-ui/assets/properties-CQ1C2P-M.js +1 -0
  133. package/dist/apps/chat-ui/assets/protobuf-SRlvzrl6.js +1 -0
  134. package/dist/apps/chat-ui/assets/pug-Bo3wfL-f.js +1 -0
  135. package/dist/apps/chat-ui/assets/puppet-ClSqCGj6.js +1 -0
  136. package/dist/apps/chat-ui/assets/pwa-images/android/launchericon-144x144.png +0 -0
  137. package/dist/apps/chat-ui/assets/pwa-images/android/launchericon-192x192.png +0 -0
  138. package/dist/apps/chat-ui/assets/pwa-images/android/launchericon-48x48.png +0 -0
  139. package/dist/apps/chat-ui/assets/pwa-images/android/launchericon-512x512.png +0 -0
  140. package/dist/apps/chat-ui/assets/pwa-images/android/launchericon-72x72.png +0 -0
  141. package/dist/apps/chat-ui/assets/pwa-images/android/launchericon-96x96.png +0 -0
  142. package/dist/apps/chat-ui/assets/pwa-images/ios/100.png +0 -0
  143. package/dist/apps/chat-ui/assets/pwa-images/ios/1024.png +0 -0
  144. package/dist/apps/chat-ui/assets/pwa-images/ios/114.png +0 -0
  145. package/dist/apps/chat-ui/assets/pwa-images/ios/120.png +0 -0
  146. package/dist/apps/chat-ui/assets/pwa-images/ios/128.png +0 -0
  147. package/dist/apps/chat-ui/assets/pwa-images/ios/144.png +0 -0
  148. package/dist/apps/chat-ui/assets/pwa-images/ios/152.png +0 -0
  149. package/dist/apps/chat-ui/assets/pwa-images/ios/16.png +0 -0
  150. package/dist/apps/chat-ui/assets/pwa-images/ios/167.png +0 -0
  151. package/dist/apps/chat-ui/assets/pwa-images/ios/180.png +0 -0
  152. package/dist/apps/chat-ui/assets/pwa-images/ios/192.png +0 -0
  153. package/dist/apps/chat-ui/assets/pwa-images/ios/20.png +0 -0
  154. package/dist/apps/chat-ui/assets/pwa-images/ios/256.png +0 -0
  155. package/dist/apps/chat-ui/assets/pwa-images/ios/29.png +0 -0
  156. package/dist/apps/chat-ui/assets/pwa-images/ios/32.png +0 -0
  157. package/dist/apps/chat-ui/assets/pwa-images/ios/40.png +0 -0
  158. package/dist/apps/chat-ui/assets/pwa-images/ios/50.png +0 -0
  159. package/dist/apps/chat-ui/assets/pwa-images/ios/512.png +0 -0
  160. package/dist/apps/chat-ui/assets/pwa-images/ios/57.png +0 -0
  161. package/dist/apps/chat-ui/assets/pwa-images/ios/58.png +0 -0
  162. package/dist/apps/chat-ui/assets/pwa-images/ios/60.png +0 -0
  163. package/dist/apps/chat-ui/assets/pwa-images/ios/64.png +0 -0
  164. package/dist/apps/chat-ui/assets/pwa-images/ios/72.png +0 -0
  165. package/dist/apps/chat-ui/assets/pwa-images/ios/76.png +0 -0
  166. package/dist/apps/chat-ui/assets/pwa-images/ios/80.png +0 -0
  167. package/dist/apps/chat-ui/assets/pwa-images/ios/87.png +0 -0
  168. package/dist/apps/chat-ui/assets/pwa-images/windows/LargeTile.scale-100.png +0 -0
  169. package/dist/apps/chat-ui/assets/pwa-images/windows/LargeTile.scale-125.png +0 -0
  170. package/dist/apps/chat-ui/assets/pwa-images/windows/LargeTile.scale-150.png +0 -0
  171. package/dist/apps/chat-ui/assets/pwa-images/windows/LargeTile.scale-200.png +0 -0
  172. package/dist/apps/chat-ui/assets/pwa-images/windows/LargeTile.scale-400.png +0 -0
  173. package/dist/apps/chat-ui/assets/pwa-images/windows/SmallTile.scale-100.png +0 -0
  174. package/dist/apps/chat-ui/assets/pwa-images/windows/SmallTile.scale-125.png +0 -0
  175. package/dist/apps/chat-ui/assets/pwa-images/windows/SmallTile.scale-150.png +0 -0
  176. package/dist/apps/chat-ui/assets/pwa-images/windows/SmallTile.scale-200.png +0 -0
  177. package/dist/apps/chat-ui/assets/pwa-images/windows/SmallTile.scale-400.png +0 -0
  178. package/dist/apps/chat-ui/assets/pwa-images/windows/SplashScreen.scale-100.png +0 -0
  179. package/dist/apps/chat-ui/assets/pwa-images/windows/SplashScreen.scale-125.png +0 -0
  180. package/dist/apps/chat-ui/assets/pwa-images/windows/SplashScreen.scale-150.png +0 -0
  181. package/dist/apps/chat-ui/assets/pwa-images/windows/SplashScreen.scale-200.png +0 -0
  182. package/dist/apps/chat-ui/assets/pwa-images/windows/SplashScreen.scale-400.png +0 -0
  183. package/dist/apps/chat-ui/assets/pwa-images/windows/Square150x150Logo.scale-100.png +0 -0
  184. package/dist/apps/chat-ui/assets/pwa-images/windows/Square150x150Logo.scale-125.png +0 -0
  185. package/dist/apps/chat-ui/assets/pwa-images/windows/Square150x150Logo.scale-150.png +0 -0
  186. package/dist/apps/chat-ui/assets/pwa-images/windows/Square150x150Logo.scale-200.png +0 -0
  187. package/dist/apps/chat-ui/assets/pwa-images/windows/Square150x150Logo.scale-400.png +0 -0
  188. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-16.png +0 -0
  189. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-20.png +0 -0
  190. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-24.png +0 -0
  191. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-256.png +0 -0
  192. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-30.png +0 -0
  193. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-32.png +0 -0
  194. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-36.png +0 -0
  195. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-40.png +0 -0
  196. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-44.png +0 -0
  197. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-48.png +0 -0
  198. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-60.png +0 -0
  199. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-64.png +0 -0
  200. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-72.png +0 -0
  201. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-80.png +0 -0
  202. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-96.png +0 -0
  203. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-16.png +0 -0
  204. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-20.png +0 -0
  205. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-24.png +0 -0
  206. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-256.png +0 -0
  207. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-30.png +0 -0
  208. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-32.png +0 -0
  209. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-36.png +0 -0
  210. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-40.png +0 -0
  211. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-44.png +0 -0
  212. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-48.png +0 -0
  213. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-60.png +0 -0
  214. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-64.png +0 -0
  215. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-72.png +0 -0
  216. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-80.png +0 -0
  217. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-96.png +0 -0
  218. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.scale-100.png +0 -0
  219. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.scale-125.png +0 -0
  220. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.scale-150.png +0 -0
  221. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.scale-200.png +0 -0
  222. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.scale-400.png +0 -0
  223. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-16.png +0 -0
  224. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-20.png +0 -0
  225. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-24.png +0 -0
  226. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-256.png +0 -0
  227. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-30.png +0 -0
  228. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-32.png +0 -0
  229. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-36.png +0 -0
  230. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-40.png +0 -0
  231. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-44.png +0 -0
  232. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-48.png +0 -0
  233. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-60.png +0 -0
  234. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-64.png +0 -0
  235. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-72.png +0 -0
  236. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-80.png +0 -0
  237. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-96.png +0 -0
  238. package/dist/apps/chat-ui/assets/pwa-images/windows/StoreLogo.scale-100.png +0 -0
  239. package/dist/apps/chat-ui/assets/pwa-images/windows/StoreLogo.scale-125.png +0 -0
  240. package/dist/apps/chat-ui/assets/pwa-images/windows/StoreLogo.scale-150.png +0 -0
  241. package/dist/apps/chat-ui/assets/pwa-images/windows/StoreLogo.scale-200.png +0 -0
  242. package/dist/apps/chat-ui/assets/pwa-images/windows/StoreLogo.scale-400.png +0 -0
  243. package/dist/apps/chat-ui/assets/pwa-images/windows/Wide310x150Logo.scale-100.png +0 -0
  244. package/dist/apps/chat-ui/assets/pwa-images/windows/Wide310x150Logo.scale-125.png +0 -0
  245. package/dist/apps/chat-ui/assets/pwa-images/windows/Wide310x150Logo.scale-150.png +0 -0
  246. package/dist/apps/chat-ui/assets/pwa-images/windows/Wide310x150Logo.scale-200.png +0 -0
  247. package/dist/apps/chat-ui/assets/pwa-images/windows/Wide310x150Logo.scale-400.png +0 -0
  248. package/dist/apps/chat-ui/assets/python-C2_X1GpX.js +1 -0
  249. package/dist/apps/chat-ui/assets/q-B_6Gdyzl.js +1 -0
  250. package/dist/apps/chat-ui/assets/r-BD07NGED.js +1 -0
  251. package/dist/apps/chat-ui/assets/rolldown-runtime-S-ySWqyJ.js +1 -0
  252. package/dist/apps/chat-ui/assets/rpm-CRu5Z2Jl.js +1 -0
  253. package/dist/apps/chat-ui/assets/ruby-dZPnOz8h.js +1 -0
  254. package/dist/apps/chat-ui/assets/sas-S2t8_sDI.js +1 -0
  255. package/dist/apps/chat-ui/assets/scheme-WcyFWLW2.js +1 -0
  256. package/dist/apps/chat-ui/assets/shell-DUelnYSh.js +1 -0
  257. package/dist/apps/chat-ui/assets/sieve-jDjlVhNh.js +1 -0
  258. package/dist/apps/chat-ui/assets/simple-mode-CL04yRVp.js +1 -0
  259. package/dist/apps/chat-ui/assets/smalltalk-ddWDYy10.js +1 -0
  260. package/dist/apps/chat-ui/assets/solr-C7rQhLuW.js +1 -0
  261. package/dist/apps/chat-ui/assets/sparql--fPCCgVd.js +1 -0
  262. package/dist/apps/chat-ui/assets/spreadsheet-DjthqD5G.js +1 -0
  263. package/dist/apps/chat-ui/assets/sql-D_dieYbr.js +1 -0
  264. package/dist/apps/chat-ui/assets/stex-rHcFYcA0.js +1 -0
  265. package/dist/apps/chat-ui/assets/stylus-DxF70RNr.js +1 -0
  266. package/dist/apps/chat-ui/assets/swift-T0hDoOb-.js +1 -0
  267. package/dist/apps/chat-ui/assets/tcl-Dlzy1mPk.js +1 -0
  268. package/dist/apps/chat-ui/assets/textile-Dy5rFZe5.js +1 -0
  269. package/dist/apps/chat-ui/assets/tiddlywiki-DQP1OymS.js +1 -0
  270. package/dist/apps/chat-ui/assets/tiki-0vOj3DB2.js +1 -0
  271. package/dist/apps/chat-ui/assets/toml-DEltN0lI.js +1 -0
  272. package/dist/apps/chat-ui/assets/troff-CRbBpEqY.js +1 -0
  273. package/dist/apps/chat-ui/assets/ttcn-M5q1nLKg.js +1 -0
  274. package/dist/apps/chat-ui/assets/ttcn-cfg-Rmw9NWq9.js +1 -0
  275. package/dist/apps/chat-ui/assets/turtle-BCDWhJK0.js +1 -0
  276. package/dist/apps/chat-ui/assets/vb-QQ7LGlOz.js +1 -0
  277. package/dist/apps/chat-ui/assets/vbscript-BiSEdUzz.js +1 -0
  278. package/dist/apps/chat-ui/assets/velocity-CzMg5_6w.js +1 -0
  279. package/dist/apps/chat-ui/assets/verilog-BJOO83gk.js +1 -0
  280. package/dist/apps/chat-ui/assets/vhdl-ed4zAZAA.js +1 -0
  281. package/dist/apps/chat-ui/assets/webidl-Ddy6hbV6.js +1 -0
  282. package/dist/apps/chat-ui/assets/xquery-Bw1zwhh6.js +1 -0
  283. package/dist/apps/chat-ui/assets/yacas-DZdTXy3s.js +1 -0
  284. package/dist/apps/chat-ui/assets/z80-DMG02_YV.js +1 -0
  285. package/dist/apps/chat-ui/index.html +20 -0
  286. package/dist/apps/chat-ui/manifest.webmanifest +25 -0
  287. package/dist/apps/chat-ui/sw.js +47 -0
  288. package/dist/apps/chat-vscode-web/assets/index-B5QK07zO.css +2 -0
  289. package/dist/apps/chat-vscode-web/assets/index-BAMxIaI_.js +41 -0
  290. package/dist/apps/chat-vscode-web/index.html +14 -0
  291. package/dist/apps/cli-ui/InkSessionApp.js +1218 -0
  292. package/dist/apps/cli-ui/InkTerminalLine.js +53 -0
  293. package/dist/apps/cli-ui/InkTerminalRow.js +304 -0
  294. package/dist/apps/cli-ui/InkTerminalView.js +25 -0
  295. package/dist/apps/cli-ui/cliSessionsCommand.js +232 -0
  296. package/dist/apps/cli-ui/index.js +8 -0
  297. package/dist/apps/cli-ui/inkColors.js +67 -0
  298. package/dist/apps/cli-ui/inkJson.js +244 -0
  299. package/dist/apps/cli-ui/inkMarkdown.js +127 -0
  300. package/dist/apps/cli-ui/inkSyntaxHighlighter.js +166 -0
  301. package/dist/apps/context-files-ui/assets/apl-14BqhLYK.js +1 -0
  302. package/dist/apps/context-files-ui/assets/asciiarmor-WLvjqI7d.js +1 -0
  303. package/dist/apps/context-files-ui/assets/asn1-Bg4FbdCg.js +1 -0
  304. package/dist/apps/context-files-ui/assets/asterisk-B2MO-X4d.js +1 -0
  305. package/dist/apps/context-files-ui/assets/brainfuck-CV9kufud.js +1 -0
  306. package/dist/apps/context-files-ui/assets/clike-CjmcUpt6.js +1 -0
  307. package/dist/apps/context-files-ui/assets/clojure-De3QGfx6.js +1 -0
  308. package/dist/apps/context-files-ui/assets/cmake-i2VDNaRq.js +1 -0
  309. package/dist/apps/context-files-ui/assets/cobol-BwO6DF08.js +1 -0
  310. package/dist/apps/context-files-ui/assets/coffeescript-BtivDvRz.js +1 -0
  311. package/dist/apps/context-files-ui/assets/commonlisp-DFkEQdLP.js +1 -0
  312. package/dist/apps/context-files-ui/assets/crystal-CU0NkcVL.js +1 -0
  313. package/dist/apps/context-files-ui/assets/css-CbMZAQ1W.js +1 -0
  314. package/dist/apps/context-files-ui/assets/cypher-Dke5QOzv.js +1 -0
  315. package/dist/apps/context-files-ui/assets/d-TPqSVaHM.js +1 -0
  316. package/dist/apps/context-files-ui/assets/diff-B365LSoZ.js +1 -0
  317. package/dist/apps/context-files-ui/assets/dist-B5PTVnox.js +1 -0
  318. package/dist/apps/context-files-ui/assets/dist-B5ZAfwf5.js +1 -0
  319. package/dist/apps/context-files-ui/assets/dist-BOiGdrG-.js +1 -0
  320. package/dist/apps/context-files-ui/assets/dist-BkUONE3N.js +1 -0
  321. package/dist/apps/context-files-ui/assets/dist-D1KyNDg5.js +13 -0
  322. package/dist/apps/context-files-ui/assets/dist-DK01b7x4.js +1 -0
  323. package/dist/apps/context-files-ui/assets/dist-DKoyMSNr.js +1 -0
  324. package/dist/apps/context-files-ui/assets/dist-DLMjd26T.js +1 -0
  325. package/dist/apps/context-files-ui/assets/dist-DPG9jOQ-.js +1 -0
  326. package/dist/apps/context-files-ui/assets/dist-DotDq_kD.js +1 -0
  327. package/dist/apps/context-files-ui/assets/dist-Dp5AH00p.js +1 -0
  328. package/dist/apps/context-files-ui/assets/dist-DqYw0LH7.js +2 -0
  329. package/dist/apps/context-files-ui/assets/dist-QQuDy4KA.js +1 -0
  330. package/dist/apps/context-files-ui/assets/dist-TF5iO5ML.js +9 -0
  331. package/dist/apps/context-files-ui/assets/dist-TbjAhles.js +1 -0
  332. package/dist/apps/context-files-ui/assets/dist-ZsBbt0uY.js +1 -0
  333. package/dist/apps/context-files-ui/assets/dist-kmsvtHkH.js +1 -0
  334. package/dist/apps/context-files-ui/assets/dist-vnd7PMu3.js +11 -0
  335. package/dist/apps/context-files-ui/assets/dockerfile-CJb2sekW.js +1 -0
  336. package/dist/apps/context-files-ui/assets/dtd-CBMymJ7O.js +1 -0
  337. package/dist/apps/context-files-ui/assets/dylan-08Azy1NK.js +1 -0
  338. package/dist/apps/context-files-ui/assets/ebnf-Dkum_1J8.js +1 -0
  339. package/dist/apps/context-files-ui/assets/ecl-dhxjHL8y.js +1 -0
  340. package/dist/apps/context-files-ui/assets/eiffel-C446m6dI.js +1 -0
  341. package/dist/apps/context-files-ui/assets/elm-po1E9de0.js +1 -0
  342. package/dist/apps/context-files-ui/assets/erlang-BD5LkVkR.js +1 -0
  343. package/dist/apps/context-files-ui/assets/factor-B2EMQZkP.js +1 -0
  344. package/dist/apps/context-files-ui/assets/fcl-DkEOamHd.js +1 -0
  345. package/dist/apps/context-files-ui/assets/forth-dCg2_HVB.js +1 -0
  346. package/dist/apps/context-files-ui/assets/fortran-3ZpXLFh1.js +1 -0
  347. package/dist/apps/context-files-ui/assets/gas-DMmxLZRI.js +1 -0
  348. package/dist/apps/context-files-ui/assets/gherkin-DUSFg2R6.js +1 -0
  349. package/dist/apps/context-files-ui/assets/groovy-Cmduloe1.js +1 -0
  350. package/dist/apps/context-files-ui/assets/haskell-Cyr255R9.js +1 -0
  351. package/dist/apps/context-files-ui/assets/haxe-BJVKtprM.js +1 -0
  352. package/dist/apps/context-files-ui/assets/http-DszHFpc-.js +1 -0
  353. package/dist/apps/context-files-ui/assets/idl-Cati9Nrv.js +1 -0
  354. package/dist/apps/context-files-ui/assets/index-B92tL3Pp.css +1 -0
  355. package/dist/apps/context-files-ui/assets/index-BhAWD3dv.js +202 -0
  356. package/dist/apps/context-files-ui/assets/javascript-C5pDVaoP.js +1 -0
  357. package/dist/apps/context-files-ui/assets/julia-DlqY1cTU.js +1 -0
  358. package/dist/apps/context-files-ui/assets/livescript-C6p8-2W1.js +1 -0
  359. package/dist/apps/context-files-ui/assets/lua-BxuTHaF7.js +1 -0
  360. package/dist/apps/context-files-ui/assets/mathematica-nDHZUMJT.js +1 -0
  361. package/dist/apps/context-files-ui/assets/mbox-DAaR0Hcz.js +1 -0
  362. package/dist/apps/context-files-ui/assets/mirc-CCA0FRfl.js +1 -0
  363. package/dist/apps/context-files-ui/assets/mllike-Cw3Iccsb.js +1 -0
  364. package/dist/apps/context-files-ui/assets/modelica-Czx80fNR.js +1 -0
  365. package/dist/apps/context-files-ui/assets/mscgen-BmfuTbzG.js +1 -0
  366. package/dist/apps/context-files-ui/assets/mumps-Ds_ZaumL.js +1 -0
  367. package/dist/apps/context-files-ui/assets/nginx-D9M2PQ4U.js +1 -0
  368. package/dist/apps/context-files-ui/assets/nsis-DOo3SJmd.js +1 -0
  369. package/dist/apps/context-files-ui/assets/ntriples-DLHGTvHs.js +1 -0
  370. package/dist/apps/context-files-ui/assets/octave-8jj96JiC.js +1 -0
  371. package/dist/apps/context-files-ui/assets/oz-BmMq7iC4.js +1 -0
  372. package/dist/apps/context-files-ui/assets/pascal-BgMr6XpT.js +1 -0
  373. package/dist/apps/context-files-ui/assets/perl-D6YJObi_.js +1 -0
  374. package/dist/apps/context-files-ui/assets/pig-nx7uchs8.js +1 -0
  375. package/dist/apps/context-files-ui/assets/powershell-B4IPkVxR.js +1 -0
  376. package/dist/apps/context-files-ui/assets/properties-CoavQdLC.js +1 -0
  377. package/dist/apps/context-files-ui/assets/protobuf-D5EWhcmc.js +1 -0
  378. package/dist/apps/context-files-ui/assets/pug-QU72BPAa.js +1 -0
  379. package/dist/apps/context-files-ui/assets/puppet-B_0GFuyD.js +1 -0
  380. package/dist/apps/context-files-ui/assets/python-Cs7sNzy_.js +1 -0
  381. package/dist/apps/context-files-ui/assets/q-BIB9pPtI.js +1 -0
  382. package/dist/apps/context-files-ui/assets/r-CN5s4f3o.js +1 -0
  383. package/dist/apps/context-files-ui/assets/rpm-Ct_Ck8mQ.js +1 -0
  384. package/dist/apps/context-files-ui/assets/ruby-BVPradRk.js +1 -0
  385. package/dist/apps/context-files-ui/assets/sas-DN4j74IF.js +1 -0
  386. package/dist/apps/context-files-ui/assets/scheme-CvNgHAnh.js +1 -0
  387. package/dist/apps/context-files-ui/assets/shell-BjiMLAaM.js +1 -0
  388. package/dist/apps/context-files-ui/assets/sieve-C2U1O5Z4.js +1 -0
  389. package/dist/apps/context-files-ui/assets/simple-mode-DnMbQuKW.js +1 -0
  390. package/dist/apps/context-files-ui/assets/smalltalk-DkYwYufV.js +1 -0
  391. package/dist/apps/context-files-ui/assets/solr-BopnSD-v.js +1 -0
  392. package/dist/apps/context-files-ui/assets/sparql-Cpg3YQfd.js +1 -0
  393. package/dist/apps/context-files-ui/assets/spreadsheet-kRxtVt9J.js +1 -0
  394. package/dist/apps/context-files-ui/assets/sql-DYI2GwJR.js +1 -0
  395. package/dist/apps/context-files-ui/assets/stex-BCRT8IJ3.js +1 -0
  396. package/dist/apps/context-files-ui/assets/stylus-CARoeVE9.js +1 -0
  397. package/dist/apps/context-files-ui/assets/swift-DKNaLAK6.js +1 -0
  398. package/dist/apps/context-files-ui/assets/tcl-CQyXkgMH.js +1 -0
  399. package/dist/apps/context-files-ui/assets/textile-Yg_UWn-t.js +1 -0
  400. package/dist/apps/context-files-ui/assets/tiddlywiki-dqVbkfX4.js +1 -0
  401. package/dist/apps/context-files-ui/assets/tiki-CC_ic8g0.js +1 -0
  402. package/dist/apps/context-files-ui/assets/toml-B7gGzVkJ.js +1 -0
  403. package/dist/apps/context-files-ui/assets/troff-Bq3z6oAu.js +1 -0
  404. package/dist/apps/context-files-ui/assets/ttcn-GvRgs2AT.js +1 -0
  405. package/dist/apps/context-files-ui/assets/ttcn-cfg-CGCXz7Vo.js +1 -0
  406. package/dist/apps/context-files-ui/assets/turtle-CwIpz2yy.js +1 -0
  407. package/dist/apps/context-files-ui/assets/vb-BmcHUM2C.js +1 -0
  408. package/dist/apps/context-files-ui/assets/vbscript-Cs9dylre.js +1 -0
  409. package/dist/apps/context-files-ui/assets/velocity-CBWU0VCy.js +1 -0
  410. package/dist/apps/context-files-ui/assets/verilog-DVCHmufx.js +1 -0
  411. package/dist/apps/context-files-ui/assets/vhdl-BGDk4f1d.js +1 -0
  412. package/dist/apps/context-files-ui/assets/webidl-egXQEWlC.js +1 -0
  413. package/dist/apps/context-files-ui/assets/xquery-5f0hn7cg.js +1 -0
  414. package/dist/apps/context-files-ui/assets/yacas-DNs9XkmQ.js +1 -0
  415. package/dist/apps/context-files-ui/assets/z80-B7Dfb4UO.js +1 -0
  416. package/dist/apps/context-files-ui/index.html +14 -0
  417. package/dist/auth/better-auth.js +130 -0
  418. package/dist/auth/login-actions.js +251 -0
  419. package/dist/auth/openai-codex-usage.js +147 -0
  420. package/dist/auth/types.js +14 -0
  421. package/dist/bin/pibo.js +3 -0
  422. package/dist/bin/rg.js +15 -0
  423. package/dist/channels/types.js +1 -0
  424. package/dist/cli-errors.js +18 -0
  425. package/dist/cli-session/fakeSessionSource.js +804 -0
  426. package/dist/cli-session/index.js +3 -0
  427. package/dist/cli-session/localSessionSource.js +1144 -0
  428. package/dist/cli-session/sessionSource.js +13 -0
  429. package/dist/cli.js +491 -0
  430. package/dist/compute/cli.js +415 -0
  431. package/dist/compute/docker.js +835 -0
  432. package/dist/compute/resource-health.js +334 -0
  433. package/dist/compute/resource-policy.js +98 -0
  434. package/dist/config/config.js +180 -0
  435. package/dist/core/base-prompt.js +104 -0
  436. package/dist/core/codex-compat.js +44 -0
  437. package/dist/core/compaction-prompt.js +293 -0
  438. package/dist/core/context-build.js +711 -0
  439. package/dist/core/context-guard.js +293 -0
  440. package/dist/core/events.js +1 -0
  441. package/dist/core/gateway-resource-guard.js +215 -0
  442. package/dist/core/model-defaults.js +95 -0
  443. package/dist/core/pibo-home.js +8 -0
  444. package/dist/core/profiles.js +210 -0
  445. package/dist/core/provider-recovery.js +64 -0
  446. package/dist/core/provider-telemetry.js +353 -0
  447. package/dist/core/routed-session.js +1179 -0
  448. package/dist/core/runtime-telemetry.js +1059 -0
  449. package/dist/core/runtime.js +529 -0
  450. package/dist/core/session-errors.js +76 -0
  451. package/dist/core/session-model.js +39 -0
  452. package/dist/core/session-router.js +850 -0
  453. package/dist/core/skill-expansion.js +43 -0
  454. package/dist/core/system-prompt-template.js +56 -0
  455. package/dist/core/telemetry-retention-settings.js +34 -0
  456. package/dist/core/telemetry-staleness.js +128 -0
  457. package/dist/core/test-output-compaction.js +145 -0
  458. package/dist/core/thinking.js +9 -0
  459. package/dist/core/user-settings.js +84 -0
  460. package/dist/core/workspace.js +5 -0
  461. package/dist/core/wsl.js +100 -0
  462. package/dist/cron/channel.js +28 -0
  463. package/dist/cron/cli.js +230 -0
  464. package/dist/cron/plugin.js +11 -0
  465. package/dist/cron/schedule.js +214 -0
  466. package/dist/cron/service.js +177 -0
  467. package/dist/cron/store.js +349 -0
  468. package/dist/cron/types.js +1 -0
  469. package/dist/data/cli.js +184 -0
  470. package/dist/data/event-log.js +106 -0
  471. package/dist/data/ingest-service.js +389 -0
  472. package/dist/data/message-store.js +62 -0
  473. package/dist/data/navigation-store.js +75 -0
  474. package/dist/data/observation-store.js +46 -0
  475. package/dist/data/payload-store.js +153 -0
  476. package/dist/data/pibo-store.js +59 -0
  477. package/dist/data/schema.js +436 -0
  478. package/dist/data/session-store.js +63 -0
  479. package/dist/data/sqlite-schema.js +12 -0
  480. package/dist/data/telemetry-preview.js +65 -0
  481. package/dist/data/telemetry-queries.js +212 -0
  482. package/dist/data/telemetry-retention.js +50 -0
  483. package/dist/data/telemetry-rows.js +158 -0
  484. package/dist/data/telemetry-writer.js +114 -0
  485. package/dist/data/telemetry.js +471 -0
  486. package/dist/debug/delta-compaction.js +99 -0
  487. package/dist/debug/detail-format.js +86 -0
  488. package/dist/debug/events.js +212 -0
  489. package/dist/debug/failures.js +162 -0
  490. package/dist/debug/index.js +1296 -0
  491. package/dist/debug/messages.js +185 -0
  492. package/dist/debug/next-commands.js +6 -0
  493. package/dist/debug/payloads.js +123 -0
  494. package/dist/debug/pty.js +924 -0
  495. package/dist/debug/session.js +230 -0
  496. package/dist/debug/sql.js +238 -0
  497. package/dist/debug/stores.js +54 -0
  498. package/dist/debug/summary.js +72 -0
  499. package/dist/debug/telemetry.js +649 -0
  500. package/dist/debug/tools.js +168 -0
  501. package/dist/debug/trace-render-check.js +151 -0
  502. package/dist/debug/trace.js +370 -0
  503. package/dist/debug/web-artifacts.js +63 -0
  504. package/dist/debug/web-options.js +313 -0
  505. package/dist/debug/web-render-analysis.js +310 -0
  506. package/dist/debug/web-snapshot-browser-scripts.js +303 -0
  507. package/dist/debug/web-streaming-benchmark-analysis.js +605 -0
  508. package/dist/debug/web-streaming-browser-library.js +928 -0
  509. package/dist/debug/web-streaming-browser-scripts.js +242 -0
  510. package/dist/debug/web-streaming-provider-telemetry.js +194 -0
  511. package/dist/debug/web-streaming-report.js +493 -0
  512. package/dist/debug/web-streaming-types.js +1 -0
  513. package/dist/debug/web.js +574 -0
  514. package/dist/gateway/backup.js +83 -0
  515. package/dist/gateway/cli.js +632 -0
  516. package/dist/gateway/client.js +200 -0
  517. package/dist/gateway/fallback.js +155 -0
  518. package/dist/gateway/pidfile.js +130 -0
  519. package/dist/gateway/protocol.js +62 -0
  520. package/dist/gateway/request.js +155 -0
  521. package/dist/gateway/server.js +397 -0
  522. package/dist/gateway/tool.js +72 -0
  523. package/dist/gateway/web.js +224 -0
  524. package/dist/index.js +25 -0
  525. package/dist/local/client.js +77 -0
  526. package/dist/local/extension.js +551 -0
  527. package/dist/local/tui.js +25 -0
  528. package/dist/mcp/agent-context.js +127 -0
  529. package/dist/mcp/client.js +332 -0
  530. package/dist/mcp/commands/call.js +146 -0
  531. package/dist/mcp/commands/grep.js +145 -0
  532. package/dist/mcp/commands/info.js +83 -0
  533. package/dist/mcp/commands/list.js +94 -0
  534. package/dist/mcp/config-command.js +217 -0
  535. package/dist/mcp/config.js +473 -0
  536. package/dist/mcp/daemon-client.js +266 -0
  537. package/dist/mcp/daemon.js +327 -0
  538. package/dist/mcp/errors.js +287 -0
  539. package/dist/mcp/index.js +431 -0
  540. package/dist/mcp/output.js +226 -0
  541. package/dist/mcp/python-runtime.js +131 -0
  542. package/dist/mcp/registry.js +116 -0
  543. package/dist/mcp/version.js +5 -0
  544. package/dist/pi-packages/cli.js +92 -0
  545. package/dist/pi-packages/installer.js +70 -0
  546. package/dist/pi-packages/metadata.js +231 -0
  547. package/dist/pi-packages/runtime.js +61 -0
  548. package/dist/pi-packages/store.js +175 -0
  549. package/dist/pi-packages/types.js +1 -0
  550. package/dist/plugins/better-auth.js +11 -0
  551. package/dist/plugins/builtin.js +478 -0
  552. package/dist/plugins/chat-custom-agents.js +20 -0
  553. package/dist/plugins/chat-user-skills.js +41 -0
  554. package/dist/plugins/chat-vscode-web.js +28 -0
  555. package/dist/plugins/chat-web.js +11 -0
  556. package/dist/plugins/codex-compat.js +33 -0
  557. package/dist/plugins/context-files-store.js +354 -0
  558. package/dist/plugins/context-files.js +1081 -0
  559. package/dist/plugins/dev-auth.js +202 -0
  560. package/dist/plugins/native-tooling.js +15 -0
  561. package/dist/plugins/registry.js +436 -0
  562. package/dist/plugins/types.js +1 -0
  563. package/dist/plugins/web-annotations.js +27 -0
  564. package/dist/plugins/web.js +11 -0
  565. package/dist/providers/glm.js +59 -0
  566. package/dist/providers/minimax.js +70 -0
  567. package/dist/providers/openai-compat.js +48 -0
  568. package/dist/providers/openai-gpt56.js +153 -0
  569. package/dist/ralph/channel.js +8 -0
  570. package/dist/ralph/cli.js +197 -0
  571. package/dist/ralph/plugin.js +14 -0
  572. package/dist/ralph/service.js +317 -0
  573. package/dist/ralph/stopping.js +151 -0
  574. package/dist/ralph/store.js +450 -0
  575. package/dist/ralph/templates.js +200 -0
  576. package/dist/ralph/types.js +1 -0
  577. package/dist/reliability/store.js +775 -0
  578. package/dist/resources/cli.js +135 -0
  579. package/dist/resources/lifecycle.js +353 -0
  580. package/dist/resources/reaper-state.js +94 -0
  581. package/dist/resources/reaper.js +145 -0
  582. package/dist/runs/registry.js +360 -0
  583. package/dist/runs/tools.js +185 -0
  584. package/dist/session-ui/commandCatalog.js +193 -0
  585. package/dist/session-ui/commandResults.js +95 -0
  586. package/dist/session-ui/delegation.js +89 -0
  587. package/dist/session-ui/index.js +8 -0
  588. package/dist/session-ui/roomSessionViewModel.js +69 -0
  589. package/dist/session-ui/sessionActivity.js +30 -0
  590. package/dist/session-ui/statusViewModel.js +127 -0
  591. package/dist/session-ui/terminalCards.js +210 -0
  592. package/dist/session-ui/terminalRows.js +1163 -0
  593. package/dist/session-ui/terminalValue.js +45 -0
  594. package/dist/sessions/pibo-data-store.js +178 -0
  595. package/dist/sessions/sqlite-store.js +220 -0
  596. package/dist/sessions/store.js +132 -0
  597. package/dist/sessions/workflow-session-kind.js +20 -0
  598. package/dist/setup/cli.js +619 -0
  599. package/dist/shared/trace-async-agent-runs.js +127 -0
  600. package/dist/shared/trace-engine.js +97 -0
  601. package/dist/shared/trace-event-projection.js +789 -0
  602. package/dist/shared/trace-live-reducer.js +191 -0
  603. package/dist/shared/trace-nodes.js +88 -0
  604. package/dist/shared/trace-order.js +84 -0
  605. package/dist/shared/trace-page-merge.js +40 -0
  606. package/dist/shared/trace-patch-nodes.js +83 -0
  607. package/dist/shared/trace-run-notifications.js +69 -0
  608. package/dist/shared/trace-subagent-links.js +46 -0
  609. package/dist/shared/trace-transcript.js +371 -0
  610. package/dist/shared/trace-types.js +1 -0
  611. package/dist/signals/aggregate.js +65 -0
  612. package/dist/signals/events.js +1 -0
  613. package/dist/signals/projector.js +208 -0
  614. package/dist/signals/registry.js +554 -0
  615. package/dist/signals/store.js +1 -0
  616. package/dist/signals/types.js +1 -0
  617. package/dist/skills/cli.js +151 -0
  618. package/dist/subagents/tool.js +63 -0
  619. package/dist/tools/agent-browser-leases.js +219 -0
  620. package/dist/tools/agent-browser-wrapper.js +99 -0
  621. package/dist/tools/browser-pool.js +623 -0
  622. package/dist/tools/browser-use-cdp.js +259 -0
  623. package/dist/tools/browser-use-leases.js +516 -0
  624. package/dist/tools/browser-use-wrapper.js +781 -0
  625. package/dist/tools/cdp-client.js +189 -0
  626. package/dist/tools/codex-compat.js +85 -0
  627. package/dist/tools/codex-image-generation.js +272 -0
  628. package/dist/tools/desktop-env.js +99 -0
  629. package/dist/tools/guides.js +563 -0
  630. package/dist/tools/index.js +1020 -0
  631. package/dist/tools/linux-virtual-display.js +58 -0
  632. package/dist/tools/npm-runtime.js +136 -0
  633. package/dist/tools/python-runtime.js +183 -0
  634. package/dist/tools/registry.js +237 -0
  635. package/dist/tools/runtime/index.js +3 -0
  636. package/dist/tools/runtime/node-backend.js +225 -0
  637. package/dist/tools/runtime/node-worker-source.js +206 -0
  638. package/dist/tools/runtime/python-backend.js +227 -0
  639. package/dist/tools/runtime/python-worker-source.js +178 -0
  640. package/dist/tools/runtime/registry.js +255 -0
  641. package/dist/tools/runtime/tool.js +168 -0
  642. package/dist/tools/runtime/types.js +1 -0
  643. package/dist/tools/web-search.js +138 -0
  644. package/dist/user-skills/installer.js +214 -0
  645. package/dist/user-skills/manager.js +133 -0
  646. package/dist/user-skills/store.js +267 -0
  647. package/dist/user-skills/types.js +1 -0
  648. package/dist/vscode/cli.js +90 -0
  649. package/dist/vscode/code-cli.js +119 -0
  650. package/dist/vscode/install.js +177 -0
  651. package/dist/vscode/status.js +80 -0
  652. package/dist/vscode/types.js +14 -0
  653. package/dist/vscode/uninstall.js +49 -0
  654. package/dist/vscode/vsix-fetcher.js +131 -0
  655. package/dist/web/auth.js +14 -0
  656. package/dist/web/channel.js +288 -0
  657. package/dist/web/http.js +195 -0
  658. package/dist/web/types.js +1 -0
  659. package/dist/web-annotations/api.js +348 -0
  660. package/dist/web-annotations/attachments.js +201 -0
  661. package/dist/web-annotations/cdp.js +1107 -0
  662. package/dist/web-annotations/index.js +7 -0
  663. package/dist/web-annotations/store.js +407 -0
  664. package/dist/web-annotations/tools.js +350 -0
  665. package/dist/web-annotations/types.js +34 -0
  666. package/dist/web-annotations/validation.js +288 -0
  667. package/package.json +1 -1
@@ -0,0 +1,997 @@
1
+ import { existsSync, readFileSync } from "node:fs";
2
+ import { extname, resolve } from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ import { brotliCompressSync, gzipSync } from "node:zlib";
5
+ import { responseHtml } from "../../web/http.js";
6
+ export const CHAT_WEB_MOUNT_PATH = "/apps/chat";
7
+ export const CHAT_VSCODE_MOUNT_PATH = "/apps/chat-vscode";
8
+ const CHAT_UI_DIST_DIR = resolve(fileURLToPath(new URL("../../../dist/apps/chat-ui", import.meta.url)));
9
+ const CHAT_VSCODE_DIST_DIR = resolve(fileURLToPath(new URL("../../../dist/apps/chat-vscode-web", import.meta.url)));
10
+ const compressedAssetCache = new Map();
11
+ export function responseChatAppShell() {
12
+ return responseBuiltChatIndex() ?? responseHtml(createFallbackChatHtml());
13
+ }
14
+ export function responseBuiltChatIndex() {
15
+ const indexPath = resolve(CHAT_UI_DIST_DIR, "index.html");
16
+ if (!existsSync(indexPath))
17
+ return undefined;
18
+ return responseHtml(readFileSync(indexPath, "utf8"));
19
+ }
20
+ export function responseBuiltChatAsset(request, pathname) {
21
+ if (!pathname.startsWith(`${CHAT_WEB_MOUNT_PATH}/assets/`))
22
+ return undefined;
23
+ return responseBuiltChatStaticFile(request, pathname, "public, max-age=31536000, immutable");
24
+ }
25
+ export function responseBuiltChatPublicFile(request, pathname) {
26
+ const publicFilePaths = new Set([
27
+ `${CHAT_WEB_MOUNT_PATH}/manifest.webmanifest`,
28
+ `${CHAT_WEB_MOUNT_PATH}/sw.js`,
29
+ ]);
30
+ if (!publicFilePaths.has(pathname))
31
+ return undefined;
32
+ const cacheControl = pathname.endsWith("/sw.js") || pathname.endsWith("/manifest.webmanifest")
33
+ ? "no-cache"
34
+ : "public, max-age=31536000, immutable";
35
+ return responseBuiltChatStaticFile(request, pathname, cacheControl);
36
+ }
37
+ function responseBuiltChatStaticFile(request, pathname, cacheControl) {
38
+ const relativePath = pathname.slice(`${CHAT_WEB_MOUNT_PATH}/`.length);
39
+ const filePath = resolve(CHAT_UI_DIST_DIR, relativePath);
40
+ if (!filePath.startsWith(CHAT_UI_DIST_DIR) || !existsSync(filePath))
41
+ return undefined;
42
+ const body = readFileSync(filePath);
43
+ const headers = {
44
+ "content-type": contentTypeFor(filePath),
45
+ "cache-control": cacheControl,
46
+ };
47
+ const encoding = preferredAssetEncoding(request.headers.get("accept-encoding"), filePath);
48
+ if (!encoding)
49
+ return new Response(body, { headers });
50
+ headers["content-encoding"] = encoding;
51
+ headers["vary"] = "accept-encoding";
52
+ return new Response(compressedAssetBody(filePath, body, encoding), { headers });
53
+ }
54
+ export function isChatAppPath(pathname) {
55
+ if (pathname.startsWith(`${CHAT_WEB_MOUNT_PATH}/assets/`))
56
+ return false;
57
+ if (pathname === `${CHAT_WEB_MOUNT_PATH}/manifest.webmanifest`)
58
+ return false;
59
+ if (pathname === `${CHAT_WEB_MOUNT_PATH}/sw.js`)
60
+ return false;
61
+ if (pathname.startsWith(`${CHAT_WEB_MOUNT_PATH}/icons/`))
62
+ return false;
63
+ return pathname === CHAT_WEB_MOUNT_PATH || pathname.startsWith(`${CHAT_WEB_MOUNT_PATH}/`);
64
+ }
65
+ export function responseVscodeAppShell() {
66
+ return responseBuiltVscodeIndex() ?? responseHtml(responseBuiltVscodeIndex() ? "" : "<!doctype html><title>Pibo</title>");
67
+ }
68
+ function responseBuiltVscodeIndex() {
69
+ const indexPath = resolve(CHAT_VSCODE_DIST_DIR, "index.html");
70
+ if (!existsSync(indexPath))
71
+ return undefined;
72
+ return responseHtml(readFileSync(indexPath, "utf8"));
73
+ }
74
+ export function responseBuiltVscodeAsset(request, pathname) {
75
+ if (!pathname.startsWith(`${CHAT_VSCODE_MOUNT_PATH}/assets/`))
76
+ return undefined;
77
+ return responseBuiltVscodeStaticFile(request, pathname, "public, max-age=31536000, immutable");
78
+ }
79
+ function responseBuiltVscodeStaticFile(request, pathname, cacheControl) {
80
+ const relativePath = pathname.slice(`${CHAT_VSCODE_MOUNT_PATH}/`.length);
81
+ const filePath = resolve(CHAT_VSCODE_DIST_DIR, relativePath);
82
+ if (!filePath.startsWith(CHAT_VSCODE_DIST_DIR) || !existsSync(filePath))
83
+ return undefined;
84
+ const body = readFileSync(filePath);
85
+ const headers = {
86
+ "content-type": contentTypeFor(filePath),
87
+ "cache-control": cacheControl,
88
+ };
89
+ const encoding = preferredAssetEncoding(request.headers.get("accept-encoding"), filePath);
90
+ if (!encoding)
91
+ return new Response(body, { headers });
92
+ headers["content-encoding"] = encoding;
93
+ headers["vary"] = "accept-encoding";
94
+ return new Response(compressedAssetBody(filePath, body, encoding), { headers });
95
+ }
96
+ export function isVscodeAppPath(pathname) {
97
+ if (pathname.startsWith(`${CHAT_VSCODE_MOUNT_PATH}/assets/`))
98
+ return false;
99
+ return pathname === CHAT_VSCODE_MOUNT_PATH || pathname.startsWith(`${CHAT_VSCODE_MOUNT_PATH}/`);
100
+ }
101
+ function contentTypeFor(path) {
102
+ switch (extname(path)) {
103
+ case ".js":
104
+ return "text/javascript; charset=utf-8";
105
+ case ".css":
106
+ return "text/css; charset=utf-8";
107
+ case ".svg":
108
+ return "image/svg+xml";
109
+ case ".png":
110
+ return "image/png";
111
+ case ".webmanifest":
112
+ return "application/manifest+json; charset=utf-8";
113
+ case ".json":
114
+ return "application/json; charset=utf-8";
115
+ default:
116
+ return "application/octet-stream";
117
+ }
118
+ }
119
+ function preferredAssetEncoding(acceptEncoding, path) {
120
+ if (!isCompressibleAsset(path) || !acceptEncoding)
121
+ return undefined;
122
+ if (/\bbr\b/.test(acceptEncoding))
123
+ return "br";
124
+ if (/\bgzip\b/.test(acceptEncoding))
125
+ return "gzip";
126
+ return undefined;
127
+ }
128
+ function isCompressibleAsset(path) {
129
+ const extension = extname(path);
130
+ return extension === ".js" || extension === ".css" || extension === ".html" || extension === ".json";
131
+ }
132
+ function compressedAssetBody(path, body, encoding) {
133
+ const cacheKey = `${encoding}:${path}`;
134
+ const cached = compressedAssetCache.get(cacheKey);
135
+ if (cached)
136
+ return cached;
137
+ const compressed = encoding === "br" ? brotliCompressSync(body) : gzipSync(body);
138
+ compressedAssetCache.set(cacheKey, compressed);
139
+ return compressed;
140
+ }
141
+ export function createFallbackChatHtml() {
142
+ return `<!doctype html>
143
+ <html lang="de">
144
+ <head>
145
+ <meta charset="utf-8">
146
+ <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
147
+ <meta name="theme-color" content="#101d22">
148
+ <meta name="apple-mobile-web-app-capable" content="yes">
149
+ <meta name="apple-mobile-web-app-title" content="Pibo Chat">
150
+ <link rel="manifest" href="/apps/chat/manifest.webmanifest">
151
+ <link rel="apple-touch-icon" href="/apps/chat/assets/pwa-images/ios/180.png">
152
+ <title>Pibo Web Chat</title>
153
+ <style>
154
+ :root { color-scheme: dark; font-family: "Public Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; background: #101d22; color: #d8e3e7; }
155
+ * { box-sizing: border-box; }
156
+ body { margin: 0; height: 100vh; overflow: hidden; background: #101d22; }
157
+ button, textarea { font: inherit; }
158
+ button { border: 1px solid #334155; background: #151f24; color: #d8e3e7; border-radius: 3px; padding: 7px 10px; cursor: pointer; }
159
+ button:hover { border-color: #11a4d4; color: #ffffff; }
160
+ button.primary { background: #11a4d4; border-color: #11a4d4; color: #ffffff; }
161
+ button.ghost { background: transparent; }
162
+ .app { display: grid; grid-template-rows: 56px 1fr; height: 100vh; }
163
+ .topbar { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 0 16px; background: #1a262b; border-bottom: 1px solid #1e293b; }
164
+ .brand { display: flex; align-items: center; gap: 8px; font-size: 17px; font-weight: 800; letter-spacing: .08em; color: #e7f7fb; text-transform: uppercase; white-space: nowrap; }
165
+ .fallback-badge { border: 1px solid #f59e0b; border-radius: 999px; padding: 2px 6px; color: #fbbf24; font-size: 9px; letter-spacing: .06em; }
166
+ .tabs { display: flex; gap: 6px; }
167
+ .tab { height: 32px; text-transform: uppercase; font-size: 12px; letter-spacing: .06em; }
168
+ .tab.active { border-color: #11a4d4; color: #11a4d4; background: rgba(17,164,212,.08); }
169
+ .userbar { display: flex; align-items: center; gap: 8px; min-width: 0; color: #94a3b8; font-size: 12px; }
170
+ .workspace { display: grid; grid-template-columns: 300px minmax(0,1fr) 320px; min-height: 0; }
171
+ .sidebar, .inspector { background: #1a262b; border-right: 1px solid #1e293b; min-height: 0; overflow: auto; }
172
+ .inspector { border-right: 0; border-left: 1px solid #1e293b; background: #0e1116; }
173
+ .panel-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; min-height: 42px; padding: 10px 12px; border-bottom: 1px solid #1e293b; color: #cbd5e1; font-size: 12px; font-weight: 800; letter-spacing: .08em; text-transform: uppercase; }
174
+ .panel-actions { display: flex; align-items: center; gap: 6px; }
175
+ .icon-button { width: 28px; height: 28px; padding: 0; display: grid; place-items: center; line-height: 1; }
176
+ .session-tree { padding: 8px; }
177
+ .session-row { width: 100%; display: grid; grid-template-columns: 28px minmax(0,1fr); align-items: center; margin-bottom: 4px; border: 1px solid transparent; border-radius: 3px; background: transparent; padding: 0 8px 0 0; }
178
+ .session-row.active { border-color: #11a4d4; background: rgba(17,164,212,.10); }
179
+ .session-toggle, .session-select { border: 0; background: transparent; border-radius: 0; padding: 0; }
180
+ .session-toggle { width: 28px; height: 32px; display: grid; place-items: center; color: #64748b; }
181
+ .session-toggle:hover { color: #11a4d4; border-color: transparent; }
182
+ .session-select { min-width: 0; display: grid; grid-template-columns: minmax(0,1fr) auto; gap: 7px; align-items: center; text-align: left; padding: 7px 0; }
183
+ .session-select:hover { border-color: transparent; }
184
+ .session-title { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 13px; color: #e2e8f0; }
185
+ .session-id { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 10px; color: #64748b; }
186
+ .status-dot { width: 7px; height: 7px; border-radius: 999px; background: #64748b; }
187
+ .status-dot.running { background: #0bda57; box-shadow: 0 0 10px rgba(11,218,87,.35); }
188
+ .status-dot.error { background: #ef4444; }
189
+ .main { min-height: 0; display: grid; grid-template-rows: auto 1fr auto; background: #101d22; }
190
+ .session-head { min-height: 58px; display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 10px 14px; border-bottom: 1px solid #1e293b; background: #151f24; }
191
+ .session-name { margin: 0; font-size: 16px; line-height: 1.2; }
192
+ .session-meta { margin-top: 4px; color: #64748b; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 11px; }
193
+ .trace-controls { display: flex; flex-wrap: wrap; gap: 6px; justify-content: flex-end; }
194
+ .content { min-height: 0; overflow: auto; padding: 14px; }
195
+ .trace-list { min-width: 620px; display: flex; flex-direction: column; gap: 9px; }
196
+ /* Ported from pydantic-tracing SpanNode/JsonRenderer visual structure. */
197
+ .span-card { border: 1px solid #334155; border-radius: 3px; background: #1a262b; overflow: hidden; }
198
+ .span-card.ok { border-color: rgba(11,218,87,.30); }
199
+ .span-card.running { border-color: rgba(17,164,212,.50); box-shadow: 0 0 10px rgba(17,164,212,.10); }
200
+ .span-card.error { border-color: rgba(255,107,0,.50); }
201
+ .span-card[data-span-type="tool.call"] { border-color: rgba(168,85,247,.52); }
202
+ .span-card[data-span-type="tool.result"] { border-color: rgba(34,197,94,.42); }
203
+ .span-card[data-span-type="model.reasoning"] { border-color: rgba(245,158,11,.48); }
204
+ .span-card[data-span-type="agent.delegation"] { border-color: rgba(249,115,22,.58); }
205
+ .span-card[data-span-type="user.prompt"] { border-color: rgba(6,182,212,.48); }
206
+ .span-header { width: 100%; display: grid; grid-template-columns: 18px 22px minmax(0,1fr) auto; align-items: center; gap: 8px; padding: 9px 10px; background: #151f24; border: 0; text-align: left; }
207
+ .span-card.ok > .span-header { background: rgba(11,218,87,.05); }
208
+ .span-card.running > .span-header { background: rgba(17,164,212,.05); }
209
+ .span-card.error > .span-header { background: rgba(255,107,0,.05); }
210
+ .span-chevron { color: #64748b; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 12px; }
211
+ .span-icon { width: 18px; height: 18px; display: grid; place-items: center; border-radius: 999px; background: rgba(17,164,212,.20); color: #11a4d4; font: 11px ui-monospace, SFMono-Regular, Menlo, monospace; }
212
+ .span-card[data-span-type="tool.call"] .span-icon { background: rgba(168,85,247,.20); color: #a855f7; }
213
+ .span-card[data-span-type="tool.result"] .span-icon { background: rgba(34,197,94,.20); color: #22c55e; }
214
+ .span-card[data-span-type="model.reasoning"] .span-icon { background: rgba(245,158,11,.20); color: #f59e0b; }
215
+ .span-card[data-span-type="agent.delegation"] .span-icon { background: rgba(249,115,22,.20); color: #f97316; }
216
+ .span-card[data-span-type="user.prompt"] .span-icon { background: rgba(6,182,212,.20); color: #06b6d4; }
217
+ .span-type-label { color: #cbd5e1; font-size: 11px; font-weight: 800; letter-spacing: .07em; text-transform: uppercase; }
218
+ .span-title { color: #94a3b8; font-size: 12px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
219
+ .span-meta { display: flex; align-items: center; gap: 6px; }
220
+ .span-body { display: none; border-top: 1px solid #1e293b; }
221
+ .span-card.open > .span-body { display: block; }
222
+ .span-actions { display: flex; flex-wrap: wrap; gap: 6px; padding: 8px 10px; border-bottom: 1px solid #1e293b; background: rgba(15,23,42,.18); }
223
+ .span-quote { padding: 14px; color: #cbd5e1; font: 13px/1.5 ui-monospace, SFMono-Regular, Menlo, monospace; white-space: pre-wrap; }
224
+ .span-code-well { padding: 12px 14px; background: #0e1116; border-bottom: 1px solid #1e293b; overflow: auto; }
225
+ .span-function { font: 12px/1.5 ui-monospace, SFMono-Regular, Menlo, monospace; color: #22c55e; white-space: pre-wrap; }
226
+ .syntax-keyword { color: #c084fc; }
227
+ .syntax-name { color: #fde047; }
228
+ .syntax-key { color: #60a5fa; }
229
+ .syntax-string { color: #86efac; }
230
+ .span-output-summary { display: flex; align-items: center; gap: 8px; min-width: 0; padding: 8px 14px; background: rgba(15,23,42,.28); border-bottom: 1px solid #1e293b; color: #94a3b8; font-size: 12px; }
231
+ .span-output-summary code { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: #cbd5e1; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; }
232
+ .span-section { padding: 12px 14px; background: #0e1116; border-top: 1px solid rgba(51,65,85,.55); }
233
+ .span-section-title { margin-bottom: 7px; color: #60a5fa; font-size: 10px; font-weight: 800; letter-spacing: .08em; text-transform: uppercase; }
234
+ .span-section-title.output { color: #22c55e; }
235
+ .reasoning-block { padding: 14px; background: rgba(245,158,11,.06); color: #cbd5e1; font: 13px/1.5 ui-monospace, SFMono-Regular, Menlo, monospace; white-space: pre-wrap; }
236
+ .reasoning-comment { color: rgba(245,158,11,.75); }
237
+ .delegation-card { padding: 14px; background: rgba(249,115,22,.06); border-bottom: 1px solid rgba(249,115,22,.20); }
238
+ .delegation-title { display: flex; align-items: center; gap: 8px; margin-bottom: 8px; color: #f97316; font-size: 13px; font-weight: 700; }
239
+ .delegation-query { color: #94a3b8; font: 12px/1.45 ui-monospace, SFMono-Regular, Menlo, monospace; }
240
+ .json-renderer { margin: 0; max-height: 24rem; overflow: auto; white-space: pre-wrap; color: #dbeafe; font: 12px/1.45 ui-monospace, SFMono-Regular, Menlo, monospace; }
241
+ .trace-node { border: 1px solid #334155; border-radius: 3px; background: #1a262b; overflow: hidden; }
242
+ .trace-node[data-type="user.message"] { border-color: rgba(6,182,212,.42); }
243
+ .trace-node[data-type="assistant.message"] { border-color: rgba(34,197,94,.35); }
244
+ .trace-node[data-type="model.reasoning"] { border-color: rgba(245,158,11,.45); }
245
+ .trace-node[data-type="tool.call"] { border-color: rgba(168,85,247,.45); }
246
+ .trace-node[data-type="agent.delegation"] { border-color: rgba(249,115,22,.55); }
247
+ .trace-node[data-type="agent.async"] { border-color: rgba(249,115,22,.55); }
248
+ .trace-node[data-type="execution.command"] { border-color: rgba(17,164,212,.42); }
249
+ .trace-node[data-type="error"] { border-color: rgba(239,68,68,.65); }
250
+ .trace-header { width: 100%; display: grid; grid-template-columns: 22px 1fr auto; align-items: center; gap: 8px; padding: 9px 10px; background: #151f24; border: 0; text-align: left; }
251
+ .trace-icon { width: 18px; height: 18px; display: grid; place-items: center; border-radius: 999px; background: rgba(17,164,212,.14); color: #11a4d4; font-size: 11px; }
252
+ .trace-label { color: #cbd5e1; font-size: 11px; font-weight: 800; letter-spacing: .07em; text-transform: uppercase; }
253
+ .trace-summary { margin-top: 3px; color: #94a3b8; font-size: 12px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
254
+ .trace-actions { display: flex; align-items: center; gap: 6px; }
255
+ .badge { border: 1px solid #334155; border-radius: 999px; padding: 2px 6px; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 10px; color: #94a3b8; }
256
+ .badge.running { color: #0bda57; border-color: rgba(11,218,87,.35); }
257
+ .badge.error { color: #ef4444; border-color: rgba(239,68,68,.45); }
258
+ .trace-body { display: none; padding: 10px; border-top: 1px solid #1e293b; }
259
+ .trace-node.open > .trace-body { display: block; }
260
+ .payload { margin: 0; white-space: pre-wrap; overflow: auto; max-height: 360px; padding: 10px; border: 1px solid #1e293b; border-radius: 3px; background: #0e1116; color: #dbeafe; font: 12px/1.45 ui-monospace, SFMono-Regular, Menlo, monospace; }
261
+ .children { display: flex; flex-direction: column; gap: 8px; margin-top: 10px; padding-left: 12px; border-left: 1px solid #334155; }
262
+ .composer-wrap { position: relative; padding: 10px 12px; border-top: 1px solid #1e293b; background: #151f24; }
263
+ .composer { display: grid; grid-template-columns: 1fr auto; gap: 8px; }
264
+ textarea { width: 100%; min-height: 48px; max-height: 150px; resize: vertical; border: 1px solid #334155; border-radius: 3px; padding: 10px; background: #0e1116; color: #e2e8f0; }
265
+ .command-menu { position: absolute; left: 12px; bottom: 74px; width: min(520px, calc(100% - 24px)); max-height: 280px; overflow: auto; background: #0e1116; border: 1px solid #11a4d4; border-radius: 3px; box-shadow: 0 12px 30px rgba(0,0,0,.35); z-index: 20; }
266
+ .command-item { display: grid; grid-template-columns: 120px 1fr; gap: 10px; width: 100%; padding: 9px 10px; border: 0; border-bottom: 1px solid #1e293b; text-align: left; background: transparent; }
267
+ .command-item.active { background: rgba(17,164,212,.13); }
268
+ .command-name { color: #11a4d4; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; }
269
+ .command-desc { color: #94a3b8; font-size: 12px; }
270
+ .inspector-log { padding: 10px; display: flex; flex-direction: column; gap: 8px; }
271
+ .raw-event { border-left: 2px solid #11a4d4; padding: 8px; background: #151f24; }
272
+ .raw-event-type { color: #11a4d4; font: 11px ui-monospace, SFMono-Regular, Menlo, monospace; margin-bottom: 5px; }
273
+ .placeholder { padding: 18px; color: #94a3b8; }
274
+ .modal-backdrop { position: fixed; inset: 0; display: grid; place-items: center; background: rgba(0,0,0,.62); z-index: 50; }
275
+ .modal { width: min(420px, calc(100vw - 32px)); border: 1px solid #334155; border-radius: 4px; background: #1a262b; padding: 16px; }
276
+ .modal h2 { margin: 0 0 8px; font-size: 15px; }
277
+ .modal p { margin: 0 0 14px; color: #94a3b8; font-size: 13px; }
278
+ .modal-actions { display: flex; justify-content: flex-end; gap: 8px; }
279
+ .hidden { display: none !important; }
280
+ @media (max-width: 980px) {
281
+ .workspace { grid-template-columns: 240px minmax(0,1fr); }
282
+ .inspector { display: none; }
283
+ }
284
+ @media (max-width: 720px) {
285
+ body { overflow: auto; }
286
+ .app { height: auto; min-height: 100vh; }
287
+ .topbar { flex-wrap: wrap; height: auto; min-height: 56px; padding: 10px; }
288
+ .workspace { grid-template-columns: 1fr; }
289
+ .sidebar { max-height: 260px; }
290
+ .main { min-height: 70vh; }
291
+ .trace-list { min-width: 0; }
292
+ .composer { grid-template-columns: 1fr; }
293
+ }
294
+ </style>
295
+ </head>
296
+ <body>
297
+ <div class="app">
298
+ <header class="topbar">
299
+ <div class="brand">Pibo Chat <span class="fallback-badge" title="Built React Chat assets are unavailable">Fallback UI</span></div>
300
+ <nav class="tabs">
301
+ <button class="tab active" data-area="sessions">Sessions</button>
302
+ <button class="tab" data-area="agents">Agents</button>
303
+ <button class="tab" data-area="settings">Settings</button>
304
+ </nav>
305
+ <div class="userbar" id="user"></div>
306
+ </header>
307
+ <div class="workspace">
308
+ <aside class="sidebar">
309
+ <div class="panel-head">
310
+ <span id="sidebar-title">Sessions</span>
311
+ <div class="panel-actions">
312
+ <button class="ghost icon-button" id="new-session" title="New Session" aria-label="New Session">+</button>
313
+ <button class="ghost" id="refresh">Refresh</button>
314
+ </div>
315
+ </div>
316
+ <div class="session-tree" id="session-tree"></div>
317
+ </aside>
318
+ <main class="main">
319
+ <div class="session-head">
320
+ <div>
321
+ <h1 class="session-name" id="session-title">Loading</h1>
322
+ <div class="session-meta" id="session-meta"></div>
323
+ </div>
324
+ <div class="trace-controls">
325
+ <button class="ghost" id="thinking-toggle">Thinking Off</button>
326
+ <button class="ghost" id="collapse-all">Collapse All</button>
327
+ <button class="ghost" id="expand-one">Depth 1</button>
328
+ <button class="ghost" id="expand-all">Expand All</button>
329
+ </div>
330
+ </div>
331
+ <section class="content" id="content"></section>
332
+ <div class="composer-wrap" id="composer-wrap">
333
+ <div class="command-menu hidden" id="command-menu"></div>
334
+ <form class="composer" id="composer">
335
+ <textarea id="message" name="message" placeholder="Send Message (/ for commands or $ for skills)"></textarea>
336
+ <button class="primary" type="submit">Send</button>
337
+ </form>
338
+ </div>
339
+ </main>
340
+ <aside class="inspector">
341
+ <div class="panel-head"><span>Raw Events</span><button class="ghost" id="clear-local">Clear UI</button></div>
342
+ <div class="inspector-log" id="raw-log"></div>
343
+ </aside>
344
+ </div>
345
+ </div>
346
+ <div class="modal-backdrop hidden" id="fork-modal">
347
+ <div class="modal">
348
+ <h2>Zur geforkten Session wechseln?</h2>
349
+ <p>Der Fork wurde erstellt. Wenn du wechselst, wird die neue Session geladen.</p>
350
+ <div class="modal-actions">
351
+ <button id="fork-stay">Nein</button>
352
+ <button class="primary" id="fork-switch">Ja</button>
353
+ </div>
354
+ </div>
355
+ </div>
356
+ <script>
357
+ const userEl = document.querySelector("#user");
358
+ const sessionTreeEl = document.querySelector("#session-tree");
359
+ const sessionTitleEl = document.querySelector("#session-title");
360
+ const sessionMetaEl = document.querySelector("#session-meta");
361
+ const contentEl = document.querySelector("#content");
362
+ const rawLogEl = document.querySelector("#raw-log");
363
+ const composer = document.querySelector("#composer");
364
+ const messageInput = document.querySelector("#message");
365
+ const commandMenu = document.querySelector("#command-menu");
366
+ const forkModal = document.querySelector("#fork-modal");
367
+ const newSessionButton = document.querySelector("#new-session");
368
+ let eventSource;
369
+ let bootstrap;
370
+ let selectedPiboSessionId;
371
+ let area = "sessions";
372
+ let pendingForkResult;
373
+ let pendingForkComposerText;
374
+ let showThinking = localStorage.getItem("pibo.chat.showThinking") === "true";
375
+ let selectedAgentProfile = localStorage.getItem("pibo.chat.newSessionProfile") || "";
376
+ let openNodes = new Set(JSON.parse(localStorage.getItem("pibo.chat.openNodes") || "[]"));
377
+ let openSessionNodes = new Set();
378
+ let commandIndex = 0;
379
+
380
+ function saveOpenNodes() {
381
+ localStorage.setItem("pibo.chat.openNodes", JSON.stringify(Array.from(openNodes)));
382
+ }
383
+ function escapeText(value) {
384
+ return String(value == null ? "" : value).replace(/[&<>"']/g, function(ch) {
385
+ return { "&": "&amp;", "<": "&lt;", ">": "&gt;", '"': "&quot;", "'": "&#39;" }[ch];
386
+ });
387
+ }
388
+ function pretty(value) {
389
+ if (value == null || value === "") return "";
390
+ if (typeof value === "string") return value;
391
+ try { return JSON.stringify(value, null, 2); } catch { return String(value); }
392
+ }
393
+ function short(value, n) {
394
+ const text = String(value || "").replace(/\\s+/g, " ").trim();
395
+ return text.length > n ? text.slice(0, n - 1) + "…" : text;
396
+ }
397
+ function nodeLabel(type) {
398
+ return {
399
+ "user.message": "User Message",
400
+ "assistant.message": "Agent Message",
401
+ "agent.turn": "Agent Turn",
402
+ "model.reasoning": "Reasoning",
403
+ "tool.call": "Tool Call",
404
+ "tool.result": "Tool Result",
405
+ "agent.delegation": "Agent Delegation",
406
+ "agent.async": "Async Agent",
407
+ "execution.command": "Execution Command",
408
+ "yielded.run": "Yielded Run",
409
+ "error": "Error"
410
+ }[type] || type;
411
+ }
412
+ function nodeIcon(type) {
413
+ return {
414
+ "user.message": "U",
415
+ "assistant.message": "A",
416
+ "agent.turn": "R",
417
+ "model.reasoning": "?",
418
+ "tool.call": "T",
419
+ "tool.result": "O",
420
+ "agent.delegation": "D",
421
+ "agent.async": "A",
422
+ "execution.command": "$",
423
+ "yielded.run": "Y",
424
+ "error": "!"
425
+ }[type] || "*";
426
+ }
427
+ function spanType(type) {
428
+ return {
429
+ "user.message": "user.prompt",
430
+ "assistant.message": "model.response",
431
+ "agent.turn": "agent.run",
432
+ "model.reasoning": "model.reasoning",
433
+ "tool.call": "tool.call",
434
+ "tool.result": "tool.result",
435
+ "agent.delegation": "agent.delegation",
436
+ "agent.async": "agent.async",
437
+ "execution.command": "tool.result",
438
+ "yielded.run": "tool.call",
439
+ "error": "tool.result"
440
+ }[type] || "agent.run";
441
+ }
442
+ function spanLabel(type) {
443
+ const mapped = spanType(type);
444
+ return {
445
+ "agent.run": "Agent Run",
446
+ "tool.call": "Tool Call",
447
+ "tool.result": "Tool Result",
448
+ "model.response": "Model Response",
449
+ "model.reasoning": "Reasoning",
450
+ "agent.delegation": "Agent Delegation",
451
+ "agent.async": "Async Agent",
452
+ "user.prompt": "User Prompt"
453
+ }[mapped] || mapped;
454
+ }
455
+ function spanStatusClass(status) {
456
+ if (status === "error") return "error";
457
+ if (status === "running") return "running";
458
+ return "ok";
459
+ }
460
+ function renderJson(value) {
461
+ return '<pre class="json-renderer">' + escapeText(pretty(value)) + '</pre>';
462
+ }
463
+ function functionSignature(name, args) {
464
+ const input = args && typeof args === "object" && !Array.isArray(args) ? args : {};
465
+ const params = Object.entries(input).map(function(entry) {
466
+ const key = entry[0];
467
+ const value = entry[1];
468
+ const raw = typeof value === "string" ? "'" + short(value, 50) + "'" : short(pretty(value), 50);
469
+ return '<span class="syntax-key">' + escapeText(key) + '</span>=<span class="syntax-string">' + escapeText(raw) + '</span>';
470
+ }).join(", ");
471
+ return '<code class="span-function"><span class="syntax-keyword">def</span> <span class="syntax-name">' + escapeText(name || "tool") + '</span>(' + params + ')</code>';
472
+ }
473
+ function renderSpanContent(node) {
474
+ const actionHtml = [];
475
+ if (node.type === "user.message" && node.entryId) actionHtml.push('<button class="ghost fork-button" data-entry-id="' + escapeText(node.entryId) + '">Fork From Here</button>');
476
+ if (node.linkedPiboSessionId) actionHtml.push('<button class="ghost session-link" data-pibo-session-id="' + escapeText(node.linkedPiboSessionId) + '">Open Child Session</button>');
477
+ const actions = actionHtml.length ? '<div class="span-actions">' + actionHtml.join("") + '</div>' : "";
478
+
479
+ if (node.type === "user.message") {
480
+ return actions + '<div class="span-quote">' + escapeText(node.output || node.summary || "") + '</div>';
481
+ }
482
+ if (node.type === "assistant.message") {
483
+ return actions + '<div class="span-section"><div class="span-section-title output">Structured Output</div>' + renderJson(node.output || node.summary || "") + '</div>';
484
+ }
485
+ if (node.type === "model.reasoning") {
486
+ return actions + '<div class="reasoning-block"><span class="reasoning-comment">// Model reasoning</span>\\n' + escapeText(node.output || node.summary || "") + '</div>';
487
+ }
488
+ if (node.type === "tool.call" || node.type === "yielded.run") {
489
+ return actions +
490
+ '<div class="span-code-well">' + functionSignature(node.title, node.input || {}) + '</div>' +
491
+ (node.output !== undefined ? '<div class="span-output-summary"><span>Output:</span><code>' + escapeText(short(pretty(node.output), 120)) + '</code></div>' : "") +
492
+ '<div class="span-section"><div class="span-section-title">Input</div>' + renderJson(node.input || {}) + '</div>' +
493
+ (node.output !== undefined ? '<div class="span-section"><div class="span-section-title output">Output</div>' + renderJson(node.output) + '</div>' : "");
494
+ }
495
+ if (node.type === "tool.result" || node.type === "execution.command") {
496
+ return actions + '<div class="span-section"><div class="span-section-title output">Output</div>' + renderJson(node.output || node.input || "") + '</div>';
497
+ }
498
+ if (node.type === "agent.delegation") {
499
+ return actions +
500
+ '<div class="delegation-card"><div class="delegation-title">Agent Delegation · ' + escapeText(node.title || "subagent") + '</div><div class="delegation-query">' + escapeText(short(node.summary || pretty(node.input), 220)) + '</div></div>' +
501
+ '<div class="span-section"><div class="span-section-title">Input</div>' + renderJson(node.input || {}) + '</div>' +
502
+ (node.output !== undefined ? '<div class="span-section"><div class="span-section-title output">Output</div>' + renderJson(node.output) + '</div>' : "");
503
+ }
504
+ if (node.type === "agent.async") {
505
+ const input = node.input && typeof node.input === "object" ? node.input : {};
506
+ const startedBy = input.startedBy || "pibo_run_start";
507
+ const runId = input.runId || node.runId || "";
508
+ return actions +
509
+ '<div class="delegation-card"><div class="delegation-title">Async Agent · ' + escapeText(node.title || "subagent") + '</div><div class="delegation-query">Started by ' + escapeText(startedBy) + (runId ? ' · ' + escapeText(runId) : "") + '</div></div>' +
510
+ '<div class="span-section"><div class="span-section-title">Input</div>' + renderJson(node.input || {}) + '</div>' +
511
+ (node.output !== undefined ? '<div class="span-section"><div class="span-section-title output">Run</div>' + renderJson(node.output) + '</div>' : "");
512
+ }
513
+ if (node.type === "error") {
514
+ return actions + '<div class="span-section"><div class="span-section-title">Error</div>' + renderJson(node.error || node.output || "") + '</div>';
515
+ }
516
+ return actions + '<div class="span-section">' + renderJson(node.output || node.input || node.summary || "") + '</div>';
517
+ }
518
+
519
+ async function signIn() {
520
+ const response = await fetch("/api/auth/sign-in/social", {
521
+ method: "POST",
522
+ headers: { "content-type": "application/json" },
523
+ body: JSON.stringify({ provider: "google", callbackURL: "/apps/chat", disableRedirect: true }),
524
+ });
525
+ const data = await response.json();
526
+ if (!response.ok || !data.url) {
527
+ renderSignedOut(data.message || data.error || "Could not start Google sign in.");
528
+ return;
529
+ }
530
+ location.href = data.url;
531
+ }
532
+
533
+ async function clearAuthSession() {
534
+ await fetch("/api/auth/sign-out", {
535
+ method: "POST",
536
+ credentials: "same-origin",
537
+ headers: { "content-type": "application/json" },
538
+ body: "{}",
539
+ });
540
+ }
541
+
542
+ async function signOut() {
543
+ await clearAuthSession();
544
+ location.reload();
545
+ }
546
+
547
+ function renderSignedOut(message) {
548
+ userEl.replaceChildren();
549
+ sessionTreeEl.innerHTML = "";
550
+ contentEl.innerHTML = '<div class="placeholder">' + escapeText(message || "Sign in to start a Pibo session.") + '</div>';
551
+ composer.closest(".composer-wrap").classList.add("hidden");
552
+ const button = document.createElement("button");
553
+ button.className = "primary";
554
+ button.textContent = "Sign in with Google";
555
+ button.addEventListener("click", signIn);
556
+ userEl.append(button);
557
+ sessionTitleEl.textContent = "Signed Out";
558
+ sessionMetaEl.textContent = "";
559
+ }
560
+
561
+ function renderSignedIn(data) {
562
+ userEl.replaceChildren();
563
+ const label = document.createElement("span");
564
+ label.textContent = data.identity.email || data.identity.name || data.identity.userId;
565
+ userEl.append(label);
566
+ const button = document.createElement("button");
567
+ button.textContent = "Sign out";
568
+ button.addEventListener("click", signOut);
569
+ userEl.append(button);
570
+ composer.closest(".composer-wrap").classList.remove("hidden");
571
+ }
572
+
573
+ function connectEvents() {
574
+ if (eventSource) eventSource.close();
575
+ if (!selectedPiboSessionId) return;
576
+ eventSource = new EventSource("/api/chat/events?piboSessionId=" + encodeURIComponent(selectedPiboSessionId));
577
+ eventSource.addEventListener("pibo", (event) => {
578
+ const payload = JSON.parse(event.data);
579
+ appendRawEvent({ type: payload.type, payload });
580
+ if (payload.type !== "TEXT_MESSAGE_CONTENT" && payload.type !== "REASONING_MESSAGE_CONTENT") {
581
+ void refreshTrace();
582
+ }
583
+ });
584
+ eventSource.onerror = () => appendRawEvent({ type: "stream_error", payload: "Event stream disconnected." });
585
+ }
586
+
587
+ async function loadSession() {
588
+ const response = await fetch("/api/chat/bootstrap");
589
+ if (response.status === 401) {
590
+ renderSignedOut();
591
+ return;
592
+ }
593
+ const data = await response.json();
594
+ if (response.status === 403) {
595
+ await clearAuthSession().catch(() => {});
596
+ renderSignedOut("Not authorized. Sign in with an allowed Google account.");
597
+ return;
598
+ }
599
+ if (!response.ok) {
600
+ renderSignedOut(data.error || "Could not load session.");
601
+ return;
602
+ }
603
+ bootstrap = data;
604
+ selectedPiboSessionId = selectedPiboSessionId || data.selectedPiboSessionId;
605
+ ensureSelectedAgentProfile();
606
+ renderSignedIn(data);
607
+ renderArea();
608
+ connectEvents();
609
+ }
610
+
611
+ function ensureSelectedAgentProfile() {
612
+ const agents = (bootstrap && bootstrap.agents) || [];
613
+ if (!agents.length) return "";
614
+ const exists = agents.some(function(agent) {
615
+ return agent.name === selectedAgentProfile || (agent.aliases || []).includes(selectedAgentProfile);
616
+ });
617
+ if (!selectedAgentProfile || !exists) {
618
+ selectedAgentProfile = bootstrap.session && bootstrap.session.profile || agents[0].name;
619
+ }
620
+ localStorage.setItem("pibo.chat.newSessionProfile", selectedAgentProfile);
621
+ return selectedAgentProfile;
622
+ }
623
+
624
+ function renderArea() {
625
+ document.querySelectorAll(".tab").forEach(function(tab) {
626
+ tab.classList.toggle("active", tab.dataset.area === area);
627
+ });
628
+ document.querySelector("#sidebar-title").textContent = area[0].toUpperCase() + area.slice(1);
629
+ newSessionButton.classList.toggle("hidden", area !== "sessions");
630
+ if (area === "sessions") {
631
+ renderSessions();
632
+ void refreshTrace();
633
+ return;
634
+ }
635
+ if (area === "agents") {
636
+ renderAgents();
637
+ return;
638
+ }
639
+ renderSettings();
640
+ }
641
+ function renderSessions() {
642
+ sessionTreeEl.innerHTML = "";
643
+ (bootstrap.sessions || []).forEach(function(node) { sessionTreeEl.append(renderSessionNode(node, 0)); });
644
+ }
645
+ function renderSessionNode(node, depth) {
646
+ const children = node.children || [];
647
+ const hasChildren = children.length > 0;
648
+ if (sessionTreeHasSession(children, selectedPiboSessionId)) {
649
+ openSessionNodes.add(node.piboSessionId);
650
+ }
651
+ const expanded = openSessionNodes.has(node.piboSessionId);
652
+ const wrap = document.createElement("div");
653
+ const row = document.createElement("div");
654
+ row.className = "session-row" + (node.piboSessionId === selectedPiboSessionId ? " active" : "");
655
+ row.style.paddingLeft = 8 + depth * 14 + "px";
656
+ row.title = (node.title || "Untitled Session") + "\\n" + node.piboSessionId;
657
+ if (hasChildren) {
658
+ const toggle = document.createElement("button");
659
+ toggle.type = "button";
660
+ toggle.className = "session-toggle";
661
+ toggle.textContent = expanded ? "v" : ">";
662
+ toggle.setAttribute("aria-expanded", String(expanded));
663
+ toggle.setAttribute("aria-label", expanded ? "Collapse Subsessions" : "Expand Subsessions");
664
+ toggle.title = expanded ? "Collapse Subsessions" : "Expand Subsessions";
665
+ toggle.addEventListener("click", function() {
666
+ if (openSessionNodes.has(node.piboSessionId)) openSessionNodes.delete(node.piboSessionId);
667
+ else openSessionNodes.add(node.piboSessionId);
668
+ renderSessions();
669
+ });
670
+ row.append(toggle);
671
+ } else {
672
+ row.append(document.createElement("span"));
673
+ }
674
+ const select = document.createElement("button");
675
+ select.type = "button";
676
+ select.className = "session-select";
677
+ select.innerHTML =
678
+ '<span><span class="session-title">' + escapeText(node.title) + '</span><span class="session-id">' + escapeText(node.piboSessionId) + '</span></span>' +
679
+ '<span class="status-dot ' + escapeText(node.status) + '"></span>';
680
+ select.addEventListener("click", function() { selectSession(node.piboSessionId); });
681
+ row.append(select);
682
+ wrap.append(row);
683
+ if (expanded) children.forEach(function(child) { wrap.append(renderSessionNode(child, depth + 1)); });
684
+ return wrap;
685
+ }
686
+ function sessionTreeHasSession(nodes, piboSessionId) {
687
+ return (nodes || []).some(function(node) {
688
+ return node.piboSessionId === piboSessionId || sessionTreeHasSession(node.children, piboSessionId);
689
+ });
690
+ }
691
+ async function selectSession(piboSessionId) {
692
+ selectedPiboSessionId = piboSessionId;
693
+ connectEvents();
694
+ await refreshBootstrap(false);
695
+ renderArea();
696
+ }
697
+ async function createSession(profile) {
698
+ const selectedProfile = profile || ensureSelectedAgentProfile();
699
+ const created = await postJson("/api/chat/sessions", selectedProfile ? { profile: selectedProfile } : {});
700
+ selectedPiboSessionId = created.session && created.session.id;
701
+ connectEvents();
702
+ await refreshBootstrap(false);
703
+ renderArea();
704
+ }
705
+ async function refreshBootstrap(keepTrace) {
706
+ const response = await fetch("/api/chat/bootstrap?piboSessionId=" + encodeURIComponent(selectedPiboSessionId || ""));
707
+ if (!response.ok) return;
708
+ bootstrap = await response.json();
709
+ selectedPiboSessionId = bootstrap.selectedPiboSessionId;
710
+ if (!keepTrace) renderSessions();
711
+ }
712
+ async function refreshTrace() {
713
+ if (!selectedPiboSessionId) return;
714
+ const response = await fetch("/api/chat/trace?piboSessionId=" + encodeURIComponent(selectedPiboSessionId) + "&includeRawEvents=true&rawEventsLimit=80");
715
+ if (!response.ok) return;
716
+ const trace = await response.json();
717
+ sessionTitleEl.textContent = trace.title || selectedPiboSessionId;
718
+ sessionMetaEl.textContent = trace.piboSessionId + " · " + trace.piSessionId;
719
+ renderTrace(trace.nodes || []);
720
+ renderRawEvents(trace.rawEvents || []);
721
+ }
722
+ function renderTrace(nodes) {
723
+ const visible = nodes.filter(function(node) { return showThinking || node.type !== "model.reasoning"; });
724
+ if (!visible.length) {
725
+ contentEl.innerHTML = '<div class="placeholder">No trace events yet.</div>';
726
+ return;
727
+ }
728
+ const list = document.createElement("div");
729
+ list.className = "trace-list";
730
+ visible.forEach(function(node) { list.append(renderTraceNode(node, 0)); });
731
+ contentEl.replaceChildren(list);
732
+ }
733
+ function renderTraceNode(node, depth) {
734
+ const wrapper = document.createElement("article");
735
+ const mappedSpanType = spanType(node.type);
736
+ wrapper.className = "span-card " + spanStatusClass(node.status) + (openNodes.has(node.id) ? " open" : "");
737
+ wrapper.dataset.spanType = mappedSpanType;
738
+ wrapper.dataset.nodeId = node.id;
739
+ wrapper.style.marginLeft = Math.min(depth * 12, 96) + "px";
740
+ const header = document.createElement("button");
741
+ header.className = "span-header";
742
+ const statusClass = node.status === "running" ? "running" : node.status === "error" ? "error" : "";
743
+ header.innerHTML =
744
+ '<span class="span-chevron">' + (openNodes.has(node.id) ? "v" : ">") + '</span>' +
745
+ '<span class="span-icon">' + escapeText(nodeIcon(node.type)) + '</span>' +
746
+ '<span><span class="span-type-label">' + escapeText(spanLabel(node.type)) + '</span><span class="span-title">' + escapeText(node.title || "") + (node.summary ? " · " + escapeText(short(node.summary, 160)) : "") + '</span></span>' +
747
+ '<span class="span-meta"><span class="badge ' + statusClass + '">' + escapeText(node.status) + '</span></span>';
748
+ header.addEventListener("click", function() {
749
+ if (openNodes.has(node.id)) openNodes.delete(node.id); else openNodes.add(node.id);
750
+ saveOpenNodes();
751
+ wrapper.classList.toggle("open");
752
+ header.querySelector(".span-chevron").textContent = wrapper.classList.contains("open") ? "v" : ">";
753
+ });
754
+ wrapper.append(header);
755
+ const body = document.createElement("div");
756
+ body.className = "span-body";
757
+ body.innerHTML = renderSpanContent(node);
758
+ body.querySelectorAll(".fork-button").forEach(function(button) {
759
+ button.addEventListener("click", function(event) {
760
+ event.stopPropagation();
761
+ void forkFrom(button.dataset.entryId);
762
+ });
763
+ });
764
+ body.querySelectorAll(".session-link").forEach(function(button) {
765
+ button.addEventListener("click", function(event) {
766
+ event.stopPropagation();
767
+ void selectSession(button.dataset.piboSessionId);
768
+ });
769
+ });
770
+ if (node.children && node.children.length) {
771
+ const childWrap = document.createElement("div");
772
+ childWrap.className = "children span-children";
773
+ node.children.filter(function(child) { return showThinking || child.type !== "model.reasoning"; }).forEach(function(child) {
774
+ childWrap.append(renderTraceNode(child, depth + 1));
775
+ });
776
+ body.append(childWrap);
777
+ }
778
+ wrapper.append(body);
779
+ return wrapper;
780
+ }
781
+ function appendRawEvent(event) {
782
+ const item = document.createElement("div");
783
+ item.className = "raw-event";
784
+ item.innerHTML = '<div class="raw-event-type">' + escapeText(event.type) + '</div><pre class="payload">' + escapeText(pretty(event.payload)) + '</pre>';
785
+ rawLogEl.prepend(item);
786
+ }
787
+ function renderRawEvents(events) {
788
+ rawLogEl.innerHTML = "";
789
+ events.slice(-80).reverse().forEach(appendRawEvent);
790
+ }
791
+ function renderAgents() {
792
+ sessionTitleEl.textContent = "Agents";
793
+ sessionMetaEl.textContent = "Profile selection";
794
+ const agents = (bootstrap && bootstrap.agents) || [];
795
+ ensureSelectedAgentProfile();
796
+ sessionTreeEl.innerHTML = agents.map(function(agent) {
797
+ const active = agent.name === selectedAgentProfile ? " active" : "";
798
+ return '<button class="session-row' + active + '" data-profile="' + escapeText(agent.name) + '"><span></span><span><span class="session-title">' + escapeText(agent.name) + '</span><span class="session-id">' + escapeText((agent.aliases || []).join(", ") || "profile") + '</span></span><span class="status-dot"></span></button>';
799
+ }).join("");
800
+ sessionTreeEl.querySelectorAll("[data-profile]").forEach(function(button) {
801
+ button.addEventListener("click", function() {
802
+ selectedAgentProfile = button.dataset.profile;
803
+ localStorage.setItem("pibo.chat.newSessionProfile", selectedAgentProfile);
804
+ renderAgents();
805
+ });
806
+ });
807
+ contentEl.innerHTML = '<div class="trace-list">' + agents.map(function(agent) {
808
+ const selected = agent.name === selectedAgentProfile ? "selected" : "available";
809
+ return '<article class="trace-node open" data-type="agent.turn"><div class="trace-header"><span class="trace-icon">A</span><span><span class="trace-label">' + escapeText(agent.name) + '</span><span class="trace-summary">' + escapeText(agent.description || "No description") + '</span></span><span class="trace-actions"><button class="ghost profile-select" data-profile="' + escapeText(agent.name) + '">' + selected + '</button><button class="ghost profile-create" data-profile="' + escapeText(agent.name) + '">New Session</button></span></div><div class="trace-body"><pre class="payload">' + escapeText(pretty(agent)) + '</pre></div></article>';
810
+ }).join("") + '</div>';
811
+ contentEl.querySelectorAll(".profile-select").forEach(function(button) {
812
+ button.addEventListener("click", function() {
813
+ selectedAgentProfile = button.dataset.profile;
814
+ localStorage.setItem("pibo.chat.newSessionProfile", selectedAgentProfile);
815
+ renderAgents();
816
+ });
817
+ });
818
+ contentEl.querySelectorAll(".profile-create").forEach(function(button) {
819
+ button.addEventListener("click", function() {
820
+ selectedAgentProfile = button.dataset.profile;
821
+ localStorage.setItem("pibo.chat.newSessionProfile", selectedAgentProfile);
822
+ void createSession(selectedAgentProfile);
823
+ });
824
+ });
825
+ }
826
+ function renderSettings() {
827
+ sessionTitleEl.textContent = "Settings";
828
+ sessionMetaEl.textContent = "Browser-local V1 settings";
829
+ sessionTreeEl.innerHTML = '<div class="placeholder">Settings navigation placeholder.</div>';
830
+ contentEl.innerHTML = '<div class="placeholder">Thinking display and trace expansion state are stored in this browser.</div>';
831
+ }
832
+ function availableCommands() {
833
+ const actions = (bootstrap && bootstrap.capabilities && bootstrap.capabilities.actions) || [];
834
+ const commands = [];
835
+ actions.forEach(function(action) {
836
+ (action.slashCommands || []).forEach(function(command) {
837
+ if (command !== "tree") commands.push({ slash: "/" + command, action: action.name, description: action.description || action.name });
838
+ });
839
+ });
840
+ commands.push({ slash: "/thinking-show", action: "thinking-show", description: "Toggle historical thinking display in this browser." });
841
+ return commands;
842
+ }
843
+ function renderCommandMenu() {
844
+ const query = messageInput.value.trim();
845
+ if (!query.startsWith("/")) { commandMenu.classList.add("hidden"); return; }
846
+ const commands = availableCommands().filter(function(command) { return command.slash.startsWith(query.split(/\\s+/)[0]); });
847
+ if (!commands.length) { commandMenu.classList.add("hidden"); return; }
848
+ commandIndex = Math.min(commandIndex, commands.length - 1);
849
+ commandMenu.innerHTML = "";
850
+ commands.forEach(function(command, index) {
851
+ const item = document.createElement("button");
852
+ item.type = "button";
853
+ item.className = "command-item" + (index === commandIndex ? " active" : "");
854
+ item.innerHTML = '<span class="command-name">' + escapeText(command.slash) + '</span><span class="command-desc">' + escapeText(command.description) + '</span>';
855
+ item.addEventListener("click", function() { void runCommand(command); });
856
+ commandMenu.append(item);
857
+ });
858
+ commandMenu.classList.remove("hidden");
859
+ }
860
+ async function runCommand(command) {
861
+ commandMenu.classList.add("hidden");
862
+ const text = messageInput.value.trim();
863
+ messageInput.value = "";
864
+ if (command.action === "thinking-show") {
865
+ showThinking = !showThinking;
866
+ localStorage.setItem("pibo.chat.showThinking", String(showThinking));
867
+ updateThinkingButton();
868
+ await refreshTrace();
869
+ return;
870
+ }
871
+ const commandArgs = text.slice(command.slash.length).trim();
872
+ const params = command.action === "thinking" && commandArgs
873
+ ? { level: commandArgs.split(/\\s+/, 1)[0] }
874
+ : command.action === "compact" && commandArgs
875
+ ? { customInstructions: commandArgs }
876
+ : undefined;
877
+ const result = await postJson("/api/chat/action", { piboSessionId: selectedPiboSessionId, action: command.action, params: params });
878
+ appendRawEvent({ type: "command_result", payload: result });
879
+ if (command.action === "session.clone" && result && result.result && result.result.piboSessionId) {
880
+ await selectSession(result.result.piboSessionId);
881
+ }
882
+ }
883
+ async function forkFrom(entryId) {
884
+ const result = await postJson("/api/chat/action", { piboSessionId: selectedPiboSessionId, action: "session.fork", params: { entryId: entryId } });
885
+ appendRawEvent({ type: "fork_result", payload: result });
886
+ pendingForkResult = result && result.result ? result.result : undefined;
887
+ const selectedText = pendingForkResult && typeof pendingForkResult.selectedText === "string" ? pendingForkResult.selectedText : undefined;
888
+ if (pendingForkResult && pendingForkResult.piboSessionId) {
889
+ await selectSession(pendingForkResult.piboSessionId);
890
+ } else {
891
+ await refreshBootstrap(false);
892
+ await refreshTrace();
893
+ }
894
+ if (selectedText !== undefined) {
895
+ messageInput.value = selectedText;
896
+ messageInput.focus();
897
+ }
898
+ }
899
+ async function postJson(url, payload) {
900
+ const response = await fetch(url, { method: "POST", headers: { "content-type": "application/json" }, body: JSON.stringify(payload) });
901
+ const data = await response.json().catch(function() { return { error: "Request failed" }; });
902
+ if (!response.ok) throw new Error(data.error || "Request failed");
903
+ return data;
904
+ }
905
+
906
+ newSessionButton.addEventListener("click", function() { void createSession(); });
907
+ composer.addEventListener("submit", async (event) => {
908
+ event.preventDefault();
909
+ const text = messageInput.value.trim();
910
+ if (!text) return;
911
+ const command = availableCommands().find(function(candidate) { return text.split(/\\s+/)[0] === candidate.slash; });
912
+ if (text.startsWith("/") && command) {
913
+ await runCommand(command);
914
+ return;
915
+ }
916
+ messageInput.value = "";
917
+ await postJson("/api/chat/message", { piboSessionId: selectedPiboSessionId, text: text });
918
+ await refreshTrace();
919
+ });
920
+ messageInput.addEventListener("input", renderCommandMenu);
921
+ messageInput.addEventListener("keydown", function(event) {
922
+ if (commandMenu.classList.contains("hidden")) {
923
+ if (event.key === "Enter" && !event.shiftKey) {
924
+ event.preventDefault();
925
+ composer.requestSubmit();
926
+ }
927
+ return;
928
+ }
929
+ const count = commandMenu.querySelectorAll(".command-item").length;
930
+ if (event.key === "ArrowDown") { event.preventDefault(); commandIndex = (commandIndex + 1) % count; renderCommandMenu(); }
931
+ if (event.key === "ArrowUp") { event.preventDefault(); commandIndex = (commandIndex - 1 + count) % count; renderCommandMenu(); }
932
+ if (event.key === "Enter" && !event.shiftKey) {
933
+ const item = commandMenu.querySelectorAll(".command-item")[commandIndex];
934
+ if (item) { event.preventDefault(); item.click(); }
935
+ }
936
+ });
937
+ document.querySelectorAll(".tab").forEach(function(tab) {
938
+ tab.addEventListener("click", function() { area = tab.dataset.area; renderArea(); });
939
+ });
940
+ document.querySelector("#refresh").addEventListener("click", function() { void refreshBootstrap(false).then(renderArea); });
941
+ document.querySelector("#clear-local").addEventListener("click", function() { rawLogEl.innerHTML = ""; });
942
+ document.querySelector("#collapse-all").addEventListener("click", function() { openNodes.clear(); saveOpenNodes(); void refreshTrace(); });
943
+ document.querySelector("#expand-all").addEventListener("click", function() {
944
+ contentEl.querySelectorAll(".span-card").forEach(function(node) {
945
+ if (node.dataset.nodeId) openNodes.add(node.dataset.nodeId);
946
+ node.classList.add("open");
947
+ const chevron = node.querySelector(".span-chevron");
948
+ if (chevron) chevron.textContent = "v";
949
+ });
950
+ saveOpenNodes();
951
+ });
952
+ document.querySelector("#expand-one").addEventListener("click", function() {
953
+ openNodes.clear();
954
+ contentEl.querySelectorAll(".trace-list > .span-card").forEach(function(node) {
955
+ if (node.dataset.nodeId) openNodes.add(node.dataset.nodeId);
956
+ node.classList.add("open");
957
+ const chevron = node.querySelector(".span-chevron");
958
+ if (chevron) chevron.textContent = "v";
959
+ });
960
+ saveOpenNodes();
961
+ });
962
+ function updateThinkingButton() {
963
+ document.querySelector("#thinking-toggle").textContent = showThinking ? "Thinking On" : "Thinking Off";
964
+ }
965
+ document.querySelector("#thinking-toggle").addEventListener("click", async function() {
966
+ showThinking = !showThinking;
967
+ localStorage.setItem("pibo.chat.showThinking", String(showThinking));
968
+ updateThinkingButton();
969
+ await refreshTrace();
970
+ });
971
+ document.querySelector("#fork-stay").addEventListener("click", function() {
972
+ forkModal.classList.add("hidden");
973
+ const previousFile = pendingForkResult && pendingForkResult.previous && pendingForkResult.previous.sessionFile;
974
+ const targetPiboSessionId = pendingForkResult && pendingForkResult.piboSessionId ? pendingForkResult.piboSessionId : selectedPiboSessionId;
975
+ pendingForkResult = undefined;
976
+ messageInput.value = pendingForkComposerText || "";
977
+ pendingForkComposerText = undefined;
978
+ if (previousFile) {
979
+ void postJson("/api/chat/action", { piboSessionId: targetPiboSessionId, action: "session.switch", params: { sessionFile: previousFile } })
980
+ .then(function(result) { appendRawEvent({ type: "fork_restore", payload: result }); return refreshTrace(); })
981
+ .catch(function(error) { appendRawEvent({ type: "fork_restore_error", payload: String(error) }); });
982
+ }
983
+ });
984
+ document.querySelector("#fork-switch").addEventListener("click", async function() {
985
+ forkModal.classList.add("hidden");
986
+ const targetPiboSessionId = pendingForkResult && pendingForkResult.piboSessionId ? pendingForkResult.piboSessionId : selectedPiboSessionId;
987
+ pendingForkResult = undefined;
988
+ pendingForkComposerText = undefined;
989
+ if (targetPiboSessionId) await selectSession(targetPiboSessionId);
990
+ });
991
+
992
+ updateThinkingButton();
993
+ loadSession();
994
+ </script>
995
+ </body>
996
+ </html>`;
997
+ }