@roarpeng/graphflow 0.6.5

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 (271) hide show
  1. package/AGENTS.md +58 -0
  2. package/CHANGELOG.md +205 -0
  3. package/CLAUDE.md +39 -0
  4. package/LICENSE +17 -0
  5. package/README.md +434 -0
  6. package/dist/agents/brainstormer.d.ts +5 -0
  7. package/dist/agents/brainstormer.d.ts.map +1 -0
  8. package/dist/agents/brainstormer.js +61 -0
  9. package/dist/agents/brainstormer.js.map +1 -0
  10. package/dist/agents/planner.d.ts +14 -0
  11. package/dist/agents/planner.d.ts.map +1 -0
  12. package/dist/agents/planner.js +166 -0
  13. package/dist/agents/planner.js.map +1 -0
  14. package/dist/agents/validator.d.ts +6 -0
  15. package/dist/agents/validator.d.ts.map +1 -0
  16. package/dist/agents/validator.js +133 -0
  17. package/dist/agents/validator.js.map +1 -0
  18. package/dist/agents/worker.d.ts +18 -0
  19. package/dist/agents/worker.d.ts.map +1 -0
  20. package/dist/agents/worker.js +34 -0
  21. package/dist/agents/worker.js.map +1 -0
  22. package/dist/config/defaults.d.ts +16 -0
  23. package/dist/config/defaults.d.ts.map +1 -0
  24. package/dist/config/defaults.js +85 -0
  25. package/dist/config/defaults.js.map +1 -0
  26. package/dist/config/embedding-factory.d.ts +4 -0
  27. package/dist/config/embedding-factory.d.ts.map +1 -0
  28. package/dist/config/embedding-factory.js +37 -0
  29. package/dist/config/embedding-factory.js.map +1 -0
  30. package/dist/config/loader.d.ts +4 -0
  31. package/dist/config/loader.d.ts.map +1 -0
  32. package/dist/config/loader.js +194 -0
  33. package/dist/config/loader.js.map +1 -0
  34. package/dist/config/merge.d.ts +6 -0
  35. package/dist/config/merge.d.ts.map +1 -0
  36. package/dist/config/merge.js +130 -0
  37. package/dist/config/merge.js.map +1 -0
  38. package/dist/config/paths.d.ts +6 -0
  39. package/dist/config/paths.d.ts.map +1 -0
  40. package/dist/config/paths.js +32 -0
  41. package/dist/config/paths.js.map +1 -0
  42. package/dist/config/resolve.d.ts +4 -0
  43. package/dist/config/resolve.d.ts.map +1 -0
  44. package/dist/config/resolve.js +45 -0
  45. package/dist/config/resolve.js.map +1 -0
  46. package/dist/config/scaffold.d.ts +11 -0
  47. package/dist/config/scaffold.d.ts.map +1 -0
  48. package/dist/config/scaffold.js +42 -0
  49. package/dist/config/scaffold.js.map +1 -0
  50. package/dist/config/schema.d.ts +102 -0
  51. package/dist/config/schema.d.ts.map +1 -0
  52. package/dist/config/schema.js +3 -0
  53. package/dist/config/schema.js.map +1 -0
  54. package/dist/config/secrets.d.ts +9 -0
  55. package/dist/config/secrets.d.ts.map +1 -0
  56. package/dist/config/secrets.js +55 -0
  57. package/dist/config/secrets.js.map +1 -0
  58. package/dist/core/dag-engine.d.ts +14 -0
  59. package/dist/core/dag-engine.d.ts.map +1 -0
  60. package/dist/core/dag-engine.js +97 -0
  61. package/dist/core/dag-engine.js.map +1 -0
  62. package/dist/core/errors.d.ts +15 -0
  63. package/dist/core/errors.d.ts.map +1 -0
  64. package/dist/core/errors.js +29 -0
  65. package/dist/core/errors.js.map +1 -0
  66. package/dist/core/orchestrator.d.ts +31 -0
  67. package/dist/core/orchestrator.d.ts.map +1 -0
  68. package/dist/core/orchestrator.js +321 -0
  69. package/dist/core/orchestrator.js.map +1 -0
  70. package/dist/core/state-machine.d.ts +14 -0
  71. package/dist/core/state-machine.d.ts.map +1 -0
  72. package/dist/core/state-machine.js +77 -0
  73. package/dist/core/state-machine.js.map +1 -0
  74. package/dist/core/triage.d.ts +6 -0
  75. package/dist/core/triage.d.ts.map +1 -0
  76. package/dist/core/triage.js +58 -0
  77. package/dist/core/triage.js.map +1 -0
  78. package/dist/core/types.d.ts +61 -0
  79. package/dist/core/types.d.ts.map +1 -0
  80. package/dist/core/types.js +3 -0
  81. package/dist/core/types.js.map +1 -0
  82. package/dist/graph/client-factory.d.ts +22 -0
  83. package/dist/graph/client-factory.d.ts.map +1 -0
  84. package/dist/graph/client-factory.js +60 -0
  85. package/dist/graph/client-factory.js.map +1 -0
  86. package/dist/graph/context-slicer.d.ts +47 -0
  87. package/dist/graph/context-slicer.d.ts.map +1 -0
  88. package/dist/graph/context-slicer.js +246 -0
  89. package/dist/graph/context-slicer.js.map +1 -0
  90. package/dist/graph/file-indexer.d.ts +15 -0
  91. package/dist/graph/file-indexer.d.ts.map +1 -0
  92. package/dist/graph/file-indexer.js +343 -0
  93. package/dist/graph/file-indexer.js.map +1 -0
  94. package/dist/graph/graph-indexer.d.ts +7 -0
  95. package/dist/graph/graph-indexer.d.ts.map +1 -0
  96. package/dist/graph/graph-indexer.js +32 -0
  97. package/dist/graph/graph-indexer.js.map +1 -0
  98. package/dist/graph/graphify-client.d.ts +30 -0
  99. package/dist/graph/graphify-client.d.ts.map +1 -0
  100. package/dist/graph/graphify-client.js +186 -0
  101. package/dist/graph/graphify-client.js.map +1 -0
  102. package/dist/graph/graphify-file-client.d.ts +26 -0
  103. package/dist/graph/graphify-file-client.d.ts.map +1 -0
  104. package/dist/graph/graphify-file-client.js +140 -0
  105. package/dist/graph/graphify-file-client.js.map +1 -0
  106. package/dist/graph/graphify-mcp-client.d.ts +18 -0
  107. package/dist/graph/graphify-mcp-client.d.ts.map +1 -0
  108. package/dist/graph/graphify-mcp-client.js +73 -0
  109. package/dist/graph/graphify-mcp-client.js.map +1 -0
  110. package/dist/graph/language-indexers/c-cpp.d.ts +3 -0
  111. package/dist/graph/language-indexers/c-cpp.d.ts.map +1 -0
  112. package/dist/graph/language-indexers/c-cpp.js +121 -0
  113. package/dist/graph/language-indexers/c-cpp.js.map +1 -0
  114. package/dist/graph/language-indexers/go.d.ts +3 -0
  115. package/dist/graph/language-indexers/go.d.ts.map +1 -0
  116. package/dist/graph/language-indexers/go.js +97 -0
  117. package/dist/graph/language-indexers/go.js.map +1 -0
  118. package/dist/graph/language-indexers/index.d.ts +29 -0
  119. package/dist/graph/language-indexers/index.d.ts.map +1 -0
  120. package/dist/graph/language-indexers/index.js +27 -0
  121. package/dist/graph/language-indexers/index.js.map +1 -0
  122. package/dist/graph/language-indexers/python.d.ts +3 -0
  123. package/dist/graph/language-indexers/python.d.ts.map +1 -0
  124. package/dist/graph/language-indexers/python.js +91 -0
  125. package/dist/graph/language-indexers/python.js.map +1 -0
  126. package/dist/graph/language-indexers/rust.d.ts +3 -0
  127. package/dist/graph/language-indexers/rust.d.ts.map +1 -0
  128. package/dist/graph/language-indexers/rust.js +99 -0
  129. package/dist/graph/language-indexers/rust.js.map +1 -0
  130. package/dist/graph/language-indexers/tree-sitter-loader.d.ts +18 -0
  131. package/dist/graph/language-indexers/tree-sitter-loader.d.ts.map +1 -0
  132. package/dist/graph/language-indexers/tree-sitter-loader.js +34 -0
  133. package/dist/graph/language-indexers/tree-sitter-loader.js.map +1 -0
  134. package/dist/graph/language-indexers/typescript.d.ts +3 -0
  135. package/dist/graph/language-indexers/typescript.d.ts.map +1 -0
  136. package/dist/graph/language-indexers/typescript.js +194 -0
  137. package/dist/graph/language-indexers/typescript.js.map +1 -0
  138. package/dist/graph/semantic-enricher.d.ts +17 -0
  139. package/dist/graph/semantic-enricher.d.ts.map +1 -0
  140. package/dist/graph/semantic-enricher.js +97 -0
  141. package/dist/graph/semantic-enricher.js.map +1 -0
  142. package/dist/graph/sqlite-client.d.ts +24 -0
  143. package/dist/graph/sqlite-client.d.ts.map +1 -0
  144. package/dist/graph/sqlite-client.js +215 -0
  145. package/dist/graph/sqlite-client.js.map +1 -0
  146. package/dist/hooks/post-run-sync.d.ts +7 -0
  147. package/dist/hooks/post-run-sync.d.ts.map +1 -0
  148. package/dist/hooks/post-run-sync.js +26 -0
  149. package/dist/hooks/post-run-sync.js.map +1 -0
  150. package/dist/index.d.ts +10 -0
  151. package/dist/index.d.ts.map +1 -0
  152. package/dist/index.js +42 -0
  153. package/dist/index.js.map +1 -0
  154. package/dist/integrations/agent-mcp-installer.d.ts +50 -0
  155. package/dist/integrations/agent-mcp-installer.d.ts.map +1 -0
  156. package/dist/integrations/agent-mcp-installer.js +414 -0
  157. package/dist/integrations/agent-mcp-installer.js.map +1 -0
  158. package/dist/learning/canary-gate.d.ts +6 -0
  159. package/dist/learning/canary-gate.d.ts.map +1 -0
  160. package/dist/learning/canary-gate.js +13 -0
  161. package/dist/learning/canary-gate.js.map +1 -0
  162. package/dist/learning/embeddings.d.ts +19 -0
  163. package/dist/learning/embeddings.d.ts.map +1 -0
  164. package/dist/learning/embeddings.js +160 -0
  165. package/dist/learning/embeddings.js.map +1 -0
  166. package/dist/learning/episodic-memory.d.ts +36 -0
  167. package/dist/learning/episodic-memory.d.ts.map +1 -0
  168. package/dist/learning/episodic-memory.js +228 -0
  169. package/dist/learning/episodic-memory.js.map +1 -0
  170. package/dist/learning/exporter.d.ts +10 -0
  171. package/dist/learning/exporter.d.ts.map +1 -0
  172. package/dist/learning/exporter.js +25 -0
  173. package/dist/learning/exporter.js.map +1 -0
  174. package/dist/learning/feedback-collector.d.ts +12 -0
  175. package/dist/learning/feedback-collector.d.ts.map +1 -0
  176. package/dist/learning/feedback-collector.js +14 -0
  177. package/dist/learning/feedback-collector.js.map +1 -0
  178. package/dist/learning/learning-events.d.ts +4 -0
  179. package/dist/learning/learning-events.d.ts.map +1 -0
  180. package/dist/learning/learning-events.js +35 -0
  181. package/dist/learning/learning-events.js.map +1 -0
  182. package/dist/learning/local-embedding.d.ts +3 -0
  183. package/dist/learning/local-embedding.d.ts.map +1 -0
  184. package/dist/learning/local-embedding.js +21 -0
  185. package/dist/learning/local-embedding.js.map +1 -0
  186. package/dist/learning/nightly-trainer.d.ts +14 -0
  187. package/dist/learning/nightly-trainer.d.ts.map +1 -0
  188. package/dist/learning/nightly-trainer.js +56 -0
  189. package/dist/learning/nightly-trainer.js.map +1 -0
  190. package/dist/learning/reflector.d.ts +19 -0
  191. package/dist/learning/reflector.d.ts.map +1 -0
  192. package/dist/learning/reflector.js +130 -0
  193. package/dist/learning/reflector.js.map +1 -0
  194. package/dist/learning/sample-builder.d.ts +7 -0
  195. package/dist/learning/sample-builder.d.ts.map +1 -0
  196. package/dist/learning/sample-builder.js +10 -0
  197. package/dist/learning/sample-builder.js.map +1 -0
  198. package/dist/learning/skill-flywheel.d.ts +52 -0
  199. package/dist/learning/skill-flywheel.d.ts.map +1 -0
  200. package/dist/learning/skill-flywheel.js +533 -0
  201. package/dist/learning/skill-flywheel.js.map +1 -0
  202. package/dist/learning/vector-store.d.ts +18 -0
  203. package/dist/learning/vector-store.d.ts.map +1 -0
  204. package/dist/learning/vector-store.js +73 -0
  205. package/dist/learning/vector-store.js.map +1 -0
  206. package/dist/routing/model-router.d.ts +13 -0
  207. package/dist/routing/model-router.d.ts.map +1 -0
  208. package/dist/routing/model-router.js +113 -0
  209. package/dist/routing/model-router.js.map +1 -0
  210. package/dist/routing/provider-adapters/anthropic.d.ts +3 -0
  211. package/dist/routing/provider-adapters/anthropic.d.ts.map +1 -0
  212. package/dist/routing/provider-adapters/anthropic.js +57 -0
  213. package/dist/routing/provider-adapters/anthropic.js.map +1 -0
  214. package/dist/routing/provider-adapters/bailian.d.ts +3 -0
  215. package/dist/routing/provider-adapters/bailian.d.ts.map +1 -0
  216. package/dist/routing/provider-adapters/bailian.js +56 -0
  217. package/dist/routing/provider-adapters/bailian.js.map +1 -0
  218. package/dist/routing/provider-adapters/doubao.d.ts +3 -0
  219. package/dist/routing/provider-adapters/doubao.d.ts.map +1 -0
  220. package/dist/routing/provider-adapters/doubao.js +56 -0
  221. package/dist/routing/provider-adapters/doubao.js.map +1 -0
  222. package/dist/routing/provider-adapters/openai.d.ts +6 -0
  223. package/dist/routing/provider-adapters/openai.d.ts.map +1 -0
  224. package/dist/routing/provider-adapters/openai.js +80 -0
  225. package/dist/routing/provider-adapters/openai.js.map +1 -0
  226. package/dist/routing/provider-adapters/openbmb.d.ts +16 -0
  227. package/dist/routing/provider-adapters/openbmb.d.ts.map +1 -0
  228. package/dist/routing/provider-adapters/openbmb.js +368 -0
  229. package/dist/routing/provider-adapters/openbmb.js.map +1 -0
  230. package/dist/routing/provider-executor.d.ts +21 -0
  231. package/dist/routing/provider-executor.d.ts.map +1 -0
  232. package/dist/routing/provider-executor.js +260 -0
  233. package/dist/routing/provider-executor.js.map +1 -0
  234. package/dist/routing/provider-health.d.ts +9 -0
  235. package/dist/routing/provider-health.d.ts.map +1 -0
  236. package/dist/routing/provider-health.js +66 -0
  237. package/dist/routing/provider-health.js.map +1 -0
  238. package/dist/surfaces/cli/index.d.ts +3 -0
  239. package/dist/surfaces/cli/index.d.ts.map +1 -0
  240. package/dist/surfaces/cli/index.js +200 -0
  241. package/dist/surfaces/cli/index.js.map +1 -0
  242. package/dist/surfaces/cli/init.d.ts +2 -0
  243. package/dist/surfaces/cli/init.d.ts.map +1 -0
  244. package/dist/surfaces/cli/init.js +121 -0
  245. package/dist/surfaces/cli/init.js.map +1 -0
  246. package/dist/surfaces/cli/output.d.ts +16 -0
  247. package/dist/surfaces/cli/output.d.ts.map +1 -0
  248. package/dist/surfaces/cli/output.js +74 -0
  249. package/dist/surfaces/cli/output.js.map +1 -0
  250. package/dist/surfaces/cli/runtime.d.ts +218 -0
  251. package/dist/surfaces/cli/runtime.d.ts.map +1 -0
  252. package/dist/surfaces/cli/runtime.js +1130 -0
  253. package/dist/surfaces/cli/runtime.js.map +1 -0
  254. package/dist/surfaces/mcp/server.d.ts +60 -0
  255. package/dist/surfaces/mcp/server.d.ts.map +1 -0
  256. package/dist/surfaces/mcp/server.js +425 -0
  257. package/dist/surfaces/mcp/server.js.map +1 -0
  258. package/dist/surfaces/vscode/extension.d.ts +17 -0
  259. package/dist/surfaces/vscode/extension.d.ts.map +1 -0
  260. package/dist/surfaces/vscode/extension.js +35 -0
  261. package/dist/surfaces/vscode/extension.js.map +1 -0
  262. package/dist/utils/file-lock.d.ts +9 -0
  263. package/dist/utils/file-lock.d.ts.map +1 -0
  264. package/dist/utils/file-lock.js +90 -0
  265. package/dist/utils/file-lock.js.map +1 -0
  266. package/dist/utils/logger.d.ts +3 -0
  267. package/dist/utils/logger.d.ts.map +1 -0
  268. package/dist/utils/logger.js +36 -0
  269. package/dist/utils/logger.js.map +1 -0
  270. package/package.json +89 -0
  271. package/scripts/safe-postinstall.cjs +14 -0
@@ -0,0 +1,533 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.extractSkillAtoms = extractSkillAtoms;
4
+ exports.applySkillLearning = applySkillLearning;
5
+ exports.suggestSkillHints = suggestSkillHints;
6
+ exports.composeSkillId = composeSkillId;
7
+ exports.loadCompositeSkill = loadCompositeSkill;
8
+ exports.parseEvolutionState = parseEvolutionState;
9
+ exports.loadEvolutionSkill = loadEvolutionSkill;
10
+ exports.evolveCompositeSkillLlm = evolveCompositeSkillLlm;
11
+ exports.updateSkillCanary = updateSkillCanary;
12
+ const logger_1 = require("../utils/logger");
13
+ const provider_executor_1 = require("../routing/provider-executor");
14
+ const DEFAULT_COMPOSITE_MIN_COOCCUR = 2;
15
+ const DEFAULT_COMPOSITE_MIN_SUCCESS = 2;
16
+ function extractSkillAtoms(task) {
17
+ const phrases = task
18
+ .split(/\band\b|,|;/i)
19
+ .map((part) => part.trim().toLowerCase())
20
+ .filter((part) => part.length >= 3)
21
+ .slice(0, 8);
22
+ const tokenSkills = task
23
+ .toLowerCase()
24
+ .split(/\s+/)
25
+ .map((token) => token.replace(/[^a-z0-9_./-]/g, ""))
26
+ .filter((token) => token.length >= 5)
27
+ .slice(0, 8);
28
+ const segmenter = new Intl.Segmenter('zh', { granularity: 'word' });
29
+ const zhWords = Array.from(segmenter.segment(task))
30
+ .filter((seg) => seg.isWordLike && seg.segment.length >= 2 && /[\u4e00-\u9fa5]/.test(seg.segment))
31
+ .map((seg) => seg.segment.toLowerCase())
32
+ .slice(0, 8);
33
+ return dedup([...phrases, ...tokenSkills, ...zhWords]);
34
+ }
35
+ async function applySkillLearning(client, task, run) {
36
+ const skills = extractSkillAtoms(task);
37
+ if (skills.length === 0) {
38
+ return;
39
+ }
40
+ const passed = run.status === "COMPLETED";
41
+ const now = Date.now();
42
+ const nodes = [];
43
+ const edges = [];
44
+ for (const skill of skills) {
45
+ const id = skillNodeId(skill);
46
+ const previous = await readSkillState(client, id);
47
+ const next = {
48
+ id,
49
+ name: skill,
50
+ score: boundedScore((previous?.score ?? 0) + (passed ? 1 : -1)),
51
+ uses: (previous?.uses ?? 0) + 1,
52
+ lastOutcome: passed ? "pass" : "fail",
53
+ updatedAt: now,
54
+ };
55
+ nodes.push({ id, type: "Skill", content: serializeAtomic(next) });
56
+ edges.push({
57
+ from: id,
58
+ to: `decision:task:${hashText(task)}`,
59
+ relation: "improves",
60
+ });
61
+ }
62
+ for (let i = 0; i < skills.length; i += 1) {
63
+ for (let j = i + 1; j < skills.length; j += 1) {
64
+ const a = skills[i];
65
+ const b = skills[j];
66
+ edges.push({
67
+ from: skillNodeId(a),
68
+ to: skillNodeId(b),
69
+ relation: "co_occurs",
70
+ });
71
+ const [n1, n2] = [a, b].sort();
72
+ const compositeId = composeSkillId(n1, n2);
73
+ const previous = await loadCompositeSkill(client, compositeId);
74
+ const composite = {
75
+ id: compositeId,
76
+ name: `${n1}+${n2}`,
77
+ parents: [skillNodeId(n1), skillNodeId(n2)],
78
+ coOccurCount: (previous?.coOccurCount ?? 0) + 1,
79
+ successCount: (previous?.successCount ?? 0) + (passed ? 1 : 0),
80
+ failureCount: (previous?.failureCount ?? 0) + (passed ? 0 : 1),
81
+ score: 0,
82
+ uses: previous?.uses ?? 0,
83
+ lastOutcome: passed ? "pass" : "fail",
84
+ updatedAt: now,
85
+ };
86
+ composite.score = boundedScore(composite.successCount - composite.failureCount);
87
+ nodes.push({ id: compositeId, type: "Skill", content: serializeComposite(composite) });
88
+ if (compositeGateMet(composite)) {
89
+ edges.push({ from: skillNodeId(n1), to: compositeId, relation: "prerequisite" });
90
+ edges.push({ from: skillNodeId(n2), to: compositeId, relation: "prerequisite" });
91
+ // 异步调度 evolveCompositeSkillLlm 进行脑暴合成
92
+ const evolutionNode = await evolveCompositeSkillLlm(client, n1, n2, composite);
93
+ if (evolutionNode) {
94
+ nodes.push(evolutionNode);
95
+ edges.push({ from: skillNodeId(n1), to: evolutionNode.id, relation: "prerequisite" });
96
+ edges.push({ from: skillNodeId(n2), to: evolutionNode.id, relation: "prerequisite" });
97
+ }
98
+ }
99
+ }
100
+ }
101
+ if (passed) {
102
+ const tripleAtomNames = getTripleAtomNames(skills);
103
+ const tripleNode = tripleAtomNames ? buildTripleFusionNode(tripleAtomNames, now) : undefined;
104
+ if (tripleNode && tripleAtomNames) {
105
+ nodes.push(tripleNode);
106
+ for (const atom of tripleAtomNames) {
107
+ edges.push({ from: skillNodeId(atom), to: tripleNode.id, relation: "prerequisite" });
108
+ }
109
+ }
110
+ }
111
+ await client.upsertNodes(nodes);
112
+ await client.upsertEdges(dedupEdges(edges));
113
+ }
114
+ async function suggestSkillHints(client, task, maxHints) {
115
+ const atoms = extractSkillAtoms(task);
116
+ const queries = dedup([task.toLowerCase(), ...atoms]).slice(0, 10);
117
+ const resultSets = await Promise.all(queries.map((query) => client.queryByKeyword(query)));
118
+ const skillNodes = dedupNodes(resultSets.flat().filter((node) => node.type === "Skill"));
119
+ const atomicStates = [];
120
+ const compositeStates = [];
121
+ const evolutionStates = [];
122
+ for (const node of skillNodes) {
123
+ const evolution = parseEvolutionState(node.content);
124
+ if (evolution) {
125
+ evolutionStates.push(evolution);
126
+ continue;
127
+ }
128
+ const composite = parseCompositeState(node.content);
129
+ if (composite) {
130
+ compositeStates.push(composite);
131
+ continue;
132
+ }
133
+ const atomic = parseSkillState(node.content);
134
+ if (atomic) {
135
+ atomicStates.push(atomic);
136
+ }
137
+ }
138
+ const atomSet = new Set(atoms);
139
+ const eligibleComposites = compositeStates.filter((composite) => {
140
+ if (!compositeGateMet(composite) || composite.score <= 0) {
141
+ return false;
142
+ }
143
+ const [n1, n2] = composite.name.split("+");
144
+ return Boolean(n1 && n2 && atomSet.has(n1) && atomSet.has(n2));
145
+ });
146
+ const eligibleEvolutions = evolutionStates.filter((evo) => {
147
+ // 排除已被 demoted 的合成技能
148
+ if (evo.canaryStatus === 'demoted') {
149
+ return false;
150
+ }
151
+ if (evo.score <= 0) {
152
+ return false;
153
+ }
154
+ const [p1, p2] = evo.parents;
155
+ const n1 = p1?.replace(/^skill:/, "");
156
+ const n2 = p2?.replace(/^skill:/, "");
157
+ return Boolean(n1 && n2 && atomSet.has(n1) && atomSet.has(n2));
158
+ });
159
+ const ranked = [
160
+ ...eligibleEvolutions.map((e) => ({
161
+ name: e.name,
162
+ // probation 状态权重降低为 0.5 倍用于排序
163
+ score: e.canaryStatus === 'probation' ? e.score * 0.5 : e.score,
164
+ uses: e.uses,
165
+ isComposite: true,
166
+ state: { kind: "evolution", ...e },
167
+ })),
168
+ ...eligibleComposites.map((c) => ({
169
+ name: c.name,
170
+ score: c.score,
171
+ uses: c.uses,
172
+ isComposite: true,
173
+ state: { kind: "composite", ...c },
174
+ })),
175
+ ...atomicStates.map((a) => ({
176
+ name: a.name,
177
+ score: a.score,
178
+ uses: a.uses,
179
+ isComposite: false,
180
+ })),
181
+ ];
182
+ ranked.sort((a, b) => {
183
+ if (a.isComposite !== b.isComposite) {
184
+ return a.isComposite ? -1 : 1;
185
+ }
186
+ if (b.score !== a.score) {
187
+ return b.score - a.score;
188
+ }
189
+ if (b.uses !== a.uses) {
190
+ return b.uses - a.uses;
191
+ }
192
+ return a.name.localeCompare(b.name);
193
+ });
194
+ const chosen = ranked.slice(0, maxHints);
195
+ const updates = [];
196
+ for (const item of chosen) {
197
+ if (item.isComposite && item.state) {
198
+ if (item.state.kind === "evolution") {
199
+ const updated = {
200
+ id: item.state.id,
201
+ name: item.state.name,
202
+ parents: item.state.parents,
203
+ domain: item.state.domain,
204
+ description: item.state.description,
205
+ score: item.state.score,
206
+ uses: item.state.uses + 1,
207
+ updatedAt: Date.now(),
208
+ canaryUses: item.state.canaryUses ?? 0,
209
+ canaryPasses: item.state.canaryPasses ?? 0,
210
+ canaryStatus: item.state.canaryStatus ?? 'probation',
211
+ };
212
+ updates.push({ id: updated.id, type: "Skill", content: JSON.stringify({ kind: "evolution", ...updated }) });
213
+ }
214
+ else {
215
+ const updated = {
216
+ id: item.state.id,
217
+ name: item.state.name,
218
+ parents: item.state.parents,
219
+ coOccurCount: item.state.coOccurCount,
220
+ successCount: item.state.successCount,
221
+ failureCount: item.state.failureCount,
222
+ score: item.state.score,
223
+ uses: item.state.uses + 1,
224
+ lastOutcome: item.state.lastOutcome,
225
+ updatedAt: Date.now(),
226
+ };
227
+ updates.push({ id: updated.id, type: "Skill", content: serializeComposite(updated) });
228
+ }
229
+ }
230
+ }
231
+ if (updates.length > 0) {
232
+ await client.upsertNodes(updates);
233
+ }
234
+ return chosen.map((item) => item.name);
235
+ }
236
+ function composeSkillId(atomA, atomB) {
237
+ const [first, second] = [atomA, atomB].sort();
238
+ return `skill:composite:${sanitizeAtom(first)}__${sanitizeAtom(second)}`;
239
+ }
240
+ async function loadCompositeSkill(client, id) {
241
+ const hits = await client.queryByKeyword(id);
242
+ const direct = hits.find((node) => node.id === id && node.type === "Skill");
243
+ return direct ? parseCompositeState(direct.content) : undefined;
244
+ }
245
+ function compositeGateMet(composite) {
246
+ const minCoOccur = Number(process.env.GRAPHFLOW_SKILL_EVOLVE_MIN_COOCCUR ?? DEFAULT_COMPOSITE_MIN_COOCCUR);
247
+ const minSuccess = Number(process.env.GRAPHFLOW_SKILL_EVOLVE_MIN_SUCCESS ?? DEFAULT_COMPOSITE_MIN_SUCCESS);
248
+ return (composite.coOccurCount >= (Number.isFinite(minCoOccur) ? minCoOccur : DEFAULT_COMPOSITE_MIN_COOCCUR) &&
249
+ composite.successCount >= (Number.isFinite(minSuccess) ? minSuccess : DEFAULT_COMPOSITE_MIN_SUCCESS) &&
250
+ composite.successCount > composite.failureCount);
251
+ }
252
+ function sanitizeAtom(skill) {
253
+ return skill.replace(/[^a-z0-9]+/g, "-");
254
+ }
255
+ function skillNodeId(skill) {
256
+ return `skill:${sanitizeAtom(skill)}`;
257
+ }
258
+ function serializeAtomic(state) {
259
+ return JSON.stringify({ kind: "atomic", ...state });
260
+ }
261
+ function serializeComposite(state) {
262
+ return JSON.stringify({ kind: "composite", ...state });
263
+ }
264
+ function parseSkillState(content) {
265
+ try {
266
+ const parsed = JSON.parse(content);
267
+ if (!parsed.id || !parsed.name) {
268
+ return undefined;
269
+ }
270
+ if (parsed.kind && parsed.kind !== "atomic") {
271
+ return undefined;
272
+ }
273
+ return {
274
+ id: parsed.id,
275
+ name: parsed.name,
276
+ score: parsed.score ?? 0,
277
+ uses: parsed.uses ?? 0,
278
+ lastOutcome: parsed.lastOutcome === "fail" ? "fail" : "pass",
279
+ updatedAt: parsed.updatedAt ?? 0,
280
+ };
281
+ }
282
+ catch (error) {
283
+ logger_1.logger.error({ error }, "Caught error");
284
+ return undefined;
285
+ }
286
+ }
287
+ function parseCompositeState(content) {
288
+ try {
289
+ const parsed = JSON.parse(content);
290
+ if (parsed.kind !== "composite" || !parsed.id || !parsed.name || !parsed.parents) {
291
+ return undefined;
292
+ }
293
+ const parents = parsed.parents;
294
+ if (!Array.isArray(parents) || parents.length !== 2) {
295
+ return undefined;
296
+ }
297
+ return {
298
+ id: parsed.id,
299
+ name: parsed.name,
300
+ parents: [parents[0], parents[1]],
301
+ coOccurCount: parsed.coOccurCount ?? 0,
302
+ successCount: parsed.successCount ?? 0,
303
+ failureCount: parsed.failureCount ?? 0,
304
+ score: parsed.score ?? 0,
305
+ uses: parsed.uses ?? 0,
306
+ lastOutcome: parsed.lastOutcome === "fail" ? "fail" : "pass",
307
+ updatedAt: parsed.updatedAt ?? 0,
308
+ };
309
+ }
310
+ catch (error) {
311
+ logger_1.logger.error({ error }, "Caught error");
312
+ return undefined;
313
+ }
314
+ }
315
+ async function readSkillState(client, id) {
316
+ const hits = await client.queryByKeyword(id);
317
+ const direct = hits.find((node) => node.id === id && node.type === "Skill");
318
+ return direct ? parseSkillState(direct.content) : undefined;
319
+ }
320
+ function dedup(values) {
321
+ return Array.from(new Set(values));
322
+ }
323
+ function dedupNodes(nodes) {
324
+ const map = new Map();
325
+ for (const node of nodes) {
326
+ map.set(node.id, node);
327
+ }
328
+ return Array.from(map.values());
329
+ }
330
+ function boundedScore(score) {
331
+ if (score > 20) {
332
+ return 20;
333
+ }
334
+ if (score < -20) {
335
+ return -20;
336
+ }
337
+ return score;
338
+ }
339
+ function hashText(text) {
340
+ let hash = 0;
341
+ for (let i = 0; i < text.length; i += 1) {
342
+ hash = (hash * 33 + text.charCodeAt(i)) >>> 0;
343
+ }
344
+ return hash.toString(16);
345
+ }
346
+ function dedupEdges(edges) {
347
+ const seen = new Set();
348
+ const result = [];
349
+ for (const edge of edges) {
350
+ const key = `${edge.from}|${edge.relation}|${edge.to}`;
351
+ if (!seen.has(key)) {
352
+ seen.add(key);
353
+ result.push(edge);
354
+ }
355
+ }
356
+ return result;
357
+ }
358
+ function parseEvolutionState(content) {
359
+ try {
360
+ const parsed = JSON.parse(content);
361
+ if (parsed.kind !== "evolution" || !parsed.id || !parsed.name || !parsed.parents) {
362
+ return undefined;
363
+ }
364
+ const parents = parsed.parents;
365
+ if (!Array.isArray(parents) || parents.length !== 2) {
366
+ return undefined;
367
+ }
368
+ return {
369
+ id: parsed.id,
370
+ name: parsed.name,
371
+ parents: [parents[0], parents[1]],
372
+ domain: parsed.domain || "",
373
+ description: parsed.description || "",
374
+ score: parsed.score ?? 0,
375
+ uses: parsed.uses ?? 0,
376
+ updatedAt: parsed.updatedAt ?? 0,
377
+ canaryUses: parsed.canaryUses ?? 0,
378
+ canaryPasses: parsed.canaryPasses ?? 0,
379
+ canaryStatus: parsed.canaryStatus ?? 'probation',
380
+ };
381
+ }
382
+ catch (error) {
383
+ logger_1.logger.error({ error }, "Caught error");
384
+ return undefined;
385
+ }
386
+ }
387
+ async function loadEvolutionSkill(client, id) {
388
+ const hits = await client.queryByKeyword(id);
389
+ const direct = hits.find((node) => node.id === id && node.type === "Skill");
390
+ return direct ? parseEvolutionState(direct.content) : undefined;
391
+ }
392
+ /**
393
+ * 调遣 MiniCPM-1B 模拟人类进行跨技能融会贯通与概念演进
394
+ */
395
+ async function evolveCompositeSkillLlm(client, n1, n2, previousComposite) {
396
+ const openbmbModel = process.env.GRAPHFLOW_SKILL_EVOLVE_MODEL ?? "minicpm5-1b";
397
+ const prompt = [
398
+ `你是一个卓越的代码认知科学家,正模拟人类大脑的技能成长。`,
399
+ `你已完全精通以下两项基础“原子技能”:`,
400
+ `1. 技能 A: ${n1}`,
401
+ `2. 技能 B: ${n2}`,
402
+ ``,
403
+ `请联想推演:人类在综合 A 和 B 后,能够融会贯通衍生出解决 C 领域什么问题的“复合高阶技能”?`,
404
+ `请严格返回 JSON 格式:{"compositeSkillName": "复合技能名", "domainC": "C领域名", "methodologyDescription": "一句话核心方法论"}`,
405
+ `不要有任何标点、引言 or markdown 包裹。直接输出合法 JSON:`
406
+ ].join("\n");
407
+ try {
408
+ const selection = {
409
+ provider: "openbmb",
410
+ model: openbmbModel,
411
+ tier: "economy",
412
+ fallbackApplied: false
413
+ };
414
+ const rawJson = await (0, provider_executor_1.executeRolePrompt)("evolver", prompt, selection);
415
+ const cleaned = cleanJsonString(rawJson, n1, n2);
416
+ const parsed = JSON.parse(cleaned);
417
+ if (!parsed.compositeSkillName || !parsed.domainC) {
418
+ return null;
419
+ }
420
+ const evolutionId = `skill:evolution:${hashText(parsed.compositeSkillName)}`;
421
+ const record = {
422
+ id: evolutionId,
423
+ name: parsed.compositeSkillName,
424
+ parents: [skillNodeId(n1), skillNodeId(n2)],
425
+ domain: parsed.domainC,
426
+ description: parsed.methodologyDescription || "",
427
+ score: previousComposite?.score ?? 1,
428
+ uses: previousComposite?.uses ?? 1,
429
+ updatedAt: Date.now(),
430
+ canaryUses: 0,
431
+ canaryPasses: 0,
432
+ canaryStatus: 'probation',
433
+ };
434
+ // 返回生成的高阶进化技能节点,在外部写入图谱,并关联 prerequisite 拓扑边
435
+ return {
436
+ id: evolutionId,
437
+ type: "Skill",
438
+ content: JSON.stringify({ kind: "evolution", ...record })
439
+ };
440
+ }
441
+ catch (error) {
442
+ logger_1.logger.error({ error }, "Caught error");
443
+ // 异常安全降级,若推理失败,退回传统规则拼接
444
+ return null;
445
+ }
446
+ }
447
+ function getTripleAtomNames(skills) {
448
+ if (skills.length < 3) {
449
+ return undefined;
450
+ }
451
+ const atoms = dedup(skills).sort();
452
+ if (atoms.length < 3) {
453
+ return undefined;
454
+ }
455
+ return [atoms[0], atoms[1], atoms[2]];
456
+ }
457
+ function buildTripleFusionNode(names, now) {
458
+ if (process.env.GRAPHFLOW_SKILL_TRIPLE_FUSION === "0") {
459
+ return undefined;
460
+ }
461
+ const [a, b, c] = names;
462
+ const text = `${a}+${b}+${c}`;
463
+ const id = `skill:triple:${sanitizeAtom(a)}__${sanitizeAtom(b)}__${sanitizeAtom(c)}`;
464
+ const content = {
465
+ kind: "triple-composite",
466
+ id,
467
+ name: text,
468
+ parents: [skillNodeId(a), skillNodeId(b), skillNodeId(c)],
469
+ score: 1,
470
+ uses: 1,
471
+ updatedAt: now,
472
+ methodology: `融合 ${a}、${b}、${c} 的三元高阶技能`,
473
+ };
474
+ return {
475
+ id,
476
+ type: "Skill",
477
+ content: JSON.stringify(content),
478
+ };
479
+ }
480
+ function cleanJsonString(raw, n1, n2) {
481
+ let text = raw.trim();
482
+ // 适配测试环境及 mock 环境下的返回
483
+ if (text.includes("[openbmb:") || text.includes("[openai:") || !text.startsWith("{")) {
484
+ return JSON.stringify({
485
+ compositeSkillName: `构建 ${n1} 与 ${n2} 融合高阶技能`,
486
+ domainC: `${n1} & ${n2} 复合工程领域`,
487
+ methodologyDescription: `在 mock 测试下完美融合 ${n1} 与 ${n2},达到大师级设计。`
488
+ });
489
+ }
490
+ const fence = text.match(/^```(?:json)?\s*([\s\S]*?)\s*```$/i);
491
+ if (fence && fence[1]) {
492
+ text = fence[1].trim();
493
+ }
494
+ const start = text.indexOf("{");
495
+ const end = text.lastIndexOf("}");
496
+ if (start !== -1 && end !== -1 && end > start) {
497
+ return text.slice(start, end + 1);
498
+ }
499
+ return text;
500
+ }
501
+ /**
502
+ * 更新合成技能的 canary 验证状态
503
+ * 当 canaryUses >= 3 时评估通过率决定 verified 或 demoted
504
+ */
505
+ async function updateSkillCanary(client, skillId, outcome) {
506
+ const existing = await loadEvolutionSkill(client, skillId);
507
+ if (!existing) {
508
+ return undefined;
509
+ }
510
+ existing.canaryUses += 1;
511
+ if (outcome === 'pass') {
512
+ existing.canaryPasses += 1;
513
+ }
514
+ // 累积足够样本后进行阈值判定
515
+ if (existing.canaryUses >= 3) {
516
+ const passRate = existing.canaryPasses / existing.canaryUses;
517
+ if (passRate >= 0.5) {
518
+ existing.canaryStatus = 'verified';
519
+ }
520
+ else {
521
+ existing.canaryStatus = 'demoted';
522
+ existing.score = -10;
523
+ }
524
+ }
525
+ existing.updatedAt = Date.now();
526
+ await client.upsertNodes([{
527
+ id: existing.id,
528
+ type: "Skill",
529
+ content: JSON.stringify({ kind: "evolution", ...existing }),
530
+ }]);
531
+ return existing;
532
+ }
533
+ //# sourceMappingURL=skill-flywheel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-flywheel.js","sourceRoot":"","sources":["../../src/learning/skill-flywheel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ export interface VectorNode {
2
+ id: string;
3
+ content: string;
4
+ embedding: number[];
5
+ }
6
+ export declare class VectorStore {
7
+ private db;
8
+ constructor(dbPath?: string);
9
+ private initSchema;
10
+ addNode(node: VectorNode): void;
11
+ addNodes(nodes: VectorNode[]): void;
12
+ query(queryEmbedding: number[], topK?: number, minSimilarity?: number): Array<{
13
+ node: VectorNode;
14
+ score: number;
15
+ }>;
16
+ deleteNode(id: string): void;
17
+ }
18
+ //# sourceMappingURL=vector-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vector-store.d.ts","sourceRoot":"","sources":["../../src/learning/vector-store.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,EAAE,CAAoC;gBAElC,MAAM,GAAE,MAAsC;IAU1D,OAAO,CAAC,UAAU;IAUX,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAQ/B,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,IAAI;IAanC,KAAK,CAAC,cAAc,EAAE,MAAM,EAAE,EAAE,IAAI,GAAE,MAAU,EAAE,aAAa,GAAE,MAAU,GAAG,KAAK,CAAC;QAAC,IAAI,EAAE,UAAU,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAC,CAAC;IAuBtH,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;CAIpC"}
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.VectorStore = void 0;
7
+ const node_fs_1 = require("node:fs");
8
+ const node_path_1 = require("node:path");
9
+ const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
10
+ const embeddings_1 = require("./embeddings");
11
+ class VectorStore {
12
+ db;
13
+ constructor(dbPath = ".graphflow-cache/vectors.db") {
14
+ const dir = (0, node_path_1.dirname)(dbPath);
15
+ if (dir && dir !== "." && dir !== "") {
16
+ (0, node_fs_1.mkdirSync)(dir, { recursive: true });
17
+ }
18
+ this.db = new better_sqlite3_1.default(dbPath);
19
+ this.db.pragma("journal_mode = WAL");
20
+ this.initSchema();
21
+ }
22
+ initSchema() {
23
+ this.db.exec(`
24
+ CREATE TABLE IF NOT EXISTS vector_nodes (
25
+ id TEXT PRIMARY KEY,
26
+ content TEXT NOT NULL,
27
+ embedding TEXT NOT NULL
28
+ )
29
+ `);
30
+ }
31
+ addNode(node) {
32
+ const stmt = this.db.prepare(`INSERT INTO vector_nodes (id, content, embedding) VALUES (?, ?, ?)
33
+ ON CONFLICT(id) DO UPDATE SET content=excluded.content, embedding=excluded.embedding`);
34
+ stmt.run(node.id, node.content, JSON.stringify(node.embedding));
35
+ }
36
+ addNodes(nodes) {
37
+ const stmt = this.db.prepare(`INSERT INTO vector_nodes (id, content, embedding) VALUES (?, ?, ?)
38
+ ON CONFLICT(id) DO UPDATE SET content=excluded.content, embedding=excluded.embedding`);
39
+ const tx = this.db.transaction((batch) => {
40
+ for (const node of batch) {
41
+ stmt.run(node.id, node.content, JSON.stringify(node.embedding));
42
+ }
43
+ });
44
+ tx(nodes);
45
+ }
46
+ query(queryEmbedding, topK = 5, minSimilarity = 0) {
47
+ const rows = this.db.prepare(`SELECT id, content, embedding FROM vector_nodes`).all();
48
+ const results = [];
49
+ for (const row of rows) {
50
+ try {
51
+ const emb = JSON.parse(row.embedding);
52
+ const score = (0, embeddings_1.cosineSimilarity)(queryEmbedding, emb);
53
+ if (score >= minSimilarity) {
54
+ results.push({
55
+ node: { id: row.id, content: row.content, embedding: emb },
56
+ score
57
+ });
58
+ }
59
+ }
60
+ catch {
61
+ // ignore invalid JSON
62
+ }
63
+ }
64
+ results.sort((a, b) => b.score - a.score);
65
+ return results.slice(0, topK);
66
+ }
67
+ deleteNode(id) {
68
+ const stmt = this.db.prepare(`DELETE FROM vector_nodes WHERE id = ?`);
69
+ stmt.run(id);
70
+ }
71
+ }
72
+ exports.VectorStore = VectorStore;
73
+ //# sourceMappingURL=vector-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vector-store.js","sourceRoot":"","sources":["../../src/learning/vector-store.ts"],"names":[],"mappings":"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"}