@jitsusama/agentic-harness.core 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (974) hide show
  1. package/README.md +52 -0
  2. package/dist/advisor/charter.d.ts +14 -0
  3. package/dist/advisor/charter.js +48 -0
  4. package/dist/advisor/findings.d.ts +43 -0
  5. package/dist/advisor/findings.js +82 -0
  6. package/dist/advisor/index.d.ts +24 -0
  7. package/dist/advisor/index.js +23 -0
  8. package/dist/advisor/settings.d.ts +16 -0
  9. package/dist/advisor/settings.js +30 -0
  10. package/dist/advisor/substantive.d.ts +14 -0
  11. package/dist/advisor/substantive.js +33 -0
  12. package/dist/advisor/tools.d.ts +38 -0
  13. package/dist/advisor/tools.js +202 -0
  14. package/dist/attribution/commit-hook.d.ts +53 -0
  15. package/dist/attribution/commit-hook.js +133 -0
  16. package/dist/attribution/gh-footer.d.ts +27 -0
  17. package/dist/attribution/gh-footer.js +80 -0
  18. package/dist/attribution/index.d.ts +11 -0
  19. package/dist/attribution/index.js +11 -0
  20. package/dist/attribution/model-name.d.ts +11 -0
  21. package/dist/attribution/model-name.js +26 -0
  22. package/dist/bin/attribution.d.ts +36 -0
  23. package/dist/bin/attribution.js +82 -0
  24. package/dist/bin/cli.d.ts +14 -0
  25. package/dist/bin/cli.js +236 -0
  26. package/dist/bin/gate-deps.d.ts +23 -0
  27. package/dist/bin/gate-deps.js +61 -0
  28. package/dist/bin/guardians.d.ts +51 -0
  29. package/dist/bin/guardians.js +174 -0
  30. package/dist/bin/memory.d.ts +16 -0
  31. package/dist/bin/memory.js +81 -0
  32. package/dist/bin/notes.d.ts +30 -0
  33. package/dist/bin/notes.js +67 -0
  34. package/dist/bin/process-exec.d.ts +14 -0
  35. package/dist/bin/process-exec.js +31 -0
  36. package/dist/bin/quest.d.ts +38 -0
  37. package/dist/bin/quest.js +187 -0
  38. package/dist/bin/slack-auth.d.ts +49 -0
  39. package/dist/bin/slack-auth.js +107 -0
  40. package/dist/clock/index.d.ts +46 -0
  41. package/dist/clock/index.js +72 -0
  42. package/dist/command/cwd.d.ts +21 -0
  43. package/dist/command/cwd.js +60 -0
  44. package/dist/command/edit.d.ts +14 -0
  45. package/dist/command/edit.js +22 -0
  46. package/dist/command/flags.d.ts +29 -0
  47. package/dist/command/flags.js +111 -0
  48. package/dist/command/index.d.ts +16 -0
  49. package/dist/command/index.js +12 -0
  50. package/dist/command/tokenize.d.ts +7 -0
  51. package/dist/command/tokenize.js +315 -0
  52. package/dist/command/types.d.ts +66 -0
  53. package/dist/command/types.js +9 -0
  54. package/dist/completion/index.d.ts +17 -0
  55. package/dist/completion/index.js +16 -0
  56. package/dist/completion/investigate.d.ts +63 -0
  57. package/dist/completion/investigate.js +198 -0
  58. package/dist/completion/resolve.d.ts +29 -0
  59. package/dist/completion/resolve.js +42 -0
  60. package/dist/completion/side.d.ts +51 -0
  61. package/dist/completion/side.js +93 -0
  62. package/dist/completion/types.d.ts +84 -0
  63. package/dist/completion/types.js +14 -0
  64. package/dist/exec/exec.d.ts +38 -0
  65. package/dist/exec/exec.js +51 -0
  66. package/dist/exec/index.d.ts +8 -0
  67. package/dist/exec/index.js +8 -0
  68. package/dist/gate/decision.d.ts +52 -0
  69. package/dist/gate/decision.js +68 -0
  70. package/dist/gate/deps.d.ts +14 -0
  71. package/dist/gate/deps.js +1 -0
  72. package/dist/gate/index.d.ts +2 -0
  73. package/dist/gate/index.js +1 -0
  74. package/dist/git-cli/index.d.ts +47 -0
  75. package/dist/git-cli/index.js +127 -0
  76. package/dist/github-cli/command-spec.d.ts +14 -0
  77. package/dist/github-cli/command-spec.js +18 -0
  78. package/dist/github-cli/index.d.ts +71 -0
  79. package/dist/github-cli/index.js +188 -0
  80. package/dist/google/apis/calendar.d.ts +64 -0
  81. package/dist/google/apis/calendar.js +297 -0
  82. package/dist/google/apis/docs.d.ts +29 -0
  83. package/dist/google/apis/docs.js +154 -0
  84. package/dist/google/apis/drive.d.ts +46 -0
  85. package/dist/google/apis/drive.js +189 -0
  86. package/dist/google/apis/gmail.d.ts +67 -0
  87. package/dist/google/apis/gmail.js +374 -0
  88. package/dist/google/apis/index.d.ts +10 -0
  89. package/dist/google/apis/index.js +10 -0
  90. package/dist/google/apis/sheets.d.ts +16 -0
  91. package/dist/google/apis/sheets.js +54 -0
  92. package/dist/google/apis/slides.d.ts +16 -0
  93. package/dist/google/apis/slides.js +40 -0
  94. package/dist/google/auth/browser.d.ts +5 -0
  95. package/dist/google/auth/browser.js +27 -0
  96. package/dist/google/auth/credentials.d.ts +26 -0
  97. package/dist/google/auth/credentials.js +69 -0
  98. package/dist/google/auth/errors.d.ts +15 -0
  99. package/dist/google/auth/errors.js +26 -0
  100. package/dist/google/auth/index.d.ts +12 -0
  101. package/dist/google/auth/index.js +12 -0
  102. package/dist/google/auth/oauth-app.d.ts +15 -0
  103. package/dist/google/auth/oauth-app.js +20 -0
  104. package/dist/google/auth/oauth.d.ts +46 -0
  105. package/dist/google/auth/oauth.js +146 -0
  106. package/dist/google/auth/server.d.ts +13 -0
  107. package/dist/google/auth/server.js +70 -0
  108. package/dist/google/auth/setup-instructions.d.ts +16 -0
  109. package/dist/google/auth/setup-instructions.js +24 -0
  110. package/dist/google/auth/store.d.ts +19 -0
  111. package/dist/google/auth/store.js +27 -0
  112. package/dist/google/index.d.ts +13 -0
  113. package/dist/google/index.js +12 -0
  114. package/dist/google/paths.d.ts +17 -0
  115. package/dist/google/paths.js +28 -0
  116. package/dist/google/renderers/calendar.d.ts +23 -0
  117. package/dist/google/renderers/calendar.js +312 -0
  118. package/dist/google/renderers/drive.d.ts +31 -0
  119. package/dist/google/renderers/drive.js +214 -0
  120. package/dist/google/renderers/email.d.ts +16 -0
  121. package/dist/google/renderers/email.js +130 -0
  122. package/dist/google/renderers/index.d.ts +8 -0
  123. package/dist/google/renderers/index.js +8 -0
  124. package/dist/google/types.d.ts +143 -0
  125. package/dist/google/types.js +27 -0
  126. package/dist/governance/distill.d.ts +31 -0
  127. package/dist/governance/distill.js +78 -0
  128. package/dist/governance/index.d.ts +11 -0
  129. package/dist/governance/index.js +10 -0
  130. package/dist/governance/render.d.ts +13 -0
  131. package/dist/governance/render.js +23 -0
  132. package/dist/governance/store.d.ts +32 -0
  133. package/dist/governance/store.js +102 -0
  134. package/dist/governance/types.d.ts +19 -0
  135. package/dist/governance/types.js +9 -0
  136. package/dist/guardian/index.d.ts +7 -0
  137. package/dist/guardian/index.js +7 -0
  138. package/dist/guardian/types.d.ts +37 -0
  139. package/dist/guardian/types.js +12 -0
  140. package/dist/internal/github/cli.d.ts +40 -0
  141. package/dist/internal/github/cli.js +102 -0
  142. package/dist/internal/guardian/commit-file.d.ts +7 -0
  143. package/dist/internal/guardian/commit-file.js +36 -0
  144. package/dist/internal/guardian/commit-format.d.ts +35 -0
  145. package/dist/internal/guardian/commit-format.js +63 -0
  146. package/dist/internal/guardian/commit-shell.d.ts +38 -0
  147. package/dist/internal/guardian/commit-shell.js +134 -0
  148. package/dist/internal/guardian/history-gate.d.ts +41 -0
  149. package/dist/internal/guardian/history-gate.js +76 -0
  150. package/dist/internal/guardian/prose-gate.d.ts +31 -0
  151. package/dist/internal/guardian/prose-gate.js +50 -0
  152. package/dist/internal/guardian/redirect-gate.d.ts +41 -0
  153. package/dist/internal/guardian/redirect-gate.js +114 -0
  154. package/dist/internal/guardian/section-gate.d.ts +20 -0
  155. package/dist/internal/guardian/section-gate.js +36 -0
  156. package/dist/internal/guardian/title-gate.d.ts +20 -0
  157. package/dist/internal/guardian/title-gate.js +36 -0
  158. package/dist/internal/json-array.d.ts +11 -0
  159. package/dist/internal/json-array.js +40 -0
  160. package/dist/internal/lsp/registry.d.ts +12 -0
  161. package/dist/internal/lsp/registry.js +16 -0
  162. package/dist/internal/notes/discovery.d.ts +59 -0
  163. package/dist/internal/notes/discovery.js +91 -0
  164. package/dist/internal/notes/frontmatter.d.ts +52 -0
  165. package/dist/internal/notes/frontmatter.js +163 -0
  166. package/dist/internal/notes/id.d.ts +42 -0
  167. package/dist/internal/notes/id.js +80 -0
  168. package/dist/internal/notes/io.d.ts +25 -0
  169. package/dist/internal/notes/io.js +51 -0
  170. package/dist/internal/notes/sanitize.d.ts +19 -0
  171. package/dist/internal/notes/sanitize.js +35 -0
  172. package/dist/internal/process-global.d.ts +20 -0
  173. package/dist/internal/process-global.js +28 -0
  174. package/dist/internal/quest/alias-index.d.ts +61 -0
  175. package/dist/internal/quest/alias-index.js +69 -0
  176. package/dist/internal/quest/append-journey.d.ts +22 -0
  177. package/dist/internal/quest/append-journey.js +63 -0
  178. package/dist/internal/quest/bash-write.d.ts +49 -0
  179. package/dist/internal/quest/bash-write.js +208 -0
  180. package/dist/internal/quest/dates.d.ts +14 -0
  181. package/dist/internal/quest/dates.js +20 -0
  182. package/dist/internal/quest/discovery.d.ts +96 -0
  183. package/dist/internal/quest/discovery.js +354 -0
  184. package/dist/internal/quest/fields.d.ts +37 -0
  185. package/dist/internal/quest/fields.js +94 -0
  186. package/dist/internal/quest/frontmatter.d.ts +88 -0
  187. package/dist/internal/quest/frontmatter.js +630 -0
  188. package/dist/internal/quest/git-signals.d.ts +53 -0
  189. package/dist/internal/quest/git-signals.js +192 -0
  190. package/dist/internal/quest/id.d.ts +50 -0
  191. package/dist/internal/quest/id.js +116 -0
  192. package/dist/internal/quest/io.d.ts +54 -0
  193. package/dist/internal/quest/io.js +233 -0
  194. package/dist/internal/quest/mentions.d.ts +45 -0
  195. package/dist/internal/quest/mentions.js +70 -0
  196. package/dist/internal/quest/mutate.d.ts +38 -0
  197. package/dist/internal/quest/mutate.js +83 -0
  198. package/dist/internal/quest/process-liveness.d.ts +98 -0
  199. package/dist/internal/quest/process-liveness.js +216 -0
  200. package/dist/internal/quest/quest-doc.d.ts +116 -0
  201. package/dist/internal/quest/quest-doc.js +239 -0
  202. package/dist/internal/quest/ranking.d.ts +48 -0
  203. package/dist/internal/quest/ranking.js +114 -0
  204. package/dist/internal/quest/reopen.d.ts +65 -0
  205. package/dist/internal/quest/reopen.js +113 -0
  206. package/dist/internal/quest/resolve-cwd.d.ts +32 -0
  207. package/dist/internal/quest/resolve-cwd.js +89 -0
  208. package/dist/internal/quest/sanitize.d.ts +42 -0
  209. package/dist/internal/quest/sanitize.js +69 -0
  210. package/dist/internal/quest/scaffold.d.ts +59 -0
  211. package/dist/internal/quest/scaffold.js +169 -0
  212. package/dist/internal/quest/scratch.d.ts +27 -0
  213. package/dist/internal/quest/scratch.js +106 -0
  214. package/dist/internal/quest/session-liveness.d.ts +125 -0
  215. package/dist/internal/quest/session-liveness.js +386 -0
  216. package/dist/internal/quest/session-ownership.d.ts +22 -0
  217. package/dist/internal/quest/session-ownership.js +100 -0
  218. package/dist/internal/quest/session-registry.d.ts +221 -0
  219. package/dist/internal/quest/session-registry.js +266 -0
  220. package/dist/internal/quest/status.d.ts +10 -0
  221. package/dist/internal/quest/status.js +15 -0
  222. package/dist/internal/quest/structural-journal.d.ts +41 -0
  223. package/dist/internal/quest/structural-journal.js +67 -0
  224. package/dist/internal/quest/structural.d.ts +43 -0
  225. package/dist/internal/quest/structural.js +77 -0
  226. package/dist/internal/quest/toc.d.ts +28 -0
  227. package/dist/internal/quest/toc.js +90 -0
  228. package/dist/internal/quest/trees.d.ts +53 -0
  229. package/dist/internal/quest/trees.js +145 -0
  230. package/dist/internal/quest/url-fetchers.d.ts +50 -0
  231. package/dist/internal/quest/url-fetchers.js +97 -0
  232. package/dist/internal/quest/write-classifier.d.ts +46 -0
  233. package/dist/internal/quest/write-classifier.js +59 -0
  234. package/dist/internal/refs/builtins.d.ts +32 -0
  235. package/dist/internal/refs/builtins.js +179 -0
  236. package/dist/internal/refs/registry.d.ts +25 -0
  237. package/dist/internal/refs/registry.js +42 -0
  238. package/dist/internal/registry/global-symbol-registry.d.ts +37 -0
  239. package/dist/internal/registry/global-symbol-registry.js +55 -0
  240. package/dist/internal/review/registry.d.ts +12 -0
  241. package/dist/internal/review/registry.js +16 -0
  242. package/dist/internal/sqlite/db.d.ts +16 -0
  243. package/dist/internal/sqlite/db.js +26 -0
  244. package/dist/internal/terminal/builtins.d.ts +8 -0
  245. package/dist/internal/terminal/builtins.js +14 -0
  246. package/dist/internal/terminal/drivers/fallback.d.ts +8 -0
  247. package/dist/internal/terminal/drivers/fallback.js +31 -0
  248. package/dist/internal/terminal/drivers/shared.d.ts +39 -0
  249. package/dist/internal/terminal/drivers/shared.js +51 -0
  250. package/dist/internal/terminal/drivers/tmux.d.ts +14 -0
  251. package/dist/internal/terminal/drivers/tmux.js +88 -0
  252. package/dist/internal/terminal/drivers/wezterm.d.ts +35 -0
  253. package/dist/internal/terminal/drivers/wezterm.js +175 -0
  254. package/dist/internal/terminal/registry.d.ts +12 -0
  255. package/dist/internal/terminal/registry.js +16 -0
  256. package/dist/internal/tree/builtins.d.ts +8 -0
  257. package/dist/internal/tree/builtins.js +10 -0
  258. package/dist/internal/tree/providers/git-worktree.d.ts +20 -0
  259. package/dist/internal/tree/providers/git-worktree.js +279 -0
  260. package/dist/internal/tree/registry.d.ts +12 -0
  261. package/dist/internal/tree/registry.js +16 -0
  262. package/dist/lsp/config.d.ts +77 -0
  263. package/dist/lsp/config.js +154 -0
  264. package/dist/lsp/external.d.ts +13 -0
  265. package/dist/lsp/external.js +52 -0
  266. package/dist/lsp/format.d.ts +11 -0
  267. package/dist/lsp/format.js +54 -0
  268. package/dist/lsp/index.d.ts +17 -0
  269. package/dist/lsp/index.js +16 -0
  270. package/dist/lsp/offsets.d.ts +22 -0
  271. package/dist/lsp/offsets.js +51 -0
  272. package/dist/lsp/registry.d.ts +28 -0
  273. package/dist/lsp/registry.js +45 -0
  274. package/dist/lsp/standalone/backend.d.ts +42 -0
  275. package/dist/lsp/standalone/backend.js +150 -0
  276. package/dist/lsp/standalone/document.d.ts +45 -0
  277. package/dist/lsp/standalone/document.js +81 -0
  278. package/dist/lsp/standalone/server.d.ts +84 -0
  279. package/dist/lsp/standalone/server.js +521 -0
  280. package/dist/lsp/types.d.ts +119 -0
  281. package/dist/lsp/types.js +13 -0
  282. package/dist/memory/db.d.ts +15 -0
  283. package/dist/memory/db.js +25 -0
  284. package/dist/memory/index.d.ts +12 -0
  285. package/dist/memory/index.js +11 -0
  286. package/dist/memory/paths.d.ts +19 -0
  287. package/dist/memory/paths.js +33 -0
  288. package/dist/memory/scope.d.ts +14 -0
  289. package/dist/memory/scope.js +22 -0
  290. package/dist/memory/store.d.ts +12 -0
  291. package/dist/memory/store.js +146 -0
  292. package/dist/memory/types.d.ts +80 -0
  293. package/dist/memory/types.js +6 -0
  294. package/dist/notes/types.d.ts +50 -0
  295. package/dist/notes/types.js +23 -0
  296. package/dist/notes/verbs/create.d.ts +5 -0
  297. package/dist/notes/verbs/create.js +55 -0
  298. package/dist/notes/verbs/mutate.d.ts +8 -0
  299. package/dist/notes/verbs/mutate.js +152 -0
  300. package/dist/notes/verbs/queries.d.ts +15 -0
  301. package/dist/notes/verbs/queries.js +116 -0
  302. package/dist/notes/verbs/reindex.d.ts +12 -0
  303. package/dist/notes/verbs/reindex.js +35 -0
  304. package/dist/notes/verbs/shared.d.ts +37 -0
  305. package/dist/notes/verbs/shared.js +29 -0
  306. package/dist/observability/index.d.ts +13 -0
  307. package/dist/observability/index.js +12 -0
  308. package/dist/observability/recorder.d.ts +50 -0
  309. package/dist/observability/recorder.js +77 -0
  310. package/dist/observability/store.d.ts +22 -0
  311. package/dist/observability/store.js +213 -0
  312. package/dist/observability/types.d.ts +82 -0
  313. package/dist/observability/types.js +1 -0
  314. package/dist/process/index.d.ts +9 -0
  315. package/dist/process/index.js +9 -0
  316. package/dist/process/process.d.ts +95 -0
  317. package/dist/process/process.js +153 -0
  318. package/dist/prose/block.d.ts +9 -0
  319. package/dist/prose/block.js +43 -0
  320. package/dist/prose/detect.d.ts +50 -0
  321. package/dist/prose/detect.js +217 -0
  322. package/dist/prose/gate.d.ts +14 -0
  323. package/dist/prose/gate.js +21 -0
  324. package/dist/prose/index.d.ts +4 -0
  325. package/dist/prose/index.js +4 -0
  326. package/dist/prose/wrap.d.ts +9 -0
  327. package/dist/prose/wrap.js +47 -0
  328. package/dist/quest/actions.d.ts +20 -0
  329. package/dist/quest/actions.js +107 -0
  330. package/dist/quest/config.d.ts +79 -0
  331. package/dist/quest/config.js +83 -0
  332. package/dist/quest/index.d.ts +29 -0
  333. package/dist/quest/index.js +28 -0
  334. package/dist/quest/lifecycle.d.ts +365 -0
  335. package/dist/quest/lifecycle.js +900 -0
  336. package/dist/quest/lookup.d.ts +243 -0
  337. package/dist/quest/lookup.js +496 -0
  338. package/dist/quest/machine.d.ts +48 -0
  339. package/dist/quest/machine.js +96 -0
  340. package/dist/quest/render-rows.d.ts +166 -0
  341. package/dist/quest/render-rows.js +214 -0
  342. package/dist/quest/state.d.ts +111 -0
  343. package/dist/quest/state.js +46 -0
  344. package/dist/quest/types.d.ts +224 -0
  345. package/dist/quest/types.js +10 -0
  346. package/dist/quest/verbs/alias.d.ts +9 -0
  347. package/dist/quest/verbs/alias.js +129 -0
  348. package/dist/quest/verbs/lifecycle.d.ts +36 -0
  349. package/dist/quest/verbs/lifecycle.js +407 -0
  350. package/dist/quest/verbs/queries.d.ts +24 -0
  351. package/dist/quest/verbs/queries.js +241 -0
  352. package/dist/quest/verbs/reorder.d.ts +15 -0
  353. package/dist/quest/verbs/reorder.js +85 -0
  354. package/dist/quest/verbs/shared.d.ts +63 -0
  355. package/dist/quest/verbs/shared.js +35 -0
  356. package/dist/quest/verbs/stage.d.ts +39 -0
  357. package/dist/quest/verbs/stage.js +506 -0
  358. package/dist/quest/verbs/structural.d.ts +23 -0
  359. package/dist/quest/verbs/structural.js +310 -0
  360. package/dist/quest/verbs/tree-ops.d.ts +20 -0
  361. package/dist/quest/verbs/tree-ops.js +289 -0
  362. package/dist/refs/index.d.ts +13 -0
  363. package/dist/refs/index.js +12 -0
  364. package/dist/refs/lookup.d.ts +53 -0
  365. package/dist/refs/lookup.js +102 -0
  366. package/dist/refs/register.d.ts +34 -0
  367. package/dist/refs/register.js +44 -0
  368. package/dist/refs/types.d.ts +81 -0
  369. package/dist/refs/types.js +17 -0
  370. package/dist/remote/index.d.ts +9 -0
  371. package/dist/remote/index.js +9 -0
  372. package/dist/remote/name.d.ts +22 -0
  373. package/dist/remote/name.js +30 -0
  374. package/dist/result/cite.d.ts +84 -0
  375. package/dist/result/cite.js +127 -0
  376. package/dist/result/counts.d.ts +15 -0
  377. package/dist/result/counts.js +17 -0
  378. package/dist/result/details.d.ts +61 -0
  379. package/dist/result/details.js +121 -0
  380. package/dist/result/digest.d.ts +37 -0
  381. package/dist/result/digest.js +227 -0
  382. package/dist/result/follow.d.ts +29 -0
  383. package/dist/result/follow.js +37 -0
  384. package/dist/result/index.d.ts +26 -0
  385. package/dist/result/index.js +26 -0
  386. package/dist/result/listing.d.ts +62 -0
  387. package/dist/result/listing.js +72 -0
  388. package/dist/result/location.d.ts +67 -0
  389. package/dist/result/location.js +125 -0
  390. package/dist/result/query.d.ts +67 -0
  391. package/dist/result/query.js +144 -0
  392. package/dist/result/spill.d.ts +41 -0
  393. package/dist/result/spill.js +121 -0
  394. package/dist/result/store.d.ts +83 -0
  395. package/dist/result/store.js +214 -0
  396. package/dist/result/view.d.ts +31 -0
  397. package/dist/result/view.js +38 -0
  398. package/dist/review/anchor.d.ts +84 -0
  399. package/dist/review/anchor.js +89 -0
  400. package/dist/review/ask/agents.d.ts +80 -0
  401. package/dist/review/ask/agents.js +296 -0
  402. package/dist/review/ask/anchorable.d.ts +35 -0
  403. package/dist/review/ask/anchorable.js +76 -0
  404. package/dist/review/ask/answer.d.ts +54 -0
  405. package/dist/review/ask/answer.js +209 -0
  406. package/dist/review/ask/audit.d.ts +71 -0
  407. package/dist/review/ask/audit.js +158 -0
  408. package/dist/review/ask/collect.d.ts +41 -0
  409. package/dist/review/ask/collect.js +82 -0
  410. package/dist/review/ask/council.d.ts +290 -0
  411. package/dist/review/ask/council.js +386 -0
  412. package/dist/review/ask/critique.d.ts +69 -0
  413. package/dist/review/ask/critique.js +157 -0
  414. package/dist/review/ask/harvest.d.ts +119 -0
  415. package/dist/review/ask/harvest.js +409 -0
  416. package/dist/review/ask/identity.d.ts +93 -0
  417. package/dist/review/ask/identity.js +134 -0
  418. package/dist/review/ask/judge.d.ts +37 -0
  419. package/dist/review/ask/judge.js +140 -0
  420. package/dist/review/ask/persona.d.ts +84 -0
  421. package/dist/review/ask/persona.js +127 -0
  422. package/dist/review/ask/progress.d.ts +117 -0
  423. package/dist/review/ask/progress.js +137 -0
  424. package/dist/review/ask/prompt.d.ts +131 -0
  425. package/dist/review/ask/prompt.js +242 -0
  426. package/dist/review/ask/roster.d.ts +94 -0
  427. package/dist/review/ask/roster.js +338 -0
  428. package/dist/review/ask/run.d.ts +435 -0
  429. package/dist/review/ask/run.js +340 -0
  430. package/dist/review/ask/span.d.ts +70 -0
  431. package/dist/review/ask/span.js +166 -0
  432. package/dist/review/ask/stack-round.d.ts +66 -0
  433. package/dist/review/ask/stack-round.js +125 -0
  434. package/dist/review/ask/start.d.ts +48 -0
  435. package/dist/review/ask/start.js +118 -0
  436. package/dist/review/ask/store.d.ts +83 -0
  437. package/dist/review/ask/store.js +226 -0
  438. package/dist/review/ask/wire.d.ts +89 -0
  439. package/dist/review/ask/wire.js +204 -0
  440. package/dist/review/attach.d.ts +161 -0
  441. package/dist/review/attach.js +357 -0
  442. package/dist/review/authoring.d.ts +84 -0
  443. package/dist/review/authoring.js +203 -0
  444. package/dist/review/backed.d.ts +90 -0
  445. package/dist/review/backed.js +168 -0
  446. package/dist/review/bind.d.ts +75 -0
  447. package/dist/review/bind.js +223 -0
  448. package/dist/review/budget.d.ts +133 -0
  449. package/dist/review/budget.js +278 -0
  450. package/dist/review/capabilities.d.ts +217 -0
  451. package/dist/review/capabilities.js +46 -0
  452. package/dist/review/change.d.ts +155 -0
  453. package/dist/review/change.js +15 -0
  454. package/dist/review/checks.d.ts +56 -0
  455. package/dist/review/checks.js +11 -0
  456. package/dist/review/config.d.ts +71 -0
  457. package/dist/review/config.js +125 -0
  458. package/dist/review/conventions.d.ts +35 -0
  459. package/dist/review/conventions.js +58 -0
  460. package/dist/review/conversation.d.ts +98 -0
  461. package/dist/review/conversation.js +16 -0
  462. package/dist/review/decided.d.ts +58 -0
  463. package/dist/review/decided.js +67 -0
  464. package/dist/review/diff.d.ts +116 -0
  465. package/dist/review/diff.js +237 -0
  466. package/dist/review/draft/continuation.d.ts +23 -0
  467. package/dist/review/draft/continuation.js +32 -0
  468. package/dist/review/draft/fanout.d.ts +57 -0
  469. package/dist/review/draft/fanout.js +46 -0
  470. package/dist/review/draft/handle.d.ts +55 -0
  471. package/dist/review/draft/handle.js +110 -0
  472. package/dist/review/draft/plan.d.ts +112 -0
  473. package/dist/review/draft/plan.js +343 -0
  474. package/dist/review/draft/publish.d.ts +38 -0
  475. package/dist/review/draft/publish.js +118 -0
  476. package/dist/review/draft/render.d.ts +32 -0
  477. package/dist/review/draft/render.js +100 -0
  478. package/dist/review/draft/state.d.ts +98 -0
  479. package/dist/review/draft/state.js +83 -0
  480. package/dist/review/draft/store.d.ts +33 -0
  481. package/dist/review/draft/store.js +100 -0
  482. package/dist/review/elsewhere.d.ts +27 -0
  483. package/dist/review/elsewhere.js +39 -0
  484. package/dist/review/engine.d.ts +106 -0
  485. package/dist/review/engine.js +243 -0
  486. package/dist/review/events.d.ts +59 -0
  487. package/dist/review/events.js +35 -0
  488. package/dist/review/failed.d.ts +46 -0
  489. package/dist/review/failed.js +56 -0
  490. package/dist/review/finding.d.ts +81 -0
  491. package/dist/review/finding.js +85 -0
  492. package/dist/review/fix.d.ts +147 -0
  493. package/dist/review/fix.js +175 -0
  494. package/dist/review/followup.d.ts +84 -0
  495. package/dist/review/followup.js +123 -0
  496. package/dist/review/index.d.ts +134 -0
  497. package/dist/review/index.js +80 -0
  498. package/dist/review/keys.d.ts +23 -0
  499. package/dist/review/keys.js +40 -0
  500. package/dist/review/landing.d.ts +37 -0
  501. package/dist/review/landing.js +68 -0
  502. package/dist/review/lenses.d.ts +132 -0
  503. package/dist/review/lenses.js +430 -0
  504. package/dist/review/propose-from.d.ts +76 -0
  505. package/dist/review/propose-from.js +86 -0
  506. package/dist/review/provider.d.ts +306 -0
  507. package/dist/review/provider.js +16 -0
  508. package/dist/review/providers/git/index.d.ts +23 -0
  509. package/dist/review/providers/git/index.js +214 -0
  510. package/dist/review/providers/github/authoring.d.ts +22 -0
  511. package/dist/review/providers/github/authoring.js +350 -0
  512. package/dist/review/providers/github/claims.d.ts +49 -0
  513. package/dist/review/providers/github/claims.js +136 -0
  514. package/dist/review/providers/github/conversation.d.ts +18 -0
  515. package/dist/review/providers/github/conversation.js +455 -0
  516. package/dist/review/providers/github/fields.d.ts +30 -0
  517. package/dist/review/providers/github/fields.js +47 -0
  518. package/dist/review/providers/github/index.d.ts +15 -0
  519. package/dist/review/providers/github/index.js +110 -0
  520. package/dist/review/providers/github/proposals.d.ts +14 -0
  521. package/dist/review/providers/github/proposals.js +298 -0
  522. package/dist/review/providers/github/queue.d.ts +46 -0
  523. package/dist/review/providers/github/queue.js +122 -0
  524. package/dist/review/providers/github/stacking.d.ts +20 -0
  525. package/dist/review/providers/github/stacking.js +107 -0
  526. package/dist/review/queue.d.ts +43 -0
  527. package/dist/review/queue.js +56 -0
  528. package/dist/review/reactable.d.ts +93 -0
  529. package/dist/review/reactable.js +140 -0
  530. package/dist/review/register.d.ts +52 -0
  531. package/dist/review/register.js +53 -0
  532. package/dist/review/resolve.d.ts +58 -0
  533. package/dist/review/resolve.js +150 -0
  534. package/dist/review/retarget.d.ts +73 -0
  535. package/dist/review/retarget.js +82 -0
  536. package/dist/review/revisited.d.ts +77 -0
  537. package/dist/review/revisited.js +121 -0
  538. package/dist/review/stack.d.ts +110 -0
  539. package/dist/review/stack.js +52 -0
  540. package/dist/sections/block.d.ts +9 -0
  541. package/dist/sections/block.js +42 -0
  542. package/dist/sections/detect.d.ts +31 -0
  543. package/dist/sections/detect.js +67 -0
  544. package/dist/sections/gate.d.ts +21 -0
  545. package/dist/sections/gate.js +22 -0
  546. package/dist/sections/index.d.ts +5 -0
  547. package/dist/sections/index.js +5 -0
  548. package/dist/sections/sanctioned.d.ts +13 -0
  549. package/dist/sections/sanctioned.js +21 -0
  550. package/dist/shell/index.d.ts +8 -0
  551. package/dist/shell/index.js +8 -0
  552. package/dist/shell/parse.d.ts +125 -0
  553. package/dist/shell/parse.js +298 -0
  554. package/dist/slack/api/channels.d.ts +12 -0
  555. package/dist/slack/api/channels.js +28 -0
  556. package/dist/slack/api/client.d.ts +94 -0
  557. package/dist/slack/api/client.js +272 -0
  558. package/dist/slack/api/files.d.ts +95 -0
  559. package/dist/slack/api/files.js +223 -0
  560. package/dist/slack/api/index.d.ts +11 -0
  561. package/dist/slack/api/index.js +11 -0
  562. package/dist/slack/api/messages.d.ts +98 -0
  563. package/dist/slack/api/messages.js +292 -0
  564. package/dist/slack/api/reactions.d.ts +47 -0
  565. package/dist/slack/api/reactions.js +50 -0
  566. package/dist/slack/api/resolve-conversations.d.ts +43 -0
  567. package/dist/slack/api/resolve-conversations.js +130 -0
  568. package/dist/slack/api/resolve-messages.d.ts +29 -0
  569. package/dist/slack/api/resolve-messages.js +93 -0
  570. package/dist/slack/api/resolve-users.d.ts +27 -0
  571. package/dist/slack/api/resolve-users.js +73 -0
  572. package/dist/slack/api/search.d.ts +86 -0
  573. package/dist/slack/api/search.js +186 -0
  574. package/dist/slack/api/users.d.ts +12 -0
  575. package/dist/slack/api/users.js +33 -0
  576. package/dist/slack/auth/browser-extract.d.ts +33 -0
  577. package/dist/slack/auth/browser-extract.js +201 -0
  578. package/dist/slack/auth/browser.d.ts +5 -0
  579. package/dist/slack/auth/browser.js +25 -0
  580. package/dist/slack/auth/credentials.d.ts +14 -0
  581. package/dist/slack/auth/credentials.js +24 -0
  582. package/dist/slack/auth/errors.d.ts +9 -0
  583. package/dist/slack/auth/errors.js +19 -0
  584. package/dist/slack/auth/extract.d.ts +23 -0
  585. package/dist/slack/auth/extract.js +44 -0
  586. package/dist/slack/auth/index.d.ts +12 -0
  587. package/dist/slack/auth/index.js +11 -0
  588. package/dist/slack/auth/oauth-app.d.ts +11 -0
  589. package/dist/slack/auth/oauth-app.js +20 -0
  590. package/dist/slack/auth/oauth.d.ts +31 -0
  591. package/dist/slack/auth/oauth.js +82 -0
  592. package/dist/slack/auth/server.d.ts +14 -0
  593. package/dist/slack/auth/server.js +75 -0
  594. package/dist/slack/auth/store.d.ts +17 -0
  595. package/dist/slack/auth/store.js +27 -0
  596. package/dist/slack/block-message.d.ts +9 -0
  597. package/dist/slack/block-message.js +30 -0
  598. package/dist/slack/blocks.d.ts +94 -0
  599. package/dist/slack/blocks.js +765 -0
  600. package/dist/slack/content-gate.d.ts +12 -0
  601. package/dist/slack/content-gate.js +22 -0
  602. package/dist/slack/detect.d.ts +31 -0
  603. package/dist/slack/detect.js +125 -0
  604. package/dist/slack/index.d.ts +18 -0
  605. package/dist/slack/index.js +17 -0
  606. package/dist/slack/paths.d.ts +28 -0
  607. package/dist/slack/paths.js +46 -0
  608. package/dist/slack/renderers/channel.d.ts +6 -0
  609. package/dist/slack/renderers/channel.js +27 -0
  610. package/dist/slack/renderers/index.d.ts +9 -0
  611. package/dist/slack/renderers/index.js +9 -0
  612. package/dist/slack/renderers/message.d.ts +21 -0
  613. package/dist/slack/renderers/message.js +214 -0
  614. package/dist/slack/renderers/reactions.d.ts +8 -0
  615. package/dist/slack/renderers/reactions.js +43 -0
  616. package/dist/slack/renderers/search.d.ts +6 -0
  617. package/dist/slack/renderers/search.js +39 -0
  618. package/dist/slack/renderers/user.d.ts +6 -0
  619. package/dist/slack/renderers/user.js +32 -0
  620. package/dist/slack/resolvers/cache.d.ts +29 -0
  621. package/dist/slack/resolvers/cache.js +70 -0
  622. package/dist/slack/resolvers/conversation-cache.d.ts +42 -0
  623. package/dist/slack/resolvers/conversation-cache.js +128 -0
  624. package/dist/slack/resolvers/conversation.d.ts +44 -0
  625. package/dist/slack/resolvers/conversation.js +229 -0
  626. package/dist/slack/resolvers/index.d.ts +8 -0
  627. package/dist/slack/resolvers/index.js +8 -0
  628. package/dist/slack/resolvers/target.d.ts +19 -0
  629. package/dist/slack/resolvers/target.js +45 -0
  630. package/dist/slack/resolvers/url.d.ts +20 -0
  631. package/dist/slack/resolvers/url.js +22 -0
  632. package/dist/slack/resolvers/user.d.ts +54 -0
  633. package/dist/slack/resolvers/user.js +134 -0
  634. package/dist/slack/types.d.ts +180 -0
  635. package/dist/slack/types.js +13 -0
  636. package/dist/tdd/attest.d.ts +21 -0
  637. package/dist/tdd/attest.js +21 -0
  638. package/dist/tdd/discipline.d.ts +11 -0
  639. package/dist/tdd/discipline.js +28 -0
  640. package/dist/tdd/index.d.ts +14 -0
  641. package/dist/tdd/index.js +13 -0
  642. package/dist/tdd/machine.d.ts +48 -0
  643. package/dist/tdd/machine.js +139 -0
  644. package/dist/tdd/presentation.d.ts +34 -0
  645. package/dist/tdd/presentation.js +38 -0
  646. package/dist/tdd/queries.d.ts +10 -0
  647. package/dist/tdd/queries.js +22 -0
  648. package/dist/terminal/index.d.ts +12 -0
  649. package/dist/terminal/index.js +11 -0
  650. package/dist/terminal/register.d.ts +21 -0
  651. package/dist/terminal/register.js +31 -0
  652. package/dist/terminal/resolve.d.ts +63 -0
  653. package/dist/terminal/resolve.js +117 -0
  654. package/dist/terminal/types.d.ts +134 -0
  655. package/dist/terminal/types.js +19 -0
  656. package/dist/thinking/index.d.ts +20 -0
  657. package/dist/thinking/index.js +27 -0
  658. package/dist/title/block.d.ts +9 -0
  659. package/dist/title/block.js +32 -0
  660. package/dist/title/detect.d.ts +25 -0
  661. package/dist/title/detect.js +154 -0
  662. package/dist/title/gate.d.ts +19 -0
  663. package/dist/title/gate.js +21 -0
  664. package/dist/title/index.d.ts +3 -0
  665. package/dist/title/index.js +3 -0
  666. package/dist/tree/index.d.ts +18 -0
  667. package/dist/tree/index.js +17 -0
  668. package/dist/tree/register.d.ts +21 -0
  669. package/dist/tree/register.js +31 -0
  670. package/dist/tree/resolve.d.ts +20 -0
  671. package/dist/tree/resolve.js +31 -0
  672. package/dist/tree/types.d.ts +83 -0
  673. package/dist/tree/types.js +12 -0
  674. package/dist/ui/count.d.ts +29 -0
  675. package/dist/ui/count.js +35 -0
  676. package/dist/ui/path.d.ts +25 -0
  677. package/dist/ui/path.js +40 -0
  678. package/dist/verify/index.d.ts +17 -0
  679. package/dist/verify/index.js +14 -0
  680. package/dist/verify/project.d.ts +21 -0
  681. package/dist/verify/project.js +49 -0
  682. package/dist/verify/resolve.d.ts +26 -0
  683. package/dist/verify/resolve.js +27 -0
  684. package/dist/verify/run.d.ts +31 -0
  685. package/dist/verify/run.js +145 -0
  686. package/dist/web/a11y/announcements.d.ts +67 -0
  687. package/dist/web/a11y/announcements.js +116 -0
  688. package/dist/web/a11y/budget.d.ts +75 -0
  689. package/dist/web/a11y/budget.js +97 -0
  690. package/dist/web/a11y/focus.d.ts +37 -0
  691. package/dist/web/a11y/focus.js +106 -0
  692. package/dist/web/a11y/index.d.ts +19 -0
  693. package/dist/web/a11y/index.js +25 -0
  694. package/dist/web/a11y/naming.d.ts +23 -0
  695. package/dist/web/a11y/naming.js +55 -0
  696. package/dist/web/a11y/outline.d.ts +23 -0
  697. package/dist/web/a11y/outline.js +42 -0
  698. package/dist/web/a11y/reading.d.ts +12 -0
  699. package/dist/web/a11y/reading.js +101 -0
  700. package/dist/web/a11y/scope.d.ts +23 -0
  701. package/dist/web/a11y/scope.js +99 -0
  702. package/dist/web/a11y/states.d.ts +22 -0
  703. package/dist/web/a11y/states.js +53 -0
  704. package/dist/web/a11y/tree.d.ts +124 -0
  705. package/dist/web/a11y/tree.js +269 -0
  706. package/dist/web/a11y/walk.d.ts +225 -0
  707. package/dist/web/a11y/walk.js +568 -0
  708. package/dist/web/a11y/walkprobe.d.ts +44 -0
  709. package/dist/web/a11y/walkprobe.js +365 -0
  710. package/dist/web/audit/axe.d.ts +219 -0
  711. package/dist/web/audit/axe.js +322 -0
  712. package/dist/web/audit/behind.d.ts +63 -0
  713. package/dist/web/audit/behind.js +142 -0
  714. package/dist/web/audit/capture.d.ts +43 -0
  715. package/dist/web/audit/capture.js +185 -0
  716. package/dist/web/audit/colour.d.ts +85 -0
  717. package/dist/web/audit/colour.js +189 -0
  718. package/dist/web/audit/contrast.d.ts +74 -0
  719. package/dist/web/audit/contrast.js +104 -0
  720. package/dist/web/audit/health.d.ts +27 -0
  721. package/dist/web/audit/health.js +57 -0
  722. package/dist/web/audit/index.d.ts +22 -0
  723. package/dist/web/audit/index.js +22 -0
  724. package/dist/web/audit/pair.d.ts +55 -0
  725. package/dist/web/audit/pair.js +157 -0
  726. package/dist/web/audit/probe.d.ts +31 -0
  727. package/dist/web/audit/probe.js +189 -0
  728. package/dist/web/audit/report.d.ts +22 -0
  729. package/dist/web/audit/report.js +250 -0
  730. package/dist/web/audit/structure.d.ts +126 -0
  731. package/dist/web/audit/structure.js +595 -0
  732. package/dist/web/audit/sweep.d.ts +66 -0
  733. package/dist/web/audit/sweep.js +117 -0
  734. package/dist/web/audit/target.d.ts +89 -0
  735. package/dist/web/audit/target.js +168 -0
  736. package/dist/web/audit/verdict.d.ts +48 -0
  737. package/dist/web/audit/verdict.js +52 -0
  738. package/dist/web/audit/visual.d.ts +161 -0
  739. package/dist/web/audit/visual.js +297 -0
  740. package/dist/web/browser.d.ts +213 -0
  741. package/dist/web/browser.js +927 -0
  742. package/dist/web/compare/images.d.ts +45 -0
  743. package/dist/web/compare/images.js +101 -0
  744. package/dist/web/compare/index.d.ts +15 -0
  745. package/dist/web/compare/index.js +15 -0
  746. package/dist/web/compare/provenance.d.ts +48 -0
  747. package/dist/web/compare/provenance.js +86 -0
  748. package/dist/web/compare/regions.d.ts +78 -0
  749. package/dist/web/compare/regions.js +211 -0
  750. package/dist/web/cookies/extract.d.ts +26 -0
  751. package/dist/web/cookies/extract.js +167 -0
  752. package/dist/web/cookies/index.d.ts +8 -0
  753. package/dist/web/cookies/index.js +7 -0
  754. package/dist/web/cookies/inject.d.ts +13 -0
  755. package/dist/web/cookies/inject.js +27 -0
  756. package/dist/web/cookies/setup.d.ts +31 -0
  757. package/dist/web/cookies/setup.js +94 -0
  758. package/dist/web/design/index.d.ts +9 -0
  759. package/dist/web/design/index.js +9 -0
  760. package/dist/web/design/inventory.d.ts +126 -0
  761. package/dist/web/design/inventory.js +324 -0
  762. package/dist/web/design/probe.d.ts +24 -0
  763. package/dist/web/design/probe.js +88 -0
  764. package/dist/web/element/actionable.d.ts +34 -0
  765. package/dist/web/element/actionable.js +48 -0
  766. package/dist/web/element/animations.d.ts +48 -0
  767. package/dist/web/element/animations.js +74 -0
  768. package/dist/web/element/box.d.ts +53 -0
  769. package/dist/web/element/box.js +58 -0
  770. package/dist/web/element/hover.d.ts +75 -0
  771. package/dist/web/element/hover.js +172 -0
  772. package/dist/web/element/index.d.ts +17 -0
  773. package/dist/web/element/index.js +17 -0
  774. package/dist/web/element/listeners.d.ts +72 -0
  775. package/dist/web/element/listeners.js +98 -0
  776. package/dist/web/element/measure.d.ts +40 -0
  777. package/dist/web/element/measure.js +118 -0
  778. package/dist/web/element/probes.d.ts +108 -0
  779. package/dist/web/element/probes.js +195 -0
  780. package/dist/web/element/pseudo.d.ts +51 -0
  781. package/dist/web/element/pseudo.js +96 -0
  782. package/dist/web/element/view.d.ts +30 -0
  783. package/dist/web/element/view.js +117 -0
  784. package/dist/web/element/visibility.d.ts +42 -0
  785. package/dist/web/element/visibility.js +67 -0
  786. package/dist/web/envelope/artifacts.d.ts +23 -0
  787. package/dist/web/envelope/artifacts.js +45 -0
  788. package/dist/web/envelope/index.d.ts +9 -0
  789. package/dist/web/envelope/index.js +9 -0
  790. package/dist/web/envelope/naming.d.ts +23 -0
  791. package/dist/web/envelope/naming.js +43 -0
  792. package/dist/web/envelope/paged.d.ts +42 -0
  793. package/dist/web/envelope/paged.js +99 -0
  794. package/dist/web/envelope/sink.d.ts +43 -0
  795. package/dist/web/envelope/sink.js +67 -0
  796. package/dist/web/environment/devices.d.ts +65 -0
  797. package/dist/web/environment/devices.js +82 -0
  798. package/dist/web/environment/emulation.d.ts +124 -0
  799. package/dist/web/environment/emulation.js +258 -0
  800. package/dist/web/environment/index.d.ts +15 -0
  801. package/dist/web/environment/index.js +15 -0
  802. package/dist/web/environment/probes.d.ts +18 -0
  803. package/dist/web/environment/probes.js +40 -0
  804. package/dist/web/environment/shaping.d.ts +90 -0
  805. package/dist/web/environment/shaping.js +141 -0
  806. package/dist/web/environment/status.d.ts +51 -0
  807. package/dist/web/environment/status.js +109 -0
  808. package/dist/web/environment/storage.d.ts +55 -0
  809. package/dist/web/environment/storage.js +142 -0
  810. package/dist/web/environment/tabs.d.ts +32 -0
  811. package/dist/web/environment/tabs.js +47 -0
  812. package/dist/web/environment/view.d.ts +10 -0
  813. package/dist/web/environment/view.js +42 -0
  814. package/dist/web/evaluate/index.d.ts +6 -0
  815. package/dist/web/evaluate/index.js +6 -0
  816. package/dist/web/evaluate/outcome.d.ts +74 -0
  817. package/dist/web/evaluate/outcome.js +91 -0
  818. package/dist/web/evaluate/probe.d.ts +31 -0
  819. package/dist/web/evaluate/probe.js +303 -0
  820. package/dist/web/index.d.ts +47 -0
  821. package/dist/web/index.js +47 -0
  822. package/dist/web/input/index.d.ts +11 -0
  823. package/dist/web/input/index.js +11 -0
  824. package/dist/web/input/keys.d.ts +48 -0
  825. package/dist/web/input/keys.js +189 -0
  826. package/dist/web/input/pointer.d.ts +56 -0
  827. package/dist/web/input/pointer.js +77 -0
  828. package/dist/web/input/touch.d.ts +61 -0
  829. package/dist/web/input/touch.js +83 -0
  830. package/dist/web/mermaid.d.ts +69 -0
  831. package/dist/web/mermaid.js +223 -0
  832. package/dist/web/paths.d.ts +16 -0
  833. package/dist/web/paths.js +27 -0
  834. package/dist/web/perf/heap.d.ts +42 -0
  835. package/dist/web/perf/heap.js +73 -0
  836. package/dist/web/perf/index.d.ts +14 -0
  837. package/dist/web/perf/index.js +14 -0
  838. package/dist/web/perf/layers.d.ts +98 -0
  839. package/dist/web/perf/layers.js +165 -0
  840. package/dist/web/perf/probe.d.ts +26 -0
  841. package/dist/web/perf/probe.js +123 -0
  842. package/dist/web/perf/profile.d.ts +53 -0
  843. package/dist/web/perf/profile.js +97 -0
  844. package/dist/web/perf/trace.d.ts +152 -0
  845. package/dist/web/perf/trace.js +429 -0
  846. package/dist/web/perf/view.d.ts +6 -0
  847. package/dist/web/perf/view.js +86 -0
  848. package/dist/web/perf/vitals.d.ts +141 -0
  849. package/dist/web/perf/vitals.js +175 -0
  850. package/dist/web/reader.d.ts +131 -0
  851. package/dist/web/reader.js +340 -0
  852. package/dist/web/screenshot.d.ts +50 -0
  853. package/dist/web/screenshot.js +108 -0
  854. package/dist/web/search.d.ts +49 -0
  855. package/dist/web/search.js +137 -0
  856. package/dist/web/session/artifacts.d.ts +32 -0
  857. package/dist/web/session/artifacts.js +47 -0
  858. package/dist/web/session/emulation.d.ts +118 -0
  859. package/dist/web/session/emulation.js +307 -0
  860. package/dist/web/session/recording.d.ts +51 -0
  861. package/dist/web/session/recording.js +64 -0
  862. package/dist/web/session/settling.d.ts +42 -0
  863. package/dist/web/session/settling.js +104 -0
  864. package/dist/web/session/shaping.d.ts +48 -0
  865. package/dist/web/session/shaping.js +113 -0
  866. package/dist/web/session/sourcemaps.d.ts +64 -0
  867. package/dist/web/session/sourcemaps.js +135 -0
  868. package/dist/web/session/telemetry.d.ts +219 -0
  869. package/dist/web/session/telemetry.js +486 -0
  870. package/dist/web/session/wires.d.ts +22 -0
  871. package/dist/web/session/wires.js +11 -0
  872. package/dist/web/session.d.ts +1153 -0
  873. package/dist/web/session.js +3400 -0
  874. package/dist/web/snapshot/deep.d.ts +36 -0
  875. package/dist/web/snapshot/deep.js +91 -0
  876. package/dist/web/snapshot/flatten.d.ts +101 -0
  877. package/dist/web/snapshot/flatten.js +131 -0
  878. package/dist/web/snapshot/index.d.ts +8 -0
  879. package/dist/web/snapshot/index.js +10 -0
  880. package/dist/web/snapshot/presented.d.ts +32 -0
  881. package/dist/web/snapshot/presented.js +74 -0
  882. package/dist/web/snapshot/query.d.ts +67 -0
  883. package/dist/web/snapshot/query.js +136 -0
  884. package/dist/web/sourcemap/index.d.ts +9 -0
  885. package/dist/web/sourcemap/index.js +9 -0
  886. package/dist/web/sourcemap/mappings.d.ts +111 -0
  887. package/dist/web/sourcemap/mappings.js +218 -0
  888. package/dist/web/styles/capture.d.ts +49 -0
  889. package/dist/web/styles/capture.js +85 -0
  890. package/dist/web/styles/cascade.d.ts +107 -0
  891. package/dist/web/styles/cascade.js +275 -0
  892. package/dist/web/styles/curation.d.ts +45 -0
  893. package/dist/web/styles/curation.js +282 -0
  894. package/dist/web/styles/index.d.ts +10 -0
  895. package/dist/web/styles/index.js +10 -0
  896. package/dist/web/target/index.d.ts +7 -0
  897. package/dist/web/target/index.js +7 -0
  898. package/dist/web/target/refusals.d.ts +59 -0
  899. package/dist/web/target/refusals.js +305 -0
  900. package/dist/web/target/target.d.ts +59 -0
  901. package/dist/web/target/target.js +94 -0
  902. package/dist/web/telemetry/buffer.d.ts +35 -0
  903. package/dist/web/telemetry/buffer.js +72 -0
  904. package/dist/web/telemetry/console.d.ts +127 -0
  905. package/dist/web/telemetry/console.js +217 -0
  906. package/dist/web/telemetry/dialogs.d.ts +41 -0
  907. package/dist/web/telemetry/dialogs.js +38 -0
  908. package/dist/web/telemetry/downloads.d.ts +42 -0
  909. package/dist/web/telemetry/downloads.js +65 -0
  910. package/dist/web/telemetry/failure.d.ts +31 -0
  911. package/dist/web/telemetry/failure.js +72 -0
  912. package/dist/web/telemetry/har.d.ts +97 -0
  913. package/dist/web/telemetry/har.js +227 -0
  914. package/dist/web/telemetry/index.d.ts +18 -0
  915. package/dist/web/telemetry/index.js +18 -0
  916. package/dist/web/telemetry/lifecycle.d.ts +69 -0
  917. package/dist/web/telemetry/lifecycle.js +120 -0
  918. package/dist/web/telemetry/network.d.ts +152 -0
  919. package/dist/web/telemetry/network.js +130 -0
  920. package/dist/web/telemetry/requests.d.ts +31 -0
  921. package/dist/web/telemetry/requests.js +119 -0
  922. package/dist/web/telemetry/sockets.d.ts +56 -0
  923. package/dist/web/telemetry/sockets.js +101 -0
  924. package/dist/web/telemetry/view.d.ts +16 -0
  925. package/dist/web/telemetry/view.js +125 -0
  926. package/dist/web/wait/conditions.d.ts +87 -0
  927. package/dist/web/wait/conditions.js +100 -0
  928. package/dist/web/wait/index.d.ts +6 -0
  929. package/dist/web/wait/index.js +6 -0
  930. package/dist/web/wait/settle.d.ts +54 -0
  931. package/dist/web/wait/settle.js +84 -0
  932. package/dist/work/ask.d.ts +45 -0
  933. package/dist/work/ask.js +85 -0
  934. package/dist/work/author.d.ts +61 -0
  935. package/dist/work/author.js +144 -0
  936. package/dist/work/broker.d.ts +151 -0
  937. package/dist/work/broker.js +165 -0
  938. package/dist/work/events.d.ts +98 -0
  939. package/dist/work/events.js +57 -0
  940. package/dist/work/history.d.ts +69 -0
  941. package/dist/work/history.js +174 -0
  942. package/dist/work/index.d.ts +49 -0
  943. package/dist/work/index.js +33 -0
  944. package/dist/work/inplay.d.ts +43 -0
  945. package/dist/work/inplay.js +42 -0
  946. package/dist/work/memory.d.ts +84 -0
  947. package/dist/work/memory.js +203 -0
  948. package/dist/work/objection.d.ts +92 -0
  949. package/dist/work/objection.js +72 -0
  950. package/dist/work/provider.d.ts +79 -0
  951. package/dist/work/provider.js +45 -0
  952. package/dist/work/providers/git.d.ts +29 -0
  953. package/dist/work/providers/git.js +87 -0
  954. package/dist/work/publish.d.ts +53 -0
  955. package/dist/work/publish.js +139 -0
  956. package/dist/work/rebase.d.ts +78 -0
  957. package/dist/work/rebase.js +261 -0
  958. package/dist/work/reclaim.d.ts +56 -0
  959. package/dist/work/reclaim.js +52 -0
  960. package/dist/work/register.d.ts +29 -0
  961. package/dist/work/register.js +41 -0
  962. package/dist/work/stack.d.ts +126 -0
  963. package/dist/work/stack.js +243 -0
  964. package/dist/work/stacks.d.ts +156 -0
  965. package/dist/work/stacks.js +524 -0
  966. package/dist/work/survey.d.ts +52 -0
  967. package/dist/work/survey.js +58 -0
  968. package/dist/work/tidy.d.ts +147 -0
  969. package/dist/work/tidy.js +136 -0
  970. package/dist/work/tree.d.ts +120 -0
  971. package/dist/work/tree.js +69 -0
  972. package/dist/work/unattended.d.ts +40 -0
  973. package/dist/work/unattended.js +57 -0
  974. package/package.json +145 -0
@@ -0,0 +1,455 @@
1
+ /**
2
+ * Reading and writing the conversation on a GitHub change.
3
+ *
4
+ * Three of GitHub's habits are absorbed here rather than
5
+ * leaked. It calls the two sides of a diff LEFT and RIGHT,
6
+ * which is a display convention, so the neutral old and new
7
+ * are translated at this boundary. It keeps review threads in
8
+ * GraphQL and reactions in REST, with different id systems, so
9
+ * message ids are minted with a prefix saying which route they
10
+ * belong to. And it pages review threads a hundred at a time,
11
+ * so the reader keeps asking until GitHub says there is no
12
+ * more; stopping at the first page silently loses the tail of
13
+ * a long review.
14
+ */
15
+ import { unlink, writeFile } from "node:fs/promises";
16
+ import { tmpdir } from "node:os";
17
+ import { join } from "node:path";
18
+ import { run } from "../../../exec/index.js";
19
+ import { GHOST, ownerRepoFromKey } from "./claims.js";
20
+ /** Message id prefixes, naming which REST route owns the id. */
21
+ const REVIEW_COMMENT = "rc:";
22
+ const ISSUE_COMMENT = "ic:";
23
+ /** How many threads to ask for per page. GitHub's own cap. */
24
+ const THREAD_PAGE_SIZE = 100;
25
+ const THREADS_QUERY = `query PrReviewThreads($owner: String!, $repo: String!, $number: Int!, $after: String) {
26
+ repository(owner: $owner, name: $repo) {
27
+ pullRequest(number: $number) {
28
+ reviewThreads(first: ${THREAD_PAGE_SIZE}, after: $after) {
29
+ pageInfo { hasNextPage endCursor }
30
+ nodes {
31
+ id
32
+ isResolved
33
+ resolvedBy { login name }
34
+ isOutdated
35
+ subjectType
36
+ path
37
+ line
38
+ startLine
39
+ diffSide
40
+ comments(first: 50) {
41
+ nodes {
42
+ id
43
+ databaseId
44
+ author { login }
45
+ body
46
+ createdAt
47
+ url
48
+ }
49
+ }
50
+ }
51
+ }
52
+ }
53
+ }
54
+ }`;
55
+ const REPLY_MUTATION = `mutation AddThreadReply($threadId: ID!, $body: String!) {
56
+ addPullRequestReviewThreadReply(input: {
57
+ pullRequestReviewThreadId: $threadId
58
+ body: $body
59
+ }) {
60
+ comment { id url }
61
+ }
62
+ }`;
63
+ const RESOLVE_MUTATION = `mutation ResolveThread($threadId: ID!) {
64
+ resolveReviewThread(input: { threadId: $threadId }) {
65
+ thread { id isResolved }
66
+ }
67
+ }`;
68
+ const UNRESOLVE_MUTATION = `mutation UnresolveThread($threadId: ID!) {
69
+ unresolveReviewThread(input: { threadId: $threadId }) {
70
+ thread { id isResolved }
71
+ }
72
+ }`;
73
+ /** GitHub's review event for each neutral verdict. */
74
+ const REVIEW_EVENT = {
75
+ approve: "APPROVE",
76
+ "request-changes": "REQUEST_CHANGES",
77
+ comment: "COMMENT",
78
+ };
79
+ /** The neutral verdict for each of GitHub's review states. */
80
+ function verdictOf(state) {
81
+ if (state === "APPROVED")
82
+ return "approve";
83
+ if (state === "CHANGES_REQUESTED")
84
+ return "request-changes";
85
+ return "comment";
86
+ }
87
+ /** Reaction names GitHub accepts, which match the model's. */
88
+ const REACTION_NAMES = [
89
+ "+1",
90
+ "-1",
91
+ "laugh",
92
+ "confused",
93
+ "heart",
94
+ "hooray",
95
+ "rocket",
96
+ "eyes",
97
+ ];
98
+ function slugOf(repo) {
99
+ const owned = ownerRepoFromKey(repo.key);
100
+ if (!owned)
101
+ throw new Error(`${repo.key} is not a GitHub repo key`);
102
+ return `${owned.owner}/${owned.repo}`;
103
+ }
104
+ function record(value) {
105
+ return typeof value === "object" && value !== null
106
+ ? value
107
+ : {};
108
+ }
109
+ /**
110
+ * Walk into a response, refusing rather than defaulting.
111
+ *
112
+ * `record` above answers `{}` for anything it does not recognize,
113
+ * which is right for a field that may be absent and wrong for the
114
+ * envelope itself. Walked with it, a renamed field, a schema change
115
+ * or a partial error payload all arrive as a change with no threads
116
+ * on it, and that is the worst way a read can fail: the person
117
+ * concludes nobody commented and moves on, with nothing anywhere
118
+ * saying the question went unanswered.
119
+ *
120
+ * Absence is the test, not emptiness. A change with no comments is
121
+ * ordinary and answers with the field present and its list empty, so
122
+ * only a missing key is a refusal.
123
+ */
124
+ function into(value, path, what) {
125
+ let at = value;
126
+ const walked = [];
127
+ for (const key of path) {
128
+ if (typeof at !== "object" || at === null || !(key in at)) {
129
+ const missing = [...walked, key].join(".");
130
+ throw new Error(`GitHub answered ${what} without ${missing}. Reading on would ` +
131
+ "report nothing found, which is indistinguishable from a change " +
132
+ "that genuinely has none.");
133
+ }
134
+ at = at[key];
135
+ walked.push(key);
136
+ }
137
+ return record(at);
138
+ }
139
+ function str(value) {
140
+ return typeof value === "string" ? value : undefined;
141
+ }
142
+ function list(value) {
143
+ return Array.isArray(value) ? value : [];
144
+ }
145
+ /** The counted reactions on a REST comment. */
146
+ function reactionsOf(value) {
147
+ const raw = record(value);
148
+ const counts = [];
149
+ for (const name of REACTION_NAMES) {
150
+ const count = raw[name];
151
+ if (typeof count === "number" && count > 0) {
152
+ counts.push({ reaction: name, count });
153
+ }
154
+ }
155
+ return counts;
156
+ }
157
+ /** A top-level comment, in the neutral shape. */
158
+ function messageFromIssueComment(raw) {
159
+ const reactions = reactionsOf(raw.reactions);
160
+ return {
161
+ id: `${ISSUE_COMMENT}${String(raw.id ?? "")}`,
162
+ author: { id: str(record(raw.user).login) ?? GHOST },
163
+ body: str(raw.body) ?? "",
164
+ ...(str(raw.created_at) ? { createdAt: str(raw.created_at) } : {}),
165
+ ...(str(raw.html_url) ? { url: str(raw.html_url) } : {}),
166
+ ...(reactions.length > 0 ? { reactions } : {}),
167
+ };
168
+ }
169
+ /** A thread comment from GraphQL, keyed for the REST routes. */
170
+ function messageFromThreadComment(raw) {
171
+ const databaseId = raw.databaseId;
172
+ const id = typeof databaseId === "number"
173
+ ? `${REVIEW_COMMENT}${databaseId}`
174
+ : (str(raw.id) ?? "");
175
+ return {
176
+ id,
177
+ author: { id: str(record(raw.author).login) ?? GHOST },
178
+ body: str(raw.body) ?? "",
179
+ ...(str(raw.createdAt) ? { createdAt: str(raw.createdAt) } : {}),
180
+ ...(str(raw.url) ? { url: str(raw.url) } : {}),
181
+ };
182
+ }
183
+ /** The anchor a thread carries, when it still has one. */
184
+ function anchorOf(raw) {
185
+ const path = str(raw.path);
186
+ if (!path)
187
+ return undefined;
188
+ // A remark about the whole file says so, and GitHub answers `line: 1` for
189
+ // one anyway. Reading the line first made a file-level remark come back as
190
+ // a remark on the first line: we would post one, read it back, and report
191
+ // it somewhere it was never aimed. Nobody would notice from the listing,
192
+ // since line 1 of a file is a plausible place to have said something.
193
+ if (str(raw.subjectType) === "FILE")
194
+ return { subject: "file", path };
195
+ const line = raw.line;
196
+ if (typeof line !== "number") {
197
+ // GitHub nulls the line when a force-push strands the
198
+ // thread; the file is all that is left of the anchor.
199
+ return { subject: "file", path };
200
+ }
201
+ const startLine = raw.startLine;
202
+ const blob = str(raw.diffSide) === "LEFT" ? "old" : "new";
203
+ return {
204
+ subject: "line",
205
+ path,
206
+ blob,
207
+ line,
208
+ ...(typeof startLine === "number" && startLine !== line
209
+ ? { startLine }
210
+ : {}),
211
+ };
212
+ }
213
+ /**
214
+ * A person, from a GraphQL actor node, or nobody.
215
+ *
216
+ * Nobody rather than the ghost user: an absent actor here means the field was not
217
+ * selected or the thread is open, and naming a placeholder would assert somebody acted.
218
+ */
219
+ function actorFrom(raw) {
220
+ const login = str(record(raw).login);
221
+ if (login === undefined)
222
+ return undefined;
223
+ const name = str(record(raw).name);
224
+ return { id: login, ...(name === undefined ? {} : { name }) };
225
+ }
226
+ function threadFrom(raw) {
227
+ const anchor = anchorOf(raw);
228
+ const closedBy = actorFrom(raw.resolvedBy);
229
+ return {
230
+ id: str(raw.id) ?? "",
231
+ resolved: raw.isResolved === true,
232
+ // Who closed it. The follow-up view reads this to say a thread was
233
+ // resolved by somebody other than you, which is the attribution that
234
+ // whole feature exists to give, and it was asking for a field the query
235
+ // never selected, so every follow-up degraded to "resolved with no
236
+ // reply" and never named anyone.
237
+ ...(closedBy === undefined ? {} : { resolvedBy: closedBy }),
238
+ stale: raw.isOutdated === true,
239
+ ...(anchor ? { anchor } : {}),
240
+ comments: list(record(raw.comments).nodes).map((node) => messageFromThreadComment(record(node))),
241
+ };
242
+ }
243
+ /** GitHub's wire shape for one anchored comment. */
244
+ function wireComment(anchor, body) {
245
+ // GitHub has nowhere to attach a remark about the change
246
+ // itself, so the plan spills those into the review body long
247
+ // before here. Reaching this with one is a bug in the plan,
248
+ // and saying so beats posting a comment against no path.
249
+ if (anchor.subject === "change") {
250
+ throw new Error("a remark about the whole change cannot be an anchored comment");
251
+ }
252
+ if (anchor.subject === "file") {
253
+ return { path: anchor.path, body, subject_type: "file" };
254
+ }
255
+ const side = anchor.blob === "old" ? "LEFT" : "RIGHT";
256
+ return {
257
+ path: anchor.path,
258
+ body,
259
+ line: anchor.line,
260
+ side,
261
+ ...(anchor.startLine !== undefined && anchor.startLine !== anchor.line
262
+ ? { start_line: anchor.startLine, start_side: side }
263
+ : {}),
264
+ };
265
+ }
266
+ /** Which REST route a message id belongs to. */
267
+ function reactionRoute(slug, message) {
268
+ if (message.id.startsWith(REVIEW_COMMENT)) {
269
+ const id = message.id.slice(REVIEW_COMMENT.length);
270
+ return `repos/${slug}/pulls/comments/${id}/reactions`;
271
+ }
272
+ if (message.id.startsWith(ISSUE_COMMENT)) {
273
+ const id = message.id.slice(ISSUE_COMMENT.length);
274
+ return `repos/${slug}/issues/comments/${id}/reactions`;
275
+ }
276
+ throw new Error(`cannot tell what kind of comment ${message.id} is, so it cannot be reacted to`);
277
+ }
278
+ /** Build the conversation facet. */
279
+ export function githubConversation(exec) {
280
+ async function api(args, what) {
281
+ const stdout = await run(exec, "gh", ["api", ...args], what);
282
+ return (stdout.trim() ? JSON.parse(stdout) : {});
283
+ }
284
+ /**
285
+ * Read a REST list in full.
286
+ *
287
+ * GitHub answers a list request with thirty records and says
288
+ * nothing about the rest, so a plain read of a busy pull
289
+ * request quietly loses its tail, which is where the recent
290
+ * argument is. `--paginate` walks every page and merges them
291
+ * into one array; asking for a hundred at a time is what
292
+ * keeps that from being a dozen round trips.
293
+ */
294
+ async function apiList(route, what) {
295
+ const joiner = route.includes("?") ? "&" : "?";
296
+ return api(["--paginate", `${route}${joiner}per_page=100`], what);
297
+ }
298
+ async function graphql(query, variables, what) {
299
+ const args = ["graphql", "-f", `query=${query}`];
300
+ for (const [name, value] of Object.entries(variables)) {
301
+ // gh uses -F for numbers and -f for raw strings.
302
+ args.push(typeof value === "number" ? "-F" : "-f", `${name}=${value}`);
303
+ }
304
+ return api(args, what);
305
+ }
306
+ /** Post a JSON payload through a temp file. */
307
+ async function postJson(route, payload, what) {
308
+ const file = join(tmpdir(), `pi-review-${Date.now()}-${Math.random()}.json`);
309
+ try {
310
+ await writeFile(file, JSON.stringify(payload), "utf8");
311
+ const raw = await api(["--method", "POST", route, "--input", file], what);
312
+ const answer = record(raw);
313
+ return {
314
+ ...(answer.id !== undefined ? { id: String(answer.id) } : {}),
315
+ ...(str(answer.html_url) ? { url: str(answer.html_url) } : {}),
316
+ };
317
+ }
318
+ finally {
319
+ // A leftover temp file is harmless; failing to clean one
320
+ // up must not fail the operation that succeeded.
321
+ await unlink(file).catch(() => { });
322
+ }
323
+ }
324
+ return {
325
+ async reviews(ref) {
326
+ const raw = await apiList(`repos/${slugOf(ref.repo)}/pulls/${ref.id}/reviews`, `reading reviews on pull request ${ref.id}`);
327
+ return list(raw).map((entry) => {
328
+ const review = record(entry);
329
+ const state = str(review.state) ?? "COMMENTED";
330
+ return {
331
+ id: String(review.id ?? ""),
332
+ author: { id: str(record(review.user).login) ?? GHOST },
333
+ verdict: verdictOf(state),
334
+ nativeVerdict: state,
335
+ body: str(review.body) ?? "",
336
+ ...(str(review.submitted_at)
337
+ ? { submittedAt: str(review.submitted_at) }
338
+ : {}),
339
+ ...(str(review.html_url) ? { url: str(review.html_url) } : {}),
340
+ };
341
+ });
342
+ },
343
+ async threads(ref) {
344
+ const owned = ownerRepoFromKey(ref.repo.key);
345
+ if (!owned)
346
+ throw new Error(`${ref.repo.key} is not a GitHub repo key`);
347
+ const threads = [];
348
+ let after;
349
+ // Keep asking. A long review has more than one page, and
350
+ // the tail is exactly where the unresolved threads are.
351
+ for (;;) {
352
+ const raw = await graphql(THREADS_QUERY, {
353
+ owner: owned.owner,
354
+ repo: owned.repo,
355
+ number: Number.parseInt(ref.id, 10),
356
+ ...(after ? { after } : {}),
357
+ }, `reading threads on pull request ${ref.id}`);
358
+ const page = into(raw, ["data", "repository", "pullRequest", "reviewThreads"], `threads on pull request ${ref.id}`);
359
+ for (const node of list(page.nodes)) {
360
+ threads.push(threadFrom(record(node)));
361
+ }
362
+ const info = record(page.pageInfo);
363
+ const cursor = str(info.endCursor);
364
+ if (info.hasNextPage !== true || !cursor)
365
+ break;
366
+ after = cursor;
367
+ }
368
+ return threads;
369
+ },
370
+ async messages(ref) {
371
+ const raw = await apiList(`repos/${slugOf(ref.repo)}/issues/${ref.id}/comments`, `reading comments on pull request ${ref.id}`);
372
+ return list(raw).map((entry) => messageFromIssueComment(record(entry)));
373
+ },
374
+ async postReview(ref, review) {
375
+ return postJson(`repos/${slugOf(ref.repo)}/pulls/${ref.id}/reviews`, {
376
+ event: REVIEW_EVENT[review.verdict],
377
+ body: review.body,
378
+ comments: review.comments.map((comment) => wireComment(comment.anchor, comment.body)),
379
+ }, `posting a review on pull request ${ref.id}`);
380
+ },
381
+ /**
382
+ * One anchored remark, posted on its own rather than in a review.
383
+ *
384
+ * This is where a remark about a whole file has to go. The batch route
385
+ * refuses one with `0.position (Expected value to not be null)` and
386
+ * rejects the entire review with it, so a single file-level remark used
387
+ * to cost every other remark beside it; adding `subject_type` to the
388
+ * batch is refused too, as `0.subjectType (Field is not defined on
389
+ * DraftPullRequestReviewComment)`. This route takes the same comment
390
+ * without complaint.
391
+ *
392
+ * It needs a commit to hang the comment from, which a review does not,
393
+ * so the change is read first to learn its head.
394
+ */
395
+ async commentOn(ref, anchor, body) {
396
+ const change = record(await api([`repos/${slugOf(ref.repo)}/pulls/${ref.id}`], `reading pull request ${ref.id} for the commit to anchor a comment to`));
397
+ const head = str(record(change.head).sha);
398
+ if (!head) {
399
+ throw new Error(`GitHub did not say what commit pull request ${ref.id} is at, and a comment posted on its own has to name one.`);
400
+ }
401
+ return postJson(`repos/${slugOf(ref.repo)}/pulls/${ref.id}/comments`, { ...wireComment(anchor, body), commit_id: head }, `posting a remark on ${anchor.subject === "file" ? anchor.path : "a line"} in pull request ${ref.id}`);
402
+ },
403
+ async reply(_ref, thread, body) {
404
+ const raw = await graphql(REPLY_MUTATION, { threadId: thread.id, body }, `replying to thread ${thread.id}`);
405
+ const comment = record(record(record(record(raw).data).addPullRequestReviewThreadReply)
406
+ .comment);
407
+ return {
408
+ ...(str(comment.id) ? { id: str(comment.id) } : {}),
409
+ ...(str(comment.url) ? { url: str(comment.url) } : {}),
410
+ };
411
+ },
412
+ async resolve(_ref, thread) {
413
+ await graphql(RESOLVE_MUTATION, { threadId: thread.id }, `resolving thread ${thread.id}`);
414
+ },
415
+ async unresolve(_ref, thread) {
416
+ await graphql(UNRESOLVE_MUTATION, { threadId: thread.id }, `reopening thread ${thread.id}`);
417
+ },
418
+ async comment(ref, body) {
419
+ const raw = await api([
420
+ "--method",
421
+ "POST",
422
+ `repos/${slugOf(ref.repo)}/issues/${ref.id}/comments`,
423
+ "-f",
424
+ `body=${body}`,
425
+ ], `commenting on pull request ${ref.id}`);
426
+ const answer = record(raw);
427
+ return {
428
+ ...(answer.id !== undefined ? { id: String(answer.id) } : {}),
429
+ ...(str(answer.html_url) ? { url: str(answer.html_url) } : {}),
430
+ };
431
+ },
432
+ async react(ref, subject, reaction) {
433
+ await api([
434
+ "--method",
435
+ "POST",
436
+ reactionRoute(slugOf(ref.repo), subject),
437
+ "-f",
438
+ `content=${reaction}`,
439
+ ], `reacting to ${subject.id}`);
440
+ },
441
+ async viewer() {
442
+ // The login, which is how every other GitHub payload names an
443
+ // author, so a comparison against a comment's author is comparing
444
+ // like with like. The display name is carried for a listing and
445
+ // never used to decide identity.
446
+ const answer = await api(["user"], "asking who you are");
447
+ const login = str(answer.login);
448
+ if (login === undefined) {
449
+ throw new Error("GitHub did not say who you are, so a question about your own remarks cannot be answered about the right person");
450
+ }
451
+ const name = str(answer.name);
452
+ return { id: login, ...(name === undefined ? {} : { name }) };
453
+ },
454
+ };
455
+ }
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Fields two GitHub readers both need.
3
+ *
4
+ * There are two places that turn a REST pull request into a
5
+ * {@link Proposal}: the proposals facet, which reads changes, and the
6
+ * authoring facet, which reads back the change it just wrote. They are
7
+ * near-duplicates and predate this file, and merging them is a real
8
+ * refactor rather than a detail of adding a field.
9
+ *
10
+ * What this file refuses to do is make the duplication worse. A reader
11
+ * added to one and forgotten in the other means a label that appears
12
+ * when you fetch a change and vanishes when you edit it, which reads as
13
+ * the edit having removed it.
14
+ */
15
+ import type { Actor } from "../../change.js";
16
+ /**
17
+ * Labels and assignees, when GitHub reported them.
18
+ *
19
+ * Both are carried on the pull request representation itself, so reading
20
+ * them costs nothing extra even though writing them takes a separate
21
+ * call to the issue routes.
22
+ *
23
+ * Each field is present only when GitHub sent the array. An empty array
24
+ * and an absent field are different facts: the first says this change
25
+ * has no labels, the second says nobody looked.
26
+ */
27
+ export declare function labelsAndAssignees(raw: Record<string, unknown>): {
28
+ labels?: string[];
29
+ assignees?: Actor[];
30
+ };
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Fields two GitHub readers both need.
3
+ *
4
+ * There are two places that turn a REST pull request into a
5
+ * {@link Proposal}: the proposals facet, which reads changes, and the
6
+ * authoring facet, which reads back the change it just wrote. They are
7
+ * near-duplicates and predate this file, and merging them is a real
8
+ * refactor rather than a detail of adding a field.
9
+ *
10
+ * What this file refuses to do is make the duplication worse. A reader
11
+ * added to one and forgotten in the other means a label that appears
12
+ * when you fetch a change and vanishes when you edit it, which reads as
13
+ * the edit having removed it.
14
+ */
15
+ /** Every string in an array of records under one key. */
16
+ function names(value, key) {
17
+ if (!Array.isArray(value))
18
+ return undefined;
19
+ const found = [];
20
+ for (const entry of value) {
21
+ if (typeof entry !== "object" || entry === null)
22
+ continue;
23
+ const held = entry[key];
24
+ if (typeof held === "string" && held !== "")
25
+ found.push(held);
26
+ }
27
+ return found;
28
+ }
29
+ /**
30
+ * Labels and assignees, when GitHub reported them.
31
+ *
32
+ * Both are carried on the pull request representation itself, so reading
33
+ * them costs nothing extra even though writing them takes a separate
34
+ * call to the issue routes.
35
+ *
36
+ * Each field is present only when GitHub sent the array. An empty array
37
+ * and an absent field are different facts: the first says this change
38
+ * has no labels, the second says nobody looked.
39
+ */
40
+ export function labelsAndAssignees(raw) {
41
+ const labels = names(raw.labels, "name");
42
+ const logins = names(raw.assignees, "login");
43
+ return {
44
+ ...(labels ? { labels } : {}),
45
+ ...(logins ? { assignees: logins.map((id) => ({ id })) } : {}),
46
+ };
47
+ }
@@ -0,0 +1,15 @@
1
+ /**
2
+ * The GitHub provider.
3
+ *
4
+ * Reaches GitHub through the `gh` CLI, which is where the
5
+ * authentication already lives. Capabilities are declared from
6
+ * what GitHub actually does rather than what would be
7
+ * convenient: it flags a stranded anchor instead of pinning
8
+ * one, it cannot thread a reply onto a top-level comment, and
9
+ * it records no stack at all, so any stack it reports is
10
+ * derived and says so.
11
+ */
12
+ import type { ProviderDeps } from "../../../exec/index.js";
13
+ import type { ReviewProvider } from "../../provider.js";
14
+ /** Build the GitHub provider. */
15
+ export declare function createGitHubProvider(deps: ProviderDeps): ReviewProvider;
@@ -0,0 +1,110 @@
1
+ /**
2
+ * The GitHub provider.
3
+ *
4
+ * Reaches GitHub through the `gh` CLI, which is where the
5
+ * authentication already lives. Capabilities are declared from
6
+ * what GitHub actually does rather than what would be
7
+ * convenient: it flags a stranded anchor instead of pinning
8
+ * one, it cannot thread a reply onto a top-level comment, and
9
+ * it records no stack at all, so any stack it reports is
10
+ * derived and says so.
11
+ */
12
+ import { githubAuthoring } from "./authoring.js";
13
+ import { claimGitHubReference, claimGitHubRepo, GITHUB_PROVIDER_ID, } from "./claims.js";
14
+ import { githubConversation } from "./conversation.js";
15
+ import { githubProposals } from "./proposals.js";
16
+ import { githubStacking } from "./stacking.js";
17
+ /**
18
+ * Claim priority. A generalist: any backend that specializes
19
+ * in a repo GitHub also mirrors should be asked first.
20
+ */
21
+ const GITHUB_PRIORITY = 100;
22
+ /** The reactions GitHub accepts, in its own order. */
23
+ const GITHUB_REACTIONS = [
24
+ "+1",
25
+ "-1",
26
+ "laugh",
27
+ "confused",
28
+ "heart",
29
+ "hooray",
30
+ "rocket",
31
+ "eyes",
32
+ ];
33
+ /** What GitHub can do, which does not vary by repo. */
34
+ function githubCapabilities() {
35
+ return {
36
+ proposals: { fetchAsRef: true, checks: true, list: true },
37
+ stacking: { provenance: "derived", fanOut: true },
38
+ conversation: {
39
+ anchoredBatchReview: true,
40
+ // On its own, not in a review. The batch route refuses a
41
+ // file-level comment and rejects the whole review with it, and
42
+ // declaring this as a bare `true` beside `anchoredBatchReview:
43
+ // true` said the pair was possible when only each half was.
44
+ fileLevelComments: "standalone",
45
+ multiLineRanges: true,
46
+ unresolve: true,
47
+ reactions: GITHUB_REACTIONS,
48
+ // A reply must target a review thread; issue comments
49
+ // have no thread to hang from.
50
+ topLevelThreading: false,
51
+ // A force-push strands a thread and GitHub marks it,
52
+ // rather than keeping the anchor's commit reachable.
53
+ staleness: "flagged",
54
+ selfVerdicts: ["comment"],
55
+ },
56
+ authoring: {
57
+ propose: true,
58
+ // One change at a time. GitHub has no notion of a stack, so
59
+ // there is nothing to submit as one.
60
+ proposeStack: false,
61
+ reviewersAt: "any-time",
62
+ // A base is a field on the change here, so retargeting one
63
+ // change moves that change and nothing else.
64
+ retarget: "change",
65
+ setDraft: true,
66
+ close: true,
67
+ reopen: true,
68
+ merge: true,
69
+ labels: true,
70
+ assignees: true,
71
+ // A login, not an email. The REST routes take `assignees` as an
72
+ // array of logins and answer 422 for anything else, and an email
73
+ // address is not derivable from a login here: the address on a
74
+ // commit belongs to the commit, not to the account.
75
+ identifies: "login",
76
+ // True because Actions runs can be reposted, not because every
77
+ // check on a GitHub change can be. A check contributed by some
78
+ // other app has no run behind it, and the implementation
79
+ // declines by name rather than pretending it started one.
80
+ rerunChecks: true,
81
+ // This said false, on the belief that a merge queue was
82
+ // something a backend layered on top of GitHub added. GitHub
83
+ // has its own: `MergeQueueEntry` is on the GraphQL pull
84
+ // request, it reports a position and whether the change is
85
+ // being tested `solo`, and pushing to a queued change ejects
86
+ // it the same way. Saying false here made the queue gate dead
87
+ // on GitHub as well as unreachable everywhere.
88
+ //
89
+ // Declaring true is not the same as refusing: the proposals
90
+ // facet reports the posture, and a change with no queue entry
91
+ // reads as unqueued and is permitted. The gate bites only when
92
+ // there is really something to eject.
93
+ refusesWhileEnqueued: true,
94
+ },
95
+ };
96
+ }
97
+ /** Build the GitHub provider. */
98
+ export function createGitHubProvider(deps) {
99
+ return {
100
+ id: GITHUB_PROVIDER_ID,
101
+ priority: GITHUB_PRIORITY,
102
+ claimReference: claimGitHubReference,
103
+ claimRepo: claimGitHubRepo,
104
+ capabilities: githubCapabilities,
105
+ proposals: githubProposals(deps.exec),
106
+ conversation: githubConversation(deps.exec),
107
+ stacking: githubStacking(deps.exec),
108
+ authoring: githubAuthoring(deps.exec),
109
+ };
110
+ }
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Reading changes from GitHub.
3
+ *
4
+ * GitHub says a merged pull request is `closed` with a
5
+ * `merged_at` timestamp, and calls a draft a state in one API
6
+ * and a flag in another. The neutral model says merged is its
7
+ * own state and draft is a flag, so the translation happens
8
+ * here, once, rather than in every caller that has to decide
9
+ * what `closed` meant.
10
+ */
11
+ import type { Exec } from "../../../exec/index.js";
12
+ import type { ProposalsFacet } from "../../provider.js";
13
+ /** Build the proposals facet. */
14
+ export declare function githubProposals(exec: Exec): ProposalsFacet;