@nanonets/graft 0.24.0 → 0.24.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (396) hide show
  1. package/dist/ask/ask.d.ts +8 -0
  2. package/dist/ask/ask.d.ts.map +1 -1
  3. package/dist/ask/ask.js +33 -12
  4. package/dist/ask/ask.js.map +1 -1
  5. package/dist/claude/hook-io.d.ts +44 -0
  6. package/dist/claude/hook-io.d.ts.map +1 -0
  7. package/dist/claude/hook-io.js +144 -0
  8. package/dist/claude/hook-io.js.map +1 -0
  9. package/dist/claude/skills-hook-util.d.ts +25 -0
  10. package/dist/claude/skills-hook-util.d.ts.map +1 -0
  11. package/dist/claude/skills-hook-util.js +71 -0
  12. package/dist/claude/skills-hook-util.js.map +1 -0
  13. package/dist/cli-picker.d.ts +24 -0
  14. package/dist/cli-picker.d.ts.map +1 -1
  15. package/dist/cli-picker.js +36 -5
  16. package/dist/cli-picker.js.map +1 -1
  17. package/dist/cli.d.ts.map +1 -1
  18. package/dist/cli.js +278 -29
  19. package/dist/cli.js.map +1 -1
  20. package/dist/cloud/lookup-activity.d.ts +16 -0
  21. package/dist/cloud/lookup-activity.d.ts.map +1 -0
  22. package/dist/cloud/lookup-activity.js +56 -0
  23. package/dist/cloud/lookup-activity.js.map +1 -0
  24. package/dist/cloud/nudge.d.ts.map +1 -1
  25. package/dist/cloud/nudge.js +3 -0
  26. package/dist/cloud/nudge.js.map +1 -1
  27. package/dist/cloud/onboarding.d.ts +237 -0
  28. package/dist/cloud/onboarding.d.ts.map +1 -0
  29. package/dist/cloud/onboarding.js +536 -0
  30. package/dist/cloud/onboarding.js.map +1 -0
  31. package/dist/cloud/pair.d.ts +76 -0
  32. package/dist/cloud/pair.d.ts.map +1 -0
  33. package/dist/cloud/pair.js +249 -0
  34. package/dist/cloud/pair.js.map +1 -0
  35. package/dist/cloud/workspace-sync.d.ts +10 -2
  36. package/dist/cloud/workspace-sync.d.ts.map +1 -1
  37. package/dist/cloud/workspace-sync.js +119 -7
  38. package/dist/cloud/workspace-sync.js.map +1 -1
  39. package/dist/cloud/workspace.d.ts +22 -1
  40. package/dist/cloud/workspace.d.ts.map +1 -1
  41. package/dist/cloud/workspace.js +16 -1
  42. package/dist/cloud/workspace.js.map +1 -1
  43. package/dist/graph/native.d.ts +2 -0
  44. package/dist/graph/native.d.ts.map +1 -1
  45. package/dist/graph/native.js +29 -4
  46. package/dist/graph/native.js.map +1 -1
  47. package/dist/hosts/claude-global.d.ts +14 -0
  48. package/dist/hosts/claude-global.d.ts.map +1 -1
  49. package/dist/hosts/claude-global.js +38 -3
  50. package/dist/hosts/claude-global.js.map +1 -1
  51. package/dist/init/install-record.d.ts +21 -0
  52. package/dist/init/install-record.d.ts.map +1 -0
  53. package/dist/init/install-record.js +144 -0
  54. package/dist/init/install-record.js.map +1 -0
  55. package/dist/init/plain-file.d.ts +11 -0
  56. package/dist/init/plain-file.d.ts.map +1 -0
  57. package/dist/init/plain-file.js +80 -0
  58. package/dist/init/plain-file.js.map +1 -0
  59. package/dist/mcp/brains.d.ts +72 -0
  60. package/dist/mcp/brains.d.ts.map +1 -0
  61. package/dist/mcp/brains.js +220 -0
  62. package/dist/mcp/brains.js.map +1 -0
  63. package/dist/mcp/server.d.ts +3 -1
  64. package/dist/mcp/server.d.ts.map +1 -1
  65. package/dist/mcp/server.js +40 -5
  66. package/dist/mcp/server.js.map +1 -1
  67. package/dist/mcp/tools.d.ts.map +1 -1
  68. package/dist/mcp/tools.js +7 -2
  69. package/dist/mcp/tools.js.map +1 -1
  70. package/dist/notes/cold-start.d.ts +30 -1
  71. package/dist/notes/cold-start.d.ts.map +1 -1
  72. package/dist/notes/cold-start.js +98 -19
  73. package/dist/notes/cold-start.js.map +1 -1
  74. package/dist/notes/every-repo.d.ts +18 -0
  75. package/dist/notes/every-repo.d.ts.map +1 -0
  76. package/dist/notes/every-repo.js +86 -0
  77. package/dist/notes/every-repo.js.map +1 -0
  78. package/dist/notes/guardrails.d.ts +8 -0
  79. package/dist/notes/guardrails.d.ts.map +1 -0
  80. package/dist/notes/guardrails.js +38 -0
  81. package/dist/notes/guardrails.js.map +1 -0
  82. package/dist/notes/lesson-index.d.ts +13 -0
  83. package/dist/notes/lesson-index.d.ts.map +1 -0
  84. package/dist/notes/lesson-index.js +135 -0
  85. package/dist/notes/lesson-index.js.map +1 -0
  86. package/dist/notes/linked-learnings.d.ts +8 -0
  87. package/dist/notes/linked-learnings.d.ts.map +1 -0
  88. package/dist/notes/linked-learnings.js +113 -0
  89. package/dist/notes/linked-learnings.js.map +1 -0
  90. package/dist/notes/replace.d.ts +14 -0
  91. package/dist/notes/replace.d.ts.map +1 -0
  92. package/dist/notes/replace.js +38 -0
  93. package/dist/notes/replace.js.map +1 -0
  94. package/dist/notes/repo-notes-dir.d.ts +2 -0
  95. package/dist/notes/repo-notes-dir.d.ts.map +1 -0
  96. package/dist/notes/repo-notes-dir.js +16 -0
  97. package/dist/notes/repo-notes-dir.js.map +1 -0
  98. package/dist/skills/anchors-cli.d.ts +33 -0
  99. package/dist/skills/anchors-cli.d.ts.map +1 -0
  100. package/dist/skills/anchors-cli.js +274 -0
  101. package/dist/skills/anchors-cli.js.map +1 -0
  102. package/dist/skills/anchors-git.d.ts +29 -0
  103. package/dist/skills/anchors-git.d.ts.map +1 -0
  104. package/dist/skills/anchors-git.js +241 -0
  105. package/dist/skills/anchors-git.js.map +1 -0
  106. package/dist/skills/anchors-wide.d.ts +25 -0
  107. package/dist/skills/anchors-wide.d.ts.map +1 -0
  108. package/dist/skills/anchors-wide.js +481 -0
  109. package/dist/skills/anchors-wide.js.map +1 -0
  110. package/dist/skills/anchors.d.ts +32 -0
  111. package/dist/skills/anchors.d.ts.map +1 -0
  112. package/dist/skills/anchors.js +485 -0
  113. package/dist/skills/anchors.js.map +1 -0
  114. package/dist/skills/check-result.d.ts +26 -0
  115. package/dist/skills/check-result.d.ts.map +1 -0
  116. package/dist/skills/check-result.js +46 -0
  117. package/dist/skills/check-result.js.map +1 -0
  118. package/dist/skills/codex-sandbox.d.ts +6 -0
  119. package/dist/skills/codex-sandbox.d.ts.map +1 -0
  120. package/dist/skills/codex-sandbox.js +55 -0
  121. package/dist/skills/codex-sandbox.js.map +1 -0
  122. package/dist/skills/compile-split.d.ts +57 -0
  123. package/dist/skills/compile-split.d.ts.map +1 -0
  124. package/dist/skills/compile-split.js +532 -0
  125. package/dist/skills/compile-split.js.map +1 -0
  126. package/dist/skills/compile-version.d.ts +37 -0
  127. package/dist/skills/compile-version.d.ts.map +1 -0
  128. package/dist/skills/compile-version.js +56 -0
  129. package/dist/skills/compile-version.js.map +1 -0
  130. package/dist/skills/compile-waits.d.ts +12 -0
  131. package/dist/skills/compile-waits.d.ts.map +1 -0
  132. package/dist/skills/compile-waits.js +52 -0
  133. package/dist/skills/compile-waits.js.map +1 -0
  134. package/dist/skills/compile-words.d.ts +82 -0
  135. package/dist/skills/compile-words.d.ts.map +1 -0
  136. package/dist/skills/compile-words.js +385 -0
  137. package/dist/skills/compile-words.js.map +1 -0
  138. package/dist/skills/compile.d.ts +35 -0
  139. package/dist/skills/compile.d.ts.map +1 -0
  140. package/dist/skills/compile.js +488 -0
  141. package/dist/skills/compile.js.map +1 -0
  142. package/dist/skills/credit-facts.d.ts +8 -0
  143. package/dist/skills/credit-facts.d.ts.map +1 -0
  144. package/dist/skills/credit-facts.js +32 -0
  145. package/dist/skills/credit-facts.js.map +1 -0
  146. package/dist/skills/directive-words.d.ts +11 -0
  147. package/dist/skills/directive-words.d.ts.map +1 -0
  148. package/dist/skills/directive-words.js +33 -0
  149. package/dist/skills/directive-words.js.map +1 -0
  150. package/dist/skills/fidelity.d.ts +42 -0
  151. package/dist/skills/fidelity.d.ts.map +1 -0
  152. package/dist/skills/fidelity.js +138 -0
  153. package/dist/skills/fidelity.js.map +1 -0
  154. package/dist/skills/forget-notice.d.ts +44 -0
  155. package/dist/skills/forget-notice.d.ts.map +1 -0
  156. package/dist/skills/forget-notice.js +131 -0
  157. package/dist/skills/forget-notice.js.map +1 -0
  158. package/dist/skills/found-skill.d.ts +35 -0
  159. package/dist/skills/found-skill.d.ts.map +1 -0
  160. package/dist/skills/found-skill.js +66 -0
  161. package/dist/skills/found-skill.js.map +1 -0
  162. package/dist/skills/front-version.d.ts +12 -0
  163. package/dist/skills/front-version.d.ts.map +1 -0
  164. package/dist/skills/front-version.js +87 -0
  165. package/dist/skills/front-version.js.map +1 -0
  166. package/dist/skills/host-facts.d.ts +51 -0
  167. package/dist/skills/host-facts.d.ts.map +1 -0
  168. package/dist/skills/host-facts.js +134 -0
  169. package/dist/skills/host-facts.js.map +1 -0
  170. package/dist/skills/ledger.d.ts +43 -0
  171. package/dist/skills/ledger.d.ts.map +1 -0
  172. package/dist/skills/ledger.js +336 -0
  173. package/dist/skills/ledger.js.map +1 -0
  174. package/dist/skills/lessons.d.ts +60 -0
  175. package/dist/skills/lessons.d.ts.map +1 -0
  176. package/dist/skills/lessons.js +396 -0
  177. package/dist/skills/lessons.js.map +1 -0
  178. package/dist/skills/offer-answers.d.ts +20 -0
  179. package/dist/skills/offer-answers.d.ts.map +1 -0
  180. package/dist/skills/offer-answers.js +51 -0
  181. package/dist/skills/offer-answers.js.map +1 -0
  182. package/dist/skills/own-folder.d.ts +9 -0
  183. package/dist/skills/own-folder.d.ts.map +1 -0
  184. package/dist/skills/own-folder.js +36 -0
  185. package/dist/skills/own-folder.js.map +1 -0
  186. package/dist/skills/person.d.ts +34 -0
  187. package/dist/skills/person.d.ts.map +1 -0
  188. package/dist/skills/person.js +102 -0
  189. package/dist/skills/person.js.map +1 -0
  190. package/dist/skills/probe-clean.d.ts +9 -0
  191. package/dist/skills/probe-clean.d.ts.map +1 -0
  192. package/dist/skills/probe-clean.js +48 -0
  193. package/dist/skills/probe-clean.js.map +1 -0
  194. package/dist/skills/probes.d.ts +26 -0
  195. package/dist/skills/probes.d.ts.map +1 -0
  196. package/dist/skills/probes.js +225 -0
  197. package/dist/skills/probes.js.map +1 -0
  198. package/dist/skills/recall.d.ts +119 -0
  199. package/dist/skills/recall.d.ts.map +1 -0
  200. package/dist/skills/recall.js +370 -0
  201. package/dist/skills/recall.js.map +1 -0
  202. package/dist/skills/receipts.d.ts +44 -0
  203. package/dist/skills/receipts.d.ts.map +1 -0
  204. package/dist/skills/receipts.js +223 -0
  205. package/dist/skills/receipts.js.map +1 -0
  206. package/dist/skills/run-checkout.d.ts +4 -0
  207. package/dist/skills/run-checkout.d.ts.map +1 -0
  208. package/dist/skills/run-checkout.js +37 -0
  209. package/dist/skills/run-checkout.js.map +1 -0
  210. package/dist/skills/runblock.d.ts +45 -0
  211. package/dist/skills/runblock.d.ts.map +1 -0
  212. package/dist/skills/runblock.js +222 -0
  213. package/dist/skills/runblock.js.map +1 -0
  214. package/dist/skills/save-parse.d.ts +42 -0
  215. package/dist/skills/save-parse.d.ts.map +1 -0
  216. package/dist/skills/save-parse.js +172 -0
  217. package/dist/skills/save-parse.js.map +1 -0
  218. package/dist/skills/save-store.d.ts +12 -0
  219. package/dist/skills/save-store.d.ts.map +1 -0
  220. package/dist/skills/save-store.js +22 -0
  221. package/dist/skills/save-store.js.map +1 -0
  222. package/dist/skills/settings.d.ts +38 -0
  223. package/dist/skills/settings.d.ts.map +1 -0
  224. package/dist/skills/settings.js +133 -0
  225. package/dist/skills/settings.js.map +1 -0
  226. package/dist/skills/skill-diff.d.ts +40 -0
  227. package/dist/skills/skill-diff.d.ts.map +1 -0
  228. package/dist/skills/skill-diff.js +191 -0
  229. package/dist/skills/skill-diff.js.map +1 -0
  230. package/dist/skills/skill-file.d.ts +24 -0
  231. package/dist/skills/skill-file.d.ts.map +1 -0
  232. package/dist/skills/skill-file.js +97 -0
  233. package/dist/skills/skill-file.js.map +1 -0
  234. package/dist/skills/skill-rebuild.d.ts +27 -0
  235. package/dist/skills/skill-rebuild.d.ts.map +1 -0
  236. package/dist/skills/skill-rebuild.js +85 -0
  237. package/dist/skills/skill-rebuild.js.map +1 -0
  238. package/dist/skills/skillmd.d.ts +17 -0
  239. package/dist/skills/skillmd.d.ts.map +1 -0
  240. package/dist/skills/skillmd.js +219 -0
  241. package/dist/skills/skillmd.js.map +1 -0
  242. package/dist/skills/skills.d.ts +2 -0
  243. package/dist/skills/skills.d.ts.map +1 -1
  244. package/dist/skills/skills.js +1 -1
  245. package/dist/skills/skills.js.map +1 -1
  246. package/dist/skills/staleness.d.ts +27 -0
  247. package/dist/skills/staleness.d.ts.map +1 -0
  248. package/dist/skills/staleness.js +178 -0
  249. package/dist/skills/staleness.js.map +1 -0
  250. package/dist/skills/state.d.ts +36 -0
  251. package/dist/skills/state.d.ts.map +1 -0
  252. package/dist/skills/state.js +259 -0
  253. package/dist/skills/state.js.map +1 -0
  254. package/dist/skills/store-fs.d.ts +77 -0
  255. package/dist/skills/store-fs.d.ts.map +1 -0
  256. package/dist/skills/store-fs.js +194 -0
  257. package/dist/skills/store-fs.js.map +1 -0
  258. package/dist/skills/store-held.d.ts +44 -0
  259. package/dist/skills/store-held.d.ts.map +1 -0
  260. package/dist/skills/store-held.js +147 -0
  261. package/dist/skills/store-held.js.map +1 -0
  262. package/dist/skills/store.d.ts +73 -0
  263. package/dist/skills/store.d.ts.map +1 -0
  264. package/dist/skills/store.js +279 -0
  265. package/dist/skills/store.js.map +1 -0
  266. package/dist/skills/validate.d.ts +11 -0
  267. package/dist/skills/validate.d.ts.map +1 -0
  268. package/dist/skills/validate.js +112 -0
  269. package/dist/skills/validate.js.map +1 -0
  270. package/dist/skills/versions-fs.d.ts +45 -0
  271. package/dist/skills/versions-fs.d.ts.map +1 -0
  272. package/dist/skills/versions-fs.js +234 -0
  273. package/dist/skills/versions-fs.js.map +1 -0
  274. package/dist/skills/versions.d.ts +56 -0
  275. package/dist/skills/versions.d.ts.map +1 -0
  276. package/dist/skills/versions.js +351 -0
  277. package/dist/skills/versions.js.map +1 -0
  278. package/dist/trace/checks.d.ts +63 -0
  279. package/dist/trace/checks.d.ts.map +1 -0
  280. package/dist/trace/checks.js +487 -0
  281. package/dist/trace/checks.js.map +1 -0
  282. package/dist/trace/claude.d.ts +124 -0
  283. package/dist/trace/claude.d.ts.map +1 -0
  284. package/dist/trace/claude.js +303 -0
  285. package/dist/trace/claude.js.map +1 -0
  286. package/dist/trace/codex-exec.d.ts +22 -0
  287. package/dist/trace/codex-exec.d.ts.map +1 -0
  288. package/dist/trace/codex-exec.js +129 -0
  289. package/dist/trace/codex-exec.js.map +1 -0
  290. package/dist/trace/codex-meta.d.ts +23 -0
  291. package/dist/trace/codex-meta.d.ts.map +1 -0
  292. package/dist/trace/codex-meta.js +112 -0
  293. package/dist/trace/codex-meta.js.map +1 -0
  294. package/dist/trace/codex.d.ts +33 -0
  295. package/dist/trace/codex.d.ts.map +1 -0
  296. package/dist/trace/codex.js +485 -0
  297. package/dist/trace/codex.js.map +1 -0
  298. package/dist/trace/cursor.d.ts +16 -0
  299. package/dist/trace/cursor.d.ts.map +1 -0
  300. package/dist/trace/cursor.js +133 -0
  301. package/dist/trace/cursor.js.map +1 -0
  302. package/dist/trace/dialect.d.ts +43 -0
  303. package/dist/trace/dialect.d.ts.map +1 -0
  304. package/dist/trace/dialect.js +95 -0
  305. package/dist/trace/dialect.js.map +1 -0
  306. package/dist/trace/epochs.d.ts +10 -0
  307. package/dist/trace/epochs.d.ts.map +1 -0
  308. package/dist/trace/epochs.js +16 -0
  309. package/dist/trace/epochs.js.map +1 -0
  310. package/dist/trace/failure.d.ts +15 -0
  311. package/dist/trace/failure.d.ts.map +1 -0
  312. package/dist/trace/failure.js +69 -0
  313. package/dist/trace/failure.js.map +1 -0
  314. package/dist/trace/gate-file.d.ts +71 -0
  315. package/dist/trace/gate-file.d.ts.map +1 -0
  316. package/dist/trace/gate-file.js +329 -0
  317. package/dist/trace/gate-file.js.map +1 -0
  318. package/dist/trace/guard-fast.d.ts +22 -0
  319. package/dist/trace/guard-fast.d.ts.map +1 -0
  320. package/dist/trace/guard-fast.js +213 -0
  321. package/dist/trace/guard-fast.js.map +1 -0
  322. package/dist/trace/housekeeping.d.ts +5 -0
  323. package/dist/trace/housekeeping.d.ts.map +1 -0
  324. package/dist/trace/housekeeping.js +93 -0
  325. package/dist/trace/housekeeping.js.map +1 -0
  326. package/dist/trace/jobs.d.ts +52 -0
  327. package/dist/trace/jobs.d.ts.map +1 -0
  328. package/dist/trace/jobs.js +182 -0
  329. package/dist/trace/jobs.js.map +1 -0
  330. package/dist/trace/known-repo.d.ts +3 -0
  331. package/dist/trace/known-repo.d.ts.map +1 -0
  332. package/dist/trace/known-repo.js +55 -0
  333. package/dist/trace/known-repo.js.map +1 -0
  334. package/dist/trace/pool.d.ts +40 -0
  335. package/dist/trace/pool.d.ts.map +1 -0
  336. package/dist/trace/pool.js +154 -0
  337. package/dist/trace/pool.js.map +1 -0
  338. package/dist/trace/repairs.d.ts +27 -0
  339. package/dist/trace/repairs.d.ts.map +1 -0
  340. package/dist/trace/repairs.js +303 -0
  341. package/dist/trace/repairs.js.map +1 -0
  342. package/dist/trace/run-calls.d.ts +82 -0
  343. package/dist/trace/run-calls.d.ts.map +1 -0
  344. package/dist/trace/run-calls.js +331 -0
  345. package/dist/trace/run-calls.js.map +1 -0
  346. package/dist/trace/run-join.d.ts +20 -0
  347. package/dist/trace/run-join.d.ts.map +1 -0
  348. package/dist/trace/run-join.js +99 -0
  349. package/dist/trace/run-join.js.map +1 -0
  350. package/dist/trace/run-sheets.d.ts +26 -0
  351. package/dist/trace/run-sheets.d.ts.map +1 -0
  352. package/dist/trace/run-sheets.js +145 -0
  353. package/dist/trace/run-sheets.js.map +1 -0
  354. package/dist/trace/run-turns.d.ts +24 -0
  355. package/dist/trace/run-turns.d.ts.map +1 -0
  356. package/dist/trace/run-turns.js +67 -0
  357. package/dist/trace/run-turns.js.map +1 -0
  358. package/dist/trace/run-verdict.d.ts +24 -0
  359. package/dist/trace/run-verdict.d.ts.map +1 -0
  360. package/dist/trace/run-verdict.js +176 -0
  361. package/dist/trace/run-verdict.js.map +1 -0
  362. package/dist/trace/runs.d.ts +54 -0
  363. package/dist/trace/runs.d.ts.map +1 -0
  364. package/dist/trace/runs.js +501 -0
  365. package/dist/trace/runs.js.map +1 -0
  366. package/dist/trace/skill-session.d.ts +64 -0
  367. package/dist/trace/skill-session.d.ts.map +1 -0
  368. package/dist/trace/skill-session.js +232 -0
  369. package/dist/trace/skill-session.js.map +1 -0
  370. package/dist/trace/tamper.d.ts +12 -0
  371. package/dist/trace/tamper.d.ts.map +1 -0
  372. package/dist/trace/tamper.js +405 -0
  373. package/dist/trace/tamper.js.map +1 -0
  374. package/dist/trace/typed.d.ts +30 -0
  375. package/dist/trace/typed.d.ts.map +1 -0
  376. package/dist/trace/typed.js +132 -0
  377. package/dist/trace/typed.js.map +1 -0
  378. package/dist/trace/wall-state.d.ts +86 -0
  379. package/dist/trace/wall-state.d.ts.map +1 -0
  380. package/dist/trace/wall-state.js +279 -0
  381. package/dist/trace/wall-state.js.map +1 -0
  382. package/dist/trace/walls.d.ts +40 -0
  383. package/dist/trace/walls.d.ts.map +1 -0
  384. package/dist/trace/walls.js +318 -0
  385. package/dist/trace/walls.js.map +1 -0
  386. package/dist/vendor/tree-sitter-swift/LICENSE +21 -0
  387. package/dist/vendor/tree-sitter-swift/node-types.json +30694 -0
  388. package/dist/vendor/tree-sitter-swift/prebuilds/darwin-arm64/tree-sitter-swift.node +0 -0
  389. package/dist/vendor/tree-sitter-swift/prebuilds/darwin-x64/tree-sitter-swift.node +0 -0
  390. package/dist/vendor/tree-sitter-swift/prebuilds/linux-arm64/tree-sitter-swift.node +0 -0
  391. package/dist/vendor/tree-sitter-swift/prebuilds/linux-x64/tree-sitter-swift.node +0 -0
  392. package/dist/vendor/tree-sitter-swift/prebuilds/win32-arm64/tree-sitter-swift.node +0 -0
  393. package/dist/vendor/tree-sitter-swift/prebuilds/win32-x64/tree-sitter-swift.node +0 -0
  394. package/package.json +6 -3
  395. package/scripts/stamp-telemetry-key.mjs +8 -5
  396. package/scripts/vendor-grammars.mjs +35 -0
@@ -0,0 +1,33 @@
1
+ /**
2
+ * What every skills directive an agent reads opens with (D88, D101): who it
3
+ * is from, and the person's own words it answers.
4
+ *
5
+ * An agent follows hook text it can trust and refuses the rest as prompt
6
+ * injection. Trusted text says who it is from, ties itself to what the person
7
+ * asked, gives the reason, never tells the agent to skip asking the person,
8
+ * and never claims an approval it can't show. These are the shared pieces.
9
+ *
10
+ * The person's words are quoted in the hook output only, never written to
11
+ * disk (design 0 rule 6): one line, at most 120 characters, through
12
+ * `flatLine`, with its double quotes turned to single ones, so a quote can
13
+ * neither close early nor open a `[trail]` line of its own.
14
+ */
15
+ import { flatLine } from '../notes/flatten.js';
16
+ /** The sentence a directive opens with, after its `[trail]` marker. */
17
+ export const FROM_TRAIL = 'From Trail, the tool this person installed to keep commands that worked as skills.';
18
+ /** The longest quote of the person's words a directive carries. */
19
+ export const QUOTE_MAX = 120;
20
+ /** The person's words as one quotable line: '' when there are none. */
21
+ export function quoteOf(typed) {
22
+ return flatLine(typed, QUOTE_MAX).replace(/"/g, "'");
23
+ }
24
+ /** `They typed: "save this as a skill".`, or '' when there are no words to quote. */
25
+ export function typedWords(typed) {
26
+ const q = quoteOf(typed);
27
+ return q ? `They typed: "${q}".` : '';
28
+ }
29
+ /** `[trail] From Trail, ... They typed: "...". <rest>`: the opening, the quote when there is one, then the rest. */
30
+ export function directive(typed, rest) {
31
+ return ['[trail]', FROM_TRAIL, typedWords(typed), rest].filter(Boolean).join(' ');
32
+ }
33
+ //# sourceMappingURL=directive-words.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"directive-words.js","sourceRoot":"","sources":["../../src/skills/directive-words.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE/C,uEAAuE;AACvE,MAAM,CAAC,MAAM,UAAU,GAAG,oFAAoF,CAAC;AAE/G,mEAAmE;AACnE,MAAM,CAAC,MAAM,SAAS,GAAG,GAAG,CAAC;AAE7B,uEAAuE;AACvE,MAAM,UAAU,OAAO,CAAC,KAAc;IACpC,OAAO,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACvD,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,UAAU,CAAC,KAAc;IACvC,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IACzB,OAAO,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;AACxC,CAAC;AAED,oHAAoH;AACpH,MAAM,UAAU,SAAS,CAAC,KAAc,EAAE,IAAY;IACpD,OAAO,CAAC,SAAS,EAAE,UAAU,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACpF,CAAC"}
@@ -0,0 +1,42 @@
1
+ import type { RunCall, SkillInjection } from '../trace/types.js';
2
+ import type { FidelityCounts, ParsedSkill } from './types.js';
3
+ /** after: the last skill step matched by a call before it (0: before step 1). id: the call's tool_use id. */
4
+ export interface ExtraStep {
5
+ callIx: number;
6
+ after: number;
7
+ sha: string;
8
+ id: string;
9
+ }
10
+ /** callIx and id: the passing call that did step `step` another way. */
11
+ export interface ChangedStep {
12
+ step: number;
13
+ callIx: number;
14
+ id: string;
15
+ }
16
+ export interface Fidelity {
17
+ ran: number[];
18
+ missing: number[];
19
+ extra: ExtraStep[];
20
+ changed: ChangedStep[];
21
+ }
22
+ /** Where the run was: the checkout's key (else the key of the calls that ran its steps), and the paths extraKey puts back. */
23
+ export interface FidelityWhere {
24
+ repoKey?: string | null;
25
+ repoRoot?: string;
26
+ home?: string;
27
+ }
28
+ /**
29
+ * R10: the one key for an extra step, at the flush and in planFold. 8 hex of sha256 of the call's stored text with repo
30
+ * and home paths put back (`where`), the filled values put back as `{name}`, normalised: the same command in two
31
+ * releases of two versions gives one key.
32
+ */
33
+ export declare function extraKey(call: RunCall, params: Record<string, string>, where?: {
34
+ repoRoot?: string;
35
+ home?: string;
36
+ }): string;
37
+ /** A command's program key and verb: `npm publish`, `git push` (the first word after the program that isn't a flag). */
38
+ export declare function programVerb(cmd: string): string | null;
39
+ /** 4.1. `inj` gives the filled params (and `at`, as credit reads it); `calls` are the use's run sheet calls. Never throws. */
40
+ export declare function fidelityOf(skill: Pick<ParsedSkill, 'steps' | 'check' | 'params'>, inj: Pick<SkillInjection, 'params' | 'steps'> & Partial<Pick<SkillInjection, 'at' | 'check' | 'handed'>>, calls: RunCall[], where?: FidelityWhere): Fidelity;
41
+ export declare function fidelityCounts(f: Fidelity): FidelityCounts;
42
+ //# sourceMappingURL=fidelity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fidelity.d.ts","sourceRoot":"","sources":["../../src/skills/fidelity.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAO9D,6GAA6G;AAC7G,MAAM,WAAW,SAAS;IAAG,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE;AACrF,wEAAwE;AACxE,MAAM,WAAW,WAAW;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE;AACzE,MAAM,WAAW,QAAQ;IAAG,GAAG,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,SAAS,EAAE,CAAC;IAAC,OAAO,EAAE,WAAW,EAAE,CAAA;CAAE;AAE1G,8HAA8H;AAC9H,MAAM,WAAW,aAAa;IAAG,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE;AAiB5F;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,KAAK,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAG5H;AAED,wHAAwH;AACxH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAatD;AAID,8HAA8H;AAC9H,wBAAgB,UAAU,CACxB,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,OAAO,GAAG,OAAO,GAAG,QAAQ,CAAC,EACtD,GAAG,EAAE,IAAI,CAAC,cAAc,EAAE,QAAQ,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,GAAG,OAAO,GAAG,QAAQ,CAAC,CAAC,EACxG,KAAK,EAAE,OAAO,EAAE,EAChB,KAAK,GAAE,aAAkB,GACxB,QAAQ,CAiEV;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,QAAQ,GAAG,cAAc,CAE1D"}
@@ -0,0 +1,138 @@
1
+ /**
2
+ * Next-run fidelity (phase 2 design 4.1, spec 24, P2, P3): what a run a
3
+ * skill's block drove did against the skill's steps. Which steps ran (the
4
+ * same set credit gives), which failed and were then done another way that
5
+ * passed, which passing steps of the job the skill lacks, and which steps
6
+ * neither ran nor failed.
7
+ *
8
+ * Computed at each credit flush from the calls and filled params credit uses,
9
+ * so a use and its fidelity agree. Counts, step numbers and 8-hex shas of a
10
+ * compiled command only reach the use line: never a command or a prompt.
11
+ * Fidelity never changes a use's outcome or a skill's status (P3).
12
+ *
13
+ * Pure: no disk, no clock.
14
+ */
15
+ import { createHash } from 'node:crypto';
16
+ import { callText } from '../trace/checks.js';
17
+ import { envPrefix, normalizeCommand, programOf, relativizePaths } from '../trace/shell.js';
18
+ import { ranAs } from './ledger.js';
19
+ import { fillParams } from './params.js';
20
+ import { doesLess, onlyRehearsed } from './ran-less.js';
21
+ /** Credit's slack before a block's `at` (ledger.ts SLACK_MS): the same calls count for both. */
22
+ const SLACK_MS = 5000;
23
+ const escapeRe = (t) => t.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
24
+ /** Filled values of 2+ characters back to `{name}`, longest first, never inside a longer word or number. */
25
+ function putBack(text, params) {
26
+ const pairs = Object.entries(params ?? {})
27
+ .filter(([, v]) => typeof v === 'string' && v.length >= 2 && !v.startsWith('$('))
28
+ .sort((a, b) => b[1].length - a[1].length);
29
+ let out = text;
30
+ for (const [name, v] of pairs)
31
+ out = out.replace(new RegExp(`(?<![0-9A-Za-z_.])v?${escapeRe(v)}(?![0-9A-Za-z_])`, 'g'), (m) => (m.startsWith('v') && !v.startsWith('v') ? `v{${name}}` : `{${name}}`));
32
+ return out;
33
+ }
34
+ /**
35
+ * R10: the one key for an extra step, at the flush and in planFold. 8 hex of sha256 of the call's stored text with repo
36
+ * and home paths put back (`where`), the filled values put back as `{name}`, normalised: the same command in two
37
+ * releases of two versions gives one key.
38
+ */
39
+ export function extraKey(call, params, where) {
40
+ const rel = relativizePaths(callText(call), where?.repoRoot ?? '', where?.home ?? '');
41
+ return createHash('sha256').update(normalizeCommand(putBack(rel, params))).digest('hex').slice(0, 8);
42
+ }
43
+ /** A command's program key and verb: `npm publish`, `git push` (the first word after the program that isn't a flag). */
44
+ export function programVerb(cmd) {
45
+ const prog = programOf(cmd);
46
+ if (!prog)
47
+ return null;
48
+ const words = envPrefix(normalizeCommand(cmd).replace(/^\(+/, '')).rest.split(/\s+/);
49
+ const at = words.findIndex((w) => w === prog || w.endsWith(`/${prog}`));
50
+ if (at < 0)
51
+ return prog.toLowerCase();
52
+ for (let i = at + 1; i < words.length; i++) {
53
+ const w = words[i];
54
+ if (prog === 'git' && /^-[Cc]$/.test(w)) {
55
+ i++;
56
+ continue;
57
+ }
58
+ if (w.startsWith('-'))
59
+ continue;
60
+ return `${prog.toLowerCase()} ${w}`;
61
+ }
62
+ return prog.toLowerCase();
63
+ }
64
+ const steps1 = (n) => Array.from({ length: n }, (_, i) => i + 1);
65
+ /** 4.1. `inj` gives the filled params (and `at`, as credit reads it); `calls` are the use's run sheet calls. Never throws. */
66
+ export function fidelityOf(skill, inj, calls, where = {}) {
67
+ const count = Array.isArray(skill?.steps) ? skill.steps.length : 0;
68
+ try {
69
+ const params = inj.params ?? {};
70
+ const steps = Array.isArray(inj.steps) && inj.steps.length === count ? inj.steps : skill.steps.map((s) => fillParams(s.cmd, params));
71
+ const check = inj.check ?? (skill.check ? fillParams(skill.check, params) : null);
72
+ const from = inj.at ? Date.parse(inj.at) : NaN;
73
+ const list = calls
74
+ .map((c, ix) => ({ c, ix }))
75
+ .filter(({ c }) => typeof c.tool !== 'string' && (Number.isNaN(from) || Date.parse(c.at) >= from - SLACK_MS));
76
+ // Credit's own reading: each call goes to the first step it matches; a step's last outcome wins.
77
+ const text = list.map(({ c }) => callText(c));
78
+ const match = text.map((t) => (t ? steps.findIndex((s) => ranAs(s, t, params)) : -1));
79
+ const last = new Map();
80
+ const firstFail = new Map();
81
+ // D137: as credit reads it, a gated step handed to the person ran (theirs to run), and its denied call is no failure.
82
+ const handed = new Set((inj.handed ?? []).map((h) => h.n).filter((n) => Number.isInteger(n) && n >= 1 && n <= count));
83
+ for (const n of handed)
84
+ last.set(n, true);
85
+ match.forEach((i, p) => {
86
+ if (i < 0)
87
+ return;
88
+ const ok = !list[p].c.failed || handed.has(i + 1);
89
+ last.set(i + 1, ok);
90
+ if (!ok && !firstFail.has(i + 1))
91
+ firstFail.set(i + 1, p);
92
+ });
93
+ const ran = [...last].filter(([, ok]) => ok).map(([n]) => n).sort((a, b) => a - b);
94
+ const key = where.repoKey ?? list.find((_, p) => match[p] >= 0)?.c.key ?? null;
95
+ const inside = (c) => c.cwd !== null && (key === null || c.key === key);
96
+ const isCheck = (t) => !!check && ranAs(check, t, params);
97
+ // Passed: not failed, and a result came (its line, or a PostToolUse mark). A call whose result never came
98
+ // (killed, still running, a host that never wrote it) never passed, whatever `failed` starts as (review).
99
+ const passed = (c) => !c.failed && (c.src?.result != null || c.fromMark === true);
100
+ const loose = (p) => {
101
+ const c = list[p].c;
102
+ return passed(c) && c.kind === 'step' && match[p] < 0 && !!text[p] && inside(c) && !isCheck(text[p]) && !onlyRehearsed(text[p]);
103
+ };
104
+ // A step that failed, then a passing call of the same program and verb that is no step: done another way.
105
+ const used = new Set();
106
+ const changed = [];
107
+ for (const [n, f] of [...firstFail].sort((a, b) => a[0] - b[0])) {
108
+ const verb = programVerb(steps[n - 1]);
109
+ if (!verb)
110
+ continue;
111
+ for (let p = f + 1; p < list.length; p++) {
112
+ if (used.has(p) || !loose(p) || programVerb(text[p]) !== verb || doesLess(steps[n - 1], text[p]))
113
+ continue;
114
+ used.add(p);
115
+ changed.push({ step: n, callIx: list[p].ix, id: list[p].c.id });
116
+ break;
117
+ }
118
+ }
119
+ const extra = [];
120
+ let after = 0;
121
+ list.forEach(({ c, ix }, p) => {
122
+ if (!used.has(p) && loose(p))
123
+ extra.push({ callIx: ix, after, sha: extraKey(c, params, where), id: c.id });
124
+ if (match[p] >= 0)
125
+ after = Math.max(after, match[p] + 1);
126
+ });
127
+ const isTheCheck = (n) => !!check && normalizeCommand(steps[n - 1]) === normalizeCommand(check);
128
+ const missing = steps1(count).filter((n) => !last.has(n) && !isTheCheck(n));
129
+ return { ran, missing, extra, changed };
130
+ }
131
+ catch {
132
+ return { ran: [], missing: steps1(count), extra: [], changed: [] };
133
+ }
134
+ }
135
+ export function fidelityCounts(f) {
136
+ return { ran: f.ran.length, missing: f.missing.length, extra: f.extra.length, changed: f.changed.length };
137
+ }
138
+ //# sourceMappingURL=fidelity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fidelity.js","sourceRoot":"","sources":["../../src/skills/fidelity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * D117 (2): `trail forget` stays open to agents (1a: turning things off is open
3
+ * to anyone; the harm is bounded, it only removes). So the person still hears
4
+ * of it: when an agent runs it, the CLI notes what was dropped and how to bring
5
+ * it back in `~/.trail/state/forgot.jsonl`, and the next Stop, in any session,
6
+ * tells the person once, in one line. A Stop that already blocks (an offer), or
7
+ * a turn a block continued, leaves it for the next one.
8
+ *
9
+ * The person's own forget at their terminal (or from their own script) notes
10
+ * nothing: they know what they did. Never "memory", no em dashes.
11
+ */
12
+ import type { Host } from '../trace/host.js';
13
+ import type { HookOut } from './types.js';
14
+ export type DroppedKind = 'skill' | 'lesson' | 'learning' | 'guardrail';
15
+ export interface Dropped {
16
+ at: string;
17
+ what: DroppedKind;
18
+ name: string;
19
+ back: string;
20
+ }
21
+ export declare const forgotPath: (env: NodeJS.ProcessEnv) => string;
22
+ /** The CLI half: an agent's forget that worked. Never throws (the forget itself already happened). */
23
+ export declare function noteAgentForget(d: Omit<Dropped, 'at'>, env: NodeJS.ProcessEnv, now: Date): void;
24
+ /**
25
+ * The Stop half: the notes, taken once. The file is renamed first, so two Stops at the same instant can't both say
26
+ * it; a link in its place is removed, never followed.
27
+ */
28
+ export declare function takeForgets(env: NodeJS.ProcessEnv, now: Date): Dropped[];
29
+ /** One line for the person: `trail: an agent ran trail forget: the skill x (bring it back: ...); ...`. */
30
+ export declare function forgetLine(ds: Dropped[]): string;
31
+ /**
32
+ * The Stop's answer with the notes added: a notice where the host shows one (joined to the skills part's), else a
33
+ * block whose reason asks the agent to tell the person once. `out` is the skills part's answer; a block there, or a
34
+ * continued turn, leaves the notes for the next Stop.
35
+ */
36
+ export declare function withForgetNotice(out: HookOut, opts: {
37
+ env: NodeJS.ProcessEnv;
38
+ now: Date;
39
+ active: boolean;
40
+ stopNotice: boolean;
41
+ }): HookOut;
42
+ /** The Stop handler's call (skills on or off): Trail's clock and the host's facts for this env. */
43
+ export declare function forgetNoticeAtStop(out: HookOut, env: NodeJS.ProcessEnv, host?: Host): HookOut;
44
+ //# sourceMappingURL=forget-notice.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forget-notice.d.ts","sourceRoot":"","sources":["../../src/skills/forget-notice.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAK7C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAI1C,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,GAAG,WAAW,CAAC;AACxE,MAAM,WAAW,OAAO;IAAG,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE;AAStF,eAAO,MAAM,UAAU,GAAI,KAAK,MAAM,CAAC,UAAU,KAAG,MAAiD,CAAC;AAEtG,sGAAsG;AACtG,wBAAgB,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,UAAU,EAAE,GAAG,EAAE,IAAI,GAAG,IAAI,CAS/F;AA8BD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,EAAE,GAAG,EAAE,IAAI,GAAG,OAAO,EAAE,CA4BxE;AAID,0GAA0G;AAC1G,wBAAgB,UAAU,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,MAAM,CAIhD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IAAC,GAAG,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CASzI;AAED,mGAAmG;AACnG,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,OAAO,CAE7F"}
@@ -0,0 +1,131 @@
1
+ import { closeSync, constants, fstatSync, lstatSync, openSync, readSync, renameSync, rmSync } from 'node:fs';
2
+ import { flatLine } from '../notes/flatten.js';
3
+ import { appendPrivateLine, trailPath } from '../util/private-fs.js';
4
+ import { FROM_TRAIL } from './directive-words.js';
5
+ import { hostFacts } from './host-facts.js';
6
+ import { trailNow } from './settings.js';
7
+ const KINDS = new Set(['skill', 'lesson', 'learning', 'guardrail']);
8
+ /** A note older than a day is dropped unsaid: the person has moved on, and a stale line would only confuse. */
9
+ const MAX_AGE_MS = 24 * 60 * 60 * 1000;
10
+ const MAX_SHOWN = 3;
11
+ /** The file is never read past this, and no note is added once it is this big. */
12
+ const MAX_BYTES = 16 * 1024;
13
+ export const forgotPath = (env) => trailPath(env, 'state', 'forgot.jsonl');
14
+ /** The CLI half: an agent's forget that worked. Never throws (the forget itself already happened). */
15
+ export function noteAgentForget(d, env, now) {
16
+ try {
17
+ const path = forgotPath(env);
18
+ try {
19
+ if (lstatSync(path).size >= MAX_BYTES)
20
+ return;
21
+ }
22
+ catch { /* not there yet */ }
23
+ const entry = { at: now.toISOString(), what: d.what, name: flatLine(d.name, 60), back: flatLine(d.back, 200) };
24
+ appendPrivateLine(path, JSON.stringify(entry));
25
+ }
26
+ catch { /* the line is a courtesy; the forget stands */ }
27
+ }
28
+ function valid(v, now) {
29
+ if (!v || typeof v !== 'object')
30
+ return false;
31
+ const d = v;
32
+ if (typeof d.what !== 'string' || !KINDS.has(d.what) || typeof d.name !== 'string' || !d.name || typeof d.back !== 'string' || !d.back)
33
+ return false;
34
+ const t = typeof d.at === 'string' ? Date.parse(d.at) : Number.NaN;
35
+ return Number.isFinite(t) && now.getTime() - t <= MAX_AGE_MS && t - now.getTime() <= 60_000;
36
+ }
37
+ /** Reads at most MAX_BYTES of a regular file, never through a link or into a FIFO. */
38
+ function readSmall(path) {
39
+ let fd;
40
+ try {
41
+ fd = openSync(path, constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0) | (constants.O_NONBLOCK ?? 0));
42
+ }
43
+ catch {
44
+ return null;
45
+ }
46
+ try {
47
+ if (!fstatSync(fd).isFile())
48
+ return null;
49
+ const buf = Buffer.alloc(MAX_BYTES);
50
+ const n = readSync(fd, buf, 0, MAX_BYTES, 0);
51
+ return buf.subarray(0, n).toString('utf8');
52
+ }
53
+ catch {
54
+ return null;
55
+ }
56
+ finally {
57
+ closeSync(fd);
58
+ }
59
+ }
60
+ /**
61
+ * The Stop half: the notes, taken once. The file is renamed first, so two Stops at the same instant can't both say
62
+ * it; a link in its place is removed, never followed.
63
+ */
64
+ export function takeForgets(env, now) {
65
+ const path = forgotPath(env);
66
+ try {
67
+ if (lstatSync(path).isSymbolicLink()) {
68
+ rmSync(path, { force: true });
69
+ return [];
70
+ }
71
+ }
72
+ catch {
73
+ return [];
74
+ }
75
+ const claimed = `${path}.${process.pid}.${Math.random().toString(16).slice(2, 8)}.taken`;
76
+ try {
77
+ renameSync(path, claimed);
78
+ }
79
+ catch {
80
+ return [];
81
+ }
82
+ const text = readSmall(claimed);
83
+ try {
84
+ rmSync(claimed, { force: true });
85
+ }
86
+ catch { /* left for housekeeping */ }
87
+ if (text === null)
88
+ return [];
89
+ const out = [];
90
+ for (const line of text.split('\n')) {
91
+ if (!line.trim())
92
+ continue;
93
+ try {
94
+ const v = JSON.parse(line);
95
+ if (valid(v, now))
96
+ out.push(v);
97
+ }
98
+ catch { /* a broken line */ }
99
+ }
100
+ return out;
101
+ }
102
+ const WHAT = { skill: 'the skill', lesson: 'the lesson', learning: 'the learning', guardrail: 'the guardrail' };
103
+ /** One line for the person: `trail: an agent ran trail forget: the skill x (bring it back: ...); ...`. */
104
+ export function forgetLine(ds) {
105
+ const shown = ds.slice(-MAX_SHOWN).map((d) => `${WHAT[d.what] ?? 'the item'} ${flatLine(d.name, 60)} (bring it back: ${flatLine(d.back, 200)})`);
106
+ const more = ds.length > MAX_SHOWN ? ` and ${ds.length - MAX_SHOWN} more` : '';
107
+ return flatLine(`trail: an agent ran trail forget: ${shown.join('; ')}${more}`, 900);
108
+ }
109
+ /**
110
+ * The Stop's answer with the notes added: a notice where the host shows one (joined to the skills part's), else a
111
+ * block whose reason asks the agent to tell the person once. `out` is the skills part's answer; a block there, or a
112
+ * continued turn, leaves the notes for the next Stop.
113
+ */
114
+ export function withForgetNotice(out, opts) {
115
+ if (out.block || opts.active)
116
+ return out;
117
+ const ds = takeForgets(opts.env, opts.now);
118
+ if (!ds.length)
119
+ return out;
120
+ const line = forgetLine(ds);
121
+ if (opts.stopNotice)
122
+ return { ...out, notice: out.notice ? `${out.notice}\n${line}` : line };
123
+ const block = `[trail] ${FROM_TRAIL} An agent ran trail forget, which only removes, so Trail tells the person what went and how to bring it back. `
124
+ + `So they know, tell them once: "${line.replace(/^trail: /, '').replace(/"/g, "'")}"`;
125
+ return { block };
126
+ }
127
+ /** The Stop handler's call (skills on or off): Trail's clock and the host's facts for this env. */
128
+ export function forgetNoticeAtStop(out, env, host) {
129
+ return withForgetNotice(out, { env, now: trailNow(env), active: false, stopNotice: hostFacts(env, host).stopNotice });
130
+ }
131
+ //# sourceMappingURL=forget-notice.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forget-notice.js","sourceRoot":"","sources":["../../src/skills/forget-notice.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ export interface FoundSkill {
2
+ name: string;
3
+ title: string;
4
+ /** `team`: written into the repo. `you`: kept on this machine. */
5
+ for: "team" | "you";
6
+ /** What to do, in order: 2 to 8 commands or actions. */
7
+ steps: string[];
8
+ /** Sessions the cited quotes were found in, newest first. */
9
+ sessions: string[];
10
+ quotes: string[];
11
+ }
12
+ /** A skill's SKILL.md: where it is, and whether this run wrote it (`false`: one of that name was already there). */
13
+ export interface SavedSkill {
14
+ skill: FoundSkill;
15
+ path: string;
16
+ created: boolean;
17
+ }
18
+ /** SKILL.md for a found skill: the frontmatter every skill has, then its steps as a numbered list. */
19
+ export declare function renderFoundSkill(s: FoundSkill): string;
20
+ /**
21
+ * The lines init prints for found skills it didn't write because one of that
22
+ * name already exists (in the repo or on this machine), one per skill.
23
+ */
24
+ export declare function skippedSkillLines(repo: string, found: FoundSkill[], written: SavedSkill[]): string[];
25
+ /**
26
+ * Write the skill, and return the path of its SKILL.md and whether this call
27
+ * wrote it. A skill of that name the repo or this machine already has is left
28
+ * as it is: its path comes back with `created: false`, and it isn't ours to
29
+ * report or send anywhere.
30
+ */
31
+ export declare function saveFoundSkill(repo: string, s: FoundSkill): {
32
+ path: string;
33
+ created: boolean;
34
+ };
35
+ //# sourceMappingURL=found-skill.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"found-skill.d.ts","sourceRoot":"","sources":["../../src/skills/found-skill.ts"],"names":[],"mappings":"AAcA,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,kEAAkE;IAClE,GAAG,EAAE,MAAM,GAAG,KAAK,CAAC;IACpB,wDAAwD;IACxD,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,6DAA6D;IAC7D,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,oHAAoH;AACpH,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,UAAU,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,sGAAsG;AACtG,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,UAAU,GAAG,MAAM,CAItD;AAYD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,MAAM,EAAE,CAQpG;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,UAAU,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAY9F"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * A skill found in past sessions: a procedure the person walked Claude through
3
+ * in two or more of them, written to a SKILL.md at `trail init` so the next
4
+ * session can follow it without being walked through it again.
5
+ *
6
+ * The team's go in the repo's `.claude/skills/`, where Claude Code loads them
7
+ * for everyone who pulls; the person's own go in this repo's skills under
8
+ * ~/.trail. A skill of that name that already exists is never touched.
9
+ */
10
+ import { existsSync, mkdirSync, writeFileSync } from "node:fs";
11
+ import { join } from "node:path";
12
+ import { ensureRepoHome } from "../notes/home.js";
13
+ import { skillDirs, skillName } from "./skills.js";
14
+ /** SKILL.md for a found skill: the frontmatter every skill has, then its steps as a numbered list. */
15
+ export function renderFoundSkill(s) {
16
+ const name = skillName(s.name);
17
+ const steps = s.steps.map((step, i) => `${i + 1}. ${step}`).join("\n");
18
+ return `---\nname: ${name}\ndescription: ${JSON.stringify(s.title)}\nversion: 1\n---\n\n# ${s.title}\n\n${steps}\n`;
19
+ }
20
+ /** The SKILL.md a skill of this name already has, in the repo or on this machine; null when there's none. */
21
+ function existingSkillFile(repo, name) {
22
+ const dirs = skillDirs(repo);
23
+ for (const d of [dirs.repo, dirs.home]) {
24
+ const there = join(d, name, "SKILL.md");
25
+ if (existsSync(there))
26
+ return there;
27
+ }
28
+ return null;
29
+ }
30
+ /**
31
+ * The lines init prints for found skills it didn't write because one of that
32
+ * name already exists (in the repo or on this machine), one per skill.
33
+ */
34
+ export function skippedSkillLines(repo, found, written) {
35
+ const out = [];
36
+ for (const skill of found) {
37
+ const name = skillName(skill.name);
38
+ if (!name || written.some((w) => w.skill === skill) || !existingSkillFile(repo, name))
39
+ continue;
40
+ out.push(`· Skipped skill ${name}: one already exists.`);
41
+ }
42
+ return out;
43
+ }
44
+ /**
45
+ * Write the skill, and return the path of its SKILL.md and whether this call
46
+ * wrote it. A skill of that name the repo or this machine already has is left
47
+ * as it is: its path comes back with `created: false`, and it isn't ours to
48
+ * report or send anywhere.
49
+ */
50
+ export function saveFoundSkill(repo, s) {
51
+ const name = skillName(s.name);
52
+ if (!name)
53
+ throw new Error("a skill needs a name");
54
+ const dirs = skillDirs(repo);
55
+ const there = existingSkillFile(repo, name);
56
+ if (there)
57
+ return { path: there, created: false };
58
+ if (s.for === "you")
59
+ ensureRepoHome(repo);
60
+ const dir = join(s.for === "you" ? dirs.home : dirs.repo, name);
61
+ mkdirSync(dir, { recursive: true });
62
+ const file = join(dir, "SKILL.md");
63
+ writeFileSync(file, renderFoundSkill(s));
64
+ return { path: file, created: true };
65
+ }
66
+ //# sourceMappingURL=found-skill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"found-skill.js","sourceRoot":"","sources":["../../src/skills/found-skill.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /** The version `data` (a SKILL.md's front matter) says: `metadata.version`, else the old top-level `version`, else 1. */
2
+ export declare function versionOf(data: Record<string, unknown>): number;
3
+ /**
4
+ * The front matter `lines` (without the `---` fences) with `metadata.version`
5
+ * set to `version`, and any old top-level `version` gone. With `mark`, a
6
+ * metadata without a `trail` key gets `trail: "<mark>"`; one it already has is
7
+ * kept. A block `metadata:` gets the lines replaced or added at its own
8
+ * indent; a flow one (`metadata: { … }`) is written out as a block, its other
9
+ * values kept as strings; none at all gets one.
10
+ */
11
+ export declare function withMetadataVersion(lines: string[], version: number, mark?: string): string[];
12
+ //# sourceMappingURL=front-version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"front-version.d.ts","sourceRoot":"","sources":["../../src/skills/front-version.ts"],"names":[],"mappings":"AAWA,yHAAyH;AACzH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAQ/D;AAeD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAuC7F"}