@geminixiang/mikan 1.0.0-beta.84 → 1.0.0-beta.86

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 (289) hide show
  1. package/CHANGELOG.md +57 -0
  2. package/README.md +10 -10
  3. package/dist/adapters/commands/session-view.js +1 -1
  4. package/dist/adapters/commands/session-view.js.map +1 -1
  5. package/dist/adapters/discord/bot.d.ts.map +1 -1
  6. package/dist/adapters/discord/bot.js +1 -8
  7. package/dist/adapters/discord/bot.js.map +1 -1
  8. package/dist/adapters/github/activity.d.ts +3 -0
  9. package/dist/adapters/github/activity.d.ts.map +1 -0
  10. package/dist/adapters/github/activity.js +154 -0
  11. package/dist/adapters/github/activity.js.map +1 -0
  12. package/dist/adapters/github/bot.d.ts +10 -20
  13. package/dist/adapters/github/bot.d.ts.map +1 -1
  14. package/dist/adapters/github/bot.js +119 -342
  15. package/dist/adapters/github/bot.js.map +1 -1
  16. package/dist/adapters/github/client.d.ts +9 -19
  17. package/dist/adapters/github/client.d.ts.map +1 -1
  18. package/dist/adapters/github/client.js +28 -104
  19. package/dist/adapters/github/client.js.map +1 -1
  20. package/dist/adapters/github/context.d.ts.map +1 -1
  21. package/dist/adapters/github/context.js +29 -20
  22. package/dist/adapters/github/context.js.map +1 -1
  23. package/dist/adapters/github/github-ops.d.ts +2 -10
  24. package/dist/adapters/github/github-ops.d.ts.map +1 -1
  25. package/dist/adapters/github/github-ops.js +28 -91
  26. package/dist/adapters/github/github-ops.js.map +1 -1
  27. package/dist/adapters/github/policy.d.ts +19 -0
  28. package/dist/adapters/github/policy.d.ts.map +1 -0
  29. package/dist/adapters/github/policy.js +79 -0
  30. package/dist/adapters/github/policy.js.map +1 -0
  31. package/dist/adapters/github/tool-pack.d.ts +2 -2
  32. package/dist/adapters/github/tool-pack.d.ts.map +1 -1
  33. package/dist/adapters/github/tool-pack.js +4 -9
  34. package/dist/adapters/github/tool-pack.js.map +1 -1
  35. package/dist/adapters/github/tools/checks.d.ts.map +1 -1
  36. package/dist/adapters/github/tools/checks.js +6 -8
  37. package/dist/adapters/github/tools/checks.js.map +1 -1
  38. package/dist/adapters/github/tools/pr.d.ts.map +1 -1
  39. package/dist/adapters/github/tools/pr.js +7 -9
  40. package/dist/adapters/github/tools/pr.js.map +1 -1
  41. package/dist/adapters/github/types.d.ts +66 -67
  42. package/dist/adapters/github/types.d.ts.map +1 -1
  43. package/dist/adapters/github/types.js.map +1 -1
  44. package/dist/adapters/github/webhook.d.ts +2 -1
  45. package/dist/adapters/github/webhook.d.ts.map +1 -1
  46. package/dist/adapters/github/webhook.js +46 -4
  47. package/dist/adapters/github/webhook.js.map +1 -1
  48. package/dist/adapters/progressive-renderer.d.ts.map +1 -1
  49. package/dist/adapters/progressive-renderer.js +3 -0
  50. package/dist/adapters/progressive-renderer.js.map +1 -1
  51. package/dist/adapters/shared.d.ts +3 -1
  52. package/dist/adapters/shared.d.ts.map +1 -1
  53. package/dist/adapters/shared.js +45 -23
  54. package/dist/adapters/shared.js.map +1 -1
  55. package/dist/adapters/slack/blocks.d.ts.map +1 -1
  56. package/dist/adapters/slack/blocks.js +65 -2
  57. package/dist/adapters/slack/blocks.js.map +1 -1
  58. package/dist/adapters/slack/bot.d.ts +4 -0
  59. package/dist/adapters/slack/bot.d.ts.map +1 -1
  60. package/dist/adapters/slack/bot.js +84 -36
  61. package/dist/adapters/slack/bot.js.map +1 -1
  62. package/dist/adapters/slack/jev-context.js +2 -2
  63. package/dist/adapters/slack/jev-context.js.map +1 -1
  64. package/dist/adapters/slack/response-lifecycle.js +2 -2
  65. package/dist/adapters/slack/response-lifecycle.js.map +1 -1
  66. package/dist/adapters/slack/task-status.d.ts +3 -2
  67. package/dist/adapters/slack/task-status.d.ts.map +1 -1
  68. package/dist/adapters/slack/task-status.js +12 -15
  69. package/dist/adapters/slack/task-status.js.map +1 -1
  70. package/dist/adapters/telegram/bot.d.ts.map +1 -1
  71. package/dist/adapters/telegram/bot.js +1 -8
  72. package/dist/adapters/telegram/bot.js.map +1 -1
  73. package/dist/adapters/web/admin/portal.js +1 -1
  74. package/dist/adapters/web/admin/portal.js.map +1 -1
  75. package/dist/adapters/web/admin/provider-models.d.ts.map +1 -1
  76. package/dist/adapters/web/admin/provider-models.js +10 -3
  77. package/dist/adapters/web/admin/provider-models.js.map +1 -1
  78. package/dist/adapters/web/login/portal.js +6 -1
  79. package/dist/adapters/web/login/portal.js.map +1 -1
  80. package/dist/adapters/web/server.d.ts.map +1 -1
  81. package/dist/adapters/web/server.js +5 -3
  82. package/dist/adapters/web/server.js.map +1 -1
  83. package/dist/adapters/web/session-view/portal.d.ts +2 -1
  84. package/dist/adapters/web/session-view/portal.d.ts.map +1 -1
  85. package/dist/adapters/web/session-view/portal.js +18 -27
  86. package/dist/adapters/web/session-view/portal.js.map +1 -1
  87. package/dist/cli/boot.d.ts.map +1 -1
  88. package/dist/cli/boot.js +4 -6
  89. package/dist/cli/boot.js.map +1 -1
  90. package/dist/cli/migrate.d.ts +3 -0
  91. package/dist/cli/migrate.d.ts.map +1 -0
  92. package/dist/cli/migrate.js +74 -0
  93. package/dist/cli/migrate.js.map +1 -0
  94. package/dist/cli/office.d.ts.map +1 -1
  95. package/dist/cli/office.js +8 -129
  96. package/dist/cli/office.js.map +1 -1
  97. package/dist/cli/onboard.d.ts +0 -1
  98. package/dist/cli/onboard.d.ts.map +1 -1
  99. package/dist/cli/onboard.js +4 -7
  100. package/dist/cli/onboard.js.map +1 -1
  101. package/dist/cli/types.d.ts +2 -3
  102. package/dist/cli/types.d.ts.map +1 -1
  103. package/dist/cli/types.js.map +1 -1
  104. package/dist/env-manifest.d.ts.map +1 -1
  105. package/dist/env-manifest.js +24 -22
  106. package/dist/env-manifest.js.map +1 -1
  107. package/dist/events/index.d.ts +3 -13
  108. package/dist/events/index.d.ts.map +1 -1
  109. package/dist/events/index.js +12 -58
  110. package/dist/events/index.js.map +1 -1
  111. package/dist/events/scheduler.d.ts.map +1 -1
  112. package/dist/events/scheduler.js +3 -0
  113. package/dist/events/scheduler.js.map +1 -1
  114. package/dist/file-guards.d.ts +7 -0
  115. package/dist/file-guards.d.ts.map +1 -1
  116. package/dist/file-guards.js +63 -1
  117. package/dist/file-guards.js.map +1 -1
  118. package/dist/harness/budget-stop.d.ts +3 -0
  119. package/dist/harness/budget-stop.d.ts.map +1 -0
  120. package/dist/harness/budget-stop.js +36 -0
  121. package/dist/harness/budget-stop.js.map +1 -0
  122. package/dist/harness/execution-resolver.d.ts.map +1 -1
  123. package/dist/harness/execution-resolver.js +5 -9
  124. package/dist/harness/execution-resolver.js.map +1 -1
  125. package/dist/harness/mcp.d.ts.map +1 -1
  126. package/dist/harness/mcp.js +75 -31
  127. package/dist/harness/mcp.js.map +1 -1
  128. package/dist/harness/models.js +2 -2
  129. package/dist/harness/models.js.map +1 -1
  130. package/dist/harness/open-connector.d.ts +0 -9
  131. package/dist/harness/open-connector.d.ts.map +1 -1
  132. package/dist/harness/open-connector.js +15 -69
  133. package/dist/harness/open-connector.js.map +1 -1
  134. package/dist/harness/presenter.d.ts.map +1 -1
  135. package/dist/harness/presenter.js +33 -2
  136. package/dist/harness/presenter.js.map +1 -1
  137. package/dist/harness/prompt.d.ts +1 -1
  138. package/dist/harness/prompt.d.ts.map +1 -1
  139. package/dist/harness/prompt.js +14 -32
  140. package/dist/harness/prompt.js.map +1 -1
  141. package/dist/harness/run-events.d.ts.map +1 -1
  142. package/dist/harness/run-events.js +6 -1
  143. package/dist/harness/run-events.js.map +1 -1
  144. package/dist/harness/runner.d.ts.map +1 -1
  145. package/dist/harness/runner.js +6 -9
  146. package/dist/harness/runner.js.map +1 -1
  147. package/dist/harness/session.d.ts.map +1 -1
  148. package/dist/harness/session.js +6 -0
  149. package/dist/harness/session.js.map +1 -1
  150. package/dist/harness/tools/event.d.ts.map +1 -1
  151. package/dist/harness/tools/event.js +19 -2
  152. package/dist/harness/tools/event.js.map +1 -1
  153. package/dist/harness/tools/generate-image.d.ts.map +1 -1
  154. package/dist/harness/tools/generate-image.js +17 -3
  155. package/dist/harness/tools/generate-image.js.map +1 -1
  156. package/dist/harness/tools/jev-browser.d.ts +1 -2
  157. package/dist/harness/tools/jev-browser.d.ts.map +1 -1
  158. package/dist/harness/tools/jev-browser.js +75 -50
  159. package/dist/harness/tools/jev-browser.js.map +1 -1
  160. package/dist/harness/types.d.ts +16 -0
  161. package/dist/harness/types.d.ts.map +1 -1
  162. package/dist/harness/types.js.map +1 -1
  163. package/dist/index.d.ts +2 -3
  164. package/dist/index.d.ts.map +1 -1
  165. package/dist/index.js +2 -3
  166. package/dist/index.js.map +1 -1
  167. package/dist/main.js +40 -93
  168. package/dist/main.js.map +1 -1
  169. package/dist/memory-capture/index.d.ts.map +1 -1
  170. package/dist/memory-capture/index.js +3 -3
  171. package/dist/memory-capture/index.js.map +1 -1
  172. package/dist/migrations/actor-vaults.d.ts +3 -0
  173. package/dist/migrations/actor-vaults.d.ts.map +1 -0
  174. package/dist/migrations/actor-vaults.js +43 -0
  175. package/dist/migrations/actor-vaults.js.map +1 -0
  176. package/dist/migrations/conversation-settings.d.ts +3 -0
  177. package/dist/migrations/conversation-settings.d.ts.map +1 -0
  178. package/dist/migrations/conversation-settings.js +31 -0
  179. package/dist/migrations/conversation-settings.js.map +1 -0
  180. package/dist/migrations/index.d.ts +14 -0
  181. package/dist/migrations/index.d.ts.map +1 -0
  182. package/dist/migrations/index.js +99 -0
  183. package/dist/migrations/index.js.map +1 -0
  184. package/dist/migrations/models-json.d.ts +3 -0
  185. package/dist/migrations/models-json.d.ts.map +1 -0
  186. package/dist/migrations/models-json.js +18 -0
  187. package/dist/migrations/models-json.js.map +1 -0
  188. package/dist/migrations/office-layout.d.ts +4 -0
  189. package/dist/migrations/office-layout.d.ts.map +1 -0
  190. package/dist/migrations/office-layout.js +94 -0
  191. package/dist/migrations/office-layout.js.map +1 -0
  192. package/dist/migrations/office-sessions.d.ts +3 -0
  193. package/dist/migrations/office-sessions.d.ts.map +1 -0
  194. package/dist/migrations/office-sessions.js +70 -0
  195. package/dist/migrations/office-sessions.js.map +1 -0
  196. package/dist/migrations/sandbox-containers.d.ts +3 -0
  197. package/dist/migrations/sandbox-containers.d.ts.map +1 -0
  198. package/dist/migrations/sandbox-containers.js +36 -0
  199. package/dist/migrations/sandbox-containers.js.map +1 -0
  200. package/dist/{sessions/migrate-common.d.ts → migrations/session-files.d.ts} +1 -2
  201. package/dist/migrations/session-files.d.ts.map +1 -0
  202. package/dist/{sessions/migrate-common.js → migrations/session-files.js} +2 -2
  203. package/dist/migrations/session-files.js.map +1 -0
  204. package/dist/{sessions/migrate-v3.d.ts → migrations/sessions-v3.d.ts} +4 -3
  205. package/dist/migrations/sessions-v3.d.ts.map +1 -0
  206. package/dist/{sessions/migrate-v3.js → migrations/sessions-v3.js} +14 -4
  207. package/dist/migrations/sessions-v3.js.map +1 -0
  208. package/dist/migrations/types.d.ts +30 -0
  209. package/dist/migrations/types.d.ts.map +1 -0
  210. package/dist/migrations/types.js +2 -0
  211. package/dist/migrations/types.js.map +1 -0
  212. package/dist/migrations/workspace-events.d.ts +3 -0
  213. package/dist/migrations/workspace-events.d.ts.map +1 -0
  214. package/dist/migrations/workspace-events.js +43 -0
  215. package/dist/migrations/workspace-events.js.map +1 -0
  216. package/dist/office/index.d.ts +2 -24
  217. package/dist/office/index.d.ts.map +1 -1
  218. package/dist/office/index.js +15 -579
  219. package/dist/office/index.js.map +1 -1
  220. package/dist/office/types.d.ts +0 -10
  221. package/dist/office/types.d.ts.map +1 -1
  222. package/dist/office/types.js.map +1 -1
  223. package/dist/runtime/conversation-runtime.js +12 -12
  224. package/dist/runtime/conversation-runtime.js.map +1 -1
  225. package/dist/sandbox/identity.d.ts +2 -3
  226. package/dist/sandbox/identity.d.ts.map +1 -1
  227. package/dist/sandbox/identity.js +6 -13
  228. package/dist/sandbox/identity.js.map +1 -1
  229. package/dist/sandbox/layout.d.ts +0 -2
  230. package/dist/sandbox/layout.d.ts.map +1 -1
  231. package/dist/sandbox/layout.js +2 -2
  232. package/dist/sandbox/layout.js.map +1 -1
  233. package/dist/sandbox/provisioner.d.ts +4 -38
  234. package/dist/sandbox/provisioner.d.ts.map +1 -1
  235. package/dist/sandbox/provisioner.js +32 -456
  236. package/dist/sandbox/provisioner.js.map +1 -1
  237. package/dist/sessions/chat-history-sync.d.ts.map +1 -1
  238. package/dist/sessions/chat-history-sync.js +28 -40
  239. package/dist/sessions/chat-history-sync.js.map +1 -1
  240. package/dist/sessions/session-store.d.ts.map +1 -1
  241. package/dist/sessions/session-store.js +1 -8
  242. package/dist/sessions/session-store.js.map +1 -1
  243. package/dist/sessions/store.d.ts +2 -3
  244. package/dist/sessions/store.d.ts.map +1 -1
  245. package/dist/sessions/store.js +8 -14
  246. package/dist/sessions/store.js.map +1 -1
  247. package/dist/sessions/types.d.ts +6 -15
  248. package/dist/sessions/types.d.ts.map +1 -1
  249. package/dist/sessions/types.js.map +1 -1
  250. package/dist/settings/index.d.ts +0 -48
  251. package/dist/settings/index.d.ts.map +1 -1
  252. package/dist/settings/index.js +6 -37
  253. package/dist/settings/index.js.map +1 -1
  254. package/dist/types.d.ts +0 -29
  255. package/dist/types.d.ts.map +1 -1
  256. package/dist/types.js.map +1 -1
  257. package/dist/vault/index.d.ts +0 -7
  258. package/dist/vault/index.d.ts.map +1 -1
  259. package/dist/vault/index.js +1 -36
  260. package/dist/vault/index.js.map +1 -1
  261. package/package.json +8 -6
  262. package/dist/adapters/github/repo.d.ts +0 -8
  263. package/dist/adapters/github/repo.d.ts.map +0 -1
  264. package/dist/adapters/github/repo.js +0 -92
  265. package/dist/adapters/github/repo.js.map +0 -1
  266. package/dist/adapters/github/tools/sync.d.ts +0 -13
  267. package/dist/adapters/github/tools/sync.d.ts.map +0 -1
  268. package/dist/adapters/github/tools/sync.js +0 -29
  269. package/dist/adapters/github/tools/sync.js.map +0 -1
  270. package/dist/cli/sandbox.d.ts +0 -3
  271. package/dist/cli/sandbox.d.ts.map +0 -1
  272. package/dist/cli/sandbox.js +0 -80
  273. package/dist/cli/sandbox.js.map +0 -1
  274. package/dist/cli/sessions.d.ts +0 -2
  275. package/dist/cli/sessions.d.ts.map +0 -1
  276. package/dist/cli/sessions.js +0 -78
  277. package/dist/cli/sessions.js.map +0 -1
  278. package/dist/sessions/migrate-common.d.ts.map +0 -1
  279. package/dist/sessions/migrate-common.js.map +0 -1
  280. package/dist/sessions/migrate-pi-084.d.ts +0 -7
  281. package/dist/sessions/migrate-pi-084.d.ts.map +0 -1
  282. package/dist/sessions/migrate-pi-084.js +0 -293
  283. package/dist/sessions/migrate-pi-084.js.map +0 -1
  284. package/dist/sessions/migrate-v3.d.ts.map +0 -1
  285. package/dist/sessions/migrate-v3.js.map +0 -1
  286. package/dist/settings/migrate.d.ts +0 -16
  287. package/dist/settings/migrate.d.ts.map +0 -1
  288. package/dist/settings/migrate.js +0 -70
  289. package/dist/settings/migrate.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"checks.d.ts","sourceRoot":"","sources":["../../../../src/adapters/github/tools/checks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAE/B,OAAO,KAAK,EAAsB,eAAe,EAAE,MAAM,aAAa,CAAC;AAEvE,eAAO,MAAM,kBAAkB,kBAAkB,CAAC;AAElD,QAAA,MAAM,kBAAkB;;;EAetB,CAAC;AAyBH,wBAAgB,sBAAsB,IAAI;IACxC,IAAI,EAAE,SAAS,CAAC,OAAO,kBAAkB,CAAC,CAAC;IAC3C,uBAAuB,EAAE,CAAC,GAAG,EAAE,eAAe,GAAG,IAAI,KAAK,IAAI,CAAC;CAChE,CAmDA"}
1
+ {"version":3,"file":"checks.d.ts","sourceRoot":"","sources":["../../../../src/adapters/github/tools/checks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAE/B,OAAO,KAAK,EAAsB,eAAe,EAAE,MAAM,aAAa,CAAC;AAEvE,eAAO,MAAM,kBAAkB,kBAAkB,CAAC;AAElD,QAAA,MAAM,kBAAkB;;;EAetB,CAAC;AAuBH,wBAAgB,sBAAsB,IAAI;IACxC,IAAI,EAAE,SAAS,CAAC,OAAO,kBAAkB,CAAC,CAAC;IAC3C,uBAAuB,EAAE,CAAC,GAAG,EAAE,eAAe,GAAG,IAAI,KAAK,IAAI,CAAC;CAChE,CAmDA"}
@@ -21,9 +21,7 @@ function formatCheckLine(run) {
21
21
  : run.conclusion === "success"
22
22
  ? "✓"
23
23
  : "−";
24
- const handle = run.appSlug === "github-actions"
25
- ? `[job ${run.id}]`
26
- : `[external CI: ${run.appSlug ?? "unknown"} — logs not on GitHub]`;
24
+ const handle = run.source === "actions" ? `[job ${run.id}]` : "[commit status — logs not on GitHub]";
27
25
  const line = `${marker} ${run.name}: ${state} ${handle}${run.url ? ` (${run.url})` : ""}`;
28
26
  const failed = run.conclusion !== null && FAILING_CONCLUSIONS.has(run.conclusion);
29
27
  return failed && run.outputSummary
@@ -33,11 +31,11 @@ function formatCheckLine(run) {
33
31
  export function createGithubChecksTool() {
34
32
  const { tool, setFn } = defineHostFnTool({
35
33
  name: GITHUB_CHECKS_TOOL,
36
- description: "Read CI status (check runs) for a branch you pushed with github_pr, or for this " +
34
+ description: "Read CI status (GitHub Actions jobs and commit statuses) for a branch you pushed, or for this " +
37
35
  "conversation's pull request when branch is omitted. Pass job_id (a [job …] id, " +
38
- "GitHub Actions) from the summary to fetch that run's log. External CI checks keep " +
39
- "logs on their own service: use " +
40
- "their summary/url, or reproduce the failure locally in ./repo. Only available in " +
36
+ "GitHub Actions) from the summary to fetch that job's log. Commit statuses from external " +
37
+ "CI keep logs on their own service: use " +
38
+ "their summary/url, or reproduce the failure locally in your clone. Only available in " +
41
39
  "GitHub conversations.",
42
40
  parameters: githubChecksSchema,
43
41
  unavailable: `${GITHUB_CHECKS_TOOL} is only available in GitHub conversations.`,
@@ -55,7 +53,7 @@ export function createGithubChecksTool() {
55
53
  content: [
56
54
  {
57
55
  type: "text",
58
- text: "No check runs found — CI may not have started yet; try again shortly.",
56
+ text: "No CI jobs or commit statuses found — CI may not have started yet; try again shortly.",
59
57
  },
60
58
  ],
61
59
  details: undefined,
@@ -1 +1 @@
1
- {"version":3,"file":"checks.js","sourceRoot":"","sources":["../../../../src/adapters/github/tools/checks.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AgentTool } from \"@earendil-works/pi-agent-core\";\nimport { Type } from \"typebox\";\nimport { defineHostFnTool } from \"../../../harness/tools/host-fn-tool.js\";\nimport type { GithubCheckSummary, GithubChecksFns } from \"../types.js\";\n\nexport const GITHUB_CHECKS_TOOL = \"github_checks\";\n\nconst githubChecksSchema = Type.Object({\n branch: Type.Optional(\n Type.String({\n description:\n \"Branch whose CI checks to read (e.g. a pi/<name> branch you pushed). \" +\n \"Omit in a pull-request conversation to read the PR head's checks.\",\n }),\n ),\n job_id: Type.Optional(\n Type.Number({\n description:\n \"A [job …] id from the summary output (GitHub Actions checks) — returns that \" +\n \"CI job's log (tail) instead of the summary, for diagnosing a failing check.\",\n }),\n ),\n});\n\nconst FAILING_CONCLUSIONS = new Set([\"failure\", \"timed_out\", \"action_required\", \"cancelled\"]);\n\nfunction formatCheckLine(run: GithubCheckSummary): string {\n const state = run.status === \"completed\" ? (run.conclusion ?? \"unknown\") : run.status;\n const marker =\n run.conclusion === null\n ? \"…\"\n : FAILING_CONCLUSIONS.has(run.conclusion)\n ? \"✗\"\n : run.conclusion === \"success\"\n ? \"✓\"\n : \"−\";\n const handle =\n run.appSlug === \"github-actions\"\n ? `[job ${run.id}]`\n : `[external CI: ${run.appSlug ?? \"unknown\"} — logs not on GitHub]`;\n const line = `${marker} ${run.name}: ${state} ${handle}${run.url ? ` (${run.url})` : \"\"}`;\n const failed = run.conclusion !== null && FAILING_CONCLUSIONS.has(run.conclusion);\n return failed && run.outputSummary\n ? `${line}\\n ↳ ${run.outputSummary.replace(/\\s*\\n\\s*/g, \" \")}`\n : line;\n}\n\nexport function createGithubChecksTool(): {\n tool: AgentTool<typeof githubChecksSchema>;\n setGithubChecksFunction: (fns: GithubChecksFns | null) => void;\n} {\n const { tool, setFn } = defineHostFnTool<GithubChecksFns, typeof githubChecksSchema>({\n name: GITHUB_CHECKS_TOOL,\n description:\n \"Read CI status (check runs) for a branch you pushed with github_pr, or for this \" +\n \"conversation's pull request when branch is omitted. Pass job_id (a [job …] id, \" +\n \"GitHub Actions) from the summary to fetch that run's log. External CI checks keep \" +\n \"logs on their own service: use \" +\n \"their summary/url, or reproduce the failure locally in ./repo. Only available in \" +\n \"GitHub conversations.\",\n parameters: githubChecksSchema,\n unavailable: `${GITHUB_CHECKS_TOOL} is only available in GitHub conversations.`,\n run: async (checksFns, args) => {\n if (args.job_id !== undefined) {\n const logText = await checksFns.getJobLog(args.job_id);\n return {\n content: [{ type: \"text\" as const, text: logText || \"(empty log)\" }],\n details: undefined,\n };\n }\n\n const runs = await checksFns.getChecks(args.branch);\n if (runs.length === 0) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: \"No check runs found — CI may not have started yet; try again shortly.\",\n },\n ],\n details: undefined,\n };\n }\n const completed = runs.filter((run) => run.status === \"completed\");\n const failing = completed.filter(\n (run) => run.conclusion !== null && FAILING_CONCLUSIONS.has(run.conclusion),\n );\n const summary = `${runs.length} check(s): ${completed.length} completed, ${runs.length - completed.length} running, ${failing.length} failing`;\n return {\n content: [\n {\n type: \"text\" as const,\n text: [summary, ...runs.map(formatCheckLine)].join(\"\\n\"),\n },\n ],\n details: undefined,\n };\n },\n });\n\n return { tool, setGithubChecksFunction: setFn };\n}\n"]}
1
+ {"version":3,"file":"checks.js","sourceRoot":"","sources":["../../../../src/adapters/github/tools/checks.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AgentTool } from \"@earendil-works/pi-agent-core\";\nimport { Type } from \"typebox\";\nimport { defineHostFnTool } from \"../../../harness/tools/host-fn-tool.js\";\nimport type { GithubCheckSummary, GithubChecksFns } from \"../types.js\";\n\nexport const GITHUB_CHECKS_TOOL = \"github_checks\";\n\nconst githubChecksSchema = Type.Object({\n branch: Type.Optional(\n Type.String({\n description:\n \"Branch whose CI checks to read (e.g. a pi/<name> branch you pushed). \" +\n \"Omit in a pull-request conversation to read the PR head's checks.\",\n }),\n ),\n job_id: Type.Optional(\n Type.Number({\n description:\n \"A [job …] id from the summary output (GitHub Actions checks) — returns that \" +\n \"CI job's log (tail) instead of the summary, for diagnosing a failing check.\",\n }),\n ),\n});\n\nconst FAILING_CONCLUSIONS = new Set([\"failure\", \"timed_out\", \"action_required\", \"cancelled\"]);\n\nfunction formatCheckLine(run: GithubCheckSummary): string {\n const state = run.status === \"completed\" ? (run.conclusion ?? \"unknown\") : run.status;\n const marker =\n run.conclusion === null\n ? \"…\"\n : FAILING_CONCLUSIONS.has(run.conclusion)\n ? \"✗\"\n : run.conclusion === \"success\"\n ? \"✓\"\n : \"−\";\n const handle =\n run.source === \"actions\" ? `[job ${run.id}]` : \"[commit status — logs not on GitHub]\";\n const line = `${marker} ${run.name}: ${state} ${handle}${run.url ? ` (${run.url})` : \"\"}`;\n const failed = run.conclusion !== null && FAILING_CONCLUSIONS.has(run.conclusion);\n return failed && run.outputSummary\n ? `${line}\\n ↳ ${run.outputSummary.replace(/\\s*\\n\\s*/g, \" \")}`\n : line;\n}\n\nexport function createGithubChecksTool(): {\n tool: AgentTool<typeof githubChecksSchema>;\n setGithubChecksFunction: (fns: GithubChecksFns | null) => void;\n} {\n const { tool, setFn } = defineHostFnTool<GithubChecksFns, typeof githubChecksSchema>({\n name: GITHUB_CHECKS_TOOL,\n description:\n \"Read CI status (GitHub Actions jobs and commit statuses) for a branch you pushed, or for this \" +\n \"conversation's pull request when branch is omitted. Pass job_id (a [job …] id, \" +\n \"GitHub Actions) from the summary to fetch that job's log. Commit statuses from external \" +\n \"CI keep logs on their own service: use \" +\n \"their summary/url, or reproduce the failure locally in your clone. Only available in \" +\n \"GitHub conversations.\",\n parameters: githubChecksSchema,\n unavailable: `${GITHUB_CHECKS_TOOL} is only available in GitHub conversations.`,\n run: async (checksFns, args) => {\n if (args.job_id !== undefined) {\n const logText = await checksFns.getJobLog(args.job_id);\n return {\n content: [{ type: \"text\" as const, text: logText || \"(empty log)\" }],\n details: undefined,\n };\n }\n\n const runs = await checksFns.getChecks(args.branch);\n if (runs.length === 0) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: \"No CI jobs or commit statuses found — CI may not have started yet; try again shortly.\",\n },\n ],\n details: undefined,\n };\n }\n const completed = runs.filter((run) => run.status === \"completed\");\n const failing = completed.filter(\n (run) => run.conclusion !== null && FAILING_CONCLUSIONS.has(run.conclusion),\n );\n const summary = `${runs.length} check(s): ${completed.length} completed, ${runs.length - completed.length} running, ${failing.length} failing`;\n return {\n content: [\n {\n type: \"text\" as const,\n text: [summary, ...runs.map(formatCheckLine)].join(\"\\n\"),\n },\n ],\n details: undefined,\n };\n },\n });\n\n return { tool, setGithubChecksFunction: setFn };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"pr.d.ts","sourceRoot":"","sources":["../../../../src/adapters/github/tools/pr.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAE/B,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAEnE,eAAO,MAAM,cAAc,cAAc,CAAC;AAE1C,QAAA,MAAM,cAAc;;;;;;EAalB,CAAC;AAIH,wBAAgB,kBAAkB,IAAI;IACpC,IAAI,EAAE,SAAS,CAAC,OAAO,cAAc,CAAC,CAAC;IACvC,mBAAmB,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,eAAe,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC,GAAG,IAAI,KAAK,IAAI,CAAC;CACnG,CA+BA"}
1
+ {"version":3,"file":"pr.d.ts","sourceRoot":"","sources":["../../../../src/adapters/github/tools/pr.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAE/B,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAEnE,eAAO,MAAM,cAAc,cAAc,CAAC;AAE1C,QAAA,MAAM,cAAc;;;;;;EAYlB,CAAC;AAIH,wBAAgB,kBAAkB,IAAI;IACpC,IAAI,EAAE,SAAS,CAAC,OAAO,cAAc,CAAC,CAAC;IACvC,mBAAmB,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,eAAe,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC,GAAG,IAAI,KAAK,IAAI,CAAC;CACnG,CA8BA"}
@@ -3,9 +3,8 @@ import { defineHostFnTool } from "../../../harness/tools/host-fn-tool.js";
3
3
  export const GITHUB_PR_TOOL = "github_pr";
4
4
  const githubPrSchema = Type.Object({
5
5
  branch: Type.String({
6
- description: 'Local branch inside ./repo to push. Must be named pi/<something> (e.g. "pi/fix-42"); ' +
7
- "the default branch is never pushable. To update this conversation's own PR, pass its " +
8
- "checked-out pi/* head branch.",
6
+ description: 'Branch you already pushed from your sandbox (e.g. "pi/fix-42"); it becomes the pull ' +
7
+ "request head.",
9
8
  }),
10
9
  title: Type.String({ description: "Pull request title." }),
11
10
  body: Type.Optional(Type.String({ description: "Pull request description (Markdown)." })),
@@ -15,11 +14,10 @@ const githubPrSchema = Type.Object({
15
14
  export function createGithubPrTool() {
16
15
  const { tool, setFn } = defineHostFnTool({
17
16
  name: GITHUB_PR_TOOL,
18
- description: "Push a pi/<name> branch you committed inside ./repo and open a GitHub pull request " +
19
- "(or draft) for it. Pushing a branch that already has an open PR — including this " +
20
- "conversation's own PR head — updates that PR instead of opening a new one. Only " +
21
- "available in GitHub issue/PR conversations. You cannot push to the default branch " +
22
- "and you cannot merge — humans review and merge the PR.",
17
+ description: "Open a GitHub pull request (or draft) for a branch you already pushed with git from " +
18
+ "your sandbox. If the branch already has an open PR, returns that PR instead of " +
19
+ "opening another. Only available in GitHub issue/PR conversations. You cannot merge — " +
20
+ "humans review and merge the PR.",
23
21
  parameters: githubPrSchema,
24
22
  unavailable: `${GITHUB_PR_TOOL} is only available in GitHub conversations.`,
25
23
  run: async (prFn, args) => {
@@ -29,7 +27,7 @@ export function createGithubPrTool() {
29
27
  {
30
28
  type: "text",
31
29
  text: result.updatedExisting
32
- ? `Pushed to existing PR #${result.number}: ${result.url}`
30
+ ? `Branch already has PR #${result.number}: ${result.url}`
33
31
  : `Opened ${args.draft ? "draft " : ""}PR #${result.number}: ${result.url}`,
34
32
  },
35
33
  ],
@@ -1 +1 @@
1
- {"version":3,"file":"pr.js","sourceRoot":"","sources":["../../../../src/adapters/github/tools/pr.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAC/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAG1E,MAAM,CAAC,MAAM,cAAc,GAAG,WAAW,CAAC;AAE1C,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC;IACjC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;QAClB,WAAW,EACT,uFAAuF;YACvF,uFAAuF;YACvF,+BAA+B;KAClC,CAAC;IACF,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,qBAAqB,EAAE,CAAC;IAC1D,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,sCAAsC,EAAE,CAAC,CAAC;IACzF,IAAI,EAAE,IAAI,CAAC,QAAQ,CACjB,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,6DAA6D,EAAE,CAAC,CAC5F;IACD,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,+BAA+B,EAAE,CAAC,CAAC;CACrF,CAAC,CAAC;AAIH,MAAM,UAAU,kBAAkB;IAIhC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,gBAAgB,CAGtC;QACA,IAAI,EAAE,cAAc;QACpB,WAAW,EACT,qFAAqF;YACrF,mFAAmF;YACnF,kFAAkF;YAClF,oFAAoF;YACpF,wDAAwD;QAC1D,UAAU,EAAE,cAAc;QAC1B,WAAW,EAAE,GAAG,cAAc,6CAA6C;QAC3E,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,IAAkB,EAAE,EAAE;YACtC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;YAChC,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,MAAM,CAAC,eAAe;4BAC1B,CAAC,CAAC,0BAA0B,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,GAAG,EAAE;4BAC1D,CAAC,CAAC,UAAU,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,GAAG,EAAE;qBAC9E;iBACF;gBACD,OAAO,EAAE,SAAS;aACnB,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;IAEH,OAAO,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,CAAC;AAC9C,CAAC","sourcesContent":["import type { AgentTool } from \"@earendil-works/pi-agent-core\";\nimport { Type } from \"typebox\";\nimport { defineHostFnTool } from \"../../../harness/tools/host-fn-tool.js\";\nimport type { GithubPrRequest, GithubPrResult } from \"../types.js\";\n\nexport const GITHUB_PR_TOOL = \"github_pr\";\n\nconst githubPrSchema = Type.Object({\n branch: Type.String({\n description:\n 'Local branch inside ./repo to push. Must be named pi/<something> (e.g. \"pi/fix-42\"); ' +\n \"the default branch is never pushable. To update this conversation's own PR, pass its \" +\n \"checked-out pi/* head branch.\",\n }),\n title: Type.String({ description: \"Pull request title.\" }),\n body: Type.Optional(Type.String({ description: \"Pull request description (Markdown).\" })),\n base: Type.Optional(\n Type.String({ description: \"Target branch; defaults to the repository's default branch.\" }),\n ),\n draft: Type.Optional(Type.Boolean({ description: \"Open as a draft pull request.\" })),\n});\n\ntype GithubPrArgs = GithubPrRequest;\n\nexport function createGithubPrTool(): {\n tool: AgentTool<typeof githubPrSchema>;\n setGithubPrFunction: (fn: ((request: GithubPrRequest) => Promise<GithubPrResult>) | null) => void;\n} {\n const { tool, setFn } = defineHostFnTool<\n (request: GithubPrRequest) => Promise<GithubPrResult>,\n typeof githubPrSchema\n >({\n name: GITHUB_PR_TOOL,\n description:\n \"Push a pi/<name> branch you committed inside ./repo and open a GitHub pull request \" +\n \"(or draft) for it. Pushing a branch that already has an open PR — including this \" +\n \"conversation's own PR head — updates that PR instead of opening a new one. Only \" +\n \"available in GitHub issue/PR conversations. You cannot push to the default branch \" +\n \"and you cannot merge — humans review and merge the PR.\",\n parameters: githubPrSchema,\n unavailable: `${GITHUB_PR_TOOL} is only available in GitHub conversations.`,\n run: async (prFn, args: GithubPrArgs) => {\n const result = await prFn(args);\n return {\n content: [\n {\n type: \"text\" as const,\n text: result.updatedExisting\n ? `Pushed to existing PR #${result.number}: ${result.url}`\n : `Opened ${args.draft ? \"draft \" : \"\"}PR #${result.number}: ${result.url}`,\n },\n ],\n details: undefined,\n };\n },\n });\n\n return { tool, setGithubPrFunction: setFn };\n}\n"]}
1
+ {"version":3,"file":"pr.js","sourceRoot":"","sources":["../../../../src/adapters/github/tools/pr.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAC/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAG1E,MAAM,CAAC,MAAM,cAAc,GAAG,WAAW,CAAC;AAE1C,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC;IACjC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;QAClB,WAAW,EACT,sFAAsF;YACtF,eAAe;KAClB,CAAC;IACF,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,qBAAqB,EAAE,CAAC;IAC1D,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,sCAAsC,EAAE,CAAC,CAAC;IACzF,IAAI,EAAE,IAAI,CAAC,QAAQ,CACjB,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,6DAA6D,EAAE,CAAC,CAC5F;IACD,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,+BAA+B,EAAE,CAAC,CAAC;CACrF,CAAC,CAAC;AAIH,MAAM,UAAU,kBAAkB;IAIhC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,gBAAgB,CAGtC;QACA,IAAI,EAAE,cAAc;QACpB,WAAW,EACT,sFAAsF;YACtF,iFAAiF;YACjF,uFAAuF;YACvF,iCAAiC;QACnC,UAAU,EAAE,cAAc;QAC1B,WAAW,EAAE,GAAG,cAAc,6CAA6C;QAC3E,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,IAAkB,EAAE,EAAE;YACtC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;YAChC,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,MAAM,CAAC,eAAe;4BAC1B,CAAC,CAAC,0BAA0B,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,GAAG,EAAE;4BAC1D,CAAC,CAAC,UAAU,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,GAAG,EAAE;qBAC9E;iBACF;gBACD,OAAO,EAAE,SAAS;aACnB,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;IAEH,OAAO,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,CAAC;AAC9C,CAAC","sourcesContent":["import type { AgentTool } from \"@earendil-works/pi-agent-core\";\nimport { Type } from \"typebox\";\nimport { defineHostFnTool } from \"../../../harness/tools/host-fn-tool.js\";\nimport type { GithubPrRequest, GithubPrResult } from \"../types.js\";\n\nexport const GITHUB_PR_TOOL = \"github_pr\";\n\nconst githubPrSchema = Type.Object({\n branch: Type.String({\n description:\n 'Branch you already pushed from your sandbox (e.g. \"pi/fix-42\"); it becomes the pull ' +\n \"request head.\",\n }),\n title: Type.String({ description: \"Pull request title.\" }),\n body: Type.Optional(Type.String({ description: \"Pull request description (Markdown).\" })),\n base: Type.Optional(\n Type.String({ description: \"Target branch; defaults to the repository's default branch.\" }),\n ),\n draft: Type.Optional(Type.Boolean({ description: \"Open as a draft pull request.\" })),\n});\n\ntype GithubPrArgs = GithubPrRequest;\n\nexport function createGithubPrTool(): {\n tool: AgentTool<typeof githubPrSchema>;\n setGithubPrFunction: (fn: ((request: GithubPrRequest) => Promise<GithubPrResult>) | null) => void;\n} {\n const { tool, setFn } = defineHostFnTool<\n (request: GithubPrRequest) => Promise<GithubPrResult>,\n typeof githubPrSchema\n >({\n name: GITHUB_PR_TOOL,\n description:\n \"Open a GitHub pull request (or draft) for a branch you already pushed with git from \" +\n \"your sandbox. If the branch already has an open PR, returns that PR instead of \" +\n \"opening another. Only available in GitHub issue/PR conversations. You cannot merge — \" +\n \"humans review and merge the PR.\",\n parameters: githubPrSchema,\n unavailable: `${GITHUB_PR_TOOL} is only available in GitHub conversations.`,\n run: async (prFn, args: GithubPrArgs) => {\n const result = await prFn(args);\n return {\n content: [\n {\n type: \"text\" as const,\n text: result.updatedExisting\n ? `Branch already has PR #${result.number}: ${result.url}`\n : `Opened ${args.draft ? \"draft \" : \"\"}PR #${result.number}: ${result.url}`,\n },\n ],\n details: undefined,\n };\n },\n });\n\n return { tool, setGithubPrFunction: setFn };\n}\n"]}
@@ -7,30 +7,57 @@ export interface GithubEvent extends ConversationEvent {
7
7
  userName?: string;
8
8
  }
9
9
  export type GithubApi = Pick<GithubClient, keyof GithubClient>;
10
- export type GithubConversationBot = Pick<GithubMessagingBot, "postComment" | "updateMessage" | "deleteComment" | "addReaction" | "logBotResponse" | "getMessagingInfo">;
11
- export interface GithubBotConfig {
12
- appId: string;
13
- privateKey: string;
14
- installationId: string;
10
+ export type GithubConversationBot = Pick<GithubMessagingBot, "postComment" | "updateMessage" | "deleteComment" | "addReaction" | "logBotResponse" | "getMessagingInfo" | "capabilities" | "agentIdentity">;
11
+ export type GithubTrigger = "mention" | "assign" | "review" | "followup";
12
+ export type GithubCapability = "triage" | "push";
13
+ export type GithubTriggerPermission = "write" | "maintain" | "admin";
14
+ export interface GithubPolicy {
15
15
  repos: string[];
16
- pollIntervalMs: number;
17
- workspace: Workspace;
18
- syncStatePath: string;
16
+ publicRepos: boolean;
17
+ users: string[] | null;
18
+ minPermission: GithubTriggerPermission;
19
+ triggers: ReadonlySet<GithubTrigger>;
20
+ capabilities: ReadonlySet<GithubCapability>;
19
21
  }
20
- interface GithubRepoSyncState {
21
- baseline: string;
22
- cursor: string;
23
- seenComments: number[];
24
- seenIssues: number[];
25
- seenReviewComments?: number[];
22
+ export interface GithubBotConfig {
23
+ token: string;
24
+ policy: GithubPolicy;
25
+ workspace: Workspace;
26
26
  }
27
- export interface GithubSyncState {
28
- repos: Record<string, GithubRepoSyncState>;
27
+ export interface GithubAgentIdentity {
28
+ login: string;
29
+ email: string;
29
30
  }
30
31
  export interface GithubRepoRef {
31
32
  owner: string;
32
33
  repo: string;
33
34
  }
35
+ export interface GithubActivity {
36
+ kind: "opened" | "comment" | "review_comment" | "assigned" | "review_requested";
37
+ repo: GithubRepoRef & {
38
+ private: boolean;
39
+ };
40
+ number: number;
41
+ isPr: boolean;
42
+ sender: {
43
+ login: string;
44
+ isBot: boolean;
45
+ };
46
+ target: string | null;
47
+ ts: string;
48
+ text: string;
49
+ createdAt: string;
50
+ issueTitle: string;
51
+ issueBody: string;
52
+ review?: GithubReviewAnchor;
53
+ }
54
+ export interface GithubReviewAnchor {
55
+ commentId: number;
56
+ path: string;
57
+ line: number | null;
58
+ diffHunk: string;
59
+ inReplyToId?: number;
60
+ }
34
61
  interface GithubUser {
35
62
  login: string;
36
63
  type: string;
@@ -72,10 +99,6 @@ export interface GithubReviewComment {
72
99
  diff_hunk: string;
73
100
  in_reply_to_id?: number;
74
101
  }
75
- export interface GithubRepository {
76
- name: string;
77
- owner: GithubUser;
78
- }
79
102
  export interface GithubRepositoryDetails {
80
103
  default_branch: string;
81
104
  }
@@ -120,56 +143,30 @@ export interface GithubPullRequestReview {
120
143
  state: string;
121
144
  submitted_at?: string;
122
145
  }
123
- export interface GithubCheckRun {
146
+ export interface GithubCombinedStatus {
147
+ sha: string;
148
+ statuses: {
149
+ id: number;
150
+ context: string;
151
+ state: string;
152
+ description: string | null;
153
+ target_url: string | null;
154
+ }[];
155
+ }
156
+ export interface GithubWorkflowRun {
157
+ id: number;
158
+ name: string | null;
159
+ }
160
+ export interface GithubWorkflowJob {
124
161
  id: number;
125
162
  name: string;
126
163
  status: string;
127
164
  conclusion: string | null;
128
165
  html_url: string | null;
129
- app?: {
130
- slug?: string;
131
- } | null;
132
- output?: {
133
- title?: string | null;
134
- summary?: string | null;
135
- } | null;
136
166
  }
137
- export type GithubTokenPermissions = Partial<Record<"contents" | "pull_requests" | "issues", "read" | "write">>;
138
167
  export type GithubReactionContent = "+1" | "-1" | "laugh" | "confused" | "heart" | "hooray" | "rocket" | "eyes";
139
- export interface CloneRepoOptions {
140
- url: string;
141
- dir: string;
142
- token: string;
143
- botLogin: string;
144
- botEmail: string;
145
- prNumber?: number;
146
- prHeadBranch?: string;
147
- }
148
- export interface PushBranchOptions {
149
- dir: string;
150
- branch: string;
151
- token: string;
152
- }
153
- export interface SyncRepoOptions {
154
- dir: string;
155
- token: string;
156
- branch?: string;
157
- prNumber?: number;
158
- prHeadBranch?: string;
159
- defaultBranch?: string;
160
- }
161
- export interface SyncRepoResult {
162
- target: string;
163
- fetchedSha: string;
164
- updatedCheckout: boolean;
165
- dirty: boolean;
166
- currentBranch: string;
167
- localCommits: number;
168
- }
169
168
  export interface GithubClientOptions {
170
- appId: string;
171
- privateKey: string;
172
- installationId: string;
169
+ token: string;
173
170
  baseUrl?: string;
174
171
  fetchImpl?: typeof fetch;
175
172
  }
@@ -191,7 +188,7 @@ export interface GithubCheckSummary {
191
188
  status: string;
192
189
  conclusion: string | null;
193
190
  url: string | null;
194
- appSlug: string | null;
191
+ source: "actions" | "status";
195
192
  outputSummary: string | null;
196
193
  }
197
194
  export interface GithubChecksFns {
@@ -233,26 +230,28 @@ export interface GithubIssueRequest {
233
230
  assignees?: string[];
234
231
  state_reason?: "completed" | "not_planned";
235
232
  }
236
- export type GithubSyncFn = (branch?: string) => Promise<string>;
237
233
  export type GithubReviewReplyFn = (commentId: number, body: string) => Promise<{
238
234
  url: string;
239
235
  }>;
240
236
  export type GithubReadFn = (request: GithubReadRequest) => Promise<GithubReadResult>;
241
237
  export type GithubIssueFn = (request: GithubIssueRequest) => Promise<string>;
242
238
  export interface PlatformGithubOps {
243
- pushAndCreatePr(conversationId: string, request: GithubPrRequest): Promise<GithubPrResult>;
239
+ createPullRequest(conversationId: string, request: GithubPrRequest): Promise<GithubPrResult>;
244
240
  getChecks(conversationId: string, branch?: string): Promise<GithubCheckSummary[]>;
245
241
  getJobLog(conversationId: string, jobId: number): Promise<string>;
246
242
  replyToReviewThread(conversationId: string, commentId: number, body: string): Promise<{
247
243
  url: string;
248
244
  }>;
249
- syncRepo(conversationId: string, branch?: string): Promise<string>;
250
245
  readGithub(conversationId: string, request: GithubReadRequest): Promise<GithubReadResult>;
251
246
  manageIssue(conversationId: string, request: GithubIssueRequest): Promise<string>;
252
247
  }
248
+ export interface GithubWebhookDelivery {
249
+ event: string;
250
+ payload: unknown;
251
+ }
253
252
  export interface GithubWebhookOptions {
254
253
  secret: string;
255
- onPoke: () => void;
254
+ onDelivery: (delivery: GithubWebhookDelivery) => void;
256
255
  }
257
256
  export {};
258
257
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/adapters/github/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/adapters/github/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/adapters/github/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { ConversationEvent } from \"../../types.js\";\nimport type { Workspace } from \"../../office/types.js\";\nimport type { GithubMessagingBot } from \"./bot.js\";\nimport type { GithubClient } from \"./client.js\";\n\nexport interface GithubEvent extends ConversationEvent {\n type: \"message\" | \"issue\";\n userName?: string;\n}\n\nexport type GithubApi = Pick<GithubClient, keyof GithubClient>;\n\nexport type GithubConversationBot = Pick<\n GithubMessagingBot,\n | \"postComment\"\n | \"updateMessage\"\n | \"deleteComment\"\n | \"addReaction\"\n | \"logBotResponse\"\n | \"getMessagingInfo\"\n>;\n\nexport interface GithubBotConfig {\n appId: string;\n privateKey: string;\n installationId: string;\n repos: string[];\n pollIntervalMs: number;\n workspace: Workspace;\n syncStatePath: string;\n}\n\ninterface GithubRepoSyncState {\n baseline: string;\n cursor: string;\n seenComments: number[];\n seenIssues: number[];\n seenReviewComments?: number[];\n}\n\nexport interface GithubSyncState {\n repos: Record<string, GithubRepoSyncState>;\n}\n\nexport interface GithubRepoRef {\n owner: string;\n repo: string;\n}\n\ninterface GithubUser {\n login: string;\n type: string;\n}\n\nexport interface GithubIssue {\n id: number;\n number: number;\n title: string;\n body: string | null;\n user: GithubUser;\n created_at: string;\n updated_at: string;\n pull_request?: object;\n state?: string;\n labels?: { name: string }[];\n assignees?: { login: string }[];\n}\n\nexport interface GithubIssueComment {\n id: number;\n body: string;\n user: GithubUser;\n created_at: string;\n updated_at: string;\n issue_url: string;\n}\n\nexport interface GithubReviewComment {\n id: number;\n body: string;\n user: GithubUser;\n created_at: string;\n updated_at: string;\n pull_request_url: string;\n path: string;\n line: number | null;\n diff_hunk: string;\n in_reply_to_id?: number;\n}\n\nexport interface GithubRepository {\n name: string;\n owner: GithubUser;\n}\n\nexport interface GithubRepositoryDetails {\n default_branch: string;\n}\n\nexport interface GithubCollaboratorPermission {\n permission: string;\n role_name?: string;\n}\n\nexport interface GithubPullRequest {\n number: number;\n html_url: string;\n head?: { ref: string; sha: string; repo?: { full_name?: string } | null };\n base?: { ref: string };\n title?: string;\n body?: string | null;\n state?: string;\n draft?: boolean;\n merged?: boolean;\n mergeable_state?: string;\n changed_files?: number;\n additions?: number;\n deletions?: number;\n user?: GithubUser;\n}\n\nexport interface GithubPullRequestFile {\n filename: string;\n status: string;\n additions: number;\n deletions: number;\n}\n\nexport interface GithubPullRequestReview {\n id: number;\n user: GithubUser;\n body: string | null;\n state: string;\n submitted_at?: string;\n}\n\nexport interface GithubCheckRun {\n id: number;\n name: string;\n status: string;\n conclusion: string | null;\n html_url: string | null;\n app?: { slug?: string } | null;\n output?: { title?: string | null; summary?: string | null } | null;\n}\n\nexport type GithubTokenPermissions = Partial<\n Record<\"contents\" | \"pull_requests\" | \"issues\", \"read\" | \"write\">\n>;\n\nexport type GithubReactionContent =\n | \"+1\"\n | \"-1\"\n | \"laugh\"\n | \"confused\"\n | \"heart\"\n | \"hooray\"\n | \"rocket\"\n | \"eyes\";\n\nexport interface CloneRepoOptions {\n url: string;\n dir: string;\n token: string;\n botLogin: string;\n botEmail: string;\n prNumber?: number;\n prHeadBranch?: string;\n}\n\nexport interface PushBranchOptions {\n dir: string;\n branch: string;\n token: string;\n}\n\nexport interface SyncRepoOptions {\n dir: string;\n token: string;\n branch?: string;\n prNumber?: number;\n prHeadBranch?: string;\n defaultBranch?: string;\n}\n\nexport interface SyncRepoResult {\n target: string;\n fetchedSha: string;\n updatedCheckout: boolean;\n dirty: boolean;\n currentBranch: string;\n localCommits: number;\n}\n\nexport interface GithubClientOptions {\n appId: string;\n privateKey: string;\n installationId: string;\n baseUrl?: string;\n fetchImpl?: typeof fetch;\n}\n\nexport interface GithubPrRequest {\n branch: string;\n title: string;\n body?: string;\n base?: string;\n draft?: boolean;\n}\n\nexport interface GithubPrResult {\n number: number;\n url: string;\n updatedExisting?: boolean;\n}\n\nexport interface GithubCheckSummary {\n id: number;\n name: string;\n status: string;\n conclusion: string | null;\n url: string | null;\n appSlug: string | null;\n outputSummary: string | null;\n}\n\nexport interface GithubChecksFns {\n getChecks: (branch?: string) => Promise<GithubCheckSummary[]>;\n getJobLog: (jobId: number) => Promise<string>;\n}\n\nexport interface GithubReadRequest {\n action: \"pr\" | \"pr_files\" | \"pr_reviews\" | \"issue\" | \"comments\" | \"list\";\n number?: number;\n state?: string;\n labels?: string;\n creator?: string;\n}\n\nexport type GithubReadResult =\n | { kind: \"pr\"; pr: GithubPullRequest }\n | { kind: \"pr_files\"; files: GithubPullRequestFile[] }\n | { kind: \"pr_reviews\"; reviews: GithubPullRequestReview[]; threads: GithubReviewComment[] }\n | { kind: \"issue\"; issue: GithubIssue }\n | { kind: \"comments\"; comments: GithubIssueComment[] }\n | { kind: \"list\"; issues: GithubIssue[] };\n\nexport interface GithubIssueRequest {\n action: \"add_labels\" | \"remove_label\" | \"add_assignees\" | \"remove_assignees\" | \"close\" | \"reopen\";\n number?: number;\n labels?: string[];\n label?: string;\n assignees?: string[];\n state_reason?: \"completed\" | \"not_planned\";\n}\n\nexport type GithubSyncFn = (branch?: string) => Promise<string>;\n\nexport type GithubReviewReplyFn = (commentId: number, body: string) => Promise<{ url: string }>;\n\nexport type GithubReadFn = (request: GithubReadRequest) => Promise<GithubReadResult>;\n\nexport type GithubIssueFn = (request: GithubIssueRequest) => Promise<string>;\n\nexport interface PlatformGithubOps {\n pushAndCreatePr(conversationId: string, request: GithubPrRequest): Promise<GithubPrResult>;\n getChecks(conversationId: string, branch?: string): Promise<GithubCheckSummary[]>;\n getJobLog(conversationId: string, jobId: number): Promise<string>;\n replyToReviewThread(\n conversationId: string,\n commentId: number,\n body: string,\n ): Promise<{ url: string }>;\n syncRepo(conversationId: string, branch?: string): Promise<string>;\n readGithub(conversationId: string, request: GithubReadRequest): Promise<GithubReadResult>;\n manageIssue(conversationId: string, request: GithubIssueRequest): Promise<string>;\n}\n\nexport interface GithubWebhookOptions {\n secret: string;\n onPoke: () => void;\n}\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/adapters/github/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { ConversationEvent } from \"../../types.js\";\nimport type { Workspace } from \"../../office/types.js\";\nimport type { GithubMessagingBot } from \"./bot.js\";\nimport type { GithubClient } from \"./client.js\";\n\nexport interface GithubEvent extends ConversationEvent {\n type: \"message\" | \"issue\";\n userName?: string;\n}\n\nexport type GithubApi = Pick<GithubClient, keyof GithubClient>;\n\nexport type GithubConversationBot = Pick<\n GithubMessagingBot,\n | \"postComment\"\n | \"updateMessage\"\n | \"deleteComment\"\n | \"addReaction\"\n | \"logBotResponse\"\n | \"getMessagingInfo\"\n | \"capabilities\"\n | \"agentIdentity\"\n>;\n\nexport type GithubTrigger = \"mention\" | \"assign\" | \"review\" | \"followup\";\n\nexport type GithubCapability = \"triage\" | \"push\";\n\nexport type GithubTriggerPermission = \"write\" | \"maintain\" | \"admin\";\n\nexport interface GithubPolicy {\n repos: string[];\n publicRepos: boolean;\n users: string[] | null;\n minPermission: GithubTriggerPermission;\n triggers: ReadonlySet<GithubTrigger>;\n capabilities: ReadonlySet<GithubCapability>;\n}\n\nexport interface GithubBotConfig {\n token: string;\n policy: GithubPolicy;\n workspace: Workspace;\n}\n\nexport interface GithubAgentIdentity {\n login: string;\n email: string;\n}\n\nexport interface GithubRepoRef {\n owner: string;\n repo: string;\n}\n\nexport interface GithubActivity {\n kind: \"opened\" | \"comment\" | \"review_comment\" | \"assigned\" | \"review_requested\";\n repo: GithubRepoRef & { private: boolean };\n number: number;\n isPr: boolean;\n sender: { login: string; isBot: boolean };\n target: string | null;\n ts: string;\n text: string;\n createdAt: string;\n issueTitle: string;\n issueBody: string;\n review?: GithubReviewAnchor;\n}\n\nexport interface GithubReviewAnchor {\n commentId: number;\n path: string;\n line: number | null;\n diffHunk: string;\n inReplyToId?: number;\n}\n\ninterface GithubUser {\n login: string;\n type: string;\n}\n\nexport interface GithubIssue {\n id: number;\n number: number;\n title: string;\n body: string | null;\n user: GithubUser;\n created_at: string;\n updated_at: string;\n pull_request?: object;\n state?: string;\n labels?: { name: string }[];\n assignees?: { login: string }[];\n}\n\nexport interface GithubIssueComment {\n id: number;\n body: string;\n user: GithubUser;\n created_at: string;\n updated_at: string;\n issue_url: string;\n}\n\nexport interface GithubReviewComment {\n id: number;\n body: string;\n user: GithubUser;\n created_at: string;\n updated_at: string;\n pull_request_url: string;\n path: string;\n line: number | null;\n diff_hunk: string;\n in_reply_to_id?: number;\n}\n\nexport interface GithubRepositoryDetails {\n default_branch: string;\n}\n\nexport interface GithubCollaboratorPermission {\n permission: string;\n role_name?: string;\n}\n\nexport interface GithubPullRequest {\n number: number;\n html_url: string;\n head?: { ref: string; sha: string; repo?: { full_name?: string } | null };\n base?: { ref: string };\n title?: string;\n body?: string | null;\n state?: string;\n draft?: boolean;\n merged?: boolean;\n mergeable_state?: string;\n changed_files?: number;\n additions?: number;\n deletions?: number;\n user?: GithubUser;\n}\n\nexport interface GithubPullRequestFile {\n filename: string;\n status: string;\n additions: number;\n deletions: number;\n}\n\nexport interface GithubPullRequestReview {\n id: number;\n user: GithubUser;\n body: string | null;\n state: string;\n submitted_at?: string;\n}\n\nexport interface GithubCombinedStatus {\n sha: string;\n statuses: {\n id: number;\n context: string;\n state: string;\n description: string | null;\n target_url: string | null;\n }[];\n}\n\nexport interface GithubWorkflowRun {\n id: number;\n name: string | null;\n}\n\nexport interface GithubWorkflowJob {\n id: number;\n name: string;\n status: string;\n conclusion: string | null;\n html_url: string | null;\n}\n\nexport type GithubReactionContent =\n | \"+1\"\n | \"-1\"\n | \"laugh\"\n | \"confused\"\n | \"heart\"\n | \"hooray\"\n | \"rocket\"\n | \"eyes\";\n\nexport interface GithubClientOptions {\n token: string;\n baseUrl?: string;\n fetchImpl?: typeof fetch;\n}\n\nexport interface GithubPrRequest {\n branch: string;\n title: string;\n body?: string;\n base?: string;\n draft?: boolean;\n}\n\nexport interface GithubPrResult {\n number: number;\n url: string;\n updatedExisting?: boolean;\n}\n\nexport interface GithubCheckSummary {\n id: number;\n name: string;\n status: string;\n conclusion: string | null;\n url: string | null;\n source: \"actions\" | \"status\";\n outputSummary: string | null;\n}\n\nexport interface GithubChecksFns {\n getChecks: (branch?: string) => Promise<GithubCheckSummary[]>;\n getJobLog: (jobId: number) => Promise<string>;\n}\n\nexport interface GithubReadRequest {\n action: \"pr\" | \"pr_files\" | \"pr_reviews\" | \"issue\" | \"comments\" | \"list\";\n number?: number;\n state?: string;\n labels?: string;\n creator?: string;\n}\n\nexport type GithubReadResult =\n | { kind: \"pr\"; pr: GithubPullRequest }\n | { kind: \"pr_files\"; files: GithubPullRequestFile[] }\n | { kind: \"pr_reviews\"; reviews: GithubPullRequestReview[]; threads: GithubReviewComment[] }\n | { kind: \"issue\"; issue: GithubIssue }\n | { kind: \"comments\"; comments: GithubIssueComment[] }\n | { kind: \"list\"; issues: GithubIssue[] };\n\nexport interface GithubIssueRequest {\n action: \"add_labels\" | \"remove_label\" | \"add_assignees\" | \"remove_assignees\" | \"close\" | \"reopen\";\n number?: number;\n labels?: string[];\n label?: string;\n assignees?: string[];\n state_reason?: \"completed\" | \"not_planned\";\n}\n\nexport type GithubReviewReplyFn = (commentId: number, body: string) => Promise<{ url: string }>;\n\nexport type GithubReadFn = (request: GithubReadRequest) => Promise<GithubReadResult>;\n\nexport type GithubIssueFn = (request: GithubIssueRequest) => Promise<string>;\n\nexport interface PlatformGithubOps {\n createPullRequest(conversationId: string, request: GithubPrRequest): Promise<GithubPrResult>;\n getChecks(conversationId: string, branch?: string): Promise<GithubCheckSummary[]>;\n getJobLog(conversationId: string, jobId: number): Promise<string>;\n replyToReviewThread(\n conversationId: string,\n commentId: number,\n body: string,\n ): Promise<{ url: string }>;\n readGithub(conversationId: string, request: GithubReadRequest): Promise<GithubReadResult>;\n manageIssue(conversationId: string, request: GithubIssueRequest): Promise<string>;\n}\n\nexport interface GithubWebhookDelivery {\n event: string;\n payload: unknown;\n}\n\nexport interface GithubWebhookOptions {\n secret: string;\n onDelivery: (delivery: GithubWebhookDelivery) => void;\n}\n"]}
@@ -2,5 +2,6 @@ import type { IncomingMessage, ServerResponse } from "node:http";
2
2
  import type { GithubWebhookOptions } from "./types.js";
3
3
  export declare const GITHUB_WEBHOOK_PATH = "/github/webhook";
4
4
  export declare function verifyWebhookSignature(secret: string, body: Buffer, signatureHeader: string | undefined): boolean;
5
- export declare function handleGithubWebhookRequest(req: IncomingMessage, res: ServerResponse, url: URL, options: GithubWebhookOptions): Promise<boolean>;
5
+ export type GithubWebhookHandler = (req: IncomingMessage, res: ServerResponse, url: URL) => Promise<boolean>;
6
+ export declare function createGithubWebhookHandler(options: GithubWebhookOptions): GithubWebhookHandler;
6
7
  //# sourceMappingURL=webhook.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"webhook.d.ts","sourceRoot":"","sources":["../../../src/adapters/github/webhook.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEjE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEvD,eAAO,MAAM,mBAAmB,oBAAoB,CAAC;AAwBrD,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,eAAe,EAAE,MAAM,GAAG,SAAS,GAClC,OAAO,CAMT;AAED,wBAAsB,0BAA0B,CAC9C,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,GAAG,EAAE,GAAG,EACR,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,OAAO,CAAC,CAmClB"}
1
+ {"version":3,"file":"webhook.d.ts","sourceRoot":"","sources":["../../../src/adapters/github/webhook.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEjE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEvD,eAAO,MAAM,mBAAmB,oBAAoB,CAAC;AAqDrD,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,eAAe,EAAE,MAAM,GAAG,SAAS,GAClC,OAAO,CAMT;AAED,MAAM,MAAM,oBAAoB,GAAG,CACjC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,GAAG,EAAE,GAAG,KACL,OAAO,CAAC,OAAO,CAAC,CAAC;AAEtB,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,oBAAoB,GAAG,oBAAoB,CAG9F"}
@@ -1,7 +1,37 @@
1
1
  import { createHmac, timingSafeEqual } from "node:crypto";
2
2
  import * as log from "../../log.js";
3
3
  export const GITHUB_WEBHOOK_PATH = "/github/webhook";
4
- const POKE_EVENTS = new Set(["issues", "issue_comment", "pull_request_review_comment"]);
4
+ const ACTIVITY_EVENTS = new Set([
5
+ "issues",
6
+ "issue_comment",
7
+ "pull_request",
8
+ "pull_request_review_comment",
9
+ ]);
10
+ const MAX_REMEMBERED_DELIVERIES = 1000;
11
+ class GithubDeliveryLog {
12
+ constructor() {
13
+ this.seen = new Set();
14
+ }
15
+ firstSighting(guid) {
16
+ if (this.seen.has(guid))
17
+ return false;
18
+ this.seen.add(guid);
19
+ if (this.seen.size > MAX_REMEMBERED_DELIVERIES) {
20
+ const oldest = this.seen.values().next().value;
21
+ if (oldest !== undefined)
22
+ this.seen.delete(oldest);
23
+ }
24
+ return true;
25
+ }
26
+ }
27
+ function parsePayload(body) {
28
+ try {
29
+ return JSON.parse(body.toString("utf-8"));
30
+ }
31
+ catch {
32
+ return undefined;
33
+ }
34
+ }
5
35
  const MAX_BODY_BYTES = 1024 * 1024;
6
36
  function readBody(req, maxBytes) {
7
37
  return new Promise((resolve, reject) => {
@@ -29,7 +59,11 @@ export function verifyWebhookSignature(secret, body, signatureHeader) {
29
59
  return false;
30
60
  return timingSafeEqual(Buffer.from(received, "utf-8"), Buffer.from(expected, "utf-8"));
31
61
  }
32
- export async function handleGithubWebhookRequest(req, res, url, options) {
62
+ export function createGithubWebhookHandler(options) {
63
+ const deliveries = new GithubDeliveryLog();
64
+ return (req, res, url) => handleGithubWebhookRequest(req, res, url, options, deliveries);
65
+ }
66
+ async function handleGithubWebhookRequest(req, res, url, options, deliveries) {
33
67
  if (url.pathname !== GITHUB_WEBHOOK_PATH)
34
68
  return false;
35
69
  if (req.method !== "POST") {
@@ -54,9 +88,17 @@ export async function handleGithubWebhookRequest(req, res, url, options) {
54
88
  return true;
55
89
  }
56
90
  res.writeHead(202).end();
57
- if (typeof event === "string" && POKE_EVENTS.has(event)) {
58
- options.onPoke();
91
+ if (typeof event !== "string" || !ACTIVITY_EVENTS.has(event))
92
+ return true;
93
+ const guid = req.headers["x-github-delivery"];
94
+ if (typeof guid === "string" && !deliveries.firstSighting(guid))
95
+ return true;
96
+ const payload = parsePayload(body);
97
+ if (payload === undefined) {
98
+ log.logWarning(`GitHub webhook: ignoring ${event} delivery with a malformed body`);
99
+ return true;
59
100
  }
101
+ options.onDelivery({ event, payload });
60
102
  return true;
61
103
  }
62
104
  //# sourceMappingURL=webhook.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"webhook.js","sourceRoot":"","sources":["../../../src/adapters/github/webhook.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHmac, timingSafeEqual } from \"node:crypto\";\nimport type { IncomingMessage, ServerResponse } from \"node:http\";\nimport * as log from \"../../log.js\";\nimport type { GithubWebhookOptions } from \"./types.js\";\n\nexport const GITHUB_WEBHOOK_PATH = \"/github/webhook\";\n\nconst POKE_EVENTS = new Set([\"issues\", \"issue_comment\", \"pull_request_review_comment\"]);\n\nconst MAX_BODY_BYTES = 1024 * 1024;\n\nfunction readBody(req: IncomingMessage, maxBytes: number): Promise<Buffer | null> {\n return new Promise((resolve, reject) => {\n const chunks: Buffer[] = [];\n let size = 0;\n req.on(\"data\", (chunk: Buffer) => {\n size += chunk.length;\n if (size > maxBytes) {\n resolve(null);\n req.destroy();\n return;\n }\n chunks.push(chunk);\n });\n req.on(\"end\", () => resolve(Buffer.concat(chunks)));\n req.on(\"error\", reject);\n });\n}\n\nexport function verifyWebhookSignature(\n secret: string,\n body: Buffer,\n signatureHeader: string | undefined,\n): boolean {\n if (!signatureHeader?.startsWith(\"sha256=\")) return false;\n const expected = createHmac(\"sha256\", secret).update(body).digest(\"hex\");\n const received = signatureHeader.slice(\"sha256=\".length);\n if (received.length !== expected.length) return false;\n return timingSafeEqual(Buffer.from(received, \"utf-8\"), Buffer.from(expected, \"utf-8\"));\n}\n\nexport async function handleGithubWebhookRequest(\n req: IncomingMessage,\n res: ServerResponse,\n url: URL,\n options: GithubWebhookOptions,\n): Promise<boolean> {\n if (url.pathname !== GITHUB_WEBHOOK_PATH) return false;\n if (req.method !== \"POST\") {\n res.writeHead(405).end();\n return true;\n }\n const body = await readBody(req, MAX_BODY_BYTES);\n if (body === null) {\n res.writeHead(413).end();\n return true;\n }\n const signature = req.headers[\"x-hub-signature-256\"];\n if (\n !verifyWebhookSignature(\n options.secret,\n body,\n typeof signature === \"string\" ? signature : undefined,\n )\n ) {\n log.logWarning(\"GitHub webhook: rejected delivery with bad or missing signature\");\n res.writeHead(401).end();\n return true;\n }\n\n const event = req.headers[\"x-github-event\"];\n if (event === \"ping\") {\n res.writeHead(200, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify({ ok: true }));\n return true;\n }\n res.writeHead(202).end();\n if (typeof event === \"string\" && POKE_EVENTS.has(event)) {\n options.onPoke();\n }\n return true;\n}\n"]}
1
+ {"version":3,"file":"webhook.js","sourceRoot":"","sources":["../../../src/adapters/github/webhook.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHmac, timingSafeEqual } from \"node:crypto\";\nimport type { IncomingMessage, ServerResponse } from \"node:http\";\nimport * as log from \"../../log.js\";\nimport type { GithubWebhookOptions } from \"./types.js\";\n\nexport const GITHUB_WEBHOOK_PATH = \"/github/webhook\";\n\nconst ACTIVITY_EVENTS = new Set([\n \"issues\",\n \"issue_comment\",\n \"pull_request\",\n \"pull_request_review_comment\",\n]);\n\nconst MAX_REMEMBERED_DELIVERIES = 1000;\n\nclass GithubDeliveryLog {\n private readonly seen = new Set<string>();\n\n firstSighting(guid: string): boolean {\n if (this.seen.has(guid)) return false;\n this.seen.add(guid);\n if (this.seen.size > MAX_REMEMBERED_DELIVERIES) {\n const oldest = this.seen.values().next().value;\n if (oldest !== undefined) this.seen.delete(oldest);\n }\n return true;\n }\n}\n\nfunction parsePayload(body: Buffer): unknown {\n try {\n return JSON.parse(body.toString(\"utf-8\"));\n } catch {\n return undefined;\n }\n}\n\nconst MAX_BODY_BYTES = 1024 * 1024;\n\nfunction readBody(req: IncomingMessage, maxBytes: number): Promise<Buffer | null> {\n return new Promise((resolve, reject) => {\n const chunks: Buffer[] = [];\n let size = 0;\n req.on(\"data\", (chunk: Buffer) => {\n size += chunk.length;\n if (size > maxBytes) {\n resolve(null);\n req.destroy();\n return;\n }\n chunks.push(chunk);\n });\n req.on(\"end\", () => resolve(Buffer.concat(chunks)));\n req.on(\"error\", reject);\n });\n}\n\nexport function verifyWebhookSignature(\n secret: string,\n body: Buffer,\n signatureHeader: string | undefined,\n): boolean {\n if (!signatureHeader?.startsWith(\"sha256=\")) return false;\n const expected = createHmac(\"sha256\", secret).update(body).digest(\"hex\");\n const received = signatureHeader.slice(\"sha256=\".length);\n if (received.length !== expected.length) return false;\n return timingSafeEqual(Buffer.from(received, \"utf-8\"), Buffer.from(expected, \"utf-8\"));\n}\n\nexport type GithubWebhookHandler = (\n req: IncomingMessage,\n res: ServerResponse,\n url: URL,\n) => Promise<boolean>;\n\nexport function createGithubWebhookHandler(options: GithubWebhookOptions): GithubWebhookHandler {\n const deliveries = new GithubDeliveryLog();\n return (req, res, url) => handleGithubWebhookRequest(req, res, url, options, deliveries);\n}\n\nasync function handleGithubWebhookRequest(\n req: IncomingMessage,\n res: ServerResponse,\n url: URL,\n options: GithubWebhookOptions,\n deliveries: GithubDeliveryLog,\n): Promise<boolean> {\n if (url.pathname !== GITHUB_WEBHOOK_PATH) return false;\n if (req.method !== \"POST\") {\n res.writeHead(405).end();\n return true;\n }\n const body = await readBody(req, MAX_BODY_BYTES);\n if (body === null) {\n res.writeHead(413).end();\n return true;\n }\n const signature = req.headers[\"x-hub-signature-256\"];\n if (\n !verifyWebhookSignature(\n options.secret,\n body,\n typeof signature === \"string\" ? signature : undefined,\n )\n ) {\n log.logWarning(\"GitHub webhook: rejected delivery with bad or missing signature\");\n res.writeHead(401).end();\n return true;\n }\n\n const event = req.headers[\"x-github-event\"];\n if (event === \"ping\") {\n res.writeHead(200, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify({ ok: true }));\n return true;\n }\n res.writeHead(202).end();\n if (typeof event !== \"string\" || !ACTIVITY_EVENTS.has(event)) return true;\n const guid = req.headers[\"x-github-delivery\"];\n if (typeof guid === \"string\" && !deliveries.firstSighting(guid)) return true;\n const payload = parsePayload(body);\n if (payload === undefined) {\n log.logWarning(`GitHub webhook: ignoring ${event} delivery with a malformed body`);\n return true;\n }\n options.onDelivery({ event, payload });\n return true;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"progressive-renderer.d.ts","sourceRoot":"","sources":["../../src/adapters/progressive-renderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAA4B,MAAM,aAAa,CAAC;AAGnG,OAAO,KAAK,EAA8B,2BAA2B,EAAE,MAAM,YAAY,CAAC;AAI1F,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CASvE;AAmgBD,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,2BAA2B,GAAG;IAChF,SAAS,EAAE,qBAAqB,CAAC;CAClC,CAEA"}
1
+ {"version":3,"file":"progressive-renderer.d.ts","sourceRoot":"","sources":["../../src/adapters/progressive-renderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAA4B,MAAM,aAAa,CAAC;AAGnG,OAAO,KAAK,EAA8B,2BAA2B,EAAE,MAAM,YAAY,CAAC;AAI1F,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CASvE;AAsgBD,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,2BAA2B,GAAG;IAChF,SAAS,EAAE,qBAAqB,CAAC;CAClC,CAEA"}
@@ -123,6 +123,9 @@ class ProgressiveRenderer {
123
123
  this.state.streamActive = false;
124
124
  this.state.streamedSource = "";
125
125
  await this.platform.stream.stop(streamId).catch(() => undefined);
126
+ await this.platform.delete?.(streamId).catch((error) => {
127
+ log.logWarning("Could not delete an abandoned stream message", errorMessage(error));
128
+ });
126
129
  if (this.state.responseId === streamId)
127
130
  this.state.responseId = null;
128
131
  }