@aligndottech/cli 0.48.0 → 0.50.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 (717) hide show
  1. package/README.md +10 -8
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +35 -26
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/agents.d.ts.map +1 -1
  6. package/dist/commands/agents.js +7 -2
  7. package/dist/commands/agents.js.map +1 -1
  8. package/dist/commands/ai.d.ts +11 -0
  9. package/dist/commands/ai.d.ts.map +1 -0
  10. package/dist/commands/ai.js +121 -0
  11. package/dist/commands/ai.js.map +1 -0
  12. package/dist/commands/check.d.ts.map +1 -1
  13. package/dist/commands/check.js +18 -2
  14. package/dist/commands/check.js.map +1 -1
  15. package/dist/commands/connect.d.ts +5 -0
  16. package/dist/commands/connect.d.ts.map +1 -1
  17. package/dist/commands/connect.js +24 -0
  18. package/dist/commands/connect.js.map +1 -1
  19. package/dist/commands/default-action.js +2 -2
  20. package/dist/commands/default-action.js.map +1 -1
  21. package/dist/commands/import/confluence.d.ts.map +1 -1
  22. package/dist/commands/import/confluence.js +24 -5
  23. package/dist/commands/import/confluence.js.map +1 -1
  24. package/dist/commands/import/docs.js +2 -2
  25. package/dist/commands/import/git.d.ts.map +1 -1
  26. package/dist/commands/import/git.js +15 -5
  27. package/dist/commands/import/git.js.map +1 -1
  28. package/dist/commands/import/github.d.ts.map +1 -1
  29. package/dist/commands/import/github.js +34 -7
  30. package/dist/commands/import/github.js.map +1 -1
  31. package/dist/commands/import/gitlab.d.ts.map +1 -1
  32. package/dist/commands/import/gitlab.js +10 -5
  33. package/dist/commands/import/gitlab.js.map +1 -1
  34. package/dist/commands/import/jira.d.ts.map +1 -1
  35. package/dist/commands/import/jira.js +10 -5
  36. package/dist/commands/import/jira.js.map +1 -1
  37. package/dist/commands/import/linear.d.ts.map +1 -1
  38. package/dist/commands/import/linear.js +10 -5
  39. package/dist/commands/import/linear.js.map +1 -1
  40. package/dist/commands/import/notion.d.ts.map +1 -1
  41. package/dist/commands/import/notion.js +10 -5
  42. package/dist/commands/import/notion.js.map +1 -1
  43. package/dist/commands/import/sessions.js +2 -2
  44. package/dist/commands/import/slack.d.ts.map +1 -1
  45. package/dist/commands/import/slack.js +12 -7
  46. package/dist/commands/import/slack.js.map +1 -1
  47. package/dist/commands/import/teams.d.ts.map +1 -1
  48. package/dist/commands/import/teams.js +10 -5
  49. package/dist/commands/import/teams.js.map +1 -1
  50. package/dist/commands/import/zoom.d.ts.map +1 -1
  51. package/dist/commands/import/zoom.js +10 -5
  52. package/dist/commands/import/zoom.js.map +1 -1
  53. package/dist/commands/import.d.ts.map +1 -1
  54. package/dist/commands/import.js +43 -1
  55. package/dist/commands/import.js.map +1 -1
  56. package/dist/commands/local.d.ts.map +1 -1
  57. package/dist/commands/local.js +76 -4
  58. package/dist/commands/local.js.map +1 -1
  59. package/dist/commands/mark.d.ts +37 -0
  60. package/dist/commands/mark.d.ts.map +1 -0
  61. package/dist/commands/mark.js +105 -0
  62. package/dist/commands/mark.js.map +1 -0
  63. package/dist/commands/mcp.d.ts +141 -2
  64. package/dist/commands/mcp.d.ts.map +1 -1
  65. package/dist/commands/mcp.js +72 -14
  66. package/dist/commands/mcp.js.map +1 -1
  67. package/dist/commands/registry.d.ts.map +1 -1
  68. package/dist/commands/registry.js +12 -2
  69. package/dist/commands/registry.js.map +1 -1
  70. package/dist/commands/setup.d.ts +39 -0
  71. package/dist/commands/setup.d.ts.map +1 -1
  72. package/dist/commands/setup.js +118 -241
  73. package/dist/commands/setup.js.map +1 -1
  74. package/dist/commands/share.d.ts +7 -0
  75. package/dist/commands/share.d.ts.map +1 -0
  76. package/dist/commands/share.js +60 -0
  77. package/dist/commands/share.js.map +1 -0
  78. package/dist/commands/sync.d.ts +55 -0
  79. package/dist/commands/sync.d.ts.map +1 -0
  80. package/dist/commands/sync.js +278 -0
  81. package/dist/commands/sync.js.map +1 -0
  82. package/dist/commands/telemetry.d.ts +3 -3
  83. package/dist/commands/telemetry.js +6 -6
  84. package/dist/commands/telemetry.js.map +1 -1
  85. package/dist/commands/why.d.ts.map +1 -1
  86. package/dist/commands/why.js +27 -1
  87. package/dist/commands/why.js.map +1 -1
  88. package/dist/index.d.ts +3 -1
  89. package/dist/index.d.ts.map +1 -1
  90. package/dist/index.js +3 -0
  91. package/dist/index.js.map +1 -1
  92. package/dist/lib/ask-key-offer.d.ts +38 -0
  93. package/dist/lib/ask-key-offer.d.ts.map +1 -0
  94. package/dist/lib/ask-key-offer.js +130 -0
  95. package/dist/lib/ask-key-offer.js.map +1 -0
  96. package/dist/lib/backfill-state.d.ts +116 -0
  97. package/dist/lib/backfill-state.d.ts.map +1 -0
  98. package/dist/lib/backfill-state.js +342 -0
  99. package/dist/lib/backfill-state.js.map +1 -0
  100. package/dist/lib/backup-copy.d.ts +17 -0
  101. package/dist/lib/backup-copy.d.ts.map +1 -0
  102. package/dist/lib/backup-copy.js +13 -0
  103. package/dist/lib/backup-copy.js.map +1 -0
  104. package/dist/lib/capture-report.d.ts +22 -18
  105. package/dist/lib/capture-report.d.ts.map +1 -1
  106. package/dist/lib/capture-report.js +64 -2
  107. package/dist/lib/capture-report.js.map +1 -1
  108. package/dist/lib/config.d.ts +56 -24
  109. package/dist/lib/config.d.ts.map +1 -1
  110. package/dist/lib/config.js +176 -45
  111. package/dist/lib/config.js.map +1 -1
  112. package/dist/lib/confirm-timeout.d.ts +8 -0
  113. package/dist/lib/confirm-timeout.d.ts.map +1 -0
  114. package/dist/lib/confirm-timeout.js +18 -0
  115. package/dist/lib/confirm-timeout.js.map +1 -0
  116. package/dist/lib/curation/check-marks.d.ts +48 -0
  117. package/dist/lib/curation/check-marks.d.ts.map +1 -0
  118. package/dist/lib/curation/check-marks.js +81 -0
  119. package/dist/lib/curation/check-marks.js.map +1 -0
  120. package/dist/lib/curation/guardrail.d.ts +39 -0
  121. package/dist/lib/curation/guardrail.d.ts.map +1 -0
  122. package/dist/lib/curation/guardrail.js +93 -0
  123. package/dist/lib/curation/guardrail.js.map +1 -0
  124. package/dist/lib/curation/judge.d.ts +3 -0
  125. package/dist/lib/curation/judge.d.ts.map +1 -0
  126. package/dist/lib/curation/judge.js +9 -0
  127. package/dist/lib/curation/judge.js.map +1 -0
  128. package/dist/lib/curation/judgements-db.d.ts +96 -0
  129. package/dist/lib/curation/judgements-db.d.ts.map +1 -0
  130. package/dist/lib/curation/judgements-db.js +200 -0
  131. package/dist/lib/curation/judgements-db.js.map +1 -0
  132. package/dist/lib/curation/last-check.d.ts +32 -0
  133. package/dist/lib/curation/last-check.d.ts.map +1 -0
  134. package/dist/lib/curation/last-check.js +81 -0
  135. package/dist/lib/curation/last-check.js.map +1 -0
  136. package/dist/lib/curation/mark.d.ts +76 -0
  137. package/dist/lib/curation/mark.d.ts.map +1 -0
  138. package/dist/lib/curation/mark.js +359 -0
  139. package/dist/lib/curation/mark.js.map +1 -0
  140. package/dist/lib/curation/text.d.ts +6 -0
  141. package/dist/lib/curation/text.d.ts.map +1 -0
  142. package/dist/lib/curation/text.js +35 -0
  143. package/dist/lib/curation/text.js.map +1 -0
  144. package/dist/lib/fetchers/capture.d.ts +49 -2
  145. package/dist/lib/fetchers/capture.d.ts.map +1 -1
  146. package/dist/lib/fetchers/capture.js +7 -1
  147. package/dist/lib/fetchers/capture.js.map +1 -1
  148. package/dist/lib/fetchers/confluence.d.ts +2 -2
  149. package/dist/lib/fetchers/confluence.d.ts.map +1 -1
  150. package/dist/lib/fetchers/confluence.js.map +1 -1
  151. package/dist/lib/fetchers/git.d.ts +1 -0
  152. package/dist/lib/fetchers/git.d.ts.map +1 -1
  153. package/dist/lib/fetchers/git.js +3 -1
  154. package/dist/lib/fetchers/git.js.map +1 -1
  155. package/dist/lib/fetchers/github.d.ts +44 -5
  156. package/dist/lib/fetchers/github.d.ts.map +1 -1
  157. package/dist/lib/fetchers/github.js +122 -5
  158. package/dist/lib/fetchers/github.js.map +1 -1
  159. package/dist/lib/fetchers/gitlab.d.ts +2 -2
  160. package/dist/lib/fetchers/gitlab.d.ts.map +1 -1
  161. package/dist/lib/fetchers/gitlab.js.map +1 -1
  162. package/dist/lib/fetchers/jira.d.ts +2 -2
  163. package/dist/lib/fetchers/jira.d.ts.map +1 -1
  164. package/dist/lib/fetchers/jira.js.map +1 -1
  165. package/dist/lib/fetchers/linear.d.ts +2 -2
  166. package/dist/lib/fetchers/linear.d.ts.map +1 -1
  167. package/dist/lib/fetchers/linear.js.map +1 -1
  168. package/dist/lib/fetchers/notion.d.ts +2 -2
  169. package/dist/lib/fetchers/notion.d.ts.map +1 -1
  170. package/dist/lib/fetchers/notion.js.map +1 -1
  171. package/dist/lib/fetchers/slack.d.ts +2 -3
  172. package/dist/lib/fetchers/slack.d.ts.map +1 -1
  173. package/dist/lib/fetchers/slack.js.map +1 -1
  174. package/dist/lib/fetchers/teams.d.ts +2 -2
  175. package/dist/lib/fetchers/teams.d.ts.map +1 -1
  176. package/dist/lib/fetchers/teams.js.map +1 -1
  177. package/dist/lib/fetchers/zoom.d.ts +2 -2
  178. package/dist/lib/fetchers/zoom.d.ts.map +1 -1
  179. package/dist/lib/fetchers/zoom.js.map +1 -1
  180. package/dist/lib/gateway-client.d.ts +34 -0
  181. package/dist/lib/gateway-client.d.ts.map +1 -1
  182. package/dist/lib/gateway-client.js +19 -1
  183. package/dist/lib/gateway-client.js.map +1 -1
  184. package/dist/lib/github-text.d.ts +3 -0
  185. package/dist/lib/github-text.d.ts.map +1 -0
  186. package/dist/lib/github-text.js +18 -0
  187. package/dist/lib/github-text.js.map +1 -0
  188. package/dist/lib/hook-context.d.ts +10 -0
  189. package/dist/lib/hook-context.d.ts.map +1 -1
  190. package/dist/lib/hook-context.js +14 -0
  191. package/dist/lib/hook-context.js.map +1 -1
  192. package/dist/lib/import-defaults.d.ts +39 -23
  193. package/dist/lib/import-defaults.d.ts.map +1 -1
  194. package/dist/lib/import-defaults.js +28 -26
  195. package/dist/lib/import-defaults.js.map +1 -1
  196. package/dist/lib/launch/adapters/aider.d.ts +17 -0
  197. package/dist/lib/launch/adapters/aider.d.ts.map +1 -0
  198. package/dist/lib/launch/adapters/aider.js +30 -0
  199. package/dist/lib/launch/adapters/aider.js.map +1 -0
  200. package/dist/lib/launch/adapters/amp.d.ts +18 -0
  201. package/dist/lib/launch/adapters/amp.d.ts.map +1 -0
  202. package/dist/lib/launch/adapters/amp.js +29 -0
  203. package/dist/lib/launch/adapters/amp.js.map +1 -0
  204. package/dist/lib/launch/adapters/auggie.d.ts +18 -0
  205. package/dist/lib/launch/adapters/auggie.d.ts.map +1 -0
  206. package/dist/lib/launch/adapters/auggie.js +34 -0
  207. package/dist/lib/launch/adapters/auggie.js.map +1 -0
  208. package/dist/lib/launch/adapters/cline.d.ts +10 -0
  209. package/dist/lib/launch/adapters/cline.d.ts.map +1 -0
  210. package/dist/lib/launch/adapters/cline.js +41 -0
  211. package/dist/lib/launch/adapters/cline.js.map +1 -0
  212. package/dist/lib/launch/adapters/continue.d.ts +22 -0
  213. package/dist/lib/launch/adapters/continue.d.ts.map +1 -0
  214. package/dist/lib/launch/adapters/continue.js +46 -0
  215. package/dist/lib/launch/adapters/continue.js.map +1 -0
  216. package/dist/lib/launch/adapters/droid.d.ts +19 -0
  217. package/dist/lib/launch/adapters/droid.d.ts.map +1 -0
  218. package/dist/lib/launch/adapters/droid.js +38 -0
  219. package/dist/lib/launch/adapters/droid.js.map +1 -0
  220. package/dist/lib/launch/adapters/gemini-cli.d.ts +13 -14
  221. package/dist/lib/launch/adapters/gemini-cli.d.ts.map +1 -1
  222. package/dist/lib/launch/adapters/gemini-cli.js +38 -53
  223. package/dist/lib/launch/adapters/gemini-cli.js.map +1 -1
  224. package/dist/lib/launch/adapters/goose.d.ts +20 -0
  225. package/dist/lib/launch/adapters/goose.d.ts.map +1 -0
  226. package/dist/lib/launch/adapters/goose.js +47 -0
  227. package/dist/lib/launch/adapters/goose.js.map +1 -0
  228. package/dist/lib/launch/adapters/grok-build.d.ts +16 -0
  229. package/dist/lib/launch/adapters/grok-build.d.ts.map +1 -0
  230. package/dist/lib/launch/adapters/grok-build.js +25 -0
  231. package/dist/lib/launch/adapters/grok-build.js.map +1 -0
  232. package/dist/lib/launch/adapters/kiro.d.ts +17 -0
  233. package/dist/lib/launch/adapters/kiro.d.ts.map +1 -0
  234. package/dist/lib/launch/adapters/kiro.js +25 -0
  235. package/dist/lib/launch/adapters/kiro.js.map +1 -0
  236. package/dist/lib/launch/adapters/notes.d.ts +7 -0
  237. package/dist/lib/launch/adapters/notes.d.ts.map +1 -0
  238. package/dist/lib/launch/adapters/notes.js +5 -0
  239. package/dist/lib/launch/adapters/notes.js.map +1 -0
  240. package/dist/lib/launch/adapters/qwen.d.ts +25 -0
  241. package/dist/lib/launch/adapters/qwen.d.ts.map +1 -0
  242. package/dist/lib/launch/adapters/qwen.js +67 -0
  243. package/dist/lib/launch/adapters/qwen.js.map +1 -0
  244. package/dist/lib/launch/agents.d.ts +6 -1
  245. package/dist/lib/launch/agents.d.ts.map +1 -1
  246. package/dist/lib/launch/agents.js +12 -4
  247. package/dist/lib/launch/agents.js.map +1 -1
  248. package/dist/lib/launch/amp-state.d.ts +21 -0
  249. package/dist/lib/launch/amp-state.d.ts.map +1 -0
  250. package/dist/lib/launch/amp-state.js +61 -0
  251. package/dist/lib/launch/amp-state.js.map +1 -0
  252. package/dist/lib/launch/auggie-state.d.ts +25 -0
  253. package/dist/lib/launch/auggie-state.d.ts.map +1 -0
  254. package/dist/lib/launch/auggie-state.js +74 -0
  255. package/dist/lib/launch/auggie-state.js.map +1 -0
  256. package/dist/lib/launch/cline-state.d.ts +32 -0
  257. package/dist/lib/launch/cline-state.d.ts.map +1 -0
  258. package/dist/lib/launch/cline-state.js +108 -0
  259. package/dist/lib/launch/cline-state.js.map +1 -0
  260. package/dist/lib/launch/config-writes.d.ts +11 -1
  261. package/dist/lib/launch/config-writes.d.ts.map +1 -1
  262. package/dist/lib/launch/config-writes.js +66 -8
  263. package/dist/lib/launch/config-writes.js.map +1 -1
  264. package/dist/lib/launch/continue-state.d.ts +41 -0
  265. package/dist/lib/launch/continue-state.d.ts.map +1 -0
  266. package/dist/lib/launch/continue-state.js +142 -0
  267. package/dist/lib/launch/continue-state.js.map +1 -0
  268. package/dist/lib/launch/detect.d.ts.map +1 -1
  269. package/dist/lib/launch/detect.js +5 -2
  270. package/dist/lib/launch/detect.js.map +1 -1
  271. package/dist/lib/launch/droid-state.d.ts +24 -0
  272. package/dist/lib/launch/droid-state.d.ts.map +1 -0
  273. package/dist/lib/launch/droid-state.js +74 -0
  274. package/dist/lib/launch/droid-state.js.map +1 -0
  275. package/dist/lib/launch/gemini-state.d.ts +26 -20
  276. package/dist/lib/launch/gemini-state.d.ts.map +1 -1
  277. package/dist/lib/launch/gemini-state.js +95 -37
  278. package/dist/lib/launch/gemini-state.js.map +1 -1
  279. package/dist/lib/launch/gemini-system-file.d.ts +17 -0
  280. package/dist/lib/launch/gemini-system-file.d.ts.map +1 -0
  281. package/dist/lib/launch/gemini-system-file.js +55 -0
  282. package/dist/lib/launch/gemini-system-file.js.map +1 -0
  283. package/dist/lib/launch/gemini-trust.d.ts +3 -1
  284. package/dist/lib/launch/gemini-trust.d.ts.map +1 -1
  285. package/dist/lib/launch/gemini-trust.js +10 -3
  286. package/dist/lib/launch/gemini-trust.js.map +1 -1
  287. package/dist/lib/launch/goose-state.d.ts +53 -0
  288. package/dist/lib/launch/goose-state.d.ts.map +1 -0
  289. package/dist/lib/launch/goose-state.js +137 -0
  290. package/dist/lib/launch/goose-state.js.map +1 -0
  291. package/dist/lib/launch/grok-state.d.ts +42 -0
  292. package/dist/lib/launch/grok-state.d.ts.map +1 -0
  293. package/dist/lib/launch/grok-state.js +128 -0
  294. package/dist/lib/launch/grok-state.js.map +1 -0
  295. package/dist/lib/launch/kiro-state.d.ts +22 -0
  296. package/dist/lib/launch/kiro-state.d.ts.map +1 -0
  297. package/dist/lib/launch/kiro-state.js +59 -0
  298. package/dist/lib/launch/kiro-state.js.map +1 -0
  299. package/dist/lib/launch/launch-files.d.ts.map +1 -1
  300. package/dist/lib/launch/launch-files.js +3 -2
  301. package/dist/lib/launch/launch-files.js.map +1 -1
  302. package/dist/lib/launch/launch.d.ts +51 -2
  303. package/dist/lib/launch/launch.d.ts.map +1 -1
  304. package/dist/lib/launch/launch.js +70 -6
  305. package/dist/lib/launch/launch.js.map +1 -1
  306. package/dist/lib/launch/layer-files.d.ts +12 -0
  307. package/dist/lib/launch/layer-files.d.ts.map +1 -0
  308. package/dist/lib/launch/layer-files.js +43 -0
  309. package/dist/lib/launch/layer-files.js.map +1 -0
  310. package/dist/lib/launch/mcp-child-env.d.ts +30 -0
  311. package/dist/lib/launch/mcp-child-env.d.ts.map +1 -0
  312. package/dist/lib/launch/mcp-child-env.js +151 -0
  313. package/dist/lib/launch/mcp-child-env.js.map +1 -0
  314. package/dist/lib/launch/pick-agent.d.ts.map +1 -1
  315. package/dist/lib/launch/pick-agent.js +7 -6
  316. package/dist/lib/launch/pick-agent.js.map +1 -1
  317. package/dist/lib/launch/picker-options.d.ts.map +1 -1
  318. package/dist/lib/launch/picker-options.js +7 -2
  319. package/dist/lib/launch/picker-options.js.map +1 -1
  320. package/dist/lib/launch/qwen-state.d.ts +30 -0
  321. package/dist/lib/launch/qwen-state.d.ts.map +1 -0
  322. package/dist/lib/launch/qwen-state.js +57 -0
  323. package/dist/lib/launch/qwen-state.js.map +1 -0
  324. package/dist/lib/launch/qwen-trust.d.ts +24 -0
  325. package/dist/lib/launch/qwen-trust.d.ts.map +1 -0
  326. package/dist/lib/launch/qwen-trust.js +100 -0
  327. package/dist/lib/launch/qwen-trust.js.map +1 -0
  328. package/dist/lib/launch/registry/agents/aider.d.ts +3 -0
  329. package/dist/lib/launch/registry/agents/aider.d.ts.map +1 -0
  330. package/dist/lib/launch/registry/agents/aider.js +13 -0
  331. package/dist/lib/launch/registry/agents/aider.js.map +1 -0
  332. package/dist/lib/launch/registry/agents/amp.d.ts +3 -0
  333. package/dist/lib/launch/registry/agents/amp.d.ts.map +1 -0
  334. package/dist/lib/launch/registry/agents/amp.js +14 -0
  335. package/dist/lib/launch/registry/agents/amp.js.map +1 -0
  336. package/dist/lib/launch/registry/agents/auggie.d.ts +3 -0
  337. package/dist/lib/launch/registry/agents/auggie.d.ts.map +1 -0
  338. package/dist/lib/launch/registry/agents/auggie.js +11 -0
  339. package/dist/lib/launch/registry/agents/auggie.js.map +1 -0
  340. package/dist/lib/launch/registry/agents/cline.d.ts +3 -0
  341. package/dist/lib/launch/registry/agents/cline.d.ts.map +1 -0
  342. package/dist/lib/launch/registry/agents/cline.js +19 -0
  343. package/dist/lib/launch/registry/agents/cline.js.map +1 -0
  344. package/dist/lib/launch/registry/agents/continue.d.ts +3 -0
  345. package/dist/lib/launch/registry/agents/continue.d.ts.map +1 -0
  346. package/dist/lib/launch/registry/agents/continue.js +20 -0
  347. package/dist/lib/launch/registry/agents/continue.js.map +1 -0
  348. package/dist/lib/launch/registry/agents/droid.d.ts +3 -0
  349. package/dist/lib/launch/registry/agents/droid.d.ts.map +1 -0
  350. package/dist/lib/launch/registry/agents/droid.js +13 -0
  351. package/dist/lib/launch/registry/agents/droid.js.map +1 -0
  352. package/dist/lib/launch/registry/agents/gemini-cli.js +2 -2
  353. package/dist/lib/launch/registry/agents/gemini-cli.js.map +1 -1
  354. package/dist/lib/launch/registry/agents/goose.d.ts +3 -0
  355. package/dist/lib/launch/registry/agents/goose.d.ts.map +1 -0
  356. package/dist/lib/launch/registry/agents/goose.js +20 -0
  357. package/dist/lib/launch/registry/agents/goose.js.map +1 -0
  358. package/dist/lib/launch/registry/agents/grok-build.d.ts +3 -0
  359. package/dist/lib/launch/registry/agents/grok-build.d.ts.map +1 -0
  360. package/dist/lib/launch/registry/agents/grok-build.js +14 -0
  361. package/dist/lib/launch/registry/agents/grok-build.js.map +1 -0
  362. package/dist/lib/launch/registry/agents/kiro.d.ts +3 -0
  363. package/dist/lib/launch/registry/agents/kiro.d.ts.map +1 -0
  364. package/dist/lib/launch/registry/agents/kiro.js +11 -0
  365. package/dist/lib/launch/registry/agents/kiro.js.map +1 -0
  366. package/dist/lib/launch/registry/agents/qwen.d.ts +3 -0
  367. package/dist/lib/launch/registry/agents/qwen.d.ts.map +1 -0
  368. package/dist/lib/launch/registry/agents/qwen.js +11 -0
  369. package/dist/lib/launch/registry/agents/qwen.js.map +1 -0
  370. package/dist/lib/launch/registry/index.d.ts +4 -1
  371. package/dist/lib/launch/registry/index.d.ts.map +1 -1
  372. package/dist/lib/launch/registry/index.js +15 -2
  373. package/dist/lib/launch/registry/index.js.map +1 -1
  374. package/dist/lib/launch/registry/types.d.ts +17 -1
  375. package/dist/lib/launch/registry/types.d.ts.map +1 -1
  376. package/dist/lib/launch/run-agent.d.ts +11 -0
  377. package/dist/lib/launch/run-agent.d.ts.map +1 -1
  378. package/dist/lib/launch/run-agent.js +22 -1
  379. package/dist/lib/launch/run-agent.js.map +1 -1
  380. package/dist/lib/launch/strict-entry.d.ts +22 -2
  381. package/dist/lib/launch/strict-entry.d.ts.map +1 -1
  382. package/dist/lib/launch/strict-entry.js +82 -2
  383. package/dist/lib/launch/strict-entry.js.map +1 -1
  384. package/dist/lib/launch/yaml-scan.d.ts +59 -0
  385. package/dist/lib/launch/yaml-scan.d.ts.map +1 -0
  386. package/dist/lib/launch/yaml-scan.js +275 -0
  387. package/dist/lib/launch/yaml-scan.js.map +1 -0
  388. package/dist/lib/llm-providers.d.ts +66 -0
  389. package/dist/lib/llm-providers.d.ts.map +1 -0
  390. package/dist/lib/llm-providers.js +150 -0
  391. package/dist/lib/llm-providers.js.map +1 -0
  392. package/dist/lib/local-db-epoch.d.ts +4 -0
  393. package/dist/lib/local-db-epoch.d.ts.map +1 -0
  394. package/dist/lib/local-db-epoch.js +19 -0
  395. package/dist/lib/local-db-epoch.js.map +1 -0
  396. package/dist/lib/local-db-migrate.d.ts +85 -0
  397. package/dist/lib/local-db-migrate.d.ts.map +1 -0
  398. package/dist/lib/local-db-migrate.js +484 -0
  399. package/dist/lib/local-db-migrate.js.map +1 -0
  400. package/dist/lib/local-db-v10.d.ts +28 -0
  401. package/dist/lib/local-db-v10.d.ts.map +1 -0
  402. package/dist/lib/local-db-v10.js +49 -0
  403. package/dist/lib/local-db-v10.js.map +1 -0
  404. package/dist/lib/local-db-v11.d.ts +24 -0
  405. package/dist/lib/local-db-v11.d.ts.map +1 -0
  406. package/dist/lib/local-db-v11.js +25 -0
  407. package/dist/lib/local-db-v11.js.map +1 -0
  408. package/dist/lib/local-db-v7.d.ts +30 -0
  409. package/dist/lib/local-db-v7.d.ts.map +1 -0
  410. package/dist/lib/local-db-v7.js +285 -0
  411. package/dist/lib/local-db-v7.js.map +1 -0
  412. package/dist/lib/local-db-v8.d.ts +22 -0
  413. package/dist/lib/local-db-v8.d.ts.map +1 -0
  414. package/dist/lib/local-db-v8.js +33 -0
  415. package/dist/lib/local-db-v8.js.map +1 -0
  416. package/dist/lib/local-db-v9.d.ts +10 -0
  417. package/dist/lib/local-db-v9.d.ts.map +1 -0
  418. package/dist/lib/local-db-v9.js +8 -0
  419. package/dist/lib/local-db-v9.js.map +1 -0
  420. package/dist/lib/local-db.d.ts +61 -11
  421. package/dist/lib/local-db.d.ts.map +1 -1
  422. package/dist/lib/local-db.js +186 -371
  423. package/dist/lib/local-db.js.map +1 -1
  424. package/dist/lib/local-embeddings.d.ts.map +1 -1
  425. package/dist/lib/local-embeddings.js +2 -2
  426. package/dist/lib/local-embeddings.js.map +1 -1
  427. package/dist/lib/local-gateway-client.d.ts +30 -87
  428. package/dist/lib/local-gateway-client.d.ts.map +1 -1
  429. package/dist/lib/local-gateway-client.js +182 -171
  430. package/dist/lib/local-gateway-client.js.map +1 -1
  431. package/dist/lib/local-ingest.d.ts +129 -0
  432. package/dist/lib/local-ingest.d.ts.map +1 -0
  433. package/dist/lib/local-ingest.js +81 -0
  434. package/dist/lib/local-ingest.js.map +1 -0
  435. package/dist/lib/local-link-pass.d.ts +15 -0
  436. package/dist/lib/local-link-pass.d.ts.map +1 -0
  437. package/dist/lib/local-link-pass.js +61 -0
  438. package/dist/lib/local-link-pass.js.map +1 -0
  439. package/dist/lib/local-llm.d.ts +63 -12
  440. package/dist/lib/local-llm.d.ts.map +1 -1
  441. package/dist/lib/local-llm.js +229 -104
  442. package/dist/lib/local-llm.js.map +1 -1
  443. package/dist/lib/local-mode.d.ts +4 -1
  444. package/dist/lib/local-mode.d.ts.map +1 -1
  445. package/dist/lib/local-mode.js +16 -1
  446. package/dist/lib/local-mode.js.map +1 -1
  447. package/dist/lib/local-provenance.d.ts +14 -0
  448. package/dist/lib/local-provenance.d.ts.map +1 -0
  449. package/dist/lib/local-provenance.js +14 -0
  450. package/dist/lib/local-provenance.js.map +1 -0
  451. package/dist/lib/local-thresholds.d.ts +70 -0
  452. package/dist/lib/local-thresholds.d.ts.map +1 -0
  453. package/dist/lib/local-thresholds.js +79 -0
  454. package/dist/lib/local-thresholds.js.map +1 -0
  455. package/dist/lib/mcp/mark-tool.d.ts +27 -0
  456. package/dist/lib/mcp/mark-tool.d.ts.map +1 -0
  457. package/dist/lib/mcp/mark-tool.js +103 -0
  458. package/dist/lib/mcp/mark-tool.js.map +1 -0
  459. package/dist/lib/mcp/share-tool.d.ts +46 -0
  460. package/dist/lib/mcp/share-tool.d.ts.map +1 -0
  461. package/dist/lib/mcp/share-tool.js +68 -0
  462. package/dist/lib/mcp/share-tool.js.map +1 -0
  463. package/dist/lib/mcp/tool-rules.d.ts +30 -0
  464. package/dist/lib/mcp/tool-rules.d.ts.map +1 -0
  465. package/dist/lib/mcp/tool-rules.js +84 -0
  466. package/dist/lib/mcp/tool-rules.js.map +1 -0
  467. package/dist/lib/mcp-backfill.d.ts +89 -0
  468. package/dist/lib/mcp-backfill.d.ts.map +1 -0
  469. package/dist/lib/mcp-backfill.js +194 -0
  470. package/dist/lib/mcp-backfill.js.map +1 -0
  471. package/dist/lib/mcp-scope.d.ts +90 -0
  472. package/dist/lib/mcp-scope.d.ts.map +1 -0
  473. package/dist/lib/mcp-scope.js +125 -0
  474. package/dist/lib/mcp-scope.js.map +1 -0
  475. package/dist/lib/mcp-sync.d.ts +64 -0
  476. package/dist/lib/mcp-sync.d.ts.map +1 -0
  477. package/dist/lib/mcp-sync.js +183 -0
  478. package/dist/lib/mcp-sync.js.map +1 -0
  479. package/dist/lib/personal-import.d.ts +7 -0
  480. package/dist/lib/personal-import.d.ts.map +1 -1
  481. package/dist/lib/personal-import.js +13 -1
  482. package/dist/lib/personal-import.js.map +1 -1
  483. package/dist/lib/safe-config-write.d.ts +12 -1
  484. package/dist/lib/safe-config-write.d.ts.map +1 -1
  485. package/dist/lib/safe-config-write.js +162 -9
  486. package/dist/lib/safe-config-write.js.map +1 -1
  487. package/dist/lib/scope-choices.d.ts +51 -0
  488. package/dist/lib/scope-choices.d.ts.map +1 -0
  489. package/dist/lib/scope-choices.js +193 -0
  490. package/dist/lib/scope-choices.js.map +1 -0
  491. package/dist/lib/scope-connect.d.ts +82 -0
  492. package/dist/lib/scope-connect.d.ts.map +1 -0
  493. package/dist/lib/scope-connect.js +258 -0
  494. package/dist/lib/scope-connect.js.map +1 -0
  495. package/dist/lib/scope-defaults.d.ts +3 -0
  496. package/dist/lib/scope-defaults.d.ts.map +1 -0
  497. package/dist/lib/scope-defaults.js +42 -0
  498. package/dist/lib/scope-defaults.js.map +1 -0
  499. package/dist/lib/scope-real.d.ts +223 -0
  500. package/dist/lib/scope-real.d.ts.map +1 -0
  501. package/dist/lib/scope-real.js +58 -0
  502. package/dist/lib/scope-real.js.map +1 -0
  503. package/dist/lib/scope-values.d.ts +76 -0
  504. package/dist/lib/scope-values.d.ts.map +1 -0
  505. package/dist/lib/scope-values.js +169 -0
  506. package/dist/lib/scope-values.js.map +1 -0
  507. package/dist/lib/scope.d.ts +161 -0
  508. package/dist/lib/scope.d.ts.map +1 -0
  509. package/dist/lib/scope.js +323 -0
  510. package/dist/lib/scope.js.map +1 -0
  511. package/dist/lib/share/command.d.ts +32 -0
  512. package/dist/lib/share/command.d.ts.map +1 -0
  513. package/dist/lib/share/command.js +136 -0
  514. package/dist/lib/share/command.js.map +1 -0
  515. package/dist/lib/share/ledger.d.ts +59 -0
  516. package/dist/lib/share/ledger.d.ts.map +1 -0
  517. package/dist/lib/share/ledger.js +135 -0
  518. package/dist/lib/share/ledger.js.map +1 -0
  519. package/dist/lib/share/payload.d.ts +92 -0
  520. package/dist/lib/share/payload.d.ts.map +1 -0
  521. package/dist/lib/share/payload.js +138 -0
  522. package/dist/lib/share/payload.js.map +1 -0
  523. package/dist/lib/share/pending.d.ts +48 -0
  524. package/dist/lib/share/pending.d.ts.map +1 -0
  525. package/dist/lib/share/pending.js +130 -0
  526. package/dist/lib/share/pending.js.map +1 -0
  527. package/dist/lib/share/preview.d.ts +18 -0
  528. package/dist/lib/share/preview.d.ts.map +1 -0
  529. package/dist/lib/share/preview.js +72 -0
  530. package/dist/lib/share/preview.js.map +1 -0
  531. package/dist/lib/share/run.d.ts +115 -0
  532. package/dist/lib/share/run.d.ts.map +1 -0
  533. package/dist/lib/share/run.js +261 -0
  534. package/dist/lib/share/run.js.map +1 -0
  535. package/dist/lib/share/salt.d.ts +2 -0
  536. package/dist/lib/share/salt.d.ts.map +1 -0
  537. package/dist/lib/share/salt.js +44 -0
  538. package/dist/lib/share/salt.js.map +1 -0
  539. package/dist/lib/share/secret-patterns.json +100 -0
  540. package/dist/lib/share/secret-scan.d.ts +19 -0
  541. package/dist/lib/share/secret-scan.d.ts.map +1 -0
  542. package/dist/lib/share/secret-scan.js +75 -0
  543. package/dist/lib/share/secret-scan.js.map +1 -0
  544. package/dist/lib/share/tty.d.ts +4 -0
  545. package/dist/lib/share/tty.d.ts.map +1 -0
  546. package/dist/lib/share/tty.js +57 -0
  547. package/dist/lib/share/tty.js.map +1 -0
  548. package/dist/lib/share/visible.d.ts +4 -0
  549. package/dist/lib/share/visible.d.ts.map +1 -0
  550. package/dist/lib/share/visible.js +30 -0
  551. package/dist/lib/share/visible.js.map +1 -0
  552. package/dist/lib/share/wire.d.ts +98 -0
  553. package/dist/lib/share/wire.d.ts.map +1 -0
  554. package/dist/lib/share/wire.js +43 -0
  555. package/dist/lib/share/wire.js.map +1 -0
  556. package/dist/lib/similarity/embedding-matrix.d.ts +64 -0
  557. package/dist/lib/similarity/embedding-matrix.d.ts.map +1 -0
  558. package/dist/lib/similarity/embedding-matrix.js +119 -0
  559. package/dist/lib/similarity/embedding-matrix.js.map +1 -0
  560. package/dist/lib/since-flag.d.ts +11 -0
  561. package/dist/lib/since-flag.d.ts.map +1 -0
  562. package/dist/lib/since-flag.js +24 -0
  563. package/dist/lib/since-flag.js.map +1 -0
  564. package/dist/lib/since.d.ts +59 -0
  565. package/dist/lib/since.d.ts.map +1 -0
  566. package/dist/lib/since.js +86 -0
  567. package/dist/lib/since.js.map +1 -0
  568. package/dist/lib/source-key.d.ts +13 -0
  569. package/dist/lib/source-key.d.ts.map +1 -0
  570. package/dist/lib/source-key.js +60 -0
  571. package/dist/lib/source-key.js.map +1 -0
  572. package/dist/lib/source-sync-state.d.ts +12 -0
  573. package/dist/lib/source-sync-state.d.ts.map +1 -0
  574. package/dist/lib/source-sync-state.js +43 -0
  575. package/dist/lib/source-sync-state.js.map +1 -0
  576. package/dist/lib/startup-backfill-track.d.ts +2 -0
  577. package/dist/lib/startup-backfill-track.d.ts.map +1 -0
  578. package/dist/lib/startup-backfill-track.js +6 -0
  579. package/dist/lib/startup-backfill-track.js.map +1 -0
  580. package/dist/lib/startup-env.d.ts +8 -0
  581. package/dist/lib/startup-env.d.ts.map +1 -0
  582. package/dist/lib/startup-env.js +8 -0
  583. package/dist/lib/startup-env.js.map +1 -0
  584. package/dist/lib/startup-xdg.d.ts +2 -0
  585. package/dist/lib/startup-xdg.d.ts.map +1 -0
  586. package/dist/lib/startup-xdg.js +9 -0
  587. package/dist/lib/startup-xdg.js.map +1 -0
  588. package/dist/lib/sync/after-connect.d.ts +2 -0
  589. package/dist/lib/sync/after-connect.d.ts.map +1 -0
  590. package/dist/lib/sync/after-connect.js +18 -0
  591. package/dist/lib/sync/after-connect.js.map +1 -0
  592. package/dist/lib/sync/bg-claim.d.ts +14 -0
  593. package/dist/lib/sync/bg-claim.d.ts.map +1 -0
  594. package/dist/lib/sync/bg-claim.js +97 -0
  595. package/dist/lib/sync/bg-claim.js.map +1 -0
  596. package/dist/lib/sync/blocked.d.ts +8 -0
  597. package/dist/lib/sync/blocked.d.ts.map +1 -0
  598. package/dist/lib/sync/blocked.js +44 -0
  599. package/dist/lib/sync/blocked.js.map +1 -0
  600. package/dist/lib/sync/classify.d.ts +34 -0
  601. package/dist/lib/sync/classify.d.ts.map +1 -0
  602. package/dist/lib/sync/classify.js +91 -0
  603. package/dist/lib/sync/classify.js.map +1 -0
  604. package/dist/lib/sync/drain.d.ts +16 -0
  605. package/dist/lib/sync/drain.d.ts.map +1 -0
  606. package/dist/lib/sync/drain.js +33 -0
  607. package/dist/lib/sync/drain.js.map +1 -0
  608. package/dist/lib/sync/forget.d.ts +12 -0
  609. package/dist/lib/sync/forget.d.ts.map +1 -0
  610. package/dist/lib/sync/forget.js +32 -0
  611. package/dist/lib/sync/forget.js.map +1 -0
  612. package/dist/lib/sync/launch-hook.d.ts +42 -0
  613. package/dist/lib/sync/launch-hook.d.ts.map +1 -0
  614. package/dist/lib/sync/launch-hook.js +117 -0
  615. package/dist/lib/sync/launch-hook.js.map +1 -0
  616. package/dist/lib/sync/lock.d.ts +35 -0
  617. package/dist/lib/sync/lock.d.ts.map +1 -0
  618. package/dist/lib/sync/lock.js +175 -0
  619. package/dist/lib/sync/lock.js.map +1 -0
  620. package/dist/lib/sync/purge.d.ts +38 -0
  621. package/dist/lib/sync/purge.d.ts.map +1 -0
  622. package/dist/lib/sync/purge.js +61 -0
  623. package/dist/lib/sync/purge.js.map +1 -0
  624. package/dist/lib/sync/real-env.d.ts +208 -0
  625. package/dist/lib/sync/real-env.d.ts.map +1 -0
  626. package/dist/lib/sync/real-env.js +47 -0
  627. package/dist/lib/sync/real-env.js.map +1 -0
  628. package/dist/lib/sync/relink.d.ts +14 -0
  629. package/dist/lib/sync/relink.d.ts.map +1 -0
  630. package/dist/lib/sync/relink.js +36 -0
  631. package/dist/lib/sync/relink.js.map +1 -0
  632. package/dist/lib/sync/report.d.ts +3 -0
  633. package/dist/lib/sync/report.d.ts.map +1 -0
  634. package/dist/lib/sync/report.js +54 -0
  635. package/dist/lib/sync/report.js.map +1 -0
  636. package/dist/lib/sync/run-all.d.ts +23 -0
  637. package/dist/lib/sync/run-all.d.ts.map +1 -0
  638. package/dist/lib/sync/run-all.js +30 -0
  639. package/dist/lib/sync/run-all.js.map +1 -0
  640. package/dist/lib/sync/run-source.d.ts +73 -0
  641. package/dist/lib/sync/run-source.d.ts.map +1 -0
  642. package/dist/lib/sync/run-source.js +262 -0
  643. package/dist/lib/sync/run-source.js.map +1 -0
  644. package/dist/lib/sync/safe-read.d.ts +4 -0
  645. package/dist/lib/sync/safe-read.d.ts.map +1 -0
  646. package/dist/lib/sync/safe-read.js +40 -0
  647. package/dist/lib/sync/safe-read.js.map +1 -0
  648. package/dist/lib/sync/should-background-sync.d.ts +31 -0
  649. package/dist/lib/sync/should-background-sync.d.ts.map +1 -0
  650. package/dist/lib/sync/should-background-sync.js +69 -0
  651. package/dist/lib/sync/should-background-sync.js.map +1 -0
  652. package/dist/lib/sync/source-ids.d.ts +10 -0
  653. package/dist/lib/sync/source-ids.d.ts.map +1 -0
  654. package/dist/lib/sync/source-ids.js +9 -0
  655. package/dist/lib/sync/source-ids.js.map +1 -0
  656. package/dist/lib/sync/sources.d.ts +33 -0
  657. package/dist/lib/sync/sources.d.ts.map +1 -0
  658. package/dist/lib/sync/sources.js +37 -0
  659. package/dist/lib/sync/sources.js.map +1 -0
  660. package/dist/lib/sync/spawn-background.d.ts +27 -0
  661. package/dist/lib/sync/spawn-background.d.ts.map +1 -0
  662. package/dist/lib/sync/spawn-background.js +66 -0
  663. package/dist/lib/sync/spawn-background.js.map +1 -0
  664. package/dist/lib/sync/status.d.ts +57 -0
  665. package/dist/lib/sync/status.d.ts.map +1 -0
  666. package/dist/lib/sync/status.js +166 -0
  667. package/dist/lib/sync/status.js.map +1 -0
  668. package/dist/lib/sync/summary-read.d.ts +19 -0
  669. package/dist/lib/sync/summary-read.d.ts.map +1 -0
  670. package/dist/lib/sync/summary-read.js +39 -0
  671. package/dist/lib/sync/summary-read.js.map +1 -0
  672. package/dist/lib/sync/summary.d.ts +10 -0
  673. package/dist/lib/sync/summary.d.ts.map +1 -0
  674. package/dist/lib/sync/summary.js +80 -0
  675. package/dist/lib/sync/summary.js.map +1 -0
  676. package/dist/lib/sync/sync-state.d.ts +128 -0
  677. package/dist/lib/sync/sync-state.d.ts.map +1 -0
  678. package/dist/lib/sync/sync-state.js +253 -0
  679. package/dist/lib/sync/sync-state.js.map +1 -0
  680. package/dist/lib/sync/telemetry.d.ts +20 -0
  681. package/dist/lib/sync/telemetry.d.ts.map +1 -0
  682. package/dist/lib/sync/telemetry.js +31 -0
  683. package/dist/lib/sync/telemetry.js.map +1 -0
  684. package/dist/lib/sync/threads.d.ts +48 -0
  685. package/dist/lib/sync/threads.d.ts.map +1 -0
  686. package/dist/lib/sync/threads.js +82 -0
  687. package/dist/lib/sync/threads.js.map +1 -0
  688. package/dist/lib/sync/window.d.ts +72 -0
  689. package/dist/lib/sync/window.d.ts.map +1 -0
  690. package/dist/lib/sync/window.js +112 -0
  691. package/dist/lib/sync/window.js.map +1 -0
  692. package/dist/lib/team-cta.d.ts +11 -0
  693. package/dist/lib/team-cta.d.ts.map +1 -0
  694. package/dist/lib/team-cta.js +16 -0
  695. package/dist/lib/team-cta.js.map +1 -0
  696. package/dist/lib/telemetry-ci.d.ts +2 -0
  697. package/dist/lib/telemetry-ci.d.ts.map +1 -0
  698. package/dist/lib/telemetry-ci.js +21 -0
  699. package/dist/lib/telemetry-ci.js.map +1 -0
  700. package/dist/lib/telemetry-consent.d.ts +44 -23
  701. package/dist/lib/telemetry-consent.d.ts.map +1 -1
  702. package/dist/lib/telemetry-consent.js +74 -35
  703. package/dist/lib/telemetry-consent.js.map +1 -1
  704. package/dist/lib/telemetry-env.d.ts +1 -1
  705. package/dist/lib/usage-telemetry.d.ts +87 -22
  706. package/dist/lib/usage-telemetry.d.ts.map +1 -1
  707. package/dist/lib/usage-telemetry.js +263 -74
  708. package/dist/lib/usage-telemetry.js.map +1 -1
  709. package/dist/lib/xdg.d.ts +27 -0
  710. package/dist/lib/xdg.d.ts.map +1 -0
  711. package/dist/lib/xdg.js +56 -0
  712. package/dist/lib/xdg.js.map +1 -0
  713. package/package.json +3 -2
  714. package/dist/commands/push.d.ts +0 -25
  715. package/dist/commands/push.d.ts.map +0 -1
  716. package/dist/commands/push.js +0 -98
  717. package/dist/commands/push.js.map +0 -1
@@ -0,0 +1,36 @@
1
+ /**
2
+ * L5, Decision 30: the re-link queue. Every row's `enriched_at` is NULL after the v7 upgrade (and
3
+ * after an ingest that died mid-way), because nothing on disk tells a finished ingest from an
4
+ * unfinished one. Each sync takes those rows, oldest first, and runs only the step each one is
5
+ * missing: the link pass alone when the embedding is stored (no embed call), a full re-ingest when
6
+ * it is not. After the first sync the queue is empty and this does no work.
7
+ *
8
+ * Local and free: no network, no LLM. It runs in the background child like the rest of the sync.
9
+ */
10
+ import { EMBEDDING_MODEL_ID } from '../local-embeddings.js';
11
+ import { unfinishedRows } from './sync-state.js';
12
+ const BATCH = 1_000;
13
+ export async function relinkAll(dbPath, client, o = {}) {
14
+ const now = o.now ?? Date.now;
15
+ const total = { linked: 0, embedded: 0, skipped: 0, timedOut: false };
16
+ const seen = new Set();
17
+ for (;;) {
18
+ if (o.deadlineAt !== undefined && now() >= o.deadlineAt) {
19
+ total.timedOut = true;
20
+ break;
21
+ }
22
+ // Ask for enough to step over what was already handed over, or a long run of handled-but-unstamped rows
23
+ // at the head of the queue would end it early with rows still waiting behind them.
24
+ const rows = unfinishedRows(dbPath, EMBEDDING_MODEL_ID, (o.batch ?? BATCH) + seen.size).filter((r) => !seen.has(r.id)).slice(0, o.batch ?? BATCH);
25
+ if (rows.length === 0)
26
+ break;
27
+ for (const r of rows)
28
+ seen.add(r.id);
29
+ const r = await client.relinkUnfinished(rows);
30
+ total.linked += r.linked;
31
+ total.embedded += r.embedded;
32
+ total.skipped += r.skipped;
33
+ }
34
+ return total;
35
+ }
36
+ //# sourceMappingURL=relink.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relink.js","sourceRoot":"","sources":["../../../src/lib/sync/relink.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAIjD,MAAM,KAAK,GAAG,KAAK,CAAC;AAEpB,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,MAAc,EACd,MAA6E,EAC7E,IAAiE,EAAE;IAEnE,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;IAC9B,MAAM,KAAK,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IACtE,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,SAAS,CAAC;QACR,IAAI,CAAC,CAAC,UAAU,KAAK,SAAS,IAAI,GAAG,EAAE,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC;YAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;YAAC,MAAM;QAAC,CAAC;QAC1F,wGAAwG;QACxG,mFAAmF;QACnF,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC;QAClJ,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM;QAC7B,KAAK,MAAM,CAAC,IAAI,IAAI;YAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACrC,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC9C,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC;QACzB,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC;QAC7B,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC;IAC7B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { SourceOutcome } from './run-source.js';
2
+ export declare function renderOutcome(o: SourceOutcome): string[];
3
+ //# sourceMappingURL=report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../../src/lib/sync/report.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAUrD,wBAAgB,aAAa,CAAC,CAAC,EAAE,aAAa,GAAG,MAAM,EAAE,CAgCxD"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * L5: what a sync says, in words a person can act on. One renderer for the CLI line and for the
3
+ * `align_sync` status text, so the two cannot describe the same run differently.
4
+ *
5
+ * Honesty rules (the plan's, verification.md's): an incomplete read says the date it reached and
6
+ * the skip that stopped it; a drain that ran out of budget says how many items are still thin; a
7
+ * refused token says the command to run and nothing about deleting anything; no line carries item
8
+ * content or a raw URL (the SDK's skip details are written to be printed).
9
+ */
10
+ import { CAPTURE_SOURCES } from '../capture-sources.js';
11
+ const labelOf = (id) => CAPTURE_SOURCES[id]?.label ?? id;
12
+ const day = (iso) => iso.slice(0, 10);
13
+ /** The skip that stopped a read short: the first incomplete kind, in the fetcher's own words. */
14
+ function stopper(skips) {
15
+ return skips.find((s) => s.kind !== undefined && s.kind !== 'shape');
16
+ }
17
+ export function renderOutcome(o) {
18
+ const label = labelOf(o.source);
19
+ switch (o.state) {
20
+ case 'not_connected':
21
+ case 'needs_reauth':
22
+ case 'manual':
23
+ case 'locked':
24
+ case 'backfill_running':
25
+ case 'recent':
26
+ return [`${label}: ${o.message ?? o.state}`];
27
+ case 'error':
28
+ return [`${label}: the sync failed (${o.message ?? 'unknown error'}). Nothing about the saved token changed; the next sync tries again.`];
29
+ case 'ok':
30
+ case 'partial': {
31
+ const since = o.since !== undefined ? ` since ${day(o.since)}` : '';
32
+ const lines = [`${label}: ${o.read} read${since} (${o.created} new, ${o.updated} changed).`];
33
+ if (o.state === 'partial') {
34
+ const why = stopper(o.skips);
35
+ const reached = o.reachedBack !== undefined ? ` Reached back to ${day(o.reachedBack)}; the next sync carries on from there.` : '';
36
+ lines.push(` Stopped early${why ? `: ${why.count} ${why.detail}` : ''}.${reached}`);
37
+ }
38
+ if (o.scopeNote)
39
+ lines.push(` Read ${o.scopeNote}.`);
40
+ if (o.scopeLine)
41
+ lines.push(` ${o.scopeLine}`);
42
+ if (o.persistentHole)
43
+ lines.push(` Persistent hole: ${o.persistentHole}. The sync reads the rest and no longer waits for it; fix the access or leave it.`);
44
+ if (o.drain && (o.drain.enriched > 0 || o.drain.remaining > 0)) {
45
+ lines.push(` Discussion: ${o.drain.enriched} read${o.drain.remaining > 0 ? `, ${o.drain.remaining} still to come (the next sync continues)` : ''}.`);
46
+ }
47
+ const rest = o.skips.filter((s) => s !== stopper(o.skips) && !(o.drain?.skips ?? []).includes(s));
48
+ for (const s of rest)
49
+ lines.push(` ${s.count} ${s.detail}.`);
50
+ return lines;
51
+ }
52
+ }
53
+ }
54
+ //# sourceMappingURL=report.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.js","sourceRoot":"","sources":["../../../src/lib/sync/report.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * L5: one `align sync` invocation across sources: each source under its own lock, then the
3
+ * re-link queue once (it belongs to the graph, not to a source), then the launch summary.
4
+ */
5
+ /** The re-link queue gets its OWN budget, counted from when it starts: a source that spent all of its own must not leave the queue none. */
6
+ export declare const RELINK_BUDGET_MS = 60000;
7
+ import { type RelinkResult } from './relink.js';
8
+ import { type SourceOutcome, type SyncEnv } from './run-source.js';
9
+ export interface SyncRunResult {
10
+ outcomes: SourceOutcome[];
11
+ /** Absent when another process holds the re-link lock (it is doing that work). */
12
+ relink?: RelinkResult & {
13
+ timedOut: boolean;
14
+ };
15
+ /** The re-link queue failed. The sources were already synced and recorded; this is reported, not thrown. */
16
+ relinkError?: string;
17
+ }
18
+ export declare function runSync(sources: readonly string[], env: SyncEnv, o?: {
19
+ trigger: 'cli' | 'background';
20
+ minIntervalMs?: number;
21
+ onOutcome?: (o: SourceOutcome) => void;
22
+ }): Promise<SyncRunResult>;
23
+ //# sourceMappingURL=run-all.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-all.d.ts","sourceRoot":"","sources":["../../../src/lib/sync/run-all.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,4IAA4I;AAC5I,eAAO,MAAM,gBAAgB,QAAS,CAAC;AACvC,OAAO,EAAa,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,OAAO,EAAc,MAAM,iBAAiB,CAAC;AAE/E,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,kFAAkF;IAClF,MAAM,CAAC,EAAE,YAAY,GAAG;QAAE,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC;IAC9C,4GAA4G;IAC5G,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAsB,OAAO,CAC3B,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,GAAG,EAAE,OAAO,EACZ,CAAC,GAAE;IAAE,OAAO,EAAE,KAAK,GAAG,YAAY,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,aAAa,KAAK,IAAI,CAAA;CAAuB,GACxH,OAAO,CAAC,aAAa,CAAC,CAiBxB"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * L5: one `align sync` invocation across sources: each source under its own lock, then the
3
+ * re-link queue once (it belongs to the graph, not to a source), then the launch summary.
4
+ */
5
+ /** The re-link queue gets its OWN budget, counted from when it starts: a source that spent all of its own must not leave the queue none. */
6
+ export const RELINK_BUDGET_MS = 60_000;
7
+ import { relinkAll } from './relink.js';
8
+ import { syncSource } from './run-source.js';
9
+ export async function runSync(sources, env, o = { trigger: 'cli' }) {
10
+ const outcomes = [];
11
+ for (const source of sources) {
12
+ const out = await syncSource(source, env, { trigger: o.trigger, ...(o.minIntervalMs !== undefined ? { minIntervalMs: o.minIntervalMs } : {}) });
13
+ outcomes.push(out);
14
+ o.onOutcome?.(out);
15
+ }
16
+ const lock = env.lock('sync-relink');
17
+ if (!lock.ok)
18
+ return { outcomes };
19
+ try {
20
+ const relink = await relinkAll(env.dbPath, env.client, { deadlineAt: env.now().getTime() + RELINK_BUDGET_MS, now: () => env.now().getTime() });
21
+ return { outcomes, relink };
22
+ }
23
+ catch (e) {
24
+ return { outcomes, relinkError: (e instanceof Error ? e.message : String(e)).slice(0, 200) };
25
+ }
26
+ finally {
27
+ lock.release();
28
+ }
29
+ }
30
+ //# sourceMappingURL=run-all.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-all.js","sourceRoot":"","sources":["../../../src/lib/sync/run-all.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,4IAA4I;AAC5I,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC;AACvC,OAAO,EAAE,SAAS,EAAqB,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAoC,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAU/E,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,OAA0B,EAC1B,GAAY,EACZ,IAAuG,EAAE,OAAO,EAAE,KAAK,EAAE;IAEzH,MAAM,QAAQ,GAAoB,EAAE,CAAC;IACrC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAChJ,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;IACD,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACrC,IAAI,CAAC,IAAI,CAAC,EAAE;QAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;IAClC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,UAAU,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,GAAG,gBAAgB,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAC/I,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IAC9B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;IAC/F,CAAC;YAAS,CAAC;QACT,IAAI,CAAC,OAAO,EAAE,CAAC;IACjB,CAAC;AACH,CAAC"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * L5: one source, one sync run. The orchestration the pure pieces (window.ts, threads.ts) and
3
+ * the stores (sync-state.ts, drain.ts) are built for. Everything that touches the world arrives
4
+ * through `SyncEnv`, so a test runs the whole flow against a real graph file with a scripted fetch.
5
+ *
6
+ * What a run guarantees:
7
+ * - One writer per source: the lock is taken first and released in `finally`.
8
+ * - The watermark is never ahead of committed data. Items are ingested OLDEST FIRST in batches and,
9
+ * on a complete read, high_water follows each committed batch; an incomplete read moves nothing
10
+ * until it is finished (window.ts: finishRun).
11
+ * - A refused token is recorded (`needs_reauth`), never deleted, and never prompted for.
12
+ * - No classification, ever: ingest runs with `classify: false` (Decision 1).
13
+ * - A partial item (a Slack hot-thread re-read) is merged into the stored thread (Review addendum 3).
14
+ */
15
+ import type { CaptureFetchResult, CaptureSkip } from '../fetchers/capture.js';
16
+ import type { createLocalGatewayClient } from '../local-gateway-client.js';
17
+ import { type DrainResult } from './drain.js';
18
+ import type { Lock } from './lock.js';
19
+ import type { SourceWindow, SyncScope } from './sources.js';
20
+ import { type SyncStatus } from './sync-state.js';
21
+ export type SourceState = SyncStatus | 'locked' | 'backfill_running' | 'recent' | 'not_connected' | 'manual';
22
+ export interface SourceOutcome {
23
+ source: string;
24
+ state: SourceState;
25
+ /** Items the vendor returned this run. */
26
+ read: number;
27
+ created: number;
28
+ updated: number;
29
+ /** The oldest date this run reached, when it had to say so (an incomplete read). */
30
+ reachedBack?: string;
31
+ /** The lower bound the run asked the vendor for (absent for "all"). */
32
+ since?: string;
33
+ skips: CaptureSkip[];
34
+ drain?: DrainResult;
35
+ scopeNote?: string;
36
+ /** L4: why this source is only yours, or how to widen it - one line, printed as it is. */
37
+ scopeLine?: string;
38
+ message?: string;
39
+ /** Set when this run's hole has now come back PERSISTENT_HOLE_RUNS times in a row. */
40
+ persistentHole?: string;
41
+ /** Whose items this run read, once the scope was decided. Absent for a source that never got that far (locked, not connected). Only the telemetry reads it. */
42
+ scope?: 'yours' | 'team';
43
+ }
44
+ export interface SyncEnv {
45
+ dbPath: string;
46
+ now(): Date;
47
+ tokens(source: string): Record<string, string> | null;
48
+ scopeOf(source: string, o: {
49
+ trigger: 'cli' | 'background';
50
+ }): Promise<SyncScope>;
51
+ /** L4: print the one-time team-scope disclosure. Wired only for a foreground run; nobody is there to read it in the background. */
52
+ announce?(source: string, line: string): void;
53
+ /** L4: ask a person, default No, before an agent's waiting scope is read. Absent: not asked, so not read. */
54
+ confirm?(source: string, message: string): Promise<boolean>;
55
+ /** L4: remember the disclosure was told. Called only after `announce`. */
56
+ markDisclosed?(source: string, scopeKey: string): void;
57
+ fetch(source: string, tokens: Record<string, string>, win: SourceWindow, scope: SyncScope): Promise<CaptureFetchResult>;
58
+ client: Pick<ReturnType<typeof createLocalGatewayClient>, 'ingestBatch' | 'relinkUnfinished'>;
59
+ lock(name: string): Lock;
60
+ backfillRunning(source: string): boolean;
61
+ batchSize?: number;
62
+ /** Re-read ONE item whole by its URL (a Slack thread), or undefined when that is not possible. */
63
+ fetchWhole?: (source: string, tokens: Record<string, string>, url: string) => Promise<CaptureFetchResult['items'][number] | undefined>;
64
+ /** The GitHub discussion drain; defaults to the real one over `client`. A seam for tests. */
65
+ drain?: (token: string, deadlineMs: number) => Promise<DrainResult>;
66
+ }
67
+ export declare function syncSource(source: string, env: SyncEnv,
68
+ /** `minIntervalMs` applies to a background run only: a launch's child that finds the source tried more recently than this stops, so the interval holds across launches. */
69
+ o?: {
70
+ trigger: 'cli' | 'background';
71
+ minIntervalMs?: number;
72
+ }): Promise<SourceOutcome>;
73
+ //# sourceMappingURL=run-source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-source.d.ts","sourceRoot":"","sources":["../../../src/lib/sync/run-source.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAG9E,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAG3E,OAAO,EAAe,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EACwF,KAAK,UAAU,EAE7G,MAAM,iBAAiB,CAAC;AAIzB,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,QAAQ,GAAG,kBAAkB,GAAG,QAAQ,GAAG,eAAe,GAAG,QAAQ,CAAC;AAE7G,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,WAAW,CAAC;IACnB,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,oFAAoF;IACpF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uEAAuE;IACvE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0FAA0F;IAC1F,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sFAAsF;IACtF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,+JAA+J;IAC/J,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,IAAI,IAAI,CAAC;IACZ,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IACtD,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE;QAAE,OAAO,EAAE,KAAK,GAAG,YAAY,CAAA;KAAE,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAClF,mIAAmI;IACnI,QAAQ,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9C,6GAA6G;IAC7G,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5D,0EAA0E;IAC1E,aAAa,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACvD,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACxH,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO,wBAAwB,CAAC,EAAE,aAAa,GAAG,kBAAkB,CAAC,CAAC;IAC9F,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kGAAkG;IAClG,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC;IACvI,6FAA6F;IAC7F,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;CACrE;AAoCD,wBAAsB,UAAU,CAC9B,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,OAAO;AACZ,2KAA2K;AAC3K,CAAC,GAAE;IAAE,OAAO,EAAE,KAAK,GAAG,YAAY,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAuB,GAChF,OAAO,CAAC,aAAa,CAAC,CAqBxB"}
@@ -0,0 +1,262 @@
1
+ import { isAuthExpiry } from '../errors.js';
2
+ import { SYNC_TIME_BUDGET_MS } from '../import-defaults.js';
3
+ import { describeScopeKey } from '../scope-values.js';
4
+ import { connectorItemKey } from '../source-key.js';
5
+ import { drainGitHub } from './drain.js';
6
+ import { advanceHighWater, beginRun, markNeedsReauth, readRows, recordActivity, saveRun, storedByKey, threadRows, } from './sync-state.js';
7
+ import { HOT_THREAD_DAYS, mergePartialThread, selectHotThreads } from './threads.js';
8
+ import { ascendingByUpdated, finishRun, inheritedWindowSince, later, newestUpdated, nextWindow, PERSISTENT_HOLE_RUNS, plausible } from './window.js';
9
+ const BATCH = 50;
10
+ /**
11
+ * Which incompleteness is a DATE-ORDERED CUT, per source. A cut is only safe to resume with `until = oldestReached` when the fetcher
12
+ * read ONE listing, newest first, and stopped: then everything newer than the oldest item it returned was read. Anything else leaves
13
+ * a gap that no date describes (a space, a team, a channel, a second query, a slice that was never reached), and resuming "below
14
+ * the oldest item" would skip it for good. Read from the SDK (node_modules/@aligndottech/connector-core/dist/fetchers), verified one by one:
15
+ *
16
+ * - jira: jira.js:52 `ORDER BY updated DESC`, one JQL, one page token chain. Its stops, `time_budget` (:141) and `page_cap` (:146), both say
17
+ * "older issues not read". With the item limit it emits no skip at all (:182): a cut with no skip kinds.
18
+ * - notion: notion.js:171-197 one search sorted last_edited_time descending. `time_budget` (:238) stops it. Its `page_cap` (:158, :235) is a
19
+ * page BODY cut, not a listing stop, so it is a hole.
20
+ * - gitlab: gitlab.js:58-112 one merge-request listing, updated_at descending; `time_budget` (:112) stops it. An unreadable page is an
21
+ * `error` skip and is a hole.
22
+ *
23
+ * Everything else is a hole, by reading, not by guessing:
24
+ * - github: github.js:306-329 runs SEVERAL searches (involves, reviewed-by, issues, or repo PRs and issues), each month-sliced newest first
25
+ * (githubSearch.js:104-129), then `interleave`s them and trims to the limit (:327). The kept items are a prefix of EACH list, not of
26
+ * the merged one, so `oldestReached` is the oldest of the shortest prefix and the longer list's items below it are unread.
27
+ * Its `vendor_cap` (githubSearch.js:146) is a per-slice ceiling with older slices still read.
28
+ * - linear: linear.js:176 two parallel streams (assigned, created); confluence.js:206 one listing per space, `time_budget` ends the loop
29
+ * with whole spaces unread; teams.js:211-222 team by team, channel by channel; zoom.js:181 30-day windows; slack walks channels.
30
+ */
31
+ const CUT_KINDS_BY_SOURCE = {
32
+ jira: new Set(['time_budget', 'page_cap']),
33
+ notion: new Set(['time_budget']),
34
+ gitlab: new Set(['time_budget']),
35
+ };
36
+ /** Platforms whose partial items are threads of messages (Slack hot threads, Teams reply caps). */
37
+ const MERGEABLE = new Set(['slack', 'teams']);
38
+ const none = (source, state, message) => ({ source, state, read: 0, created: 0, updated: 0, skips: [], message });
39
+ export async function syncSource(source, env,
40
+ /** `minIntervalMs` applies to a background run only: a launch's child that finds the source tried more recently than this stops, so the interval holds across launches. */
41
+ o = { trigger: 'cli' }) {
42
+ const tokens = env.tokens(source);
43
+ if (tokens === null || !tokens['token'])
44
+ return none(source, 'not_connected', `${source} is not connected. Run: align connect ${source}`);
45
+ // Decision 21: a Teams token lasts about an hour, so a background run would hold a dead one.
46
+ if (source === 'teams' && o.trigger === 'background')
47
+ return none(source, 'manual', 'Teams is refreshed by hand: align connect teams');
48
+ const lock = env.lock(`sync-${source}`);
49
+ if (!lock.ok)
50
+ return none(source, 'locked', `already syncing${lock.holder ? ` (started ${lock.holder.started_at.slice(0, 16).replace('T', ' ')} UTC)` : ''}`);
51
+ try {
52
+ if (o.trigger === 'background' && o.minIntervalMs !== undefined) {
53
+ // Re-read AFTER taking the lock: the launcher's decision is older than the 20 s the child waited, and another child may have just finished.
54
+ const nowMs = env.now().getTime();
55
+ const tried = readRows(env.dbPath, source).flatMap((r) => [r.last_success_at, r.last_attempt_at])
56
+ .map((t) => (t === null ? Number.NaN : Date.parse(t))).filter((t) => !Number.isNaN(t) && t <= nowMs);
57
+ if (tried.length > 0 && nowMs - Math.max(...tried) < o.minIntervalMs)
58
+ return none(source, 'recent', `${source} was refreshed less than ${Math.round(o.minIntervalMs / 60_000)} minutes ago`);
59
+ }
60
+ if (env.backfillRunning(source))
61
+ return none(source, 'backfill_running', `a backfill of ${source} is running; it is reading the same history`);
62
+ return await run(source, tokens, env, lock, o);
63
+ }
64
+ finally {
65
+ lock.release();
66
+ }
67
+ }
68
+ async function run(source, tokens, env, lock, o) {
69
+ const now = env.now();
70
+ const nowIso = now.toISOString();
71
+ let scope = await env.scopeOf(source, { trigger: o.trigger });
72
+ // A source that must not be read until the person acts (Confluence with no spaces): no request, no row, the command to run.
73
+ if (scope.blocked !== undefined)
74
+ return none(source, 'manual', scope.blocked);
75
+ if (scope.activates && scope.disclosure !== undefined) {
76
+ // An agent's waiting scope offered to a person: it is read only after an explicit Yes. Anything else reads what was in force.
77
+ env.announce?.(source, scope.disclosure);
78
+ const yes = env.announce !== undefined && env.confirm !== undefined && await env.confirm(source, `Read ${describeScopeKey(source, scope.scopeKey, 'team')} now? No keeps your current scope.`);
79
+ if (yes)
80
+ env.markDisclosed?.(source, scope.scopeKey);
81
+ else
82
+ scope = await env.scopeOf(source, { trigger: 'background' });
83
+ if (scope.blocked !== undefined)
84
+ return none(source, 'manual', scope.blocked);
85
+ }
86
+ else if (scope.disclosure !== undefined && env.announce) {
87
+ env.announce(source, scope.disclosure);
88
+ env.markDisclosed?.(source, scope.scopeKey);
89
+ }
90
+ const key = { source, scopeKey: scope.scopeKey, scope: scope.scope };
91
+ const rows = readRows(env.dbPath, source);
92
+ // A new scope inherits the depth the person asked for on this source ("all" stays all).
93
+ const row = beginRun(env.dbPath, key, inheritedWindowSince(rows, now), nowIso);
94
+ if (row.status === 'needs_reauth') {
95
+ return { ...none(source, 'needs_reauth', `${source} needs the person to re-authenticate. Run: align connect ${source}`), scope: scope.scope };
96
+ }
97
+ const win = nextWindow(row, now);
98
+ const skips = [];
99
+ let hotThreads;
100
+ if (source === 'slack' && win.since !== undefined) {
101
+ const sel = selectHotThreads(threadRows(env.dbPath, 'slack'), now);
102
+ if (sel.hot.length > 0)
103
+ hotThreads = sel.hot;
104
+ if (sel.quiet > 0) {
105
+ skips.push({ kind: 'shape', count: sel.quiet, detail: `threads quiet for more than ${HOT_THREAD_DAYS} days are not re-read, so a late reply to one is not picked up` });
106
+ }
107
+ }
108
+ let fetched;
109
+ try {
110
+ fetched = await env.fetch(source, tokens, { ...win, ...(hotThreads ? { hotThreads } : {}) }, scope);
111
+ }
112
+ catch (e) {
113
+ return failed(source, key, row.window_since, env, e);
114
+ }
115
+ const { items, report } = fetched;
116
+ // Only a THROWN refusal of the token (above) marks a source needs_reauth. An auth SKIP is one repo, one channel or one
117
+ // project the token cannot see: it stays a skip of this scope and blocks nothing else.
118
+ skips.push(...report.skips);
119
+ const complete = report.complete === true;
120
+ // A cut needs ONE newest-first listing AND nothing but cut-kind skips beside it: any error, auth or other skip means
121
+ // something was unreadable in a place no date describes, and that makes the whole run a hole (see CUT_KINDS_BY_SOURCE).
122
+ const cutKinds = CUT_KINDS_BY_SOURCE[source];
123
+ const cut = !complete && cutKinds !== undefined && report.oldestReached !== undefined
124
+ && report.skips.every((k) => k.kind === 'shape' || (k.kind !== undefined && cutKinds.has(k.kind)));
125
+ const holeSkips = complete || cut ? [] : report.skips.filter((k) => k.kind !== 'shape');
126
+ const holeSig = holeSkips.length === 0 ? null : [...new Set(holeSkips.map((k) => `${k.kind}: ${k.detail.replace(/\d+/g, '#')}`))].sort().join(' | ').slice(0, 400);
127
+ const holeStreak = holeSig === null ? 0 : holeSig === row.hole_sig ? row.hole_streak + 1 : 1;
128
+ const persistent = holeStreak >= PERSISTENT_HOLE_RUNS;
129
+ const lostLock = () => none(source, 'locked', 'stopped: another sync took over this source while this one was paused. Nothing more was written.');
130
+ const size = env.batchSize ?? BATCH;
131
+ const wholeReads = { deadline: now.getTime() + WHOLE_THREAD_BUDGET_MS, kept: 0 };
132
+ const ordered = ascendingByUpdated(items);
133
+ let created = 0;
134
+ let updated = 0;
135
+ try {
136
+ for (let at = 0; at < ordered.length; at += size) {
137
+ // A holder that slept past the lock's lifetime may no longer be THE holder: check before every batch.
138
+ if (!lock.owned())
139
+ return lostLock();
140
+ const batch = ordered.slice(at, at + size);
141
+ const texts = await prepareBatch(env, tokens, batch, wholeReads);
142
+ const { snapshots } = await env.client.ingestBatch(batch.map((item, i) => ({
143
+ source_url: item.source_url, platform: item.platform, ...texts[i],
144
+ ...(item.created_at !== undefined ? { created_at: item.created_at } : {}),
145
+ ...(item.detail_pending === true ? { detail_pending: true } : {}),
146
+ })), { classify: false, keyed: true });
147
+ for (const s of snapshots) {
148
+ if (s.created)
149
+ created += 1;
150
+ else if (s.changed)
151
+ updated += 1;
152
+ }
153
+ recordActivity(env.dbPath, key.scopeKey, batch.flatMap((item, i) => (plausible(item.updated_at, now) !== undefined && snapshots[i] ? [{ decisionId: snapshots[i].id, platform: item.platform, updatedAt: item.updated_at }] : [])));
154
+ // Oldest first, so every older item is committed: this stamp is safe to resume from. Only a
155
+ // complete read may move it; an incomplete one is settled by finishRun once the cycle ends.
156
+ const committed = newestUpdated(batch, now);
157
+ if (complete && committed !== undefined)
158
+ advanceHighWater(env.dbPath, key, committed, now);
159
+ lock.touch();
160
+ }
161
+ }
162
+ catch (e) {
163
+ return failed(source, key, row.window_since, env, e, { created, updated, read: items.length });
164
+ }
165
+ if (wholeReads.kept > 0) {
166
+ skips.push({ kind: 'shape', count: wholeReads.kept, detail: `thread${wholeReads.kept === 1 ? '' : 's'} kept as partial and merged by appending: the whole thread could not be re-read (${wholeReads.reason ?? 'unknown'})` });
167
+ }
168
+ if (!lock.owned())
169
+ return lostLock();
170
+ // The row as it stands now: batches of a complete read have moved high_water already.
171
+ const current = readRows(env.dbPath, source).find((r) => r.scope_key === key.scopeKey) ?? row;
172
+ const fin = finishRun({ high_water: current.high_water, pending_until: row.pending_until }, {
173
+ complete, cut, persistent,
174
+ ...(report.highWater !== undefined ? { highWater: report.highWater } : {}),
175
+ ...(report.oldestReached !== undefined ? { oldestReached: report.oldestReached } : {}),
176
+ // The last run of a cycle a ceiling split: its own highWater is clamped to its `until`, so the
177
+ // cycle's top comes from THIS scope's own row, never from another scope's items.
178
+ ...(row.pending_until !== null && row.cycle_top !== null ? { cycleNewest: row.cycle_top } : {}),
179
+ now,
180
+ });
181
+ const cycleTop = cut ? later(row.cycle_top, plausible(report.highWater, now)) : null;
182
+ const persist = (more) => saveRun(env.dbPath, key, {
183
+ ...fin, cycle_top: cycleTop, hole_sig: holeSig, hole_streak: holeStreak, items: items.length, skips: [...skips, ...more],
184
+ attemptAt: env.now().toISOString(),
185
+ // Success is a COMPLETE read. A partial one is an attempt, and must not make the source look freshly synced.
186
+ ...(fin.status === 'ok' ? { successAt: env.now().toISOString() } : {}),
187
+ });
188
+ persist([]);
189
+ let drain;
190
+ if (source === 'github') {
191
+ const elapsed = env.now().getTime() - now.getTime();
192
+ const deadlineMs = Math.max(30_000, SYNC_TIME_BUDGET_MS - elapsed);
193
+ drain = await (env.drain ? env.drain(tokens['token'], deadlineMs) : drainGitHub(env.dbPath, env.client, tokens['token'], { deadlineMs }));
194
+ if (drain.skips.length > 0)
195
+ persist(drain.skips);
196
+ }
197
+ return {
198
+ source, state: fin.status, read: items.length, created, updated, skips: [...skips, ...(drain?.skips ?? [])], scope: scope.scope,
199
+ ...(win.since !== undefined ? { since: win.since } : {}),
200
+ ...(cut && report.oldestReached !== undefined ? { reachedBack: report.oldestReached } : {}),
201
+ ...(drain ? { drain } : {}),
202
+ ...(persistent && holeSig !== null ? { persistentHole: holeSig } : {}),
203
+ ...(report.scopeNote ? { scopeNote: report.scopeNote } : {}),
204
+ ...(scope.note !== undefined ? { scopeLine: scope.note } : {}),
205
+ };
206
+ }
207
+ /** Whole-thread re-reads run three at a time, and all of a run's together get this long, outside the SDK's own budget. */
208
+ const WHOLE_THREAD_CONCURRENCY = 3;
209
+ const WHOLE_THREAD_BUDGET_MS = 90_000;
210
+ async function prepareBatch(env, tokens, batch, whole) {
211
+ const out = [];
212
+ for (let at = 0; at < batch.length; at += WHOLE_THREAD_CONCURRENCY) {
213
+ out.push(...await Promise.all(batch.slice(at, at + WHOLE_THREAD_CONCURRENCY).map((item) => prepared(env, tokens, item, whole))));
214
+ }
215
+ return out;
216
+ }
217
+ async function prepared(env, tokens, item, whole) {
218
+ if (item.partial !== true || !MERGEABLE.has(item.platform))
219
+ return { raw_text: item.raw_text, title: item.title };
220
+ const key = item.source_key ?? connectorItemKey(item.platform, item.source_url);
221
+ const stored = key === undefined ? undefined : storedByKey(env.dbPath, key.startsWith(`${item.platform}|`) ? key : `${item.platform}|${key}`);
222
+ if (stored === undefined)
223
+ return { raw_text: item.raw_text, title: item.title };
224
+ const merge = () => ({ raw_text: mergePartialThread(stored.summary, item.raw_text), title: stored.title });
225
+ // The text carries no message times or authors, so an EDITED message cannot be told from a new one by
226
+ // comparing lines. When the thread can be read whole (one or two requests), the whole thread replaces the
227
+ // stored one; only a thread that cannot be read whole is merged by appending, and every such fallback is counted.
228
+ if (env.fetchWhole === undefined)
229
+ return merge();
230
+ if (env.now().getTime() > whole.deadline) {
231
+ whole.kept += 1;
232
+ whole.reason ??= 'the time allowed for re-reading whole threads ran out';
233
+ return merge();
234
+ }
235
+ try {
236
+ const full = await env.fetchWhole(item.platform, tokens, item.source_url);
237
+ if (full === undefined)
238
+ return merge(); // this platform has no whole-thread read: nothing was attempted
239
+ if (full.partial !== true)
240
+ return { raw_text: full.raw_text, title: stored.title };
241
+ whole.kept += 1;
242
+ whole.reason ??= 'the thread is longer than one read returns';
243
+ }
244
+ catch (e) {
245
+ whole.kept += 1;
246
+ whole.reason ??= (e instanceof Error ? e.message : String(e)).slice(0, 100);
247
+ }
248
+ return merge();
249
+ }
250
+ function failed(source, key, window, env, e, partial) {
251
+ const message = (e instanceof Error ? e.message : String(e)).slice(0, 200);
252
+ const row = readRows(env.dbPath, source).find((r) => r.scope_key === key.scopeKey);
253
+ if (isAuthExpiry(e)) {
254
+ markNeedsReauth(env.dbPath, key, window, env.now().toISOString());
255
+ saveRun(env.dbPath, key, { status: 'needs_reauth', high_water: row?.high_water ?? null, pending_until: row?.pending_until ?? null, cycle_top: row?.cycle_top ?? null, hole_sig: row?.hole_sig ?? null, hole_streak: row?.hole_streak ?? 0, attemptAt: env.now().toISOString(), items: 0, skips: [{ kind: 'auth', count: 1, detail: message }] });
256
+ return { ...none(source, 'needs_reauth', `${source} refused the saved token (${message}). Run: align connect ${source}`), skips: [{ kind: 'auth', count: 1, detail: message }], scope: key.scope };
257
+ }
258
+ const skip = { kind: 'error', count: 1, detail: message };
259
+ saveRun(env.dbPath, key, { status: 'error', high_water: row?.high_water ?? null, pending_until: row?.pending_until ?? null, cycle_top: row?.cycle_top ?? null, hole_sig: row?.hole_sig ?? null, hole_streak: row?.hole_streak ?? 0, attemptAt: env.now().toISOString(), items: partial?.read ?? 0, skips: [skip] });
260
+ return { source, state: 'error', read: partial?.read ?? 0, created: partial?.created ?? 0, updated: partial?.updated ?? 0, skips: [skip], message, scope: key.scope };
261
+ }
262
+ //# sourceMappingURL=run-source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-source.js","sourceRoot":"","sources":["../../../src/lib/sync/run-source.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAoB,MAAM,YAAY,CAAC;AAG3D,OAAO,EACL,gBAAgB,EAAE,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE,cAAc,EAAE,OAAO,EAAE,WAAW,EAC3F,UAAU,GACX,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACrF,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,oBAAoB,EAAE,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAiDrJ,MAAM,KAAK,GAAG,EAAE,CAAC;AACjB;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,mBAAmB,GAAwC;IAC/D,IAAI,EAAE,IAAI,GAAG,CAAC,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;IAC1C,MAAM,EAAE,IAAI,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC;IAChC,MAAM,EAAE,IAAI,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC;CACjC,CAAC;AAEF,mGAAmG;AACnG,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;AAE9C,MAAM,IAAI,GAAG,CAAC,MAAc,EAAE,KAAkB,EAAE,OAAe,EAAiB,EAAE,CAClF,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;AAE3E,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,MAAc,EACd,GAAY;AACZ,2KAA2K;AAC3K,IAA+D,EAAE,OAAO,EAAE,KAAK,EAAE;IAEjF,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAClC,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,yCAAyC,MAAM,EAAE,CAAC,CAAC;IAC1I,6FAA6F;IAC7F,IAAI,MAAM,KAAK,OAAO,IAAI,CAAC,CAAC,OAAO,KAAK,YAAY;QAAE,OAAO,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,iDAAiD,CAAC,CAAC;IAEvI,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,MAAM,EAAE,CAAC,CAAC;IACxC,IAAI,CAAC,IAAI,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,kBAAkB,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC9J,IAAI,CAAC;QACH,IAAI,CAAC,CAAC,OAAO,KAAK,YAAY,IAAI,CAAC,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;YAChE,4IAA4I;YAC5I,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;YAClC,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,eAAe,CAAC,CAAC;iBAC9F,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC;YACvG,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,aAAa;gBAAE,OAAO,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,4BAA4B,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;QAC/L,CAAC;QACD,IAAI,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC;YAAE,OAAO,IAAI,CAAC,MAAM,EAAE,kBAAkB,EAAE,iBAAiB,MAAM,6CAA6C,CAAC,CAAC;QAC/I,OAAO,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACjD,CAAC;YAAS,CAAC;QACT,IAAI,CAAC,OAAO,EAAE,CAAC;IACjB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,GAAG,CAAC,MAAc,EAAE,MAA8B,EAAE,GAAY,EAAE,IAAiC,EAAE,CAAoC;IACtJ,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;IACtB,MAAM,MAAM,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;IACjC,IAAI,KAAK,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IAC9D,4HAA4H;IAC5H,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IAC9E,IAAI,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACtD,8HAA8H;QAC9H,GAAG,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;QACzC,MAAM,GAAG,GAAG,GAAG,CAAC,QAAQ,KAAK,SAAS,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,IAAI,MAAM,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,oCAAoC,CAAC,CAAC;QAC/L,IAAI,GAAG;YAAE,GAAG,CAAC,aAAa,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;;YAChD,KAAK,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC;QAClE,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IAChF,CAAC;SAAM,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC1D,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;QACvC,GAAG,CAAC,aAAa,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC9C,CAAC;IACD,MAAM,GAAG,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;IACrE,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,wFAAwF;IACxF,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,oBAAoB,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;IAC/E,IAAI,GAAG,CAAC,MAAM,KAAK,cAAc,EAAE,CAAC;QAClC,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,4DAA4D,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;IAChJ,CAAC;IAED,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACjC,MAAM,KAAK,GAAkB,EAAE,CAAC;IAChC,IAAI,UAAsC,CAAC;IAC3C,IAAI,MAAM,KAAK,OAAO,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAClD,MAAM,GAAG,GAAG,gBAAgB,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC;QACnE,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC;YAAE,UAAU,GAAG,GAAG,CAAC,GAAG,CAAC;QAC7C,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;YAClB,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,+BAA+B,eAAe,gEAAgE,EAAE,CAAC,CAAC;QAC1K,CAAC;IACH,CAAC;IAED,IAAI,OAA2B,CAAC;IAChC,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IACtG,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;IACvD,CAAC;IACD,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAClC,uHAAuH;IACvH,uFAAuF;IACvF,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAE5B,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,KAAK,IAAI,CAAC;IAC1C,qHAAqH;IACrH,wHAAwH;IACxH,MAAM,QAAQ,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC7C,MAAM,GAAG,GAAG,CAAC,QAAQ,IAAI,QAAQ,KAAK,SAAS,IAAI,MAAM,CAAC,aAAa,KAAK,SAAS;WAChF,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACrG,MAAM,SAAS,GAAG,QAAQ,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;IACxF,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACnK,MAAM,UAAU,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7F,MAAM,UAAU,GAAG,UAAU,IAAI,oBAAoB,CAAC;IACtD,MAAM,QAAQ,GAAG,GAAkB,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,kGAAkG,CAAC,CAAC;IACjK,MAAM,IAAI,GAAG,GAAG,CAAC,SAAS,IAAI,KAAK,CAAC;IACpC,MAAM,UAAU,GAAe,EAAE,QAAQ,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,sBAAsB,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IAC7F,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC1C,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,CAAC;QACH,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC;YACjD,sGAAsG;YACtG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;gBAAE,OAAO,QAAQ,EAAE,CAAC;YACrC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;YAC3C,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;YACjE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;gBACzE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,GAAG,KAAK,CAAC,CAAC,CAAE;gBAClE,GAAG,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzE,GAAG,CAAC,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAClE,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACvC,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;gBAAC,IAAI,CAAC,CAAC,OAAO;oBAAE,OAAO,IAAI,CAAC,CAAC;qBAAM,IAAI,CAAC,CAAC,OAAO;oBAAE,OAAO,IAAI,CAAC,CAAC;YAAC,CAAC;YAC7F,cAAc,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,KAAK,SAAS,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,CAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,UAAW,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACtO,4FAA4F;YAC5F,4FAA4F;YAC5F,MAAM,SAAS,GAAG,aAAa,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAC5C,IAAI,QAAQ,IAAI,SAAS,KAAK,SAAS;gBAAE,gBAAgB,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;YAC3F,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,CAAC;IACH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACjG,CAAC;IAED,IAAI,UAAU,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,UAAU,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,oFAAoF,UAAU,CAAC,MAAM,IAAI,SAAS,GAAG,EAAE,CAAC,CAAC;IAChO,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;QAAE,OAAO,QAAQ,EAAE,CAAC;IACrC,sFAAsF;IACtF,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,GAAG,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC;IAC9F,MAAM,GAAG,GAAG,SAAS,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,aAAa,EAAE,GAAG,CAAC,aAAa,EAAE,EAAE;QAC1F,QAAQ,EAAE,GAAG,EAAE,UAAU;QACzB,GAAG,CAAC,MAAM,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1E,GAAG,CAAC,MAAM,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtF,+FAA+F;QAC/F,iFAAiF;QACjF,GAAG,CAAC,GAAG,CAAC,aAAa,KAAK,IAAI,IAAI,GAAG,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/F,GAAG;KACJ,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACrF,MAAM,OAAO,GAAG,CAAC,IAA4B,EAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE;QAC/E,GAAG,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,KAAK,EAAE,GAAG,IAAI,CAAC;QACxH,SAAS,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;QAClC,6GAA6G;QAC7G,GAAG,CAAC,GAAG,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACvE,CAAC,CAAC;IACH,OAAO,CAAC,EAAE,CAAC,CAAC;IAEZ,IAAI,KAA8B,CAAC;IACnC,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC;QACpD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,CAAC;QACnE,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAE,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAE,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;QAC5I,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACnD,CAAC;IACD,OAAO;QACL,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,GAAG,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK;QAC/H,GAAG,CAAC,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxD,GAAG,CAAC,GAAG,IAAI,MAAM,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3F,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3B,GAAG,CAAC,UAAU,IAAI,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5D,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC/D,CAAC;AACJ,CAAC;AAQD,0HAA0H;AAC1H,MAAM,wBAAwB,GAAG,CAAC,CAAC;AACnC,MAAM,sBAAsB,GAAG,MAAM,CAAC;AAEtC,KAAK,UAAU,YAAY,CACzB,GAAY,EAAE,MAA8B,EAAE,KAAkC,EAAE,KAAiB;IAEnG,MAAM,GAAG,GAA2D,EAAE,CAAC;IACvE,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,IAAI,wBAAwB,EAAE,CAAC;QACnE,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,GAAG,wBAAwB,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACnI,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,GAAY,EAAE,MAA8B,EAAE,IAAyC,EAAE,KAAiB;IAChI,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;QAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;IAClH,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,IAAI,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IAChF,MAAM,MAAM,GAAG,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,IAAI,GAAG,EAAE,CAAC,CAAC;IAC9I,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;IAChF,MAAM,KAAK,GAAG,GAAwC,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,kBAAkB,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IAChJ,sGAAsG;IACtG,0GAA0G;IAC1G,kHAAkH;IAClH,IAAI,GAAG,CAAC,UAAU,KAAK,SAAS;QAAE,OAAO,KAAK,EAAE,CAAC;IACjD,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;QACzC,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC;QAChB,KAAK,CAAC,MAAM,KAAK,uDAAuD,CAAC;QACzE,OAAO,KAAK,EAAE,CAAC;IACjB,CAAC;IACD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1E,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,KAAK,EAAE,CAAC,CAAC,gEAAgE;QACxG,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI;YAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;QACnF,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC;QAChB,KAAK,CAAC,MAAM,KAAK,4CAA4C,CAAC;IAChE,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC;QAChB,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC9E,CAAC;IACD,OAAO,KAAK,EAAE,CAAC;AACjB,CAAC;AAED,SAAS,MAAM,CACb,MAAc,EAAE,GAAkE,EAAE,MAAqB,EAAE,GAAY,EAAE,CAAU,EACnI,OAA4D;IAE5D,MAAM,OAAO,GAAG,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC3E,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,GAAG,CAAC,QAAQ,CAAC,CAAC;IACnF,IAAI,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;QACpB,eAAe,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,IAAI,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,aAAa,IAAI,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,IAAI,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,IAAI,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,IAAI,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;QACjV,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,6BAA6B,OAAO,yBAAyB,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC;IACrM,CAAC;IACD,MAAM,IAAI,GAAgB,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IACvE,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,IAAI,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,aAAa,IAAI,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,IAAI,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,IAAI,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,IAAI,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpT,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC;AACxK,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare function readRegularFile(file: string, maxBytes?: number): string | undefined;
2
+ /** What is at this path: 'none', a regular file, or something else (a directory, a FIFO, a link) that a claim must not be built on. */
3
+ export declare function kindAt(file: string): 'none' | 'file' | 'other';
4
+ //# sourceMappingURL=safe-read.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safe-read.d.ts","sourceRoot":"","sources":["../../../src/lib/sync/safe-read.ts"],"names":[],"mappings":"AAOA,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,SAAY,GAAG,MAAM,GAAG,SAAS,CActF;AAED,uIAAuI;AACvI,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAO9D"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Read a small file the launch path does not control (the state directory is writable by anything running as the user,
3
+ * so a FIFO or a link can sit where a file is expected). Opens without following a link and without blocking, requires a
4
+ * REGULAR file, and caps the size. Anything else reads as "not there": the launcher then does nothing, and never hangs.
5
+ */
6
+ import fs from 'node:fs';
7
+ export function readRegularFile(file, maxBytes = 1_048_576) {
8
+ let fd;
9
+ try {
10
+ // Read inside the function, not at import: this module is on the launch path.
11
+ const C = fs.constants;
12
+ fd = fs.openSync(file, C.O_RDONLY | (C.O_NONBLOCK ?? 0) | (C.O_NOFOLLOW ?? 0));
13
+ const st = fs.fstatSync(fd);
14
+ if (!st.isFile() || st.size > maxBytes)
15
+ return undefined;
16
+ return fs.readFileSync(fd, 'utf8');
17
+ }
18
+ catch {
19
+ return undefined;
20
+ }
21
+ finally {
22
+ if (fd !== undefined) {
23
+ try {
24
+ fs.closeSync(fd);
25
+ }
26
+ catch { /* nothing to close */ }
27
+ }
28
+ }
29
+ }
30
+ /** What is at this path: 'none', a regular file, or something else (a directory, a FIFO, a link) that a claim must not be built on. */
31
+ export function kindAt(file) {
32
+ try {
33
+ const st = fs.lstatSync(file);
34
+ return st.isFile() ? 'file' : 'other';
35
+ }
36
+ catch (e) {
37
+ return e.code === 'ENOENT' ? 'none' : 'other';
38
+ }
39
+ }
40
+ //# sourceMappingURL=safe-read.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safe-read.js","sourceRoot":"","sources":["../../../src/lib/sync/safe-read.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,QAAQ,GAAG,SAAS;IAChE,IAAI,EAAsB,CAAC;IAC3B,IAAI,CAAC;QACH,8EAA8E;QAC9E,MAAM,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;QACvB,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/E,MAAM,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAC5B,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,IAAI,GAAG,QAAQ;YAAE,OAAO,SAAS,CAAC;QACzD,OAAO,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;YAAS,CAAC;QACT,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;YAAC,IAAI,CAAC;gBAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC;QAAC,CAAC;IACtF,CAAC;AACH,CAAC;AAED,uIAAuI;AACvI,MAAM,UAAU,MAAM,CAAC,IAAY;IACjC,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC9B,OAAO,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;IACxC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAQ,CAAuB,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;IACvE,CAAC;AACH,CAAC"}