@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,340 @@
1
+ /**
2
+ * What was asked of whom, and what came back.
3
+ *
4
+ * A run is a record rather than a working state: it says who was
5
+ * asked, in which pass, and what each of them came back with. A
6
+ * finding points at its run by id, so a run that got edited under
7
+ * one would change what an already-recorded finding means. Nothing
8
+ * here mutates; substituting an outcome returns a new run.
9
+ *
10
+ * The counts are kept as a function rather than fields, because a
11
+ * stored count and a stored list of outcomes are two things that
12
+ * can disagree, and only one of them is the evidence.
13
+ */
14
+ import { count } from "../../ui/count.js";
15
+ /**
16
+ * What a round was given, in the shape a run records it.
17
+ *
18
+ * @see whatItRead
19
+ *
20
+ * The counterpart of `whatItRead`, and one helper for the same reason:
21
+ * it is one fact, six builders write it, and the last fact that had to
22
+ * reach all six reached four.
23
+ */
24
+ export function whatItGave(request) {
25
+ return request.given === undefined ? {} : { given: request.given };
26
+ }
27
+ /** How many digits a sequence is padded to, so ids sort as text. */
28
+ const SEQ_WIDTH = 6;
29
+ /**
30
+ * Name a run.
31
+ *
32
+ * The round leads, so a bare id says what pass it was without
33
+ * anything having to look it up. The timestamp sorts. The sequence
34
+ * is part of the name rather than a tiebreak applied later, because
35
+ * two runs inside one millisecond would otherwise collide and make
36
+ * one run's findings unreachable, and it is zero-padded so it keeps
37
+ * sorting as text rather than putting 10 before 9.
38
+ */
39
+ export function newRunId(round, at, seq) {
40
+ const stamp = at.toISOString().replace(/[-:.]/g, "").replace("Z", "");
41
+ return `${round}-${stamp}-${String(seq).padStart(SEQ_WIDTH, "0")}`;
42
+ }
43
+ /**
44
+ * What is wrong with the session rather than with the reviewers.
45
+ *
46
+ * Measured. Pi upgraded mid-session and deleted the versioned install
47
+ * directory the running session pins its children to, so every
48
+ * reviewer died on dispatch. The runner diagnosed it correctly and
49
+ * put the same sentence on all seven, and the round printed it seven
50
+ * times as though seven separate things had gone wrong.
51
+ *
52
+ * The repetition is not the cost. Seven failures beside a retry hint
53
+ * read as seven flaky reviewers, and retrying is the one thing that
54
+ * cannot work: it fails identically until the session restarts.
55
+ *
56
+ * Read off the outcome rather than sniffed out of the message. This
57
+ * matched a prefix first, which made one library string-match another
58
+ * library's prose, and both are free to reword: the diagnosis is a
59
+ * fact the dispatching side knows, so it is carried as one.
60
+ *
61
+ * One participant is enough. A stale install kills every reviewer it
62
+ * reaches, and a round where one dispatch raced the deletion is
63
+ * exactly as unrecoverable by retry as one where all seven did.
64
+ */
65
+ export function staleRuntimeAdvisory(run) {
66
+ return run.outcomes.find((one) => one.advisory !== undefined)?.advisory;
67
+ }
68
+ /**
69
+ * One line for each participant that failed, without saying the same
70
+ * paragraph twice.
71
+ *
72
+ * The roll call has to survive an advisory: a reader needs to see who
73
+ * was asked and that none of them answered, or the round looks like it
74
+ * never ran. What it does not need is the advisory repeated under
75
+ * every name, which is what hoisting a sentence already on every
76
+ * outcome would otherwise produce, one copy longer than before.
77
+ *
78
+ * What was hoisted is told rather than worked out again. Deciding it
79
+ * twice means the two can disagree, and the way they disagree is the
80
+ * worst of both: a caller that suppressed the advisory gets a roll
81
+ * call of reviewers pointing at a line that is not there.
82
+ */
83
+ export function failureLines(run, hoisted) {
84
+ const lines = [];
85
+ for (const outcome of run.outcomes) {
86
+ if (outcome.failure === undefined)
87
+ continue;
88
+ lines.push(outcome.failure === hoisted
89
+ ? `${outcome.participantId}: as above.`
90
+ : `${outcome.participantId}: ${outcome.failure}`);
91
+ }
92
+ return lines;
93
+ }
94
+ /**
95
+ * What became of each participant a limit took away.
96
+ *
97
+ * The round already records that a reviewer was stopped and where its
98
+ * answer was kept, and recorded both without ever printing them, which
99
+ * is most of the way to losing the answer regardless: nobody opens a
100
+ * ledger they have no reason to open. One line each, naming who, what
101
+ * stopped them and where to read what they said.
102
+ */
103
+ export function stoppedNotes(run) {
104
+ const notes = [];
105
+ for (const outcome of run.outcomes) {
106
+ const stopped = outcome.stopped;
107
+ if (stopped === undefined)
108
+ continue;
109
+ const kept = outcome.answerPath === undefined
110
+ ? "nothing of its answer was kept"
111
+ : `its answer is at ${outcome.answerPath}`;
112
+ // A soft deadline is the round asking, not the round failing,
113
+ // and the ledger has to say so too. Reframing it in one surface
114
+ // and calling it a stop in the next just moves the alarm.
115
+ const how = stopped.limit === "soft-deadline"
116
+ ? "asked to wrap up early"
117
+ : `stopped (${stopped.limit})`;
118
+ notes.push(`${outcome.participantId} ${how}, ${count(outcome.findingIds.length, "finding")} read, ${kept}`);
119
+ }
120
+ return notes;
121
+ }
122
+ /**
123
+ * How a run went.
124
+ *
125
+ * Someone asked with no outcome at all counts as failed rather than
126
+ * as pending, since a run being reported on has finished and a
127
+ * participant that never reported is one that dropped. Answering
128
+ * nothing is an answer: a reviewer that read the change and had no
129
+ * complaint is not a failure, and counting it as one would make a
130
+ * clean review look broken.
131
+ *
132
+ * Unless the round is still open, where the same silence means the
133
+ * opposite. Nobody has asked those reviewers for anything yet: a
134
+ * started round that has recorded nothing summarised as seven failed
135
+ * out of seven, and every sentence built on that read as an
136
+ * accusation against reviewers who were at that moment working.
137
+ */
138
+ export function runSummary(run) {
139
+ let answered = 0;
140
+ let reported = 0;
141
+ let findings = 0;
142
+ let tokens;
143
+ let cost;
144
+ for (const participant of run.participants) {
145
+ const outcome = run.outcomes.find((o) => o.participantId === participant.id);
146
+ if (outcome === undefined)
147
+ continue;
148
+ // Before the failure check, because a reviewer that died still
149
+ // spent what it spent.
150
+ if (outcome.usage?.tokens !== undefined) {
151
+ tokens = (tokens ?? 0) + outcome.usage.tokens;
152
+ }
153
+ if (outcome.usage?.cost !== undefined) {
154
+ cost = (cost ?? 0) + outcome.usage.cost;
155
+ }
156
+ if (outcome.failure !== undefined) {
157
+ reported += 1;
158
+ continue;
159
+ }
160
+ answered += 1;
161
+ findings += outcome.findingIds.length;
162
+ }
163
+ // A failure somebody recorded is a failure whatever state the round
164
+ // is in. Only silence changes meaning: on a settled round it is a
165
+ // participant that dropped, and on an open one it is a participant
166
+ // nobody has asked about yet.
167
+ const silent = run.participants.length - answered - reported;
168
+ const priced = run.outcomes.filter((outcome) => outcome.usage !== undefined).length;
169
+ return {
170
+ asked: run.participants.length,
171
+ answered,
172
+ failed: reported + (run.open === true ? 0 : silent),
173
+ pending: run.open === true ? silent : 0,
174
+ findings,
175
+ ...(tokens === undefined ? {} : { tokens }),
176
+ ...(cost === undefined ? {} : { cost }),
177
+ ...(priced > 0 && priced < run.participants.length
178
+ ? { partlyPriced: true }
179
+ : {}),
180
+ };
181
+ }
182
+ /**
183
+ * A retried outcome, carrying what the attempt it replaces cost.
184
+ *
185
+ * The findings are replaced, because the new attempt supersedes the
186
+ * old one and the round should not show both. The money is not: it
187
+ * was spent, and the reviewer being asked twice is precisely why the
188
+ * round cost what it did. Replacing the usage as well made the total
189
+ * fall after money had gone out, so the rounds with retries in them,
190
+ * which are the expensive ones, were the ones that under-reported.
191
+ */
192
+ function billedWith(outcome, replaced) {
193
+ const before = replaced.usage;
194
+ if (before === undefined)
195
+ return outcome;
196
+ const tokens = sum(outcome.usage?.tokens, before.tokens);
197
+ const cost = sum(outcome.usage?.cost, before.cost);
198
+ if (tokens === undefined && cost === undefined)
199
+ return outcome;
200
+ return {
201
+ ...outcome,
202
+ usage: {
203
+ ...(tokens === undefined ? {} : { tokens }),
204
+ ...(cost === undefined ? {} : { cost }),
205
+ },
206
+ };
207
+ }
208
+ /** Two numbers added, where absent still means not told. */
209
+ function sum(one, two) {
210
+ if (one === undefined)
211
+ return two;
212
+ return two === undefined ? one : one + two;
213
+ }
214
+ /**
215
+ * What a round read, in the shape a run records it.
216
+ *
217
+ * One helper rather than a conditional spread per builder, because
218
+ * these two are one fact. Recording the commit without the caveat is
219
+ * the failure this exists to stop: the run then claims the reviewers
220
+ * read the change when they read whatever the caller had checked out.
221
+ * Six sites spread the commit by hand, and it took until the ledger
222
+ * was counted to notice that half of them recorded nothing at all.
223
+ */
224
+ export function whatItRead(read) {
225
+ return {
226
+ ...(read.witness === undefined ? {} : { witness: read.witness }),
227
+ ...(read.unpinned === undefined ? {} : { unpinned: read.unpinned }),
228
+ };
229
+ }
230
+ /**
231
+ * The commit an anchor from this round may claim.
232
+ *
233
+ * An anchor's witness means the commit it was formed against, and the
234
+ * substrate reads it to tell a thread the backend kept from one a
235
+ * force-push stranded. A round that fell back to the caller's
236
+ * checkout was never formed against the commit under review, so
237
+ * stamping it there makes the substrate confidently wrong in exactly
238
+ * the case the field exists to disambiguate.
239
+ *
240
+ * Nothing, then, rather than the commit: not knowing which tree a
241
+ * finding came from is the truth, and an anchor that says so degrades
242
+ * to what anchors did before witnesses existed. The run keeps both
243
+ * facts, because what the change is at and what the reviewers read
244
+ * are two different things and the ledger wants each.
245
+ */
246
+ export function anchorWitness(read) {
247
+ return read.unpinned === undefined ? read.witness : undefined;
248
+ }
249
+ /** The identity a run asked under this id, if it asked one. */
250
+ export function askedOf(run, participantId) {
251
+ return run.participants.find((p) => p.id === participantId);
252
+ }
253
+ /**
254
+ * Why a retry may not be given new settings, if it may not.
255
+ *
256
+ * A retry re-asks one participant and substitutes the answer into a
257
+ * round that already recorded who it asked and what each was set to.
258
+ * Asking on a different model puts one participant's answer into a run
259
+ * whose ledger names another, and the identity ledger cannot catch it,
260
+ * because the substitution keeps the held run's participants: nothing
261
+ * ever claims the new configuration.
262
+ *
263
+ * The clocks are the exception, and they are the reason somebody is
264
+ * retrying at all. How long a reviewer was allowed does not change
265
+ * what its findings mean, the ledger does not record it against the
266
+ * participant, and a reviewer stopped by a wall is refused the retry
267
+ * outright unless that wall moves. Refusing the one setting that makes
268
+ * the retry worth running would leave editing a committed file as the
269
+ * only road.
270
+ *
271
+ * A predicate rather than a branch inside the tool, so the rule can be
272
+ * read and tested without a round on disk to retry.
273
+ */
274
+ export function retryCannotResettle(who, run, participantId) {
275
+ if (who === undefined)
276
+ return undefined;
277
+ const resettles = Object.values(who).flatMap((over) => Object.keys(over).filter((key) => !CLOCKS.has(key)));
278
+ if (resettles.length === 0)
279
+ return undefined;
280
+ return (`A retry re-asks "${participantId}" as round ${run.id} asked it, so ` +
281
+ `it cannot take new settings: its answer is substituted into that ` +
282
+ `round, whose ledger records what it originally asked under. ` +
283
+ `${resettles.map((key) => `"${key}"`).join(", ")} would change that. ` +
284
+ `Run a fresh council with who, or release the id and ask again. The ` +
285
+ `clocks are the exception and may be raised here, since how long a ` +
286
+ `reviewer was allowed does not change what it found.`);
287
+ }
288
+ /** The settings a retry may take, being the ones that change no meaning. */
289
+ const CLOCKS = new Set([
290
+ "backstopMs",
291
+ "idleMs",
292
+ "answerMs",
293
+ ]);
294
+ /**
295
+ * Replace one participant's outcome, returning a new run.
296
+ *
297
+ * This is what a retry does. The outcome keeps its position, since
298
+ * a retry that moved a reviewer to the end would reorder every
299
+ * report of the run for no reason a reader could see, and a
300
+ * participant who had no outcome yet gets one appended.
301
+ *
302
+ * Substituting for somebody outside the roster throws rather than
303
+ * refusing softly: it would make the run claim it asked somebody it
304
+ * never did, and no caller has a sensible way to carry on from
305
+ * that.
306
+ *
307
+ * What this attempt read is required rather than optional, since
308
+ * omitting it means "the same tree the round had", which is the most
309
+ * optimistic reading available and the wrong default for the case
310
+ * that matters: a retry that fell back leaves the round less faithful
311
+ * than it was. Pass an empty record to say there is nothing to add.
312
+ */
313
+ export function substituteOutcome(run, outcome, read) {
314
+ if (askedOf(run, outcome.participantId) === undefined) {
315
+ throw new Error(`This run never asked "${outcome.participantId}", so there is no outcome of theirs to replace. It asked ${run.participants.map((p) => p.id).join(", ")}.`);
316
+ }
317
+ const at = run.outcomes.findIndex((o) => o.participantId === outcome.participantId);
318
+ const outcomes = at === -1
319
+ ? [...run.outcomes, outcome]
320
+ : run.outcomes.map((held, index) => index === at ? billedWith(outcome, held) : held);
321
+ // Filling the last gap in an interrupted round settles it.
322
+ //
323
+ // Without this the flag is one-way and the recovery it points at
324
+ // dead-ends: a session dies holding a council, every participant is
325
+ // asked again, and the completed round still reports itself as
326
+ // never settled forever. An alarm nobody can answer stops being
327
+ // read, which costs the one case it was raised for.
328
+ const waiting = run.participants.some((asked) => !outcomes.some((held) => held.participantId === asked.id));
329
+ // A retry that fell back to the caller's checkout makes the round
330
+ // less faithful than it was, and the run is the only place that can
331
+ // say so. Told rather than inferred, since only the caller knows
332
+ // which tree this attempt got, and one-way: a retry that happened
333
+ // to be pinned does not clear a caveat earned by the reviewers
334
+ // already in the round.
335
+ const fell = read?.unpinned === undefined ? {} : { unpinned: read.unpinned };
336
+ const { open: _wasOpen, ...rest } = run;
337
+ return waiting
338
+ ? { ...run, outcomes, ...fell }
339
+ : { ...rest, outcomes, ...fell };
340
+ }
@@ -0,0 +1,70 @@
1
+ /**
2
+ * A finding that belongs to a stack rather than to one change.
3
+ *
4
+ * Reviewing a stack one change at a time hides the findings that only
5
+ * exist between changes: an interface introduced at the base and used
6
+ * wrongly at the tip, a migration split so the middle change cannot
7
+ * deploy on its own. Asking about the whole stack at once surfaces
8
+ * those, but only if a finding can say it is about several changes.
9
+ *
10
+ * So a span, and not a duplicate on each change. Repeating one
11
+ * observation on every change it touches makes a reader answer it
12
+ * three times and leaves three places to resolve it, and the thing
13
+ * that made it worth saying, that it is *between* them, is exactly
14
+ * what gets lost.
15
+ *
16
+ * A span names refs rather than positions. A stack renumbers itself
17
+ * every time somebody restacks it, so a finding recorded as "the
18
+ * second change" is wrong as soon as anything lands underneath.
19
+ */
20
+ import type { Finding, FindingOrigin } from "../finding.js";
21
+ /** The changes a finding is about, in stack order. */
22
+ export interface FindingSpan {
23
+ /** One ref for an ordinary finding, several for a cross-change one. */
24
+ refs: string[];
25
+ }
26
+ /** A finding plus the changes it is about. */
27
+ export interface SpannedFinding {
28
+ span: FindingSpan;
29
+ finding: Omit<Finding, "id">;
30
+ }
31
+ /** What came out of one stack-wide answer. */
32
+ export interface StackHarvest {
33
+ /**
34
+ * Of the warnings, the ones about recorded entries rather than
35
+ * about the answer's shape. Named for the same reason the single
36
+ * change's harvest names them: the caller that needs them is the
37
+ * one replacing the whole list.
38
+ */
39
+ recordedWarnings?: string[];
40
+ findings: SpannedFinding[];
41
+ warnings: string[];
42
+ }
43
+ /**
44
+ * Read a stack-wide answer, warning about what it dropped.
45
+ *
46
+ * `witnessFor` is asked for the witness of the change a finding is
47
+ * said at, because each change has its own diff: checking a line
48
+ * finding on the tip against the base's diff would degrade a perfectly
49
+ * good anchor for no reason.
50
+ */
51
+ export declare function harvestStackFindings(text: string, origin: FindingOrigin, stackRefs: readonly string[], witnessFor?: (ref: string) => string | undefined): StackHarvest;
52
+ /**
53
+ * The stack answer, plus what the reviewer wrote down reaching it.
54
+ *
55
+ * The same bargain as a single change's round, with one extra
56
+ * requirement: a recorded finding still has to say which changes it is
57
+ * about, because a stack round's whole job is placing one. An entry
58
+ * that names none is dropped with a warning, exactly as it would be
59
+ * inside an answer.
60
+ */
61
+ export declare function alsoRecordedInStack(said: StackHarvest, recorded: readonly unknown[] | undefined, origin: FindingOrigin, stackRefs: readonly string[], witnessFor?: (ref: string) => string | undefined): StackHarvest;
62
+ /**
63
+ * Where a span gets said.
64
+ *
65
+ * The earliest change it touches, because that is where the decision
66
+ * was made and where a reader walking the stack meets it first. Saying
67
+ * it at the tip sends somebody to the consequence and leaves them to
68
+ * work back to the cause.
69
+ */
70
+ export declare function saidAt(span: FindingSpan, stackRefs: readonly string[]): string;
@@ -0,0 +1,166 @@
1
+ /**
2
+ * A finding that belongs to a stack rather than to one change.
3
+ *
4
+ * Reviewing a stack one change at a time hides the findings that only
5
+ * exist between changes: an interface introduced at the base and used
6
+ * wrongly at the tip, a migration split so the middle change cannot
7
+ * deploy on its own. Asking about the whole stack at once surfaces
8
+ * those, but only if a finding can say it is about several changes.
9
+ *
10
+ * So a span, and not a duplicate on each change. Repeating one
11
+ * observation on every change it touches makes a reader answer it
12
+ * three times and leaves three places to resolve it, and the thing
13
+ * that made it worth saying, that it is *between* them, is exactly
14
+ * what gets lost.
15
+ *
16
+ * A span names refs rather than positions. A stack renumbers itself
17
+ * every time somebody restacks it, so a finding recorded as "the
18
+ * second change" is wrong as soon as anything lands underneath.
19
+ */
20
+ import { readWireFinding, SAID_NOTHING, saysTheSame } from "./harvest.js";
21
+ import { ANSWER_WAS_CUT_OFF, isRecord, readAnswer, wireText } from "./wire.js";
22
+ /**
23
+ * Read a stack-wide answer, warning about what it dropped.
24
+ *
25
+ * `witnessFor` is asked for the witness of the change a finding is
26
+ * said at, because each change has its own diff: checking a line
27
+ * finding on the tip against the base's diff would degrade a perfectly
28
+ * good anchor for no reason.
29
+ */
30
+ export function harvestStackFindings(text, origin, stackRefs, witnessFor) {
31
+ const { parsed, truncated } = readAnswer(text, "findings");
32
+ const held = parsed?.findings;
33
+ if (!Array.isArray(held)) {
34
+ return {
35
+ findings: [],
36
+ // A reviewer that produced nothing has not broken a contract
37
+ // about the shape of an answer it never reached. Same rule as
38
+ // a single change's round, and for the same reason: it is the
39
+ // case a journal exists to rescue.
40
+ warnings: [
41
+ text.trim() === ""
42
+ ? SAID_NOTHING
43
+ : "Nothing in this answer parsed as a findings array, so no findings could be read from it. An answer with nothing to say should still say findings: [].",
44
+ ],
45
+ };
46
+ }
47
+ const findings = [];
48
+ const warnings = [];
49
+ if (truncated)
50
+ warnings.push(ANSWER_WAS_CUT_OFF);
51
+ for (const [index, entry] of held.entries()) {
52
+ const at = `findings[${index}]`;
53
+ const span = readSpan(entry, at, stackRefs, warnings);
54
+ if (span === undefined)
55
+ continue;
56
+ const read = readWireFinding(entry, at, origin, witnessFor?.(saidAt(span, stackRefs)));
57
+ warnings.push(...read.warnings);
58
+ if (read.finding !== undefined) {
59
+ findings.push({ span, finding: read.finding });
60
+ }
61
+ }
62
+ return { findings, warnings };
63
+ }
64
+ /**
65
+ * The stack answer, plus what the reviewer wrote down reaching it.
66
+ *
67
+ * The same bargain as a single change's round, with one extra
68
+ * requirement: a recorded finding still has to say which changes it is
69
+ * about, because a stack round's whole job is placing one. An entry
70
+ * that names none is dropped with a warning, exactly as it would be
71
+ * inside an answer.
72
+ */
73
+ export function alsoRecordedInStack(said, recorded, origin, stackRefs, witnessFor) {
74
+ if (recorded === undefined || recorded.length === 0)
75
+ return said;
76
+ const findings = [...said.findings];
77
+ const recordedWarnings = [];
78
+ const before = findings.length;
79
+ // Keyed with the span, not just the finding. Two changes in a
80
+ // stack can carry the same line at the same path, which is what a
81
+ // stack is, so the same sentence about two of them is two findings
82
+ // and collapsing them would report the wrong change.
83
+ for (const [index, entry] of recorded.entries()) {
84
+ const at = `recorded[${index}]`;
85
+ const span = readSpan(entry, at, stackRefs, recordedWarnings);
86
+ if (span === undefined)
87
+ continue;
88
+ const read = readWireFinding(entry, at, origin, witnessFor?.(saidAt(span, stackRefs)));
89
+ recordedWarnings.push(...read.warnings);
90
+ const found = read.finding;
91
+ if (found === undefined)
92
+ continue;
93
+ if (findings.some((held) => sameSpannedFinding(held, { span, finding: found })))
94
+ continue;
95
+ findings.push({ span, finding: found });
96
+ }
97
+ const aboutTheAnswer = findings.length > before
98
+ ? said.warnings.filter((warning) => warning !== SAID_NOTHING)
99
+ : said.warnings;
100
+ return {
101
+ findings,
102
+ warnings: [...aboutTheAnswer, ...recordedWarnings],
103
+ recordedWarnings,
104
+ };
105
+ }
106
+ /**
107
+ * The same finding said about the same changes.
108
+ *
109
+ * The span has to match exactly while the finding is compared the
110
+ * forgiving way, because two changes in a stack can carry the same
111
+ * line at the same path, which is what a stack is: the same sentence
112
+ * about two of them is two findings, and collapsing them would report
113
+ * the wrong change.
114
+ */
115
+ function sameSpannedFinding(one, two) {
116
+ return (JSON.stringify(one.span) === JSON.stringify(two.span) &&
117
+ saysTheSame(one.finding, two.finding));
118
+ }
119
+ /**
120
+ * Where a span gets said.
121
+ *
122
+ * The earliest change it touches, because that is where the decision
123
+ * was made and where a reader walking the stack meets it first. Saying
124
+ * it at the tip sends somebody to the consequence and leaves them to
125
+ * work back to the cause.
126
+ */
127
+ export function saidAt(span, stackRefs) {
128
+ const ordered = inStackOrder(span.refs, stackRefs);
129
+ return ordered[0] ?? span.refs[0] ?? "";
130
+ }
131
+ /** The changes an entry claims to be about, or nothing plus a warning. */
132
+ function readSpan(entry, at, stackRefs, warnings) {
133
+ if (!isRecord(entry)) {
134
+ warnings.push(`${at} is not an object, so it was dropped.`);
135
+ return undefined;
136
+ }
137
+ const claimed = Array.isArray(entry.refs) ? entry.refs : [];
138
+ const named = claimed.flatMap((value) => {
139
+ const ref = wireText(value);
140
+ return ref === undefined ? [] : [ref];
141
+ });
142
+ const known = named.filter((ref) => stackRefs.includes(ref));
143
+ const unknown = named.filter((ref) => !stackRefs.includes(ref));
144
+ if (unknown.length > 0) {
145
+ // Dropping the ref rather than the finding when others survive:
146
+ // a reviewer that named three changes and got one wrong still
147
+ // saw something real about the other two.
148
+ warnings.push(`${at} names ${unknown.join(", ")}, which ${unknown.length === 1 ? "is not a change" : "are not changes"} in this stack, so ${unknown.length === 1 ? "it was" : "they were"} left out.`);
149
+ }
150
+ if (known.length === 0) {
151
+ warnings.push(`${at} names no change in this stack, so it was dropped: a finding nobody can place is a finding nobody can read.`);
152
+ return undefined;
153
+ }
154
+ return { refs: inStackOrder(known, stackRefs) };
155
+ }
156
+ /**
157
+ * Refs in the order the stack reports them, roots before children.
158
+ *
159
+ * A span reported tip-first would read backwards against the stack it
160
+ * describes, and the order a model happened to list them in carries no
161
+ * meaning worth preserving.
162
+ */
163
+ function inStackOrder(refs, stackRefs) {
164
+ const unique = [...new Set(refs)];
165
+ return unique.sort((a, b) => stackRefs.indexOf(a) - stackRefs.indexOf(b));
166
+ }
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Asking a roster about a whole stack at once.
3
+ *
4
+ * The fan-out is the council's, reused rather than rewritten: the
5
+ * rules worth getting right, that participants are asked concurrently,
6
+ * that a thrown error and a reported one are the same event, and that
7
+ * findings are numbered in roster order, are the same rules here and
8
+ * would have to change together. What differs is what a reply means. A
9
+ * council reply is findings about one change; a stack reply is
10
+ * findings about a stack, each naming the changes it is about.
11
+ *
12
+ * Which is why `record` takes a ref. A stack round produces findings
13
+ * for several changes at once, and the store needs to know which
14
+ * change each belongs to. A spanning finding is filed once, at its
15
+ * earliest change, because filing it on every change it touches makes
16
+ * a reader answer one observation three times.
17
+ */
18
+ import type { Finding } from "../finding.js";
19
+ import { type Ask, type CouncilResult } from "./council.js";
20
+ import { type AskProgress } from "./progress.js";
21
+ import type { Roster } from "./roster.js";
22
+ import { type RoundGiven } from "./run.js";
23
+ /** The impure things a stack round needs. */
24
+ export interface StackCouncilDeps {
25
+ /**
26
+ * Run one participant against the prompt.
27
+ *
28
+ * Reporting matters most here: a stack round is the longest there
29
+ * is, because it reads every change.
30
+ */
31
+ ask: Ask;
32
+ /** File findings against one change in the stack. */
33
+ record(ref: string, findings: Omit<Finding, "id">[]): Promise<Finding[]>;
34
+ now(): Date;
35
+ /** Told what is happening while it happens. Optional. */
36
+ progress?: AskProgress;
37
+ }
38
+ /** What to ask, of whom, about which changes. */
39
+ export interface StackCouncilRequest {
40
+ roster: Roster;
41
+ prompt: string;
42
+ /** Distinguishes two rounds started in the same millisecond. */
43
+ seq: number;
44
+ /** Every change in the stack, roots before children. */
45
+ stackRefs: string[];
46
+ /**
47
+ * The commit one change's anchors are formed against.
48
+ *
49
+ * Per change, because each has its own diff: checking a finding on
50
+ * the tip against the base's diff would degrade a good anchor for
51
+ * nothing.
52
+ */
53
+ witnessFor?: (ref: string) => string | undefined;
54
+ /** Said when the tree the reviewers read was not the stack's tip. */
55
+ unpinned?: string;
56
+ /**
57
+ * What the reviewers were handed, besides the changes.
58
+ *
59
+ * Not exempted the way the witness is. A stack is read in one tree
60
+ * under one set of conditions, so what its reviewers were given is
61
+ * a single fact however many changes they read.
62
+ */
63
+ given?: RoundGiven;
64
+ }
65
+ /** Ask a roster about a stack and file what it says. */
66
+ export declare function runStackCouncil(request: StackCouncilRequest, deps: StackCouncilDeps): Promise<CouncilResult>;