@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,221 @@
1
+ /**
2
+ * The durable record of which pi sessions are open, which quest each
3
+ * is on, and when each was last open.
4
+ *
5
+ * This module is pure: it shapes records and answers questions about
6
+ * them. Reading and writing them, probing whether a session is still
7
+ * alive and touching the heartbeat all live in the extension's
8
+ * wiring.
9
+ */
10
+ import type { ProcessIdentity } from "./process-liveness.js";
11
+ /**
12
+ * The terminal surface a session ran in, as recorded.
13
+ *
14
+ * Leaner than a full `TerminalSessionHandle`, and deliberately the
15
+ * same shape the quest frontmatter already persists. The handle's
16
+ * `kind` is descriptive rather than probeable, and a reader
17
+ * reconstitutes it from the driver id, so storing it would only give
18
+ * two copies of one fact the chance to disagree.
19
+ */
20
+ export interface RecordedTerminal {
21
+ driverId: string;
22
+ value: string;
23
+ scope?: string;
24
+ hostId?: string;
25
+ }
26
+ /** One pi session, as recorded by the process that owns it. */
27
+ export interface SessionRecord {
28
+ sessionId: string;
29
+ /** The pi process the session ran in; a tab's sessions share it. */
30
+ instanceId: string;
31
+ cwd: string;
32
+ /** The quest the session is on now, absent once it has unloaded. */
33
+ quest?: string;
34
+ /**
35
+ * Quests the session has since left, each against the moment it
36
+ * left. A quest reads its own entry here rather than the session's
37
+ * overall recency, so it dates a session by when it was last doing
38
+ * that quest's work.
39
+ */
40
+ previousQuests?: Record<string, string>;
41
+ process?: ProcessIdentity;
42
+ terminal?: RecordedTerminal;
43
+ /**
44
+ * True when the registry adopted this session rather than opening
45
+ * it: a tab that was already running before the registry existed.
46
+ * Its own process has no shutdown hook, so nothing it does can
47
+ * stamp the record, and its disappearance is not evidence of a
48
+ * crash.
49
+ */
50
+ adopted?: true;
51
+ openedAt: string;
52
+ closedAt?: string;
53
+ /** Why the session ended; absent while it is still running. */
54
+ endReason?: SessionEndReason;
55
+ }
56
+ /**
57
+ * How a session ended. `quit` means the pi process exited and took
58
+ * its tab with it. `swapped` means the conversation was replaced
59
+ * inside a tab that is still on screen, which is what a reload, a
60
+ * session switch and a fork all do. `died` means no process recorded
61
+ * an ending at all and a later reader found it gone, which is what a
62
+ * crash looks like from the outside.
63
+ */
64
+ /**
65
+ * Why a session's record stopped being open.
66
+ *
67
+ * `quit` and `swapped` are stamped by the session itself. `died` and
68
+ * `vanished` are written by a later reader that found the process
69
+ * gone, and the difference between them is whether anyone was ever in
70
+ * a position to see it close: a session that opened its own record
71
+ * had a shutdown hook and failing to use it means it was taken away,
72
+ * while a session the registry merely adopted never had one, so its
73
+ * disappearance says nothing about how it ended.
74
+ */
75
+ export type SessionEndReason = "quit" | "swapped" | "died" | "vanished";
76
+ /** What a caller knows when a session first loads a quest. */
77
+ export interface OpenInput {
78
+ sessionId: string;
79
+ instanceId: string;
80
+ cwd: string;
81
+ questId?: string;
82
+ process?: ProcessIdentity;
83
+ terminal?: RecordedTerminal;
84
+ /** True when adopting a tab that was running before the registry. */
85
+ adopted?: true;
86
+ now: Date;
87
+ }
88
+ /**
89
+ * Mint a record for a session that has just loaded a quest. Identity
90
+ * a session could not capture is left off the record entirely rather
91
+ * than stored empty, because the readers treat an absent dimension as
92
+ * "cannot say" and an empty one would read as a mismatch.
93
+ */
94
+ export declare function openRecord(input: OpenInput): SessionRecord;
95
+ export declare function parseSessionRecord(value: unknown): SessionRecord | undefined;
96
+ /**
97
+ * Split records into those worth keeping and those old enough to
98
+ * forget. Only a session we can prove ended is ever forgotten: a
99
+ * record with no close stamp is either still running or crashed and
100
+ * not yet repaired, and dropping it would lose a tab that could still
101
+ * have been reopened. That makes the reader-side repair, which stamps
102
+ * a record whose process a probe found gone, the thing that lets this
103
+ * window ever apply.
104
+ */
105
+ export declare function pruneRecords(records: readonly SessionRecord[], opts: {
106
+ now: Date;
107
+ retentionDays: number;
108
+ }): {
109
+ kept: SessionRecord[];
110
+ dropped: SessionRecord[];
111
+ };
112
+ /**
113
+ * Move a session to a different quest, or to none, stamping the quest
114
+ * it is leaving with the moment it left. Returning to a quest clears
115
+ * its old departure, since it is current again and the record should
116
+ * not claim it both is and was.
117
+ */
118
+ export declare function switchQuest(record: SessionRecord, questId: string | undefined, now: Date): SessionRecord;
119
+ /**
120
+ * When a session was last open on one particular quest, or undefined
121
+ * when it was never on it.
122
+ *
123
+ * The quest it is on now is dated by the session itself, so a live
124
+ * session reads as open. A quest it has left is dated by the leaving,
125
+ * which is what stops a still-running session from making every quest
126
+ * it ever touched look current.
127
+ */
128
+ export declare function lastOpenOnQuest(record: SessionRecord, questId: string, observation: RecordObservation, now: Date): LastOpen | undefined;
129
+ /** What a reader observed about a record when it looked. */
130
+ export interface RecordObservation {
131
+ /** Whether a probe found the session open right now. */
132
+ live: boolean;
133
+ /** When the record was last touched, as an ISO string. */
134
+ heartbeatAt?: string;
135
+ }
136
+ /** When a session was last open, and whether we can be exact. */
137
+ export interface LastOpen {
138
+ at: string;
139
+ exact: boolean;
140
+ }
141
+ /**
142
+ * When a session was last open.
143
+ *
144
+ * Three sources, in descending order of how much they can be
145
+ * trusted. A probe that found the session alive means it is open now.
146
+ * A close stamp is the moment its own process recorded it ending, and
147
+ * outranks the heartbeat because the record is touched as the process
148
+ * winds down, so an mtime a moment past the close is normal. Anything
149
+ * else died without saying so, and the last time we saw it alive is
150
+ * the best answer there is, flagged as approximate.
151
+ *
152
+ * A close a reader wrote after finding the process gone carries the
153
+ * same shape but not the same authority, so it reports approximate
154
+ * too: nobody watched that session end.
155
+ *
156
+ * Deliberately not a source: how recently the session's log was
157
+ * written. That measures when someone last typed, which is the thing
158
+ * this whole record exists to stop standing in for being open.
159
+ */
160
+ export declare function lastOpenAt(record: SessionRecord, observation: RecordObservation, now: Date): LastOpen;
161
+ /**
162
+ * Stamp a record as ended. Closing an already-closed record leaves it
163
+ * alone: a late heartbeat or a second shutdown must not move the
164
+ * moment the session actually ended, which is the timestamp every
165
+ * recency ordering is built on.
166
+ */
167
+ /**
168
+ * A runnable line per session, to be pasted into a shell.
169
+ *
170
+ * Everything interpolated is quoted, because all of it comes from
171
+ * disk: a working directory is whatever the filesystem allows, and a
172
+ * record can be hand-edited. A line the user is invited to paste is
173
+ * not the place to trust either.
174
+ */
175
+ export declare function restoreRecipe(records: readonly SessionRecord[]): string[];
176
+ /**
177
+ * Wrap a value in single quotes for safe shell interpolation. An
178
+ * embedded single quote is closed, escaped and reopened (`'\''`), the
179
+ * standard POSIX idiom, so the value cannot break out of the quoting.
180
+ */
181
+ export declare function shellSingleQuote(value: string): string;
182
+ /**
183
+ * The sessions worth offering back, most recently lost first.
184
+ *
185
+ * Only a session that ended without anyone asking qualifies. Quitting
186
+ * a tab is an instruction rather than an accident, and a swap
187
+ * replaced the conversation in a tab that is still on screen, so
188
+ * neither leaves anything to bring back. Offering those anyway is how
189
+ * restore came to propose tabs nobody had lost, which taught people
190
+ * to distrust the whole list.
191
+ *
192
+ * A session still in the open set is either running or waiting for a
193
+ * reader to notice it is not. Either way it is not yet known to be
194
+ * lost, and a reader that probes it settles the question before this
195
+ * is asked.
196
+ */
197
+ export declare function restorable(records: readonly SessionRecord[]): SessionRecord[];
198
+ /**
199
+ * Put a closed record back in the open set, under the identity of the
200
+ * process that has resumed it.
201
+ *
202
+ * Restore offers back the sessions that died. One the user has
203
+ * already brought back has to stop being offered, and the only thing
204
+ * that says so is its record rejoining the open set.
205
+ *
206
+ * The new identity replaces the old rather than merging with it. The
207
+ * recorded pid belongs to a process that is gone, and after a reboot
208
+ * to whatever inherited the number, so probing it would answer about
209
+ * a stranger. Where the resuming process could not capture an
210
+ * identity the field is dropped for the same reason: absent reads as
211
+ * cannot say, which is true, while a stale value reads as fact.
212
+ *
213
+ * The opening moment stays put. Resuming continues a session rather
214
+ * than starting one.
215
+ */
216
+ export declare function reopenRecord(record: SessionRecord, input: {
217
+ instanceId: string;
218
+ process?: ProcessIdentity;
219
+ terminal?: RecordedTerminal;
220
+ }): SessionRecord;
221
+ export declare function closeRecord(record: SessionRecord, reason: SessionEndReason, now: Date): SessionRecord;
@@ -0,0 +1,266 @@
1
+ /**
2
+ * The durable record of which pi sessions are open, which quest each
3
+ * is on, and when each was last open.
4
+ *
5
+ * This module is pure: it shapes records and answers questions about
6
+ * them. Reading and writing them, probing whether a session is still
7
+ * alive and touching the heartbeat all live in the extension's
8
+ * wiring.
9
+ */
10
+ /**
11
+ * Mint a record for a session that has just loaded a quest. Identity
12
+ * a session could not capture is left off the record entirely rather
13
+ * than stored empty, because the readers treat an absent dimension as
14
+ * "cannot say" and an empty one would read as a mismatch.
15
+ */
16
+ export function openRecord(input) {
17
+ return {
18
+ sessionId: input.sessionId,
19
+ instanceId: input.instanceId,
20
+ cwd: input.cwd,
21
+ ...(input.questId ? { quest: input.questId } : {}),
22
+ ...(input.process ? { process: input.process } : {}),
23
+ ...(input.terminal ? { terminal: input.terminal } : {}),
24
+ ...(input.adopted ? { adopted: input.adopted } : {}),
25
+ openedAt: input.now.toISOString(),
26
+ };
27
+ }
28
+ /** The end reasons a reader is willing to act on. */
29
+ const END_REASONS = ["quit", "swapped", "died", "vanished"];
30
+ /**
31
+ * Read a stored value back as a record, or refuse it.
32
+ *
33
+ * A record decides whether a tab is offered back to the user, so a
34
+ * file that has been hand-edited, half-written or produced by a newer
35
+ * version is skipped rather than half-believed. Refusing costs one
36
+ * forgotten session; trusting a malformed one can hide a recoverable
37
+ * tab or resurrect a closed one.
38
+ */
39
+ /**
40
+ * What a session id may contain: the shape pi's own ids take, which
41
+ * is also the shape that is safe as a file name and as a shell word.
42
+ */
43
+ const SAFE_SESSION_ID = /^[A-Za-z0-9._-]+$/;
44
+ export function parseSessionRecord(value) {
45
+ if (typeof value !== "object" || value === null)
46
+ return undefined;
47
+ const v = value;
48
+ const required = [v.sessionId, v.instanceId, v.cwd, v.openedAt];
49
+ if (!required.every((field) => typeof field === "string" && field !== "")) {
50
+ return undefined;
51
+ }
52
+ // Restore resumes a session by typing its id into a live shell, and
53
+ // a record is just a file, so anything that can write one could
54
+ // otherwise reach the terminal through it. Refuse here rather than
55
+ // escaping downstream: an id that is not an identifier is not a
56
+ // record, and one check at the door beats remembering to quote at
57
+ // every use. The same shape keeps the id usable as a file name.
58
+ if (!SAFE_SESSION_ID.test(v.sessionId))
59
+ return undefined;
60
+ if (v.adopted !== undefined && v.adopted !== true)
61
+ return undefined;
62
+ if (v.quest !== undefined && typeof v.quest !== "string")
63
+ return undefined;
64
+ if (v.closedAt !== undefined && typeof v.closedAt !== "string") {
65
+ return undefined;
66
+ }
67
+ if (v.endReason !== undefined &&
68
+ !END_REASONS.includes(v.endReason)) {
69
+ return undefined;
70
+ }
71
+ if (v.previousQuests !== undefined && !isStringMap(v.previousQuests)) {
72
+ return undefined;
73
+ }
74
+ return value;
75
+ }
76
+ /** Whether a value is a flat object of string values. */
77
+ function isStringMap(value) {
78
+ if (typeof value !== "object" || value === null || Array.isArray(value)) {
79
+ return false;
80
+ }
81
+ return Object.values(value).every((entry) => typeof entry === "string");
82
+ }
83
+ /** Milliseconds in a day, for the retention window. */
84
+ const DAY_MS = 24 * 60 * 60 * 1000;
85
+ /**
86
+ * Split records into those worth keeping and those old enough to
87
+ * forget. Only a session we can prove ended is ever forgotten: a
88
+ * record with no close stamp is either still running or crashed and
89
+ * not yet repaired, and dropping it would lose a tab that could still
90
+ * have been reopened. That makes the reader-side repair, which stamps
91
+ * a record whose process a probe found gone, the thing that lets this
92
+ * window ever apply.
93
+ */
94
+ export function pruneRecords(records, opts) {
95
+ const cutoff = opts.now.getTime() - opts.retentionDays * DAY_MS;
96
+ const kept = [];
97
+ const dropped = [];
98
+ for (const record of records) {
99
+ const closed = record.closedAt ? Date.parse(record.closedAt) : undefined;
100
+ if (closed !== undefined && !Number.isNaN(closed) && closed < cutoff) {
101
+ dropped.push(record);
102
+ }
103
+ else {
104
+ kept.push(record);
105
+ }
106
+ }
107
+ return { kept, dropped };
108
+ }
109
+ /**
110
+ * Move a session to a different quest, or to none, stamping the quest
111
+ * it is leaving with the moment it left. Returning to a quest clears
112
+ * its old departure, since it is current again and the record should
113
+ * not claim it both is and was.
114
+ */
115
+ export function switchQuest(record, questId, now) {
116
+ if (record.quest === questId)
117
+ return record;
118
+ const previous = { ...record.previousQuests };
119
+ if (record.quest)
120
+ previous[record.quest] = now.toISOString();
121
+ if (questId)
122
+ delete previous[questId];
123
+ const next = { ...record };
124
+ if (questId)
125
+ next.quest = questId;
126
+ else
127
+ delete next.quest;
128
+ if (Object.keys(previous).length > 0)
129
+ next.previousQuests = previous;
130
+ else
131
+ delete next.previousQuests;
132
+ return next;
133
+ }
134
+ /**
135
+ * When a session was last open on one particular quest, or undefined
136
+ * when it was never on it.
137
+ *
138
+ * The quest it is on now is dated by the session itself, so a live
139
+ * session reads as open. A quest it has left is dated by the leaving,
140
+ * which is what stops a still-running session from making every quest
141
+ * it ever touched look current.
142
+ */
143
+ export function lastOpenOnQuest(record, questId, observation, now) {
144
+ if (record.quest === questId)
145
+ return lastOpenAt(record, observation, now);
146
+ const left = record.previousQuests?.[questId];
147
+ return left ? { at: left, exact: true } : undefined;
148
+ }
149
+ /**
150
+ * When a session was last open.
151
+ *
152
+ * Three sources, in descending order of how much they can be
153
+ * trusted. A probe that found the session alive means it is open now.
154
+ * A close stamp is the moment its own process recorded it ending, and
155
+ * outranks the heartbeat because the record is touched as the process
156
+ * winds down, so an mtime a moment past the close is normal. Anything
157
+ * else died without saying so, and the last time we saw it alive is
158
+ * the best answer there is, flagged as approximate.
159
+ *
160
+ * A close a reader wrote after finding the process gone carries the
161
+ * same shape but not the same authority, so it reports approximate
162
+ * too: nobody watched that session end.
163
+ *
164
+ * Deliberately not a source: how recently the session's log was
165
+ * written. That measures when someone last typed, which is the thing
166
+ * this whole record exists to stop standing in for being open.
167
+ */
168
+ export function lastOpenAt(record, observation, now) {
169
+ if (observation.live)
170
+ return { at: now.toISOString(), exact: true };
171
+ if (record.closedAt) {
172
+ return { at: record.closedAt, exact: record.endReason !== "died" };
173
+ }
174
+ return { at: observation.heartbeatAt ?? record.openedAt, exact: false };
175
+ }
176
+ /**
177
+ * Stamp a record as ended. Closing an already-closed record leaves it
178
+ * alone: a late heartbeat or a second shutdown must not move the
179
+ * moment the session actually ended, which is the timestamp every
180
+ * recency ordering is built on.
181
+ */
182
+ /**
183
+ * A runnable line per session, to be pasted into a shell.
184
+ *
185
+ * Everything interpolated is quoted, because all of it comes from
186
+ * disk: a working directory is whatever the filesystem allows, and a
187
+ * record can be hand-edited. A line the user is invited to paste is
188
+ * not the place to trust either.
189
+ */
190
+ export function restoreRecipe(records) {
191
+ return records.map((record) => {
192
+ const quest = record.quest ? ` # ${commentSafe(record.quest)}` : "";
193
+ return `(cd ${shellSingleQuote(record.cwd)} && pi --session ${shellSingleQuote(record.sessionId)})${quest}`;
194
+ });
195
+ }
196
+ /**
197
+ * Wrap a value in single quotes for safe shell interpolation. An
198
+ * embedded single quote is closed, escaped and reopened (`'\''`), the
199
+ * standard POSIX idiom, so the value cannot break out of the quoting.
200
+ */
201
+ export function shellSingleQuote(value) {
202
+ return `'${value.replaceAll("'", "'\\''")}'`;
203
+ }
204
+ /**
205
+ * Flatten a value for a trailing shell comment. A newline would end
206
+ * the comment and turn the rest of the recipe into a live command, so
207
+ * control characters are collapsed to a space.
208
+ */
209
+ function commentSafe(value) {
210
+ return value.replace(/[\r\n]+/g, " ").trim();
211
+ }
212
+ /**
213
+ * The sessions worth offering back, most recently lost first.
214
+ *
215
+ * Only a session that ended without anyone asking qualifies. Quitting
216
+ * a tab is an instruction rather than an accident, and a swap
217
+ * replaced the conversation in a tab that is still on screen, so
218
+ * neither leaves anything to bring back. Offering those anyway is how
219
+ * restore came to propose tabs nobody had lost, which taught people
220
+ * to distrust the whole list.
221
+ *
222
+ * A session still in the open set is either running or waiting for a
223
+ * reader to notice it is not. Either way it is not yet known to be
224
+ * lost, and a reader that probes it settles the question before this
225
+ * is asked.
226
+ */
227
+ export function restorable(records) {
228
+ return records
229
+ .filter((record) => record.endReason === "died" && record.closedAt)
230
+ .sort((a, b) => (b.closedAt ?? "").localeCompare(a.closedAt ?? ""));
231
+ }
232
+ /**
233
+ * Put a closed record back in the open set, under the identity of the
234
+ * process that has resumed it.
235
+ *
236
+ * Restore offers back the sessions that died. One the user has
237
+ * already brought back has to stop being offered, and the only thing
238
+ * that says so is its record rejoining the open set.
239
+ *
240
+ * The new identity replaces the old rather than merging with it. The
241
+ * recorded pid belongs to a process that is gone, and after a reboot
242
+ * to whatever inherited the number, so probing it would answer about
243
+ * a stranger. Where the resuming process could not capture an
244
+ * identity the field is dropped for the same reason: absent reads as
245
+ * cannot say, which is true, while a stale value reads as fact.
246
+ *
247
+ * The opening moment stays put. Resuming continues a session rather
248
+ * than starting one.
249
+ */
250
+ export function reopenRecord(record, input) {
251
+ // `adopted` goes with the rest: a session being resumed is running
252
+ // a process that keeps this registry, so from here it has a
253
+ // shutdown hook and owns its own ending.
254
+ const { closedAt, endReason, process, terminal, adopted, ...rest } = record;
255
+ return {
256
+ ...rest,
257
+ instanceId: input.instanceId,
258
+ ...(input.process ? { process: input.process } : {}),
259
+ ...(input.terminal ? { terminal: input.terminal } : {}),
260
+ };
261
+ }
262
+ export function closeRecord(record, reason, now) {
263
+ if (record.closedAt)
264
+ return record;
265
+ return { ...record, closedAt: now.toISOString(), endReason: reason };
266
+ }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Quest status liveness, in one place so every reader agrees on what
3
+ * "sealed" means. A sealed quest (concluded or retired) is finished:
4
+ * it sorts after live work, is excluded from reorders, and drops its
5
+ * live priority on the seal cascade.
6
+ */
7
+ /** True when the status marks a finished quest (concluded or retired). */
8
+ export declare function isSealedStatus(status: string | undefined): boolean;
9
+ /** True when the quest is still live (any status that is not sealed). */
10
+ export declare function isLiveStatus(status: string | undefined): boolean;
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Quest status liveness, in one place so every reader agrees on what
3
+ * "sealed" means. A sealed quest (concluded or retired) is finished:
4
+ * it sorts after live work, is excluded from reorders, and drops its
5
+ * live priority on the seal cascade.
6
+ */
7
+ const SEALED_STATUSES = new Set(["concluded", "retired"]);
8
+ /** True when the status marks a finished quest (concluded or retired). */
9
+ export function isSealedStatus(status) {
10
+ return status !== undefined && SEALED_STATUSES.has(status);
11
+ }
12
+ /** True when the quest is still live (any status that is not sealed). */
13
+ export function isLiveStatus(status) {
14
+ return !isSealedStatus(status);
15
+ }
@@ -0,0 +1,41 @@
1
+ /**
2
+ * A durable journal of applied structural edits (reparents and
3
+ * bulk status changes). Each entry records the old and new value
4
+ * per quest so an operation can be reversed. The journal is a
5
+ * JSONL file at the quests root; the most recent line is the
6
+ * newest operation.
7
+ */
8
+ /**
9
+ * A field a mutation can change, journal and reverse. Widened past
10
+ * the original parent-and-status pair so every quest field mutation
11
+ * is reversible; `stage` covers document mutations journalled the
12
+ * same way.
13
+ */
14
+ export type MutableField = "parent" | "status" | "priority" | "rank" | "kind" | "stage";
15
+ /** One quest's before-and-after for a single field. */
16
+ export interface JournalChange {
17
+ id: string;
18
+ field: MutableField;
19
+ old: string | null;
20
+ new: string | null;
21
+ }
22
+ /** A recorded structural operation. */
23
+ export interface JournalEntry {
24
+ ts: string;
25
+ op: string;
26
+ changes: JournalChange[];
27
+ }
28
+ /**
29
+ * Append an applied operation to the journal, under the same
30
+ * per-root advisory lock the README writers use, so a concurrent
31
+ * record and undo in another process cannot interleave.
32
+ */
33
+ export declare function recordStructuralOp(questsRoot: string, op: string, changes: JournalChange[]): void;
34
+ /** The most recent recorded operation, or undefined when empty. */
35
+ export declare function lastStructuralOp(questsRoot: string): JournalEntry | undefined;
36
+ /**
37
+ * Remove the most recent recorded operation. The read-modify-write
38
+ * runs under the per-root lock and rewrites through an atomic
39
+ * rename, so it cannot truncate a concurrent append or lose an op.
40
+ */
41
+ export declare function dropLastStructuralOp(questsRoot: string): void;
@@ -0,0 +1,67 @@
1
+ /**
2
+ * A durable journal of applied structural edits (reparents and
3
+ * bulk status changes). Each entry records the old and new value
4
+ * per quest so an operation can be reversed. The journal is a
5
+ * JSONL file at the quests root; the most recent line is the
6
+ * newest operation.
7
+ */
8
+ import { appendFileSync, readFileSync } from "node:fs";
9
+ import { join } from "node:path";
10
+ import { atomicWriteFile, withQuestLock } from "./io.js";
11
+ function journalPath(questsRoot) {
12
+ return join(questsRoot, ".structural-journal.jsonl");
13
+ }
14
+ /**
15
+ * Append an applied operation to the journal, under the same
16
+ * per-root advisory lock the README writers use, so a concurrent
17
+ * record and undo in another process cannot interleave.
18
+ */
19
+ export function recordStructuralOp(questsRoot, op, changes) {
20
+ const entry = { ts: new Date().toISOString(), op, changes };
21
+ withQuestLock(questsRoot, () => {
22
+ appendFileSync(journalPath(questsRoot), `${JSON.stringify(entry)}\n`, "utf8");
23
+ });
24
+ }
25
+ function readEntries(questsRoot) {
26
+ let text;
27
+ try {
28
+ text = readFileSync(journalPath(questsRoot), "utf8");
29
+ }
30
+ catch {
31
+ // No journal yet: nothing has been recorded.
32
+ return [];
33
+ }
34
+ const entries = [];
35
+ for (const line of text.split("\n")) {
36
+ const trimmed = line.trim();
37
+ if (!trimmed)
38
+ continue;
39
+ try {
40
+ entries.push(JSON.parse(trimmed));
41
+ }
42
+ catch {
43
+ // Skip a corrupt line rather than wedging undo.
44
+ }
45
+ }
46
+ return entries;
47
+ }
48
+ /** The most recent recorded operation, or undefined when empty. */
49
+ export function lastStructuralOp(questsRoot) {
50
+ const entries = readEntries(questsRoot);
51
+ return entries[entries.length - 1];
52
+ }
53
+ /**
54
+ * Remove the most recent recorded operation. The read-modify-write
55
+ * runs under the per-root lock and rewrites through an atomic
56
+ * rename, so it cannot truncate a concurrent append or lose an op.
57
+ */
58
+ export function dropLastStructuralOp(questsRoot) {
59
+ withQuestLock(questsRoot, () => {
60
+ const entries = readEntries(questsRoot);
61
+ if (entries.length === 0)
62
+ return;
63
+ entries.pop();
64
+ const body = entries.map((e) => JSON.stringify(e)).join("\n");
65
+ atomicWriteFile(journalPath(questsRoot), body.length > 0 ? `${body}\n` : "");
66
+ });
67
+ }
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Structural edits to the quest tree: reparenting and bulk
3
+ * status changes. The planners here are pure: they read an
4
+ * in-memory index and compute what would change, validating
5
+ * scope and refusing cycles, so a caller can preview before it
6
+ * writes and report exactly what moved.
7
+ */
8
+ import type { QuestIndex } from "./discovery.js";
9
+ /** A single parent change produced by {@link planReparent}. */
10
+ export interface ReparentChange {
11
+ id: string;
12
+ oldParent: string | null;
13
+ newParent: string | null;
14
+ }
15
+ /** The outcome of planning a reparent: moves plus refusals. */
16
+ export interface ReparentPlan {
17
+ changes: ReparentChange[];
18
+ errors: string[];
19
+ }
20
+ /**
21
+ * Plan the parent changes for `targetIds` against `newParent`
22
+ * without touching disk. No-op moves are dropped; missing
23
+ * quests, a missing new parent, self-parenting and cycle-forming
24
+ * moves are reported in `errors`.
25
+ */
26
+ export declare function planReparent(index: QuestIndex, targetIds: string[], newParent: string | null): ReparentPlan;
27
+ /** A single status change produced by {@link planStatusChange}. */
28
+ export interface StatusChange {
29
+ id: string;
30
+ oldStatus: string;
31
+ newStatus: string;
32
+ }
33
+ /** The outcome of planning a bulk status change. */
34
+ export interface StatusChangePlan {
35
+ changes: StatusChange[];
36
+ errors: string[];
37
+ }
38
+ /**
39
+ * Plan the status changes for `targetIds` to `newStatus` without
40
+ * touching disk. Quests already at the target status are dropped;
41
+ * missing quests are reported in `errors`.
42
+ */
43
+ export declare function planStatusChange(index: QuestIndex, targetIds: string[], newStatus: string): StatusChangePlan;