agentic-qe 3.5.4 → 3.6.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 (247) hide show
  1. package/.claude/agents/v3/README.md +1 -1
  2. package/.claude/agents/v3/qe-message-broker-tester.md +380 -0
  3. package/.claude/agents/v3/qe-middleware-validator.md +423 -0
  4. package/.claude/agents/v3/qe-odata-contract-tester.md +484 -0
  5. package/.claude/agents/v3/qe-pentest-validator.md +359 -0
  6. package/.claude/agents/v3/qe-qx-partner.md +85 -3
  7. package/.claude/agents/v3/qe-sap-idoc-tester.md +407 -0
  8. package/.claude/agents/v3/qe-sap-rfc-tester.md +357 -0
  9. package/.claude/agents/v3/qe-soap-tester.md +340 -0
  10. package/.claude/agents/v3/qe-sod-analyzer.md +528 -0
  11. package/.claude/agents/v3/templates/qx-report-template.html +437 -0
  12. package/.claude/skills/debug-loop/SKILL.md +61 -0
  13. package/.claude/skills/enterprise-integration-testing/SKILL.md +735 -0
  14. package/.claude/skills/middleware-testing-patterns/SKILL.md +798 -0
  15. package/.claude/skills/observability-testing-patterns/SKILL.md +930 -0
  16. package/.claude/skills/pentest-validation/SKILL.md +268 -0
  17. package/.claude/skills/pentest-validation/evals/pentest-validation.yaml +708 -0
  18. package/.claude/skills/pentest-validation/schemas/output.json +281 -0
  19. package/.claude/skills/pentest-validation/scripts/validate.sh +402 -0
  20. package/.claude/skills/pr-review/SKILL.md +61 -0
  21. package/.claude/skills/qcsd-cicd-swarm/SKILL.md +315 -13
  22. package/.claude/skills/qcsd-development-swarm/SKILL.md +331 -16
  23. package/.claude/skills/qcsd-ideation-swarm/SKILL.md +258 -9
  24. package/.claude/skills/qcsd-refinement-swarm/SKILL.md +344 -22
  25. package/.claude/skills/release/SKILL.md +333 -0
  26. package/.claude/skills/skills-manifest.json +5 -4
  27. package/.claude/skills/wms-testing-patterns/SKILL.md +949 -0
  28. package/README.md +30 -21
  29. package/package.json +2 -2
  30. package/v3/CHANGELOG.md +57 -0
  31. package/v3/README.md +23 -20
  32. package/v3/assets/agents/v3/qe-message-broker-tester.md +380 -0
  33. package/v3/assets/agents/v3/qe-middleware-validator.md +423 -0
  34. package/v3/assets/agents/v3/qe-odata-contract-tester.md +484 -0
  35. package/v3/assets/agents/v3/qe-pentest-validator.md +359 -0
  36. package/v3/assets/agents/v3/qe-qx-partner.md +90 -12
  37. package/v3/assets/agents/v3/qe-sap-idoc-tester.md +407 -0
  38. package/v3/assets/agents/v3/qe-sap-rfc-tester.md +357 -0
  39. package/v3/assets/agents/v3/qe-soap-tester.md +340 -0
  40. package/v3/assets/agents/v3/qe-sod-analyzer.md +528 -0
  41. package/v3/assets/agents/v3/templates/qx-report-template.html +437 -0
  42. package/v3/assets/skills/debug-loop/SKILL.md +61 -0
  43. package/v3/assets/skills/enterprise-integration-testing/SKILL.md +735 -0
  44. package/v3/assets/skills/middleware-testing-patterns/SKILL.md +798 -0
  45. package/v3/assets/skills/observability-testing-patterns/SKILL.md +930 -0
  46. package/v3/assets/skills/pentest-validation/SKILL.md +268 -0
  47. package/v3/assets/skills/pentest-validation/evals/pentest-validation.yaml +708 -0
  48. package/v3/assets/skills/pentest-validation/schemas/output.json +281 -0
  49. package/v3/assets/skills/pentest-validation/scripts/validate.sh +402 -0
  50. package/v3/assets/skills/pr-review/SKILL.md +61 -0
  51. package/v3/assets/skills/qcsd-cicd-swarm/SKILL.md +2206 -0
  52. package/v3/assets/skills/qcsd-development-swarm/SKILL.md +2154 -0
  53. package/v3/assets/skills/qcsd-ideation-swarm/SKILL.md +2008 -1753
  54. package/v3/assets/skills/qcsd-refinement-swarm/SKILL.md +2398 -0
  55. package/v3/assets/skills/security-visual-testing/SKILL.md +223 -0
  56. package/v3/assets/skills/security-visual-testing/evals/security-visual-testing.yaml +163 -0
  57. package/v3/assets/skills/security-visual-testing/schemas/output.json +486 -0
  58. package/v3/assets/skills/security-visual-testing/scripts/validate.sh +748 -0
  59. package/v3/assets/skills/sfdipot-product-factors/SKILL.md +239 -0
  60. package/v3/assets/skills/test-idea-rewriting/SKILL.md +229 -0
  61. package/v3/assets/skills/wms-testing-patterns/SKILL.md +949 -0
  62. package/v3/dist/cli/bundle.js +10816 -4625
  63. package/v3/dist/cli/commands/coverage.d.ts.map +1 -1
  64. package/v3/dist/cli/commands/coverage.js +29 -0
  65. package/v3/dist/cli/commands/coverage.js.map +1 -1
  66. package/v3/dist/cli/commands/learning.d.ts.map +1 -1
  67. package/v3/dist/cli/commands/learning.js +9 -0
  68. package/v3/dist/cli/commands/learning.js.map +1 -1
  69. package/v3/dist/cli/commands/token-usage.d.ts.map +1 -1
  70. package/v3/dist/cli/commands/token-usage.js +6 -2
  71. package/v3/dist/cli/commands/token-usage.js.map +1 -1
  72. package/v3/dist/coordination/protocols/learning-consolidation.d.ts.map +1 -1
  73. package/v3/dist/coordination/protocols/learning-consolidation.js +1 -0
  74. package/v3/dist/coordination/protocols/learning-consolidation.js.map +1 -1
  75. package/v3/dist/domains/coverage-analysis/coordinator.d.ts +8 -0
  76. package/v3/dist/domains/coverage-analysis/coordinator.d.ts.map +1 -1
  77. package/v3/dist/domains/coverage-analysis/coordinator.js +67 -0
  78. package/v3/dist/domains/coverage-analysis/coordinator.js.map +1 -1
  79. package/v3/dist/domains/coverage-analysis/interfaces.d.ts +33 -0
  80. package/v3/dist/domains/coverage-analysis/interfaces.d.ts.map +1 -1
  81. package/v3/dist/domains/coverage-analysis/plugin.d.ts.map +1 -1
  82. package/v3/dist/domains/coverage-analysis/plugin.js +17 -0
  83. package/v3/dist/domains/coverage-analysis/plugin.js.map +1 -1
  84. package/v3/dist/domains/coverage-analysis/services/ghost-coverage-analyzer.d.ts +125 -0
  85. package/v3/dist/domains/coverage-analysis/services/ghost-coverage-analyzer.d.ts.map +1 -0
  86. package/v3/dist/domains/coverage-analysis/services/ghost-coverage-analyzer.js +317 -0
  87. package/v3/dist/domains/coverage-analysis/services/ghost-coverage-analyzer.js.map +1 -0
  88. package/v3/dist/domains/coverage-analysis/services/index.d.ts +1 -0
  89. package/v3/dist/domains/coverage-analysis/services/index.d.ts.map +1 -1
  90. package/v3/dist/domains/coverage-analysis/services/index.js +4 -0
  91. package/v3/dist/domains/coverage-analysis/services/index.js.map +1 -1
  92. package/v3/dist/domains/enterprise-integration/coordinator.d.ts +91 -0
  93. package/v3/dist/domains/enterprise-integration/coordinator.d.ts.map +1 -0
  94. package/v3/dist/domains/enterprise-integration/coordinator.js +672 -0
  95. package/v3/dist/domains/enterprise-integration/coordinator.js.map +1 -0
  96. package/v3/dist/domains/enterprise-integration/index.d.ts +14 -0
  97. package/v3/dist/domains/enterprise-integration/index.d.ts.map +1 -0
  98. package/v3/dist/domains/enterprise-integration/index.js +18 -0
  99. package/v3/dist/domains/enterprise-integration/index.js.map +1 -0
  100. package/v3/dist/domains/enterprise-integration/interfaces.d.ts +376 -0
  101. package/v3/dist/domains/enterprise-integration/interfaces.d.ts.map +1 -0
  102. package/v3/dist/domains/enterprise-integration/interfaces.js +11 -0
  103. package/v3/dist/domains/enterprise-integration/interfaces.js.map +1 -0
  104. package/v3/dist/domains/enterprise-integration/plugin.d.ts +88 -0
  105. package/v3/dist/domains/enterprise-integration/plugin.d.ts.map +1 -0
  106. package/v3/dist/domains/enterprise-integration/plugin.js +515 -0
  107. package/v3/dist/domains/enterprise-integration/plugin.js.map +1 -0
  108. package/v3/dist/domains/enterprise-integration/services/esb-middleware-service.d.ts +67 -0
  109. package/v3/dist/domains/enterprise-integration/services/esb-middleware-service.d.ts.map +1 -0
  110. package/v3/dist/domains/enterprise-integration/services/esb-middleware-service.js +670 -0
  111. package/v3/dist/domains/enterprise-integration/services/esb-middleware-service.js.map +1 -0
  112. package/v3/dist/domains/enterprise-integration/services/index.d.ts +13 -0
  113. package/v3/dist/domains/enterprise-integration/services/index.d.ts.map +1 -0
  114. package/v3/dist/domains/enterprise-integration/services/index.js +13 -0
  115. package/v3/dist/domains/enterprise-integration/services/index.js.map +1 -0
  116. package/v3/dist/domains/enterprise-integration/services/message-broker-service.d.ts +88 -0
  117. package/v3/dist/domains/enterprise-integration/services/message-broker-service.d.ts.map +1 -0
  118. package/v3/dist/domains/enterprise-integration/services/message-broker-service.js +560 -0
  119. package/v3/dist/domains/enterprise-integration/services/message-broker-service.js.map +1 -0
  120. package/v3/dist/domains/enterprise-integration/services/odata-service.d.ts +75 -0
  121. package/v3/dist/domains/enterprise-integration/services/odata-service.d.ts.map +1 -0
  122. package/v3/dist/domains/enterprise-integration/services/odata-service.js +618 -0
  123. package/v3/dist/domains/enterprise-integration/services/odata-service.js.map +1 -0
  124. package/v3/dist/domains/enterprise-integration/services/sap-integration-service.d.ts +73 -0
  125. package/v3/dist/domains/enterprise-integration/services/sap-integration-service.d.ts.map +1 -0
  126. package/v3/dist/domains/enterprise-integration/services/sap-integration-service.js +513 -0
  127. package/v3/dist/domains/enterprise-integration/services/sap-integration-service.js.map +1 -0
  128. package/v3/dist/domains/enterprise-integration/services/soap-wsdl-service.d.ts +84 -0
  129. package/v3/dist/domains/enterprise-integration/services/soap-wsdl-service.d.ts.map +1 -0
  130. package/v3/dist/domains/enterprise-integration/services/soap-wsdl-service.js +639 -0
  131. package/v3/dist/domains/enterprise-integration/services/soap-wsdl-service.js.map +1 -0
  132. package/v3/dist/domains/enterprise-integration/services/sod-analysis-service.d.ts +90 -0
  133. package/v3/dist/domains/enterprise-integration/services/sod-analysis-service.d.ts.map +1 -0
  134. package/v3/dist/domains/enterprise-integration/services/sod-analysis-service.js +389 -0
  135. package/v3/dist/domains/enterprise-integration/services/sod-analysis-service.js.map +1 -0
  136. package/v3/dist/domains/index.d.ts +1 -0
  137. package/v3/dist/domains/index.d.ts.map +1 -1
  138. package/v3/dist/domains/index.js +1 -0
  139. package/v3/dist/domains/index.js.map +1 -1
  140. package/v3/dist/domains/learning-optimization/coordinator.d.ts.map +1 -1
  141. package/v3/dist/domains/learning-optimization/coordinator.js +1 -0
  142. package/v3/dist/domains/learning-optimization/coordinator.js.map +1 -1
  143. package/v3/dist/domains/learning-optimization/services/learning-coordinator.d.ts.map +1 -1
  144. package/v3/dist/domains/learning-optimization/services/learning-coordinator.js +1 -0
  145. package/v3/dist/domains/learning-optimization/services/learning-coordinator.js.map +1 -1
  146. package/v3/dist/domains/learning-optimization/services/transfer-specialist.d.ts.map +1 -1
  147. package/v3/dist/domains/learning-optimization/services/transfer-specialist.js +1 -0
  148. package/v3/dist/domains/learning-optimization/services/transfer-specialist.js.map +1 -1
  149. package/v3/dist/domains/test-execution/coordinator.d.ts.map +1 -1
  150. package/v3/dist/domains/test-execution/coordinator.js +34 -0
  151. package/v3/dist/domains/test-execution/coordinator.js.map +1 -1
  152. package/v3/dist/domains/test-generation/services/test-data-generator.d.ts +7 -1
  153. package/v3/dist/domains/test-generation/services/test-data-generator.d.ts.map +1 -1
  154. package/v3/dist/domains/test-generation/services/test-data-generator.js +116 -98
  155. package/v3/dist/domains/test-generation/services/test-data-generator.js.map +1 -1
  156. package/v3/dist/init/agents-installer.d.ts +4 -0
  157. package/v3/dist/init/agents-installer.d.ts.map +1 -1
  158. package/v3/dist/init/agents-installer.js +32 -3
  159. package/v3/dist/init/agents-installer.js.map +1 -1
  160. package/v3/dist/init/skills-installer.d.ts.map +1 -1
  161. package/v3/dist/init/skills-installer.js +4 -1
  162. package/v3/dist/init/skills-installer.js.map +1 -1
  163. package/v3/dist/init/types.d.ts.map +1 -1
  164. package/v3/dist/init/types.js +1 -0
  165. package/v3/dist/init/types.js.map +1 -1
  166. package/v3/dist/integrations/agentic-flow/model-router/budget-enforcer.d.ts +16 -0
  167. package/v3/dist/integrations/agentic-flow/model-router/budget-enforcer.d.ts.map +1 -1
  168. package/v3/dist/integrations/agentic-flow/model-router/budget-enforcer.js +41 -0
  169. package/v3/dist/integrations/agentic-flow/model-router/budget-enforcer.js.map +1 -1
  170. package/v3/dist/integrations/ruvector/provider.d.ts.map +1 -1
  171. package/v3/dist/integrations/ruvector/provider.js +1 -0
  172. package/v3/dist/integrations/ruvector/provider.js.map +1 -1
  173. package/v3/dist/kernel/anti-drift-middleware.d.ts +160 -0
  174. package/v3/dist/kernel/anti-drift-middleware.d.ts.map +1 -0
  175. package/v3/dist/kernel/anti-drift-middleware.js +376 -0
  176. package/v3/dist/kernel/anti-drift-middleware.js.map +1 -0
  177. package/v3/dist/kernel/event-bus.d.ts +29 -1
  178. package/v3/dist/kernel/event-bus.d.ts.map +1 -1
  179. package/v3/dist/kernel/event-bus.js +69 -6
  180. package/v3/dist/kernel/event-bus.js.map +1 -1
  181. package/v3/dist/kernel/interfaces.d.ts +35 -0
  182. package/v3/dist/kernel/interfaces.d.ts.map +1 -1
  183. package/v3/dist/kernel/kernel.d.ts.map +1 -1
  184. package/v3/dist/kernel/kernel.js +14 -17
  185. package/v3/dist/kernel/kernel.js.map +1 -1
  186. package/v3/dist/kernel/unified-memory.d.ts +5 -0
  187. package/v3/dist/kernel/unified-memory.d.ts.map +1 -1
  188. package/v3/dist/kernel/unified-memory.js +28 -0
  189. package/v3/dist/kernel/unified-memory.js.map +1 -1
  190. package/v3/dist/learning/asymmetric-learning.d.ts +133 -0
  191. package/v3/dist/learning/asymmetric-learning.d.ts.map +1 -0
  192. package/v3/dist/learning/asymmetric-learning.js +170 -0
  193. package/v3/dist/learning/asymmetric-learning.js.map +1 -0
  194. package/v3/dist/learning/pattern-lifecycle.d.ts +26 -0
  195. package/v3/dist/learning/pattern-lifecycle.d.ts.map +1 -1
  196. package/v3/dist/learning/pattern-lifecycle.js +83 -0
  197. package/v3/dist/learning/pattern-lifecycle.js.map +1 -1
  198. package/v3/dist/learning/qe-patterns.d.ts +8 -0
  199. package/v3/dist/learning/qe-patterns.d.ts.map +1 -1
  200. package/v3/dist/learning/qe-patterns.js.map +1 -1
  201. package/v3/dist/learning/real-qe-reasoning-bank.d.ts +28 -0
  202. package/v3/dist/learning/real-qe-reasoning-bank.d.ts.map +1 -1
  203. package/v3/dist/learning/real-qe-reasoning-bank.js +72 -4
  204. package/v3/dist/learning/real-qe-reasoning-bank.js.map +1 -1
  205. package/v3/dist/learning/token-tracker.d.ts +22 -0
  206. package/v3/dist/learning/token-tracker.d.ts.map +1 -1
  207. package/v3/dist/learning/token-tracker.js +67 -0
  208. package/v3/dist/learning/token-tracker.js.map +1 -1
  209. package/v3/dist/mcp/bundle.js +11099 -4879
  210. package/v3/dist/mcp/tool-registry.d.ts.map +1 -1
  211. package/v3/dist/mcp/tool-registry.js +4 -0
  212. package/v3/dist/mcp/tool-registry.js.map +1 -1
  213. package/v3/dist/mcp/tools/analysis/token-usage.d.ts +1 -1
  214. package/v3/dist/mcp/tools/analysis/token-usage.d.ts.map +1 -1
  215. package/v3/dist/mcp/tools/analysis/token-usage.js +23 -3
  216. package/v3/dist/mcp/tools/analysis/token-usage.js.map +1 -1
  217. package/v3/dist/mcp/tools/base.d.ts.map +1 -1
  218. package/v3/dist/mcp/tools/base.js +1 -15
  219. package/v3/dist/mcp/tools/base.js.map +1 -1
  220. package/v3/dist/mcp/tools/coverage-analysis/index.d.ts +7 -0
  221. package/v3/dist/mcp/tools/coverage-analysis/index.d.ts.map +1 -1
  222. package/v3/dist/mcp/tools/coverage-analysis/index.js +30 -0
  223. package/v3/dist/mcp/tools/coverage-analysis/index.js.map +1 -1
  224. package/v3/dist/optimization/token-optimizer-service.d.ts +7 -0
  225. package/v3/dist/optimization/token-optimizer-service.d.ts.map +1 -1
  226. package/v3/dist/optimization/token-optimizer-service.js +10 -1
  227. package/v3/dist/optimization/token-optimizer-service.js.map +1 -1
  228. package/v3/dist/shared/types/index.d.ts +20 -1
  229. package/v3/dist/shared/types/index.d.ts.map +1 -1
  230. package/v3/dist/shared/types/index.js +1 -0
  231. package/v3/dist/shared/types/index.js.map +1 -1
  232. package/v3/dist/strange-loop/healing-controller.d.ts.map +1 -1
  233. package/v3/dist/strange-loop/healing-controller.js +12 -0
  234. package/v3/dist/strange-loop/healing-controller.js.map +1 -1
  235. package/v3/dist/strange-loop/strange-loop.d.ts +14 -0
  236. package/v3/dist/strange-loop/strange-loop.d.ts.map +1 -1
  237. package/v3/dist/strange-loop/strange-loop.js +24 -0
  238. package/v3/dist/strange-loop/strange-loop.js.map +1 -1
  239. package/v3/dist/strange-loop/types.d.ts +2 -2
  240. package/v3/dist/strange-loop/types.d.ts.map +1 -1
  241. package/v3/dist/strange-loop/types.js.map +1 -1
  242. package/v3/dist/sync/claude-flow-bridge.d.ts.map +1 -1
  243. package/v3/dist/sync/claude-flow-bridge.js +3 -24
  244. package/v3/dist/sync/claude-flow-bridge.js.map +1 -1
  245. package/v3/package.json +12 -9
  246. /package/{v3/assets/skills/sfdipot-product-factors/skill.md → .claude/skills/sfdipot-product-factors/SKILL.md} +0 -0
  247. /package/{v3/assets/skills/test-idea-rewriting/skill.md → .claude/skills/test-idea-rewriting/SKILL.md} +0 -0
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Agentic QE v3 - SAP Integration Testing Service
3
+ * Tests SAP RFC/BAPI calls and validates IDoc structure and segments.
4
+ *
5
+ * ADR-063: Enterprise Integration Testing Gap Closure
6
+ */
7
+ import { Result } from '../../../shared/types/index.js';
8
+ import type { MemoryBackend } from '../../../kernel/interfaces.js';
9
+ import type { RfcConnection, BapiCall, BapiTestResult, BapiReturn, IDocDefinition, IDocTestResult } from '../interfaces.js';
10
+ /**
11
+ * Configuration for the SAP integration service
12
+ */
13
+ export interface SapIntegrationServiceConfig {
14
+ /** Default language for SAP connections */
15
+ defaultLanguage: string;
16
+ /** Validate BAPI return messages strictly */
17
+ strictReturnValidation: boolean;
18
+ /** Maximum IDoc segment depth for recursive validation */
19
+ maxSegmentDepth: number;
20
+ /** Cache BAPI metadata */
21
+ cacheBapiMetadata: boolean;
22
+ /** Timeout for RFC calls in milliseconds */
23
+ rfcTimeout: number;
24
+ }
25
+ /**
26
+ * SAP Integration Testing Service
27
+ * Provides RFC/BAPI call testing and IDoc structure validation
28
+ */
29
+ export declare class SapIntegrationService {
30
+ private readonly memory;
31
+ private readonly config;
32
+ private readonly bapiMetadataCache;
33
+ constructor(memory: MemoryBackend, config?: Partial<SapIntegrationServiceConfig>);
34
+ /**
35
+ * Validate an RFC connection configuration.
36
+ * Checks for required fields and valid system number format.
37
+ */
38
+ validateConnection(connection: RfcConnection): Result<string[]>;
39
+ /**
40
+ * Validate a BAPI call structure.
41
+ * Checks for required parameters, naming conventions, and parameter structure.
42
+ */
43
+ validateBapiCall(bapi: BapiCall): Result<string[]>;
44
+ /**
45
+ * Test a BAPI call by validating the call structure and analyzing the return messages.
46
+ * Simulates BAPI execution analysis without requiring a live SAP connection.
47
+ */
48
+ testBapiCall(connection: RfcConnection, bapi: BapiCall, returnMessages: BapiReturn[], exportValues?: Record<string, unknown>, tableData?: Record<string, unknown[]>): Promise<Result<BapiTestResult>>;
49
+ /**
50
+ * Validate an IDoc definition structure.
51
+ * Checks segment hierarchy, field definitions, and cardinality.
52
+ */
53
+ validateIDocDefinition(definition: IDocDefinition): Result<string[]>;
54
+ /**
55
+ * Validate IDoc content against its definition.
56
+ * Checks segment presence, field values, cardinality, and data types.
57
+ */
58
+ validateIDoc(definition: IDocDefinition, content: string): Promise<Result<IDocTestResult>>;
59
+ /**
60
+ * Clear cached BAPI metadata.
61
+ */
62
+ clearCache(): void;
63
+ private hasBapiErrors;
64
+ private validateExportParams;
65
+ private validateTableParams;
66
+ private validateSegmentHierarchy;
67
+ private validateIDocFieldDefinition;
68
+ private parseIDocContent;
69
+ private validateIDocSegments;
70
+ private validateIDocFields;
71
+ private validateIDocFieldValue;
72
+ }
73
+ //# sourceMappingURL=sap-integration-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sap-integration-service.d.ts","sourceRoot":"","sources":["../../../../src/domains/enterprise-integration/services/sap-integration-service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAW,MAAM,gCAAgC,CAAC;AACjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,KAAK,EACV,aAAa,EACb,QAAQ,EACR,cAAc,EACd,UAAU,EACV,cAAc,EAGd,cAAc,EAGf,MAAM,kBAAkB,CAAC;AAE1B;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C,2CAA2C;IAC3C,eAAe,EAAE,MAAM,CAAC;IACxB,6CAA6C;IAC7C,sBAAsB,EAAE,OAAO,CAAC;IAChC,0DAA0D;IAC1D,eAAe,EAAE,MAAM,CAAC;IACxB,0BAA0B;IAC1B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,4CAA4C;IAC5C,UAAU,EAAE,MAAM,CAAC;CACpB;AAUD;;;GAGG;AACH,qBAAa,qBAAqB;IAK9B,OAAO,CAAC,QAAQ,CAAC,MAAM;IAJzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA8B;IACrD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAmD;gBAGlE,MAAM,EAAE,aAAa,EACtC,MAAM,GAAE,OAAO,CAAC,2BAA2B,CAAM;IASnD;;;OAGG;IACH,kBAAkB,CAAC,UAAU,EAAE,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;IAgC/D;;;OAGG;IACH,gBAAgB,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;IAoClD;;;OAGG;IACG,YAAY,CAChB,UAAU,EAAE,aAAa,EACzB,IAAI,EAAE,QAAQ,EACd,cAAc,EAAE,UAAU,EAAE,EAC5B,YAAY,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EAC1C,SAAS,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAM,GACxC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IA8ElC;;;OAGG;IACH,sBAAsB,CAAC,UAAU,EAAE,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;IAsBpE;;;OAGG;IACG,YAAY,CAChB,UAAU,EAAE,cAAc,EAC1B,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IAgFlC;;OAEG;IACH,UAAU,IAAI,IAAI;IAQlB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,oBAAoB;IAe5B,OAAO,CAAC,mBAAmB;IAmB3B,OAAO,CAAC,wBAAwB;IA+ChC,OAAO,CAAC,2BAA2B;IAsCnC,OAAO,CAAC,gBAAgB;IAwCxB,OAAO,CAAC,oBAAoB;IA2D5B,OAAO,CAAC,kBAAkB;IAuC1B,OAAO,CAAC,sBAAsB;CAiF/B"}
@@ -0,0 +1,513 @@
1
+ /**
2
+ * Agentic QE v3 - SAP Integration Testing Service
3
+ * Tests SAP RFC/BAPI calls and validates IDoc structure and segments.
4
+ *
5
+ * ADR-063: Enterprise Integration Testing Gap Closure
6
+ */
7
+ import { ok, err } from '../../../shared/types/index.js';
8
+ const DEFAULT_CONFIG = {
9
+ defaultLanguage: 'EN',
10
+ strictReturnValidation: true,
11
+ maxSegmentDepth: 10,
12
+ cacheBapiMetadata: true,
13
+ rfcTimeout: 60000,
14
+ };
15
+ /**
16
+ * SAP Integration Testing Service
17
+ * Provides RFC/BAPI call testing and IDoc structure validation
18
+ */
19
+ export class SapIntegrationService {
20
+ memory;
21
+ config;
22
+ bapiMetadataCache = new Map();
23
+ constructor(memory, config = {}) {
24
+ this.memory = memory;
25
+ this.config = { ...DEFAULT_CONFIG, ...config };
26
+ }
27
+ // ============================================================================
28
+ // RFC/BAPI Testing
29
+ // ============================================================================
30
+ /**
31
+ * Validate an RFC connection configuration.
32
+ * Checks for required fields and valid system number format.
33
+ */
34
+ validateConnection(connection) {
35
+ const errors = [];
36
+ if (!connection.ashost || connection.ashost.trim() === '') {
37
+ errors.push('Application server host (ashost) is required');
38
+ }
39
+ if (!connection.sysnr || connection.sysnr.trim() === '') {
40
+ errors.push('System number (sysnr) is required');
41
+ }
42
+ else if (!/^\d{2}$/.test(connection.sysnr)) {
43
+ errors.push('System number (sysnr) must be a 2-digit number (e.g., "00", "01")');
44
+ }
45
+ if (!connection.client || connection.client.trim() === '') {
46
+ errors.push('Client number is required');
47
+ }
48
+ else if (!/^\d{3}$/.test(connection.client)) {
49
+ errors.push('Client number must be a 3-digit number (e.g., "100", "800")');
50
+ }
51
+ if (!connection.user || connection.user.trim() === '') {
52
+ errors.push('User is required');
53
+ }
54
+ if (!connection.lang || connection.lang.trim() === '') {
55
+ errors.push('Language is required');
56
+ }
57
+ else if (connection.lang.length !== 2) {
58
+ errors.push('Language must be a 2-character ISO code (e.g., "EN", "DE")');
59
+ }
60
+ return ok(errors);
61
+ }
62
+ /**
63
+ * Validate a BAPI call structure.
64
+ * Checks for required parameters, naming conventions, and parameter structure.
65
+ */
66
+ validateBapiCall(bapi) {
67
+ const errors = [];
68
+ if (!bapi.name || bapi.name.trim() === '') {
69
+ errors.push('BAPI name is required');
70
+ }
71
+ else {
72
+ // BAPI naming convention check
73
+ if (!bapi.name.startsWith('BAPI_') && !bapi.name.startsWith('RFC_') &&
74
+ !bapi.name.startsWith('Z_') && !bapi.name.startsWith('/')) {
75
+ errors.push(`BAPI name '${bapi.name}' does not follow SAP naming conventions (expected BAPI_*, RFC_*, Z_*, or /<namespace>/)`);
76
+ }
77
+ // Length check (SAP function module names are max 30 chars)
78
+ if (bapi.name.length > 30) {
79
+ errors.push(`BAPI name '${bapi.name}' exceeds SAP maximum of 30 characters`);
80
+ }
81
+ }
82
+ if (!bapi.importParams || Object.keys(bapi.importParams).length === 0) {
83
+ errors.push('At least one import parameter is required');
84
+ }
85
+ // Validate parameter names follow SAP naming conventions
86
+ if (bapi.importParams) {
87
+ for (const paramName of Object.keys(bapi.importParams)) {
88
+ if (paramName.length > 30) {
89
+ errors.push(`Import parameter name '${paramName}' exceeds SAP maximum of 30 characters`);
90
+ }
91
+ }
92
+ }
93
+ return ok(errors);
94
+ }
95
+ /**
96
+ * Test a BAPI call by validating the call structure and analyzing the return messages.
97
+ * Simulates BAPI execution analysis without requiring a live SAP connection.
98
+ */
99
+ async testBapiCall(connection, bapi, returnMessages, exportValues = {}, tableData = {}) {
100
+ const startTime = Date.now();
101
+ try {
102
+ // Validate connection
103
+ const connectionResult = this.validateConnection(connection);
104
+ if (connectionResult.success && connectionResult.value.length > 0) {
105
+ return err(new Error(`Invalid RFC connection: ${connectionResult.value.join('; ')}`));
106
+ }
107
+ // Validate BAPI call structure
108
+ const callResult = this.validateBapiCall(bapi);
109
+ if (callResult.success && callResult.value.length > 0) {
110
+ return err(new Error(`Invalid BAPI call: ${callResult.value.join('; ')}`));
111
+ }
112
+ // Analyze return messages
113
+ const hasErrors = this.hasBapiErrors(returnMessages);
114
+ const hasAbend = returnMessages.some(msg => msg.type === 'A');
115
+ const passed = !hasErrors && !hasAbend;
116
+ // Determine if transaction should be committed
117
+ const transactionCommitted = passed && !hasAbend;
118
+ // Validate export parameters if expected
119
+ const exportValidationErrors = this.validateExportParams(bapi.exportParams || [], exportValues);
120
+ // Validate table parameters if expected
121
+ const tableValidationErrors = this.validateTableParams(bapi.tableParams || [], tableData);
122
+ const allPassed = passed &&
123
+ exportValidationErrors.length === 0 &&
124
+ tableValidationErrors.length === 0;
125
+ const result = {
126
+ bapiName: bapi.name,
127
+ passed: allPassed,
128
+ returnMessages,
129
+ exportValues,
130
+ tableData,
131
+ duration: Date.now() - startTime,
132
+ transactionCommitted,
133
+ };
134
+ // Store test result for learning
135
+ await this.memory.set(`enterprise-integration:bapi:${bapi.name}:${Date.now()}`, {
136
+ bapiName: bapi.name,
137
+ passed: allPassed,
138
+ returnTypes: returnMessages.map(m => m.type),
139
+ exportParamCount: Object.keys(exportValues).length,
140
+ tableParamCount: Object.keys(tableData).length,
141
+ duration: result.duration,
142
+ timestamp: new Date().toISOString(),
143
+ }, { namespace: 'enterprise-integration', ttl: 86400 * 30 });
144
+ return ok(result);
145
+ }
146
+ catch (error) {
147
+ return err(error instanceof Error ? error : new Error(String(error)));
148
+ }
149
+ }
150
+ // ============================================================================
151
+ // IDoc Validation
152
+ // ============================================================================
153
+ /**
154
+ * Validate an IDoc definition structure.
155
+ * Checks segment hierarchy, field definitions, and cardinality.
156
+ */
157
+ validateIDocDefinition(definition) {
158
+ const errors = [];
159
+ if (!definition.type || definition.type.trim() === '') {
160
+ errors.push('IDoc type is required');
161
+ }
162
+ if (!definition.version || definition.version.trim() === '') {
163
+ errors.push('IDoc version is required');
164
+ }
165
+ if (!definition.segments || definition.segments.length === 0) {
166
+ errors.push('IDoc must have at least one segment');
167
+ return ok(errors);
168
+ }
169
+ // Validate segment hierarchy
170
+ this.validateSegmentHierarchy(definition.segments, '', errors, 0);
171
+ return ok(errors);
172
+ }
173
+ /**
174
+ * Validate IDoc content against its definition.
175
+ * Checks segment presence, field values, cardinality, and data types.
176
+ */
177
+ async validateIDoc(definition, content) {
178
+ const startTime = Date.now();
179
+ try {
180
+ if (!content || content.trim() === '') {
181
+ return ok({
182
+ idocType: definition.type,
183
+ direction: 'inbound',
184
+ passed: false,
185
+ statusCode: 51,
186
+ statusMessage: 'IDoc content is empty',
187
+ segmentValidation: [],
188
+ processingTime: Date.now() - startTime,
189
+ });
190
+ }
191
+ // Validate the definition first
192
+ const defResult = this.validateIDocDefinition(definition);
193
+ if (defResult.success && defResult.value.length > 0) {
194
+ return err(new Error(`Invalid IDoc definition: ${defResult.value.join('; ')}`));
195
+ }
196
+ // Parse the IDoc content into segment data
197
+ const parsedSegments = this.parseIDocContent(content);
198
+ // Validate segments against definition
199
+ const segmentValidation = [];
200
+ this.validateIDocSegments(definition.segments, parsedSegments, segmentValidation);
201
+ // Determine overall status
202
+ const hasErrors = segmentValidation.some(sv => !sv.valid || sv.fieldErrors.length > 0);
203
+ // SAP IDoc status codes:
204
+ // 3 = Successfully posted
205
+ // 51 = Error during application document posting
206
+ // 53 = IDoc posted, no application document
207
+ // 64 = IDoc ready to be transferred
208
+ const statusCode = hasErrors ? 51 : 3;
209
+ const statusMessage = hasErrors
210
+ ? 'IDoc validation failed with field/segment errors'
211
+ : 'IDoc validated successfully';
212
+ const result = {
213
+ idocType: definition.type,
214
+ direction: 'inbound',
215
+ passed: !hasErrors,
216
+ statusCode,
217
+ statusMessage,
218
+ segmentValidation,
219
+ processingTime: Date.now() - startTime,
220
+ };
221
+ // Store validation result for learning
222
+ await this.memory.set(`enterprise-integration:idoc:${definition.type}:${Date.now()}`, {
223
+ idocType: definition.type,
224
+ passed: !hasErrors,
225
+ statusCode,
226
+ segmentCount: segmentValidation.length,
227
+ errorCount: segmentValidation.reduce((sum, sv) => sum + sv.fieldErrors.length, 0),
228
+ processingTime: result.processingTime,
229
+ timestamp: new Date().toISOString(),
230
+ }, { namespace: 'enterprise-integration', ttl: 86400 * 30 });
231
+ return ok(result);
232
+ }
233
+ catch (error) {
234
+ return err(error instanceof Error ? error : new Error(String(error)));
235
+ }
236
+ }
237
+ /**
238
+ * Clear cached BAPI metadata.
239
+ */
240
+ clearCache() {
241
+ this.bapiMetadataCache.clear();
242
+ }
243
+ // ============================================================================
244
+ // Private Helper Methods - BAPI
245
+ // ============================================================================
246
+ hasBapiErrors(returnMessages) {
247
+ return returnMessages.some(msg => msg.type === 'E' || msg.type === 'A');
248
+ }
249
+ validateExportParams(expectedParams, exportValues) {
250
+ const errors = [];
251
+ for (const param of expectedParams) {
252
+ if (!(param in exportValues)) {
253
+ errors.push(`Expected export parameter '${param}' not found in response`);
254
+ }
255
+ }
256
+ return errors;
257
+ }
258
+ validateTableParams(expectedParams, tableData) {
259
+ const errors = [];
260
+ for (const param of expectedParams) {
261
+ if (!(param in tableData)) {
262
+ errors.push(`Expected table parameter '${param}' not found in response`);
263
+ }
264
+ }
265
+ return errors;
266
+ }
267
+ // ============================================================================
268
+ // Private Helper Methods - IDoc
269
+ // ============================================================================
270
+ validateSegmentHierarchy(segments, parentPath, errors, depth) {
271
+ if (depth > this.config.maxSegmentDepth) {
272
+ errors.push(`Segment depth exceeds maximum of ${this.config.maxSegmentDepth}`);
273
+ return;
274
+ }
275
+ for (const segment of segments) {
276
+ const segPath = parentPath ? `${parentPath}/${segment.name}` : segment.name;
277
+ if (!segment.name || segment.name.trim() === '') {
278
+ errors.push(`Segment name is required at path '${parentPath || '/'}'`);
279
+ continue;
280
+ }
281
+ // SAP segment names are max 27 chars and uppercase
282
+ if (segment.name.length > 27) {
283
+ errors.push(`Segment name '${segment.name}' exceeds SAP maximum of 27 characters`);
284
+ }
285
+ // Validate cardinality
286
+ if (segment.minOccurs < 0) {
287
+ errors.push(`Segment '${segPath}' minOccurs cannot be negative`);
288
+ }
289
+ if (segment.maxOccurs < segment.minOccurs) {
290
+ errors.push(`Segment '${segPath}' maxOccurs (${segment.maxOccurs}) must be >= minOccurs (${segment.minOccurs})`);
291
+ }
292
+ // Validate fields
293
+ for (const field of segment.fields) {
294
+ this.validateIDocFieldDefinition(field, segPath, errors);
295
+ }
296
+ // Recurse into child segments
297
+ if (segment.children && segment.children.length > 0) {
298
+ this.validateSegmentHierarchy(segment.children, segPath, errors, depth + 1);
299
+ }
300
+ }
301
+ }
302
+ validateIDocFieldDefinition(field, segmentPath, errors) {
303
+ if (!field.name || field.name.trim() === '') {
304
+ errors.push(`Field name is required in segment '${segmentPath}'`);
305
+ }
306
+ if (field.length <= 0) {
307
+ errors.push(`Field '${segmentPath}/${field.name}' length must be positive (got ${field.length})`);
308
+ }
309
+ // Validate type-specific constraints
310
+ const validTypes = ['CHAR', 'NUMC', 'DATS', 'TIMS', 'CURR', 'QUAN', 'DEC'];
311
+ if (!validTypes.includes(field.type)) {
312
+ errors.push(`Field '${segmentPath}/${field.name}' has invalid type '${field.type}'. Valid: ${validTypes.join(', ')}`);
313
+ }
314
+ // Date fields must be length 8
315
+ if (field.type === 'DATS' && field.length !== 8) {
316
+ errors.push(`Field '${segmentPath}/${field.name}' of type DATS must have length 8 (YYYYMMDD)`);
317
+ }
318
+ // Time fields must be length 6
319
+ if (field.type === 'TIMS' && field.length !== 6) {
320
+ errors.push(`Field '${segmentPath}/${field.name}' of type TIMS must have length 6 (HHMMSS)`);
321
+ }
322
+ }
323
+ parseIDocContent(content) {
324
+ const segments = new Map();
325
+ // IDoc flat file format: segment name in first 27 chars, data follows
326
+ // Or JSON format with segment arrays
327
+ try {
328
+ // Try JSON format first
329
+ const jsonContent = JSON.parse(content);
330
+ if (typeof jsonContent === 'object' && jsonContent !== null) {
331
+ for (const [segName, segData] of Object.entries(jsonContent)) {
332
+ if (Array.isArray(segData)) {
333
+ segments.set(segName, segData);
334
+ }
335
+ else if (typeof segData === 'object' && segData !== null) {
336
+ segments.set(segName, [segData]);
337
+ }
338
+ }
339
+ return segments;
340
+ }
341
+ }
342
+ catch {
343
+ // Not JSON, try flat file format
344
+ }
345
+ // Flat file format: each line is a segment record
346
+ const lines = content.split('\n').filter(l => l.trim() !== '');
347
+ for (const line of lines) {
348
+ // First field (up to first whitespace or fixed position) is segment name
349
+ const segName = line.substring(0, Math.min(27, line.length)).trim();
350
+ if (segName) {
351
+ if (!segments.has(segName)) {
352
+ segments.set(segName, []);
353
+ }
354
+ segments.get(segName).push({ _raw: line });
355
+ }
356
+ }
357
+ return segments;
358
+ }
359
+ validateIDocSegments(definedSegments, parsedSegments, results) {
360
+ for (const segment of definedSegments) {
361
+ const segmentData = parsedSegments.get(segment.name);
362
+ const occurrences = segmentData ? segmentData.length : 0;
363
+ const fieldErrors = [];
364
+ // Check cardinality
365
+ if (segment.mandatory && occurrences === 0) {
366
+ fieldErrors.push({
367
+ field: segment.name,
368
+ expected: `at least ${segment.minOccurs} occurrence(s)`,
369
+ actual: '0 occurrences',
370
+ rule: 'mandatory-segment',
371
+ });
372
+ }
373
+ if (occurrences < segment.minOccurs) {
374
+ fieldErrors.push({
375
+ field: segment.name,
376
+ expected: `>= ${segment.minOccurs} occurrences`,
377
+ actual: `${occurrences} occurrences`,
378
+ rule: 'minOccurs',
379
+ });
380
+ }
381
+ if (segment.maxOccurs > 0 && occurrences > segment.maxOccurs) {
382
+ fieldErrors.push({
383
+ field: segment.name,
384
+ expected: `<= ${segment.maxOccurs} occurrences`,
385
+ actual: `${occurrences} occurrences`,
386
+ rule: 'maxOccurs',
387
+ });
388
+ }
389
+ // Validate fields within each occurrence
390
+ if (segmentData) {
391
+ for (const record of segmentData) {
392
+ this.validateIDocFields(segment.fields, record, fieldErrors);
393
+ }
394
+ }
395
+ results.push({
396
+ segment: segment.name,
397
+ valid: fieldErrors.length === 0,
398
+ fieldErrors,
399
+ });
400
+ // Recurse into child segments
401
+ if (segment.children && segment.children.length > 0) {
402
+ this.validateIDocSegments(segment.children, parsedSegments, results);
403
+ }
404
+ }
405
+ }
406
+ validateIDocFields(fields, record, errors) {
407
+ // Skip raw-data-only records (flat file format)
408
+ if ('_raw' in record && Object.keys(record).length === 1)
409
+ return;
410
+ for (const field of fields) {
411
+ const value = record[field.name];
412
+ // Check mandatory fields
413
+ if (field.mandatory && (value === undefined || value === null || value === '')) {
414
+ errors.push({
415
+ field: field.name,
416
+ expected: 'non-empty value',
417
+ actual: value === undefined ? 'undefined' : `'${value}'`,
418
+ rule: 'mandatory',
419
+ });
420
+ continue;
421
+ }
422
+ if (value === undefined || value === null)
423
+ continue;
424
+ // Validate length
425
+ if (String(value).length > field.length) {
426
+ errors.push({
427
+ field: field.name,
428
+ expected: `max length ${field.length}`,
429
+ actual: `length ${String(value).length}`,
430
+ rule: 'maxLength',
431
+ });
432
+ }
433
+ // Validate type-specific format
434
+ this.validateIDocFieldValue(field, String(value), errors);
435
+ }
436
+ }
437
+ validateIDocFieldValue(field, value, errors) {
438
+ switch (field.type) {
439
+ case 'NUMC':
440
+ if (!/^\d*$/.test(value)) {
441
+ errors.push({
442
+ field: field.name,
443
+ expected: 'numeric characters only',
444
+ actual: `'${value}'`,
445
+ rule: 'type-NUMC',
446
+ });
447
+ }
448
+ break;
449
+ case 'DATS':
450
+ if (value !== '00000000' && !/^\d{8}$/.test(value)) {
451
+ errors.push({
452
+ field: field.name,
453
+ expected: 'YYYYMMDD format (8 digits)',
454
+ actual: `'${value}'`,
455
+ rule: 'type-DATS',
456
+ });
457
+ }
458
+ else if (value !== '00000000' && /^\d{8}$/.test(value)) {
459
+ const year = parseInt(value.substring(0, 4), 10);
460
+ const month = parseInt(value.substring(4, 6), 10);
461
+ const day = parseInt(value.substring(6, 8), 10);
462
+ if (month < 1 || month > 12 || day < 1 || day > 31 || year < 1900 || year > 9999) {
463
+ errors.push({
464
+ field: field.name,
465
+ expected: 'valid date (YYYYMMDD)',
466
+ actual: `'${value}'`,
467
+ rule: 'type-DATS-valid',
468
+ });
469
+ }
470
+ }
471
+ break;
472
+ case 'TIMS':
473
+ if (!/^\d{6}$/.test(value)) {
474
+ errors.push({
475
+ field: field.name,
476
+ expected: 'HHMMSS format (6 digits)',
477
+ actual: `'${value}'`,
478
+ rule: 'type-TIMS',
479
+ });
480
+ }
481
+ else {
482
+ const hours = parseInt(value.substring(0, 2), 10);
483
+ const minutes = parseInt(value.substring(2, 4), 10);
484
+ const seconds = parseInt(value.substring(4, 6), 10);
485
+ if (hours > 23 || minutes > 59 || seconds > 59) {
486
+ errors.push({
487
+ field: field.name,
488
+ expected: 'valid time (HH:00-23, MM:00-59, SS:00-59)',
489
+ actual: `'${value}'`,
490
+ rule: 'type-TIMS-valid',
491
+ });
492
+ }
493
+ }
494
+ break;
495
+ case 'CURR':
496
+ case 'QUAN':
497
+ case 'DEC':
498
+ if (!/^-?\d*\.?\d*$/.test(value.trim())) {
499
+ errors.push({
500
+ field: field.name,
501
+ expected: 'decimal number',
502
+ actual: `'${value}'`,
503
+ rule: `type-${field.type}`,
504
+ });
505
+ }
506
+ break;
507
+ case 'CHAR':
508
+ // CHAR accepts any character, just validate length (done above)
509
+ break;
510
+ }
511
+ }
512
+ }
513
+ //# sourceMappingURL=sap-integration-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sap-integration-service.js","sourceRoot":"","sources":["../../../../src/domains/enterprise-integration/services/sap-integration-service.ts"],"names":[],"mappings":"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"}