@greenarmor/ges 0.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.
Files changed (51) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +74 -0
  3. package/dist/cli.d.ts +2 -0
  4. package/dist/cli.js +34 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/commands/audit.d.ts +2 -0
  7. package/dist/commands/audit.js +107 -0
  8. package/dist/commands/audit.js.map +1 -0
  9. package/dist/commands/compliance.d.ts +2 -0
  10. package/dist/commands/compliance.js +32 -0
  11. package/dist/commands/compliance.js.map +1 -0
  12. package/dist/commands/doctor.d.ts +2 -0
  13. package/dist/commands/doctor.js +60 -0
  14. package/dist/commands/doctor.js.map +1 -0
  15. package/dist/commands/generate.d.ts +2 -0
  16. package/dist/commands/generate.js +47 -0
  17. package/dist/commands/generate.js.map +1 -0
  18. package/dist/commands/init.d.ts +2 -0
  19. package/dist/commands/init.js +112 -0
  20. package/dist/commands/init.js.map +1 -0
  21. package/dist/commands/mcp-setup.d.ts +2 -0
  22. package/dist/commands/mcp-setup.js +206 -0
  23. package/dist/commands/mcp-setup.js.map +1 -0
  24. package/dist/commands/mcp.d.ts +2 -0
  25. package/dist/commands/mcp.js +50 -0
  26. package/dist/commands/mcp.js.map +1 -0
  27. package/dist/commands/policy.d.ts +2 -0
  28. package/dist/commands/policy.js +50 -0
  29. package/dist/commands/policy.js.map +1 -0
  30. package/dist/commands/report.d.ts +2 -0
  31. package/dist/commands/report.js +51 -0
  32. package/dist/commands/report.js.map +1 -0
  33. package/dist/commands/scan.d.ts +2 -0
  34. package/dist/commands/scan.js +19 -0
  35. package/dist/commands/scan.js.map +1 -0
  36. package/dist/commands/score.d.ts +2 -0
  37. package/dist/commands/score.js +33 -0
  38. package/dist/commands/score.js.map +1 -0
  39. package/dist/commands/update.d.ts +2 -0
  40. package/dist/commands/update.js +9 -0
  41. package/dist/commands/update.js.map +1 -0
  42. package/dist/commands/validate.d.ts +2 -0
  43. package/dist/commands/validate.js +63 -0
  44. package/dist/commands/validate.js.map +1 -0
  45. package/dist/index.d.ts +1 -0
  46. package/dist/index.js +2 -0
  47. package/dist/index.js.map +1 -0
  48. package/dist/utils/project.d.ts +6 -0
  49. package/dist/utils/project.js +41 -0
  50. package/dist/utils/project.js.map +1 -0
  51. package/package.json +60 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 greenarmor
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,74 @@
1
+ # @greenarmor/ges
2
+
3
+ Green Engineering Standard Framework - Compliance-as-Code CLI
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ npm install -g @greenarmor/ges
9
+ ```
10
+
11
+ Or use without installing:
12
+
13
+ ```bash
14
+ npx @greenarmor/ges init
15
+ ```
16
+
17
+ ## Quick Start
18
+
19
+ ```bash
20
+ # Navigate to any project
21
+ cd my-project
22
+
23
+ # Initialize compliance framework
24
+ ges init
25
+
26
+ # Run security and compliance audit
27
+ ges audit
28
+
29
+ # View compliance score
30
+ ges score
31
+
32
+ # Generate reports
33
+ ges report
34
+
35
+ # Diagnose configuration
36
+ ges doctor
37
+ ```
38
+
39
+ ## Commands
40
+
41
+ | Command | Description |
42
+ |---------|-------------|
43
+ | `ges init` | Initialize GESF in the current project |
44
+ | `ges audit` | Scan source code for security and compliance issues |
45
+ | `ges score` | Calculate and display compliance score |
46
+ | `ges report` | Generate compliance reports (Markdown/HTML) |
47
+ | `ges doctor` | Diagnose GESF configuration and health |
48
+ | `ges scan` | Run external security scanners |
49
+ | `ges compliance` | Show compliance status and installed packs |
50
+ | `ges validate` | Validate GESF configuration |
51
+ | `ges generate` | Regenerate documentation and workflows |
52
+ | `ges policy list` | List available policy packs |
53
+ | `ges policy install <pack>` | Install a policy pack |
54
+ | `ges policy remove <pack>` | Remove a policy pack |
55
+ | `ges update` | Check for updates |
56
+
57
+ ## What It Detects
58
+
59
+ - **Secrets**: Hardcoded passwords, API keys, connection strings, private keys, tokens
60
+ - **Weak Crypto**: MD5, SHA1, DES, AES-128, disabled TLS verification
61
+ - **SQL Injection**: String concatenation in SQL queries with user input
62
+ - **XSS**: innerHTML with user input, document.write, v-html, dangerouslySetInnerHTML
63
+ - **Missing Auth**: Routes without authentication middleware
64
+ - **Missing Security**: No helmet, no CORS config, no rate limiting, no MFA
65
+ - **Config Issues**: Secrets in .env without .gitignore, Docker as root, missing logging
66
+ - **Database Issues**: Missing audit columns, missing soft delete patterns
67
+
68
+ ## Supported Project Types
69
+
70
+ SaaS, AI Application, MCP Server, Blockchain, Wallet, Government System, Healthcare System, Event Platform, Photo Storage Platform, Vulnerability Scanner, Generic Web Application, API Backend, Mobile Application
71
+
72
+ ## Compliance Frameworks
73
+
74
+ GDPR, OWASP ASVS, CIS Controls, NIST CSF, ISO 27001, ISO 27701
package/dist/cli.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
package/dist/cli.js ADDED
@@ -0,0 +1,34 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from "commander";
3
+ import { initCommand } from "./commands/init.js";
4
+ import { auditCommand } from "./commands/audit.js";
5
+ import { scoreCommand } from "./commands/score.js";
6
+ import { reportCommand } from "./commands/report.js";
7
+ import { doctorCommand } from "./commands/doctor.js";
8
+ import { scanCommand } from "./commands/scan.js";
9
+ import { complianceCommand } from "./commands/compliance.js";
10
+ import { validateCommand } from "./commands/validate.js";
11
+ import { generateCommand } from "./commands/generate.js";
12
+ import { policyCommand } from "./commands/policy.js";
13
+ import { updateCommand } from "./commands/update.js";
14
+ import { mcpCommand } from "./commands/mcp.js";
15
+ import { GESF_VERSION } from "@greenarmor/ges-core";
16
+ const program = new Command();
17
+ program
18
+ .name("ges")
19
+ .description("Green Engineering Standard Framework - Compliance-as-Code CLI")
20
+ .version(GESF_VERSION);
21
+ program.addCommand(initCommand);
22
+ program.addCommand(auditCommand);
23
+ program.addCommand(scoreCommand);
24
+ program.addCommand(reportCommand);
25
+ program.addCommand(doctorCommand);
26
+ program.addCommand(scanCommand);
27
+ program.addCommand(complianceCommand);
28
+ program.addCommand(validateCommand);
29
+ program.addCommand(generateCommand);
30
+ program.addCommand(policyCommand);
31
+ program.addCommand(updateCommand);
32
+ program.addCommand(mcpCommand);
33
+ program.parse();
34
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,KAAK,CAAC;KACX,WAAW,CAAC,+DAA+D,CAAC;KAC5E,OAAO,CAAC,YAAY,CAAC,CAAC;AAEzB,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;AACtC,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AAE/B,OAAO,CAAC,KAAK,EAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { Command } from "commander";
2
+ export declare const auditCommand: Command;
@@ -0,0 +1,107 @@
1
+ import { Command } from "commander";
2
+ import { ensureGESInitialized, readJsonFile, writeJsonFile } from "../utils/project.js";
3
+ import { getAllPacks } from "@greenarmor/ges-policy-engine";
4
+ import { generateScoreFile, formatScoreOutput } from "@greenarmor/ges-scoring-engine";
5
+ import { runAudit, deduplicateFindings } from "@greenarmor/ges-audit-engine";
6
+ import * as path from "node:path";
7
+ export const auditCommand = new Command("audit")
8
+ .description("Run a compliance audit on the project")
9
+ .option("--ci", "CI mode - exit with error code on failures")
10
+ .option("--json", "Output findings as JSON")
11
+ .action(async (options) => {
12
+ const root = ensureGESInitialized();
13
+ const config = readJsonFile(path.join(root, ".ges", "config.json"));
14
+ console.log("\n GESF Compliance Audit");
15
+ console.log(" ────────────────────\n");
16
+ console.log(" Scanning project files...");
17
+ const { findings: rawFindings, scannedFiles } = runAudit(root);
18
+ const findings = deduplicateFindings(rawFindings);
19
+ console.log(` Scanned ${scannedFiles} files\n`);
20
+ const frameworks = (config?.frameworks || ["GDPR", "OWASP"]);
21
+ const controls = getAllPacks().flatMap(p => p.controls);
22
+ const updatedControls = updateControlsFromFindings(controls, findings);
23
+ const scoreData = generateScoreFile(updatedControls, frameworks);
24
+ writeJsonFile(path.join(root, ".ges", "score.json"), scoreData);
25
+ const critical = findings.filter(f => f.severity === "critical");
26
+ const high = findings.filter(f => f.severity === "high");
27
+ const medium = findings.filter(f => f.severity === "medium");
28
+ const low = findings.filter(f => f.severity === "low");
29
+ if (options.json) {
30
+ console.log(JSON.stringify({ findings, score: scoreData }, null, 2));
31
+ if (options.ci && critical.length > 0)
32
+ process.exit(1);
33
+ return;
34
+ }
35
+ console.log(" ── Findings ─────────────────────\n");
36
+ console.log(` Total findings: ${findings.length}`);
37
+ console.log(` Critical: ${critical.length} High: ${high.length} Medium: ${medium.length} Low: ${low.length}\n`);
38
+ if (findings.length > 0) {
39
+ const grouped = groupByCategory(findings);
40
+ for (const [category, categoryFindings] of Object.entries(grouped)) {
41
+ console.log(` [${category.toUpperCase()}]`);
42
+ for (const f of categoryFindings.slice(0, 10)) {
43
+ const sev = f.severity === "critical" ? "CRIT" : f.severity === "high" ? "HIGH" : f.severity === "medium" ? "MED " : "LOW ";
44
+ const loc = f.file !== "project" ? ` (${f.file}${f.line ? ":" + f.line : ""})` : "";
45
+ console.log(` [${sev}] ${f.title}${loc}`);
46
+ if (f.evidence && f.file !== "project") {
47
+ console.log(` ${f.evidence.slice(0, 100)}`);
48
+ }
49
+ }
50
+ if (categoryFindings.length > 10) {
51
+ console.log(` ... and ${categoryFindings.length - 10} more`);
52
+ }
53
+ console.log("");
54
+ }
55
+ }
56
+ else {
57
+ console.log(" ✓ No security or compliance issues found in source code.\n");
58
+ }
59
+ console.log(" ── Compliance Score ──────────────");
60
+ console.log(formatScoreOutput(scoreData));
61
+ if (critical.length > 0) {
62
+ console.log(" !! Critical issues must be resolved before deployment. !!\n");
63
+ }
64
+ if (options.ci && critical.length > 0) {
65
+ process.exit(1);
66
+ }
67
+ });
68
+ function updateControlsFromFindings(controls, findings) {
69
+ return controls.map(control => {
70
+ const relevantFindings = findings.filter(f => f.controlIds.includes(control.id));
71
+ if (relevantFindings.length === 0)
72
+ return control;
73
+ const hasCritical = relevantFindings.some(f => f.severity === "critical" || f.severity === "high");
74
+ const updatedChecks = control.checks.map(check => {
75
+ if (hasCritical) {
76
+ return { ...check, status: "fail" };
77
+ }
78
+ return { ...check, status: "warning" };
79
+ });
80
+ return {
81
+ ...control,
82
+ checks: updatedChecks,
83
+ status: hasCritical ? "fail" : "warning",
84
+ };
85
+ });
86
+ }
87
+ function groupByCategory(findings) {
88
+ const groups = {};
89
+ for (const f of findings) {
90
+ const cat = f.category;
91
+ if (!groups[cat])
92
+ groups[cat] = [];
93
+ groups[cat].push(f);
94
+ }
95
+ const order = ["secrets", "authentication", "encryption", "injection", "xss", "security", "database", "config", "infrastructure", "dependencies"];
96
+ const sorted = {};
97
+ for (const cat of order) {
98
+ if (groups[cat])
99
+ sorted[cat] = groups[cat];
100
+ }
101
+ for (const [cat, items] of Object.entries(groups)) {
102
+ if (!sorted[cat])
103
+ sorted[cat] = items;
104
+ }
105
+ return sorted;
106
+ }
107
+ //# sourceMappingURL=audit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/commands/audit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { Command } from "commander";
2
+ export declare const complianceCommand: Command;
@@ -0,0 +1,32 @@
1
+ import { Command } from "commander";
2
+ import { ensureGESInitialized, readJsonFile } from "../utils/project.js";
3
+ import { getPacksForProjectType } from "@greenarmor/ges-policy-engine";
4
+ import { formatScoreOutput } from "@greenarmor/ges-scoring-engine";
5
+ import * as path from "node:path";
6
+ export const complianceCommand = new Command("compliance")
7
+ .description("Show compliance status")
8
+ .action(async () => {
9
+ const root = ensureGESInitialized();
10
+ const scorePath = path.join(root, ".ges", "score.json");
11
+ const score = readJsonFile(scorePath);
12
+ if (score && score.frameworks && Object.keys(score.frameworks).length > 0) {
13
+ console.log(formatScoreOutput(score));
14
+ }
15
+ else {
16
+ console.log("\n No compliance score available. Run 'ges audit' first.\n");
17
+ }
18
+ const config = readJsonFile(path.join(root, ".ges", "config.json"));
19
+ if (config) {
20
+ console.log(" Installed Policy Packs:");
21
+ const packs = getPacksForProjectType(config.project_type);
22
+ for (const pack of packs) {
23
+ const controlsFile = path.join(root, "controls", pack.id, "controls.json");
24
+ const controls = readJsonFile(controlsFile);
25
+ const total = controls?.length || 0;
26
+ const passed = controls?.filter(c => c.status === "pass").length || 0;
27
+ console.log(` ${pack.id.padEnd(15)} ${passed}/${total} controls passed`);
28
+ }
29
+ }
30
+ console.log("");
31
+ });
32
+ //# sourceMappingURL=compliance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compliance.js","sourceRoot":"","sources":["../../src/commands/compliance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAGnE,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,OAAO,CAAC,YAAY,CAAC;KACvD,WAAW,CAAC,wBAAwB,CAAC;KACrC,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,IAAI,GAAG,oBAAoB,EAAE,CAAC;IAEpC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;IACxD,MAAM,KAAK,GAAG,YAAY,CAAY,SAAS,CAAC,CAAC;IAEjD,IAAI,KAAK,IAAI,KAAK,CAAC,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1E,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;IACxC,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,6DAA6D,CAAC,CAAC;IAC7E,CAAC;IAED,MAAM,MAAM,GAAG,YAAY,CAAgB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC;IACnF,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;QACzC,MAAM,KAAK,GAAG,sBAAsB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC1D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,EAAE,eAAe,CAAC,CAAC;YAC3E,MAAM,QAAQ,GAAG,YAAY,CAAY,YAAY,CAAC,CAAC;YACvD,MAAM,KAAK,GAAG,QAAQ,EAAE,MAAM,IAAI,CAAC,CAAC;YACpC,MAAM,MAAM,GAAG,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC;YACtE,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,MAAM,IAAI,KAAK,kBAAkB,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { Command } from "commander";
2
+ export declare const doctorCommand: Command;
@@ -0,0 +1,60 @@
1
+ import { Command } from "commander";
2
+ import { findProjectRoot, readJsonFile } from "../utils/project.js";
3
+ import { GESF_VERSION, GES_DIR } from "@greenarmor/ges-core";
4
+ import * as fs from "node:fs";
5
+ import * as path from "node:path";
6
+ export const doctorCommand = new Command("doctor")
7
+ .description("Diagnose GESF configuration and health")
8
+ .action(async () => {
9
+ console.log("\n GESF Doctor - Diagnostic Check");
10
+ console.log(" ─────────────────────────────\n");
11
+ const checks = [];
12
+ const root = findProjectRoot();
13
+ if (root) {
14
+ checks.push({ name: "GESF initialized", status: "OK", detail: root });
15
+ }
16
+ else {
17
+ checks.push({ name: "GESF initialized", status: "FAIL", detail: "Run 'ges init' first" });
18
+ }
19
+ if (root) {
20
+ const configPath = path.join(root, GES_DIR, "config.yaml");
21
+ checks.push({
22
+ name: "Config file",
23
+ status: fs.existsSync(configPath) ? "OK" : "WARN",
24
+ detail: fs.existsSync(configPath) ? configPath : "config.yaml not found",
25
+ });
26
+ const scorePath = path.join(root, GES_DIR, "score.json");
27
+ const score = readJsonFile(scorePath);
28
+ checks.push({
29
+ name: "Score file",
30
+ status: score ? "OK" : "WARN",
31
+ detail: score ? `Overall: ${score.overall}%` : "Run 'ges score'",
32
+ });
33
+ const dirs = ["compliance", "security", "controls", "policies", "checklists", "docs", "reports"];
34
+ for (const dir of dirs) {
35
+ const exists = fs.existsSync(path.join(root, dir));
36
+ checks.push({ name: `${dir}/ directory`, status: exists ? "OK" : "MISSING" });
37
+ }
38
+ const ghWorkflows = path.join(root, ".github", "workflows");
39
+ if (fs.existsSync(ghWorkflows)) {
40
+ const workflows = fs.readdirSync(ghWorkflows).filter(f => f.endsWith(".yml"));
41
+ checks.push({ name: "GitHub Actions", status: "OK", detail: `${workflows.length} workflow(s)` });
42
+ }
43
+ else {
44
+ checks.push({ name: "GitHub Actions", status: "WARN", detail: "No .github/workflows found" });
45
+ }
46
+ const config = readJsonFile(path.join(root, GES_DIR, "config.json"));
47
+ if (config) {
48
+ checks.push({ name: "Project", status: "OK", detail: `${config.project_name} (${config.project_type})` });
49
+ checks.push({ name: "Frameworks", status: "OK", detail: config.frameworks.join(", ") });
50
+ }
51
+ }
52
+ checks.push({ name: "GESF Version", status: "OK", detail: GESF_VERSION });
53
+ for (const check of checks) {
54
+ const icon = check.status === "OK" ? "✓" : check.status === "WARN" ? "!" : "✗";
55
+ const line = ` [${icon}] ${check.name}`;
56
+ console.log(line + (check.detail ? ` - ${check.detail}` : ""));
57
+ }
58
+ console.log("");
59
+ });
60
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { Command } from "commander";
2
+ export declare const generateCommand: Command;
@@ -0,0 +1,47 @@
1
+ import { Command } from "commander";
2
+ import { ensureGESInitialized, readJsonFile, writeFileSync } from "../utils/project.js";
3
+ import { generateComplianceDocs, generateSecurityDocs } from "@greenarmor/ges-doc-generator";
4
+ import { generateAllWorkflows } from "@greenarmor/ges-cicd-generator";
5
+ import * as path from "node:path";
6
+ export const generateCommand = new Command("generate")
7
+ .description("Regenerate documentation and workflows")
8
+ .option("--docs", "Regenerate documentation")
9
+ .option("--workflows", "Regenerate GitHub Actions workflows")
10
+ .option("--all", "Regenerate everything")
11
+ .action(async (options) => {
12
+ const root = ensureGESInitialized();
13
+ const config = readJsonFile(path.join(".ges", "config.json"));
14
+ if (!config) {
15
+ console.error(" Error: Could not read configuration.");
16
+ process.exit(1);
17
+ }
18
+ const doDocs = options.docs || options.all;
19
+ const doWorkflows = options.workflows || options.all;
20
+ if (!doDocs && !doWorkflows) {
21
+ console.log(" Specify --docs, --workflows, or --all");
22
+ return;
23
+ }
24
+ if (doDocs) {
25
+ console.log(" Generating compliance documents...");
26
+ const complianceDocs = generateComplianceDocs(config.project_name, config.project_type);
27
+ for (const doc of complianceDocs) {
28
+ writeFileSync(path.join(root, doc.filePath), doc.content);
29
+ }
30
+ console.log(" Generating security documents...");
31
+ const securityDocs = generateSecurityDocs(config.project_name, config.project_type);
32
+ for (const doc of securityDocs) {
33
+ writeFileSync(path.join(root, doc.filePath), doc.content);
34
+ }
35
+ console.log(" ✓ Documents generated");
36
+ }
37
+ if (doWorkflows) {
38
+ console.log(" Generating GitHub Actions workflows...");
39
+ const workflows = generateAllWorkflows(config);
40
+ for (const wf of workflows) {
41
+ writeFileSync(path.join(root, wf.filePath), wf.content);
42
+ }
43
+ console.log(" ✓ Workflows generated");
44
+ }
45
+ console.log("");
46
+ });
47
+ //# sourceMappingURL=generate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAExF,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAC7F,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC;KACnD,WAAW,CAAC,wCAAwC,CAAC;KACrD,MAAM,CAAC,QAAQ,EAAE,0BAA0B,CAAC;KAC5C,MAAM,CAAC,aAAa,EAAE,qCAAqC,CAAC;KAC5D,MAAM,CAAC,OAAO,EAAE,uBAAuB,CAAC;KACxC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,MAAM,IAAI,GAAG,oBAAoB,EAAE,CAAC;IACpC,MAAM,MAAM,GAAG,YAAY,CAAgB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC;IAE7E,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;QACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC;IAC3C,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC;IAErD,IAAI,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;QACvD,OAAO;IACT,CAAC;IAED,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;QACpD,MAAM,cAAc,GAAG,sBAAsB,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;QACxF,KAAK,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;YACjC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QAC5D,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;QAClD,MAAM,YAAY,GAAG,oBAAoB,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;QACpF,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;YAC/B,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QAC5D,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;IACzC,CAAC;IAED,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;QACxD,MAAM,SAAS,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;QAC/C,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;YAC3B,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC;QAC1D,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;IACzC,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { Command } from "commander";
2
+ export declare const initCommand: Command;
@@ -0,0 +1,112 @@
1
+ import { Command } from "commander";
2
+ import { input, select, checkbox } from "@inquirer/prompts";
3
+ import { PROJECT_TYPES, FRAMEWORKS, DEFAULT_FRAMEWORKS, GESF_VERSION, GES_DIR, COMPLIANCE_DIR, SECURITY_DIR, CONTROLS_DIR, POLICIES_DIR, CHECKLISTS_DIR, DOCS_DIR, REPORTS_DIR, } from "@greenarmor/ges-core";
4
+ import { getPacksForProjectType } from "@greenarmor/ges-policy-engine";
5
+ import { generateComplianceDocs, generateSecurityDocs, generateConfigYaml, generateConfigJson, generateMetadataJson, generateFrameworkVersionJson, generateScoreJson, } from "@greenarmor/ges-doc-generator";
6
+ import { generateAllWorkflows } from "@greenarmor/ges-cicd-generator";
7
+ import { writeFileSync } from "../utils/project.js";
8
+ import * as fs from "node:fs";
9
+ import * as path from "node:path";
10
+ export const initCommand = new Command("init")
11
+ .description("Initialize GESF in the current project")
12
+ .option("-n, --name <name>", "Project name")
13
+ .option("-t, --type <type>", "Project type")
14
+ .option("-f, --frameworks <frameworks>", "Comma-separated frameworks")
15
+ .action(async (options) => {
16
+ console.log("\n Green Engineering Standard Framework (GESF) v" + GESF_VERSION);
17
+ console.log(" ─────────────────────────────────────────────\n");
18
+ if (fs.existsSync(path.join(process.cwd(), GES_DIR))) {
19
+ console.error(" Error: GESF is already initialized in this project.");
20
+ process.exit(1);
21
+ }
22
+ const projectName = options.name || await input({ message: "Project name:", default: path.basename(process.cwd()) });
23
+ const projectType = options.type
24
+ ? options.type
25
+ : await select({
26
+ message: "Select project type:",
27
+ choices: PROJECT_TYPES.map(t => ({ value: t.value, name: t.label })),
28
+ });
29
+ const selectedFrameworks = options.frameworks
30
+ ? options.frameworks.split(",").map((f) => f.trim())
31
+ : await checkbox({
32
+ message: "Select compliance frameworks:",
33
+ choices: FRAMEWORKS.map(f => ({
34
+ value: f.value,
35
+ name: f.label,
36
+ checked: DEFAULT_FRAMEWORKS.includes(f.value),
37
+ })),
38
+ });
39
+ if (selectedFrameworks.length === 0) {
40
+ console.error(" Error: At least one framework must be selected.");
41
+ process.exit(1);
42
+ }
43
+ const now = new Date().toISOString();
44
+ const config = {
45
+ project_name: projectName,
46
+ project_type: projectType,
47
+ frameworks: selectedFrameworks,
48
+ requirements: {
49
+ encryption: { required: true, level: "mandatory" },
50
+ mfa: { required: true, level: "mandatory" },
51
+ audit_logs: { required: true, level: "mandatory" },
52
+ backups: { required: true, level: "mandatory" },
53
+ retention_policy: { required: true, level: "mandatory" },
54
+ vulnerability_scanning: { required: true, level: "mandatory" },
55
+ authentication: { required: true, level: "mandatory" },
56
+ authorization: { required: true, level: "mandatory" },
57
+ secrets_management: { required: true, level: "mandatory" },
58
+ logging: { required: true, level: "mandatory" },
59
+ monitoring: { required: true, level: "recommended" },
60
+ data_classification: { required: true, level: "mandatory" },
61
+ disaster_recovery: { required: true, level: "mandatory" },
62
+ incident_response: { required: true, level: "mandatory" },
63
+ privacy_controls: { required: true, level: "mandatory" },
64
+ },
65
+ created_at: now,
66
+ version: GESF_VERSION,
67
+ };
68
+ const dirs = [GES_DIR, COMPLIANCE_DIR, SECURITY_DIR, CONTROLS_DIR, POLICIES_DIR, CHECKLISTS_DIR, DOCS_DIR, REPORTS_DIR];
69
+ for (const dir of dirs) {
70
+ fs.mkdirSync(path.join(process.cwd(), dir), { recursive: true });
71
+ }
72
+ const configYaml = generateConfigYaml(config);
73
+ writeFileSync(path.join(process.cwd(), configYaml.filePath), configYaml.content);
74
+ const configJson = generateConfigJson(config);
75
+ writeFileSync(path.join(process.cwd(), configJson.filePath), configJson.content);
76
+ const metadata = generateMetadataJson(config);
77
+ writeFileSync(path.join(process.cwd(), metadata.filePath), metadata.content);
78
+ const fwVersion = generateFrameworkVersionJson();
79
+ writeFileSync(path.join(process.cwd(), fwVersion.filePath), fwVersion.content);
80
+ const scoreFile = generateScoreJson();
81
+ writeFileSync(path.join(process.cwd(), scoreFile.filePath), scoreFile.content);
82
+ const complianceDocs = generateComplianceDocs(projectName, projectType);
83
+ for (const doc of complianceDocs) {
84
+ writeFileSync(path.join(process.cwd(), doc.filePath), doc.content);
85
+ }
86
+ const securityDocs = generateSecurityDocs(projectName, projectType);
87
+ for (const doc of securityDocs) {
88
+ writeFileSync(path.join(process.cwd(), doc.filePath), doc.content);
89
+ }
90
+ const packs = getPacksForProjectType(projectType);
91
+ for (const pack of packs) {
92
+ const packDir = path.join(process.cwd(), CONTROLS_DIR, pack.id);
93
+ fs.mkdirSync(packDir, { recursive: true });
94
+ writeFileSync(path.join(packDir, "controls.json"), JSON.stringify(pack.controls, null, 2));
95
+ }
96
+ const workflows = generateAllWorkflows(config);
97
+ for (const wf of workflows) {
98
+ writeFileSync(path.join(process.cwd(), wf.filePath), wf.content);
99
+ }
100
+ console.log(" ✓ Project structure created");
101
+ console.log(" ✓ Configuration files generated");
102
+ console.log(" ✓ Compliance documents created");
103
+ console.log(" ✓ Security documents created");
104
+ console.log(" ✓ Control packs installed:", packs.map(p => p.id).join(", "));
105
+ console.log(" ✓ GitHub Actions workflows generated");
106
+ console.log(`\n GESF initialized for "${projectName}" (${projectType})`);
107
+ console.log("\n Next steps:");
108
+ console.log(" 1. Review generated compliance documents");
109
+ console.log(" 2. Run 'ges audit' to evaluate your project");
110
+ console.log(" 3. Run 'ges score' to see your compliance score\n");
111
+ });
112
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { Command } from "commander";
2
+ export declare const mcpSetupCommand: Command;