@evolith/smart-cli 0.0.1-beta
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/ARCHITECTURE.md +121 -0
- package/README.es.md +425 -0
- package/README.md +419 -0
- package/dist/app.module.d.ts +2 -0
- package/dist/app.module.js +59 -0
- package/dist/app.module.js.map +1 -0
- package/dist/application/services/index.d.ts +54 -0
- package/dist/application/services/index.js +307 -0
- package/dist/application/services/index.js.map +1 -0
- package/dist/application/services/services.test.d.ts +1 -0
- package/dist/application/services/services.test.js +176 -0
- package/dist/application/services/services.test.js.map +1 -0
- package/dist/application/use-cases/validate-satellite.use-case.d.ts +18 -0
- package/dist/application/use-cases/validate-satellite.use-case.js +92 -0
- package/dist/application/use-cases/validate-satellite.use-case.js.map +1 -0
- package/dist/application/use-cases/validate-satellite.use-case.spec.d.ts +1 -0
- package/dist/application/use-cases/validate-satellite.use-case.spec.js +102 -0
- package/dist/application/use-cases/validate-satellite.use-case.spec.js.map +1 -0
- package/dist/commands/adr/adr.command.d.ts +28 -0
- package/dist/commands/adr/adr.command.js +357 -0
- package/dist/commands/adr/adr.command.js.map +1 -0
- package/dist/commands/architecture/scaffold.command.d.ts +7 -0
- package/dist/commands/architecture/scaffold.command.js +162 -0
- package/dist/commands/architecture/scaffold.command.js.map +1 -0
- package/dist/commands/commands.test.d.ts +1 -0
- package/dist/commands/commands.test.js +131 -0
- package/dist/commands/commands.test.js.map +1 -0
- package/dist/commands/completion/completion.command.d.ts +20 -0
- package/dist/commands/completion/completion.command.js +215 -0
- package/dist/commands/completion/completion.command.js.map +1 -0
- package/dist/commands/docs/docs.command.d.ts +9 -0
- package/dist/commands/docs/docs.command.js +77 -0
- package/dist/commands/docs/docs.command.js.map +1 -0
- package/dist/commands/history/history.command.d.ts +29 -0
- package/dist/commands/history/history.command.js +268 -0
- package/dist/commands/history/history.command.js.map +1 -0
- package/dist/commands/init/agents.command.d.ts +22 -0
- package/dist/commands/init/agents.command.js +502 -0
- package/dist/commands/init/agents.command.js.map +1 -0
- package/dist/commands/init/init.command.d.ts +20 -0
- package/dist/commands/init/init.command.js +329 -0
- package/dist/commands/init/init.command.js.map +1 -0
- package/dist/commands/init/upgrade.command.d.ts +9 -0
- package/dist/commands/init/upgrade.command.js +77 -0
- package/dist/commands/init/upgrade.command.js.map +1 -0
- package/dist/commands/mcp/mcp-serve.command.d.ts +15 -0
- package/dist/commands/mcp/mcp-serve.command.js +106 -0
- package/dist/commands/mcp/mcp-serve.command.js.map +1 -0
- package/dist/commands/sdlc/generate-domain.command.d.ts +5 -0
- package/dist/commands/sdlc/generate-domain.command.js +55 -0
- package/dist/commands/sdlc/generate-domain.command.js.map +1 -0
- package/dist/commands/sdlc/handoff.command.d.ts +22 -0
- package/dist/commands/sdlc/handoff.command.js +273 -0
- package/dist/commands/sdlc/handoff.command.js.map +1 -0
- package/dist/commands/sdlc/sdlc.command.d.ts +4 -0
- package/dist/commands/sdlc/sdlc.command.js +34 -0
- package/dist/commands/sdlc/sdlc.command.js.map +1 -0
- package/dist/commands/standards/standards.command.d.ts +27 -0
- package/dist/commands/standards/standards.command.js +308 -0
- package/dist/commands/standards/standards.command.js.map +1 -0
- package/dist/commands/validate/validate.command.d.ts +19 -0
- package/dist/commands/validate/validate.command.js +231 -0
- package/dist/commands/validate/validate.command.js.map +1 -0
- package/dist/config/runtimes.json +196 -0
- package/dist/config/tool-catalog.json +343 -0
- package/dist/core/abstractions/index.d.ts +6 -0
- package/dist/core/abstractions/index.js +23 -0
- package/dist/core/abstractions/index.js.map +1 -0
- package/dist/core/abstractions/interfaces.d.ts +60 -0
- package/dist/core/abstractions/interfaces.js +5 -0
- package/dist/core/abstractions/interfaces.js.map +1 -0
- package/dist/core/abstractions/providers/config-parser.provider.d.ts +15 -0
- package/dist/core/abstractions/providers/config-parser.provider.js +68 -0
- package/dist/core/abstractions/providers/config-parser.provider.js.map +1 -0
- package/dist/core/abstractions/providers/logger.provider.d.ts +10 -0
- package/dist/core/abstractions/providers/logger.provider.js +84 -0
- package/dist/core/abstractions/providers/logger.provider.js.map +1 -0
- package/dist/core/abstractions/providers/mock-filesystem.provider.d.ts +30 -0
- package/dist/core/abstractions/providers/mock-filesystem.provider.js +122 -0
- package/dist/core/abstractions/providers/mock-filesystem.provider.js.map +1 -0
- package/dist/core/abstractions/providers/node-filesystem.provider.d.ts +19 -0
- package/dist/core/abstractions/providers/node-filesystem.provider.js +104 -0
- package/dist/core/abstractions/providers/node-filesystem.provider.js.map +1 -0
- package/dist/core/architecture/nx-workspace.strategy.d.ts +11 -0
- package/dist/core/architecture/nx-workspace.strategy.js +107 -0
- package/dist/core/architecture/nx-workspace.strategy.js.map +1 -0
- package/dist/core/architecture/workspace-manager.strategy.d.ts +7 -0
- package/dist/core/architecture/workspace-manager.strategy.js +3 -0
- package/dist/core/architecture/workspace-manager.strategy.js.map +1 -0
- package/dist/core/config/config.service.d.ts +15 -0
- package/dist/core/config/config.service.js +55 -0
- package/dist/core/config/config.service.js.map +1 -0
- package/dist/core/config/config.service.spec.d.ts +1 -0
- package/dist/core/config/config.service.spec.js +43 -0
- package/dist/core/config/config.service.spec.js.map +1 -0
- package/dist/core/di/container.d.ts +25 -0
- package/dist/core/di/container.js +87 -0
- package/dist/core/di/container.js.map +1 -0
- package/dist/core/di/container.spec.d.ts +1 -0
- package/dist/core/di/container.spec.js +137 -0
- package/dist/core/di/container.spec.js.map +1 -0
- package/dist/core/errors/index.d.ts +26 -0
- package/dist/core/errors/index.js +67 -0
- package/dist/core/errors/index.js.map +1 -0
- package/dist/core/filesystem/file-manager.service.d.ts +4 -0
- package/dist/core/filesystem/file-manager.service.js +96 -0
- package/dist/core/filesystem/file-manager.service.js.map +1 -0
- package/dist/core/filesystem/file-manager.service.spec.d.ts +1 -0
- package/dist/core/filesystem/file-manager.service.spec.js +103 -0
- package/dist/core/filesystem/file-manager.service.spec.js.map +1 -0
- package/dist/core/mcp/mcp-server.service.d.ts +7 -0
- package/dist/core/mcp/mcp-server.service.js +31 -0
- package/dist/core/mcp/mcp-server.service.js.map +1 -0
- package/dist/core/mcp/metrics.service.d.ts +37 -0
- package/dist/core/mcp/metrics.service.js +72 -0
- package/dist/core/mcp/metrics.service.js.map +1 -0
- package/dist/core/mcp/prompts/index.d.ts +22 -0
- package/dist/core/mcp/prompts/index.js +175 -0
- package/dist/core/mcp/prompts/index.js.map +1 -0
- package/dist/core/mcp/resources/index.d.ts +11 -0
- package/dist/core/mcp/resources/index.js +193 -0
- package/dist/core/mcp/resources/index.js.map +1 -0
- package/dist/core/mcp/server.d.ts +25 -0
- package/dist/core/mcp/server.js +413 -0
- package/dist/core/mcp/server.js.map +1 -0
- package/dist/core/mcp/tools/agent.d.ts +41 -0
- package/dist/core/mcp/tools/agent.js +195 -0
- package/dist/core/mcp/tools/agent.js.map +1 -0
- package/dist/core/mcp/tools/architecture.d.ts +27 -0
- package/dist/core/mcp/tools/architecture.js +166 -0
- package/dist/core/mcp/tools/architecture.js.map +1 -0
- package/dist/core/mcp/tools/sdlc.d.ts +32 -0
- package/dist/core/mcp/tools/sdlc.js +189 -0
- package/dist/core/mcp/tools/sdlc.js.map +1 -0
- package/dist/core/mcp/tools/tool-utils.d.ts +4 -0
- package/dist/core/mcp/tools/tool-utils.js +18 -0
- package/dist/core/mcp/tools/tool-utils.js.map +1 -0
- package/dist/core/mcp/tools/validate.d.ts +18 -0
- package/dist/core/mcp/tools/validate.js +56 -0
- package/dist/core/mcp/tools/validate.js.map +1 -0
- package/dist/core/mcp/watcher.service.d.ts +8 -0
- package/dist/core/mcp/watcher.service.js +82 -0
- package/dist/core/mcp/watcher.service.js.map +1 -0
- package/dist/core/mcp/watcher.service.spec.d.ts +1 -0
- package/dist/core/mcp/watcher.service.spec.js +70 -0
- package/dist/core/mcp/watcher.service.spec.js.map +1 -0
- package/dist/core/observability/command-watcher.d.ts +45 -0
- package/dist/core/observability/command-watcher.js +168 -0
- package/dist/core/observability/command-watcher.js.map +1 -0
- package/dist/core/observability/error-reporter.d.ts +47 -0
- package/dist/core/observability/error-reporter.js +163 -0
- package/dist/core/observability/error-reporter.js.map +1 -0
- package/dist/core/observability/index.d.ts +4 -0
- package/dist/core/observability/index.js +24 -0
- package/dist/core/observability/index.js.map +1 -0
- package/dist/core/observability/observability.test.d.ts +1 -0
- package/dist/core/observability/observability.test.js +224 -0
- package/dist/core/observability/observability.test.js.map +1 -0
- package/dist/core/observability/structured-logger.d.ts +53 -0
- package/dist/core/observability/structured-logger.js +123 -0
- package/dist/core/observability/structured-logger.js.map +1 -0
- package/dist/core/observability/timing.d.ts +23 -0
- package/dist/core/observability/timing.js +140 -0
- package/dist/core/observability/timing.js.map +1 -0
- package/dist/core/services/command-executor.service.d.ts +3 -0
- package/dist/core/services/command-executor.service.js +12 -0
- package/dist/core/services/command-executor.service.js.map +1 -0
- package/dist/core/services/command-history.service.d.ts +38 -0
- package/dist/core/services/command-history.service.js +146 -0
- package/dist/core/services/command-history.service.js.map +1 -0
- package/dist/core/services/command-providers.d.ts +1 -0
- package/dist/core/services/command-providers.js +17 -0
- package/dist/core/services/command-providers.js.map +1 -0
- package/dist/core/services/runtime-catalog.service.d.ts +2 -0
- package/dist/core/services/runtime-catalog.service.js +7 -0
- package/dist/core/services/runtime-catalog.service.js.map +1 -0
- package/dist/core/sync/sync.service.d.ts +4 -0
- package/dist/core/sync/sync.service.js +81 -0
- package/dist/core/sync/sync.service.js.map +1 -0
- package/dist/core/sync/sync.service.spec.d.ts +1 -0
- package/dist/core/sync/sync.service.spec.js +63 -0
- package/dist/core/sync/sync.service.spec.js.map +1 -0
- package/dist/core/validators/ruleset-validator.service.d.ts +56 -0
- package/dist/core/validators/ruleset-validator.service.js +263 -0
- package/dist/core/validators/ruleset-validator.service.js.map +1 -0
- package/dist/core/validators/ruleset-validator.service.spec.d.ts +1 -0
- package/dist/core/validators/ruleset-validator.service.spec.js +121 -0
- package/dist/core/validators/ruleset-validator.service.spec.js.map +1 -0
- package/dist/domain/entities/index.d.ts +72 -0
- package/dist/domain/entities/index.js +119 -0
- package/dist/domain/entities/index.js.map +1 -0
- package/dist/domain/interfaces.d.ts +224 -0
- package/dist/domain/interfaces.js +3 -0
- package/dist/domain/interfaces.js.map +1 -0
- package/dist/domain/services/adr.service.d.ts +50 -0
- package/dist/domain/services/adr.service.js +125 -0
- package/dist/domain/services/adr.service.js.map +1 -0
- package/dist/domain/services/agent-registry.service.d.ts +26 -0
- package/dist/domain/services/agent-registry.service.js +152 -0
- package/dist/domain/services/agent-registry.service.js.map +1 -0
- package/dist/domain/services/index.d.ts +33 -0
- package/dist/domain/services/index.js +126 -0
- package/dist/domain/services/index.js.map +1 -0
- package/dist/domain/services/services.test.d.ts +1 -0
- package/dist/domain/services/services.test.js +236 -0
- package/dist/domain/services/services.test.js.map +1 -0
- package/dist/domain/services/standards.service.d.ts +47 -0
- package/dist/domain/services/standards.service.js +129 -0
- package/dist/domain/services/standards.service.js.map +1 -0
- package/dist/domain/services/tool-usage-telemetry.service.d.ts +46 -0
- package/dist/domain/services/tool-usage-telemetry.service.js +181 -0
- package/dist/domain/services/tool-usage-telemetry.service.js.map +1 -0
- package/dist/infrastructure/catalog/catalog-loader.d.ts +22 -0
- package/dist/infrastructure/catalog/catalog-loader.js +135 -0
- package/dist/infrastructure/catalog/catalog-loader.js.map +1 -0
- package/dist/infrastructure/catalog/catalog-loader.test.d.ts +1 -0
- package/dist/infrastructure/catalog/catalog-loader.test.js +184 -0
- package/dist/infrastructure/catalog/catalog-loader.test.js.map +1 -0
- package/dist/infrastructure/cli/command-executor.d.ts +20 -0
- package/dist/infrastructure/cli/command-executor.js +109 -0
- package/dist/infrastructure/cli/command-executor.js.map +1 -0
- package/dist/infrastructure/cli/command-executor.test.d.ts +1 -0
- package/dist/infrastructure/cli/command-executor.test.js +98 -0
- package/dist/infrastructure/cli/command-executor.test.js.map +1 -0
- package/dist/infrastructure/cli/providers/index.d.ts +52 -0
- package/dist/infrastructure/cli/providers/index.js +175 -0
- package/dist/infrastructure/cli/providers/index.js.map +1 -0
- package/dist/infrastructure/formatters/output-formatter.service.d.ts +28 -0
- package/dist/infrastructure/formatters/output-formatter.service.js +198 -0
- package/dist/infrastructure/formatters/output-formatter.service.js.map +1 -0
- package/dist/main.d.ts +2 -0
- package/dist/main.js +10 -0
- package/dist/main.js.map +1 -0
- package/dist/test/mocks/index.d.ts +44 -0
- package/dist/test/mocks/index.js +135 -0
- package/dist/test/mocks/index.js.map +1 -0
- package/package.json +80 -0
- package/shell/completion.bash +85 -0
- package/shell/completion.fish +72 -0
- package/shell/completion.zsh +83 -0
- package/templates/evolith.yaml.example +45 -0
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
19
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
20
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
21
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
22
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
23
|
+
};
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
41
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
42
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
43
|
+
};
|
|
44
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
45
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
46
|
+
};
|
|
47
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
48
|
+
exports.HandoffCommand = void 0;
|
|
49
|
+
const nest_commander_1 = require("nest-commander");
|
|
50
|
+
const p = __importStar(require("@clack/prompts"));
|
|
51
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
52
|
+
const container_1 = require("../../core/di/container");
|
|
53
|
+
const catalog_loader_1 = require("../../infrastructure/catalog/catalog-loader");
|
|
54
|
+
const services_1 = require("../../domain/services");
|
|
55
|
+
const services_2 = require("../../application/services");
|
|
56
|
+
let HandoffCommand = class HandoffCommand extends nest_commander_1.CommandRunner {
|
|
57
|
+
constructor() {
|
|
58
|
+
super();
|
|
59
|
+
this.phaseService = new services_1.PhaseService();
|
|
60
|
+
this.toolSelectionService = new services_1.ToolSelectionService();
|
|
61
|
+
}
|
|
62
|
+
async run(passedParam, options) {
|
|
63
|
+
const fs = (0, container_1.getContainer)().createFileSystem();
|
|
64
|
+
if (options?.from && options?.to) {
|
|
65
|
+
const useCase = new services_2.PhaseTransitionUseCase(fs);
|
|
66
|
+
const result = await useCase.execute(options.from, options.to, [], process.cwd());
|
|
67
|
+
if (result.success) {
|
|
68
|
+
console.log(chalk_1.default.green(`✓ Transitioned from ${options.from} to ${options.to}`));
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
console.log(chalk_1.default.red(`✗ Transition failed: ${result.errors.join(', ')}`));
|
|
72
|
+
process.exit(1);
|
|
73
|
+
}
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
console.clear();
|
|
77
|
+
p.intro(chalk_1.default.bgCyan.white.bold(' Evolith SDLC - Phase Handoff '));
|
|
78
|
+
const phases = this.phaseService.getAllPhases();
|
|
79
|
+
const selection = await p.group({
|
|
80
|
+
fromPhase: () => p.select({
|
|
81
|
+
message: 'Select current phase:',
|
|
82
|
+
options: phases.map(phase => ({
|
|
83
|
+
value: phase.value,
|
|
84
|
+
label: phase.label,
|
|
85
|
+
hint: phase.description,
|
|
86
|
+
})),
|
|
87
|
+
}),
|
|
88
|
+
toPhase: ({ results }) => {
|
|
89
|
+
const currentPhase = this.phaseService.getPhase(results.fromPhase);
|
|
90
|
+
const nextPhase = currentPhase ? this.phaseService.getNextPhase(currentPhase.value) : undefined;
|
|
91
|
+
if (!nextPhase) {
|
|
92
|
+
return p.select({
|
|
93
|
+
message: 'No next phase available.',
|
|
94
|
+
options: [{ value: '', label: 'N/A' }],
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
return p.select({
|
|
98
|
+
message: 'Select target phase:',
|
|
99
|
+
options: [{
|
|
100
|
+
value: nextPhase.value,
|
|
101
|
+
label: nextPhase.label,
|
|
102
|
+
hint: nextPhase.description,
|
|
103
|
+
}],
|
|
104
|
+
initialValue: nextPhase.value,
|
|
105
|
+
});
|
|
106
|
+
},
|
|
107
|
+
validateGates: () => p.confirm({
|
|
108
|
+
message: 'Validate phase gate requirements before handoff?',
|
|
109
|
+
initialValue: true,
|
|
110
|
+
}),
|
|
111
|
+
uploadEvidence: () => p.confirm({
|
|
112
|
+
message: 'Generate/upload mandatory evidence artifacts?',
|
|
113
|
+
initialValue: true,
|
|
114
|
+
}),
|
|
115
|
+
selectTools: () => p.confirm({
|
|
116
|
+
message: 'Configure tools for target phase?',
|
|
117
|
+
initialValue: true,
|
|
118
|
+
}),
|
|
119
|
+
tools: async ({ results }) => {
|
|
120
|
+
if (!results.selectTools)
|
|
121
|
+
return [];
|
|
122
|
+
const targetPhase = results.toPhase;
|
|
123
|
+
const toolGroups = this.getToolGroupsForPhase(targetPhase);
|
|
124
|
+
const selectedTools = [];
|
|
125
|
+
for (const [groupKey, group] of Object.entries(toolGroups)) {
|
|
126
|
+
const useDefault = await p.confirm({
|
|
127
|
+
message: `${group.question} (Default: ${group.defaultOption})`,
|
|
128
|
+
initialValue: true,
|
|
129
|
+
});
|
|
130
|
+
if (!useDefault && group.options) {
|
|
131
|
+
const selected = await p.multiselect({
|
|
132
|
+
message: `Select ${groupKey} tools:`,
|
|
133
|
+
options: group.options,
|
|
134
|
+
});
|
|
135
|
+
if (Array.isArray(selected) && selected.every(s => typeof s === 'string')) {
|
|
136
|
+
selectedTools.push(...selected);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
const defaultTools = this.toolSelectionService.getDefaultTools(targetPhase);
|
|
141
|
+
selectedTools.push(...defaultTools);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
return selectedTools;
|
|
145
|
+
},
|
|
146
|
+
forceHandoff: () => p.confirm({
|
|
147
|
+
message: 'Force handoff even if some checks fail? (Requires waiver)',
|
|
148
|
+
initialValue: false,
|
|
149
|
+
}),
|
|
150
|
+
}, {
|
|
151
|
+
onCancel: () => {
|
|
152
|
+
p.cancel('Handoff cancelled.');
|
|
153
|
+
process.exit(0);
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
const spinner = p.spinner();
|
|
157
|
+
spinner.start(`Processing handoff from ${selection.fromPhase} to ${selection.toPhase}...`);
|
|
158
|
+
const useCase = new services_2.PhaseTransitionUseCase(fs);
|
|
159
|
+
const result = await useCase.execute(selection.fromPhase, selection.toPhase, selection.tools || [], process.cwd());
|
|
160
|
+
spinner.stop();
|
|
161
|
+
if (result.success) {
|
|
162
|
+
p.log.success(chalk_1.default.green(`✓ Handoff ${selection.fromPhase} → ${selection.toPhase} completed`));
|
|
163
|
+
if (result.gateResults.length > 0) {
|
|
164
|
+
p.log.info('\nGate Validation Results:');
|
|
165
|
+
result.gateResults.forEach(gate => {
|
|
166
|
+
const icon = gate.passed ? chalk_1.default.green('✓') : chalk_1.default.red('✗');
|
|
167
|
+
const required = gate.required ? '[REQUIRED]' : '[OPTIONAL]';
|
|
168
|
+
p.log.info(` ${icon} ${gate.id} ${required}: ${gate.description}`);
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
if (result.executedTools.length > 0) {
|
|
172
|
+
p.log.info(`\nTools configured: ${result.executedTools.join(', ')}`);
|
|
173
|
+
}
|
|
174
|
+
const nextSteps = this.getNextSteps(selection.toPhase);
|
|
175
|
+
p.note(nextSteps, 'Next Steps');
|
|
176
|
+
}
|
|
177
|
+
else {
|
|
178
|
+
p.log.error(chalk_1.default.red('✗ Handoff failed'));
|
|
179
|
+
result.errors.forEach(err => p.log.error(` - ${err}`));
|
|
180
|
+
if (result.gateResults.some(g => !g.passed && g.required)) {
|
|
181
|
+
p.log.warn('Fix failed required gates or use --force with Architecture Board waiver.');
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
p.outro(result.success ? chalk_1.default.green('Completed') : chalk_1.default.red('Failed'));
|
|
185
|
+
}
|
|
186
|
+
getToolGroupsForPhase(phase) {
|
|
187
|
+
const toolCatalog = catalog_loader_1.catalogLoader.loadToolCatalog();
|
|
188
|
+
const phaseDef = toolCatalog.phases[phase];
|
|
189
|
+
if (!phaseDef) {
|
|
190
|
+
return {};
|
|
191
|
+
}
|
|
192
|
+
return phaseDef.toolGroups;
|
|
193
|
+
}
|
|
194
|
+
getNextSteps(phase) {
|
|
195
|
+
const steps = {
|
|
196
|
+
'phase-1': '1. evolith validate\n2. evolith agents install\n3. evolith sdlc handoff --from phase-1 --to phase-2',
|
|
197
|
+
'phase-2': '1. evolith validate\n2. Review rulesets in rulesets/\n3. evolith sdlc handoff --from phase-2 --to phase-3',
|
|
198
|
+
'phase-3': '1. Create ADRs for architectural decisions\n2. Map bounded contexts\n3. evolith sdlc handoff --from phase-3 --to phase-4',
|
|
199
|
+
'phase-4': '1. Review CI/CD pipeline\n2. Configure observability\n3. evolith sdlc handoff --from phase-4 --to phase-5',
|
|
200
|
+
'phase-5': '1. Monitor DORA metrics\n2. Set up alerting\n3. Project is production-ready',
|
|
201
|
+
};
|
|
202
|
+
return steps[phase] || '';
|
|
203
|
+
}
|
|
204
|
+
parseFrom(val) {
|
|
205
|
+
return val;
|
|
206
|
+
}
|
|
207
|
+
parseTo(val) {
|
|
208
|
+
return val;
|
|
209
|
+
}
|
|
210
|
+
parseArtifacts() {
|
|
211
|
+
return true;
|
|
212
|
+
}
|
|
213
|
+
parseValidate() {
|
|
214
|
+
return true;
|
|
215
|
+
}
|
|
216
|
+
parseForce() {
|
|
217
|
+
return true;
|
|
218
|
+
}
|
|
219
|
+
};
|
|
220
|
+
exports.HandoffCommand = HandoffCommand;
|
|
221
|
+
__decorate([
|
|
222
|
+
(0, nest_commander_1.Option)({
|
|
223
|
+
flags: '-f, --from [phase]',
|
|
224
|
+
description: 'Source phase (phase-0, phase-1, etc.)',
|
|
225
|
+
}),
|
|
226
|
+
__metadata("design:type", Function),
|
|
227
|
+
__metadata("design:paramtypes", [String]),
|
|
228
|
+
__metadata("design:returntype", String)
|
|
229
|
+
], HandoffCommand.prototype, "parseFrom", null);
|
|
230
|
+
__decorate([
|
|
231
|
+
(0, nest_commander_1.Option)({
|
|
232
|
+
flags: '-t, --to [phase]',
|
|
233
|
+
description: 'Target phase (phase-0, phase-1, etc.)',
|
|
234
|
+
}),
|
|
235
|
+
__metadata("design:type", Function),
|
|
236
|
+
__metadata("design:paramtypes", [String]),
|
|
237
|
+
__metadata("design:returntype", String)
|
|
238
|
+
], HandoffCommand.prototype, "parseTo", null);
|
|
239
|
+
__decorate([
|
|
240
|
+
(0, nest_commander_1.Option)({
|
|
241
|
+
flags: '-a, --artifacts',
|
|
242
|
+
description: 'Generate evidence artifacts',
|
|
243
|
+
}),
|
|
244
|
+
__metadata("design:type", Function),
|
|
245
|
+
__metadata("design:paramtypes", []),
|
|
246
|
+
__metadata("design:returntype", Boolean)
|
|
247
|
+
], HandoffCommand.prototype, "parseArtifacts", null);
|
|
248
|
+
__decorate([
|
|
249
|
+
(0, nest_commander_1.Option)({
|
|
250
|
+
flags: '--validate',
|
|
251
|
+
description: 'Validate phase gates',
|
|
252
|
+
}),
|
|
253
|
+
__metadata("design:type", Function),
|
|
254
|
+
__metadata("design:paramtypes", []),
|
|
255
|
+
__metadata("design:returntype", Boolean)
|
|
256
|
+
], HandoffCommand.prototype, "parseValidate", null);
|
|
257
|
+
__decorate([
|
|
258
|
+
(0, nest_commander_1.Option)({
|
|
259
|
+
flags: '--force',
|
|
260
|
+
description: 'Force handoff despite failed gates',
|
|
261
|
+
}),
|
|
262
|
+
__metadata("design:type", Function),
|
|
263
|
+
__metadata("design:paramtypes", []),
|
|
264
|
+
__metadata("design:returntype", Boolean)
|
|
265
|
+
], HandoffCommand.prototype, "parseForce", null);
|
|
266
|
+
exports.HandoffCommand = HandoffCommand = __decorate([
|
|
267
|
+
(0, nest_commander_1.Command)({
|
|
268
|
+
name: 'handoff',
|
|
269
|
+
description: 'Transitions artifacts between SDLC phases with interactive guided flow',
|
|
270
|
+
}),
|
|
271
|
+
__metadata("design:paramtypes", [])
|
|
272
|
+
], HandoffCommand);
|
|
273
|
+
//# sourceMappingURL=handoff.command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handoff.command.js","sourceRoot":"","sources":["../../../src/commands/sdlc/handoff.command.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
9
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.SdlcCommand = void 0;
|
|
13
|
+
const nest_commander_1 = require("nest-commander");
|
|
14
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
15
|
+
const handoff_command_1 = require("./handoff.command");
|
|
16
|
+
const generate_domain_command_1 = require("./generate-domain.command");
|
|
17
|
+
let SdlcCommand = class SdlcCommand extends nest_commander_1.CommandRunner {
|
|
18
|
+
async run(passedParam, options) {
|
|
19
|
+
console.log(chalk_1.default.blueBright('\n🚀 Evolith SDLC CLI 🚀\n'));
|
|
20
|
+
console.log(chalk_1.default.white('Available subcommands:'));
|
|
21
|
+
console.log(chalk_1.default.cyan(' handoff') + ' - Transition artifacts between phases');
|
|
22
|
+
console.log(chalk_1.default.cyan(' generate') + ' - Generate code from models (e.g. domain from DDD)');
|
|
23
|
+
console.log(chalk_1.default.gray('\nRun `evolith sdlc <subcommand> --help` for more information.\n'));
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
exports.SdlcCommand = SdlcCommand;
|
|
27
|
+
exports.SdlcCommand = SdlcCommand = __decorate([
|
|
28
|
+
(0, nest_commander_1.Command)({
|
|
29
|
+
name: 'sdlc',
|
|
30
|
+
description: 'Orchestrates the generation of artifacts and transitions (Handoffs) between the lifecycle phases (Discovery, Design, Construction)',
|
|
31
|
+
subCommands: [handoff_command_1.HandoffCommand, generate_domain_command_1.GenerateDomainCommand],
|
|
32
|
+
})
|
|
33
|
+
], SdlcCommand);
|
|
34
|
+
//# sourceMappingURL=sdlc.command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sdlc.command.js","sourceRoot":"","sources":["../../../src/commands/sdlc/sdlc.command.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mDAAgE;AAChE,kDAA0B;AAE1B,uDAAmD;AACnD,uEAAkE;AAO3D,IAAM,WAAW,GAAjB,MAAM,WAAY,SAAQ,8BAAa;IAC5C,KAAK,CAAC,GAAG,CACP,WAAqB,EACrB,OAA6B;QAE7B,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,UAAU,CAAC,4BAA4B,CAAC,CAC/C,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,wCAAwC,CAAC,CAAC;QAChF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,qDAAqD,CAAC,CAAC;QAC9F,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,kEAAkE,CAAC,CAAC,CAAC;IAC9F,CAAC;CACF,CAAA;AAbY,kCAAW;sBAAX,WAAW;IALvB,IAAA,wBAAO,EAAC;QACP,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,oIAAoI;QACjJ,WAAW,EAAE,CAAC,gCAAc,EAAE,+CAAqB,CAAC;KACrD,CAAC;GACW,WAAW,CAavB"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { CommandRunner } from 'nest-commander';
|
|
2
|
+
interface StandardsCommandOptions {
|
|
3
|
+
init?: boolean;
|
|
4
|
+
list?: boolean;
|
|
5
|
+
get?: string;
|
|
6
|
+
validate?: string;
|
|
7
|
+
export?: string;
|
|
8
|
+
format?: string;
|
|
9
|
+
category?: string;
|
|
10
|
+
}
|
|
11
|
+
export declare class StandardsCommand extends CommandRunner {
|
|
12
|
+
run(passedParam: string[], options?: StandardsCommandOptions): Promise<void>;
|
|
13
|
+
private interactiveMode;
|
|
14
|
+
private initializeStandards;
|
|
15
|
+
private listStandards;
|
|
16
|
+
private getStandard;
|
|
17
|
+
private validateStandards;
|
|
18
|
+
private exportStandard;
|
|
19
|
+
parseInit(): boolean;
|
|
20
|
+
parseList(): boolean;
|
|
21
|
+
parseGet(val: string): string;
|
|
22
|
+
parseValidate(val: string): string;
|
|
23
|
+
parseExport(val: string): string;
|
|
24
|
+
parseFormat(val: string): string;
|
|
25
|
+
parseCategory(val: string): string;
|
|
26
|
+
}
|
|
27
|
+
export {};
|
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
19
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
20
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
21
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
22
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
23
|
+
};
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
41
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
42
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
43
|
+
};
|
|
44
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
45
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
46
|
+
};
|
|
47
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
48
|
+
exports.StandardsCommand = void 0;
|
|
49
|
+
const nest_commander_1 = require("nest-commander");
|
|
50
|
+
const p = __importStar(require("@clack/prompts"));
|
|
51
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
52
|
+
const container_1 = require("../../core/di/container");
|
|
53
|
+
const standards_service_1 = require("../../domain/services/standards.service");
|
|
54
|
+
const observability_1 = require("../../core/observability");
|
|
55
|
+
let StandardsCommand = class StandardsCommand extends nest_commander_1.CommandRunner {
|
|
56
|
+
async run(passedParam, options) {
|
|
57
|
+
const fs = (0, container_1.getContainer)().createFileSystem();
|
|
58
|
+
if (options?.init) {
|
|
59
|
+
await this.initializeStandards(fs);
|
|
60
|
+
}
|
|
61
|
+
else if (options?.list) {
|
|
62
|
+
await this.listStandards(fs, options.category);
|
|
63
|
+
}
|
|
64
|
+
else if (options?.get) {
|
|
65
|
+
await this.getStandard(fs, options.get);
|
|
66
|
+
}
|
|
67
|
+
else if (options?.validate) {
|
|
68
|
+
await this.validateStandards(fs, options.validate);
|
|
69
|
+
}
|
|
70
|
+
else if (options?.export) {
|
|
71
|
+
await this.exportStandard(fs, options.export, options.format);
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
await this.interactiveMode(fs);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
async interactiveMode(fs) {
|
|
78
|
+
console.clear();
|
|
79
|
+
p.intro(chalk_1.default.bgCyan.white.bold(' Evolith Standards - Corporate Standards Management '));
|
|
80
|
+
const action = await p.select({
|
|
81
|
+
message: '¿Qué acción deseas realizar?',
|
|
82
|
+
options: [
|
|
83
|
+
{ value: 'init', label: 'Inicializar', hint: 'Crear estructura de standards' },
|
|
84
|
+
{ value: 'list', label: 'Listar Standards', hint: 'Ver todos los standards' },
|
|
85
|
+
{ value: 'get', label: 'Ver Standard', hint: 'Detalles de un standard' },
|
|
86
|
+
{ value: 'validate', label: 'Validar Código', hint: 'Validar contra standards' },
|
|
87
|
+
{ value: 'export', label: 'Exportar', hint: 'Exportar standard a MD/JSON' },
|
|
88
|
+
],
|
|
89
|
+
});
|
|
90
|
+
switch (action) {
|
|
91
|
+
case 'init':
|
|
92
|
+
await this.initializeStandards(fs);
|
|
93
|
+
break;
|
|
94
|
+
case 'list':
|
|
95
|
+
await this.listStandards(fs);
|
|
96
|
+
break;
|
|
97
|
+
case 'get':
|
|
98
|
+
const id = await p.text({ message: 'ID del Standard:' });
|
|
99
|
+
await this.getStandard(fs, id);
|
|
100
|
+
break;
|
|
101
|
+
case 'validate':
|
|
102
|
+
const code = await p.text({ message: 'Código a validar:' });
|
|
103
|
+
await this.validateStandards(fs, code);
|
|
104
|
+
break;
|
|
105
|
+
case 'export':
|
|
106
|
+
const exportId = await p.text({ message: 'ID del Standard:' });
|
|
107
|
+
const format = await p.select({
|
|
108
|
+
message: 'Formato:',
|
|
109
|
+
options: [
|
|
110
|
+
{ value: 'markdown', label: 'Markdown' },
|
|
111
|
+
{ value: 'json', label: 'JSON' },
|
|
112
|
+
],
|
|
113
|
+
});
|
|
114
|
+
await this.exportStandard(fs, exportId, format);
|
|
115
|
+
break;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
async initializeStandards(fs) {
|
|
119
|
+
observability_1.logger.info('Initializing standards directory structure');
|
|
120
|
+
const service = new standards_service_1.StandardsService(fs, process.cwd());
|
|
121
|
+
const spinner = p.spinner();
|
|
122
|
+
spinner.start('Inicializando...');
|
|
123
|
+
try {
|
|
124
|
+
await service.initialize();
|
|
125
|
+
spinner.stop();
|
|
126
|
+
p.log.success(chalk_1.default.green('✓ Estructura de standards creada'));
|
|
127
|
+
p.log.info(' Ubicación: reference/standards/');
|
|
128
|
+
p.log.info(' Subcarpetas: rulesets/, templates/');
|
|
129
|
+
p.log.info('\nPara ver los standards disponibles, usa: evolith standards --list');
|
|
130
|
+
}
|
|
131
|
+
catch (error) {
|
|
132
|
+
spinner.stop();
|
|
133
|
+
observability_1.logger.error('Failed to initialize standards', { error });
|
|
134
|
+
p.log.error(chalk_1.default.red('✗ Error inicializando standards'));
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
async listStandards(fs, category) {
|
|
138
|
+
observability_1.logger.info('Listing standards', { category });
|
|
139
|
+
const service = new standards_service_1.StandardsService(fs, process.cwd());
|
|
140
|
+
const cat = category;
|
|
141
|
+
const standards = await service.list(cat);
|
|
142
|
+
if (standards.length === 0) {
|
|
143
|
+
p.log.warn('No hay standards registrados.');
|
|
144
|
+
p.log.info('Usa "evolith standards --init" para inicializar la estructura.');
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
console.log(`\nTotal Standards: ${standards.length}\n`);
|
|
148
|
+
const table = standards.map(s => ({
|
|
149
|
+
id: s.id,
|
|
150
|
+
name: s.name,
|
|
151
|
+
version: s.version,
|
|
152
|
+
category: s.category,
|
|
153
|
+
rules: s.rules.length,
|
|
154
|
+
}));
|
|
155
|
+
console.table(table);
|
|
156
|
+
}
|
|
157
|
+
async getStandard(fs, id) {
|
|
158
|
+
observability_1.logger.info('Getting standard', { id });
|
|
159
|
+
const service = new standards_service_1.StandardsService(fs, process.cwd());
|
|
160
|
+
const standard = await service.get(id);
|
|
161
|
+
if (!standard) {
|
|
162
|
+
p.log.error(chalk_1.default.red(`Standard ${id} no encontrado`));
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
console.log(chalk_1.default.bold(`\n${standard.name}`));
|
|
166
|
+
console.log(`ID: ${standard.id} | Version: ${standard.version} | Category: ${standard.category}`);
|
|
167
|
+
console.log(`\n${standard.description}\n`);
|
|
168
|
+
if (standard.rules.length > 0) {
|
|
169
|
+
console.log(chalk_1.default.bold('Rules:'));
|
|
170
|
+
standard.rules.forEach(rule => {
|
|
171
|
+
const icon = rule.severity === 'error' ? '🔴' : rule.severity === 'warning' ? '🟡' : '🔵';
|
|
172
|
+
console.log(` ${icon} [${rule.severity}] ${rule.id}: ${rule.name}`);
|
|
173
|
+
console.log(` ${rule.description}`);
|
|
174
|
+
if (rule.remediation) {
|
|
175
|
+
console.log(` → ${rule.remediation}`);
|
|
176
|
+
}
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
async validateStandards(fs, code) {
|
|
181
|
+
if (!code) {
|
|
182
|
+
p.log.error('Código requerido para validación');
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
observability_1.logger.info('Validating code against standards');
|
|
186
|
+
const service = new standards_service_1.StandardsService(fs, process.cwd());
|
|
187
|
+
const result = await service.validate(code);
|
|
188
|
+
console.log(chalk_1.default.bold('\nValidation Results'));
|
|
189
|
+
console.log(`Total Rules: ${result.totalRules}`);
|
|
190
|
+
console.log(chalk_1.default.green(`Passed: ${result.passed}`));
|
|
191
|
+
console.log(chalk_1.default.red(`Failed: ${result.failed}`));
|
|
192
|
+
if (result.failed > 0) {
|
|
193
|
+
console.log(chalk_1.default.bold('\nFailed Rules:'));
|
|
194
|
+
result.results
|
|
195
|
+
.filter(r => !r.passed)
|
|
196
|
+
.forEach(r => {
|
|
197
|
+
const icon = r.severity === 'error' ? '🔴' : '🟡';
|
|
198
|
+
console.log(` ${icon} ${r.standardId}/${r.ruleId}: ${r.ruleName}`);
|
|
199
|
+
console.log(` ${r.message}`);
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
async exportStandard(fs, id, format) {
|
|
204
|
+
observability_1.logger.info('Exporting standard', { id, format });
|
|
205
|
+
const service = new standards_service_1.StandardsService(fs, process.cwd());
|
|
206
|
+
const fmt = format || 'markdown';
|
|
207
|
+
try {
|
|
208
|
+
const output = await service.export(id, fmt);
|
|
209
|
+
console.log(`\n${output}\n`);
|
|
210
|
+
}
|
|
211
|
+
catch (error) {
|
|
212
|
+
observability_1.logger.error('Failed to export standard', { error });
|
|
213
|
+
p.log.error(chalk_1.default.red(`Error exportando standard: ${error}`));
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
parseInit() {
|
|
217
|
+
return true;
|
|
218
|
+
}
|
|
219
|
+
parseList() {
|
|
220
|
+
return true;
|
|
221
|
+
}
|
|
222
|
+
parseGet(val) {
|
|
223
|
+
return val;
|
|
224
|
+
}
|
|
225
|
+
parseValidate(val) {
|
|
226
|
+
return val;
|
|
227
|
+
}
|
|
228
|
+
parseExport(val) {
|
|
229
|
+
return val;
|
|
230
|
+
}
|
|
231
|
+
parseFormat(val) {
|
|
232
|
+
return val;
|
|
233
|
+
}
|
|
234
|
+
parseCategory(val) {
|
|
235
|
+
return val;
|
|
236
|
+
}
|
|
237
|
+
};
|
|
238
|
+
exports.StandardsCommand = StandardsCommand;
|
|
239
|
+
__decorate([
|
|
240
|
+
(0, nest_commander_1.Option)({
|
|
241
|
+
flags: '--init',
|
|
242
|
+
description: 'Inicializar estructura de standards',
|
|
243
|
+
}),
|
|
244
|
+
__metadata("design:type", Function),
|
|
245
|
+
__metadata("design:paramtypes", []),
|
|
246
|
+
__metadata("design:returntype", Boolean)
|
|
247
|
+
], StandardsCommand.prototype, "parseInit", null);
|
|
248
|
+
__decorate([
|
|
249
|
+
(0, nest_commander_1.Option)({
|
|
250
|
+
flags: '-l, --list',
|
|
251
|
+
description: 'Listar todos los standards',
|
|
252
|
+
}),
|
|
253
|
+
__metadata("design:type", Function),
|
|
254
|
+
__metadata("design:paramtypes", []),
|
|
255
|
+
__metadata("design:returntype", Boolean)
|
|
256
|
+
], StandardsCommand.prototype, "parseList", null);
|
|
257
|
+
__decorate([
|
|
258
|
+
(0, nest_commander_1.Option)({
|
|
259
|
+
flags: '-g, --get [id]',
|
|
260
|
+
description: 'Ver standard específico',
|
|
261
|
+
}),
|
|
262
|
+
__metadata("design:type", Function),
|
|
263
|
+
__metadata("design:paramtypes", [String]),
|
|
264
|
+
__metadata("design:returntype", String)
|
|
265
|
+
], StandardsCommand.prototype, "parseGet", null);
|
|
266
|
+
__decorate([
|
|
267
|
+
(0, nest_commander_1.Option)({
|
|
268
|
+
flags: '-v, --validate [code]',
|
|
269
|
+
description: 'Validar código contra standards',
|
|
270
|
+
}),
|
|
271
|
+
__metadata("design:type", Function),
|
|
272
|
+
__metadata("design:paramtypes", [String]),
|
|
273
|
+
__metadata("design:returntype", String)
|
|
274
|
+
], StandardsCommand.prototype, "parseValidate", null);
|
|
275
|
+
__decorate([
|
|
276
|
+
(0, nest_commander_1.Option)({
|
|
277
|
+
flags: '-e, --export [id]',
|
|
278
|
+
description: 'Exportar standard',
|
|
279
|
+
}),
|
|
280
|
+
__metadata("design:type", Function),
|
|
281
|
+
__metadata("design:paramtypes", [String]),
|
|
282
|
+
__metadata("design:returntype", String)
|
|
283
|
+
], StandardsCommand.prototype, "parseExport", null);
|
|
284
|
+
__decorate([
|
|
285
|
+
(0, nest_commander_1.Option)({
|
|
286
|
+
flags: '-f, --format [format]',
|
|
287
|
+
description: 'Formato de exportación: markdown, json',
|
|
288
|
+
}),
|
|
289
|
+
__metadata("design:type", Function),
|
|
290
|
+
__metadata("design:paramtypes", [String]),
|
|
291
|
+
__metadata("design:returntype", String)
|
|
292
|
+
], StandardsCommand.prototype, "parseFormat", null);
|
|
293
|
+
__decorate([
|
|
294
|
+
(0, nest_commander_1.Option)({
|
|
295
|
+
flags: '-c, --category [category]',
|
|
296
|
+
description: 'Filtrar por categoría',
|
|
297
|
+
}),
|
|
298
|
+
__metadata("design:type", Function),
|
|
299
|
+
__metadata("design:paramtypes", [String]),
|
|
300
|
+
__metadata("design:returntype", String)
|
|
301
|
+
], StandardsCommand.prototype, "parseCategory", null);
|
|
302
|
+
exports.StandardsCommand = StandardsCommand = __decorate([
|
|
303
|
+
(0, nest_commander_1.Command)({
|
|
304
|
+
name: 'standards',
|
|
305
|
+
description: 'Gestión de estándares Evolith (arquitectura, gobernanza, operaciones)',
|
|
306
|
+
})
|
|
307
|
+
], StandardsCommand);
|
|
308
|
+
//# sourceMappingURL=standards.command.js.map
|