@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,233 @@
1
+ import { currentRun, skillsGate, withSkillSession } from '../trace/skill-session.js';
2
+ import { checkedSuccess, costly, runHelpers, writeRunSheet } from '../trace/runs.js';
3
+ import { notePoolDay } from '../trace/pool.js';
4
+ import { repoKnown } from '../trace/known-repo.js';
5
+ import { OFFER_FAMILIES } from '../trace/jobs.js';
6
+ import { localDate } from '../skills/settings.js';
7
+ import { hostFacts } from '../skills/host-facts.js';
8
+ import { noteCorrectionLine, settleCredit } from '../skills/credit.js';
9
+ import { foldInputFor, replan } from '../skills/update-plan.js';
10
+ import { guardrailStopsIn, noteValue } from '../skills/value-line.js';
11
+ import { offerDue, offerEndsReply, offerRepo } from '../skills/offer-moment.js';
12
+ import { offerLinesOf } from '../skills/offer-lines.js';
13
+ import { noticeText, recordNotShown, recordShown, stopBlockReason } from '../skills/offers.js';
14
+ import { flatLine } from '../notes/flatten.js';
15
+ import { hookError, syncGate } from './skills-hook-util.js';
16
+ import { guardrailCounts, wallsAtStop } from './walls-hook.js';
17
+ import { refreshLessonIndex } from '../notes/lesson-index.js';
18
+ import { useFor } from '../trace/dialect.js';
19
+ /** c2's planner, which the update gate and `draft --print` replan with (P29, R14). */
20
+ const PLANNER = { foldInputFor, replan };
21
+ /** 3.5. Never throws. */
22
+ export function stopSkills(input, dir, env = process.env) {
23
+ return stopSkillsRun(input, dir, env).out;
24
+ }
25
+ /** 3.5, with the telemetry it collected inside the lock, for the caller to send after it. */
26
+ export function stopSkillsRun(input, dir, env = process.env) {
27
+ const sent = [];
28
+ try {
29
+ // 1.
30
+ const g = skillsGate(input, dir, env);
31
+ if (!g.ok || g.ctx.subagent || !g.ctx.fold)
32
+ return { out: {}, sent };
33
+ const ctx = g.ctx;
34
+ const p = input && typeof input === 'object' ? input : {};
35
+ const said = typeof p.last_assistant_message === 'string' && p.last_assistant_message.trim() ? p.last_assistant_message : null;
36
+ // 2. A lock that timed out is nothing: the next hook catches up.
37
+ const out = withSkillSession(ctx, { catchUp: true }, (st, fold) => inside(ctx, st, fold, said, p.stop_hook_active === true, sent));
38
+ return { out: out ?? {}, sent };
39
+ }
40
+ catch (e) {
41
+ hookError('stop', e, env);
42
+ return { out: {}, sent: [] };
43
+ }
44
+ }
45
+ function inside(ctx, st, fold, said, active, sent) {
46
+ const { env, now } = ctx;
47
+ // 1b (4.14 step 1, D109): a correction line the fold met only now (written after the prompt hook ran) fills its offset.
48
+ if (fold)
49
+ noteCorrectionLine(st, fold.typed);
50
+ // 3. The reply's last words may reach the payload before the transcript.
51
+ const reply = said ?? (fold?.lastAssistant || null);
52
+ const offer = st.pendingOffer;
53
+ const run = currentRun(st);
54
+ // D133: the offer's lines are read through the host's dialect (a Codex correction line by its keyed hash).
55
+ const use = useFor(ctx.host, st);
56
+ const judged = withoutOffer(reply, offer, ctx.transcriptPath, use);
57
+ if (run)
58
+ run.end = checkedSuccess(run, judged).end;
59
+ // 1b (3.5 steps 1, 2 and 5): wall hits, repairs and lessons that worked into walls.json, before the offers read it;
60
+ // the guardrail's denies since the last Stop counted. Each part fails open on its own.
61
+ let wallFixes = 0;
62
+ if (ctx.learn) {
63
+ try {
64
+ wallFixes = wallsAtStop(st, ctx);
65
+ }
66
+ catch (e) {
67
+ hookError('stop', e, env);
68
+ }
69
+ }
70
+ const before = sent.length;
71
+ try {
72
+ guardrailCounts(st, ctx, sent);
73
+ }
74
+ catch (e) {
75
+ hookError('stop', e, env);
76
+ }
77
+ // Phase 2 (3.5, 4.14, learning half): this Stop's timeout guardrail stops and the known errors whose fix reached the
78
+ // model, counted for the weekly value line (a busy lock drops them, never waits).
79
+ if (ctx.learn && ctx.repoKey) {
80
+ try {
81
+ noteValue(ctx.repoKey, { guardrailStops: guardrailStopsIn(sent.slice(before)), wallFixes }, env, now);
82
+ }
83
+ catch (e) {
84
+ hookError('stop', e, env);
85
+ }
86
+ }
87
+ // D117 (4): the lesson index the wall fix reads, brought up to date here (PostToolUseFailure writes nothing, R34).
88
+ refreshLessonIndex(ctx.repoKey, env);
89
+ // 5. Credit (the prompt hook settles a run the next ask closed, D57). 1b: a cue phrase dropped at the flush (4.19).
90
+ // Phase 2 (4.9): the firings the flush wrote, for the retire proposal.
91
+ let settled = [];
92
+ // c8 (4.9): with the firings the prompt hook's settle wrote since the last Stop (their run closed on the next ask).
93
+ const fired = ctx.learn ? [...(st.firedLater ?? [])] : [];
94
+ delete st.firedLater;
95
+ if (ctx.learn) {
96
+ settled = settleCredit(st, { host: ctx.host, env, now, sessionId: ctx.sessionId, cueDropped: () => sent.push(['skill_stale', { reason: 'unfollowed' }]), fired: (f) => fired.push(f) });
97
+ for (const s of settled)
98
+ sent.push(['skill_used', { outcome: s.outcome }]);
99
+ }
100
+ // 6. A post-tool offer counts as shown only when the reply ends with it.
101
+ let spent = false;
102
+ if (offer && offer.channel === 'post-tool' && offer.shownAt === null) {
103
+ if (offerEndsReply(offer, reply, ctx.transcriptPath, use)) {
104
+ offer.shownAt = now.toISOString();
105
+ recordShown(offer, offerRepo(offer), env, now);
106
+ st.offerUsed = true;
107
+ st.offerUsedBy = 'offer';
108
+ sent.push(['skill_offered', { moment: offer.moment }]);
109
+ }
110
+ else {
111
+ recordNotShown(offer, offerRepo(offer), env, now);
112
+ st.pendingOffer = null;
113
+ }
114
+ spent = true;
115
+ }
116
+ // 7. The turn a block continued: the offer the reply left out (or followed with words of its own) is not shown.
117
+ if (active) {
118
+ if (offer && offer.channel === 'stop' && blockedThisTurn(offer) && !offerEndsReply(offer, reply, ctx.transcriptPath, use)) {
119
+ recordNotShown(offer, offerRepo(offer), env, now);
120
+ st.pendingOffer = null;
121
+ }
122
+ syncGate(ctx, st);
123
+ return {};
124
+ }
125
+ // 8. Pool days.
126
+ if (ctx.learn)
127
+ for (const r of st.runs)
128
+ if (r.epoch === st.epoch)
129
+ notePool(r, ctx);
130
+ // 9. The open run's sheet when it checks out, then its pool day again, so the pool points at a sheet on disk.
131
+ let verdict = null;
132
+ let sheet = null;
133
+ if (run && run.stepCalls > 0 && run.calls.length) {
134
+ verdict = checkedSuccess(run, judged);
135
+ if (verdict.checked) {
136
+ sheet = writeRunSheet(run, verdict, { host: ctx.host, tier: ctx.tier, sessionHash: ctx.sessionHash, helpers: runHelpers(run) }, env);
137
+ if (ctx.learn)
138
+ notePool(run, ctx);
139
+ }
140
+ }
141
+ // 10. Moments 4, 6, 5, 3, 2, then the retire proposal, the first that is due (1b, 3.5 step 6; phase 2, 4.10). Moment
142
+ // 4 needs no checked run: the turn's last run (open, else the newest) carries the verdict on how the turn ended.
143
+ // Moments 5 and 6 plan through c2's `foldInputFor` and `replan`, so the offer pins what the update gate replans.
144
+ const channel = hostFacts(env, ctx.host).offerChannel;
145
+ const last = run ?? st.runs[st.runs.length - 1] ?? null;
146
+ if (ctx.learn && !spent && last && (channel === 'stop' || channel === 'notice')) {
147
+ const due = offerDue({ run: last, verdict: verdict ?? checkedSuccess(last, judged), sheet, st, ctx, channel, settled, fired, plan: PLANNER });
148
+ if (due.due) {
149
+ st.pendingOffer = due.offer;
150
+ recordShown(due.offer, offerRepo(due.offer) || last.repoKey, env, now);
151
+ st.offerUsed = true;
152
+ st.offerUsedBy = 'offer';
153
+ sent.push(['skill_offered', { moment: due.offer.moment }]);
154
+ endWatch(st);
155
+ syncGate(ctx, st);
156
+ return channel === 'stop' ? { block: stopBlockReason(due.offer, ctx.transcriptPath, use) } : { notice: noticeText(due.offer, ctx.transcriptPath, use) };
157
+ }
158
+ }
159
+ // 11.
160
+ endWatch(st);
161
+ syncGate(ctx, st);
162
+ const notice = hostFacts(env, ctx.host).stopNotice ? useLine(settled) : '';
163
+ return notice ? { notice } : {};
164
+ }
165
+ /**
166
+ * 1b: moment 4 is due at the Stop of the correction's turn only (4.14 step 4). Once the fold found the correction's
167
+ * line, the watch ends with this Stop, offered or not; the slot a correction freed (P18, R40) is for this Stop only.
168
+ */
169
+ function endWatch(st) {
170
+ const w = st.lessonWatch;
171
+ if (w && st.credit.some((c) => c.useId === w.useId && c.corrected?.sha === w.typedSha && typeof c.corrected.offset === 'number'))
172
+ st.lessonWatch = null;
173
+ if (w && !st.credit.some((c) => c.useId === w.useId))
174
+ st.lessonWatch = null;
175
+ st.withdrewFor = null;
176
+ }
177
+ /**
178
+ * The reply as judged for the turn's end (4.3): without the offer's own 2 lines when it ends with them. Line 1
179
+ * counts what failed on the way ("17 commands this time, 3 failed"), which would read as a turn that failed, and
180
+ * the job was judged done before the offer was made. A reply that is only the offer reads as done.
181
+ */
182
+ export function withoutOffer(reply, offer, transcriptPath = null, use) {
183
+ // 1b (R12): the lines through offerLinesOf; an offer with none (a correction whose line is gone) was never said.
184
+ const said = reply === null || !offer ? null : offerLinesOf(offer, transcriptPath, process.env, use);
185
+ if (reply === null || !said || !offerEndsReply(offer, reply, transcriptPath, use))
186
+ return reply;
187
+ // The words of each line, without what the agent may dress them in (a fence, a quote, bold, end punctuation).
188
+ const core = (t) => t.replace(/\s+/g, ' ').replace(/[*_`"'>\u2018\u2019\u201c\u201d]/gu, '').trim().replace(/[.\s]+$/u, '');
189
+ const [first, second] = [core(said[0]), core(said[1])];
190
+ const lines = reply.split(/\r?\n/);
191
+ let i = lines.length - 1;
192
+ while (i >= 0 && !core(lines[i]).includes(second))
193
+ i--;
194
+ if (i < 0)
195
+ return reply;
196
+ const cut = core(lines[i]).indexOf(first);
197
+ const kept = lines.slice(0, i);
198
+ if (first && cut > 0)
199
+ kept.push(lines[i].slice(0, lines[i].indexOf(said[0].slice(0, 12))));
200
+ else if (first && cut < 0) {
201
+ while (kept.length && !core(kept[kept.length - 1]))
202
+ kept.pop();
203
+ if (kept.length && core(kept[kept.length - 1]).includes(first))
204
+ kept.pop();
205
+ }
206
+ while (kept.length && !core(kept[kept.length - 1]))
207
+ kept.pop();
208
+ return kept.join('\n');
209
+ }
210
+ /** A stop offer shown by the block that started this continued turn: no answer of the person's since. */
211
+ function blockedThisTurn(o) {
212
+ return o.shownAt !== null && o.yes === null && !o.showMe && o.typedAfter.length === 0;
213
+ }
214
+ /** 3.5 step 8 for one run: a job of a moment-2 family with a step call; idempotent per (day, session), costly OR-ed. */
215
+ export function notePool(run, ctx) {
216
+ if (!run.job || !OFFER_FAMILIES[run.job] || run.stepCalls <= 0 || !run.repoKey)
217
+ return;
218
+ // D117 (3), J16: no pool for a repo Trail doesn't know.
219
+ if (!repoKnown(run.repoKey, run.checkout ?? (run.repoKey === ctx.repoKey ? ctx.checkout : ''), ctx.env))
220
+ return;
221
+ const day = { d: localDate(run.startedAt), s: ctx.sessionHash, costly: costly(run) };
222
+ if (notePoolDay(run.repoKey, { job: run.job, words: run.jobWords }, day, run.sheet === 'checked' ? run.id : null, ctx.env, ctx.now))
223
+ run.poolNoted = true;
224
+ }
225
+ /** The Stop use line (4.15), when the host shows a Stop notice and nothing else is said. */
226
+ function useLine(settled) {
227
+ return settled.map((s) => {
228
+ const src = s.state?.source;
229
+ const before = src ? ` (by hand last time: ${src.commands} commands, ${src.failed} failed)` : '';
230
+ return `trail: ${flatLine(s.name, 60)}, ${s.use.calls} commands, ${s.use.failed} failed${before}`;
231
+ }).join('\n');
232
+ }
233
+ //# sourceMappingURL=stop-skills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stop-skills.js","sourceRoot":"","sources":["../../src/claude/stop-skills.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { HookOut } from '../skills/types.js';
2
+ /**
3
+ * #663's save ask: under trail, a sign in the transcript that the session
4
+ * found something the code won't tell the next person (a check that failed
5
+ * then passed after an edit, a correction, an undone edit, a picked option, a
6
+ * commit; see note-signals.ts) asks the agent to save a learning, by blocking
7
+ * the stop with the reason. Each sign is asked about once, and a session is
8
+ * asked at most NOTE_ASKS_PER_SESSION times; a saved learning starts the signs
9
+ * over. Never blocks twice in a row: Claude Code sets `stop_hook_active` on
10
+ * the stop that follows a block. The caller writes it only as the Stop's one
11
+ * answer, so a sign is marked asked only when it was. Never throws.
12
+ */
13
+ export declare function askForNote(input: {
14
+ stop_hook_active?: unknown;
15
+ }, dir: string, id: string, transcript: string | null): HookOut;
16
+ /**
17
+ * The Stop event, for every host that sends one: the turn-end bookkeeping, then the skills part's one answer.
18
+ * `skills: false` for a caller whose payload is not a Stop's (`post-edit-sync` sends an edit's).
19
+ */
20
+ export declare function handleStopEvent(input: unknown, dir: string, opts?: {
21
+ skills?: boolean;
22
+ }): Promise<void>;
23
+ //# sourceMappingURL=stop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stop.d.ts","sourceRoot":"","sources":["../../src/claude/stop.ts"],"names":[],"mappings":"AA6BA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAqGlD;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE;IAAE,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAAE,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAc7H;AAuBD;;;GAGG;AACH,wBAAsB,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAqBjH"}
@@ -0,0 +1,219 @@
1
+ /**
2
+ * The one Stop handler: what happens when the agent's turn ends.
3
+ *
4
+ * Turn-end bookkeeping first: what the turn's input tokens cost, whether the
5
+ * reply said what graft saved, and one background graph sync when an edit
6
+ * left the graph dirty. Then the answer, one JSON object at most: the
7
+ * learned-skills part's (stop-skills.ts, loaded only when skills are on), a
8
+ * block (the repeated-job offer the agent says) or a notice, never both. When
9
+ * that part has nothing to say, under trail a sign in the transcript that the
10
+ * session found something the code won't tell the next person asks the agent
11
+ * to save a learning (note-signals.ts). An offer or notice that wins leaves
12
+ * the sign unasked, so the ask can come at a later Stop.
13
+ */
14
+ import { existsSync, readFileSync } from 'node:fs';
15
+ import { join } from 'node:path';
16
+ import { createHash } from 'node:crypto';
17
+ import { spawn } from 'node:child_process';
18
+ import { claudeScriptPath } from './paths.js';
19
+ import { emitHook, payloadSessionId } from './hook-io.js';
20
+ import { stopPart } from './skills-wiring.js';
21
+ import { acquireLock, patchStats, readSession, readStats, writeSession } from './state.js';
22
+ import { catchUpTranscript, hasSavingsTally } from './tally.js';
23
+ import { detectHost } from '../trace/host.js';
24
+ import { hookCursorPath } from '../trace/state.js';
25
+ import { trailHome } from '../notes/trail-home.js';
26
+ import { keepsNotes } from '../notes/home.js';
27
+ import { maybeSyncInBackground } from '../cloud/workspace-sync.js';
28
+ import { brand } from '../brand.js';
29
+ import { NOTE_ASKS_PER_SESSION, noteAsk, noteSignals } from './note-signals.js';
30
+ function sessionId(input) {
31
+ return payloadSessionId(input);
32
+ }
33
+ /**
34
+ * What the transcript gained since the last Stop, or null when there is no
35
+ * transcript Trail may read as Claude Code's: no path, another host's payload
36
+ * (Cursor and Copilot CLI run these hooks with transcripts of their own), or
37
+ * a subagent's.
38
+ */
39
+ function readTurnEnd(input, s) {
40
+ const host = detectHost(input);
41
+ if (host.host !== 'claude' || host.subagent)
42
+ return null;
43
+ const path = input.transcript_path;
44
+ if (typeof path !== 'string' || !path)
45
+ return null;
46
+ // Billed up to this reply already, whatever the cursor says.
47
+ return catchUpTranscript(path, hookCursorPath(sessionId(input)), { billedThrough: s.lastBillingUuid });
48
+ }
49
+ /**
50
+ * What this turn's input tokens actually cost, added to the session's running
51
+ * pair.
52
+ *
53
+ * Deliberately ungated, unlike {@link countTallyTurn}: the blended rate has to
54
+ * describe the session, and graft turns are not a fair sample of it — they are
55
+ * the long, tool-heavy, cache-warm ones. Sampling only those would report a
56
+ * cheaper token than the session really pays.
57
+ *
58
+ * Accumulates the pair, never the ratio, so the rate re-blends every turn.
59
+ * Each response is billed once, by the read that first sees it; the last
60
+ * reply billed is kept beside the totals.
61
+ */
62
+ function sampleTurnCost(s, read) {
63
+ if (!read?.lastUuid)
64
+ return false;
65
+ // Kept with the totals it guards: a read that has to start over (a lost
66
+ // cursor, a replaced transcript) bills nothing up to here again.
67
+ s.lastBillingUuid = read.lastUuid;
68
+ if (read.tokens > 0 && read.costMicros >= 0) {
69
+ s.inputCostMicros = (s.inputCostMicros ?? 0) + read.costMicros;
70
+ s.inputTokensBilled = (s.inputTokensBilled ?? 0) + read.tokens;
71
+ }
72
+ return true;
73
+ }
74
+ /**
75
+ * At turn end: did the reply the user just read say what graft saved?
76
+ *
77
+ * Judged only on turns the tool-savings hook flagged, so a conversational turn
78
+ * costs nothing. A turn we cannot observe — a host whose Stop hook names no
79
+ * transcript, another host's payload, an unreadable file, or a Stop with
80
+ * nothing new on disk since the last one — is counted in NEITHER total: the
81
+ * ratio these two numbers form has to mean "of the turns we could check", not
82
+ * "of the turns we tried to".
83
+ */
84
+ function countTallyTurn(s, read, lastMessage) {
85
+ if (!s.turnUsedGraft)
86
+ return false;
87
+ s.turnUsedGraft = false;
88
+ if (!read?.fresh)
89
+ return true;
90
+ const said = typeof lastMessage === 'string' && lastMessage.trim() ? lastMessage : '';
91
+ // The reply's last words may reach the payload before the transcript: then
92
+ // they name the reply.
93
+ const uuid = read.turn.uuid ?? (said ? `said-${createHash('sha1').update(said).digest('hex').slice(0, 12)}` : null);
94
+ // Same reply as last time we looked: no new prose has landed, so this Stop
95
+ // is a duplicate or a race with the transcript write.
96
+ if (uuid === null || uuid === s.lastTallyUuid)
97
+ return true;
98
+ s.graftTurns = (s.graftTurns ?? 0) + 1;
99
+ if (read.turn.tally || hasSavingsTally(said))
100
+ s.reportedTurns = (s.reportedTurns ?? 0) + 1;
101
+ s.lastTallyUuid = uuid;
102
+ return true;
103
+ }
104
+ /**
105
+ * The turn's cost and tally, from one read of the transcript and one write of
106
+ * the session. Returns the transcript's path when it is Claude Code's, for the
107
+ * learning ask, or null when there was none to read.
108
+ */
109
+ function turnEnd(input, dir) {
110
+ try {
111
+ const id = sessionId(input);
112
+ const s = readSession(dir, id);
113
+ const read = readTurnEnd(input, s);
114
+ const billed = sampleTurnCost(s, read);
115
+ const counted = countTallyTurn(s, read, input.last_assistant_message);
116
+ if (billed || counted)
117
+ writeSession(dir, id, s);
118
+ return read && typeof input.transcript_path === 'string' ? input.transcript_path : null;
119
+ }
120
+ catch {
121
+ // A turn-end metric is never worth failing the graph sync over.
122
+ return null;
123
+ }
124
+ }
125
+ /**
126
+ * #663's save ask: under trail, a sign in the transcript that the session
127
+ * found something the code won't tell the next person (a check that failed
128
+ * then passed after an edit, a correction, an undone edit, a picked option, a
129
+ * commit; see note-signals.ts) asks the agent to save a learning, by blocking
130
+ * the stop with the reason. Each sign is asked about once, and a session is
131
+ * asked at most NOTE_ASKS_PER_SESSION times; a saved learning starts the signs
132
+ * over. Never blocks twice in a row: Claude Code sets `stop_hook_active` on
133
+ * the stop that follows a block. The caller writes it only as the Stop's one
134
+ * answer, so a sign is marked asked only when it was. Never throws.
135
+ */
136
+ export function askForNote(input, dir, id, transcript) {
137
+ try {
138
+ if (!transcript || brand() !== 'trail' || input.stop_hook_active || !keepsNotes(dir))
139
+ return {};
140
+ const s = readSession(dir, id);
141
+ const asked = s.noteAsks ?? [];
142
+ if (asked.length >= NOTE_ASKS_PER_SESSION)
143
+ return {};
144
+ const sign = noteSignals(readFileSync(transcript, 'utf8'), dir).find((x) => !asked.includes(x.key));
145
+ if (!sign)
146
+ return {};
147
+ writeSession(dir, id, { ...s, noteAsks: [...asked, sign.key] });
148
+ return { block: noteAsk(sign) };
149
+ }
150
+ catch {
151
+ // A missed reminder costs one learning; a broken Stop hook costs the session.
152
+ return {};
153
+ }
154
+ }
155
+ /** One detached graph sync when an edit this turn left the graph dirty. */
156
+ function startSync(dir) {
157
+ try {
158
+ // sync-run.js ships next to this module inside the package, so it resolves in
159
+ // any repo that installs graft (not just graft's own). Defensive existsSync:
160
+ // if the package is somehow incomplete, skip rather than wedge on syncing:true.
161
+ // GRAFT_TEST_SYNC_RUN is a test seam (mirrors GRAFT_TEST_STDIN) so tests can point
162
+ // this at a stub file inside their own sandbox instead of writing into src/claude/.
163
+ const syncRun = process.env.GRAFT_TEST_SYNC_RUN ?? claudeScriptPath('sync-run.js');
164
+ if (!existsSync(syncRun))
165
+ return;
166
+ const stats = readStats(dir);
167
+ if (stats?.dirty && acquireLock(dir)) {
168
+ patchStats(dir, { syncing: true });
169
+ const child = spawn(process.execPath, [syncRun, dir], { detached: true, stdio: 'ignore', windowsHide: true });
170
+ child.unref();
171
+ }
172
+ }
173
+ catch {
174
+ // The next Stop, or the next query, brings the graph up to date.
175
+ }
176
+ }
177
+ /**
178
+ * The Stop event, for every host that sends one: the turn-end bookkeeping, then the skills part's one answer.
179
+ * `skills: false` for a caller whose payload is not a Stop's (`post-edit-sync` sends an edit's).
180
+ */
181
+ export async function handleStopEvent(input, dir, opts = {}) {
182
+ const i = input && typeof input === 'object' && !Array.isArray(input) ? input : {};
183
+ const transcript = turnEnd(i, dir);
184
+ startSync(dir);
185
+ // A learning committed this turn, and the turn's skill runs and searches, reach the team now, not next session.
186
+ maybeSyncInBackground(dir);
187
+ if (opts.skills === false)
188
+ return;
189
+ let out = {};
190
+ try {
191
+ out = await stopPart(i, dir);
192
+ }
193
+ catch {
194
+ // A turn always ends; an offer can wait for the next one.
195
+ }
196
+ // The skills part's answer wins; with none, #663's save ask may be the answer.
197
+ if (!out.block && !out.notice && !out.context)
198
+ out = askForNote(i, dir, sessionId(i), transcript);
199
+ try {
200
+ out = await forgetNotice(i, out);
201
+ }
202
+ catch {
203
+ // The note waits for the next Stop.
204
+ }
205
+ emitHook('Stop', out);
206
+ }
207
+ /**
208
+ * D117 (2), skills on or off: what an agent's `trail forget` dropped, told to the person once. One stat when there
209
+ * is nothing to tell; the module loads only when there is.
210
+ */
211
+ async function forgetNotice(i, out, env = process.env) {
212
+ if (out.block || i.stop_hook_active === true)
213
+ return out;
214
+ if (detectHost(i).subagent || !existsSync(join(trailHome(env), 'state', 'forgot.jsonl')))
215
+ return out;
216
+ const { forgetNoticeAtStop } = await import('../skills/forget-notice.js');
217
+ return forgetNoticeAtStop(out, env, detectHost(i).host);
218
+ }
219
+ //# sourceMappingURL=stop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stop.js","sourceRoot":"","sources":["../../src/claude/stop.ts"],"names":[],"mappings":"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"}
@@ -1,50 +1,38 @@
1
+ import type { Memo } from '../trace/cursor.js';
1
2
  /** Did this reply tell the user what graft saved? */
2
3
  export declare function hasSavingsTally(text: string): boolean;
3
- /** One turn's worth of assistant prose, plus the id of the entry it ended on. */
4
- export interface AssistantTurn {
5
- /** `uuid` of the last assistant entry, so the same reply is never counted twice. */
6
- uuid: string;
7
- /** Every text block the agent emitted since the last user prompt, joined. */
8
- text: string;
4
+ /** The reply since the person's last prompt, as far as the transcript has it. */
5
+ export interface OpenTurn {
6
+ /** `uuid` of its last assistant entry with text, so the same reply is never counted twice; null before any. */
7
+ uuid: string | null;
8
+ /** Whether any of its text carried the tally (it can land in any block, not only the last). */
9
+ tally: boolean;
9
10
  }
10
- /** What the last turn's input tokens cost, alongside how many there were. The
11
- * pair is what a blended rate is made of; neither half means much alone. */
12
- export interface TurnBilling {
13
- /** `uuid` of the last assistant entry, so a repeated Stop can't bill a turn twice. */
14
- uuid: string;
15
- /** Micro-dollars this turn's input tokens cost, cache multipliers applied. */
11
+ /** What one read of the transcript brought. */
12
+ export interface TranscriptCatchUp {
13
+ /** Something was read: false for an unreadable file or nothing appended since the last read. */
14
+ fresh: boolean;
15
+ /** What the input tokens of each main-thread response first seen in this read cost, in micro-dollars, and how many there were. */
16
16
  costMicros: number;
17
- /** Input tokens billed this turn, cached and fresh alike. */
18
17
  tokens: number;
18
+ /** The reply in progress after this read. */
19
+ turn: OpenTurn;
20
+ /** `uuid` of the last main-thread assistant line read: everything up to it is billed once this read's bill is kept. */
21
+ lastUuid: string | null;
19
22
  }
20
23
  /**
21
- * The assistant prose of the turn the transcript ends on, or null when it can't
22
- * be read (no path — a host whose Stop hook doesn't name one — unreadable file,
23
- * or a tail with no assistant text in it).
24
- *
25
- * Null is meaningfully different from "no tally found": a turn we cannot observe
26
- * is left out of BOTH the numerator and the denominator by the caller, so a host
27
- * that exposes no transcript reports no ratio rather than a ratio of zero.
28
- *
29
- * Sidechain entries (subagents) are skipped throughout — a subagent's own prose
30
- * is never what the user read.
24
+ * What a Claude Code transcript gained since the last read with the same
25
+ * cursor: the cost of each response seen for the first time, and the reply in
26
+ * progress. The first read of a session takes at most the transcript's last
27
+ * 8 MB and bills only the reply in progress (see {@link Bill});
28
+ * `billedThrough` is the last reply billed before (kept with the totals, so
29
+ * it outlives a lost cursor). `also` sees each line of the same read, with
30
+ * the same memo, for another turn-end reader (the learning ask) that keeps
31
+ * its state under a key of its own. Never throws; an unreadable file reads
32
+ * as nothing new.
31
33
  */
32
- export declare function lastAssistantTurn(transcriptPath: unknown): AssistantTurn | null;
33
- /**
34
- * What the turn the transcript ends on cost in input tokens — the measured
35
- * half of the dollar figure the statusline and the turn nudge report.
36
- *
37
- * Costed per API response, not per turn, so a turn that switched models is
38
- * priced correctly rather than labelled with whichever model happened to go
39
- * last. Responses are deduped by `message.id`: one response is written to the
40
- * transcript as several entries (a `thinking` block and a `tool_use` block land
41
- * on their own lines) and every one of them repeats the same `usage`, so
42
- * summing the lines would bill the turn two or three times over.
43
- *
44
- * Null when there is nothing to bill — no transcript path (a host whose Stop
45
- * hook names none), an unreadable file, a turn whose entries carry no `usage`,
46
- * or a model with no price in {@link inputUsdPerMtok}. As everywhere in this
47
- * file, null means "not observed", never "zero".
48
- */
49
- export declare function lastTurnBilling(transcriptPath: unknown): TurnBilling | null;
34
+ export declare function catchUpTranscript(transcriptPath: string, cursorPath: string, opts?: {
35
+ billedThrough?: string;
36
+ also?: (entry: Record<string, unknown>, memo: Memo) => void;
37
+ }): TranscriptCatchUp;
50
38
  //# sourceMappingURL=tally.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tally.d.ts","sourceRoot":"","sources":["../../src/claude/tally.ts"],"names":[],"mappings":"AA2CA,qDAAqD;AACrD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAErD;AAED,iFAAiF;AACjF,MAAM,WAAW,aAAa;IAC5B,oFAAoF;IACpF,IAAI,EAAE,MAAM,CAAC;IACb,6EAA6E;IAC7E,IAAI,EAAE,MAAM,CAAC;CACd;AAED;4EAC4E;AAC5E,MAAM,WAAW,WAAW;IAC1B,sFAAsF;IACtF,IAAI,EAAE,MAAM,CAAC;IACb,8EAA8E;IAC9E,UAAU,EAAE,MAAM,CAAC;IACnB,6DAA6D;IAC7D,MAAM,EAAE,MAAM,CAAC;CAChB;AAuCD;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,cAAc,EAAE,OAAO,GAAG,aAAa,GAAG,IAAI,CA0B/E;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,eAAe,CAAC,cAAc,EAAE,OAAO,GAAG,WAAW,GAAG,IAAI,CA2C3E"}
1
+ {"version":3,"file":"tally.d.ts","sourceRoot":"","sources":["../../src/claude/tally.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAe/C,qDAAqD;AACrD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAErD;AAED,iFAAiF;AACjF,MAAM,WAAW,QAAQ;IACvB,+GAA+G;IAC/G,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,+FAA+F;IAC/F,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,+CAA+C;AAC/C,MAAM,WAAW,iBAAiB;IAChC,gGAAgG;IAChG,KAAK,EAAE,OAAO,CAAC;IACf,kIAAkI;IAClI,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,6CAA6C;IAC7C,IAAI,EAAE,QAAQ,CAAC;IACf,uHAAuH;IACvH,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAyFD;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAC/B,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,IAAI,GAAE;IAAE,aAAa,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,KAAK,IAAI,CAAA;CAAO,GACjG,iBAAiB,CAiCnB"}