@roarpeng/graphflow 0.6.15 → 1.0.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.
- package/AGENTS.md +1 -1
- package/CHANGELOG.md +28 -1
- package/README.md +58 -11
- package/dist/agents/validator.d.ts.map +1 -1
- package/dist/agents/validator.js +19 -8
- package/dist/agents/validator.js.map +1 -1
- package/dist/agents/worker.d.ts.map +1 -1
- package/dist/agents/worker.js +3 -2
- package/dist/agents/worker.js.map +1 -1
- package/dist/config/schema.d.ts +31 -0
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/core/orchestrator.d.ts +7 -0
- package/dist/core/orchestrator.d.ts.map +1 -1
- package/dist/core/orchestrator.js +45 -3
- package/dist/core/orchestrator.js.map +1 -1
- package/dist/core/state-machine.d.ts +1 -0
- package/dist/core/state-machine.d.ts.map +1 -1
- package/dist/core/state-machine.js +20 -0
- package/dist/core/state-machine.js.map +1 -1
- package/dist/core/types.d.ts +7 -1
- package/dist/core/types.d.ts.map +1 -1
- package/dist/graph/adaptive-budget.d.ts +18 -0
- package/dist/graph/adaptive-budget.d.ts.map +1 -0
- package/dist/graph/adaptive-budget.js +50 -0
- package/dist/graph/adaptive-budget.js.map +1 -0
- package/dist/graph/compression-model.d.ts +52 -0
- package/dist/graph/compression-model.d.ts.map +1 -0
- package/dist/graph/compression-model.js +125 -0
- package/dist/graph/compression-model.js.map +1 -0
- package/dist/graph/context-slicer.d.ts +32 -0
- package/dist/graph/context-slicer.d.ts.map +1 -1
- package/dist/graph/context-slicer.js +157 -0
- package/dist/graph/context-slicer.js.map +1 -1
- package/dist/graph/graph-compression.d.ts +44 -0
- package/dist/graph/graph-compression.d.ts.map +1 -0
- package/dist/graph/graph-compression.js +153 -0
- package/dist/graph/graph-compression.js.map +1 -0
- package/dist/graph/repo-map.d.ts +25 -0
- package/dist/graph/repo-map.d.ts.map +1 -0
- package/dist/graph/repo-map.js +80 -0
- package/dist/graph/repo-map.js.map +1 -0
- package/dist/graph/semantic-compression.d.ts +65 -0
- package/dist/graph/semantic-compression.d.ts.map +1 -0
- package/dist/graph/semantic-compression.js +173 -0
- package/dist/graph/semantic-compression.js.map +1 -0
- package/dist/integrations/agent-mcp-installer.d.ts +11 -0
- package/dist/integrations/agent-mcp-installer.d.ts.map +1 -1
- package/dist/integrations/agent-mcp-installer.js +175 -9
- package/dist/integrations/agent-mcp-installer.js.map +1 -1
- package/dist/learning/hnsw-index.d.ts +46 -0
- package/dist/learning/hnsw-index.d.ts.map +1 -0
- package/dist/learning/hnsw-index.js +138 -0
- package/dist/learning/hnsw-index.js.map +1 -0
- package/dist/routing/model-router.d.ts +7 -0
- package/dist/routing/model-router.d.ts.map +1 -1
- package/dist/routing/model-router.js +36 -0
- package/dist/routing/model-router.js.map +1 -1
- package/dist/surfaces/cli/runtime/graph.d.ts.map +1 -1
- package/dist/surfaces/cli/runtime/graph.js +30 -1
- package/dist/surfaces/cli/runtime/graph.js.map +1 -1
- package/dist/surfaces/cli/runtime/panel.d.ts.map +1 -1
- package/dist/surfaces/cli/runtime/panel.js +2 -0
- package/dist/surfaces/cli/runtime/panel.js.map +1 -1
- package/dist/surfaces/cli/runtime/routing.d.ts.map +1 -1
- package/dist/surfaces/cli/runtime/routing.js +15 -0
- package/dist/surfaces/cli/runtime/routing.js.map +1 -1
- package/dist/surfaces/cli/runtime/types.d.ts +20 -0
- package/dist/surfaces/cli/runtime/types.d.ts.map +1 -1
- package/dist/surfaces/mcp/server.js +2 -2
- package/dist/surfaces/mcp/server.js.map +1 -1
- package/dist/utils/logger.js +1 -1
- package/dist/utils/logger.js.map +1 -1
- package/package.json +2 -1
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DEFAULT_EDGE_WEIGHTS = void 0;
|
|
4
|
+
exports.extractConnectedSubgraph = extractConnectedSubgraph;
|
|
5
|
+
exports.computePageRank = computePageRank;
|
|
6
|
+
exports.blendWithCentrality = blendWithCentrality;
|
|
7
|
+
/**
|
|
8
|
+
* Graph-structure-based context compression.
|
|
9
|
+
*
|
|
10
|
+
* Unlike token-level pruning (LLMLingua-style), this module compresses by
|
|
11
|
+
* exploiting the graph topology: edge-weighted connectivity + centrality
|
|
12
|
+
* ranking keeps the most "load-bearing" nodes and drops peripheral ones,
|
|
13
|
+
* with zero LLM cost.
|
|
14
|
+
*/
|
|
15
|
+
exports.DEFAULT_EDGE_WEIGHTS = {
|
|
16
|
+
references: 1.0,
|
|
17
|
+
imports: 0.85,
|
|
18
|
+
depends_on: 0.7,
|
|
19
|
+
prerequisite: 0.7,
|
|
20
|
+
defines: 0.6,
|
|
21
|
+
validates: 0.5,
|
|
22
|
+
changes: 0.4,
|
|
23
|
+
improves: 0.4,
|
|
24
|
+
co_occurs: 0.3,
|
|
25
|
+
conflicts_with: 0.2,
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Extracts a connected subgraph centered on the seed nodes, ranking members
|
|
29
|
+
* by edge-weighted proximity. Returns nodes sorted by relevance (seeds first).
|
|
30
|
+
*/
|
|
31
|
+
async function extractConnectedSubgraph(client, seeds, options) {
|
|
32
|
+
if (typeof client.getNeighbors !== "function" || seeds.length === 0) {
|
|
33
|
+
return seeds.map((node) => ({ node, score: 1 }));
|
|
34
|
+
}
|
|
35
|
+
const weights = { ...exports.DEFAULT_EDGE_WEIGHTS, ...options?.edgeWeights };
|
|
36
|
+
const maxNodes = options?.maxNodes ?? 30;
|
|
37
|
+
const hops = options?.hops ?? 2;
|
|
38
|
+
const minNodeWeight = options?.minNodeWeight ?? 0;
|
|
39
|
+
// Seeds start with full score; each hop decays.
|
|
40
|
+
const scores = new Map();
|
|
41
|
+
const nodeById = new Map();
|
|
42
|
+
for (const seed of seeds) {
|
|
43
|
+
scores.set(seed.id, 1);
|
|
44
|
+
nodeById.set(seed.id, seed);
|
|
45
|
+
}
|
|
46
|
+
let frontier = seeds.map((s) => s.id);
|
|
47
|
+
const relations = Object.keys(weights);
|
|
48
|
+
for (let depth = 0; depth < hops; depth += 1) {
|
|
49
|
+
if (frontier.length === 0 || nodeById.size >= maxNodes)
|
|
50
|
+
break;
|
|
51
|
+
const decay = 1 / (depth + 2); // hop 0 -> 0.5, hop 1 -> 0.33, ...
|
|
52
|
+
const neighbors = await client.getNeighbors(frontier, relations, "both");
|
|
53
|
+
const nextFrontier = [];
|
|
54
|
+
for (const { node, via } of neighbors) {
|
|
55
|
+
const edgeWeight = weights[via] ?? 0.1;
|
|
56
|
+
const contribution = edgeWeight * decay;
|
|
57
|
+
const prev = scores.get(node.id) ?? 0;
|
|
58
|
+
scores.set(node.id, prev + contribution);
|
|
59
|
+
if (!nodeById.has(node.id)) {
|
|
60
|
+
nodeById.set(node.id, node);
|
|
61
|
+
nextFrontier.push(node.id);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
frontier = nextFrontier;
|
|
65
|
+
}
|
|
66
|
+
const ranked = [];
|
|
67
|
+
for (const [id, score] of scores.entries()) {
|
|
68
|
+
const node = nodeById.get(id);
|
|
69
|
+
if (!node)
|
|
70
|
+
continue;
|
|
71
|
+
if (score < minNodeWeight)
|
|
72
|
+
continue;
|
|
73
|
+
ranked.push({ node, score });
|
|
74
|
+
}
|
|
75
|
+
ranked.sort((a, b) => b.score - a.score);
|
|
76
|
+
return ranked.slice(0, maxNodes);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Computes weighted PageRank over a node/edge set. Used to surface "central"
|
|
80
|
+
* nodes (frequently-referenced functions, core modules) that should be
|
|
81
|
+
* prioritized in the context budget.
|
|
82
|
+
*/
|
|
83
|
+
function computePageRank(nodes, edges, options) {
|
|
84
|
+
const damping = options?.damping ?? 0.85;
|
|
85
|
+
const iterations = options?.iterations ?? 20;
|
|
86
|
+
const weights = { ...exports.DEFAULT_EDGE_WEIGHTS, ...options?.edgeWeights };
|
|
87
|
+
const ids = nodes.map((n) => n.id);
|
|
88
|
+
const idSet = new Set(ids);
|
|
89
|
+
const n = ids.length;
|
|
90
|
+
if (n === 0)
|
|
91
|
+
return new Map();
|
|
92
|
+
// Build weighted outbound adjacency.
|
|
93
|
+
const outWeight = new Map();
|
|
94
|
+
const outEdges = new Map();
|
|
95
|
+
for (const edge of edges) {
|
|
96
|
+
if (!idSet.has(edge.from) || !idSet.has(edge.to))
|
|
97
|
+
continue;
|
|
98
|
+
const w = weights[edge.relation] ?? 0.1;
|
|
99
|
+
const list = outEdges.get(edge.from) ?? [];
|
|
100
|
+
list.push({ to: edge.to, w });
|
|
101
|
+
outEdges.set(edge.from, list);
|
|
102
|
+
outWeight.set(edge.from, (outWeight.get(edge.from) ?? 0) + w);
|
|
103
|
+
}
|
|
104
|
+
let rank = new Map(ids.map((id) => [id, 1 / n]));
|
|
105
|
+
const base = (1 - damping) / n;
|
|
106
|
+
for (let iter = 0; iter < iterations; iter += 1) {
|
|
107
|
+
const next = new Map(ids.map((id) => [id, base]));
|
|
108
|
+
let danglingSum = 0;
|
|
109
|
+
for (const id of ids) {
|
|
110
|
+
const out = outEdges.get(id);
|
|
111
|
+
const r = rank.get(id) ?? 0;
|
|
112
|
+
if (!out || out.length === 0) {
|
|
113
|
+
danglingSum += r;
|
|
114
|
+
continue;
|
|
115
|
+
}
|
|
116
|
+
const total = outWeight.get(id) ?? 1;
|
|
117
|
+
for (const { to, w } of out) {
|
|
118
|
+
next.set(to, (next.get(to) ?? 0) + damping * r * (w / total));
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
// Redistribute dangling-node mass uniformly.
|
|
122
|
+
if (danglingSum > 0) {
|
|
123
|
+
const share = (damping * danglingSum) / n;
|
|
124
|
+
for (const id of ids) {
|
|
125
|
+
next.set(id, (next.get(id) ?? 0) + share);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
rank = next;
|
|
129
|
+
}
|
|
130
|
+
return rank;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Re-ranks a candidate node list by blending retrieval order with PageRank
|
|
134
|
+
* centrality. alpha controls the centrality weight (0 = pure retrieval order).
|
|
135
|
+
*/
|
|
136
|
+
function blendWithCentrality(candidates, pageRank, alpha = 0.3) {
|
|
137
|
+
if (candidates.length === 0)
|
|
138
|
+
return candidates;
|
|
139
|
+
const maxPr = Math.max(1e-9, ...Array.from(pageRank.values()));
|
|
140
|
+
const scored = candidates.map((node, index) => {
|
|
141
|
+
const retrievalScore = 1 - index / candidates.length; // higher = earlier
|
|
142
|
+
const centrality = (pageRank.get(node.id) ?? 0) / maxPr;
|
|
143
|
+
const score = (1 - alpha) * retrievalScore + alpha * centrality;
|
|
144
|
+
return { node, score, index };
|
|
145
|
+
});
|
|
146
|
+
scored.sort((a, b) => {
|
|
147
|
+
if (b.score !== a.score)
|
|
148
|
+
return b.score - a.score;
|
|
149
|
+
return a.index - b.index;
|
|
150
|
+
});
|
|
151
|
+
return scored.map((s) => s.node);
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=graph-compression.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph-compression.js","sourceRoot":"","sources":["../../src/graph/graph-compression.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { GraphClient } from "./client-factory";
|
|
2
|
+
/**
|
|
3
|
+
* Repo-Map: module-level overview compression inspired by Aider's repo-map.
|
|
4
|
+
*
|
|
5
|
+
* Instead of sending full symbol definitions, we generate a high-level "map"
|
|
6
|
+
* where each module gets one line: `path/to/module: exports symbol1, symbol2, ...`
|
|
7
|
+
*
|
|
8
|
+
* This is extremely token-efficient (~100-300 tokens for entire repos) and
|
|
9
|
+
* lets LLMs understand the project structure before diving into specific code.
|
|
10
|
+
*/
|
|
11
|
+
export interface RepoMapEntry {
|
|
12
|
+
moduleId: string;
|
|
13
|
+
path: string;
|
|
14
|
+
exports: string[];
|
|
15
|
+
tokenEstimate: number;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Builds a repo map from Module nodes. Each entry summarizes one module's exports.
|
|
19
|
+
*/
|
|
20
|
+
export declare function buildRepoMap(client: GraphClient): Promise<RepoMapEntry[]>;
|
|
21
|
+
/**
|
|
22
|
+
* Formats the repo map into a single string for injection into LLM context.
|
|
23
|
+
*/
|
|
24
|
+
export declare function formatRepoMapString(entries: RepoMapEntry[]): string;
|
|
25
|
+
//# sourceMappingURL=repo-map.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repo-map.d.ts","sourceRoot":"","sources":["../../src/graph/repo-map.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD;;;;;;;;GAQG;AAEH,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAwB/E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,MAAM,CAUnE"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildRepoMap = buildRepoMap;
|
|
4
|
+
exports.formatRepoMapString = formatRepoMapString;
|
|
5
|
+
/**
|
|
6
|
+
* Builds a repo map from Module nodes. Each entry summarizes one module's exports.
|
|
7
|
+
*/
|
|
8
|
+
async function buildRepoMap(client) {
|
|
9
|
+
if (typeof client.readSnapshot !== "function") {
|
|
10
|
+
return [];
|
|
11
|
+
}
|
|
12
|
+
const snapshot = client.readSnapshot();
|
|
13
|
+
const modules = snapshot.nodes.filter((n) => n.type === "Module");
|
|
14
|
+
const entries = [];
|
|
15
|
+
for (const mod of modules) {
|
|
16
|
+
const path = extractModulePath(mod);
|
|
17
|
+
const exports = extractExportedSymbols(mod, snapshot.nodes);
|
|
18
|
+
const line = formatRepoMapLine(path, exports);
|
|
19
|
+
entries.push({
|
|
20
|
+
moduleId: mod.id,
|
|
21
|
+
path,
|
|
22
|
+
exports,
|
|
23
|
+
tokenEstimate: Math.ceil(line.length / 4),
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
// Sort by path for readability.
|
|
27
|
+
entries.sort((a, b) => a.path.localeCompare(b.path));
|
|
28
|
+
return entries;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Formats the repo map into a single string for injection into LLM context.
|
|
32
|
+
*/
|
|
33
|
+
function formatRepoMapString(entries) {
|
|
34
|
+
if (entries.length === 0) {
|
|
35
|
+
return "# Repository Map\n(No modules indexed)\n";
|
|
36
|
+
}
|
|
37
|
+
const lines = ["# Repository Map", ""];
|
|
38
|
+
for (const entry of entries) {
|
|
39
|
+
lines.push(formatRepoMapLine(entry.path, entry.exports));
|
|
40
|
+
}
|
|
41
|
+
return lines.join("\n");
|
|
42
|
+
}
|
|
43
|
+
function formatRepoMapLine(path, exports) {
|
|
44
|
+
if (exports.length === 0) {
|
|
45
|
+
return `${path}`;
|
|
46
|
+
}
|
|
47
|
+
return `${path}: exports ${exports.slice(0, 10).join(", ")}${exports.length > 10 ? ", ..." : ""}`;
|
|
48
|
+
}
|
|
49
|
+
function extractModulePath(moduleNode) {
|
|
50
|
+
// Module node content often contains the file path or module name.
|
|
51
|
+
const content = moduleNode.content.trim();
|
|
52
|
+
const pathMatch = content.match(/^(?:module|file):\s*(.+)$/i);
|
|
53
|
+
if (pathMatch && pathMatch[1]) {
|
|
54
|
+
return pathMatch[1].trim();
|
|
55
|
+
}
|
|
56
|
+
// Fallback: use id if it looks like a path.
|
|
57
|
+
if (moduleNode.id.includes("/") || moduleNode.id.includes("\\")) {
|
|
58
|
+
return moduleNode.id;
|
|
59
|
+
}
|
|
60
|
+
return content || moduleNode.id;
|
|
61
|
+
}
|
|
62
|
+
function extractExportedSymbols(moduleNode, _allNodes) {
|
|
63
|
+
// Heuristic: look for Symbol nodes that reference this module via "defines" edges.
|
|
64
|
+
// In practice, you'd traverse edges from the module to its defined symbols.
|
|
65
|
+
// For now, we do a simple name-based heuristic from the module's metadata.
|
|
66
|
+
const meta = moduleNode.metadata;
|
|
67
|
+
if (meta && Array.isArray(meta.exports)) {
|
|
68
|
+
return meta.exports.slice(0, 20).map(String);
|
|
69
|
+
}
|
|
70
|
+
// Fallback: scan content for "exports" keyword.
|
|
71
|
+
const content = moduleNode.content;
|
|
72
|
+
const exportMatches = content.match(/exports?[:\s]+([^\n]+)/gi);
|
|
73
|
+
if (exportMatches) {
|
|
74
|
+
return exportMatches
|
|
75
|
+
.map((m) => m.replace(/^exports?[:\s]+/i, "").trim())
|
|
76
|
+
.slice(0, 10);
|
|
77
|
+
}
|
|
78
|
+
return [];
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=repo-map.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repo-map.js","sourceRoot":"","sources":["../../src/graph/repo-map.ts"],"names":[],"mappings":";;AAuBA,oCAwBC;AAKD,kDAUC;AA1CD;;GAEG;AACI,KAAK,UAAU,YAAY,CAAC,MAAmB;IACpD,IAAI,OAAO,MAAM,CAAC,YAAY,KAAK,UAAU,EAAE,CAAC;QAC9C,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,EAAE,CAAC;IACvC,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;IAClE,MAAM,OAAO,GAAmB,EAAE,CAAC;IAEnC,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACpC,MAAM,OAAO,GAAG,sBAAsB,CAAC,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC5D,MAAM,IAAI,GAAG,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC9C,OAAO,CAAC,IAAI,CAAC;YACX,QAAQ,EAAE,GAAG,CAAC,EAAE;YAChB,IAAI;YACJ,OAAO;YACP,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;SAC1C,CAAC,CAAC;IACL,CAAC;IAED,gCAAgC;IAChC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACrD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,SAAgB,mBAAmB,CAAC,OAAuB;IACzD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,0CAA0C,CAAC;IACpD,CAAC;IAED,MAAM,KAAK,GAAa,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;IACjD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAY,EAAE,OAAiB;IACxD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,GAAG,IAAI,EAAE,CAAC;IACnB,CAAC;IACD,OAAO,GAAG,IAAI,aAAa,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AACpG,CAAC;AAED,SAAS,iBAAiB,CAAC,UAAqB;IAC9C,mEAAmE;IACnE,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IAC1C,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAC9D,IAAI,SAAS,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9B,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7B,CAAC;IACD,4CAA4C;IAC5C,IAAI,UAAU,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAChE,OAAO,UAAU,CAAC,EAAE,CAAC;IACvB,CAAC;IACD,OAAO,OAAO,IAAI,UAAU,CAAC,EAAE,CAAC;AAClC,CAAC;AAED,SAAS,sBAAsB,CAAC,UAAqB,EAAE,SAAsB;IAC3E,mFAAmF;IACnF,4EAA4E;IAC5E,2EAA2E;IAC3E,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC;IACjC,IAAI,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACxC,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/C,CAAC;IAED,gDAAgD;IAChD,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;IACnC,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAChE,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,aAAa;aACjB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;aACpD,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import type { GraphNode } from "../core/types";
|
|
2
|
+
import { type EmbeddingProvider } from "../learning/embeddings";
|
|
3
|
+
import { type OpenBmbRuntimeOptions } from "../routing/provider-adapters/openbmb";
|
|
4
|
+
import type { CompressionModelHandle } from "./compression-model";
|
|
5
|
+
/**
|
|
6
|
+
* Semantic compression via minicpm-1b: cluster similar nodes and generate
|
|
7
|
+
* unified summaries, or condense verbose content into dense descriptions.
|
|
8
|
+
*
|
|
9
|
+
* This is the "Layer 1" compression that leverages the local LLM after graph-
|
|
10
|
+
* structure pruning has already reduced the candidate set.
|
|
11
|
+
*/
|
|
12
|
+
export interface ClusteringOptions {
|
|
13
|
+
embeddingProvider?: EmbeddingProvider;
|
|
14
|
+
similarityThreshold?: number;
|
|
15
|
+
maxClusterSize?: number;
|
|
16
|
+
}
|
|
17
|
+
export interface NodeCluster {
|
|
18
|
+
representative: GraphNode;
|
|
19
|
+
members: GraphNode[];
|
|
20
|
+
avgSimilarity: number;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Clusters nodes by embedding similarity. Nodes within a cluster can be
|
|
24
|
+
* merged into a single summary line to save tokens.
|
|
25
|
+
*/
|
|
26
|
+
export declare function clusterSimilarNodes(nodes: GraphNode[], options?: ClusteringOptions): Promise<NodeCluster[]>;
|
|
27
|
+
export interface SummarizerOptions extends OpenBmbRuntimeOptions {
|
|
28
|
+
maxSummaryTokens?: number;
|
|
29
|
+
/** Preferred: unified compression model handle (auto-selects external/embedded). */
|
|
30
|
+
modelHandle?: CompressionModelHandle;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Generates a unified summary for a cluster of similar nodes.
|
|
34
|
+
* Uses the provided compression model handle (external or embedded) if given,
|
|
35
|
+
* otherwise falls back to direct embedded openbmb invocation.
|
|
36
|
+
* Example: 3 overloaded `login()` variants → "login function with 3 signatures".
|
|
37
|
+
*/
|
|
38
|
+
export declare function summarizeCluster(cluster: NodeCluster, options?: SummarizerOptions): Promise<string>;
|
|
39
|
+
export interface DensifierOptions extends OpenBmbRuntimeOptions {
|
|
40
|
+
maxOutputTokens?: number;
|
|
41
|
+
minInputTokens?: number;
|
|
42
|
+
/** Preferred: unified compression model handle (auto-selects external/embedded). */
|
|
43
|
+
modelHandle?: CompressionModelHandle;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Rewrites verbose node content into dense summaries.
|
|
47
|
+
* Uses the provided compression model handle if given, otherwise falls back to
|
|
48
|
+
* direct embedded openbmb invocation. Only applies to nodes exceeding minInputTokens.
|
|
49
|
+
*/
|
|
50
|
+
export declare function densifyNodeContent(node: GraphNode, options?: DensifierOptions): Promise<string>;
|
|
51
|
+
/**
|
|
52
|
+
* High-level pipeline: cluster similar nodes, summarize each cluster, and
|
|
53
|
+
* densify remaining verbose nodes. Returns compressed node set.
|
|
54
|
+
*
|
|
55
|
+
* When a compression model handle is provided, summarization/densification
|
|
56
|
+
* route through it (external economy tier or embedded minicpm); otherwise they
|
|
57
|
+
* fall back to direct embedded openbmb invocation.
|
|
58
|
+
*/
|
|
59
|
+
export declare function applySemanticCompression(nodes: GraphNode[], options?: {
|
|
60
|
+
clusteringOptions?: ClusteringOptions;
|
|
61
|
+
summarizerOptions?: SummarizerOptions;
|
|
62
|
+
densifierOptions?: DensifierOptions;
|
|
63
|
+
modelHandle?: CompressionModelHandle;
|
|
64
|
+
}): Promise<GraphNode[]>;
|
|
65
|
+
//# sourceMappingURL=semantic-compression.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semantic-compression.d.ts","sourceRoot":"","sources":["../../src/graph/semantic-compression.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAsC,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AACpG,OAAO,EAAuB,KAAK,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AACvG,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAElE;;;;;;GAMG;AAEH,MAAM,WAAW,iBAAiB;IAChC,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,cAAc,EAAE,SAAS,CAAC;IAC1B,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,SAAS,EAAE,EAClB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,WAAW,EAAE,CAAC,CA6CxB;AAED,MAAM,WAAW,iBAAkB,SAAQ,qBAAqB;IAC9D,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,oFAAoF;IACpF,WAAW,CAAC,EAAE,sBAAsB,CAAC;CACtC;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,WAAW,EACpB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,MAAM,CAAC,CA8BjB;AAED,MAAM,WAAW,gBAAiB,SAAQ,qBAAqB;IAC7D,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oFAAoF;IACpF,WAAW,CAAC,EAAE,sBAAsB,CAAC;CACtC;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,SAAS,EACf,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,MAAM,CAAC,CAqCjB;AAED;;;;;;;GAOG;AACH,wBAAsB,wBAAwB,CAC5C,KAAK,EAAE,SAAS,EAAE,EAClB,OAAO,CAAC,EAAE;IACR,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,WAAW,CAAC,EAAE,sBAAsB,CAAC;CACtC,GACA,OAAO,CAAC,SAAS,EAAE,CAAC,CA6CtB"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.clusterSimilarNodes = clusterSimilarNodes;
|
|
4
|
+
exports.summarizeCluster = summarizeCluster;
|
|
5
|
+
exports.densifyNodeContent = densifyNodeContent;
|
|
6
|
+
exports.applySemanticCompression = applySemanticCompression;
|
|
7
|
+
const embeddings_1 = require("../learning/embeddings");
|
|
8
|
+
const openbmb_1 = require("../routing/provider-adapters/openbmb");
|
|
9
|
+
/**
|
|
10
|
+
* Clusters nodes by embedding similarity. Nodes within a cluster can be
|
|
11
|
+
* merged into a single summary line to save tokens.
|
|
12
|
+
*/
|
|
13
|
+
async function clusterSimilarNodes(nodes, options) {
|
|
14
|
+
const threshold = options?.similarityThreshold ?? 0.75;
|
|
15
|
+
const maxSize = options?.maxClusterSize ?? 5;
|
|
16
|
+
// Ensure all nodes have embeddings.
|
|
17
|
+
const withEmbedding = nodes.filter((n) => (0, embeddings_1.extractEmbedding)(n) !== null);
|
|
18
|
+
if (withEmbedding.length === 0)
|
|
19
|
+
return [];
|
|
20
|
+
const clusters = [];
|
|
21
|
+
const assigned = new Set();
|
|
22
|
+
for (const candidate of withEmbedding) {
|
|
23
|
+
if (assigned.has(candidate.id))
|
|
24
|
+
continue;
|
|
25
|
+
const cluster = [candidate];
|
|
26
|
+
assigned.add(candidate.id);
|
|
27
|
+
const candidateEmb = (0, embeddings_1.extractEmbedding)(candidate);
|
|
28
|
+
let simSum = 0;
|
|
29
|
+
for (const other of withEmbedding) {
|
|
30
|
+
if (assigned.has(other.id))
|
|
31
|
+
continue;
|
|
32
|
+
if (cluster.length >= maxSize)
|
|
33
|
+
break;
|
|
34
|
+
const otherEmb = (0, embeddings_1.extractEmbedding)(other);
|
|
35
|
+
if (!otherEmb)
|
|
36
|
+
continue;
|
|
37
|
+
const sim = (0, embeddings_1.cosineSimilarity)(candidateEmb, otherEmb);
|
|
38
|
+
if (sim >= threshold) {
|
|
39
|
+
cluster.push(other);
|
|
40
|
+
assigned.add(other.id);
|
|
41
|
+
simSum += sim;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
// Only create cluster if we found similar nodes (cluster size > 1).
|
|
45
|
+
if (cluster.length > 1) {
|
|
46
|
+
clusters.push({
|
|
47
|
+
representative: candidate,
|
|
48
|
+
members: cluster,
|
|
49
|
+
avgSimilarity: simSum / (cluster.length - 1),
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return clusters;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Generates a unified summary for a cluster of similar nodes.
|
|
57
|
+
* Uses the provided compression model handle (external or embedded) if given,
|
|
58
|
+
* otherwise falls back to direct embedded openbmb invocation.
|
|
59
|
+
* Example: 3 overloaded `login()` variants → "login function with 3 signatures".
|
|
60
|
+
*/
|
|
61
|
+
async function summarizeCluster(cluster, options) {
|
|
62
|
+
const memberContents = cluster.members.map((m) => m.content).slice(0, 5);
|
|
63
|
+
const prompt = [
|
|
64
|
+
"你是代码摘要生成器。多个相似的代码片段需要合并为一句统一描述。",
|
|
65
|
+
"要求:",
|
|
66
|
+
"1. 用一句话概括它们的共同功能(20字以内)",
|
|
67
|
+
"2. 如果是重载/变体,说明有几个版本",
|
|
68
|
+
"3. 不要逐个列举,只给出统一摘要",
|
|
69
|
+
"",
|
|
70
|
+
"代码片段:",
|
|
71
|
+
...memberContents.map((c, i) => `${i + 1}. ${c}`),
|
|
72
|
+
"",
|
|
73
|
+
"统一摘要:",
|
|
74
|
+
].join("\n");
|
|
75
|
+
const maxTokens = options?.maxSummaryTokens ?? 64;
|
|
76
|
+
try {
|
|
77
|
+
const result = options?.modelHandle
|
|
78
|
+
? await options.modelHandle.generate(prompt, maxTokens)
|
|
79
|
+
: await (0, openbmb_1.openbmbGenerateText)({ prompt, model: options?.modelPath ?? "minicpm-1b" }, { ...options, maxTokens });
|
|
80
|
+
return result.trim().replace(/^统一摘要[::]?\s*/i, "");
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
// Degrade gracefully: if no model is available, keep the representative's original content.
|
|
84
|
+
return cluster.representative.content;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Rewrites verbose node content into dense summaries.
|
|
89
|
+
* Uses the provided compression model handle if given, otherwise falls back to
|
|
90
|
+
* direct embedded openbmb invocation. Only applies to nodes exceeding minInputTokens.
|
|
91
|
+
*/
|
|
92
|
+
async function densifyNodeContent(node, options) {
|
|
93
|
+
const content = node.content;
|
|
94
|
+
const minInput = options?.minInputTokens ?? 150;
|
|
95
|
+
const estimatedTokens = Math.ceil(content.length / 4);
|
|
96
|
+
if (estimatedTokens < minInput) {
|
|
97
|
+
// Already concise.
|
|
98
|
+
return content;
|
|
99
|
+
}
|
|
100
|
+
const prompt = [
|
|
101
|
+
"你是代码压缩专家。将以下代码签名/内容改写为极简版(保留核心信息,去掉冗余)。",
|
|
102
|
+
"要求:",
|
|
103
|
+
"1. 保留函数名、参数、返回类型",
|
|
104
|
+
"2. 去掉注释、装饰器、冗长描述",
|
|
105
|
+
"3. 输出格式:function_name(params) -> return_type | 核心功能",
|
|
106
|
+
"",
|
|
107
|
+
`原内容:\n${content.slice(0, 600)}`,
|
|
108
|
+
"",
|
|
109
|
+
"压缩版:",
|
|
110
|
+
].join("\n");
|
|
111
|
+
const maxTokens = options?.maxOutputTokens ?? 80;
|
|
112
|
+
try {
|
|
113
|
+
const result = options?.modelHandle
|
|
114
|
+
? await options.modelHandle.generate(prompt, maxTokens)
|
|
115
|
+
: await (0, openbmb_1.openbmbGenerateText)({ prompt, model: options?.modelPath ?? "minicpm-1b" }, { ...options, maxTokens });
|
|
116
|
+
return result.trim().replace(/^压缩版[::]?\s*/i, "");
|
|
117
|
+
}
|
|
118
|
+
catch {
|
|
119
|
+
// Degrade gracefully: if no model is available, keep the original content.
|
|
120
|
+
return content;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* High-level pipeline: cluster similar nodes, summarize each cluster, and
|
|
125
|
+
* densify remaining verbose nodes. Returns compressed node set.
|
|
126
|
+
*
|
|
127
|
+
* When a compression model handle is provided, summarization/densification
|
|
128
|
+
* route through it (external economy tier or embedded minicpm); otherwise they
|
|
129
|
+
* fall back to direct embedded openbmb invocation.
|
|
130
|
+
*/
|
|
131
|
+
async function applySemanticCompression(nodes, options) {
|
|
132
|
+
const clusters = await clusterSimilarNodes(nodes, options?.clusteringOptions);
|
|
133
|
+
const clusterIds = new Set(clusters.flatMap((c) => c.members.map((m) => m.id)));
|
|
134
|
+
const summarizerOptions = {
|
|
135
|
+
...options?.summarizerOptions,
|
|
136
|
+
...(options?.modelHandle ? { modelHandle: options.modelHandle } : {}),
|
|
137
|
+
};
|
|
138
|
+
const densifierOptions = {
|
|
139
|
+
...options?.densifierOptions,
|
|
140
|
+
...(options?.modelHandle ? { modelHandle: options.modelHandle } : {}),
|
|
141
|
+
};
|
|
142
|
+
const compressed = [];
|
|
143
|
+
// Replace each cluster with a single summarized node.
|
|
144
|
+
for (const cluster of clusters) {
|
|
145
|
+
const summary = await summarizeCluster(cluster, summarizerOptions);
|
|
146
|
+
compressed.push({
|
|
147
|
+
...cluster.representative,
|
|
148
|
+
content: summary,
|
|
149
|
+
metadata: {
|
|
150
|
+
...cluster.representative.metadata,
|
|
151
|
+
compressed: true,
|
|
152
|
+
clusterSize: cluster.members.length,
|
|
153
|
+
originalIds: cluster.members.map((m) => m.id),
|
|
154
|
+
},
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
// Densify non-clustered nodes if verbose.
|
|
158
|
+
for (const node of nodes) {
|
|
159
|
+
if (clusterIds.has(node.id))
|
|
160
|
+
continue;
|
|
161
|
+
const dense = await densifyNodeContent(node, densifierOptions);
|
|
162
|
+
compressed.push({
|
|
163
|
+
...node,
|
|
164
|
+
content: dense,
|
|
165
|
+
metadata: {
|
|
166
|
+
...node.metadata,
|
|
167
|
+
...(dense !== node.content ? { densified: true } : {}),
|
|
168
|
+
},
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
return compressed;
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=semantic-compression.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semantic-compression.js","sourceRoot":"","sources":["../../src/graph/semantic-compression.ts"],"names":[],"mappings":"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"}
|
|
@@ -38,7 +38,18 @@ export interface McpInstallResult {
|
|
|
38
38
|
status: "injected" | "created" | "skipped" | "error" | "updated";
|
|
39
39
|
message?: string;
|
|
40
40
|
}
|
|
41
|
+
export interface McpAgentInstallStatus {
|
|
42
|
+
agentId: string;
|
|
43
|
+
agentName: string;
|
|
44
|
+
configPath: string;
|
|
45
|
+
scope: "user" | "workspace";
|
|
46
|
+
detected: boolean;
|
|
47
|
+
installed: boolean;
|
|
48
|
+
}
|
|
49
|
+
export type McpConfigFormat = "json" | "codex-toml";
|
|
41
50
|
export declare function detectInstalledAgents(): DetectedAgent[];
|
|
51
|
+
/** Inspect detected agents and whether GraphFlow MCP is present in each config file. */
|
|
52
|
+
export declare function getMcpInstallStatus(serverName?: string): McpAgentInstallStatus[];
|
|
42
53
|
export declare function resolveSystemNodeCommand(): string | undefined;
|
|
43
54
|
export declare function resolveMcpNodeLaunch(options: {
|
|
44
55
|
nodeCommand?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-mcp-installer.d.ts","sourceRoot":"","sources":["../../src/integrations/agent-mcp-installer.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,aAAa,GAAG,YAAY,GAAG,SAAS,CAAC;AAErD,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAED,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,YAAY,GAAG,cAAc,CAAC;AACvE,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,KAAK,CAAC;AAE7C,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,2EAA2E;IAC3E,YAAY,CAAC,EAAE,eAAe,CAAC;IAC/B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,6FAA6F;IAC7F,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oFAAoF;IACpF,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,uFAAuF;IACvF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2FAA2F;IAC3F,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gFAAgF;IAChF,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,WAAW,CAAC;IAC5B,MAAM,EAAE,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;IACjE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;
|
|
1
|
+
{"version":3,"file":"agent-mcp-installer.d.ts","sourceRoot":"","sources":["../../src/integrations/agent-mcp-installer.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,aAAa,GAAG,YAAY,GAAG,SAAS,CAAC;AAErD,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAED,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,YAAY,GAAG,cAAc,CAAC;AACvE,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,KAAK,CAAC;AAE7C,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,2EAA2E;IAC3E,YAAY,CAAC,EAAE,eAAe,CAAC;IAC/B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,6FAA6F;IAC7F,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oFAAoF;IACpF,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,uFAAuF;IACvF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2FAA2F;IAC3F,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gFAAgF;IAChF,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,WAAW,CAAC;IAC5B,MAAM,EAAE,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;IACjE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,WAAW,CAAC;IAC5B,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,YAAY,CAAC;AAkMpD,wBAAgB,qBAAqB,IAAI,aAAa,EAAE,CAYvD;AAwBD,wFAAwF;AACxF,wBAAgB,mBAAmB,CAAC,UAAU,SAAc,GAAG,qBAAqB,EAAE,CAmCrF;AAOD,wBAAgB,wBAAwB,IAAI,MAAM,GAAG,SAAS,CAa7D;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CAenD;AAuBD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,iBAAiB,GAAG,aAAa,CAwE5E;AAwMD,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,iBAAiB,GAAG,gBAAgB,EAAE,CAoDzF;AAED,wBAAgB,sBAAsB,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CA0CrE"}
|