@emremeydanci/nexos 0.1.0

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 ADDED
@@ -0,0 +1,39 @@
1
+ # NexOS
2
+
3
+ Self-hosted AI gateway. Connect any messaging channel to any AI model.
4
+
5
+ ## Quick Start
6
+
7
+ npx nexos init
8
+
9
+ ## Commands
10
+
11
+ nexos init - Setup wizard
12
+ nexos start - Start NexOS
13
+ nexos stop - Stop NexOS
14
+ nexos status - Status info
15
+
16
+ ## Requirements
17
+
18
+ - Node.js >= 20
19
+ - Docker
20
+
21
+ ## Supported Channels
22
+
23
+ - Telegram
24
+ - WhatsApp
25
+ - Discord
26
+ - iMessage (macOS only)
27
+ - Web Chat
28
+
29
+ ## Supported AI Providers
30
+
31
+ - OpenAI
32
+ - Anthropic Claude
33
+ - Google Gemini
34
+ - Ollama (local)
35
+ - Any OpenAI-compatible endpoint
36
+
37
+ ## GitHub
38
+
39
+ https://github.com/emremeydanci/NexOS
@@ -0,0 +1 @@
1
+ export declare function init(_args: string[]): Promise<void>;
@@ -0,0 +1,51 @@
1
+ import chalk from 'chalk';
2
+ import ora from 'ora';
3
+ import open from 'open';
4
+ import { execSync, spawn } from 'child_process';
5
+ import path from 'path';
6
+ import fs from 'fs';
7
+ export async function init(_args) {
8
+ console.log(chalk.white(' NexOS kurulumuna hoş geldin!\n'));
9
+ const spinner = ora('Docker kontrol ediliyor...').start();
10
+ const hasDocker = checkDocker();
11
+ if (!hasDocker) {
12
+ spinner.fail(chalk.red('Docker bulunamadı.'));
13
+ console.log(chalk.yellow('\n Docker yükle: https://docs.docker.com/get-docker/\n'));
14
+ process.exit(1);
15
+ }
16
+ spinner.succeed('Docker hazır');
17
+ const configPath = path.join(process.cwd(), 'nexos.config.json');
18
+ const isFirstRun = !fs.existsSync(configPath);
19
+ if (isFirstRun) {
20
+ spinner.start('NexOS başlatılıyor...');
21
+ startDockerCompose();
22
+ spinner.succeed('NexOS başlatıldı');
23
+ await new Promise(r => setTimeout(r, 2000));
24
+ console.log('\n' + chalk.green(' ✅ NexOS çalışıyor!'));
25
+ console.log(chalk.white(' Setup wizard açılıyor: ') + chalk.cyan('http://localhost:3000\n'));
26
+ await open('http://localhost:3000');
27
+ }
28
+ else {
29
+ console.log(chalk.green(' ✅ Config bulundu, NexOS başlatılıyor...\n'));
30
+ startDockerCompose();
31
+ console.log(chalk.cyan(' http://localhost:3000\n'));
32
+ }
33
+ }
34
+ function checkDocker() {
35
+ try {
36
+ execSync('docker info', { stdio: 'ignore' });
37
+ return true;
38
+ }
39
+ catch {
40
+ return false;
41
+ }
42
+ }
43
+ function startDockerCompose() {
44
+ const composePath = path.join(process.cwd(), 'docker-compose.yml');
45
+ if (!fs.existsSync(composePath)) {
46
+ console.error(chalk.red(' docker-compose.yml bulunamadı. NexOS dizininde olduğundan emin ol.'));
47
+ process.exit(1);
48
+ }
49
+ spawn('docker', ['compose', 'up', '-d'], { stdio: 'inherit' });
50
+ }
51
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function start(_args: string[]): Promise<void>;
@@ -0,0 +1,16 @@
1
+ import chalk from 'chalk';
2
+ import ora from 'ora';
3
+ import { execSync } from 'child_process';
4
+ export async function start(_args) {
5
+ const spinner = ora('NexOS başlatılıyor...').start();
6
+ try {
7
+ execSync('docker compose up -d', { stdio: 'pipe' });
8
+ spinner.succeed('NexOS başlatıldı');
9
+ console.log(chalk.cyan('\n http://localhost:3000\n'));
10
+ }
11
+ catch (err) {
12
+ spinner.fail('Başlatılamadı');
13
+ throw err;
14
+ }
15
+ }
16
+ //# sourceMappingURL=start.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,KAAe;IACzC,MAAM,OAAO,GAAG,GAAG,CAAC,uBAAuB,CAAC,CAAC,KAAK,EAAE,CAAC;IACrD,IAAI,CAAC;QACH,QAAQ,CAAC,sBAAsB,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QACpD,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC,CAAC;IACzD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC9B,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function status(_args: string[]): Promise<void>;
@@ -0,0 +1,16 @@
1
+ import chalk from 'chalk';
2
+ import axios from 'axios';
3
+ export async function status(_args) {
4
+ try {
5
+ const res = await axios.get('http://localhost:3000/api/status', { timeout: 3000 });
6
+ const data = res.data;
7
+ console.log(chalk.green(' ● NexOS çalışıyor'));
8
+ console.log(chalk.gray(` Versiyon : ${data.version}`));
9
+ console.log(chalk.gray(` Zaman : ${data.timestamp}\n`));
10
+ }
11
+ catch {
12
+ console.log(chalk.red(' ● NexOS çalışmıyor'));
13
+ console.log(chalk.gray(' nexos start ile başlat\n'));
14
+ }
15
+ }
16
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,KAAe;IAC1C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,kCAAkC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACnF,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC;IAChE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC,CAAC;IAC1D,CAAC;AACH,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function stop(_args: string[]): Promise<void>;
@@ -0,0 +1,15 @@
1
+ import chalk from 'chalk';
2
+ import ora from 'ora';
3
+ import { execSync } from 'child_process';
4
+ export async function stop(_args) {
5
+ const spinner = ora('NexOS durduruluyor...').start();
6
+ try {
7
+ execSync('docker compose down', { stdio: 'pipe' });
8
+ spinner.succeed(chalk.yellow('NexOS durduruldu'));
9
+ }
10
+ catch (err) {
11
+ spinner.fail('Durdurulamadı');
12
+ throw err;
13
+ }
14
+ }
15
+ //# sourceMappingURL=stop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stop.js","sourceRoot":"","sources":["../../src/commands/stop.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,KAAe;IACxC,MAAM,OAAO,GAAG,GAAG,CAAC,uBAAuB,CAAC,CAAC,KAAK,EAAE,CAAC;IACrD,IAAI,CAAC;QACH,QAAQ,CAAC,qBAAqB,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QACnD,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC;IACpD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC9B,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
package/dist/index.js ADDED
@@ -0,0 +1,34 @@
1
+ #!/usr/bin/env node
2
+ import chalk from 'chalk';
3
+ import { init } from './commands/init.js';
4
+ import { start } from './commands/start.js';
5
+ import { stop } from './commands/stop.js';
6
+ import { status } from './commands/status.js';
7
+ const command = process.argv[2];
8
+ const args = process.argv.slice(3);
9
+ console.log(chalk.bold.cyan('\n NexOS') + chalk.gray(' — Self-hosted AI Gateway\n'));
10
+ const commands = {
11
+ init,
12
+ start,
13
+ stop,
14
+ status,
15
+ };
16
+ if (!command || command === '--help' || command === '-h') {
17
+ console.log(chalk.white(' Commands:'));
18
+ console.log(chalk.gray(' nexos init ') + chalk.white('Setup wizard\'ı başlat'));
19
+ console.log(chalk.gray(' nexos start ') + chalk.white('NexOS\'u başlat'));
20
+ console.log(chalk.gray(' nexos stop ') + chalk.white('NexOS\'u durdur'));
21
+ console.log(chalk.gray(' nexos status ') + chalk.white('Durum bilgisi\n'));
22
+ process.exit(0);
23
+ }
24
+ const fn = commands[command];
25
+ if (!fn) {
26
+ console.error(chalk.red(` Bilinmeyen komut: ${command}`));
27
+ console.log(chalk.gray(' nexos --help için yardım\n'));
28
+ process.exit(1);
29
+ }
30
+ fn(args).catch((err) => {
31
+ console.error(chalk.red('\n Hata:'), err.message);
32
+ process.exit(1);
33
+ });
34
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE9C,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAChC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAEnC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC,CAAC;AAEtF,MAAM,QAAQ,GAAsD;IAClE,IAAI;IACJ,KAAK;IACL,IAAI;IACJ,MAAM;CACP,CAAC;AAEF,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;IACzD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC;IACtF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAC/E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAC/E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAC/E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;AAC7B,IAAI,CAAC,EAAE,EAAE,CAAC;IACR,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,uBAAuB,OAAO,EAAE,CAAC,CAAC,CAAC;IAC3D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC,CAAC;IACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,51 @@
1
+ {
2
+ "name": "@emremeydanci/nexos",
3
+ "version": "0.1.0",
4
+ "description": "Self-hosted AI gateway. Connect any messaging channel to any AI model.",
5
+ "bin": {
6
+ "nexos": "./dist/index.js"
7
+ },
8
+ "scripts": {
9
+ "build": "tsc",
10
+ "dev": "tsx src/index.ts",
11
+ "prepublishOnly": "npm run build"
12
+ },
13
+ "files": [
14
+ "dist",
15
+ "README.md"
16
+ ],
17
+ "keywords": [
18
+ "ai",
19
+ "gateway",
20
+ "chatbot",
21
+ "telegram",
22
+ "whatsapp",
23
+ "discord",
24
+ "imessage",
25
+ "self-hosted"
26
+ ],
27
+ "author": "emremeydanci",
28
+ "license": "MIT",
29
+ "homepage": "https://github.com/emremeydanci/NexOS",
30
+ "repository": {
31
+ "type": "git",
32
+ "url": "https://github.com/emremeydanci/NexOS.git"
33
+ },
34
+ "dependencies": {
35
+ "axios": "^1.7.0",
36
+ "chalk": "^5.3.0",
37
+ "ora": "^8.0.0",
38
+ "prompts": "^2.4.2",
39
+ "open": "^10.0.0"
40
+ },
41
+ "devDependencies": {
42
+ "typescript": "^5.0.0",
43
+ "@types/node": "^22.0.0",
44
+ "@types/prompts": "^2.4.0",
45
+ "tsx": "^4.0.0"
46
+ },
47
+ "type": "module",
48
+ "engines": {
49
+ "node": ">=20.0.0"
50
+ }
51
+ }