@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,175 @@
1
+ /**
2
+ * What the page cost the person waiting for it.
3
+ *
4
+ * The numbers come from the browser's own performance observers,
5
+ * which is the only place they can honestly come from: largest
6
+ * contentful paint and layout shift are defined by what the
7
+ * renderer did, not by anything measurable from outside.
8
+ *
9
+ * What this module adds is the arithmetic the observers leave to
10
+ * the caller, and one piece of it matters more than the rest.
11
+ * Cumulative layout shift is not the sum of every shift, though
12
+ * summing is the obvious reading of the name. It is the largest
13
+ * sum within a session window, so a page that shifts a little
14
+ * every few seconds over a long visit is not punished as though
15
+ * it had shifted once, enormously.
16
+ */
17
+ import { count } from "../../ui/count.js";
18
+ /**
19
+ * Whether an entry type was actually being watched.
20
+ *
21
+ * An observer that never installed reports nothing, which looks
22
+ * exactly like a page with nothing to report. Cumulative layout
23
+ * shift is the one that matters: it was pushed unconditionally,
24
+ * so a capture where no observer ran still answered 0.000 and
25
+ * PASS, and the renderer's "Nothing was measured" branch could
26
+ * never be reached.
27
+ */
28
+ export function watching(vitals, type) {
29
+ // A capture from before this was recorded says nothing either
30
+ // way; treat it as watching, which is how it behaved then.
31
+ return vitals.installed === undefined || vitals.installed.includes(type);
32
+ }
33
+ /** A shift more than this far after the last one starts a new window. */
34
+ export const SESSION_GAP_MS = 1000;
35
+ /** No session window runs longer than this. */
36
+ export const SESSION_CAP_MS = 5000;
37
+ /**
38
+ * The published good and poor boundaries, in order.
39
+ *
40
+ * `longTask` is the per-task pair: a task over 50ms is long, and
41
+ * the deduction that turns a set of long tasks into total
42
+ * blocking time is taken against that 50. `tbt` is the separate
43
+ * pair for the aggregate. Reusing the per-task numbers to rate
44
+ * the sum called 210ms of total blocking time poor, when the
45
+ * published boundary for poor is 600, and because perf sits in
46
+ * the health digest an ordinary page dragged the whole digest
47
+ * to FAIL.
48
+ */
49
+ export const THRESHOLDS = {
50
+ lcp: { good: 2500, poor: 4000 },
51
+ cls: { good: 0.1, poor: 0.25 },
52
+ fcp: { good: 1800, poor: 3000 },
53
+ ttfb: { good: 800, poor: 1800 },
54
+ longTask: { good: 50, poor: 200 },
55
+ tbt: { good: 200, poor: 600 },
56
+ };
57
+ /** Rate a measurement against its thresholds. */
58
+ export function rate(value, bounds) {
59
+ if (value <= bounds.good)
60
+ return "good";
61
+ return value <= bounds.poor ? "needs-improvement" : "poor";
62
+ }
63
+ /**
64
+ * Cumulative layout shift, as the metric is actually defined.
65
+ *
66
+ * Shifts are grouped into windows: a gap of a second starts a
67
+ * new one, and no window runs past five seconds. The score is
68
+ * the largest window, not the total. Summing everything would
69
+ * report a page that nudges once a minute as worse than one
70
+ * that jumps once on load, which is backwards.
71
+ */
72
+ export function cumulativeShift(shifts) {
73
+ let worst = 0;
74
+ let windowTotal = 0;
75
+ let windowStart = 0;
76
+ let previous = 0;
77
+ for (const shift of shifts) {
78
+ const startsNew = windowTotal > 0 &&
79
+ (shift.time - previous > SESSION_GAP_MS ||
80
+ shift.time - windowStart > SESSION_CAP_MS);
81
+ if (startsNew) {
82
+ worst = Math.max(worst, windowTotal);
83
+ windowTotal = 0;
84
+ windowStart = shift.time;
85
+ }
86
+ if (windowTotal === 0)
87
+ windowStart = shift.time;
88
+ windowTotal += shift.value;
89
+ previous = shift.time;
90
+ }
91
+ return Math.max(worst, windowTotal);
92
+ }
93
+ /** What most moved the page, and how much. */
94
+ export function worstShiftSources(shifts, limit = 5) {
95
+ const blame = new Map();
96
+ for (const shift of shifts) {
97
+ // A shift with several sources shares its score among them,
98
+ // because there is no way to tell which one moved the page.
99
+ const share = shift.sources.length > 0 ? shift.value / shift.sources.length : 0;
100
+ for (const source of shift.sources) {
101
+ const node = source.node ?? "(unnamed)";
102
+ blame.set(node, (blame.get(node) ?? 0) + share);
103
+ }
104
+ }
105
+ return [...blame.entries()]
106
+ .map(([node, moved]) => ({ node, moved }))
107
+ .sort((a, b) => b.moved - a.moved)
108
+ .slice(0, limit);
109
+ }
110
+ /** Read the vitals into rated measures. */
111
+ export function measure(vitals) {
112
+ const measures = [];
113
+ const ttfb = vitals.nav?.responseStart;
114
+ if (ttfb !== undefined) {
115
+ measures.push({
116
+ name: "time to first byte",
117
+ value: ttfb,
118
+ unit: "ms",
119
+ rating: rate(ttfb, THRESHOLDS.ttfb),
120
+ });
121
+ }
122
+ const fcp = vitals.paints["first-contentful-paint"];
123
+ if (fcp !== undefined) {
124
+ measures.push({
125
+ name: "first contentful paint",
126
+ value: fcp,
127
+ unit: "ms",
128
+ rating: rate(fcp, THRESHOLDS.fcp),
129
+ });
130
+ }
131
+ if (vitals.lcp) {
132
+ measures.push({
133
+ name: "largest contentful paint",
134
+ value: vitals.lcp.time,
135
+ unit: "ms",
136
+ rating: rate(vitals.lcp.time, THRESHOLDS.lcp),
137
+ ...(vitals.lcp.element === null ? {} : { detail: vitals.lcp.element }),
138
+ });
139
+ }
140
+ const cls = cumulativeShift(vitals.shifts);
141
+ if (watching(vitals, "layout-shift")) {
142
+ measures.push({
143
+ name: "cumulative layout shift",
144
+ value: Math.round(cls * 1000) / 1000,
145
+ unit: "score",
146
+ rating: rate(cls, THRESHOLDS.cls),
147
+ ...(vitals.shifts.length === 0
148
+ ? {}
149
+ : {
150
+ detail: count(vitals.shifts.length, "shift"),
151
+ }),
152
+ });
153
+ }
154
+ const blocking = vitals.longTasks.reduce((sum, task) => sum + Math.max(0, task.duration - THRESHOLDS.longTask.good), 0);
155
+ // Watched for, not found, is the same rule layout shift follows
156
+ // and the exact mirror of the bug that rule was written for. A
157
+ // page that blocked nobody is good news; reporting nothing at
158
+ // all made it indistinguishable from a page nobody watched, and
159
+ // two reads of one page could answer four measures and PASS or
160
+ // five and FAIL with no way to tell which had happened.
161
+ if (watching(vitals, "longtask")) {
162
+ measures.push({
163
+ name: "total blocking time",
164
+ value: Math.round(blocking),
165
+ unit: "ms",
166
+ rating: rate(blocking, THRESHOLDS.tbt),
167
+ ...(vitals.longTasks.length === 0
168
+ ? {}
169
+ : {
170
+ detail: count(vitals.longTasks.length, "long task"),
171
+ }),
172
+ });
173
+ }
174
+ return measures;
175
+ }
@@ -0,0 +1,131 @@
1
+ /**
2
+ * Page reader: fetches a URL with headless Chrome and captures it as a
3
+ * bundle of representations the model can pick and choose from.
4
+ *
5
+ * Every read settles the page once (capture-width viewport, dynamic-content
6
+ * wait, lazy-content scroll) and then snapshots article markdown (via
7
+ * defuddle), the rendered inner text, the DOM and a bounded stack of
8
+ * screenshot tiles from that one state. Artifacts are written to a private,
9
+ * per-session directory keyed by process id, so a crashed session's
10
+ * captures can be reaped without touching a live one. The caller turns the
11
+ * returned paths into a pointer manifest so the model opens only what it
12
+ * needs.
13
+ */
14
+ import type { Page } from "puppeteer-core";
15
+ import { type BundleSink } from "./envelope/sink.js";
16
+ import { type TiledCapture } from "./screenshot.js";
17
+ /**
18
+ * Thrown when a page redirects to an auth provider and Chrome
19
+ * cookie injection hasn't been set up yet.
20
+ */
21
+ export declare class AuthSetupNeeded extends Error {
22
+ constructor();
23
+ }
24
+ /**
25
+ * A page captured as a bundle of representations on disk. Each path points
26
+ * at one representation in `dir`; the model opens whichever it needs. The
27
+ * DOM is always captured, so `domPath` is required; the article is present
28
+ * only when extraction found one.
29
+ */
30
+ export interface PageBundle {
31
+ title: string;
32
+ /** The final URL after any redirects, which is what was actually read. */
33
+ url: string;
34
+ /** A short inline snippet so the model can judge relevance without opening a file. */
35
+ excerpt: string;
36
+ /** The bundle directory holding every artifact. */
37
+ dir: string;
38
+ /** Path to the cleaned article markdown, when extraction found an article. */
39
+ articlePath?: string;
40
+ /** Path to the rendered inner text, when the page had any. */
41
+ innerTextPath?: string;
42
+ /** Path to the rendered DOM (HTML). Always written. */
43
+ domPath: string;
44
+ /** Paths to the screenshot tiles, top to bottom. */
45
+ screenshotPaths: string[];
46
+ /** True when the page ran past the screenshot tile budget and was cut short. */
47
+ truncated: boolean;
48
+ }
49
+ /** Extracted article from defuddle: markdown content, title and word count. */
50
+ export interface Article {
51
+ markdown: string;
52
+ title: string;
53
+ wordCount: number;
54
+ }
55
+ /**
56
+ * The raw representations captured from a settled page, before they are
57
+ * written to disk. Keeps capture (browser I/O) separate from assembly
58
+ * (pure file layout) so each is testable on its own.
59
+ */
60
+ export interface Captured {
61
+ /** The final URL after redirects. */
62
+ url: string;
63
+ title: string;
64
+ html: string;
65
+ innerText: string;
66
+ article: Article | null;
67
+ /** Base64 PNG tiles, top to bottom. */
68
+ tiles: string[];
69
+ truncated: boolean;
70
+ }
71
+ /**
72
+ * The disk side of bundle assembly, injected so assembly can be tested
73
+ * without touching the filesystem. Defined in the envelope, since
74
+ * everything that outgrows a response needs somewhere to go, and
75
+ * re-exported here for the readers that have always imported it from
76
+ * this module.
77
+ */
78
+ export type { BundleSink } from "./envelope/sink.js";
79
+ /** Collaborators of `capturePage`, injected so the orchestration is testable. */
80
+ export interface CaptureDeps {
81
+ preparePage(page: Page): Promise<void>;
82
+ captureTiles(page: Page): Promise<TiledCapture>;
83
+ extractArticle(html: string, url: string): Promise<Article | null>;
84
+ }
85
+ /** True when a final URL indicates a redirect to an auth provider. */
86
+ export declare function isAuthRedirect(url: string): boolean;
87
+ /**
88
+ * Assemble a bundle from captured representations by writing each one
89
+ * through the sink. The DOM is always written; the article and inner text
90
+ * are written only when present; every screenshot tile gets an ordered,
91
+ * zero-padded name. Text is capped with a visible marker, and the
92
+ * page-controlled title and excerpt are flattened to a single line so they
93
+ * cannot impersonate the manifest's own structure.
94
+ */
95
+ export declare function assembleBundle(captured: Captured, sink: BundleSink): PageBundle;
96
+ export { diskSink } from "./envelope/sink.js";
97
+ /**
98
+ * Reap bundle directories that no live session owns. The current root is
99
+ * keyed by process id, so a pid-named directory is abandoned exactly when
100
+ * its pid is no longer alive; any stray entry there, and the whole legacy
101
+ * root, are swept by age instead. The collaborators are parameters so the
102
+ * destructive sweep is testable against a throwaway root.
103
+ */
104
+ export declare function reapBundles(opts: {
105
+ root: string;
106
+ legacyRoots: readonly string[];
107
+ isPidAlive: (pid: number) => boolean;
108
+ now: number;
109
+ legacyMaxAgeMs: number;
110
+ }): void;
111
+ /**
112
+ * Reap bundle directories left behind by sessions that are no longer
113
+ * running. Safe to call at session start; it never touches a live
114
+ * session's directory.
115
+ */
116
+ export declare function reapAbandonedBundles(): void;
117
+ /** Remove this session's bundle directory. Call at session shutdown. */
118
+ export declare function cleanupSessionBundles(): void;
119
+ /**
120
+ * Navigate a prepared page and capture every representation from one
121
+ * settled state: DOM, inner text, article and screenshot tiles. Relative
122
+ * links resolve against the final redirected URL, and a missing document
123
+ * body falls back to the document text so non-HTML pages still yield a
124
+ * capture. Cancellation is honoured between the expensive steps.
125
+ */
126
+ export declare function capturePage(page: Page, url: string, signal?: AbortSignal, deps?: CaptureDeps): Promise<Captured>;
127
+ /**
128
+ * Fetch a URL and capture it as a bundle of representations on disk:
129
+ * article markdown, rendered inner text, DOM and screenshot tiles.
130
+ */
131
+ export declare function readPage(url: string, signal?: AbortSignal): Promise<PageBundle>;
@@ -0,0 +1,340 @@
1
+ /**
2
+ * Page reader: fetches a URL with headless Chrome and captures it as a
3
+ * bundle of representations the model can pick and choose from.
4
+ *
5
+ * Every read settles the page once (capture-width viewport, dynamic-content
6
+ * wait, lazy-content scroll) and then snapshots article markdown (via
7
+ * defuddle), the rendered inner text, the DOM and a bounded stack of
8
+ * screenshot tiles from that one state. Artifacts are written to a private,
9
+ * per-session directory keyed by process id, so a crashed session's
10
+ * captures can be reaped without touching a live one. The caller turns the
11
+ * returned paths into a pointer manifest so the model opens only what it
12
+ * needs.
13
+ */
14
+ import * as fs from "node:fs";
15
+ import * as path from "node:path";
16
+ import { Defuddle } from "defuddle/node";
17
+ import { JSDOM, VirtualConsole } from "jsdom";
18
+ import { isPidAlive, newPage } from "./browser.js";
19
+ import { injectCookies, isSetUp } from "./cookies/index.js";
20
+ import { BUNDLE_ROOT, diskSink, LEGACY_BUNDLE_ROOTS, sessionDir, } from "./envelope/sink.js";
21
+ import { captureTiles, preparePage } from "./screenshot.js";
22
+ /**
23
+ * Thrown when a page redirects to an auth provider and Chrome
24
+ * cookie injection hasn't been set up yet.
25
+ */
26
+ export class AuthSetupNeeded extends Error {
27
+ constructor() {
28
+ super("This page requires authentication. Ask the user to run " +
29
+ "Chrome cookie setup to enable access using their Chrome " +
30
+ "browser sessions, then retry.");
31
+ this.name = "AuthSetupNeeded";
32
+ }
33
+ }
34
+ /** Timeout for page navigation in milliseconds. */
35
+ const PAGE_LOAD_TIMEOUT = 20_000;
36
+ /** Wait time for dynamic content to render after load. */
37
+ const DYNAMIC_CONTENT_WAIT = 1_500;
38
+ /** Characters of the best available text used for the inline excerpt. */
39
+ const EXCERPT_LENGTH = 500;
40
+ /** Below this word count we treat defuddle's article as empty and skip it. */
41
+ const MIN_ARTICLE_WORDS = 30;
42
+ /** Upper bound on the page-controlled title we carry inline. */
43
+ const MAX_TITLE_LENGTH = 300;
44
+ /**
45
+ * Upper bound on any single text artifact written to disk. Generous enough
46
+ * that real pages are never touched, but it caps a pathological page so it
47
+ * cannot fill the disk. When it bites, the file says so in-band rather than
48
+ * ending silently.
49
+ */
50
+ const MAX_ARTIFACT_CHARS = 5_000_000;
51
+ /** Age past which a legacy bundle directory is reaped. */
52
+ const LEGACY_MAX_AGE_MS = 6 * 60 * 60 * 1_000;
53
+ /** URL fragments that mark a redirect to an auth provider. */
54
+ const AUTH_URL_MARKERS = [
55
+ "accounts.google.com",
56
+ "/oauth",
57
+ "/login",
58
+ "/signin",
59
+ "/auth",
60
+ ];
61
+ /**
62
+ * Lines matching these patterns are stripped from the rendered inner
63
+ * text after extraction.
64
+ */
65
+ const BOILERPLATE_PATTERNS = [
66
+ /^advertisement$/i,
67
+ /^ad$/i,
68
+ /^sponsored$/i,
69
+ /^continue reading/i,
70
+ /^read more$/i,
71
+ /^see also:?$/i,
72
+ /^related:?$/i,
73
+ /^share this/i,
74
+ /^follow us/i,
75
+ /^sign up for/i,
76
+ /^subscribe to/i,
77
+ /^newsletter/i,
78
+ /^click here/i,
79
+ ];
80
+ /** True when a final URL indicates a redirect to an auth provider. */
81
+ export function isAuthRedirect(url) {
82
+ return AUTH_URL_MARKERS.some((marker) => url.includes(marker));
83
+ }
84
+ /** Collapse a page-controlled string to a single trimmed line. */
85
+ function oneLine(text) {
86
+ return text.replace(/\s+/g, " ").trim();
87
+ }
88
+ /**
89
+ * Cap a text artifact at the size bound, appending a visible marker when it
90
+ * bites so a reader never mistakes a cut-off file for a complete one.
91
+ */
92
+ function capArtifact(content) {
93
+ if (content.length <= MAX_ARTIFACT_CHARS)
94
+ return content;
95
+ return `${content.slice(0, MAX_ARTIFACT_CHARS)}\n\n[truncated at ${MAX_ARTIFACT_CHARS} characters]`;
96
+ }
97
+ /**
98
+ * Assemble a bundle from captured representations by writing each one
99
+ * through the sink. The DOM is always written; the article and inner text
100
+ * are written only when present; every screenshot tile gets an ordered,
101
+ * zero-padded name. Text is capped with a visible marker, and the
102
+ * page-controlled title and excerpt are flattened to a single line so they
103
+ * cannot impersonate the manifest's own structure.
104
+ */
105
+ export function assembleBundle(captured, sink) {
106
+ const title = oneLine(captured.title).slice(0, MAX_TITLE_LENGTH);
107
+ const body = captured.article?.markdown || captured.innerText;
108
+ const excerpt = oneLine(body).slice(0, EXCERPT_LENGTH);
109
+ const articlePath = captured.article
110
+ ? sink.writeText("article.md", capArtifact(`# ${title}\n\nSource: ${captured.url}\n\n${captured.article.markdown}`))
111
+ : undefined;
112
+ const innerTextPath = captured.innerText
113
+ ? sink.writeText("innertext.txt", capArtifact(captured.innerText))
114
+ : undefined;
115
+ const domPath = sink.writeText("dom.html", capArtifact(captured.html));
116
+ const screenshotPaths = captured.tiles.map((data, i) => sink.writeBinary(`shot-${String(i + 1).padStart(2, "0")}.png`, data));
117
+ return {
118
+ title,
119
+ url: captured.url,
120
+ excerpt,
121
+ dir: sink.dir,
122
+ articlePath,
123
+ innerTextPath,
124
+ domPath,
125
+ screenshotPaths,
126
+ truncated: captured.truncated,
127
+ };
128
+ }
129
+ /** Clean extracted text: collapse whitespace, strip boilerplate lines. */
130
+ function cleanText(text) {
131
+ return text
132
+ .split("\n")
133
+ .map((line) => line.trimEnd())
134
+ .filter((line) => {
135
+ const trimmed = line.trim();
136
+ if (!trimmed)
137
+ return true;
138
+ return !BOILERPLATE_PATTERNS.some((p) => p.test(trimmed));
139
+ })
140
+ .join("\n")
141
+ .replace(/\n{3,}/g, "\n\n")
142
+ .trim();
143
+ }
144
+ /**
145
+ * Create a jsdom VirtualConsole that suppresses CSS parse warnings
146
+ * without affecting process.stderr globally.
147
+ */
148
+ function quietVirtualConsole() {
149
+ const vc = new VirtualConsole();
150
+ vc.on("error", (msg) => {
151
+ if (!msg.includes("Could not parse CSS stylesheet")) {
152
+ console.error(msg);
153
+ }
154
+ });
155
+ vc.on("warn", console.warn);
156
+ vc.on("info", console.info);
157
+ return vc;
158
+ }
159
+ /**
160
+ * Run defuddle over the page HTML to extract the main content as markdown,
161
+ * resolving relative links against the final URL. Returns null when
162
+ * defuddle throws or finds too little to be a real article.
163
+ */
164
+ async function extractArticle(html, url) {
165
+ try {
166
+ const dom = new JSDOM(html, { url, virtualConsole: quietVirtualConsole() });
167
+ const result = await Defuddle(dom.window.document, url, {
168
+ markdown: true,
169
+ useAsync: false,
170
+ });
171
+ if (!result || result.wordCount < MIN_ARTICLE_WORDS)
172
+ return null;
173
+ return {
174
+ markdown: result.contentMarkdown ?? result.content ?? "",
175
+ title: result.title ?? "",
176
+ wordCount: result.wordCount,
177
+ };
178
+ }
179
+ catch {
180
+ // Defuddle or JSDOM threw (e.g., CSS parse errors on a hostile
181
+ // page). Article extraction is optional; the bundle still has the
182
+ // inner text, DOM and screenshots, so we report no article.
183
+ return null;
184
+ }
185
+ }
186
+ export { diskSink } from "./envelope/sink.js";
187
+ /** True when a directory's mtime is older than the given age. */
188
+ function olderThan(dir, now, maxAgeMs) {
189
+ try {
190
+ return now - fs.statSync(dir).mtimeMs > maxAgeMs;
191
+ }
192
+ catch {
193
+ // The directory vanished under us; treat it as not stale.
194
+ return false;
195
+ }
196
+ }
197
+ /** Remove immediate subdirectories of `root` for which `stale` returns true. */
198
+ function reapDir(root, stale) {
199
+ let entries;
200
+ try {
201
+ entries = fs.readdirSync(root, { withFileTypes: true });
202
+ }
203
+ catch {
204
+ // The root does not exist, so there is nothing to reap.
205
+ return;
206
+ }
207
+ for (const entry of entries) {
208
+ if (!entry.isDirectory())
209
+ continue;
210
+ const dir = path.join(root, entry.name);
211
+ try {
212
+ if (stale(dir, entry.name))
213
+ fs.rmSync(dir, { recursive: true, force: true });
214
+ }
215
+ catch {
216
+ // The directory vanished under us or is unreadable; skip it.
217
+ }
218
+ }
219
+ }
220
+ /**
221
+ * Reap bundle directories that no live session owns. The current root is
222
+ * keyed by process id, so a pid-named directory is abandoned exactly when
223
+ * its pid is no longer alive; any stray entry there, and the whole legacy
224
+ * root, are swept by age instead. The collaborators are parameters so the
225
+ * destructive sweep is testable against a throwaway root.
226
+ */
227
+ export function reapBundles(opts) {
228
+ reapDir(opts.root, (dir, name) => {
229
+ const pid = Number(name);
230
+ // A pid-named dir is abandoned when its process is gone; any other
231
+ // entry (e.g. from an older layout) has no owner, so fall back to age.
232
+ return Number.isInteger(pid)
233
+ ? !opts.isPidAlive(pid)
234
+ : olderThan(dir, opts.now, opts.legacyMaxAgeMs);
235
+ });
236
+ for (const legacy of opts.legacyRoots) {
237
+ // By age rather than by pid, even where the old layout named its
238
+ // directories after one: nothing writes here any more, so an
239
+ // entry whose pid happens to be alive again belongs to an
240
+ // unrelated process that reused the number.
241
+ reapDir(legacy, (dir) => olderThan(dir, opts.now, opts.legacyMaxAgeMs));
242
+ }
243
+ }
244
+ /**
245
+ * Reap bundle directories left behind by sessions that are no longer
246
+ * running. Safe to call at session start; it never touches a live
247
+ * session's directory.
248
+ */
249
+ export function reapAbandonedBundles() {
250
+ reapBundles({
251
+ root: BUNDLE_ROOT,
252
+ legacyRoots: LEGACY_BUNDLE_ROOTS,
253
+ isPidAlive,
254
+ now: Date.now(),
255
+ legacyMaxAgeMs: LEGACY_MAX_AGE_MS,
256
+ });
257
+ }
258
+ /** Remove this session's bundle directory. Call at session shutdown. */
259
+ export function cleanupSessionBundles() {
260
+ try {
261
+ fs.rmSync(sessionDir(), { recursive: true, force: true });
262
+ }
263
+ catch {
264
+ // Best-effort cleanup; the reaper reclaims it later if this fails.
265
+ }
266
+ }
267
+ /** Throw if the operation has been cancelled. */
268
+ function throwIfAborted(signal) {
269
+ if (signal?.aborted)
270
+ throw new Error("Aborted");
271
+ }
272
+ const defaultCaptureDeps = {
273
+ preparePage,
274
+ captureTiles,
275
+ extractArticle,
276
+ };
277
+ /**
278
+ * Navigate a prepared page and capture every representation from one
279
+ * settled state: DOM, inner text, article and screenshot tiles. Relative
280
+ * links resolve against the final redirected URL, and a missing document
281
+ * body falls back to the document text so non-HTML pages still yield a
282
+ * capture. Cancellation is honoured between the expensive steps.
283
+ */
284
+ export async function capturePage(page, url, signal, deps = defaultCaptureDeps) {
285
+ await page.goto(url, {
286
+ waitUntil: "domcontentloaded",
287
+ timeout: PAGE_LOAD_TIMEOUT,
288
+ });
289
+ throwIfAborted(signal);
290
+ await page.evaluate((ms) => new Promise((r) => setTimeout(r, ms)), DYNAMIC_CONTENT_WAIT);
291
+ const finalUrl = page.url();
292
+ if (isAuthRedirect(finalUrl) && !isSetUp()) {
293
+ throw new AuthSetupNeeded();
294
+ }
295
+ throwIfAborted(signal);
296
+ // Settle the page once so text, DOM and screenshots agree on one state.
297
+ await deps.preparePage(page);
298
+ const html = await page.content();
299
+ const rendered = cleanText(await page.evaluate(() => document.body?.innerText ?? document.documentElement?.textContent ?? ""));
300
+ const article = await deps.extractArticle(html, finalUrl);
301
+ const title = article?.title || (await page.title());
302
+ throwIfAborted(signal);
303
+ // Screenshots are always captured so a text-only bundle still carries a
304
+ // visual representation the model can fall back to.
305
+ const { tiles, truncated } = await deps.captureTiles(page);
306
+ throwIfAborted(signal);
307
+ return {
308
+ url: finalUrl,
309
+ title,
310
+ html,
311
+ innerText: rendered,
312
+ article,
313
+ tiles,
314
+ truncated,
315
+ };
316
+ }
317
+ /**
318
+ * Fetch a URL and capture it as a bundle of representations on disk:
319
+ * article markdown, rendered inner text, DOM and screenshot tiles.
320
+ */
321
+ export async function readPage(url, signal) {
322
+ const page = await newPage();
323
+ try {
324
+ throwIfAborted(signal);
325
+ await injectCookies(page, url);
326
+ const captured = await capturePage(page, url, signal);
327
+ const sink = diskSink();
328
+ try {
329
+ return assembleBundle(captured, sink);
330
+ }
331
+ catch (err) {
332
+ // Don't leave a half-written bundle behind on a failed assembly.
333
+ fs.rmSync(sink.dir, { recursive: true, force: true });
334
+ throw err;
335
+ }
336
+ }
337
+ finally {
338
+ await page.close();
339
+ }
340
+ }
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Bounded, tiled screenshot capture.
3
+ *
4
+ * `preparePage` settles the page (capture-width viewport, lazy-content
5
+ * scroll) so every representation is read from one state. `captureTiles`
6
+ * then captures the page as an ordered stack of vertical bands rather than
7
+ * one full-page image. Each band stays under the model provider's image
8
+ * dimension limit, so a long page can never produce an image the model
9
+ * rejects. A page taller than the tile budget is truncated and the caller
10
+ * is told.
11
+ */
12
+ import type { Page } from "puppeteer-core";
13
+ /** A vertical slice of the page to capture, in page pixels. */
14
+ export interface TileBand {
15
+ y: number;
16
+ height: number;
17
+ }
18
+ /** An ordered set of clip bands covering a page, with a truncation flag. */
19
+ export interface TilePlan {
20
+ bands: TileBand[];
21
+ truncated: boolean;
22
+ }
23
+ /**
24
+ * Plan the vertical clip bands that tile a page of the given height. No
25
+ * band exceeds `bandHeight`, and the plan stops at `maxTiles`, reporting
26
+ * `truncated` when the page runs past the tile budget.
27
+ */
28
+ export declare function planTiles(pageHeight: number, opts: {
29
+ bandHeight: number;
30
+ maxTiles: number;
31
+ }): TilePlan;
32
+ /** A tiled capture: ordered base64 PNGs plus whether the page overran the budget. */
33
+ export interface TiledCapture {
34
+ tiles: string[];
35
+ truncated: boolean;
36
+ }
37
+ /**
38
+ * Settle the page into the state every representation is captured from:
39
+ * fix the viewport to the capture width, then scroll to the bottom so
40
+ * lazy-loaded content renders, returning to the top. Call this once before
41
+ * reading the DOM, inner text or screenshots so they all agree.
42
+ */
43
+ export declare function preparePage(page: Page): Promise<void>;
44
+ /**
45
+ * Capture the page as an ordered stack of PNG tiles, each a base64 string,
46
+ * by clipping successive vertical bands planned by `planTiles`. No tile
47
+ * exceeds the band height, and the capture stops at the tile ceiling.
48
+ * Assumes `preparePage` has already settled the viewport and lazy content.
49
+ */
50
+ export declare function captureTiles(page: Page): Promise<TiledCapture>;