@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
@@ -1,111 +1,25 @@
1
- import { createLocalDb, normaliseDecidedAt } from './local-db.js';
1
+ import { createLocalDb, identifyingSourceUrl, normaliseDecidedAt } from './local-db.js';
2
2
  import { deriveDeciderKind } from './decider-kind.js';
3
+ import { provenanceOf } from './local-provenance.js';
3
4
  import { currentRepoIdentity, repoFromSourceUrl } from './repo-identity.js';
4
5
  import { cosineSimilarity, EMBEDDING_MODEL_ID, getEmbedding } from './local-embeddings.js';
5
6
  import { classifyRelationship } from './local-relationship-classifier.js';
6
- import { hasConfiguredProvider, noProviderHintInline, RECOMMENDED_OLLAMA_PULL } from './local-llm.js';
7
+ import { noProviderHintInline, RECOMMENDED_OLLAMA_PULL } from './local-llm.js';
7
8
  import { repositoryOf } from './decision-links.js';
8
9
  import { localCitationFor } from './commit-cite.js';
9
10
  import { extractRefs, refIdentityFor } from './decision-refs.js';
10
11
  import { contentWordQuery } from './search-query.js';
11
- /**
12
- * Cosine floor for linking two decisions as related on ingest.
13
- *
14
- * Named CONFLICT_THRESHOLD until ALI-503, which was the same category error as the code
15
- * it governed: the value decides similarity, and similarity is not opposition. The
16
- * classifier prompt in local-relationship-classifier.ts says so directly - "high textual
17
- * similarity alone is NOT a conflict" - and the link written here is `relates` because an
18
- * embedding cannot tell agreement from opposition. Only a classifier reading both can, and
19
- * its verdict is never persisted as a link.
20
- */
21
- export const SIMILARITY_THRESHOLD = 0.65;
22
- /**
23
- * Relevance floor for align_ask / align_search.
24
- *
25
- * Was an inline 0.1, the only unnamed threshold in this file and less than a quarter of
26
- * its neighbours. It let align_ask answer "what happens when the brain service is down"
27
- * with two unrelated decisions at 0.18 and 0.14 - noise the agent had to recognise by
28
- * reading the decimals itself, and an audience cannot.
29
- *
30
- * 0.25 matches the gateway's own /decisions/smart-search floor, so the same question gets
31
- * the same relevance bar in local and cloud mode. Lower than the 0.45 used for relatedness
32
- * on purpose: search is a human asking a natural-language question, where a looser match is
33
- * still worth showing, while relatedness is machinery acting on its own.
34
- *
35
- * An honest empty result is the point. "The graph has nothing on this" is a better answer
36
- * than two wrong decisions, because the caller can act on it.
37
- */
38
- export const SEARCH_THRESHOLD = 0.25;
39
- /**
40
- * Candidate floor for ADJUDICATION - the path that then pays an LLM per candidate.
41
- *
42
- * Deliberately higher than the retrieval floor below, because this surface is expensive in
43
- * three ways the hook is not: up to 5 sequential calls to the user's own provider, ~11s of
44
- * latency, and an exit code. A keyless CI runner that gets `no-context` today exits 0; the
45
- * moment retrieval finds anything it gets `unknown` and exits 2. And the classifier cannot
46
- * reject a candidate - its vocabulary is ten positive relations with no "unrelated" - so a
47
- * loose candidate that reaches it is reported rather than filtered.
48
- *
49
- * Deliberately NOT recalibrated with the retrieval floor. Measured on the corpus, 0.30 would
50
- * recover four more related pairs here too, and that trade is a separate decision with a
51
- * separate blast radius (see relatedness-calibration.test.ts).
52
- */
53
- export const RELATES_THRESHOLD = 0.45;
54
- /**
55
- * Candidate floor for RETRIEVAL ONLY (`depth: 'related'`, the agent editor hook).
56
- *
57
- * Measured, not chosen. Against fixtures/relatedness-corpus.json: 0.45 recovered 3 of 8 related
58
- * pairs, 0.30 recovers 7 of 8, and neither admits a single unrelated pair. 0.25 scores the same
59
- * 7 of 8, so the tie-break is margin over the worst false positive (0.2051): 0.30 clears it by
60
- * 0.095 against 0.25's 0.045.
61
- *
62
- * 0.30 is also where this constant sat until commit 0cbef08 raised it to 0.45 inside a rename,
63
- * unmentioned and unmeasured. So this is a revert with evidence attached rather than a new
64
- * guess, and the evidence is a test that fails if the corpus stops supporting it.
65
- *
66
- * Safe to be looser here precisely because this path is cheap and honest: it returns above
67
- * Stage 2, so it makes no provider call, and what the hook prints declines to assert anything
68
- * ("related by content search and have NOT been adjudicated"). That is the same posture as
69
- * `align search`, which has run at 0.25 all along - as has MCP `align_get_related_decisions`.
70
- */
71
- export const RETRIEVAL_RELATES_THRESHOLD = 0.3;
72
- // ALI-785: the ABSOLUTE floor above is unreachable for cross-register pairs on
73
- // MiniLM-L6 - measured on a 403-decision six-source corpus, near-duplicates score
74
- // ~0.95, genuine cross-tool paraphrases 0.45-0.62, background noise 0.28-0.40, and
75
- // 0 of 1,729 links crossed a platform. So linking also takes each item's top few
76
- // neighbours RELATIVE to its own ranking, floored where the noise band ends. 0.45 is
77
- // the adjudication floor the product already uses elsewhere; text-cleaning schemes
78
- // were lab-tested first and moved nothing (title+cleaned scored 0.274 vs 0.286 raw).
79
- export const RELATED_TOP_K = 3;
80
- export const RELATED_FLOOR = RELATES_THRESHOLD;
81
- /**
82
- * ALI-1065: the capture-time classification budget. Only the high-confidence tier
83
- * (score >= SIMILARITY_THRESHOLD) is ever classified - the lower related-only tier stays
84
- * a plain cosine `relates` edge, because typing a merely-related pair is exactly the
85
- * manufactured-detection failure ALI-503 removed from the conflict counters.
86
- *
87
- * Capped at 3 regardless of how many candidates clear the high-confidence bar, and skipped
88
- * entirely (0 calls) with no provider configured - see ingestOne. Worst case: 3 classifier
89
- * calls per capture, each a single LLM round trip. Typical capture (0-1 near-duplicates)
90
- * costs 0-1 calls.
91
- */
92
- export const CAPTURE_CLASSIFY_TOP_K = 3;
93
- // Below this similarity between a decision and new content, the content is
94
- // considered to have drifted from the decision.
95
- export const DRIFT_THRESHOLD = 0.5;
96
- /**
97
- * ALI-831: the provenance every decision payload carries, in wire spelling, so an agent
98
- * reading this server can tell a claim from a rule. `ratified` is a boolean beside the
99
- * stamp rather than instead of it: a consumer branches on the boolean and cites the stamp.
100
- * A NULL column (a row from before the column existed) reads 'unknown', never a guess.
101
- */
102
- function provenanceOf(row) {
103
- return {
104
- decider_kind: row.deciderKind ?? 'unknown',
105
- ratified: row.ratifiedAt !== null,
106
- ...(row.ratifiedAt ? { ratified_at: row.ratifiedAt, ratified_by: row.ratifiedBy } : {}),
107
- };
108
- }
12
+ import { linkPass } from './local-link-pass.js';
13
+ import { EmbeddingMatrix, MATRIX_MAX_ROWS } from './similarity/embedding-matrix.js';
14
+ import { captureFieldsForUrl, ingestStep } from './local-ingest.js';
15
+ import { annotatePairs, anyJudgements, reviewConflicts } from './curation/guardrail.js';
16
+ import { defaultJudge } from './curation/judge.js';
17
+ import { bannerFor, checkNotes, emptyCheck, offeredFiles, splitRetrieved } from './curation/check-marks.js';
18
+ import { notADecisionMarks } from './curation/judgements-db.js';
19
+ import { contextKeyFor, filesFromDiff } from './curation/mark.js';
20
+ import { DRIFT_THRESHOLD, RELATED_FLOOR, RELATED_TOP_K, RELATES_THRESHOLD, RETRIEVAL_RELATES_THRESHOLD, SEARCH_THRESHOLD, SIMILARITY_THRESHOLD, } from './local-thresholds.js';
21
+ export { DRIFT_THRESHOLD, RELATED_FLOOR, RELATED_TOP_K, RELATES_THRESHOLD, RETRIEVAL_RELATES_THRESHOLD, SEARCH_THRESHOLD, SIMILARITY_THRESHOLD, };
22
+ export { CAPTURE_CLASSIFY_TOP_K } from './local-ingest.js';
109
23
  export function createLocalGatewayClient(dbPath, clientOpts = {}) {
110
24
  const db = createLocalDb(dbPath);
111
25
  // Memoized: every retrieval call in one command invocation (a single `align ask`, one
@@ -120,6 +34,14 @@ export function createLocalGatewayClient(dbPath, clientOpts = {}) {
120
34
  }
121
35
  return cachedCurrentRepo;
122
36
  }
37
+ /** LM: whose marks apply. Resolved only when the file holds any judgement, so a graph nobody marked never touches config. */
38
+ let cachedJudgeId;
39
+ async function activeJudge() {
40
+ if (!anyJudgements(dbPath))
41
+ return undefined;
42
+ cachedJudgeId ??= clientOpts.judgeId ?? (await defaultJudge()).judgeId;
43
+ return cachedJudgeId;
44
+ }
123
45
  /**
124
46
  * Resolves a `--repo <name>` argument against what actually exists, so a user can type
125
47
  * the short repo name ("align-cli") or "owner/repo" instead of memorising the full
@@ -266,7 +188,28 @@ export function createLocalGatewayClient(dbPath, clientOpts = {}) {
266
188
  }
267
189
  return {};
268
190
  }
269
- async function ingestOne(input, platform, opts = {}) {
191
+ /** What ranks a new item against the graph. Normally the in-memory matrix of every stored
192
+ * embedding, read from SQLite on first use and kept for the run (`session`) so N items read
193
+ * the table once. A kept matrix is trusted only while nothing under it moved: rowSetEpoch
194
+ * (this connection deleted or replaced rows, whichever code path did it) and dataVersion
195
+ * (ANOTHER connection committed) must both match what it was built at, else it is rebuilt.
196
+ * Above the row cap there is no matrix and each item streams the table, as before.
197
+ * Model-filtered exactly as findSimilar is: a stale-model vector must not be scored. */
198
+ function rankerFor(session) {
199
+ const epoch = db.rowSetEpoch();
200
+ const dataVersion = db.dataVersion();
201
+ if (session.matrix === undefined || session.epoch !== epoch || session.dataVersion !== dataVersion) {
202
+ session.matrix = undefined;
203
+ if (db.countEmbeddings() > (clientOpts.matrixMaxRows ?? MATRIX_MAX_ROWS)) {
204
+ return { topK: (q, k, o) => findSimilar(q, k, o?.threshold ?? 0, o?.excludeId) };
205
+ }
206
+ session.matrix = EmbeddingMatrix.fromRows(db.getAllEmbeddings({ model: EMBEDDING_MODEL_ID }));
207
+ session.epoch = epoch;
208
+ session.dataVersion = dataVersion;
209
+ }
210
+ return session.matrix;
211
+ }
212
+ async function ingestOne(input, platform, opts = {}, session = {}) {
270
213
  let title = input.slice(0, 80);
271
214
  let summary = input;
272
215
  let sourceUrl = opts.sourceUrlOverride ?? null;
@@ -275,14 +218,17 @@ export function createLocalGatewayClient(dbPath, clientOpts = {}) {
275
218
  try {
276
219
  const url = new URL(input);
277
220
  sourceUrl = url.href;
278
- title = url.pathname.split('/').filter(Boolean).pop() ?? url.hostname;
279
- summary = `Captured from ${url.hostname}`;
221
+ ({ title, summary } = captureFieldsForUrl(url));
280
222
  capturedAsUrl = true;
281
223
  }
282
224
  catch { /* plain text - use as-is */ }
283
225
  }
284
226
  if (opts.titleOverride)
285
227
  title = opts.titleOverride.slice(0, 80);
228
+ // L2: a capture of a URL whose item a connector already imported adds nothing to it.
229
+ const heldRow = capturedAsUrl ? db.noteCaptureOfHeldItem(sourceUrl) : null;
230
+ if (heldRow)
231
+ return { id: heldRow.id, title: heldRow.title, summary: heldRow.summary, sourceUrl: heldRow.sourceUrl, platform: heldRow.platform, related: [], created: false, changed: false };
286
232
  // ALI-792: what the text points at, stored beside the decision. When the whole
287
233
  // input IS the URL being captured, there is nothing to point at - and comparing
288
234
  // the extracted ref against the WHATWG-normalized href leaks on every
@@ -302,80 +248,78 @@ export function createLocalGatewayClient(dbPath, clientOpts = {}) {
302
248
  // refreshed, so this is the only moment the difference is visible. Without it a
303
249
  // re-import reports every decision as imported while the graph does not move, which
304
250
  // reads as having imported twice (ALI-770).
305
- const created = db.findIdBySource(sourceUrl, title) === null;
251
+ //
306
252
  // ALI-829: a Slack thread arriving under a real title replaces the tombstone-titled row
307
- // an older fetcher may have written for the same source_url (see local-db.ts).
253
+ // an older fetcher may have written for the same source_url (see local-db.ts). Removed
254
+ // BEFORE the lookup: L2 finds a Slack thread by its source_key, which the tombstone shares.
255
+ //
256
+ // One normalisation, used by both folds: the tombstone delete and insertDecision's own fold
257
+ // already trim, and a raw url here made the two disagree about which twin they were looking at.
258
+ const identity = identifyingSourceUrl(sourceUrl);
308
259
  if (platform === 'slack')
309
- db.deleteSlackTombstoneTwin(sourceUrl);
260
+ db.deleteSlackTombstoneTwin(identity);
261
+ if (opts.keyed)
262
+ db.foldPendingTwin(identity, title, platform, true);
263
+ const existingId = db.findIdBySource(sourceUrl, title, platform, opts.keyed);
264
+ // L3: an items-first arrival over a complete row merges onto the stored discussion; the row stays complete.
265
+ let pending = opts.detailPending;
266
+ if (opts.keyed && existingId !== null) {
267
+ const kept = db.keepProtectedText(existingId, title, summary, opts.detailPending);
268
+ ({ title, summary } = kept);
269
+ if (kept.keptDiscussion)
270
+ pending = false;
271
+ }
272
+ const created = existingId === null;
310
273
  // ALI-829: the source's own date, normalised once. An unparseable date drops the FIELD,
311
274
  // never the item: the summary is the thing the user came for.
312
275
  const decidedAt = normaliseDecidedAt(opts.createdAt);
276
+ // L1/L2: connector imports (classify:false) only - capture re-ranks every time. Only the
277
+ // missing steps run (Decision 30): nothing for a finished row, the link pass alone for a
278
+ // row whose ingest died after storing its embedding. Refs stay current and citations INTO
279
+ // the row resolve either way: both are local and cheap.
280
+ if (opts.classify === false && existingId !== null) {
281
+ const step = ingestStep(db.getDecisionById(existingId), { title, summary, platform, repo, decidedAt }, db.getEmbeddingModel(existingId), EMBEDDING_MODEL_ID, db.getEnrichedAt(existingId));
282
+ const stored = step === 'full' ? null : db.getEmbedding(existingId);
283
+ if (stored !== null) {
284
+ db.replaceRefs(existingId, refs);
285
+ db.resolveRefs(existingId, refIdentityFor(platform, sourceUrl));
286
+ const related = step === 'relink' ? await linkPass(db, rankerFor(session), existingId, stored, title, summary, opts.classify) : [];
287
+ if (step === 'relink')
288
+ db.markEnriched(existingId);
289
+ return { id: existingId, title, summary, sourceUrl, platform, related, created: false, changed: false };
290
+ }
291
+ }
292
+ // Embed title + summary so URL captures (whose summary is just "Captured
293
+ // from <host>") still carry the path-derived title's semantic content. Embedded BEFORE the
294
+ // row is rewritten: a failed embed then leaves the row (and its enriched_at) as it was,
295
+ // rather than new text beside the old text's vector.
296
+ const embedText = title === summary ? summary : `${title}. ${summary}`;
297
+ const embedding = await getEmbedding(embedText);
313
298
  // ALI-831: origin, from the platform - the same rule the cloud applies on insert.
314
299
  const deciderKind = deriveDeciderKind(platform);
315
- const id = db.insertDecision({ title, summary, sourceUrl, platform, repo, decidedAt, deciderKind });
300
+ const id = db.insertDecision({ title, summary, sourceUrl, platform, repo, decidedAt, deciderKind, keyed: opts.keyed, detailPending: pending });
316
301
  db.replaceRefs(id, refs);
317
302
  // ALI-796's payoff: if some earlier decision already cited THIS one (a git commit
318
303
  // citing a Jira key before Jira was ever connected), resolve that gap into a real
319
304
  // link now that the cited item has arrived. Harmless no-op for platforms with no
320
305
  // citable identity (refIdentityFor returns [] for a plain git/slack/cli capture).
321
306
  db.resolveRefs(id, refIdentityFor(platform, sourceUrl));
322
- // Embed title + summary so URL captures (whose summary is just "Captured
323
- // from <host>") still carry the path-derived title's semantic content.
324
- const embedText = title === summary ? summary : `${title}. ${summary}`;
325
- const embedding = await getEmbedding(embedText);
307
+ const epochBefore = db.rowSetEpoch();
326
308
  db.setEmbedding(id, embedding, EMBEDDING_MODEL_ID);
327
- // One ranked pass, two rules united. Absolute (>= SIMILARITY_THRESHOLD, cap 10)
328
- // as before, PLUS the top RELATED_TOP_K overall when they clear RELATED_FLOOR -
329
- // the cross-tool edges live between those two lines (see RELATED_FLOOR's note).
330
- // If the top-K are all absolute matches the relative rule adds nothing, which is
331
- // the correct degenerate case rather than a special one.
332
- const ranked = await findSimilar(embedding, 10, 0, id);
333
- const candidates = ranked.filter((c, i) => c.score >= SIMILARITY_THRESHOLD || (i < RELATED_TOP_K && c.score >= RELATED_FLOOR));
334
- // ALI-1065: classify only the high-confidence tier, capped, and only with a provider
335
- // configured - hasConfiguredProvider is an env-only check, so this costs nothing when
336
- // no key exists (the common case for a fresh clone). chainStopped mirrors
337
- // checkAlignment's own short-circuit: once one candidate's classification fails with a
338
- // stopped provider, further calls in THIS capture are skipped rather than repeated.
339
- const toClassify = hasConfiguredProvider()
340
- ? candidates.filter(c => c.score >= SIMILARITY_THRESHOLD).slice(0, CAPTURE_CLASSIFY_TOP_K)
341
- : [];
342
- const classifyIds = new Set(toClassify.map(c => c.decisionId));
343
- const newDecision = { title, summary };
344
- let chainStopped = false;
345
- for (const c of candidates) {
346
- if (classifyIds.has(c.decisionId) && !chainStopped) {
347
- // The EXISTING decision is the subject (A); the new capture is the candidate (B) -
348
- // "how does B relate to A" reads naturally as "does this new thing supersede/conflict
349
- // with what's already there", which is the direction a capture-time check asks in.
350
- const existingRow = db.getDecisionById(c.decisionId);
351
- const outcome = existingRow
352
- ? await classifyRelationship({ title: existingRow.title, summary: existingRow.summary }, newDecision)
353
- : { ok: false, reason: 'classifier_error' };
354
- if (!outcome.ok && outcome.failure?.kind === 'provider_stopped')
355
- chainStopped = true;
356
- if (outcome.ok) {
357
- // replaceLink, not insertLink: this upgrades the cosine `relates` edge findSimilar
358
- // would otherwise also write below into a typed one, rather than leaving both on
359
- // the pair (local-db.ts's unique index is per-relation, so both would coexist).
360
- db.replaceLink({
361
- sourceId: id,
362
- targetId: c.decisionId,
363
- relation: outcome.relationship.type,
364
- confidence: outcome.relationship.confidence,
365
- });
366
- continue;
367
- }
368
- // Falls through to the untyped write below on any classifier failure - a candidate
369
- // still worth surfacing as related even when nothing could type it.
370
- }
371
- // ALI-503: `relates`, not `conflicts_with`. This is a cosine score with no judgement
372
- // behind it, and labelling it a conflict made `align local status` and the
373
- // align_get_conflicts MCP tool report manufactured findings as detections.
374
- db.insertLink({ sourceId: id, targetId: c.decisionId, relation: 'relates', confidence: c.score });
309
+ // This run's own write: the matrix learns it by append, so the bump setEmbedding makes when
310
+ // it REPLACES a vector is not a graph that moved under the copy. But only a matrix that was
311
+ // current before the write may absorb it; one the insert's own fold already outdated is
312
+ // left alone and rebuilt by rankerFor.
313
+ if (session.matrix !== undefined && session.epoch === epochBefore) {
314
+ session.matrix.add(id, embedding);
315
+ session.epoch = db.rowSetEpoch();
375
316
  }
376
- return { id, title, summary, sourceUrl, platform, related: candidates, created };
317
+ const candidates = await linkPass(db, rankerFor(session), id, embedding, title, summary, opts.classify);
318
+ // L2, Decision 30: the LAST write. Only now is the ingest done.
319
+ db.markEnriched(id);
320
+ return { id, title, summary, sourceUrl, platform, related: candidates, created, changed: true };
377
321
  }
378
- return {
322
+ const client = {
379
323
  /** Release the underlying SQLite handle (required on Windows before deleting the file). */
380
324
  close() {
381
325
  db.close();
@@ -395,17 +339,20 @@ export function createLocalGatewayClient(dbPath, clientOpts = {}) {
395
339
  ...(row ? provenanceOf(row) : {}),
396
340
  };
397
341
  },
398
- async ingestBatch(items) {
342
+ async ingestBatch(items, opts = {}) {
399
343
  const snapshots = [];
344
+ const session = {};
400
345
  for (const item of items) {
401
346
  const r = await ingestOne(item.raw_text, item.platform ?? 'cli', {
402
347
  titleOverride: item.title,
403
348
  sourceUrlOverride: item.source_url ?? null,
404
349
  createdAt: item.created_at,
405
- });
350
+ classify: opts.classify, keyed: opts.keyed, detailPending: item.detail_pending,
351
+ }, session);
406
352
  snapshots.push({
407
353
  id: r.id,
408
354
  created: r.created,
355
+ changed: r.changed,
409
356
  title: r.title,
410
357
  summary: r.summary,
411
358
  analysis: {
@@ -422,6 +369,39 @@ export function createLocalGatewayClient(dbPath, clientOpts = {}) {
422
369
  }
423
370
  return { snapshots };
424
371
  },
372
+ /**
373
+ * L5, Decision 30: finish ingests that never finished (`enriched_at` NULL: every row after the
374
+ * v7 upgrade, or one that died between its embedding and its link pass). Runs only the
375
+ * missing step, the way ingestOne does for a connector re-ingest: a row that already holds a
376
+ * current-model embedding gets the link pass alone (no embed call); one that does not is
377
+ * re-ingested from its own stored text. A row with no URL and no embedding cannot be
378
+ * re-ingested without inserting a twin, so it is counted and left. Never classifies.
379
+ */
380
+ async relinkUnfinished(rows) {
381
+ const session = {};
382
+ const out = { linked: 0, embedded: 0, skipped: 0 };
383
+ for (const { id, keyed, pending } of rows) {
384
+ const row = db.getDecisionById(id);
385
+ if (!row)
386
+ continue;
387
+ const stored = db.getEmbeddingModel(id) === EMBEDDING_MODEL_ID ? db.getEmbedding(id) : null;
388
+ if (stored !== null) {
389
+ await linkPass(db, rankerFor(session), id, stored, row.title, row.summary, false);
390
+ db.markEnriched(id);
391
+ out.linked += 1;
392
+ }
393
+ else if (row.sourceUrl === null) {
394
+ out.skipped += 1;
395
+ }
396
+ else {
397
+ await ingestOne(row.summary, row.platform, { titleOverride: row.title, sourceUrlOverride: row.sourceUrl, createdAt: row.decidedAt ?? undefined, classify: false, keyed,
398
+ // The stored flag, passed through: a re-ingest that says nothing resets a row still waiting for its discussion.
399
+ detailPending: pending === true }, session);
400
+ out.embedded += 1;
401
+ }
402
+ }
403
+ return out;
404
+ },
425
405
  /**
426
406
  * ALI-808: the confirm-each session importer's one write path. Ingests exactly like
427
407
  * ingestBatch does above (same ingestOne, so platform 'agent-session' derives
@@ -560,7 +540,16 @@ export function createLocalGatewayClient(dbPath, clientOpts = {}) {
560
540
  const { dbFilter, effectiveRepo } = await resolveScope(scope);
561
541
  const boundedFilter = { ...dbFilter, createdBefore };
562
542
  const embedding = await getEmbedding(query);
563
- let similar = await findSimilar(embedding, limit, SEARCH_THRESHOLD, undefined, boundedFilter);
543
+ // LM: decisions this person marked not-a-decision are skipped, so ask for that many extra.
544
+ const judge = await activeJudge();
545
+ const hidden = judge ? notADecisionMarks(dbPath, judge) : new Map();
546
+ const dropNotes = [];
547
+ const visible = (rows) => {
548
+ const split = splitRetrieved(rows, hidden, limit, (id) => db.getDecisionById(id)?.title, 'answer');
549
+ dropNotes.splice(0, dropNotes.length, ...split.notes);
550
+ return split.kept;
551
+ };
552
+ let similar = visible(await findSimilar(embedding, limit + hidden.size, SEARCH_THRESHOLD, undefined, boundedFilter));
564
553
  // A natural-language question embeds less densely than its subject does, so on a
565
554
  // small graph it can miss a decision that its own content words hit. Retry once,
566
555
  // only on an empty result, mirroring the gateway's own keyword-to-semantic
@@ -569,7 +558,7 @@ export function createLocalGatewayClient(dbPath, clientOpts = {}) {
569
558
  if (!similar.length) {
570
559
  const reduced = contentWordQuery(query);
571
560
  if (reduced) {
572
- similar = await findSimilar(await getEmbedding(reduced), limit, SEARCH_THRESHOLD, undefined, boundedFilter);
561
+ similar = visible(await findSimilar(await getEmbedding(reduced), limit + hidden.size, SEARCH_THRESHOLD, undefined, boundedFilter));
573
562
  }
574
563
  }
575
564
  const results = similar
@@ -603,7 +592,7 @@ export function createLocalGatewayClient(dbPath, clientOpts = {}) {
603
592
  };
604
593
  })
605
594
  .filter((d) => d !== null);
606
- return { results, count: results.length, strategy: 'semantic', scope: effectiveRepo };
595
+ return { results, count: results.length, strategy: 'semantic', scope: effectiveRepo, ...(dropNotes.length ? { notes: dropNotes } : {}) };
607
596
  },
608
597
  async checkAlignment(diff, _context,
609
598
  // 'exhaustive' deliberately collapses into 'full' here: local mode has no gateway
@@ -620,7 +609,10 @@ export function createLocalGatewayClient(dbPath, clientOpts = {}) {
620
609
  // the stricter bar. One constant could not serve both.
621
610
  const threshold = opts.depth === 'related' ? RETRIEVAL_RELATES_THRESHOLD : RELATES_THRESHOLD;
622
611
  const embedding = await getEmbedding(diff);
623
- const similar = await findSimilar(embedding, 5, threshold);
612
+ const judge = await activeJudge();
613
+ const hidden = judge ? notADecisionMarks(dbPath, judge) : new Map();
614
+ const retrieved = splitRetrieved(await findSimilar(embedding, 5 + hidden.size, threshold), hidden, 5, (id) => db.getDecisionById(id)?.title);
615
+ const similar = retrieved.kept;
624
616
  const candidates = similar
625
617
  .map(s => {
626
618
  const row = db.getDecisionById(s.decisionId);
@@ -628,7 +620,7 @@ export function createLocalGatewayClient(dbPath, clientOpts = {}) {
628
620
  })
629
621
  .filter((d) => d !== null);
630
622
  if (!candidates.length) {
631
- return { status: 'no-context', confidence: 0, relevant_decisions: [], conflicts: [], message: 'No related decisions found in your local graph.' };
623
+ return emptyCheck(retrieved);
632
624
  }
633
625
  // `depth:'related'` means retrieval only, and honouring it matters more here than in the
634
626
  // cloud client. The editor hook asks for it to fit a <=10s budget (check.ts), but in
@@ -656,6 +648,7 @@ export function createLocalGatewayClient(dbPath, clientOpts = {}) {
656
648
  ...provenanceOf(c),
657
649
  })),
658
650
  conflicts: [],
651
+ ...(retrieved.notes.length ? { notes: [...bannerFor(retrieved.agentApplied), ...retrieved.notes] } : {}),
659
652
  message: `Found ${candidates.length} related decision(s) - retrieval only, not adjudicated.`,
660
653
  };
661
654
  }
@@ -700,8 +693,13 @@ export function createLocalGatewayClient(dbPath, clientOpts = {}) {
700
693
  similarity: c.score,
701
694
  });
702
695
  }
703
- const relevant_decisions = typed.map(t => ({ id: t.id, title: t.title, summary: t.summary, similarity: t.similarity, url: t.url, ...t.provenance }));
704
- const conflicts = typed
696
+ // LM: a decision a person said was replaced is named as replaced, with its successor.
697
+ const replacedBy = (id) => {
698
+ const r = relationFieldsFor(id);
699
+ return r.status === 'superseded' ? { status: r.status, successor: r.successor } : {};
700
+ };
701
+ const relevant_decisions = typed.map(t => ({ id: t.id, title: t.title, summary: t.summary, similarity: t.similarity, url: t.url, ...t.provenance, ...replacedBy(t.id) }));
702
+ const rawConflicts = typed
705
703
  .filter(t => t.relationship === 'conflicts_with' || t.relationship === 'contradicts')
706
704
  .map(t => ({
707
705
  decision_id: t.id,
@@ -712,6 +710,13 @@ export function createLocalGatewayClient(dbPath, clientOpts = {}) {
712
710
  reason: t.reason ?? 'Conflicts with an existing decision in your local graph',
713
711
  severity: (t.confidence >= 0.8 ? 'critical' : 'warning'),
714
712
  }));
713
+ // LM: this person's false-alarm marks hide a hit for exactly this set of files, or annotate it.
714
+ const files = filesFromDiff(diff);
715
+ const reviewed = judge ? reviewConflicts(dbPath, judge, rawConflicts, contextKeyFor(files), files) : { conflicts: rawConflicts, notes: [], agentApplied: [] };
716
+ const conflicts = reviewed.conflicts;
717
+ // LM: say what a mark changed - a decision left out, a decision a person declared replaced.
718
+ const allNotes = checkNotes(dbPath, judge, retrieved, relevant_decisions, reviewed, files);
719
+ const notes = allNotes.length ? { notes: allNotes } : {};
715
720
  // ALI-414: a candidate we retrieved but could not classify is exactly the case
716
721
  // where we do not know - it could be the conflict. Reporting `aligned` there is
717
722
  // a fail-open, and an agent reads `aligned` as permission to proceed. A conflict
@@ -724,6 +729,8 @@ export function createLocalGatewayClient(dbPath, clientOpts = {}) {
724
729
  confidence,
725
730
  relevant_decisions,
726
731
  conflicts,
732
+ ...notes,
733
+ ...(offeredFiles(files) ? { checked_files: files } : {}),
727
734
  message: `This change conflicts with ${conflicts.length} existing decision(s) in your local graph - review before proceeding.`,
728
735
  };
729
736
  }
@@ -747,6 +754,7 @@ export function createLocalGatewayClient(dbPath, clientOpts = {}) {
747
754
  confidence: 0,
748
755
  relevant_decisions,
749
756
  conflicts: [],
757
+ ...notes,
750
758
  message: `Could not check ${relevant_decisions.length} related decision(s) - the relationship classifier did not run. ` +
751
759
  `This is NOT a pass: treat it as unchecked and review these decisions before proceeding.${hint}`,
752
760
  };
@@ -756,6 +764,7 @@ export function createLocalGatewayClient(dbPath, clientOpts = {}) {
756
764
  confidence,
757
765
  relevant_decisions,
758
766
  conflicts,
767
+ ...notes,
759
768
  message: `Found ${relevant_decisions.length} related decision(s) to review.`,
760
769
  };
761
770
  },
@@ -800,8 +809,10 @@ export function createLocalGatewayClient(dbPath, clientOpts = {}) {
800
809
  ...db.listLinks({ relation: 'conflicts_with' }),
801
810
  ...db.listLinks({ relation: 'contradicts' }),
802
811
  ];
803
- return { links, conflict_count: links.length };
812
+ const judge = await activeJudge();
813
+ return { links: judge ? annotatePairs(dbPath, judge, links) : links, conflict_count: links.length };
804
814
  },
805
815
  };
816
+ return client;
806
817
  }
807
818
  //# sourceMappingURL=local-gateway-client.js.map