@nanonets/graft 0.6.0 → 0.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/README.md +93 -52
  2. package/dist/ai/llm/types.d.ts +2 -2
  3. package/dist/ai/llm/types.js +1 -1
  4. package/dist/ask/ask.d.ts +49 -1
  5. package/dist/ask/ask.d.ts.map +1 -1
  6. package/dist/ask/ask.js +270 -68
  7. package/dist/ask/ask.js.map +1 -1
  8. package/dist/ask/fuse.d.ts +59 -17
  9. package/dist/ask/fuse.d.ts.map +1 -1
  10. package/dist/ask/fuse.js +51 -25
  11. package/dist/ask/fuse.js.map +1 -1
  12. package/dist/ask/graphrank.d.ts +6 -0
  13. package/dist/ask/graphrank.d.ts.map +1 -1
  14. package/dist/ask/graphrank.js +5 -1
  15. package/dist/ask/graphrank.js.map +1 -1
  16. package/dist/claude/format.d.ts +0 -1
  17. package/dist/claude/format.d.ts.map +1 -1
  18. package/dist/claude/format.js +18 -21
  19. package/dist/claude/format.js.map +1 -1
  20. package/dist/claude/hooks.d.ts +16 -0
  21. package/dist/claude/hooks.d.ts.map +1 -1
  22. package/dist/claude/hooks.js +79 -2
  23. package/dist/claude/hooks.js.map +1 -1
  24. package/dist/claude/settings-merge.d.ts.map +1 -1
  25. package/dist/claude/settings-merge.js +13 -6
  26. package/dist/claude/settings-merge.js.map +1 -1
  27. package/dist/claude/skill-template.d.ts.map +1 -1
  28. package/dist/claude/skill-template.js +117 -76
  29. package/dist/claude/skill-template.js.map +1 -1
  30. package/dist/cli-epilogue.js +1 -1
  31. package/dist/cli-epilogue.js.map +1 -1
  32. package/dist/cli.d.ts +3 -15
  33. package/dist/cli.d.ts.map +1 -1
  34. package/dist/cli.js +79 -45
  35. package/dist/cli.js.map +1 -1
  36. package/dist/context/node-file.d.ts +10 -0
  37. package/dist/context/node-file.d.ts.map +1 -1
  38. package/dist/context/node-file.js +34 -1
  39. package/dist/context/node-file.js.map +1 -1
  40. package/dist/context/savings.d.ts +6 -0
  41. package/dist/context/savings.d.ts.map +1 -1
  42. package/dist/context/savings.js +9 -1
  43. package/dist/context/savings.js.map +1 -1
  44. package/dist/engine.d.ts +1 -0
  45. package/dist/engine.d.ts.map +1 -1
  46. package/dist/engine.js +7 -1
  47. package/dist/engine.js.map +1 -1
  48. package/dist/graph/build.d.ts.map +1 -1
  49. package/dist/graph/build.js +37 -1
  50. package/dist/graph/build.js.map +1 -1
  51. package/dist/graph/map.d.ts +34 -2
  52. package/dist/graph/map.d.ts.map +1 -1
  53. package/dist/graph/map.js +107 -23
  54. package/dist/graph/map.js.map +1 -1
  55. package/dist/graph/types.d.ts +12 -0
  56. package/dist/graph/types.d.ts.map +1 -1
  57. package/dist/graph/workspace-cli.d.ts +37 -0
  58. package/dist/graph/workspace-cli.d.ts.map +1 -0
  59. package/dist/graph/workspace-cli.js +74 -0
  60. package/dist/graph/workspace-cli.js.map +1 -0
  61. package/dist/graph/workspace.d.ts +116 -124
  62. package/dist/graph/workspace.d.ts.map +1 -1
  63. package/dist/graph/workspace.js +353 -297
  64. package/dist/graph/workspace.js.map +1 -1
  65. package/dist/hosts/instructions.d.ts.map +1 -1
  66. package/dist/hosts/instructions.js +3 -0
  67. package/dist/hosts/instructions.js.map +1 -1
  68. package/dist/mcp/tools.d.ts.map +1 -1
  69. package/dist/mcp/tools.js +61 -1
  70. package/dist/mcp/tools.js.map +1 -1
  71. package/package.json +1 -2
package/dist/graph/map.js CHANGED
@@ -1,5 +1,6 @@
1
1
  import { languageOf } from "./extract.js";
2
2
  import { WALK_RELATIONS } from "./relations.js";
3
+ import { scopeLabel, scopeOf, scopesOfGraph } from "./scopes.js";
3
4
  import { savingsFooter, savingsFor } from "../context/savings.js";
4
5
  const DEFAULT_MAX_DIRS = 16;
5
6
  const DEFAULT_HUBS_PER_DIR = 3;
@@ -46,21 +47,26 @@ function sortedLanguages(paths) {
46
47
  return [...set].sort();
47
48
  }
48
49
  /**
49
- * Build the repo map from an already-loaded `GraphV1`. Deterministic: same
50
- * graph in → byte-identical `RepoMap` out (modulo insertion order, which is
51
- * never observed — everything meaningful is sorted).
50
+ * The directory-clustering core, factored out so it can run once over the
51
+ * whole graph (single-scope) or once per scope's own node subset
52
+ * (multi-scope) with identical grouping/splitting/sorting rules.
53
+ *
54
+ * `stripPrefix` is the scope prefix to strip before computing depth/split
55
+ * ("" for single-scope / the root scope — a no-op, `relPath` is then the
56
+ * identity function). Reported `DirEntry.path`s are always repo-rooted
57
+ * (the prefix is reattached), never scope-relative — a hit stays directly
58
+ * openable without mentally re-prefixing it.
52
59
  */
53
- export function buildRepoMap(graph, opts = {}) {
54
- const maxDirs = opts.maxDirs ?? DEFAULT_MAX_DIRS;
55
- const hubsPerDir = opts.hubsPerDir ?? DEFAULT_HUBS_PER_DIR;
56
- const hotspotsN = opts.hotspots ?? DEFAULT_HOTSPOTS;
57
- const fileNodes = graph.nodes.filter((n) => n.kind === "file");
60
+ function computeDirEntries(nodes, inDegree, maxDirs, hubsPerDir, stripPrefix) {
61
+ const fileNodes = nodes.filter((n) => n.kind === "file");
58
62
  const totalFiles = fileNodes.length;
59
- // Pass 1: depth-1 file counts, to find (at most one) group over the
60
- // split threshold — two groups can't both exceed 60% of the same total.
63
+ const relPath = (path) => stripPrefix === "" ? path : path === stripPrefix ? "" : path.slice(stripPrefix.length + 1);
64
+ // Pass 1: depth-1 file counts (relative to `stripPrefix`), to find (at most
65
+ // one) group over the split threshold — two groups can't both exceed 60%
66
+ // of the same total.
61
67
  const depth1FileCounts = new Map();
62
68
  for (const n of fileNodes) {
63
- const key = dirKey(n.path, 1);
69
+ const key = dirKey(relPath(n.path), 1);
64
70
  depth1FileCounts.set(key, (depth1FileCounts.get(key) ?? 0) + 1);
65
71
  }
66
72
  let splitSegment = null;
@@ -72,11 +78,12 @@ export function buildRepoMap(graph, opts = {}) {
72
78
  }
73
79
  }
74
80
  }
75
- const depthFor = (path) => (splitSegment !== null && dirKey(path, 1) === splitSegment ? 2 : 1);
81
+ const depthFor = (rp) => (splitSegment !== null && dirKey(rp, 1) === splitSegment ? 2 : 1);
76
82
  // Pass 2: assign every node (file and symbol alike) to its group.
77
83
  const groups = new Map();
78
- for (const n of graph.nodes) {
79
- const key = dirKey(n.path, depthFor(n.path));
84
+ for (const n of nodes) {
85
+ const rp = relPath(n.path);
86
+ const key = dirKey(rp, depthFor(rp));
80
87
  let g = groups.get(key);
81
88
  if (!g) {
82
89
  g = { files: [], symbols: [] };
@@ -87,17 +94,68 @@ export function buildRepoMap(graph, opts = {}) {
87
94
  else
88
95
  g.symbols.push(n);
89
96
  }
90
- const inDegree = computeInDegree(graph);
91
- const dirEntries = [...groups.entries()].map(([path, g]) => ({
92
- path,
97
+ const fullPath = (relKey) => stripPrefix === "" ? relKey : relKey === "" ? stripPrefix : `${stripPrefix}/${relKey}`;
98
+ // A group's key is a FILE's own path (not a directory) exactly when the
99
+ // split-refinement's depth-2 grouping had nowhere deeper to go and
100
+ // `dirKey` degenerated to the file's full relative path verbatim — see
101
+ // `dirKey`'s doc. Detecting that by membership (rather than re-deriving
102
+ // depth here) stays correct regardless of which pass produced the key.
103
+ const fileRelPaths = new Set(fileNodes.map((f) => relPath(f.path)));
104
+ const dirEntries = [...groups.entries()].map(([relKey, g]) => ({
105
+ path: fullPath(relKey),
93
106
  files: g.files.length,
94
107
  symbols: g.symbols.length,
95
108
  languages: sortedLanguages(g.files.map((f) => f.path)),
96
109
  hubs: topHubs(g.symbols, inDegree, hubsPerDir),
110
+ isFile: fileRelPaths.has(relKey),
97
111
  }));
98
112
  dirEntries.sort((a, b) => b.symbols - a.symbols || a.path.localeCompare(b.path));
99
113
  const dropped = Math.max(0, dirEntries.length - maxDirs);
100
114
  const dirs = dirEntries.slice(0, maxDirs);
115
+ return { dirs, dropped };
116
+ }
117
+ /**
118
+ * Build the repo map from an already-loaded `GraphV1`. Deterministic: same
119
+ * graph in → byte-identical `RepoMap` out (modulo insertion order, which is
120
+ * never observed — everything meaningful is sorted).
121
+ *
122
+ * Single-scope repos (`scopesOfGraph(graph).length <= 1`, the overwhelming
123
+ * majority) take the exact pre-scope-awareness path below — same branch guard
124
+ * `ask.ts` uses, so this is a byte-level regression guarantee. Multi-scope
125
+ * repos group `dirs` by scope FIRST (see `scopes` on `RepoMap`); `dirs` itself
126
+ * is then empty and `scopes` carries the breakdown instead.
127
+ */
128
+ export function buildRepoMap(graph, opts = {}) {
129
+ const maxDirs = opts.maxDirs ?? DEFAULT_MAX_DIRS;
130
+ const hubsPerDir = opts.hubsPerDir ?? DEFAULT_HUBS_PER_DIR;
131
+ const hotspotsN = opts.hotspots ?? DEFAULT_HOTSPOTS;
132
+ const fileNodes = graph.nodes.filter((n) => n.kind === "file");
133
+ const totalFiles = fileNodes.length;
134
+ const inDegree = computeInDegree(graph);
135
+ const scopes = scopesOfGraph(graph);
136
+ let dirs;
137
+ let dropped;
138
+ let scopeGroups;
139
+ if (scopes.length <= 1) {
140
+ const computed = computeDirEntries(graph.nodes, inDegree, maxDirs, hubsPerDir, "");
141
+ dirs = computed.dirs;
142
+ dropped = computed.dropped;
143
+ }
144
+ else {
145
+ // Multi-scope: each scope gets its OWN dir breakdown, computed exactly
146
+ // like the single-scope path above but fed only that scope's node
147
+ // subset (prefix stripped for depth/split math, reattached on output).
148
+ // Grouping by raw first-path-segment instead would pool every scope
149
+ // nested more than one segment deep (e.g. two workspace packages both
150
+ // under `packages/`) into one shared bucket, losing the split entirely.
151
+ dirs = [];
152
+ dropped = 0;
153
+ scopeGroups = scopes.map((s) => {
154
+ const nodesInScope = graph.nodes.filter((n) => scopeOf(n.path, scopes).prefix === s.prefix);
155
+ const computed = computeDirEntries(nodesInScope, inDegree, maxDirs, hubsPerDir, s.prefix);
156
+ return { scope: scopeLabel(s.prefix), dirs: computed.dirs, dropped: computed.dropped };
157
+ });
158
+ }
101
159
  const allSymbols = graph.nodes.filter((n) => n.kind !== "file");
102
160
  const hotspots = topHubs(allSymbols, inDegree, hotspotsN);
103
161
  return {
@@ -108,6 +166,7 @@ export function buildRepoMap(graph, opts = {}) {
108
166
  languages: sortedLanguages(fileNodes.map((f) => f.path)),
109
167
  },
110
168
  dirs,
169
+ scopes: scopeGroups,
111
170
  hotspots,
112
171
  dropped,
113
172
  saved: savingsFor(graph, fileNodes.map((f) => f.path)),
@@ -122,7 +181,11 @@ function formatDirHub(h) {
122
181
  return `${h.name} (${basenameOf(h.path)}, ${h.inDegree}←)`;
123
182
  }
124
183
  function formatDirLine(d) {
125
- const label = `${d.path}/`.padEnd(DIR_COL_WIDTH);
184
+ // `d.path` is only ever a real directory unless the >60% split refinement
185
+ // bottomed out on a file with nowhere deeper to split into (`d.isFile`) —
186
+ // only then is the trailing "/" wrong (it would glue onto the file's own
187
+ // extension, e.g. "auth.ts/").
188
+ const label = (d.isFile ? d.path : `${d.path}/`).padEnd(DIR_COL_WIDTH);
126
189
  const counts = `${d.files} files · ${d.symbols} symbols`;
127
190
  const hubs = d.hubs.length ? ` hubs: ${d.hubs.map(formatDirHub).join(", ")}` : "";
128
191
  return `${label}${counts}${hubs}`;
@@ -130,6 +193,12 @@ function formatDirLine(d) {
130
193
  function formatHotspot(h) {
131
194
  return `${h.name} · ${h.kind} · ${h.path}:${h.span} · ${h.inDegree}←`;
132
195
  }
196
+ /** The "+N more directories not shown" note, or null when nothing was dropped. */
197
+ function droppedNote(dropped) {
198
+ if (dropped <= 0)
199
+ return null;
200
+ return `… +${dropped} more director${dropped === 1 ? "y" : "ies"} not shown (raise max-dirs to see more)`;
201
+ }
133
202
  /**
134
203
  * Render a `RepoMap` as the human report. Deterministic (same map in → same
135
204
  * string out) and targets <= 6000 chars for a typical repo (the `maxDirs`/
@@ -140,12 +209,27 @@ export function formatRepoMap(map) {
140
209
  const { totals } = map;
141
210
  const header = `repo map — ${totals.files} files · ${totals.symbols} symbols · ${totals.edges} edges · ${totals.languages.join(", ")}`;
142
211
  const lines = [header, ""];
143
- for (const d of map.dirs)
144
- lines.push(formatDirLine(d));
145
- if (map.dropped > 0) {
146
- lines.push(`… +${map.dropped} more director${map.dropped === 1 ? "y" : "ies"} not shown (raise max-dirs to see more)`);
212
+ if (map.scopes) {
213
+ // Multi-scope: scope label as the top-level group heading, that scope's
214
+ // own dirs listed under it — `map.dirs` is empty here, see `buildRepoMap`.
215
+ for (const sg of map.scopes) {
216
+ lines.push(`## ${sg.scope}`);
217
+ for (const d of sg.dirs)
218
+ lines.push(formatDirLine(d));
219
+ const note = droppedNote(sg.dropped);
220
+ if (note)
221
+ lines.push(note);
222
+ lines.push("");
223
+ }
224
+ }
225
+ else {
226
+ for (const d of map.dirs)
227
+ lines.push(formatDirLine(d));
228
+ const note = droppedNote(map.dropped);
229
+ if (note)
230
+ lines.push(note);
231
+ lines.push("");
147
232
  }
148
- lines.push("");
149
233
  lines.push(`hotspots: ${map.hotspots.map(formatHotspot).join(" ")}`);
150
234
  const body = lines.join("\n");
151
235
  return body + savingsFooter(body, map.saved) + "\n";
@@ -1 +1 @@
1
- {"version":3,"file":"map.js","sourceRoot":"","sources":["../../src/graph/map.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"map.js","sourceRoot":"","sources":["../../src/graph/map.ts"],"names":[],"mappings":"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"}
@@ -45,12 +45,24 @@ export interface EdgeV1 {
45
45
  relation: Relation;
46
46
  confidence: Confidence;
47
47
  }
48
+ /** A ranking scope: a sub-project discovered by project-marker files (`package.json`,
49
+ * `go.mod`, ...). `prefix` is a posix path relative to the graph root ("" = root scope);
50
+ * `label` is the same value without a trailing slash (also "" for root); `markers` lists
51
+ * which marker file(s) were found in that directory. See `src/graph/scopes.ts`. */
52
+ export interface ScopeV1 {
53
+ prefix: string;
54
+ label: string;
55
+ markers: string[];
56
+ }
48
57
  export interface GraphV1 {
49
58
  meta: {
50
59
  version: 1;
51
60
  nodeCount: number;
52
61
  edgeCount: number;
53
62
  languages: string[];
63
+ /** Ranking scopes: posix path prefixes relative to the graph root, "" = root scope.
64
+ * Absent (old graphs) ≡ [{ prefix: "", label: "" }]. Sorted by prefix length desc. */
65
+ scopes?: ScopeV1[];
54
66
  };
55
67
  nodes: NodeV1[];
56
68
  edges: EdgeV1[];
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/graph/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,yFAAyF;AACzF,MAAM,MAAM,IAAI,GACZ,MAAM,GACN,OAAO,GACP,UAAU,GACV,QAAQ,GACR,WAAW,GACX,MAAM,GACN,MAAM,GACN,QAAQ,CAAC;AAEb,4CAA4C;AAC5C,MAAM,MAAM,UAAU,GAAG,WAAW,GAAG,UAAU,CAAC;AAElD,kEAAkE;AAClE,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;AAEzD;4EAC4E;AAC5E,MAAM,WAAW,IAAI;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,MAAM;IAErB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,IAAI,CAAC;IAGX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,KAAK,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,SAAS,CAAC,EAAE,MAAM,CAAC;IAOnB,aAAa,EAAE,YAAY,CAAC;IAC5B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;CACnB;AAED,MAAM,MAAM,QAAQ,GAChB,UAAU,GACV,OAAO,GACP,SAAS,GACT,YAAY,GACZ,YAAY,GACZ,SAAS,CAAC;AAEd,MAAM,WAAW,MAAM;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,QAAQ,CAAC;IACnB,UAAU,EAAE,UAAU,CAAC;CACxB;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE;QACJ,OAAO,EAAE,CAAC,CAAC;QACX,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;IACF,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/graph/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,yFAAyF;AACzF,MAAM,MAAM,IAAI,GACZ,MAAM,GACN,OAAO,GACP,UAAU,GACV,QAAQ,GACR,WAAW,GACX,MAAM,GACN,MAAM,GACN,QAAQ,CAAC;AAEb,4CAA4C;AAC5C,MAAM,MAAM,UAAU,GAAG,WAAW,GAAG,UAAU,CAAC;AAElD,kEAAkE;AAClE,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;AAEzD;4EAC4E;AAC5E,MAAM,WAAW,IAAI;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,MAAM;IAErB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,IAAI,CAAC;IAGX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,KAAK,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,SAAS,CAAC,EAAE,MAAM,CAAC;IAOnB,aAAa,EAAE,YAAY,CAAC;IAC5B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;CACnB;AAED,MAAM,MAAM,QAAQ,GAChB,UAAU,GACV,OAAO,GACP,SAAS,GACT,YAAY,GACZ,YAAY,GACZ,SAAS,CAAC;AAEd,MAAM,WAAW,MAAM;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,QAAQ,CAAC;IACnB,UAAU,EAAE,UAAU,CAAC;CACxB;AAED;;;mFAGmF;AACnF,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE;QACJ,OAAO,EAAE,CAAC,CAAC;QACX,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,EAAE,CAAC;QACpB;8FACsF;QACtF,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC;KACpB,CAAC;IACF,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB"}
@@ -0,0 +1,37 @@
1
+ import type { EngineConfig } from "../ai/providers.js";
2
+ import type { Direction } from "./traverse.js";
3
+ export interface WorkspaceBuildOptions {
4
+ deep: boolean;
5
+ extensions?: string[];
6
+ concurrency?: number;
7
+ /** Provider/model/key config for child builds — WITHOUT any contextDir
8
+ * override, so each child writes to its own `<child>/graft/`. */
9
+ childConfig: EngineConfig;
10
+ override?: string;
11
+ }
12
+ /** Build every git child into its own committable `graft/`, then replace the
13
+ * parent's `graft/` with `workspace.json`. Prints the one-time split warning
14
+ * first when migrating away from a mega-graph. */
15
+ export declare function runWorkspaceBuild(root: string, opts: WorkspaceBuildOptions): Promise<void>;
16
+ export declare function runWorkspaceAsk(root: string, override: string | undefined, query: string, opts: {
17
+ limit?: number;
18
+ source?: boolean;
19
+ full?: boolean;
20
+ in?: string;
21
+ json?: boolean;
22
+ }): void;
23
+ export declare function runWorkspaceGrep(root: string, override: string | undefined, pattern: string, opts: {
24
+ ignoreCase?: boolean;
25
+ fixed?: boolean;
26
+ json?: boolean;
27
+ }): void;
28
+ export declare function runWorkspaceMap(root: string, override: string | undefined, opts: {
29
+ maxDirs?: number;
30
+ }): void;
31
+ export declare function runWorkspaceCheck(root: string, override?: string): void;
32
+ export declare function runWorkspaceCallers(root: string, override: string | undefined, symbol: string, opts: {
33
+ direction?: Direction;
34
+ depth?: number;
35
+ in?: string;
36
+ }): void;
37
+ //# sourceMappingURL=workspace-cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-cli.d.ts","sourceRoot":"","sources":["../../src/graph/workspace-cli.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAa/C,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,OAAO,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;qEACiE;IACjE,WAAW,EAAE,YAAY,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;kDAEkD;AAClD,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBhG;AAED,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,KAAK,EAAE,MAAM,EACb,IAAI,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GACtF,IAAI,CAIN;AAED,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAC9D,IAAI,CAYN;AAED,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,IAAI,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GACzB,IAAI,CAEN;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAIvE;AAED,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE;IAAE,SAAS,CAAC,EAAE,SAAS,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3D,IAAI,CAON"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * CLI print/exit wrappers + per-child build orchestration for workspace
3
+ * federation. Kept out of both `cli.ts` (so routing there stays a one-liner
4
+ * per command) and `workspace.ts` (so the core stays free of process/exit and
5
+ * engine dependencies). The federated command bodies live in `workspace.ts`;
6
+ * this file only renders them and wires the child builds through the engine.
7
+ */
8
+ import { Graft } from "../engine.js";
9
+ import { contextDirFor, ensureGitignored } from "../context/node-file.js";
10
+ import { formatAsk } from "../ask/ask.js";
11
+ import { federateAsk, federateCallers, federateCheck, federateGrep, federateMap, formatGrepResult, migrationNote, splitWorkspace, zeroHitNote, } from "./workspace.js";
12
+ /** Build every git child into its own committable `graft/`, then replace the
13
+ * parent's `graft/` with `workspace.json`. Prints the one-time split warning
14
+ * first when migrating away from a mega-graph. */
15
+ export async function runWorkspaceBuild(root, opts) {
16
+ const buildChild = async (childDir, childName) => {
17
+ const engine = new Graft({ ...opts.childConfig, contextDir: undefined });
18
+ if (opts.deep)
19
+ await engine.init(childDir, { extensions: opts.extensions });
20
+ const g = await engine.graph(childDir, { llm: opts.deep, concurrency: opts.concurrency });
21
+ console.log(`✓ ${childName}/: ${g.nodes} nodes, ${g.edges} edges, ${g.cards} cards [${g.languages.join(", ")}]`);
22
+ for (const e of g.errors)
23
+ console.error(`✗ ${childName}/: ${e}`);
24
+ };
25
+ const { children } = await splitWorkspace(root, opts.override, buildChild, ({ children, migrated }) => {
26
+ if (migrated)
27
+ console.error(migrationNote(children));
28
+ console.error(`building ${children.length} workspace repos: ${children.join(", ")}`);
29
+ });
30
+ // Each child self-ignored during its own build; the parent's federation
31
+ // index (graft/workspace.json) is written outside buildGraph, so ignore it here too.
32
+ ensureGitignored(root, contextDirFor(root, opts.override));
33
+ console.log(`✓ workspace: ${children.length} repos federated → graft/workspace.json`);
34
+ console.log(` graft/ is git-ignored — each teammate runs \`graft build\` to regenerate it locally.`);
35
+ }
36
+ export function runWorkspaceAsk(root, override, query, opts) {
37
+ const r = federateAsk(root, override, query, { limit: opts.limit, source: opts.source, full: opts.full, in: opts.in });
38
+ if (opts.json)
39
+ console.log(JSON.stringify(r, null, 2));
40
+ else
41
+ process.stdout.write(formatAsk(r));
42
+ }
43
+ export function runWorkspaceGrep(root, override, pattern, opts) {
44
+ const { result, coverage } = federateGrep(root, override, pattern, { ignoreCase: opts.ignoreCase, fixed: opts.fixed });
45
+ if (opts.json) {
46
+ console.log(JSON.stringify(result, null, 2));
47
+ return;
48
+ }
49
+ if (result.totalHits === 0) {
50
+ console.error(coverage ? `${zeroHitNote(result)}\n${coverage}` : zeroHitNote(result));
51
+ return;
52
+ }
53
+ process.stdout.write(formatGrepResult(result));
54
+ if (coverage)
55
+ console.log(coverage);
56
+ }
57
+ export function runWorkspaceMap(root, override, opts) {
58
+ process.stdout.write(federateMap(root, override, { maxDirs: opts.maxDirs }));
59
+ }
60
+ export function runWorkspaceCheck(root, override) {
61
+ const { text, ok } = federateCheck(root, override);
62
+ process.stdout.write(text);
63
+ if (!ok)
64
+ process.exit(1);
65
+ }
66
+ export function runWorkspaceCallers(root, override, symbol, opts) {
67
+ const { text, found } = federateCallers(root, override, symbol, opts);
68
+ if (!found) {
69
+ console.error(`✗ ${text}`);
70
+ process.exit(1);
71
+ }
72
+ process.stdout.write(text + "\n");
73
+ }
74
+ //# sourceMappingURL=workspace-cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-cli.js","sourceRoot":"","sources":["../../src/graph/workspace-cli.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE1E,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,OAAO,EACL,WAAW,EACX,eAAe,EACf,aAAa,EACb,YAAY,EACZ,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,WAAW,GACZ,MAAM,gBAAgB,CAAC;AAYxB;;kDAEkD;AAClD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,IAAY,EAAE,IAA2B;IAC/E,MAAM,UAAU,GAAG,KAAK,EAAE,QAAgB,EAAE,SAAiB,EAAiB,EAAE;QAC9E,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;QACzE,IAAI,IAAI,CAAC,IAAI;YAAE,MAAM,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QAC5E,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QAC1F,OAAO,CAAC,GAAG,CAAC,KAAK,SAAS,MAAM,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjH,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM;YAAE,OAAO,CAAC,KAAK,CAAC,KAAK,SAAS,MAAM,CAAC,EAAE,CAAC,CAAC;IACnE,CAAC,CAAC;IAEF,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,cAAc,CACvC,IAAI,EACJ,IAAI,CAAC,QAAQ,EACb,UAAU,EACV,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE;QACzB,IAAI,QAAQ;YAAE,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;QACrD,OAAO,CAAC,KAAK,CAAC,YAAY,QAAQ,CAAC,MAAM,qBAAqB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACvF,CAAC,CACF,CAAC;IACF,wEAAwE;IACxE,qFAAqF;IACrF,gBAAgB,CAAC,IAAI,EAAE,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC3D,OAAO,CAAC,GAAG,CAAC,gBAAgB,QAAQ,CAAC,MAAM,yCAAyC,CAAC,CAAC;IACtF,OAAO,CAAC,GAAG,CAAC,wFAAwF,CAAC,CAAC;AACxG,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,IAAY,EACZ,QAA4B,EAC5B,KAAa,EACb,IAAuF;IAEvF,MAAM,CAAC,GAAG,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IACvH,IAAI,IAAI,CAAC,IAAI;QAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;;QAClD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,IAAY,EACZ,QAA4B,EAC5B,OAAe,EACf,IAA+D;IAE/D,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IACvH,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7C,OAAO;IACT,CAAC;IACD,IAAI,MAAM,CAAC,SAAS,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,KAAK,QAAQ,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;QACtF,OAAO;IACT,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/C,IAAI,QAAQ;QAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,IAAY,EACZ,QAA4B,EAC5B,IAA0B;IAE1B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;AAC/E,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAY,EAAE,QAAiB;IAC/D,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACnD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3B,IAAI,CAAC,EAAE;QAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,IAAY,EACZ,QAA4B,EAC5B,MAAc,EACd,IAA4D;IAE5D,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IACtE,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QAC3B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;AACpC,CAAC"}