@evolith/smart-cli 0.0.1-beta → 0.0.2-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.
Files changed (84) hide show
  1. package/ARCHITECTURE.md +667 -89
  2. package/dist/app.module.js +2 -0
  3. package/dist/app.module.js.map +1 -1
  4. package/dist/application/services/index.d.ts +14 -5
  5. package/dist/application/services/index.js +41 -3
  6. package/dist/application/services/index.js.map +1 -1
  7. package/dist/application/services/phase-transition.use-case.spec.d.ts +1 -0
  8. package/dist/application/services/phase-transition.use-case.spec.js +297 -0
  9. package/dist/application/services/phase-transition.use-case.spec.js.map +1 -0
  10. package/dist/commands/docs/docs.command.d.ts +5 -0
  11. package/dist/commands/docs/docs.command.js +159 -3
  12. package/dist/commands/docs/docs.command.js.map +1 -1
  13. package/dist/commands/drift/drift.command.d.ts +24 -0
  14. package/dist/commands/drift/drift.command.js +250 -0
  15. package/dist/commands/drift/drift.command.js.map +1 -0
  16. package/dist/commands/init/agents.command.spec.d.ts +1 -0
  17. package/dist/commands/init/agents.command.spec.js +152 -0
  18. package/dist/commands/init/agents.command.spec.js.map +1 -0
  19. package/dist/commands/init/upgrade.command.d.ts +10 -0
  20. package/dist/commands/init/upgrade.command.js +134 -1
  21. package/dist/commands/init/upgrade.command.js.map +1 -1
  22. package/dist/commands/sdlc/gate-status.command.d.ts +5 -0
  23. package/dist/commands/sdlc/gate-status.command.js +114 -0
  24. package/dist/commands/sdlc/gate-status.command.js.map +1 -0
  25. package/dist/commands/sdlc/sdlc.command.js +3 -1
  26. package/dist/commands/sdlc/sdlc.command.js.map +1 -1
  27. package/dist/commands/validate/validate.command.d.ts +4 -0
  28. package/dist/commands/validate/validate.command.js +39 -0
  29. package/dist/commands/validate/validate.command.js.map +1 -1
  30. package/dist/core/agents/agent-ruleset-builder.d.ts +30 -0
  31. package/dist/core/agents/agent-ruleset-builder.js +75 -0
  32. package/dist/core/agents/agent-ruleset-builder.js.map +1 -0
  33. package/dist/core/agents/agent-ruleset-builder.spec.d.ts +1 -0
  34. package/dist/core/agents/agent-ruleset-builder.spec.js +135 -0
  35. package/dist/core/agents/agent-ruleset-builder.spec.js.map +1 -0
  36. package/dist/core/mcp/server.d.ts +14 -9
  37. package/dist/core/mcp/server.js +236 -181
  38. package/dist/core/mcp/server.js.map +1 -1
  39. package/dist/core/services/command-history.service.spec.d.ts +1 -0
  40. package/dist/core/services/command-history.service.spec.js +166 -0
  41. package/dist/core/services/command-history.service.spec.js.map +1 -0
  42. package/dist/core/upgrade/satellite-upgrade.service.d.ts +48 -0
  43. package/dist/core/upgrade/satellite-upgrade.service.js +358 -0
  44. package/dist/core/upgrade/satellite-upgrade.service.js.map +1 -0
  45. package/dist/core/upgrade/satellite-upgrade.service.spec.d.ts +1 -0
  46. package/dist/core/upgrade/satellite-upgrade.service.spec.js +143 -0
  47. package/dist/core/upgrade/satellite-upgrade.service.spec.js.map +1 -0
  48. package/dist/core/validators/architecture-drift.service.d.ts +68 -0
  49. package/dist/core/validators/architecture-drift.service.js +266 -0
  50. package/dist/core/validators/architecture-drift.service.js.map +1 -0
  51. package/dist/core/validators/architecture-drift.service.spec.d.ts +1 -0
  52. package/dist/core/validators/architecture-drift.service.spec.js +315 -0
  53. package/dist/core/validators/architecture-drift.service.spec.js.map +1 -0
  54. package/dist/core/validators/phase-gate-validator.service.d.ts +71 -0
  55. package/dist/core/validators/phase-gate-validator.service.js +271 -0
  56. package/dist/core/validators/phase-gate-validator.service.js.map +1 -0
  57. package/dist/core/validators/phase-gate-validator.service.spec.d.ts +1 -0
  58. package/dist/core/validators/phase-gate-validator.service.spec.js +326 -0
  59. package/dist/core/validators/phase-gate-validator.service.spec.js.map +1 -0
  60. package/dist/core/validators/ruleset-validator-architecture.spec.d.ts +1 -0
  61. package/dist/core/validators/ruleset-validator-architecture.spec.js +178 -0
  62. package/dist/core/validators/ruleset-validator-architecture.spec.js.map +1 -0
  63. package/dist/core/validators/ruleset-validator.service.d.ts +24 -0
  64. package/dist/core/validators/ruleset-validator.service.js +394 -0
  65. package/dist/core/validators/ruleset-validator.service.js.map +1 -1
  66. package/dist/core/validators/ruleset-validator.service.spec.js +4 -3
  67. package/dist/core/validators/ruleset-validator.service.spec.js.map +1 -1
  68. package/dist/domain/services/adr.service.spec.d.ts +1 -0
  69. package/dist/domain/services/adr.service.spec.js +141 -0
  70. package/dist/domain/services/adr.service.spec.js.map +1 -0
  71. package/dist/domain/services/agent-registry.service.spec.d.ts +1 -0
  72. package/dist/domain/services/agent-registry.service.spec.js +162 -0
  73. package/dist/domain/services/agent-registry.service.spec.js.map +1 -0
  74. package/dist/domain/services/standards.service.spec.d.ts +1 -0
  75. package/dist/domain/services/standards.service.spec.js +140 -0
  76. package/dist/domain/services/standards.service.spec.js.map +1 -0
  77. package/dist/domain/services/tool-usage-telemetry.service.spec.d.ts +1 -0
  78. package/dist/domain/services/tool-usage-telemetry.service.spec.js +180 -0
  79. package/dist/domain/services/tool-usage-telemetry.service.spec.js.map +1 -0
  80. package/dist/infrastructure/formatters/output-formatter.service.spec.d.ts +1 -0
  81. package/dist/infrastructure/formatters/output-formatter.service.spec.js +164 -0
  82. package/dist/infrastructure/formatters/output-formatter.service.spec.js.map +1 -0
  83. package/dist/main.js +0 -0
  84. package/package.json +1 -1
@@ -47,31 +47,187 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
47
47
  Object.defineProperty(exports, "__esModule", { value: true });
48
48
  exports.DocsCommand = void 0;
49
49
  const nest_commander_1 = require("nest-commander");
50
+ const fs = __importStar(require("fs-extra"));
51
+ const path = __importStar(require("path"));
50
52
  const p = __importStar(require("@clack/prompts"));
51
53
  const chalk_1 = __importDefault(require("chalk"));
54
+ const DEFAULT_TEMPLATES = [
55
+ {
56
+ filename: 'README.md',
57
+ description: 'Project overview and getting started',
58
+ content: `# Project Name
59
+
60
+ ## Overview
61
+ Brief description of the project.
62
+
63
+ ## Getting Started
64
+ Instructions for setting up and running the project.
65
+
66
+ ## Architecture
67
+ Link to architecture decision records and design documents.
68
+
69
+ ## Documentation
70
+ - [AGENTS.md](./AGENTS.md) - Agent configuration
71
+ - [MASTER_INDEX.md](./MASTER_INDEX.md) - Documentation index
72
+
73
+ ## License
74
+ License information.
75
+ `,
76
+ },
77
+ {
78
+ filename: 'AGENTS.md',
79
+ description: 'AI agent configuration and rules',
80
+ content: `# Agent Configuration
81
+
82
+ ## Project Context
83
+ Description of the project for AI agents.
84
+
85
+ ## Rules
86
+ - Follow established coding conventions
87
+ - Maintain bilingual parity (EN/ES)
88
+ - Validate all internal links
89
+
90
+ ## Conventions
91
+ - Use relative paths for internal references
92
+ - Keep documentation business-readable
93
+ - Isolate technical details in dedicated sections
94
+ `,
95
+ },
96
+ {
97
+ filename: 'MASTER_INDEX.md',
98
+ description: 'Master documentation index',
99
+ content: `# Master Index
100
+
101
+ ## Architecture
102
+ - [Architecture Overview](./reference/architecture/README.md)
103
+ - [ADR Registry](./reference/architecture/adrs/README.md)
104
+
105
+ ## Governance
106
+ - [Standards](./reference/governance/standards/README.md)
107
+ - [Rulesets](./reference/governance/rulesets/README.md)
108
+
109
+ ## Knowledge
110
+ - [Demo References](./reference/knowledge/demo/README.md)
111
+ `,
112
+ },
113
+ {
114
+ filename: '.evolith/evolith.yaml',
115
+ description: 'Evolith configuration file',
116
+ content: `coreRef:
117
+ version: "1.0.0"
118
+ path: "../evolith"
119
+ governance:
120
+ version: "1.0"
121
+ product:
122
+ name: "project-name"
123
+ type: "library"
124
+ `,
125
+ },
126
+ ];
52
127
  let DocsCommand = class DocsCommand extends nest_commander_1.CommandRunner {
53
128
  async run(passedParam, options) {
129
+ const dryRun = options?.dryRun || false;
130
+ const force = options?.force || false;
54
131
  p.intro(chalk_1.default.bgYellow.black.bold(' Evolith SDK - Document Scaffold '));
55
- p.outro(chalk_1.default.green('Documentación base generada exitosamente.'));
132
+ const targetDir = process.cwd();
133
+ const templates = this.getTemplates(options?.template);
134
+ const filesToCreate = [];
135
+ const filesToUpdate = [];
136
+ const filesSkipped = [];
137
+ for (const template of templates) {
138
+ const filePath = path.join(targetDir, template.filename);
139
+ const exists = await fs.pathExists(filePath);
140
+ if (exists && !force) {
141
+ filesSkipped.push(template);
142
+ }
143
+ else if (exists && force) {
144
+ filesToUpdate.push(template);
145
+ }
146
+ else {
147
+ filesToCreate.push(template);
148
+ }
149
+ }
150
+ if (filesToCreate.length === 0 && filesToUpdate.length === 0) {
151
+ p.log.info('All documentation files already exist. Use --force to overwrite.');
152
+ p.outro(chalk_1.default.yellow('No changes made.'));
153
+ return;
154
+ }
155
+ p.log.info(`Files to create: ${filesToCreate.length}`);
156
+ p.log.info(`Files to update: ${filesToUpdate.length}`);
157
+ p.log.info(`Files skipped: ${filesSkipped.length}`);
158
+ if (dryRun) {
159
+ p.log.info(chalk_1.default.cyan('[DRY RUN] No files will be written.'));
160
+ for (const t of [...filesToCreate, ...filesToUpdate]) {
161
+ p.log.message(` ${chalk_1.default.green('+')} ${t.filename} - ${t.description}`);
162
+ }
163
+ p.outro(chalk_1.default.green('Dry run completed.'));
164
+ return;
165
+ }
166
+ let created = 0;
167
+ let updated = 0;
168
+ for (const template of filesToCreate) {
169
+ const filePath = path.join(targetDir, template.filename);
170
+ await fs.ensureDir(path.dirname(filePath));
171
+ await fs.writeFile(filePath, template.content, 'utf-8');
172
+ p.log.success(`Created: ${template.filename}`);
173
+ created++;
174
+ }
175
+ for (const template of filesToUpdate) {
176
+ const filePath = path.join(targetDir, template.filename);
177
+ await fs.writeFile(filePath, template.content, 'utf-8');
178
+ p.log.success(`Updated: ${template.filename}`);
179
+ updated++;
180
+ }
181
+ p.outro(chalk_1.default.green(`Documentation scaffolded: ${created} created, ${updated} updated.`));
182
+ }
183
+ getTemplates(templateName) {
184
+ if (templateName === 'minimal') {
185
+ return DEFAULT_TEMPLATES.filter(t => ['README.md', 'AGENTS.md'].includes(t.filename));
186
+ }
187
+ return DEFAULT_TEMPLATES;
56
188
  }
57
189
  parseDryRun() {
58
190
  return true;
59
191
  }
192
+ parseForce() {
193
+ return true;
194
+ }
195
+ parseTemplate(val) {
196
+ return val;
197
+ }
60
198
  };
61
199
  exports.DocsCommand = DocsCommand;
62
200
  __decorate([
63
201
  (0, nest_commander_1.Option)({
64
202
  flags: '-d, --dry-run',
65
- description: 'Ejecuta en modo simulacro sin alterar archivos',
203
+ description: 'Run in dry-run mode without writing files',
66
204
  }),
67
205
  __metadata("design:type", Function),
68
206
  __metadata("design:paramtypes", []),
69
207
  __metadata("design:returntype", Boolean)
70
208
  ], DocsCommand.prototype, "parseDryRun", null);
209
+ __decorate([
210
+ (0, nest_commander_1.Option)({
211
+ flags: '-f, --force',
212
+ description: 'Overwrite existing files',
213
+ }),
214
+ __metadata("design:type", Function),
215
+ __metadata("design:paramtypes", []),
216
+ __metadata("design:returntype", Boolean)
217
+ ], DocsCommand.prototype, "parseForce", null);
218
+ __decorate([
219
+ (0, nest_commander_1.Option)({
220
+ flags: '-t, --template <type>',
221
+ description: 'Template type to use (default, minimal)',
222
+ }),
223
+ __metadata("design:type", Function),
224
+ __metadata("design:paramtypes", [String]),
225
+ __metadata("design:returntype", String)
226
+ ], DocsCommand.prototype, "parseTemplate", null);
71
227
  exports.DocsCommand = DocsCommand = __decorate([
72
228
  (0, nest_commander_1.Command)({
73
229
  name: 'docs',
74
- description: 'Andamia la documentación base requerida por Evolith',
230
+ description: 'Scaffolds base documentation required by Evolith',
75
231
  })
76
232
  ], DocsCommand);
77
233
  //# sourceMappingURL=docs.command.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"docs.command.js","sourceRoot":"","sources":["../../../src/commands/docs/docs.command.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mDAAgE;AAChE,kDAAoC;AACpC,kDAA0B;AAUnB,IAAM,WAAW,GAAjB,MAAM,WAAY,SAAQ,8BAAa;IAC5C,KAAK,CAAC,GAAG,CAAC,WAAqB,EAAE,OAA4B;QAC3D,CAAC,CAAC,KAAK,CAAC,eAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC,CAAC;QAExE,CAAC,CAAC,KAAK,CAAC,eAAK,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC,CAAC;IACpE,CAAC;IAMD,WAAW;QACT,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAA;AAdY,kCAAW;AAWtB;IAJC,IAAA,uBAAM,EAAC;QACN,KAAK,EAAE,eAAe;QACtB,WAAW,EAAE,gDAAgD;KAC9D,CAAC;;;;8CAGD;sBAbU,WAAW;IAJvB,IAAA,wBAAO,EAAC;QACP,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,qDAAqD;KACnE,CAAC;GACW,WAAW,CAcvB"}
1
+ {"version":3,"file":"docs.command.js","sourceRoot":"","sources":["../../../src/commands/docs/docs.command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { CommandRunner } from 'nest-commander';
2
+ interface DriftOptions {
3
+ path?: string;
4
+ level?: string;
5
+ json?: boolean;
6
+ history?: boolean;
7
+ trend?: boolean;
8
+ }
9
+ export declare class DriftCommand extends CommandRunner {
10
+ run(_passedParam: string[], options?: DriftOptions): Promise<void>;
11
+ private printDriftReport;
12
+ private printViolations;
13
+ private showTrend;
14
+ private showHistory;
15
+ private getScoreColor;
16
+ private getSeverityColor;
17
+ private getTrendColor;
18
+ parsePath(val: string): string;
19
+ parseLevel(val: string): string;
20
+ parseJson(): boolean;
21
+ parseHistory(): boolean;
22
+ parseTrend(): boolean;
23
+ }
24
+ export {};
@@ -0,0 +1,250 @@
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.DriftCommand = void 0;
49
+ const nest_commander_1 = require("nest-commander");
50
+ const chalk_1 = __importDefault(require("chalk"));
51
+ const p = __importStar(require("@clack/prompts"));
52
+ const architecture_drift_service_1 = require("../../core/validators/architecture-drift.service");
53
+ let DriftCommand = class DriftCommand extends nest_commander_1.CommandRunner {
54
+ async run(_passedParam, options) {
55
+ const projectPath = options?.path || process.cwd();
56
+ const declaredLevel = options?.level;
57
+ const service = new architecture_drift_service_1.ArchitectureDriftService();
58
+ if (options?.trend) {
59
+ await this.showTrend(service, projectPath);
60
+ return;
61
+ }
62
+ if (options?.history) {
63
+ await this.showHistory(service, projectPath);
64
+ return;
65
+ }
66
+ const spinner = p.spinner();
67
+ spinner.start('Detecting architecture drift...');
68
+ try {
69
+ const report = await service.detectDrift({
70
+ projectPath,
71
+ declaredLevel,
72
+ storeHistory: true,
73
+ });
74
+ spinner.stop();
75
+ if (options?.json) {
76
+ console.log(JSON.stringify(report, null, 2));
77
+ return;
78
+ }
79
+ this.printDriftReport(report);
80
+ }
81
+ catch (error) {
82
+ spinner.stop();
83
+ const message = error instanceof Error ? error.message : String(error);
84
+ p.log.error(`Drift detection failed: ${message}`);
85
+ process.exit(1);
86
+ }
87
+ }
88
+ printDriftReport(report) {
89
+ console.log(chalk_1.default.bold('\n📐 Architecture Drift Report\n'));
90
+ const levelIcon = report.driftDetected ? chalk_1.default.red('⚠') : chalk_1.default.green('✓');
91
+ console.log(`${levelIcon} ${chalk_1.default.bold('Declared Level:')} ${chalk_1.default.cyan(report.declaredLevel)}`);
92
+ console.log(` ${chalk_1.default.bold('Detected Level:')} ${chalk_1.default.cyan(report.detectedLevel)}`);
93
+ if (report.declaredLevel !== report.detectedLevel) {
94
+ console.log(` ${chalk_1.default.red('⚠ LEVEL DRIFT DETECTED')}`);
95
+ }
96
+ console.log(`\n${chalk_1.default.bold('Overall Score:')} ${this.getScoreColor(report.overallScore)}${report.overallScore}%`);
97
+ console.log(`${chalk_1.default.bold('Drift Severity:')} ${this.getSeverityColor(report.driftSeverity)}${report.driftSeverity.toUpperCase()}`);
98
+ if (report.newViolations.length > 0) {
99
+ console.log(chalk_1.default.red(`\n🆕 New Violations (${report.newViolations.length}):`));
100
+ this.printViolations(report.newViolations);
101
+ }
102
+ if (report.persistentViolations.length > 0) {
103
+ console.log(chalk_1.default.yellow(`\n⚠ Persistent Violations (${report.persistentViolations.length}):`));
104
+ this.printViolations(report.persistentViolations);
105
+ }
106
+ if (report.resolvedViolations.length > 0) {
107
+ console.log(chalk_1.default.green(`\n✓ Resolved Violations (${report.resolvedViolations.length}):`));
108
+ this.printViolations(report.resolvedViolations);
109
+ }
110
+ if (report.newViolations.length === 0 && report.persistentViolations.length === 0) {
111
+ console.log(chalk_1.default.green('\n✓ No architecture drift detected. Codebase is compliant.'));
112
+ }
113
+ console.log(`\n${chalk_1.default.gray(`History stored at: ${report.historyPath}`)}`);
114
+ console.log('');
115
+ }
116
+ printViolations(violations) {
117
+ for (const v of violations) {
118
+ const icon = v.blocking ? chalk_1.default.red('⛔') : chalk_1.default.yellow('⚠');
119
+ const severity = v.severity === 'MUST' ? chalk_1.default.red('[MUST]') : v.severity === 'SHOULD' ? chalk_1.default.yellow('[SHOULD]') : chalk_1.default.gray('[COULD]');
120
+ console.log(` ${icon} ${severity} ${v.ruleId}: ${v.title}`);
121
+ console.log(` ${chalk_1.default.gray(v.description)}`);
122
+ }
123
+ }
124
+ async showTrend(service, projectPath) {
125
+ const { trend, entries } = await service.getDriftTrend(projectPath);
126
+ console.log(chalk_1.default.bold('\n📈 Architecture Drift Trend\n'));
127
+ console.log(`${chalk_1.default.bold('Trend:')} ${this.getTrendColor(trend)}${trend.toUpperCase()}`);
128
+ if (entries.length > 0) {
129
+ console.log(`\n${chalk_1.default.gray('Last ' + entries.length + ' scans:')}`);
130
+ for (const entry of entries) {
131
+ const date = new Date(entry.timestamp).toLocaleDateString();
132
+ const score = this.getScoreColor(entry.overallScore);
133
+ console.log(` ${date} - Score: ${score}${entry.overallScore}% - Violations: ${entry.violationsCount} (${entry.blockingViolationsCount} blocking)`);
134
+ }
135
+ }
136
+ else {
137
+ console.log(chalk_1.default.gray('\nNo history available. Run drift detection first.'));
138
+ }
139
+ console.log('');
140
+ }
141
+ async showHistory(service, projectPath) {
142
+ const history = await service.getDriftHistory(projectPath);
143
+ console.log(chalk_1.default.bold('\n📋 Architecture Drift History\n'));
144
+ if (history.length === 0) {
145
+ console.log(chalk_1.default.gray('No drift history available. Run drift detection first.'));
146
+ }
147
+ else {
148
+ console.log(`Total scans: ${history.length}`);
149
+ for (const entry of history.slice(-10)) {
150
+ const date = new Date(entry.timestamp).toLocaleString();
151
+ console.log(`\n ${chalk_1.default.cyan(date)}`);
152
+ console.log(` Level: ${entry.declaredLevel} → ${entry.detectedLevel}`);
153
+ console.log(` Score: ${this.getScoreColor(entry.overallScore)}${entry.overallScore}%`);
154
+ console.log(` Violations: ${entry.violationsCount} (${entry.blockingViolationsCount} blocking)`);
155
+ }
156
+ }
157
+ console.log('');
158
+ }
159
+ getScoreColor(score) {
160
+ if (score >= 90)
161
+ return chalk_1.default.green;
162
+ if (score >= 70)
163
+ return chalk_1.default.yellow;
164
+ return chalk_1.default.red;
165
+ }
166
+ getSeverityColor(severity) {
167
+ switch (severity) {
168
+ case 'critical': return chalk_1.default.red;
169
+ case 'high': return chalk_1.default.redBright;
170
+ case 'medium': return chalk_1.default.yellow;
171
+ case 'low': return chalk_1.default.blue;
172
+ default: return chalk_1.default.green;
173
+ }
174
+ }
175
+ getTrendColor(trend) {
176
+ switch (trend) {
177
+ case 'improving': return chalk_1.default.green;
178
+ case 'degrading': return chalk_1.default.red;
179
+ default: return chalk_1.default.yellow;
180
+ }
181
+ }
182
+ parsePath(val) {
183
+ return val;
184
+ }
185
+ parseLevel(val) {
186
+ return val;
187
+ }
188
+ parseJson() {
189
+ return true;
190
+ }
191
+ parseHistory() {
192
+ return true;
193
+ }
194
+ parseTrend() {
195
+ return true;
196
+ }
197
+ };
198
+ exports.DriftCommand = DriftCommand;
199
+ __decorate([
200
+ (0, nest_commander_1.Option)({
201
+ flags: '-p, --path [path]',
202
+ description: 'Project path to analyze (default: current directory)',
203
+ }),
204
+ __metadata("design:type", Function),
205
+ __metadata("design:paramtypes", [String]),
206
+ __metadata("design:returntype", String)
207
+ ], DriftCommand.prototype, "parsePath", null);
208
+ __decorate([
209
+ (0, nest_commander_1.Option)({
210
+ flags: '-l, --level [level]',
211
+ description: 'Declared architecture level (F1, F2, F3)',
212
+ }),
213
+ __metadata("design:type", Function),
214
+ __metadata("design:paramtypes", [String]),
215
+ __metadata("design:returntype", String)
216
+ ], DriftCommand.prototype, "parseLevel", null);
217
+ __decorate([
218
+ (0, nest_commander_1.Option)({
219
+ flags: '--json',
220
+ description: 'Output report as JSON',
221
+ }),
222
+ __metadata("design:type", Function),
223
+ __metadata("design:paramtypes", []),
224
+ __metadata("design:returntype", Boolean)
225
+ ], DriftCommand.prototype, "parseJson", null);
226
+ __decorate([
227
+ (0, nest_commander_1.Option)({
228
+ flags: '--history',
229
+ description: 'Show drift history',
230
+ }),
231
+ __metadata("design:type", Function),
232
+ __metadata("design:paramtypes", []),
233
+ __metadata("design:returntype", Boolean)
234
+ ], DriftCommand.prototype, "parseHistory", null);
235
+ __decorate([
236
+ (0, nest_commander_1.Option)({
237
+ flags: '--trend',
238
+ description: 'Show drift trend analysis',
239
+ }),
240
+ __metadata("design:type", Function),
241
+ __metadata("design:paramtypes", []),
242
+ __metadata("design:returntype", Boolean)
243
+ ], DriftCommand.prototype, "parseTrend", null);
244
+ exports.DriftCommand = DriftCommand = __decorate([
245
+ (0, nest_commander_1.Command)({
246
+ name: 'drift',
247
+ description: 'Detect architecture drift from declared architecture level (F1/F2/F3)',
248
+ })
249
+ ], DriftCommand);
250
+ //# sourceMappingURL=drift.command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drift.command.js","sourceRoot":"","sources":["../../../src/commands/drift/drift.command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,152 @@
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 __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ const agents_command_1 = require("../../commands/init/agents.command");
37
+ const toolUtils = __importStar(require("../../core/mcp/tools/tool-utils"));
38
+ jest.mock('@clack/prompts', () => ({
39
+ text: jest.fn(),
40
+ select: jest.fn(),
41
+ confirm: jest.fn(),
42
+ spinner: jest.fn(() => ({ start: jest.fn(), stop: jest.fn() })),
43
+ intro: jest.fn(),
44
+ outro: jest.fn(),
45
+ isCancel: jest.fn(),
46
+ cancel: jest.fn(),
47
+ }));
48
+ const mockFileSystem = {
49
+ exists: jest.fn(),
50
+ existsSync: jest.fn(),
51
+ readFile: jest.fn(),
52
+ readJson: jest.fn(),
53
+ readdirNames: jest.fn(),
54
+ writeFile: jest.fn(),
55
+ writeJson: jest.fn(),
56
+ ensureDir: jest.fn(),
57
+ remove: jest.fn(),
58
+ stat: jest.fn(),
59
+ };
60
+ jest.mock('../../core/mcp/tools/tool-utils', () => ({
61
+ getFileSystem: jest.fn(),
62
+ getContainer: jest.fn(),
63
+ }));
64
+ describe('AgentsCommand', () => {
65
+ let command;
66
+ beforeEach(() => {
67
+ jest.clearAllMocks();
68
+ toolUtils.getFileSystem.mockReturnValue(mockFileSystem);
69
+ command = new agents_command_1.AgentsCommand();
70
+ });
71
+ describe('buildAgentRuleset', () => {
72
+ it('should build ruleset with agent identity principle', () => {
73
+ const ruleset = command.buildAgentRuleset({
74
+ name: 'test-agent',
75
+ template: 'standard',
76
+ adrs: [],
77
+ rulesets: [],
78
+ });
79
+ expect(ruleset.agent.name).toBe('test-agent');
80
+ expect(ruleset.principles).toHaveLength(1);
81
+ expect(ruleset.principles[0].id).toBe('AGT-01');
82
+ expect(ruleset.principles[0].severity).toBe('MUST');
83
+ });
84
+ it('should add enterprise principles for enterprise template', () => {
85
+ const ruleset = command.buildAgentRuleset({
86
+ name: 'enterprise-agent',
87
+ template: 'enterprise',
88
+ adrs: [],
89
+ rulesets: [],
90
+ });
91
+ const principleIds = ruleset.principles.map((p) => p.id);
92
+ expect(principleIds).toContain('AGT-01');
93
+ expect(principleIds).toContain('AGT-02');
94
+ expect(principleIds).toContain('AGT-03');
95
+ });
96
+ it('should add hexagonal architecture principle when adr-0002 selected', () => {
97
+ const ruleset = command.buildAgentRuleset({
98
+ name: 'hex-agent',
99
+ template: 'standard',
100
+ adrs: ['adr-0002'],
101
+ rulesets: [],
102
+ });
103
+ const principleIds = ruleset.principles.map((p) => p.id);
104
+ expect(principleIds).toContain('AGT-HXA-01');
105
+ });
106
+ it('should add testing pyramid principle when adr-0018 selected', () => {
107
+ const ruleset = command.buildAgentRuleset({
108
+ name: 'test-pyramid-agent',
109
+ template: 'standard',
110
+ adrs: ['adr-0018'],
111
+ rulesets: [],
112
+ });
113
+ const principleIds = ruleset.principles.map((p) => p.id);
114
+ expect(principleIds).toContain('AGT-TP-01');
115
+ });
116
+ it('should add ACL principle when acl ruleset selected', () => {
117
+ const ruleset = command.buildAgentRuleset({
118
+ name: 'acl-agent',
119
+ template: 'standard',
120
+ adrs: [],
121
+ rulesets: ['acl'],
122
+ });
123
+ const principleIds = ruleset.principles.map((p) => p.id);
124
+ expect(principleIds).toContain('AGT-ACL-01');
125
+ });
126
+ it('should include metadata with adrs and rulesets', () => {
127
+ const ruleset = command.buildAgentRuleset({
128
+ name: 'metadata-agent',
129
+ template: 'minimal',
130
+ adrs: ['adr-0002', 'adr-0018'],
131
+ rulesets: ['acl', 'open-core'],
132
+ });
133
+ expect(ruleset.metadata.adrs).toEqual(['adr-0002', 'adr-0018']);
134
+ expect(ruleset.metadata.rulesets).toEqual(['acl', 'open-core']);
135
+ });
136
+ it('should have correct ruleset structure', () => {
137
+ const ruleset = command.buildAgentRuleset({
138
+ name: 'structure-agent',
139
+ template: 'standard',
140
+ adrs: [],
141
+ rulesets: [],
142
+ });
143
+ expect(ruleset).toHaveProperty('agent');
144
+ expect(ruleset).toHaveProperty('ruleset');
145
+ expect(ruleset).toHaveProperty('principles');
146
+ expect(ruleset).toHaveProperty('metadata');
147
+ expect(ruleset.ruleset.type).toBe('agent');
148
+ expect(ruleset.ruleset.scope).toBe('governance');
149
+ });
150
+ });
151
+ });
152
+ //# sourceMappingURL=agents.command.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents.command.spec.js","sourceRoot":"","sources":["../../../src/commands/init/agents.command.spec.ts"],"names":[],"mappings":"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"}