sork-queb 1.0.0 → 1.1.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.
package/README.md CHANGED
@@ -1,8 +1,8 @@
1
1
  ## What is SORK?
2
2
 
3
- SORK automates your entire vulnerability lifecycle on GitLab Duo Agent Platform. Three AI agents work in sequence — **Triage** analyzes and dismisses false positives, **Remediation** generates code fixes and opens merge requests, **Keeper** verifies the fix passed security scans. Hours of manual work, done in minutes.
3
+ SORK automates your entire vulnerability lifecycle. Three AI agents work in sequence — **Triage** analyzes and dismisses false positives, **Remediation** generates code fixes, **Keeper** verifies fixes passed security scans. Hours of manual work, done in minutes.
4
4
 
5
- > *"SORK turns every GitLab security scan from a to-do list into a done list."*
5
+ > *"SORK turns every security scan from a to-do list into a done list."*
6
6
 
7
7
  ---> Made by Bhargav Kalambhe
8
8
 
@@ -380,89 +380,156 @@ The verifier. Watches the fix pipeline and confirms vulnerabilities are resolved
380
380
 
381
381
  ### Prerequisites
382
382
 
383
- - GitLab Premium or Ultimate account
384
- - GitLab Duo Agent Platform enabled ([setup guide](https://docs.gitlab.com/user/duo_agent_platform/))
385
- - Security scanning templates in your CI/CD pipeline
386
- - VS Code with [GitLab extension](https://marketplace.visualstudio.com/items?itemName=GitLab.gitlab-workflow) (v6.15.1+) or JetBrains IDE with GitLab plugin
383
+ - Node.js 18+ installed
384
+ - npm installed globally
385
+ - A Node.js project with security scanning enabled (ESLint, etc.)
387
386
 
388
- ### Step 1 — Enable Security Scanning
387
+ ### Installation & Setup
389
388
 
390
- Add this to your `.gitlab-ci.yml`:
389
+ ```bash
390
+ # Install globally
391
+ npm install -g sork-queb
391
392
 
392
- ```yaml
393
- include:
394
- - template: Security/SAST.gitlab-ci.yml
395
- - template: Security/Dependency-Scanning.gitlab-ci.yml
396
- - template: Security/Secret-Detection.gitlab-ci.yml
393
+ # Initialize in your project
394
+ cd your-project
395
+ sork init
397
396
 
398
- stages:
399
- - build
400
- - test
401
- - security
402
- ```
403
-
404
- ### Step 2 — Enable SORK Agents
397
+ # Run security scan
398
+ sork scan
405
399
 
406
- 1. Go to **Explore → AI Catalog → Agents**
407
- 2. Search for `SORK Triage` → click **Enable in group** → select your group
408
- 3. Repeat for `SORK Remediation` and `SORK Keeper`
409
- 4. In your project: **Automate → Agents** → enable all three
400
+ # Auto-fix vulnerabilities
401
+ sork fix
410
402
 
411
- ### Step 3 Add Project Configuration
403
+ # Setup pre-commit hooks (optional)
404
+ sork setup-hooks
405
+ ```
412
406
 
413
- Create `AGENTS.md` in your project root:
407
+ ### Usage
414
408
 
415
- ```markdown
416
- # SORK — Security Orchestration, Remediation & Keeping
409
+ **Run Security Scan:**
410
+ ```bash
411
+ sork scan
412
+ ```
417
413
 
418
- ## Security Conventions
419
- - All security fixes must include inline comments referencing CWE IDs
420
- - Never suppress security warnings without documentation
421
- - Prefer patched dependency versions over workarounds
422
- - Fixes should be minimal — don't refactor unrelated code
423
- - Hardcoded secrets must be replaced with environment variables
424
- - Input validation must use allowlists, not blocklists
414
+ **Auto-Fix Issues:**
415
+ ```bash
416
+ sork fix
425
417
  ```
426
418
 
427
- Create `.gitlab/duo/mr-review-instructions.yaml`:
419
+ **Pre-Commit Checks:**
420
+ ```bash
421
+ sork pre-commit
422
+ ```
428
423
 
429
- ```yaml
430
- instructions:
431
- - name: SORK Security Standards
432
- fileFilters:
433
- - "**/*.py"
434
- - "**/*.js"
435
- - "**/*.ts"
436
- - "**/*.rb"
437
- - "**/*.go"
438
- - "**/*.java"
439
- instructions: |
440
- 1. Security fixes must include inline comments referencing CWE IDs
441
- 2. Never suppress security warnings without documentation
442
- 3. Prefer patched dependency versions over workarounds
443
- 4. All fixes should be minimal — don't refactor unrelated code
444
- 5. Hardcoded secrets must be replaced with environment variables
445
- 6. Input validation must use allowlists, not blocklists
424
+ **View Status:**
425
+ ```bash
426
+ sork status
446
427
  ```
447
428
 
448
- ### Step 4 — Done
429
+ ---
449
430
 
450
- SORK activates automatically on your next pipeline security scan.
431
+ ## 🎯 Automatic Code Quality Setup
451
432
 
452
- ### Usage
433
+ When you run `sork init`, SORK automatically configures a **complete development environment** with no additional setup required.
453
434
 
454
- **Automatic** Push code → pipeline runs → security scan completes → SORK activates
435
+ ### What Gets Installed
455
436
 
456
- **Manual via @mention** In any issue or MR:
457
- ```
458
- @sork-triage analyze all vulnerabilities in this project
437
+ | Tool | Purpose | Auto-Setup |
438
+ | --- | --- | --- |
439
+ | **Prettier** | Code formatting | ✅ Creates `.prettierrc.json` |
440
+ | **ESLint** | Code linting & best practices | ✅ Creates `.eslintrc.json` |
441
+ | **Zod** | Runtime type validation | ✅ Creates `src/validators/index.ts` |
442
+ | **npm Scripts** | Quality automation | ✅ Adds `npm run qa:fix` and more |
443
+ | **Documentation** | Best practices guide | ✅ Creates `CODE_QUALITY.md` |
444
+
445
+ ### Available Commands
446
+
447
+ After `sork init`, you have:
448
+
449
+ ```bash
450
+ npm run lint # Check code quality
451
+ npm run lint:fix # Auto-fix linting issues
452
+ npm run format # Format code with Prettier
453
+ npm run format:check # Verify formatting
454
+ npm run qa # Run full quality checks (lint + format)
455
+ npm run qa:fix # Fix all issues automatically ⭐
456
+ npm run type-check # Validate TypeScript types
459
457
  ```
460
458
 
461
- **Manual via Chat** — Open GitLab Duo Chat (Agentic mode):
459
+ ### Example Setup Flow
460
+
461
+ ```bash
462
+ # 1. Install SORK globally
463
+ npm install -g sork-queb
464
+
465
+ # 2. Create or navigate to a project
466
+ cd my-nodejs-project
467
+
468
+ # 3. One command sets up everything
469
+ sork init
470
+ # Output:
471
+ # ✅ Prettier configured (.prettierrc.json)
472
+ # ✅ ESLint configured (.eslintrc.json)
473
+ # ✅ Zod validators created (src/validators/index.ts)
474
+ # ✅ Package.json scripts updated
475
+ # ✅ Code quality guide created (CODE_QUALITY.md)
476
+
477
+ # 4. Auto-fix all code issues (optional but recommended)
478
+ npm run qa:fix
479
+
480
+ # 5. Enable security pre-commit checks
481
+ sork setup-hooks
482
+
483
+ # ✨ Done! Fully configured, production-ready development environment
462
484
  ```
463
- @SORK Triage — run a full vulnerability analysis on this project
485
+
486
+ ### Runtime Validation with Zod
487
+
488
+ The auto-generated validators provide type-safe error handling:
489
+
490
+ ```typescript
491
+ // src/validators/index.ts (auto-created)
492
+ import { validateEnv } from './validators';
493
+
494
+ // Validate environment variables at startup
495
+ const env = validateEnv();
496
+
497
+ if (env.NODE_ENV === 'production') {
498
+ console.log('Running in production mode');
499
+ }
500
+
501
+ // Type errors caught at runtime with clear messages:
502
+ // ❌ Environment validation failed:
503
+ // - API_KEY: Required
504
+ // - LOG_LEVEL: Expected 'debug' | 'info' | 'warn' | 'error'
464
505
  ```
465
506
 
507
+ ### Quality Checks Included
508
+
509
+ **Prettier Rules:**
510
+
511
+ - 2-space indentation
512
+ - Single quotes
513
+ - 100-character line width
514
+ - Trailing commas in multiline structures
515
+ - Consistent formatting across the project
516
+
517
+ **ESLint Rules:**
518
+
519
+ - No unused variables
520
+ - No console.log in production
521
+ - Strict equality (===)
522
+ - Proper error handling
523
+ - TypeScript best practices
524
+ - Security-focused rules
525
+
526
+ **Pre-Commit Hooks:**
527
+
528
+ - Runs before every git commit
529
+ - Blocks commits with CRITICAL vulnerabilities
530
+ - Scans only staged changes (fast!)
531
+ - Auto-suggests fixes via `npm run qa:fix`
532
+
466
533
  ---
467
534
 
468
535
  ## Tech Stack
@@ -471,19 +538,19 @@ SORK activates automatically on your next pipeline security scan.
471
538
 
472
539
  ```
473
540
  ┌──────────────────────────────────────────────────────────────────┐
474
- GITLAB INSTANCE
541
+ NODE.JS PROJECT
475
542
  │ │
476
543
  │ ┌────────────────┐ ┌──────────────────────────────────┐ │
477
- │ │ │ │ GitLab Duo Agent Platform │ │
478
- │ │ CI/CD │ │ │ │
479
- │ │ Pipeline │ │ ┌──────────┐ ┌────────────┐ │ │
480
- │ │ │ │ │ Anthropic │ │ AI Catalog │ │ │
481
- │ │ ┌─────────┐ │ │ │ Claude │ │ │ │ │
482
- │ │ │ SAST │ │ │ └─────┬────┘ └─────┬──────┘ │ │
483
- │ │ │ DepScan │──│──────▶│ │ │ │ │
484
- │ │ │ SecDet │ │ │ ▼ ▼ │ │
544
+ │ │ │ │ SORK System │ │
545
+ │ │ Security │ │ │ │
546
+ │ │ Scanning │ │ ┌──────────┐ ┌────────────┐ │ │
547
+ │ │ (ESLint, │ │ │ Anthropic │ │ SORK Core │ │ │
548
+ │ │ etc.) │ │ │ Claude │ │ Agents │ │ │
549
+ │ │ ┌─────────┐ │ │ └─────┬────┘ └─────┬──────┘ │ │
550
+ │ │ │ Scanner │──│──────▶│ │ │ │ │
551
+ │ │ │ Tools │ │ │ ▼ ▼ │ │
485
552
  │ │ └─────────┘ │ │ ┌──────────────────────────┐ │ │
486
- │ │ │ │ │ SORK FLOW │ │ │
553
+ │ │ │ │ │ SORK AGENT FLOW │ │ │
487
554
  │ └────────────────┘ │ │ │ │ │
488
555
  │ │ │ ┌────────┐ │ │ │
489
556
  │ │ │ │Triage │ │ │ │
@@ -509,9 +576,10 @@ SORK activates automatically on your next pipeline security scan.
509
576
  │ ▼ │
510
577
  │ ┌────────────────┐ ┌──────────────────────────────────┐ │
511
578
  │ │ │ │ │ │
512
- │ │ Issues │ │ Merge Requests │ │
513
- │ │ (Triage │ │ (Fix Patches + │ │
514
- │ │ Reports) │ │ Verification Reports) │ │
579
+ │ │ Logs & │ │ Fixed Code │ │
580
+ │ │ Reports │ │ (Auto-patched files) │ │
581
+ │ │ (Triage │ │ │ │
582
+ │ │ Reports) │ │ + Verification Reports │ │
515
583
  │ │ │ │ │ │
516
584
  │ └────────────────┘ └──────────────────────────────────┘ │
517
585
  │ │
@@ -522,18 +590,18 @@ SORK activates automatically on your next pipeline security scan.
522
590
 
523
591
  | Layer | Technology | Role |
524
592
  |-------|-----------|------|
525
- | **Platform** | GitLab Duo Agent Platform | Hosts and runs all agents and flows |
526
- | **AI Model** | Anthropic Claude | Powers all 3 agents (default in GitLab Duo) |
527
- | **Agent Registry** | GitLab AI Catalog | Create, publish, and manage SORK agents |
528
- | **Orchestration** | GitLab Flows | Chains agents: Triage → Remediation → Keeper |
529
- | **CI/CD** | GitLab CI/CD + Runner | Runs security scans, triggers SORK, verifies fixes |
530
- | **Security Scanning** | GitLab SAST | Finds code vulnerabilities (SQLi, XSS, etc.) |
531
- | **Security Scanning** | GitLab Dependency Scanning | Finds CVEs in dependencies |
532
- | **Security Scanning** | GitLab Secret Detection | Finds hardcoded secrets and keys |
533
- | **Configuration** | YAML | Agent configs, flow configs, CI pipeline, review rules |
534
- | **Documentation** | Markdown | AGENTS.md, README, system prompts |
535
- | **Test Project** | Python + Flask | Sample vulnerable app for demonstration |
536
- | **Containers** | Docker | Flow execution environment |
593
+ | **Runtime** | Node.js 18+ | Executes SORK agents and scanning |
594
+ | **Language** | TypeScript | Full type safety for all agents |
595
+ | **AI Model** | Anthropic Claude | Powers all 3 agents with security insights |
596
+ | **Package Manager** | npm | Distributes SORK globally |
597
+ | **Orchestration** | TypeScript Classes | Chains agents: Triage Remediation Keeper |
598
+ | **CLI Tool** | minimist | Command-line argument parsing |
599
+ | **Scanning** | Custom Scanner | JavaScript/TypeScript vulnerability detection |
600
+ | **Security Patterns** | RegEx + AST | Pattern matching for SQLi, XSS, secrets, etc. |
601
+ | **Code Fixing** | File API + Prettier | Applies fixes, formats, and lints code |
602
+ | **Version Control** | Git Hooks | Pre-commit integration for automation |
603
+ | **Configuration** | JSON | .sorkrc.json configuration file |
604
+ | **Logging** | chalk + Console | Colored output with severity levels |
537
605
 
538
606
  ### Tools Usage Map
539
607
 
@@ -699,25 +767,9 @@ Junior dev pushes code with a security flaw. SORK catches it immediately, genera
699
767
 
700
768
  ---
701
769
 
702
- ## Hackathon
703
-
704
- **Competition:** [GitLab Duo Agent Platform Challenge](https://gitlab.devpost.com)
705
-
706
- **Category:** Most Impactful on GitLab & Anthropic
707
-
708
- **Team:**
709
-
710
- | Member | Role | Responsibility |
711
- |--------|------|---------------|
712
- | [Your Name] | Architect | Agent design, flow orchestration, system prompts |
713
- | [Teammate A] | Lab Builder | Test infrastructure, vulnerability scenarios, demo video |
714
- | [Teammate B] | Documenter | README, Devpost submission, compliance, documentation |
715
-
716
- ---
717
-
718
770
  ## Built With
719
771
 
720
- `GitLab Duo Agent Platform` · `Anthropic Claude` · `GitLab AI Catalog` · `GitLab Flows` · `GitLab CI/CD` · `GitLab SAST` · `GitLab Dependency Scanning` · `GitLab Secret Detection` · `Python` · `Flask` · `Docker` · `YAML`
772
+ `Node.js` · `TypeScript` · `Anthropic Claude` · `npm` · `ESLint` · `Prettier` · `minimist` · `chalk` · `GitHub` · `JavaScript`
721
773
 
722
774
  ---
723
775
 
@@ -754,4 +806,7 @@ SOFTWARE.
754
806
  <p align="center">
755
807
  <strong>S O R K</strong><br>
756
808
  Security Orchestration, Remediation & Keeping<br><br>
757
- <em>Keeping your code secure — automatically.
809
+ <em>Keeping your Node.js code secure — automatically.</em><br><br>
810
+ Install: <code>npm install -g sork-queb</code><br>
811
+ GitHub: <a href="https://github.com/Atofinite5/SORK-Security-Orchestration-Remediation-Keeping-">Atofinite5/SORK</a><br>
812
+ npm: <a href="https://www.npmjs.com/package/sork-queb">sork-queb</a>
@@ -5,5 +5,6 @@ export { KeeperAgent } from './agents/keeper.js';
5
5
  export { SecurityScanner } from './security/scanner.js';
6
6
  export { CodeFixer } from './fixers/codeFixer.js';
7
7
  export { Logger } from './utils/logger.js';
8
+ export { ProjectScaffolder } from './utils/scaffolder.js';
8
9
  export type { Vulnerability, VulnerabilityType, CodeFix, TriageResult, VerificationResult, AuditLogEntry, SorkSession, SorkConfig, SorkOptions, } from './types/index.js';
9
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +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"}
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;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D,YAAY,EACV,aAAa,EACb,iBAAiB,EACjB,OAAO,EACP,YAAY,EACZ,kBAAkB,EAClB,aAAa,EACb,WAAW,EACX,UAAU,EACV,WAAW,GACZ,MAAM,kBAAkB,CAAC"}
package/dist/lib/index.js CHANGED
@@ -5,4 +5,5 @@ export { KeeperAgent } from './agents/keeper.js';
5
5
  export { SecurityScanner } from './security/scanner.js';
6
6
  export { CodeFixer } from './fixers/codeFixer.js';
7
7
  export { Logger } from './utils/logger.js';
8
+ export { ProjectScaffolder } from './utils/scaffolder.js';
8
9
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","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"}
1
+ {"version":3,"file":"index.js","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;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../lib/orchestrator.ts"],"names":[],"mappings":"AAQA,OAAO,EAGL,WAAW,EACZ,MAAM,kBAAkB,CAAC;AAE1B,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,WAAW,CAAmB;IACtC,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,KAAK,CAAY;IACzB,OAAO,CAAC,OAAO,CAAc;gBAEjB,OAAO,GAAE,WAAgB;IAoB/B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA+B3B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAmCrB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IA4CpB,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IA2B7B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAyB3B,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;CA8B9B"}
1
+ {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../lib/orchestrator.ts"],"names":[],"mappings":"AASA,OAAO,EAGL,WAAW,EACZ,MAAM,kBAAkB,CAAC;AAE1B,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,WAAW,CAAmB;IACtC,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,KAAK,CAAY;IACzB,OAAO,CAAC,OAAO,CAAc;gBAEjB,OAAO,GAAE,WAAgB;IAoB/B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA4C3B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAmCrB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IA4CpB,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IA2B7B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAyB3B,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;CA8B9B"}
@@ -1,6 +1,7 @@
1
1
  import { promises as fs } from 'fs';
2
2
  import path from 'path';
3
3
  import { Logger } from './utils/logger.js';
4
+ import { ProjectScaffolder } from './utils/scaffolder.js';
4
5
  import { TriageAgent } from './agents/triage.js';
5
6
  import { RemediationAgent } from './agents/remediation.js';
6
7
  import { KeeperAgent } from './agents/keeper.js';
@@ -33,6 +34,7 @@ export class SorkOrchestrator {
33
34
  }
34
35
  async initialize() {
35
36
  this.logger.section('SORK Initialization');
37
+ // Setup SORK configuration
36
38
  const sorkConfig = {
37
39
  version: '1.0.0',
38
40
  initialized: new Date().toISOString(),
@@ -53,9 +55,20 @@ export class SorkOrchestrator {
53
55
  const hooksDir = path.join(this.projectPath, '.sork', 'hooks');
54
56
  await fs.mkdir(hooksDir, { recursive: true });
55
57
  this.logger.success(`Hooks directory created`);
58
+ // Setup development environment with Prettier, ESLint, Zod
59
+ this.logger.info('');
60
+ const scaffolder = new ProjectScaffolder(this.projectPath, this.logger);
61
+ await scaffolder.scaffoldAll();
62
+ this.logger.info('');
56
63
  this.logger.info('✓ Connected to Anthropic model');
57
64
  this.logger.info('✓ 3 agents registered: READY');
58
- this.logger.info('\nNext: Run `sork setup-hooks` to enable pre-commit guards');
65
+ this.logger.info(' Prettier configured for code formatting');
66
+ this.logger.info('✓ ESLint configured for code quality');
67
+ this.logger.info('✓ Zod configured for runtime validation');
68
+ this.logger.info('\nNext steps:');
69
+ this.logger.info(' 1. npm run qa:fix (Fix all code quality issues)');
70
+ this.logger.info(' 2. sork setup-hooks (Enable security pre-commit checks)');
71
+ this.logger.info(' 3. Read CODE_QUALITY.md (Learn best practices)');
59
72
  }
60
73
  async scan() {
61
74
  this.logger.section('SORK Security Scan');
@@ -1 +1 @@
1
- {"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../lib/orchestrator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../lib/orchestrator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { Logger } from './logger.js';
2
+ export declare class ProjectScaffolder {
3
+ private projectPath;
4
+ private logger;
5
+ constructor(projectPath: string, logger: Logger);
6
+ setupPrettier(): Promise<void>;
7
+ setupESLint(): Promise<void>;
8
+ setupZodValidation(): Promise<void>;
9
+ setupScripts(): Promise<void>;
10
+ createQualityGuide(): Promise<void>;
11
+ scaffoldAll(): Promise<void>;
12
+ }
13
+ //# sourceMappingURL=scaffolder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffolder.d.ts","sourceRoot":"","sources":["../../../lib/utils/scaffolder.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,qBAAa,iBAAiB;IAChB,OAAO,CAAC,WAAW;IAAU,OAAO,CAAC,MAAM;gBAAnC,WAAW,EAAE,MAAM,EAAU,MAAM,EAAE,MAAM;IAEzD,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAkC9B,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAoE5B,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;IA0EnC,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAsD7B,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;IAoFnC,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;CA0BnC"}
@@ -0,0 +1,321 @@
1
+ import { promises as fs } from 'fs';
2
+ import path from 'path';
3
+ export class ProjectScaffolder {
4
+ projectPath;
5
+ logger;
6
+ constructor(projectPath, logger) {
7
+ this.projectPath = projectPath;
8
+ this.logger = logger;
9
+ }
10
+ async setupPrettier() {
11
+ this.logger.info('Setting up Prettier...');
12
+ const prettierConfig = {
13
+ semi: true,
14
+ trailingComma: 'es5',
15
+ singleQuote: true,
16
+ printWidth: 100,
17
+ tabWidth: 2,
18
+ useTabs: false,
19
+ bracketSpacing: true,
20
+ arrowParens: 'always',
21
+ endOfLine: 'lf',
22
+ };
23
+ const configPath = path.join(this.projectPath, '.prettierrc.json');
24
+ await fs.writeFile(configPath, JSON.stringify(prettierConfig, null, 2));
25
+ this.logger.success('✓ Prettier configured (.prettierrc.json)');
26
+ // Create .prettierignore
27
+ const prettierIgnore = `node_modules/
28
+ dist/
29
+ build/
30
+ coverage/
31
+ .next/
32
+ out/
33
+ .env*
34
+ *.log
35
+ `;
36
+ const ignorePath = path.join(this.projectPath, '.prettierignore');
37
+ await fs.writeFile(ignorePath, prettierIgnore);
38
+ this.logger.success('✓ Prettier ignore file created');
39
+ }
40
+ async setupESLint() {
41
+ this.logger.info('Setting up ESLint...');
42
+ const eslintConfig = {
43
+ env: {
44
+ node: true,
45
+ es2022: true,
46
+ },
47
+ extends: ['eslint:recommended'],
48
+ parserOptions: {
49
+ ecmaVersion: 'latest',
50
+ sourceType: 'module',
51
+ },
52
+ rules: {
53
+ 'no-console': ['warn', { allow: ['warn', 'error'] }],
54
+ 'no-unused-vars': 'error',
55
+ 'prefer-const': 'error',
56
+ 'no-var': 'error',
57
+ 'eqeqeq': ['error', 'always'],
58
+ 'curly': 'error',
59
+ 'semi': ['error', 'always'],
60
+ 'quotes': ['error', 'single'],
61
+ 'indent': ['error', 2],
62
+ 'comma-dangle': ['error', 'always-multiline'],
63
+ 'space-before-function-paren': ['error', 'never'],
64
+ 'keyword-spacing': 'error',
65
+ 'space-infix-ops': 'error',
66
+ 'object-curly-spacing': ['error', 'always'],
67
+ },
68
+ overrides: [
69
+ {
70
+ files: ['*.ts', '*.tsx'],
71
+ parser: '@typescript-eslint/parser',
72
+ extends: [
73
+ 'eslint:recommended',
74
+ 'plugin:@typescript-eslint/recommended',
75
+ ],
76
+ plugins: ['@typescript-eslint'],
77
+ rules: {
78
+ '@typescript-eslint/explicit-function-return-types': 'off',
79
+ '@typescript-eslint/no-unused-vars': [
80
+ 'error',
81
+ { argsIgnorePattern: '^_' },
82
+ ],
83
+ '@typescript-eslint/no-explicit-any': 'warn',
84
+ '@typescript-eslint/explicit-module-boundary-types': 'off',
85
+ },
86
+ },
87
+ ],
88
+ };
89
+ const configPath = path.join(this.projectPath, '.eslintrc.json');
90
+ await fs.writeFile(configPath, JSON.stringify(eslintConfig, null, 2));
91
+ this.logger.success('✓ ESLint configured (.eslintrc.json)');
92
+ // Create .eslintignore
93
+ const eslintIgnore = `node_modules/
94
+ dist/
95
+ build/
96
+ coverage/
97
+ .next/
98
+ *.config.js
99
+ `;
100
+ const ignorePath = path.join(this.projectPath, '.eslintignore');
101
+ await fs.writeFile(ignorePath, eslintIgnore);
102
+ this.logger.success('✓ ESLint ignore file created');
103
+ }
104
+ async setupZodValidation() {
105
+ this.logger.info('Setting up Zod validation schemas...');
106
+ const zodValidatorCode = `import { z } from 'zod';
107
+
108
+ /**
109
+ * Environment Variable Validation Schema
110
+ * Validates all environment variables at startup
111
+ */
112
+ export const envSchema = z.object({
113
+ NODE_ENV: z.enum(['development', 'production', 'test']).default('development'),
114
+ LOG_LEVEL: z.enum(['debug', 'info', 'warn', 'error']).default('info'),
115
+ // Add your env vars here
116
+ });
117
+
118
+ export type Env = z.infer<typeof envSchema>;
119
+
120
+ /**
121
+ * Validate environment variables
122
+ * Throws ZodError if validation fails
123
+ */
124
+ export function validateEnv(): Env {
125
+ try {
126
+ return envSchema.parse(process.env);
127
+ } catch (error) {
128
+ if (error instanceof z.ZodError) {
129
+ console.error('❌ Environment validation failed:');
130
+ error.errors.forEach((err) => {
131
+ console.error(\` - \${err.path.join('.')}: \${err.message}\`);
132
+ });
133
+ }
134
+ throw error;
135
+ }
136
+ }
137
+
138
+ /**
139
+ * Generic API Response Validator
140
+ * Use this for validating API responses
141
+ */
142
+ export const apiResponseSchema = z.object({
143
+ success: z.boolean(),
144
+ message: z.string(),
145
+ data: z.any().optional(),
146
+ error: z.string().optional(),
147
+ });
148
+
149
+ export type ApiResponse = z.infer<typeof apiResponseSchema>;
150
+
151
+ /**
152
+ * Validate API responses with proper error messages
153
+ */
154
+ export function validateApiResponse(data: unknown): ApiResponse {
155
+ try {
156
+ return apiResponseSchema.parse(data);
157
+ } catch (error) {
158
+ if (error instanceof z.ZodError) {
159
+ const messages = error.errors
160
+ .map((err) => \`\${err.path.join('.')}: \${err.message}\`)
161
+ .join(', ');
162
+ throw new Error(\`Invalid API response: \${messages}\`);
163
+ }
164
+ throw error;
165
+ }
166
+ }
167
+ `;
168
+ const validatorsDir = path.join(this.projectPath, 'src', 'validators');
169
+ await fs.mkdir(validatorsDir, { recursive: true });
170
+ const validatorPath = path.join(validatorsDir, 'index.ts');
171
+ await fs.writeFile(validatorPath, zodValidatorCode);
172
+ this.logger.success('✓ Zod validators created (src/validators/index.ts)');
173
+ }
174
+ async setupScripts() {
175
+ this.logger.info('Updating package.json scripts...');
176
+ try {
177
+ const packageJsonPath = path.join(this.projectPath, 'package.json');
178
+ const packageContent = await fs.readFile(packageJsonPath, 'utf-8');
179
+ const packageJson = JSON.parse(packageContent);
180
+ if (!packageJson.scripts) {
181
+ packageJson.scripts = {};
182
+ }
183
+ // Add quality assurance scripts
184
+ packageJson.scripts.lint = 'eslint . --ext .ts,.tsx,.js,.jsx';
185
+ packageJson.scripts['lint:fix'] = 'eslint . --ext .ts,.tsx,.js,.jsx --fix';
186
+ packageJson.scripts.format = 'prettier --write .';
187
+ packageJson.scripts['format:check'] = 'prettier --check .';
188
+ packageJson.scripts['qa'] = 'npm run format:check && npm run lint && npm run type-check';
189
+ packageJson.scripts['qa:fix'] = 'npm run format && npm run lint:fix';
190
+ // Add Zod if not present
191
+ if (!packageJson.dependencies?.zod && !packageJson.devDependencies?.zod) {
192
+ if (!packageJson.dependencies) {
193
+ packageJson.dependencies = {};
194
+ }
195
+ packageJson.dependencies.zod = '^3.22.0';
196
+ }
197
+ // Ensure Prettier and ESLint are in devDependencies
198
+ if (!packageJson.devDependencies) {
199
+ packageJson.devDependencies = {};
200
+ }
201
+ packageJson.devDependencies.prettier = '^3.0.0';
202
+ packageJson.devDependencies.eslint = '^8.50.0';
203
+ await fs.writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2));
204
+ this.logger.success('✓ Package.json scripts updated');
205
+ this.logger.info(' Available commands:');
206
+ this.logger.info(' npm run lint - Check code quality');
207
+ this.logger.info(' npm run lint:fix - Auto-fix linting issues');
208
+ this.logger.info(' npm run format - Format code with Prettier');
209
+ this.logger.info(' npm run qa - Run full quality checks');
210
+ this.logger.info(' npm run qa:fix - Auto-fix all quality issues');
211
+ }
212
+ catch (error) {
213
+ this.logger.warn(`Could not update package.json: ${error instanceof Error ? error.message : 'Unknown error'}`);
214
+ }
215
+ }
216
+ async createQualityGuide() {
217
+ this.logger.info('Creating quality guide...');
218
+ const guideContent = `# Code Quality Guide
219
+
220
+ This project uses **SORK** with **Prettier**, **ESLint**, and **Zod** for maximum code quality.
221
+
222
+ ## 🎯 Quality Standards
223
+
224
+ ### Formatting (Prettier)
225
+ - 2 space indentation
226
+ - Single quotes
227
+ - Trailing commas in multiline
228
+ - 100 character line width
229
+ - Auto-formatted on every commit (via SORK)
230
+
231
+ ### Linting (ESLint)
232
+ - No unused variables
233
+ - No console.log (except warnings/errors)
234
+ - Const-first variable declarations
235
+ - Strict equality (===)
236
+ - Explicit error handling
237
+
238
+ ### Validation (Zod)
239
+ - Runtime type validation for all external data
240
+ - Environment variable validation at startup
241
+ - API response validation
242
+ - Custom validation schemas in \`src/validators/\`
243
+
244
+ ## 🚀 Workflow
245
+
246
+ ### Before Committing
247
+ \`\`\`bash
248
+ npm run qa:fix # Auto-fix all issues
249
+ git add .
250
+ git commit -m "message" # SORK pre-commit hook runs automatically
251
+ \`\`\`
252
+
253
+ ### Quality Checks
254
+ \`\`\`bash
255
+ npm run lint # Check linting
256
+ npm run format:check # Check formatting
257
+ npm run type-check # Check TypeScript types
258
+ npm run qa # Run all checks
259
+ \`\`\`
260
+
261
+ ## 📋 Validation Examples
262
+
263
+ ### Environment Variables
264
+ \`\`\`typescript
265
+ import { validateEnv } from './validators';
266
+
267
+ const env = validateEnv(); // Throws ZodError if invalid
268
+ console.log(env.NODE_ENV); // Type-safe!
269
+ \`\`\`
270
+
271
+ ### API Responses
272
+ \`\`\`typescript
273
+ import { validateApiResponse } from './validators';
274
+
275
+ const response = await fetch('/api/user');
276
+ const data = validateApiResponse(await response.json()); // Validated!
277
+ \`\`\`
278
+
279
+ ## 🔍 SORK Integration
280
+
281
+ When you run \`sork init && sork setup-hooks\`:
282
+ 1. Security vulnerabilities are automatically detected
283
+ 2. Prettier & ESLint run before every commit
284
+ 3. Zod validates all data flows
285
+ 4. Pre-commit hook blocks unsafe commits
286
+
287
+ ## ❓ Need Help?
288
+
289
+ - \`sork --help\` - See SORK commands
290
+ - \`npm run qa:fix\` - Auto-fix all issues
291
+ - Check \`src/validators/\` for validation schemas
292
+ `;
293
+ const guidePath = path.join(this.projectPath, 'CODE_QUALITY.md');
294
+ await fs.writeFile(guidePath, guideContent);
295
+ this.logger.success('✓ Code quality guide created (CODE_QUALITY.md)');
296
+ }
297
+ async scaffoldAll() {
298
+ this.logger.section('Setting Up Complete Development Environment');
299
+ try {
300
+ await this.setupPrettier();
301
+ await this.setupESLint();
302
+ await this.setupZodValidation();
303
+ await this.setupScripts();
304
+ await this.createQualityGuide();
305
+ this.logger.section('✅ Development Environment Ready!');
306
+ this.logger.success('Your project now has:');
307
+ this.logger.info(' ✓ Prettier - Code formatting');
308
+ this.logger.info(' ✓ ESLint - Code linting & best practices');
309
+ this.logger.info(' ✓ Zod - Runtime type validation');
310
+ this.logger.info(' ✓ SORK - Security orchestration');
311
+ this.logger.info(' ✓ Pre-commit hooks - Automatic checks');
312
+ this.logger.info('\nRun: npm run qa:fix to auto-fix all issues');
313
+ this.logger.info('Then: sork setup-hooks to enable security checks');
314
+ }
315
+ catch (error) {
316
+ this.logger.error(`Setup failed: ${error instanceof Error ? error.message : 'Unknown error'}`);
317
+ throw error;
318
+ }
319
+ }
320
+ }
321
+ //# sourceMappingURL=scaffolder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffolder.js","sourceRoot":"","sources":["../../../lib/utils/scaffolder.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "sork-queb",
3
- "version": "1.0.0",
4
- "description": "SORK - Security Orchestration, Remediation & Keeping. Global AI security brain for Node projects.",
3
+ "version": "1.1.0",
4
+ "description": "SORK - Security Orchestration, Remediation & Keeping. Global AI security brain for Node projects with Prettier, ESLint & Zod validation.",
5
5
  "main": "dist/lib/index.js",
6
6
  "types": "dist/lib/index.d.ts",
7
7
  "bin": {
@@ -12,7 +12,7 @@
12
12
  "README.md"
13
13
  ],
14
14
  "type": "module",
15
- "keywords": ["security", "orchestration", "remediation", "linting", "auto-fix", "pre-commit"],
15
+ "keywords": ["security", "orchestration", "remediation", "linting", "auto-fix", "pre-commit", "prettier", "eslint", "zod", "validation", "code-quality"],
16
16
  "author": "Bhargav Kalambhe",
17
17
  "license": "MIT",
18
18
  "scripts": {
@@ -30,7 +30,8 @@
30
30
  "axios": "^1.6.0",
31
31
  "chalk": "^5.3.0",
32
32
  "dotenv": "^16.0.0",
33
- "minimist": "^1.2.8"
33
+ "minimist": "^1.2.8",
34
+ "zod": "^3.22.0"
34
35
  },
35
36
  "optionalDependencies": {
36
37
  "@anthropic-ai/sdk": "^0.20.0"