@abhagsain/ai-cli
Version:
Get answers for CLI commands from GPT3 right from your terminal
234 lines (233 loc) • 11.2 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getDefaultMessages = exports.saveModelPreference = exports.getCurrentModel = exports.getAPIConfigFilePath = exports.getOpenAIKey = exports.models = exports.defaultModel = void 0;
const tslib_1 = require("tslib");
const fs_extra_1 = tslib_1.__importDefault(require("fs-extra"));
const path_1 = tslib_1.__importDefault(require("path"));
exports.defaultModel = {
name: "gpt-3.5-turbo",
};
exports.models = [exports.defaultModel, { name: "gpt-4" }];
const getOpenAIKey = async (configDir) => {
const filePath = (0, exports.getAPIConfigFilePath)(configDir);
if (fs_extra_1.default.existsSync(filePath) && fs_extra_1.default.statSync(filePath).isFile()) {
const fileContent = await fs_extra_1.default.readFile(filePath, "utf-8");
const [name, value] = (fileContent === null || fileContent === void 0 ? void 0 : fileContent.split("=")) || [];
if (name === "OPENAI_API_KEY") {
return value.trim();
}
}
return null;
};
exports.getOpenAIKey = getOpenAIKey;
const getAPIConfigFilePath = (configDir) => path_1.default.join(configDir, ".ai-cli");
exports.getAPIConfigFilePath = getAPIConfigFilePath;
const getDataConfigFilePath = (dataDir) => path_1.default.join(dataDir, "config.json");
const getCurrentModel = (dataDir) => {
const config = getDataConfigFilePath(dataDir);
const exists = fs_extra_1.default.existsSync(config);
if (!exists) {
(0, exports.saveModelPreference)(dataDir, exports.defaultModel);
}
const { model: savedModel } = fs_extra_1.default.readJsonSync(config);
// To check if the saved model is in our defined list of models
const isModelValid = exports.models.find((model) => model.name === savedModel.name);
if (!isModelValid) {
(0, exports.saveModelPreference)(dataDir, exports.defaultModel);
return exports.defaultModel;
}
return savedModel;
};
exports.getCurrentModel = getCurrentModel;
const saveModelPreference = (dataDir, model) => {
const config = getDataConfigFilePath(dataDir);
fs_extra_1.default.writeJsonSync(config, { model });
};
exports.saveModelPreference = saveModelPreference;
// From - https://github.com/abhagsain/ai-cli/issues/9#issuecomment-1324016570
// Modified to new messages syntax
const getPowerShellMessages = () => [
{
role: "system",
content: "Correctly answer the asked question. Return 'Sorry, Can't answer that.' if the question isn't related to technology.",
},
{ role: "user", content: "get into a docker container." },
{ role: "assistant", content: "`docker exec -it <container>`" },
{ role: "user", content: "Check what's listening on a port." },
{ role: "assistant", content: "`netstat -ano | findstr :<port>`" },
{ role: "user", content: "How to ssh into a server with a specific file." },
{ role: "assistant", content: "`ssh -i <file_path> <user>@<port>`" },
{ role: "user", content: "How to set relative line numbers in vim." },
{ role: "assistant", content: "`:set relativenumber`" },
{ role: "user", content: "How to create alias?" },
{ role: "assistant", content: "`Set-Alias <new_command> <old_command>`" },
{ role: "user", content: "Tail docker logs." },
{ role: "assistant", content: "`docker logs -f mongodb`" },
{ role: "user", content: "Forward port in kubectl." },
{
role: "assistant",
content: "`kubectl port-forward <pod_name> 8080:3000`",
},
{ role: "user", content: "Check if a port is accessible." },
{
role: "assistant",
content: "`Test-NetConnection -ComputerName <host_name> -Port <port>`",
},
{ role: "user", content: "Kill a process running on port 3000." },
{
role: "assistant",
content: "`Get-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess | Stop-Process`",
},
{ role: "user", content: "Backup database from a mongodb container." },
{
role: "assistant",
content: '`docker exec -it mongodb bash -c "mongoexport --db mongodb --collection collections --outdir backup"`',
},
{ role: "user", content: "SSH Tunnel Remote Host port into a local port." },
{
role: "assistant",
content: "`ssh -L <local_port>:<remote_host>:<remote_port> <user>@<remote_host>`",
},
{ role: "user", content: "Copy local file to S3." },
{
role: "assistant",
content: "`aws s3 cp <local_file> s3://<bucket_name>/<remote_file>`",
},
{ role: "user", content: "Copy S3 file to local." },
{
role: "assistant",
content: "`aws s3 cp s3://<bucket_name>/<remote_file> <local_file>`",
},
{ role: "user", content: "Recursively remove a folder." },
{ role: "assistant", content: "`Remove-Item -Recurse <folder_name>`" },
{ role: "user", content: "Copy a file from local to ssh server." },
{
role: "assistant",
content: "`scp /path/to/file user@server:/path/to/destination`",
},
{ role: "user", content: "Download a file from a URL." },
{
role: "assistant",
content: "`Invoke-WebRequest -Uri <url> -OutFile <file_name>`",
},
{ role: "user", content: "Git commit with message." },
{ role: "assistant", content: '`git commit -m "my commit message"`' },
{ role: "user", content: "Give a user sudo permissions." },
{
role: "assistant",
content: '`Add-LocalGroupMember -Group "Administrators" -Member <user>`',
},
{ role: "user", content: "Check what's running on a port?" },
{
role: "assistant",
content: "`Get-Process -Id (Get-NetTCPConnection -LocalPort <port>).OwningProcess`",
},
{ role: "user", content: "View last 5 files from history" },
{ role: "assistant", content: "`Get-History -Count 5`" },
{ role: "user", content: "When was China founded?" },
{ role: "assistant", content: "Sorry, Can't answer that." },
{ role: "user", content: "Filter docker container with labels" },
{ role: "assistant", content: '`docker ps --filter "label=<KEY>"`' },
{ role: "user", content: "When was Abraham Lincon born?" },
{ role: "assistant", content: "Sorry, Can't answer that." },
{ role: "user", content: "Get into a running kubernetes pod" },
{ role: "assistant", content: "`kubectl exec -it <pod_name> bash`" },
{ role: "user", content: "Capital city of Ukrain?" },
{ role: "assistant", content: "Sorry, Can't answer that." },
];
const getUnixMessages = () => [
{
role: "system",
content: "Correctly answer the asked question. Return 'Sorry, Can't answer that.' if the question isn't related to technology.",
},
{ role: "user", content: "get into a docker container." },
{ role: "assistant", content: "`docker exec -it mongodb`" },
{ role: "user", content: "Check what's listening on a port." },
{ role: "assistant", content: "`lsof -i tcp:4000`" },
{ role: "user", content: "How to ssh into a server with a specific file." },
{ role: "assistant", content: "`ssh -i ~/.ssh/id_rsa user@127.0.0.1`" },
{ role: "user", content: "How to set relative line numbers in vim." },
{ role: "assistant", content: "`:set relativenumber`" },
{ role: "user", content: "How to create alias?" },
{ role: "assistant", content: '`alias my_command="my_real_command"`' },
{ role: "user", content: "Tail docker logs." },
{ role: "assistant", content: "`docker logs -f mongodb`" },
{ role: "user", content: "Forward port in kubectl." },
{
role: "assistant",
content: "`kubectl port-forward <pod_name> 8080:3000`",
},
{ role: "user", content: "Check if a port is accessible." },
{ role: "assistant", content: "`nc -vz host port`" },
{ role: "user", content: "Reverse SSH Tunnel Syntax." },
{
role: "assistant",
content: "`ssh -R <remote_port>:<local_host>:<local_port> <user>@<remote_host>`",
},
{ role: "user", content: "Kill a process running on port 3000." },
{ role: "assistant", content: "`lsof -ti tcp:3000 | xargs kill`" },
{ role: "user", content: "Backup database from a mongodb container." },
{
role: "assistant",
content: '`docker exec -it mongodb bash -c "mongoexport --db mongodb --collection collections --outdir backup"`',
},
{ role: "user", content: "SSH Tunnel Remote Host port into a local port." },
{
role: "assistant",
content: "`ssh -L <local_port>:<remote_host>:<remote_port> <user>@<remote_host>`",
},
{ role: "user", content: "Copy local file to S3." },
{
role: "assistant",
content: "`aws s3 cp <local_file> s3://<bucket_name>/<remote_file>`",
},
{ role: "user", content: "Copy S3 file to local." },
{
role: "assistant",
content: "`aws s3 cp s3://<bucket_name>/<remote_file> <local_file>`",
},
{ role: "user", content: "Recursively remove a folder." },
{ role: "assistant", content: "`rm -rf <folder_name>`" },
{ role: "user", content: "Copy a file from local to ssh server." },
{
role: "assistant",
content: "`scp /path/to/file user@server:/path/to/destination`",
},
{ role: "user", content: "Curl syntax with port." },
{ role: "assistant", content: "`curl http://localhost:3000`" },
{ role: "user", content: "Download a file from a URL with curl." },
{ role: "assistant", content: "`curl -o <file_name> <URL>`" },
{ role: "user", content: "Git commit with message." },
{ role: "assistant", content: '`git commit -m "my commit message"`' },
{ role: "user", content: "Give a user sudo permissions." },
{ role: "assistant", content: "`sudo usermod -aG sudo <user>`" },
{ role: "user", content: "Check what's running on a port?" },
{ role: "assistant", content: "`lsof -i tcp:<port>`" },
{ role: "user", content: "View last 5 files from history" },
{ role: "assistant", content: "`history | tail -5`" },
{ role: "user", content: "When was China founded?" },
{ role: "assistant", content: "Sorry, Can't answer that." },
{ role: "user", content: "Pass auth header with curl" },
{
role: "assistant",
content: '`curl -H "Authorization: Bearer <token>" <URL>`',
},
{ role: "user", content: "Filter docker container with labels" },
{ role: "assistant", content: '`docker ps --filter "label=<KEY>"`' },
{ role: "user", content: "When was Abraham Lincoln born?" },
{ role: "assistant", content: "Sorry, Can't answer that." },
{ role: "user", content: "Get into a running kubernetes pod" },
{ role: "assistant", content: "`kubectl exec -it <pod_name> bash`" },
{ role: "user", content: "Capital city of Ukraine?" },
{ role: "assistant", content: "Sorry, Can't answer that." },
];
const getDefaultMessages = () => {
const platform = process.platform;
switch (platform) {
case "win32":
return getPowerShellMessages();
default:
return getUnixMessages();
}
};
exports.getDefaultMessages = getDefaultMessages;