@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,524 @@
1
+ /**
2
+ * Keeping a stack, and replaying it when what it sits on moves.
3
+ *
4
+ * The thinking lives in `stack.ts` and never touches a repository. This is the
5
+ * adapter: it stores parentage, asks git to replay, and stops the moment a
6
+ * replay halts.
7
+ *
8
+ * Parentage is stored in git's own config, under the branch it describes. That
9
+ * puts it in the repository rather than in this package's state, which is the
10
+ * property that matters: the record survives a session, is visible to anybody
11
+ * who runs `git config`, and is deleted by git itself when the branch is. A
12
+ * stack recorded in a tool's private state is a stack that quietly outlives the
13
+ * branches it names.
14
+ *
15
+ * A stacked backend that tracks parentage itself is the reason this is a facet
16
+ * rather than the implementation. On a repository driven by such a tool, its
17
+ * record is the truth and this one would be a second opinion; a provider there
18
+ * should offer its own `WorkStacks` instead of teaching this one a second
19
+ * vocabulary.
20
+ *
21
+ * Restacking stops at the first halt and says what it did not reach. Carrying
22
+ * on would replay later branches onto a parent that is mid-rebase, which
23
+ * produces a stack that looks restacked and is built on a commit that is about
24
+ * to be rewritten.
25
+ */
26
+ import { orderStack, planReorder, planRestack, reparentFault, } from "./stack.js";
27
+ import { unattended } from "./unattended.js";
28
+ /**
29
+ * Where parentage is recorded, under the branch it belongs to.
30
+ *
31
+ * Lowercase because that is what git stores. Config variable names are
32
+ * case-insensitive and git normalizes them, so a key written as `workParent`
33
+ * reads back as `workparent`: writing one spelling and comparing the other
34
+ * found nothing, and every branch read as untracked. A fake exec cannot catch
35
+ * that, since it answers with whatever spelling the test wrote.
36
+ */
37
+ const PARENT_KEY = "workparent";
38
+ /** Where the last-aligned base is recorded. */
39
+ const BASE_KEY = "workbase";
40
+ /** Read one git value, scoped to the tree. */
41
+ async function ask(exec, treePath, args) {
42
+ const result = await exec("git", ["-C", treePath, ...args]);
43
+ if (result.code !== 0)
44
+ return undefined;
45
+ const said = result.stdout.trim();
46
+ return said === "" ? undefined : said;
47
+ }
48
+ /** Every branch that exists in the repository. */
49
+ async function branchesIn(exec, treePath) {
50
+ const said = await ask(exec, treePath, [
51
+ "for-each-ref",
52
+ "--format=%(refname:short)",
53
+ "refs/heads",
54
+ ]);
55
+ return said === undefined ? [] : said.split("\n").filter((one) => one !== "");
56
+ }
57
+ /** Read the stack from git config. */
58
+ async function readStack(exec, treePath) {
59
+ const said = await ask(exec, treePath, [
60
+ "config",
61
+ "--get-regexp",
62
+ `^branch\\..*\\.(${PARENT_KEY}|${BASE_KEY})$`,
63
+ ]);
64
+ if (said === undefined)
65
+ return [];
66
+ const byName = new Map();
67
+ for (const line of said.split("\n")) {
68
+ // A root records an empty parent, and git prints that as the key, a
69
+ // space, and nothing. Trimming the output eats that trailing space, so a
70
+ // line with no separator is a key whose value is empty rather than a line
71
+ // to skip. Skipping it made every root branch invisible, which read as
72
+ // "nothing is tracked" and refused every restack.
73
+ const gap = line.indexOf(" ");
74
+ const key = gap === -1 ? line : line.slice(0, gap);
75
+ const value = gap === -1 ? "" : line.slice(gap + 1).trim();
76
+ // `branch.<name>.workParent`, and a branch name may carry dots, so the
77
+ // name is everything between the first and last separator.
78
+ const first = key.indexOf(".");
79
+ const last = key.lastIndexOf(".");
80
+ if (first === -1 || last <= first)
81
+ continue;
82
+ const name = key.slice(first + 1, last);
83
+ // Lowercased for the same reason the keys are: git decides the case of
84
+ // what it hands back, not the caller that wrote it.
85
+ const which = key.slice(last + 1).toLowerCase();
86
+ const held = byName.get(name) ?? {};
87
+ if (which === PARENT_KEY)
88
+ held.parent = value;
89
+ if (which === BASE_KEY)
90
+ held.base = value;
91
+ byName.set(name, held);
92
+ }
93
+ return [...byName.entries()].map(([name, held]) => ({
94
+ name,
95
+ ...(held.parent === undefined || held.parent === ""
96
+ ? {}
97
+ : { parent: held.parent }),
98
+ ...(held.base === undefined ? {} : { base: held.base }),
99
+ }));
100
+ }
101
+ /** Keep and replay a stack with plain git. */
102
+ export function createGitStacks(deps) {
103
+ const { exec, rebaser } = deps;
104
+ async function set(treePath, branch, key, value) {
105
+ const at = `branch.${branch}.${key}`;
106
+ if (value === undefined) {
107
+ // A missing key is not an error here: unsetting what was never set
108
+ // is the state the caller asked for.
109
+ await exec("git", ["-C", treePath, "config", "--unset", at]);
110
+ return;
111
+ }
112
+ await exec("git", ["-C", treePath, "config", at, value]);
113
+ }
114
+ /** Where a ref currently points, if it exists. */
115
+ async function tipOf(treePath, ref) {
116
+ return await ask(exec, treePath, ["rev-parse", "--verify", "--quiet", ref]);
117
+ }
118
+ /**
119
+ * Whether one commit is reachable from another.
120
+ *
121
+ * False rather than undefined when git cannot read a ref, because every caller
122
+ * here is asking in order to skip work, and an unreadable ref is not a reason to
123
+ * believe there is none to do.
124
+ */
125
+ async function isAncestor(treePath, maybe, of) {
126
+ const said = await exec("git", [
127
+ "-C",
128
+ treePath,
129
+ "merge-base",
130
+ "--is-ancestor",
131
+ maybe,
132
+ of,
133
+ ]);
134
+ return said.code === 0;
135
+ }
136
+ /**
137
+ * Whether a branch still sits on what it is supposed to sit on.
138
+ *
139
+ * One rule, in one place, because two callers ask this: a restack, deciding
140
+ * whether there is anything to replay, and a listing, deciding whether to warn.
141
+ * They were the same rule written once and read once, which is a rule waiting to
142
+ * be changed in one place only.
143
+ *
144
+ * The record says where the boundary is, and the boundary being the parent's tip
145
+ * is what aligned means. That cannot be replaced by asking the commits whether
146
+ * the parent's tip is an ancestor: a reordered branch still contains its old
147
+ * parent's tip while carrying commits that are no longer its own, so an ancestor
148
+ * test calls it settled and skips the replay that would put it right. Tried, and
149
+ * caught by the reorder test, which is the one place that distinction shows.
150
+ *
151
+ * But a record can be stale, and one stale case is not drift at all. It is only
152
+ * written by a restack that ran to completion, so a replay finished any other
153
+ * way leaves it describing a branch as it was, and that is the documented way out
154
+ * of a halt. The damage was not a wrong label: the next restack measured from a
155
+ * boundary sitting below six of trunk's own commits and handed the branch copies
156
+ * of them, conflicting on every one.
157
+ *
158
+ * The two are distinguishable, which is the whole reason this can be fixed here
159
+ * as well as at the source. A boundary that is itself an ancestor of the parent's
160
+ * tip, on a branch that already contains that tip, is describing a world that no
161
+ * longer exists: the branch has since been rebuilt on top of the parent, so there
162
+ * is nothing to replay and replaying anyway is what duplicates the parent's
163
+ * history. A reordered branch fails that test, because its boundary is its old
164
+ * parent's tip, which is a descendant of the new parent rather than an ancestor.
165
+ *
166
+ * An earlier version of this comment claimed a merge base would call a branch
167
+ * aligned with a parent it had never seen. That is not so, and it is worth saying
168
+ * plainly: where a parent has been rewritten the merge base is the old shared
169
+ * commit and the parent's tip is the new one, so they differ, which is the drifted
170
+ * answer and the right one.
171
+ */
172
+ async function standingOf(treePath, branch, onto) {
173
+ const from = branch.base ??
174
+ (await ask(exec, treePath, ["merge-base", onto, branch.name]));
175
+ const tip = await tipOf(treePath, onto);
176
+ if (from === undefined || tip === undefined) {
177
+ return { standing: "unknown", ...(from === undefined ? {} : { from }) };
178
+ }
179
+ if (from === tip)
180
+ return { standing: "aligned", from };
181
+ // The record disagrees with the parent's tip, which is drift unless the record
182
+ // is the thing that is wrong. Two questions settle it, and both are cheap
183
+ // enough to ask only here, on the branch that looked out of step.
184
+ const holds = await isAncestor(treePath, onto, branch.name);
185
+ const beneath = await isAncestor(treePath, from, onto);
186
+ if (holds && beneath)
187
+ return { standing: "aligned", from };
188
+ return { standing: "drifted", from };
189
+ }
190
+ /**
191
+ * Record where a branch now sits on its parent.
192
+ *
193
+ * Called after a replay, when the branch genuinely sits on that commit.
194
+ * Not called when parentage changes, and that distinction is the whole
195
+ * correctness argument: the base is the boundary between a branch's own
196
+ * commits and its parent's, so writing the new parent's tip before
197
+ * anything has been replayed declares a boundary above the branch's own
198
+ * work and the next restack replays nothing at all.
199
+ */
200
+ async function recordBase(treePath, branch, sitsOn) {
201
+ const tip = await tipOf(treePath, sitsOn);
202
+ if (tip !== undefined)
203
+ await set(treePath, branch, BASE_KEY, tip);
204
+ }
205
+ /**
206
+ * Record the boundary for a branch being tracked for the first time.
207
+ *
208
+ * Where the two have diverged, not where the parent is now. A parent that
209
+ * has moved since the branch was cut would otherwise put the boundary
210
+ * above commits the branch owns, and they would be dropped by the first
211
+ * replay rather than carried onto the new base.
212
+ */
213
+ async function recordDivergence(treePath, branch, parent) {
214
+ if (parent === undefined)
215
+ return;
216
+ const shared = await ask(exec, treePath, ["merge-base", parent, branch]);
217
+ if (shared !== undefined)
218
+ await set(treePath, branch, BASE_KEY, shared);
219
+ }
220
+ return {
221
+ read: (treePath) => readStack(exec, treePath),
222
+ async track(treePath, branch, parent) {
223
+ const exists = await branchesIn(exec, treePath);
224
+ if (!exists.includes(branch)) {
225
+ return {
226
+ kind: "refused",
227
+ reason: `There is no branch called ${branch} in this tree, so there is nothing to track.`,
228
+ };
229
+ }
230
+ if (parent !== undefined && !exists.includes(parent)) {
231
+ return {
232
+ kind: "refused",
233
+ reason: `There is no branch called ${parent} in this tree, so ${branch} cannot sit on it.`,
234
+ };
235
+ }
236
+ const held = await readStack(exec, treePath);
237
+ // Caught here rather than left to orderStack, whose advice for a parent it
238
+ // does not know is "track it, or point this at something that is here".
239
+ // That is sound for a reorder and actively wrong for the commonest track
240
+ // there is: the first branch of a stack, named onto trunk. Following it
241
+ // would make trunk a stack member, and a restack would then replay trunk
242
+ // onto itself. The option that is actually wanted is the one orderStack
243
+ // cannot see, because a pure function over a candidate stack is not told
244
+ // which ref the trunk is.
245
+ if (parent !== undefined &&
246
+ !held.some((one) => one.name === parent) &&
247
+ parent !== branch) {
248
+ return {
249
+ kind: "refused",
250
+ reason: `${branch} cannot sit on ${parent} yet, because ${parent} is not tracked as part of this stack.\n\nIf ${parent} is your trunk, leave onto off entirely: a branch that sits directly on trunk is a root of the stack, and tracking the trunk would have a restack replay it onto itself.\n\nIf ${parent} belongs in the stack, track it first, then track ${branch} onto it.`,
251
+ };
252
+ }
253
+ const already = held.some((one) => one.name === branch);
254
+ const candidate = already
255
+ ? held.map((one) => (one.name === branch ? { ...one, parent } : one))
256
+ : [...held, { name: branch, parent }];
257
+ const fault = orderStack(candidate);
258
+ if (fault.kind === "faulted")
259
+ return fault;
260
+ await set(treePath, branch, PARENT_KEY, parent ?? "");
261
+ await recordDivergence(treePath, branch, parent);
262
+ return { kind: "shaped", changed: [branch] };
263
+ },
264
+ async untrack(treePath, branch) {
265
+ const held = await readStack(exec, treePath);
266
+ const one = held.find((candidate) => candidate.name === branch);
267
+ if (one === undefined) {
268
+ return {
269
+ kind: "refused",
270
+ reason: `${branch} is not tracked, so there is nothing to forget.`,
271
+ };
272
+ }
273
+ // Whatever sat on it moves down onto its parent. Leaving them
274
+ // pointing at a branch nobody tracks is how a stack becomes
275
+ // unorderable by removing one member of it.
276
+ const changed = [branch];
277
+ for (const above of held.filter((candidate) => candidate.parent === branch)) {
278
+ await set(treePath, above.name, PARENT_KEY, one.parent ?? "");
279
+ // The boundary is left alone. Nothing has been replayed, and the
280
+ // commits this branch owns are still the ones above its old base.
281
+ changed.push(above.name);
282
+ }
283
+ await set(treePath, branch, PARENT_KEY, undefined);
284
+ await set(treePath, branch, BASE_KEY, undefined);
285
+ return { kind: "shaped", changed };
286
+ },
287
+ async reparent(treePath, branch, parent) {
288
+ const held = await readStack(exec, treePath);
289
+ const fault = reparentFault(held, branch, parent);
290
+ if (fault !== undefined)
291
+ return { kind: "faulted", fault };
292
+ const one = held.find((candidate) => candidate.name === branch);
293
+ if (one?.parent === parent)
294
+ return { kind: "unchanged" };
295
+ await set(treePath, branch, PARENT_KEY, parent ?? "");
296
+ // Deliberately not touching the boundary: the record has changed and
297
+ // the commits have not, and a restack is what reconciles them.
298
+ return { kind: "shaped", changed: [branch] };
299
+ },
300
+ async reorder(treePath, desired) {
301
+ const held = await readStack(exec, treePath);
302
+ const plan = planReorder(held, desired);
303
+ if (plan.kind === "faulted")
304
+ return plan;
305
+ if (plan.steps.length === 0)
306
+ return { kind: "unchanged" };
307
+ for (const step of plan.steps) {
308
+ await set(treePath, step.branch, PARENT_KEY, step.parent ?? "");
309
+ // Same as a single reparent: the shape moves now, the commits move
310
+ // when something replays them.
311
+ }
312
+ return {
313
+ kind: "shaped",
314
+ changed: plan.steps.map((step) => step.branch),
315
+ };
316
+ },
317
+ async settled(treePath, branch) {
318
+ const which = branch ??
319
+ (await ask(exec, treePath, ["rev-parse", "--abbrev-ref", "HEAD"]));
320
+ // Mid-replay HEAD is detached and answers "HEAD", which names no branch to
321
+ // record against. Nothing to do rather than something wrong.
322
+ if (which === undefined || which === "HEAD")
323
+ return;
324
+ const held = await readStack(exec, treePath);
325
+ const one = held.find((candidate) => candidate.name === which);
326
+ if (one?.parent === undefined)
327
+ return;
328
+ // Where the two now diverge, read from the commits. After a replay that
329
+ // landed, this is the parent's tip; asking the commits rather than assuming
330
+ // it keeps the answer right when the parent moved while the conflict was
331
+ // being settled.
332
+ await recordDivergence(treePath, which, one.parent);
333
+ },
334
+ async drifted(treePath, trunk) {
335
+ const held = await readStack(exec, treePath);
336
+ const drifted = [];
337
+ const undecided = [];
338
+ for (const branch of held) {
339
+ const onto = branch.parent ?? trunk;
340
+ if (onto === undefined) {
341
+ // A root with no trunk named. Nothing to compare against.
342
+ undecided.push(branch.name);
343
+ continue;
344
+ }
345
+ const { standing } = await standingOf(treePath, branch, onto);
346
+ if (standing === "unknown")
347
+ undecided.push(branch.name);
348
+ else if (standing === "drifted")
349
+ drifted.push(branch.name);
350
+ }
351
+ return { drifted, undecided };
352
+ },
353
+ async restack(treePath, trunk) {
354
+ if (await rebaser.halted(treePath)) {
355
+ return {
356
+ kind: "refused",
357
+ reason: "A replay is already part-way through in this tree. Settle it first, then restack.",
358
+ };
359
+ }
360
+ const held = await readStack(exec, treePath);
361
+ if (held.length === 0) {
362
+ return {
363
+ kind: "refused",
364
+ reason: "Nothing in this tree is tracked as part of a stack, so there is nothing to replay. Track a branch against what it sits on first.",
365
+ };
366
+ }
367
+ const plan = planRestack(held, trunk);
368
+ if (plan.kind === "faulted")
369
+ return plan;
370
+ // Where to come back to. A restack that leaves you on whichever
371
+ // branch it replayed last has moved you without asking.
372
+ const started = await ask(exec, treePath, [
373
+ "rev-parse",
374
+ "--abbrev-ref",
375
+ "HEAD",
376
+ ]);
377
+ const results = [];
378
+ for (const [at, step] of plan.steps.entries()) {
379
+ // The same question the listing asks, asked the same way. Two rules for
380
+ // "is this branch where it should be" is how a diagram comes to say
381
+ // needs replaying about a branch a restack then calls already in place.
382
+ const { standing, from } = await standingOf(treePath, {
383
+ name: step.branch,
384
+ ...(step.from === undefined ? {} : { base: step.from }),
385
+ }, step.onto);
386
+ if (standing === "aligned") {
387
+ // Write the boundary down even though nothing was replayed. Aligned
388
+ // means the branch sits on this tip, so this is either the value
389
+ // already there or the repair of a record that had gone stale, and a
390
+ // skip is the one moment that knows which without having to ask. Left
391
+ // undone, a branch reached only by skips stays stale for good, and the
392
+ // reasoning that tolerates a stale record has to hold forever instead
393
+ // of just until the next restack.
394
+ await recordBase(treePath, step.branch, step.onto);
395
+ results.push({
396
+ branch: step.branch,
397
+ onto: step.onto,
398
+ outcome: "already-there",
399
+ });
400
+ continue;
401
+ }
402
+ const checkout = await exec("git", [
403
+ "-C",
404
+ treePath,
405
+ "checkout",
406
+ step.branch,
407
+ ]);
408
+ if (checkout.code !== 0) {
409
+ return {
410
+ kind: "refused",
411
+ reason: `Could not check out ${step.branch}: ${checkout.stderr.trim() || `git checkout exited ${checkout.code}`}`,
412
+ };
413
+ }
414
+ const args = ["-C", treePath, "rebase"];
415
+ // The boundary is what separates this branch's commits from its
416
+ // parent's. Without it the branch is handed copies of
417
+ // everything the parent already carries.
418
+ if (from !== undefined)
419
+ args.push("--onto", step.onto, from);
420
+ else
421
+ args.push(step.onto);
422
+ // Unattended for the same reason `resume` is: a replay that conflicts
423
+ // and then continues will otherwise reach for an editor, and a
424
+ // restack walks several branches, so one wedged step strands the rest
425
+ // of the stack behind it.
426
+ const replay = await exec("git", unattended(args));
427
+ if (replay.code !== 0) {
428
+ const conflicted = await conflictsIn(exec, treePath);
429
+ results.push({
430
+ branch: step.branch,
431
+ onto: step.onto,
432
+ outcome: "halted",
433
+ conflicted,
434
+ });
435
+ // Everything above this is unreachable until the halt is
436
+ // settled, and saying so is the difference between a
437
+ // partial restack and a mystery.
438
+ for (const later of plan.steps.slice(at + 1)) {
439
+ results.push({
440
+ branch: later.branch,
441
+ onto: later.onto,
442
+ outcome: "skipped",
443
+ });
444
+ }
445
+ return {
446
+ kind: "halted",
447
+ results,
448
+ at: step.branch,
449
+ conflicted,
450
+ };
451
+ }
452
+ await recordBase(treePath, step.branch, step.onto);
453
+ // Now true: the replay just put the branch on that commit.
454
+ results.push({
455
+ branch: step.branch,
456
+ onto: step.onto,
457
+ outcome: "replayed",
458
+ });
459
+ }
460
+ if (started !== undefined && started !== "HEAD") {
461
+ await exec("git", ["-C", treePath, "checkout", started]);
462
+ }
463
+ return {
464
+ kind: "restacked",
465
+ results,
466
+ ...(started === undefined || started === "HEAD" ? {} : { on: started }),
467
+ };
468
+ },
469
+ async sync(treePath, trunk) {
470
+ // What the stack is replayed onto, and deliberately not the local branch.
471
+ //
472
+ // This used to fetch `main:main` so the local ref moved, on the reasoning
473
+ // that a bare fetch leaves `main` where it was and replaying onto a stale
474
+ // trunk is the failure this verb exists to prevent. The goal was right and
475
+ // the conclusion was wrong: git refuses to fetch into a branch that is
476
+ // checked out in any worktree of the repo, and trunk checked out in the
477
+ // primary tree while the work happens in a linked one is not an unusual
478
+ // arrangement, it is the normal one. So the daily verb failed outright on
479
+ // the commonest layout, and said only what git said.
480
+ //
481
+ // A remote-tracking ref cannot be checked out anywhere, so it cannot be
482
+ // blocked, and a bare fetch always moves it. Replaying onto that is what
483
+ // the original comment wanted: a trunk that is genuinely current. The
484
+ // local branch is not needed for any of this, which also means a tree with
485
+ // no local trunk at all now syncs.
486
+ const fetchedTrunk = `origin/${trunk}`;
487
+ const before = await tipOf(treePath, fetchedTrunk);
488
+ const fetched = await exec("git", [
489
+ "-C",
490
+ treePath,
491
+ "fetch",
492
+ "origin",
493
+ trunk,
494
+ ]);
495
+ if (fetched.code !== 0) {
496
+ const said = [fetched.stderr.trim(), fetched.stdout.trim()]
497
+ .filter((stream) => stream !== "")
498
+ .join("\n");
499
+ // A failed fetch stops the sync. Carrying on would replay the stack
500
+ // onto a trunk as stale as the one it started on and call that
501
+ // success, which is worse than doing nothing and saying so.
502
+ return {
503
+ kind: "refused",
504
+ reason: `Could not fetch ${trunk} from origin, so there is nothing newer to replay onto and nothing was moved.\n\n${said || `git fetch exited ${fetched.code}`}`,
505
+ };
506
+ }
507
+ const after = await tipOf(treePath, fetchedTrunk);
508
+ return {
509
+ kind: "synced",
510
+ moved: before !== after,
511
+ replay: await this.restack(treePath, fetchedTrunk),
512
+ };
513
+ },
514
+ };
515
+ }
516
+ /** Paths git reports as unmerged. */
517
+ async function conflictsIn(exec, treePath) {
518
+ const said = await ask(exec, treePath, [
519
+ "diff",
520
+ "--name-only",
521
+ "--diff-filter=U",
522
+ ]);
523
+ return said === undefined ? [] : said.split("\n").filter((one) => one !== "");
524
+ }
@@ -0,0 +1,52 @@
1
+ /**
2
+ * What a survey verb should look at.
3
+ *
4
+ * `tidy` and `reclaim` ask what a repository has finished with, and
5
+ * that question belongs to a checkout rather than to a held tree. The
6
+ * broker only ever holds trees it cut, so the main checkout, which is
7
+ * exactly where a person stands when they wonder what is spent, could
8
+ * never be the answer: the verb refused with "none are held" and sent
9
+ * them to raw git for the thing it exists to do.
10
+ *
11
+ * The other tree verbs are right to insist on a held tree, because
12
+ * they commit, push and replay. These two report on a repository, and
13
+ * reclaiming acts only on trees the broker does not hold, so neither
14
+ * needs the broker's permission to look.
15
+ */
16
+ /** What the caller knows when asking where to survey. */
17
+ export interface SurveyRequest {
18
+ /** A held tree's key, or a path inside a checkout. Optional. */
19
+ tree?: string;
20
+ /** The trees this session holds. */
21
+ held: {
22
+ key: string;
23
+ path: string;
24
+ }[];
25
+ /** Where the caller is standing. */
26
+ cwd: string;
27
+ /** The working tree root containing a path, or null if there is none. */
28
+ gitRootOf(path: string): string | null;
29
+ }
30
+ /**
31
+ * Where to survey. `held` says whether this is a tree the broker
32
+ * manages, which is what lets a caller name it by key rather than by
33
+ * path when reporting.
34
+ */
35
+ export type SurveyTarget = {
36
+ ok: true;
37
+ key: string;
38
+ path: string;
39
+ held: boolean;
40
+ } | {
41
+ ok: false;
42
+ refusal: string;
43
+ };
44
+ /**
45
+ * Decide which checkout a survey should read.
46
+ *
47
+ * A named held tree wins, then a named path, then the single held tree
48
+ * if there is exactly one, then the checkout the caller is standing
49
+ * in. Several held trees and no other signal is a question rather than
50
+ * a guess, the same way the acting verbs treat it.
51
+ */
52
+ export declare function surveyTarget(request: SurveyRequest): SurveyTarget;
@@ -0,0 +1,58 @@
1
+ /**
2
+ * What a survey verb should look at.
3
+ *
4
+ * `tidy` and `reclaim` ask what a repository has finished with, and
5
+ * that question belongs to a checkout rather than to a held tree. The
6
+ * broker only ever holds trees it cut, so the main checkout, which is
7
+ * exactly where a person stands when they wonder what is spent, could
8
+ * never be the answer: the verb refused with "none are held" and sent
9
+ * them to raw git for the thing it exists to do.
10
+ *
11
+ * The other tree verbs are right to insist on a held tree, because
12
+ * they commit, push and replay. These two report on a repository, and
13
+ * reclaiming acts only on trees the broker does not hold, so neither
14
+ * needs the broker's permission to look.
15
+ */
16
+ /** Name what is held, so a typo becomes a correction rather than a guess. */
17
+ function heldNames(held) {
18
+ return held.length === 0
19
+ ? "none are held"
20
+ : held.map((one) => one.key).join(", ");
21
+ }
22
+ /**
23
+ * Decide which checkout a survey should read.
24
+ *
25
+ * A named held tree wins, then a named path, then the single held tree
26
+ * if there is exactly one, then the checkout the caller is standing
27
+ * in. Several held trees and no other signal is a question rather than
28
+ * a guess, the same way the acting verbs treat it.
29
+ */
30
+ export function surveyTarget(request) {
31
+ const { tree, held, cwd, gitRootOf } = request;
32
+ if (tree) {
33
+ const named = held.find((one) => one.key === tree);
34
+ if (named)
35
+ return { ok: true, key: named.key, path: named.path, held: true };
36
+ const root = gitRootOf(tree);
37
+ if (root)
38
+ return { ok: true, key: root, path: root, held: false };
39
+ return {
40
+ ok: false,
41
+ refusal: `No held tree called ${tree}, and it is not inside a checkout: ${heldNames(held)}.`,
42
+ };
43
+ }
44
+ if (held.length === 1) {
45
+ const only = held[0];
46
+ return { ok: true, key: only.key, path: only.path, held: true };
47
+ }
48
+ // Standing in a checkout is a real answer, so it settles a session
49
+ // holding several trees rather than leaving the caller to choose
50
+ // between trees they did not ask about.
51
+ const root = gitRootOf(cwd);
52
+ if (root)
53
+ return { ok: true, key: root, path: root, held: false };
54
+ return {
55
+ ok: false,
56
+ refusal: `Name the tree to survey, or run this inside a checkout: ${heldNames(held)}.`,
57
+ };
58
+ }