@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,101 @@
1
+ /**
2
+ * GitHub REST helpers backed by `@octokit/rest`.
3
+ *
4
+ * Channel hooks should prefer `ctx.github` / `ctx.thread`. Use
5
+ * {@link createGitHubOctokit} (or `ctx.github.getOctokit()`) when you need
6
+ * typed Octokit methods directly.
7
+ */
8
+ import { Octokit } from "@octokit/rest";
9
+ import { type GitHubAuthApiOptions } from "./auth.js";
10
+ import type { GitHubChannelCredentials } from "./types.js";
11
+ export type GitHubJsonObject = Record<string, unknown>;
12
+ export type GitHubApiMethod = "DELETE" | "GET" | "PATCH" | "POST" | "PUT";
13
+ export interface GitHubApiOptions extends GitHubAuthApiOptions {
14
+ }
15
+ export interface GitHubApiResponse<T = unknown> {
16
+ body: T;
17
+ ok: boolean;
18
+ status: number;
19
+ }
20
+ export declare class GitHubApiError extends Error {
21
+ readonly body: unknown;
22
+ readonly method: string;
23
+ readonly path: string;
24
+ readonly status: number;
25
+ constructor(input: {
26
+ body: unknown;
27
+ method: string;
28
+ path: string;
29
+ status: number;
30
+ });
31
+ }
32
+ export interface GitHubPostedComment {
33
+ htmlUrl: string | undefined;
34
+ id: number;
35
+ raw: unknown;
36
+ url: string | undefined;
37
+ }
38
+ export type GitHubReactionContent = "+1" | "-1" | "confused" | "eyes" | "heart" | "hooray" | "laugh" | "rocket";
39
+ interface GitHubResourceInput {
40
+ api?: GitHubApiOptions;
41
+ credentials?: GitHubChannelCredentials;
42
+ installationId?: number;
43
+ owner: string;
44
+ repo: string;
45
+ }
46
+ /**
47
+ * Build an authenticated Octokit client.
48
+ *
49
+ * Prefer explicit bearer tokens, then GitHub App installation auth (when App
50
+ * credentials + an installation id are available), then local PAT /
51
+ * `gh auth token`. App auth uses `@octokit/auth-app` so Octokit refreshes
52
+ * installation tokens itself.
53
+ */
54
+ export declare function createGitHubOctokit(input: {
55
+ api?: GitHubApiOptions;
56
+ credentials?: GitHubChannelCredentials;
57
+ installationId?: number;
58
+ }): Promise<Octokit>;
59
+ /**
60
+ * Call a GitHub REST path with channel auth. Prefer typed Octokit methods via
61
+ * {@link createGitHubOctokit} / `ctx.github.getOctokit()` when possible.
62
+ */
63
+ export declare function callGitHubApi<T = unknown>(input: {
64
+ api?: GitHubApiOptions;
65
+ body?: GitHubJsonObject;
66
+ credentials?: GitHubChannelCredentials;
67
+ installationId?: number;
68
+ method: GitHubApiMethod;
69
+ path: string;
70
+ options?: {
71
+ auth?: boolean;
72
+ headers?: Readonly<Record<string, string>>;
73
+ };
74
+ }): Promise<GitHubApiResponse<T>>;
75
+ /** Create an issue or PR timeline comment. */
76
+ export declare function createGitHubIssueComment(input: GitHubResourceInput & {
77
+ body: string;
78
+ issueNumber: number;
79
+ }): Promise<GitHubPostedComment>;
80
+ /** Reply to an inline pull-request review comment thread. */
81
+ export declare function createGitHubReviewCommentReply(input: GitHubResourceInput & {
82
+ body: string;
83
+ commentId: number;
84
+ pullRequestNumber: number;
85
+ }): Promise<GitHubPostedComment>;
86
+ /** Create a reaction on an issue or review comment. */
87
+ export declare function createGitHubReaction(input: GitHubResourceInput & {
88
+ commentId: number;
89
+ content: GitHubReactionContent;
90
+ subject: "issue_comment" | "pull_request_review_comment";
91
+ }): Promise<GitHubApiResponse>;
92
+ /** Create a commit status (legacy `statuses` API). */
93
+ export declare function createGitHubCommitStatus(input: GitHubResourceInput & {
94
+ sha: string;
95
+ state: "error" | "failure" | "pending" | "success";
96
+ context?: string;
97
+ description?: string;
98
+ targetUrl?: string;
99
+ }): Promise<GitHubApiResponse>;
100
+ export {};
101
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/channels/github/api.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EACL,KAAK,oBAAoB,EAO1B,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAE3D,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACvD,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;AAE1E,MAAM,WAAW,gBAAiB,SAAQ,oBAAoB;CAAG;AAEjE,MAAM,WAAW,iBAAiB,CAAC,CAAC,GAAG,OAAO;IAC5C,IAAI,EAAE,CAAC,CAAC;IACR,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,cAAe,SAAQ,KAAK;IACvC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB,YAAY,KAAK,EAAE;QACjB,IAAI,EAAE,OAAO,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;KAChB,EASA;CACF;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,OAAO,CAAC;IACb,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;CACzB;AAED,MAAM,MAAM,qBAAqB,GAC7B,IAAI,GACJ,IAAI,GACJ,UAAU,GACV,MAAM,GACN,OAAO,GACP,QAAQ,GACR,OAAO,GACP,QAAQ,CAAC;AAEb,UAAU,mBAAmB;IAC3B,GAAG,CAAC,EAAE,gBAAgB,CAAC;IACvB,WAAW,CAAC,EAAE,wBAAwB,CAAC;IACvC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CAAC,KAAK,EAAE;IAC/C,GAAG,CAAC,EAAE,gBAAgB,CAAC;IACvB,WAAW,CAAC,EAAE,wBAAwB,CAAC;IACvC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,GAAG,OAAO,CAAC,OAAO,CAAC,CA8CnB;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE;IACtD,GAAG,CAAC,EAAE,gBAAgB,CAAC;IACvB,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACxB,WAAW,CAAC,EAAE,wBAAwB,CAAC;IACvC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,eAAe,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;KAAE,CAAC;CAC1E,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAmBhC;AAqCD,8CAA8C;AAC9C,wBAAsB,wBAAwB,CAC5C,KAAK,EAAE,mBAAmB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GACjE,OAAO,CAAC,mBAAmB,CAAC,CAiB9B;AAED,6DAA6D;AAC7D,wBAAsB,8BAA8B,CAClD,KAAK,EAAE,mBAAmB,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;CAC3B,GACA,OAAO,CAAC,mBAAmB,CAAC,CAkB9B;AAED,uDAAuD;AACvD,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,mBAAmB,GAAG;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,qBAAqB,CAAC;IAC/B,OAAO,EAAE,eAAe,GAAG,6BAA6B,CAAC;CAC1D,GACA,OAAO,CAAC,iBAAiB,CAAC,CA+B5B;AAED,sDAAsD;AACtD,wBAAsB,wBAAwB,CAC5C,KAAK,EAAE,mBAAmB,GAAG;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;IACnD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GACA,OAAO,CAAC,iBAAiB,CAAC,CA0B5B"}
@@ -0,0 +1,229 @@
1
+ /**
2
+ * GitHub REST helpers backed by `@octokit/rest`.
3
+ *
4
+ * Channel hooks should prefer `ctx.github` / `ctx.thread`. Use
5
+ * {@link createGitHubOctokit} (or `ctx.github.getOctokit()`) when you need
6
+ * typed Octokit methods directly.
7
+ */
8
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
9
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
10
+ return new (P || (P = Promise))(function (resolve, reject) {
11
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
12
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
13
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
14
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
15
+ });
16
+ };
17
+ import { createAppAuth } from "@octokit/auth-app";
18
+ import { Octokit } from "@octokit/rest";
19
+ import { hasGitHubAppCredentials, resolveCredentialValue, resolveGitHubAccessToken, resolveGitHubAppId, resolveGitHubInstallationId, resolveGitHubPrivateKey, } from "./auth.js";
20
+ export class GitHubApiError extends Error {
21
+ constructor(input) {
22
+ super(`GitHub ${input.method} ${input.path} failed with HTTP ${input.status}.`);
23
+ this.name = "GitHubApiError";
24
+ this.body = input.body;
25
+ this.method = input.method;
26
+ this.path = input.path;
27
+ this.status = input.status;
28
+ }
29
+ }
30
+ /**
31
+ * Build an authenticated Octokit client.
32
+ *
33
+ * Prefer explicit bearer tokens, then GitHub App installation auth (when App
34
+ * credentials + an installation id are available), then local PAT /
35
+ * `gh auth token`. App auth uses `@octokit/auth-app` so Octokit refreshes
36
+ * installation tokens itself.
37
+ */
38
+ export function createGitHubOctokit(input) {
39
+ return __awaiter(this, void 0, void 0, function* () {
40
+ var _a, _b, _c, _d, _e, _f;
41
+ var _g;
42
+ const requestOptions = ((_a = input.api) === null || _a === void 0 ? void 0 : _a.fetch) === undefined ? undefined : { fetch: input.api.fetch };
43
+ const baseUrl = (_b = input.api) === null || _b === void 0 ? void 0 : _b.apiBaseUrl;
44
+ const explicit = (_g = (yield resolveCredentialValue((_c = input.credentials) === null || _c === void 0 ? void 0 : _c.token))) !== null && _g !== void 0 ? _g : (yield resolveCredentialValue((_d = input.credentials) === null || _d === void 0 ? void 0 : _d.installationToken));
45
+ if (explicit !== undefined) {
46
+ return new Octokit(Object.assign(Object.assign({ auth: explicit }, (baseUrl === undefined ? {} : { baseUrl })), (requestOptions === undefined ? {} : { request: requestOptions })));
47
+ }
48
+ const installationId = yield resolveGitHubInstallationId(input.installationId);
49
+ if (installationId !== undefined &&
50
+ (yield hasGitHubAppCredentials(input.credentials))) {
51
+ const appId = yield resolveGitHubAppId((_e = input.credentials) === null || _e === void 0 ? void 0 : _e.appId);
52
+ const privateKey = yield resolveGitHubPrivateKey((_f = input.credentials) === null || _f === void 0 ? void 0 : _f.privateKey);
53
+ return new Octokit(Object.assign(Object.assign({ authStrategy: createAppAuth, auth: {
54
+ appId,
55
+ privateKey,
56
+ installationId,
57
+ } }, (baseUrl === undefined ? {} : { baseUrl })), (requestOptions === undefined ? {} : { request: requestOptions })));
58
+ }
59
+ // Local testing: ambient PAT / `gh auth token` when App creds are unset.
60
+ const token = yield resolveGitHubAccessToken(input);
61
+ return new Octokit(Object.assign(Object.assign({ auth: token }, (baseUrl === undefined ? {} : { baseUrl })), (requestOptions === undefined ? {} : { request: requestOptions })));
62
+ });
63
+ }
64
+ /**
65
+ * Call a GitHub REST path with channel auth. Prefer typed Octokit methods via
66
+ * {@link createGitHubOctokit} / `ctx.github.getOctokit()` when possible.
67
+ */
68
+ export function callGitHubApi(input) {
69
+ return __awaiter(this, void 0, void 0, function* () {
70
+ var _a, _b, _c;
71
+ if (((_a = input.options) === null || _a === void 0 ? void 0 : _a.auth) === false) {
72
+ const octokit = new Octokit(Object.assign(Object.assign({}, (((_b = input.api) === null || _b === void 0 ? void 0 : _b.apiBaseUrl) === undefined
73
+ ? {}
74
+ : { baseUrl: input.api.apiBaseUrl })), (((_c = input.api) === null || _c === void 0 ? void 0 : _c.fetch) === undefined
75
+ ? {}
76
+ : { request: { fetch: input.api.fetch } })));
77
+ return requestWithOctokit(octokit, input);
78
+ }
79
+ const octokit = yield createGitHubOctokit({
80
+ api: input.api,
81
+ credentials: input.credentials,
82
+ installationId: input.installationId,
83
+ });
84
+ return requestWithOctokit(octokit, input);
85
+ });
86
+ }
87
+ function requestWithOctokit(octokit, input) {
88
+ return __awaiter(this, void 0, void 0, function* () {
89
+ var _a, _b;
90
+ var _c;
91
+ try {
92
+ const route = `${input.method} ${normalizeRequestPath(input.path)}`;
93
+ const response = yield octokit.request(route, Object.assign(Object.assign({}, ((_c = input.body) !== null && _c !== void 0 ? _c : {})), (((_a = input.options) === null || _a === void 0 ? void 0 : _a.headers) === undefined
94
+ ? {}
95
+ : { headers: input.options.headers })));
96
+ return {
97
+ body: response.data,
98
+ ok: true,
99
+ status: response.status,
100
+ };
101
+ }
102
+ catch (error) {
103
+ if (isOctokitRequestError(error)) {
104
+ throw new GitHubApiError({
105
+ body: (_b = error.response) === null || _b === void 0 ? void 0 : _b.data,
106
+ method: input.method,
107
+ path: input.path,
108
+ status: error.status,
109
+ });
110
+ }
111
+ throw error;
112
+ }
113
+ });
114
+ }
115
+ /** Create an issue or PR timeline comment. */
116
+ export function createGitHubIssueComment(input) {
117
+ return __awaiter(this, void 0, void 0, function* () {
118
+ const octokit = yield createGitHubOctokit(input);
119
+ try {
120
+ const response = yield octokit.rest.issues.createComment({
121
+ owner: input.owner,
122
+ repo: input.repo,
123
+ issue_number: input.issueNumber,
124
+ body: input.body,
125
+ });
126
+ return toPostedComment(response.data);
127
+ }
128
+ catch (error) {
129
+ throw wrapOctokitError(error, "POST", `/repos/${input.owner}/${input.repo}/issues/${input.issueNumber}/comments`);
130
+ }
131
+ });
132
+ }
133
+ /** Reply to an inline pull-request review comment thread. */
134
+ export function createGitHubReviewCommentReply(input) {
135
+ return __awaiter(this, void 0, void 0, function* () {
136
+ const octokit = yield createGitHubOctokit(input);
137
+ try {
138
+ const response = yield octokit.rest.pulls.createReplyForReviewComment({
139
+ owner: input.owner,
140
+ repo: input.repo,
141
+ pull_number: input.pullRequestNumber,
142
+ comment_id: input.commentId,
143
+ body: input.body,
144
+ });
145
+ return toPostedComment(response.data);
146
+ }
147
+ catch (error) {
148
+ throw wrapOctokitError(error, "POST", `/repos/${input.owner}/${input.repo}/pulls/${input.pullRequestNumber}/comments/${input.commentId}/replies`);
149
+ }
150
+ });
151
+ }
152
+ /** Create a reaction on an issue or review comment. */
153
+ export function createGitHubReaction(input) {
154
+ return __awaiter(this, void 0, void 0, function* () {
155
+ const octokit = yield createGitHubOctokit(input);
156
+ try {
157
+ const response = input.subject === "issue_comment"
158
+ ? yield octokit.rest.reactions.createForIssueComment({
159
+ owner: input.owner,
160
+ repo: input.repo,
161
+ comment_id: input.commentId,
162
+ content: input.content,
163
+ })
164
+ : yield octokit.rest.reactions.createForPullRequestReviewComment({
165
+ owner: input.owner,
166
+ repo: input.repo,
167
+ comment_id: input.commentId,
168
+ content: input.content,
169
+ });
170
+ return {
171
+ body: response.data,
172
+ ok: true,
173
+ status: response.status,
174
+ };
175
+ }
176
+ catch (error) {
177
+ const segment = input.subject === "issue_comment" ? "issues/comments" : "pulls/comments";
178
+ throw wrapOctokitError(error, "POST", `/repos/${input.owner}/${input.repo}/${segment}/${input.commentId}/reactions`);
179
+ }
180
+ });
181
+ }
182
+ /** Create a commit status (legacy `statuses` API). */
183
+ export function createGitHubCommitStatus(input) {
184
+ return __awaiter(this, void 0, void 0, function* () {
185
+ const octokit = yield createGitHubOctokit(input);
186
+ try {
187
+ const response = yield octokit.rest.repos.createCommitStatus(Object.assign(Object.assign(Object.assign({ owner: input.owner, repo: input.repo, sha: input.sha, state: input.state }, (input.context === undefined ? {} : { context: input.context })), (input.description === undefined
188
+ ? {}
189
+ : { description: input.description })), (input.targetUrl === undefined ? {} : { target_url: input.targetUrl })));
190
+ return {
191
+ body: response.data,
192
+ ok: true,
193
+ status: response.status,
194
+ };
195
+ }
196
+ catch (error) {
197
+ throw wrapOctokitError(error, "POST", `/repos/${input.owner}/${input.repo}/statuses/${input.sha}`);
198
+ }
199
+ });
200
+ }
201
+ function toPostedComment(raw) {
202
+ return {
203
+ htmlUrl: typeof raw.html_url === "string" ? raw.html_url : undefined,
204
+ id: typeof raw.id === "number" ? raw.id : 0,
205
+ raw,
206
+ url: typeof raw.url === "string" ? raw.url : undefined,
207
+ };
208
+ }
209
+ function normalizeRequestPath(path) {
210
+ return path.startsWith("/") ? path : `/${path}`;
211
+ }
212
+ function isOctokitRequestError(error) {
213
+ return (typeof error === "object" &&
214
+ error !== null &&
215
+ "status" in error &&
216
+ typeof error.status === "number");
217
+ }
218
+ function wrapOctokitError(error, method, path) {
219
+ var _a;
220
+ if (isOctokitRequestError(error)) {
221
+ return new GitHubApiError({
222
+ body: (_a = error.response) === null || _a === void 0 ? void 0 : _a.data,
223
+ method,
224
+ path,
225
+ status: error.status,
226
+ });
227
+ }
228
+ return error instanceof Error ? error : new Error(String(error));
229
+ }
@@ -0,0 +1,67 @@
1
+ /**
2
+ * GitHub API token resolution for the channel pack.
3
+ *
4
+ * Resolution order for authenticated REST calls:
5
+ * 1. `credentials.token` / `credentials.installationToken` (explicit)
6
+ * 2. GitHub App JWT → installation access token (when App creds + installation
7
+ * id are available — webhook `installation.id` or `GITHUB_APP_INSTALLATION_ID`)
8
+ * 3. `GITHUB_TOKEN` / `GH_TOKEN` env (local PAT / fine-grained token)
9
+ * 4. `gh auth token` (local CLI session)
10
+ *
11
+ * Production should set App credentials and omit ambient PATs. Local testing
12
+ * can keep using a PAT or `gh auth login` when App creds are unset.
13
+ */
14
+ import type { GitHubChannelCredentials, GitHubCredentialValue } from "./types.js";
15
+ export interface GitHubAuthApiOptions {
16
+ apiBaseUrl?: string;
17
+ fetch?: typeof fetch;
18
+ }
19
+ /** Resolve a credential value (literal or lazy). */
20
+ export declare function resolveCredentialValue(value: GitHubCredentialValue | undefined): Promise<string | undefined>;
21
+ /** True when App id + private key are configured (credentials or env). */
22
+ export declare function hasGitHubAppCredentials(credentials?: GitHubChannelCredentials): Promise<boolean>;
23
+ /**
24
+ * Resolve an installation id from the call site, then
25
+ * `GITHUB_APP_INSTALLATION_ID` (host / non-webhook GitHub calls).
26
+ */
27
+ export declare function resolveGitHubInstallationId(installationId?: number): Promise<number | undefined>;
28
+ /**
29
+ * Resolve a bearer token for GitHub REST calls. Prefer explicit credentials,
30
+ * then App installation tokens when configured, then local PAT / `gh auth`.
31
+ */
32
+ export declare function resolveGitHubAccessToken(input: {
33
+ api?: GitHubAuthApiOptions;
34
+ credentials?: GitHubChannelCredentials;
35
+ installationId?: number;
36
+ }): Promise<string>;
37
+ /** Soft resolve — returns undefined instead of throwing. */
38
+ export declare function tryResolveGitHubAccessToken(input: {
39
+ api?: GitHubAuthApiOptions;
40
+ credentials?: GitHubChannelCredentials;
41
+ installationId?: number;
42
+ }): Promise<string | undefined>;
43
+ /** Read `gh auth token` when the CLI is logged in. Cached briefly. */
44
+ export declare function tryResolveGhAuthToken(): Promise<string | undefined>;
45
+ export declare function resolveGitHubAppId(appId?: GitHubCredentialValue | number): Promise<string>;
46
+ export declare function resolveGitHubPrivateKey(privateKey?: GitHubCredentialValue): Promise<string>;
47
+ /**
48
+ * Mint an installation access token via `@octokit/auth-app`.
49
+ * Prefer {@link createGitHubOctokit} for normal API work — this is for
50
+ * callers that only need the raw token string.
51
+ */
52
+ export declare function createGitHubInstallationToken(input: {
53
+ api?: GitHubAuthApiOptions;
54
+ appId?: GitHubCredentialValue | number;
55
+ installationId: number;
56
+ privateKey?: GitHubCredentialValue;
57
+ }): Promise<string>;
58
+ /**
59
+ * Export the resolved host GitHub token as `process.env.GH_TOKEN` so
60
+ * subprocesses that shell out to `gh` work on App-credential hosts (corp
61
+ * agent-serve). Intended for serve warmup when auth source is `app`.
62
+ * Returns whether `GH_TOKEN` was written; refreshes on an interval.
63
+ */
64
+ export declare function ensureGhCliTokenEnv(): Promise<boolean>;
65
+ /** Clears in-memory caches. Intended for tests. */
66
+ export declare function clearGitHubAuthCaches(): void;
67
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/channels/github/auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,KAAK,EACV,wBAAwB,EACxB,qBAAqB,EACtB,MAAM,YAAY,CAAC;AAIpB,MAAM,WAAW,oBAAoB;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;CACtB;AASD,oDAAoD;AACpD,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,qBAAqB,GAAG,SAAS,GACvC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAU7B;AAED,0EAA0E;AAC1E,wBAAsB,uBAAuB,CAC3C,WAAW,CAAC,EAAE,wBAAwB,GACrC,OAAO,CAAC,OAAO,CAAC,CAQlB;AAED;;;GAGG;AACH,wBAAsB,2BAA2B,CAC/C,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAkB7B;AAED;;;GAGG;AACH,wBAAsB,wBAAwB,CAAC,KAAK,EAAE;IACpD,GAAG,CAAC,EAAE,oBAAoB,CAAC;IAC3B,WAAW,CAAC,EAAE,wBAAwB,CAAC;IACvC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,GAAG,OAAO,CAAC,MAAM,CAAC,CAsClB;AAED,4DAA4D;AAC5D,wBAAsB,2BAA2B,CAAC,KAAK,EAAE;IACvD,GAAG,CAAC,EAAE,oBAAoB,CAAC;IAC3B,WAAW,CAAC,EAAE,wBAAwB,CAAC;IACvC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAM9B;AAED,sEAAsE;AACtE,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAqBzE;AAED,wBAAsB,kBAAkB,CACtC,KAAK,CAAC,EAAE,qBAAqB,GAAG,MAAM,GACrC,OAAO,CAAC,MAAM,CAAC,CAiBjB;AAED,wBAAsB,uBAAuB,CAC3C,UAAU,CAAC,EAAE,qBAAqB,GACjC,OAAO,CAAC,MAAM,CAAC,CAejB;AAED;;;;GAIG;AACH,wBAAsB,6BAA6B,CAAC,KAAK,EAAE;IACzD,GAAG,CAAC,EAAE,oBAAoB,CAAC;IAC3B,KAAK,CAAC,EAAE,qBAAqB,GAAG,MAAM,CAAC;IACvC,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,qBAAqB,CAAC;CACpC,GAAG,OAAO,CAAC,MAAM,CAAC,CAkBlB;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,OAAO,CAAC,CAc5D;AAED,mDAAmD;AACnD,wBAAgB,qBAAqB,IAAI,IAAI,CAM5C"}
@@ -0,0 +1,239 @@
1
+ /**
2
+ * GitHub API token resolution for the channel pack.
3
+ *
4
+ * Resolution order for authenticated REST calls:
5
+ * 1. `credentials.token` / `credentials.installationToken` (explicit)
6
+ * 2. GitHub App JWT → installation access token (when App creds + installation
7
+ * id are available — webhook `installation.id` or `GITHUB_APP_INSTALLATION_ID`)
8
+ * 3. `GITHUB_TOKEN` / `GH_TOKEN` env (local PAT / fine-grained token)
9
+ * 4. `gh auth token` (local CLI session)
10
+ *
11
+ * Production should set App credentials and omit ambient PATs. Local testing
12
+ * can keep using a PAT or `gh auth login` when App creds are unset.
13
+ */
14
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
15
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
16
+ return new (P || (P = Promise))(function (resolve, reject) {
17
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
18
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
19
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
20
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
21
+ });
22
+ };
23
+ import { execFile } from "node:child_process";
24
+ import { promisify } from "node:util";
25
+ import { createAppAuth } from "@octokit/auth-app";
26
+ const execFileAsync = promisify(execFile);
27
+ let ghAuthTokenCache = null;
28
+ const GH_AUTH_CACHE_MS = 5 * 60000;
29
+ /** Refresh exported `GH_TOKEN` before installation tokens expire (~60m). */
30
+ const GH_CLI_TOKEN_REFRESH_MS = 50 * 60000;
31
+ let ghCliTokenRefreshTimer = null;
32
+ /** Resolve a credential value (literal or lazy). */
33
+ export function resolveCredentialValue(value) {
34
+ return __awaiter(this, void 0, void 0, function* () {
35
+ if (value === undefined) {
36
+ return undefined;
37
+ }
38
+ const resolved = typeof value === "function" ? yield value() : value;
39
+ if (typeof resolved !== "string") {
40
+ return undefined;
41
+ }
42
+ const trimmed = resolved.trim();
43
+ return trimmed === "" ? undefined : trimmed;
44
+ });
45
+ }
46
+ /** True when App id + private key are configured (credentials or env). */
47
+ export function hasGitHubAppCredentials(credentials) {
48
+ return __awaiter(this, void 0, void 0, function* () {
49
+ try {
50
+ yield resolveGitHubAppId(credentials === null || credentials === void 0 ? void 0 : credentials.appId);
51
+ yield resolveGitHubPrivateKey(credentials === null || credentials === void 0 ? void 0 : credentials.privateKey);
52
+ return true;
53
+ }
54
+ catch (_a) {
55
+ return false;
56
+ }
57
+ });
58
+ }
59
+ /**
60
+ * Resolve an installation id from the call site, then
61
+ * `GITHUB_APP_INSTALLATION_ID` (host / non-webhook GitHub calls).
62
+ */
63
+ export function resolveGitHubInstallationId(installationId) {
64
+ return __awaiter(this, void 0, void 0, function* () {
65
+ if (installationId !== undefined &&
66
+ Number.isInteger(installationId) &&
67
+ installationId > 0) {
68
+ return installationId;
69
+ }
70
+ const fromEnv = yield resolveCredentialValue(process.env.GITHUB_APP_INSTALLATION_ID);
71
+ if (fromEnv === undefined) {
72
+ return undefined;
73
+ }
74
+ if (!/^[1-9][0-9]*$/u.test(fromEnv)) {
75
+ return undefined;
76
+ }
77
+ return Number(fromEnv);
78
+ });
79
+ }
80
+ /**
81
+ * Resolve a bearer token for GitHub REST calls. Prefer explicit credentials,
82
+ * then App installation tokens when configured, then local PAT / `gh auth`.
83
+ */
84
+ export function resolveGitHubAccessToken(input) {
85
+ return __awaiter(this, void 0, void 0, function* () {
86
+ var _a, _b, _c, _d;
87
+ var _e, _f;
88
+ const explicit = (_e = (yield resolveCredentialValue((_a = input.credentials) === null || _a === void 0 ? void 0 : _a.token))) !== null && _e !== void 0 ? _e : (yield resolveCredentialValue((_b = input.credentials) === null || _b === void 0 ? void 0 : _b.installationToken));
89
+ if (explicit !== undefined) {
90
+ return explicit;
91
+ }
92
+ const installationId = yield resolveGitHubInstallationId(input.installationId);
93
+ if (installationId !== undefined &&
94
+ (yield hasGitHubAppCredentials(input.credentials))) {
95
+ return createGitHubInstallationToken({
96
+ api: input.api,
97
+ appId: (_c = input.credentials) === null || _c === void 0 ? void 0 : _c.appId,
98
+ installationId,
99
+ privateKey: (_d = input.credentials) === null || _d === void 0 ? void 0 : _d.privateKey,
100
+ });
101
+ }
102
+ const fromEnv = (_f = (yield resolveCredentialValue(process.env.GITHUB_TOKEN))) !== null && _f !== void 0 ? _f : (yield resolveCredentialValue(process.env.GH_TOKEN));
103
+ if (fromEnv !== undefined) {
104
+ return fromEnv;
105
+ }
106
+ const fromGh = yield tryResolveGhAuthToken();
107
+ if (fromGh !== undefined) {
108
+ return fromGh;
109
+ }
110
+ throw new Error("githubChannel: no GitHub token available (set GITHUB_APP_ID + GITHUB_APP_PRIVATE_KEY + installation id, or GITHUB_TOKEN / GH_TOKEN, or run `gh auth login`).");
111
+ });
112
+ }
113
+ /** Soft resolve — returns undefined instead of throwing. */
114
+ export function tryResolveGitHubAccessToken(input) {
115
+ return __awaiter(this, void 0, void 0, function* () {
116
+ try {
117
+ return yield resolveGitHubAccessToken(input);
118
+ }
119
+ catch (_a) {
120
+ return undefined;
121
+ }
122
+ });
123
+ }
124
+ /** Read `gh auth token` when the CLI is logged in. Cached briefly. */
125
+ export function tryResolveGhAuthToken() {
126
+ return __awaiter(this, void 0, void 0, function* () {
127
+ if (ghAuthTokenCache !== null && Date.now() < ghAuthTokenCache.expiresAtMs) {
128
+ return ghAuthTokenCache.token;
129
+ }
130
+ try {
131
+ const { stdout } = yield execFileAsync("gh", ["auth", "token"], {
132
+ timeout: 5000,
133
+ env: process.env,
134
+ });
135
+ const token = stdout.trim();
136
+ if (token === "") {
137
+ return undefined;
138
+ }
139
+ ghAuthTokenCache = {
140
+ token,
141
+ expiresAtMs: Date.now() + GH_AUTH_CACHE_MS,
142
+ };
143
+ return token;
144
+ }
145
+ catch (_a) {
146
+ return undefined;
147
+ }
148
+ });
149
+ }
150
+ export function resolveGitHubAppId(appId) {
151
+ return __awaiter(this, void 0, void 0, function* () {
152
+ const source = appId !== null && appId !== void 0 ? appId : (process.env.GITHUB_APP_ID !== undefined && process.env.GITHUB_APP_ID !== ""
153
+ ? process.env.GITHUB_APP_ID
154
+ : undefined);
155
+ if (source === undefined) {
156
+ throw new Error("githubChannel: GITHUB_APP_ID is required.");
157
+ }
158
+ if (typeof source === "number") {
159
+ return String(source);
160
+ }
161
+ const value = yield resolveCredentialValue(source);
162
+ if (value === undefined) {
163
+ throw new Error("githubChannel: GITHUB_APP_ID is required.");
164
+ }
165
+ return value;
166
+ });
167
+ }
168
+ export function resolveGitHubPrivateKey(privateKey) {
169
+ return __awaiter(this, void 0, void 0, function* () {
170
+ const source = privateKey !== null && privateKey !== void 0 ? privateKey : (process.env.GITHUB_APP_PRIVATE_KEY !== undefined &&
171
+ process.env.GITHUB_APP_PRIVATE_KEY !== ""
172
+ ? process.env.GITHUB_APP_PRIVATE_KEY
173
+ : undefined);
174
+ if (source === undefined) {
175
+ throw new Error("githubChannel: GITHUB_APP_PRIVATE_KEY is required.");
176
+ }
177
+ const value = yield resolveCredentialValue(source);
178
+ if (value === undefined) {
179
+ throw new Error("githubChannel: GITHUB_APP_PRIVATE_KEY is required.");
180
+ }
181
+ return value.replace(/\\n/gu, "\n");
182
+ });
183
+ }
184
+ /**
185
+ * Mint an installation access token via `@octokit/auth-app`.
186
+ * Prefer {@link createGitHubOctokit} for normal API work — this is for
187
+ * callers that only need the raw token string.
188
+ */
189
+ export function createGitHubInstallationToken(input) {
190
+ return __awaiter(this, void 0, void 0, function* () {
191
+ var _a;
192
+ const appId = yield resolveGitHubAppId(input.appId);
193
+ const privateKey = yield resolveGitHubPrivateKey(input.privateKey);
194
+ // Prefer createGitHubOctokit for API work — this path only mints a raw
195
+ // token. Custom fetch belongs on the Octokit client, not createAppAuth
196
+ // (StrategyOptions.request expects a full RequestInterface).
197
+ const auth = createAppAuth(Object.assign({ appId,
198
+ privateKey }, (((_a = input.api) === null || _a === void 0 ? void 0 : _a.apiBaseUrl) === undefined
199
+ ? {}
200
+ : { baseUrl: input.api.apiBaseUrl })));
201
+ const result = yield auth({
202
+ type: "installation",
203
+ installationId: input.installationId,
204
+ });
205
+ return result.token;
206
+ });
207
+ }
208
+ /**
209
+ * Export the resolved host GitHub token as `process.env.GH_TOKEN` so
210
+ * subprocesses that shell out to `gh` work on App-credential hosts (corp
211
+ * agent-serve). Intended for serve warmup when auth source is `app`.
212
+ * Returns whether `GH_TOKEN` was written; refreshes on an interval.
213
+ */
214
+ export function ensureGhCliTokenEnv() {
215
+ return __awaiter(this, void 0, void 0, function* () {
216
+ var _a;
217
+ const token = yield tryResolveGitHubAccessToken({});
218
+ if (token === undefined) {
219
+ return false;
220
+ }
221
+ process.env.GH_TOKEN = token;
222
+ if (ghCliTokenRefreshTimer === null) {
223
+ const timer = setInterval(() => {
224
+ void ensureGhCliTokenEnv();
225
+ }, GH_CLI_TOKEN_REFRESH_MS);
226
+ (_a = timer.unref) === null || _a === void 0 ? void 0 : _a.call(timer);
227
+ ghCliTokenRefreshTimer = timer;
228
+ }
229
+ return true;
230
+ });
231
+ }
232
+ /** Clears in-memory caches. Intended for tests. */
233
+ export function clearGitHubAuthCaches() {
234
+ ghAuthTokenCache = null;
235
+ if (ghCliTokenRefreshTimer !== null) {
236
+ clearInterval(ghCliTokenRefreshTimer);
237
+ ghCliTokenRefreshTimer = null;
238
+ }
239
+ }