@withbuddi/buddi 0.1.0-pre.31 → 0.1.0-pre.32

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 (367) hide show
  1. package/examples/agents/concierge/agent.md +10 -2
  2. package/extension/manifest.json +2 -2
  3. package/node_modules/@buddi/cli/dist/.tsbuildinfo +1 -1
  4. package/node_modules/@buddi/cli/dist/agents-catalogue-cmd.d.ts +50 -0
  5. package/node_modules/@buddi/cli/dist/agents-catalogue-cmd.d.ts.map +1 -0
  6. package/node_modules/@buddi/cli/dist/agents-catalogue-cmd.js +328 -0
  7. package/node_modules/@buddi/cli/dist/agents-catalogue-cmd.js.map +1 -0
  8. package/node_modules/@buddi/cli/dist/args.d.ts +5 -0
  9. package/node_modules/@buddi/cli/dist/args.d.ts.map +1 -1
  10. package/node_modules/@buddi/cli/dist/args.js +8 -0
  11. package/node_modules/@buddi/cli/dist/args.js.map +1 -1
  12. package/node_modules/@buddi/cli/dist/commands.d.ts.map +1 -1
  13. package/node_modules/@buddi/cli/dist/commands.js +62 -0
  14. package/node_modules/@buddi/cli/dist/commands.js.map +1 -1
  15. package/node_modules/@buddi/cli/dist/main.d.ts.map +1 -1
  16. package/node_modules/@buddi/cli/dist/main.js +22 -1
  17. package/node_modules/@buddi/cli/dist/main.js.map +1 -1
  18. package/node_modules/@buddi/cli/dist/skills-cmd.d.ts +15 -0
  19. package/node_modules/@buddi/cli/dist/skills-cmd.d.ts.map +1 -0
  20. package/node_modules/@buddi/cli/dist/skills-cmd.js +54 -0
  21. package/node_modules/@buddi/cli/dist/skills-cmd.js.map +1 -0
  22. package/node_modules/@buddi/core/dist/.tsbuildinfo +1 -1
  23. package/node_modules/@buddi/core/dist/agents/catalog.d.ts +11 -3
  24. package/node_modules/@buddi/core/dist/agents/catalog.d.ts.map +1 -1
  25. package/node_modules/@buddi/core/dist/agents/catalog.js +58 -10
  26. package/node_modules/@buddi/core/dist/agents/catalog.js.map +1 -1
  27. package/node_modules/@buddi/core/dist/agents/frontmatter.d.ts +1 -1
  28. package/node_modules/@buddi/core/dist/agents/frontmatter.d.ts.map +1 -1
  29. package/node_modules/@buddi/core/dist/agents/frontmatter.js +1 -1
  30. package/node_modules/@buddi/core/dist/agents/frontmatter.js.map +1 -1
  31. package/node_modules/@buddi/core/dist/agents/skills.d.ts +29 -3
  32. package/node_modules/@buddi/core/dist/agents/skills.d.ts.map +1 -1
  33. package/node_modules/@buddi/core/dist/agents/skills.js +49 -2
  34. package/node_modules/@buddi/core/dist/agents/skills.js.map +1 -1
  35. package/node_modules/@buddi/core/dist/offers/store.d.ts.map +1 -1
  36. package/node_modules/@buddi/core/dist/offers/store.js +9 -4
  37. package/node_modules/@buddi/core/dist/offers/store.js.map +1 -1
  38. package/node_modules/@buddi/core/dist/offers/types.d.ts +24 -1
  39. package/node_modules/@buddi/core/dist/offers/types.d.ts.map +1 -1
  40. package/node_modules/@buddi/core/dist/offers/types.js +23 -1
  41. package/node_modules/@buddi/core/dist/offers/types.js.map +1 -1
  42. package/node_modules/@buddi/core/dist/scheduler/missions.d.ts +46 -0
  43. package/node_modules/@buddi/core/dist/scheduler/missions.d.ts.map +1 -1
  44. package/node_modules/@buddi/core/dist/scheduler/missions.js +119 -22
  45. package/node_modules/@buddi/core/dist/scheduler/missions.js.map +1 -1
  46. package/node_modules/@buddi/core/dist/scheduler/runner.d.ts.map +1 -1
  47. package/node_modules/@buddi/core/dist/scheduler/runner.js +6 -1
  48. package/node_modules/@buddi/core/dist/scheduler/runner.js.map +1 -1
  49. package/node_modules/@buddi/core/dist/scheduler/types.d.ts +15 -0
  50. package/node_modules/@buddi/core/dist/scheduler/types.d.ts.map +1 -1
  51. package/node_modules/@buddi/core/dist/scheduler/types.js +5 -0
  52. package/node_modules/@buddi/core/dist/scheduler/types.js.map +1 -1
  53. package/node_modules/@buddi/core/migrations/070_offer_handoff.sql +15 -0
  54. package/node_modules/@buddi/core/migrations/071_mission_lifespan.sql +19 -0
  55. package/node_modules/@buddi/gateway/dist/.tsbuildinfo +1 -1
  56. package/node_modules/@buddi/gateway/dist/agents/canvas.d.ts +6 -6
  57. package/node_modules/@buddi/gateway/dist/agents/catalogue-package.d.ts +313 -0
  58. package/node_modules/@buddi/gateway/dist/agents/catalogue-package.d.ts.map +1 -0
  59. package/node_modules/@buddi/gateway/dist/agents/catalogue-package.js +356 -0
  60. package/node_modules/@buddi/gateway/dist/agents/catalogue-package.js.map +1 -0
  61. package/node_modules/@buddi/gateway/dist/agents/platform-catalogue.d.ts +361 -0
  62. package/node_modules/@buddi/gateway/dist/agents/platform-catalogue.d.ts.map +1 -0
  63. package/node_modules/@buddi/gateway/dist/agents/platform-catalogue.js +1021 -0
  64. package/node_modules/@buddi/gateway/dist/agents/platform-catalogue.js.map +1 -0
  65. package/node_modules/@buddi/gateway/dist/agents/platform-names.d.ts.map +1 -1
  66. package/node_modules/@buddi/gateway/dist/agents/platform-names.js +3 -0
  67. package/node_modules/@buddi/gateway/dist/agents/platform-names.js.map +1 -1
  68. package/node_modules/@buddi/gateway/dist/agents/platform.d.ts +62 -25
  69. package/node_modules/@buddi/gateway/dist/agents/platform.d.ts.map +1 -1
  70. package/node_modules/@buddi/gateway/dist/agents/platform.js +121 -29
  71. package/node_modules/@buddi/gateway/dist/agents/platform.js.map +1 -1
  72. package/node_modules/@buddi/gateway/dist/agents-cli.d.ts +1 -1
  73. package/node_modules/@buddi/gateway/dist/agents-cli.d.ts.map +1 -1
  74. package/node_modules/@buddi/gateway/dist/agents-cli.js +6 -0
  75. package/node_modules/@buddi/gateway/dist/agents-cli.js.map +1 -1
  76. package/node_modules/@buddi/gateway/dist/bootstrap.d.ts.map +1 -1
  77. package/node_modules/@buddi/gateway/dist/bootstrap.js +13 -1
  78. package/node_modules/@buddi/gateway/dist/bootstrap.js.map +1 -1
  79. package/node_modules/@buddi/gateway/dist/missions/execute.d.ts +6 -0
  80. package/node_modules/@buddi/gateway/dist/missions/execute.d.ts.map +1 -1
  81. package/node_modules/@buddi/gateway/dist/missions/execute.js +74 -2
  82. package/node_modules/@buddi/gateway/dist/missions/execute.js.map +1 -1
  83. package/node_modules/@buddi/gateway/dist/missions/reminders.d.ts +10 -0
  84. package/node_modules/@buddi/gateway/dist/missions/reminders.d.ts.map +1 -1
  85. package/node_modules/@buddi/gateway/dist/missions/reminders.js +84 -18
  86. package/node_modules/@buddi/gateway/dist/missions/reminders.js.map +1 -1
  87. package/node_modules/@buddi/gateway/dist/missions/zone-provenance.d.ts.map +1 -1
  88. package/node_modules/@buddi/gateway/dist/missions/zone-provenance.js +5 -10
  89. package/node_modules/@buddi/gateway/dist/missions/zone-provenance.js.map +1 -1
  90. package/node_modules/@buddi/gateway/dist/plugins/load.d.ts.map +1 -1
  91. package/node_modules/@buddi/gateway/dist/plugins/load.js +12 -5
  92. package/node_modules/@buddi/gateway/dist/plugins/load.js.map +1 -1
  93. package/node_modules/@buddi/gateway/dist/plugins/provenance.d.ts +35 -1
  94. package/node_modules/@buddi/gateway/dist/plugins/provenance.d.ts.map +1 -1
  95. package/node_modules/@buddi/gateway/dist/plugins/provenance.js +39 -1
  96. package/node_modules/@buddi/gateway/dist/plugins/provenance.js.map +1 -1
  97. package/node_modules/@buddi/gateway/dist/surfaces/handoff.d.ts +62 -0
  98. package/node_modules/@buddi/gateway/dist/surfaces/handoff.d.ts.map +1 -0
  99. package/node_modules/@buddi/gateway/dist/surfaces/handoff.js +121 -0
  100. package/node_modules/@buddi/gateway/dist/surfaces/handoff.js.map +1 -0
  101. package/node_modules/@buddi/gateway/dist/surfaces/offered-actions.d.ts +2 -0
  102. package/node_modules/@buddi/gateway/dist/surfaces/offered-actions.d.ts.map +1 -1
  103. package/node_modules/@buddi/gateway/dist/surfaces/offered-actions.js +1 -1
  104. package/node_modules/@buddi/gateway/dist/surfaces/offered-actions.js.map +1 -1
  105. package/node_modules/@buddi/gateway/dist/telegram/main.d.ts.map +1 -1
  106. package/node_modules/@buddi/gateway/dist/telegram/main.js +7 -1
  107. package/node_modules/@buddi/gateway/dist/telegram/main.js.map +1 -1
  108. package/node_modules/@buddi/gateway/dist/telegram/surface.d.ts +9 -1
  109. package/node_modules/@buddi/gateway/dist/telegram/surface.d.ts.map +1 -1
  110. package/node_modules/@buddi/gateway/dist/telegram/surface.js +58 -6
  111. package/node_modules/@buddi/gateway/dist/telegram/surface.js.map +1 -1
  112. package/node_modules/@buddi/gateway/dist/web/agent-offers.d.ts +0 -30
  113. package/node_modules/@buddi/gateway/dist/web/agent-offers.d.ts.map +1 -1
  114. package/node_modules/@buddi/gateway/dist/web/agent-offers.js +1 -64
  115. package/node_modules/@buddi/gateway/dist/web/agent-offers.js.map +1 -1
  116. package/node_modules/@buddi/gateway/dist/web/api-routes.d.ts +1 -0
  117. package/node_modules/@buddi/gateway/dist/web/api-routes.d.ts.map +1 -1
  118. package/node_modules/@buddi/gateway/dist/web/api-routes.js +118 -4
  119. package/node_modules/@buddi/gateway/dist/web/api-routes.js.map +1 -1
  120. package/node_modules/@buddi/gateway/dist/web/catalogue-source.d.ts +33 -0
  121. package/node_modules/@buddi/gateway/dist/web/catalogue-source.d.ts.map +1 -0
  122. package/node_modules/@buddi/gateway/dist/web/catalogue-source.js +124 -0
  123. package/node_modules/@buddi/gateway/dist/web/catalogue-source.js.map +1 -0
  124. package/node_modules/@buddi/gateway/dist/web/catalogue.d.ts +155 -0
  125. package/node_modules/@buddi/gateway/dist/web/catalogue.d.ts.map +1 -0
  126. package/node_modules/@buddi/gateway/dist/web/catalogue.js +734 -0
  127. package/node_modules/@buddi/gateway/dist/web/catalogue.js.map +1 -0
  128. package/node_modules/@buddi/gateway/dist/web/chat.d.ts +3 -1
  129. package/node_modules/@buddi/gateway/dist/web/chat.d.ts.map +1 -1
  130. package/node_modules/@buddi/gateway/dist/web/chat.js +8 -1
  131. package/node_modules/@buddi/gateway/dist/web/chat.js.map +1 -1
  132. package/node_modules/@buddi/gateway/dist/web/client-key.d.ts +24 -0
  133. package/node_modules/@buddi/gateway/dist/web/client-key.d.ts.map +1 -0
  134. package/node_modules/@buddi/gateway/dist/web/client-key.js +17 -0
  135. package/node_modules/@buddi/gateway/dist/web/client-key.js.map +1 -0
  136. package/node_modules/@buddi/gateway/dist/web/market.d.ts +1 -0
  137. package/node_modules/@buddi/gateway/dist/web/market.d.ts.map +1 -1
  138. package/node_modules/@buddi/gateway/dist/web/market.js +6 -0
  139. package/node_modules/@buddi/gateway/dist/web/market.js.map +1 -1
  140. package/node_modules/@buddi/gateway/dist/web/read.d.ts +10 -0
  141. package/node_modules/@buddi/gateway/dist/web/read.d.ts.map +1 -1
  142. package/node_modules/@buddi/gateway/dist/web/read.js +5 -0
  143. package/node_modules/@buddi/gateway/dist/web/read.js.map +1 -1
  144. package/node_modules/@buddi/gateway/dist/web/server.d.ts.map +1 -1
  145. package/node_modules/@buddi/gateway/dist/web/server.js +137 -10
  146. package/node_modules/@buddi/gateway/dist/web/server.js.map +1 -1
  147. package/node_modules/@buddi/gateway/dist/web/skills.d.ts +120 -0
  148. package/node_modules/@buddi/gateway/dist/web/skills.d.ts.map +1 -0
  149. package/node_modules/@buddi/gateway/dist/web/skills.js +672 -0
  150. package/node_modules/@buddi/gateway/dist/web/skills.js.map +1 -0
  151. package/node_modules/@buddi/gateway/dist/web/take-on.d.ts +35 -1
  152. package/node_modules/@buddi/gateway/dist/web/take-on.d.ts.map +1 -1
  153. package/node_modules/@buddi/gateway/dist/web/take-on.js +76 -51
  154. package/node_modules/@buddi/gateway/dist/web/take-on.js.map +1 -1
  155. package/node_modules/@buddi/gateway/dist/web/write.d.ts +9 -1
  156. package/node_modules/@buddi/gateway/dist/web/write.d.ts.map +1 -1
  157. package/node_modules/@buddi/gateway/dist/web/write.js +35 -2
  158. package/node_modules/@buddi/gateway/dist/web/write.js.map +1 -1
  159. package/node_modules/@buddi/gateway/package.json +0 -1
  160. package/node_modules/@buddi/install/dist/.tsbuildinfo +1 -1
  161. package/node_modules/@buddi/runtime/dist/.tsbuildinfo +1 -1
  162. package/node_modules/@buddi/tool-artifacts/dist/.tsbuildinfo +1 -1
  163. package/node_modules/@buddi/tool-browser/dist/.tsbuildinfo +1 -1
  164. package/node_modules/@buddi/tool-email/dist/.tsbuildinfo +1 -1
  165. package/node_modules/@buddi/tool-host/dist/.tsbuildinfo +1 -1
  166. package/node_modules/@buddi/tool-mcp/dist/.tsbuildinfo +1 -1
  167. package/node_modules/@buddi/tool-memory/dist/.tsbuildinfo +1 -1
  168. package/node_modules/@buddi/tool-web/dist/.tsbuildinfo +1 -1
  169. package/package.json +2 -2
  170. package/packages/cli/dist/.tsbuildinfo +1 -1
  171. package/packages/cli/dist/agents-catalogue-cmd.d.ts +50 -0
  172. package/packages/cli/dist/agents-catalogue-cmd.d.ts.map +1 -0
  173. package/packages/cli/dist/agents-catalogue-cmd.js +328 -0
  174. package/packages/cli/dist/agents-catalogue-cmd.js.map +1 -0
  175. package/packages/cli/dist/args.d.ts +5 -0
  176. package/packages/cli/dist/args.d.ts.map +1 -1
  177. package/packages/cli/dist/args.js +8 -0
  178. package/packages/cli/dist/args.js.map +1 -1
  179. package/packages/cli/dist/commands.d.ts.map +1 -1
  180. package/packages/cli/dist/commands.js +62 -0
  181. package/packages/cli/dist/commands.js.map +1 -1
  182. package/packages/cli/dist/main.d.ts.map +1 -1
  183. package/packages/cli/dist/main.js +22 -1
  184. package/packages/cli/dist/main.js.map +1 -1
  185. package/packages/cli/dist/skills-cmd.d.ts +15 -0
  186. package/packages/cli/dist/skills-cmd.d.ts.map +1 -0
  187. package/packages/cli/dist/skills-cmd.js +54 -0
  188. package/packages/cli/dist/skills-cmd.js.map +1 -0
  189. package/packages/core/dist/.tsbuildinfo +1 -1
  190. package/packages/core/dist/agents/catalog.d.ts +11 -3
  191. package/packages/core/dist/agents/catalog.d.ts.map +1 -1
  192. package/packages/core/dist/agents/catalog.js +58 -10
  193. package/packages/core/dist/agents/catalog.js.map +1 -1
  194. package/packages/core/dist/agents/frontmatter.d.ts +1 -1
  195. package/packages/core/dist/agents/frontmatter.d.ts.map +1 -1
  196. package/packages/core/dist/agents/frontmatter.js +1 -1
  197. package/packages/core/dist/agents/frontmatter.js.map +1 -1
  198. package/packages/core/dist/agents/skills.d.ts +29 -3
  199. package/packages/core/dist/agents/skills.d.ts.map +1 -1
  200. package/packages/core/dist/agents/skills.js +49 -2
  201. package/packages/core/dist/agents/skills.js.map +1 -1
  202. package/packages/core/dist/offers/store.d.ts.map +1 -1
  203. package/packages/core/dist/offers/store.js +9 -4
  204. package/packages/core/dist/offers/store.js.map +1 -1
  205. package/packages/core/dist/offers/types.d.ts +24 -1
  206. package/packages/core/dist/offers/types.d.ts.map +1 -1
  207. package/packages/core/dist/offers/types.js +23 -1
  208. package/packages/core/dist/offers/types.js.map +1 -1
  209. package/packages/core/dist/scheduler/missions.d.ts +46 -0
  210. package/packages/core/dist/scheduler/missions.d.ts.map +1 -1
  211. package/packages/core/dist/scheduler/missions.js +119 -22
  212. package/packages/core/dist/scheduler/missions.js.map +1 -1
  213. package/packages/core/dist/scheduler/runner.d.ts.map +1 -1
  214. package/packages/core/dist/scheduler/runner.js +6 -1
  215. package/packages/core/dist/scheduler/runner.js.map +1 -1
  216. package/packages/core/dist/scheduler/types.d.ts +15 -0
  217. package/packages/core/dist/scheduler/types.d.ts.map +1 -1
  218. package/packages/core/dist/scheduler/types.js +5 -0
  219. package/packages/core/dist/scheduler/types.js.map +1 -1
  220. package/packages/core/migrations/070_offer_handoff.sql +15 -0
  221. package/packages/core/migrations/071_mission_lifespan.sql +19 -0
  222. package/packages/gateway/dist/.tsbuildinfo +1 -1
  223. package/packages/gateway/dist/agents/canvas.d.ts +6 -6
  224. package/packages/gateway/dist/agents/catalogue-package.d.ts +313 -0
  225. package/packages/gateway/dist/agents/catalogue-package.d.ts.map +1 -0
  226. package/packages/gateway/dist/agents/catalogue-package.js +356 -0
  227. package/packages/gateway/dist/agents/catalogue-package.js.map +1 -0
  228. package/packages/gateway/dist/agents/platform-catalogue.d.ts +361 -0
  229. package/packages/gateway/dist/agents/platform-catalogue.d.ts.map +1 -0
  230. package/packages/gateway/dist/agents/platform-catalogue.js +1021 -0
  231. package/packages/gateway/dist/agents/platform-catalogue.js.map +1 -0
  232. package/packages/gateway/dist/agents/platform-names.d.ts.map +1 -1
  233. package/packages/gateway/dist/agents/platform-names.js +3 -0
  234. package/packages/gateway/dist/agents/platform-names.js.map +1 -1
  235. package/packages/gateway/dist/agents/platform.d.ts +62 -25
  236. package/packages/gateway/dist/agents/platform.d.ts.map +1 -1
  237. package/packages/gateway/dist/agents/platform.js +121 -29
  238. package/packages/gateway/dist/agents/platform.js.map +1 -1
  239. package/packages/gateway/dist/agents-cli.d.ts +1 -1
  240. package/packages/gateway/dist/agents-cli.d.ts.map +1 -1
  241. package/packages/gateway/dist/agents-cli.js +6 -0
  242. package/packages/gateway/dist/agents-cli.js.map +1 -1
  243. package/packages/gateway/dist/bootstrap.d.ts.map +1 -1
  244. package/packages/gateway/dist/bootstrap.js +13 -1
  245. package/packages/gateway/dist/bootstrap.js.map +1 -1
  246. package/packages/gateway/dist/missions/execute.d.ts +6 -0
  247. package/packages/gateway/dist/missions/execute.d.ts.map +1 -1
  248. package/packages/gateway/dist/missions/execute.js +74 -2
  249. package/packages/gateway/dist/missions/execute.js.map +1 -1
  250. package/packages/gateway/dist/missions/reminders.d.ts +10 -0
  251. package/packages/gateway/dist/missions/reminders.d.ts.map +1 -1
  252. package/packages/gateway/dist/missions/reminders.js +84 -18
  253. package/packages/gateway/dist/missions/reminders.js.map +1 -1
  254. package/packages/gateway/dist/missions/zone-provenance.d.ts.map +1 -1
  255. package/packages/gateway/dist/missions/zone-provenance.js +5 -10
  256. package/packages/gateway/dist/missions/zone-provenance.js.map +1 -1
  257. package/packages/gateway/dist/plugins/load.d.ts.map +1 -1
  258. package/packages/gateway/dist/plugins/load.js +12 -5
  259. package/packages/gateway/dist/plugins/load.js.map +1 -1
  260. package/packages/gateway/dist/plugins/provenance.d.ts +35 -1
  261. package/packages/gateway/dist/plugins/provenance.d.ts.map +1 -1
  262. package/packages/gateway/dist/plugins/provenance.js +39 -1
  263. package/packages/gateway/dist/plugins/provenance.js.map +1 -1
  264. package/packages/gateway/dist/surfaces/handoff.d.ts +62 -0
  265. package/packages/gateway/dist/surfaces/handoff.d.ts.map +1 -0
  266. package/packages/gateway/dist/surfaces/handoff.js +121 -0
  267. package/packages/gateway/dist/surfaces/handoff.js.map +1 -0
  268. package/packages/gateway/dist/surfaces/offered-actions.d.ts +2 -0
  269. package/packages/gateway/dist/surfaces/offered-actions.d.ts.map +1 -1
  270. package/packages/gateway/dist/surfaces/offered-actions.js +1 -1
  271. package/packages/gateway/dist/surfaces/offered-actions.js.map +1 -1
  272. package/packages/gateway/dist/telegram/main.d.ts.map +1 -1
  273. package/packages/gateway/dist/telegram/main.js +7 -1
  274. package/packages/gateway/dist/telegram/main.js.map +1 -1
  275. package/packages/gateway/dist/telegram/surface.d.ts +9 -1
  276. package/packages/gateway/dist/telegram/surface.d.ts.map +1 -1
  277. package/packages/gateway/dist/telegram/surface.js +58 -6
  278. package/packages/gateway/dist/telegram/surface.js.map +1 -1
  279. package/packages/gateway/dist/web/agent-offers.d.ts +0 -30
  280. package/packages/gateway/dist/web/agent-offers.d.ts.map +1 -1
  281. package/packages/gateway/dist/web/agent-offers.js +1 -64
  282. package/packages/gateway/dist/web/agent-offers.js.map +1 -1
  283. package/packages/gateway/dist/web/api-routes.d.ts +1 -0
  284. package/packages/gateway/dist/web/api-routes.d.ts.map +1 -1
  285. package/packages/gateway/dist/web/api-routes.js +118 -4
  286. package/packages/gateway/dist/web/api-routes.js.map +1 -1
  287. package/packages/gateway/dist/web/catalogue-source.d.ts +33 -0
  288. package/packages/gateway/dist/web/catalogue-source.d.ts.map +1 -0
  289. package/packages/gateway/dist/web/catalogue-source.js +124 -0
  290. package/packages/gateway/dist/web/catalogue-source.js.map +1 -0
  291. package/packages/gateway/dist/web/catalogue.d.ts +155 -0
  292. package/packages/gateway/dist/web/catalogue.d.ts.map +1 -0
  293. package/packages/gateway/dist/web/catalogue.js +734 -0
  294. package/packages/gateway/dist/web/catalogue.js.map +1 -0
  295. package/packages/gateway/dist/web/chat.d.ts +3 -1
  296. package/packages/gateway/dist/web/chat.d.ts.map +1 -1
  297. package/packages/gateway/dist/web/chat.js +8 -1
  298. package/packages/gateway/dist/web/chat.js.map +1 -1
  299. package/packages/gateway/dist/web/client-key.d.ts +24 -0
  300. package/packages/gateway/dist/web/client-key.d.ts.map +1 -0
  301. package/packages/gateway/dist/web/client-key.js +17 -0
  302. package/packages/gateway/dist/web/client-key.js.map +1 -0
  303. package/packages/gateway/dist/web/market.d.ts +1 -0
  304. package/packages/gateway/dist/web/market.d.ts.map +1 -1
  305. package/packages/gateway/dist/web/market.js +6 -0
  306. package/packages/gateway/dist/web/market.js.map +1 -1
  307. package/packages/gateway/dist/web/read.d.ts +10 -0
  308. package/packages/gateway/dist/web/read.d.ts.map +1 -1
  309. package/packages/gateway/dist/web/read.js +5 -0
  310. package/packages/gateway/dist/web/read.js.map +1 -1
  311. package/packages/gateway/dist/web/server.d.ts.map +1 -1
  312. package/packages/gateway/dist/web/server.js +137 -10
  313. package/packages/gateway/dist/web/server.js.map +1 -1
  314. package/packages/gateway/dist/web/skills.d.ts +120 -0
  315. package/packages/gateway/dist/web/skills.d.ts.map +1 -0
  316. package/packages/gateway/dist/web/skills.js +672 -0
  317. package/packages/gateway/dist/web/skills.js.map +1 -0
  318. package/packages/gateway/dist/web/take-on.d.ts +35 -1
  319. package/packages/gateway/dist/web/take-on.d.ts.map +1 -1
  320. package/packages/gateway/dist/web/take-on.js +76 -51
  321. package/packages/gateway/dist/web/take-on.js.map +1 -1
  322. package/packages/gateway/dist/web/write.d.ts +9 -1
  323. package/packages/gateway/dist/web/write.d.ts.map +1 -1
  324. package/packages/gateway/dist/web/write.js +35 -2
  325. package/packages/gateway/dist/web/write.js.map +1 -1
  326. package/packages/gateway/package.json +0 -1
  327. package/packages/install/dist/.tsbuildinfo +1 -1
  328. package/packages/runtime/dist/.tsbuildinfo +1 -1
  329. package/packages/tools/artifacts/dist/.tsbuildinfo +1 -1
  330. package/packages/tools/browser/dist/.tsbuildinfo +1 -1
  331. package/packages/tools/email/dist/.tsbuildinfo +1 -1
  332. package/packages/tools/host/dist/.tsbuildinfo +1 -1
  333. package/packages/tools/mcp/dist/.tsbuildinfo +1 -1
  334. package/packages/tools/memory/dist/.tsbuildinfo +1 -1
  335. package/packages/tools/web/dist/.tsbuildinfo +1 -1
  336. package/packages/web/dist/assets/index-BldmgplG.css +1 -0
  337. package/packages/web/dist/assets/index-C8GaSH__.js +132 -0
  338. package/packages/web/dist/assets/{lottie_light-DU37j1-6.js → lottie_light-DdwKPR04.js} +1 -1
  339. package/packages/web/dist/build.json +1 -1
  340. package/packages/web/dist/index.html +2 -2
  341. package/packages/web/dist/precache.json +4 -4
  342. package/node_modules/@buddi/gateway/dist/agents/starter-team.d.ts +0 -59
  343. package/node_modules/@buddi/gateway/dist/agents/starter-team.d.ts.map +0 -1
  344. package/node_modules/@buddi/gateway/dist/agents/starter-team.js +0 -156
  345. package/node_modules/@buddi/gateway/dist/agents/starter-team.js.map +0 -1
  346. package/node_modules/@buddi/gateway/src/agents/starter/keeper/agent.md +0 -31
  347. package/node_modules/@buddi/gateway/src/agents/starter/keeper/skills/keeping-a-history.md +0 -22
  348. package/node_modules/@buddi/gateway/src/agents/starter/planner/agent.md +0 -30
  349. package/node_modules/@buddi/gateway/src/agents/starter/planner/skills/holding-a-follow-up.md +0 -17
  350. package/node_modules/@buddi/gateway/src/agents/starter/planner/skills/writing-the-morning-brief.md +0 -32
  351. package/node_modules/@buddi/gateway/src/agents/starter/scout/agent.md +0 -33
  352. package/node_modules/@buddi/gateway/src/agents/starter/scout/skills/answering-with-sources.md +0 -23
  353. package/node_modules/@buddi/gateway/src/agents/starter/scout/skills/the-web-is-evidence.md +0 -25
  354. package/packages/gateway/dist/agents/starter-team.d.ts +0 -59
  355. package/packages/gateway/dist/agents/starter-team.d.ts.map +0 -1
  356. package/packages/gateway/dist/agents/starter-team.js +0 -156
  357. package/packages/gateway/dist/agents/starter-team.js.map +0 -1
  358. package/packages/gateway/src/agents/starter/keeper/agent.md +0 -31
  359. package/packages/gateway/src/agents/starter/keeper/skills/keeping-a-history.md +0 -22
  360. package/packages/gateway/src/agents/starter/planner/agent.md +0 -30
  361. package/packages/gateway/src/agents/starter/planner/skills/holding-a-follow-up.md +0 -17
  362. package/packages/gateway/src/agents/starter/planner/skills/writing-the-morning-brief.md +0 -32
  363. package/packages/gateway/src/agents/starter/scout/agent.md +0 -33
  364. package/packages/gateway/src/agents/starter/scout/skills/answering-with-sources.md +0 -23
  365. package/packages/gateway/src/agents/starter/scout/skills/the-web-is-evidence.md +0 -25
  366. package/packages/web/dist/assets/index-BYRgwiZp.css +0 -1
  367. package/packages/web/dist/assets/index-Qb1N-6kN.js +0 -129
@@ -46,6 +46,7 @@ import { agentMuteRoute, focusRoute, listNotificationsRoute, markSeenRoute, noti
46
46
  import { catalogSkillLookup, discardProposalFromWeb, keepAllProposalsFromWeb, keepProposalFromWeb, readProposals, registryChangeLookup } from './proposals.js';
47
47
  import { latestDigest, readDigestSchedule, setDigestSchedule } from '../agents/learning-digest.js';
48
48
  import { readAgentSkills, removeLearnedSkillFromWeb } from '../agents/learned-skills.js';
49
+ import { createSkillRoute, deleteSkillRoute, editSkillRoute, grantSkillRoute, listSkillsRoute, skillDetailRoute, skillDownload, trustSkillRoute, } from './skills.js';
49
50
  import { bindMcpRequests, requestThroughMcp } from '../mcp/requests.js';
50
51
  import { randomUUID, createHmac } from 'node:crypto';
51
52
  import { StringDecoder } from 'node:string_decoder';
@@ -90,16 +91,20 @@ import { readAgentAttention, streamAttention } from './attention.js';
90
91
  import { PreviewApp, PreviewTickets, parsePreviewApiPath } from './preview.js';
91
92
  import { allowedOrigins, isLoopback, webAssetsDir, webUrl } from './config.js';
92
93
  import { TAILSCALE_SETTING_KEY, daemonWhois, isLoginRefusal, isUnansweredRefusal, plausibleLogin, proxiedThroughTailscale, sameLogin, tailscaleIdentity, tailscaleRefusalReason, tailscaleSelf, toTailscaleSetting, } from './tailscale.js';
94
+ import { clientKey } from './client-key.js';
93
95
  import { retryHref, sendSignedOut, wantsSignedOutPage } from './signed-out.js';
94
96
  import { extensionEndpoint } from './extension.js';
95
97
  import { REMOTE_HAND_SOCKET_PATH, RemoteHandEndpoint } from './remote-hand.js';
96
- import { csrfCookieName, CSRF_HEADER, sessionCookieName, requestPort, BodyTooLargeError, first, cookieHeader, parseCookies, parseUrl, readJsonBody, remoteKey, requestOrigin, requestScope, sendEmpty, sendJson, sendText, } from './http.js';
98
+ import { csrfCookieName, CSRF_HEADER, sessionCookieName, requestPort, BodyTooLargeError, first, cookieHeader, parseCookies, parseUrl, readJsonBody, requestOrigin, requestScope, sendEmpty, sendJson, sendText, } from './http.js';
97
99
  import { boundedLimit, readAgents, readApprovals, readConversation, readConversations, readEventKinds, readEvents, readJobs, readJobFailures, readMissions, readOverview, setGlanceHidden, setHomeDismissed, readOffers, readReminders, readSentinels, toApprovalView, } from './read.js';
98
100
  import { RateLimiter, SessionStore, } from './sessions.js';
99
101
  import { supervisorCall } from './service.js';
100
102
  import { backupJobRoute, createBackupRoute, discardUpload, listBackups, passphraseRoute, receiveUpload, restoreRoute, scheduleRoute, verifyBackupRoute, } from './backups.js';
101
103
  import { acceptAgentRoute, approveRoute, listPlugins, pluginJobRoute, receivePluginUpload, rejectRoute, openedRoute, stageRoute, toggleRoute, uninstallRoute, updateRoute, uploadRoute, } from './plugins.js';
102
104
  import { marketAssetRoute, marketRoute } from './market.js';
105
+ import { catalogueRoute, agentsCatalogue, installRoute as catalogueInstallRoute, jobRoute as catalogueJobRoute, confirmJobRoute as catalogueConfirmJobRoute, planRoute as cataloguePlanRoute, removePreviewRoute, removeRoute as removeAgentRoute, updatePlanRoute as catalogueUpdatePlanRoute, updateRoute as catalogueUpdateRoute, } from './catalogue.js';
106
+ import { createCatalogueService } from './catalogue-source.js';
107
+ import { catalogueBindingOf } from '../agents/platform.js';
103
108
  import { pluginFoldersRoute } from './folders.js';
104
109
  import { tipsRoute } from '../tips/route.js';
105
110
  import { createWidgets, widgetsRoute } from './widgets.js';
@@ -107,7 +112,7 @@ import { createRequirements } from '../plugins/requires.js';
107
112
  import { placesList, placesRoute } from './places.js';
108
113
  import { OWNER_DATE_FORMATS, OWNER_TIME_FORMATS } from '@buddi/core';
109
114
  import { readFacts, webSettingsStore } from '../tips/facts.js';
110
- import { dismissAgentOffer, isPendingAccept, raiseAgentOffers, readAgentOffers, readTeammates } from './agent-offers.js';
115
+ import { dismissAgentOffer, isPendingAccept, raiseAgentOffers, readAgentOffers } from './agent-offers.js';
111
116
  import { currentVersion, upgradeJobRoute, upgradeRoute, versionCheckRoute, versionRoute, } from './version.js';
112
117
  import { leaveRecoveryMode, readRecoveryView } from './recovery.js';
113
118
  import { readNeedsYou } from './needs-you.js';
@@ -120,7 +125,7 @@ import { LOCKED_BODY, LockUnavailable, allowedWhileLocked, clientOf, createLock
120
125
  import { matchApiRoute, TOKEN_REFUSALS } from './api-routes.js';
121
126
  import { apiTokensRoute, bearerOf, verifyApiToken } from './api-tokens.js';
122
127
  import { LockImageRefusal, MAX_LOCK_IMAGE_BYTES, normaliseLockImage } from './lock-image.js';
123
- import { cancelJobFromWeb, cancelReminderFromWeb, decideApprovalFromWeb, retryJobFromWeb, retryJobsFromWeb, dismissJobsFromWeb, undismissJobsFromWeb, setMissionEnabledFromWeb, setPausedFromWeb, setScheduleFromWeb, dismissOfferFromWeb, dismissOffersFromWeb, takeOfferFromWeb, } from './write.js';
128
+ import { cancelJobFromWeb, cancelReminderFromWeb, decideApprovalFromWeb, retryJobFromWeb, retryJobsFromWeb, dismissJobsFromWeb, undismissJobsFromWeb, setMissionEnabledFromWeb, keepMissionFromWeb, setPausedFromWeb, setScheduleFromWeb, dismissOfferFromWeb, dismissOffersFromWeb, takeOfferFromWeb, } from './write.js';
124
129
  /** How often approvals past their expiry are swept, and waiting delegations told. */
125
130
  export const EXPIRY_SWEEP_MS = 60_000;
126
131
  /**
@@ -552,7 +557,7 @@ export function createWebApp(deps) {
552
557
  const scope = requestScope(req);
553
558
  const arrived = proxied || (publicHost !== undefined && host === publicHost) ? 'tailnet' : scope === 'local' ? 'local' : 'remote';
554
559
  const setting = arrived === 'tailnet' ? await readTailscaleSetting() : null;
555
- const lockedForMs = limiter.retryAfterMs(remoteKey(req), now);
560
+ const lockedForMs = limiter.retryAfterMs(clientKey(req), now);
556
561
  return {
557
562
  retry: retryHref(pathname, search),
558
563
  arrived,
@@ -644,7 +649,7 @@ export function createWebApp(deps) {
644
649
  const now = deps.now();
645
650
  const method = (req.method ?? 'GET').toUpperCase();
646
651
  const url = parseUrl(req);
647
- const key = remoteKey(req);
652
+ const key = clientKey(req);
648
653
  // No CORS, and therefore no preflight.
649
654
  if (method === 'OPTIONS')
650
655
  return sendEmpty(res, 405);
@@ -961,6 +966,44 @@ export function createWebApp(deps) {
961
966
  requirements,
962
967
  ...(deps.plugins ? { engine: deps.plugins } : {}),
963
968
  });
969
+ /**
970
+ * The agent catalogue (catalogue.ts): the service the platform tools are
971
+ * bound to when there is one, so the routes and Agent Father read the same
972
+ * list; else one built here over the same market cache.
973
+ */
974
+ const catalogueDeps = () => {
975
+ const live = deps.registry;
976
+ const bound = catalogueBindingOf(deps.registry);
977
+ const env = deps.env ?? process.env;
978
+ const agentsDir = bound?.agentsDir ?? agentSearchPath(env).owner.dir;
979
+ return {
980
+ ...pagesDeps(),
981
+ env,
982
+ log,
983
+ pool: deps.pool,
984
+ service: bound?.service ?? createCatalogueService({ env, log, registry: deps.registry, ctx: deps.ctx, now: deps.now }),
985
+ binding: bound ?? { catalog: deps.catalog, agentsDir, trashRoot: path_.join(path_.dirname(path_.resolve(agentsDir)), '.trash') },
986
+ approve: (actionId) => decideApprovalFromWeb(writeDeps, actionId, 'approved'),
987
+ reject: (actionId) => decideApprovalFromWeb(writeDeps, actionId, 'rejected'),
988
+ ...(deps.plugins ? { engine: deps.plugins } : {}),
989
+ ...(live.register && live.unregister && live.manifests ? { liveRegistry: deps.registry } : {}),
990
+ };
991
+ };
992
+ /** The Skills page (skills.ts): the owner's folders, the catalog to check each write against. */
993
+ const skillsDeps = () => {
994
+ const bound = catalogueBindingOf(deps.registry);
995
+ const search = agentSearchPath(deps.env ?? process.env);
996
+ const agentsDir = bound?.agentsDir ?? search.owner.dir;
997
+ return {
998
+ catalog: deps.catalog,
999
+ agentsDir,
1000
+ skillsDir: search.owner.skillsDir,
1001
+ trashRoot: bound?.trashRoot ?? path_.join(path_.dirname(path_.resolve(agentsDir)), '.trash'),
1002
+ plugins: () => deps.registry.manifests().map((m) => m.name),
1003
+ now: deps.now,
1004
+ pool: deps.pool,
1005
+ };
1006
+ };
964
1007
  /** Is a mailbox connected? The email plugin's own read, the one Home's offer asks. */
965
1008
  const mailboxSet = async () => {
966
1009
  const answer = await runPageQuery(pagesDeps(), 'email', 'triage_offer', new URLSearchParams()).catch(() => null);
@@ -1462,10 +1505,12 @@ export function createWebApp(deps) {
1462
1505
  // Agents a plugin offers on Home while nobody has them. Accepting
1463
1506
  // is the Plugins page's own accept route, below.
1464
1507
  return sendJson(res, 200, await readAgentOffers(agentOffersDeps()));
1465
- case '/api/teammates':
1466
- // "Add a teammate": the starter team and the plugin teammates, each
1467
- // added, addable, or greyed with why. Adding is the accept route below.
1468
- return sendJson(res, 200, await readTeammates(agentOffersDeps()));
1508
+ /*
1509
+ * The agent catalogue: buddi's ready-made agents from withbuddi.com,
1510
+ * each with where it stands here. Fetched when stale, the copy offline.
1511
+ */
1512
+ case '/api/catalogue':
1513
+ return reply(res, await catalogueRoute(catalogueDeps(), url));
1469
1514
  case '/api/chat/views':
1470
1515
  // How the installed plugins want their tool output drawn. The page
1471
1516
  // owns the renderers and learns the domain mapping from here, so an
@@ -1483,6 +1528,9 @@ export function createWebApp(deps) {
1483
1528
  // Which agent a chat that names nobody lands on, and whether the
1484
1529
  // files disagree about it. An installation fact, not a file flag.
1485
1530
  default: readDefaultAgent(deps.catalog),
1531
+ // Which agents came from the catalogue, with their drift against the
1532
+ // kept list, so an agent's page needs no catalogue fetch. Never fetches.
1533
+ catalogue: await agentsCatalogue(catalogueDeps()).catch(() => ({})),
1486
1534
  });
1487
1535
  case '/api/groups':
1488
1536
  // The list is read every few seconds, so it is also where a delete whose minute has passed is made final.
@@ -1656,6 +1704,13 @@ export function createWebApp(deps) {
1656
1704
  const backupJob = /^\/api\/backups\/jobs\/([0-9a-f-]{36})$/i.exec(path);
1657
1705
  if (backupJob)
1658
1706
  return reply(res, await backupJobRoute(backupDeps(), backupJob[1]));
1707
+ const catalogueJob = /^\/api\/catalogue\/jobs\/([0-9a-f-]{36})$/i.exec(path);
1708
+ if (catalogueJob)
1709
+ return reply(res, catalogueJobRoute(catalogueJob[1]));
1710
+ // What removing an agent does, before the owner says so: nothing changes.
1711
+ const removePreview = /^\/api\/agents\/([^/]+)\/remove$/.exec(path);
1712
+ if (removePreview)
1713
+ return reply(res, await removePreviewRoute(catalogueDeps(), decodeURIComponent(removePreview[1])));
1659
1714
  const pluginJob = /^\/api\/plugins\/jobs\/([0-9a-f-]{36})$/i.exec(path);
1660
1715
  if (pluginJob)
1661
1716
  return reply(res, pluginJobRoute(pluginDeps(), pluginJob[1]));
@@ -1730,6 +1785,25 @@ export function createWebApp(deps) {
1730
1785
  return sendJson(res, 404, { error: 'no such agent' });
1731
1786
  return sendJson(res, 200, view);
1732
1787
  }
1788
+ // The Skills page: every skill, grouped, who holds each; one whole; one as its file.
1789
+ if (path === '/api/skills')
1790
+ return reply(res, listSkillsRoute(skillsDeps()));
1791
+ const skillRead = /^\/api\/skills\/([^/]+)(\/download)?$/.exec(path);
1792
+ if (skillRead) {
1793
+ const id = decodeURIComponent(skillRead[1]);
1794
+ if (!skillRead[2])
1795
+ return reply(res, skillDetailRoute(skillsDeps(), id));
1796
+ const file = skillDownload(skillsDeps(), id);
1797
+ if (!file)
1798
+ return sendJson(res, 404, { error: `There is no skill "${id}".` });
1799
+ res.statusCode = 200;
1800
+ res.setHeader('Content-Type', 'text/markdown; charset=utf-8');
1801
+ res.setHeader('Content-Disposition', `attachment; filename="${file.filename}"`);
1802
+ res.setHeader('Cache-Control', 'no-store');
1803
+ res.setHeader('X-Content-Type-Options', 'nosniff');
1804
+ res.end(method === 'HEAD' ? undefined : file.text);
1805
+ return;
1806
+ }
1733
1807
  // The Skills tab: every skill the agent loads, learned ones with their versions.
1734
1808
  const agentSkills = /^\/api\/agents\/([^/]+)\/skills$/.exec(path);
1735
1809
  if (agentSkills) {
@@ -1932,6 +2006,10 @@ export function createWebApp(deps) {
1932
2006
  const forgotten = await extension.unpair();
1933
2007
  return sendJson(res, forgotten.status, forgotten.body);
1934
2008
  }
2009
+ // Delete a skill: the agents that asked for it stop, the file goes to the trash.
2010
+ const skillGone = /^\/api\/skills\/([^/]+)$/.exec(path);
2011
+ if (skillGone)
2012
+ return reply(res, await deleteSkillRoute(skillsDeps(), decodeURIComponent(skillGone[1])));
1935
2013
  // Revoke an API token: the next request carrying it is a 401.
1936
2014
  const tokenGone = /^\/api\/api-tokens\/([0-9a-f-]{36})$/i.exec(path);
1937
2015
  if (tokenGone) {
@@ -2163,6 +2241,15 @@ export function createWebApp(deps) {
2163
2241
  // shows the mode's own sentence when it cannot.
2164
2242
  const taken = sessionId ?? status.session?.id;
2165
2243
  const offer = action === 'takeover' && taken ? browser.hand?.({ sessionId: taken }) : undefined;
2244
+ /*
2245
+ * "Your browser" with Chrome closed: the take-over itself succeeds (the
2246
+ * agent is paused), but there is no tab anywhere to show or drive. Said
2247
+ * as that, with a reason the dashboard offers its ways out on, rather
2248
+ * than the mode's "use this conversation's host tab".
2249
+ */
2250
+ if (offer && offer.supported && !offer.hand && status.mode === 'extension' && !extension.connected()) {
2251
+ return sendJson(res, 200, { ...status, hand: false, handReason: 'browser-offline', handMessage: 'Your browser isn’t connected.' });
2252
+ }
2166
2253
  return sendJson(res, 200, offer
2167
2254
  ? { ...status, hand: !!offer.hand, ...(offer.hand ? {} : { handMessage: offer.message }) }
2168
2255
  : status);
@@ -2462,6 +2549,9 @@ export function createWebApp(deps) {
2462
2549
  }
2463
2550
  return finish(res, await setMissionEnabledFromWeb(writeDeps, decodeURIComponent(missionEnabled[1]), enabled));
2464
2551
  }
2552
+ const missionKeep = /^\/api\/missions\/([^/]+)\/keep$/.exec(path);
2553
+ if (missionKeep)
2554
+ return finish(res, await keepMissionFromWeb(writeDeps, decodeURIComponent(missionKeep[1])));
2465
2555
  const missionSchedule = /^\/api\/missions\/([^/]+)\/schedule$/.exec(path);
2466
2556
  if (missionSchedule) {
2467
2557
  return finish(res, await setScheduleFromWeb(writeDeps, decodeURIComponent(missionSchedule[1]), {
@@ -2558,6 +2648,31 @@ export function createWebApp(deps) {
2558
2648
  if (offerDismissed) {
2559
2649
  return reply(res, await dismissAgentOffer(agentOffersDeps(), decodeURIComponent(offerDismissed[1]), decodeURIComponent(offerDismissed[2])));
2560
2650
  }
2651
+ /*
2652
+ * The agent catalogue's writes: a plan writes nothing; install answers a
2653
+ * job; update and remove are the owner's click as the approval, like the
2654
+ * accept route below.
2655
+ */
2656
+ const catalogueConfirm = /^\/api\/catalogue\/jobs\/([0-9a-f-]{36})\/confirm$/i.exec(path);
2657
+ if (catalogueConfirm) {
2658
+ return reply(res, await catalogueConfirmJobRoute(catalogueDeps(), catalogueConfirm[1], (body ?? {})));
2659
+ }
2660
+ const catalogueWrite = /^\/api\/catalogue\/([a-z][a-z0-9-]{0,39})\/(plan|install|update\/plan|update)$/.exec(path);
2661
+ if (catalogueWrite) {
2662
+ const name = catalogueWrite[1];
2663
+ const verb = catalogueWrite[2];
2664
+ const input = (body ?? {});
2665
+ if (verb === 'plan')
2666
+ return reply(res, await cataloguePlanRoute(catalogueDeps(), name, input));
2667
+ if (verb === 'install')
2668
+ return reply(res, await catalogueInstallRoute(catalogueDeps(), name, input));
2669
+ if (verb === 'update/plan')
2670
+ return reply(res, await catalogueUpdatePlanRoute(catalogueDeps(), name, input));
2671
+ return reply(res, await catalogueUpdateRoute(catalogueDeps(), name, input));
2672
+ }
2673
+ const removeAgent = /^\/api\/agents\/([^/]+)\/remove$/.exec(path);
2674
+ if (removeAgent)
2675
+ return reply(res, await removeAgentRoute(catalogueDeps(), decodeURIComponent(removeAgent[1])));
2561
2676
  const acceptAgent = /^\/api\/plugins\/([^/]+)\/agents\/([^/]+)\/accept$/.exec(path);
2562
2677
  if (acceptAgent) {
2563
2678
  return reply(res, await acceptAgentRoute({
@@ -3186,7 +3301,7 @@ export function createWebApp(deps) {
3186
3301
  ? {
3187
3302
  send: (input) => chat.send({
3188
3303
  agentId: input.agentId,
3189
- conversationId: input.conversationId,
3304
+ ...(input.conversationId === undefined ? {} : { conversationId: input.conversationId }),
3190
3305
  text: input.prompt,
3191
3306
  offer: input.offer,
3192
3307
  }),
@@ -3228,6 +3343,18 @@ export function createWebApp(deps) {
3228
3343
  })
3229
3344
  : await discardProposalFromWeb(writeDeps, id, typeof body.reason === 'string' ? body.reason : undefined));
3230
3345
  }
3346
+ /* The Skills page's writes (skills.ts): each checked by reloading the catalog. */
3347
+ if (path === '/api/skills')
3348
+ return reply(res, createSkillRoute(skillsDeps(), body));
3349
+ const skillWrite = /^\/api\/skills\/([^/]+)\/(text|grants|trust)$/.exec(path);
3350
+ if (skillWrite) {
3351
+ const id = decodeURIComponent(skillWrite[1]);
3352
+ if (skillWrite[2] === 'text')
3353
+ return reply(res, editSkillRoute(skillsDeps(), id, body));
3354
+ if (skillWrite[2] === 'grants')
3355
+ return reply(res, grantSkillRoute(skillsDeps(), id, body));
3356
+ return reply(res, trustSkillRoute(skillsDeps(), id));
3357
+ }
3231
3358
  /*
3232
3359
  * "Remove this skill": a learned skill's current file goes, its versions
3233
3360
  * stay, and the proposal it came from counts as discarded from now.