@nanonets/graft 0.24.1 → 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 (480) hide show
  1. package/README.md +26 -21
  2. package/dist/blast/render.js +1 -1
  3. package/dist/blast/render.js.map +1 -1
  4. package/dist/brand.js +1 -1
  5. package/dist/brand.js.map +1 -1
  6. package/dist/check/learning-edits.d.ts +18 -3
  7. package/dist/check/learning-edits.d.ts.map +1 -1
  8. package/dist/check/learning-edits.js +54 -10
  9. package/dist/check/learning-edits.js.map +1 -1
  10. package/dist/check/local-check.d.ts +7 -3
  11. package/dist/check/local-check.d.ts.map +1 -1
  12. package/dist/check/local-check.js +55 -11
  13. package/dist/check/local-check.js.map +1 -1
  14. package/dist/check/types.d.ts +11 -2
  15. package/dist/check/types.d.ts.map +1 -1
  16. package/dist/claude/format.d.ts +11 -7
  17. package/dist/claude/format.d.ts.map +1 -1
  18. package/dist/claude/format.js +50 -28
  19. package/dist/claude/format.js.map +1 -1
  20. package/dist/claude/hook-io.js +1 -1
  21. package/dist/claude/hook-io.js.map +1 -1
  22. package/dist/claude/hook-layers.d.ts +4 -2
  23. package/dist/claude/hook-layers.d.ts.map +1 -1
  24. package/dist/claude/hook-layers.js +21 -4
  25. package/dist/claude/hook-layers.js.map +1 -1
  26. package/dist/claude/hooks.d.ts +9 -32
  27. package/dist/claude/hooks.d.ts.map +1 -1
  28. package/dist/claude/hooks.js +154 -350
  29. package/dist/claude/hooks.js.map +1 -1
  30. package/dist/claude/init.d.ts.map +1 -1
  31. package/dist/claude/init.js +56 -18
  32. package/dist/claude/init.js.map +1 -1
  33. package/dist/claude/note-signals.d.ts +6 -0
  34. package/dist/claude/note-signals.d.ts.map +1 -1
  35. package/dist/claude/note-signals.js +14 -3
  36. package/dist/claude/note-signals.js.map +1 -1
  37. package/dist/claude/post-bash.d.ts +26 -0
  38. package/dist/claude/post-bash.d.ts.map +1 -0
  39. package/dist/claude/post-bash.js +191 -0
  40. package/dist/claude/post-bash.js.map +1 -0
  41. package/dist/claude/pre-bash-skills.d.ts +21 -0
  42. package/dist/claude/pre-bash-skills.d.ts.map +1 -0
  43. package/dist/claude/pre-bash-skills.js +253 -0
  44. package/dist/claude/pre-bash-skills.js.map +1 -0
  45. package/dist/claude/pre-bash.d.ts +50 -0
  46. package/dist/claude/pre-bash.d.ts.map +1 -0
  47. package/dist/claude/pre-bash.js +245 -0
  48. package/dist/claude/pre-bash.js.map +1 -0
  49. package/dist/claude/prompt-consent.d.ts +19 -0
  50. package/dist/claude/prompt-consent.d.ts.map +1 -0
  51. package/dist/claude/prompt-consent.js +14 -0
  52. package/dist/claude/prompt-consent.js.map +1 -0
  53. package/dist/claude/prompt-hook.d.ts +76 -0
  54. package/dist/claude/prompt-hook.d.ts.map +1 -0
  55. package/dist/claude/prompt-hook.js +303 -0
  56. package/dist/claude/prompt-hook.js.map +1 -0
  57. package/dist/claude/prompt-skills.d.ts +19 -0
  58. package/dist/claude/prompt-skills.d.ts.map +1 -0
  59. package/dist/claude/prompt-skills.js +305 -0
  60. package/dist/claude/prompt-skills.js.map +1 -0
  61. package/dist/claude/session-metrics.js +4 -4
  62. package/dist/claude/session-metrics.js.map +1 -1
  63. package/dist/claude/settings-merge.d.ts +10 -0
  64. package/dist/claude/settings-merge.d.ts.map +1 -1
  65. package/dist/claude/settings-merge.js +46 -17
  66. package/dist/claude/settings-merge.js.map +1 -1
  67. package/dist/claude/shim-template.d.ts.map +1 -1
  68. package/dist/claude/shim-template.js +86 -28
  69. package/dist/claude/shim-template.js.map +1 -1
  70. package/dist/claude/skill-template.d.ts +2 -0
  71. package/dist/claude/skill-template.d.ts.map +1 -1
  72. package/dist/claude/skill-template.js +53 -34
  73. package/dist/claude/skill-template.js.map +1 -1
  74. package/dist/claude/skill-use.d.ts +16 -0
  75. package/dist/claude/skill-use.d.ts.map +1 -0
  76. package/dist/claude/skill-use.js +78 -0
  77. package/dist/claude/skill-use.js.map +1 -0
  78. package/dist/claude/skills-wiring.d.ts +26 -0
  79. package/dist/claude/skills-wiring.d.ts.map +1 -0
  80. package/dist/claude/skills-wiring.js +110 -0
  81. package/dist/claude/skills-wiring.js.map +1 -0
  82. package/dist/claude/start-init.d.ts +13 -0
  83. package/dist/claude/start-init.d.ts.map +1 -0
  84. package/dist/claude/start-init.js +75 -0
  85. package/dist/claude/start-init.js.map +1 -0
  86. package/dist/claude/start-skills.d.ts +31 -0
  87. package/dist/claude/start-skills.d.ts.map +1 -0
  88. package/dist/claude/start-skills.js +274 -0
  89. package/dist/claude/start-skills.js.map +1 -0
  90. package/dist/claude/state.d.ts +19 -7
  91. package/dist/claude/state.d.ts.map +1 -1
  92. package/dist/claude/state.js +59 -4
  93. package/dist/claude/state.js.map +1 -1
  94. package/dist/claude/stop-skills.d.ts +23 -0
  95. package/dist/claude/stop-skills.d.ts.map +1 -0
  96. package/dist/claude/stop-skills.js +233 -0
  97. package/dist/claude/stop-skills.js.map +1 -0
  98. package/dist/claude/stop.d.ts +23 -0
  99. package/dist/claude/stop.d.ts.map +1 -0
  100. package/dist/claude/stop.js +219 -0
  101. package/dist/claude/stop.js.map +1 -0
  102. package/dist/claude/tally.d.ts +29 -41
  103. package/dist/claude/tally.d.ts.map +1 -1
  104. package/dist/claude/tally.js +111 -165
  105. package/dist/claude/tally.js.map +1 -1
  106. package/dist/claude/walls-hook.d.ts +52 -0
  107. package/dist/claude/walls-hook.d.ts.map +1 -0
  108. package/dist/claude/walls-hook.js +279 -0
  109. package/dist/claude/walls-hook.js.map +1 -0
  110. package/dist/cli-epilogue.d.ts.map +1 -1
  111. package/dist/cli-epilogue.js +24 -14
  112. package/dist/cli-epilogue.js.map +1 -1
  113. package/dist/cli-meta.js +3 -3
  114. package/dist/cli-meta.js.map +1 -1
  115. package/dist/cli-picker.d.ts.map +1 -1
  116. package/dist/cli-picker.js +8 -6
  117. package/dist/cli-picker.js.map +1 -1
  118. package/dist/cli.d.ts.map +1 -1
  119. package/dist/cli.js +238 -402
  120. package/dist/cli.js.map +1 -1
  121. package/dist/cloud/head-learnings.d.ts +13 -0
  122. package/dist/cloud/head-learnings.d.ts.map +1 -0
  123. package/dist/cloud/head-learnings.js +84 -0
  124. package/dist/cloud/head-learnings.js.map +1 -0
  125. package/dist/cloud/lookup-activity.d.ts +5 -3
  126. package/dist/cloud/lookup-activity.d.ts.map +1 -1
  127. package/dist/cloud/lookup-activity.js +8 -8
  128. package/dist/cloud/lookup-activity.js.map +1 -1
  129. package/dist/cloud/nudge.d.ts +15 -7
  130. package/dist/cloud/nudge.d.ts.map +1 -1
  131. package/dist/cloud/nudge.js +42 -33
  132. package/dist/cloud/nudge.js.map +1 -1
  133. package/dist/cloud/onboarding.d.ts +37 -1
  134. package/dist/cloud/onboarding.d.ts.map +1 -1
  135. package/dist/cloud/onboarding.js +77 -1
  136. package/dist/cloud/onboarding.js.map +1 -1
  137. package/dist/cloud/other-repos.d.ts +39 -0
  138. package/dist/cloud/other-repos.d.ts.map +1 -0
  139. package/dist/cloud/other-repos.js +137 -0
  140. package/dist/cloud/other-repos.js.map +1 -0
  141. package/dist/cloud/pair.d.ts +17 -7
  142. package/dist/cloud/pair.d.ts.map +1 -1
  143. package/dist/cloud/pair.js +81 -60
  144. package/dist/cloud/pair.js.map +1 -1
  145. package/dist/cloud/workspace-sync.d.ts +67 -11
  146. package/dist/cloud/workspace-sync.d.ts.map +1 -1
  147. package/dist/cloud/workspace-sync.js +299 -55
  148. package/dist/cloud/workspace-sync.js.map +1 -1
  149. package/dist/cloud/workspace.d.ts +74 -10
  150. package/dist/cloud/workspace.d.ts.map +1 -1
  151. package/dist/cloud/workspace.js +96 -8
  152. package/dist/cloud/workspace.js.map +1 -1
  153. package/dist/hosts/claude-global.js +1 -1
  154. package/dist/hosts/claude-global.js.map +1 -1
  155. package/dist/hosts/codex-hooks.d.ts +6 -0
  156. package/dist/hosts/codex-hooks.d.ts.map +1 -1
  157. package/dist/hosts/codex-hooks.js +89 -16
  158. package/dist/hosts/codex-hooks.js.map +1 -1
  159. package/dist/hosts/codex-trust.d.ts +28 -0
  160. package/dist/hosts/codex-trust.d.ts.map +1 -0
  161. package/dist/hosts/codex-trust.js +280 -0
  162. package/dist/hosts/codex-trust.js.map +1 -0
  163. package/dist/hosts/cursor-hooks.d.ts.map +1 -1
  164. package/dist/hosts/cursor-hooks.js +3 -1
  165. package/dist/hosts/cursor-hooks.js.map +1 -1
  166. package/dist/init/candidates.d.ts +60 -0
  167. package/dist/init/candidates.d.ts.map +1 -0
  168. package/dist/init/candidates.js +202 -0
  169. package/dist/init/candidates.js.map +1 -0
  170. package/dist/init/claude-call.d.ts +51 -0
  171. package/dist/init/claude-call.d.ts.map +1 -0
  172. package/dist/init/claude-call.js +199 -0
  173. package/dist/init/claude-call.js.map +1 -0
  174. package/dist/init/discover-worker.d.ts +18 -0
  175. package/dist/init/discover-worker.d.ts.map +1 -0
  176. package/dist/init/discover-worker.js +111 -0
  177. package/dist/init/discover-worker.js.map +1 -0
  178. package/dist/init/handover.d.ts +16 -0
  179. package/dist/init/handover.d.ts.map +1 -0
  180. package/dist/init/handover.js +92 -0
  181. package/dist/init/handover.js.map +1 -0
  182. package/dist/init/howtos.d.ts +20 -0
  183. package/dist/init/howtos.d.ts.map +1 -0
  184. package/dist/init/howtos.js +90 -0
  185. package/dist/init/howtos.js.map +1 -0
  186. package/dist/init/init-record.d.ts +134 -0
  187. package/dist/init/init-record.d.ts.map +1 -0
  188. package/dist/init/init-record.js +339 -0
  189. package/dist/init/init-record.js.map +1 -0
  190. package/dist/init/install-paths.d.ts +6 -0
  191. package/dist/init/install-paths.d.ts.map +1 -0
  192. package/dist/init/install-paths.js +87 -0
  193. package/dist/init/install-paths.js.map +1 -0
  194. package/dist/init/keep-answer.d.ts +43 -0
  195. package/dist/init/keep-answer.d.ts.map +1 -0
  196. package/dist/init/keep-answer.js +118 -0
  197. package/dist/init/keep-answer.js.map +1 -0
  198. package/dist/init/keep-gate.d.ts +30 -0
  199. package/dist/init/keep-gate.d.ts.map +1 -0
  200. package/dist/init/keep-gate.js +178 -0
  201. package/dist/init/keep-gate.js.map +1 -0
  202. package/dist/init/keep-list.d.ts +67 -0
  203. package/dist/init/keep-list.d.ts.map +1 -0
  204. package/dist/init/keep-list.js +232 -0
  205. package/dist/init/keep-list.js.map +1 -0
  206. package/dist/init/keep.d.ts +52 -0
  207. package/dist/init/keep.d.ts.map +1 -0
  208. package/dist/init/keep.js +393 -0
  209. package/dist/init/keep.js.map +1 -0
  210. package/dist/init/look-back-mine.d.ts +37 -0
  211. package/dist/init/look-back-mine.d.ts.map +1 -0
  212. package/dist/init/look-back-mine.js +215 -0
  213. package/dist/init/look-back-mine.js.map +1 -0
  214. package/dist/init/look-back.d.ts +81 -0
  215. package/dist/init/look-back.d.ts.map +1 -0
  216. package/dist/init/look-back.js +170 -0
  217. package/dist/init/look-back.js.map +1 -0
  218. package/dist/init/miners.d.ts +46 -0
  219. package/dist/init/miners.d.ts.map +1 -0
  220. package/dist/init/miners.js +141 -0
  221. package/dist/init/miners.js.map +1 -0
  222. package/dist/init/name-call.d.ts +37 -0
  223. package/dist/init/name-call.d.ts.map +1 -0
  224. package/dist/init/name-call.js +151 -0
  225. package/dist/init/name-call.js.map +1 -0
  226. package/dist/init/plain-file.d.ts.map +1 -1
  227. package/dist/init/plain-file.js +3 -0
  228. package/dist/init/plain-file.js.map +1 -1
  229. package/dist/init/prefs.d.ts +70 -0
  230. package/dist/init/prefs.d.ts.map +1 -0
  231. package/dist/init/prefs.js +282 -0
  232. package/dist/init/prefs.js.map +1 -0
  233. package/dist/init/relay.d.ts +15 -0
  234. package/dist/init/relay.d.ts.map +1 -0
  235. package/dist/init/relay.js +15 -0
  236. package/dist/init/relay.js.map +1 -0
  237. package/dist/init/replay-runs.d.ts +121 -0
  238. package/dist/init/replay-runs.d.ts.map +1 -0
  239. package/dist/init/replay-runs.js +457 -0
  240. package/dist/init/replay-runs.js.map +1 -0
  241. package/dist/init/replay-tamper.d.ts +18 -0
  242. package/dist/init/replay-tamper.d.ts.map +1 -0
  243. package/dist/init/replay-tamper.js +87 -0
  244. package/dist/init/replay-tamper.js.map +1 -0
  245. package/dist/init/review-screen.d.ts +74 -0
  246. package/dist/init/review-screen.d.ts.map +1 -0
  247. package/dist/init/review-screen.js +258 -0
  248. package/dist/init/review-screen.js.map +1 -0
  249. package/dist/init/review-tty.d.ts +29 -0
  250. package/dist/init/review-tty.d.ts.map +1 -0
  251. package/dist/init/review-tty.js +218 -0
  252. package/dist/init/review-tty.js.map +1 -0
  253. package/dist/init/review.d.ts +12 -0
  254. package/dist/init/review.d.ts.map +1 -0
  255. package/dist/init/review.js +12 -0
  256. package/dist/init/review.js.map +1 -0
  257. package/dist/init/run.d.ts +87 -0
  258. package/dist/init/run.d.ts.map +1 -0
  259. package/dist/init/run.js +347 -0
  260. package/dist/init/run.js.map +1 -0
  261. package/dist/init/sessions.d.ts +63 -0
  262. package/dist/init/sessions.d.ts.map +1 -0
  263. package/dist/init/sessions.js +377 -0
  264. package/dist/init/sessions.js.map +1 -0
  265. package/dist/init/transcript.d.ts +81 -0
  266. package/dist/init/transcript.d.ts.map +1 -0
  267. package/dist/init/transcript.js +216 -0
  268. package/dist/init/transcript.js.map +1 -0
  269. package/dist/init/types.d.ts +139 -0
  270. package/dist/init/types.d.ts.map +1 -0
  271. package/dist/init/types.js +2 -0
  272. package/dist/init/types.js.map +1 -0
  273. package/dist/notes/cold-start.d.ts +5 -213
  274. package/dist/notes/cold-start.d.ts.map +1 -1
  275. package/dist/notes/cold-start.js +5 -654
  276. package/dist/notes/cold-start.js.map +1 -1
  277. package/dist/notes/edit-overlap.d.ts.map +1 -1
  278. package/dist/notes/edit-overlap.js +4 -1
  279. package/dist/notes/edit-overlap.js.map +1 -1
  280. package/dist/notes/notes.d.ts +8 -4
  281. package/dist/notes/notes.d.ts.map +1 -1
  282. package/dist/notes/notes.js +9 -7
  283. package/dist/notes/notes.js.map +1 -1
  284. package/dist/notes/pr-reviews.d.ts +4 -0
  285. package/dist/notes/pr-reviews.d.ts.map +1 -1
  286. package/dist/notes/pr-reviews.js +6 -5
  287. package/dist/notes/pr-reviews.js.map +1 -1
  288. package/dist/notes/repo-trail.d.ts +1 -1
  289. package/dist/notes/repo-trail.d.ts.map +1 -1
  290. package/dist/notes/repo-trail.js +24 -4
  291. package/dist/notes/repo-trail.js.map +1 -1
  292. package/dist/search/grep.d.ts.map +1 -1
  293. package/dist/search/grep.js +4 -2
  294. package/dist/search/grep.js.map +1 -1
  295. package/dist/search/user-regexp.d.ts +26 -0
  296. package/dist/search/user-regexp.d.ts.map +1 -0
  297. package/dist/search/user-regexp.js +150 -0
  298. package/dist/search/user-regexp.js.map +1 -0
  299. package/dist/skills/anchors-cli.d.ts +5 -0
  300. package/dist/skills/anchors-cli.d.ts.map +1 -1
  301. package/dist/skills/anchors-cli.js +7 -2
  302. package/dist/skills/anchors-cli.js.map +1 -1
  303. package/dist/skills/anchors-wide.js +2 -2
  304. package/dist/skills/anchors-wide.js.map +1 -1
  305. package/dist/skills/cli-skills-1b.d.ts +17 -0
  306. package/dist/skills/cli-skills-1b.d.ts.map +1 -0
  307. package/dist/skills/cli-skills-1b.js +166 -0
  308. package/dist/skills/cli-skills-1b.js.map +1 -0
  309. package/dist/skills/cli-skills-2.d.ts +35 -0
  310. package/dist/skills/cli-skills-2.d.ts.map +1 -0
  311. package/dist/skills/cli-skills-2.js +129 -0
  312. package/dist/skills/cli-skills-2.js.map +1 -0
  313. package/dist/skills/cli-skills-report-1b.d.ts +49 -0
  314. package/dist/skills/cli-skills-report-1b.d.ts.map +1 -0
  315. package/dist/skills/cli-skills-report-1b.js +191 -0
  316. package/dist/skills/cli-skills-report-1b.js.map +1 -0
  317. package/dist/skills/cli-skills-report.d.ts +86 -0
  318. package/dist/skills/cli-skills-report.d.ts.map +1 -0
  319. package/dist/skills/cli-skills-report.js +121 -0
  320. package/dist/skills/cli-skills-report.js.map +1 -0
  321. package/dist/skills/cli-skills.d.ts +30 -0
  322. package/dist/skills/cli-skills.d.ts.map +1 -0
  323. package/dist/skills/cli-skills.js +379 -0
  324. package/dist/skills/cli-skills.js.map +1 -0
  325. package/dist/skills/compile-split.d.ts.map +1 -1
  326. package/dist/skills/compile-split.js +18 -0
  327. package/dist/skills/compile-split.js.map +1 -1
  328. package/dist/skills/compile-words.d.ts +4 -1
  329. package/dist/skills/compile-words.d.ts.map +1 -1
  330. package/dist/skills/compile-words.js +68 -8
  331. package/dist/skills/compile-words.js.map +1 -1
  332. package/dist/skills/compile.d.ts +7 -0
  333. package/dist/skills/compile.d.ts.map +1 -1
  334. package/dist/skills/compile.js +17 -0
  335. package/dist/skills/compile.js.map +1 -1
  336. package/dist/skills/credit.d.ts +86 -0
  337. package/dist/skills/credit.d.ts.map +1 -0
  338. package/dist/skills/credit.js +259 -0
  339. package/dist/skills/credit.js.map +1 -0
  340. package/dist/skills/fold-gated.d.ts +3 -0
  341. package/dist/skills/fold-gated.d.ts.map +1 -0
  342. package/dist/skills/fold-gated.js +78 -0
  343. package/dist/skills/fold-gated.js.map +1 -0
  344. package/dist/skills/fold.d.ts +87 -0
  345. package/dist/skills/fold.d.ts.map +1 -0
  346. package/dist/skills/fold.js +348 -0
  347. package/dist/skills/fold.js.map +1 -0
  348. package/dist/skills/follow-learnings.d.ts +128 -0
  349. package/dist/skills/follow-learnings.d.ts.map +1 -0
  350. package/dist/skills/follow-learnings.js +278 -0
  351. package/dist/skills/follow-learnings.js.map +1 -0
  352. package/dist/skills/learning-steps.d.ts +43 -0
  353. package/dist/skills/learning-steps.d.ts.map +1 -0
  354. package/dist/skills/learning-steps.js +294 -0
  355. package/dist/skills/learning-steps.js.map +1 -0
  356. package/dist/skills/lesson-gate.d.ts +25 -0
  357. package/dist/skills/lesson-gate.d.ts.map +1 -0
  358. package/dist/skills/lesson-gate.js +316 -0
  359. package/dist/skills/lesson-gate.js.map +1 -0
  360. package/dist/skills/offer-drift.d.ts +35 -0
  361. package/dist/skills/offer-drift.d.ts.map +1 -0
  362. package/dist/skills/offer-drift.js +98 -0
  363. package/dist/skills/offer-drift.js.map +1 -0
  364. package/dist/skills/offer-lesson.d.ts +31 -0
  365. package/dist/skills/offer-lesson.d.ts.map +1 -0
  366. package/dist/skills/offer-lesson.js +123 -0
  367. package/dist/skills/offer-lesson.js.map +1 -0
  368. package/dist/skills/offer-lines.d.ts +40 -0
  369. package/dist/skills/offer-lines.d.ts.map +1 -0
  370. package/dist/skills/offer-lines.js +80 -0
  371. package/dist/skills/offer-lines.js.map +1 -0
  372. package/dist/skills/offer-moment.d.ts +102 -0
  373. package/dist/skills/offer-moment.d.ts.map +1 -0
  374. package/dist/skills/offer-moment.js +260 -0
  375. package/dist/skills/offer-moment.js.map +1 -0
  376. package/dist/skills/offer-repair.d.ts +36 -0
  377. package/dist/skills/offer-repair.d.ts.map +1 -0
  378. package/dist/skills/offer-repair.js +212 -0
  379. package/dist/skills/offer-repair.js.map +1 -0
  380. package/dist/skills/offer-retire.d.ts +53 -0
  381. package/dist/skills/offer-retire.d.ts.map +1 -0
  382. package/dist/skills/offer-retire.js +149 -0
  383. package/dist/skills/offer-retire.js.map +1 -0
  384. package/dist/skills/offer-update.d.ts +54 -0
  385. package/dist/skills/offer-update.d.ts.map +1 -0
  386. package/dist/skills/offer-update.js +115 -0
  387. package/dist/skills/offer-update.js.map +1 -0
  388. package/dist/skills/offer-words-1b.d.ts +32 -0
  389. package/dist/skills/offer-words-1b.d.ts.map +1 -0
  390. package/dist/skills/offer-words-1b.js +80 -0
  391. package/dist/skills/offer-words-1b.js.map +1 -0
  392. package/dist/skills/offer-words-2.d.ts +123 -0
  393. package/dist/skills/offer-words-2.d.ts.map +1 -0
  394. package/dist/skills/offer-words-2.js +194 -0
  395. package/dist/skills/offer-words-2.js.map +1 -0
  396. package/dist/skills/offer-words.d.ts +65 -0
  397. package/dist/skills/offer-words.d.ts.map +1 -0
  398. package/dist/skills/offer-words.js +205 -0
  399. package/dist/skills/offer-words.js.map +1 -0
  400. package/dist/skills/offers.d.ts +66 -0
  401. package/dist/skills/offers.d.ts.map +1 -0
  402. package/dist/skills/offers.js +284 -0
  403. package/dist/skills/offers.js.map +1 -0
  404. package/dist/skills/runblock.d.ts +2 -0
  405. package/dist/skills/runblock.d.ts.map +1 -1
  406. package/dist/skills/runblock.js +11 -6
  407. package/dist/skills/runblock.js.map +1 -1
  408. package/dist/skills/save-gate.d.ts +64 -0
  409. package/dist/skills/save-gate.d.ts.map +1 -0
  410. package/dist/skills/save-gate.js +354 -0
  411. package/dist/skills/save-gate.js.map +1 -0
  412. package/dist/skills/save-verify.d.ts +59 -0
  413. package/dist/skills/save-verify.d.ts.map +1 -0
  414. package/dist/skills/save-verify.js +390 -0
  415. package/dist/skills/save-verify.js.map +1 -0
  416. package/dist/skills/settings.d.ts +12 -2
  417. package/dist/skills/settings.d.ts.map +1 -1
  418. package/dist/skills/settings.js +24 -2
  419. package/dist/skills/settings.js.map +1 -1
  420. package/dist/skills/skills.d.ts +26 -8
  421. package/dist/skills/skills.d.ts.map +1 -1
  422. package/dist/skills/skills.js +105 -52
  423. package/dist/skills/skills.js.map +1 -1
  424. package/dist/skills/types.d.ts +8 -0
  425. package/dist/skills/types.d.ts.map +1 -1
  426. package/dist/skills/update-gate.d.ts +36 -0
  427. package/dist/skills/update-gate.d.ts.map +1 -0
  428. package/dist/skills/update-gate.js +357 -0
  429. package/dist/skills/update-gate.js.map +1 -0
  430. package/dist/skills/update-plan.d.ts +40 -0
  431. package/dist/skills/update-plan.d.ts.map +1 -0
  432. package/dist/skills/update-plan.js +196 -0
  433. package/dist/skills/update-plan.js.map +1 -0
  434. package/dist/skills/value-line.d.ts +94 -0
  435. package/dist/skills/value-line.d.ts.map +1 -0
  436. package/dist/skills/value-line.js +355 -0
  437. package/dist/skills/value-line.js.map +1 -0
  438. package/dist/telemetry/contract.d.ts +15 -1
  439. package/dist/telemetry/contract.d.ts.map +1 -1
  440. package/dist/telemetry/contract.js +80 -11
  441. package/dist/telemetry/contract.js.map +1 -1
  442. package/dist/telemetry/gate.js +4 -4
  443. package/dist/telemetry/gate.js.map +1 -1
  444. package/dist/telemetry/index.d.ts +1 -1
  445. package/dist/telemetry/index.d.ts.map +1 -1
  446. package/dist/telemetry/index.js +1 -1
  447. package/dist/telemetry/index.js.map +1 -1
  448. package/dist/telemetry/notice.js +5 -5
  449. package/dist/telemetry/notice.js.map +1 -1
  450. package/dist/telemetry/queue.d.ts.map +1 -1
  451. package/dist/telemetry/queue.js +7 -7
  452. package/dist/telemetry/queue.js.map +1 -1
  453. package/dist/telemetry/track.d.ts.map +1 -1
  454. package/dist/telemetry/track.js +4 -3
  455. package/dist/telemetry/track.js.map +1 -1
  456. package/dist/trace/checks.d.ts.map +1 -1
  457. package/dist/trace/checks.js +10 -2
  458. package/dist/trace/checks.js.map +1 -1
  459. package/dist/trace/gate-file.d.ts +1 -1
  460. package/dist/trace/gate-file.d.ts.map +1 -1
  461. package/dist/trace/gate-file.js +3 -3
  462. package/dist/trace/gate-file.js.map +1 -1
  463. package/dist/upkeep-run.d.ts.map +1 -1
  464. package/dist/upkeep-run.js +2 -23
  465. package/dist/upkeep-run.js.map +1 -1
  466. package/dist/upkeep.d.ts.map +1 -1
  467. package/dist/upkeep.js +2 -3
  468. package/dist/upkeep.js.map +1 -1
  469. package/dist/util/private-fs.d.ts +6 -0
  470. package/dist/util/private-fs.d.ts.map +1 -1
  471. package/dist/util/private-fs.js +9 -1
  472. package/dist/util/private-fs.js.map +1 -1
  473. package/dist/util/state.d.ts.map +1 -1
  474. package/dist/util/state.js +17 -3
  475. package/dist/util/state.js.map +1 -1
  476. package/package.json +1 -1
  477. package/dist/skills/found-skill.d.ts +0 -35
  478. package/dist/skills/found-skill.d.ts.map +0 -1
  479. package/dist/skills/found-skill.js +0 -66
  480. package/dist/skills/found-skill.js.map +0 -1
@@ -0,0 +1,87 @@
1
+ import type { CompiledSkill, FoldOp, ParsedSkill, SkillStep } from './types.js';
2
+ import type { SkillInjection } from '../trace/types.js';
3
+ import type { Lesson } from './lessons.js';
4
+ import type { Fidelity } from './fidelity.js';
5
+ export type FoldPlan = {
6
+ op: 'update';
7
+ step: number;
8
+ cmd: SkillStep;
9
+ why: 'failed-then-worked';
10
+ }
11
+ /**
12
+ * Part 7: the block showed step `step` the way a live learning says (`follows`: whose, "your preference"), and it
13
+ * worked; `more`: the other steps the same learning changed that ran that way too, changed with it.
14
+ */
15
+ | {
16
+ op: 'update';
17
+ step: number;
18
+ cmd: SkillStep;
19
+ why: 'preference';
20
+ follows: string;
21
+ more?: SkillStep[];
22
+ } | {
23
+ op: 'extend';
24
+ at: number;
25
+ cmds: SkillStep[];
26
+ why: 'lesson' | 'two-uses';
27
+ lessonIds: string[];
28
+ } | {
29
+ op: 'split';
30
+ from: number;
31
+ to: number;
32
+ name: string;
33
+ } | {
34
+ op: 'none';
35
+ why: FoldNone;
36
+ };
37
+ export type FoldNone = 'no-change' | 'compile' | 'too-big' | 'too-long' | 'risk' | 'new-param' | 'layout' | 'gated-new' | 'guardrail-lesson';
38
+ export interface FoldInput {
39
+ skill: ParsedSkill;
40
+ text: string;
41
+ /** compileRun of this run's sheet (4.2 step 1); null when compile refused it. */
42
+ fresh: CompiledSkill | null;
43
+ fid: Fidelity;
44
+ inj: Pick<SkillInjection, 'params'>;
45
+ earlierExtraShas: string[][];
46
+ lessons: Lesson[];
47
+ earlierRan: number[][];
48
+ /** The earlier uses' checks, newest last, beside earlierRan: split needs the use before to have passed. Absent: no split. */
49
+ earlierChecks?: Array<'passed' | 'failed' | 'none'>;
50
+ /** The skill to fold: rebuildLoose of a hand-edited file (4.6). Absent: rebuildCompiled of `text`, or none 'layout'. */
51
+ base?: CompiledSkill | null;
52
+ /** Split's name, compile's proposeName for the fresh run made free (the caller has the sheet and the store). */
53
+ splitName?: string;
54
+ /** Whether a skill name is taken (the store's nameTaken): the split's name is never one (review). */
55
+ taken?: (name: string) => boolean;
56
+ /**
57
+ * Part 7: steps the block showed the way a live learning says rather than as the skill has them (`cmd` with the
58
+ * skill's params, `follows` whose learning it was). An update to that way is offered once it ran and checked out.
59
+ */
60
+ preferred?: Array<{
61
+ step: number;
62
+ cmd: string;
63
+ follows: string;
64
+ }>;
65
+ }
66
+ /** 4.2: the plan, its result checked (4.2 step 7) and through the size gate (4.3). Never throws. */
67
+ export declare function planFold(i: FoldInput): FoldPlan;
68
+ /** The plan applied: the new CompiledSkill (version bumped), or null when a check after the edit refuses it. */
69
+ export declare function applyFold(base: CompiledSkill, plan: Exclude<FoldPlan, {
70
+ op: 'none' | 'split';
71
+ }>): CompiledSkill | null;
72
+ /** Drift (4.8, P17): the new version from the run, keeping the skill's id, name, scope, applies, job and asks. */
73
+ export declare function replaceWith(base: CompiledSkill, fresh: CompiledSkill): CompiledSkill;
74
+ /** Phase 3's N4: the change as text and a printed diff, from inputs only (no disk). `op: 'none'` gives text equal to the input. */
75
+ export declare function foldDiff(i: FoldInput, base: CompiledSkill): {
76
+ text: string;
77
+ diff: string;
78
+ op: FoldOp | 'none';
79
+ why?: FoldNone;
80
+ };
81
+ /** Phase 3's N4 for drift: the whole new version and its diff against the skill as Trail reads it. */
82
+ export declare function driftDiff(base: CompiledSkill, fresh: CompiledSkill): {
83
+ text: string;
84
+ diff: string;
85
+ op: 'replace';
86
+ };
87
+ //# sourceMappingURL=fold.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fold.d.ts","sourceRoot":"","sources":["../../src/skills/fold.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,348 @@
1
+ /**
2
+ * The fold plan (phase 2 design 4.2, spec 9 and 13, P1 to P11): moment 5's
3
+ * one change to a skill, worked out from the skill as it is and the run that
4
+ * just checked out. Update a step that failed and was done another way,
5
+ * extend with at most 2 steps a lesson or 2 uses in a row back, split a
6
+ * subset two uses ran into a skill of its own, or nothing.
7
+ *
8
+ * New step text only ever comes from a fresh compile of the run (P4): every
9
+ * copy rule, the secret and risk checks and the 12-line cap stay in one
10
+ * place. A fold can't add a param (P6) or a step that can't be undone (P7),
11
+ * goes through the renderer on an exact round trip (P11), and passes the
12
+ * size gate (4.3). Drift's replace (4.8) is a whole new version, not a fold.
13
+ *
14
+ * Pure: no disk, no clock. Phase 3 (N4) reads the change as text and a diff
15
+ * through `foldDiff` and `driftDiff`.
16
+ */
17
+ import { createHash } from 'node:crypto';
18
+ import { programVerb } from './fidelity.js';
19
+ import { ranAs } from './ledger.js';
20
+ import { fillParams } from './params.js';
21
+ import { MAX_RUN_LINES, MAX_STEP_CHARS, gatedKind } from './risk.js';
22
+ import { parseSkillMd, renderSkillMd } from './skillmd.js';
23
+ import { refusedAtRecall } from './recall.js';
24
+ import { rebuildCompiled } from './skill-rebuild.js';
25
+ import { FOLD_MAX_CHARS, printDiff, sizeGate } from './skill-diff.js';
26
+ import { goodName } from './compile-words.js';
27
+ import { bareCommand, simpleCommands } from '../trace/shell.js';
28
+ import { sameGatedCommand } from './fold-gated.js';
29
+ const MAX_EXTEND = 2;
30
+ const none = (why) => ({ op: 'none', why });
31
+ const intVersion = (c) => (/^[1-9]\d{0,5}$/.test(String(c.meta.version ?? '')) ? Number(c.meta.version) : null);
32
+ /** A fresh step's values: its params as this run filled them (findParams keeps this run's value first). */
33
+ const freshValues = (fresh) => Object.fromEntries(fresh.params.filter((p) => p.seen[0] !== undefined).map((p) => [p.name, p.seen[0]]));
34
+ /**
35
+ * The fresh step in the skill's own params (P6): each `{p}` becomes the skill param with the same filled value, or keeps
36
+ * its name when the skill has it and its value is a command (`$(git rev-parse HEAD)`) or unknown. null: a new param.
37
+ */
38
+ function inSkillTerms(cmd, fresh, base, vals) {
39
+ const fv = freshValues(fresh);
40
+ const names = new Set(base.params.map((p) => p.name));
41
+ let bad = false;
42
+ const out = cmd.replace(/\{([A-Za-z_]\w*)\}/g, (m, p) => {
43
+ const v = fv[p];
44
+ const same = v === undefined ? undefined : [...names].find((q) => vals[q] === v);
45
+ if (same)
46
+ return `{${same}}`;
47
+ if (names.has(p) && (vals[p] === undefined || v === undefined || vals[p].startsWith('$(')))
48
+ return m;
49
+ bad = true;
50
+ return m;
51
+ });
52
+ return bad ? null : out;
53
+ }
54
+ /** The candidate's source call is one this use ran and passed in its checkout: an extra or a changed step of fidelity. */
55
+ const passedHere = (c, fid) => [...fid.extra, ...fid.changed].some((x) => c.step.from?.includes(x.id));
56
+ /** 4.2 step 2: fresh steps that ran as no skill step (nor the skill's check) are the candidates. */
57
+ function candidates(base, fresh, vals) {
58
+ const fv = freshValues(fresh);
59
+ const matched = fresh.steps.map((s) => {
60
+ const filled = fillParams(s.cmd, fv);
61
+ const k = base.steps.findIndex((b) => ranAs(b.cmd, filled, vals));
62
+ return k + 1;
63
+ });
64
+ const cands = fresh.steps.flatMap((step, j) => {
65
+ const filled = fillParams(step.cmd, fv);
66
+ if (matched[j] > 0 || (base.check && ranAs(base.check, filled, vals)))
67
+ return [];
68
+ return [{ j, step, filled }];
69
+ });
70
+ return { cands, matched };
71
+ }
72
+ /** The skill step a candidate goes after: from fidelity's extra step for its source call, else the steps matched before it. */
73
+ function afterOf(c, fid, matched) {
74
+ const e = fid.extra.find((x) => c.step.from?.includes(x.id));
75
+ if (e)
76
+ return e.after;
77
+ return Math.max(0, ...matched.slice(0, c.j));
78
+ }
79
+ const lessonCommand = (l) => {
80
+ const at = String(l.text ?? '').indexOf(': ');
81
+ return at < 0 ? '' : l.text.slice(at + 2).trim();
82
+ };
83
+ function planOf(i, base) {
84
+ const fresh = i.fresh;
85
+ const vals = i.inj?.params ?? {};
86
+ // P4, spec 13: a new step is one this use ran and passed, so only candidates fidelity counted (review).
87
+ const { cands: all, matched } = candidates(base, fresh, vals);
88
+ const cands = all.filter((c) => passedHere(c, i.fid));
89
+ // Part 7: steps the block showed the person's way, that ran that way: the change is from the fresh compile (P4).
90
+ const fv = freshValues(fresh);
91
+ const changes = [];
92
+ for (const p of i.preferred ?? []) {
93
+ const old = base.steps[p.step - 1];
94
+ if (!old || old.gated || !i.fid.ran.includes(p.step) || (changes.length && changes[0].follows !== p.follows))
95
+ continue;
96
+ const hit = fresh.steps.find((s) => !s.gated && ranAs(fillParams(p.cmd, vals), fillParams(s.cmd, fv), vals));
97
+ if (!hit)
98
+ continue;
99
+ const cmd = inSkillTerms(hit.cmd, fresh, base, vals);
100
+ if (cmd === null)
101
+ return none('new-param');
102
+ if (cmd !== old.cmd)
103
+ changes.push({ cmd: { ...old, cmd, n: p.step }, follows: p.follows });
104
+ }
105
+ if (changes.length) {
106
+ const [first, ...rest] = changes.sort((a, b) => a.cmd.n - b.cmd.n);
107
+ return { op: 'update', step: first.cmd.n, cmd: first.cmd, why: 'preference', follows: first.follows, ...(rest.length ? { more: rest.map((c) => c.cmd) } : {}) };
108
+ }
109
+ // 3. update: a step that failed and was done another way, the same program and verb.
110
+ for (const c of [...i.fid.changed].sort((a, b) => a.step - b.step)) {
111
+ const old = base.steps[c.step - 1];
112
+ if (!old)
113
+ continue;
114
+ const verb = programVerb(fillParams(old.cmd, vals));
115
+ const hit = cands.find((x) => x.step.from?.includes(c.id)) ?? cands.find((x) => verb !== null && programVerb(x.filled) === verb);
116
+ if (!hit)
117
+ continue;
118
+ const cmd = inSkillTerms(hit.step.cmd, fresh, base, vals);
119
+ if (cmd === null)
120
+ return none('new-param');
121
+ if ((hit.step.gated ?? null) !== (old.gated ?? null))
122
+ return none('gated-new');
123
+ // D138 (1): a gated step keeps its command; only its arguments may change (no force flag, no new shared branch).
124
+ if (old.gated && !sameGatedCommand(fillParams(old.cmd, vals), hit.filled))
125
+ return none('gated-new');
126
+ return { op: 'update', step: c.step, cmd: { ...hit.step, n: c.step, cmd }, why: 'failed-then-worked' };
127
+ }
128
+ // 4. extend: from a lesson the person kept on this skill, else the same extra step in the use before.
129
+ const lessonIds = new Map();
130
+ for (const l of i.lessons ?? []) {
131
+ const part = lessonCommand(l);
132
+ if (!part)
133
+ continue;
134
+ for (const c of cands) {
135
+ if (!ranAs(part, c.filled, vals))
136
+ continue;
137
+ if (l.kind === 'guardrail')
138
+ return none('guardrail-lesson');
139
+ lessonIds.set(c.j, [...(lessonIds.get(c.j) ?? []), l.id]);
140
+ }
141
+ }
142
+ let why = 'lesson';
143
+ let picked = cands.filter((c) => lessonIds.has(c.j));
144
+ if (!picked.length) {
145
+ const before = new Set(i.earlierExtraShas?.at(-1) ?? []);
146
+ why = 'two-uses';
147
+ picked = cands.filter((c) => i.fid.extra.some((e) => before.has(e.sha) && c.step.from?.includes(e.id)));
148
+ }
149
+ if (picked.length) {
150
+ const at = afterOf(picked[0], i.fid, matched);
151
+ const group = picked.filter((c) => afterOf(c, i.fid, matched) === at).slice(0, MAX_EXTEND);
152
+ const cmds = [];
153
+ for (const [k, c] of group.entries()) {
154
+ if (c.step.gated || gatedKind(c.filled))
155
+ return none('gated-new');
156
+ const cmd = inSkillTerms(c.step.cmd, fresh, base, vals);
157
+ if (cmd === null)
158
+ return none('new-param');
159
+ cmds.push({ ...c.step, n: at + k + 1, cmd });
160
+ }
161
+ const ids = why === 'lesson' ? [...new Set(group.flatMap((c) => lessonIds.get(c.j) ?? []))] : [];
162
+ return { op: 'extend', at, cmds, why, lessonIds: ids };
163
+ }
164
+ // 5. split: this use and the one before ran the same contiguous steps, 2 or more and fewer than all, both checked, no extras.
165
+ const prevRan = i.earlierRan?.at(-1);
166
+ if (prevRan && i.earlierChecks?.at(-1) === 'passed' && !i.fid.extra.length && !i.fid.changed.length && !(i.earlierExtraShas?.at(-1) ?? []).length) {
167
+ const now = [...new Set(i.fid.ran)].sort((a, b) => a - b);
168
+ const prev = [...new Set(prevRan)].sort((a, b) => a - b);
169
+ const contiguous = now.every((n, k) => k === 0 || n === now[k - 1] + 1);
170
+ if (now.length >= 2 && now.length < base.steps.length && contiguous && now.join() === prev.join()) {
171
+ const name = splitNameFor(i, base);
172
+ if (name)
173
+ return { op: 'split', from: now[0], to: now.at(-1), name };
174
+ }
175
+ }
176
+ return none('no-change');
177
+ }
178
+ /** A good name no other skill has; null when none is found (review: a hand-edited name is no base for a folder). */
179
+ function splitNameFor(i, base) {
180
+ const free = (n) => goodName(n) && n !== base.name && !(i.taken?.(n) ?? false);
181
+ if (i.splitName && free(i.splitName))
182
+ return i.splitName;
183
+ const stem = goodName(base.name) ? base.name : i.fresh && goodName(i.fresh.name) ? i.fresh.name : 'split';
184
+ for (let n = 2; n < 100; n++) {
185
+ const name = `${stem.slice(0, 44).replace(/-+$/, '')}-${n}`;
186
+ if (free(name) && name !== i.fresh?.name)
187
+ return name;
188
+ }
189
+ return null;
190
+ }
191
+ /** The base to fold: the caller's, else the file rebuilt on an exact round trip. */
192
+ const baseFor = (i) => i.base ?? rebuildCompiled(i.text, i.skill, { source: null, helpers: [] });
193
+ /** 4.2: the plan, its result checked (4.2 step 7) and through the size gate (4.3). Never throws. */
194
+ export function planFold(i) {
195
+ try {
196
+ if (!i.fresh || !i.fresh.steps?.length)
197
+ return none('compile');
198
+ const base = baseFor(i);
199
+ if (!base || intVersion(base) === null)
200
+ return none('layout');
201
+ const plan = planOf(i, base);
202
+ if (plan.op !== 'update' && plan.op !== 'extend')
203
+ return plan;
204
+ const next = applyWhy(base, plan);
205
+ if ('why' in next)
206
+ return none(next.why);
207
+ // Part 7: a change to follow a learning swaps a program in the steps it names and nothing else, so on a small skill
208
+ // it can touch most of the file; only the size in characters holds it back.
209
+ const size = sizeGate(renderSkillMd(base), renderSkillMd(next.skill));
210
+ if (!(plan.op === 'update' && plan.why === 'preference' ? size.chars <= FOLD_MAX_CHARS : size.ok))
211
+ return none('too-big');
212
+ return plan;
213
+ }
214
+ catch {
215
+ return none('no-change');
216
+ }
217
+ }
218
+ /* -------------------------------------------------------------- applying */
219
+ /** Words compile never lists as a need (compile.ts NOT_NEEDS), plus a wait loop's own words. */
220
+ const NOT_NEEDS = new Set(['cd', 'export', 'source', 'echo', 'printf', 'sleep', 'true', 'false', 'pwd', 'set', 'unset', 'alias', 'wait', 'exit', 'return', 'test', 'until', 'while', 'if', 'for', 'do', 'done', 'then', 'fi', 'eval', 'exec', 'read', 'local', 'shift', 'trap', 'cat', 'ls', 'head', 'tail', 'grep', 'break']);
221
+ const MAX_NEEDS = 6;
222
+ /** The programs a step needs, as compile reads them (its folder taken off). */
223
+ function needsOf(cmd) {
224
+ const core = /^\(cd \S+ && (.*)\)$/.exec(cmd)?.[1] ?? cmd;
225
+ const out = [];
226
+ for (const simple of simpleCommands(core)) {
227
+ const w = bareCommand(simple).split(/\s+/)[0] ?? '';
228
+ if (/^[A-Za-z][\w.+-]*$/.test(w) && !NOT_NEEDS.has(w) && !out.includes(w))
229
+ out.push(w);
230
+ }
231
+ return out;
232
+ }
233
+ /** `needs` after a change: what a removed step alone needed goes, what a new step needs is added, at most 6. */
234
+ function needsAfter(base, steps, check) {
235
+ const had = String(base.meta.needs ?? '').split(/,\s*/).map((s) => s.trim()).filter(Boolean);
236
+ const used = new Set([...steps.map((s) => s.cmd), ...(check ? [check] : [])].flatMap(needsOf));
237
+ const before = new Set([...base.steps.map((s) => s.cmd), ...(base.check ? [base.check] : [])].flatMap(needsOf));
238
+ const kept = had.filter((p) => used.has(p) || !before.has(p));
239
+ for (const p of used)
240
+ if (!kept.includes(p) && !before.has(p))
241
+ kept.push(p);
242
+ return kept.length ? kept.slice(0, MAX_NEEDS).join(', ') : undefined;
243
+ }
244
+ function applyWhy(base, plan) {
245
+ const v = intVersion(base);
246
+ if (v === null)
247
+ return { why: 'layout' };
248
+ let steps = base.steps.map((s) => ({ ...s }));
249
+ let check = base.check;
250
+ if (plan.op === 'update') {
251
+ const old = steps[plan.step - 1];
252
+ if (!old || !plan.cmd?.cmd)
253
+ return { why: 'layout' };
254
+ for (const next of [plan.cmd, ...(plan.why === 'preference' ? plan.more ?? [] : [])]) {
255
+ const was = steps[next.n - 1];
256
+ if (!was)
257
+ return { why: 'layout' };
258
+ if (base.checkIsStep && was.cmd === base.check)
259
+ check = next.cmd;
260
+ steps[next.n - 1] = { ...next };
261
+ }
262
+ }
263
+ else {
264
+ if (!Number.isInteger(plan.at) || plan.at < 0 || plan.at > steps.length || !plan.cmds?.length)
265
+ return { why: 'layout' };
266
+ steps.splice(plan.at, 0, ...plan.cmds.map((s) => ({ ...s })));
267
+ }
268
+ steps = steps.map((s, k) => ({ ...s, n: k + 1 }));
269
+ if (steps.length > MAX_RUN_LINES || steps.some((s) => s.cmd.length > MAX_STEP_CHARS))
270
+ return { why: 'too-long' };
271
+ if (steps.some((s) => !s.gated && gatedKind(s.cmd) !== null))
272
+ return { why: 'risk' };
273
+ const meta = { ...base.meta, version: String(v + 1) };
274
+ const gated = steps.filter((s) => s.gated).map((s) => s.cmd);
275
+ if (gated.length)
276
+ meta['confirm-before'] = gated.join(' ; ');
277
+ else
278
+ delete meta['confirm-before'];
279
+ const needs = needsAfter(base, steps, check);
280
+ if (needs)
281
+ meta.needs = needs;
282
+ else
283
+ delete meta.needs;
284
+ if (check !== base.check && meta.check !== undefined)
285
+ meta.check = check;
286
+ // Compile's "what worked was step N." ends the line and names a step by its number: it follows the renumber. Only
287
+ // the one at the end: the quoted error before it is a command's output and may say anything (review).
288
+ const [at, shift] = plan.op === 'extend' ? [plan.at, plan.cmds.length] : [0, 0];
289
+ const ifFails = base.ifFails.map((l) => l.replace(/\bwhat worked was step (\d+)\.$/, (m, n) => (shift && Number(n) > at ? `what worked was step ${Number(n) + shift}.` : m)));
290
+ const skill = { ...base, meta, steps, check, ifFails };
291
+ const parsed = parseSkillMd(renderSkillMd(skill), skill.name);
292
+ if (!parsed || parsed.steps.length !== steps.length)
293
+ return { why: 'layout' };
294
+ if (refusedAtRecall(parsed) !== null)
295
+ return { why: 'risk' };
296
+ return { skill };
297
+ }
298
+ /** The plan applied: the new CompiledSkill (version bumped), or null when a check after the edit refuses it. */
299
+ export function applyFold(base, plan) {
300
+ try {
301
+ const r = applyWhy(base, plan);
302
+ return 'skill' in r ? r.skill : null;
303
+ }
304
+ catch {
305
+ return null;
306
+ }
307
+ }
308
+ /** Drift (4.8, P17): the new version from the run, keeping the skill's id, name, scope, applies, job and asks. */
309
+ export function replaceWith(base, fresh) {
310
+ const v = intVersion(base) ?? 1;
311
+ const meta = { ...fresh.meta, trail: base.meta.trail, scope: base.meta.scope, asks: base.meta.asks, version: String(v + 1) };
312
+ for (const k of ['applies', 'job', 'status-asks']) {
313
+ if (base.meta[k] === undefined)
314
+ delete meta[k];
315
+ else
316
+ meta[k] = base.meta[k];
317
+ }
318
+ return { ...fresh, name: base.name, meta };
319
+ }
320
+ /* -------------------------------------------------------------- phase 3 (N4) */
321
+ const labels = (base, to) => [`${base.name}/SKILL.md v${base.meta.version}`, `${base.name}/SKILL.md v${to}`];
322
+ /** The fresh compile as the split's own skill: its name, an id of its own, version 1. */
323
+ function splitSkill(base, fresh, name) {
324
+ const id = `s-${createHash('sha256').update(`${base.meta.trail}|${name}`).digest('hex').slice(0, 6)}`;
325
+ return { ...fresh, name, meta: { ...fresh.meta, trail: id, version: '1' } };
326
+ }
327
+ /** Phase 3's N4: the change as text and a printed diff, from inputs only (no disk). `op: 'none'` gives text equal to the input. */
328
+ export function foldDiff(i, base) {
329
+ const plan = planFold({ ...i, base });
330
+ if (plan.op === 'none')
331
+ return { text: i.text, diff: '', op: 'none', why: plan.why };
332
+ if (plan.op === 'split') {
333
+ const text = renderSkillMd(splitSkill(base, i.fresh, plan.name));
334
+ return { text, diff: printDiff('', text, ['/dev/null', `${plan.name}/SKILL.md v1`]), op: 'split' };
335
+ }
336
+ const next = applyFold(base, plan);
337
+ if (!next)
338
+ return { text: i.text, diff: '', op: 'none', why: 'layout' };
339
+ const text = renderSkillMd(next);
340
+ return { text, diff: printDiff(i.text, text, labels(base, Number(next.meta.version))), op: plan.op };
341
+ }
342
+ /** Phase 3's N4 for drift: the whole new version and its diff against the skill as Trail reads it. */
343
+ export function driftDiff(base, fresh) {
344
+ const next = replaceWith(base, fresh);
345
+ const text = renderSkillMd(next);
346
+ return { text, diff: printDiff(renderSkillMd(base), text, labels(base, Number(next.meta.version))), op: 'replace' };
347
+ }
348
+ //# sourceMappingURL=fold.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fold.js","sourceRoot":"","sources":["../../src/skills/fold.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,128 @@
1
+ /**
2
+ * Learnings and skills, said once and never against each other (part 7).
3
+ *
4
+ * A person's live preferences, decisions and guardrails are read for what
5
+ * they say about commands (learning-steps.ts, no model), then:
6
+ *
7
+ * - at a skill's save or offer, the steps follow them: a step a learning
8
+ * forbids is written its way when Trail can do that safely, else left
9
+ * out, and the offer names either in one plain line (`followAtSave`);
10
+ * - at recall, a learning that only repeats a step is said once, in the run
11
+ * block, and the prompt's learnings lines leave it out; one that goes
12
+ * against a step wins, and the block marks the step (`recallMarks`,
13
+ * `markLines`). The update offer then proposes the change, with its usual
14
+ * consent (fold.ts, why `preference`).
15
+ *
16
+ * Retired, replaced and held learnings never count (`liveLearnings`), nor
17
+ * one on a teammate's unmerged branch, nor a lesson. Reading fails open:
18
+ * no learnings, nothing changes.
19
+ */
20
+ import { type Note } from '../notes/notes.js';
21
+ import { type LearningKind, type Scope } from '../notes/learning-fields.js';
22
+ import { type StepRule } from './learning-steps.js';
23
+ export interface StepLearning {
24
+ id: string;
25
+ /** Its file name: one learning wherever it sits, as the session's shown list knows it (`shownFiles`). */
26
+ file: string;
27
+ kind: LearningKind | null;
28
+ scope: Scope;
29
+ /** The learning's words as a line quotes them. */
30
+ quote: string;
31
+ /** The quote is the whole learning and every sentence of it was read: a line that says it leaves nothing out. */
32
+ whole: boolean;
33
+ rules: StepRule[];
34
+ }
35
+ /** Where a save or a block reads learnings: the run's repo, its checkout's committed ones, and every-repo ones. */
36
+ export interface LearningsWhere {
37
+ repoKeys: string[];
38
+ checkout: string;
39
+ env: NodeJS.ProcessEnv;
40
+ }
41
+ export declare const QUOTE_MAX = 160;
42
+ /** The words the person and the agent read. No em dashes; never notes, rules or the like (the words test reads these). */
43
+ export declare const FOLLOW_COPY: {
44
+ readonly savedOne: "Step {n} runs {next} rather than this run's {old}, as {whose} \"{quote}\" says.";
45
+ readonly savedMany: "Steps {list} follow {whose} \"{quote}\" rather than this run's commands.";
46
+ readonly leftOne: "Trail left out {old}: it goes against {whose} \"{quote}\", and Trail can't change it safely.";
47
+ readonly leftMany: "Trail left out {k} steps: they go against {whose} \"{quote}\", and Trail can't change them safely.";
48
+ readonly refuse: "goes against {whose} \"{quote}\", and it is the check";
49
+ readonly short: "Some steps follow your learnings rather than this run; say show me to see them.";
50
+ readonly counts: "To follow your learnings, Trail {did}; say show me to see them.";
51
+ readonly stepFixed: " ({whose_s} way; the skill has {old})";
52
+ readonly stepAgainst: " (against {whose}: see below)";
53
+ readonly wins: "{Whose} wins over the skill: \"{quote}\". {Steps} {are} written its way; run {them} as shown.";
54
+ readonly against: "{Whose} \"{quote}\" goes against {steps}: leave {it} out, do that part its way, and tell the person.";
55
+ readonly follows: "{Steps} {follow} {whose}: \"{quote}\".";
56
+ };
57
+ /** A command as a line shows it: one line, at most 60 characters, its single quotes made double, in single quotes. */
58
+ export declare const cmdWords: (cmd: string) => string;
59
+ /** 'your preference', "this repo's decision", "your team's learning". */
60
+ export declare function whose(l: Pick<StepLearning, 'kind' | 'scope'>): string;
61
+ /** What one learning says about commands; null when it says nothing a step could repeat or go against. */
62
+ export declare function stepLearningOf(n: Pick<Note, 'id' | 'kind' | 'scope' | 'title' | 'body'> & {
63
+ path?: string;
64
+ }): StepLearning | null;
65
+ /** The file names of the learnings a session has shown already (its `injectedNotes`: paths, or a title for one with none). */
66
+ export declare function shownFiles(injected: readonly string[] | undefined): Set<string>;
67
+ /** The live learnings that say something about commands, for a run in `where`. [] on any read failure. */
68
+ export declare function stepLearnings(where: LearningsWhere): StepLearning[];
69
+ /**
70
+ * The learning's words only repeat what the steps do: every sentence read, at least one step repeats it, none goes
71
+ * against it. What init folds into a skill as a lesson (part 7).
72
+ */
73
+ export declare function onlyRepeats(text: string, steps: string[]): boolean;
74
+ export interface SaveItem {
75
+ cmd: string;
76
+ gated: boolean;
77
+ isCheck: boolean;
78
+ }
79
+ export interface SaveFollow {
80
+ /** The steps kept, by their index in the input, with the command they keep. */
81
+ keep: Array<{
82
+ i: number;
83
+ cmd: string;
84
+ }>;
85
+ /** The one plain line the offer and the save name it in; '' when nothing changed. */
86
+ line: string;
87
+ /** Why the skill can't be kept: the check itself goes against a learning and can't follow it. */
88
+ refuse: string | null;
89
+ }
90
+ /** The steps as a save keeps them: each one a learning goes against written its way, or left out, and the line that says so. */
91
+ export declare function followAtSave(items: SaveItem[], ls: StepLearning[]): SaveFollow;
92
+ /** An offer's 2 lines with the follow line at the end of line 1 (a shorter one when both don't fit). */
93
+ export declare function withFollowLine(lines: [string, string], followed: string | undefined): [string, string];
94
+ /** One learning's say in a run block: the steps it repeats, or the steps it goes against (written its way, or to leave out). */
95
+ export interface RecallMark {
96
+ l: StepLearning;
97
+ against: boolean;
98
+ steps: number[];
99
+ /** Against: each step's command its way (with the skill's {params}), or null for a step to leave out. */
100
+ fixes: Map<number, string | null>;
101
+ }
102
+ /**
103
+ * What the live learnings say of a skill's steps, at most 3 learnings. A learning that goes against a step wins over
104
+ * one that repeats it. A repeat is said only for a preference or decision (or a plain learning) the line can quote in
105
+ * full, so leaving it out of the prompt's learnings lines loses nothing, and only once a session: one the session showed
106
+ * already (`shown`, file names: on a file the agent opened, or with an earlier prompt) is not said again. A learning
107
+ * that goes against a step is always marked, since the step is shown its way.
108
+ */
109
+ export declare function recallMarks(steps: Array<{
110
+ n: number;
111
+ cmd: string;
112
+ gated?: unknown;
113
+ }>, ls: StepLearning[], shown?: ReadonlySet<string>): RecallMark[];
114
+ /** The step texts and check as the block shows them: each fix in place of its step (and of the check it is). */
115
+ export declare function withFixes<T extends {
116
+ steps: Array<{
117
+ n: number;
118
+ cmd: string;
119
+ }>;
120
+ check: string | null;
121
+ }>(skill: T, marks: RecallMark[]): T;
122
+ /** What a marked step's line ends with in the block (`n` is the step, `old` the skill's own command, filled). */
123
+ export declare function stepNote(marks: RecallMark[], n: number, old: string): string;
124
+ /** The lines after a block's steps, one per learning, each quoting it once. */
125
+ export declare function markLines(marks: RecallMark[]): string[];
126
+ /** The ids of the learnings a block says (its lines are in the block as it went out). */
127
+ export declare function saidIn(block: string, marks: RecallMark[]): string[];
128
+ //# sourceMappingURL=follow-learnings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"follow-learnings.d.ts","sourceRoot":"","sources":["../../src/skills/follow-learnings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,EAAe,KAAK,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAE3D,OAAO,EAA+C,KAAK,YAAY,EAAE,KAAK,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAMzH,OAAO,EAAuB,KAAK,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAEzE,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,yGAAyG;IACzG,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,YAAY,GAAG,IAAI,CAAC;IAC1B,KAAK,EAAE,KAAK,CAAC;IACb,kDAAkD;IAClD,KAAK,EAAE,MAAM,CAAC;IACd,iHAAiH;IACjH,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,QAAQ,EAAE,CAAC;CACnB;AAED,mHAAmH;AACnH,MAAM,WAAW,cAAc;IAAG,QAAQ,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAA;CAAE;AAEhG,eAAO,MAAM,SAAS,MAAM,CAAC;AAG7B,0HAA0H;AAC1H,eAAO,MAAM,WAAW;;;;;;;;;;;;;CAad,CAAC;AAKX,sHAAsH;AACtH,eAAO,MAAM,QAAQ,GAAI,KAAK,MAAM,WAA8D,CAAC;AAInG,yEAAyE;AACzE,wBAAgB,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,MAAM,CAErE;AAoBD,0GAA0G;AAC1G,wBAAgB,cAAc,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,CAAC,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,YAAY,GAAG,IAAI,CAQjI;AAED,8HAA8H;AAC9H,wBAAgB,UAAU,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,CAE/E;AAED,0GAA0G;AAC1G,wBAAgB,aAAa,CAAC,KAAK,EAAE,cAAc,GAAG,YAAY,EAAE,CAkBnE;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAKlE;AAID,MAAM,WAAW,QAAQ;IAAG,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE;AAC3E,MAAM,WAAW,UAAU;IACzB,+EAA+E;IAC/E,IAAI,EAAE,KAAK,CAAC;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxC,qFAAqF;IACrF,IAAI,EAAE,MAAM,CAAC;IACb,iGAAiG;IACjG,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAcD,gIAAgI;AAChI,wBAAgB,YAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,YAAY,EAAE,GAAG,UAAU,CAsC9E;AAMD,wGAAwG;AACxG,wBAAgB,cAAc,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAItG;AAID,gIAAgI;AAChI,MAAM,WAAW,UAAU;IACzB,CAAC,EAAE,YAAY,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,yGAAyG;IACzG,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;CACnC;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,KAAK,GAAE,WAAW,CAAC,MAAM,CAAa,GAAG,UAAU,EAAE,CAkB/J;AAED,gHAAgH;AAChH,wBAAgB,SAAS,CAAC,CAAC,SAAS;IAAE,KAAK,EAAE,KAAK,CAAC;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,CAAC,CAYxI;AAED,iHAAiH;AACjH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAI5E;AAED,+EAA+E;AAC/E,wBAAgB,SAAS,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,MAAM,EAAE,CAoBvD;AAED,yFAAyF;AACzF,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,MAAM,EAAE,CAGnE"}