@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.
- package/README.md +93 -52
- package/dist/ai/llm/types.d.ts +2 -2
- package/dist/ai/llm/types.js +1 -1
- package/dist/ask/ask.d.ts +49 -1
- package/dist/ask/ask.d.ts.map +1 -1
- package/dist/ask/ask.js +270 -68
- package/dist/ask/ask.js.map +1 -1
- package/dist/ask/fuse.d.ts +59 -17
- package/dist/ask/fuse.d.ts.map +1 -1
- package/dist/ask/fuse.js +51 -25
- package/dist/ask/fuse.js.map +1 -1
- package/dist/ask/graphrank.d.ts +6 -0
- package/dist/ask/graphrank.d.ts.map +1 -1
- package/dist/ask/graphrank.js +5 -1
- package/dist/ask/graphrank.js.map +1 -1
- package/dist/claude/format.d.ts +0 -1
- package/dist/claude/format.d.ts.map +1 -1
- package/dist/claude/format.js +18 -21
- package/dist/claude/format.js.map +1 -1
- package/dist/claude/hooks.d.ts +16 -0
- package/dist/claude/hooks.d.ts.map +1 -1
- package/dist/claude/hooks.js +79 -2
- package/dist/claude/hooks.js.map +1 -1
- package/dist/claude/settings-merge.d.ts.map +1 -1
- package/dist/claude/settings-merge.js +13 -6
- package/dist/claude/settings-merge.js.map +1 -1
- package/dist/claude/skill-template.d.ts.map +1 -1
- package/dist/claude/skill-template.js +117 -76
- package/dist/claude/skill-template.js.map +1 -1
- package/dist/cli-epilogue.js +1 -1
- package/dist/cli-epilogue.js.map +1 -1
- package/dist/cli.d.ts +3 -15
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +79 -45
- package/dist/cli.js.map +1 -1
- package/dist/context/node-file.d.ts +10 -0
- package/dist/context/node-file.d.ts.map +1 -1
- package/dist/context/node-file.js +34 -1
- package/dist/context/node-file.js.map +1 -1
- package/dist/context/savings.d.ts +6 -0
- package/dist/context/savings.d.ts.map +1 -1
- package/dist/context/savings.js +9 -1
- package/dist/context/savings.js.map +1 -1
- package/dist/engine.d.ts +1 -0
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +7 -1
- package/dist/engine.js.map +1 -1
- package/dist/graph/build.d.ts.map +1 -1
- package/dist/graph/build.js +37 -1
- package/dist/graph/build.js.map +1 -1
- package/dist/graph/map.d.ts +34 -2
- package/dist/graph/map.d.ts.map +1 -1
- package/dist/graph/map.js +107 -23
- package/dist/graph/map.js.map +1 -1
- package/dist/graph/types.d.ts +12 -0
- package/dist/graph/types.d.ts.map +1 -1
- package/dist/graph/workspace-cli.d.ts +37 -0
- package/dist/graph/workspace-cli.d.ts.map +1 -0
- package/dist/graph/workspace-cli.js +74 -0
- package/dist/graph/workspace-cli.js.map +1 -0
- package/dist/graph/workspace.d.ts +116 -124
- package/dist/graph/workspace.d.ts.map +1 -1
- package/dist/graph/workspace.js +353 -297
- package/dist/graph/workspace.js.map +1 -1
- package/dist/hosts/instructions.d.ts.map +1 -1
- package/dist/hosts/instructions.js +3 -0
- package/dist/hosts/instructions.js.map +1 -1
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +61 -1
- package/dist/mcp/tools.js.map +1 -1
- 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
|
-
*
|
|
50
|
-
* graph
|
|
51
|
-
*
|
|
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
|
-
|
|
54
|
-
const
|
|
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
|
-
|
|
60
|
-
//
|
|
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 = (
|
|
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
|
|
79
|
-
const
|
|
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
|
|
91
|
-
|
|
92
|
-
|
|
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
|
-
|
|
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
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
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";
|
package/dist/graph/map.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"map.js","sourceRoot":"","sources":["../../src/graph/map.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,UAAU,EAAgB,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"map.js","sourceRoot":"","sources":["../../src/graph/map.ts"],"names":[],"mappings":"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"}
|
package/dist/graph/types.d.ts
CHANGED
|
@@ -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;
|
|
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":"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"}
|