@aligndottech/cli 0.49.0 → 0.51.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 (825) hide show
  1. package/README.md +5 -3
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +32 -8
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/agents.d.ts.map +1 -1
  6. package/dist/commands/agents.js +4 -1
  7. package/dist/commands/agents.js.map +1 -1
  8. package/dist/commands/check.d.ts.map +1 -1
  9. package/dist/commands/check.js +18 -2
  10. package/dist/commands/check.js.map +1 -1
  11. package/dist/commands/config.d.ts +8 -0
  12. package/dist/commands/config.d.ts.map +1 -0
  13. package/dist/commands/config.js +33 -0
  14. package/dist/commands/config.js.map +1 -0
  15. package/dist/commands/connect-agents.d.ts.map +1 -1
  16. package/dist/commands/connect-agents.js +3 -1
  17. package/dist/commands/connect-agents.js.map +1 -1
  18. package/dist/commands/connect.d.ts +5 -0
  19. package/dist/commands/connect.d.ts.map +1 -1
  20. package/dist/commands/connect.js +24 -0
  21. package/dist/commands/connect.js.map +1 -1
  22. package/dist/commands/env.d.ts.map +1 -1
  23. package/dist/commands/env.js +11 -0
  24. package/dist/commands/env.js.map +1 -1
  25. package/dist/commands/import/confluence.d.ts.map +1 -1
  26. package/dist/commands/import/confluence.js +24 -5
  27. package/dist/commands/import/confluence.js.map +1 -1
  28. package/dist/commands/import/docs.js +2 -2
  29. package/dist/commands/import/git.d.ts.map +1 -1
  30. package/dist/commands/import/git.js +15 -5
  31. package/dist/commands/import/git.js.map +1 -1
  32. package/dist/commands/import/github.d.ts.map +1 -1
  33. package/dist/commands/import/github.js +34 -7
  34. package/dist/commands/import/github.js.map +1 -1
  35. package/dist/commands/import/gitlab.d.ts.map +1 -1
  36. package/dist/commands/import/gitlab.js +10 -5
  37. package/dist/commands/import/gitlab.js.map +1 -1
  38. package/dist/commands/import/jira.d.ts.map +1 -1
  39. package/dist/commands/import/jira.js +10 -5
  40. package/dist/commands/import/jira.js.map +1 -1
  41. package/dist/commands/import/linear.d.ts.map +1 -1
  42. package/dist/commands/import/linear.js +10 -5
  43. package/dist/commands/import/linear.js.map +1 -1
  44. package/dist/commands/import/notion.d.ts.map +1 -1
  45. package/dist/commands/import/notion.js +10 -5
  46. package/dist/commands/import/notion.js.map +1 -1
  47. package/dist/commands/import/sessions.js +2 -2
  48. package/dist/commands/import/slack.d.ts.map +1 -1
  49. package/dist/commands/import/slack.js +12 -7
  50. package/dist/commands/import/slack.js.map +1 -1
  51. package/dist/commands/import/teams.d.ts.map +1 -1
  52. package/dist/commands/import/teams.js +10 -5
  53. package/dist/commands/import/teams.js.map +1 -1
  54. package/dist/commands/import/zoom.d.ts.map +1 -1
  55. package/dist/commands/import/zoom.js +10 -5
  56. package/dist/commands/import/zoom.js.map +1 -1
  57. package/dist/commands/import.d.ts.map +1 -1
  58. package/dist/commands/import.js +43 -1
  59. package/dist/commands/import.js.map +1 -1
  60. package/dist/commands/invite.d.ts +8 -18
  61. package/dist/commands/invite.d.ts.map +1 -1
  62. package/dist/commands/invite.js +23 -46
  63. package/dist/commands/invite.js.map +1 -1
  64. package/dist/commands/join.d.ts +5 -0
  65. package/dist/commands/join.d.ts.map +1 -0
  66. package/dist/commands/join.js +49 -0
  67. package/dist/commands/join.js.map +1 -0
  68. package/dist/commands/local-relink.d.ts +35 -0
  69. package/dist/commands/local-relink.d.ts.map +1 -0
  70. package/dist/commands/local-relink.js +72 -0
  71. package/dist/commands/local-relink.js.map +1 -0
  72. package/dist/commands/local.d.ts.map +1 -1
  73. package/dist/commands/local.js +113 -4
  74. package/dist/commands/local.js.map +1 -1
  75. package/dist/commands/login.d.ts.map +1 -1
  76. package/dist/commands/login.js +21 -2
  77. package/dist/commands/login.js.map +1 -1
  78. package/dist/commands/mark.d.ts +37 -0
  79. package/dist/commands/mark.d.ts.map +1 -0
  80. package/dist/commands/mark.js +105 -0
  81. package/dist/commands/mark.js.map +1 -0
  82. package/dist/commands/mcp.d.ts +149 -2
  83. package/dist/commands/mcp.d.ts.map +1 -1
  84. package/dist/commands/mcp.js +80 -15
  85. package/dist/commands/mcp.js.map +1 -1
  86. package/dist/commands/registry.d.ts.map +1 -1
  87. package/dist/commands/registry.js +12 -2
  88. package/dist/commands/registry.js.map +1 -1
  89. package/dist/commands/setup.d.ts +39 -0
  90. package/dist/commands/setup.d.ts.map +1 -1
  91. package/dist/commands/setup.js +65 -50
  92. package/dist/commands/setup.js.map +1 -1
  93. package/dist/commands/share.d.ts +7 -0
  94. package/dist/commands/share.d.ts.map +1 -0
  95. package/dist/commands/share.js +129 -0
  96. package/dist/commands/share.js.map +1 -0
  97. package/dist/commands/status.d.ts.map +1 -1
  98. package/dist/commands/status.js +10 -0
  99. package/dist/commands/status.js.map +1 -1
  100. package/dist/commands/sync.d.ts +55 -0
  101. package/dist/commands/sync.d.ts.map +1 -0
  102. package/dist/commands/sync.js +278 -0
  103. package/dist/commands/sync.js.map +1 -0
  104. package/dist/commands/telemetry.d.ts +3 -3
  105. package/dist/commands/telemetry.js +6 -6
  106. package/dist/commands/telemetry.js.map +1 -1
  107. package/dist/commands/why.d.ts.map +1 -1
  108. package/dist/commands/why.js +6 -1
  109. package/dist/commands/why.js.map +1 -1
  110. package/dist/detector/detector-version.d.ts +16 -0
  111. package/dist/detector/detector-version.d.ts.map +1 -0
  112. package/dist/detector/detector-version.js +36 -0
  113. package/dist/detector/detector-version.js.map +1 -0
  114. package/dist/detector/relationship-contract.d.ts +30 -0
  115. package/dist/detector/relationship-contract.d.ts.map +1 -0
  116. package/dist/detector/relationship-contract.js +120 -0
  117. package/dist/detector/relationship-contract.js.map +1 -0
  118. package/dist/detector/relationship-contract.v1.json +53 -0
  119. package/dist/detector/relationship-prompt.d.ts +20 -0
  120. package/dist/detector/relationship-prompt.d.ts.map +1 -0
  121. package/dist/detector/relationship-prompt.js +55 -0
  122. package/dist/detector/relationship-prompt.js.map +1 -0
  123. package/dist/detector/relationship-prompt.v1.json +13 -0
  124. package/dist/detector/resolve-pair.d.ts +39 -0
  125. package/dist/detector/resolve-pair.d.ts.map +1 -0
  126. package/dist/detector/resolve-pair.js +345 -0
  127. package/dist/detector/resolve-pair.js.map +1 -0
  128. package/dist/detector/similar-item.d.ts +20 -0
  129. package/dist/detector/similar-item.d.ts.map +1 -0
  130. package/dist/detector/similar-item.js +16 -0
  131. package/dist/detector/similar-item.js.map +1 -0
  132. package/dist/index.d.ts +2 -0
  133. package/dist/index.d.ts.map +1 -1
  134. package/dist/index.js +31 -11
  135. package/dist/index.js.map +1 -1
  136. package/dist/lib/advisory-dedup.d.ts.map +1 -1
  137. package/dist/lib/advisory-dedup.js +16 -8
  138. package/dist/lib/advisory-dedup.js.map +1 -1
  139. package/dist/lib/advisory-verdict.d.ts +19 -0
  140. package/dist/lib/advisory-verdict.d.ts.map +1 -1
  141. package/dist/lib/advisory-verdict.js +6 -3
  142. package/dist/lib/advisory-verdict.js.map +1 -1
  143. package/dist/lib/backfill-state.d.ts +116 -0
  144. package/dist/lib/backfill-state.d.ts.map +1 -0
  145. package/dist/lib/backfill-state.js +342 -0
  146. package/dist/lib/backfill-state.js.map +1 -0
  147. package/dist/lib/backup-copy.d.ts +17 -0
  148. package/dist/lib/backup-copy.d.ts.map +1 -0
  149. package/dist/lib/backup-copy.js +13 -0
  150. package/dist/lib/backup-copy.js.map +1 -0
  151. package/dist/lib/backup-exclusion.d.ts +10 -0
  152. package/dist/lib/backup-exclusion.d.ts.map +1 -0
  153. package/dist/lib/backup-exclusion.js +58 -0
  154. package/dist/lib/backup-exclusion.js.map +1 -0
  155. package/dist/lib/capture-report.d.ts +22 -18
  156. package/dist/lib/capture-report.d.ts.map +1 -1
  157. package/dist/lib/capture-report.js +64 -2
  158. package/dist/lib/capture-report.js.map +1 -1
  159. package/dist/lib/cli-oauth.d.ts +2 -0
  160. package/dist/lib/cli-oauth.d.ts.map +1 -1
  161. package/dist/lib/cli-oauth.js +61 -10
  162. package/dist/lib/cli-oauth.js.map +1 -1
  163. package/dist/lib/config.d.ts +72 -1
  164. package/dist/lib/config.d.ts.map +1 -1
  165. package/dist/lib/config.js +245 -1
  166. package/dist/lib/config.js.map +1 -1
  167. package/dist/lib/confirm-timeout.d.ts +8 -0
  168. package/dist/lib/confirm-timeout.d.ts.map +1 -0
  169. package/dist/lib/confirm-timeout.js +18 -0
  170. package/dist/lib/confirm-timeout.js.map +1 -0
  171. package/dist/lib/curation/check-marks.d.ts +48 -0
  172. package/dist/lib/curation/check-marks.d.ts.map +1 -0
  173. package/dist/lib/curation/check-marks.js +81 -0
  174. package/dist/lib/curation/check-marks.js.map +1 -0
  175. package/dist/lib/curation/guardrail.d.ts +39 -0
  176. package/dist/lib/curation/guardrail.d.ts.map +1 -0
  177. package/dist/lib/curation/guardrail.js +95 -0
  178. package/dist/lib/curation/guardrail.js.map +1 -0
  179. package/dist/lib/curation/judge.d.ts +3 -0
  180. package/dist/lib/curation/judge.d.ts.map +1 -0
  181. package/dist/lib/curation/judge.js +9 -0
  182. package/dist/lib/curation/judge.js.map +1 -0
  183. package/dist/lib/curation/judgements-db.d.ts +97 -0
  184. package/dist/lib/curation/judgements-db.d.ts.map +1 -0
  185. package/dist/lib/curation/judgements-db.js +206 -0
  186. package/dist/lib/curation/judgements-db.js.map +1 -0
  187. package/dist/lib/curation/last-check.d.ts +32 -0
  188. package/dist/lib/curation/last-check.d.ts.map +1 -0
  189. package/dist/lib/curation/last-check.js +81 -0
  190. package/dist/lib/curation/last-check.js.map +1 -0
  191. package/dist/lib/curation/mark.d.ts +76 -0
  192. package/dist/lib/curation/mark.d.ts.map +1 -0
  193. package/dist/lib/curation/mark.js +361 -0
  194. package/dist/lib/curation/mark.js.map +1 -0
  195. package/dist/lib/curation/text.d.ts +6 -0
  196. package/dist/lib/curation/text.d.ts.map +1 -0
  197. package/dist/lib/curation/text.js +35 -0
  198. package/dist/lib/curation/text.js.map +1 -0
  199. package/dist/lib/destination-name.d.ts +24 -0
  200. package/dist/lib/destination-name.d.ts.map +1 -0
  201. package/dist/lib/destination-name.js +39 -0
  202. package/dist/lib/destination-name.js.map +1 -0
  203. package/dist/lib/destination-summary.d.ts +6 -0
  204. package/dist/lib/destination-summary.d.ts.map +1 -0
  205. package/dist/lib/destination-summary.js +27 -0
  206. package/dist/lib/destination-summary.js.map +1 -0
  207. package/dist/lib/destination-trust.d.ts +54 -0
  208. package/dist/lib/destination-trust.d.ts.map +1 -0
  209. package/dist/lib/destination-trust.js +107 -0
  210. package/dist/lib/destination-trust.js.map +1 -0
  211. package/dist/lib/env-resolver.d.ts.map +1 -1
  212. package/dist/lib/env-resolver.js +3 -0
  213. package/dist/lib/env-resolver.js.map +1 -1
  214. package/dist/lib/fatal.d.ts +11 -0
  215. package/dist/lib/fatal.d.ts.map +1 -0
  216. package/dist/lib/fatal.js +22 -0
  217. package/dist/lib/fatal.js.map +1 -0
  218. package/dist/lib/fetchers/capture.d.ts +49 -2
  219. package/dist/lib/fetchers/capture.d.ts.map +1 -1
  220. package/dist/lib/fetchers/capture.js +7 -1
  221. package/dist/lib/fetchers/capture.js.map +1 -1
  222. package/dist/lib/fetchers/confluence.d.ts +2 -2
  223. package/dist/lib/fetchers/confluence.d.ts.map +1 -1
  224. package/dist/lib/fetchers/confluence.js.map +1 -1
  225. package/dist/lib/fetchers/git.d.ts +1 -0
  226. package/dist/lib/fetchers/git.d.ts.map +1 -1
  227. package/dist/lib/fetchers/git.js +3 -1
  228. package/dist/lib/fetchers/git.js.map +1 -1
  229. package/dist/lib/fetchers/github.d.ts +44 -5
  230. package/dist/lib/fetchers/github.d.ts.map +1 -1
  231. package/dist/lib/fetchers/github.js +122 -5
  232. package/dist/lib/fetchers/github.js.map +1 -1
  233. package/dist/lib/fetchers/gitlab.d.ts +2 -2
  234. package/dist/lib/fetchers/gitlab.d.ts.map +1 -1
  235. package/dist/lib/fetchers/gitlab.js.map +1 -1
  236. package/dist/lib/fetchers/jira.d.ts +2 -2
  237. package/dist/lib/fetchers/jira.d.ts.map +1 -1
  238. package/dist/lib/fetchers/jira.js.map +1 -1
  239. package/dist/lib/fetchers/linear.d.ts +2 -2
  240. package/dist/lib/fetchers/linear.d.ts.map +1 -1
  241. package/dist/lib/fetchers/linear.js.map +1 -1
  242. package/dist/lib/fetchers/notion.d.ts +2 -2
  243. package/dist/lib/fetchers/notion.d.ts.map +1 -1
  244. package/dist/lib/fetchers/notion.js.map +1 -1
  245. package/dist/lib/fetchers/slack.d.ts +2 -3
  246. package/dist/lib/fetchers/slack.d.ts.map +1 -1
  247. package/dist/lib/fetchers/slack.js.map +1 -1
  248. package/dist/lib/fetchers/teams.d.ts +2 -2
  249. package/dist/lib/fetchers/teams.d.ts.map +1 -1
  250. package/dist/lib/fetchers/teams.js.map +1 -1
  251. package/dist/lib/fetchers/zoom.d.ts +2 -2
  252. package/dist/lib/fetchers/zoom.d.ts.map +1 -1
  253. package/dist/lib/fetchers/zoom.js.map +1 -1
  254. package/dist/lib/gateway-client.d.ts +40 -14
  255. package/dist/lib/gateway-client.d.ts.map +1 -1
  256. package/dist/lib/gateway-client.js +47 -19
  257. package/dist/lib/gateway-client.js.map +1 -1
  258. package/dist/lib/github-text.d.ts +3 -0
  259. package/dist/lib/github-text.d.ts.map +1 -0
  260. package/dist/lib/github-text.js +18 -0
  261. package/dist/lib/github-text.js.map +1 -0
  262. package/dist/lib/hook-context.d.ts +10 -0
  263. package/dist/lib/hook-context.d.ts.map +1 -1
  264. package/dist/lib/hook-context.js +14 -0
  265. package/dist/lib/hook-context.js.map +1 -1
  266. package/dist/lib/import-defaults.d.ts +39 -23
  267. package/dist/lib/import-defaults.d.ts.map +1 -1
  268. package/dist/lib/import-defaults.js +28 -26
  269. package/dist/lib/import-defaults.js.map +1 -1
  270. package/dist/lib/invite-prompt.d.ts +4 -4
  271. package/dist/lib/invite-prompt.d.ts.map +1 -1
  272. package/dist/lib/invite-prompt.js +4 -4
  273. package/dist/lib/invite-prompt.js.map +1 -1
  274. package/dist/lib/invite-settings.d.ts +18 -0
  275. package/dist/lib/invite-settings.d.ts.map +1 -0
  276. package/dist/lib/invite-settings.js +29 -0
  277. package/dist/lib/invite-settings.js.map +1 -0
  278. package/dist/lib/join-flow.d.ts +60 -0
  279. package/dist/lib/join-flow.d.ts.map +1 -0
  280. package/dist/lib/join-flow.js +282 -0
  281. package/dist/lib/join-flow.js.map +1 -0
  282. package/dist/lib/launch/adapters/aider.d.ts +17 -0
  283. package/dist/lib/launch/adapters/aider.d.ts.map +1 -0
  284. package/dist/lib/launch/adapters/aider.js +30 -0
  285. package/dist/lib/launch/adapters/aider.js.map +1 -0
  286. package/dist/lib/launch/adapters/auggie.d.ts +18 -0
  287. package/dist/lib/launch/adapters/auggie.d.ts.map +1 -0
  288. package/dist/lib/launch/adapters/auggie.js +34 -0
  289. package/dist/lib/launch/adapters/auggie.js.map +1 -0
  290. package/dist/lib/launch/adapters/cline.d.ts +10 -0
  291. package/dist/lib/launch/adapters/cline.d.ts.map +1 -0
  292. package/dist/lib/launch/adapters/cline.js +41 -0
  293. package/dist/lib/launch/adapters/cline.js.map +1 -0
  294. package/dist/lib/launch/adapters/continue.d.ts +22 -0
  295. package/dist/lib/launch/adapters/continue.d.ts.map +1 -0
  296. package/dist/lib/launch/adapters/continue.js +46 -0
  297. package/dist/lib/launch/adapters/continue.js.map +1 -0
  298. package/dist/lib/launch/adapters/gemini-cli.d.ts +13 -14
  299. package/dist/lib/launch/adapters/gemini-cli.d.ts.map +1 -1
  300. package/dist/lib/launch/adapters/gemini-cli.js +38 -53
  301. package/dist/lib/launch/adapters/gemini-cli.js.map +1 -1
  302. package/dist/lib/launch/adapters/goose.d.ts +20 -0
  303. package/dist/lib/launch/adapters/goose.d.ts.map +1 -0
  304. package/dist/lib/launch/adapters/goose.js +47 -0
  305. package/dist/lib/launch/adapters/goose.js.map +1 -0
  306. package/dist/lib/launch/adapters/notes.d.ts +7 -0
  307. package/dist/lib/launch/adapters/notes.d.ts.map +1 -0
  308. package/dist/lib/launch/adapters/notes.js +5 -0
  309. package/dist/lib/launch/adapters/notes.js.map +1 -0
  310. package/dist/lib/launch/agents.d.ts +2 -0
  311. package/dist/lib/launch/agents.d.ts.map +1 -1
  312. package/dist/lib/launch/agents.js +3 -1
  313. package/dist/lib/launch/agents.js.map +1 -1
  314. package/dist/lib/launch/auggie-state.d.ts +25 -0
  315. package/dist/lib/launch/auggie-state.d.ts.map +1 -0
  316. package/dist/lib/launch/auggie-state.js +74 -0
  317. package/dist/lib/launch/auggie-state.js.map +1 -0
  318. package/dist/lib/launch/cline-state.d.ts +32 -0
  319. package/dist/lib/launch/cline-state.d.ts.map +1 -0
  320. package/dist/lib/launch/cline-state.js +108 -0
  321. package/dist/lib/launch/cline-state.js.map +1 -0
  322. package/dist/lib/launch/config-writes.d.ts +4 -0
  323. package/dist/lib/launch/config-writes.d.ts.map +1 -1
  324. package/dist/lib/launch/config-writes.js +8 -3
  325. package/dist/lib/launch/config-writes.js.map +1 -1
  326. package/dist/lib/launch/continue-state.d.ts +41 -0
  327. package/dist/lib/launch/continue-state.d.ts.map +1 -0
  328. package/dist/lib/launch/continue-state.js +142 -0
  329. package/dist/lib/launch/continue-state.js.map +1 -0
  330. package/dist/lib/launch/detect.d.ts.map +1 -1
  331. package/dist/lib/launch/detect.js +3 -1
  332. package/dist/lib/launch/detect.js.map +1 -1
  333. package/dist/lib/launch/gemini-state.d.ts +26 -20
  334. package/dist/lib/launch/gemini-state.d.ts.map +1 -1
  335. package/dist/lib/launch/gemini-state.js +95 -37
  336. package/dist/lib/launch/gemini-state.js.map +1 -1
  337. package/dist/lib/launch/gemini-system-file.d.ts +17 -0
  338. package/dist/lib/launch/gemini-system-file.d.ts.map +1 -0
  339. package/dist/lib/launch/gemini-system-file.js +55 -0
  340. package/dist/lib/launch/gemini-system-file.js.map +1 -0
  341. package/dist/lib/launch/gemini-trust.d.ts +3 -1
  342. package/dist/lib/launch/gemini-trust.d.ts.map +1 -1
  343. package/dist/lib/launch/gemini-trust.js +10 -3
  344. package/dist/lib/launch/gemini-trust.js.map +1 -1
  345. package/dist/lib/launch/goose-state.d.ts +53 -0
  346. package/dist/lib/launch/goose-state.d.ts.map +1 -0
  347. package/dist/lib/launch/goose-state.js +137 -0
  348. package/dist/lib/launch/goose-state.js.map +1 -0
  349. package/dist/lib/launch/launch-files.d.ts.map +1 -1
  350. package/dist/lib/launch/launch-files.js +3 -2
  351. package/dist/lib/launch/launch-files.js.map +1 -1
  352. package/dist/lib/launch/launch.d.ts +17 -2
  353. package/dist/lib/launch/launch.d.ts.map +1 -1
  354. package/dist/lib/launch/launch.js +36 -3
  355. package/dist/lib/launch/launch.js.map +1 -1
  356. package/dist/lib/launch/mcp-child-env.d.ts +30 -0
  357. package/dist/lib/launch/mcp-child-env.d.ts.map +1 -0
  358. package/dist/lib/launch/mcp-child-env.js +154 -0
  359. package/dist/lib/launch/mcp-child-env.js.map +1 -0
  360. package/dist/lib/launch/pick-agent.d.ts.map +1 -1
  361. package/dist/lib/launch/pick-agent.js +4 -4
  362. package/dist/lib/launch/pick-agent.js.map +1 -1
  363. package/dist/lib/launch/picker-options.d.ts.map +1 -1
  364. package/dist/lib/launch/picker-options.js +7 -2
  365. package/dist/lib/launch/picker-options.js.map +1 -1
  366. package/dist/lib/launch/registry/agents/aider.d.ts +3 -0
  367. package/dist/lib/launch/registry/agents/aider.d.ts.map +1 -0
  368. package/dist/lib/launch/registry/agents/aider.js +13 -0
  369. package/dist/lib/launch/registry/agents/aider.js.map +1 -0
  370. package/dist/lib/launch/registry/agents/auggie.d.ts +3 -0
  371. package/dist/lib/launch/registry/agents/auggie.d.ts.map +1 -0
  372. package/dist/lib/launch/registry/agents/auggie.js +11 -0
  373. package/dist/lib/launch/registry/agents/auggie.js.map +1 -0
  374. package/dist/lib/launch/registry/agents/cline.d.ts +3 -0
  375. package/dist/lib/launch/registry/agents/cline.d.ts.map +1 -0
  376. package/dist/lib/launch/registry/agents/cline.js +19 -0
  377. package/dist/lib/launch/registry/agents/cline.js.map +1 -0
  378. package/dist/lib/launch/registry/agents/continue.d.ts +3 -0
  379. package/dist/lib/launch/registry/agents/continue.d.ts.map +1 -0
  380. package/dist/lib/launch/registry/agents/continue.js +20 -0
  381. package/dist/lib/launch/registry/agents/continue.js.map +1 -0
  382. package/dist/lib/launch/registry/agents/gemini-cli.js +2 -2
  383. package/dist/lib/launch/registry/agents/gemini-cli.js.map +1 -1
  384. package/dist/lib/launch/registry/agents/goose.d.ts +3 -0
  385. package/dist/lib/launch/registry/agents/goose.d.ts.map +1 -0
  386. package/dist/lib/launch/registry/agents/goose.js +20 -0
  387. package/dist/lib/launch/registry/agents/goose.js.map +1 -0
  388. package/dist/lib/launch/registry/index.d.ts +1 -1
  389. package/dist/lib/launch/registry/index.d.ts.map +1 -1
  390. package/dist/lib/launch/registry/index.js +7 -2
  391. package/dist/lib/launch/registry/index.js.map +1 -1
  392. package/dist/lib/launch/registry/types.d.ts +12 -1
  393. package/dist/lib/launch/registry/types.d.ts.map +1 -1
  394. package/dist/lib/launch/strict-entry.d.ts +22 -2
  395. package/dist/lib/launch/strict-entry.d.ts.map +1 -1
  396. package/dist/lib/launch/strict-entry.js +80 -2
  397. package/dist/lib/launch/strict-entry.js.map +1 -1
  398. package/dist/lib/launch/yaml-scan.d.ts +59 -0
  399. package/dist/lib/launch/yaml-scan.d.ts.map +1 -0
  400. package/dist/lib/launch/yaml-scan.js +275 -0
  401. package/dist/lib/launch/yaml-scan.js.map +1 -0
  402. package/dist/lib/lead-prompt.d.ts +106 -0
  403. package/dist/lib/lead-prompt.d.ts.map +1 -0
  404. package/dist/lib/lead-prompt.js +175 -0
  405. package/dist/lib/lead-prompt.js.map +1 -0
  406. package/dist/lib/local-candidate-classify.d.ts +26 -0
  407. package/dist/lib/local-candidate-classify.d.ts.map +1 -0
  408. package/dist/lib/local-candidate-classify.js +53 -0
  409. package/dist/lib/local-candidate-classify.js.map +1 -0
  410. package/dist/lib/local-db-epoch.d.ts +4 -0
  411. package/dist/lib/local-db-epoch.d.ts.map +1 -0
  412. package/dist/lib/local-db-epoch.js +19 -0
  413. package/dist/lib/local-db-epoch.js.map +1 -0
  414. package/dist/lib/local-db-migrate.d.ts +85 -0
  415. package/dist/lib/local-db-migrate.d.ts.map +1 -0
  416. package/dist/lib/local-db-migrate.js +528 -0
  417. package/dist/lib/local-db-migrate.js.map +1 -0
  418. package/dist/lib/local-db-v10.d.ts +28 -0
  419. package/dist/lib/local-db-v10.d.ts.map +1 -0
  420. package/dist/lib/local-db-v10.js +49 -0
  421. package/dist/lib/local-db-v10.js.map +1 -0
  422. package/dist/lib/local-db-v11.d.ts +24 -0
  423. package/dist/lib/local-db-v11.d.ts.map +1 -0
  424. package/dist/lib/local-db-v11.js +25 -0
  425. package/dist/lib/local-db-v11.js.map +1 -0
  426. package/dist/lib/local-db-v12.d.ts +17 -0
  427. package/dist/lib/local-db-v12.d.ts.map +1 -0
  428. package/dist/lib/local-db-v12.js +8 -0
  429. package/dist/lib/local-db-v12.js.map +1 -0
  430. package/dist/lib/local-db-v7.d.ts +30 -0
  431. package/dist/lib/local-db-v7.d.ts.map +1 -0
  432. package/dist/lib/local-db-v7.js +285 -0
  433. package/dist/lib/local-db-v7.js.map +1 -0
  434. package/dist/lib/local-db-v8.d.ts +22 -0
  435. package/dist/lib/local-db-v8.d.ts.map +1 -0
  436. package/dist/lib/local-db-v8.js +33 -0
  437. package/dist/lib/local-db-v8.js.map +1 -0
  438. package/dist/lib/local-db-v9.d.ts +10 -0
  439. package/dist/lib/local-db-v9.d.ts.map +1 -0
  440. package/dist/lib/local-db-v9.js +8 -0
  441. package/dist/lib/local-db-v9.js.map +1 -0
  442. package/dist/lib/local-db.d.ts +73 -23
  443. package/dist/lib/local-db.d.ts.map +1 -1
  444. package/dist/lib/local-db.js +225 -375
  445. package/dist/lib/local-db.js.map +1 -1
  446. package/dist/lib/local-embeddings.d.ts.map +1 -1
  447. package/dist/lib/local-embeddings.js +2 -2
  448. package/dist/lib/local-embeddings.js.map +1 -1
  449. package/dist/lib/local-gateway-client.d.ts +31 -87
  450. package/dist/lib/local-gateway-client.d.ts.map +1 -1
  451. package/dist/lib/local-gateway-client.js +209 -187
  452. package/dist/lib/local-gateway-client.js.map +1 -1
  453. package/dist/lib/local-ingest.d.ts +131 -0
  454. package/dist/lib/local-ingest.d.ts.map +1 -0
  455. package/dist/lib/local-ingest.js +81 -0
  456. package/dist/lib/local-ingest.js.map +1 -0
  457. package/dist/lib/local-link-pass.d.ts +15 -0
  458. package/dist/lib/local-link-pass.d.ts.map +1 -0
  459. package/dist/lib/local-link-pass.js +57 -0
  460. package/dist/lib/local-link-pass.js.map +1 -0
  461. package/dist/lib/local-llm.d.ts +1 -1
  462. package/dist/lib/local-llm.d.ts.map +1 -1
  463. package/dist/lib/local-llm.js +3 -2
  464. package/dist/lib/local-llm.js.map +1 -1
  465. package/dist/lib/local-mode.d.ts +9 -2
  466. package/dist/lib/local-mode.d.ts.map +1 -1
  467. package/dist/lib/local-mode.js +27 -7
  468. package/dist/lib/local-mode.js.map +1 -1
  469. package/dist/lib/local-provenance.d.ts +14 -0
  470. package/dist/lib/local-provenance.d.ts.map +1 -0
  471. package/dist/lib/local-provenance.js +14 -0
  472. package/dist/lib/local-provenance.js.map +1 -0
  473. package/dist/lib/local-relationship-classifier.d.ts +4 -0
  474. package/dist/lib/local-relationship-classifier.d.ts.map +1 -1
  475. package/dist/lib/local-relationship-classifier.js +9 -4
  476. package/dist/lib/local-relationship-classifier.js.map +1 -1
  477. package/dist/lib/local-relink.d.ts +59 -0
  478. package/dist/lib/local-relink.d.ts.map +1 -0
  479. package/dist/lib/local-relink.js +171 -0
  480. package/dist/lib/local-relink.js.map +1 -0
  481. package/dist/lib/local-set-classifier.d.ts +36 -0
  482. package/dist/lib/local-set-classifier.d.ts.map +1 -0
  483. package/dist/lib/local-set-classifier.js +81 -0
  484. package/dist/lib/local-set-classifier.js.map +1 -0
  485. package/dist/lib/local-snapshot-loader.d.ts +29 -0
  486. package/dist/lib/local-snapshot-loader.d.ts.map +1 -0
  487. package/dist/lib/local-snapshot-loader.js +108 -0
  488. package/dist/lib/local-snapshot-loader.js.map +1 -0
  489. package/dist/lib/local-thresholds.d.ts +70 -0
  490. package/dist/lib/local-thresholds.d.ts.map +1 -0
  491. package/dist/lib/local-thresholds.js +79 -0
  492. package/dist/lib/local-thresholds.js.map +1 -0
  493. package/dist/lib/login-flow.d.ts +15 -0
  494. package/dist/lib/login-flow.d.ts.map +1 -1
  495. package/dist/lib/login-flow.js +80 -4
  496. package/dist/lib/login-flow.js.map +1 -1
  497. package/dist/lib/mcp/mark-tool.d.ts +27 -0
  498. package/dist/lib/mcp/mark-tool.d.ts.map +1 -0
  499. package/dist/lib/mcp/mark-tool.js +103 -0
  500. package/dist/lib/mcp/mark-tool.js.map +1 -0
  501. package/dist/lib/mcp/share-status-tool.d.ts +13 -0
  502. package/dist/lib/mcp/share-status-tool.d.ts.map +1 -0
  503. package/dist/lib/mcp/share-status-tool.js +116 -0
  504. package/dist/lib/mcp/share-status-tool.js.map +1 -0
  505. package/dist/lib/mcp/share-tool.d.ts +50 -0
  506. package/dist/lib/mcp/share-tool.d.ts.map +1 -0
  507. package/dist/lib/mcp/share-tool.js +174 -0
  508. package/dist/lib/mcp/share-tool.js.map +1 -0
  509. package/dist/lib/mcp/tool-rules.d.ts +30 -0
  510. package/dist/lib/mcp/tool-rules.d.ts.map +1 -0
  511. package/dist/lib/mcp/tool-rules.js +84 -0
  512. package/dist/lib/mcp/tool-rules.js.map +1 -0
  513. package/dist/lib/mcp-backfill.d.ts +89 -0
  514. package/dist/lib/mcp-backfill.d.ts.map +1 -0
  515. package/dist/lib/mcp-backfill.js +194 -0
  516. package/dist/lib/mcp-backfill.js.map +1 -0
  517. package/dist/lib/mcp-scope.d.ts +90 -0
  518. package/dist/lib/mcp-scope.d.ts.map +1 -0
  519. package/dist/lib/mcp-scope.js +125 -0
  520. package/dist/lib/mcp-scope.js.map +1 -0
  521. package/dist/lib/mcp-sync.d.ts +64 -0
  522. package/dist/lib/mcp-sync.d.ts.map +1 -0
  523. package/dist/lib/mcp-sync.js +183 -0
  524. package/dist/lib/mcp-sync.js.map +1 -0
  525. package/dist/lib/model-cache.d.ts +10 -0
  526. package/dist/lib/model-cache.d.ts.map +1 -0
  527. package/dist/lib/model-cache.js +35 -0
  528. package/dist/lib/model-cache.js.map +1 -0
  529. package/dist/lib/next-step.d.ts.map +1 -1
  530. package/dist/lib/next-step.js +2 -1
  531. package/dist/lib/next-step.js.map +1 -1
  532. package/dist/lib/personal-import.d.ts +7 -0
  533. package/dist/lib/personal-import.d.ts.map +1 -1
  534. package/dist/lib/personal-import.js +13 -1
  535. package/dist/lib/personal-import.js.map +1 -1
  536. package/dist/lib/private-files.d.ts +33 -0
  537. package/dist/lib/private-files.d.ts.map +1 -0
  538. package/dist/lib/private-files.js +96 -0
  539. package/dist/lib/private-files.js.map +1 -0
  540. package/dist/lib/redaction-notice.d.ts +7 -0
  541. package/dist/lib/redaction-notice.d.ts.map +1 -0
  542. package/dist/lib/redaction-notice.js +32 -0
  543. package/dist/lib/redaction-notice.js.map +1 -0
  544. package/dist/lib/relink-estimate.d.ts +16 -0
  545. package/dist/lib/relink-estimate.d.ts.map +1 -0
  546. package/dist/lib/relink-estimate.js +30 -0
  547. package/dist/lib/relink-estimate.js.map +1 -0
  548. package/dist/lib/resolve-env.d.ts +15 -1
  549. package/dist/lib/resolve-env.d.ts.map +1 -1
  550. package/dist/lib/resolve-env.js +27 -7
  551. package/dist/lib/resolve-env.js.map +1 -1
  552. package/dist/lib/safe-config-write.d.ts.map +1 -1
  553. package/dist/lib/safe-config-write.js +39 -2
  554. package/dist/lib/safe-config-write.js.map +1 -1
  555. package/dist/lib/scope-choices.d.ts +51 -0
  556. package/dist/lib/scope-choices.d.ts.map +1 -0
  557. package/dist/lib/scope-choices.js +193 -0
  558. package/dist/lib/scope-choices.js.map +1 -0
  559. package/dist/lib/scope-connect.d.ts +82 -0
  560. package/dist/lib/scope-connect.d.ts.map +1 -0
  561. package/dist/lib/scope-connect.js +258 -0
  562. package/dist/lib/scope-connect.js.map +1 -0
  563. package/dist/lib/scope-defaults.d.ts +3 -0
  564. package/dist/lib/scope-defaults.d.ts.map +1 -0
  565. package/dist/lib/scope-defaults.js +44 -0
  566. package/dist/lib/scope-defaults.js.map +1 -0
  567. package/dist/lib/scope-real.d.ts +280 -0
  568. package/dist/lib/scope-real.d.ts.map +1 -0
  569. package/dist/lib/scope-real.js +58 -0
  570. package/dist/lib/scope-real.js.map +1 -0
  571. package/dist/lib/scope-values.d.ts +76 -0
  572. package/dist/lib/scope-values.d.ts.map +1 -0
  573. package/dist/lib/scope-values.js +169 -0
  574. package/dist/lib/scope-values.js.map +1 -0
  575. package/dist/lib/scope.d.ts +161 -0
  576. package/dist/lib/scope.d.ts.map +1 -0
  577. package/dist/lib/scope.js +323 -0
  578. package/dist/lib/scope.js.map +1 -0
  579. package/dist/lib/setup-route.d.ts +4 -2
  580. package/dist/lib/setup-route.d.ts.map +1 -1
  581. package/dist/lib/setup-route.js +12 -6
  582. package/dist/lib/setup-route.js.map +1 -1
  583. package/dist/lib/share/approval.d.ts +71 -0
  584. package/dist/lib/share/approval.d.ts.map +1 -0
  585. package/dist/lib/share/approval.js +139 -0
  586. package/dist/lib/share/approval.js.map +1 -0
  587. package/dist/lib/share/approve-link.d.ts +31 -0
  588. package/dist/lib/share/approve-link.d.ts.map +1 -0
  589. package/dist/lib/share/approve-link.js +46 -0
  590. package/dist/lib/share/approve-link.js.map +1 -0
  591. package/dist/lib/share/browser-flow.d.ts +85 -0
  592. package/dist/lib/share/browser-flow.d.ts.map +1 -0
  593. package/dist/lib/share/browser-flow.js +168 -0
  594. package/dist/lib/share/browser-flow.js.map +1 -0
  595. package/dist/lib/share/command.d.ts +65 -0
  596. package/dist/lib/share/command.d.ts.map +1 -0
  597. package/dist/lib/share/command.js +278 -0
  598. package/dist/lib/share/command.js.map +1 -0
  599. package/dist/lib/share/delivery-options.d.ts +15 -0
  600. package/dist/lib/share/delivery-options.d.ts.map +1 -0
  601. package/dist/lib/share/delivery-options.js +16 -0
  602. package/dist/lib/share/delivery-options.js.map +1 -0
  603. package/dist/lib/share/delivery.d.ts +83 -0
  604. package/dist/lib/share/delivery.d.ts.map +1 -0
  605. package/dist/lib/share/delivery.js +134 -0
  606. package/dist/lib/share/delivery.js.map +1 -0
  607. package/dist/lib/share/envelope.d.ts +61 -0
  608. package/dist/lib/share/envelope.d.ts.map +1 -0
  609. package/dist/lib/share/envelope.js +99 -0
  610. package/dist/lib/share/envelope.js.map +1 -0
  611. package/dist/lib/share/ledger.d.ts +59 -0
  612. package/dist/lib/share/ledger.d.ts.map +1 -0
  613. package/dist/lib/share/ledger.js +137 -0
  614. package/dist/lib/share/ledger.js.map +1 -0
  615. package/dist/lib/share/payload.d.ts +101 -0
  616. package/dist/lib/share/payload.d.ts.map +1 -0
  617. package/dist/lib/share/payload.js +147 -0
  618. package/dist/lib/share/payload.js.map +1 -0
  619. package/dist/lib/share/pending.d.ts +94 -0
  620. package/dist/lib/share/pending.d.ts.map +1 -0
  621. package/dist/lib/share/pending.js +256 -0
  622. package/dist/lib/share/pending.js.map +1 -0
  623. package/dist/lib/share/preview.d.ts +22 -0
  624. package/dist/lib/share/preview.d.ts.map +1 -0
  625. package/dist/lib/share/preview.js +74 -0
  626. package/dist/lib/share/preview.js.map +1 -0
  627. package/dist/lib/share/qr.d.ts +13 -0
  628. package/dist/lib/share/qr.d.ts.map +1 -0
  629. package/dist/lib/share/qr.js +77 -0
  630. package/dist/lib/share/qr.js.map +1 -0
  631. package/dist/lib/share/requests-client.d.ts +63 -0
  632. package/dist/lib/share/requests-client.d.ts.map +1 -0
  633. package/dist/lib/share/requests-client.js +69 -0
  634. package/dist/lib/share/requests-client.js.map +1 -0
  635. package/dist/lib/share/run.d.ts +134 -0
  636. package/dist/lib/share/run.d.ts.map +1 -0
  637. package/dist/lib/share/run.js +278 -0
  638. package/dist/lib/share/run.js.map +1 -0
  639. package/dist/lib/share/salt.d.ts +2 -0
  640. package/dist/lib/share/salt.d.ts.map +1 -0
  641. package/dist/lib/share/salt.js +44 -0
  642. package/dist/lib/share/salt.js.map +1 -0
  643. package/dist/lib/share/secret-patterns.json +100 -0
  644. package/dist/lib/share/secret-scan.d.ts +24 -0
  645. package/dist/lib/share/secret-scan.d.ts.map +1 -0
  646. package/dist/lib/share/secret-scan.js +116 -0
  647. package/dist/lib/share/secret-scan.js.map +1 -0
  648. package/dist/lib/share/target.d.ts +38 -0
  649. package/dist/lib/share/target.d.ts.map +1 -0
  650. package/dist/lib/share/target.js +80 -0
  651. package/dist/lib/share/target.js.map +1 -0
  652. package/dist/lib/share/tty.d.ts +12 -0
  653. package/dist/lib/share/tty.d.ts.map +1 -0
  654. package/dist/lib/share/tty.js +102 -0
  655. package/dist/lib/share/tty.js.map +1 -0
  656. package/dist/lib/share/visible.d.ts +4 -0
  657. package/dist/lib/share/visible.d.ts.map +1 -0
  658. package/dist/lib/share/visible.js +30 -0
  659. package/dist/lib/share/visible.js.map +1 -0
  660. package/dist/lib/share/wire.d.ts +98 -0
  661. package/dist/lib/share/wire.d.ts.map +1 -0
  662. package/dist/lib/share/wire.js +43 -0
  663. package/dist/lib/share/wire.js.map +1 -0
  664. package/dist/lib/similarity/embedding-matrix.d.ts +64 -0
  665. package/dist/lib/similarity/embedding-matrix.d.ts.map +1 -0
  666. package/dist/lib/similarity/embedding-matrix.js +119 -0
  667. package/dist/lib/similarity/embedding-matrix.js.map +1 -0
  668. package/dist/lib/since-flag.d.ts +11 -0
  669. package/dist/lib/since-flag.d.ts.map +1 -0
  670. package/dist/lib/since-flag.js +24 -0
  671. package/dist/lib/since-flag.js.map +1 -0
  672. package/dist/lib/since.d.ts +59 -0
  673. package/dist/lib/since.d.ts.map +1 -0
  674. package/dist/lib/since.js +86 -0
  675. package/dist/lib/since.js.map +1 -0
  676. package/dist/lib/source-key.d.ts +13 -0
  677. package/dist/lib/source-key.d.ts.map +1 -0
  678. package/dist/lib/source-key.js +60 -0
  679. package/dist/lib/source-key.js.map +1 -0
  680. package/dist/lib/source-sync-state.d.ts +12 -0
  681. package/dist/lib/source-sync-state.d.ts.map +1 -0
  682. package/dist/lib/source-sync-state.js +45 -0
  683. package/dist/lib/source-sync-state.js.map +1 -0
  684. package/dist/lib/startup-backfill-track.d.ts +2 -0
  685. package/dist/lib/startup-backfill-track.d.ts.map +1 -0
  686. package/dist/lib/startup-backfill-track.js +6 -0
  687. package/dist/lib/startup-backfill-track.js.map +1 -0
  688. package/dist/lib/startup-xdg.d.ts +2 -0
  689. package/dist/lib/startup-xdg.d.ts.map +1 -0
  690. package/dist/lib/startup-xdg.js +9 -0
  691. package/dist/lib/startup-xdg.js.map +1 -0
  692. package/dist/lib/sync/after-connect.d.ts +2 -0
  693. package/dist/lib/sync/after-connect.d.ts.map +1 -0
  694. package/dist/lib/sync/after-connect.js +18 -0
  695. package/dist/lib/sync/after-connect.js.map +1 -0
  696. package/dist/lib/sync/bg-claim.d.ts +14 -0
  697. package/dist/lib/sync/bg-claim.d.ts.map +1 -0
  698. package/dist/lib/sync/bg-claim.js +97 -0
  699. package/dist/lib/sync/bg-claim.js.map +1 -0
  700. package/dist/lib/sync/blocked.d.ts +8 -0
  701. package/dist/lib/sync/blocked.d.ts.map +1 -0
  702. package/dist/lib/sync/blocked.js +45 -0
  703. package/dist/lib/sync/blocked.js.map +1 -0
  704. package/dist/lib/sync/classify.d.ts +34 -0
  705. package/dist/lib/sync/classify.d.ts.map +1 -0
  706. package/dist/lib/sync/classify.js +93 -0
  707. package/dist/lib/sync/classify.js.map +1 -0
  708. package/dist/lib/sync/drain.d.ts +16 -0
  709. package/dist/lib/sync/drain.d.ts.map +1 -0
  710. package/dist/lib/sync/drain.js +33 -0
  711. package/dist/lib/sync/drain.js.map +1 -0
  712. package/dist/lib/sync/forget.d.ts +12 -0
  713. package/dist/lib/sync/forget.d.ts.map +1 -0
  714. package/dist/lib/sync/forget.js +32 -0
  715. package/dist/lib/sync/forget.js.map +1 -0
  716. package/dist/lib/sync/launch-hook.d.ts +42 -0
  717. package/dist/lib/sync/launch-hook.d.ts.map +1 -0
  718. package/dist/lib/sync/launch-hook.js +117 -0
  719. package/dist/lib/sync/launch-hook.js.map +1 -0
  720. package/dist/lib/sync/lock.d.ts +35 -0
  721. package/dist/lib/sync/lock.d.ts.map +1 -0
  722. package/dist/lib/sync/lock.js +175 -0
  723. package/dist/lib/sync/lock.js.map +1 -0
  724. package/dist/lib/sync/purge.d.ts +38 -0
  725. package/dist/lib/sync/purge.d.ts.map +1 -0
  726. package/dist/lib/sync/purge.js +61 -0
  727. package/dist/lib/sync/purge.js.map +1 -0
  728. package/dist/lib/sync/real-env.d.ts +265 -0
  729. package/dist/lib/sync/real-env.d.ts.map +1 -0
  730. package/dist/lib/sync/real-env.js +47 -0
  731. package/dist/lib/sync/real-env.js.map +1 -0
  732. package/dist/lib/sync/relink.d.ts +14 -0
  733. package/dist/lib/sync/relink.d.ts.map +1 -0
  734. package/dist/lib/sync/relink.js +36 -0
  735. package/dist/lib/sync/relink.js.map +1 -0
  736. package/dist/lib/sync/report.d.ts +3 -0
  737. package/dist/lib/sync/report.d.ts.map +1 -0
  738. package/dist/lib/sync/report.js +54 -0
  739. package/dist/lib/sync/report.js.map +1 -0
  740. package/dist/lib/sync/run-all.d.ts +23 -0
  741. package/dist/lib/sync/run-all.d.ts.map +1 -0
  742. package/dist/lib/sync/run-all.js +30 -0
  743. package/dist/lib/sync/run-all.js.map +1 -0
  744. package/dist/lib/sync/run-source.d.ts +73 -0
  745. package/dist/lib/sync/run-source.d.ts.map +1 -0
  746. package/dist/lib/sync/run-source.js +262 -0
  747. package/dist/lib/sync/run-source.js.map +1 -0
  748. package/dist/lib/sync/safe-read.d.ts +4 -0
  749. package/dist/lib/sync/safe-read.d.ts.map +1 -0
  750. package/dist/lib/sync/safe-read.js +40 -0
  751. package/dist/lib/sync/safe-read.js.map +1 -0
  752. package/dist/lib/sync/should-background-sync.d.ts +31 -0
  753. package/dist/lib/sync/should-background-sync.d.ts.map +1 -0
  754. package/dist/lib/sync/should-background-sync.js +69 -0
  755. package/dist/lib/sync/should-background-sync.js.map +1 -0
  756. package/dist/lib/sync/source-ids.d.ts +10 -0
  757. package/dist/lib/sync/source-ids.d.ts.map +1 -0
  758. package/dist/lib/sync/source-ids.js +9 -0
  759. package/dist/lib/sync/source-ids.js.map +1 -0
  760. package/dist/lib/sync/sources.d.ts +33 -0
  761. package/dist/lib/sync/sources.d.ts.map +1 -0
  762. package/dist/lib/sync/sources.js +37 -0
  763. package/dist/lib/sync/sources.js.map +1 -0
  764. package/dist/lib/sync/spawn-background.d.ts +27 -0
  765. package/dist/lib/sync/spawn-background.d.ts.map +1 -0
  766. package/dist/lib/sync/spawn-background.js +66 -0
  767. package/dist/lib/sync/spawn-background.js.map +1 -0
  768. package/dist/lib/sync/status.d.ts +57 -0
  769. package/dist/lib/sync/status.d.ts.map +1 -0
  770. package/dist/lib/sync/status.js +166 -0
  771. package/dist/lib/sync/status.js.map +1 -0
  772. package/dist/lib/sync/summary-read.d.ts +19 -0
  773. package/dist/lib/sync/summary-read.d.ts.map +1 -0
  774. package/dist/lib/sync/summary-read.js +39 -0
  775. package/dist/lib/sync/summary-read.js.map +1 -0
  776. package/dist/lib/sync/summary.d.ts +10 -0
  777. package/dist/lib/sync/summary.d.ts.map +1 -0
  778. package/dist/lib/sync/summary.js +80 -0
  779. package/dist/lib/sync/summary.js.map +1 -0
  780. package/dist/lib/sync/sync-state.d.ts +128 -0
  781. package/dist/lib/sync/sync-state.d.ts.map +1 -0
  782. package/dist/lib/sync/sync-state.js +255 -0
  783. package/dist/lib/sync/sync-state.js.map +1 -0
  784. package/dist/lib/sync/telemetry.d.ts +20 -0
  785. package/dist/lib/sync/telemetry.d.ts.map +1 -0
  786. package/dist/lib/sync/telemetry.js +31 -0
  787. package/dist/lib/sync/telemetry.js.map +1 -0
  788. package/dist/lib/sync/threads.d.ts +48 -0
  789. package/dist/lib/sync/threads.d.ts.map +1 -0
  790. package/dist/lib/sync/threads.js +82 -0
  791. package/dist/lib/sync/threads.js.map +1 -0
  792. package/dist/lib/sync/window.d.ts +72 -0
  793. package/dist/lib/sync/window.d.ts.map +1 -0
  794. package/dist/lib/sync/window.js +112 -0
  795. package/dist/lib/sync/window.js.map +1 -0
  796. package/dist/lib/team-cta.d.ts +11 -0
  797. package/dist/lib/team-cta.d.ts.map +1 -0
  798. package/dist/lib/team-cta.js +16 -0
  799. package/dist/lib/team-cta.js.map +1 -0
  800. package/dist/lib/telemetry-ci.d.ts +2 -0
  801. package/dist/lib/telemetry-ci.d.ts.map +1 -0
  802. package/dist/lib/telemetry-ci.js +21 -0
  803. package/dist/lib/telemetry-ci.js.map +1 -0
  804. package/dist/lib/telemetry-consent.d.ts +44 -23
  805. package/dist/lib/telemetry-consent.d.ts.map +1 -1
  806. package/dist/lib/telemetry-consent.js +74 -35
  807. package/dist/lib/telemetry-consent.js.map +1 -1
  808. package/dist/lib/telemetry-env.d.ts +1 -1
  809. package/dist/lib/usage-telemetry.d.ts +89 -24
  810. package/dist/lib/usage-telemetry.d.ts.map +1 -1
  811. package/dist/lib/usage-telemetry.js +283 -76
  812. package/dist/lib/usage-telemetry.js.map +1 -1
  813. package/dist/lib/xdg.d.ts +27 -0
  814. package/dist/lib/xdg.d.ts.map +1 -0
  815. package/dist/lib/xdg.js +56 -0
  816. package/dist/lib/xdg.js.map +1 -0
  817. package/package.json +6 -3
  818. package/dist/commands/push.d.ts +0 -25
  819. package/dist/commands/push.d.ts.map +0 -1
  820. package/dist/commands/push.js +0 -98
  821. package/dist/commands/push.js.map +0 -1
  822. package/dist/lib/personal-email-domains.d.ts +0 -8
  823. package/dist/lib/personal-email-domains.d.ts.map +0 -1
  824. package/dist/lib/personal-email-domains.js +0 -39
  825. package/dist/lib/personal-email-domains.js.map +0 -1
@@ -0,0 +1,66 @@
1
+ /**
2
+ * L5: start `align sync --background ...` as a detached child (Decision 9). Used by `align_sync`
3
+ * (run) here, and by the launch hook and `align_backfill` later. A tool call never runs a bulk
4
+ * fetch in the MCP server's own process: it starts this and returns.
5
+ *
6
+ * "Started" is claimed only after the OS confirmed the child exists (startBackfillChild's rule),
7
+ * stdio is ignored, and the child gets its own process group (`detached`), so closing the
8
+ * terminal or the agent does not take it down; it finishes its current batch and exits.
9
+ *
10
+ * `caller` names who asked: 'mcp' (the default) marks the child as an agent's, so any scope it writes waits for a person; the launch hook
11
+ * passes 'launcher' for the person's own background refresh, which must not carry that mark.
12
+ */
13
+ import os from 'node:os';
14
+ import { backfillChildCommand, startBackfillChild } from '../backfill-state.js';
15
+ import { CHILD_ENV_KEYS, CHILD_ENV_SECRETS, childEnvValue } from '../launch/mcp-child-env.js';
16
+ import { PROVIDER_ENV_VARS } from '../llm-providers.js';
17
+ import { inCi } from '../telemetry-ci.js';
18
+ /** `--delay 0`: an on-demand run (the person or their agent just asked) has no agent start-up to stay out of the way of. */
19
+ export function syncChildArgv(sources, o = {}) {
20
+ return ['sync', '--background', '--delay', String(o.delaySeconds ?? 0), ...sources];
21
+ }
22
+ /** Names a sync child needs that carry no secret and no routing decision: where things live. Passed as they are. */
23
+ const PLAIN_NAMES = [
24
+ 'PATH', 'Path', 'PATHEXT', 'HOME', 'USERPROFILE', 'HOMEDRIVE', 'HOMEPATH', 'APPDATA', 'LOCALAPPDATA', 'ProgramData',
25
+ 'SystemRoot', 'SYSTEMROOT', 'SystemDrive', 'windir', 'COMSPEC', 'TMPDIR', 'TMP', 'TEMP', 'LANG', 'LANGUAGE', 'TZ',
26
+ 'USER', 'USERNAME', 'LOGNAME', 'NO_COLOR',
27
+ // A person's own opt-out must reach the child: it sends telemetry (L7) under the same consent as the launcher.
28
+ 'DO_NOT_TRACK',
29
+ ];
30
+ /**
31
+ * The ALIGN_* names a sync child reads, and nothing else (checked against src/ by a parity test).
32
+ * No ALIGN_LLM_*, ALIGN_TOKEN or provider setting: a sync makes no LLM call and takes connector tokens from the config file.
33
+ */
34
+ export const SYNC_CHILD_ALIGN_NAMES = ['ALIGN_ENV', 'ALIGN_GATEWAY_URL', 'ALIGN_MODEL_CACHE', 'ALIGN_TELEMETRY', 'ALIGN_INGEST_CONCURRENCY', 'ALIGN_DEBUG'];
35
+ /** Names whose VALUE rule lives in mcp-child-env.ts (XDG dirs absolute only; proxies and certs kept unless credentialed or relative; NODE_OPTIONS always blank; CI as is). */
36
+ const RULED_NAMES = CHILD_ENV_KEYS.filter((k) => !k.startsWith('ALIGN_') && !CHILD_ENV_SECRETS.includes(k) && !PROVIDER_ENV_VARS.includes(k));
37
+ /**
38
+ * The environment a background sync child gets: an allow-list, not a copy, and the one list of
39
+ * value rules is mcp-child-env.ts's (so a credentialed proxy URL or a relative certificate path is
40
+ * dropped here exactly as it is for an MCP server). A name that is not listed is not passed, and
41
+ * an empty value is omitted.
42
+ */
43
+ export function syncChildEnv(env) {
44
+ const out = {};
45
+ for (const k of PLAIN_NAMES) {
46
+ const v = env[k];
47
+ if (v !== undefined && v !== '')
48
+ out[k] = v;
49
+ }
50
+ for (const k of [...RULED_NAMES, ...SYNC_CHILD_ALIGN_NAMES]) {
51
+ const v = childEnvValue(k, env);
52
+ if (v !== '')
53
+ out[k] = v;
54
+ }
55
+ // The reduced env drops the CI provider's own variables (JENKINS_URL, BUILD_NUMBER...), which is how CI was recognised. Say it outright.
56
+ if (inCi(env))
57
+ out['CI'] = 'true';
58
+ return out;
59
+ }
60
+ export function startSyncChild(sources, o = {}) {
61
+ const argv = syncChildArgv(sources, o);
62
+ // The child runs from the home directory, never the folder it was started in: scope is decided by the sync layer,
63
+ // and an unattended run must not read a repo's remote and widen itself to that repo's team.
64
+ return (o.start ?? startBackfillChild)('sync', argv, undefined, backfillChildCommand(argv), o.caller ?? 'mcp', syncChildEnv(o.env ?? process.env), os.homedir());
65
+ }
66
+ //# sourceMappingURL=spawn-background.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spawn-background.js","sourceRoot":"","sources":["../../../src/lib/sync/spawn-background.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ import type { BackfillStatus } from '../backfill-state.js';
2
+ import type { SyncStatus } from './sync-state.js';
3
+ export interface SourceStatus {
4
+ id: string;
5
+ label: string;
6
+ connected: boolean;
7
+ /** Whose items it reads: "your own items", "everyone's items in o/r". */
8
+ scope: string;
9
+ /** `blocked`: the scope in force reads nothing until the person acts (Confluence with no spaces chosen), whatever the last run said. */
10
+ status: SyncStatus | 'never' | 'not_connected' | 'blocked';
11
+ /** Stamped only by a COMPLETE run. */
12
+ last_success_at?: string;
13
+ /** Stamped by every run, complete or not. */
14
+ last_attempt_at?: string;
15
+ items_last_run?: number;
16
+ /** GitHub only: items still waiting for their comments and reviews. */
17
+ discussion_pending?: number;
18
+ /** Skip kinds from the last run with how many objects each covered. Never the details, never content. */
19
+ skips: Record<string, number>;
20
+ /** What the last run could not read, in the fetcher's own words, by scope. Never item content or a URL. */
21
+ missing?: string[];
22
+ /** The same hole for PERSISTENT_HOLE_RUNS runs or more: the sync reads the rest and no longer waits for it. */
23
+ persistent_hole?: string;
24
+ /** A read a ceiling cut in date order: how far back it got. Older history is still to come. */
25
+ reached_back_to?: string;
26
+ running?: 'sync' | 'backfill';
27
+ /** Scopes this source was read under before, kept in the graph and not read now. Absent when there are none. */
28
+ older_scopes?: number;
29
+ /** The command or note the person needs, when there is one. */
30
+ next_step?: string;
31
+ }
32
+ export interface StatusDeps {
33
+ dbPath: string;
34
+ isConnected(id: string): boolean;
35
+ /** Is a sync of this source running now (a live, fresh lock)? */
36
+ syncRunning(id: string): boolean;
37
+ /** The latest backfill status file for the source, if any. */
38
+ backfill(id: string): BackfillStatus | null;
39
+ backfillAlive(s: BackfillStatus): boolean;
40
+ /** The `source_sync.scope_key` in force for the source, when the caller can tell (the stored choice). Absent: the most recently started row. */
41
+ activeScopeKey?(id: string): string | undefined;
42
+ /** An agent's team choice waiting for a person to confirm it, in words, or undefined. */
43
+ pendingScope?(id: string): string | undefined;
44
+ /** Why a source reads nothing until the person acts, or undefined (Confluence with no spaces chosen). */
45
+ blockedScope?(id: string): string | undefined;
46
+ }
47
+ export declare const TEAMS_NOTE = "Teams: refresh manually with `align connect teams` (its token lasts about an hour). Only yours until then.";
48
+ export declare function collectStatus(d: StatusDeps): {
49
+ sources: SourceStatus[];
50
+ rows_awaiting_relink: number;
51
+ };
52
+ /** Plain text for the CLI and for the `text` field of the tool result. Connected sources only. */
53
+ export declare function renderStatus(r: {
54
+ sources: SourceStatus[];
55
+ rows_awaiting_relink: number;
56
+ }): string;
57
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/lib/sync/status.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAG3D,OAAO,KAAK,EAAW,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAK3D,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,yEAAyE;IACzE,KAAK,EAAE,MAAM,CAAC;IACd,wIAAwI;IACxI,MAAM,EAAE,UAAU,GAAG,OAAO,GAAG,eAAe,GAAG,SAAS,CAAC;IAC3D,sCAAsC;IACtC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,6CAA6C;IAC7C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,uEAAuE;IACvE,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,yGAAyG;IACzG,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,2GAA2G;IAC3G,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,+GAA+G;IAC/G,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,+FAA+F;IAC/F,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;IAC9B,gHAAgH;IAChH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+DAA+D;IAC/D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;IACjC,iEAAiE;IACjE,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;IACjC,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAAC;IAC5C,aAAa,CAAC,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC;IAC1C,gJAAgJ;IAChJ,cAAc,CAAC,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IAChD,yFAAyF;IACzF,YAAY,CAAC,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IAC9C,yGAAyG;IACzG,YAAY,CAAC,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CAC/C;AAED,eAAO,MAAM,UAAU,+GAA+G,CAAC;AA6CvI,wBAAgB,aAAa,CAAC,CAAC,EAAE,UAAU,GAAG;IAAE,OAAO,EAAE,YAAY,EAAE,CAAC;IAAC,oBAAoB,EAAE,MAAM,CAAA;CAAE,CAiDtG;AAED,kGAAkG;AAClG,wBAAgB,YAAY,CAAC,CAAC,EAAE;IAAE,OAAO,EAAE,YAAY,EAAE,CAAC;IAAC,oBAAoB,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAwBjG"}
@@ -0,0 +1,166 @@
1
+ /**
2
+ * L5: what is the sync doing, per source, with no item content in it. The same facts back
3
+ * `align sync --status` and `align_sync({ action: 'status' })`.
4
+ *
5
+ * Reads only: the source_sync rows, two counts, the lock files and the backfill status files.
6
+ * It opens a short-lived read handle and never creates anything, so a tool call that asks inside
7
+ * an agent stays inside journey 5's 500 ms.
8
+ */
9
+ import { CAPTURE_SOURCES } from '../capture-sources.js';
10
+ import { BACKFILL_SOURCES } from '../mcp-backfill.js';
11
+ import { describeScopeKey, labelOfScopeKey } from '../scope-values.js';
12
+ import { EMBEDDING_MODEL_ID } from '../local-embeddings.js';
13
+ import { PERSISTENT_HOLE_RUNS } from './window.js';
14
+ import { pendingDetailCount, readRows, unfinishedCount } from './sync-state.js';
15
+ export const TEAMS_NOTE = 'Teams: refresh manually with `align connect teams` (its token lasts about an hour). Only yours until then.';
16
+ const label = (id) => CAPTURE_SOURCES[id]?.label ?? id;
17
+ const RANK = { ok: 0, partial: 1, error: 2, needs_reauth: 3 };
18
+ function scopeText(rows) {
19
+ const team = rows.filter((r) => r.scope === 'team');
20
+ if (team.length === 0)
21
+ return 'your own items';
22
+ return team.map((r) => describeScopeKey(r.source_id, r.scope_key, r.scope)).join('; ');
23
+ }
24
+ function scopeLabelOf(r) {
25
+ return r.scope === 'team' ? labelOfScopeKey(r.source_id, r.scope_key) : 'your own items';
26
+ }
27
+ /** The skips that mean something was NOT read (everything but `shape`, which is a note), with which scope they hit. */
28
+ function missingOf(rows) {
29
+ const out = [];
30
+ for (const r of rows) {
31
+ if (r.skips_last_run === null)
32
+ continue;
33
+ let parsed;
34
+ try {
35
+ parsed = JSON.parse(r.skips_last_run);
36
+ }
37
+ catch {
38
+ continue;
39
+ }
40
+ if (!Array.isArray(parsed))
41
+ continue;
42
+ for (const s of parsed) {
43
+ if (typeof s.kind !== 'string' || s.kind === 'shape' || typeof s.count !== 'number' || typeof s.detail !== 'string')
44
+ continue;
45
+ out.push(`${scopeLabelOf(r)}: ${s.count} ${s.detail.slice(0, 160)}`);
46
+ }
47
+ }
48
+ return out.slice(0, 5);
49
+ }
50
+ function skipCounts(rows) {
51
+ const out = {};
52
+ for (const r of rows) {
53
+ if (r.skips_last_run === null)
54
+ continue;
55
+ let parsed;
56
+ try {
57
+ parsed = JSON.parse(r.skips_last_run);
58
+ }
59
+ catch {
60
+ continue;
61
+ }
62
+ if (!Array.isArray(parsed))
63
+ continue;
64
+ for (const s of parsed) {
65
+ if (typeof s.kind === 'string' && typeof s.count === 'number')
66
+ out[s.kind] = (out[s.kind] ?? 0) + s.count;
67
+ }
68
+ }
69
+ return out;
70
+ }
71
+ export function collectStatus(d) {
72
+ const all = readRows(d.dbPath);
73
+ const sources = BACKFILL_SOURCES.map((id) => {
74
+ const connected = d.isConnected(id);
75
+ const everyScope = all.filter((r) => r.source_id === id);
76
+ // Only the scope in force is described; the others are counted. (A refused token is refused for the whole source, so it is read off every row.)
77
+ const wanted = d.activeScopeKey?.(id);
78
+ // The fallback is the row most recently started; a row that never started, or whose stamp is not a date, cannot be "most recent" (NaN
79
+ // compares false both ways and would pick an arbitrary winner).
80
+ const started = (r) => (r.last_started_at === null ? Number.NaN : Date.parse(r.last_started_at));
81
+ const active = everyScope.find((r) => r.scope_key === wanted)
82
+ ?? [...everyScope].filter((r) => !Number.isNaN(started(r))).sort((a, b) => started(b) - started(a))[0]
83
+ ?? everyScope[0];
84
+ const rows = active ? [active] : [];
85
+ // A scope that never started (an agent's request waiting for a person) was never read, so it is not an "older scope kept".
86
+ const older = everyScope.filter((r) => !rows.includes(r) && r.last_started_at !== null).length;
87
+ const worst = everyScope.some((r) => r.status === 'needs_reauth') ? 'needs_reauth' : rows.reduce((w, r) => (w === undefined || RANK[r.status] > RANK[w] ? r.status : w), undefined);
88
+ const lasts = rows.map((r) => r.last_success_at).filter((t) => t !== null && !Number.isNaN(Date.parse(t)));
89
+ const last = lasts.sort((a, b) => Date.parse(b) - Date.parse(a))[0];
90
+ const attempts = rows.map((r) => r.last_attempt_at).filter((t) => t !== null && !Number.isNaN(Date.parse(t)));
91
+ const attempt = attempts.sort((a, b) => Date.parse(b) - Date.parse(a))[0];
92
+ const missing = missingOf(rows);
93
+ const stuck = rows.find((r) => r.hole_streak >= PERSISTENT_HOLE_RUNS && r.hole_sig !== null);
94
+ const items = rows.find((r) => r.items_last_run !== null)?.items_last_run ?? undefined;
95
+ const pending = rows.map((r) => r.pending_until).filter((t) => t !== null && !Number.isNaN(Date.parse(t))).sort()[0];
96
+ const bf = d.backfill(id);
97
+ const s = {
98
+ id, label: label(id), connected, scope: id === 'confluence' && !rows.some((r) => r.scope === 'team') ? 'no spaces chosen' : scopeText(rows),
99
+ status: !connected ? 'not_connected' : worst === 'needs_reauth' || d.blockedScope?.(id) === undefined ? (worst ?? 'never') : 'blocked',
100
+ skips: skipCounts(rows),
101
+ ...(last !== undefined ? { last_success_at: last } : {}),
102
+ ...(attempt !== undefined ? { last_attempt_at: attempt } : {}),
103
+ ...(missing.length > 0 ? { missing } : {}),
104
+ ...(stuck ? { persistent_hole: `${stuck.hole_sig} (${stuck.hole_streak} runs in a row)` } : {}),
105
+ ...(items !== undefined ? { items_last_run: items } : {}),
106
+ ...(older > 0 ? { older_scopes: older } : {}),
107
+ ...(pending !== undefined ? { reached_back_to: pending } : {}),
108
+ ...(connected && d.syncRunning(id) ? { running: 'sync' } : bf && d.backfillAlive(bf) ? { running: 'backfill' } : {}),
109
+ };
110
+ if (id === 'github' && connected)
111
+ s.discussion_pending = pendingDetailCount(d.dbPath, 'github');
112
+ if (!connected)
113
+ s.next_step = `Not connected. Ask the person to run: align connect ${id}`;
114
+ else if (s.status === 'needs_reauth')
115
+ s.next_step = `The provider refused the saved token. Ask the person to run: align connect ${id}`;
116
+ else if (s.status === 'blocked')
117
+ s.next_step = d.blockedScope(id);
118
+ else if (id === 'teams')
119
+ s.next_step = TEAMS_NOTE;
120
+ const waiting = connected ? d.pendingScope?.(id) : undefined;
121
+ if (waiting !== undefined)
122
+ s.next_step = `Team scope for ${id} is waiting for you to confirm (${waiting}): run \`align sync ${id}\` (it will show what it reads)`;
123
+ return s;
124
+ });
125
+ return { sources, rows_awaiting_relink: unfinishedCount(d.dbPath, EMBEDDING_MODEL_ID) };
126
+ }
127
+ /** Plain text for the CLI and for the `text` field of the tool result. Connected sources only. */
128
+ export function renderStatus(r) {
129
+ const lines = [];
130
+ const connected = r.sources.filter((s) => s.connected);
131
+ if (connected.length === 0)
132
+ lines.push('No source is connected. Ask the person to run: align connect <source>');
133
+ for (const s of connected) {
134
+ const bits = [];
135
+ bits.push(s.status === 'never' ? 'not synced yet' : s.status);
136
+ if (s.running)
137
+ bits.push(s.running === 'sync' ? 'syncing now' : 'a backfill is running');
138
+ const when = (iso) => `${iso.slice(0, 16).replace('T', ' ')} UTC`;
139
+ if (s.last_success_at)
140
+ bits.push(`last complete sync ${when(s.last_success_at)}`);
141
+ if (s.last_attempt_at && s.last_attempt_at !== s.last_success_at && s.status !== 'ok')
142
+ bits.push(`last tried ${when(s.last_attempt_at)}`);
143
+ if (s.items_last_run !== undefined)
144
+ bits.push(`${s.items_last_run} items read last run`);
145
+ if (s.discussion_pending)
146
+ bits.push(`${s.discussion_pending} still waiting for their discussion`);
147
+ if (s.reached_back_to)
148
+ bits.push(`older history still to read (reached ${s.reached_back_to.slice(0, 10)})`);
149
+ if (s.missing)
150
+ bits.push(`not read last time: ${s.missing.join('; ')}`);
151
+ if (s.persistent_hole)
152
+ bits.push(`persistent hole: ${s.persistent_hole}; the sync reads the rest and no longer waits for it, so fix the access or leave it`);
153
+ const skips = Object.entries(s.skips).map(([k, n]) => `${k} ${n}`);
154
+ if (skips.length)
155
+ bits.push(`skipped last run: ${skips.join(', ')}`);
156
+ if (s.older_scopes)
157
+ bits.push(`${s.older_scopes} older scope${s.older_scopes === 1 ? '' : 's'} kept (not read)`);
158
+ lines.push(`${s.label} (${s.scope}): ${bits.join('; ')}.`);
159
+ if (s.next_step)
160
+ lines.push(` ${s.next_step}`);
161
+ }
162
+ if (r.rows_awaiting_relink > 0)
163
+ lines.push(`${r.rows_awaiting_relink} stored items wait for their links to be finished. Each sync works on them for up to a minute, locally and free, until they are done.`);
164
+ return lines.join('\n');
165
+ }
166
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/lib/sync/status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { SyncStatus } from './sync-state.js';
2
+ export declare const SUMMARY_FILE = "sync-summary.json";
3
+ export interface SummarySource {
4
+ id: string;
5
+ /** Connected, and a kind of source a background run can read (not Teams, Decision 21). */
6
+ backgroundEligible: boolean;
7
+ status: SyncStatus | 'never' | 'manual' | 'not_connected';
8
+ lastSuccessAt?: string;
9
+ /** Any run, complete or not: the launch hook spaces its attempts by this, so a source that is always partial is not retried on every launch. */
10
+ lastAttemptAt?: string;
11
+ }
12
+ export interface SyncSummary {
13
+ version: 1;
14
+ generated_at: string;
15
+ sources: SummarySource[];
16
+ }
17
+ export declare function summaryPath(dir?: string | null): string | null;
18
+ export declare function readSummary(dir?: string | null): SyncSummary | undefined;
19
+ //# sourceMappingURL=summary-read.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summary-read.d.ts","sourceRoot":"","sources":["../../../src/lib/sync/summary-read.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,eAAO,MAAM,YAAY,sBAAsB,CAAC;AAEhD,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,0FAA0F;IAC1F,kBAAkB,EAAE,OAAO,CAAC;IAC5B,MAAM,EAAE,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,eAAe,CAAC;IAC1D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gJAAgJ;IAChJ,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAAG,OAAO,EAAE,CAAC,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,aAAa,EAAE,CAAA;CAAE;AAE3F,wBAAgB,WAAW,CAAC,GAAG,GAAE,MAAM,GAAG,IAAsB,GAAG,MAAM,GAAG,IAAI,CAE/E;AAED,wBAAgB,WAAW,CAAC,GAAG,GAAE,MAAM,GAAG,IAAsB,GAAG,WAAW,GAAG,SAAS,CAgBzF"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * L5/L6, Decision 8: the READ side of `sync-summary.json`, split out of summary.ts so the launch
3
+ * path can import it. summary.ts also builds the file from SQLite (sync-state.ts -> node:sqlite),
4
+ * and the launch path imports no database layer (launch-path-imports.test.ts). This file imports
5
+ * `node:fs`, `node:path` and the state-directory helper, and nothing else.
6
+ *
7
+ * Reading tolerates a missing, corrupt or foreign file by returning undefined: the launch hook
8
+ * then spawns nothing, which is the safe direction.
9
+ */
10
+ import path from 'node:path';
11
+ import { alignStateDir } from '../backfill-state.js';
12
+ import { readRegularFile } from './safe-read.js';
13
+ import { isKnownSource } from './source-ids.js';
14
+ export const SUMMARY_FILE = 'sync-summary.json';
15
+ export function summaryPath(dir = alignStateDir()) {
16
+ return dir === null ? null : path.join(dir, SUMMARY_FILE);
17
+ }
18
+ export function readSummary(dir = alignStateDir()) {
19
+ const file = summaryPath(dir);
20
+ if (file === null)
21
+ return undefined;
22
+ try {
23
+ const text = readRegularFile(file, 4_194_304);
24
+ if (text === undefined)
25
+ return undefined;
26
+ const raw = JSON.parse(text);
27
+ if (raw.version !== 1 || !Array.isArray(raw.sources) || typeof raw.generated_at !== 'string')
28
+ return undefined;
29
+ const sources = raw.sources.filter((s) => typeof s?.id === 'string' && isKnownSource(s.id) && typeof s.backgroundEligible === 'boolean');
30
+ // One entry per source: a repeated id would only repeat work, and a huge file is cut to the known list.
31
+ const seen = new Set();
32
+ const unique = sources.filter((s) => !seen.has(s.id) && seen.add(s.id));
33
+ return { version: 1, generated_at: raw.generated_at, sources: unique };
34
+ }
35
+ catch {
36
+ return undefined;
37
+ }
38
+ }
39
+ //# sourceMappingURL=summary-read.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summary-read.js","sourceRoot":"","sources":["../../../src/lib/sync/summary-read.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGhD,MAAM,CAAC,MAAM,YAAY,GAAG,mBAAmB,CAAC;AAchD,MAAM,UAAU,WAAW,CAAC,MAAqB,aAAa,EAAE;IAC9D,OAAO,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAAqB,aAAa,EAAE;IAC9D,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IACpC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAC9C,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QACzC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAyB,CAAC;QACrD,IAAI,GAAG,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,CAAC,YAAY,KAAK,QAAQ;YAAE,OAAO,SAAS,CAAC;QAC/G,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAsB,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,QAAQ,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,kBAAkB,KAAK,SAAS,CAAC,CAAC;QAC7J,wGAAwG;QACxG,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACxE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,YAAY,EAAE,GAAG,CAAC,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IACzE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { type BlockedState } from './blocked.js';
2
+ import { readSummary, SUMMARY_FILE, summaryPath, type SummarySource, type SyncSummary } from './summary-read.js';
3
+ /** The read side lives in summary-read.ts (the launch path imports it; this file reaches SQLite). */
4
+ export { SUMMARY_FILE, type SummarySource, type SyncSummary, readSummary, summaryPath };
5
+ export declare function buildSummary(dbPath: string, isConnected: (id: string) => boolean, now: Date, blocked?: (id: string) => BlockedState | undefined): SyncSummary;
6
+ /** Returns false when it could not write (an unusable state directory); nothing else depends on it. */
7
+ export declare function writeSummary(summary: SyncSummary, dir?: string | null): boolean;
8
+ /** Rebuild and write it. Called after a sync, and when a source is connected or forgotten. */
9
+ export declare function refreshSummary(dbPath: string, isConnected: (id: string) => boolean, now?: Date, dir?: string | null): boolean;
10
+ //# sourceMappingURL=summary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summary.d.ts","sourceRoot":"","sources":["../../../src/lib/sync/summary.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,KAAK,YAAY,EAAe,MAAM,cAAc,CAAC;AAG9D,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,KAAK,aAAa,EAAE,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEjH,qGAAqG;AACrG,OAAO,EAAE,YAAY,EAAE,KAAK,aAAa,EAAE,KAAK,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;AAIxF,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,GAAE,CAAC,EAAE,EAAE,MAAM,KAAK,YAAY,GAAG,SAA2B,GAAG,WAAW,CAuB9K;AAED,uGAAuG;AACvG,wBAAgB,YAAY,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,GAAE,MAAM,GAAG,IAAsB,GAAG,OAAO,CAYhG;AAED,8FAA8F;AAC9F,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,EAAE,GAAG,GAAE,IAAiB,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAMzI"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * L5, Decision 8: `sync-summary.json`, the one file the launch path reads. `source_sync` in SQLite
3
+ * is the truth; this is a derived cache with ONE writer (the sync job and the few commands that
4
+ * change what is connected), so launch can decide whether to start a background sync without
5
+ * importing the database layer.
6
+ *
7
+ * Written atomically (a sibling file, renamed over), mode 0600, inside the private state
8
+ * directory. Reading tolerates a missing, corrupt or foreign file by returning undefined: the
9
+ * launch path then spawns nothing, which is the safe direction.
10
+ */
11
+ import fs from 'node:fs';
12
+ import { alignStateDir } from '../backfill-state.js';
13
+ import { readBlocked } from './blocked.js';
14
+ import { BACKFILL_SOURCES } from '../mcp-backfill.js';
15
+ import { readRows } from './sync-state.js';
16
+ import { readSummary, SUMMARY_FILE, summaryPath } from './summary-read.js';
17
+ /** The read side lives in summary-read.ts (the launch path imports it; this file reaches SQLite). */
18
+ export { SUMMARY_FILE, readSummary, summaryPath };
19
+ const SEVERITY = { ok: 0, partial: 1, error: 2, needs_reauth: 3 };
20
+ export function buildSummary(dbPath, isConnected, now, blocked = () => undefined) {
21
+ const all = readRows(dbPath);
22
+ const sources = [];
23
+ for (const id of BACKFILL_SOURCES) {
24
+ if (!isConnected(id))
25
+ continue;
26
+ const rows = all.filter((r) => r.source_id === id);
27
+ let status = 'never';
28
+ for (const r of rows)
29
+ if (status === 'never' || SEVERITY[r.status] > SEVERITY[status])
30
+ status = r.status;
31
+ let last;
32
+ for (const r of rows) {
33
+ if (r.last_success_at === null || Number.isNaN(Date.parse(r.last_success_at)))
34
+ continue;
35
+ if (last === undefined || Date.parse(r.last_success_at) > Date.parse(last))
36
+ last = r.last_success_at;
37
+ }
38
+ let attempt;
39
+ for (const r of rows) {
40
+ if (r.last_attempt_at === null || Number.isNaN(Date.parse(r.last_attempt_at)))
41
+ continue;
42
+ if (attempt === undefined || Date.parse(r.last_attempt_at) > Date.parse(attempt))
43
+ attempt = r.last_attempt_at;
44
+ }
45
+ const stuck = blocked(id);
46
+ if (stuck !== undefined)
47
+ status = stuck;
48
+ sources.push({ id, backgroundEligible: id !== 'teams', status, ...(last !== undefined ? { lastSuccessAt: last } : {}), ...(attempt !== undefined ? { lastAttemptAt: attempt } : {}) });
49
+ }
50
+ return { version: 1, generated_at: now.toISOString(), sources };
51
+ }
52
+ /** Returns false when it could not write (an unusable state directory); nothing else depends on it. */
53
+ export function writeSummary(summary, dir = alignStateDir()) {
54
+ const file = summaryPath(dir);
55
+ if (file === null)
56
+ return false;
57
+ const tmp = `${file}.${process.pid}.tmp`;
58
+ try {
59
+ fs.writeFileSync(tmp, JSON.stringify(summary), { mode: 0o600 });
60
+ fs.renameSync(tmp, file);
61
+ return true;
62
+ }
63
+ catch {
64
+ try {
65
+ fs.rmSync(tmp, { force: true });
66
+ }
67
+ catch { /* nothing to clean */ }
68
+ return false;
69
+ }
70
+ }
71
+ /** Rebuild and write it. Called after a sync, and when a source is connected or forgotten. */
72
+ export function refreshSummary(dbPath, isConnected, now = new Date(), dir) {
73
+ try {
74
+ return writeSummary(buildSummary(dbPath, isConnected, now, (id) => readBlocked(id, dir === undefined ? alignStateDir() : dir)?.state), dir);
75
+ }
76
+ catch {
77
+ return false;
78
+ }
79
+ }
80
+ //# sourceMappingURL=summary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summary.js","sourceRoot":"","sources":["../../../src/lib/sync/summary.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,128 @@
1
+ import { DatabaseSync } from 'node:sqlite';
2
+ import type { CaptureSkip } from '../fetchers/capture.js';
3
+ export type SyncStatus = 'ok' | 'partial' | 'needs_reauth' | 'error';
4
+ export interface SyncRow {
5
+ source_id: string;
6
+ scope_key: string;
7
+ scope: 'yours' | 'team';
8
+ window_since: string | null;
9
+ high_water: string | null;
10
+ pending_until: string | null;
11
+ status: SyncStatus;
12
+ last_started_at: string | null;
13
+ last_success_at: string | null;
14
+ /** Every run stamps this; last_success_at is stamped only by a complete one. */
15
+ last_attempt_at: string | null;
16
+ /** The newest updated_at seen across a pending cycle, in THIS scope's own row. */
17
+ cycle_top: string | null;
18
+ /** What the last incomplete run could not read (a signature), and how many runs in a row had exactly that. */
19
+ hole_sig: string | null;
20
+ hole_streak: number;
21
+ items_last_run: number | null;
22
+ skips_last_run: string | null;
23
+ changed_via: 'cli' | 'mcp' | null;
24
+ changed_by_agent: string | null;
25
+ }
26
+ export interface ScopeKey {
27
+ source: string;
28
+ scopeKey: string;
29
+ scope: 'yours' | 'team';
30
+ }
31
+ /** Rows of one source (every scope), or of all sources. A file that has no `source_sync` yet reads as empty. */
32
+ export declare function readRows(dbPath: string, source?: string): SyncRow[];
33
+ /**
34
+ * Open a run: create the row if the scope is new (with `defaultWindowSince` as its window - an
35
+ * existing row with a NULL window means "all", so a new row must never be left NULL), stamp
36
+ * `last_started_at`, and return the row as stored. An existing row keeps everything else.
37
+ */
38
+ export declare function beginRun(dbPath: string, key: ScopeKey, defaultWindowSince: string | null, nowIso: string): SyncRow;
39
+ /**
40
+ * A person (or their agent) chose a scope: give it its row NOW, with the source's window and no watermark, and attribute the
41
+ * change. An existing row keeps its window and its watermark - going back to a scope read before only catches up - and only
42
+ * its attribution moves. `created` says which. Nothing else is touched: the earlier scope's row and every stored item stay.
43
+ */
44
+ export declare function adoptScope(dbPath: string, key: ScopeKey, windowSince: string | null, by: {
45
+ via: 'cli' | 'mcp';
46
+ agent: string | null;
47
+ }): {
48
+ created: boolean;
49
+ row: SyncRow;
50
+ };
51
+ export interface RunResult {
52
+ status: SyncStatus;
53
+ high_water: string | null;
54
+ pending_until: string | null;
55
+ /** The cycle's newest stamp while a cycle is pending; null once it ends. */
56
+ cycle_top?: string | null;
57
+ hole_sig?: string | null;
58
+ hole_streak?: number;
59
+ /** Stamped as last_attempt_at on every run. */
60
+ attemptAt: string;
61
+ items: number;
62
+ skips: readonly CaptureSkip[];
63
+ /** Stamped as last_success_at, or left as it was when absent: only a COMPLETE run is a success. */
64
+ successAt?: string;
65
+ }
66
+ export declare function saveRun(dbPath: string, key: ScopeKey, r: RunResult): void;
67
+ /** Move the watermark FORWARD only, from inside a run: called after a batch has committed. */
68
+ export declare function advanceHighWater(dbPath: string, key: ScopeKey, to: string, now: Date): void;
69
+ /**
70
+ * The provider refused this source's token. Every scope row of the source says so (a refused
71
+ * token is refused for the whole source), and a source with no row yet gets one, so the next
72
+ * foreground moment has something to report. The token itself is never touched here.
73
+ */
74
+ export declare function markNeedsReauth(dbPath: string, key: ScopeKey, defaultWindowSince: string | null, nowIso: string): void;
75
+ /** A fresh token was saved: the source is no longer waiting on the user. */
76
+ export declare function clearNeedsReauth(dbPath: string, source: string): void;
77
+ /** `align local forget <source>`: the source's sync rows go with its token. Returns how many. */
78
+ export declare function deleteSource(dbPath: string, source: string): number;
79
+ export declare function recordActivity(dbPath: string, scopeKey: string, entries: ReadonlyArray<{
80
+ decisionId: string;
81
+ platform: string;
82
+ updatedAt: string;
83
+ }>): void;
84
+ /** Stored items of a platform with their last known activity (null when none was recorded). */
85
+ export declare function threadRows(dbPath: string, platform: string): Array<{
86
+ source_url: string;
87
+ last_activity: string | null;
88
+ }>;
89
+ /** Rows of this platform still waiting for their discussion (GitHub items-first). */
90
+ export declare function pendingDetailCount(dbPath: string, platform: string): number;
91
+ /** Rows whose link pass has not finished and that a re-link can finish (see unfinishedRows). */
92
+ export declare function unfinishedCount(dbPath: string, currentModel: string): number;
93
+ /**
94
+ * Ids of rows whose link pass is unfinished, oldest first, that a re-link CAN finish: it holds a
95
+ * current-model embedding, or it has a URL to re-ingest from (see relinkUnfinished). `keyed`
96
+ * says whether the row carries a source_key, so a re-ingest keeps its identity.
97
+ */
98
+ export declare function unfinishedRows(dbPath: string, currentModel: string, limit: number): Array<{
99
+ id: string;
100
+ keyed: boolean;
101
+ pending: boolean;
102
+ }>;
103
+ export interface PendingRow {
104
+ id: string;
105
+ title: string;
106
+ summary: string;
107
+ source_url: string;
108
+ decided_at: string | null;
109
+ }
110
+ /** Rows of a platform still waiting for their discussion, newest first (undated last). The SDK drain sorts
111
+ * what it is given as well, so this order decides only which undated rows come first. */
112
+ export declare function pendingRows(dbPath: string, platform: string): PendingRow[];
113
+ /** Clear the flag on exactly these rows: the ones whose discussion was just read and stored. */
114
+ export declare function clearDetailPending(dbPath: string, ids: readonly string[]): void;
115
+ /** The stored text of the one-item-per-URL row a fetched item belongs to, for merging a partial read into it. */
116
+ export declare function storedByKey(dbPath: string, sourceKey: string): {
117
+ title: string;
118
+ summary: string;
119
+ } | undefined;
120
+ /** Run `fn` in one IMMEDIATE transaction on its own handle: all of it commits, or none of it does. */
121
+ export declare function transact<T>(dbPath: string, fn: (db: DatabaseSync) => T): T;
122
+ /**
123
+ * A run died before it could say why (a database error, the re-link queue). Record it on each
124
+ * source's rows so the next foreground moment and `align_sync` status can tell the person, instead of
125
+ * the background child vanishing without a trace. Watermarks are untouched; a source with no row gets one.
126
+ */
127
+ export declare function recordRunError(dbPath: string, sources: readonly string[], message: string, nowIso: string, defaultWindowSince: string): void;
128
+ //# sourceMappingURL=sync-state.d.ts.map