@pasko70/pibo 1.9.8 → 1.9.9

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 (705) hide show
  1. package/README.md +183 -183
  2. package/context/codex-base-prompt.md +148 -148
  3. package/context/compute-worker.md +23 -23
  4. package/context/pibo-compaction-prompt.md +100 -100
  5. package/context/pibo-native-tooling.md +18 -18
  6. package/context/pibo-system-prompt.md +77 -77
  7. package/docs/README.md +23 -23
  8. package/docs/ops/install-developer-host.md +112 -112
  9. package/docs/ops/install-user-host.md +96 -96
  10. package/docs/ops/upgrade-user-to-developer-host.md +69 -69
  11. package/docs/ops/vscode-extension-release.md +160 -160
  12. package/package.json +95 -95
  13. package/skills/builtin/graphify/SKILL.md +52 -52
  14. package/skills/builtin/pi-agent-harness/SKILL.md +319 -319
  15. package/skills/builtin/pi-agent-harness/agents/openai.yaml +4 -4
  16. package/skills/builtin/pibo-docker-system/SKILL.md +170 -170
  17. package/skills/builtin/pibo-spec-writing/SKILL.md +330 -330
  18. package/skills/builtin/prd/SKILL.md +143 -143
  19. package/skills/builtin/ralph-loop/SKILL.md +359 -359
  20. package/skills/builtin/ralph-prd-json/SKILL.md +123 -123
  21. package/skills/builtin/skill-creator/LICENSE.txt +201 -201
  22. package/skills/builtin/skill-creator/SKILL.md +513 -513
  23. package/skills/builtin/skill-creator/agents/analyzer.md +274 -274
  24. package/skills/builtin/skill-creator/agents/comparator.md +202 -202
  25. package/skills/builtin/skill-creator/agents/grader.md +223 -223
  26. package/skills/builtin/skill-creator/assets/eval_review.html +146 -146
  27. package/skills/builtin/skill-creator/eval-viewer/generate_review.py +471 -471
  28. package/skills/builtin/skill-creator/eval-viewer/viewer.html +1325 -1325
  29. package/skills/builtin/skill-creator/references/schemas.md +430 -430
  30. package/skills/builtin/skill-creator/scripts/aggregate_benchmark.py +401 -401
  31. package/skills/builtin/skill-creator/scripts/generate_report.py +326 -326
  32. package/skills/builtin/skill-creator/scripts/improve_description.py +247 -247
  33. package/skills/builtin/skill-creator/scripts/package_skill.py +136 -136
  34. package/skills/builtin/skill-creator/scripts/quick_validate.py +102 -102
  35. package/skills/builtin/skill-creator/scripts/run_eval.py +310 -310
  36. package/skills/builtin/skill-creator/scripts/run_loop.py +328 -328
  37. package/skills/builtin/skill-creator/scripts/utils.py +47 -47
  38. package/skills/builtin/web-annotations/SKILL.md +93 -93
  39. package/src/mcp/LICENSE.mcp-cli +21 -21
  40. package/dist/api/simple-agent-api.js +0 -136
  41. package/dist/app-context.js +0 -4
  42. package/dist/apps/chat/agent-profiles.js +0 -70
  43. package/dist/apps/chat/agent-store.js +0 -669
  44. package/dist/apps/chat/chat-api-routes.js +0 -325
  45. package/dist/apps/chat/chat-capability-routes.js +0 -90
  46. package/dist/apps/chat/chat-files.js +0 -178
  47. package/dist/apps/chat/chat-request-normalizers.js +0 -681
  48. package/dist/apps/chat/chat-settings-routes.js +0 -98
  49. package/dist/apps/chat/chat-trace-helpers.js +0 -139
  50. package/dist/apps/chat/chat-user-skill-routes.js +0 -178
  51. package/dist/apps/chat/cron-api.js +0 -213
  52. package/dist/apps/chat/data/chat-data-mappers.js +0 -82
  53. package/dist/apps/chat/data/event-command-service.js +0 -75
  54. package/dist/apps/chat/data/navigation-query-service.js +0 -11
  55. package/dist/apps/chat/data/project-service.js +0 -877
  56. package/dist/apps/chat/data/read-state-service.js +0 -42
  57. package/dist/apps/chat/data/room-service.js +0 -52
  58. package/dist/apps/chat/data/session-query-service.js +0 -126
  59. package/dist/apps/chat/data/timeline-query-service.js +0 -102
  60. package/dist/apps/chat/event-log.js +0 -1
  61. package/dist/apps/chat/model-catalog.js +0 -53
  62. package/dist/apps/chat/output-compactor.js +0 -126
  63. package/dist/apps/chat/output-event-policy.js +0 -17
  64. package/dist/apps/chat/project-workflow-human-actions.js +0 -347
  65. package/dist/apps/chat/project-workflow-sessions.js +0 -260
  66. package/dist/apps/chat/provider-auth-actions.js +0 -43
  67. package/dist/apps/chat/ralph-api.js +0 -156
  68. package/dist/apps/chat/read-model.js +0 -1
  69. package/dist/apps/chat/rooms.js +0 -1
  70. package/dist/apps/chat/session-metadata.js +0 -14
  71. package/dist/apps/chat/static-assets.js +0 -997
  72. package/dist/apps/chat/stream.js +0 -145
  73. package/dist/apps/chat/telemetry-retention-service.js +0 -69
  74. package/dist/apps/chat/trace-v2.js +0 -307
  75. package/dist/apps/chat/trace.js +0 -572
  76. package/dist/apps/chat/types/event-store.js +0 -1
  77. package/dist/apps/chat/types/read-model.js +0 -1
  78. package/dist/apps/chat/types/rooms.js +0 -36
  79. package/dist/apps/chat/web-app.js +0 -4605
  80. package/dist/apps/chat/workflow-catalog.js +0 -572
  81. package/dist/apps/chat/workflow-edge-compatibility.js +0 -51
  82. package/dist/apps/chat/workflow-json-schema-validation.js +0 -335
  83. package/dist/apps/chat/workflow-manual-trigger-runtime.js +0 -232
  84. package/dist/apps/chat/workflow-persistence-model.js +0 -140
  85. package/dist/apps/chat/workflow-persistence.js +0 -633
  86. package/dist/apps/chat/workflow-registered-ref-params.js +0 -130
  87. package/dist/apps/chat/workflow-registered-ref-pickers.js +0 -179
  88. package/dist/apps/chat/workflow-registered-ref-validation.js +0 -210
  89. package/dist/apps/chat/workflow-v2-security-validation.js +0 -93
  90. package/dist/apps/chat/workflow-validation-helpers.js +0 -114
  91. package/dist/apps/chat-ui/assets/apl-BxEMbctQ.js +0 -1
  92. package/dist/apps/chat-ui/assets/asciiarmor-eFjeGRuZ.js +0 -1
  93. package/dist/apps/chat-ui/assets/asn1-Cfx-0pt9.js +0 -1
  94. package/dist/apps/chat-ui/assets/asterisk-B5BHTsBr.js +0 -1
  95. package/dist/apps/chat-ui/assets/brainfuck-CAA2xofr.js +0 -1
  96. package/dist/apps/chat-ui/assets/clike-BoDCOLzN.js +0 -1
  97. package/dist/apps/chat-ui/assets/clojure-kVFSWX0o.js +0 -1
  98. package/dist/apps/chat-ui/assets/cmake-BUPAhezI.js +0 -1
  99. package/dist/apps/chat-ui/assets/cobol-BfgHZgup.js +0 -1
  100. package/dist/apps/chat-ui/assets/coffeescript-G1Pe_1AZ.js +0 -1
  101. package/dist/apps/chat-ui/assets/commonlisp-B3N0CjHn.js +0 -1
  102. package/dist/apps/chat-ui/assets/crystal-C15ndaGM.js +0 -1
  103. package/dist/apps/chat-ui/assets/css-BqOeyZOV.js +0 -1
  104. package/dist/apps/chat-ui/assets/cypher-KjIKv-wW.js +0 -1
  105. package/dist/apps/chat-ui/assets/d-BlT5AEC-.js +0 -1
  106. package/dist/apps/chat-ui/assets/diff-oF98tbqj.js +0 -1
  107. package/dist/apps/chat-ui/assets/dist--55mTWk3.js +0 -1
  108. package/dist/apps/chat-ui/assets/dist--Sb99Zop.js +0 -11
  109. package/dist/apps/chat-ui/assets/dist-4VdcCJgh.js +0 -6
  110. package/dist/apps/chat-ui/assets/dist-BCqTb13C.js +0 -1
  111. package/dist/apps/chat-ui/assets/dist-BH4dS5wk.js +0 -23
  112. package/dist/apps/chat-ui/assets/dist-BXmdj7mb.js +0 -9
  113. package/dist/apps/chat-ui/assets/dist-BZ39rB1W.js +0 -1
  114. package/dist/apps/chat-ui/assets/dist-BsedZGJo.js +0 -1
  115. package/dist/apps/chat-ui/assets/dist-C5YJOwhH.js +0 -1
  116. package/dist/apps/chat-ui/assets/dist-C5oXtFSP.js +0 -1
  117. package/dist/apps/chat-ui/assets/dist-CDTTlyfG.js +0 -1
  118. package/dist/apps/chat-ui/assets/dist-CKM5j-iy.js +0 -1
  119. package/dist/apps/chat-ui/assets/dist-CUp9us2q.js +0 -1
  120. package/dist/apps/chat-ui/assets/dist-CZ9T4Cly.js +0 -1
  121. package/dist/apps/chat-ui/assets/dist-CdhJkLlg.js +0 -1
  122. package/dist/apps/chat-ui/assets/dist-D7FSg1x8.js +0 -1
  123. package/dist/apps/chat-ui/assets/dist-DSKQpPaz.js +0 -1
  124. package/dist/apps/chat-ui/assets/dist-Ds5VZTeC.js +0 -2
  125. package/dist/apps/chat-ui/assets/dist-SVPsM5Oi.js +0 -13
  126. package/dist/apps/chat-ui/assets/dist-ZN6fdzpB.js +0 -1
  127. package/dist/apps/chat-ui/assets/dist-Zqt9kNG9.js +0 -1
  128. package/dist/apps/chat-ui/assets/dist-qwl4CNfF.js +0 -1
  129. package/dist/apps/chat-ui/assets/dist-tGfufz3b.js +0 -1
  130. package/dist/apps/chat-ui/assets/dockerfile-CUaqzcqp.js +0 -1
  131. package/dist/apps/chat-ui/assets/dtd-VCA9yr61.js +0 -1
  132. package/dist/apps/chat-ui/assets/dylan-O-V5Dw5W.js +0 -1
  133. package/dist/apps/chat-ui/assets/ebnf-SPmdBkvT.js +0 -1
  134. package/dist/apps/chat-ui/assets/ecl-ChfCttfI.js +0 -1
  135. package/dist/apps/chat-ui/assets/eiffel-cB9EbjeN.js +0 -1
  136. package/dist/apps/chat-ui/assets/elm-BTiVflBU.js +0 -1
  137. package/dist/apps/chat-ui/assets/erlang-egf0TXFm.js +0 -1
  138. package/dist/apps/chat-ui/assets/factor-C2tAxNob.js +0 -1
  139. package/dist/apps/chat-ui/assets/fcl-BiCjh1tj.js +0 -1
  140. package/dist/apps/chat-ui/assets/forth-C4kDGW6u.js +0 -1
  141. package/dist/apps/chat-ui/assets/fortran-DzkLaPnd.js +0 -1
  142. package/dist/apps/chat-ui/assets/gas-DMOxskQF.js +0 -1
  143. package/dist/apps/chat-ui/assets/gherkin-BPxBpp-k.js +0 -1
  144. package/dist/apps/chat-ui/assets/groovy-CkEnc0ZY.js +0 -1
  145. package/dist/apps/chat-ui/assets/haskell-Dadpo9-w.js +0 -1
  146. package/dist/apps/chat-ui/assets/haxe-CDNZL9MW.js +0 -1
  147. package/dist/apps/chat-ui/assets/http-jy9Zxxt3.js +0 -1
  148. package/dist/apps/chat-ui/assets/idl-CGSB6iiy.js +0 -1
  149. package/dist/apps/chat-ui/assets/index-C0x9nEcf.css +0 -1
  150. package/dist/apps/chat-ui/assets/index-Gf-Zb-P-.js +0 -173
  151. package/dist/apps/chat-ui/assets/javascript-DSlzRUd8.js +0 -1
  152. package/dist/apps/chat-ui/assets/julia-DTiF9v6R.js +0 -1
  153. package/dist/apps/chat-ui/assets/livescript-Ci8Xxna6.js +0 -1
  154. package/dist/apps/chat-ui/assets/lua-eVxIrt9t.js +0 -1
  155. package/dist/apps/chat-ui/assets/mathematica-Da3grj36.js +0 -1
  156. package/dist/apps/chat-ui/assets/mbox-BWBMSafM.js +0 -1
  157. package/dist/apps/chat-ui/assets/mirc-CtHu9S1B.js +0 -1
  158. package/dist/apps/chat-ui/assets/mllike-wTFlPWXS.js +0 -1
  159. package/dist/apps/chat-ui/assets/modelica-cKbQ0UXu.js +0 -1
  160. package/dist/apps/chat-ui/assets/mscgen-C5pXQCMK.js +0 -1
  161. package/dist/apps/chat-ui/assets/mumps-CKBHkOQq.js +0 -1
  162. package/dist/apps/chat-ui/assets/nginx-B00AiQel.js +0 -1
  163. package/dist/apps/chat-ui/assets/nsis-SMDwKltR.js +0 -1
  164. package/dist/apps/chat-ui/assets/ntriples-B_36EBV0.js +0 -1
  165. package/dist/apps/chat-ui/assets/octave-BXPjzAif.js +0 -1
  166. package/dist/apps/chat-ui/assets/oz-Dedpat1M.js +0 -1
  167. package/dist/apps/chat-ui/assets/pascal-CMcUg72K.js +0 -1
  168. package/dist/apps/chat-ui/assets/perl-DoVTbnzt.js +0 -1
  169. package/dist/apps/chat-ui/assets/pig-CULXT1YV.js +0 -1
  170. package/dist/apps/chat-ui/assets/powershell-Cv5Uhf6b.js +0 -1
  171. package/dist/apps/chat-ui/assets/properties-CQ1C2P-M.js +0 -1
  172. package/dist/apps/chat-ui/assets/protobuf-SRlvzrl6.js +0 -1
  173. package/dist/apps/chat-ui/assets/pug-Bo3wfL-f.js +0 -1
  174. package/dist/apps/chat-ui/assets/puppet-ClSqCGj6.js +0 -1
  175. package/dist/apps/chat-ui/assets/pwa-images/android/launchericon-144x144.png +0 -0
  176. package/dist/apps/chat-ui/assets/pwa-images/android/launchericon-192x192.png +0 -0
  177. package/dist/apps/chat-ui/assets/pwa-images/android/launchericon-48x48.png +0 -0
  178. package/dist/apps/chat-ui/assets/pwa-images/android/launchericon-512x512.png +0 -0
  179. package/dist/apps/chat-ui/assets/pwa-images/android/launchericon-72x72.png +0 -0
  180. package/dist/apps/chat-ui/assets/pwa-images/android/launchericon-96x96.png +0 -0
  181. package/dist/apps/chat-ui/assets/pwa-images/ios/100.png +0 -0
  182. package/dist/apps/chat-ui/assets/pwa-images/ios/1024.png +0 -0
  183. package/dist/apps/chat-ui/assets/pwa-images/ios/114.png +0 -0
  184. package/dist/apps/chat-ui/assets/pwa-images/ios/120.png +0 -0
  185. package/dist/apps/chat-ui/assets/pwa-images/ios/128.png +0 -0
  186. package/dist/apps/chat-ui/assets/pwa-images/ios/144.png +0 -0
  187. package/dist/apps/chat-ui/assets/pwa-images/ios/152.png +0 -0
  188. package/dist/apps/chat-ui/assets/pwa-images/ios/16.png +0 -0
  189. package/dist/apps/chat-ui/assets/pwa-images/ios/167.png +0 -0
  190. package/dist/apps/chat-ui/assets/pwa-images/ios/180.png +0 -0
  191. package/dist/apps/chat-ui/assets/pwa-images/ios/192.png +0 -0
  192. package/dist/apps/chat-ui/assets/pwa-images/ios/20.png +0 -0
  193. package/dist/apps/chat-ui/assets/pwa-images/ios/256.png +0 -0
  194. package/dist/apps/chat-ui/assets/pwa-images/ios/29.png +0 -0
  195. package/dist/apps/chat-ui/assets/pwa-images/ios/32.png +0 -0
  196. package/dist/apps/chat-ui/assets/pwa-images/ios/40.png +0 -0
  197. package/dist/apps/chat-ui/assets/pwa-images/ios/50.png +0 -0
  198. package/dist/apps/chat-ui/assets/pwa-images/ios/512.png +0 -0
  199. package/dist/apps/chat-ui/assets/pwa-images/ios/57.png +0 -0
  200. package/dist/apps/chat-ui/assets/pwa-images/ios/58.png +0 -0
  201. package/dist/apps/chat-ui/assets/pwa-images/ios/60.png +0 -0
  202. package/dist/apps/chat-ui/assets/pwa-images/ios/64.png +0 -0
  203. package/dist/apps/chat-ui/assets/pwa-images/ios/72.png +0 -0
  204. package/dist/apps/chat-ui/assets/pwa-images/ios/76.png +0 -0
  205. package/dist/apps/chat-ui/assets/pwa-images/ios/80.png +0 -0
  206. package/dist/apps/chat-ui/assets/pwa-images/ios/87.png +0 -0
  207. package/dist/apps/chat-ui/assets/pwa-images/windows/LargeTile.scale-100.png +0 -0
  208. package/dist/apps/chat-ui/assets/pwa-images/windows/LargeTile.scale-125.png +0 -0
  209. package/dist/apps/chat-ui/assets/pwa-images/windows/LargeTile.scale-150.png +0 -0
  210. package/dist/apps/chat-ui/assets/pwa-images/windows/LargeTile.scale-200.png +0 -0
  211. package/dist/apps/chat-ui/assets/pwa-images/windows/LargeTile.scale-400.png +0 -0
  212. package/dist/apps/chat-ui/assets/pwa-images/windows/SmallTile.scale-100.png +0 -0
  213. package/dist/apps/chat-ui/assets/pwa-images/windows/SmallTile.scale-125.png +0 -0
  214. package/dist/apps/chat-ui/assets/pwa-images/windows/SmallTile.scale-150.png +0 -0
  215. package/dist/apps/chat-ui/assets/pwa-images/windows/SmallTile.scale-200.png +0 -0
  216. package/dist/apps/chat-ui/assets/pwa-images/windows/SmallTile.scale-400.png +0 -0
  217. package/dist/apps/chat-ui/assets/pwa-images/windows/SplashScreen.scale-100.png +0 -0
  218. package/dist/apps/chat-ui/assets/pwa-images/windows/SplashScreen.scale-125.png +0 -0
  219. package/dist/apps/chat-ui/assets/pwa-images/windows/SplashScreen.scale-150.png +0 -0
  220. package/dist/apps/chat-ui/assets/pwa-images/windows/SplashScreen.scale-200.png +0 -0
  221. package/dist/apps/chat-ui/assets/pwa-images/windows/SplashScreen.scale-400.png +0 -0
  222. package/dist/apps/chat-ui/assets/pwa-images/windows/Square150x150Logo.scale-100.png +0 -0
  223. package/dist/apps/chat-ui/assets/pwa-images/windows/Square150x150Logo.scale-125.png +0 -0
  224. package/dist/apps/chat-ui/assets/pwa-images/windows/Square150x150Logo.scale-150.png +0 -0
  225. package/dist/apps/chat-ui/assets/pwa-images/windows/Square150x150Logo.scale-200.png +0 -0
  226. package/dist/apps/chat-ui/assets/pwa-images/windows/Square150x150Logo.scale-400.png +0 -0
  227. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-16.png +0 -0
  228. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-20.png +0 -0
  229. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-24.png +0 -0
  230. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-256.png +0 -0
  231. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-30.png +0 -0
  232. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-32.png +0 -0
  233. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-36.png +0 -0
  234. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-40.png +0 -0
  235. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-44.png +0 -0
  236. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-48.png +0 -0
  237. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-60.png +0 -0
  238. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-64.png +0 -0
  239. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-72.png +0 -0
  240. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-80.png +0 -0
  241. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-96.png +0 -0
  242. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-16.png +0 -0
  243. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-20.png +0 -0
  244. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-24.png +0 -0
  245. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-256.png +0 -0
  246. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-30.png +0 -0
  247. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-32.png +0 -0
  248. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-36.png +0 -0
  249. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-40.png +0 -0
  250. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-44.png +0 -0
  251. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-48.png +0 -0
  252. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-60.png +0 -0
  253. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-64.png +0 -0
  254. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-72.png +0 -0
  255. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-80.png +0 -0
  256. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-96.png +0 -0
  257. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.scale-100.png +0 -0
  258. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.scale-125.png +0 -0
  259. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.scale-150.png +0 -0
  260. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.scale-200.png +0 -0
  261. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.scale-400.png +0 -0
  262. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-16.png +0 -0
  263. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-20.png +0 -0
  264. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-24.png +0 -0
  265. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-256.png +0 -0
  266. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-30.png +0 -0
  267. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-32.png +0 -0
  268. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-36.png +0 -0
  269. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-40.png +0 -0
  270. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-44.png +0 -0
  271. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-48.png +0 -0
  272. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-60.png +0 -0
  273. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-64.png +0 -0
  274. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-72.png +0 -0
  275. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-80.png +0 -0
  276. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-96.png +0 -0
  277. package/dist/apps/chat-ui/assets/pwa-images/windows/StoreLogo.scale-100.png +0 -0
  278. package/dist/apps/chat-ui/assets/pwa-images/windows/StoreLogo.scale-125.png +0 -0
  279. package/dist/apps/chat-ui/assets/pwa-images/windows/StoreLogo.scale-150.png +0 -0
  280. package/dist/apps/chat-ui/assets/pwa-images/windows/StoreLogo.scale-200.png +0 -0
  281. package/dist/apps/chat-ui/assets/pwa-images/windows/StoreLogo.scale-400.png +0 -0
  282. package/dist/apps/chat-ui/assets/pwa-images/windows/Wide310x150Logo.scale-100.png +0 -0
  283. package/dist/apps/chat-ui/assets/pwa-images/windows/Wide310x150Logo.scale-125.png +0 -0
  284. package/dist/apps/chat-ui/assets/pwa-images/windows/Wide310x150Logo.scale-150.png +0 -0
  285. package/dist/apps/chat-ui/assets/pwa-images/windows/Wide310x150Logo.scale-200.png +0 -0
  286. package/dist/apps/chat-ui/assets/pwa-images/windows/Wide310x150Logo.scale-400.png +0 -0
  287. package/dist/apps/chat-ui/assets/python-C2_X1GpX.js +0 -1
  288. package/dist/apps/chat-ui/assets/q-B_6Gdyzl.js +0 -1
  289. package/dist/apps/chat-ui/assets/r-BD07NGED.js +0 -1
  290. package/dist/apps/chat-ui/assets/rolldown-runtime-S-ySWqyJ.js +0 -1
  291. package/dist/apps/chat-ui/assets/rpm-CRu5Z2Jl.js +0 -1
  292. package/dist/apps/chat-ui/assets/ruby-dZPnOz8h.js +0 -1
  293. package/dist/apps/chat-ui/assets/sas-S2t8_sDI.js +0 -1
  294. package/dist/apps/chat-ui/assets/scheme-WcyFWLW2.js +0 -1
  295. package/dist/apps/chat-ui/assets/shell-DUelnYSh.js +0 -1
  296. package/dist/apps/chat-ui/assets/sieve-jDjlVhNh.js +0 -1
  297. package/dist/apps/chat-ui/assets/simple-mode-CL04yRVp.js +0 -1
  298. package/dist/apps/chat-ui/assets/smalltalk-ddWDYy10.js +0 -1
  299. package/dist/apps/chat-ui/assets/solr-C7rQhLuW.js +0 -1
  300. package/dist/apps/chat-ui/assets/sparql--fPCCgVd.js +0 -1
  301. package/dist/apps/chat-ui/assets/spreadsheet-DjthqD5G.js +0 -1
  302. package/dist/apps/chat-ui/assets/sql-D_dieYbr.js +0 -1
  303. package/dist/apps/chat-ui/assets/stex-rHcFYcA0.js +0 -1
  304. package/dist/apps/chat-ui/assets/stylus-DxF70RNr.js +0 -1
  305. package/dist/apps/chat-ui/assets/swift-T0hDoOb-.js +0 -1
  306. package/dist/apps/chat-ui/assets/tcl-Dlzy1mPk.js +0 -1
  307. package/dist/apps/chat-ui/assets/textile-Dy5rFZe5.js +0 -1
  308. package/dist/apps/chat-ui/assets/tiddlywiki-DQP1OymS.js +0 -1
  309. package/dist/apps/chat-ui/assets/tiki-0vOj3DB2.js +0 -1
  310. package/dist/apps/chat-ui/assets/toml-DEltN0lI.js +0 -1
  311. package/dist/apps/chat-ui/assets/troff-CRbBpEqY.js +0 -1
  312. package/dist/apps/chat-ui/assets/ttcn-M5q1nLKg.js +0 -1
  313. package/dist/apps/chat-ui/assets/ttcn-cfg-Rmw9NWq9.js +0 -1
  314. package/dist/apps/chat-ui/assets/turtle-BCDWhJK0.js +0 -1
  315. package/dist/apps/chat-ui/assets/vb-QQ7LGlOz.js +0 -1
  316. package/dist/apps/chat-ui/assets/vbscript-BiSEdUzz.js +0 -1
  317. package/dist/apps/chat-ui/assets/velocity-CzMg5_6w.js +0 -1
  318. package/dist/apps/chat-ui/assets/verilog-BJOO83gk.js +0 -1
  319. package/dist/apps/chat-ui/assets/vhdl-ed4zAZAA.js +0 -1
  320. package/dist/apps/chat-ui/assets/webidl-Ddy6hbV6.js +0 -1
  321. package/dist/apps/chat-ui/assets/xquery-Bw1zwhh6.js +0 -1
  322. package/dist/apps/chat-ui/assets/yacas-DZdTXy3s.js +0 -1
  323. package/dist/apps/chat-ui/assets/z80-DMG02_YV.js +0 -1
  324. package/dist/apps/chat-ui/index.html +0 -20
  325. package/dist/apps/chat-ui/manifest.webmanifest +0 -25
  326. package/dist/apps/chat-ui/sw.js +0 -47
  327. package/dist/apps/chat-vscode-web/assets/index-B5QK07zO.css +0 -2
  328. package/dist/apps/chat-vscode-web/assets/index-BAMxIaI_.js +0 -41
  329. package/dist/apps/chat-vscode-web/index.html +0 -14
  330. package/dist/apps/cli-ui/InkSessionApp.js +0 -1218
  331. package/dist/apps/cli-ui/InkTerminalLine.js +0 -53
  332. package/dist/apps/cli-ui/InkTerminalRow.js +0 -304
  333. package/dist/apps/cli-ui/InkTerminalView.js +0 -25
  334. package/dist/apps/cli-ui/cliSessionsCommand.js +0 -232
  335. package/dist/apps/cli-ui/index.js +0 -8
  336. package/dist/apps/cli-ui/inkColors.js +0 -67
  337. package/dist/apps/cli-ui/inkJson.js +0 -244
  338. package/dist/apps/cli-ui/inkMarkdown.js +0 -127
  339. package/dist/apps/cli-ui/inkSyntaxHighlighter.js +0 -166
  340. package/dist/apps/context-files-ui/assets/apl-14BqhLYK.js +0 -1
  341. package/dist/apps/context-files-ui/assets/asciiarmor-WLvjqI7d.js +0 -1
  342. package/dist/apps/context-files-ui/assets/asn1-Bg4FbdCg.js +0 -1
  343. package/dist/apps/context-files-ui/assets/asterisk-B2MO-X4d.js +0 -1
  344. package/dist/apps/context-files-ui/assets/brainfuck-CV9kufud.js +0 -1
  345. package/dist/apps/context-files-ui/assets/clike-CjmcUpt6.js +0 -1
  346. package/dist/apps/context-files-ui/assets/clojure-De3QGfx6.js +0 -1
  347. package/dist/apps/context-files-ui/assets/cmake-i2VDNaRq.js +0 -1
  348. package/dist/apps/context-files-ui/assets/cobol-BwO6DF08.js +0 -1
  349. package/dist/apps/context-files-ui/assets/coffeescript-BtivDvRz.js +0 -1
  350. package/dist/apps/context-files-ui/assets/commonlisp-DFkEQdLP.js +0 -1
  351. package/dist/apps/context-files-ui/assets/crystal-CU0NkcVL.js +0 -1
  352. package/dist/apps/context-files-ui/assets/css-CbMZAQ1W.js +0 -1
  353. package/dist/apps/context-files-ui/assets/cypher-Dke5QOzv.js +0 -1
  354. package/dist/apps/context-files-ui/assets/d-TPqSVaHM.js +0 -1
  355. package/dist/apps/context-files-ui/assets/diff-B365LSoZ.js +0 -1
  356. package/dist/apps/context-files-ui/assets/dist-B5PTVnox.js +0 -1
  357. package/dist/apps/context-files-ui/assets/dist-B5ZAfwf5.js +0 -1
  358. package/dist/apps/context-files-ui/assets/dist-BOiGdrG-.js +0 -1
  359. package/dist/apps/context-files-ui/assets/dist-BkUONE3N.js +0 -1
  360. package/dist/apps/context-files-ui/assets/dist-D1KyNDg5.js +0 -13
  361. package/dist/apps/context-files-ui/assets/dist-DK01b7x4.js +0 -1
  362. package/dist/apps/context-files-ui/assets/dist-DKoyMSNr.js +0 -1
  363. package/dist/apps/context-files-ui/assets/dist-DLMjd26T.js +0 -1
  364. package/dist/apps/context-files-ui/assets/dist-DPG9jOQ-.js +0 -1
  365. package/dist/apps/context-files-ui/assets/dist-DotDq_kD.js +0 -1
  366. package/dist/apps/context-files-ui/assets/dist-Dp5AH00p.js +0 -1
  367. package/dist/apps/context-files-ui/assets/dist-DqYw0LH7.js +0 -2
  368. package/dist/apps/context-files-ui/assets/dist-QQuDy4KA.js +0 -1
  369. package/dist/apps/context-files-ui/assets/dist-TF5iO5ML.js +0 -9
  370. package/dist/apps/context-files-ui/assets/dist-TbjAhles.js +0 -1
  371. package/dist/apps/context-files-ui/assets/dist-ZsBbt0uY.js +0 -1
  372. package/dist/apps/context-files-ui/assets/dist-kmsvtHkH.js +0 -1
  373. package/dist/apps/context-files-ui/assets/dist-vnd7PMu3.js +0 -11
  374. package/dist/apps/context-files-ui/assets/dockerfile-CJb2sekW.js +0 -1
  375. package/dist/apps/context-files-ui/assets/dtd-CBMymJ7O.js +0 -1
  376. package/dist/apps/context-files-ui/assets/dylan-08Azy1NK.js +0 -1
  377. package/dist/apps/context-files-ui/assets/ebnf-Dkum_1J8.js +0 -1
  378. package/dist/apps/context-files-ui/assets/ecl-dhxjHL8y.js +0 -1
  379. package/dist/apps/context-files-ui/assets/eiffel-C446m6dI.js +0 -1
  380. package/dist/apps/context-files-ui/assets/elm-po1E9de0.js +0 -1
  381. package/dist/apps/context-files-ui/assets/erlang-BD5LkVkR.js +0 -1
  382. package/dist/apps/context-files-ui/assets/factor-B2EMQZkP.js +0 -1
  383. package/dist/apps/context-files-ui/assets/fcl-DkEOamHd.js +0 -1
  384. package/dist/apps/context-files-ui/assets/forth-dCg2_HVB.js +0 -1
  385. package/dist/apps/context-files-ui/assets/fortran-3ZpXLFh1.js +0 -1
  386. package/dist/apps/context-files-ui/assets/gas-DMmxLZRI.js +0 -1
  387. package/dist/apps/context-files-ui/assets/gherkin-DUSFg2R6.js +0 -1
  388. package/dist/apps/context-files-ui/assets/groovy-Cmduloe1.js +0 -1
  389. package/dist/apps/context-files-ui/assets/haskell-Cyr255R9.js +0 -1
  390. package/dist/apps/context-files-ui/assets/haxe-BJVKtprM.js +0 -1
  391. package/dist/apps/context-files-ui/assets/http-DszHFpc-.js +0 -1
  392. package/dist/apps/context-files-ui/assets/idl-Cati9Nrv.js +0 -1
  393. package/dist/apps/context-files-ui/assets/index-B92tL3Pp.css +0 -1
  394. package/dist/apps/context-files-ui/assets/index-BhAWD3dv.js +0 -202
  395. package/dist/apps/context-files-ui/assets/javascript-C5pDVaoP.js +0 -1
  396. package/dist/apps/context-files-ui/assets/julia-DlqY1cTU.js +0 -1
  397. package/dist/apps/context-files-ui/assets/livescript-C6p8-2W1.js +0 -1
  398. package/dist/apps/context-files-ui/assets/lua-BxuTHaF7.js +0 -1
  399. package/dist/apps/context-files-ui/assets/mathematica-nDHZUMJT.js +0 -1
  400. package/dist/apps/context-files-ui/assets/mbox-DAaR0Hcz.js +0 -1
  401. package/dist/apps/context-files-ui/assets/mirc-CCA0FRfl.js +0 -1
  402. package/dist/apps/context-files-ui/assets/mllike-Cw3Iccsb.js +0 -1
  403. package/dist/apps/context-files-ui/assets/modelica-Czx80fNR.js +0 -1
  404. package/dist/apps/context-files-ui/assets/mscgen-BmfuTbzG.js +0 -1
  405. package/dist/apps/context-files-ui/assets/mumps-Ds_ZaumL.js +0 -1
  406. package/dist/apps/context-files-ui/assets/nginx-D9M2PQ4U.js +0 -1
  407. package/dist/apps/context-files-ui/assets/nsis-DOo3SJmd.js +0 -1
  408. package/dist/apps/context-files-ui/assets/ntriples-DLHGTvHs.js +0 -1
  409. package/dist/apps/context-files-ui/assets/octave-8jj96JiC.js +0 -1
  410. package/dist/apps/context-files-ui/assets/oz-BmMq7iC4.js +0 -1
  411. package/dist/apps/context-files-ui/assets/pascal-BgMr6XpT.js +0 -1
  412. package/dist/apps/context-files-ui/assets/perl-D6YJObi_.js +0 -1
  413. package/dist/apps/context-files-ui/assets/pig-nx7uchs8.js +0 -1
  414. package/dist/apps/context-files-ui/assets/powershell-B4IPkVxR.js +0 -1
  415. package/dist/apps/context-files-ui/assets/properties-CoavQdLC.js +0 -1
  416. package/dist/apps/context-files-ui/assets/protobuf-D5EWhcmc.js +0 -1
  417. package/dist/apps/context-files-ui/assets/pug-QU72BPAa.js +0 -1
  418. package/dist/apps/context-files-ui/assets/puppet-B_0GFuyD.js +0 -1
  419. package/dist/apps/context-files-ui/assets/python-Cs7sNzy_.js +0 -1
  420. package/dist/apps/context-files-ui/assets/q-BIB9pPtI.js +0 -1
  421. package/dist/apps/context-files-ui/assets/r-CN5s4f3o.js +0 -1
  422. package/dist/apps/context-files-ui/assets/rpm-Ct_Ck8mQ.js +0 -1
  423. package/dist/apps/context-files-ui/assets/ruby-BVPradRk.js +0 -1
  424. package/dist/apps/context-files-ui/assets/sas-DN4j74IF.js +0 -1
  425. package/dist/apps/context-files-ui/assets/scheme-CvNgHAnh.js +0 -1
  426. package/dist/apps/context-files-ui/assets/shell-BjiMLAaM.js +0 -1
  427. package/dist/apps/context-files-ui/assets/sieve-C2U1O5Z4.js +0 -1
  428. package/dist/apps/context-files-ui/assets/simple-mode-DnMbQuKW.js +0 -1
  429. package/dist/apps/context-files-ui/assets/smalltalk-DkYwYufV.js +0 -1
  430. package/dist/apps/context-files-ui/assets/solr-BopnSD-v.js +0 -1
  431. package/dist/apps/context-files-ui/assets/sparql-Cpg3YQfd.js +0 -1
  432. package/dist/apps/context-files-ui/assets/spreadsheet-kRxtVt9J.js +0 -1
  433. package/dist/apps/context-files-ui/assets/sql-DYI2GwJR.js +0 -1
  434. package/dist/apps/context-files-ui/assets/stex-BCRT8IJ3.js +0 -1
  435. package/dist/apps/context-files-ui/assets/stylus-CARoeVE9.js +0 -1
  436. package/dist/apps/context-files-ui/assets/swift-DKNaLAK6.js +0 -1
  437. package/dist/apps/context-files-ui/assets/tcl-CQyXkgMH.js +0 -1
  438. package/dist/apps/context-files-ui/assets/textile-Yg_UWn-t.js +0 -1
  439. package/dist/apps/context-files-ui/assets/tiddlywiki-dqVbkfX4.js +0 -1
  440. package/dist/apps/context-files-ui/assets/tiki-CC_ic8g0.js +0 -1
  441. package/dist/apps/context-files-ui/assets/toml-B7gGzVkJ.js +0 -1
  442. package/dist/apps/context-files-ui/assets/troff-Bq3z6oAu.js +0 -1
  443. package/dist/apps/context-files-ui/assets/ttcn-GvRgs2AT.js +0 -1
  444. package/dist/apps/context-files-ui/assets/ttcn-cfg-CGCXz7Vo.js +0 -1
  445. package/dist/apps/context-files-ui/assets/turtle-CwIpz2yy.js +0 -1
  446. package/dist/apps/context-files-ui/assets/vb-BmcHUM2C.js +0 -1
  447. package/dist/apps/context-files-ui/assets/vbscript-Cs9dylre.js +0 -1
  448. package/dist/apps/context-files-ui/assets/velocity-CBWU0VCy.js +0 -1
  449. package/dist/apps/context-files-ui/assets/verilog-DVCHmufx.js +0 -1
  450. package/dist/apps/context-files-ui/assets/vhdl-BGDk4f1d.js +0 -1
  451. package/dist/apps/context-files-ui/assets/webidl-egXQEWlC.js +0 -1
  452. package/dist/apps/context-files-ui/assets/xquery-5f0hn7cg.js +0 -1
  453. package/dist/apps/context-files-ui/assets/yacas-DNs9XkmQ.js +0 -1
  454. package/dist/apps/context-files-ui/assets/z80-B7Dfb4UO.js +0 -1
  455. package/dist/apps/context-files-ui/index.html +0 -14
  456. package/dist/auth/better-auth.js +0 -130
  457. package/dist/auth/login-actions.js +0 -251
  458. package/dist/auth/openai-codex-usage.js +0 -147
  459. package/dist/auth/types.js +0 -14
  460. package/dist/bin/pibo.js +0 -3
  461. package/dist/bin/rg.js +0 -15
  462. package/dist/channels/types.js +0 -1
  463. package/dist/cli-errors.js +0 -18
  464. package/dist/cli-session/fakeSessionSource.js +0 -804
  465. package/dist/cli-session/index.js +0 -3
  466. package/dist/cli-session/localSessionSource.js +0 -1144
  467. package/dist/cli-session/sessionSource.js +0 -13
  468. package/dist/cli.js +0 -491
  469. package/dist/compute/cli.js +0 -415
  470. package/dist/compute/docker.js +0 -835
  471. package/dist/compute/resource-health.js +0 -334
  472. package/dist/compute/resource-policy.js +0 -98
  473. package/dist/config/config.js +0 -180
  474. package/dist/core/base-prompt.js +0 -104
  475. package/dist/core/codex-compat.js +0 -44
  476. package/dist/core/compaction-prompt.js +0 -293
  477. package/dist/core/context-build.js +0 -711
  478. package/dist/core/context-guard.js +0 -293
  479. package/dist/core/events.js +0 -1
  480. package/dist/core/gateway-resource-guard.js +0 -215
  481. package/dist/core/model-defaults.js +0 -95
  482. package/dist/core/pibo-home.js +0 -8
  483. package/dist/core/profiles.js +0 -210
  484. package/dist/core/provider-recovery.js +0 -64
  485. package/dist/core/provider-telemetry.js +0 -353
  486. package/dist/core/routed-session.js +0 -1179
  487. package/dist/core/runtime-telemetry.js +0 -1059
  488. package/dist/core/runtime.js +0 -529
  489. package/dist/core/session-errors.js +0 -76
  490. package/dist/core/session-model.js +0 -39
  491. package/dist/core/session-router.js +0 -850
  492. package/dist/core/skill-expansion.js +0 -43
  493. package/dist/core/system-prompt-template.js +0 -56
  494. package/dist/core/telemetry-retention-settings.js +0 -34
  495. package/dist/core/telemetry-staleness.js +0 -128
  496. package/dist/core/test-output-compaction.js +0 -145
  497. package/dist/core/thinking.js +0 -9
  498. package/dist/core/user-settings.js +0 -84
  499. package/dist/core/workspace.js +0 -5
  500. package/dist/core/wsl.js +0 -100
  501. package/dist/cron/channel.js +0 -28
  502. package/dist/cron/cli.js +0 -230
  503. package/dist/cron/plugin.js +0 -11
  504. package/dist/cron/schedule.js +0 -214
  505. package/dist/cron/service.js +0 -177
  506. package/dist/cron/store.js +0 -349
  507. package/dist/cron/types.js +0 -1
  508. package/dist/data/cli.js +0 -184
  509. package/dist/data/event-log.js +0 -106
  510. package/dist/data/ingest-service.js +0 -389
  511. package/dist/data/message-store.js +0 -62
  512. package/dist/data/navigation-store.js +0 -75
  513. package/dist/data/observation-store.js +0 -46
  514. package/dist/data/payload-store.js +0 -153
  515. package/dist/data/pibo-store.js +0 -59
  516. package/dist/data/schema.js +0 -436
  517. package/dist/data/session-store.js +0 -63
  518. package/dist/data/sqlite-schema.js +0 -12
  519. package/dist/data/telemetry-preview.js +0 -65
  520. package/dist/data/telemetry-queries.js +0 -212
  521. package/dist/data/telemetry-retention.js +0 -50
  522. package/dist/data/telemetry-rows.js +0 -158
  523. package/dist/data/telemetry-writer.js +0 -114
  524. package/dist/data/telemetry.js +0 -471
  525. package/dist/debug/delta-compaction.js +0 -99
  526. package/dist/debug/detail-format.js +0 -86
  527. package/dist/debug/events.js +0 -212
  528. package/dist/debug/failures.js +0 -162
  529. package/dist/debug/index.js +0 -1296
  530. package/dist/debug/messages.js +0 -185
  531. package/dist/debug/next-commands.js +0 -6
  532. package/dist/debug/payloads.js +0 -123
  533. package/dist/debug/pty.js +0 -924
  534. package/dist/debug/session.js +0 -230
  535. package/dist/debug/sql.js +0 -238
  536. package/dist/debug/stores.js +0 -54
  537. package/dist/debug/summary.js +0 -72
  538. package/dist/debug/telemetry.js +0 -649
  539. package/dist/debug/tools.js +0 -168
  540. package/dist/debug/trace-render-check.js +0 -151
  541. package/dist/debug/trace.js +0 -370
  542. package/dist/debug/web-artifacts.js +0 -63
  543. package/dist/debug/web-options.js +0 -313
  544. package/dist/debug/web-render-analysis.js +0 -310
  545. package/dist/debug/web-snapshot-browser-scripts.js +0 -303
  546. package/dist/debug/web-streaming-benchmark-analysis.js +0 -605
  547. package/dist/debug/web-streaming-browser-library.js +0 -928
  548. package/dist/debug/web-streaming-browser-scripts.js +0 -242
  549. package/dist/debug/web-streaming-provider-telemetry.js +0 -194
  550. package/dist/debug/web-streaming-report.js +0 -493
  551. package/dist/debug/web-streaming-types.js +0 -1
  552. package/dist/debug/web.js +0 -574
  553. package/dist/gateway/backup.js +0 -83
  554. package/dist/gateway/cli.js +0 -632
  555. package/dist/gateway/client.js +0 -200
  556. package/dist/gateway/fallback.js +0 -155
  557. package/dist/gateway/pidfile.js +0 -130
  558. package/dist/gateway/protocol.js +0 -62
  559. package/dist/gateway/request.js +0 -155
  560. package/dist/gateway/server.js +0 -397
  561. package/dist/gateway/tool.js +0 -72
  562. package/dist/gateway/web.js +0 -224
  563. package/dist/index.js +0 -25
  564. package/dist/local/client.js +0 -77
  565. package/dist/local/extension.js +0 -551
  566. package/dist/local/tui.js +0 -25
  567. package/dist/mcp/agent-context.js +0 -127
  568. package/dist/mcp/client.js +0 -332
  569. package/dist/mcp/commands/call.js +0 -146
  570. package/dist/mcp/commands/grep.js +0 -145
  571. package/dist/mcp/commands/info.js +0 -83
  572. package/dist/mcp/commands/list.js +0 -94
  573. package/dist/mcp/config-command.js +0 -217
  574. package/dist/mcp/config.js +0 -473
  575. package/dist/mcp/daemon-client.js +0 -266
  576. package/dist/mcp/daemon.js +0 -327
  577. package/dist/mcp/errors.js +0 -287
  578. package/dist/mcp/index.js +0 -431
  579. package/dist/mcp/output.js +0 -226
  580. package/dist/mcp/python-runtime.js +0 -131
  581. package/dist/mcp/registry.js +0 -116
  582. package/dist/mcp/version.js +0 -5
  583. package/dist/pi-packages/cli.js +0 -92
  584. package/dist/pi-packages/installer.js +0 -70
  585. package/dist/pi-packages/metadata.js +0 -231
  586. package/dist/pi-packages/runtime.js +0 -61
  587. package/dist/pi-packages/store.js +0 -175
  588. package/dist/pi-packages/types.js +0 -1
  589. package/dist/plugins/better-auth.js +0 -11
  590. package/dist/plugins/builtin.js +0 -478
  591. package/dist/plugins/chat-custom-agents.js +0 -20
  592. package/dist/plugins/chat-user-skills.js +0 -41
  593. package/dist/plugins/chat-vscode-web.js +0 -28
  594. package/dist/plugins/chat-web.js +0 -11
  595. package/dist/plugins/codex-compat.js +0 -33
  596. package/dist/plugins/context-files-store.js +0 -354
  597. package/dist/plugins/context-files.js +0 -1081
  598. package/dist/plugins/dev-auth.js +0 -202
  599. package/dist/plugins/native-tooling.js +0 -15
  600. package/dist/plugins/registry.js +0 -436
  601. package/dist/plugins/types.js +0 -1
  602. package/dist/plugins/web-annotations.js +0 -27
  603. package/dist/plugins/web.js +0 -11
  604. package/dist/providers/glm.js +0 -59
  605. package/dist/providers/minimax.js +0 -70
  606. package/dist/providers/openai-compat.js +0 -48
  607. package/dist/providers/openai-gpt56.js +0 -153
  608. package/dist/ralph/channel.js +0 -8
  609. package/dist/ralph/cli.js +0 -197
  610. package/dist/ralph/plugin.js +0 -14
  611. package/dist/ralph/service.js +0 -317
  612. package/dist/ralph/stopping.js +0 -151
  613. package/dist/ralph/store.js +0 -450
  614. package/dist/ralph/templates.js +0 -200
  615. package/dist/ralph/types.js +0 -1
  616. package/dist/reliability/store.js +0 -775
  617. package/dist/resources/cli.js +0 -135
  618. package/dist/resources/lifecycle.js +0 -353
  619. package/dist/resources/reaper-state.js +0 -94
  620. package/dist/resources/reaper.js +0 -145
  621. package/dist/runs/registry.js +0 -360
  622. package/dist/runs/tools.js +0 -185
  623. package/dist/session-ui/commandCatalog.js +0 -193
  624. package/dist/session-ui/commandResults.js +0 -95
  625. package/dist/session-ui/delegation.js +0 -89
  626. package/dist/session-ui/index.js +0 -8
  627. package/dist/session-ui/roomSessionViewModel.js +0 -69
  628. package/dist/session-ui/sessionActivity.js +0 -30
  629. package/dist/session-ui/statusViewModel.js +0 -127
  630. package/dist/session-ui/terminalCards.js +0 -210
  631. package/dist/session-ui/terminalRows.js +0 -1163
  632. package/dist/session-ui/terminalValue.js +0 -45
  633. package/dist/sessions/pibo-data-store.js +0 -178
  634. package/dist/sessions/sqlite-store.js +0 -220
  635. package/dist/sessions/store.js +0 -132
  636. package/dist/sessions/workflow-session-kind.js +0 -20
  637. package/dist/setup/cli.js +0 -619
  638. package/dist/shared/trace-async-agent-runs.js +0 -127
  639. package/dist/shared/trace-engine.js +0 -97
  640. package/dist/shared/trace-event-projection.js +0 -789
  641. package/dist/shared/trace-live-reducer.js +0 -191
  642. package/dist/shared/trace-nodes.js +0 -88
  643. package/dist/shared/trace-order.js +0 -84
  644. package/dist/shared/trace-page-merge.js +0 -40
  645. package/dist/shared/trace-patch-nodes.js +0 -83
  646. package/dist/shared/trace-run-notifications.js +0 -69
  647. package/dist/shared/trace-subagent-links.js +0 -46
  648. package/dist/shared/trace-transcript.js +0 -371
  649. package/dist/shared/trace-types.js +0 -1
  650. package/dist/signals/aggregate.js +0 -65
  651. package/dist/signals/events.js +0 -1
  652. package/dist/signals/projector.js +0 -208
  653. package/dist/signals/registry.js +0 -554
  654. package/dist/signals/store.js +0 -1
  655. package/dist/signals/types.js +0 -1
  656. package/dist/skills/cli.js +0 -151
  657. package/dist/subagents/tool.js +0 -63
  658. package/dist/tools/agent-browser-leases.js +0 -219
  659. package/dist/tools/agent-browser-wrapper.js +0 -99
  660. package/dist/tools/browser-pool.js +0 -623
  661. package/dist/tools/browser-use-cdp.js +0 -259
  662. package/dist/tools/browser-use-leases.js +0 -516
  663. package/dist/tools/browser-use-wrapper.js +0 -781
  664. package/dist/tools/cdp-client.js +0 -189
  665. package/dist/tools/codex-compat.js +0 -85
  666. package/dist/tools/codex-image-generation.js +0 -272
  667. package/dist/tools/desktop-env.js +0 -99
  668. package/dist/tools/guides.js +0 -563
  669. package/dist/tools/index.js +0 -1020
  670. package/dist/tools/linux-virtual-display.js +0 -58
  671. package/dist/tools/npm-runtime.js +0 -136
  672. package/dist/tools/python-runtime.js +0 -183
  673. package/dist/tools/registry.js +0 -237
  674. package/dist/tools/runtime/index.js +0 -3
  675. package/dist/tools/runtime/node-backend.js +0 -225
  676. package/dist/tools/runtime/node-worker-source.js +0 -206
  677. package/dist/tools/runtime/python-backend.js +0 -227
  678. package/dist/tools/runtime/python-worker-source.js +0 -178
  679. package/dist/tools/runtime/registry.js +0 -255
  680. package/dist/tools/runtime/tool.js +0 -168
  681. package/dist/tools/runtime/types.js +0 -1
  682. package/dist/tools/web-search.js +0 -138
  683. package/dist/user-skills/installer.js +0 -214
  684. package/dist/user-skills/manager.js +0 -133
  685. package/dist/user-skills/store.js +0 -267
  686. package/dist/user-skills/types.js +0 -1
  687. package/dist/vscode/cli.js +0 -90
  688. package/dist/vscode/code-cli.js +0 -119
  689. package/dist/vscode/install.js +0 -177
  690. package/dist/vscode/status.js +0 -80
  691. package/dist/vscode/types.js +0 -14
  692. package/dist/vscode/uninstall.js +0 -49
  693. package/dist/vscode/vsix-fetcher.js +0 -131
  694. package/dist/web/auth.js +0 -14
  695. package/dist/web/channel.js +0 -288
  696. package/dist/web/http.js +0 -195
  697. package/dist/web/types.js +0 -1
  698. package/dist/web-annotations/api.js +0 -348
  699. package/dist/web-annotations/attachments.js +0 -201
  700. package/dist/web-annotations/cdp.js +0 -1107
  701. package/dist/web-annotations/index.js +0 -7
  702. package/dist/web-annotations/store.js +0 -407
  703. package/dist/web-annotations/tools.js +0 -350
  704. package/dist/web-annotations/types.js +0 -34
  705. package/dist/web-annotations/validation.js +0 -288
@@ -1,1218 +0,0 @@
1
- import React, { useCallback, useEffect, useMemo, useRef, useState } from "react";
2
- import { Box, Text, useApp, useInput } from "ink";
3
- import { isCliSourceError } from "../../cli-session/index.js";
4
- import { buildCompactTerminalRows, buildSlashCommandCatalog, buildTerminalStatusViewModel, commandSupportLabel, filterSlashCommands, formatSlashCommand, groupSlashCommandsForHelp, normalizeCommandErrorDescriptor, progressBarText, } from "../../session-ui/index.js";
5
- import { InkTerminalView } from "./InkTerminalView.js";
6
- import { isExpandableTerminalRow } from "./InkTerminalRow.js";
7
- const IDENTIFIER_PATTERN = /^(?:user|room|ps|pi|entry|evt|run|create|provider|model|agent)[_:]/i;
8
- const INITIAL_STATE = {
9
- loading: true,
10
- rows: [],
11
- input: "",
12
- mode: "transcript",
13
- };
14
- export function InkSessionApp({ source, initialSessionId, maxRows, maxLineChars, onExit }) {
15
- const app = useApp();
16
- const [state, setState] = useState(INITIAL_STATE);
17
- const openedRef = useRef(undefined);
18
- const unsubscribeRef = useRef(undefined);
19
- const closedRef = useRef(false);
20
- const stateRef = useRef(state);
21
- useEffect(() => {
22
- stateRef.current = state;
23
- }, [state]);
24
- const closeOpenSession = useCallback(() => {
25
- unsubscribeRef.current?.();
26
- unsubscribeRef.current = undefined;
27
- void openedRef.current?.close();
28
- openedRef.current = undefined;
29
- }, []);
30
- const cleanup = useMemo(() => createCliSessionCleanup(closeOpenSession, () => {
31
- void source.close();
32
- }), [closeOpenSession, source]);
33
- const openSession = useCallback(async (sessionId, message, localRows) => {
34
- closeOpenSession();
35
- const opened = await source.openSession(sessionId);
36
- openedRef.current = opened;
37
- const activeRoom = opened.session.roomId
38
- ? (await source.listRooms()).find((room) => room.id === opened.session.roomId)
39
- : undefined;
40
- const rows = [...(localRows ?? []), ...buildCompactTerminalRows(opened.traceView, { showThinking: false })];
41
- setState((current) => normalizeInkRowSelection({
42
- ...current,
43
- loading: false,
44
- status: opened.status,
45
- activeRoom,
46
- session: opened.session,
47
- rows,
48
- mode: "transcript",
49
- picker: undefined,
50
- message,
51
- error: undefined,
52
- }));
53
- unsubscribeRef.current = opened.subscribe((sourceUpdate) => {
54
- setState((current) => normalizeInkRowSelection({
55
- ...current,
56
- session: sourceUpdate.session ?? current.session,
57
- status: sourceUpdate.status ?? current.status,
58
- rows: sourceUpdate.traceView === undefined ? current.rows : buildCompactTerminalRows(sourceUpdate.traceView, { showThinking: false }),
59
- error: sourceUpdate.error?.message ?? current.error,
60
- }));
61
- });
62
- }, [closeOpenSession, source]);
63
- const requestExit = useCallback(() => {
64
- cleanup();
65
- onExit?.();
66
- app.exit();
67
- }, [app, cleanup, onExit]);
68
- const submitCommandOrMessage = useCallback(async (rawInput) => {
69
- await handleCliSessionSubmittedInput(rawInput, source, stateRef.current, setState, openSession, requestExit);
70
- }, [openSession, requestExit, source]);
71
- const openSessionPickerForRoom = useCallback(async (room, parent) => {
72
- const sessions = await source.listSessions({ roomId: room.id });
73
- const createItem = {
74
- id: `create:${room.id}`,
75
- kind: "create-session",
76
- label: "+ New session",
77
- description: ["create and open", `room ${abbreviateIdentifier(room.id)}`].join(" · "),
78
- roomId: room.id,
79
- };
80
- const status = await source.getStatus();
81
- setState((current) => ({
82
- ...current,
83
- loading: false,
84
- status,
85
- activeRoom: room,
86
- mode: "session-picker",
87
- picker: {
88
- kind: "session",
89
- title: `Select session in ${room.title}`,
90
- items: [...sessions.map(sessionPickerItem), createItem],
91
- selectedIndex: 0,
92
- emptyMessage: `No sessions in ${room.title}. Create a new session to start chatting.`,
93
- roomId: room.id,
94
- parent,
95
- },
96
- message: sessions.length === 0 ? `No sessions in ${room.title}. Press Enter to create one.` : "Select a session with arrow keys, or create a new one.",
97
- error: undefined,
98
- }));
99
- }, [source]);
100
- const openRoomPicker = useCallback(async () => {
101
- const rooms = await source.listRooms();
102
- const defaultIndex = Math.max(0, rooms.findIndex((room) => room.isDefault));
103
- const status = await source.getStatus();
104
- setState((current) => ({
105
- ...current,
106
- loading: false,
107
- status,
108
- activeRoom: undefined,
109
- session: undefined,
110
- rows: [],
111
- mode: "picker",
112
- picker: {
113
- kind: "room",
114
- title: "Select room",
115
- items: rooms.map(roomPickerItem),
116
- selectedIndex: defaultIndex,
117
- emptyMessage: "No rooms are available.",
118
- },
119
- message: rooms.length === 0 ? "No rooms are available." : "Select a room with arrow keys.",
120
- error: undefined,
121
- }));
122
- }, [source]);
123
- const selectPickerItem = useCallback(async () => {
124
- const picker = stateRef.current.picker;
125
- const item = picker?.items[picker.selectedIndex];
126
- if (!picker || !item) {
127
- setState((current) => ({ ...current, mode: "transcript", picker: undefined, message: picker?.emptyMessage ?? "Nothing to select." }));
128
- return;
129
- }
130
- try {
131
- if (picker.kind === "room") {
132
- const room = { id: item.roomId ?? item.id, title: item.label, description: item.description, isDefault: item.id === stateRef.current.status?.activeRoomId };
133
- if (picker.action === "create-session") {
134
- const created = await source.createSession({ roomId: room.id, agentId: stateRef.current.status?.activeAgentId });
135
- await openSession(created.id, `Created session ${created.title}.`);
136
- return;
137
- }
138
- if (picker.action === "select-room") {
139
- const status = await source.getStatus({ sessionId: stateRef.current.session?.id });
140
- setState((current) => ({ ...current, status, activeRoom: room, mode: "transcript", picker: undefined, overlayStack: undefined, message: `Selected room ${room.title}.`, error: undefined }));
141
- return;
142
- }
143
- await openSessionPickerForRoom(room, picker);
144
- return;
145
- }
146
- if (picker.kind === "session") {
147
- if (item.kind === "create-session") {
148
- const created = await source.createSession({ roomId: item.roomId ?? picker.roomId, agentId: stateRef.current.status?.activeAgentId });
149
- await openSession(created.id, `Created session ${created.title}.`);
150
- return;
151
- }
152
- await openSession(item.id, `Opened session ${item.label}.`);
153
- return;
154
- }
155
- if (picker.kind === "command-menu") {
156
- await selectCommandMenuItem(picker, item, source, stateRef.current, setState, openSession);
157
- return;
158
- }
159
- const sessionId = stateRef.current.session?.id;
160
- if (!sessionId)
161
- throw new Error("No session is open. Use /new or /session first.");
162
- const session = await source.setSessionAgent(sessionId, item.id);
163
- const status = await source.getStatus({ sessionId });
164
- setState((current) => ({
165
- ...current,
166
- session,
167
- status,
168
- mode: "transcript",
169
- picker: undefined,
170
- message: `Selected agent ${item.label}.`,
171
- error: undefined,
172
- }));
173
- }
174
- catch (error) {
175
- setState((current) => ({ ...current, mode: "transcript", picker: undefined, error: formatCliSessionError(error), message: undefined }));
176
- }
177
- }, [openSession, openSessionPickerForRoom, source]);
178
- useEffect(() => {
179
- closedRef.current = false;
180
- void (async () => {
181
- try {
182
- const slashCommands = await safeListSlashCommands(source);
183
- setState((current) => ({ ...current, slashCommands }));
184
- if (initialSessionId) {
185
- await openSession(initialSessionId);
186
- return;
187
- }
188
- await openRoomPicker();
189
- }
190
- catch (error) {
191
- setState((current) => ({ ...current, loading: false, error: formatCliSessionError(error) }));
192
- }
193
- })();
194
- return () => {
195
- closedRef.current = true;
196
- cleanup();
197
- };
198
- }, [cleanup, initialSessionId, openRoomPicker, openSession, source]);
199
- useInput((input, key) => {
200
- if (closedRef.current)
201
- return;
202
- if (key.ctrl && input === "c") {
203
- requestExit();
204
- return;
205
- }
206
- if (key.escape) {
207
- setState((current) => reduceInkSessionInputState(current, { type: "escape" }));
208
- return;
209
- }
210
- if (key.upArrow) {
211
- setState((current) => reduceInkSessionInputState(current, { type: "up" }));
212
- return;
213
- }
214
- if (key.downArrow) {
215
- setState((current) => reduceInkSessionInputState(current, { type: "down" }));
216
- return;
217
- }
218
- if (key.return) {
219
- const submitted = stateRef.current.input;
220
- if (submitted.length === 0 && !stateRef.current.picker && !stateRef.current.slashSuggestions && canToggleSelectedRowDetails(stateRef.current)) {
221
- setState((current) => reduceInkSessionInputState(current, { type: "toggle-details" }));
222
- return;
223
- }
224
- if (stateRef.current.slashSuggestions && !stateRef.current.picker) {
225
- const accepted = acceptSlashSuggestion(stateRef.current);
226
- if (accepted.runInput) {
227
- setState((current) => ({ ...current, input: "", slashSuggestions: undefined, message: undefined, error: undefined }));
228
- void submitCommandOrMessage(accepted.runInput);
229
- }
230
- else {
231
- setState((current) => ({ ...current, input: accepted.input, slashSuggestions: undefined, message: `Accepted ${accepted.input.trim()}. Press Enter to run or add arguments.`, error: undefined }));
232
- }
233
- return;
234
- }
235
- if (submitted.trimStart().startsWith("/")) {
236
- setState((current) => reduceInkSessionInputState(current, { type: "enter" }));
237
- void submitCommandOrMessage(submitted);
238
- return;
239
- }
240
- if (stateRef.current.picker) {
241
- void selectPickerItem();
242
- return;
243
- }
244
- setState((current) => reduceInkSessionInputState(current, { type: "enter" }));
245
- void submitCommandOrMessage(submitted);
246
- return;
247
- }
248
- if (key.backspace || key.delete) {
249
- setState((current) => reduceInkSessionInputState(current, { type: "backspace" }));
250
- return;
251
- }
252
- if (input === "d" && !key.ctrl && !key.meta && stateRef.current.input.length === 0 && !stateRef.current.picker && !stateRef.current.slashSuggestions && canToggleSelectedRowDetails(stateRef.current)) {
253
- setState((current) => reduceInkSessionInputState(current, { type: "toggle-details" }));
254
- return;
255
- }
256
- if (input && !key.ctrl && !key.meta) {
257
- setState((current) => reduceInkSessionInputState(current, { type: "text", value: input }));
258
- }
259
- });
260
- return React.createElement(InkSessionAppView, { state, maxRows, maxLineChars });
261
- }
262
- export function InkSessionAppView({ state, maxRows = 20, maxLineChars }) {
263
- const lineLimit = normalizeTerminalLineLimit(maxLineChars);
264
- const statusLines = useMemo(() => formatStatusHeaderLines(state, lineLimit), [lineLimit, state]);
265
- const commandSummary = useMemo(() => cliCommandHintText(), []);
266
- return React.createElement(Box, { flexDirection: "column" }, ...statusLines.map((line, index) => React.createElement(Text, { color: state.status?.connected === false ? "red" : "cyan", key: `status-${index}` }, line)), React.createElement(Text, { color: "gray" }, commandSummary), state.loading ? React.createElement(Text, { color: "yellow" }, "Loading CLI session…") : null, state.error ? React.createElement(Text, { color: "red" }, `Error: ${state.error}`) : null, ...(state.message ? renderBoundedTextLines(state.message, "gray", lineLimit, "message") : []), state.picker ? React.createElement(InkSessionPickerView, { picker: state.picker, maxLineChars: lineLimit }) : null, React.createElement(InkTerminalView, { rows: state.rows, maxRows, maxLineChars: lineLimit, selectedRowId: state.selectedRowId, expandedRowIds: state.expandedRowIds }), state.slashSuggestions ? React.createElement(InkSlashSuggestionsView, { suggestions: state.slashSuggestions, maxLineChars: lineLimit }) : null, React.createElement(Text, { color: state.mode === "transcript" ? "green" : "yellow" }, `› ${state.input}`));
267
- }
268
- export function normalizeTerminalLineLimit(maxLineChars) {
269
- if (maxLineChars === undefined || !Number.isFinite(maxLineChars))
270
- return 220;
271
- return Math.max(20, Math.floor(maxLineChars));
272
- }
273
- export function InkSlashSuggestionsView({ suggestions, maxLineChars }) {
274
- const lineLimit = normalizeTerminalLineLimit(maxLineChars);
275
- return React.createElement(Box, { flexDirection: "column" }, React.createElement(Text, { color: "yellow" }, "slash commands"), ...suggestions.items.slice(0, 8).map((command, index) => {
276
- const disabled = command.support === "deferred" || command.support === "browser-only" || Boolean(command.unsupportedReason);
277
- const item = {
278
- id: command.id,
279
- label: formatSlashCommand(command),
280
- description: [command.description, command.unsupportedReason ? `unavailable: ${command.unsupportedReason}` : undefined].filter(Boolean).join(" · "),
281
- disabled,
282
- };
283
- return React.createElement(Text, { key: command.id, color: overlayItemColor(index === suggestions.selectedIndex, disabled) }, formatOverlayItemLine(item, index === suggestions.selectedIndex, lineLimit));
284
- }), React.createElement(Text, { color: "gray" }, "↑↓ select · enter accept/run · esc close · ctrl-c exit"));
285
- }
286
- export function InkSessionPickerView({ picker, maxLineChars }) {
287
- const lineLimit = normalizeTerminalLineLimit(maxLineChars);
288
- const title = compactOverlayTitle(picker.title);
289
- if (picker.items.length === 0) {
290
- return React.createElement(Box, { flexDirection: "column" }, React.createElement(Text, { color: "yellow" }, title), React.createElement(Text, { color: "gray" }, picker.emptyMessage), React.createElement(Text, { color: "gray" }, "esc back/cancel · ctrl-c exit"));
291
- }
292
- return React.createElement(Box, { flexDirection: "column" }, React.createElement(Text, { color: "yellow" }, title), ...picker.items.map((item, index) => React.createElement(Text, { key: item.id, color: overlayItemColor(index === picker.selectedIndex, item.disabled === true) }, formatOverlayItemLine(item, index === picker.selectedIndex, lineLimit))), React.createElement(Text, { color: "gray" }, "↑↓ select · enter confirm · esc back/cancel · ctrl-c exit"));
293
- }
294
- export function reduceInkSessionInputState(state, action) {
295
- if (action.type === "text")
296
- return withSlashSuggestions({ ...state, input: state.input + action.value, message: undefined, error: undefined });
297
- if (action.type === "backspace")
298
- return withSlashSuggestions({ ...state, input: state.input.slice(0, -1) });
299
- if (action.type === "toggle-details")
300
- return toggleSelectedRowDetails(state);
301
- if (action.type === "escape") {
302
- if (state.slashSuggestions)
303
- return { ...state, slashSuggestions: undefined, overlayStack: popInkSessionOverlay(state.overlayStack), message: "Closed slash suggestions." };
304
- if (state.picker?.parent) {
305
- return withPickerOverlay({ ...state, picker: state.picker.parent, mode: pickerMode(state.picker.parent), message: "Back." }, state.picker.parent);
306
- }
307
- return { ...state, input: "", mode: "transcript", picker: undefined, overlayStack: popInkSessionOverlay(state.overlayStack), message: "Canceled." };
308
- }
309
- if (action.type === "up" || action.type === "down") {
310
- if (state.slashSuggestions && !state.picker && state.slashSuggestions.items.length > 0) {
311
- const direction = action.type === "up" ? -1 : 1;
312
- const selectedIndex = (state.slashSuggestions.selectedIndex + direction + state.slashSuggestions.items.length) % state.slashSuggestions.items.length;
313
- return { ...state, slashSuggestions: { ...state.slashSuggestions, selectedIndex } };
314
- }
315
- if (!state.picker && state.input.length === 0)
316
- return selectExpandableRow(state, action.type === "up" ? -1 : 1);
317
- if (!state.picker || state.picker.items.length === 0)
318
- return state;
319
- const direction = action.type === "up" ? -1 : 1;
320
- const selectedIndex = (state.picker.selectedIndex + direction + state.picker.items.length) % state.picker.items.length;
321
- return { ...state, picker: { ...state.picker, selectedIndex } };
322
- }
323
- return {
324
- ...state,
325
- input: "",
326
- slashSuggestions: undefined,
327
- message: undefined,
328
- error: undefined,
329
- };
330
- }
331
- export function normalizeInkRowSelection(state) {
332
- const expandableIds = expandableRowIds(state.rows);
333
- const expandedRowIds = (state.expandedRowIds ?? []).filter((id) => expandableIds.includes(id));
334
- if (expandableIds.length === 0)
335
- return { ...state, selectedRowId: undefined, expandedRowIds };
336
- const selectedRowId = state.selectedRowId && expandableIds.includes(state.selectedRowId)
337
- ? state.selectedRowId
338
- : expandableIds[expandableIds.length - 1];
339
- return { ...state, selectedRowId, expandedRowIds };
340
- }
341
- function selectExpandableRow(state, direction) {
342
- const normalized = normalizeInkRowSelection(state);
343
- const ids = expandableRowIds(normalized.rows);
344
- if (ids.length === 0)
345
- return normalized;
346
- const currentIndex = Math.max(0, ids.indexOf(normalized.selectedRowId ?? ids[ids.length - 1]));
347
- const selectedRowId = ids[(currentIndex + direction + ids.length) % ids.length];
348
- return { ...normalized, selectedRowId, message: `Focused row ${currentIndexLabel(ids, selectedRowId)}. Press d or Enter for details.` };
349
- }
350
- function toggleSelectedRowDetails(state) {
351
- const normalized = normalizeInkRowSelection(state);
352
- const selectedRowId = normalized.selectedRowId;
353
- if (!selectedRowId)
354
- return { ...normalized, message: "No expandable row is available." };
355
- const expanded = new Set(normalized.expandedRowIds ?? []);
356
- const opening = !expanded.has(selectedRowId);
357
- if (opening)
358
- expanded.add(selectedRowId);
359
- else
360
- expanded.delete(selectedRowId);
361
- return {
362
- ...normalized,
363
- expandedRowIds: [...expanded],
364
- message: opening ? "Opened row details." : "Closed row details.",
365
- };
366
- }
367
- function canToggleSelectedRowDetails(state) {
368
- return expandableRowIds(state.rows).length > 0;
369
- }
370
- function expandableRowIds(rows) {
371
- return rows.filter(isExpandableTerminalRow).map((row) => row.id);
372
- }
373
- function currentIndexLabel(ids, selectedRowId) {
374
- const index = selectedRowId ? ids.indexOf(selectedRowId) : -1;
375
- return index >= 0 ? `${index + 1}/${ids.length}` : `1/${ids.length}`;
376
- }
377
- function withSlashSuggestions(state) {
378
- if (state.picker || !state.input.trimStart().startsWith("/"))
379
- return { ...state, slashSuggestions: undefined, overlayStack: state.slashSuggestions ? popInkSessionOverlay(state.overlayStack) : state.overlayStack };
380
- const catalog = state.slashCommands ?? buildSlashCommandCatalog();
381
- const items = filterSlashCommands(catalog, state.input);
382
- if (items.length === 0)
383
- return { ...state, slashSuggestions: undefined, overlayStack: state.slashSuggestions ? popInkSessionOverlay(state.overlayStack) : state.overlayStack };
384
- const previous = state.slashSuggestions?.items[state.slashSuggestions.selectedIndex]?.slash;
385
- const selectedIndex = Math.max(0, previous ? items.findIndex((item) => item.slash === previous) : 0);
386
- const suggestions = { items, selectedIndex };
387
- return { ...state, slashSuggestions: suggestions, overlayStack: replaceTopOverlay(state.overlayStack, { kind: "suggestions", suggestions }) };
388
- }
389
- function acceptSlashSuggestion(state) {
390
- const suggestion = state.slashSuggestions?.items[state.slashSuggestions.selectedIndex];
391
- if (!suggestion)
392
- return { input: state.input };
393
- const trimmed = state.input.trim();
394
- const token = trimmed.split(/\s+/, 1)[0] ?? "";
395
- if (token === suggestion.slash && trimmed.length > suggestion.slash.length)
396
- return { input: state.input, runInput: trimmed };
397
- if (token === suggestion.slash && trimmed === suggestion.slash)
398
- return { input: suggestion.slash, runInput: suggestion.slash };
399
- return { input: `${suggestion.slash} ` };
400
- }
401
- export function pushInkSessionOverlay(stack, overlay) {
402
- return [...(stack ?? []), overlay];
403
- }
404
- export function popInkSessionOverlay(stack) {
405
- if (!stack || stack.length <= 1)
406
- return undefined;
407
- return stack.slice(0, -1);
408
- }
409
- export function activeInkSessionOverlay(stack) {
410
- return stack?.[stack.length - 1];
411
- }
412
- function replaceTopOverlay(stack, overlay) {
413
- if (!stack || stack.length === 0)
414
- return [overlay];
415
- return [...stack.slice(0, -1), overlay];
416
- }
417
- function withPickerOverlay(state, picker) {
418
- return { ...state, picker, overlayStack: replaceTopOverlay(state.overlayStack, { kind: "picker", picker }) };
419
- }
420
- function pickerMode(picker) {
421
- if (picker.kind === "agent")
422
- return "agent-picker";
423
- if (picker.kind === "session")
424
- return "session-picker";
425
- return "picker";
426
- }
427
- export function parseCliSessionInput(input) {
428
- const trimmed = input.trim();
429
- if (trimmed.length === 0)
430
- return { type: "empty" };
431
- if (!trimmed.startsWith("/"))
432
- return { type: "message", text: trimmed };
433
- const withoutSlash = trimmed.slice(1);
434
- const [name = "", ...rest] = withoutSlash.split(/\s+/);
435
- return { type: "command", command: { name: name.toLowerCase(), args: rest.join(" ").trim(), raw: trimmed } };
436
- }
437
- export function cliCommandSummaryText(catalog = buildSlashCommandCatalog()) {
438
- const availableSlashes = new Set(catalog.map((command) => command.slash));
439
- const preferred = ["/help", "/new", "/room", "/session", "/agent", "/profile", "/repair-user-unknown", "/status", "/clear", "/exit", "/quit"];
440
- const commands = preferred.filter((slash) => availableSlashes.has(slash));
441
- return `Commands: ${commands.join(" ")} (type / for suggestions, /help for catalog)`;
442
- }
443
- export function cliCommandHintText() {
444
- return "commands: / opens palette · /status runtime · /room /session navigate · /help catalog · ↑↓ focus rows · d/enter details · ctrl-c exit";
445
- }
446
- export function cliSessionSlashHelpText(catalog = buildSlashCommandCatalog()) {
447
- const grouped = groupSlashCommandsForHelp(catalog);
448
- const format = (command) => `${formatSlashCommand(command)} — ${command.description}${command.unsupportedReason ? ` (${command.unsupportedReason})` : ""}`;
449
- const available = grouped.available.map((command) => ` ${format(command)} [${commandSupportLabel(command)}]`).join("\n") || " none";
450
- const navigation = grouped.navigation.map((command) => ` ${format(command)} [${commandSupportLabel(command)}]`).join("\n") || " none";
451
- const unsupported = grouped.unsupported.map((command) => ` ${format(command)} [${commandSupportLabel(command)}]`).join("\n") || " none";
452
- return [
453
- "Slash command catalog",
454
- "Available Web/session actions:",
455
- available,
456
- "CLI navigation and recovery commands:",
457
- navigation,
458
- "Unsupported or deferred terminal commands:",
459
- unsupported,
460
- "Keyboard controls: type / for suggestions; ↑/↓ selects suggestions, pickers, or expandable transcript rows; Enter accepts/runs or opens focused details when the composer is empty; d toggles focused details; Esc closes suggestions or backs out of pickers; room flow is room → session.",
461
- ].join("\n");
462
- }
463
- export function formatCliSessionStatus(status, session) {
464
- if (!status && !session)
465
- return "Status unavailable.";
466
- const parts = [
467
- `source=${status?.source ?? "unknown"}`,
468
- `mode=${status?.mode ?? "unknown"}`,
469
- `connected=${status?.connected === false ? "no" : "yes"}`,
470
- `session=${session?.id ?? status?.activeSessionId ?? "none"}`,
471
- `agent=${session?.agentId ?? session?.profile ?? status?.activeAgentId ?? "default"}`,
472
- `model=${status?.activeModel ? `${status.activeModel.provider}/${status.activeModel.id}` : "unknown"}`,
473
- `rooms=${status?.rooms ?? "unknown"}`,
474
- `agents=${status?.agents ?? "unknown"}`,
475
- ];
476
- if (status?.message)
477
- parts.push(`message=${redactCliSessionStatusText(status.message)}`);
478
- return parts.join(" | ");
479
- }
480
- export async function handleCliSessionSubmittedInput(rawInput, source, state, setState, openSession, requestExit) {
481
- const parsed = parseCliSessionInput(rawInput);
482
- if (parsed.type === "empty")
483
- return;
484
- if (parsed.type === "message") {
485
- const sessionId = state.session?.id;
486
- if (!sessionId) {
487
- setState((current) => ({ ...current, error: "No session is open. Use /new to create one or /session to select an existing session." }));
488
- return;
489
- }
490
- try {
491
- await source.sendMessage(sessionId, parsed.text);
492
- setState((current) => ({ ...current, message: "Message sent.", error: undefined }));
493
- }
494
- catch (error) {
495
- setState((current) => ({ ...current, error: formatCliSessionError(error), message: undefined }));
496
- }
497
- return;
498
- }
499
- try {
500
- await handleSlashCommand(parsed.command, source, state, setState, openSession, requestExit);
501
- }
502
- catch (error) {
503
- setState((current) => applyCommandResultToState(current, parsed.command, normalizeCommandErrorDescriptor(parsed.command.name, error), current.status));
504
- }
505
- }
506
- async function handleSlashCommand(command, source, state, setState, openSession, requestExit) {
507
- if (command.name === "help") {
508
- setState((current) => ({ ...current, message: cliSessionSlashHelpText(current.slashCommands ?? state.slashCommands), error: undefined }));
509
- return;
510
- }
511
- if (command.name === "status") {
512
- const result = await source.executeSlashCommand({ command: command.name, args: command.args, sessionId: state.session?.id });
513
- const status = await source.getStatus({ sessionId: state.session?.id });
514
- setState((current) => applyCommandResultToState(current, command, result.descriptor, status));
515
- return;
516
- }
517
- if (command.name === "clear") {
518
- const result = await source.executeSlashCommand({ command: command.name, args: command.args, sessionId: state.session?.id });
519
- setState((current) => normalizeInkRowSelection({ ...current, rows: [], message: `${renderCommandResultDescriptorText(result.descriptor, current.session)}\nCleared local display. Session data was not deleted.`, error: undefined }));
520
- return;
521
- }
522
- if (command.name === "exit" || command.name === "quit") {
523
- requestExit();
524
- return;
525
- }
526
- if (command.name === "new") {
527
- if (!state.activeRoom?.id) {
528
- const rooms = await source.listRooms();
529
- const defaultIndex = Math.max(0, rooms.findIndex((room) => room.isDefault));
530
- const status = await source.getStatus({ sessionId: state.session?.id });
531
- setState((current) => ({
532
- ...current,
533
- status,
534
- mode: "picker",
535
- picker: {
536
- kind: "room",
537
- action: "create-session",
538
- title: "Select room for new session",
539
- items: rooms.map(roomPickerItem),
540
- selectedIndex: defaultIndex,
541
- emptyMessage: "No rooms are available.",
542
- },
543
- message: rooms.length === 0 ? "No rooms are available." : "Select the room for the new session.",
544
- error: undefined,
545
- }));
546
- return;
547
- }
548
- const created = await source.createSession({ roomId: state.activeRoom.id, agentId: state.status?.activeAgentId });
549
- await openSession(created.id, `Created session ${created.title}.`);
550
- return;
551
- }
552
- if (command.name === "session" || command.name === "room") {
553
- const rooms = await source.listRooms();
554
- const status = await source.getStatus({ sessionId: state.session?.id });
555
- const activeRoomId = state.activeRoom?.id ?? status.activeRoomId;
556
- const activeRoomIndex = rooms.findIndex((room) => room.id === activeRoomId);
557
- const selectedIndex = Math.max(0, activeRoomIndex >= 0 ? activeRoomIndex : rooms.findIndex((room) => room.isDefault));
558
- setState((current) => ({
559
- ...current,
560
- status,
561
- mode: "picker",
562
- picker: {
563
- kind: "room",
564
- action: command.name === "room" ? "select-room" : undefined,
565
- title: command.name === "room" ? "Select active room" : "Select room for sessions",
566
- items: rooms.map(roomPickerItem),
567
- selectedIndex,
568
- emptyMessage: "No rooms are available.",
569
- },
570
- message: rooms.length === 0 ? "No rooms are available." : command.name === "room" ? "Select the active room with arrow keys." : "Select a room, then choose or create a session.",
571
- error: undefined,
572
- }));
573
- return;
574
- }
575
- if (command.name === "repair-user-unknown") {
576
- if (!source.repairLegacyCliSessions)
577
- throw new Error("This source does not support legacy CLI session repair.");
578
- const result = await source.repairLegacyCliSessions({ roomId: state.activeRoom?.id });
579
- const status = await source.getStatus({ sessionId: state.session?.id });
580
- setState((current) => ({
581
- ...current,
582
- status,
583
- message: `Repaired ${result.repaired}/${result.scanned} legacy CLI session${result.scanned === 1 ? "" : "s"}${result.roomId ? ` in ${result.roomId}` : ""}.`,
584
- error: undefined,
585
- }));
586
- return;
587
- }
588
- if (command.name === "agent" || command.name === "profile") {
589
- const agents = await source.listAgents();
590
- setState((current) => ({
591
- ...current,
592
- mode: "agent-picker",
593
- picker: {
594
- kind: "agent",
595
- title: "Select existing agent/profile",
596
- items: agents.map(agentPickerItem),
597
- selectedIndex: 0,
598
- emptyMessage: "No existing agents/profiles are available from this source.",
599
- },
600
- message: agents.length === 0 ? "No existing agents/profiles are available." : "Select an existing agent/profile with arrow keys.",
601
- error: undefined,
602
- }));
603
- return;
604
- }
605
- if (command.name === "thinking") {
606
- if (command.args.trim()) {
607
- validateThinkingLevel(command.args);
608
- const result = await source.executeSlashCommand({ command: command.name, args: command.args, sessionId: state.session?.id });
609
- const status = await source.getStatus({ sessionId: state.session?.id });
610
- setState((current) => applyCommandResultToState(current, command, result.descriptor, status));
611
- return;
612
- }
613
- setState((current) => withPickerOverlay({
614
- ...current,
615
- mode: "picker",
616
- message: "Select a thinking level with arrow keys, then Enter.",
617
- error: undefined,
618
- }, thinkingPickerState()));
619
- return;
620
- }
621
- if (command.name === "model") {
622
- const result = await source.executeSlashCommand({ command: command.name, args: command.args, sessionId: state.session?.id });
623
- if (command.args.trim()) {
624
- const status = await source.getStatus({ sessionId: state.session?.id });
625
- setState((current) => applyCommandResultToState(current, command, result.descriptor, status));
626
- return;
627
- }
628
- const providers = modelProviderItemsFromActionResult(result.rawResult, result.descriptor);
629
- if (providers.length === 0) {
630
- setState((current) => applyCommandResultToState(current, command, result.descriptor, current.status));
631
- return;
632
- }
633
- setState((current) => withPickerOverlay({
634
- ...current,
635
- mode: "picker",
636
- message: "Select a provider, then choose a model.",
637
- error: undefined,
638
- }, modelProviderPickerState(providers)));
639
- return;
640
- }
641
- if (command.name === "login") {
642
- const result = await source.executeSlashCommand({ command: command.name, args: command.args, sessionId: state.session?.id });
643
- if (command.args.trim()) {
644
- const status = await source.getStatus({ sessionId: state.session?.id });
645
- setState((current) => applyCommandResultToState(current, command, result.descriptor, status));
646
- return;
647
- }
648
- const providers = loginProviderItemsFromActionResult(result.rawResult, result.descriptor);
649
- if (providers.length === 0) {
650
- setState((current) => applyCommandResultToState(current, command, result.descriptor, current.status));
651
- return;
652
- }
653
- setState((current) => withPickerOverlay({
654
- ...current,
655
- mode: "picker",
656
- message: "Select a login provider, then choose a terminal-safe auth method.",
657
- error: undefined,
658
- }, loginProviderPickerState(providers)));
659
- return;
660
- }
661
- if (command.name === "fork-candidates") {
662
- const result = await source.executeSlashCommand({ command: command.name, args: command.args, sessionId: state.session?.id });
663
- const descriptor = result.descriptor;
664
- if (command.args.trim() || descriptor.kind !== "menu" || descriptor.items.length === 0) {
665
- const status = await source.getStatus({ sessionId: state.session?.id });
666
- if (result.openSessionId && result.openSessionId !== state.session?.id) {
667
- const localRows = commandResultDescriptorRows(command, descriptor, status, state.session, 0);
668
- await openSession(result.openSessionId, undefined, localRows);
669
- }
670
- else
671
- setState((current) => applyCommandResultToState(current, command, descriptor, status));
672
- return;
673
- }
674
- setState((current) => withPickerOverlay({
675
- ...current,
676
- mode: "picker",
677
- message: "Select a fork candidate with arrow keys, then Enter.",
678
- error: undefined,
679
- }, forkCandidatePickerState(descriptor.items)));
680
- return;
681
- }
682
- const handled = await executeSharedSlashCommand(command, source, state, setState, openSession);
683
- if (handled)
684
- return;
685
- setState((current) => applyCommandResultToState(current, command, { kind: "unsupported", command: command.raw, reason: "Use /help for supported CLI commands." }, current.status));
686
- }
687
- async function executeSharedSlashCommand(command, source, state, setState, openSession) {
688
- const catalog = state.slashCommands ?? buildSlashCommandCatalog();
689
- const descriptor = catalog.find((candidate) => candidate.slash === `/${command.name}` || candidate.aliases?.includes(`/${command.name}`));
690
- if (!descriptor || descriptor.group === "cli" || descriptor.group === "navigation")
691
- return false;
692
- const result = await source.executeSlashCommand({ command: command.name, args: command.args, sessionId: state.session?.id });
693
- const status = await source.getStatus({ sessionId: state.session?.id });
694
- if (result.openSessionId && result.openSessionId !== state.session?.id) {
695
- const localRows = commandResultDescriptorRows(command, result.descriptor, status, state.session, 0);
696
- await openSession(result.openSessionId, undefined, localRows);
697
- return true;
698
- }
699
- setState((current) => applyCommandResultToState(current, command, result.descriptor, status));
700
- return true;
701
- }
702
- const THINKING_LEVELS = ["current/default", "off", "minimal", "low", "medium", "high", "xhigh", "max"];
703
- const APPLY_THINKING_LEVELS = new Set(["off", "minimal", "low", "medium", "high", "xhigh", "max"]);
704
- async function selectCommandMenuItem(picker, item, source, state, setState, openSession) {
705
- if (item.disabled) {
706
- setState((current) => ({ ...current, message: item.description ? `${item.label}: ${item.description}` : `${item.label} is unavailable.`, error: undefined }));
707
- return;
708
- }
709
- if (picker.action === "thinking-level") {
710
- const level = String(item.value ?? item.id);
711
- if (level === "current/default") {
712
- setState((current) => ({ ...current, mode: "transcript", picker: undefined, overlayStack: popInkSessionOverlay(current.overlayStack), message: "Kept current/default thinking level.", error: undefined }));
713
- return;
714
- }
715
- validateThinkingLevel(level);
716
- const result = await source.executeSlashCommand({ command: "thinking", args: level, sessionId: state.session?.id });
717
- const status = await source.getStatus({ sessionId: state.session?.id });
718
- setState((current) => applyCommandResultToState(current, { name: "thinking", args: level, raw: `/thinking ${level}` }, result.descriptor, status));
719
- return;
720
- }
721
- if (picker.action === "model-provider") {
722
- const provider = item.value;
723
- const models = provider?.models ?? [];
724
- const next = modelChoicePickerState(item, models, picker);
725
- setState((current) => withPickerOverlay({ ...current, mode: "picker", message: models.length === 0 ? `${item.label} has no terminal-selectable models.` : `Select model for ${item.label}.`, error: undefined }, next));
726
- return;
727
- }
728
- if (picker.action === "model-choice") {
729
- const providerValue = picker.parent?.items[picker.parent.selectedIndex]?.value;
730
- const itemValue = item.value && typeof item.value === "object" ? item.value : undefined;
731
- const providerId = String(providerValue?.id ?? itemValue?.provider ?? "");
732
- const modelId = String(itemValue?.id ?? item.id);
733
- const args = providerId ? `${providerId}/${modelId}` : modelId;
734
- const result = await source.executeSlashCommand({ command: "model", args, sessionId: state.session?.id });
735
- const status = await source.getStatus({ sessionId: state.session?.id });
736
- const command = { name: "model", args, raw: `/model ${args}` };
737
- if (result.openSessionId && result.openSessionId !== state.session?.id) {
738
- const localRows = commandResultDescriptorRows(command, result.descriptor, status, state.session, 0);
739
- await openSession(result.openSessionId, undefined, localRows);
740
- return;
741
- }
742
- setState((current) => applyCommandResultToState(current, command, result.descriptor, status));
743
- return;
744
- }
745
- if (picker.action === "login-provider") {
746
- const provider = item.value;
747
- const methods = provider?.authMethods ?? [];
748
- const next = loginMethodPickerState(item, methods, picker);
749
- setState((current) => withPickerOverlay({ ...current, mode: "picker", message: methods.length === 0 ? `${item.label} has no terminal auth methods.` : `Select auth method for ${item.label}.`, error: undefined }, next));
750
- return;
751
- }
752
- if (picker.action === "login-method") {
753
- const providerValue = picker.parent?.items[picker.parent.selectedIndex]?.value;
754
- const providerId = String(providerValue?.id ?? "");
755
- const methodId = String(item.id);
756
- const args = providerId ? `${providerId}/${methodId}` : methodId;
757
- const result = await source.executeSlashCommand({ command: "login", args, sessionId: state.session?.id });
758
- const status = await source.getStatus({ sessionId: state.session?.id });
759
- setState((current) => applyCommandResultToState(current, { name: "login", args, raw: `/login ${args}` }, result.descriptor, status));
760
- return;
761
- }
762
- if (picker.action === "fork-candidate") {
763
- const result = await source.executeSlashCommand({ command: "fork-candidates", args: item.id, sessionId: state.session?.id });
764
- const status = await source.getStatus({ sessionId: state.session?.id });
765
- const command = { name: "fork-candidates", args: item.id, raw: `/fork-candidates ${item.id}` };
766
- if (result.openSessionId && result.openSessionId !== state.session?.id) {
767
- const localRows = commandResultDescriptorRows(command, result.descriptor, status, state.session, 0);
768
- await openSession(result.openSessionId, undefined, localRows);
769
- return;
770
- }
771
- setState((current) => applyCommandResultToState(current, command, result.descriptor, status));
772
- return;
773
- }
774
- setState((current) => ({ ...current, mode: "transcript", picker: undefined, message: `${item.label} selected.`, error: undefined }));
775
- }
776
- function thinkingPickerState() {
777
- return {
778
- kind: "command-menu",
779
- action: "thinking-level",
780
- commandName: "thinking",
781
- title: "Select thinking level",
782
- items: THINKING_LEVELS.map((level) => ({ id: level, kind: "command-option", label: level, value: level, description: level === "current/default" ? "Keep current runtime/default setting" : `Set thinking to ${level}` })),
783
- selectedIndex: 0,
784
- emptyMessage: "No thinking levels are available.",
785
- };
786
- }
787
- function validateThinkingLevel(value) {
788
- const level = value.trim().toLowerCase();
789
- if (!APPLY_THINKING_LEVELS.has(level))
790
- throw new Error(`Unsupported thinking level "${value}". Use off, minimal, low, medium, high, xhigh, or max.`);
791
- }
792
- function modelProviderPickerState(providers) {
793
- return {
794
- kind: "command-menu",
795
- action: "model-provider",
796
- commandName: "model",
797
- title: "Select model provider",
798
- items: providers.map((provider) => ({ id: provider.id, kind: "command-option", label: provider.label, description: provider.description, value: provider, disabled: provider.disabled })),
799
- selectedIndex: 0,
800
- emptyMessage: "No model providers are available.",
801
- };
802
- }
803
- function modelChoicePickerState(providerItem, models, parent) {
804
- return {
805
- kind: "command-menu",
806
- action: "model-choice",
807
- commandName: "model",
808
- title: `Select model for ${providerItem.label}`,
809
- items: models.map((model) => ({ id: model.id, kind: "command-option", label: model.label, description: model.description, value: { ...model, provider: providerItem.id }, disabled: model.disabled })),
810
- selectedIndex: 0,
811
- emptyMessage: `${providerItem.label} did not return any terminal-selectable models.`,
812
- parent,
813
- };
814
- }
815
- function loginProviderPickerState(providers) {
816
- return {
817
- kind: "command-menu",
818
- action: "login-provider",
819
- commandName: "login",
820
- title: "Select login provider",
821
- items: providers.map((provider) => ({ id: provider.id, kind: "command-option", label: provider.label, description: provider.description, value: provider, disabled: provider.disabled })),
822
- selectedIndex: 0,
823
- emptyMessage: "No login providers are available.",
824
- };
825
- }
826
- function loginMethodPickerState(providerItem, methods, parent) {
827
- return {
828
- kind: "command-menu",
829
- action: "login-method",
830
- commandName: "login",
831
- title: `Select auth method for ${providerItem.label}`,
832
- items: methods.map((method) => ({ id: method.id, kind: "command-option", label: method.label, description: method.description, value: { ...method, provider: providerItem.id }, disabled: method.disabled })),
833
- selectedIndex: 0,
834
- emptyMessage: `${providerItem.label} did not return any terminal auth methods.`,
835
- parent,
836
- };
837
- }
838
- function forkCandidatePickerState(items) {
839
- return {
840
- kind: "command-menu",
841
- action: "fork-candidate",
842
- commandName: "fork-candidates",
843
- title: "Select fork candidate",
844
- items: items.map((item) => ({ id: item.id, kind: "command-option", label: item.label, description: item.description, value: item, disabled: item.disabled })),
845
- selectedIndex: 0,
846
- emptyMessage: "No fork candidates are available.",
847
- };
848
- }
849
- function modelProviderItemsFromActionResult(rawResult, descriptor) {
850
- const raw = unwrapActionPayload(rawResult);
851
- const providers = recordsField(raw, "providers");
852
- if (providers.length > 0)
853
- return providers.map((provider, index) => ({
854
- id: stringField(provider, "id") ?? stringField(provider, "provider") ?? `provider-${index}`,
855
- label: stringField(provider, "label") ?? stringField(provider, "name") ?? stringField(provider, "provider") ?? `Provider ${index + 1}`,
856
- description: stringField(provider, "description") ?? (provider.disabled === true ? stringField(provider, "reason") : undefined),
857
- disabled: provider.disabled === true,
858
- models: recordsField(provider, "models").map((model, modelIndex) => ({
859
- id: stringField(model, "id") ?? stringField(model, "model") ?? `model-${modelIndex}`,
860
- label: stringField(model, "label") ?? stringField(model, "name") ?? stringField(model, "model") ?? stringField(model, "id") ?? `Model ${modelIndex + 1}`,
861
- description: stringField(model, "description") ?? (model.disabled === true ? stringField(model, "reason") : undefined),
862
- disabled: model.disabled === true,
863
- value: model,
864
- })),
865
- }));
866
- return descriptor.kind === "menu" ? descriptor.items.map((item) => ({ ...item, models: [] })) : [];
867
- }
868
- function loginProviderItemsFromActionResult(rawResult, descriptor) {
869
- const raw = unwrapActionPayload(rawResult);
870
- const providers = recordsField(raw, "providers");
871
- if (providers.length > 0)
872
- return providers.map((provider, index) => {
873
- const id = stringField(provider, "id") ?? stringField(provider, "provider") ?? `provider-${index}`;
874
- const configured = provider.configured === true ? "configured" : provider.configured === false ? "not configured" : undefined;
875
- return {
876
- id,
877
- label: stringField(provider, "label") ?? stringField(provider, "name") ?? id,
878
- description: [configured, stringField(provider, "description")].filter(Boolean).join(" | ") || undefined,
879
- disabled: provider.disabled === true,
880
- authMethods: authMethodItems(provider),
881
- };
882
- });
883
- return descriptor.kind === "menu" ? descriptor.items.map((item) => ({ ...item, authMethods: [] })) : [];
884
- }
885
- function authMethodItems(provider) {
886
- const records = recordsField(provider, "authMethods");
887
- if (records.length > 0)
888
- return records.map((method, index) => ({
889
- id: stringField(method, "id") ?? stringField(method, "method") ?? `method-${index}`,
890
- label: authMethodLabel(stringField(method, "label") ?? stringField(method, "name") ?? stringField(method, "method") ?? stringField(method, "id") ?? `Method ${index + 1}`),
891
- description: stringField(method, "description") ?? stringField(method, "reason"),
892
- disabled: method.disabled === true,
893
- value: method,
894
- }));
895
- return arrayStringField(provider, "authMethods").map((method) => ({ id: method, label: authMethodLabel(method), description: authMethodDescription(method) }));
896
- }
897
- function authMethodLabel(method) {
898
- if (method === "device_code")
899
- return "Device code / OAuth";
900
- if (method === "api_key")
901
- return "API key";
902
- return method;
903
- }
904
- function authMethodDescription(method) {
905
- if (method === "device_code")
906
- return "Open a URL and complete sign-in in any browser.";
907
- if (method === "api_key")
908
- return "Secret input is not echoed; this flow shows safe setup instructions.";
909
- return undefined;
910
- }
911
- function unwrapActionPayload(value) {
912
- if (!value || typeof value !== "object" || Array.isArray(value))
913
- return value;
914
- const record = value;
915
- if (record.ok === true && "result" in record)
916
- return record.result;
917
- if (record.success === true && "data" in record)
918
- return record.data;
919
- return value;
920
- }
921
- function recordsField(value, key) {
922
- if (!value || typeof value !== "object" || Array.isArray(value))
923
- return [];
924
- const field = value[key];
925
- return Array.isArray(field) ? field.filter((item) => Boolean(item) && typeof item === "object" && !Array.isArray(item)) : [];
926
- }
927
- function arrayStringField(value, key) {
928
- if (!value || typeof value !== "object" || Array.isArray(value))
929
- return [];
930
- const field = value[key];
931
- return Array.isArray(field) ? field.filter((item) => typeof item === "string") : [];
932
- }
933
- function stringField(record, key) {
934
- const value = record[key];
935
- return typeof value === "string" ? value : undefined;
936
- }
937
- function applyCommandResultToState(current, command, descriptor, status) {
938
- return normalizeInkRowSelection({
939
- ...current,
940
- ...(status ? { status } : {}),
941
- mode: "transcript",
942
- picker: undefined,
943
- slashSuggestions: undefined,
944
- overlayStack: undefined,
945
- rows: appendCommandResultRows(current.rows, command, descriptor, status, current.session),
946
- message: undefined,
947
- error: undefined,
948
- });
949
- }
950
- export function appendCommandResultRows(rows, command, descriptor, status, session) {
951
- return [...rows, ...commandResultDescriptorRows(command, descriptor, status, session, rows.length)];
952
- }
953
- export function commandResultDescriptorRows(command, descriptor, status, session, startIndex = 0) {
954
- const commandLabel = command.raw || `/${command.name}${command.args ? ` ${command.args}` : ""}`;
955
- const commandRow = {
956
- id: `cli-command:${startIndex}:${command.name}`,
957
- kind: "execution.command",
958
- status: descriptor.kind === "error" ? "error" : "done",
959
- lines: [{ prefix: "bullet", tokens: [{ text: `Ran ${commandLabel}`, tone: "yellow", weight: "semibold" }] }],
960
- sourceNodeIds: [`cli-command:${startIndex}:${command.name}`],
961
- };
962
- const resultRow = commandResultDescriptorRow(command, descriptor, status, session, startIndex + 1);
963
- return resultRow ? [commandRow, resultRow] : [commandRow];
964
- }
965
- function commandResultDescriptorRow(command, descriptor, status, session, index) {
966
- const id = `cli-command-result:${index}:${command.name}`;
967
- if (descriptor.kind === "status") {
968
- return {
969
- id,
970
- kind: "tool.status",
971
- status: "done",
972
- lines: [],
973
- output: commandStatusRowOutput(descriptor.status, status, session),
974
- sourceNodeIds: [id],
975
- };
976
- }
977
- if (descriptor.kind === "error") {
978
- return { id, kind: "error", status: "error", lines: [], error: descriptor.message, sourceNodeIds: [id] };
979
- }
980
- return {
981
- id,
982
- kind: "execution.command",
983
- status: descriptor.kind === "unsupported" ? "error" : "done",
984
- lines: [],
985
- output: renderCommandResultDescriptorText(descriptor, session),
986
- sourceNodeIds: [id],
987
- };
988
- }
989
- function commandStatusRowOutput(rawStatus, status, session) {
990
- const descriptorStatus = rawStatus && typeof rawStatus === "object" && !Array.isArray(rawStatus) ? rawStatus : {};
991
- return {
992
- ...descriptorStatus,
993
- piboSessionId: session?.id ?? status?.activeSessionId ?? descriptorStatus.piboSessionId,
994
- sessionTitle: session?.title,
995
- profile: session?.profile ?? session?.agentId ?? status?.activeAgentId,
996
- activeModel: status?.activeModel ?? descriptorStatus.activeModel,
997
- mode: status?.mode ?? descriptorStatus.mode,
998
- connected: status?.connected,
999
- queuedMessages: status?.queuedMessages ?? descriptorStatus.queuedMessages,
1000
- processing: status?.processing ?? descriptorStatus.processing,
1001
- streaming: status?.streaming ?? descriptorStatus.streaming,
1002
- cwd: status?.cwd ?? descriptorStatus.cwd,
1003
- contextUsage: status?.contextUsage ?? descriptorStatus.contextUsage,
1004
- providerUsage: status?.providerUsage ?? descriptorStatus.providerUsage,
1005
- activeTools: status?.activeTools ?? descriptorStatus.activeTools,
1006
- enabledTools: status?.enabledTools ?? descriptorStatus.enabledTools,
1007
- disposed: status?.disposed ?? descriptorStatus.disposed,
1008
- thinkingLevel: status?.thinkingLevel ?? descriptorStatus.thinkingLevel,
1009
- fastMode: status?.fastMode ?? descriptorStatus.fastMode,
1010
- warnings: status?.warnings ?? descriptorStatus.warnings,
1011
- errors: status?.errors ?? descriptorStatus.errors,
1012
- message: status?.message ?? descriptorStatus.message,
1013
- };
1014
- }
1015
- export function renderCommandResultDescriptorText(descriptor, session) {
1016
- if (descriptor.kind === "text")
1017
- return [descriptor.title, descriptor.text].filter(Boolean).join(": ");
1018
- if (descriptor.kind === "unsupported")
1019
- return `${descriptor.command}: ${descriptor.reason}`;
1020
- if (descriptor.kind === "error")
1021
- return `${descriptor.title ?? "Error"}: ${descriptor.message}`;
1022
- if (descriptor.kind === "session-link")
1023
- return `${descriptor.title}: ${descriptor.label ?? "session"} ${descriptor.sessionId}${descriptor.roomLabel ? ` in ${descriptor.roomLabel}` : descriptor.roomId ? ` in room ${descriptor.roomId}` : ""}`;
1024
- if (descriptor.kind === "status")
1025
- return renderCliStatusCardText(descriptor.status, session, descriptor.title);
1026
- if (descriptor.kind === "menu")
1027
- return [descriptor.title, ...descriptor.items.map((item) => ` ${item.disabled ? "-" : "•"} ${item.label}${item.description ? ` — ${item.description}` : ""}`)].join("\n");
1028
- return `${descriptor.title ?? "Result"}: ${redactCliSessionStatusText(JSON.stringify(descriptor.value, null, 2))}`;
1029
- }
1030
- export function renderCliStatusCardText(status, session, title = "Status") {
1031
- const summary = formatCliSessionStatus(status, session);
1032
- const viewModel = buildTerminalStatusViewModel(statusViewModelInput(status, session));
1033
- const lines = [`${title}: ${summary}`];
1034
- for (const field of viewModel.fields)
1035
- lines.push(` ${field.label}: ${field.value}`);
1036
- for (const progress of viewModel.progress)
1037
- lines.push(` ${progress.label}: ${progressBarText(progress, progress.state === "available" ? 18 : 12)} — ${progress.text}`);
1038
- for (const warning of viewModel.warnings)
1039
- lines.push(` Warning: ${warning}`);
1040
- for (const error of viewModel.errors)
1041
- lines.push(` Error: ${error}`);
1042
- return lines.join("\n");
1043
- }
1044
- function statusViewModelInput(status, session) {
1045
- const runtimeState = status?.connected === false ? "disconnected" : status?.processing ? "processing" : status?.streaming ? "streaming" : status?.mode ?? "unknown";
1046
- return {
1047
- session: { id: session?.id ?? status?.activeSessionId, title: session?.title, profile: session?.profile ?? session?.agentId ?? status?.activeAgentId, status: session?.status },
1048
- model: status?.activeModel ?? session?.model ?? { provider: "unknown", id: "unknown", label: "unknown" },
1049
- runtime: { state: runtimeState, connected: status?.connected, queuedMessages: status?.queuedMessages, processing: status?.processing, streaming: status?.streaming, disposed: status?.disposed },
1050
- cwd: status?.cwd,
1051
- contextUsage: status?.contextUsage,
1052
- providerUsage: status?.providerUsage,
1053
- tools: { enabled: status?.enabledTools, active: status?.activeTools },
1054
- thinking: status?.thinkingLevel ? { level: status.thinkingLevel } : undefined,
1055
- fastMode: status?.fastMode,
1056
- warnings: status?.warnings,
1057
- errors: status?.errors,
1058
- message: status?.message,
1059
- };
1060
- }
1061
- function compactOverlayTitle(title) {
1062
- return title
1063
- .replace(/^Select existing agent\/profile$/i, "select agent")
1064
- .replace(/^Select thinking level$/i, "select thinking level")
1065
- .replace(/^Select model provider$/i, "select model provider")
1066
- .replace(/^Select login provider$/i, "select login provider")
1067
- .replace(/^Select fork candidate$/i, "select fork candidate")
1068
- .replace(/^Select auth method for /i, "select login method — ")
1069
- .replace(/^Select model for /i, "select model — ")
1070
- .replace(/^Select session in /i, "select session — ")
1071
- .replace(/^Select room for new session$/i, "select room — new session")
1072
- .replace(/^Select active room$/i, "select room")
1073
- .replace(/^Select room for sessions$/i, "select room — sessions")
1074
- .replace(/^Select room for /i, "select room — ")
1075
- .replace(/^Select /i, "select ");
1076
- }
1077
- function formatOverlayItemLine(item, selected, _max) {
1078
- const marker = selected ? "❯" : " ";
1079
- const disabled = item.disabled === true;
1080
- const availability = disabled ? "× " : "";
1081
- const secondary = item.description ? ` · ${redactCliSessionStatusText(item.description)}` : "";
1082
- return `${marker} ${availability}${redactCliSessionStatusText(item.label)}${secondary}`;
1083
- }
1084
- function overlayItemColor(selected, disabled) {
1085
- if (disabled)
1086
- return "gray";
1087
- return selected ? "green" : "white";
1088
- }
1089
- function abbreviateIdentifier(value, _max = 24) {
1090
- return value;
1091
- }
1092
- function itemMetadata(...parts) {
1093
- return parts.filter(Boolean).join(" · ") || undefined;
1094
- }
1095
- function modelLabel(model) {
1096
- if (!model)
1097
- return undefined;
1098
- return `${model.provider}/${model.id}`;
1099
- }
1100
- function roomPickerItem(room) {
1101
- const label = room.title || abbreviateIdentifier(room.id) || room.id;
1102
- return {
1103
- id: room.id,
1104
- kind: "room",
1105
- roomId: room.id,
1106
- label,
1107
- description: itemMetadata(room.isDefault ? "default" : undefined, room.description, `room ${abbreviateIdentifier(room.id)}`),
1108
- };
1109
- }
1110
- function sessionPickerItem(session) {
1111
- return {
1112
- id: session.id,
1113
- kind: "session",
1114
- roomId: session.roomId,
1115
- label: session.title || abbreviateIdentifier(session.id) || session.id,
1116
- description: itemMetadata(session.status, session.profile || session.agentId, modelLabel(session.model), session.updatedAt ? `updated ${session.updatedAt}` : undefined, abbreviateIdentifier(session.id)),
1117
- };
1118
- }
1119
- function agentPickerItem(agent) {
1120
- return {
1121
- id: agent.id,
1122
- label: agent.name || agent.id,
1123
- description: itemMetadata(agent.profileName, agent.description, IDENTIFIER_PATTERN.test(agent.id) ? abbreviateIdentifier(agent.id) : undefined),
1124
- };
1125
- }
1126
- function renderBoundedTextLines(value, color, _max, keyPrefix) {
1127
- return value.split(/\r?\n/).map((line, index) => React.createElement(Text, { key: `${keyPrefix}-${index}`, color }, line));
1128
- }
1129
- export function formatStatusHeaderLines(state, max = 220) {
1130
- const source = state.status?.source ?? "starting";
1131
- const room = statusHeaderRoom(state);
1132
- const session = state.session?.title ?? state.status?.activeSessionId ?? "no session";
1133
- const agent = state.session?.agentId ?? state.session?.profile ?? state.status?.activeAgentId ?? "default";
1134
- const model = state.status?.activeModel ? `${state.status.activeModel.provider}/${state.status.activeModel.id}` : "model unknown";
1135
- const mode = state.mode === "transcript" ? "transcript" : state.mode;
1136
- const parts = [`pibo sessions`, source, mode, room ? `room ${room}` : undefined, `session ${session}`, `agent ${agent}`, `model ${model}`].filter(Boolean);
1137
- const full = parts.join(" · ");
1138
- if (max >= 112 || full.length <= max)
1139
- return [full];
1140
- return [
1141
- `pibo sessions · ${source} · ${mode}`,
1142
- room ? `room ${room}` : "room none",
1143
- `session ${session}`,
1144
- `agent ${agent} · model ${model}`,
1145
- ];
1146
- }
1147
- function statusHeaderRoom(state) {
1148
- const title = state.activeRoom?.title?.trim();
1149
- if (title)
1150
- return title;
1151
- return state.status?.activeRoomId ?? state.session?.roomId;
1152
- }
1153
- export function createCliSessionCleanup(closeOpenSession, closeSource) {
1154
- let cleanedUp = false;
1155
- return () => {
1156
- if (cleanedUp)
1157
- return;
1158
- cleanedUp = true;
1159
- try {
1160
- closeOpenSession();
1161
- }
1162
- finally {
1163
- try {
1164
- closeSource();
1165
- }
1166
- catch {
1167
- // Exit cleanup must be best-effort so terminal shutdown can finish.
1168
- }
1169
- }
1170
- };
1171
- }
1172
- async function safeListSlashCommands(source) {
1173
- try {
1174
- return await source.listSlashCommands();
1175
- }
1176
- catch {
1177
- return buildSlashCommandCatalog();
1178
- }
1179
- }
1180
- async function safeListRooms(source) {
1181
- try {
1182
- return await source.listRooms();
1183
- }
1184
- catch {
1185
- return [];
1186
- }
1187
- }
1188
- function emptySessionRecoveryMessage(status, rooms) {
1189
- if (status.rooms === "unsupported")
1190
- return "No sessions found and this source cannot list rooms. Use /new to create a local CLI session.";
1191
- if (rooms.length === 0)
1192
- return "No sessions or rooms found. Use /new to create a local CLI session.";
1193
- return "No sessions found. Use /new to create a local CLI session.";
1194
- }
1195
- export function formatCliSessionError(error) {
1196
- const message = redactCliSessionStatusText(errorMessage(error));
1197
- if (isCliSourceError(error)) {
1198
- if (error.code === "source_closed")
1199
- return `${message}. Recovery: restart pibo tui:sessions.`;
1200
- if (error.code === "session_not_found")
1201
- return `${message}. Recovery: use /session to select another session or /new to create one.`;
1202
- if (error.code === "agent_not_found")
1203
- return `${message}. Recovery: use /agent to pick an available existing profile.`;
1204
- if (error.code === "empty_message")
1205
- return `${message}. Type a message or use /help.`;
1206
- return `${message}. Recovery: check local Pibo state, then use /status, /session, or /new.`;
1207
- }
1208
- return `${message}. Recovery: use /status for source state or restart the CLI if the problem persists.`;
1209
- }
1210
- function redactCliSessionStatusText(text) {
1211
- return text
1212
- .replace(/\b([A-Z0-9_]*(?:API[_-]?KEY|TOKEN|SECRET|PASSWORD)[A-Z0-9_]*)\s*=\s*([^\s]+)/gi, "$1=[redacted]")
1213
- .replace(/\b(api[_-]?key|token|secret|password)\s*[:=]\s*([^\s]+)/gi, "$1=[redacted]")
1214
- .replace(/\b(?:sk|pk|pibo|ghp|github_pat)_[A-Za-z0-9_\-]{8,}\b/g, "[redacted]");
1215
- }
1216
- function errorMessage(error) {
1217
- return error instanceof Error ? error.message : String(error);
1218
- }