@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.
Files changed (181) hide show
  1. package/AGENTS.md +1 -1
  2. package/CHANGELOG.md +54 -1
  3. package/README.md +149 -44
  4. package/dist/agents/insight.d.ts +83 -0
  5. package/dist/agents/insight.d.ts.map +1 -0
  6. package/dist/agents/insight.js +381 -0
  7. package/dist/agents/insight.js.map +1 -0
  8. package/dist/agents/validator.d.ts.map +1 -1
  9. package/dist/agents/validator.js +19 -8
  10. package/dist/agents/validator.js.map +1 -1
  11. package/dist/agents/worker.d.ts.map +1 -1
  12. package/dist/agents/worker.js +3 -2
  13. package/dist/agents/worker.js.map +1 -1
  14. package/dist/config/defaults.js +1 -1
  15. package/dist/config/defaults.js.map +1 -1
  16. package/dist/config/discover-workspace.d.ts +16 -0
  17. package/dist/config/discover-workspace.d.ts.map +1 -0
  18. package/dist/config/discover-workspace.js +112 -0
  19. package/dist/config/discover-workspace.js.map +1 -0
  20. package/dist/config/resolve.d.ts.map +1 -1
  21. package/dist/config/resolve.js +22 -8
  22. package/dist/config/resolve.js.map +1 -1
  23. package/dist/config/scaffold.d.ts.map +1 -1
  24. package/dist/config/scaffold.js +2 -1
  25. package/dist/config/scaffold.js.map +1 -1
  26. package/dist/config/schema.d.ts +31 -0
  27. package/dist/config/schema.d.ts.map +1 -1
  28. package/dist/config/workspace-root.d.ts +24 -0
  29. package/dist/config/workspace-root.d.ts.map +1 -0
  30. package/dist/config/workspace-root.js +59 -0
  31. package/dist/config/workspace-root.js.map +1 -0
  32. package/dist/core/orchestrator.d.ts +7 -0
  33. package/dist/core/orchestrator.d.ts.map +1 -1
  34. package/dist/core/orchestrator.js +54 -3
  35. package/dist/core/orchestrator.js.map +1 -1
  36. package/dist/core/state-machine.d.ts +1 -0
  37. package/dist/core/state-machine.d.ts.map +1 -1
  38. package/dist/core/state-machine.js +20 -0
  39. package/dist/core/state-machine.js.map +1 -1
  40. package/dist/core/types.d.ts +9 -3
  41. package/dist/core/types.d.ts.map +1 -1
  42. package/dist/graph/adaptive-budget.d.ts +18 -0
  43. package/dist/graph/adaptive-budget.d.ts.map +1 -0
  44. package/dist/graph/adaptive-budget.js +50 -0
  45. package/dist/graph/adaptive-budget.js.map +1 -0
  46. package/dist/graph/artifact-manager.d.ts +72 -0
  47. package/dist/graph/artifact-manager.d.ts.map +1 -0
  48. package/dist/graph/artifact-manager.js +215 -0
  49. package/dist/graph/artifact-manager.js.map +1 -0
  50. package/dist/graph/compression-model.d.ts +52 -0
  51. package/dist/graph/compression-model.d.ts.map +1 -0
  52. package/dist/graph/compression-model.js +125 -0
  53. package/dist/graph/compression-model.js.map +1 -0
  54. package/dist/graph/context-slicer.d.ts +32 -0
  55. package/dist/graph/context-slicer.d.ts.map +1 -1
  56. package/dist/graph/context-slicer.js +159 -1
  57. package/dist/graph/context-slicer.js.map +1 -1
  58. package/dist/graph/file-indexer.d.ts +31 -0
  59. package/dist/graph/file-indexer.d.ts.map +1 -1
  60. package/dist/graph/file-indexer.js +332 -3
  61. package/dist/graph/file-indexer.js.map +1 -1
  62. package/dist/graph/graph-compression.d.ts +44 -0
  63. package/dist/graph/graph-compression.d.ts.map +1 -0
  64. package/dist/graph/graph-compression.js +155 -0
  65. package/dist/graph/graph-compression.js.map +1 -0
  66. package/dist/graph/graph-utils.d.ts +4 -1
  67. package/dist/graph/graph-utils.d.ts.map +1 -1
  68. package/dist/graph/graph-utils.js +62 -0
  69. package/dist/graph/graph-utils.js.map +1 -1
  70. package/dist/graph/graphify-file-client.d.ts.map +1 -1
  71. package/dist/graph/graphify-file-client.js +30 -8
  72. package/dist/graph/graphify-file-client.js.map +1 -1
  73. package/dist/graph/language-indexers/c-cpp.d.ts +9 -1
  74. package/dist/graph/language-indexers/c-cpp.d.ts.map +1 -1
  75. package/dist/graph/language-indexers/c-cpp.js +328 -103
  76. package/dist/graph/language-indexers/c-cpp.js.map +1 -1
  77. package/dist/graph/language-indexers/index.d.ts +20 -0
  78. package/dist/graph/language-indexers/index.d.ts.map +1 -1
  79. package/dist/graph/language-indexers/index.js +4 -0
  80. package/dist/graph/language-indexers/index.js.map +1 -1
  81. package/dist/graph/language-indexers/java.d.ts +12 -0
  82. package/dist/graph/language-indexers/java.d.ts.map +1 -0
  83. package/dist/graph/language-indexers/java.js +273 -0
  84. package/dist/graph/language-indexers/java.js.map +1 -0
  85. package/dist/graph/language-indexers/python.d.ts.map +1 -1
  86. package/dist/graph/language-indexers/python.js +47 -4
  87. package/dist/graph/language-indexers/python.js.map +1 -1
  88. package/dist/graph/language-indexers/ruby.d.ts +14 -0
  89. package/dist/graph/language-indexers/ruby.d.ts.map +1 -0
  90. package/dist/graph/language-indexers/ruby.js +245 -0
  91. package/dist/graph/language-indexers/ruby.js.map +1 -0
  92. package/dist/graph/language-indexers/rust.d.ts +10 -1
  93. package/dist/graph/language-indexers/rust.d.ts.map +1 -1
  94. package/dist/graph/language-indexers/rust.js +254 -80
  95. package/dist/graph/language-indexers/rust.js.map +1 -1
  96. package/dist/graph/language-indexers/tree-sitter-loader.d.ts +8 -1
  97. package/dist/graph/language-indexers/tree-sitter-loader.d.ts.map +1 -1
  98. package/dist/graph/language-indexers/tree-sitter-loader.js +64 -13
  99. package/dist/graph/language-indexers/tree-sitter-loader.js.map +1 -1
  100. package/dist/graph/language-indexers/typescript.d.ts.map +1 -1
  101. package/dist/graph/language-indexers/typescript.js +72 -8
  102. package/dist/graph/language-indexers/typescript.js.map +1 -1
  103. package/dist/graph/metrics.d.ts +33 -0
  104. package/dist/graph/metrics.d.ts.map +1 -0
  105. package/dist/graph/metrics.js +117 -0
  106. package/dist/graph/metrics.js.map +1 -0
  107. package/dist/graph/repo-map.d.ts +25 -0
  108. package/dist/graph/repo-map.d.ts.map +1 -0
  109. package/dist/graph/repo-map.js +80 -0
  110. package/dist/graph/repo-map.js.map +1 -0
  111. package/dist/graph/semantic-compression.d.ts +65 -0
  112. package/dist/graph/semantic-compression.d.ts.map +1 -0
  113. package/dist/graph/semantic-compression.js +173 -0
  114. package/dist/graph/semantic-compression.js.map +1 -0
  115. package/dist/graph/token-savings.d.ts +52 -0
  116. package/dist/graph/token-savings.d.ts.map +1 -0
  117. package/dist/graph/token-savings.js +113 -0
  118. package/dist/graph/token-savings.js.map +1 -0
  119. package/dist/index.d.ts +2 -1
  120. package/dist/index.d.ts.map +1 -1
  121. package/dist/index.js +7 -1
  122. package/dist/index.js.map +1 -1
  123. package/dist/integrations/agent-mcp-installer.d.ts +13 -0
  124. package/dist/integrations/agent-mcp-installer.d.ts.map +1 -1
  125. package/dist/integrations/agent-mcp-installer.js +287 -29
  126. package/dist/integrations/agent-mcp-installer.js.map +1 -1
  127. package/dist/learning/episodic-memory.d.ts +8 -1
  128. package/dist/learning/episodic-memory.d.ts.map +1 -1
  129. package/dist/learning/episodic-memory.js +33 -0
  130. package/dist/learning/episodic-memory.js.map +1 -1
  131. package/dist/learning/hnsw-index.d.ts +46 -0
  132. package/dist/learning/hnsw-index.d.ts.map +1 -0
  133. package/dist/learning/hnsw-index.js +138 -0
  134. package/dist/learning/hnsw-index.js.map +1 -0
  135. package/dist/routing/model-router.d.ts +7 -0
  136. package/dist/routing/model-router.d.ts.map +1 -1
  137. package/dist/routing/model-router.js +36 -0
  138. package/dist/routing/model-router.js.map +1 -1
  139. package/dist/skills/index.d.ts +157 -0
  140. package/dist/skills/index.d.ts.map +1 -0
  141. package/dist/skills/index.js +157 -0
  142. package/dist/skills/index.js.map +1 -0
  143. package/dist/surfaces/cli/index.js +119 -0
  144. package/dist/surfaces/cli/index.js.map +1 -1
  145. package/dist/surfaces/cli/output.d.ts.map +1 -1
  146. package/dist/surfaces/cli/output.js +7 -0
  147. package/dist/surfaces/cli/output.js.map +1 -1
  148. package/dist/surfaces/cli/runtime/graph.d.ts +77 -3
  149. package/dist/surfaces/cli/runtime/graph.d.ts.map +1 -1
  150. package/dist/surfaces/cli/runtime/graph.js +170 -10
  151. package/dist/surfaces/cli/runtime/graph.js.map +1 -1
  152. package/dist/surfaces/cli/runtime/panel.d.ts.map +1 -1
  153. package/dist/surfaces/cli/runtime/panel.js +2 -0
  154. package/dist/surfaces/cli/runtime/panel.js.map +1 -1
  155. package/dist/surfaces/cli/runtime/routing.d.ts +24 -1
  156. package/dist/surfaces/cli/runtime/routing.d.ts.map +1 -1
  157. package/dist/surfaces/cli/runtime/routing.js +72 -0
  158. package/dist/surfaces/cli/runtime/routing.js.map +1 -1
  159. package/dist/surfaces/cli/runtime/settings.d.ts.map +1 -1
  160. package/dist/surfaces/cli/runtime/settings.js +4 -1
  161. package/dist/surfaces/cli/runtime/settings.js.map +1 -1
  162. package/dist/surfaces/cli/runtime/types.d.ts +36 -0
  163. package/dist/surfaces/cli/runtime/types.d.ts.map +1 -1
  164. package/dist/surfaces/cli/runtime.d.ts +2 -2
  165. package/dist/surfaces/cli/runtime.d.ts.map +1 -1
  166. package/dist/surfaces/cli/runtime.js +11 -1
  167. package/dist/surfaces/cli/runtime.js.map +1 -1
  168. package/dist/surfaces/mcp/server.d.ts.map +1 -1
  169. package/dist/surfaces/mcp/server.js +145 -4
  170. package/dist/surfaces/mcp/server.js.map +1 -1
  171. package/dist/utils/logger.js +1 -1
  172. package/dist/utils/logger.js.map +1 -1
  173. package/package.json +6 -2
  174. package/scripts/safe-postinstall.cjs +167 -12
  175. package/src/surfaces/trae-skill/graphflow/SKILL.md +535 -0
  176. package/wasm/tree-sitter-c.wasm +0 -0
  177. package/wasm/tree-sitter-go.wasm +0 -0
  178. package/wasm/tree-sitter-java.wasm +0 -0
  179. package/wasm/tree-sitter-python.wasm +0 -0
  180. package/wasm/tree-sitter-ruby.wasm +0 -0
  181. 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":"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"}
1
+ {"version":3,"file":"state-machine.js","sourceRoot":"","sources":["../../src/core/state-machine.ts"],"names":[],"mappings":"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"}
@@ -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
@@ -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;AAE5B,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,WAAW,GAAG,UAAU,GAAG,SAAS,CAAC;AAEpF,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;CACtE;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,CAAC;CACtB"}
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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"}