bytarch-cli 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.genie-cli/config.json +7 -0
- package/.genie-cli/plan.json +10 -0
- package/bin/bytarch-cli.js +3 -0
- package/dist/commands/apply.d.ts +9 -0
- package/dist/commands/apply.d.ts.map +1 -0
- package/dist/commands/apply.js +118 -0
- package/dist/commands/apply.js.map +1 -0
- package/dist/commands/config.d.ts +14 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +189 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/edit.d.ts +8 -0
- package/dist/commands/edit.d.ts.map +1 -0
- package/dist/commands/edit.js +152 -0
- package/dist/commands/edit.js.map +1 -0
- package/dist/commands/init.d.ts +6 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +89 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/plan.d.ts +10 -0
- package/dist/commands/plan.d.ts.map +1 -0
- package/dist/commands/plan.js +173 -0
- package/dist/commands/plan.js.map +1 -0
- package/dist/commands/review.d.ts +13 -0
- package/dist/commands/review.d.ts.map +1 -0
- package/dist/commands/review.js +240 -0
- package/dist/commands/review.js.map +1 -0
- package/dist/commands/status.d.ts +9 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +122 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/fs/patcher.d.ts +19 -0
- package/dist/fs/patcher.d.ts.map +1 -0
- package/dist/fs/patcher.js +210 -0
- package/dist/fs/patcher.js.map +1 -0
- package/dist/fs/safe-readwrite.d.ts +20 -0
- package/dist/fs/safe-readwrite.d.ts.map +1 -0
- package/dist/fs/safe-readwrite.js +146 -0
- package/dist/fs/safe-readwrite.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +123 -0
- package/dist/index.js.map +1 -0
- package/dist/provider/bytarch.d.ts +26 -0
- package/dist/provider/bytarch.d.ts.map +1 -0
- package/dist/provider/bytarch.js +54 -0
- package/dist/provider/bytarch.js.map +1 -0
- package/dist/provider/evaluation.d.ts +5 -0
- package/dist/provider/evaluation.d.ts.map +1 -0
- package/dist/provider/evaluation.js +40 -0
- package/dist/provider/evaluation.js.map +1 -0
- package/dist/provider/prompts.d.ts +4 -0
- package/dist/provider/prompts.d.ts.map +1 -0
- package/dist/provider/prompts.js +61 -0
- package/dist/provider/prompts.js.map +1 -0
- package/dist/ui/prompts.d.ts +43 -0
- package/dist/ui/prompts.d.ts.map +1 -0
- package/dist/ui/prompts.js +122 -0
- package/dist/ui/prompts.js.map +1 -0
- package/dist/workspace/config.d.ts +19 -0
- package/dist/workspace/config.d.ts.map +1 -0
- package/dist/workspace/config.js +102 -0
- package/dist/workspace/config.js.map +1 -0
- package/dist/workspace/edits.d.ts +24 -0
- package/dist/workspace/edits.d.ts.map +1 -0
- package/dist/workspace/edits.js +119 -0
- package/dist/workspace/edits.js.map +1 -0
- package/dist/workspace/plan.d.ts +29 -0
- package/dist/workspace/plan.d.ts.map +1 -0
- package/dist/workspace/plan.js +101 -0
- package/dist/workspace/plan.js.map +1 -0
- package/package.json +52 -0
- package/src/commands/apply.ts +91 -0
- package/src/commands/config.ts +194 -0
- package/src/commands/edit.ts +133 -0
- package/src/commands/init.ts +62 -0
- package/src/commands/plan.ts +163 -0
- package/src/commands/review.ts +242 -0
- package/src/commands/status.ts +101 -0
- package/src/fs/patcher.ts +188 -0
- package/src/fs/safe-readwrite.ts +141 -0
- package/src/index.ts +123 -0
- package/src/provider/bytarch.ts +75 -0
- package/src/provider/evaluation.ts +39 -0
- package/src/provider/prompts.ts +59 -0
- package/src/ui/prompts.ts +163 -0
- package/src/workspace/config.ts +86 -0
- package/src/workspace/edits.ts +106 -0
- package/src/workspace/plan.ts +92 -0
- package/tsconfig.json +36 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apply.d.ts","sourceRoot":"","sources":["../../src/commands/apply.ts"],"names":[],"mappings":"AAMA,qBAAa,YAAY;WACV,OAAO,CAAC,OAAO,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;mBAsE5E,WAAW;CAajC"}
|
|
@@ -0,0 +1,118 @@
|
|
|
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
|
+
exports.ApplyCommand = void 0;
|
|
37
|
+
const path = __importStar(require("path"));
|
|
38
|
+
const config_1 = require("../workspace/config");
|
|
39
|
+
const edits_1 = require("../workspace/edits");
|
|
40
|
+
const patcher_1 = require("../fs/patcher");
|
|
41
|
+
const prompts_1 = require("../ui/prompts");
|
|
42
|
+
class ApplyCommand {
|
|
43
|
+
static async execute(options) {
|
|
44
|
+
const projectRoot = process.cwd();
|
|
45
|
+
const workspacePath = path.join(projectRoot, '.genie-cli');
|
|
46
|
+
const configManager = new config_1.ConfigManager(workspacePath);
|
|
47
|
+
const editManager = new edits_1.EditManager(workspacePath);
|
|
48
|
+
const patcher = new patcher_1.Patcher(projectRoot);
|
|
49
|
+
try {
|
|
50
|
+
const config = await configManager.loadConfig();
|
|
51
|
+
if (!options.force && !options.dryRun && config.dryRun) {
|
|
52
|
+
prompts_1.UI.info('Dry-run mode is enabled by default. Use --force to actually apply changes.');
|
|
53
|
+
options.dryRun = true;
|
|
54
|
+
}
|
|
55
|
+
let editsToApply = await editManager.getPendingEdits();
|
|
56
|
+
if (options.ids) {
|
|
57
|
+
const targetIds = options.ids.split(',').map(id => id.trim());
|
|
58
|
+
editsToApply = editsToApply.filter(edit => targetIds.includes(edit.id));
|
|
59
|
+
}
|
|
60
|
+
editsToApply = editsToApply.filter(edit => edit.status === 'accepted');
|
|
61
|
+
if (editsToApply.length === 0) {
|
|
62
|
+
prompts_1.UI.warning('No accepted edits to apply.');
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
prompts_1.UI.header(`🔧 Applying ${editsToApply.length} edit(s)${options.dryRun ? ' (DRY RUN)' : ''}`);
|
|
66
|
+
for (let i = 0; i < editsToApply.length; i++) {
|
|
67
|
+
const edit = editsToApply[i];
|
|
68
|
+
prompts_1.UI.progress(i + 1, editsToApply.length, `Processing ${edit.path}`);
|
|
69
|
+
try {
|
|
70
|
+
if (options.dryRun) {
|
|
71
|
+
const preview = await patcher.previewPatch(edit);
|
|
72
|
+
console.log(preview);
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
if (options.force || await this.confirmEdit(edit)) {
|
|
76
|
+
const result = await patcher.applyPatch(edit);
|
|
77
|
+
if (result.success) {
|
|
78
|
+
await editManager.updateEditStatus(edit.id, 'applied');
|
|
79
|
+
prompts_1.UI.success(`Applied ${edit.path} (${result.appliedChanges} changes)`);
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
prompts_1.UI.error(`Failed to apply ${edit.path}: ${result.error}`);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
prompts_1.UI.info(`Skipped ${edit.path}`);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
prompts_1.UI.error(`Error processing ${edit.path}: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
if (options.dryRun) {
|
|
95
|
+
prompts_1.UI.info('Dry run completed. No changes were made.');
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
prompts_1.UI.success('Apply process completed.');
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
throw new Error(`Failed to apply edits: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
static async confirmEdit(edit) {
|
|
106
|
+
console.log(`\\nEdit: ${edit.path}`);
|
|
107
|
+
console.log(`Description: ${edit.description}`);
|
|
108
|
+
if (edit.rationale) {
|
|
109
|
+
console.log(`Rationale: ${edit.rationale}`);
|
|
110
|
+
}
|
|
111
|
+
return await prompts_1.UI.confirm({
|
|
112
|
+
message: `Apply this edit to ${edit.path}?`,
|
|
113
|
+
default: true
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
exports.ApplyCommand = ApplyCommand;
|
|
118
|
+
//# sourceMappingURL=apply.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apply.js","sourceRoot":"","sources":["../../src/commands/apply.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare class ConfigCommand {
|
|
2
|
+
static execute(options: {
|
|
3
|
+
set?: string;
|
|
4
|
+
get?: string;
|
|
5
|
+
list?: boolean;
|
|
6
|
+
setApiKey?: string;
|
|
7
|
+
}): Promise<void>;
|
|
8
|
+
private static setApiKey;
|
|
9
|
+
private static setConfig;
|
|
10
|
+
private static getConfig;
|
|
11
|
+
private static listConfig;
|
|
12
|
+
private static interactiveConfig;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAIA,qBAAa,aAAa;WACX,OAAO,CAAC,OAAO,EAAE;QAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,GAAG,OAAO,CAAC,IAAI,CAAC;mBAuCI,SAAS;mBAKT,SAAS;mBA6BT,SAAS;mBAkBT,UAAU;mBAsBV,iBAAiB;CAsEvC"}
|
|
@@ -0,0 +1,189 @@
|
|
|
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
|
+
exports.ConfigCommand = void 0;
|
|
37
|
+
const path = __importStar(require("path"));
|
|
38
|
+
const config_1 = require("../workspace/config");
|
|
39
|
+
const prompts_1 = require("../ui/prompts");
|
|
40
|
+
class ConfigCommand {
|
|
41
|
+
static async execute(options) {
|
|
42
|
+
const projectRoot = process.cwd();
|
|
43
|
+
const workspacePath = path.join(projectRoot, '.genie-cli');
|
|
44
|
+
try {
|
|
45
|
+
if (!(await require('fs-extra').pathExists(workspacePath))) {
|
|
46
|
+
prompts_1.UI.error('No .genie-cli workspace found. Run "bytarch-cli init" to create one.');
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
const configManager = new config_1.ConfigManager(workspacePath);
|
|
50
|
+
if (options.setApiKey) {
|
|
51
|
+
await this.setApiKey(configManager, options.setApiKey);
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
if (options.set) {
|
|
55
|
+
await this.setConfig(configManager, options.set);
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
if (options.get) {
|
|
59
|
+
await this.getConfig(configManager, options.get);
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
if (options.list) {
|
|
63
|
+
await this.listConfig(configManager);
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
await this.interactiveConfig(configManager);
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
throw new Error(`Config operation failed: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
static async setApiKey(configManager, apiKey) {
|
|
73
|
+
await configManager.updateConfig({ apiKey });
|
|
74
|
+
prompts_1.UI.success('API key updated successfully.');
|
|
75
|
+
}
|
|
76
|
+
static async setConfig(configManager, setOption) {
|
|
77
|
+
const [key, value] = setOption.split('=');
|
|
78
|
+
if (!key || !value) {
|
|
79
|
+
prompts_1.UI.error('Invalid format. Use: --set key=value');
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
const config = await configManager.loadConfig();
|
|
83
|
+
if (!(key in config)) {
|
|
84
|
+
prompts_1.UI.error(`Unknown configuration key: ${key}`);
|
|
85
|
+
prompts_1.UI.info('Available keys: provider, endpoint, model, dryRun');
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
let parsedValue = value;
|
|
89
|
+
if (key === 'dryRun') {
|
|
90
|
+
parsedValue = value.toLowerCase() === 'true';
|
|
91
|
+
}
|
|
92
|
+
const updates = {};
|
|
93
|
+
updates[key] = parsedValue;
|
|
94
|
+
await configManager.updateConfig(updates);
|
|
95
|
+
prompts_1.UI.success(`Updated ${key} to ${value}`);
|
|
96
|
+
}
|
|
97
|
+
static async getConfig(configManager, key) {
|
|
98
|
+
const config = await configManager.loadConfig();
|
|
99
|
+
if (!(key in config)) {
|
|
100
|
+
prompts_1.UI.error(`Unknown configuration key: ${key}`);
|
|
101
|
+
prompts_1.UI.info('Available keys: provider, endpoint, model, dryRun, apiKey');
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
let value = config[key];
|
|
105
|
+
if (key === 'apiKey') {
|
|
106
|
+
value = value ? '***configured***' : 'not configured';
|
|
107
|
+
}
|
|
108
|
+
console.log(`${key}: ${value}`);
|
|
109
|
+
}
|
|
110
|
+
static async listConfig(configManager) {
|
|
111
|
+
const config = await configManager.loadConfig();
|
|
112
|
+
prompts_1.UI.header('Configuration:');
|
|
113
|
+
Object.entries(config).forEach(([key, value]) => {
|
|
114
|
+
let displayValue = value;
|
|
115
|
+
if (key === 'apiKey') {
|
|
116
|
+
displayValue = value ? '***configured***' : 'not configured';
|
|
117
|
+
}
|
|
118
|
+
console.log(` ${key}: ${displayValue}`);
|
|
119
|
+
});
|
|
120
|
+
console.log('');
|
|
121
|
+
prompts_1.UI.info('Environment variables:');
|
|
122
|
+
console.log(` BYTARCH_API_KEY: ${process.env.BYTARCH_API_KEY ? 'set' : 'not set'}`);
|
|
123
|
+
console.log(` BYTARCH_ENDPOINT: ${process.env.BYTARCH_ENDPOINT || 'not set'}`);
|
|
124
|
+
console.log(` BYTARCH_MODEL: ${process.env.BYTARCH_MODEL || 'not set'}`);
|
|
125
|
+
}
|
|
126
|
+
static async interactiveConfig(configManager) {
|
|
127
|
+
prompts_1.UI.header('Interactive Configuration');
|
|
128
|
+
const action = await prompts_1.UI.select({
|
|
129
|
+
message: 'What would you like to configure?',
|
|
130
|
+
choices: [
|
|
131
|
+
{ name: 'Set API Key', value: 'apiKey' },
|
|
132
|
+
{ name: 'Set Model', value: 'model' },
|
|
133
|
+
{ name: 'Set Endpoint', value: 'endpoint' },
|
|
134
|
+
{ name: 'Toggle Dry Run', value: 'dryRun' },
|
|
135
|
+
{ name: 'Show Current Config', value: 'show' },
|
|
136
|
+
{ name: 'Done', value: 'done' }
|
|
137
|
+
]
|
|
138
|
+
});
|
|
139
|
+
if (action === 'done')
|
|
140
|
+
return;
|
|
141
|
+
const config = await configManager.loadConfig();
|
|
142
|
+
switch (action) {
|
|
143
|
+
case 'apiKey':
|
|
144
|
+
const apiKey = await prompts_1.UI.input({
|
|
145
|
+
message: 'Enter BYTARCH API key:',
|
|
146
|
+
validate: (input) => input.length > 0 || 'API key cannot be empty'
|
|
147
|
+
});
|
|
148
|
+
await configManager.updateConfig({ apiKey });
|
|
149
|
+
prompts_1.UI.success('API key updated.');
|
|
150
|
+
break;
|
|
151
|
+
case 'model':
|
|
152
|
+
const model = await prompts_1.UI.input({
|
|
153
|
+
message: 'Enter model name:',
|
|
154
|
+
default: config.model
|
|
155
|
+
});
|
|
156
|
+
await configManager.updateConfig({ model });
|
|
157
|
+
prompts_1.UI.success(`Model updated to: ${model}`);
|
|
158
|
+
break;
|
|
159
|
+
case 'endpoint':
|
|
160
|
+
const endpoint = await prompts_1.UI.input({
|
|
161
|
+
message: 'Enter API endpoint:',
|
|
162
|
+
default: config.endpoint
|
|
163
|
+
});
|
|
164
|
+
await configManager.updateConfig({ endpoint });
|
|
165
|
+
prompts_1.UI.success(`Endpoint updated to: ${endpoint}`);
|
|
166
|
+
break;
|
|
167
|
+
case 'dryRun':
|
|
168
|
+
const dryRun = await prompts_1.UI.confirm({
|
|
169
|
+
message: `Dry run is currently ${config.dryRun ? 'enabled' : 'disabled'}. Toggle?`,
|
|
170
|
+
default: true
|
|
171
|
+
});
|
|
172
|
+
await configManager.updateConfig({ dryRun: !config.dryRun });
|
|
173
|
+
prompts_1.UI.success(`Dry run ${!config.dryRun ? 'enabled' : 'disabled'}.`);
|
|
174
|
+
break;
|
|
175
|
+
case 'show':
|
|
176
|
+
await this.listConfig(configManager);
|
|
177
|
+
break;
|
|
178
|
+
}
|
|
179
|
+
const shouldContinue = await prompts_1.UI.confirm({
|
|
180
|
+
message: 'Configure more settings?',
|
|
181
|
+
default: false
|
|
182
|
+
});
|
|
183
|
+
if (shouldContinue) {
|
|
184
|
+
await this.interactiveConfig(configManager);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
exports.ConfigCommand = ConfigCommand;
|
|
189
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edit.d.ts","sourceRoot":"","sources":["../../src/commands/edit.ts"],"names":[],"mappings":"AAQA,qBAAa,WAAW;WACT,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,YAAK,EAAE,OAAO,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAiF9G,OAAO,CAAC,MAAM,CAAC,WAAW;mBAiBL,gBAAgB;CAyBtC"}
|
|
@@ -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
|
+
exports.EditCommand = void 0;
|
|
37
|
+
const path = __importStar(require("path"));
|
|
38
|
+
const config_1 = require("../workspace/config");
|
|
39
|
+
const edits_1 = require("../workspace/edits");
|
|
40
|
+
const bytarch_1 = require("../provider/bytarch");
|
|
41
|
+
const prompts_1 = require("../provider/prompts");
|
|
42
|
+
const evaluation_1 = require("../provider/evaluation");
|
|
43
|
+
const prompts_2 = require("../ui/prompts");
|
|
44
|
+
class EditCommand {
|
|
45
|
+
static async execute(filePath, request = '', options) {
|
|
46
|
+
const projectRoot = process.cwd();
|
|
47
|
+
const workspacePath = path.join(projectRoot, '.genie-cli');
|
|
48
|
+
const configManager = new config_1.ConfigManager(workspacePath);
|
|
49
|
+
const editManager = new edits_1.EditManager(workspacePath);
|
|
50
|
+
try {
|
|
51
|
+
const config = await configManager.loadConfig();
|
|
52
|
+
const apiKey = configManager.getApiKey(config);
|
|
53
|
+
if (!request) {
|
|
54
|
+
request = await prompts_2.UI.input({
|
|
55
|
+
message: 'Describe the changes you want to make:',
|
|
56
|
+
validate: (input) => input.length > 0 || 'Please describe the changes'
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
prompts_2.UI.header(`Generating edit for ${filePath}...`);
|
|
60
|
+
const provider = new bytarch_1.BytarchProvider(config.endpoint, config.model, apiKey);
|
|
61
|
+
let fileContent = '';
|
|
62
|
+
try {
|
|
63
|
+
const fs = require('fs-extra');
|
|
64
|
+
const resolvedPath = path.resolve(projectRoot, filePath);
|
|
65
|
+
if (await fs.pathExists(resolvedPath)) {
|
|
66
|
+
fileContent = await fs.readFile(resolvedPath, 'utf8');
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
prompts_2.UI.warning(`Could not read file ${filePath}, will create new file`);
|
|
71
|
+
}
|
|
72
|
+
const messages = [
|
|
73
|
+
{
|
|
74
|
+
role: 'system',
|
|
75
|
+
content: prompts_1.EDIT_PROMPT
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
role: 'user',
|
|
79
|
+
content: `File: ${filePath}\\nRequest: ${request}\\n${fileContent ? `Current content:\\n\\n${fileContent}` : 'File does not exist, create new file.'}\\n\\nGenerate a unified diff patch for these changes.`
|
|
80
|
+
}
|
|
81
|
+
];
|
|
82
|
+
const response = await provider.chat(messages);
|
|
83
|
+
const editData = (0, evaluation_1.extractJsonFromResponse)(response);
|
|
84
|
+
if (!(0, evaluation_1.isValidEditResponse)(editData)) {
|
|
85
|
+
throw new Error('Invalid edit response from AI');
|
|
86
|
+
}
|
|
87
|
+
const edit = {
|
|
88
|
+
id: editManager.generateEditId(),
|
|
89
|
+
path: filePath,
|
|
90
|
+
description: options.description || editData.description,
|
|
91
|
+
rationale: editData.rationale,
|
|
92
|
+
patch: editData.patch,
|
|
93
|
+
status: 'pending',
|
|
94
|
+
createdAt: new Date().toISOString(),
|
|
95
|
+
updatedAt: new Date().toISOString()
|
|
96
|
+
};
|
|
97
|
+
await editManager.saveEdit(edit);
|
|
98
|
+
prompts_2.UI.success('Edit generated successfully!');
|
|
99
|
+
this.displayEdit(edit);
|
|
100
|
+
const shouldReview = await prompts_2.UI.confirm({
|
|
101
|
+
message: 'Would you like to review this edit now?',
|
|
102
|
+
default: true
|
|
103
|
+
});
|
|
104
|
+
if (shouldReview) {
|
|
105
|
+
await this.showPatchPreview(edit);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
throw new Error(`Failed to generate edit: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
static displayEdit(edit) {
|
|
113
|
+
prompts_2.UI.divider();
|
|
114
|
+
prompts_2.UI.header(`📝 Edit: ${edit.path}`);
|
|
115
|
+
console.log(edit.description);
|
|
116
|
+
console.log('');
|
|
117
|
+
if (edit.rationale) {
|
|
118
|
+
prompts_2.UI.info('Rationale:');
|
|
119
|
+
console.log(edit.rationale);
|
|
120
|
+
console.log('');
|
|
121
|
+
}
|
|
122
|
+
console.log(`Status: ${edit.status}`);
|
|
123
|
+
console.log(`ID: ${edit.id}`);
|
|
124
|
+
console.log('');
|
|
125
|
+
}
|
|
126
|
+
static async showPatchPreview(edit) {
|
|
127
|
+
const { Patcher } = await Promise.resolve().then(() => __importStar(require('../fs/patcher')));
|
|
128
|
+
const projectRoot = process.cwd();
|
|
129
|
+
const patcher = new Patcher(projectRoot);
|
|
130
|
+
try {
|
|
131
|
+
const preview = await patcher.previewPatch(edit);
|
|
132
|
+
console.log(preview);
|
|
133
|
+
const shouldAccept = await prompts_2.UI.confirm({
|
|
134
|
+
message: 'Accept this edit?',
|
|
135
|
+
default: false
|
|
136
|
+
});
|
|
137
|
+
if (shouldAccept) {
|
|
138
|
+
const editManager = new edits_1.EditManager(path.join(projectRoot, '.genie-cli'));
|
|
139
|
+
await editManager.updateEditStatus(edit.id, 'accepted');
|
|
140
|
+
prompts_2.UI.success('Edit accepted. Use "bytarch-cli apply" to apply changes.');
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
prompts_2.UI.info('Edit remains pending for review.');
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
catch (error) {
|
|
147
|
+
prompts_2.UI.error(`Failed to preview patch: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
exports.EditCommand = EditCommand;
|
|
152
|
+
//# sourceMappingURL=edit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edit.js","sourceRoot":"","sources":["../../src/commands/edit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAKA,qBAAa,WAAW;WACT,OAAO,CAAC,OAAO,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAuDlE"}
|