@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.
- package/dist/autocode.d.ts +126 -0
- package/dist/autocode.d.ts.map +1 -0
- package/dist/autocode.js +376 -0
- package/dist/autocode.js.map +1 -0
- package/dist/child_process_manager.d.ts +14 -0
- package/dist/child_process_manager.d.ts.map +1 -0
- package/dist/child_process_manager.js +82 -0
- package/dist/child_process_manager.js.map +1 -0
- package/dist/cleanup-safely.d.ts +2 -0
- package/dist/cleanup-safely.d.ts.map +1 -0
- package/dist/cleanup-safely.js +17 -0
- package/dist/cleanup-safely.js.map +1 -0
- package/dist/cmd-initialize-api.d.ts +2 -0
- package/dist/cmd-initialize-api.d.ts.map +1 -0
- package/dist/cmd-initialize-api.js +94 -0
- package/dist/cmd-initialize-api.js.map +1 -0
- package/dist/cmd-run-command.d.ts +2 -0
- package/dist/cmd-run-command.d.ts.map +1 -0
- package/dist/cmd-run-command.js +35 -0
- package/dist/cmd-run-command.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +39 -0
- package/dist/index.js.map +1 -0
- package/dist/internal-execution.d.ts +10 -0
- package/dist/internal-execution.d.ts.map +1 -0
- package/dist/internal-execution.js +63 -0
- package/dist/internal-execution.js.map +1 -0
- package/dist/journal_log.d.ts +12 -0
- package/dist/journal_log.d.ts.map +1 -0
- package/dist/journal_log.js +41 -0
- package/dist/journal_log.js.map +1 -0
- package/package.json +44 -0
|
@@ -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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"}
|
package/dist/autocode.js
ADDED
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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":";;;;;AAkCA,sCA0BC;AA5DD,+CAAgD;AAEhD,mEAA8D;AAC9D,4CAAoB;AACpB,gDAAwB;AACxB,4CAAoB;AACpB,wDAAgC;AAChC,4DAA+B;AAE/B,KAAK,UAAU,UAAU,CAAC,MAAc,SAAS,EAAE,OAAe,KAAK;IACrE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,IAAI,SAAS,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,EAAE;YACrD,GAAG;YACH,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;SAClC,CAAC,CAAC;QACH,2CAAmB,CAAC,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;QAExD,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE;YACjC,MAAM,GAAG,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAA;YACxB,iCAAiC;QACnC,CAAC,CAAC,CAAA;QAEF,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE;YACjC,MAAM,GAAG,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAA;YACxB,2CAA2C;QAC7C,CAAC,CAAC,CAAA;QAEF,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YAC5B,8CAA8C;YAC9C,OAAO,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAEM,KAAK,UAAU,aAAa,CAAC,cAAsB,EAAE,EAAE,OAAe,KAAK;IAChF,MAAM,oBAAoB,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;IACzD,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,oBAAoB,CAAC,EAAE,CAAC;QACzC,YAAE,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;IACrC,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,IAAA,oBAAK,EAAC,+EAA+E,CAAC,CAAC;IACzG,GAAG,CAAC,IAAI;SACL,IAAI,CAAC,kBAAQ,CAAC,KAAK,EAAE,CAAC;SACtB,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE;QACnB,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc;QAC5D,MAAM,IAAI,GAAG,cAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,GAAG,KAAK,CAAC,CAAC;QAEvD,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAClB,KAAK,CAAC,SAAS,EAAE,CAAC;YAClB,OAAO;QACT,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC/B,YAAE,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACxC,KAAK,CAAC,SAAS,EAAE,CAAC;QACpB,CAAC;aAAM,CAAC;YACN,YAAE,CAAC,SAAS,CAAC,cAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACtD,KAAK,CAAC,IAAI,CAAC,YAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;QACzC,CAAC;IACH,CAAC,CAAC,CAAC;IACL,MAAM,UAAU,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAC;AAC/C,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,QAAgB,EAAE,WAAmB;IACrE,MAAM,GAAG,GAAG,MAAM,kBAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAE/C,uBAAuB;IACvB,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAE9C,MAAM,OAAO,CAAC,GAAG,CACf,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QACnB,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,GAAG,EAAE,EAAE,CAAC,CAAC;QAC1C,IAAI,CAAC,CAAC;YAAE,OAAO;QAEf,MAAM,IAAI,GAAG,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QAEvC,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC9B,OAAO,YAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,CAAC;QAED,OAAO,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YAC9B,YAAE,CAAC,SAAS,CAAC,cAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAEtD,IAAI,CAAC,MAAM,EAAE;iBACV,IAAI,CAAC,YAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;iBAChC,EAAE,CAAC,QAAQ,EAAE,GAAG,CAAC;iBACjB,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CACH,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,UAAkB;IACxC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;IACtC,CAAC;IAED,IAAI,CAAC,GAAG,UAAU,CAAC;IAEnB,6BAA6B;IAC7B,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACtB,CAAC,GAAG,cAAI,CAAC,OAAO,CAAC,YAAE,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC;IAED,sBAAsB;IACtB,OAAO,cAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACzB,CAAC"}
|
|
@@ -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"}
|
package/dist/index.d.ts
ADDED
|
@@ -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
|
+
}
|