@cursor/july 0.1.1

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 (623) hide show
  1. package/AGENTS.md +290 -0
  2. package/LICENSE.md +3 -0
  3. package/README.md +1233 -0
  4. package/dist/ab.d.ts +290 -0
  5. package/dist/ab.d.ts.map +1 -0
  6. package/dist/ab.js +386 -0
  7. package/dist/bin/agent-serve.d.ts +15 -0
  8. package/dist/bin/agent-serve.d.ts.map +1 -0
  9. package/dist/bin/agent-serve.js +754 -0
  10. package/dist/channels/github/api.d.ts +101 -0
  11. package/dist/channels/github/api.d.ts.map +1 -0
  12. package/dist/channels/github/api.js +229 -0
  13. package/dist/channels/github/auth.d.ts +67 -0
  14. package/dist/channels/github/auth.d.ts.map +1 -0
  15. package/dist/channels/github/auth.js +239 -0
  16. package/dist/channels/github/binding.d.ts +73 -0
  17. package/dist/channels/github/binding.d.ts.map +1 -0
  18. package/dist/channels/github/binding.js +114 -0
  19. package/dist/channels/github/defaults.d.ts +24 -0
  20. package/dist/channels/github/defaults.d.ts.map +1 -0
  21. package/dist/channels/github/defaults.js +100 -0
  22. package/dist/channels/github/events.d.ts +18 -0
  23. package/dist/channels/github/events.d.ts.map +1 -0
  24. package/dist/channels/github/events.js +59 -0
  25. package/dist/channels/github/forward.d.ts +137 -0
  26. package/dist/channels/github/forward.d.ts.map +1 -0
  27. package/dist/channels/github/forward.js +271 -0
  28. package/dist/channels/github/github-channel.d.ts +127 -0
  29. package/dist/channels/github/github-channel.d.ts.map +1 -0
  30. package/dist/channels/github/github-channel.js +1688 -0
  31. package/dist/channels/github/index.d.ts +52 -0
  32. package/dist/channels/github/index.d.ts.map +1 -0
  33. package/dist/channels/github/index.js +51 -0
  34. package/dist/channels/github/replay.d.ts +115 -0
  35. package/dist/channels/github/replay.d.ts.map +1 -0
  36. package/dist/channels/github/replay.js +282 -0
  37. package/dist/channels/github/state.d.ts +26 -0
  38. package/dist/channels/github/state.d.ts.map +1 -0
  39. package/dist/channels/github/state.js +50 -0
  40. package/dist/channels/github/types.d.ts +385 -0
  41. package/dist/channels/github/types.d.ts.map +1 -0
  42. package/dist/channels/github/types.js +1 -0
  43. package/dist/channels/slack/api.d.ts +117 -0
  44. package/dist/channels/slack/api.d.ts.map +1 -0
  45. package/dist/channels/slack/api.js +437 -0
  46. package/dist/channels/slack/approvals.d.ts +32 -0
  47. package/dist/channels/slack/approvals.d.ts.map +1 -0
  48. package/dist/channels/slack/approvals.js +157 -0
  49. package/dist/channels/slack/assistant.d.ts +23 -0
  50. package/dist/channels/slack/assistant.d.ts.map +1 -0
  51. package/dist/channels/slack/assistant.js +67 -0
  52. package/dist/channels/slack/auth.d.ts +40 -0
  53. package/dist/channels/slack/auth.d.ts.map +1 -0
  54. package/dist/channels/slack/auth.js +71 -0
  55. package/dist/channels/slack/channel-watch.d.ts +46 -0
  56. package/dist/channels/slack/channel-watch.d.ts.map +1 -0
  57. package/dist/channels/slack/channel-watch.js +180 -0
  58. package/dist/channels/slack/constants.d.ts +17 -0
  59. package/dist/channels/slack/constants.d.ts.map +1 -0
  60. package/dist/channels/slack/constants.js +27 -0
  61. package/dist/channels/slack/credentials.d.ts +35 -0
  62. package/dist/channels/slack/credentials.d.ts.map +1 -0
  63. package/dist/channels/slack/credentials.js +88 -0
  64. package/dist/channels/slack/cursor-account.d.ts +76 -0
  65. package/dist/channels/slack/cursor-account.d.ts.map +1 -0
  66. package/dist/channels/slack/cursor-account.js +88 -0
  67. package/dist/channels/slack/defaults.d.ts +32 -0
  68. package/dist/channels/slack/defaults.d.ts.map +1 -0
  69. package/dist/channels/slack/defaults.js +380 -0
  70. package/dist/channels/slack/dispatch.d.ts +43 -0
  71. package/dist/channels/slack/dispatch.d.ts.map +1 -0
  72. package/dist/channels/slack/dispatch.js +185 -0
  73. package/dist/channels/slack/doctor.d.ts +24 -0
  74. package/dist/channels/slack/doctor.d.ts.map +1 -0
  75. package/dist/channels/slack/doctor.js +115 -0
  76. package/dist/channels/slack/event-id-dedupe.d.ts +10 -0
  77. package/dist/channels/slack/event-id-dedupe.d.ts.map +1 -0
  78. package/dist/channels/slack/event-id-dedupe.js +23 -0
  79. package/dist/channels/slack/inbound.d.ts +41 -0
  80. package/dist/channels/slack/inbound.d.ts.map +1 -0
  81. package/dist/channels/slack/inbound.js +166 -0
  82. package/dist/channels/slack/index.d.ts +45 -0
  83. package/dist/channels/slack/index.d.ts.map +1 -0
  84. package/dist/channels/slack/index.js +44 -0
  85. package/dist/channels/slack/init.d.ts +32 -0
  86. package/dist/channels/slack/init.d.ts.map +1 -0
  87. package/dist/channels/slack/init.js +82 -0
  88. package/dist/channels/slack/interactive.d.ts +19 -0
  89. package/dist/channels/slack/interactive.d.ts.map +1 -0
  90. package/dist/channels/slack/interactive.js +142 -0
  91. package/dist/channels/slack/links.d.ts +10 -0
  92. package/dist/channels/slack/links.d.ts.map +1 -0
  93. package/dist/channels/slack/links.js +19 -0
  94. package/dist/channels/slack/live-delivery.d.ts +75 -0
  95. package/dist/channels/slack/live-delivery.d.ts.map +1 -0
  96. package/dist/channels/slack/live-delivery.js +143 -0
  97. package/dist/channels/slack/log.d.ts +25 -0
  98. package/dist/channels/slack/log.d.ts.map +1 -0
  99. package/dist/channels/slack/log.js +47 -0
  100. package/dist/channels/slack/manifest.d.ts +57 -0
  101. package/dist/channels/slack/manifest.d.ts.map +1 -0
  102. package/dist/channels/slack/manifest.js +110 -0
  103. package/dist/channels/slack/pr-ref.d.ts +18 -0
  104. package/dist/channels/slack/pr-ref.d.ts.map +1 -0
  105. package/dist/channels/slack/pr-ref.js +36 -0
  106. package/dist/channels/slack/setup.d.ts +14 -0
  107. package/dist/channels/slack/setup.d.ts.map +1 -0
  108. package/dist/channels/slack/setup.js +86 -0
  109. package/dist/channels/slack/slack-channel.d.ts +15 -0
  110. package/dist/channels/slack/slack-channel.d.ts.map +1 -0
  111. package/dist/channels/slack/slack-channel.js +281 -0
  112. package/dist/channels/slack/socket-mode.d.ts +26 -0
  113. package/dist/channels/slack/socket-mode.d.ts.map +1 -0
  114. package/dist/channels/slack/socket-mode.js +116 -0
  115. package/dist/channels/slack/stream.d.ts +26 -0
  116. package/dist/channels/slack/stream.d.ts.map +1 -0
  117. package/dist/channels/slack/stream.js +39 -0
  118. package/dist/channels/slack/tool-approval-events.d.ts +33 -0
  119. package/dist/channels/slack/tool-approval-events.d.ts.map +1 -0
  120. package/dist/channels/slack/tool-approval-events.js +129 -0
  121. package/dist/channels/slack/types.d.ts +326 -0
  122. package/dist/channels/slack/types.d.ts.map +1 -0
  123. package/dist/channels/slack/types.js +4 -0
  124. package/dist/channels.d.ts +116 -0
  125. package/dist/channels.d.ts.map +1 -0
  126. package/dist/channels.js +294 -0
  127. package/dist/connections.d.ts +75 -0
  128. package/dist/connections.d.ts.map +1 -0
  129. package/dist/connections.js +75 -0
  130. package/dist/docs/404.html +22 -0
  131. package/dist/docs/ab.html +87 -0
  132. package/dist/docs/assets/ab.md.COdXkces.js +63 -0
  133. package/dist/docs/assets/ab.md.COdXkces.lean.js +1 -0
  134. package/dist/docs/assets/app.DqfFEmJd.js +1 -0
  135. package/dist/docs/assets/building-with-agents.md.CJCtZCyi.js +13 -0
  136. package/dist/docs/assets/building-with-agents.md.CJCtZCyi.lean.js +1 -0
  137. package/dist/docs/assets/chunks/@localSearchIndexroot.CcVk1uKq.js +1 -0
  138. package/dist/docs/assets/chunks/VPLocalSearchBox.BaLEdS15.js +9 -0
  139. package/dist/docs/assets/chunks/framework.CAZyNGu9.js +19 -0
  140. package/dist/docs/assets/chunks/theme.CZRvu_0q.js +2 -0
  141. package/dist/docs/assets/concepts.md.Cfb9b-k1.js +4 -0
  142. package/dist/docs/assets/concepts.md.Cfb9b-k1.lean.js +1 -0
  143. package/dist/docs/assets/deployment.md.Dx1TYNk5.js +14 -0
  144. package/dist/docs/assets/deployment.md.Dx1TYNk5.lean.js +1 -0
  145. package/dist/docs/assets/evals.md.DPZ_MAnI.js +85 -0
  146. package/dist/docs/assets/evals.md.DPZ_MAnI.lean.js +1 -0
  147. package/dist/docs/assets/guides_agent-to-agent.md.CrtrsySy.js +10 -0
  148. package/dist/docs/assets/guides_agent-to-agent.md.CrtrsySy.lean.js +1 -0
  149. package/dist/docs/assets/guides_cloud-runtime.md.CYlNMTNp.js +9 -0
  150. package/dist/docs/assets/guides_cloud-runtime.md.CYlNMTNp.lean.js +1 -0
  151. package/dist/docs/assets/guides_github.md.DwbKhCeS.js +20 -0
  152. package/dist/docs/assets/guides_github.md.DwbKhCeS.lean.js +1 -0
  153. package/dist/docs/assets/guides_human-in-the-loop.md.Dvuctx7s.js +28 -0
  154. package/dist/docs/assets/guides_human-in-the-loop.md.Dvuctx7s.lean.js +1 -0
  155. package/dist/docs/assets/guides_slack.md.bv41fHfW.js +37 -0
  156. package/dist/docs/assets/guides_slack.md.bv41fHfW.lean.js +1 -0
  157. package/dist/docs/assets/guides_webhooks.md.hFTik3lf.js +50 -0
  158. package/dist/docs/assets/guides_webhooks.md.hFTik3lf.lean.js +1 -0
  159. package/dist/docs/assets/hillclimbing.md.DHNast08.js +4 -0
  160. package/dist/docs/assets/hillclimbing.md.DHNast08.lean.js +1 -0
  161. package/dist/docs/assets/index.md.BPKcj5AI.js +20 -0
  162. package/dist/docs/assets/index.md.BPKcj5AI.lean.js +1 -0
  163. package/dist/docs/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 +0 -0
  164. package/dist/docs/assets/inter-italic-cyrillic.By2_1cv3.woff2 +0 -0
  165. package/dist/docs/assets/inter-italic-greek-ext.1u6EdAuj.woff2 +0 -0
  166. package/dist/docs/assets/inter-italic-greek.DJ8dCoTZ.woff2 +0 -0
  167. package/dist/docs/assets/inter-italic-latin-ext.CN1xVJS-.woff2 +0 -0
  168. package/dist/docs/assets/inter-italic-latin.C2AdPX0b.woff2 +0 -0
  169. package/dist/docs/assets/inter-italic-vietnamese.BSbpV94h.woff2 +0 -0
  170. package/dist/docs/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2 +0 -0
  171. package/dist/docs/assets/inter-roman-cyrillic.C5lxZ8CY.woff2 +0 -0
  172. package/dist/docs/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 +0 -0
  173. package/dist/docs/assets/inter-roman-greek.BBVDIX6e.woff2 +0 -0
  174. package/dist/docs/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 +0 -0
  175. package/dist/docs/assets/inter-roman-latin.Di8DUHzh.woff2 +0 -0
  176. package/dist/docs/assets/inter-roman-vietnamese.BjW4sHH5.woff2 +0 -0
  177. package/dist/docs/assets/quickstart.md.tVPiGK_L.js +35 -0
  178. package/dist/docs/assets/quickstart.md.tVPiGK_L.lean.js +1 -0
  179. package/dist/docs/assets/reference_agent-config.md.Bpd7HQwf.js +34 -0
  180. package/dist/docs/assets/reference_agent-config.md.Bpd7HQwf.lean.js +1 -0
  181. package/dist/docs/assets/reference_channels.md.D7JTR03W.js +53 -0
  182. package/dist/docs/assets/reference_channels.md.D7JTR03W.lean.js +1 -0
  183. package/dist/docs/assets/reference_cli.md.DA730zCu.js +33 -0
  184. package/dist/docs/assets/reference_cli.md.DA730zCu.lean.js +1 -0
  185. package/dist/docs/assets/reference_connections.md.C3vNH_DE.js +26 -0
  186. package/dist/docs/assets/reference_connections.md.C3vNH_DE.lean.js +1 -0
  187. package/dist/docs/assets/reference_hooks.md.BCEc3MyM.js +12 -0
  188. package/dist/docs/assets/reference_hooks.md.BCEc3MyM.lean.js +1 -0
  189. package/dist/docs/assets/reference_http-api.md.DBAahtdz.js +11 -0
  190. package/dist/docs/assets/reference_http-api.md.DBAahtdz.lean.js +1 -0
  191. package/dist/docs/assets/reference_instructions.md.BC05LEQ8.js +12 -0
  192. package/dist/docs/assets/reference_instructions.md.BC05LEQ8.lean.js +1 -0
  193. package/dist/docs/assets/reference_playground.md.CPZhfYaO.js +1 -0
  194. package/dist/docs/assets/reference_playground.md.CPZhfYaO.lean.js +1 -0
  195. package/dist/docs/assets/reference_project-layout.md.Bd_CKtNS.js +31 -0
  196. package/dist/docs/assets/reference_project-layout.md.Bd_CKtNS.lean.js +1 -0
  197. package/dist/docs/assets/reference_schedules.md.D7qijxLk.js +82 -0
  198. package/dist/docs/assets/reference_schedules.md.D7qijxLk.lean.js +1 -0
  199. package/dist/docs/assets/reference_sessions.md.DdjWabnN.js +8 -0
  200. package/dist/docs/assets/reference_sessions.md.DdjWabnN.lean.js +1 -0
  201. package/dist/docs/assets/reference_skills.md.VQnlBT3Q.js +15 -0
  202. package/dist/docs/assets/reference_skills.md.VQnlBT3Q.lean.js +1 -0
  203. package/dist/docs/assets/reference_subagents.md.CIRAVcPK.js +10 -0
  204. package/dist/docs/assets/reference_subagents.md.CIRAVcPK.lean.js +1 -0
  205. package/dist/docs/assets/reference_tools.md.DF5kwlt0.js +46 -0
  206. package/dist/docs/assets/reference_tools.md.DF5kwlt0.lean.js +1 -0
  207. package/dist/docs/assets/scaffolding-agents.md.CyYfWGdc.js +1 -0
  208. package/dist/docs/assets/scaffolding-agents.md.CyYfWGdc.lean.js +1 -0
  209. package/dist/docs/assets/style.Bj-IXa5W.css +1 -0
  210. package/dist/docs/assets/troubleshooting.md.DkovjS7h.js +1 -0
  211. package/dist/docs/assets/troubleshooting.md.DkovjS7h.lean.js +1 -0
  212. package/dist/docs/building-with-agents.html +37 -0
  213. package/dist/docs/concepts.html +28 -0
  214. package/dist/docs/deployment.html +38 -0
  215. package/dist/docs/evals.html +109 -0
  216. package/dist/docs/guides/agent-to-agent.html +34 -0
  217. package/dist/docs/guides/cloud-runtime.html +33 -0
  218. package/dist/docs/guides/github.html +44 -0
  219. package/dist/docs/guides/human-in-the-loop.html +52 -0
  220. package/dist/docs/guides/slack.html +61 -0
  221. package/dist/docs/guides/webhooks.html +74 -0
  222. package/dist/docs/hashmap.json +1 -0
  223. package/dist/docs/hillclimbing.html +28 -0
  224. package/dist/docs/index.html +44 -0
  225. package/dist/docs/quickstart.html +59 -0
  226. package/dist/docs/reference/agent-config.html +58 -0
  227. package/dist/docs/reference/channels.html +77 -0
  228. package/dist/docs/reference/cli.html +57 -0
  229. package/dist/docs/reference/connections.html +50 -0
  230. package/dist/docs/reference/hooks.html +36 -0
  231. package/dist/docs/reference/http-api.html +35 -0
  232. package/dist/docs/reference/instructions.html +36 -0
  233. package/dist/docs/reference/playground.html +25 -0
  234. package/dist/docs/reference/project-layout.html +55 -0
  235. package/dist/docs/reference/schedules.html +106 -0
  236. package/dist/docs/reference/sessions.html +32 -0
  237. package/dist/docs/reference/skills.html +39 -0
  238. package/dist/docs/reference/subagents.html +34 -0
  239. package/dist/docs/reference/tools.html +70 -0
  240. package/dist/docs/scaffolding-agents.html +25 -0
  241. package/dist/docs/troubleshooting.html +25 -0
  242. package/dist/docs/vp-icons.css +0 -0
  243. package/dist/evals.d.ts +312 -0
  244. package/dist/evals.d.ts.map +1 -0
  245. package/dist/evals.js +254 -0
  246. package/dist/hooks.d.ts +23 -0
  247. package/dist/hooks.d.ts.map +1 -0
  248. package/dist/hooks.js +23 -0
  249. package/dist/index.d.ts +71 -0
  250. package/dist/index.d.ts.map +1 -0
  251. package/dist/index.js +101 -0
  252. package/dist/internal/ab-collector.d.ts +42 -0
  253. package/dist/internal/ab-collector.d.ts.map +1 -0
  254. package/dist/internal/ab-collector.js +153 -0
  255. package/dist/internal/ab-fold.d.ts +36 -0
  256. package/dist/internal/ab-fold.d.ts.map +1 -0
  257. package/dist/internal/ab-fold.js +171 -0
  258. package/dist/internal/ab-snapshot.d.ts +70 -0
  259. package/dist/internal/ab-snapshot.d.ts.map +1 -0
  260. package/dist/internal/ab-snapshot.js +208 -0
  261. package/dist/internal/approval-gate.d.ts +34 -0
  262. package/dist/internal/approval-gate.d.ts.map +1 -0
  263. package/dist/internal/approval-gate.js +85 -0
  264. package/dist/internal/auth.d.ts +8 -0
  265. package/dist/internal/auth.d.ts.map +1 -0
  266. package/dist/internal/auth.js +27 -0
  267. package/dist/internal/authored-alias-hooks.d.ts +31 -0
  268. package/dist/internal/authored-alias-hooks.d.ts.map +1 -0
  269. package/dist/internal/authored-alias-hooks.js +43 -0
  270. package/dist/internal/authored-loaders.d.ts +25 -0
  271. package/dist/internal/authored-loaders.d.ts.map +1 -0
  272. package/dist/internal/authored-loaders.js +129 -0
  273. package/dist/internal/bounded-int.d.ts +11 -0
  274. package/dist/internal/bounded-int.d.ts.map +1 -0
  275. package/dist/internal/bounded-int.js +13 -0
  276. package/dist/internal/brand.d.ts +6 -0
  277. package/dist/internal/brand.d.ts.map +1 -0
  278. package/dist/internal/brand.js +17 -0
  279. package/dist/internal/chat-client.d.ts +19 -0
  280. package/dist/internal/chat-client.d.ts.map +1 -0
  281. package/dist/internal/chat-client.js +327 -0
  282. package/dist/internal/cli-ax.d.ts +58 -0
  283. package/dist/internal/cli-ax.d.ts.map +1 -0
  284. package/dist/internal/cli-ax.js +345 -0
  285. package/dist/internal/cli-cursor.d.ts +20 -0
  286. package/dist/internal/cli-cursor.d.ts.map +1 -0
  287. package/dist/internal/cli-cursor.js +227 -0
  288. package/dist/internal/cli-github.d.ts +47 -0
  289. package/dist/internal/cli-github.d.ts.map +1 -0
  290. package/dist/internal/cli-github.js +644 -0
  291. package/dist/internal/cli-slack.d.ts +18 -0
  292. package/dist/internal/cli-slack.d.ts.map +1 -0
  293. package/dist/internal/cli-slack.js +144 -0
  294. package/dist/internal/cloud-merge.d.ts +23 -0
  295. package/dist/internal/cloud-merge.d.ts.map +1 -0
  296. package/dist/internal/cloud-merge.js +28 -0
  297. package/dist/internal/cron.d.ts +17 -0
  298. package/dist/internal/cron.d.ts.map +1 -0
  299. package/dist/internal/cron.js +60 -0
  300. package/dist/internal/cursor/account-mcp.d.ts +95 -0
  301. package/dist/internal/cursor/account-mcp.d.ts.map +1 -0
  302. package/dist/internal/cursor/account-mcp.js +342 -0
  303. package/dist/internal/cursor/backend-client.d.ts +118 -0
  304. package/dist/internal/cursor/backend-client.d.ts.map +1 -0
  305. package/dist/internal/cursor/backend-client.js +477 -0
  306. package/dist/internal/cursor/credentials.d.ts +112 -0
  307. package/dist/internal/cursor/credentials.d.ts.map +1 -0
  308. package/dist/internal/cursor/credentials.js +329 -0
  309. package/dist/internal/cursor-event-relay.d.ts +111 -0
  310. package/dist/internal/cursor-event-relay.d.ts.map +1 -0
  311. package/dist/internal/cursor-event-relay.js +181 -0
  312. package/dist/internal/cursor-relay-core.d.ts +113 -0
  313. package/dist/internal/cursor-relay-core.d.ts.map +1 -0
  314. package/dist/internal/cursor-relay-core.js +364 -0
  315. package/dist/internal/cursor-slack-relay.d.ts +94 -0
  316. package/dist/internal/cursor-slack-relay.d.ts.map +1 -0
  317. package/dist/internal/cursor-slack-relay.js +171 -0
  318. package/dist/internal/describe-error.d.ts +3 -0
  319. package/dist/internal/describe-error.d.ts.map +1 -0
  320. package/dist/internal/describe-error.js +4 -0
  321. package/dist/internal/dev-mode.d.ts +13 -0
  322. package/dist/internal/dev-mode.d.ts.map +1 -0
  323. package/dist/internal/dev-mode.js +17 -0
  324. package/dist/internal/discovery.d.ts +55 -0
  325. package/dist/internal/discovery.d.ts.map +1 -0
  326. package/dist/internal/discovery.js +1427 -0
  327. package/dist/internal/distribution.d.ts +47 -0
  328. package/dist/internal/distribution.d.ts.map +1 -0
  329. package/dist/internal/distribution.js +82 -0
  330. package/dist/internal/docs-site.d.ts +28 -0
  331. package/dist/internal/docs-site.d.ts.map +1 -0
  332. package/dist/internal/docs-site.js +169 -0
  333. package/dist/internal/duration.d.ts +8 -0
  334. package/dist/internal/duration.d.ts.map +1 -0
  335. package/dist/internal/duration.js +35 -0
  336. package/dist/internal/eval-run-store.d.ts +81 -0
  337. package/dist/internal/eval-run-store.d.ts.map +1 -0
  338. package/dist/internal/eval-run-store.js +396 -0
  339. package/dist/internal/eval-runner.d.ts +76 -0
  340. package/dist/internal/eval-runner.d.ts.map +1 -0
  341. package/dist/internal/eval-runner.js +336 -0
  342. package/dist/internal/event-log.d.ts +51 -0
  343. package/dist/internal/event-log.d.ts.map +1 -0
  344. package/dist/internal/event-log.js +167 -0
  345. package/dist/internal/event-mapper.d.ts +46 -0
  346. package/dist/internal/event-mapper.d.ts.map +1 -0
  347. package/dist/internal/event-mapper.js +226 -0
  348. package/dist/internal/frontmatter.d.ts +12 -0
  349. package/dist/internal/frontmatter.d.ts.map +1 -0
  350. package/dist/internal/frontmatter.js +61 -0
  351. package/dist/internal/github-fanout.d.ts +32 -0
  352. package/dist/internal/github-fanout.d.ts.map +1 -0
  353. package/dist/internal/github-fanout.js +122 -0
  354. package/dist/internal/handleAgentServeTrigger.d.ts +59 -0
  355. package/dist/internal/handleAgentServeTrigger.d.ts.map +1 -0
  356. package/dist/internal/handleAgentServeTrigger.js +115 -0
  357. package/dist/internal/host-platforms.d.ts +40 -0
  358. package/dist/internal/host-platforms.d.ts.map +1 -0
  359. package/dist/internal/host-platforms.js +113 -0
  360. package/dist/internal/http-channel.d.ts +54 -0
  361. package/dist/internal/http-channel.d.ts.map +1 -0
  362. package/dist/internal/http-channel.js +382 -0
  363. package/dist/internal/ids.d.ts +19 -0
  364. package/dist/internal/ids.d.ts.map +1 -0
  365. package/dist/internal/ids.js +34 -0
  366. package/dist/internal/init-project.d.ts +22 -0
  367. package/dist/internal/init-project.d.ts.map +1 -0
  368. package/dist/internal/init-project.js +125 -0
  369. package/dist/internal/json-dir-store.d.ts +32 -0
  370. package/dist/internal/json-dir-store.d.ts.map +1 -0
  371. package/dist/internal/json-dir-store.js +100 -0
  372. package/dist/internal/json-schema.d.ts +18 -0
  373. package/dist/internal/json-schema.d.ts.map +1 -0
  374. package/dist/internal/json-schema.js +53 -0
  375. package/dist/internal/log-ring.d.ts +23 -0
  376. package/dist/internal/log-ring.d.ts.map +1 -0
  377. package/dist/internal/log-ring.js +42 -0
  378. package/dist/internal/map-pool.d.ts +6 -0
  379. package/dist/internal/map-pool.d.ts.map +1 -0
  380. package/dist/internal/map-pool.js +41 -0
  381. package/dist/internal/mcp-endpoint.d.ts +59 -0
  382. package/dist/internal/mcp-endpoint.d.ts.map +1 -0
  383. package/dist/internal/mcp-endpoint.js +355 -0
  384. package/dist/internal/mcp-host.d.ts +28 -0
  385. package/dist/internal/mcp-host.d.ts.map +1 -0
  386. package/dist/internal/mcp-host.js +162 -0
  387. package/dist/internal/net.d.ts +5 -0
  388. package/dist/internal/net.d.ts.map +1 -0
  389. package/dist/internal/net.js +30 -0
  390. package/dist/internal/peer-connections.d.ts +44 -0
  391. package/dist/internal/peer-connections.d.ts.map +1 -0
  392. package/dist/internal/peer-connections.js +67 -0
  393. package/dist/internal/playground/static.d.ts +35 -0
  394. package/dist/internal/playground/static.d.ts.map +1 -0
  395. package/dist/internal/playground/static.js +162 -0
  396. package/dist/internal/playground/toolchain.d.ts +57 -0
  397. package/dist/internal/playground/toolchain.d.ts.map +1 -0
  398. package/dist/internal/playground/toolchain.js +226 -0
  399. package/dist/internal/reminder-runner.d.ts +62 -0
  400. package/dist/internal/reminder-runner.d.ts.map +1 -0
  401. package/dist/internal/reminder-runner.js +582 -0
  402. package/dist/internal/reminder-schedule.d.ts +22 -0
  403. package/dist/internal/reminder-schedule.d.ts.map +1 -0
  404. package/dist/internal/reminder-schedule.js +82 -0
  405. package/dist/internal/reminder-store.d.ts +58 -0
  406. package/dist/internal/reminder-store.d.ts.map +1 -0
  407. package/dist/internal/reminder-store.js +106 -0
  408. package/dist/internal/resolved-connections.d.ts +41 -0
  409. package/dist/internal/resolved-connections.d.ts.map +1 -0
  410. package/dist/internal/resolved-connections.js +73 -0
  411. package/dist/internal/review-comments.d.ts +50 -0
  412. package/dist/internal/review-comments.d.ts.map +1 -0
  413. package/dist/internal/review-comments.js +194 -0
  414. package/dist/internal/router.d.ts +33 -0
  415. package/dist/internal/router.d.ts.map +1 -0
  416. package/dist/internal/router.js +93 -0
  417. package/dist/internal/run-client.d.ts +49 -0
  418. package/dist/internal/run-client.d.ts.map +1 -0
  419. package/dist/internal/run-client.js +208 -0
  420. package/dist/internal/schedule-runner.d.ts +31 -0
  421. package/dist/internal/schedule-runner.d.ts.map +1 -0
  422. package/dist/internal/schedule-runner.js +126 -0
  423. package/dist/internal/sdk-runner.d.ts +41 -0
  424. package/dist/internal/sdk-runner.d.ts.map +1 -0
  425. package/dist/internal/sdk-runner.js +221 -0
  426. package/dist/internal/server.d.ts +25 -0
  427. package/dist/internal/server.d.ts.map +1 -0
  428. package/dist/internal/server.js +1374 -0
  429. package/dist/internal/session-engine.d.ts +287 -0
  430. package/dist/internal/session-engine.d.ts.map +1 -0
  431. package/dist/internal/session-engine.js +1377 -0
  432. package/dist/internal/session-store.d.ts +29 -0
  433. package/dist/internal/session-store.d.ts.map +1 -0
  434. package/dist/internal/session-store.js +140 -0
  435. package/dist/internal/session-urls.d.ts +10 -0
  436. package/dist/internal/session-urls.d.ts.map +1 -0
  437. package/dist/internal/session-urls.js +25 -0
  438. package/dist/internal/stream-progress.d.ts +14 -0
  439. package/dist/internal/stream-progress.d.ts.map +1 -0
  440. package/dist/internal/stream-progress.js +195 -0
  441. package/dist/internal/tool-result.d.ts +20 -0
  442. package/dist/internal/tool-result.d.ts.map +1 -0
  443. package/dist/internal/tool-result.js +45 -0
  444. package/dist/internal/trajectory.d.ts +56 -0
  445. package/dist/internal/trajectory.d.ts.map +1 -0
  446. package/dist/internal/trajectory.js +248 -0
  447. package/dist/internal/workspace.d.ts +42 -0
  448. package/dist/internal/workspace.d.ts.map +1 -0
  449. package/dist/internal/workspace.js +199 -0
  450. package/dist/playground/assets/cursor-icons-outline-oY2V_mvK.woff2 +0 -0
  451. package/dist/playground/assets/index-1K-hG-7p.css +1 -0
  452. package/dist/playground/assets/index-FlWjhg3x.js +79 -0
  453. package/dist/playground/index.html +17 -0
  454. package/dist/reminders.d.ts +23 -0
  455. package/dist/reminders.d.ts.map +1 -0
  456. package/dist/reminders.js +22 -0
  457. package/dist/schedules.d.ts +23 -0
  458. package/dist/schedules.d.ts.map +1 -0
  459. package/dist/schedules.js +26 -0
  460. package/dist/skills.d.ts +22 -0
  461. package/dist/skills.d.ts.map +1 -0
  462. package/dist/skills.js +22 -0
  463. package/dist/tools.d.ts +92 -0
  464. package/dist/tools.d.ts.map +1 -0
  465. package/dist/tools.js +68 -0
  466. package/dist/types.d.ts +1609 -0
  467. package/dist/types.d.ts.map +1 -0
  468. package/dist/types.js +80 -0
  469. package/docs/README.md +174 -0
  470. package/docs/ab.md +355 -0
  471. package/docs/building-with-agents.md +129 -0
  472. package/docs/concepts.md +177 -0
  473. package/docs/deployment.md +218 -0
  474. package/docs/evals.md +383 -0
  475. package/docs/guides/agent-to-agent.md +118 -0
  476. package/docs/guides/cloud-runtime.md +122 -0
  477. package/docs/guides/github.md +172 -0
  478. package/docs/guides/human-in-the-loop.md +131 -0
  479. package/docs/guides/slack.md +245 -0
  480. package/docs/guides/webhooks.md +201 -0
  481. package/docs/hillclimbing.md +93 -0
  482. package/docs/quickstart.md +183 -0
  483. package/docs/reference/agent-config.md +154 -0
  484. package/docs/reference/channels.md +206 -0
  485. package/docs/reference/cli.md +257 -0
  486. package/docs/reference/connections.md +137 -0
  487. package/docs/reference/hooks.md +74 -0
  488. package/docs/reference/http-api.md +219 -0
  489. package/docs/reference/instructions.md +77 -0
  490. package/docs/reference/playground.md +67 -0
  491. package/docs/reference/project-layout.md +119 -0
  492. package/docs/reference/schedules.md +220 -0
  493. package/docs/reference/sessions.md +165 -0
  494. package/docs/reference/skills.md +79 -0
  495. package/docs/reference/subagents.md +74 -0
  496. package/docs/reference/tools.md +203 -0
  497. package/docs/scaffolding-agents.md +113 -0
  498. package/docs/troubleshooting.md +95 -0
  499. package/package.json +185 -0
  500. package/skills/ab/SKILL.md +139 -0
  501. package/skills/create-agent/SKILL.md +219 -0
  502. package/skills/debug/SKILL.md +71 -0
  503. package/skills/evals/SKILL.md +217 -0
  504. package/skills/framework-map/SKILL.md +142 -0
  505. package/skills/github/SKILL.md +144 -0
  506. package/skills/hillclimb/SKILL.md +162 -0
  507. package/skills/setup-slack/SKILL.md +180 -0
  508. package/src/ab.ts +675 -0
  509. package/src/bin/agent-serve.ts +949 -0
  510. package/src/channels/github/api.ts +374 -0
  511. package/src/channels/github/auth.ts +275 -0
  512. package/src/channels/github/binding.ts +223 -0
  513. package/src/channels/github/defaults.ts +111 -0
  514. package/src/channels/github/events.ts +72 -0
  515. package/src/channels/github/forward.ts +381 -0
  516. package/src/channels/github/github-channel.ts +2270 -0
  517. package/src/channels/github/index.ts +52 -0
  518. package/src/channels/github/replay.ts +387 -0
  519. package/src/channels/github/state.ts +95 -0
  520. package/src/channels/github/types.ts +490 -0
  521. package/src/channels/slack/api.ts +580 -0
  522. package/src/channels/slack/approvals.ts +198 -0
  523. package/src/channels/slack/assistant.ts +76 -0
  524. package/src/channels/slack/auth.ts +112 -0
  525. package/src/channels/slack/channel-watch.ts +219 -0
  526. package/src/channels/slack/constants.ts +30 -0
  527. package/src/channels/slack/credentials.ts +90 -0
  528. package/src/channels/slack/cursor-account.ts +166 -0
  529. package/src/channels/slack/defaults.ts +450 -0
  530. package/src/channels/slack/dispatch.ts +293 -0
  531. package/src/channels/slack/doctor.ts +135 -0
  532. package/src/channels/slack/event-id-dedupe.ts +30 -0
  533. package/src/channels/slack/inbound.ts +219 -0
  534. package/src/channels/slack/index.ts +45 -0
  535. package/src/channels/slack/init.ts +133 -0
  536. package/src/channels/slack/interactive.ts +194 -0
  537. package/src/channels/slack/links.ts +23 -0
  538. package/src/channels/slack/live-delivery.ts +201 -0
  539. package/src/channels/slack/log.ts +83 -0
  540. package/src/channels/slack/manifest.ts +179 -0
  541. package/src/channels/slack/pr-ref.ts +50 -0
  542. package/src/channels/slack/setup.ts +97 -0
  543. package/src/channels/slack/slack-channel.ts +374 -0
  544. package/src/channels/slack/socket-mode.ts +154 -0
  545. package/src/channels/slack/stream.ts +63 -0
  546. package/src/channels/slack/tool-approval-events.ts +136 -0
  547. package/src/channels/slack/types.ts +349 -0
  548. package/src/channels.ts +385 -0
  549. package/src/connections.ts +89 -0
  550. package/src/evals.ts +501 -0
  551. package/src/hooks.ts +33 -0
  552. package/src/index.ts +184 -0
  553. package/src/internal/ab-collector.ts +210 -0
  554. package/src/internal/ab-fold.ts +228 -0
  555. package/src/internal/ab-snapshot.ts +335 -0
  556. package/src/internal/approval-gate.ts +115 -0
  557. package/src/internal/auth.ts +39 -0
  558. package/src/internal/authored-alias-hooks.ts +69 -0
  559. package/src/internal/authored-loaders.ts +138 -0
  560. package/src/internal/bounded-int.ts +27 -0
  561. package/src/internal/brand.ts +29 -0
  562. package/src/internal/chat-client.ts +407 -0
  563. package/src/internal/cli-ax.ts +474 -0
  564. package/src/internal/cli-cursor.ts +275 -0
  565. package/src/internal/cli-github.ts +849 -0
  566. package/src/internal/cli-slack.ts +175 -0
  567. package/src/internal/cloud-merge.ts +41 -0
  568. package/src/internal/cron.ts +78 -0
  569. package/src/internal/cursor/account-mcp.ts +472 -0
  570. package/src/internal/cursor/backend-client.ts +614 -0
  571. package/src/internal/cursor/credentials.ts +401 -0
  572. package/src/internal/cursor-event-relay.ts +281 -0
  573. package/src/internal/cursor-relay-core.ts +444 -0
  574. package/src/internal/cursor-slack-relay.ts +242 -0
  575. package/src/internal/describe-error.ts +4 -0
  576. package/src/internal/dev-mode.ts +20 -0
  577. package/src/internal/discovery.ts +1709 -0
  578. package/src/internal/distribution.ts +97 -0
  579. package/src/internal/docs-site.ts +191 -0
  580. package/src/internal/duration.ts +39 -0
  581. package/src/internal/eval-run-store.ts +519 -0
  582. package/src/internal/eval-runner.ts +522 -0
  583. package/src/internal/event-log.ts +175 -0
  584. package/src/internal/event-mapper.ts +272 -0
  585. package/src/internal/frontmatter.ts +77 -0
  586. package/src/internal/github-fanout.ts +159 -0
  587. package/src/internal/handleAgentServeTrigger.ts +156 -0
  588. package/src/internal/host-platforms.ts +144 -0
  589. package/src/internal/http-channel.ts +546 -0
  590. package/src/internal/ids.ts +44 -0
  591. package/src/internal/init-project.ts +165 -0
  592. package/src/internal/json-dir-store.ts +109 -0
  593. package/src/internal/json-schema.ts +69 -0
  594. package/src/internal/log-ring.ts +59 -0
  595. package/src/internal/map-pool.ts +32 -0
  596. package/src/internal/mcp-endpoint.ts +518 -0
  597. package/src/internal/mcp-host.ts +211 -0
  598. package/src/internal/net.ts +31 -0
  599. package/src/internal/peer-connections.ts +100 -0
  600. package/src/internal/playground/static.ts +189 -0
  601. package/src/internal/playground/toolchain.ts +277 -0
  602. package/src/internal/reminder-runner.ts +756 -0
  603. package/src/internal/reminder-schedule.ts +106 -0
  604. package/src/internal/reminder-store.ts +145 -0
  605. package/src/internal/resolved-connections.ts +145 -0
  606. package/src/internal/review-comments.ts +268 -0
  607. package/src/internal/router.ts +145 -0
  608. package/src/internal/run-client.ts +320 -0
  609. package/src/internal/schedule-runner.ts +161 -0
  610. package/src/internal/sdk-runner.ts +315 -0
  611. package/src/internal/server.ts +1737 -0
  612. package/src/internal/session-engine.ts +1810 -0
  613. package/src/internal/session-store.ts +147 -0
  614. package/src/internal/session-urls.ts +40 -0
  615. package/src/internal/stream-progress.ts +254 -0
  616. package/src/internal/tool-result.ts +54 -0
  617. package/src/internal/trajectory.ts +306 -0
  618. package/src/internal/workspace.ts +223 -0
  619. package/src/reminders.ts +35 -0
  620. package/src/schedules.ts +37 -0
  621. package/src/skills.ts +27 -0
  622. package/src/tools.ts +127 -0
  623. package/src/types.ts +1848 -0
@@ -0,0 +1,345 @@
1
+ /**
2
+ * Agent-experience CLI commands:
3
+ * init / run / trajectory / eval
4
+ *
5
+ * Coding agents get JSON-first output, ephemeral local servers, and
6
+ * filesystem-first evals under evals/ (*.eval.ts). Live A/B metrics
7
+ * (`defineAB` under `agent/ab`) plug into serve — there is no `ab` CLI.
8
+ */
9
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
10
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
11
+ return new (P || (P = Promise))(function (resolve, reject) {
12
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
13
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
14
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
15
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
16
+ });
17
+ };
18
+ import { mkdir, mkdtemp, writeFile } from "node:fs/promises";
19
+ import { tmpdir } from "node:os";
20
+ import { join, resolve } from "node:path";
21
+ import { serve } from "../index.js";
22
+ import { CLI_COMMAND_NAME } from "./distribution.js";
23
+ import { discoverEvals, filterDiscoveredEvals, runDiscoveredEvals, } from "./eval-runner.js";
24
+ import { initProject, printInitGuide } from "./init-project.js";
25
+ import { runSession } from "./run-client.js";
26
+ import { createStreamProgress } from "./stream-progress.js";
27
+ import { formatTrajectoryText, loadTrajectoryFromEventsFile, } from "./trajectory.js";
28
+ function shouldStreamProgress(options) {
29
+ if (options.stream === false) {
30
+ return false;
31
+ }
32
+ if (options.stream === true) {
33
+ return true;
34
+ }
35
+ return process.stderr.isTTY === true;
36
+ }
37
+ function die(message) {
38
+ process.stderr.write(`${message}\n`);
39
+ process.exit(1);
40
+ }
41
+ function pickAgentUrl(handle, slug) {
42
+ if (handle.agents.length === 0) {
43
+ die("No agents discovered.");
44
+ }
45
+ if (slug !== undefined && slug !== "") {
46
+ const match = handle.agents.find((a) => a.slug === slug);
47
+ if (match === undefined) {
48
+ die(`Unknown agent slug "${slug}". Available: ${handle.agents
49
+ .map((a) => a.slug || "(root)")
50
+ .join(", ")}`);
51
+ }
52
+ return match.url;
53
+ }
54
+ const root = handle.agents.find((a) => a.slug === "");
55
+ return (root !== null && root !== void 0 ? root : handle.agents[0]).url;
56
+ }
57
+ function startEphemeral(options) {
58
+ return __awaiter(this, void 0, void 0, function* () {
59
+ var _a, _b;
60
+ const dir = resolve((_a = options.cwd) !== null && _a !== void 0 ? _a : process.cwd(), options.dir);
61
+ const stateRoot = (_b = options.stateRoot) !== null && _b !== void 0 ? _b : (yield mkdtemp(join(tmpdir(), "agent-serve-ax-")));
62
+ const handle = yield serve(dir, Object.assign({ host: "127.0.0.1", port: 0, stateRoot, playground: false, schedules: false,
63
+ // Keep host/tool timing off stdout so `run`/`eval` JSON stays clean.
64
+ logger: (line) => {
65
+ process.stderr.write(`${line}\n`);
66
+ } }, (options.bearerToken === undefined
67
+ ? {}
68
+ : { authToken: options.bearerToken })));
69
+ return {
70
+ agentUrl: pickAgentUrl(handle, options.slug),
71
+ close: () => __awaiter(this, void 0, void 0, function* () {
72
+ // engine.close() can hang on open SDK streams; don't block the CLI.
73
+ yield Promise.race([
74
+ handle.close(),
75
+ new Promise((resolve) => setTimeout(resolve, 2000)),
76
+ ]);
77
+ }),
78
+ };
79
+ });
80
+ }
81
+ function resolveTarget(options) {
82
+ return __awaiter(this, void 0, void 0, function* () {
83
+ if (options.url !== undefined) {
84
+ return { agentUrl: options.url.replace(/\/$/, "") };
85
+ }
86
+ return startEphemeral(options);
87
+ });
88
+ }
89
+ export function cmdInit(options) {
90
+ return __awaiter(this, void 0, void 0, function* () {
91
+ var _a;
92
+ const target = options.initTarget;
93
+ if (target === undefined || target === "") {
94
+ printInitGuide();
95
+ return 0;
96
+ }
97
+ const dir = resolve((_a = options.cwd) !== null && _a !== void 0 ? _a : process.cwd(), target);
98
+ const result = yield initProject({ dir });
99
+ process.stdout.write(`${JSON.stringify({
100
+ ok: true,
101
+ directory: result.rootDir,
102
+ created: result.files,
103
+ next: [
104
+ `cd ${dir === process.cwd() ? "." : dir}`,
105
+ `${CLI_COMMAND_NAME} validate`,
106
+ `${CLI_COMMAND_NAME} info --json`,
107
+ `${CLI_COMMAND_NAME} run --message "hello"`,
108
+ `${CLI_COMMAND_NAME} eval`,
109
+ ],
110
+ }, null, 2)}\n`);
111
+ return 0;
112
+ });
113
+ }
114
+ export function cmdRun(options) {
115
+ return __awaiter(this, void 0, void 0, function* () {
116
+ var _a, _b, _c;
117
+ const messages = (_a = options.messages) !== null && _a !== void 0 ? _a : [];
118
+ if (messages.length === 0) {
119
+ die("Provide --message (repeatable) or --messages-file");
120
+ }
121
+ const stream = shouldStreamProgress(options);
122
+ const progress = stream ? createStreamProgress() : undefined;
123
+ const target = yield resolveTarget(options);
124
+ try {
125
+ if (stream) {
126
+ process.stderr.write(`→ ${target.agentUrl}\n`);
127
+ }
128
+ const result = yield runSession(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ baseUrl: target.agentUrl, messages }, (options.sessionId === undefined
129
+ ? {}
130
+ : { sessionId: options.sessionId })), (options.continuationToken === undefined
131
+ ? {}
132
+ : { continuationToken: options.continuationToken })), (options.bearerToken === undefined
133
+ ? {}
134
+ : { bearerToken: options.bearerToken })), (options.timeoutMs === undefined
135
+ ? {}
136
+ : { timeoutMs: options.timeoutMs })), (progress === undefined
137
+ ? {}
138
+ : { onEvent: (e) => progress.onEvent(e) })));
139
+ let eventsPath;
140
+ const writeEvents = options.events !== false;
141
+ if (writeEvents) {
142
+ if (typeof options.events === "string") {
143
+ eventsPath = resolve(options.events);
144
+ }
145
+ else {
146
+ const root = resolve((_b = options.cwd) !== null && _b !== void 0 ? _b : process.cwd(), options.dir);
147
+ const tracesDir = join(root, ".agent-serve", "traces");
148
+ yield mkdir(tracesDir, { recursive: true });
149
+ eventsPath = join(tracesDir, `${result.sessionId}.ndjson`);
150
+ }
151
+ yield writeFile(eventsPath, `${result.events.map((e) => JSON.stringify(e)).join("\n")}\n`, "utf8");
152
+ }
153
+ const playgroundUrl = options.url !== undefined
154
+ ? `${target.agentUrl.replace(/\/$/, "")}/playground?sessionId=${encodeURIComponent(result.sessionId)}`
155
+ : null;
156
+ if (options.text) {
157
+ process.stdout.write(formatTrajectoryText(result.trajectory));
158
+ if (eventsPath !== undefined) {
159
+ process.stderr.write(`\ntrace: ${eventsPath}\n`);
160
+ }
161
+ if (playgroundUrl !== null) {
162
+ process.stderr.write(`playground: ${playgroundUrl}\n`);
163
+ }
164
+ }
165
+ else {
166
+ console.log(JSON.stringify({
167
+ ok: result.ok,
168
+ sessionId: result.sessionId,
169
+ continuationToken: (_c = result.continuationToken) !== null && _c !== void 0 ? _c : null,
170
+ trace: eventsPath !== null && eventsPath !== void 0 ? eventsPath : null,
171
+ playgroundUrl,
172
+ visualize: playgroundUrl !== null
173
+ ? `Open ${playgroundUrl}`
174
+ : eventsPath !== undefined
175
+ ? `Start the playground (${CLI_COMMAND_NAME} serve --dir ${options.dir}), then Open trace → ${eventsPath}`
176
+ : null,
177
+ trajectory: result.trajectory,
178
+ }, null, 2));
179
+ }
180
+ return result.ok ? 0 : 1;
181
+ }
182
+ finally {
183
+ progress === null || progress === void 0 ? void 0 : progress.close();
184
+ if (target.close !== undefined) {
185
+ yield target.close();
186
+ }
187
+ }
188
+ });
189
+ }
190
+ /**
191
+ * `agent-serve call <tool>` — deterministic tool invocation over
192
+ * `POST /v1/tools/:toolName` (ephemeral local server unless --url).
193
+ */
194
+ export function cmdCall(options) {
195
+ return __awaiter(this, void 0, void 0, function* () {
196
+ const toolName = options.toolName;
197
+ if (toolName === undefined || toolName === "") {
198
+ die(`Provide a tool name: ${CLI_COMMAND_NAME} call <tool> [--input '{...}']`);
199
+ }
200
+ let input = {};
201
+ if (options.toolInput !== undefined) {
202
+ try {
203
+ input = JSON.parse(options.toolInput);
204
+ }
205
+ catch (error) {
206
+ die(`--input must be valid JSON: ${error instanceof Error ? error.message : String(error)}`);
207
+ }
208
+ }
209
+ const target = yield resolveTarget(options);
210
+ try {
211
+ const response = yield fetch(`${target.agentUrl}/v1/tools/${encodeURIComponent(toolName)}`, {
212
+ method: "POST",
213
+ headers: Object.assign({ "content-type": "application/json" }, (options.bearerToken === undefined
214
+ ? {}
215
+ : { authorization: `Bearer ${options.bearerToken}` })),
216
+ body: JSON.stringify(Object.assign({ input }, (options.sessionId === undefined
217
+ ? {}
218
+ : { sessionId: options.sessionId }))),
219
+ });
220
+ const payload = yield response
221
+ .json()
222
+ .catch(() => ({ ok: false, error: "invalid_response" }));
223
+ console.log(JSON.stringify(payload, null, 2));
224
+ const ok = response.ok &&
225
+ typeof payload === "object" &&
226
+ payload !== null &&
227
+ payload.ok === true;
228
+ return ok ? 0 : 1;
229
+ }
230
+ finally {
231
+ if (target.close !== undefined) {
232
+ yield target.close();
233
+ }
234
+ }
235
+ });
236
+ }
237
+ export function cmdTrajectory(options) {
238
+ return __awaiter(this, void 0, void 0, function* () {
239
+ if (typeof options.events !== "string") {
240
+ die(`trajectory requires --events <file.ndjson> (write one with: ${CLI_COMMAND_NAME} run --events …)`);
241
+ }
242
+ const trajectory = yield loadTrajectoryFromEventsFile(resolve(options.events));
243
+ if (options.text) {
244
+ process.stdout.write(formatTrajectoryText(trajectory));
245
+ }
246
+ else {
247
+ console.log(JSON.stringify(trajectory, null, 2));
248
+ }
249
+ return trajectory.ok ? 0 : 1;
250
+ });
251
+ }
252
+ export function cmdEval(options) {
253
+ return __awaiter(this, void 0, void 0, function* () {
254
+ var _a;
255
+ const projectRoot = resolve((_a = options.cwd) !== null && _a !== void 0 ? _a : process.cwd(), options.dir);
256
+ if (options.list) {
257
+ const { evals } = yield discoverEvals(projectRoot);
258
+ const listed = filterDiscoveredEvals(evals, {
259
+ filterIds: options.evalIds,
260
+ tags: options.tags,
261
+ });
262
+ if (options.json) {
263
+ console.log(JSON.stringify(listed.map((e) => { var _a; return ({
264
+ id: e.id,
265
+ fileId: e.fileId,
266
+ path: e.path,
267
+ description: e.definition.description,
268
+ tags: (_a = e.definition.tags) !== null && _a !== void 0 ? _a : [],
269
+ }); }), null, 2));
270
+ }
271
+ else if (listed.length === 0) {
272
+ process.stdout.write(`No evals under ${projectRoot}/evals\n`);
273
+ }
274
+ else {
275
+ for (const e of listed) {
276
+ const tags = e.definition.tags && e.definition.tags.length > 0
277
+ ? ` [${e.definition.tags.join(", ")}]`
278
+ : "";
279
+ const desc = e.definition.description !== undefined
280
+ ? ` — ${e.definition.description}`
281
+ : "";
282
+ process.stdout.write(`${e.id}${tags}${desc}\n`);
283
+ }
284
+ }
285
+ return 0;
286
+ }
287
+ const target = yield resolveTarget(options);
288
+ const stream = shouldStreamProgress(options);
289
+ const progress = stream ? createStreamProgress() : undefined;
290
+ try {
291
+ if (options.verbose || stream) {
292
+ process.stderr.write(`eval target: ${target.agentUrl}\n`);
293
+ }
294
+ const results = yield runDiscoveredEvals(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ projectRoot, baseUrl: target.agentUrl }, (options.evalIds === undefined || options.evalIds.length === 0
295
+ ? {}
296
+ : { filterIds: options.evalIds })), (options.tags === undefined || options.tags.length === 0
297
+ ? {}
298
+ : { tags: options.tags })), (options.timeoutMs === undefined
299
+ ? {}
300
+ : { timeoutMs: options.timeoutMs })), (options.bearerToken === undefined
301
+ ? {}
302
+ : { bearerToken: options.bearerToken })), { verbose: Boolean(options.verbose) || stream }), (progress === undefined
303
+ ? {}
304
+ : { onEvent: (e) => progress.onEvent(e) })));
305
+ if (results.length === 0) {
306
+ process.stderr.write("No matching evals found.\n");
307
+ return 2;
308
+ }
309
+ return printEvalResults(results, options);
310
+ }
311
+ finally {
312
+ progress === null || progress === void 0 ? void 0 : progress.close();
313
+ if (target.close !== undefined) {
314
+ yield target.close();
315
+ }
316
+ }
317
+ });
318
+ }
319
+ function printEvalResults(results, options) {
320
+ const passed = results.filter((r) => r.ok).length;
321
+ const failed = results.length - passed;
322
+ if (options.json) {
323
+ console.log(JSON.stringify({ ok: failed === 0, passed, failed, results }, null, 2));
324
+ }
325
+ else {
326
+ for (const r of results) {
327
+ process.stdout.write(`${r.ok ? "PASS" : "FAIL"} ${r.id} (${(r.durationMs / 1000).toFixed(1)}s)`);
328
+ if (r.description !== undefined) {
329
+ process.stdout.write(` — ${r.description}`);
330
+ }
331
+ process.stdout.write("\n");
332
+ for (const a of r.assertions) {
333
+ process.stdout.write(` ${a.passed ? "✓" : "✗"} ${a.name}${a.detail !== undefined ? ` (${a.detail})` : ""}\n`);
334
+ }
335
+ if (r.error !== undefined) {
336
+ process.stdout.write(` error: ${r.error}\n`);
337
+ }
338
+ if (options.verbose && r.finalText !== undefined) {
339
+ process.stdout.write(` reply: ${r.finalText.slice(0, 200).replace(/\s+/g, " ")}\n`);
340
+ }
341
+ }
342
+ process.stdout.write(`\n${passed} passed, ${failed} failed, ${results.length} total\n`);
343
+ }
344
+ return failed === 0 ? 0 : 1;
345
+ }
@@ -0,0 +1,20 @@
1
+ /**
2
+ * `agent-serve login | logout | whoami` — the Cursor account CLI.
3
+ *
4
+ * `login` runs the same PKCE browser flow as `cursor-agent`, then uses the
5
+ * short-lived session exactly once to mint a named, dashboard-revocable
6
+ * user API key. Only the key is stored (see `../cursor/credentials.ts`);
7
+ * everything on the host — inference, cloud runtime, account MCP
8
+ * connections — flows from it.
9
+ */
10
+ export interface CursorCliOptions {
11
+ /** `login --api-key <key>`: store this key instead of browser login. */
12
+ apiKey?: string;
13
+ /** `login --key-name <name>`: label for the minted key. */
14
+ keyName?: string;
15
+ json?: boolean;
16
+ }
17
+ export declare function cmdLogin(options: CursorCliOptions): Promise<number>;
18
+ export declare function cmdLogout(): Promise<number>;
19
+ export declare function cmdWhoami(options: CursorCliOptions): Promise<number>;
20
+ //# sourceMappingURL=cli-cursor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-cursor.d.ts","sourceRoot":"","sources":["../../src/internal/cli-cursor.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AA0BH,MAAM,WAAW,gBAAgB;IAC/B,wEAAwE;IACxE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2DAA2D;IAC3D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAsB,QAAQ,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CA+FzE;AAED,wBAAsB,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAWjD;AAED,wBAAsB,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAuC1E"}
@@ -0,0 +1,227 @@
1
+ /**
2
+ * `agent-serve login | logout | whoami` — the Cursor account CLI.
3
+ *
4
+ * `login` runs the same PKCE browser flow as `cursor-agent`, then uses the
5
+ * short-lived session exactly once to mint a named, dashboard-revocable
6
+ * user API key. Only the key is stored (see `../cursor/credentials.ts`);
7
+ * everything on the host — inference, cloud runtime, account MCP
8
+ * connections — flows from it.
9
+ */
10
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
11
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
12
+ return new (P || (P = Promise))(function (resolve, reject) {
13
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
14
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
15
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
16
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
17
+ });
18
+ };
19
+ import { spawn } from "node:child_process";
20
+ import { hostname } from "node:os";
21
+ import { join } from "node:path";
22
+ import { CursorBackendClient, CursorBackendError, createUserApiKeyWithSessionToken, revokeMintedUserApiKey, } from "./cursor/backend-client.js";
23
+ import { clearStoredCredentials, credentialsFilePath, cursorBackendUrl, pollForLoginTokens, readStoredCredentials, resolveApiKey, SIGN_IN_HINT, startBrowserLogin, writeStoredCredentials, } from "./cursor/credentials.js";
24
+ import { CLI_COMMAND_NAME } from "./distribution.js";
25
+ export function cmdLogin(options) {
26
+ return __awaiter(this, void 0, void 0, function* () {
27
+ var _a;
28
+ const backendUrl = cursorBackendUrl();
29
+ let apiKey;
30
+ // Set only on the browser-mint path; carries what the revoke-on-failure
31
+ // cleanup needs (the session token that minted the key + its label).
32
+ let minted;
33
+ if (options.apiKey !== undefined && options.apiKey.trim() !== "") {
34
+ // Headless path: the operator brings a key (dashboard → Integrations).
35
+ apiKey = options.apiKey.trim();
36
+ }
37
+ else {
38
+ const { loginUrl, uuid, verifier } = startBrowserLogin();
39
+ process.stderr.write(`Opening your browser to sign in to Cursor…\n\n ${loginUrl}\n\n(waiting for the browser sign-in to complete)\n`);
40
+ openBrowser(loginUrl);
41
+ const login = yield pollForLoginTokens({
42
+ uuid,
43
+ verifier,
44
+ backendUrl,
45
+ logger: (line) => process.stderr.write(`warning: ${line}\n`),
46
+ });
47
+ if (login.status !== "signed_in") {
48
+ process.stderr.write(`${describeLoginPollFailure(login)}\n`);
49
+ return 1;
50
+ }
51
+ const requestedKeyName = (_a = options.keyName) === null || _a === void 0 ? void 0 : _a.trim();
52
+ const keyName = requestedKeyName === undefined || requestedKeyName === ""
53
+ ? `${CLI_COMMAND_NAME} (${hostname()})`
54
+ : requestedKeyName;
55
+ try {
56
+ apiKey = yield createUserApiKeyWithSessionToken({
57
+ backendUrl,
58
+ sessionToken: login.accessToken,
59
+ keyName,
60
+ });
61
+ }
62
+ catch (error) {
63
+ if (error instanceof CursorBackendError && error.status === 401) {
64
+ // Team policy: non-admin members may be blocked from minting keys.
65
+ process.stderr.write(`${error.message}\nYour team may restrict API key creation. Ask a team admin, or run \`${CLI_COMMAND_NAME} login --api-key <key>\` with a key from the Cursor dashboard.\n`);
66
+ return 1;
67
+ }
68
+ throw error;
69
+ }
70
+ minted = { keyName, sessionToken: login.accessToken };
71
+ process.stderr.write(`Minted the "${keyName}" API key.\n`);
72
+ }
73
+ // Revoke the just-minted key when a later step fails, so a botched login
74
+ // never leaves an orphaned live credential (no-op on the headless path).
75
+ const rollbackMintedKey = () => __awaiter(this, void 0, void 0, function* () {
76
+ if (minted !== undefined) {
77
+ yield revokeMintedUserApiKey({
78
+ backendUrl,
79
+ keyName: minted.keyName,
80
+ apiKey,
81
+ sessionToken: minted.sessionToken,
82
+ }).catch(() => { });
83
+ }
84
+ });
85
+ // Prove the credential end-to-end (exchange + GetMe) before storing it.
86
+ const client = new CursorBackendClient({ backendUrl, apiKey });
87
+ let identity;
88
+ try {
89
+ identity = yield client.getMe();
90
+ }
91
+ catch (error) {
92
+ yield rollbackMintedKey();
93
+ process.stderr.write(`The API key did not authenticate against ${backendUrl}: ${describeError(error)}\n`);
94
+ return 1;
95
+ }
96
+ try {
97
+ yield writeStoredCredentials({ backendUrl, apiKey });
98
+ }
99
+ catch (error) {
100
+ yield rollbackMintedKey();
101
+ process.stderr.write(`Could not store credentials at ${credentialsFilePath()}: ${describeError(error)}\n`);
102
+ return 1;
103
+ }
104
+ process.stdout.write(`Signed in as ${formatIdentity(identity)} (${backendUrl})\nCredentials stored at ${credentialsFilePath()}\n`);
105
+ if (process.env.CURSOR_API_KEY !== undefined) {
106
+ process.stderr.write("note: CURSOR_API_KEY is set in this shell and takes precedence over the stored login.\n");
107
+ }
108
+ return 0;
109
+ });
110
+ }
111
+ export function cmdLogout() {
112
+ return __awaiter(this, void 0, void 0, function* () {
113
+ const stored = yield readStoredCredentials();
114
+ const removed = yield clearStoredCredentials();
115
+ if (!removed || stored === undefined) {
116
+ process.stdout.write("No stored Cursor credentials.\n");
117
+ return 0;
118
+ }
119
+ process.stdout.write(`Signed out (removed ${credentialsFilePath()}). The API key still exists — revoke it in the Cursor dashboard if it should stop working.\n`);
120
+ return 0;
121
+ });
122
+ }
123
+ export function cmdWhoami(options) {
124
+ return __awaiter(this, void 0, void 0, function* () {
125
+ var _a, _b, _c;
126
+ const resolved = yield resolveApiKey();
127
+ if (resolved === undefined) {
128
+ process.stderr.write(`Not signed in to Cursor. ${SIGN_IN_HINT}\n`);
129
+ return 1;
130
+ }
131
+ const client = new CursorBackendClient({
132
+ backendUrl: resolved.backendUrl,
133
+ apiKey: resolved.apiKey,
134
+ });
135
+ let identity;
136
+ try {
137
+ identity = yield client.getMe();
138
+ }
139
+ catch (error) {
140
+ process.stderr.write(`The ${describeSource(resolved.source)} did not authenticate against ${resolved.backendUrl}: ${describeError(error)}\n`);
141
+ return 1;
142
+ }
143
+ if (options.json === true) {
144
+ process.stdout.write(`${JSON.stringify({
145
+ email: (_a = identity.email) !== null && _a !== void 0 ? _a : null,
146
+ authId: (_b = identity.authId) !== null && _b !== void 0 ? _b : null,
147
+ teamName: (_c = identity.teamName) !== null && _c !== void 0 ? _c : null,
148
+ backendUrl: resolved.backendUrl,
149
+ credentialSource: resolved.source,
150
+ }, null, 2)}\n`);
151
+ return 0;
152
+ }
153
+ process.stdout.write(`${formatIdentity(identity)}\n backend: ${resolved.backendUrl}\n credential: ${describeSource(resolved.source)}\n`);
154
+ return 0;
155
+ });
156
+ }
157
+ function formatIdentity(identity) {
158
+ var _a, _b;
159
+ const name = [identity.firstName, identity.lastName]
160
+ .filter((part) => part !== undefined && part !== "")
161
+ .join(" ");
162
+ const email = (_b = (_a = identity.email) !== null && _a !== void 0 ? _a : identity.authId) !== null && _b !== void 0 ? _b : "(unknown user)";
163
+ const team = identity.teamName === undefined ? "" : ` — team ${identity.teamName}`;
164
+ return name === "" ? `${email}${team}` : `${name} <${email}>${team}`;
165
+ }
166
+ function describeSource(source) {
167
+ switch (source) {
168
+ case "option":
169
+ return "explicit --api-key / serve({ apiKey })";
170
+ case "env":
171
+ return "CURSOR_API_KEY environment variable";
172
+ case "login":
173
+ return `stored login (${credentialsFilePath()})`;
174
+ }
175
+ }
176
+ /**
177
+ * Never report a backend failure as a timeout: a wrong-verb poll used to print
178
+ * "Login timed out or was cancelled" ~200ms in, which reads as "you were too
179
+ * slow" and hides the actual 404.
180
+ */
181
+ function describeLoginPollFailure(result) {
182
+ switch (result.status) {
183
+ case "cancelled":
184
+ return "Login cancelled.";
185
+ case "timed_out":
186
+ return `Login timed out — the browser sign-in was never completed. Run \`${CLI_COMMAND_NAME} login\` to try again.`;
187
+ case "failed":
188
+ return [
189
+ `Login failed: ${result.message}`,
190
+ "This is not a timeout — the sign-in never got a chance to complete.",
191
+ `Sign in without the browser flow with \`${CLI_COMMAND_NAME} login --api-key <key>\` (Cursor dashboard → Integrations).`,
192
+ ].join("\n");
193
+ }
194
+ }
195
+ /** Best-effort browser open; the URL is always printed as the fallback. */
196
+ function openBrowser(url) {
197
+ var _a;
198
+ const command = process.platform === "darwin"
199
+ ? { cmd: "open", args: [url] }
200
+ : process.platform === "win32"
201
+ ? {
202
+ cmd: join((_a = process.env.SYSTEMROOT) !== null && _a !== void 0 ? _a : "C:\\Windows", "System32", "WindowsPowerShell", "v1.0", "powershell.exe"),
203
+ args: [
204
+ "-NoProfile",
205
+ "-NonInteractive",
206
+ "-WindowStyle",
207
+ "Hidden",
208
+ "-Command",
209
+ `Start-Process '${url.replace(/'/g, "''")}'`,
210
+ ],
211
+ }
212
+ : { cmd: "xdg-open", args: [url] };
213
+ try {
214
+ const child = spawn(command.cmd, command.args, {
215
+ stdio: "ignore",
216
+ detached: true,
217
+ });
218
+ child.on("error", () => { });
219
+ child.unref();
220
+ }
221
+ catch (_b) {
222
+ // The printed URL is the fallback.
223
+ }
224
+ }
225
+ function describeError(error) {
226
+ return error instanceof Error ? error.message : String(error);
227
+ }
@@ -0,0 +1,47 @@
1
+ /**
2
+ * `agent-serve github …` CLI — forward live GitHub webhooks to a locally
3
+ * served agent via the `cli/gh-webhook` extension, plus a doctor and an
4
+ * events lister.
5
+ *
6
+ * @see https://docs.github.com/en/webhooks/testing-and-troubleshooting-webhooks/using-the-github-cli-to-forward-webhooks-for-testing
7
+ */
8
+ export interface GithubCliOptions {
9
+ dir: string;
10
+ /** Select one agent mount by slug. */
11
+ slug?: string;
12
+ /** Select one channel id (when an agent has several GitHub channels). */
13
+ channel?: string;
14
+ /** Local server host (default 127.0.0.1). */
15
+ host?: string;
16
+ /** Local server port (default 3000). */
17
+ port?: number;
18
+ /** Explicit forward URL (skips URL derivation). */
19
+ url?: string;
20
+ /** Comma/space-separated event override. */
21
+ events?: string;
22
+ /** `owner/repo` to forward from. */
23
+ repo?: string;
24
+ /** Organization login (org-level hooks). */
25
+ org?: string;
26
+ /** Webhook signing secret (defaults to GITHUB_WEBHOOK_SECRET). */
27
+ secret?: string;
28
+ /** Install the `cli/gh-webhook` extension if missing. */
29
+ install?: boolean;
30
+ json?: boolean;
31
+ /** replay: PR URL or `owner/repo#N`. */
32
+ prUrl?: string;
33
+ /** replay: override the event action (e.g. opened, synchronize). */
34
+ action?: string;
35
+ /** replay: CI conclusion for check_run/check_suite/workflow_run. */
36
+ conclusion?: string;
37
+ /** replay: commit-status context. */
38
+ context?: string;
39
+ /** replay: comment body for issue_comment / review comment. */
40
+ comment?: string;
41
+ /** replay: print synthesized payloads instead of POSTing. */
42
+ dryRun?: boolean;
43
+ /** replay: write synthesized payloads as fixtures into this dir. */
44
+ out?: string;
45
+ }
46
+ export declare function cmdGithub(subcommand: string | undefined, options: GithubCliOptions): Promise<number>;
47
+ //# sourceMappingURL=cli-github.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-github.d.ts","sourceRoot":"","sources":["../../src/internal/cli-github.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA6CH,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,sCAAsC;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,yEAAyE;IACzE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6CAA6C;IAC7C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,wCAAwC;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mDAAmD;IACnD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,4CAA4C;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oCAAoC;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,4CAA4C;IAC5C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,kEAAkE;IAClE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yDAAyD;IACzD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,wCAAwC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oEAAoE;IACpE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oEAAoE;IACpE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qCAAqC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+DAA+D;IAC/D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6DAA6D;IAC7D,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,oEAAoE;IACpE,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAgDD,wBAAsB,SAAS,CAC7B,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,MAAM,CAAC,CAqBjB"}