@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,31 @@
1
+ import type { SyncSummary } from './summary-read.js';
2
+ /** Decision 23: at most one background read per source per 15 minutes. One constant. */
3
+ export declare const SYNC_MIN_INTERVAL_MS: number;
4
+ /** The child waits this long before its first request, so it does not compete with the agent's own start-up. */
5
+ export declare const BACKGROUND_LAUNCH_DELAY_SECONDS = 20;
6
+ /** The "reconnect this source" line is shown at most this often. */
7
+ export declare const REAUTH_LINE_INTERVAL_MS: number;
8
+ export interface BackgroundSyncGates {
9
+ isTty: boolean;
10
+ /** Already inside a launched agent (ALIGN_WRAPPED). */
11
+ wrapped: boolean;
12
+ /** ALIGN_NO_SYNC. */
13
+ noSync: boolean;
14
+ ci: boolean;
15
+ /** `align sync --off`. */
16
+ disabled: boolean;
17
+ summary: SyncSummary | undefined;
18
+ now: number;
19
+ }
20
+ export interface BackgroundSyncInput extends BackgroundSyncGates {
21
+ minIntervalMs: number;
22
+ /** Sources with a sync or a backfill running right now. */
23
+ busy?: ReadonlySet<string>;
24
+ }
25
+ export declare function shouldBackgroundSync(i: BackgroundSyncInput): string[];
26
+ /** Eligible sources whose token stopped working, when the "reconnect" line is due. Same gates as the spawn. */
27
+ export declare function reauthSources(i: BackgroundSyncGates & {
28
+ lastShownAt: string | undefined;
29
+ intervalMs: number;
30
+ }): string[];
31
+ //# sourceMappingURL=should-background-sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"should-background-sync.d.ts","sourceRoot":"","sources":["../../../src/lib/sync/should-background-sync.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAiB,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEpE,wFAAwF;AACxF,eAAO,MAAM,oBAAoB,QAAc,CAAC;AAChD,gHAAgH;AAChH,eAAO,MAAM,+BAA+B,KAAK,CAAC;AAClD,oEAAoE;AACpE,eAAO,MAAM,uBAAuB,QAAiB,CAAC;AAKtD,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,OAAO,CAAC;IACf,uDAAuD;IACvD,OAAO,EAAE,OAAO,CAAC;IACjB,qBAAqB;IACrB,MAAM,EAAE,OAAO,CAAC;IAChB,EAAE,EAAE,OAAO,CAAC;IACZ,0BAA0B;IAC1B,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,WAAW,GAAG,SAAS,CAAC;IACjC,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,mBAAoB,SAAQ,mBAAmB;IAC9D,aAAa,EAAE,MAAM,CAAC;IACtB,2DAA2D;IAC3D,IAAI,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAC5B;AA4BD,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,mBAAmB,GAAG,MAAM,EAAE,CAcrE;AAED,+GAA+G;AAC/G,wBAAgB,aAAa,CAAC,CAAC,EAAE,mBAAmB,GAAG;IAAE,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,EAAE,CAKxH"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * L6 (Decisions 8, 9, 23): the launch decision, pure. It reads nothing itself: the caller hands in
3
+ * what `sync-summary.json` said, so the launch path opens no database, makes no network call and
4
+ * loads no fetcher to decide. Every gate fails toward "do not start anything".
5
+ */
6
+ import { isKnownSource } from './source-ids.js';
7
+ /** Decision 23: at most one background read per source per 15 minutes. One constant. */
8
+ export const SYNC_MIN_INTERVAL_MS = 15 * 60_000;
9
+ /** The child waits this long before its first request, so it does not compete with the agent's own start-up. */
10
+ export const BACKGROUND_LAUNCH_DELAY_SECONDS = 20;
11
+ /** The "reconnect this source" line is shown at most this often. */
12
+ export const REAUTH_LINE_INTERVAL_MS = 24 * 3_600_000;
13
+ /** What reaches argv. The summary is a file on disk, so an id must be one of the sources a sync reads (which also rules out a flag or a second word). */
14
+ const SAFE_SOURCE_ID = { test: isKnownSource };
15
+ function gatesClosed(i) {
16
+ return !i.isTty || i.wrapped || i.noSync || i.ci || i.disabled || !i.summary;
17
+ }
18
+ function parsed(iso) {
19
+ if (iso === undefined)
20
+ return undefined;
21
+ const t = Date.parse(iso);
22
+ return Number.isNaN(t) ? undefined : t;
23
+ }
24
+ /**
25
+ * The latest moment this source was tried, or undefined when no readable timestamp exists. A stamp
26
+ * LATER than now is ignored (a clock that moved back, or a damaged file): otherwise it would read
27
+ * as "tried in the future" and, with the age negative, make the source due on every launch. When
28
+ * every stamp is in the future the source counts as tried when the summary was written, so it is
29
+ * retried once the interval has passed, not on every launch.
30
+ */
31
+ function lastTried(s, now, generatedAt) {
32
+ const all = [parsed(s.lastSuccessAt), parsed(s.lastAttemptAt)].filter((t) => t !== undefined);
33
+ const past = all.filter((t) => t <= now);
34
+ if (past.length > 0)
35
+ return Math.max(...past);
36
+ if (all.length === 0)
37
+ return undefined;
38
+ const written = parsed(generatedAt);
39
+ return written !== undefined && written <= now ? written : undefined;
40
+ }
41
+ export function shouldBackgroundSync(i) {
42
+ if (gatesClosed(i))
43
+ return [];
44
+ const due = new Set();
45
+ for (const s of i.summary.sources) {
46
+ // `never`: connected but never read by a person (no manual sync or backfill yet), so nothing is read unattended for it.
47
+ // `manual` and `not_connected`: a run cannot get further until a person acts, and writes no timestamp, so it would respawn every interval.
48
+ if (!s.backgroundEligible || s.status === 'needs_reauth' || s.status === 'never' || s.status === 'manual' || s.status === 'not_connected')
49
+ continue;
50
+ if (!SAFE_SOURCE_ID.test(s.id) || i.busy?.has(s.id))
51
+ continue;
52
+ const tried = lastTried(s, i.now, i.summary.generated_at);
53
+ // No readable timestamp: stale, never fresh.
54
+ const age = tried === undefined ? Number.POSITIVE_INFINITY : i.now - tried;
55
+ if (age >= i.minIntervalMs)
56
+ due.add(s.id);
57
+ }
58
+ return [...due];
59
+ }
60
+ /** Eligible sources whose token stopped working, when the "reconnect" line is due. Same gates as the spawn. */
61
+ export function reauthSources(i) {
62
+ if (gatesClosed(i))
63
+ return [];
64
+ const shown = parsed(i.lastShownAt);
65
+ if (shown !== undefined && i.now - shown >= 0 && i.now - shown < i.intervalMs)
66
+ return [];
67
+ return [...new Set(i.summary.sources.filter((s) => s.backgroundEligible && s.status === 'needs_reauth' && SAFE_SOURCE_ID.test(s.id)).map((s) => s.id))];
68
+ }
69
+ //# sourceMappingURL=should-background-sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"should-background-sync.js","sourceRoot":"","sources":["../../../src/lib/sync/should-background-sync.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * The sources a sync can read, in a module with no imports so the launch path may name them
3
+ * (mcp-backfill.ts re-exports it; localConnectorIds() equals it by test). One list: the launcher
4
+ * filters a summary file's ids against it, and the sync command refuses (or, in the background,
5
+ * skips) anything else.
6
+ */
7
+ export declare const KNOWN_SOURCES: readonly ["github", "jira", "confluence", "slack", "teams", "gitlab", "linear", "notion"];
8
+ export type KnownSource = (typeof KNOWN_SOURCES)[number];
9
+ export declare const isKnownSource: (id: string) => id is KnownSource;
10
+ //# sourceMappingURL=source-ids.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-ids.d.ts","sourceRoot":"","sources":["../../../src/lib/sync/source-ids.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,aAAa,2FAA4F,CAAC;AACvH,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AACzD,eAAO,MAAM,aAAa,GAAI,IAAI,MAAM,KAAG,EAAE,IAAI,WAAgE,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * The sources a sync can read, in a module with no imports so the launch path may name them
3
+ * (mcp-backfill.ts re-exports it; localConnectorIds() equals it by test). One list: the launcher
4
+ * filters a summary file's ids against it, and the sync command refuses (or, in the background,
5
+ * skips) anything else.
6
+ */
7
+ export const KNOWN_SOURCES = ['github', 'jira', 'confluence', 'slack', 'teams', 'gitlab', 'linear', 'notion'];
8
+ export const isKnownSource = (id) => KNOWN_SOURCES.includes(id);
9
+ //# sourceMappingURL=source-ids.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-ids.js","sourceRoot":"","sources":["../../../src/lib/sync/source-ids.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAU,CAAC;AAEvH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,EAAU,EAAqB,EAAE,CAAE,aAAmC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * L5: how a sync reads one source. The connectors that `align connect` already knows how to read
3
+ * keep their one definition in setup.ts (`buildSources`): this file only adds the two things a
4
+ * sync needs that connect does not, a scope key per source and GitHub's items-only list read.
5
+ * Imported only by the sync command (it pulls setup.ts in); the MCP server never loads it.
6
+ */
7
+ import type { CaptureFetchResult } from '../fetchers/capture.js';
8
+ import { type ResolvedScope, type ScopeDeps } from '../scope.js';
9
+ /**
10
+ * The scope a run reads a source under (L4: scope.ts decides). `blocked` means do not read at all; `note` is worth saying to the
11
+ * person; `disclosure` is the one-time team-scope line, set only for a foreground run (the sync prints it before the first request).
12
+ */
13
+ export type SyncScope = Pick<ResolvedScope, 'scopeKey' | 'scope'> & Partial<Pick<ResolvedScope, 'repo' | 'extras' | 'blocked' | 'note' | 'disclosure' | 'activates'>>;
14
+ /** The scope this machine reads a source under, decided before the fetch so its watermark can be found. Chosen scopes, the folder's
15
+ * repo (GitHub, GitLab) and the "yours" fallbacks are all scope.ts's: the same answer `align connect` and `align_scope` give. */
16
+ export declare function scopeOf(source: string, o?: {
17
+ trigger: 'cli' | 'background';
18
+ }, deps?: ScopeDeps): Promise<SyncScope>;
19
+ export interface SourceWindow {
20
+ since?: string;
21
+ until?: string;
22
+ hotThreads?: Array<{
23
+ channel: string;
24
+ ts: string;
25
+ }>;
26
+ }
27
+ export declare function fetchSource(source: string, tokens: Record<string, string>, win: SourceWindow, scope: SyncScope): Promise<CaptureFetchResult>;
28
+ /**
29
+ * Re-read one stored thread whole, for merging a partial Slack re-read without guessing which lines are new.
30
+ * The URL comes from a stored row, never from a person or an agent; Slack's fetchOne also holds it to a slack.com host.
31
+ */
32
+ export declare function fetchWhole(source: string, tokens: Record<string, string>, url: string): Promise<CaptureFetchResult['items'][number] | undefined>;
33
+ //# sourceMappingURL=sources.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sources.d.ts","sourceRoot":"","sources":["../../../src/lib/sync/sources.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,OAAO,EAAE,KAAK,aAAa,EAAgB,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAI/E;;;GAGG;AACH,MAAM,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE,UAAU,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,YAAY,GAAG,WAAW,CAAC,CAAC,CAAC;AAEtK;kIACkI;AAClI,wBAAsB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAAE;IAAE,OAAO,EAAE,KAAK,GAAG,YAAY,CAAA;CAAuB,EAAE,IAAI,GAAE,SAAoC,GAAG,OAAO,CAAC,SAAS,CAAC,CAEvK;AAED,MAAM,WAAW,YAAY;IAAG,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE;AAErH,wBAAsB,WAAW,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,CAWlJ;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC,CAOtJ"}
@@ -0,0 +1,37 @@
1
+ import { fetchGitHubItemsOnly } from '../fetchers/github.js';
2
+ import { resolveScope } from '../scope.js';
3
+ import { realScopeDeps } from '../scope-real.js';
4
+ import { fetchWindow, windowExtras } from '../since.js';
5
+ /** The scope this machine reads a source under, decided before the fetch so its watermark can be found. Chosen scopes, the folder's
6
+ * repo (GitHub, GitLab) and the "yours" fallbacks are all scope.ts's: the same answer `align connect` and `align_scope` give. */
7
+ export async function scopeOf(source, o = { trigger: 'cli' }, deps = realScopeDeps(undefined)) {
8
+ return resolveScope(source, deps, { foreground: o.trigger === 'cli' });
9
+ }
10
+ export async function fetchSource(source, tokens, win, scope) {
11
+ if (source === 'github') {
12
+ return fetchGitHubItemsOnly({
13
+ token: tokens['token'], ...fetchWindow('github', win.since !== undefined ? { since: win.since } : {}), ...windowExtras(win),
14
+ ...(scope.repo ? { repo: scope.repo, scope: scope.scope } : {}),
15
+ });
16
+ }
17
+ const { buildSources } = await import('../../commands/setup.js');
18
+ const def = buildSources(false).find((s) => s.id === source);
19
+ if (!def)
20
+ throw new Error(`align sync does not know how to read "${source}".`);
21
+ return def.fetch(tokens, win.since !== undefined ? { since: win.since } : {}, { ...windowExtras(win), ...windowExtras(scope.extras) });
22
+ }
23
+ /**
24
+ * Re-read one stored thread whole, for merging a partial Slack re-read without guessing which lines are new.
25
+ * The URL comes from a stored row, never from a person or an agent; Slack's fetchOne also holds it to a slack.com host.
26
+ */
27
+ export async function fetchWhole(source, tokens, url) {
28
+ if (source !== 'slack')
29
+ return undefined;
30
+ const { SlackFetcher } = await import('@aligndottech/connector-core');
31
+ const r = await new SlackFetcher().fetchOne(url, { token: tokens['token'] });
32
+ // A skip (429, 404, a channel it cannot see, time) is a reason the caller counts, never a silent "no".
33
+ if (!r.item)
34
+ throw new Error(r.skip?.detail ?? 'the thread could not be read');
35
+ return r.item;
36
+ }
37
+ //# sourceMappingURL=sources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sources.js","sourceRoot":"","sources":["../../../src/lib/sync/sources.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAsB,YAAY,EAAkB,MAAM,aAAa,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAQxD;kIACkI;AAClI,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,MAAc,EAAE,IAAuC,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,OAAkB,aAAa,CAAC,SAAS,CAAC;IACjJ,OAAO,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC,CAAC;AACzE,CAAC;AAID,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,MAAc,EAAE,MAA8B,EAAE,GAAiB,EAAE,KAAgB;IACnH,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACxB,OAAO,oBAAoB,CAAC;YAC1B,KAAK,EAAE,MAAM,CAAC,OAAO,CAAE,EAAE,GAAG,WAAW,CAAC,QAAQ,EAAE,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,YAAY,CAAC,GAAG,CAAC;YAC5H,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAChE,CAAC,CAAC;IACL,CAAC;IACD,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;IACjE,MAAM,GAAG,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;IAC7D,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,yCAAyC,MAAM,IAAI,CAAC,CAAC;IAC/E,OAAO,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,YAAY,CAAC,GAAG,CAAC,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AACzI,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,MAAc,EAAE,MAA8B,EAAE,GAAW;IAC1F,IAAI,MAAM,KAAK,OAAO;QAAE,OAAO,SAAS,CAAC;IACzC,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,8BAA8B,CAAC,CAAC;IACtE,MAAM,CAAC,GAAG,MAAM,IAAI,YAAY,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,CAAE,EAAE,CAAC,CAAC;IAC9E,uGAAuG;IACvG,IAAI,CAAC,CAAC,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,IAAI,8BAA8B,CAAC,CAAC;IAC/E,OAAO,CAAC,CAAC,IAAI,CAAC;AAChB,CAAC"}
@@ -0,0 +1,27 @@
1
+ import { type ChildCaller, startBackfillChild } from '../backfill-state.js';
2
+ /** `--delay 0`: an on-demand run (the person or their agent just asked) has no agent start-up to stay out of the way of. */
3
+ export declare function syncChildArgv(sources: readonly string[], o?: {
4
+ delaySeconds?: number;
5
+ }): string[];
6
+ /**
7
+ * The ALIGN_* names a sync child reads, and nothing else (checked against src/ by a parity test).
8
+ * No ALIGN_LLM_*, ALIGN_TOKEN or provider setting: a sync makes no LLM call and takes connector tokens from the config file.
9
+ */
10
+ export declare const SYNC_CHILD_ALIGN_NAMES: readonly ["ALIGN_ENV", "ALIGN_GATEWAY_URL", "ALIGN_MODEL_CACHE", "ALIGN_TELEMETRY", "ALIGN_INGEST_CONCURRENCY", "ALIGN_DEBUG"];
11
+ /**
12
+ * The environment a background sync child gets: an allow-list, not a copy, and the one list of
13
+ * value rules is mcp-child-env.ts's (so a credentialed proxy URL or a relative certificate path is
14
+ * dropped here exactly as it is for an MCP server). A name that is not listed is not passed, and
15
+ * an empty value is omitted.
16
+ */
17
+ export declare function syncChildEnv(env: Record<string, string | undefined>): Record<string, string>;
18
+ export declare function startSyncChild(sources: readonly string[], o?: {
19
+ delaySeconds?: number;
20
+ start?: typeof startBackfillChild;
21
+ env?: Record<string, string | undefined>;
22
+ caller?: ChildCaller;
23
+ }): Promise<{
24
+ ok: boolean;
25
+ pid?: number;
26
+ }>;
27
+ //# sourceMappingURL=spawn-background.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spawn-background.d.ts","sourceRoot":"","sources":["../../../src/lib/sync/spawn-background.ts"],"names":[],"mappings":"AAaA,OAAO,EAAwB,KAAK,WAAW,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAKlG,4HAA4H;AAC5H,wBAAgB,aAAa,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,CAAC,GAAE;IAAE,YAAY,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,MAAM,EAAE,CAErG;AAUD;;;GAGG;AACH,eAAO,MAAM,sBAAsB,gIAAiI,CAAC;AAKrK;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAU5F;AAED,wBAAgB,cAAc,CAC5B,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,CAAC,GAAE;IAAE,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,kBAAkB,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAAO,GACnI,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAKxC"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * L5: start `align sync --background ...` as a detached child (Decision 9). Used by `align_sync`
3
+ * (run) here, and by the launch hook and `align_backfill` later. A tool call never runs a bulk
4
+ * fetch in the MCP server's own process: it starts this and returns.
5
+ *
6
+ * "Started" is claimed only after the OS confirmed the child exists (startBackfillChild's rule),
7
+ * stdio is ignored, and the child gets its own process group (`detached`), so closing the
8
+ * terminal or the agent does not take it down; it finishes its current batch and exits.
9
+ *
10
+ * `caller` names who asked: 'mcp' (the default) marks the child as an agent's, so any scope it writes waits for a person; the launch hook
11
+ * passes 'launcher' for the person's own background refresh, which must not carry that mark.
12
+ */
13
+ import os from 'node:os';
14
+ import { backfillChildCommand, startBackfillChild } from '../backfill-state.js';
15
+ import { CHILD_ENV_KEYS, CHILD_ENV_SECRETS, childEnvValue } from '../launch/mcp-child-env.js';
16
+ import { PROVIDER_ENV_VARS } from '../llm-providers.js';
17
+ import { inCi } from '../telemetry-ci.js';
18
+ /** `--delay 0`: an on-demand run (the person or their agent just asked) has no agent start-up to stay out of the way of. */
19
+ export function syncChildArgv(sources, o = {}) {
20
+ return ['sync', '--background', '--delay', String(o.delaySeconds ?? 0), ...sources];
21
+ }
22
+ /** Names a sync child needs that carry no secret and no routing decision: where things live. Passed as they are. */
23
+ const PLAIN_NAMES = [
24
+ 'PATH', 'Path', 'PATHEXT', 'HOME', 'USERPROFILE', 'HOMEDRIVE', 'HOMEPATH', 'APPDATA', 'LOCALAPPDATA', 'ProgramData',
25
+ 'SystemRoot', 'SYSTEMROOT', 'SystemDrive', 'windir', 'COMSPEC', 'TMPDIR', 'TMP', 'TEMP', 'LANG', 'LANGUAGE', 'TZ',
26
+ 'USER', 'USERNAME', 'LOGNAME', 'NO_COLOR',
27
+ // A person's own opt-out must reach the child: it sends telemetry (L7) under the same consent as the launcher.
28
+ 'DO_NOT_TRACK',
29
+ ];
30
+ /**
31
+ * The ALIGN_* names a sync child reads, and nothing else (checked against src/ by a parity test).
32
+ * No ALIGN_LLM_*, ALIGN_TOKEN or provider setting: a sync makes no LLM call and takes connector tokens from the config file.
33
+ */
34
+ export const SYNC_CHILD_ALIGN_NAMES = ['ALIGN_ENV', 'ALIGN_GATEWAY_URL', 'ALIGN_MODEL_CACHE', 'ALIGN_TELEMETRY', 'ALIGN_INGEST_CONCURRENCY', 'ALIGN_DEBUG'];
35
+ /** Names whose VALUE rule lives in mcp-child-env.ts (XDG dirs absolute only; proxies and certs kept unless credentialed or relative; NODE_OPTIONS always blank; CI as is). */
36
+ const RULED_NAMES = CHILD_ENV_KEYS.filter((k) => !k.startsWith('ALIGN_') && !CHILD_ENV_SECRETS.includes(k) && !PROVIDER_ENV_VARS.includes(k));
37
+ /**
38
+ * The environment a background sync child gets: an allow-list, not a copy, and the one list of
39
+ * value rules is mcp-child-env.ts's (so a credentialed proxy URL or a relative certificate path is
40
+ * dropped here exactly as it is for an MCP server). A name that is not listed is not passed, and
41
+ * an empty value is omitted.
42
+ */
43
+ export function syncChildEnv(env) {
44
+ const out = {};
45
+ for (const k of PLAIN_NAMES) {
46
+ const v = env[k];
47
+ if (v !== undefined && v !== '')
48
+ out[k] = v;
49
+ }
50
+ for (const k of [...RULED_NAMES, ...SYNC_CHILD_ALIGN_NAMES]) {
51
+ const v = childEnvValue(k, env);
52
+ if (v !== '')
53
+ out[k] = v;
54
+ }
55
+ // The reduced env drops the CI provider's own variables (JENKINS_URL, BUILD_NUMBER...), which is how CI was recognised. Say it outright.
56
+ if (inCi(env))
57
+ out['CI'] = 'true';
58
+ return out;
59
+ }
60
+ export function startSyncChild(sources, o = {}) {
61
+ const argv = syncChildArgv(sources, o);
62
+ // The child runs from the home directory, never the folder it was started in: scope is decided by the sync layer,
63
+ // and an unattended run must not read a repo's remote and widen itself to that repo's team.
64
+ return (o.start ?? startBackfillChild)('sync', argv, undefined, backfillChildCommand(argv), o.caller ?? 'mcp', syncChildEnv(o.env ?? process.env), os.homedir());
65
+ }
66
+ //# sourceMappingURL=spawn-background.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spawn-background.js","sourceRoot":"","sources":["../../../src/lib/sync/spawn-background.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ import type { BackfillStatus } from '../backfill-state.js';
2
+ import type { SyncStatus } from './sync-state.js';
3
+ export interface SourceStatus {
4
+ id: string;
5
+ label: string;
6
+ connected: boolean;
7
+ /** Whose items it reads: "your own items", "everyone's items in o/r". */
8
+ scope: string;
9
+ /** `blocked`: the scope in force reads nothing until the person acts (Confluence with no spaces chosen), whatever the last run said. */
10
+ status: SyncStatus | 'never' | 'not_connected' | 'blocked';
11
+ /** Stamped only by a COMPLETE run. */
12
+ last_success_at?: string;
13
+ /** Stamped by every run, complete or not. */
14
+ last_attempt_at?: string;
15
+ items_last_run?: number;
16
+ /** GitHub only: items still waiting for their comments and reviews. */
17
+ discussion_pending?: number;
18
+ /** Skip kinds from the last run with how many objects each covered. Never the details, never content. */
19
+ skips: Record<string, number>;
20
+ /** What the last run could not read, in the fetcher's own words, by scope. Never item content or a URL. */
21
+ missing?: string[];
22
+ /** The same hole for PERSISTENT_HOLE_RUNS runs or more: the sync reads the rest and no longer waits for it. */
23
+ persistent_hole?: string;
24
+ /** A read a ceiling cut in date order: how far back it got. Older history is still to come. */
25
+ reached_back_to?: string;
26
+ running?: 'sync' | 'backfill';
27
+ /** Scopes this source was read under before, kept in the graph and not read now. Absent when there are none. */
28
+ older_scopes?: number;
29
+ /** The command or note the person needs, when there is one. */
30
+ next_step?: string;
31
+ }
32
+ export interface StatusDeps {
33
+ dbPath: string;
34
+ isConnected(id: string): boolean;
35
+ /** Is a sync of this source running now (a live, fresh lock)? */
36
+ syncRunning(id: string): boolean;
37
+ /** The latest backfill status file for the source, if any. */
38
+ backfill(id: string): BackfillStatus | null;
39
+ backfillAlive(s: BackfillStatus): boolean;
40
+ /** The `source_sync.scope_key` in force for the source, when the caller can tell (the stored choice). Absent: the most recently started row. */
41
+ activeScopeKey?(id: string): string | undefined;
42
+ /** An agent's team choice waiting for a person to confirm it, in words, or undefined. */
43
+ pendingScope?(id: string): string | undefined;
44
+ /** Why a source reads nothing until the person acts, or undefined (Confluence with no spaces chosen). */
45
+ blockedScope?(id: string): string | undefined;
46
+ }
47
+ export declare const TEAMS_NOTE = "Teams: refresh manually with `align connect teams` (its token lasts about an hour). Only yours until then.";
48
+ export declare function collectStatus(d: StatusDeps): {
49
+ sources: SourceStatus[];
50
+ rows_awaiting_relink: number;
51
+ };
52
+ /** Plain text for the CLI and for the `text` field of the tool result. Connected sources only. */
53
+ export declare function renderStatus(r: {
54
+ sources: SourceStatus[];
55
+ rows_awaiting_relink: number;
56
+ }): string;
57
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/lib/sync/status.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAG3D,OAAO,KAAK,EAAW,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAK3D,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,yEAAyE;IACzE,KAAK,EAAE,MAAM,CAAC;IACd,wIAAwI;IACxI,MAAM,EAAE,UAAU,GAAG,OAAO,GAAG,eAAe,GAAG,SAAS,CAAC;IAC3D,sCAAsC;IACtC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,6CAA6C;IAC7C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,uEAAuE;IACvE,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,yGAAyG;IACzG,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,2GAA2G;IAC3G,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,+GAA+G;IAC/G,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,+FAA+F;IAC/F,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;IAC9B,gHAAgH;IAChH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+DAA+D;IAC/D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;IACjC,iEAAiE;IACjE,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;IACjC,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAAC;IAC5C,aAAa,CAAC,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC;IAC1C,gJAAgJ;IAChJ,cAAc,CAAC,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IAChD,yFAAyF;IACzF,YAAY,CAAC,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IAC9C,yGAAyG;IACzG,YAAY,CAAC,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CAC/C;AAED,eAAO,MAAM,UAAU,+GAA+G,CAAC;AA6CvI,wBAAgB,aAAa,CAAC,CAAC,EAAE,UAAU,GAAG;IAAE,OAAO,EAAE,YAAY,EAAE,CAAC;IAAC,oBAAoB,EAAE,MAAM,CAAA;CAAE,CAiDtG;AAED,kGAAkG;AAClG,wBAAgB,YAAY,CAAC,CAAC,EAAE;IAAE,OAAO,EAAE,YAAY,EAAE,CAAC;IAAC,oBAAoB,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAwBjG"}
@@ -0,0 +1,166 @@
1
+ /**
2
+ * L5: what is the sync doing, per source, with no item content in it. The same facts back
3
+ * `align sync --status` and `align_sync({ action: 'status' })`.
4
+ *
5
+ * Reads only: the source_sync rows, two counts, the lock files and the backfill status files.
6
+ * It opens a short-lived read handle and never creates anything, so a tool call that asks inside
7
+ * an agent stays inside journey 5's 500 ms.
8
+ */
9
+ import { CAPTURE_SOURCES } from '../capture-sources.js';
10
+ import { BACKFILL_SOURCES } from '../mcp-backfill.js';
11
+ import { describeScopeKey, labelOfScopeKey } from '../scope-values.js';
12
+ import { EMBEDDING_MODEL_ID } from '../local-embeddings.js';
13
+ import { PERSISTENT_HOLE_RUNS } from './window.js';
14
+ import { pendingDetailCount, readRows, unfinishedCount } from './sync-state.js';
15
+ export const TEAMS_NOTE = 'Teams: refresh manually with `align connect teams` (its token lasts about an hour). Only yours until then.';
16
+ const label = (id) => CAPTURE_SOURCES[id]?.label ?? id;
17
+ const RANK = { ok: 0, partial: 1, error: 2, needs_reauth: 3 };
18
+ function scopeText(rows) {
19
+ const team = rows.filter((r) => r.scope === 'team');
20
+ if (team.length === 0)
21
+ return 'your own items';
22
+ return team.map((r) => describeScopeKey(r.source_id, r.scope_key, r.scope)).join('; ');
23
+ }
24
+ function scopeLabelOf(r) {
25
+ return r.scope === 'team' ? labelOfScopeKey(r.source_id, r.scope_key) : 'your own items';
26
+ }
27
+ /** The skips that mean something was NOT read (everything but `shape`, which is a note), with which scope they hit. */
28
+ function missingOf(rows) {
29
+ const out = [];
30
+ for (const r of rows) {
31
+ if (r.skips_last_run === null)
32
+ continue;
33
+ let parsed;
34
+ try {
35
+ parsed = JSON.parse(r.skips_last_run);
36
+ }
37
+ catch {
38
+ continue;
39
+ }
40
+ if (!Array.isArray(parsed))
41
+ continue;
42
+ for (const s of parsed) {
43
+ if (typeof s.kind !== 'string' || s.kind === 'shape' || typeof s.count !== 'number' || typeof s.detail !== 'string')
44
+ continue;
45
+ out.push(`${scopeLabelOf(r)}: ${s.count} ${s.detail.slice(0, 160)}`);
46
+ }
47
+ }
48
+ return out.slice(0, 5);
49
+ }
50
+ function skipCounts(rows) {
51
+ const out = {};
52
+ for (const r of rows) {
53
+ if (r.skips_last_run === null)
54
+ continue;
55
+ let parsed;
56
+ try {
57
+ parsed = JSON.parse(r.skips_last_run);
58
+ }
59
+ catch {
60
+ continue;
61
+ }
62
+ if (!Array.isArray(parsed))
63
+ continue;
64
+ for (const s of parsed) {
65
+ if (typeof s.kind === 'string' && typeof s.count === 'number')
66
+ out[s.kind] = (out[s.kind] ?? 0) + s.count;
67
+ }
68
+ }
69
+ return out;
70
+ }
71
+ export function collectStatus(d) {
72
+ const all = readRows(d.dbPath);
73
+ const sources = BACKFILL_SOURCES.map((id) => {
74
+ const connected = d.isConnected(id);
75
+ const everyScope = all.filter((r) => r.source_id === id);
76
+ // Only the scope in force is described; the others are counted. (A refused token is refused for the whole source, so it is read off every row.)
77
+ const wanted = d.activeScopeKey?.(id);
78
+ // The fallback is the row most recently started; a row that never started, or whose stamp is not a date, cannot be "most recent" (NaN
79
+ // compares false both ways and would pick an arbitrary winner).
80
+ const started = (r) => (r.last_started_at === null ? Number.NaN : Date.parse(r.last_started_at));
81
+ const active = everyScope.find((r) => r.scope_key === wanted)
82
+ ?? [...everyScope].filter((r) => !Number.isNaN(started(r))).sort((a, b) => started(b) - started(a))[0]
83
+ ?? everyScope[0];
84
+ const rows = active ? [active] : [];
85
+ // A scope that never started (an agent's request waiting for a person) was never read, so it is not an "older scope kept".
86
+ const older = everyScope.filter((r) => !rows.includes(r) && r.last_started_at !== null).length;
87
+ const worst = everyScope.some((r) => r.status === 'needs_reauth') ? 'needs_reauth' : rows.reduce((w, r) => (w === undefined || RANK[r.status] > RANK[w] ? r.status : w), undefined);
88
+ const lasts = rows.map((r) => r.last_success_at).filter((t) => t !== null && !Number.isNaN(Date.parse(t)));
89
+ const last = lasts.sort((a, b) => Date.parse(b) - Date.parse(a))[0];
90
+ const attempts = rows.map((r) => r.last_attempt_at).filter((t) => t !== null && !Number.isNaN(Date.parse(t)));
91
+ const attempt = attempts.sort((a, b) => Date.parse(b) - Date.parse(a))[0];
92
+ const missing = missingOf(rows);
93
+ const stuck = rows.find((r) => r.hole_streak >= PERSISTENT_HOLE_RUNS && r.hole_sig !== null);
94
+ const items = rows.find((r) => r.items_last_run !== null)?.items_last_run ?? undefined;
95
+ const pending = rows.map((r) => r.pending_until).filter((t) => t !== null && !Number.isNaN(Date.parse(t))).sort()[0];
96
+ const bf = d.backfill(id);
97
+ const s = {
98
+ id, label: label(id), connected, scope: id === 'confluence' && !rows.some((r) => r.scope === 'team') ? 'no spaces chosen' : scopeText(rows),
99
+ status: !connected ? 'not_connected' : worst === 'needs_reauth' || d.blockedScope?.(id) === undefined ? (worst ?? 'never') : 'blocked',
100
+ skips: skipCounts(rows),
101
+ ...(last !== undefined ? { last_success_at: last } : {}),
102
+ ...(attempt !== undefined ? { last_attempt_at: attempt } : {}),
103
+ ...(missing.length > 0 ? { missing } : {}),
104
+ ...(stuck ? { persistent_hole: `${stuck.hole_sig} (${stuck.hole_streak} runs in a row)` } : {}),
105
+ ...(items !== undefined ? { items_last_run: items } : {}),
106
+ ...(older > 0 ? { older_scopes: older } : {}),
107
+ ...(pending !== undefined ? { reached_back_to: pending } : {}),
108
+ ...(connected && d.syncRunning(id) ? { running: 'sync' } : bf && d.backfillAlive(bf) ? { running: 'backfill' } : {}),
109
+ };
110
+ if (id === 'github' && connected)
111
+ s.discussion_pending = pendingDetailCount(d.dbPath, 'github');
112
+ if (!connected)
113
+ s.next_step = `Not connected. Ask the person to run: align connect ${id}`;
114
+ else if (s.status === 'needs_reauth')
115
+ s.next_step = `The provider refused the saved token. Ask the person to run: align connect ${id}`;
116
+ else if (s.status === 'blocked')
117
+ s.next_step = d.blockedScope(id);
118
+ else if (id === 'teams')
119
+ s.next_step = TEAMS_NOTE;
120
+ const waiting = connected ? d.pendingScope?.(id) : undefined;
121
+ if (waiting !== undefined)
122
+ s.next_step = `Team scope for ${id} is waiting for you to confirm (${waiting}): run \`align sync ${id}\` (it will show what it reads)`;
123
+ return s;
124
+ });
125
+ return { sources, rows_awaiting_relink: unfinishedCount(d.dbPath, EMBEDDING_MODEL_ID) };
126
+ }
127
+ /** Plain text for the CLI and for the `text` field of the tool result. Connected sources only. */
128
+ export function renderStatus(r) {
129
+ const lines = [];
130
+ const connected = r.sources.filter((s) => s.connected);
131
+ if (connected.length === 0)
132
+ lines.push('No source is connected. Ask the person to run: align connect <source>');
133
+ for (const s of connected) {
134
+ const bits = [];
135
+ bits.push(s.status === 'never' ? 'not synced yet' : s.status);
136
+ if (s.running)
137
+ bits.push(s.running === 'sync' ? 'syncing now' : 'a backfill is running');
138
+ const when = (iso) => `${iso.slice(0, 16).replace('T', ' ')} UTC`;
139
+ if (s.last_success_at)
140
+ bits.push(`last complete sync ${when(s.last_success_at)}`);
141
+ if (s.last_attempt_at && s.last_attempt_at !== s.last_success_at && s.status !== 'ok')
142
+ bits.push(`last tried ${when(s.last_attempt_at)}`);
143
+ if (s.items_last_run !== undefined)
144
+ bits.push(`${s.items_last_run} items read last run`);
145
+ if (s.discussion_pending)
146
+ bits.push(`${s.discussion_pending} still waiting for their discussion`);
147
+ if (s.reached_back_to)
148
+ bits.push(`older history still to read (reached ${s.reached_back_to.slice(0, 10)})`);
149
+ if (s.missing)
150
+ bits.push(`not read last time: ${s.missing.join('; ')}`);
151
+ if (s.persistent_hole)
152
+ bits.push(`persistent hole: ${s.persistent_hole}; the sync reads the rest and no longer waits for it, so fix the access or leave it`);
153
+ const skips = Object.entries(s.skips).map(([k, n]) => `${k} ${n}`);
154
+ if (skips.length)
155
+ bits.push(`skipped last run: ${skips.join(', ')}`);
156
+ if (s.older_scopes)
157
+ bits.push(`${s.older_scopes} older scope${s.older_scopes === 1 ? '' : 's'} kept (not read)`);
158
+ lines.push(`${s.label} (${s.scope}): ${bits.join('; ')}.`);
159
+ if (s.next_step)
160
+ lines.push(` ${s.next_step}`);
161
+ }
162
+ if (r.rows_awaiting_relink > 0)
163
+ lines.push(`${r.rows_awaiting_relink} stored items wait for their links to be finished. Each sync works on them for up to a minute, locally and free, until they are done.`);
164
+ return lines.join('\n');
165
+ }
166
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/lib/sync/status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { SyncStatus } from './sync-state.js';
2
+ export declare const SUMMARY_FILE = "sync-summary.json";
3
+ export interface SummarySource {
4
+ id: string;
5
+ /** Connected, and a kind of source a background run can read (not Teams, Decision 21). */
6
+ backgroundEligible: boolean;
7
+ status: SyncStatus | 'never' | 'manual' | 'not_connected';
8
+ lastSuccessAt?: string;
9
+ /** Any run, complete or not: the launch hook spaces its attempts by this, so a source that is always partial is not retried on every launch. */
10
+ lastAttemptAt?: string;
11
+ }
12
+ export interface SyncSummary {
13
+ version: 1;
14
+ generated_at: string;
15
+ sources: SummarySource[];
16
+ }
17
+ export declare function summaryPath(dir?: string | null): string | null;
18
+ export declare function readSummary(dir?: string | null): SyncSummary | undefined;
19
+ //# sourceMappingURL=summary-read.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summary-read.d.ts","sourceRoot":"","sources":["../../../src/lib/sync/summary-read.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,eAAO,MAAM,YAAY,sBAAsB,CAAC;AAEhD,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,0FAA0F;IAC1F,kBAAkB,EAAE,OAAO,CAAC;IAC5B,MAAM,EAAE,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,eAAe,CAAC;IAC1D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gJAAgJ;IAChJ,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAAG,OAAO,EAAE,CAAC,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,aAAa,EAAE,CAAA;CAAE;AAE3F,wBAAgB,WAAW,CAAC,GAAG,GAAE,MAAM,GAAG,IAAsB,GAAG,MAAM,GAAG,IAAI,CAE/E;AAED,wBAAgB,WAAW,CAAC,GAAG,GAAE,MAAM,GAAG,IAAsB,GAAG,WAAW,GAAG,SAAS,CAgBzF"}