loz 0.2.13 → 0.3.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/README.md +73 -11
- package/dist/config/index.js +3 -3
- package/dist/config/index.js.map +1 -1
- package/dist/constant.js +6 -0
- package/dist/constant.js.map +1 -0
- package/dist/git/index.js +55 -63
- package/dist/git/index.js.map +1 -1
- package/dist/git/test.js +2 -0
- package/dist/git/test.js.map +1 -0
- package/dist/history/index.js +53 -2
- package/dist/history/index.js.map +1 -1
- package/dist/history/test.js +57 -0
- package/dist/history/test.js.map +1 -0
- package/dist/index.js +110 -381
- package/dist/index.js.map +1 -1
- package/dist/llm/index.js +10 -15
- package/dist/llm/index.js.map +1 -1
- package/dist/llm/test.js +86 -0
- package/dist/llm/test.js.map +1 -0
- package/dist/loz.js +415 -0
- package/dist/loz.js.map +1 -0
- package/dist/prompt/index.js +67 -0
- package/dist/prompt/index.js.map +1 -0
- package/dist/prompt/test.js +59 -0
- package/dist/prompt/test.js.map +1 -0
- package/dist/utils/index.js +75 -0
- package/dist/utils/index.js.map +1 -0
- package/package.json +9 -11
- package/bin/index.js +0 -3
- package/dist/cli.js +0 -118
- package/dist/cli.js.map +0 -1
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.runCommand = exports.runShellCommand = exports.checkGitRepo = void 0;
|
|
4
|
+
const child_process_1 = require("child_process");
|
|
5
|
+
const path = require("path");
|
|
6
|
+
const fs = require("fs");
|
|
7
|
+
const constant_1 = require("../constant");
|
|
8
|
+
// check if the program is running in it's git repository.
|
|
9
|
+
function checkGitRepo() {
|
|
10
|
+
const gitRepoPath = path.join(process.cwd(), ".git");
|
|
11
|
+
if (constant_1.DEBUG)
|
|
12
|
+
console.log(gitRepoPath);
|
|
13
|
+
if (fs.existsSync(gitRepoPath)) {
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
exports.checkGitRepo = checkGitRepo;
|
|
19
|
+
function runShellCommand(command) {
|
|
20
|
+
return new Promise((resolve, reject) => {
|
|
21
|
+
(0, child_process_1.exec)(command, (error, stdout, stderr) => {
|
|
22
|
+
if (error) {
|
|
23
|
+
reject(`error: ${error.message}`);
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
if (stderr) {
|
|
27
|
+
reject(`stderr: ${stderr}`);
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
resolve(stdout);
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
exports.runShellCommand = runShellCommand;
|
|
35
|
+
// Function to run a command and stream its stdout directly to the terminal
|
|
36
|
+
function runCommand(command) {
|
|
37
|
+
return new Promise((resolve, reject) => {
|
|
38
|
+
//const [cmd, ...args] = command.split(/\s+/); // Split the command and its arguments
|
|
39
|
+
const child = (0, child_process_1.spawn)("bash", ["-c", command]);
|
|
40
|
+
let stdoutData = "";
|
|
41
|
+
let stderrData = "";
|
|
42
|
+
child.stdout.on("data", (data) => {
|
|
43
|
+
stdoutData += data; // Accumulate stdout data
|
|
44
|
+
process.stdout.write(data); // Write stdout data to the terminal
|
|
45
|
+
});
|
|
46
|
+
child.stderr.on("data", (data) => {
|
|
47
|
+
stderrData += data; // Accumulate stderr data
|
|
48
|
+
process.stderr.write(data); // Write stderr data to the terminal
|
|
49
|
+
});
|
|
50
|
+
child.on("error", (error) => {
|
|
51
|
+
console.error(`Execution Error: ${error.message}`);
|
|
52
|
+
reject(error); // Reject the promise on spawn error
|
|
53
|
+
});
|
|
54
|
+
child.on("close", (code) => {
|
|
55
|
+
if (code === 2) {
|
|
56
|
+
reject("No output: " + code);
|
|
57
|
+
}
|
|
58
|
+
else if (code !== 0) {
|
|
59
|
+
console.log(`Process exited with code: ${code}`);
|
|
60
|
+
// Check if both stdout and stderr are empty
|
|
61
|
+
if (!stdoutData && !stderrData) {
|
|
62
|
+
reject("No output: " + code);
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
reject(new Error(`Process exited with code: ${code}`));
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
resolve(); // Resolve the promise when the process closes successfully
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
exports.runCommand = runCommand;
|
|
75
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "loz",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.1",
|
|
4
4
|
"description": "CLI for various knowledge services",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
"scripts": {
|
|
11
11
|
"start": "node dist/index.js",
|
|
12
12
|
"build": "tsc",
|
|
13
|
-
"test": "mocha -r ts-node/register test
|
|
13
|
+
"test": "mocha -r ts-node/register src/**/*test.ts test/**/*test.ts",
|
|
14
14
|
"lint": "eslint 'src/**/*.{js,ts}'",
|
|
15
15
|
"style": "npx prettier --write ."
|
|
16
16
|
},
|
|
@@ -18,28 +18,26 @@
|
|
|
18
18
|
"license": "BSD3",
|
|
19
19
|
"devDependencies": {
|
|
20
20
|
"@types/chai": "^4.2.9",
|
|
21
|
-
"@types/
|
|
22
|
-
"@types/mocha": "^7.0.1",
|
|
21
|
+
"@types/mocha": "^10.0.6",
|
|
23
22
|
"@types/node": "^20.11.17",
|
|
24
23
|
"@types/yargs": "^17.0.32",
|
|
25
|
-
"@typescript-eslint/eslint-plugin": "^2.
|
|
26
|
-
"@typescript-eslint/parser": "^2.
|
|
24
|
+
"@typescript-eslint/eslint-plugin": "^7.2.0",
|
|
25
|
+
"@typescript-eslint/parser": "^7.2.0",
|
|
27
26
|
"chai": "^4.2.0",
|
|
28
|
-
"eslint": "^
|
|
27
|
+
"eslint": "^8.57.0",
|
|
29
28
|
"mocha": "^10.2.0",
|
|
30
29
|
"mock-stdin": "^1.0.0",
|
|
31
|
-
"prettier": "2.5
|
|
32
|
-
"ts-node": "^
|
|
30
|
+
"prettier": "^3.2.5",
|
|
31
|
+
"ts-node": "^10.9.2",
|
|
33
32
|
"typescript": "^5.3.2"
|
|
34
33
|
},
|
|
35
34
|
"dependencies": {
|
|
36
|
-
"dotenv": "^16.0.3",
|
|
37
35
|
"ollama-node": "^0.1.27",
|
|
38
36
|
"openai": "^4.20.1",
|
|
39
37
|
"yargs": "^17.7.2"
|
|
40
38
|
},
|
|
41
39
|
"bin": {
|
|
42
|
-
"loz": "
|
|
40
|
+
"loz": "dist/index.js"
|
|
43
41
|
},
|
|
44
42
|
"files": [
|
|
45
43
|
"dist"
|
package/bin/index.js
DELETED
package/dist/cli.js
DELETED
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
"use strict";
|
|
3
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
4
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
5
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
6
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
7
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
8
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
9
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
10
|
-
});
|
|
11
|
-
};
|
|
12
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
-
const yargs = require("yargs");
|
|
14
|
-
const index_1 = require("./index");
|
|
15
|
-
const LOZ_DEBUG = process.env.DEBUG === "true" ? true : false;
|
|
16
|
-
const args = yargs
|
|
17
|
-
.wrap(null)
|
|
18
|
-
.command("$0 [prompt]", "Loz: a simple CLI for LLM", (yargs) => {
|
|
19
|
-
yargs.positional("prompt", {
|
|
20
|
-
description: "Prompt to answer",
|
|
21
|
-
type: "string",
|
|
22
|
-
});
|
|
23
|
-
})
|
|
24
|
-
.options({
|
|
25
|
-
interactive: {
|
|
26
|
-
alias: "i",
|
|
27
|
-
describe: "Interactive mode",
|
|
28
|
-
},
|
|
29
|
-
git: {
|
|
30
|
-
alias: "g",
|
|
31
|
-
describe: "Generate a Git commit message that summarizes the changes made in the diff",
|
|
32
|
-
},
|
|
33
|
-
commit: {
|
|
34
|
-
alias: "c",
|
|
35
|
-
describe: "Generate a Git commit message in the current git repository",
|
|
36
|
-
},
|
|
37
|
-
log: {
|
|
38
|
-
alias: "l",
|
|
39
|
-
describe:
|
|
40
|
-
// generated by copilot
|
|
41
|
-
"Log the conversation to a file. The file name is the current date and time",
|
|
42
|
-
},
|
|
43
|
-
})
|
|
44
|
-
.help()
|
|
45
|
-
.parseSync();
|
|
46
|
-
const loz = new index_1.Loz();
|
|
47
|
-
function handleLozCommand() {
|
|
48
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
49
|
-
if (args.prompt) {
|
|
50
|
-
yield handlePrompt(args.prompt);
|
|
51
|
-
}
|
|
52
|
-
else if (args.git) {
|
|
53
|
-
yield handleGitCommand();
|
|
54
|
-
}
|
|
55
|
-
else {
|
|
56
|
-
yield handleDefaultCase();
|
|
57
|
-
}
|
|
58
|
-
});
|
|
59
|
-
}
|
|
60
|
-
function handlePrompt(prompt) {
|
|
61
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
62
|
-
if (prompt === "commit") {
|
|
63
|
-
yield loz.runGitCommit();
|
|
64
|
-
loz.saveChatHistory();
|
|
65
|
-
}
|
|
66
|
-
else {
|
|
67
|
-
yield handlePromptInput(prompt);
|
|
68
|
-
}
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
function handlePromptInput(prompt) {
|
|
72
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
73
|
-
if (!process.stdin.isTTY) {
|
|
74
|
-
yield loz.handlePipeInput(prompt);
|
|
75
|
-
}
|
|
76
|
-
else {
|
|
77
|
-
const completion = yield loz.completeUserPrompt(prompt);
|
|
78
|
-
console.log(completion.content);
|
|
79
|
-
}
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
function handleGitCommand() {
|
|
83
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
84
|
-
if (!process.stdin.isTTY) {
|
|
85
|
-
yield loz.writeGitCommitMessage();
|
|
86
|
-
}
|
|
87
|
-
else {
|
|
88
|
-
console.log("Run loz like this: git diff | loz --git");
|
|
89
|
-
}
|
|
90
|
-
});
|
|
91
|
-
}
|
|
92
|
-
function handleDefaultCase() {
|
|
93
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
94
|
-
if (!process.stdin.isTTY) {
|
|
95
|
-
console.log("Input your prompt:");
|
|
96
|
-
process.exit(0);
|
|
97
|
-
}
|
|
98
|
-
console.log("Loz: a simple CLI for LLM");
|
|
99
|
-
try {
|
|
100
|
-
while (true) {
|
|
101
|
-
const res = yield loz.runPromptInteractiveMode();
|
|
102
|
-
if (res === "Done")
|
|
103
|
-
break;
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
catch (error) {
|
|
107
|
-
console.log(error);
|
|
108
|
-
}
|
|
109
|
-
console.log("Good bye!");
|
|
110
|
-
loz.saveChatHistory();
|
|
111
|
-
process.exit(0);
|
|
112
|
-
});
|
|
113
|
-
}
|
|
114
|
-
(() => __awaiter(void 0, void 0, void 0, function* () {
|
|
115
|
-
yield loz.init();
|
|
116
|
-
yield handleLozCommand();
|
|
117
|
-
}))();
|
|
118
|
-
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|