sork-queb 1.0.0 → 1.1.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.
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,169 @@ 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
+ #### Option 1: Global Installation (Recommended)
391
390
 
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
391
+ ```bash
392
+ # Install globally (one-time)
393
+ npm install -g sork-queb
397
394
 
398
- stages:
399
- - build
400
- - test
401
- - security
402
- ```
395
+ # Initialize in your project
396
+ cd your-project
397
+ sork init
403
398
 
404
- ### Step 2 — Enable SORK Agents
399
+ # Run security scan
400
+ sork scan
405
401
 
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
402
+ # Auto-fix vulnerabilities
403
+ sork fix
410
404
 
411
- ### Step 3 Add Project Configuration
405
+ # Setup pre-commit hooks (optional)
406
+ sork setup-hooks
407
+ ```
412
408
 
413
- Create `AGENTS.md` in your project root:
409
+ #### Option 2: Use npx (No Installation)
414
410
 
415
- ```markdown
416
- # SORK Security Orchestration, Remediation & Keeping
411
+ ```bash
412
+ # Run without installing globally - always latest version
413
+ cd your-project
414
+ npx sork-queb init
415
+ npx sork-queb scan
416
+ npx sork-queb fix
417
+ npx sork-queb setup-hooks
418
+ ```
419
+
420
+ ### Usage
417
421
 
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
422
+ **Run Security Scan:**
423
+ ```bash
424
+ sork scan
425
425
  ```
426
426
 
427
- Create `.gitlab/duo/mr-review-instructions.yaml`:
427
+ **Auto-Fix Issues:**
428
+ ```bash
429
+ sork fix
430
+ ```
428
431
 
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
432
+ **Pre-Commit Checks:**
433
+ ```bash
434
+ sork pre-commit
446
435
  ```
447
436
 
448
- ### Step 4 — Done
437
+ **View Status:**
438
+ ```bash
439
+ sork status
440
+ ```
449
441
 
450
- SORK activates automatically on your next pipeline security scan.
442
+ ---
451
443
 
452
- ### Usage
444
+ ## 🎯 Automatic Code Quality Setup
453
445
 
454
- **Automatic** Push code pipeline runs security scan completes SORK activates
446
+ When you run `sork init`, SORK automatically configures a **complete development environment** with no additional setup required.
455
447
 
456
- **Manual via @mention** — In any issue or MR:
457
- ```
458
- @sork-triage analyze all vulnerabilities in this project
448
+ ### What Gets Installed
449
+
450
+ | Tool | Purpose | Auto-Setup |
451
+ | --- | --- | --- |
452
+ | **Prettier** | Code formatting | ✅ Creates `.prettierrc.json` |
453
+ | **ESLint** | Code linting & best practices | ✅ Creates `.eslintrc.json` |
454
+ | **Zod** | Runtime type validation | ✅ Creates `src/validators/index.ts` |
455
+ | **npm Scripts** | Quality automation | ✅ Adds `npm run qa:fix` and more |
456
+ | **Documentation** | Best practices guide | ✅ Creates `CODE_QUALITY.md` |
457
+
458
+ ### Available Commands
459
+
460
+ After `sork init`, you have:
461
+
462
+ ```bash
463
+ npm run lint # Check code quality
464
+ npm run lint:fix # Auto-fix linting issues
465
+ npm run format # Format code with Prettier
466
+ npm run format:check # Verify formatting
467
+ npm run qa # Run full quality checks (lint + format)
468
+ npm run qa:fix # Fix all issues automatically ⭐
469
+ npm run type-check # Validate TypeScript types
459
470
  ```
460
471
 
461
- **Manual via Chat** — Open GitLab Duo Chat (Agentic mode):
472
+ ### Example Setup Flow
473
+
474
+ ```bash
475
+ # 1. Install SORK globally
476
+ npm install -g sork-queb
477
+
478
+ # 2. Create or navigate to a project
479
+ cd my-nodejs-project
480
+
481
+ # 3. One command sets up everything
482
+ sork init
483
+ # Output:
484
+ # ✅ Prettier configured (.prettierrc.json)
485
+ # ✅ ESLint configured (.eslintrc.json)
486
+ # ✅ Zod validators created (src/validators/index.ts)
487
+ # ✅ Package.json scripts updated
488
+ # ✅ Code quality guide created (CODE_QUALITY.md)
489
+
490
+ # 4. Auto-fix all code issues (optional but recommended)
491
+ npm run qa:fix
492
+
493
+ # 5. Enable security pre-commit checks
494
+ sork setup-hooks
495
+
496
+ # ✨ Done! Fully configured, production-ready development environment
462
497
  ```
463
- @SORK Triage — run a full vulnerability analysis on this project
498
+
499
+ ### Runtime Validation with Zod
500
+
501
+ The auto-generated validators provide type-safe error handling:
502
+
503
+ ```typescript
504
+ // src/validators/index.ts (auto-created)
505
+ import { validateEnv } from './validators';
506
+
507
+ // Validate environment variables at startup
508
+ const env = validateEnv();
509
+
510
+ if (env.NODE_ENV === 'production') {
511
+ console.log('Running in production mode');
512
+ }
513
+
514
+ // Type errors caught at runtime with clear messages:
515
+ // ❌ Environment validation failed:
516
+ // - API_KEY: Required
517
+ // - LOG_LEVEL: Expected 'debug' | 'info' | 'warn' | 'error'
464
518
  ```
465
519
 
520
+ ### Quality Checks Included
521
+
522
+ **Prettier Rules:**
523
+
524
+ - 2-space indentation
525
+ - Single quotes
526
+ - 100-character line width
527
+ - Trailing commas in multiline structures
528
+ - Consistent formatting across the project
529
+
530
+ **ESLint Rules:**
531
+
532
+ - No unused variables
533
+ - No console.log in production
534
+ - Strict equality (===)
535
+ - Proper error handling
536
+ - TypeScript best practices
537
+ - Security-focused rules
538
+
539
+ **Pre-Commit Hooks:**
540
+
541
+ - Runs before every git commit
542
+ - Blocks commits with CRITICAL vulnerabilities
543
+ - Scans only staged changes (fast!)
544
+ - Auto-suggests fixes via `npm run qa:fix`
545
+
466
546
  ---
467
547
 
468
548
  ## Tech Stack
@@ -471,19 +551,19 @@ SORK activates automatically on your next pipeline security scan.
471
551
 
472
552
  ```
473
553
  ┌──────────────────────────────────────────────────────────────────┐
474
- GITLAB INSTANCE
554
+ NODE.JS PROJECT
475
555
  │ │
476
556
  │ ┌────────────────┐ ┌──────────────────────────────────┐ │
477
- │ │ │ │ GitLab Duo Agent Platform │ │
478
- │ │ CI/CD │ │ │ │
479
- │ │ Pipeline │ │ ┌──────────┐ ┌────────────┐ │ │
480
- │ │ │ │ │ Anthropic │ │ AI Catalog │ │ │
481
- │ │ ┌─────────┐ │ │ │ Claude │ │ │ │ │
482
- │ │ │ SAST │ │ │ └─────┬────┘ └─────┬──────┘ │ │
483
- │ │ │ DepScan │──│──────▶│ │ │ │ │
484
- │ │ │ SecDet │ │ │ ▼ ▼ │ │
557
+ │ │ │ │ SORK System │ │
558
+ │ │ Security │ │ │ │
559
+ │ │ Scanning │ │ ┌──────────┐ ┌────────────┐ │ │
560
+ │ │ (ESLint, │ │ │ Anthropic │ │ SORK Core │ │ │
561
+ │ │ etc.) │ │ │ Claude │ │ Agents │ │ │
562
+ │ │ ┌─────────┐ │ │ └─────┬────┘ └─────┬──────┘ │ │
563
+ │ │ │ Scanner │──│──────▶│ │ │ │ │
564
+ │ │ │ Tools │ │ │ ▼ ▼ │ │
485
565
  │ │ └─────────┘ │ │ ┌──────────────────────────┐ │ │
486
- │ │ │ │ │ SORK FLOW │ │ │
566
+ │ │ │ │ │ SORK AGENT FLOW │ │ │
487
567
  │ └────────────────┘ │ │ │ │ │
488
568
  │ │ │ ┌────────┐ │ │ │
489
569
  │ │ │ │Triage │ │ │ │
@@ -509,9 +589,10 @@ SORK activates automatically on your next pipeline security scan.
509
589
  │ ▼ │
510
590
  │ ┌────────────────┐ ┌──────────────────────────────────┐ │
511
591
  │ │ │ │ │ │
512
- │ │ Issues │ │ Merge Requests │ │
513
- │ │ (Triage │ │ (Fix Patches + │ │
514
- │ │ Reports) │ │ Verification Reports) │ │
592
+ │ │ Logs & │ │ Fixed Code │ │
593
+ │ │ Reports │ │ (Auto-patched files) │ │
594
+ │ │ (Triage │ │ │ │
595
+ │ │ Reports) │ │ + Verification Reports │ │
515
596
  │ │ │ │ │ │
516
597
  │ └────────────────┘ └──────────────────────────────────┘ │
517
598
  │ │
@@ -522,18 +603,18 @@ SORK activates automatically on your next pipeline security scan.
522
603
 
523
604
  | Layer | Technology | Role |
524
605
  |-------|-----------|------|
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 |
606
+ | **Runtime** | Node.js 18+ | Executes SORK agents and scanning |
607
+ | **Language** | TypeScript | Full type safety for all agents |
608
+ | **AI Model** | Anthropic Claude | Powers all 3 agents with security insights |
609
+ | **Package Manager** | npm | Distributes SORK globally |
610
+ | **Orchestration** | TypeScript Classes | Chains agents: Triage Remediation Keeper |
611
+ | **CLI Tool** | minimist | Command-line argument parsing |
612
+ | **Scanning** | Custom Scanner | JavaScript/TypeScript vulnerability detection |
613
+ | **Security Patterns** | RegEx + AST | Pattern matching for SQLi, XSS, secrets, etc. |
614
+ | **Code Fixing** | File API + Prettier | Applies fixes, formats, and lints code |
615
+ | **Version Control** | Git Hooks | Pre-commit integration for automation |
616
+ | **Configuration** | JSON | .sorkrc.json configuration file |
617
+ | **Logging** | chalk + Console | Colored output with severity levels |
537
618
 
538
619
  ### Tools Usage Map
539
620
 
@@ -699,25 +780,9 @@ Junior dev pushes code with a security flaw. SORK catches it immediately, genera
699
780
 
700
781
  ---
701
782
 
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
783
  ## Built With
719
784
 
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`
785
+ `Node.js` · `TypeScript` · `Anthropic Claude` · `npm` · `ESLint` · `Prettier` · `minimist` · `chalk` · `GitHub` · `JavaScript`
721
786
 
722
787
  ---
723
788
 
@@ -754,4 +819,7 @@ SOFTWARE.
754
819
  <p align="center">
755
820
  <strong>S O R K</strong><br>
756
821
  Security Orchestration, Remediation & Keeping<br><br>
757
- <em>Keeping your code secure — automatically.
822
+ <em>Keeping your Node.js code secure — automatically.</em><br><br>
823
+ Install: <code>npm install -g sork-queb</code><br>
824
+ GitHub: <a href="https://github.com/Atofinite5/SORK-Security-Orchestration-Remediation-Keeping-">Atofinite5/SORK</a><br>
825
+ 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":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,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;AAOlD,MAAM,OAAO,gBAAgB;IACnB,WAAW,CAAS;IACpB,MAAM,CAAS;IACf,MAAM,CAAc;IACpB,WAAW,CAAmB;IAC9B,MAAM,CAAc;IACpB,OAAO,CAAkB;IACzB,KAAK,CAAY;IACjB,OAAO,CAAc;IAE7B,YAAY,UAAuB,EAAE;QACnC,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QACxD,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,cAAc,CAAC,CAAC;QAEzC,IAAI,CAAC,MAAM,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3C,IAAI,CAAC,WAAW,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrD,IAAI,CAAC,MAAM,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAE3C,IAAI,CAAC,OAAO,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAClE,IAAI,CAAC,KAAK,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAE1D,IAAI,CAAC,OAAO,GAAG;YACb,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,eAAe,EAAE,EAAE;YACnB,KAAK,EAAE,EAAE;YACT,SAAS,EAAE,EAAE;YACb,QAAQ,EAAE,EAAE;SACb,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,UAAU;QACd,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;QAE3C,2BAA2B;QAC3B,MAAM,UAAU,GAAe;YAC7B,OAAO,EAAE,OAAO;YAChB,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACrC,MAAM,EAAE;gBACN,MAAM,EAAE,IAAI;gBACZ,WAAW,EAAE,IAAI;gBACjB,MAAM,EAAE,IAAI;aACb;YACD,QAAQ,EAAE;gBACR,OAAO,EAAE,IAAI;gBACb,eAAe,EAAE,IAAI;gBACrB,UAAU,EAAE,KAAK;aAClB;SACF,CAAC;QAEF,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;QAC/D,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACpE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,0BAA0B,UAAU,EAAE,CAAC,CAAC;QAE5D,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAC/D,MAAM,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9C,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;QAE/C,2DAA2D;QAC3D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrB,MAAM,UAAU,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACxE,MAAM,UAAU,CAAC,WAAW,EAAE,CAAC;QAE/B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QACjD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;QAC9D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;QACzD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;QAC5D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAClC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;QAC5E,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,+DAA+D,CAAC,CAAC;QAClF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;IACvE,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;QAE1C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;QAC7D,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAClD,IAAI,CAAC,OAAO,CAAC,eAAe,GAAG,eAAe,CAAC;QAE/C,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC;YACpD,OAAO;QACT,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,eAAe,CAAC,MAAM,mBAAmB,CAAC,CAAC;QACxE,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QAEjE,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,aAAa,CAAC,SAAS,CAAC;QACjD,IAAI,CAAC,OAAO,CAAC,eAAe,GAAG,aAAa,CAAC,SAAS,CAAC;QAEvD,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,GAAG,aAAa,CAAC,SAAS,CAAC,MAAM,8BAA8B;YAC7D,GAAG,aAAa,CAAC,SAAS,CAAC,MAAM,oBAAoB,CACxD,CAAC;QAEF,IAAI,aAAa,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC;YACjD,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;gBAC1C,OAAO,CAAC,GAAG,CACT,GAAG,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,IAAI,IAAI;oBAC3C,YAAY,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI;oBACtC,aAAa,IAAI,CAAC,OAAO,EAAE,CAC9B,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,KAAK,CAAC,GAAG;QACP,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;QAExC,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;YACtE,OAAO;QACT,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,iDAAiD,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,MAAM,YAAY,CACjG,CAAC;QAEF,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,aAAa,CAChD,IAAI,CAAC,OAAO,CAAC,eAAe,CAC7B,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;QAE3B,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;YACxB,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;gBAC/B,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;YAC3D,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,iBAAiB,GAAG,CAAC,IAAI,KACvB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAC3C,EAAE,CACH,CAAC;YACJ,CAAC;QACH,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,gBAAgB,CAAC,CAAC;QAErD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;QAE3D,MAAM,mBAAmB,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAClD,KAAK,EACL,IAAI,CAAC,OAAO,CAAC,eAAe,CAC7B,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,mBAAmB,CAAC,QAAQ,CAAC;QAErD,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,SAAS;QACb,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC;QAEjD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;QAEpD,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAC;YAC1D,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,MAAM,kCAAkC,CAAC,CAAC;QAC3E,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;YAC9B,OAAO,CAAC,GAAG,CACT,GAAG,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,IAAI,GAAG,CAC9D,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC;QACtE,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;YACpE,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;YAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,UAAU;QACd,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;QAE5C,MAAM,WAAW,GAAG;;;;;;;;;;CAUvB,CAAC;QAEE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAC9D,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QAExD,MAAM,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9C,MAAM,EAAE,CAAC,SAAS,CAAC,aAAa,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAEhE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,oDAAoD,CAAC,CAAC;QAC1E,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;IACtE,CAAC;IAED,KAAK,CAAC,MAAM;QACV,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QAEnC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;QACxD,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAE9B,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;YAC/D,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAC7D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAe,CAAC;YACvD,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC,kBAAkB,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;YACpD,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;YAClE,OAAO,CAAC,GAAG,CACT,wBAAwB,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CACtE,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;QACnE,CAAC;QAED,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;IAC3D,CAAC;CACF"}
@@ -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.1",
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"