sork-queb 1.0.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 (42) hide show
  1. package/README.md +757 -0
  2. package/dist/bin/sork.d.ts +3 -0
  3. package/dist/bin/sork.d.ts.map +1 -0
  4. package/dist/bin/sork.js +123 -0
  5. package/dist/bin/sork.js.map +1 -0
  6. package/dist/lib/agents/keeper.d.ts +16 -0
  7. package/dist/lib/agents/keeper.d.ts.map +1 -0
  8. package/dist/lib/agents/keeper.js +91 -0
  9. package/dist/lib/agents/keeper.js.map +1 -0
  10. package/dist/lib/agents/remediation.d.ts +10 -0
  11. package/dist/lib/agents/remediation.d.ts.map +1 -0
  12. package/dist/lib/agents/remediation.js +99 -0
  13. package/dist/lib/agents/remediation.js.map +1 -0
  14. package/dist/lib/agents/triage.d.ts +10 -0
  15. package/dist/lib/agents/triage.d.ts.map +1 -0
  16. package/dist/lib/agents/triage.js +62 -0
  17. package/dist/lib/agents/triage.js.map +1 -0
  18. package/dist/lib/fixers/codeFixer.d.ts +14 -0
  19. package/dist/lib/fixers/codeFixer.d.ts.map +1 -0
  20. package/dist/lib/fixers/codeFixer.js +134 -0
  21. package/dist/lib/fixers/codeFixer.js.map +1 -0
  22. package/dist/lib/index.d.ts +9 -0
  23. package/dist/lib/index.d.ts.map +1 -0
  24. package/dist/lib/index.js +8 -0
  25. package/dist/lib/index.js.map +1 -0
  26. package/dist/lib/orchestrator.d.ts +19 -0
  27. package/dist/lib/orchestrator.d.ts.map +1 -0
  28. package/dist/lib/orchestrator.js +175 -0
  29. package/dist/lib/orchestrator.js.map +1 -0
  30. package/dist/lib/security/scanner.d.ts +18 -0
  31. package/dist/lib/security/scanner.d.ts.map +1 -0
  32. package/dist/lib/security/scanner.js +287 -0
  33. package/dist/lib/security/scanner.js.map +1 -0
  34. package/dist/lib/types/index.d.ts +75 -0
  35. package/dist/lib/types/index.d.ts.map +1 -0
  36. package/dist/lib/types/index.js +5 -0
  37. package/dist/lib/types/index.js.map +1 -0
  38. package/dist/lib/utils/logger.d.ts +13 -0
  39. package/dist/lib/utils/logger.d.ts.map +1 -0
  40. package/dist/lib/utils/logger.js +35 -0
  41. package/dist/lib/utils/logger.js.map +1 -0
  42. package/package.json +52 -0
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=sork.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sork.d.ts","sourceRoot":"","sources":["../../bin/sork.ts"],"names":[],"mappings":""}
@@ -0,0 +1,123 @@
1
+ #!/usr/bin/env node
2
+ import chalk from 'chalk';
3
+ import minimist from 'minimist';
4
+ import { SorkOrchestrator } from '../lib/orchestrator.js';
5
+ import { Logger } from '../lib/utils/logger.js';
6
+ const logger = new Logger('SORK');
7
+ const argv = minimist(process.argv.slice(2), {
8
+ alias: {
9
+ h: 'help',
10
+ v: 'version',
11
+ p: 'path',
12
+ m: 'model',
13
+ },
14
+ default: {
15
+ path: process.cwd(),
16
+ model: 'anthropic',
17
+ },
18
+ });
19
+ function showBanner() {
20
+ console.log(chalk.cyan(`
21
+ ███████╗ ██████╗ ██████╗ ██╗ ██╗
22
+ ██╔════╝ ██╔═══██╗ ██╔══██╗ ██║ ██╔╝
23
+ ███████╗ ██║ ██║ ██████╔╝ █████╔╝
24
+ ╚════██║ ██║ ██║ ██╔══██╗ ██╔═██╗
25
+ ███████║ ╚██████╔╝ ██║ ██║ ██║ ██╗
26
+ ╚══════╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝
27
+ `));
28
+ console.log(chalk.bold('Security Orchestration, Remediation & Keeping'));
29
+ console.log(chalk.dim('Global AI Security Brain for Node Projects\n'));
30
+ }
31
+ function showHelp() {
32
+ console.log(chalk.bold('Usage: sork [command] [options]\n'));
33
+ console.log(chalk.bold('Commands:'));
34
+ console.log(' init Initialize SORK in current project');
35
+ console.log(' scan Run security scan on project');
36
+ console.log(' fix Auto-fix detected issues');
37
+ console.log(' status Show SORK status');
38
+ console.log(' pre-commit Run pre-commit hooks (auto-called)');
39
+ console.log(' setup-hooks Install git pre-commit hooks\n');
40
+ console.log(chalk.bold('Options:'));
41
+ console.log(' --path <dir> Project path (default: current)');
42
+ console.log(' --model <model> AI model to use (anthropic|local)');
43
+ console.log(' -v, --version Show version');
44
+ console.log(' -h, --help Show this help\n');
45
+ console.log(chalk.bold('Examples:'));
46
+ console.log(' sork init');
47
+ console.log(' sork scan --path ./my-project');
48
+ console.log(' sork fix --model anthropic');
49
+ console.log(' sork setup-hooks\n');
50
+ }
51
+ async function main() {
52
+ try {
53
+ showBanner();
54
+ if (argv.help) {
55
+ showHelp();
56
+ process.exit(0);
57
+ }
58
+ if (argv.version) {
59
+ console.log('SORK v1.0.0');
60
+ process.exit(0);
61
+ }
62
+ const command = (typeof argv._[0] === 'string' ? argv._[0] : String(argv._[0])) || 'status';
63
+ const projectPath = argv.path;
64
+ if (projectPath && (projectPath.includes('..') || projectPath.startsWith('/'))) {
65
+ logger.error('Invalid path: use relative paths only (e.g., . or ./my-project)');
66
+ process.exit(1);
67
+ }
68
+ const options = {
69
+ projectPath,
70
+ model: argv.model || 'anthropic',
71
+ };
72
+ const orchestrator = new SorkOrchestrator(options);
73
+ switch (command) {
74
+ case 'init':
75
+ logger.info('Initializing SORK in project...');
76
+ await orchestrator.initialize();
77
+ logger.success('SORK initialized! Run `sork setup-hooks` to enable pre-commit guards.');
78
+ break;
79
+ case 'scan':
80
+ logger.info('Running security scan...');
81
+ await orchestrator.scan();
82
+ break;
83
+ case 'fix':
84
+ logger.info('Auto-fixing issues...');
85
+ await orchestrator.fix();
86
+ logger.success('Auto-fix complete!');
87
+ break;
88
+ case 'pre-commit':
89
+ logger.info('Running pre-commit checks...');
90
+ await orchestrator.preCommit();
91
+ break;
92
+ case 'setup-hooks':
93
+ logger.info('Setting up git hooks...');
94
+ await orchestrator.setupHooks();
95
+ logger.success('Git hooks installed!');
96
+ break;
97
+ case 'status':
98
+ logger.info('Checking SORK status...');
99
+ await orchestrator.status();
100
+ break;
101
+ default:
102
+ logger.error(`Unknown command: ${command}`);
103
+ showHelp();
104
+ process.exit(1);
105
+ }
106
+ }
107
+ catch (error) {
108
+ logger.error(`Failed: ${error instanceof Error ? error.message : 'Unknown error'}`);
109
+ if (process.env.DEBUG) {
110
+ console.error(error);
111
+ }
112
+ process.exit(1);
113
+ }
114
+ }
115
+ main().catch((error) => {
116
+ const message = error instanceof Error ? error.message : 'Unknown error occurred';
117
+ logger.error(`Fatal error: ${message}`);
118
+ if (process.env.DEBUG) {
119
+ console.error(error);
120
+ }
121
+ process.exit(1);
122
+ });
123
+ //# sourceMappingURL=sork.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sork.js","sourceRoot":"","sources":["../../bin/sork.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { Logger } from '../utils/logger.js';
2
+ import { CodeFix, Vulnerability, VerificationResult, AuditLogEntry } from '../types/index.js';
3
+ export declare class KeeperAgent {
4
+ private name;
5
+ private logger;
6
+ private auditTrail;
7
+ constructor(logger: Logger);
8
+ verify(fixes: CodeFix[], vulnerabilities: Vulnerability[]): Promise<VerificationResult>;
9
+ private verifyFix;
10
+ private checkForNewIssues;
11
+ private detectRegressions;
12
+ private logAudit;
13
+ getAuditTrail(): AuditLogEntry[];
14
+ printSummary(results: VerificationResult): void;
15
+ }
16
+ //# sourceMappingURL=keeper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keeper.d.ts","sourceRoot":"","sources":["../../../lib/agents/keeper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAE9F,qBAAa,WAAW;IACtB,OAAO,CAAC,IAAI,CAAmC;IAC/C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,UAAU,CAAuB;gBAE7B,MAAM,EAAE,MAAM;IAIpB,MAAM,CACV,KAAK,EAAE,OAAO,EAAE,EAChB,eAAe,EAAE,aAAa,EAAE,GAC/B,OAAO,CAAC,kBAAkB,CAAC;YAiChB,SAAS;IAqBvB,OAAO,CAAC,iBAAiB;YAYX,iBAAiB;IAI/B,OAAO,CAAC,QAAQ;IAehB,aAAa,IAAI,aAAa,EAAE;IAIhC,YAAY,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI;CAqBhD"}
@@ -0,0 +1,91 @@
1
+ export class KeeperAgent {
2
+ name = 'Agent 03 · K (KEEPER)';
3
+ logger;
4
+ auditTrail = [];
5
+ constructor(logger) {
6
+ this.logger = logger;
7
+ }
8
+ async verify(fixes, vulnerabilities) {
9
+ this.logger.info(`${this.name} - Verifying fixes...`);
10
+ const results = {
11
+ verified: [],
12
+ failed: [],
13
+ regressions: [],
14
+ };
15
+ for (const fix of fixes) {
16
+ const verification = await this.verifyFix(fix, vulnerabilities);
17
+ if (verification.success) {
18
+ results.verified.push(fix);
19
+ this.logAudit('FIXED', fix.type, fix.file);
20
+ }
21
+ else {
22
+ results.failed.push({ fix, reason: verification.reason || 'Unknown' });
23
+ this.logAudit('FAILED', fix.type, fix.file);
24
+ }
25
+ }
26
+ const regressions = await this.detectRegressions();
27
+ results.regressions = regressions;
28
+ if (regressions.length > 0) {
29
+ this.logger.warn(`Detected ${regressions.length} potential regressions`);
30
+ regressions.forEach((r) => {
31
+ this.logAudit('REGRESSION', r.type, r.file);
32
+ });
33
+ }
34
+ return results;
35
+ }
36
+ async verifyFix(fix, originalVulnerabilities) {
37
+ const isAddressed = !originalVulnerabilities.some((v) => v.type === fix.type && v.file === fix.file && v.line === fix.line);
38
+ if (!isAddressed) {
39
+ return { success: false, reason: 'Vulnerability still present' };
40
+ }
41
+ const hasNewIssues = this.checkForNewIssues(fix);
42
+ if (hasNewIssues) {
43
+ return { success: false, reason: 'Fix introduces new issues' };
44
+ }
45
+ return { success: true };
46
+ }
47
+ checkForNewIssues(fix) {
48
+ const antiPatterns = [
49
+ /\/\/ TODO.*SECURITY/i,
50
+ /\/\/ FIXME/i,
51
+ /Math\.random\(\)/,
52
+ /eval\(/,
53
+ /dangerouslySetInnerHTML/,
54
+ ];
55
+ return antiPatterns.some((pattern) => pattern.test(fix.newCode));
56
+ }
57
+ async detectRegressions() {
58
+ return [];
59
+ }
60
+ logAudit(action, type, file, details) {
61
+ this.auditTrail.push({
62
+ timestamp: new Date().toISOString(),
63
+ action,
64
+ type,
65
+ file,
66
+ details,
67
+ });
68
+ }
69
+ getAuditTrail() {
70
+ return this.auditTrail;
71
+ }
72
+ printSummary(results) {
73
+ this.logger.section('Keeper Summary');
74
+ console.log(`Total Verified: ${results.verified.length}`);
75
+ console.log(`Failed: ${results.failed.length}`);
76
+ console.log(`Regressions: ${results.regressions.length}`);
77
+ if (results.verified.length > 0) {
78
+ this.logger.success('All critical issues resolved ✓');
79
+ }
80
+ if (results.failed.length > 0) {
81
+ this.logger.error('Some fixes failed:');
82
+ results.failed.forEach((f) => {
83
+ console.log(` - ${f.fix.type} in ${f.fix.file}: ${f.reason}`);
84
+ });
85
+ }
86
+ if (results.regressions.length === 0) {
87
+ this.logger.success('No regressions detected');
88
+ }
89
+ }
90
+ }
91
+ //# sourceMappingURL=keeper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keeper.js","sourceRoot":"","sources":["../../../lib/agents/keeper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { Logger } from '../utils/logger.js';
2
+ import { Vulnerability, CodeFix } from '../types/index.js';
3
+ export declare class RemediationAgent {
4
+ private name;
5
+ private logger;
6
+ constructor(logger: Logger);
7
+ generateFixes(vulnerabilities: Vulnerability[]): Promise<CodeFix[]>;
8
+ private createFix;
9
+ }
10
+ //# sourceMappingURL=remediation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remediation.d.ts","sourceRoot":"","sources":["../../../lib/agents/remediation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,OAAO,EAAqB,MAAM,mBAAmB,CAAC;AAE9E,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,IAAI,CAA0C;IACtD,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,EAAE,MAAM;IAIpB,aAAa,CAAC,eAAe,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAgBzE,OAAO,CAAC,SAAS;CAgFlB"}
@@ -0,0 +1,99 @@
1
+ export class RemediationAgent {
2
+ name = 'Agent 02 · O+R (REMEDIATION)';
3
+ logger;
4
+ constructor(logger) {
5
+ this.logger = logger;
6
+ }
7
+ async generateFixes(vulnerabilities) {
8
+ this.logger.info(`${this.name} - Generating targeted fixes...`);
9
+ const fixes = [];
10
+ for (const vuln of vulnerabilities) {
11
+ const fix = this.createFix(vuln);
12
+ if (fix) {
13
+ fixes.push(fix);
14
+ }
15
+ }
16
+ this.logger.success(`Generated ${fixes.length} fixes`);
17
+ return fixes;
18
+ }
19
+ createFix(vuln) {
20
+ const fixGenerators = {
21
+ SQL_INJECTION: () => ({
22
+ type: 'SQL_INJECTION',
23
+ file: vuln.file,
24
+ line: vuln.line,
25
+ description: 'Use parameterized queries instead of string concatenation',
26
+ oldCode: vuln.code || '',
27
+ newCode: `const query = 'SELECT * FROM users WHERE id = ?';\ndb.execute(query, [userId]);`,
28
+ priority: 'CRITICAL',
29
+ }),
30
+ XSS: () => ({
31
+ type: 'XSS',
32
+ file: vuln.file,
33
+ line: vuln.line,
34
+ description: 'Sanitize user input or use textContent instead of innerHTML',
35
+ oldCode: vuln.code || '',
36
+ newCode: `element.textContent = userInput;`,
37
+ priority: 'CRITICAL',
38
+ }),
39
+ HARDCODED_SECRET: () => ({
40
+ type: 'HARDCODED_SECRET',
41
+ file: vuln.file,
42
+ line: vuln.line,
43
+ description: 'Move secret to environment variable',
44
+ oldCode: vuln.code || '',
45
+ newCode: `const apiKey = process.env.API_KEY;\nif (!apiKey) throw new Error('API_KEY required');`,
46
+ priority: 'CRITICAL',
47
+ }),
48
+ INSECURE_RANDOM: () => ({
49
+ type: 'INSECURE_RANDOM',
50
+ file: vuln.file,
51
+ line: vuln.line,
52
+ description: 'Use crypto.randomBytes instead of Math.random',
53
+ oldCode: vuln.code || '',
54
+ newCode: `import { randomBytes } from 'crypto';\nconst token = randomBytes(32).toString('hex');`,
55
+ priority: 'HIGH',
56
+ }),
57
+ MISSING_VALIDATION: () => ({
58
+ type: 'MISSING_VALIDATION',
59
+ file: vuln.file,
60
+ line: vuln.line,
61
+ description: 'Add input validation before processing',
62
+ oldCode: vuln.code || '',
63
+ newCode: `const schema = z.object({ email: z.string().email() });\nconst validated = schema.parse(userInput);`,
64
+ priority: 'HIGH',
65
+ }),
66
+ PATH_TRAVERSAL: () => ({
67
+ type: 'PATH_TRAVERSAL',
68
+ file: vuln.file,
69
+ line: vuln.line,
70
+ description: 'Validate and normalize file paths',
71
+ oldCode: vuln.code || '',
72
+ newCode: `const basePath = path.resolve('./uploads');\nconst userPath = path.resolve('./uploads', userInput);\nif (!userPath.startsWith(basePath)) throw new Error('Invalid path');`,
73
+ priority: 'HIGH',
74
+ }),
75
+ UNSAFE_EVAL: () => ({
76
+ type: 'UNSAFE_EVAL',
77
+ file: vuln.file,
78
+ line: vuln.line,
79
+ description: 'Replace eval with safer alternatives',
80
+ oldCode: vuln.code || '',
81
+ newCode: `const data = JSON.parse(userInput);`,
82
+ priority: 'CRITICAL',
83
+ }),
84
+ CSRF: () => ({
85
+ type: 'CSRF',
86
+ file: vuln.file,
87
+ line: vuln.line,
88
+ description: 'Add CSRF token validation',
89
+ oldCode: vuln.code || '',
90
+ newCode: `if (!req.csrfToken() || req.body._csrf !== req.csrfToken()) {\n return res.status(403).send('CSRF validation failed');\n}`,
91
+ priority: 'HIGH',
92
+ }),
93
+ DEPENDENCY_VULN: () => null,
94
+ };
95
+ const generator = fixGenerators[vuln.type];
96
+ return generator ? generator() : null;
97
+ }
98
+ }
99
+ //# sourceMappingURL=remediation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remediation.js","sourceRoot":"","sources":["../../../lib/agents/remediation.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,gBAAgB;IACnB,IAAI,GAAW,8BAA8B,CAAC;IAC9C,MAAM,CAAS;IAEvB,YAAY,MAAc;QACxB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,eAAgC;QAClD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,iCAAiC,CAAC,CAAC;QAEhE,MAAM,KAAK,GAAc,EAAE,CAAC;QAE5B,KAAK,MAAM,IAAI,IAAI,eAAe,EAAE,CAAC;YACnC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YACjC,IAAI,GAAG,EAAE,CAAC;gBACR,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,KAAK,CAAC,MAAM,QAAQ,CAAC,CAAC;QACvD,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,SAAS,CAAC,IAAmB;QACnC,MAAM,aAAa,GAAoD;YACrE,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC;gBACpB,IAAI,EAAE,eAAe;gBACrB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,WAAW,EAAE,2DAA2D;gBACxE,OAAO,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE;gBACxB,OAAO,EAAE,iFAAiF;gBAC1F,QAAQ,EAAE,UAAU;aACrB,CAAC;YACF,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;gBACV,IAAI,EAAE,KAAK;gBACX,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,WAAW,EAAE,6DAA6D;gBAC1E,OAAO,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE;gBACxB,OAAO,EAAE,kCAAkC;gBAC3C,QAAQ,EAAE,UAAU;aACrB,CAAC;YACF,gBAAgB,EAAE,GAAG,EAAE,CAAC,CAAC;gBACvB,IAAI,EAAE,kBAAkB;gBACxB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,WAAW,EAAE,qCAAqC;gBAClD,OAAO,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE;gBACxB,OAAO,EAAE,wFAAwF;gBACjG,QAAQ,EAAE,UAAU;aACrB,CAAC;YACF,eAAe,EAAE,GAAG,EAAE,CAAC,CAAC;gBACtB,IAAI,EAAE,iBAAiB;gBACvB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,WAAW,EAAE,+CAA+C;gBAC5D,OAAO,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE;gBACxB,OAAO,EAAE,uFAAuF;gBAChG,QAAQ,EAAE,MAAM;aACjB,CAAC;YACF,kBAAkB,EAAE,GAAG,EAAE,CAAC,CAAC;gBACzB,IAAI,EAAE,oBAAoB;gBAC1B,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,WAAW,EAAE,wCAAwC;gBACrD,OAAO,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE;gBACxB,OAAO,EAAE,qGAAqG;gBAC9G,QAAQ,EAAE,MAAM;aACjB,CAAC;YACF,cAAc,EAAE,GAAG,EAAE,CAAC,CAAC;gBACrB,IAAI,EAAE,gBAAgB;gBACtB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,WAAW,EAAE,mCAAmC;gBAChD,OAAO,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE;gBACxB,OAAO,EAAE,2KAA2K;gBACpL,QAAQ,EAAE,MAAM;aACjB,CAAC;YACF,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC;gBAClB,IAAI,EAAE,aAAa;gBACnB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,WAAW,EAAE,sCAAsC;gBACnD,OAAO,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE;gBACxB,OAAO,EAAE,qCAAqC;gBAC9C,QAAQ,EAAE,UAAU;aACrB,CAAC;YACF,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;gBACX,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,WAAW,EAAE,2BAA2B;gBACxC,OAAO,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE;gBACxB,OAAO,EAAE,4HAA4H;gBACrI,QAAQ,EAAE,MAAM;aACjB,CAAC;YACF,eAAe,EAAE,GAAG,EAAE,CAAC,IAAI;SAC5B,CAAC;QAEF,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3C,OAAO,SAAS,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACxC,CAAC;CACF"}
@@ -0,0 +1,10 @@
1
+ import { Logger } from '../utils/logger.js';
2
+ import { Vulnerability, TriageResult } from '../types/index.js';
3
+ export declare class TriageAgent {
4
+ private name;
5
+ private logger;
6
+ constructor(logger: Logger);
7
+ analyze(vulnerabilities: Vulnerability[]): Promise<TriageResult>;
8
+ private isFalsePositive;
9
+ }
10
+ //# sourceMappingURL=triage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"triage.d.ts","sourceRoot":"","sources":["../../../lib/agents/triage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEhE,qBAAa,WAAW;IACtB,OAAO,CAAC,IAAI,CAAmC;IAC/C,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,EAAE,MAAM;IAIpB,OAAO,CAAC,eAAe,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC;IAqCtE,OAAO,CAAC,eAAe;CA+BxB"}
@@ -0,0 +1,62 @@
1
+ export class TriageAgent {
2
+ name = 'Agent 01 · S (TRIAGE)';
3
+ logger;
4
+ constructor(logger) {
5
+ this.logger = logger;
6
+ }
7
+ async analyze(vulnerabilities) {
8
+ this.logger.info(`${this.name} - Analyzing ${vulnerabilities.length} findings...`);
9
+ const dismissed = [];
10
+ const confirmed = [];
11
+ for (const vuln of vulnerabilities) {
12
+ const fpResult = this.isFalsePositive(vuln);
13
+ if (fpResult.isFalsePositive) {
14
+ const dismissedVuln = { ...vuln, dismissedReason: fpResult.reason };
15
+ dismissed.push(dismissedVuln);
16
+ this.logger.debug(`Dismissed false positive: ${vuln.type} in ${vuln.file} (${fpResult.reason})`);
17
+ }
18
+ else {
19
+ confirmed.push(vuln);
20
+ }
21
+ }
22
+ confirmed.sort((a, b) => {
23
+ const severityMap = {
24
+ CRITICAL: 3,
25
+ HIGH: 2,
26
+ MEDIUM: 1,
27
+ LOW: 0,
28
+ };
29
+ return (severityMap[b.severity] || 0) - (severityMap[a.severity] || 0);
30
+ });
31
+ this.logger.info(`${dismissed.length} false positives dismissed`);
32
+ this.logger.warn(`${confirmed.length} confirmed threats`);
33
+ return { dismissed, confirmed };
34
+ }
35
+ isFalsePositive(vuln) {
36
+ const patterns = [
37
+ {
38
+ pattern: /\b(test|spec|\.test\.|\.spec\.)/,
39
+ property: 'file',
40
+ reason: 'Test file',
41
+ },
42
+ {
43
+ pattern: /\b(mock|fixture|stub)\b/,
44
+ property: 'message',
45
+ reason: 'Mock data',
46
+ },
47
+ {
48
+ pattern: /\bas\s+(unknown|any|const)\b|@ts-ignore/,
49
+ property: 'message',
50
+ reason: 'Intentional type bypass',
51
+ },
52
+ ];
53
+ for (const check of patterns) {
54
+ const value = vuln[check.property];
55
+ if (typeof value === 'string' && check.pattern.test(value)) {
56
+ return { isFalsePositive: true, reason: check.reason };
57
+ }
58
+ }
59
+ return { isFalsePositive: false };
60
+ }
61
+ }
62
+ //# sourceMappingURL=triage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"triage.js","sourceRoot":"","sources":["../../../lib/agents/triage.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,WAAW;IACd,IAAI,GAAW,uBAAuB,CAAC;IACvC,MAAM,CAAS;IAEvB,YAAY,MAAc;QACxB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,eAAgC;QAC5C,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,GAAG,IAAI,CAAC,IAAI,gBAAgB,eAAe,CAAC,MAAM,cAAc,CACjE,CAAC;QAEF,MAAM,SAAS,GAAoB,EAAE,CAAC;QACtC,MAAM,SAAS,GAAoB,EAAE,CAAC;QAEtC,KAAK,MAAM,IAAI,IAAI,eAAe,EAAE,CAAC;YACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YAC5C,IAAI,QAAQ,CAAC,eAAe,EAAE,CAAC;gBAC7B,MAAM,aAAa,GAAG,EAAE,GAAG,IAAI,EAAE,eAAe,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;gBACpE,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBAC9B,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,6BAA6B,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,MAAM,GAAG,CAC9E,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;QAED,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACtB,MAAM,WAAW,GAA2B;gBAC1C,QAAQ,EAAE,CAAC;gBACX,IAAI,EAAE,CAAC;gBACP,MAAM,EAAE,CAAC;gBACT,GAAG,EAAE,CAAC;aACP,CAAC;YACF,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QACzE,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,MAAM,4BAA4B,CAAC,CAAC;QAClE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,MAAM,oBAAoB,CAAC,CAAC;QAE1D,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;IAClC,CAAC;IAEO,eAAe,CAAC,IAAmB;QAIzC,MAAM,QAAQ,GAAG;YACf;gBACE,OAAO,EAAE,iCAAiC;gBAC1C,QAAQ,EAAE,MAAe;gBACzB,MAAM,EAAE,WAAW;aACpB;YACD;gBACE,OAAO,EAAE,yBAAyB;gBAClC,QAAQ,EAAE,SAAkB;gBAC5B,MAAM,EAAE,WAAW;aACpB;YACD;gBACE,OAAO,EAAE,yCAAyC;gBAClD,QAAQ,EAAE,SAAkB;gBAC5B,MAAM,EAAE,yBAAyB;aAClC;SACF,CAAC;QAEF,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACnC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC3D,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;YACzD,CAAC;QACH,CAAC;QAED,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC;IACpC,CAAC;CACF"}
@@ -0,0 +1,14 @@
1
+ import { Logger } from '../utils/logger.js';
2
+ import { CodeFix } from '../types/index.js';
3
+ export declare class CodeFixer {
4
+ private projectPath;
5
+ private logger;
6
+ constructor(projectPath: string, logger: Logger);
7
+ private validateFilePath;
8
+ applyFix(fix: CodeFix): Promise<void>;
9
+ applyMultipleFixes(fixes: CodeFix[]): Promise<Map<string, string>>;
10
+ formatWithPrettier(filePath: string): Promise<void>;
11
+ lintAndFix(filePath: string): Promise<void>;
12
+ private getParser;
13
+ }
14
+ //# sourceMappingURL=codeFixer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codeFixer.d.ts","sourceRoot":"","sources":["../../../lib/fixers/codeFixer.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAI5C,qBAAa,SAAS;IACpB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAAS;gBAEX,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAK/C,OAAO,CAAC,gBAAgB;IAYlB,QAAQ,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IA6BrC,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IA0ClE,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBnD,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAyBjD,OAAO,CAAC,SAAS;CAYlB"}
@@ -0,0 +1,134 @@
1
+ import { promises as fs } from 'fs';
2
+ import path from 'path';
3
+ import { execFile } from 'child_process';
4
+ import { promisify } from 'util';
5
+ const execFileAsync = promisify(execFile);
6
+ export class CodeFixer {
7
+ projectPath;
8
+ logger;
9
+ constructor(projectPath, logger) {
10
+ this.projectPath = projectPath;
11
+ this.logger = logger;
12
+ }
13
+ validateFilePath(filePath) {
14
+ const absolutePath = path.resolve(filePath);
15
+ const absoluteProjectPath = path.resolve(this.projectPath);
16
+ if (!absolutePath.startsWith(absoluteProjectPath + path.sep) &&
17
+ absolutePath !== absoluteProjectPath) {
18
+ throw new Error(`Path traversal attack detected: ${filePath}`);
19
+ }
20
+ }
21
+ async applyFix(fix) {
22
+ try {
23
+ const filePath = path.join(this.projectPath, fix.file);
24
+ this.validateFilePath(filePath);
25
+ let content = await fs.readFile(filePath, 'utf-8');
26
+ const lines = content.split('\n');
27
+ if (fix.line > 0 && fix.line <= lines.length) {
28
+ const lineIndex = fix.line - 1;
29
+ const newCodeLines = fix.newCode.split('\n');
30
+ lines.splice(lineIndex, 1, ...newCodeLines);
31
+ content = lines.join('\n');
32
+ await fs.writeFile(filePath, content, 'utf-8');
33
+ this.logger.success(`Applied fix: ${fix.type} in ${fix.file}:${fix.line} (${newCodeLines.length} line(s))`);
34
+ }
35
+ else {
36
+ this.logger.warn(`Could not apply fix: line ${fix.line} is out of bounds for ${fix.file}`);
37
+ }
38
+ }
39
+ catch (error) {
40
+ throw new Error(`Failed to apply fix: ${error instanceof Error ? error.message : 'Unknown'}`);
41
+ }
42
+ }
43
+ async applyMultipleFixes(fixes) {
44
+ const fileChanges = new Map();
45
+ const fixesByFile = new Map();
46
+ for (const fix of fixes) {
47
+ if (!fixesByFile.has(fix.file)) {
48
+ fixesByFile.set(fix.file, []);
49
+ }
50
+ fixesByFile.get(fix.file).push(fix);
51
+ }
52
+ for (const [file, fileFixes] of fixesByFile) {
53
+ try {
54
+ const filePath = path.join(this.projectPath, file);
55
+ this.validateFilePath(filePath);
56
+ const content = await fs.readFile(filePath, 'utf-8');
57
+ fileFixes.sort((a, b) => b.line - a.line);
58
+ const lines = content.split('\n');
59
+ for (const fix of fileFixes) {
60
+ if (fix.line > 0 && fix.line <= lines.length) {
61
+ const lineIndex = fix.line - 1;
62
+ const newCodeLines = fix.newCode.split('\n');
63
+ lines.splice(lineIndex, 1, ...newCodeLines);
64
+ }
65
+ }
66
+ const newContent = lines.join('\n');
67
+ await fs.writeFile(filePath, newContent, 'utf-8');
68
+ fileChanges.set(file, newContent);
69
+ this.logger.success(`Applied ${fileFixes.length} fixes in ${file}`);
70
+ }
71
+ catch (error) {
72
+ this.logger.error(`Failed to apply fixes in ${file}: ${error instanceof Error ? error.message : 'Unknown'}`);
73
+ }
74
+ }
75
+ return fileChanges;
76
+ }
77
+ async formatWithPrettier(filePath) {
78
+ try {
79
+ const fullPath = path.join(this.projectPath, filePath);
80
+ this.validateFilePath(fullPath);
81
+ const content = await fs.readFile(fullPath, 'utf-8');
82
+ const prettier = await import('prettier');
83
+ const formatted = await prettier.format(content, {
84
+ parser: this.getParser(filePath),
85
+ singleQuote: true,
86
+ trailingComma: 'es5',
87
+ semi: true,
88
+ tabWidth: 2,
89
+ });
90
+ await fs.writeFile(fullPath, formatted, 'utf-8');
91
+ this.logger.success(`Formatted with Prettier: ${filePath}`);
92
+ }
93
+ catch (error) {
94
+ this.logger.warn(`Failed to format ${filePath}: ${error instanceof Error ? error.message : 'Unknown'}`);
95
+ }
96
+ }
97
+ async lintAndFix(filePath) {
98
+ try {
99
+ const fullPath = path.join(this.projectPath, filePath);
100
+ this.validateFilePath(fullPath);
101
+ await this.formatWithPrettier(filePath);
102
+ const eslintPath = path.join(this.projectPath, 'node_modules', '.bin', 'eslint');
103
+ try {
104
+ await execFileAsync(eslintPath, ['--fix', fullPath]);
105
+ this.logger.success(`Linted and fixed: ${filePath}`);
106
+ }
107
+ catch (error) {
108
+ const err = error;
109
+ if (err.code !== 'ENOENT') {
110
+ this.logger.debug(`ESLint error: ${error instanceof Error ? error.message : 'Unknown'}`);
111
+ }
112
+ else {
113
+ this.logger.debug(`ESLint not available, skipping lint-fix for ${filePath}`);
114
+ }
115
+ }
116
+ }
117
+ catch (error) {
118
+ this.logger.warn(`Failed to lint/fix ${filePath}: ${error instanceof Error ? error.message : 'Unknown'}`);
119
+ }
120
+ }
121
+ getParser(filePath) {
122
+ if (filePath.endsWith('.ts') || filePath.endsWith('.tsx')) {
123
+ return 'typescript';
124
+ }
125
+ if (filePath.endsWith('.json')) {
126
+ return 'json';
127
+ }
128
+ if (filePath.endsWith('.yaml') || filePath.endsWith('.yml')) {
129
+ return 'yaml';
130
+ }
131
+ return 'babel';
132
+ }
133
+ }
134
+ //# sourceMappingURL=codeFixer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codeFixer.js","sourceRoot":"","sources":["../../../lib/fixers/codeFixer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export { SorkOrchestrator } from './orchestrator.js';
2
+ export { TriageAgent } from './agents/triage.js';
3
+ export { RemediationAgent } from './agents/remediation.js';
4
+ export { KeeperAgent } from './agents/keeper.js';
5
+ export { SecurityScanner } from './security/scanner.js';
6
+ export { CodeFixer } from './fixers/codeFixer.js';
7
+ export { Logger } from './utils/logger.js';
8
+ export type { Vulnerability, VulnerabilityType, CodeFix, TriageResult, VerificationResult, AuditLogEntry, SorkSession, SorkConfig, SorkOptions, } from './types/index.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,YAAY,EACV,aAAa,EACb,iBAAiB,EACjB,OAAO,EACP,YAAY,EACZ,kBAAkB,EAClB,aAAa,EACb,WAAW,EACX,UAAU,EACV,WAAW,GACZ,MAAM,kBAAkB,CAAC"}