@nanonets/graft 0.13.0 → 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 (212) hide show
  1. package/README.md +16 -5
  2. package/dist/ai/crux.d.ts.map +1 -1
  3. package/dist/ai/crux.js +8 -50
  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 +35 -0
  59. package/dist/ask/ask.d.ts.map +1 -1
  60. package/dist/ask/ask.js +427 -63
  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 +4 -0
  67. package/dist/ask/file-selection.d.ts.map +1 -1
  68. package/dist/ask/file-selection.js +25 -0
  69. package/dist/ask/file-selection.js.map +1 -1
  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 +15 -0
  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/owners.d.ts +85 -0
  86. package/dist/blast/owners.d.ts.map +1 -0
  87. package/dist/blast/owners.js +272 -0
  88. package/dist/blast/owners.js.map +1 -0
  89. package/dist/blast/render.d.ts.map +1 -1
  90. package/dist/blast/render.js +105 -0
  91. package/dist/blast/render.js.map +1 -1
  92. package/dist/blast/viz.d.ts.map +1 -1
  93. package/dist/blast/viz.js +10 -0
  94. package/dist/blast/viz.js.map +1 -1
  95. package/dist/claude/format.js +1 -1
  96. package/dist/claude/format.js.map +1 -1
  97. package/dist/claude/hooks.d.ts.map +1 -1
  98. package/dist/claude/hooks.js +43 -3
  99. package/dist/claude/hooks.js.map +1 -1
  100. package/dist/claude/settings-merge.d.ts +11 -0
  101. package/dist/claude/settings-merge.d.ts.map +1 -1
  102. package/dist/claude/settings-merge.js +24 -10
  103. package/dist/claude/settings-merge.js.map +1 -1
  104. package/dist/claude/state.d.ts +13 -0
  105. package/dist/claude/state.d.ts.map +1 -1
  106. package/dist/claude/state.js.map +1 -1
  107. package/dist/claude/statusline.d.ts +5 -3
  108. package/dist/claude/statusline.d.ts.map +1 -1
  109. package/dist/claude/statusline.js +6 -4
  110. package/dist/claude/statusline.js.map +1 -1
  111. package/dist/claude/tally.d.ts +23 -0
  112. package/dist/claude/tally.d.ts.map +1 -0
  113. package/dist/claude/tally.js +138 -0
  114. package/dist/claude/tally.js.map +1 -0
  115. package/dist/cli.js +117 -2
  116. package/dist/cli.js.map +1 -1
  117. package/dist/context/build.d.ts.map +1 -1
  118. package/dist/context/build.js +23 -4
  119. package/dist/context/build.js.map +1 -1
  120. package/dist/context/check.d.ts.map +1 -1
  121. package/dist/context/check.js +2 -1
  122. package/dist/context/check.js.map +1 -1
  123. package/dist/context/node-file.d.ts +2 -1
  124. package/dist/context/node-file.d.ts.map +1 -1
  125. package/dist/context/node-file.js +37 -2
  126. package/dist/context/node-file.js.map +1 -1
  127. package/dist/engine.d.ts +2 -0
  128. package/dist/engine.d.ts.map +1 -1
  129. package/dist/engine.js +1 -0
  130. package/dist/engine.js.map +1 -1
  131. package/dist/graph/bindings.d.ts +6 -5
  132. package/dist/graph/bindings.d.ts.map +1 -1
  133. package/dist/graph/bindings.js +117 -5
  134. package/dist/graph/bindings.js.map +1 -1
  135. package/dist/graph/build.d.ts +4 -0
  136. package/dist/graph/build.d.ts.map +1 -1
  137. package/dist/graph/build.js +7 -4
  138. package/dist/graph/build.js.map +1 -1
  139. package/dist/graph/check.d.ts.map +1 -1
  140. package/dist/graph/check.js +36 -6
  141. package/dist/graph/check.js.map +1 -1
  142. package/dist/graph/extract.d.ts +9 -2
  143. package/dist/graph/extract.d.ts.map +1 -1
  144. package/dist/graph/extract.js +356 -12
  145. package/dist/graph/extract.js.map +1 -1
  146. package/dist/graph/fingerprint.d.ts +6 -1
  147. package/dist/graph/fingerprint.d.ts.map +1 -1
  148. package/dist/graph/fingerprint.js +7 -3
  149. package/dist/graph/fingerprint.js.map +1 -1
  150. package/dist/graph/generic.d.ts.map +1 -1
  151. package/dist/graph/generic.js +0 -1
  152. package/dist/graph/generic.js.map +1 -1
  153. package/dist/graph/invariants.d.ts +3 -2
  154. package/dist/graph/invariants.d.ts.map +1 -1
  155. package/dist/graph/invariants.js +6 -3
  156. package/dist/graph/invariants.js.map +1 -1
  157. package/dist/graph/refresh.d.ts.map +1 -1
  158. package/dist/graph/refresh.js +6 -2
  159. package/dist/graph/refresh.js.map +1 -1
  160. package/dist/graph/resolve.d.ts +1 -1
  161. package/dist/graph/resolve.d.ts.map +1 -1
  162. package/dist/graph/resolve.js +106 -5
  163. package/dist/graph/resolve.js.map +1 -1
  164. package/dist/graph/scopes.d.ts.map +1 -1
  165. package/dist/graph/scopes.js +2 -1
  166. package/dist/graph/scopes.js.map +1 -1
  167. package/dist/graph/source-files.d.ts +7 -2
  168. package/dist/graph/source-files.d.ts.map +1 -1
  169. package/dist/graph/source-files.js +19 -6
  170. package/dist/graph/source-files.js.map +1 -1
  171. package/dist/graph/workspace-cli.d.ts +2 -0
  172. package/dist/graph/workspace-cli.d.ts.map +1 -1
  173. package/dist/graph/workspace-cli.js +3 -0
  174. package/dist/graph/workspace-cli.js.map +1 -1
  175. package/dist/hosts/mcp-config.d.ts +12 -0
  176. package/dist/hosts/mcp-config.d.ts.map +1 -1
  177. package/dist/hosts/mcp-config.js +46 -5
  178. package/dist/hosts/mcp-config.js.map +1 -1
  179. package/dist/hosts/retract.d.ts +47 -0
  180. package/dist/hosts/retract.d.ts.map +1 -0
  181. package/dist/hosts/retract.js +473 -0
  182. package/dist/hosts/retract.js.map +1 -0
  183. package/dist/ingest/fs.d.ts +19 -5
  184. package/dist/ingest/fs.d.ts.map +1 -1
  185. package/dist/ingest/fs.js +29 -9
  186. package/dist/ingest/fs.js.map +1 -1
  187. package/dist/telemetry/contract.d.ts.map +1 -1
  188. package/dist/telemetry/contract.js +7 -2
  189. package/dist/telemetry/contract.js.map +1 -1
  190. package/dist/telemetry/sessions.d.ts.map +1 -1
  191. package/dist/telemetry/sessions.js +6 -0
  192. package/dist/telemetry/sessions.js.map +1 -1
  193. package/dist/util/state.d.ts +12 -2
  194. package/dist/util/state.d.ts.map +1 -1
  195. package/dist/util/state.js +4 -0
  196. package/dist/util/state.js.map +1 -1
  197. package/dist/viewer/app.js +2 -1
  198. package/dist/viewer/style.css +14 -0
  199. package/dist/viz/assemble.d.ts +17 -0
  200. package/dist/viz/assemble.d.ts.map +1 -1
  201. package/dist/viz/assemble.js.map +1 -1
  202. package/package.json +11 -3
  203. package/scripts/graph-quality.mjs +3 -3
  204. package/scripts/tally-audit.mjs +140 -0
  205. package/dist/ai/llm/claude-cli.d.ts +0 -60
  206. package/dist/ai/llm/claude-cli.d.ts.map +0 -1
  207. package/dist/ai/llm/claude-cli.js +0 -417
  208. package/dist/ai/llm/claude-cli.js.map +0 -1
  209. package/dist/util/num.d.ts +0 -3
  210. package/dist/util/num.d.ts.map +0 -1
  211. package/dist/util/num.js +0 -20
  212. package/dist/util/num.js.map +0 -1
@@ -83,19 +83,60 @@ export function mergeJsonKey(id, path, topKey, entry) {
83
83
  writeFileSync(path, `${JSON.stringify(root, null, 2)}\n`);
84
84
  return { id, path, action };
85
85
  }
86
+ /** The `[mcp_servers.graft]` table header, as written and as matched. */
87
+ const TOML_HEADER = '[mcp_servers.graft]';
88
+ /**
89
+ * Remove the `[mcp_servers.graft]` table from a TOML config, returning the rest.
90
+ *
91
+ * Line-based on purpose: a real parse-and-reserialize would reformat the user's
92
+ * whole file. The table runs from its header to the next `[`-header or EOF, which
93
+ * is exactly the shape {@link upsertCodexToml} appends. Exported so the writer and
94
+ * `retract.ts` can never disagree about what "graft's section" means.
95
+ */
96
+ export function stripTomlSection(text) {
97
+ const lines = text.split('\n');
98
+ const start = lines.findIndex((l) => l.trim() === TOML_HEADER);
99
+ if (start === -1)
100
+ return { rest: text, found: false };
101
+ let end = start + 1;
102
+ while (end < lines.length && !lines[end].trimStart().startsWith('['))
103
+ end++;
104
+ const rest = [...lines.slice(0, start), ...lines.slice(end)]
105
+ .join('\n')
106
+ .replace(/\n{3,}/g, '\n\n')
107
+ .replace(/^\n+/, '');
108
+ return { rest, found: true };
109
+ }
110
+ /**
111
+ * Register graft in a TOML config, replacing any section a previous version left.
112
+ *
113
+ * The old behaviour was to skip entirely once the header existed, which froze the
114
+ * launch command at whatever the first init wrote: a repo wired when graft wasn't
115
+ * on PATH kept the slow `npx` form forever, and no upgrade could correct it. Strip
116
+ * and re-append instead, so this converges like every other writer — foreign
117
+ * tables are untouched either way.
118
+ */
86
119
  function upsertCodexToml(id, path) {
87
120
  const existed = existsSync(path);
88
121
  const text = existed ? readFileSync(path, 'utf8') : '';
89
- if (/^\[mcp_servers\.graft\]$/m.test(text))
90
- return { id, path, action: 'unchanged' };
91
122
  const { command, args } = serverEntry();
92
123
  const argList = args.map((a) => JSON.stringify(a)).join(", ");
93
- const section = `[mcp_servers.graft]\ncommand = \"${command}\"\nargs = [${argList}]\n`;
94
- const sep = text.length === 0 ? '' : text.endsWith('\n') ? '\n' : '\n\n';
124
+ const section = `${TOML_HEADER}\ncommand = \"${command}\"\nargs = [${argList}]\n`;
125
+ const { rest, found } = stripTomlSection(text);
126
+ // Byte-identical already: don't rewrite the file just to reorder it.
127
+ if (found && text === appendSection(rest, section))
128
+ return { id, path, action: 'unchanged' };
95
129
  mkdirSync(dirname(path), { recursive: true });
96
- writeFileSync(path, `${text}${sep}${section}`);
130
+ writeFileSync(path, appendSection(rest, section));
97
131
  return { id, path, action: existed ? 'updated' : 'created' };
98
132
  }
133
+ /** Append a section after exactly one blank line, or at the top of an empty file. */
134
+ function appendSection(text, section) {
135
+ if (text.trim() === '')
136
+ return section;
137
+ const sep = text.endsWith('\n\n') ? '' : text.endsWith('\n') ? '\n' : '\n\n';
138
+ return `${text}${sep}${section}`;
139
+ }
99
140
  function jsonTarget(hostId, id, path, topKey, entry, scope = 'repo') {
100
141
  return { hostId, id, path, scope, kind: 'mcp', what: `${topKey}.graft`, format: 'json', topKey, entry };
101
142
  }
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-config.js","sourceRoot":"","sources":["../../src/hosts/mcp-config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp-config.js","sourceRoot":"","sources":["../../src/hosts/mcp-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ import type { WriteScope } from './plan.js';
2
+ /** What a retraction did to one target. */
3
+ export type RetractAction =
4
+ /** graft's contribution was there and is now gone. */
5
+ 'removed'
6
+ /** the whole file was graft's, so the file itself is gone. */
7
+ | 'deleted'
8
+ /** nothing of graft's here. */
9
+ | 'absent'
10
+ /** file exists but can't be parsed — left untouched rather than risk it. */
11
+ | 'skipped-unparseable';
12
+ export interface Retraction {
13
+ /** The host this target belongs to, for grouping the report. */
14
+ hostId: string;
15
+ path: string;
16
+ /** Short human label for what was removed from that file. */
17
+ what: string;
18
+ scope: WriteScope;
19
+ action: RetractAction;
20
+ }
21
+ export interface RetractOpts {
22
+ home?: string;
23
+ /** false → report only, touch nothing. Defaults to false: a destructive
24
+ * operation must be asked for, never assumed. */
25
+ apply?: boolean;
26
+ /** false → skip targets outside the repo (the ~/.codex and ~/.gemini writes). */
27
+ global?: boolean;
28
+ /** false → keep `graft/` and the ignore entries. `init` sets this: the cache is
29
+ * regenerable but re-parsing a large repo costs minutes, and init is about to
30
+ * use it. */
31
+ cache?: boolean;
32
+ /** Host ids about to be re-written, so their targets are left alone. `init`
33
+ * passes its selection: retracting a file it is one step from rewriting is
34
+ * pure churn (and would report every write as `created`). */
35
+ exclude?: string[];
36
+ }
37
+ /** What a retraction *would* remove. Pure — touches nothing. */
38
+ export declare function planRetract(repo: string, opts?: RetractOpts): Retraction[];
39
+ /**
40
+ * Remove graft's contribution from every target. Reports every target it
41
+ * considered, including the ones that were already clean, so a caller can show
42
+ * either the full sweep or just what changed.
43
+ */
44
+ export declare function runRetract(repo: string, opts?: RetractOpts): Retraction[];
45
+ /** The subset worth showing a user: targets that had something to remove. */
46
+ export declare function changed(retractions: Retraction[]): Retraction[];
47
+ //# sourceMappingURL=retract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retract.d.ts","sourceRoot":"","sources":["../../src/hosts/retract.ts"],"names":[],"mappings":"AAmCA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C,2CAA2C;AAC3C,MAAM,MAAM,aAAa;AACvB,sDAAsD;AACpD,SAAS;AACX,8DAA8D;GAC5D,SAAS;AACX,+BAA+B;GAC7B,QAAQ;AACV,4EAA4E;GAC1E,qBAAqB,CAAC;AAE1B,MAAM,WAAW,UAAU;IACzB,gEAAgE;IAChE,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,6DAA6D;IAC7D,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,UAAU,CAAC;IAClB,MAAM,EAAE,aAAa,CAAC;CACvB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;sDACkD;IAClD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,iFAAiF;IACjF,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;kBAEc;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;kEAE8D;IAC9D,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAkYD,gEAAgE;AAChE,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,WAAgB,GAAG,UAAU,EAAE,CAE9E;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,WAAgB,GAAG,UAAU,EAAE,CAG7E;AAED,6EAA6E;AAC7E,wBAAgB,OAAO,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,UAAU,EAAE,CAE/D"}
@@ -0,0 +1,473 @@
1
+ /**
2
+ * Retraction: undo every edit graft has ever made to a repo.
3
+ *
4
+ * `init` is additive — it writes the files the *currently selected* hosts need
5
+ * and never looks at the rest. So a repo wired by an older version (or by the
6
+ * same version with different `--agents`) keeps the files that run produced,
7
+ * and the two sets accumulate. Retraction is the missing half: it walks every
8
+ * target graft could ever have written and removes graft's contribution, so
9
+ * `retract` + `init` converges the repo on exactly this version's intent.
10
+ *
11
+ * The target list is derived from the same registries `init` writes through
12
+ * (`HOSTS`, `mcpTargets`, `hookTargets`, `claudeTargets`), so a host added
13
+ * later is retractable for free — there is no second list to keep in sync.
14
+ * Only {@link LEGACY_TARGETS} is hand-maintained, and only for paths that have
15
+ * been *removed* from those registries: once a host is gone, nothing else
16
+ * remembers the file it used to write.
17
+ *
18
+ * Two invariants, both load-bearing:
19
+ * 1. Never delete what graft did not write. Inside a file the user owns, only
20
+ * the marker-fenced region and graft-named keys are touched; foreign MCP
21
+ * servers, hooks, and settings are preserved byte for byte.
22
+ * 2. Never leave an empty shell. A file that held nothing but graft's
23
+ * contribution is deleted, not truncated to `{}` or a blank document —
24
+ * an orphan file is the very residue this exists to remove.
25
+ */
26
+ import { readFileSync, writeFileSync, existsSync, rmSync, rmdirSync, statSync, readdirSync } from 'node:fs';
27
+ import { join, dirname } from 'node:path';
28
+ import { homedir } from 'node:os';
29
+ import { HOSTS } from './registry.js';
30
+ import { START, END } from './sections.js';
31
+ import { mcpTargets, stripTomlSection } from './mcp-config.js';
32
+ import { hookTargets } from './codex-hooks.js';
33
+ import { antigravitySkillTargets } from './antigravity.js';
34
+ import { claudeTargets } from '../claude/init.js';
35
+ import { isGraftAllowEntry, isGraftFooterRegex } from '../claude/settings-merge.js';
36
+ /**
37
+ * Paths that older versions wrote and the live registries no longer mention.
38
+ * Empty today — every host in `HOSTS` since the multi-host layer landed is
39
+ * still there, and the marker string and the `graft` name have never changed,
40
+ * so the derived list covers every version to date.
41
+ *
42
+ * This is where a *removed* host's file goes. Deleting an entry from `HOSTS`
43
+ * without adding it here is what strands a file in every existing repo.
44
+ */
45
+ const LEGACY_TARGETS = [];
46
+ // ---------------------------------------------------------------------------
47
+ // primitive operations
48
+ // ---------------------------------------------------------------------------
49
+ /** True when a file has no non-whitespace content left. */
50
+ function isBlank(text) {
51
+ return text.trim() === '';
52
+ }
53
+ function removeFile(path, apply) {
54
+ if (!existsSync(path))
55
+ return 'absent';
56
+ if (apply) {
57
+ rmSync(path, { force: true });
58
+ pruneEmptyDirs(dirname(path));
59
+ }
60
+ return 'deleted';
61
+ }
62
+ /**
63
+ * Walk up from a just-emptied directory removing empty ancestors, so retracting
64
+ * `.claude/skills/graft/SKILL.md` doesn't leave a hollow `skills/graft/` behind.
65
+ * Stops at the first non-empty directory — never climbs out of the repo, because
66
+ * any ancestor that far up has other content in it.
67
+ */
68
+ function pruneEmptyDirs(dir) {
69
+ for (let d = dir, i = 0; i < 6; i++) {
70
+ try {
71
+ if (readdirSync(d).length > 0)
72
+ return;
73
+ rmdirSync(d); // throws on a non-empty dir — exactly the guard we want
74
+ }
75
+ catch {
76
+ return; // not a dir, not empty, or not ours to remove
77
+ }
78
+ const parent = dirname(d);
79
+ if (parent === d)
80
+ return;
81
+ d = parent;
82
+ }
83
+ }
84
+ /**
85
+ * Strip the marker-fenced graft block from a file the user owns.
86
+ *
87
+ * Paragraph spacing around the removed block is collapsed back to a single
88
+ * blank line, so a file that had prose either side of the block reads exactly
89
+ * as it did before graft appended to it.
90
+ */
91
+ function stripSection(path, apply) {
92
+ if (!existsSync(path))
93
+ return 'absent';
94
+ const text = readFileSync(path, 'utf8');
95
+ if (!text.includes(START))
96
+ return 'absent';
97
+ const eol = text.includes('\r\n') ? '\r\n' : '\n';
98
+ const lines = text.split(/\r\n|\n/);
99
+ const out = [];
100
+ let inside = false;
101
+ let found = false;
102
+ for (const line of lines) {
103
+ const t = line.trim();
104
+ if (!inside && t === START) {
105
+ inside = true;
106
+ found = true;
107
+ continue;
108
+ }
109
+ if (inside) {
110
+ if (t === END)
111
+ inside = false;
112
+ continue;
113
+ }
114
+ out.push(line);
115
+ }
116
+ if (!found)
117
+ return 'absent';
118
+ // Collapse the run of blank lines the block left behind, and trim the edges.
119
+ const collapsed = out
120
+ .join('\n')
121
+ .replace(/\n{3,}/g, '\n\n')
122
+ .replace(/^\n+/, '')
123
+ .replace(/\n+$/, '\n');
124
+ if (!apply)
125
+ return isBlank(collapsed) ? 'deleted' : 'removed';
126
+ if (isBlank(collapsed))
127
+ return removeFile(path, true);
128
+ writeFileSync(path, eol === '\n' ? collapsed : collapsed.replace(/\n/g, '\r\n'));
129
+ return 'removed';
130
+ }
131
+ /**
132
+ * Delete `<topKey>.graft` from a JSON config, preserving every other server.
133
+ * An unparseable file is reported and left alone — the user may have comments or
134
+ * a half-finished edit in there, and rewriting it would lose more than it fixes.
135
+ */
136
+ function removeJsonKey(path, topKey, apply) {
137
+ if (!existsSync(path))
138
+ return 'absent';
139
+ let root;
140
+ try {
141
+ root = JSON.parse(readFileSync(path, 'utf8'));
142
+ }
143
+ catch {
144
+ return 'skipped-unparseable';
145
+ }
146
+ if (typeof root !== 'object' || root === null || Array.isArray(root))
147
+ return 'skipped-unparseable';
148
+ const bucket = root[topKey];
149
+ if (typeof bucket !== 'object' || bucket === null || Array.isArray(bucket))
150
+ return 'absent';
151
+ const map = bucket;
152
+ if (!('graft' in map))
153
+ return 'absent';
154
+ if (!apply) {
155
+ return Object.keys(map).length === 1 && Object.keys(root).length === 1 ? 'deleted' : 'removed';
156
+ }
157
+ delete map.graft;
158
+ if (Object.keys(map).length === 0)
159
+ delete root[topKey];
160
+ if (Object.keys(root).length === 0)
161
+ return removeFile(path, true);
162
+ writeFileSync(path, `${JSON.stringify(root, null, 2)}\n`);
163
+ return 'removed';
164
+ }
165
+ /**
166
+ * Delete the `[mcp_servers.graft]` table from a TOML config.
167
+ *
168
+ * Line-based on purpose: a real TOML parse-and-reserialize would reformat the
169
+ * user's whole file. The table runs from its header to the next `[`-header or
170
+ * EOF, which is exactly what `upsertCodexToml` appends.
171
+ */
172
+ function removeTomlSection(path, apply) {
173
+ if (!existsSync(path))
174
+ return 'absent';
175
+ const { rest: kept, found } = stripTomlSection(readFileSync(path, 'utf8'));
176
+ if (!found)
177
+ return 'absent';
178
+ if (!apply)
179
+ return isBlank(kept) ? 'deleted' : 'removed';
180
+ if (isBlank(kept))
181
+ return removeFile(path, true);
182
+ writeFileSync(path, kept.endsWith('\n') ? kept : `${kept}\n`);
183
+ return 'removed';
184
+ }
185
+ /**
186
+ * Remove graft's fragments from `.claude/settings.json`, keeping the user's.
187
+ *
188
+ * The statusline check is by *shim path*, not exact string equality: an older
189
+ * version's command differed in shape, and `mergeGraftSettings` would read that
190
+ * as a hand-written statusline and refuse to touch it forever. Matching the
191
+ * helper path recognizes graft's own output across every version that wrote it.
192
+ */
193
+ function stripClaudeSettings(path, apply) {
194
+ if (!existsSync(path))
195
+ return 'absent';
196
+ let root;
197
+ try {
198
+ root = JSON.parse(readFileSync(path, 'utf8'));
199
+ }
200
+ catch {
201
+ return 'skipped-unparseable';
202
+ }
203
+ if (typeof root !== 'object' || root === null || Array.isArray(root))
204
+ return 'skipped-unparseable';
205
+ const before = JSON.stringify(root);
206
+ const isGraftCmd = (v) => JSON.stringify(v ?? '').includes('graft-statusline.cjs');
207
+ for (const key of ['statusLine', 'subagentStatusLine']) {
208
+ if (root[key] !== undefined && isGraftCmd(root[key]))
209
+ delete root[key];
210
+ }
211
+ if (root.hooks && typeof root.hooks === 'object' && !Array.isArray(root.hooks)) {
212
+ for (const event of Object.keys(root.hooks)) {
213
+ const prior = root.hooks[event];
214
+ if (!Array.isArray(prior))
215
+ continue;
216
+ const kept = prior.filter((e) => !JSON.stringify(e ?? '').includes('graft-hooks.cjs'));
217
+ if (kept.length === 0)
218
+ delete root.hooks[event];
219
+ else
220
+ root.hooks[event] = kept;
221
+ }
222
+ if (Object.keys(root.hooks).length === 0)
223
+ delete root.hooks;
224
+ }
225
+ if (Array.isArray(root.footerLinksRegexes)) {
226
+ const kept = root.footerLinksRegexes.filter((r) => !isGraftFooterRegex(r));
227
+ if (kept.length === 0)
228
+ delete root.footerLinksRegexes;
229
+ else
230
+ root.footerLinksRegexes = kept;
231
+ }
232
+ if (root.permissions && Array.isArray(root.permissions.allow)) {
233
+ const kept = root.permissions.allow.filter((a) => !isGraftAllowEntry(a));
234
+ if (kept.length === 0)
235
+ delete root.permissions.allow;
236
+ else
237
+ root.permissions.allow = kept;
238
+ if (Object.keys(root.permissions).length === 0)
239
+ delete root.permissions;
240
+ }
241
+ const after = JSON.stringify(root);
242
+ if (after === before)
243
+ return 'absent';
244
+ if (!apply)
245
+ return Object.keys(root).length === 0 ? 'deleted' : 'removed';
246
+ if (Object.keys(root).length === 0)
247
+ return removeFile(path, true);
248
+ writeFileSync(path, `${JSON.stringify(root, null, 2)}\n`);
249
+ return 'removed';
250
+ }
251
+ /** Remove graft's PostToolUse/SessionStart/etc. entries from Codex's hooks.json. */
252
+ function stripCodexHooks(path, apply) {
253
+ if (!existsSync(path))
254
+ return 'absent';
255
+ let root;
256
+ try {
257
+ root = JSON.parse(readFileSync(path, 'utf8'));
258
+ }
259
+ catch {
260
+ return 'skipped-unparseable';
261
+ }
262
+ if (typeof root !== 'object' || root === null || Array.isArray(root))
263
+ return 'skipped-unparseable';
264
+ if (!root.hooks || typeof root.hooks !== 'object' || Array.isArray(root.hooks))
265
+ return 'absent';
266
+ const before = JSON.stringify(root);
267
+ for (const event of Object.keys(root.hooks)) {
268
+ const prior = root.hooks[event];
269
+ if (!Array.isArray(prior))
270
+ continue;
271
+ const kept = prior.filter((e) => !JSON.stringify(e ?? '').includes('graft-hooks.cjs'));
272
+ if (kept.length === 0)
273
+ delete root.hooks[event];
274
+ else
275
+ root.hooks[event] = kept;
276
+ }
277
+ if (Object.keys(root.hooks).length === 0)
278
+ delete root.hooks;
279
+ if (JSON.stringify(root) === before)
280
+ return 'absent';
281
+ if (!apply)
282
+ return Object.keys(root).length === 0 ? 'deleted' : 'removed';
283
+ if (Object.keys(root).length === 0)
284
+ return removeFile(path, true);
285
+ writeFileSync(path, `${JSON.stringify(root, null, 2)}\n`);
286
+ return 'removed';
287
+ }
288
+ /**
289
+ * Drop graft's block from `.gitignore` / `.ignore`.
290
+ *
291
+ * Both are written as a comment line plus entries; the comment is graft's own
292
+ * wording, so it identifies the block. Entries are matched individually too, so
293
+ * a hand-tidied file (comment deleted, entry kept) still retracts cleanly.
294
+ */
295
+ function stripIgnoreEntries(path, entries, apply) {
296
+ if (!existsSync(path))
297
+ return 'absent';
298
+ const text = readFileSync(path, 'utf8');
299
+ const kept = text
300
+ .split('\n')
301
+ .filter((l) => {
302
+ const t = l.trim();
303
+ if (t.startsWith('#') && t.includes('graft'))
304
+ return false;
305
+ return !entries.some((re) => re.test(t));
306
+ })
307
+ .join('\n')
308
+ .replace(/\n{3,}/g, '\n\n')
309
+ .replace(/^\n+/, '')
310
+ .replace(/\n+$/, '\n');
311
+ if (kept === text)
312
+ return 'absent';
313
+ if (!apply)
314
+ return isBlank(kept) ? 'deleted' : 'removed';
315
+ if (isBlank(kept))
316
+ return removeFile(path, true);
317
+ writeFileSync(path, kept.endsWith('\n') ? kept : `${kept}\n`);
318
+ return 'removed';
319
+ }
320
+ function removeDir(path, apply) {
321
+ try {
322
+ if (!statSync(path).isDirectory())
323
+ return 'absent';
324
+ }
325
+ catch {
326
+ return 'absent';
327
+ }
328
+ if (apply) {
329
+ rmSync(path, { recursive: true, force: true });
330
+ pruneEmptyDirs(dirname(path));
331
+ }
332
+ return 'deleted';
333
+ }
334
+ /**
335
+ * Every target graft could have written, in removal order.
336
+ *
337
+ * Derived from the live registries, NOT hand-listed: `HOSTS` gives the
338
+ * instruction files, `mcpTargets` over *all* host ids gives the MCP configs
339
+ * (with the format and top-level key each one needs), and `claudeTargets`
340
+ * gives the Claude Code layer. That's what keeps this complete as hosts are
341
+ * added — see the module note.
342
+ */
343
+ function targets(repo, opts) {
344
+ const home = opts.home ?? homedir();
345
+ const exclude = new Set(opts.exclude ?? []);
346
+ const out = [];
347
+ /**
348
+ * Paths a *kept* host also writes, which must survive even though some other,
349
+ * unselected host names them too.
350
+ *
351
+ * Three hosts share `AGENTS.md` (agents, hermes, antigravity). Excluding by host
352
+ * id alone would strip that shared block on behalf of a host nobody selected,
353
+ * and the only reason the end state came out right was that `init` happened to
354
+ * rewrite it immediately afterwards. Exclude by path as well, so retraction
355
+ * never depends on what runs next.
356
+ */
357
+ const keptPaths = new Set();
358
+ for (const host of HOSTS) {
359
+ if (exclude.has(host.id))
360
+ keptPaths.add(join(repo, host.relPath));
361
+ }
362
+ for (const t of mcpTargets(repo, [...exclude], { home }))
363
+ keptPaths.add(t.path);
364
+ if (exclude.has('claude'))
365
+ for (const t of claudeTargets(repo))
366
+ keptPaths.add(t.path);
367
+ if (exclude.has('agents'))
368
+ for (const t of hookTargets(home))
369
+ keptPaths.add(t.path);
370
+ if (exclude.has('antigravity'))
371
+ for (const t of antigravitySkillTargets(home))
372
+ keptPaths.add(t.path);
373
+ /** Queue a target unless a kept host owns that path, or it's already queued. */
374
+ const seen = new Set();
375
+ const add = (t) => {
376
+ if (keptPaths.has(t.path) || seen.has(t.path))
377
+ return;
378
+ seen.add(t.path);
379
+ out.push(t);
380
+ };
381
+ // 1. Instruction files, one per host. Owned files go wholesale; shared files
382
+ // lose only their fenced block.
383
+ for (const host of HOSTS) {
384
+ if (exclude.has(host.id))
385
+ continue;
386
+ const path = join(repo, host.relPath);
387
+ add(host.kind === 'owned'
388
+ ? { hostId: host.id, path, what: 'graft-owned instruction file', scope: 'repo', run: (a) => removeFile(path, a) }
389
+ : { hostId: host.id, path, what: 'fenced graft section', scope: 'repo', run: (a) => stripSection(path, a) });
390
+ }
391
+ // 1b. Instruction files from hosts that no longer exist in the registry.
392
+ for (const legacy of LEGACY_TARGETS) {
393
+ const path = join(repo, legacy.relPath);
394
+ add({
395
+ hostId: 'legacy', path, what: legacy.what, scope: 'repo',
396
+ run: (a) => (legacy.kind === 'owned' ? removeFile(path, a) : stripSection(path, a)),
397
+ });
398
+ }
399
+ // 2. MCP registrations. Asking for every host id at once yields the union of
400
+ // config files, each already carrying its format and top-level key.
401
+ const allIds = HOSTS.map((h) => h.id).filter((id) => !exclude.has(id));
402
+ for (const t of mcpTargets(repo, allIds, { home })) {
403
+ if (opts.global === false && t.scope === 'global')
404
+ continue;
405
+ add({
406
+ hostId: t.hostId, path: t.path, what: t.what, scope: t.scope,
407
+ run: (a) => (t.format === 'toml' ? removeTomlSection(t.path, a) : removeJsonKey(t.path, t.topKey, a)),
408
+ });
409
+ }
410
+ // 3. Claude Code: settings fragments, both shims, the skill, and the .mcp.json key.
411
+ if (!exclude.has('claude')) {
412
+ const [settings, statusline, hooks, skill, mcp] = claudeTargets(repo).map((t) => t.path);
413
+ for (const t of [
414
+ { hostId: 'claude', path: settings, what: 'statusline + hooks + allowlist + footer regex', scope: 'repo', run: (a) => stripClaudeSettings(settings, a) },
415
+ { hostId: 'claude', path: statusline, what: 'statusline shim', scope: 'repo', run: (a) => removeFile(statusline, a) },
416
+ { hostId: 'claude', path: hooks, what: 'hooks shim', scope: 'repo', run: (a) => removeFile(hooks, a) },
417
+ { hostId: 'claude', path: skill, what: 'graft skill', scope: 'repo', run: (a) => removeFile(skill, a) },
418
+ { hostId: 'claude', path: mcp, what: 'mcpServers.graft', scope: 'repo', run: (a) => removeJsonKey(mcp, 'mcpServers', a) },
419
+ ])
420
+ add(t);
421
+ }
422
+ // 4. Global: Codex's hook shim + entries, and Antigravity's shared skill.
423
+ if (opts.global !== false) {
424
+ if (!exclude.has('agents')) {
425
+ for (const t of hookTargets(home)) {
426
+ add({
427
+ hostId: t.hostId, path: t.path, what: t.what, scope: 'global',
428
+ run: (a) => (t.path.endsWith('.json') ? stripCodexHooks(t.path, a) : removeFile(t.path, a)),
429
+ });
430
+ }
431
+ }
432
+ if (!exclude.has('antigravity')) {
433
+ for (const t of antigravitySkillTargets(home)) {
434
+ add({ hostId: t.hostId, path: t.path, what: t.what, scope: 'global', run: (a) => removeFile(t.path, a) });
435
+ }
436
+ }
437
+ }
438
+ // 5. The graph cache and the ignore entries that admit it. Last, so a failure
439
+ // here can't strand the wiring half-retracted.
440
+ if (opts.cache !== false) {
441
+ const cache = join(repo, 'graft');
442
+ const gitignore = join(repo, '.gitignore');
443
+ const ignore = join(repo, '.ignore');
444
+ for (const t of [
445
+ { hostId: 'graph', path: cache, what: 'local graph cache', scope: 'repo', run: (a) => removeDir(cache, a) },
446
+ { hostId: 'graph', path: gitignore, what: 'graft/ ignore entry', scope: 'repo', run: (a) => stripIgnoreEntries(gitignore, [/^\/?graft\/?$/], a) },
447
+ { hostId: 'graph', path: ignore, what: 'graft/ search re-admit entries', scope: 'repo', run: (a) => stripIgnoreEntries(ignore, [/^!?graft\/?$/, /^graft\/\.(cache|graph)\/?$/], a) },
448
+ ])
449
+ add(t);
450
+ }
451
+ return out;
452
+ }
453
+ // ---------------------------------------------------------------------------
454
+ // public API
455
+ // ---------------------------------------------------------------------------
456
+ /** What a retraction *would* remove. Pure — touches nothing. */
457
+ export function planRetract(repo, opts = {}) {
458
+ return targets(repo, { ...opts, apply: false }).map(({ run, ...t }) => ({ ...t, action: run(false) }));
459
+ }
460
+ /**
461
+ * Remove graft's contribution from every target. Reports every target it
462
+ * considered, including the ones that were already clean, so a caller can show
463
+ * either the full sweep or just what changed.
464
+ */
465
+ export function runRetract(repo, opts = {}) {
466
+ const apply = opts.apply !== false;
467
+ return targets(repo, opts).map(({ run, ...t }) => ({ ...t, action: run(apply) }));
468
+ }
469
+ /** The subset worth showing a user: targets that had something to remove. */
470
+ export function changed(retractions) {
471
+ return retractions.filter((r) => r.action !== 'absent');
472
+ }
473
+ //# sourceMappingURL=retract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retract.js","sourceRoot":"","sources":["../../src/hosts/retract.ts"],"names":[],"mappings":"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"}