@roarpeng/graphflow 1.7.7 → 1.7.10

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 (129) hide show
  1. package/CHANGELOG.md +66 -2
  2. package/README.md +266 -264
  3. package/dist/config/discover-workspace.d.ts +2 -0
  4. package/dist/config/discover-workspace.d.ts.map +1 -1
  5. package/dist/config/discover-workspace.js +62 -15
  6. package/dist/config/discover-workspace.js.map +1 -1
  7. package/dist/config/embedding-factory.d.ts.map +1 -1
  8. package/dist/config/embedding-factory.js +8 -0
  9. package/dist/config/embedding-factory.js.map +1 -1
  10. package/dist/config/workspace-root.d.ts.map +1 -1
  11. package/dist/config/workspace-root.js +7 -2
  12. package/dist/config/workspace-root.js.map +1 -1
  13. package/dist/core/types.d.ts +1 -1
  14. package/dist/core/types.d.ts.map +1 -1
  15. package/dist/graph/artifact-manager.d.ts +1 -0
  16. package/dist/graph/artifact-manager.d.ts.map +1 -1
  17. package/dist/graph/artifact-manager.js +15 -8
  18. package/dist/graph/artifact-manager.js.map +1 -1
  19. package/dist/graph/file-indexer-walker.d.ts.map +1 -1
  20. package/dist/graph/file-indexer-walker.js +1 -0
  21. package/dist/graph/file-indexer-walker.js.map +1 -1
  22. package/dist/graph/file-indexer.d.ts.map +1 -1
  23. package/dist/graph/file-indexer.js +18 -0
  24. package/dist/graph/file-indexer.js.map +1 -1
  25. package/dist/graph/file-watcher.d.ts.map +1 -1
  26. package/dist/graph/file-watcher.js +1 -0
  27. package/dist/graph/file-watcher.js.map +1 -1
  28. package/dist/graph/graph-compression.d.ts.map +1 -1
  29. package/dist/graph/graph-compression.js +2 -0
  30. package/dist/graph/graph-compression.js.map +1 -1
  31. package/dist/graph/hit-diversify.js +1 -1
  32. package/dist/graph/hit-diversify.js.map +1 -1
  33. package/dist/graph/language-indexers/dart.d.ts +9 -0
  34. package/dist/graph/language-indexers/dart.d.ts.map +1 -0
  35. package/dist/graph/language-indexers/dart.js +225 -0
  36. package/dist/graph/language-indexers/dart.js.map +1 -0
  37. package/dist/graph/language-indexers/index.d.ts.map +1 -1
  38. package/dist/graph/language-indexers/index.js +6 -0
  39. package/dist/graph/language-indexers/index.js.map +1 -1
  40. package/dist/graph/language-indexers/markdown.d.ts +11 -0
  41. package/dist/graph/language-indexers/markdown.d.ts.map +1 -0
  42. package/dist/graph/language-indexers/markdown.js +158 -0
  43. package/dist/graph/language-indexers/markdown.js.map +1 -0
  44. package/dist/graph/language-indexers/plcopen-xml.d.ts +16 -0
  45. package/dist/graph/language-indexers/plcopen-xml.d.ts.map +1 -0
  46. package/dist/graph/language-indexers/plcopen-xml.js +204 -0
  47. package/dist/graph/language-indexers/plcopen-xml.js.map +1 -0
  48. package/dist/graph/language-indexers/st-analyzer.d.ts +49 -0
  49. package/dist/graph/language-indexers/st-analyzer.d.ts.map +1 -0
  50. package/dist/graph/language-indexers/st-analyzer.js +439 -0
  51. package/dist/graph/language-indexers/st-analyzer.js.map +1 -0
  52. package/dist/graph/language-indexers/tree-sitter-loader.d.ts +2 -1
  53. package/dist/graph/language-indexers/tree-sitter-loader.d.ts.map +1 -1
  54. package/dist/graph/language-indexers/tree-sitter-loader.js +5 -2
  55. package/dist/graph/language-indexers/tree-sitter-loader.js.map +1 -1
  56. package/dist/integrations/agent-mcp-installer.d.ts +8 -2
  57. package/dist/integrations/agent-mcp-installer.d.ts.map +1 -1
  58. package/dist/integrations/agent-mcp-installer.js +70 -5
  59. package/dist/integrations/agent-mcp-installer.js.map +1 -1
  60. package/dist/integrations/agent-profiles/index.d.ts +2 -0
  61. package/dist/integrations/agent-profiles/index.d.ts.map +1 -1
  62. package/dist/integrations/agent-profiles/index.js +2 -0
  63. package/dist/integrations/agent-profiles/index.js.map +1 -1
  64. package/dist/integrations/agent-profiles/profiles/opencode.d.ts +2 -0
  65. package/dist/integrations/agent-profiles/profiles/opencode.d.ts.map +1 -0
  66. package/dist/integrations/agent-profiles/profiles/opencode.js +28 -0
  67. package/dist/integrations/agent-profiles/profiles/opencode.js.map +1 -0
  68. package/dist/integrations/agent-profiles/skills/opencode.d.ts +2 -0
  69. package/dist/integrations/agent-profiles/skills/opencode.d.ts.map +1 -0
  70. package/dist/integrations/agent-profiles/skills/opencode.js +13 -0
  71. package/dist/integrations/agent-profiles/skills/opencode.js.map +1 -0
  72. package/dist/integrations/agent-profiles/types.d.ts +2 -2
  73. package/dist/integrations/agent-profiles/types.d.ts.map +1 -1
  74. package/dist/integrations/skill-installer.d.ts.map +1 -1
  75. package/dist/integrations/skill-installer.js +7 -0
  76. package/dist/integrations/skill-installer.js.map +1 -1
  77. package/dist/learning/embedding-quality.d.ts +4 -0
  78. package/dist/learning/embedding-quality.d.ts.map +1 -1
  79. package/dist/learning/embedding-quality.js +10 -0
  80. package/dist/learning/embedding-quality.js.map +1 -1
  81. package/dist/learning/embeddings.d.ts +31 -2
  82. package/dist/learning/embeddings.d.ts.map +1 -1
  83. package/dist/learning/embeddings.js +114 -22
  84. package/dist/learning/embeddings.js.map +1 -1
  85. package/dist/learning/episodic-memory.d.ts +3 -0
  86. package/dist/learning/episodic-memory.d.ts.map +1 -1
  87. package/dist/learning/episodic-memory.js +13 -0
  88. package/dist/learning/episodic-memory.js.map +1 -1
  89. package/dist/learning/skill-flywheel.d.ts +11 -0
  90. package/dist/learning/skill-flywheel.d.ts.map +1 -1
  91. package/dist/learning/skill-flywheel.js +85 -0
  92. package/dist/learning/skill-flywheel.js.map +1 -1
  93. package/dist/learning/skill-store.d.ts.map +1 -1
  94. package/dist/learning/skill-store.js +1 -0
  95. package/dist/learning/skill-store.js.map +1 -1
  96. package/dist/learning/skill-types.d.ts +1 -0
  97. package/dist/learning/skill-types.d.ts.map +1 -1
  98. package/dist/learning/skill-types.js.map +1 -1
  99. package/dist/surfaces/cli/index.js +115 -9
  100. package/dist/surfaces/cli/index.js.map +1 -1
  101. package/dist/surfaces/cli/init.d.ts +55 -2
  102. package/dist/surfaces/cli/init.d.ts.map +1 -1
  103. package/dist/surfaces/cli/init.js +234 -56
  104. package/dist/surfaces/cli/init.js.map +1 -1
  105. package/dist/surfaces/cli/output.d.ts +6 -0
  106. package/dist/surfaces/cli/output.d.ts.map +1 -1
  107. package/dist/surfaces/cli/output.js +62 -2
  108. package/dist/surfaces/cli/output.js.map +1 -1
  109. package/dist/surfaces/cli/runtime/graph.d.ts +1 -0
  110. package/dist/surfaces/cli/runtime/graph.d.ts.map +1 -1
  111. package/dist/surfaces/cli/runtime/graph.js.map +1 -1
  112. package/dist/surfaces/cli/runtime/learning.d.ts +13 -0
  113. package/dist/surfaces/cli/runtime/learning.d.ts.map +1 -1
  114. package/dist/surfaces/cli/runtime/learning.js +27 -0
  115. package/dist/surfaces/cli/runtime/learning.js.map +1 -1
  116. package/dist/surfaces/cli/runtime/routing.d.ts.map +1 -1
  117. package/dist/surfaces/cli/runtime/routing.js +65 -0
  118. package/dist/surfaces/cli/runtime/routing.js.map +1 -1
  119. package/dist/surfaces/cli/runtime/types.d.ts +25 -0
  120. package/dist/surfaces/cli/runtime/types.d.ts.map +1 -1
  121. package/dist/surfaces/cli/runtime.d.ts +1 -1
  122. package/dist/surfaces/cli/runtime.d.ts.map +1 -1
  123. package/dist/surfaces/cli/runtime.js +5 -1
  124. package/dist/surfaces/cli/runtime.js.map +1 -1
  125. package/package.json +13 -8
  126. package/scripts/safe-postinstall.cjs +38 -1
  127. package/wasm/.grammar-version +1 -0
  128. package/wasm/tree-sitter-dart.wasm +0 -0
  129. package/wasm/tree-sitter-kotlin.wasm +0 -0
@@ -0,0 +1,204 @@
1
+ "use strict";
2
+ /**
3
+ * plcopen-xml.ts — PLCopen XML indexer (IEC 61131-10 / Beremiz / OpenPLC)
4
+ *
5
+ * Regex-based parser that extracts POU, variable, task, and ST code
6
+ * symbols from PLCopen TC6-compliant XML project files.
7
+ *
8
+ * NOTE: PLC XML files can exceed DEFAULT_MAX_FILE_SIZE (200 KB) for
9
+ * large projects with many SFC steps or inlined data. Consider raising
10
+ * `maxFileSizeBytes` when indexing large PLC workspaces.
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.plcopenIndexer = void 0;
14
+ exports.buildPlcEdges = buildPlcEdges;
15
+ const PROJECT_TAG_RE = /<project\s+[^>]*xmlns\s*=\s*"[^"]*plcopen[^"]*"/i;
16
+ const VAR_SCOPE_TAGS = [
17
+ "localVars",
18
+ "inputVars",
19
+ "outputVars",
20
+ "inOutVars",
21
+ "tempVars",
22
+ "returnType",
23
+ ];
24
+ function isPlcOpenXml(content) {
25
+ return PROJECT_TAG_RE.test(content);
26
+ }
27
+ function extractTypeName(typeContent) {
28
+ const derived = typeContent.match(/<derived\s+name="([^"]+)"/);
29
+ if (derived?.[1])
30
+ return derived[1];
31
+ const baseType = typeContent.match(/<baseType>\s*<(\w+)\s*\/?>/);
32
+ if (baseType?.[1])
33
+ return baseType[1];
34
+ if (/<array>/.test(typeContent))
35
+ return "ARRAY";
36
+ const simple = typeContent.match(/<(\w+)\s*\/?>/);
37
+ if (simple?.[1])
38
+ return simple[1];
39
+ return "UNKNOWN";
40
+ }
41
+ function extractPouVariables(pouBody, pouName, filePath, symbols, imports) {
42
+ for (const scopeTag of VAR_SCOPE_TAGS) {
43
+ const scopeRe = new RegExp(`<${scopeTag}>([\\s\\S]*?)</${scopeTag}>`, "gi");
44
+ let scopeMatch;
45
+ while ((scopeMatch = scopeRe.exec(pouBody)) !== null) {
46
+ const scopeBody = scopeMatch[1];
47
+ if (!scopeBody)
48
+ continue;
49
+ const varRe = /<variable\s+name="([^"]+)">\s*<type>([\s\S]*?)<\/type>/gi;
50
+ let varMatch;
51
+ while ((varMatch = varRe.exec(scopeBody)) !== null) {
52
+ const varName = varMatch[1];
53
+ const typeContentRaw = varMatch[2];
54
+ if (!varName || !typeContentRaw)
55
+ continue;
56
+ const typeContent = typeContentRaw.trim();
57
+ const varType = extractTypeName(typeContent);
58
+ const fullName = `${pouName}.${varName}`;
59
+ symbols.push({
60
+ name: fullName,
61
+ kind: "variable",
62
+ line: 0,
63
+ exported: true,
64
+ signature: `VAR ${varType} ${fullName}`,
65
+ jsdoc: `${pouName}:${scopeTag}`,
66
+ file: filePath,
67
+ });
68
+ const derived = typeContent.match(/<derived\s+name="([^"]+)"/);
69
+ if (derived?.[1]) {
70
+ imports.push({ module: `pou:${derived[1]}` });
71
+ }
72
+ }
73
+ }
74
+ }
75
+ }
76
+ function extractStCode(pouBody, pouName, filePath, symbols) {
77
+ const stRe = /<ST>\s*<xhtml>\s*<!\[CDATA\[([\s\S]*?)\]\]>\s*<\/xhtml>\s*<\/ST>/gi;
78
+ let match;
79
+ while ((match = stRe.exec(pouBody)) !== null) {
80
+ const code = match[1]?.trim();
81
+ if (!code)
82
+ continue;
83
+ symbols.push({
84
+ name: `${pouName}.st_code`,
85
+ kind: "code",
86
+ line: 0,
87
+ exported: true,
88
+ signature: code,
89
+ file: filePath,
90
+ });
91
+ }
92
+ }
93
+ function extractTasks(xml, filePath, symbols) {
94
+ const resourceRe = /<resource\s+name="([^"]+)"[^>]*>([\s\S]*?)<\/resource>/g;
95
+ let resourceMatch;
96
+ while ((resourceMatch = resourceRe.exec(xml)) !== null) {
97
+ const resourceName = resourceMatch[1];
98
+ const resourceBody = resourceMatch[2];
99
+ if (!resourceName || !resourceBody)
100
+ continue;
101
+ const taskRe = /<task\s+name="([^"]+)"(?:\s+priority="(\d+)")?(?:\s+interval="([^"]+)")?/gi;
102
+ let taskMatch;
103
+ while ((taskMatch = taskRe.exec(resourceBody)) !== null) {
104
+ const taskName = taskMatch[1];
105
+ if (!taskName)
106
+ continue;
107
+ const priority = taskMatch[2] ?? "0";
108
+ const interval = taskMatch[3] ?? "N/A";
109
+ symbols.push({
110
+ name: `task.${taskName}`,
111
+ kind: "task",
112
+ line: 0,
113
+ exported: true,
114
+ signature: `TASK ${taskName} interval=${interval} prio=${priority}`,
115
+ jsdoc: `resource=${resourceName}`,
116
+ file: filePath,
117
+ });
118
+ }
119
+ }
120
+ }
121
+ function extractInstanceRefs(xml, imports) {
122
+ const re = /<pouInstance\s+name="([^"]+)"\s+typeName="([^"]+)"/gi;
123
+ let match;
124
+ while ((match = re.exec(xml)) !== null) {
125
+ const typeName = match[2];
126
+ if (!typeName)
127
+ continue;
128
+ imports.push({ module: `pou:${typeName}` });
129
+ }
130
+ }
131
+ function extract(filePath, content) {
132
+ if (!isPlcOpenXml(content)) {
133
+ return { symbols: [], imports: [] };
134
+ }
135
+ const cleanXml = content.replace(/<!--[\s\S]*?-->/g, "");
136
+ const symbols = [];
137
+ const imports = [];
138
+ const pouRe = /<pou\s+[^>]*?\bname="([^"]+)"[^>]*?\bpouType="([^"]+)"[^>]*>([\s\S]*?)<\/pou>/g;
139
+ let pouMatch;
140
+ while ((pouMatch = pouRe.exec(cleanXml)) !== null) {
141
+ const pouName = pouMatch[1];
142
+ const pouType = pouMatch[2];
143
+ const pouBody = pouMatch[3];
144
+ if (!pouName || !pouType)
145
+ continue;
146
+ symbols.push({
147
+ name: pouName,
148
+ kind: "pou",
149
+ line: 0,
150
+ exported: true,
151
+ signature: `POU ${pouType} ${pouName}`,
152
+ jsdoc: pouType,
153
+ file: filePath,
154
+ });
155
+ if (pouBody) {
156
+ extractPouVariables(pouBody, pouName, filePath, symbols, imports);
157
+ extractStCode(pouBody, pouName, filePath, symbols);
158
+ }
159
+ }
160
+ extractTasks(cleanXml, filePath, symbols);
161
+ extractInstanceRefs(cleanXml, imports);
162
+ return { symbols, imports };
163
+ }
164
+ function buildPlcEdges(fileNodeId, symbols, _imports) {
165
+ const edges = [];
166
+ for (const sym of symbols) {
167
+ if (sym.kind === "variable" && sym.jsdoc) {
168
+ const pouName = sym.jsdoc.split(":")[0];
169
+ const pouNode = symbols.find((s) => s.kind === "pou" && s.name === pouName);
170
+ if (pouNode?.nodeId && sym.nodeId) {
171
+ edges.push({
172
+ from: pouNode.nodeId,
173
+ to: sym.nodeId,
174
+ relation: "depends_on",
175
+ });
176
+ }
177
+ }
178
+ if (sym.kind === "code") {
179
+ const pouName = sym.name.replace(".st_code", "");
180
+ const pouNode = symbols.find((s) => s.kind === "pou" && s.name === pouName);
181
+ if (pouNode?.nodeId && sym.nodeId) {
182
+ edges.push({
183
+ from: pouNode.nodeId,
184
+ to: sym.nodeId,
185
+ relation: "depends_on",
186
+ });
187
+ }
188
+ }
189
+ if (sym.kind === "task" && sym.nodeId) {
190
+ edges.push({
191
+ from: fileNodeId,
192
+ to: sym.nodeId,
193
+ relation: "depends_on",
194
+ });
195
+ }
196
+ }
197
+ return edges;
198
+ }
199
+ exports.plcopenIndexer = {
200
+ language: "plcopen",
201
+ extensions: [".xml"],
202
+ extract,
203
+ };
204
+ //# sourceMappingURL=plcopen-xml.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plcopen-xml.js","sourceRoot":"","sources":["../../../src/graph/language-indexers/plcopen-xml.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * st-analyzer.ts — IEC 61131-3 Structured Text code analysis utility
3
+ *
4
+ * Extracts POU calls, data flow (variable reads/writes), and control flow
5
+ * from ST code embedded in PLCopen XML. Called by the plcopen-xml indexer
6
+ * to enhance its ExtractionResult.
7
+ *
8
+ * Integration guide for the plcopen-xml indexer:
9
+ *
10
+ * import { analyzeStCode } from "./st-analyzer";
11
+ *
12
+ * for (const pou of pouData) {
13
+ * if (pou.stCode !== undefined) {
14
+ * const analysis = analyzeStCode(pou.name, pou.stCode);
15
+ * // Merge analysis.calls into ExtractionResult.calls
16
+ * // Store analysis.dataFlow / analysis.controlFlow in POU symbol metadata
17
+ * stCalls.push(...analysis.calls);
18
+ * }
19
+ * }
20
+ */
21
+ import type { CallRelation } from "./index.js";
22
+ export interface StDataFlow {
23
+ /** Qualified source: `${pouName}.${varName}` */
24
+ from: string;
25
+ /** Qualified target: `${pouName}.${varName}` or `${pouName}.IF_12` for conditions */
26
+ to: string;
27
+ kind: "reads" | "writes";
28
+ line: number;
29
+ }
30
+ export interface StControlFlow {
31
+ /** Parent block name or "entry" */
32
+ from: string;
33
+ /** Block label, e.g. "IF_3", "FOR_8", "CASE_12" */
34
+ to: string;
35
+ /** Condition expression (abbreviated), if applicable */
36
+ condition?: string;
37
+ type: "if" | "elsif" | "else" | "for" | "while" | "repeat" | "case" | "case_entry";
38
+ line: number;
39
+ }
40
+ export interface StAnalysisResult {
41
+ /** POU call relations extracted from ST code */
42
+ calls: CallRelation[];
43
+ /** Variable-level read / write edges within the POU */
44
+ dataFlow: StDataFlow[];
45
+ /** High-level control structure for code understanding */
46
+ controlFlow: StControlFlow[];
47
+ }
48
+ export declare function analyzeStCode(pouName: string, stCode: string): StAnalysisResult;
49
+ //# sourceMappingURL=st-analyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"st-analyzer.d.ts","sourceRoot":"","sources":["../../../src/graph/language-indexers/st-analyzer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAI/C,MAAM,WAAW,UAAU;IACzB,gDAAgD;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,qFAAqF;IACrF,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,mCAAmC;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,mDAAmD;IACnD,EAAE,EAAE,MAAM,CAAC;IACX,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,IAAI,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,YAAY,CAAC;IACnF,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,gDAAgD;IAChD,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,uDAAuD;IACvD,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,0DAA0D;IAC1D,WAAW,EAAE,aAAa,EAAE,CAAC;CAC9B;AAuMD,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,gBAAgB,CA8P/E"}