@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 @@
1
+ {"version":3,"file":"sync-state.d.ts","sourceRoot":"","sources":["../../../src/lib/sync/sync-state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,255 @@
1
+ /**
2
+ * L5: reads and writes of `source_sync` (schema v7) and of the one small table the schema did
3
+ * not give the sync: `sync_item_state`, the vendor's own last-updated time per stored item.
4
+ *
5
+ * Why that table exists: Slack lists channel history by ROOT time, so a reply to an old thread
6
+ * never shows up in a date window. The SDK's `hotThreads` is the remedy, and choosing the hot
7
+ * ones needs each stored thread's last activity, which `decisions` does not hold. The same
8
+ * numbers give the true top of a cycle that a ceiling split across several runs (see
9
+ * `finishRun`). It is created lazily with IF NOT EXISTS: it is a cache of vendor facts the next
10
+ * full read would rebuild, so it needs no migration and losing it costs one wide read.
11
+ *
12
+ * Every function opens its own short-lived handle with the 30 s busy_timeout, the same pairing
13
+ * with WAL that source-sync-state.ts relies on: the MCP server reads while a sync child writes.
14
+ */
15
+ import fs from 'node:fs';
16
+ import { DatabaseSync } from 'node:sqlite';
17
+ import { tightenGraphFiles } from '../private-files.js';
18
+ import { assertSchemaSupported } from '../local-db-migrate.js';
19
+ function withDb(dbPath, fn) {
20
+ tightenGraphFiles(dbPath); // owner-only on every open (private-files.ts)
21
+ const db = new DatabaseSync(dbPath);
22
+ try {
23
+ db.exec('PRAGMA busy_timeout = 30000');
24
+ // A newer CLI's file is not ours to read or write: the same refusal migrate() makes.
25
+ assertSchemaSupported(db.prepare('PRAGMA user_version').get().user_version, db);
26
+ return fn(db);
27
+ }
28
+ finally {
29
+ db.close();
30
+ }
31
+ }
32
+ /** A reader must never create the graph it was asked to look at: opening a missing path makes an empty file. */
33
+ function readDb(dbPath, fallback, fn) {
34
+ if (!fs.existsSync(dbPath))
35
+ return fallback;
36
+ return withDb(dbPath, (db) => {
37
+ try {
38
+ return fn(db);
39
+ }
40
+ catch (e) {
41
+ if (/no such (table|column)/i.test(e.message))
42
+ return fallback;
43
+ throw e;
44
+ }
45
+ });
46
+ }
47
+ /** Rows of one source (every scope), or of all sources. A file that has no `source_sync` yet reads as empty. */
48
+ export function readRows(dbPath, source) {
49
+ return readDb(dbPath, [], (db) => (source === undefined
50
+ ? db.prepare('SELECT * FROM source_sync ORDER BY source_id, scope_key').all()
51
+ : db.prepare('SELECT * FROM source_sync WHERE source_id = ? ORDER BY scope_key').all(source)));
52
+ }
53
+ /**
54
+ * Open a run: create the row if the scope is new (with `defaultWindowSince` as its window - an
55
+ * existing row with a NULL window means "all", so a new row must never be left NULL), stamp
56
+ * `last_started_at`, and return the row as stored. An existing row keeps everything else.
57
+ */
58
+ export function beginRun(dbPath, key, defaultWindowSince, nowIso) {
59
+ return withDb(dbPath, (db) => db.prepare(`INSERT INTO source_sync (source_id, scope_key, scope, window_since, last_started_at)
60
+ VALUES (?, ?, ?, ?, ?)
61
+ ON CONFLICT(source_id, scope_key) DO UPDATE SET last_started_at = excluded.last_started_at
62
+ RETURNING *`).get(key.source, key.scopeKey, key.scope, defaultWindowSince, nowIso));
63
+ }
64
+ /**
65
+ * A person (or their agent) chose a scope: give it its row NOW, with the source's window and no watermark, and attribute the
66
+ * change. An existing row keeps its window and its watermark - going back to a scope read before only catches up - and only
67
+ * its attribution moves. `created` says which. Nothing else is touched: the earlier scope's row and every stored item stay.
68
+ */
69
+ export function adoptScope(dbPath, key, windowSince, by) {
70
+ return transact(dbPath, (db) => {
71
+ const exists = db.prepare('SELECT 1 AS hit FROM source_sync WHERE source_id = ? AND scope_key = ?').get(key.source, key.scopeKey) !== undefined;
72
+ const row = db.prepare(`INSERT INTO source_sync (source_id, scope_key, scope, window_since, changed_via, changed_by_agent)
73
+ VALUES (?, ?, ?, ?, ?, ?)
74
+ ON CONFLICT(source_id, scope_key) DO UPDATE SET changed_via = excluded.changed_via, changed_by_agent = excluded.changed_by_agent
75
+ RETURNING *`).get(key.source, key.scopeKey, key.scope, windowSince, by.via, by.agent);
76
+ return { created: !exists, row };
77
+ });
78
+ }
79
+ export function saveRun(dbPath, key, r) {
80
+ withDb(dbPath, (db) => {
81
+ db.prepare(`UPDATE source_sync SET status = ?, high_water = ?, pending_until = ?, cycle_top = ?, hole_sig = ?, hole_streak = ?, items_last_run = ?, skips_last_run = ?,
82
+ last_attempt_at = ?, last_success_at = COALESCE(?, last_success_at)
83
+ WHERE source_id = ? AND scope_key = ?`).run(r.status, r.high_water, r.pending_until, r.cycle_top ?? null, r.hole_sig ?? null, r.hole_streak ?? 0, r.items, JSON.stringify(r.skips), r.attemptAt, r.successAt ?? null, key.source, key.scopeKey);
84
+ });
85
+ }
86
+ /** Move the watermark FORWARD only, from inside a run: called after a batch has committed. */
87
+ export function advanceHighWater(dbPath, key, to, now) {
88
+ withDb(dbPath, (db) => {
89
+ const row = db.prepare('SELECT high_water FROM source_sync WHERE source_id = ? AND scope_key = ?').get(key.source, key.scopeKey);
90
+ const stored = row?.high_water ? Date.parse(row.high_water) : Number.NaN;
91
+ const next = Date.parse(to);
92
+ // A stamp more than a day ahead of now (a vendor bug, a wrong clock) would hide every later change.
93
+ if (Number.isNaN(next) || next > now.getTime() + 86_400_000)
94
+ return;
95
+ if (!Number.isNaN(stored) && stored >= next)
96
+ return;
97
+ db.prepare('UPDATE source_sync SET high_water = ? WHERE source_id = ? AND scope_key = ?').run(to, key.source, key.scopeKey);
98
+ });
99
+ }
100
+ /**
101
+ * The provider refused this source's token. Every scope row of the source says so (a refused
102
+ * token is refused for the whole source), and a source with no row yet gets one, so the next
103
+ * foreground moment has something to report. The token itself is never touched here.
104
+ */
105
+ export function markNeedsReauth(dbPath, key, defaultWindowSince, nowIso) {
106
+ withDb(dbPath, (db) => {
107
+ db.prepare(`INSERT INTO source_sync (source_id, scope_key, scope, window_since, status, last_started_at)
108
+ VALUES (?, ?, ?, ?, 'needs_reauth', ?)
109
+ ON CONFLICT(source_id, scope_key) DO UPDATE SET status = 'needs_reauth'`).run(key.source, key.scopeKey, key.scope, defaultWindowSince, nowIso);
110
+ db.prepare(`UPDATE source_sync SET status = 'needs_reauth' WHERE source_id = ?`).run(key.source);
111
+ });
112
+ }
113
+ /** A fresh token was saved: the source is no longer waiting on the user. */
114
+ export function clearNeedsReauth(dbPath, source) {
115
+ withDb(dbPath, (db) => {
116
+ try {
117
+ db.prepare(`UPDATE source_sync SET status = 'ok' WHERE source_id = ? AND status = 'needs_reauth'`).run(source);
118
+ }
119
+ catch (e) {
120
+ if (!/no such table/i.test(e.message))
121
+ throw e;
122
+ }
123
+ });
124
+ }
125
+ /** `align local forget <source>`: the source's sync rows go with its token. Returns how many. */
126
+ export function deleteSource(dbPath, source) {
127
+ if (!fs.existsSync(dbPath))
128
+ return 0;
129
+ return withDb(dbPath, (db) => {
130
+ try {
131
+ return Number(db.prepare('DELETE FROM source_sync WHERE source_id = ?').run(source).changes);
132
+ }
133
+ catch (e) {
134
+ if (/no such table/i.test(e.message))
135
+ return 0;
136
+ throw e;
137
+ }
138
+ });
139
+ }
140
+ export function recordActivity(dbPath, scopeKey, entries) {
141
+ if (entries.length === 0)
142
+ return;
143
+ withDb(dbPath, (db) => {
144
+ const put = db.prepare(`INSERT INTO sync_item_state (decision_id, scope_key, platform, updated_at) VALUES (?, ?, ?, ?)
145
+ ON CONFLICT(decision_id, scope_key) DO UPDATE SET updated_at = excluded.updated_at, platform = excluded.platform`);
146
+ db.exec('BEGIN');
147
+ try {
148
+ for (const e of entries)
149
+ put.run(e.decisionId, scopeKey, e.platform, e.updatedAt);
150
+ db.exec('COMMIT');
151
+ }
152
+ catch (err) {
153
+ db.exec('ROLLBACK');
154
+ throw err;
155
+ }
156
+ });
157
+ }
158
+ /** Stored items of a platform with their last known activity (null when none was recorded). */
159
+ export function threadRows(dbPath, platform) {
160
+ const plain = readDb(dbPath, [], (db) => db.prepare(`SELECT d.source_url AS source_url, NULL AS last_activity FROM decisions d WHERE d.platform = ? AND d.source_url IS NOT NULL`).all(platform));
161
+ if (plain.length === 0)
162
+ return plain;
163
+ // The activity table may not exist yet (nothing has been synced): then no thread has a known activity.
164
+ return readDb(dbPath, plain, (db) => db.prepare(`SELECT d.source_url AS source_url, s.updated_at AS last_activity FROM decisions d
165
+ LEFT JOIN sync_item_state s ON s.decision_id = d.id AND s.scope_key = 'yours'
166
+ WHERE d.platform = ? AND d.source_url IS NOT NULL`).all(platform));
167
+ }
168
+ /** Rows of this platform still waiting for their discussion (GitHub items-first). */
169
+ export function pendingDetailCount(dbPath, platform) {
170
+ return readDb(dbPath, 0, (db) => db.prepare('SELECT COUNT(*) AS n FROM decisions WHERE platform = ? AND detail_pending = 1').get(platform).n);
171
+ }
172
+ /** Rows whose link pass has not finished and that a re-link can finish (see unfinishedRows). */
173
+ export function unfinishedCount(dbPath, currentModel) {
174
+ return readDb(dbPath, 0, (db) => db.prepare(`SELECT COUNT(*) AS n FROM decisions d LEFT JOIN decision_embeddings e ON e.decision_id = d.id
175
+ WHERE d.enriched_at IS NULL AND (e.model = ? OR d.source_url IS NOT NULL)`).get(currentModel).n);
176
+ }
177
+ /**
178
+ * Ids of rows whose link pass is unfinished, oldest first, that a re-link CAN finish: it holds a
179
+ * current-model embedding, or it has a URL to re-ingest from (see relinkUnfinished). `keyed`
180
+ * says whether the row carries a source_key, so a re-ingest keeps its identity.
181
+ */
182
+ export function unfinishedRows(dbPath, currentModel, limit) {
183
+ return readDb(dbPath, [], (db) => {
184
+ const rows = db.prepare(`SELECT d.id AS id, d.source_key AS source_key, d.detail_pending AS pending FROM decisions d
185
+ LEFT JOIN decision_embeddings e ON e.decision_id = d.id
186
+ WHERE d.enriched_at IS NULL AND (e.model = ? OR d.source_url IS NOT NULL)
187
+ ORDER BY d.created_at ASC, d.rowid ASC LIMIT ?`).all(currentModel, limit);
188
+ return rows.map((r) => ({ id: r.id, keyed: r.source_key !== null, pending: r.pending === 1 }));
189
+ });
190
+ }
191
+ /** Rows of a platform still waiting for their discussion, newest first (undated last). The SDK drain sorts
192
+ * what it is given as well, so this order decides only which undated rows come first. */
193
+ export function pendingRows(dbPath, platform) {
194
+ return readDb(dbPath, [], (db) => db.prepare(`SELECT id, title, summary, source_url, decided_at FROM decisions
195
+ WHERE platform = ? AND detail_pending = 1 AND source_url IS NOT NULL
196
+ ORDER BY decided_at IS NULL, decided_at DESC, rowid DESC`).all(platform));
197
+ }
198
+ /** Clear the flag on exactly these rows: the ones whose discussion was just read and stored. */
199
+ export function clearDetailPending(dbPath, ids) {
200
+ if (ids.length === 0)
201
+ return;
202
+ withDb(dbPath, (db) => {
203
+ const clear = db.prepare('UPDATE decisions SET detail_pending = 0 WHERE id = ?');
204
+ db.exec('BEGIN');
205
+ try {
206
+ for (const id of ids)
207
+ clear.run(id);
208
+ db.exec('COMMIT');
209
+ }
210
+ catch (e) {
211
+ db.exec('ROLLBACK');
212
+ throw e;
213
+ }
214
+ });
215
+ }
216
+ /** The stored text of the one-item-per-URL row a fetched item belongs to, for merging a partial read into it. */
217
+ export function storedByKey(dbPath, sourceKey) {
218
+ return withDb(dbPath, (db) => db.prepare('SELECT title, summary FROM decisions WHERE source_key = ?').get(sourceKey));
219
+ }
220
+ /** Run `fn` in one IMMEDIATE transaction on its own handle: all of it commits, or none of it does. */
221
+ export function transact(dbPath, fn) {
222
+ return withDb(dbPath, (db) => {
223
+ db.exec('BEGIN IMMEDIATE');
224
+ try {
225
+ const out = fn(db);
226
+ db.exec('COMMIT');
227
+ return out;
228
+ }
229
+ catch (e) {
230
+ if (db.isTransaction)
231
+ db.exec('ROLLBACK');
232
+ throw e;
233
+ }
234
+ });
235
+ }
236
+ /**
237
+ * A run died before it could say why (a database error, the re-link queue). Record it on each
238
+ * source's rows so the next foreground moment and `align_sync` status can tell the person, instead of
239
+ * the background child vanishing without a trace. Watermarks are untouched; a source with no row gets one.
240
+ */
241
+ export function recordRunError(dbPath, sources, message, nowIso, defaultWindowSince) {
242
+ if (sources.length === 0)
243
+ return;
244
+ const skips = JSON.stringify([{ kind: 'error', count: 1, detail: message.slice(0, 200) }]);
245
+ transact(dbPath, (db) => {
246
+ for (const source of sources) {
247
+ const has = db.prepare('SELECT 1 AS hit FROM source_sync WHERE source_id = ? LIMIT 1').get(source) !== undefined;
248
+ if (!has) {
249
+ db.prepare(`INSERT INTO source_sync (source_id, scope_key, scope, window_since) VALUES (?, 'yours', 'yours', ?)`).run(source, defaultWindowSince);
250
+ }
251
+ db.prepare(`UPDATE source_sync SET status = CASE WHEN status = 'needs_reauth' THEN status ELSE 'error' END, skips_last_run = ?, last_attempt_at = ? WHERE source_id = ?`).run(skips, nowIso, source);
252
+ }
253
+ });
254
+ }
255
+ //# sourceMappingURL=sync-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-state.js","sourceRoot":"","sources":["../../../src/lib/sync/sync-state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * L7: the sync's one telemetry event, `source_synced`. This file only decides WHICH outcomes
3
+ * count and what the five reported values are; consent, CI, hook and DO_NOT_TRACK rules, the
4
+ * closed lists and the wire shape all live in `recordFunnelStage` (usage-telemetry.ts), so there
5
+ * is one enforcement point.
6
+ *
7
+ * The body is built from a fixed set of five fields - never by stripping a richer outcome, which
8
+ * carries a message, a scope note, skip details and window dates a ping must never see.
9
+ */
10
+ import type { SourceOutcome } from './run-source.js';
11
+ import type { SyncMeasurement } from '../usage-telemetry.js';
12
+ export type ReportedTrigger = SyncMeasurement['trigger'];
13
+ /** Undefined when the outcome is not a sync that ran (locked, not connected, a backfill in the way, Teams by hand) or has no scope to name. */
14
+ export declare function syncMeasurementOf(o: SourceOutcome, trigger: ReportedTrigger): SyncMeasurement | undefined;
15
+ /** Each source's ping waits at most this long, and `align sync` waits at most SYNC_TELEMETRY_TOTAL_MS for all of them together. */
16
+ export declare const SOURCE_PING_CAP_MS = 1000;
17
+ export declare const SYNC_TELEMETRY_TOTAL_MS = 1500;
18
+ /** One `source_synced` ping for one outcome, local graph only. Never throws and never prints. */
19
+ export declare function recordSourceSynced(o: SourceOutcome, trigger: ReportedTrigger): Promise<void>;
20
+ //# sourceMappingURL=telemetry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../../../src/lib/sync/telemetry.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,MAAM,MAAM,eAAe,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;AAIzD,+IAA+I;AAC/I,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,aAAa,EAAE,OAAO,EAAE,eAAe,GAAG,eAAe,GAAG,SAAS,CASzG;AAED,mIAAmI;AACnI,eAAO,MAAM,kBAAkB,OAAQ,CAAC;AACxC,eAAO,MAAM,uBAAuB,OAAQ,CAAC;AAE7C,iGAAiG;AACjG,wBAAsB,kBAAkB,CAAC,CAAC,EAAE,aAAa,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAUlG"}
@@ -0,0 +1,31 @@
1
+ const REPORTED_STATES = new Set(['ok', 'partial', 'needs_reauth', 'error']);
2
+ /** Undefined when the outcome is not a sync that ran (locked, not connected, a backfill in the way, Teams by hand) or has no scope to name. */
3
+ export function syncMeasurementOf(o, trigger) {
4
+ if (!REPORTED_STATES.has(o.state) || o.scope === undefined)
5
+ return undefined;
6
+ return {
7
+ count: o.created + o.updated,
8
+ source: o.source,
9
+ outcome: o.state,
10
+ scope: o.scope,
11
+ trigger,
12
+ };
13
+ }
14
+ /** Each source's ping waits at most this long, and `align sync` waits at most SYNC_TELEMETRY_TOTAL_MS for all of them together. */
15
+ export const SOURCE_PING_CAP_MS = 1_000;
16
+ export const SYNC_TELEMETRY_TOTAL_MS = 1_500;
17
+ /** One `source_synced` ping for one outcome, local graph only. Never throws and never prints. */
18
+ export async function recordSourceSynced(o, trigger) {
19
+ try {
20
+ const m = syncMeasurementOf(o, trigger);
21
+ if (m === undefined)
22
+ return;
23
+ const { createConfigStore } = await import('../config.js');
24
+ const { recordFunnelStage } = await import('../usage-telemetry.js');
25
+ await recordFunnelStage(createConfigStore().getEnvironment('local'), 'source_synced', 'sync', m, { capMs: SOURCE_PING_CAP_MS });
26
+ }
27
+ catch {
28
+ // Telemetry never fails a sync.
29
+ }
30
+ }
31
+ //# sourceMappingURL=telemetry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../../src/lib/sync/telemetry.ts"],"names":[],"mappings":"AAcA,MAAM,eAAe,GAAwB,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC;AAEjG,+IAA+I;AAC/I,MAAM,UAAU,iBAAiB,CAAC,CAAgB,EAAE,OAAwB;IAC1E,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC7E,OAAO;QACL,KAAK,EAAE,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO;QAC5B,MAAM,EAAE,CAAC,CAAC,MAAmC;QAC7C,OAAO,EAAE,CAAC,CAAC,KAAmC;QAC9C,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,OAAO;KACR,CAAC;AACJ,CAAC;AAED,mIAAmI;AACnI,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,CAAC;AACxC,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,CAAC;AAE7C,iGAAiG;AACjG,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,CAAgB,EAAE,OAAwB;IACjF,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,iBAAiB,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACxC,IAAI,CAAC,KAAK,SAAS;YAAE,OAAO;QAC5B,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;QAC3D,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;QACpE,MAAM,iBAAiB,CAAC,iBAAiB,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC,CAAC;IAClI,CAAC;IAAC,MAAM,CAAC;QACP,gCAAgC;IAClC,CAAC;AACH,CAAC"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * L5: the thread side of a sync - which stored Slack threads to ask the SDK to re-read (a reply to
3
+ * an old thread never shows up in a date-ordered channel listing), and how a re-read that holds
4
+ * only the NEW messages is folded into the stored thread.
5
+ *
6
+ * Pure. The SDK marks such an item `partial: true`; Review addendum 3 binds this file: a partial
7
+ * item is merged into the stored row and never replaces it.
8
+ */
9
+ /** A thread with a reply inside this many days is re-read by every run. */
10
+ export declare const HOT_THREAD_DAYS = 30;
11
+ /** Each re-read costs a vendor request, so a run reads at most this many; newest activity first. */
12
+ export declare const HOT_THREAD_LIMIT = 100;
13
+ /** The channel id and thread-root ts out of the URL connector-core writes for a thread. */
14
+ export declare function parseSlackPermalink(url: string): {
15
+ channel: string;
16
+ ts: string;
17
+ } | undefined;
18
+ export interface HotSelection {
19
+ hot: Array<{
20
+ channel: string;
21
+ ts: string;
22
+ }>;
23
+ /** Threads held with no reply inside the window. The report names this limit once. */
24
+ quiet: number;
25
+ /** Threads that were hot but did not fit under the per-run limit. */
26
+ capped: number;
27
+ }
28
+ export declare function selectHotThreads(rows: ReadonlyArray<{
29
+ source_url: string;
30
+ last_activity: string | null;
31
+ }>, now: Date, o?: {
32
+ limit?: number;
33
+ }): HotSelection;
34
+ /**
35
+ * The stored thread plus whatever the partial read holds that it does not. The SDK's text is the
36
+ * thread's messages joined by newlines with no timestamps, so "already there" can only be judged
37
+ * by comparing runs of lines:
38
+ * 1. the longest tail of the stored thread that the partial also holds contiguously: everything
39
+ * after that run in the partial is new;
40
+ * 2. else the partial wholly inside the stored thread: nothing is new;
41
+ * 3. else drop the partial's leading lines that repeat the stored thread's opening (the root,
42
+ * which Slack returns again) and append the rest.
43
+ * A message that repeats an earlier line word for word (an "ok") is the one thing this cannot
44
+ * tell from an overlap; the longest-run rule makes that need a run, not one line, to confuse it.
45
+ * The stored text is never altered, so a merge can only add.
46
+ */
47
+ export declare function mergePartialThread(stored: string, partial: string): string;
48
+ //# sourceMappingURL=threads.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"threads.d.ts","sourceRoot":"","sources":["../../../src/lib/sync/threads.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,2EAA2E;AAC3E,eAAO,MAAM,eAAe,KAAK,CAAC;AAClC,oGAAoG;AACpG,eAAO,MAAM,gBAAgB,MAAM,CAAC;AAGpC,2FAA2F;AAC3F,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAG5F;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5C,sFAAsF;IACtF,KAAK,EAAE,MAAM,CAAC;IACd,qEAAqE;IACrE,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,aAAa,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,EACzE,GAAG,EAAE,IAAI,EACT,CAAC,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GACzB,YAAY,CAed;AAcD;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAY1E"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * L5: the thread side of a sync - which stored Slack threads to ask the SDK to re-read (a reply to
3
+ * an old thread never shows up in a date-ordered channel listing), and how a re-read that holds
4
+ * only the NEW messages is folded into the stored thread.
5
+ *
6
+ * Pure. The SDK marks such an item `partial: true`; Review addendum 3 binds this file: a partial
7
+ * item is merged into the stored row and never replaces it.
8
+ */
9
+ /** A thread with a reply inside this many days is re-read by every run. */
10
+ export const HOT_THREAD_DAYS = 30;
11
+ /** Each re-read costs a vendor request, so a run reads at most this many; newest activity first. */
12
+ export const HOT_THREAD_LIMIT = 100;
13
+ const DAY_MS = 86_400_000;
14
+ /** The channel id and thread-root ts out of the URL connector-core writes for a thread. */
15
+ export function parseSlackPermalink(url) {
16
+ const m = /^https:\/\/slack\.com\/archives\/([A-Z0-9]+)\/p(\d{10})(\d{6})$/.exec(url);
17
+ return m ? { channel: m[1], ts: `${m[2]}.${m[3]}` } : undefined;
18
+ }
19
+ export function selectHotThreads(rows, now, o = {}) {
20
+ const cutoff = now.getTime() - HOT_THREAD_DAYS * DAY_MS;
21
+ const hot = [];
22
+ let quiet = 0;
23
+ for (const row of rows) {
24
+ const thread = parseSlackPermalink(row.source_url);
25
+ if (thread === undefined)
26
+ continue;
27
+ const at = row.last_activity === null ? Number.NaN : Date.parse(row.last_activity);
28
+ // NaN (no activity recorded, or a stamp nobody can read) is quiet, not hot: a hot thread costs a request.
29
+ if (Number.isNaN(at) || at < cutoff)
30
+ quiet += 1;
31
+ else
32
+ hot.push({ ...thread, at });
33
+ }
34
+ hot.sort((a, b) => b.at - a.at);
35
+ const limit = o.limit ?? HOT_THREAD_LIMIT;
36
+ return { hot: hot.slice(0, limit).map(({ channel, ts }) => ({ channel, ts })), quiet, capped: Math.max(0, hot.length - limit) };
37
+ }
38
+ const HEADER = /^\[#[^\]\n]*\] Thread:$/;
39
+ function bodyLines(text) {
40
+ const all = text.split('\n');
41
+ return HEADER.test(all[0] ?? '') ? { header: all[0], lines: all.slice(1) } : { header: undefined, lines: all };
42
+ }
43
+ function sameRun(a, aAt, b, bAt, n) {
44
+ for (let i = 0; i < n; i++)
45
+ if (a[aAt + i] !== b[bAt + i])
46
+ return false;
47
+ return true;
48
+ }
49
+ /**
50
+ * The stored thread plus whatever the partial read holds that it does not. The SDK's text is the
51
+ * thread's messages joined by newlines with no timestamps, so "already there" can only be judged
52
+ * by comparing runs of lines:
53
+ * 1. the longest tail of the stored thread that the partial also holds contiguously: everything
54
+ * after that run in the partial is new;
55
+ * 2. else the partial wholly inside the stored thread: nothing is new;
56
+ * 3. else drop the partial's leading lines that repeat the stored thread's opening (the root,
57
+ * which Slack returns again) and append the rest.
58
+ * A message that repeats an earlier line word for word (an "ok") is the one thing this cannot
59
+ * tell from an overlap; the longest-run rule makes that need a run, not one line, to confuse it.
60
+ * The stored text is never altered, so a merge can only add.
61
+ */
62
+ export function mergePartialThread(stored, partial) {
63
+ const s = bodyLines(stored).lines;
64
+ const p = bodyLines(partial).lines;
65
+ for (let k = Math.min(s.length, p.length); k >= 1; k--) {
66
+ for (let j = 0; j + k <= p.length; j++) {
67
+ if (sameRun(s, s.length - k, p, j, k))
68
+ return append(stored, p.slice(j + k));
69
+ }
70
+ }
71
+ for (let at = 0; at + p.length <= s.length; at++)
72
+ if (p.length > 0 && sameRun(s, at, p, 0, p.length))
73
+ return stored;
74
+ let head = 0;
75
+ while (head < p.length && head < s.length && p[head] === s[head])
76
+ head++;
77
+ return append(stored, p.slice(head));
78
+ }
79
+ function append(stored, added) {
80
+ return added.length === 0 ? stored : `${stored}\n${added.join('\n')}`;
81
+ }
82
+ //# sourceMappingURL=threads.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"threads.js","sourceRoot":"","sources":["../../../src/lib/sync/threads.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ /** Each run reads from a day before the watermark, so an item edited between two runs while the
2
+ * vendor was behind on its own indexing is not missed. */
3
+ export declare const OVERLAP_DAYS = 1;
4
+ /** A hole that ended this many consecutive runs the same way is called persistent. */
5
+ export declare const PERSISTENT_HOLE_RUNS = 5;
6
+ /** The slice of a `source_sync` row the next-window decision reads. */
7
+ export interface WindowState {
8
+ /** Lower bound the user asked for. `null` on an EXISTING row means "all" (L3's record of `since: all`). */
9
+ window_since: string | null;
10
+ high_water: string | null;
11
+ pending_until: string | null;
12
+ /** Consecutive runs that ended on the same hole. While it is above zero the re-read is bounded (see nextWindow). */
13
+ hole_streak?: number;
14
+ }
15
+ /**
16
+ * The window a NEW scope row starts with: the one the person asked for on this source, which is the `yours` row's (L3 records
17
+ * `since: all` as NULL there, and "all" stays all). A source with no `yours` row yet starts at the default window.
18
+ * The one writer: the sync's first run on a scope and a scope change from `align connect` or `align_scope` both call it.
19
+ */
20
+ export declare function inheritedWindowSince(rows: ReadonlyArray<{
21
+ scope_key: string;
22
+ window_since: string | null;
23
+ }>, now: Date): string | null;
24
+ export declare function minusDays(iso: string, days: number): string;
25
+ /**
26
+ * What the next run asks the vendor for.
27
+ * - No row: the default window back from now (the first sync of a source).
28
+ * - A high_water: one overlap day before it. Otherwise the row's own window_since, untouched.
29
+ * - A pending_until: also an `until` there, so a run that a ceiling cut finishes the OLDER part.
30
+ * An unparseable stored stamp reads as absent, which can only widen the read.
31
+ */
32
+ export declare function nextWindow(s: WindowState | undefined, now: Date): {
33
+ since?: string;
34
+ until?: string;
35
+ };
36
+ export interface RunFinish {
37
+ complete: boolean;
38
+ /**
39
+ * Incomplete BECAUSE the listing was cut in date order (a vendor ceiling, an item ceiling or a
40
+ * time budget on a newest-first listing): everything newer than `oldestReached` was read, so the
41
+ * next run can finish the older part with `until`. Any other incompleteness is a HOLE (a channel
42
+ * that would not open, a refused repo, a thread read that hit its page cap): no date line
43
+ * separates read from unread, so no `until` is set and the next run re-reads from the watermark.
44
+ */
45
+ cut?: boolean;
46
+ /** This hole has now come back often enough (see PERSISTENT_HOLE_RUNS) that the watermark stops waiting for it. */
47
+ persistent?: boolean;
48
+ highWater?: string;
49
+ oldestReached?: string;
50
+ /** The newest `updated_at` stored for this source across the whole cycle, for the final run of
51
+ * a pending cycle: its own highWater is clamped to `until` and would pull the mark back. */
52
+ cycleNewest?: string;
53
+ /** When given, a stamp more than a day AFTER it is ignored: a watermark in the future would
54
+ * hide every later change from every later run. */
55
+ now?: Date;
56
+ }
57
+ export declare function later(a: string | null | undefined, b: string | null | undefined): string | null;
58
+ export declare function plausible(iso: string | undefined, now: Date | undefined): string | undefined;
59
+ export declare function finishRun(prev: Pick<WindowState, 'high_water' | 'pending_until'>, r: RunFinish): {
60
+ high_water: string | null;
61
+ pending_until: string | null;
62
+ status: 'ok' | 'partial';
63
+ };
64
+ /** Oldest first. A kill after batch N then leaves every older item committed, so a watermark equal
65
+ * to the newest committed stamp never sits above an unread one. Items with no stamp lead. */
66
+ export declare function ascendingByUpdated<T extends {
67
+ updated_at?: string;
68
+ }>(items: readonly T[]): T[];
69
+ export declare function newestUpdated(items: ReadonlyArray<{
70
+ updated_at?: string;
71
+ }>, now?: Date): string | undefined;
72
+ //# sourceMappingURL=window.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"window.d.ts","sourceRoot":"","sources":["../../../src/lib/sync/window.ts"],"names":[],"mappings":"AAWA;2DAC2D;AAC3D,eAAO,MAAM,YAAY,IAAI,CAAC;AAC9B,sFAAsF;AACtF,eAAO,MAAM,oBAAoB,IAAI,CAAC;AAGtC,uEAAuE;AACvE,MAAM,WAAW,WAAW;IAC1B,2GAA2G;IAC3G,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,oHAAoH;IACpH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AASD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,aAAa,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,EAAE,GAAG,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,CAGtI;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAI3D;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,WAAW,GAAG,SAAS,EAAE,GAAG,EAAE,IAAI,GAAG;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAYpG;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB;;;;;;OAMG;IACH,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,mHAAmH;IACnH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;iGAC6F;IAC7F,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;wDACoD;IACpD,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ;AAED,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAM/F;AAUD,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,EAAE,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAI5F;AAED,wBAAgB,SAAS,CACvB,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,YAAY,GAAG,eAAe,CAAC,EACvD,CAAC,EAAE,SAAS,GACX;IAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,IAAI,GAAG,SAAS,CAAA;CAAE,CAWvF;AAED;8FAC8F;AAC9F,wBAAgB,kBAAkB,CAAC,CAAC,SAAS;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,EAAE,CAK9F;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,aAAa,CAAC;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,SAAS,CAI3G"}