kodu 1.2.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +36 -68
- package/README.md +97 -96
- package/dist/package.json +1 -2
- package/dist/src/app.module.js +0 -8
- package/dist/src/app.module.js.map +1 -1
- package/dist/src/commands/init/init.command.d.ts +2 -9
- package/dist/src/commands/init/init.command.js +15 -241
- package/dist/src/commands/init/init.command.js.map +1 -1
- package/dist/src/commands/pack/pack.command.d.ts +7 -0
- package/dist/src/commands/pack/pack.command.js +59 -3
- package/dist/src/commands/pack/pack.command.js.map +1 -1
- package/dist/src/core/config/config.schema.d.ts +0 -46
- package/dist/src/core/config/config.schema.js +1 -51
- package/dist/src/core/config/config.schema.js.map +1 -1
- package/dist/src/core/config/config.service.js +2 -2
- package/dist/src/core/config/config.service.js.map +1 -1
- package/dist/src/core/config/prompt.service.d.ts +1 -4
- package/dist/src/core/config/prompt.service.js +4 -17
- package/dist/src/core/config/prompt.service.js.map +1 -1
- package/dist/src/shared/constants.d.ts +0 -4
- package/dist/src/shared/constants.js +1 -5
- package/dist/src/shared/constants.js.map +1 -1
- package/dist/src/shared/git/git.module.js +0 -2
- package/dist/src/shared/git/git.module.js.map +1 -1
- package/dist/src/shared/git/git.service.d.ts +0 -8
- package/dist/src/shared/git/git.service.js +2 -34
- package/dist/src/shared/git/git.service.js.map +1 -1
- package/dist/src/shared/tokenizer/tokenizer.module.js +0 -2
- package/dist/src/shared/tokenizer/tokenizer.module.js.map +1 -1
- package/dist/src/shared/tokenizer/tokenizer.service.d.ts +0 -6
- package/dist/src/shared/tokenizer/tokenizer.service.js +8 -38
- package/dist/src/shared/tokenizer/tokenizer.service.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/kodu.schema.json +0 -139
- package/package.json +1 -2
- package/src/app.module.ts +0 -8
- package/src/commands/init/init.command.ts +15 -310
- package/src/commands/pack/pack.command.ts +56 -3
- package/src/core/config/config.schema.ts +1 -68
- package/src/core/config/config.service.ts +2 -2
- package/src/core/config/prompt.service.ts +4 -26
- package/src/shared/constants.ts +0 -4
- package/src/shared/git/git.module.ts +0 -2
- package/src/shared/git/git.service.ts +1 -33
- package/src/shared/tokenizer/tokenizer.module.ts +0 -2
- package/src/shared/tokenizer/tokenizer.service.ts +9 -39
- package/.kodu/prompts/.keep +0 -0
- package/.kodu/prompts/commit.md +0 -9
- package/.kodu/prompts/pack.md +0 -7
- package/.kodu/prompts/review-bug.md +0 -6
- package/.kodu/prompts/review-security.md +0 -6
- package/.kodu/prompts/review-style.md +0 -6
- package/.opencode/command/openspec-apply.md +0 -24
- package/.opencode/command/openspec-archive.md +0 -27
- package/.opencode/command/openspec-proposal.md +0 -29
- package/.opencode/skills/kodu-ops/SKILL.md +0 -184
- package/dist/src/commands/commit/commit.command.d.ts +0 -18
- package/dist/src/commands/commit/commit.command.js +0 -149
- package/dist/src/commands/commit/commit.command.js.map +0 -1
- package/dist/src/commands/commit/commit.module.d.ts +0 -2
- package/dist/src/commands/commit/commit.module.js +0 -25
- package/dist/src/commands/commit/commit.module.js.map +0 -1
- package/dist/src/commands/ops/ops.command.d.ts +0 -4
- package/dist/src/commands/ops/ops.command.js +0 -39
- package/dist/src/commands/ops/ops.command.js.map +0 -1
- package/dist/src/commands/ops/ops.module.d.ts +0 -2
- package/dist/src/commands/ops/ops.module.js +0 -33
- package/dist/src/commands/ops/ops.module.js.map +0 -1
- package/dist/src/commands/ops/ops.types.d.ts +0 -13
- package/dist/src/commands/ops/ops.types.js +0 -12
- package/dist/src/commands/ops/ops.types.js.map +0 -1
- package/dist/src/commands/ops/ops.utils.d.ts +0 -13
- package/dist/src/commands/ops/ops.utils.js +0 -121
- package/dist/src/commands/ops/ops.utils.js.map +0 -1
- package/dist/src/commands/ops/subcommands/ops-env.command.d.ts +0 -24
- package/dist/src/commands/ops/subcommands/ops-env.command.js +0 -156
- package/dist/src/commands/ops/subcommands/ops-env.command.js.map +0 -1
- package/dist/src/commands/ops/subcommands/ops-routes.command.d.ts +0 -22
- package/dist/src/commands/ops/subcommands/ops-routes.command.js +0 -203
- package/dist/src/commands/ops/subcommands/ops-routes.command.js.map +0 -1
- package/dist/src/commands/ops/subcommands/ops-service.command.d.ts +0 -22
- package/dist/src/commands/ops/subcommands/ops-service.command.js +0 -169
- package/dist/src/commands/ops/subcommands/ops-service.command.js.map +0 -1
- package/dist/src/commands/ops/subcommands/ops-sysinfo.command.d.ts +0 -14
- package/dist/src/commands/ops/subcommands/ops-sysinfo.command.js +0 -75
- package/dist/src/commands/ops/subcommands/ops-sysinfo.command.js.map +0 -1
- package/dist/src/commands/review/review.command.d.ts +0 -26
- package/dist/src/commands/review/review.command.js +0 -205
- package/dist/src/commands/review/review.command.js.map +0 -1
- package/dist/src/commands/review/review.module.d.ts +0 -2
- package/dist/src/commands/review/review.module.js +0 -26
- package/dist/src/commands/review/review.module.js.map +0 -1
- package/dist/src/core/config/default-prompts.d.ts +0 -9
- package/dist/src/core/config/default-prompts.js +0 -49
- package/dist/src/core/config/default-prompts.js.map +0 -1
- package/dist/src/shared/ai/ai.module.d.ts +0 -2
- package/dist/src/shared/ai/ai.module.js +0 -23
- package/dist/src/shared/ai/ai.module.js.map +0 -1
- package/dist/src/shared/ai/ai.service.d.ts +0 -22
- package/dist/src/shared/ai/ai.service.js +0 -164
- package/dist/src/shared/ai/ai.service.js.map +0 -1
- package/dist/src/shared/ssh/ssh.module.d.ts +0 -2
- package/dist/src/shared/ssh/ssh.module.js +0 -21
- package/dist/src/shared/ssh/ssh.module.js.map +0 -1
- package/dist/src/shared/ssh/ssh.service.d.ts +0 -11
- package/dist/src/shared/ssh/ssh.service.js +0 -53
- package/dist/src/shared/ssh/ssh.service.js.map +0 -1
- package/dist/tsconfig.tsbuildinfo +0 -1
- package/src/commands/commit/commit.command.ts +0 -139
- package/src/commands/commit/commit.module.ts +0 -12
- package/src/commands/ops/ops.command.ts +0 -30
- package/src/commands/ops/ops.module.ts +0 -20
- package/src/commands/ops/ops.types.ts +0 -24
- package/src/commands/ops/ops.utils.ts +0 -160
- package/src/commands/ops/subcommands/ops-env.command.ts +0 -165
- package/src/commands/ops/subcommands/ops-routes.command.ts +0 -221
- package/src/commands/ops/subcommands/ops-service.command.ts +0 -190
- package/src/commands/ops/subcommands/ops-sysinfo.command.ts +0 -77
- package/src/commands/review/review.command.ts +0 -199
- package/src/commands/review/review.module.ts +0 -13
- package/src/core/config/default-prompts.ts +0 -53
- package/src/shared/ai/ai.module.ts +0 -10
- package/src/shared/ai/ai.service.ts +0 -216
- package/src/shared/ssh/ssh.module.ts +0 -8
- package/src/shared/ssh/ssh.service.ts +0 -61
|
@@ -1,205 +0,0 @@
|
|
|
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 __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
-
};
|
|
11
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
-
};
|
|
14
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
exports.ReviewCommand = void 0;
|
|
16
|
-
const promises_1 = require("node:fs/promises");
|
|
17
|
-
const clipboardy_1 = __importDefault(require("clipboardy"));
|
|
18
|
-
const nest_commander_1 = require("nest-commander");
|
|
19
|
-
const ui_service_1 = require("../../core/ui/ui.service");
|
|
20
|
-
const ai_service_1 = require("../../shared/ai/ai.service");
|
|
21
|
-
const constants_1 = require("../../shared/constants");
|
|
22
|
-
const git_service_1 = require("../../shared/git/git.service");
|
|
23
|
-
const tokenizer_service_1 = require("../../shared/tokenizer/tokenizer.service");
|
|
24
|
-
const DEFAULT_MODE = 'bug';
|
|
25
|
-
let ReviewCommand = class ReviewCommand extends nest_commander_1.CommandRunner {
|
|
26
|
-
ui;
|
|
27
|
-
git;
|
|
28
|
-
tokenizer;
|
|
29
|
-
ai;
|
|
30
|
-
constructor(ui, git, tokenizer, ai) {
|
|
31
|
-
super();
|
|
32
|
-
this.ui = ui;
|
|
33
|
-
this.git = git;
|
|
34
|
-
this.tokenizer = tokenizer;
|
|
35
|
-
this.ai = ai;
|
|
36
|
-
}
|
|
37
|
-
parseMode(value) {
|
|
38
|
-
const availableModes = this.ai.getAvailableReviewModes();
|
|
39
|
-
if (availableModes.includes(value)) {
|
|
40
|
-
return value;
|
|
41
|
-
}
|
|
42
|
-
this.ui.log.warn(`Mode "${value}" not found. Available modes: ${availableModes.join(', ')}. Using default mode: ${DEFAULT_MODE}`);
|
|
43
|
-
return DEFAULT_MODE;
|
|
44
|
-
}
|
|
45
|
-
parseCopy() {
|
|
46
|
-
return true;
|
|
47
|
-
}
|
|
48
|
-
parseCi() {
|
|
49
|
-
return true;
|
|
50
|
-
}
|
|
51
|
-
parseOutput(value) {
|
|
52
|
-
return value;
|
|
53
|
-
}
|
|
54
|
-
async run(_inputs, options = {}) {
|
|
55
|
-
const ciMode = Boolean(options.ci);
|
|
56
|
-
const spinner = ciMode
|
|
57
|
-
? undefined
|
|
58
|
-
: this.ui.createSpinner({ text: 'Collecting diff from git...' }).start();
|
|
59
|
-
const logProgress = (text) => {
|
|
60
|
-
if (ciMode) {
|
|
61
|
-
return;
|
|
62
|
-
}
|
|
63
|
-
if (spinner) {
|
|
64
|
-
spinner.text = text;
|
|
65
|
-
return;
|
|
66
|
-
}
|
|
67
|
-
this.ui.log.info(text);
|
|
68
|
-
};
|
|
69
|
-
const finishProgress = (text) => {
|
|
70
|
-
if (ciMode) {
|
|
71
|
-
return;
|
|
72
|
-
}
|
|
73
|
-
if (spinner) {
|
|
74
|
-
spinner.success(text);
|
|
75
|
-
return;
|
|
76
|
-
}
|
|
77
|
-
this.ui.log.success(text);
|
|
78
|
-
};
|
|
79
|
-
try {
|
|
80
|
-
if (!this.ai.hasApiKey()) {
|
|
81
|
-
const envName = this.ai.getApiKeyEnvName();
|
|
82
|
-
if (spinner) {
|
|
83
|
-
spinner.stop('AI key not found');
|
|
84
|
-
}
|
|
85
|
-
else {
|
|
86
|
-
this.ui.log.error('AI key not found');
|
|
87
|
-
}
|
|
88
|
-
this.ui.log.warn(`'review' command requires AI key to work.`);
|
|
89
|
-
this.ui.log.info(`Set key: export ${envName}=<your_key>`);
|
|
90
|
-
this.ui.log.info(`Environment variable name is configured via llm.apiKeyEnv in kodu.json`);
|
|
91
|
-
process.exitCode = 1;
|
|
92
|
-
return;
|
|
93
|
-
}
|
|
94
|
-
await this.git.ensureRepo();
|
|
95
|
-
const hasStaged = await this.git.hasStagedChanges();
|
|
96
|
-
if (!hasStaged) {
|
|
97
|
-
if (spinner) {
|
|
98
|
-
spinner.stop('No staged changes');
|
|
99
|
-
}
|
|
100
|
-
else {
|
|
101
|
-
this.ui.log.info('No staged changes');
|
|
102
|
-
}
|
|
103
|
-
this.ui.log.warn('First run git add for the required files.');
|
|
104
|
-
return;
|
|
105
|
-
}
|
|
106
|
-
const diff = await this.git.getStagedDiff();
|
|
107
|
-
if (!diff.trim()) {
|
|
108
|
-
if (spinner) {
|
|
109
|
-
spinner.stop('Diff is empty - possibly everything excluded by packer.ignore');
|
|
110
|
-
}
|
|
111
|
-
else {
|
|
112
|
-
this.ui.log.info('Diff is empty - possibly everything excluded by packer.ignore');
|
|
113
|
-
}
|
|
114
|
-
this.ui.log.warn('Diff is empty: all changes fell into packer.ignore exclusions.');
|
|
115
|
-
return;
|
|
116
|
-
}
|
|
117
|
-
const tokens = this.tokenizer.count(diff);
|
|
118
|
-
if (tokens.tokens > constants_1.WARNING_TOKEN_THRESHOLD) {
|
|
119
|
-
this.ui.log.warn(`Large context (${tokens.tokens} tokens, ~$${tokens.usdEstimate.toFixed(2)}). Review may cost more.`);
|
|
120
|
-
}
|
|
121
|
-
logProgress('Requesting AI...');
|
|
122
|
-
const mode = options.mode ?? DEFAULT_MODE;
|
|
123
|
-
const result = await this.ai.reviewDiff(diff, mode);
|
|
124
|
-
finishProgress('Review ready');
|
|
125
|
-
console.log(result.text);
|
|
126
|
-
await this.writeOutput(options.output, result.text, ciMode);
|
|
127
|
-
if (options.copy) {
|
|
128
|
-
await this.copyText(result.text, ciMode);
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
catch (error) {
|
|
132
|
-
if (spinner) {
|
|
133
|
-
spinner.error('Review error');
|
|
134
|
-
}
|
|
135
|
-
else {
|
|
136
|
-
this.ui.log.error('Review error');
|
|
137
|
-
}
|
|
138
|
-
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
139
|
-
this.ui.log.error(message);
|
|
140
|
-
process.exitCode = 1;
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
async writeOutput(target, payload, ciMode) {
|
|
144
|
-
if (!target) {
|
|
145
|
-
return;
|
|
146
|
-
}
|
|
147
|
-
await (0, promises_1.writeFile)(target, payload, { encoding: 'utf8' });
|
|
148
|
-
if (!ciMode) {
|
|
149
|
-
this.ui.log.success(`Result saved to ${target}`);
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
async copyText(text, ciMode) {
|
|
153
|
-
if (ciMode) {
|
|
154
|
-
this.ui.log.warn('--copy ignored in CI mode');
|
|
155
|
-
return;
|
|
156
|
-
}
|
|
157
|
-
await clipboardy_1.default.write(text);
|
|
158
|
-
this.ui.log.success('Result copied to clipboard');
|
|
159
|
-
}
|
|
160
|
-
};
|
|
161
|
-
exports.ReviewCommand = ReviewCommand;
|
|
162
|
-
__decorate([
|
|
163
|
-
(0, nest_commander_1.Option)({
|
|
164
|
-
flags: '-m, --mode <mode>',
|
|
165
|
-
description: 'Review mode: bug | style | security | <custom-mode>',
|
|
166
|
-
}),
|
|
167
|
-
__metadata("design:type", Function),
|
|
168
|
-
__metadata("design:paramtypes", [String]),
|
|
169
|
-
__metadata("design:returntype", String)
|
|
170
|
-
], ReviewCommand.prototype, "parseMode", null);
|
|
171
|
-
__decorate([
|
|
172
|
-
(0, nest_commander_1.Option)({ flags: '-c, --copy', description: 'Copy result to clipboard' }),
|
|
173
|
-
__metadata("design:type", Function),
|
|
174
|
-
__metadata("design:paramtypes", []),
|
|
175
|
-
__metadata("design:returntype", Boolean)
|
|
176
|
-
], ReviewCommand.prototype, "parseCopy", null);
|
|
177
|
-
__decorate([
|
|
178
|
-
(0, nest_commander_1.Option)({
|
|
179
|
-
flags: '--ci',
|
|
180
|
-
description: 'CI mode: no spinner and no buffering',
|
|
181
|
-
}),
|
|
182
|
-
__metadata("design:type", Function),
|
|
183
|
-
__metadata("design:paramtypes", []),
|
|
184
|
-
__metadata("design:returntype", Boolean)
|
|
185
|
-
], ReviewCommand.prototype, "parseCi", null);
|
|
186
|
-
__decorate([
|
|
187
|
-
(0, nest_commander_1.Option)({
|
|
188
|
-
flags: '-o, --output <path>',
|
|
189
|
-
description: 'Save final review to file',
|
|
190
|
-
}),
|
|
191
|
-
__metadata("design:type", Function),
|
|
192
|
-
__metadata("design:paramtypes", [String]),
|
|
193
|
-
__metadata("design:returntype", String)
|
|
194
|
-
], ReviewCommand.prototype, "parseOutput", null);
|
|
195
|
-
exports.ReviewCommand = ReviewCommand = __decorate([
|
|
196
|
-
(0, nest_commander_1.Command)({
|
|
197
|
-
name: 'review',
|
|
198
|
-
description: 'AI review for staged changes',
|
|
199
|
-
}),
|
|
200
|
-
__metadata("design:paramtypes", [ui_service_1.UiService,
|
|
201
|
-
git_service_1.GitService,
|
|
202
|
-
tokenizer_service_1.TokenizerService,
|
|
203
|
-
ai_service_1.AiService])
|
|
204
|
-
], ReviewCommand);
|
|
205
|
-
//# sourceMappingURL=review.command.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"review.command.js","sourceRoot":"","sources":["../../../../src/commands/review/review.command.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,26 +0,0 @@
|
|
|
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
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.ReviewModule = void 0;
|
|
10
|
-
const common_1 = require("@nestjs/common");
|
|
11
|
-
const config_module_1 = require("../../core/config/config.module");
|
|
12
|
-
const ui_module_1 = require("../../core/ui/ui.module");
|
|
13
|
-
const ai_module_1 = require("../../shared/ai/ai.module");
|
|
14
|
-
const git_module_1 = require("../../shared/git/git.module");
|
|
15
|
-
const tokenizer_module_1 = require("../../shared/tokenizer/tokenizer.module");
|
|
16
|
-
const review_command_1 = require("./review.command");
|
|
17
|
-
let ReviewModule = class ReviewModule {
|
|
18
|
-
};
|
|
19
|
-
exports.ReviewModule = ReviewModule;
|
|
20
|
-
exports.ReviewModule = ReviewModule = __decorate([
|
|
21
|
-
(0, common_1.Module)({
|
|
22
|
-
imports: [config_module_1.ConfigModule, ui_module_1.UiModule, git_module_1.GitModule, tokenizer_module_1.TokenizerModule, ai_module_1.AiModule],
|
|
23
|
-
providers: [review_command_1.ReviewCommand],
|
|
24
|
-
})
|
|
25
|
-
], ReviewModule);
|
|
26
|
-
//# sourceMappingURL=review.module.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"review.module.js","sourceRoot":"","sources":["../../../../src/commands/review/review.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,mEAA+D;AAC/D,uDAAmD;AACnD,yDAAqD;AACrD,4DAAwD;AACxD,8EAA0E;AAC1E,qDAAiD;AAM1C,IAAM,YAAY,GAAlB,MAAM,YAAY;CAAG,CAAA;AAAf,oCAAY;uBAAZ,YAAY;IAJxB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,4BAAY,EAAE,oBAAQ,EAAE,sBAAS,EAAE,kCAAe,EAAE,oBAAQ,CAAC;QACvE,SAAS,EAAE,CAAC,8BAAa,CAAC;KAC3B,CAAC;GACW,YAAY,CAAG"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
export declare const DEFAULT_REVIEW_PROMPTS: {
|
|
2
|
-
readonly bug: "You are a strict code reviewer. Response format: concise markdown with bullet points.\nMode: {mode}. Find potential bugs, logical errors, and regressions.\nProvide a concise list of issues and recommendations. If no critical issues found, state that.\n\nDiff:\n{diff}";
|
|
3
|
-
readonly style: "You are a strict code reviewer. Response format: concise markdown with bullet points.\nMode: {mode}. Check readability, consistency, formatting, and naming.\nProvide a concise list of issues and recommendations. If no critical issues found, state that.\n\nDiff:\n{diff}";
|
|
4
|
-
readonly security: "You are a strict code reviewer. Response format: concise markdown with bullet points.\nMode: {mode}. Find vulnerabilities, secret leaks, improper permission checks.\nProvide a concise list of issues and recommendations. If no critical issues found, state that.\n\nDiff:\n{diff}";
|
|
5
|
-
};
|
|
6
|
-
export declare const DEFAULT_COMMIT_PROMPT = "You generate Conventional Commit messages.\nRules:\n- Format: <type>(<optional scope>): <subject>\n- Lowercase subject, no trailing period.\n- Keep under 70 characters.\n- Summarize the diff accurately.\n\nDiff:\n{diff}";
|
|
7
|
-
export declare const DEFAULT_PACK_PROMPT = "Project context below. Keep instructions concise.\n\nFiles packed ({{tokenCount}} tokens, ~{{usdEstimate}}):\n{{fileList}}\n\nContext:\n{{context}}";
|
|
8
|
-
export declare const STANDARD_REVIEW_MODES: readonly ["bug", "style", "security"];
|
|
9
|
-
export declare function replacePromptVariables(prompt: string, variables: Record<string, string>): string;
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.STANDARD_REVIEW_MODES = exports.DEFAULT_PACK_PROMPT = exports.DEFAULT_COMMIT_PROMPT = exports.DEFAULT_REVIEW_PROMPTS = void 0;
|
|
4
|
-
exports.replacePromptVariables = replacePromptVariables;
|
|
5
|
-
exports.DEFAULT_REVIEW_PROMPTS = {
|
|
6
|
-
bug: `You are a strict code reviewer. Response format: concise markdown with bullet points.
|
|
7
|
-
Mode: {mode}. Find potential bugs, logical errors, and regressions.
|
|
8
|
-
Provide a concise list of issues and recommendations. If no critical issues found, state that.
|
|
9
|
-
|
|
10
|
-
Diff:
|
|
11
|
-
{diff}`,
|
|
12
|
-
style: `You are a strict code reviewer. Response format: concise markdown with bullet points.
|
|
13
|
-
Mode: {mode}. Check readability, consistency, formatting, and naming.
|
|
14
|
-
Provide a concise list of issues and recommendations. If no critical issues found, state that.
|
|
15
|
-
|
|
16
|
-
Diff:
|
|
17
|
-
{diff}`,
|
|
18
|
-
security: `You are a strict code reviewer. Response format: concise markdown with bullet points.
|
|
19
|
-
Mode: {mode}. Find vulnerabilities, secret leaks, improper permission checks.
|
|
20
|
-
Provide a concise list of issues and recommendations. If no critical issues found, state that.
|
|
21
|
-
|
|
22
|
-
Diff:
|
|
23
|
-
{diff}`,
|
|
24
|
-
};
|
|
25
|
-
exports.DEFAULT_COMMIT_PROMPT = `You generate Conventional Commit messages.
|
|
26
|
-
Rules:
|
|
27
|
-
- Format: <type>(<optional scope>): <subject>
|
|
28
|
-
- Lowercase subject, no trailing period.
|
|
29
|
-
- Keep under 70 characters.
|
|
30
|
-
- Summarize the diff accurately.
|
|
31
|
-
|
|
32
|
-
Diff:
|
|
33
|
-
{diff}`;
|
|
34
|
-
exports.DEFAULT_PACK_PROMPT = `Project context below. Keep instructions concise.
|
|
35
|
-
|
|
36
|
-
Files packed ({{tokenCount}} tokens, ~{{usdEstimate}}):
|
|
37
|
-
{{fileList}}
|
|
38
|
-
|
|
39
|
-
Context:
|
|
40
|
-
{{context}}`;
|
|
41
|
-
exports.STANDARD_REVIEW_MODES = ['bug', 'style', 'security'];
|
|
42
|
-
function replacePromptVariables(prompt, variables) {
|
|
43
|
-
let result = prompt;
|
|
44
|
-
for (const [key, value] of Object.entries(variables)) {
|
|
45
|
-
result = result.replace(new RegExp(`\\{${key}\\}`, 'g'), value);
|
|
46
|
-
}
|
|
47
|
-
return result;
|
|
48
|
-
}
|
|
49
|
-
//# sourceMappingURL=default-prompts.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"default-prompts.js","sourceRoot":"","sources":["../../../../src/core/config/default-prompts.ts"],"names":[],"mappings":";;;AA2CA,wDASC;AApDY,QAAA,sBAAsB,GAAG;IACpC,GAAG,EAAE;;;;;OAKA;IAEL,KAAK,EAAE;;;;;OAKF;IAEL,QAAQ,EAAE;;;;;OAKL;CACG,CAAC;AAEE,QAAA,qBAAqB,GAAG;;;;;;;;OAQ9B,CAAC;AAEK,QAAA,mBAAmB,GAAG;;;;;;YAMvB,CAAC;AAEA,QAAA,qBAAqB,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,CAAU,CAAC;AAE3E,SAAgB,sBAAsB,CACpC,MAAc,EACd,SAAiC;IAEjC,IAAI,MAAM,GAAG,MAAM,CAAC;IACpB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QACrD,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,KAAK,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -1,23 +0,0 @@
|
|
|
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
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.AiModule = void 0;
|
|
10
|
-
const common_1 = require("@nestjs/common");
|
|
11
|
-
const config_module_1 = require("../../core/config/config.module");
|
|
12
|
-
const ai_service_1 = require("./ai.service");
|
|
13
|
-
let AiModule = class AiModule {
|
|
14
|
-
};
|
|
15
|
-
exports.AiModule = AiModule;
|
|
16
|
-
exports.AiModule = AiModule = __decorate([
|
|
17
|
-
(0, common_1.Module)({
|
|
18
|
-
imports: [config_module_1.ConfigModule],
|
|
19
|
-
providers: [ai_service_1.AiService],
|
|
20
|
-
exports: [ai_service_1.AiService],
|
|
21
|
-
})
|
|
22
|
-
], AiModule);
|
|
23
|
-
//# sourceMappingURL=ai.module.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ai.module.js","sourceRoot":"","sources":["../../../../src/shared/ai/ai.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,mEAA+D;AAC/D,6CAAyC;AAOlC,IAAM,QAAQ,GAAd,MAAM,QAAQ;CAAG,CAAA;AAAX,4BAAQ;mBAAR,QAAQ;IALpB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,4BAAY,CAAC;QACvB,SAAS,EAAE,CAAC,sBAAS,CAAC;QACtB,OAAO,EAAE,CAAC,sBAAS,CAAC;KACrB,CAAC;GACW,QAAQ,CAAG"}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { ConfigService } from '../../core/config/config.service';
|
|
2
|
-
import { PromptService } from '../../core/config/prompt.service';
|
|
3
|
-
export type ReviewMode = string;
|
|
4
|
-
export declare class AiService {
|
|
5
|
-
private readonly configService;
|
|
6
|
-
private readonly promptService;
|
|
7
|
-
constructor(configService: ConfigService, promptService: PromptService);
|
|
8
|
-
reviewDiff(diff: string, mode: ReviewMode): Promise<{
|
|
9
|
-
text: string;
|
|
10
|
-
}>;
|
|
11
|
-
generateCommitMessage(diff: string): Promise<string>;
|
|
12
|
-
getAvailableReviewModes(): string[];
|
|
13
|
-
hasApiKey(): boolean;
|
|
14
|
-
getApiKeyEnvName(): string;
|
|
15
|
-
private createAgent;
|
|
16
|
-
private buildReviewPrompt;
|
|
17
|
-
private buildCommitPrompt;
|
|
18
|
-
private getApiKey;
|
|
19
|
-
private getModelId;
|
|
20
|
-
private getModelSettingsForCommand;
|
|
21
|
-
private cleanCommitMessage;
|
|
22
|
-
}
|
|
@@ -1,164 +0,0 @@
|
|
|
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 __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
-
};
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.AiService = void 0;
|
|
13
|
-
const agent_1 = require("@mastra/core/agent");
|
|
14
|
-
const common_1 = require("@nestjs/common");
|
|
15
|
-
const config_service_1 = require("../../core/config/config.service");
|
|
16
|
-
const default_prompts_1 = require("../../core/config/default-prompts");
|
|
17
|
-
const prompt_service_1 = require("../../core/config/prompt.service");
|
|
18
|
-
const constants_1 = require("../constants");
|
|
19
|
-
let AiService = class AiService {
|
|
20
|
-
configService;
|
|
21
|
-
promptService;
|
|
22
|
-
constructor(configService, promptService) {
|
|
23
|
-
this.configService = configService;
|
|
24
|
-
this.promptService = promptService;
|
|
25
|
-
}
|
|
26
|
-
async reviewDiff(diff, mode) {
|
|
27
|
-
const agent = this.createAgent('kodu-review-agent', 'AI Reviewer for staged git diff. Be concise.');
|
|
28
|
-
const userPrompt = await this.buildReviewPrompt(diff, mode);
|
|
29
|
-
const modelSettings = this.getModelSettingsForCommand('review');
|
|
30
|
-
const output = await agent.generate(userPrompt, { modelSettings });
|
|
31
|
-
return { text: output.text.trim() };
|
|
32
|
-
}
|
|
33
|
-
async generateCommitMessage(diff) {
|
|
34
|
-
const agent = this.createAgent('kodu-commit-agent', 'Generate a concise Conventional Commit message. Only output the message string.');
|
|
35
|
-
const prompt = await this.buildCommitPrompt(diff);
|
|
36
|
-
const modelSettings = this.getModelSettingsForCommand('commit');
|
|
37
|
-
const output = await agent.generate(prompt, { modelSettings });
|
|
38
|
-
const raw = output.text.trim();
|
|
39
|
-
const cleaned = this.cleanCommitMessage(raw);
|
|
40
|
-
if (!cleaned) {
|
|
41
|
-
throw new Error('AI did not return a valid commit message.');
|
|
42
|
-
}
|
|
43
|
-
return cleaned;
|
|
44
|
-
}
|
|
45
|
-
getAvailableReviewModes() {
|
|
46
|
-
const config = this.configService.getConfig();
|
|
47
|
-
const standardModes = [...default_prompts_1.STANDARD_REVIEW_MODES];
|
|
48
|
-
const customModes = config.prompts?.review
|
|
49
|
-
? Object.keys(config.prompts.review)
|
|
50
|
-
: [];
|
|
51
|
-
return Array.from(new Set([...standardModes, ...customModes]));
|
|
52
|
-
}
|
|
53
|
-
hasApiKey() {
|
|
54
|
-
const config = this.configService.getConfig();
|
|
55
|
-
if (!config.llm) {
|
|
56
|
-
return false;
|
|
57
|
-
}
|
|
58
|
-
const envName = config.llm.apiKeyEnv ?? 'OPENAI_API_KEY';
|
|
59
|
-
const value = process.env[envName];
|
|
60
|
-
return Boolean(value);
|
|
61
|
-
}
|
|
62
|
-
getApiKeyEnvName() {
|
|
63
|
-
const config = this.configService.getConfig();
|
|
64
|
-
return config.llm?.apiKeyEnv ?? 'OPENAI_API_KEY';
|
|
65
|
-
}
|
|
66
|
-
createAgent(id, instructions) {
|
|
67
|
-
const apiKey = this.getApiKey();
|
|
68
|
-
const modelId = this.getModelId();
|
|
69
|
-
return new agent_1.Agent({
|
|
70
|
-
id,
|
|
71
|
-
name: id,
|
|
72
|
-
instructions,
|
|
73
|
-
model: {
|
|
74
|
-
id: modelId,
|
|
75
|
-
apiKey,
|
|
76
|
-
},
|
|
77
|
-
maxRetries: 1,
|
|
78
|
-
});
|
|
79
|
-
}
|
|
80
|
-
async buildReviewPrompt(diff, mode) {
|
|
81
|
-
const config = this.configService.getConfig();
|
|
82
|
-
const customPrompt = config.prompts?.review?.[mode];
|
|
83
|
-
if (customPrompt) {
|
|
84
|
-
return this.promptService.load(customPrompt, { diff, mode });
|
|
85
|
-
}
|
|
86
|
-
if (default_prompts_1.STANDARD_REVIEW_MODES.includes(mode)) {
|
|
87
|
-
const defaultPrompt = default_prompts_1.DEFAULT_REVIEW_PROMPTS[mode];
|
|
88
|
-
return (0, default_prompts_1.replacePromptVariables)(defaultPrompt, { diff, mode });
|
|
89
|
-
}
|
|
90
|
-
return (0, default_prompts_1.replacePromptVariables)(default_prompts_1.DEFAULT_REVIEW_PROMPTS.bug, { diff, mode });
|
|
91
|
-
}
|
|
92
|
-
async buildCommitPrompt(diff) {
|
|
93
|
-
const config = this.configService.getConfig();
|
|
94
|
-
const customPrompt = config.prompts?.commit;
|
|
95
|
-
if (customPrompt) {
|
|
96
|
-
return this.promptService.load(customPrompt, { diff });
|
|
97
|
-
}
|
|
98
|
-
return (0, default_prompts_1.replacePromptVariables)(default_prompts_1.DEFAULT_COMMIT_PROMPT, { diff });
|
|
99
|
-
}
|
|
100
|
-
getApiKey() {
|
|
101
|
-
const config = this.configService.getConfig();
|
|
102
|
-
if (!config.llm) {
|
|
103
|
-
throw new Error('LLM configuration not found. Add llm section to kodu.json');
|
|
104
|
-
}
|
|
105
|
-
const envName = config.llm.apiKeyEnv ?? 'OPENAI_API_KEY';
|
|
106
|
-
const value = process.env[envName];
|
|
107
|
-
if (!value) {
|
|
108
|
-
throw new Error(`API key not found: set ${envName} in environment.`);
|
|
109
|
-
}
|
|
110
|
-
return value;
|
|
111
|
-
}
|
|
112
|
-
getModelId() {
|
|
113
|
-
const config = this.configService.getConfig();
|
|
114
|
-
if (!config.llm) {
|
|
115
|
-
throw new Error('LLM configuration not found. Add llm section to kodu.json');
|
|
116
|
-
}
|
|
117
|
-
const model = config.llm.model;
|
|
118
|
-
if (!model.includes('/')) {
|
|
119
|
-
throw new Error(`Invalid model format: "${model}". Expected format "provider/model-name" (e.g., "openai/gpt-4o")`);
|
|
120
|
-
}
|
|
121
|
-
return model;
|
|
122
|
-
}
|
|
123
|
-
getModelSettingsForCommand(command) {
|
|
124
|
-
const config = this.configService.getConfig();
|
|
125
|
-
const commands = config.llm?.commands;
|
|
126
|
-
const defaultMax = command === 'commit' ? constants_1.DEFAULT_COMMIT_TOKENS : constants_1.DEFAULT_REVIEW_TOKENS;
|
|
127
|
-
const base = { maxOutputTokens: defaultMax };
|
|
128
|
-
if (!commands) {
|
|
129
|
-
return base;
|
|
130
|
-
}
|
|
131
|
-
const override = commands[command];
|
|
132
|
-
const settings = override?.modelSettings;
|
|
133
|
-
if (!settings) {
|
|
134
|
-
return base;
|
|
135
|
-
}
|
|
136
|
-
return {
|
|
137
|
-
...settings,
|
|
138
|
-
maxOutputTokens: settings.maxOutputTokens ?? defaultMax,
|
|
139
|
-
};
|
|
140
|
-
}
|
|
141
|
-
cleanCommitMessage(text) {
|
|
142
|
-
const unfenced = text.replace(/^```[a-zA-Z]*\s*/g, '').replace(/```$/g, '');
|
|
143
|
-
const lines = unfenced
|
|
144
|
-
.split('\n')
|
|
145
|
-
.map((line) => line.trim())
|
|
146
|
-
.filter((line) => line.length > 0);
|
|
147
|
-
if (lines.length === 0) {
|
|
148
|
-
return '';
|
|
149
|
-
}
|
|
150
|
-
const first = lines[0]
|
|
151
|
-
.replace(/^"|"$/g, '')
|
|
152
|
-
.replace(/^'|'$/g, '')
|
|
153
|
-
.replace(/^Commit message:?\s*/i, '')
|
|
154
|
-
.trim();
|
|
155
|
-
return first;
|
|
156
|
-
}
|
|
157
|
-
};
|
|
158
|
-
exports.AiService = AiService;
|
|
159
|
-
exports.AiService = AiService = __decorate([
|
|
160
|
-
(0, common_1.Injectable)(),
|
|
161
|
-
__metadata("design:paramtypes", [config_service_1.ConfigService,
|
|
162
|
-
prompt_service_1.PromptService])
|
|
163
|
-
], AiService);
|
|
164
|
-
//# sourceMappingURL=ai.service.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ai.service.js","sourceRoot":"","sources":["../../../../src/shared/ai/ai.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,21 +0,0 @@
|
|
|
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
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.SshModule = void 0;
|
|
10
|
-
const common_1 = require("@nestjs/common");
|
|
11
|
-
const ssh_service_1 = require("./ssh.service");
|
|
12
|
-
let SshModule = class SshModule {
|
|
13
|
-
};
|
|
14
|
-
exports.SshModule = SshModule;
|
|
15
|
-
exports.SshModule = SshModule = __decorate([
|
|
16
|
-
(0, common_1.Module)({
|
|
17
|
-
providers: [ssh_service_1.SshService],
|
|
18
|
-
exports: [ssh_service_1.SshService],
|
|
19
|
-
})
|
|
20
|
-
], SshModule);
|
|
21
|
-
//# sourceMappingURL=ssh.module.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ssh.module.js","sourceRoot":"","sources":["../../../../src/shared/ssh/ssh.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,+CAA2C;AAMpC,IAAM,SAAS,GAAf,MAAM,SAAS;CAAG,CAAA;AAAZ,8BAAS;oBAAT,SAAS;IAJrB,IAAA,eAAM,EAAC;QACN,SAAS,EAAE,CAAC,wBAAU,CAAC;QACvB,OAAO,EAAE,CAAC,wBAAU,CAAC;KACtB,CAAC;GACW,SAAS,CAAG"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type { ServerConfig } from '../../core/config/config.schema';
|
|
2
|
-
export type SshResult = {
|
|
3
|
-
success: boolean;
|
|
4
|
-
stdout: string;
|
|
5
|
-
stderr: string;
|
|
6
|
-
exitCode: number;
|
|
7
|
-
error?: string;
|
|
8
|
-
};
|
|
9
|
-
export declare class SshService {
|
|
10
|
-
execute(serverConfig: ServerConfig, command: string): Promise<SshResult>;
|
|
11
|
-
}
|
|
@@ -1,53 +0,0 @@
|
|
|
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
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.SshService = void 0;
|
|
10
|
-
const common_1 = require("@nestjs/common");
|
|
11
|
-
const execa_1 = require("execa");
|
|
12
|
-
let SshService = class SshService {
|
|
13
|
-
async execute(serverConfig, command) {
|
|
14
|
-
const args = [
|
|
15
|
-
'-i',
|
|
16
|
-
serverConfig.sshKeyPath,
|
|
17
|
-
'-p',
|
|
18
|
-
String(serverConfig.port ?? 22),
|
|
19
|
-
'-o',
|
|
20
|
-
'StrictHostKeyChecking=no',
|
|
21
|
-
'-o',
|
|
22
|
-
'ConnectTimeout=10',
|
|
23
|
-
`${serverConfig.user}@${serverConfig.host}`,
|
|
24
|
-
command,
|
|
25
|
-
];
|
|
26
|
-
try {
|
|
27
|
-
const { stdout, stderr, exitCode } = await (0, execa_1.execa)('ssh', args, {
|
|
28
|
-
env: serverConfig.env,
|
|
29
|
-
});
|
|
30
|
-
return {
|
|
31
|
-
success: (exitCode ?? 0) === 0,
|
|
32
|
-
stdout,
|
|
33
|
-
stderr,
|
|
34
|
-
exitCode: exitCode ?? 0,
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
catch (error) {
|
|
38
|
-
const failure = error;
|
|
39
|
-
return {
|
|
40
|
-
success: false,
|
|
41
|
-
stdout: failure.stdout ?? '',
|
|
42
|
-
stderr: failure.stderr ?? '',
|
|
43
|
-
exitCode: failure.exitCode ?? -1,
|
|
44
|
-
error: failure.shortMessage ?? failure.message ?? 'Unknown SSH error',
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
};
|
|
49
|
-
exports.SshService = SshService;
|
|
50
|
-
exports.SshService = SshService = __decorate([
|
|
51
|
-
(0, common_1.Injectable)()
|
|
52
|
-
], SshService);
|
|
53
|
-
//# sourceMappingURL=ssh.service.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ssh.service.js","sourceRoot":"","sources":["../../../../src/shared/ssh/ssh.service.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA4C;AAC5C,iCAA8B;AAYvB,IAAM,UAAU,GAAhB,MAAM,UAAU;IACrB,KAAK,CAAC,OAAO,CACX,YAA0B,EAC1B,OAAe;QAEf,MAAM,IAAI,GAAG;YACX,IAAI;YACJ,YAAY,CAAC,UAAU;YACvB,IAAI;YACJ,MAAM,CAAC,YAAY,CAAC,IAAI,IAAI,EAAE,CAAC;YAC/B,IAAI;YACJ,0BAA0B;YAC1B,IAAI;YACJ,mBAAmB;YACnB,GAAG,YAAY,CAAC,IAAI,IAAI,YAAY,CAAC,IAAI,EAAE;YAC3C,OAAO;SACR,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,IAAA,aAAK,EAAC,KAAK,EAAE,IAAI,EAAE;gBAC5D,GAAG,EAAE,YAAY,CAAC,GAAG;aACtB,CAAC,CAAC;YAEH,OAAO;gBACL,OAAO,EAAE,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,CAAC;gBAC9B,MAAM;gBACN,MAAM;gBACN,QAAQ,EAAE,QAAQ,IAAI,CAAC;aACxB,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAMf,CAAC;YAEF,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,EAAE;gBAC5B,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,EAAE;gBAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC;gBAChC,KAAK,EAAE,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,OAAO,IAAI,mBAAmB;aACtE,CAAC;QACJ,CAAC;IACH,CAAC;CACF,CAAA;AA/CY,gCAAU;qBAAV,UAAU;IADtB,IAAA,mBAAU,GAAE;GACA,UAAU,CA+CtB"}
|