@nanonets/graft 0.12.1 → 0.15.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 (242) hide show
  1. package/README.md +20 -7
  2. package/dist/ai/crux.d.ts.map +1 -1
  3. package/dist/ai/crux.js +22 -1
  4. package/dist/ai/crux.js.map +1 -1
  5. package/dist/ai/llm/factory.d.ts +5 -1
  6. package/dist/ai/llm/factory.d.ts.map +1 -1
  7. package/dist/ai/llm/factory.js +8 -0
  8. package/dist/ai/llm/factory.js.map +1 -1
  9. package/dist/ai/llm/litellm.d.ts +34 -0
  10. package/dist/ai/llm/litellm.d.ts.map +1 -0
  11. package/dist/ai/llm/litellm.js +45 -0
  12. package/dist/ai/llm/litellm.js.map +1 -0
  13. package/dist/ai/llm/openai.d.ts.map +1 -1
  14. package/dist/ai/llm/openai.js +66 -7
  15. package/dist/ai/llm/openai.js.map +1 -1
  16. package/dist/ai/llm/recover-tool.d.ts +19 -0
  17. package/dist/ai/llm/recover-tool.d.ts.map +1 -0
  18. package/dist/ai/llm/recover-tool.js +109 -0
  19. package/dist/ai/llm/recover-tool.js.map +1 -0
  20. package/dist/ai/providers.d.ts.map +1 -1
  21. package/dist/ai/providers.js +2 -0
  22. package/dist/ai/providers.js.map +1 -1
  23. package/dist/ai/synthesize.d.ts.map +1 -1
  24. package/dist/ai/synthesize.js +19 -5
  25. package/dist/ai/synthesize.js.map +1 -1
  26. package/dist/app/checkout.d.ts +28 -0
  27. package/dist/app/checkout.d.ts.map +1 -0
  28. package/dist/app/checkout.js +100 -0
  29. package/dist/app/checkout.js.map +1 -0
  30. package/dist/app/events.d.ts +37 -0
  31. package/dist/app/events.d.ts.map +1 -0
  32. package/dist/app/events.js +59 -0
  33. package/dist/app/events.js.map +1 -0
  34. package/dist/app/identity.d.ts +54 -0
  35. package/dist/app/identity.d.ts.map +1 -0
  36. package/dist/app/identity.js +96 -0
  37. package/dist/app/identity.js.map +1 -0
  38. package/dist/app/main.d.ts +2 -0
  39. package/dist/app/main.d.ts.map +1 -0
  40. package/dist/app/main.js +56 -0
  41. package/dist/app/main.js.map +1 -0
  42. package/dist/app/pages.d.ts +39 -0
  43. package/dist/app/pages.d.ts.map +1 -0
  44. package/dist/app/pages.js +86 -0
  45. package/dist/app/pages.js.map +1 -0
  46. package/dist/app/queue.d.ts +40 -0
  47. package/dist/app/queue.d.ts.map +1 -0
  48. package/dist/app/queue.js +68 -0
  49. package/dist/app/queue.js.map +1 -0
  50. package/dist/app/review.d.ts +23 -0
  51. package/dist/app/review.d.ts.map +1 -0
  52. package/dist/app/review.js +129 -0
  53. package/dist/app/review.js.map +1 -0
  54. package/dist/app/server.d.ts +40 -0
  55. package/dist/app/server.d.ts.map +1 -0
  56. package/dist/app/server.js +117 -0
  57. package/dist/app/server.js.map +1 -0
  58. package/dist/ask/ask.d.ts +42 -0
  59. package/dist/ask/ask.d.ts.map +1 -1
  60. package/dist/ask/ask.js +442 -57
  61. package/dist/ask/ask.js.map +1 -1
  62. package/dist/ask/file-rank.d.ts +72 -0
  63. package/dist/ask/file-rank.d.ts.map +1 -0
  64. package/dist/ask/file-rank.js +160 -0
  65. package/dist/ask/file-rank.js.map +1 -0
  66. package/dist/ask/file-selection.d.ts +22 -0
  67. package/dist/ask/file-selection.d.ts.map +1 -0
  68. package/dist/ask/file-selection.js +66 -0
  69. package/dist/ask/file-selection.js.map +1 -0
  70. package/dist/ask/fuse.d.ts +16 -0
  71. package/dist/ask/fuse.d.ts.map +1 -1
  72. package/dist/ask/fuse.js +21 -4
  73. package/dist/ask/fuse.js.map +1 -1
  74. package/dist/ask/graphrank.d.ts +18 -0
  75. package/dist/ask/graphrank.d.ts.map +1 -1
  76. package/dist/ask/graphrank.js +65 -19
  77. package/dist/ask/graphrank.js.map +1 -1
  78. package/dist/blast/blast-cli.d.ts +5 -0
  79. package/dist/blast/blast-cli.d.ts.map +1 -1
  80. package/dist/blast/blast-cli.js +16 -1
  81. package/dist/blast/blast-cli.js.map +1 -1
  82. package/dist/blast/blast.d.ts +9 -0
  83. package/dist/blast/blast.d.ts.map +1 -1
  84. package/dist/blast/blast.js.map +1 -1
  85. package/dist/blast/evidence.d.ts +51 -0
  86. package/dist/blast/evidence.d.ts.map +1 -0
  87. package/dist/blast/evidence.js +162 -0
  88. package/dist/blast/evidence.js.map +1 -0
  89. package/dist/blast/owners.d.ts +85 -0
  90. package/dist/blast/owners.d.ts.map +1 -0
  91. package/dist/blast/owners.js +272 -0
  92. package/dist/blast/owners.js.map +1 -0
  93. package/dist/blast/render.d.ts +11 -2
  94. package/dist/blast/render.d.ts.map +1 -1
  95. package/dist/blast/render.js +125 -4
  96. package/dist/blast/render.js.map +1 -1
  97. package/dist/blast/viz.d.ts +20 -0
  98. package/dist/blast/viz.d.ts.map +1 -1
  99. package/dist/blast/viz.js +13 -157
  100. package/dist/blast/viz.js.map +1 -1
  101. package/dist/claude/format.js +1 -1
  102. package/dist/claude/format.js.map +1 -1
  103. package/dist/claude/hooks.d.ts.map +1 -1
  104. package/dist/claude/hooks.js +99 -11
  105. package/dist/claude/hooks.js.map +1 -1
  106. package/dist/claude/settings-merge.d.ts +11 -0
  107. package/dist/claude/settings-merge.d.ts.map +1 -1
  108. package/dist/claude/settings-merge.js +24 -10
  109. package/dist/claude/settings-merge.js.map +1 -1
  110. package/dist/claude/state.d.ts +14 -1
  111. package/dist/claude/state.d.ts.map +1 -1
  112. package/dist/claude/state.js +1 -1
  113. package/dist/claude/state.js.map +1 -1
  114. package/dist/claude/stats.d.ts.map +1 -1
  115. package/dist/claude/stats.js +2 -1
  116. package/dist/claude/stats.js.map +1 -1
  117. package/dist/claude/statusline.d.ts +5 -3
  118. package/dist/claude/statusline.d.ts.map +1 -1
  119. package/dist/claude/statusline.js +6 -4
  120. package/dist/claude/statusline.js.map +1 -1
  121. package/dist/claude/sync-run.d.ts.map +1 -1
  122. package/dist/claude/sync-run.js +10 -2
  123. package/dist/claude/sync-run.js.map +1 -1
  124. package/dist/claude/tally.d.ts +23 -0
  125. package/dist/claude/tally.d.ts.map +1 -0
  126. package/dist/claude/tally.js +138 -0
  127. package/dist/claude/tally.js.map +1 -0
  128. package/dist/cli.js +138 -1
  129. package/dist/cli.js.map +1 -1
  130. package/dist/context/build.d.ts.map +1 -1
  131. package/dist/context/build.js +23 -4
  132. package/dist/context/build.js.map +1 -1
  133. package/dist/context/check.d.ts.map +1 -1
  134. package/dist/context/check.js +2 -1
  135. package/dist/context/check.js.map +1 -1
  136. package/dist/context/node-file.d.ts +2 -1
  137. package/dist/context/node-file.d.ts.map +1 -1
  138. package/dist/context/node-file.js +37 -2
  139. package/dist/context/node-file.js.map +1 -1
  140. package/dist/engine.d.ts +2 -0
  141. package/dist/engine.d.ts.map +1 -1
  142. package/dist/engine.js +1 -0
  143. package/dist/engine.js.map +1 -1
  144. package/dist/graph/bindings.d.ts +25 -3
  145. package/dist/graph/bindings.d.ts.map +1 -1
  146. package/dist/graph/bindings.js +168 -2
  147. package/dist/graph/bindings.js.map +1 -1
  148. package/dist/graph/build.d.ts +4 -0
  149. package/dist/graph/build.d.ts.map +1 -1
  150. package/dist/graph/build.js +7 -4
  151. package/dist/graph/build.js.map +1 -1
  152. package/dist/graph/check.d.ts +3 -0
  153. package/dist/graph/check.d.ts.map +1 -1
  154. package/dist/graph/check.js +58 -11
  155. package/dist/graph/check.js.map +1 -1
  156. package/dist/graph/enrich.d.ts.map +1 -1
  157. package/dist/graph/enrich.js +29 -9
  158. package/dist/graph/enrich.js.map +1 -1
  159. package/dist/graph/extract.d.ts +22 -2
  160. package/dist/graph/extract.d.ts.map +1 -1
  161. package/dist/graph/extract.js +1444 -44
  162. package/dist/graph/extract.js.map +1 -1
  163. package/dist/graph/fingerprint.d.ts +6 -1
  164. package/dist/graph/fingerprint.d.ts.map +1 -1
  165. package/dist/graph/fingerprint.js +7 -3
  166. package/dist/graph/fingerprint.js.map +1 -1
  167. package/dist/graph/generic.d.ts.map +1 -1
  168. package/dist/graph/generic.js +39 -7
  169. package/dist/graph/generic.js.map +1 -1
  170. package/dist/graph/invariants.d.ts +3 -2
  171. package/dist/graph/invariants.d.ts.map +1 -1
  172. package/dist/graph/invariants.js +6 -3
  173. package/dist/graph/invariants.js.map +1 -1
  174. package/dist/graph/queries/dart.scm +42 -0
  175. package/dist/graph/queries/lua.scm +36 -0
  176. package/dist/graph/queries/nix.scm +32 -0
  177. package/dist/graph/refresh.d.ts.map +1 -1
  178. package/dist/graph/refresh.js +6 -2
  179. package/dist/graph/refresh.js.map +1 -1
  180. package/dist/graph/resolve.d.ts +1 -1
  181. package/dist/graph/resolve.d.ts.map +1 -1
  182. package/dist/graph/resolve.js +211 -26
  183. package/dist/graph/resolve.js.map +1 -1
  184. package/dist/graph/scopes.d.ts.map +1 -1
  185. package/dist/graph/scopes.js +2 -1
  186. package/dist/graph/scopes.js.map +1 -1
  187. package/dist/graph/source-files.d.ts +7 -2
  188. package/dist/graph/source-files.d.ts.map +1 -1
  189. package/dist/graph/source-files.js +19 -6
  190. package/dist/graph/source-files.js.map +1 -1
  191. package/dist/graph/traverse-cli.d.ts +13 -2
  192. package/dist/graph/traverse-cli.d.ts.map +1 -1
  193. package/dist/graph/traverse-cli.js +25 -4
  194. package/dist/graph/traverse-cli.js.map +1 -1
  195. package/dist/graph/workspace-cli.d.ts +2 -0
  196. package/dist/graph/workspace-cli.d.ts.map +1 -1
  197. package/dist/graph/workspace-cli.js +3 -0
  198. package/dist/graph/workspace-cli.js.map +1 -1
  199. package/dist/graph/workspace.d.ts.map +1 -1
  200. package/dist/graph/workspace.js +26 -2
  201. package/dist/graph/workspace.js.map +1 -1
  202. package/dist/hosts/mcp-config.d.ts +12 -0
  203. package/dist/hosts/mcp-config.d.ts.map +1 -1
  204. package/dist/hosts/mcp-config.js +54 -5
  205. package/dist/hosts/mcp-config.js.map +1 -1
  206. package/dist/hosts/registry.d.ts.map +1 -1
  207. package/dist/hosts/registry.js +20 -0
  208. package/dist/hosts/registry.js.map +1 -1
  209. package/dist/hosts/retract.d.ts +47 -0
  210. package/dist/hosts/retract.d.ts.map +1 -0
  211. package/dist/hosts/retract.js +473 -0
  212. package/dist/hosts/retract.js.map +1 -0
  213. package/dist/ingest/fs.d.ts +19 -5
  214. package/dist/ingest/fs.d.ts.map +1 -1
  215. package/dist/ingest/fs.js +35 -9
  216. package/dist/ingest/fs.js.map +1 -1
  217. package/dist/telemetry/contract.d.ts.map +1 -1
  218. package/dist/telemetry/contract.js +7 -2
  219. package/dist/telemetry/contract.js.map +1 -1
  220. package/dist/telemetry/sessions.d.ts.map +1 -1
  221. package/dist/telemetry/sessions.js +6 -0
  222. package/dist/telemetry/sessions.js.map +1 -1
  223. package/dist/util/state.d.ts +25 -2
  224. package/dist/util/state.d.ts.map +1 -1
  225. package/dist/util/state.js +24 -2
  226. package/dist/util/state.js.map +1 -1
  227. package/dist/viewer/app.js +2 -1
  228. package/dist/viewer/style.css +14 -0
  229. package/dist/viz/assemble.d.ts +17 -0
  230. package/dist/viz/assemble.d.ts.map +1 -1
  231. package/dist/viz/assemble.js.map +1 -1
  232. package/package.json +19 -4
  233. package/scripts/graph-quality.mjs +3 -3
  234. package/scripts/tally-audit.mjs +140 -0
  235. package/dist/ai/llm/claude-cli.d.ts +0 -60
  236. package/dist/ai/llm/claude-cli.d.ts.map +0 -1
  237. package/dist/ai/llm/claude-cli.js +0 -417
  238. package/dist/ai/llm/claude-cli.js.map +0 -1
  239. package/dist/util/num.d.ts +0 -3
  240. package/dist/util/num.d.ts.map +0 -1
  241. package/dist/util/num.js +0 -20
  242. package/dist/util/num.js.map +0 -1
@@ -1,14 +1,16 @@
1
1
  import { readFileSync, existsSync } from 'node:fs';
2
2
  import { execFileSync, spawn } from 'node:child_process';
3
3
  import { join, basename, isAbsolute } from 'node:path';
4
+ import { homedir } from 'node:os';
4
5
  import { readWiring } from './stats.js';
5
6
  import { formatBlastRadius, relevantRetrieval, formatOrientation } from './format.js';
6
7
  import { indexFreshness, staleBanner } from '../context/check.js';
7
- import { patchStats, readStats, acquireLock, readSession, writeSession } from './state.js';
8
+ import { patchStats, readStats, acquireLock, readSession, writeSession, resolveContextDir } from './state.js';
8
9
  import { graftCliPath, claudeScriptPath } from './paths.js';
9
10
  import { runUpkeep } from '../upkeep-run.js';
10
11
  import { runningVersion } from '../upkeep.js';
11
12
  import { flushClosedSessions } from '../telemetry/sessions.js';
13
+ import { hasSavingsTally, lastAssistantTurn } from './tally.js';
12
14
  import { scopeOf, scopesOfGraph } from '../graph/scopes.js';
13
15
  /** Prompts shorter than this never trigger retrieval — they are almost always
14
16
  * conversational ("yes go ahead", "thanks") and the coverage gate can't judge
@@ -65,11 +67,25 @@ export function promptAskTimeout(dir) {
65
67
  return CHILD_TIMEOUT_MS - HOOK_OVERHEAD_MS;
66
68
  return Math.max(MIN_CHILD_TIMEOUT_MS, installed - HOOK_OVERHEAD_MS);
67
69
  }
68
- /** The timeout on this repo's graft hook entry for `event`, or null if it can't be
69
- * read (no settings file, hand-edited shape, unparseable JSON). */
70
- function installedHookTimeout(dir, event) {
70
+ /**
71
+ * Every settings file Claude Code merges hook definitions from, for a session
72
+ * rooted at `dir`. The per-repo file is not the only place graft's hooks can be
73
+ * installed: declaring them once at the user level wires every repo on the
74
+ * machine at once, and such a repo has no `.claude/settings.json` at all.
75
+ */
76
+ function hookSettingsFiles(dir) {
77
+ const user = process.env.CLAUDE_CONFIG_DIR ?? join(homedir(), '.claude');
78
+ return [
79
+ join(dir, '.claude', 'settings.json'),
80
+ join(dir, '.claude', 'settings.local.json'),
81
+ join(user, 'settings.json'),
82
+ ];
83
+ }
84
+ /** The timeout on one settings file's graft hook entry for `event`, or null if it
85
+ * can't be read (no settings file, hand-edited shape, unparseable JSON). */
86
+ function hookTimeoutIn(file, event) {
71
87
  try {
72
- const settings = JSON.parse(readFileSync(join(dir, '.claude', 'settings.json'), 'utf8'));
88
+ const settings = JSON.parse(readFileSync(file, 'utf8'));
73
89
  const blocks = settings?.hooks?.[event];
74
90
  if (!Array.isArray(blocks))
75
91
  return null;
@@ -86,6 +102,39 @@ function installedHookTimeout(dir, event) {
86
102
  return null;
87
103
  }
88
104
  }
105
+ /**
106
+ * The budget this hook is actually running under, or null when no settings file
107
+ * declares one.
108
+ *
109
+ * The smallest declared timeout wins rather than the nearest, because when more
110
+ * than one file declares the hook Claude Code runs every matching entry and this
111
+ * process cannot tell which one launched it. Guessing high is the expensive
112
+ * mistake: an overrunning child gets the whole hook SIGKILLed, so `emit()` and
113
+ * `writeSession()` never run and the turn silently gets no retrieval at all.
114
+ * Guessing low only shortens one query.
115
+ */
116
+ function installedHookTimeout(dir, event) {
117
+ let smallest = null;
118
+ for (const file of hookSettingsFiles(dir)) {
119
+ const timeout = hookTimeoutIn(file, event);
120
+ if (timeout === null)
121
+ continue;
122
+ if (smallest === null || timeout < smallest)
123
+ smallest = timeout;
124
+ }
125
+ return smallest;
126
+ }
127
+ /**
128
+ * Append `--dir <contextDir>` for the hooks' own `graft ask`/`graft check`
129
+ * children — the one place in this file that spawns the CLI itself rather
130
+ * than reading `graft/` off disk (which already resolves through
131
+ * `resolveContextDir` inside `util/state.ts` and `claude/stats.ts`). A no-op
132
+ * when `GRAFT_DIR` isn't set, so an unconfigured repo's spawned CLI sees
133
+ * byte-identical argv to before this existed.
134
+ */
135
+ function withContextDirArg(dir, args) {
136
+ return process.env.GRAFT_DIR ? [...args, '--dir', resolveContextDir(dir)] : args;
137
+ }
89
138
  function graftJson(dir, args, timeout = CHILD_TIMEOUT_MS) {
90
139
  try {
91
140
  // GRAFT_TEST_CLI is a test seam (mirrors GRAFT_TEST_STDIN/GRAFT_TEST_SYNC_RUN) so
@@ -109,7 +158,7 @@ function graftJson(dir, args, timeout = CHILD_TIMEOUT_MS) {
109
158
  }
110
159
  }
111
160
  function checkStaleCount(dir) {
112
- const r = graftJson(dir, ['check', '.', '--json']);
161
+ const r = graftJson(dir, withContextDirArg(dir, ['check', '.', '--json']));
113
162
  const g = r?.graph ?? {};
114
163
  return (g.changed?.length ?? 0) + (g.added?.length ?? 0) + (g.removed?.length ?? 0);
115
164
  }
@@ -211,9 +260,48 @@ function handleToolSavings(input, dir) {
211
260
  const id = input?.session_id || 'default';
212
261
  const s = readSession(dir, id);
213
262
  s.savedTokens = (s.savedTokens ?? 0) + total;
263
+ // This turn used graft, so it is owed a tally in the reply. countTallyTurn()
264
+ // at Stop resolves whether it got one; a flag rather than a count because a
265
+ // turn with four graft calls is still one reply to the user.
266
+ s.turnUsedGraft = true;
214
267
  writeSession(dir, id, s);
215
268
  }
216
- function handleStop(dir) {
269
+ /**
270
+ * At turn end: did the reply the user just read say what graft saved?
271
+ *
272
+ * Runs only on turns the tool-savings hook flagged, so a conversational turn
273
+ * costs nothing. A turn we cannot observe — a host whose Stop hook names no
274
+ * transcript, an unreadable file, or a Stop that fires before the final prose
275
+ * is on disk — is counted in NEITHER total: the ratio these two numbers form
276
+ * has to mean "of the turns we could check", not "of the turns we tried to".
277
+ */
278
+ function countTallyTurn(input, dir) {
279
+ try {
280
+ const id = input?.session_id || 'default';
281
+ const s = readSession(dir, id);
282
+ if (!s.turnUsedGraft)
283
+ return;
284
+ const turn = lastAssistantTurn(input?.transcript_path);
285
+ // Same reply as last time we looked: no new prose has landed, so this Stop
286
+ // is a duplicate or a race with the transcript write. Drop the turn rather
287
+ // than judge it on a stale message.
288
+ if (!turn || turn.uuid === s.lastTallyUuid) {
289
+ writeSession(dir, id, { ...s, turnUsedGraft: false });
290
+ return;
291
+ }
292
+ s.graftTurns = (s.graftTurns ?? 0) + 1;
293
+ if (hasSavingsTally(turn.text))
294
+ s.reportedTurns = (s.reportedTurns ?? 0) + 1;
295
+ s.turnUsedGraft = false;
296
+ s.lastTallyUuid = turn.uuid;
297
+ writeSession(dir, id, s);
298
+ }
299
+ catch {
300
+ // A turn-end metric is never worth failing the graph sync over.
301
+ }
302
+ }
303
+ function handleStop(input, dir) {
304
+ countTallyTurn(input, dir);
217
305
  // sync-run.js ships next to this module inside the package, so it resolves in
218
306
  // any repo that installs graft (not just graft's own). Defensive existsSync:
219
307
  // if the package is somehow incomplete, skip rather than wedge on syncing:true.
@@ -242,7 +330,7 @@ export async function main(event) {
242
330
  // hook still touches no network; the CLI or the MCP server sends it later.
243
331
  flushClosedSessions(dir);
244
332
  try {
245
- const idx = readFileSync(join(dir, 'graft', 'INDEX.md'), 'utf8');
333
+ const idx = readFileSync(join(resolveContextDir(dir), 'INDEX.md'), 'utf8');
246
334
  const banner = staleBanner(indexFreshness(dir)) ?? undefined;
247
335
  const orientation = formatOrientation(idx, undefined, banner);
248
336
  emit('SessionStart', upkeep.length ? `${upkeep.join('\n')}\n\n${orientation}` : orientation);
@@ -263,12 +351,12 @@ export async function main(event) {
263
351
  return;
264
352
  }
265
353
  if (event === 'stop') {
266
- handleStop(dir);
354
+ handleStop(input, dir);
267
355
  return;
268
356
  }
269
357
  if (event === 'post-edit-sync') {
270
358
  await handlePostEdit(input, dir);
271
- handleStop(dir);
359
+ handleStop(input, dir);
272
360
  return;
273
361
  }
274
362
  if (event === 'prompt') {
@@ -281,7 +369,7 @@ export async function main(event) {
281
369
  // pulls spans itself via `graft ask --source` when a pointer looks right.
282
370
  // relevantRetrieval then drops the pack entirely when the prompt barely
283
371
  // overlaps the top hit or when every hit was already injected this session.
284
- const askArgs = ['ask', prompt, '.', '--json', '-n', '3'];
372
+ const askArgs = withContextDirArg(dir, ['ask', prompt, '.', '--json', '-n', '3']);
285
373
  // "You're working in backend/, weight it": only fires on a multi-scope
286
374
  // repo whose lastFile resolves cleanly to one scope — see lastFileScopeHint.
287
375
  const scopeHint = lastFileScopeHint(dir, readStats(dir)?.lastFile);
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/claude/hooks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/claude/hooks.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,15 @@
1
1
  type Json = Record<string, any>;
2
+ /**
3
+ * Is this allowlist entry one graft wrote?
4
+ *
5
+ * Scoped to the forms graft is actually invoked as — NOT any rule mentioning
6
+ * "graft". A user who allowlists their own `Bash(graft-mytool:*)` keeps it; only
7
+ * graft's own set is replaced, which is what lets a renamed entry disappear on
8
+ * upgrade instead of accumulating beside its replacement.
9
+ */
10
+ export declare function isGraftAllowEntry(entry: unknown): boolean;
11
+ /** Is this footer regex graft's? It points at the card tree, which is graft's alone. */
12
+ export declare function isGraftFooterRegex(re: unknown): boolean;
2
13
  export declare function mergeGraftSettings(existing: Json): {
3
14
  merged: Json;
4
15
  warnings: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"settings-merge.d.ts","sourceRoot":"","sources":["../../src/claude/settings-merge.ts"],"names":[],"mappings":"AAAA,KAAK,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AA6ChC,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,IAAI,GAAG;IAAE,MAAM,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAiCvF"}
1
+ {"version":3,"file":"settings-merge.d.ts","sourceRoot":"","sources":["../../src/claude/settings-merge.ts"],"names":[],"mappings":"AAAA,KAAK,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AA6ChC;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAEzD;AAED,wFAAwF;AACxF,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,CAEvD;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,IAAI,GAAG;IAAE,MAAM,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAkCvF"}
@@ -39,6 +39,21 @@ function graftBlocks() {
39
39
  function isGraftHookEntry(entry) {
40
40
  return JSON.stringify(entry ?? '').includes('graft-hooks.cjs');
41
41
  }
42
+ /**
43
+ * Is this allowlist entry one graft wrote?
44
+ *
45
+ * Scoped to the forms graft is actually invoked as — NOT any rule mentioning
46
+ * "graft". A user who allowlists their own `Bash(graft-mytool:*)` keeps it; only
47
+ * graft's own set is replaced, which is what lets a renamed entry disappear on
48
+ * upgrade instead of accumulating beside its replacement.
49
+ */
50
+ export function isGraftAllowEntry(entry) {
51
+ return /^Bash\((?:graft|npx graft|graft-dev|node dist\/cli\.js)(?::|\))/.test(String(entry));
52
+ }
53
+ /** Is this footer regex graft's? It points at the card tree, which is graft's alone. */
54
+ export function isGraftFooterRegex(re) {
55
+ return String(re).includes('graft/');
56
+ }
42
57
  export function mergeGraftSettings(existing) {
43
58
  const merged = { ...(existing ?? {}) };
44
59
  const warnings = [];
@@ -56,19 +71,18 @@ export function mergeGraftSettings(existing) {
56
71
  const foreign = prior.filter((e) => !isGraftHookEntry(e)); // drop old Graft entries → idempotent
57
72
  merged.hooks[event] = [...foreign, ...blocks];
58
73
  }
59
- const footer = Array.isArray(merged.footerLinksRegexes) ? [...merged.footerLinksRegexes] : [];
60
- if (!footer.includes(FOOTER))
61
- footer.push(FOOTER);
62
- merged.footerLinksRegexes = footer;
74
+ // Drop graft's own prior regex before re-adding, so a change to FOOTER replaces
75
+ // the old pattern instead of stacking beside it. The user's regexes are kept.
76
+ const priorFooter = Array.isArray(merged.footerLinksRegexes) ? merged.footerLinksRegexes : [];
77
+ merged.footerLinksRegexes = [...priorFooter.filter((r) => !isGraftFooterRegex(r)), FOOTER];
63
78
  // headless/subagent runs hard-deny Bash by default; without an allowlist entry
64
79
  // `graft ask`'s own Bash calls (and the skill it installs) can't run out-of-box.
80
+ // Same shape as the hooks merge above: drop graft's prior entries, then add the
81
+ // current set. Append-only left a renamed invocation form in the user's settings
82
+ // forever, with nothing able to remove it.
65
83
  merged.permissions = { ...(merged.permissions ?? {}) };
66
- const allow = Array.isArray(merged.permissions.allow) ? [...merged.permissions.allow] : [];
67
- for (const entry of ALLOW_ENTRIES) {
68
- if (!allow.includes(entry))
69
- allow.push(entry);
70
- }
71
- merged.permissions.allow = allow;
84
+ const priorAllow = Array.isArray(merged.permissions.allow) ? merged.permissions.allow : [];
85
+ merged.permissions.allow = [...priorAllow.filter((e) => !isGraftAllowEntry(e)), ...ALLOW_ENTRIES];
72
86
  return { merged, warnings };
73
87
  }
74
88
  //# sourceMappingURL=settings-merge.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"settings-merge.js","sourceRoot":"","sources":["../../src/claude/settings-merge.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"settings-merge.js","sourceRoot":"","sources":["../../src/claude/settings-merge.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- export { LOCK_STALE_MS, acquireLock, acquireLockIn, releaseLockIn, cacheDir, emptyStats, patchStats, readStats, releaseLock, writeJsonAtomic, writeStats, } from '../util/state.js';
1
+ export { LOCK_STALE_MS, acquireLock, acquireLockIn, releaseLockIn, cacheDir, emptyStats, patchStats, readStats, releaseLock, resolveContextDir, writeJsonAtomic, writeStats, } from '../util/state.js';
2
2
  export type { Stats } from '../util/state.js';
3
3
  export interface SessionState {
4
4
  lastQuery: string | null;
@@ -14,6 +14,19 @@ export interface SessionState {
14
14
  /** Weak-match nudges spent this session, capped so the line stays signal.
15
15
  * Optional for the same backwards-compatibility reason as above. */
16
16
  nudges?: number;
17
+ /** Turns this session in which the agent used a graft retrieval tool — the
18
+ * denominator for "did it tell the user what that saved". Counted at Stop,
19
+ * and only for turns whose reply we could actually read (see claude/tally.ts). */
20
+ graftTurns?: number;
21
+ /** Of those turns, the ones whose reply carried a "graft saved ~N tokens"
22
+ * tally. `graftTurns - reportedTurns` is silent value: saved, never said. */
23
+ reportedTurns?: number;
24
+ /** Set by the tool-savings hook when the current turn touched graft, cleared
25
+ * at Stop once the turn has been counted. Transient, not a total. */
26
+ turnUsedGraft?: boolean;
27
+ /** `uuid` of the last assistant reply already examined, so a Stop that fires
28
+ * without new prose (or fires twice) can't count one reply as two turns. */
29
+ lastTallyUuid?: string;
17
30
  /** Set once this session has been rolled up into a `session_summary`
18
31
  * telemetry event, so a resumed or long-lived session is counted once.
19
32
  * A flag rather than deleting the file: the file still holds `lastQuery` and
@@ -1 +1 @@
1
- {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/claude/state.ts"],"names":[],"mappings":"AASA,OAAO,EACL,aAAa,EACb,WAAW,EACX,aAAa,EACb,aAAa,EACb,QAAQ,EACR,UAAU,EACV,UAAU,EACV,SAAS,EACT,WAAW,EACX,eAAe,EACf,UAAU,GACX,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,UAAU,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IACxC,gFAAgF;IAChF,WAAW,EAAE,MAAM,CAAC;IACpB;;8DAE0D;IAC1D,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B;wEACoE;IACpE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;4DAGwD;IACxD,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAQD,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,YAAY,CAE/D;AACD,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,YAAY,GAAG,IAAI,CAEzE"}
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/claude/state.ts"],"names":[],"mappings":"AASA,OAAO,EACL,aAAa,EACb,WAAW,EACX,aAAa,EACb,aAAa,EACb,QAAQ,EACR,UAAU,EACV,UAAU,EACV,SAAS,EACT,WAAW,EACX,iBAAiB,EACjB,eAAe,EACf,UAAU,GACX,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,UAAU,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IACxC,gFAAgF;IAChF,WAAW,EAAE,MAAM,CAAC;IACpB;;8DAE0D;IAC1D,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B;wEACoE;IACpE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;sFAEkF;IAClF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;iFAC6E;IAC7E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;yEACqE;IACrE,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;gFAC4E;IAC5E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;4DAGwD;IACxD,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAQD,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,YAAY,CAE/D;AACD,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,YAAY,GAAG,IAAI,CAEzE"}
@@ -6,7 +6,7 @@
6
6
  */
7
7
  import { join } from 'node:path';
8
8
  import { cacheDir, readJson, writeJsonAtomic } from '../util/state.js';
9
- export { LOCK_STALE_MS, acquireLock, acquireLockIn, releaseLockIn, cacheDir, emptyStats, patchStats, readStats, releaseLock, writeJsonAtomic, writeStats, } from '../util/state.js';
9
+ export { LOCK_STALE_MS, acquireLock, acquireLockIn, releaseLockIn, cacheDir, emptyStats, patchStats, readStats, releaseLock, resolveContextDir, writeJsonAtomic, writeStats, } from '../util/state.js';
10
10
  function emptySession() {
11
11
  return { lastQuery: null, perAgentQuery: {}, graftReads: 0, sourceReads: 0, savedTokens: 0, injectedPointers: [], nudges: 0 };
12
12
  }
@@ -1 +1 @@
1
- {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/claude/state.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEvE,OAAO,EACL,aAAa,EACb,WAAW,EACX,aAAa,EACb,aAAa,EACb,QAAQ,EACR,UAAU,EACV,UAAU,EACV,SAAS,EACT,WAAW,EACX,eAAe,EACf,UAAU,GACX,MAAM,kBAAkB,CAAC;AAuB1B,SAAS,YAAY;IACnB,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,gBAAgB,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;AAChI,CAAC;AAED,SAAS,WAAW,CAAC,CAAS,EAAE,EAAU,IAAY,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AAE1G,MAAM,UAAU,WAAW,CAAC,CAAS,EAAE,EAAU;IAC/C,OAAO,QAAQ,CAAe,WAAW,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,YAAY,EAAE,CAAC;AACtE,CAAC;AACD,MAAM,UAAU,YAAY,CAAC,CAAS,EAAE,EAAU,EAAE,CAAe;IACjE,eAAe,CAAC,WAAW,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACzC,CAAC"}
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/claude/state.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEvE,OAAO,EACL,aAAa,EACb,WAAW,EACX,aAAa,EACb,aAAa,EACb,QAAQ,EACR,UAAU,EACV,UAAU,EACV,SAAS,EACT,WAAW,EACX,iBAAiB,EACjB,eAAe,EACf,UAAU,GACX,MAAM,kBAAkB,CAAC;AAoC1B,SAAS,YAAY;IACnB,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,gBAAgB,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;AAChI,CAAC;AAED,SAAS,WAAW,CAAC,CAAS,EAAE,EAAU,IAAY,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AAE1G,MAAM,UAAU,WAAW,CAAC,CAAS,EAAE,EAAU;IAC/C,OAAO,QAAQ,CAAe,WAAW,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,YAAY,EAAE,CAAC;AACtE,CAAC;AACD,MAAM,UAAU,YAAY,CAAC,CAAS,EAAE,EAAU,EAAE,CAAe;IACjE,eAAe,CAAC,WAAW,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACzC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../src/claude/stats.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAI7D;AAED,wBAAgB,YAAY,CAC1B,CAAC,EAAE,OAAO,GACT,IAAI,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,YAAY,GAAG,YAAY,CAAC,CAWpF"}
1
+ {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../src/claude/stats.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAGxC,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAI7D;AAED,wBAAgB,YAAY,CAC1B,CAAC,EAAE,OAAO,GACT,IAAI,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,YAAY,GAAG,YAAY,CAAC,CAWpF"}
@@ -1,8 +1,9 @@
1
1
  import { readFileSync } from 'node:fs';
2
2
  import { join } from 'node:path';
3
+ import { resolveContextDir } from '../util/state.js';
3
4
  export function readWiring(projectDir) {
4
5
  try {
5
- return JSON.parse(readFileSync(join(projectDir, 'graft', '.graph', 'wiring.json'), 'utf8'));
6
+ return JSON.parse(readFileSync(join(resolveContextDir(projectDir), '.graph', 'wiring.json'), 'utf8'));
6
7
  }
7
8
  catch {
8
9
  return null;
@@ -1 +1 @@
1
- {"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/claude/stats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAIjC,MAAM,UAAU,UAAU,CAAC,UAAkB;IAC3C,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,CAAC,EAAE,MAAM,CAAC,CAAY,CAAC;IACzG,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,CAAU;IAEV,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;IAC5B,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;IAC5B,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,KAAK,OAAO,CAAC,CAAC,MAAM,CAAC;IAC3E,OAAO;QACL,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,IAAI,KAAK,CAAC,MAAM;QAC5C,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,IAAI,KAAK,CAAC,MAAM;QAC5C,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,IAAI,EAAE;QAClC,UAAU,EAAE,KAAK,CAAC,MAAM;QACxB,UAAU;KACX,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/claude/stats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,MAAM,UAAU,UAAU,CAAC,UAAkB;IAC3C,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,EAAE,MAAM,CAAC,CAAY,CAAC;IACnH,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,CAAU;IAEV,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;IAC5B,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;IAC5B,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,KAAK,OAAO,CAAC,CAAC,MAAM,CAAC;IAC3E,OAAO;QACL,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,IAAI,KAAK,CAAC,MAAM;QAC5C,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,IAAI,KAAK,CAAC,MAAM;QAC5C,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,IAAI,EAAE;QAClC,UAAU,EAAE,KAAK,CAAC,MAAM;QACxB,UAAU;KACX,CAAC;AACJ,CAAC"}
@@ -3,9 +3,11 @@ import { type Stats } from './state.js';
3
3
  * The statusline's fast path is the hook-maintained cache (graft/.cache/stats.json).
4
4
  * When it's absent — a fresh checkout, or a plain `graft build` that doesn't write the
5
5
  * cache — fall back to reading the graph itself (wiring.json) so the bar reflects reality
6
- * immediately instead of showing "not built". The graph carries no drift signal, so it
7
- * reads as synced until the next edit repopulates the cache. Still a pure read (no
8
- * subprocess): the cache is preferred because it carries live dirty/stale state.
6
+ * immediately instead of showing "not built". An empty wiring.json is still a graph
7
+ * (docs-only repos legitimately have 0 nodes); "not built" is only when the artifact
8
+ * is missing. The graph carries no drift signal, so it reads as synced until the next
9
+ * edit repopulates the cache. Still a pure read (no subprocess): the cache is preferred
10
+ * because it carries live dirty/stale state.
9
11
  */
10
12
  export declare function resolveStats(dir: string): Stats | null;
11
13
  export declare function main(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"statusline.d.ts","sourceRoot":"","sources":["../../src/claude/statusline.ts"],"names":[],"mappings":"AAEA,OAAO,EAAsC,KAAK,KAAK,EAAE,MAAM,YAAY,CAAC;AAG5E;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI,CAMtD;AAED,wBAAgB,IAAI,IAAI,IAAI,CAW3B"}
1
+ {"version":3,"file":"statusline.d.ts","sourceRoot":"","sources":["../../src/claude/statusline.ts"],"names":[],"mappings":"AAEA,OAAO,EAAsC,KAAK,KAAK,EAAE,MAAM,YAAY,CAAC;AAG5E;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI,CAMtD;AAED,wBAAgB,IAAI,IAAI,IAAI,CAW3B"}
@@ -6,9 +6,11 @@ import { readWiring, computeStats } from './stats.js';
6
6
  * The statusline's fast path is the hook-maintained cache (graft/.cache/stats.json).
7
7
  * When it's absent — a fresh checkout, or a plain `graft build` that doesn't write the
8
8
  * cache — fall back to reading the graph itself (wiring.json) so the bar reflects reality
9
- * immediately instead of showing "not built". The graph carries no drift signal, so it
10
- * reads as synced until the next edit repopulates the cache. Still a pure read (no
11
- * subprocess): the cache is preferred because it carries live dirty/stale state.
9
+ * immediately instead of showing "not built". An empty wiring.json is still a graph
10
+ * (docs-only repos legitimately have 0 nodes); "not built" is only when the artifact
11
+ * is missing. The graph carries no drift signal, so it reads as synced until the next
12
+ * edit repopulates the cache. Still a pure read (no subprocess): the cache is preferred
13
+ * because it carries live dirty/stale state.
12
14
  */
13
15
  export function resolveStats(dir) {
14
16
  const cached = readStats(dir);
@@ -17,7 +19,7 @@ export function resolveStats(dir) {
17
19
  const wiring = readWiring(dir);
18
20
  if (wiring)
19
21
  return { ...emptyStats(), ...computeStats(wiring) };
20
- return cached;
22
+ return null;
21
23
  }
22
24
  export function main() {
23
25
  let input = {};
@@ -1 +1 @@
1
- {"version":3,"file":"statusline.js","sourceRoot":"","sources":["../../src/claude/statusline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAc,MAAM,YAAY,CAAC;AAC5E,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEtD;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,MAAM,IAAI,MAAM,CAAC,SAAS,GAAG,CAAC;QAAE,OAAO,MAAM,CAAC;IAClD,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,MAAM;QAAE,OAAO,EAAE,GAAG,UAAU,EAAE,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;IAChE,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,IAAI;IAClB,IAAI,KAAK,GAAQ,EAAE,CAAC;IACpB,IAAI,CAAC;QAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC;IACrF,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,KAAK,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACzE,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,UAAU,IAAI,SAAS,CAAC,CAAC;IAChE,MAAM,KAAK,GAAG,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;IACjC,IAAI,KAAK,EAAE,CAAC;QAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;QAAC,OAAO;IAAC,CAAC;IAC5E,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,GAAG,GAAG,KAAK,EAAE,cAAc,EAAE,eAAe,CAAC;IACnD,MAAM,MAAM,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAChE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAChF,CAAC"}
1
+ {"version":3,"file":"statusline.js","sourceRoot":"","sources":["../../src/claude/statusline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAc,MAAM,YAAY,CAAC;AAC5E,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEtD;;;;;;;;;GASG;AACH,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,MAAM,IAAI,MAAM,CAAC,SAAS,GAAG,CAAC;QAAE,OAAO,MAAM,CAAC;IAClD,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,MAAM;QAAE,OAAO,EAAE,GAAG,UAAU,EAAE,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;IAChE,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,IAAI;IAClB,IAAI,KAAK,GAAQ,EAAE,CAAC;IACpB,IAAI,CAAC;QAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC;IACrF,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,KAAK,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACzE,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,UAAU,IAAI,SAAS,CAAC,CAAC;IAChE,MAAM,KAAK,GAAG,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;IACjC,IAAI,KAAK,EAAE,CAAC;QAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;QAAC,OAAO;IAAC,CAAC;IAC5E,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,GAAG,GAAG,KAAK,EAAE,cAAc,EAAE,eAAe,CAAC;IACnD,MAAM,MAAM,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAChE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAChF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"sync-run.d.ts","sourceRoot":"","sources":["../../src/claude/sync-run.ts"],"names":[],"mappings":"AAYA,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,GAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAgB,GAAG,IAAI,CAcjF;AAED,wBAAgB,IAAI,IAAI,IAAI,CAG3B"}
1
+ {"version":3,"file":"sync-run.d.ts","sourceRoot":"","sources":["../../src/claude/sync-run.ts"],"names":[],"mappings":"AAkBA,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,GAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAgB,GAAG,IAAI,CAcjF;AAED,wBAAgB,IAAI,IAAI,IAAI,CAG3B"}
@@ -1,11 +1,19 @@
1
1
  import { execFileSync } from 'node:child_process';
2
2
  import { pathToFileURL } from 'node:url';
3
3
  import { readWiring, computeStats } from './stats.js';
4
- import { patchStats, releaseLock } from './state.js';
4
+ import { patchStats, releaseLock, resolveContextDir } from './state.js';
5
5
  import { graftCliPath } from './paths.js';
6
6
  /** MONEY GUARD: plain `graft build` only — structural, $0, offline. Never --deep. */
7
7
  function realBuild(dir) {
8
- execFileSync(process.execPath, [graftCliPath(), 'build', '.'], { cwd: dir, stdio: 'ignore', timeout: 120000 });
8
+ // GRAFT_TEST_CLI is the same seam hooks.ts's graftJson uses, so a test can
9
+ // point this at a stub and inspect the exact argv it was invoked with.
10
+ const cliPath = process.env.GRAFT_TEST_CLI ?? graftCliPath();
11
+ const args = [cliPath, 'build', '.'];
12
+ // Mirrors `withContextDirArg` in hooks.ts: a no-op unless GRAFT_DIR is set, so an
13
+ // unconfigured repo's rebuild sees byte-identical argv to before this existed.
14
+ if (process.env.GRAFT_DIR)
15
+ args.push('--dir', resolveContextDir(dir));
16
+ execFileSync(process.execPath, args, { cwd: dir, stdio: 'ignore', timeout: 120000 });
9
17
  }
10
18
  export function runSync(dir, build = realBuild) {
11
19
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"sync-run.js","sourceRoot":"","sources":["../../src/claude/sync-run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,qFAAqF;AACrF,SAAS,SAAS,CAAC,GAAW;IAC5B,YAAY,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,EAC3D,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,GAAW,EAAE,QAA6B,SAAS;IACzE,IAAI,CAAC;QACH,KAAK,CAAC,GAAG,CAAC,CAAC;QACX,MAAM,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,CAAC,CAAC,EAAE,CAAC;YAAC,UAAU,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC,CAAC,sDAAsD;QAC/G,UAAU,CAAC,GAAG,EAAE;YACd,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YAC/E,GAAG,YAAY,CAAC,CAAC,CAAC;SACnB,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,UAAU,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,oCAAoC;IAC3E,CAAC;YAAS,CAAC;QACT,WAAW,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,IAAI;IAClB,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5B,IAAI,GAAG;QAAE,OAAO,CAAC,GAAG,CAAC,CAAC;AACxB,CAAC;AAED,uFAAuF;AACvF,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;IAAE,IAAI,EAAE,CAAC"}
1
+ {"version":3,"file":"sync-run.js","sourceRoot":"","sources":["../../src/claude/sync-run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,qFAAqF;AACrF,SAAS,SAAS,CAAC,GAAW;IAC5B,2EAA2E;IAC3E,uEAAuE;IACvE,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,YAAY,EAAE,CAAC;IAC7D,MAAM,IAAI,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IACrC,kFAAkF;IAClF,+EAA+E;IAC/E,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS;QAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC;IACtE,YAAY,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;AACvF,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,GAAW,EAAE,QAA6B,SAAS;IACzE,IAAI,CAAC;QACH,KAAK,CAAC,GAAG,CAAC,CAAC;QACX,MAAM,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,CAAC,CAAC,EAAE,CAAC;YAAC,UAAU,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC,CAAC,sDAAsD;QAC/G,UAAU,CAAC,GAAG,EAAE;YACd,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YAC/E,GAAG,YAAY,CAAC,CAAC,CAAC;SACnB,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,UAAU,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,oCAAoC;IAC3E,CAAC;YAAS,CAAC;QACT,WAAW,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,IAAI;IAClB,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5B,IAAI,GAAG;QAAE,OAAO,CAAC,GAAG,CAAC,CAAC;AACxB,CAAC;AAED,uFAAuF;AACvF,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;IAAE,IAAI,EAAE,CAAC"}
@@ -0,0 +1,23 @@
1
+ /** Did this reply tell the user what graft saved? */
2
+ export declare function hasSavingsTally(text: string): boolean;
3
+ /** One turn's worth of assistant prose, plus the id of the entry it ended on. */
4
+ export interface AssistantTurn {
5
+ /** `uuid` of the last assistant entry, so the same reply is never counted twice. */
6
+ uuid: string;
7
+ /** Every text block the agent emitted since the last user prompt, joined. */
8
+ text: string;
9
+ }
10
+ /**
11
+ * The assistant prose of the turn the transcript ends on, or null when it can't
12
+ * be read (no path — a host whose Stop hook doesn't name one — unreadable file,
13
+ * or a tail with no assistant text in it).
14
+ *
15
+ * Null is meaningfully different from "no tally found": a turn we cannot observe
16
+ * is left out of BOTH the numerator and the denominator by the caller, so a host
17
+ * that exposes no transcript reports no ratio rather than a ratio of zero.
18
+ *
19
+ * Sidechain entries (subagents) are skipped throughout — a subagent's own prose
20
+ * is never what the user read.
21
+ */
22
+ export declare function lastAssistantTurn(transcriptPath: unknown): AssistantTurn | null;
23
+ //# sourceMappingURL=tally.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tally.d.ts","sourceRoot":"","sources":["../../src/claude/tally.ts"],"names":[],"mappings":"AA0CA,qDAAqD;AACrD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAErD;AAED,iFAAiF;AACjF,MAAM,WAAW,aAAa;IAC5B,oFAAoF;IACpF,IAAI,EAAE,MAAM,CAAC;IACb,6EAA6E;IAC7E,IAAI,EAAE,MAAM,CAAC;CACd;AAuCD;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,cAAc,EAAE,OAAO,GAAG,aAAa,GAAG,IAAI,CA0B/E"}