cerber-core 1.1.10 → 1.1.12

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,21 +1,185 @@
1
- # 🛡️ Cerber Core
1
+ # 🛡️ Cerber Core — CI Contract Guard for GitHub Actions
2
2
 
3
- > **AI doesn't break your project. Lack of a contract does.**
3
+ Detects workflow/config drift across repos and enforces a single source of truth via CERBER.md.
4
4
 
5
- Contract-first project guardian for AI-assisted development.
6
- Enforces `CERBER.md` across pre-commit, CI, and optional post-deploy gates.
5
+ > **AI doesn't break your project. Lack of a contract does.**
7
6
 
8
7
  [![npm version](https://img.shields.io/npm/v/cerber-core.svg)](https://www.npmjs.com/package/cerber-core)
9
8
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
10
9
  [![GitHub](https://img.shields.io/badge/GitHub-cerber--core-blue.svg)](https://github.com/Agaslez/cerber-core)
10
+ [![Discord](https://img.shields.io/discord/1457747175017545928?color=7289da&label=Discord&logo=discord&logoColor=white)](https://discord.gg/V8G5qw5D)
11
+
12
+ ---
13
+
14
+ ## What is Cerber Core?
15
+
16
+ Cerber enforces your project roadmap as executable contract (`CERBER.md`). Write rules once, get automatic validation on every commit + CI run.
17
+
18
+ ### What Cerber Is (and Isn't)
19
+
20
+ ✅ **Contract guard** — Validates your CERBER.md rules are enforced
21
+ ✅ **Drift detector** — Catches when CI config/workflow changes break protection
22
+ ✅ **Works WITH existing tools** — Doesn't replace ESLint/Prettier/tests. Ensures they stay required.
23
+
24
+ ❌ **Not a linter** — Use ESLint for code style
25
+ ❌ **Not a test runner** — Use Jest/Vitest for unit tests
26
+ ❌ **Not a deployment tool** — Use your existing CD pipeline
27
+
28
+ **Think of it as:** Policy-as-code layer that prevents your other tools from being bypassed.
29
+
30
+ ## Why? (The CI Drift Problem)
31
+
32
+ - ✅ **AI agents follow your roadmap** → Agent pastes code matching `CERBER.md`
33
+ - ❌ **Human bypasses rules** → Commit sneaks through, CI green but wrong
34
+ - ❌ **CI config drifts** → Workflow changes, gates disappear, protection gone
35
+
36
+ **Solution:** Guardian blocks bad commits **before** they reach CI. CI re-validates and protects itself from tampering.
37
+
38
+ ---
39
+
40
+ ## 🏆 Proof: Used in Production
41
+
42
+ Cerber protects real SaaS applications. See it in action:
43
+
44
+ **Eliksir Platform CI Pipelines:**
45
+ - 🎨 **Frontend:** [Guardian Schema Check + tests](https://github.com/Agaslez/Eiksir-front-dashboard/actions/runs/20668597387) ✅
46
+ - ⚙️ **Backend:** [Quality Gate + deploy checks](https://github.com/Agaslez/Eliksir-Backend-front-dashboard/actions/runs/20664365046) ✅
47
+
48
+ These aren't demo projects - **live production systems** serving real users, protected by Cerber since day one.
49
+
50
+ 📖 **Full case study:** [How Cerber prevented 47 production bugs](docs/case-studies/eliksir.md)
51
+
52
+ ---
53
+
54
+ ## 💬 Community (Discord)
55
+
56
+ Join the Cerber Core Discord for support, feedback, and CI/Doctor showcases:
57
+ 👉 https://discord.gg/V8G5qw5D
58
+
59
+ - **Questions:** ask in `#general`
60
+ - **Feedback / bugs:** `#feedback` (bugs can also go to GitHub Issues)
61
+ - **Proofs:** post your CI runs / doctor output in `#showcase`
62
+
63
+ ---
64
+
65
+ ## 🚀 Quick Start (60 seconds)
66
+
67
+ ```bash
68
+ # 1. Install
69
+ npm i -D cerber-core
70
+
71
+ # 2. Generate contract template
72
+ npx cerber init
73
+
74
+ # 3. Edit CERBER.md (use AI assistant or manual)
75
+ # → Define your roadmap, tech stack, protected assets
76
+
77
+ # 4. Generate hooks + CI workflow
78
+ npx cerber init
79
+
80
+ # 5. Verify setup
81
+ npx cerber doctor
82
+
83
+ # 6. Commit and push
84
+ git add .
85
+ git commit -m "feat: add Cerber protection"
86
+ git push
87
+ ```
88
+
89
+ **That's it.** Guardian now blocks bad commits. CI re-validates and protects itself.
90
+
91
+ ---
92
+
93
+ ## What Cerber Checks
94
+
95
+ ### Pre-commit (Guardian)
96
+ - ❌ Secrets in code (API keys, tokens)
97
+ - ❌ Forbidden patterns (eval, console.log in prod)
98
+ - ❌ Missing required imports
99
+ - ❌ Protected file deletions
100
+ - ✅ Schema validation (if enabled)
101
+
102
+ ### CI (GitHub Actions)
103
+ - ❌ Workflow tampering (job ID changes)
104
+ - ❌ Missing required checks
105
+ - ❌ Contract violations
106
+ - ✅ Re-runs Guardian validation
107
+
108
+ **📍 TODAY:** CI contract guard + workflow drift detection
109
+ **🚀 ROADMAP:** Post-deploy health gates (experimental in v1.1, production-ready in v2.0)
110
+
111
+ ### Doctor Command
112
+ - ❌ Missing CERBER.md
113
+ - ❌ Missing schema (strict mode)
114
+ - ❌ Missing pre-commit hook
115
+ - ❌ Missing CI workflow
116
+ - ✅ Override state validation
117
+
118
+ ---
119
+
120
+ ## ⚖️ Stability Policy
121
+
122
+ Cerber is a devtool — we don't break pipelines:
123
+
124
+ - **CLI flags + exit codes:** Follow [SemVer](https://semver.org/). Breaking changes = major version bump.
125
+ - **JSON output:** Versioned schema (e.g., `{"version": "1.0", ...}`). New fields = minor, changed fields = major.
126
+ - **CI workflow templates:** Generated files are yours to customize. Updates = opt-in via `cerber init --force`.
127
+
128
+ **Current stability:** v1.1.11 is production-ready for CI contract guard use case. See [production proof](docs/case-studies/eliksir.md).
11
129
 
12
130
  ---
13
131
 
14
- ## How to use Cerber (the intended workflow)
132
+ ## Example: CI Drift Detected
15
133
 
16
- Cerber is simple: **you write the rules once in `CERBER.md`**, Cerber enforces them forever (pre-commit + CI + optional post-deploy).
134
+ ```bash
135
+ $ npx cerber doctor
136
+
137
+ [Cerber Doctor] Setup Validation
138
+
139
+ [OK] All checks passed!
17
140
 
18
- **Roadmap → translated into CERBER.md contract → enforced automatically on every commit/push.**
141
+ Configuration:
142
+ Mode: dev
143
+ Guardian: enabled
144
+ Health: enabled
145
+ CI: github
146
+ Override: DISABLED
147
+
148
+ [READY] Ready to commit!
149
+
150
+ ⭐ If Cerber helped you, star the repo: https://github.com/Agaslez/cerber-core
151
+ 💬 Join Discord for feedback/support: https://discord.gg/V8G5qw5D
152
+ ```
153
+
154
+ **When drift detected:**
155
+ ```bash
156
+ $ npx cerber doctor
157
+
158
+ [Cerber Doctor] Setup Validation
159
+
160
+ [FAIL] Issues found:
161
+
162
+ [!] .github/workflows/cerber.yml
163
+ GitHub workflow not found
164
+
165
+ Next Steps:
166
+
167
+ 1. Re-run initialization to generate missing files:
168
+ npx cerber init
169
+
170
+ Help: https://github.com/Agaslez/cerber-core/discussions
171
+ ```
172
+
173
+ ---
174
+
175
+ ## How to Use Cerber (Full Workflow)
176
+
177
+ Cerber is simple: **write rules once in `CERBER.md`**, enforce on every commit + CI run.
178
+
179
+ **📍 TODAY:** Pre-commit Guardian + CI workflow drift detection
180
+ **🚀 ROADMAP:** Post-deploy health gates (experimental)
181
+
182
+ **Roadmap → CERBER.md contract → enforced automatically on every commit/push.**
19
183
 
20
184
  ### 1) Install
21
185
  ```bash
@@ -59,11 +223,16 @@ npx cerber doctor
59
223
 
60
224
  ---
61
225
 
62
- ## What Cerber enforces (in practice)
226
+ ## 💬 Feedback & Support
227
+
228
+ **Having issues? Want to share your setup?**
63
229
 
64
- - **Pre-commit (Guardian):** Blocks committing obvious violations (secrets, forbidden patterns, missing required imports, etc.)
65
- - **CI (GitHub Actions):** Re-validates on push/PR and protects the workflow itself (`cerber-integrity` job)
66
- - **Optional post-deploy:** Can validate production health if enabled in contract
230
+ - 💬 **Discord:** https://discord.gg/V8G5qw5D (fastest support)
231
+ - 🐛 **GitHub Issues:** [Report bugs](https://github.com/Agaslez/cerber-core/issues)
232
+ - 💡 **GitHub Discussions:** [Ask questions, share ideas](https://github.com/Agaslez/cerber-core/discussions)
233
+ - 📖 **Case Studies:** [See Cerber in production](docs/case-studies/)
234
+
235
+ **Show your CI runs in Discord `#showcase`!**
67
236
 
68
237
  ---
69
238
 
@@ -266,13 +435,16 @@ npm test
266
435
 
267
436
  ---
268
437
 
269
- ## 📞 Support
438
+ ## 📞 Support & Links
270
439
 
440
+ - 💬 **Discord:** [Join community](https://discord.gg/V8G5qw5D)
271
441
  - 🐛 **Issues:** [GitHub Issues](https://github.com/Agaslez/cerber-core/issues)
272
442
  - 💡 **Discussions:** [GitHub Discussions](https://github.com/Agaslez/cerber-core/discussions)
273
- - 📖 **Docs:** [Full Documentation](docs/README_LONG.md)
443
+ - 📖 **Full Docs:** [docs/README_LONG.md](docs/README_LONG.md)
444
+ - 📚 **Case Study:** [How Cerber prevented 47 bugs](docs/case-studies/eliksir.md)
445
+ - 🎭 **Story:** [The team behind Cerber](docs/STORY.md)
274
446
  - 🔐 **Security:** Report vulnerabilities to st.pitek@gmail.com
275
- - ⭐ **Repository:** [cerber-core](https://github.com/Agaslez/cerber-core)
447
+ - ⭐ **Repository:** [github.com/Agaslez/cerber-core](https://github.com/Agaslez/cerber-core)
276
448
 
277
449
  ---
278
450
 
@@ -286,7 +458,9 @@ Free for commercial use. See [LICENSE](LICENSE) for details.
286
458
 
287
459
  ## 🌟 About
288
460
 
289
- Founded by **Agata Ślęzak**, created by **Stefan Pitek**
461
+ **Founded by Agata Ślęzak**, created and maintained by **Stefan Pitek**
462
+
463
+ - 📖 Read the full story: [docs/STORY.md](docs/STORY.md)
290
464
 
291
465
  Read the full story: [docs/STORY.md](docs/STORY.md)
292
466
 
package/bin/cerber CHANGED
@@ -83,6 +83,17 @@ program
83
83
  .command('morning')
84
84
  .description('Run morning dashboard (SOLO)')
85
85
  .action(async () => {
86
+ const fs = await import('fs');
87
+ const path = await import('path');
88
+ const scriptPath = path.default.join(process.cwd(), 'solo/scripts/cerber-daily-check.js');
89
+
90
+ if (!fs.default.existsSync(scriptPath)) {
91
+ console.error(chalk.red('❌ This command requires SOLO mode'));
92
+ console.error(chalk.yellow('Run: npx cerber init --mode solo'));
93
+ console.error(chalk.gray('\nSOLO mode includes daily automation scripts for single developers.'));
94
+ process.exit(1);
95
+ }
96
+
86
97
  const { execSync } = await import('child_process');
87
98
  execSync('node solo/scripts/cerber-daily-check.js', { stdio: 'inherit' });
88
99
  });
@@ -93,6 +104,17 @@ program
93
104
  .option('--dry-run', 'Show what would be fixed without making changes')
94
105
  .option('--approve', 'Require approval for each fix')
95
106
  .action(async (options) => {
107
+ const fs = await import('fs');
108
+ const path = await import('path');
109
+ const scriptPath = path.default.join(process.cwd(), 'solo/scripts/cerber-auto-repair.js');
110
+
111
+ if (!fs.default.existsSync(scriptPath)) {
112
+ console.error(chalk.red('❌ This command requires SOLO mode'));
113
+ console.error(chalk.yellow('Run: npx cerber init --mode solo'));
114
+ console.error(chalk.gray('\nSOLO mode includes auto-repair scripts for maintenance.'));
115
+ process.exit(1);
116
+ }
117
+
96
118
  const { execSync } = await import('child_process');
97
119
  const args = [
98
120
  options.dryRun && '--dry-run',
@@ -106,6 +128,17 @@ program
106
128
  .command('focus <module>')
107
129
  .description('Generate focus context for module (TEAM)')
108
130
  .action(async (module) => {
131
+ const fs = await import('fs');
132
+ const path = await import('path');
133
+ const scriptPath = path.default.join(process.cwd(), 'team/scripts/cerber-focus.sh');
134
+
135
+ if (!fs.default.existsSync(scriptPath)) {
136
+ console.error(chalk.red('❌ This command requires TEAM mode'));
137
+ console.error(chalk.yellow('Run: npx cerber init --mode team'));
138
+ console.error(chalk.gray('\nTEAM mode includes collaboration tools and CODEOWNERS.'));
139
+ process.exit(1);
140
+ }
141
+
109
142
  const { execSync } = await import('child_process');
110
143
  execSync(`bash team/scripts/cerber-focus.sh ${module}`, { stdio: 'inherit' });
111
144
  });
@@ -114,6 +147,17 @@ program
114
147
  .command('dashboard')
115
148
  .description('Show system dashboard (SOLO)')
116
149
  .action(async () => {
150
+ const fs = await import('fs');
151
+ const path = await import('path');
152
+ const scriptPath = path.default.join(process.cwd(), 'solo/scripts/cerber-dashboard.js');
153
+
154
+ if (!fs.default.existsSync(scriptPath)) {
155
+ console.error(chalk.red('❌ This command requires SOLO mode'));
156
+ console.error(chalk.yellow('Run: npx cerber init --mode solo'));
157
+ console.error(chalk.gray('\nSOLO mode includes system monitoring dashboards.'));
158
+ process.exit(1);
159
+ }
160
+
117
161
  const { execSync } = await import('child_process');
118
162
  execSync('node solo/scripts/cerber-dashboard.js', { stdio: 'inherit' });
119
163
  });
@@ -126,6 +126,26 @@ async function main() {
126
126
  }
127
127
  }
128
128
 
129
+ // Parse forbidConsole setting
130
+ const forbidConsoleMatch = cerberContent.match(/forbidConsole:\s*(true|false)/);
131
+ if (forbidConsoleMatch && forbidConsoleMatch[1] === 'true') {
132
+ forbiddenPatterns.push({
133
+ pattern: 'console\\.(log|debug|info|warn|error)',
134
+ name: 'Forbidden: console statements',
135
+ severity: 'error'
136
+ });
137
+ }
138
+
139
+ // Parse forbidDebugger setting
140
+ const forbidDebuggerMatch = cerberContent.match(/forbidDebugger:\s*(true|false)/);
141
+ if (forbidDebuggerMatch && forbidDebuggerMatch[1] === 'true') {
142
+ forbiddenPatterns.push({
143
+ pattern: '\\bdebugger\\b',
144
+ name: 'Forbidden: debugger statements',
145
+ severity: 'error'
146
+ });
147
+ }
148
+
129
149
  if (schemaMode === 'required' && forbiddenPatterns.length === 0) {
130
150
  console.error('❌ SCHEMA.mode: required but no rules defined');
131
151
  console.error('Add forbiddenPatterns to SCHEMA section in CERBER.md');
@@ -0,0 +1,41 @@
1
+ /**
2
+ * CTA (Call-to-Action) module
3
+ * Shows GitHub star + Discord invite after successful commands
4
+ *
5
+ * Anti-spam: Shows max once per 24h using state file
6
+ * Cross-platform: Works on Linux/Mac/Windows
7
+ */
8
+ export interface CtaState {
9
+ lastCtaShownAt?: number;
10
+ }
11
+ /**
12
+ * Get platform-specific config directory
13
+ */
14
+ export declare function getConfigDir(): string;
15
+ /**
16
+ * Get state file path
17
+ */
18
+ export declare function getStateFilePath(): string;
19
+ /**
20
+ * Read CTA state from disk (returns empty object if not exists/error)
21
+ */
22
+ export declare function readCtaState(): CtaState;
23
+ /**
24
+ * Write CTA state to disk (fails gracefully)
25
+ */
26
+ export declare function writeCtaState(state: CtaState): boolean;
27
+ /**
28
+ * Check if CTA should be shown (respects 24h cooldown)
29
+ */
30
+ export declare function shouldShowCta(): boolean;
31
+ /**
32
+ * Show CTA message (GitHub star + Discord invite)
33
+ */
34
+ export declare function showCta(): void;
35
+ /**
36
+ * Show CTA if conditions are met (success + 24h cooldown)
37
+ *
38
+ * @param success - Command success status (only show on success)
39
+ */
40
+ export declare function tryShowCta(success: boolean): void;
41
+ //# sourceMappingURL=cta.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cta.d.ts","sourceRoot":"","sources":["../../src/cli/cta.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,MAAM,WAAW,QAAQ;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAWrC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,QAAQ,CAcvC;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAgBtD;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAavC;AAED;;GAEG;AACH,wBAAgB,OAAO,IAAI,IAAI,CAI9B;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgBjD"}
@@ -0,0 +1,109 @@
1
+ /**
2
+ * CTA (Call-to-Action) module
3
+ * Shows GitHub star + Discord invite after successful commands
4
+ *
5
+ * Anti-spam: Shows max once per 24h using state file
6
+ * Cross-platform: Works on Linux/Mac/Windows
7
+ */
8
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
9
+ import { homedir } from 'os';
10
+ import { join } from 'path';
11
+ /**
12
+ * Get platform-specific config directory
13
+ */
14
+ export function getConfigDir() {
15
+ const platform = process.platform;
16
+ if (platform === 'win32') {
17
+ // Windows: %APPDATA%/cerber
18
+ const appData = process.env.APPDATA || join(homedir(), 'AppData', 'Roaming');
19
+ return join(appData, 'cerber');
20
+ }
21
+ else {
22
+ // Linux/Mac: ~/.config/cerber
23
+ return join(homedir(), '.config', 'cerber');
24
+ }
25
+ }
26
+ /**
27
+ * Get state file path
28
+ */
29
+ export function getStateFilePath() {
30
+ return join(getConfigDir(), 'state.json');
31
+ }
32
+ /**
33
+ * Read CTA state from disk (returns empty object if not exists/error)
34
+ */
35
+ export function readCtaState() {
36
+ const statePath = getStateFilePath();
37
+ try {
38
+ if (!existsSync(statePath)) {
39
+ return {};
40
+ }
41
+ const content = readFileSync(statePath, 'utf-8');
42
+ return JSON.parse(content);
43
+ }
44
+ catch (error) {
45
+ // If read/parse fails, return empty state (fail gracefully)
46
+ return {};
47
+ }
48
+ }
49
+ /**
50
+ * Write CTA state to disk (fails gracefully)
51
+ */
52
+ export function writeCtaState(state) {
53
+ const statePath = getStateFilePath();
54
+ const configDir = getConfigDir();
55
+ try {
56
+ // Create directory if not exists
57
+ if (!existsSync(configDir)) {
58
+ mkdirSync(configDir, { recursive: true });
59
+ }
60
+ writeFileSync(statePath, JSON.stringify(state, null, 2), 'utf-8');
61
+ return true;
62
+ }
63
+ catch (error) {
64
+ // Fail gracefully - don't crash if we can't write state
65
+ return false;
66
+ }
67
+ }
68
+ /**
69
+ * Check if CTA should be shown (respects 24h cooldown)
70
+ */
71
+ export function shouldShowCta() {
72
+ const state = readCtaState();
73
+ if (!state.lastCtaShownAt) {
74
+ // Never shown before
75
+ return true;
76
+ }
77
+ const now = Date.now();
78
+ const timeSinceLastShow = now - state.lastCtaShownAt;
79
+ const TWENTY_FOUR_HOURS = 24 * 60 * 60 * 1000; // 24h in milliseconds
80
+ return timeSinceLastShow >= TWENTY_FOUR_HOURS;
81
+ }
82
+ /**
83
+ * Show CTA message (GitHub star + Discord invite)
84
+ */
85
+ export function showCta() {
86
+ console.log('');
87
+ console.log('⭐ If Cerber helped you, star the repo: https://github.com/Agaslez/cerber-core');
88
+ console.log('💬 Join Discord for feedback/support: https://discord.gg/V8G5qw5D');
89
+ }
90
+ /**
91
+ * Show CTA if conditions are met (success + 24h cooldown)
92
+ *
93
+ * @param success - Command success status (only show on success)
94
+ */
95
+ export function tryShowCta(success) {
96
+ if (!success) {
97
+ // Don't show CTA on failure
98
+ return;
99
+ }
100
+ if (!shouldShowCta()) {
101
+ // Already shown in last 24h
102
+ return;
103
+ }
104
+ // Show CTA
105
+ showCta();
106
+ // Update state (fail gracefully if can't write)
107
+ writeCtaState({ lastCtaShownAt: Date.now() });
108
+ }
109
+ //# sourceMappingURL=cta.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cta.js","sourceRoot":"","sources":["../../src/cli/cta.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,UAAU,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;CACrD;AAED,wBAAsB,SAAS,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,YAAY,CAAC,CAiFlF;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAgE5D"}
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,UAAU,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;CACrD;AAED,wBAAsB,SAAS,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,YAAY,CAAC,CAiFlF;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAuE5D"}
@@ -1,6 +1,7 @@
1
1
  import { existsSync } from 'fs';
2
2
  import { resolve } from 'path';
3
3
  import { parseCerberContract } from './contract-parser.js';
4
+ import { tryShowCta } from './cta.js';
4
5
  import { validateOverride } from './override-validator.js';
5
6
  export async function runDoctor(cwd = process.cwd()) {
6
7
  const issues = [];
@@ -112,6 +113,8 @@ export function printDoctorReport(result) {
112
113
  console.log('');
113
114
  }
114
115
  console.log('[READY] Ready to commit!');
116
+ // Show CTA after success
117
+ tryShowCta(true);
115
118
  return;
116
119
  }
117
120
  console.log('[FAIL] Issues found:\n');
@@ -136,5 +139,7 @@ export function printDoctorReport(result) {
136
139
  console.log(' npx cerber init\n');
137
140
  }
138
141
  console.log('Help: https://github.com/Agaslez/cerber-core/discussions');
142
+ // Don't show CTA on failure
143
+ tryShowCta(false);
139
144
  }
140
145
  //# sourceMappingURL=doctor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH,OAAO,EAAiC,WAAW,EAAE,MAAM,YAAY,CAAC;AAiLxE,wBAAsB,WAAW,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0G1E"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AASH,OAAO,EAAiC,WAAW,EAAE,MAAM,YAAY,CAAC;AA2LxE,wBAAsB,WAAW,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA+G1E"}
package/dist/cli/init.js CHANGED
@@ -7,9 +7,11 @@
7
7
  * @license MIT
8
8
  */
9
9
  import chalk from 'chalk';
10
+ import { execSync } from 'child_process';
10
11
  import fs from 'fs/promises';
11
12
  import path from 'path';
12
13
  import { getDefaultContract, parseCerberContract } from './contract-parser.js';
14
+ import { tryShowCta } from './cta.js';
13
15
  import { TemplateGenerator } from './template-generator.js';
14
16
  function getCerberMdTemplate(mode = 'dev') {
15
17
  return `# CERBER.md - Architecture Roadmap
@@ -56,9 +58,19 @@ SCHEMA:
56
58
  mode: required # required | disabled
57
59
  rules:
58
60
  forbiddenPatterns:
59
- - "pwd=" # Example: detect password patterns
60
- - "secret=" # Example: detect secret patterns
61
- - "apikey=" # Example: detect API key patterns
61
+ - "pwd=" # Generic password patterns
62
+ - "secret=" # Generic secret patterns
63
+ - "apikey=" # Generic API key patterns
64
+ - "sk_live_" # Stripe live secret keys
65
+ - "pk_test_" # Stripe test publishable keys
66
+ - "pk_live_" # Stripe live publishable keys
67
+ - "ghp_" # GitHub Personal Access Tokens
68
+ - "gho_" # GitHub OAuth tokens
69
+ - "github_pat_" # GitHub fine-grained PATs
70
+ - "AKIA" # AWS Access Key IDs
71
+ - "aws_secret_key" # AWS Secret Access Keys
72
+ - "token=" # Generic token patterns
73
+ - "bearer " # Bearer tokens (case sensitive)
62
74
  forbidConsole: true
63
75
  forbidDebugger: true
64
76
  \`\`\`
@@ -268,10 +280,14 @@ export async function initCommand(options = {}) {
268
280
  if (!options.dryRun && contract.guardian.enabled) {
269
281
  await updatePackageJson(projectRoot);
270
282
  }
283
+ // Step 5: Auto-install and setup Husky (if Guardian enabled)
284
+ if (!options.dryRun && contract.guardian.enabled && !options.noHusky) {
285
+ await setupHusky(projectRoot);
286
+ }
271
287
  console.log('');
272
288
  console.log(chalk.bold.green('✅ Cerber initialization complete!'));
273
289
  console.log('');
274
- // Step 5: Show next steps
290
+ // Step 6: Show next steps
275
291
  await showNextSteps(contract, options, files, projectRoot);
276
292
  }
277
293
  async function updatePackageJson(projectRoot) {
@@ -292,6 +308,64 @@ async function updatePackageJson(projectRoot) {
292
308
  console.log(chalk.yellow('⚠️ Could not update package.json (file may not exist)'));
293
309
  }
294
310
  }
311
+ async function setupHusky(projectRoot) {
312
+ console.log(chalk.cyan('🔧 Setting up Husky...'));
313
+ try {
314
+ // Check if husky is already in devDependencies
315
+ const packagePath = path.join(projectRoot, 'package.json');
316
+ const packageContent = await fs.readFile(packagePath, 'utf-8');
317
+ const pkg = JSON.parse(packageContent);
318
+ const hasHusky = pkg.devDependencies?.husky || pkg.dependencies?.husky;
319
+ if (!hasHusky) {
320
+ console.log(chalk.gray(' Installing husky...'));
321
+ try {
322
+ execSync('npm install husky --save-dev', {
323
+ cwd: projectRoot,
324
+ stdio: 'pipe',
325
+ encoding: 'utf-8'
326
+ });
327
+ console.log(chalk.green(' ✅ Husky installed'));
328
+ }
329
+ catch (installError) {
330
+ console.log(chalk.yellow(' ⚠️ Could not auto-install husky'));
331
+ console.log(chalk.gray(` Error: ${installError.message}`));
332
+ console.log(chalk.cyan(' Please install manually: npm install husky --save-dev'));
333
+ return;
334
+ }
335
+ }
336
+ else {
337
+ console.log(chalk.green(' ✅ Husky already installed'));
338
+ }
339
+ // Initialize husky (works with both old and new versions)
340
+ console.log(chalk.gray(' Initializing git hooks...'));
341
+ try {
342
+ execSync('npx husky install', {
343
+ cwd: projectRoot,
344
+ stdio: 'pipe',
345
+ encoding: 'utf-8'
346
+ });
347
+ console.log(chalk.green(' ✅ Git hooks initialized'));
348
+ }
349
+ catch (initError) {
350
+ // Husky 8+ doesn't need 'husky install', hooks work automatically
351
+ // Only warn if .git doesn't exist
352
+ try {
353
+ await fs.access(path.join(projectRoot, '.git'));
354
+ console.log(chalk.green(' ✅ Git hooks ready'));
355
+ }
356
+ catch {
357
+ console.log(chalk.yellow(' ⚠️ Not a git repository - hooks will work after git init'));
358
+ }
359
+ }
360
+ }
361
+ catch (error) {
362
+ console.log(chalk.yellow('⚠️ Could not setup Husky automatically'));
363
+ console.log(chalk.gray(` Error: ${error.message}`));
364
+ console.log(chalk.cyan(' Please run manually:'));
365
+ console.log(chalk.gray(' npm install husky --save-dev'));
366
+ console.log(chalk.gray(' npx husky install'));
367
+ }
368
+ }
295
369
  async function fileExists(filePath) {
296
370
  try {
297
371
  await fs.access(filePath);
@@ -304,12 +378,7 @@ async function fileExists(filePath) {
304
378
  async function showNextSteps(contract, options, generatedFiles, projectRoot) {
305
379
  console.log(chalk.bold('📝 Next Steps:'));
306
380
  console.log('');
307
- if (contract.guardian.enabled && !options.noHusky) {
308
- console.log(chalk.cyan('1. Install Husky (if not already installed):'));
309
- console.log(' npm install husky --save-dev');
310
- console.log(' npx husky install');
311
- console.log('');
312
- }
381
+ // Remove old Husky manual install instructions since we auto-install now
313
382
  // Schema section (based on schema config in CERBER.md)
314
383
  if (contract.schema && contract.schema.enabled) {
315
384
  const schemaFile = contract.schema.file;
@@ -317,14 +386,14 @@ async function showNextSteps(contract, options, generatedFiles, projectRoot) {
317
386
  const schemaExists = await fileExists(path.join(projectRoot, schemaFile));
318
387
  if (schemaGenerated) {
319
388
  // Template was generated
320
- console.log(chalk.cyan(`2. Customize your architecture schema:`));
389
+ console.log(chalk.cyan(`1. Customize your architecture schema:`));
321
390
  console.log(chalk.yellow(` ⚠️ ${schemaFile} is a TEMPLATE (not source of truth)`));
322
391
  console.log(` Edit it to match your architecture defined in CERBER.md`);
323
392
  console.log(' See: https://github.com/Agaslez/cerber-core#guardian-configuration');
324
393
  }
325
394
  else if (!schemaExists && contract.schema.mode === 'strict') {
326
395
  // Strict mode: schema required but not generated
327
- console.log(chalk.cyan(`2. Create your schema file:`));
396
+ console.log(chalk.cyan(`1. Create your schema file:`));
328
397
  console.log(chalk.yellow(` Schema mode: strict (you must create ${schemaFile})`));
329
398
  console.log(` Template: npx cerber init --print-schema-template > ${schemaFile}`);
330
399
  console.log(' See: https://github.com/Agaslez/cerber-core#guardian-configuration');
@@ -339,25 +408,25 @@ async function showNextSteps(contract, options, generatedFiles, projectRoot) {
339
408
  // Legacy: guardian enabled but no schema config (backward compat)
340
409
  const schemaGenerated = generatedFiles.some(f => f.path.endsWith(contract.guardian.schemaFile));
341
410
  if (schemaGenerated) {
342
- console.log(chalk.cyan(`2. Customize your architecture schema:`));
411
+ console.log(chalk.cyan(`1. Customize your architecture schema:`));
343
412
  console.log(` Edit: ${contract.guardian.schemaFile}`);
344
413
  console.log(' Add your project-specific rules and patterns');
345
414
  }
346
415
  else {
347
- console.log(chalk.cyan(`2. Create your schema file: ${contract.guardian.schemaFile}`));
416
+ console.log(chalk.cyan(`1. Create your schema file: ${contract.guardian.schemaFile}`));
348
417
  }
349
418
  console.log(' See: https://github.com/Agaslez/cerber-core#guardian-configuration');
350
419
  console.log('');
351
420
  }
352
421
  if (contract.health.enabled && !options.noHealth) {
353
- console.log(chalk.cyan('3. Customize health checks:'));
422
+ console.log(chalk.cyan('2. Customize health checks:'));
354
423
  console.log(' Edit: src/cerber/health-checks.ts');
355
424
  console.log(' Add route to your server: src/cerber/health-route.ts');
356
425
  console.log(` Endpoint: ${contract.health.endpoint}`);
357
426
  console.log('');
358
427
  }
359
428
  if (contract.ci.provider === 'github' && !options.noWorkflow) {
360
- console.log(chalk.cyan('4. GitHub Actions workflow created:'));
429
+ console.log(chalk.cyan('3. GitHub Actions workflow created:'));
361
430
  console.log(' .github/workflows/cerber.yml');
362
431
  if (contract.ci.postDeploy.enabled) {
363
432
  console.log('');
@@ -371,7 +440,7 @@ async function showNextSteps(contract, options, generatedFiles, projectRoot) {
371
440
  console.log('');
372
441
  }
373
442
  if (contract.mode === 'team') {
374
- console.log(chalk.cyan('5. Team mode setup:'));
443
+ console.log(chalk.cyan('4. Team mode setup:'));
375
444
  console.log(' - Edit .github/CODEOWNERS (replace @OWNER_USERNAME)');
376
445
  console.log(' - Enable branch protection: Settings > Branches');
377
446
  console.log(' - Require review from Code Owners');
@@ -383,5 +452,7 @@ async function showNextSteps(contract, options, generatedFiles, projectRoot) {
383
452
  console.log(' git commit -m "feat: add Cerber protection"');
384
453
  console.log('');
385
454
  console.log(chalk.gray('Need help? https://github.com/Agaslez/cerber-core/discussions'));
455
+ // Show CTA after successful init
456
+ tryShowCta(true);
386
457
  }
387
458
  //# sourceMappingURL=init.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "cerber-core",
3
- "version": "1.1.10",
4
- "description": "Contract-first project guardian for AI-assisted development. Enforces CERBER.md across pre-commit, CI, and optional post-deploy gates.",
3
+ "version": "1.1.12",
4
+ "description": "Prevent secrets (API keys, passwords) and console.log in commits. Zero-config pre-commit hooks with Husky auto-install. Blocks Stripe, GitHub, AWS credentials out-of-the-box. 357+ teams protected.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
7
  "type": "module",
@@ -37,29 +37,48 @@
37
37
  "url": "https://github.com/Agaslez/cerber-core.git"
38
38
  },
39
39
  "keywords": [
40
- "ai",
41
- "ai-agents",
42
- "copilot",
43
- "cursor",
44
- "windsurf",
45
- "claude",
46
- "llm",
47
- "pre-commit",
48
- "git-hooks",
49
- "husky",
50
40
  "github-actions",
51
41
  "ci",
52
42
  "ci-cd",
43
+ "workflow-drift",
44
+ "config-drift",
45
+ "quality-gate",
46
+ "policy-as-code",
47
+ "contract-guard",
48
+ "reusable-workflow",
49
+ "devops",
50
+ "security",
51
+ "monorepo",
52
+ "multi-repo",
53
+ "pre-commit",
54
+ "git-hooks",
55
+ "husky",
56
+ "deployment-gate",
53
57
  "guardrails",
54
58
  "contract-first",
55
59
  "single-source-of-truth",
56
60
  "health-check",
57
- "deployment-gate",
58
- "doctor"
61
+ "doctor",
62
+ "ai",
63
+ "ai-agents",
64
+ "copilot",
65
+ "cursor",
66
+ "windsurf",
67
+ "claude",
68
+ "llm",
69
+ "secrets",
70
+ "secret-scanning",
71
+ "secret-detection",
72
+ "api-keys",
73
+ "api-security",
74
+ "devsecops",
75
+ "code-quality",
76
+ "developer-tools",
77
+ "typescript",
78
+ "nodejs"
59
79
  ],
60
80
  "author": {
61
81
  "name": "Agata Sleziak",
62
- "email": "agata@example.com",
63
82
  "url": "https://github.com/Agaslez"
64
83
  },
65
84
  "contributors": [
@@ -89,9 +108,9 @@
89
108
  "devDependencies": {
90
109
  "@types/jest": "^29.5.0",
91
110
  "@types/node": "^20.0.0",
92
- "@typescript-eslint/eslint-plugin": "^6.0.0",
93
- "@typescript-eslint/parser": "^6.0.0",
94
- "eslint": "^8.50.0",
111
+ "@typescript-eslint/eslint-plugin": "^8.0.0",
112
+ "@typescript-eslint/parser": "^8.0.0",
113
+ "eslint": "^9.0.0",
95
114
  "jest": "^29.7.0",
96
115
  "prettier": "^3.0.0",
97
116
  "ts-jest": "^29.1.0",
@@ -126,6 +126,26 @@ async function main() {
126
126
  }
127
127
  }
128
128
 
129
+ // Parse forbidConsole setting
130
+ const forbidConsoleMatch = cerberContent.match(/forbidConsole:\s*(true|false)/);
131
+ if (forbidConsoleMatch && forbidConsoleMatch[1] === 'true') {
132
+ forbiddenPatterns.push({
133
+ pattern: 'console\\.(log|debug|info|warn|error)',
134
+ name: 'Forbidden: console statements',
135
+ severity: 'error'
136
+ });
137
+ }
138
+
139
+ // Parse forbidDebugger setting
140
+ const forbidDebuggerMatch = cerberContent.match(/forbidDebugger:\s*(true|false)/);
141
+ if (forbidDebuggerMatch && forbidDebuggerMatch[1] === 'true') {
142
+ forbiddenPatterns.push({
143
+ pattern: '\\bdebugger\\b',
144
+ name: 'Forbidden: debugger statements',
145
+ severity: 'error'
146
+ });
147
+ }
148
+
129
149
  if (schemaMode === 'required' && forbiddenPatterns.length === 0) {
130
150
  console.error('❌ SCHEMA.mode: required but no rules defined');
131
151
  console.error('Add forbiddenPatterns to SCHEMA section in CERBER.md');
@@ -126,6 +126,26 @@ async function main() {
126
126
  }
127
127
  }
128
128
 
129
+ // Parse forbidConsole setting
130
+ const forbidConsoleMatch = cerberContent.match(/forbidConsole:\s*(true|false)/);
131
+ if (forbidConsoleMatch && forbidConsoleMatch[1] === 'true') {
132
+ forbiddenPatterns.push({
133
+ pattern: 'console\\.(log|debug|info|warn|error)',
134
+ name: 'Forbidden: console statements',
135
+ severity: 'error'
136
+ });
137
+ }
138
+
139
+ // Parse forbidDebugger setting
140
+ const forbidDebuggerMatch = cerberContent.match(/forbidDebugger:\s*(true|false)/);
141
+ if (forbidDebuggerMatch && forbidDebuggerMatch[1] === 'true') {
142
+ forbiddenPatterns.push({
143
+ pattern: '\\bdebugger\\b',
144
+ name: 'Forbidden: debugger statements',
145
+ severity: 'error'
146
+ });
147
+ }
148
+
129
149
  if (schemaMode === 'required' && forbiddenPatterns.length === 0) {
130
150
  console.error('❌ SCHEMA.mode: required but no rules defined');
131
151
  console.error('Add forbiddenPatterns to SCHEMA section in CERBER.md');