@nanonets/graft 0.23.1 → 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 (650) hide show
  1. package/README.md +4 -4
  2. package/dist/ai/crux.d.ts +31 -3
  3. package/dist/ai/crux.d.ts.map +1 -1
  4. package/dist/ai/crux.js +88 -10
  5. package/dist/ai/crux.js.map +1 -1
  6. package/dist/ai/llm/openai.d.ts +101 -0
  7. package/dist/ai/llm/openai.d.ts.map +1 -1
  8. package/dist/ai/llm/openai.js +396 -6
  9. package/dist/ai/llm/openai.js.map +1 -1
  10. package/dist/ai/llm/recover-tool.d.ts +2 -0
  11. package/dist/ai/llm/recover-tool.d.ts.map +1 -1
  12. package/dist/ai/llm/recover-tool.js +1 -1
  13. package/dist/ai/llm/recover-tool.js.map +1 -1
  14. package/dist/ai/synthesize.d.ts.map +1 -1
  15. package/dist/ai/synthesize.js +100 -1
  16. package/dist/ai/synthesize.js.map +1 -1
  17. package/dist/ask/ask.d.ts +8 -0
  18. package/dist/ask/ask.d.ts.map +1 -1
  19. package/dist/ask/ask.js +33 -12
  20. package/dist/ask/ask.js.map +1 -1
  21. package/dist/claude/format.js +1 -1
  22. package/dist/claude/format.js.map +1 -1
  23. package/dist/claude/hook-io.d.ts +44 -0
  24. package/dist/claude/hook-io.d.ts.map +1 -0
  25. package/dist/claude/hook-io.js +144 -0
  26. package/dist/claude/hook-io.js.map +1 -0
  27. package/dist/claude/hooks.d.ts +0 -18
  28. package/dist/claude/hooks.d.ts.map +1 -1
  29. package/dist/claude/hooks.js +24 -77
  30. package/dist/claude/hooks.js.map +1 -1
  31. package/dist/claude/init.js +3 -3
  32. package/dist/claude/init.js.map +1 -1
  33. package/dist/claude/note-signals.d.ts +28 -0
  34. package/dist/claude/note-signals.d.ts.map +1 -0
  35. package/dist/claude/note-signals.js +325 -0
  36. package/dist/claude/note-signals.js.map +1 -0
  37. package/dist/claude/shim-template.d.ts.map +1 -1
  38. package/dist/claude/shim-template.js +10 -4
  39. package/dist/claude/shim-template.js.map +1 -1
  40. package/dist/claude/skill-template.d.ts.map +1 -1
  41. package/dist/claude/skill-template.js +49 -18
  42. package/dist/claude/skill-template.js.map +1 -1
  43. package/dist/claude/skills-hook-util.d.ts +25 -0
  44. package/dist/claude/skills-hook-util.d.ts.map +1 -0
  45. package/dist/claude/skills-hook-util.js +71 -0
  46. package/dist/claude/skills-hook-util.js.map +1 -0
  47. package/dist/claude/state.d.ts +4 -3
  48. package/dist/claude/state.d.ts.map +1 -1
  49. package/dist/claude/state.js.map +1 -1
  50. package/dist/claude/sync-run.js +1 -1
  51. package/dist/claude/sync-run.js.map +1 -1
  52. package/dist/cli-picker.d.ts +36 -5
  53. package/dist/cli-picker.d.ts.map +1 -1
  54. package/dist/cli-picker.js +60 -13
  55. package/dist/cli-picker.js.map +1 -1
  56. package/dist/cli.d.ts +2 -0
  57. package/dist/cli.d.ts.map +1 -1
  58. package/dist/cli.js +406 -64
  59. package/dist/cli.js.map +1 -1
  60. package/dist/cloud/lookup-activity.d.ts +16 -0
  61. package/dist/cloud/lookup-activity.d.ts.map +1 -0
  62. package/dist/cloud/lookup-activity.js +56 -0
  63. package/dist/cloud/lookup-activity.js.map +1 -0
  64. package/dist/cloud/nudge.d.ts.map +1 -1
  65. package/dist/cloud/nudge.js +3 -0
  66. package/dist/cloud/nudge.js.map +1 -1
  67. package/dist/cloud/onboarding.d.ts +237 -0
  68. package/dist/cloud/onboarding.d.ts.map +1 -0
  69. package/dist/cloud/onboarding.js +536 -0
  70. package/dist/cloud/onboarding.js.map +1 -0
  71. package/dist/cloud/pair.d.ts +76 -0
  72. package/dist/cloud/pair.d.ts.map +1 -0
  73. package/dist/cloud/pair.js +249 -0
  74. package/dist/cloud/pair.js.map +1 -0
  75. package/dist/cloud/workspace-sync.d.ts +10 -2
  76. package/dist/cloud/workspace-sync.d.ts.map +1 -1
  77. package/dist/cloud/workspace-sync.js +119 -7
  78. package/dist/cloud/workspace-sync.js.map +1 -1
  79. package/dist/cloud/workspace.d.ts +22 -1
  80. package/dist/cloud/workspace.d.ts.map +1 -1
  81. package/dist/cloud/workspace.js +16 -1
  82. package/dist/cloud/workspace.js.map +1 -1
  83. package/dist/context/batches.d.ts +29 -0
  84. package/dist/context/batches.d.ts.map +1 -0
  85. package/dist/context/batches.js +130 -0
  86. package/dist/context/batches.js.map +1 -0
  87. package/dist/context/build.d.ts +7 -2
  88. package/dist/context/build.d.ts.map +1 -1
  89. package/dist/context/build.js +84 -50
  90. package/dist/context/build.js.map +1 -1
  91. package/dist/context/node-file.d.ts.map +1 -1
  92. package/dist/context/node-file.js +41 -4
  93. package/dist/context/node-file.js.map +1 -1
  94. package/dist/engine.d.ts +2 -0
  95. package/dist/engine.d.ts.map +1 -1
  96. package/dist/engine.js +1 -0
  97. package/dist/engine.js.map +1 -1
  98. package/dist/graph/cards.d.ts.map +1 -1
  99. package/dist/graph/cards.js +9 -4
  100. package/dist/graph/cards.js.map +1 -1
  101. package/dist/graph/enrich.d.ts.map +1 -1
  102. package/dist/graph/enrich.js +8 -3
  103. package/dist/graph/enrich.js.map +1 -1
  104. package/dist/graph/generic.d.ts.map +1 -1
  105. package/dist/graph/generic.js +207 -6
  106. package/dist/graph/generic.js.map +1 -1
  107. package/dist/graph/lsp/client.d.ts +18 -0
  108. package/dist/graph/lsp/client.d.ts.map +1 -1
  109. package/dist/graph/lsp/client.js +40 -2
  110. package/dist/graph/lsp/client.js.map +1 -1
  111. package/dist/graph/lsp/enrich.d.ts.map +1 -1
  112. package/dist/graph/lsp/enrich.js +9 -1
  113. package/dist/graph/lsp/enrich.js.map +1 -1
  114. package/dist/graph/lsp/registry.d.ts +7 -0
  115. package/dist/graph/lsp/registry.d.ts.map +1 -1
  116. package/dist/graph/lsp/registry.js +27 -2
  117. package/dist/graph/lsp/registry.js.map +1 -1
  118. package/dist/graph/native.d.ts +2 -0
  119. package/dist/graph/native.d.ts.map +1 -1
  120. package/dist/graph/native.js +29 -4
  121. package/dist/graph/native.js.map +1 -1
  122. package/dist/graph/queries/gleam.scm +51 -0
  123. package/dist/graph/resolve.d.ts.map +1 -1
  124. package/dist/graph/resolve.js +65 -3
  125. package/dist/graph/resolve.js.map +1 -1
  126. package/dist/graph/workspace-cli.d.ts +2 -0
  127. package/dist/graph/workspace-cli.d.ts.map +1 -1
  128. package/dist/graph/workspace-cli.js +1 -1
  129. package/dist/graph/workspace-cli.js.map +1 -1
  130. package/dist/hosts/claude-global.d.ts +14 -0
  131. package/dist/hosts/claude-global.d.ts.map +1 -1
  132. package/dist/hosts/claude-global.js +38 -3
  133. package/dist/hosts/claude-global.js.map +1 -1
  134. package/dist/init/install-record.d.ts +21 -0
  135. package/dist/init/install-record.d.ts.map +1 -0
  136. package/dist/init/install-record.js +144 -0
  137. package/dist/init/install-record.js.map +1 -0
  138. package/dist/init/plain-file.d.ts +11 -0
  139. package/dist/init/plain-file.d.ts.map +1 -0
  140. package/dist/init/plain-file.js +80 -0
  141. package/dist/init/plain-file.js.map +1 -0
  142. package/dist/mcp/brains.d.ts +72 -0
  143. package/dist/mcp/brains.d.ts.map +1 -0
  144. package/dist/mcp/brains.js +220 -0
  145. package/dist/mcp/brains.js.map +1 -0
  146. package/dist/mcp/server.d.ts +3 -1
  147. package/dist/mcp/server.d.ts.map +1 -1
  148. package/dist/mcp/server.js +40 -5
  149. package/dist/mcp/server.js.map +1 -1
  150. package/dist/mcp/tools.d.ts.map +1 -1
  151. package/dist/mcp/tools.js +7 -2
  152. package/dist/mcp/tools.js.map +1 -1
  153. package/dist/notes/branches.d.ts +7 -1
  154. package/dist/notes/branches.d.ts.map +1 -1
  155. package/dist/notes/branches.js +31 -3
  156. package/dist/notes/branches.js.map +1 -1
  157. package/dist/notes/cold-start.d.ts +42 -3
  158. package/dist/notes/cold-start.d.ts.map +1 -1
  159. package/dist/notes/cold-start.js +144 -24
  160. package/dist/notes/cold-start.js.map +1 -1
  161. package/dist/notes/credit.d.ts +37 -0
  162. package/dist/notes/credit.d.ts.map +1 -0
  163. package/dist/notes/credit.js +78 -0
  164. package/dist/notes/credit.js.map +1 -0
  165. package/dist/notes/every-repo.d.ts +18 -0
  166. package/dist/notes/every-repo.d.ts.map +1 -0
  167. package/dist/notes/every-repo.js +86 -0
  168. package/dist/notes/every-repo.js.map +1 -0
  169. package/dist/notes/find-notes.d.ts +17 -0
  170. package/dist/notes/find-notes.d.ts.map +1 -0
  171. package/dist/notes/find-notes.js +48 -0
  172. package/dist/notes/find-notes.js.map +1 -0
  173. package/dist/notes/flatten.d.ts +31 -0
  174. package/dist/notes/flatten.d.ts.map +1 -0
  175. package/dist/notes/flatten.js +73 -0
  176. package/dist/notes/flatten.js.map +1 -0
  177. package/dist/notes/git-facts.d.ts +2 -0
  178. package/dist/notes/git-facts.d.ts.map +1 -1
  179. package/dist/notes/git-facts.js +6 -0
  180. package/dist/notes/git-facts.js.map +1 -1
  181. package/dist/notes/guardrails.d.ts +8 -0
  182. package/dist/notes/guardrails.d.ts.map +1 -0
  183. package/dist/notes/guardrails.js +38 -0
  184. package/dist/notes/guardrails.js.map +1 -0
  185. package/dist/notes/home.d.ts +24 -6
  186. package/dist/notes/home.d.ts.map +1 -1
  187. package/dist/notes/home.js +82 -15
  188. package/dist/notes/home.js.map +1 -1
  189. package/dist/notes/learning-fields.d.ts +102 -0
  190. package/dist/notes/learning-fields.d.ts.map +1 -0
  191. package/dist/notes/learning-fields.js +214 -0
  192. package/dist/notes/learning-fields.js.map +1 -0
  193. package/dist/notes/lesson-index.d.ts +13 -0
  194. package/dist/notes/lesson-index.d.ts.map +1 -0
  195. package/dist/notes/lesson-index.js +135 -0
  196. package/dist/notes/lesson-index.js.map +1 -0
  197. package/dist/notes/linked-learnings.d.ts +8 -0
  198. package/dist/notes/linked-learnings.d.ts.map +1 -0
  199. package/dist/notes/linked-learnings.js +113 -0
  200. package/dist/notes/linked-learnings.js.map +1 -0
  201. package/dist/notes/memory-notes.d.ts +71 -0
  202. package/dist/notes/memory-notes.d.ts.map +1 -0
  203. package/dist/notes/memory-notes.js +239 -0
  204. package/dist/notes/memory-notes.js.map +1 -0
  205. package/dist/notes/note-gate.d.ts +42 -0
  206. package/dist/notes/note-gate.d.ts.map +1 -0
  207. package/dist/notes/note-gate.js +181 -0
  208. package/dist/notes/note-gate.js.map +1 -0
  209. package/dist/notes/notes.d.ts +29 -85
  210. package/dist/notes/notes.d.ts.map +1 -1
  211. package/dist/notes/notes.js +69 -254
  212. package/dist/notes/notes.js.map +1 -1
  213. package/dist/notes/pr-reviews.d.ts +35 -7
  214. package/dist/notes/pr-reviews.d.ts.map +1 -1
  215. package/dist/notes/pr-reviews.js +156 -46
  216. package/dist/notes/pr-reviews.js.map +1 -1
  217. package/dist/notes/replace.d.ts +14 -0
  218. package/dist/notes/replace.d.ts.map +1 -0
  219. package/dist/notes/replace.js +38 -0
  220. package/dist/notes/replace.js.map +1 -0
  221. package/dist/notes/repo-notes-dir.d.ts +2 -0
  222. package/dist/notes/repo-notes-dir.d.ts.map +1 -0
  223. package/dist/notes/repo-notes-dir.js +16 -0
  224. package/dist/notes/repo-notes-dir.js.map +1 -0
  225. package/dist/notes/secrets.d.ts +28 -0
  226. package/dist/notes/secrets.d.ts.map +1 -0
  227. package/dist/notes/secrets.js +362 -0
  228. package/dist/notes/secrets.js.map +1 -0
  229. package/dist/notes/targets.d.ts +37 -0
  230. package/dist/notes/targets.d.ts.map +1 -0
  231. package/dist/notes/targets.js +108 -0
  232. package/dist/notes/targets.js.map +1 -0
  233. package/dist/notes/team-check.d.ts +22 -0
  234. package/dist/notes/team-check.d.ts.map +1 -0
  235. package/dist/notes/team-check.js +130 -0
  236. package/dist/notes/team-check.js.map +1 -0
  237. package/dist/notes/trail-home.d.ts +3 -0
  238. package/dist/notes/trail-home.d.ts.map +1 -0
  239. package/dist/notes/trail-home.js +12 -0
  240. package/dist/notes/trail-home.js.map +1 -0
  241. package/dist/skills/anchors-cli.d.ts +33 -0
  242. package/dist/skills/anchors-cli.d.ts.map +1 -0
  243. package/dist/skills/anchors-cli.js +274 -0
  244. package/dist/skills/anchors-cli.js.map +1 -0
  245. package/dist/skills/anchors-git.d.ts +29 -0
  246. package/dist/skills/anchors-git.d.ts.map +1 -0
  247. package/dist/skills/anchors-git.js +241 -0
  248. package/dist/skills/anchors-git.js.map +1 -0
  249. package/dist/skills/anchors-wide.d.ts +25 -0
  250. package/dist/skills/anchors-wide.d.ts.map +1 -0
  251. package/dist/skills/anchors-wide.js +481 -0
  252. package/dist/skills/anchors-wide.js.map +1 -0
  253. package/dist/skills/anchors.d.ts +32 -0
  254. package/dist/skills/anchors.d.ts.map +1 -0
  255. package/dist/skills/anchors.js +485 -0
  256. package/dist/skills/anchors.js.map +1 -0
  257. package/dist/skills/answers-prompt.d.ts +13 -0
  258. package/dist/skills/answers-prompt.d.ts.map +1 -0
  259. package/dist/skills/answers-prompt.js +83 -0
  260. package/dist/skills/answers-prompt.js.map +1 -0
  261. package/dist/skills/check-result.d.ts +26 -0
  262. package/dist/skills/check-result.d.ts.map +1 -0
  263. package/dist/skills/check-result.js +46 -0
  264. package/dist/skills/check-result.js.map +1 -0
  265. package/dist/skills/codex-sandbox.d.ts +6 -0
  266. package/dist/skills/codex-sandbox.d.ts.map +1 -0
  267. package/dist/skills/codex-sandbox.js +55 -0
  268. package/dist/skills/codex-sandbox.js.map +1 -0
  269. package/dist/skills/compile-split.d.ts +57 -0
  270. package/dist/skills/compile-split.d.ts.map +1 -0
  271. package/dist/skills/compile-split.js +532 -0
  272. package/dist/skills/compile-split.js.map +1 -0
  273. package/dist/skills/compile-version.d.ts +37 -0
  274. package/dist/skills/compile-version.d.ts.map +1 -0
  275. package/dist/skills/compile-version.js +56 -0
  276. package/dist/skills/compile-version.js.map +1 -0
  277. package/dist/skills/compile-waits.d.ts +12 -0
  278. package/dist/skills/compile-waits.d.ts.map +1 -0
  279. package/dist/skills/compile-waits.js +52 -0
  280. package/dist/skills/compile-waits.js.map +1 -0
  281. package/dist/skills/compile-words.d.ts +82 -0
  282. package/dist/skills/compile-words.d.ts.map +1 -0
  283. package/dist/skills/compile-words.js +385 -0
  284. package/dist/skills/compile-words.js.map +1 -0
  285. package/dist/skills/compile.d.ts +35 -0
  286. package/dist/skills/compile.d.ts.map +1 -0
  287. package/dist/skills/compile.js +488 -0
  288. package/dist/skills/compile.js.map +1 -0
  289. package/dist/skills/credit-facts.d.ts +8 -0
  290. package/dist/skills/credit-facts.d.ts.map +1 -0
  291. package/dist/skills/credit-facts.js +32 -0
  292. package/dist/skills/credit-facts.js.map +1 -0
  293. package/dist/skills/directive-words.d.ts +11 -0
  294. package/dist/skills/directive-words.d.ts.map +1 -0
  295. package/dist/skills/directive-words.js +33 -0
  296. package/dist/skills/directive-words.js.map +1 -0
  297. package/dist/skills/fidelity.d.ts +42 -0
  298. package/dist/skills/fidelity.d.ts.map +1 -0
  299. package/dist/skills/fidelity.js +138 -0
  300. package/dist/skills/fidelity.js.map +1 -0
  301. package/dist/skills/forget-notice.d.ts +44 -0
  302. package/dist/skills/forget-notice.d.ts.map +1 -0
  303. package/dist/skills/forget-notice.js +131 -0
  304. package/dist/skills/forget-notice.js.map +1 -0
  305. package/dist/skills/found-skill.d.ts +35 -0
  306. package/dist/skills/found-skill.d.ts.map +1 -0
  307. package/dist/skills/found-skill.js +66 -0
  308. package/dist/skills/found-skill.js.map +1 -0
  309. package/dist/skills/front-version.d.ts +12 -0
  310. package/dist/skills/front-version.d.ts.map +1 -0
  311. package/dist/skills/front-version.js +87 -0
  312. package/dist/skills/front-version.js.map +1 -0
  313. package/dist/skills/host-facts.d.ts +51 -0
  314. package/dist/skills/host-facts.d.ts.map +1 -0
  315. package/dist/skills/host-facts.js +134 -0
  316. package/dist/skills/host-facts.js.map +1 -0
  317. package/dist/skills/ledger.d.ts +43 -0
  318. package/dist/skills/ledger.d.ts.map +1 -0
  319. package/dist/skills/ledger.js +336 -0
  320. package/dist/skills/ledger.js.map +1 -0
  321. package/dist/skills/lessons.d.ts +60 -0
  322. package/dist/skills/lessons.d.ts.map +1 -0
  323. package/dist/skills/lessons.js +396 -0
  324. package/dist/skills/lessons.js.map +1 -0
  325. package/dist/skills/never-save.d.ts +5 -0
  326. package/dist/skills/never-save.d.ts.map +1 -0
  327. package/dist/skills/never-save.js +158 -0
  328. package/dist/skills/never-save.js.map +1 -0
  329. package/dist/skills/offer-answers.d.ts +20 -0
  330. package/dist/skills/offer-answers.d.ts.map +1 -0
  331. package/dist/skills/offer-answers.js +51 -0
  332. package/dist/skills/offer-answers.js.map +1 -0
  333. package/dist/skills/own-folder.d.ts +9 -0
  334. package/dist/skills/own-folder.d.ts.map +1 -0
  335. package/dist/skills/own-folder.js +36 -0
  336. package/dist/skills/own-folder.js.map +1 -0
  337. package/dist/skills/params.d.ts +39 -0
  338. package/dist/skills/params.d.ts.map +1 -0
  339. package/dist/skills/params.js +275 -0
  340. package/dist/skills/params.js.map +1 -0
  341. package/dist/skills/person.d.ts +34 -0
  342. package/dist/skills/person.d.ts.map +1 -0
  343. package/dist/skills/person.js +102 -0
  344. package/dist/skills/person.js.map +1 -0
  345. package/dist/skills/probe-clean.d.ts +9 -0
  346. package/dist/skills/probe-clean.d.ts.map +1 -0
  347. package/dist/skills/probe-clean.js +48 -0
  348. package/dist/skills/probe-clean.js.map +1 -0
  349. package/dist/skills/probes.d.ts +26 -0
  350. package/dist/skills/probes.d.ts.map +1 -0
  351. package/dist/skills/probes.js +225 -0
  352. package/dist/skills/probes.js.map +1 -0
  353. package/dist/skills/ran-less.d.ts +5 -0
  354. package/dist/skills/ran-less.d.ts.map +1 -0
  355. package/dist/skills/ran-less.js +51 -0
  356. package/dist/skills/ran-less.js.map +1 -0
  357. package/dist/skills/recall.d.ts +119 -0
  358. package/dist/skills/recall.d.ts.map +1 -0
  359. package/dist/skills/recall.js +370 -0
  360. package/dist/skills/recall.js.map +1 -0
  361. package/dist/skills/receipts.d.ts +44 -0
  362. package/dist/skills/receipts.d.ts.map +1 -0
  363. package/dist/skills/receipts.js +223 -0
  364. package/dist/skills/receipts.js.map +1 -0
  365. package/dist/skills/risk-delta.d.ts +32 -0
  366. package/dist/skills/risk-delta.d.ts.map +1 -0
  367. package/dist/skills/risk-delta.js +56 -0
  368. package/dist/skills/risk-delta.js.map +1 -0
  369. package/dist/skills/risk.d.ts +73 -0
  370. package/dist/skills/risk.d.ts.map +1 -0
  371. package/dist/skills/risk.js +396 -0
  372. package/dist/skills/risk.js.map +1 -0
  373. package/dist/skills/run-checkout.d.ts +4 -0
  374. package/dist/skills/run-checkout.d.ts.map +1 -0
  375. package/dist/skills/run-checkout.js +37 -0
  376. package/dist/skills/run-checkout.js.map +1 -0
  377. package/dist/skills/runblock.d.ts +45 -0
  378. package/dist/skills/runblock.d.ts.map +1 -0
  379. package/dist/skills/runblock.js +222 -0
  380. package/dist/skills/runblock.js.map +1 -0
  381. package/dist/skills/save-parse.d.ts +42 -0
  382. package/dist/skills/save-parse.d.ts.map +1 -0
  383. package/dist/skills/save-parse.js +172 -0
  384. package/dist/skills/save-parse.js.map +1 -0
  385. package/dist/skills/save-store.d.ts +12 -0
  386. package/dist/skills/save-store.d.ts.map +1 -0
  387. package/dist/skills/save-store.js +22 -0
  388. package/dist/skills/save-store.js.map +1 -0
  389. package/dist/skills/settings.d.ts +38 -0
  390. package/dist/skills/settings.d.ts.map +1 -0
  391. package/dist/skills/settings.js +133 -0
  392. package/dist/skills/settings.js.map +1 -0
  393. package/dist/skills/skill-diff.d.ts +40 -0
  394. package/dist/skills/skill-diff.d.ts.map +1 -0
  395. package/dist/skills/skill-diff.js +191 -0
  396. package/dist/skills/skill-diff.js.map +1 -0
  397. package/dist/skills/skill-file.d.ts +24 -0
  398. package/dist/skills/skill-file.d.ts.map +1 -0
  399. package/dist/skills/skill-file.js +97 -0
  400. package/dist/skills/skill-file.js.map +1 -0
  401. package/dist/skills/skill-rebuild.d.ts +27 -0
  402. package/dist/skills/skill-rebuild.d.ts.map +1 -0
  403. package/dist/skills/skill-rebuild.js +85 -0
  404. package/dist/skills/skill-rebuild.js.map +1 -0
  405. package/dist/skills/skillmd.d.ts +17 -0
  406. package/dist/skills/skillmd.d.ts.map +1 -0
  407. package/dist/skills/skillmd.js +219 -0
  408. package/dist/skills/skillmd.js.map +1 -0
  409. package/dist/skills/skills.d.ts +2 -0
  410. package/dist/skills/skills.d.ts.map +1 -1
  411. package/dist/skills/skills.js +1 -1
  412. package/dist/skills/skills.js.map +1 -1
  413. package/dist/skills/staleness.d.ts +27 -0
  414. package/dist/skills/staleness.d.ts.map +1 -0
  415. package/dist/skills/staleness.js +178 -0
  416. package/dist/skills/staleness.js.map +1 -0
  417. package/dist/skills/state.d.ts +36 -0
  418. package/dist/skills/state.d.ts.map +1 -0
  419. package/dist/skills/state.js +259 -0
  420. package/dist/skills/state.js.map +1 -0
  421. package/dist/skills/store-fs.d.ts +77 -0
  422. package/dist/skills/store-fs.d.ts.map +1 -0
  423. package/dist/skills/store-fs.js +194 -0
  424. package/dist/skills/store-fs.js.map +1 -0
  425. package/dist/skills/store-held.d.ts +44 -0
  426. package/dist/skills/store-held.d.ts.map +1 -0
  427. package/dist/skills/store-held.js +147 -0
  428. package/dist/skills/store-held.js.map +1 -0
  429. package/dist/skills/store.d.ts +73 -0
  430. package/dist/skills/store.d.ts.map +1 -0
  431. package/dist/skills/store.js +279 -0
  432. package/dist/skills/store.js.map +1 -0
  433. package/dist/skills/types.d.ts +422 -0
  434. package/dist/skills/types.d.ts.map +1 -0
  435. package/dist/skills/types.js +2 -0
  436. package/dist/skills/types.js.map +1 -0
  437. package/dist/skills/validate.d.ts +11 -0
  438. package/dist/skills/validate.d.ts.map +1 -0
  439. package/dist/skills/validate.js +112 -0
  440. package/dist/skills/validate.js.map +1 -0
  441. package/dist/skills/versions-fs.d.ts +45 -0
  442. package/dist/skills/versions-fs.d.ts.map +1 -0
  443. package/dist/skills/versions-fs.js +234 -0
  444. package/dist/skills/versions-fs.js.map +1 -0
  445. package/dist/skills/versions.d.ts +56 -0
  446. package/dist/skills/versions.d.ts.map +1 -0
  447. package/dist/skills/versions.js +351 -0
  448. package/dist/skills/versions.js.map +1 -0
  449. package/dist/telemetry/contract.d.ts.map +1 -1
  450. package/dist/telemetry/contract.js +8 -6
  451. package/dist/telemetry/contract.js.map +1 -1
  452. package/dist/telemetry/notice.d.ts.map +1 -1
  453. package/dist/telemetry/notice.js +3 -1
  454. package/dist/telemetry/notice.js.map +1 -1
  455. package/dist/trace/check-reads.d.ts +36 -0
  456. package/dist/trace/check-reads.d.ts.map +1 -0
  457. package/dist/trace/check-reads.js +57 -0
  458. package/dist/trace/check-reads.js.map +1 -0
  459. package/dist/trace/checks.d.ts +63 -0
  460. package/dist/trace/checks.d.ts.map +1 -0
  461. package/dist/trace/checks.js +487 -0
  462. package/dist/trace/checks.js.map +1 -0
  463. package/dist/trace/claude.d.ts +124 -0
  464. package/dist/trace/claude.d.ts.map +1 -0
  465. package/dist/trace/claude.js +303 -0
  466. package/dist/trace/claude.js.map +1 -0
  467. package/dist/trace/codex-exec.d.ts +22 -0
  468. package/dist/trace/codex-exec.d.ts.map +1 -0
  469. package/dist/trace/codex-exec.js +129 -0
  470. package/dist/trace/codex-exec.js.map +1 -0
  471. package/dist/trace/codex-meta.d.ts +23 -0
  472. package/dist/trace/codex-meta.d.ts.map +1 -0
  473. package/dist/trace/codex-meta.js +112 -0
  474. package/dist/trace/codex-meta.js.map +1 -0
  475. package/dist/trace/codex.d.ts +33 -0
  476. package/dist/trace/codex.d.ts.map +1 -0
  477. package/dist/trace/codex.js +485 -0
  478. package/dist/trace/codex.js.map +1 -0
  479. package/dist/trace/cursor.d.ts +16 -0
  480. package/dist/trace/cursor.d.ts.map +1 -0
  481. package/dist/trace/cursor.js +133 -0
  482. package/dist/trace/cursor.js.map +1 -0
  483. package/dist/trace/dialect.d.ts +43 -0
  484. package/dist/trace/dialect.d.ts.map +1 -0
  485. package/dist/trace/dialect.js +95 -0
  486. package/dist/trace/dialect.js.map +1 -0
  487. package/dist/trace/epochs.d.ts +10 -0
  488. package/dist/trace/epochs.d.ts.map +1 -0
  489. package/dist/trace/epochs.js +16 -0
  490. package/dist/trace/epochs.js.map +1 -0
  491. package/dist/trace/failure.d.ts +15 -0
  492. package/dist/trace/failure.d.ts.map +1 -0
  493. package/dist/trace/failure.js +69 -0
  494. package/dist/trace/failure.js.map +1 -0
  495. package/dist/trace/gate-file.d.ts +71 -0
  496. package/dist/trace/gate-file.d.ts.map +1 -0
  497. package/dist/trace/gate-file.js +329 -0
  498. package/dist/trace/gate-file.js.map +1 -0
  499. package/dist/trace/guard-fast.d.ts +22 -0
  500. package/dist/trace/guard-fast.d.ts.map +1 -0
  501. package/dist/trace/guard-fast.js +213 -0
  502. package/dist/trace/guard-fast.js.map +1 -0
  503. package/dist/trace/host.d.ts +40 -0
  504. package/dist/trace/host.d.ts.map +1 -0
  505. package/dist/trace/host.js +84 -0
  506. package/dist/trace/host.js.map +1 -0
  507. package/dist/trace/housekeeping.d.ts +5 -0
  508. package/dist/trace/housekeeping.d.ts.map +1 -0
  509. package/dist/trace/housekeeping.js +93 -0
  510. package/dist/trace/housekeeping.js.map +1 -0
  511. package/dist/trace/jobs.d.ts +52 -0
  512. package/dist/trace/jobs.d.ts.map +1 -0
  513. package/dist/trace/jobs.js +182 -0
  514. package/dist/trace/jobs.js.map +1 -0
  515. package/dist/trace/known-repo.d.ts +3 -0
  516. package/dist/trace/known-repo.d.ts.map +1 -0
  517. package/dist/trace/known-repo.js +55 -0
  518. package/dist/trace/known-repo.js.map +1 -0
  519. package/dist/trace/pool.d.ts +40 -0
  520. package/dist/trace/pool.d.ts.map +1 -0
  521. package/dist/trace/pool.js +154 -0
  522. package/dist/trace/pool.js.map +1 -0
  523. package/dist/trace/redact.d.ts +8 -0
  524. package/dist/trace/redact.d.ts.map +1 -0
  525. package/dist/trace/redact.js +63 -0
  526. package/dist/trace/redact.js.map +1 -0
  527. package/dist/trace/repairs.d.ts +27 -0
  528. package/dist/trace/repairs.d.ts.map +1 -0
  529. package/dist/trace/repairs.js +303 -0
  530. package/dist/trace/repairs.js.map +1 -0
  531. package/dist/trace/run-calls.d.ts +82 -0
  532. package/dist/trace/run-calls.d.ts.map +1 -0
  533. package/dist/trace/run-calls.js +331 -0
  534. package/dist/trace/run-calls.js.map +1 -0
  535. package/dist/trace/run-join.d.ts +20 -0
  536. package/dist/trace/run-join.d.ts.map +1 -0
  537. package/dist/trace/run-join.js +99 -0
  538. package/dist/trace/run-join.js.map +1 -0
  539. package/dist/trace/run-sheets.d.ts +26 -0
  540. package/dist/trace/run-sheets.d.ts.map +1 -0
  541. package/dist/trace/run-sheets.js +145 -0
  542. package/dist/trace/run-sheets.js.map +1 -0
  543. package/dist/trace/run-turns.d.ts +24 -0
  544. package/dist/trace/run-turns.d.ts.map +1 -0
  545. package/dist/trace/run-turns.js +67 -0
  546. package/dist/trace/run-turns.js.map +1 -0
  547. package/dist/trace/run-verdict.d.ts +24 -0
  548. package/dist/trace/run-verdict.d.ts.map +1 -0
  549. package/dist/trace/run-verdict.js +176 -0
  550. package/dist/trace/run-verdict.js.map +1 -0
  551. package/dist/trace/runs.d.ts +54 -0
  552. package/dist/trace/runs.d.ts.map +1 -0
  553. package/dist/trace/runs.js +501 -0
  554. package/dist/trace/runs.js.map +1 -0
  555. package/dist/trace/seen-cache.d.ts +9 -0
  556. package/dist/trace/seen-cache.d.ts.map +1 -0
  557. package/dist/trace/seen-cache.js +46 -0
  558. package/dist/trace/seen-cache.js.map +1 -0
  559. package/dist/trace/shell-scan.d.ts +52 -0
  560. package/dist/trace/shell-scan.d.ts.map +1 -0
  561. package/dist/trace/shell-scan.js +318 -0
  562. package/dist/trace/shell-scan.js.map +1 -0
  563. package/dist/trace/shell-words.d.ts +91 -0
  564. package/dist/trace/shell-words.d.ts.map +1 -0
  565. package/dist/trace/shell-words.js +558 -0
  566. package/dist/trace/shell-words.js.map +1 -0
  567. package/dist/trace/shell.d.ts +91 -0
  568. package/dist/trace/shell.d.ts.map +1 -0
  569. package/dist/trace/shell.js +435 -0
  570. package/dist/trace/shell.js.map +1 -0
  571. package/dist/trace/skill-session.d.ts +64 -0
  572. package/dist/trace/skill-session.d.ts.map +1 -0
  573. package/dist/trace/skill-session.js +232 -0
  574. package/dist/trace/skill-session.js.map +1 -0
  575. package/dist/trace/state.d.ts +27 -0
  576. package/dist/trace/state.d.ts.map +1 -0
  577. package/dist/trace/state.js +98 -0
  578. package/dist/trace/state.js.map +1 -0
  579. package/dist/trace/tamper-code.d.ts +9 -0
  580. package/dist/trace/tamper-code.d.ts.map +1 -0
  581. package/dist/trace/tamper-code.js +174 -0
  582. package/dist/trace/tamper-code.js.map +1 -0
  583. package/dist/trace/tamper-git.d.ts +12 -0
  584. package/dist/trace/tamper-git.d.ts.map +1 -0
  585. package/dist/trace/tamper-git.js +77 -0
  586. package/dist/trace/tamper-git.js.map +1 -0
  587. package/dist/trace/tamper.d.ts +12 -0
  588. package/dist/trace/tamper.d.ts.map +1 -0
  589. package/dist/trace/tamper.js +405 -0
  590. package/dist/trace/tamper.js.map +1 -0
  591. package/dist/trace/typed.d.ts +30 -0
  592. package/dist/trace/typed.d.ts.map +1 -0
  593. package/dist/trace/typed.js +132 -0
  594. package/dist/trace/typed.js.map +1 -0
  595. package/dist/trace/types.d.ts +477 -0
  596. package/dist/trace/types.d.ts.map +1 -0
  597. package/dist/trace/types.js +12 -0
  598. package/dist/trace/types.js.map +1 -0
  599. package/dist/trace/wall-state.d.ts +86 -0
  600. package/dist/trace/wall-state.d.ts.map +1 -0
  601. package/dist/trace/wall-state.js +279 -0
  602. package/dist/trace/wall-state.js.map +1 -0
  603. package/dist/trace/walls-glob.d.ts +11 -0
  604. package/dist/trace/walls-glob.d.ts.map +1 -0
  605. package/dist/trace/walls-glob.js +264 -0
  606. package/dist/trace/walls-glob.js.map +1 -0
  607. package/dist/trace/walls-quoted.d.ts +25 -0
  608. package/dist/trace/walls-quoted.d.ts.map +1 -0
  609. package/dist/trace/walls-quoted.js +81 -0
  610. package/dist/trace/walls-quoted.js.map +1 -0
  611. package/dist/trace/walls.d.ts +40 -0
  612. package/dist/trace/walls.d.ts.map +1 -0
  613. package/dist/trace/walls.js +318 -0
  614. package/dist/trace/walls.js.map +1 -0
  615. package/dist/upkeep.d.ts +1 -1
  616. package/dist/upkeep.d.ts.map +1 -1
  617. package/dist/upkeep.js +4 -1
  618. package/dist/upkeep.js.map +1 -1
  619. package/dist/util/actions-folder.d.ts +2 -0
  620. package/dist/util/actions-folder.d.ts.map +1 -0
  621. package/dist/util/actions-folder.js +9 -0
  622. package/dist/util/actions-folder.js.map +1 -0
  623. package/dist/util/front-matter.d.ts +31 -4
  624. package/dist/util/front-matter.d.ts.map +1 -1
  625. package/dist/util/front-matter.js +95 -3
  626. package/dist/util/front-matter.js.map +1 -1
  627. package/dist/util/private-file.d.ts +14 -0
  628. package/dist/util/private-file.d.ts.map +1 -0
  629. package/dist/util/private-file.js +82 -0
  630. package/dist/util/private-file.js.map +1 -0
  631. package/dist/util/private-fs.d.ts +25 -0
  632. package/dist/util/private-fs.d.ts.map +1 -0
  633. package/dist/util/private-fs.js +253 -0
  634. package/dist/util/private-fs.js.map +1 -0
  635. package/dist/util/state.d.ts.map +1 -1
  636. package/dist/util/state.js +3 -0
  637. package/dist/util/state.js.map +1 -1
  638. package/dist/vendor/tree-sitter-swift/LICENSE +21 -0
  639. package/dist/vendor/tree-sitter-swift/node-types.json +30694 -0
  640. package/dist/vendor/tree-sitter-swift/prebuilds/darwin-arm64/tree-sitter-swift.node +0 -0
  641. package/dist/vendor/tree-sitter-swift/prebuilds/darwin-x64/tree-sitter-swift.node +0 -0
  642. package/dist/vendor/tree-sitter-swift/prebuilds/linux-arm64/tree-sitter-swift.node +0 -0
  643. package/dist/vendor/tree-sitter-swift/prebuilds/linux-x64/tree-sitter-swift.node +0 -0
  644. package/dist/vendor/tree-sitter-swift/prebuilds/win32-arm64/tree-sitter-swift.node +0 -0
  645. package/dist/vendor/tree-sitter-swift/prebuilds/win32-x64/tree-sitter-swift.node +0 -0
  646. package/dist/viewer/app.js +2 -2
  647. package/package.json +10 -7
  648. package/scripts/run-tests.mjs +14 -2
  649. package/scripts/stamp-telemetry-key.mjs +8 -5
  650. package/scripts/vendor-grammars.mjs +35 -0
@@ -0,0 +1,222 @@
1
+ /**
2
+ * What a skill brings back (design 4.15, spec 11): the run block a job or
3
+ * name cue injects, the check line a status question gets, the injection
4
+ * recorded for either, and the one line the person sees.
5
+ *
6
+ * The block is past tense and attributed ("fits", "last worked Oct 14",
7
+ * "what worked was step 5"), never an order: the agent starts from the
8
+ * steps because they worked here before. At most 1,200 characters. Every
9
+ * value is flattened to one line and every line after the header starts
10
+ * with two spaces, so nothing in a skill file can open a `[trail]` line.
11
+ *
12
+ * A step that can't be undone is said once, after its group: where the
13
+ * host can ask the person, Claude Code will ask before the group's first
14
+ * step and the agent waits for that; where it can't (headless, permissions
15
+ * skipped, another host), the agent shows the person the command instead
16
+ * of running it (D17). The words never tell the agent not to ask and never
17
+ * say what one yes covers (D101): an agent read those as a bypass.
18
+ */
19
+ import { randomBytes } from 'node:crypto';
20
+ import { nameOf } from './recall.js';
21
+ import { flatLine } from '../notes/flatten.js';
22
+ import { monthDay } from './compile-words.js';
23
+ import { fillParams } from './params.js';
24
+ import { gatedGroups, gatedKind } from './risk.js';
25
+ import { neverSave } from './never-save.js';
26
+ import { checkFamilyOf } from '../trace/checks.js';
27
+ import { commandKind } from '../trace/shell.js';
28
+ import { beforeYouStart } from './skillmd.js';
29
+ import { probePassWords } from './probes.js';
30
+ import { isGuardrailLesson, lessonLines, lessonRefused, readLessons } from './lessons.js';
31
+ import { goneAnchors, outOfDateLine } from './anchors.js';
32
+ import { WIDE_SCAN_MS } from './anchors-wide.js';
33
+ export { runProbes, probePassWords, readyProbes, PROBE_BUDGET_MS } from './probes.js';
34
+ export const RUN_BLOCK_MAX = 1200;
35
+ /** A command or value on one line, never cut (a cut command would be wrong; an overlong block becomes the pointer). */
36
+ const flat = (t) => flatLine(t, 4000);
37
+ const prose = (t, max = 200) => flatLine(t, max);
38
+ /** 'Oct 14' for a local date (`2026-10-14`) or an ISO time, in local time. */
39
+ export function dayWords(d) {
40
+ if (!d)
41
+ return 'an earlier day';
42
+ const m = /^(\d{4})-(\d{2})-(\d{2})$/.exec(d);
43
+ return m ? monthDay(new Date(Number(m[1]), Number(m[2]) - 1, Number(m[3])).toISOString()) : monthDay(d);
44
+ }
45
+ const OWNER = { personal: 'yours', repo: "the repo's", team: "the team's" };
46
+ /** 'last worked Oct 14', or 'saved Oct 14' for a skill that never checked out. */
47
+ function whenWords(c) {
48
+ return c.state?.lastWorked ? `last worked ${dayWords(c.state.lastWorked)}` : `saved ${dayWords(c.state?.addedAt ?? null)}`;
49
+ }
50
+ const listWords = (ns) => (ns.length === 2 ? `${ns[0]} and ${ns[1]}` : `${ns.slice(0, -1).join(', ')} and ${ns[ns.length - 1]}`);
51
+ function gatedNote(steps, canAsk) {
52
+ const one = steps.length === 1;
53
+ const which = one ? `step ${steps[0]}` : `steps ${listWords(steps)}`;
54
+ // D101: never "don't ask", never what one yes covers (that stays in pre-bash-skills' gate logic).
55
+ // D118 a: a step whose ask was denied is not run again that turn (the lab's agent retried a push three times).
56
+ if (!canAsk) {
57
+ return one
58
+ ? ` This session can't ask the person, so don't run ${which} (it can't be undone), not even after a yes in chat; show them the command to run themselves.`
59
+ : ` This session can't ask the person, so don't run ${which} (they can't be undone), not even after a yes in chat; show them the commands to run themselves.`;
60
+ }
61
+ const retry = ` If they say no, don't retry this turn; ask them to run ${one ? 'it' : 'them'}.`;
62
+ return one
63
+ ? ` Claude Code will ask the person before ${which} (it can't be undone); wait for that.${retry}`
64
+ : ` Claude Code will ask the person before step ${steps[0]} (${which} can't be undone); wait for that.${retry}`;
65
+ }
66
+ /** What a tests or query check shows by default: "step n passing" already says it. */
67
+ const PLAIN_SHOWS = new Set(['the tests pass', 'rows come back']);
68
+ function checkText(c, values) {
69
+ const s = c.skill;
70
+ if (!s.check)
71
+ return null;
72
+ const shows = s.checkShows ? prose(fillParams(s.checkShows, values)) : s.meta['check-tool'] ? 'READY' : null;
73
+ return { text: flat(fillParams(s.check, values)), shows };
74
+ }
75
+ /** 1b: a personal skill's lessons from its own folder (4.16); none for a skill that isn't in one. */
76
+ function lessonsOf(c) {
77
+ return c.ref.scope === 'personal' && c.ref.dir ? readLessons(c.ref.dir) : [];
78
+ }
79
+ /** 1b: the anchors gone where the candidate was found (4.18; local file reads only). Phase 2 (4.13): a job cue's block may scan the CLI (its own 150 ms); a compaction's (SessionStart) reads only the cache. */
80
+ function goneOf(c, scan, until) {
81
+ return c.here ? goneAnchors(c.skill, c.here.checkout, c.here.env ?? process.env, { scan, deadline: Math.min(until ?? Infinity, Date.now() + WIDE_SCAN_MS) }) : [];
82
+ }
83
+ /**
84
+ * canAsk: interactive entry, permission_mode in hostFacts.askModes, host claude (4.15 step 5).
85
+ * 1b: `lessons` (default: the skill folder's) end the block, guardrail-kind first (4.16); `gone` (default: the
86
+ * anchors gone where the candidate was found) opens it with the out-of-date line (4.18). Both count toward 1,200:
87
+ * lessons are the second thing cut, oldest first; guardrail-kind lessons and the out-of-date line never are.
88
+ */
89
+ export function runBlock(c, ctx) {
90
+ const s = c.skill;
91
+ const name = nameOf(c);
92
+ const ood = outOfDateLine(name, ctx.gone ?? goneOf(c, ctx.header === 'job', ctx.anchorDeadline));
93
+ const opening = ood ? [`[trail] ${ood}`] : [];
94
+ // A lesson is information the person kept (J07), filled like the steps; one edited by hand to skip the ask, or to
95
+ // hold a refused or gated command, is left out (D88, D101, 4.14 step 3: lessonRefused).
96
+ const kept = (ctx.lessons ?? lessonsOf(c)).map((l) => ({ ...l, text: fillParams(l.text, ctx.values) })).filter((l) => !lessonRefused(l.text));
97
+ const guardLines = lessonLines(kept.filter(isGuardrailLesson)).map((l) => ` ${l}`);
98
+ const lessonRest = lessonLines(kept.filter((l) => !isGuardrailLesson(l))).map((l) => ` ${l}`);
99
+ const owner = `${OWNER[c.ref.scope] ?? 'yours'}, v${prose(s.meta.version || '1', 12)}, ${whenWords(c)}`;
100
+ const header = ctx.header === 'compact'
101
+ ? `[trail] You were partway through skill ${name} when the conversation was compacted. Its steps (${owner}):`
102
+ : `[trail] Skill ${name} fits (${owner}).${ctx.lastFail ? ` Last time step ${ctx.lastFail.step} failed; watch its output.` : ''} Start from these exact steps, in order:`;
103
+ const failed = ctx.probes.filter((p) => !p.ok).map((p) => ` ready: ${prose(p.why ?? p.probe)}.${p.fix ? ` ${prose(p.fix)}` : ''}`);
104
+ const passedWords = ctx.probes.filter((p) => p.ok).map((p) => probePassWords(p.probe)).filter((w) => !!w);
105
+ const passed = passedWords.length ? ` ready: ${passedWords.join(', ')}` : null;
106
+ // D116 item 5: what the person does first (a login the run fed keystrokes into, kept out of the steps).
107
+ const before = beforeYouStart(s.meta).map((l) => ` before you start: ${prose(l)}.`);
108
+ const checkFirst = String(s.meta['check-first'] ?? '').split(' ; ').map((x) => x.trim()).filter(Boolean).map((x) => ` check first: ${flat(x)}`);
109
+ const groups = gatedGroups(s.steps);
110
+ const steps = [];
111
+ for (const st of s.steps) {
112
+ const note = st.wait ? ' (a wait: run it in the background if it may take over 2 minutes)' : st.bg ? ' (in the background)' : '';
113
+ steps.push(` ${st.n} ${flat(fillParams(st.cmd, ctx.values))}${note}`);
114
+ const g = groups.find((x) => x.steps[x.steps.length - 1] === st.n);
115
+ if (g)
116
+ steps.push(gatedNote(g.steps, ctx.canAsk));
117
+ }
118
+ const chk = checkText(c, ctx.values);
119
+ let check = null;
120
+ if (chk) {
121
+ const asStep = [...s.steps].reverse().find((x) => x.cmd === s.check);
122
+ if (asStep && !s.meta['check-tool']) {
123
+ check = chk.shows && !PLAIN_SHOWS.has(chk.shows) ? ` check: step ${asStep.n} passing is the check (it should show ${chk.shows}).` : ` check: step ${asStep.n} passing is the check.`;
124
+ }
125
+ else
126
+ check = ` check: ${chk.text}${chk.shows ? ` (it should show ${chk.shows})` : ''}`;
127
+ }
128
+ // A line edited by hand to hold a command the risk rules refuse is left out.
129
+ const fails = s.ifFails.filter((l) => !neverSave(l)).slice(0, 2).map((l) => ` If it fails: ${prose(l)}`);
130
+ const notes = ctx.notes.map((n) => ` ${prose(n)}`);
131
+ const footer = ` If a step fails, fix that step and say so. End with "Used skill ${name}".`;
132
+ const build = (o) => [
133
+ ...opening, header, ...failed, ...(o.passed && passed ? [passed] : []), ...before, ...checkFirst, ...steps, ...(check ? [check] : []),
134
+ ...fails.slice(0, o.fails), ...(o.notes ? notes : []), footer, ...guardLines, ...lessonRest.slice(lessonRest.length - o.lessons),
135
+ ].join('\n');
136
+ const all = lessonRest.length;
137
+ for (const o of [
138
+ { notes: true, fails: 2, passed: true, lessons: all }, { notes: false, fails: 2, passed: true, lessons: all },
139
+ ...Array.from({ length: all }, (_, i) => ({ notes: false, fails: 2, passed: true, lessons: all - 1 - i })),
140
+ { notes: false, fails: 1, passed: true, lessons: 0 }, { notes: false, fails: 1, passed: false, lessons: 0 },
141
+ ]) {
142
+ const block = build(o);
143
+ if (block.length <= RUN_BLOCK_MAX)
144
+ return block;
145
+ }
146
+ return [...opening, `[trail] Skill ${name} fits this ask, but its steps are too long to show here. Run trail skills show ${name} and start from them.`].join('\n');
147
+ }
148
+ /** A GET with curl or wget: no other method, no body, no upload. */
149
+ const HTTP_GET = /^(?:curl|wget)\s/;
150
+ const HTTP_WRITES = /\s(?:-X\s*(?!GET\b)\w|--request\s*(?!GET\b)\w|-d\b|--data\b|--data-\w+|-F\b|--form\b|-T\b|--upload-file\b|--post-\w+|--method=(?!GET\b))/i;
151
+ /**
152
+ * D116 item 1: the check is a step that only reads (a status, a view, a log, a GET, a tests or query run), so a
153
+ * status question may run it. A push (it is the step that moved the branch), anything gated, or a command
154
+ * that changes things is not: that skill gets no check line.
155
+ */
156
+ export function readOnlyCheck(s) {
157
+ const cmd = String(s.check ?? '').trim();
158
+ if (!cmd)
159
+ return false;
160
+ if (s.meta['check-tool'])
161
+ return true;
162
+ if (gatedKind(cmd) || s.steps.some((x) => x.cmd === s.check && x.gated))
163
+ return false;
164
+ const fam = checkFamilyOf(cmd, s.meta.job ?? null);
165
+ if (fam)
166
+ return fam !== 'push';
167
+ if (HTTP_GET.test(cmd))
168
+ return !HTTP_WRITES.test(` ${cmd}`);
169
+ return commandKind(cmd) === 'look';
170
+ }
171
+ /** The check line for a status question; '' when the skill has no check, or none that only reads (D116 item 1). */
172
+ export function checkLine(c, values) {
173
+ if (!readOnlyCheck(c.skill))
174
+ return '';
175
+ const chk = checkText(c, values);
176
+ const name = nameOf(c);
177
+ if (!chk)
178
+ return '';
179
+ return `[trail] To check ${name}: ${chk.text}${chk.shows ? ` (it should show ${chk.shows})` : ''}. Answer from what it shows; don't run any other step.`;
180
+ }
181
+ /** D106: a check that shows a `{version}` param, filled with a literal version: what credit expects it to show. */
182
+ function checkVersionOf(c, values) {
183
+ const name = /^\{([A-Za-z_]\w*)\}$/.exec(String(c.skill.checkShows ?? '').trim())?.[1];
184
+ const v = name && c.skill.params.some((p) => p.name === name && p.shape === 'version') ? values[name] : undefined;
185
+ const m = v === undefined ? null : /^v?(\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?)$/.exec(v.trim());
186
+ return m ? { checkVersion: m[1] } : {};
187
+ }
188
+ /** The SkillInjection recorded for a block or check line (live: true for job, name and compact cues). */
189
+ export function injectionFor(c, values, cue, epoch, now = new Date()) {
190
+ const s = c.skill;
191
+ const block = cue !== 'check';
192
+ const tool = s.meta['check-tool'];
193
+ return {
194
+ injId: `i-${randomBytes(3).toString('hex')}`,
195
+ skillId: c.ref.id || s.meta.trail,
196
+ name: c.ref.name || s.name,
197
+ epoch,
198
+ at: now.toISOString(),
199
+ cue,
200
+ params: { ...values },
201
+ steps: block ? s.steps.map((st) => fillParams(st.cmd, values)) : [],
202
+ gated: block ? s.steps.filter((st) => st.gated).map((st) => ({ step: st.n, kind: st.gated })) : [],
203
+ check: s.check ? fillParams(s.check, values) : null,
204
+ ...(tool ? { checkTool: tool } : {}),
205
+ ...checkVersionOf(c, values),
206
+ runId: null,
207
+ live: block,
208
+ // 1b (R30): the asks phrase a job cue fired on, by its sha only.
209
+ ...(cue === 'job' && typeof c.phraseSha === 'string' && /^[0-9a-f]{8}$/.test(c.phraseSha) ? { phraseSha: c.phraseSha } : {}),
210
+ };
211
+ }
212
+ /** g4's open issue 4 (D71 d): the ready probes that failed for a block ride on its injection, for the use line (never counted against the skill). */
213
+ export function withReadyFailed(inj, probes) {
214
+ const failed = probes.filter((p) => !p.ok).map((p) => p.probe);
215
+ return failed.length ? { ...inj, readyFailed: failed } : inj;
216
+ }
217
+ /** 'trail: using skill <name> (v<n>, worked <Mon D>)'. */
218
+ export function useNotice(c) {
219
+ const when = c.state?.lastWorked ? `worked ${dayWords(c.state.lastWorked)}` : `saved ${dayWords(c.state?.addedAt ?? null)}`;
220
+ return `trail: using skill ${nameOf(c)} (v${prose(c.skill.meta.version || '1', 12)}, ${when})`;
221
+ }
222
+ //# sourceMappingURL=runblock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runblock.js","sourceRoot":"","sources":["../../src/skills/runblock.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Reading a `trail skills add` command (design 4.9 step 1), whatever runs it:
3
+ * `trail`, `graft`, `npx @trailhq/trail-code`, `node .../trail.js`,
4
+ * `bash -c "..."`, `eval`, an alias or xargs. `skills add` anywhere in the
5
+ * command is an add; it must read as exactly `skills add <name> --run <id>`,
6
+ * once. Re-exported from `save-gate.ts`, where the design names it.
7
+ *
8
+ * Phase 2 (4.11): `trail skills update <name> --offer <id>`, read stricter
9
+ * still: nothing chained and no root options, since its gate writes a file.
10
+ */
11
+ export interface SkillsAddCmd {
12
+ name: string;
13
+ runId: string;
14
+ flags: string[];
15
+ }
16
+ /** /\bskills\s+add\b/: anywhere in the command, whatever binary, wrapper or path runs it. */
17
+ export declare const SKILLS_ADD_RE: RegExp;
18
+ /** null when the command doesn't parse as `<anything> skills add <name> --run <id>`, or adds more than once. */
19
+ export declare function parseSkillsAdd(command: string): SkillsAddCmd | null;
20
+ export interface SkillsLessonCmd {
21
+ skill: string | null;
22
+ offerId: string;
23
+ flags: string[];
24
+ }
25
+ /** /\bskills\s+lesson\b/: anywhere in the command, whatever runs it (the lesson gate, R12's twin of SKILLS_ADD_RE). */
26
+ export declare const SKILLS_LESSON_RE: RegExp;
27
+ /** Every save the gate guards: a skill's add, a lesson's keep, and (phase 2) a skill's update. */
28
+ export declare const SAVE_GATE_RE: RegExp;
29
+ /** null when the command doesn't parse as `<anything> skills lesson [<skill>] --offer <id>`, or keeps more than one. */
30
+ export declare function parseSkillsLesson(command: string): SkillsLessonCmd | null;
31
+ export interface SkillsUpdateCmd {
32
+ name: string;
33
+ offerId: string;
34
+ }
35
+ /** /\bskills\s+update\b/: anywhere in the command, whatever runs it. */
36
+ export declare const SKILLS_UPDATE_RE: RegExp;
37
+ /**
38
+ * null unless the command is exactly one `<trail> skills update <name> --offer <o-id>`, Trail's own and nothing
39
+ * else (1a's `onlyTrail`, one simple command after any leading cds, no pipe), with no other add, lesson or update.
40
+ */
41
+ export declare function parseSkillsUpdate(command: string): SkillsUpdateCmd | null;
42
+ //# sourceMappingURL=save-parse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"save-parse.d.ts","sourceRoot":"","sources":["../../src/skills/save-parse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,MAAM,WAAW,YAAY;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE;AAE9E,6FAA6F;AAC7F,eAAO,MAAM,aAAa,QAAqB,CAAC;AAgDhD,gHAAgH;AAChH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CA0BnE;AAID,MAAM,WAAW,eAAe;IAAG,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE;AAE3F,uHAAuH;AACvH,eAAO,MAAM,gBAAgB,QAAwB,CAAC;AAEtD,kGAAkG;AAClG,eAAO,MAAM,YAAY,QAAuC,CAAC;AAEjE,wHAAwH;AACxH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CA0BzE;AAID,MAAM,WAAW,eAAe;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE;AAElE,wEAAwE;AACxE,eAAO,MAAM,gBAAgB,QAAwB,CAAC;AAWtD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAmBzE"}
@@ -0,0 +1,172 @@
1
+ /**
2
+ * Reading a `trail skills add` command (design 4.9 step 1), whatever runs it:
3
+ * `trail`, `graft`, `npx @trailhq/trail-code`, `node .../trail.js`,
4
+ * `bash -c "..."`, `eval`, an alias or xargs. `skills add` anywhere in the
5
+ * command is an add; it must read as exactly `skills add <name> --run <id>`,
6
+ * once. Re-exported from `save-gate.ts`, where the design names it.
7
+ *
8
+ * Phase 2 (4.11): `trail skills update <name> --offer <id>`, read stricter
9
+ * still: nothing chained and no root options, since its gate writes a file.
10
+ */
11
+ import { leadingCds, onlyTrail, simpleCommands } from '../trace/shell.js';
12
+ /** /\bskills\s+add\b/: anywhere in the command, whatever binary, wrapper or path runs it. */
13
+ export const SKILLS_ADD_RE = /\bskills\s+add\b/;
14
+ const ALL_ADDS = /\bskills\s+add\b/g;
15
+ /** Where the add's own words end, outside quotes: the next command, a redirect, a comment, a subshell's end. */
16
+ const STOP = new Set([';', '&', '|', ')', '<', '>', '\n', '\r', '`']);
17
+ /** The words after `skills add`, up to the end of that command. A quote never closed ends it (the close of `bash -c "..."`). */
18
+ function tailWords(tail) {
19
+ const out = [];
20
+ let cur = '';
21
+ let has = false;
22
+ const flush = () => {
23
+ if (has)
24
+ out.push(cur);
25
+ cur = '';
26
+ has = false;
27
+ };
28
+ for (let i = 0; i < tail.length; i++) {
29
+ const ch = tail[i];
30
+ if (ch === '"' || ch === "'") {
31
+ const end = tail.indexOf(ch, i + 1);
32
+ if (end < 0)
33
+ break;
34
+ cur += tail.slice(i + 1, end);
35
+ has = true;
36
+ i = end;
37
+ continue;
38
+ }
39
+ if (ch === '\\' && i + 1 < tail.length && tail[i + 1] !== '\n') {
40
+ cur += tail[i + 1];
41
+ has = true;
42
+ i++;
43
+ continue;
44
+ }
45
+ if (STOP.has(ch)) {
46
+ // `2>&1`: digits right before a redirect are the redirect's, not a word.
47
+ if ((ch === '>' || ch === '<') && /^\d+$/.test(cur))
48
+ has = false;
49
+ break;
50
+ }
51
+ if (ch === '#' && !has)
52
+ break;
53
+ if (ch === ' ' || ch === '\t') {
54
+ flush();
55
+ continue;
56
+ }
57
+ cur += ch;
58
+ has = true;
59
+ }
60
+ flush();
61
+ return out;
62
+ }
63
+ /** null when the command doesn't parse as `<anything> skills add <name> --run <id>`, or adds more than once. */
64
+ export function parseSkillsAdd(command) {
65
+ const text = String(command ?? '');
66
+ const hits = [...text.matchAll(ALL_ADDS)];
67
+ if (hits.length !== 1)
68
+ return null;
69
+ const words = tailWords(text.slice(hits[0].index + hits[0][0].length));
70
+ let name = null;
71
+ let runId = null;
72
+ const flags = [];
73
+ for (let i = 0; i < words.length; i++) {
74
+ const w = words[i];
75
+ if (w === '--run' && runId === null && i + 1 < words.length) {
76
+ runId = words[++i];
77
+ continue;
78
+ }
79
+ if (w.startsWith('--run=') && runId === null) {
80
+ runId = w.slice(6);
81
+ continue;
82
+ }
83
+ if (!w.startsWith('-') && name === null) {
84
+ name = w;
85
+ continue;
86
+ }
87
+ flags.push(w);
88
+ }
89
+ if (name === null || runId === null || !runId)
90
+ return null;
91
+ return { name, runId, flags };
92
+ }
93
+ /** /\bskills\s+lesson\b/: anywhere in the command, whatever runs it (the lesson gate, R12's twin of SKILLS_ADD_RE). */
94
+ export const SKILLS_LESSON_RE = /\bskills\s+lesson\b/;
95
+ const ALL_LESSONS = /\bskills\s+lesson\b/g;
96
+ /** Every save the gate guards: a skill's add, a lesson's keep, and (phase 2) a skill's update. */
97
+ export const SAVE_GATE_RE = /\bskills\s+(?:add|lesson|update)\b/;
98
+ /** null when the command doesn't parse as `<anything> skills lesson [<skill>] --offer <id>`, or keeps more than one. */
99
+ export function parseSkillsLesson(command) {
100
+ const text = String(command ?? '');
101
+ const hits = [...text.matchAll(ALL_LESSONS)];
102
+ if (hits.length !== 1 || [...text.matchAll(ALL_ADDS)].length)
103
+ return null;
104
+ const words = tailWords(text.slice(hits[0].index + hits[0][0].length));
105
+ let skill = null;
106
+ let offerId = null;
107
+ const flags = [];
108
+ for (let i = 0; i < words.length; i++) {
109
+ const w = words[i];
110
+ if (w === '--offer' && offerId === null && i + 1 < words.length) {
111
+ offerId = words[++i];
112
+ continue;
113
+ }
114
+ if (w.startsWith('--offer=') && offerId === null) {
115
+ offerId = w.slice(8);
116
+ continue;
117
+ }
118
+ if (!w.startsWith('-') && skill === null && offerId === null) {
119
+ skill = w;
120
+ continue;
121
+ }
122
+ flags.push(w);
123
+ }
124
+ if (!offerId)
125
+ return null;
126
+ return { skill, offerId, flags };
127
+ }
128
+ /** /\bskills\s+update\b/: anywhere in the command, whatever runs it. */
129
+ export const SKILLS_UPDATE_RE = /\bskills\s+update\b/;
130
+ const ALL_UPDATES = /\bskills\s+update\b/g;
131
+ /** Past this the command is not read (D89). */
132
+ const UPDATE_MAX = 64 * 1024;
133
+ /** What comes right before `skills update`: a Trail binary, nothing between it and `skills` (no root option). */
134
+ const TRAIL_BIN = /(?:^|[\s/"'(])(?:trail|graft|trail-code|@trailhq\/trail-code|@nanonets\/graft|(?:trail|graft)\.js)\s+$/;
135
+ const SKILL_NAME = /^[a-z0-9][a-z0-9-]{0,63}$/;
136
+ const OFFER_ID = /^o-[0-9a-f]{6}$/;
137
+ /** A pipe (not `||`): its other side could cut or rewrite what the update prints. */
138
+ const PIPE = /(?:^|[^|])\|(?!\|)/;
139
+ /**
140
+ * null unless the command is exactly one `<trail> skills update <name> --offer <o-id>`, Trail's own and nothing
141
+ * else (1a's `onlyTrail`, one simple command after any leading cds, no pipe), with no other add, lesson or update.
142
+ */
143
+ export function parseSkillsUpdate(command) {
144
+ const text = String(command ?? '');
145
+ if (text.length > UPDATE_MAX)
146
+ return null;
147
+ const hits = [...text.matchAll(ALL_UPDATES)];
148
+ if (hits.length !== 1 || SKILLS_ADD_RE.test(text) || SKILLS_LESSON_RE.test(text))
149
+ return null;
150
+ if (!TRAIL_BIN.test(text.slice(Math.max(0, hits[0].index - 200), hits[0].index)))
151
+ return null;
152
+ if (PIPE.test(text) || !onlyTrail(text) || simpleCommands(leadingCds(text).rest).length !== 1)
153
+ return null;
154
+ const words = tailWords(text.slice(hits[0].index + hits[0][0].length));
155
+ let name = null;
156
+ let offerId = null;
157
+ for (let i = 0; i < words.length; i++) {
158
+ const w = words[i];
159
+ if (w === '--offer' && offerId === null && i + 1 < words.length)
160
+ offerId = words[++i];
161
+ else if (w.startsWith('--offer=') && offerId === null)
162
+ offerId = w.slice(8);
163
+ else if (!w.startsWith('-') && name === null)
164
+ name = w;
165
+ else
166
+ return null;
167
+ }
168
+ if (!name || !offerId || !SKILL_NAME.test(name) || !OFFER_ID.test(offerId))
169
+ return null;
170
+ return { name, offerId };
171
+ }
172
+ //# sourceMappingURL=save-parse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"save-parse.js","sourceRoot":"","sources":["../../src/skills/save-parse.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * What the save gate reads from the skill store (g4), without changing it:
3
+ * where a name is taken, which runs are already kept, and the run a held
4
+ * item was kept from (D65: a live save for the same run replaces it).
5
+ */
6
+ import type { SkillState } from './types.js';
7
+ export { nameTaken } from './store.js';
8
+ /** The skills state's entries; {} when it can't be read. */
9
+ export declare function readSkillsStateSafe(env?: NodeJS.ProcessEnv): Record<string, SkillState>;
10
+ /** The run id a held item of this name was kept from (`HeldItem.runId`); null when there is none or it doesn't say. */
11
+ export declare function heldRunId(name: string, env?: NodeJS.ProcessEnv): string | null;
12
+ //# sourceMappingURL=save-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"save-store.d.ts","sourceRoot":"","sources":["../../src/skills/save-store.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAI7C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,4DAA4D;AAC5D,wBAAgB,mBAAmB,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAMvF;AAED,uHAAuH;AACvH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,GAAG,IAAI,CAM9E"}
@@ -0,0 +1,22 @@
1
+ import { allHeld } from './store-held.js';
2
+ import { readSkillsState } from './state.js';
3
+ export { nameTaken } from './store.js';
4
+ /** The skills state's entries; {} when it can't be read. */
5
+ export function readSkillsStateSafe(env) {
6
+ try {
7
+ return readSkillsState(env).skills;
8
+ }
9
+ catch {
10
+ return {};
11
+ }
12
+ }
13
+ /** The run id a held item of this name was kept from (`HeldItem.runId`); null when there is none or it doesn't say. */
14
+ export function heldRunId(name, env) {
15
+ try {
16
+ return allHeld(env).find((h) => h.name === name)?.runId ?? null;
17
+ }
18
+ catch {
19
+ return null;
20
+ }
21
+ }
22
+ //# sourceMappingURL=save-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"save-store.js","sourceRoot":"","sources":["../../src/skills/save-store.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,4DAA4D;AAC5D,MAAM,UAAU,mBAAmB,CAAC,GAAuB;IACzD,IAAI,CAAC;QACH,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,uHAAuH;AACvH,MAAM,UAAU,SAAS,CAAC,IAAY,EAAE,GAAuB;IAC7D,IAAI,CAAC;QACH,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC;IAClE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * `~/.trail/settings.json`: learned skills on or off (off by default), offers
3
+ * on or off (everywhere or per repo), pauses after two nos, skills a person
4
+ * turned off, and the governor's cache.
5
+ *
6
+ * Who may change what is fixed: only the person's own commands (the setters,
7
+ * imported only by `skills/cli-skills.ts`) turn skills and offers on or off;
8
+ * only the offer bookkeeping (`skills/offers.ts`) writes pauses and the
9
+ * governor. `trail init`, upgrades and `trail connect` never write this file.
10
+ * A test pins who imports what.
11
+ *
12
+ * A missing or broken file reads as the defaults. Keys a later version adds
13
+ * are kept on every write.
14
+ */
15
+ import type { TrailSkillSettings } from './types.js';
16
+ export { isTestHome, labInteractive } from './host-facts.js';
17
+ export declare const DEFAULT_SETTINGS: TrailSkillSettings;
18
+ /** Defaults on a missing or bad file; unknown keys are kept on every write. */
19
+ export declare function readSettings(env?: NodeJS.ProcessEnv): TrailSkillSettings;
20
+ /** TRAIL_TEST_NOW (ISO) in a test home only; else new Date(). */
21
+ export declare function trailNow(env?: NodeJS.ProcessEnv): Date;
22
+ /** The local calendar date `YYYY-MM-DD` of a time: days (pauses, session-days, last worked) are the person's days. */
23
+ export declare function localDate(at: Date | string): string;
24
+ /** onSince = now when it turns on. */
25
+ export declare function setSkills(on: boolean, env?: NodeJS.ProcessEnv, now?: Date): TrailSkillSettings;
26
+ /** here: adds or removes that repo key in offRepos; a global off sets offersOffAt. */
27
+ export declare function setOffers(on: boolean, here: string | null, env?: NodeJS.ProcessEnv, now?: Date): TrailSkillSettings;
28
+ export declare function setSkillOff(name: string, off: boolean, env?: NodeJS.ProcessEnv): TrailSkillSettings;
29
+ export declare function pauseRepo(repoKey: string, until: Date, env?: NodeJS.ProcessEnv): TrailSkillSettings;
30
+ export declare function noteGovernor(lastNine: Array<'yes' | 'no' | 'none'>, saidAt: string | null, env?: NodeJS.ProcessEnv): TrailSkillSettings;
31
+ export declare function skillsOn(env?: NodeJS.ProcessEnv): boolean;
32
+ export declare function offersHere(repoKey: string, now?: Date, env?: NodeJS.ProcessEnv): {
33
+ ok: true;
34
+ } | {
35
+ ok: false;
36
+ why: 'off' | 'off-here' | 'paused';
37
+ };
38
+ //# sourceMappingURL=settings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../src/skills/settings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAIrD,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAE7D,eAAO,MAAM,gBAAgB,EAAE,kBAIP,CAAC;AAmCzB,+EAA+E;AAC/E,wBAAgB,YAAY,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,kBAAkB,CAExE;AAiBD,iEAAiE;AACjE,wBAAgB,QAAQ,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,IAAI,CAOnE;AAED,sHAAsH;AACtH,wBAAgB,SAAS,CAAC,EAAE,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,CAInD;AAID,sCAAsC;AACtC,wBAAgB,SAAS,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,EAAE,GAAG,GAAE,IAAiB,GAAG,kBAAkB,CAK1G;AAED,sFAAsF;AACtF,wBAAgB,SAAS,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,EAAE,GAAG,GAAE,IAAiB,GAAG,kBAAkB,CAW/H;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,kBAAkB,CAKnG;AAID,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,kBAAkB,CAInG;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,GAAG,IAAI,GAAG,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,kBAAkB,CAKvI;AAED,wBAAgB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,OAAO,CAEzD;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,GAAE,IAAiB,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,GAAG,EAAE,KAAK,GAAG,UAAU,GAAG,QAAQ,CAAA;CAAE,CAO7J"}