@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,198 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.OutputFormatterService = void 0;
|
|
7
|
+
class OutputFormatterService {
|
|
8
|
+
format(data, options) {
|
|
9
|
+
switch (options.format) {
|
|
10
|
+
case 'table':
|
|
11
|
+
return this.formatTable(data, options);
|
|
12
|
+
case 'yaml':
|
|
13
|
+
return this.formatYaml(data, options);
|
|
14
|
+
case 'markdown':
|
|
15
|
+
return this.formatMarkdown(data, options);
|
|
16
|
+
case 'json':
|
|
17
|
+
default:
|
|
18
|
+
return this.formatJson(data, options);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
formatJson(data, _options) {
|
|
22
|
+
return JSON.stringify(data, null, 2);
|
|
23
|
+
}
|
|
24
|
+
formatYaml(data, _options) {
|
|
25
|
+
try {
|
|
26
|
+
return this.toYaml(data);
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
return this.formatJson(data, _options);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
formatMarkdown(data, _options) {
|
|
33
|
+
if (Array.isArray(data)) {
|
|
34
|
+
return this.tableToMarkdown(data);
|
|
35
|
+
}
|
|
36
|
+
if (typeof data === 'object' && data !== null) {
|
|
37
|
+
return this.objectToMarkdown(data);
|
|
38
|
+
}
|
|
39
|
+
return String(data);
|
|
40
|
+
}
|
|
41
|
+
formatTable(data, options) {
|
|
42
|
+
if (Array.isArray(data)) {
|
|
43
|
+
return this.arrayToTable(data, options);
|
|
44
|
+
}
|
|
45
|
+
if (typeof data === 'object' && data !== null) {
|
|
46
|
+
return this.objectToTable(data, options);
|
|
47
|
+
}
|
|
48
|
+
return String(data);
|
|
49
|
+
}
|
|
50
|
+
arrayToTable(data, options) {
|
|
51
|
+
if (data.length === 0)
|
|
52
|
+
return '(empty)';
|
|
53
|
+
const firstItem = data[0];
|
|
54
|
+
if (typeof firstItem !== 'object' || firstItem === null) {
|
|
55
|
+
return data.map(item => String(item)).join('\n');
|
|
56
|
+
}
|
|
57
|
+
const keys = Object.keys(firstItem);
|
|
58
|
+
const columns = keys.map(key => ({
|
|
59
|
+
header: this.humanizeKey(key),
|
|
60
|
+
key,
|
|
61
|
+
}));
|
|
62
|
+
return this.renderTable(data, columns, options);
|
|
63
|
+
}
|
|
64
|
+
objectToTable(data, options) {
|
|
65
|
+
const entries = Object.entries(data);
|
|
66
|
+
if (entries.length === 0)
|
|
67
|
+
return '(empty)';
|
|
68
|
+
const maxKeyLength = Math.max(...entries.map(([k]) => k.length));
|
|
69
|
+
const lines = [];
|
|
70
|
+
for (const [key, value] of entries) {
|
|
71
|
+
const valueStr = this.formatValue(value);
|
|
72
|
+
const paddedKey = key.padEnd(maxKeyLength);
|
|
73
|
+
lines.push(` ${paddedKey} ${valueStr}`);
|
|
74
|
+
}
|
|
75
|
+
return lines.join('\n');
|
|
76
|
+
}
|
|
77
|
+
renderTable(data, columns, options) {
|
|
78
|
+
if (data.length === 0)
|
|
79
|
+
return '(empty)';
|
|
80
|
+
const colWidths = columns.map(col => {
|
|
81
|
+
const maxData = Math.max(col.header.length, ...data.map(row => String(row[col.key] || '').length));
|
|
82
|
+
return Math.min(col.width || maxData + 2, 50);
|
|
83
|
+
});
|
|
84
|
+
const headerRow = columns.map((col, i) => col.header.padEnd(colWidths[i]).substring(0, colWidths[i])).join(' | ');
|
|
85
|
+
const separator = colWidths.map(w => '─'.repeat(w)).join('─┼─');
|
|
86
|
+
const rows = data.map(item => columns.map((col, i) => {
|
|
87
|
+
const value = String(item[col.key] ?? '');
|
|
88
|
+
return value.padEnd(colWidths[i]).substring(0, colWidths[i]);
|
|
89
|
+
}).join(' | '));
|
|
90
|
+
return [headerRow, separator, ...rows].join('\n');
|
|
91
|
+
}
|
|
92
|
+
humanizeKey(key) {
|
|
93
|
+
return key
|
|
94
|
+
.replace(/([A-Z])/g, ' $1')
|
|
95
|
+
.replace(/([a-z])([A-Z])/g, '$1 $2')
|
|
96
|
+
.replace(/_/g, ' ')
|
|
97
|
+
.replace(/^./, str => str.toUpperCase())
|
|
98
|
+
.trim();
|
|
99
|
+
}
|
|
100
|
+
formatValue(value) {
|
|
101
|
+
if (value === null || value === undefined)
|
|
102
|
+
return chalk_1.default.gray('(none)');
|
|
103
|
+
if (typeof value === 'boolean')
|
|
104
|
+
return value ? chalk_1.default.green('✓') : chalk_1.default.red('✗');
|
|
105
|
+
if (typeof value === 'object') {
|
|
106
|
+
if (Array.isArray(value))
|
|
107
|
+
return `[${value.length} items]`;
|
|
108
|
+
return JSON.stringify(value);
|
|
109
|
+
}
|
|
110
|
+
return String(value);
|
|
111
|
+
}
|
|
112
|
+
tableToMarkdown(data) {
|
|
113
|
+
if (data.length === 0)
|
|
114
|
+
return '(empty)';
|
|
115
|
+
const firstItem = data[0];
|
|
116
|
+
if (typeof firstItem !== 'object' || firstItem === null) {
|
|
117
|
+
return data.map(item => `- ${item}`).join('\n');
|
|
118
|
+
}
|
|
119
|
+
const keys = Object.keys(firstItem);
|
|
120
|
+
const header = `| ${keys.map(k => this.humanizeKey(k)).join(' | ')} |`;
|
|
121
|
+
const separator = `| ${keys.map(() => '---').join(' | ')} |`;
|
|
122
|
+
const rows = data.map(item => `| ${keys.map(k => {
|
|
123
|
+
const val = item[k];
|
|
124
|
+
return String(val ?? '');
|
|
125
|
+
}).join(' | ')} |`);
|
|
126
|
+
return [header, separator, ...rows].join('\n');
|
|
127
|
+
}
|
|
128
|
+
objectToMarkdown(data) {
|
|
129
|
+
const lines = [];
|
|
130
|
+
for (const [key, value] of Object.entries(data)) {
|
|
131
|
+
if (value === null || value === undefined)
|
|
132
|
+
continue;
|
|
133
|
+
const formattedValue = this.formatMarkdownValue(value);
|
|
134
|
+
if (Array.isArray(value) && value.length > 0 && typeof value[0] === 'object') {
|
|
135
|
+
lines.push(`\n### ${this.humanizeKey(key)}`);
|
|
136
|
+
lines.push(this.tableToMarkdown(value));
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
lines.push(`**${this.humanizeKey(key)}:** ${formattedValue}`);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return lines.join('\n');
|
|
143
|
+
}
|
|
144
|
+
formatMarkdownValue(value) {
|
|
145
|
+
if (value === null || value === undefined)
|
|
146
|
+
return '(none)';
|
|
147
|
+
if (typeof value === 'boolean')
|
|
148
|
+
return value ? 'Yes' : 'No';
|
|
149
|
+
if (typeof value === 'object') {
|
|
150
|
+
if (Array.isArray(value))
|
|
151
|
+
return value.join(', ');
|
|
152
|
+
return JSON.stringify(value);
|
|
153
|
+
}
|
|
154
|
+
return String(value);
|
|
155
|
+
}
|
|
156
|
+
toYaml(obj, indent = 0) {
|
|
157
|
+
const spaces = ' '.repeat(indent);
|
|
158
|
+
if (obj === null || obj === undefined) {
|
|
159
|
+
return 'null';
|
|
160
|
+
}
|
|
161
|
+
if (typeof obj === 'string') {
|
|
162
|
+
if (obj.includes('\n') || obj.includes(':') || obj.includes('#')) {
|
|
163
|
+
return `|-\n${obj.split('\n').map(line => spaces + ' ' + line).join('\n')}`;
|
|
164
|
+
}
|
|
165
|
+
return obj;
|
|
166
|
+
}
|
|
167
|
+
if (typeof obj === 'number' || typeof obj === 'boolean') {
|
|
168
|
+
return String(obj);
|
|
169
|
+
}
|
|
170
|
+
if (Array.isArray(obj)) {
|
|
171
|
+
if (obj.length === 0)
|
|
172
|
+
return '[]';
|
|
173
|
+
return obj.map(item => {
|
|
174
|
+
const itemYaml = this.toYaml(item, indent + 1);
|
|
175
|
+
if (itemYaml.includes('\n')) {
|
|
176
|
+
return `\n${obj.map(i => spaces + '- ' + this.toYaml(i, indent + 1)).join('\n')}`;
|
|
177
|
+
}
|
|
178
|
+
return `${spaces}- ${itemYaml}`;
|
|
179
|
+
}).join('\n');
|
|
180
|
+
}
|
|
181
|
+
if (typeof obj === 'object') {
|
|
182
|
+
const entries = Object.entries(obj);
|
|
183
|
+
if (entries.length === 0)
|
|
184
|
+
return '{}';
|
|
185
|
+
return entries.map(([key, value]) => {
|
|
186
|
+
const valueYaml = this.toYaml(value, indent + 1);
|
|
187
|
+
if (valueYaml.includes('\n') && !valueYaml.startsWith('- ')) {
|
|
188
|
+
return `${spaces}${key}:\n${valueYaml}`;
|
|
189
|
+
}
|
|
190
|
+
return `${spaces}${key}: ${valueYaml}`;
|
|
191
|
+
}).join('\n');
|
|
192
|
+
}
|
|
193
|
+
return String(obj);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
exports.OutputFormatterService = OutputFormatterService;
|
|
197
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
198
|
+
//# sourceMappingURL=output-formatter.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output-formatter.service.js","sourceRoot":"","sources":["../../../src/infrastructure/formatters/output-formatter.service.ts"],"names":[],"mappings":"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"}
|
package/dist/main.d.ts
ADDED
package/dist/main.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
const nest_commander_1 = require("nest-commander");
|
|
5
|
+
const app_module_1 = require("./app.module");
|
|
6
|
+
async function bootstrap() {
|
|
7
|
+
await nest_commander_1.CommandFactory.run(app_module_1.AppModule, ['warn', 'error']);
|
|
8
|
+
}
|
|
9
|
+
bootstrap();
|
|
10
|
+
//# sourceMappingURL=main.js.map
|
package/dist/main.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";;;AACA,mDAAgD;AAChD,6CAAyC;AAEzC,KAAK,UAAU,SAAS;IACtB,MAAM,+BAAc,CAAC,GAAG,CAAC,sBAAS,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,EAAE,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { IFileSystem, IConfigParser, ILogger } from '../../../domain/interfaces';
|
|
2
|
+
export declare class MockFileSystem implements IFileSystem {
|
|
3
|
+
private files;
|
|
4
|
+
private directories;
|
|
5
|
+
exists(path: string): Promise<boolean>;
|
|
6
|
+
readFile(path: string): Promise<string>;
|
|
7
|
+
writeFile(path: string, content: string): Promise<void>;
|
|
8
|
+
readJson<T>(path: string): Promise<T>;
|
|
9
|
+
writeJson(path: string, data: unknown): Promise<void>;
|
|
10
|
+
ensureDir(path: string): Promise<void>;
|
|
11
|
+
readdirNames(path: string): Promise<string[]>;
|
|
12
|
+
remove(path: string): Promise<void>;
|
|
13
|
+
setFile(path: string, content: string): void;
|
|
14
|
+
setJsonFile(path: string, data: unknown): void;
|
|
15
|
+
setDirectory(path: string): void;
|
|
16
|
+
clear(): void;
|
|
17
|
+
getFilePaths(): string[];
|
|
18
|
+
getDirectoryPaths(): string[];
|
|
19
|
+
}
|
|
20
|
+
export declare class MockConfigParser implements IConfigParser {
|
|
21
|
+
parse(content: string): unknown;
|
|
22
|
+
stringify(data: unknown): string;
|
|
23
|
+
}
|
|
24
|
+
export declare class MockLogger implements ILogger {
|
|
25
|
+
private logs;
|
|
26
|
+
info(message: string, context?: Record<string, unknown>): void;
|
|
27
|
+
warn(message: string, context?: Record<string, unknown>): void;
|
|
28
|
+
error(message: string, context?: Record<string, unknown>): void;
|
|
29
|
+
debug(message: string, context?: Record<string, unknown>): void;
|
|
30
|
+
getLogs(): Array<{
|
|
31
|
+
level: string;
|
|
32
|
+
message: string;
|
|
33
|
+
context?: Record<string, unknown>;
|
|
34
|
+
}>;
|
|
35
|
+
clear(): void;
|
|
36
|
+
getLogsByLevel(level: string): Array<{
|
|
37
|
+
level: string;
|
|
38
|
+
message: string;
|
|
39
|
+
context?: Record<string, unknown>;
|
|
40
|
+
}>;
|
|
41
|
+
}
|
|
42
|
+
export declare function createMockFileSystem(): MockFileSystem;
|
|
43
|
+
export declare function createMockConfigParser(): MockConfigParser;
|
|
44
|
+
export declare function createMockLogger(): MockLogger;
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MockLogger = exports.MockConfigParser = exports.MockFileSystem = void 0;
|
|
4
|
+
exports.createMockFileSystem = createMockFileSystem;
|
|
5
|
+
exports.createMockConfigParser = createMockConfigParser;
|
|
6
|
+
exports.createMockLogger = createMockLogger;
|
|
7
|
+
class MockFileSystem {
|
|
8
|
+
constructor() {
|
|
9
|
+
this.files = new Map();
|
|
10
|
+
this.directories = new Set();
|
|
11
|
+
}
|
|
12
|
+
async exists(path) {
|
|
13
|
+
return this.files.has(path) || this.directories.has(path);
|
|
14
|
+
}
|
|
15
|
+
async readFile(path) {
|
|
16
|
+
const content = this.files.get(path);
|
|
17
|
+
if (content === undefined) {
|
|
18
|
+
throw new Error(`File not found: ${path}`);
|
|
19
|
+
}
|
|
20
|
+
return content;
|
|
21
|
+
}
|
|
22
|
+
async writeFile(path, content) {
|
|
23
|
+
this.files.set(path, content);
|
|
24
|
+
}
|
|
25
|
+
async readJson(path) {
|
|
26
|
+
const content = await this.readFile(path);
|
|
27
|
+
return JSON.parse(content);
|
|
28
|
+
}
|
|
29
|
+
async writeJson(path, data) {
|
|
30
|
+
await this.writeFile(path, JSON.stringify(data, null, 2));
|
|
31
|
+
}
|
|
32
|
+
async ensureDir(path) {
|
|
33
|
+
this.directories.add(path);
|
|
34
|
+
}
|
|
35
|
+
async readdirNames(path) {
|
|
36
|
+
const prefix = path.endsWith('/') ? path : path + '/';
|
|
37
|
+
const entries = [];
|
|
38
|
+
for (const key of this.files.keys()) {
|
|
39
|
+
if (key.startsWith(prefix) && key !== path) {
|
|
40
|
+
const remainder = key.slice(prefix.length);
|
|
41
|
+
const firstSlash = remainder.indexOf('/');
|
|
42
|
+
const entry = firstSlash === -1 ? remainder : remainder.slice(0, firstSlash);
|
|
43
|
+
if (!entries.includes(entry)) {
|
|
44
|
+
entries.push(entry);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
for (const dir of this.directories) {
|
|
49
|
+
if (dir.startsWith(prefix) && dir !== path) {
|
|
50
|
+
const remainder = dir.slice(prefix.length);
|
|
51
|
+
const firstSlash = remainder.indexOf('/');
|
|
52
|
+
const entry = firstSlash === -1 ? remainder : remainder.slice(0, firstSlash);
|
|
53
|
+
if (!entries.includes(entry)) {
|
|
54
|
+
entries.push(entry);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return entries;
|
|
59
|
+
}
|
|
60
|
+
async remove(path) {
|
|
61
|
+
this.files.delete(path);
|
|
62
|
+
this.directories.delete(path);
|
|
63
|
+
}
|
|
64
|
+
setFile(path, content) {
|
|
65
|
+
this.files.set(path, content);
|
|
66
|
+
}
|
|
67
|
+
setJsonFile(path, data) {
|
|
68
|
+
this.files.set(path, JSON.stringify(data, null, 2));
|
|
69
|
+
}
|
|
70
|
+
setDirectory(path) {
|
|
71
|
+
this.directories.add(path);
|
|
72
|
+
}
|
|
73
|
+
clear() {
|
|
74
|
+
this.files.clear();
|
|
75
|
+
this.directories.clear();
|
|
76
|
+
}
|
|
77
|
+
getFilePaths() {
|
|
78
|
+
return Array.from(this.files.keys());
|
|
79
|
+
}
|
|
80
|
+
getDirectoryPaths() {
|
|
81
|
+
return Array.from(this.directories);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
exports.MockFileSystem = MockFileSystem;
|
|
85
|
+
class MockConfigParser {
|
|
86
|
+
parse(content) {
|
|
87
|
+
try {
|
|
88
|
+
return JSON.parse(content);
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
return content;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
stringify(data) {
|
|
95
|
+
return JSON.stringify(data);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
exports.MockConfigParser = MockConfigParser;
|
|
99
|
+
class MockLogger {
|
|
100
|
+
constructor() {
|
|
101
|
+
this.logs = [];
|
|
102
|
+
}
|
|
103
|
+
info(message, context) {
|
|
104
|
+
this.logs.push({ level: 'INFO', message, context });
|
|
105
|
+
}
|
|
106
|
+
warn(message, context) {
|
|
107
|
+
this.logs.push({ level: 'WARN', message, context });
|
|
108
|
+
}
|
|
109
|
+
error(message, context) {
|
|
110
|
+
this.logs.push({ level: 'ERROR', message, context });
|
|
111
|
+
}
|
|
112
|
+
debug(message, context) {
|
|
113
|
+
this.logs.push({ level: 'DEBUG', message, context });
|
|
114
|
+
}
|
|
115
|
+
getLogs() {
|
|
116
|
+
return [...this.logs];
|
|
117
|
+
}
|
|
118
|
+
clear() {
|
|
119
|
+
this.logs = [];
|
|
120
|
+
}
|
|
121
|
+
getLogsByLevel(level) {
|
|
122
|
+
return this.logs.filter(l => l.level === level);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
exports.MockLogger = MockLogger;
|
|
126
|
+
function createMockFileSystem() {
|
|
127
|
+
return new MockFileSystem();
|
|
128
|
+
}
|
|
129
|
+
function createMockConfigParser() {
|
|
130
|
+
return new MockConfigParser();
|
|
131
|
+
}
|
|
132
|
+
function createMockLogger() {
|
|
133
|
+
return new MockLogger();
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/test/mocks/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@evolith/smart-cli",
|
|
3
|
+
"version": "0.0.1-beta",
|
|
4
|
+
"description": "Evolith Smart CLI - Governance, standards validation, and AI agent integration for satellite repositories",
|
|
5
|
+
"main": "dist/main.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"smart-cli": "./dist/main.js"
|
|
8
|
+
},
|
|
9
|
+
"directories": {
|
|
10
|
+
"doc": "docs"
|
|
11
|
+
},
|
|
12
|
+
"scripts": {
|
|
13
|
+
"build": "tsc",
|
|
14
|
+
"start": "node dist/main.js",
|
|
15
|
+
"start:dev": "tsc -w & node dist/main.js",
|
|
16
|
+
"test": "jest",
|
|
17
|
+
"test:watch": "jest --watch",
|
|
18
|
+
"test:cov": "jest --coverage",
|
|
19
|
+
"test:e2e": "jest --config ./test/jest-e2e.json",
|
|
20
|
+
"prepublishOnly": "npm run build"
|
|
21
|
+
},
|
|
22
|
+
"keywords": [
|
|
23
|
+
"evolith",
|
|
24
|
+
"sdk",
|
|
25
|
+
"cli",
|
|
26
|
+
"governance",
|
|
27
|
+
"standards",
|
|
28
|
+
"validation",
|
|
29
|
+
"adr",
|
|
30
|
+
"architecture-decision-records",
|
|
31
|
+
"mcp",
|
|
32
|
+
"model-context-protocol",
|
|
33
|
+
"ai-agents",
|
|
34
|
+
"satellite-repository",
|
|
35
|
+
"clean-architecture"
|
|
36
|
+
],
|
|
37
|
+
"homepage": "https://github.com/beyondnetcode/evolith_arch32#readme",
|
|
38
|
+
"author": "Beyondnet <dev@beyondnetcode.com>",
|
|
39
|
+
"license": "ISC",
|
|
40
|
+
"repository": {
|
|
41
|
+
"type": "git",
|
|
42
|
+
"url": "https://github.com/beyondnetcode/evolith_arch32.git",
|
|
43
|
+
"directory": "sdk/cli"
|
|
44
|
+
},
|
|
45
|
+
"engines": {
|
|
46
|
+
"node": ">=18.0.0"
|
|
47
|
+
},
|
|
48
|
+
"files": [
|
|
49
|
+
"dist/",
|
|
50
|
+
"shell/",
|
|
51
|
+
"templates/",
|
|
52
|
+
"README.md",
|
|
53
|
+
"ARCHITECTURE.md"
|
|
54
|
+
],
|
|
55
|
+
"dependencies": {
|
|
56
|
+
"@clack/prompts": "^1.5.1",
|
|
57
|
+
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
58
|
+
"@nestjs/common": "^11.1.24",
|
|
59
|
+
"@nestjs/core": "^11.1.24",
|
|
60
|
+
"chalk": "^4.1.2",
|
|
61
|
+
"chokidar": "^5.0.0",
|
|
62
|
+
"conf": "^15.1.0",
|
|
63
|
+
"fs-extra": "^11.3.5",
|
|
64
|
+
"nest-commander": "^3.20.1",
|
|
65
|
+
"ora": "^9.4.0",
|
|
66
|
+
"yaml": "^2.9.0"
|
|
67
|
+
},
|
|
68
|
+
"devDependencies": {
|
|
69
|
+
"@nestjs/testing": "^11.1.24",
|
|
70
|
+
"@types/conf": "^2.1.0",
|
|
71
|
+
"@types/fs-extra": "^11.0.4",
|
|
72
|
+
"@types/jest": "^30.0.0",
|
|
73
|
+
"@types/node": "^25.9.1",
|
|
74
|
+
"@types/yaml": "^1.9.6",
|
|
75
|
+
"jest": "^30.4.2",
|
|
76
|
+
"nest-commander-testing": "^3.5.1",
|
|
77
|
+
"ts-jest": "^29.4.11",
|
|
78
|
+
"typescript": "^6.0.3"
|
|
79
|
+
}
|
|
80
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Evolith Smart CLI Bash Completion
|
|
3
|
+
# Install: source this file or add to ~/.bashrc
|
|
4
|
+
# Also: smart-cli completion --install to auto-install
|
|
5
|
+
|
|
6
|
+
_smart_cli_completions() {
|
|
7
|
+
local cur prev words cword
|
|
8
|
+
COMPREPLY=()
|
|
9
|
+
cur="${COMP_WORDS[COMP_CWORD]}"
|
|
10
|
+
prev="${COMP_WORDS[COMP_CWORD-1]}"
|
|
11
|
+
|
|
12
|
+
# Top-level commands
|
|
13
|
+
COMMANDS="validate adr standards agents init mcp sdlc docs upgrade config completion help"
|
|
14
|
+
|
|
15
|
+
# Subcommands for each command
|
|
16
|
+
declare -A SUBCOMMANDS
|
|
17
|
+
SUBCOMMANDS[validate]="--format --output --satellite --core --ruleset"
|
|
18
|
+
SUBCOMMANDS[adr]="create list get update matrix"
|
|
19
|
+
SUBCOMMANDS[standards]="init list get validate export"
|
|
20
|
+
SUBCOMMANDS[agents]="install remove list validate upgrade menu"
|
|
21
|
+
SUBCOMMANDS[mcp]="serve version"
|
|
22
|
+
SUBCOMMANDS[sdlc]="handoff status list phases"
|
|
23
|
+
SUBCOMMANDS[config]="get set list delete"
|
|
24
|
+
SUBCOMMANDS[init]="--runtime --template --path"
|
|
25
|
+
SUBCOMMANDS[docs]="validate serve --serve"
|
|
26
|
+
|
|
27
|
+
# Global options
|
|
28
|
+
GLOBAL_OPTS="--help --version --verbose --debug --json --quiet"
|
|
29
|
+
|
|
30
|
+
# If we're completing a command (cur is a command name)
|
|
31
|
+
if [[ $cword -eq 1 ]]; then
|
|
32
|
+
COMPREPLY=($(compgen -W "$COMMANDS" -- "$cur"))
|
|
33
|
+
return 0
|
|
34
|
+
fi
|
|
35
|
+
|
|
36
|
+
# If prev is a command, show its subcommands/options
|
|
37
|
+
if [[ -n "${SUBCOMMANDS[$prev]}" ]]; then
|
|
38
|
+
COMPREPLY=($(compgen -W "${SUBCOMMANDS[$prev]}" -- "$cur"))
|
|
39
|
+
return 0
|
|
40
|
+
fi
|
|
41
|
+
|
|
42
|
+
# Check if we're past the command word
|
|
43
|
+
local cmd=""
|
|
44
|
+
for word in "${COMP_WORDS[@]:1}"; do
|
|
45
|
+
if [[ " ${COMMANDS} " == *" $word "* ]] && [[ -z "$cmd" ]]; then
|
|
46
|
+
cmd="$word"
|
|
47
|
+
fi
|
|
48
|
+
done
|
|
49
|
+
|
|
50
|
+
# Show options for the current command
|
|
51
|
+
if [[ -n "$cmd" ]] && [[ -n "${SUBCOMMANDS[$cmd]}" ]]; then
|
|
52
|
+
COMPREPLY=($(compgen -W "${SUBCOMMANDS[$cmd]}" -- "$cur"))
|
|
53
|
+
else
|
|
54
|
+
# Show global options
|
|
55
|
+
COMPREPLY=($(compgen -W "$GLOBAL_OPTS" -- "$cur"))
|
|
56
|
+
fi
|
|
57
|
+
|
|
58
|
+
return 0
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
complete -F _smart_cli_completions smart-cli
|
|
62
|
+
|
|
63
|
+
# Auto-install function
|
|
64
|
+
_smart_cli_install() {
|
|
65
|
+
local shell="$1"
|
|
66
|
+
if [[ "$shell" == "bash" ]]; then
|
|
67
|
+
local profile="${HOME}/.bashrc"
|
|
68
|
+
local line="source $(pwd)/shell/completion.bash"
|
|
69
|
+
if ! grep -q "$line" "$profile" 2>/dev/null; then
|
|
70
|
+
echo "Adding completion to $profile"
|
|
71
|
+
echo "$line" >> "$profile"
|
|
72
|
+
fi
|
|
73
|
+
echo "Bash completion installed. Reload shell or run: source $profile"
|
|
74
|
+
elif [[ "$shell" == "zsh" ]]; then
|
|
75
|
+
local profile="${HOME}/.zshrc"
|
|
76
|
+
local line="source $(pwd)/shell/completion.zsh"
|
|
77
|
+
if ! grep -q "$line" "$profile" 2>/dev/null; then
|
|
78
|
+
echo "Adding completion to $profile"
|
|
79
|
+
echo "$line" >> "$profile"
|
|
80
|
+
fi
|
|
81
|
+
echo "Zsh completion installed. Reload shell or run: source $profile"
|
|
82
|
+
else
|
|
83
|
+
echo "Usage: smart-cli completion --install [bash|zsh]"
|
|
84
|
+
fi
|
|
85
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
#!/bin/fish
|
|
2
|
+
# Evolith Smart CLI Fish Completion
|
|
3
|
+
# Install: cp this file to ~/.config/fish/completions/smart-cli.fish
|
|
4
|
+
|
|
5
|
+
complete -c smart-cli -f
|
|
6
|
+
|
|
7
|
+
# Top-level commands
|
|
8
|
+
complete -c smart-cli -a 'validate' -d 'Validate repository'
|
|
9
|
+
complete -c smart-cli -a 'adr' -d 'Manage ADRs'
|
|
10
|
+
complete -c smart-cli -a 'standards' -d 'Manage standards'
|
|
11
|
+
complete -c smart-cli -a 'agents' -d 'Manage agents'
|
|
12
|
+
complete -c smart-cli -a 'init' -d 'Initialize repository'
|
|
13
|
+
complete -c smart-cli -a 'mcp' -d 'Start MCP server'
|
|
14
|
+
complete -c smart-cli -a 'sdlc' -d 'SDLC phase management'
|
|
15
|
+
complete -c smart-cli -a 'docs' -d 'Documentation'
|
|
16
|
+
complete -c smart-cli -a 'config' -d 'Configuration'
|
|
17
|
+
complete -c smart-cli -a 'upgrade' -d 'Upgrade CLI'
|
|
18
|
+
complete -c smart-cli -a 'completion' -d 'Shell completions'
|
|
19
|
+
complete -c smart-cli -a 'help' -d 'Show help'
|
|
20
|
+
|
|
21
|
+
# validate options
|
|
22
|
+
complete -c smart-cli -n '__fish_seen_subcommand_from validate' -l format -d 'Output format' -a 'json table yaml'
|
|
23
|
+
complete -c smart-cli -n '__fish_seen_subcommand_from validate' -l output -d 'Output file'
|
|
24
|
+
complete -c smart-cli -n '__fish_seen_subcommand_from validate' -l satellite -d 'Satellite path'
|
|
25
|
+
complete -c smart-cli -n '__fish_seen_subcommand_from validate' -l core -d 'Core path'
|
|
26
|
+
complete -c smart-cli -n '__fish_seen_subcommand_from validate' -l ruleset -d 'Specific ruleset'
|
|
27
|
+
|
|
28
|
+
# adr subcommands
|
|
29
|
+
complete -c smart-cli -n '__fish_seen_subcommand_from adr' -a 'create' -d 'Create ADR'
|
|
30
|
+
complete -c smart-cli -n '__fish_seen_subcommand_from adr' -a 'list' -d 'List ADRs'
|
|
31
|
+
complete -c smart-cli -n '__fish_seen_subcommand_from adr' -a 'get' -d 'Get ADR details'
|
|
32
|
+
complete -c smart-cli -n '__fish_seen_subcommand_from adr' -a 'update' -d 'Update ADR'
|
|
33
|
+
complete -c smart-cli -n '__fish_seen_subcommand_from adr' -a 'matrix' -d 'Show ADR matrix'
|
|
34
|
+
|
|
35
|
+
# standards subcommands
|
|
36
|
+
complete -c smart-cli -n '__fish_seen_subcommand_from standards' -a 'init' -d 'Initialize'
|
|
37
|
+
complete -c smart-cli -n '__fish_seen_subcommand_from standards' -a 'list' -d 'List standards'
|
|
38
|
+
complete -c smart-cli -n '__fish_seen_subcommand_from standards' -a 'get' -d 'Get standard'
|
|
39
|
+
complete -c smart-cli -n '__fish_seen_subcommand_from standards' -a 'validate' -d 'Validate'
|
|
40
|
+
complete -c smart-cli -n '__fish_seen_subcommand_from standards' -a 'export' -d 'Export standard'
|
|
41
|
+
|
|
42
|
+
# agents subcommands
|
|
43
|
+
complete -c smart-cli -n '__fish_seen_subcommand_from agents' -a 'install' -d 'Install agent'
|
|
44
|
+
complete -c smart-cli -n '__fish_seen_subcommand_from agents' -a 'remove' -d 'Remove agent'
|
|
45
|
+
complete -c smart-cli -n '__fish_seen_subcommand_from agents' -a 'list' -d 'List agents'
|
|
46
|
+
complete -c smart-cli -n '__fish_seen_subcommand_from agents' -a 'validate' -d 'Validate agent'
|
|
47
|
+
complete -c smart-cli -n '__fish_seen_subcommand_from agents' -a 'upgrade' -d 'Upgrade agent'
|
|
48
|
+
complete -c smart-cli -n '__fish_seen_subcommand_from agents' -a 'menu' -d 'Interactive menu'
|
|
49
|
+
|
|
50
|
+
# mcp subcommands
|
|
51
|
+
complete -c smart-cli -n '__fish_seen_subcommand_from mcp' -a 'serve' -d 'Start MCP server'
|
|
52
|
+
complete -c smart-cli -n '__fish_seen_subcommand_from mcp' -a 'version' -d 'Show MCP version'
|
|
53
|
+
|
|
54
|
+
# sdlc subcommands
|
|
55
|
+
complete -c smart-cli -n '__fish_seen_subcommand_from sdlc' -a 'handoff' -d 'Generate handoff'
|
|
56
|
+
complete -c smart-cli -n '__fish_seen_subcommand_from sdlc' -a 'status' -d 'Show status'
|
|
57
|
+
complete -c smart-cli -n '__fish_seen_subcommand_from sdlc' -a 'list' -d 'List phases'
|
|
58
|
+
complete -c smart-cli -n '__fish_seen_subcommand_from sdlc' -a 'phases' -d 'Show phases'
|
|
59
|
+
|
|
60
|
+
# config subcommands
|
|
61
|
+
complete -c smart-cli -n '__fish_seen_subcommand_from config' -a 'get' -d 'Get config value'
|
|
62
|
+
complete -c smart-cli -n '__fish_seen_subcommand_from config' -a 'set' -d 'Set config value'
|
|
63
|
+
complete -c smart-cli -n '__fish_seen_subcommand_from config' -a 'list' -d 'List config'
|
|
64
|
+
complete -c smart-cli -n '__fish_seen_subcommand_from config' -a 'delete' -d 'Delete config'
|
|
65
|
+
|
|
66
|
+
# Global options
|
|
67
|
+
complete -c smart-cli -l help -d 'Show help'
|
|
68
|
+
complete -c smart-cli -l version -d 'Show version'
|
|
69
|
+
complete -c smart-cli -l verbose -d 'Verbose output'
|
|
70
|
+
complete -c smart-cli -l debug -d 'Debug mode'
|
|
71
|
+
complete -c smart-cli -l json -d 'JSON output'
|
|
72
|
+
complete -c smart-cli -l quiet -d 'Quiet mode'
|