@aligndottech/cli 0.49.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 (622) hide show
  1. package/README.md +4 -3
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +26 -8
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/agents.d.ts.map +1 -1
  6. package/dist/commands/agents.js +4 -1
  7. package/dist/commands/agents.js.map +1 -1
  8. package/dist/commands/check.d.ts.map +1 -1
  9. package/dist/commands/check.js +18 -2
  10. package/dist/commands/check.js.map +1 -1
  11. package/dist/commands/connect.d.ts +5 -0
  12. package/dist/commands/connect.d.ts.map +1 -1
  13. package/dist/commands/connect.js +24 -0
  14. package/dist/commands/connect.js.map +1 -1
  15. package/dist/commands/import/confluence.d.ts.map +1 -1
  16. package/dist/commands/import/confluence.js +24 -5
  17. package/dist/commands/import/confluence.js.map +1 -1
  18. package/dist/commands/import/docs.js +2 -2
  19. package/dist/commands/import/git.d.ts.map +1 -1
  20. package/dist/commands/import/git.js +15 -5
  21. package/dist/commands/import/git.js.map +1 -1
  22. package/dist/commands/import/github.d.ts.map +1 -1
  23. package/dist/commands/import/github.js +34 -7
  24. package/dist/commands/import/github.js.map +1 -1
  25. package/dist/commands/import/gitlab.d.ts.map +1 -1
  26. package/dist/commands/import/gitlab.js +10 -5
  27. package/dist/commands/import/gitlab.js.map +1 -1
  28. package/dist/commands/import/jira.d.ts.map +1 -1
  29. package/dist/commands/import/jira.js +10 -5
  30. package/dist/commands/import/jira.js.map +1 -1
  31. package/dist/commands/import/linear.d.ts.map +1 -1
  32. package/dist/commands/import/linear.js +10 -5
  33. package/dist/commands/import/linear.js.map +1 -1
  34. package/dist/commands/import/notion.d.ts.map +1 -1
  35. package/dist/commands/import/notion.js +10 -5
  36. package/dist/commands/import/notion.js.map +1 -1
  37. package/dist/commands/import/sessions.js +2 -2
  38. package/dist/commands/import/slack.d.ts.map +1 -1
  39. package/dist/commands/import/slack.js +12 -7
  40. package/dist/commands/import/slack.js.map +1 -1
  41. package/dist/commands/import/teams.d.ts.map +1 -1
  42. package/dist/commands/import/teams.js +10 -5
  43. package/dist/commands/import/teams.js.map +1 -1
  44. package/dist/commands/import/zoom.d.ts.map +1 -1
  45. package/dist/commands/import/zoom.js +10 -5
  46. package/dist/commands/import/zoom.js.map +1 -1
  47. package/dist/commands/import.d.ts.map +1 -1
  48. package/dist/commands/import.js +43 -1
  49. package/dist/commands/import.js.map +1 -1
  50. package/dist/commands/local.d.ts.map +1 -1
  51. package/dist/commands/local.js +76 -4
  52. package/dist/commands/local.js.map +1 -1
  53. package/dist/commands/mark.d.ts +37 -0
  54. package/dist/commands/mark.d.ts.map +1 -0
  55. package/dist/commands/mark.js +105 -0
  56. package/dist/commands/mark.js.map +1 -0
  57. package/dist/commands/mcp.d.ts +141 -2
  58. package/dist/commands/mcp.d.ts.map +1 -1
  59. package/dist/commands/mcp.js +72 -14
  60. package/dist/commands/mcp.js.map +1 -1
  61. package/dist/commands/registry.d.ts.map +1 -1
  62. package/dist/commands/registry.js +8 -2
  63. package/dist/commands/registry.js.map +1 -1
  64. package/dist/commands/setup.d.ts +39 -0
  65. package/dist/commands/setup.d.ts.map +1 -1
  66. package/dist/commands/setup.js +65 -50
  67. package/dist/commands/setup.js.map +1 -1
  68. package/dist/commands/share.d.ts +7 -0
  69. package/dist/commands/share.d.ts.map +1 -0
  70. package/dist/commands/share.js +60 -0
  71. package/dist/commands/share.js.map +1 -0
  72. package/dist/commands/sync.d.ts +55 -0
  73. package/dist/commands/sync.d.ts.map +1 -0
  74. package/dist/commands/sync.js +278 -0
  75. package/dist/commands/sync.js.map +1 -0
  76. package/dist/commands/telemetry.d.ts +3 -3
  77. package/dist/commands/telemetry.js +6 -6
  78. package/dist/commands/telemetry.js.map +1 -1
  79. package/dist/commands/why.d.ts.map +1 -1
  80. package/dist/commands/why.js +6 -1
  81. package/dist/commands/why.js.map +1 -1
  82. package/dist/index.d.ts +2 -0
  83. package/dist/index.d.ts.map +1 -1
  84. package/dist/index.js +2 -0
  85. package/dist/index.js.map +1 -1
  86. package/dist/lib/backfill-state.d.ts +116 -0
  87. package/dist/lib/backfill-state.d.ts.map +1 -0
  88. package/dist/lib/backfill-state.js +342 -0
  89. package/dist/lib/backfill-state.js.map +1 -0
  90. package/dist/lib/backup-copy.d.ts +17 -0
  91. package/dist/lib/backup-copy.d.ts.map +1 -0
  92. package/dist/lib/backup-copy.js +13 -0
  93. package/dist/lib/backup-copy.js.map +1 -0
  94. package/dist/lib/capture-report.d.ts +22 -18
  95. package/dist/lib/capture-report.d.ts.map +1 -1
  96. package/dist/lib/capture-report.js +64 -2
  97. package/dist/lib/capture-report.js.map +1 -1
  98. package/dist/lib/config.d.ts +31 -0
  99. package/dist/lib/config.d.ts.map +1 -1
  100. package/dist/lib/config.js +139 -0
  101. package/dist/lib/config.js.map +1 -1
  102. package/dist/lib/confirm-timeout.d.ts +8 -0
  103. package/dist/lib/confirm-timeout.d.ts.map +1 -0
  104. package/dist/lib/confirm-timeout.js +18 -0
  105. package/dist/lib/confirm-timeout.js.map +1 -0
  106. package/dist/lib/curation/check-marks.d.ts +48 -0
  107. package/dist/lib/curation/check-marks.d.ts.map +1 -0
  108. package/dist/lib/curation/check-marks.js +81 -0
  109. package/dist/lib/curation/check-marks.js.map +1 -0
  110. package/dist/lib/curation/guardrail.d.ts +39 -0
  111. package/dist/lib/curation/guardrail.d.ts.map +1 -0
  112. package/dist/lib/curation/guardrail.js +93 -0
  113. package/dist/lib/curation/guardrail.js.map +1 -0
  114. package/dist/lib/curation/judge.d.ts +3 -0
  115. package/dist/lib/curation/judge.d.ts.map +1 -0
  116. package/dist/lib/curation/judge.js +9 -0
  117. package/dist/lib/curation/judge.js.map +1 -0
  118. package/dist/lib/curation/judgements-db.d.ts +96 -0
  119. package/dist/lib/curation/judgements-db.d.ts.map +1 -0
  120. package/dist/lib/curation/judgements-db.js +200 -0
  121. package/dist/lib/curation/judgements-db.js.map +1 -0
  122. package/dist/lib/curation/last-check.d.ts +32 -0
  123. package/dist/lib/curation/last-check.d.ts.map +1 -0
  124. package/dist/lib/curation/last-check.js +81 -0
  125. package/dist/lib/curation/last-check.js.map +1 -0
  126. package/dist/lib/curation/mark.d.ts +76 -0
  127. package/dist/lib/curation/mark.d.ts.map +1 -0
  128. package/dist/lib/curation/mark.js +359 -0
  129. package/dist/lib/curation/mark.js.map +1 -0
  130. package/dist/lib/curation/text.d.ts +6 -0
  131. package/dist/lib/curation/text.d.ts.map +1 -0
  132. package/dist/lib/curation/text.js +35 -0
  133. package/dist/lib/curation/text.js.map +1 -0
  134. package/dist/lib/fetchers/capture.d.ts +49 -2
  135. package/dist/lib/fetchers/capture.d.ts.map +1 -1
  136. package/dist/lib/fetchers/capture.js +7 -1
  137. package/dist/lib/fetchers/capture.js.map +1 -1
  138. package/dist/lib/fetchers/confluence.d.ts +2 -2
  139. package/dist/lib/fetchers/confluence.d.ts.map +1 -1
  140. package/dist/lib/fetchers/confluence.js.map +1 -1
  141. package/dist/lib/fetchers/git.d.ts +1 -0
  142. package/dist/lib/fetchers/git.d.ts.map +1 -1
  143. package/dist/lib/fetchers/git.js +3 -1
  144. package/dist/lib/fetchers/git.js.map +1 -1
  145. package/dist/lib/fetchers/github.d.ts +44 -5
  146. package/dist/lib/fetchers/github.d.ts.map +1 -1
  147. package/dist/lib/fetchers/github.js +122 -5
  148. package/dist/lib/fetchers/github.js.map +1 -1
  149. package/dist/lib/fetchers/gitlab.d.ts +2 -2
  150. package/dist/lib/fetchers/gitlab.d.ts.map +1 -1
  151. package/dist/lib/fetchers/gitlab.js.map +1 -1
  152. package/dist/lib/fetchers/jira.d.ts +2 -2
  153. package/dist/lib/fetchers/jira.d.ts.map +1 -1
  154. package/dist/lib/fetchers/jira.js.map +1 -1
  155. package/dist/lib/fetchers/linear.d.ts +2 -2
  156. package/dist/lib/fetchers/linear.d.ts.map +1 -1
  157. package/dist/lib/fetchers/linear.js.map +1 -1
  158. package/dist/lib/fetchers/notion.d.ts +2 -2
  159. package/dist/lib/fetchers/notion.d.ts.map +1 -1
  160. package/dist/lib/fetchers/notion.js.map +1 -1
  161. package/dist/lib/fetchers/slack.d.ts +2 -3
  162. package/dist/lib/fetchers/slack.d.ts.map +1 -1
  163. package/dist/lib/fetchers/slack.js.map +1 -1
  164. package/dist/lib/fetchers/teams.d.ts +2 -2
  165. package/dist/lib/fetchers/teams.d.ts.map +1 -1
  166. package/dist/lib/fetchers/teams.js.map +1 -1
  167. package/dist/lib/fetchers/zoom.d.ts +2 -2
  168. package/dist/lib/fetchers/zoom.d.ts.map +1 -1
  169. package/dist/lib/fetchers/zoom.js.map +1 -1
  170. package/dist/lib/gateway-client.d.ts +34 -0
  171. package/dist/lib/gateway-client.d.ts.map +1 -1
  172. package/dist/lib/gateway-client.js +19 -1
  173. package/dist/lib/gateway-client.js.map +1 -1
  174. package/dist/lib/github-text.d.ts +3 -0
  175. package/dist/lib/github-text.d.ts.map +1 -0
  176. package/dist/lib/github-text.js +18 -0
  177. package/dist/lib/github-text.js.map +1 -0
  178. package/dist/lib/hook-context.d.ts +10 -0
  179. package/dist/lib/hook-context.d.ts.map +1 -1
  180. package/dist/lib/hook-context.js +14 -0
  181. package/dist/lib/hook-context.js.map +1 -1
  182. package/dist/lib/import-defaults.d.ts +39 -23
  183. package/dist/lib/import-defaults.d.ts.map +1 -1
  184. package/dist/lib/import-defaults.js +28 -26
  185. package/dist/lib/import-defaults.js.map +1 -1
  186. package/dist/lib/launch/adapters/aider.d.ts +17 -0
  187. package/dist/lib/launch/adapters/aider.d.ts.map +1 -0
  188. package/dist/lib/launch/adapters/aider.js +30 -0
  189. package/dist/lib/launch/adapters/aider.js.map +1 -0
  190. package/dist/lib/launch/adapters/auggie.d.ts +18 -0
  191. package/dist/lib/launch/adapters/auggie.d.ts.map +1 -0
  192. package/dist/lib/launch/adapters/auggie.js +34 -0
  193. package/dist/lib/launch/adapters/auggie.js.map +1 -0
  194. package/dist/lib/launch/adapters/cline.d.ts +10 -0
  195. package/dist/lib/launch/adapters/cline.d.ts.map +1 -0
  196. package/dist/lib/launch/adapters/cline.js +41 -0
  197. package/dist/lib/launch/adapters/cline.js.map +1 -0
  198. package/dist/lib/launch/adapters/continue.d.ts +22 -0
  199. package/dist/lib/launch/adapters/continue.d.ts.map +1 -0
  200. package/dist/lib/launch/adapters/continue.js +46 -0
  201. package/dist/lib/launch/adapters/continue.js.map +1 -0
  202. package/dist/lib/launch/adapters/gemini-cli.d.ts +13 -14
  203. package/dist/lib/launch/adapters/gemini-cli.d.ts.map +1 -1
  204. package/dist/lib/launch/adapters/gemini-cli.js +38 -53
  205. package/dist/lib/launch/adapters/gemini-cli.js.map +1 -1
  206. package/dist/lib/launch/adapters/goose.d.ts +20 -0
  207. package/dist/lib/launch/adapters/goose.d.ts.map +1 -0
  208. package/dist/lib/launch/adapters/goose.js +47 -0
  209. package/dist/lib/launch/adapters/goose.js.map +1 -0
  210. package/dist/lib/launch/adapters/notes.d.ts +7 -0
  211. package/dist/lib/launch/adapters/notes.d.ts.map +1 -0
  212. package/dist/lib/launch/adapters/notes.js +5 -0
  213. package/dist/lib/launch/adapters/notes.js.map +1 -0
  214. package/dist/lib/launch/agents.d.ts +2 -0
  215. package/dist/lib/launch/agents.d.ts.map +1 -1
  216. package/dist/lib/launch/agents.js +3 -1
  217. package/dist/lib/launch/agents.js.map +1 -1
  218. package/dist/lib/launch/auggie-state.d.ts +25 -0
  219. package/dist/lib/launch/auggie-state.d.ts.map +1 -0
  220. package/dist/lib/launch/auggie-state.js +74 -0
  221. package/dist/lib/launch/auggie-state.js.map +1 -0
  222. package/dist/lib/launch/cline-state.d.ts +32 -0
  223. package/dist/lib/launch/cline-state.d.ts.map +1 -0
  224. package/dist/lib/launch/cline-state.js +108 -0
  225. package/dist/lib/launch/cline-state.js.map +1 -0
  226. package/dist/lib/launch/config-writes.d.ts +4 -0
  227. package/dist/lib/launch/config-writes.d.ts.map +1 -1
  228. package/dist/lib/launch/config-writes.js +8 -3
  229. package/dist/lib/launch/config-writes.js.map +1 -1
  230. package/dist/lib/launch/continue-state.d.ts +41 -0
  231. package/dist/lib/launch/continue-state.d.ts.map +1 -0
  232. package/dist/lib/launch/continue-state.js +142 -0
  233. package/dist/lib/launch/continue-state.js.map +1 -0
  234. package/dist/lib/launch/detect.d.ts.map +1 -1
  235. package/dist/lib/launch/detect.js +3 -1
  236. package/dist/lib/launch/detect.js.map +1 -1
  237. package/dist/lib/launch/gemini-state.d.ts +26 -20
  238. package/dist/lib/launch/gemini-state.d.ts.map +1 -1
  239. package/dist/lib/launch/gemini-state.js +95 -37
  240. package/dist/lib/launch/gemini-state.js.map +1 -1
  241. package/dist/lib/launch/gemini-system-file.d.ts +17 -0
  242. package/dist/lib/launch/gemini-system-file.d.ts.map +1 -0
  243. package/dist/lib/launch/gemini-system-file.js +55 -0
  244. package/dist/lib/launch/gemini-system-file.js.map +1 -0
  245. package/dist/lib/launch/gemini-trust.d.ts +3 -1
  246. package/dist/lib/launch/gemini-trust.d.ts.map +1 -1
  247. package/dist/lib/launch/gemini-trust.js +10 -3
  248. package/dist/lib/launch/gemini-trust.js.map +1 -1
  249. package/dist/lib/launch/goose-state.d.ts +53 -0
  250. package/dist/lib/launch/goose-state.d.ts.map +1 -0
  251. package/dist/lib/launch/goose-state.js +137 -0
  252. package/dist/lib/launch/goose-state.js.map +1 -0
  253. package/dist/lib/launch/launch-files.d.ts.map +1 -1
  254. package/dist/lib/launch/launch-files.js +3 -2
  255. package/dist/lib/launch/launch-files.js.map +1 -1
  256. package/dist/lib/launch/launch.d.ts +17 -2
  257. package/dist/lib/launch/launch.d.ts.map +1 -1
  258. package/dist/lib/launch/launch.js +36 -3
  259. package/dist/lib/launch/launch.js.map +1 -1
  260. package/dist/lib/launch/mcp-child-env.d.ts +30 -0
  261. package/dist/lib/launch/mcp-child-env.d.ts.map +1 -0
  262. package/dist/lib/launch/mcp-child-env.js +151 -0
  263. package/dist/lib/launch/mcp-child-env.js.map +1 -0
  264. package/dist/lib/launch/pick-agent.d.ts.map +1 -1
  265. package/dist/lib/launch/pick-agent.js +4 -4
  266. package/dist/lib/launch/pick-agent.js.map +1 -1
  267. package/dist/lib/launch/picker-options.d.ts.map +1 -1
  268. package/dist/lib/launch/picker-options.js +7 -2
  269. package/dist/lib/launch/picker-options.js.map +1 -1
  270. package/dist/lib/launch/registry/agents/aider.d.ts +3 -0
  271. package/dist/lib/launch/registry/agents/aider.d.ts.map +1 -0
  272. package/dist/lib/launch/registry/agents/aider.js +13 -0
  273. package/dist/lib/launch/registry/agents/aider.js.map +1 -0
  274. package/dist/lib/launch/registry/agents/auggie.d.ts +3 -0
  275. package/dist/lib/launch/registry/agents/auggie.d.ts.map +1 -0
  276. package/dist/lib/launch/registry/agents/auggie.js +11 -0
  277. package/dist/lib/launch/registry/agents/auggie.js.map +1 -0
  278. package/dist/lib/launch/registry/agents/cline.d.ts +3 -0
  279. package/dist/lib/launch/registry/agents/cline.d.ts.map +1 -0
  280. package/dist/lib/launch/registry/agents/cline.js +19 -0
  281. package/dist/lib/launch/registry/agents/cline.js.map +1 -0
  282. package/dist/lib/launch/registry/agents/continue.d.ts +3 -0
  283. package/dist/lib/launch/registry/agents/continue.d.ts.map +1 -0
  284. package/dist/lib/launch/registry/agents/continue.js +20 -0
  285. package/dist/lib/launch/registry/agents/continue.js.map +1 -0
  286. package/dist/lib/launch/registry/agents/gemini-cli.js +2 -2
  287. package/dist/lib/launch/registry/agents/gemini-cli.js.map +1 -1
  288. package/dist/lib/launch/registry/agents/goose.d.ts +3 -0
  289. package/dist/lib/launch/registry/agents/goose.d.ts.map +1 -0
  290. package/dist/lib/launch/registry/agents/goose.js +20 -0
  291. package/dist/lib/launch/registry/agents/goose.js.map +1 -0
  292. package/dist/lib/launch/registry/index.d.ts +1 -1
  293. package/dist/lib/launch/registry/index.d.ts.map +1 -1
  294. package/dist/lib/launch/registry/index.js +7 -2
  295. package/dist/lib/launch/registry/index.js.map +1 -1
  296. package/dist/lib/launch/registry/types.d.ts +12 -1
  297. package/dist/lib/launch/registry/types.d.ts.map +1 -1
  298. package/dist/lib/launch/strict-entry.d.ts +22 -2
  299. package/dist/lib/launch/strict-entry.d.ts.map +1 -1
  300. package/dist/lib/launch/strict-entry.js +80 -2
  301. package/dist/lib/launch/strict-entry.js.map +1 -1
  302. package/dist/lib/launch/yaml-scan.d.ts +59 -0
  303. package/dist/lib/launch/yaml-scan.d.ts.map +1 -0
  304. package/dist/lib/launch/yaml-scan.js +275 -0
  305. package/dist/lib/launch/yaml-scan.js.map +1 -0
  306. package/dist/lib/local-db-epoch.d.ts +4 -0
  307. package/dist/lib/local-db-epoch.d.ts.map +1 -0
  308. package/dist/lib/local-db-epoch.js +19 -0
  309. package/dist/lib/local-db-epoch.js.map +1 -0
  310. package/dist/lib/local-db-migrate.d.ts +85 -0
  311. package/dist/lib/local-db-migrate.d.ts.map +1 -0
  312. package/dist/lib/local-db-migrate.js +484 -0
  313. package/dist/lib/local-db-migrate.js.map +1 -0
  314. package/dist/lib/local-db-v10.d.ts +28 -0
  315. package/dist/lib/local-db-v10.d.ts.map +1 -0
  316. package/dist/lib/local-db-v10.js +49 -0
  317. package/dist/lib/local-db-v10.js.map +1 -0
  318. package/dist/lib/local-db-v11.d.ts +24 -0
  319. package/dist/lib/local-db-v11.d.ts.map +1 -0
  320. package/dist/lib/local-db-v11.js +25 -0
  321. package/dist/lib/local-db-v11.js.map +1 -0
  322. package/dist/lib/local-db-v7.d.ts +30 -0
  323. package/dist/lib/local-db-v7.d.ts.map +1 -0
  324. package/dist/lib/local-db-v7.js +285 -0
  325. package/dist/lib/local-db-v7.js.map +1 -0
  326. package/dist/lib/local-db-v8.d.ts +22 -0
  327. package/dist/lib/local-db-v8.d.ts.map +1 -0
  328. package/dist/lib/local-db-v8.js +33 -0
  329. package/dist/lib/local-db-v8.js.map +1 -0
  330. package/dist/lib/local-db-v9.d.ts +10 -0
  331. package/dist/lib/local-db-v9.d.ts.map +1 -0
  332. package/dist/lib/local-db-v9.js +8 -0
  333. package/dist/lib/local-db-v9.js.map +1 -0
  334. package/dist/lib/local-db.d.ts +61 -11
  335. package/dist/lib/local-db.d.ts.map +1 -1
  336. package/dist/lib/local-db.js +186 -371
  337. package/dist/lib/local-db.js.map +1 -1
  338. package/dist/lib/local-embeddings.d.ts.map +1 -1
  339. package/dist/lib/local-embeddings.js +2 -2
  340. package/dist/lib/local-embeddings.js.map +1 -1
  341. package/dist/lib/local-gateway-client.d.ts +30 -87
  342. package/dist/lib/local-gateway-client.d.ts.map +1 -1
  343. package/dist/lib/local-gateway-client.js +182 -171
  344. package/dist/lib/local-gateway-client.js.map +1 -1
  345. package/dist/lib/local-ingest.d.ts +129 -0
  346. package/dist/lib/local-ingest.d.ts.map +1 -0
  347. package/dist/lib/local-ingest.js +81 -0
  348. package/dist/lib/local-ingest.js.map +1 -0
  349. package/dist/lib/local-link-pass.d.ts +15 -0
  350. package/dist/lib/local-link-pass.d.ts.map +1 -0
  351. package/dist/lib/local-link-pass.js +61 -0
  352. package/dist/lib/local-link-pass.js.map +1 -0
  353. package/dist/lib/local-mode.d.ts +4 -1
  354. package/dist/lib/local-mode.d.ts.map +1 -1
  355. package/dist/lib/local-mode.js +16 -1
  356. package/dist/lib/local-mode.js.map +1 -1
  357. package/dist/lib/local-provenance.d.ts +14 -0
  358. package/dist/lib/local-provenance.d.ts.map +1 -0
  359. package/dist/lib/local-provenance.js +14 -0
  360. package/dist/lib/local-provenance.js.map +1 -0
  361. package/dist/lib/local-thresholds.d.ts +70 -0
  362. package/dist/lib/local-thresholds.d.ts.map +1 -0
  363. package/dist/lib/local-thresholds.js +79 -0
  364. package/dist/lib/local-thresholds.js.map +1 -0
  365. package/dist/lib/mcp/mark-tool.d.ts +27 -0
  366. package/dist/lib/mcp/mark-tool.d.ts.map +1 -0
  367. package/dist/lib/mcp/mark-tool.js +103 -0
  368. package/dist/lib/mcp/mark-tool.js.map +1 -0
  369. package/dist/lib/mcp/share-tool.d.ts +46 -0
  370. package/dist/lib/mcp/share-tool.d.ts.map +1 -0
  371. package/dist/lib/mcp/share-tool.js +68 -0
  372. package/dist/lib/mcp/share-tool.js.map +1 -0
  373. package/dist/lib/mcp/tool-rules.d.ts +30 -0
  374. package/dist/lib/mcp/tool-rules.d.ts.map +1 -0
  375. package/dist/lib/mcp/tool-rules.js +84 -0
  376. package/dist/lib/mcp/tool-rules.js.map +1 -0
  377. package/dist/lib/mcp-backfill.d.ts +89 -0
  378. package/dist/lib/mcp-backfill.d.ts.map +1 -0
  379. package/dist/lib/mcp-backfill.js +194 -0
  380. package/dist/lib/mcp-backfill.js.map +1 -0
  381. package/dist/lib/mcp-scope.d.ts +90 -0
  382. package/dist/lib/mcp-scope.d.ts.map +1 -0
  383. package/dist/lib/mcp-scope.js +125 -0
  384. package/dist/lib/mcp-scope.js.map +1 -0
  385. package/dist/lib/mcp-sync.d.ts +64 -0
  386. package/dist/lib/mcp-sync.d.ts.map +1 -0
  387. package/dist/lib/mcp-sync.js +183 -0
  388. package/dist/lib/mcp-sync.js.map +1 -0
  389. package/dist/lib/personal-import.d.ts +7 -0
  390. package/dist/lib/personal-import.d.ts.map +1 -1
  391. package/dist/lib/personal-import.js +13 -1
  392. package/dist/lib/personal-import.js.map +1 -1
  393. package/dist/lib/safe-config-write.d.ts.map +1 -1
  394. package/dist/lib/safe-config-write.js +39 -2
  395. package/dist/lib/safe-config-write.js.map +1 -1
  396. package/dist/lib/scope-choices.d.ts +51 -0
  397. package/dist/lib/scope-choices.d.ts.map +1 -0
  398. package/dist/lib/scope-choices.js +193 -0
  399. package/dist/lib/scope-choices.js.map +1 -0
  400. package/dist/lib/scope-connect.d.ts +82 -0
  401. package/dist/lib/scope-connect.d.ts.map +1 -0
  402. package/dist/lib/scope-connect.js +258 -0
  403. package/dist/lib/scope-connect.js.map +1 -0
  404. package/dist/lib/scope-defaults.d.ts +3 -0
  405. package/dist/lib/scope-defaults.d.ts.map +1 -0
  406. package/dist/lib/scope-defaults.js +42 -0
  407. package/dist/lib/scope-defaults.js.map +1 -0
  408. package/dist/lib/scope-real.d.ts +223 -0
  409. package/dist/lib/scope-real.d.ts.map +1 -0
  410. package/dist/lib/scope-real.js +58 -0
  411. package/dist/lib/scope-real.js.map +1 -0
  412. package/dist/lib/scope-values.d.ts +76 -0
  413. package/dist/lib/scope-values.d.ts.map +1 -0
  414. package/dist/lib/scope-values.js +169 -0
  415. package/dist/lib/scope-values.js.map +1 -0
  416. package/dist/lib/scope.d.ts +161 -0
  417. package/dist/lib/scope.d.ts.map +1 -0
  418. package/dist/lib/scope.js +323 -0
  419. package/dist/lib/scope.js.map +1 -0
  420. package/dist/lib/share/command.d.ts +32 -0
  421. package/dist/lib/share/command.d.ts.map +1 -0
  422. package/dist/lib/share/command.js +136 -0
  423. package/dist/lib/share/command.js.map +1 -0
  424. package/dist/lib/share/ledger.d.ts +59 -0
  425. package/dist/lib/share/ledger.d.ts.map +1 -0
  426. package/dist/lib/share/ledger.js +135 -0
  427. package/dist/lib/share/ledger.js.map +1 -0
  428. package/dist/lib/share/payload.d.ts +92 -0
  429. package/dist/lib/share/payload.d.ts.map +1 -0
  430. package/dist/lib/share/payload.js +138 -0
  431. package/dist/lib/share/payload.js.map +1 -0
  432. package/dist/lib/share/pending.d.ts +48 -0
  433. package/dist/lib/share/pending.d.ts.map +1 -0
  434. package/dist/lib/share/pending.js +130 -0
  435. package/dist/lib/share/pending.js.map +1 -0
  436. package/dist/lib/share/preview.d.ts +18 -0
  437. package/dist/lib/share/preview.d.ts.map +1 -0
  438. package/dist/lib/share/preview.js +72 -0
  439. package/dist/lib/share/preview.js.map +1 -0
  440. package/dist/lib/share/run.d.ts +115 -0
  441. package/dist/lib/share/run.d.ts.map +1 -0
  442. package/dist/lib/share/run.js +261 -0
  443. package/dist/lib/share/run.js.map +1 -0
  444. package/dist/lib/share/salt.d.ts +2 -0
  445. package/dist/lib/share/salt.d.ts.map +1 -0
  446. package/dist/lib/share/salt.js +44 -0
  447. package/dist/lib/share/salt.js.map +1 -0
  448. package/dist/lib/share/secret-patterns.json +100 -0
  449. package/dist/lib/share/secret-scan.d.ts +19 -0
  450. package/dist/lib/share/secret-scan.d.ts.map +1 -0
  451. package/dist/lib/share/secret-scan.js +75 -0
  452. package/dist/lib/share/secret-scan.js.map +1 -0
  453. package/dist/lib/share/tty.d.ts +4 -0
  454. package/dist/lib/share/tty.d.ts.map +1 -0
  455. package/dist/lib/share/tty.js +57 -0
  456. package/dist/lib/share/tty.js.map +1 -0
  457. package/dist/lib/share/visible.d.ts +4 -0
  458. package/dist/lib/share/visible.d.ts.map +1 -0
  459. package/dist/lib/share/visible.js +30 -0
  460. package/dist/lib/share/visible.js.map +1 -0
  461. package/dist/lib/share/wire.d.ts +98 -0
  462. package/dist/lib/share/wire.d.ts.map +1 -0
  463. package/dist/lib/share/wire.js +43 -0
  464. package/dist/lib/share/wire.js.map +1 -0
  465. package/dist/lib/similarity/embedding-matrix.d.ts +64 -0
  466. package/dist/lib/similarity/embedding-matrix.d.ts.map +1 -0
  467. package/dist/lib/similarity/embedding-matrix.js +119 -0
  468. package/dist/lib/similarity/embedding-matrix.js.map +1 -0
  469. package/dist/lib/since-flag.d.ts +11 -0
  470. package/dist/lib/since-flag.d.ts.map +1 -0
  471. package/dist/lib/since-flag.js +24 -0
  472. package/dist/lib/since-flag.js.map +1 -0
  473. package/dist/lib/since.d.ts +59 -0
  474. package/dist/lib/since.d.ts.map +1 -0
  475. package/dist/lib/since.js +86 -0
  476. package/dist/lib/since.js.map +1 -0
  477. package/dist/lib/source-key.d.ts +13 -0
  478. package/dist/lib/source-key.d.ts.map +1 -0
  479. package/dist/lib/source-key.js +60 -0
  480. package/dist/lib/source-key.js.map +1 -0
  481. package/dist/lib/source-sync-state.d.ts +12 -0
  482. package/dist/lib/source-sync-state.d.ts.map +1 -0
  483. package/dist/lib/source-sync-state.js +43 -0
  484. package/dist/lib/source-sync-state.js.map +1 -0
  485. package/dist/lib/startup-backfill-track.d.ts +2 -0
  486. package/dist/lib/startup-backfill-track.d.ts.map +1 -0
  487. package/dist/lib/startup-backfill-track.js +6 -0
  488. package/dist/lib/startup-backfill-track.js.map +1 -0
  489. package/dist/lib/startup-xdg.d.ts +2 -0
  490. package/dist/lib/startup-xdg.d.ts.map +1 -0
  491. package/dist/lib/startup-xdg.js +9 -0
  492. package/dist/lib/startup-xdg.js.map +1 -0
  493. package/dist/lib/sync/after-connect.d.ts +2 -0
  494. package/dist/lib/sync/after-connect.d.ts.map +1 -0
  495. package/dist/lib/sync/after-connect.js +18 -0
  496. package/dist/lib/sync/after-connect.js.map +1 -0
  497. package/dist/lib/sync/bg-claim.d.ts +14 -0
  498. package/dist/lib/sync/bg-claim.d.ts.map +1 -0
  499. package/dist/lib/sync/bg-claim.js +97 -0
  500. package/dist/lib/sync/bg-claim.js.map +1 -0
  501. package/dist/lib/sync/blocked.d.ts +8 -0
  502. package/dist/lib/sync/blocked.d.ts.map +1 -0
  503. package/dist/lib/sync/blocked.js +44 -0
  504. package/dist/lib/sync/blocked.js.map +1 -0
  505. package/dist/lib/sync/classify.d.ts +34 -0
  506. package/dist/lib/sync/classify.d.ts.map +1 -0
  507. package/dist/lib/sync/classify.js +91 -0
  508. package/dist/lib/sync/classify.js.map +1 -0
  509. package/dist/lib/sync/drain.d.ts +16 -0
  510. package/dist/lib/sync/drain.d.ts.map +1 -0
  511. package/dist/lib/sync/drain.js +33 -0
  512. package/dist/lib/sync/drain.js.map +1 -0
  513. package/dist/lib/sync/forget.d.ts +12 -0
  514. package/dist/lib/sync/forget.d.ts.map +1 -0
  515. package/dist/lib/sync/forget.js +32 -0
  516. package/dist/lib/sync/forget.js.map +1 -0
  517. package/dist/lib/sync/launch-hook.d.ts +42 -0
  518. package/dist/lib/sync/launch-hook.d.ts.map +1 -0
  519. package/dist/lib/sync/launch-hook.js +117 -0
  520. package/dist/lib/sync/launch-hook.js.map +1 -0
  521. package/dist/lib/sync/lock.d.ts +35 -0
  522. package/dist/lib/sync/lock.d.ts.map +1 -0
  523. package/dist/lib/sync/lock.js +175 -0
  524. package/dist/lib/sync/lock.js.map +1 -0
  525. package/dist/lib/sync/purge.d.ts +38 -0
  526. package/dist/lib/sync/purge.d.ts.map +1 -0
  527. package/dist/lib/sync/purge.js +61 -0
  528. package/dist/lib/sync/purge.js.map +1 -0
  529. package/dist/lib/sync/real-env.d.ts +208 -0
  530. package/dist/lib/sync/real-env.d.ts.map +1 -0
  531. package/dist/lib/sync/real-env.js +47 -0
  532. package/dist/lib/sync/real-env.js.map +1 -0
  533. package/dist/lib/sync/relink.d.ts +14 -0
  534. package/dist/lib/sync/relink.d.ts.map +1 -0
  535. package/dist/lib/sync/relink.js +36 -0
  536. package/dist/lib/sync/relink.js.map +1 -0
  537. package/dist/lib/sync/report.d.ts +3 -0
  538. package/dist/lib/sync/report.d.ts.map +1 -0
  539. package/dist/lib/sync/report.js +54 -0
  540. package/dist/lib/sync/report.js.map +1 -0
  541. package/dist/lib/sync/run-all.d.ts +23 -0
  542. package/dist/lib/sync/run-all.d.ts.map +1 -0
  543. package/dist/lib/sync/run-all.js +30 -0
  544. package/dist/lib/sync/run-all.js.map +1 -0
  545. package/dist/lib/sync/run-source.d.ts +73 -0
  546. package/dist/lib/sync/run-source.d.ts.map +1 -0
  547. package/dist/lib/sync/run-source.js +262 -0
  548. package/dist/lib/sync/run-source.js.map +1 -0
  549. package/dist/lib/sync/safe-read.d.ts +4 -0
  550. package/dist/lib/sync/safe-read.d.ts.map +1 -0
  551. package/dist/lib/sync/safe-read.js +40 -0
  552. package/dist/lib/sync/safe-read.js.map +1 -0
  553. package/dist/lib/sync/should-background-sync.d.ts +31 -0
  554. package/dist/lib/sync/should-background-sync.d.ts.map +1 -0
  555. package/dist/lib/sync/should-background-sync.js +69 -0
  556. package/dist/lib/sync/should-background-sync.js.map +1 -0
  557. package/dist/lib/sync/source-ids.d.ts +10 -0
  558. package/dist/lib/sync/source-ids.d.ts.map +1 -0
  559. package/dist/lib/sync/source-ids.js +9 -0
  560. package/dist/lib/sync/source-ids.js.map +1 -0
  561. package/dist/lib/sync/sources.d.ts +33 -0
  562. package/dist/lib/sync/sources.d.ts.map +1 -0
  563. package/dist/lib/sync/sources.js +37 -0
  564. package/dist/lib/sync/sources.js.map +1 -0
  565. package/dist/lib/sync/spawn-background.d.ts +27 -0
  566. package/dist/lib/sync/spawn-background.d.ts.map +1 -0
  567. package/dist/lib/sync/spawn-background.js +66 -0
  568. package/dist/lib/sync/spawn-background.js.map +1 -0
  569. package/dist/lib/sync/status.d.ts +57 -0
  570. package/dist/lib/sync/status.d.ts.map +1 -0
  571. package/dist/lib/sync/status.js +166 -0
  572. package/dist/lib/sync/status.js.map +1 -0
  573. package/dist/lib/sync/summary-read.d.ts +19 -0
  574. package/dist/lib/sync/summary-read.d.ts.map +1 -0
  575. package/dist/lib/sync/summary-read.js +39 -0
  576. package/dist/lib/sync/summary-read.js.map +1 -0
  577. package/dist/lib/sync/summary.d.ts +10 -0
  578. package/dist/lib/sync/summary.d.ts.map +1 -0
  579. package/dist/lib/sync/summary.js +80 -0
  580. package/dist/lib/sync/summary.js.map +1 -0
  581. package/dist/lib/sync/sync-state.d.ts +128 -0
  582. package/dist/lib/sync/sync-state.d.ts.map +1 -0
  583. package/dist/lib/sync/sync-state.js +253 -0
  584. package/dist/lib/sync/sync-state.js.map +1 -0
  585. package/dist/lib/sync/telemetry.d.ts +20 -0
  586. package/dist/lib/sync/telemetry.d.ts.map +1 -0
  587. package/dist/lib/sync/telemetry.js +31 -0
  588. package/dist/lib/sync/telemetry.js.map +1 -0
  589. package/dist/lib/sync/threads.d.ts +48 -0
  590. package/dist/lib/sync/threads.d.ts.map +1 -0
  591. package/dist/lib/sync/threads.js +82 -0
  592. package/dist/lib/sync/threads.js.map +1 -0
  593. package/dist/lib/sync/window.d.ts +72 -0
  594. package/dist/lib/sync/window.d.ts.map +1 -0
  595. package/dist/lib/sync/window.js +112 -0
  596. package/dist/lib/sync/window.js.map +1 -0
  597. package/dist/lib/team-cta.d.ts +11 -0
  598. package/dist/lib/team-cta.d.ts.map +1 -0
  599. package/dist/lib/team-cta.js +16 -0
  600. package/dist/lib/team-cta.js.map +1 -0
  601. package/dist/lib/telemetry-ci.d.ts +2 -0
  602. package/dist/lib/telemetry-ci.d.ts.map +1 -0
  603. package/dist/lib/telemetry-ci.js +21 -0
  604. package/dist/lib/telemetry-ci.js.map +1 -0
  605. package/dist/lib/telemetry-consent.d.ts +44 -23
  606. package/dist/lib/telemetry-consent.d.ts.map +1 -1
  607. package/dist/lib/telemetry-consent.js +74 -35
  608. package/dist/lib/telemetry-consent.js.map +1 -1
  609. package/dist/lib/telemetry-env.d.ts +1 -1
  610. package/dist/lib/usage-telemetry.d.ts +87 -22
  611. package/dist/lib/usage-telemetry.d.ts.map +1 -1
  612. package/dist/lib/usage-telemetry.js +263 -74
  613. package/dist/lib/usage-telemetry.js.map +1 -1
  614. package/dist/lib/xdg.d.ts +27 -0
  615. package/dist/lib/xdg.d.ts.map +1 -0
  616. package/dist/lib/xdg.js +56 -0
  617. package/dist/lib/xdg.js.map +1 -0
  618. package/package.json +3 -2
  619. package/dist/commands/push.d.ts +0 -25
  620. package/dist/commands/push.d.ts.map +0 -1
  621. package/dist/commands/push.js +0 -98
  622. package/dist/commands/push.js.map +0 -1
@@ -0,0 +1,112 @@
1
+ /**
2
+ * L5: the pure decisions of an incremental sync - which window to read next and where the
3
+ * watermark stands after a run. No database, no clock of its own, no network.
4
+ *
5
+ * The watermark is the vendor's own `updated_at` (Decision 4), taken from the SDK's report, and
6
+ * it moves only on a COMPLETE read that carried one. Anything else leaves it where it was: a
7
+ * watermark that moved past data nobody read loses that data for good, while one that stays put
8
+ * costs a re-read the unchanged-skip makes cheap.
9
+ */
10
+ import { SYNC_WINDOW_DEFAULT_DAYS } from '../import-defaults.js';
11
+ /** Each run reads from a day before the watermark, so an item edited between two runs while the
12
+ * vendor was behind on its own indexing is not missed. */
13
+ export const OVERLAP_DAYS = 1;
14
+ /** A hole that ended this many consecutive runs the same way is called persistent. */
15
+ export const PERSISTENT_HOLE_RUNS = 5;
16
+ const DAY_MS = 86_400_000;
17
+ function parse(iso) {
18
+ if (iso === null || iso === undefined)
19
+ return undefined;
20
+ const ms = Date.parse(iso);
21
+ // NaN compares false with everything, in both directions (verification.md): refuse it here.
22
+ return Number.isNaN(ms) ? undefined : ms;
23
+ }
24
+ /**
25
+ * The window a NEW scope row starts with: the one the person asked for on this source, which is the `yours` row's (L3 records
26
+ * `since: all` as NULL there, and "all" stays all). A source with no `yours` row yet starts at the default window.
27
+ * The one writer: the sync's first run on a scope and a scope change from `align connect` or `align_scope` both call it.
28
+ */
29
+ export function inheritedWindowSince(rows, now) {
30
+ const yours = rows.find((r) => r.scope_key === 'yours');
31
+ return yours ? yours.window_since : nextWindow(undefined, now).since;
32
+ }
33
+ export function minusDays(iso, days) {
34
+ const ms = parse(iso);
35
+ if (ms === undefined)
36
+ throw new Error(`Cannot read "${iso.slice(0, 40)}" as a date.`);
37
+ return new Date(ms - days * DAY_MS).toISOString();
38
+ }
39
+ /**
40
+ * What the next run asks the vendor for.
41
+ * - No row: the default window back from now (the first sync of a source).
42
+ * - A high_water: one overlap day before it. Otherwise the row's own window_since, untouched.
43
+ * - A pending_until: also an `until` there, so a run that a ceiling cut finishes the OLDER part.
44
+ * An unparseable stored stamp reads as absent, which can only widen the read.
45
+ */
46
+ export function nextWindow(s, now) {
47
+ if (s === undefined)
48
+ return { since: new Date(now.getTime() - SYNC_WINDOW_DEFAULT_DAYS * DAY_MS).toISOString() };
49
+ // A stored watermark from the future (written by an older build, or by a clock that was wrong) is
50
+ // repaired by ignoring it: the read widens to the window, and the run's own result replaces it.
51
+ const hw = plausible(s.high_water ?? undefined, now) === undefined ? undefined : s.high_water;
52
+ const floor = hw !== undefined ? minusDays(hw, OVERLAP_DAYS) : parse(s.window_since) === undefined ? undefined : s.window_since;
53
+ const until = parse(s.pending_until) === undefined ? undefined : s.pending_until;
54
+ // A hole that keeps coming back keeps the watermark where it was, so the re-read would grow every day, and a source that
55
+ // reads more each time is more likely to hit its budget again. Bound it to the default window while a hole is open.
56
+ const bound = (s.hole_streak ?? 0) > 0 ? new Date(now.getTime() - SYNC_WINDOW_DEFAULT_DAYS * DAY_MS).toISOString() : undefined;
57
+ const since = bound !== undefined && (floor === undefined || Date.parse(floor) < Date.parse(bound)) ? bound : floor;
58
+ return { ...(since !== undefined ? { since } : {}), ...(until !== undefined ? { until } : {}) };
59
+ }
60
+ export function later(a, b) {
61
+ const pa = parse(a);
62
+ const pb = parse(b);
63
+ if (pa === undefined)
64
+ return pb === undefined ? null : b;
65
+ if (pb === undefined)
66
+ return a;
67
+ return pb > pa ? b : a;
68
+ }
69
+ function earlier(a, b) {
70
+ const pa = parse(a);
71
+ const pb = parse(b);
72
+ if (pa === undefined)
73
+ return pb === undefined ? null : b;
74
+ if (pb === undefined)
75
+ return a;
76
+ return pb < pa ? b : a;
77
+ }
78
+ export function plausible(iso, now) {
79
+ const t = parse(iso);
80
+ if (t === undefined)
81
+ return undefined;
82
+ return now !== undefined && t > now.getTime() + DAY_MS ? undefined : iso;
83
+ }
84
+ export function finishRun(prev, r) {
85
+ const prevHigh = plausible(prev.high_water ?? undefined, r.now) === undefined ? null : prev.high_water;
86
+ if (r.complete) {
87
+ return { high_water: later(later(prevHigh, plausible(r.highWater, r.now)), plausible(r.cycleNewest, r.now)), pending_until: null, status: 'ok' };
88
+ }
89
+ if (r.persistent === true) {
90
+ // The other streams are read and committed; only the hole is not. Say so in the status, and move on.
91
+ return { high_water: later(later(prevHigh, plausible(r.highWater, r.now)), plausible(r.cycleNewest, r.now)), pending_until: null, status: 'partial' };
92
+ }
93
+ if (r.cut === true)
94
+ return { high_water: prevHigh, pending_until: earlier(prev.pending_until, r.oldestReached), status: 'partial' };
95
+ return { high_water: prevHigh, pending_until: null, status: 'partial' };
96
+ }
97
+ /** Oldest first. A kill after batch N then leaves every older item committed, so a watermark equal
98
+ * to the newest committed stamp never sits above an unread one. Items with no stamp lead. */
99
+ export function ascendingByUpdated(items) {
100
+ const stamp = (i) => parse(i.updated_at) ?? Number.NEGATIVE_INFINITY;
101
+ return items.map((item, index) => ({ item, index }))
102
+ .sort((a, b) => (stamp(a.item) - stamp(b.item) || a.index - b.index) || 0)
103
+ .map((e) => e.item);
104
+ }
105
+ export function newestUpdated(items, now) {
106
+ let best;
107
+ for (const i of items)
108
+ if (plausible(i.updated_at, now) !== undefined)
109
+ best = later(best, i.updated_at) ?? best;
110
+ return best;
111
+ }
112
+ //# sourceMappingURL=window.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"window.js","sourceRoot":"","sources":["../../../src/lib/sync/window.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * The one upgrade line the CLI prints, only at the share moment (a team action tried with no team
3
+ * login). One place for the booking link: the CLI links to a redirect Align owns, so routing the
4
+ * call to someone else later is a site change and needs no CLI release (plan 2026-10-09, Open
5
+ * Question 1). Flip TEAM_SIGNUP_OPEN when prod team signup opens.
6
+ */
7
+ export declare const BOOK_CALL_URL = "https://align.tech/demo?ref=cli";
8
+ export declare const TEAM_SIGNUP_URL = "https://app.align.tech/signup";
9
+ export declare const TEAM_SIGNUP_OPEN = false;
10
+ export declare function teamCtaLine(open?: boolean): string;
11
+ //# sourceMappingURL=team-cta.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"team-cta.d.ts","sourceRoot":"","sources":["../../src/lib/team-cta.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,aAAa,oCAAoC,CAAC;AAC/D,eAAO,MAAM,eAAe,kCAAkC,CAAC;AAC/D,eAAO,MAAM,gBAAgB,QAAQ,CAAC;AAEtC,wBAAgB,WAAW,CAAC,IAAI,GAAE,OAA0B,GAAG,MAAM,CAIpE"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * The one upgrade line the CLI prints, only at the share moment (a team action tried with no team
3
+ * login). One place for the booking link: the CLI links to a redirect Align owns, so routing the
4
+ * call to someone else later is a site change and needs no CLI release (plan 2026-10-09, Open
5
+ * Question 1). Flip TEAM_SIGNUP_OPEN when prod team signup opens.
6
+ */
7
+ // Confirmed by Tom 2026-10-10: align.tech/demo?ref=cli redirects to the 30-minute booking page.
8
+ export const BOOK_CALL_URL = 'https://align.tech/demo?ref=cli';
9
+ export const TEAM_SIGNUP_URL = 'https://app.align.tech/signup';
10
+ export const TEAM_SIGNUP_OPEN = false;
11
+ export function teamCtaLine(open = TEAM_SIGNUP_OPEN) {
12
+ return open
13
+ ? `Start a team graph: ${TEAM_SIGNUP_URL}`
14
+ : `Bring this to your team. Book a 30-minute call: ${BOOK_CALL_URL}`;
15
+ }
16
+ //# sourceMappingURL=team-cta.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"team-cta.js","sourceRoot":"","sources":["../../src/lib/team-cta.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,gGAAgG;AAChG,MAAM,CAAC,MAAM,aAAa,GAAG,iCAAiC,CAAC;AAC/D,MAAM,CAAC,MAAM,eAAe,GAAG,+BAA+B,CAAC;AAC/D,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAC;AAEtC,MAAM,UAAU,WAAW,CAAC,OAAgB,gBAAgB;IAC1D,OAAO,IAAI;QACT,CAAC,CAAC,uBAAuB,eAAe,EAAE;QAC1C,CAAC,CAAC,mDAAmD,aAAa,EAAE,CAAC;AACzE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function inCi(env?: Record<string, string | undefined>): boolean;
2
+ //# sourceMappingURL=telemetry-ci.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry-ci.d.ts","sourceRoot":"","sources":["../../src/lib/telemetry-ci.ts"],"names":[],"mappings":"AAiCA,wBAAgB,IAAI,CAAC,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,GAAG,OAAO,CAInF"}
@@ -0,0 +1,21 @@
1
+ import vendors from 'ci-info/vendors.json' with { type: 'json' };
2
+ /** ci-info's generic flags, in its own order: any one of them set means CI. */
3
+ const GENERIC = ['BUILD_ID', 'BUILD_NUMBER', 'CI', 'CI_APP_ID', 'CI_BUILD_ID', 'CI_BUILD_NUMBER', 'CI_NAME', 'CONTINUOUS_INTEGRATION', 'RUN_ID'];
4
+ function matches(rule, env) {
5
+ if (typeof rule === 'string')
6
+ return Boolean(env[rule]);
7
+ if ('env' in rule && typeof rule.env === 'string' && 'includes' in rule) {
8
+ return Boolean(env[rule.env]?.includes(String(rule.includes)));
9
+ }
10
+ if ('any' in rule && Array.isArray(rule.any))
11
+ return rule.any.some((k) => Boolean(env[k]));
12
+ return Object.entries(rule).every(([k, v]) => env[k] === v);
13
+ }
14
+ export function inCi(env = process.env) {
15
+ if (env['CI'] === 'false')
16
+ return false;
17
+ if (GENERIC.some((k) => Boolean(env[k])))
18
+ return true;
19
+ return vendors.some((v) => (Array.isArray(v.env) ? v.env : [v.env]).every((r) => matches(r, env)));
20
+ }
21
+ //# sourceMappingURL=telemetry-ci.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry-ci.js","sourceRoot":"","sources":["../../src/lib/telemetry-ci.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,sBAAsB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAqBjE,+EAA+E;AAC/E,MAAM,OAAO,GAAG,CAAC,UAAU,EAAE,cAAc,EAAE,IAAI,EAAE,WAAW,EAAE,aAAa,EAAE,iBAAiB,EAAE,SAAS,EAAE,wBAAwB,EAAE,QAAQ,CAAC,CAAC;AAEjJ,SAAS,OAAO,CAAC,IAAa,EAAE,GAAuC;IACrE,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IACxD,IAAI,KAAK,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,GAAG,KAAK,QAAQ,IAAI,UAAU,IAAI,IAAI,EAAE,CAAC;QACxE,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACjE,CAAC;IACD,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3F,OAAO,MAAM,CAAC,OAAO,CAAC,IAA8B,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACxF,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,MAA0C,OAAO,CAAC,GAAG;IACxE,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC;IACxC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACtD,OAAQ,OAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AACnH,CAAC"}
@@ -1,32 +1,53 @@
1
+ import type { TelemetryConsent } from './config.js';
1
2
  /**
2
3
  * Narrow interface rather than the whole config store, so this module (and its tests) does not
3
4
  * carry every unrelated accessor `createConfigStore()` exposes.
4
5
  */
5
- export interface TelemetryConsentStore {
6
- getTelemetryConsent(): 'granted' | 'declined' | 'off' | undefined;
7
- setTelemetryConsent(value: 'granted' | 'declined' | 'off'): void;
6
+ export interface TelemetryNoticeStore {
7
+ getTelemetryConsent(): TelemetryConsent | undefined;
8
+ getTelemetryNoticeShownAt(): string | undefined;
9
+ markTelemetryNoticeShown(): void;
8
10
  }
9
11
  /**
10
- * ALI-618 D3: the one-time local-mode consent prompt, shown from `runLocalSetup()`.
11
- *
12
- * Never asks twice - a decision already on disk (granted, declined, or `align telemetry off`)
13
- * is left alone. Never prompts without a TTY on both streams: a piped `setup --local` run
14
- * hangs on a prompt it cannot answer, and a closed stdin crashes clack's raw-mode init AFTER
15
- * the real setup work has already succeeded (the align-cli#118 lesson,
16
- * `setup-local-non-tty.test.ts`). A non-interactive run leaves consent UNSET rather than
17
- * implicitly declined - a scripted first run may be a CI smoke test, not a real user's choice,
18
- * and it can still be asked on a later interactive run.
19
- *
20
- * ALI-954: an env var that already turns everything off (`DO_NOT_TRACK=1`, `ALIGN_TELEMETRY=0`)
21
- * skips the question with a one-line note - asking would imply the answer matters - and
22
- * leaves the decision unset for the same reason as the non-interactive case.
23
- *
24
- * The question is about USAGE (which commands you run). The two anonymous counts the docs
25
- * describe (install, setup completed) are not what is being asked about here and send either
26
- * way; `align telemetry off` is what stops those (docs/telemetry.md).
12
+ * C6: the disclosure. Local-mode telemetry is opt-out, and this notice is what makes it so: it
13
+ * prints once, to stderr, before anything is sent, and nothing that depends on it sends until
14
+ * it has printed (usage-telemetry.ts's localTierAllows). The founder-approved wording - change
15
+ * it only with the privacy page (align.tech/privacy#cli) and docs/telemetry.md in the same PR.
16
+ */
17
+ export declare const TELEMETRY_NOTICE: string;
18
+ export interface NoticeContext {
19
+ /** The invocation's command path ("ask", "telemetry off", "align" for the bare command). */
20
+ command: string;
21
+ /** Running as an agent hook (`check --hook` / `--advisory`): nobody is reading stderr. */
22
+ hook: boolean;
23
+ /** A cloud login token is in hand: cloud mode has its own, authenticated events. */
24
+ cloudSignedIn: boolean;
25
+ }
26
+ /**
27
+ * Shows the notice and marks it shown, or does neither. Skipped, and NOT marked, wherever
28
+ * nobody is reading it or it would be moot: no terminal on stdin and stderr, CI, an agent hook, `align mcp` (an agent's stdio
29
+ * server), a run inside a launched agent (ALIGN_WRAPPED), `align telemetry ...` (the off switch
30
+ * must not be raced by what it switches off), an env switch that already turns everything off,
31
+ * and any stored decision (granted, declined or off - that user was already asked or chose).
32
+ * Because it is not marked, nothing that waits on it sends from those runs either.
27
33
  *
28
- * Default is No: anything other than an explicit yes - the default answer, or Ctrl-C - leaves
29
- * telemetry off (D3).
34
+ * Returns whether it printed. Never throws: a broken config store costs the notice, which means
35
+ * nothing sends - the safe direction.
36
+ */
37
+ export declare function maybeShowTelemetryNotice(config: TelemetryNoticeStore, ctx: NoticeContext, write?: (text: string) => void): boolean;
38
+ /** The slice of the config store a sticky env opt-out needs. */
39
+ export interface EnvOptOutStore {
40
+ getTelemetryConsent(): TelemetryConsent | undefined;
41
+ setTelemetryOffByEnv(via: string): void;
42
+ }
43
+ /**
44
+ * An explicit env opt-out (DO_NOT_TRACK, ALIGN_TELEMETRY) is made STICKY: stored as 'off' with
45
+ * its reason, so a process that does not inherit the variable still honours it. An MCP server
46
+ * started by an agent gets a trimmed environment, and the detached sync child inherits from that
47
+ * server, so the variable alone never reached them. Bare CI is not a user choice and is never
48
+ * stored (it is checked per process). A stored 'off' or 'declined' is left as it is. Called
49
+ * before anything in this process can send, and not subject to the terminal or hook rules above:
50
+ * a hook run that sees the variable stores it too. Never throws.
30
51
  */
31
- export declare function maybeRequestTelemetryConsent(config: TelemetryConsentStore, interactive: boolean): Promise<void>;
52
+ export declare function storeEnvOptOut(config: EnvOptOutStore): boolean;
32
53
  //# sourceMappingURL=telemetry-consent.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"telemetry-consent.d.ts","sourceRoot":"","sources":["../../src/lib/telemetry-consent.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,mBAAmB,IAAI,SAAS,GAAG,UAAU,GAAG,KAAK,GAAG,SAAS,CAAC;IAClE,mBAAmB,CAAC,KAAK,EAAE,SAAS,GAAG,UAAU,GAAG,KAAK,GAAG,IAAI,CAAC;CAClE;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,4BAA4B,CAChD,MAAM,EAAE,qBAAqB,EAC7B,WAAW,EAAE,OAAO,GACnB,OAAO,CAAC,IAAI,CAAC,CAkBf"}
1
+ {"version":3,"file":"telemetry-consent.d.ts","sourceRoot":"","sources":["../../src/lib/telemetry-consent.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,mBAAmB,IAAI,gBAAgB,GAAG,SAAS,CAAC;IACpD,yBAAyB,IAAI,MAAM,GAAG,SAAS,CAAC;IAChD,wBAAwB,IAAI,IAAI,CAAC;CAClC;AAED;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,QAI4D,CAAC;AAE1F,MAAM,WAAW,aAAa;IAC5B,4FAA4F;IAC5F,OAAO,EAAE,MAAM,CAAC;IAChB,0FAA0F;IAC1F,IAAI,EAAE,OAAO,CAAC;IACd,oFAAoF;IACpF,aAAa,EAAE,OAAO,CAAC;CACxB;AAID;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,oBAAoB,EAC5B,GAAG,EAAE,aAAa,EAClB,KAAK,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAExB,GACA,OAAO,CAqBT;AAED,gEAAgE;AAChE,MAAM,WAAW,cAAc;IAC7B,mBAAmB,IAAI,gBAAgB,GAAG,SAAS,CAAC;IACpD,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CACzC;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAW9D"}
@@ -1,42 +1,81 @@
1
- import * as p from '@clack/prompts';
2
1
  import { telemetryDisabledByEnv } from './telemetry-env.js';
2
+ import { inCi } from './telemetry-ci.js';
3
3
  /**
4
- * ALI-618 D3: the one-time local-mode consent prompt, shown from `runLocalSetup()`.
5
- *
6
- * Never asks twice - a decision already on disk (granted, declined, or `align telemetry off`)
7
- * is left alone. Never prompts without a TTY on both streams: a piped `setup --local` run
8
- * hangs on a prompt it cannot answer, and a closed stdin crashes clack's raw-mode init AFTER
9
- * the real setup work has already succeeded (the align-cli#118 lesson,
10
- * `setup-local-non-tty.test.ts`). A non-interactive run leaves consent UNSET rather than
11
- * implicitly declined - a scripted first run may be a CI smoke test, not a real user's choice,
12
- * and it can still be asked on a later interactive run.
13
- *
14
- * ALI-954: an env var that already turns everything off (`DO_NOT_TRACK=1`, `ALIGN_TELEMETRY=0`)
15
- * skips the question with a one-line note - asking would imply the answer matters - and
16
- * leaves the decision unset for the same reason as the non-interactive case.
17
- *
18
- * The question is about USAGE (which commands you run). The two anonymous counts the docs
19
- * describe (install, setup completed) are not what is being asked about here and send either
20
- * way; `align telemetry off` is what stops those (docs/telemetry.md).
4
+ * C6: the disclosure. Local-mode telemetry is opt-out, and this notice is what makes it so: it
5
+ * prints once, to stderr, before anything is sent, and nothing that depends on it sends until
6
+ * it has printed (usage-telemetry.ts's localTierAllows). The founder-approved wording - change
7
+ * it only with the privacy page (align.tech/privacy#cli) and docs/telemetry.md in the same PR.
8
+ */
9
+ export const TELEMETRY_NOTICE = 'Align sends anonymous usage counts: which commands and coding agent you use,\n' +
10
+ 'which tools you connect and how many items, the CLI version, and your OS.\n' +
11
+ 'Never code, decision text, or file, repo or org names.\n' +
12
+ 'Turn it off: align telemetry off (or DO_NOT_TRACK=1). Details: align.tech/privacy#cli';
13
+ const isSet = (v) => v !== undefined && v !== '';
14
+ /**
15
+ * Shows the notice and marks it shown, or does neither. Skipped, and NOT marked, wherever
16
+ * nobody is reading it or it would be moot: no terminal on stdin and stderr, CI, an agent hook, `align mcp` (an agent's stdio
17
+ * server), a run inside a launched agent (ALIGN_WRAPPED), `align telemetry ...` (the off switch
18
+ * must not be raced by what it switches off), an env switch that already turns everything off,
19
+ * and any stored decision (granted, declined or off - that user was already asked or chose).
20
+ * Because it is not marked, nothing that waits on it sends from those runs either.
21
21
  *
22
- * Default is No: anything other than an explicit yes - the default answer, or Ctrl-C - leaves
23
- * telemetry off (D3).
22
+ * Returns whether it printed. Never throws: a broken config store costs the notice, which means
23
+ * nothing sends - the safe direction.
24
24
  */
25
- export async function maybeRequestTelemetryConsent(config, interactive) {
26
- if (config.getTelemetryConsent() !== undefined)
27
- return;
28
- if (!interactive)
29
- return;
30
- const envSwitch = telemetryDisabledByEnv();
31
- if (envSwitch !== undefined) {
32
- p.log.info(`Telemetry is off (${envSwitch} is set), so nothing is sent and you won't be asked.`);
33
- return;
25
+ export function maybeShowTelemetryNotice(config, ctx, write = (text) => {
26
+ process.stderr.write(text);
27
+ }) {
28
+ try {
29
+ const top = ctx.command.split(' ')[0];
30
+ if (top === 'mcp' || top === 'telemetry')
31
+ return false;
32
+ if (ctx.hook || ctx.cloudSignedIn)
33
+ return false;
34
+ if (isSet(process.env['ALIGN_WRAPPED']))
35
+ return false;
36
+ if (telemetryDisabledByEnv() !== undefined || inCi())
37
+ return false;
38
+ if (config.getTelemetryConsent() !== undefined)
39
+ return false;
40
+ if (config.getTelemetryNoticeShownAt() !== undefined)
41
+ return false;
42
+ // The real control (review of e794c6e, P0): the notice is the disclosure every local send
43
+ // waits on, so it counts only when a person can read it. A person at a terminal has both
44
+ // stdin and stderr on it. Anything else - stderr to /dev/null, a pipe, a hook runner, cron,
45
+ // systemd, `docker build`, an agent's Bash tool - prints nothing and marks nothing, so
46
+ // nothing sends until a real terminal run shows it.
47
+ if (!process.stderr.isTTY || !process.stdin.isTTY)
48
+ return false;
49
+ write(`${TELEMETRY_NOTICE}\n\n`);
50
+ config.markTelemetryNoticeShown();
51
+ return true;
52
+ }
53
+ catch {
54
+ return false;
55
+ }
56
+ }
57
+ /**
58
+ * An explicit env opt-out (DO_NOT_TRACK, ALIGN_TELEMETRY) is made STICKY: stored as 'off' with
59
+ * its reason, so a process that does not inherit the variable still honours it. An MCP server
60
+ * started by an agent gets a trimmed environment, and the detached sync child inherits from that
61
+ * server, so the variable alone never reached them. Bare CI is not a user choice and is never
62
+ * stored (it is checked per process). A stored 'off' or 'declined' is left as it is. Called
63
+ * before anything in this process can send, and not subject to the terminal or hook rules above:
64
+ * a hook run that sees the variable stores it too. Never throws.
65
+ */
66
+ export function storeEnvOptOut(config) {
67
+ try {
68
+ const via = telemetryDisabledByEnv();
69
+ if (via === undefined)
70
+ return false;
71
+ const stored = config.getTelemetryConsent();
72
+ if (stored === 'off' || stored === 'declined')
73
+ return false;
74
+ config.setTelemetryOffByEnv(via);
75
+ return true;
76
+ }
77
+ catch {
78
+ return false;
34
79
  }
35
- const answer = await p.confirm({
36
- message: 'Help improve Align? Send an anonymous count of which commands you run - no code, no ' +
37
- 'decisions, no file names, ever. You can change this any time with `align telemetry off`.',
38
- initialValue: false,
39
- });
40
- config.setTelemetryConsent(!p.isCancel(answer) && answer ? 'granted' : 'declined');
41
80
  }
42
81
  //# sourceMappingURL=telemetry-consent.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"telemetry-consent.js","sourceRoot":"","sources":["../../src/lib/telemetry-consent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAW5D;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,MAA6B,EAC7B,WAAoB;IAEpB,IAAI,MAAM,CAAC,mBAAmB,EAAE,KAAK,SAAS;QAAE,OAAO;IACvD,IAAI,CAAC,WAAW;QAAE,OAAO;IAEzB,MAAM,SAAS,GAAG,sBAAsB,EAAE,CAAC;IAC3C,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,qBAAqB,SAAS,sDAAsD,CAAC,CAAC;QACjG,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC;QAC7B,OAAO,EACL,sFAAsF;YACtF,0FAA0F;QAC5F,YAAY,EAAE,KAAK;KACpB,CAAC,CAAC;IAEH,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;AACrF,CAAC"}
1
+ {"version":3,"file":"telemetry-consent.js","sourceRoot":"","sources":["../../src/lib/telemetry-consent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAazC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAC3B,gFAAgF;IAChF,6EAA6E;IAC7E,0DAA0D;IAC1D,uFAAuF,CAAC;AAW1F,MAAM,KAAK,GAAG,CAAC,CAAqB,EAAW,EAAE,CAAC,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,EAAE,CAAC;AAE9E;;;;;;;;;;GAUG;AACH,MAAM,UAAU,wBAAwB,CACtC,MAA4B,EAC5B,GAAkB,EAClB,QAAgC,CAAC,IAAI,EAAE,EAAE;IACvC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACtC,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,WAAW;YAAE,OAAO,KAAK,CAAC;QACvD,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,aAAa;YAAE,OAAO,KAAK,CAAC;QAChD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;QACtD,IAAI,sBAAsB,EAAE,KAAK,SAAS,IAAI,IAAI,EAAE;YAAE,OAAO,KAAK,CAAC;QACnE,IAAI,MAAM,CAAC,mBAAmB,EAAE,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QAC7D,IAAI,MAAM,CAAC,yBAAyB,EAAE,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QACnE,0FAA0F;QAC1F,yFAAyF;QACzF,4FAA4F;QAC5F,uFAAuF;QACvF,oDAAoD;QACpD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QAChE,KAAK,CAAC,GAAG,gBAAgB,MAAM,CAAC,CAAC;QACjC,MAAM,CAAC,wBAAwB,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAQD;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc,CAAC,MAAsB;IACnD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,sBAAsB,EAAE,CAAC;QACrC,IAAI,GAAG,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QACpC,MAAM,MAAM,GAAG,MAAM,CAAC,mBAAmB,EAAE,CAAC;QAC5C,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,UAAU;YAAE,OAAO,KAAK,CAAC;QAC5D,MAAM,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * ALI-954: the two environment variables that turn ALL telemetry off - both tiers, the
3
- * default-on beacons included. Its own module so the consent prompt (telemetry-consent.ts)
3
+ * default-on beacons included. Its own module so the one-time notice (telemetry-consent.ts)
4
4
  * can ask the same question without importing the emitter, which setup.test.ts mocks down to
5
5
  * one function.
6
6
  *
@@ -5,36 +5,61 @@ import { type EnvironmentConfig, type TelemetryConsent } from './config.js';
5
5
  *
6
6
  * Cloud mode is opt-out: a cloud user is already on an authenticated connection to our
7
7
  * gateway, so an event about a call already being made is not a new phone-home. Local-embedded
8
- * mode has two tiers (ALI-954, superseding the ALI-618 "nothing by default" for local mode):
9
- * - Two anonymous BEACONS send by default: `cli.funnel.install` (once, on the first ever run,
10
- * see recordInstallBeacon) and `cli.funnel.setup_completed`. They exist so the funnel has a
11
- * denominator - opt-in usage alone cannot tell a 10% consent rate from 90%.
12
- * - Everything else (`cli.command`, the other funnel stages) sends only with the stored
13
- * consent (`config.ts`'s `getTelemetryConsent`, set by the one-time prompt at the end of
14
- * setup, default No). `--local` users have no account and no tenant, so there is nothing
15
- * to authenticate an event against - the consent is the gate.
8
+ * mode is opt-out too since C6, disclosed by a one-time notice (telemetry-consent.ts) that cli.ts
9
+ * prints to stderr before the first send - nothing local sends until it has printed
10
+ * (localTierAllows). An install that answered No to the pre-C6 setup question ('declined')
11
+ * keeps that answer for usage; the two ALI-954 beacons (install, setup_completed) still send
12
+ * for it, as they did. `--local` users have no account and no tenant, so there is nothing to
13
+ * authenticate an event against - the notice, and the stored decision, are the gate.
16
14
  * Both modes send only a command name, never arguments or content. docs/telemetry.md lists
17
15
  * every event and field, and telemetry-docs-parity.test.ts keeps that page true.
18
16
  *
19
- * `ALIGN_TELEMETRY=0` and `DO_NOT_TRACK=1` (telemetry-env.ts) turn everything off, both tiers,
20
- * in both modes, over a granted local consent included (ALI-618 D3b - one consent model, not
21
- * two). `align telemetry off` stores 'off', which does the same thing without an env var.
17
+ * `ALIGN_TELEMETRY=0` and `DO_NOT_TRACK=1` (telemetry-env.ts), and running in CI
18
+ * (telemetry-ci.ts, C6), turn everything off, both tiers, in both modes, over a granted local
19
+ * consent included (ALI-618 D3b - one consent model, not two). `align telemetry off` stores 'off', which does the same thing without an env var.
22
20
  */
23
21
  export declare const TELEMETRY_TIMEOUT_MS = 2000;
22
+ /**
23
+ * THE one predicate for "a stored answer forbids sending anything", read by every send path:
24
+ * local usage, local stages and beacons (localTierAllows), the install beacon's first-run
25
+ * consumption, cloud cli.command and cloud funnel stages, and `align telemetry status`.
26
+ * 'off' is `align telemetry off`; 'declined' is a No to the pre-C6 setup question. The privacy
27
+ * page promises "if you turned telemetry off earlier, it stays off", with no mode attached, so
28
+ * both stop everything in both modes (review of e794c6e, then the coordinator's call that a
29
+ * declined cloud user is off too).
30
+ */
31
+ export declare function storedAnswerForbidsSending(consent: TelemetryConsent | undefined): boolean;
32
+ /**
33
+ * The hard cap on the one send that is awaited: the first-run install beacon. Once per install,
34
+ * so ordinary runs never pay it.
35
+ */
36
+ export declare const INSTALL_BEACON_CAP_MS = 800;
24
37
  export interface TelemetryStatus {
25
38
  enabled: boolean;
26
39
  reason: string;
27
40
  }
28
41
  /**
29
- * ALI-618 D3b: what `align telemetry status` prints. Takes the consent decision as a plain
30
- * argument rather than reading `config.ts` itself, so the two consent MODELS stay visibly
31
- * distinct in one function a reader can hold in their head - cloud's opt-out default and
32
- * local's stored decision (ALI-954: three values, and the two default-on beacons named where
33
- * usage is off but they are not) - with the env switches as the thing that overrides both,
34
- * checked first.
42
+ * ALI-618 D3b: what `align telemetry status` prints. Takes the consent decision and whether the
43
+ * C6 notice has printed as plain arguments rather than reading `config.ts` itself, so the
44
+ * model stays visible in one function a reader can hold in their head - cloud's opt-out
45
+ * default, and local's stored decision or the notice (ALI-954: the two default-on beacons named
46
+ * where usage is off but they are not) - with the env switches and CI overriding both, checked
47
+ * first.
35
48
  */
36
- export declare function getTelemetryStatus(env: EnvironmentConfig, localConsent: TelemetryConsent | undefined): TelemetryStatus;
37
- export declare function recordCommandUsage(env: EnvironmentConfig, command: string): Promise<void>;
49
+ export declare function getTelemetryStatus(env: EnvironmentConfig, localConsent: TelemetryConsent | undefined, noticeShown?: boolean, offByEnv?: {
50
+ via: string;
51
+ at: string;
52
+ }): TelemetryStatus;
53
+ export declare function recordCommandUsage(env: EnvironmentConfig, command: string, opts?: {
54
+ capMs?: number;
55
+ }): Promise<void>;
56
+ /**
57
+ * ALI-795: the command groups whose second word is a SUBCOMMAND, mirroring the gateway's
58
+ * SUBCOMMAND_PARENTS (telemetryAnonymousRoutes.ts, align-stack#1990) - the two lists must
59
+ * agree or pings silently 400. A query-taking command (ask, search, capture...) sends its
60
+ * top-level word only, so a user's one-word query can never ride the command field.
61
+ */
62
+ export declare const SUBCOMMAND_PARENTS: ReadonlySet<string>;
38
63
  /**
39
64
  * ALI-795: the activation-funnel stages, matching the gateway's closed enum
40
65
  * (telemetryAnonymousRoutes.ts). Repeat-use and D7 are deliberately absent - both derive
@@ -65,7 +90,31 @@ export declare function recordCommandUsage(env: EnvironmentConfig, command: stri
65
90
  * strings have one writer here as they now do on the gateway side (align-stack #2237).
66
91
  */
67
92
  export declare const SESSION_IMPORT_STAGES: readonly ["sessions_scanned", "candidates_found", "candidates_confirmed", "decisions_ratified"];
68
- export declare const FUNNEL_STAGES: readonly ["setup_started", "setup_completed", "import_completed", "mcp_wired", "first_useful_decision", "teammate_requested", "sessions_scanned", "candidates_found", "candidates_confirmed", "decisions_ratified", "agent_launched"];
93
+ export declare const FUNNEL_STAGES: readonly ["setup_started", "setup_completed", "import_completed", "mcp_wired", "first_useful_decision", "teammate_requested", "sessions_scanned", "candidates_found", "candidates_confirmed", "decisions_ratified", "agent_launched", "source_synced"];
94
+ /**
95
+ * L7: what `source_synced` reports. A count and four closed enums, nothing else - never a repo, a
96
+ * host, a space, a project, a title or an id. Each list is a mirror of the gateway's (align-stack
97
+ * telemetryAnonymousRoutes.ts: SOURCE_VALUES, SYNC_OUTCOME_VALUES, SCOPE_VALUES,
98
+ * SYNC_TRIGGER_VALUES), and `telemetry-server-parity.test.ts` checks them against that file.
99
+ * A value outside a list is a silent 400 there, so it is dropped here instead of sent.
100
+ *
101
+ * `SYNC_TRIGGERS` has no `mcp` although the plan wanted one: the gateway's list does not (it is
102
+ * `connect`, `background`, `manual`), and a sync an agent starts over MCP runs as the background
103
+ * child, so it reports `background`.
104
+ */
105
+ export declare const SYNC_SOURCES: readonly ["git", "docs", "github", "jira", "confluence", "slack", "teams", "zoom", "gitlab", "linear", "notion"];
106
+ export declare const SYNC_OUTCOMES: readonly ["ok", "partial", "needs_reauth", "error"];
107
+ export declare const SYNC_SCOPES: readonly ["yours", "team"];
108
+ export declare const SYNC_TRIGGERS: readonly ["connect", "background", "manual"];
109
+ /** The gateway's `MAX_FUNNEL_COUNT`: above it the whole ping is a 400. */
110
+ export declare const MAX_FUNNEL_COUNT = 100000;
111
+ export interface SyncMeasurement {
112
+ count: number;
113
+ source: (typeof SYNC_SOURCES)[number];
114
+ outcome: (typeof SYNC_OUTCOMES)[number];
115
+ scope: (typeof SYNC_SCOPES)[number];
116
+ trigger: (typeof SYNC_TRIGGERS)[number];
117
+ }
69
118
  /**
70
119
  * What a session-import stage reports. A count and the agent's name, and nothing else - never a
71
120
  * repo, a path, a session id or a line of any transcript. The gateway refuses both fields on
@@ -107,7 +156,9 @@ export declare const BEACON_STAGES: readonly ["install", "setup_completed"];
107
156
  * offers setup_started at several checkpoints because local-mode consent arrives
108
157
  * mid-wizard, and this is how it knows which offer landed (lib/setup-funnel.ts).
109
158
  */
110
- export declare function recordFunnelStage(env: EnvironmentConfig, stage: FunnelStage, command: string, measurement?: FunnelMeasurement | AgentMeasurement): Promise<boolean>;
159
+ export declare function recordFunnelStage(env: EnvironmentConfig, stage: FunnelStage, command: string, measurement?: FunnelMeasurement | AgentMeasurement | SyncMeasurement, opts?: {
160
+ capMs?: number;
161
+ }): Promise<boolean>;
111
162
  /**
112
163
  * ALI-954: the install beacon - the funnel's denominator. Sent from the preAction hook in
113
164
  * index.ts, so it goes out BEFORE any prompt on the very first run of this install id, and
@@ -182,5 +233,19 @@ export declare function envFlagOf(cmd: {
182
233
  * a local session. It costs one activation count on a once-per-machine command, in the direction
183
234
  * that cannot leak.
184
235
  */
185
- export declare function recordInvocationUsage(envFlag: string | undefined, command: string): Promise<void>;
236
+ export declare function recordInvocationUsage(envFlag: string | undefined, command: string, opts?: {
237
+ background?: boolean;
238
+ capMs?: number;
239
+ }): Promise<void>;
240
+ /**
241
+ * C6: what runs before every command (cli.ts's preAction): the one-time notice, then the
242
+ * install beacon, both awaited. On every run but the first, the beacon returns after a config
243
+ * read and sends nothing. On the first run it is the one send that is awaited, capped at
244
+ * INSTALL_BEACON_CAP_MS (see recordInstallBeacon), so the command cannot exit before it is
245
+ * delivered. Every other event stays fire-and-forget. `hook` is the invocation's own flags (`check --hook` /
246
+ * `--advisory`), marked here because the command's action, which also marks it, runs later.
247
+ */
248
+ export declare function beginInvocationTelemetry(commandPath: string, opts: {
249
+ hook: boolean;
250
+ }): Promise<boolean>;
186
251
  //# sourceMappingURL=usage-telemetry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"usage-telemetry.d.ts","sourceRoot":"","sources":["../../src/lib/usage-telemetry.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,KAAK,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAKtG;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,oBAAoB,OAAQ,CAAC;AAkC1C,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,iBAAiB,EACtB,YAAY,EAAE,gBAAgB,GAAG,SAAS,GACzC,eAAe,CAyBjB;AAED,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA+B/F;AAwCD;;;;;;;;;;;;;;;;GAgBG;AACH;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,qBAAqB,iGAExB,CAAC;AAEX,eAAO,MAAM,aAAa,uOAYhB,CAAC;AAEX;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AACD,oFAAoF;AACpF,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;CACf;AACD,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzD;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,yCAA0C,CAAC;AAErE;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,iBAAiB,EACtB,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,MAAM,EACf,WAAW,CAAC,EAAE,iBAAiB,GAAG,gBAAgB,GACjD,OAAO,CAAC,OAAO,CAAC,CAgFlB;AA2BD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAyB/E;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,aAAa,EAAE;IAAE,IAAI,IAAI,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,CAKhG;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE;IAAE,eAAe,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GAAG,MAAM,GAAG,SAAS,CASjG;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAMf"}
1
+ {"version":3,"file":"usage-telemetry.d.ts","sourceRoot":"","sources":["../../src/lib/usage-telemetry.ts"],"names":[],"mappings":"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"}