sdlc-agent-4-enterprise-server 1.22.0 → 1.23.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 (160) hide show
  1. package/README.md +2 -1
  2. package/dist/modules/pega/PegaGraphProjector.d.ts +16 -0
  3. package/dist/modules/pega/PegaGraphProjector.js +57 -0
  4. package/dist/modules/pega/PegaGraphProjector.js.map +1 -0
  5. package/dist/modules/pega/PegaService.d.ts +3 -0
  6. package/dist/modules/pega/PegaService.js +16 -78
  7. package/dist/modules/pega/PegaService.js.map +1 -1
  8. package/dist/modules/pega/harness-schema/HarnessSchemaGenerator.d.ts +50 -0
  9. package/dist/modules/pega/harness-schema/HarnessSchemaGenerator.js +120 -0
  10. package/dist/modules/pega/harness-schema/HarnessSchemaGenerator.js.map +1 -0
  11. package/dist/modules/pega/harness-schema/cache/SchemaCacheManager.d.ts +25 -0
  12. package/dist/modules/pega/harness-schema/cache/SchemaCacheManager.js +84 -0
  13. package/dist/modules/pega/harness-schema/cache/SchemaCacheManager.js.map +1 -0
  14. package/dist/modules/pega/harness-schema/fetcher/HarnessFetcher.d.ts +56 -0
  15. package/dist/modules/pega/harness-schema/fetcher/HarnessFetcher.js +88 -0
  16. package/dist/modules/pega/harness-schema/fetcher/HarnessFetcher.js.map +1 -0
  17. package/dist/modules/pega/harness-schema/generator/FormatTypeMapper.d.ts +32 -0
  18. package/dist/modules/pega/harness-schema/generator/FormatTypeMapper.js +45 -0
  19. package/dist/modules/pega/harness-schema/generator/FormatTypeMapper.js.map +1 -0
  20. package/dist/modules/pega/harness-schema/generator/ReportBuilder.d.ts +18 -0
  21. package/dist/modules/pega/harness-schema/generator/ReportBuilder.js +42 -0
  22. package/dist/modules/pega/harness-schema/generator/ReportBuilder.js.map +1 -0
  23. package/dist/modules/pega/harness-schema/generator/SchemaBuilder.d.ts +48 -0
  24. package/dist/modules/pega/harness-schema/generator/SchemaBuilder.js +136 -0
  25. package/dist/modules/pega/harness-schema/generator/SchemaBuilder.js.map +1 -0
  26. package/dist/modules/pega/harness-schema/index.d.ts +31 -0
  27. package/dist/modules/pega/harness-schema/index.js +23 -0
  28. package/dist/modules/pega/harness-schema/index.js.map +1 -0
  29. package/dist/modules/pega/harness-schema/models/CacheManifest.d.ts +18 -0
  30. package/dist/modules/pega/harness-schema/models/CacheManifest.js +6 -0
  31. package/dist/modules/pega/harness-schema/models/CacheManifest.js.map +1 -0
  32. package/dist/modules/pega/harness-schema/models/ExtractedField.d.ts +18 -0
  33. package/dist/modules/pega/harness-schema/models/ExtractedField.js +2 -0
  34. package/dist/modules/pega/harness-schema/models/ExtractedField.js.map +1 -0
  35. package/dist/modules/pega/harness-schema/models/GenerationReport.d.ts +32 -0
  36. package/dist/modules/pega/harness-schema/models/GenerationReport.js +6 -0
  37. package/dist/modules/pega/harness-schema/models/GenerationReport.js.map +1 -0
  38. package/dist/modules/pega/harness-schema/models/ParsedHarness.d.ts +27 -0
  39. package/dist/modules/pega/harness-schema/models/ParsedHarness.js +2 -0
  40. package/dist/modules/pega/harness-schema/models/ParsedHarness.js.map +1 -0
  41. package/dist/modules/pega/harness-schema/models/ParsedSection.d.ts +20 -0
  42. package/dist/modules/pega/harness-schema/models/ParsedSection.js +2 -0
  43. package/dist/modules/pega/harness-schema/models/ParsedSection.js.map +1 -0
  44. package/dist/modules/pega/harness-schema/models/RepeatDefinition.d.ts +16 -0
  45. package/dist/modules/pega/harness-schema/models/RepeatDefinition.js +2 -0
  46. package/dist/modules/pega/harness-schema/models/RepeatDefinition.js.map +1 -0
  47. package/dist/modules/pega/harness-schema/models/ResolvedContext.d.ts +15 -0
  48. package/dist/modules/pega/harness-schema/models/ResolvedContext.js +6 -0
  49. package/dist/modules/pega/harness-schema/models/ResolvedContext.js.map +1 -0
  50. package/dist/modules/pega/harness-schema/models/TemplateMarker.d.ts +12 -0
  51. package/dist/modules/pega/harness-schema/models/TemplateMarker.js +2 -0
  52. package/dist/modules/pega/harness-schema/models/TemplateMarker.js.map +1 -0
  53. package/dist/modules/pega/harness-schema/models/index.d.ts +12 -0
  54. package/dist/modules/pega/harness-schema/models/index.js +2 -0
  55. package/dist/modules/pega/harness-schema/models/index.js.map +1 -0
  56. package/dist/modules/pega/harness-schema/parser/FieldExtractor.d.ts +27 -0
  57. package/dist/modules/pega/harness-schema/parser/FieldExtractor.js +61 -0
  58. package/dist/modules/pega/harness-schema/parser/FieldExtractor.js.map +1 -0
  59. package/dist/modules/pega/harness-schema/parser/HarnessParser.d.ts +34 -0
  60. package/dist/modules/pega/harness-schema/parser/HarnessParser.js +145 -0
  61. package/dist/modules/pega/harness-schema/parser/HarnessParser.js.map +1 -0
  62. package/dist/modules/pega/harness-schema/resolver/ClassHierarchyResolver.d.ts +41 -0
  63. package/dist/modules/pega/harness-schema/resolver/ClassHierarchyResolver.js +63 -0
  64. package/dist/modules/pega/harness-schema/resolver/ClassHierarchyResolver.js.map +1 -0
  65. package/dist/modules/pega/harness-schema/resolver/PageContextResolver.d.ts +33 -0
  66. package/dist/modules/pega/harness-schema/resolver/PageContextResolver.js +77 -0
  67. package/dist/modules/pega/harness-schema/resolver/PageContextResolver.js.map +1 -0
  68. package/dist/modules/pega/harness-schema/validator/SchemaValidator.d.ts +47 -0
  69. package/dist/modules/pega/harness-schema/validator/SchemaValidator.js +95 -0
  70. package/dist/modules/pega/harness-schema/validator/SchemaValidator.js.map +1 -0
  71. package/dist/modules/pega/pega-utils.d.ts +4 -0
  72. package/dist/modules/pega/pega-utils.js +53 -0
  73. package/dist/modules/pega/pega-utils.js.map +1 -0
  74. package/dist/server/HttpServer.js +14 -1
  75. package/dist/server/HttpServer.js.map +1 -1
  76. package/dist/server/routes/pega-api.js +2 -1
  77. package/dist/server/routes/pega-api.js.map +1 -1
  78. package/dist/server/routes/pega-job-store.d.ts +62 -0
  79. package/dist/server/routes/pega-job-store.js +87 -0
  80. package/dist/server/routes/pega-job-store.js.map +1 -0
  81. package/dist/server/routes/pega-schema-routes.d.ts +12 -0
  82. package/dist/server/routes/pega-schema-routes.js +79 -0
  83. package/dist/server/routes/pega-schema-routes.js.map +1 -0
  84. package/dist/server/routes/pega-stream-helpers.d.ts +33 -0
  85. package/dist/server/routes/pega-stream-helpers.js +73 -0
  86. package/dist/server/routes/pega-stream-helpers.js.map +1 -0
  87. package/dist/server/routes/pega-stream.d.ts +15 -0
  88. package/dist/server/routes/pega-stream.js +136 -0
  89. package/dist/server/routes/pega-stream.js.map +1 -0
  90. package/dist/types.d.ts +0 -1
  91. package/dist/types.js +1 -4
  92. package/dist/types.js.map +1 -1
  93. package/package.json +3 -1
  94. package/src/modules/pega/PegaGraphProjector.ts +74 -0
  95. package/src/modules/pega/PegaService.ts +17 -87
  96. package/src/modules/pega/harness-schema/HarnessSchemaGenerator.ts +152 -0
  97. package/src/modules/pega/harness-schema/cache/SchemaCacheManager.ts +92 -0
  98. package/src/modules/pega/harness-schema/fetcher/HarnessFetcher.ts +128 -0
  99. package/src/modules/pega/harness-schema/generator/FormatTypeMapper.ts +60 -0
  100. package/src/modules/pega/harness-schema/generator/ReportBuilder.ts +56 -0
  101. package/src/modules/pega/harness-schema/generator/SchemaBuilder.ts +186 -0
  102. package/src/modules/pega/harness-schema/index.ts +63 -0
  103. package/src/modules/pega/harness-schema/models/CacheManifest.ts +20 -0
  104. package/src/modules/pega/harness-schema/models/ExtractedField.ts +18 -0
  105. package/src/modules/pega/harness-schema/models/GenerationReport.ts +35 -0
  106. package/src/modules/pega/harness-schema/models/ParsedHarness.ts +30 -0
  107. package/src/modules/pega/harness-schema/models/ParsedSection.ts +28 -0
  108. package/src/modules/pega/harness-schema/models/RepeatDefinition.ts +17 -0
  109. package/src/modules/pega/harness-schema/models/ResolvedContext.ts +17 -0
  110. package/src/modules/pega/harness-schema/models/TemplateMarker.ts +12 -0
  111. package/src/modules/pega/harness-schema/models/index.ts +16 -0
  112. package/src/modules/pega/harness-schema/parser/FieldExtractor.ts +71 -0
  113. package/src/modules/pega/harness-schema/parser/HarnessParser.ts +176 -0
  114. package/src/modules/pega/harness-schema/resolver/ClassHierarchyResolver.ts +91 -0
  115. package/src/modules/pega/harness-schema/resolver/PageContextResolver.ts +121 -0
  116. package/src/modules/pega/harness-schema/validator/SchemaValidator.ts +126 -0
  117. package/src/modules/pega/pega-utils.ts +55 -0
  118. package/src/server/HttpServer.ts +15 -1
  119. package/src/server/routes/pega-api.ts +2 -1
  120. package/src/server/routes/pega-job-store.ts +126 -0
  121. package/src/server/routes/pega-schema-routes.ts +101 -0
  122. package/src/server/routes/pega-stream-helpers.ts +126 -0
  123. package/src/server/routes/pega-stream.ts +159 -0
  124. package/src/types.ts +0 -5
  125. package/electron/app/ipc/api_handlers.ts +0 -164
  126. package/electron/app/ipc/export_handlers.ts +0 -583
  127. package/electron/app/ipc/footer_handlers.ts +0 -32
  128. package/electron/app/ipc/index.ts +0 -21
  129. package/electron/app/ipc/log_handler.ts +0 -50
  130. package/electron/app/ipc/read_file.ts +0 -14
  131. package/electron/app/ipc/slide_metadata.ts +0 -378
  132. package/electron/app/ipc/theme_handlers.ts +0 -32
  133. package/electron/app/ipc/upload_image.ts +0 -28
  134. package/electron/app/ipc/user_config_handlers.ts +0 -16
  135. package/electron/app/main.ts +0 -630
  136. package/electron/app/preloads/index.ts +0 -34
  137. package/electron/app/preloads/pptx-export.ts +0 -13
  138. package/electron/app/preloads/sentry.ts +0 -77
  139. package/electron/app/sentry/main.ts +0 -169
  140. package/electron/app/services/settings-store.ts +0 -84
  141. package/electron/app/types/index.d.ts +0 -173
  142. package/electron/app/utils/chromium-cache-recovery.ts +0 -235
  143. package/electron/app/utils/constants.ts +0 -337
  144. package/electron/app/utils/dialog.ts +0 -43
  145. package/electron/app/utils/export-chromium.ts +0 -471
  146. package/electron/app/utils/export-msix-runtime.ts +0 -233
  147. package/electron/app/utils/imagemagick-runtime.ts +0 -208
  148. package/electron/app/utils/index.ts +0 -93
  149. package/electron/app/utils/lifecycle.ts +0 -147
  150. package/electron/app/utils/liteparse-check.ts +0 -6
  151. package/electron/app/utils/memory.ts +0 -38
  152. package/electron/app/utils/open-target.ts +0 -116
  153. package/electron/app/utils/readable-file-access.ts +0 -93
  154. package/electron/app/utils/safe-console.ts +0 -100
  155. package/electron/app/utils/servers.ts +0 -393
  156. package/electron/app/utils/update-checker.ts +0 -390
  157. package/electron/app/utils/user-config-store.ts +0 -232
  158. package/electron/build.js +0 -536
  159. package/electron/resources/ui/homepage/script.js +0 -46
  160. package/electron/scripts/rebuild_notice_all.py +0 -334
package/README.md CHANGED
@@ -6,7 +6,7 @@
6
6
  </p>
7
7
 
8
8
  <p align="center">
9
- <img src="https://img.shields.io/badge/version-1.21.0-blue?style=for-the-badge" alt="Version">
9
+ <img src="https://img.shields.io/badge/version-1.23.0-blue?style=for-the-badge" alt="Version">
10
10
  <img src="https://img.shields.io/badge/tools-66+-teal?style=for-the-badge" alt="Tools">
11
11
  <img src="https://img.shields.io/badge/node-%3E%3D18-green?style=for-the-badge" alt="Node">
12
12
  </p>
@@ -258,3 +258,4 @@ The embedding model is expected at `.code-intel/models/model.onnx`. Download it:
258
258
  ## License
259
259
 
260
260
  MIT
261
+
@@ -0,0 +1,16 @@
1
+ /**
2
+ * PegaGraphProjector — Projects Pega rules into graph_nodes + creates dependency edges.
3
+ * Extracted from PegaService to keep files ≤200 LOC.
4
+ */
5
+ import type { DatabaseAdapter } from '../../database/adapters/DatabaseAdapter.js';
6
+ import type { UnresolvedDependency } from './models.js';
7
+ /**
8
+ * Insert/update a graph node for an ingested Pega rule.
9
+ * @returns The graph node ID (pega:{fqn}).
10
+ */
11
+ export declare function projectRuleToGraphNode(adapter: DatabaseAdapter, fqn: string, pxObjClass: string, projectId: string): Promise<string>;
12
+ /**
13
+ * Create graph edges from a rule node to its extracted dependencies.
14
+ * Uses ON CONFLICT DO NOTHING for idempotency — target node may not exist yet.
15
+ */
16
+ export declare function createDependencyEdges(adapter: DatabaseAdapter, sourceNodeId: string, deps: UnresolvedDependency[]): Promise<void>;
@@ -0,0 +1,57 @@
1
+ import { pxObjClassToGraphType } from './pega-utils.js';
2
+ /**
3
+ * Insert/update a graph node for an ingested Pega rule.
4
+ * @returns The graph node ID (pega:{fqn}).
5
+ */
6
+ export async function projectRuleToGraphNode(adapter, fqn, pxObjClass, projectId) {
7
+ const graphNodeId = `pega:${fqn}`;
8
+ const graphType = pxObjClassToGraphType(pxObjClass);
9
+ const x = Math.floor(Math.random() * 400) - 200;
10
+ const y = Math.floor(Math.random() * 400) - 200;
11
+ const engine = adapter.getEngine();
12
+ if (engine === 'postgresql') {
13
+ await adapter.runAsync(`INSERT INTO graph_nodes (entry_id, label, type, tier, project_id, x, y, z, level, cluster_id)
14
+ VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)
15
+ ON CONFLICT (entry_id) DO UPDATE SET label = EXCLUDED.label, type = EXCLUDED.type`, [graphNodeId, fqn, graphType, 'SEMANTIC', projectId, x, y, 0, 0, 'pega-cluster']);
16
+ }
17
+ else {
18
+ await adapter.runAsync(`INSERT OR REPLACE INTO graph_nodes (entry_id, label, type, tier, project_id, x, y, z, level, cluster_id)
19
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, [graphNodeId, fqn, graphType, 'SEMANTIC', projectId, x, y, 0, 0, 'pega-cluster']);
20
+ }
21
+ return graphNodeId;
22
+ }
23
+ /**
24
+ * Create graph edges from a rule node to its extracted dependencies.
25
+ * Uses ON CONFLICT DO NOTHING for idempotency — target node may not exist yet.
26
+ */
27
+ export async function createDependencyEdges(adapter, sourceNodeId, deps) {
28
+ if (deps.length === 0)
29
+ return;
30
+ const sql = adapter.getEngine() === 'sqlite'
31
+ ? `INSERT OR IGNORE INTO graph_edges (source, target, weight, rel_type) VALUES (?, ?, ?, ?)`
32
+ : `INSERT INTO graph_edges (source, target, weight, rel_type) VALUES ($1, $2, $3, $4) ON CONFLICT (source, target) DO NOTHING`;
33
+ for (const dep of deps) {
34
+ const targetFqn = `${dep.ruleType}:${dep.className}:${dep.ruleName}`;
35
+ const targetNodeId = `pega:${targetFqn}`;
36
+ const relType = mapDependencyRelType(dep.ruleType);
37
+ try {
38
+ await adapter.runAsync(sql, [sourceNodeId, targetNodeId, 0.7, relType]);
39
+ }
40
+ catch { /* non-fatal — target node may not exist yet */ }
41
+ }
42
+ }
43
+ /** Map Pega rule type to relationship type for graph edges. */
44
+ function mapDependencyRelType(ruleType) {
45
+ if (ruleType.includes('Activity') || ruleType.includes('Flow'))
46
+ return 'CALLS';
47
+ if (ruleType.includes('Class'))
48
+ return 'INHERITS';
49
+ if (ruleType.includes('Property'))
50
+ return 'HAS_PROPERTY';
51
+ if (ruleType.includes('Connect'))
52
+ return 'CONNECTS_TO';
53
+ if (ruleType.includes('Decision') || ruleType.includes('When'))
54
+ return 'EVALUATES';
55
+ return 'USES';
56
+ }
57
+ //# sourceMappingURL=PegaGraphProjector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PegaGraphProjector.js","sourceRoot":"","sources":["../../../src/modules/pega/PegaGraphProjector.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAExD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,OAAwB,EACxB,GAAW,EACX,UAAkB,EAClB,SAAiB;IAEjB,MAAM,WAAW,GAAG,QAAQ,GAAG,EAAE,CAAC;IAClC,MAAM,SAAS,GAAG,qBAAqB,CAAC,UAAU,CAAC,CAAC;IACpD,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IAChD,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IAEhD,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IACnC,IAAI,MAAM,KAAK,YAAY,EAAE,CAAC;QAC5B,MAAM,OAAO,CAAC,QAAQ,CACpB;;yFAEmF,EACnF,CAAC,WAAW,EAAE,GAAG,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,cAAc,CAAC,CACjF,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,MAAM,OAAO,CAAC,QAAQ,CACpB;6CACuC,EACvC,CAAC,WAAW,EAAE,GAAG,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,cAAc,CAAC,CACjF,CAAC;IACJ,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,OAAwB,EACxB,YAAoB,EACpB,IAA4B;IAE5B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAC9B,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,EAAE,KAAK,QAAQ;QAC1C,CAAC,CAAC,0FAA0F;QAC5F,CAAC,CAAC,4HAA4H,CAAC;IAEjI,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,SAAS,GAAG,GAAG,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;QACrE,MAAM,YAAY,GAAG,QAAQ,SAAS,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACnD,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;QAC1E,CAAC;QAAC,MAAM,CAAC,CAAC,+CAA+C,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC;AAED,+DAA+D;AAC/D,SAAS,oBAAoB,CAAC,QAAgB;IAC5C,IAAI,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,OAAO,CAAC;IAC/E,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,UAAU,CAAC;IAClD,IAAI,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC;QAAE,OAAO,cAAc,CAAC;IACzD,IAAI,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC;QAAE,OAAO,aAAa,CAAC;IACvD,IAAI,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,WAAW,CAAC;IACnF,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -1,3 +1,6 @@
1
+ /**
2
+ * PegaService — Logic nghiệp vụ cho Pega Rule & Data Indexing & Schema Storage.
3
+ */
1
4
  import type { MemoryEngine } from '../memory/engine/core.js';
2
5
  import type { PegaCheckRuleRequest, PegaCheckRuleResponse, PegaIngestRuleRequest, PegaIngestRuleResponse } from './models.js';
3
6
  import type { PegaRuleKbSchema } from './strategies/KbDrivenPegaParserStrategy.js';
@@ -1,62 +1,9 @@
1
- /**
2
- * PegaService — Logic nghiệp vụ cho Pega Rule & Data Indexing & Schema Storage.
3
- */
4
- import * as fs from 'fs';
5
- import * as path from 'path';
6
- import { fileURLToPath } from 'url';
7
1
  import { PegaParser } from './PegaParser.js';
8
2
  import { PegaSchemaLoader } from './PegaSchemaLoader.js';
9
3
  import { PegaDeclarativeEngine } from './PegaDeclarativeEngine.js';
10
4
  import { PegaRuleAstParser } from './PegaRuleAstParser.js';
11
- const __dirname = path.dirname(fileURLToPath(import.meta.url));
12
- function extractTagValueCsv(tags, key) {
13
- for (const tag of tags.split(',')) {
14
- const trimmed = tag.trim();
15
- if (trimmed.startsWith(key + ':'))
16
- return trimmed.slice(key.length + 1);
17
- }
18
- return null;
19
- }
20
- const CATEGORY_RULES_PATH = path.resolve(__dirname, '../../../.code-intel/pega-categories.json');
21
- function loadCategoryRules() {
22
- try {
23
- if (fs.existsSync(CATEGORY_RULES_PATH)) {
24
- const raw = JSON.parse(fs.readFileSync(CATEGORY_RULES_PATH, 'utf-8'));
25
- if (Array.isArray(raw.rules) && raw.rules.length > 0)
26
- return raw.rules;
27
- }
28
- }
29
- catch { /* ignore */ }
30
- return [];
31
- }
32
- function autoCategory(shortName) {
33
- const segment = shortName.replace(/^Rule-Obj-/i, '').split('-')[0];
34
- if (!segment)
35
- return 'OTHER';
36
- const normalized = segment
37
- .replace(/([A-Z])/g, '_$1')
38
- .replace(/^_/, '')
39
- .toUpperCase();
40
- return normalized;
41
- }
42
- let _categoryRules = null;
43
- function getCategoryRules() {
44
- if (_categoryRules === null)
45
- _categoryRules = loadCategoryRules();
46
- return _categoryRules;
47
- }
48
- function pxObjClassToGraphType(pxObjClass) {
49
- // 1. Try config rules
50
- const rules = getCategoryRules();
51
- for (const rule of rules) {
52
- for (const kw of rule.keywords) {
53
- if (pxObjClass.includes(kw))
54
- return rule.category;
55
- }
56
- }
57
- // 2. Auto: extract first segment after Rule-Obj-
58
- return autoCategory(pxObjClass);
59
- }
5
+ import { extractTagValueCsv, pxObjClassToGraphType } from './pega-utils.js';
6
+ import { projectRuleToGraphNode, createDependencyEdges } from './PegaGraphProjector.js';
60
7
  export class PegaService {
61
8
  memoryEngine;
62
9
  parser;
@@ -69,9 +16,7 @@ export class PegaService {
69
16
  this.astParser = new PegaRuleAstParser();
70
17
  this.initSchemasInDb().catch(() => { });
71
18
  }
72
- getDeclarativeEngine() {
73
- return this.declarativeEngine;
74
- }
19
+ getDeclarativeEngine() { return this.declarativeEngine; }
75
20
  async initSchemasInDb() {
76
21
  const schemas = await this.getSchemasFromDb();
77
22
  if (schemas.length > 0)
@@ -151,12 +96,8 @@ export class PegaService {
151
96
  return null;
152
97
  }
153
98
  }
154
- getAstParser() {
155
- return this.astParser;
156
- }
157
- parseRuleToAst(ruleJson) {
158
- return this.astParser.parse(ruleJson);
159
- }
99
+ getAstParser() { return this.astParser; }
100
+ parseRuleToAst(ruleJson) { return this.astParser.parse(ruleJson); }
160
101
  ruleToPromptContext(ruleJson) {
161
102
  const ast = this.parseRuleToAst(ruleJson);
162
103
  return this.astParser.toPromptContext(ast);
@@ -184,7 +125,14 @@ export class PegaService {
184
125
  return count;
185
126
  }
186
127
  async ingestRule(req) {
187
- const symbol = this.parser.parseSymbol(req.ruleJson);
128
+ let symbol;
129
+ try {
130
+ symbol = this.parser.parseSymbol(req.ruleJson);
131
+ }
132
+ catch {
133
+ // Rule type not supported by parser — skip gracefully instead of crashing stream
134
+ return { status: 'success', ruleId: -1, unresolvedDependencies: [] };
135
+ }
188
136
  const deps = this.parser.extractDependencies(req.ruleJson);
189
137
  if (req.checksum) {
190
138
  const { exists, checksumMatch } = await this.checkRuleWithChecksum(req.projectId, symbol.fqn, req.checksum);
@@ -231,20 +179,10 @@ export class PegaService {
231
179
  source: astSource,
232
180
  tags: 'pega,ast',
233
181
  });
234
- // Project into graph_nodes for KB Graph visualization
235
- const graphType = pxObjClassToGraphType(pxObjClass);
182
+ // Project into graph_nodes + create dependency edges
236
183
  try {
237
- const graphNodeId = `pega:${symbol.fqn}`;
238
- const engine = adapter.getEngine();
239
- if (engine === 'postgresql') {
240
- await adapter.runAsync(`INSERT INTO graph_nodes (entry_id, label, type, tier, project_id, x, y, z, level, cluster_id)
241
- VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)
242
- ON CONFLICT (entry_id) DO UPDATE SET label = EXCLUDED.label, type = EXCLUDED.type`, [graphNodeId, symbol.fqn, graphType, 'SEMANTIC', req.projectId, Math.floor(Math.random() * 400) - 200, Math.floor(Math.random() * 400) - 200, 0, 0, 'pega-cluster']);
243
- }
244
- else {
245
- await adapter.runAsync(`INSERT OR REPLACE INTO graph_nodes (entry_id, label, type, tier, project_id, x, y, z, level, cluster_id)
246
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, [graphNodeId, symbol.fqn, graphType, 'SEMANTIC', req.projectId, Math.floor(Math.random() * 400) - 200, Math.floor(Math.random() * 400) - 200, 0, 0, 'pega-cluster']);
247
- }
184
+ const graphNodeId = await projectRuleToGraphNode(adapter, symbol.fqn, pxObjClass, req.projectId);
185
+ await createDependencyEdges(adapter, graphNodeId, deps);
248
186
  }
249
187
  catch { /* non-fatal graph projection */ }
250
188
  return { status: 'success', ruleId: id, unresolvedDependencies: deps };
@@ -1 +1 @@
1
- {"version":3,"file":"PegaService.js","sourceRoot":"","sources":["../../../src/modules/pega/PegaService.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAQpC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAGzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE/D,SAAS,kBAAkB,CAAC,IAAY,EAAE,GAAW;IACnD,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QAC3B,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,GAAG,GAAG,CAAC;YAAE,OAAO,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAID,MAAM,mBAAmB,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,2CAA2C,CAAC,CAAC;AAEjG,SAAS,iBAAiB;IACxB,IAAI,CAAC;QACH,IAAI,EAAE,CAAC,UAAU,CAAC,mBAAmB,CAAC,EAAE,CAAC;YACvC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC,CAAC;YACtE,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,GAAG,CAAC,KAAK,CAAC;QACzE,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;IACxB,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,YAAY,CAAC,SAAiB;IACrC,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACnE,IAAI,CAAC,OAAO;QAAE,OAAO,OAAO,CAAC;IAC7B,MAAM,UAAU,GAAG,OAAO;SACvB,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC;SAC1B,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;SACjB,WAAW,EAAE,CAAC;IACjB,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,IAAI,cAAc,GAA0B,IAAI,CAAC;AACjD,SAAS,gBAAgB;IACvB,IAAI,cAAc,KAAK,IAAI;QAAE,cAAc,GAAG,iBAAiB,EAAE,CAAC;IAClE,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,SAAS,qBAAqB,CAAC,UAAkB;IAC/C,sBAAsB;IACtB,MAAM,KAAK,GAAG,gBAAgB,EAAE,CAAC;IACjC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC/B,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAAE,OAAO,IAAI,CAAC,QAAQ,CAAC;QACpD,CAAC;IACH,CAAC;IACD,iDAAiD;IACjD,OAAO,YAAY,CAAC,UAAU,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,OAAO,WAAW;IAKF;IAJZ,MAAM,CAAa;IACnB,iBAAiB,CAAwB;IACzC,SAAS,CAAoB;IAErC,YAAoB,YAA0B;QAA1B,iBAAY,GAAZ,YAAY,CAAc;QAC5C,IAAI,CAAC,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC/B,IAAI,CAAC,iBAAiB,GAAG,IAAI,qBAAqB,EAAE,CAAC;QACrD,IAAI,CAAC,SAAS,GAAG,IAAI,iBAAiB,EAAE,CAAC;QACzC,IAAI,CAAC,eAAe,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACzC,CAAC;IAEM,oBAAoB;QACzB,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAChC,CAAC;IAEO,KAAK,CAAC,eAAe;QAC3B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC9C,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO;QAC/B,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,gBAAgB,CAAC,cAAc,EAAE,CAAC;YACrD,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;gBAC9B,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC;IAC7B,CAAC;IAEM,KAAK,CAAC,gBAAgB;QAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC;QAC/C,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,QAAQ,CACjC,kEAAkE,EAClE,EAAE,CACH,CAAC;QACF,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACpB,IAAI,CAAC;gBAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAqB,CAAC;YAAC,CAAC;YACzD,MAAM,CAAC;gBAAC,OAAO,IAAI,CAAC;YAAC,CAAC;QACxB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAyB,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;IACtD,CAAC;IAEM,KAAK,CAAC,gBAAgB,CAAC,MAAwB;QACpD,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC;QAC/C,MAAM,SAAS,GAAG,eAAe,MAAM,CAAC,WAAW,EAAE,CAAC;QACtD,MAAM,OAAO,CAAC,QAAQ,CAAC,0EAA0E,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;QAChH,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;YAC7B,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;YAC/B,OAAO,EAAE,qBAAqB,MAAM,CAAC,WAAW,EAAE;YAClD,IAAI,EAAE,aAAa;YACnB,IAAI,EAAE,UAAU;YAChB,KAAK,EAAE,QAAQ;YACf,UAAU,EAAE,QAAQ;YACpB,MAAM,EAAE,SAAS;YACjB,IAAI,EAAE,aAAa;SACpB,CAAC,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,qBAAqB,CAChC,SAAiB,EACjB,MAAc,EACd,QAAiB;QAEjB,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC;QAC/C,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,QAAQ,CAChC,0IAA0I,EAC1I,CAAC,SAAS,EAAE,MAAM,CAAC,CACpB,CAAC;QACF,IAAI,CAAC,GAAG;YAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;QACzD,IAAI,CAAC,QAAQ;YAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;QAC7D,2EAA2E;QAC3E,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACvC,IAAI,MAAM,CAAC,UAAU;gBAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;QAChG,CAAC;QAAC,MAAM,CAAC,CAAC,qCAAqC,CAAC,CAAC;QACjD,MAAM,UAAU,GAAG,kBAAkB,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAC5D,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,UAAU,KAAK,QAAQ,EAAE,CAAC;IAClE,CAAC;IAEM,KAAK,CAAC,SAAS,CAAC,GAAyB;QAC9C,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC/D,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC;QAC/C,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,QAAQ,CAChC,qGAAqG,EACrG,CAAC,GAAG,EAAE,GAAG,CAAC,SAAS,CAAC,CACrB,CAAC;QACF,IAAI,CAAC,GAAG;YAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;QACnC,IAAI,OAAO,GAAG,EAAE,CAAC;QACjB,IAAI,CAAC;YAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;QAAC,CAAC;QAClE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE,CAAC;IAC9E,CAAC;IAEM,iBAAiB,CAAC,QAAiC;QACxD,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC3C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAEM,YAAY;QACjB,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAEM,cAAc,CAAC,QAAiC;QACrD,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;IAEM,mBAAmB,CAAC,QAAiC;QAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAC1C,OAAO,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;IAC7C,CAAC;IAEM,KAAK,CAAC,4BAA4B;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC;QAC/C,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,QAAQ,CACjC;;;;SAIG,CACJ,CAAC;QACF,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAA4B,CAAC;gBAChE,MAAM,UAAU,GAAI,IAAY,EAAE,UAAU,IAAI,EAAE,CAAC;gBACnD,MAAM,SAAS,GAAG,qBAAqB,CAAC,UAAU,CAAC,CAAC;gBACpD,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;oBACf,MAAM,OAAO,CAAC,QAAQ,CACpB,oDAAoD,EACpD,CAAC,SAAS,EAAE,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC,CAClC,CAAC;oBACF,KAAK,EAAE,CAAC;gBACV,CAAC;YACH,CAAC;YAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC;QACxB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEM,KAAK,CAAC,UAAU,CAAC,GAA0B;QAChD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACrD,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAE3D,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;YACjB,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC5G,IAAI,MAAM,IAAI,aAAa,EAAE,CAAC;gBAC5B,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,sBAAsB,EAAE,IAAI,EAAE,CAAC;YACzE,CAAC;QACH,CAAC;QAED,4DAA4D;QAC5D,MAAM,UAAU,GAAI,GAAG,CAAC,QAAgB,EAAE,UAAU,IAAI,EAAE,CAAC;QAC3D,IAAI,UAAU,KAAK,0BAA0B,EAAE,CAAC;YAC9C,MAAM,UAAU,GAAI,GAAG,CAAC,QAAgB,EAAE,gBAAgB,IAAK,GAAG,CAAC,QAAgB,EAAE,cAAc,IAAI,EAAE,CAAC;YAC1G,MAAM,OAAO,GAAI,GAAG,CAAC,QAAgB,EAAE,YAAY,IAAI,EAAE,CAAC;YAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YACzC,IAAI,UAAU,EAAE,CAAC;gBACf,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;YACzE,CAAC;QACH,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC/C,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QAEtD,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC;QAC/C,MAAM,OAAO,CAAC,QAAQ,CAAC,qEAAqE,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;QAC3H,MAAM,WAAW,GAAG,MAAM,CAAC,YAAY;YACrC,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,KAAK,MAAM,CAAC,YAAY,EAAE;YACzC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,GAAG,EAAE,CAAC;QACxD,qFAAqF;QACrF,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC;QAC3D,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;YACxC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,GAAG,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;YAC9F,OAAO,EAAE,WAAW;YACpB,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW;YAC/C,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,CAAC,SAAS;YAC7D,MAAM,EAAE,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ;SACnC,CAAC,CAAC;QAEH,2DAA2D;QAC3D,MAAM,SAAS,GAAG,YAAY,MAAM,CAAC,GAAG,EAAE,CAAC;QAC3C,MAAM,OAAO,CAAC,QAAQ,CAAC,iDAAiD,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;QACvF,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;YAC7B,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;YAC5B,OAAO,EAAE,SAAS;YAClB,IAAI,EAAE,UAAU;YAChB,IAAI,EAAE,UAAU;YAChB,KAAK,EAAE,SAAS;YAChB,UAAU,EAAE,GAAG,CAAC,SAAS;YACzB,MAAM,EAAE,SAAS;YACjB,IAAI,EAAE,UAAU;SACjB,CAAC,CAAC;QAEH,sDAAsD;QACtD,MAAM,SAAS,GAAG,qBAAqB,CAAC,UAAU,CAAC,CAAC;QACpD,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,QAAQ,MAAM,CAAC,GAAG,EAAE,CAAC;YACzC,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;YACnC,IAAI,MAAM,KAAK,YAAY,EAAE,CAAC;gBAC5B,MAAM,OAAO,CAAC,QAAQ,CACpB;;6FAEmF,EACnF,CAAC,WAAW,EAAE,MAAM,CAAC,GAAG,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,cAAc,CAAC,CACpK,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,MAAM,OAAO,CAAC,QAAQ,CACpB;iDACuC,EACvC,CAAC,WAAW,EAAE,MAAM,CAAC,GAAG,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,cAAc,CAAC,CACpK,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAC,gCAAgC,CAAC,CAAC;QAE5C,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,sBAAsB,EAAE,IAAI,EAAE,CAAC;IACzE,CAAC;CACF"}
1
+ {"version":3,"file":"PegaService.js","sourceRoot":"","sources":["../../../src/modules/pega/PegaService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import type { HarnessFetcher } from './fetcher/HarnessFetcher.js';
2
+ import type { HarnessParser } from './parser/HarnessParser.js';
3
+ import type { SchemaCacheManager } from './cache/SchemaCacheManager.js';
4
+ import type { GeneratedSchema, GenerationReport } from './models/GenerationReport.js';
5
+ /** Pipeline state for observability */
6
+ export type PipelineState = 'IDLE' | 'FETCHING' | 'PARSING' | 'GENERATING' | 'COMPLETE' | 'ERROR';
7
+ /** Orchestrator configuration */
8
+ export interface GeneratorConfig {
9
+ outputDir: string;
10
+ maxConcurrent?: number;
11
+ cacheEnabled?: boolean;
12
+ }
13
+ /** Interface for the orchestrator */
14
+ export interface IHarnessSchemaGenerator {
15
+ generateForRuleType(ruleType: string): Promise<GeneratedSchema>;
16
+ generateAll(ruleTypes: string[]): Promise<GenerationReport>;
17
+ generateIncremental(ruleTypes: string[]): Promise<GenerationReport>;
18
+ }
19
+ /**
20
+ * Orchestrates the full schema generation pipeline for one or more rule types.
21
+ * Each rule type: Fetch -> Parse -> Build -> Write.
22
+ */
23
+ export declare class HarnessSchemaGenerator implements IHarnessSchemaGenerator {
24
+ private readonly fetcher;
25
+ private readonly parser;
26
+ private readonly cacheManager;
27
+ private readonly config;
28
+ private state;
29
+ private readonly schemaBuilder;
30
+ private readonly reportBuilder;
31
+ constructor(fetcher: HarnessFetcher, parser: HarnessParser, cacheManager: SchemaCacheManager, config: GeneratorConfig);
32
+ /** Get current pipeline state */
33
+ getState(): PipelineState;
34
+ /** Generate schema for a single rule type */
35
+ generateForRuleType(ruleType: string): Promise<GeneratedSchema>;
36
+ /** Generate schemas for all specified rule types */
37
+ generateAll(ruleTypes: string[]): Promise<GenerationReport>;
38
+ /** Generate only changed schemas (incremental mode) */
39
+ generateIncremental(ruleTypes: string[]): Promise<GenerationReport>;
40
+ /** Generate a single rule type, returning a SchemaDetail */
41
+ private generateSingle;
42
+ /** Write schema JSON to output directory */
43
+ private writeSchemaFile;
44
+ /** Update cache manifest after successful generation */
45
+ private updateCache;
46
+ /** Check if cache entry is stale */
47
+ private isCacheStale;
48
+ /** Count properties in generated schema */
49
+ private countFields;
50
+ }
@@ -0,0 +1,120 @@
1
+ /**
2
+ * SA4E-95 - HarnessSchemaGenerator: pipeline orchestrator for harness-to-schema generation.
3
+ * Coordinates: Fetcher -> Parser -> Resolver -> Generator stages.
4
+ * Pipeline states: IDLE -> FETCHING -> PARSING -> GENERATING -> COMPLETE.
5
+ */
6
+ import * as fs from 'fs';
7
+ import * as path from 'path';
8
+ import { SchemaBuilder } from './generator/SchemaBuilder.js';
9
+ import { FormatTypeMapper } from './generator/FormatTypeMapper.js';
10
+ import { ReportBuilder } from './generator/ReportBuilder.js';
11
+ /**
12
+ * Orchestrates the full schema generation pipeline for one or more rule types.
13
+ * Each rule type: Fetch -> Parse -> Build -> Write.
14
+ */
15
+ export class HarnessSchemaGenerator {
16
+ fetcher;
17
+ parser;
18
+ cacheManager;
19
+ config;
20
+ state = 'IDLE';
21
+ schemaBuilder;
22
+ reportBuilder = new ReportBuilder();
23
+ constructor(fetcher, parser, cacheManager, config) {
24
+ this.fetcher = fetcher;
25
+ this.parser = parser;
26
+ this.cacheManager = cacheManager;
27
+ this.config = config;
28
+ this.schemaBuilder = new SchemaBuilder(new FormatTypeMapper());
29
+ }
30
+ /** Get current pipeline state */
31
+ getState() { return this.state; }
32
+ /** Generate schema for a single rule type */
33
+ async generateForRuleType(ruleType) {
34
+ this.state = 'FETCHING';
35
+ const harnessJson = await this.fetcher.fetchHarness(ruleType);
36
+ if (!harnessJson)
37
+ throw new Error(`No harness found for: ${ruleType}`);
38
+ this.state = 'PARSING';
39
+ const parsedHarness = await this.parser.parse(harnessJson);
40
+ this.state = 'GENERATING';
41
+ const schema = this.schemaBuilder.build(parsedHarness);
42
+ const coverage = this.schemaBuilder.calculateCoverage(parsedHarness);
43
+ const schemaContent = JSON.stringify(schema, null, 2);
44
+ this.writeSchemaFile(ruleType, schemaContent);
45
+ const version = this.cacheManager.computeSchemaHash(schemaContent);
46
+ this.updateCache(ruleType, parsedHarness.metadata, version);
47
+ this.state = 'COMPLETE';
48
+ return {
49
+ ruleType, schema: schema,
50
+ coverage, templateSections: parsedHarness.templateMarkers.map((m) => m.sectionName),
51
+ version,
52
+ };
53
+ }
54
+ /** Generate schemas for all specified rule types */
55
+ async generateAll(ruleTypes) {
56
+ const startTime = Date.now();
57
+ const details = [];
58
+ for (const ruleType of ruleTypes) {
59
+ details.push(await this.generateSingle(ruleType));
60
+ }
61
+ this.state = 'COMPLETE';
62
+ return this.reportBuilder.build(details, startTime);
63
+ }
64
+ /** Generate only changed schemas (incremental mode) */
65
+ async generateIncremental(ruleTypes) {
66
+ const startTime = Date.now();
67
+ const details = [];
68
+ for (const ruleType of ruleTypes) {
69
+ if (this.config.cacheEnabled && !this.isCacheStale(ruleType)) {
70
+ details.push(this.reportBuilder.skippedDetail(ruleType, 0));
71
+ }
72
+ else {
73
+ details.push(await this.generateSingle(ruleType));
74
+ }
75
+ }
76
+ this.state = 'COMPLETE';
77
+ return this.reportBuilder.build(details, startTime);
78
+ }
79
+ /** Generate a single rule type, returning a SchemaDetail */
80
+ async generateSingle(ruleType) {
81
+ const start = Date.now();
82
+ try {
83
+ const result = await this.generateForRuleType(ruleType);
84
+ const fieldCount = this.countFields(result.schema);
85
+ return this.reportBuilder.successDetail(ruleType, result.coverage, fieldCount, result.templateSections, Date.now() - start);
86
+ }
87
+ catch (err) {
88
+ const msg = err instanceof Error ? err.message : String(err);
89
+ return this.reportBuilder.failureDetail(ruleType, msg, Date.now() - start);
90
+ }
91
+ }
92
+ /** Write schema JSON to output directory */
93
+ writeSchemaFile(ruleType, content) {
94
+ if (!fs.existsSync(this.config.outputDir)) {
95
+ fs.mkdirSync(this.config.outputDir, { recursive: true });
96
+ }
97
+ const filePath = path.join(this.config.outputDir, `${ruleType}.schema.json`);
98
+ fs.writeFileSync(filePath, content, 'utf-8');
99
+ }
100
+ /** Update cache manifest after successful generation */
101
+ updateCache(ruleType, metadata, version) {
102
+ if (!this.config.cacheEnabled)
103
+ return;
104
+ this.cacheManager.updateEntry({
105
+ ruleType, harnessInsKey: metadata.insKey,
106
+ updateDateTime: metadata.updateDateTime,
107
+ schemaHash: version, schemaPath: `${ruleType}.schema.json`,
108
+ });
109
+ }
110
+ /** Check if cache entry is stale */
111
+ isCacheStale(ruleType) {
112
+ return !this.cacheManager.getEntry(ruleType);
113
+ }
114
+ /** Count properties in generated schema */
115
+ countFields(schema) {
116
+ const props = schema.properties;
117
+ return props ? Object.keys(props).length : 0;
118
+ }
119
+ }
120
+ //# sourceMappingURL=HarnessSchemaGenerator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HarnessSchemaGenerator.js","sourceRoot":"","sources":["../../../../src/modules/pega/harness-schema/HarnessSchemaGenerator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import type { CacheManifest, CacheEntry } from '../models/CacheManifest.js';
2
+ /**
3
+ * Manages the schema cache manifest for incremental regeneration.
4
+ * Cache-Aside pattern: check before generating, update after.
5
+ */
6
+ export declare class SchemaCacheManager {
7
+ private readonly schemasDir;
8
+ private readonly manifestPath;
9
+ private manifest;
10
+ constructor(schemasDir: string);
11
+ /** Load cache manifest from disk */
12
+ loadManifest(): CacheManifest;
13
+ /** Check if a schema is stale based on pzUpdateDateTime (BR-14) */
14
+ isStale(ruleType: string, updateDateTime: string): boolean;
15
+ /** Get cached entry for a rule type */
16
+ getEntry(ruleType: string): CacheEntry | undefined;
17
+ /** Update cache after successful schema generation */
18
+ updateEntry(entry: CacheEntry): void;
19
+ /** Compute SHA-256 hash of schema content for change detection */
20
+ computeSchemaHash(schemaContent: string): string;
21
+ /** Persist manifest to disk */
22
+ private saveManifest;
23
+ /** Create empty manifest for first run */
24
+ private createEmptyManifest;
25
+ }
@@ -0,0 +1,84 @@
1
+ /**
2
+ * SA4E-95 - SchemaCacheManager: file-based cache manifest for incremental generation.
3
+ * Implements UC-09, BR-14: version-based invalidation using pzUpdateDateTime.
4
+ */
5
+ import * as fs from 'fs';
6
+ import * as path from 'path';
7
+ import * as crypto from 'crypto';
8
+ /**
9
+ * Manages the schema cache manifest for incremental regeneration.
10
+ * Cache-Aside pattern: check before generating, update after.
11
+ */
12
+ export class SchemaCacheManager {
13
+ schemasDir;
14
+ manifestPath;
15
+ manifest = null;
16
+ constructor(schemasDir) {
17
+ this.schemasDir = schemasDir;
18
+ this.manifestPath = path.join(schemasDir, '.cache-manifest.json');
19
+ }
20
+ /** Load cache manifest from disk */
21
+ loadManifest() {
22
+ if (this.manifest)
23
+ return this.manifest;
24
+ if (!fs.existsSync(this.manifestPath)) {
25
+ this.manifest = this.createEmptyManifest();
26
+ return this.manifest;
27
+ }
28
+ try {
29
+ const raw = fs.readFileSync(this.manifestPath, 'utf-8');
30
+ this.manifest = JSON.parse(raw);
31
+ return this.manifest;
32
+ }
33
+ catch {
34
+ // Corrupted cache — start fresh
35
+ this.manifest = this.createEmptyManifest();
36
+ return this.manifest;
37
+ }
38
+ }
39
+ /** Check if a schema is stale based on pzUpdateDateTime (BR-14) */
40
+ isStale(ruleType, updateDateTime) {
41
+ const manifest = this.loadManifest();
42
+ const entry = manifest.entries.find((e) => e.ruleType === ruleType);
43
+ if (!entry)
44
+ return true;
45
+ return entry.updateDateTime !== updateDateTime;
46
+ }
47
+ /** Get cached entry for a rule type */
48
+ getEntry(ruleType) {
49
+ const manifest = this.loadManifest();
50
+ return manifest.entries.find((e) => e.ruleType === ruleType);
51
+ }
52
+ /** Update cache after successful schema generation */
53
+ updateEntry(entry) {
54
+ const manifest = this.loadManifest();
55
+ const idx = manifest.entries.findIndex((e) => e.ruleType === entry.ruleType);
56
+ if (idx >= 0) {
57
+ manifest.entries[idx] = entry;
58
+ }
59
+ else {
60
+ manifest.entries.push(entry);
61
+ }
62
+ manifest.generatedAt = new Date().toISOString();
63
+ this.saveManifest(manifest);
64
+ }
65
+ /** Compute SHA-256 hash of schema content for change detection */
66
+ computeSchemaHash(schemaContent) {
67
+ return `sha256:${crypto.createHash('sha256').update(schemaContent).digest('hex')}`;
68
+ }
69
+ /** Persist manifest to disk */
70
+ saveManifest(manifest) {
71
+ // Ensure directory exists
72
+ if (!fs.existsSync(this.schemasDir)) {
73
+ fs.mkdirSync(this.schemasDir, { recursive: true });
74
+ }
75
+ const content = JSON.stringify(manifest, null, 2);
76
+ fs.writeFileSync(this.manifestPath, content, 'utf-8');
77
+ this.manifest = manifest;
78
+ }
79
+ /** Create empty manifest for first run */
80
+ createEmptyManifest() {
81
+ return { version: '1.0', generatedAt: '', entries: [] };
82
+ }
83
+ }
84
+ //# sourceMappingURL=SchemaCacheManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SchemaCacheManager.js","sourceRoot":"","sources":["../../../../../src/modules/pega/harness-schema/cache/SchemaCacheManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * SA4E-95 - HarnessFetcher wraps PegaRuleFetcherService with harness-specific queries.
3
+ * Implements retry with exponential backoff for API resilience.
4
+ */
5
+ import type { PegaRuleFetcherService } from '../../PegaRuleFetcherService.js';
6
+ /** Configuration for Pega API connection */
7
+ export interface PegaApiConfig {
8
+ pegaEndpoint: string;
9
+ username: string;
10
+ password: string;
11
+ authHeader?: string;
12
+ timeout?: number;
13
+ maxRetries?: number;
14
+ }
15
+ /** Result from listing rules */
16
+ export interface ListRulesResult {
17
+ pzInsKey: string;
18
+ pyClassName: string;
19
+ pyStreamName: string;
20
+ pxUpdateDateTime: string;
21
+ }
22
+ /**
23
+ * Fetches harness and section rules from Pega CodeIntelligence API.
24
+ * Wraps PegaRuleFetcherService with harness-specific query patterns and retry.
25
+ */
26
+ export declare class HarnessFetcher {
27
+ private readonly fetcher;
28
+ private readonly config;
29
+ private readonly maxRetries;
30
+ private readonly timeout;
31
+ constructor(fetcher: PegaRuleFetcherService, config: PegaApiConfig);
32
+ /**
33
+ * Fetch a RuleForm harness for a given rule type class.
34
+ * @param ruleType - Target rule class (e.g., Rule-Obj-Activity)
35
+ * @returns Full harness JSON or null if not found
36
+ */
37
+ fetchHarness(ruleType: string): Promise<Record<string, unknown> | null>;
38
+ /**
39
+ * Fetch a section rule by name and target class.
40
+ * @param sectionName - Section stream name (e.g., RuleFormMain)
41
+ * @param targetClass - Class to resolve section from
42
+ * @returns Full section JSON or null if not found
43
+ */
44
+ fetchSection(sectionName: string, targetClass: string): Promise<Record<string, unknown> | null>;
45
+ /** Internal: fetch harness via fetcher service */
46
+ private doFetchHarness;
47
+ /** Internal: fetch section via fetcher service */
48
+ private doFetchSection;
49
+ /**
50
+ * Retry wrapper with exponential backoff.
51
+ * Retries once on network/timeout errors, respects rate limits.
52
+ */
53
+ private withRetry;
54
+ /** Promise-based sleep for backoff delays */
55
+ private sleep;
56
+ }