@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,119 @@
1
+ /**
2
+ * An in-memory copy of every stored embedding, held as ONE contiguous Float32Array, with an
3
+ * exhaustive top-K scan over it (plan LB, decision 26).
4
+ *
5
+ * Why it exists: ingest ranked each new item against the whole graph by re-reading every
6
+ * stored vector out of SQLite, decoding it, and cosine-scoring it, once per item. Measured
7
+ * (profile at 5,000 rows): read and decode 5.7 ms, cosine 1.9 ms, sort 0.4 ms per item, and
8
+ * the read grows with the graph, so a batch was quadratic. Loading once per run and appending
9
+ * as items land removes the read; scoring against precomputed norms removes two thirds of the
10
+ * arithmetic. The scan stays EXHAUSTIVE - narrowing candidates would drop the cross-tool links
11
+ * the product exists for - so results must equal the old scan exactly. They do: the dot
12
+ * product accumulates in the same order as cosineSimilarity and divides by the same
13
+ * sqrt(normQuery) * sqrt(normRow), so every score is bit-identical, not merely close.
14
+ *
15
+ * Pure: no database, no model. The caller decides which rows go in.
16
+ */
17
+ /**
18
+ * Above this many stored embeddings ingest does not build a matrix and ranks by streaming the
19
+ * table per item, as it did before the matrix existed. Memory: a 384-dim row is 1,536 bytes of
20
+ * Float32 plus its id and norm, so about 1.5 KB per row, i.e. roughly 230 MB at 150,000 rows.
21
+ * Building reads every row out of SQLite first, so the transient peak is about 2.5x the
22
+ * matrix (the decoded rows, the contiguous copy, and growth headroom) until the rows are
23
+ * released. The cap keeps that peak near 600 MB. Measured graphs are in the thousands of rows;
24
+ * this is a guard for the pathological case, not a tuning knob.
25
+ */
26
+ export const MATRIX_MAX_ROWS = 150_000;
27
+ /** The one writer of the "different model" error, shared with cosineSimilarity. */
28
+ export function embeddingLengthMismatch(a, b) {
29
+ return new Error(`Embedding length mismatch: ${a} vs ${b}. The local graph holds a vector ` +
30
+ 'from a different model - run `align local reset` and re-import to rebuild it.');
31
+ }
32
+ const INITIAL_ROWS = 256;
33
+ export class EmbeddingMatrix {
34
+ dim = -1;
35
+ data = new Float32Array(0);
36
+ sqrtNorms = new Float64Array(0);
37
+ ids = [];
38
+ index = new Map();
39
+ static fromRows(rows) {
40
+ const m = new EmbeddingMatrix();
41
+ for (const r of rows)
42
+ m.add(r.decisionId, r.embedding);
43
+ return m;
44
+ }
45
+ get size() { return this.ids.length; }
46
+ /** Adds a row, or replaces the vector of an id already held (setEmbedding is INSERT OR
47
+ * REPLACE, so the matrix must never hold two vectors for one decision). */
48
+ add(decisionId, embedding) {
49
+ if (this.dim === -1)
50
+ this.dim = embedding.length;
51
+ else if (embedding.length !== this.dim)
52
+ throw embeddingLengthMismatch(embedding.length, this.dim);
53
+ let row = this.index.get(decisionId);
54
+ if (row === undefined) {
55
+ row = this.ids.length;
56
+ if ((row + 1) * this.dim > this.data.length)
57
+ this.grow(Math.max(INITIAL_ROWS, row * 2));
58
+ this.ids.push(decisionId);
59
+ this.index.set(decisionId, row);
60
+ }
61
+ this.data.set(embedding, row * this.dim);
62
+ let norm = 0;
63
+ for (let i = 0; i < this.dim; i++)
64
+ norm += embedding[i] * embedding[i];
65
+ this.sqrtNorms[row] = Math.sqrt(norm);
66
+ }
67
+ /** The `k` best rows by cosine, best first; equal scores order by id in code-unit order.
68
+ * Rows scoring below `threshold` are dropped (default: none are; findSimilar passed 0). */
69
+ topK(query, k, opts = {}) {
70
+ const n = this.ids.length;
71
+ if (n === 0 || k <= 0)
72
+ return [];
73
+ if (query.length !== this.dim)
74
+ throw embeddingLengthMismatch(query.length, this.dim);
75
+ const threshold = opts.threshold ?? -Infinity;
76
+ const skip = opts.excludeId === undefined ? -1 : (this.index.get(opts.excludeId) ?? -1);
77
+ let normQ = 0;
78
+ for (let i = 0; i < this.dim; i++)
79
+ normQ += query[i] * query[i];
80
+ const sqrtQ = Math.sqrt(normQ);
81
+ const best = [];
82
+ const dim = this.dim, data = this.data;
83
+ for (let r = 0; r < n; r++) {
84
+ if (r === skip)
85
+ continue;
86
+ const base = r * dim;
87
+ let dot = 0;
88
+ for (let i = 0; i < dim; i++)
89
+ dot += query[i] * data[base + i];
90
+ const denom = sqrtQ * this.sqrtNorms[r];
91
+ const score = denom === 0 ? 0 : dot / denom;
92
+ if (!(score >= threshold))
93
+ continue;
94
+ if (best.length === k && !this.outranks(score, this.ids[r], best[k - 1]))
95
+ continue;
96
+ // Insertion into a list of at most k: k is 10 in ingest, so this beats any heap.
97
+ let pos = best.length === k ? k - 1 : best.length;
98
+ while (pos > 0 && this.outranks(score, this.ids[r], best[pos - 1])) {
99
+ if (pos < k)
100
+ best[pos] = best[pos - 1];
101
+ pos--;
102
+ }
103
+ best[pos] = { decisionId: this.ids[r], score };
104
+ }
105
+ return best;
106
+ }
107
+ outranks(score, id, other) {
108
+ return score > other.score || (score === other.score && id < other.decisionId);
109
+ }
110
+ grow(rows) {
111
+ const data = new Float32Array(rows * this.dim);
112
+ data.set(this.data);
113
+ this.data = data;
114
+ const norms = new Float64Array(rows);
115
+ norms.set(this.sqrtNorms);
116
+ this.sqrtNorms = norms;
117
+ }
118
+ }
119
+ //# sourceMappingURL=embedding-matrix.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedding-matrix.js","sourceRoot":"","sources":["../../../src/lib/similarity/embedding-matrix.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { type SyncWindow } from './since.js';
2
+ /** The help line for `--since`, one writer for every command that takes it. */
3
+ export declare const SINCE_HELP = "How far back to read: 30d, 2w, 6m, 1y or all (default 180 days). A ceiling still applies";
4
+ /**
5
+ * L3: the CLI end of the one duration parser. A bad value exits 2 (usage error) naming the
6
+ * accepted forms, before any request is made: a window the user did not mean would be read
7
+ * and reported as complete. `align_backfill` calls parseSince directly and returns the same
8
+ * message as a tool error.
9
+ */
10
+ export declare function sinceFromFlag(raw: string | undefined, now?: Date): SyncWindow;
11
+ //# sourceMappingURL=since-flag.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"since-flag.d.ts","sourceRoot":"","sources":["../../src/lib/since-flag.ts"],"names":[],"mappings":"AAEA,OAAO,EAA0B,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAErE,+EAA+E;AAC/E,eAAO,MAAM,UAAU,6FAA6F,CAAC;AAErH;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,GAAE,IAAiB,GAAG,UAAU,CASzF"}
@@ -0,0 +1,24 @@
1
+ import chalk from 'chalk';
2
+ import { trackChildFromEnv } from './backfill-state.js';
3
+ import { parseSince, SinceError } from './since.js';
4
+ /** The help line for `--since`, one writer for every command that takes it. */
5
+ export const SINCE_HELP = 'How far back to read: 30d, 2w, 6m, 1y or all (default 180 days). A ceiling still applies';
6
+ /**
7
+ * L3: the CLI end of the one duration parser. A bad value exits 2 (usage error) naming the
8
+ * accepted forms, before any request is made: a window the user did not mean would be read
9
+ * and reported as complete. `align_backfill` calls parseSince directly and returns the same
10
+ * message as a tool error.
11
+ */
12
+ export function sinceFromFlag(raw, now = new Date()) {
13
+ try {
14
+ return parseSince(raw, now);
15
+ }
16
+ catch (e) {
17
+ if (!(e instanceof SinceError))
18
+ throw e;
19
+ trackChildFromEnv()?.note(e.message); // a backfill child records why it ended
20
+ console.error(chalk.red(`align connect: ${e.message}`));
21
+ return process.exit(2);
22
+ }
23
+ }
24
+ //# sourceMappingURL=since-flag.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"since-flag.js","sourceRoot":"","sources":["../../src/lib/since-flag.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAmB,MAAM,YAAY,CAAC;AAErE,+EAA+E;AAC/E,MAAM,CAAC,MAAM,UAAU,GAAG,0FAA0F,CAAC;AAErH;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,GAAuB,EAAE,MAAY,IAAI,IAAI,EAAE;IAC3E,IAAI,CAAC;QACH,OAAO,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC9B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,CAAC,CAAC,CAAC,YAAY,UAAU,CAAC;YAAE,MAAM,CAAC,CAAC;QACxC,iBAAiB,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,wCAAwC;QAC9E,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACxD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC;AACH,CAAC"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * L3: the ONE parser for how far back an import reads. `align connect --since` and the MCP
3
+ * tool `align_backfill` both call it, so the two surfaces cannot accept different spellings
4
+ * of the same window (code-style.md: two readers of one format must agree).
5
+ *
6
+ * Accepted: `Nd`, `Nw`, `Nm` (a month is 30.4 days, rounded), `Ny`, and `all`. Anything else
7
+ * is a SinceError: a window the user did not mean is worse than a refusal, because the
8
+ * report would still say the read was complete.
9
+ */
10
+ import { type SourceId } from './import-defaults.js';
11
+ import type { ScopeFetchOpts } from './scope-values.js';
12
+ export declare const ACCEPTED_SINCE_FORMS = "30d, 2w, 6m, 1y or all";
13
+ export declare class SinceError extends Error {
14
+ constructor(raw: string, why: string);
15
+ }
16
+ export interface SyncWindow {
17
+ /** Days back from now. Absent for `all`. */
18
+ days?: number;
19
+ /** ISO-8601 UTC lower bound for the SDK's `since`. Absent for `all`: only the ceiling applies. */
20
+ since?: string;
21
+ }
22
+ /** `undefined` means the flag was not passed: the plan default applies. */
23
+ export declare function parseSince(raw: string | undefined, now?: Date): SyncWindow;
24
+ /**
25
+ * The phrase the capture report prints. Exact: "the last 6 months" only for a window that IS
26
+ * what `6m` parses to (182 days). The default is 180 days and reads "the last 180 days", so two
27
+ * different reads never share a label. A month or year label needs the day count to be exactly
28
+ * what that many months or years parse to; anything else is said in days.
29
+ */
30
+ export declare function windowLabel(days: number | undefined): string;
31
+ /**
32
+ * The options every windowed fetch gets: this source's ceiling, the shared time budget and the
33
+ * window's lower bound. `since` is OMITTED for `all`, never set to undefined, so the SDK sees no
34
+ * bound at all. The one reader of SYNC_CEILINGS for a fetch (import-defaults.test.ts pins it).
35
+ */
36
+ export declare function fetchWindow(id: SourceId, window: SyncWindow): {
37
+ limit: number;
38
+ timeBudgetMs: number;
39
+ since?: string;
40
+ };
41
+ /**
42
+ * What a source's fetch is handed beyond the window: L5's `until` and Slack `hotThreads`, and L4's team-scope option (Jira `projects`,
43
+ * Linear `teams`, GitLab `projectId`, Confluence `spaces`). `team` and `repo` are GitHub's, read by its closure in setup.ts.
44
+ */
45
+ export interface FetchExtras extends ScopeFetchOpts {
46
+ until?: string;
47
+ hotThreads?: Array<{
48
+ channel: string;
49
+ ts: string;
50
+ }>;
51
+ team?: boolean;
52
+ /** GitHub team scope: the repo. */
53
+ repo?: string;
54
+ /** True when the caller has already decided the scope (repo or none): the fetch must not look at the folder itself. */
55
+ resolved?: boolean;
56
+ }
57
+ /** The optional extras a fetch adds to the window itself. Omitted keys stay omitted. */
58
+ export declare function windowExtras(o?: FetchExtras): FetchExtras;
59
+ //# sourceMappingURL=since.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"since.d.ts","sourceRoot":"","sources":["../../src/lib/since.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,KAAK,QAAQ,EAAgE,MAAM,sBAAsB,CAAC;AACnH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,eAAO,MAAM,oBAAoB,2BAA2B,CAAC;AAS7D,qBAAa,UAAW,SAAQ,KAAK;gBACvB,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;CAKrC;AAED,MAAM,WAAW,UAAU;IACzB,4CAA4C;IAC5C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kGAAkG;IAClG,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,2EAA2E;AAC3E,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,GAAE,IAAiB,GAAG,UAAU,CAUtF;AAMD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAQ5D;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAMrH;AAED;;;GAGG;AACH,MAAM,WAAW,WAAY,SAAQ,cAAc;IACjD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,mCAAmC;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uHAAuH;IACvH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,wFAAwF;AACxF,wBAAgB,YAAY,CAAC,CAAC,CAAC,EAAE,WAAW,GAAG,WAAW,CASzD"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * L3: the ONE parser for how far back an import reads. `align connect --since` and the MCP
3
+ * tool `align_backfill` both call it, so the two surfaces cannot accept different spellings
4
+ * of the same window (code-style.md: two readers of one format must agree).
5
+ *
6
+ * Accepted: `Nd`, `Nw`, `Nm` (a month is 30.4 days, rounded), `Ny`, and `all`. Anything else
7
+ * is a SinceError: a window the user did not mean is worse than a refusal, because the
8
+ * report would still say the read was complete.
9
+ */
10
+ import { SYNC_CEILINGS, SYNC_TIME_BUDGET_MS, SYNC_WINDOW_DEFAULT_DAYS } from './import-defaults.js';
11
+ export const ACCEPTED_SINCE_FORMS = '30d, 2w, 6m, 1y or all';
12
+ const DAY_MS = 86_400_000;
13
+ const MONTH_DAYS = 30.4;
14
+ const DAYS_PER_UNIT = { d: 1, w: 7, m: MONTH_DAYS, y: 365 };
15
+ // The SDK refuses a window that starts before 1970 (a `shape` skip, nothing read). Refusing
16
+ // it here turns that into a message naming the accepted forms instead of a skip line.
17
+ const EPOCH_MS = Date.UTC(1970, 0, 1);
18
+ export class SinceError extends Error {
19
+ constructor(raw, why) {
20
+ // Cut: a pasted secret in the wrong field must not ride along into an error transcript.
21
+ super(`Cannot read "${raw.slice(0, 16)}" as how far back to look: ${why}. Use ${ACCEPTED_SINCE_FORMS}.`);
22
+ this.name = 'SinceError';
23
+ }
24
+ }
25
+ /** `undefined` means the flag was not passed: the plan default applies. */
26
+ export function parseSince(raw, now = new Date()) {
27
+ if (raw === undefined)
28
+ return windowOfDays(SYNC_WINDOW_DEFAULT_DAYS, now);
29
+ const text = raw.trim().toLowerCase();
30
+ if (text === 'all')
31
+ return {};
32
+ const m = /^(\d+)([dwmy])$/.exec(text);
33
+ if (!m)
34
+ throw new SinceError(raw, 'it is not a whole number followed by d, w, m or y');
35
+ const days = Math.round(Number(m[1]) * DAYS_PER_UNIT[m[2]]);
36
+ if (days < 1)
37
+ throw new SinceError(raw, 'it is not a positive length of time');
38
+ if (now.getTime() - days * DAY_MS < EPOCH_MS)
39
+ throw new SinceError(raw, 'it reaches back before 1970');
40
+ return windowOfDays(days, now);
41
+ }
42
+ function windowOfDays(days, now) {
43
+ return { days, since: new Date(now.getTime() - days * DAY_MS).toISOString() };
44
+ }
45
+ /**
46
+ * The phrase the capture report prints. Exact: "the last 6 months" only for a window that IS
47
+ * what `6m` parses to (182 days). The default is 180 days and reads "the last 180 days", so two
48
+ * different reads never share a label. A month or year label needs the day count to be exactly
49
+ * what that many months or years parse to; anything else is said in days.
50
+ */
51
+ export function windowLabel(days) {
52
+ if (days === undefined)
53
+ return 'all the history the ceiling allowed';
54
+ const plural = (n, unit) => `${n} ${unit}${n === 1 ? '' : 's'}`;
55
+ // Years first: 3y is 1095 days, which 36 months (1094) does not round-trip to.
56
+ if (days % 365 === 0)
57
+ return `the last ${plural(days / 365, 'year')}`;
58
+ const months = Math.round(days / MONTH_DAYS);
59
+ if (months >= 2 && Math.round(months * MONTH_DAYS) === days)
60
+ return `the last ${plural(months, 'month')}`;
61
+ return `the last ${plural(days, 'day')}`;
62
+ }
63
+ /**
64
+ * The options every windowed fetch gets: this source's ceiling, the shared time budget and the
65
+ * window's lower bound. `since` is OMITTED for `all`, never set to undefined, so the SDK sees no
66
+ * bound at all. The one reader of SYNC_CEILINGS for a fetch (import-defaults.test.ts pins it).
67
+ */
68
+ export function fetchWindow(id, window) {
69
+ return {
70
+ limit: SYNC_CEILINGS[id],
71
+ timeBudgetMs: SYNC_TIME_BUDGET_MS,
72
+ ...(window.since !== undefined ? { since: window.since } : {}),
73
+ };
74
+ }
75
+ /** The optional extras a fetch adds to the window itself. Omitted keys stay omitted. */
76
+ export function windowExtras(o) {
77
+ return {
78
+ ...(o?.until !== undefined ? { until: o.until } : {}),
79
+ ...(o?.hotThreads !== undefined && o.hotThreads.length > 0 ? { hotThreads: o.hotThreads } : {}),
80
+ ...(o?.projects !== undefined ? { projects: o.projects } : {}),
81
+ ...(o?.teams !== undefined ? { teams: o.teams } : {}),
82
+ ...(o?.projectId !== undefined ? { projectId: o.projectId } : {}),
83
+ ...(o?.spaces !== undefined ? { spaces: o.spaces } : {}),
84
+ };
85
+ }
86
+ //# sourceMappingURL=since.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"since.js","sourceRoot":"","sources":["../../src/lib/since.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export { normaliseSourceKey } from '@aligndottech/connector-core';
2
+ /** Every platform a connector import can key. */
3
+ export declare const KEYED_PLATFORMS: readonly string[];
4
+ /**
5
+ * The key stored in `decisions.source_key`, or undefined (the row keeps its
6
+ * (source_url, title) identity). The platform is part of the stored string, so a `git` import
7
+ * and a `github` row for the same commit URL are different items and never merge.
8
+ *
9
+ * Only a connector import is ever given one (callers decide that; see insertDecision's
10
+ * `keyed`). The platform alone cannot say: `align capture <PR url>` also stamps `github`.
11
+ */
12
+ export declare function connectorItemKey(platform: string, url: string | null | undefined): string | undefined;
13
+ //# sourceMappingURL=source-key.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-key.d.ts","sourceRoot":"","sources":["../../src/lib/source-key.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAkBlE,iDAAiD;AACjD,eAAO,MAAM,eAAe,EAAE,SAAS,MAAM,EAA6B,CAAC;AAE3E;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAUrG"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * The identity of a connector item that is exactly one thing per URL - a PR, an issue, an MR, a
3
+ * page, a Slack or Teams thread, a Zoom recording, a git commit. Two rows with the same key are
4
+ * one item whose title was edited, which the (source_url, title) key cannot see.
5
+ *
6
+ * L3: `normaliseSourceKey` is connector-core's own function, re-exported. Until connector-core
7
+ * 0.10.0 this file held a behavioural copy; one function now decides the key here, in the hosted
8
+ * scan and at share time. src/__tests__/source-key.test.ts runs the SDK's published fixture table
9
+ * (its `./source-key-fixtures.json` export) against it and asserts it is the same function.
10
+ *
11
+ * `connectorItemKey` below is local policy, not part of the shared format: which rows may be
12
+ * keyed at all.
13
+ */
14
+ import { normaliseSourceKey } from '@aligndottech/connector-core';
15
+ export { normaliseSourceKey } from '@aligndottech/connector-core';
16
+ /** Per platform: the path shapes that address ONE item. The SDK function keys any URL that is
17
+ * not a bare host; this gate stays on top of it so an unrecognised shape (a fetcher fallback
18
+ * that names a site or a listing) costs a possible twin, never a wrong merge. Local policy. */
19
+ const ITEM_SHAPES = {
20
+ github: [/^\/[^/]+\/[^/]+\/(pull|issues|commit)\/[^/]+$/],
21
+ gitlab: [/^\/.+\/-\/(merge_requests|issues|commit)\/[^/]+$/],
22
+ jira: [/\/browse\/[A-Za-z][A-Za-z0-9_]*-\d+$/],
23
+ linear: [/\/issue\/[A-Za-z0-9]+-\d+(\/[^/]*)?$/],
24
+ confluence: [/\/pages\/\d+(\/[^/]*)?$/, /\/pages\/viewpage\.action$/],
25
+ notion: [/[0-9a-f]{32}$/i],
26
+ slack: [/^\/archives\/[A-Za-z0-9]+\/p\d+$/],
27
+ teams: [/^\/l\/message\/[^/]+\/\d+$/],
28
+ zoom: [/^\/recording\/[^/]+$/],
29
+ git: [/\/commit\/[0-9a-f]{7,40}$/i, /^\/\/commit\/[0-9a-f]{7,40}$/i],
30
+ };
31
+ /** Every platform a connector import can key. */
32
+ export const KEYED_PLATFORMS = Object.keys(ITEM_SHAPES);
33
+ /**
34
+ * The key stored in `decisions.source_key`, or undefined (the row keeps its
35
+ * (source_url, title) identity). The platform is part of the stored string, so a `git` import
36
+ * and a `github` row for the same commit URL are different items and never merge.
37
+ *
38
+ * Only a connector import is ever given one (callers decide that; see insertDecision's
39
+ * `keyed`). The platform alone cannot say: `align capture <PR url>` also stamps `github`.
40
+ */
41
+ export function connectorItemKey(platform, url) {
42
+ const shapes = ITEM_SHAPES[platform];
43
+ if (!shapes || !url)
44
+ return undefined;
45
+ const key = normaliseSourceKey(platform, url);
46
+ if (key === undefined)
47
+ return undefined;
48
+ let parsed;
49
+ try {
50
+ parsed = new URL(key);
51
+ }
52
+ catch {
53
+ return undefined;
54
+ }
55
+ const path = parsed.protocol === 'git:' ? `//${parsed.host}${parsed.pathname}` : parsed.pathname;
56
+ if (!shapes.some(p => p.test(path)))
57
+ return undefined;
58
+ return `${platform}|${key}`;
59
+ }
60
+ //# sourceMappingURL=source-key.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-key.js","sourceRoot":"","sources":["../../src/lib/source-key.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAElE,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAElE;;gGAEgG;AAChG,MAAM,WAAW,GAA6B;IAC5C,MAAM,EAAE,CAAC,+CAA+C,CAAC;IACzD,MAAM,EAAE,CAAC,kDAAkD,CAAC;IAC5D,IAAI,EAAE,CAAC,sCAAsC,CAAC;IAC9C,MAAM,EAAE,CAAC,sCAAsC,CAAC;IAChD,UAAU,EAAE,CAAC,yBAAyB,EAAE,4BAA4B,CAAC;IACrE,MAAM,EAAE,CAAC,gBAAgB,CAAC;IAC1B,KAAK,EAAE,CAAC,kCAAkC,CAAC;IAC3C,KAAK,EAAE,CAAC,4BAA4B,CAAC;IACrC,IAAI,EAAE,CAAC,sBAAsB,CAAC;IAC9B,GAAG,EAAE,CAAC,4BAA4B,EAAE,+BAA+B,CAAC;CACrE,CAAC;AAEF,iDAAiD;AACjD,MAAM,CAAC,MAAM,eAAe,GAAsB,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAE3E;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAgB,EAAE,GAA8B;IAC/E,MAAM,MAAM,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IACrC,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IACtC,MAAM,GAAG,GAAG,kBAAkB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAC9C,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACxC,IAAI,MAAW,CAAC;IAChB,IAAI,CAAC;QAAC,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,SAAS,CAAC;IAAC,CAAC;IAC1D,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;IACjG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IACtD,OAAO,GAAG,QAAQ,IAAI,GAAG,EAAE,CAAC;AAC9B,CAAC"}
@@ -0,0 +1,12 @@
1
+ /** The scope this phase writes under: the caller's own items. L4 adds repo/project/space keys
2
+ * ('repo:o/r', 'jira:ALI', ...) when scope pickers land, and L5's nextWindow reads whichever
3
+ * row is in force. */
4
+ export declare const WINDOW_SCOPE_KEY = "yours";
5
+ /** `needsReauth` is true when ANY scope row of the source says so: a token the vendor refused
6
+ * is refused for the whole source. Absence of a row is no problem, not a pass. */
7
+ export declare function readSyncStatus(dbPath: string, sourceId: string): {
8
+ needsReauth: boolean;
9
+ };
10
+ /** Record the window the user asked for. `null` is `all`: no lower bound, only the ceiling. */
11
+ export declare function recordWindowSince(dbPath: string, sourceId: string, windowSince: string | null, changedByAgent: string): void;
12
+ //# sourceMappingURL=source-sync-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-sync-state.d.ts","sourceRoot":"","sources":["../../src/lib/source-sync-state.ts"],"names":[],"mappings":"AAYA;;uBAEuB;AACvB,eAAO,MAAM,gBAAgB,UAAU,CAAC;AAYxC;mFACmF;AACnF,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG;IAAE,WAAW,EAAE,OAAO,CAAA;CAAE,CAKzF;AAED,+FAA+F;AAC/F,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI,CAS5H"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * L3: the slice of `source_sync` (schema v7) that `align_backfill` needs before L5's sync
3
+ * exists: is this source waiting on the user to re-authenticate, and what window did the user
4
+ * ask for. L5 owns the watermark columns (high_water, pending_until, last_*, items_last_run);
5
+ * nothing here writes them, and an upsert here never clears one.
6
+ *
7
+ * Opens its own short-lived handle on purpose. The MCP server holds the graph open through the
8
+ * local gateway client; this is a one-row read or write, and WAL plus the 30 s busy_timeout
9
+ * (set below, as local-db.ts sets it) is the case that pairing exists for.
10
+ */
11
+ import { DatabaseSync } from 'node:sqlite';
12
+ /** The scope this phase writes under: the caller's own items. L4 adds repo/project/space keys
13
+ * ('repo:o/r', 'jira:ALI', ...) when scope pickers land, and L5's nextWindow reads whichever
14
+ * row is in force. */
15
+ export const WINDOW_SCOPE_KEY = 'yours';
16
+ function withDb(dbPath, fn) {
17
+ const db = new DatabaseSync(dbPath);
18
+ try {
19
+ db.exec('PRAGMA busy_timeout = 30000');
20
+ return fn(db);
21
+ }
22
+ finally {
23
+ db.close();
24
+ }
25
+ }
26
+ /** `needsReauth` is true when ANY scope row of the source says so: a token the vendor refused
27
+ * is refused for the whole source. Absence of a row is no problem, not a pass. */
28
+ export function readSyncStatus(dbPath, sourceId) {
29
+ return withDb(dbPath, (db) => {
30
+ const row = db.prepare(`SELECT 1 AS hit FROM source_sync WHERE source_id = ? AND status = 'needs_reauth' LIMIT 1`).get(sourceId);
31
+ return { needsReauth: row !== undefined };
32
+ });
33
+ }
34
+ /** Record the window the user asked for. `null` is `all`: no lower bound, only the ceiling. */
35
+ export function recordWindowSince(dbPath, sourceId, windowSince, changedByAgent) {
36
+ withDb(dbPath, (db) => {
37
+ db.prepare(`INSERT INTO source_sync (source_id, scope_key, scope, window_since, changed_via, changed_by_agent)
38
+ VALUES (?, ?, 'yours', ?, 'mcp', ?)
39
+ ON CONFLICT(source_id, scope_key) DO UPDATE SET
40
+ window_since = excluded.window_since, changed_via = 'mcp', changed_by_agent = excluded.changed_by_agent`).run(sourceId, WINDOW_SCOPE_KEY, windowSince, changedByAgent);
41
+ });
42
+ }
43
+ //# sourceMappingURL=source-sync-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-sync-state.js","sourceRoot":"","sources":["../../src/lib/source-sync-state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C;;uBAEuB;AACvB,MAAM,CAAC,MAAM,gBAAgB,GAAG,OAAO,CAAC;AAExC,SAAS,MAAM,CAAI,MAAc,EAAE,EAA2B;IAC5D,MAAM,EAAE,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC;IACpC,IAAI,CAAC;QACH,EAAE,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QACvC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;IAChB,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC;AAED;mFACmF;AACnF,MAAM,UAAU,cAAc,CAAC,MAAc,EAAE,QAAgB;IAC7D,OAAO,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE;QAC3B,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,0FAA0F,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACjI,OAAO,EAAE,WAAW,EAAE,GAAG,KAAK,SAAS,EAAE,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC;AAED,+FAA+F;AAC/F,MAAM,UAAU,iBAAiB,CAAC,MAAc,EAAE,QAAgB,EAAE,WAA0B,EAAE,cAAsB;IACpH,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE;QACpB,EAAE,CAAC,OAAO,CACR;;;iHAG2G,CAC5G,CAAC,GAAG,CAAC,QAAQ,EAAE,gBAAgB,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=startup-backfill-track.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"startup-backfill-track.d.ts","sourceRoot":"","sources":["../../src/lib/startup-backfill-track.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ import { trackChildFromEnv } from './backfill-state.js';
2
+ // THIRD, right after startup-xdg: when `align_backfill` started this process, record from the first
3
+ // moment how it ends. Anything later (a bad --since, a commander parse error, an uncaught error)
4
+ // exits through process.exit, which the exit handler turns into a final "failed" status.
5
+ trackChildFromEnv();
6
+ //# sourceMappingURL=startup-backfill-track.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"startup-backfill-track.js","sourceRoot":"","sources":["../../src/lib/startup-backfill-track.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,oGAAoG;AACpG,iGAAiG;AACjG,yFAAyF;AACzF,iBAAiB,EAAE,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * The environment as the user's shell handed it to align, captured before any align module
3
+ * runs (index.ts imports this first). The launcher restores every LLM provider variable to
4
+ * this snapshot before starting a coding agent, so a key align put into its own environment
5
+ * can never reach the agent, while a key the user exported always does.
6
+ */
7
+ export declare const STARTUP_ENV: Readonly<Record<string, string | undefined>>;
8
+ //# sourceMappingURL=startup-env.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"startup-env.d.ts","sourceRoot":"","sources":["../../src/lib/startup-env.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAqC,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * The environment as the user's shell handed it to align, captured before any align module
3
+ * runs (index.ts imports this first). The launcher restores every LLM provider variable to
4
+ * this snapshot before starting a coding agent, so a key align put into its own environment
5
+ * can never reach the agent, while a key the user exported always does.
6
+ */
7
+ export const STARTUP_ENV = Object.freeze({ ...process.env });
8
+ //# sourceMappingURL=startup-env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"startup-env.js","sourceRoot":"","sources":["../../src/lib/startup-env.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,WAAW,GAAiD,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=startup-xdg.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"startup-xdg.d.ts","sourceRoot":"","sources":["../../src/lib/startup-xdg.ts"],"names":[],"mappings":""}
@@ -0,0 +1,9 @@
1
+ import { dropRelativeXdg } from './xdg.js';
2
+ /*
3
+ * Imported second by index.ts, right after the startup-env snapshot and before any module that
4
+ * computes a directory (`conf`, env-paths, local-mode): a relative XDG_* is invalid per the XDG
5
+ * spec, and in the MCP child of an agent that loads a repo `.env` it would point align's config,
6
+ * cache and local.db into that repo.
7
+ */
8
+ dropRelativeXdg(process.env);
9
+ //# sourceMappingURL=startup-xdg.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"startup-xdg.js","sourceRoot":"","sources":["../../src/lib/startup-xdg.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C;;;;;GAKG;AACH,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function afterSourceConnected(dbPath: string | undefined, source: string, isConnected: (id: string) => boolean): void;
2
+ //# sourceMappingURL=after-connect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"after-connect.d.ts","sourceRoot":"","sources":["../../../src/lib/sync/after-connect.ts"],"names":[],"mappings":"AASA,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,GAAG,IAAI,CAM3H"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * L5: a fresh token was saved for a source (a foreground `align connect`/`setup` that read it
3
+ * successfully). The source is no longer waiting on the person, and the launch summary now lists
4
+ * it. Best effort and silent: a connect must never fail because a cache could not be written.
5
+ */
6
+ import fs from 'node:fs';
7
+ import { clearNeedsReauth } from './sync-state.js';
8
+ import { refreshSummary } from './summary.js';
9
+ export function afterSourceConnected(dbPath, source, isConnected) {
10
+ if (dbPath === undefined || !fs.existsSync(dbPath))
11
+ return;
12
+ try {
13
+ clearNeedsReauth(dbPath, source);
14
+ refreshSummary(dbPath, isConnected);
15
+ }
16
+ catch { /* the next sync rebuilds both */ }
17
+ }
18
+ //# sourceMappingURL=after-connect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"after-connect.js","sourceRoot":"","sources":["../../../src/lib/sync/after-connect.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,UAAU,oBAAoB,CAAC,MAA0B,EAAE,MAAc,EAAE,WAAoC;IACnH,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO;IAC3D,IAAI,CAAC;QACH,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjC,cAAc,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC,CAAC,iCAAiC,CAAC,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,14 @@
1
+ export declare const claimFile: (dir: string, source: string, bucket: number) => string;
2
+ /** Is a claim for this source in force (this bucket's or the previous one's)? Reads only. */
3
+ export declare function claimInForce(dir: string, source: string, now: number, intervalMs: number): boolean;
4
+ export type ClaimResult = {
5
+ ok: true;
6
+ } | {
7
+ ok: false;
8
+ why: 'held' | 'unwritable';
9
+ };
10
+ export declare function takeClaim(dir: string, source: string, now: number, intervalMs: number): ClaimResult;
11
+ export declare function releaseClaim(dir: string, source: string, now: number, intervalMs: number): void;
12
+ /** Why a background refresh cannot record its claim for this source (a directory or other object in the way, or an unwritable state directory), or undefined. For `align sync --status`. */
13
+ export declare function claimProblem(dir: string, source: string, now: number, intervalMs: number): string | undefined;
14
+ //# sourceMappingURL=bg-claim.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bg-claim.d.ts","sourceRoot":"","sources":["../../../src/lib/sync/bg-claim.ts"],"names":[],"mappings":"AAoBA,eAAO,MAAM,SAAS,GAAI,KAAK,MAAM,EAAE,QAAQ,MAAM,EAAE,QAAQ,MAAM,KAAG,MAAuD,CAAC;AAehI,6FAA6F;AAC7F,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAGlG;AAED,MAAM,MAAM,WAAW,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CAAA;CAAE,CAAC;AAEnF,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,WAAW,CAmBnG;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAE/F;AAYD,4LAA4L;AAC5L,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAW7G"}