@nanonets/graft 0.24.0 → 0.25.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 (791) hide show
  1. package/README.md +26 -21
  2. package/dist/ask/ask.d.ts +8 -0
  3. package/dist/ask/ask.d.ts.map +1 -1
  4. package/dist/ask/ask.js +33 -12
  5. package/dist/ask/ask.js.map +1 -1
  6. package/dist/blast/render.js +1 -1
  7. package/dist/blast/render.js.map +1 -1
  8. package/dist/brand.js +1 -1
  9. package/dist/brand.js.map +1 -1
  10. package/dist/check/learning-edits.d.ts +18 -3
  11. package/dist/check/learning-edits.d.ts.map +1 -1
  12. package/dist/check/learning-edits.js +54 -10
  13. package/dist/check/learning-edits.js.map +1 -1
  14. package/dist/check/local-check.d.ts +7 -3
  15. package/dist/check/local-check.d.ts.map +1 -1
  16. package/dist/check/local-check.js +55 -11
  17. package/dist/check/local-check.js.map +1 -1
  18. package/dist/check/types.d.ts +11 -2
  19. package/dist/check/types.d.ts.map +1 -1
  20. package/dist/claude/format.d.ts +11 -7
  21. package/dist/claude/format.d.ts.map +1 -1
  22. package/dist/claude/format.js +50 -28
  23. package/dist/claude/format.js.map +1 -1
  24. package/dist/claude/hook-io.d.ts +44 -0
  25. package/dist/claude/hook-io.d.ts.map +1 -0
  26. package/dist/claude/hook-io.js +144 -0
  27. package/dist/claude/hook-io.js.map +1 -0
  28. package/dist/claude/hook-layers.d.ts +4 -2
  29. package/dist/claude/hook-layers.d.ts.map +1 -1
  30. package/dist/claude/hook-layers.js +21 -4
  31. package/dist/claude/hook-layers.js.map +1 -1
  32. package/dist/claude/hooks.d.ts +9 -32
  33. package/dist/claude/hooks.d.ts.map +1 -1
  34. package/dist/claude/hooks.js +154 -350
  35. package/dist/claude/hooks.js.map +1 -1
  36. package/dist/claude/init.d.ts.map +1 -1
  37. package/dist/claude/init.js +56 -18
  38. package/dist/claude/init.js.map +1 -1
  39. package/dist/claude/note-signals.d.ts +6 -0
  40. package/dist/claude/note-signals.d.ts.map +1 -1
  41. package/dist/claude/note-signals.js +14 -3
  42. package/dist/claude/note-signals.js.map +1 -1
  43. package/dist/claude/post-bash.d.ts +26 -0
  44. package/dist/claude/post-bash.d.ts.map +1 -0
  45. package/dist/claude/post-bash.js +191 -0
  46. package/dist/claude/post-bash.js.map +1 -0
  47. package/dist/claude/pre-bash-skills.d.ts +21 -0
  48. package/dist/claude/pre-bash-skills.d.ts.map +1 -0
  49. package/dist/claude/pre-bash-skills.js +253 -0
  50. package/dist/claude/pre-bash-skills.js.map +1 -0
  51. package/dist/claude/pre-bash.d.ts +50 -0
  52. package/dist/claude/pre-bash.d.ts.map +1 -0
  53. package/dist/claude/pre-bash.js +245 -0
  54. package/dist/claude/pre-bash.js.map +1 -0
  55. package/dist/claude/prompt-consent.d.ts +19 -0
  56. package/dist/claude/prompt-consent.d.ts.map +1 -0
  57. package/dist/claude/prompt-consent.js +14 -0
  58. package/dist/claude/prompt-consent.js.map +1 -0
  59. package/dist/claude/prompt-hook.d.ts +76 -0
  60. package/dist/claude/prompt-hook.d.ts.map +1 -0
  61. package/dist/claude/prompt-hook.js +303 -0
  62. package/dist/claude/prompt-hook.js.map +1 -0
  63. package/dist/claude/prompt-skills.d.ts +19 -0
  64. package/dist/claude/prompt-skills.d.ts.map +1 -0
  65. package/dist/claude/prompt-skills.js +305 -0
  66. package/dist/claude/prompt-skills.js.map +1 -0
  67. package/dist/claude/session-metrics.js +4 -4
  68. package/dist/claude/session-metrics.js.map +1 -1
  69. package/dist/claude/settings-merge.d.ts +10 -0
  70. package/dist/claude/settings-merge.d.ts.map +1 -1
  71. package/dist/claude/settings-merge.js +46 -17
  72. package/dist/claude/settings-merge.js.map +1 -1
  73. package/dist/claude/shim-template.d.ts.map +1 -1
  74. package/dist/claude/shim-template.js +86 -28
  75. package/dist/claude/shim-template.js.map +1 -1
  76. package/dist/claude/skill-template.d.ts +2 -0
  77. package/dist/claude/skill-template.d.ts.map +1 -1
  78. package/dist/claude/skill-template.js +53 -34
  79. package/dist/claude/skill-template.js.map +1 -1
  80. package/dist/claude/skill-use.d.ts +16 -0
  81. package/dist/claude/skill-use.d.ts.map +1 -0
  82. package/dist/claude/skill-use.js +78 -0
  83. package/dist/claude/skill-use.js.map +1 -0
  84. package/dist/claude/skills-hook-util.d.ts +25 -0
  85. package/dist/claude/skills-hook-util.d.ts.map +1 -0
  86. package/dist/claude/skills-hook-util.js +71 -0
  87. package/dist/claude/skills-hook-util.js.map +1 -0
  88. package/dist/claude/skills-wiring.d.ts +26 -0
  89. package/dist/claude/skills-wiring.d.ts.map +1 -0
  90. package/dist/claude/skills-wiring.js +110 -0
  91. package/dist/claude/skills-wiring.js.map +1 -0
  92. package/dist/claude/start-init.d.ts +13 -0
  93. package/dist/claude/start-init.d.ts.map +1 -0
  94. package/dist/claude/start-init.js +75 -0
  95. package/dist/claude/start-init.js.map +1 -0
  96. package/dist/claude/start-skills.d.ts +31 -0
  97. package/dist/claude/start-skills.d.ts.map +1 -0
  98. package/dist/claude/start-skills.js +274 -0
  99. package/dist/claude/start-skills.js.map +1 -0
  100. package/dist/claude/state.d.ts +19 -7
  101. package/dist/claude/state.d.ts.map +1 -1
  102. package/dist/claude/state.js +59 -4
  103. package/dist/claude/state.js.map +1 -1
  104. package/dist/claude/stop-skills.d.ts +23 -0
  105. package/dist/claude/stop-skills.d.ts.map +1 -0
  106. package/dist/claude/stop-skills.js +233 -0
  107. package/dist/claude/stop-skills.js.map +1 -0
  108. package/dist/claude/stop.d.ts +23 -0
  109. package/dist/claude/stop.d.ts.map +1 -0
  110. package/dist/claude/stop.js +219 -0
  111. package/dist/claude/stop.js.map +1 -0
  112. package/dist/claude/tally.d.ts +29 -41
  113. package/dist/claude/tally.d.ts.map +1 -1
  114. package/dist/claude/tally.js +111 -165
  115. package/dist/claude/tally.js.map +1 -1
  116. package/dist/claude/walls-hook.d.ts +52 -0
  117. package/dist/claude/walls-hook.d.ts.map +1 -0
  118. package/dist/claude/walls-hook.js +279 -0
  119. package/dist/claude/walls-hook.js.map +1 -0
  120. package/dist/cli-epilogue.d.ts.map +1 -1
  121. package/dist/cli-epilogue.js +24 -14
  122. package/dist/cli-epilogue.js.map +1 -1
  123. package/dist/cli-meta.js +3 -3
  124. package/dist/cli-meta.js.map +1 -1
  125. package/dist/cli-picker.d.ts +24 -0
  126. package/dist/cli-picker.d.ts.map +1 -1
  127. package/dist/cli-picker.js +44 -11
  128. package/dist/cli-picker.js.map +1 -1
  129. package/dist/cli.d.ts.map +1 -1
  130. package/dist/cli.js +475 -390
  131. package/dist/cli.js.map +1 -1
  132. package/dist/cloud/head-learnings.d.ts +13 -0
  133. package/dist/cloud/head-learnings.d.ts.map +1 -0
  134. package/dist/cloud/head-learnings.js +84 -0
  135. package/dist/cloud/head-learnings.js.map +1 -0
  136. package/dist/cloud/lookup-activity.d.ts +18 -0
  137. package/dist/cloud/lookup-activity.d.ts.map +1 -0
  138. package/dist/cloud/lookup-activity.js +56 -0
  139. package/dist/cloud/lookup-activity.js.map +1 -0
  140. package/dist/cloud/nudge.d.ts +15 -7
  141. package/dist/cloud/nudge.d.ts.map +1 -1
  142. package/dist/cloud/nudge.js +45 -33
  143. package/dist/cloud/nudge.js.map +1 -1
  144. package/dist/cloud/onboarding.d.ts +273 -0
  145. package/dist/cloud/onboarding.d.ts.map +1 -0
  146. package/dist/cloud/onboarding.js +612 -0
  147. package/dist/cloud/onboarding.js.map +1 -0
  148. package/dist/cloud/other-repos.d.ts +39 -0
  149. package/dist/cloud/other-repos.d.ts.map +1 -0
  150. package/dist/cloud/other-repos.js +137 -0
  151. package/dist/cloud/other-repos.js.map +1 -0
  152. package/dist/cloud/pair.d.ts +86 -0
  153. package/dist/cloud/pair.d.ts.map +1 -0
  154. package/dist/cloud/pair.js +270 -0
  155. package/dist/cloud/pair.js.map +1 -0
  156. package/dist/cloud/workspace-sync.d.ts +75 -11
  157. package/dist/cloud/workspace-sync.d.ts.map +1 -1
  158. package/dist/cloud/workspace-sync.js +409 -53
  159. package/dist/cloud/workspace-sync.js.map +1 -1
  160. package/dist/cloud/workspace.d.ts +95 -10
  161. package/dist/cloud/workspace.d.ts.map +1 -1
  162. package/dist/cloud/workspace.js +112 -9
  163. package/dist/cloud/workspace.js.map +1 -1
  164. package/dist/graph/native.d.ts +2 -0
  165. package/dist/graph/native.d.ts.map +1 -1
  166. package/dist/graph/native.js +29 -4
  167. package/dist/graph/native.js.map +1 -1
  168. package/dist/hosts/claude-global.d.ts +14 -0
  169. package/dist/hosts/claude-global.d.ts.map +1 -1
  170. package/dist/hosts/claude-global.js +39 -4
  171. package/dist/hosts/claude-global.js.map +1 -1
  172. package/dist/hosts/codex-hooks.d.ts +6 -0
  173. package/dist/hosts/codex-hooks.d.ts.map +1 -1
  174. package/dist/hosts/codex-hooks.js +89 -16
  175. package/dist/hosts/codex-hooks.js.map +1 -1
  176. package/dist/hosts/codex-trust.d.ts +28 -0
  177. package/dist/hosts/codex-trust.d.ts.map +1 -0
  178. package/dist/hosts/codex-trust.js +280 -0
  179. package/dist/hosts/codex-trust.js.map +1 -0
  180. package/dist/hosts/cursor-hooks.d.ts.map +1 -1
  181. package/dist/hosts/cursor-hooks.js +3 -1
  182. package/dist/hosts/cursor-hooks.js.map +1 -1
  183. package/dist/init/candidates.d.ts +60 -0
  184. package/dist/init/candidates.d.ts.map +1 -0
  185. package/dist/init/candidates.js +202 -0
  186. package/dist/init/candidates.js.map +1 -0
  187. package/dist/init/claude-call.d.ts +51 -0
  188. package/dist/init/claude-call.d.ts.map +1 -0
  189. package/dist/init/claude-call.js +199 -0
  190. package/dist/init/claude-call.js.map +1 -0
  191. package/dist/init/discover-worker.d.ts +18 -0
  192. package/dist/init/discover-worker.d.ts.map +1 -0
  193. package/dist/init/discover-worker.js +111 -0
  194. package/dist/init/discover-worker.js.map +1 -0
  195. package/dist/init/handover.d.ts +16 -0
  196. package/dist/init/handover.d.ts.map +1 -0
  197. package/dist/init/handover.js +92 -0
  198. package/dist/init/handover.js.map +1 -0
  199. package/dist/init/howtos.d.ts +20 -0
  200. package/dist/init/howtos.d.ts.map +1 -0
  201. package/dist/init/howtos.js +90 -0
  202. package/dist/init/howtos.js.map +1 -0
  203. package/dist/init/init-record.d.ts +134 -0
  204. package/dist/init/init-record.d.ts.map +1 -0
  205. package/dist/init/init-record.js +339 -0
  206. package/dist/init/init-record.js.map +1 -0
  207. package/dist/init/install-paths.d.ts +6 -0
  208. package/dist/init/install-paths.d.ts.map +1 -0
  209. package/dist/init/install-paths.js +87 -0
  210. package/dist/init/install-paths.js.map +1 -0
  211. package/dist/init/install-record.d.ts +21 -0
  212. package/dist/init/install-record.d.ts.map +1 -0
  213. package/dist/init/install-record.js +144 -0
  214. package/dist/init/install-record.js.map +1 -0
  215. package/dist/init/keep-answer.d.ts +43 -0
  216. package/dist/init/keep-answer.d.ts.map +1 -0
  217. package/dist/init/keep-answer.js +118 -0
  218. package/dist/init/keep-answer.js.map +1 -0
  219. package/dist/init/keep-gate.d.ts +30 -0
  220. package/dist/init/keep-gate.d.ts.map +1 -0
  221. package/dist/init/keep-gate.js +178 -0
  222. package/dist/init/keep-gate.js.map +1 -0
  223. package/dist/init/keep-list.d.ts +67 -0
  224. package/dist/init/keep-list.d.ts.map +1 -0
  225. package/dist/init/keep-list.js +232 -0
  226. package/dist/init/keep-list.js.map +1 -0
  227. package/dist/init/keep.d.ts +52 -0
  228. package/dist/init/keep.d.ts.map +1 -0
  229. package/dist/init/keep.js +393 -0
  230. package/dist/init/keep.js.map +1 -0
  231. package/dist/init/look-back-mine.d.ts +37 -0
  232. package/dist/init/look-back-mine.d.ts.map +1 -0
  233. package/dist/init/look-back-mine.js +215 -0
  234. package/dist/init/look-back-mine.js.map +1 -0
  235. package/dist/init/look-back.d.ts +81 -0
  236. package/dist/init/look-back.d.ts.map +1 -0
  237. package/dist/init/look-back.js +170 -0
  238. package/dist/init/look-back.js.map +1 -0
  239. package/dist/init/miners.d.ts +46 -0
  240. package/dist/init/miners.d.ts.map +1 -0
  241. package/dist/init/miners.js +141 -0
  242. package/dist/init/miners.js.map +1 -0
  243. package/dist/init/name-call.d.ts +37 -0
  244. package/dist/init/name-call.d.ts.map +1 -0
  245. package/dist/init/name-call.js +151 -0
  246. package/dist/init/name-call.js.map +1 -0
  247. package/dist/init/plain-file.d.ts +11 -0
  248. package/dist/init/plain-file.d.ts.map +1 -0
  249. package/dist/init/plain-file.js +83 -0
  250. package/dist/init/plain-file.js.map +1 -0
  251. package/dist/init/prefs.d.ts +70 -0
  252. package/dist/init/prefs.d.ts.map +1 -0
  253. package/dist/init/prefs.js +282 -0
  254. package/dist/init/prefs.js.map +1 -0
  255. package/dist/init/relay.d.ts +15 -0
  256. package/dist/init/relay.d.ts.map +1 -0
  257. package/dist/init/relay.js +15 -0
  258. package/dist/init/relay.js.map +1 -0
  259. package/dist/init/replay-runs.d.ts +121 -0
  260. package/dist/init/replay-runs.d.ts.map +1 -0
  261. package/dist/init/replay-runs.js +457 -0
  262. package/dist/init/replay-runs.js.map +1 -0
  263. package/dist/init/replay-tamper.d.ts +18 -0
  264. package/dist/init/replay-tamper.d.ts.map +1 -0
  265. package/dist/init/replay-tamper.js +87 -0
  266. package/dist/init/replay-tamper.js.map +1 -0
  267. package/dist/init/review-screen.d.ts +74 -0
  268. package/dist/init/review-screen.d.ts.map +1 -0
  269. package/dist/init/review-screen.js +258 -0
  270. package/dist/init/review-screen.js.map +1 -0
  271. package/dist/init/review-tty.d.ts +29 -0
  272. package/dist/init/review-tty.d.ts.map +1 -0
  273. package/dist/init/review-tty.js +218 -0
  274. package/dist/init/review-tty.js.map +1 -0
  275. package/dist/init/review.d.ts +12 -0
  276. package/dist/init/review.d.ts.map +1 -0
  277. package/dist/init/review.js +12 -0
  278. package/dist/init/review.js.map +1 -0
  279. package/dist/init/run.d.ts +87 -0
  280. package/dist/init/run.d.ts.map +1 -0
  281. package/dist/init/run.js +347 -0
  282. package/dist/init/run.js.map +1 -0
  283. package/dist/init/sessions.d.ts +63 -0
  284. package/dist/init/sessions.d.ts.map +1 -0
  285. package/dist/init/sessions.js +377 -0
  286. package/dist/init/sessions.js.map +1 -0
  287. package/dist/init/transcript.d.ts +81 -0
  288. package/dist/init/transcript.d.ts.map +1 -0
  289. package/dist/init/transcript.js +216 -0
  290. package/dist/init/transcript.js.map +1 -0
  291. package/dist/init/types.d.ts +139 -0
  292. package/dist/init/types.d.ts.map +1 -0
  293. package/dist/init/types.js +2 -0
  294. package/dist/init/types.js.map +1 -0
  295. package/dist/mcp/brains.d.ts +72 -0
  296. package/dist/mcp/brains.d.ts.map +1 -0
  297. package/dist/mcp/brains.js +220 -0
  298. package/dist/mcp/brains.js.map +1 -0
  299. package/dist/mcp/server.d.ts +3 -1
  300. package/dist/mcp/server.d.ts.map +1 -1
  301. package/dist/mcp/server.js +40 -5
  302. package/dist/mcp/server.js.map +1 -1
  303. package/dist/mcp/tools.d.ts.map +1 -1
  304. package/dist/mcp/tools.js +7 -2
  305. package/dist/mcp/tools.js.map +1 -1
  306. package/dist/notes/cold-start.d.ts +5 -184
  307. package/dist/notes/cold-start.d.ts.map +1 -1
  308. package/dist/notes/cold-start.js +5 -575
  309. package/dist/notes/cold-start.js.map +1 -1
  310. package/dist/notes/edit-overlap.d.ts.map +1 -1
  311. package/dist/notes/edit-overlap.js +4 -1
  312. package/dist/notes/edit-overlap.js.map +1 -1
  313. package/dist/notes/every-repo.d.ts +18 -0
  314. package/dist/notes/every-repo.d.ts.map +1 -0
  315. package/dist/notes/every-repo.js +86 -0
  316. package/dist/notes/every-repo.js.map +1 -0
  317. package/dist/notes/guardrails.d.ts +8 -0
  318. package/dist/notes/guardrails.d.ts.map +1 -0
  319. package/dist/notes/guardrails.js +38 -0
  320. package/dist/notes/guardrails.js.map +1 -0
  321. package/dist/notes/lesson-index.d.ts +13 -0
  322. package/dist/notes/lesson-index.d.ts.map +1 -0
  323. package/dist/notes/lesson-index.js +135 -0
  324. package/dist/notes/lesson-index.js.map +1 -0
  325. package/dist/notes/linked-learnings.d.ts +8 -0
  326. package/dist/notes/linked-learnings.d.ts.map +1 -0
  327. package/dist/notes/linked-learnings.js +113 -0
  328. package/dist/notes/linked-learnings.js.map +1 -0
  329. package/dist/notes/notes.d.ts +8 -4
  330. package/dist/notes/notes.d.ts.map +1 -1
  331. package/dist/notes/notes.js +9 -7
  332. package/dist/notes/notes.js.map +1 -1
  333. package/dist/notes/pr-reviews.d.ts +4 -0
  334. package/dist/notes/pr-reviews.d.ts.map +1 -1
  335. package/dist/notes/pr-reviews.js +6 -5
  336. package/dist/notes/pr-reviews.js.map +1 -1
  337. package/dist/notes/replace.d.ts +14 -0
  338. package/dist/notes/replace.d.ts.map +1 -0
  339. package/dist/notes/replace.js +38 -0
  340. package/dist/notes/replace.js.map +1 -0
  341. package/dist/notes/repo-notes-dir.d.ts +2 -0
  342. package/dist/notes/repo-notes-dir.d.ts.map +1 -0
  343. package/dist/notes/repo-notes-dir.js +16 -0
  344. package/dist/notes/repo-notes-dir.js.map +1 -0
  345. package/dist/notes/repo-trail.d.ts +1 -1
  346. package/dist/notes/repo-trail.d.ts.map +1 -1
  347. package/dist/notes/repo-trail.js +24 -4
  348. package/dist/notes/repo-trail.js.map +1 -1
  349. package/dist/search/grep.d.ts.map +1 -1
  350. package/dist/search/grep.js +4 -2
  351. package/dist/search/grep.js.map +1 -1
  352. package/dist/search/user-regexp.d.ts +26 -0
  353. package/dist/search/user-regexp.d.ts.map +1 -0
  354. package/dist/search/user-regexp.js +150 -0
  355. package/dist/search/user-regexp.js.map +1 -0
  356. package/dist/skills/anchors-cli.d.ts +38 -0
  357. package/dist/skills/anchors-cli.d.ts.map +1 -0
  358. package/dist/skills/anchors-cli.js +279 -0
  359. package/dist/skills/anchors-cli.js.map +1 -0
  360. package/dist/skills/anchors-git.d.ts +29 -0
  361. package/dist/skills/anchors-git.d.ts.map +1 -0
  362. package/dist/skills/anchors-git.js +241 -0
  363. package/dist/skills/anchors-git.js.map +1 -0
  364. package/dist/skills/anchors-wide.d.ts +25 -0
  365. package/dist/skills/anchors-wide.d.ts.map +1 -0
  366. package/dist/skills/anchors-wide.js +481 -0
  367. package/dist/skills/anchors-wide.js.map +1 -0
  368. package/dist/skills/anchors.d.ts +32 -0
  369. package/dist/skills/anchors.d.ts.map +1 -0
  370. package/dist/skills/anchors.js +485 -0
  371. package/dist/skills/anchors.js.map +1 -0
  372. package/dist/skills/check-result.d.ts +26 -0
  373. package/dist/skills/check-result.d.ts.map +1 -0
  374. package/dist/skills/check-result.js +46 -0
  375. package/dist/skills/check-result.js.map +1 -0
  376. package/dist/skills/cli-skills-1b.d.ts +17 -0
  377. package/dist/skills/cli-skills-1b.d.ts.map +1 -0
  378. package/dist/skills/cli-skills-1b.js +166 -0
  379. package/dist/skills/cli-skills-1b.js.map +1 -0
  380. package/dist/skills/cli-skills-2.d.ts +35 -0
  381. package/dist/skills/cli-skills-2.d.ts.map +1 -0
  382. package/dist/skills/cli-skills-2.js +129 -0
  383. package/dist/skills/cli-skills-2.js.map +1 -0
  384. package/dist/skills/cli-skills-report-1b.d.ts +49 -0
  385. package/dist/skills/cli-skills-report-1b.d.ts.map +1 -0
  386. package/dist/skills/cli-skills-report-1b.js +191 -0
  387. package/dist/skills/cli-skills-report-1b.js.map +1 -0
  388. package/dist/skills/cli-skills-report.d.ts +86 -0
  389. package/dist/skills/cli-skills-report.d.ts.map +1 -0
  390. package/dist/skills/cli-skills-report.js +121 -0
  391. package/dist/skills/cli-skills-report.js.map +1 -0
  392. package/dist/skills/cli-skills.d.ts +30 -0
  393. package/dist/skills/cli-skills.d.ts.map +1 -0
  394. package/dist/skills/cli-skills.js +379 -0
  395. package/dist/skills/cli-skills.js.map +1 -0
  396. package/dist/skills/codex-sandbox.d.ts +6 -0
  397. package/dist/skills/codex-sandbox.d.ts.map +1 -0
  398. package/dist/skills/codex-sandbox.js +55 -0
  399. package/dist/skills/codex-sandbox.js.map +1 -0
  400. package/dist/skills/compile-split.d.ts +57 -0
  401. package/dist/skills/compile-split.d.ts.map +1 -0
  402. package/dist/skills/compile-split.js +550 -0
  403. package/dist/skills/compile-split.js.map +1 -0
  404. package/dist/skills/compile-version.d.ts +37 -0
  405. package/dist/skills/compile-version.d.ts.map +1 -0
  406. package/dist/skills/compile-version.js +56 -0
  407. package/dist/skills/compile-version.js.map +1 -0
  408. package/dist/skills/compile-waits.d.ts +12 -0
  409. package/dist/skills/compile-waits.d.ts.map +1 -0
  410. package/dist/skills/compile-waits.js +52 -0
  411. package/dist/skills/compile-waits.js.map +1 -0
  412. package/dist/skills/compile-words.d.ts +85 -0
  413. package/dist/skills/compile-words.d.ts.map +1 -0
  414. package/dist/skills/compile-words.js +445 -0
  415. package/dist/skills/compile-words.js.map +1 -0
  416. package/dist/skills/compile.d.ts +42 -0
  417. package/dist/skills/compile.d.ts.map +1 -0
  418. package/dist/skills/compile.js +505 -0
  419. package/dist/skills/compile.js.map +1 -0
  420. package/dist/skills/credit-facts.d.ts +8 -0
  421. package/dist/skills/credit-facts.d.ts.map +1 -0
  422. package/dist/skills/credit-facts.js +32 -0
  423. package/dist/skills/credit-facts.js.map +1 -0
  424. package/dist/skills/credit.d.ts +86 -0
  425. package/dist/skills/credit.d.ts.map +1 -0
  426. package/dist/skills/credit.js +259 -0
  427. package/dist/skills/credit.js.map +1 -0
  428. package/dist/skills/directive-words.d.ts +11 -0
  429. package/dist/skills/directive-words.d.ts.map +1 -0
  430. package/dist/skills/directive-words.js +33 -0
  431. package/dist/skills/directive-words.js.map +1 -0
  432. package/dist/skills/fidelity.d.ts +42 -0
  433. package/dist/skills/fidelity.d.ts.map +1 -0
  434. package/dist/skills/fidelity.js +138 -0
  435. package/dist/skills/fidelity.js.map +1 -0
  436. package/dist/skills/fold-gated.d.ts +3 -0
  437. package/dist/skills/fold-gated.d.ts.map +1 -0
  438. package/dist/skills/fold-gated.js +78 -0
  439. package/dist/skills/fold-gated.js.map +1 -0
  440. package/dist/skills/fold.d.ts +87 -0
  441. package/dist/skills/fold.d.ts.map +1 -0
  442. package/dist/skills/fold.js +348 -0
  443. package/dist/skills/fold.js.map +1 -0
  444. package/dist/skills/follow-learnings.d.ts +128 -0
  445. package/dist/skills/follow-learnings.d.ts.map +1 -0
  446. package/dist/skills/follow-learnings.js +278 -0
  447. package/dist/skills/follow-learnings.js.map +1 -0
  448. package/dist/skills/forget-notice.d.ts +44 -0
  449. package/dist/skills/forget-notice.d.ts.map +1 -0
  450. package/dist/skills/forget-notice.js +131 -0
  451. package/dist/skills/forget-notice.js.map +1 -0
  452. package/dist/skills/front-version.d.ts +12 -0
  453. package/dist/skills/front-version.d.ts.map +1 -0
  454. package/dist/skills/front-version.js +87 -0
  455. package/dist/skills/front-version.js.map +1 -0
  456. package/dist/skills/host-facts.d.ts +51 -0
  457. package/dist/skills/host-facts.d.ts.map +1 -0
  458. package/dist/skills/host-facts.js +134 -0
  459. package/dist/skills/host-facts.js.map +1 -0
  460. package/dist/skills/learning-steps.d.ts +43 -0
  461. package/dist/skills/learning-steps.d.ts.map +1 -0
  462. package/dist/skills/learning-steps.js +294 -0
  463. package/dist/skills/learning-steps.js.map +1 -0
  464. package/dist/skills/ledger.d.ts +43 -0
  465. package/dist/skills/ledger.d.ts.map +1 -0
  466. package/dist/skills/ledger.js +336 -0
  467. package/dist/skills/ledger.js.map +1 -0
  468. package/dist/skills/lesson-gate.d.ts +25 -0
  469. package/dist/skills/lesson-gate.d.ts.map +1 -0
  470. package/dist/skills/lesson-gate.js +316 -0
  471. package/dist/skills/lesson-gate.js.map +1 -0
  472. package/dist/skills/lessons.d.ts +60 -0
  473. package/dist/skills/lessons.d.ts.map +1 -0
  474. package/dist/skills/lessons.js +396 -0
  475. package/dist/skills/lessons.js.map +1 -0
  476. package/dist/skills/offer-answers.d.ts +20 -0
  477. package/dist/skills/offer-answers.d.ts.map +1 -0
  478. package/dist/skills/offer-answers.js +51 -0
  479. package/dist/skills/offer-answers.js.map +1 -0
  480. package/dist/skills/offer-drift.d.ts +35 -0
  481. package/dist/skills/offer-drift.d.ts.map +1 -0
  482. package/dist/skills/offer-drift.js +98 -0
  483. package/dist/skills/offer-drift.js.map +1 -0
  484. package/dist/skills/offer-lesson.d.ts +31 -0
  485. package/dist/skills/offer-lesson.d.ts.map +1 -0
  486. package/dist/skills/offer-lesson.js +123 -0
  487. package/dist/skills/offer-lesson.js.map +1 -0
  488. package/dist/skills/offer-lines.d.ts +40 -0
  489. package/dist/skills/offer-lines.d.ts.map +1 -0
  490. package/dist/skills/offer-lines.js +80 -0
  491. package/dist/skills/offer-lines.js.map +1 -0
  492. package/dist/skills/offer-moment.d.ts +102 -0
  493. package/dist/skills/offer-moment.d.ts.map +1 -0
  494. package/dist/skills/offer-moment.js +260 -0
  495. package/dist/skills/offer-moment.js.map +1 -0
  496. package/dist/skills/offer-repair.d.ts +36 -0
  497. package/dist/skills/offer-repair.d.ts.map +1 -0
  498. package/dist/skills/offer-repair.js +212 -0
  499. package/dist/skills/offer-repair.js.map +1 -0
  500. package/dist/skills/offer-retire.d.ts +53 -0
  501. package/dist/skills/offer-retire.d.ts.map +1 -0
  502. package/dist/skills/offer-retire.js +149 -0
  503. package/dist/skills/offer-retire.js.map +1 -0
  504. package/dist/skills/offer-update.d.ts +54 -0
  505. package/dist/skills/offer-update.d.ts.map +1 -0
  506. package/dist/skills/offer-update.js +115 -0
  507. package/dist/skills/offer-update.js.map +1 -0
  508. package/dist/skills/offer-words-1b.d.ts +32 -0
  509. package/dist/skills/offer-words-1b.d.ts.map +1 -0
  510. package/dist/skills/offer-words-1b.js +80 -0
  511. package/dist/skills/offer-words-1b.js.map +1 -0
  512. package/dist/skills/offer-words-2.d.ts +123 -0
  513. package/dist/skills/offer-words-2.d.ts.map +1 -0
  514. package/dist/skills/offer-words-2.js +194 -0
  515. package/dist/skills/offer-words-2.js.map +1 -0
  516. package/dist/skills/offer-words.d.ts +65 -0
  517. package/dist/skills/offer-words.d.ts.map +1 -0
  518. package/dist/skills/offer-words.js +205 -0
  519. package/dist/skills/offer-words.js.map +1 -0
  520. package/dist/skills/offers.d.ts +66 -0
  521. package/dist/skills/offers.d.ts.map +1 -0
  522. package/dist/skills/offers.js +284 -0
  523. package/dist/skills/offers.js.map +1 -0
  524. package/dist/skills/own-folder.d.ts +9 -0
  525. package/dist/skills/own-folder.d.ts.map +1 -0
  526. package/dist/skills/own-folder.js +36 -0
  527. package/dist/skills/own-folder.js.map +1 -0
  528. package/dist/skills/person.d.ts +34 -0
  529. package/dist/skills/person.d.ts.map +1 -0
  530. package/dist/skills/person.js +102 -0
  531. package/dist/skills/person.js.map +1 -0
  532. package/dist/skills/probe-clean.d.ts +9 -0
  533. package/dist/skills/probe-clean.d.ts.map +1 -0
  534. package/dist/skills/probe-clean.js +48 -0
  535. package/dist/skills/probe-clean.js.map +1 -0
  536. package/dist/skills/probes.d.ts +26 -0
  537. package/dist/skills/probes.d.ts.map +1 -0
  538. package/dist/skills/probes.js +225 -0
  539. package/dist/skills/probes.js.map +1 -0
  540. package/dist/skills/recall.d.ts +119 -0
  541. package/dist/skills/recall.d.ts.map +1 -0
  542. package/dist/skills/recall.js +370 -0
  543. package/dist/skills/recall.js.map +1 -0
  544. package/dist/skills/receipts.d.ts +44 -0
  545. package/dist/skills/receipts.d.ts.map +1 -0
  546. package/dist/skills/receipts.js +223 -0
  547. package/dist/skills/receipts.js.map +1 -0
  548. package/dist/skills/run-checkout.d.ts +4 -0
  549. package/dist/skills/run-checkout.d.ts.map +1 -0
  550. package/dist/skills/run-checkout.js +37 -0
  551. package/dist/skills/run-checkout.js.map +1 -0
  552. package/dist/skills/runblock.d.ts +47 -0
  553. package/dist/skills/runblock.d.ts.map +1 -0
  554. package/dist/skills/runblock.js +227 -0
  555. package/dist/skills/runblock.js.map +1 -0
  556. package/dist/skills/save-gate.d.ts +64 -0
  557. package/dist/skills/save-gate.d.ts.map +1 -0
  558. package/dist/skills/save-gate.js +354 -0
  559. package/dist/skills/save-gate.js.map +1 -0
  560. package/dist/skills/save-parse.d.ts +42 -0
  561. package/dist/skills/save-parse.d.ts.map +1 -0
  562. package/dist/skills/save-parse.js +172 -0
  563. package/dist/skills/save-parse.js.map +1 -0
  564. package/dist/skills/save-store.d.ts +12 -0
  565. package/dist/skills/save-store.d.ts.map +1 -0
  566. package/dist/skills/save-store.js +22 -0
  567. package/dist/skills/save-store.js.map +1 -0
  568. package/dist/skills/save-verify.d.ts +59 -0
  569. package/dist/skills/save-verify.d.ts.map +1 -0
  570. package/dist/skills/save-verify.js +390 -0
  571. package/dist/skills/save-verify.js.map +1 -0
  572. package/dist/skills/settings.d.ts +48 -0
  573. package/dist/skills/settings.d.ts.map +1 -0
  574. package/dist/skills/settings.js +155 -0
  575. package/dist/skills/settings.js.map +1 -0
  576. package/dist/skills/skill-diff.d.ts +40 -0
  577. package/dist/skills/skill-diff.d.ts.map +1 -0
  578. package/dist/skills/skill-diff.js +191 -0
  579. package/dist/skills/skill-diff.js.map +1 -0
  580. package/dist/skills/skill-file.d.ts +24 -0
  581. package/dist/skills/skill-file.d.ts.map +1 -0
  582. package/dist/skills/skill-file.js +97 -0
  583. package/dist/skills/skill-file.js.map +1 -0
  584. package/dist/skills/skill-rebuild.d.ts +27 -0
  585. package/dist/skills/skill-rebuild.d.ts.map +1 -0
  586. package/dist/skills/skill-rebuild.js +85 -0
  587. package/dist/skills/skill-rebuild.js.map +1 -0
  588. package/dist/skills/skillmd.d.ts +17 -0
  589. package/dist/skills/skillmd.d.ts.map +1 -0
  590. package/dist/skills/skillmd.js +219 -0
  591. package/dist/skills/skillmd.js.map +1 -0
  592. package/dist/skills/skills.d.ts +28 -8
  593. package/dist/skills/skills.d.ts.map +1 -1
  594. package/dist/skills/skills.js +106 -53
  595. package/dist/skills/skills.js.map +1 -1
  596. package/dist/skills/staleness.d.ts +27 -0
  597. package/dist/skills/staleness.d.ts.map +1 -0
  598. package/dist/skills/staleness.js +178 -0
  599. package/dist/skills/staleness.js.map +1 -0
  600. package/dist/skills/state.d.ts +36 -0
  601. package/dist/skills/state.d.ts.map +1 -0
  602. package/dist/skills/state.js +259 -0
  603. package/dist/skills/state.js.map +1 -0
  604. package/dist/skills/store-fs.d.ts +77 -0
  605. package/dist/skills/store-fs.d.ts.map +1 -0
  606. package/dist/skills/store-fs.js +194 -0
  607. package/dist/skills/store-fs.js.map +1 -0
  608. package/dist/skills/store-held.d.ts +44 -0
  609. package/dist/skills/store-held.d.ts.map +1 -0
  610. package/dist/skills/store-held.js +147 -0
  611. package/dist/skills/store-held.js.map +1 -0
  612. package/dist/skills/store.d.ts +73 -0
  613. package/dist/skills/store.d.ts.map +1 -0
  614. package/dist/skills/store.js +279 -0
  615. package/dist/skills/store.js.map +1 -0
  616. package/dist/skills/types.d.ts +8 -0
  617. package/dist/skills/types.d.ts.map +1 -1
  618. package/dist/skills/update-gate.d.ts +36 -0
  619. package/dist/skills/update-gate.d.ts.map +1 -0
  620. package/dist/skills/update-gate.js +357 -0
  621. package/dist/skills/update-gate.js.map +1 -0
  622. package/dist/skills/update-plan.d.ts +40 -0
  623. package/dist/skills/update-plan.d.ts.map +1 -0
  624. package/dist/skills/update-plan.js +196 -0
  625. package/dist/skills/update-plan.js.map +1 -0
  626. package/dist/skills/validate.d.ts +11 -0
  627. package/dist/skills/validate.d.ts.map +1 -0
  628. package/dist/skills/validate.js +112 -0
  629. package/dist/skills/validate.js.map +1 -0
  630. package/dist/skills/value-line.d.ts +94 -0
  631. package/dist/skills/value-line.d.ts.map +1 -0
  632. package/dist/skills/value-line.js +355 -0
  633. package/dist/skills/value-line.js.map +1 -0
  634. package/dist/skills/versions-fs.d.ts +45 -0
  635. package/dist/skills/versions-fs.d.ts.map +1 -0
  636. package/dist/skills/versions-fs.js +234 -0
  637. package/dist/skills/versions-fs.js.map +1 -0
  638. package/dist/skills/versions.d.ts +56 -0
  639. package/dist/skills/versions.d.ts.map +1 -0
  640. package/dist/skills/versions.js +351 -0
  641. package/dist/skills/versions.js.map +1 -0
  642. package/dist/telemetry/contract.d.ts +15 -1
  643. package/dist/telemetry/contract.d.ts.map +1 -1
  644. package/dist/telemetry/contract.js +80 -11
  645. package/dist/telemetry/contract.js.map +1 -1
  646. package/dist/telemetry/gate.js +4 -4
  647. package/dist/telemetry/gate.js.map +1 -1
  648. package/dist/telemetry/index.d.ts +1 -1
  649. package/dist/telemetry/index.d.ts.map +1 -1
  650. package/dist/telemetry/index.js +1 -1
  651. package/dist/telemetry/index.js.map +1 -1
  652. package/dist/telemetry/notice.js +5 -5
  653. package/dist/telemetry/notice.js.map +1 -1
  654. package/dist/telemetry/queue.d.ts.map +1 -1
  655. package/dist/telemetry/queue.js +7 -7
  656. package/dist/telemetry/queue.js.map +1 -1
  657. package/dist/telemetry/track.d.ts.map +1 -1
  658. package/dist/telemetry/track.js +4 -3
  659. package/dist/telemetry/track.js.map +1 -1
  660. package/dist/trace/checks.d.ts +63 -0
  661. package/dist/trace/checks.d.ts.map +1 -0
  662. package/dist/trace/checks.js +495 -0
  663. package/dist/trace/checks.js.map +1 -0
  664. package/dist/trace/claude.d.ts +124 -0
  665. package/dist/trace/claude.d.ts.map +1 -0
  666. package/dist/trace/claude.js +303 -0
  667. package/dist/trace/claude.js.map +1 -0
  668. package/dist/trace/codex-exec.d.ts +22 -0
  669. package/dist/trace/codex-exec.d.ts.map +1 -0
  670. package/dist/trace/codex-exec.js +129 -0
  671. package/dist/trace/codex-exec.js.map +1 -0
  672. package/dist/trace/codex-meta.d.ts +23 -0
  673. package/dist/trace/codex-meta.d.ts.map +1 -0
  674. package/dist/trace/codex-meta.js +112 -0
  675. package/dist/trace/codex-meta.js.map +1 -0
  676. package/dist/trace/codex.d.ts +33 -0
  677. package/dist/trace/codex.d.ts.map +1 -0
  678. package/dist/trace/codex.js +485 -0
  679. package/dist/trace/codex.js.map +1 -0
  680. package/dist/trace/cursor.d.ts +16 -0
  681. package/dist/trace/cursor.d.ts.map +1 -0
  682. package/dist/trace/cursor.js +133 -0
  683. package/dist/trace/cursor.js.map +1 -0
  684. package/dist/trace/dialect.d.ts +43 -0
  685. package/dist/trace/dialect.d.ts.map +1 -0
  686. package/dist/trace/dialect.js +95 -0
  687. package/dist/trace/dialect.js.map +1 -0
  688. package/dist/trace/epochs.d.ts +10 -0
  689. package/dist/trace/epochs.d.ts.map +1 -0
  690. package/dist/trace/epochs.js +16 -0
  691. package/dist/trace/epochs.js.map +1 -0
  692. package/dist/trace/failure.d.ts +15 -0
  693. package/dist/trace/failure.d.ts.map +1 -0
  694. package/dist/trace/failure.js +69 -0
  695. package/dist/trace/failure.js.map +1 -0
  696. package/dist/trace/gate-file.d.ts +71 -0
  697. package/dist/trace/gate-file.d.ts.map +1 -0
  698. package/dist/trace/gate-file.js +329 -0
  699. package/dist/trace/gate-file.js.map +1 -0
  700. package/dist/trace/guard-fast.d.ts +22 -0
  701. package/dist/trace/guard-fast.d.ts.map +1 -0
  702. package/dist/trace/guard-fast.js +213 -0
  703. package/dist/trace/guard-fast.js.map +1 -0
  704. package/dist/trace/housekeeping.d.ts +5 -0
  705. package/dist/trace/housekeeping.d.ts.map +1 -0
  706. package/dist/trace/housekeeping.js +93 -0
  707. package/dist/trace/housekeeping.js.map +1 -0
  708. package/dist/trace/jobs.d.ts +52 -0
  709. package/dist/trace/jobs.d.ts.map +1 -0
  710. package/dist/trace/jobs.js +182 -0
  711. package/dist/trace/jobs.js.map +1 -0
  712. package/dist/trace/known-repo.d.ts +3 -0
  713. package/dist/trace/known-repo.d.ts.map +1 -0
  714. package/dist/trace/known-repo.js +55 -0
  715. package/dist/trace/known-repo.js.map +1 -0
  716. package/dist/trace/pool.d.ts +40 -0
  717. package/dist/trace/pool.d.ts.map +1 -0
  718. package/dist/trace/pool.js +154 -0
  719. package/dist/trace/pool.js.map +1 -0
  720. package/dist/trace/repairs.d.ts +27 -0
  721. package/dist/trace/repairs.d.ts.map +1 -0
  722. package/dist/trace/repairs.js +303 -0
  723. package/dist/trace/repairs.js.map +1 -0
  724. package/dist/trace/run-calls.d.ts +82 -0
  725. package/dist/trace/run-calls.d.ts.map +1 -0
  726. package/dist/trace/run-calls.js +331 -0
  727. package/dist/trace/run-calls.js.map +1 -0
  728. package/dist/trace/run-join.d.ts +20 -0
  729. package/dist/trace/run-join.d.ts.map +1 -0
  730. package/dist/trace/run-join.js +99 -0
  731. package/dist/trace/run-join.js.map +1 -0
  732. package/dist/trace/run-sheets.d.ts +26 -0
  733. package/dist/trace/run-sheets.d.ts.map +1 -0
  734. package/dist/trace/run-sheets.js +145 -0
  735. package/dist/trace/run-sheets.js.map +1 -0
  736. package/dist/trace/run-turns.d.ts +24 -0
  737. package/dist/trace/run-turns.d.ts.map +1 -0
  738. package/dist/trace/run-turns.js +67 -0
  739. package/dist/trace/run-turns.js.map +1 -0
  740. package/dist/trace/run-verdict.d.ts +24 -0
  741. package/dist/trace/run-verdict.d.ts.map +1 -0
  742. package/dist/trace/run-verdict.js +176 -0
  743. package/dist/trace/run-verdict.js.map +1 -0
  744. package/dist/trace/runs.d.ts +54 -0
  745. package/dist/trace/runs.d.ts.map +1 -0
  746. package/dist/trace/runs.js +501 -0
  747. package/dist/trace/runs.js.map +1 -0
  748. package/dist/trace/skill-session.d.ts +64 -0
  749. package/dist/trace/skill-session.d.ts.map +1 -0
  750. package/dist/trace/skill-session.js +232 -0
  751. package/dist/trace/skill-session.js.map +1 -0
  752. package/dist/trace/tamper.d.ts +12 -0
  753. package/dist/trace/tamper.d.ts.map +1 -0
  754. package/dist/trace/tamper.js +405 -0
  755. package/dist/trace/tamper.js.map +1 -0
  756. package/dist/trace/typed.d.ts +30 -0
  757. package/dist/trace/typed.d.ts.map +1 -0
  758. package/dist/trace/typed.js +132 -0
  759. package/dist/trace/typed.js.map +1 -0
  760. package/dist/trace/wall-state.d.ts +86 -0
  761. package/dist/trace/wall-state.d.ts.map +1 -0
  762. package/dist/trace/wall-state.js +279 -0
  763. package/dist/trace/wall-state.js.map +1 -0
  764. package/dist/trace/walls.d.ts +40 -0
  765. package/dist/trace/walls.d.ts.map +1 -0
  766. package/dist/trace/walls.js +318 -0
  767. package/dist/trace/walls.js.map +1 -0
  768. package/dist/upkeep-run.d.ts.map +1 -1
  769. package/dist/upkeep-run.js +2 -23
  770. package/dist/upkeep-run.js.map +1 -1
  771. package/dist/upkeep.d.ts.map +1 -1
  772. package/dist/upkeep.js +2 -3
  773. package/dist/upkeep.js.map +1 -1
  774. package/dist/util/private-fs.d.ts +6 -0
  775. package/dist/util/private-fs.d.ts.map +1 -1
  776. package/dist/util/private-fs.js +9 -1
  777. package/dist/util/private-fs.js.map +1 -1
  778. package/dist/util/state.d.ts.map +1 -1
  779. package/dist/util/state.js +17 -3
  780. package/dist/util/state.js.map +1 -1
  781. package/dist/vendor/tree-sitter-swift/LICENSE +21 -0
  782. package/dist/vendor/tree-sitter-swift/node-types.json +30694 -0
  783. package/dist/vendor/tree-sitter-swift/prebuilds/darwin-arm64/tree-sitter-swift.node +0 -0
  784. package/dist/vendor/tree-sitter-swift/prebuilds/darwin-x64/tree-sitter-swift.node +0 -0
  785. package/dist/vendor/tree-sitter-swift/prebuilds/linux-arm64/tree-sitter-swift.node +0 -0
  786. package/dist/vendor/tree-sitter-swift/prebuilds/linux-x64/tree-sitter-swift.node +0 -0
  787. package/dist/vendor/tree-sitter-swift/prebuilds/win32-arm64/tree-sitter-swift.node +0 -0
  788. package/dist/vendor/tree-sitter-swift/prebuilds/win32-x64/tree-sitter-swift.node +0 -0
  789. package/package.json +6 -3
  790. package/scripts/stamp-telemetry-key.mjs +8 -5
  791. package/scripts/vendor-grammars.mjs +35 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onboarding.d.ts","sourceRoot":"","sources":["../../src/cloud/onboarding.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,612 @@
1
+ /**
2
+ * `trail init --connect <CODE>`: the onboarding on team.trailhq.com.
3
+ *
4
+ * A person signs up on the web, picks "Writing Code", and is shown two
5
+ * commands: install trail, then `trail init --connect TRL-XXXX-XXXX`. The code
6
+ * is one-time and short-lived; claiming it gives this machine a workspace
7
+ * token, kept where `trail login` keeps one (`~/.trail/cloud.json`).
8
+ *
9
+ * While init runs, the page ticks off stages as this sends them: connected,
10
+ * mapped, learned, done. Before `done`, one summary of the repo goes up, for
11
+ * the "What Trail found" page:
12
+ *
13
+ * - tokens: one real lookup on the fresh code map, and what it saved
14
+ * - learnings: titles, a short line of each and how many sessions said it
15
+ * - teammates: other people's recently pushed branches that change the
16
+ * files this person works on, from git
17
+ *
18
+ * Summaries only (the onboarding's "route B"): never code, diffs or session
19
+ * text. Every call is bounded and never throws; offline, init carries on and
20
+ * says nothing about it.
21
+ */
22
+ import { execFileSync } from "node:child_process";
23
+ import { existsSync } from "node:fs";
24
+ import { hostname } from "node:os";
25
+ import { join } from "node:path";
26
+ import { formatAsk, ask } from "../ask/ask.js";
27
+ import { contextDirFor } from "../context/node-file.js";
28
+ import { loadGraphCached } from "../graph/load.js";
29
+ import { buildRepoMap } from "../graph/map.js";
30
+ import { refreshBranches, safeRef } from "../notes/branches.js";
31
+ import { cleanSubject } from "../notes/edit-overlap.js";
32
+ import { changedFiles, ownPath } from "../notes/git-facts.js";
33
+ import { repoName, repoPlace } from "../notes/home.js";
34
+ import { listNotes, sectionLead } from "../notes/notes.js";
35
+ import { DEFAULT_TRAIL_URL, isError, trailUrl } from "./workspace.js";
36
+ /* -------------------------------------------------------------------------- */
37
+ /* the code */
38
+ /* -------------------------------------------------------------------------- */
39
+ /**
40
+ * The code as the page shows it, `TRL-7F2A-K9QD`, from however it was pasted:
41
+ * any case, with or without the prefix and dashes. Null when it can't be one.
42
+ */
43
+ export function normalizeCode(raw) {
44
+ const s = raw.trim().toUpperCase().replace(/[\s_]+/g, "-");
45
+ const bare = s.replace(/^TRL-?/, "").replace(/-/g, "");
46
+ if (!/^[A-Z0-9]{8}$/.test(bare))
47
+ return null;
48
+ return `TRL-${bare.slice(0, 4)}-${bare.slice(4)}`;
49
+ }
50
+ export function repoRef(repo) {
51
+ const place = repoPlace(repo);
52
+ if (place.key.startsWith("local/"))
53
+ return { name: repoName(place.key, place.checkout) };
54
+ // The name as the remote spells it (`go-retryablehttp`, `Graft`); the key is lower-cased.
55
+ const origin = git(place.checkout, ["remote", "get-url", "origin"], 5000)?.trim() ?? "";
56
+ const last = origin.replace(/\.git\/?$/i, "").split(/[/:]/).pop() ?? "";
57
+ const name = /^[A-Za-z0-9._-]+$/.test(last) ? last : place.key.split("/").pop();
58
+ return { name, remote_url: `https://${place.key}` };
59
+ }
60
+ /** What the page shows for the terminal: `Rushabh's MacBook Pro` on a Mac, else the host name. */
61
+ export function machineName() {
62
+ if (process.platform === "darwin") {
63
+ try {
64
+ const name = execFileSync("scutil", ["--get", "ComputerName"], { encoding: "utf8", stdio: ["ignore", "pipe", "ignore"], timeout: 2000 }).trim();
65
+ if (name)
66
+ return name.slice(0, 80);
67
+ }
68
+ catch {
69
+ /* the host name below */
70
+ }
71
+ }
72
+ try {
73
+ return hostname().replace(/\.(local|lan|home)$/i, "").slice(0, 80);
74
+ }
75
+ catch {
76
+ return "";
77
+ }
78
+ }
79
+ async function post(url, body, opts) {
80
+ const f = opts.fetchImpl ?? fetch;
81
+ try {
82
+ const headers = { "content-type": "application/json", accept: "application/json" };
83
+ if (opts.token)
84
+ headers.authorization = `Bearer ${opts.token}`;
85
+ const res = await f(url, { method: "POST", headers, body: JSON.stringify(body), signal: AbortSignal.timeout(opts.timeoutMs ?? 10_000) });
86
+ const text = await res.text();
87
+ let json = null;
88
+ try {
89
+ json = text ? JSON.parse(text) : null;
90
+ }
91
+ catch {
92
+ /* not JSON */
93
+ }
94
+ if (!res.ok) {
95
+ const msg = json?.error;
96
+ return { error: typeof msg === "string" ? msg : `Trail answered ${res.status}`, status: res.status };
97
+ }
98
+ return { status: res.status, body: json };
99
+ }
100
+ catch (err) {
101
+ const timedOut = err instanceof Error && (err.name === "TimeoutError" || err.name === "AbortError");
102
+ return { error: timedOut ? "Trail didn't answer in time" : "couldn't reach Trail" };
103
+ }
104
+ }
105
+ /**
106
+ * Claim the one-time code: `POST /api/public/cli/connect`. Gives back the
107
+ * connection to save, with no repos picked: the full learnings sync stays off
108
+ * for a machine connected this way, so only the summary below goes up.
109
+ */
110
+ export async function claimConnectCode(base, code, req, opts = {}) {
111
+ const r = await post(`${base}/api/public/cli/connect`, { code, machine: req.machine, repo: req.repo }, { fetchImpl: opts.fetchImpl, timeoutMs: 15_000 });
112
+ if (isError(r)) {
113
+ if (r.status === undefined)
114
+ return { error: r.error, reason: "offline" };
115
+ if (r.status >= 500)
116
+ return { error: `Trail answered ${r.status}`, reason: "offline" };
117
+ if (r.status === 403)
118
+ return { error: "the account that made this code is no longer in that workspace", reason: "invalid" };
119
+ if (r.status === 429)
120
+ return { error: "too many tries just now; wait a minute and run it again", reason: "invalid" };
121
+ return { error: "that code was already used, has expired, or isn't right", reason: "invalid" };
122
+ }
123
+ const b = r.body;
124
+ const ws = b?.workspace;
125
+ if (!b?.token || !ws?.name)
126
+ return { error: "Trail sent an answer with no workspace in it", reason: "offline" };
127
+ const id = ws.id ?? ws.slug ?? ws.name;
128
+ return {
129
+ cloud: {
130
+ url: base,
131
+ token: b.token,
132
+ user: { name: b.user?.name ?? "", email: b.user?.email ?? "" },
133
+ workspace: {
134
+ id,
135
+ name: ws.name,
136
+ // readCloud needs a slug to count the connection; the connect answer may not carry one.
137
+ slug: ws.slug || id,
138
+ url: ws.url || `${base}/`,
139
+ invite_url: ws.invite_url || `${base}/`,
140
+ },
141
+ repos: [],
142
+ linkedAt: opts.now ?? Date.now(),
143
+ via: "connect",
144
+ },
145
+ };
146
+ }
147
+ /**
148
+ * The command that connects later: `trail init --connect TRL-… --server <url>`,
149
+ * naming the Trail it was run against unless that's Trail cloud, so it
150
+ * reaches the same backend the code came from.
151
+ */
152
+ export function connectAgain(command, code, base) {
153
+ return `${command} --connect ${code}${base.replace(/\/+$/, "") === DEFAULT_TRAIL_URL ? "" : ` --server ${base}`}`;
154
+ }
155
+ /**
156
+ * What to say, once, when Trail didn't take the code because it couldn't be
157
+ * reached: which Trail, what happened, and the exact command to connect later.
158
+ * `· couldn't reach Trail at http://localhost:5173 · set this repo up anyway ·
159
+ * to connect it later: trail init --connect TRL-7F2A-K9QD --server http://localhost:5173`
160
+ */
161
+ export function offlineLine(error, base, code, command) {
162
+ const what = error.startsWith("Trail ") ? `Trail at ${base}${error.slice("Trail".length)}` : `couldn't reach Trail at ${base}`;
163
+ return `· ${what} · set this repo up anyway · to connect it later: ${connectAgain(command, code, base)}`;
164
+ }
165
+ /**
166
+ * Sends the stages and the summary for one `init --connect`, in order. The
167
+ * first call that can't reach Trail turns the rest off, so a laptop offline
168
+ * waits on one timeout at most. Never throws.
169
+ */
170
+ export class OnboardingReporter {
171
+ cloud;
172
+ repo;
173
+ opts;
174
+ offline = false;
175
+ chain = Promise.resolve();
176
+ sent = [];
177
+ constructor(cloud, repo, opts = {}) {
178
+ this.cloud = cloud;
179
+ this.repo = repo;
180
+ this.opts = opts;
181
+ }
182
+ send(path, body) {
183
+ const next = this.chain.then(async () => {
184
+ if (this.offline)
185
+ return false;
186
+ const r = await post(`${this.cloud.url}${path}`, body, { token: this.cloud.token, fetchImpl: this.opts.fetchImpl, timeoutMs: this.opts.timeoutMs ?? 5_000 });
187
+ const ok = !isError(r);
188
+ // No answer at all: offline, or Trail is down. An HTTP error is this call's alone.
189
+ if (isError(r) && r.status === undefined)
190
+ this.offline = true;
191
+ this.sent.push({ path, body, ok });
192
+ return ok;
193
+ });
194
+ this.chain = next.catch(() => false);
195
+ return next.catch(() => false);
196
+ }
197
+ /** One stage, for the page to tick off. */
198
+ stage(stage, data = {}) {
199
+ return this.send("/api/cli/onboarding/events", { repo: this.repo, stage, machine: this.opts.machine, data });
200
+ }
201
+ summary(s) {
202
+ return this.send("/api/cli/repos/summary", { repo: this.repo, ...s });
203
+ }
204
+ /** Wait for everything sent so far. */
205
+ async flush() {
206
+ await this.chain;
207
+ }
208
+ }
209
+ /* tokens ------------------------------------------------------------------- */
210
+ /** The numbers in `ask`'s `[trail] tokens saved ≈ N (P%) — this pack ≈ … tok vs reading the F source file(s) whole ≈ B tok` line. */
211
+ export function parseAskSavings(text) {
212
+ const m = text.match(/\[(?:graft|trail)\] tokens saved ≈ ([\d,]+) \((\d+)%\) — this pack ≈ ([\d,]+) tok vs reading the (\d+) source file\(s\) whole ≈ ([\d,]+) tok/);
213
+ if (!m)
214
+ return null;
215
+ const n = (s) => Number(s.replace(/,/g, ""));
216
+ return { saved: n(m[1]), pct: n(m[2]), pack: n(m[3]), files: n(m[4]), baseline: n(m[5]) };
217
+ }
218
+ /** Folders that hold tests, fixtures, vendored or generated code, anywhere in a path. */
219
+ const NOT_PRODUCT_DIR = /(^|\/)(test|tests|__tests__|testdata|test-fixtures|fixtures|__fixtures__|__mocks__|vendor|third_party|node_modules|generated|__generated__|gen)\//i;
220
+ /** File names of tests and generated code: `client_test.go`, `a.test.ts`, `a.spec.js`, `test_client.py`, `api.pb.go`, `schema.generated.ts`. */
221
+ const NOT_PRODUCT_FILE = /(_test\.[^/]+|\.(test|spec)\.[^/]+|_spec\.[^/]+|(^|\/)test_[^/]+\.py|(^|\/)conftest\.py|\.(generated|gen)\.[^/]+|\.pb\.go|_pb2(_grpc)?\.py|\.d\.ts)$/i;
222
+ /** Whether a repo path is test, fixture, vendored or generated code, which a lookup shouldn't be measured on. */
223
+ export function notProductCode(path) {
224
+ const p = path.split("\\").join("/");
225
+ return NOT_PRODUCT_DIR.test(p) || NOT_PRODUCT_FILE.test(p);
226
+ }
227
+ /** Docs and config: prose, data and settings files, and the folders that hold them. */
228
+ const DOC_OR_CONFIG_FILE = new RegExp([
229
+ "\\.(md|mdx|markdown|rst|adoc|txt|json|jsonc|ya?ml|toml|ini|cfg|conf|env|lock|xml|csv|svg|png|jpe?g|gif|ico)$",
230
+ "(^|/)(readme|changelog|changes|history|license|licence|notice|authors|contributors|codeowners|security)$",
231
+ "(^|/)(makefile|dockerfile|procfile|go\\.mod|go\\.sum)$",
232
+ // Dotfiles: .gitignore, .eslintrc.js, .env.local.
233
+ "(^|/)\\.[^/]+$",
234
+ ].join("|"), "i");
235
+ const DOC_OR_CONFIG_DIR = /(^|\/)(docs?|\.github|\.circleci|\.vscode|\.idea)\//i;
236
+ /** Whether a repo path is docs or config rather than code. */
237
+ export function docOrConfig(path) {
238
+ const p = path.split("\\").join("/");
239
+ return DOC_OR_CONFIG_DIR.test(p) || DOC_OR_CONFIG_FILE.test(p);
240
+ }
241
+ /**
242
+ * A teammate's files with the one worth naming first: product code (by the
243
+ * same rules as the tokens lookup), then other code (tests, fixtures,
244
+ * vendored, generated), then docs and config. Every file stays; only the
245
+ * order changes, and within each kind it's git's. The page says a teammate
246
+ * "is changing" the first one, which shouldn't be CHANGELOG.md when they
247
+ * also change client.go.
248
+ */
249
+ export function headlineOrder(files) {
250
+ const rank = (f) => (docOrConfig(f) ? 2 : notProductCode(f) ? 1 : 0);
251
+ return files.map((f, i) => ({ f, i, r: rank(f) })).sort((a, b) => a.r - b.r || a.i - b.i).map((x) => x.f);
252
+ }
253
+ const COMMON_UTIL_NAMES = new Set(["cn", "utils", "index", "helpers", "main", "init", "config", "setup", "test"]);
254
+ /** Whether a symbol name is worth measuring a lookup on: at least 5 characters and not a common util name. */
255
+ export function meaningfulSymbol(name) {
256
+ return name.length >= 5 && !COMMON_UTIL_NAMES.has(name.toLowerCase());
257
+ }
258
+ /**
259
+ * One real lookup on the code map, as an agent would make it: a question
260
+ * about the repo's most central symbol (most incoming edges, with a name of
261
+ * 5+ characters that isn't a common util name) outside tests,
262
+ * fixtures, vendored and generated code, answered with
263
+ * the code inlined, and what that saved against reading the files it covers
264
+ * whole. The next most central is tried when a lookup saves nothing (tiny
265
+ * files). Null without a graph.
266
+ */
267
+ export function tokensOnOneLookup(repo, opts = {}) {
268
+ const pr = tokensOnLastPr(repo, opts);
269
+ if (pr)
270
+ return pr;
271
+ try {
272
+ const graph = loadGraphCached(contextDirFor(repo, opts.contextDir));
273
+ if (!graph)
274
+ return null;
275
+ // The most central symbols of the product code: tests, fixtures, vendored
276
+ // and generated code only when there's nothing else.
277
+ // A name worth asking about: a short or generic one (`cn`, `utils`, `main`)
278
+ // says nothing about the repo, so the example would be meaningless.
279
+ // Falls back to every symbol when no name passes, so a repo of short names still gets a figure.
280
+ const spots = buildRepoMap(graph, { hotspots: 500 }).hotspots;
281
+ const named = spots.filter((h) => meaningfulSymbol(h.name));
282
+ const all = named.length ? named : spots;
283
+ const product = all.filter((h) => !notProductCode(h.path));
284
+ const hubs = (product.length ? product : all).slice(0, Math.max(1, opts.tries ?? 5));
285
+ for (const hub of hubs) {
286
+ const query = `how does ${hub.name} work`;
287
+ const r = ask(repo, query, { source: true, limit: 5, contextDir: opts.contextDir });
288
+ const got = parseAskSavings(formatAsk(r));
289
+ if (got && got.saved > 0)
290
+ return { question: `how ${hub.name} works`, symbol: hub.name, ...got };
291
+ }
292
+ return null;
293
+ }
294
+ catch {
295
+ return null;
296
+ }
297
+ }
298
+ /** The most of a PR's changed files sent to Trail; `changed` says how many there were. */
299
+ export const PR_FILES_SENT = 20;
300
+ /** `Merge pull request #12 from acme/retry-backoff` (a merge), with the title on the body's first line. */
301
+ const MERGED_PR = /^Merge pull request #(\d+) from (\S+)/;
302
+ /** `Retry with backoff (#12)` (a squash or rebase merge). */
303
+ const SQUASHED_PR = /^(.+?) \(#(\d+)\)$/;
304
+ /** Bots' PRs and release chores, which say nothing about the work. */
305
+ const NOT_WORK_PR = /^(bump |chore\(release\)|release[: ]|\[bot\]|merge (branch|remote-tracking))/i;
306
+ /**
307
+ * The merged PRs on the default branch, newest first, read from git alone:
308
+ * GitHub's merge commits and squash merges both name the PR. Only PRs that
309
+ * changed product code still in the repo; at most `limit` of them.
310
+ */
311
+ export function lastMergedPrs(repo, limit = 5) {
312
+ const base = git(repo, ["rev-parse", "--abbrev-ref", "origin/HEAD"])?.trim() || "HEAD";
313
+ const log = git(repo, ["log", "-n", "300", "--first-parent", "--format=%H%x1f%s%x1f%b%x1e", base]);
314
+ if (!log)
315
+ return [];
316
+ const key = repoPlace(repo).key;
317
+ const out = [];
318
+ for (const rec of log.split("\x1e")) {
319
+ const [sha, subject = "", body = ""] = rec.trim().split("\x1f");
320
+ if (!sha)
321
+ continue;
322
+ const merged = subject.match(MERGED_PR);
323
+ const squashed = merged ? null : subject.match(SQUASHED_PR);
324
+ if (!merged && !squashed)
325
+ continue;
326
+ const number = Number(merged ? merged[1] : squashed[2]);
327
+ const title = cleanSubject(merged ? body.split("\n").find((l) => l.trim()) || merged[2].split("/").pop().replace(/[-_]/g, " ") : squashed[1]);
328
+ if (!title || NOT_WORK_PR.test(title))
329
+ continue;
330
+ const changed = git(repo, ["diff", "--name-only", "--diff-filter=AMR", `${sha}^1`, sha]) ?? "";
331
+ const files = changed
332
+ .split("\n")
333
+ .map((f) => f.trim())
334
+ .filter((f) => f && !notProductCode(f) && !docOrConfig(f) && existsSync(join(repo, f)));
335
+ if (!files.length)
336
+ continue;
337
+ const url = key.startsWith("github.com/") ? `https://${key}/pull/${number}` : undefined;
338
+ out.push({ number, title, ...(url ? { url } : {}), files });
339
+ if (out.length >= limit)
340
+ break;
341
+ }
342
+ return out;
343
+ }
344
+ /**
345
+ * The lookup an agent starting the last merged PR would make: its title as
346
+ * the question, answered with the code inlined, against reading the files
347
+ * the answer covers whole (ask's own estimate). The next PR back is tried
348
+ * when one saves nothing. Null with no PR in git's history or no graph.
349
+ */
350
+ export function tokensOnLastPr(repo, opts = {}) {
351
+ try {
352
+ if (!loadGraphCached(contextDirFor(repo, opts.contextDir)))
353
+ return null;
354
+ for (const pr of lastMergedPrs(repo, Math.max(1, opts.tries ?? 3))) {
355
+ const r = ask(repo, pr.title, { source: true, limit: 5, contextDir: opts.contextDir });
356
+ const got = parseAskSavings(formatAsk(r));
357
+ if (!got || got.saved <= 0)
358
+ continue;
359
+ const pointed = new Set(r.hits.map((h) => h.pointer.replace(/:L\d+(-L?\d+)?$/, "")));
360
+ const found = pr.files.filter((f) => pointed.has(f)).length;
361
+ return { question: pr.title, symbol: "", ...got, pr: { ...pr, files: pr.files.slice(0, PR_FILES_SENT), changed: pr.files.length, found } };
362
+ }
363
+ return null;
364
+ }
365
+ catch {
366
+ return null;
367
+ }
368
+ }
369
+ /* learnings ---------------------------------------------------------------- */
370
+ /** How many sessions a learning read from past sessions was said in, from the line init writes under it. */
371
+ export function sessionsIn(body) {
372
+ const m = body.match(/Told to Claude in (\d+) past sessions/);
373
+ return m ? Number(m[1]) : 0;
374
+ }
375
+ /**
376
+ * One line of a learning, for a card: the first point under `## Decided` (or
377
+ * the first line of prose), no code blocks, headings or provenance line, at
378
+ * most 200 characters.
379
+ */
380
+ export function shortBody(body) {
381
+ const prose = body
382
+ .replace(/```[\s\S]*?(```|$)/g, " ")
383
+ .split(/\r?\n/)
384
+ .filter((l) => !/^_(Told to Claude|Flagged in review) /.test(l.trim()));
385
+ const text = prose.join("\n");
386
+ const lead = sectionLead(text, "Decided") ??
387
+ sectionLead(text, "Watch out") ??
388
+ prose.map((l) => l.trim()).find((l) => l && !l.startsWith("#")) ??
389
+ "";
390
+ const one = lead.replace(/^[-*]\s+/, "").replace(/\s+/g, " ").trim();
391
+ return one.length > 200 ? `${one.slice(0, 199)}…` : one;
392
+ }
393
+ /**
394
+ * The team's learnings in this repo, for the summary: what init just learned
395
+ * when it learned something (with the sessions each was said in), else what
396
+ * `.trail/learnings/` already has. Never a personal one: those stay on this
397
+ * machine.
398
+ */
399
+ export function learningsSummary(repo, learned, max = 10) {
400
+ try {
401
+ const notes = learned?.length
402
+ ? learned.filter((l) => l.note.scope !== "personal")
403
+ : listNotes(repo, { branches: false })
404
+ .filter((n) => n.scope === "repo" && !n.ref)
405
+ .map((note) => ({ note }));
406
+ return notes.slice(0, max).map(({ note, sessions }) => ({
407
+ title: note.title.slice(0, 200),
408
+ body: shortBody(note.body),
409
+ sessions: sessions ?? sessionsIn(note.body),
410
+ }));
411
+ }
412
+ catch {
413
+ return [];
414
+ }
415
+ }
416
+ /* teammates ---------------------------------------------------------------- */
417
+ function git(repo, args, timeout = 15_000) {
418
+ try {
419
+ return execFileSync("git", args, {
420
+ cwd: repo,
421
+ encoding: "utf8",
422
+ stdio: ["ignore", "pipe", "ignore"],
423
+ timeout,
424
+ maxBuffer: 16 * 1024 * 1024,
425
+ env: { ...process.env, GIT_TERMINAL_PROMPT: "0" },
426
+ });
427
+ }
428
+ catch {
429
+ return null;
430
+ }
431
+ }
432
+ const BOT = /\[bot\]|^(dependabot|github-actions|renovate)\b/i;
433
+ /** Branches that are where work lands, not work in flight: nobody is "on" them. */
434
+ const INTEGRATION_BRANCH = /^(main|master|dev|develop|staging|production|release\/.+)$/;
435
+ /**
436
+ * Whether a remote branch is open work by someone: not the remote's default
437
+ * branch (`base`), not a shared integration branch, and not fully merged
438
+ * already (its tip is an ancestor of `base`).
439
+ */
440
+ export function openBranch(repo, base, ref) {
441
+ const name = ref.replace(/^origin\//, "");
442
+ if (ref === base || name === base.replace(/^origin\//, "") || INTEGRATION_BRANCH.test(name))
443
+ return false;
444
+ // `merge-base --is-ancestor` exits 0 when merged, 1 when not; git() returns null on a nonzero exit.
445
+ return git(repo, ["merge-base", "--is-ancestor", ref, base]) === null;
446
+ }
447
+ /** Files `email` changed in the last `days` days on any branch, plus what's uncommitted here. */
448
+ export function myRecentFiles(repo, email, days = 30) {
449
+ const out = new Set(changedFiles(repo, undefined, 200));
450
+ if (email) {
451
+ const pattern = `<${email.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}>`;
452
+ const log = git(repo, ["log", "--all", "--no-merges", `--since=${days}.days`, `--author=${pattern}`, "--name-only", "--format="]);
453
+ for (const f of (log ?? "").split("\n"))
454
+ if (f.trim() && !ownPath(f.trim()))
455
+ out.add(f.trim());
456
+ }
457
+ return [...out].slice(0, 500);
458
+ }
459
+ /** The repo's busiest files lately: the stand-in for "files you work on" when you have no history here. */
460
+ export function hottestFiles(repo, n = 30) {
461
+ const count = new Map();
462
+ const log = git(repo, ["log", "--no-merges", "--since=90.days", "-n", "2000", "--name-only", "--format="]) || git(repo, ["log", "--no-merges", "-n", "300", "--name-only", "--format="]);
463
+ for (const raw of (log ?? "").split("\n")) {
464
+ const f = raw.trim();
465
+ if (f && !ownPath(f))
466
+ count.set(f, (count.get(f) ?? 0) + 1);
467
+ }
468
+ return [...count].sort((a, b) => b[1] - a[1] || a[0].localeCompare(b[0])).slice(0, n).map(([f]) => f);
469
+ }
470
+ /** One line of what a branch does, from its commit subjects, newest first. */
471
+ function changeLine(repo, base, ref) {
472
+ const subjects = (git(repo, ["log", "--no-merges", "--format=%s", "-n", "5", `${base}..${ref}`]) ?? "")
473
+ .split("\n")
474
+ .map((s) => cleanSubject(s))
475
+ .filter(Boolean);
476
+ const line = [...new Set(subjects)].slice(0, 3).join("; ");
477
+ return line.length > 160 ? `${line.slice(0, 159)}…` : line;
478
+ }
479
+ /**
480
+ * `git fetch` in the foreground, at the end of init, without ever stopping to
481
+ * ask: no credential prompt, and no ssh passphrase prompt unless the person
482
+ * set up their own ssh command (then theirs is used as is).
483
+ */
484
+ function fetchQuietly(repo) {
485
+ try {
486
+ const env = { ...process.env, GIT_TERMINAL_PROMPT: "0" };
487
+ if (!env.GIT_SSH_COMMAND && !git(repo, ["config", "core.sshCommand"])?.trim())
488
+ env.GIT_SSH_COMMAND = "ssh -o BatchMode=yes";
489
+ execFileSync("git", ["fetch", "--quiet", "--prune", "origin"], { cwd: repo, stdio: "ignore", timeout: 20_000, env });
490
+ }
491
+ catch {
492
+ /* offline, or no origin: the refs already here */
493
+ }
494
+ }
495
+ /**
496
+ * The names a learning is about, to look for in a teammate's change: the
497
+ * symbols its `touches` name (`client.go#Do`), and code-like words in its
498
+ * title and lead line (`defaultRetryMax`, `retry_max`, `Do()`). Plain words
499
+ * are left out: "retry" in a learning says nothing about a change.
500
+ */
501
+ export function learningTerms(n) {
502
+ const terms = new Set();
503
+ for (const t of n.touches) {
504
+ const sym = t.split("#")[1];
505
+ if (sym)
506
+ terms.add(sym.split(".").pop());
507
+ }
508
+ const text = `${n.title} ${shortBody(n.body)}`;
509
+ // camelCase, PascalCase with an inner capital, snake_case, or a call: `Do()`.
510
+ for (const w of text.match(/\b[A-Za-z_][A-Za-z0-9_]*\b(\(\))?/g) ?? []) {
511
+ const word = w.replace(/\(\)$/, "");
512
+ if (w.endsWith("()") || /[a-z][A-Z]/.test(word) || /[A-Za-z]_[A-Za-z]/.test(word))
513
+ terms.add(word);
514
+ }
515
+ return [...terms].filter((t) => t.length >= 2);
516
+ }
517
+ /**
518
+ * When a teammate's branch changes a name one of the team's learnings is
519
+ * about, in a file that learning touches: `Changes defaultRetryMax in
520
+ * client.go, which your learning "Keep defaultRetryMax at 4" is about.` Read
521
+ * from the branch's diff here; only this line goes up. Nothing when the
522
+ * learning names nothing code-like, or the change doesn't touch it.
523
+ */
524
+ export function conflictLine(repo, base, ref, files, learnings) {
525
+ const changed = new Set(files);
526
+ for (const n of learnings) {
527
+ if (n.scope === "personal")
528
+ continue;
529
+ const terms = learningTerms(n);
530
+ if (terms.length === 0)
531
+ continue;
532
+ for (const file of n.touches.map((t) => t.split("#")[0]).filter((f) => changed.has(f))) {
533
+ const diff = git(repo, ["diff", "--unified=0", `${base}...${ref}`, "--", file]) ?? "";
534
+ const lines = diff.split("\n").filter((l) => /^[+-]/.test(l) && !/^(\+\+\+|---) /.test(l));
535
+ const hit = terms.find((t) => lines.some((l) => new RegExp(`\\b${t.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}\\b`).test(l)));
536
+ if (hit) {
537
+ const line = `Changes ${hit} in ${file}, which your learning "${n.title.replace(/"/g, "'")}" is about.`;
538
+ return line.length > 300 ? `${line.slice(0, 299)}…` : line;
539
+ }
540
+ }
541
+ }
542
+ return undefined;
543
+ }
544
+ /**
545
+ * Teammates' work in the same place: remote branches whose newest commit is
546
+ * from the last `days` days and from someone other than this person, that
547
+ * change files this person changed lately (or the repo's busiest files, when
548
+ * they have no history here). Newest first. Fetches first unless
549
+ * `fetch: false` (or TRAIL_NO_FETCH). Names, emails, branch and file names and
550
+ * commit subjects only: never a diff.
551
+ */
552
+ export function teammatesFromGit(repo, opts = {}) {
553
+ return teammatesChecked(repo, opts) ?? [];
554
+ }
555
+ /**
556
+ * Like {@link teammatesFromGit}, but `undefined` when there was nothing to check
557
+ * against: no origin remote, no default branch to compare with, or git failed.
558
+ * An empty list means "checked, none"; a repo without a remote wasn't checked.
559
+ */
560
+ export function teammatesChecked(repo, opts = {}) {
561
+ try {
562
+ const now = opts.now ?? Date.now();
563
+ const days = opts.days ?? 14;
564
+ const me = (git(repo, ["config", "user.email"]) ?? "").trim().toLowerCase();
565
+ const myName = (git(repo, ["config", "user.name"]) ?? "").trim().toLowerCase();
566
+ if (opts.fetch !== false && !process.env.TRAIL_NO_FETCH)
567
+ fetchQuietly(repo);
568
+ const cache = refreshBranches(repo, { fetch: false, now });
569
+ if (!cache.base)
570
+ return undefined;
571
+ const mine = new Set(myRecentFiles(repo, me));
572
+ const where = mine.size ? mine : new Set(hottestFiles(repo));
573
+ const out = [];
574
+ for (const b of cache.branches) {
575
+ if (now - b.at > days * 24 * 60 * 60 * 1000)
576
+ continue;
577
+ if (!openBranch(repo, cache.base, b.ref))
578
+ continue;
579
+ const [name = "", email = ""] = (git(repo, ["log", "-1", "--format=%aN%x09%aE", b.ref]) ?? "").trim().split("\t");
580
+ if (!name || BOT.test(name))
581
+ continue;
582
+ if ((me && email.toLowerCase() === me) || (myName && name.toLowerCase() === myName))
583
+ continue;
584
+ const files = headlineOrder(b.files.filter((f) => !ownPath(f) && where.has(f)));
585
+ if (files.length === 0)
586
+ continue;
587
+ const commits = Number((git(repo, ["rev-list", "--count", `${cache.base}..${b.ref}`]) ?? "").trim());
588
+ const conflict = conflictLine(repo, cache.base, b.ref, files, opts.learnings ?? []);
589
+ out.push({
590
+ name: name.slice(0, 80),
591
+ email: email.slice(0, 120),
592
+ branch: safeRef(b.ref.replace(/^origin\//, "")),
593
+ files: files.slice(0, 20),
594
+ change: changeLine(repo, cache.base, b.ref),
595
+ pushed_at: new Date(b.at).toISOString(),
596
+ ...(Number.isFinite(commits) && commits > 0 ? { commits } : {}),
597
+ ...(conflict ? { conflict } : {}),
598
+ });
599
+ if (out.length >= (opts.max ?? 10))
600
+ break;
601
+ }
602
+ return out.sort((a, b) => b.pushed_at.localeCompare(a.pushed_at));
603
+ }
604
+ catch {
605
+ return undefined;
606
+ }
607
+ }
608
+ /** The Trail a code is claimed against: `--server` for this run (useServer), or Trail cloud. */
609
+ export function connectBase(env = process.env) {
610
+ return trailUrl(env);
611
+ }
612
+ //# sourceMappingURL=onboarding.js.map