@roarpeng/graphflow 0.6.15 → 1.0.4
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 +54 -1
- package/README.md +149 -44
- package/dist/agents/insight.d.ts +83 -0
- package/dist/agents/insight.d.ts.map +1 -0
- package/dist/agents/insight.js +381 -0
- package/dist/agents/insight.js.map +1 -0
- 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/defaults.js +1 -1
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/discover-workspace.d.ts +16 -0
- package/dist/config/discover-workspace.d.ts.map +1 -0
- package/dist/config/discover-workspace.js +112 -0
- package/dist/config/discover-workspace.js.map +1 -0
- package/dist/config/resolve.d.ts.map +1 -1
- package/dist/config/resolve.js +22 -8
- package/dist/config/resolve.js.map +1 -1
- package/dist/config/scaffold.d.ts.map +1 -1
- package/dist/config/scaffold.js +2 -1
- package/dist/config/scaffold.js.map +1 -1
- package/dist/config/schema.d.ts +31 -0
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/workspace-root.d.ts +24 -0
- package/dist/config/workspace-root.d.ts.map +1 -0
- package/dist/config/workspace-root.js +59 -0
- package/dist/config/workspace-root.js.map +1 -0
- package/dist/core/orchestrator.d.ts +7 -0
- package/dist/core/orchestrator.d.ts.map +1 -1
- package/dist/core/orchestrator.js +54 -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 +9 -3
- 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/artifact-manager.d.ts +72 -0
- package/dist/graph/artifact-manager.d.ts.map +1 -0
- package/dist/graph/artifact-manager.js +215 -0
- package/dist/graph/artifact-manager.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 +159 -1
- package/dist/graph/context-slicer.js.map +1 -1
- package/dist/graph/file-indexer.d.ts +31 -0
- package/dist/graph/file-indexer.d.ts.map +1 -1
- package/dist/graph/file-indexer.js +332 -3
- package/dist/graph/file-indexer.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 +155 -0
- package/dist/graph/graph-compression.js.map +1 -0
- package/dist/graph/graph-utils.d.ts +4 -1
- package/dist/graph/graph-utils.d.ts.map +1 -1
- package/dist/graph/graph-utils.js +62 -0
- package/dist/graph/graph-utils.js.map +1 -1
- package/dist/graph/graphify-file-client.d.ts.map +1 -1
- package/dist/graph/graphify-file-client.js +30 -8
- package/dist/graph/graphify-file-client.js.map +1 -1
- package/dist/graph/language-indexers/c-cpp.d.ts +9 -1
- package/dist/graph/language-indexers/c-cpp.d.ts.map +1 -1
- package/dist/graph/language-indexers/c-cpp.js +328 -103
- package/dist/graph/language-indexers/c-cpp.js.map +1 -1
- package/dist/graph/language-indexers/index.d.ts +20 -0
- package/dist/graph/language-indexers/index.d.ts.map +1 -1
- package/dist/graph/language-indexers/index.js +4 -0
- package/dist/graph/language-indexers/index.js.map +1 -1
- package/dist/graph/language-indexers/java.d.ts +12 -0
- package/dist/graph/language-indexers/java.d.ts.map +1 -0
- package/dist/graph/language-indexers/java.js +273 -0
- package/dist/graph/language-indexers/java.js.map +1 -0
- package/dist/graph/language-indexers/python.d.ts.map +1 -1
- package/dist/graph/language-indexers/python.js +47 -4
- package/dist/graph/language-indexers/python.js.map +1 -1
- package/dist/graph/language-indexers/ruby.d.ts +14 -0
- package/dist/graph/language-indexers/ruby.d.ts.map +1 -0
- package/dist/graph/language-indexers/ruby.js +245 -0
- package/dist/graph/language-indexers/ruby.js.map +1 -0
- package/dist/graph/language-indexers/rust.d.ts +10 -1
- package/dist/graph/language-indexers/rust.d.ts.map +1 -1
- package/dist/graph/language-indexers/rust.js +254 -80
- package/dist/graph/language-indexers/rust.js.map +1 -1
- package/dist/graph/language-indexers/tree-sitter-loader.d.ts +8 -1
- package/dist/graph/language-indexers/tree-sitter-loader.d.ts.map +1 -1
- package/dist/graph/language-indexers/tree-sitter-loader.js +64 -13
- package/dist/graph/language-indexers/tree-sitter-loader.js.map +1 -1
- package/dist/graph/language-indexers/typescript.d.ts.map +1 -1
- package/dist/graph/language-indexers/typescript.js +72 -8
- package/dist/graph/language-indexers/typescript.js.map +1 -1
- package/dist/graph/metrics.d.ts +33 -0
- package/dist/graph/metrics.d.ts.map +1 -0
- package/dist/graph/metrics.js +117 -0
- package/dist/graph/metrics.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/graph/token-savings.d.ts +52 -0
- package/dist/graph/token-savings.d.ts.map +1 -0
- package/dist/graph/token-savings.js +113 -0
- package/dist/graph/token-savings.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/integrations/agent-mcp-installer.d.ts +13 -0
- package/dist/integrations/agent-mcp-installer.d.ts.map +1 -1
- package/dist/integrations/agent-mcp-installer.js +287 -29
- package/dist/integrations/agent-mcp-installer.js.map +1 -1
- package/dist/learning/episodic-memory.d.ts +8 -1
- package/dist/learning/episodic-memory.d.ts.map +1 -1
- package/dist/learning/episodic-memory.js +33 -0
- package/dist/learning/episodic-memory.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/skills/index.d.ts +157 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +157 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/surfaces/cli/index.js +119 -0
- package/dist/surfaces/cli/index.js.map +1 -1
- package/dist/surfaces/cli/output.d.ts.map +1 -1
- package/dist/surfaces/cli/output.js +7 -0
- package/dist/surfaces/cli/output.js.map +1 -1
- package/dist/surfaces/cli/runtime/graph.d.ts +77 -3
- package/dist/surfaces/cli/runtime/graph.d.ts.map +1 -1
- package/dist/surfaces/cli/runtime/graph.js +170 -10
- 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 +24 -1
- package/dist/surfaces/cli/runtime/routing.d.ts.map +1 -1
- package/dist/surfaces/cli/runtime/routing.js +72 -0
- package/dist/surfaces/cli/runtime/routing.js.map +1 -1
- package/dist/surfaces/cli/runtime/settings.d.ts.map +1 -1
- package/dist/surfaces/cli/runtime/settings.js +4 -1
- package/dist/surfaces/cli/runtime/settings.js.map +1 -1
- package/dist/surfaces/cli/runtime/types.d.ts +36 -0
- package/dist/surfaces/cli/runtime/types.d.ts.map +1 -1
- package/dist/surfaces/cli/runtime.d.ts +2 -2
- package/dist/surfaces/cli/runtime.d.ts.map +1 -1
- package/dist/surfaces/cli/runtime.js +11 -1
- package/dist/surfaces/cli/runtime.js.map +1 -1
- package/dist/surfaces/mcp/server.d.ts.map +1 -1
- package/dist/surfaces/mcp/server.js +145 -4
- 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 +6 -2
- package/scripts/safe-postinstall.cjs +167 -12
- package/src/surfaces/trae-skill/graphflow/SKILL.md +535 -0
- package/wasm/tree-sitter-c.wasm +0 -0
- package/wasm/tree-sitter-go.wasm +0 -0
- package/wasm/tree-sitter-java.wasm +0 -0
- package/wasm/tree-sitter-python.wasm +0 -0
- package/wasm/tree-sitter-ruby.wasm +0 -0
- package/wasm/tree-sitter-rust.wasm +0 -0
|
@@ -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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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { GraphFlowConfig } from "../config/schema";
|
|
2
|
+
/**
|
|
3
|
+
* Cumulative token savings tracker.
|
|
4
|
+
*
|
|
5
|
+
* Records each context compression / task run and provides aggregate
|
|
6
|
+
* statistics so users can quantify ROI (return on investment) of using
|
|
7
|
+
* GraphFlow's context compression.
|
|
8
|
+
*
|
|
9
|
+
* Stats are persisted to graphflow-out/token-savings.json as a simple
|
|
10
|
+
* append-only log with aggregate counters.
|
|
11
|
+
*/
|
|
12
|
+
export interface SavingsRecord {
|
|
13
|
+
timestamp: string;
|
|
14
|
+
query: string;
|
|
15
|
+
rawTokens: number;
|
|
16
|
+
compressedTokens: number;
|
|
17
|
+
savingsPercent: number;
|
|
18
|
+
source: "preview_context" | "run";
|
|
19
|
+
}
|
|
20
|
+
export interface SavingsStats {
|
|
21
|
+
totalRuns: number;
|
|
22
|
+
totalRawTokens: number;
|
|
23
|
+
totalCompressedTokens: number;
|
|
24
|
+
totalSavedTokens: number;
|
|
25
|
+
averageSavingsPercent: number;
|
|
26
|
+
firstRunAt: string | null;
|
|
27
|
+
lastRunAt: string | null;
|
|
28
|
+
recentRecords: SavingsRecord[];
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Record a single savings event and update cumulative stats.
|
|
32
|
+
*
|
|
33
|
+
* @param config GraphFlow config
|
|
34
|
+
* @param record The savings record to append
|
|
35
|
+
*/
|
|
36
|
+
export declare function recordSavings(config: GraphFlowConfig, record: SavingsRecord): void;
|
|
37
|
+
/**
|
|
38
|
+
* Get cumulative savings statistics.
|
|
39
|
+
*
|
|
40
|
+
* @param config GraphFlow config
|
|
41
|
+
*/
|
|
42
|
+
export declare function getSavingsStats(config: GraphFlowConfig): SavingsStats;
|
|
43
|
+
/**
|
|
44
|
+
* Reset all savings statistics.
|
|
45
|
+
*
|
|
46
|
+
* @param config GraphFlow config
|
|
47
|
+
*/
|
|
48
|
+
export declare function resetSavingsStats(config: GraphFlowConfig): {
|
|
49
|
+
path: string;
|
|
50
|
+
reset: boolean;
|
|
51
|
+
};
|
|
52
|
+
//# sourceMappingURL=token-savings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-savings.d.ts","sourceRoot":"","sources":["../../src/graph/token-savings.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAExD;;;;;;;;;GASG;AAEH,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,iBAAiB,GAAG,KAAK,CAAC;CACnC;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,gBAAgB,EAAE,MAAM,CAAC;IACzB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,aAAa,EAAE,aAAa,EAAE,CAAC;CAChC;AAuDD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAqBlF;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG,YAAY,CAErE;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,eAAe,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAkB3F"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.recordSavings = recordSavings;
|
|
4
|
+
exports.getSavingsStats = getSavingsStats;
|
|
5
|
+
exports.resetSavingsStats = resetSavingsStats;
|
|
6
|
+
const node_fs_1 = require("node:fs");
|
|
7
|
+
const node_path_1 = require("node:path");
|
|
8
|
+
const MAX_RECENT_RECORDS = 50;
|
|
9
|
+
function resolveStatsPath(config) {
|
|
10
|
+
const root = config.graphPolicy.workspaceRoot ?? process.cwd();
|
|
11
|
+
return (0, node_path_1.join)(root, "graphflow-out", "token-savings.json");
|
|
12
|
+
}
|
|
13
|
+
function loadStats(statsPath) {
|
|
14
|
+
if (!(0, node_fs_1.existsSync)(statsPath)) {
|
|
15
|
+
return {
|
|
16
|
+
totalRuns: 0,
|
|
17
|
+
totalRawTokens: 0,
|
|
18
|
+
totalCompressedTokens: 0,
|
|
19
|
+
totalSavedTokens: 0,
|
|
20
|
+
averageSavingsPercent: 0,
|
|
21
|
+
firstRunAt: null,
|
|
22
|
+
lastRunAt: null,
|
|
23
|
+
recentRecords: [],
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
try {
|
|
27
|
+
const raw = (0, node_fs_1.readFileSync)(statsPath, "utf8");
|
|
28
|
+
const parsed = JSON.parse(raw);
|
|
29
|
+
return {
|
|
30
|
+
totalRuns: parsed.totalRuns ?? 0,
|
|
31
|
+
totalRawTokens: parsed.totalRawTokens ?? 0,
|
|
32
|
+
totalCompressedTokens: parsed.totalCompressedTokens ?? 0,
|
|
33
|
+
totalSavedTokens: parsed.totalSavedTokens ?? 0,
|
|
34
|
+
averageSavingsPercent: parsed.averageSavingsPercent ?? 0,
|
|
35
|
+
firstRunAt: parsed.firstRunAt ?? null,
|
|
36
|
+
lastRunAt: parsed.lastRunAt ?? null,
|
|
37
|
+
recentRecords: parsed.recentRecords ?? [],
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
return {
|
|
42
|
+
totalRuns: 0,
|
|
43
|
+
totalRawTokens: 0,
|
|
44
|
+
totalCompressedTokens: 0,
|
|
45
|
+
totalSavedTokens: 0,
|
|
46
|
+
averageSavingsPercent: 0,
|
|
47
|
+
firstRunAt: null,
|
|
48
|
+
lastRunAt: null,
|
|
49
|
+
recentRecords: [],
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
function saveStats(statsPath, stats) {
|
|
54
|
+
(0, node_fs_1.mkdirSync)((0, node_path_1.dirname)(statsPath), { recursive: true });
|
|
55
|
+
(0, node_fs_1.writeFileSync)(statsPath, JSON.stringify(stats, null, 2), "utf8");
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Record a single savings event and update cumulative stats.
|
|
59
|
+
*
|
|
60
|
+
* @param config GraphFlow config
|
|
61
|
+
* @param record The savings record to append
|
|
62
|
+
*/
|
|
63
|
+
function recordSavings(config, record) {
|
|
64
|
+
const statsPath = resolveStatsPath(config);
|
|
65
|
+
const stats = loadStats(statsPath);
|
|
66
|
+
stats.totalRuns += 1;
|
|
67
|
+
stats.totalRawTokens += record.rawTokens;
|
|
68
|
+
stats.totalCompressedTokens += record.compressedTokens;
|
|
69
|
+
stats.totalSavedTokens += record.rawTokens - record.compressedTokens;
|
|
70
|
+
stats.averageSavingsPercent =
|
|
71
|
+
stats.totalRawTokens > 0
|
|
72
|
+
? Math.round((stats.totalSavedTokens / stats.totalRawTokens) * 100)
|
|
73
|
+
: 0;
|
|
74
|
+
stats.firstRunAt = stats.firstRunAt ?? record.timestamp;
|
|
75
|
+
stats.lastRunAt = record.timestamp;
|
|
76
|
+
stats.recentRecords.unshift(record);
|
|
77
|
+
if (stats.recentRecords.length > MAX_RECENT_RECORDS) {
|
|
78
|
+
stats.recentRecords = stats.recentRecords.slice(0, MAX_RECENT_RECORDS);
|
|
79
|
+
}
|
|
80
|
+
saveStats(statsPath, stats);
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Get cumulative savings statistics.
|
|
84
|
+
*
|
|
85
|
+
* @param config GraphFlow config
|
|
86
|
+
*/
|
|
87
|
+
function getSavingsStats(config) {
|
|
88
|
+
return loadStats(resolveStatsPath(config));
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Reset all savings statistics.
|
|
92
|
+
*
|
|
93
|
+
* @param config GraphFlow config
|
|
94
|
+
*/
|
|
95
|
+
function resetSavingsStats(config) {
|
|
96
|
+
const statsPath = resolveStatsPath(config);
|
|
97
|
+
if (!(0, node_fs_1.existsSync)(statsPath)) {
|
|
98
|
+
return { path: statsPath, reset: false };
|
|
99
|
+
}
|
|
100
|
+
const empty = {
|
|
101
|
+
totalRuns: 0,
|
|
102
|
+
totalRawTokens: 0,
|
|
103
|
+
totalCompressedTokens: 0,
|
|
104
|
+
totalSavedTokens: 0,
|
|
105
|
+
averageSavingsPercent: 0,
|
|
106
|
+
firstRunAt: null,
|
|
107
|
+
lastRunAt: null,
|
|
108
|
+
recentRecords: [],
|
|
109
|
+
};
|
|
110
|
+
saveStats(statsPath, empty);
|
|
111
|
+
return { path: statsPath, reset: true };
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=token-savings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-savings.js","sourceRoot":"","sources":["../../src/graph/token-savings.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { orchestrate, type OrchestrateOptions } from "./core/orchestrator";
|
|
2
2
|
export { createVsCodeRuntime } from "./surfaces/vscode/extension";
|
|
3
|
-
export { runTask, runTaskResult, previewContext, getGraphFlowSettings, getSettingsPanelStatus, testRoutingAndIndexGraph, indexGraphFromSettings, validateSettingsForGraphIndex, validateSettingsForRouting, saveGraphFlowSettings, indexGraph, inspectGraph, getSkillInsights, resolveConfig, diagnoseRouting, diagnoseRoutingResult, runLearningNightly, runLearningNightlyResult, planAndBrainstorm, planAndBrainstormResult, buildMcpServerNode, detectInstalledAgents, formatModelConfigGuide, installMcpToDetectedAgents, assertGraphFlowRuntime, } from "./surfaces/cli/runtime";
|
|
3
|
+
export { runTask, runTaskResult, reportOutcome, previewContext, expandAnchor, getGraphFlowSettings, getSettingsPanelStatus, testRoutingAndIndexGraph, indexGraphFromSettings, validateSettingsForGraphIndex, validateSettingsForRouting, saveGraphFlowSettings, indexGraph, inspectGraph, getSkillInsights, resolveConfig, diagnoseRouting, diagnoseRoutingResult, runLearningNightly, runLearningNightlyResult, planAndBrainstorm, planAndBrainstormResult, buildMcpServerNode, detectInstalledAgents, formatModelConfigGuide, installMcpToDetectedAgents, assertGraphFlowRuntime, } from "./surfaces/cli/runtime";
|
|
4
4
|
export type { GraphFlowRuntime, GraphFlowRuntimeModule } from "./surfaces/cli/runtime";
|
|
5
5
|
export type { DetectedAgent, McpInstallOptions, McpInstallResult, McpInstallStrategy, } from "./integrations/agent-mcp-installer";
|
|
6
6
|
export { parseCliOptions, formatCliResult, type CliCommandResult } from "./surfaces/cli/output";
|
|
@@ -8,4 +8,5 @@ export { createMcpServer, executeToolCall, getToolDefinitions, startStdioServer,
|
|
|
8
8
|
export type { TaskRunResult } from "./core/types";
|
|
9
9
|
export { createGraphClient, type GraphClient, } from "./graph/client-factory";
|
|
10
10
|
export { validateConfig, loadConfig, loadConfigSafe, type LoadConfigResult } from "./config/loader";
|
|
11
|
+
export { graphflowSkills, invokeSkill, listSkills, type GraphFlowSkillName, type SkillInputByName, type SkillOutputByName, type CompressContextInput, type CompressContextOutput, type PlanTaskInput, type PlanTaskOutput, type PlanInsightInput, type PlanInsightOutput, type IndexGraphInput, type IndexGraphOutput, type InspectGraphInput, type InspectGraphOutput, type ExpandAnchorInput, type ExpandAnchorOutput, type RunTaskInput, type RunTaskOutput, } from "./skills";
|
|
11
12
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EACL,OAAO,EACP,aAAa,EACb,cAAc,EACd,oBAAoB,EACpB,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,EACtB,6BAA6B,EAC7B,0BAA0B,EAC1B,qBAAqB,EACrB,UAAU,EACV,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,eAAe,EACf,qBAAqB,EACrB,kBAAkB,EAClB,wBAAwB,EACxB,iBAAiB,EACjB,uBAAuB,EACvB,kBAAkB,EAClB,qBAAqB,EACrB,sBAAsB,EACtB,0BAA0B,EAC1B,sBAAsB,GACvB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AACvF,YAAY,EACV,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAChG,OAAO,EACL,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EACL,iBAAiB,EACjB,KAAK,WAAW,GACjB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EACL,OAAO,EACP,aAAa,EACb,aAAa,EACb,cAAc,EACd,YAAY,EACZ,oBAAoB,EACpB,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,EACtB,6BAA6B,EAC7B,0BAA0B,EAC1B,qBAAqB,EACrB,UAAU,EACV,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,eAAe,EACf,qBAAqB,EACrB,kBAAkB,EAClB,wBAAwB,EACxB,iBAAiB,EACjB,uBAAuB,EACvB,kBAAkB,EAClB,qBAAqB,EACrB,sBAAsB,EACtB,0BAA0B,EAC1B,sBAAsB,GACvB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AACvF,YAAY,EACV,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAChG,OAAO,EACL,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EACL,iBAAiB,EACjB,KAAK,WAAW,GACjB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACpG,OAAO,EACL,eAAe,EACf,WAAW,EACX,UAAU,EACV,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAC1B,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,YAAY,EACjB,KAAK,aAAa,GACnB,MAAM,UAAU,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.loadConfigSafe = exports.loadConfig = exports.validateConfig = exports.createGraphClient = exports.startStdioServer = exports.getToolDefinitions = exports.executeToolCall = exports.createMcpServer = exports.formatCliResult = exports.parseCliOptions = exports.assertGraphFlowRuntime = exports.installMcpToDetectedAgents = exports.formatModelConfigGuide = exports.detectInstalledAgents = exports.buildMcpServerNode = exports.planAndBrainstormResult = exports.planAndBrainstorm = exports.runLearningNightlyResult = exports.runLearningNightly = exports.diagnoseRoutingResult = exports.diagnoseRouting = exports.resolveConfig = exports.getSkillInsights = exports.inspectGraph = exports.indexGraph = exports.saveGraphFlowSettings = exports.validateSettingsForRouting = exports.validateSettingsForGraphIndex = exports.indexGraphFromSettings = exports.testRoutingAndIndexGraph = exports.getSettingsPanelStatus = exports.getGraphFlowSettings = exports.previewContext = exports.runTaskResult = exports.runTask = exports.createVsCodeRuntime = exports.orchestrate = void 0;
|
|
3
|
+
exports.listSkills = exports.invokeSkill = exports.graphflowSkills = exports.loadConfigSafe = exports.loadConfig = exports.validateConfig = exports.createGraphClient = exports.startStdioServer = exports.getToolDefinitions = exports.executeToolCall = exports.createMcpServer = exports.formatCliResult = exports.parseCliOptions = exports.assertGraphFlowRuntime = exports.installMcpToDetectedAgents = exports.formatModelConfigGuide = exports.detectInstalledAgents = exports.buildMcpServerNode = exports.planAndBrainstormResult = exports.planAndBrainstorm = exports.runLearningNightlyResult = exports.runLearningNightly = exports.diagnoseRoutingResult = exports.diagnoseRouting = exports.resolveConfig = exports.getSkillInsights = exports.inspectGraph = exports.indexGraph = exports.saveGraphFlowSettings = exports.validateSettingsForRouting = exports.validateSettingsForGraphIndex = exports.indexGraphFromSettings = exports.testRoutingAndIndexGraph = exports.getSettingsPanelStatus = exports.getGraphFlowSettings = exports.expandAnchor = exports.previewContext = exports.reportOutcome = exports.runTaskResult = exports.runTask = exports.createVsCodeRuntime = exports.orchestrate = void 0;
|
|
4
4
|
var orchestrator_1 = require("./core/orchestrator");
|
|
5
5
|
Object.defineProperty(exports, "orchestrate", { enumerable: true, get: function () { return orchestrator_1.orchestrate; } });
|
|
6
6
|
var extension_1 = require("./surfaces/vscode/extension");
|
|
@@ -8,7 +8,9 @@ Object.defineProperty(exports, "createVsCodeRuntime", { enumerable: true, get: f
|
|
|
8
8
|
var runtime_1 = require("./surfaces/cli/runtime");
|
|
9
9
|
Object.defineProperty(exports, "runTask", { enumerable: true, get: function () { return runtime_1.runTask; } });
|
|
10
10
|
Object.defineProperty(exports, "runTaskResult", { enumerable: true, get: function () { return runtime_1.runTaskResult; } });
|
|
11
|
+
Object.defineProperty(exports, "reportOutcome", { enumerable: true, get: function () { return runtime_1.reportOutcome; } });
|
|
11
12
|
Object.defineProperty(exports, "previewContext", { enumerable: true, get: function () { return runtime_1.previewContext; } });
|
|
13
|
+
Object.defineProperty(exports, "expandAnchor", { enumerable: true, get: function () { return runtime_1.expandAnchor; } });
|
|
12
14
|
Object.defineProperty(exports, "getGraphFlowSettings", { enumerable: true, get: function () { return runtime_1.getGraphFlowSettings; } });
|
|
13
15
|
Object.defineProperty(exports, "getSettingsPanelStatus", { enumerable: true, get: function () { return runtime_1.getSettingsPanelStatus; } });
|
|
14
16
|
Object.defineProperty(exports, "testRoutingAndIndexGraph", { enumerable: true, get: function () { return runtime_1.testRoutingAndIndexGraph; } });
|
|
@@ -45,4 +47,8 @@ var loader_1 = require("./config/loader");
|
|
|
45
47
|
Object.defineProperty(exports, "validateConfig", { enumerable: true, get: function () { return loader_1.validateConfig; } });
|
|
46
48
|
Object.defineProperty(exports, "loadConfig", { enumerable: true, get: function () { return loader_1.loadConfig; } });
|
|
47
49
|
Object.defineProperty(exports, "loadConfigSafe", { enumerable: true, get: function () { return loader_1.loadConfigSafe; } });
|
|
50
|
+
var skills_1 = require("./skills");
|
|
51
|
+
Object.defineProperty(exports, "graphflowSkills", { enumerable: true, get: function () { return skills_1.graphflowSkills; } });
|
|
52
|
+
Object.defineProperty(exports, "invokeSkill", { enumerable: true, get: function () { return skills_1.invokeSkill; } });
|
|
53
|
+
Object.defineProperty(exports, "listSkills", { enumerable: true, get: function () { return skills_1.listSkills; } });
|
|
48
54
|
//# 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,oDAA2E;AAAlE,2GAAA,WAAW,OAAA;AACpB,yDAAkE;AAAzD,gHAAA,mBAAmB,OAAA;AAC5B,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,oDAA2E;AAAlE,2GAAA,WAAW,OAAA;AACpB,yDAAkE;AAAzD,gHAAA,mBAAmB,OAAA;AAC5B,kDA4BgC;AA3B9B,kGAAA,OAAO,OAAA;AACP,wGAAA,aAAa,OAAA;AACb,wGAAA,aAAa,OAAA;AACb,yGAAA,cAAc,OAAA;AACd,uGAAA,YAAY,OAAA;AACZ,+GAAA,oBAAoB,OAAA;AACpB,iHAAA,sBAAsB,OAAA;AACtB,mHAAA,wBAAwB,OAAA;AACxB,iHAAA,sBAAsB,OAAA;AACtB,wHAAA,6BAA6B,OAAA;AAC7B,qHAAA,0BAA0B,OAAA;AAC1B,gHAAA,qBAAqB,OAAA;AACrB,qGAAA,UAAU,OAAA;AACV,uGAAA,YAAY,OAAA;AACZ,2GAAA,gBAAgB,OAAA;AAChB,wGAAA,aAAa,OAAA;AACb,0GAAA,eAAe,OAAA;AACf,gHAAA,qBAAqB,OAAA;AACrB,6GAAA,kBAAkB,OAAA;AAClB,mHAAA,wBAAwB,OAAA;AACxB,4GAAA,iBAAiB,OAAA;AACjB,kHAAA,uBAAuB,OAAA;AACvB,6GAAA,kBAAkB,OAAA;AAClB,gHAAA,qBAAqB,OAAA;AACrB,iHAAA,sBAAsB,OAAA;AACtB,qHAAA,0BAA0B,OAAA;AAC1B,iHAAA,sBAAsB,OAAA;AASxB,gDAAgG;AAAvF,yGAAA,eAAe,OAAA;AAAE,yGAAA,eAAe,OAAA;AACzC,gDAK+B;AAJ7B,yGAAA,eAAe,OAAA;AACf,yGAAA,eAAe,OAAA;AACf,4GAAA,kBAAkB,OAAA;AAClB,0GAAA,gBAAgB,OAAA;AAGlB,yDAGgC;AAF9B,mHAAA,iBAAiB,OAAA;AAGnB,0CAAoG;AAA3F,wGAAA,cAAc,OAAA;AAAE,oGAAA,UAAU,OAAA;AAAE,wGAAA,cAAc,OAAA;AACnD,mCAqBkB;AApBhB,yGAAA,eAAe,OAAA;AACf,qGAAA,WAAW,OAAA;AACX,oGAAA,UAAU,OAAA"}
|
|
@@ -38,7 +38,20 @@ 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[];
|
|
53
|
+
/** fnm multishell paths are session-temporary and break MCP after shell restart. */
|
|
54
|
+
export declare function isEphemeralNodePath(nodePath: string): boolean;
|
|
42
55
|
export declare function resolveSystemNodeCommand(): string | undefined;
|
|
43
56
|
export declare function resolveMcpNodeLaunch(options: {
|
|
44
57
|
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;AAyMpD,wBAAgB,qBAAqB,IAAI,aAAa,EAAE,CAYvD;AAwBD,wFAAwF;AACxF,wBAAgB,mBAAmB,CAAC,UAAU,SAAc,GAAG,qBAAqB,EAAE,CAmCrF;AASD,oFAAoF;AACpF,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAG7D;AAqBD,wBAAgB,wBAAwB,IAAI,MAAM,GAAG,SAAS,CA0B7D;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,CA8BnD;AAuBD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,iBAAiB,GAAG,aAAa,CA8E5E;AA0OD,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,iBAAiB,GAAG,gBAAgB,EAAE,CAoDzF;AAED,wBAAgB,sBAAsB,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CA0CrE"}
|