nexus-mcp-agent 0.1.2

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.
Files changed (72) hide show
  1. package/.env.example +56 -0
  2. package/README.md +74 -0
  3. package/dist/core/config.d.ts +46 -0
  4. package/dist/core/config.d.ts.map +1 -0
  5. package/dist/core/config.js +68 -0
  6. package/dist/core/config.js.map +1 -0
  7. package/dist/core/logger.d.ts +7 -0
  8. package/dist/core/logger.d.ts.map +1 -0
  9. package/dist/core/logger.js +54 -0
  10. package/dist/core/logger.js.map +1 -0
  11. package/dist/core/registry.d.ts +21 -0
  12. package/dist/core/registry.d.ts.map +1 -0
  13. package/dist/core/registry.js +52 -0
  14. package/dist/core/registry.js.map +1 -0
  15. package/dist/core/server.d.ts +12 -0
  16. package/dist/core/server.d.ts.map +1 -0
  17. package/dist/core/server.js +120 -0
  18. package/dist/core/server.js.map +1 -0
  19. package/dist/index.d.ts +3 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +38 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/tools/agents/index.d.ts +18 -0
  24. package/dist/tools/agents/index.d.ts.map +1 -0
  25. package/dist/tools/agents/index.js +134 -0
  26. package/dist/tools/agents/index.js.map +1 -0
  27. package/dist/tools/automation/index.d.ts +4 -0
  28. package/dist/tools/automation/index.d.ts.map +1 -0
  29. package/dist/tools/automation/index.js +95 -0
  30. package/dist/tools/automation/index.js.map +1 -0
  31. package/dist/tools/filesystem/index.d.ts +4 -0
  32. package/dist/tools/filesystem/index.d.ts.map +1 -0
  33. package/dist/tools/filesystem/index.js +261 -0
  34. package/dist/tools/filesystem/index.js.map +1 -0
  35. package/dist/tools/git/index.d.ts +4 -0
  36. package/dist/tools/git/index.d.ts.map +1 -0
  37. package/dist/tools/git/index.js +177 -0
  38. package/dist/tools/git/index.js.map +1 -0
  39. package/dist/tools/memory/index.d.ts +4 -0
  40. package/dist/tools/memory/index.d.ts.map +1 -0
  41. package/dist/tools/memory/index.js +178 -0
  42. package/dist/tools/memory/index.js.map +1 -0
  43. package/dist/tools/system/index.d.ts +4 -0
  44. package/dist/tools/system/index.d.ts.map +1 -0
  45. package/dist/tools/system/index.js +121 -0
  46. package/dist/tools/system/index.js.map +1 -0
  47. package/dist/tools/terminal/index.d.ts +4 -0
  48. package/dist/tools/terminal/index.d.ts.map +1 -0
  49. package/dist/tools/terminal/index.js +86 -0
  50. package/dist/tools/terminal/index.js.map +1 -0
  51. package/dist/tools/web/index.d.ts +4 -0
  52. package/dist/tools/web/index.d.ts.map +1 -0
  53. package/dist/tools/web/index.js +193 -0
  54. package/dist/tools/web/index.js.map +1 -0
  55. package/docs/SECURITY.md +31 -0
  56. package/mcp-config.json +9 -0
  57. package/package.json +65 -0
  58. package/scripts/setup.js +102 -0
  59. package/src/core/config.ts +138 -0
  60. package/src/core/logger.ts +61 -0
  61. package/src/core/registry.ts +72 -0
  62. package/src/core/server.ts +144 -0
  63. package/src/index.ts +46 -0
  64. package/src/tools/agents/index.ts +172 -0
  65. package/src/tools/automation/index.ts +127 -0
  66. package/src/tools/filesystem/index.ts +303 -0
  67. package/src/tools/git/index.ts +201 -0
  68. package/src/tools/memory/index.ts +204 -0
  69. package/src/tools/system/index.ts +140 -0
  70. package/src/tools/terminal/index.ts +105 -0
  71. package/src/tools/web/index.ts +224 -0
  72. package/tsconfig.json +30 -0
package/.env.example ADDED
@@ -0,0 +1,56 @@
1
+ # === NEXUS - Autonomous AI Ecosystem ===
2
+ # Copy this file to .env and fill in your values
3
+ # NEXUS works without any API keys by default (DuckDuckGo search, Ollama local LLM)
4
+
5
+ # --- LLM Providers (optional - NEXUS works without these) ---
6
+ OPENAI_API_KEY=
7
+ ANTHROPIC_API_KEY=
8
+ OLLAMA_BASE_URL=http://localhost:11434
9
+
10
+ # --- Default LLM Provider ---
11
+ # Options: openai, anthropic, ollama
12
+ DEFAULT_LLM_PROVIDER=ollama
13
+ DEFAULT_LLM_MODEL=llama3
14
+
15
+ # --- Web Search (optional - DuckDuckGo used by default, no key needed) ---
16
+ BRAVE_SEARCH_API_KEY=
17
+ DEFAULT_SEARCH_PROVIDER=duckduckgo
18
+
19
+ # --- Vector Database ---
20
+ # Options: chroma-local, chroma-remote, sqlite-vss
21
+ VECTOR_DB=chroma-local
22
+ CHROMA_URL=http://localhost:8000
23
+ CHROMA_COLLECTION=nexus_memory
24
+
25
+ # --- State Database ---
26
+ STATE_DB_PATH=./data/state.sqlite
27
+
28
+ # --- Directories ---
29
+ WORKSPACE_DIR=./workspace
30
+ DATA_DIR=./data
31
+ LOGS_DIR=./logs
32
+ SKILLS_DIR=./skills
33
+
34
+ # --- Security ---
35
+ # Allowed directories for file operations (comma-separated)
36
+ ALLOWED_DIRS=./workspace
37
+ # Shell command restrictions (comma-separated blocked commands)
38
+ BLOCKED_COMMANDS=rm -rf /,format,mkfs,dd if=/dev/zero
39
+ # Enable audit logging
40
+ AUDIT_LOG_ENABLED=true
41
+
42
+ # --- Automation ---
43
+ # Enable cron scheduler
44
+ CRON_ENABLED=true
45
+ # Enable file watcher
46
+ WATCHER_ENABLED=true
47
+
48
+ # --- Logging ---
49
+ # Options: debug, info, warn, error
50
+ LOG_LEVEL=info
51
+
52
+ # --- Browser ---
53
+ # Headless mode for Playwright
54
+ BROWSER_HEADLESS=true
55
+ # Browser timeout (ms)
56
+ BROWSER_TIMEOUT=30000
package/README.md ADDED
@@ -0,0 +1,74 @@
1
+ # NEXUS - Autonomous AI Agent MCP Server
2
+
3
+ **NEXUS** is an MCP (Model Context Protocol) server for autonomous AI agents. No API keys required — works out of the box.
4
+
5
+ ## Quick Start
6
+
7
+ ```bash
8
+ # Run directly with npx (no install needed)
9
+ npx -y @seydi/nexus
10
+ ```
11
+
12
+ Or add to your MCP client config:
13
+
14
+ ```json
15
+ {
16
+ "mcpServers": {
17
+ "nexus": {
18
+ "command": "npx",
19
+ "args": ["-y", "@seydi/nexus"],
20
+ "env": {}
21
+ }
22
+ }
23
+ }
24
+ ```
25
+
26
+ ## Local Development
27
+
28
+ ```bash
29
+ git clone <this-repo>
30
+ cd nexus
31
+ npm install
32
+ npm run build
33
+ npm start
34
+ ```
35
+
36
+ ## Available Tools (40+)
37
+
38
+ ### Web
39
+ `web_search` `web_browse` `web_scrape` `api_call`
40
+
41
+ ### Filesystem
42
+ `fs_read` `fs_write` `fs_delete` `fs_list` `fs_search` `fs_move` `fs_copy`
43
+
44
+ ### Terminal
45
+ `shell_exec` `process_list` `system_info`
46
+
47
+ ### Memory
48
+ `memory_store` `memory_search` `memory_get` `memory_forget` `memory_list`
49
+
50
+ ### Git
51
+ `git_status` `git_diff` `git_log` `git_commit` `git_push` `git_pull` `git_branch`
52
+
53
+ ### Automation
54
+ `cron_add` `cron_list` `cron_remove` `cron_toggle`
55
+
56
+ ### Agents
57
+ `agent_create` `agent_list` `agent_get` `agent_delete` `agent_templates`
58
+
59
+ ### System
60
+ `system_info_full` `config_get` `config_set` `env_read` `ping`
61
+
62
+ ## Zero Config
63
+
64
+ NEXUS works with zero configuration:
65
+ - **Search**: DuckDuckGo (no API key)
66
+ - **LLM**: Ollama (local, no API key)
67
+ - **Memory**: In-memory fallback (no ChromaDB needed)
68
+ - **Browser**: Playwright (bundled)
69
+
70
+ Optional API keys (OpenAI, Anthropic, Brave) can be set via `.env` for enhanced capabilities.
71
+
72
+ ## License
73
+
74
+ MIT
@@ -0,0 +1,46 @@
1
+ export interface NexusConfig {
2
+ llm: {
3
+ provider: 'openai' | 'anthropic' | 'ollama';
4
+ model: string;
5
+ openaiApiKey?: string;
6
+ anthropicApiKey?: string;
7
+ ollamaUrl: string;
8
+ };
9
+ search: {
10
+ provider: 'brave' | 'google' | 'duckduckgo';
11
+ braveApiKey?: string;
12
+ };
13
+ vector: {
14
+ type: 'chroma-local' | 'chroma-remote' | 'sqlite-vss';
15
+ chromaUrl: string;
16
+ collection: string;
17
+ };
18
+ state: {
19
+ dbPath: string;
20
+ };
21
+ paths: {
22
+ workspace: string;
23
+ data: string;
24
+ logs: string;
25
+ skills: string;
26
+ };
27
+ security: {
28
+ allowedDirs: string[];
29
+ blockedCommands: string[];
30
+ auditLogEnabled: boolean;
31
+ };
32
+ automation: {
33
+ cronEnabled: boolean;
34
+ watcherEnabled: boolean;
35
+ };
36
+ logging: {
37
+ level: 'debug' | 'info' | 'warn' | 'error';
38
+ };
39
+ browser: {
40
+ headless: boolean;
41
+ timeout: number;
42
+ };
43
+ }
44
+ export declare const nexusConfig: NexusConfig;
45
+ export declare function validateConfig(): string[];
46
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,WAAW;IAE1B,GAAG,EAAE;QACH,QAAQ,EAAE,QAAQ,GAAG,WAAW,GAAG,QAAQ,CAAC;QAC5C,KAAK,EAAE,MAAM,CAAC;QACd,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IAGF,MAAM,EAAE;QACN,QAAQ,EAAE,OAAO,GAAG,QAAQ,GAAG,YAAY,CAAC;QAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IAGF,MAAM,EAAE;QACN,IAAI,EAAE,cAAc,GAAG,eAAe,GAAG,YAAY,CAAC;QACtD,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IAGF,KAAK,EAAE;QACL,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IAGF,KAAK,EAAE;QACL,SAAS,EAAE,MAAM,CAAC;QAClB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IAGF,QAAQ,EAAE;QACR,WAAW,EAAE,MAAM,EAAE,CAAC;QACtB,eAAe,EAAE,MAAM,EAAE,CAAC;QAC1B,eAAe,EAAE,OAAO,CAAC;KAC1B,CAAC;IAGF,UAAU,EAAE;QACV,WAAW,EAAE,OAAO,CAAC;QACrB,cAAc,EAAE,OAAO,CAAC;KACzB,CAAC;IAGF,OAAO,EAAE;QACP,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;KAC5C,CAAC;IAGF,OAAO,EAAE;QACP,QAAQ,EAAE,OAAO,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAYD,eAAO,MAAM,WAAW,EAAE,WAkDzB,CAAC;AAEF,wBAAgB,cAAc,IAAI,MAAM,EAAE,CAEzC"}
@@ -0,0 +1,68 @@
1
+ import { config } from 'dotenv';
2
+ import { resolve } from 'path';
3
+ import { existsSync } from 'fs';
4
+ // Load .env file
5
+ const envPath = process.env.NEXUS_CONFIG || resolve(process.cwd(), '.env');
6
+ if (existsSync(envPath)) {
7
+ config({ path: envPath });
8
+ }
9
+ else {
10
+ config();
11
+ }
12
+ function parseBool(val, defaultVal) {
13
+ if (!val)
14
+ return defaultVal;
15
+ return val.toLowerCase() === 'true' || val === '1';
16
+ }
17
+ function parseList(val) {
18
+ if (!val)
19
+ return [];
20
+ return val.split(',').map(s => s.trim()).filter(Boolean);
21
+ }
22
+ export const nexusConfig = {
23
+ llm: {
24
+ provider: process.env.DEFAULT_LLM_PROVIDER || 'openai',
25
+ model: process.env.DEFAULT_LLM_MODEL || 'gpt-4o',
26
+ openaiApiKey: process.env.OPENAI_API_KEY,
27
+ anthropicApiKey: process.env.ANTHROPIC_API_KEY,
28
+ ollamaUrl: process.env.OLLAMA_BASE_URL || 'http://localhost:11434',
29
+ },
30
+ search: {
31
+ provider: process.env.DEFAULT_SEARCH_PROVIDER || 'duckduckgo',
32
+ braveApiKey: process.env.BRAVE_SEARCH_API_KEY,
33
+ },
34
+ vector: {
35
+ type: process.env.VECTOR_DB || 'chroma-local',
36
+ chromaUrl: process.env.CHROMA_URL || 'http://localhost:8000',
37
+ collection: process.env.CHROMA_COLLECTION || 'nexus_memory',
38
+ },
39
+ state: {
40
+ dbPath: process.env.STATE_DB_PATH || './data/state.sqlite',
41
+ },
42
+ paths: {
43
+ workspace: process.env.WORKSPACE_DIR || './workspace',
44
+ data: process.env.DATA_DIR || './data',
45
+ logs: process.env.LOGS_DIR || './logs',
46
+ skills: process.env.SKILLS_DIR || './skills',
47
+ },
48
+ security: {
49
+ allowedDirs: parseList(process.env.ALLOWED_DIRS) || ['./workspace'],
50
+ blockedCommands: parseList(process.env.BLOCKED_COMMANDS) || ['rm -rf /'],
51
+ auditLogEnabled: parseBool(process.env.AUDIT_LOG_ENABLED, true),
52
+ },
53
+ automation: {
54
+ cronEnabled: parseBool(process.env.CRON_ENABLED, true),
55
+ watcherEnabled: parseBool(process.env.WATCHER_ENABLED, true),
56
+ },
57
+ logging: {
58
+ level: process.env.LOG_LEVEL || 'info',
59
+ },
60
+ browser: {
61
+ headless: parseBool(process.env.BROWSER_HEADLESS, true),
62
+ timeout: parseInt(process.env.BROWSER_TIMEOUT || '30000', 10),
63
+ },
64
+ };
65
+ export function validateConfig() {
66
+ return [];
67
+ }
68
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import pino from 'pino';
2
+ export declare const logger: pino.Logger<never, boolean>;
3
+ export type Logger = typeof logger;
4
+ export declare function createContextLogger(context: string): Logger;
5
+ export declare const auditLogger: pino.Logger<never, boolean>;
6
+ export declare function logAudit(event: string, details: Record<string, any>): void;
7
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/core/logger.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAcxB,eAAO,MAAM,MAAM,6BAqBjB,CAAC;AAEH,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC;AAGnC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE3D;AAGD,eAAO,MAAM,WAAW,6BAStB,CAAC;AAEH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAI1E"}
@@ -0,0 +1,54 @@
1
+ import pino from 'pino';
2
+ import { resolve } from 'path';
3
+ import { mkdirSync, existsSync } from 'fs';
4
+ import { nexusConfig } from './config.js';
5
+ // Ensure logs directory exists
6
+ const logsDir = resolve(nexusConfig.paths.logs);
7
+ if (!existsSync(logsDir)) {
8
+ mkdirSync(logsDir, { recursive: true });
9
+ }
10
+ const logFile = resolve(logsDir, `nexus-${new Date().toISOString().split('T')[0]}.log`);
11
+ // Create logger with both console and file transport
12
+ export const logger = pino({
13
+ level: nexusConfig.logging.level,
14
+ transport: {
15
+ targets: [
16
+ {
17
+ target: 'pino-pretty',
18
+ options: {
19
+ colorize: true,
20
+ translateTime: 'SYS:standard',
21
+ ignore: 'pid,hostname',
22
+ },
23
+ },
24
+ {
25
+ target: 'pino/file',
26
+ options: {
27
+ destination: logFile,
28
+ mkdir: true,
29
+ },
30
+ },
31
+ ],
32
+ },
33
+ });
34
+ // Create child logger with context
35
+ export function createContextLogger(context) {
36
+ return logger.child({ context });
37
+ }
38
+ // Audit logger for security-sensitive operations
39
+ export const auditLogger = pino({
40
+ level: 'info',
41
+ transport: {
42
+ target: 'pino/file',
43
+ options: {
44
+ destination: resolve(logsDir, 'audit.log'),
45
+ mkdir: true,
46
+ },
47
+ },
48
+ });
49
+ export function logAudit(event, details) {
50
+ if (nexusConfig.security.auditLogEnabled) {
51
+ auditLogger.info({ event, ...details, timestamp: new Date().toISOString() }, event);
52
+ }
53
+ }
54
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/core/logger.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,+BAA+B;AAC/B,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAChD,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;IACzB,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,SAAS,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAExF,qDAAqD;AACrD,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK;IAChC,SAAS,EAAE;QACT,OAAO,EAAE;YACP;gBACE,MAAM,EAAE,aAAa;gBACrB,OAAO,EAAE;oBACP,QAAQ,EAAE,IAAI;oBACd,aAAa,EAAE,cAAc;oBAC7B,MAAM,EAAE,cAAc;iBACvB;aACF;YACD;gBACE,MAAM,EAAE,WAAW;gBACnB,OAAO,EAAE;oBACP,WAAW,EAAE,OAAO;oBACpB,KAAK,EAAE,IAAI;iBACZ;aACF;SACF;KACF;CACF,CAAC,CAAC;AAIH,mCAAmC;AACnC,MAAM,UAAU,mBAAmB,CAAC,OAAe;IACjD,OAAO,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;AACnC,CAAC;AAED,iDAAiD;AACjD,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC;IAC9B,KAAK,EAAE,MAAM;IACb,SAAS,EAAE;QACT,MAAM,EAAE,WAAW;QACnB,OAAO,EAAE;YACP,WAAW,EAAE,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC;YAC1C,KAAK,EAAE,IAAI;SACZ;KACF;CACF,CAAC,CAAC;AAEH,MAAM,UAAU,QAAQ,CAAC,KAAa,EAAE,OAA4B;IAClE,IAAI,WAAW,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC;QACzC,WAAW,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;IACtF,CAAC;AACH,CAAC"}
@@ -0,0 +1,21 @@
1
+ export interface ToolMetadata {
2
+ name: string;
3
+ category: string;
4
+ description: string;
5
+ parameters?: any;
6
+ handler: (params: any) => Promise<any>;
7
+ requiresConfirmation?: boolean;
8
+ sideEffects?: boolean;
9
+ }
10
+ export declare class ToolRegistry {
11
+ private tools;
12
+ register(tool: ToolMetadata): void;
13
+ get(name: string): ToolMetadata | undefined;
14
+ has(name: string): boolean;
15
+ list(): ToolMetadata[];
16
+ listByCategory(category: string): ToolMetadata[];
17
+ getCategories(): string[];
18
+ getToolCount(): number;
19
+ execute(name: string, params: any): Promise<any>;
20
+ }
21
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/core/registry.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,OAAO,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;IACvC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAAwC;IAErD,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;IAQlC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAI3C,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B,IAAI,IAAI,YAAY,EAAE;IAItB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,EAAE;IAIhD,aAAa,IAAI,MAAM,EAAE;IAMzB,YAAY,IAAI,MAAM;IAIhB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;CAoBvD"}
@@ -0,0 +1,52 @@
1
+ import { createContextLogger } from './logger.js';
2
+ const log = createContextLogger('registry');
3
+ export class ToolRegistry {
4
+ tools = new Map();
5
+ register(tool) {
6
+ if (this.tools.has(tool.name)) {
7
+ log.warn(`Tool ${tool.name} already registered, overwriting`);
8
+ }
9
+ this.tools.set(tool.name, tool);
10
+ log.debug(`Registered tool: ${tool.name} (${tool.category})`);
11
+ }
12
+ get(name) {
13
+ return this.tools.get(name);
14
+ }
15
+ has(name) {
16
+ return this.tools.has(name);
17
+ }
18
+ list() {
19
+ return Array.from(this.tools.values());
20
+ }
21
+ listByCategory(category) {
22
+ return this.list().filter(t => t.category === category);
23
+ }
24
+ getCategories() {
25
+ const categories = new Set();
26
+ this.tools.forEach(t => categories.add(t.category));
27
+ return Array.from(categories);
28
+ }
29
+ getToolCount() {
30
+ return this.tools.size;
31
+ }
32
+ async execute(name, params) {
33
+ const tool = this.tools.get(name);
34
+ if (!tool) {
35
+ throw new Error(`Tool not found: ${name}`);
36
+ }
37
+ log.info({ params }, `Executing tool: ${name}`);
38
+ const startTime = Date.now();
39
+ try {
40
+ const result = await tool.handler(params);
41
+ const duration = Date.now() - startTime;
42
+ log.info({ duration }, `Tool ${name} completed`);
43
+ return result;
44
+ }
45
+ catch (error) {
46
+ const duration = Date.now() - startTime;
47
+ log.error({ error, duration }, `Tool ${name} failed`);
48
+ throw error;
49
+ }
50
+ }
51
+ }
52
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/core/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD,MAAM,GAAG,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;AAY5C,MAAM,OAAO,YAAY;IACf,KAAK,GAA8B,IAAI,GAAG,EAAE,CAAC;IAErD,QAAQ,CAAC,IAAkB;QACzB,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9B,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,kCAAkC,CAAC,CAAC;QAChE,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAChC,GAAG,CAAC,KAAK,CAAC,oBAAoB,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;IAChE,CAAC;IAED,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,IAAI;QACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,cAAc,CAAC,QAAgB;QAC7B,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;IAC1D,CAAC;IAED,aAAa;QACX,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;QACrC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;QACpD,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAChC,CAAC;IAED,YAAY;QACV,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,IAAY,EAAE,MAAW;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAC;QAC7C,CAAC;QAED,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,mBAAmB,IAAI,EAAE,CAAC,CAAC;QAChD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YACxC,GAAG,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,EAAE,QAAQ,IAAI,YAAY,CAAC,CAAC;YACjD,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YACxC,GAAG,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,QAAQ,IAAI,SAAS,CAAC,CAAC;YACtD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,12 @@
1
+ export declare class NexusServer {
2
+ private server;
3
+ private registry;
4
+ private transport;
5
+ constructor();
6
+ initialize(): Promise<void>;
7
+ private registerResources;
8
+ private registerPrompts;
9
+ start(): Promise<void>;
10
+ stop(): Promise<void>;
11
+ }
12
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/core/server.ts"],"names":[],"mappings":"AAkBA,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,QAAQ,CAAe;IAC/B,OAAO,CAAC,SAAS,CAAqC;;IAYhD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA4BjC,OAAO,CAAC,iBAAiB;IA4BzB,OAAO,CAAC,eAAe;IAuCjB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAOtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAQ5B"}
@@ -0,0 +1,120 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
3
+ import { createContextLogger } from './logger.js';
4
+ import { nexusConfig, validateConfig } from './config.js';
5
+ import { ToolRegistry } from './registry.js';
6
+ // Import tool modules
7
+ import { registerWebTools } from '../tools/web/index.js';
8
+ import { registerFilesystemTools } from '../tools/filesystem/index.js';
9
+ import { registerTerminalTools } from '../tools/terminal/index.js';
10
+ import { registerGitTools } from '../tools/git/index.js';
11
+ import { registerMemoryTools } from '../tools/memory/index.js';
12
+ import { registerAutomationTools } from '../tools/automation/index.js';
13
+ import { registerAgentTools } from '../tools/agents/index.js';
14
+ import { registerSystemTools } from '../tools/system/index.js';
15
+ const log = createContextLogger('server');
16
+ export class NexusServer {
17
+ server;
18
+ registry;
19
+ transport = null;
20
+ constructor() {
21
+ this.server = new McpServer({
22
+ name: 'NEXUS',
23
+ version: '0.1.0',
24
+ description: 'Autonomous AI Agent Ecosystem - Self-empowered MCP Server',
25
+ });
26
+ this.registry = new ToolRegistry();
27
+ }
28
+ async initialize() {
29
+ log.info('Initializing NEXUS server...');
30
+ // Validate configuration
31
+ const warnings = validateConfig();
32
+ warnings.forEach(w => log.warn(w));
33
+ // Register all tool categories
34
+ log.info('Registering tools...');
35
+ registerWebTools(this.server, this.registry);
36
+ registerFilesystemTools(this.server, this.registry);
37
+ registerTerminalTools(this.server, this.registry);
38
+ registerGitTools(this.server, this.registry);
39
+ registerMemoryTools(this.server, this.registry);
40
+ registerAutomationTools(this.server, this.registry);
41
+ registerAgentTools(this.server, this.registry);
42
+ registerSystemTools(this.server, this.registry);
43
+ const toolCount = this.registry.getToolCount();
44
+ log.info(`Registered ${toolCount} tools`);
45
+ // Register resources
46
+ this.registerResources();
47
+ // Register prompts
48
+ this.registerPrompts();
49
+ }
50
+ registerResources() {
51
+ // System info resource
52
+ this.server.resource('system-info', 'nexus://system/info', async (uri) => ({
53
+ contents: [{
54
+ uri: uri.href,
55
+ text: JSON.stringify({
56
+ name: 'NEXUS',
57
+ version: '0.1.0',
58
+ uptime: process.uptime(),
59
+ memory: process.memoryUsage(),
60
+ config: {
61
+ llmProvider: nexusConfig.llm.provider,
62
+ llmModel: nexusConfig.llm.model,
63
+ searchProvider: nexusConfig.search.provider,
64
+ vectorDb: nexusConfig.vector.type,
65
+ toolCount: this.registry.getToolCount(),
66
+ },
67
+ }, null, 2),
68
+ }],
69
+ }));
70
+ log.info('Registered resources');
71
+ }
72
+ registerPrompts() {
73
+ // System prompt for autonomous agent
74
+ this.server.prompt('autonomous-agent', 'System prompt for autonomous operation', () => ({
75
+ messages: [{
76
+ role: 'user',
77
+ content: {
78
+ type: 'text',
79
+ text: `You are NEXUS, an autonomous AI agent with full system access.
80
+
81
+ You have the following capabilities:
82
+ - Web research (search, browse, scrape)
83
+ - File system operations (read, write, search)
84
+ - Terminal access (execute commands, spawn processes)
85
+ - Git operations
86
+ - Persistent memory (store and recall information)
87
+ - Task scheduling (cron jobs, workflows)
88
+ - Multi-agent orchestration
89
+
90
+ Guidelines:
91
+ 1. Always verify your actions before executing
92
+ 2. Log all significant operations
93
+ 3. Store important discoveries in memory
94
+ 4. Use sub-agents for complex parallel tasks
95
+ 5. Respect security boundaries
96
+ 6. Ask for confirmation on destructive operations
97
+
98
+ Current workspace: ${nexusConfig.paths.workspace}
99
+ Allowed directories: ${nexusConfig.security.allowedDirs.join(', ')}`,
100
+ },
101
+ }],
102
+ }));
103
+ log.info('Registered prompts');
104
+ }
105
+ async start() {
106
+ log.info('Starting MCP server on stdio...');
107
+ this.transport = new StdioServerTransport();
108
+ await this.server.connect(this.transport);
109
+ log.info('NEXUS server is running');
110
+ }
111
+ async stop() {
112
+ log.info('Stopping NEXUS server...');
113
+ if (this.transport) {
114
+ await this.transport.close();
115
+ }
116
+ await this.server.close();
117
+ log.info('NEXUS server stopped');
118
+ }
119
+ }
120
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/core/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,38 @@
1
+ #!/usr/bin/env node
2
+ import { NexusServer } from './core/server.js';
3
+ import { createContextLogger } from './core/logger.js';
4
+ const log = createContextLogger('main');
5
+ async function main() {
6
+ log.info('🧠 NEXUS - Autonomous AI Agent Ecosystem');
7
+ log.info('========================================');
8
+ const server = new NexusServer();
9
+ // Handle graceful shutdown
10
+ process.on('SIGINT', async () => {
11
+ log.info('Received SIGINT, shutting down...');
12
+ await server.stop();
13
+ process.exit(0);
14
+ });
15
+ process.on('SIGTERM', async () => {
16
+ log.info('Received SIGTERM, shutting down...');
17
+ await server.stop();
18
+ process.exit(0);
19
+ });
20
+ process.on('uncaughtException', (error) => {
21
+ log.fatal({ error }, 'Uncaught exception');
22
+ process.exit(1);
23
+ });
24
+ process.on('unhandledRejection', (reason) => {
25
+ log.fatal({ reason }, 'Unhandled rejection');
26
+ process.exit(1);
27
+ });
28
+ try {
29
+ await server.initialize();
30
+ await server.start();
31
+ }
32
+ catch (error) {
33
+ log.fatal({ error }, 'Failed to start NEXUS server');
34
+ process.exit(1);
35
+ }
36
+ }
37
+ main();
38
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEvD,MAAM,GAAG,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;AAExC,KAAK,UAAU,IAAI;IACjB,GAAG,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;IACrD,GAAG,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;IAErD,MAAM,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;IAEjC,2BAA2B;IAC3B,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;QAC9B,GAAG,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;QAC9C,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;QAC/B,GAAG,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;QAC/C,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,KAAK,EAAE,EAAE;QACxC,GAAG,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,oBAAoB,CAAC,CAAC;QAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,EAAE;QAC1C,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,EAAE,qBAAqB,CAAC,CAAC;QAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;QAC1B,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,GAAG,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,8BAA8B,CAAC,CAAC;QACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import { ToolRegistry } from '../../core/registry.js';
3
+ export interface Agent {
4
+ id: string;
5
+ name: string;
6
+ role: string;
7
+ systemPrompt: string;
8
+ skills: string[];
9
+ tools: string[];
10
+ status: 'idle' | 'running' | 'completed' | 'error';
11
+ createdAt: number;
12
+ lastActive?: number;
13
+ }
14
+ declare const agentTemplates: Record<string, Partial<Agent>>;
15
+ declare const agents: Map<string, Agent>;
16
+ export declare function registerAgentTools(server: McpServer, registry: ToolRegistry): void;
17
+ export { agents, agentTemplates };
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/agents/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGpE,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAKtD,MAAM,WAAW,KAAK;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,CAAC;IACnD,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,QAAA,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAoClD,CAAC;AAEF,QAAA,MAAM,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAa,CAAC;AA0E7C,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,GAAG,IAAI,CAqClF;AAED,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC"}