@pasko70/pibo 1.0.5 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (429) hide show
  1. package/README.md +106 -250
  2. package/context/codex-base-prompt.md +4 -0
  3. package/context/compute-worker.md +23 -0
  4. package/context/pibo-native-tooling.md +18 -0
  5. package/context/pibo-system-prompt.md +69 -8
  6. package/dist/api/simple-agent-api.js +136 -0
  7. package/dist/app-context.js +4 -0
  8. package/dist/apps/chat/agent-profiles.js +42 -5
  9. package/dist/apps/chat/agent-store.js +113 -16
  10. package/dist/apps/chat/chat-api-routes.js +311 -0
  11. package/dist/apps/chat/chat-capability-routes.js +90 -0
  12. package/dist/apps/chat/chat-files.js +178 -0
  13. package/dist/apps/chat/chat-request-normalizers.js +681 -0
  14. package/dist/apps/chat/chat-settings-routes.js +75 -0
  15. package/dist/apps/chat/chat-trace-helpers.js +94 -0
  16. package/dist/apps/chat/chat-user-skill-routes.js +149 -0
  17. package/dist/apps/chat/cron-api.js +213 -0
  18. package/dist/apps/chat/data/chat-data-mappers.js +74 -0
  19. package/dist/apps/chat/data/event-command-service.js +75 -0
  20. package/dist/apps/chat/data/navigation-query-service.js +11 -0
  21. package/dist/apps/chat/data/project-service.js +844 -0
  22. package/dist/apps/chat/data/read-state-service.js +42 -0
  23. package/dist/apps/chat/data/room-service.js +52 -0
  24. package/dist/apps/chat/data/session-query-service.js +63 -0
  25. package/dist/apps/chat/data/timeline-query-service.js +96 -0
  26. package/dist/apps/chat/event-log.js +1 -307
  27. package/dist/apps/chat/model-catalog.js +47 -0
  28. package/dist/apps/chat/output-compactor.js +126 -0
  29. package/dist/apps/chat/output-event-policy.js +17 -0
  30. package/dist/apps/chat/project-workflow-human-actions.js +347 -0
  31. package/dist/apps/chat/project-workflow-sessions.js +260 -0
  32. package/dist/apps/chat/provider-auth-actions.js +43 -0
  33. package/dist/apps/chat/ralph-api.js +156 -0
  34. package/dist/apps/chat/read-model.js +1 -218
  35. package/dist/apps/chat/rooms.js +1 -321
  36. package/dist/apps/chat/static-assets.js +996 -0
  37. package/dist/apps/chat/stream.js +29 -6
  38. package/dist/apps/chat/trace.js +179 -1003
  39. package/dist/apps/chat/types/event-store.js +1 -0
  40. package/dist/apps/chat/types/read-model.js +1 -0
  41. package/dist/apps/chat/types/rooms.js +36 -0
  42. package/dist/apps/chat/web-app.js +3168 -1811
  43. package/dist/apps/chat/workflow-catalog.js +572 -0
  44. package/dist/apps/chat/workflow-edge-compatibility.js +51 -0
  45. package/dist/apps/chat/workflow-json-schema-validation.js +335 -0
  46. package/dist/apps/chat/workflow-persistence-model.js +140 -0
  47. package/dist/apps/chat/workflow-persistence.js +633 -0
  48. package/dist/apps/chat/workflow-registered-ref-params.js +130 -0
  49. package/dist/apps/chat/workflow-registered-ref-pickers.js +179 -0
  50. package/dist/apps/chat/workflow-registered-ref-validation.js +210 -0
  51. package/dist/apps/chat/workflow-v2-security-validation.js +93 -0
  52. package/dist/apps/chat/workflow-validation-helpers.js +114 -0
  53. package/dist/apps/chat-ui/assets/{dist-CI0Xj2Cp.js → dist-B4lw9z4F.js} +1 -1
  54. package/dist/apps/chat-ui/assets/{dist-aMr2VYOu.js → dist-BbTaHWON.js} +1 -1
  55. package/dist/apps/chat-ui/assets/{dist-u2OzzOTm.js → dist-BcT_c1EJ.js} +1 -1
  56. package/dist/apps/chat-ui/assets/{dist-Di1ScJ22.js → dist-CGINd7XU.js} +1 -1
  57. package/dist/apps/chat-ui/assets/{dist-wiRpAHIv.js → dist-CrBzZkUp.js} +1 -1
  58. package/dist/apps/chat-ui/assets/{dist-CaNOvqMY.js → dist-CyyISotB.js} +1 -1
  59. package/dist/apps/chat-ui/assets/{dist-zgYUl2B-.js → dist-DFbnFNpX.js} +1 -1
  60. package/dist/apps/chat-ui/assets/{dist-CNlhGq5i.js → dist-DGLWQLX8.js} +1 -1
  61. package/dist/apps/chat-ui/assets/{dist-BGxHKHPX.js → dist-DfcIkFSN.js} +1 -1
  62. package/dist/apps/chat-ui/assets/{dist-DrM-H3e1.js → dist-sKDHTwaT.js} +1 -1
  63. package/dist/apps/chat-ui/assets/{dist-DpmEro5R.js → dist-y9D6la48.js} +1 -1
  64. package/dist/apps/chat-ui/assets/index-C25VYnyb.css +1 -0
  65. package/dist/apps/chat-ui/assets/index-CUkuvI3v.js +165 -0
  66. package/dist/apps/chat-ui/assets/pwa-images/android/launchericon-144x144.png +0 -0
  67. package/dist/apps/chat-ui/assets/pwa-images/android/launchericon-192x192.png +0 -0
  68. package/dist/apps/chat-ui/assets/pwa-images/android/launchericon-48x48.png +0 -0
  69. package/dist/apps/chat-ui/assets/pwa-images/android/launchericon-512x512.png +0 -0
  70. package/dist/apps/chat-ui/assets/pwa-images/android/launchericon-72x72.png +0 -0
  71. package/dist/apps/chat-ui/assets/pwa-images/android/launchericon-96x96.png +0 -0
  72. package/dist/apps/chat-ui/assets/pwa-images/ios/100.png +0 -0
  73. package/dist/apps/chat-ui/assets/pwa-images/ios/1024.png +0 -0
  74. package/dist/apps/chat-ui/assets/pwa-images/ios/114.png +0 -0
  75. package/dist/apps/chat-ui/assets/pwa-images/ios/120.png +0 -0
  76. package/dist/apps/chat-ui/assets/pwa-images/ios/128.png +0 -0
  77. package/dist/apps/chat-ui/assets/pwa-images/ios/144.png +0 -0
  78. package/dist/apps/chat-ui/assets/pwa-images/ios/152.png +0 -0
  79. package/dist/apps/chat-ui/assets/pwa-images/ios/16.png +0 -0
  80. package/dist/apps/chat-ui/assets/pwa-images/ios/167.png +0 -0
  81. package/dist/apps/chat-ui/assets/pwa-images/ios/180.png +0 -0
  82. package/dist/apps/chat-ui/assets/pwa-images/ios/192.png +0 -0
  83. package/dist/apps/chat-ui/assets/pwa-images/ios/20.png +0 -0
  84. package/dist/apps/chat-ui/assets/pwa-images/ios/256.png +0 -0
  85. package/dist/apps/chat-ui/assets/pwa-images/ios/29.png +0 -0
  86. package/dist/apps/chat-ui/assets/pwa-images/ios/32.png +0 -0
  87. package/dist/apps/chat-ui/assets/pwa-images/ios/40.png +0 -0
  88. package/dist/apps/chat-ui/assets/pwa-images/ios/50.png +0 -0
  89. package/dist/apps/chat-ui/assets/pwa-images/ios/512.png +0 -0
  90. package/dist/apps/chat-ui/assets/pwa-images/ios/57.png +0 -0
  91. package/dist/apps/chat-ui/assets/pwa-images/ios/58.png +0 -0
  92. package/dist/apps/chat-ui/assets/pwa-images/ios/60.png +0 -0
  93. package/dist/apps/chat-ui/assets/pwa-images/ios/64.png +0 -0
  94. package/dist/apps/chat-ui/assets/pwa-images/ios/72.png +0 -0
  95. package/dist/apps/chat-ui/assets/pwa-images/ios/76.png +0 -0
  96. package/dist/apps/chat-ui/assets/pwa-images/ios/80.png +0 -0
  97. package/dist/apps/chat-ui/assets/pwa-images/ios/87.png +0 -0
  98. package/dist/apps/chat-ui/assets/pwa-images/windows/LargeTile.scale-100.png +0 -0
  99. package/dist/apps/chat-ui/assets/pwa-images/windows/LargeTile.scale-125.png +0 -0
  100. package/dist/apps/chat-ui/assets/pwa-images/windows/LargeTile.scale-150.png +0 -0
  101. package/dist/apps/chat-ui/assets/pwa-images/windows/LargeTile.scale-200.png +0 -0
  102. package/dist/apps/chat-ui/assets/pwa-images/windows/LargeTile.scale-400.png +0 -0
  103. package/dist/apps/chat-ui/assets/pwa-images/windows/SmallTile.scale-100.png +0 -0
  104. package/dist/apps/chat-ui/assets/pwa-images/windows/SmallTile.scale-125.png +0 -0
  105. package/dist/apps/chat-ui/assets/pwa-images/windows/SmallTile.scale-150.png +0 -0
  106. package/dist/apps/chat-ui/assets/pwa-images/windows/SmallTile.scale-200.png +0 -0
  107. package/dist/apps/chat-ui/assets/pwa-images/windows/SmallTile.scale-400.png +0 -0
  108. package/dist/apps/chat-ui/assets/pwa-images/windows/SplashScreen.scale-100.png +0 -0
  109. package/dist/apps/chat-ui/assets/pwa-images/windows/SplashScreen.scale-125.png +0 -0
  110. package/dist/apps/chat-ui/assets/pwa-images/windows/SplashScreen.scale-150.png +0 -0
  111. package/dist/apps/chat-ui/assets/pwa-images/windows/SplashScreen.scale-200.png +0 -0
  112. package/dist/apps/chat-ui/assets/pwa-images/windows/SplashScreen.scale-400.png +0 -0
  113. package/dist/apps/chat-ui/assets/pwa-images/windows/Square150x150Logo.scale-100.png +0 -0
  114. package/dist/apps/chat-ui/assets/pwa-images/windows/Square150x150Logo.scale-125.png +0 -0
  115. package/dist/apps/chat-ui/assets/pwa-images/windows/Square150x150Logo.scale-150.png +0 -0
  116. package/dist/apps/chat-ui/assets/pwa-images/windows/Square150x150Logo.scale-200.png +0 -0
  117. package/dist/apps/chat-ui/assets/pwa-images/windows/Square150x150Logo.scale-400.png +0 -0
  118. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-16.png +0 -0
  119. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-20.png +0 -0
  120. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-24.png +0 -0
  121. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-256.png +0 -0
  122. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-30.png +0 -0
  123. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-32.png +0 -0
  124. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-36.png +0 -0
  125. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-40.png +0 -0
  126. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-44.png +0 -0
  127. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-48.png +0 -0
  128. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-60.png +0 -0
  129. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-64.png +0 -0
  130. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-72.png +0 -0
  131. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-80.png +0 -0
  132. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-96.png +0 -0
  133. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-16.png +0 -0
  134. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-20.png +0 -0
  135. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-24.png +0 -0
  136. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-256.png +0 -0
  137. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-30.png +0 -0
  138. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-32.png +0 -0
  139. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-36.png +0 -0
  140. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-40.png +0 -0
  141. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-44.png +0 -0
  142. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-48.png +0 -0
  143. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-60.png +0 -0
  144. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-64.png +0 -0
  145. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-72.png +0 -0
  146. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-80.png +0 -0
  147. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-96.png +0 -0
  148. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.scale-100.png +0 -0
  149. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.scale-125.png +0 -0
  150. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.scale-150.png +0 -0
  151. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.scale-200.png +0 -0
  152. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.scale-400.png +0 -0
  153. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-16.png +0 -0
  154. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-20.png +0 -0
  155. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-24.png +0 -0
  156. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-256.png +0 -0
  157. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-30.png +0 -0
  158. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-32.png +0 -0
  159. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-36.png +0 -0
  160. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-40.png +0 -0
  161. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-44.png +0 -0
  162. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-48.png +0 -0
  163. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-60.png +0 -0
  164. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-64.png +0 -0
  165. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-72.png +0 -0
  166. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-80.png +0 -0
  167. package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-96.png +0 -0
  168. package/dist/apps/chat-ui/assets/pwa-images/windows/StoreLogo.scale-100.png +0 -0
  169. package/dist/apps/chat-ui/assets/pwa-images/windows/StoreLogo.scale-125.png +0 -0
  170. package/dist/apps/chat-ui/assets/pwa-images/windows/StoreLogo.scale-150.png +0 -0
  171. package/dist/apps/chat-ui/assets/pwa-images/windows/StoreLogo.scale-200.png +0 -0
  172. package/dist/apps/chat-ui/assets/pwa-images/windows/StoreLogo.scale-400.png +0 -0
  173. package/dist/apps/chat-ui/assets/pwa-images/windows/Wide310x150Logo.scale-100.png +0 -0
  174. package/dist/apps/chat-ui/assets/pwa-images/windows/Wide310x150Logo.scale-125.png +0 -0
  175. package/dist/apps/chat-ui/assets/pwa-images/windows/Wide310x150Logo.scale-150.png +0 -0
  176. package/dist/apps/chat-ui/assets/pwa-images/windows/Wide310x150Logo.scale-200.png +0 -0
  177. package/dist/apps/chat-ui/assets/pwa-images/windows/Wide310x150Logo.scale-400.png +0 -0
  178. package/dist/apps/chat-ui/index.html +8 -3
  179. package/dist/apps/chat-ui/manifest.webmanifest +25 -0
  180. package/dist/apps/chat-ui/sw.js +41 -0
  181. package/dist/apps/cli-ui/InkSessionApp.js +1218 -0
  182. package/dist/apps/cli-ui/InkTerminalLine.js +53 -0
  183. package/dist/apps/cli-ui/InkTerminalRow.js +304 -0
  184. package/dist/apps/cli-ui/InkTerminalView.js +25 -0
  185. package/dist/apps/cli-ui/cliSessionsCommand.js +232 -0
  186. package/dist/apps/cli-ui/index.js +8 -0
  187. package/dist/apps/cli-ui/inkColors.js +67 -0
  188. package/dist/apps/cli-ui/inkJson.js +244 -0
  189. package/dist/apps/cli-ui/inkMarkdown.js +122 -0
  190. package/dist/apps/context-files-ui/assets/{dist-DFi2YGux.js → dist-BOiGdrG-.js} +1 -1
  191. package/dist/apps/context-files-ui/assets/{dist-DyfSeBMu.js → dist-DK01b7x4.js} +1 -1
  192. package/dist/apps/context-files-ui/assets/{dist-CwbH_3RN.js → dist-DPG9jOQ-.js} +1 -1
  193. package/dist/apps/context-files-ui/assets/{dist-dTBsFYAl.js → dist-Dp5AH00p.js} +1 -1
  194. package/dist/apps/context-files-ui/assets/{dist-CxRLRmMx.js → dist-DqYw0LH7.js} +1 -1
  195. package/dist/apps/context-files-ui/assets/{dist-MyZgX9K2.js → dist-TF5iO5ML.js} +1 -1
  196. package/dist/apps/context-files-ui/assets/{dist-DQXzt2Ng.js → dist-TbjAhles.js} +1 -1
  197. package/dist/apps/context-files-ui/assets/{dist-YwR9dpb-.js → dist-ZsBbt0uY.js} +1 -1
  198. package/dist/apps/context-files-ui/assets/{dist-CKQF1zEu.js → dist-kmsvtHkH.js} +1 -1
  199. package/dist/apps/context-files-ui/assets/{dist-BJW3917N.js → dist-vnd7PMu3.js} +1 -1
  200. package/dist/apps/context-files-ui/assets/{index-BwRDoHMC.css → index-B92tL3Pp.css} +1 -1
  201. package/dist/apps/context-files-ui/assets/{index-GwvjXytt.js → index-BhAWD3dv.js} +2 -2
  202. package/dist/apps/context-files-ui/index.html +2 -2
  203. package/dist/auth/better-auth.js +2 -1
  204. package/dist/auth/login-actions.js +251 -0
  205. package/dist/auth/openai-codex-usage.js +147 -0
  206. package/dist/bin/pibo.js +0 -0
  207. package/dist/bin/rg.js +15 -0
  208. package/dist/cli-session/fakeSessionSource.js +804 -0
  209. package/dist/cli-session/index.js +3 -0
  210. package/dist/cli-session/localSessionSource.js +1144 -0
  211. package/dist/cli-session/sessionSource.js +13 -0
  212. package/dist/cli.js +142 -14
  213. package/dist/compute/cli.js +415 -0
  214. package/dist/compute/docker.js +827 -0
  215. package/dist/compute/resource-health.js +333 -0
  216. package/dist/compute/resource-policy.js +98 -0
  217. package/dist/config/config.js +9 -5
  218. package/dist/core/context-build.js +677 -0
  219. package/dist/core/model-defaults.js +51 -9
  220. package/dist/core/pibo-home.js +8 -0
  221. package/dist/core/profiles.js +48 -0
  222. package/dist/core/provider-telemetry.js +222 -0
  223. package/dist/core/routed-session.js +441 -47
  224. package/dist/core/runtime-telemetry.js +853 -0
  225. package/dist/core/runtime.js +103 -15
  226. package/dist/core/session-errors.js +47 -0
  227. package/dist/core/session-model.js +39 -0
  228. package/dist/core/session-router.js +292 -62
  229. package/dist/core/shared-app.js +17 -0
  230. package/dist/core/skill-expansion.js +43 -0
  231. package/dist/core/system-prompt-template.js +9 -9
  232. package/dist/core/telemetry-staleness.js +128 -0
  233. package/dist/core/test-output-compaction.js +145 -0
  234. package/dist/core/user-settings.js +73 -0
  235. package/dist/cron/channel.js +28 -0
  236. package/dist/cron/cli.js +230 -0
  237. package/dist/cron/plugin.js +11 -0
  238. package/dist/cron/schedule.js +214 -0
  239. package/dist/cron/service.js +177 -0
  240. package/dist/cron/store.js +349 -0
  241. package/dist/cron/types.js +1 -0
  242. package/dist/data/cli.js +184 -0
  243. package/dist/data/event-log.js +106 -0
  244. package/dist/data/final-app-space-cutover-migration.js +728 -0
  245. package/dist/data/ingest-service.js +389 -0
  246. package/dist/data/message-store.js +62 -0
  247. package/dist/data/navigation-store.js +75 -0
  248. package/dist/data/observation-store.js +46 -0
  249. package/dist/data/payload-store.js +144 -0
  250. package/dist/data/pibo-store.js +59 -0
  251. package/dist/data/schema.js +434 -0
  252. package/dist/data/session-store.js +63 -0
  253. package/dist/data/shared-app-migration.js +757 -0
  254. package/dist/data/sqlite-schema.js +12 -0
  255. package/dist/data/telemetry-preview.js +65 -0
  256. package/dist/data/telemetry-queries.js +212 -0
  257. package/dist/data/telemetry-retention.js +50 -0
  258. package/dist/data/telemetry-rows.js +158 -0
  259. package/dist/data/telemetry.js +357 -0
  260. package/dist/debug/delta-compaction.js +99 -0
  261. package/dist/debug/detail-format.js +86 -0
  262. package/dist/debug/events.js +149 -29
  263. package/dist/debug/failures.js +162 -0
  264. package/dist/debug/index.js +655 -30
  265. package/dist/debug/messages.js +185 -0
  266. package/dist/debug/next-commands.js +6 -0
  267. package/dist/debug/payloads.js +123 -0
  268. package/dist/debug/pty.js +924 -0
  269. package/dist/debug/session.js +45 -15
  270. package/dist/debug/sql.js +1 -1
  271. package/dist/debug/stores.js +18 -13
  272. package/dist/debug/summary.js +72 -0
  273. package/dist/debug/telemetry.js +649 -0
  274. package/dist/debug/tools.js +168 -0
  275. package/dist/debug/trace-render-check.js +151 -0
  276. package/dist/debug/trace.js +152 -27
  277. package/dist/debug/web-artifacts.js +63 -0
  278. package/dist/debug/web-options.js +313 -0
  279. package/dist/debug/web-render-analysis.js +310 -0
  280. package/dist/debug/web-snapshot-browser-scripts.js +303 -0
  281. package/dist/debug/web-streaming-benchmark-analysis.js +605 -0
  282. package/dist/debug/web-streaming-browser-library.js +928 -0
  283. package/dist/debug/web-streaming-browser-scripts.js +242 -0
  284. package/dist/debug/web-streaming-provider-telemetry.js +194 -0
  285. package/dist/debug/web-streaming-report.js +493 -0
  286. package/dist/debug/web-streaming-types.js +1 -0
  287. package/dist/debug/web.js +574 -0
  288. package/dist/gateway/backup.js +83 -0
  289. package/dist/gateway/cli.js +511 -0
  290. package/dist/gateway/fallback.js +155 -0
  291. package/dist/gateway/pidfile.js +84 -0
  292. package/dist/gateway/protocol.js +16 -0
  293. package/dist/gateway/server.js +174 -17
  294. package/dist/gateway/tool.js +54 -51
  295. package/dist/gateway/web.js +74 -2
  296. package/dist/index.js +3 -1
  297. package/dist/local/client.js +3 -3
  298. package/dist/local/extension.js +8 -5
  299. package/dist/plugins/builtin.js +252 -49
  300. package/dist/plugins/chat-vscode-web.js +28 -0
  301. package/dist/plugins/codex-compat.js +0 -41
  302. package/dist/plugins/context-files.js +98 -18
  303. package/dist/plugins/dev-auth.js +124 -0
  304. package/dist/plugins/native-tooling.js +15 -0
  305. package/dist/plugins/registry.js +66 -2
  306. package/dist/plugins/web-annotations.js +27 -0
  307. package/dist/providers/minimax.js +70 -0
  308. package/dist/providers/openai-compat.js +48 -0
  309. package/dist/ralph/channel.js +8 -0
  310. package/dist/ralph/cli.js +152 -0
  311. package/dist/ralph/plugin.js +14 -0
  312. package/dist/ralph/service.js +271 -0
  313. package/dist/ralph/stopping.js +151 -0
  314. package/dist/ralph/store.js +450 -0
  315. package/dist/ralph/templates.js +200 -0
  316. package/dist/ralph/types.js +1 -0
  317. package/dist/reliability/store.js +42 -26
  318. package/dist/runs/registry.js +72 -35
  319. package/dist/session-ui/commandCatalog.js +193 -0
  320. package/dist/session-ui/commandResults.js +95 -0
  321. package/dist/session-ui/index.js +7 -0
  322. package/dist/session-ui/ownerViewModel.js +27 -0
  323. package/dist/session-ui/roomSessionViewModel.js +69 -0
  324. package/dist/session-ui/statusViewModel.js +127 -0
  325. package/dist/session-ui/terminalCards.js +210 -0
  326. package/dist/session-ui/terminalRows.js +937 -0
  327. package/dist/session-ui/terminalValue.js +45 -0
  328. package/dist/sessions/pibo-data-store.js +178 -0
  329. package/dist/sessions/sqlite-store.js +78 -12
  330. package/dist/sessions/store.js +11 -4
  331. package/dist/sessions/workflow-session-kind.js +20 -0
  332. package/dist/setup/cli.js +567 -0
  333. package/dist/shared/trace-async-agent-runs.js +127 -0
  334. package/dist/shared/trace-engine.js +96 -0
  335. package/dist/shared/trace-event-projection.js +679 -0
  336. package/dist/shared/trace-live-reducer.js +191 -0
  337. package/dist/shared/trace-nodes.js +76 -0
  338. package/dist/shared/trace-order.js +11 -10
  339. package/dist/shared/trace-patch-nodes.js +83 -0
  340. package/dist/shared/trace-run-notifications.js +69 -0
  341. package/dist/shared/trace-subagent-links.js +46 -0
  342. package/dist/shared/trace-transcript.js +303 -0
  343. package/dist/shared/trace-types.js +1 -0
  344. package/dist/shared-app.js +4 -0
  345. package/dist/signals/aggregate.js +65 -0
  346. package/dist/signals/events.js +1 -0
  347. package/dist/signals/projector.js +158 -0
  348. package/dist/signals/registry.js +513 -0
  349. package/dist/signals/store.js +1 -0
  350. package/dist/signals/types.js +1 -0
  351. package/dist/skills/cli.js +117 -0
  352. package/dist/tools/agent-browser-leases.js +219 -0
  353. package/dist/tools/agent-browser-wrapper.js +99 -0
  354. package/dist/tools/browser-pool.js +623 -0
  355. package/dist/tools/browser-use-cdp.js +56 -4
  356. package/dist/tools/browser-use-leases.js +215 -37
  357. package/dist/tools/browser-use-wrapper.js +508 -65
  358. package/dist/tools/cdp-client.js +189 -0
  359. package/dist/tools/guides.js +203 -4
  360. package/dist/tools/index.js +666 -16
  361. package/dist/tools/npm-runtime.js +136 -0
  362. package/dist/tools/registry.js +107 -8
  363. package/dist/tools/runtime/index.js +3 -0
  364. package/dist/tools/runtime/node-backend.js +225 -0
  365. package/dist/tools/runtime/node-worker-source.js +206 -0
  366. package/dist/tools/runtime/python-backend.js +227 -0
  367. package/dist/tools/runtime/python-worker-source.js +178 -0
  368. package/dist/tools/runtime/registry.js +255 -0
  369. package/dist/tools/runtime/tool.js +168 -0
  370. package/dist/tools/runtime/types.js +1 -0
  371. package/dist/tools/web-search.js +2 -1
  372. package/dist/user-skills/installer.js +214 -0
  373. package/dist/user-skills/manager.js +35 -0
  374. package/dist/user-skills/store.js +267 -0
  375. package/dist/user-skills/types.js +1 -0
  376. package/dist/web/auth.js +5 -1
  377. package/dist/web/channel.js +86 -0
  378. package/dist/web/http.js +79 -14
  379. package/dist/web-annotations/api.js +348 -0
  380. package/dist/web-annotations/attachments.js +201 -0
  381. package/dist/web-annotations/cdp.js +1107 -0
  382. package/dist/web-annotations/index.js +7 -0
  383. package/dist/web-annotations/store.js +407 -0
  384. package/dist/web-annotations/tools.js +350 -0
  385. package/dist/web-annotations/types.js +34 -0
  386. package/dist/web-annotations/validation.js +288 -0
  387. package/docs/README.md +23 -0
  388. package/docs/ops/install-developer-host.md +112 -0
  389. package/docs/ops/install-user-host.md +76 -0
  390. package/docs/ops/upgrade-user-to-developer-host.md +69 -0
  391. package/package.json +24 -10
  392. package/{.codex/skills → skills/builtin}/pi-agent-harness/SKILL.md +24 -24
  393. package/skills/builtin/pibo-docker-system/SKILL.md +170 -0
  394. package/skills/builtin/pibo-spec-writing/SKILL.md +330 -0
  395. package/skills/builtin/prd/SKILL.md +143 -0
  396. package/skills/builtin/ralph-loop/SKILL.md +359 -0
  397. package/skills/builtin/ralph-prd-json/SKILL.md +123 -0
  398. package/skills/builtin/skill-creator/LICENSE.txt +202 -0
  399. package/skills/builtin/skill-creator/SKILL.md +513 -0
  400. package/skills/builtin/skill-creator/agents/analyzer.md +274 -0
  401. package/skills/builtin/skill-creator/agents/comparator.md +202 -0
  402. package/skills/builtin/skill-creator/agents/grader.md +223 -0
  403. package/skills/builtin/skill-creator/assets/eval_review.html +146 -0
  404. package/skills/builtin/skill-creator/eval-viewer/generate_review.py +471 -0
  405. package/skills/builtin/skill-creator/eval-viewer/viewer.html +1325 -0
  406. package/skills/builtin/skill-creator/references/schemas.md +430 -0
  407. package/skills/builtin/skill-creator/scripts/__init__.py +0 -0
  408. package/skills/builtin/skill-creator/scripts/aggregate_benchmark.py +401 -0
  409. package/skills/builtin/skill-creator/scripts/generate_report.py +326 -0
  410. package/skills/builtin/skill-creator/scripts/improve_description.py +247 -0
  411. package/skills/builtin/skill-creator/scripts/package_skill.py +136 -0
  412. package/skills/builtin/skill-creator/scripts/quick_validate.py +103 -0
  413. package/skills/builtin/skill-creator/scripts/run_eval.py +310 -0
  414. package/skills/builtin/skill-creator/scripts/run_loop.py +328 -0
  415. package/skills/builtin/skill-creator/scripts/utils.py +47 -0
  416. package/skills/builtin/web-annotations/SKILL.md +93 -0
  417. package/dist/apps/chat-ui/assets/index-B_E935fP.js +0 -151
  418. package/dist/apps/chat-ui/assets/index-Dk-opWl3.css +0 -1
  419. package/dist/env.js +0 -32
  420. package/dist/plugins/core-tools.js +0 -94
  421. package/dist/plugins/example.js +0 -67
  422. package/dist/plugins/remote-agent.js +0 -9
  423. package/dist/remote/channel.js +0 -176
  424. package/dist/remote/client.js +0 -92
  425. package/dist/remote/examples/tui-controller.js +0 -263
  426. package/dist/remote/protocol.js +0 -55
  427. package/dist/remote/session-client.js +0 -189
  428. package/dist/sessions/bindings.js +0 -41
  429. /package/{.codex/skills → skills/builtin}/pi-agent-harness/agents/openai.yaml +0 -0
@@ -0,0 +1,144 @@
1
+ import { createHash, randomUUID } from "node:crypto";
2
+ import { gunzipSync, gzipSync } from "node:zlib";
3
+ import { existsSync, mkdirSync, readFileSync, renameSync, rmSync, writeFileSync } from "node:fs";
4
+ import { dirname, extname, join, resolve } from "node:path";
5
+ import { piboHomePath } from "../core/pibo-home.js";
6
+ export class PayloadStore {
7
+ db;
8
+ rootDir;
9
+ constructor(db, rootDir = piboHomePath("payloads")) {
10
+ this.db = db;
11
+ this.rootDir = rootDir === ":memory:" ? rootDir : resolve(rootDir);
12
+ if (this.rootDir !== ":memory:")
13
+ mkdirSync(this.rootDir, { recursive: true });
14
+ }
15
+ writePayload(input) {
16
+ const contentType = input.contentType ?? defaultContentType(input.value);
17
+ const createdAt = input.createdAt ?? new Date().toISOString();
18
+ const bytes = payloadToBytes(input.value, contentType);
19
+ const sha256 = createHash("sha256").update(bytes).digest("hex");
20
+ const existing = this.findBySha256(sha256);
21
+ if (existing) {
22
+ this.db.prepare("UPDATE payloads SET ref_count = ref_count + 1 WHERE id = ?").run(existing.id);
23
+ return this.getPayload(existing.id) ?? existing;
24
+ }
25
+ const compressed = gzipSync(bytes);
26
+ const relativePath = buildRelativePayloadPath(sha256, contentType);
27
+ const absolutePath = this.rootDir === ":memory:" ? relativePath : join(this.rootDir, relativePath);
28
+ writeCompressedPayloadFile(absolutePath, compressed);
29
+ const id = input.id ?? `payload_${randomUUID()}`;
30
+ this.db.prepare(`
31
+ INSERT INTO payloads (
32
+ id,
33
+ sha256,
34
+ storage_kind,
35
+ storage_path,
36
+ content_type,
37
+ encoding,
38
+ byte_size,
39
+ compressed_byte_size,
40
+ preview_text,
41
+ retention_class,
42
+ ref_count,
43
+ status,
44
+ created_at,
45
+ last_verified_at
46
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
47
+ `).run(id, sha256, "file", relativePath, contentType, "gzip", bytes.byteLength, compressed.byteLength, previewTextFromValue(input.value) ?? null, input.retentionClass, 1, "committed", createdAt, createdAt);
48
+ const stored = this.getPayload(id);
49
+ if (!stored)
50
+ throw new Error(`Failed to persist payload \"${id}\"`);
51
+ return stored;
52
+ }
53
+ getPayload(id) {
54
+ const row = this.db.prepare("SELECT * FROM payloads WHERE id = ?").get(id);
55
+ return row ? payloadFromRow(row) : undefined;
56
+ }
57
+ readPayloadBytes(id) {
58
+ const payload = this.getPayload(id);
59
+ if (!payload)
60
+ throw new Error(`Unknown payload \"${id}\"`);
61
+ if (!payload.storagePath)
62
+ throw new Error(`Payload \"${id}\" has no storage path`);
63
+ const absolutePath = this.rootDir === ":memory:" ? payload.storagePath : join(this.rootDir, payload.storagePath);
64
+ const bytes = readFileSync(absolutePath);
65
+ return gunzipSync(bytes);
66
+ }
67
+ readPayloadText(id) {
68
+ return Buffer.from(this.readPayloadBytes(id)).toString("utf8");
69
+ }
70
+ readPayloadJson(id) {
71
+ return JSON.parse(this.readPayloadText(id));
72
+ }
73
+ findBySha256(sha256) {
74
+ const row = this.db.prepare("SELECT * FROM payloads WHERE sha256 = ?").get(sha256);
75
+ return row ? payloadFromRow(row) : undefined;
76
+ }
77
+ }
78
+ function defaultContentType(value) {
79
+ if (typeof value === "string")
80
+ return "text/plain; charset=utf-8";
81
+ if (value instanceof Uint8Array)
82
+ return "application/octet-stream";
83
+ return "application/json";
84
+ }
85
+ function payloadToBytes(value, contentType) {
86
+ if (typeof value === "string")
87
+ return Buffer.from(value, "utf8");
88
+ if (value instanceof Uint8Array)
89
+ return value;
90
+ if (contentType.includes("json"))
91
+ return Buffer.from(JSON.stringify(value), "utf8");
92
+ return Buffer.from(String(value), "utf8");
93
+ }
94
+ function previewTextFromValue(value) {
95
+ if (value instanceof Uint8Array)
96
+ return undefined;
97
+ const text = typeof value === "string" ? value : JSON.stringify(value);
98
+ const normalized = text.replace(/\s+/g, " ").trim();
99
+ return normalized ? normalized.slice(0, 1024) : undefined;
100
+ }
101
+ function buildRelativePayloadPath(sha256, contentType) {
102
+ const extension = extensionForContentType(contentType);
103
+ return join("sha256", sha256.slice(0, 2), sha256.slice(2, 4), `${sha256}.${extension}.gz`);
104
+ }
105
+ function extensionForContentType(contentType) {
106
+ if (contentType.includes("json"))
107
+ return "json";
108
+ if (contentType.startsWith("text/"))
109
+ return "txt";
110
+ return "bin";
111
+ }
112
+ function writeCompressedPayloadFile(path, compressed) {
113
+ if (existsSync(path))
114
+ return;
115
+ mkdirSync(dirname(path), { recursive: true });
116
+ const tempPath = `${path}.tmp-${randomUUID()}${extname(path)}`;
117
+ try {
118
+ writeFileSync(tempPath, compressed);
119
+ if (!existsSync(path))
120
+ renameSync(tempPath, path);
121
+ }
122
+ finally {
123
+ if (existsSync(tempPath))
124
+ rmSync(tempPath, { force: true });
125
+ }
126
+ }
127
+ function payloadFromRow(row) {
128
+ return {
129
+ id: row.id,
130
+ sha256: row.sha256,
131
+ storageKind: row.storage_kind,
132
+ storagePath: row.storage_path ?? undefined,
133
+ contentType: row.content_type,
134
+ encoding: row.encoding,
135
+ byteSize: row.byte_size,
136
+ compressedByteSize: row.compressed_byte_size ?? undefined,
137
+ previewText: row.preview_text ?? undefined,
138
+ retentionClass: row.retention_class,
139
+ refCount: row.ref_count,
140
+ status: row.status,
141
+ createdAt: row.created_at,
142
+ lastVerifiedAt: row.last_verified_at ?? undefined,
143
+ };
144
+ }
@@ -0,0 +1,59 @@
1
+ import { mkdirSync } from "node:fs";
2
+ import { dirname, resolve } from "node:path";
3
+ import { DatabaseSync } from "node:sqlite";
4
+ import { piboHomePath } from "../core/pibo-home.js";
5
+ import { PiboEventLogStore } from "./event-log.js";
6
+ import { MessageStore } from "./message-store.js";
7
+ import { NavigationStore } from "./navigation-store.js";
8
+ import { ObservationStore } from "./observation-store.js";
9
+ import { PayloadStore } from "./payload-store.js";
10
+ import { applyPiboDataSchema } from "./schema.js";
11
+ import { TelemetryStore } from "./telemetry.js";
12
+ import { SessionStore } from "./session-store.js";
13
+ export class PiboDataStore {
14
+ path;
15
+ db;
16
+ payloads;
17
+ eventLog;
18
+ messages;
19
+ observations;
20
+ navigation;
21
+ sessions;
22
+ telemetry;
23
+ constructor(path = piboHomePath("pibo.sqlite"), options = {}) {
24
+ this.path = path === ":memory:" ? path : resolve(path);
25
+ if (this.path !== ":memory:")
26
+ mkdirSync(dirname(this.path), { recursive: true });
27
+ this.db = new DatabaseSync(this.path);
28
+ this.db.exec("PRAGMA busy_timeout = 5000");
29
+ this.db.exec("PRAGMA foreign_keys = ON");
30
+ if (this.path !== ":memory:")
31
+ this.db.exec("PRAGMA journal_mode = WAL");
32
+ applyPiboDataSchema(this.db);
33
+ this.payloads = new PayloadStore(this.db, options.payloadRootDir ?? piboHomePath("payloads"));
34
+ this.eventLog = new PiboEventLogStore(this.db);
35
+ this.messages = new MessageStore(this.db);
36
+ this.observations = new ObservationStore(this.db);
37
+ this.navigation = new NavigationStore(this.db);
38
+ this.sessions = new SessionStore(this.db);
39
+ this.telemetry = new TelemetryStore(this.db);
40
+ }
41
+ transaction(action) {
42
+ this.db.exec("BEGIN IMMEDIATE");
43
+ try {
44
+ const result = action();
45
+ this.db.exec("COMMIT");
46
+ return result;
47
+ }
48
+ catch (error) {
49
+ this.db.exec("ROLLBACK");
50
+ throw error;
51
+ }
52
+ }
53
+ close() {
54
+ this.db.close();
55
+ }
56
+ }
57
+ export function createDefaultPiboDataStore() {
58
+ return new PiboDataStore(piboHomePath("pibo.sqlite"));
59
+ }
@@ -0,0 +1,434 @@
1
+ export const PIBO_DATA_SCHEMA_VERSION = 3;
2
+ export function applyPiboDataSchema(db) {
3
+ db.exec(`
4
+ CREATE TABLE IF NOT EXISTS sessions (
5
+ id TEXT PRIMARY KEY,
6
+ pi_session_id TEXT UNIQUE,
7
+ room_id TEXT,
8
+ root_session_id TEXT,
9
+ parent_id TEXT,
10
+ origin_id TEXT,
11
+ channel TEXT NOT NULL,
12
+ kind TEXT NOT NULL,
13
+ profile TEXT NOT NULL,
14
+ active_model_json TEXT,
15
+ workspace TEXT,
16
+ title TEXT NOT NULL DEFAULT 'Untitled Session',
17
+ first_message_preview TEXT,
18
+ status TEXT NOT NULL DEFAULT 'idle',
19
+ archived_at TEXT,
20
+ deleted_at TEXT,
21
+ metadata_json TEXT NOT NULL DEFAULT '{}',
22
+ created_at TEXT NOT NULL,
23
+ updated_at TEXT NOT NULL,
24
+ last_activity_at TEXT NOT NULL
25
+ );
26
+
27
+ CREATE TABLE IF NOT EXISTS rooms (
28
+ id TEXT PRIMARY KEY,
29
+ name TEXT NOT NULL,
30
+ topic TEXT,
31
+ type TEXT NOT NULL,
32
+ parent_room_id TEXT,
33
+ workspace TEXT,
34
+ archived_at TEXT,
35
+ retention_policy_id TEXT,
36
+ metadata_json TEXT NOT NULL DEFAULT '{}',
37
+ created_at TEXT NOT NULL,
38
+ updated_at TEXT NOT NULL
39
+ );
40
+
41
+
42
+ CREATE TABLE IF NOT EXISTS payloads (
43
+ id TEXT PRIMARY KEY,
44
+ sha256 TEXT NOT NULL UNIQUE,
45
+ storage_kind TEXT NOT NULL,
46
+ storage_path TEXT,
47
+ content_type TEXT NOT NULL,
48
+ encoding TEXT NOT NULL DEFAULT 'gzip',
49
+ byte_size INTEGER NOT NULL,
50
+ compressed_byte_size INTEGER,
51
+ preview_text TEXT,
52
+ retention_class TEXT NOT NULL,
53
+ ref_count INTEGER NOT NULL DEFAULT 0,
54
+ status TEXT NOT NULL DEFAULT 'committed',
55
+ created_at TEXT NOT NULL,
56
+ last_verified_at TEXT
57
+ );
58
+
59
+ CREATE TABLE IF NOT EXISTS event_log (
60
+ stream_id INTEGER PRIMARY KEY,
61
+ session_id TEXT,
62
+ session_sequence INTEGER,
63
+ room_id TEXT,
64
+ topic TEXT NOT NULL,
65
+ type TEXT NOT NULL,
66
+ source TEXT NOT NULL,
67
+ actor_type TEXT,
68
+ actor_id TEXT,
69
+ turn_id TEXT,
70
+ event_id TEXT,
71
+ tool_call_id TEXT,
72
+ run_id TEXT,
73
+ workflow_run_id TEXT,
74
+ idempotency_key TEXT,
75
+ retention_class TEXT NOT NULL,
76
+ payload_ref TEXT,
77
+ preview_text TEXT,
78
+ attributes_json TEXT NOT NULL DEFAULT '{}',
79
+ created_at TEXT NOT NULL,
80
+ indexed_at TEXT
81
+ );
82
+
83
+ CREATE TABLE IF NOT EXISTS chat_messages (
84
+ id TEXT PRIMARY KEY,
85
+ session_id TEXT NOT NULL,
86
+ room_id TEXT,
87
+ sequence INTEGER NOT NULL,
88
+ turn_id TEXT,
89
+ role TEXT NOT NULL,
90
+ actor_id TEXT,
91
+ status TEXT NOT NULL,
92
+ created_at TEXT NOT NULL,
93
+ completed_at TEXT,
94
+ content_preview TEXT,
95
+ content_payload_ref TEXT,
96
+ source_stream_id INTEGER,
97
+ input_tokens INTEGER,
98
+ output_tokens INTEGER,
99
+ cost_usd REAL,
100
+ attributes_json TEXT NOT NULL DEFAULT '{}',
101
+ UNIQUE(session_id, sequence)
102
+ );
103
+
104
+ CREATE TABLE IF NOT EXISTS observations (
105
+ id TEXT PRIMARY KEY,
106
+ session_id TEXT NOT NULL,
107
+ sequence INTEGER NOT NULL,
108
+ trace_id TEXT,
109
+ span_id TEXT,
110
+ parent_span_id TEXT,
111
+ parent_observation_id TEXT,
112
+ turn_id TEXT,
113
+ event_stream_id INTEGER,
114
+ kind TEXT NOT NULL,
115
+ role TEXT,
116
+ name TEXT,
117
+ status TEXT NOT NULL,
118
+ started_at TEXT NOT NULL,
119
+ ended_at TEXT,
120
+ latency_ms INTEGER,
121
+ model_provider TEXT,
122
+ model_id TEXT,
123
+ input_tokens INTEGER,
124
+ output_tokens INTEGER,
125
+ cost_usd REAL,
126
+ preview_text TEXT,
127
+ payload_ref TEXT,
128
+ attributes_json TEXT NOT NULL DEFAULT '{}',
129
+ UNIQUE(session_id, sequence)
130
+ );
131
+
132
+ CREATE TABLE IF NOT EXISTS session_stats (
133
+ session_id TEXT PRIMARY KEY,
134
+ message_count INTEGER NOT NULL DEFAULT 0,
135
+ tool_call_count INTEGER NOT NULL DEFAULT 0,
136
+ error_count INTEGER NOT NULL DEFAULT 0,
137
+ last_event_stream_id INTEGER,
138
+ last_message_sequence INTEGER,
139
+ last_observation_sequence INTEGER,
140
+ last_message_preview TEXT,
141
+ last_activity_at TEXT NOT NULL,
142
+ status TEXT NOT NULL DEFAULT 'idle',
143
+ total_latency_ms INTEGER NOT NULL DEFAULT 0,
144
+ total_input_tokens INTEGER NOT NULL DEFAULT 0,
145
+ total_output_tokens INTEGER NOT NULL DEFAULT 0,
146
+ total_cost_usd REAL NOT NULL DEFAULT 0,
147
+ updated_at TEXT NOT NULL
148
+ );
149
+
150
+ CREATE TABLE IF NOT EXISTS app_session_read_state (
151
+ session_id TEXT PRIMARY KEY,
152
+ unread_count INTEGER NOT NULL DEFAULT 0,
153
+ last_read_stream_id INTEGER NOT NULL DEFAULT 0,
154
+ last_read_message_sequence INTEGER NOT NULL DEFAULT 0,
155
+ last_read_at TEXT,
156
+ updated_at TEXT NOT NULL
157
+ );
158
+
159
+ CREATE TABLE IF NOT EXISTS app_room_read_state (
160
+ room_id TEXT PRIMARY KEY,
161
+ unread_count INTEGER NOT NULL DEFAULT 0,
162
+ last_read_stream_id INTEGER NOT NULL DEFAULT 0,
163
+ last_read_at TEXT,
164
+ updated_at TEXT NOT NULL
165
+ );
166
+
167
+ CREATE TABLE IF NOT EXISTS session_navigation (
168
+ room_id TEXT,
169
+ session_id TEXT PRIMARY KEY,
170
+ root_session_id TEXT,
171
+ parent_id TEXT,
172
+ origin_id TEXT,
173
+ title TEXT NOT NULL,
174
+ profile TEXT NOT NULL,
175
+ status TEXT NOT NULL,
176
+ archived_at TEXT,
177
+ last_activity_at TEXT NOT NULL,
178
+ last_message_preview TEXT,
179
+ child_count INTEGER NOT NULL DEFAULT 0,
180
+ sort_key TEXT NOT NULL,
181
+ updated_at TEXT NOT NULL
182
+ );
183
+
184
+ CREATE TABLE IF NOT EXISTS indexer_offsets (
185
+ indexer_name TEXT PRIMARY KEY,
186
+ source_name TEXT NOT NULL,
187
+ last_stream_id INTEGER NOT NULL,
188
+ updated_at TEXT NOT NULL
189
+ );
190
+
191
+ CREATE TABLE IF NOT EXISTS migration_import_map (
192
+ source_store TEXT NOT NULL,
193
+ source_table TEXT NOT NULL,
194
+ source_key TEXT NOT NULL,
195
+ target_kind TEXT NOT NULL,
196
+ target_id TEXT NOT NULL,
197
+ imported_at TEXT NOT NULL,
198
+ PRIMARY KEY(source_store, source_table, source_key)
199
+ );
200
+
201
+ CREATE TABLE IF NOT EXISTS telemetry_turns (
202
+ turn_id TEXT PRIMARY KEY,
203
+ pibo_session_id TEXT NOT NULL,
204
+ root_session_id TEXT,
205
+ room_id TEXT,
206
+ input_event_id TEXT,
207
+ event_id TEXT,
208
+ event_stream_id INTEGER,
209
+ payload_ref TEXT,
210
+ run_id TEXT,
211
+ source TEXT NOT NULL,
212
+ status TEXT NOT NULL,
213
+ current_phase TEXT,
214
+ queued_at TEXT NOT NULL,
215
+ started_at TEXT,
216
+ completed_at TEXT,
217
+ last_progress_at TEXT,
218
+ queued_behind INTEGER,
219
+ queue_depth INTEGER,
220
+ summary TEXT,
221
+ retention_class TEXT NOT NULL,
222
+ created_at TEXT NOT NULL,
223
+ updated_at TEXT NOT NULL,
224
+ metadata_json TEXT NOT NULL DEFAULT '{}'
225
+ );
226
+
227
+ CREATE TABLE IF NOT EXISTS telemetry_phases (
228
+ phase_id TEXT PRIMARY KEY,
229
+ turn_id TEXT NOT NULL,
230
+ pibo_session_id TEXT NOT NULL,
231
+ root_session_id TEXT,
232
+ room_id TEXT,
233
+ name TEXT NOT NULL,
234
+ status TEXT NOT NULL,
235
+ started_at TEXT NOT NULL,
236
+ ended_at TEXT,
237
+ last_progress_at TEXT,
238
+ duration_ms INTEGER,
239
+ provider_request_id TEXT,
240
+ tool_call_id TEXT,
241
+ event_stream_id INTEGER,
242
+ event_id TEXT,
243
+ payload_ref TEXT,
244
+ run_id TEXT,
245
+ counters_json TEXT NOT NULL DEFAULT '{}',
246
+ summary TEXT,
247
+ retention_class TEXT NOT NULL,
248
+ created_at TEXT NOT NULL,
249
+ updated_at TEXT NOT NULL
250
+ );
251
+
252
+ CREATE TABLE IF NOT EXISTS telemetry_provider_requests (
253
+ provider_request_id TEXT PRIMARY KEY,
254
+ pibo_session_id TEXT NOT NULL,
255
+ root_session_id TEXT,
256
+ room_id TEXT,
257
+ turn_id TEXT NOT NULL,
258
+ phase_id TEXT,
259
+ provider TEXT NOT NULL,
260
+ api TEXT NOT NULL,
261
+ model TEXT NOT NULL,
262
+ transport TEXT NOT NULL,
263
+ service_tier TEXT,
264
+ status TEXT NOT NULL,
265
+ started_at TEXT NOT NULL,
266
+ response_headers_at TEXT,
267
+ first_byte_at TEXT,
268
+ last_raw_event_at TEXT,
269
+ last_normalized_event_at TEXT,
270
+ completed_at TEXT,
271
+ http_status INTEGER,
272
+ upstream_response_id TEXT,
273
+ raw_event_count INTEGER NOT NULL DEFAULT 0,
274
+ normalized_event_count INTEGER NOT NULL DEFAULT 0,
275
+ parse_error_count INTEGER NOT NULL DEFAULT 0,
276
+ unknown_event_count INTEGER NOT NULL DEFAULT 0,
277
+ bytes_received INTEGER,
278
+ event_type_counts_json TEXT NOT NULL DEFAULT '{}',
279
+ event_stream_id INTEGER,
280
+ event_id TEXT,
281
+ payload_ref TEXT,
282
+ error_category TEXT,
283
+ error_message TEXT,
284
+ capture_mode TEXT NOT NULL,
285
+ retention_class TEXT NOT NULL,
286
+ created_at TEXT NOT NULL,
287
+ updated_at TEXT NOT NULL
288
+ );
289
+
290
+ CREATE TABLE IF NOT EXISTS telemetry_provider_events (
291
+ raw_event_id TEXT PRIMARY KEY,
292
+ provider_request_id TEXT NOT NULL,
293
+ pibo_session_id TEXT,
294
+ turn_id TEXT,
295
+ phase_id TEXT,
296
+ sequence INTEGER NOT NULL,
297
+ received_at TEXT NOT NULL,
298
+ event_type TEXT NOT NULL,
299
+ byte_size INTEGER NOT NULL DEFAULT 0,
300
+ parse_status TEXT NOT NULL,
301
+ normalized_type TEXT,
302
+ event_stream_id INTEGER,
303
+ event_id TEXT,
304
+ item_id TEXT,
305
+ tool_call_id TEXT,
306
+ payload_ref TEXT,
307
+ payload_preview_ref TEXT,
308
+ safe_fields_json TEXT NOT NULL DEFAULT '{}',
309
+ retention_class TEXT NOT NULL,
310
+ created_at TEXT NOT NULL,
311
+ updated_at TEXT NOT NULL,
312
+ UNIQUE(provider_request_id, sequence)
313
+ );
314
+
315
+ CREATE TABLE IF NOT EXISTS telemetry_tool_calls (
316
+ tool_call_id TEXT PRIMARY KEY,
317
+ pibo_session_id TEXT NOT NULL,
318
+ root_session_id TEXT,
319
+ room_id TEXT,
320
+ turn_id TEXT NOT NULL,
321
+ provider_request_id TEXT,
322
+ provider_item_id TEXT,
323
+ output_index INTEGER,
324
+ tool_name TEXT NOT NULL,
325
+ status TEXT NOT NULL,
326
+ args_started_at TEXT,
327
+ first_delta_at TEXT,
328
+ last_delta_at TEXT,
329
+ args_completed_at TEXT,
330
+ execution_started_at TEXT,
331
+ execution_ended_at TEXT,
332
+ duration_ms INTEGER,
333
+ args_bytes INTEGER NOT NULL DEFAULT 0,
334
+ parse_status TEXT NOT NULL,
335
+ safe_arg_keys_json TEXT NOT NULL DEFAULT '[]',
336
+ event_stream_id INTEGER,
337
+ event_id TEXT,
338
+ payload_ref TEXT,
339
+ run_id TEXT,
340
+ error_category TEXT,
341
+ error_message TEXT,
342
+ retention_class TEXT NOT NULL,
343
+ created_at TEXT NOT NULL,
344
+ updated_at TEXT NOT NULL
345
+ );
346
+
347
+ CREATE INDEX IF NOT EXISTS idx_sessions_room_activity
348
+ ON sessions(room_id, archived_at, last_activity_at DESC);
349
+ CREATE INDEX IF NOT EXISTS idx_sessions_parent_activity
350
+ ON sessions(parent_id, updated_at DESC);
351
+ CREATE INDEX IF NOT EXISTS idx_sessions_origin_activity
352
+ ON sessions(origin_id, updated_at DESC);
353
+ CREATE INDEX IF NOT EXISTS idx_sessions_channel_kind_activity
354
+ ON sessions(channel, kind, updated_at DESC);
355
+ CREATE INDEX IF NOT EXISTS idx_event_log_session_stream
356
+ ON event_log(session_id, stream_id);
357
+ CREATE INDEX IF NOT EXISTS idx_event_log_room_stream
358
+ ON event_log(room_id, stream_id);
359
+ CREATE INDEX IF NOT EXISTS idx_event_log_topic_stream
360
+ ON event_log(topic, stream_id);
361
+ CREATE UNIQUE INDEX IF NOT EXISTS idx_event_log_idempotency
362
+ ON event_log(idempotency_key)
363
+ WHERE idempotency_key IS NOT NULL;
364
+ CREATE INDEX IF NOT EXISTS idx_chat_messages_session_sequence
365
+ ON chat_messages(session_id, sequence);
366
+ CREATE INDEX IF NOT EXISTS idx_observations_session_sequence
367
+ ON observations(session_id, sequence);
368
+ CREATE INDEX IF NOT EXISTS idx_session_navigation_room_sort
369
+ ON session_navigation(room_id, archived_at, sort_key DESC);
370
+ CREATE INDEX IF NOT EXISTS idx_session_navigation_root
371
+ ON session_navigation(root_session_id, parent_id);
372
+ CREATE INDEX IF NOT EXISTS idx_telemetry_turns_session_updated
373
+ ON telemetry_turns(pibo_session_id, updated_at DESC);
374
+ CREATE INDEX IF NOT EXISTS idx_telemetry_turns_room_updated
375
+ ON telemetry_turns(room_id, updated_at DESC);
376
+ CREATE INDEX IF NOT EXISTS idx_telemetry_turns_event
377
+ ON telemetry_turns(event_id, event_stream_id);
378
+ CREATE INDEX IF NOT EXISTS idx_telemetry_turns_payload
379
+ ON telemetry_turns(payload_ref);
380
+ CREATE INDEX IF NOT EXISTS idx_telemetry_turns_retention_updated
381
+ ON telemetry_turns(retention_class, updated_at);
382
+ CREATE INDEX IF NOT EXISTS idx_telemetry_phases_turn_started
383
+ ON telemetry_phases(turn_id, started_at ASC);
384
+ CREATE INDEX IF NOT EXISTS idx_telemetry_phases_session_status
385
+ ON telemetry_phases(pibo_session_id, status, last_progress_at);
386
+ CREATE INDEX IF NOT EXISTS idx_telemetry_phases_provider_request
387
+ ON telemetry_phases(provider_request_id);
388
+ CREATE INDEX IF NOT EXISTS idx_telemetry_phases_tool_call
389
+ ON telemetry_phases(tool_call_id);
390
+ CREATE INDEX IF NOT EXISTS idx_telemetry_phases_event
391
+ ON telemetry_phases(event_id, event_stream_id);
392
+ CREATE INDEX IF NOT EXISTS idx_telemetry_phases_payload
393
+ ON telemetry_phases(payload_ref);
394
+ CREATE INDEX IF NOT EXISTS idx_telemetry_phases_retention_updated
395
+ ON telemetry_phases(retention_class, updated_at);
396
+ CREATE INDEX IF NOT EXISTS idx_telemetry_provider_requests_session_updated
397
+ ON telemetry_provider_requests(pibo_session_id, updated_at DESC);
398
+ CREATE INDEX IF NOT EXISTS idx_telemetry_provider_requests_turn
399
+ ON telemetry_provider_requests(turn_id, started_at ASC);
400
+ CREATE INDEX IF NOT EXISTS idx_telemetry_provider_requests_upstream
401
+ ON telemetry_provider_requests(upstream_response_id);
402
+ CREATE INDEX IF NOT EXISTS idx_telemetry_provider_requests_event
403
+ ON telemetry_provider_requests(event_id, event_stream_id);
404
+ CREATE INDEX IF NOT EXISTS idx_telemetry_provider_requests_payload
405
+ ON telemetry_provider_requests(payload_ref);
406
+ CREATE INDEX IF NOT EXISTS idx_telemetry_provider_requests_retention_updated
407
+ ON telemetry_provider_requests(retention_class, updated_at);
408
+ CREATE INDEX IF NOT EXISTS idx_telemetry_provider_events_request_sequence
409
+ ON telemetry_provider_events(provider_request_id, sequence ASC);
410
+ CREATE INDEX IF NOT EXISTS idx_telemetry_provider_events_session_received
411
+ ON telemetry_provider_events(pibo_session_id, received_at DESC);
412
+ CREATE INDEX IF NOT EXISTS idx_telemetry_provider_events_event
413
+ ON telemetry_provider_events(event_id, event_stream_id);
414
+ CREATE INDEX IF NOT EXISTS idx_telemetry_provider_events_payload
415
+ ON telemetry_provider_events(payload_ref, payload_preview_ref);
416
+ CREATE INDEX IF NOT EXISTS idx_telemetry_provider_events_tool_call
417
+ ON telemetry_provider_events(tool_call_id);
418
+ CREATE INDEX IF NOT EXISTS idx_telemetry_provider_events_retention_received
419
+ ON telemetry_provider_events(retention_class, received_at);
420
+ CREATE INDEX IF NOT EXISTS idx_telemetry_tool_calls_session_updated
421
+ ON telemetry_tool_calls(pibo_session_id, updated_at DESC);
422
+ CREATE INDEX IF NOT EXISTS idx_telemetry_tool_calls_turn
423
+ ON telemetry_tool_calls(turn_id);
424
+ CREATE INDEX IF NOT EXISTS idx_telemetry_tool_calls_provider_request
425
+ ON telemetry_tool_calls(provider_request_id);
426
+ CREATE INDEX IF NOT EXISTS idx_telemetry_tool_calls_event
427
+ ON telemetry_tool_calls(event_id, event_stream_id);
428
+ CREATE INDEX IF NOT EXISTS idx_telemetry_tool_calls_payload
429
+ ON telemetry_tool_calls(payload_ref);
430
+ CREATE INDEX IF NOT EXISTS idx_telemetry_tool_calls_retention_updated
431
+ ON telemetry_tool_calls(retention_class, updated_at);
432
+ `);
433
+ db.exec(`PRAGMA user_version = ${PIBO_DATA_SCHEMA_VERSION}`);
434
+ }
@@ -0,0 +1,63 @@
1
+ export class SessionStore {
2
+ db;
3
+ constructor(db) {
4
+ this.db = db;
5
+ }
6
+ upsertSession(input) {
7
+ const now = input.lastActivityAt ?? new Date().toISOString();
8
+ const title = input.session.title || previewText(input.firstMessagePreview ?? "") || "Untitled Session";
9
+ const baseColumns = [
10
+ "id", "pi_session_id", "room_id", "root_session_id", "parent_id", "origin_id", "channel", "kind", "profile", "active_model_json", "workspace", "title", "first_message_preview", "status", "metadata_json", "created_at", "updated_at", "last_activity_at",
11
+ ];
12
+ const values = [
13
+ input.session.id,
14
+ input.session.piSessionId,
15
+ input.roomId,
16
+ rootSessionId(input.session),
17
+ input.session.parentId ?? null,
18
+ input.session.originId ?? null,
19
+ input.session.channel,
20
+ input.session.kind,
21
+ input.session.profile,
22
+ input.session.activeModel ? JSON.stringify(input.session.activeModel) : null,
23
+ input.session.workspace ?? null,
24
+ title,
25
+ previewText(input.firstMessagePreview ?? "") ?? null,
26
+ input.status ?? "running",
27
+ JSON.stringify((input.session.metadata ?? {})),
28
+ input.session.createdAt,
29
+ now,
30
+ now,
31
+ ];
32
+ const assignments = [
33
+ "pi_session_id = excluded.pi_session_id",
34
+ "room_id = excluded.room_id",
35
+ "root_session_id = excluded.root_session_id",
36
+ "parent_id = excluded.parent_id",
37
+ "origin_id = excluded.origin_id",
38
+ "channel = excluded.channel",
39
+ "kind = excluded.kind",
40
+ "profile = excluded.profile",
41
+ "active_model_json = excluded.active_model_json",
42
+ "workspace = excluded.workspace",
43
+ "title = excluded.title",
44
+ "first_message_preview = COALESCE(sessions.first_message_preview, excluded.first_message_preview)",
45
+ "status = excluded.status",
46
+ "metadata_json = excluded.metadata_json",
47
+ "updated_at = excluded.updated_at",
48
+ "last_activity_at = excluded.last_activity_at",
49
+ ];
50
+ this.db.prepare(`
51
+ INSERT INTO sessions (${baseColumns.join(", ")})
52
+ VALUES (${baseColumns.map(() => "?").join(", ")})
53
+ ON CONFLICT(id) DO UPDATE SET ${assignments.join(", ")}
54
+ `).run(...values);
55
+ }
56
+ }
57
+ export function rootSessionId(session) {
58
+ return session.parentId ? (typeof session.metadata?.rootSessionId === "string" ? session.metadata.rootSessionId : session.parentId) : session.id;
59
+ }
60
+ function previewText(text) {
61
+ const normalized = text.replace(/\s+/g, " ").trim();
62
+ return normalized ? normalized.slice(0, 512) : undefined;
63
+ }