@nahisaho/musubix-security 1.8.0 → 1.8.1

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 (186) hide show
  1. package/README.md +27 -0
  2. package/dist/analyzers/ai/index.d.ts +6 -0
  3. package/dist/analyzers/ai/index.d.ts.map +1 -0
  4. package/dist/analyzers/ai/index.js +6 -0
  5. package/dist/analyzers/ai/index.js.map +1 -0
  6. package/dist/analyzers/ai/prompt-injection-detector.d.ts +152 -0
  7. package/dist/analyzers/ai/prompt-injection-detector.d.ts.map +1 -0
  8. package/dist/analyzers/ai/prompt-injection-detector.js +468 -0
  9. package/dist/analyzers/ai/prompt-injection-detector.js.map +1 -0
  10. package/dist/analyzers/api/api-security-analyzer.d.ts +263 -0
  11. package/dist/analyzers/api/api-security-analyzer.d.ts.map +1 -0
  12. package/dist/analyzers/api/api-security-analyzer.js +581 -0
  13. package/dist/analyzers/api/api-security-analyzer.js.map +1 -0
  14. package/dist/analyzers/compliance/compliance-checker.d.ts +201 -0
  15. package/dist/analyzers/compliance/compliance-checker.d.ts.map +1 -0
  16. package/dist/analyzers/compliance/compliance-checker.js +772 -0
  17. package/dist/analyzers/compliance/compliance-checker.js.map +1 -0
  18. package/dist/analyzers/container/image-scanner.d.ts +163 -0
  19. package/dist/analyzers/container/image-scanner.d.ts.map +1 -0
  20. package/dist/analyzers/container/image-scanner.js +459 -0
  21. package/dist/analyzers/container/image-scanner.js.map +1 -0
  22. package/dist/analyzers/container/index.d.ts +6 -0
  23. package/dist/analyzers/container/index.d.ts.map +1 -0
  24. package/dist/analyzers/container/index.js +6 -0
  25. package/dist/analyzers/container/index.js.map +1 -0
  26. package/dist/analyzers/dashboard/security-dashboard.d.ts +286 -0
  27. package/dist/analyzers/dashboard/security-dashboard.d.ts.map +1 -0
  28. package/dist/analyzers/dashboard/security-dashboard.js +796 -0
  29. package/dist/analyzers/dashboard/security-dashboard.js.map +1 -0
  30. package/dist/analyzers/iac/iac-checker.d.ts +124 -0
  31. package/dist/analyzers/iac/iac-checker.d.ts.map +1 -0
  32. package/dist/analyzers/iac/iac-checker.js +755 -0
  33. package/dist/analyzers/iac/iac-checker.js.map +1 -0
  34. package/dist/analyzers/iac/index.d.ts +6 -0
  35. package/dist/analyzers/iac/index.d.ts.map +1 -0
  36. package/dist/analyzers/iac/index.js +6 -0
  37. package/dist/analyzers/iac/index.js.map +1 -0
  38. package/dist/analyzers/index.d.ts +9 -0
  39. package/dist/analyzers/index.d.ts.map +1 -0
  40. package/dist/analyzers/index.js +13 -0
  41. package/dist/analyzers/index.js.map +1 -0
  42. package/dist/analyzers/monitor/realtime-monitor.d.ts +216 -0
  43. package/dist/analyzers/monitor/realtime-monitor.d.ts.map +1 -0
  44. package/dist/analyzers/monitor/realtime-monitor.js +601 -0
  45. package/dist/analyzers/monitor/realtime-monitor.js.map +1 -0
  46. package/dist/analyzers/sast/index.d.ts +7 -0
  47. package/dist/analyzers/sast/index.d.ts.map +1 -0
  48. package/dist/analyzers/sast/index.js +7 -0
  49. package/dist/analyzers/sast/index.js.map +1 -0
  50. package/dist/analyzers/sast/interprocedural-analyzer.d.ts +276 -0
  51. package/dist/analyzers/sast/interprocedural-analyzer.d.ts.map +1 -0
  52. package/dist/analyzers/sast/interprocedural-analyzer.js +635 -0
  53. package/dist/analyzers/sast/interprocedural-analyzer.js.map +1 -0
  54. package/dist/analyzers/sast/zero-day-detector.d.ts +183 -0
  55. package/dist/analyzers/sast/zero-day-detector.d.ts.map +1 -0
  56. package/dist/analyzers/sast/zero-day-detector.js +593 -0
  57. package/dist/analyzers/sast/zero-day-detector.js.map +1 -0
  58. package/dist/analyzers/sca/dependency-scanner.d.ts +275 -0
  59. package/dist/analyzers/sca/dependency-scanner.d.ts.map +1 -0
  60. package/dist/analyzers/sca/dependency-scanner.js +642 -0
  61. package/dist/analyzers/sca/dependency-scanner.js.map +1 -0
  62. package/dist/core/index.d.ts +8 -0
  63. package/dist/core/index.d.ts.map +1 -0
  64. package/dist/core/index.js +10 -0
  65. package/dist/core/index.js.map +1 -0
  66. package/dist/core/pipeline-manager.d.ts +105 -0
  67. package/dist/core/pipeline-manager.d.ts.map +1 -0
  68. package/dist/core/pipeline-manager.js +449 -0
  69. package/dist/core/pipeline-manager.js.map +1 -0
  70. package/dist/core/result-aggregator.d.ts +96 -0
  71. package/dist/core/result-aggregator.d.ts.map +1 -0
  72. package/dist/core/result-aggregator.js +462 -0
  73. package/dist/core/result-aggregator.js.map +1 -0
  74. package/dist/index.d.ts +15 -0
  75. package/dist/index.d.ts.map +1 -1
  76. package/dist/index.js +68 -0
  77. package/dist/index.js.map +1 -1
  78. package/dist/integrations/ci-integration.d.ts +227 -0
  79. package/dist/integrations/ci-integration.d.ts.map +1 -0
  80. package/dist/integrations/ci-integration.js +472 -0
  81. package/dist/integrations/ci-integration.js.map +1 -0
  82. package/dist/integrations/git-hooks.d.ts +155 -0
  83. package/dist/integrations/git-hooks.d.ts.map +1 -0
  84. package/dist/integrations/git-hooks.js +425 -0
  85. package/dist/integrations/git-hooks.js.map +1 -0
  86. package/dist/integrations/index.d.ts +9 -0
  87. package/dist/integrations/index.d.ts.map +1 -0
  88. package/dist/integrations/index.js +9 -0
  89. package/dist/integrations/index.js.map +1 -0
  90. package/dist/integrations/report-aggregator.d.ts +250 -0
  91. package/dist/integrations/report-aggregator.d.ts.map +1 -0
  92. package/dist/integrations/report-aggregator.js +488 -0
  93. package/dist/integrations/report-aggregator.js.map +1 -0
  94. package/dist/integrations/vscode-integration.d.ts +245 -0
  95. package/dist/integrations/vscode-integration.d.ts.map +1 -0
  96. package/dist/integrations/vscode-integration.js +449 -0
  97. package/dist/integrations/vscode-integration.js.map +1 -0
  98. package/dist/intelligence/attack-pattern-matcher.d.ts +217 -0
  99. package/dist/intelligence/attack-pattern-matcher.d.ts.map +1 -0
  100. package/dist/intelligence/attack-pattern-matcher.js +887 -0
  101. package/dist/intelligence/attack-pattern-matcher.js.map +1 -0
  102. package/dist/intelligence/index.d.ts +12 -0
  103. package/dist/intelligence/index.d.ts.map +1 -0
  104. package/dist/intelligence/index.js +18 -0
  105. package/dist/intelligence/index.js.map +1 -0
  106. package/dist/intelligence/neuro-symbolic-core.d.ts +88 -0
  107. package/dist/intelligence/neuro-symbolic-core.d.ts.map +1 -0
  108. package/dist/intelligence/neuro-symbolic-core.js +403 -0
  109. package/dist/intelligence/neuro-symbolic-core.js.map +1 -0
  110. package/dist/intelligence/predictive-analyzer.d.ts +317 -0
  111. package/dist/intelligence/predictive-analyzer.d.ts.map +1 -0
  112. package/dist/intelligence/predictive-analyzer.js +714 -0
  113. package/dist/intelligence/predictive-analyzer.js.map +1 -0
  114. package/dist/intelligence/risk-scorer.d.ts +333 -0
  115. package/dist/intelligence/risk-scorer.d.ts.map +1 -0
  116. package/dist/intelligence/risk-scorer.js +824 -0
  117. package/dist/intelligence/risk-scorer.js.map +1 -0
  118. package/dist/intelligence/security-analytics.d.ts +349 -0
  119. package/dist/intelligence/security-analytics.d.ts.map +1 -0
  120. package/dist/intelligence/security-analytics.js +813 -0
  121. package/dist/intelligence/security-analytics.js.map +1 -0
  122. package/dist/intelligence/threat-intelligence.d.ts +288 -0
  123. package/dist/intelligence/threat-intelligence.d.ts.map +1 -0
  124. package/dist/intelligence/threat-intelligence.js +639 -0
  125. package/dist/intelligence/threat-intelligence.js.map +1 -0
  126. package/dist/policy/index.d.ts +6 -0
  127. package/dist/policy/index.d.ts.map +1 -0
  128. package/dist/policy/index.js +6 -0
  129. package/dist/policy/index.js.map +1 -0
  130. package/dist/policy/policy-engine.d.ts +254 -0
  131. package/dist/policy/policy-engine.d.ts.map +1 -0
  132. package/dist/policy/policy-engine.js +651 -0
  133. package/dist/policy/policy-engine.js.map +1 -0
  134. package/dist/remediation/auto-fixer.d.ts +179 -0
  135. package/dist/remediation/auto-fixer.d.ts.map +1 -0
  136. package/dist/remediation/auto-fixer.js +540 -0
  137. package/dist/remediation/auto-fixer.js.map +1 -0
  138. package/dist/remediation/fix-validator.d.ts +195 -0
  139. package/dist/remediation/fix-validator.d.ts.map +1 -0
  140. package/dist/remediation/fix-validator.js +462 -0
  141. package/dist/remediation/fix-validator.js.map +1 -0
  142. package/dist/remediation/index.d.ts +10 -0
  143. package/dist/remediation/index.d.ts.map +1 -0
  144. package/dist/remediation/index.js +15 -0
  145. package/dist/remediation/index.js.map +1 -0
  146. package/dist/remediation/patch-generator.d.ts +203 -0
  147. package/dist/remediation/patch-generator.d.ts.map +1 -0
  148. package/dist/remediation/patch-generator.js +533 -0
  149. package/dist/remediation/patch-generator.js.map +1 -0
  150. package/dist/remediation/remediation-planner.d.ts +262 -0
  151. package/dist/remediation/remediation-planner.d.ts.map +1 -0
  152. package/dist/remediation/remediation-planner.js +531 -0
  153. package/dist/remediation/remediation-planner.js.map +1 -0
  154. package/dist/remediation/secure-code-transformer.d.ts +222 -0
  155. package/dist/remediation/secure-code-transformer.d.ts.map +1 -0
  156. package/dist/remediation/secure-code-transformer.js +625 -0
  157. package/dist/remediation/secure-code-transformer.js.map +1 -0
  158. package/dist/types/fix.d.ts +3 -1
  159. package/dist/types/fix.d.ts.map +1 -1
  160. package/dist/types/index.d.ts +6 -0
  161. package/dist/types/index.d.ts.map +1 -1
  162. package/dist/types/index.js +1 -0
  163. package/dist/types/index.js.map +1 -1
  164. package/dist/types/interprocedural.d.ts +203 -0
  165. package/dist/types/interprocedural.d.ts.map +1 -0
  166. package/dist/types/interprocedural.js +7 -0
  167. package/dist/types/interprocedural.js.map +1 -0
  168. package/dist/types/neuro-symbolic.d.ts +179 -0
  169. package/dist/types/neuro-symbolic.d.ts.map +1 -0
  170. package/dist/types/neuro-symbolic.js +7 -0
  171. package/dist/types/neuro-symbolic.js.map +1 -0
  172. package/dist/types/pipeline.d.ts +173 -0
  173. package/dist/types/pipeline.d.ts.map +1 -0
  174. package/dist/types/pipeline.js +7 -0
  175. package/dist/types/pipeline.js.map +1 -0
  176. package/dist/types/result.d.ts +134 -0
  177. package/dist/types/result.d.ts.map +1 -0
  178. package/dist/types/result.js +25 -0
  179. package/dist/types/result.js.map +1 -0
  180. package/dist/types/vulnerability.d.ts +2 -2
  181. package/dist/types/vulnerability.d.ts.map +1 -1
  182. package/dist/types/zero-day.d.ts +146 -0
  183. package/dist/types/zero-day.d.ts.map +1 -0
  184. package/dist/types/zero-day.js +7 -0
  185. package/dist/types/zero-day.js.map +1 -0
  186. package/package.json +2 -2
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @fileoverview Core orchestration components
3
+ * @module @nahisaho/musubix-security/core
4
+ * @trace DES-SEC2-ORCH-001, DES-SEC2-ORCH-002, DES-SEC2-ORCH-003
5
+ */
6
+ export { PipelineManager, createPipelineManager, createStandardPipeline, } from './pipeline-manager.js';
7
+ export { ResultAggregator, createResultAggregator, mergeSimilarByLocation, } from './result-aggregator.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @fileoverview Core orchestration components
3
+ * @module @nahisaho/musubix-security/core
4
+ * @trace DES-SEC2-ORCH-001, DES-SEC2-ORCH-002, DES-SEC2-ORCH-003
5
+ */
6
+ // Pipeline Manager
7
+ export { PipelineManager, createPipelineManager, createStandardPipeline, } from './pipeline-manager.js';
8
+ // Result Aggregator
9
+ export { ResultAggregator, createResultAggregator, mergeSimilarByLocation, } from './result-aggregator.js';
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,mBAAmB;AACnB,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,uBAAuB,CAAC;AAE/B,oBAAoB;AACpB,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,105 @@
1
+ /**
2
+ * @fileoverview Pipeline Manager - orchestrates security analysis pipelines
3
+ * @module @nahisaho/musubix-security/core/pipeline-manager
4
+ * @trace DES-SEC2-ORCH-002, REQ-SEC2-PERF-001
5
+ */
6
+ import type { Pipeline, PipelineConfig, PipelineResult, PipelineProgress, IPipelineManager, AnalyzerType, AnalyzerInstance } from '../types/index.js';
7
+ /**
8
+ * Analyzer factory for creating analyzer instances
9
+ */
10
+ type AnalyzerFactory = () => AnalyzerInstance;
11
+ /**
12
+ * Pipeline Manager implementation
13
+ * @trace DES-SEC2-ORCH-002
14
+ */
15
+ export declare class PipelineManager implements IPipelineManager {
16
+ private runningPipelines;
17
+ private analyzerFactories;
18
+ constructor();
19
+ /**
20
+ * Register a custom analyzer factory
21
+ */
22
+ registerAnalyzer(type: AnalyzerType, factory: AnalyzerFactory): void;
23
+ /**
24
+ * Create a new pipeline from configuration
25
+ * @trace DES-SEC2-ORCH-002
26
+ */
27
+ createPipeline(config: PipelineConfig): Pipeline;
28
+ /**
29
+ * Execute multiple pipelines in parallel
30
+ * @trace REQ-SEC2-PERF-001
31
+ */
32
+ executeParallel(pipelines: Pipeline[]): Promise<PipelineResult[]>;
33
+ /**
34
+ * Execute a single pipeline sequentially
35
+ */
36
+ executeSequential(pipeline: Pipeline): Promise<PipelineResult>;
37
+ /**
38
+ * Cancel a running pipeline
39
+ */
40
+ cancel(pipelineId: string): void;
41
+ /**
42
+ * Get current pipeline status
43
+ */
44
+ getStatus(pipelineId: string): PipelineProgress | undefined;
45
+ /**
46
+ * Execute a pipeline with dependency resolution
47
+ */
48
+ private executePipeline;
49
+ /**
50
+ * Resolve stage dependencies and return execution order
51
+ */
52
+ private resolveDependencies;
53
+ /**
54
+ * Execute stages respecting dependencies with parallel execution
55
+ */
56
+ private executeStagesWithDependencies;
57
+ /**
58
+ * Execute a single stage
59
+ */
60
+ private executeStage;
61
+ /**
62
+ * Run analyzer based on type
63
+ */
64
+ private runAnalyzer;
65
+ /**
66
+ * Create timeout promise
67
+ */
68
+ private createTimeout;
69
+ /**
70
+ * Skip stages that depend on a failed stage
71
+ */
72
+ private skipDependentStages;
73
+ /**
74
+ * Calculate current progress
75
+ */
76
+ private calculateProgress;
77
+ /**
78
+ * Notify progress callback
79
+ */
80
+ private notifyProgress;
81
+ /**
82
+ * Build final pipeline result
83
+ */
84
+ private buildResult;
85
+ /**
86
+ * Split array into chunks
87
+ */
88
+ private chunkArray;
89
+ }
90
+ /**
91
+ * Create a default pipeline manager instance
92
+ */
93
+ export declare function createPipelineManager(): PipelineManager;
94
+ /**
95
+ * Create a standard security scan pipeline
96
+ * @trace REQ-SEC2-CLI-001
97
+ */
98
+ export declare function createStandardPipeline(targets: string[], options?: {
99
+ vulnerabilities?: boolean;
100
+ taint?: boolean;
101
+ secrets?: boolean;
102
+ dependencies?: boolean;
103
+ }): PipelineConfig;
104
+ export {};
105
+ //# sourceMappingURL=pipeline-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline-manager.d.ts","sourceRoot":"","sources":["../../src/core/pipeline-manager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EACV,QAAQ,EACR,cAAc,EACd,cAAc,EACd,gBAAgB,EAIhB,gBAAgB,EAEhB,YAAY,EACZ,gBAAgB,EAEjB,MAAM,mBAAmB,CAAC;AAqB3B;;GAEG;AACH,KAAK,eAAe,GAAG,MAAM,gBAAgB,CAAC;AAE9C;;;GAGG;AACH,qBAAa,eAAgB,YAAW,gBAAgB;IACtD,OAAO,CAAC,gBAAgB,CAA2C;IACnE,OAAO,CAAC,iBAAiB,CAAqC;;IAyC9D;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,eAAe,GAAG,IAAI;IAIpE;;;OAGG;IACH,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,QAAQ;IAwBhD;;;OAGG;IACG,eAAe,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAYvE;;OAEG;IACG,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,cAAc,CAAC;IAQpE;;OAEG;IACH,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAehC;;OAEG;IACH,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;IAO3D;;OAEG;YACW,eAAe;IAsC7B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAiC3B;;OAEG;YACW,6BAA6B;IAuB3C;;OAEG;YACW,YAAY;IAyE1B;;OAEG;YACW,WAAW;IA0BzB;;OAEG;IACH,OAAO,CAAC,aAAa;IAQrB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAY3B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA2BzB;;OAEG;IACH,OAAO,CAAC,cAAc;IAMtB;;OAEG;IACH,OAAO,CAAC,WAAW;IAqCnB;;OAEG;IACH,OAAO,CAAC,UAAU;CAOnB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,eAAe,CAEvD;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,GAAE;IACP,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;CACnB,GACL,cAAc,CA6ChB"}
@@ -0,0 +1,449 @@
1
+ /**
2
+ * @fileoverview Pipeline Manager - orchestrates security analysis pipelines
3
+ * @module @nahisaho/musubix-security/core/pipeline-manager
4
+ * @trace DES-SEC2-ORCH-002, REQ-SEC2-PERF-001
5
+ */
6
+ import { randomUUID } from 'node:crypto';
7
+ import { VulnerabilityScanner } from '../analysis/index.js';
8
+ import { TaintAnalyzer } from '../analysis/index.js';
9
+ import { SecretDetector } from '../analysis/index.js';
10
+ import { DependencyAuditor } from '../analysis/index.js';
11
+ /**
12
+ * Pipeline Manager implementation
13
+ * @trace DES-SEC2-ORCH-002
14
+ */
15
+ export class PipelineManager {
16
+ runningPipelines = new Map();
17
+ analyzerFactories;
18
+ constructor() {
19
+ // Initialize analyzer factories with explicit typing
20
+ // Wrap existing analyzers to conform to AnalyzerInstance interface
21
+ const factories = [
22
+ ['vulnerability-scanner', () => {
23
+ const scanner = new VulnerabilityScanner();
24
+ return {
25
+ scan: async (path, options) => scanner.scanDirectory(path, options),
26
+ };
27
+ }],
28
+ ['taint-tracker', () => {
29
+ const analyzer = new TaintAnalyzer();
30
+ return {
31
+ analyze: async (path, _options) => analyzer.analyzeFile(path),
32
+ };
33
+ }],
34
+ ['secret-detector', () => {
35
+ const detector = new SecretDetector();
36
+ return {
37
+ detect: async (path, _options) => detector.scan(path),
38
+ };
39
+ }],
40
+ ['dependency-auditor', () => {
41
+ const auditor = new DependencyAuditor();
42
+ return {
43
+ audit: async (path, _options) => auditor.audit(path),
44
+ };
45
+ }],
46
+ // Placeholders for new analyzers (to be implemented in Phase 2)
47
+ ['image-scanner', () => ({ scan: async () => ({ vulnerabilities: [] }) })],
48
+ ['iac-checker', () => ({ analyze: async () => ({ issues: [] }) })],
49
+ ['prompt-injection-detector', () => ({ detect: async () => ({ findings: [] }) })],
50
+ ['compliance-validator', () => ({ validate: async () => ({ compliant: true }) })],
51
+ ['zero-day-detector', () => ({ detect: async () => ({ candidates: [] }) })],
52
+ ['interprocedural-analyzer', () => ({ analyze: async () => ({ callGraph: { nodes: [], edges: [], roots: [], leaves: [] } }) })],
53
+ ];
54
+ this.analyzerFactories = new Map(factories);
55
+ }
56
+ /**
57
+ * Register a custom analyzer factory
58
+ */
59
+ registerAnalyzer(type, factory) {
60
+ this.analyzerFactories.set(type, factory);
61
+ }
62
+ /**
63
+ * Create a new pipeline from configuration
64
+ * @trace DES-SEC2-ORCH-002
65
+ */
66
+ createPipeline(config) {
67
+ const id = randomUUID();
68
+ const context = {
69
+ id,
70
+ config,
71
+ status: 'pending',
72
+ stageStatuses: new Map(config.stages.map(s => [s.id, 'pending'])),
73
+ stageResults: new Map(),
74
+ cancelled: false,
75
+ };
76
+ this.runningPipelines.set(id, context);
77
+ const pipeline = {
78
+ id,
79
+ config,
80
+ execute: () => this.executePipeline(context),
81
+ cancel: () => this.cancel(id),
82
+ };
83
+ return pipeline;
84
+ }
85
+ /**
86
+ * Execute multiple pipelines in parallel
87
+ * @trace REQ-SEC2-PERF-001
88
+ */
89
+ async executeParallel(pipelines) {
90
+ const promises = pipelines.map(p => {
91
+ const context = this.runningPipelines.get(p.id);
92
+ if (!context) {
93
+ throw new Error(`Pipeline ${p.id} not found`);
94
+ }
95
+ return this.executePipeline(context);
96
+ });
97
+ return Promise.all(promises);
98
+ }
99
+ /**
100
+ * Execute a single pipeline sequentially
101
+ */
102
+ async executeSequential(pipeline) {
103
+ const context = this.runningPipelines.get(pipeline.id);
104
+ if (!context) {
105
+ throw new Error(`Pipeline ${pipeline.id} not found`);
106
+ }
107
+ return this.executePipeline(context);
108
+ }
109
+ /**
110
+ * Cancel a running pipeline
111
+ */
112
+ cancel(pipelineId) {
113
+ const context = this.runningPipelines.get(pipelineId);
114
+ if (context) {
115
+ context.cancelled = true;
116
+ context.status = 'cancelled';
117
+ // Mark pending stages as cancelled
118
+ for (const [stageId, status] of context.stageStatuses) {
119
+ if (status === 'pending' || status === 'running') {
120
+ context.stageStatuses.set(stageId, 'cancelled');
121
+ }
122
+ }
123
+ }
124
+ }
125
+ /**
126
+ * Get current pipeline status
127
+ */
128
+ getStatus(pipelineId) {
129
+ const context = this.runningPipelines.get(pipelineId);
130
+ if (!context)
131
+ return undefined;
132
+ return this.calculateProgress(context);
133
+ }
134
+ /**
135
+ * Execute a pipeline with dependency resolution
136
+ */
137
+ async executePipeline(context) {
138
+ context.startTime = new Date();
139
+ context.status = 'running';
140
+ try {
141
+ // Build dependency graph
142
+ const stageOrder = this.resolveDependencies(context.config.stages);
143
+ // Execute stages respecting dependencies
144
+ const maxParallel = context.config.maxParallel ?? 4;
145
+ await this.executeStagesWithDependencies(context, stageOrder, maxParallel);
146
+ // Determine final status
147
+ const hasFailures = Array.from(context.stageStatuses.values())
148
+ .some(s => s === 'failed');
149
+ context.status = context.cancelled ? 'cancelled' :
150
+ hasFailures ? 'failed' : 'completed';
151
+ }
152
+ catch (error) {
153
+ // Rethrow circular dependency errors
154
+ if (error instanceof Error && error.message.includes('Circular dependency')) {
155
+ throw error;
156
+ }
157
+ context.status = 'failed';
158
+ }
159
+ context.endTime = new Date();
160
+ // Build result
161
+ const result = this.buildResult(context);
162
+ // Cleanup
163
+ this.runningPipelines.delete(context.id);
164
+ return result;
165
+ }
166
+ /**
167
+ * Resolve stage dependencies and return execution order
168
+ */
169
+ resolveDependencies(stages) {
170
+ const levels = [];
171
+ const resolved = new Set();
172
+ while (resolved.size < stages.length) {
173
+ const level = [];
174
+ for (const stage of stages) {
175
+ if (resolved.has(stage.id))
176
+ continue;
177
+ const deps = stage.dependsOn ?? [];
178
+ const allDepsResolved = deps.every(d => resolved.has(d));
179
+ if (allDepsResolved) {
180
+ level.push(stage);
181
+ }
182
+ }
183
+ if (level.length === 0 && resolved.size < stages.length) {
184
+ // Circular dependency detected
185
+ throw new Error('Circular dependency detected in pipeline stages');
186
+ }
187
+ for (const stage of level) {
188
+ resolved.add(stage.id);
189
+ }
190
+ levels.push(level);
191
+ }
192
+ return levels;
193
+ }
194
+ /**
195
+ * Execute stages respecting dependencies with parallel execution
196
+ */
197
+ async executeStagesWithDependencies(context, stageOrder, maxParallel) {
198
+ for (const level of stageOrder) {
199
+ if (context.cancelled)
200
+ break;
201
+ // Execute stages in this level in parallel (up to maxParallel)
202
+ const chunks = this.chunkArray(level, maxParallel);
203
+ for (const chunk of chunks) {
204
+ if (context.cancelled)
205
+ break;
206
+ await Promise.all(chunk.map(stage => this.executeStage(context, stage)));
207
+ this.notifyProgress(context);
208
+ }
209
+ }
210
+ }
211
+ /**
212
+ * Execute a single stage
213
+ */
214
+ async executeStage(context, stage) {
215
+ if (context.cancelled) {
216
+ context.stageStatuses.set(stage.id, 'cancelled');
217
+ return;
218
+ }
219
+ context.stageStatuses.set(stage.id, 'running');
220
+ const startTime = new Date();
221
+ try {
222
+ const factory = this.analyzerFactories.get(stage.analyzer);
223
+ if (!factory) {
224
+ throw new Error(`Unknown analyzer type: ${stage.analyzer}`);
225
+ }
226
+ const analyzer = factory();
227
+ let result;
228
+ // Execute with timeout if specified
229
+ const timeout = stage.timeout ?? context.config.timeout ?? 300000; // 5 min default
230
+ const executePromise = this.runAnalyzer(analyzer, stage.analyzer, context.config.targets, stage.options);
231
+ result = await Promise.race([
232
+ executePromise,
233
+ this.createTimeout(timeout, stage.id),
234
+ ]);
235
+ const endTime = new Date();
236
+ const stageResult = {
237
+ stageId: stage.id,
238
+ status: 'completed',
239
+ duration: endTime.getTime() - startTime.getTime(),
240
+ data: result,
241
+ startedAt: startTime,
242
+ endedAt: endTime,
243
+ };
244
+ context.stageResults.set(stage.id, stageResult);
245
+ context.stageStatuses.set(stage.id, 'completed');
246
+ }
247
+ catch (error) {
248
+ const endTime = new Date();
249
+ const stageResult = {
250
+ stageId: stage.id,
251
+ status: 'failed',
252
+ duration: endTime.getTime() - startTime.getTime(),
253
+ error: error instanceof Error ? error : new Error(String(error)),
254
+ startedAt: startTime,
255
+ endedAt: endTime,
256
+ };
257
+ context.stageResults.set(stage.id, stageResult);
258
+ context.stageStatuses.set(stage.id, 'failed');
259
+ // Check if we should continue on failure
260
+ if (!stage.continueOnFailure) {
261
+ // Mark dependent stages as skipped
262
+ this.skipDependentStages(context, stage.id);
263
+ }
264
+ }
265
+ }
266
+ /**
267
+ * Run analyzer based on type
268
+ */
269
+ async runAnalyzer(analyzer, type, targets, options) {
270
+ const target = targets[0] ?? '.'; // Use first target or current directory
271
+ switch (type) {
272
+ case 'vulnerability-scanner':
273
+ return analyzer.scan?.(target, options);
274
+ case 'taint-tracker':
275
+ return analyzer.analyze?.(target, options);
276
+ case 'secret-detector':
277
+ return analyzer.detect?.(target, options);
278
+ case 'dependency-auditor':
279
+ return analyzer.audit?.(target, options);
280
+ default:
281
+ // Generic execution for other analyzers
282
+ if (analyzer.scan)
283
+ return analyzer.scan(target, options);
284
+ if (analyzer.analyze)
285
+ return analyzer.analyze(target, options);
286
+ if (analyzer.detect)
287
+ return analyzer.detect(target, options);
288
+ throw new Error(`Analyzer ${type} does not have a known execution method`);
289
+ }
290
+ }
291
+ /**
292
+ * Create timeout promise
293
+ */
294
+ createTimeout(ms, stageId) {
295
+ return new Promise((_, reject) => {
296
+ setTimeout(() => {
297
+ reject(new Error(`Stage ${stageId} timed out after ${ms}ms`));
298
+ }, ms);
299
+ });
300
+ }
301
+ /**
302
+ * Skip stages that depend on a failed stage
303
+ */
304
+ skipDependentStages(context, failedStageId) {
305
+ for (const stage of context.config.stages) {
306
+ if (stage.dependsOn?.includes(failedStageId)) {
307
+ if (context.stageStatuses.get(stage.id) === 'pending') {
308
+ context.stageStatuses.set(stage.id, 'skipped');
309
+ // Recursively skip dependent stages
310
+ this.skipDependentStages(context, stage.id);
311
+ }
312
+ }
313
+ }
314
+ }
315
+ /**
316
+ * Calculate current progress
317
+ */
318
+ calculateProgress(context) {
319
+ const total = context.config.stages.length;
320
+ const completed = Array.from(context.stageStatuses.values())
321
+ .filter(s => s === 'completed' || s === 'failed' || s === 'skipped' || s === 'cancelled')
322
+ .length;
323
+ const runningStages = Array.from(context.stageStatuses.entries())
324
+ .filter(([_, status]) => status === 'running')
325
+ .map(([id]) => id);
326
+ const completedStages = Array.from(context.stageStatuses.entries())
327
+ .filter(([_, status]) => status === 'completed')
328
+ .map(([id]) => id);
329
+ const failedStages = Array.from(context.stageStatuses.entries())
330
+ .filter(([_, status]) => status === 'failed')
331
+ .map(([id]) => id);
332
+ return {
333
+ pipelineId: context.id,
334
+ percentage: Math.round((completed / total) * 100),
335
+ runningStages,
336
+ completedStages,
337
+ failedStages,
338
+ };
339
+ }
340
+ /**
341
+ * Notify progress callback
342
+ */
343
+ notifyProgress(context) {
344
+ if (context.onProgress) {
345
+ context.onProgress(this.calculateProgress(context));
346
+ }
347
+ }
348
+ /**
349
+ * Build final pipeline result
350
+ */
351
+ buildResult(context) {
352
+ const stageResults = Array.from(context.stageResults.values());
353
+ const statusCounts = {
354
+ completed: 0,
355
+ failed: 0,
356
+ skipped: 0,
357
+ cancelled: 0,
358
+ };
359
+ for (const status of context.stageStatuses.values()) {
360
+ if (status === 'completed')
361
+ statusCounts.completed++;
362
+ else if (status === 'failed')
363
+ statusCounts.failed++;
364
+ else if (status === 'skipped')
365
+ statusCounts.skipped++;
366
+ else if (status === 'cancelled')
367
+ statusCounts.cancelled++;
368
+ }
369
+ const endTime = context.endTime ?? new Date();
370
+ const startTime = context.startTime ?? endTime;
371
+ return {
372
+ pipelineId: context.id,
373
+ status: context.cancelled ? 'cancelled' :
374
+ statusCounts.failed > 0 ? 'failed' : 'completed',
375
+ stageResults,
376
+ duration: endTime.getTime() - startTime.getTime(),
377
+ startedAt: startTime,
378
+ endedAt: endTime,
379
+ summary: {
380
+ totalStages: context.config.stages.length,
381
+ completedStages: statusCounts.completed,
382
+ failedStages: statusCounts.failed,
383
+ skippedStages: statusCounts.skipped + statusCounts.cancelled,
384
+ },
385
+ };
386
+ }
387
+ /**
388
+ * Split array into chunks
389
+ */
390
+ chunkArray(array, size) {
391
+ const chunks = [];
392
+ for (let i = 0; i < array.length; i += size) {
393
+ chunks.push(array.slice(i, i + size));
394
+ }
395
+ return chunks;
396
+ }
397
+ }
398
+ /**
399
+ * Create a default pipeline manager instance
400
+ */
401
+ export function createPipelineManager() {
402
+ return new PipelineManager();
403
+ }
404
+ /**
405
+ * Create a standard security scan pipeline
406
+ * @trace REQ-SEC2-CLI-001
407
+ */
408
+ export function createStandardPipeline(targets, options = {}) {
409
+ const stages = [];
410
+ if (options.vulnerabilities !== false) {
411
+ stages.push({
412
+ id: 'vuln-scan',
413
+ name: 'Vulnerability Scan',
414
+ analyzer: 'vulnerability-scanner',
415
+ options: {},
416
+ });
417
+ }
418
+ if (options.taint !== false) {
419
+ stages.push({
420
+ id: 'taint-analysis',
421
+ name: 'Taint Analysis',
422
+ analyzer: 'taint-tracker',
423
+ options: {},
424
+ });
425
+ }
426
+ if (options.secrets !== false) {
427
+ stages.push({
428
+ id: 'secret-detection',
429
+ name: 'Secret Detection',
430
+ analyzer: 'secret-detector',
431
+ options: {},
432
+ });
433
+ }
434
+ if (options.dependencies !== false) {
435
+ stages.push({
436
+ id: 'dep-audit',
437
+ name: 'Dependency Audit',
438
+ analyzer: 'dependency-auditor',
439
+ options: {},
440
+ });
441
+ }
442
+ return {
443
+ stages,
444
+ targets,
445
+ maxParallel: 4,
446
+ cache: true,
447
+ };
448
+ }
449
+ //# sourceMappingURL=pipeline-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline-manager.js","sourceRoot":"","sources":["../../src/core/pipeline-manager.ts"],"names":[],"mappings":"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"}