@nanonets/graft 0.24.1 → 0.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (480) hide show
  1. package/README.md +26 -21
  2. package/dist/blast/render.js +1 -1
  3. package/dist/blast/render.js.map +1 -1
  4. package/dist/brand.js +1 -1
  5. package/dist/brand.js.map +1 -1
  6. package/dist/check/learning-edits.d.ts +18 -3
  7. package/dist/check/learning-edits.d.ts.map +1 -1
  8. package/dist/check/learning-edits.js +54 -10
  9. package/dist/check/learning-edits.js.map +1 -1
  10. package/dist/check/local-check.d.ts +7 -3
  11. package/dist/check/local-check.d.ts.map +1 -1
  12. package/dist/check/local-check.js +55 -11
  13. package/dist/check/local-check.js.map +1 -1
  14. package/dist/check/types.d.ts +11 -2
  15. package/dist/check/types.d.ts.map +1 -1
  16. package/dist/claude/format.d.ts +11 -7
  17. package/dist/claude/format.d.ts.map +1 -1
  18. package/dist/claude/format.js +50 -28
  19. package/dist/claude/format.js.map +1 -1
  20. package/dist/claude/hook-io.js +1 -1
  21. package/dist/claude/hook-io.js.map +1 -1
  22. package/dist/claude/hook-layers.d.ts +4 -2
  23. package/dist/claude/hook-layers.d.ts.map +1 -1
  24. package/dist/claude/hook-layers.js +21 -4
  25. package/dist/claude/hook-layers.js.map +1 -1
  26. package/dist/claude/hooks.d.ts +9 -32
  27. package/dist/claude/hooks.d.ts.map +1 -1
  28. package/dist/claude/hooks.js +154 -350
  29. package/dist/claude/hooks.js.map +1 -1
  30. package/dist/claude/init.d.ts.map +1 -1
  31. package/dist/claude/init.js +56 -18
  32. package/dist/claude/init.js.map +1 -1
  33. package/dist/claude/note-signals.d.ts +6 -0
  34. package/dist/claude/note-signals.d.ts.map +1 -1
  35. package/dist/claude/note-signals.js +14 -3
  36. package/dist/claude/note-signals.js.map +1 -1
  37. package/dist/claude/post-bash.d.ts +26 -0
  38. package/dist/claude/post-bash.d.ts.map +1 -0
  39. package/dist/claude/post-bash.js +191 -0
  40. package/dist/claude/post-bash.js.map +1 -0
  41. package/dist/claude/pre-bash-skills.d.ts +21 -0
  42. package/dist/claude/pre-bash-skills.d.ts.map +1 -0
  43. package/dist/claude/pre-bash-skills.js +253 -0
  44. package/dist/claude/pre-bash-skills.js.map +1 -0
  45. package/dist/claude/pre-bash.d.ts +50 -0
  46. package/dist/claude/pre-bash.d.ts.map +1 -0
  47. package/dist/claude/pre-bash.js +245 -0
  48. package/dist/claude/pre-bash.js.map +1 -0
  49. package/dist/claude/prompt-consent.d.ts +19 -0
  50. package/dist/claude/prompt-consent.d.ts.map +1 -0
  51. package/dist/claude/prompt-consent.js +14 -0
  52. package/dist/claude/prompt-consent.js.map +1 -0
  53. package/dist/claude/prompt-hook.d.ts +76 -0
  54. package/dist/claude/prompt-hook.d.ts.map +1 -0
  55. package/dist/claude/prompt-hook.js +303 -0
  56. package/dist/claude/prompt-hook.js.map +1 -0
  57. package/dist/claude/prompt-skills.d.ts +19 -0
  58. package/dist/claude/prompt-skills.d.ts.map +1 -0
  59. package/dist/claude/prompt-skills.js +305 -0
  60. package/dist/claude/prompt-skills.js.map +1 -0
  61. package/dist/claude/session-metrics.js +4 -4
  62. package/dist/claude/session-metrics.js.map +1 -1
  63. package/dist/claude/settings-merge.d.ts +10 -0
  64. package/dist/claude/settings-merge.d.ts.map +1 -1
  65. package/dist/claude/settings-merge.js +46 -17
  66. package/dist/claude/settings-merge.js.map +1 -1
  67. package/dist/claude/shim-template.d.ts.map +1 -1
  68. package/dist/claude/shim-template.js +86 -28
  69. package/dist/claude/shim-template.js.map +1 -1
  70. package/dist/claude/skill-template.d.ts +2 -0
  71. package/dist/claude/skill-template.d.ts.map +1 -1
  72. package/dist/claude/skill-template.js +53 -34
  73. package/dist/claude/skill-template.js.map +1 -1
  74. package/dist/claude/skill-use.d.ts +16 -0
  75. package/dist/claude/skill-use.d.ts.map +1 -0
  76. package/dist/claude/skill-use.js +78 -0
  77. package/dist/claude/skill-use.js.map +1 -0
  78. package/dist/claude/skills-wiring.d.ts +26 -0
  79. package/dist/claude/skills-wiring.d.ts.map +1 -0
  80. package/dist/claude/skills-wiring.js +110 -0
  81. package/dist/claude/skills-wiring.js.map +1 -0
  82. package/dist/claude/start-init.d.ts +13 -0
  83. package/dist/claude/start-init.d.ts.map +1 -0
  84. package/dist/claude/start-init.js +75 -0
  85. package/dist/claude/start-init.js.map +1 -0
  86. package/dist/claude/start-skills.d.ts +31 -0
  87. package/dist/claude/start-skills.d.ts.map +1 -0
  88. package/dist/claude/start-skills.js +274 -0
  89. package/dist/claude/start-skills.js.map +1 -0
  90. package/dist/claude/state.d.ts +19 -7
  91. package/dist/claude/state.d.ts.map +1 -1
  92. package/dist/claude/state.js +59 -4
  93. package/dist/claude/state.js.map +1 -1
  94. package/dist/claude/stop-skills.d.ts +23 -0
  95. package/dist/claude/stop-skills.d.ts.map +1 -0
  96. package/dist/claude/stop-skills.js +233 -0
  97. package/dist/claude/stop-skills.js.map +1 -0
  98. package/dist/claude/stop.d.ts +23 -0
  99. package/dist/claude/stop.d.ts.map +1 -0
  100. package/dist/claude/stop.js +219 -0
  101. package/dist/claude/stop.js.map +1 -0
  102. package/dist/claude/tally.d.ts +29 -41
  103. package/dist/claude/tally.d.ts.map +1 -1
  104. package/dist/claude/tally.js +111 -165
  105. package/dist/claude/tally.js.map +1 -1
  106. package/dist/claude/walls-hook.d.ts +52 -0
  107. package/dist/claude/walls-hook.d.ts.map +1 -0
  108. package/dist/claude/walls-hook.js +279 -0
  109. package/dist/claude/walls-hook.js.map +1 -0
  110. package/dist/cli-epilogue.d.ts.map +1 -1
  111. package/dist/cli-epilogue.js +24 -14
  112. package/dist/cli-epilogue.js.map +1 -1
  113. package/dist/cli-meta.js +3 -3
  114. package/dist/cli-meta.js.map +1 -1
  115. package/dist/cli-picker.d.ts.map +1 -1
  116. package/dist/cli-picker.js +8 -6
  117. package/dist/cli-picker.js.map +1 -1
  118. package/dist/cli.d.ts.map +1 -1
  119. package/dist/cli.js +238 -402
  120. package/dist/cli.js.map +1 -1
  121. package/dist/cloud/head-learnings.d.ts +13 -0
  122. package/dist/cloud/head-learnings.d.ts.map +1 -0
  123. package/dist/cloud/head-learnings.js +84 -0
  124. package/dist/cloud/head-learnings.js.map +1 -0
  125. package/dist/cloud/lookup-activity.d.ts +5 -3
  126. package/dist/cloud/lookup-activity.d.ts.map +1 -1
  127. package/dist/cloud/lookup-activity.js +8 -8
  128. package/dist/cloud/lookup-activity.js.map +1 -1
  129. package/dist/cloud/nudge.d.ts +15 -7
  130. package/dist/cloud/nudge.d.ts.map +1 -1
  131. package/dist/cloud/nudge.js +42 -33
  132. package/dist/cloud/nudge.js.map +1 -1
  133. package/dist/cloud/onboarding.d.ts +37 -1
  134. package/dist/cloud/onboarding.d.ts.map +1 -1
  135. package/dist/cloud/onboarding.js +77 -1
  136. package/dist/cloud/onboarding.js.map +1 -1
  137. package/dist/cloud/other-repos.d.ts +39 -0
  138. package/dist/cloud/other-repos.d.ts.map +1 -0
  139. package/dist/cloud/other-repos.js +137 -0
  140. package/dist/cloud/other-repos.js.map +1 -0
  141. package/dist/cloud/pair.d.ts +17 -7
  142. package/dist/cloud/pair.d.ts.map +1 -1
  143. package/dist/cloud/pair.js +81 -60
  144. package/dist/cloud/pair.js.map +1 -1
  145. package/dist/cloud/workspace-sync.d.ts +67 -11
  146. package/dist/cloud/workspace-sync.d.ts.map +1 -1
  147. package/dist/cloud/workspace-sync.js +299 -55
  148. package/dist/cloud/workspace-sync.js.map +1 -1
  149. package/dist/cloud/workspace.d.ts +74 -10
  150. package/dist/cloud/workspace.d.ts.map +1 -1
  151. package/dist/cloud/workspace.js +96 -8
  152. package/dist/cloud/workspace.js.map +1 -1
  153. package/dist/hosts/claude-global.js +1 -1
  154. package/dist/hosts/claude-global.js.map +1 -1
  155. package/dist/hosts/codex-hooks.d.ts +6 -0
  156. package/dist/hosts/codex-hooks.d.ts.map +1 -1
  157. package/dist/hosts/codex-hooks.js +89 -16
  158. package/dist/hosts/codex-hooks.js.map +1 -1
  159. package/dist/hosts/codex-trust.d.ts +28 -0
  160. package/dist/hosts/codex-trust.d.ts.map +1 -0
  161. package/dist/hosts/codex-trust.js +280 -0
  162. package/dist/hosts/codex-trust.js.map +1 -0
  163. package/dist/hosts/cursor-hooks.d.ts.map +1 -1
  164. package/dist/hosts/cursor-hooks.js +3 -1
  165. package/dist/hosts/cursor-hooks.js.map +1 -1
  166. package/dist/init/candidates.d.ts +60 -0
  167. package/dist/init/candidates.d.ts.map +1 -0
  168. package/dist/init/candidates.js +202 -0
  169. package/dist/init/candidates.js.map +1 -0
  170. package/dist/init/claude-call.d.ts +51 -0
  171. package/dist/init/claude-call.d.ts.map +1 -0
  172. package/dist/init/claude-call.js +199 -0
  173. package/dist/init/claude-call.js.map +1 -0
  174. package/dist/init/discover-worker.d.ts +18 -0
  175. package/dist/init/discover-worker.d.ts.map +1 -0
  176. package/dist/init/discover-worker.js +111 -0
  177. package/dist/init/discover-worker.js.map +1 -0
  178. package/dist/init/handover.d.ts +16 -0
  179. package/dist/init/handover.d.ts.map +1 -0
  180. package/dist/init/handover.js +92 -0
  181. package/dist/init/handover.js.map +1 -0
  182. package/dist/init/howtos.d.ts +20 -0
  183. package/dist/init/howtos.d.ts.map +1 -0
  184. package/dist/init/howtos.js +90 -0
  185. package/dist/init/howtos.js.map +1 -0
  186. package/dist/init/init-record.d.ts +134 -0
  187. package/dist/init/init-record.d.ts.map +1 -0
  188. package/dist/init/init-record.js +339 -0
  189. package/dist/init/init-record.js.map +1 -0
  190. package/dist/init/install-paths.d.ts +6 -0
  191. package/dist/init/install-paths.d.ts.map +1 -0
  192. package/dist/init/install-paths.js +87 -0
  193. package/dist/init/install-paths.js.map +1 -0
  194. package/dist/init/keep-answer.d.ts +43 -0
  195. package/dist/init/keep-answer.d.ts.map +1 -0
  196. package/dist/init/keep-answer.js +118 -0
  197. package/dist/init/keep-answer.js.map +1 -0
  198. package/dist/init/keep-gate.d.ts +30 -0
  199. package/dist/init/keep-gate.d.ts.map +1 -0
  200. package/dist/init/keep-gate.js +178 -0
  201. package/dist/init/keep-gate.js.map +1 -0
  202. package/dist/init/keep-list.d.ts +67 -0
  203. package/dist/init/keep-list.d.ts.map +1 -0
  204. package/dist/init/keep-list.js +232 -0
  205. package/dist/init/keep-list.js.map +1 -0
  206. package/dist/init/keep.d.ts +52 -0
  207. package/dist/init/keep.d.ts.map +1 -0
  208. package/dist/init/keep.js +393 -0
  209. package/dist/init/keep.js.map +1 -0
  210. package/dist/init/look-back-mine.d.ts +37 -0
  211. package/dist/init/look-back-mine.d.ts.map +1 -0
  212. package/dist/init/look-back-mine.js +215 -0
  213. package/dist/init/look-back-mine.js.map +1 -0
  214. package/dist/init/look-back.d.ts +81 -0
  215. package/dist/init/look-back.d.ts.map +1 -0
  216. package/dist/init/look-back.js +170 -0
  217. package/dist/init/look-back.js.map +1 -0
  218. package/dist/init/miners.d.ts +46 -0
  219. package/dist/init/miners.d.ts.map +1 -0
  220. package/dist/init/miners.js +141 -0
  221. package/dist/init/miners.js.map +1 -0
  222. package/dist/init/name-call.d.ts +37 -0
  223. package/dist/init/name-call.d.ts.map +1 -0
  224. package/dist/init/name-call.js +151 -0
  225. package/dist/init/name-call.js.map +1 -0
  226. package/dist/init/plain-file.d.ts.map +1 -1
  227. package/dist/init/plain-file.js +3 -0
  228. package/dist/init/plain-file.js.map +1 -1
  229. package/dist/init/prefs.d.ts +70 -0
  230. package/dist/init/prefs.d.ts.map +1 -0
  231. package/dist/init/prefs.js +282 -0
  232. package/dist/init/prefs.js.map +1 -0
  233. package/dist/init/relay.d.ts +15 -0
  234. package/dist/init/relay.d.ts.map +1 -0
  235. package/dist/init/relay.js +15 -0
  236. package/dist/init/relay.js.map +1 -0
  237. package/dist/init/replay-runs.d.ts +121 -0
  238. package/dist/init/replay-runs.d.ts.map +1 -0
  239. package/dist/init/replay-runs.js +457 -0
  240. package/dist/init/replay-runs.js.map +1 -0
  241. package/dist/init/replay-tamper.d.ts +18 -0
  242. package/dist/init/replay-tamper.d.ts.map +1 -0
  243. package/dist/init/replay-tamper.js +87 -0
  244. package/dist/init/replay-tamper.js.map +1 -0
  245. package/dist/init/review-screen.d.ts +74 -0
  246. package/dist/init/review-screen.d.ts.map +1 -0
  247. package/dist/init/review-screen.js +258 -0
  248. package/dist/init/review-screen.js.map +1 -0
  249. package/dist/init/review-tty.d.ts +29 -0
  250. package/dist/init/review-tty.d.ts.map +1 -0
  251. package/dist/init/review-tty.js +218 -0
  252. package/dist/init/review-tty.js.map +1 -0
  253. package/dist/init/review.d.ts +12 -0
  254. package/dist/init/review.d.ts.map +1 -0
  255. package/dist/init/review.js +12 -0
  256. package/dist/init/review.js.map +1 -0
  257. package/dist/init/run.d.ts +87 -0
  258. package/dist/init/run.d.ts.map +1 -0
  259. package/dist/init/run.js +347 -0
  260. package/dist/init/run.js.map +1 -0
  261. package/dist/init/sessions.d.ts +63 -0
  262. package/dist/init/sessions.d.ts.map +1 -0
  263. package/dist/init/sessions.js +377 -0
  264. package/dist/init/sessions.js.map +1 -0
  265. package/dist/init/transcript.d.ts +81 -0
  266. package/dist/init/transcript.d.ts.map +1 -0
  267. package/dist/init/transcript.js +216 -0
  268. package/dist/init/transcript.js.map +1 -0
  269. package/dist/init/types.d.ts +139 -0
  270. package/dist/init/types.d.ts.map +1 -0
  271. package/dist/init/types.js +2 -0
  272. package/dist/init/types.js.map +1 -0
  273. package/dist/notes/cold-start.d.ts +5 -213
  274. package/dist/notes/cold-start.d.ts.map +1 -1
  275. package/dist/notes/cold-start.js +5 -654
  276. package/dist/notes/cold-start.js.map +1 -1
  277. package/dist/notes/edit-overlap.d.ts.map +1 -1
  278. package/dist/notes/edit-overlap.js +4 -1
  279. package/dist/notes/edit-overlap.js.map +1 -1
  280. package/dist/notes/notes.d.ts +8 -4
  281. package/dist/notes/notes.d.ts.map +1 -1
  282. package/dist/notes/notes.js +9 -7
  283. package/dist/notes/notes.js.map +1 -1
  284. package/dist/notes/pr-reviews.d.ts +4 -0
  285. package/dist/notes/pr-reviews.d.ts.map +1 -1
  286. package/dist/notes/pr-reviews.js +6 -5
  287. package/dist/notes/pr-reviews.js.map +1 -1
  288. package/dist/notes/repo-trail.d.ts +1 -1
  289. package/dist/notes/repo-trail.d.ts.map +1 -1
  290. package/dist/notes/repo-trail.js +24 -4
  291. package/dist/notes/repo-trail.js.map +1 -1
  292. package/dist/search/grep.d.ts.map +1 -1
  293. package/dist/search/grep.js +4 -2
  294. package/dist/search/grep.js.map +1 -1
  295. package/dist/search/user-regexp.d.ts +26 -0
  296. package/dist/search/user-regexp.d.ts.map +1 -0
  297. package/dist/search/user-regexp.js +150 -0
  298. package/dist/search/user-regexp.js.map +1 -0
  299. package/dist/skills/anchors-cli.d.ts +5 -0
  300. package/dist/skills/anchors-cli.d.ts.map +1 -1
  301. package/dist/skills/anchors-cli.js +7 -2
  302. package/dist/skills/anchors-cli.js.map +1 -1
  303. package/dist/skills/anchors-wide.js +2 -2
  304. package/dist/skills/anchors-wide.js.map +1 -1
  305. package/dist/skills/cli-skills-1b.d.ts +17 -0
  306. package/dist/skills/cli-skills-1b.d.ts.map +1 -0
  307. package/dist/skills/cli-skills-1b.js +166 -0
  308. package/dist/skills/cli-skills-1b.js.map +1 -0
  309. package/dist/skills/cli-skills-2.d.ts +35 -0
  310. package/dist/skills/cli-skills-2.d.ts.map +1 -0
  311. package/dist/skills/cli-skills-2.js +129 -0
  312. package/dist/skills/cli-skills-2.js.map +1 -0
  313. package/dist/skills/cli-skills-report-1b.d.ts +49 -0
  314. package/dist/skills/cli-skills-report-1b.d.ts.map +1 -0
  315. package/dist/skills/cli-skills-report-1b.js +191 -0
  316. package/dist/skills/cli-skills-report-1b.js.map +1 -0
  317. package/dist/skills/cli-skills-report.d.ts +86 -0
  318. package/dist/skills/cli-skills-report.d.ts.map +1 -0
  319. package/dist/skills/cli-skills-report.js +121 -0
  320. package/dist/skills/cli-skills-report.js.map +1 -0
  321. package/dist/skills/cli-skills.d.ts +30 -0
  322. package/dist/skills/cli-skills.d.ts.map +1 -0
  323. package/dist/skills/cli-skills.js +379 -0
  324. package/dist/skills/cli-skills.js.map +1 -0
  325. package/dist/skills/compile-split.d.ts.map +1 -1
  326. package/dist/skills/compile-split.js +18 -0
  327. package/dist/skills/compile-split.js.map +1 -1
  328. package/dist/skills/compile-words.d.ts +4 -1
  329. package/dist/skills/compile-words.d.ts.map +1 -1
  330. package/dist/skills/compile-words.js +68 -8
  331. package/dist/skills/compile-words.js.map +1 -1
  332. package/dist/skills/compile.d.ts +7 -0
  333. package/dist/skills/compile.d.ts.map +1 -1
  334. package/dist/skills/compile.js +17 -0
  335. package/dist/skills/compile.js.map +1 -1
  336. package/dist/skills/credit.d.ts +86 -0
  337. package/dist/skills/credit.d.ts.map +1 -0
  338. package/dist/skills/credit.js +259 -0
  339. package/dist/skills/credit.js.map +1 -0
  340. package/dist/skills/fold-gated.d.ts +3 -0
  341. package/dist/skills/fold-gated.d.ts.map +1 -0
  342. package/dist/skills/fold-gated.js +78 -0
  343. package/dist/skills/fold-gated.js.map +1 -0
  344. package/dist/skills/fold.d.ts +87 -0
  345. package/dist/skills/fold.d.ts.map +1 -0
  346. package/dist/skills/fold.js +348 -0
  347. package/dist/skills/fold.js.map +1 -0
  348. package/dist/skills/follow-learnings.d.ts +128 -0
  349. package/dist/skills/follow-learnings.d.ts.map +1 -0
  350. package/dist/skills/follow-learnings.js +278 -0
  351. package/dist/skills/follow-learnings.js.map +1 -0
  352. package/dist/skills/learning-steps.d.ts +43 -0
  353. package/dist/skills/learning-steps.d.ts.map +1 -0
  354. package/dist/skills/learning-steps.js +294 -0
  355. package/dist/skills/learning-steps.js.map +1 -0
  356. package/dist/skills/lesson-gate.d.ts +25 -0
  357. package/dist/skills/lesson-gate.d.ts.map +1 -0
  358. package/dist/skills/lesson-gate.js +316 -0
  359. package/dist/skills/lesson-gate.js.map +1 -0
  360. package/dist/skills/offer-drift.d.ts +35 -0
  361. package/dist/skills/offer-drift.d.ts.map +1 -0
  362. package/dist/skills/offer-drift.js +98 -0
  363. package/dist/skills/offer-drift.js.map +1 -0
  364. package/dist/skills/offer-lesson.d.ts +31 -0
  365. package/dist/skills/offer-lesson.d.ts.map +1 -0
  366. package/dist/skills/offer-lesson.js +123 -0
  367. package/dist/skills/offer-lesson.js.map +1 -0
  368. package/dist/skills/offer-lines.d.ts +40 -0
  369. package/dist/skills/offer-lines.d.ts.map +1 -0
  370. package/dist/skills/offer-lines.js +80 -0
  371. package/dist/skills/offer-lines.js.map +1 -0
  372. package/dist/skills/offer-moment.d.ts +102 -0
  373. package/dist/skills/offer-moment.d.ts.map +1 -0
  374. package/dist/skills/offer-moment.js +260 -0
  375. package/dist/skills/offer-moment.js.map +1 -0
  376. package/dist/skills/offer-repair.d.ts +36 -0
  377. package/dist/skills/offer-repair.d.ts.map +1 -0
  378. package/dist/skills/offer-repair.js +212 -0
  379. package/dist/skills/offer-repair.js.map +1 -0
  380. package/dist/skills/offer-retire.d.ts +53 -0
  381. package/dist/skills/offer-retire.d.ts.map +1 -0
  382. package/dist/skills/offer-retire.js +149 -0
  383. package/dist/skills/offer-retire.js.map +1 -0
  384. package/dist/skills/offer-update.d.ts +54 -0
  385. package/dist/skills/offer-update.d.ts.map +1 -0
  386. package/dist/skills/offer-update.js +115 -0
  387. package/dist/skills/offer-update.js.map +1 -0
  388. package/dist/skills/offer-words-1b.d.ts +32 -0
  389. package/dist/skills/offer-words-1b.d.ts.map +1 -0
  390. package/dist/skills/offer-words-1b.js +80 -0
  391. package/dist/skills/offer-words-1b.js.map +1 -0
  392. package/dist/skills/offer-words-2.d.ts +123 -0
  393. package/dist/skills/offer-words-2.d.ts.map +1 -0
  394. package/dist/skills/offer-words-2.js +194 -0
  395. package/dist/skills/offer-words-2.js.map +1 -0
  396. package/dist/skills/offer-words.d.ts +65 -0
  397. package/dist/skills/offer-words.d.ts.map +1 -0
  398. package/dist/skills/offer-words.js +205 -0
  399. package/dist/skills/offer-words.js.map +1 -0
  400. package/dist/skills/offers.d.ts +66 -0
  401. package/dist/skills/offers.d.ts.map +1 -0
  402. package/dist/skills/offers.js +284 -0
  403. package/dist/skills/offers.js.map +1 -0
  404. package/dist/skills/runblock.d.ts +2 -0
  405. package/dist/skills/runblock.d.ts.map +1 -1
  406. package/dist/skills/runblock.js +11 -6
  407. package/dist/skills/runblock.js.map +1 -1
  408. package/dist/skills/save-gate.d.ts +64 -0
  409. package/dist/skills/save-gate.d.ts.map +1 -0
  410. package/dist/skills/save-gate.js +354 -0
  411. package/dist/skills/save-gate.js.map +1 -0
  412. package/dist/skills/save-verify.d.ts +59 -0
  413. package/dist/skills/save-verify.d.ts.map +1 -0
  414. package/dist/skills/save-verify.js +390 -0
  415. package/dist/skills/save-verify.js.map +1 -0
  416. package/dist/skills/settings.d.ts +12 -2
  417. package/dist/skills/settings.d.ts.map +1 -1
  418. package/dist/skills/settings.js +24 -2
  419. package/dist/skills/settings.js.map +1 -1
  420. package/dist/skills/skills.d.ts +26 -8
  421. package/dist/skills/skills.d.ts.map +1 -1
  422. package/dist/skills/skills.js +105 -52
  423. package/dist/skills/skills.js.map +1 -1
  424. package/dist/skills/types.d.ts +8 -0
  425. package/dist/skills/types.d.ts.map +1 -1
  426. package/dist/skills/update-gate.d.ts +36 -0
  427. package/dist/skills/update-gate.d.ts.map +1 -0
  428. package/dist/skills/update-gate.js +357 -0
  429. package/dist/skills/update-gate.js.map +1 -0
  430. package/dist/skills/update-plan.d.ts +40 -0
  431. package/dist/skills/update-plan.d.ts.map +1 -0
  432. package/dist/skills/update-plan.js +196 -0
  433. package/dist/skills/update-plan.js.map +1 -0
  434. package/dist/skills/value-line.d.ts +94 -0
  435. package/dist/skills/value-line.d.ts.map +1 -0
  436. package/dist/skills/value-line.js +355 -0
  437. package/dist/skills/value-line.js.map +1 -0
  438. package/dist/telemetry/contract.d.ts +15 -1
  439. package/dist/telemetry/contract.d.ts.map +1 -1
  440. package/dist/telemetry/contract.js +80 -11
  441. package/dist/telemetry/contract.js.map +1 -1
  442. package/dist/telemetry/gate.js +4 -4
  443. package/dist/telemetry/gate.js.map +1 -1
  444. package/dist/telemetry/index.d.ts +1 -1
  445. package/dist/telemetry/index.d.ts.map +1 -1
  446. package/dist/telemetry/index.js +1 -1
  447. package/dist/telemetry/index.js.map +1 -1
  448. package/dist/telemetry/notice.js +5 -5
  449. package/dist/telemetry/notice.js.map +1 -1
  450. package/dist/telemetry/queue.d.ts.map +1 -1
  451. package/dist/telemetry/queue.js +7 -7
  452. package/dist/telemetry/queue.js.map +1 -1
  453. package/dist/telemetry/track.d.ts.map +1 -1
  454. package/dist/telemetry/track.js +4 -3
  455. package/dist/telemetry/track.js.map +1 -1
  456. package/dist/trace/checks.d.ts.map +1 -1
  457. package/dist/trace/checks.js +10 -2
  458. package/dist/trace/checks.js.map +1 -1
  459. package/dist/trace/gate-file.d.ts +1 -1
  460. package/dist/trace/gate-file.d.ts.map +1 -1
  461. package/dist/trace/gate-file.js +3 -3
  462. package/dist/trace/gate-file.js.map +1 -1
  463. package/dist/upkeep-run.d.ts.map +1 -1
  464. package/dist/upkeep-run.js +2 -23
  465. package/dist/upkeep-run.js.map +1 -1
  466. package/dist/upkeep.d.ts.map +1 -1
  467. package/dist/upkeep.js +2 -3
  468. package/dist/upkeep.js.map +1 -1
  469. package/dist/util/private-fs.d.ts +6 -0
  470. package/dist/util/private-fs.d.ts.map +1 -1
  471. package/dist/util/private-fs.js +9 -1
  472. package/dist/util/private-fs.js.map +1 -1
  473. package/dist/util/state.d.ts.map +1 -1
  474. package/dist/util/state.js +17 -3
  475. package/dist/util/state.js.map +1 -1
  476. package/package.json +1 -1
  477. package/dist/skills/found-skill.d.ts +0 -35
  478. package/dist/skills/found-skill.d.ts.map +0 -1
  479. package/dist/skills/found-skill.js +0 -66
  480. package/dist/skills/found-skill.js.map +0 -1
@@ -16,18 +16,14 @@
16
16
  * it is stored or sent; the session keeps a count and the telemetry contract
17
17
  * carries that count as a bucket. See TELEMETRY.md.
18
18
  *
19
- * Only the tail is read. A transcript grows for the life of a session and can
20
- * reach many megabytes, while the answer is always in its last few entries — a
21
- * hook that read the whole file would get slower every turn for no extra signal.
19
+ * Only what the transcript gained since the last Stop is read (a transcript
20
+ * grows for the life of a session; a real one passed 233 MB), through the
21
+ * trace layer's cursor, and what has to outlive one read (the reply in
22
+ * progress, the responses already billed) rides in that cursor's memo.
22
23
  */
23
- import { closeSync, fstatSync, openSync, readSync } from 'node:fs';
24
+ import { readNewEvents, isTypedByPerson, textOf } from '../trace/claude.js';
25
+ import { readJson } from '../util/state.js';
24
26
  import { turnInputCostMicros, turnInputTokens } from '../context/price.js';
25
- /**
26
- * How much of the transcript's end to read. Comfortably larger than any single
27
- * turn's worth of entries, small enough that the read cost is flat as the
28
- * session grows.
29
- */
30
- const TAIL_BYTES = 1024 * 1024;
31
27
  /**
32
28
  * The tally, as the agent is actually asked to write it: a "graft saved ~N
33
29
  * tokens" claim in prose. Deliberately loose about the decoration around it —
@@ -42,170 +38,120 @@ const TALLY = /(?:graft|trail)\s+saved\s*[~≈]?\s*[\d,.]+\s*[km]?\s*(?:tok|toke
42
38
  export function hasSavingsTally(text) {
43
39
  return TALLY.test(text);
44
40
  }
45
- /** Read the last {@link TAIL_BYTES} of a file as utf8, dropping the leading
46
- * partial line a byte-offset read leaves behind. Returns '' on any I/O trouble —
47
- * a hook never fails over a metric. */
48
- function readTail(path) {
49
- let fd;
50
- try {
51
- fd = openSync(path, 'r');
52
- const size = fstatSync(fd).size;
53
- const len = Math.min(size, TAIL_BYTES);
54
- const buf = Buffer.allocUnsafe(len);
55
- readSync(fd, buf, 0, len, size - len);
56
- const raw = buf.toString('utf8');
57
- return len < size ? raw.slice(raw.indexOf('\n') + 1) : raw;
58
- }
59
- catch {
60
- return '';
61
- }
62
- finally {
63
- if (fd !== undefined) {
64
- try {
65
- closeSync(fd);
66
- }
67
- catch { /* already gone */ }
68
- }
69
- }
41
+ /** Responses remembered as billed: one response's lines sit together, so a short list is enough. */
42
+ const BILLED_KEPT = 64;
43
+ /** The memo saved with the cursor, when it has the hooks' key. */
44
+ function savedHooks(memo) {
45
+ const h = memo && typeof memo === 'object' ? memo.hooks : undefined;
46
+ return h && typeof h === 'object' && h.turn && Array.isArray(h.billed) ? h : null;
70
47
  }
71
- /** Is this entry a user's own prompt, rather than a tool result wearing the
72
- * `user` role? Tool results carry a `tool_result` part; a real prompt does not.
73
- * The boundary matters because the tally can land in any text block of the turn,
74
- * not only the last one. */
75
- function isUserPrompt(entry) {
76
- if (entry?.type !== 'user' || entry?.isMeta)
77
- return false;
78
- const content = entry?.message?.content;
79
- if (typeof content === 'string')
80
- return true;
81
- return Array.isArray(content) && !content.some((p) => p?.type === 'tool_result');
48
+ /** A usage count as a bill can take it: a finite number of tokens, never below zero. */
49
+ function count(v) {
50
+ const n = Number(v);
51
+ return Number.isFinite(n) && n > 0 ? n : 0;
82
52
  }
83
- function textOf(content) {
84
- if (typeof content === 'string')
85
- return content;
86
- if (!Array.isArray(content))
87
- return '';
88
- return content.map((p) => (p?.type === 'text' ? String(p.text ?? '') : '')).join('\n');
89
- }
90
- /**
91
- * The assistant prose of the turn the transcript ends on, or null when it can't
92
- * be read (no path — a host whose Stop hook doesn't name one — unreadable file,
93
- * or a tail with no assistant text in it).
94
- *
95
- * Null is meaningfully different from "no tally found": a turn we cannot observe
96
- * is left out of BOTH the numerator and the denominator by the caller, so a host
97
- * that exposes no transcript reports no ratio rather than a ratio of zero.
98
- *
99
- * Sidechain entries (subagents) are skipped throughout — a subagent's own prose
100
- * is never what the user read.
101
- */
102
- export function lastAssistantTurn(transcriptPath) {
103
- if (typeof transcriptPath !== 'string' || !transcriptPath)
104
- return null;
105
- const tail = readTail(transcriptPath);
106
- if (!tail)
107
- return null;
108
- const entries = [];
109
- for (const line of tail.split('\n')) {
110
- if (!line.trim())
111
- continue;
112
- try {
113
- entries.push(JSON.parse(line));
53
+ /** Fold one transcript line into the memo and this read's bill. */
54
+ function fold(e, m, bill) {
55
+ // Subagent lines are another context's work: never what the user read, never this session's bill.
56
+ if (e.isSidechain)
57
+ return;
58
+ // The person's own prompt starts a new reply. A task notice, a command
59
+ // wrapper, a compaction summary or a hand-back does not.
60
+ if (e.type === 'user') {
61
+ if (isTypedByPerson(e)) {
62
+ m.turn = { uuid: null, tally: false };
63
+ if (bill.open)
64
+ bill.open = { costMicros: 0, tokens: 0 };
114
65
  }
115
- catch { /* clipped or partial line */ }
66
+ return;
116
67
  }
117
- // Walk back to the turn boundary, collecting assistant text on the way.
118
- const parts = [];
119
- let uuid = null;
120
- for (let i = entries.length - 1; i >= 0; i--) {
121
- const e = entries[i];
122
- if (e?.isSidechain)
123
- continue;
124
- if (isUserPrompt(e))
125
- break;
126
- if (e?.type !== 'assistant')
127
- continue;
128
- const text = textOf(e?.message?.content);
129
- if (!text.trim())
130
- continue;
131
- if (uuid === null && typeof e?.uuid === 'string')
132
- uuid = e.uuid;
133
- parts.unshift(text);
68
+ if (e.type !== 'assistant' || e.isApiErrorMessage)
69
+ return;
70
+ if (typeof e.uuid === 'string')
71
+ bill.out.lastUuid = e.uuid;
72
+ const msg = e.message;
73
+ const text = textOf(msg?.content);
74
+ if (text.trim()) {
75
+ if (typeof e.uuid === 'string')
76
+ m.turn.uuid = e.uuid;
77
+ if (hasSavingsTally(text))
78
+ m.turn.tally = true;
134
79
  }
135
- if (uuid === null || parts.length === 0)
136
- return null;
137
- return { uuid, text: parts.join('\n') };
80
+ billResponse(msg, m, bill);
81
+ // Everything up to here was billed before.
82
+ if (bill.open && bill.billedThrough && e.uuid === bill.billedThrough)
83
+ bill.open = { costMicros: 0, tokens: 0 };
84
+ }
85
+ /** Bill one response's input once, by `message.id`: its lines (thinking, text, tool_use) each repeat the same `usage`. */
86
+ function billResponse(msg, m, bill) {
87
+ const id = msg?.id;
88
+ const usage = msg?.usage;
89
+ if (typeof id !== 'string' || !usage || m.billed.includes(id))
90
+ return;
91
+ m.billed.push(id);
92
+ if (m.billed.length > BILLED_KEPT)
93
+ m.billed.splice(0, m.billed.length - BILLED_KEPT);
94
+ const turn = {
95
+ model: String(msg?.model ?? ''),
96
+ input: count(usage.input_tokens),
97
+ cacheCreate: count(usage.cache_creation_input_tokens),
98
+ cacheRead: count(usage.cache_read_input_tokens),
99
+ };
100
+ const micros = turnInputCostMicros(turn);
101
+ // An unpriced model contributes neither cost nor tokens: leaving its tokens
102
+ // in the denominator alone would drag the blended rate toward zero and
103
+ // quietly under-report every saving after it.
104
+ if (micros === null || !Number.isFinite(micros))
105
+ return;
106
+ const sink = bill.open ?? bill.out;
107
+ sink.costMicros += micros;
108
+ sink.tokens += turnInputTokens(turn);
138
109
  }
139
110
  /**
140
- * What the turn the transcript ends on cost in input tokens — the measured
141
- * half of the dollar figure the statusline and the turn nudge report.
142
- *
143
- * Costed per API response, not per turn, so a turn that switched models is
144
- * priced correctly rather than labelled with whichever model happened to go
145
- * last. Responses are deduped by `message.id`: one response is written to the
146
- * transcript as several entries (a `thinking` block and a `tool_use` block land
147
- * on their own lines) and every one of them repeats the same `usage`, so
148
- * summing the lines would bill the turn two or three times over.
149
- *
150
- * Null when there is nothing to bill — no transcript path (a host whose Stop
151
- * hook names none), an unreadable file, a turn whose entries carry no `usage`,
152
- * or a model with no price in {@link inputUsdPerMtok}. As everywhere in this
153
- * file, null means "not observed", never "zero".
111
+ * What a Claude Code transcript gained since the last read with the same
112
+ * cursor: the cost of each response seen for the first time, and the reply in
113
+ * progress. The first read of a session takes at most the transcript's last
114
+ * 8 MB and bills only the reply in progress (see {@link Bill});
115
+ * `billedThrough` is the last reply billed before (kept with the totals, so
116
+ * it outlives a lost cursor). `also` sees each line of the same read, with
117
+ * the same memo, for another turn-end reader (the learning ask) that keeps
118
+ * its state under a key of its own. Never throws; an unreadable file reads
119
+ * as nothing new.
154
120
  */
155
- export function lastTurnBilling(transcriptPath) {
156
- if (typeof transcriptPath !== 'string' || !transcriptPath)
157
- return null;
158
- const tail = readTail(transcriptPath);
159
- if (!tail)
160
- return null;
161
- const entries = [];
162
- for (const line of tail.split('\n')) {
163
- if (!line.trim())
164
- continue;
165
- try {
166
- entries.push(JSON.parse(line));
167
- }
168
- catch { /* clipped or partial line */ }
121
+ export function catchUpTranscript(transcriptPath, cursorPath, opts = {}) {
122
+ const out = { fresh: false, costMicros: 0, tokens: 0, turn: { uuid: null, tally: false }, lastUuid: null };
123
+ const bill = { out, open: null, billedThrough: opts.billedThrough };
124
+ // What the last read billed, kept apart: a read that starts over gets an empty memo.
125
+ let before = [];
126
+ try {
127
+ before = savedHooks((readJson(cursorPath))?.trace?.memo)?.billed.filter((id) => typeof id === 'string') ?? [];
128
+ }
129
+ catch {
130
+ // No cursor yet, or one that can't be read: nothing to carry.
169
131
  }
170
- const seen = new Set();
171
- let uuid = null;
172
- let costMicros = 0;
173
- let tokens = 0;
174
- for (let i = entries.length - 1; i >= 0; i--) {
175
- const e = entries[i];
176
- if (e?.isSidechain)
177
- continue;
178
- if (isUserPrompt(e))
179
- break;
180
- if (e?.type !== 'assistant')
181
- continue;
182
- if (uuid === null && typeof e?.uuid === 'string')
183
- uuid = e.uuid;
184
- const msg = e?.message;
185
- const id = msg?.id;
186
- if (typeof id !== 'string' || seen.has(id))
187
- continue;
188
- const usage = msg?.usage;
189
- if (!usage)
190
- continue;
191
- seen.add(id);
192
- const turn = {
193
- model: String(msg?.model ?? ''),
194
- input: Number(usage.input_tokens) || 0,
195
- cacheCreate: Number(usage.cache_creation_input_tokens) || 0,
196
- cacheRead: Number(usage.cache_read_input_tokens) || 0,
197
- };
198
- const micros = turnInputCostMicros(turn);
199
- // An unpriced model contributes neither cost nor tokens: leaving its tokens
200
- // in the denominator alone would drag the blended rate toward zero and
201
- // quietly under-report every saving after it.
202
- if (micros === null)
203
- continue;
204
- costMicros += micros;
205
- tokens += turnInputTokens(turn);
132
+ readNewEvents(transcriptPath, cursorPath, {
133
+ onEntry: (entry, memo) => {
134
+ try {
135
+ let m = savedHooks(memo);
136
+ if (!m) {
137
+ m = { turn: { uuid: null, tally: false }, billed: before.slice(-BILLED_KEPT) };
138
+ memo.hooks = m;
139
+ bill.open = { costMicros: 0, tokens: 0 };
140
+ }
141
+ fold(entry, m, bill);
142
+ opts.also?.(entry, memo);
143
+ out.fresh = true;
144
+ out.turn = m.turn;
145
+ }
146
+ catch {
147
+ // One odd line costs that line, never the read.
148
+ }
149
+ },
150
+ });
151
+ if (bill.open) {
152
+ out.costMicros += bill.open.costMicros;
153
+ out.tokens += bill.open.tokens;
206
154
  }
207
- if (uuid === null || tokens === 0)
208
- return null;
209
- return { uuid, costMicros, tokens };
155
+ return out;
210
156
  }
211
157
  //# sourceMappingURL=tally.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tally.js","sourceRoot":"","sources":["../../src/claude/tally.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tally.js","sourceRoot":"","sources":["../../src/claude/tally.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import type { RunCall, RunState, SkillSessionState, WallClass } from '../trace/types.js';
2
+ import type { GateCtx } from '../trace/skill-session.js';
3
+ import { type WallCtx } from '../trace/walls.js';
4
+ import type { Sent } from './skills-hook-util.js';
5
+ /** How long after a deny a passing call of the same command counts as the deny avoided (3.5 step 5). */
6
+ export declare const AVOIDED_MS: number;
7
+ /** At most this many wall fixes after a compaction (3.1 step 9, R38). */
8
+ export declare const COMPACT_FIXES = 2;
9
+ /**
10
+ * An executable `program` in the hook's PATH or 4.11's fixed folders (the hook's PATH can be narrower than the shell's).
11
+ * On Windows PATH splits on ';', the program is git.exe or npm.cmd (PATHEXT), and any regular file counts: there is no exec bit.
12
+ */
13
+ export declare function onPathHere(program: string, env: NodeJS.ProcessEnv): boolean;
14
+ /** The facts a fix line may use: which programs are here, and origin's SSH address when it is https (checked by sshRemoteFor). */
15
+ export declare function wallCtxFor(checkout: string, env: NodeJS.ProcessEnv): WallCtx;
16
+ /**
17
+ * 3.4 step 1: the fix line for `cls`, then "what fixed this here before" when a kept lesson for the wall applies
18
+ * here and worked in 2 or more epochs (4.10). `hadLesson`: a live lesson for this wall applies here.
19
+ */
20
+ export declare function wallContextText(cls: WallClass, place: {
21
+ checkout: string;
22
+ repoKey: string;
23
+ env: NodeJS.ProcessEnv;
24
+ now: Date;
25
+ }): {
26
+ text: string;
27
+ hadLesson: boolean;
28
+ };
29
+ /** 3.4 step 1 on a hook payload: the class the result hits, or null. Exit 0 under P23's limits (matchWall's own). */
30
+ export declare function wallOfResult(result: string, command: string, failed: boolean): WallClass | null;
31
+ /** A run's wall hits that count: not a flake retried as is, not a dropped tail (b2: `ignoredFailure(call, next)`). */
32
+ export declare function countedHits(run: RunState): RunCall[];
33
+ /** `timeout [-s SIG] [-k 5] [--foreground] 60 npm test` without its timeout part: `npm test`; null when there is none. */
34
+ export declare function withoutTimeout(cmd: string | null): string | null;
35
+ /**
36
+ * 3.5 steps 1 and 2 (`learn`): this session's wall hits (`seen`), repairs (`fixed`, an open run's read from its calls
37
+ * now) and the kept lessons that worked again, in one locked write of walls.json, only when something is new.
38
+ * Phase 2 (D129): returns how many new wall hits this Stop recorded whose fix reached the model: a failed call's where
39
+ * the host reads PostToolUseFailure's context (Codex has none), any other's where it reads PostToolUse's.
40
+ */
41
+ export declare function wallsAtStop(st: SkillSessionState, ctx: GateCtx): number;
42
+ /**
43
+ * 3.5 step 5 (`fold`): one `guardrail{sure-fail}` per deny the fast path marked since the last Stop, and
44
+ * `guardrail{avoided}` for each whose command, without timeout, then passed within 30 minutes. Moves `deniedSeen` on.
45
+ */
46
+ export declare function guardrailCounts(st: SkillSessionState, ctx: GateCtx, sent: Sent): void;
47
+ /**
48
+ * 3.1 step 9 (R38): the fix lines for the walls hit in the epoch a compaction just closed, at most 2, read from the
49
+ * calls still held and from walls.json's hits for this session and epoch.
50
+ */
51
+ export declare function compactWallLines(st: SkillSessionState, ctx: GateCtx): string[];
52
+ //# sourceMappingURL=walls-hook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"walls-hook.d.ts","sourceRoot":"","sources":["../../src/claude/walls-hook.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACzF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAsD,KAAK,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAUrG,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAIlD,wGAAwG;AACxG,eAAO,MAAM,UAAU,QAAiB,CAAC;AACzC,yEAAyE;AACzE,eAAO,MAAM,aAAa,IAAI,CAAC;AAG/B;;;GAGG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,OAAO,CAuB3E;AAED,kIAAkI;AAClI,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,OAAO,CAW5E;AAOD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IAAC,GAAG,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAarK;AAED,qHAAqH;AACrH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,IAAI,CAE/F;AAKD,sHAAsH;AACtH,wBAAgB,WAAW,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,EAAE,CAGpD;AAED,0HAA0H;AAC1H,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAGhE;AASD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,iBAAiB,EAAE,GAAG,EAAE,OAAO,GAAG,MAAM,CAuDvE;AAID;;;GAGG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,iBAAiB,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,CAyBrF;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,iBAAiB,EAAE,GAAG,EAAE,OAAO,GAAG,MAAM,EAAE,CAa9E"}