@naiv/api-agent 0.0.1

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.
@@ -0,0 +1,126 @@
1
+ import { LLMRunner } from "@graf-research/llm-runner";
2
+ export declare enum INSTRUCTION {
3
+ ListDir = "ListDir",
4
+ ReadFile = "ReadFile",
5
+ CreateFile = "CreateFile",
6
+ OverwriteFile = "OverwriteFile",
7
+ DeleteFile = "DeleteFile",
8
+ MoveFile = "MoveFile",
9
+ CreateDir = "CreateDir",
10
+ RemoveDir = "RemoveDir",
11
+ MoveDir = "MoveDir",
12
+ InstallDependency = "InstallDependency",
13
+ Build = "Build",
14
+ CustomCLIRun = "CustomCLIRun",
15
+ RunServer = "RunServer",
16
+ StopServer = "StopServer",
17
+ Finished = "Finished"
18
+ }
19
+ type SubPlan = SubPlanListDir | SubPlanReadFile | SubPlanCreateOverwriteFile | SubPlanDeleteFile | SubPlanMoveFile | SubPlanCreateDir | SubPlanRemoveDir | SubPlanMoveDir | SubPlanInstallDependency | SubPlanBuild | SubPlanCustomCLIRun | SubPlanRunServer | SubPlanStopServer | SubPlanFinished;
20
+ interface SubPlanListDir {
21
+ instruction: INSTRUCTION.ListDir;
22
+ dirpath: string;
23
+ description: string;
24
+ created_at: Date;
25
+ }
26
+ interface SubPlanReadFile {
27
+ instruction: INSTRUCTION.ReadFile;
28
+ filepath: string;
29
+ description: string;
30
+ created_at: Date;
31
+ }
32
+ interface SubPlanCreateOverwriteFile {
33
+ instruction: INSTRUCTION.CreateFile | INSTRUCTION.OverwriteFile;
34
+ filepath: string;
35
+ content: string;
36
+ description: string;
37
+ created_at: Date;
38
+ }
39
+ interface SubPlanDeleteFile {
40
+ instruction: INSTRUCTION.DeleteFile;
41
+ filepath: string;
42
+ description: string;
43
+ created_at: Date;
44
+ }
45
+ interface SubPlanMoveFile {
46
+ instruction: INSTRUCTION.MoveFile;
47
+ filepath_source: string;
48
+ filepath_target: string;
49
+ description: string;
50
+ created_at: Date;
51
+ }
52
+ interface SubPlanCreateDir {
53
+ instruction: INSTRUCTION.CreateDir;
54
+ dirpath: string;
55
+ description: string;
56
+ created_at: Date;
57
+ }
58
+ interface SubPlanRemoveDir {
59
+ instruction: INSTRUCTION.RemoveDir;
60
+ dirpath: string;
61
+ description: string;
62
+ created_at: Date;
63
+ }
64
+ interface SubPlanMoveDir {
65
+ instruction: INSTRUCTION.MoveDir;
66
+ dirpath_source: string;
67
+ dirpath_target: string;
68
+ description: string;
69
+ created_at: Date;
70
+ }
71
+ interface SubPlanInstallDependency {
72
+ instruction: INSTRUCTION.InstallDependency;
73
+ dependency_list_package_name: string[];
74
+ description: string;
75
+ created_at: Date;
76
+ }
77
+ interface SubPlanBuild {
78
+ instruction: INSTRUCTION.Build;
79
+ description: string;
80
+ created_at: Date;
81
+ }
82
+ interface SubPlanRunServer {
83
+ instruction: INSTRUCTION.RunServer;
84
+ description: string;
85
+ created_at: Date;
86
+ }
87
+ interface SubPlanStopServer {
88
+ instruction: INSTRUCTION.StopServer;
89
+ description: string;
90
+ created_at: Date;
91
+ }
92
+ interface SubPlanCustomCLIRun {
93
+ instruction: INSTRUCTION.CustomCLIRun;
94
+ command: string;
95
+ description: string;
96
+ created_at: Date;
97
+ }
98
+ interface SubPlanFinished {
99
+ instruction: INSTRUCTION.Finished;
100
+ description: string;
101
+ created_at: Date;
102
+ }
103
+ interface MainPlan {
104
+ title: string;
105
+ description: string;
106
+ created_at: Date;
107
+ sub_plans: SubPlan[];
108
+ running_at?: Date;
109
+ completed_at?: Date;
110
+ }
111
+ export declare class AutoCode {
112
+ private llm;
113
+ private cwd;
114
+ private prompt;
115
+ private session;
116
+ private list_main_plan;
117
+ constructor(cwd: string | undefined, llm: LLMRunner.BaseLLM);
118
+ start(): Promise<void>;
119
+ writeMainPlan(error_message?: string): Promise<void>;
120
+ getFirstInstructionPlan(plan: MainPlan, error_message?: string): Promise<SubPlan>;
121
+ executePlan(subplan: SubPlan): Promise<SubPlan>;
122
+ runInstruction(subplan: SubPlan): Promise<string>;
123
+ static extractCode(fenced_code: string): string;
124
+ }
125
+ export {};
126
+ //# sourceMappingURL=autocode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autocode.d.ts","sourceRoot":"","sources":["../autocode.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,376 @@
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.AutoCode = exports.INSTRUCTION = void 0;
7
+ const node_fs_1 = __importDefault(require("node:fs"));
8
+ const node_path_1 = __importDefault(require("node:path"));
9
+ const internal_execution_1 = require("./internal-execution");
10
+ const cmd_run_command_1 = require("./cmd-run-command");
11
+ const journal_log_1 = require("./journal_log");
12
+ const enquirer_1 = require("enquirer");
13
+ const listr2_1 = require("listr2");
14
+ const cmd_initialize_api_1 = require("./cmd-initialize-api");
15
+ const child_process_manager_1 = require("./child_process_manager");
16
+ var INSTRUCTION;
17
+ (function (INSTRUCTION) {
18
+ INSTRUCTION["ListDir"] = "ListDir";
19
+ INSTRUCTION["ReadFile"] = "ReadFile";
20
+ INSTRUCTION["CreateFile"] = "CreateFile";
21
+ INSTRUCTION["OverwriteFile"] = "OverwriteFile";
22
+ INSTRUCTION["DeleteFile"] = "DeleteFile";
23
+ INSTRUCTION["MoveFile"] = "MoveFile";
24
+ INSTRUCTION["CreateDir"] = "CreateDir";
25
+ INSTRUCTION["RemoveDir"] = "RemoveDir";
26
+ INSTRUCTION["MoveDir"] = "MoveDir";
27
+ INSTRUCTION["InstallDependency"] = "InstallDependency";
28
+ INSTRUCTION["Build"] = "Build";
29
+ INSTRUCTION["CustomCLIRun"] = "CustomCLIRun";
30
+ INSTRUCTION["RunServer"] = "RunServer";
31
+ INSTRUCTION["StopServer"] = "StopServer";
32
+ INSTRUCTION["Finished"] = "Finished";
33
+ })(INSTRUCTION || (exports.INSTRUCTION = INSTRUCTION = {}));
34
+ class AutoCode {
35
+ llm;
36
+ cwd;
37
+ prompt;
38
+ session;
39
+ list_main_plan = [];
40
+ constructor(cwd = __dirname, llm) {
41
+ this.prompt = '';
42
+ this.cwd = cwd;
43
+ this.llm = llm;
44
+ this.session = this.llm.chat_session_manager.newSession();
45
+ }
46
+ async start() {
47
+ journal_log_1.JournalLog.instance.cwd = this.cwd;
48
+ if (!node_fs_1.default.existsSync(this.cwd)) {
49
+ await new listr2_1.Listr([{
50
+ title: "Initializing new project",
51
+ rendererOptions: {
52
+ persistentOutput: true,
53
+ },
54
+ task: async () => {
55
+ await (0, cmd_initialize_api_1.initializeAPI)(this.cwd);
56
+ }
57
+ }]).run();
58
+ }
59
+ const env_exist = node_fs_1.default.existsSync(node_path_1.default.resolve(this.cwd, '.env'));
60
+ let env_file_content = env_exist ? await node_fs_1.default.promises.readFile(node_path_1.default.resolve(this.cwd, '.env.example'), 'utf-8') : '';
61
+ if (!env_exist) {
62
+ console.log('Please provide your credentials .env file first before continue using this AI Agent. Copy .env.example to find required keys');
63
+ env_file_content = await node_fs_1.default.promises.readFile(node_path_1.default.resolve(this.cwd, '.env.example'), 'utf-8');
64
+ const database_env = await (0, enquirer_1.prompt)([{
65
+ type: "input",
66
+ name: "DB_TYPE",
67
+ message: "Database Type",
68
+ initial: "mysql"
69
+ }, {
70
+ type: "input",
71
+ name: "DB_HOST",
72
+ message: "Database Host",
73
+ initial: "zero-db.naiv.dev"
74
+ }, {
75
+ type: "input",
76
+ name: "DB_PORT",
77
+ message: "Database Port",
78
+ initial: "3306"
79
+ }, {
80
+ type: "input",
81
+ name: "DB_USERNAME",
82
+ message: "Database Username"
83
+ }, {
84
+ type: "input",
85
+ name: "DB_PASSWORD",
86
+ message: "Database Password"
87
+ }, {
88
+ type: "input",
89
+ name: "DB_NAME",
90
+ message: "Database Name"
91
+ }]);
92
+ await node_fs_1.default.promises.writeFile(node_path_1.default.resolve(this.cwd, '.env'), env_file_content.split('\n').map(line => {
93
+ if (line.startsWith('DB_TYPE='))
94
+ return `DB_TYPE=${database_env.DB_TYPE}`;
95
+ if (line.startsWith('DB_HOST='))
96
+ return `DB_HOST=${database_env.DB_HOST}`;
97
+ if (line.startsWith('DB_PORT='))
98
+ return `DB_PORT=${database_env.DB_PORT}`;
99
+ if (line.startsWith('DB_USERNAME='))
100
+ return `DB_USERNAME=${database_env.DB_USERNAME}`;
101
+ if (line.startsWith('DB_PASSWORD='))
102
+ return `DB_PASSWORD=${database_env.DB_PASSWORD}`;
103
+ if (line.startsWith('DB_NAME='))
104
+ return `DB_NAME=${database_env.DB_NAME}`;
105
+ return line;
106
+ }).join('\n'));
107
+ }
108
+ let total_time_elapsed = 0;
109
+ const answers = await (0, enquirer_1.prompt)([{
110
+ type: "input",
111
+ name: "prompt",
112
+ message: "Instruction",
113
+ }]);
114
+ const yn_answer2 = await this.llm.ask(`Is the statement "${answers.prompt}" (including context from conversation) is just a common conversation like question or statement to gain some information (I mean not like an instruction to do code development like "build me something ...", "please fix ...", "update this ...", "add feature ...", and so on)? if yes write 1, no write 0`, this.session.id);
115
+ if (yn_answer2.includes('1')) {
116
+ await journal_log_1.JournalLog.instance.writeLog(`# QA Session at ${new Date().toISOString()}\n\n`);
117
+ await journal_log_1.JournalLog.instance.writeLog(`## Question\n\n`);
118
+ await journal_log_1.JournalLog.instance.writeLog(`${answers.prompt}\n\n`);
119
+ await new listr2_1.Listr([{
120
+ title: "Preparing answer",
121
+ rendererOptions: {
122
+ persistentOutput: true,
123
+ },
124
+ task: async (_, task) => {
125
+ const ts_start = performance.now();
126
+ let old_title = task.title;
127
+ this.session.list_message.push({
128
+ content: await node_fs_1.default.promises.readFile(node_path_1.default.resolve(__dirname, '../prompt/sub-plan-guide.md'), 'utf-8'),
129
+ role: 'user'
130
+ });
131
+ let subplan = await this.getFirstInstructionPlan({
132
+ title: answers.prompt,
133
+ description: 'answer the question, look out the files and read if you need',
134
+ created_at: new Date(),
135
+ sub_plans: []
136
+ });
137
+ let i = 0;
138
+ while (subplan.instruction !== INSTRUCTION.Finished) {
139
+ i++;
140
+ let dots = Array(i).fill('•').join('');
141
+ task.title = `${old_title} ${dots} ${i}. ${subplan.description}`;
142
+ subplan = await this.executePlan(subplan);
143
+ }
144
+ const ts_end = performance.now();
145
+ const time_elapsed = ts_end - ts_start; // milliseconds
146
+ total_time_elapsed += time_elapsed;
147
+ task.title = `${subplan.description} [${time_elapsed > 1000 ? `${(time_elapsed / 1000).toFixed(2)}s ~ ` : ''}${time_elapsed.toFixed(0)}ms]`;
148
+ await journal_log_1.JournalLog.instance.writeLog(`## Answer\n\n`);
149
+ await journal_log_1.JournalLog.instance.writeLog(`${subplan.description}\n\n`);
150
+ }
151
+ }]).run();
152
+ await journal_log_1.JournalLog.instance.writeLog(`completed at ${new Date().toISOString()}.\n\n`);
153
+ journal_log_1.JournalLog.instance.persistLog();
154
+ }
155
+ else {
156
+ await journal_log_1.JournalLog.instance.writeLog(`# AutoCode Session at ${new Date().toISOString()}\n\n`);
157
+ await journal_log_1.JournalLog.instance.writeLog(`## Scope of Work\n\n`);
158
+ this.prompt = answers.prompt;
159
+ if (!this.prompt) {
160
+ console.log(`No prompt provided.`);
161
+ process.exit(0);
162
+ }
163
+ await journal_log_1.JournalLog.instance.writeLog(`${this.prompt}\n\n`);
164
+ await journal_log_1.JournalLog.instance.writeLog(`## Main Plan\n\n`);
165
+ await new listr2_1.Listr([{
166
+ title: "Planning execution",
167
+ rendererOptions: {
168
+ persistentOutput: true,
169
+ },
170
+ task: async () => {
171
+ await this.writeMainPlan();
172
+ }
173
+ }]).run();
174
+ await journal_log_1.JournalLog.instance.writeLog(this.list_main_plan.map(p => `- ${p.title}: ${p.description}`).join('\n') + '\n\n');
175
+ this.session.list_message.push({
176
+ content: await node_fs_1.default.promises.readFile(node_path_1.default.resolve(__dirname, '../prompt/sub-plan-guide.md'), 'utf-8'),
177
+ role: 'user'
178
+ });
179
+ let latest_answer = '';
180
+ const tasks = new listr2_1.Listr(this.list_main_plan.map((mp, i) => ({
181
+ title: `[${i + 1}/${this.list_main_plan.length}] ${mp.title}`,
182
+ rendererOptions: {
183
+ persistentOutput: true,
184
+ },
185
+ task: async (_, task) => {
186
+ const ts_start = performance.now();
187
+ let old_title = task.title;
188
+ task.title = `${old_title} • ${mp.description}`;
189
+ await journal_log_1.JournalLog.instance.writeLog(`### ${mp.title}\n\n`);
190
+ let subplan = await this.getFirstInstructionPlan(mp);
191
+ let i = 0;
192
+ while (subplan.instruction !== INSTRUCTION.Finished) {
193
+ i++;
194
+ let dots = Array(i).fill('•').join('');
195
+ task.title = `${old_title} ${dots} ${i}. ${subplan.description}`;
196
+ subplan = await this.executePlan(subplan);
197
+ }
198
+ await journal_log_1.JournalLog.instance.writeLog(`completed at ${new Date().toISOString()}.\n\n`);
199
+ const ts_end = performance.now();
200
+ const time_elapsed = ts_end - ts_start; // milliseconds
201
+ total_time_elapsed += time_elapsed;
202
+ task.title = `${task.title} [${time_elapsed > 1000 ? `${(time_elapsed / 1000).toFixed(2)}s ~ ` : ''}${time_elapsed.toFixed(0)}ms]`;
203
+ latest_answer = subplan.description;
204
+ }
205
+ })));
206
+ await journal_log_1.JournalLog.instance.writeLog(`## Plan Execution\n\n`);
207
+ await tasks.run();
208
+ journal_log_1.JournalLog.instance.persistLog();
209
+ }
210
+ console.log(`Total time elapsed ${(total_time_elapsed / 1000).toFixed(2)}s ~ ${total_time_elapsed.toFixed(0)}ms`);
211
+ }
212
+ async writeMainPlan(error_message) {
213
+ const res = await this.llm.ask(error_message ?? [
214
+ await node_fs_1.default.promises.readFile(node_path_1.default.resolve(this.cwd, 'INSTRUCTION.md'), 'utf-8'),
215
+ `SCOPE OF WORK: ${this.prompt}`,
216
+ await node_fs_1.default.promises.readFile(node_path_1.default.resolve(__dirname, '../prompt/main-plan-prompt.md'), 'utf-8')
217
+ ], this.session.id);
218
+ try {
219
+ this.list_main_plan = JSON.parse(AutoCode.extractCode(res));
220
+ this.list_main_plan = this.list_main_plan.map(mp => ({ ...mp, created_at: new Date(), sub_plans: [] }));
221
+ for (const mp of this.list_main_plan) {
222
+ if (!mp.title || !mp.description) {
223
+ throw new Error(`title and description on plans cannot be empty`);
224
+ }
225
+ }
226
+ }
227
+ catch (err) {
228
+ console.log(res);
229
+ console.log(`There is an error on main plan response: ${err.toString()}`);
230
+ await this.writeMainPlan(`There is an error on main plan response: ${err.toString()}`);
231
+ }
232
+ }
233
+ async getFirstInstructionPlan(plan, error_message) {
234
+ const res = await this.llm.ask(error_message ?? `write subplan for ${JSON.stringify({ title: plan?.title, description: plan?.description })}`, this.session.id);
235
+ try {
236
+ return JSON.parse(AutoCode.extractCode(res));
237
+ }
238
+ catch (err) {
239
+ console.log(res);
240
+ console.log(`There is an error on subplan response: ${err.toString()}`);
241
+ return await this.getFirstInstructionPlan(plan, `There is an error on subplan response: ${err.toString()}`);
242
+ }
243
+ }
244
+ async executePlan(subplan) {
245
+ let res = await this.runInstruction(subplan);
246
+ let error_counter = 0;
247
+ while (true) {
248
+ try {
249
+ return JSON.parse(AutoCode.extractCode(res));
250
+ }
251
+ catch (err) {
252
+ console.log(`[Error Count: ${++error_counter}] There is an error on subplan response: ${err.toString()}`);
253
+ res = await this.llm.ask(`There is an error on subplan response JSON format: ${err.toString()}`, this.session.id);
254
+ }
255
+ }
256
+ }
257
+ async runInstruction(subplan) {
258
+ const env_exist = node_fs_1.default.existsSync(node_path_1.default.resolve(this.cwd, '.env'));
259
+ const env_file_content = env_exist ? await node_fs_1.default.promises.readFile(node_path_1.default.resolve(this.cwd, '.env.example'), 'utf-8') : '';
260
+ let result = '';
261
+ switch (subplan.instruction) {
262
+ case INSTRUCTION.ListDir:
263
+ try {
264
+ result = internal_execution_1.InternalExecution.ListDir(subplan.dirpath, this.cwd).join('\n');
265
+ }
266
+ catch (err) {
267
+ result = err.toString().replaceAll(this.cwd, '');
268
+ }
269
+ break;
270
+ case INSTRUCTION.ReadFile:
271
+ try {
272
+ result = await internal_execution_1.InternalExecution.ReadFile(subplan.filepath, this.cwd);
273
+ }
274
+ catch (err) {
275
+ result = err.toString().replaceAll(this.cwd, '');
276
+ }
277
+ break;
278
+ case INSTRUCTION.CreateFile:
279
+ case INSTRUCTION.OverwriteFile:
280
+ try {
281
+ await internal_execution_1.InternalExecution.CreateFile(subplan.filepath, subplan.content, this.cwd);
282
+ result = `File ${subplan.filepath} successfully write/overwrite`;
283
+ }
284
+ catch (err) {
285
+ result = err.toString().replaceAll(this.cwd, '');
286
+ }
287
+ break;
288
+ case INSTRUCTION.DeleteFile:
289
+ try {
290
+ await internal_execution_1.InternalExecution.DeleteFile(subplan.filepath, this.cwd);
291
+ result = `File ${subplan.filepath} successfully write/overwrite`;
292
+ }
293
+ catch (err) {
294
+ result = err.toString().replaceAll(this.cwd, '');
295
+ }
296
+ break;
297
+ case INSTRUCTION.MoveFile:
298
+ try {
299
+ await internal_execution_1.InternalExecution.MoveFile(subplan.filepath_source, subplan.filepath_target, this.cwd);
300
+ result = `File moved to ${subplan.filepath_target} successfully`;
301
+ }
302
+ catch (err) {
303
+ result = err.toString().replaceAll(this.cwd, '');
304
+ }
305
+ break;
306
+ case INSTRUCTION.CreateDir:
307
+ try {
308
+ await internal_execution_1.InternalExecution.CreateDir(subplan.dirpath, this.cwd);
309
+ result = `Directory ${subplan.dirpath} created successfully`;
310
+ }
311
+ catch (err) {
312
+ result = err.toString().replaceAll(this.cwd, '');
313
+ }
314
+ break;
315
+ case INSTRUCTION.RemoveDir:
316
+ try {
317
+ await internal_execution_1.InternalExecution.RemoveDir(subplan.dirpath, this.cwd);
318
+ result = `Directory ${subplan.dirpath} removed successfully`;
319
+ }
320
+ catch (err) {
321
+ result = err.toString().replaceAll(this.cwd, '');
322
+ }
323
+ break;
324
+ case INSTRUCTION.MoveDir:
325
+ try {
326
+ await internal_execution_1.InternalExecution.MoveFile(subplan.dirpath_source, subplan.dirpath_target, this.cwd);
327
+ result = `Directory moved to ${subplan.dirpath_target} successfully`;
328
+ }
329
+ catch (err) {
330
+ result = err.toString().replaceAll(this.cwd, '');
331
+ }
332
+ break;
333
+ case INSTRUCTION.InstallDependency:
334
+ result = await (0, cmd_run_command_1.runCommand)(`npm install --save ${subplan.dependency_list_package_name.join(' ')}`, this.cwd);
335
+ break;
336
+ case INSTRUCTION.Build:
337
+ result = await (0, cmd_run_command_1.runCommand)(`npm run build`, this.cwd);
338
+ break;
339
+ case INSTRUCTION.CustomCLIRun:
340
+ result = await (0, cmd_run_command_1.runCommand)(subplan.command, this.cwd);
341
+ break;
342
+ case INSTRUCTION.RunServer:
343
+ if (child_process_manager_1.ChildProcessManager.instance.isServerRunning()) {
344
+ result = "Checking if server running... server is already running";
345
+ }
346
+ else {
347
+ if (!env_exist) {
348
+ result = '.env file doesnt exist cant start server';
349
+ break;
350
+ }
351
+ child_process_manager_1.ChildProcessManager.instance.runServer(this.cwd);
352
+ const port = env_file_content.split('\n').find(l => l.startsWith('PORT'));
353
+ result = `Checking if server running... server is running ${port}`;
354
+ }
355
+ break;
356
+ case INSTRUCTION.StopServer:
357
+ if (!child_process_manager_1.ChildProcessManager.instance.isServerRunning()) {
358
+ result = "Checking if server running... server is already stopped";
359
+ }
360
+ else {
361
+ child_process_manager_1.ChildProcessManager.instance.killServer();
362
+ result = `Checking if server running... server stopped`;
363
+ }
364
+ break;
365
+ case INSTRUCTION.Finished:
366
+ return '';
367
+ }
368
+ return await this.llm.ask(result, this.session.id);
369
+ }
370
+ static extractCode(fenced_code) {
371
+ const regex = /(?:```(?:\w+)?\n)?([\s\S]*?)(?:\n?```)?$/;
372
+ return fenced_code.trim().match(regex)[1];
373
+ }
374
+ }
375
+ exports.AutoCode = AutoCode;
376
+ //# sourceMappingURL=autocode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autocode.js","sourceRoot":"","sources":["../autocode.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { ChildProcessByStdio } from "node:child_process";
2
+ export declare class ChildProcessManager {
3
+ private static _instance;
4
+ list_cp: Set<ChildProcessByStdio<any, any, any>>;
5
+ running_server_process: ChildProcessByStdio<any, any, any> | null;
6
+ private constructor();
7
+ static get instance(): ChildProcessManager;
8
+ cleanUpChildProcess(): void;
9
+ addChildProcess(cp: ChildProcessByStdio<any, any, any>): void;
10
+ isServerRunning(): boolean;
11
+ killServer(cwd?: string): void;
12
+ runServer(cwd?: string, node?: string): void;
13
+ }
14
+ //# sourceMappingURL=child_process_manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"child_process_manager.d.ts","sourceRoot":"","sources":["../child_process_manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAS,MAAM,oBAAoB,CAAC;AAIhE,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAAC,SAAS,CAAsB;IACvC,OAAO,0CAAiD;IACxD,sBAAsB,EAAE,mBAAmB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,CAAO;IAE/E,OAAO;IAEP,WAAkB,QAAQ,IAAI,mBAAmB,CAKhD;IAEM,mBAAmB;IAgBnB,eAAe,CAAC,EAAE,EAAE,mBAAmB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAItD,eAAe,IAAI,OAAO;IAI1B,UAAU,CAAC,GAAG,GAAE,MAAkB;IAYlC,SAAS,CAAC,GAAG,GAAE,MAAkB,EAAE,IAAI,GAAE,MAAc;CA0B/D"}
@@ -0,0 +1,82 @@
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.ChildProcessManager = void 0;
7
+ const tree_kill_1 = __importDefault(require("tree-kill"));
8
+ const node_child_process_1 = require("node:child_process");
9
+ const fs_1 = __importDefault(require("fs"));
10
+ const path_1 = __importDefault(require("path"));
11
+ class ChildProcessManager {
12
+ static _instance;
13
+ list_cp = new Set();
14
+ running_server_process = null;
15
+ constructor() { }
16
+ static get instance() {
17
+ if (!ChildProcessManager._instance) {
18
+ ChildProcessManager._instance = new ChildProcessManager();
19
+ }
20
+ return ChildProcessManager._instance;
21
+ }
22
+ cleanUpChildProcess() {
23
+ if (this.list_cp.size > 0) {
24
+ console.log(`Killing ${this.list_cp.size} child processes...`);
25
+ this.list_cp.forEach((child) => {
26
+ // Use tree-kill to terminate the process and its descendants
27
+ (0, tree_kill_1.default)(child.pid, 'SIGTERM', (err) => {
28
+ if (err) {
29
+ console.error(`Failed to kill child process ${child.pid}:`, err);
30
+ }
31
+ else {
32
+ console.log(`Process ${child.pid} killed.`);
33
+ }
34
+ });
35
+ });
36
+ }
37
+ }
38
+ addChildProcess(cp) {
39
+ this.list_cp.add(cp);
40
+ }
41
+ isServerRunning() {
42
+ return Boolean(this.running_server_process?.pid);
43
+ }
44
+ killServer(cwd = __dirname) {
45
+ if (this.running_server_process?.pid) {
46
+ (0, tree_kill_1.default)(this.running_server_process.pid, 'SIGTERM', (err) => {
47
+ if (err) {
48
+ fs_1.default.appendFileSync(path_1.default.resolve(cwd, "./server.log"), `[${new Date().toISOString()}]: Failed to kill child process ${this.running_server_process?.pid}: ${err.message}\n`);
49
+ }
50
+ else {
51
+ fs_1.default.appendFileSync(path_1.default.resolve(cwd, "./server.log"), `[${new Date().toISOString()}]: Process ${this.running_server_process?.pid} killed.\n`);
52
+ }
53
+ });
54
+ }
55
+ }
56
+ runServer(cwd = __dirname, node = 'npm') {
57
+ this.running_server_process = (0, node_child_process_1.spawn)(`${node} run build && ${node} start`, {
58
+ cwd,
59
+ shell: true,
60
+ stdio: ["ignore", "pipe", "pipe"],
61
+ });
62
+ ChildProcessManager.instance.addChildProcess(this.running_server_process);
63
+ this.running_server_process.stdout?.on("data", (d) => {
64
+ const msg = d.toString();
65
+ fs_1.default.appendFileSync(path_1.default.resolve(cwd, "./server.log"), `[${new Date().toISOString()}]: ${msg}`);
66
+ });
67
+ this.running_server_process.stderr?.on("data", (d) => {
68
+ const msg = d.toString();
69
+ fs_1.default.appendFileSync(path_1.default.resolve(cwd, "./server.log"), `[${new Date().toISOString()}]: ERR: ${msg}`);
70
+ });
71
+ this.running_server_process.on("exit", (code, signal) => {
72
+ if (code !== null) {
73
+ fs_1.default.appendFileSync(path_1.default.resolve(cwd, "./server.log"), `[${new Date().toISOString()}]: Child process exited with code ${code}`);
74
+ }
75
+ else {
76
+ fs_1.default.appendFileSync(path_1.default.resolve(cwd, "./server.log"), `[${new Date().toISOString()}]: Child process terminated by signal ${signal}`);
77
+ }
78
+ });
79
+ }
80
+ }
81
+ exports.ChildProcessManager = ChildProcessManager;
82
+ //# sourceMappingURL=child_process_manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"child_process_manager.js","sourceRoot":"","sources":["../child_process_manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=cleanup-safely.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cleanup-safely.d.ts","sourceRoot":"","sources":["../cleanup-safely.ts"],"names":[],"mappings":""}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const child_process_manager_1 = require("./child_process_manager");
4
+ const journal_log_1 = require("./journal_log");
5
+ process.on('SIGINT', () => {
6
+ console.log('Received SIGINT signal. Performing graceful shutdown...');
7
+ journal_log_1.JournalLog.instance.persistLog();
8
+ child_process_manager_1.ChildProcessManager.instance.cleanUpChildProcess();
9
+ process.exit(0); // Exit after cleanup
10
+ });
11
+ process.on('SIGTERM', () => {
12
+ console.log('Received SIGTERM signal. Performing graceful shutdown...');
13
+ journal_log_1.JournalLog.instance.persistLog();
14
+ child_process_manager_1.ChildProcessManager.instance.cleanUpChildProcess();
15
+ process.exit(0);
16
+ });
17
+ //# sourceMappingURL=cleanup-safely.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cleanup-safely.js","sourceRoot":"","sources":["../cleanup-safely.ts"],"names":[],"mappings":";;AAAA,mEAA8D;AAC9D,+CAA2C;AAE3C,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;IACxB,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;IACvE,wBAAU,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;IACjC,2CAAmB,CAAC,QAAQ,CAAC,mBAAmB,EAAE,CAAC;IACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,qBAAqB;AACxC,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;IACzB,OAAO,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC;IACxE,wBAAU,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;IACjC,2CAAmB,CAAC,QAAQ,CAAC,mBAAmB,EAAE,CAAC;IACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function initializeAPI(target_path?: string, node?: string): Promise<void>;
2
+ //# sourceMappingURL=cmd-initialize-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cmd-initialize-api.d.ts","sourceRoot":"","sources":["../cmd-initialize-api.ts"],"names":[],"mappings":"AAkCA,wBAAsB,aAAa,CAAC,WAAW,GAAE,MAAW,EAAE,IAAI,GAAE,MAAc,iBA0BjF"}
@@ -0,0 +1,94 @@
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.initializeAPI = initializeAPI;
7
+ const child_process = require("child_process");
8
+ const child_process_manager_1 = require("./child_process_manager");
9
+ const fs_1 = __importDefault(require("fs"));
10
+ const path_1 = __importDefault(require("path"));
11
+ const os_1 = __importDefault(require("os"));
12
+ const unzipper_1 = __importDefault(require("unzipper"));
13
+ const node_fetch_1 = __importDefault(require("node-fetch"));
14
+ async function installAPI(cwd = __dirname, node = 'npm') {
15
+ return new Promise((resolve) => {
16
+ let c_process = child_process.spawn(node, ["install"], {
17
+ cwd,
18
+ stdio: ["ignore", "pipe", "pipe"]
19
+ });
20
+ child_process_manager_1.ChildProcessManager.instance.addChildProcess(c_process);
21
+ c_process.stdout?.on("data", (d) => {
22
+ const msg = d.toString();
23
+ // console.log("server-log", msg)
24
+ });
25
+ c_process.stderr?.on("data", (d) => {
26
+ const msg = d.toString();
27
+ // console.log("server-log", `ERR: ${msg}`)
28
+ });
29
+ c_process.on("exit", (code) => {
30
+ // console.log("server-log", `EXIT: ${code}`);
31
+ resolve(code);
32
+ });
33
+ });
34
+ }
35
+ async function initializeAPI(target_path = '', node = 'npm') {
36
+ const target_path_absolute = toAbsolutePath(target_path);
37
+ if (!fs_1.default.existsSync(target_path_absolute)) {
38
+ fs_1.default.mkdirSync(target_path_absolute);
39
+ }
40
+ const res = await (0, node_fetch_1.default)('https://github.com/NAIV-Dev/naiv-ts-api-starter/archive/refs/heads/master.zip');
41
+ res.body
42
+ .pipe(unzipper_1.default.Parse())
43
+ .on("entry", entry => {
44
+ const parts = entry.path.split("/").slice(1); // remove root
45
+ const dest = path_1.default.join(target_path_absolute, ...parts);
46
+ if (!parts.length) {
47
+ entry.autodrain();
48
+ return;
49
+ }
50
+ if (entry.type === "Directory") {
51
+ fs_1.default.mkdirSync(dest, { recursive: true });
52
+ entry.autodrain();
53
+ }
54
+ else {
55
+ fs_1.default.mkdirSync(path_1.default.dirname(dest), { recursive: true });
56
+ entry.pipe(fs_1.default.createWriteStream(dest));
57
+ }
58
+ });
59
+ await installAPI(target_path_absolute, node);
60
+ }
61
+ async function extractWithoutRoot(zip_path, target_path) {
62
+ const zip = await unzipper_1.default.Open.file(zip_path);
63
+ // Get root folder name
64
+ const root = zip.files[0]?.path.split("/")[0];
65
+ await Promise.all(zip.files.map(file => {
66
+ let p = file.path.replace(root + "/", "");
67
+ if (!p)
68
+ return;
69
+ const dest = path_1.default.join(target_path, p);
70
+ if (file.type === "Directory") {
71
+ return fs_1.default.promises.mkdir(dest, { recursive: true });
72
+ }
73
+ return new Promise((res, rej) => {
74
+ fs_1.default.mkdirSync(path_1.default.dirname(dest), { recursive: true });
75
+ file.stream()
76
+ .pipe(fs_1.default.createWriteStream(dest))
77
+ .on("finish", res)
78
+ .on("error", rej);
79
+ });
80
+ }));
81
+ }
82
+ function toAbsolutePath(input_path) {
83
+ if (!input_path) {
84
+ throw new Error("Path is required");
85
+ }
86
+ let p = input_path;
87
+ // Expand ~ to home directory
88
+ if (p.startsWith("~")) {
89
+ p = path_1.default.resolve(os_1.default.homedir(), p.slice(1));
90
+ }
91
+ // Resolve to absolute
92
+ return path_1.default.resolve(p);
93
+ }
94
+ //# sourceMappingURL=cmd-initialize-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cmd-initialize-api.js","sourceRoot":"","sources":["../cmd-initialize-api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function runCommand(command: string, cwd?: string): Promise<string>;
2
+ //# sourceMappingURL=cmd-run-command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cmd-run-command.d.ts","sourceRoot":"","sources":["../cmd-run-command.ts"],"names":[],"mappings":"AAGA,wBAAsB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,GAAE,MAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAgC1F"}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runCommand = runCommand;
4
+ const node_child_process_1 = require("node:child_process");
5
+ const child_process_manager_1 = require("./child_process_manager");
6
+ async function runCommand(command, cwd = __dirname) {
7
+ return new Promise((resolve, reject) => {
8
+ const outputs = [];
9
+ let cp = (0, node_child_process_1.spawn)(command, {
10
+ cwd,
11
+ shell: true,
12
+ stdio: ["ignore", "pipe", "pipe"],
13
+ });
14
+ child_process_manager_1.ChildProcessManager.instance.addChildProcess(cp);
15
+ cp.stdout?.on("data", (d) => {
16
+ const msg = d.toString();
17
+ // console.log("server-log", msg);
18
+ outputs.push(msg);
19
+ });
20
+ cp.stderr?.on("data", (d) => {
21
+ const msg = d.toString();
22
+ // console.log("server-log", `ERR: ${msg}`);
23
+ outputs.push(msg);
24
+ });
25
+ cp.on("close", (code, signal) => {
26
+ // console.log("server-log", `ERR: ${code} ${signal}`)
27
+ });
28
+ cp.on("exit", (code) => {
29
+ // console.log("server-log", `EXIT: ${code}`);
30
+ outputs.push(`Exit code ${code}`);
31
+ resolve(outputs.join('\n'));
32
+ });
33
+ });
34
+ }
35
+ //# sourceMappingURL=cmd-run-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cmd-run-command.js","sourceRoot":"","sources":["../cmd-run-command.ts"],"names":[],"mappings":";;AAGA,gCAgCC;AAnCD,2DAA2C;AAC3C,mEAA8D;AAEvD,KAAK,UAAU,UAAU,CAAC,OAAe,EAAE,MAAc,SAAS;IACvE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,IAAI,EAAE,GAAG,IAAA,0BAAK,EAAC,OAAO,EAAE;YACtB,GAAG;YACH,KAAK,EAAE,IAAI;YACX,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;SAClC,CAAC,CAAC;QACH,2CAAmB,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;QAEjD,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE;YAC1B,MAAM,GAAG,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAA;YACxB,kCAAkC;YAClC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE;YAC1B,MAAM,GAAG,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAA;YACxB,4CAA4C;YAC5C,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;YAC9B,sDAAsD;QACxD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YACrB,8CAA8C;YAC9C,OAAO,CAAC,IAAI,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC;YAClC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ import './cleanup-safely';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";AAIA,OAAO,kBAAkB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,39 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ const llm_runner_1 = require("@graf-research/llm-runner");
8
+ const autocode_1 = require("./autocode");
9
+ require("./cleanup-safely");
10
+ const arg_1 = __importDefault(require("arg"));
11
+ const args = (0, arg_1.default)({
12
+ "--dir": String,
13
+ "-d": "--dir",
14
+ "--llm-endpoint": String,
15
+ "--secret-key": String,
16
+ "--sk": "--secret-key",
17
+ "-s": "--sk",
18
+ "--llm-model": String,
19
+ "--model": "--llm-model",
20
+ "-m": "--model"
21
+ });
22
+ if (!args['--dir']) {
23
+ throw new Error(`--dir/-d argument is required`);
24
+ }
25
+ async function main() {
26
+ const app_dir = args['--dir'];
27
+ const secret_key = args['--secret-key'] || process.env.SK;
28
+ const llm_model = args['--llm-model'] || 'google/gemini-3-flash-preview';
29
+ const llm_endpoint = args['--llm-endpoint'] || 'https://openrouter.ai/api/v1';
30
+ if (!secret_key) {
31
+ throw new Error(`--secret-key/--sk/-s argument or env variable SK is required (please provide your LLM secret key)`);
32
+ }
33
+ const llm = new llm_runner_1.ChatGPTLLM(secret_key, llm_model, undefined, llm_endpoint);
34
+ const ac = new autocode_1.AutoCode(app_dir, llm);
35
+ while (true)
36
+ await ac.start();
37
+ }
38
+ main();
39
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;;;;AAEA,0DAAuD;AACvD,yCAAsC;AACtC,4BAA0B;AAC1B,8CAAsB;AAEtB,MAAM,IAAI,GAAG,IAAA,aAAG,EAAC;IACf,OAAO,EAAE,MAAM;IACf,IAAI,EAAE,OAAO;IACb,gBAAgB,EAAE,MAAM;IACxB,cAAc,EAAE,MAAM;IACtB,MAAM,EAAE,cAAc;IACtB,IAAI,EAAE,MAAM;IACZ,aAAa,EAAE,MAAM;IACrB,SAAS,EAAE,aAAa;IACxB,IAAI,EAAE,SAAS;CAChB,CAAC,CAAC;AAEH,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;IACnB,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;AACnD,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,EAAY,CAAC;IACpE,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,+BAA+B,CAAC;IACzE,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,8BAA8B,CAAC;IAE9E,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,mGAAmG,CAAC,CAAC;IACvH,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,uBAAU,CAAC,UAAU,EAAE,SAAgB,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;IAClF,MAAM,EAAE,GAAG,IAAI,mBAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACtC,OAAO,IAAI;QAAE,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;AAChC,CAAC;AAED,IAAI,EAAE,CAAC"}
@@ -0,0 +1,10 @@
1
+ export declare namespace InternalExecution {
2
+ function ListDir(target_path: string, cwd: string): string[];
3
+ function DeleteFile(target_path: string, cwd: string): Promise<void>;
4
+ function CreateFile(target_path: string, content: string, cwd: string): Promise<void>;
5
+ function ReadFile(target_path: string, cwd: string): Promise<string>;
6
+ function MoveFile(target_source: string, target_destination: string, cwd: string): Promise<void>;
7
+ function CreateDir(target_dir: string, cwd: string): Promise<void>;
8
+ function RemoveDir(target_dir: string, cwd: string): Promise<void>;
9
+ }
10
+ //# sourceMappingURL=internal-execution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internal-execution.d.ts","sourceRoot":"","sources":["../internal-execution.ts"],"names":[],"mappings":"AAGA,yBAAiB,iBAAiB,CAAC;IACjC,SAAgB,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CA6BlE;IAED,SAAsB,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,iBAEhE;IAED,SAAsB,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,iBAEjF;IAED,SAAsB,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAEhF;IAED,SAAsB,QAAQ,CAAC,aAAa,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,iBAE5F;IAED,SAAsB,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,iBAE9D;IAED,SAAsB,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,iBAE9D;CACF"}
@@ -0,0 +1,63 @@
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.InternalExecution = void 0;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const path_1 = __importDefault(require("path"));
9
+ var InternalExecution;
10
+ (function (InternalExecution) {
11
+ function ListDir(target_path, cwd) {
12
+ function getAllFilesRecursive(dirPath, excludedFolders = new Set()) {
13
+ let filesList = [];
14
+ // Check if the current directory should be excluded
15
+ const folderName = path_1.default.basename(dirPath);
16
+ if (excludedFolders.has(folderName)) {
17
+ return filesList; // Skip this directory and all its contents
18
+ }
19
+ const files = fs_1.default.readdirSync(dirPath, { withFileTypes: true });
20
+ for (const file of files) {
21
+ const fullPath = path_1.default.join(dirPath, file.name);
22
+ if (file.isDirectory()) {
23
+ // Recursively call the function for subdirectories
24
+ filesList = filesList.concat(getAllFilesRecursive(fullPath, excludedFolders));
25
+ }
26
+ else {
27
+ // Add the file to the list
28
+ filesList.push(fullPath.replace(/\"/g, ''));
29
+ }
30
+ }
31
+ return filesList;
32
+ }
33
+ const foldersToExclude = new Set(['node_modules', '.git', '.cache']);
34
+ return getAllFilesRecursive(path_1.default.resolve(cwd, target_path), foldersToExclude).map(p => p.replace(cwd.endsWith('/') ? cwd : (cwd + '/'), ''));
35
+ }
36
+ InternalExecution.ListDir = ListDir;
37
+ async function DeleteFile(target_path, cwd) {
38
+ await fs_1.default.promises.rm(path_1.default.resolve(cwd, target_path));
39
+ }
40
+ InternalExecution.DeleteFile = DeleteFile;
41
+ async function CreateFile(target_path, content, cwd) {
42
+ await fs_1.default.promises.writeFile(path_1.default.resolve(cwd, target_path), content);
43
+ }
44
+ InternalExecution.CreateFile = CreateFile;
45
+ async function ReadFile(target_path, cwd) {
46
+ return await fs_1.default.promises.readFile(path_1.default.resolve(cwd, target_path), 'utf-8');
47
+ }
48
+ InternalExecution.ReadFile = ReadFile;
49
+ async function MoveFile(target_source, target_destination, cwd) {
50
+ await fs_1.default.promises.rename(path_1.default.resolve(cwd, target_source), path_1.default.resolve(cwd, target_destination));
51
+ }
52
+ InternalExecution.MoveFile = MoveFile;
53
+ async function CreateDir(target_dir, cwd) {
54
+ await fs_1.default.promises.mkdir(path_1.default.resolve(cwd, target_dir));
55
+ }
56
+ InternalExecution.CreateDir = CreateDir;
57
+ async function RemoveDir(target_dir, cwd) {
58
+ await fs_1.default.promises.rm(path_1.default.resolve(cwd, target_dir), { force: true, recursive: true });
59
+ }
60
+ InternalExecution.RemoveDir = RemoveDir;
61
+ })(InternalExecution || (exports.InternalExecution = InternalExecution = {}));
62
+ // console.log(InternalExecution.ListDir('/home/rio/temp/goo'));
63
+ //# sourceMappingURL=internal-execution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internal-execution.js","sourceRoot":"","sources":["../internal-execution.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export declare class JournalLog {
2
+ private static _instance;
3
+ private log_path;
4
+ private temporary_journal_log;
5
+ cwd: string;
6
+ private constructor();
7
+ static get instance(): JournalLog;
8
+ writeLog(log: string): Promise<void>;
9
+ persistLog(): void;
10
+ readLog(): Promise<string>;
11
+ }
12
+ //# sourceMappingURL=journal_log.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"journal_log.d.ts","sourceRoot":"","sources":["../journal_log.ts"],"names":[],"mappings":"AAGA,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAC,SAAS,CAAa;IACrC,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,qBAAqB,CAAgB;IACtC,GAAG,EAAE,MAAM,CAAM;IAExB,OAAO;IAGP,WAAkB,QAAQ,IAAI,UAAU,CAKvC;IAEY,QAAQ,CAAC,GAAG,EAAE,MAAM;IAK1B,UAAU;IAWJ,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;CAGxC"}
@@ -0,0 +1,41 @@
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.JournalLog = void 0;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const path_1 = __importDefault(require("path"));
9
+ class JournalLog {
10
+ static _instance;
11
+ log_path = 'journal.md';
12
+ temporary_journal_log = [];
13
+ cwd = '';
14
+ constructor() {
15
+ }
16
+ static get instance() {
17
+ if (!JournalLog._instance) {
18
+ JournalLog._instance = new JournalLog();
19
+ }
20
+ return JournalLog._instance;
21
+ }
22
+ async writeLog(log) {
23
+ // console.log(`Writing log ${log.length} chars...`);
24
+ this.temporary_journal_log.push(log);
25
+ }
26
+ persistLog() {
27
+ // console.log(`Persist ${this.temporary_journal_log.length} logs...`);
28
+ const filepath = path_1.default.resolve(this.cwd, this.log_path);
29
+ // console.log({ filepath, logs: this.temporary_journal_log });
30
+ this.temporary_journal_log.push(`\n\n\n--- End of log (${new Date().toISOString()}) ---\n\n\n`);
31
+ // console.log(`writing log...`);
32
+ fs_1.default.appendFileSync(filepath, this.temporary_journal_log.join(''), { encoding: 'utf-8' });
33
+ // console.log(`Log succefully updated.`);
34
+ this.temporary_journal_log = [];
35
+ }
36
+ async readLog() {
37
+ return await fs_1.default.promises.readFile(path_1.default.resolve(this.cwd, this.log_path), 'utf-8');
38
+ }
39
+ }
40
+ exports.JournalLog = JournalLog;
41
+ //# sourceMappingURL=journal_log.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"journal_log.js","sourceRoot":"","sources":["../journal_log.ts"],"names":[],"mappings":";;;;;;AAAA,4CAAoB;AACpB,gDAAwB;AAExB,MAAa,UAAU;IACb,MAAM,CAAC,SAAS,CAAa;IAC7B,QAAQ,GAAG,YAAY,CAAC;IACxB,qBAAqB,GAAa,EAAE,CAAC;IACtC,GAAG,GAAW,EAAE,CAAC;IAExB;IACA,CAAC;IAEM,MAAM,KAAK,QAAQ;QACxB,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC;YAC1B,UAAU,CAAC,SAAS,GAAG,IAAI,UAAU,EAAE,CAAC;QAC1C,CAAC;QACD,OAAO,UAAU,CAAC,SAAS,CAAC;IAC9B,CAAC;IAEM,KAAK,CAAC,QAAQ,CAAC,GAAW;QAC/B,qDAAqD;QACrD,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvC,CAAC;IAEM,UAAU;QACf,uEAAuE;QACvE,MAAM,QAAQ,GAAG,cAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvD,+DAA+D;QAC/D,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,yBAAyB,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;QAChG,iCAAiC;QACjC,YAAE,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QACxF,0CAA0C;QAC1C,IAAI,CAAC,qBAAqB,GAAG,EAAE,CAAC;IAClC,CAAC;IAEM,KAAK,CAAC,OAAO;QAClB,OAAO,MAAM,YAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,cAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;IACpF,CAAC;CACF;AAnCD,gCAmCC"}
package/package.json ADDED
@@ -0,0 +1,44 @@
1
+ {
2
+ "name": "@naiv/api-agent",
3
+ "version": "0.0.1",
4
+ "description": "",
5
+ "main": "index.js",
6
+ "publishConfig": {
7
+ "access": "public"
8
+ },
9
+ "scripts": {
10
+ "build": "rm -rf dist && tsc && npm unlink -g && npm link",
11
+ "start": "node dist",
12
+ "dev": "npm run build && npm start",
13
+ "test": "rm -rf test/api && npm run build && api-agent -d test -o test"
14
+ },
15
+ "bin": {
16
+ "api-agent": "dist/index.js"
17
+ },
18
+ "files": [
19
+ "dist",
20
+ "api.zip",
21
+ "package.json"
22
+ ],
23
+ "keywords": [],
24
+ "author": "",
25
+ "license": "ISC",
26
+ "devDependencies": {
27
+ "@types/node": "^25.0.9",
28
+ "@types/unzipper": "^0.10.11",
29
+ "terser": "^5.46.0",
30
+ "typescript": "^5.9.3"
31
+ },
32
+ "dependencies": {
33
+ "@graf-research/llm-runner": "^0.0.21",
34
+ "arg": "^5.0.2",
35
+ "chalk": "^5.6.2",
36
+ "enquirer": "^2.4.1",
37
+ "execa": "^9.6.1",
38
+ "extract-zip": "^2.0.1",
39
+ "listr2": "^10.0.0",
40
+ "ora": "^9.1.0",
41
+ "tree-kill": "^1.2.2",
42
+ "unzipper": "^0.12.3"
43
+ }
44
+ }