@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state-machine.js","sourceRoot":"","sources":["../../src/core/state-machine.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"state-machine.js","sourceRoot":"","sources":["../../src/core/state-machine.ts"],"names":[],"mappings":"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"}
|
package/dist/core/types.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export type TaskStatus = "PENDING" | "RUNNING" | "VALIDATING" | "COMPLETED" | "FAILED" | "HUMAN_REVIEW_REQUIRED";
|
|
2
|
-
export type AgentRole = "planner" | "worker" | "validator" | "enricher" | "evolver";
|
|
1
|
+
export type TaskStatus = "PENDING" | "RUNNING" | "VALIDATING" | "COMPLETED" | "FAILED" | "HUMAN_REVIEW_REQUIRED" | "DELEGATED";
|
|
2
|
+
export type AgentRole = "planner" | "worker" | "validator" | "enricher" | "evolver" | "compressor";
|
|
3
3
|
export interface ValidationResult {
|
|
4
4
|
passed: boolean;
|
|
5
5
|
feedback: string;
|
|
@@ -34,6 +34,12 @@ export interface TaskRunResult {
|
|
|
34
34
|
task: string;
|
|
35
35
|
score: number;
|
|
36
36
|
}>;
|
|
37
|
+
executionDescriptor?: {
|
|
38
|
+
action: "execute";
|
|
39
|
+
task: string;
|
|
40
|
+
context: string;
|
|
41
|
+
retryHints: string[];
|
|
42
|
+
};
|
|
37
43
|
}
|
|
38
44
|
export interface TaskNode {
|
|
39
45
|
id: string;
|
|
@@ -56,6 +62,6 @@ export interface GraphNode {
|
|
|
56
62
|
export interface GraphEdge {
|
|
57
63
|
from: string;
|
|
58
64
|
to: string;
|
|
59
|
-
relation: "defines" | "references" | "imports" | "depends_on" | "changes" | "validates" | "co_occurs" | "prerequisite" | "improves" | "conflicts_with";
|
|
65
|
+
relation: "defines" | "references" | "imports" | "depends_on" | "changes" | "validates" | "co_occurs" | "prerequisite" | "improves" | "conflicts_with" | "calls" | "inherits";
|
|
60
66
|
}
|
|
61
67
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/core/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAClB,SAAS,GACT,SAAS,GACT,YAAY,GACZ,WAAW,GACX,QAAQ,GACR,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAClB,SAAS,GACT,SAAS,GACT,YAAY,GACZ,WAAW,GACX,QAAQ,GACR,uBAAuB,GACvB,WAAW,CAAC;AAEhB,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,WAAW,GAAG,UAAU,GAAG,SAAS,GAAG,YAAY,CAAC;AAEnG,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,GAAG,SAAS,CAAC;IAC1B,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,aAAa,EAAE,CAAC;IACjC,eAAe,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC;IAC7B,iBAAiB,CAAC,EAAE;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;IACF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrE,mBAAmB,CAAC,EAAE;QACpB,MAAM,EAAE,SAAS,CAAC;QAClB,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,EAAE,CAAC;KACtB,CAAC;CACH;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,MAAM,EAAE,UAAU,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,OAAO,CAAC;IACtE,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EACJ,SAAS,GACT,YAAY,GACZ,SAAS,GACT,YAAY,GACZ,SAAS,GACT,WAAW,GACX,WAAW,GACX,cAAc,GACd,UAAU,GACV,gBAAgB,GAChB,OAAO,GACP,UAAU,CAAC;CAChB"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Adaptive token budget allocation based on task complexity heuristics.
|
|
3
|
+
*
|
|
4
|
+
* Instead of a fixed maxContextTokens (e.g., 1500), we dynamically predict
|
|
5
|
+
* how much context a task needs by analyzing its description.
|
|
6
|
+
*/
|
|
7
|
+
export type TaskMode = "simple" | "complex";
|
|
8
|
+
export interface BudgetEstimate {
|
|
9
|
+
tokens: number;
|
|
10
|
+
rationale: string;
|
|
11
|
+
mode: TaskMode;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Estimates required context tokens for a given task. Returns a budget
|
|
15
|
+
* recommendation based on heuristic signals (refactor, multi-file, etc.).
|
|
16
|
+
*/
|
|
17
|
+
export declare function estimateContextBudget(task: string, mode: TaskMode): BudgetEstimate;
|
|
18
|
+
//# sourceMappingURL=adaptive-budget.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adaptive-budget.d.ts","sourceRoot":"","sources":["../../src/graph/adaptive-budget.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE5C,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,QAAQ,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,cAAc,CA4ClF"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Adaptive token budget allocation based on task complexity heuristics.
|
|
4
|
+
*
|
|
5
|
+
* Instead of a fixed maxContextTokens (e.g., 1500), we dynamically predict
|
|
6
|
+
* how much context a task needs by analyzing its description.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.estimateContextBudget = estimateContextBudget;
|
|
10
|
+
/**
|
|
11
|
+
* Estimates required context tokens for a given task. Returns a budget
|
|
12
|
+
* recommendation based on heuristic signals (refactor, multi-file, etc.).
|
|
13
|
+
*/
|
|
14
|
+
function estimateContextBudget(task, mode) {
|
|
15
|
+
let base = mode === "simple" ? 800 : 1500;
|
|
16
|
+
const signals = [];
|
|
17
|
+
// Signal 1: Refactoring / migration tasks need more context.
|
|
18
|
+
if (/refactor|migrate|rewrite|reorganize/i.test(task)) {
|
|
19
|
+
base *= 1.5;
|
|
20
|
+
signals.push("refactor (+50%)");
|
|
21
|
+
}
|
|
22
|
+
// Signal 2: Multi-file coordination ("and", commas, semicolons).
|
|
23
|
+
const splitCount = (task.match(/\band\b|,|;/gi) || []).length;
|
|
24
|
+
if (splitCount > 2) {
|
|
25
|
+
base *= 1.2;
|
|
26
|
+
signals.push(`multi-part (${splitCount} splits, +20%)`);
|
|
27
|
+
}
|
|
28
|
+
// Signal 3: Architecture / design tasks need broader context.
|
|
29
|
+
if (/architect|design|structure|module|component/i.test(task)) {
|
|
30
|
+
base *= 1.3;
|
|
31
|
+
signals.push("architecture (+30%)");
|
|
32
|
+
}
|
|
33
|
+
// Signal 4: Bug fix / localized changes need less context.
|
|
34
|
+
if (/fix\s+bug|patch|hotfix|typo/i.test(task)) {
|
|
35
|
+
base *= 0.7;
|
|
36
|
+
signals.push("localized fix (-30%)");
|
|
37
|
+
}
|
|
38
|
+
// Signal 5: Adding tests usually needs implementation + existing test patterns.
|
|
39
|
+
if (/add\s+test|write\s+test|test\s+coverage/i.test(task)) {
|
|
40
|
+
base *= 1.15;
|
|
41
|
+
signals.push("test addition (+15%)");
|
|
42
|
+
}
|
|
43
|
+
// Cap at reasonable limits.
|
|
44
|
+
const tokens = Math.max(400, Math.min(Math.round(base), 4000));
|
|
45
|
+
const rationale = signals.length > 0
|
|
46
|
+
? `Base ${mode === "simple" ? 800 : 1500} → ${signals.join(", ")} → ${tokens}`
|
|
47
|
+
: `Default ${tokens} for ${mode} task`;
|
|
48
|
+
return { tokens, rationale, mode };
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=adaptive-budget.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adaptive-budget.js","sourceRoot":"","sources":["../../src/graph/adaptive-budget.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAcH,sDA4CC;AAhDD;;;GAGG;AACH,SAAgB,qBAAqB,CAAC,IAAY,EAAE,IAAc;IAChE,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1C,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,6DAA6D;IAC7D,IAAI,sCAAsC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACtD,IAAI,IAAI,GAAG,CAAC;QACZ,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAClC,CAAC;IAED,iEAAiE;IACjE,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;IAC9D,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;QACnB,IAAI,IAAI,GAAG,CAAC;QACZ,OAAO,CAAC,IAAI,CAAC,eAAe,UAAU,gBAAgB,CAAC,CAAC;IAC1D,CAAC;IAED,8DAA8D;IAC9D,IAAI,8CAA8C,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9D,IAAI,IAAI,GAAG,CAAC;QACZ,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IACtC,CAAC;IAED,2DAA2D;IAC3D,IAAI,8BAA8B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9C,IAAI,IAAI,GAAG,CAAC;QACZ,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IACvC,CAAC;IAED,gFAAgF;IAChF,IAAI,0CAA0C,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1D,IAAI,IAAI,IAAI,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IACvC,CAAC;IAED,4BAA4B;IAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IAE/D,MAAM,SAAS,GACb,OAAO,CAAC,MAAM,GAAG,CAAC;QAChB,CAAC,CAAC,QAAQ,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,MAAM,EAAE;QAC9E,CAAC,CAAC,WAAW,MAAM,QAAQ,IAAI,OAAO,CAAC;IAE3C,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AACrC,CAAC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import type { GraphEdge, GraphNode } from "../core/types";
|
|
2
|
+
import type { GraphClient } from "./client-factory";
|
|
3
|
+
import type { GraphFlowConfig } from "../config/schema";
|
|
4
|
+
export interface GraphArtifact {
|
|
5
|
+
version: number;
|
|
6
|
+
createdAt: string;
|
|
7
|
+
workspaceRoot: string;
|
|
8
|
+
nodeCount: number;
|
|
9
|
+
edgeCount: number;
|
|
10
|
+
sha256: string;
|
|
11
|
+
nodes: GraphNode[];
|
|
12
|
+
edges: GraphEdge[];
|
|
13
|
+
}
|
|
14
|
+
export interface ExportResult {
|
|
15
|
+
path: string;
|
|
16
|
+
nodeCount: number;
|
|
17
|
+
edgeCount: number;
|
|
18
|
+
bytes: number;
|
|
19
|
+
uncompressedBytes: number;
|
|
20
|
+
sha256: string;
|
|
21
|
+
compression: "none" | "gzip";
|
|
22
|
+
}
|
|
23
|
+
export interface ImportResult {
|
|
24
|
+
path: string;
|
|
25
|
+
nodeCount: number;
|
|
26
|
+
edgeCount: number;
|
|
27
|
+
imported: boolean;
|
|
28
|
+
skipped: boolean;
|
|
29
|
+
reason?: string;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Export the current graph store to a portable artifact file.
|
|
33
|
+
*
|
|
34
|
+
* The artifact is a gzip-compressed JSON file (analogous to codebase-memory-mcp's
|
|
35
|
+
* graph.db.zst). This allows teammates to skip the initial full workspace index
|
|
36
|
+
* by importing the artifact instead.
|
|
37
|
+
*
|
|
38
|
+
* @param config GraphFlow config
|
|
39
|
+
* @param outputPath Optional output path (defaults to graphflow-out/graphflow-graph.artifact.gz)
|
|
40
|
+
* @param client Optional graph client (if not provided, reads from store file)
|
|
41
|
+
* @param options Optional export options (compression: "gzip" | "none")
|
|
42
|
+
*/
|
|
43
|
+
export declare function exportGraphArtifact(config: GraphFlowConfig, outputPath?: string, client?: GraphClient, options?: {
|
|
44
|
+
compression?: "gzip" | "none";
|
|
45
|
+
}): ExportResult;
|
|
46
|
+
/**
|
|
47
|
+
* Import a graph artifact file into the current graph store.
|
|
48
|
+
*
|
|
49
|
+
* Teammates can run this after cloning a repo to skip the initial full
|
|
50
|
+
* workspace index. The artifact is merged into the existing store (upsert).
|
|
51
|
+
* Supports both gzip-compressed (.gz) and plain JSON (.json) artifacts.
|
|
52
|
+
*
|
|
53
|
+
* @param config GraphFlow config
|
|
54
|
+
* @param client Graph client for writing
|
|
55
|
+
* @param inputPath Optional input path (defaults to graphflow-out/graphflow-graph.artifact.gz)
|
|
56
|
+
*/
|
|
57
|
+
export declare function importGraphArtifact(config: GraphFlowConfig, client: GraphClient, inputPath?: string): Promise<ImportResult>;
|
|
58
|
+
/**
|
|
59
|
+
* Generate a .gitattributes file that marks the graph artifact as merge=ours.
|
|
60
|
+
*
|
|
61
|
+
* This prevents merge conflicts when multiple team members push updated
|
|
62
|
+
* graph artifacts — git will always keep the local version during merges.
|
|
63
|
+
*
|
|
64
|
+
* @param workspaceRoot Workspace root path
|
|
65
|
+
* @param artifactRelativePath Relative path to the artifact (e.g. "graphflow-out/graphflow-graph.artifact.gz")
|
|
66
|
+
*/
|
|
67
|
+
export declare function ensureGitAttributesForArtifact(workspaceRoot: string, artifactRelativePath?: string): {
|
|
68
|
+
path: string;
|
|
69
|
+
created: boolean;
|
|
70
|
+
content: string;
|
|
71
|
+
};
|
|
72
|
+
//# sourceMappingURL=artifact-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifact-manager.d.ts","sourceRoot":"","sources":["../../src/graph/artifact-manager.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAqBxD,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,KAAK,EAAE,SAAS,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB,EAAE,MAAM,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAQD;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,eAAe,EACvB,UAAU,CAAC,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,WAAW,EACpB,OAAO,CAAC,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,GAC1C,YAAY,CAmEd;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,WAAW,EACnB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,YAAY,CAAC,CAqFvB;AAED;;;;;;;;GAQG;AACH,wBAAgB,8BAA8B,CAC5C,aAAa,EAAE,MAAM,EACrB,oBAAoB,SAA8C,GACjE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CA6BrD"}
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.exportGraphArtifact = exportGraphArtifact;
|
|
4
|
+
exports.importGraphArtifact = importGraphArtifact;
|
|
5
|
+
exports.ensureGitAttributesForArtifact = ensureGitAttributesForArtifact;
|
|
6
|
+
const node_fs_1 = require("node:fs");
|
|
7
|
+
const node_zlib_1 = require("node:zlib");
|
|
8
|
+
const node_path_1 = require("node:path");
|
|
9
|
+
const node_crypto_1 = require("node:crypto");
|
|
10
|
+
const helpers_1 = require("../surfaces/cli/runtime/helpers");
|
|
11
|
+
const logger_1 = require("../utils/logger");
|
|
12
|
+
/**
|
|
13
|
+
* Team artifact sharing — borrowed from codebase-memory-mcp's graph.db.zst pattern.
|
|
14
|
+
*
|
|
15
|
+
* Exports the graph store as a compressed JSON artifact that can be committed
|
|
16
|
+
* to git and shared with teammates. Teammates import the artifact on first run
|
|
17
|
+
* to avoid a full workspace re-index.
|
|
18
|
+
*
|
|
19
|
+
* The .gitattributes file should mark the artifact as `merge=ours` to avoid
|
|
20
|
+
* binary merge conflicts when multiple team members push updated artifacts.
|
|
21
|
+
*
|
|
22
|
+
* Compression: uses gzip (Node.js built-in zlib) to produce a binary artifact
|
|
23
|
+
* (.artifact.gz) analogous to codebase-memory-mcp's graph.db.zst. This keeps
|
|
24
|
+
* the artifact small enough to commit without bloating the git history.
|
|
25
|
+
*/
|
|
26
|
+
const ARTIFACT_VERSION = 2;
|
|
27
|
+
const GZIP_MAGIC = Buffer.from([0x1f, 0x8b]);
|
|
28
|
+
function isGzipBuffer(buf) {
|
|
29
|
+
return buf.length >= 2 && buf[0] === GZIP_MAGIC[0] && buf[1] === GZIP_MAGIC[1];
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Export the current graph store to a portable artifact file.
|
|
33
|
+
*
|
|
34
|
+
* The artifact is a gzip-compressed JSON file (analogous to codebase-memory-mcp's
|
|
35
|
+
* graph.db.zst). This allows teammates to skip the initial full workspace index
|
|
36
|
+
* by importing the artifact instead.
|
|
37
|
+
*
|
|
38
|
+
* @param config GraphFlow config
|
|
39
|
+
* @param outputPath Optional output path (defaults to graphflow-out/graphflow-graph.artifact.gz)
|
|
40
|
+
* @param client Optional graph client (if not provided, reads from store file)
|
|
41
|
+
* @param options Optional export options (compression: "gzip" | "none")
|
|
42
|
+
*/
|
|
43
|
+
function exportGraphArtifact(config, outputPath, client, options) {
|
|
44
|
+
const store = client?.readSnapshot
|
|
45
|
+
? client.readSnapshot()
|
|
46
|
+
: (0, helpers_1.loadGraphStore)(config);
|
|
47
|
+
if (store.nodes.length === 0) {
|
|
48
|
+
throw new Error("Graph store is empty. Run `graphflow graph index` before exporting.");
|
|
49
|
+
}
|
|
50
|
+
const root = config.graphPolicy.workspaceRoot ?? process.cwd();
|
|
51
|
+
const compression = options?.compression ?? "gzip";
|
|
52
|
+
const defaultExt = compression === "gzip" ? "graphflow-graph.artifact.gz" : "graphflow-graph.artifact.json";
|
|
53
|
+
const targetPath = outputPath
|
|
54
|
+
? (outputPath.startsWith("/") || /^[A-Za-z]:/.test(outputPath)
|
|
55
|
+
? outputPath
|
|
56
|
+
: (0, node_path_1.join)(root, outputPath))
|
|
57
|
+
: (0, node_path_1.join)(root, "graphflow-out", defaultExt);
|
|
58
|
+
(0, node_fs_1.mkdirSync)((0, node_path_1.dirname)(targetPath), { recursive: true });
|
|
59
|
+
const artifact = {
|
|
60
|
+
version: ARTIFACT_VERSION,
|
|
61
|
+
createdAt: new Date().toISOString(),
|
|
62
|
+
workspaceRoot: root,
|
|
63
|
+
nodeCount: store.nodes.length,
|
|
64
|
+
edgeCount: store.edges.length,
|
|
65
|
+
sha256: "",
|
|
66
|
+
nodes: store.nodes,
|
|
67
|
+
edges: store.edges,
|
|
68
|
+
};
|
|
69
|
+
// Compute checksum over nodes+edges (excluding the checksum field itself)
|
|
70
|
+
const contentForHash = JSON.stringify({
|
|
71
|
+
version: artifact.version,
|
|
72
|
+
nodes: artifact.nodes,
|
|
73
|
+
edges: artifact.edges,
|
|
74
|
+
});
|
|
75
|
+
artifact.sha256 = (0, node_crypto_1.createHash)("sha256").update(contentForHash).digest("hex");
|
|
76
|
+
const json = JSON.stringify(artifact, null, 0);
|
|
77
|
+
const uncompressedBytes = Buffer.byteLength(json, "utf8");
|
|
78
|
+
if (compression === "gzip") {
|
|
79
|
+
const compressed = (0, node_zlib_1.gzipSync)(Buffer.from(json, "utf8"));
|
|
80
|
+
(0, node_fs_1.writeFileSync)(targetPath, compressed);
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
(0, node_fs_1.writeFileSync)(targetPath, json, "utf8");
|
|
84
|
+
}
|
|
85
|
+
const bytes = (0, node_fs_1.statSync)(targetPath).size;
|
|
86
|
+
const ratio = uncompressedBytes > 0 ? (bytes / uncompressedBytes).toFixed(3) : "0";
|
|
87
|
+
logger_1.logger.info({ path: targetPath, nodes: store.nodes.length, edges: store.edges.length, bytes, uncompressedBytes, ratio, compression }, "Graph artifact exported");
|
|
88
|
+
return {
|
|
89
|
+
path: targetPath,
|
|
90
|
+
nodeCount: store.nodes.length,
|
|
91
|
+
edgeCount: store.edges.length,
|
|
92
|
+
bytes,
|
|
93
|
+
uncompressedBytes,
|
|
94
|
+
sha256: artifact.sha256,
|
|
95
|
+
compression,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Import a graph artifact file into the current graph store.
|
|
100
|
+
*
|
|
101
|
+
* Teammates can run this after cloning a repo to skip the initial full
|
|
102
|
+
* workspace index. The artifact is merged into the existing store (upsert).
|
|
103
|
+
* Supports both gzip-compressed (.gz) and plain JSON (.json) artifacts.
|
|
104
|
+
*
|
|
105
|
+
* @param config GraphFlow config
|
|
106
|
+
* @param client Graph client for writing
|
|
107
|
+
* @param inputPath Optional input path (defaults to graphflow-out/graphflow-graph.artifact.gz)
|
|
108
|
+
*/
|
|
109
|
+
async function importGraphArtifact(config, client, inputPath) {
|
|
110
|
+
const root = config.graphPolicy.workspaceRoot ?? process.cwd();
|
|
111
|
+
const sourcePath = inputPath
|
|
112
|
+
? (inputPath.startsWith("/") || /^[A-Za-z]:/.test(inputPath)
|
|
113
|
+
? inputPath
|
|
114
|
+
: (0, node_path_1.join)(root, inputPath))
|
|
115
|
+
: (0, node_path_1.join)(root, "graphflow-out", "graphflow-graph.artifact.gz");
|
|
116
|
+
if (!(0, node_fs_1.existsSync)(sourcePath)) {
|
|
117
|
+
// Fallback: try .json extension if .gz not found
|
|
118
|
+
const jsonFallback = sourcePath.replace(/\.gz$/, ".json");
|
|
119
|
+
if (jsonFallback !== sourcePath && (0, node_fs_1.existsSync)(jsonFallback)) {
|
|
120
|
+
return importGraphArtifact(config, client, jsonFallback);
|
|
121
|
+
}
|
|
122
|
+
return {
|
|
123
|
+
path: sourcePath,
|
|
124
|
+
nodeCount: 0,
|
|
125
|
+
edgeCount: 0,
|
|
126
|
+
imported: false,
|
|
127
|
+
skipped: true,
|
|
128
|
+
reason: "Artifact file not found",
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
const raw = (0, node_fs_1.readFileSync)(sourcePath);
|
|
132
|
+
let jsonText;
|
|
133
|
+
// Auto-detect gzip vs plain JSON
|
|
134
|
+
if (isGzipBuffer(raw)) {
|
|
135
|
+
try {
|
|
136
|
+
jsonText = (0, node_zlib_1.gunzipSync)(raw).toString("utf8");
|
|
137
|
+
}
|
|
138
|
+
catch {
|
|
139
|
+
throw new Error(`Failed to decompress gzip artifact: ${sourcePath}`);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
jsonText = raw.toString("utf8");
|
|
144
|
+
}
|
|
145
|
+
let artifact;
|
|
146
|
+
try {
|
|
147
|
+
artifact = JSON.parse(jsonText);
|
|
148
|
+
}
|
|
149
|
+
catch {
|
|
150
|
+
throw new Error(`Failed to parse artifact file: ${sourcePath}`);
|
|
151
|
+
}
|
|
152
|
+
if (artifact.version !== ARTIFACT_VERSION) {
|
|
153
|
+
logger_1.logger.warn({ expected: ARTIFACT_VERSION, got: artifact.version }, "Artifact version mismatch — attempting import anyway");
|
|
154
|
+
}
|
|
155
|
+
// Verify checksum
|
|
156
|
+
const contentForHash = JSON.stringify({
|
|
157
|
+
version: artifact.version,
|
|
158
|
+
nodes: artifact.nodes,
|
|
159
|
+
edges: artifact.edges,
|
|
160
|
+
});
|
|
161
|
+
const computedHash = (0, node_crypto_1.createHash)("sha256").update(contentForHash).digest("hex");
|
|
162
|
+
if (artifact.sha256 && computedHash !== artifact.sha256) {
|
|
163
|
+
throw new Error(`Artifact checksum mismatch — file may be corrupted. Expected ${artifact.sha256}, got ${computedHash}`);
|
|
164
|
+
}
|
|
165
|
+
// Upsert nodes and edges into the graph store
|
|
166
|
+
if (client.upsertNodes) {
|
|
167
|
+
await client.upsertNodes(artifact.nodes);
|
|
168
|
+
}
|
|
169
|
+
if (client.upsertEdges) {
|
|
170
|
+
await client.upsertEdges(artifact.edges);
|
|
171
|
+
}
|
|
172
|
+
logger_1.logger.info({ path: sourcePath, nodes: artifact.nodes.length, edges: artifact.edges.length }, "Graph artifact imported");
|
|
173
|
+
return {
|
|
174
|
+
path: sourcePath,
|
|
175
|
+
nodeCount: artifact.nodes.length,
|
|
176
|
+
edgeCount: artifact.edges.length,
|
|
177
|
+
imported: true,
|
|
178
|
+
skipped: false,
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Generate a .gitattributes file that marks the graph artifact as merge=ours.
|
|
183
|
+
*
|
|
184
|
+
* This prevents merge conflicts when multiple team members push updated
|
|
185
|
+
* graph artifacts — git will always keep the local version during merges.
|
|
186
|
+
*
|
|
187
|
+
* @param workspaceRoot Workspace root path
|
|
188
|
+
* @param artifactRelativePath Relative path to the artifact (e.g. "graphflow-out/graphflow-graph.artifact.gz")
|
|
189
|
+
*/
|
|
190
|
+
function ensureGitAttributesForArtifact(workspaceRoot, artifactRelativePath = "graphflow-out/graphflow-graph.artifact.gz") {
|
|
191
|
+
const gitattributesPath = (0, node_path_1.join)(workspaceRoot, ".gitattributes");
|
|
192
|
+
const entry = `${artifactRelativePath} merge=ours`;
|
|
193
|
+
let existingContent = "";
|
|
194
|
+
if ((0, node_fs_1.existsSync)(gitattributesPath)) {
|
|
195
|
+
existingContent = (0, node_fs_1.readFileSync)(gitattributesPath, "utf8");
|
|
196
|
+
if (existingContent.includes(artifactRelativePath)) {
|
|
197
|
+
return {
|
|
198
|
+
path: gitattributesPath,
|
|
199
|
+
created: false,
|
|
200
|
+
content: existingContent,
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
const newContent = existingContent
|
|
205
|
+
? `${existingContent.trimEnd()}\n${entry}\n`
|
|
206
|
+
: `${entry}\n`;
|
|
207
|
+
(0, node_fs_1.writeFileSync)(gitattributesPath, newContent, "utf8");
|
|
208
|
+
logger_1.logger.info({ path: gitattributesPath, entry }, "Added merge=ours to .gitattributes");
|
|
209
|
+
return {
|
|
210
|
+
path: gitattributesPath,
|
|
211
|
+
created: !existingContent,
|
|
212
|
+
content: newContent,
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
//# sourceMappingURL=artifact-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifact-manager.js","sourceRoot":"","sources":["../../src/graph/artifact-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { GraphFlowConfig } from "../config/schema";
|
|
2
|
+
/**
|
|
3
|
+
* Unified compression-model adapter.
|
|
4
|
+
*
|
|
5
|
+
* Product strategy (hybrid, zero extra config):
|
|
6
|
+
* 1. backend="inherit" (default) → reuse config.tiers.economy
|
|
7
|
+
* - external API configured (openai/anthropic/bailian) → use it
|
|
8
|
+
* - provider=openbmb → use embedded minicpm-1b
|
|
9
|
+
* 2. backend="network" → external API (optionally stronger model)
|
|
10
|
+
* 3. backend="local" → force embedded minicpm-1b
|
|
11
|
+
*
|
|
12
|
+
* The compressor role resolution lives in model-router.ts; this module wraps
|
|
13
|
+
* it with embedded-model auto-download and a single generate() entrypoint.
|
|
14
|
+
*/
|
|
15
|
+
export interface CompressionModelHandle {
|
|
16
|
+
provider: string;
|
|
17
|
+
model: string;
|
|
18
|
+
isEmbedded: boolean;
|
|
19
|
+
/** False when no usable model is reachable (no API key, no embedded file). */
|
|
20
|
+
available: boolean;
|
|
21
|
+
generate(prompt: string, maxTokens?: number): Promise<string>;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Detects provider fallback placeholders like "[openai:gpt-4.1-mini] <prompt>".
|
|
25
|
+
* These are returned by adapters when no real model is reachable; they must
|
|
26
|
+
* never be written into the compressed context.
|
|
27
|
+
*/
|
|
28
|
+
export declare function isPlaceholderResponse(text: string): boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Resolves the compression model based on config, auto-downloading the embedded
|
|
31
|
+
* model if needed. Returns a handle with a unified generate() method.
|
|
32
|
+
*/
|
|
33
|
+
export declare function resolveCompressionModel(config: GraphFlowConfig, configPath?: string): Promise<CompressionModelHandle>;
|
|
34
|
+
/** Default embedded model: MiniCPM-1B Q4_K_M GGUF (~650MB). */
|
|
35
|
+
export declare const DEFAULT_EMBEDDED_MODEL = "minicpm-1b";
|
|
36
|
+
export declare const DEFAULT_EMBEDDED_MODEL_URL = "https://huggingface.co/openbmb/MiniCPM-2B-sft-bf16-llama-format-gguf/resolve/main/ggml-model-Q4_K_M.gguf";
|
|
37
|
+
/**
|
|
38
|
+
* Ensures the embedded compression model is downloaded. Reuses the existing
|
|
39
|
+
* robust downloader (resumable, sha256-verified, file-locked) from the CLI
|
|
40
|
+
* runtime. Returns the resolved model path.
|
|
41
|
+
*/
|
|
42
|
+
export declare function ensureEmbeddedCompressionModel(config: GraphFlowConfig, configPath?: string): Promise<string>;
|
|
43
|
+
/**
|
|
44
|
+
* Reports which compression backend is active, for diagnostics/UI.
|
|
45
|
+
*/
|
|
46
|
+
export declare function describeCompressionBackend(config: GraphFlowConfig, _configPath?: string): {
|
|
47
|
+
backend: string;
|
|
48
|
+
provider: string;
|
|
49
|
+
model: string;
|
|
50
|
+
embedded: boolean;
|
|
51
|
+
};
|
|
52
|
+
//# sourceMappingURL=compression-model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compression-model.d.ts","sourceRoot":"","sources":["../../src/graph/compression-model.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAExD;;;;;;;;;;;;GAYG;AAEH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,OAAO,CAAC;IACpB,8EAA8E;IAC9E,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC/D;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE3D;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,eAAe,EACvB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,sBAAsB,CAAC,CA2DjC;AAUD,+DAA+D;AAC/D,eAAO,MAAM,sBAAsB,eAAe,CAAC;AACnD,eAAO,MAAM,0BAA0B,6GACqE,CAAC;AAE7G;;;;GAIG;AACH,wBAAsB,8BAA8B,CAClD,MAAM,EAAE,eAAe,EACvB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,CAiBjB;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,eAAe,EACvB,WAAW,CAAC,EAAE,MAAM,GACnB;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CASzE"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DEFAULT_EMBEDDED_MODEL_URL = exports.DEFAULT_EMBEDDED_MODEL = void 0;
|
|
4
|
+
exports.isPlaceholderResponse = isPlaceholderResponse;
|
|
5
|
+
exports.resolveCompressionModel = resolveCompressionModel;
|
|
6
|
+
exports.ensureEmbeddedCompressionModel = ensureEmbeddedCompressionModel;
|
|
7
|
+
exports.describeCompressionBackend = describeCompressionBackend;
|
|
8
|
+
const node_fs_1 = require("node:fs");
|
|
9
|
+
const logger_1 = require("../utils/logger");
|
|
10
|
+
const model_router_1 = require("../routing/model-router");
|
|
11
|
+
const provider_executor_1 = require("../routing/provider-executor");
|
|
12
|
+
/**
|
|
13
|
+
* Detects provider fallback placeholders like "[openai:gpt-4.1-mini] <prompt>".
|
|
14
|
+
* These are returned by adapters when no real model is reachable; they must
|
|
15
|
+
* never be written into the compressed context.
|
|
16
|
+
*/
|
|
17
|
+
function isPlaceholderResponse(text) {
|
|
18
|
+
return /^\[(openai|anthropic|bailian|doubao|openbmb):[^\]]+\]/i.test(text.trim());
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Resolves the compression model based on config, auto-downloading the embedded
|
|
22
|
+
* model if needed. Returns a handle with a unified generate() method.
|
|
23
|
+
*/
|
|
24
|
+
async function resolveCompressionModel(config, configPath) {
|
|
25
|
+
const selection = (0, model_router_1.resolveModelForRole)("compressor", configPath);
|
|
26
|
+
const isEmbedded = selection.provider === "openbmb";
|
|
27
|
+
const timeoutMs = config.graphPolicy.compression?.timeoutMs;
|
|
28
|
+
// Probe availability: external providers need an API key, embedded needs a model file.
|
|
29
|
+
let available = true;
|
|
30
|
+
if (isEmbedded) {
|
|
31
|
+
const autoDownload = config.graphPolicy.compression?.autoDownloadEmbedded !== false;
|
|
32
|
+
if (autoDownload) {
|
|
33
|
+
try {
|
|
34
|
+
await ensureEmbeddedCompressionModel(config, configPath);
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
logger_1.logger.warn({ error }, "Embedded model auto-download failed; compression will degrade to graph-only");
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
const modelPath = process.env.GRAPHFLOW_OPENBMB_MODEL_PATH;
|
|
41
|
+
available = Boolean(modelPath && (0, node_fs_1.existsSync)(modelPath));
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
const providerConfig = config.providers[selection.provider];
|
|
45
|
+
const apiKey = providerConfig?.apiKey;
|
|
46
|
+
// Unresolved "${ENV}" placeholders or missing keys mean no reachable model.
|
|
47
|
+
available = Boolean(apiKey && !/^\$\{.*\}$/.test(apiKey.trim()) && apiKey.trim().length > 0);
|
|
48
|
+
}
|
|
49
|
+
if (!available) {
|
|
50
|
+
logger_1.logger.info({ provider: selection.provider, model: selection.model }, "No usable compression model; semantic compression will be skipped (graph-structure compression still active)");
|
|
51
|
+
}
|
|
52
|
+
return {
|
|
53
|
+
provider: selection.provider,
|
|
54
|
+
model: selection.model,
|
|
55
|
+
isEmbedded,
|
|
56
|
+
available,
|
|
57
|
+
async generate(prompt, maxTokens) {
|
|
58
|
+
const previousMax = process.env.GRAPHFLOW_OPENBMB_MAX_TOKENS;
|
|
59
|
+
const previousTimeout = process.env.GRAPHFLOW_PROVIDER_TIMEOUT_MS;
|
|
60
|
+
if (maxTokens !== undefined) {
|
|
61
|
+
process.env.GRAPHFLOW_OPENBMB_MAX_TOKENS = String(maxTokens);
|
|
62
|
+
}
|
|
63
|
+
if (timeoutMs !== undefined) {
|
|
64
|
+
process.env.GRAPHFLOW_PROVIDER_TIMEOUT_MS = String(timeoutMs);
|
|
65
|
+
}
|
|
66
|
+
try {
|
|
67
|
+
const result = await (0, provider_executor_1.executeRolePrompt)("compressor", prompt, selection);
|
|
68
|
+
// Guard: never let a provider placeholder leak into compressed context.
|
|
69
|
+
if (isPlaceholderResponse(result)) {
|
|
70
|
+
throw new Error(`Compression model unavailable (${selection.provider}/${selection.model})`);
|
|
71
|
+
}
|
|
72
|
+
return result;
|
|
73
|
+
}
|
|
74
|
+
finally {
|
|
75
|
+
restoreEnv("GRAPHFLOW_OPENBMB_MAX_TOKENS", previousMax);
|
|
76
|
+
restoreEnv("GRAPHFLOW_PROVIDER_TIMEOUT_MS", previousTimeout);
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
function restoreEnv(key, previous) {
|
|
82
|
+
if (previous === undefined) {
|
|
83
|
+
delete process.env[key];
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
process.env[key] = previous;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
/** Default embedded model: MiniCPM-1B Q4_K_M GGUF (~650MB). */
|
|
90
|
+
exports.DEFAULT_EMBEDDED_MODEL = "minicpm-1b";
|
|
91
|
+
exports.DEFAULT_EMBEDDED_MODEL_URL = "https://huggingface.co/openbmb/MiniCPM-2B-sft-bf16-llama-format-gguf/resolve/main/ggml-model-Q4_K_M.gguf";
|
|
92
|
+
/**
|
|
93
|
+
* Ensures the embedded compression model is downloaded. Reuses the existing
|
|
94
|
+
* robust downloader (resumable, sha256-verified, file-locked) from the CLI
|
|
95
|
+
* runtime. Returns the resolved model path.
|
|
96
|
+
*/
|
|
97
|
+
async function ensureEmbeddedCompressionModel(config, configPath) {
|
|
98
|
+
const { downloadOpenBmbModel } = await import("../surfaces/cli/runtime/graph.js");
|
|
99
|
+
const customPath = config.graphPolicy.compression?.embeddedModelPath;
|
|
100
|
+
// Provide a default URL if user hasn't configured one via env.
|
|
101
|
+
if (!process.env.GRAPHFLOW_MINICPM_MODEL_URL) {
|
|
102
|
+
process.env.GRAPHFLOW_MINICPM_MODEL_URL = exports.DEFAULT_EMBEDDED_MODEL_URL;
|
|
103
|
+
}
|
|
104
|
+
const result = await downloadOpenBmbModel(configPath, {
|
|
105
|
+
model: exports.DEFAULT_EMBEDDED_MODEL,
|
|
106
|
+
...(customPath ? { targetPath: customPath } : {}),
|
|
107
|
+
});
|
|
108
|
+
// Point the embedded runtime at the downloaded model.
|
|
109
|
+
process.env.GRAPHFLOW_OPENBMB_MODEL_PATH = result.targetPath;
|
|
110
|
+
return result.targetPath;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Reports which compression backend is active, for diagnostics/UI.
|
|
114
|
+
*/
|
|
115
|
+
function describeCompressionBackend(config, _configPath) {
|
|
116
|
+
const backend = config.graphPolicy.compression?.backend ?? "inherit";
|
|
117
|
+
const selection = (0, model_router_1.resolveCompressorSelection)(config);
|
|
118
|
+
return {
|
|
119
|
+
backend,
|
|
120
|
+
provider: selection.provider,
|
|
121
|
+
model: selection.model,
|
|
122
|
+
embedded: selection.provider === "openbmb",
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=compression-model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compression-model.js","sourceRoot":"","sources":["../../src/graph/compression-model.ts"],"names":[],"mappings":"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"}
|