bytarch-cli 0.1.1 → 0.1.2

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/dist/chat.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ export declare function runChat(): Promise<void>;
2
+ export default runChat;
3
+ //# sourceMappingURL=chat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../src/chat.ts"],"names":[],"mappings":"AAQA,wBAAsB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAiH7C;AAED,eAAe,OAAO,CAAC"}
package/dist/chat.js ADDED
@@ -0,0 +1,160 @@
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.runChat = runChat;
37
+ const readline = __importStar(require("readline"));
38
+ const bytarch_1 = require("./provider/bytarch");
39
+ const config_1 = require("./workspace/config");
40
+ const edits_1 = require("./workspace/edits");
41
+ const prompts_1 = require("./ui/prompts");
42
+ const evaluation_1 = require("./provider/evaluation");
43
+ // Simple chat-first entry point with an explicit /apply flow inside chat.
44
+ async function runChat() {
45
+ const workspacePath = process.cwd() + '/.genie-cli';
46
+ const config = await new config_1.ConfigManager(workspacePath).loadConfig();
47
+ const apiKey = new config_1.ConfigManager(workspacePath).getApiKey(config);
48
+ const provider = new bytarch_1.BytarchProvider(config.endpoint, config.model, apiKey);
49
+ const editManager = new edits_1.EditManager(workspacePath);
50
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
51
+ prompts_1.UI.header('BYTARCH AI Chat (type your message; use /apply, /list, /help)');
52
+ const ask = (q) => new Promise(resolve => rl.question(q, ans => resolve(ans)));
53
+ // Simple REPL-like loop
54
+ while (true) {
55
+ const input = await ask('You: ');
56
+ const text = (input || '').trim();
57
+ if (!text)
58
+ break;
59
+ // Command handling
60
+ if (text.startsWith('/')) {
61
+ const [cmd, ...args] = text.slice(1).split(' ');
62
+ switch (cmd.toLowerCase()) {
63
+ case 'help':
64
+ prompts_1.UI.info('Commands:');
65
+ prompts_1.UI.list([
66
+ '/help - show this help',
67
+ '/list - list pending/available edits',
68
+ '/apply [id|all] - apply a specific patch or all accepted patches',
69
+ '/exit - quit chat'
70
+ ]);
71
+ break;
72
+ case 'list': {
73
+ const edits = await editManager.listEdits();
74
+ if (edits.length === 0) {
75
+ prompts_1.UI.info('No edits found.');
76
+ }
77
+ else {
78
+ edits.forEach(e => {
79
+ console.log(`- ${e.id} | ${e.path} | ${e.status} | ${e.description}`);
80
+ });
81
+ }
82
+ break;
83
+ }
84
+ case 'apply': {
85
+ // Apply one or more edits. If 'all', apply all accepted edits; if id, apply that patch.
86
+ const target = args.join(' ').trim();
87
+ const patches = await editManager.getPendingEdits();
88
+ const toApply = target ? patches.filter(p => p.id === target) : patches.filter(p => p.status === 'accepted');
89
+ if (toApply.length === 0) {
90
+ prompts_1.UI.warning('No edits available to apply for the given selector. Use /list to inspect edits.');
91
+ break;
92
+ }
93
+ const { Patcher } = await Promise.resolve().then(() => __importStar(require('./fs/patcher')));
94
+ const patcher = new Patcher(process.cwd());
95
+ for (const edit of toApply) {
96
+ prompts_1.UI.header(`Applying ${edit.path} (${edit.id})`);
97
+ const result = await patcher.applyPatch(edit);
98
+ if (result.success) {
99
+ await editManager.updateEditStatus(edit.id, 'applied');
100
+ prompts_1.UI.success(`Applied ${edit.path} (${result.appliedChanges ?? 0} changes)`);
101
+ }
102
+ else {
103
+ prompts_1.UI.error(`Failed to apply ${edit.path}: ${result.error}`);
104
+ }
105
+ }
106
+ break;
107
+ }
108
+ case 'exit':
109
+ case 'quit':
110
+ case 'close':
111
+ rl.close();
112
+ return;
113
+ default:
114
+ prompts_1.UI.warning('Unknown chat command. Type /help for options.');
115
+ }
116
+ continue;
117
+ }
118
+ // Regular chat message: send to AI and handle patch results
119
+ try {
120
+ const messages = [
121
+ { role: 'system', content: 'You are a code-editing AI assistant. Return a JSON patch object when you want to edit a file.' },
122
+ { role: 'user', content: text }
123
+ ];
124
+ const response = await provider.chat(messages);
125
+ // Try to parse as JSON patch
126
+ try {
127
+ const patchObj = (0, evaluation_1.extractJsonFromResponse)(response);
128
+ // Expect { path, patch, description, rationale }
129
+ if (patchObj && patchObj.path && patchObj.patch) {
130
+ const edit = {
131
+ id: editManager.generateEditId(),
132
+ path: patchObj.path,
133
+ description: patchObj.description || '',
134
+ rationale: patchObj.rationale || '',
135
+ patch: patchObj.patch,
136
+ status: 'pending',
137
+ createdAt: new Date().toISOString(),
138
+ updatedAt: new Date().toISOString()
139
+ };
140
+ await editManager.saveEdit(edit);
141
+ prompts_1.UI.success(`New patch created for ${patchObj.path} (id: ${edit.id})`);
142
+ prompts_1.UI.info(`Type /apply ${edit.id} to apply, or /list to view edits.`);
143
+ }
144
+ else {
145
+ prompts_1.UI.info(`AI: ${response}`);
146
+ }
147
+ }
148
+ catch {
149
+ // Not a JSON patch, just print the AI response
150
+ prompts_1.UI.info(`AI: ${response}`);
151
+ }
152
+ }
153
+ catch (err) {
154
+ prompts_1.UI.error(`AI error: ${err instanceof Error ? err.message : String(err)}`);
155
+ }
156
+ }
157
+ rl.close();
158
+ }
159
+ exports.default = runChat;
160
+ //# sourceMappingURL=chat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.js","sourceRoot":"","sources":["../src/chat.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bytarch-cli",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "description": "AI-powered CLI for project planning and code editing using BYTARCH OpenAI-compatible API",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
package/src/chat.ts CHANGED
@@ -64,7 +64,7 @@ export async function runChat(): Promise<void> {
64
64
  const result = await patcher.applyPatch(edit);
65
65
  if (result.success) {
66
66
  await editManager.updateEditStatus(edit.id, 'applied');
67
- UI.success(`Applied ${edit.path} (${result.changes ?? 0} changes)`);
67
+ UI.success(`Applied ${edit.path} (${result.appliedChanges ?? 0} changes)`);
68
68
  } else {
69
69
  UI.error(`Failed to apply ${edit.path}: ${result.error}`);
70
70
  }