@withbuddi/buddi 0.1.0-pre.18 → 0.1.0-pre.20

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 (635) hide show
  1. package/README.md +10 -4
  2. package/extension/background.js +38 -7
  3. package/node_modules/@buddi/cli/dist/.tsbuildinfo +1 -1
  4. package/node_modules/@buddi/cli/dist/args.d.ts +7 -0
  5. package/node_modules/@buddi/cli/dist/args.d.ts.map +1 -1
  6. package/node_modules/@buddi/cli/dist/args.js +14 -0
  7. package/node_modules/@buddi/cli/dist/args.js.map +1 -1
  8. package/node_modules/@buddi/cli/dist/commands.d.ts.map +1 -1
  9. package/node_modules/@buddi/cli/dist/commands.js +37 -2
  10. package/node_modules/@buddi/cli/dist/commands.js.map +1 -1
  11. package/node_modules/@buddi/cli/dist/dashboard-app.d.ts +6 -0
  12. package/node_modules/@buddi/cli/dist/dashboard-app.d.ts.map +1 -1
  13. package/node_modules/@buddi/cli/dist/dashboard-app.js +16 -1
  14. package/node_modules/@buddi/cli/dist/dashboard-app.js.map +1 -1
  15. package/node_modules/@buddi/cli/dist/doctor-probes.d.ts.map +1 -1
  16. package/node_modules/@buddi/cli/dist/doctor-probes.js +5 -2
  17. package/node_modules/@buddi/cli/dist/doctor-probes.js.map +1 -1
  18. package/node_modules/@buddi/cli/dist/doctor.d.ts +16 -0
  19. package/node_modules/@buddi/cli/dist/doctor.d.ts.map +1 -1
  20. package/node_modules/@buddi/cli/dist/doctor.js +18 -0
  21. package/node_modules/@buddi/cli/dist/doctor.js.map +1 -1
  22. package/node_modules/@buddi/cli/dist/index.d.ts +1 -0
  23. package/node_modules/@buddi/cli/dist/index.d.ts.map +1 -1
  24. package/node_modules/@buddi/cli/dist/index.js +1 -0
  25. package/node_modules/@buddi/cli/dist/index.js.map +1 -1
  26. package/node_modules/@buddi/cli/dist/main.d.ts.map +1 -1
  27. package/node_modules/@buddi/cli/dist/main.js +22 -2
  28. package/node_modules/@buddi/cli/dist/main.js.map +1 -1
  29. package/node_modules/@buddi/cli/dist/status.d.ts +10 -0
  30. package/node_modules/@buddi/cli/dist/status.d.ts.map +1 -1
  31. package/node_modules/@buddi/cli/dist/status.js +4 -0
  32. package/node_modules/@buddi/cli/dist/status.js.map +1 -1
  33. package/node_modules/@buddi/cli/dist/uninstall-cmd.d.ts +42 -0
  34. package/node_modules/@buddi/cli/dist/uninstall-cmd.d.ts.map +1 -0
  35. package/node_modules/@buddi/cli/dist/uninstall-cmd.js +208 -0
  36. package/node_modules/@buddi/cli/dist/uninstall-cmd.js.map +1 -0
  37. package/node_modules/@buddi/core/dist/.tsbuildinfo +1 -1
  38. package/node_modules/@buddi/core/dist/agents/catalog.d.ts.map +1 -1
  39. package/node_modules/@buddi/core/dist/agents/catalog.js +7 -1
  40. package/node_modules/@buddi/core/dist/agents/catalog.js.map +1 -1
  41. package/node_modules/@buddi/core/dist/agents/models.d.ts.map +1 -1
  42. package/node_modules/@buddi/core/dist/agents/models.js +4 -3
  43. package/node_modules/@buddi/core/dist/agents/models.js.map +1 -1
  44. package/node_modules/@buddi/core/dist/agents/skills.d.ts +2 -2
  45. package/node_modules/@buddi/core/dist/goals/frequency.d.ts +51 -0
  46. package/node_modules/@buddi/core/dist/goals/frequency.d.ts.map +1 -0
  47. package/node_modules/@buddi/core/dist/goals/frequency.js +113 -0
  48. package/node_modules/@buddi/core/dist/goals/frequency.js.map +1 -0
  49. package/node_modules/@buddi/core/dist/goals/index.d.ts +2 -0
  50. package/node_modules/@buddi/core/dist/goals/index.d.ts.map +1 -1
  51. package/node_modules/@buddi/core/dist/goals/index.js +2 -0
  52. package/node_modules/@buddi/core/dist/goals/index.js.map +1 -1
  53. package/node_modules/@buddi/core/dist/goals/math.d.ts +8 -2
  54. package/node_modules/@buddi/core/dist/goals/math.d.ts.map +1 -1
  55. package/node_modules/@buddi/core/dist/goals/math.js +17 -4
  56. package/node_modules/@buddi/core/dist/goals/math.js.map +1 -1
  57. package/node_modules/@buddi/core/dist/goals/owner.d.ts +129 -0
  58. package/node_modules/@buddi/core/dist/goals/owner.d.ts.map +1 -0
  59. package/node_modules/@buddi/core/dist/goals/owner.js +239 -0
  60. package/node_modules/@buddi/core/dist/goals/owner.js.map +1 -0
  61. package/node_modules/@buddi/core/dist/goals/store.d.ts.map +1 -1
  62. package/node_modules/@buddi/core/dist/goals/store.js +11 -4
  63. package/node_modules/@buddi/core/dist/goals/store.js.map +1 -1
  64. package/node_modules/@buddi/core/dist/goals/types.d.ts +17 -3
  65. package/node_modules/@buddi/core/dist/goals/types.d.ts.map +1 -1
  66. package/node_modules/@buddi/core/dist/goals/types.js +8 -2
  67. package/node_modules/@buddi/core/dist/goals/types.js.map +1 -1
  68. package/node_modules/@buddi/core/dist/learning/announce.d.ts +29 -0
  69. package/node_modules/@buddi/core/dist/learning/announce.d.ts.map +1 -0
  70. package/node_modules/@buddi/core/dist/learning/announce.js +49 -0
  71. package/node_modules/@buddi/core/dist/learning/announce.js.map +1 -0
  72. package/node_modules/@buddi/core/dist/learning/index.d.ts +1 -0
  73. package/node_modules/@buddi/core/dist/learning/index.d.ts.map +1 -1
  74. package/node_modules/@buddi/core/dist/learning/index.js +1 -0
  75. package/node_modules/@buddi/core/dist/learning/index.js.map +1 -1
  76. package/node_modules/@buddi/core/dist/learning/store.d.ts.map +1 -1
  77. package/node_modules/@buddi/core/dist/learning/store.js +15 -4
  78. package/node_modules/@buddi/core/dist/learning/store.js.map +1 -1
  79. package/node_modules/@buddi/core/dist/notifications/notify.d.ts.map +1 -1
  80. package/node_modules/@buddi/core/dist/notifications/notify.js +1 -0
  81. package/node_modules/@buddi/core/dist/notifications/notify.js.map +1 -1
  82. package/node_modules/@buddi/core/dist/notifications/store.d.ts +2 -0
  83. package/node_modules/@buddi/core/dist/notifications/store.d.ts.map +1 -1
  84. package/node_modules/@buddi/core/dist/notifications/store.js +9 -0
  85. package/node_modules/@buddi/core/dist/notifications/store.js.map +1 -1
  86. package/node_modules/@buddi/core/dist/notifications/types.d.ts +6 -0
  87. package/node_modules/@buddi/core/dist/notifications/types.d.ts.map +1 -1
  88. package/node_modules/@buddi/core/dist/pages.d.ts +2 -2
  89. package/node_modules/@buddi/core/dist/provider-accounts.d.ts +7 -1
  90. package/node_modules/@buddi/core/dist/provider-accounts.d.ts.map +1 -1
  91. package/node_modules/@buddi/core/dist/provider-accounts.js +14 -1
  92. package/node_modules/@buddi/core/dist/provider-accounts.js.map +1 -1
  93. package/node_modules/@buddi/core/dist/provider.d.ts +6 -0
  94. package/node_modules/@buddi/core/dist/provider.d.ts.map +1 -1
  95. package/node_modules/@buddi/core/dist/provider.js.map +1 -1
  96. package/node_modules/@buddi/core/dist/sentinels/run.d.ts.map +1 -1
  97. package/node_modules/@buddi/core/dist/sentinels/run.js +4 -1
  98. package/node_modules/@buddi/core/dist/sentinels/run.js.map +1 -1
  99. package/node_modules/@buddi/core/dist/sentinels/types.d.ts +20 -0
  100. package/node_modules/@buddi/core/dist/sentinels/types.d.ts.map +1 -1
  101. package/node_modules/@buddi/core/dist/sentinels/types.js.map +1 -1
  102. package/node_modules/@buddi/core/dist/surfaces.d.ts +2 -0
  103. package/node_modules/@buddi/core/dist/surfaces.d.ts.map +1 -1
  104. package/node_modules/@buddi/core/dist/surfaces.js +7 -0
  105. package/node_modules/@buddi/core/dist/surfaces.js.map +1 -1
  106. package/node_modules/@buddi/core/dist/uninstall.d.ts +79 -0
  107. package/node_modules/@buddi/core/dist/uninstall.d.ts.map +1 -0
  108. package/node_modules/@buddi/core/dist/uninstall.js +109 -0
  109. package/node_modules/@buddi/core/dist/uninstall.js.map +1 -0
  110. package/node_modules/@buddi/core/dist/views.d.ts +66 -66
  111. package/node_modules/@buddi/core/migrations/044_owner_metrics.sql +45 -0
  112. package/node_modules/@buddi/core/migrations/045_frequency_goals.sql +19 -0
  113. package/node_modules/@buddi/core/migrations/046_ollama_device_key.sql +7 -0
  114. package/node_modules/@buddi/core/migrations/047_reported_context_windows.sql +5 -0
  115. package/node_modules/@buddi/core/package.json +4 -0
  116. package/node_modules/@buddi/gateway/dist/.tsbuildinfo +1 -1
  117. package/node_modules/@buddi/gateway/dist/chat/usage.d.ts.map +1 -1
  118. package/node_modules/@buddi/gateway/dist/chat/usage.js +1 -0
  119. package/node_modules/@buddi/gateway/dist/chat/usage.js.map +1 -1
  120. package/node_modules/@buddi/gateway/dist/codex-accounts.d.ts +24 -11
  121. package/node_modules/@buddi/gateway/dist/codex-accounts.d.ts.map +1 -1
  122. package/node_modules/@buddi/gateway/dist/codex-accounts.js +151 -215
  123. package/node_modules/@buddi/gateway/dist/codex-accounts.js.map +1 -1
  124. package/node_modules/@buddi/gateway/dist/index.d.ts +2 -0
  125. package/node_modules/@buddi/gateway/dist/index.d.ts.map +1 -1
  126. package/node_modules/@buddi/gateway/dist/index.js +2 -0
  127. package/node_modules/@buddi/gateway/dist/index.js.map +1 -1
  128. package/node_modules/@buddi/gateway/dist/missions/agent-run.d.ts.map +1 -1
  129. package/node_modules/@buddi/gateway/dist/missions/agent-run.js +1 -0
  130. package/node_modules/@buddi/gateway/dist/missions/agent-run.js.map +1 -1
  131. package/node_modules/@buddi/gateway/dist/missions/execute.d.ts +7 -0
  132. package/node_modules/@buddi/gateway/dist/missions/execute.d.ts.map +1 -1
  133. package/node_modules/@buddi/gateway/dist/missions/execute.js +3 -1
  134. package/node_modules/@buddi/gateway/dist/missions/execute.js.map +1 -1
  135. package/node_modules/@buddi/gateway/dist/missions/goals-format.d.ts +32 -5
  136. package/node_modules/@buddi/gateway/dist/missions/goals-format.d.ts.map +1 -1
  137. package/node_modules/@buddi/gateway/dist/missions/goals-format.js +59 -2
  138. package/node_modules/@buddi/gateway/dist/missions/goals-format.js.map +1 -1
  139. package/node_modules/@buddi/gateway/dist/missions/goals-page.d.ts +60 -5
  140. package/node_modules/@buddi/gateway/dist/missions/goals-page.d.ts.map +1 -1
  141. package/node_modules/@buddi/gateway/dist/missions/goals-page.js +355 -8
  142. package/node_modules/@buddi/gateway/dist/missions/goals-page.js.map +1 -1
  143. package/node_modules/@buddi/gateway/dist/missions/goals.d.ts +64 -5
  144. package/node_modules/@buddi/gateway/dist/missions/goals.d.ts.map +1 -1
  145. package/node_modules/@buddi/gateway/dist/missions/goals.js +834 -116
  146. package/node_modules/@buddi/gateway/dist/missions/goals.js.map +1 -1
  147. package/node_modules/@buddi/gateway/dist/missions/sentinel-wake.d.ts +5 -0
  148. package/node_modules/@buddi/gateway/dist/missions/sentinel-wake.d.ts.map +1 -1
  149. package/node_modules/@buddi/gateway/dist/missions/sentinel-wake.js +12 -0
  150. package/node_modules/@buddi/gateway/dist/missions/sentinel-wake.js.map +1 -1
  151. package/node_modules/@buddi/gateway/dist/ollama-accounts.d.ts +87 -0
  152. package/node_modules/@buddi/gateway/dist/ollama-accounts.d.ts.map +1 -0
  153. package/node_modules/@buddi/gateway/dist/ollama-accounts.js +179 -0
  154. package/node_modules/@buddi/gateway/dist/ollama-accounts.js.map +1 -0
  155. package/node_modules/@buddi/gateway/dist/owner-notify.d.ts +2 -1
  156. package/node_modules/@buddi/gateway/dist/owner-notify.d.ts.map +1 -1
  157. package/node_modules/@buddi/gateway/dist/owner-notify.js +6 -2
  158. package/node_modules/@buddi/gateway/dist/owner-notify.js.map +1 -1
  159. package/node_modules/@buddi/gateway/dist/provider-accounts.d.ts +47 -1
  160. package/node_modules/@buddi/gateway/dist/provider-accounts.d.ts.map +1 -1
  161. package/node_modules/@buddi/gateway/dist/provider-accounts.js +204 -38
  162. package/node_modules/@buddi/gateway/dist/provider-accounts.js.map +1 -1
  163. package/node_modules/@buddi/gateway/dist/serve.d.ts.map +1 -1
  164. package/node_modules/@buddi/gateway/dist/serve.js +1 -0
  165. package/node_modules/@buddi/gateway/dist/serve.js.map +1 -1
  166. package/node_modules/@buddi/gateway/dist/subscription-signins.d.ts +28 -0
  167. package/node_modules/@buddi/gateway/dist/subscription-signins.d.ts.map +1 -0
  168. package/node_modules/@buddi/gateway/dist/subscription-signins.js +30 -0
  169. package/node_modules/@buddi/gateway/dist/subscription-signins.js.map +1 -0
  170. package/node_modules/@buddi/gateway/dist/surfaces/context-budget.d.ts.map +1 -1
  171. package/node_modules/@buddi/gateway/dist/surfaces/context-budget.js +10 -3
  172. package/node_modules/@buddi/gateway/dist/surfaces/context-budget.js.map +1 -1
  173. package/node_modules/@buddi/gateway/dist/telegram/api.d.ts +43 -9
  174. package/node_modules/@buddi/gateway/dist/telegram/api.d.ts.map +1 -1
  175. package/node_modules/@buddi/gateway/dist/telegram/api.js +80 -21
  176. package/node_modules/@buddi/gateway/dist/telegram/api.js.map +1 -1
  177. package/node_modules/@buddi/gateway/dist/telegram/attachments.d.ts +6 -0
  178. package/node_modules/@buddi/gateway/dist/telegram/attachments.d.ts.map +1 -1
  179. package/node_modules/@buddi/gateway/dist/telegram/attachments.js +1 -0
  180. package/node_modules/@buddi/gateway/dist/telegram/attachments.js.map +1 -1
  181. package/node_modules/@buddi/gateway/dist/telegram/browser-view.d.ts.map +1 -1
  182. package/node_modules/@buddi/gateway/dist/telegram/browser-view.js +2 -1
  183. package/node_modules/@buddi/gateway/dist/telegram/browser-view.js.map +1 -1
  184. package/node_modules/@buddi/gateway/dist/telegram/channel.d.ts +7 -1
  185. package/node_modules/@buddi/gateway/dist/telegram/channel.d.ts.map +1 -1
  186. package/node_modules/@buddi/gateway/dist/telegram/channel.js +24 -2
  187. package/node_modules/@buddi/gateway/dist/telegram/channel.js.map +1 -1
  188. package/node_modules/@buddi/gateway/dist/telegram/commands.d.ts +28 -0
  189. package/node_modules/@buddi/gateway/dist/telegram/commands.d.ts.map +1 -0
  190. package/node_modules/@buddi/gateway/dist/telegram/commands.js +74 -0
  191. package/node_modules/@buddi/gateway/dist/telegram/commands.js.map +1 -0
  192. package/node_modules/@buddi/gateway/dist/telegram/main.d.ts +3 -0
  193. package/node_modules/@buddi/gateway/dist/telegram/main.d.ts.map +1 -1
  194. package/node_modules/@buddi/gateway/dist/telegram/main.js +71 -2
  195. package/node_modules/@buddi/gateway/dist/telegram/main.js.map +1 -1
  196. package/node_modules/@buddi/gateway/dist/telegram/outbound.d.ts +191 -0
  197. package/node_modules/@buddi/gateway/dist/telegram/outbound.d.ts.map +1 -0
  198. package/node_modules/@buddi/gateway/dist/telegram/outbound.js +671 -0
  199. package/node_modules/@buddi/gateway/dist/telegram/outbound.js.map +1 -0
  200. package/node_modules/@buddi/gateway/dist/telegram/proposals.d.ts +65 -0
  201. package/node_modules/@buddi/gateway/dist/telegram/proposals.d.ts.map +1 -0
  202. package/node_modules/@buddi/gateway/dist/telegram/proposals.js +183 -0
  203. package/node_modules/@buddi/gateway/dist/telegram/proposals.js.map +1 -0
  204. package/node_modules/@buddi/gateway/dist/telegram/surface.d.ts +47 -47
  205. package/node_modules/@buddi/gateway/dist/telegram/surface.d.ts.map +1 -1
  206. package/node_modules/@buddi/gateway/dist/telegram/surface.js +99 -290
  207. package/node_modules/@buddi/gateway/dist/telegram/surface.js.map +1 -1
  208. package/node_modules/@buddi/gateway/dist/web/onboarding.d.ts.map +1 -1
  209. package/node_modules/@buddi/gateway/dist/web/onboarding.js +4 -0
  210. package/node_modules/@buddi/gateway/dist/web/onboarding.js.map +1 -1
  211. package/node_modules/@buddi/gateway/dist/web/secrets.d.ts.map +1 -1
  212. package/node_modules/@buddi/gateway/dist/web/secrets.js +3 -2
  213. package/node_modules/@buddi/gateway/dist/web/secrets.js.map +1 -1
  214. package/node_modules/@buddi/gateway/dist/web/server.d.ts.map +1 -1
  215. package/node_modules/@buddi/gateway/dist/web/server.js +36 -14
  216. package/node_modules/@buddi/gateway/dist/web/server.js.map +1 -1
  217. package/node_modules/@buddi/gateway/dist/web/telegram.d.ts +39 -0
  218. package/node_modules/@buddi/gateway/dist/web/telegram.d.ts.map +1 -1
  219. package/node_modules/@buddi/gateway/dist/web/telegram.js +53 -1
  220. package/node_modules/@buddi/gateway/dist/web/telegram.js.map +1 -1
  221. package/node_modules/@buddi/install/dist/.tsbuildinfo +1 -1
  222. package/node_modules/@buddi/install/dist/launcher.d.ts.map +1 -1
  223. package/node_modules/@buddi/install/dist/launcher.js +135 -10
  224. package/node_modules/@buddi/install/dist/launcher.js.map +1 -1
  225. package/node_modules/@buddi/install/dist/uninstall.d.ts +59 -0
  226. package/node_modules/@buddi/install/dist/uninstall.d.ts.map +1 -0
  227. package/node_modules/@buddi/install/dist/uninstall.js +260 -0
  228. package/node_modules/@buddi/install/dist/uninstall.js.map +1 -0
  229. package/node_modules/@buddi/runtime/dist/.tsbuildinfo +1 -1
  230. package/node_modules/@buddi/runtime/dist/codex-direct.d.ts +55 -0
  231. package/node_modules/@buddi/runtime/dist/codex-direct.d.ts.map +1 -0
  232. package/node_modules/@buddi/runtime/dist/codex-direct.js +334 -0
  233. package/node_modules/@buddi/runtime/dist/codex-direct.js.map +1 -0
  234. package/node_modules/@buddi/runtime/dist/codex-oauth.d.ts +66 -0
  235. package/node_modules/@buddi/runtime/dist/codex-oauth.d.ts.map +1 -0
  236. package/node_modules/@buddi/runtime/dist/codex-oauth.js +210 -0
  237. package/node_modules/@buddi/runtime/dist/codex-oauth.js.map +1 -0
  238. package/node_modules/@buddi/runtime/dist/codex-profile.d.ts +19 -0
  239. package/node_modules/@buddi/runtime/dist/codex-profile.d.ts.map +1 -0
  240. package/node_modules/@buddi/runtime/dist/codex-profile.js +99 -0
  241. package/node_modules/@buddi/runtime/dist/codex-profile.js.map +1 -0
  242. package/node_modules/@buddi/runtime/dist/context-window.d.ts.map +1 -1
  243. package/node_modules/@buddi/runtime/dist/context-window.js +9 -2
  244. package/node_modules/@buddi/runtime/dist/context-window.js.map +1 -1
  245. package/node_modules/@buddi/runtime/dist/delegate.d.ts +24 -0
  246. package/node_modules/@buddi/runtime/dist/delegate.d.ts.map +1 -1
  247. package/node_modules/@buddi/runtime/dist/delegate.js +87 -11
  248. package/node_modules/@buddi/runtime/dist/delegate.js.map +1 -1
  249. package/node_modules/@buddi/runtime/dist/index.d.ts +4 -4
  250. package/node_modules/@buddi/runtime/dist/index.d.ts.map +1 -1
  251. package/node_modules/@buddi/runtime/dist/index.js +5 -5
  252. package/node_modules/@buddi/runtime/dist/index.js.map +1 -1
  253. package/node_modules/@buddi/runtime/dist/loop.d.ts +7 -0
  254. package/node_modules/@buddi/runtime/dist/loop.d.ts.map +1 -1
  255. package/node_modules/@buddi/runtime/dist/loop.js +48 -8
  256. package/node_modules/@buddi/runtime/dist/loop.js.map +1 -1
  257. package/node_modules/@buddi/runtime/dist/ollama-signing.d.ts +52 -0
  258. package/node_modules/@buddi/runtime/dist/ollama-signing.d.ts.map +1 -0
  259. package/node_modules/@buddi/runtime/dist/ollama-signing.js +154 -0
  260. package/node_modules/@buddi/runtime/dist/ollama-signing.js.map +1 -0
  261. package/node_modules/@buddi/runtime/dist/openai.d.ts.map +1 -1
  262. package/node_modules/@buddi/runtime/dist/openai.js +38 -9
  263. package/node_modules/@buddi/runtime/dist/openai.js.map +1 -1
  264. package/node_modules/@buddi/runtime/dist/provider-models.d.ts +2 -0
  265. package/node_modules/@buddi/runtime/dist/provider-models.d.ts.map +1 -1
  266. package/node_modules/@buddi/runtime/dist/provider-models.js +8 -3
  267. package/node_modules/@buddi/runtime/dist/provider-models.js.map +1 -1
  268. package/node_modules/@buddi/tool-artifacts/dist/.tsbuildinfo +1 -1
  269. package/node_modules/@buddi/tool-browser/dist/.tsbuildinfo +1 -1
  270. package/node_modules/@buddi/tool-browser/dist/index.d.ts +1 -1
  271. package/node_modules/@buddi/tool-browser/dist/index.d.ts.map +1 -1
  272. package/node_modules/@buddi/tool-browser/dist/index.js +12 -4
  273. package/node_modules/@buddi/tool-browser/dist/index.js.map +1 -1
  274. package/node_modules/@buddi/tool-browser/dist/origin-pattern.d.ts +31 -0
  275. package/node_modules/@buddi/tool-browser/dist/origin-pattern.d.ts.map +1 -0
  276. package/node_modules/@buddi/tool-browser/dist/origin-pattern.js +61 -0
  277. package/node_modules/@buddi/tool-browser/dist/origin-pattern.js.map +1 -0
  278. package/node_modules/@buddi/tool-browser/dist/public-suffixes.d.ts +24 -0
  279. package/node_modules/@buddi/tool-browser/dist/public-suffixes.d.ts.map +1 -0
  280. package/node_modules/@buddi/tool-browser/dist/public-suffixes.js +153 -0
  281. package/node_modules/@buddi/tool-browser/dist/public-suffixes.js.map +1 -0
  282. package/node_modules/@buddi/tool-browser/dist/secrets.d.ts +45 -9
  283. package/node_modules/@buddi/tool-browser/dist/secrets.d.ts.map +1 -1
  284. package/node_modules/@buddi/tool-browser/dist/secrets.js +77 -20
  285. package/node_modules/@buddi/tool-browser/dist/secrets.js.map +1 -1
  286. package/node_modules/@buddi/tool-browser/dist/service.d.ts +10 -0
  287. package/node_modules/@buddi/tool-browser/dist/service.d.ts.map +1 -1
  288. package/node_modules/@buddi/tool-browser/dist/service.js +84 -20
  289. package/node_modules/@buddi/tool-browser/dist/service.js.map +1 -1
  290. package/node_modules/@buddi/tool-browser/dist/types.d.ts +7 -1
  291. package/node_modules/@buddi/tool-browser/dist/types.d.ts.map +1 -1
  292. package/node_modules/@buddi/tool-browser/dist/types.js +7 -1
  293. package/node_modules/@buddi/tool-browser/dist/types.js.map +1 -1
  294. package/node_modules/@buddi/tool-email/dist/.tsbuildinfo +1 -1
  295. package/node_modules/@buddi/tool-email/dist/tools/read.js +1 -1
  296. package/node_modules/@buddi/tool-email/dist/tools/read.js.map +1 -1
  297. package/node_modules/@buddi/tool-host/dist/.tsbuildinfo +1 -1
  298. package/node_modules/@buddi/tool-memory/dist/.tsbuildinfo +1 -1
  299. package/node_modules/@buddi/tool-web/dist/.tsbuildinfo +1 -1
  300. package/node_modules/ws/lib/websocket.js +17 -3
  301. package/node_modules/ws/package.json +1 -1
  302. package/package.json +2 -2
  303. package/packages/cli/dist/.tsbuildinfo +1 -1
  304. package/packages/cli/dist/args.d.ts +7 -0
  305. package/packages/cli/dist/args.d.ts.map +1 -1
  306. package/packages/cli/dist/args.js +14 -0
  307. package/packages/cli/dist/args.js.map +1 -1
  308. package/packages/cli/dist/commands.d.ts.map +1 -1
  309. package/packages/cli/dist/commands.js +37 -2
  310. package/packages/cli/dist/commands.js.map +1 -1
  311. package/packages/cli/dist/dashboard-app.d.ts +6 -0
  312. package/packages/cli/dist/dashboard-app.d.ts.map +1 -1
  313. package/packages/cli/dist/dashboard-app.js +16 -1
  314. package/packages/cli/dist/dashboard-app.js.map +1 -1
  315. package/packages/cli/dist/doctor-probes.d.ts.map +1 -1
  316. package/packages/cli/dist/doctor-probes.js +5 -2
  317. package/packages/cli/dist/doctor-probes.js.map +1 -1
  318. package/packages/cli/dist/doctor.d.ts +16 -0
  319. package/packages/cli/dist/doctor.d.ts.map +1 -1
  320. package/packages/cli/dist/doctor.js +18 -0
  321. package/packages/cli/dist/doctor.js.map +1 -1
  322. package/packages/cli/dist/index.d.ts +1 -0
  323. package/packages/cli/dist/index.d.ts.map +1 -1
  324. package/packages/cli/dist/index.js +1 -0
  325. package/packages/cli/dist/index.js.map +1 -1
  326. package/packages/cli/dist/main.d.ts.map +1 -1
  327. package/packages/cli/dist/main.js +22 -2
  328. package/packages/cli/dist/main.js.map +1 -1
  329. package/packages/cli/dist/status.d.ts +10 -0
  330. package/packages/cli/dist/status.d.ts.map +1 -1
  331. package/packages/cli/dist/status.js +4 -0
  332. package/packages/cli/dist/status.js.map +1 -1
  333. package/packages/cli/dist/uninstall-cmd.d.ts +42 -0
  334. package/packages/cli/dist/uninstall-cmd.d.ts.map +1 -0
  335. package/packages/cli/dist/uninstall-cmd.js +208 -0
  336. package/packages/cli/dist/uninstall-cmd.js.map +1 -0
  337. package/packages/core/dist/.tsbuildinfo +1 -1
  338. package/packages/core/dist/agents/catalog.d.ts.map +1 -1
  339. package/packages/core/dist/agents/catalog.js +7 -1
  340. package/packages/core/dist/agents/catalog.js.map +1 -1
  341. package/packages/core/dist/agents/models.d.ts.map +1 -1
  342. package/packages/core/dist/agents/models.js +4 -3
  343. package/packages/core/dist/agents/models.js.map +1 -1
  344. package/packages/core/dist/agents/skills.d.ts +2 -2
  345. package/packages/core/dist/goals/frequency.d.ts +51 -0
  346. package/packages/core/dist/goals/frequency.d.ts.map +1 -0
  347. package/packages/core/dist/goals/frequency.js +113 -0
  348. package/packages/core/dist/goals/frequency.js.map +1 -0
  349. package/packages/core/dist/goals/index.d.ts +2 -0
  350. package/packages/core/dist/goals/index.d.ts.map +1 -1
  351. package/packages/core/dist/goals/index.js +2 -0
  352. package/packages/core/dist/goals/index.js.map +1 -1
  353. package/packages/core/dist/goals/math.d.ts +8 -2
  354. package/packages/core/dist/goals/math.d.ts.map +1 -1
  355. package/packages/core/dist/goals/math.js +17 -4
  356. package/packages/core/dist/goals/math.js.map +1 -1
  357. package/packages/core/dist/goals/owner.d.ts +129 -0
  358. package/packages/core/dist/goals/owner.d.ts.map +1 -0
  359. package/packages/core/dist/goals/owner.js +239 -0
  360. package/packages/core/dist/goals/owner.js.map +1 -0
  361. package/packages/core/dist/goals/store.d.ts.map +1 -1
  362. package/packages/core/dist/goals/store.js +11 -4
  363. package/packages/core/dist/goals/store.js.map +1 -1
  364. package/packages/core/dist/goals/types.d.ts +17 -3
  365. package/packages/core/dist/goals/types.d.ts.map +1 -1
  366. package/packages/core/dist/goals/types.js +8 -2
  367. package/packages/core/dist/goals/types.js.map +1 -1
  368. package/packages/core/dist/learning/announce.d.ts +29 -0
  369. package/packages/core/dist/learning/announce.d.ts.map +1 -0
  370. package/packages/core/dist/learning/announce.js +49 -0
  371. package/packages/core/dist/learning/announce.js.map +1 -0
  372. package/packages/core/dist/learning/index.d.ts +1 -0
  373. package/packages/core/dist/learning/index.d.ts.map +1 -1
  374. package/packages/core/dist/learning/index.js +1 -0
  375. package/packages/core/dist/learning/index.js.map +1 -1
  376. package/packages/core/dist/learning/store.d.ts.map +1 -1
  377. package/packages/core/dist/learning/store.js +15 -4
  378. package/packages/core/dist/learning/store.js.map +1 -1
  379. package/packages/core/dist/notifications/notify.d.ts.map +1 -1
  380. package/packages/core/dist/notifications/notify.js +1 -0
  381. package/packages/core/dist/notifications/notify.js.map +1 -1
  382. package/packages/core/dist/notifications/store.d.ts +2 -0
  383. package/packages/core/dist/notifications/store.d.ts.map +1 -1
  384. package/packages/core/dist/notifications/store.js +9 -0
  385. package/packages/core/dist/notifications/store.js.map +1 -1
  386. package/packages/core/dist/notifications/types.d.ts +6 -0
  387. package/packages/core/dist/notifications/types.d.ts.map +1 -1
  388. package/packages/core/dist/pages.d.ts +2 -2
  389. package/packages/core/dist/provider-accounts.d.ts +7 -1
  390. package/packages/core/dist/provider-accounts.d.ts.map +1 -1
  391. package/packages/core/dist/provider-accounts.js +14 -1
  392. package/packages/core/dist/provider-accounts.js.map +1 -1
  393. package/packages/core/dist/provider.d.ts +6 -0
  394. package/packages/core/dist/provider.d.ts.map +1 -1
  395. package/packages/core/dist/provider.js.map +1 -1
  396. package/packages/core/dist/sentinels/run.d.ts.map +1 -1
  397. package/packages/core/dist/sentinels/run.js +4 -1
  398. package/packages/core/dist/sentinels/run.js.map +1 -1
  399. package/packages/core/dist/sentinels/types.d.ts +20 -0
  400. package/packages/core/dist/sentinels/types.d.ts.map +1 -1
  401. package/packages/core/dist/sentinels/types.js.map +1 -1
  402. package/packages/core/dist/surfaces.d.ts +2 -0
  403. package/packages/core/dist/surfaces.d.ts.map +1 -1
  404. package/packages/core/dist/surfaces.js +7 -0
  405. package/packages/core/dist/surfaces.js.map +1 -1
  406. package/packages/core/dist/uninstall.d.ts +79 -0
  407. package/packages/core/dist/uninstall.d.ts.map +1 -0
  408. package/packages/core/dist/uninstall.js +109 -0
  409. package/packages/core/dist/uninstall.js.map +1 -0
  410. package/packages/core/dist/views.d.ts +66 -66
  411. package/packages/core/migrations/044_owner_metrics.sql +45 -0
  412. package/packages/core/migrations/045_frequency_goals.sql +19 -0
  413. package/packages/core/migrations/046_ollama_device_key.sql +7 -0
  414. package/packages/core/migrations/047_reported_context_windows.sql +5 -0
  415. package/packages/core/package.json +4 -0
  416. package/packages/gateway/dist/.tsbuildinfo +1 -1
  417. package/packages/gateway/dist/chat/usage.d.ts.map +1 -1
  418. package/packages/gateway/dist/chat/usage.js +1 -0
  419. package/packages/gateway/dist/chat/usage.js.map +1 -1
  420. package/packages/gateway/dist/codex-accounts.d.ts +24 -11
  421. package/packages/gateway/dist/codex-accounts.d.ts.map +1 -1
  422. package/packages/gateway/dist/codex-accounts.js +151 -215
  423. package/packages/gateway/dist/codex-accounts.js.map +1 -1
  424. package/packages/gateway/dist/index.d.ts +2 -0
  425. package/packages/gateway/dist/index.d.ts.map +1 -1
  426. package/packages/gateway/dist/index.js +2 -0
  427. package/packages/gateway/dist/index.js.map +1 -1
  428. package/packages/gateway/dist/missions/agent-run.d.ts.map +1 -1
  429. package/packages/gateway/dist/missions/agent-run.js +1 -0
  430. package/packages/gateway/dist/missions/agent-run.js.map +1 -1
  431. package/packages/gateway/dist/missions/execute.d.ts +7 -0
  432. package/packages/gateway/dist/missions/execute.d.ts.map +1 -1
  433. package/packages/gateway/dist/missions/execute.js +3 -1
  434. package/packages/gateway/dist/missions/execute.js.map +1 -1
  435. package/packages/gateway/dist/missions/goals-format.d.ts +32 -5
  436. package/packages/gateway/dist/missions/goals-format.d.ts.map +1 -1
  437. package/packages/gateway/dist/missions/goals-format.js +59 -2
  438. package/packages/gateway/dist/missions/goals-format.js.map +1 -1
  439. package/packages/gateway/dist/missions/goals-page.d.ts +60 -5
  440. package/packages/gateway/dist/missions/goals-page.d.ts.map +1 -1
  441. package/packages/gateway/dist/missions/goals-page.js +355 -8
  442. package/packages/gateway/dist/missions/goals-page.js.map +1 -1
  443. package/packages/gateway/dist/missions/goals.d.ts +64 -5
  444. package/packages/gateway/dist/missions/goals.d.ts.map +1 -1
  445. package/packages/gateway/dist/missions/goals.js +834 -116
  446. package/packages/gateway/dist/missions/goals.js.map +1 -1
  447. package/packages/gateway/dist/missions/sentinel-wake.d.ts +5 -0
  448. package/packages/gateway/dist/missions/sentinel-wake.d.ts.map +1 -1
  449. package/packages/gateway/dist/missions/sentinel-wake.js +12 -0
  450. package/packages/gateway/dist/missions/sentinel-wake.js.map +1 -1
  451. package/packages/gateway/dist/ollama-accounts.d.ts +87 -0
  452. package/packages/gateway/dist/ollama-accounts.d.ts.map +1 -0
  453. package/packages/gateway/dist/ollama-accounts.js +179 -0
  454. package/packages/gateway/dist/ollama-accounts.js.map +1 -0
  455. package/packages/gateway/dist/owner-notify.d.ts +2 -1
  456. package/packages/gateway/dist/owner-notify.d.ts.map +1 -1
  457. package/packages/gateway/dist/owner-notify.js +6 -2
  458. package/packages/gateway/dist/owner-notify.js.map +1 -1
  459. package/packages/gateway/dist/provider-accounts.d.ts +47 -1
  460. package/packages/gateway/dist/provider-accounts.d.ts.map +1 -1
  461. package/packages/gateway/dist/provider-accounts.js +204 -38
  462. package/packages/gateway/dist/provider-accounts.js.map +1 -1
  463. package/packages/gateway/dist/serve.d.ts.map +1 -1
  464. package/packages/gateway/dist/serve.js +1 -0
  465. package/packages/gateway/dist/serve.js.map +1 -1
  466. package/packages/gateway/dist/subscription-signins.d.ts +28 -0
  467. package/packages/gateway/dist/subscription-signins.d.ts.map +1 -0
  468. package/packages/gateway/dist/subscription-signins.js +30 -0
  469. package/packages/gateway/dist/subscription-signins.js.map +1 -0
  470. package/packages/gateway/dist/surfaces/context-budget.d.ts.map +1 -1
  471. package/packages/gateway/dist/surfaces/context-budget.js +10 -3
  472. package/packages/gateway/dist/surfaces/context-budget.js.map +1 -1
  473. package/packages/gateway/dist/telegram/api.d.ts +43 -9
  474. package/packages/gateway/dist/telegram/api.d.ts.map +1 -1
  475. package/packages/gateway/dist/telegram/api.js +80 -21
  476. package/packages/gateway/dist/telegram/api.js.map +1 -1
  477. package/packages/gateway/dist/telegram/attachments.d.ts +6 -0
  478. package/packages/gateway/dist/telegram/attachments.d.ts.map +1 -1
  479. package/packages/gateway/dist/telegram/attachments.js +1 -0
  480. package/packages/gateway/dist/telegram/attachments.js.map +1 -1
  481. package/packages/gateway/dist/telegram/browser-view.d.ts.map +1 -1
  482. package/packages/gateway/dist/telegram/browser-view.js +2 -1
  483. package/packages/gateway/dist/telegram/browser-view.js.map +1 -1
  484. package/packages/gateway/dist/telegram/channel.d.ts +7 -1
  485. package/packages/gateway/dist/telegram/channel.d.ts.map +1 -1
  486. package/packages/gateway/dist/telegram/channel.js +24 -2
  487. package/packages/gateway/dist/telegram/channel.js.map +1 -1
  488. package/packages/gateway/dist/telegram/commands.d.ts +28 -0
  489. package/packages/gateway/dist/telegram/commands.d.ts.map +1 -0
  490. package/packages/gateway/dist/telegram/commands.js +74 -0
  491. package/packages/gateway/dist/telegram/commands.js.map +1 -0
  492. package/packages/gateway/dist/telegram/main.d.ts +3 -0
  493. package/packages/gateway/dist/telegram/main.d.ts.map +1 -1
  494. package/packages/gateway/dist/telegram/main.js +71 -2
  495. package/packages/gateway/dist/telegram/main.js.map +1 -1
  496. package/packages/gateway/dist/telegram/outbound.d.ts +191 -0
  497. package/packages/gateway/dist/telegram/outbound.d.ts.map +1 -0
  498. package/packages/gateway/dist/telegram/outbound.js +671 -0
  499. package/packages/gateway/dist/telegram/outbound.js.map +1 -0
  500. package/packages/gateway/dist/telegram/proposals.d.ts +65 -0
  501. package/packages/gateway/dist/telegram/proposals.d.ts.map +1 -0
  502. package/packages/gateway/dist/telegram/proposals.js +183 -0
  503. package/packages/gateway/dist/telegram/proposals.js.map +1 -0
  504. package/packages/gateway/dist/telegram/surface.d.ts +47 -47
  505. package/packages/gateway/dist/telegram/surface.d.ts.map +1 -1
  506. package/packages/gateway/dist/telegram/surface.js +99 -290
  507. package/packages/gateway/dist/telegram/surface.js.map +1 -1
  508. package/packages/gateway/dist/web/onboarding.d.ts.map +1 -1
  509. package/packages/gateway/dist/web/onboarding.js +4 -0
  510. package/packages/gateway/dist/web/onboarding.js.map +1 -1
  511. package/packages/gateway/dist/web/secrets.d.ts.map +1 -1
  512. package/packages/gateway/dist/web/secrets.js +3 -2
  513. package/packages/gateway/dist/web/secrets.js.map +1 -1
  514. package/packages/gateway/dist/web/server.d.ts.map +1 -1
  515. package/packages/gateway/dist/web/server.js +36 -14
  516. package/packages/gateway/dist/web/server.js.map +1 -1
  517. package/packages/gateway/dist/web/telegram.d.ts +39 -0
  518. package/packages/gateway/dist/web/telegram.d.ts.map +1 -1
  519. package/packages/gateway/dist/web/telegram.js +53 -1
  520. package/packages/gateway/dist/web/telegram.js.map +1 -1
  521. package/packages/install/dist/.tsbuildinfo +1 -1
  522. package/packages/install/dist/launcher.d.ts.map +1 -1
  523. package/packages/install/dist/launcher.js +135 -10
  524. package/packages/install/dist/launcher.js.map +1 -1
  525. package/packages/install/dist/uninstall.d.ts +59 -0
  526. package/packages/install/dist/uninstall.d.ts.map +1 -0
  527. package/packages/install/dist/uninstall.js +260 -0
  528. package/packages/install/dist/uninstall.js.map +1 -0
  529. package/packages/runtime/dist/.tsbuildinfo +1 -1
  530. package/packages/runtime/dist/codex-direct.d.ts +55 -0
  531. package/packages/runtime/dist/codex-direct.d.ts.map +1 -0
  532. package/packages/runtime/dist/codex-direct.js +334 -0
  533. package/packages/runtime/dist/codex-direct.js.map +1 -0
  534. package/packages/runtime/dist/codex-oauth.d.ts +66 -0
  535. package/packages/runtime/dist/codex-oauth.d.ts.map +1 -0
  536. package/packages/runtime/dist/codex-oauth.js +210 -0
  537. package/packages/runtime/dist/codex-oauth.js.map +1 -0
  538. package/packages/runtime/dist/codex-profile.d.ts +19 -0
  539. package/packages/runtime/dist/codex-profile.d.ts.map +1 -0
  540. package/packages/runtime/dist/codex-profile.js +99 -0
  541. package/packages/runtime/dist/codex-profile.js.map +1 -0
  542. package/packages/runtime/dist/context-window.d.ts.map +1 -1
  543. package/packages/runtime/dist/context-window.js +9 -2
  544. package/packages/runtime/dist/context-window.js.map +1 -1
  545. package/packages/runtime/dist/delegate.d.ts +24 -0
  546. package/packages/runtime/dist/delegate.d.ts.map +1 -1
  547. package/packages/runtime/dist/delegate.js +87 -11
  548. package/packages/runtime/dist/delegate.js.map +1 -1
  549. package/packages/runtime/dist/index.d.ts +4 -4
  550. package/packages/runtime/dist/index.d.ts.map +1 -1
  551. package/packages/runtime/dist/index.js +5 -5
  552. package/packages/runtime/dist/index.js.map +1 -1
  553. package/packages/runtime/dist/loop.d.ts +7 -0
  554. package/packages/runtime/dist/loop.d.ts.map +1 -1
  555. package/packages/runtime/dist/loop.js +48 -8
  556. package/packages/runtime/dist/loop.js.map +1 -1
  557. package/packages/runtime/dist/ollama-signing.d.ts +52 -0
  558. package/packages/runtime/dist/ollama-signing.d.ts.map +1 -0
  559. package/packages/runtime/dist/ollama-signing.js +154 -0
  560. package/packages/runtime/dist/ollama-signing.js.map +1 -0
  561. package/packages/runtime/dist/openai.d.ts.map +1 -1
  562. package/packages/runtime/dist/openai.js +38 -9
  563. package/packages/runtime/dist/openai.js.map +1 -1
  564. package/packages/runtime/dist/provider-models.d.ts +2 -0
  565. package/packages/runtime/dist/provider-models.d.ts.map +1 -1
  566. package/packages/runtime/dist/provider-models.js +8 -3
  567. package/packages/runtime/dist/provider-models.js.map +1 -1
  568. package/packages/tools/artifacts/dist/.tsbuildinfo +1 -1
  569. package/packages/tools/browser/dist/.tsbuildinfo +1 -1
  570. package/packages/tools/browser/dist/index.d.ts +1 -1
  571. package/packages/tools/browser/dist/index.d.ts.map +1 -1
  572. package/packages/tools/browser/dist/index.js +12 -4
  573. package/packages/tools/browser/dist/index.js.map +1 -1
  574. package/packages/tools/browser/dist/origin-pattern.d.ts +31 -0
  575. package/packages/tools/browser/dist/origin-pattern.d.ts.map +1 -0
  576. package/packages/tools/browser/dist/origin-pattern.js +61 -0
  577. package/packages/tools/browser/dist/origin-pattern.js.map +1 -0
  578. package/packages/tools/browser/dist/public-suffixes.d.ts +24 -0
  579. package/packages/tools/browser/dist/public-suffixes.d.ts.map +1 -0
  580. package/packages/tools/browser/dist/public-suffixes.js +153 -0
  581. package/packages/tools/browser/dist/public-suffixes.js.map +1 -0
  582. package/packages/tools/browser/dist/secrets.d.ts +45 -9
  583. package/packages/tools/browser/dist/secrets.d.ts.map +1 -1
  584. package/packages/tools/browser/dist/secrets.js +77 -20
  585. package/packages/tools/browser/dist/secrets.js.map +1 -1
  586. package/packages/tools/browser/dist/service.d.ts +10 -0
  587. package/packages/tools/browser/dist/service.d.ts.map +1 -1
  588. package/packages/tools/browser/dist/service.js +84 -20
  589. package/packages/tools/browser/dist/service.js.map +1 -1
  590. package/packages/tools/browser/dist/types.d.ts +7 -1
  591. package/packages/tools/browser/dist/types.d.ts.map +1 -1
  592. package/packages/tools/browser/dist/types.js +7 -1
  593. package/packages/tools/browser/dist/types.js.map +1 -1
  594. package/packages/tools/email/dist/.tsbuildinfo +1 -1
  595. package/packages/tools/email/dist/tools/read.js +1 -1
  596. package/packages/tools/email/dist/tools/read.js.map +1 -1
  597. package/packages/tools/host/dist/.tsbuildinfo +1 -1
  598. package/packages/tools/memory/dist/.tsbuildinfo +1 -1
  599. package/packages/tools/web/dist/.tsbuildinfo +1 -1
  600. package/packages/web/dist/assets/index-BRc5auXm.js +123 -0
  601. package/packages/web/dist/assets/{index-DCn0vN58.css → index-DwUpotTR.css} +1 -1
  602. package/packages/web/dist/index.html +2 -2
  603. package/node_modules/@buddi/runtime/dist/codex-app-server.d.ts +0 -20
  604. package/node_modules/@buddi/runtime/dist/codex-app-server.d.ts.map +0 -1
  605. package/node_modules/@buddi/runtime/dist/codex-app-server.js +0 -172
  606. package/node_modules/@buddi/runtime/dist/codex-app-server.js.map +0 -1
  607. package/node_modules/@buddi/runtime/dist/codex-policy.d.ts +0 -6
  608. package/node_modules/@buddi/runtime/dist/codex-policy.d.ts.map +0 -1
  609. package/node_modules/@buddi/runtime/dist/codex-policy.js +0 -79
  610. package/node_modules/@buddi/runtime/dist/codex-policy.js.map +0 -1
  611. package/node_modules/@buddi/runtime/dist/codex-rpc.d.ts +0 -34
  612. package/node_modules/@buddi/runtime/dist/codex-rpc.d.ts.map +0 -1
  613. package/node_modules/@buddi/runtime/dist/codex-rpc.js +0 -152
  614. package/node_modules/@buddi/runtime/dist/codex-rpc.js.map +0 -1
  615. package/node_modules/@buddi/runtime/dist/codex-session.d.ts +0 -30
  616. package/node_modules/@buddi/runtime/dist/codex-session.d.ts.map +0 -1
  617. package/node_modules/@buddi/runtime/dist/codex-session.js +0 -169
  618. package/node_modules/@buddi/runtime/dist/codex-session.js.map +0 -1
  619. package/packages/runtime/dist/codex-app-server.d.ts +0 -20
  620. package/packages/runtime/dist/codex-app-server.d.ts.map +0 -1
  621. package/packages/runtime/dist/codex-app-server.js +0 -172
  622. package/packages/runtime/dist/codex-app-server.js.map +0 -1
  623. package/packages/runtime/dist/codex-policy.d.ts +0 -6
  624. package/packages/runtime/dist/codex-policy.d.ts.map +0 -1
  625. package/packages/runtime/dist/codex-policy.js +0 -79
  626. package/packages/runtime/dist/codex-policy.js.map +0 -1
  627. package/packages/runtime/dist/codex-rpc.d.ts +0 -34
  628. package/packages/runtime/dist/codex-rpc.d.ts.map +0 -1
  629. package/packages/runtime/dist/codex-rpc.js +0 -152
  630. package/packages/runtime/dist/codex-rpc.js.map +0 -1
  631. package/packages/runtime/dist/codex-session.d.ts +0 -30
  632. package/packages/runtime/dist/codex-session.d.ts.map +0 -1
  633. package/packages/runtime/dist/codex-session.js +0 -169
  634. package/packages/runtime/dist/codex-session.js.map +0 -1
  635. package/packages/web/dist/assets/index-BRkIoT-q.js +0 -123
@@ -1 +1 @@
1
- {"version":3,"file":"owner-notify.js","sourceRoot":"","sources":["../src/owner-notify.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"owner-notify.js","sourceRoot":"","sources":["../src/owner-notify.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,10 @@
1
1
  import { type AgentCatalog, type LoadAgentCatalogOptions, type ProviderAccountsAccess, type ProviderRef, type ResolvedProvider, type Vault } from '@buddi/core';
2
- import { listProviderModels, type AccountModels, type RuntimeProvider } from '@buddi/runtime';
2
+ import { listProviderModels, type AccountModels, type OllamaConnectProtocol, type RuntimeProvider } from '@buddi/runtime';
3
3
  import type { Pool } from 'pg';
4
4
  import { type ProviderDiagnostic } from './provider-diagnostics.js';
5
5
  import { CodexAccounts } from './codex-accounts.js';
6
6
  import { AnthropicAccounts } from './anthropic-accounts.js';
7
+ import { OllamaAccounts, type OllamaDeviceView } from './ollama-accounts.js';
7
8
  type Binding = {
8
9
  agentId: string;
9
10
  accountId: string;
@@ -59,10 +60,17 @@ export declare class ProviderAccounts {
59
60
  vault?: Vault;
60
61
  test?: (resolved: ResolvedProvider) => Promise<void>;
61
62
  listModels?: typeof listProviderModels;
63
+ /** The one signed `/api/me` call and the device name, replaceable in tests. */
64
+ ollama?: {
65
+ protocol?: OllamaConnectProtocol;
66
+ deviceName?: () => string;
67
+ now?: () => number;
68
+ };
62
69
  };
63
70
  readonly vault: Vault | undefined;
64
71
  readonly codex: CodexAccounts | undefined;
65
72
  readonly anthropic: AnthropicAccounts | undefined;
73
+ readonly ollama: OllamaAccounts | undefined;
66
74
  /** The vault the OAuth adapters see, with account names translated onto owner secrets. */
67
75
  readonly accountVault: Vault | undefined;
68
76
  constructor(deps: {
@@ -73,6 +81,12 @@ export declare class ProviderAccounts {
73
81
  vault?: Vault;
74
82
  test?: (resolved: ResolvedProvider) => Promise<void>;
75
83
  listModels?: typeof listProviderModels;
84
+ /** The one signed `/api/me` call and the device name, replaceable in tests. */
85
+ ollama?: {
86
+ protocol?: OllamaConnectProtocol;
87
+ deviceName?: () => string;
88
+ now?: () => number;
89
+ };
76
90
  });
77
91
  get anthropicOAuthEnabled(): boolean;
78
92
  initialize(): Promise<void>;
@@ -92,6 +106,7 @@ export declare class ProviderAccounts {
92
106
  accounts: {
93
107
  assignedAgents: string[];
94
108
  test: TestResult | null;
109
+ device?: OllamaDeviceView | null | undefined;
95
110
  login?: import("./codex-accounts.js").CodexLoginView | {
96
111
  state: "pending";
97
112
  attemptId: string;
@@ -102,6 +117,7 @@ export declare class ProviderAccounts {
102
117
  reconnectRequired?: boolean | undefined;
103
118
  configured: boolean;
104
119
  detectedContextWindowTokens: number;
120
+ detectedContextWindowSource: "provider" | "table";
105
121
  removalPending: boolean;
106
122
  refreshable: boolean;
107
123
  subscriptionRenewsAt: null;
@@ -159,6 +175,36 @@ export declare class ProviderAccounts {
159
175
  } | {
160
176
  completed: boolean;
161
177
  } | null>;
178
+ /**
179
+ * Ollama Cloud with a device key: `connect` makes a key pair in the vault and
180
+ * answers with the page to press Connect on; `poll` asks ollama.com once
181
+ * whether that happened; `disconnect` removes the key from the vault. The
182
+ * device stays listed on ollama.com until the owner removes it there.
183
+ */
184
+ ollamaAction(id: string, action: 'connect' | 'poll' | 'disconnect', body: {
185
+ revision?: unknown;
186
+ attemptId?: unknown;
187
+ }, owner: string): Promise<{
188
+ state: "connected";
189
+ username: string;
190
+ deviceName: string;
191
+ } | {
192
+ state: "waiting";
193
+ expiresAt: string;
194
+ } | {
195
+ state: "failed";
196
+ message: string;
197
+ } | {
198
+ state: "pending";
199
+ attemptId: string;
200
+ verificationUrl: string;
201
+ deviceName: string;
202
+ expiresAt: string;
203
+ } | {
204
+ removed: boolean;
205
+ unpaired: boolean;
206
+ note: string;
207
+ }>;
162
208
  codexAction(id: string, action: 'login' | 'cancel-login' | 'logout', revision: unknown): Promise<import("./codex-accounts.js").CodexLoginView | {
163
209
  cancelled: boolean;
164
210
  removed?: undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"provider-accounts.d.ts","sourceRoot":"","sources":["../src/provider-accounts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"provider-accounts.d.ts","sourceRoot":"","sources":["../src/provider-accounts.ts"],"names":[],"mappings":"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"}
@@ -1,19 +1,28 @@
1
1
  import { randomUUID } from 'node:crypto';
2
2
  import { setTimeout as delay } from 'node:timers/promises';
3
- import { accountBaseUrl, accountModelProblem, accountProtocol, createVault, providerFromEnv, putOwnerSecret, registerSecretDestination, resolveProviderAccount, useOwnerSecret, vaultState, } from '@buddi/core';
4
- import { contextWindowTokens, createProvider, providerCapabilities, listProviderModels, readAnthropicTokens } from '@buddi/runtime';
3
+ import { OLLAMA_CLOUD_ACCOUNT_URL, accountBaseUrl, accountModelProblem, accountProtocol, createVault, providerFromEnv, putOwnerSecret, registerSecretDestination, resolveProviderAccount, useOwnerSecret, vaultState, } from '@buddi/core';
4
+ import { contextWindowTokens, createProvider, providerCapabilities, listProviderModels, readAnthropicTokens, readCodexTokens } from '@buddi/runtime';
5
5
  import { z } from 'zod';
6
6
  import { providerDiagnostic } from './provider-diagnostics.js';
7
7
  import { CodexAccounts } from './codex-accounts.js';
8
8
  import { AnthropicAccounts } from './anthropic-accounts.js';
9
+ import { OllamaAccounts, deviceView, readOllamaDevice } from './ollama-accounts.js';
10
+ import { SIGNIN_HIDDEN, subscriptionSignIns } from './subscription-signins.js';
9
11
  import { ACCOUNTS_PROVIDER_KIND, accountsProviderDestination, deleteAccountSecret, ownerSecretVault } from './owner-secrets.js';
12
+ /** At most this many models' windows are kept per account. */
13
+ const REPORTED_WINDOWS_MAX = 1000;
14
+ /** The provider's reported window for a model, when it said a usable one. */
15
+ function reportedWindow(map, model) {
16
+ const tokens = map && Object.hasOwn(map, model) ? map[model] : undefined;
17
+ return typeof tokens === 'number' && Number.isInteger(tokens) && tokens >= 8_000 && tokens <= 2_000_000 ? tokens : undefined;
18
+ }
10
19
  const columns = `id, label, kind, auth, base_url as "baseUrl", default_model as "defaultModel",
11
- context_window_tokens as "contextWindowTokens",
20
+ context_window_tokens as "contextWindowTokens", reported_context_windows as "reportedContextWindows",
12
21
  enabled, deleting, revision, secret_ref as "secretRef", legacy_env as "legacyEnv"`;
13
22
  const saveSchema = z.object({
14
23
  id: z.string().min(1).max(100).optional(), revision: z.number().int().positive().optional(),
15
24
  label: z.string().trim().min(1).max(100), kind: z.enum(['anthropic', 'openai', 'openai-compatible', 'codex']),
16
- auth: z.enum(['api-key', 'none', 'legacy-subscription-token', 'chatgpt', 'anthropic-oauth']),
25
+ auth: z.enum(['api-key', 'none', 'legacy-subscription-token', 'chatgpt', 'anthropic-oauth', 'device-key']),
17
26
  baseUrl: z.string().trim().max(2048).optional(), defaultModel: z.string().trim().min(1).max(150),
18
27
  enabled: z.boolean(), secret: z.string().trim().min(1).max(16384).optional(),
19
28
  /**
@@ -62,6 +71,8 @@ export class ProviderAccounts {
62
71
  vault;
63
72
  codex;
64
73
  anthropic;
74
+ ollama;
75
+ #devices = new Map();
65
76
  #tokenInfo = new Map();
66
77
  #rows = new Map();
67
78
  #bindings = new Map();
@@ -92,12 +103,14 @@ export class ProviderAccounts {
92
103
  return row === undefined ? 'a provider account' : `the model account “${row.label}”`;
93
104
  }));
94
105
  }
95
- if (deps.env.BUDDI_CODEX_EXPERIMENT === '1' && this.accountVault)
106
+ if (subscriptionSignIns(deps.env).codex && this.accountVault)
96
107
  this.codex = new CodexAccounts({ vault: this.accountVault });
97
108
  if (this.accountVault)
98
109
  this.anthropic = new AnthropicAccounts(this.accountVault);
110
+ if (this.accountVault)
111
+ this.ollama = new OllamaAccounts(this.accountVault, deps.ollama?.protocol, deps.ollama?.now, deps.ollama?.deviceName);
99
112
  }
100
- get anthropicOAuthEnabled() { return this.deps.env.BUDDI_ANTHROPIC_OAUTH_EXPERIMENT === '1' && !!this.anthropic; }
113
+ get anthropicOAuthEnabled() { return subscriptionSignIns(this.deps.env).claude && !!this.anthropic; }
101
114
  async initialize() {
102
115
  // One atomic, restart-safe migration. Never rewrites private agent files or
103
116
  // copies a secret into SQL. Missing credentials still get a stable account.
@@ -160,14 +173,26 @@ export class ProviderAccounts {
160
173
  const bindings = await this.deps.pool.query('select agent_id as "agentId", account_id as "accountId", model from core.agent_provider_accounts');
161
174
  const configured = new Map();
162
175
  this.#tokenInfo.clear();
176
+ this.#devices.clear();
163
177
  for (const row of result.rows) {
164
178
  try {
165
179
  const raw = await this.#secret(row);
166
180
  configured.set(row.id, row.auth === 'none' || !!raw);
181
+ if (row.auth === 'device-key') {
182
+ // Configured means connected: a key nobody pressed Connect for signs nothing useful.
183
+ const device = raw ? readOllamaDevice(raw) : null;
184
+ configured.set(row.id, !!device?.connectedAt);
185
+ if (device)
186
+ this.#devices.set(row.id, deviceView(device));
187
+ }
167
188
  if (row.auth === 'anthropic-oauth' && raw) {
168
189
  const tokens = readAnthropicTokens(raw);
169
190
  this.#tokenInfo.set(row.id, { tokenExpiresAt: new Date(tokens.expiresAt).toISOString(), reconnectRequired: tokens.state !== 'ready' });
170
191
  }
192
+ if (row.kind === 'codex' && raw) {
193
+ const tokens = readCodexTokens(raw);
194
+ this.#tokenInfo.set(row.id, { tokenExpiresAt: new Date(tokens.expiresAt).toISOString(), reconnectRequired: tokens.state !== 'ready' });
195
+ }
171
196
  }
172
197
  catch {
173
198
  configured.set(row.id, false);
@@ -187,11 +212,12 @@ export class ProviderAccounts {
187
212
  credential: { kind: row.auth === 'legacy-subscription-token' || row.auth === 'anthropic-oauth' ? 'subscription-token' : 'api-key', env: row.secretRef ?? 'NO_CREDENTIAL' },
188
213
  } : { ...providerFromEnv(this.deps.env, agent.model, agent.provider), accountId: binding?.accountId ?? '' };
189
214
  const issue = !row ? 'Choose a provider account for this agent in Settings → Agents.'
190
- : row.kind === 'codex' && !this.codex ? 'Codex experiment is not enabled in this process.'
191
- : row.auth === 'anthropic-oauth' && !this.anthropicOAuthEnabled ? 'Claude OAuth experiment is not enabled in this process.'
215
+ : row.kind === 'codex' && !this.codex ? SIGNIN_HIDDEN.codex
216
+ : row.auth === 'anthropic-oauth' && !this.anthropicOAuthEnabled ? SIGNIN_HIDDEN.claude
192
217
  : !row.enabled ? `Provider account “${row.label}” is disabled.`
193
- : !this.#configured.get(row.id) ? `Provider account “${row.label}” needs a credential or vault access.`
194
- : accountModelProblem(row.kind, binding.model);
218
+ : row.auth === 'device-key' && !this.#configured.get(row.id) ? `Connect Ollama for “${row.label}” in Settings → Model accounts.`
219
+ : !this.#configured.get(row.id) ? `Provider account “${row.label}” needs a credential or vault access.`
220
+ : accountModelProblem(row.kind, binding.model);
195
221
  return { provider, availability: issue ? { ok: false, problem: { code: 'missing-credential', message: issue } } : { ok: true } };
196
222
  };
197
223
  view(ownerSession) {
@@ -199,19 +225,24 @@ export class ProviderAccounts {
199
225
  vault: { kind: this.vault?.kind ?? 'none', ...vaultState({ env: this.deps.env }) },
200
226
  codexEnabled: !!this.codex,
201
227
  anthropicOAuthEnabled: this.anthropicOAuthEnabled,
202
- accounts: [...this.#rows.values()].map(({ secretRef: _secret, legacyEnv: _env, deleting, ...row }) => ({
203
- ...row, configured: this.#configured.get(row.id) ?? false,
204
- // What the runtime would assume for this account's default model, so
205
- // the field can show it as a placeholder instead of a blank the owner
206
- // has to guess at.
207
- detectedContextWindowTokens: contextWindowTokens(row.defaultModel, row.kind === 'codex' ? 'openai' : row.kind),
208
- removalPending: deleting,
209
- refreshable: row.kind === 'codex' || row.auth === 'anthropic-oauth', tokenExpiresAt: null, subscriptionRenewsAt: null,
210
- ...(row.auth === 'anthropic-oauth' ? { ...this.#tokenInfo.get(row.id), login: this.anthropic?.view(row.id, row.revision, ownerSession) ?? null } : {}),
211
- ...(row.kind === 'codex' ? { login: this.codex?.view(row.id) ?? null } : {}),
212
- assignedAgents: [...this.#bindings.values()].filter(b => b.accountId === row.id).map(b => b.agentId),
213
- test: this.#tests.get(row.id) ?? null,
214
- })),
228
+ accounts: [...this.#rows.values()].map(({ secretRef: _secret, legacyEnv: _env, deleting, reportedContextWindows, ...row }) => {
229
+ // The provider's own number for the default model when its model list
230
+ // said one, else what the runtime would assume from the name, so the
231
+ // field can show it as a placeholder instead of a blank.
232
+ const reported = reportedWindow(reportedContextWindows, row.defaultModel);
233
+ return {
234
+ ...row, configured: this.#configured.get(row.id) ?? false,
235
+ detectedContextWindowTokens: reported ?? contextWindowTokens(row.defaultModel, row.kind === 'codex' ? 'openai' : row.kind),
236
+ detectedContextWindowSource: (reported ? 'provider' : 'table'),
237
+ removalPending: deleting,
238
+ refreshable: row.kind === 'codex' || row.auth === 'anthropic-oauth', tokenExpiresAt: null, subscriptionRenewsAt: null,
239
+ ...(row.auth === 'anthropic-oauth' ? { ...this.#tokenInfo.get(row.id), login: this.anthropic?.view(row.id, row.revision, ownerSession) ?? null } : {}),
240
+ ...(row.kind === 'codex' ? { ...this.#tokenInfo.get(row.id), login: this.codex?.view(row.id) ?? null } : {}),
241
+ ...(row.auth === 'device-key' ? { device: this.#devices.get(row.id) ?? null, login: this.ollama?.view(row.id, row.revision, ownerSession) ?? null } : {}),
242
+ assignedAgents: [...this.#bindings.values()].filter(b => b.accountId === row.id).map(b => b.agentId),
243
+ test: this.#tests.get(row.id) ?? null,
244
+ };
245
+ }),
215
246
  bindings: [...this.#bindings.values()],
216
247
  };
217
248
  }
@@ -242,7 +273,7 @@ export class ProviderAccounts {
242
273
  let value;
243
274
  if (row.kind === 'codex') {
244
275
  if (!this.codex)
245
- throw new ProviderAccountError(409, 'Codex experiment is unavailable.');
276
+ throw new ProviderAccountError(409, SIGNIN_HIDDEN.codex);
246
277
  const lease = await this.#codexAccess(row);
247
278
  try {
248
279
  value = await this.codex.models(lease.access);
@@ -261,6 +292,7 @@ export class ProviderAccounts {
261
292
  if (current.revision !== row.revision || !current.enabled || current.deleting)
262
293
  throw new ProviderAccountError(409, 'Account changed. Refresh models again.');
263
294
  this.#modelLists.set(id, { revision: row.revision, until: Date.now() + 60_000, value });
295
+ await this.#rememberWindows(current, value).catch(() => { });
264
296
  return value;
265
297
  }
266
298
  catch (error) {
@@ -276,6 +308,32 @@ export class ProviderAccounts {
276
308
  this.#modelRequests.set(key, pending);
277
309
  return pending;
278
310
  }
311
+ /**
312
+ * Keep the windows the provider's own model list reported, merged over what
313
+ * earlier fetches said, so the account page and the transcript budget can
314
+ * use the provider's number instead of a guess from the model name.
315
+ */
316
+ async #rememberWindows(row, list) {
317
+ const found = list.models.filter(m => typeof m.contextWindow === 'number');
318
+ if (!found.length)
319
+ return;
320
+ const merged = new Map();
321
+ for (const [model, tokens] of Object.entries(row.reportedContextWindows ?? {})) {
322
+ if (typeof tokens === 'number' && Number.isFinite(tokens))
323
+ merged.set(model, tokens);
324
+ }
325
+ // Fresh entries go last, so the cap drops the oldest.
326
+ for (const m of found) {
327
+ merged.delete(m.id);
328
+ merged.set(m.id, m.contextWindow);
329
+ }
330
+ const entries = [...merged.entries()];
331
+ const capped = Object.fromEntries(entries.slice(Math.max(0, entries.length - REPORTED_WINDOWS_MAX)));
332
+ const { rows } = await this.deps.pool.query(`update core.provider_accounts set reported_context_windows=$2::jsonb where id=$1 returning reported_context_windows as "reportedContextWindows"`, [row.id, JSON.stringify(capped)]);
333
+ const live = this.#rows.get(row.id);
334
+ if (rows[0] && live)
335
+ this.#rows.set(row.id, { ...live, reportedContextWindows: rows[0].reportedContextWindows });
336
+ }
279
337
  /**
280
338
  * List the models a credential can reach, before anything is saved.
281
339
  *
@@ -311,13 +369,23 @@ export class ProviderAccounts {
311
369
  const input = parsed.data;
312
370
  if ((input.kind === 'codex') !== (input.auth === 'chatgpt'))
313
371
  throw new ProviderAccountError(400, 'Codex accounts require ChatGPT subscription sign-in.');
314
- if (input.kind === 'codex' && (!this.codex || input.secret))
315
- throw new ProviderAccountError(400, 'Enable the Codex experiment on the host and use device sign-in, not a pasted token.');
372
+ if (input.kind === 'codex' && !this.codex)
373
+ throw new ProviderAccountError(400, SIGNIN_HIDDEN.codex);
374
+ if (input.kind === 'codex' && input.secret)
375
+ throw new ProviderAccountError(400, 'ChatGPT accounts use device sign-in, not a pasted token.');
316
376
  if (input.auth === 'anthropic-oauth' && (input.kind !== 'anthropic' || input.secret))
317
377
  throw new ProviderAccountError(400, 'Claude OAuth requires an Anthropic account and browser sign-in, not a pasted token.');
378
+ if (input.auth === 'device-key') {
379
+ if (input.kind !== 'openai-compatible' || input.secret)
380
+ throw new ProviderAccountError(400, 'An Ollama device key is made by buddi and connected on ollama.com, not pasted.');
381
+ if (input.baseUrl && input.baseUrl.replace(/\/+$/, '') !== OLLAMA_CLOUD_ACCOUNT_URL)
382
+ throw new ProviderAccountError(400, 'A device key only connects to Ollama Cloud. Use a key for another address.');
383
+ if (!this.ollama)
384
+ throw new ProviderAccountError(409, 'Configure a credential vault on the host first.');
385
+ }
318
386
  const old = input.id ? await this.#row(input.id) : undefined;
319
387
  if (input.auth === 'anthropic-oauth' && !old && !this.anthropicOAuthEnabled)
320
- throw new ProviderAccountError(400, 'Enable the Claude OAuth experiment on the host first.');
388
+ throw new ProviderAccountError(400, SIGNIN_HIDDEN.claude);
321
389
  if (old?.deleting)
322
390
  throw new ProviderAccountError(409, 'Removal is pending. Unlock the vault and finish removing this account.');
323
391
  if (old && input.revision !== old.revision)
@@ -332,7 +400,7 @@ export class ProviderAccounts {
332
400
  throw new ProviderAccountError(400, 'Credential cannot contain control characters.');
333
401
  let baseUrl;
334
402
  try {
335
- baseUrl = accountBaseUrl(input.kind, input.baseUrl);
403
+ baseUrl = accountBaseUrl(input.kind, input.auth === 'device-key' ? OLLAMA_CLOUD_ACCOUNT_URL : input.baseUrl);
336
404
  }
337
405
  catch (e) {
338
406
  throw new ProviderAccountError(400, e.message);
@@ -352,7 +420,8 @@ export class ProviderAccounts {
352
420
  try {
353
421
  if (old?.auth === 'anthropic-oauth')
354
422
  this.anthropic?.forget(id);
355
- let secretRef = old?.secretRef ?? (input.auth === 'anthropic-oauth' ? `ANTHROPIC_ACCOUNT_${randomUUID().replaceAll('-', '_')}` : input.kind === 'codex' ? `CODEX_ACCOUNT_${randomUUID().replaceAll('-', '_')}` : null);
423
+ let secretRef = old?.secretRef ?? (input.auth === 'anthropic-oauth' ? `ANTHROPIC_ACCOUNT_${randomUUID().replaceAll('-', '_')}` : input.kind === 'codex' ? `CODEX_ACCOUNT_${randomUUID().replaceAll('-', '_')}`
424
+ : input.auth === 'device-key' ? `OLLAMA_DEVICE_${randomUUID().replaceAll('-', '_')}` : null);
356
425
  if (input.secret) {
357
426
  if (!this.vault)
358
427
  throw new ProviderAccountError(409, 'Configure a credential vault on the host first.');
@@ -446,6 +515,7 @@ export class ProviderAccounts {
446
515
  const oauthLease = row.auth === 'anthropic-oauth' ? await this.#anthropicAccess(row, false) : undefined;
447
516
  try {
448
517
  this.anthropic?.forget(id);
518
+ this.ollama?.forget(id);
449
519
  // A tombstone prevents reactivation even if vault deletion is denied.
450
520
  const disabled = await this.deps.pool.query(`update core.provider_accounts set enabled=false,deleting=true,revision=revision+1
451
521
  where id=$1 and revision=$2 returning id`, [id, revision]);
@@ -479,14 +549,16 @@ export class ProviderAccounts {
479
549
  if (!snapshot)
480
550
  throw new ProviderAccountError(409, 'Provider account is no longer available.');
481
551
  return {
482
- capabilities: { ...providerCapabilities(accountProtocol(snapshot.kind)), ...(snapshot.kind === 'codex' ? { usageReporting: false, parallelToolCalls: false } : {}) },
552
+ // A ChatGPT account speaks the Responses API, whose row matches OpenAI's:
553
+ // parallel tool calls, usage reported, no native search, no documents.
554
+ capabilities: providerCapabilities(accountProtocol(snapshot.kind)),
483
555
  complete: async (request) => {
484
556
  const row = await this.#row(id);
485
557
  if (row.revision !== snapshot.revision)
486
558
  throw new ProviderAccountError(409, 'Provider account settings changed during this run. Send a new message to continue with the updated account.');
487
559
  if (row.kind === 'codex') {
488
560
  if (!this.codex)
489
- throw new ProviderAccountError(409, 'Codex experiment is disabled on this process.');
561
+ throw new ProviderAccountError(409, SIGNIN_HIDDEN.codex);
490
562
  const lease = await this.#codexCompletionAccess(row, request.signal);
491
563
  try {
492
564
  return await this.codex.complete(lease.access, ref.model, request);
@@ -507,7 +579,7 @@ export class ProviderAccounts {
507
579
  try {
508
580
  const row = await this.#row(id);
509
581
  if (row.kind === 'codex')
510
- throw new ProviderAccountError(400, 'Codex connection testing has no verified output-token cap. Connect and send a test chat instead.');
582
+ throw new ProviderAccountError(400, 'A ChatGPT subscription has no output-token cap for a connection test. Connect and send a test chat instead.');
511
583
  let diagnostic = { state: 'connected', message: 'Connection succeeded.', httpStatus: null, retryAt: null };
512
584
  try {
513
585
  const resolved = resolveProviderAccount(row, row.defaultModel, await this.#usableSecret(row));
@@ -553,7 +625,7 @@ export class ProviderAccounts {
553
625
  if (row.kind !== 'codex')
554
626
  throw new ProviderAccountError(400, 'This is not a Codex account.');
555
627
  if (!this.codex)
556
- throw new ProviderAccountError(409, 'Codex experiment is not enabled in this process.');
628
+ throw new ProviderAccountError(409, SIGNIN_HIDDEN.codex);
557
629
  if (!row.enabled || row.deleting)
558
630
  throw new ProviderAccountError(409, `Provider account “${row.label}” is disabled.`);
559
631
  const lease = await this.#codexCompletionAccess(row, signal);
@@ -571,9 +643,27 @@ export class ProviderAccounts {
571
643
  await this.#codexReleased.get(id);
572
644
  }
573
645
  async #usableSecret(row, signal) {
646
+ if (row.auth === 'device-key') {
647
+ if (!this.ollama || !row.secretRef)
648
+ throw new ProviderAccountError(409, 'Configure a credential vault on the host first.');
649
+ try {
650
+ return await this.ollama.credential(row.secretRef);
651
+ }
652
+ catch (error) {
653
+ // Never propagate vault errors, which may carry key material.
654
+ throw new ProviderAccountError(409, error instanceof Error && /^(Connect this Ollama|Invalid Ollama device key|The credential vault)/.test(error.message)
655
+ ? error.message : 'Could not read the Ollama device key. Check the vault and connect again.');
656
+ }
657
+ }
574
658
  if (row.auth !== 'anthropic-oauth') {
575
659
  if (row.auth === 'none' || row.secretRef === null)
576
660
  return this.#secret(row);
661
+ // A legacy account names buddi's own key (`CLAUDE_CODE_OAUTH_TOKEN`,
662
+ // `OPENAI_API_KEY`), which is not an owner secret and never will be until
663
+ // the owner replaces it. Asking owner secrets for it would only write a
664
+ // refusal to the use log on every reload; the raw vault answers directly.
665
+ if (row.legacyEnv !== null)
666
+ return this.#secret(row);
577
667
  /*
578
668
  * The run path reads the credential through the owner secrets area
579
669
  * (owner-secrets §7): the binding found and the rule applied, the use
@@ -604,7 +694,7 @@ export class ProviderAccounts {
604
694
  throw new ProviderAccountError(409, result.refused);
605
695
  }
606
696
  if (!this.anthropicOAuthEnabled)
607
- throw new ProviderAccountError(409, 'Claude OAuth experiment is disabled.');
697
+ throw new ProviderAccountError(409, SIGNIN_HIDDEN.claude);
608
698
  const lease = await this.#anthropicAccess(row, true, signal);
609
699
  try {
610
700
  return await this.anthropic.credential(row.secretRef);
@@ -660,7 +750,7 @@ export class ProviderAccounts {
660
750
  if (!owner || row.auth !== 'anthropic-oauth' || row.revision !== body.revision)
661
751
  throw new ProviderAccountError(409, 'Account changed. Refresh before continuing.');
662
752
  if ((action === 'login' || action === 'complete-login') && !this.anthropicOAuthEnabled)
663
- throw new ProviderAccountError(409, 'Claude OAuth experiment is disabled.');
753
+ throw new ProviderAccountError(409, SIGNIN_HIDDEN.claude);
664
754
  const lease = await this.#anthropicAccess(row, action === 'login' || action === 'complete-login');
665
755
  try {
666
756
  if (action === 'complete-login') {
@@ -696,6 +786,75 @@ export class ProviderAccounts {
696
786
  }
697
787
  });
698
788
  }
789
+ /**
790
+ * Ollama Cloud with a device key: `connect` makes a key pair in the vault and
791
+ * answers with the page to press Connect on; `poll` asks ollama.com once
792
+ * whether that happened; `disconnect` removes the key from the vault. The
793
+ * device stays listed on ollama.com until the owner removes it there.
794
+ */
795
+ ollamaAction(id, action, body, owner) {
796
+ return this.#serial(async () => {
797
+ const row = await this.#row(id);
798
+ if (!owner || row.auth !== 'device-key' || !row.secretRef)
799
+ throw new ProviderAccountError(409, 'This is not an Ollama Cloud account connected with a device key.');
800
+ if (!this.ollama)
801
+ throw new ProviderAccountError(409, 'Configure a credential vault on the host first.');
802
+ if (row.deleting)
803
+ throw new ProviderAccountError(409, 'Removal is pending. Unlock the vault and finish removing this account.');
804
+ if (action === 'poll') {
805
+ if (typeof body.attemptId !== 'string')
806
+ throw new ProviderAccountError(400, 'Connect first.');
807
+ let answer;
808
+ try {
809
+ answer = await this.ollama.poll(id, row.revision, owner, body.attemptId, row.secretRef);
810
+ }
811
+ catch (error) {
812
+ throw new ProviderAccountError(409, error.message);
813
+ }
814
+ if (answer.state === 'connected') {
815
+ this.#modelLists.delete(id);
816
+ this.#tests.delete(id);
817
+ await this.load();
818
+ }
819
+ return answer;
820
+ }
821
+ if (row.revision !== body.revision)
822
+ throw new ProviderAccountError(409, 'Account changed. Refresh before continuing.');
823
+ if (action === 'connect' && !row.enabled)
824
+ throw new ProviderAccountError(409, 'Enable this account before connecting it.');
825
+ this.ollama.forget(id);
826
+ let unpaired = false;
827
+ if (action === 'disconnect') {
828
+ unpaired = await this.ollama.unpair(row.secretRef);
829
+ try {
830
+ await deleteAccountSecret(this.deps.pool, this.vault, row.secretRef);
831
+ }
832
+ catch {
833
+ throw new ProviderAccountError(409, 'Could not remove the Ollama device key. Unlock the vault and retry.');
834
+ }
835
+ }
836
+ // A new key, or none: runs that started on the old one stop at their next call.
837
+ await this.deps.pool.query('update core.provider_accounts set revision=revision+1,updated_at=now() where id=$1', [id]);
838
+ this.#modelLists.delete(id);
839
+ this.#tests.delete(id);
840
+ if (action === 'disconnect') {
841
+ await this.load();
842
+ return { removed: true, unpaired, note: unpaired
843
+ ? 'Disconnected. The key is gone from buddi, and ollama.com no longer lists this device.'
844
+ : 'Disconnected. The key is gone from buddi. ollama.com did not confirm it forgot this device; if it is still listed in your ollama.com settings, remove it there.' };
845
+ }
846
+ let started;
847
+ try {
848
+ started = await this.ollama.start(id, row.revision + 1, owner, row.secretRef);
849
+ }
850
+ catch (error) {
851
+ await this.load();
852
+ throw new ProviderAccountError(409, error.message);
853
+ }
854
+ await this.load();
855
+ return started;
856
+ });
857
+ }
699
858
  async #codexCompletionAccess(row, signal) {
700
859
  const deadline = Date.now() + 120_000;
701
860
  while (true) {
@@ -758,7 +917,7 @@ export class ProviderAccounts {
758
917
  return this.#serial(async () => {
759
918
  const row = await this.#row(id);
760
919
  if (!this.codex || row.kind !== 'codex' || !row.secretRef)
761
- throw new ProviderAccountError(409, 'Codex experiment is unavailable.');
920
+ throw new ProviderAccountError(409, 'Codex account is unavailable.');
762
921
  if (revision !== row.revision)
763
922
  throw new ProviderAccountError(409, 'Account changed. Refresh before continuing.');
764
923
  if (action === 'cancel-login') {
@@ -782,12 +941,19 @@ export class ProviderAccounts {
782
941
  const lease = await this.#codexAccess(row);
783
942
  try {
784
943
  const started = await this.codex.login(lease.access);
785
- void started.finished.then(() => lease.release()).catch(() => { });
944
+ void started.finished.then(() => lease.release()).then(() => {
945
+ if (this.codex?.view(id)?.state !== 'connected')
946
+ return;
947
+ // Fill the provider's windows now, not when the owner next opens the picker.
948
+ this.#modelLists.delete(id);
949
+ void this.models(id, true).catch(() => { });
950
+ }).catch(() => { });
786
951
  return started.view;
787
952
  }
788
953
  catch {
789
954
  await lease.release();
790
- throw new ProviderAccountError(409, 'Could not start Codex sign-in. Check CLI version 0.155.0 and host vault access.');
955
+ const view = this.codex.view(id);
956
+ throw new ProviderAccountError(409, view?.state === 'failed' && view.message ? view.message : 'Could not start ChatGPT sign-in. Check the host vault and try again.');
791
957
  }
792
958
  });
793
959
  }