@rudderhq/server 0.4.5 → 0.4.6-canary.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (272) hide show
  1. package/dist/app.d.ts.map +1 -1
  2. package/dist/app.js +2 -0
  3. package/dist/app.js.map +1 -1
  4. package/dist/auth/better-auth.d.ts +15 -3
  5. package/dist/auth/better-auth.d.ts.map +1 -1
  6. package/dist/auth/better-auth.js.map +1 -1
  7. package/dist/bootstrap/plugin-host-runtime.d.ts +8 -8
  8. package/dist/bootstrap/register-api-routes.d.ts.map +1 -1
  9. package/dist/bootstrap/register-api-routes.js +2 -0
  10. package/dist/bootstrap/register-api-routes.js.map +1 -1
  11. package/dist/bundled-plugins/plugin-linear/dist/worker.js +26 -5
  12. package/dist/bundled-plugins/plugin-linear/dist/worker.js.map +2 -2
  13. package/dist/bundled-plugins/plugin-linear/package.json +1 -1
  14. package/dist/middleware/auth.d.ts.map +1 -1
  15. package/dist/middleware/auth.js +14 -2
  16. package/dist/middleware/auth.js.map +1 -1
  17. package/dist/onboarding-assets/ceo/SOUL.md +8 -5
  18. package/dist/routes/access-onboarding.helpers.d.ts.map +1 -1
  19. package/dist/routes/access-onboarding.helpers.js +2 -24
  20. package/dist/routes/access-onboarding.helpers.js.map +1 -1
  21. package/dist/routes/access.helpers.d.ts +1 -1
  22. package/dist/routes/browser.d.ts +30 -0
  23. package/dist/routes/browser.d.ts.map +1 -0
  24. package/dist/routes/browser.js +263 -0
  25. package/dist/routes/browser.js.map +1 -0
  26. package/dist/routes/chats.d.ts.map +1 -1
  27. package/dist/routes/chats.js +11 -0
  28. package/dist/routes/chats.js.map +1 -1
  29. package/dist/routes/instance-settings.d.ts.map +1 -1
  30. package/dist/routes/instance-settings.js +33 -1
  31. package/dist/routes/instance-settings.js.map +1 -1
  32. package/dist/routes/onboarding.d.ts.map +1 -1
  33. package/dist/routes/onboarding.js +33 -31
  34. package/dist/routes/onboarding.js.map +1 -1
  35. package/dist/routes/plugin-ui-static.d.ts.map +1 -1
  36. package/dist/routes/plugin-ui-static.js +2 -4
  37. package/dist/routes/plugin-ui-static.js.map +1 -1
  38. package/dist/routes/plugins.d.ts.map +1 -1
  39. package/dist/routes/plugins.js +2 -4
  40. package/dist/routes/plugins.js.map +1 -1
  41. package/dist/services/access.d.ts +23 -23
  42. package/dist/services/activity-log.d.ts.map +1 -1
  43. package/dist/services/activity-log.js +2 -4
  44. package/dist/services/activity-log.js.map +1 -1
  45. package/dist/services/activity.d.ts +13 -13
  46. package/dist/services/agent-run-context.d.ts +2 -1
  47. package/dist/services/agent-run-context.d.ts.map +1 -1
  48. package/dist/services/agent-run-context.js +29 -4
  49. package/dist/services/agent-run-context.js.map +1 -1
  50. package/dist/services/agents.d.ts +36 -36
  51. package/dist/services/approvals.d.ts +18 -18
  52. package/dist/services/assets.d.ts +6 -6
  53. package/dist/services/automation-chat-output.d.ts +1 -1
  54. package/dist/services/automations.d.ts +37 -37
  55. package/dist/services/automations.d.ts.map +1 -1
  56. package/dist/services/automations.js +2 -6
  57. package/dist/services/automations.js.map +1 -1
  58. package/dist/services/board-auth.d.ts +38 -38
  59. package/dist/services/browser-broker.d.ts +43 -0
  60. package/dist/services/browser-broker.d.ts.map +1 -0
  61. package/dist/services/browser-broker.js +173 -0
  62. package/dist/services/browser-broker.js.map +1 -0
  63. package/dist/services/browser-broker.test.d.ts +2 -0
  64. package/dist/services/browser-broker.test.d.ts.map +1 -0
  65. package/dist/services/browser-broker.test.js +154 -0
  66. package/dist/services/browser-broker.test.js.map +1 -0
  67. package/dist/services/browser-capability.d.ts +20 -0
  68. package/dist/services/browser-capability.d.ts.map +1 -0
  69. package/dist/services/browser-capability.js +29 -0
  70. package/dist/services/browser-capability.js.map +1 -0
  71. package/dist/services/calendar.d.ts +34 -34
  72. package/dist/services/chat-agent-runs.d.ts.map +1 -1
  73. package/dist/services/chat-agent-runs.js +2 -4
  74. package/dist/services/chat-agent-runs.js.map +1 -1
  75. package/dist/services/chat-assistant.d.ts.map +1 -1
  76. package/dist/services/chat-assistant.js +6 -4
  77. package/dist/services/chat-assistant.js.map +1 -1
  78. package/dist/services/chat-assistant.runtime-batch.d.ts +3 -0
  79. package/dist/services/chat-assistant.runtime-batch.d.ts.map +1 -0
  80. package/dist/services/chat-assistant.runtime-batch.js +16 -0
  81. package/dist/services/chat-assistant.runtime-batch.js.map +1 -0
  82. package/dist/services/chat-work-manifest.d.ts +7 -0
  83. package/dist/services/chat-work-manifest.d.ts.map +1 -0
  84. package/dist/services/chat-work-manifest.js +235 -0
  85. package/dist/services/chat-work-manifest.js.map +1 -0
  86. package/dist/services/chats.d.ts +64 -64
  87. package/dist/services/chats.d.ts.map +1 -1
  88. package/dist/services/chats.js +2 -4
  89. package/dist/services/chats.js.map +1 -1
  90. package/dist/services/costs.d.ts +2 -2
  91. package/dist/services/finance.d.ts +11 -11
  92. package/dist/services/goals.d.ts +20 -20
  93. package/dist/services/instance-settings.d.ts +3 -1
  94. package/dist/services/instance-settings.d.ts.map +1 -1
  95. package/dist/services/instance-settings.js +30 -1
  96. package/dist/services/instance-settings.js.map +1 -1
  97. package/dist/services/integrations/agent-integrations.d.ts +8 -8
  98. package/dist/services/integrations/custom-integrations.d.ts +3 -3
  99. package/dist/services/integrations/feishu/inbound-dispatcher-db.d.ts.map +1 -1
  100. package/dist/services/integrations/feishu/inbound-dispatcher-db.js +10 -11
  101. package/dist/services/integrations/feishu/inbound-dispatcher-db.js.map +1 -1
  102. package/dist/services/integrations/feishu/user-bindings.d.ts.map +1 -1
  103. package/dist/services/integrations/feishu/user-bindings.js +2 -4
  104. package/dist/services/integrations/feishu/user-bindings.js.map +1 -1
  105. package/dist/services/issue-approvals.d.ts +3 -3
  106. package/dist/services/issues.comments-attachments.d.ts +8 -8
  107. package/dist/services/issues.d.ts +19 -19
  108. package/dist/services/issues.helpers.d.ts.map +1 -1
  109. package/dist/services/issues.helpers.js +2 -6
  110. package/dist/services/issues.helpers.js.map +1 -1
  111. package/dist/services/knowledge-portability/organization-skills.d.ts +2 -1
  112. package/dist/services/knowledge-portability/organization-skills.d.ts.map +1 -1
  113. package/dist/services/knowledge-portability/organization-skills.js +16 -6
  114. package/dist/services/knowledge-portability/organization-skills.js.map +1 -1
  115. package/dist/services/messenger.d.ts +3 -3
  116. package/dist/services/messenger.d.ts.map +1 -1
  117. package/dist/services/messenger.js +3 -0
  118. package/dist/services/messenger.js.map +1 -1
  119. package/dist/services/organization-intelligence-profiles.d.ts.map +1 -1
  120. package/dist/services/organization-intelligence-profiles.js +2 -0
  121. package/dist/services/organization-intelligence-profiles.js.map +1 -1
  122. package/dist/services/orgs.d.ts +1 -1
  123. package/dist/services/orgs.d.ts.map +1 -1
  124. package/dist/services/orgs.js +2 -10
  125. package/dist/services/orgs.js.map +1 -1
  126. package/dist/services/plugin-registry.d.ts +71 -71
  127. package/dist/services/plugin-registry.d.ts.map +1 -1
  128. package/dist/services/plugin-registry.js +2 -5
  129. package/dist/services/plugin-registry.js.map +1 -1
  130. package/dist/services/postgres-errors.d.ts +6 -0
  131. package/dist/services/postgres-errors.d.ts.map +1 -0
  132. package/dist/services/postgres-errors.js +30 -0
  133. package/dist/services/postgres-errors.js.map +1 -0
  134. package/dist/services/projects.d.ts +2 -2
  135. package/dist/services/runtime-kernel/heartbeat.d.ts +29 -29
  136. package/dist/services/runtime-kernel/model-fallback.d.ts +2 -0
  137. package/dist/services/runtime-kernel/model-fallback.d.ts.map +1 -1
  138. package/dist/services/runtime-kernel/model-fallback.js +108 -9
  139. package/dist/services/runtime-kernel/model-fallback.js.map +1 -1
  140. package/dist/services/secrets.d.ts +20 -20
  141. package/dist/services/workspace-runtime.services.d.ts +3 -3
  142. package/package.json +19 -19
  143. package/resources/bundled-skills/browser/SKILL.md +49 -0
  144. package/resources/bundled-skills/browser/agents/openai.yaml +4 -0
  145. package/resources/bundled-skills/browser/references/tool-contract.md +73 -0
  146. package/resources/bundled-skills/rudder/SKILL.md +5 -2
  147. package/resources/bundled-skills/rudder/references/cli-reference.md +17 -0
  148. package/skills/browser/SKILL.md +49 -0
  149. package/skills/browser/agents/openai.yaml +4 -0
  150. package/skills/browser/references/tool-contract.md +73 -0
  151. package/skills/rudder/SKILL.md +5 -2
  152. package/skills/rudder/references/cli-reference.md +17 -0
  153. package/ui-dist/assets/abnfDiagram-VRR7QNED-CDpy6iIp.js +1 -0
  154. package/ui-dist/assets/arc-BUmFz4fr.js +1 -0
  155. package/ui-dist/assets/architectureDiagram-ZJ3FMSHR-BgxSslJV.js +36 -0
  156. package/ui-dist/assets/blockDiagram-677ZJIJ3-ooHxGjx4.js +132 -0
  157. package/ui-dist/assets/c4Diagram-LMCZKHZV-D9dY1Aru.js +10 -0
  158. package/ui-dist/assets/channel-CKAv7Dbr.js +1 -0
  159. package/ui-dist/assets/{chunk-QZHKN3VN-CoUe43bE.js → chunk-2Q5K7J3B-BdJwTN30.js} +1 -1
  160. package/ui-dist/assets/{chunk-JSJVCQXG-CGWgDKBb.js → chunk-32BRIVSS-CaFHJTJR.js} +1 -1
  161. package/ui-dist/assets/{chunk-FMBD7UC4-D_yZ_WmF.js → chunk-5VM5RSS4-BRD2jTg5.js} +1 -1
  162. package/ui-dist/assets/chunk-EX3LRPZG-CpOtmEnY.js +231 -0
  163. package/ui-dist/assets/{chunk-4BX2VUAB-Cd0jMFjT.js → chunk-JWPE2WC7-Dw2-8WMO.js} +1 -1
  164. package/ui-dist/assets/chunk-MOJQB5TN-DAS2IY_W.js +88 -0
  165. package/ui-dist/assets/chunk-RYQCIY6F-CYPq5dnm.js +1 -0
  166. package/ui-dist/assets/chunk-V7JOEXUC-DbSPNxXt.js +206 -0
  167. package/ui-dist/assets/{chunk-KX2RTZJC-PgfQ6Dqz.js → chunk-VR4S4FIN-CemgflPu.js} +1 -1
  168. package/ui-dist/assets/{chunk-55IACEB6-C-AmshGj.js → chunk-XXDRQBXY-Ba6PC9p6.js} +1 -1
  169. package/ui-dist/assets/classDiagram-OUVF2IWQ-CKpTn3Kw.js +1 -0
  170. package/ui-dist/assets/classDiagram-v2-EOCWNBFH-CKpTn3Kw.js +1 -0
  171. package/ui-dist/assets/{cose-bilkent-S5V4N54A-jsoDVyK9.js → cose-bilkent-JH36ORCC-BtBpHG_r.js} +1 -1
  172. package/ui-dist/assets/cynefin-VYW2F7L2-B0X6WooA.js +178 -0
  173. package/ui-dist/assets/cynefinDiagram-TSTJHNR4-DbgMlBM5.js +62 -0
  174. package/ui-dist/assets/cytoscape.esm-DTSO7Bv0.js +331 -0
  175. package/ui-dist/assets/dagre-VKFMJZFB-B8dBAi58.js +4 -0
  176. package/ui-dist/assets/diagram-FQU43EPY-CUBJ_ZvC.js +3 -0
  177. package/ui-dist/assets/diagram-G47NLZAW-CFRyURRw.js +24 -0
  178. package/ui-dist/assets/diagram-NH7WQ7WH-DRGQCFZY.js +24 -0
  179. package/ui-dist/assets/diagram-OA4YK3LP-Bk-5Qh1L.js +30 -0
  180. package/ui-dist/assets/diagram-WEI45ONY-CZPrvlcf.js +41 -0
  181. package/ui-dist/assets/ebnfDiagram-CCIWWBDH-B7Oa7CuJ.js +1 -0
  182. package/ui-dist/assets/erDiagram-Q63AITRT-D-SnVYAC.js +85 -0
  183. package/ui-dist/assets/flowDiagram-23GEKE2U-D0ES-POE.js +156 -0
  184. package/ui-dist/assets/ganttDiagram-NO4QXBWP-DxL6MH_c.js +292 -0
  185. package/ui-dist/assets/gitGraphDiagram-IHSO6WYX-BjdtAqn4.js +106 -0
  186. package/ui-dist/assets/graph-Bm3HhXYU.js +1 -0
  187. package/ui-dist/assets/{index-DDvz8goz.js → index-6GODZ0Tf.js} +1 -1
  188. package/ui-dist/assets/{index-CkdLQ1A4.js → index-B6-eHB_S.js} +1 -1
  189. package/ui-dist/assets/{index-1Ubio04r.js → index-BJx0M_2V.js} +1 -1
  190. package/ui-dist/assets/{index-BXbeltXq.js → index-BKaUE7op.js} +1 -1
  191. package/ui-dist/assets/{index-BSRzECfZ.js → index-BVQAE7Gp.js} +1 -1
  192. package/ui-dist/assets/{index-CMRK9PUO.js → index-Bv08zENf.js} +1 -1
  193. package/ui-dist/assets/{index-B4KMgdrI.js → index-C9IwIL1Y.js} +1 -1
  194. package/ui-dist/assets/{index-ipqs2akW.js → index-CNWYUMUW.js} +1 -1
  195. package/ui-dist/assets/{index-Be_UUduv.js → index-CsF2ME-F.js} +1 -1
  196. package/ui-dist/assets/index-DAQuh6iw.css +1 -0
  197. package/ui-dist/assets/{index-BBL80GJ3.js → index-DG1bXCni.js} +1 -1
  198. package/ui-dist/assets/{index-C2Ne_Flh.js → index-DSa3ObqN.js} +1 -1
  199. package/ui-dist/assets/{index-Cd5DOkgF.js → index-DgpIdftd.js} +1 -1
  200. package/ui-dist/assets/{index-Dxe3o4t_.js → index-IyUEMhfc.js} +1 -1
  201. package/ui-dist/assets/{index-B-4En24L.js → index-IzoWAsq4.js} +1 -1
  202. package/ui-dist/assets/{index-BL10wT_h.js → index-L6LxSwGF.js} +454 -465
  203. package/ui-dist/assets/{index-CjLYHamo.js → index-j5cZYTMF.js} +1 -1
  204. package/ui-dist/assets/{index-LKZoMmLm.js → index-yTqWLDLf.js} +1 -1
  205. package/ui-dist/assets/{index-DgfqS5r-.js → index-ylc7XFMg.js} +1 -1
  206. package/ui-dist/assets/infoDiagram-FWYZ7A6U-bWz54kfj.js +2 -0
  207. package/ui-dist/assets/{ishikawaDiagram-PHBUUO56-C08ZUJEU.js → ishikawaDiagram-FXEZZL3T-BgbS7eJf.js} +3 -3
  208. package/ui-dist/assets/journeyDiagram-5HDEW3XC-BQd7XTR7.js +139 -0
  209. package/ui-dist/assets/{kanban-definition-K7BYSVSG-BcJd4-9s.js → kanban-definition-HUTT4EX6-ClNG1w8r.js} +8 -8
  210. package/ui-dist/assets/katex-C5jXJg4s.js +257 -0
  211. package/ui-dist/assets/layout-CW-MiMXP.js +1 -0
  212. package/ui-dist/assets/{linear-CqN63wCD.js → linear-CU01CZyV.js} +1 -1
  213. package/ui-dist/assets/map-Mx3r0KIO.js +1 -0
  214. package/ui-dist/assets/mermaid.core-yS58mCMX.js +314 -0
  215. package/ui-dist/assets/mindmap-definition-LN4V7U3C-BrbWqg8j.js +96 -0
  216. package/ui-dist/assets/pegDiagram-2B236MQR-DAiVkGbJ.js +1 -0
  217. package/ui-dist/assets/pieDiagram-ENE6RG2P-Cfpgsmkb.js +39 -0
  218. package/ui-dist/assets/quadrantDiagram-ABIIQ3AL-BJCgcvPl.js +7 -0
  219. package/ui-dist/assets/railroadDiagram-RFXS5EU6-cSPWQQbj.js +1 -0
  220. package/ui-dist/assets/requirementDiagram-TGXJPOKE-B97SYYW6.js +84 -0
  221. package/ui-dist/assets/sankeyDiagram-HTMAVEWB-B-6vRKzj.js +40 -0
  222. package/ui-dist/assets/sequenceDiagram-DBY2YBRQ-DBK5BssT.js +162 -0
  223. package/ui-dist/assets/sizeCapture-X5ZJPWSS-BHH1iv2s.js +1 -0
  224. package/ui-dist/assets/stateDiagram-2N3HPSRC-Beu0lngd.js +1 -0
  225. package/ui-dist/assets/stateDiagram-v2-6OUMAXLB-BW5DHyV6.js +1 -0
  226. package/ui-dist/assets/swimlanes-5IMT3BWC-Ch-Sw6Rt.js +2 -0
  227. package/ui-dist/assets/swimlanesDiagram-G3AALYLV-lXZFrwCS.js +8 -0
  228. package/ui-dist/assets/timeline-definition-FHXFAJF6-Bd5ivmQa.js +120 -0
  229. package/ui-dist/assets/vennDiagram-L72KCM5P-VPXzIpMm.js +34 -0
  230. package/ui-dist/assets/wardleyDiagram-EHGQE667-DJvj2D5b.js +78 -0
  231. package/ui-dist/assets/xychartDiagram-FW5EYKEG-WOveSYiF.js +7 -0
  232. package/ui-dist/index.html +2 -2
  233. package/ui-dist/assets/_basePickBy-Cniq5QAz.js +0 -1
  234. package/ui-dist/assets/_baseUniq-aSj0wr7H.js +0 -1
  235. package/ui-dist/assets/arc-C4Mg91_a.js +0 -1
  236. package/ui-dist/assets/architectureDiagram-2XIMDMQ5-DfqLRajq.js +0 -36
  237. package/ui-dist/assets/blockDiagram-WCTKOSBZ-BbefXkmh.js +0 -132
  238. package/ui-dist/assets/c4Diagram-IC4MRINW-BVPjmrfV.js +0 -10
  239. package/ui-dist/assets/channel-B-bxwuub.js +0 -1
  240. package/ui-dist/assets/chunk-NQ4KR5QH-D78Rqvef.js +0 -220
  241. package/ui-dist/assets/chunk-WL4C6EOR-CaI2CXRo.js +0 -189
  242. package/ui-dist/assets/classDiagram-VBA2DB6C-oNkrSzge.js +0 -1
  243. package/ui-dist/assets/classDiagram-v2-RAHNMMFH-oNkrSzge.js +0 -1
  244. package/ui-dist/assets/clone-D1LQw6bn.js +0 -1
  245. package/ui-dist/assets/cytoscape.esm-BQaXIfA_.js +0 -331
  246. package/ui-dist/assets/dagre-KLK3FWXG-Cedmep7r.js +0 -4
  247. package/ui-dist/assets/diagram-E7M64L7V-BWIKKX1f.js +0 -24
  248. package/ui-dist/assets/diagram-IFDJBPK2-De8ij4wb.js +0 -43
  249. package/ui-dist/assets/diagram-P4PSJMXO-DfqKc5zd.js +0 -24
  250. package/ui-dist/assets/erDiagram-INFDFZHY-CacJL_tU.js +0 -70
  251. package/ui-dist/assets/flowDiagram-PKNHOUZH-CQbuZmQW.js +0 -162
  252. package/ui-dist/assets/ganttDiagram-A5KZAMGK-uMPy8GwP.js +0 -292
  253. package/ui-dist/assets/gitGraphDiagram-K3NZZRJ6-D10Ck-1y.js +0 -65
  254. package/ui-dist/assets/graph-DMAYpSbz.js +0 -1
  255. package/ui-dist/assets/index-yhZee3iu.css +0 -1
  256. package/ui-dist/assets/infoDiagram-LFFYTUFH-WdYfk1ti.js +0 -2
  257. package/ui-dist/assets/journeyDiagram-4ABVD52K-A3rlVmO2.js +0 -139
  258. package/ui-dist/assets/katex-B1X10hvy.js +0 -261
  259. package/ui-dist/assets/layout-BjkotBZ2.js +0 -1
  260. package/ui-dist/assets/mermaid.core-D3iDEDQJ.js +0 -255
  261. package/ui-dist/assets/mindmap-definition-YRQLILUH-Cm-NQlLA.js +0 -68
  262. package/ui-dist/assets/pieDiagram-SKSYHLDU-BaDPvveA.js +0 -30
  263. package/ui-dist/assets/quadrantDiagram-337W2JSQ-0dX4kokb.js +0 -7
  264. package/ui-dist/assets/requirementDiagram-Z7DCOOCP-BdbJFOUK.js +0 -73
  265. package/ui-dist/assets/sankeyDiagram-WA2Y5GQK-ZMXNjh7n.js +0 -10
  266. package/ui-dist/assets/sequenceDiagram-2WXFIKYE-DfR6JqDW.js +0 -145
  267. package/ui-dist/assets/stateDiagram-RAJIS63D-BcGX6JIu.js +0 -1
  268. package/ui-dist/assets/stateDiagram-v2-FVOUBMTO-D1SMoFW3.js +0 -1
  269. package/ui-dist/assets/timeline-definition-YZTLITO2-DrIAH8-G.js +0 -61
  270. package/ui-dist/assets/treemap-KZPCXAKY-DEopGTtM.js +0 -162
  271. package/ui-dist/assets/vennDiagram-LZ73GAT5-CM3yysPE.js +0 -34
  272. package/ui-dist/assets/xychartDiagram-JWTSCODW-C34pUeNV.js +0 -7
@@ -1,4 +1,5 @@
1
1
  import { buildModelAttemptSpecs, isSuccessfulRuntimeResult, } from "@rudderhq/agent-runtime-utils";
2
+ import { isBrowserSkillSelectionKey, isSupportedBrowserRuntimeType, } from "../browser-capability.js";
2
3
  const SHARED_ATTEMPT_CONFIG_KEYS = [
3
4
  "promptTemplate",
4
5
  "bootstrapPromptTemplate",
@@ -11,7 +12,102 @@ const SHARED_ATTEMPT_CONFIG_KEYS = [
11
12
  "paperclipSkillSync",
12
13
  "rudderRuntimeSkills",
13
14
  "paperclipRuntimeSkills",
15
+ "rudderBrowserEnabled",
14
16
  ];
17
+ function filterBrowserSkillList(value) {
18
+ if (!Array.isArray(value))
19
+ return [];
20
+ return value.filter((entry) => {
21
+ if (typeof entry === "string")
22
+ return !isBrowserSkillSelectionKey(entry);
23
+ if (!entry || typeof entry !== "object")
24
+ return true;
25
+ return !isBrowserSkillSelectionKey(entry.key);
26
+ });
27
+ }
28
+ function filterBrowserSkillSync(value) {
29
+ if (!value || typeof value !== "object" || Array.isArray(value))
30
+ return value;
31
+ const record = value;
32
+ return {
33
+ ...record,
34
+ desiredSkills: filterBrowserSkillList(record.desiredSkills),
35
+ };
36
+ }
37
+ function selectBrowserSkillEntries(value) {
38
+ if (!Array.isArray(value))
39
+ return [];
40
+ return value.filter((entry) => (Boolean(entry)
41
+ && typeof entry === "object"
42
+ && isBrowserSkillSelectionKey(entry.key)));
43
+ }
44
+ function resolveBrowserCapabilitySource(baseConfig) {
45
+ const configured = baseConfig.rudderBrowserCapability;
46
+ if (configured && typeof configured === "object" && !Array.isArray(configured)) {
47
+ const record = configured;
48
+ return {
49
+ instanceEligible: record.instanceEligible === true,
50
+ runtimeSkillEntries: selectBrowserSkillEntries(record.runtimeSkillEntries),
51
+ };
52
+ }
53
+ return {
54
+ instanceEligible: false,
55
+ runtimeSkillEntries: [],
56
+ };
57
+ }
58
+ function addBrowserSkillList(value, browserSkillEntries) {
59
+ return [
60
+ ...(Array.isArray(value) ? filterBrowserSkillList(value) : []),
61
+ ...browserSkillEntries,
62
+ ];
63
+ }
64
+ function addBrowserSkillSync(value, browserSkillKeys) {
65
+ const record = value && typeof value === "object" && !Array.isArray(value)
66
+ ? value
67
+ : {};
68
+ return {
69
+ ...record,
70
+ desiredSkills: [
71
+ ...(Array.isArray(record.desiredSkills)
72
+ ? filterBrowserSkillList(record.desiredSkills)
73
+ : []),
74
+ ...browserSkillKeys,
75
+ ],
76
+ };
77
+ }
78
+ function projectBrowserCapabilityForAttempt(config, source, agentRuntimeType) {
79
+ return projectBrowserCapability(config, source.instanceEligible && isSupportedBrowserRuntimeType(agentRuntimeType), source.runtimeSkillEntries);
80
+ }
81
+ function projectBrowserCapability(config, browserEnabled, browserSkillEntries) {
82
+ const { rudderBrowserCapability: _rudderBrowserCapability, ...publicConfig } = config;
83
+ if (browserEnabled) {
84
+ const browserSkillKeys = browserSkillEntries
85
+ .map((entry) => entry.key)
86
+ .filter((key) => typeof key === "string");
87
+ return {
88
+ ...publicConfig,
89
+ rudderBrowserEnabled: true,
90
+ rudderSkillSync: addBrowserSkillSync(publicConfig.rudderSkillSync, browserSkillKeys),
91
+ paperclipSkillSync: addBrowserSkillSync(publicConfig.paperclipSkillSync, browserSkillKeys),
92
+ rudderRuntimeSkills: addBrowserSkillList(publicConfig.rudderRuntimeSkills, browserSkillEntries),
93
+ paperclipRuntimeSkills: addBrowserSkillList(publicConfig.paperclipRuntimeSkills, browserSkillEntries),
94
+ };
95
+ }
96
+ return {
97
+ ...publicConfig,
98
+ rudderBrowserEnabled: false,
99
+ rudderSkillSync: filterBrowserSkillSync(publicConfig.rudderSkillSync),
100
+ paperclipSkillSync: filterBrowserSkillSync(publicConfig.paperclipSkillSync),
101
+ rudderRuntimeSkills: filterBrowserSkillList(publicConfig.rudderRuntimeSkills),
102
+ paperclipRuntimeSkills: filterBrowserSkillList(publicConfig.paperclipRuntimeSkills),
103
+ };
104
+ }
105
+ export function sanitizeUntrustedRuntimeConfig(config) {
106
+ return projectBrowserCapability(config, false, []);
107
+ }
108
+ export function projectPrimaryRuntimeConfig(config, agentRuntimeType) {
109
+ return projectBrowserCapabilityForAttempt(config, resolveBrowserCapabilitySource(config), agentRuntimeType);
110
+ }
15
111
  function clearRuntimeSession(runtime) {
16
112
  return {
17
113
  ...runtime,
@@ -33,25 +129,26 @@ function describeFailure(failure) {
33
129
  return failure.errorCode;
34
130
  return `exit code ${failure.exitCode ?? -1}`;
35
131
  }
36
- function buildAttemptConfig(baseConfig, attempt, primaryRuntimeType) {
37
- if (!attempt.isFallback)
38
- return baseConfig;
39
- if (attempt.agentRuntimeType === primaryRuntimeType) {
132
+ function buildAttemptConfig(baseConfig, attempt, primaryRuntimeType, attemptRuntimeType, browserCapabilitySource) {
133
+ if (!attempt.isFallback) {
134
+ return projectPrimaryRuntimeConfig(baseConfig, attemptRuntimeType);
135
+ }
136
+ if (attemptRuntimeType === primaryRuntimeType) {
40
137
  const { modelFallbacks: _modelFallbacks, ...baseWithoutFallbacks } = baseConfig;
41
- return {
138
+ return projectBrowserCapabilityForAttempt({
42
139
  ...baseWithoutFallbacks,
43
140
  ...(attempt.config ?? {}),
44
141
  model: attempt.model,
45
- };
142
+ }, browserCapabilitySource, attemptRuntimeType);
46
143
  }
47
144
  const sharedConfig = Object.fromEntries(SHARED_ATTEMPT_CONFIG_KEYS
48
145
  .filter((key) => baseConfig[key] !== undefined)
49
146
  .map((key) => [key, baseConfig[key]]));
50
- return {
147
+ return projectBrowserCapabilityForAttempt({
51
148
  ...sharedConfig,
52
149
  ...(attempt.config ?? {}),
53
150
  model: attempt.model,
54
- };
151
+ }, browserCapabilitySource, attemptRuntimeType);
55
152
  }
56
153
  function buildAttemptContext(baseContext, attempt) {
57
154
  if (!attempt.isFallback)
@@ -89,6 +186,8 @@ function wrapMeta(meta, attempt, previousFailure) {
89
186
  }
90
187
  export async function executeAdapterWithModelFallbacks(adapter, ctx, options = {}) {
91
188
  const attempts = buildModelAttemptSpecs(ctx.config, ctx.agent.agentRuntimeType);
189
+ // Resolve once so per-attempt config cannot escalate instance-level Browser eligibility.
190
+ const browserCapabilitySource = resolveBrowserCapabilitySource(ctx.config);
92
191
  let previousFailure = null;
93
192
  for (const attempt of attempts) {
94
193
  const attemptRuntimeType = attempt.agentRuntimeType ?? ctx.agent.agentRuntimeType ?? adapter.type;
@@ -103,7 +202,7 @@ export async function executeAdapterWithModelFallbacks(adapter, ctx, options = {
103
202
  await ctx.onLog("stdout", `[rudder] ${describeFailure(previousFailure)}; retrying with fallback model ${attempt.fallbackIndex}/${attempt.totalFallbacks}: ${attemptRuntimeType}/${attempt.model}\n`);
104
203
  }
105
204
  try {
106
- const attemptConfig = buildAttemptConfig(ctx.config, attempt, ctx.agent.agentRuntimeType ?? adapter.type);
205
+ const attemptConfig = buildAttemptConfig(ctx.config, attempt, ctx.agent.agentRuntimeType ?? adapter.type, attemptRuntimeType, browserCapabilitySource);
107
206
  await options.onAttemptStart?.(attempt, attemptAdapter);
108
207
  const result = await attemptAdapter.execute({
109
208
  ...ctx,
@@ -1 +1 @@
1
- {"version":3,"file":"model-fallback.js","sourceRoot":"","sources":["../../../src/services/runtime-kernel/model-fallback.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"model-fallback.js","sourceRoot":"","sources":["../../../src/services/runtime-kernel/model-fallback.ts"],"names":[],"mappings":"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"}
@@ -193,15 +193,15 @@ export declare function secretService(db: Db): {
193
193
  }, "single", Record<"organization_secrets", "not-null">, false, "where" | "orderBy", {
194
194
  id: string;
195
195
  orgId: string;
196
- description: string | null;
197
- createdAt: Date;
198
- updatedAt: Date;
199
196
  name: string;
200
197
  provider: string;
201
- createdByAgentId: string | null;
202
- createdByUserId: string | null;
203
198
  externalRef: string | null;
204
199
  latestVersion: number;
200
+ description: string | null;
201
+ createdByAgentId: string | null;
202
+ createdByUserId: string | null;
203
+ createdAt: Date;
204
+ updatedAt: Date;
205
205
  }[], {
206
206
  id: import("drizzle-orm/pg-core").PgColumn<{
207
207
  name: "id";
@@ -394,28 +394,28 @@ export declare function secretService(db: Db): {
394
394
  getById: (id: string) => Promise<{
395
395
  id: string;
396
396
  orgId: string;
397
- description: string | null;
398
- createdAt: Date;
399
- updatedAt: Date;
400
397
  name: string;
401
398
  provider: string;
402
- createdByAgentId: string | null;
403
- createdByUserId: string | null;
404
399
  externalRef: string | null;
405
400
  latestVersion: number;
401
+ description: string | null;
402
+ createdByAgentId: string | null;
403
+ createdByUserId: string | null;
404
+ createdAt: Date;
405
+ updatedAt: Date;
406
406
  }>;
407
407
  getByName: (orgId: string, name: string) => Promise<{
408
408
  id: string;
409
409
  orgId: string;
410
- description: string | null;
411
- createdAt: Date;
412
- updatedAt: Date;
413
410
  name: string;
414
411
  provider: string;
415
- createdByAgentId: string | null;
416
- createdByUserId: string | null;
417
412
  externalRef: string | null;
418
413
  latestVersion: number;
414
+ description: string | null;
415
+ createdByAgentId: string | null;
416
+ createdByUserId: string | null;
417
+ createdAt: Date;
418
+ updatedAt: Date;
419
419
  }>;
420
420
  resolveSecretValue: (orgId: string, secretId: string, version: number | "latest") => Promise<string>;
421
421
  create: (orgId: string, input: {
@@ -479,15 +479,15 @@ export declare function secretService(db: Db): {
479
479
  remove: (secretId: string) => Promise<{
480
480
  id: string;
481
481
  orgId: string;
482
- description: string | null;
483
- createdAt: Date;
484
- updatedAt: Date;
485
482
  name: string;
486
483
  provider: string;
487
- createdByAgentId: string | null;
488
- createdByUserId: string | null;
489
484
  externalRef: string | null;
490
485
  latestVersion: number;
486
+ description: string | null;
487
+ createdByAgentId: string | null;
488
+ createdByUserId: string | null;
489
+ createdAt: Date;
490
+ updatedAt: Date;
491
491
  } | null>;
492
492
  normalizeAdapterConfigForPersistence: (orgId: string, agentRuntimeConfig: Record<string, unknown>, opts?: {
493
493
  strictMode?: boolean;
@@ -96,16 +96,16 @@ export declare function stopRuntimeServicesForExecutionWorkspace(input: {
96
96
  workspaceCwd?: string | null;
97
97
  }): Promise<void>;
98
98
  export declare function listWorkspaceRuntimeServicesForProjectWorkspaces(db: Db, orgId: string, projectWorkspaceIds: string[]): Promise<Map<string, {
99
- url: string | null;
99
+ projectId: string | null;
100
100
  issueId: string | null;
101
+ status: string;
102
+ url: string | null;
101
103
  id: string;
102
104
  orgId: string;
103
105
  ownerAgentId: string | null;
104
- status: string;
105
106
  createdAt: Date;
106
107
  updatedAt: Date;
107
108
  provider: string;
108
- projectId: string | null;
109
109
  projectWorkspaceId: string | null;
110
110
  executionWorkspaceId: string | null;
111
111
  startedAt: Date;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rudderhq/server",
3
- "version": "0.4.5",
3
+ "version": "0.4.6-canary.0",
4
4
  "license": "SEE LICENSE IN LICENSE",
5
5
  "homepage": "https://github.com/Undertone0809/rudder",
6
6
  "bugs": {
@@ -54,37 +54,37 @@
54
54
  "@langfuse/tracing": "^5.1.0",
55
55
  "@larksuiteoapi/node-sdk": "1.67.0",
56
56
  "@opentelemetry/sdk-trace-node": "^2.1.0",
57
- "@rudderhq/agent-runtime-claude-local": "0.4.5",
58
- "@rudderhq/agent-runtime-codex-local": "0.4.5",
59
- "@rudderhq/agent-runtime-cursor-local": "0.4.5",
60
- "@rudderhq/agent-runtime-gemini-local": "0.4.5",
61
- "@rudderhq/agent-runtime-openclaw-gateway": "0.4.5",
62
- "@rudderhq/agent-runtime-opencode-local": "0.4.5",
63
- "@rudderhq/agent-runtime-pi-local": "0.4.5",
64
- "@rudderhq/agent-runtime-utils": "0.4.5",
65
- "@rudderhq/db": "0.4.5",
66
- "@rudderhq/plugin-sdk": "0.4.5",
67
- "@rudderhq/run-intelligence-core": "0.4.5",
68
- "@rudderhq/shared": "0.4.5",
57
+ "@rudderhq/agent-runtime-claude-local": "0.4.6-canary.0",
58
+ "@rudderhq/agent-runtime-codex-local": "0.4.6-canary.0",
59
+ "@rudderhq/agent-runtime-cursor-local": "0.4.6-canary.0",
60
+ "@rudderhq/agent-runtime-gemini-local": "0.4.6-canary.0",
61
+ "@rudderhq/agent-runtime-openclaw-gateway": "0.4.6-canary.0",
62
+ "@rudderhq/agent-runtime-opencode-local": "0.4.6-canary.0",
63
+ "@rudderhq/agent-runtime-pi-local": "0.4.6-canary.0",
64
+ "@rudderhq/agent-runtime-utils": "0.4.6-canary.0",
65
+ "@rudderhq/db": "0.4.6-canary.0",
66
+ "@rudderhq/plugin-sdk": "0.4.6-canary.0",
67
+ "@rudderhq/run-intelligence-core": "0.4.6-canary.0",
68
+ "@rudderhq/shared": "0.4.6-canary.0",
69
69
  "ajv": "^8.18.0",
70
70
  "ajv-formats": "^3.0.1",
71
- "better-auth": "1.4.18",
71
+ "better-auth": "1.6.23",
72
72
  "chokidar": "^4.0.3",
73
73
  "detect-port": "^2.1.0",
74
- "dompurify": "^3.3.3",
74
+ "dompurify": "^3.4.11",
75
75
  "dotenv": "^17.3.1",
76
- "drizzle-orm": "^0.38.4",
76
+ "drizzle-orm": "^0.45.2",
77
77
  "embedded-postgres": "18.1.0-beta.16",
78
78
  "express": "^5.2.1",
79
79
  "hermes-paperclip-adapter": "0.3.0",
80
80
  "jsdom": "^28.1.0",
81
- "multer": "^2.1.1",
81
+ "multer": "^2.2.0",
82
82
  "open": "^11.0.0",
83
83
  "pino": "^9.14.0",
84
84
  "pino-http": "^10.5.0",
85
85
  "pino-pretty": "^13.1.3",
86
86
  "sharp": "^0.34.5",
87
- "ws": "^8.20.0",
87
+ "ws": "^8.21.0",
88
88
  "zod": "^3.25.76"
89
89
  },
90
90
  "devDependencies": {
@@ -101,7 +101,7 @@
101
101
  "tsx": "^4.21.0",
102
102
  "typescript": "^5.9.3",
103
103
  "vite": "^6.4.1",
104
- "vitest": "^3.2.4"
104
+ "vitest": "^3.2.7"
105
105
  },
106
106
  "main": "./dist/index.js",
107
107
  "types": "./dist/index.d.ts"
@@ -0,0 +1,49 @@
1
+ ---
2
+ name: browser
3
+ description: Control Rudder's built-in Browser with run-scoped tools for opening tabs, navigating, reading structured page snapshots, clicking, typing, taking screenshots, and closing tabs. Use when a task requires inspecting or interacting with a web page or a locally served app through the Rudder Browser.
4
+ ---
5
+
6
+ # Browser
7
+
8
+ Use the Rudder-managed Browser tools instead of launching another browser or
9
+ trying to read browser profile data directly.
10
+
11
+ ## Workflow
12
+
13
+ 1. Call `rudder_browser_tabs` to reuse a tab when possible, or
14
+ `rudder_browser_open` with an `http:` or `https:` URL.
15
+ 2. Call `rudder_browser_read` before interacting. Use only element references
16
+ returned by the latest read result.
17
+ 3. Call `rudder_browser_click` or `rudder_browser_type` for one clear action.
18
+ Leave `submit` false unless submitting is explicitly intended. Every click
19
+ or type invalidates the snapshot refs, so read again before another action.
20
+ 4. Read again after navigation or mutation. Capture a screenshot when visual
21
+ evidence matters.
22
+ 5. Close tabs that are no longer needed.
23
+
24
+ ## Boundaries
25
+
26
+ - Never pass organization, Agent, run, API, or Broker identity as tool input.
27
+ Rudder injects and verifies that context.
28
+ - Treat an authenticated website session as available state, not as authority
29
+ to perform a purchase, publish, delete, send, approve, or other consequential
30
+ external action. Follow the task's approval boundary.
31
+ - Do not request, expose, copy, or infer cookies, session tokens, passwords, or
32
+ Browser profile paths.
33
+ - Do not use arbitrary JavaScript, CDP, custom protocols, `file:` URLs, or
34
+ `data:` navigation.
35
+ - A tab belongs to one Rudder run. Do not guess or reuse a tab id from another
36
+ run.
37
+ - If a tool returns `browser_disabled`, stop and report that Browser is disabled
38
+ in Settings. If it returns `browser_unavailable`, report that Rudder Desktop
39
+ is not connected. Do not work around either state with another browser unless
40
+ the user explicitly asks for that alternative.
41
+ - If a tool returns `browser_runtime_unsupported`, report that the current
42
+ runtime cannot control Rudder Browser. Do not simulate Browser control with
43
+ shell requests or another browser.
44
+ - If a ref is stale, covered, disabled, or changed, call `rudder_browser_read`
45
+ again instead of guessing. If a tab reaches a timeout or disappears, list
46
+ tabs before retrying so a late action is not duplicated.
47
+
48
+ Read [references/tool-contract.md](references/tool-contract.md) when exact tool
49
+ arguments, result fields, or stable error meanings are needed.
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "Browser"
3
+ short_description: "Control Rudder built-in Browser tabs safely"
4
+ default_prompt: "Use $browser to open and interact with a web page in the Rudder built-in Browser."
@@ -0,0 +1,73 @@
1
+ # Rudder Browser Tool Contract
2
+
3
+ Browser tools are exposed by the first-party `rudder-control-plane` transport
4
+ only when the deployment is `local_trusted`, the instance Browser capability is
5
+ enabled, and the current adapter is `claude_local`, `codex_local`,
6
+ `opencode_local`, or `pi_local`. Runtime fallback recomputes this gate and removes
7
+ the Browser skill, capability flag, and tools together when the target runtime is
8
+ not eligible.
9
+
10
+ ## Tools
11
+
12
+ - `rudder_browser_tabs`: list tabs owned by the current run.
13
+ - `rudder_browser_open`: open an HTTP(S) URL and return its `tabId`.
14
+ - `rudder_browser_navigate`: navigate a run-owned `tabId` to an HTTP(S) URL.
15
+ - `rudder_browser_read`: return the current URL, title, readable text, and
16
+ interactive elements with opaque `ref` values.
17
+ - `rudder_browser_click`: click one `ref` from the latest page snapshot.
18
+ - `rudder_browser_type`: replace the value at one `ref`; optional `submit`
19
+ submits the owning form after input events are dispatched.
20
+ - `rudder_browser_screenshot`: return a PNG capture for the current tab.
21
+ - `rudder_browser_close`: close one run-owned tab.
22
+
23
+ All tools derive `orgId`, `agentId`, and `runId` from Rudder runtime context.
24
+ Those values are never valid model arguments. Browser authorization requires a
25
+ run-scoped Agent JWT; the JWT's signed run is authoritative and any transport
26
+ run header is only a matching assertion.
27
+
28
+ ## Stable Errors
29
+
30
+ - `browser_disabled` (`409`): Browser is disabled in instance Settings. Do not
31
+ retry until the operator enables it.
32
+ - `browser_unavailable` (`503`): no live Rudder Desktop Browser Broker is
33
+ accepting commands. Retry only after Desktop reconnects.
34
+ - `browser_runtime_unsupported` (`403`): the current Agent runtime is not one of
35
+ the supported local Browser adapters. Do not retry through the same runtime.
36
+ - `browser_run_required` (`400`): the runtime did not provide a run id.
37
+ - `agent_run_context_mismatch` (`403`): a transport run header does not match
38
+ the run signed into the runtime credential. Do not retry with another run id.
39
+ - `browser_run_credential_required` (`403`): the request used a credential that
40
+ is not bound to one run. Browser cannot be authorized with a long-lived Agent
41
+ API key plus a caller-supplied run id.
42
+ - `browser_run_forbidden` (`403`): the run identity does not match the authenticated
43
+ organization and Agent. Do not retry with guessed identity.
44
+ - `browser_run_inactive` (`409`): the run has already ended. Do not retry from
45
+ that run.
46
+ - `browser_tab_not_found` (`404`): the tab no longer exists. List tabs and open
47
+ a replacement when needed.
48
+ - `browser_tab_forbidden` (`403`): the tab belongs to another run. Never probe
49
+ or reuse it.
50
+ - `browser_ref_not_found` (`404`): the element ref is stale, changed, hidden,
51
+ covered, disabled, or no longer belongs to the latest snapshot. Read again;
52
+ refs are intentionally invalidated after every click or type action.
53
+ - `browser_unsafe_url` (`422`): the URL, protocol, or Rudder control-plane
54
+ origin is not allowed. Correct the URL instead of retrying it unchanged.
55
+ - `browser_invalid_argument` (`400` or `422`): a tool argument is malformed or
56
+ outside its bound. Correct the request before retrying.
57
+ - `browser_navigation_failed` (`502`): Chromium could not complete navigation.
58
+ Inspect or list the tab before deciding whether to retry.
59
+ - `browser_tab_limit` (`429`): the run or Desktop tab limit was reached. Reuse
60
+ or close an owned tab before opening another. V1 permits eight tabs per run
61
+ and 32 Agent Browser tabs per Desktop process.
62
+ - `browser_timeout` (`504`): the command expired in a queue or timed out during
63
+ execution. List tabs before retrying because an active timed-out tab is
64
+ closed to prevent late side effects.
65
+ - `browser_result_too_large` (`413`): the screenshot exceeded the bounded
66
+ response size. Use `read` or another narrower evidence path.
67
+ - `browser_broker_protocol_error` / `browser_broker_error` (`502`): Desktop
68
+ returned an invalid or internal Broker result. Do not blindly retry a
69
+ consequential action; inspect the tab or report the failure.
70
+
71
+ The Browser profile may contain sessions shared by organizations in the same
72
+ local Rudder instance. Tab ownership remains isolated by organization, Agent,
73
+ and run. Shared login state never broadens the task's authorization boundary.
@@ -9,7 +9,7 @@ This is the control-plane practice skill for agents working under Rudder. Rudder
9
9
  work is not only "run a command"; it is a governed loop:
10
10
 
11
11
  ```text
12
- Goal -> Issue -> Agent run -> Review -> Feedback -> Learning -> Better future runs
12
+ Goal -> Plan -> Chat or Issue -> Agent run -> Review -> Feedback -> Learning -> Better future runs
13
13
  ```
14
14
 
15
15
  Runtime-owned heartbeat prompts provide the fixed heartbeat execution flow only
@@ -31,7 +31,10 @@ organization-skill operations.
31
31
 
32
32
  ## Control-Plane Rails
33
33
 
34
- - Always checkout before doing task work.
34
+ - Chat and issues are parallel execution surfaces. Continue chat-scoped work in
35
+ Chat unless the operator explicitly asks for issue structure or team policy
36
+ requires governed issue fields.
37
+ - For issue-scoped task work, always checkout before starting execution.
35
38
  - Never retry a `409` from checkout.
36
39
  - Never look for unassigned work.
37
40
  - In issue comments, use `[Agent Name](agent://agent-id?intent=wake)` only when
@@ -2,6 +2,15 @@
2
2
 
3
3
  Stable compatibility contract for agents using the bundled `rudder` skill. Prefer first-party Rudder MCP tools when the runtime exposes them; use these CLI commands as fallback when MCP is unavailable or a Rudder MCP tool returns a transport/configuration error.
4
4
 
5
+ ## Chat And Issue Surface Boundary
6
+
7
+ Chat and issues are parallel ways to advance real tasks. Chat supports
8
+ conversation-driven execution; issues add explicit ownership, status, priority,
9
+ dependencies, and review structure. Do not create or require an issue merely
10
+ because Chat work is executable, long-running, reviewable, or durable. Use the
11
+ issue checkout and close-out commands below only for issue-scoped work, or when
12
+ operator intent or team governance requires that structure.
13
+
5
14
  ## Defaults
6
15
 
7
16
  - First-party MCP tools use the stable `rudder_<capability_id>` naming convention, for example `rudder_issue_checkout` for `issue.checkout`.
@@ -59,6 +68,14 @@ Direct API fallback is allowed for heartbeat close-out only when a required CLI
59
68
  | `rudder_skill_import` | `rudder skill import --org-id <id> --source <source>` | Import a skill package into the organization skill library. | yes | required | no | attached when available |
60
69
  | `rudder_skill_scan_local` | `rudder skill scan-local --org-id <id> [--roots <csv>]` | Scan local roots for skill packages and import new ones. | yes | required | no | attached when available |
61
70
  | `rudder_skill_scan_projects` | `rudder skill scan-projects --org-id <id> [--project-ids <csv>] [--workspace-ids <csv>]` | Scan the org workspace and any legacy project workspace records for skill packages and import new ones. | yes | required | no | attached when available |
71
+ | `rudder_browser_tabs` | `rudder browser tabs` | List Browser tabs owned by the current Rudder agent run. | no | required | required | required |
72
+ | `rudder_browser_open` | `rudder browser open <url>` | Open a run-owned tab in the Rudder Browser. | yes | required | required | required |
73
+ | `rudder_browser_navigate` | `rudder browser navigate <tab-id> <url>` | Navigate a run-owned Rudder Browser tab. | yes | required | required | required |
74
+ | `rudder_browser_read` | `rudder browser read <tab-id>` | Read a structured snapshot from a run-owned Rudder Browser tab. | no | required | required | required |
75
+ | `rudder_browser_click` | `rudder browser click <tab-id> <ref>` | Click an element reference returned by Rudder Browser read. | yes | required | required | required |
76
+ | `rudder_browser_type` | `rudder browser type <tab-id> <ref> --text <text>` | Type into an element reference in a run-owned Rudder Browser tab. | yes | required | required | required |
77
+ | `rudder_browser_screenshot` | `rudder browser screenshot <tab-id>` | Capture a screenshot of a run-owned Rudder Browser tab. | no | required | required | required |
78
+ | `rudder_browser_close` | `rudder browser close <tab-id>` | Close a run-owned Rudder Browser tab. | yes | required | required | required |
62
79
  | `rudder_automation_list` | `rudder automation list --org-id <id>` | List automations for an organization with compact local filters. | no | required | no | no |
63
80
  | `rudder_automation_get` | `rudder automation get <automation-id>` | Read one automation detail including triggers and recent runs. | no | no | no | no |
64
81
  | `rudder_automation_runs` | `rudder automation runs <automation-id>` | List recent runs for one automation. | no | no | no | no |
@@ -0,0 +1,49 @@
1
+ ---
2
+ name: browser
3
+ description: Control Rudder's built-in Browser with run-scoped tools for opening tabs, navigating, reading structured page snapshots, clicking, typing, taking screenshots, and closing tabs. Use when a task requires inspecting or interacting with a web page or a locally served app through the Rudder Browser.
4
+ ---
5
+
6
+ # Browser
7
+
8
+ Use the Rudder-managed Browser tools instead of launching another browser or
9
+ trying to read browser profile data directly.
10
+
11
+ ## Workflow
12
+
13
+ 1. Call `rudder_browser_tabs` to reuse a tab when possible, or
14
+ `rudder_browser_open` with an `http:` or `https:` URL.
15
+ 2. Call `rudder_browser_read` before interacting. Use only element references
16
+ returned by the latest read result.
17
+ 3. Call `rudder_browser_click` or `rudder_browser_type` for one clear action.
18
+ Leave `submit` false unless submitting is explicitly intended. Every click
19
+ or type invalidates the snapshot refs, so read again before another action.
20
+ 4. Read again after navigation or mutation. Capture a screenshot when visual
21
+ evidence matters.
22
+ 5. Close tabs that are no longer needed.
23
+
24
+ ## Boundaries
25
+
26
+ - Never pass organization, Agent, run, API, or Broker identity as tool input.
27
+ Rudder injects and verifies that context.
28
+ - Treat an authenticated website session as available state, not as authority
29
+ to perform a purchase, publish, delete, send, approve, or other consequential
30
+ external action. Follow the task's approval boundary.
31
+ - Do not request, expose, copy, or infer cookies, session tokens, passwords, or
32
+ Browser profile paths.
33
+ - Do not use arbitrary JavaScript, CDP, custom protocols, `file:` URLs, or
34
+ `data:` navigation.
35
+ - A tab belongs to one Rudder run. Do not guess or reuse a tab id from another
36
+ run.
37
+ - If a tool returns `browser_disabled`, stop and report that Browser is disabled
38
+ in Settings. If it returns `browser_unavailable`, report that Rudder Desktop
39
+ is not connected. Do not work around either state with another browser unless
40
+ the user explicitly asks for that alternative.
41
+ - If a tool returns `browser_runtime_unsupported`, report that the current
42
+ runtime cannot control Rudder Browser. Do not simulate Browser control with
43
+ shell requests or another browser.
44
+ - If a ref is stale, covered, disabled, or changed, call `rudder_browser_read`
45
+ again instead of guessing. If a tab reaches a timeout or disappears, list
46
+ tabs before retrying so a late action is not duplicated.
47
+
48
+ Read [references/tool-contract.md](references/tool-contract.md) when exact tool
49
+ arguments, result fields, or stable error meanings are needed.
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "Browser"
3
+ short_description: "Control Rudder built-in Browser tabs safely"
4
+ default_prompt: "Use $browser to open and interact with a web page in the Rudder built-in Browser."