@mcp-graph-workflow/mcp-graph 5.10.0 → 5.11.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 (180) hide show
  1. package/dist/api/routes/siebel.d.ts.map +1 -1
  2. package/dist/api/routes/siebel.js +170 -0
  3. package/dist/api/routes/siebel.js.map +1 -1
  4. package/dist/core/rag/siebel-indexer.d.ts.map +1 -1
  5. package/dist/core/rag/siebel-indexer.js +57 -1
  6. package/dist/core/rag/siebel-indexer.js.map +1 -1
  7. package/dist/core/rag/wsdl-indexer.d.ts +16 -0
  8. package/dist/core/rag/wsdl-indexer.d.ts.map +1 -0
  9. package/dist/core/rag/wsdl-indexer.js +115 -0
  10. package/dist/core/rag/wsdl-indexer.js.map +1 -0
  11. package/dist/core/siebel/auto-wiring.d.ts +29 -0
  12. package/dist/core/siebel/auto-wiring.d.ts.map +1 -0
  13. package/dist/core/siebel/auto-wiring.js +211 -0
  14. package/dist/core/siebel/auto-wiring.js.map +1 -0
  15. package/dist/core/siebel/best-practices.d.ts +16 -0
  16. package/dist/core/siebel/best-practices.d.ts.map +1 -0
  17. package/dist/core/siebel/best-practices.js +92 -0
  18. package/dist/core/siebel/best-practices.js.map +1 -0
  19. package/dist/core/siebel/change-simulator.d.ts +32 -0
  20. package/dist/core/siebel/change-simulator.d.ts.map +1 -0
  21. package/dist/core/siebel/change-simulator.js +138 -0
  22. package/dist/core/siebel/change-simulator.js.map +1 -0
  23. package/dist/core/siebel/clone-adapt.d.ts +21 -0
  24. package/dist/core/siebel/clone-adapt.d.ts.map +1 -0
  25. package/dist/core/siebel/clone-adapt.js +157 -0
  26. package/dist/core/siebel/clone-adapt.js.map +1 -0
  27. package/dist/core/siebel/code-review.d.ts +36 -0
  28. package/dist/core/siebel/code-review.d.ts.map +1 -0
  29. package/dist/core/siebel/code-review.js +239 -0
  30. package/dist/core/siebel/code-review.js.map +1 -0
  31. package/dist/core/siebel/complexity-metrics.d.ts +24 -0
  32. package/dist/core/siebel/complexity-metrics.d.ts.map +1 -0
  33. package/dist/core/siebel/complexity-metrics.js +41 -0
  34. package/dist/core/siebel/complexity-metrics.js.map +1 -0
  35. package/dist/core/siebel/context-enrichment.d.ts +18 -0
  36. package/dist/core/siebel/context-enrichment.d.ts.map +1 -0
  37. package/dist/core/siebel/context-enrichment.js +91 -0
  38. package/dist/core/siebel/context-enrichment.js.map +1 -0
  39. package/dist/core/siebel/cross-project-analyzer.d.ts +30 -0
  40. package/dist/core/siebel/cross-project-analyzer.d.ts.map +1 -0
  41. package/dist/core/siebel/cross-project-analyzer.js +108 -0
  42. package/dist/core/siebel/cross-project-analyzer.js.map +1 -0
  43. package/dist/core/siebel/definition-of-ready.d.ts +25 -0
  44. package/dist/core/siebel/definition-of-ready.d.ts.map +1 -0
  45. package/dist/core/siebel/definition-of-ready.js +164 -0
  46. package/dist/core/siebel/definition-of-ready.js.map +1 -0
  47. package/dist/core/siebel/escript-crossref.d.ts +18 -0
  48. package/dist/core/siebel/escript-crossref.d.ts.map +1 -0
  49. package/dist/core/siebel/escript-crossref.js +50 -0
  50. package/dist/core/siebel/escript-crossref.js.map +1 -0
  51. package/dist/core/siebel/escript-generator.d.ts +33 -0
  52. package/dist/core/siebel/escript-generator.d.ts.map +1 -0
  53. package/dist/core/siebel/escript-generator.js +200 -0
  54. package/dist/core/siebel/escript-generator.js.map +1 -0
  55. package/dist/core/siebel/escript-patterns.d.ts +20 -0
  56. package/dist/core/siebel/escript-patterns.d.ts.map +1 -0
  57. package/dist/core/siebel/escript-patterns.js +69 -0
  58. package/dist/core/siebel/escript-patterns.js.map +1 -0
  59. package/dist/core/siebel/escript-refactor.d.ts +23 -0
  60. package/dist/core/siebel/escript-refactor.d.ts.map +1 -0
  61. package/dist/core/siebel/escript-refactor.js +270 -0
  62. package/dist/core/siebel/escript-refactor.js.map +1 -0
  63. package/dist/core/siebel/field-suggestion.d.ts +29 -0
  64. package/dist/core/siebel/field-suggestion.d.ts.map +1 -0
  65. package/dist/core/siebel/field-suggestion.js +105 -0
  66. package/dist/core/siebel/field-suggestion.js.map +1 -0
  67. package/dist/core/siebel/health-check.d.ts +21 -0
  68. package/dist/core/siebel/health-check.d.ts.map +1 -0
  69. package/dist/core/siebel/health-check.js +51 -0
  70. package/dist/core/siebel/health-check.js.map +1 -0
  71. package/dist/core/siebel/integration-test-gen.d.ts +26 -0
  72. package/dist/core/siebel/integration-test-gen.d.ts.map +1 -0
  73. package/dist/core/siebel/integration-test-gen.js +131 -0
  74. package/dist/core/siebel/integration-test-gen.js.map +1 -0
  75. package/dist/core/siebel/lov-mapper.d.ts +23 -0
  76. package/dist/core/siebel/lov-mapper.d.ts.map +1 -0
  77. package/dist/core/siebel/lov-mapper.js +42 -0
  78. package/dist/core/siebel/lov-mapper.js.map +1 -0
  79. package/dist/core/siebel/migration-package.d.ts +38 -0
  80. package/dist/core/siebel/migration-package.d.ts.map +1 -0
  81. package/dist/core/siebel/migration-package.js +276 -0
  82. package/dist/core/siebel/migration-package.js.map +1 -0
  83. package/dist/core/siebel/naming-convention-validator.d.ts +38 -0
  84. package/dist/core/siebel/naming-convention-validator.d.ts.map +1 -0
  85. package/dist/core/siebel/naming-convention-validator.js +165 -0
  86. package/dist/core/siebel/naming-convention-validator.js.map +1 -0
  87. package/dist/core/siebel/object-erd.d.ts +28 -0
  88. package/dist/core/siebel/object-erd.d.ts.map +1 -0
  89. package/dist/core/siebel/object-erd.js +82 -0
  90. package/dist/core/siebel/object-erd.js.map +1 -0
  91. package/dist/core/siebel/orphan-detector.d.ts +21 -0
  92. package/dist/core/siebel/orphan-detector.d.ts.map +1 -0
  93. package/dist/core/siebel/orphan-detector.js +64 -0
  94. package/dist/core/siebel/orphan-detector.js.map +1 -0
  95. package/dist/core/siebel/pattern-analyzer.d.ts +32 -0
  96. package/dist/core/siebel/pattern-analyzer.d.ts.map +1 -0
  97. package/dist/core/siebel/pattern-analyzer.js +155 -0
  98. package/dist/core/siebel/pattern-analyzer.js.map +1 -0
  99. package/dist/core/siebel/profileattr-flow.d.ts +26 -0
  100. package/dist/core/siebel/profileattr-flow.d.ts.map +1 -0
  101. package/dist/core/siebel/profileattr-flow.js +50 -0
  102. package/dist/core/siebel/profileattr-flow.js.map +1 -0
  103. package/dist/core/siebel/runtime-dep-builder.d.ts +9 -0
  104. package/dist/core/siebel/runtime-dep-builder.d.ts.map +1 -0
  105. package/dist/core/siebel/runtime-dep-builder.js +47 -0
  106. package/dist/core/siebel/runtime-dep-builder.js.map +1 -0
  107. package/dist/core/siebel/scaffold-generator.d.ts +25 -0
  108. package/dist/core/siebel/scaffold-generator.d.ts.map +1 -0
  109. package/dist/core/siebel/scaffold-generator.js +278 -0
  110. package/dist/core/siebel/scaffold-generator.js.map +1 -0
  111. package/dist/core/siebel/siebel-context-builder.d.ts +10 -0
  112. package/dist/core/siebel/siebel-context-builder.d.ts.map +1 -0
  113. package/dist/core/siebel/siebel-context-builder.js +75 -0
  114. package/dist/core/siebel/siebel-context-builder.js.map +1 -0
  115. package/dist/core/siebel/siebel-rag-booster.d.ts +19 -0
  116. package/dist/core/siebel/siebel-rag-booster.d.ts.map +1 -0
  117. package/dist/core/siebel/siebel-rag-booster.js +41 -0
  118. package/dist/core/siebel/siebel-rag-booster.js.map +1 -0
  119. package/dist/core/siebel/siebel-validators.d.ts +73 -0
  120. package/dist/core/siebel/siebel-validators.d.ts.map +1 -0
  121. package/dist/core/siebel/siebel-validators.js +269 -0
  122. package/dist/core/siebel/siebel-validators.js.map +1 -0
  123. package/dist/core/siebel/sif-batch-importer.d.ts +27 -0
  124. package/dist/core/siebel/sif-batch-importer.d.ts.map +1 -0
  125. package/dist/core/siebel/sif-batch-importer.js +68 -0
  126. package/dist/core/siebel/sif-batch-importer.js.map +1 -0
  127. package/dist/core/siebel/sif-diff.d.ts +57 -0
  128. package/dist/core/siebel/sif-diff.d.ts.map +1 -0
  129. package/dist/core/siebel/sif-diff.js +198 -0
  130. package/dist/core/siebel/sif-diff.js.map +1 -0
  131. package/dist/core/siebel/sif-parser.d.ts.map +1 -1
  132. package/dist/core/siebel/sif-parser.js +86 -0
  133. package/dist/core/siebel/sif-parser.js.map +1 -1
  134. package/dist/core/siebel/similarity-detector.d.ts +20 -0
  135. package/dist/core/siebel/similarity-detector.d.ts.map +1 -0
  136. package/dist/core/siebel/similarity-detector.js +83 -0
  137. package/dist/core/siebel/similarity-detector.js.map +1 -0
  138. package/dist/core/siebel/template-learner.d.ts +25 -0
  139. package/dist/core/siebel/template-learner.d.ts.map +1 -0
  140. package/dist/core/siebel/template-learner.js +129 -0
  141. package/dist/core/siebel/template-learner.js.map +1 -0
  142. package/dist/core/siebel/troubleshoot.d.ts +37 -0
  143. package/dist/core/siebel/troubleshoot.d.ts.map +1 -0
  144. package/dist/core/siebel/troubleshoot.js +249 -0
  145. package/dist/core/siebel/troubleshoot.js.map +1 -0
  146. package/dist/core/siebel/wsdl-correlation.d.ts +22 -0
  147. package/dist/core/siebel/wsdl-correlation.d.ts.map +1 -0
  148. package/dist/core/siebel/wsdl-correlation.js +64 -0
  149. package/dist/core/siebel/wsdl-correlation.js.map +1 -0
  150. package/dist/core/siebel/wsdl-parser.d.ts +57 -0
  151. package/dist/core/siebel/wsdl-parser.d.ts.map +1 -0
  152. package/dist/core/siebel/wsdl-parser.js +226 -0
  153. package/dist/core/siebel/wsdl-parser.js.map +1 -0
  154. package/dist/core/siebel/wsdl-to-sif.d.ts +22 -0
  155. package/dist/core/siebel/wsdl-to-sif.d.ts.map +1 -0
  156. package/dist/core/siebel/wsdl-to-sif.js +184 -0
  157. package/dist/core/siebel/wsdl-to-sif.js.map +1 -0
  158. package/dist/mcp/tools/siebel-analyze.d.ts.map +1 -1
  159. package/dist/mcp/tools/siebel-analyze.js +89 -6
  160. package/dist/mcp/tools/siebel-analyze.js.map +1 -1
  161. package/dist/mcp/tools/siebel-composer.d.ts.map +1 -1
  162. package/dist/mcp/tools/siebel-composer.js +40 -3
  163. package/dist/mcp/tools/siebel-composer.js.map +1 -1
  164. package/dist/mcp/tools/siebel-generate-sif.d.ts.map +1 -1
  165. package/dist/mcp/tools/siebel-generate-sif.js +188 -3
  166. package/dist/mcp/tools/siebel-generate-sif.js.map +1 -1
  167. package/dist/mcp/tools/siebel-search.js +1 -1
  168. package/dist/mcp/tools/siebel-search.js.map +1 -1
  169. package/dist/mcp/tools/siebel-validate.d.ts.map +1 -1
  170. package/dist/mcp/tools/siebel-validate.js +94 -5
  171. package/dist/mcp/tools/siebel-validate.js.map +1 -1
  172. package/dist/schemas/knowledge.schema.d.ts +4 -0
  173. package/dist/schemas/knowledge.schema.d.ts.map +1 -1
  174. package/dist/schemas/knowledge.schema.js +1 -0
  175. package/dist/schemas/knowledge.schema.js.map +1 -1
  176. package/dist/schemas/siebel.schema.d.ts +42 -0
  177. package/dist/schemas/siebel.schema.d.ts.map +1 -1
  178. package/dist/schemas/siebel.schema.js +4 -0
  179. package/dist/schemas/siebel.schema.js.map +1 -1
  180. package/package.json +2 -2
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Orphan Detector — identifies Siebel objects not referenced by any other object.
3
+ */
4
+ /** Types that are commonly standalone (not orphans even without inbound deps). */
5
+ const STANDALONE_TYPES = new Set(["business_service", "workflow", "integration_object", "web_template"]);
6
+ /**
7
+ * Detect orphan objects — those not referenced by any other object in the dependency graph.
8
+ */
9
+ export function detectOrphans(objects, dependencies) {
10
+ if (objects.length === 0) {
11
+ return { orphans: [], totalScanned: 0, orphanCount: 0, orphanRate: 0 };
12
+ }
13
+ // Build set of objects that are referenced (have inbound dependencies)
14
+ const referenced = new Set();
15
+ for (const dep of dependencies) {
16
+ referenced.add(`${dep.to.type}:${dep.to.name}`);
17
+ }
18
+ // Also mark objects that HAVE outbound deps (they reference something, so they are "active")
19
+ const hasOutbound = new Set();
20
+ for (const dep of dependencies) {
21
+ hasOutbound.add(`${dep.from.type}:${dep.from.name}`);
22
+ }
23
+ const orphans = [];
24
+ for (const obj of objects) {
25
+ if (obj.parentName)
26
+ continue; // skip children
27
+ const key = `${obj.type}:${obj.name}`;
28
+ // If referenced by something, not an orphan
29
+ if (referenced.has(key))
30
+ continue;
31
+ // Standalone types are intentional
32
+ if (STANDALONE_TYPES.has(obj.type)) {
33
+ orphans.push({
34
+ object: { name: obj.name, type: obj.type },
35
+ classification: "intentionally_standalone",
36
+ reason: `${obj.type} objects are commonly standalone`,
37
+ });
38
+ continue;
39
+ }
40
+ // Has outbound deps but no inbound — probably orphan (it uses things but nothing uses it)
41
+ if (hasOutbound.has(key)) {
42
+ orphans.push({
43
+ object: { name: obj.name, type: obj.type },
44
+ classification: "probably_orphan",
45
+ reason: `References other objects but not referenced by anything`,
46
+ });
47
+ continue;
48
+ }
49
+ // No deps at all — definitely orphan
50
+ orphans.push({
51
+ object: { name: obj.name, type: obj.type },
52
+ classification: "definitely_orphan",
53
+ reason: `No inbound or outbound dependencies`,
54
+ });
55
+ }
56
+ const orphanCount = orphans.filter((o) => o.classification !== "intentionally_standalone").length;
57
+ return {
58
+ orphans,
59
+ totalScanned: objects.length,
60
+ orphanCount,
61
+ orphanRate: objects.length > 0 ? orphanCount / objects.length : 0,
62
+ };
63
+ }
64
+ //# sourceMappingURL=orphan-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orphan-detector.js","sourceRoot":"","sources":["../../../src/core/siebel/orphan-detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Pattern Analyzer — learns naming conventions, field patterns, and structural patterns from Siebel objects.
3
+ */
4
+ import type { SiebelObject, SiebelObjectType } from "../../schemas/siebel.schema.js";
5
+ export interface NamingPattern {
6
+ prefix: string;
7
+ count: number;
8
+ projects: string[];
9
+ }
10
+ export interface RequiredPropertyPattern {
11
+ objectType: SiebelObjectType;
12
+ properties: string[];
13
+ frequency: Record<string, number>;
14
+ }
15
+ export interface FieldDistribution {
16
+ avgFieldCount: number;
17
+ minFieldCount: number;
18
+ maxFieldCount: number;
19
+ medianFieldCount: number;
20
+ }
21
+ export interface PatternAnalysisResult {
22
+ namingPatterns: NamingPattern[];
23
+ requiredProperties: RequiredPropertyPattern[];
24
+ fieldDistribution: FieldDistribution;
25
+ appletClassDistribution: Record<string, number>;
26
+ computeAdherence: (obj: SiebelObject) => number;
27
+ }
28
+ /**
29
+ * Analyze patterns from a collection of Siebel objects.
30
+ */
31
+ export declare function analyzePatterns(objects: SiebelObject[]): PatternAnalysisResult;
32
+ //# sourceMappingURL=pattern-analyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pattern-analyzer.d.ts","sourceRoot":"","sources":["../../../src/core/siebel/pattern-analyzer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAErF,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,gBAAgB,CAAC;IAC7B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,qBAAqB;IACpC,cAAc,EAAE,aAAa,EAAE,CAAC;IAChC,kBAAkB,EAAE,uBAAuB,EAAE,CAAC;IAC9C,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChD,gBAAgB,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,MAAM,CAAC;CACjD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,qBAAqB,CAiB9E"}
@@ -0,0 +1,155 @@
1
+ /**
2
+ * Pattern Analyzer — learns naming conventions, field patterns, and structural patterns from Siebel objects.
3
+ */
4
+ /**
5
+ * Analyze patterns from a collection of Siebel objects.
6
+ */
7
+ export function analyzePatterns(objects) {
8
+ const namingPatterns = extractNamingPatterns(objects);
9
+ const requiredProperties = extractRequiredProperties(objects);
10
+ const fieldDistribution = computeFieldDistribution(objects);
11
+ const appletClassDistribution = computeAppletClassDistribution(objects);
12
+ const computeAdherence = (obj) => {
13
+ return calculateAdherence(obj, namingPatterns, requiredProperties, appletClassDistribution);
14
+ };
15
+ return {
16
+ namingPatterns,
17
+ requiredProperties,
18
+ fieldDistribution,
19
+ appletClassDistribution,
20
+ computeAdherence,
21
+ };
22
+ }
23
+ function extractNamingPatterns(objects) {
24
+ const prefixMap = new Map();
25
+ for (const obj of objects) {
26
+ const parts = obj.name.split(" ");
27
+ if (parts.length < 2)
28
+ continue;
29
+ const prefix = parts[0];
30
+ // Only consider prefixes that look like abbreviations (2-5 chars, uppercase or mixed)
31
+ if (prefix.length < 2 || prefix.length > 10)
32
+ continue;
33
+ const existing = prefixMap.get(prefix);
34
+ if (existing) {
35
+ existing.count++;
36
+ if (obj.project)
37
+ existing.projects.add(obj.project);
38
+ }
39
+ else {
40
+ const projects = new Set();
41
+ if (obj.project)
42
+ projects.add(obj.project);
43
+ prefixMap.set(prefix, { count: 1, projects });
44
+ }
45
+ }
46
+ // Only return prefixes used more than once
47
+ return Array.from(prefixMap.entries())
48
+ .filter(([, v]) => v.count >= 2)
49
+ .map(([prefix, v]) => ({
50
+ prefix,
51
+ count: v.count,
52
+ projects: Array.from(v.projects),
53
+ }))
54
+ .sort((a, b) => b.count - a.count);
55
+ }
56
+ function extractRequiredProperties(objects) {
57
+ const byType = new Map();
58
+ const countByType = new Map();
59
+ for (const obj of objects) {
60
+ if (obj.parentName)
61
+ continue; // skip children
62
+ const typeMap = byType.get(obj.type) ?? new Map();
63
+ const count = (countByType.get(obj.type) ?? 0) + 1;
64
+ countByType.set(obj.type, count);
65
+ for (const prop of obj.properties) {
66
+ typeMap.set(prop.name, (typeMap.get(prop.name) ?? 0) + 1);
67
+ }
68
+ byType.set(obj.type, typeMap);
69
+ }
70
+ const results = [];
71
+ for (const [type, propMap] of byType.entries()) {
72
+ const total = countByType.get(type) ?? 1;
73
+ const frequency = {};
74
+ const required = [];
75
+ for (const [propName, count] of propMap.entries()) {
76
+ const ratio = count / total;
77
+ frequency[propName] = ratio;
78
+ // Property present in >=80% of objects of this type is "required"
79
+ if (ratio >= 0.8) {
80
+ required.push(propName);
81
+ }
82
+ }
83
+ results.push({
84
+ objectType: type,
85
+ properties: required.sort(),
86
+ frequency,
87
+ });
88
+ }
89
+ return results;
90
+ }
91
+ function computeFieldDistribution(objects) {
92
+ const bcs = objects.filter((o) => o.type === "business_component" && !o.parentName);
93
+ const fieldCounts = bcs.map((bc) => bc.children.filter((c) => c.type === "field").length);
94
+ if (fieldCounts.length === 0) {
95
+ return { avgFieldCount: 0, minFieldCount: 0, maxFieldCount: 0, medianFieldCount: 0 };
96
+ }
97
+ fieldCounts.sort((a, b) => a - b);
98
+ const sum = fieldCounts.reduce((s, c) => s + c, 0);
99
+ const mid = Math.floor(fieldCounts.length / 2);
100
+ return {
101
+ avgFieldCount: Math.round((sum / fieldCounts.length) * 100) / 100,
102
+ minFieldCount: fieldCounts[0],
103
+ maxFieldCount: fieldCounts[fieldCounts.length - 1],
104
+ medianFieldCount: fieldCounts.length % 2 === 0
105
+ ? (fieldCounts[mid - 1] + fieldCounts[mid]) / 2
106
+ : fieldCounts[mid],
107
+ };
108
+ }
109
+ function computeAppletClassDistribution(objects) {
110
+ const dist = {};
111
+ const applets = objects.filter((o) => o.type === "applet" && !o.parentName);
112
+ for (const applet of applets) {
113
+ const cls = applet.properties.find((p) => p.name === "CLASS")?.value;
114
+ if (cls) {
115
+ dist[cls] = (dist[cls] ?? 0) + 1;
116
+ }
117
+ }
118
+ return dist;
119
+ }
120
+ function calculateAdherence(obj, namingPatterns, requiredProps, appletClassDist) {
121
+ let score = 0;
122
+ let checks = 0;
123
+ // Check naming pattern adherence (30 pts)
124
+ checks++;
125
+ if (namingPatterns.length > 0) {
126
+ const firstWord = obj.name.split(" ")[0];
127
+ const matchesKnownPrefix = namingPatterns.some((p) => p.prefix === firstWord);
128
+ if (matchesKnownPrefix)
129
+ score += 30;
130
+ }
131
+ else {
132
+ score += 15; // neutral if no patterns known
133
+ }
134
+ // Check required properties (40 pts)
135
+ const typeProps = requiredProps.find((r) => r.objectType === obj.type);
136
+ if (typeProps && typeProps.properties.length > 0) {
137
+ checks++;
138
+ const objPropNames = new Set(obj.properties.map((p) => p.name));
139
+ const matched = typeProps.properties.filter((p) => objPropNames.has(p)).length;
140
+ score += Math.round((matched / typeProps.properties.length) * 40);
141
+ }
142
+ // Check applet class (30 pts)
143
+ if (obj.type === "applet") {
144
+ checks++;
145
+ const cls = obj.properties.find((p) => p.name === "CLASS")?.value;
146
+ if (cls && appletClassDist[cls]) {
147
+ score += 30;
148
+ }
149
+ }
150
+ else {
151
+ score += 30; // non-applet gets full marks for this check
152
+ }
153
+ return Math.min(100, score);
154
+ }
155
+ //# sourceMappingURL=pattern-analyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pattern-analyzer.js","sourceRoot":"","sources":["../../../src/core/siebel/pattern-analyzer.ts"],"names":[],"mappings":"AAAA;;GAEG;AA+BH;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,OAAuB;IACrD,MAAM,cAAc,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;IACtD,MAAM,kBAAkB,GAAG,yBAAyB,CAAC,OAAO,CAAC,CAAC;IAC9D,MAAM,iBAAiB,GAAG,wBAAwB,CAAC,OAAO,CAAC,CAAC;IAC5D,MAAM,uBAAuB,GAAG,8BAA8B,CAAC,OAAO,CAAC,CAAC;IAExE,MAAM,gBAAgB,GAAG,CAAC,GAAiB,EAAU,EAAE;QACrD,OAAO,kBAAkB,CAAC,GAAG,EAAE,cAAc,EAAE,kBAAkB,EAAE,uBAAuB,CAAC,CAAC;IAC9F,CAAC,CAAC;IAEF,OAAO;QACL,cAAc;QACd,kBAAkB;QAClB,iBAAiB;QACjB,uBAAuB;QACvB,gBAAgB;KACjB,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,OAAuB;IACpD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAoD,CAAC;IAE9E,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,SAAS;QAE/B,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACxB,sFAAsF;QACtF,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,EAAE;YAAE,SAAS;QAEtD,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACvC,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,KAAK,EAAE,CAAC;YACjB,IAAI,GAAG,CAAC,OAAO;gBAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACtD,CAAC;aAAM,CAAC;YACN,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;YACnC,IAAI,GAAG,CAAC,OAAO;gBAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC3C,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,2CAA2C;IAC3C,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;SACnC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;SAC/B,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACrB,MAAM;QACN,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;KACjC,CAAC,CAAC;SACF,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;AACvC,CAAC;AAED,SAAS,yBAAyB,CAAC,OAAuB;IACxD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAyC,CAAC;IAChE,MAAM,WAAW,GAAG,IAAI,GAAG,EAA4B,CAAC;IAExD,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,IAAI,GAAG,CAAC,UAAU;YAAE,SAAS,CAAC,gBAAgB;QAC9C,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,EAAkB,CAAC;QAClE,MAAM,KAAK,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACnD,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAEjC,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;YAClC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5D,CAAC;QACD,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAChC,CAAC;IAED,MAAM,OAAO,GAA8B,EAAE,CAAC;IAC9C,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;QAC/C,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,SAAS,GAA2B,EAAE,CAAC;QAC7C,MAAM,QAAQ,GAAa,EAAE,CAAC;QAE9B,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;YAClD,MAAM,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;YAC5B,SAAS,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;YAC5B,kEAAkE;YAClE,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC;gBACjB,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;QAED,OAAO,CAAC,IAAI,CAAC;YACX,UAAU,EAAE,IAAI;YAChB,UAAU,EAAE,QAAQ,CAAC,IAAI,EAAE;YAC3B,SAAS;SACV,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,wBAAwB,CAAC,OAAuB;IACvD,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,oBAAoB,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;IACpF,MAAM,WAAW,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC;IAE1F,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,CAAC;IACvF,CAAC;IAED,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAClC,MAAM,GAAG,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IACnD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAE/C,OAAO;QACL,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,WAAW,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG;QACjE,aAAa,EAAE,WAAW,CAAC,CAAC,CAAC;QAC7B,aAAa,EAAE,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;QAClD,gBAAgB,EAAE,WAAW,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC;YAC5C,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;YAC/C,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC;KACrB,CAAC;AACJ,CAAC;AAED,SAAS,8BAA8B,CAAC,OAAuB;IAC7D,MAAM,IAAI,GAA2B,EAAE,CAAC;IACxC,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;IAE5E,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,EAAE,KAAK,CAAC;QACrE,IAAI,GAAG,EAAE,CAAC;YACR,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,kBAAkB,CACzB,GAAiB,EACjB,cAA+B,EAC/B,aAAwC,EACxC,eAAuC;IAEvC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,0CAA0C;IAC1C,MAAM,EAAE,CAAC;IACT,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACzC,MAAM,kBAAkB,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;QAC9E,IAAI,kBAAkB;YAAE,KAAK,IAAI,EAAE,CAAC;IACtC,CAAC;SAAM,CAAC;QACN,KAAK,IAAI,EAAE,CAAC,CAAC,+BAA+B;IAC9C,CAAC;IAED,qCAAqC;IACrC,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC;IACvE,IAAI,SAAS,IAAI,SAAS,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjD,MAAM,EAAE,CAAC;QACT,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAChE,MAAM,OAAO,GAAG,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAC/E,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,8BAA8B;IAC9B,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC1B,MAAM,EAAE,CAAC;QACT,MAAM,GAAG,GAAG,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,EAAE,KAAK,CAAC;QAClE,IAAI,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;YAChC,KAAK,IAAI,EAAE,CAAC;QACd,CAAC;IACH,CAAC;SAAM,CAAC;QACN,KAAK,IAAI,EAAE,CAAC,CAAC,4CAA4C;IAC3D,CAAC;IAED,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AAC9B,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * ProfileAttr Flow Analyzer — maps Set/GetProfileAttr flows between scripts.
3
+ */
4
+ import type { SiebelObject } from "../../schemas/siebel.schema.js";
5
+ export interface AttrRef {
6
+ object: string;
7
+ method: string;
8
+ direction: "set" | "get";
9
+ }
10
+ export interface ProfileAttrInfo {
11
+ name: string;
12
+ producers: AttrRef[];
13
+ consumers: AttrRef[];
14
+ isOrphan: boolean;
15
+ isUnused: boolean;
16
+ }
17
+ export interface ProfileAttrFlowResult {
18
+ attrs: ProfileAttrInfo[];
19
+ orphanCount: number;
20
+ unusedCount: number;
21
+ }
22
+ /**
23
+ * Analyze ProfileAttr flow across all scripts.
24
+ */
25
+ export declare function analyzeProfileAttrFlow(objects: SiebelObject[]): ProfileAttrFlowResult;
26
+ //# sourceMappingURL=profileattr-flow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profileattr-flow.d.ts","sourceRoot":"","sources":["../../../src/core/siebel/profileattr-flow.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAEnE,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,KAAK,GAAG,KAAK,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,EAAE,CAAC;IACrB,SAAS,EAAE,OAAO,EAAE,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAKD;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,qBAAqB,CA4CrF"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * ProfileAttr Flow Analyzer — maps Set/GetProfileAttr flows between scripts.
3
+ */
4
+ const SET_PATTERN = /SetProfileAttr\s*\(\s*"([^"]+)"/g;
5
+ const GET_PATTERN = /GetProfileAttr\s*\(\s*"([^"]+)"/g;
6
+ /**
7
+ * Analyze ProfileAttr flow across all scripts.
8
+ */
9
+ export function analyzeProfileAttrFlow(objects) {
10
+ const attrMap = new Map();
11
+ for (const obj of objects) {
12
+ const scripts = obj.children.filter((c) => c.type === "escript");
13
+ for (const script of scripts) {
14
+ const sourceCode = script.properties.find((p) => p.name === "SOURCE_CODE")?.value ?? "";
15
+ const method = script.properties.find((p) => p.name === "METHOD")?.value ?? script.name;
16
+ if (!sourceCode)
17
+ continue;
18
+ // Extract SetProfileAttr
19
+ SET_PATTERN.lastIndex = 0;
20
+ let match;
21
+ while ((match = SET_PATTERN.exec(sourceCode)) !== null) {
22
+ const name = match[1];
23
+ const entry = attrMap.get(name) ?? { producers: [], consumers: [] };
24
+ entry.producers.push({ object: obj.name, method, direction: "set" });
25
+ attrMap.set(name, entry);
26
+ }
27
+ // Extract GetProfileAttr
28
+ GET_PATTERN.lastIndex = 0;
29
+ while ((match = GET_PATTERN.exec(sourceCode)) !== null) {
30
+ const name = match[1];
31
+ const entry = attrMap.get(name) ?? { producers: [], consumers: [] };
32
+ entry.consumers.push({ object: obj.name, method, direction: "get" });
33
+ attrMap.set(name, entry);
34
+ }
35
+ }
36
+ }
37
+ const attrs = Array.from(attrMap.entries()).map(([name, data]) => ({
38
+ name,
39
+ producers: data.producers,
40
+ consumers: data.consumers,
41
+ isOrphan: data.producers.length === 0 && data.consumers.length > 0,
42
+ isUnused: data.producers.length > 0 && data.consumers.length === 0,
43
+ }));
44
+ return {
45
+ attrs,
46
+ orphanCount: attrs.filter((a) => a.isOrphan).length,
47
+ unusedCount: attrs.filter((a) => a.isUnused).length,
48
+ };
49
+ }
50
+ //# sourceMappingURL=profileattr-flow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profileattr-flow.js","sourceRoot":"","sources":["../../../src/core/siebel/profileattr-flow.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Runtime Dependency Builder — creates runtime_depends_on edges from eScript references.
3
+ */
4
+ import type { SiebelObject, SiebelDependency } from "../../schemas/siebel.schema.js";
5
+ /**
6
+ * Build runtime dependency edges by analyzing eScript source code in all objects.
7
+ */
8
+ export declare function buildRuntimeDeps(objects: SiebelObject[]): SiebelDependency[];
9
+ //# sourceMappingURL=runtime-dep-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-dep-builder.d.ts","sourceRoot":"","sources":["../../../src/core/siebel/runtime-dep-builder.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAA4B,MAAM,gCAAgC,CAAC;AAa/G;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,gBAAgB,EAAE,CAiC5E"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Runtime Dependency Builder — creates runtime_depends_on edges from eScript references.
3
+ */
4
+ import { extractScriptReferences } from "./escript-crossref.js";
5
+ const REF_TYPE_TO_SIEBEL = {
6
+ business_object: "business_object",
7
+ business_component: "business_component",
8
+ business_service: "business_service",
9
+ field: "field",
10
+ profile_attr: "field",
11
+ lov: "field",
12
+ };
13
+ /**
14
+ * Build runtime dependency edges by analyzing eScript source code in all objects.
15
+ */
16
+ export function buildRuntimeDeps(objects) {
17
+ const deps = [];
18
+ const seen = new Set();
19
+ for (const obj of objects) {
20
+ const scripts = obj.children.filter((c) => c.type === "escript");
21
+ for (const script of scripts) {
22
+ const sourceCode = script.properties.find((p) => p.name === "SOURCE_CODE")?.value ?? "";
23
+ const methodName = script.properties.find((p) => p.name === "METHOD")?.value ?? script.name;
24
+ if (!sourceCode)
25
+ continue;
26
+ const refs = extractScriptReferences(sourceCode, obj.name, methodName);
27
+ for (const ref of refs) {
28
+ // Only create deps for object-level refs (not fields/LOVs)
29
+ const siebelType = REF_TYPE_TO_SIEBEL[ref.type];
30
+ if (!siebelType || ref.type === "field" || ref.type === "profile_attr" || ref.type === "lov")
31
+ continue;
32
+ const key = `${obj.type}:${obj.name}→${siebelType}:${ref.name}`;
33
+ if (seen.has(key))
34
+ continue;
35
+ seen.add(key);
36
+ deps.push({
37
+ from: { name: obj.name, type: obj.type },
38
+ to: { name: ref.name, type: siebelType },
39
+ relationType: "runtime_depends_on",
40
+ inferred: true,
41
+ });
42
+ }
43
+ }
44
+ }
45
+ return deps;
46
+ }
47
+ //# sourceMappingURL=runtime-dep-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-dep-builder.js","sourceRoot":"","sources":["../../../src/core/siebel/runtime-dep-builder.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAGhE,MAAM,kBAAkB,GAAkC;IACxD,eAAe,EAAE,iBAAiB;IAClC,kBAAkB,EAAE,oBAAoB;IACxC,gBAAgB,EAAE,kBAAkB;IACpC,KAAK,EAAE,OAAO;IACd,YAAY,EAAE,OAAO;IACrB,GAAG,EAAE,OAAO;CACb,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAuB;IACtD,MAAM,IAAI,GAAuB,EAAE,CAAC;IACpC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAE/B,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;QACjE,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC;YACxF,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,EAAE,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC;YAE5F,IAAI,CAAC,UAAU;gBAAE,SAAS;YAE1B,MAAM,IAAI,GAAG,uBAAuB,CAAC,UAAU,EAAE,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YACvE,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACvB,2DAA2D;gBAC3D,MAAM,UAAU,GAAG,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAChD,IAAI,CAAC,UAAU,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,IAAI,GAAG,CAAC,IAAI,KAAK,cAAc,IAAI,GAAG,CAAC,IAAI,KAAK,KAAK;oBAAE,SAAS;gBAEvG,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,UAAU,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;gBAChE,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;oBAAE,SAAS;gBAC5B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAEd,IAAI,CAAC,IAAI,CAAC;oBACR,IAAI,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE;oBACxC,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,UAA4C,EAAE;oBAC1E,YAAY,EAAE,oBAAgD;oBAC9D,QAAQ,EAAE,IAAI;iBACf,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Scaffold Generator — generates complete Siebel object sets from natural language descriptions.
3
+ *
4
+ * Given a description like "list applet for orders with fields order number, date, status",
5
+ * generates BC + Applet + View (+ optional Screen) with correct properties, naming conventions,
6
+ * and SIF XML.
7
+ *
8
+ * Uses template-learner.ts to learn from real repository objects and apply realistic patterns.
9
+ */
10
+ import type { SiebelObject } from "../../schemas/siebel.schema.js";
11
+ export interface ScaffoldRequest {
12
+ readonly description: string;
13
+ readonly prefix: string;
14
+ readonly projectName: string;
15
+ readonly referenceObjects: readonly SiebelObject[];
16
+ readonly includeScriptBoilerplate?: boolean;
17
+ }
18
+ export interface ScaffoldResult {
19
+ readonly objects: readonly SiebelObject[];
20
+ readonly sifXml: string;
21
+ readonly validationScore: number;
22
+ readonly scriptBoilerplate?: readonly string[];
23
+ }
24
+ export declare function scaffoldSiebelObjects(request: ScaffoldRequest): ScaffoldResult;
25
+ //# sourceMappingURL=scaffold-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffold-generator.d.ts","sourceRoot":"","sources":["../../../src/core/siebel/scaffold-generator.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAoB,MAAM,gCAAgC,CAAC;AAOrF,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,gBAAgB,EAAE,SAAS,YAAY,EAAE,CAAC;IACnD,QAAQ,CAAC,wBAAwB,CAAC,EAAE,OAAO,CAAC;CAC7C;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,CAAC;IAC1C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAChD;AAkHD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,eAAe,GAAG,cAAc,CA8J9E"}