@nanonets/graft 0.5.0 → 0.6.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 (105) hide show
  1. package/README.md +11 -9
  2. package/dist/ai/crux.d.ts +20 -4
  3. package/dist/ai/crux.d.ts.map +1 -1
  4. package/dist/ai/crux.js +39 -41
  5. package/dist/ai/crux.js.map +1 -1
  6. package/dist/ai/llm/anthropic.d.ts +37 -0
  7. package/dist/ai/llm/anthropic.d.ts.map +1 -0
  8. package/dist/ai/llm/anthropic.js +141 -0
  9. package/dist/ai/llm/anthropic.js.map +1 -0
  10. package/dist/ai/llm/factory.d.ts +19 -0
  11. package/dist/ai/llm/factory.d.ts.map +1 -0
  12. package/dist/ai/llm/factory.js +20 -0
  13. package/dist/ai/llm/factory.js.map +1 -0
  14. package/dist/ai/llm/openai.d.ts +33 -0
  15. package/dist/ai/llm/openai.d.ts.map +1 -0
  16. package/dist/ai/llm/openai.js +146 -0
  17. package/dist/ai/llm/openai.js.map +1 -0
  18. package/dist/ai/llm/types.d.ts +113 -0
  19. package/dist/ai/llm/types.d.ts.map +1 -0
  20. package/dist/ai/llm/types.js +22 -0
  21. package/dist/ai/llm/types.js.map +1 -0
  22. package/dist/ai/providers.d.ts +37 -15
  23. package/dist/ai/providers.d.ts.map +1 -1
  24. package/dist/ai/providers.js +30 -5
  25. package/dist/ai/providers.js.map +1 -1
  26. package/dist/ai/summarize.d.ts +4 -4
  27. package/dist/ai/summarize.d.ts.map +1 -1
  28. package/dist/ai/summarize.js +6 -13
  29. package/dist/ai/summarize.js.map +1 -1
  30. package/dist/ai/synthesize.d.ts +12 -4
  31. package/dist/ai/synthesize.d.ts.map +1 -1
  32. package/dist/ai/synthesize.js +18 -34
  33. package/dist/ai/synthesize.js.map +1 -1
  34. package/dist/ask/ask.d.ts +3 -0
  35. package/dist/ask/ask.d.ts.map +1 -1
  36. package/dist/ask/ask.js +20 -18
  37. package/dist/ask/ask.js.map +1 -1
  38. package/dist/ask/fuse.d.ts +96 -0
  39. package/dist/ask/fuse.d.ts.map +1 -0
  40. package/dist/ask/fuse.js +184 -0
  41. package/dist/ask/fuse.js.map +1 -0
  42. package/dist/claude/format.d.ts.map +1 -1
  43. package/dist/claude/format.js +10 -2
  44. package/dist/claude/format.js.map +1 -1
  45. package/dist/claude/init.d.ts +3 -0
  46. package/dist/claude/init.d.ts.map +1 -1
  47. package/dist/claude/init.js +6 -1
  48. package/dist/claude/init.js.map +1 -1
  49. package/dist/claude/skill-template.d.ts.map +1 -1
  50. package/dist/claude/skill-template.js +34 -22
  51. package/dist/claude/skill-template.js.map +1 -1
  52. package/dist/cli.d.ts +3 -2
  53. package/dist/cli.d.ts.map +1 -1
  54. package/dist/cli.js +50 -37
  55. package/dist/cli.js.map +1 -1
  56. package/dist/context/savings.d.ts +34 -0
  57. package/dist/context/savings.d.ts.map +1 -0
  58. package/dist/context/savings.js +49 -0
  59. package/dist/context/savings.js.map +1 -0
  60. package/dist/engine.d.ts +4 -3
  61. package/dist/engine.d.ts.map +1 -1
  62. package/dist/engine.js +30 -19
  63. package/dist/engine.js.map +1 -1
  64. package/dist/graph/map.d.ts +4 -0
  65. package/dist/graph/map.d.ts.map +1 -1
  66. package/dist/graph/map.js +4 -1
  67. package/dist/graph/map.js.map +1 -1
  68. package/dist/graph/scopes.d.ts +30 -0
  69. package/dist/graph/scopes.d.ts.map +1 -0
  70. package/dist/graph/scopes.js +369 -0
  71. package/dist/graph/scopes.js.map +1 -0
  72. package/dist/graph/traverse-cli.d.ts +28 -18
  73. package/dist/graph/traverse-cli.d.ts.map +1 -1
  74. package/dist/graph/traverse-cli.js +68 -43
  75. package/dist/graph/traverse-cli.js.map +1 -1
  76. package/dist/graph/traverse.d.ts +35 -14
  77. package/dist/graph/traverse.d.ts.map +1 -1
  78. package/dist/graph/traverse.js +46 -20
  79. package/dist/graph/traverse.js.map +1 -1
  80. package/dist/graph/workspace.d.ts +136 -0
  81. package/dist/graph/workspace.d.ts.map +1 -0
  82. package/dist/graph/workspace.js +339 -0
  83. package/dist/graph/workspace.js.map +1 -0
  84. package/dist/hosts/instructions.d.ts.map +1 -1
  85. package/dist/hosts/instructions.js +4 -3
  86. package/dist/hosts/instructions.js.map +1 -1
  87. package/dist/hosts/mcp-config.d.ts +5 -0
  88. package/dist/hosts/mcp-config.d.ts.map +1 -1
  89. package/dist/hosts/mcp-config.js +2 -2
  90. package/dist/hosts/mcp-config.js.map +1 -1
  91. package/dist/index.d.ts +9 -3
  92. package/dist/index.d.ts.map +1 -1
  93. package/dist/index.js +8 -4
  94. package/dist/index.js.map +1 -1
  95. package/dist/mcp/tools.d.ts.map +1 -1
  96. package/dist/mcp/tools.js +33 -65
  97. package/dist/mcp/tools.js.map +1 -1
  98. package/dist/search/grep-cli.d.ts.map +1 -1
  99. package/dist/search/grep-cli.js +4 -0
  100. package/dist/search/grep-cli.js.map +1 -1
  101. package/dist/search/grep.d.ts +4 -0
  102. package/dist/search/grep.d.ts.map +1 -1
  103. package/dist/search/grep.js +2 -0
  104. package/dist/search/grep.js.map +1 -1
  105. package/package.json +2 -1
@@ -0,0 +1,339 @@
1
+ /**
2
+ * Workspace federation — a parent directory with >=2 immediate git children
3
+ * and no own `.git` is a WORKSPACE, not a repo. Building there builds each
4
+ * child's graph INTO THE CHILD (`<child>/graft/`, committable in that repo,
5
+ * byte-identical to a standalone build — the parent never influences a child
6
+ * build) and leaves the parent holding ONLY `graft/workspace.json`: a manifest
7
+ * of child dir names, no nodes or edges.
8
+ *
9
+ * Queries at the parent federate across the children's graphs:
10
+ * - `ask` merges the child graphs into one virtual corpus whose ranking
11
+ * scopes are `<child>/<scope>` (child root scope → `<child>`), so the
12
+ * existing per-scope RRF pipeline (`rankScopesAndFuse`) does the fair
13
+ * cross-repo fusion — a big repo can't drown a small one, and every hit
14
+ * is labeled with the repo it came from.
15
+ * - `grep` / `callers` / `callees` / `impact` run over the same merged
16
+ * graph: node ids and paths are prefixed `<child>/`, edges never cross
17
+ * children, so in-degree/coupling stays each child's own.
18
+ * - `map` and `check` run per child (see {@link buildWorkspaceMap} /
19
+ * {@link checkWorkspace}).
20
+ *
21
+ * Migration: a parent that HAS an old combined ("mega") graph gets it replaced
22
+ * by the workspace manifest on the next `graft build` there — loudly, via
23
+ * {@link migrationNote} — and never any other way: a stale mega-graph parent
24
+ * keeps answering `check`/queries as before until the user rebuilds.
25
+ *
26
+ * Unbuilt children are surfaced, never silently skipped: every loader here
27
+ * carries a "N of M workspace repos have graphs; run graft build to cover X"
28
+ * note that each command attaches to its output.
29
+ */
30
+ import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
31
+ import { join, resolve } from "node:path";
32
+ import { contextDirFor, CACHE_DIR } from "../context/node-file.js";
33
+ import { counts, tokenize } from "../ask/index-file.js";
34
+ import { buildGraph } from "./build.js";
35
+ import { checkGraph } from "./check.js";
36
+ import { loadGraphCached, loadAskIndexCached } from "./load.js";
37
+ import { buildRepoMap, formatRepoMap } from "./map.js";
38
+ import { discoverWorkspaceChildren, scopesOfGraph } from "./scopes.js";
39
+ import { GRAPH_DIR, wiringPath } from "./write.js";
40
+ export const WORKSPACE_FILE = "workspace.json";
41
+ /** `<contextDir>/workspace.json` — sibling of where `.graph/` would live. */
42
+ export function workspacePath(outDir) {
43
+ return join(outDir, WORKSPACE_FILE);
44
+ }
45
+ /** Read the workspace manifest for the repo/parent at `root` (respecting the
46
+ * `--dir` override like every other reader). Null when absent or malformed —
47
+ * a non-workspace root costs one `existsSync`. */
48
+ export function readWorkspace(root, contextDirOverride) {
49
+ const path = workspacePath(contextDirFor(resolve(root), contextDirOverride));
50
+ if (!existsSync(path))
51
+ return null;
52
+ try {
53
+ const raw = JSON.parse(readFileSync(path, "utf8"));
54
+ if (!raw ||
55
+ typeof raw !== "object" ||
56
+ raw.version !== 1 ||
57
+ !Array.isArray(raw.children) ||
58
+ !raw.children.every((c) => typeof c === "string" && c.length > 0)) {
59
+ return null;
60
+ }
61
+ return { version: 1, children: raw.children };
62
+ }
63
+ catch {
64
+ return null;
65
+ }
66
+ }
67
+ /** Write the manifest (children sorted; deterministic bytes, like writeGraph). */
68
+ export function writeWorkspace(outDir, ws) {
69
+ const path = workspacePath(outDir);
70
+ mkdirSync(outDir, { recursive: true });
71
+ const sorted = { version: 1, children: [...ws.children].sort() };
72
+ writeFileSync(path, JSON.stringify(sorted, null, 2) + "\n");
73
+ return path;
74
+ }
75
+ /** Build-time workspace detection: `root` has NO `.git` of its own and >=2
76
+ * immediate git children (a `.git` FILE — worktree/submodule — counts).
77
+ * Returns the sorted child names, or null when `root` is a normal repo/dir. */
78
+ export function isWorkspaceRoot(root) {
79
+ const absRoot = resolve(root);
80
+ if (existsSync(join(absRoot, ".git")))
81
+ return null;
82
+ const children = discoverWorkspaceChildren(absRoot).sort();
83
+ return children.length >= 2 ? children : null;
84
+ }
85
+ /** Load every child's graph via `loadGraphCached` (the only graph loader).
86
+ * Null when `root` is not a workspace (no manifest). */
87
+ export function loadWorkspaceGraphs(root, contextDirOverride) {
88
+ const ws = readWorkspace(root, contextDirOverride);
89
+ if (!ws)
90
+ return null;
91
+ const absRoot = resolve(root);
92
+ const built = [];
93
+ const unbuilt = [];
94
+ for (const child of ws.children) {
95
+ // children always use their own default graft/ — that's what makes each
96
+ // child's graph committable in (and byte-identical to) the child repo.
97
+ const contextDir = contextDirFor(join(absRoot, child));
98
+ const graph = loadGraphCached(contextDir);
99
+ if (graph)
100
+ built.push({ child, contextDir, graph, askIndex: loadAskIndexCached(contextDir) });
101
+ else
102
+ unbuilt.push(child);
103
+ }
104
+ const note = unbuilt.length
105
+ ? `${built.length} of ${ws.children.length} workspace repos have graphs; run graft build to cover ${unbuilt.join(", ")}`
106
+ : undefined;
107
+ return { children: ws.children, built, unbuilt, note };
108
+ }
109
+ // ── Merging: one virtual graph, everything prefixed `<child>/` ───────────────
110
+ /** Prefix a child's nodes/edges with `<child>/` so ids and paths are unique
111
+ * and workspace-relative (pointers open from the parent cwd). Edge endpoints
112
+ * that aren't node ids (unresolved import module strings) stay untouched. */
113
+ function prefixChild(child, g) {
114
+ const ids = new Set(g.nodes.map((n) => n.id));
115
+ const pre = (id) => (ids.has(id) ? `${child}/${id}` : id);
116
+ return {
117
+ nodes: g.nodes.map((n) => ({ ...n, id: `${child}/${n.id}`, path: `${child}/${n.path}` })),
118
+ edges: g.edges.map((e) => ({ ...e, source: pre(e.source), target: pre(e.target) })),
119
+ };
120
+ }
121
+ /** Merge the built children into one virtual graph whose scopes are each
122
+ * child's scopes prefixed `<child>/` (child root scope → `<child>`). With >=2
123
+ * built children this is always multi-scope, so `ask` takes its per-scope
124
+ * RRF path and labels every hit with its repo. Null when nothing is built. */
125
+ export function mergeWorkspaceGraphs(built) {
126
+ if (built.length === 0)
127
+ return null;
128
+ const nodes = [];
129
+ const edges = [];
130
+ const langs = new Set();
131
+ const scopes = [];
132
+ for (const { child, graph } of built) {
133
+ const p = prefixChild(child, graph);
134
+ nodes.push(...p.nodes);
135
+ edges.push(...p.edges);
136
+ for (const l of graph.meta.languages)
137
+ langs.add(l);
138
+ for (const s of scopesOfGraph(graph)) {
139
+ const prefix = s.prefix ? `${child}/${s.prefix}` : child;
140
+ scopes.push({ prefix, label: prefix, markers: s.markers });
141
+ }
142
+ }
143
+ // rule-7 ordering (prefix-length desc, then lexicographic) — scopeOf depends on it.
144
+ scopes.sort((a, b) => b.prefix.length - a.prefix.length || a.prefix.localeCompare(b.prefix));
145
+ return {
146
+ meta: {
147
+ version: 1,
148
+ nodeCount: nodes.length,
149
+ edgeCount: edges.length,
150
+ languages: [...langs].sort(),
151
+ scopes,
152
+ },
153
+ nodes,
154
+ edges,
155
+ };
156
+ }
157
+ function addBag(into, pairs) {
158
+ for (const [t, c] of pairs)
159
+ into.set(t, (into.get(t) ?? 0) + c);
160
+ }
161
+ /** Merge the children's build-time ask sidecars to match the merged graph:
162
+ * doc ids prefixed, and each doc's path bag gains the child dir's tokens —
163
+ * exactly what live tokenization of the prefixed path would produce, so the
164
+ * sidecar stays a provably exact cache. `df`/`docCount`/`avgBodyLen` are
165
+ * recomputed over the merged docs. Null (→ live-tokenization fallback, same
166
+ * degradation as any stale sidecar) unless EVERY built child has a sidecar
167
+ * that exactly covers its graph. */
168
+ export function mergeWorkspaceAskIndexes(built) {
169
+ if (built.length === 0)
170
+ return null;
171
+ for (const { graph, askIndex } of built) {
172
+ if (!askIndex || askIndex.docs.length !== graph.nodes.length)
173
+ return null;
174
+ const byId = new Set(askIndex.docs.map((d) => d.id));
175
+ if (!graph.nodes.every((n) => byId.has(n.id)))
176
+ return null;
177
+ }
178
+ const docs = [];
179
+ const df = new Map();
180
+ let bodyLenSum = 0;
181
+ for (const { child, askIndex } of built) {
182
+ const childTokens = [...counts(tokenize(child)).entries()];
183
+ for (const d of askIndex.docs) {
184
+ const path = new Map();
185
+ addBag(path, childTokens);
186
+ addBag(path, d.path);
187
+ const doc = { id: `${child}/${d.id}`, name: d.name, path: [...path.entries()], body: d.body };
188
+ docs.push(doc);
189
+ const bag = new Set([...doc.name, ...doc.path, ...doc.body].map(([t]) => t));
190
+ for (const t of bag)
191
+ df.set(t, (df.get(t) ?? 0) + 1);
192
+ for (const [, c] of d.body)
193
+ bodyLenSum += c;
194
+ }
195
+ }
196
+ return {
197
+ version: 1,
198
+ avgBodyLen: docs.length ? bodyLenSum / docs.length : 0,
199
+ df: [...df.entries()],
200
+ docCount: docs.length,
201
+ docs,
202
+ };
203
+ }
204
+ /** One-call federation for graph-consuming commands (grep, callers/callees,
205
+ * impact, MCP): null when `root` is not a workspace; otherwise the merged
206
+ * graph (null when no child is built) plus the unbuilt-children note. */
207
+ export function loadFederatedGraph(root, contextDirOverride) {
208
+ const wg = loadWorkspaceGraphs(root, contextDirOverride);
209
+ if (!wg)
210
+ return null;
211
+ return { graph: mergeWorkspaceGraphs(wg.built), note: wg.note };
212
+ }
213
+ /** Federation inputs for `ask`: the merged graph + merged sidecar + each built
214
+ * child's context dir (for its concept nodes). `ask` feeds the merged graph to
215
+ * its existing multi-scope pipeline, so `rankScopesAndFuse` does the fair
216
+ * cross-repo fusion with `<child>/`-prefixed scope labels. */
217
+ export function federateAsk(root, contextDirOverride) {
218
+ const wg = loadWorkspaceGraphs(root, contextDirOverride);
219
+ if (!wg)
220
+ return null;
221
+ return {
222
+ graph: mergeWorkspaceGraphs(wg.built),
223
+ askIndex: mergeWorkspaceAskIndexes(wg.built),
224
+ built: wg.built.map(({ child, contextDir }) => ({ child, contextDir })),
225
+ note: wg.note,
226
+ };
227
+ }
228
+ // ── Build + migration ────────────────────────────────────────────────────────
229
+ /** EXACT migration wording (asserted by tests) for a parent whose old combined
230
+ * graph is being replaced by the workspace manifest. */
231
+ export function migrationNote(children) {
232
+ return (`⚠ this folder contains ${children.length} separate git repos — splitting: each repo now gets ` +
233
+ `its own committable graft/ (${children.map((c) => `${c}/graft/`).join(", ")}); the combined ` +
234
+ `graph here is replaced by a workspace index. Queries from here now search all repos, fairly.`);
235
+ }
236
+ /**
237
+ * `graft build` at a workspace parent: build each child's graph into the child
238
+ * (plain `buildGraph(childDir)` — nothing parent-side touches it, which is what
239
+ * makes the result byte-identical to a standalone build), then write the
240
+ * parent manifest. A pre-existing mega-graph (`graft/.graph/wiring.json` at
241
+ * the parent) is replaced: its `.graph/` and `.cache/` are deleted AFTER the
242
+ * children built successfully, so a failed child build never destroys the old
243
+ * (still-working) graph.
244
+ */
245
+ export async function buildWorkspace(root, opts = {}) {
246
+ const absRoot = resolve(root);
247
+ const children = discoverWorkspaceChildren(absRoot).sort();
248
+ const outDir = contextDirFor(absRoot, opts.contextDir);
249
+ const hadMegaGraph = existsSync(wiringPath(outDir));
250
+ const results = [];
251
+ for (const child of children) {
252
+ results.push({ child, result: await buildGraph(join(absRoot, child)) });
253
+ }
254
+ if (hadMegaGraph) {
255
+ rmSync(join(outDir, GRAPH_DIR), { recursive: true, force: true });
256
+ rmSync(join(outDir, CACHE_DIR), { recursive: true, force: true });
257
+ }
258
+ const path = writeWorkspace(outDir, { version: 1, children });
259
+ return {
260
+ children: results,
261
+ workspacePath: path,
262
+ migrated: hadMegaGraph,
263
+ migrationNote: hadMegaGraph ? migrationNote(children) : undefined,
264
+ };
265
+ }
266
+ /** Human report for a workspace build — the migration note (when migrating)
267
+ * first, then one ✓ line per child, then where the manifest went. */
268
+ export function formatWorkspaceBuild(r) {
269
+ const lines = [];
270
+ if (r.migrationNote)
271
+ lines.push(r.migrationNote);
272
+ for (const { child, result } of r.children) {
273
+ lines.push(`✓ ${child}/: ${result.nodes} nodes, ${result.edges} edges, ${result.cards} cards [${result.languages.join(", ")}]`);
274
+ for (const e of result.errors)
275
+ lines.push(`✗ ${child}/: ${e}`);
276
+ }
277
+ lines.push(` → ${r.workspacePath}`);
278
+ lines.push(` queries here now federate across: ${r.children.map((c) => `${c.child}/`).join(", ")}`);
279
+ return lines.join("\n");
280
+ }
281
+ /** Per-child drift check ({@link checkGraph} in each child repo). */
282
+ export function checkWorkspace(root, contextDirOverride) {
283
+ const ws = readWorkspace(root, contextDirOverride);
284
+ const children = ws?.children ?? [];
285
+ const absRoot = resolve(root);
286
+ const rows = children.map((child) => {
287
+ const result = checkGraph(join(absRoot, child));
288
+ if (result.missing) {
289
+ return { child, missing: true, ok: false, summary: "no graph — run `graft build` to cover it", result };
290
+ }
291
+ if (result.ok)
292
+ return { child, missing: false, ok: true, summary: "OK — wiring graph in sync", result };
293
+ const parts = [];
294
+ if (result.changed.length)
295
+ parts.push(`${result.changed.length} changed`);
296
+ if (result.added.length)
297
+ parts.push(`${result.added.length} added`);
298
+ if (result.removed.length)
299
+ parts.push(`${result.removed.length} removed`);
300
+ if (result.stale.length)
301
+ parts.push(`${result.stale.length} stale summaries`);
302
+ return { child, missing: false, ok: false, summary: `STALE — ${parts.join(", ")} (run \`graft build\` in ${child}/)`, result };
303
+ });
304
+ return { children: rows, failed: rows.some((r) => !r.missing && !r.ok) };
305
+ }
306
+ export function formatWorkspaceCheck(c) {
307
+ const lines = [`workspace check — ${c.children.length} repos`, ""];
308
+ for (const row of c.children)
309
+ lines.push(`${row.child}/: ${row.summary}`);
310
+ lines.push("");
311
+ lines.push(c.failed
312
+ ? "workspace check: STALE — rebuild the repos above and commit their graft/."
313
+ : "workspace check: OK");
314
+ return lines.join("\n");
315
+ }
316
+ /** Per-child repo maps, the directory budget split evenly across the built
317
+ * children. Null when `root` is not a workspace. */
318
+ export function buildWorkspaceMap(root, opts = {}) {
319
+ const wg = loadWorkspaceGraphs(root, opts.contextDir);
320
+ if (!wg)
321
+ return null;
322
+ const per = Math.max(1, Math.floor((opts.maxDirs ?? 16) / Math.max(1, wg.built.length)));
323
+ return {
324
+ children: wg.built.map(({ child, graph }) => ({ child, map: buildRepoMap(graph, { maxDirs: per }) })),
325
+ note: wg.note,
326
+ };
327
+ }
328
+ /** One section per child (its own `formatRepoMap` report under a `<child>/`
329
+ * heading), plus the unbuilt-children note when present. */
330
+ export function formatWorkspaceMap(m) {
331
+ const lines = [`workspace map — ${m.children.length} repo${m.children.length === 1 ? "" : "s"}`];
332
+ for (const { child, map } of m.children) {
333
+ lines.push("", `── ${child}/ ──`, formatRepoMap(map).trimEnd());
334
+ }
335
+ if (m.note)
336
+ lines.push("", m.note);
337
+ return lines.join("\n") + "\n";
338
+ }
339
+ //# sourceMappingURL=workspace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../src/graph/workspace.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACrF,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAmC,MAAM,sBAAsB,CAAC;AACzF,OAAO,EAAE,UAAU,EAAyB,MAAM,YAAY,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAyB,MAAM,YAAY,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAgB,MAAM,UAAU,CAAC;AACrE,OAAO,EAAE,yBAAyB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAUnD,MAAM,CAAC,MAAM,cAAc,GAAG,gBAAgB,CAAC;AAE/C,6EAA6E;AAC7E,MAAM,UAAU,aAAa,CAAC,MAAc;IAC1C,OAAO,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;AACtC,CAAC;AAED;;kDAEkD;AAClD,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,kBAA2B;IACrE,MAAM,IAAI,GAAG,aAAa,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAC7E,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;QACnD,IACE,CAAC,GAAG;YACJ,OAAO,GAAG,KAAK,QAAQ;YACvB,GAAG,CAAC,OAAO,KAAK,CAAC;YACjB,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;YAC5B,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAU,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,EAC1E,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAoB,EAAE,CAAC;IAC5D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,cAAc,CAAC,MAAc,EAAE,EAAe;IAC5D,MAAM,IAAI,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACnC,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvC,MAAM,MAAM,GAAgB,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;IAC9E,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAC5D,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;+EAE+E;AAC/E,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACnD,MAAM,QAAQ,GAAG,yBAAyB,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3D,OAAO,QAAQ,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;AAChD,CAAC;AAgBD;wDACwD;AACxD,MAAM,UAAU,mBAAmB,CAAC,IAAY,EAAE,kBAA2B;IAC3E,MAAM,EAAE,GAAG,aAAa,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC;IACnD,IAAI,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC;IACrB,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,MAAM,KAAK,GAA6B,EAAE,CAAC;IAC3C,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,KAAK,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC;QAChC,wEAAwE;QACxE,uEAAuE;QACvE,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;QACvD,MAAM,KAAK,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;QAC1C,IAAI,KAAK;YAAE,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,kBAAkB,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;;YACzF,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IACD,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM;QACzB,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,OAAO,EAAE,CAAC,QAAQ,CAAC,MAAM,0DAA0D,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QACxH,CAAC,CAAC,SAAS,CAAC;IACd,OAAO,EAAE,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACzD,CAAC;AAED,gFAAgF;AAEhF;;6EAE6E;AAC7E,SAAS,WAAW,CAAC,KAAa,EAAE,CAAU;IAC5C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9C,MAAM,GAAG,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAClE,OAAO;QACL,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,KAAK,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACzF,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;KACpF,CAAC;AACJ,CAAC;AAED;;;8EAG8E;AAC9E,MAAM,UAAU,oBAAoB,CAAC,KAA+B;IAClE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACpC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,MAAM,MAAM,GAAc,EAAE,CAAC;IAC7B,KAAK,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,KAAK,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACpC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;QACvB,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS;YAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACnD,KAAK,MAAM,CAAC,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;YACrC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;YACzD,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IACD,oFAAoF;IACpF,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAC7F,OAAO;QACL,IAAI,EAAE;YACJ,OAAO,EAAE,CAAC;YACV,SAAS,EAAE,KAAK,CAAC,MAAM;YACvB,SAAS,EAAE,KAAK,CAAC,MAAM;YACvB,SAAS,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,EAAE;YAC5B,MAAM;SACP;QACD,KAAK;QACL,KAAK;KACN,CAAC;AACJ,CAAC;AAED,SAAS,MAAM,CAAC,IAAyB,EAAE,KAAyB;IAClE,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK;QAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAClE,CAAC;AAED;;;;;;oCAMoC;AACpC,MAAM,UAAU,wBAAwB,CAAC,KAA+B;IACtE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACpC,KAAK,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,KAAK,EAAE,CAAC;QACxC,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,KAAK,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QAC1E,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACrD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;IAC7D,CAAC;IAED,MAAM,IAAI,GAAkB,EAAE,CAAC;IAC/B,MAAM,EAAE,GAAG,IAAI,GAAG,EAAkB,CAAC;IACrC,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,KAAK,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,KAAK,EAAE,CAAC;QACxC,MAAM,WAAW,GAAuB,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/E,KAAK,MAAM,CAAC,IAAI,QAAS,CAAC,IAAI,EAAE,CAAC;YAC/B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAkB,CAAC;YACvC,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;YAC1B,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YACrB,MAAM,GAAG,GAAgB,EAAE,EAAE,EAAE,GAAG,KAAK,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAC3G,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACf,MAAM,GAAG,GAAG,IAAI,GAAG,CAAS,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,GAAG,GAAG,CAAC,IAAI,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACrF,KAAK,MAAM,CAAC,IAAI,GAAG;gBAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACrD,KAAK,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI;gBAAE,UAAU,IAAI,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IACD,OAAO;QACL,OAAO,EAAE,CAAC;QACV,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACtD,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;QACrB,QAAQ,EAAE,IAAI,CAAC,MAAM;QACrB,IAAI;KACL,CAAC;AACJ,CAAC;AAED;;yEAEyE;AACzE,MAAM,UAAU,kBAAkB,CAChC,IAAY,EACZ,kBAA2B;IAE3B,MAAM,EAAE,GAAG,mBAAmB,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC;IACzD,IAAI,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC;IACrB,OAAO,EAAE,KAAK,EAAE,oBAAoB,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;AAClE,CAAC;AAED;;;8DAG8D;AAC9D,MAAM,UAAU,WAAW,CACzB,IAAY,EACZ,kBAA2B;IAE3B,MAAM,EAAE,GAAG,mBAAmB,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC;IACzD,IAAI,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC;IACrB,OAAO;QACL,KAAK,EAAE,oBAAoB,CAAC,EAAE,CAAC,KAAK,CAAC;QACrC,QAAQ,EAAE,wBAAwB,CAAC,EAAE,CAAC,KAAK,CAAC;QAC5C,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;QACvE,IAAI,EAAE,EAAE,CAAC,IAAI;KACd,CAAC;AACJ,CAAC;AAED,gFAAgF;AAEhF;wDACwD;AACxD,MAAM,UAAU,aAAa,CAAC,QAAkB;IAC9C,OAAO,CACL,0BAA0B,QAAQ,CAAC,MAAM,sDAAsD;QAC/F,+BAA+B,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB;QAC9F,8FAA8F,CAC/F,CAAC;AACJ,CAAC;AAWD;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,IAAY,EACZ,OAAgC,EAAE;IAElC,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,MAAM,QAAQ,GAAG,yBAAyB,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3D,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IACvD,MAAM,YAAY,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IAEpD,MAAM,OAAO,GAAqC,EAAE,CAAC;IACrD,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;QAC7B,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAClE,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACpE,CAAC;IACD,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC9D,OAAO;QACL,QAAQ,EAAE,OAAO;QACjB,aAAa,EAAE,IAAI;QACnB,QAAQ,EAAE,YAAY;QACtB,aAAa,EAAE,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;KAClE,CAAC;AACJ,CAAC;AAED;qEACqE;AACrE,MAAM,UAAU,oBAAoB,CAAC,CAAuB;IAC1D,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,CAAC,CAAC,aAAa;QAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;IACjD,KAAK,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC3C,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,MAAM,MAAM,CAAC,KAAK,WAAW,MAAM,CAAC,KAAK,WAAW,MAAM,CAAC,KAAK,WAAW,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChI,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM;YAAE,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,MAAM,CAAC,EAAE,CAAC,CAAC;IACjE,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC;IACrC,KAAK,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACrG,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAUD,qEAAqE;AACrE,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,kBAA2B;IACtE,MAAM,EAAE,GAAG,aAAa,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC;IACnD,MAAM,QAAQ,GAAG,EAAE,EAAE,QAAQ,IAAI,EAAE,CAAC;IACpC,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAClC,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;QAChD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,0CAA0C,EAAE,MAAM,EAAE,CAAC;QAC1G,CAAC;QACD,IAAI,MAAM,CAAC,EAAE;YAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,2BAA2B,EAAE,MAAM,EAAE,CAAC;QACxG,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM;YAAE,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,UAAU,CAAC,CAAC;QAC1E,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM;YAAE,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,CAAC;QACpE,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM;YAAE,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,UAAU,CAAC,CAAC;QAC1E,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM;YAAE,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,kBAAkB,CAAC,CAAC;QAC9E,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,4BAA4B,KAAK,IAAI,EAAE,MAAM,EAAE,CAAC;IACjI,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AAC3E,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,CAAiB;IACpD,MAAM,KAAK,GAAG,CAAC,qBAAqB,CAAC,CAAC,QAAQ,CAAC,MAAM,QAAQ,EAAE,EAAE,CAAC,CAAC;IACnE,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,QAAQ;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IAC1E,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CACR,CAAC,CAAC,MAAM;QACN,CAAC,CAAC,2EAA2E;QAC7E,CAAC,CAAC,qBAAqB,CAC1B,CAAC;IACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AASD;oDACoD;AACpD,MAAM,UAAU,iBAAiB,CAC/B,IAAY,EACZ,OAAkD,EAAE;IAEpD,MAAM,EAAE,GAAG,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IACtD,IAAI,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC;IACrB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACzF,OAAO;QACL,QAAQ,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,YAAY,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QACrG,IAAI,EAAE,EAAE,CAAC,IAAI;KACd,CAAC;AACJ,CAAC;AAED;4DAC4D;AAC5D,MAAM,UAAU,kBAAkB,CAAC,CAAe;IAChD,MAAM,KAAK,GAAG,CAAC,mBAAmB,CAAC,CAAC,QAAQ,CAAC,MAAM,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IACjG,KAAK,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;QACxC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IAClE,CAAC;IACD,IAAI,CAAC,CAAC,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IACnC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AACjC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"instructions.d.ts","sourceRoot":"","sources":["../../src/hosts/instructions.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,wBAAgB,eAAe,IAAI,MAAM,CAoCxC;AAED,wBAAgB,UAAU,IAAI,MAAM,CAOnC;AAED,wBAAgB,YAAY,IAAI,MAAM,CAMrC;AAED,wBAAgB,YAAY,IAAI,MAAM,CAGrC"}
1
+ {"version":3,"file":"instructions.d.ts","sourceRoot":"","sources":["../../src/hosts/instructions.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,wBAAgB,eAAe,IAAI,MAAM,CAqCxC;AAED,wBAAgB,UAAU,IAAI,MAAM,CAOnC;AAED,wBAAgB,YAAY,IAAI,MAAM,CAMrC;AAED,wBAAgB,YAAY,IAAI,MAAM,CAGrC"}
@@ -26,9 +26,10 @@ hotspots), no LLM, no key.
26
26
  to raw \`grep -rn\` only for unindexed files.
27
27
  - \`graft skeleton <file>\` → every definition's signature + span, ~10× cheaper
28
28
  than reading the file; use it to skim an API surface.
29
- - \`graft callers/callees <symbol>\` and \`graft impact <symbol> [-d N]\` give
30
- precomputed, exact edges — who calls/is called by a symbol, and the full
31
- blast radius — for structural questions, skip ranking and use these directly.
29
+ - \`graft callers <symbol>\` gives precomputed, exact edges — who calls this.
30
+ Add \`--direction out\` for what it calls, or \`--depth N\` to walk
31
+ transitively for the full blast radius. For structural questions, skip
32
+ ranking and use this directly.
32
33
  - Or browse: \`graft/INDEX.md\` lists every node; follow the links.
33
34
 
34
35
  If a returned span is truncated ("+N more lines"), open the file at that exact
@@ -1 +1 @@
1
- {"version":3,"file":"instructions.js","sourceRoot":"","sources":["../../src/hosts/instructions.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,UAAU,eAAe;IAC7B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAkCQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,OAAO;;;;EAIP,eAAe,EAAE;CAClB,CAAC;AACF,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO;;;EAGP,eAAe,EAAE;CAClB,CAAC;AACF,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO,GAAG,eAAe,EAAE;CAC5B,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"instructions.js","sourceRoot":"","sources":["../../src/hosts/instructions.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,UAAU,eAAe;IAC7B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAmCQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,OAAO;;;;EAIP,eAAe,EAAE;CAClB,CAAC;AACF,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO;;;EAGP,eAAe,EAAE;CAClB,CAAC;AACF,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO,GAAG,eAAe,EAAE;CAC5B,CAAC;AACF,CAAC"}
@@ -3,6 +3,11 @@ export interface McpWrite {
3
3
  path: string;
4
4
  action: 'created' | 'updated' | 'unchanged' | 'skipped-unparseable';
5
5
  }
6
+ export declare const SERVER_ENTRY: {
7
+ command: string;
8
+ args: string[];
9
+ };
10
+ export declare function mergeJsonKey(id: string, path: string, topKey: string, entry: object): McpWrite;
6
11
  export declare function registerMcpConfigs(repo: string, ids: string[], opts?: {
7
12
  home?: string;
8
13
  }): McpWrite[];
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-config.d.ts","sourceRoot":"","sources":["../../src/hosts/mcp-config.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,qBAAqB,CAAC;CACrE;AA0CD,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EAAE,EACb,IAAI,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GAC3B,QAAQ,EAAE,CA2BZ"}
1
+ {"version":3,"file":"mcp-config.d.ts","sourceRoot":"","sources":["../../src/hosts/mcp-config.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,qBAAqB,CAAC;CACrE;AAED,eAAO,MAAM,YAAY;;;CAA6D,CAAC;AAOvF,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,QAAQ,CAoB9F;AAaD,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EAAE,EACb,IAAI,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GAC3B,QAAQ,EAAE,CA2BZ"}
@@ -6,7 +6,7 @@
6
6
  import { readFileSync, writeFileSync, mkdirSync, existsSync, statSync } from 'node:fs';
7
7
  import { dirname, join } from 'node:path';
8
8
  import { homedir } from 'node:os';
9
- const SERVER_ENTRY = { command: 'npx', args: ['-y', '@nanonets/graft', 'mcp'] };
9
+ export const SERVER_ENTRY = { command: 'npx', args: ['-y', '@nanonets/graft', 'mcp'] };
10
10
  const OPENCODE_ENTRY = { type: 'local', command: ['npx', '-y', '@nanonets/graft', 'mcp'], enabled: true };
11
11
  function dirExists(p) {
12
12
  try {
@@ -16,7 +16,7 @@ function dirExists(p) {
16
16
  return false;
17
17
  }
18
18
  }
19
- function mergeJsonKey(id, path, topKey, entry) {
19
+ export function mergeJsonKey(id, path, topKey, entry) {
20
20
  let root = {};
21
21
  const existed = existsSync(path);
22
22
  if (existed) {
@@ -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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"}
package/dist/index.d.ts CHANGED
@@ -25,9 +25,15 @@ export { checkGraph, formatGraphCheckReport } from "./graph/check.js";
25
25
  export type { GraphCheckResult, GraphCheckOptions } from "./graph/check.js";
26
26
  export type { ContextNode, NodeLink, SourceRef, Manifest } from "./context/node-file.js";
27
27
  export type { EngineConfig, ResolvedConfig } from "./ai/providers.js";
28
- export { resolveConfig, DEFAULTS } from "./ai/providers.js";
29
- export { OpenRouterSynthesizer } from "./ai/synthesize.js";
28
+ export { resolveConfig, DEFAULTS, DEFAULT_MODELS } from "./ai/providers.js";
29
+ export type { ChatModel, ChatRequest, ChatResponse, Message, ToolSpec, ToolCall, Usage } from "./ai/llm/types.js";
30
+ export { createChatModel, type ProviderKind, type ChatModelConfig } from "./ai/llm/factory.js";
31
+ export { OpenAIChatModel } from "./ai/llm/openai.js";
32
+ export { AnthropicChatModel } from "./ai/llm/anthropic.js";
33
+ export { ChatSynthesizer } from "./ai/synthesize.js";
30
34
  export type { Synthesizer, SynthNode, SynthLink, FileSummary } from "./ai/synthesize.js";
31
- export { OpenRouterSummarizer } from "./ai/summarize.js";
35
+ export { ChatSummarizer } from "./ai/summarize.js";
32
36
  export type { Summarizer } from "./ai/summarize.js";
37
+ export { ChatCruxSummarizer } from "./ai/crux.js";
38
+ export type { CruxSummarizer, FileCruxInput, NodeCrux, NodeRef } from "./ai/crux.js";
33
39
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACrD,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEzG,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACrE,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AACtE,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC5E,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAEzF,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAG5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACzF,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACrD,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEzG,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACrE,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AACtE,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC5E,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAEzF,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAG5E,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAClH,OAAO,EAAE,eAAe,EAAE,KAAK,YAAY,EAAE,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC/F,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAG3D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACzF,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC"}
package/dist/index.js CHANGED
@@ -19,8 +19,12 @@ export { Graft, CODE_EXTENSIONS } from "./engine.js";
19
19
  export { buildContext } from "./context/build.js";
20
20
  export { checkContext, formatCheckReport } from "./context/check.js";
21
21
  export { checkGraph, formatGraphCheckReport } from "./graph/check.js";
22
- export { resolveConfig, DEFAULTS } from "./ai/providers.js";
23
- // Providers, for advanced/custom setups.
24
- export { OpenRouterSynthesizer } from "./ai/synthesize.js";
25
- export { OpenRouterSummarizer } from "./ai/summarize.js";
22
+ export { resolveConfig, DEFAULTS, DEFAULT_MODELS } from "./ai/providers.js";
23
+ export { createChatModel } from "./ai/llm/factory.js";
24
+ export { OpenAIChatModel } from "./ai/llm/openai.js";
25
+ export { AnthropicChatModel } from "./ai/llm/anthropic.js";
26
+ // Engine ops, for advanced/custom setups.
27
+ export { ChatSynthesizer } from "./ai/synthesize.js";
28
+ export { ChatSummarizer } from "./ai/summarize.js";
29
+ export { ChatCruxSummarizer } from "./ai/crux.js";
26
30
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAGrD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAErE,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAKtE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE5D,yCAAyC;AACzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAGrD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAErE,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAKtE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAI5E,OAAO,EAAE,eAAe,EAA2C,MAAM,qBAAqB,CAAC;AAC/F,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,0CAA0C;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"AAiBA,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAWD,eAAO,MAAM,KAAK,EAAE,OAAO,EAmG1B,CAAC;AAiBF,wBAAgB,QAAQ,CACtB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,WAAW,CAAC,EAAE,MAAM,GACnB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAwFpC"}
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"AAkBA,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAQD,eAAO,MAAM,KAAK,EAAE,OAAO,EAgF1B,CAAC;AAuBF,wBAAgB,QAAQ,CACtB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,WAAW,CAAC,EAAE,MAAM,GACnB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CA4EpC"}