@mcp-graph-workflow/mcp-graph 5.10.0 → 5.12.0

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 (256) hide show
  1. package/dist/api/routes/code-graph.d.ts.map +1 -1
  2. package/dist/api/routes/code-graph.js +163 -0
  3. package/dist/api/routes/code-graph.js.map +1 -1
  4. package/dist/api/routes/siebel.d.ts.map +1 -1
  5. package/dist/api/routes/siebel.js +170 -0
  6. package/dist/api/routes/siebel.js.map +1 -1
  7. package/dist/core/code/code-indexer.d.ts +5 -3
  8. package/dist/core/code/code-indexer.d.ts.map +1 -1
  9. package/dist/core/code/code-indexer.js +57 -10
  10. package/dist/core/code/code-indexer.js.map +1 -1
  11. package/dist/core/code/code-types.d.ts +8 -0
  12. package/dist/core/code/code-types.d.ts.map +1 -1
  13. package/dist/core/code/code-types.js.map +1 -1
  14. package/dist/core/code/graph-traversal.d.ts +15 -0
  15. package/dist/core/code/graph-traversal.d.ts.map +1 -1
  16. package/dist/core/code/graph-traversal.js +53 -0
  17. package/dist/core/code/graph-traversal.js.map +1 -1
  18. package/dist/core/code/ts-analyzer.d.ts +6 -1
  19. package/dist/core/code/ts-analyzer.d.ts.map +1 -1
  20. package/dist/core/code/ts-analyzer.js +8 -0
  21. package/dist/core/code/ts-analyzer.js.map +1 -1
  22. package/dist/core/config/config-schema.d.ts +8 -0
  23. package/dist/core/config/config-schema.d.ts.map +1 -1
  24. package/dist/core/config/config-schema.js +3 -1
  25. package/dist/core/config/config-schema.js.map +1 -1
  26. package/dist/core/context/context-assembler.d.ts +2 -0
  27. package/dist/core/context/context-assembler.d.ts.map +1 -1
  28. package/dist/core/context/context-assembler.js +15 -0
  29. package/dist/core/context/context-assembler.js.map +1 -1
  30. package/dist/core/lsp/language-detector.d.ts +11 -0
  31. package/dist/core/lsp/language-detector.d.ts.map +1 -0
  32. package/dist/core/lsp/language-detector.js +149 -0
  33. package/dist/core/lsp/language-detector.js.map +1 -0
  34. package/dist/core/lsp/lsp-analyzer.d.ts +16 -0
  35. package/dist/core/lsp/lsp-analyzer.d.ts.map +1 -0
  36. package/dist/core/lsp/lsp-analyzer.js +30 -0
  37. package/dist/core/lsp/lsp-analyzer.js.map +1 -0
  38. package/dist/core/lsp/lsp-bridge.d.ts +40 -0
  39. package/dist/core/lsp/lsp-bridge.d.ts.map +1 -0
  40. package/dist/core/lsp/lsp-bridge.js +349 -0
  41. package/dist/core/lsp/lsp-bridge.js.map +1 -0
  42. package/dist/core/lsp/lsp-cache.d.ts +33 -0
  43. package/dist/core/lsp/lsp-cache.d.ts.map +1 -0
  44. package/dist/core/lsp/lsp-cache.js +134 -0
  45. package/dist/core/lsp/lsp-cache.js.map +1 -0
  46. package/dist/core/lsp/lsp-client.d.ts +47 -0
  47. package/dist/core/lsp/lsp-client.d.ts.map +1 -0
  48. package/dist/core/lsp/lsp-client.js +256 -0
  49. package/dist/core/lsp/lsp-client.js.map +1 -0
  50. package/dist/core/lsp/lsp-diagnostics.d.ts +40 -0
  51. package/dist/core/lsp/lsp-diagnostics.d.ts.map +1 -0
  52. package/dist/core/lsp/lsp-diagnostics.js +113 -0
  53. package/dist/core/lsp/lsp-diagnostics.js.map +1 -0
  54. package/dist/core/lsp/lsp-server-manager.d.ts +56 -0
  55. package/dist/core/lsp/lsp-server-manager.d.ts.map +1 -0
  56. package/dist/core/lsp/lsp-server-manager.js +330 -0
  57. package/dist/core/lsp/lsp-server-manager.js.map +1 -0
  58. package/dist/core/lsp/lsp-types.d.ts +130 -0
  59. package/dist/core/lsp/lsp-types.d.ts.map +1 -0
  60. package/dist/core/lsp/lsp-types.js +131 -0
  61. package/dist/core/lsp/lsp-types.js.map +1 -0
  62. package/dist/core/lsp/server-registry.d.ts +19 -0
  63. package/dist/core/lsp/server-registry.d.ts.map +1 -0
  64. package/dist/core/lsp/server-registry.js +188 -0
  65. package/dist/core/lsp/server-registry.js.map +1 -0
  66. package/dist/core/rag/multi-strategy-retrieval.d.ts +6 -0
  67. package/dist/core/rag/multi-strategy-retrieval.d.ts.map +1 -1
  68. package/dist/core/rag/multi-strategy-retrieval.js +31 -3
  69. package/dist/core/rag/multi-strategy-retrieval.js.map +1 -1
  70. package/dist/core/rag/siebel-indexer.d.ts.map +1 -1
  71. package/dist/core/rag/siebel-indexer.js +57 -1
  72. package/dist/core/rag/siebel-indexer.js.map +1 -1
  73. package/dist/core/rag/wsdl-indexer.d.ts +16 -0
  74. package/dist/core/rag/wsdl-indexer.d.ts.map +1 -0
  75. package/dist/core/rag/wsdl-indexer.js +115 -0
  76. package/dist/core/rag/wsdl-indexer.js.map +1 -0
  77. package/dist/core/siebel/auto-wiring.d.ts +29 -0
  78. package/dist/core/siebel/auto-wiring.d.ts.map +1 -0
  79. package/dist/core/siebel/auto-wiring.js +211 -0
  80. package/dist/core/siebel/auto-wiring.js.map +1 -0
  81. package/dist/core/siebel/best-practices.d.ts +16 -0
  82. package/dist/core/siebel/best-practices.d.ts.map +1 -0
  83. package/dist/core/siebel/best-practices.js +92 -0
  84. package/dist/core/siebel/best-practices.js.map +1 -0
  85. package/dist/core/siebel/change-simulator.d.ts +32 -0
  86. package/dist/core/siebel/change-simulator.d.ts.map +1 -0
  87. package/dist/core/siebel/change-simulator.js +138 -0
  88. package/dist/core/siebel/change-simulator.js.map +1 -0
  89. package/dist/core/siebel/clone-adapt.d.ts +21 -0
  90. package/dist/core/siebel/clone-adapt.d.ts.map +1 -0
  91. package/dist/core/siebel/clone-adapt.js +157 -0
  92. package/dist/core/siebel/clone-adapt.js.map +1 -0
  93. package/dist/core/siebel/code-review.d.ts +36 -0
  94. package/dist/core/siebel/code-review.d.ts.map +1 -0
  95. package/dist/core/siebel/code-review.js +239 -0
  96. package/dist/core/siebel/code-review.js.map +1 -0
  97. package/dist/core/siebel/complexity-metrics.d.ts +24 -0
  98. package/dist/core/siebel/complexity-metrics.d.ts.map +1 -0
  99. package/dist/core/siebel/complexity-metrics.js +41 -0
  100. package/dist/core/siebel/complexity-metrics.js.map +1 -0
  101. package/dist/core/siebel/context-enrichment.d.ts +18 -0
  102. package/dist/core/siebel/context-enrichment.d.ts.map +1 -0
  103. package/dist/core/siebel/context-enrichment.js +91 -0
  104. package/dist/core/siebel/context-enrichment.js.map +1 -0
  105. package/dist/core/siebel/cross-project-analyzer.d.ts +30 -0
  106. package/dist/core/siebel/cross-project-analyzer.d.ts.map +1 -0
  107. package/dist/core/siebel/cross-project-analyzer.js +108 -0
  108. package/dist/core/siebel/cross-project-analyzer.js.map +1 -0
  109. package/dist/core/siebel/definition-of-ready.d.ts +25 -0
  110. package/dist/core/siebel/definition-of-ready.d.ts.map +1 -0
  111. package/dist/core/siebel/definition-of-ready.js +164 -0
  112. package/dist/core/siebel/definition-of-ready.js.map +1 -0
  113. package/dist/core/siebel/escript-crossref.d.ts +18 -0
  114. package/dist/core/siebel/escript-crossref.d.ts.map +1 -0
  115. package/dist/core/siebel/escript-crossref.js +50 -0
  116. package/dist/core/siebel/escript-crossref.js.map +1 -0
  117. package/dist/core/siebel/escript-generator.d.ts +33 -0
  118. package/dist/core/siebel/escript-generator.d.ts.map +1 -0
  119. package/dist/core/siebel/escript-generator.js +200 -0
  120. package/dist/core/siebel/escript-generator.js.map +1 -0
  121. package/dist/core/siebel/escript-patterns.d.ts +20 -0
  122. package/dist/core/siebel/escript-patterns.d.ts.map +1 -0
  123. package/dist/core/siebel/escript-patterns.js +69 -0
  124. package/dist/core/siebel/escript-patterns.js.map +1 -0
  125. package/dist/core/siebel/escript-refactor.d.ts +23 -0
  126. package/dist/core/siebel/escript-refactor.d.ts.map +1 -0
  127. package/dist/core/siebel/escript-refactor.js +270 -0
  128. package/dist/core/siebel/escript-refactor.js.map +1 -0
  129. package/dist/core/siebel/field-suggestion.d.ts +29 -0
  130. package/dist/core/siebel/field-suggestion.d.ts.map +1 -0
  131. package/dist/core/siebel/field-suggestion.js +105 -0
  132. package/dist/core/siebel/field-suggestion.js.map +1 -0
  133. package/dist/core/siebel/health-check.d.ts +21 -0
  134. package/dist/core/siebel/health-check.d.ts.map +1 -0
  135. package/dist/core/siebel/health-check.js +51 -0
  136. package/dist/core/siebel/health-check.js.map +1 -0
  137. package/dist/core/siebel/integration-test-gen.d.ts +26 -0
  138. package/dist/core/siebel/integration-test-gen.d.ts.map +1 -0
  139. package/dist/core/siebel/integration-test-gen.js +131 -0
  140. package/dist/core/siebel/integration-test-gen.js.map +1 -0
  141. package/dist/core/siebel/lov-mapper.d.ts +23 -0
  142. package/dist/core/siebel/lov-mapper.d.ts.map +1 -0
  143. package/dist/core/siebel/lov-mapper.js +42 -0
  144. package/dist/core/siebel/lov-mapper.js.map +1 -0
  145. package/dist/core/siebel/migration-package.d.ts +38 -0
  146. package/dist/core/siebel/migration-package.d.ts.map +1 -0
  147. package/dist/core/siebel/migration-package.js +276 -0
  148. package/dist/core/siebel/migration-package.js.map +1 -0
  149. package/dist/core/siebel/naming-convention-validator.d.ts +38 -0
  150. package/dist/core/siebel/naming-convention-validator.d.ts.map +1 -0
  151. package/dist/core/siebel/naming-convention-validator.js +165 -0
  152. package/dist/core/siebel/naming-convention-validator.js.map +1 -0
  153. package/dist/core/siebel/object-erd.d.ts +28 -0
  154. package/dist/core/siebel/object-erd.d.ts.map +1 -0
  155. package/dist/core/siebel/object-erd.js +82 -0
  156. package/dist/core/siebel/object-erd.js.map +1 -0
  157. package/dist/core/siebel/orphan-detector.d.ts +21 -0
  158. package/dist/core/siebel/orphan-detector.d.ts.map +1 -0
  159. package/dist/core/siebel/orphan-detector.js +64 -0
  160. package/dist/core/siebel/orphan-detector.js.map +1 -0
  161. package/dist/core/siebel/pattern-analyzer.d.ts +32 -0
  162. package/dist/core/siebel/pattern-analyzer.d.ts.map +1 -0
  163. package/dist/core/siebel/pattern-analyzer.js +155 -0
  164. package/dist/core/siebel/pattern-analyzer.js.map +1 -0
  165. package/dist/core/siebel/profileattr-flow.d.ts +26 -0
  166. package/dist/core/siebel/profileattr-flow.d.ts.map +1 -0
  167. package/dist/core/siebel/profileattr-flow.js +50 -0
  168. package/dist/core/siebel/profileattr-flow.js.map +1 -0
  169. package/dist/core/siebel/runtime-dep-builder.d.ts +9 -0
  170. package/dist/core/siebel/runtime-dep-builder.d.ts.map +1 -0
  171. package/dist/core/siebel/runtime-dep-builder.js +47 -0
  172. package/dist/core/siebel/runtime-dep-builder.js.map +1 -0
  173. package/dist/core/siebel/scaffold-generator.d.ts +25 -0
  174. package/dist/core/siebel/scaffold-generator.d.ts.map +1 -0
  175. package/dist/core/siebel/scaffold-generator.js +278 -0
  176. package/dist/core/siebel/scaffold-generator.js.map +1 -0
  177. package/dist/core/siebel/siebel-context-builder.d.ts +10 -0
  178. package/dist/core/siebel/siebel-context-builder.d.ts.map +1 -0
  179. package/dist/core/siebel/siebel-context-builder.js +75 -0
  180. package/dist/core/siebel/siebel-context-builder.js.map +1 -0
  181. package/dist/core/siebel/siebel-rag-booster.d.ts +19 -0
  182. package/dist/core/siebel/siebel-rag-booster.d.ts.map +1 -0
  183. package/dist/core/siebel/siebel-rag-booster.js +41 -0
  184. package/dist/core/siebel/siebel-rag-booster.js.map +1 -0
  185. package/dist/core/siebel/siebel-validators.d.ts +73 -0
  186. package/dist/core/siebel/siebel-validators.d.ts.map +1 -0
  187. package/dist/core/siebel/siebel-validators.js +269 -0
  188. package/dist/core/siebel/siebel-validators.js.map +1 -0
  189. package/dist/core/siebel/sif-batch-importer.d.ts +27 -0
  190. package/dist/core/siebel/sif-batch-importer.d.ts.map +1 -0
  191. package/dist/core/siebel/sif-batch-importer.js +68 -0
  192. package/dist/core/siebel/sif-batch-importer.js.map +1 -0
  193. package/dist/core/siebel/sif-diff.d.ts +57 -0
  194. package/dist/core/siebel/sif-diff.d.ts.map +1 -0
  195. package/dist/core/siebel/sif-diff.js +198 -0
  196. package/dist/core/siebel/sif-diff.js.map +1 -0
  197. package/dist/core/siebel/sif-parser.d.ts.map +1 -1
  198. package/dist/core/siebel/sif-parser.js +86 -0
  199. package/dist/core/siebel/sif-parser.js.map +1 -1
  200. package/dist/core/siebel/similarity-detector.d.ts +20 -0
  201. package/dist/core/siebel/similarity-detector.d.ts.map +1 -0
  202. package/dist/core/siebel/similarity-detector.js +83 -0
  203. package/dist/core/siebel/similarity-detector.js.map +1 -0
  204. package/dist/core/siebel/template-learner.d.ts +25 -0
  205. package/dist/core/siebel/template-learner.d.ts.map +1 -0
  206. package/dist/core/siebel/template-learner.js +129 -0
  207. package/dist/core/siebel/template-learner.js.map +1 -0
  208. package/dist/core/siebel/troubleshoot.d.ts +37 -0
  209. package/dist/core/siebel/troubleshoot.d.ts.map +1 -0
  210. package/dist/core/siebel/troubleshoot.js +249 -0
  211. package/dist/core/siebel/troubleshoot.js.map +1 -0
  212. package/dist/core/siebel/wsdl-correlation.d.ts +22 -0
  213. package/dist/core/siebel/wsdl-correlation.d.ts.map +1 -0
  214. package/dist/core/siebel/wsdl-correlation.js +64 -0
  215. package/dist/core/siebel/wsdl-correlation.js.map +1 -0
  216. package/dist/core/siebel/wsdl-parser.d.ts +57 -0
  217. package/dist/core/siebel/wsdl-parser.d.ts.map +1 -0
  218. package/dist/core/siebel/wsdl-parser.js +226 -0
  219. package/dist/core/siebel/wsdl-parser.js.map +1 -0
  220. package/dist/core/siebel/wsdl-to-sif.d.ts +22 -0
  221. package/dist/core/siebel/wsdl-to-sif.d.ts.map +1 -0
  222. package/dist/core/siebel/wsdl-to-sif.js +184 -0
  223. package/dist/core/siebel/wsdl-to-sif.js.map +1 -0
  224. package/dist/core/store/migrations.d.ts.map +1 -1
  225. package/dist/core/store/migrations.js +21 -0
  226. package/dist/core/store/migrations.js.map +1 -1
  227. package/dist/mcp/tools/code-intelligence.d.ts +15 -0
  228. package/dist/mcp/tools/code-intelligence.d.ts.map +1 -0
  229. package/dist/mcp/tools/code-intelligence.js +276 -0
  230. package/dist/mcp/tools/code-intelligence.js.map +1 -0
  231. package/dist/mcp/tools/index.d.ts.map +1 -1
  232. package/dist/mcp/tools/index.js +4 -0
  233. package/dist/mcp/tools/index.js.map +1 -1
  234. package/dist/mcp/tools/siebel-analyze.d.ts.map +1 -1
  235. package/dist/mcp/tools/siebel-analyze.js +89 -6
  236. package/dist/mcp/tools/siebel-analyze.js.map +1 -1
  237. package/dist/mcp/tools/siebel-composer.d.ts.map +1 -1
  238. package/dist/mcp/tools/siebel-composer.js +40 -3
  239. package/dist/mcp/tools/siebel-composer.js.map +1 -1
  240. package/dist/mcp/tools/siebel-generate-sif.d.ts.map +1 -1
  241. package/dist/mcp/tools/siebel-generate-sif.js +188 -3
  242. package/dist/mcp/tools/siebel-generate-sif.js.map +1 -1
  243. package/dist/mcp/tools/siebel-search.js +1 -1
  244. package/dist/mcp/tools/siebel-search.js.map +1 -1
  245. package/dist/mcp/tools/siebel-validate.d.ts.map +1 -1
  246. package/dist/mcp/tools/siebel-validate.js +94 -5
  247. package/dist/mcp/tools/siebel-validate.js.map +1 -1
  248. package/dist/schemas/knowledge.schema.d.ts +6 -0
  249. package/dist/schemas/knowledge.schema.d.ts.map +1 -1
  250. package/dist/schemas/knowledge.schema.js +2 -1
  251. package/dist/schemas/knowledge.schema.js.map +1 -1
  252. package/dist/schemas/siebel.schema.d.ts +42 -0
  253. package/dist/schemas/siebel.schema.d.ts.map +1 -1
  254. package/dist/schemas/siebel.schema.js +4 -0
  255. package/dist/schemas/siebel.schema.js.map +1 -1
  256. package/package.json +2 -2
@@ -0,0 +1,157 @@
1
+ /**
2
+ * Clone & Adapt — deep clone a Siebel object and adapt it with renames, field changes, and script updates.
3
+ *
4
+ * Uses sif-diff.ts to generate a structural diff between original and cloned object.
5
+ */
6
+ import { diffSifObjects } from "./sif-diff.js";
7
+ import { logger } from "../utils/logger.js";
8
+ // --- Deep clone ---
9
+ function deepCloneObject(obj) {
10
+ return {
11
+ name: obj.name,
12
+ type: obj.type,
13
+ project: obj.project,
14
+ properties: obj.properties.map((p) => ({ name: p.name, value: p.value })),
15
+ children: obj.children.map(deepCloneObject),
16
+ parentName: obj.parentName,
17
+ inactive: obj.inactive,
18
+ };
19
+ }
20
+ // --- Rename logic ---
21
+ function applyRenames(value, renames) {
22
+ let result = value;
23
+ for (const [from, to] of Object.entries(renames)) {
24
+ // Use global replace to catch all occurrences
25
+ result = replaceAll(result, from, to);
26
+ }
27
+ return result;
28
+ }
29
+ function replaceAll(str, search, replacement) {
30
+ if (search.length === 0)
31
+ return str;
32
+ let result = str;
33
+ let idx = result.indexOf(search);
34
+ while (idx !== -1) {
35
+ result = result.slice(0, idx) + replacement + result.slice(idx + search.length);
36
+ idx = result.indexOf(search, idx + replacement.length);
37
+ }
38
+ return result;
39
+ }
40
+ function renameObjectTree(obj, newName, oldName, renames) {
41
+ let renamesApplied = 0;
42
+ // Build full rename map including the object name itself
43
+ const fullRenames = { ...renames };
44
+ if (oldName !== newName) {
45
+ fullRenames[oldName] = newName;
46
+ }
47
+ // Rename root object
48
+ const renamedProperties = obj.properties.map((p) => {
49
+ const newValue = applyRenames(p.value, fullRenames);
50
+ if (newValue !== p.value)
51
+ renamesApplied++;
52
+ return { name: p.name, value: newValue };
53
+ });
54
+ // Rename children recursively
55
+ const renamedChildren = obj.children.map((child) => {
56
+ const newParentName = newName;
57
+ const renamedChild = renameChild(child, newParentName, fullRenames);
58
+ renamesApplied += renamedChild.renamesApplied;
59
+ return renamedChild.object;
60
+ });
61
+ return {
62
+ object: {
63
+ name: newName,
64
+ type: obj.type,
65
+ project: obj.project,
66
+ properties: renamedProperties,
67
+ children: renamedChildren,
68
+ parentName: obj.parentName ? applyRenames(obj.parentName, fullRenames) : undefined,
69
+ inactive: obj.inactive,
70
+ },
71
+ renamesApplied,
72
+ };
73
+ }
74
+ function renameChild(child, newParentName, renames) {
75
+ let renamesApplied = 0;
76
+ // Rename properties (including SCRIPT content)
77
+ const renamedProperties = child.properties.map((p) => {
78
+ const newValue = applyRenames(p.value, renames);
79
+ if (newValue !== p.value)
80
+ renamesApplied++;
81
+ return { name: p.name, value: newValue };
82
+ });
83
+ // Rename child name if it contains old names
84
+ let newChildName = child.name;
85
+ for (const [from, to] of Object.entries(renames)) {
86
+ if (newChildName.includes(from)) {
87
+ newChildName = replaceAll(newChildName, from, to);
88
+ renamesApplied++;
89
+ }
90
+ }
91
+ // Recursive for nested children
92
+ const renamedChildren = child.children.map((c) => {
93
+ const result = renameChild(c, newChildName, renames);
94
+ renamesApplied += result.renamesApplied;
95
+ return result.object;
96
+ });
97
+ return {
98
+ object: {
99
+ name: newChildName,
100
+ type: child.type,
101
+ project: child.project,
102
+ properties: renamedProperties,
103
+ children: renamedChildren,
104
+ parentName: newParentName,
105
+ inactive: child.inactive,
106
+ },
107
+ renamesApplied,
108
+ };
109
+ }
110
+ // --- Main function ---
111
+ export function cloneAndAdapt(request) {
112
+ const { source, newName, renames, addChildren, removeChildren } = request;
113
+ logger.info("clone-adapt", {
114
+ source: source.name,
115
+ newName,
116
+ renameCount: String(Object.keys(renames).length),
117
+ });
118
+ // 1. Deep clone the source
119
+ const cloned = deepCloneObject(source);
120
+ // 2. Apply renames throughout the tree
121
+ const renamed = renameObjectTree(cloned, newName, source.name, renames);
122
+ let result = renamed.object;
123
+ // 3. Remove specified children
124
+ if (removeChildren && removeChildren.length > 0) {
125
+ const removeSet = new Set(removeChildren);
126
+ result = {
127
+ ...result,
128
+ children: result.children.filter((c) => !removeSet.has(c.name)),
129
+ };
130
+ }
131
+ // 4. Add new children
132
+ if (addChildren && addChildren.length > 0) {
133
+ const newChildren = addChildren.map((c) => ({
134
+ ...deepCloneObject(c),
135
+ parentName: newName,
136
+ }));
137
+ result = {
138
+ ...result,
139
+ children: [...result.children, ...newChildren],
140
+ };
141
+ }
142
+ // 5. Generate diff between original and clone
143
+ const diff = diffSifObjects([source], [result]);
144
+ logger.info("clone-adapt:complete", {
145
+ childCount: String(result.children.length),
146
+ renamesApplied: String(renamed.renamesApplied),
147
+ diffAdded: String(diff.summary.addedCount),
148
+ diffRemoved: String(diff.summary.removedCount),
149
+ diffModified: String(diff.summary.modifiedCount),
150
+ });
151
+ return {
152
+ cloned: result,
153
+ diff,
154
+ renamesApplied: renamed.renamesApplied,
155
+ };
156
+ }
157
+ //# sourceMappingURL=clone-adapt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clone-adapt.js","sourceRoot":"","sources":["../../../src/core/siebel/clone-adapt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Code Review Automatizado para SIFs — reviews Siebel objects before deploy
3
+ * checking patterns, anti-patterns, naming, scripts, and compliance.
4
+ *
5
+ * Categories: naming, error_handling, hardcoded_values, field_reference,
6
+ * profile_attr, test_objects
7
+ */
8
+ import type { SiebelObject } from "../../schemas/siebel.schema.js";
9
+ export type ReviewCategory = "naming" | "error_handling" | "hardcoded_values" | "field_reference" | "profile_attr" | "test_objects";
10
+ export interface ReviewIssue {
11
+ readonly category: ReviewCategory;
12
+ readonly severity: "error" | "warning" | "info";
13
+ readonly objectName: string;
14
+ readonly detail: string;
15
+ readonly suggestion: string;
16
+ }
17
+ export interface ReviewOptions {
18
+ readonly prefix: string;
19
+ readonly allowedPrefixes?: readonly string[];
20
+ }
21
+ export interface ScoreBreakdown {
22
+ readonly naming: number;
23
+ readonly error_handling: number;
24
+ readonly hardcoded_values: number;
25
+ readonly field_reference: number;
26
+ readonly profile_attr: number;
27
+ readonly test_objects: number;
28
+ }
29
+ export interface CodeReviewResult {
30
+ readonly issues: readonly ReviewIssue[];
31
+ readonly score: number;
32
+ readonly breakdown: ScoreBreakdown;
33
+ readonly objectCount: number;
34
+ }
35
+ export declare function reviewSiebelCode(objects: readonly SiebelObject[], options: ReviewOptions): CodeReviewResult;
36
+ //# sourceMappingURL=code-review.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-review.d.ts","sourceRoot":"","sources":["../../../src/core/siebel/code-review.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAKnE,MAAM,MAAM,cAAc,GACtB,QAAQ,GACR,gBAAgB,GAChB,kBAAkB,GAClB,iBAAiB,GACjB,cAAc,GACd,cAAc,CAAC;AAEnB,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IAChD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC9C;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,CAAC;IACxC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC;IACnC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAiPD,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,SAAS,YAAY,EAAE,EAChC,OAAO,EAAE,aAAa,GACrB,gBAAgB,CA0BlB"}
@@ -0,0 +1,239 @@
1
+ /**
2
+ * Code Review Automatizado para SIFs — reviews Siebel objects before deploy
3
+ * checking patterns, anti-patterns, naming, scripts, and compliance.
4
+ *
5
+ * Categories: naming, error_handling, hardcoded_values, field_reference,
6
+ * profile_attr, test_objects
7
+ */
8
+ import { logger } from "../utils/logger.js";
9
+ // --- Helpers ---
10
+ function getAllScripts(objects) {
11
+ const scripts = [];
12
+ for (const obj of objects) {
13
+ for (const child of obj.children) {
14
+ if (child.type === "escript") {
15
+ const code = child.properties.find((p) => p.name === "SOURCE_CODE")?.value ?? "";
16
+ if (code.trim()) {
17
+ scripts.push({ parent: obj.name, name: child.name, code });
18
+ }
19
+ }
20
+ }
21
+ }
22
+ return scripts;
23
+ }
24
+ function escapeRegex(str) {
25
+ return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
26
+ }
27
+ // --- Checks ---
28
+ /** AC1: Naming convention check */
29
+ function checkNaming(objects, opts) {
30
+ const issues = [];
31
+ const prefixes = opts.allowedPrefixes ?? [opts.prefix];
32
+ const checkTypes = new Set(["applet", "business_component", "business_object", "view", "screen", "business_service", "integration_object", "workflow"]);
33
+ for (const obj of objects) {
34
+ if (!checkTypes.has(obj.type))
35
+ continue;
36
+ const hasPrefix = prefixes.some((p) => obj.name.startsWith(p));
37
+ if (!hasPrefix) {
38
+ issues.push({
39
+ category: "naming",
40
+ severity: "warning",
41
+ objectName: obj.name,
42
+ detail: `Object "${obj.name}" does not start with required prefix (${prefixes.join(", ")})`,
43
+ suggestion: `Rename to "${prefixes[0]}${obj.name}" or use an allowed prefix`,
44
+ });
45
+ }
46
+ }
47
+ return issues;
48
+ }
49
+ /** AC2: Error handling check */
50
+ function checkErrorHandling(objects) {
51
+ const issues = [];
52
+ const scripts = getAllScripts(objects);
53
+ for (const s of scripts) {
54
+ const hasFunction = /function\s+\w+/.test(s.code);
55
+ const hasTry = /\btry\s*\{/.test(s.code);
56
+ if (hasFunction && !hasTry) {
57
+ issues.push({
58
+ category: "error_handling",
59
+ severity: "error",
60
+ objectName: s.parent,
61
+ detail: `Script "${s.name}" has no try/catch error handling`,
62
+ suggestion: "Wrap function body in try/catch/finally with TheApplication().RaiseErrorText()",
63
+ });
64
+ }
65
+ }
66
+ return issues;
67
+ }
68
+ /** AC3: Hardcoded values */
69
+ function checkHardcodedValues(objects) {
70
+ const issues = [];
71
+ const scripts = getAllScripts(objects);
72
+ const patterns = [
73
+ { name: "URL", regex: /https?:\/\/[^\s"']+/, suggestion: "Use a system preference or profile attribute for URLs" },
74
+ { name: "IP address", regex: /\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/, suggestion: "Use a system preference for IP addresses" },
75
+ { name: "environment name", regex: /\b(?:PROD|STAGING|DEV|TEST|UAT)_\w*(?:SERVER|HOST|ENV)\w*/i, suggestion: "Use TheApplication().GetProfileAttr() for environment-specific values" },
76
+ ];
77
+ for (const s of scripts) {
78
+ for (const p of patterns) {
79
+ if (p.regex.test(s.code)) {
80
+ issues.push({
81
+ category: "hardcoded_values",
82
+ severity: "warning",
83
+ objectName: s.parent,
84
+ detail: `Script "${s.name}" contains hardcoded ${p.name}`,
85
+ suggestion: p.suggestion,
86
+ });
87
+ }
88
+ }
89
+ }
90
+ return issues;
91
+ }
92
+ /** AC4: Field reference validation */
93
+ function checkFieldReferences(objects) {
94
+ const issues = [];
95
+ // Build field index: BC name → Set of field names
96
+ const bcFields = new Map();
97
+ for (const obj of objects) {
98
+ if (obj.type === "business_component") {
99
+ const fields = new Set(obj.children.filter((c) => c.type === "field").map((c) => c.name));
100
+ bcFields.set(obj.name, fields);
101
+ }
102
+ }
103
+ if (bcFields.size === 0)
104
+ return issues;
105
+ const scripts = getAllScripts(objects);
106
+ for (const s of scripts) {
107
+ const getFieldPattern = /GetFieldValue\s*\(\s*"([^"]+)"\s*\)/g;
108
+ let match;
109
+ while ((match = getFieldPattern.exec(s.code)) !== null) {
110
+ const fieldName = match[1];
111
+ // Check if any known BC has this field
112
+ let found = false;
113
+ for (const fields of bcFields.values()) {
114
+ if (fields.has(fieldName)) {
115
+ found = true;
116
+ break;
117
+ }
118
+ }
119
+ if (!found) {
120
+ issues.push({
121
+ category: "field_reference",
122
+ severity: "warning",
123
+ objectName: s.parent,
124
+ detail: `Script "${s.name}" references field "${fieldName}" not found in any BC`,
125
+ suggestion: `Verify field "${fieldName}" exists in the target BC or add it`,
126
+ });
127
+ }
128
+ }
129
+ }
130
+ return issues;
131
+ }
132
+ /** AC5: ProfileAttr tracking */
133
+ function checkProfileAttrs(objects) {
134
+ const issues = [];
135
+ const scripts = getAllScripts(objects);
136
+ const setAttrs = new Set();
137
+ const getAttrs = new Set();
138
+ for (const s of scripts) {
139
+ const setPattern = /SetProfileAttr\s*\(\s*"([^"]+)"/g;
140
+ const getPattern = /GetProfileAttr\s*\(\s*"([^"]+)"/g;
141
+ let match;
142
+ while ((match = setPattern.exec(s.code)) !== null) {
143
+ setAttrs.add(match[1]);
144
+ }
145
+ while ((match = getPattern.exec(s.code)) !== null) {
146
+ getAttrs.add(match[1]);
147
+ }
148
+ }
149
+ // Find orphan Set (set but never consumed)
150
+ for (const attr of setAttrs) {
151
+ if (!getAttrs.has(attr)) {
152
+ issues.push({
153
+ category: "profile_attr",
154
+ severity: "info",
155
+ objectName: "global",
156
+ detail: `ProfileAttr "${attr}" is set but never consumed by GetProfileAttr`,
157
+ suggestion: `Verify "${attr}" is consumed in other scripts not included in this review, or remove the SetProfileAttr`,
158
+ });
159
+ }
160
+ }
161
+ return issues;
162
+ }
163
+ /** AC6: Test objects check */
164
+ function checkTestObjects(objects) {
165
+ const issues = [];
166
+ const testPattern = /(?:^|[\s_])(?:Test|Debug|Temp|Temporary|TODO)(?:[\s_]|$)/i;
167
+ for (const obj of objects) {
168
+ if (obj.inactive)
169
+ continue;
170
+ if (testPattern.test(obj.name)) {
171
+ issues.push({
172
+ category: "test_objects",
173
+ severity: "warning",
174
+ objectName: obj.name,
175
+ detail: `Object "${obj.name}" appears to be a test/debug object but is active (INACTIVE=N)`,
176
+ suggestion: `Set INACTIVE="Y" or remove if no longer needed`,
177
+ });
178
+ }
179
+ }
180
+ return issues;
181
+ }
182
+ // --- Score calculation ---
183
+ function calculateScore(issues, objectCount) {
184
+ if (objectCount === 0) {
185
+ return {
186
+ score: 100,
187
+ breakdown: { naming: 100, error_handling: 100, hardcoded_values: 100, field_reference: 100, profile_attr: 100, test_objects: 100 },
188
+ };
189
+ }
190
+ const weights = {
191
+ naming: { weight: 20, penalty: { error: 20, warning: 10, info: 5 } },
192
+ error_handling: { weight: 25, penalty: { error: 25, warning: 15, info: 5 } },
193
+ hardcoded_values: { weight: 15, penalty: { error: 15, warning: 8, info: 3 } },
194
+ field_reference: { weight: 15, penalty: { error: 15, warning: 8, info: 3 } },
195
+ profile_attr: { weight: 10, penalty: { error: 10, warning: 5, info: 2 } },
196
+ test_objects: { weight: 15, penalty: { error: 15, warning: 8, info: 3 } },
197
+ };
198
+ const breakdown = {};
199
+ let totalScore = 0;
200
+ for (const [cat, config] of Object.entries(weights)) {
201
+ const catIssues = issues.filter((i) => i.category === cat);
202
+ let catDeduction = 0;
203
+ for (const issue of catIssues) {
204
+ catDeduction += config.penalty[issue.severity] ?? 0;
205
+ }
206
+ const catScore = Math.max(0, 100 - catDeduction);
207
+ breakdown[cat] = catScore;
208
+ totalScore += catScore * (config.weight / 100);
209
+ }
210
+ return {
211
+ score: Math.round(Math.max(0, Math.min(100, totalScore))),
212
+ breakdown: breakdown,
213
+ };
214
+ }
215
+ // --- Main function ---
216
+ export function reviewSiebelCode(objects, options) {
217
+ logger.debug("code-review: starting review", { objectCount: objects.length, prefix: options.prefix });
218
+ const allIssues = [
219
+ ...checkNaming(objects, options),
220
+ ...checkErrorHandling(objects),
221
+ ...checkHardcodedValues(objects),
222
+ ...checkFieldReferences(objects),
223
+ ...checkProfileAttrs(objects),
224
+ ...checkTestObjects(objects),
225
+ ];
226
+ const { score, breakdown } = calculateScore(allIssues, objects.length);
227
+ logger.info("code-review: complete", {
228
+ objectCount: objects.length,
229
+ issues: allIssues.length,
230
+ score,
231
+ });
232
+ return {
233
+ issues: allIssues,
234
+ score,
235
+ breakdown,
236
+ objectCount: objects.length,
237
+ };
238
+ }
239
+ //# sourceMappingURL=code-review.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-review.js","sourceRoot":"","sources":["../../../src/core/siebel/code-review.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Complexity Metrics — calculates complexity scores for Siebel objects.
3
+ */
4
+ import type { SiebelObject, SiebelDependency } from "../../schemas/siebel.schema.js";
5
+ export type ComplexityLevel = "low" | "medium" | "high" | "critical";
6
+ export interface ObjectMetrics {
7
+ fieldCount: number;
8
+ scriptCount: number;
9
+ userPropCount: number;
10
+ childCount: number;
11
+ dependencyCount: number;
12
+ }
13
+ export interface ComplexityResult {
14
+ name: string;
15
+ type: string;
16
+ metrics: ObjectMetrics;
17
+ score: number;
18
+ level: ComplexityLevel;
19
+ }
20
+ /**
21
+ * Calculate complexity metrics for all top-level objects, ranked by score.
22
+ */
23
+ export declare function calculateComplexity(objects: SiebelObject[], dependencies: SiebelDependency[]): ComplexityResult[];
24
+ //# sourceMappingURL=complexity-metrics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"complexity-metrics.d.ts","sourceRoot":"","sources":["../../../src/core/siebel/complexity-metrics.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAErF,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;AAErE,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,aAAa,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,eAAe,CAAC;CACxB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,YAAY,EAAE,EACvB,YAAY,EAAE,gBAAgB,EAAE,GAC/B,gBAAgB,EAAE,CA8BpB"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Complexity Metrics — calculates complexity scores for Siebel objects.
3
+ */
4
+ /**
5
+ * Calculate complexity metrics for all top-level objects, ranked by score.
6
+ */
7
+ export function calculateComplexity(objects, dependencies) {
8
+ const topLevel = objects.filter((o) => !o.parentName);
9
+ const depCount = new Map();
10
+ for (const dep of dependencies) {
11
+ const key = `${dep.from.type}:${dep.from.name}`;
12
+ depCount.set(key, (depCount.get(key) ?? 0) + 1);
13
+ }
14
+ const results = topLevel.map((obj) => {
15
+ const metrics = {
16
+ fieldCount: obj.children.filter((c) => c.type === "field").length,
17
+ scriptCount: obj.children.filter((c) => c.type === "escript").length,
18
+ userPropCount: obj.children.filter((c) => c.type === "user_property").length,
19
+ childCount: obj.children.length,
20
+ dependencyCount: depCount.get(`${obj.type}:${obj.name}`) ?? 0,
21
+ };
22
+ const score = metrics.fieldCount * 1
23
+ + metrics.scriptCount * 5
24
+ + metrics.userPropCount * 2
25
+ + metrics.dependencyCount * 3;
26
+ const level = scoreToLevel(score);
27
+ return { name: obj.name, type: obj.type, metrics, score, level };
28
+ });
29
+ results.sort((a, b) => b.score - a.score);
30
+ return results;
31
+ }
32
+ function scoreToLevel(score) {
33
+ if (score >= 100)
34
+ return "critical";
35
+ if (score >= 50)
36
+ return "high";
37
+ if (score >= 20)
38
+ return "medium";
39
+ return "low";
40
+ }
41
+ //# sourceMappingURL=complexity-metrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"complexity-metrics.js","sourceRoot":"","sources":["../../../src/core/siebel/complexity-metrics.ts"],"names":[],"mappings":"AAAA;;GAEG;AAsBH;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,OAAuB,EACvB,YAAgC;IAEhC,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;IAEtD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC3C,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAChD,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,OAAO,GAAuB,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QACvD,MAAM,OAAO,GAAkB;YAC7B,UAAU,EAAE,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,MAAM;YACjE,WAAW,EAAE,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,MAAM;YACpE,aAAa,EAAE,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,eAAe,CAAC,CAAC,MAAM;YAC5E,UAAU,EAAE,GAAG,CAAC,QAAQ,CAAC,MAAM;YAC/B,eAAe,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC;SAC9D,CAAC;QAEF,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,GAAG,CAAC;cAChC,OAAO,CAAC,WAAW,GAAG,CAAC;cACvB,OAAO,CAAC,aAAa,GAAG,CAAC;cACzB,OAAO,CAAC,eAAe,GAAG,CAAC,CAAC;QAEhC,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;QAElC,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IAC1C,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,YAAY,CAAC,KAAa;IACjC,IAAI,KAAK,IAAI,GAAG;QAAE,OAAO,UAAU,CAAC;IACpC,IAAI,KAAK,IAAI,EAAE;QAAE,OAAO,MAAM,CAAC;IAC/B,IAAI,KAAK,IAAI,EAAE;QAAE,OAAO,QAAQ,CAAC;IACjC,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Automatic Context Enrichment — generates summary, dependency info,
3
+ * and usage analysis for imported SIF content.
4
+ */
5
+ import type { SiebelObject, SiebelObjectRef, SiebelDependency, SiebelObjectType } from "../../schemas/siebel.schema.js";
6
+ export interface EnrichmentRequest {
7
+ readonly objects: readonly SiebelObject[];
8
+ readonly dependencies: readonly SiebelDependency[];
9
+ }
10
+ export interface EnrichmentResult {
11
+ readonly summary: string;
12
+ readonly objectTypes: readonly SiebelObjectType[];
13
+ readonly dependsOn: readonly SiebelObjectRef[];
14
+ readonly usedBy: readonly SiebelObjectRef[];
15
+ readonly objectCount: number;
16
+ }
17
+ export declare function enrichSifContext(request: EnrichmentRequest): EnrichmentResult;
18
+ //# sourceMappingURL=context-enrichment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-enrichment.d.ts","sourceRoot":"","sources":["../../../src/core/siebel/context-enrichment.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EACjB,MAAM,gCAAgC,CAAC;AAKxC,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,CAAC;IAC1C,QAAQ,CAAC,YAAY,EAAE,SAAS,gBAAgB,EAAE,CAAC;CACpD;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAClD,QAAQ,CAAC,SAAS,EAAE,SAAS,eAAe,EAAE,CAAC;IAC/C,QAAQ,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,CAAC;IAC5C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAyFD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,gBAAgB,CAuB7E"}
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Automatic Context Enrichment — generates summary, dependency info,
3
+ * and usage analysis for imported SIF content.
4
+ */
5
+ import { logger } from "../utils/logger.js";
6
+ // --- Implementation ---
7
+ function buildSummary(objects) {
8
+ if (objects.length === 0)
9
+ return "Empty SIF — no objects.";
10
+ const typeCounts = new Map();
11
+ const entityNames = new Set();
12
+ for (const obj of objects) {
13
+ typeCounts.set(obj.type, (typeCounts.get(obj.type) ?? 0) + 1);
14
+ // Extract entity name (strip prefix and type suffix)
15
+ const entity = obj.name
16
+ .replace(/^[A-Z]{2,4}[_ ]\s*/i, "")
17
+ .replace(/\s*(BC|Applet|View|Screen|BO|IO|List|Form)$/gi, "")
18
+ .trim();
19
+ if (entity)
20
+ entityNames.add(entity);
21
+ }
22
+ const typeList = [...typeCounts.entries()]
23
+ .map(([t, c]) => `${c} ${t}${c > 1 ? "s" : ""}`)
24
+ .join(", ");
25
+ const entities = [...entityNames].slice(0, 5).join(", ");
26
+ return `SIF with ${objects.length} objects (${typeList}). Main entities: ${entities || "unknown"}.`;
27
+ }
28
+ function findDependsOn(objects, dependencies) {
29
+ const objectKeys = new Set(objects.map((o) => `${o.type}:${o.name}`));
30
+ const external = [];
31
+ const seen = new Set();
32
+ // Dependencies where our objects depend on something external
33
+ for (const dep of dependencies) {
34
+ const fromKey = `${dep.from.type}:${dep.from.name}`;
35
+ const toKey = `${dep.to.type}:${dep.to.name}`;
36
+ if (objectKeys.has(fromKey) && !objectKeys.has(toKey) && !seen.has(toKey)) {
37
+ seen.add(toKey);
38
+ external.push(dep.to);
39
+ }
40
+ }
41
+ // Also check BUS_COMP references in applets
42
+ for (const obj of objects) {
43
+ if (obj.type === "applet") {
44
+ const busComp = obj.properties.find((p) => p.name === "BUS_COMP")?.value;
45
+ if (busComp) {
46
+ const key = `business_component:${busComp}`;
47
+ if (!objectKeys.has(key) && !seen.has(key)) {
48
+ seen.add(key);
49
+ external.push({ name: busComp, type: "business_component" });
50
+ }
51
+ }
52
+ }
53
+ }
54
+ return external;
55
+ }
56
+ function findUsedBy(objects, dependencies) {
57
+ const objectKeys = new Set(objects.map((o) => `${o.type}:${o.name}`));
58
+ const users = [];
59
+ const seen = new Set();
60
+ for (const dep of dependencies) {
61
+ const fromKey = `${dep.from.type}:${dep.from.name}`;
62
+ const toKey = `${dep.to.type}:${dep.to.name}`;
63
+ if (objectKeys.has(toKey) && !objectKeys.has(fromKey) && !seen.has(fromKey)) {
64
+ seen.add(fromKey);
65
+ users.push(dep.from);
66
+ }
67
+ }
68
+ return users;
69
+ }
70
+ // --- Main function ---
71
+ export function enrichSifContext(request) {
72
+ const { objects, dependencies } = request;
73
+ logger.debug("context-enrichment: enriching", { objects: objects.length, deps: dependencies.length });
74
+ const summary = buildSummary(objects);
75
+ const objectTypes = [...new Set(objects.map((o) => o.type))];
76
+ const dependsOn = findDependsOn(objects, dependencies);
77
+ const usedBy = findUsedBy(objects, dependencies);
78
+ logger.info("context-enrichment: complete", {
79
+ types: objectTypes.length,
80
+ dependsOn: dependsOn.length,
81
+ usedBy: usedBy.length,
82
+ });
83
+ return {
84
+ summary,
85
+ objectTypes,
86
+ dependsOn,
87
+ usedBy,
88
+ objectCount: objects.length,
89
+ };
90
+ }
91
+ //# sourceMappingURL=context-enrichment.js.map