@nanonets/graft 0.23.1 → 0.24.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 (266) 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/claude/format.js +1 -1
  18. package/dist/claude/format.js.map +1 -1
  19. package/dist/claude/hooks.d.ts +0 -18
  20. package/dist/claude/hooks.d.ts.map +1 -1
  21. package/dist/claude/hooks.js +24 -77
  22. package/dist/claude/hooks.js.map +1 -1
  23. package/dist/claude/init.js +3 -3
  24. package/dist/claude/init.js.map +1 -1
  25. package/dist/claude/note-signals.d.ts +28 -0
  26. package/dist/claude/note-signals.d.ts.map +1 -0
  27. package/dist/claude/note-signals.js +325 -0
  28. package/dist/claude/note-signals.js.map +1 -0
  29. package/dist/claude/shim-template.d.ts.map +1 -1
  30. package/dist/claude/shim-template.js +10 -4
  31. package/dist/claude/shim-template.js.map +1 -1
  32. package/dist/claude/skill-template.d.ts.map +1 -1
  33. package/dist/claude/skill-template.js +49 -18
  34. package/dist/claude/skill-template.js.map +1 -1
  35. package/dist/claude/state.d.ts +4 -3
  36. package/dist/claude/state.d.ts.map +1 -1
  37. package/dist/claude/state.js.map +1 -1
  38. package/dist/claude/sync-run.js +1 -1
  39. package/dist/claude/sync-run.js.map +1 -1
  40. package/dist/cli-picker.d.ts +12 -5
  41. package/dist/cli-picker.d.ts.map +1 -1
  42. package/dist/cli-picker.js +24 -8
  43. package/dist/cli-picker.js.map +1 -1
  44. package/dist/cli.d.ts +2 -0
  45. package/dist/cli.d.ts.map +1 -1
  46. package/dist/cli.js +131 -38
  47. package/dist/cli.js.map +1 -1
  48. package/dist/context/batches.d.ts +29 -0
  49. package/dist/context/batches.d.ts.map +1 -0
  50. package/dist/context/batches.js +130 -0
  51. package/dist/context/batches.js.map +1 -0
  52. package/dist/context/build.d.ts +7 -2
  53. package/dist/context/build.d.ts.map +1 -1
  54. package/dist/context/build.js +84 -50
  55. package/dist/context/build.js.map +1 -1
  56. package/dist/context/node-file.d.ts.map +1 -1
  57. package/dist/context/node-file.js +41 -4
  58. package/dist/context/node-file.js.map +1 -1
  59. package/dist/engine.d.ts +2 -0
  60. package/dist/engine.d.ts.map +1 -1
  61. package/dist/engine.js +1 -0
  62. package/dist/engine.js.map +1 -1
  63. package/dist/graph/cards.d.ts.map +1 -1
  64. package/dist/graph/cards.js +9 -4
  65. package/dist/graph/cards.js.map +1 -1
  66. package/dist/graph/enrich.d.ts.map +1 -1
  67. package/dist/graph/enrich.js +8 -3
  68. package/dist/graph/enrich.js.map +1 -1
  69. package/dist/graph/generic.d.ts.map +1 -1
  70. package/dist/graph/generic.js +207 -6
  71. package/dist/graph/generic.js.map +1 -1
  72. package/dist/graph/lsp/client.d.ts +18 -0
  73. package/dist/graph/lsp/client.d.ts.map +1 -1
  74. package/dist/graph/lsp/client.js +40 -2
  75. package/dist/graph/lsp/client.js.map +1 -1
  76. package/dist/graph/lsp/enrich.d.ts.map +1 -1
  77. package/dist/graph/lsp/enrich.js +9 -1
  78. package/dist/graph/lsp/enrich.js.map +1 -1
  79. package/dist/graph/lsp/registry.d.ts +7 -0
  80. package/dist/graph/lsp/registry.d.ts.map +1 -1
  81. package/dist/graph/lsp/registry.js +27 -2
  82. package/dist/graph/lsp/registry.js.map +1 -1
  83. package/dist/graph/queries/gleam.scm +51 -0
  84. package/dist/graph/resolve.d.ts.map +1 -1
  85. package/dist/graph/resolve.js +65 -3
  86. package/dist/graph/resolve.js.map +1 -1
  87. package/dist/graph/workspace-cli.d.ts +2 -0
  88. package/dist/graph/workspace-cli.d.ts.map +1 -1
  89. package/dist/graph/workspace-cli.js +1 -1
  90. package/dist/graph/workspace-cli.js.map +1 -1
  91. package/dist/notes/branches.d.ts +7 -1
  92. package/dist/notes/branches.d.ts.map +1 -1
  93. package/dist/notes/branches.js +31 -3
  94. package/dist/notes/branches.js.map +1 -1
  95. package/dist/notes/cold-start.d.ts +12 -2
  96. package/dist/notes/cold-start.d.ts.map +1 -1
  97. package/dist/notes/cold-start.js +46 -5
  98. package/dist/notes/cold-start.js.map +1 -1
  99. package/dist/notes/credit.d.ts +37 -0
  100. package/dist/notes/credit.d.ts.map +1 -0
  101. package/dist/notes/credit.js +78 -0
  102. package/dist/notes/credit.js.map +1 -0
  103. package/dist/notes/find-notes.d.ts +17 -0
  104. package/dist/notes/find-notes.d.ts.map +1 -0
  105. package/dist/notes/find-notes.js +48 -0
  106. package/dist/notes/find-notes.js.map +1 -0
  107. package/dist/notes/flatten.d.ts +31 -0
  108. package/dist/notes/flatten.d.ts.map +1 -0
  109. package/dist/notes/flatten.js +73 -0
  110. package/dist/notes/flatten.js.map +1 -0
  111. package/dist/notes/git-facts.d.ts +2 -0
  112. package/dist/notes/git-facts.d.ts.map +1 -1
  113. package/dist/notes/git-facts.js +6 -0
  114. package/dist/notes/git-facts.js.map +1 -1
  115. package/dist/notes/home.d.ts +24 -6
  116. package/dist/notes/home.d.ts.map +1 -1
  117. package/dist/notes/home.js +82 -15
  118. package/dist/notes/home.js.map +1 -1
  119. package/dist/notes/learning-fields.d.ts +102 -0
  120. package/dist/notes/learning-fields.d.ts.map +1 -0
  121. package/dist/notes/learning-fields.js +214 -0
  122. package/dist/notes/learning-fields.js.map +1 -0
  123. package/dist/notes/memory-notes.d.ts +71 -0
  124. package/dist/notes/memory-notes.d.ts.map +1 -0
  125. package/dist/notes/memory-notes.js +239 -0
  126. package/dist/notes/memory-notes.js.map +1 -0
  127. package/dist/notes/note-gate.d.ts +42 -0
  128. package/dist/notes/note-gate.d.ts.map +1 -0
  129. package/dist/notes/note-gate.js +181 -0
  130. package/dist/notes/note-gate.js.map +1 -0
  131. package/dist/notes/notes.d.ts +29 -85
  132. package/dist/notes/notes.d.ts.map +1 -1
  133. package/dist/notes/notes.js +69 -254
  134. package/dist/notes/notes.js.map +1 -1
  135. package/dist/notes/pr-reviews.d.ts +35 -7
  136. package/dist/notes/pr-reviews.d.ts.map +1 -1
  137. package/dist/notes/pr-reviews.js +156 -46
  138. package/dist/notes/pr-reviews.js.map +1 -1
  139. package/dist/notes/secrets.d.ts +28 -0
  140. package/dist/notes/secrets.d.ts.map +1 -0
  141. package/dist/notes/secrets.js +362 -0
  142. package/dist/notes/secrets.js.map +1 -0
  143. package/dist/notes/targets.d.ts +37 -0
  144. package/dist/notes/targets.d.ts.map +1 -0
  145. package/dist/notes/targets.js +108 -0
  146. package/dist/notes/targets.js.map +1 -0
  147. package/dist/notes/team-check.d.ts +22 -0
  148. package/dist/notes/team-check.d.ts.map +1 -0
  149. package/dist/notes/team-check.js +130 -0
  150. package/dist/notes/team-check.js.map +1 -0
  151. package/dist/notes/trail-home.d.ts +3 -0
  152. package/dist/notes/trail-home.d.ts.map +1 -0
  153. package/dist/notes/trail-home.js +12 -0
  154. package/dist/notes/trail-home.js.map +1 -0
  155. package/dist/skills/answers-prompt.d.ts +13 -0
  156. package/dist/skills/answers-prompt.d.ts.map +1 -0
  157. package/dist/skills/answers-prompt.js +83 -0
  158. package/dist/skills/answers-prompt.js.map +1 -0
  159. package/dist/skills/never-save.d.ts +5 -0
  160. package/dist/skills/never-save.d.ts.map +1 -0
  161. package/dist/skills/never-save.js +158 -0
  162. package/dist/skills/never-save.js.map +1 -0
  163. package/dist/skills/params.d.ts +39 -0
  164. package/dist/skills/params.d.ts.map +1 -0
  165. package/dist/skills/params.js +275 -0
  166. package/dist/skills/params.js.map +1 -0
  167. package/dist/skills/ran-less.d.ts +5 -0
  168. package/dist/skills/ran-less.d.ts.map +1 -0
  169. package/dist/skills/ran-less.js +51 -0
  170. package/dist/skills/ran-less.js.map +1 -0
  171. package/dist/skills/risk-delta.d.ts +32 -0
  172. package/dist/skills/risk-delta.d.ts.map +1 -0
  173. package/dist/skills/risk-delta.js +56 -0
  174. package/dist/skills/risk-delta.js.map +1 -0
  175. package/dist/skills/risk.d.ts +73 -0
  176. package/dist/skills/risk.d.ts.map +1 -0
  177. package/dist/skills/risk.js +396 -0
  178. package/dist/skills/risk.js.map +1 -0
  179. package/dist/skills/types.d.ts +422 -0
  180. package/dist/skills/types.d.ts.map +1 -0
  181. package/dist/skills/types.js +2 -0
  182. package/dist/skills/types.js.map +1 -0
  183. package/dist/telemetry/contract.d.ts.map +1 -1
  184. package/dist/telemetry/contract.js +8 -6
  185. package/dist/telemetry/contract.js.map +1 -1
  186. package/dist/telemetry/notice.d.ts.map +1 -1
  187. package/dist/telemetry/notice.js +3 -1
  188. package/dist/telemetry/notice.js.map +1 -1
  189. package/dist/trace/check-reads.d.ts +36 -0
  190. package/dist/trace/check-reads.d.ts.map +1 -0
  191. package/dist/trace/check-reads.js +57 -0
  192. package/dist/trace/check-reads.js.map +1 -0
  193. package/dist/trace/host.d.ts +40 -0
  194. package/dist/trace/host.d.ts.map +1 -0
  195. package/dist/trace/host.js +84 -0
  196. package/dist/trace/host.js.map +1 -0
  197. package/dist/trace/redact.d.ts +8 -0
  198. package/dist/trace/redact.d.ts.map +1 -0
  199. package/dist/trace/redact.js +63 -0
  200. package/dist/trace/redact.js.map +1 -0
  201. package/dist/trace/seen-cache.d.ts +9 -0
  202. package/dist/trace/seen-cache.d.ts.map +1 -0
  203. package/dist/trace/seen-cache.js +46 -0
  204. package/dist/trace/seen-cache.js.map +1 -0
  205. package/dist/trace/shell-scan.d.ts +52 -0
  206. package/dist/trace/shell-scan.d.ts.map +1 -0
  207. package/dist/trace/shell-scan.js +318 -0
  208. package/dist/trace/shell-scan.js.map +1 -0
  209. package/dist/trace/shell-words.d.ts +91 -0
  210. package/dist/trace/shell-words.d.ts.map +1 -0
  211. package/dist/trace/shell-words.js +558 -0
  212. package/dist/trace/shell-words.js.map +1 -0
  213. package/dist/trace/shell.d.ts +91 -0
  214. package/dist/trace/shell.d.ts.map +1 -0
  215. package/dist/trace/shell.js +435 -0
  216. package/dist/trace/shell.js.map +1 -0
  217. package/dist/trace/state.d.ts +27 -0
  218. package/dist/trace/state.d.ts.map +1 -0
  219. package/dist/trace/state.js +98 -0
  220. package/dist/trace/state.js.map +1 -0
  221. package/dist/trace/tamper-code.d.ts +9 -0
  222. package/dist/trace/tamper-code.d.ts.map +1 -0
  223. package/dist/trace/tamper-code.js +174 -0
  224. package/dist/trace/tamper-code.js.map +1 -0
  225. package/dist/trace/tamper-git.d.ts +12 -0
  226. package/dist/trace/tamper-git.d.ts.map +1 -0
  227. package/dist/trace/tamper-git.js +77 -0
  228. package/dist/trace/tamper-git.js.map +1 -0
  229. package/dist/trace/types.d.ts +477 -0
  230. package/dist/trace/types.d.ts.map +1 -0
  231. package/dist/trace/types.js +12 -0
  232. package/dist/trace/types.js.map +1 -0
  233. package/dist/trace/walls-glob.d.ts +11 -0
  234. package/dist/trace/walls-glob.d.ts.map +1 -0
  235. package/dist/trace/walls-glob.js +264 -0
  236. package/dist/trace/walls-glob.js.map +1 -0
  237. package/dist/trace/walls-quoted.d.ts +25 -0
  238. package/dist/trace/walls-quoted.d.ts.map +1 -0
  239. package/dist/trace/walls-quoted.js +81 -0
  240. package/dist/trace/walls-quoted.js.map +1 -0
  241. package/dist/upkeep.d.ts +1 -1
  242. package/dist/upkeep.d.ts.map +1 -1
  243. package/dist/upkeep.js +4 -1
  244. package/dist/upkeep.js.map +1 -1
  245. package/dist/util/actions-folder.d.ts +2 -0
  246. package/dist/util/actions-folder.d.ts.map +1 -0
  247. package/dist/util/actions-folder.js +9 -0
  248. package/dist/util/actions-folder.js.map +1 -0
  249. package/dist/util/front-matter.d.ts +31 -4
  250. package/dist/util/front-matter.d.ts.map +1 -1
  251. package/dist/util/front-matter.js +95 -3
  252. package/dist/util/front-matter.js.map +1 -1
  253. package/dist/util/private-file.d.ts +14 -0
  254. package/dist/util/private-file.d.ts.map +1 -0
  255. package/dist/util/private-file.js +82 -0
  256. package/dist/util/private-file.js.map +1 -0
  257. package/dist/util/private-fs.d.ts +25 -0
  258. package/dist/util/private-fs.d.ts.map +1 -0
  259. package/dist/util/private-fs.js +253 -0
  260. package/dist/util/private-fs.js.map +1 -0
  261. package/dist/util/state.d.ts.map +1 -1
  262. package/dist/util/state.js +3 -0
  263. package/dist/util/state.js.map +1 -1
  264. package/dist/viewer/app.js +2 -2
  265. package/package.json +5 -5
  266. package/scripts/run-tests.mjs +14 -2
@@ -17,13 +17,19 @@
17
17
  * source files or prompts into it.
18
18
  */
19
19
  import { readdirSync, readFileSync, existsSync, writeFileSync } from "node:fs";
20
- import { homedir } from "node:os";
21
- import { dirname, join, relative, resolve, sep } from "node:path";
22
- import { matter } from "../util/front-matter.js";
20
+ import { join, relative, resolve, sep } from "node:path";
21
+ import { matter, textList, warnSkipped } from "../util/front-matter.js";
23
22
  import { readBranchCache } from "./branches.js";
24
- import { changedFiles, ownPath } from "./git-facts.js";
25
- import { checkoutRoot, childCheckouts, ensureRepoHome, notePlaces, repoPlace, shownPath } from "./home.js";
23
+ import { PR_SPEEDUP, tokensLabel, tokensWorthSaying } from "./credit.js";
24
+ import { flatLine } from "./flatten.js";
25
+ import { ensureRepoHome, notePlaces, shownPath } from "./home.js";
26
+ import { LEARNING_KEYS, learningFileName, liveLearnings, newLearningId, readLearningFields } from "./learning-fields.js";
26
27
  import { ensureRepoTrail, LEARNINGS_DIR, learningsDir } from "./repo-trail.js";
28
+ import { TOUCH_CHARS, TOUCH_LIMIT } from "./targets.js";
29
+ // Where a learning goes, which to show for a query and how one is credited live in their own files.
30
+ export { findNotes } from "./find-notes.js";
31
+ export { mentionedFiles, noteTargets } from "./targets.js";
32
+ export { commitLines, namesLabel, PR_SPEEDUP, setupCommitLine, TOKEN_CREDIT_FLOOR, tokensLabel, tokensWorthSaying } from "./credit.js";
27
33
  /** The three sections a note is written under. Notes may have others; these are the ones `ask` quotes. */
28
34
  export const SECTIONS = [
29
35
  { key: "decided", heading: "Decided", label: "decided" },
@@ -50,6 +56,10 @@ export function renderNote(n) {
50
56
  fm.push(`cost: { ${cost.join(", ")} }`);
51
57
  if (n.standing)
52
58
  fm.push("standing: true");
59
+ // Evidence is free text, always quoted so YAML never reads "12" back as a number.
60
+ for (const k of LEARNING_KEYS)
61
+ if (n[k])
62
+ fm.push(`${k}: ${k === "evidence" ? JSON.stringify(n[k]) : scalar(n[k])}`);
53
63
  if (n.touches.length)
54
64
  fm.push("touches:", ...n.touches.map((t) => ` - ${scalar(t)}`));
55
65
  fm.push("---", "");
@@ -58,32 +68,47 @@ export function renderNote(n) {
58
68
  function num(v) {
59
69
  return typeof v === "number" && Number.isFinite(v) ? v : undefined;
60
70
  }
61
- /** A note file, or null when it isn't one (no title in its frontmatter). */
71
+ /** Front matter keys that hold one value: a list or a map under one refuses the file. */
72
+ const NOTE_SCALARS = ["title", "author", "date", "branch"];
73
+ /**
74
+ * A note file, or null when it isn't one (no title in its frontmatter), or
75
+ * when its front matter is refused (anchors, aliases, a list for a title) or
76
+ * isn't valid YAML, which says so once on stderr.
77
+ */
62
78
  export function parseNote(text, path) {
63
79
  let parsed;
64
80
  try {
65
- parsed = matter(text);
81
+ parsed = matter(text, { scalars: NOTE_SCALARS });
66
82
  }
67
83
  catch {
84
+ // The parser's own message quotes the file; the warning names it instead.
85
+ warnSkipped("the learning", path, "its front matter isn't valid YAML");
86
+ return null;
87
+ }
88
+ if (parsed.refused) {
89
+ warnSkipped("the learning", path, parsed.refused);
68
90
  return null;
69
91
  }
70
92
  const d = parsed.data;
71
- if (typeof d.title !== "string" || !d.title.trim())
93
+ // Title, author and date reach what agents read: one line each (flatten.ts).
94
+ const title = typeof d.title === "string" ? flatLine(d.title) : "";
95
+ if (!title)
72
96
  return null;
73
- const date = d.date instanceof Date ? d.date.toISOString().slice(0, 10) : String(d.date ?? "");
97
+ const date = d.date instanceof Date ? d.date.toISOString().slice(0, 10) : flatLine(d.date, 40);
74
98
  const cost = (d.cost ?? {});
75
99
  const minutes = num(cost.minutes);
76
100
  const tokens = num(cost.tokens);
77
101
  return {
78
102
  path,
79
- title: d.title.trim(),
80
- author: typeof d.author === "string" ? d.author : "",
103
+ title,
104
+ author: typeof d.author === "string" ? flatLine(d.author, 80) : "",
81
105
  date,
82
106
  branch: typeof d.branch === "string" ? d.branch : undefined,
83
107
  cost: minutes !== undefined || tokens !== undefined ? { minutes, tokens } : undefined,
84
- touches: Array.isArray(d.touches) ? d.touches.map(String) : [],
108
+ touches: textList(d.touches, TOUCH_LIMIT, TOUCH_CHARS),
85
109
  body: parsed.content.trim(),
86
110
  ...(d.standing === true ? { standing: true } : {}),
111
+ ...readLearningFields(d, learningFileName(path)),
87
112
  };
88
113
  }
89
114
  /** A touch saved relative to `checkout`, as a path relative to `here`. */
@@ -118,7 +143,7 @@ function readNotesIn(notesDir, checkout, here, scope) {
118
143
  }
119
144
  /** The file name a note is known by, wherever it sits: one learning on a branch and in the tree is one learning. */
120
145
  export function noteName(n) {
121
- return n.path.slice(Math.max(n.path.lastIndexOf("/"), n.path.lastIndexOf(":")) + 1);
146
+ return learningFileName(n.path);
122
147
  }
123
148
  /**
124
149
  * Every learning that bears on the folder `dir`, newest first: the repo's
@@ -153,7 +178,7 @@ export function listNotes(dir, opts = {}) {
153
178
  }
154
179
  return out.sort((a, b) => (a.date === b.date ? b.path.localeCompare(a.path) : b.date.localeCompare(a.date)));
155
180
  }
156
- /** The learnings on teammates' pushed branches, from the branch cache. */
181
+ /** The learnings on teammates' pushed branches, from the branch cache. One that won't read is skipped, never the rest. */
157
182
  function branchNotes(checkout, here) {
158
183
  const cache = readBranchCache(checkout);
159
184
  if (!cache)
@@ -161,9 +186,15 @@ function branchNotes(checkout, here) {
161
186
  const out = [];
162
187
  for (const b of cache.branches) {
163
188
  for (const l of b.learnings) {
164
- const n = parseNote(l.text, `${b.ref}:${LEARNINGS_DIR}/${l.name}`);
165
- if (n)
166
- out.push({ ...n, scope: "repo", ref: b.ref, touches: n.touches.map((t) => rebaseTouch(t, checkout, here)) });
189
+ const where = `${b.ref}:${LEARNINGS_DIR}/${l.name}`;
190
+ try {
191
+ const n = parseNote(l.text, where);
192
+ if (n)
193
+ out.push({ ...n, scope: "repo", ref: b.ref, touches: n.touches.map((t) => rebaseTouch(t, checkout, here)) });
194
+ }
195
+ catch (e) {
196
+ warnSkipped("the learning", where, e instanceof Error ? e.message : String(e));
197
+ }
167
198
  }
168
199
  }
169
200
  return out;
@@ -198,7 +229,8 @@ export function slug(s, words = 6) {
198
229
  * Write a new learning for the repo `dir` is in, and return it: into the
199
230
  * repo's `.trail/learnings/` (made if needed), or with `scope: "personal"`,
200
231
  * or outside git, into ~/.trail. Never overwrites: a second one with the same
201
- * name on the same day gets `-2`, `-3`.
232
+ * name on the same day gets `-2`, `-3`. Its id is 8 hex digits from the file
233
+ * name it gets (`newLearningId`), written into the file.
202
234
  */
203
235
  export function writeNote(dir, input, scope = "repo") {
204
236
  const { place } = ensureRepoHome(dir);
@@ -215,16 +247,17 @@ export function writeNote(dir, input, scope = "repo") {
215
247
  let name = `${base}.md`;
216
248
  for (let i = 2; existsSync(join(notes, name)); i++)
217
249
  name = `${base}-${i}.md`;
250
+ // One line each, as every reader would show them (flatten.ts): what's written reads back the same.
218
251
  const note = {
219
- title: input.title.trim(),
220
- author: input.author,
252
+ title: flatLine(input.title),
253
+ author: flatLine(input.author, 80),
221
254
  date: input.date,
222
255
  branch: input.branch,
223
256
  cost: input.cost,
224
257
  touches: input.touches ?? [],
225
258
  body: input.body,
226
- scope: inRepo ? "repo" : "personal",
227
259
  ...(input.standing ? { standing: true } : {}),
260
+ ...readLearningFields({ ...input, id: newLearningId(name), scope: inRepo ? "repo" : "personal", applies: inRepo ? undefined : (input.applies ?? place.key), status: "active" }, name),
228
261
  };
229
262
  writeFileSync(join(notes, name), renderNote(note));
230
263
  return { ...note, path: join(notes, name) };
@@ -232,10 +265,10 @@ export function writeNote(dir, input, scope = "repo") {
232
265
  /**
233
266
  * The standing learnings for `dir`: the team's in the checkout and the
234
267
  * person's own, never ones on a teammate's unmerged branch, which nobody has
235
- * reviewed yet.
268
+ * reviewed yet, and only live ones (nothing retired or replaced).
236
269
  */
237
270
  export function standingLearnings(dir) {
238
- return listNotes(dir, { branches: false }).filter((n) => n.standing && !n.ref);
271
+ return liveLearnings(listNotes(dir, { branches: false })).filter((n) => n.standing && !n.ref);
239
272
  }
240
273
  /** Where a learning is, as the agent and the person read it: `.trail/learnings/x.md`, `~/.trail/…`, or `origin/b:.trail/…`. */
241
274
  export function notePlace(n) {
@@ -246,148 +279,6 @@ export function notePlace(n) {
246
279
  const at = path.lastIndexOf(`/${LEARNINGS_DIR}/`);
247
280
  return at === -1 ? shownPath(n.path) : path.slice(at + 1);
248
281
  }
249
- /** Most files one note lists per repo. */
250
- const TOUCH_LIMIT = 10;
251
- /**
252
- * Which repos a session's note belongs in, and what it touched in each.
253
- *
254
- * The repo the note was saved from gets the files it has uncommitted or
255
- * committed since `since`. Every other repo the session edited (`edited`:
256
- * absolute paths, from the agent's transcript) gets the note too, with its
257
- * own files, so a session that changed a backend and the library it calls
258
- * leaves a note in both. Saved from a folder that holds several repos, the
259
- * note goes to each repo the session changed, or stays with the folder when
260
- * it changed none. Two worktrees of one repo are one repo.
261
- *
262
- * `session.read`, when the transcript was found: the files the session opened.
263
- * Then the transcript says what was touched, and the working tree's other
264
- * uncommitted files, there before the session began, are left out.
265
- */
266
- export function noteTargets(dir, edited = [], since, session) {
267
- const here = repoPlace(dir);
268
- const byKey = new Map();
269
- const entryFor = (checkout) => {
270
- const key = repoPlace(checkout).key;
271
- const entry = byKey.get(key) ?? { dir: checkout, files: [], read: [] };
272
- byKey.set(key, entry);
273
- return entry;
274
- };
275
- const add = (checkout, files) => {
276
- const entry = entryFor(checkout);
277
- for (const f of files)
278
- if (f && !ownPath(f) && !entry.files.includes(f))
279
- entry.files.push(f);
280
- };
281
- const uncommitted = !session;
282
- if (here.git)
283
- add(here.checkout, changedFiles(here.checkout, since, TOUCH_LIMIT, uncommitted));
284
- else if (edited.length === 0)
285
- for (const c of childCheckouts(here.checkout))
286
- add(c, changedFiles(c, since, TOUCH_LIMIT, uncommitted));
287
- // The agent's own files (memory, plans, scratch under ~/.claude) aren't what a note is about.
288
- const agentFiles = join(homedir(), ".claude") + sep;
289
- const place = (f) => {
290
- if (f.startsWith(agentFiles))
291
- return null;
292
- const top = checkoutRoot(dirname(f));
293
- if (top)
294
- return [top, relative(top, f).split(sep).join("/")];
295
- if (!here.git && !relative(here.checkout, f).startsWith(".."))
296
- return [here.checkout, relative(here.checkout, f).split(sep).join("/")];
297
- return null;
298
- };
299
- for (const f of edited) {
300
- const at = place(f);
301
- if (at)
302
- add(at[0], [at[1]]);
303
- }
304
- for (const f of session?.read ?? []) {
305
- const at = place(f);
306
- if (!at || ownPath(at[1]))
307
- continue;
308
- const entry = byKey.get(repoPlace(at[0]).key);
309
- // Reads only add to a repo the note already goes to: opening a file elsewhere doesn't make the note about that repo.
310
- if (entry && !entry.files.includes(at[1]) && !entry.read.includes(at[1]))
311
- entry.read.push(at[1]);
312
- else if (!entry && repoPlace(at[0]).key === here.key)
313
- entryFor(here.checkout).read.push(at[1]);
314
- }
315
- const out = [...byKey.entries()]
316
- .filter(([key, e]) => e.files.length > 0 || key === here.key)
317
- .map(([, e]) => ({ dir: e.dir, touches: e.files.slice(0, TOUCH_LIMIT), ...(session ? { read: e.read.slice(0, TOUCH_LIMIT) } : {}) }));
318
- // The repo it was saved from first; a folder of repos only when nothing else was touched.
319
- out.sort((a, b) => Number(repoPlace(b.dir).key === here.key) - Number(repoPlace(a.dir).key === here.key));
320
- const touched = out.filter((t) => t.touches.length > 0);
321
- if (!here.git && touched.length > 0)
322
- return touched;
323
- return out.length ? out : [{ dir: here.checkout, touches: [] }];
324
- }
325
- /** A path-shaped word in a note: `client.go`, `src/a/b.ts:12-30`, `x.go#Fn`. */
326
- const MENTION = /(?:^|[\s(`'"\[])((?:[\w.-]+\/)*[\w-][\w.-]*\.[A-Za-z][A-Za-z0-9]{0,5})(?=$|[\s:#)`'",.;\]])/gm;
327
- /**
328
- * Files of the checkout at `dir` that a note's text names by path. A session
329
- * that only read code edits nothing, so without these its note would touch no
330
- * file, and nothing that looks a note up by file (`trail check`, the ranked
331
- * search) would ever find it.
332
- */
333
- export function mentionedFiles(dir, body) {
334
- const out = [];
335
- for (const m of body.matchAll(MENTION)) {
336
- const f = m[1].replace(/^\.\//, "");
337
- if (out.includes(f) || ownPath(f) || f.startsWith(".."))
338
- continue;
339
- if (existsSync(join(dir, f)))
340
- out.push(f);
341
- if (out.length >= TOUCH_LIMIT)
342
- break;
343
- }
344
- return out;
345
- }
346
- /* -------------------------------------------------------------------------- */
347
- /* finding the notes that matter for a query */
348
- /* -------------------------------------------------------------------------- */
349
- const STOP = new Set("the and for with from that this what when where which into does how why are was were not but you your our out its it's can should would could about after before over under use using used fix find make".split(" "));
350
- function terms(s) {
351
- return [...new Set(s.toLowerCase().split(/[^a-z0-9_]+/).filter((t) => t.length >= 3 && !STOP.has(t)))];
352
- }
353
- /** The file part of a `file#Symbol` touch. */
354
- function touchFile(t) {
355
- return t.split("#")[0];
356
- }
357
- /**
358
- * The notes worth showing next to a query's results: ones whose title or body
359
- * share the query's words, or that touch a file the results point into. At
360
- * most `limit`, best first. A note has to clear a bar — two of the query's
361
- * words, or one in its title, or a shared file — so an unrelated note never
362
- * rides along just because it exists.
363
- */
364
- export function findNotes(notes, query, files = [], limit = 2) {
365
- const q = terms(query);
366
- const hitFiles = new Set(files);
367
- const out = [];
368
- for (const note of notes) {
369
- const title = new Set(terms(note.title));
370
- const text = new Set(terms(`${note.body} ${note.touches.join(" ")}`));
371
- let score = 0;
372
- let matched = 0;
373
- for (const t of q) {
374
- if (title.has(t)) {
375
- score += 3;
376
- matched++;
377
- }
378
- else if (text.has(t)) {
379
- score += 1;
380
- matched++;
381
- }
382
- }
383
- const shared = [...new Set(note.touches.map(touchFile))].filter((f) => hitFiles.has(f));
384
- score += shared.length * 4;
385
- const clears = shared.length > 0 || matched >= 2 || [...title].some((t) => q.includes(t));
386
- if (clears && score >= 3)
387
- out.push({ note, score, shared });
388
- }
389
- return out.sort((a, b) => b.score - a.score || b.note.date.localeCompare(a.note.date)).slice(0, limit);
390
- }
391
282
  /* -------------------------------------------------------------------------- */
392
283
  /* how a note reads inside a query's output */
393
284
  /* -------------------------------------------------------------------------- */
@@ -399,12 +290,6 @@ export function shortDate(date) {
399
290
  return date;
400
291
  return `${MONTHS[Number(m[2]) - 1] ?? m[2]} ${Number(m[3])}`;
401
292
  }
402
- /** `~9.6k tokens`, `~600 tokens`. */
403
- export function tokensLabel(n) {
404
- if (n >= 1000)
405
- return `~${(n / 1000).toFixed(n >= 10_000 ? 0 : 1).replace(/\.0$/, "")}k tokens`;
406
- return `~${n} tokens`;
407
- }
408
293
  /** `took 12 min and ~9.6k tokens to work out`, or null when the note has no cost. */
409
294
  export function costLabel(cost) {
410
295
  if (!cost)
@@ -420,9 +305,6 @@ export function costLabel(cost) {
420
305
  function shellQuote(s) {
421
306
  return `'${s.replace(/'/g, `'\\''`)}'`;
422
307
  }
423
- function clip(s, n = 88) {
424
- return s.length > n ? `${s.slice(0, n - 1).trimEnd()}…` : s;
425
- }
426
308
  /** What reading a note costs an agent, in tokens: its text at ~4 characters a token. */
427
309
  export function readingTokens(n) {
428
310
  return Math.ceil(renderNote(n).length / 4);
@@ -435,10 +317,11 @@ export function savedByNote(n) {
435
317
  const took = n.cost?.tokens ?? 0;
436
318
  return Math.max(0, took - readingTokens(n));
437
319
  }
438
- /** `Anirudh's learning`, `a learning`, `Kumar's learning on kumar/jitter`. */
320
+ /** `Maya's learning`, `a learning`, `Kumar's learning on kumar/jitter`. */
439
321
  export function whoseLearning(n) {
440
- const who = n.author ? `${n.author}'s learning` : "a learning";
441
- return n.ref ? `${who} on ${n.ref.replace(/^origin\//, "")}` : who;
322
+ const author = flatLine(n.author, 80);
323
+ const who = author ? `${author}'s learning` : "a learning";
324
+ return n.ref ? `${who} on ${flatLine(n.ref.replace(/^origin\//, ""), 80)}` : who;
442
325
  }
443
326
  /**
444
327
  * The block `ask` prints above its results: whose learning each is, when,
@@ -446,103 +329,35 @@ export function whoseLearning(n) {
446
329
  * where to read the rest. A learning on a teammate's unmerged branch says so,
447
330
  * with the `git show` that prints it, since there's no file here to open. An agent
448
331
  * relays the cost when it says what the turn saved, which is how the saving
449
- * becomes countable.
332
+ * becomes countable. Every field is flattened to one line: a learning's text
333
+ * comes from whoever wrote it, and a line of its own could pass for trail's.
450
334
  */
451
335
  export function formatNoteHits(hits) {
452
336
  const lines = [];
453
337
  for (const { note } of hits) {
454
- const who = `${note.author ? `${note.author}'s learning` : "a learning"}${note.teammate ? ", a teammate's" : ""}`;
455
- lines.push(`from ${who} · ${shortDate(note.date)} · ${note.title}`);
338
+ const author = flatLine(note.author, 80);
339
+ const who = `${author ? `${author}'s learning` : "a learning"}${note.teammate ? ", a teammate's" : ""}`;
340
+ lines.push(`from ${who} · ${flatLine(shortDate(note.date), 40)} · ${flatLine(note.title)}`);
456
341
  const cost = costLabel(note.cost);
457
342
  for (const s of SECTIONS) {
458
343
  const lead = sectionLead(note.body, s.heading);
459
344
  if (lead)
460
- lines.push(` ${s.label.padEnd(11)} ${clip(lead)}`);
345
+ lines.push(` ${s.label.padEnd(11)} ${flatLine(lead, 88)}`);
461
346
  }
462
347
  if (note.ref) {
463
348
  // On a teammate's branch, not reviewed yet: where to read the rest, and that it's unmerged.
464
- lines.push(` on ${note.ref.replace(/^origin\//, "")}, pushed and not merged yet · git show ${shellQuote(note.path)}${cost ? ` · ${cost}` : ""}`);
349
+ const ref = flatLine(note.ref.replace(/^origin\//, ""), 80);
350
+ lines.push(` on ${ref}, pushed and not merged yet · git show ${shellQuote(flatLine(note.path, 300))}${cost ? ` · ${cost}` : ""}`);
465
351
  lines.push("");
466
352
  continue;
467
353
  }
468
- lines.push(` ${notePlace(note)}${cost ? ` · ${cost}` : ""}`);
354
+ lines.push(` ${flatLine(notePlace(note), 300)}${cost ? ` · ${cost}` : ""}`);
469
355
  lines.push("");
470
356
  }
471
357
  return lines;
472
358
  }
473
359
  /** The line an agent closes its reply with after saving a learning just for the user. */
474
360
  export const PERSONAL_SAVED_LINE = "📝 Saved just for you · stays on this machine, out of the repo";
475
- /** `Anay`, `Anay and Rushil`, `Anay, Rushil and 3 others`. */
476
- export function namesLabel(names) {
477
- if (names.length <= 2)
478
- return names.join(" and ");
479
- if (names.length === 3)
480
- return `${names[0]}, ${names[1]} and ${names[2]}`;
481
- return `${names[0]}, ${names[1]} and ${names.length - 2} others`;
482
- }
483
- /** `48k`, `3.8k`, `600`. */
484
- function tokensShort(n) {
485
- return tokensLabel(n).replace(/^~/, "").replace(" tokens", "");
486
- }
487
- /** What starting from a teammate's learning is worth when its tokens are too few to say: time to a PR. */
488
- export const PR_SPEEDUP = "3x faster";
489
- /**
490
- * Below this many tokens, what a learning saves is too small a number to
491
- * impress, so trail credits it as a faster PR instead.
492
- */
493
- export const TOKEN_CREDIT_FLOOR = 80_000;
494
- /** Whether a token count is big enough to be the credit. */
495
- export function tokensWorthSaying(tokens) {
496
- return (tokens ?? 0) >= TOKEN_CREDIT_FLOOR;
497
- }
498
- /**
499
- * The lines that close a reply after a team learning is saved, one for each
500
- * way the turn can end, since only the agent knows whether it committed the
501
- * learning by then. Uncommitted, it makes the case for committing: who else
502
- * works on the same files, and the head start their agents would get, which
503
- * is what the learning took to work out, or a faster PR when that's small.
504
- */
505
- export function commitLines(note, teammates, where = "files") {
506
- const tokens = note.cost?.tokens;
507
- const short = tokensWorthSaying(tokens) ? tokensShort(tokens) : null;
508
- // "an 80k-token", "an 11k-token": said aloud, they start with a vowel.
509
- const start = short ? `${/^8|^1[18]k$/.test(short) ? "an" : "a"} ${short}-token head start` : null;
510
- const place = where === "files" ? "this part of the codebase" : "this repo";
511
- if (!teammates.length) {
512
- return start
513
- ? {
514
- committed: `📝 Committed · your teammates' agents now get ${start}`,
515
- uncommitted: `🌱 Commit what you learned and give your teammates' agents ${start}`,
516
- }
517
- : {
518
- committed: `📝 Committed · your teammates' agents now get to a PR ${PR_SPEEDUP}`,
519
- uncommitted: `🌱 Commit what you learned and your teammates' agents get to a PR ${PR_SPEEDUP}`,
520
- };
521
- }
522
- const who = namesLabel(teammates);
523
- const work = teammates.length === 1 ? "works" : "work";
524
- return start
525
- ? {
526
- committed: `📝 Committed · ${who} ${work} in ${place}, and their agents now get ${start}`,
527
- uncommitted: `🌱 ${who} ${work} in ${place}. Commit what you learned and give their agents ${start}`,
528
- }
529
- : {
530
- committed: `📝 Committed · ${who} ${work} in ${place}, and their agents now get to a PR ${PR_SPEEDUP}`,
531
- uncommitted: `🌱 ${who} ${work} in ${place}. Commit what you learned and their agents get to a PR ${PR_SPEEDUP}`,
532
- };
533
- }
534
- /**
535
- * The line asking for trail's shared setup to be committed, once: `.trail/`
536
- * and the SessionStart entry in `.claude/settings.json` are what let a
537
- * teammate's Claude read the learnings before they install anything.
538
- */
539
- export function setupCommitLine(teammates) {
540
- const ask = "Commit .trail/ and .claude/settings.json once";
541
- if (!teammates.length)
542
- return `🌱 ${ask}, and your teammates' Claude starts from your learnings, even before they install trail`;
543
- const work = teammates.length === 1 ? "works" : "work";
544
- return `🌱 ${namesLabel(teammates)} ${work} in this repo. ${ask}, and their Claude starts from your learnings, even before they install trail`;
545
- }
546
361
  /**
547
362
  * What starting from these learnings is worth, for the agent's closing line:
548
363
  * the tokens they saved, less what reading them costs, when that's worth
@@ -1 +1 @@
1
- {"version":3,"file":"notes.js","sourceRoot":"","sources":["../../src/notes/notes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"notes.js","sourceRoot":"","sources":["../../src/notes/notes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC/E,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAwB,MAAM,yBAAyB,CAAC;AAC9F,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEzE,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,aAAa,EAAE,aAAa,EAAE,kBAAkB,EAAuB,MAAM,sBAAsB,CAAC;AAC9I,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAExD,oGAAoG;AACpG,OAAO,EAAE,SAAS,EAAgB,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,WAAW,EAAmB,MAAM,cAAc,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,eAAe,EAAE,kBAAkB,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAuCvI,0GAA0G;AAC1G,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;IACxD,EAAE,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,qBAAqB,EAAE,KAAK,EAAE,WAAW,EAAE;IACvE,EAAE,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE;CACrD,CAAC;AAEX,gFAAgF;AAChF,gFAAgF;AAChF,gFAAgF;AAEhF,qFAAqF;AACrF,SAAS,MAAM,CAAC,CAAS;IACvB,OAAO,uCAAuC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACnG,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,CAAqB;IAC9C,MAAM,EAAE,GAAG,CAAC,KAAK,EAAE,UAAU,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,WAAW,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAClG,IAAI,CAAC,CAAC,MAAM;QAAE,EAAE,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACrD,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,IAAI,CAAC,CAAC,IAAI,EAAE,OAAO,KAAK,SAAS;QAAE,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IAC3E,IAAI,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,SAAS;QAAE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACxE,IAAI,IAAI,CAAC,MAAM;QAAE,EAAE,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzD,IAAI,CAAC,CAAC,QAAQ;QAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC1C,kFAAkF;IAClF,KAAK,MAAM,CAAC,IAAI,aAAa;QAAE,IAAI,CAAC,CAAC,CAAC,CAAC;YAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,EAAE,CAAC,CAAC;IACrH,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM;QAAE,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACvF,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACnB,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC;AAChD,CAAC;AAED,SAAS,GAAG,CAAC,CAAU;IACrB,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACrE,CAAC;AAED,yFAAyF;AACzF,MAAM,YAAY,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;AAE3D;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,IAAY,EAAE,IAAY;IAClD,IAAI,MAAuB,CAAC;IAC5B,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC;IACnD,CAAC;IAAC,MAAM,CAAC;QACP,0EAA0E;QAC1E,WAAW,CAAC,cAAc,EAAE,IAAI,EAAE,mCAAmC,CAAC,CAAC;QACvE,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,WAAW,CAAC,cAAc,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,CAAC,GAAG,MAAM,CAAC,IAA+B,CAAC;IACjD,6EAA6E;IAC7E,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACnE,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC/F,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAA4B,CAAC;IACvD,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAClC,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAChC,OAAO;QACL,IAAI;QACJ,KAAK;QACL,MAAM,EAAE,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE;QAClE,IAAI;QACJ,MAAM,EAAE,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;QAC3D,IAAI,EAAE,OAAO,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS;QACrF,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,WAAW,EAAE,WAAW,CAAC;QACtD,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE;QAC3B,GAAG,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClD,GAAG,kBAAkB,CAAC,CAAC,EAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC;KACjD,CAAC;AACJ,CAAC;AAED,0EAA0E;AAC1E,SAAS,WAAW,CAAC,CAAS,EAAE,QAAgB,EAAE,IAAY;IAC5D,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,CAAC,CAAC;IAChC,MAAM,CAAC,IAAI,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACpC,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvE,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACjC,CAAC;AAED,yFAAyF;AACzF,SAAS,WAAW,CAAC,QAAgB,EAAE,QAAgB,EAAE,IAAY,EAAE,KAAoB;IACzF,IAAI,KAAe,CAAC;IACpB,IAAI,CAAC;QACH,KAAK,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IACjE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,GAAG,GAAW,EAAE,CAAC;IACvB,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;YAChF,IAAI,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;QAClG,CAAC;QAAC,MAAM,CAAC;YACP,sBAAsB;QACxB,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,oHAAoH;AACpH,MAAM,UAAU,QAAQ,CAAC,CAAO;IAC9B,OAAO,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAClC,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,SAAS,CAAC,GAAW,EAAE,OAAmD,EAAE;IAC1F,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1B,MAAM,GAAG,GAAW,EAAE,CAAC;IACvB,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,GAAG,GAAG,CAAC,KAAa,EAAE,EAAE;QAC5B,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YACzB,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,SAAS;YAC7B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACf,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACd,CAAC;IACH,CAAC,CAAC;IACF,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAChC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC1E,IAAI,KAAK,CAAC,GAAG;YAAE,GAAG,CAAC,WAAW,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;QAC5F,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;QAC7E,IAAI,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK;YAAE,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;IACnF,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC/G,CAAC;AAED,0HAA0H;AAC1H,SAAS,WAAW,CAAC,QAAgB,EAAE,IAAY;IACjD,MAAM,KAAK,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IACxC,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACtB,MAAM,GAAG,GAAW,EAAE,CAAC;IACvB,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC/B,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,aAAa,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;YACpD,IAAI,CAAC;gBACH,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gBACnC,IAAI,CAAC;oBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;YACtH,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,WAAW,CAAC,cAAc,EAAE,KAAK,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACjF,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,OAAe;IACvD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAClC,MAAM,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,MAAM,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAC5F,IAAI,EAAE,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3B,KAAK,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3C,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,CAAC;QAC3B,IAAI,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC;YAAE,MAAM;QAC/B,IAAI,CAAC;YAAE,OAAO,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,0FAA0F;AAC1F,MAAM,UAAU,IAAI,CAAC,CAAS,EAAE,KAAK,GAAG,CAAC;IACvC,OAAO,CAAC;SACL,WAAW,EAAE;SACb,SAAS,CAAC,MAAM,CAAC;SACjB,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC;SAC7B,KAAK,CAAC,QAAQ,CAAC;SACf,MAAM,CAAC,OAAO,CAAC;SACf,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC;SACf,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC;AAoBD;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CAAC,GAAW,EAAE,KAAqB,EAAE,QAAuB,MAAM;IACzF,MAAM,EAAE,KAAK,EAAE,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,KAAK,KAAK,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC;IAC7C,IAAI,KAAa,CAAC;IAClB,IAAI,MAAM,EAAE,CAAC;QACX,eAAe,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAChC,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC;SAAM,CAAC;QACN,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACnC,CAAC;IACD,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACxG,IAAI,IAAI,GAAG,GAAG,IAAI,KAAK,CAAC;IACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE;QAAE,IAAI,GAAG,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC;IAC7E,mGAAmG;IACnG,MAAM,IAAI,GAAuB;QAC/B,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;QAC5B,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;QAClC,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,EAAE;QAC5B,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7C,GAAG,kBAAkB,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE,aAAa,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,IAAI,CAAC;KACtL,CAAC;IACF,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IACnD,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC;AAC9C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAC3C,OAAO,aAAa,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAChG,CAAC;AAED,+HAA+H;AAC/H,MAAM,UAAU,SAAS,CAAC,CAAO;IAC/B,IAAI,CAAC,CAAC,GAAG;QAAE,OAAO,CAAC,CAAC,IAAI,CAAC;IACzB,+EAA+E;IAC/E,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACxC,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,aAAa,GAAG,CAAC,CAAC;IAClD,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED,gFAAgF;AAChF,gFAAgF;AAChF,gFAAgF;AAEhF,MAAM,MAAM,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AAEpG,wDAAwD;AACxD,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,MAAM,CAAC,GAAG,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjD,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACpB,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC/D,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,SAAS,CAAC,IAAe;IACvC,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,MAAM,CAAC,CAAC;IAClE,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IACpE,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC;AACzE,CAAC;AAED,sGAAsG;AACtG,SAAS,UAAU,CAAC,CAAS;IAC3B,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC;AACzC,CAAC;AAED,wFAAwF;AACxF,MAAM,UAAU,aAAa,CAAC,CAAO;IACnC,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,CAAO;IACjC,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC,CAAC;IACjC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,aAAa,CAAC,CAAO;IACnC,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACtC,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC;IAC3D,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,OAAO,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;AACnF,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc,CAAC,IAAe;IAC5C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACzC,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,aAAa,CAAC,CAAC,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QACxG,KAAK,CAAC,IAAI,CAAC,QAAQ,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC5F,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;YAC/C,IAAI,IAAI;gBAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;QACxE,CAAC;QACD,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YACb,4FAA4F;YAC5F,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YAC5D,KAAK,CAAC,IAAI,CAAC,QAAQ,GAAG,0CAA0C,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACnI,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,SAAS;QACX,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7E,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,yFAAyF;AACzF,MAAM,CAAC,MAAM,mBAAmB,GAAG,gEAAgE,CAAC;AAEpG;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,IAAe;IAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IACpE,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;QAAE,OAAO,GAAG,UAAU,UAAU,CAAC;IAC9D,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9E,OAAO,SAAS,WAAW,CAAC,KAAK,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,OAAO,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AACnF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAe;IACjD,IAAI,CAAC,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IACpE,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;QAAE,OAAO,yBAAyB,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,iBAAiB,qBAAqB,UAAU,GAAG,CAAC;IACzJ,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IACrE,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9E,MAAM,IAAI,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,OAAO,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IACvD,OAAO,6BAA6B,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,UAAU,IAAI,sDAAsD,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,4BAA4B,CAAC;AAChM,CAAC"}
@@ -5,10 +5,15 @@ export interface ReviewedPR {
5
5
  title: string;
6
6
  /** ISO time it was merged. */
7
7
  at: string;
8
- /** Review summaries and inline comments, cleaned and scrubbed; `path` for an inline one. */
8
+ /**
9
+ * Reviewers' inline comments on threads the author acted on (the code moved
10
+ * under them, or the thread was resolved), cleaned and scrubbed, each with
11
+ * its file and the lines it was left on.
12
+ */
9
13
  comments: {
10
14
  path?: string;
11
15
  text: string;
16
+ code?: string;
12
17
  }[];
13
18
  }
14
19
  export interface ReviewFinding {
@@ -20,6 +25,10 @@ export interface ReviewFinding {
20
25
  /** YYYY-MM-DD the newest of them was merged. */
21
26
  last: string;
22
27
  quotes: string[];
28
+ /** Files the cited inline comments were on. */
29
+ paths?: string[];
30
+ /** The code it is about, once {@link anchoredReviews} has checked it exists. */
31
+ touches?: string[];
23
32
  }
24
33
  export interface ReviewResult {
25
34
  /** Merged PRs looked at. */
@@ -39,10 +48,14 @@ export interface ReviewResult {
39
48
  export declare function ghReady(repo: string, gh?: string): boolean;
40
49
  /** A comment as one line for Claude: no HTML comments, no quoted replies, no images, secrets scrubbed. */
41
50
  export declare function reviewWords(raw: string): string | null;
51
+ /** The last lines of a comment's diff hunk: the code it was left on, scrubbed. */
52
+ export declare function commentedCode(hunk: string | undefined): string | undefined;
42
53
  /**
43
- * The merged PRs in GitHub's answer that have a reviewer's comment, newest
44
- * first, and how many merged PRs it had. Bots and the PR's own author don't
45
- * count as reviewers; a deleted account does.
54
+ * The merged PRs in GitHub's answer with a reviewer's inline comment on a
55
+ * thread the author acted on, newest first, and how many merged PRs it had.
56
+ * Bots and the PR's own author don't count as reviewers; a deleted account
57
+ * does. Review summaries and threads nobody acted on are left out: a summary
58
+ * is about the whole PR, and an ignored comment isn't a rule.
46
59
  */
47
60
  export declare function reviewedPRs(data: unknown): {
48
61
  merged: number;
@@ -62,9 +75,8 @@ interface RawReviewFinding {
62
75
  }[];
63
76
  }
64
77
  /**
65
- * The findings whose quotes are really in the review comments, on two or
66
- * more PRs, best first. A quote filed under the wrong PR still counts for the
67
- * PR it's on.
78
+ * The findings whose quotes are really in an acted-on inline comment, newest
79
+ * first. A quote filed under the wrong PR still counts for the PR it's on.
68
80
  */
69
81
  export declare function verifyReviews(raw: RawReviewFinding[], prs: ReviewedPR[]): ReviewFinding[];
70
82
  /**
@@ -90,6 +102,22 @@ export interface ReviewRead {
90
102
  * them with.
91
103
  */
92
104
  export declare function beginReviewRead(repo: string, env?: NodeJS.ProcessEnv, gh?: string): ReviewRead | null;
105
+ /**
106
+ * Words a finding about these files would say: each file's name without its
107
+ * extension, its folder, and a function after `#`. A finding that says none of
108
+ * them is generic advice, whatever it's anchored to.
109
+ */
110
+ export declare function codeWords(touches: string[]): string[];
111
+ /**
112
+ * The findings fit to offer the team, in order: each tied to code that exists
113
+ * now (a file it names, a file its quoted comments were on, or a function the
114
+ * graph knows), with `touches` set to it, naming that code in its words, and
115
+ * not already said in CLAUDE.md, AGENTS.md or a learning. Generic advice, like
116
+ * "comments must match the code", is left out even when it's anchored. The
117
+ * ones on files the team edits most now come first. Same repo, same answer:
118
+ * init's picker and {@link finishReviewRead} both call it.
119
+ */
120
+ export declare function anchoredReviews(repo: string, findings: ReviewFinding[]): ReviewFinding[];
93
121
  /** Each finding as a standing learning in `.trail/learnings/`. The body says which PRs it came from. */
94
122
  export declare function saveReviewFindings(repo: string, findings: ReviewFinding[], author?: string, date?: string): Note[];
95
123
  /**