@nanonets/graft 0.21.1 → 0.22.1

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 (389) hide show
  1. package/README.md +549 -314
  2. package/dist/app/checkout.d.ts +0 -32
  3. package/dist/app/checkout.d.ts.map +1 -1
  4. package/dist/app/checkout.js +0 -45
  5. package/dist/app/checkout.js.map +1 -1
  6. package/dist/app/identity.d.ts +0 -56
  7. package/dist/app/identity.d.ts.map +1 -1
  8. package/dist/app/identity.js +0 -119
  9. package/dist/app/identity.js.map +1 -1
  10. package/dist/app/main.js +0 -8
  11. package/dist/app/main.js.map +1 -1
  12. package/dist/app/review-process.d.ts.map +1 -1
  13. package/dist/app/review-process.js +6 -5
  14. package/dist/app/review-process.js.map +1 -1
  15. package/dist/app/server.d.ts +0 -20
  16. package/dist/app/server.d.ts.map +1 -1
  17. package/dist/app/server.js +0 -121
  18. package/dist/app/server.js.map +1 -1
  19. package/dist/ask/ask.d.ts +12 -6
  20. package/dist/ask/ask.d.ts.map +1 -1
  21. package/dist/ask/ask.js +28 -38
  22. package/dist/ask/ask.js.map +1 -1
  23. package/dist/bin/graft.d.ts +3 -0
  24. package/dist/bin/graft.d.ts.map +1 -0
  25. package/dist/bin/graft.js +8 -0
  26. package/dist/bin/graft.js.map +1 -0
  27. package/dist/bin/trail.d.ts +3 -0
  28. package/dist/bin/trail.d.ts.map +1 -0
  29. package/dist/bin/trail.js +6 -0
  30. package/dist/bin/trail.js.map +1 -0
  31. package/dist/blast/blast-cli.d.ts.map +1 -1
  32. package/dist/blast/blast-cli.js +2 -1
  33. package/dist/blast/blast-cli.js.map +1 -1
  34. package/dist/blast/render.d.ts.map +1 -1
  35. package/dist/blast/render.js +3 -2
  36. package/dist/blast/render.js.map +1 -1
  37. package/dist/brand.d.ts +97 -0
  38. package/dist/brand.d.ts.map +1 -0
  39. package/dist/brand.js +254 -0
  40. package/dist/brand.js.map +1 -0
  41. package/dist/check/learning-edits.d.ts +9 -0
  42. package/dist/check/learning-edits.d.ts.map +1 -0
  43. package/dist/check/learning-edits.js +62 -0
  44. package/dist/check/learning-edits.js.map +1 -0
  45. package/dist/check/local-check.d.ts +104 -0
  46. package/dist/check/local-check.d.ts.map +1 -0
  47. package/dist/check/local-check.js +830 -0
  48. package/dist/check/local-check.js.map +1 -0
  49. package/dist/check/types.d.ts +31 -0
  50. package/dist/check/types.d.ts.map +1 -0
  51. package/dist/check/types.js +2 -0
  52. package/dist/check/types.js.map +1 -0
  53. package/dist/claude/format.d.ts +44 -1
  54. package/dist/claude/format.d.ts.map +1 -1
  55. package/dist/claude/format.js +113 -19
  56. package/dist/claude/format.js.map +1 -1
  57. package/dist/claude/hook-layers.d.ts +8 -0
  58. package/dist/claude/hook-layers.d.ts.map +1 -0
  59. package/dist/claude/hook-layers.js +72 -0
  60. package/dist/claude/hook-layers.js.map +1 -0
  61. package/dist/claude/hooks.d.ts +34 -0
  62. package/dist/claude/hooks.d.ts.map +1 -1
  63. package/dist/claude/hooks.js +220 -12
  64. package/dist/claude/hooks.js.map +1 -1
  65. package/dist/claude/init.d.ts +12 -1
  66. package/dist/claude/init.d.ts.map +1 -1
  67. package/dist/claude/init.js +48 -19
  68. package/dist/claude/init.js.map +1 -1
  69. package/dist/claude/session-metrics.d.ts +1 -1
  70. package/dist/claude/session-metrics.d.ts.map +1 -1
  71. package/dist/claude/session-metrics.js +11 -8
  72. package/dist/claude/session-metrics.js.map +1 -1
  73. package/dist/claude/settings-merge.d.ts +1 -0
  74. package/dist/claude/settings-merge.d.ts.map +1 -1
  75. package/dist/claude/settings-merge.js +21 -18
  76. package/dist/claude/settings-merge.js.map +1 -1
  77. package/dist/claude/shim-template.d.ts +17 -2
  78. package/dist/claude/shim-template.d.ts.map +1 -1
  79. package/dist/claude/shim-template.js +153 -23
  80. package/dist/claude/shim-template.js.map +1 -1
  81. package/dist/claude/skill-template.d.ts +10 -1
  82. package/dist/claude/skill-template.d.ts.map +1 -1
  83. package/dist/claude/skill-template.js +143 -1
  84. package/dist/claude/skill-template.js.map +1 -1
  85. package/dist/claude/state.d.ts +8 -0
  86. package/dist/claude/state.d.ts.map +1 -1
  87. package/dist/claude/state.js.map +1 -1
  88. package/dist/claude/statusline.d.ts.map +1 -1
  89. package/dist/claude/statusline.js +4 -1
  90. package/dist/claude/statusline.js.map +1 -1
  91. package/dist/claude/tally.js +1 -1
  92. package/dist/claude/tally.js.map +1 -1
  93. package/dist/cli-epilogue.d.ts +0 -6
  94. package/dist/cli-epilogue.d.ts.map +1 -1
  95. package/dist/cli-epilogue.js +5 -4
  96. package/dist/cli-epilogue.js.map +1 -1
  97. package/dist/cli-meta.d.ts +8 -0
  98. package/dist/cli-meta.d.ts.map +1 -1
  99. package/dist/cli-meta.js +28 -8
  100. package/dist/cli-meta.js.map +1 -1
  101. package/dist/cli-picker.d.ts +15 -0
  102. package/dist/cli-picker.d.ts.map +1 -1
  103. package/dist/cli-picker.js +44 -10
  104. package/dist/cli-picker.js.map +1 -1
  105. package/dist/cli.d.ts +0 -5
  106. package/dist/cli.d.ts.map +1 -1
  107. package/dist/cli.js +1112 -559
  108. package/dist/cli.js.map +1 -1
  109. package/dist/cloud/diff.d.ts +20 -0
  110. package/dist/cloud/diff.d.ts.map +1 -0
  111. package/dist/cloud/diff.js +59 -0
  112. package/dist/cloud/diff.js.map +1 -0
  113. package/dist/cloud/nudge.d.ts +66 -0
  114. package/dist/cloud/nudge.d.ts.map +1 -0
  115. package/dist/cloud/nudge.js +269 -0
  116. package/dist/cloud/nudge.js.map +1 -0
  117. package/dist/cloud/workspace-sync.d.ts +58 -0
  118. package/dist/cloud/workspace-sync.d.ts.map +1 -0
  119. package/dist/cloud/workspace-sync.js +268 -0
  120. package/dist/cloud/workspace-sync.js.map +1 -0
  121. package/dist/cloud/workspace.d.ts +159 -0
  122. package/dist/cloud/workspace.d.ts.map +1 -0
  123. package/dist/cloud/workspace.js +134 -0
  124. package/dist/cloud/workspace.js.map +1 -0
  125. package/dist/context/check.d.ts +1 -1
  126. package/dist/context/check.d.ts.map +1 -1
  127. package/dist/context/check.js +9 -8
  128. package/dist/context/check.js.map +1 -1
  129. package/dist/context/node-file.js +1 -1
  130. package/dist/context/node-file.js.map +1 -1
  131. package/dist/context/savings.d.ts.map +1 -1
  132. package/dist/context/savings.js +10 -7
  133. package/dist/context/savings.js.map +1 -1
  134. package/dist/engine.d.ts.map +1 -1
  135. package/dist/engine.js +3 -1
  136. package/dist/engine.js.map +1 -1
  137. package/dist/graph/build.d.ts +30 -0
  138. package/dist/graph/build.d.ts.map +1 -1
  139. package/dist/graph/build.js +65 -19
  140. package/dist/graph/build.js.map +1 -1
  141. package/dist/graph/cards.d.ts.map +1 -1
  142. package/dist/graph/cards.js +4 -2
  143. package/dist/graph/cards.js.map +1 -1
  144. package/dist/graph/check.d.ts.map +1 -1
  145. package/dist/graph/check.js +17 -18
  146. package/dist/graph/check.js.map +1 -1
  147. package/dist/graph/container.d.ts.map +1 -1
  148. package/dist/graph/container.js +7 -2
  149. package/dist/graph/container.js.map +1 -1
  150. package/dist/graph/extract-cache.d.ts +4 -0
  151. package/dist/graph/extract-cache.d.ts.map +1 -1
  152. package/dist/graph/extract-cache.js.map +1 -1
  153. package/dist/graph/extract.d.ts +2 -0
  154. package/dist/graph/extract.d.ts.map +1 -1
  155. package/dist/graph/extract.js +5 -32
  156. package/dist/graph/extract.js.map +1 -1
  157. package/dist/graph/generic.d.ts +7 -1
  158. package/dist/graph/generic.d.ts.map +1 -1
  159. package/dist/graph/generic.js +48 -8
  160. package/dist/graph/generic.js.map +1 -1
  161. package/dist/graph/native.d.ts +38 -0
  162. package/dist/graph/native.d.ts.map +1 -0
  163. package/dist/graph/native.js +169 -0
  164. package/dist/graph/native.js.map +1 -0
  165. package/dist/graph/refresh.d.ts.map +1 -1
  166. package/dist/graph/refresh.js +3 -2
  167. package/dist/graph/refresh.js.map +1 -1
  168. package/dist/graph/traverse-cli.d.ts.map +1 -1
  169. package/dist/graph/traverse-cli.js +4 -3
  170. package/dist/graph/traverse-cli.js.map +1 -1
  171. package/dist/graph/workspace-cli.d.ts +2 -0
  172. package/dist/graph/workspace-cli.d.ts.map +1 -1
  173. package/dist/graph/workspace-cli.js +13 -1
  174. package/dist/graph/workspace-cli.js.map +1 -1
  175. package/dist/graph/workspace.d.ts.map +1 -1
  176. package/dist/graph/workspace.js +6 -5
  177. package/dist/graph/workspace.js.map +1 -1
  178. package/dist/hosts/antigravity.d.ts +10 -3
  179. package/dist/hosts/antigravity.d.ts.map +1 -1
  180. package/dist/hosts/antigravity.js +27 -10
  181. package/dist/hosts/antigravity.js.map +1 -1
  182. package/dist/hosts/claude-global.d.ts +27 -4
  183. package/dist/hosts/claude-global.d.ts.map +1 -1
  184. package/dist/hosts/claude-global.js +90 -9
  185. package/dist/hosts/claude-global.js.map +1 -1
  186. package/dist/hosts/codex-hooks.d.ts.map +1 -1
  187. package/dist/hosts/codex-hooks.js +1 -2
  188. package/dist/hosts/codex-hooks.js.map +1 -1
  189. package/dist/hosts/config-write.d.ts.map +1 -1
  190. package/dist/hosts/config-write.js +2 -1
  191. package/dist/hosts/config-write.js.map +1 -1
  192. package/dist/hosts/cursor-hooks.d.ts +5 -2
  193. package/dist/hosts/cursor-hooks.d.ts.map +1 -1
  194. package/dist/hosts/cursor-hooks.js +14 -9
  195. package/dist/hosts/cursor-hooks.js.map +1 -1
  196. package/dist/hosts/init.d.ts +3 -0
  197. package/dist/hosts/init.d.ts.map +1 -1
  198. package/dist/hosts/init.js +32 -10
  199. package/dist/hosts/init.js.map +1 -1
  200. package/dist/hosts/instructions.d.ts +9 -4
  201. package/dist/hosts/instructions.d.ts.map +1 -1
  202. package/dist/hosts/instructions.js +19 -16
  203. package/dist/hosts/instructions.js.map +1 -1
  204. package/dist/hosts/mcp-config.d.ts +19 -4
  205. package/dist/hosts/mcp-config.d.ts.map +1 -1
  206. package/dist/hosts/mcp-config.js +81 -30
  207. package/dist/hosts/mcp-config.js.map +1 -1
  208. package/dist/hosts/plan.d.ts.map +1 -1
  209. package/dist/hosts/plan.js +11 -9
  210. package/dist/hosts/plan.js.map +1 -1
  211. package/dist/hosts/registry.d.ts +25 -2
  212. package/dist/hosts/registry.d.ts.map +1 -1
  213. package/dist/hosts/registry.js +53 -0
  214. package/dist/hosts/registry.js.map +1 -1
  215. package/dist/hosts/retract.d.ts.map +1 -1
  216. package/dist/hosts/retract.js +73 -33
  217. package/dist/hosts/retract.js.map +1 -1
  218. package/dist/hosts/sections.d.ts +17 -1
  219. package/dist/hosts/sections.d.ts.map +1 -1
  220. package/dist/hosts/sections.js +52 -2
  221. package/dist/hosts/sections.js.map +1 -1
  222. package/dist/mcp/instructions.d.ts +1 -25
  223. package/dist/mcp/instructions.d.ts.map +1 -1
  224. package/dist/mcp/instructions.js +6 -4
  225. package/dist/mcp/instructions.js.map +1 -1
  226. package/dist/mcp/server.d.ts.map +1 -1
  227. package/dist/mcp/server.js +7 -3
  228. package/dist/mcp/server.js.map +1 -1
  229. package/dist/mcp/tool-names.d.ts +10 -3
  230. package/dist/mcp/tool-names.d.ts.map +1 -1
  231. package/dist/mcp/tool-names.js +13 -5
  232. package/dist/mcp/tool-names.js.map +1 -1
  233. package/dist/mcp/tools.d.ts.map +1 -1
  234. package/dist/mcp/tools.js +6 -5
  235. package/dist/mcp/tools.js.map +1 -1
  236. package/dist/notes/ask-notes.d.ts +8 -0
  237. package/dist/notes/ask-notes.d.ts.map +1 -0
  238. package/dist/notes/ask-notes.js +18 -0
  239. package/dist/notes/ask-notes.js.map +1 -0
  240. package/dist/notes/branches.d.ts +85 -0
  241. package/dist/notes/branches.d.ts.map +1 -0
  242. package/dist/notes/branches.js +238 -0
  243. package/dist/notes/branches.js.map +1 -0
  244. package/dist/notes/cold-start.d.ts +177 -0
  245. package/dist/notes/cold-start.d.ts.map +1 -0
  246. package/dist/notes/cold-start.js +537 -0
  247. package/dist/notes/cold-start.js.map +1 -0
  248. package/dist/notes/git-facts.d.ts +17 -0
  249. package/dist/notes/git-facts.d.ts.map +1 -0
  250. package/dist/notes/git-facts.js +117 -0
  251. package/dist/notes/git-facts.js.map +1 -0
  252. package/dist/notes/home.d.ts +87 -0
  253. package/dist/notes/home.d.ts.map +1 -0
  254. package/dist/notes/home.js +423 -0
  255. package/dist/notes/home.js.map +1 -0
  256. package/dist/notes/notes.d.ts +193 -0
  257. package/dist/notes/notes.d.ts.map +1 -0
  258. package/dist/notes/notes.js +536 -0
  259. package/dist/notes/notes.js.map +1 -0
  260. package/dist/notes/pr-reviews.d.ts +108 -0
  261. package/dist/notes/pr-reviews.d.ts.map +1 -0
  262. package/dist/notes/pr-reviews.js +325 -0
  263. package/dist/notes/pr-reviews.js.map +1 -0
  264. package/dist/notes/repo-trail.d.ts +16 -0
  265. package/dist/notes/repo-trail.d.ts.map +1 -0
  266. package/dist/notes/repo-trail.js +74 -0
  267. package/dist/notes/repo-trail.js.map +1 -0
  268. package/dist/notes/session-cost.d.ts +21 -0
  269. package/dist/notes/session-cost.d.ts.map +1 -0
  270. package/dist/notes/session-cost.js +162 -0
  271. package/dist/notes/session-cost.js.map +1 -0
  272. package/dist/search/grep-cli.d.ts.map +1 -1
  273. package/dist/search/grep-cli.js +4 -3
  274. package/dist/search/grep-cli.js.map +1 -1
  275. package/dist/skills/skills.d.ts +118 -0
  276. package/dist/skills/skills.d.ts.map +1 -0
  277. package/dist/skills/skills.js +370 -0
  278. package/dist/skills/skills.js.map +1 -0
  279. package/dist/telemetry/contract.d.ts +2 -14
  280. package/dist/telemetry/contract.d.ts.map +1 -1
  281. package/dist/telemetry/contract.js +40 -24
  282. package/dist/telemetry/contract.js.map +1 -1
  283. package/dist/telemetry/gate.d.ts.map +1 -1
  284. package/dist/telemetry/gate.js +2 -1
  285. package/dist/telemetry/gate.js.map +1 -1
  286. package/dist/telemetry/notice.d.ts +1 -1
  287. package/dist/telemetry/notice.d.ts.map +1 -1
  288. package/dist/telemetry/notice.js +6 -5
  289. package/dist/telemetry/notice.js.map +1 -1
  290. package/dist/telemetry/track.d.ts.map +1 -1
  291. package/dist/telemetry/track.js +5 -0
  292. package/dist/telemetry/track.js.map +1 -1
  293. package/dist/upkeep-run.d.ts +7 -0
  294. package/dist/upkeep-run.d.ts.map +1 -1
  295. package/dist/upkeep-run.js +52 -12
  296. package/dist/upkeep-run.js.map +1 -1
  297. package/dist/upkeep.d.ts +9 -19
  298. package/dist/upkeep.d.ts.map +1 -1
  299. package/dist/upkeep.js +38 -59
  300. package/dist/upkeep.js.map +1 -1
  301. package/dist/util/browser.d.ts +3 -0
  302. package/dist/util/browser.d.ts.map +1 -0
  303. package/dist/util/browser.js +14 -0
  304. package/dist/util/browser.js.map +1 -0
  305. package/dist/util/front-matter.d.ts +19 -0
  306. package/dist/util/front-matter.d.ts.map +1 -0
  307. package/dist/util/front-matter.js +21 -0
  308. package/dist/util/front-matter.js.map +1 -0
  309. package/dist/util/state.d.ts +1 -18
  310. package/dist/util/state.d.ts.map +1 -1
  311. package/dist/util/state.js +4 -2
  312. package/dist/util/state.js.map +1 -1
  313. package/dist/viz/assemble.js +1 -1
  314. package/dist/viz/assemble.js.map +1 -1
  315. package/dist/viz/serve.d.ts.map +1 -1
  316. package/dist/viz/serve.js +4 -3
  317. package/dist/viz/serve.js.map +1 -1
  318. package/package.json +7 -7
  319. package/scripts/pack-trail.mjs +53 -0
  320. package/scripts/postinstall.mjs +17 -2
  321. package/scripts/run-tests.mjs +4 -1
  322. package/dist/app/brain-build-process.d.ts +0 -22
  323. package/dist/app/brain-build-process.d.ts.map +0 -1
  324. package/dist/app/brain-build-process.js +0 -129
  325. package/dist/app/brain-build-process.js.map +0 -1
  326. package/dist/app/brain-build-worker.d.ts +0 -35
  327. package/dist/app/brain-build-worker.d.ts.map +0 -1
  328. package/dist/app/brain-build-worker.js +0 -56
  329. package/dist/app/brain-build-worker.js.map +0 -1
  330. package/dist/app/brain-build.d.ts +0 -160
  331. package/dist/app/brain-build.d.ts.map +0 -1
  332. package/dist/app/brain-build.js +0 -278
  333. package/dist/app/brain-build.js.map +0 -1
  334. package/dist/app/history.d.ts +0 -163
  335. package/dist/app/history.d.ts.map +0 -1
  336. package/dist/app/history.js +0 -319
  337. package/dist/app/history.js.map +0 -1
  338. package/dist/app/sources.d.ts +0 -81
  339. package/dist/app/sources.d.ts.map +0 -1
  340. package/dist/app/sources.js +0 -470
  341. package/dist/app/sources.js.map +0 -1
  342. package/dist/brain/attach.d.ts +0 -44
  343. package/dist/brain/attach.d.ts.map +0 -1
  344. package/dist/brain/attach.js +0 -63
  345. package/dist/brain/attach.js.map +0 -1
  346. package/dist/brain/claude-md.d.ts +0 -61
  347. package/dist/brain/claude-md.d.ts.map +0 -1
  348. package/dist/brain/claude-md.js +0 -171
  349. package/dist/brain/claude-md.js.map +0 -1
  350. package/dist/brain/connect.d.ts +0 -59
  351. package/dist/brain/connect.d.ts.map +0 -1
  352. package/dist/brain/connect.js +0 -80
  353. package/dist/brain/connect.js.map +0 -1
  354. package/dist/brain/context-files.d.ts +0 -79
  355. package/dist/brain/context-files.d.ts.map +0 -1
  356. package/dist/brain/context-files.js +0 -245
  357. package/dist/brain/context-files.js.map +0 -1
  358. package/dist/brain/link.d.ts +0 -106
  359. package/dist/brain/link.d.ts.map +0 -1
  360. package/dist/brain/link.js +0 -167
  361. package/dist/brain/link.js.map +0 -1
  362. package/dist/brain/pull.d.ts +0 -48
  363. package/dist/brain/pull.d.ts.map +0 -1
  364. package/dist/brain/pull.js +0 -257
  365. package/dist/brain/pull.js.map +0 -1
  366. package/dist/brain/push.d.ts +0 -155
  367. package/dist/brain/push.d.ts.map +0 -1
  368. package/dist/brain/push.js +0 -304
  369. package/dist/brain/push.js.map +0 -1
  370. package/dist/brain/signup.d.ts +0 -117
  371. package/dist/brain/signup.d.ts.map +0 -1
  372. package/dist/brain/signup.js +0 -276
  373. package/dist/brain/signup.js.map +0 -1
  374. package/dist/brain/upload.d.ts +0 -61
  375. package/dist/brain/upload.d.ts.map +0 -1
  376. package/dist/brain/upload.js +0 -210
  377. package/dist/brain/upload.js.map +0 -1
  378. package/dist/brain/watch.d.ts +0 -209
  379. package/dist/brain/watch.d.ts.map +0 -1
  380. package/dist/brain/watch.js +0 -397
  381. package/dist/brain/watch.js.map +0 -1
  382. package/dist/brain/wire.d.ts +0 -38
  383. package/dist/brain/wire.d.ts.map +0 -1
  384. package/dist/brain/wire.js +0 -133
  385. package/dist/brain/wire.js.map +0 -1
  386. package/dist/legacy-args.d.ts +0 -12
  387. package/dist/legacy-args.d.ts.map +0 -1
  388. package/dist/legacy-args.js +0 -31
  389. package/dist/legacy-args.js.map +0 -1
@@ -59,11 +59,13 @@ export function readJson(p) {
59
59
  * open) accumulates one full-size file per attempt, and nothing in graft ever lists
60
60
  * `.cache/` to clean them up.
61
61
  */
62
- export function writeJsonAtomic(p, value, compact = false) {
62
+ export function writeJsonAtomic(p, value, compact = false, mode) {
63
63
  mkdirSync(dirname(p), { recursive: true });
64
64
  const tmp = `${p}.${process.pid}.tmp`;
65
65
  try {
66
- writeFileSync(tmp, compact ? JSON.stringify(value) : JSON.stringify(value, null, 2));
66
+ // `mode` applies to the new file before it's renamed into place, so a
67
+ // secret is never readable by others even for a moment.
68
+ writeFileSync(tmp, compact ? JSON.stringify(value) : JSON.stringify(value, null, 2), mode === undefined ? undefined : { mode });
67
69
  renameSync(tmp, p);
68
70
  }
69
71
  catch (e) {
@@ -1 +1 @@
1
- {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/util/state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/util/state.ts"],"names":[],"mappings":"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"}
@@ -12,7 +12,7 @@
12
12
  */
13
13
  import { readFileSync, readdirSync, existsSync } from "node:fs";
14
14
  import { join } from "node:path";
15
- import matter from "gray-matter";
15
+ import { matter } from "../util/front-matter.js";
16
16
  /**
17
17
  * Legacy vague verbs → the concrete verb they usually mean. Keeps old
18
18
  * `.context/` folders readable without regeneration; the synthesizer itself
@@ -1 +1 @@
1
- {"version":3,"file":"assemble.js","sourceRoot":"","sources":["../../src/viz/assemble.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"assemble.js","sourceRoot":"","sources":["../../src/viz/assemble.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../src/viz/serve.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AA+BD,wBAAsB,cAAc,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,SAAS,CAAC,CA2F/E"}
1
+ {"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../src/viz/serve.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AA+BD,wBAAsB,cAAc,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,SAAS,CAAC,CA2F/E"}
package/dist/viz/serve.js CHANGED
@@ -12,6 +12,7 @@ import { createServer } from "node:http";
12
12
  import { readFileSync, existsSync, watch } from "node:fs";
13
13
  import { join } from "node:path";
14
14
  import { assembleContextGraph } from "./assemble.js";
15
+ import { cmd } from "../brand.js";
15
16
  const PORT_ATTEMPTS = 10;
16
17
  const WATCH_DEBOUNCE_MS = 300;
17
18
  const STATIC_FILES = {
@@ -63,19 +64,19 @@ export async function startVizServer(opts) {
63
64
  if (path === "/api/code-graph") {
64
65
  const file = join(opts.contextDir, ".graph", "wiring.json");
65
66
  if (!existsSync(file)) {
66
- sendJson(res, 404, { error: "no wiring graph in this context dir — run `graft build` first" });
67
+ sendJson(res, 404, { error: `no wiring graph in this context dir — run \`${cmd("graft build")}\` first` });
67
68
  return;
68
69
  }
69
70
  try {
70
71
  const parsed = JSON.parse(readFileSync(file, "utf8"));
71
72
  if (parsed?.meta?.version !== 1) {
72
- sendJson(res, 404, { error: "wiring.json has an unsupported version — regenerate with `graft build`" });
73
+ sendJson(res, 404, { error: `wiring.json has an unsupported version — regenerate with \`${cmd("graft build")}\`` });
73
74
  return;
74
75
  }
75
76
  sendJson(res, 200, parsed);
76
77
  }
77
78
  catch {
78
- sendJson(res, 404, { error: "wiring.json is unreadable — regenerate with `graft build`" });
79
+ sendJson(res, 404, { error: `wiring.json is unreadable — regenerate with \`${cmd("graft build")}\`` });
79
80
  }
80
81
  return;
81
82
  }
@@ -1 +1 @@
1
- {"version":3,"file":"serve.js","sourceRoot":"","sources":["../../src/viz/serve.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"serve.js","sourceRoot":"","sources":["../../src/viz/serve.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nanonets/graft",
3
- "version": "0.21.1",
3
+ "version": "0.22.1",
4
4
  "description": "Build a repo's context graph as a folder of linked markdown files: a local, regenerable cache that every query keeps in sync with your code.",
5
5
  "keywords": [
6
6
  "ai",
@@ -14,11 +14,11 @@
14
14
  "license": "MIT",
15
15
  "repository": {
16
16
  "type": "git",
17
- "url": "git+https://github.com/NanoNets/context-graph-engine.git"
17
+ "url": "git+https://github.com/trailhq/Trail-Code.git"
18
18
  },
19
- "homepage": "https://github.com/NanoNets/context-graph-engine#readme",
19
+ "homepage": "https://github.com/trailhq/Trail-Code#readme",
20
20
  "bugs": {
21
- "url": "https://github.com/NanoNets/context-graph-engine/issues"
21
+ "url": "https://github.com/trailhq/Trail-Code/issues"
22
22
  },
23
23
  "publishConfig": {
24
24
  "access": "public"
@@ -34,7 +34,7 @@
34
34
  "./package.json": "./package.json"
35
35
  },
36
36
  "bin": {
37
- "graft": "dist/cli.js"
37
+ "graft": "dist/bin/graft.js"
38
38
  },
39
39
  "files": [
40
40
  "dist",
@@ -55,11 +55,11 @@
55
55
  "node": ">=20"
56
56
  },
57
57
  "dependencies": {
58
- "@anthropic-ai/sdk": "^0.117.1",
58
+ "@anthropic-ai/sdk": "^0.122.0",
59
59
  "commander": "^15.0.0",
60
60
  "dotenv": "^17.4.2",
61
61
  "gray-matter": "^4.0.3",
62
- "openai": "^6.45.0",
62
+ "openai": "^7.8.0",
63
63
  "tree-sitter": "^0.21.1",
64
64
  "tree-sitter-go": "^0.23.4",
65
65
  "tree-sitter-java": "^0.23.5",
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Lays out the `@trailhq/trail-code` package from this repo's build, in build/trail/.
3
+ *
4
+ * trail and graft are one program under two names, published as two packages
5
+ * from the same `dist/`:
6
+ *
7
+ * @trailhq/trail-code bin: trail → dist/bin/trail.js
8
+ * @nanonets/graft bin: graft → dist/bin/graft.js (this repo's package.json)
9
+ *
10
+ * Each package ships exactly one command, so installing both never clashes on
11
+ * a bin name, and `graft upgrade` installs both. @nanonets/graft stays a full
12
+ * package rather than a pointer: the hook shims committed in thousands of repos
13
+ * resolve `@nanonets/graft/dist/claude/*` by path, and 78% of active installs
14
+ * are on versions older than the one that knows about trail.
15
+ *
16
+ * Usage, after `npm run build` (and the telemetry key stamp, when publishing):
17
+ * node scripts/pack-trail.mjs
18
+ * npm publish build/trail --access public
19
+ */
20
+ import { cpSync, existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
21
+ import { dirname, join, resolve } from 'node:path';
22
+ import { fileURLToPath } from 'node:url';
23
+
24
+ const root = resolve(dirname(fileURLToPath(import.meta.url)), '..');
25
+ const out = join(root, 'build', 'trail');
26
+
27
+ if (!existsSync(join(root, 'dist', 'bin', 'trail.js'))) {
28
+ console.error('✗ dist/bin/trail.js not found — run `npm run build` first');
29
+ process.exit(1);
30
+ }
31
+
32
+ const pkg = JSON.parse(readFileSync(join(root, 'package.json'), 'utf8'));
33
+ const trail = {
34
+ ...pkg,
35
+ name: '@trailhq/trail-code',
36
+ description:
37
+ "Your team's shared memory for coding agents: a code map on your machine, and the learnings, decisions and skills your whole team shares. Formerly graft.",
38
+ keywords: [...new Set(['trail', ...(pkg.keywords ?? [])])],
39
+ bin: { trail: 'dist/bin/trail.js' },
40
+ // Built already; nothing to compile in the published tree.
41
+ scripts: { postinstall: pkg.scripts.postinstall },
42
+ };
43
+ delete trail.devDependencies;
44
+
45
+ rmSync(out, { recursive: true, force: true });
46
+ mkdirSync(out, { recursive: true });
47
+ for (const f of pkg.files) {
48
+ const from = join(root, f);
49
+ if (existsSync(from)) cpSync(from, join(out, f), { recursive: true });
50
+ }
51
+ writeFileSync(join(out, 'package.json'), JSON.stringify(trail, null, 2) + '\n');
52
+ console.log(`✓ ${trail.name}@${trail.version} laid out in ${out}`);
53
+ console.log(' publish it with: npm publish build/trail --access public');
@@ -1,12 +1,22 @@
1
1
  // Prints a one-line nudge after install, and records the anonymous `install`
2
2
  // event. Never fails the install.
3
- import { existsSync } from 'node:fs';
3
+ import { existsSync, readFileSync } from 'node:fs';
4
4
  import { spawn } from 'node:child_process';
5
5
  import { dirname, join } from 'node:path';
6
6
  import { fileURLToPath, pathToFileURL } from 'node:url';
7
7
 
8
8
  const root = dirname(dirname(fileURLToPath(import.meta.url)));
9
9
 
10
+ // The same code ships as @trailhq/trail-code (the `trail` command) and as
11
+ // @nanonets/graft (`graft`, its old name). The install event and the nudge say
12
+ // which one this is.
13
+ let pkgName = '@nanonets/graft';
14
+ try {
15
+ pkgName = JSON.parse(readFileSync(join(root, 'package.json'), 'utf8')).name ?? pkgName;
16
+ } catch { /* the graft defaults */ }
17
+ const isTrail = pkgName === '@trailhq/trail-code';
18
+ if (isTrail) process.env.TRAIL_INVOKED_AS = 'trail';
19
+
10
20
  /**
11
21
  * Record the install, then hand the queue straight to a detached child.
12
22
  *
@@ -44,7 +54,12 @@ try {
44
54
  // not be able to silence it.
45
55
  try { await recordInstall(); } catch { /* telemetry is never worth an error */ }
46
56
  if (existsSync(join(dir, '.claude', 'helpers', 'graft-statusline.cjs'))) process.exit(0);
47
- console.log('\n Graft installed. Run `npx graft init` to enable the Claude Code integration (statusline + hooks + auto-sync).\n');
57
+ if (existsSync(join(dir, '.claude', 'helpers', 'trail-statusline.cjs'))) process.exit(0);
58
+ console.log(
59
+ isTrail
60
+ ? '\n Trail installed. Run `trail init` in a repo to wire it into your agents.\n'
61
+ : '\n Graft installed. Run `npx graft init` to enable the Claude Code integration (statusline + hooks + auto-sync).\n',
62
+ );
48
63
  } catch {
49
64
  /* never fail an install */
50
65
  }
@@ -43,10 +43,13 @@ const gitEnv = {
43
43
  GIT_CONFIG_KEY_1: "tag.gpgsign", GIT_CONFIG_VALUE_1: "false",
44
44
  };
45
45
 
46
+ // A graft repo moves to trail when a session opens on a machine with the trail
47
+ // command, so a contributor who has trail installed would see test repos move.
48
+ // Off for the run; the tests of the move turn it back on.
46
49
  const result = spawnSync(process.execPath, ["--import", "tsx", "--test", ...files], {
47
50
  cwd: repoRoot,
48
51
  stdio: "inherit",
49
- env: { ...process.env, ...gitEnv },
52
+ env: { ...process.env, ...gitEnv, GRAFT_NO_TRAIL_SWITCH: "1" },
50
53
  });
51
54
 
52
55
  if (result.error) {
@@ -1,22 +0,0 @@
1
- import { type BrainBuildDeps, type BrainBuildJob, type BrainBuildResult } from "./brain-build.js";
2
- export interface ChildBuilderOptions {
3
- /** The module the child runs. Only tests pass this. */
4
- entry?: string;
5
- timeoutMs?: number;
6
- }
7
- /**
8
- * The module a read runs in. `dist/app/brain-build-worker.js` when installed or
9
- * containerised; the TypeScript source next door when run from a checkout,
10
- * since `fork` inherits `process.execArgv` and a parent started through tsx
11
- * hands the child the same loader.
12
- */
13
- export declare function brainBuildWorkerEntry(): string;
14
- /**
15
- * A builder with buildRepoIntoBrain's signature that runs the heavy half in a
16
- * child process. Same shape on purpose: server.ts swaps one for the other in a
17
- * single line, and a test injecting its own builder keeps running in-process.
18
- */
19
- export declare function childBuilder(opts?: ChildBuilderOptions): (job: BrainBuildJob, deps: BrainBuildDeps) => Promise<BrainBuildResult>;
20
- /** The App's default builder. */
21
- export declare const buildRepoInChildProcess: (job: BrainBuildJob, deps: BrainBuildDeps) => Promise<BrainBuildResult>;
22
- //# sourceMappingURL=brain-build-process.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"brain-build-process.d.ts","sourceRoot":"","sources":["../../src/app/brain-build-process.ts"],"names":[],"mappings":"AAyBA,OAAO,EAAmB,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAanH,MAAM,WAAW,mBAAmB;IAClC,uDAAuD;IACvD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAK9C;AAeD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,GAAE,mBAAwB,GAAG,CAAC,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,cAAc,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAUpI;AAgED,iCAAiC;AACjC,eAAO,MAAM,uBAAuB,QA3EgC,aAAa,QAAQ,cAAc,KAAK,OAAO,CAAC,gBAAgB,CA2E/E,CAAC"}
@@ -1,129 +0,0 @@
1
- /**
2
- * Running a repository read somewhere it cannot stop the App answering.
3
- *
4
- * The same problem the reviewer had, and the same fix — see review-process.ts
5
- * for the full reasoning and the production measurements behind it. In short:
6
- * every expensive step of a read is synchronous (git through `spawnSync`, the
7
- * parse a loop of native tree-sitter calls, the graph written with a blocking
8
- * stringify), so in-process one read holds the event loop for its whole
9
- * duration.
10
- *
11
- * Onboarding made that visible in a way reviews did not. Measured on
12
- * NanoNets/assign: 0.7s to check access, 7s to clone, 81s to build the symbol
13
- * graph, 21s to walk the pull requests. During those 81 seconds the App
14
- * answered nothing at all — including the one-second question "can we see this
15
- * other repository", asked by the next person to paste a URL, who then waited
16
- * out someone else's clone before being told their repo is private. At a
17
- * hundred signups there is nearly always a read in flight, so that is not an
18
- * edge case, it is the normal case.
19
- *
20
- * The split is where the credential is: the parent resolves access and mints
21
- * the token (network, never blocking), and the child does the work with it.
22
- */
23
- import { fork } from "node:child_process";
24
- import { existsSync } from "node:fs";
25
- import { fileURLToPath } from "node:url";
26
- import { resolveRepoRead } from "./brain-build.js";
27
- /**
28
- * How long one read may take before the process running it is killed.
29
- *
30
- * Well above the worst honest read seen (110s on a large monorepo) plus the
31
- * clone budget checkout.ts allows itself, because the cost of being wrong is a
32
- * read that never happens. It bounds a lost slot, not responsiveness — the
33
- * server stopped caring how long a read takes the moment it left this process.
34
- */
35
- const DEFAULT_TIMEOUT_MS = 15 * 60 * 1000;
36
- /**
37
- * The module a read runs in. `dist/app/brain-build-worker.js` when installed or
38
- * containerised; the TypeScript source next door when run from a checkout,
39
- * since `fork` inherits `process.execArgv` and a parent started through tsx
40
- * hands the child the same loader.
41
- */
42
- export function brainBuildWorkerEntry() {
43
- const js = fileURLToPath(new URL("./brain-build-worker.js", import.meta.url));
44
- if (existsSync(js))
45
- return js;
46
- const ts = js.replace(/\.js$/, ".ts");
47
- return existsSync(ts) ? ts : js;
48
- }
49
- /** Reads in flight, so a shutdown does not leave a clone made with a token. */
50
- const live = new Set();
51
- let hooked = false;
52
- function track(child) {
53
- live.add(child);
54
- if (hooked)
55
- return;
56
- hooked = true;
57
- process.on("exit", () => {
58
- for (const c of live)
59
- c.kill("SIGKILL");
60
- });
61
- }
62
- /**
63
- * A builder with buildRepoIntoBrain's signature that runs the heavy half in a
64
- * child process. Same shape on purpose: server.ts swaps one for the other in a
65
- * single line, and a test injecting its own builder keeps running in-process.
66
- */
67
- export function childBuilder(opts = {}) {
68
- const entry = opts.entry ?? brainBuildWorkerEntry();
69
- const timeoutMs = opts.timeoutMs ?? DEFAULT_TIMEOUT_MS;
70
- return async (job, deps) => {
71
- // In the parent, deliberately: it is pure network, it is what decides
72
- // whether there is anything to fork for, and a RepoNotAccessibleError has
73
- // to reach the caller as itself rather than as a dead child process.
74
- const auth = await resolveRepoRead(job, deps);
75
- return runInChild(job, deps, auth, entry, timeoutMs);
76
- };
77
- }
78
- async function runInChild(job, deps, auth, entry, timeoutMs) {
79
- const log = deps.log ?? (() => { });
80
- const tag = `${job.owner}/${job.repo}`;
81
- // The repository as argv makes `ps` in a container say which read each
82
- // process is; the token stays out of it.
83
- const child = fork(entry, [tag], { stdio: ["ignore", "inherit", "inherit", "ipc"] });
84
- track(child);
85
- try {
86
- return await new Promise((resolve, reject) => {
87
- let settled = false;
88
- const settle = (fn) => {
89
- if (settled)
90
- return;
91
- settled = true;
92
- clearTimeout(timer);
93
- fn();
94
- };
95
- const timer = setTimeout(() => {
96
- settle(() => reject(new Error(`read of ${tag} exceeded ${timeoutMs}ms and was killed`)));
97
- }, timeoutMs);
98
- timer.unref();
99
- child.on("message", (raw) => {
100
- const msg = raw;
101
- if (msg.t === "log") {
102
- log(msg.msg);
103
- return;
104
- }
105
- if (msg.t === "done") {
106
- settle(() => resolve(msg.result));
107
- return;
108
- }
109
- settle(() => reject(new Error(msg.message)));
110
- });
111
- child.on("error", (err) => settle(() => reject(err)));
112
- // The case that used to be an outage: a child that dies without
113
- // reporting. An OOM kill on a large repository, a grammar segfault on a
114
- // stranger's source. Now it costs one read, named, with the signal.
115
- child.on("exit", (code, signal) => settle(() => reject(new Error(`read of ${tag} exited ${signal ? `on ${signal}` : `with code ${code}`} before reporting a result`))));
116
- const start = { t: "start", job, auth, api: deps.api, githubHost: deps.githubHost };
117
- if (child.connected)
118
- child.send(start);
119
- });
120
- }
121
- finally {
122
- live.delete(child);
123
- if (child.exitCode === null && child.signalCode === null)
124
- child.kill("SIGKILL");
125
- }
126
- }
127
- /** The App's default builder. */
128
- export const buildRepoInChildProcess = childBuilder();
129
- //# sourceMappingURL=brain-build-process.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"brain-build-process.js","sourceRoot":"","sources":["../../src/app/brain-build-process.ts"],"names":[],"mappings":"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"}
@@ -1,35 +0,0 @@
1
- /**
2
- * The process one repository read runs in.
3
- *
4
- * Forked by brain-build-process.ts, one per read, and it exits when the read
5
- * does. It receives the credential it needs rather than the App's private key,
6
- * for the same reason the reviewer's worker does: `ps` and `/proc/<pid>/environ`
7
- * are readable, and a key that never crosses the boundary cannot leak across it.
8
- *
9
- * Everything expensive happens here — the clone, the tree-sitter parse, the
10
- * pull-request walk — and none of it can reach the server's event loop.
11
- */
12
- import { readRepository, type BrainBuildJob, type RepoReadAuth } from "./brain-build.js";
13
- /** Parent → child, once, immediately after the fork. */
14
- export interface StartMessage {
15
- t: "start";
16
- job: BrainBuildJob;
17
- auth: RepoReadAuth;
18
- api?: string;
19
- githubHost?: string;
20
- }
21
- /** Child → parent: a line for the App's log, so a read is still traceable. */
22
- export interface LogMessage {
23
- t: "log";
24
- msg: string;
25
- }
26
- export interface DoneMessage {
27
- t: "done";
28
- result: Awaited<ReturnType<typeof readRepository>>;
29
- }
30
- export interface FailedMessage {
31
- t: "failed";
32
- message: string;
33
- }
34
- export type FromChild = LogMessage | DoneMessage | FailedMessage;
35
- //# sourceMappingURL=brain-build-worker.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"brain-build-worker.d.ts","sourceRoot":"","sources":["../../src/app/brain-build-worker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,cAAc,EAAE,KAAK,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEzF,wDAAwD;AACxD,MAAM,WAAW,YAAY;IAC3B,CAAC,EAAE,OAAO,CAAC;IACX,GAAG,EAAE,aAAa,CAAC;IACnB,IAAI,EAAE,YAAY,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,8EAA8E;AAC9E,MAAM,WAAW,UAAU;IACzB,CAAC,EAAE,KAAK,CAAC;IACT,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,WAAW;IAC1B,CAAC,EAAE,MAAM,CAAC;IACV,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,CAAC;CACpD;AAED,MAAM,WAAW,aAAa;IAC5B,CAAC,EAAE,QAAQ,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG,WAAW,GAAG,aAAa,CAAC"}
@@ -1,56 +0,0 @@
1
- /**
2
- * The process one repository read runs in.
3
- *
4
- * Forked by brain-build-process.ts, one per read, and it exits when the read
5
- * does. It receives the credential it needs rather than the App's private key,
6
- * for the same reason the reviewer's worker does: `ps` and `/proc/<pid>/environ`
7
- * are readable, and a key that never crosses the boundary cannot leak across it.
8
- *
9
- * Everything expensive happens here — the clone, the tree-sitter parse, the
10
- * pull-request walk — and none of it can reach the server's event loop.
11
- */
12
- import { readRepository } from "./brain-build.js";
13
- /**
14
- * Send, and tell me when it has actually gone.
15
- *
16
- * `process.send` is asynchronous, and a digest of a large repository is several
17
- * megabytes — a thousand commits, four thousand symbols. Disconnecting on the
18
- * next line tears the channel down mid-write: the child exits 0, having done
19
- * every bit of the work, and the parent reports "exited before reporting a
20
- * result". It only shows on big repositories, because a small payload clears
21
- * the pipe in one write and survives the race.
22
- */
23
- function send(msg, done) {
24
- if (!process.send) {
25
- done?.();
26
- return;
27
- }
28
- try {
29
- process.send(msg, undefined, undefined, () => done?.());
30
- }
31
- catch {
32
- /* parent went away; the exit is the report */
33
- done?.();
34
- }
35
- }
36
- process.on("message", (raw) => {
37
- const msg = raw;
38
- if (msg.t !== "start")
39
- return;
40
- void readRepository(msg.job, {
41
- // No creds: this half needs none. resolveRepoRead already did every call
42
- // that requires the App's identity, and its answer is in `auth`.
43
- creds: { appId: "", privateKey: "" },
44
- fetch: globalThis.fetch,
45
- api: msg.api,
46
- githubHost: msg.githubHost,
47
- log: (line) => send({ t: "log", msg: line }),
48
- }, msg.auth)
49
- .then((result) => {
50
- send({ t: "done", result }, () => process.disconnect?.());
51
- })
52
- .catch((e) => {
53
- send({ t: "failed", message: e instanceof Error ? e.message : String(e) }, () => process.disconnect?.());
54
- });
55
- });
56
- //# sourceMappingURL=brain-build-worker.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"brain-build-worker.js","sourceRoot":"","sources":["../../src/app/brain-build-worker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,cAAc,EAAyC,MAAM,kBAAkB,CAAC;AA6BzF;;;;;;;;;GASG;AACH,SAAS,IAAI,CAAC,GAAc,EAAE,IAAiB;IAC7C,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAClB,IAAI,EAAE,EAAE,CAAC;QACT,OAAO;IACT,CAAC;IACD,IAAI,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC1D,CAAC;IAAC,MAAM,CAAC;QACP,8CAA8C;QAC9C,IAAI,EAAE,EAAE,CAAC;IACX,CAAC;AACH,CAAC;AAED,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE;IAC5B,MAAM,GAAG,GAAG,GAAmB,CAAC;IAChC,IAAI,GAAG,CAAC,CAAC,KAAK,OAAO;QAAE,OAAO;IAC9B,KAAK,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE;QAC3B,yEAAyE;QACzE,iEAAiE;QACjE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;QACpC,KAAK,EAAE,UAAU,CAAC,KAAK;QACvB,GAAG,EAAE,GAAG,CAAC,GAAG;QACZ,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,GAAG,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;KACrD,EAAE,GAAG,CAAC,IAAI,CAAC;SACT,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;QACf,IAAI,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAC5D,CAAC,CAAC;SACD,KAAK,CAAC,CAAC,CAAU,EAAE,EAAE;QACpB,IAAI,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAC3G,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}