@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,405 @@
1
+ /**
2
+ * The tamper check (design 4.1): the first call that writes Trail's files or
3
+ * the host's transcripts marks the session, and it can never save a skill.
4
+ *
5
+ * What counts is a write, not a mention. On this machine's real sessions a
6
+ * rule that fired on any Bash call naming `~/.trail` or `.claude/projects/`
7
+ * marked about a quarter of them: heredocs that only quoted the path,
8
+ * scripts that read transcripts, and Claude Code writing its own memory files
9
+ * under `.claude/projects/<p>/memory/`. So a Bash call tampers when:
10
+ *
11
+ * - a redirect (`>`, `>>`, `>|`, `&>`) targets a protected path;
12
+ * - a program that writes its arguments (tee, cp, mv, rm, touch, sed -i, ...)
13
+ * or an output file (`--output`, `curl -o`) is given one, after following the call's `cd`s from the folder its shell
14
+ * was already in;
15
+ * - an interpreter's own code (a heredoc body, `-c`, `-e`) passes one to a
16
+ * call that writes: as a literal, through a variable set to one, or as a
17
+ * home folder joined with `.trail`;
18
+ * - it runs Trail's hook script by hand.
19
+ *
20
+ * Protected: the Trail home, the session's transcript, and everything under
21
+ * `~/.claude/projects/` except a project's `memory/` folder. A script that
22
+ * builds the path some other way gets through; the check raises the bar, it
23
+ * does not close it (0 rule 13).
24
+ */
25
+ import { realpathSync } from 'node:fs';
26
+ import { homedir } from 'node:os';
27
+ import { basename, dirname, isAbsolute, join, relative, resolve, sep } from 'node:path';
28
+ import { EDIT_TOOLS, effectiveFolder, INTERPRETERS } from './run-calls.js';
29
+ import { gitWriteTargets } from './tamper-git.js';
30
+ import { base, OPEN_KW, scan, unquote, words } from './shell-scan.js';
31
+ import { codeWrites, programCode, SHELLS } from './tamper-code.js';
32
+ import { bareCommand, onlyTrail, programOf, simpleCommands } from './shell.js';
33
+ import { agentGuard } from '../skills/risk.js';
34
+ const HOOK_SCRIPT = /(?:trail|graft)-hooks\.cjs\b/;
35
+ /** Every form the PreToolUse agent guard reads as Trail's hook scripts run by hand (globs, helpers paths, the package's hook modules). */
36
+ const ranHookScript = (raw) => agentGuard(raw)?.hit === 'hook-script';
37
+ /** Windows paths ignore case: C:\Users\dev\.trail and c:\users\dev\.trail are one folder. */
38
+ const fold = (p) => (process.platform === 'win32' ? p.toLowerCase() : p);
39
+ const under = (p, dir) => { const a = fold(p), b = fold(dir); return a === b || a.startsWith(b + sep); };
40
+ /** `p` with its deepest existing folder resolved through symlinks: where a write to `p` really lands. */
41
+ function realOf(p) {
42
+ const rest = [];
43
+ let cur = p;
44
+ for (let i = 0; i < 64; i++) {
45
+ try {
46
+ return join(realpathSync(cur), ...rest.reverse());
47
+ }
48
+ catch { /* not there (yet): its folder */ }
49
+ const up = dirname(cur);
50
+ if (up === cur)
51
+ break;
52
+ rest.push(basename(cur));
53
+ cur = up;
54
+ }
55
+ return p;
56
+ }
57
+ const ZONES = new Map();
58
+ function zonesOf(ctx) {
59
+ const home = ctx.home ?? homedir();
60
+ const memo = `${ctx.trailHome}\0${ctx.transcriptPath}\0${home}`;
61
+ let z = ZONES.get(memo);
62
+ if (!z) {
63
+ const as = { trail: resolve(ctx.trailHome), projects: resolve(home, '.claude', 'projects'), transcript: ctx.transcriptPath ? resolve(ctx.transcriptPath) : null };
64
+ const real = { trail: realOf(as.trail), projects: realOf(as.projects), transcript: as.transcript === null ? null : realOf(as.transcript) };
65
+ z = { as, real, home };
66
+ if (ZONES.size > 32)
67
+ ZONES.clear();
68
+ ZONES.set(memo, z);
69
+ }
70
+ return z;
71
+ }
72
+ function guardedIn(p, z, wipe) {
73
+ if (under(p, z.trail) || (z.transcript !== null && fold(p) === fold(z.transcript)))
74
+ return true;
75
+ if (wipe && (under(z.trail, p) || under(z.projects, p)))
76
+ return true;
77
+ if (!under(p, z.projects))
78
+ return false;
79
+ return relative(z.projects, p).split(sep)[1] !== 'memory';
80
+ }
81
+ /** A path Trail's record depends on, as written or through a symlink. `wipe`: also a folder that holds one (rm, mv). */
82
+ function guarded(p, z, wipe = false) {
83
+ return guardedIn(p, z.as, wipe) || guardedIn(realOf(p), z.real, wipe);
84
+ }
85
+ /** A word with quotes gone and `~`, `$HOME`, `$TRAIL_HOME` and the command's own variables expanded. */
86
+ function expand(word, z, vars) {
87
+ let w = word.replace(/['"]/g, '');
88
+ if (vars?.size)
89
+ w = w.replace(/\$\{?([A-Za-z_]\w*)\}?/g, (m, n) => vars.get(n) ?? m);
90
+ return w.replace(/^~(?=\/|$)/, z.home)
91
+ .replace(/^\$(?:HOME|\{HOME\})(?=\/|$)/, z.home)
92
+ .replace(/^\$(?:TRAIL_HOME|\{TRAIL_HOME\})(?=\/|$)/, z.as.trail);
93
+ }
94
+ /**
95
+ * A shell word or string literal as an absolute path; null for a variable the command did not set. A folder named
96
+ * before such a variable is still a place (g5 review): `~/.trail/sessions/$SID.json` is a file in that folder.
97
+ */
98
+ function pathOf(word, folder, z, vars) {
99
+ let w = expand(word, z, vars);
100
+ const dyn = w.search(/[$`]/);
101
+ if (dyn >= 0) {
102
+ const dir = w.slice(0, w.lastIndexOf('/', dyn) + 1);
103
+ if (!dir)
104
+ return null;
105
+ w = `${dir}$`;
106
+ }
107
+ if (!w)
108
+ return null;
109
+ if (isAbsolute(w))
110
+ return resolve(w);
111
+ return folder ? resolve(folder, w) : null;
112
+ }
113
+ const DECLARE = /^(?:export|declare|local|readonly|typeset)$/;
114
+ /** Records `NAME=value` words of a simple command that only assigns (or exports) them. */
115
+ function noteAssignments(simple, z, vars) {
116
+ const all = words(simple);
117
+ const list = DECLARE.test(all[0] ?? '') ? all.slice(1).filter((x) => !x.startsWith('-')) : all;
118
+ if (!list.length || !list.every((x) => /^[A-Za-z_]\w*=/.test(x)))
119
+ return false;
120
+ for (const x of list) {
121
+ const eq = x.indexOf('=');
122
+ vars.set(x.slice(0, eq), expand(x.slice(eq + 1), z, vars));
123
+ }
124
+ return true;
125
+ }
126
+ /* -------------------------------------------------------------------- shell */
127
+ /** Programs that write the paths they are given: which arguments. */
128
+ const WRITERS = {
129
+ tee: 'all', rm: 'all', rmdir: 'all', unlink: 'all', shred: 'all', truncate: 'all', touch: 'all', mkdir: 'all', chmod: 'all', chown: 'all',
130
+ // A link to a protected file is a way to write it under another name.
131
+ mv: 'all', ln: 'all', cp: 'last', install: 'last', rsync: 'last',
132
+ };
133
+ const OP_WORD = /^(?:\d+|&)?(?:>>?|>\||<<?<?|<>)$/;
134
+ const OUT_REDIRECT = /^(?:\d+|&)?(?:>>?|>\|)(.*)$/s;
135
+ const INLINE_REDIRECT = /^[^'"$`(<>]+?(?:\d|&)?(?:>>?|>\|)(.+)$/s;
136
+ /** Redirect targets of one simple command (`2>&1` and `>(...)` are not files). */
137
+ function redirectTargets(w) {
138
+ const out = [];
139
+ for (let i = 0; i < w.length; i++) {
140
+ const m = OUT_REDIRECT.exec(w[i]) ?? INLINE_REDIRECT.exec(w[i]);
141
+ if (!m)
142
+ continue;
143
+ const target = m[1] || w[++i] || '';
144
+ if (target && !/^[&(]/.test(target))
145
+ out.push(target);
146
+ }
147
+ return out;
148
+ }
149
+ /** Programs whose short flag names the file they write: `curl -o f`, `sort -o f`, `wget -O f`, `tree -o f`. */
150
+ const OUT_FLAG = { curl: '-o', sort: '-o', tree: '-o', wget: '-O' };
151
+ /** Files named by `--output f`, `--output=f`, or the program's own output flag. */
152
+ function outputFiles(prog, w) {
153
+ const out = [];
154
+ for (let i = 1; i < w.length; i++) {
155
+ const a = w[i];
156
+ if (a.startsWith('--output='))
157
+ out.push(a.slice(9));
158
+ else if ((a === '--output' || a === OUT_FLAG[prog]) && w[i + 1] !== undefined)
159
+ out.push(w[++i]);
160
+ }
161
+ return out;
162
+ }
163
+ /** Arguments that are not flags or redirects. */
164
+ function positional(w) {
165
+ const out = [];
166
+ for (let i = 0; i < w.length; i++) {
167
+ const a = w[i];
168
+ if (OP_WORD.test(a)) {
169
+ i++;
170
+ continue;
171
+ }
172
+ if (/^(?:\d*[<>]|&>)/.test(a) || (a.startsWith('-') && a !== '-'))
173
+ continue;
174
+ out.push(a);
175
+ }
176
+ return out;
177
+ }
178
+ /** The words of a simple command with env prefixes, wrappers, `sudo` and `env A=B` gone. */
179
+ function programWordsOf(simple) {
180
+ let w = words(bareCommand(simple));
181
+ while (w[0] === 'sudo' || w[0] === 'env') {
182
+ w = w.slice(1);
183
+ while (w.length && (/^[A-Za-z_]\w*=/.test(w[0]) || w[0].startsWith('-')))
184
+ w = w.slice(1);
185
+ }
186
+ return w;
187
+ }
188
+ /** The folder a `tar` extracts into or the archive it creates, when it does either. */
189
+ function tarTargets(w) {
190
+ const out = [];
191
+ const bundle = w[1] && !w[1].startsWith('-') ? w[1] : '';
192
+ const short = w.filter((a) => /^-[A-Za-z]+$/.test(a)).join('') + bundle;
193
+ const extract = /x/.test(short) || w.includes('--extract') || w.includes('--get');
194
+ const create = /[cru]/.test(short) || w.includes('--create') || w.includes('--append') || w.includes('--update');
195
+ for (let i = 1; i < w.length; i++) {
196
+ const a = w[i];
197
+ if (extract && (a === '-C' || a === '--directory') && w[i + 1])
198
+ out.push(w[i + 1]);
199
+ if (extract && a.startsWith('--directory='))
200
+ out.push(a.slice(12));
201
+ if (create && (a === '-f' || a === '--file' || (/^-[A-Za-z]*f$/.test(a))) && w[i + 1])
202
+ out.push(w[i + 1]);
203
+ if (create && a.startsWith('--file='))
204
+ out.push(a.slice(7));
205
+ }
206
+ if (create && bundle.endsWith('f') && w[2])
207
+ out.push(w[2]);
208
+ return out;
209
+ }
210
+ /* --------------------------------------------------------------------- git */
211
+ /** D59e: git writing in a protected folder (its `-C` chain, `--git-dir`, `--work-tree`, or a clone's or init's target). */
212
+ function gitWrites(w, folder, z, vars) {
213
+ return gitWriteTargets(w, folder, (word, from) => pathOf(word, from, z, vars)).some((d) => d !== null && guarded(d, z));
214
+ }
215
+ /* ------------------------------------------------------------------- xargs */
216
+ /** xargs options that take the next word (GNU and BSD). */
217
+ const XARGS_VALUE = /^(?:-[nPLdEsaSR]|--(?:max-args|max-procs|max-lines|delimiter|eof|max-chars|arg-file))$/;
218
+ /**
219
+ * What xargs feeds the program: a path under the first protected path an earlier stage of the pipeline names
220
+ * (`find ~/.trail/runs ... |`), else under the first absolute one, else a name in the shell's folder (`ls |`).
221
+ */
222
+ function xargsInput(pipeIn, folder, z, vars) {
223
+ let first = null;
224
+ for (const w of pipeIn) {
225
+ for (const a of positional(w.slice(1))) {
226
+ const p = pathOf(a, folder, z, vars);
227
+ if (p === null)
228
+ continue;
229
+ if (guarded(p, z))
230
+ return join(p, 'f');
231
+ if (first === null && isAbsolute(expand(a, z, vars)))
232
+ first = p;
233
+ }
234
+ }
235
+ return join(first ?? folder ?? '', 'f');
236
+ }
237
+ /** D59e: `… | xargs [-I R] <writer> …` handing the listed paths (or a protected one of its own) to a program that writes. */
238
+ function xargsWrites(w, pipeIn, folder, z, vars) {
239
+ let rep = null;
240
+ let i = 1;
241
+ for (; i < w.length; i++) {
242
+ const a = w[i];
243
+ if (a === '--') {
244
+ i++;
245
+ break;
246
+ }
247
+ if (!a.startsWith('-'))
248
+ break;
249
+ if (a === '-I' || a === '-J' || a === '--replace')
250
+ rep = w[++i] ?? null;
251
+ else if (/^-[IJ]./.test(a))
252
+ rep = a.slice(2);
253
+ else if (a.startsWith('--replace='))
254
+ rep = a.slice(10);
255
+ else if (/^-i/.test(a))
256
+ rep = a.slice(2) || '{}';
257
+ else if (XARGS_VALUE.test(a))
258
+ i++;
259
+ }
260
+ const cmd = w.slice(i).map((a) => unquote(a));
261
+ if (!cmd.length)
262
+ return false;
263
+ const input = xargsInput(pipeIn, folder, z, vars);
264
+ const r = rep ? unquote(rep) : null;
265
+ const argv = r ? cmd.map((a) => (a === r ? input : a.includes(r) ? a.split(r).join('f') : a)) : [...cmd, input];
266
+ return simpleWrites(argv, folder, z, vars);
267
+ }
268
+ /** Whether one simple command's redirects or written arguments are protected. */
269
+ function simpleWrites(w, folder, z, vars) {
270
+ const hit = (word, wipe = false) => {
271
+ const p = pathOf(word, folder, z, vars);
272
+ return p !== null && guarded(p, z, wipe);
273
+ };
274
+ const prog = base(w[0] ?? '');
275
+ if (redirectTargets(w).some((t) => hit(t)) || outputFiles(prog, w).some((t) => hit(t)))
276
+ return true;
277
+ if (prog === 'git')
278
+ return gitWrites(w, folder, z, vars);
279
+ const args = positional(w.slice(1));
280
+ const which = WRITERS[prog];
281
+ if (which === 'all')
282
+ return args.some((a) => hit(a, prog === 'rm' || prog === 'mv'));
283
+ if (which === 'last')
284
+ return args.length > 1 && hit(args[args.length - 1]);
285
+ if ((prog === 'sed' || prog === 'perl') && w.some((a) => /^-[a-zA-Z]*i/.test(a) || a.startsWith('--in-place')))
286
+ return args.some((a) => hit(a));
287
+ if ((prog === 'awk' || prog === 'gawk') && w.some((a, i) => (a === '-i' && w[i + 1] === 'inplace') || a === '--include=inplace'))
288
+ return args.some((a) => hit(a));
289
+ if (prog === 'dd')
290
+ return w.some((a) => a.startsWith('of=') && hit(a.slice(3)));
291
+ if (prog === 'tar')
292
+ return tarTargets(w).some((t) => hit(t));
293
+ if (prog === 'unzip')
294
+ return w.some((a, i) => (a === '-d' && w[i + 1] !== undefined && hit(w[i + 1])) || (a.startsWith('-d') && a.length > 2 && hit(a.slice(2))));
295
+ const execs = w.flatMap((a, i) => (a === '-exec' || a === '-execdir' ? [base(w[i + 1] ?? '')] : []));
296
+ if (prog === 'find' && (w.includes('-delete') || execs.some((e) => e in WRITERS || e === 'sed' || e === 'perl'))) {
297
+ const roots = [];
298
+ for (const a of w.slice(1)) {
299
+ if (/^[-(!]/.test(a))
300
+ break;
301
+ roots.push(a);
302
+ }
303
+ return roots.some((a) => hit(a, true));
304
+ }
305
+ return false;
306
+ }
307
+ /* ---------------------------------------------------------------------- all */
308
+ /** A `cd` from `folder`; null when only the shell could know where it lands. */
309
+ function cdFrom(folder, simple, home) {
310
+ const next = effectiveFolder(folder ?? '/\0', simple, home);
311
+ // No real path holds a NUL; on Windows resolve() puts a drive before the '/\0' this starts from.
312
+ return next && !next.includes('\0') ? next : null;
313
+ }
314
+ /** Whether a Bash command writes a guarded path; `depth` bounds `bash -c` inside `bash -c`. */
315
+ function bashWrites(text, start, z, depth = 0, vars = new Map()) {
316
+ // `>|` (write even with noclobber) is a redirect, not a pipe.
317
+ const raw = text.includes('>|') ? text.replace(/>\|/g, '> ') : text;
318
+ let folder = start;
319
+ let prev = null;
320
+ const stack = [];
321
+ const { segs } = scan(raw);
322
+ // The earlier stages of the pipeline the current segment is in: what an `xargs` reads, and (as text: their words
323
+ // unquoted and their heredoc bodies) what an interpreter or shell reading its stdin runs (g5 review).
324
+ let pipeIn = [];
325
+ let piped = [];
326
+ for (const p of segs) {
327
+ if (p.group) {
328
+ if (bashWrites(raw.slice(p.group.open + 1, p.group.close < 0 ? p.end : p.group.close), folder, z, depth, new Map(vars)))
329
+ return true;
330
+ pipeIn = [];
331
+ piped = [];
332
+ continue;
333
+ }
334
+ const head = raw.slice(p.start, p.end);
335
+ const plain = !OPEN_KW.has(words(head)[0] ?? '');
336
+ const stage = [];
337
+ simples: for (const [n, simple] of simpleCommands(head).entries()) {
338
+ if (noteAssignments(simple, z, vars))
339
+ continue simples;
340
+ const w = programWordsOf(simple);
341
+ if (w[0] === 'cd' || w[0] === 'pushd' || w[0] === 'popd') {
342
+ const to = w[0] === 'popd' ? (stack.length ? stack.pop() : null)
343
+ : w[1] === '-' ? prev
344
+ : cdFrom(folder, `cd ${w.slice(1).filter((a) => !/^-[LPe@]+$/.test(a)).map((a) => expand(a, z, vars)).join(' ')}`, z.home);
345
+ if (w[0] === 'pushd')
346
+ stack.push(folder);
347
+ prev = folder;
348
+ folder = to;
349
+ continue simples;
350
+ }
351
+ if (simpleWrites(w, folder, z, vars))
352
+ return true;
353
+ const prog = base(w[0] ?? '');
354
+ if (prog === 'xargs' && xargsWrites(w, pipeIn, folder, z, vars))
355
+ return true;
356
+ stage.push(w);
357
+ const shell = SHELLS.test(prog);
358
+ if (!shell && !INTERPRETERS.test(prog))
359
+ continue;
360
+ const code = programCode(prog, w, plain && n === 0 ? p.bodies.map(([a, b]) => raw.slice(a, b)) : [], n === 0 && piped.length ? piped.join('\n') : null);
361
+ const literal = (v) => {
362
+ const at = pathOf(v, folder, z);
363
+ return at !== null && guarded(at, z);
364
+ };
365
+ if (code !== null && (shell ? depth < 2 && bashWrites(code, folder, z, depth + 1, new Map(vars)) : codeWrites(code, literal)))
366
+ return true;
367
+ }
368
+ const fed = [...stage.map((w) => w.slice(1).map((a) => unquote(a)).join(' ')), ...p.bodies.map(([a, b]) => raw.slice(a, b))];
369
+ piped = p.sep === '|' ? [...piped, ...fed] : [];
370
+ pipeIn = p.sep === '|' ? [...pipeIn, ...stage] : [];
371
+ }
372
+ return false;
373
+ }
374
+ /** A mark `tamperOf` gives for Trail's hook script run by hand, not a write (D93: the refusal says so). */
375
+ export const isHookScriptTamper = (what) => /^Bash (?:(?:trail|graft)-hooks\.cjs|a Trail hook script)$/.test(String(what ?? ''));
376
+ /** The first rule a call breaks, as '<tool> <path or program>'; null when none. */
377
+ export function tamperOf(name, input, raw, ctx) {
378
+ const z = zonesOf(ctx);
379
+ if (EDIT_TOOLS.has(name)) {
380
+ const i = input && typeof input === 'object' ? input : {};
381
+ const fp = typeof i.file_path === 'string' ? i.file_path : typeof i.notebook_path === 'string' ? i.notebook_path : '';
382
+ if (!fp)
383
+ return null;
384
+ const p = resolve(fp.replace(/^~(?=\/|$)/, z.home));
385
+ return guarded(p, z) ? `${name} ${p}` : null;
386
+ }
387
+ // Codex's write_stdin (review): the keys fed to a running shell are a command line like any other.
388
+ if (name === 'write_stdin') {
389
+ const keys = input && typeof input === 'object' && typeof input.chars === 'string' ? input.chars : '';
390
+ if (!keys.trim())
391
+ return null;
392
+ if (ranHookScript(keys))
393
+ return 'Bash a Trail hook script';
394
+ return bashWrites(keys, ctx.folder ?? null, z) ? `Bash ${programOf(keys) ?? 'shell'}` : null;
395
+ }
396
+ if (name !== 'Bash' || raw === null)
397
+ return null;
398
+ // D116 item 2: running it by hand marks the session; reading it does not.
399
+ if (ranHookScript(raw))
400
+ return HOOK_SCRIPT.test(raw) ? `Bash ${HOOK_SCRIPT.exec(raw)[0]}` : 'Bash a Trail hook script';
401
+ if (onlyTrail(raw))
402
+ return null;
403
+ return bashWrites(raw, ctx.folder ?? null, z) ? `Bash ${programOf(raw) ?? 'shell'}` : null;
404
+ }
405
+ //# sourceMappingURL=tamper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tamper.js","sourceRoot":"","sources":["../../src/trace/tamper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import type { TypedAnswer } from './types.js';
2
+ export type { TypedAnswer } from './types.js';
3
+ /** The person's words in a UserPromptSubmit `prompt`: phase 0's ownText(raw); null when that gives ''. */
4
+ export declare function typedPrompt(raw: string): string | null;
5
+ /** 4.4: the spec's phrasings and the self-learning worktree's keep asks. A file (`skill.md`) or a "skill issue" is not a skill. */
6
+ export declare const SAVE_REQUEST: RegExp;
7
+ /** A no before the verb, in the same clause: "don't save", "I don't want to save", "you shouldn't keep", "I'd rather not keep". */
8
+ export declare const NOT_SAVE: RegExp;
9
+ /**
10
+ * SAVE_REQUEST on 25 words or fewer, and not NOT_SAVE. Also not a status or history question ("did you
11
+ * save this as a skill?"), not taken back, not wondering, not recalling: a wrong yes here saves a skill
12
+ * nobody asked for, a wrong no only means the person says it plainly.
13
+ */
14
+ export declare function isSaveRequest(typed: string): boolean;
15
+ export declare function scopeWords(typed: string): 'every repo' | 'this repo' | 'repo' | 'team';
16
+ /**
17
+ * D116 item 3: the person said to go on: the line's first clause (up to `,` `:` `;` `.` `!` or a dash) is a
18
+ * go-ahead (yes, ok, continue, go on, do it, proceed), whatever follows it. Never a question.
19
+ */
20
+ export declare function isGoAhead(typed: string): boolean;
21
+ /** 4.12. afterShow: the offer already got its one 'show me'. A yes is never a question. */
22
+ export declare function classifyAnswer(typed: string, afterShow: boolean): TypedAnswer;
23
+ /**
24
+ * The person is correcting what the agent just did. Ported from the worktree's detect.ts `isCorrection`; D111 adds
25
+ * "it didn't X" and "you forgot to X" without a leading no (moment 4's forms, 4.14 step 2).
26
+ */
27
+ export declare function isCorrection(typed: string): boolean;
28
+ /** sha256 hex of the text NFC-normalised, trimmed, whitespace collapsed. The only form typed text is ever stored in. */
29
+ export declare function typedSha(typed: string): string;
30
+ //# sourceMappingURL=typed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typed.d.ts","sourceRoot":"","sources":["../../src/trace/typed.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,0GAA0G;AAC1G,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAEtD;AAED,mIAAmI;AACnI,eAAO,MAAM,YAAY,QAQxB,CAAC;AACF,mIAAmI;AACnI,eAAO,MAAM,QAAQ,QAAkM,CAAC;AAQxN;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAIpD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,GAAG,WAAW,GAAG,MAAM,GAAG,MAAM,CAMtF;AAkCD;;;GAGG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAKhD;AAED,2FAA2F;AAC3F,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,WAAW,CAQ7E;AAQD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAInD;AAED,wHAAwH;AACxH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAG9C"}
@@ -0,0 +1,132 @@
1
+ /**
2
+ * Every reader of what the person typed, for learned skills: a save request
3
+ * and the scope words in it, the answer to an offer, a correction, and the
4
+ * hash, the only form typed text is ever stored in.
5
+ *
6
+ * An answer is a closed list of whole-message forms. "ok now fix the lint
7
+ * errors" starts like a yes and is not one: a skill is saved only on a reply
8
+ * that says nothing else. So the answer reads the whole message: a quote, a
9
+ * pasted block, a second line with more in it or a question mark makes it
10
+ * not a yes. The other matchers read `askText`: pasted code, quoted lines and
11
+ * very long lines are not the person's words.
12
+ *
13
+ * Pure: no files, no clock.
14
+ */
15
+ import { createHash } from 'node:crypto';
16
+ import { ownText } from './claude.js';
17
+ import { askText, wordCount, MAX_ASK_WORDS, STATUS_OR_HISTORY } from './jobs.js';
18
+ /** The person's words in a UserPromptSubmit `prompt`: phase 0's ownText(raw); null when that gives ''. */
19
+ export function typedPrompt(raw) {
20
+ return ownText(String(raw ?? '')) || null;
21
+ }
22
+ /** 4.4: the spec's phrasings and the self-learning worktree's keep asks. A file (`skill.md`) or a "skill issue" is not a skill. */
23
+ export const SAVE_REQUEST = new RegExp([
24
+ String.raw `\b(?:save|keep|make|turn)\s+(?:this|that|it|these(?:\s+steps)?|what\s+(?:you\s+)?(?:just\s+)?did|the\s+steps)\s+(?:as|into)\s+(?:a\s+)?skill(?!\w|[.-]\w|\s+issues?\b)`,
25
+ String.raw `\b(?:save|keep)\s+(?:this|that|it|these\s+steps)\s+for\s+next\s+time\b`,
26
+ String.raw `\bmake\s+(?:a\s+)?skill\s+(?:out\s+of|from)\s+(?:this|that|it)\b`,
27
+ String.raw `\bremember\s+how\s+(?:to\s+do\s+(?:this|that)|you\s+did\s+(?:this|that))\b`,
28
+ ].join('|'), 'i');
29
+ /** A no before the verb, in the same clause: "don't save", "I don't want to save", "you shouldn't keep", "I'd rather not keep". */
30
+ export const NOT_SAVE = /\b(?:don'?t|do not|never|no need to|not|shouldn'?t|should not|won'?t|will not|wouldn'?t|would not|didn'?t|did not)\b[^,.;:!?\n]*?\b(?:sav\w*|keep\w*|kept|mak\w*|made|turn\w*|remember\w*)\b/i;
31
+ /** Asked, then taken back ("... actually no", "... ? nah", "never mind"), or not now ("not yet, ... later"). */
32
+ const TAKEN_BACK = /\b(?:actually,? no|no,? wait|wait,? no|never ?mind|on second thought|scratch that|forget (?:it|that)|just kidding)\b|\b(?:nah|nope|no|don'?t|later)\W*$|^\W*not (?:yet|now)\b/i;
33
+ /** Wondering, asking why or how, not asking for it. */
34
+ const WONDERING = /^\s*why\b|\bwhy (?:did|didn'?t|would|do|does|is|are)\b|\bwhat (?:happens|if)\b|(?<!remember )\bhow (?:do|does|would|can|could|should|to)\b|\bexplain (?:how|what|why)\b|\bshould (?:i|we)\b|\bwhether\b/i;
35
+ /** Asking whether the agent recalls a past run: "do you remember how...", "remember how you did this last time?". */
36
+ const RECALLING = /\b(?:do|did|can|could) (?:you|u) remember\b|\bremember how\b[^.?!\n]*\b(?:last time|before|yesterday|earlier)\b/i;
37
+ /**
38
+ * SAVE_REQUEST on 25 words or fewer, and not NOT_SAVE. Also not a status or history question ("did you
39
+ * save this as a skill?"), not taken back, not wondering, not recalling: a wrong yes here saves a skill
40
+ * nobody asked for, a wrong no only means the person says it plainly.
41
+ */
42
+ export function isSaveRequest(typed) {
43
+ const ask = askText(typed).replace(/[\u2018\u2019]/g, "'");
44
+ if (wordCount(ask) > MAX_ASK_WORDS || !SAVE_REQUEST.test(ask) || NOT_SAVE.test(ask))
45
+ return false;
46
+ return !STATUS_OR_HISTORY.test(ask) && !TAKEN_BACK.test(ask) && !WONDERING.test(ask) && !RECALLING.test(ask);
47
+ }
48
+ export function scopeWords(typed) {
49
+ const t = askText(typed).toLowerCase();
50
+ if (/\b(always|everywhere|every repo|all (my )?repos|on this (mac|machine|laptop))\b/.test(t))
51
+ return 'every repo';
52
+ if (/\bfor (the|my|our) team\b/.test(t))
53
+ return 'team';
54
+ if (/\bfor (the )?(whole )?repo\b/.test(t) || /\b(for|in) (this|the) repo\b.*\b(everyone|team|all of us)\b/.test(t))
55
+ return 'repo';
56
+ return 'this repo';
57
+ }
58
+ const YES = [
59
+ // "ok thanks" closes a turn more often than it agrees to anything: ok and okay take no thanks.
60
+ /^(y|yes|yeah|yep|yup|sure)( please| do it| go ahead| save it| keep it| keep them| thanks| thank you)?$/,
61
+ /^(ok|okay)( please| do it| go ahead| save it| keep it| keep them)?$/,
62
+ /^(go ahead|do it|please do|save it|keep it|keep them|save them|sounds good)( please)?$/,
63
+ /^(yes|yeah|sure|ok|okay),? (keep|save) (it|this|that|them)( as a skill)?( please)?$/,
64
+ // Seen in real answers: praise, then the verb. Never praise alone.
65
+ /^(looks good|looks great|looks right|perfect|great|nice),? (keep|save) (it|this|that|them)( as a skill)?( please)?$/,
66
+ ];
67
+ const SHOW = /^(show( me)?( it| the steps| the draft| first)?|let me see( it)?|what are the steps|see the steps|what'?s in it)( please)?$/;
68
+ const NO = [
69
+ /^(n|no|nope|nah|not now|no thanks|no thank you|don'?t|skip( it)?|never ?mind|pass)( thanks| thank you)?$/,
70
+ /^(no )?(don'?t|do not)( (save|keep) (it|this|that|them)( as a skill)?)?( thanks| thank you)?$/,
71
+ ];
72
+ const TRAILING_EMOJI = /[\s\p{Extended_Pictographic}\u{FE0F}\u{200D}\u{1F3FB}-\u{1F3FF}]+$/u;
73
+ /**
74
+ * The whole message as one answer: lowercased, outer punctuation and a trailing emoji gone, commas and
75
+ * spaces as single spaces. The whole message, not `askText`: a quote, a pasted block or a long line is
76
+ * more than an answer, so it can't be one.
77
+ */
78
+ function answerForm(typed) {
79
+ return String(typed ?? '').replace(/[\u2018\u2019]/g, "'").toLowerCase().trim()
80
+ .replace(TRAILING_EMOJI, '')
81
+ .replace(/^[\s.!?,;:]+|[\s.!?,;:]+$/g, '')
82
+ .replace(/\s*,\s*/g, ' ')
83
+ .replace(/\s+/g, ' ');
84
+ }
85
+ /** D116 item 3: the go-ahead phrases a run spans turns on, as the line's whole first clause. */
86
+ const GO_AHEAD = /^(?:y|yes|yeah|yep|yup|sure|ok|okay|k|continue|go on|go ahead|do it|proceed|carry on|keep going|please do|please continue|please proceed|sounds good)(?: please)?$/;
87
+ /**
88
+ * D116 item 3: the person said to go on: the line's first clause (up to `,` `:` `;` `.` `!` or a dash) is a
89
+ * go-ahead (yes, ok, continue, go on, do it, proceed), whatever follows it. Never a question.
90
+ */
91
+ export function isGoAhead(typed) {
92
+ const t = String(typed ?? '').replace(/[\u2018\u2019]/g, "'").toLowerCase().trim();
93
+ if (!t || /\?\s*$/.test(t))
94
+ return false;
95
+ const first = t.split(/\s*(?:[,:;.!]|\s-\s|\s\u2014\s|$)/)[0].replace(TRAILING_EMOJI, '').trim();
96
+ return GO_AHEAD.test(first.replace(/\s+/g, ' '));
97
+ }
98
+ /** 4.12. afterShow: the offer already got its one 'show me'. A yes is never a question. */
99
+ export function classifyAnswer(typed, afterShow) {
100
+ const t = answerForm(typed);
101
+ if (!t)
102
+ return 'other';
103
+ if (!String(typed).includes('?') && YES.some((re) => re.test(t)))
104
+ return 'yes';
105
+ if (!afterShow && SHOW.test(t))
106
+ return 'show';
107
+ if (NO.some((re) => re.test(t)))
108
+ return 'no';
109
+ if (isCorrection(askText(typed)))
110
+ return 'correction';
111
+ return 'other';
112
+ }
113
+ /* Ported from the self-learning worktree's detect.ts. */
114
+ const CORRECTION_START = /^(no[,.!\s]|nope\b|not like that|that'?s (wrong|not)|wrong\b|actually[,\s]|i (said|told you)|why did you|you (keep|always|again)|again[,!]|stop\b|please don'?t|don'?t\b|do not\b|never\b|(it|you) (didn'?t|did not|forgot to|never)\b)/i;
115
+ const AGAIN = /\b(i told you|i said|as i said|you keep \w+ing|every single time|again and again|yet again|(did|doing|broke|happened) (it|that|this) again|again\?)/i;
116
+ const OUTPUT_CORRECTION = /\b(should (be|use|go|live) \S+.{0,30}\bnot\b|it'?s actually|is wrong|that'?s not (right|how)|you (got|have) (it|that) wrong)\b/i;
117
+ const MAX_CORRECTION_CHARS = 400;
118
+ /**
119
+ * The person is correcting what the agent just did. Ported from the worktree's detect.ts `isCorrection`; D111 adds
120
+ * "it didn't X" and "you forgot to X" without a leading no (moment 4's forms, 4.14 step 2).
121
+ */
122
+ export function isCorrection(typed) {
123
+ // The person's own words: a quoted ('>') line or a fenced block is what they quoted, not their correction (b4 review).
124
+ const t = askText(String(typed ?? '')).replace(/[\u2018\u2019]/g, "'").trim();
125
+ return t.length <= MAX_CORRECTION_CHARS && (CORRECTION_START.test(t) || OUTPUT_CORRECTION.test(t) || AGAIN.test(t));
126
+ }
127
+ /** sha256 hex of the text NFC-normalised, trimmed, whitespace collapsed. The only form typed text is ever stored in. */
128
+ export function typedSha(typed) {
129
+ const t = String(typed ?? '').normalize('NFC').trim().replace(/\s+/g, ' ');
130
+ return createHash('sha256').update(t).digest('hex');
131
+ }
132
+ //# sourceMappingURL=typed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typed.js","sourceRoot":"","sources":["../../src/trace/typed.ts"],"names":[],"mappings":"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"}