@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,900 @@
1
+ /**
2
+ * Lifecycle mutations for the quest workflow: focus, unfocus,
3
+ * document stage, journey entries, aliasing, reordering,
4
+ * priority/status/parent changes, session attach/detach.
5
+ *
6
+ * Everything here operates on a `QuestState` value and plain
7
+ * arguments, with no dependency on an adapter's own extension API
8
+ * or session log. The pi-only counterparts -- loading a quest
9
+ * (which sets pi's session name), persisting/restoring the loaded
10
+ * quest across a pi session (which reads/writes pi's own session
11
+ * log), and pruning phantom sessions against pi's session-log
12
+ * directory -- stay in agentic-harness.pi's own lifecycle.ts,
13
+ * which imports the mutations here for everything else.
14
+ */
15
+ import { existsSync, mkdirSync, readdirSync, readFileSync, } from "node:fs";
16
+ import { join } from "node:path";
17
+ import { buildAliasIndex, } from "../internal/quest/alias-index.js";
18
+ import { appendJourneyByPath } from "../internal/quest/append-journey.js";
19
+ import { nowYmd } from "../internal/quest/dates.js";
20
+ import { discoverQuests, siblingRanks, } from "../internal/quest/discovery.js";
21
+ import { explainDocumentFrontMatter } from "../internal/quest/frontmatter.js";
22
+ import { atomicWriteFile, atomicWriteUnderLock } from "../internal/quest/io.js";
23
+ import { mutateQuestFrontMatter } from "../internal/quest/mutate.js";
24
+ import { currentInstanceId, currentProcessIdentity, } from "../internal/quest/process-liveness.js";
25
+ import { diffRanks, nextRank, after as rankAfter, before as rankBefore, bottom as rankBottom, bump as rankBump, renumber as rankRenumber, sink as rankSink, top as rankTop, } from "../internal/quest/ranking.js";
26
+ import { isSealedStatus } from "../internal/quest/status.js";
27
+ import { identifyCurrentTerminal } from "../terminal/index.js";
28
+ import { checkboxProgress, documentFrontMatterProblem, parseDocumentFrontMatter, parseQuestDoc, serializeDocumentFrontMatter, } from "./index.js";
29
+ /**
30
+ * Persist the focused document's progress (or, when no
31
+ * document is focused, the loaded quest's) into the
32
+ * QuestState struct so the widget can paint without
33
+ * re-parsing the body on every keystroke.
34
+ *
35
+ * Uses the broad `checkboxProgress` walk so every `- [ ]`
36
+ * / `- [x]` in the body contributes regardless of which
37
+ * section holds it. The plan, research, brief and report
38
+ * templates each use a different section name for their
39
+ * work list; one counter serves them all.
40
+ */
41
+ export function refreshProgress(state) {
42
+ if (state.documentPath) {
43
+ try {
44
+ const text = readFileSync(state.documentPath, "utf8");
45
+ const parsed = parseDocumentFrontMatter(text);
46
+ if (parsed) {
47
+ const progress = checkboxProgress(parsed.body);
48
+ state.done = progress.done;
49
+ state.total = progress.total;
50
+ state.currentItem = progress.currentItem;
51
+ state.documentStage = parsed.frontMatter.stage;
52
+ return;
53
+ }
54
+ }
55
+ catch {
56
+ // Document missing or unreadable; fall through.
57
+ }
58
+ }
59
+ if (state.questDir) {
60
+ try {
61
+ const text = readFileSync(join(state.questDir, "README.md"), "utf8");
62
+ const parsed = parseQuestDoc(text);
63
+ if (parsed) {
64
+ const progress = checkboxProgress(parsed.body);
65
+ state.done = progress.done;
66
+ state.total = progress.total;
67
+ state.currentItem = progress.currentItem;
68
+ return;
69
+ }
70
+ }
71
+ catch {
72
+ // Quest missing; fall through.
73
+ }
74
+ }
75
+ state.done = 0;
76
+ state.total = 0;
77
+ state.currentItem = undefined;
78
+ }
79
+ /** Find a quest entry by id across the quests root. */
80
+ export function findQuestEntry(state, id) {
81
+ const { index } = discoverQuests(state.questsRoot);
82
+ return index.quests.get(id);
83
+ }
84
+ /**
85
+ * Load a quest by id into `state`: the state-mutation half of pi's
86
+ * own `loadQuest`. pi's version additionally calls
87
+ * `pi.setSessionName?.()` once this succeeds -- a pi-only
88
+ * enrichment with no equivalent host concept, so it stays out of
89
+ * this pure version; an adapter that wants it layers it on after
90
+ * calling this.
91
+ */
92
+ export function loadQuestById(state, id) {
93
+ const entry = findQuestEntry(state, id);
94
+ if (!entry) {
95
+ return {
96
+ ok: false,
97
+ guidance: `No quest with id "${id}" under ${state.questsRoot}.`,
98
+ };
99
+ }
100
+ state.questDir = entry.dir;
101
+ state.questId = entry.doc.frontMatter.id;
102
+ state.questTitle = entry.doc.title ?? null;
103
+ state.questKind = entry.doc.frontMatter.kind;
104
+ state.questStatus = entry.doc.frontMatter.status;
105
+ state.questPriority = entry.doc.frontMatter.priority;
106
+ state.questVerify = entry.doc.frontMatter.verify ?? null;
107
+ state.scratchDir = entry.doc.frontMatter.scratchDir ?? null;
108
+ state.documentPath = null;
109
+ state.documentId = null;
110
+ state.documentKind = null;
111
+ state.documentTitle = null;
112
+ state.documentStage = "idle";
113
+ refreshProgress(state);
114
+ return { ok: true };
115
+ }
116
+ /**
117
+ * Re-read the loaded quest's README and refresh the in-memory
118
+ * slice (title, kind, status, priority) so an edit to the quest's
119
+ * own README shows up in the status line without a manual reload.
120
+ * No-op when no quest is loaded or the README cannot be read.
121
+ */
122
+ export function refreshLoadedSlice(state) {
123
+ if (!state.questDir)
124
+ return;
125
+ let text;
126
+ try {
127
+ text = readFileSync(join(state.questDir, "README.md"), "utf8");
128
+ }
129
+ catch {
130
+ // README missing or unreadable; leave the slice as-is.
131
+ return;
132
+ }
133
+ const parsed = parseQuestDoc(text);
134
+ if (!parsed)
135
+ return;
136
+ state.questTitle = parsed.title ?? null;
137
+ state.questKind = parsed.frontMatter.kind;
138
+ state.questStatus = parsed.frontMatter.status;
139
+ state.questPriority = parsed.frontMatter.priority;
140
+ state.questVerify = parsed.frontMatter.verify ?? null;
141
+ state.scratchDir = parsed.frontMatter.scratchDir ?? null;
142
+ }
143
+ /** Unload the currently loaded quest. */
144
+ export function unloadQuest(state) {
145
+ state.questDir = null;
146
+ state.questId = null;
147
+ state.questTitle = null;
148
+ state.questKind = null;
149
+ state.questStatus = null;
150
+ state.questPriority = null;
151
+ state.questVerify = null;
152
+ state.scratchDir = null;
153
+ state.documentPath = null;
154
+ state.documentId = null;
155
+ state.documentKind = null;
156
+ state.documentTitle = null;
157
+ state.documentStage = "idle";
158
+ state.done = 0;
159
+ state.total = 0;
160
+ }
161
+ /** Focus a document under the loaded quest. */
162
+ export function focusDocument(state, docPath) {
163
+ if (!state.questDir) {
164
+ return { ok: false, guidance: "Load a quest first." };
165
+ }
166
+ let text;
167
+ try {
168
+ text = readFileSync(docPath, "utf8");
169
+ }
170
+ catch (err) {
171
+ return {
172
+ ok: false,
173
+ guidance: `Cannot read ${docPath}: ${err.message}`,
174
+ };
175
+ }
176
+ const parsed = parseDocumentFrontMatter(text);
177
+ if (!parsed) {
178
+ // Which field, not just that one is wrong. The answer used to be found
179
+ // by diffing the file against a sibling document.
180
+ return {
181
+ ok: false,
182
+ guidance: `Cannot focus ${docPath}: ${documentFrontMatterProblem(text) ?? "its front-matter will not parse"}.`,
183
+ };
184
+ }
185
+ state.documentPath = docPath;
186
+ state.documentId = parsed.frontMatter.id;
187
+ state.documentKind = parsed.frontMatter.kind;
188
+ state.documentTitle = extractTitle(parsed.body);
189
+ state.documentStage = parsed.frontMatter.stage;
190
+ refreshProgress(state);
191
+ return { ok: true };
192
+ }
193
+ /** Unfocus the active document. */
194
+ export function unfocusDocument(state) {
195
+ state.documentPath = null;
196
+ state.documentId = null;
197
+ state.documentKind = null;
198
+ state.documentTitle = null;
199
+ state.documentStage = "idle";
200
+ refreshProgress(state);
201
+ }
202
+ /**
203
+ * Persist the focused document's stage to its file and mirror it in
204
+ * state. Returns true when the stage reached disk, false when there
205
+ * is nothing to write to or the file is unreadable or unparseable,
206
+ * so the caller can refuse rather than let memory run ahead of disk.
207
+ */
208
+ export function writeDocumentStage(state, stage) {
209
+ if (!state.documentPath)
210
+ return false;
211
+ const questDir = state.questDir;
212
+ let text;
213
+ try {
214
+ text = readFileSync(state.documentPath, "utf8");
215
+ }
216
+ catch {
217
+ return false;
218
+ }
219
+ const parsed = parseDocumentFrontMatter(text);
220
+ if (!parsed)
221
+ return false;
222
+ const newFm = {
223
+ ...parsed.frontMatter,
224
+ stage: stage,
225
+ updated: nowYmd(),
226
+ };
227
+ const newText = `${serializeDocumentFrontMatter(newFm)}\n${parsed.body}`;
228
+ // Validate by parse-back, matching the quest mutation core: never
229
+ // write a document the strict parser cannot read back, which would
230
+ // drop it to an out-of-vocabulary stage and make it invisible.
231
+ const reparsed = parseDocumentFrontMatter(newText);
232
+ if (!reparsed || reparsed.frontMatter.stage !== newFm.stage)
233
+ return false;
234
+ const documentPath = state.documentPath;
235
+ if (questDir) {
236
+ atomicWriteUnderLock(questDir, documentPath, newText);
237
+ }
238
+ else {
239
+ atomicWriteFile(documentPath, newText);
240
+ }
241
+ state.documentStage = stage;
242
+ return true;
243
+ }
244
+ const DOC_KIND_DIRS = ["plans", "research", "briefs", "reports"];
245
+ const ACTIVE_DOC_STAGES = new Set(["think", "draft", "build"]);
246
+ /**
247
+ * Seal every still-active document under a quest to the quest's
248
+ * terminal stage, so concluding or retiring a quest does not leave
249
+ * documents stranded mid-stage. Returns how many were sealed.
250
+ * Best-effort per file: an unreadable document is skipped, not fatal.
251
+ */
252
+ export function sealQuestDocuments(questDir, target) {
253
+ let sealed = 0;
254
+ for (const kindDir of DOC_KIND_DIRS) {
255
+ const dir = join(questDir, kindDir);
256
+ let entries;
257
+ try {
258
+ entries = readdirSync(dir, { withFileTypes: true });
259
+ }
260
+ catch {
261
+ continue;
262
+ }
263
+ for (const entry of entries) {
264
+ if (!entry.isFile() || !entry.name.endsWith(".md"))
265
+ continue;
266
+ const docPath = join(dir, entry.name);
267
+ let text;
268
+ try {
269
+ text = readFileSync(docPath, "utf8");
270
+ }
271
+ catch {
272
+ continue;
273
+ }
274
+ const parsed = parseDocumentFrontMatter(text);
275
+ if (!parsed)
276
+ continue;
277
+ if (!ACTIVE_DOC_STAGES.has(parsed.frontMatter.stage))
278
+ continue;
279
+ const newFm = {
280
+ ...parsed.frontMatter,
281
+ stage: target,
282
+ updated: nowYmd(),
283
+ };
284
+ const sealedText = `${serializeDocumentFrontMatter(newFm)}\n${parsed.body}`;
285
+ // Validate by parse-back before writing, so the seal can never
286
+ // produce a document the strict parser drops to invisible.
287
+ const reparsed = parseDocumentFrontMatter(sealedText);
288
+ if (!reparsed || reparsed.frontMatter.stage !== target)
289
+ continue;
290
+ atomicWriteUnderLock(questDir, docPath, sealedText);
291
+ sealed++;
292
+ }
293
+ }
294
+ return sealed;
295
+ }
296
+ /** Append a Journey entry to the loaded quest's README. */
297
+ export function appendJourneyEntry(state, prose) {
298
+ if (!state.questDir)
299
+ return;
300
+ const ok = appendJourneyByPath(state.questDir, prose);
301
+ if (!ok) {
302
+ console.warn(`[quest] failed to append Journey entry to ${state.questDir}; README missing or unreadable.`);
303
+ return;
304
+ }
305
+ stampQuestUpdated(state);
306
+ }
307
+ /** Update the loaded quest's `updated` frontmatter to today. */
308
+ export function stampQuestUpdated(state) {
309
+ if (!state.questDir)
310
+ return;
311
+ // The identity transform still stamps updated in the core, so a
312
+ // touch is validated and locked like every other quest write.
313
+ mutateQuestFrontMatter(state.questDir, (fm) => fm);
314
+ }
315
+ function extractTitle(body) {
316
+ const match = /^#\s+(.+)$/m.exec(body);
317
+ return match ? match[1].trim() : null;
318
+ }
319
+ /** Create a new document under the loaded quest. */
320
+ export function createDocument(state, opts) {
321
+ if (!state.questDir)
322
+ return undefined;
323
+ const subDir = {
324
+ plan: "plans",
325
+ research: "research",
326
+ brief: "briefs",
327
+ report: "reports",
328
+ };
329
+ // Born readable or not born at all, the same rule the quest README
330
+ // writers meet. This is the writer that produced the five documents
331
+ // found invisible to discovery, and repairing the reader to fail
332
+ // open and explain itself left this end of it untouched: a document
333
+ // whose front matter will not parse is written, reported as drafted,
334
+ // and never listed again.
335
+ const complaints = explainDocumentFrontMatter(opts.scaffoldBody);
336
+ if (complaints.length > 0)
337
+ return undefined;
338
+ const dir = join(state.questDir, subDir[opts.kind]);
339
+ mkdirSync(dir, { recursive: true });
340
+ const path = join(dir, `${opts.id}.md`);
341
+ // New document; scaffold atomically. Subsequent writes go
342
+ // through writeDocumentStage which holds the lock too.
343
+ atomicWriteUnderLock(state.questDir, path, opts.scaffoldBody);
344
+ return path;
345
+ }
346
+ /**
347
+ * Inventory every working tree recorded across all quests,
348
+ * attributing each to its owning quest. This is what lets the
349
+ * harness-created trees be seen and reaped in one place instead
350
+ * of being a mystery pile of directories.
351
+ */
352
+ export function inventoryWorktrees(state) {
353
+ const { index } = discoverQuests(state.questsRoot);
354
+ const entries = [];
355
+ for (const quest of index.quests.values()) {
356
+ const fm = quest.doc.frontMatter;
357
+ for (const tree of fm.trees ?? []) {
358
+ const entry = {
359
+ path: tree.path,
360
+ questId: fm.id,
361
+ questTitle: quest.doc.title ?? null,
362
+ exists: existsSync(tree.path),
363
+ };
364
+ if (tree.branch)
365
+ entry.branch = tree.branch;
366
+ entries.push(entry);
367
+ }
368
+ }
369
+ return entries.sort((a, b) => a.path.localeCompare(b.path));
370
+ }
371
+ /** Discover quests for /quest-list etc. */
372
+ export function listAllQuests(state) {
373
+ const { index } = discoverQuests(state.questsRoot);
374
+ return [...index.quests.values()];
375
+ }
376
+ /** Ensure the quests root exists on disk. */
377
+ export function ensureQuestsRoot(state) {
378
+ if (!existsSync(state.questsRoot)) {
379
+ mkdirSync(state.questsRoot, { recursive: true });
380
+ }
381
+ }
382
+ /**
383
+ * Reorder the sibling set the given quest belongs to.
384
+ * Siblings share both `parent` and `priority`. Writes the
385
+ * updated rank back to every quest whose rank changed.
386
+ */
387
+ export function reorderSiblings(state, questId, action) {
388
+ const { index } = discoverQuests(state.questsRoot);
389
+ const pivot = index.quests.get(questId);
390
+ if (!pivot) {
391
+ return {
392
+ ok: false,
393
+ guidance: `No quest with id "${questId}" under ${state.questsRoot}.`,
394
+ };
395
+ }
396
+ if (isSealedStatus(pivot.doc.frontMatter.status)) {
397
+ return {
398
+ ok: false,
399
+ guidance: `Quest "${questId}" is ${pivot.doc.frontMatter.status}; reopen it before reordering.`,
400
+ };
401
+ }
402
+ const siblings = [];
403
+ for (const entry of index.quests.values()) {
404
+ if (entry.doc.frontMatter.parent === pivot.doc.frontMatter.parent &&
405
+ entry.doc.frontMatter.priority === pivot.doc.frontMatter.priority &&
406
+ !isSealedStatus(entry.doc.frontMatter.status)) {
407
+ siblings.push(entry);
408
+ }
409
+ }
410
+ const before = siblings.map((e) => ({
411
+ id: e.doc.frontMatter.id,
412
+ rank: e.doc.frontMatter.rank,
413
+ }));
414
+ let after;
415
+ switch (action.kind) {
416
+ case "top":
417
+ after = rankTop(before, questId);
418
+ break;
419
+ case "bottom":
420
+ after = rankBottom(before, questId);
421
+ break;
422
+ case "bump":
423
+ after = rankBump(before, questId);
424
+ break;
425
+ case "sink":
426
+ after = rankSink(before, questId);
427
+ break;
428
+ case "before":
429
+ after = rankBefore(before, questId, action.target);
430
+ break;
431
+ case "after":
432
+ after = rankAfter(before, questId, action.target);
433
+ break;
434
+ case "renumber":
435
+ after = rankRenumber(before);
436
+ break;
437
+ }
438
+ const changes = diffRanks(before, after);
439
+ const rankById = new Map(after.map((e) => [e.id, e.rank]));
440
+ for (const entry of siblings) {
441
+ const newRank = rankById.get(entry.doc.frontMatter.id);
442
+ if (newRank === undefined)
443
+ continue;
444
+ if (newRank === entry.doc.frontMatter.rank)
445
+ continue;
446
+ writeQuestRank(entry.dir, newRank);
447
+ }
448
+ return { ok: true, result: { siblings, changes } };
449
+ }
450
+ function writeQuestRank(questDir, rank) {
451
+ // Routed through the validated mutation core so a rank write is
452
+ // validated and stamped the same way every other field write is.
453
+ mutateQuestFrontMatter(questDir, (fm) => ({ ...fm, rank }));
454
+ }
455
+ /**
456
+ * Set a quest's rank by directory. The by-dir counterpart to the
457
+ * internal `writeQuestRank`, exported so undo can reverse a journalled
458
+ * rank change (a reparent re-ranks into its new sibling set).
459
+ */
460
+ export function setQuestRankByDir(questDir, rank) {
461
+ const result = writeQuestFrontMatter(questDir, (fm) => ({ ...fm, rank }));
462
+ if (!result.ok)
463
+ return result;
464
+ return { ok: true };
465
+ }
466
+ /**
467
+ * Set any journalled field by directory, through the lens that knows
468
+ * how to write it.
469
+ *
470
+ * Undo used to reach for one exported setter per field and cast the
471
+ * journalled string to that field's type on the way in. The lens
472
+ * checks the value against the field's vocabulary instead, so a
473
+ * journal entry carrying a word the vocabulary has since lost is
474
+ * refused with a reason rather than written back unexamined.
475
+ */
476
+ export function setQuestFieldByDir(questDir, lens, value) {
477
+ let refusal;
478
+ const result = writeQuestFrontMatter(questDir, (fm) => {
479
+ const written = lens.write(fm, value);
480
+ if (written.ok)
481
+ return written.fm;
482
+ refusal = written.reason;
483
+ return undefined;
484
+ });
485
+ if (refusal)
486
+ return { ok: false, guidance: refusal };
487
+ if (!result.ok)
488
+ return result;
489
+ return { ok: true };
490
+ }
491
+ /** Build a reverse alias index across every discovered quest. */
492
+ export function buildQuestsAliasIndex(state) {
493
+ const { index } = discoverQuests(state.questsRoot);
494
+ return buildAliasIndex(index);
495
+ }
496
+ function writeQuestFrontMatter(questDir, mutate) {
497
+ const result = mutateQuestFrontMatter(questDir, mutate);
498
+ if (!result.ok)
499
+ return result;
500
+ return { ok: true, fm: result.fm };
501
+ }
502
+ /**
503
+ * Set a quest's parent by directory, stamping `updated` and
504
+ * appending a Journey entry. Used by the reparent verb, which
505
+ * may move quests other than the loaded one.
506
+ */
507
+ export function setQuestParent(questDir, newParent) {
508
+ const result = writeQuestFrontMatter(questDir, (fm) => ({
509
+ ...fm,
510
+ parent: newParent,
511
+ }));
512
+ if (!result.ok)
513
+ return result;
514
+ appendJourneyByPath(questDir, `Reparented to ${newParent ?? "top level"}.`);
515
+ return { ok: true };
516
+ }
517
+ /** Set a quest's status by directory, stamping `updated`. */
518
+ export function setQuestStatusByDir(questDir, status) {
519
+ const result = writeQuestFrontMatter(questDir, (fm) => ({ ...fm, status }));
520
+ if (!result.ok)
521
+ return result;
522
+ return { ok: true };
523
+ }
524
+ /**
525
+ * Set a quest's priority by directory (the by-id counterpart to
526
+ * `setLoadedPriority`). Used by the bulk seal cascade and by undo
527
+ * when it reverses a journalled priority change.
528
+ */
529
+ export function setQuestPriorityByDir(questDir, priority) {
530
+ const result = writeQuestFrontMatter(questDir, (fm) => ({ ...fm, priority }));
531
+ if (!result.ok)
532
+ return result;
533
+ return { ok: true };
534
+ }
535
+ /**
536
+ * Add one or more aliases to the loaded quest in a single front-matter
537
+ * write, so a list either lands whole or not at all and no partial
538
+ * state survives a failure. Aliases already present, and duplicates
539
+ * within the batch, are reported as already and added only once.
540
+ */
541
+ export function addAliasesToLoaded(state, aliases) {
542
+ if (!state.questDir)
543
+ return { ok: false, guidance: "Load a quest first." };
544
+ let added = [];
545
+ let already = [];
546
+ const result = writeQuestFrontMatter(state.questDir, (fm) => {
547
+ // Reset on every invocation so a retried write does not
548
+ // accumulate duplicate report entries.
549
+ added = [];
550
+ already = [];
551
+ const next = [...fm.aliases];
552
+ for (const alias of aliases) {
553
+ const present = next.some((a) => a.type === alias.type && a.value === alias.value);
554
+ if (present) {
555
+ already.push(alias);
556
+ continue;
557
+ }
558
+ added.push(alias);
559
+ next.push(alias);
560
+ }
561
+ return { ...fm, aliases: next };
562
+ });
563
+ if (!result.ok)
564
+ return result;
565
+ return { ok: true, added, already };
566
+ }
567
+ /** Remove an alias from the loaded quest. */
568
+ export function removeAliasFromLoaded(state, alias) {
569
+ if (!state.questDir)
570
+ return { ok: false, guidance: "Load a quest first." };
571
+ let removed = false;
572
+ const result = writeQuestFrontMatter(state.questDir, (fm) => {
573
+ const next = fm.aliases.filter((a) => !(a.type === alias.type && a.value === alias.value));
574
+ if (next.length === fm.aliases.length)
575
+ return undefined;
576
+ removed = true;
577
+ return { ...fm, aliases: next };
578
+ });
579
+ if (!result.ok)
580
+ return result;
581
+ return { ok: true, removed };
582
+ }
583
+ /**
584
+ * Remove one or more aliases from the loaded quest in a single write,
585
+ * the batch counterpart to addAliasesToLoaded. Reports which were
586
+ * removed and which were absent, so the verb can signal a partial or
587
+ * whole no-op the same way the add path does.
588
+ */
589
+ export function removeAliasesFromLoaded(state, aliases) {
590
+ if (!state.questDir)
591
+ return { ok: false, guidance: "Load a quest first." };
592
+ let removed = [];
593
+ let absent = [];
594
+ const result = writeQuestFrontMatter(state.questDir, (fm) => {
595
+ removed = [];
596
+ absent = [];
597
+ const drop = (a) => aliases.some((t) => t.type === a.type && t.value === a.value);
598
+ for (const target of aliases) {
599
+ if (fm.aliases.some((a) => a.type === target.type && a.value === target.value)) {
600
+ removed.push(target);
601
+ }
602
+ else {
603
+ absent.push(target);
604
+ }
605
+ }
606
+ if (removed.length === 0)
607
+ return undefined;
608
+ return { ...fm, aliases: fm.aliases.filter((a) => !drop(a)) };
609
+ });
610
+ if (!result.ok)
611
+ return result;
612
+ return { ok: true, removed, absent };
613
+ }
614
+ /** Attach a session id to the loaded quest. */
615
+ export function attachSessionToLoaded(state, session) {
616
+ if (!state.questDir)
617
+ return { ok: false, guidance: "Load a quest first." };
618
+ let added = false;
619
+ const result = writeQuestFrontMatter(state.questDir, (fm) => {
620
+ const existing = fm.sessions.find((s) => s.id === session.id);
621
+ if (existing) {
622
+ // Refresh status to active and merge any new fields, but keep
623
+ // the original started: it records when the session first
624
+ // touched this quest, not the latest attach. Letting the
625
+ // incoming started win would defeat the no-op guard below and
626
+ // churn the README on every load.
627
+ const merged = {
628
+ ...existing,
629
+ ...session,
630
+ started: existing.started ?? session.started,
631
+ status: "active",
632
+ };
633
+ if (JSON.stringify(merged) === JSON.stringify(existing)) {
634
+ return undefined;
635
+ }
636
+ return {
637
+ ...fm,
638
+ sessions: fm.sessions.map((s) => (s.id === session.id ? merged : s)),
639
+ };
640
+ }
641
+ added = true;
642
+ const next = { status: "active", ...session };
643
+ return { ...fm, sessions: [...fm.sessions, next] };
644
+ });
645
+ if (!result.ok)
646
+ return result;
647
+ return { ok: true, added };
648
+ }
649
+ /**
650
+ * Capture the current process's liveness identity for a session
651
+ * attach: its instance id, OS process identity and the terminal
652
+ * surface it runs in (when a driver recognises one). Read once at
653
+ * attach time; the stored handle is what a later reader probes.
654
+ */
655
+ export function captureSessionIdentity() {
656
+ const handle = identifyCurrentTerminal();
657
+ return {
658
+ instanceId: currentInstanceId(),
659
+ process: currentProcessIdentity(),
660
+ terminal: handle
661
+ ? {
662
+ driverId: handle.driverId,
663
+ value: handle.value,
664
+ scope: handle.scope,
665
+ hostId: handle.hostId,
666
+ }
667
+ : undefined,
668
+ };
669
+ }
670
+ /**
671
+ * Attach the current session to the loaded quest.
672
+ *
673
+ * This is the automatic-capture path: a session-start or load flow
674
+ * calls it so a quest's sessions frontmatter records where work
675
+ * happened without the user attaching by hand. It refreshes an
676
+ * existing record rather than duplicating, and no-ops cleanly when
677
+ * no quest is loaded or the session id is unknown.
678
+ */
679
+ export function attachCurrentSession(state, opts) {
680
+ // An ephemeral session has an id but writes no log, so attaching it
681
+ // would leave a phantom entry that can never be resumed. Skip it;
682
+ // only a persisted session earns a record.
683
+ if (opts.persisted === false)
684
+ return { attached: false };
685
+ if (!state.questDir || !opts.id)
686
+ return { attached: false };
687
+ const session = {
688
+ id: opts.id,
689
+ started: new Date().toISOString(),
690
+ status: "active",
691
+ };
692
+ if (opts.cwd?.trim())
693
+ session.cwd = opts.cwd.trim();
694
+ if (opts.instanceId)
695
+ session.instanceId = opts.instanceId;
696
+ if (opts.process)
697
+ session.process = opts.process;
698
+ if (opts.terminal)
699
+ session.terminal = opts.terminal;
700
+ const result = attachSessionToLoaded(state, session);
701
+ return { attached: result.ok };
702
+ }
703
+ /**
704
+ * Detach a session only when the caller's process instance owns the
705
+ * record, so a process that resumed a session is not detached by the
706
+ * delayed shutdown of the process that used to hold it. A record with
707
+ * no recorded instance id is legacy and detaches unconditionally,
708
+ * preserving the pre-lease behaviour.
709
+ */
710
+ export function detachSessionIfOwner(questDir, sessionId, instanceId) {
711
+ let detached = false;
712
+ const result = writeQuestFrontMatter(questDir, (fm) => {
713
+ let hit = false;
714
+ const next = fm.sessions.map((s) => {
715
+ if (s.id !== sessionId || s.status === "detached")
716
+ return s;
717
+ // A different live instance owns the record: leave it be.
718
+ if (s.instanceId !== undefined && s.instanceId !== instanceId)
719
+ return s;
720
+ hit = true;
721
+ return { ...s, status: "detached" };
722
+ });
723
+ if (!hit)
724
+ return undefined;
725
+ detached = true;
726
+ return { ...fm, sessions: next };
727
+ });
728
+ if (!result.ok)
729
+ return result;
730
+ return { ok: true, detached };
731
+ }
732
+ /** Mark a session as detached on the loaded quest. */
733
+ export function detachSessionFromLoaded(state, sessionId) {
734
+ if (!state.questDir)
735
+ return { ok: false, guidance: "Load a quest first." };
736
+ return detachSessionInQuestDir(state.questDir, sessionId);
737
+ }
738
+ /**
739
+ * Reconcile a session's membership so it reads active on exactly one
740
+ * quest: detach the session from every quest other than the one being
741
+ * kept. The switch path already releases the immediate prior quest;
742
+ * this catches stragglers left by earlier runs or a lost state, so a
743
+ * session never lingers active on several quests at once. Returns the
744
+ * ids it detached the session from.
745
+ */
746
+ export function reconcileSessionMembership(state, sessionId, keepQuestId) {
747
+ const { index } = discoverQuests(state.questsRoot);
748
+ const detachedFrom = [];
749
+ for (const entry of index.quests.values()) {
750
+ const fm = entry.doc.frontMatter;
751
+ if (fm.id === keepQuestId)
752
+ continue;
753
+ const holdsActive = fm.sessions.some((s) => s.id === sessionId && s.status !== "detached");
754
+ if (!holdsActive)
755
+ continue;
756
+ const result = detachSessionInQuestDir(entry.dir, sessionId);
757
+ if (result.ok && result.detached)
758
+ detachedFrom.push(fm.id);
759
+ }
760
+ return detachedFrom;
761
+ }
762
+ export function detachSessionInQuestDir(questDir, sessionId) {
763
+ let detached = false;
764
+ const result = writeQuestFrontMatter(questDir, (fm) => {
765
+ let hit = false;
766
+ const next = fm.sessions.map((s) => {
767
+ if (s.id !== sessionId)
768
+ return s;
769
+ if (s.status === "detached")
770
+ return s;
771
+ hit = true;
772
+ return { ...s, status: "detached" };
773
+ });
774
+ if (!hit)
775
+ return undefined;
776
+ detached = true;
777
+ return { ...fm, sessions: next };
778
+ });
779
+ if (!result.ok)
780
+ return result;
781
+ return { ok: true, detached };
782
+ }
783
+ const PRIORITY_ORDER = [
784
+ "driving",
785
+ "active",
786
+ "queued",
787
+ "bench",
788
+ "someday",
789
+ ];
790
+ /** Set the loaded quest's priority bucket. */
791
+ export function setLoadedPriority(state, priority) {
792
+ if (!state.questDir)
793
+ return { ok: false, guidance: "Load a quest first." };
794
+ let changed = false;
795
+ const result = writeQuestFrontMatter(state.questDir, (fm) => {
796
+ if (fm.priority === priority)
797
+ return undefined;
798
+ changed = true;
799
+ // Append to the end of the destination bucket rather than
800
+ // colliding at rank 1: take the next free rank in the target
801
+ // (parent, priority) group, excluding the quest being moved.
802
+ const { index } = discoverQuests(state.questsRoot);
803
+ const destRanks = siblingRanks(index, fm.parent ?? null, priority, fm.id);
804
+ return { ...fm, priority, rank: nextRank(destRanks) };
805
+ });
806
+ if (!result.ok)
807
+ return result;
808
+ if (changed) {
809
+ state.questPriority = priority;
810
+ }
811
+ return { ok: true, changed };
812
+ }
813
+ /**
814
+ * Change the loaded quest's kind. A subquest needs a parent to rank
815
+ * within, so refuse the move to subquest when the quest has none.
816
+ * Returns whether the kind actually changed.
817
+ */
818
+ export function setLoadedKind(state, kind) {
819
+ if (!state.questDir)
820
+ return { ok: false, guidance: "Load a quest first." };
821
+ let changed = false;
822
+ let refusal;
823
+ const result = writeQuestFrontMatter(state.questDir, (fm) => {
824
+ if (fm.kind === kind)
825
+ return undefined;
826
+ if (kind === "subquest" && (fm.parent ?? null) === null) {
827
+ refusal =
828
+ "A subquest needs a parent to rank within; reparent it under a quest first.";
829
+ return undefined;
830
+ }
831
+ changed = true;
832
+ return { ...fm, kind };
833
+ });
834
+ if (refusal)
835
+ return { ok: false, guidance: refusal };
836
+ if (!result.ok)
837
+ return result;
838
+ return { ok: true, changed };
839
+ }
840
+ /** Shift the loaded quest one bucket up or down the priority ladder. */
841
+ export function bumpLoadedPriority(state, direction) {
842
+ if (!state.questDir || !state.questPriority) {
843
+ return { ok: false, guidance: "Load a quest first." };
844
+ }
845
+ const i = PRIORITY_ORDER.indexOf(state.questPriority);
846
+ if (i < 0)
847
+ return { ok: false, guidance: "Unknown priority on the loaded quest." };
848
+ const step = direction === "up" ? -1 : 1;
849
+ const j = Math.min(PRIORITY_ORDER.length - 1, Math.max(0, i + step));
850
+ const next = PRIORITY_ORDER[j];
851
+ const from = state.questPriority;
852
+ if (next === from)
853
+ return { ok: true, from, to: from };
854
+ const result = setLoadedPriority(state, next);
855
+ if (!result.ok)
856
+ return result;
857
+ return { ok: true, from, to: next };
858
+ }
859
+ /** Set the loaded quest's coarse status enum. */
860
+ export function setLoadedStatus(state, status) {
861
+ if (!state.questDir)
862
+ return { ok: false, guidance: "Load a quest first." };
863
+ let changed = false;
864
+ const result = writeQuestFrontMatter(state.questDir, (fm) => {
865
+ if (fm.status === status)
866
+ return undefined;
867
+ changed = true;
868
+ return { ...fm, status };
869
+ });
870
+ if (!result.ok)
871
+ return result;
872
+ if (changed) {
873
+ state.questStatus = status;
874
+ }
875
+ return { ok: true, changed };
876
+ }
877
+ /** Rename a session on the loaded quest. */
878
+ export function renameSessionOnLoaded(state, sessionId, name) {
879
+ if (!state.questDir)
880
+ return { ok: false, guidance: "Load a quest first." };
881
+ let renamed = false;
882
+ const result = writeQuestFrontMatter(state.questDir, (fm) => {
883
+ let hit = false;
884
+ const next = fm.sessions.map((s) => {
885
+ if (s.id !== sessionId)
886
+ return s;
887
+ if (s.name === name)
888
+ return s;
889
+ hit = true;
890
+ return { ...s, name };
891
+ });
892
+ if (!hit)
893
+ return undefined;
894
+ renamed = true;
895
+ return { ...fm, sessions: next };
896
+ });
897
+ if (!result.ok)
898
+ return result;
899
+ return { ok: true, renamed };
900
+ }