@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,568 @@
1
+ /**
2
+ * The keyboard walk: what a person who never touches a mouse
3
+ * can actually reach.
4
+ *
5
+ * Every finding here comes from what the browser did when Tab
6
+ * was pressed, not from reading markup and predicting what it
7
+ * ought to do. A focus trap written by hand, a positive tabindex
8
+ * reordering the page, a div wearing a button's clothes: none of
9
+ * these are visible in the markup as bugs, and all of them are
10
+ * obvious the moment you try to tab through.
11
+ *
12
+ * The one judgment that is presentational, and labelled as such,
13
+ * is whether a focus indicator exists: that is decided by
14
+ * comparing what the browser computed for the element at rest
15
+ * against what it computed with focus on it. Whether the
16
+ * resulting indicator is bright enough to see is a contrast
17
+ * question, and belongs with the contrast audit rather than
18
+ * here; this module records the indicator so that audit can
19
+ * judge it.
20
+ */
21
+ import { isOpaque, parseRgb } from "../audit/colour.js";
22
+ import { judgeNonText, NON_TEXT_MINIMUM } from "../audit/contrast.js";
23
+ import { count, renderVerdict, standingFor, wasWere, } from "../audit/verdict.js";
24
+ /**
25
+ * How much two boxes must share vertically to count as one line.
26
+ *
27
+ * Buttons of different heights in a toolbar do not share a top
28
+ * edge to the pixel, and demanding that they do would miss every
29
+ * real case. Half the shorter one is enough to mean "beside",
30
+ * and little enough to keep stacked rows apart.
31
+ */
32
+ const SAME_LINE = 0.5;
33
+ /** Whether two boxes sit on the same line as a reader sees it. */
34
+ function beside(one, other) {
35
+ const overlap = Math.min(one.y + one.height, other.y + other.height) -
36
+ Math.max(one.y, other.y);
37
+ if (overlap <= 0)
38
+ return false;
39
+ return overlap >= Math.min(one.height, other.height) * SAME_LINE;
40
+ }
41
+ /**
42
+ * Tab order that contradicts the order things are read in.
43
+ *
44
+ * Only same-line inversions, and deliberately so. The general
45
+ * question, whether tab order follows the visual flow of the
46
+ * page, cannot be answered without deciding whether a layout is
47
+ * meant to be read in rows or in columns, and a two-column form
48
+ * that tabs down one column and then the other is both extremely
49
+ * common and perfectly correct. A check that flagged it would be
50
+ * wrong far more often than right, and a false accessibility
51
+ * finding costs more than a missing one.
52
+ *
53
+ * Two controls side by side, tabbed in the opposite order to the
54
+ * one they are read in, has no such excuse. It is what
55
+ * row-reverse and hand-set order values do, and the keyboard
56
+ * order it produces contradicts the page for everybody.
57
+ */
58
+ export function outOfVisualOrder(stops, direction) {
59
+ const jumps = [];
60
+ for (let at = 1; at < stops.length; at += 1) {
61
+ const before = stops[at - 1];
62
+ const after = stops[at];
63
+ if (before === undefined || after === undefined)
64
+ continue;
65
+ // A stop focus never reached, or one the browser gave no box,
66
+ // says nothing about order.
67
+ if (before.index === -1 || after.index === -1)
68
+ continue;
69
+ // The walk laps the page, so the step from the last control
70
+ // back to the first is a cycle rather than a jump. Measured:
71
+ // on an ordinary page that wrap is a right-to-left move
72
+ // between two elements that happen to share a line, and it was
73
+ // the check's first false positive.
74
+ //
75
+ // Within one lap, tab follows document order, which is the
76
+ // order candidates are numbered in, so an ascending index is
77
+ // what distinguishes a real step from the wrap. A page using
78
+ // positive tabindex breaks that, and is reported separately
79
+ // for doing so; missing a reversal there is the right way to
80
+ // be wrong.
81
+ if (after.index <= before.index)
82
+ continue;
83
+ const here = before.rect;
84
+ const next = after.rect;
85
+ if (here === undefined || next === undefined)
86
+ continue;
87
+ if (!beside(here, next))
88
+ continue;
89
+ const backwards = direction === "rtl" ? next.x > here.x : next.x < here.x;
90
+ if (backwards)
91
+ jumps.push({ before, after });
92
+ }
93
+ return jumps;
94
+ }
95
+ /**
96
+ * Whether an outline is actually drawn.
97
+ *
98
+ * A width survives in the computed style even when the style is
99
+ * none, so an element with no outline at all still reports three
100
+ * pixels of it. Comparing widths alone would call that a change.
101
+ */
102
+ /**
103
+ * Say how many controls the trap shut out, and name a few.
104
+ *
105
+ * A bare count is the least useful true thing available here: a
106
+ * reader who is told six controls are stranded still has to go
107
+ * and find out which. These are the controls a keyboard user can
108
+ * no longer reach, so they are worth naming.
109
+ */
110
+ function strandedSentence(stranded) {
111
+ const named = stranded
112
+ .map((candidate) => candidate.name || candidate.tag)
113
+ .filter((name) => name.length > 0);
114
+ const shown = named.slice(0, MAX_NAMED_STRANDED);
115
+ const rest = named.length - shown.length;
116
+ const list = shown.length === 0
117
+ ? ""
118
+ : `: ${shown.join(", ")}${rest > 0 ? `, and ${rest} more` : ""}`;
119
+ const count = stranded.length === 1
120
+ ? "1 control is stranded outside it"
121
+ : `${stranded.length} controls are stranded outside it`;
122
+ return ` ${count}${list}.`;
123
+ }
124
+ /** How many stranded controls to name before counting the rest. */
125
+ const MAX_NAMED_STRANDED = 6;
126
+ function outlineDrawn(style) {
127
+ return style.outlineStyle !== "none";
128
+ }
129
+ /**
130
+ * Where the focus indicator lives, by comparing rest with focus.
131
+ *
132
+ * This is the honest test, and the only one that survives
133
+ * contact with real pages: not whether the author wrote an
134
+ * outline rule, but whether the browser draws anything
135
+ * differently when the element has focus.
136
+ */
137
+ export function indicatorOf(resting, focused) {
138
+ const outlineChanged = outlineDrawn(focused) !== outlineDrawn(resting) ||
139
+ (outlineDrawn(focused) &&
140
+ (focused.outlineColor !== resting.outlineColor ||
141
+ focused.outlineWidth !== resting.outlineWidth));
142
+ if (outlineChanged)
143
+ return "outline";
144
+ if (focused.boxShadow !== resting.boxShadow)
145
+ return "boxShadow";
146
+ if (focused.backgroundColor !== resting.backgroundColor)
147
+ return "background";
148
+ if (focused.borderColor !== resting.borderColor)
149
+ return "border";
150
+ if (focused.color !== resting.color)
151
+ return "colour";
152
+ return "none";
153
+ }
154
+ /**
155
+ * Whether a focus indicator can actually be seen.
156
+ *
157
+ * The walk decides an indicator exists by seeing the computed
158
+ * style change. That is a weaker claim than it sounds, and the
159
+ * gap between the two is where the real defect lives: a ring in
160
+ * a colour a shade off the background satisfies every existence
161
+ * check ever written and still leaves someone unable to tell
162
+ * where they are. WCAG 2.4.11 puts the bar at 3:1 against what
163
+ * the indicator is drawn against, which is the same bar 1.4.11
164
+ * sets for any control's own colours.
165
+ *
166
+ * Only an outline is judged. A box shadow can be any number of
167
+ * layers offset in any direction, a background or colour change
168
+ * moves the very surface the comparison would use, and in
169
+ * neither case does the computed value say which pixels changed.
170
+ * Those come back undecided, which is this package's word for a
171
+ * question it will not answer by guessing. A transparent surface
172
+ * is undecided for the same reason: the colour behind the ring
173
+ * belongs to some ancestor the computed style does not name, and
174
+ * compositing against a guess is how a page gets accused of a
175
+ * failure it does not have.
176
+ */
177
+ export function judgeIndicator(input) {
178
+ if (input.indicator !== "outline") {
179
+ return {
180
+ standing: "undecided",
181
+ reason: `the indicator is a ${input.indicator} change, and which ` +
182
+ "pixels it alters cannot be read from the computed style",
183
+ };
184
+ }
185
+ const ring = parseRgb(input.focused.outlineColor);
186
+ const surface = parseRgb(input.resting.backgroundColor);
187
+ if (!ring || !surface) {
188
+ return {
189
+ standing: "undecided",
190
+ reason: "the ring or the surface behind it is not a plain colour",
191
+ };
192
+ }
193
+ if (!isOpaque(surface)) {
194
+ return {
195
+ standing: "undecided",
196
+ reason: "the surface behind the ring is see-through, so its " +
197
+ "colour belongs to an ancestor this cannot name",
198
+ };
199
+ }
200
+ const verdict = judgeNonText({ foreground: ring, background: surface });
201
+ // The contrast layer has its own reasons for declining, and they
202
+ // are better than any this one could invent, so they travel out
203
+ // rather than being flattened into a generic shrug.
204
+ if (verdict.kind === "undecidable") {
205
+ return { standing: "undecided", reason: verdict.because };
206
+ }
207
+ return {
208
+ standing: verdict.passes ? "pass" : "fail",
209
+ ratio: verdict.ratio,
210
+ reason: verdict.passes
211
+ ? `the ring reaches ${verdict.ratio}:1 against what it sits on`
212
+ : `the ring reaches only ${verdict.ratio}:1 against what it ` +
213
+ `sits on, short of the ${NON_TEXT_MINIMUM}:1 that 2.4.11 asks`,
214
+ };
215
+ }
216
+ /**
217
+ * The shortest cycle the walk ended in, if it ended in one.
218
+ *
219
+ * A tab order that works is a cycle too: it comes back round to
220
+ * the start. What makes a cycle a trap is that it is smaller
221
+ * than the page, so the caller compares it against the
222
+ * candidates rather than this function deciding alone.
223
+ */
224
+ function trailingCycle(indices) {
225
+ for (let period = 1; period * 2 <= indices.length; period += 1) {
226
+ const tail = indices.slice(-period);
227
+ const before = indices.slice(-period * 2, -period);
228
+ if (tail.every((value, at) => value === before[at]))
229
+ return tail;
230
+ }
231
+ return [];
232
+ }
233
+ /** Read the walk. */
234
+ export function analyseWalk(capture) {
235
+ const { candidates, stops } = capture;
236
+ const indicators = new Map();
237
+ const noIndicator = [];
238
+ const faintIndicator = [];
239
+ const restingByIndex = new Map(candidates.map((candidate) => [candidate.index, candidate.resting]));
240
+ for (const stop of stops) {
241
+ const resting = restingByIndex.get(stop.index);
242
+ if (!resting)
243
+ continue;
244
+ const indicator = indicatorOf(resting, stop.focused);
245
+ indicators.set(stop.index, indicator);
246
+ if (indicator === "none" &&
247
+ !noIndicator.some((s) => s.index === stop.index)) {
248
+ noIndicator.push(stop);
249
+ continue;
250
+ }
251
+ // An indicator that exists still has to be visible. Only a
252
+ // decided failure is collected: undecided is left alone rather
253
+ // than reported as a maybe, because the walk's verdict is read
254
+ // as a list of things to fix.
255
+ const seen = judgeIndicator({ indicator, resting, focused: stop.focused });
256
+ if (seen.standing === "fail" &&
257
+ seen.ratio !== undefined &&
258
+ !faintIndicator.some((faint) => faint.stop.index === stop.index)) {
259
+ faintIndicator.push({ stop, ratio: seen.ratio });
260
+ }
261
+ }
262
+ const visited = new Set(stops.map((stop) => stop.index));
263
+ const missed = candidates.filter((candidate) => !visited.has(candidate.index));
264
+ const cycle = trailingCycle(stops.map((stop) => stop.index));
265
+ const cycleMembers = new Set(cycle);
266
+ // A cycle is only a trap when something focusable sits outside
267
+ // it. A page whose whole tab order loops is working correctly.
268
+ //
269
+ // Two things that are not traps used to be reported as one.
270
+ //
271
+ // A modal dialog contains focus deliberately: that is the
272
+ // pattern working, and the background controls it excludes are
273
+ // exactly what lands in `missed`, so the reference
274
+ // implementation of an accessible dialog produced this check's
275
+ // loudest possible output.
276
+ //
277
+ // A walk cut short by its own budget has not visited the rest
278
+ // of the page yet. Everything it did not reach is unvisited,
279
+ // not unreachable, and calling that a trap blames the page for
280
+ // a limit we imposed.
281
+ const inModal = (index) => stops.some((stop) => stop.index === index && stop.inModal === true) ||
282
+ candidates.some((candidate) => candidate.index === index && candidate.inModal === true);
283
+ // Index -1 is focus resting on the body between laps rather
284
+ // than on any candidate, which headless Chrome does every time
285
+ // round. It is not a control the dialog failed to contain, so
286
+ // it must not decide whether the cycle is inside one; leaving
287
+ // it in made every real modal look like a leak.
288
+ const cycled = cycle.filter((index) => index >= 0);
289
+ const modalCycle = cycled.length > 0 && cycled.every(inModal);
290
+ // A trap and a budget shortfall both end with the walk stopping
291
+ // early, and telling them apart is the whole job here. The
292
+ // signal is whether the walk was looping or still finding new
293
+ // controls when it ran out: a settled cycle smaller than the
294
+ // page is a trap however long we let it run, while a walk that
295
+ // was still making progress simply needed more stops.
296
+ const looping = cycled.length > 0;
297
+ // What makes a cycle a trap is that focus cannot leave it, so
298
+ // the question is which controls sit outside it, not which were
299
+ // never visited.
300
+ //
301
+ // Those are different sets, and the difference is the commonest
302
+ // trap there is. A page that tabs through its header, reaches a
303
+ // widget and then cycles inside it for ever has visited every
304
+ // control: nothing is missed, and asking about missed controls
305
+ // called it clean. The header is still unreachable from inside
306
+ // the widget, which is the whole complaint. The reference
307
+ // keydown trap, two buttons swallowing Tab after two ordinary
308
+ // links, was reported as passing for exactly this reason, and
309
+ // only looked detected while phantom candidates were padding
310
+ // the missed list.
311
+ const outsideCycle = candidates.filter((candidate) => !cycleMembers.has(candidate.index));
312
+ const trapped = looping && outsideCycle.length > 0 && !modalCycle;
313
+ const ranOut = capture.cappedAt !== undefined && !looping;
314
+ const trap = trapped
315
+ ? {
316
+ // A cycle has no natural first member: where the repeat
317
+ // was detected is an arbitrary rotation, so "In B, In A"
318
+ // read oddly beside a tab order listing In A first.
319
+ // Document order is the one the reader already has.
320
+ members: [...cycleMembers]
321
+ .sort((a, b) => a - b)
322
+ .map((index) => stops.find((stop) => stop.index === index))
323
+ .filter((stop) => stop !== undefined),
324
+ escapeFreed: capture.escapeFreed === true,
325
+ stranded: outsideCycle,
326
+ }
327
+ : undefined;
328
+ const positiveTabindex = candidates.filter((candidate) => (candidate.tabindex ?? 0) > 0);
329
+ // Document order is the order the candidates were collected
330
+ // in, so a walk that visits them out of that order has been
331
+ // reordered by something, almost always a positive tabindex.
332
+ const arrival = stops
333
+ .map((stop) => stop.index)
334
+ .filter((index, at, all) => index >= 0 && all.indexOf(index) === at);
335
+ // A modal legitimately takes focus out of document order: its
336
+ // controls come after the background ones in the source and
337
+ // before them in the tab order. Reporting that as a reordered
338
+ // page blames the dialog for working.
339
+ const reordered = !modalCycle &&
340
+ arrival.some((index, at) => at > 0 && index < (arrival[at - 1] ?? -1));
341
+ return {
342
+ stops,
343
+ ...(trap ? { trap } : {}),
344
+ missed,
345
+ noIndicator,
346
+ faintIndicator,
347
+ // The page's own direction, when the capture reported it. A
348
+ // right-to-left page reads the other way, and the geometry
349
+ // that is wrong in English is correct in Arabic.
350
+ outOfOrder: outOfVisualOrder(stops, capture.direction ?? "ltr"),
351
+ indicators,
352
+ // The walk laps the page, so an offscreen stop is met once
353
+ // per lap. It is one problem, not one per visit.
354
+ offscreen: stops.filter((stop, at) => !stop.inViewport &&
355
+ stop.index >= 0 &&
356
+ stops.findIndex((other) => other.index === stop.index) === at),
357
+ positiveTabindex,
358
+ unreachable: capture.unreachable,
359
+ reordered,
360
+ ...(ranOut && capture.cappedAt !== undefined
361
+ ? { cappedAt: capture.cappedAt }
362
+ : {}),
363
+ modalHeldFocus: modalCycle,
364
+ };
365
+ }
366
+ /** How many stops are worth listing before summarising. */
367
+ const MAX_LISTED_STOPS = 40;
368
+ /**
369
+ * How many of anything else is worth naming before counting.
370
+ *
371
+ * The tab order has always stopped at forty and said how many
372
+ * more there were. The finding lists beside it printed every
373
+ * entry, so one article answered with two hundred and fifty
374
+ * unvisited control names, longer than the rest of the report
375
+ * together and mostly repetitions of the same word.
376
+ */
377
+ export const MAX_LISTED_FINDINGS = 12;
378
+ /** Name a few, count the rest, in one place for every list. */
379
+ function listSome(lines, entries, cap = MAX_LISTED_FINDINGS) {
380
+ for (const entry of entries.slice(0, cap))
381
+ lines.push(` ${entry}`);
382
+ if (entries.length > cap) {
383
+ lines.push(` ... and ${entries.length - cap} more.`);
384
+ }
385
+ }
386
+ /** The walk, as a person would report it. */
387
+ export function renderWalk(findings) {
388
+ const lines = [];
389
+ const real = findings.stops.filter((stop) => stop.index >= 0);
390
+ // A tab order is a cycle, so the walk deliberately goes round
391
+ // more than once to prove it. Printing every lap would say the
392
+ // same thing ten times over; the distinct stops, in the order
393
+ // they were first reached, say all of it.
394
+ const seen = new Set();
395
+ const firstPass = real.filter((stop) => {
396
+ if (seen.has(stop.index))
397
+ return false;
398
+ seen.add(stop.index);
399
+ return true;
400
+ });
401
+ const looped = real.length > firstPass.length;
402
+ const measured = `Tabbed through ${firstPass.length} distinct stops` +
403
+ `${looped ? ", then the order repeated" : ""}.`;
404
+ if (findings.trap) {
405
+ const names = findings.trap.members
406
+ .map((stop) => stop.name || stop.tag)
407
+ .join(", ");
408
+ lines.push(`FOCUS TRAP: once inside, tab only ever reaches ${names}.`, findings.trap.escapeFreed
409
+ ? " Escape does get out, so a keyboard user is not stranded."
410
+ : " Escape does not get out either. There is no way back to " +
411
+ "the page without a mouse.", strandedSentence(findings.trap.stranded), "");
412
+ }
413
+ if (findings.noIndicator.length > 0) {
414
+ lines.push("No visible focus indicator, so focus cannot be followed:");
415
+ listSome(lines, findings.noIndicator.map((stop) => `${stop.name || stop.tag} (${stop.tag.toLowerCase()})`));
416
+ lines.push("");
417
+ }
418
+ if (findings.faintIndicator.length > 0) {
419
+ lines.push("Focus indicator too faint to make out, which 2.4.11 holds " +
420
+ `to ${NON_TEXT_MINIMUM}:1:`);
421
+ listSome(lines, findings.faintIndicator.map((faint) => `${faint.stop.name || faint.stop.tag} ` +
422
+ `(${faint.stop.tag.toLowerCase()}) at ${faint.ratio}:1`));
423
+ lines.push("");
424
+ }
425
+ if (findings.outOfOrder.length > 0) {
426
+ lines.push("Side by side, but tabbed in the opposite order to the one " +
427
+ "they read in (2.4.3, worth a look rather than a failure):");
428
+ listSome(lines, findings.outOfOrder.map((jump) => `${jump.before.name || jump.before.tag} is reached before ` +
429
+ `${jump.after.name || jump.after.tag}, which sits to its left`));
430
+ lines.push("");
431
+ }
432
+ if (findings.unreachable.length > 0) {
433
+ lines.push("Behaves interactively but tab never reaches it:");
434
+ listSome(lines, findings.unreachable.map((item) => `${item.name || item.tag} (${item.tag.toLowerCase()}) ` +
435
+ `- ${item.because}`));
436
+ lines.push("");
437
+ }
438
+ if (findings.positiveTabindex.length > 0) {
439
+ lines.push("Positive tabindex, which pulls these ahead of everything else " +
440
+ "on the page:");
441
+ listSome(lines, findings.positiveTabindex.map((candidate) => `${candidate.name || candidate.tag} (tabindex ` +
442
+ `${candidate.tabindex})`));
443
+ lines.push("");
444
+ }
445
+ else if (findings.reordered) {
446
+ lines.push("The tab order does not follow the document order.", "");
447
+ }
448
+ if (findings.offscreen.length > 0) {
449
+ lines.push("Focused while off screen, so the page appears not to react:");
450
+ listSome(lines, findings.offscreen.map((stop) => stop.name || stop.tag));
451
+ lines.push("");
452
+ }
453
+ if (findings.missed.length > 0 &&
454
+ !findings.trap &&
455
+ !findings.modalHeldFocus) {
456
+ lines.push(findings.cappedAt === undefined
457
+ ? `${findings.missed.length} focusable things were never reached:`
458
+ : `${findings.missed.length} focusable things were not visited ` +
459
+ `before the walk hit its ${findings.cappedAt}-stop budget. ` +
460
+ "Raise maxStops to walk the rest:");
461
+ listSome(lines, findings.missed.map((candidate) => candidate.name || candidate.tag));
462
+ lines.push("");
463
+ }
464
+ lines.push("The order tab took:");
465
+ for (const [at, stop] of firstPass.slice(0, MAX_LISTED_STOPS).entries()) {
466
+ const indicator = findings.indicators.get(stop.index);
467
+ const ring = indicator && indicator !== "none" ? "" : " [no ring]";
468
+ lines.push(` ${String(at + 1).padStart(2)}. ${stop.name || stop.tag}${ring}`);
469
+ }
470
+ if (firstPass.length > MAX_LISTED_STOPS) {
471
+ lines.push(` ... and ${firstPass.length - MAX_LISTED_STOPS} more.`);
472
+ }
473
+ // A trap or an unreachable control is a page a keyboard user
474
+ // cannot finish using, so those fail. An invisible ring or a
475
+ // rearranged order makes the page hard rather than impossible.
476
+ //
477
+ // A walk that ran out of budget has not finished looking, so
478
+ // what it did not reach is unvisited rather than unreachable.
479
+ // Counting those as failures made the tool's own limit read as
480
+ // the page's defect, and maxStops the shortest route to a
481
+ // fabricated critical verdict.
482
+ //
483
+ // A modal holding focus excludes the page behind it on purpose,
484
+ // so what it kept focus away from is neither missed nor a
485
+ // budget overrun.
486
+ const excused = findings.cappedAt !== undefined || findings.modalHeldFocus;
487
+ const failures = (findings.trap ? 1 : 0) +
488
+ findings.unreachable.length +
489
+ (excused ? 0 : findings.missed.length);
490
+ const warnings = findings.noIndicator.length +
491
+ findings.faintIndicator.length +
492
+ findings.offscreen.length +
493
+ findings.positiveTabindex.length +
494
+ (findings.reordered ? 1 : 0) +
495
+ // A walk that laps inside a modal always spends its whole
496
+ // budget and never reaches the page behind. The dialog was the
497
+ // limit, not the budget, so this is not something to raise.
498
+ (!findings.modalHeldFocus &&
499
+ findings.cappedAt !== undefined &&
500
+ findings.missed.length > 0
501
+ ? 1
502
+ : 0);
503
+ return renderVerdict({
504
+ standing: standingFor({ failures, warnings }),
505
+ headline: headlineFor(findings, warnings),
506
+ measured,
507
+ }, lines.join("\n"));
508
+ }
509
+ /** Say the worst true thing about the walk, in one line. */
510
+ function headlineFor(findings, warnings) {
511
+ if (findings.trap) {
512
+ return findings.trap.escapeFreed
513
+ ? "Focus is trapped, though Escape gets out."
514
+ : "Focus is trapped with no way out but a mouse.";
515
+ }
516
+ // Focus held inside a dialog is the pattern working. The
517
+ // background controls it excludes are what a modal is for, so
518
+ // they are neither missed nor a budget problem.
519
+ if (findings.modalHeldFocus) {
520
+ return ("A modal dialog is holding focus, which is correct. " +
521
+ `Tab cycles its ${findings.stops.length > 0 ? "controls" : "content"} ` +
522
+ "and does not reach the page behind it.");
523
+ }
524
+ if (findings.cappedAt !== undefined && findings.missed.length > 0) {
525
+ return (`The walk stopped at its ${findings.cappedAt}-stop budget with ` +
526
+ `${findings.missed.length} controls not yet visited.`);
527
+ }
528
+ // Two different faults, so they are counted and named
529
+ // separately. Summing them under one sentence reported "6 things
530
+ // can be operated but never focused" for a page with one such
531
+ // thing and five unvisited controls, and the report below it
532
+ // listed the one, so the headline argued with its own detail.
533
+ if (findings.unreachable.length > 0 && findings.missed.length > 0) {
534
+ return (`${count(findings.unreachable.length, "thing")} can be operated ` +
535
+ `but never focused, and ${count(findings.missed.length, "control")} ` +
536
+ `${wasWere(findings.missed.length)} never reached.`);
537
+ }
538
+ if (findings.unreachable.length > 0) {
539
+ return `${count(findings.unreachable.length, "thing")} can be operated but never focused.`;
540
+ }
541
+ if (findings.missed.length > 0) {
542
+ return (`${count(findings.missed.length, "control")} ` +
543
+ `${wasWere(findings.missed.length)} never reached.`);
544
+ }
545
+ if (warnings > 0) {
546
+ return warnings === 1
547
+ ? "Every control was reached, but 1 stop is hard to follow."
548
+ : `Every control was reached, but ${warnings} stops are hard to follow.`;
549
+ }
550
+ // Only Tab was pressed, so this cannot claim the controls
551
+ // operate. Nor can it claim the visual order matches: the check
552
+ // that exists catches two controls side by side tabbed against
553
+ // the way they read, and deliberately declines the general
554
+ // question, because deciding whether a layout is meant to be
555
+ // read in rows or columns is not something geometry settles.
556
+ // Saying "in order, with focus visible" asserted both.
557
+ //
558
+ // Nor can it say the rings are visible. It once did, on the
559
+ // strength of the style changing on focus, which is a different
560
+ // claim wearing the same word: a ring one shade off its
561
+ // background changes the style and cannot be seen. Contrast is
562
+ // measured now, but only for outlines over a known surface, so
563
+ // "visible" would still be speaking for the shadows and
564
+ // see-through backgrounds this declines to judge. What is true
565
+ // of every control here is that focus does something visible to
566
+ // it, and the faint ones are listed above by name.
567
+ return "Tab reached every control, each with a focus indicator.";
568
+ }
@@ -0,0 +1,44 @@
1
+ /**
2
+ * The page-side half of the keyboard walk.
3
+ *
4
+ * These ship as source strings because they declare helpers of
5
+ * their own, and the bundler renames every named inner binding
6
+ * through a wrapper the page has never heard of. A function
7
+ * handed over as a value would throw before it registered
8
+ * anything, silently.
9
+ */
10
+ /**
11
+ * Collect everything the browser will let focus land on, and
12
+ * remember what each looks like at rest.
13
+ *
14
+ * The list is deliberately built from the browser's own view: an
15
+ * element that is display:none or disabled is not focusable no
16
+ * matter what its markup says, and asking the computed style is
17
+ * the only way to know.
18
+ */
19
+ export declare const WALK_COLLECT: string;
20
+ /**
21
+ * Read where focus is now.
22
+ *
23
+ * The index is looked up against the same array the collection
24
+ * pass stored, so identity is the element itself rather than a
25
+ * selector that might match twice.
26
+ */
27
+ export declare const WALK_READ: string;
28
+ /**
29
+ * Remember where focus and the viewport were before the walk.
30
+ *
31
+ * The walk is one of the two reads that deliberately change the
32
+ * page, so it owes the caller the page it was handed back. Tab
33
+ * scrolls each stop into view, and the health digest runs the
34
+ * keyboard check before the visual and design ones, so a walk
35
+ * that leaves the page scrolled moves the ground under every
36
+ * measurement that follows it in the same run. Performance now
37
+ * runs ahead of the walk rather than behind it, for a related
38
+ * reason: the walk's own work was being measured as the page's.
39
+ *
40
+ * Paired with WALK_RESTORE below, which puts both back.
41
+ */
42
+ export declare const WALK_REMEMBER = "(() => {\n\twindow.__walkOrigin = {\n\t\tel: document.activeElement,\n\t\tx: window.scrollX,\n\t\ty: window.scrollY,\n\t};\n\treturn true;\n})()";
43
+ /** Put focus and the scroll position back where the walk found them. */
44
+ export declare const WALK_RESTORE = "(() => {\n\tconst origin = window.__walkOrigin;\n\tif (document.activeElement && document.activeElement.blur) {\n\t\tdocument.activeElement.blur();\n\t}\n\tif (origin) {\n\t\tconst el = origin.el;\n\t\t// Refocusing only makes sense if it is still in the document\n\t\t// and could hold focus in the first place; body cannot.\n\t\tif (el && el.isConnected && typeof el.focus === \"function\" &&\n\t\t\tel !== document.body && el !== document.documentElement) {\n\t\t\ttry { el.focus({ preventScroll: true }); } catch { /* gone */ }\n\t\t}\n\t\twindow.scrollTo(origin.x, origin.y);\n\t}\n\twindow.__walkOrigin = undefined;\n\twindow.__walkCandidates = undefined;\n\treturn true;\n})()";