nexus-mcp-agent 0.1.2 → 0.1.4

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.
@@ -1,6 +1,7 @@
1
1
  import pino from 'pino';
2
+ export declare function initLogger(): void;
2
3
  export declare const logger: pino.Logger<never, boolean>;
3
- export type Logger = typeof logger;
4
+ export type Logger = pino.Logger;
4
5
  export declare function createContextLogger(context: string): Logger;
5
6
  export declare const auditLogger: pino.Logger<never, boolean>;
6
7
  export declare function logAudit(event: string, details: Record<string, any>): void;
@@ -1 +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"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/core/logger.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAUxB,wBAAgB,UAAU,IAAI,IAAI,CAyCjC;AAsBD,eAAO,MAAM,MAAM,6BAAqB,CAAC;AACzC,MAAM,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;AACjC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE3D;AACD,eAAO,MAAM,WAAW,6BAAoB,CAAC;AAE7C,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAI1E"}
@@ -2,53 +2,77 @@ import pino from 'pino';
2
2
  import { resolve } from 'path';
3
3
  import { mkdirSync, existsSync } from 'fs';
4
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',
5
+ const state = {
6
+ logger: pino({ level: 'silent' }),
7
+ audit: pino({ level: 'silent' }),
8
+ };
9
+ export function initLogger() {
10
+ const logsDir = resolve(nexusConfig.paths.logs);
11
+ if (!existsSync(logsDir)) {
12
+ mkdirSync(logsDir, { recursive: true });
13
+ }
14
+ const logFile = resolve(logsDir, `nexus-${new Date().toISOString().split('T')[0]}.log`);
15
+ state.logger = pino({
16
+ level: nexusConfig.logging.level,
17
+ transport: {
18
+ targets: [
19
+ {
20
+ target: 'pino-pretty',
21
+ options: {
22
+ colorize: true,
23
+ translateTime: 'SYS:standard',
24
+ ignore: 'pid,hostname',
25
+ destination: 2,
26
+ },
22
27
  },
23
- },
24
- {
25
- target: 'pino/file',
26
- options: {
27
- destination: logFile,
28
- mkdir: true,
28
+ {
29
+ target: 'pino/file',
30
+ options: {
31
+ destination: logFile,
32
+ mkdir: true,
33
+ },
29
34
  },
35
+ ],
36
+ },
37
+ });
38
+ state.audit = pino({
39
+ level: 'info',
40
+ transport: {
41
+ target: 'pino/file',
42
+ options: {
43
+ destination: resolve(logsDir, 'audit.log'),
44
+ mkdir: true,
30
45
  },
31
- ],
32
- },
33
- });
34
- // Create child logger with context
35
- export function createContextLogger(context) {
36
- return logger.child({ context });
46
+ },
47
+ });
37
48
  }
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,
49
+ function bind(obj) {
50
+ return new Proxy(obj, {
51
+ get(target, prop) {
52
+ const val = target[prop];
53
+ return typeof val === 'function' ? val.bind(target) : val;
46
54
  },
47
- },
48
- });
55
+ });
56
+ }
57
+ function lazyChild(context) {
58
+ let child = null;
59
+ return new Proxy({}, {
60
+ get(_target, prop) {
61
+ if (!child)
62
+ child = state.logger.child({ context });
63
+ const val = child[prop];
64
+ return typeof val === 'function' ? val.bind(child) : val;
65
+ },
66
+ });
67
+ }
68
+ export const logger = bind(state.logger);
69
+ export function createContextLogger(context) {
70
+ return lazyChild(context);
71
+ }
72
+ export const auditLogger = bind(state.audit);
49
73
  export function logAudit(event, details) {
50
74
  if (nexusConfig.security.auditLogEnabled) {
51
- auditLogger.info({ event, ...details, timestamp: new Date().toISOString() }, event);
75
+ state.audit.info({ event, ...details, timestamp: new Date().toISOString() }, event);
52
76
  }
53
77
  }
54
78
  //# sourceMappingURL=logger.js.map
@@ -1 +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"}
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/core/logger.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ export declare class NexusServer {
2
2
  private server;
3
3
  private registry;
4
4
  private transport;
5
+ private log;
5
6
  constructor();
6
7
  initialize(): Promise<void>;
7
8
  private registerResources;
@@ -1 +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"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/core/server.ts"],"names":[],"mappings":"AAMA,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,QAAQ,CAAe;IAC/B,OAAO,CAAC,SAAS,CAAqC;IACtD,OAAO,CAAC,GAAG,CAA0C;;IAW/C,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAqCjC,OAAO,CAAC,iBAAiB;IA2BzB,OAAO,CAAC,eAAe;IAsCjB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAOtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAQ5B"}
@@ -1,22 +1,13 @@
1
1
  import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
2
  import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
3
- import { createContextLogger } from './logger.js';
3
+ import { createContextLogger, initLogger } from './logger.js';
4
4
  import { nexusConfig, validateConfig } from './config.js';
5
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
6
  export class NexusServer {
17
7
  server;
18
8
  registry;
19
9
  transport = null;
10
+ log;
20
11
  constructor() {
21
12
  this.server = new McpServer({
22
13
  name: 'NEXUS',
@@ -26,29 +17,36 @@ export class NexusServer {
26
17
  this.registry = new ToolRegistry();
27
18
  }
28
19
  async initialize() {
29
- log.info('Initializing NEXUS server...');
30
- // Validate configuration
20
+ initLogger();
21
+ this.log = createContextLogger('server');
22
+ this.log.info('Initializing NEXUS server...');
31
23
  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);
24
+ warnings.forEach(w => this.log.warn(w));
25
+ this.log.info('Registering tools...');
26
+ const { registerWebTools } = await import('../tools/web/index.js');
27
+ const { registerFilesystemTools } = await import('../tools/filesystem/index.js');
28
+ const { registerTerminalTools } = await import('../tools/terminal/index.js');
29
+ const { registerGitTools } = await import('../tools/git/index.js');
30
+ const { registerMemoryTools } = await import('../tools/memory/index.js');
31
+ const { registerAutomationTools } = await import('../tools/automation/index.js');
32
+ const { registerAgentTools } = await import('../tools/agents/index.js');
33
+ const { registerSystemTools } = await import('../tools/system/index.js');
34
+ await Promise.all([
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
+ ]);
43
44
  const toolCount = this.registry.getToolCount();
44
- log.info(`Registered ${toolCount} tools`);
45
- // Register resources
45
+ this.log.info(`Registered ${toolCount} tools`);
46
46
  this.registerResources();
47
- // Register prompts
48
47
  this.registerPrompts();
49
48
  }
50
49
  registerResources() {
51
- // System info resource
52
50
  this.server.resource('system-info', 'nexus://system/info', async (uri) => ({
53
51
  contents: [{
54
52
  uri: uri.href,
@@ -67,10 +65,9 @@ export class NexusServer {
67
65
  }, null, 2),
68
66
  }],
69
67
  }));
70
- log.info('Registered resources');
68
+ this.log.info('Registered resources');
71
69
  }
72
70
  registerPrompts() {
73
- // System prompt for autonomous agent
74
71
  this.server.prompt('autonomous-agent', 'System prompt for autonomous operation', () => ({
75
72
  messages: [{
76
73
  role: 'user',
@@ -100,21 +97,21 @@ Allowed directories: ${nexusConfig.security.allowedDirs.join(', ')}`,
100
97
  },
101
98
  }],
102
99
  }));
103
- log.info('Registered prompts');
100
+ this.log.info('Registered prompts');
104
101
  }
105
102
  async start() {
106
- log.info('Starting MCP server on stdio...');
103
+ this.log.info('Starting MCP server on stdio...');
107
104
  this.transport = new StdioServerTransport();
108
105
  await this.server.connect(this.transport);
109
- log.info('NEXUS server is running');
106
+ this.log.info('NEXUS server is running');
110
107
  }
111
108
  async stop() {
112
- log.info('Stopping NEXUS server...');
109
+ this.log.info('Stopping NEXUS server...');
113
110
  if (this.transport) {
114
111
  await this.transport.close();
115
112
  }
116
113
  await this.server.close();
117
- log.info('NEXUS server stopped');
114
+ this.log.info('NEXUS server stopped');
118
115
  }
119
116
  }
120
117
  //# sourceMappingURL=server.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/core/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/core/server.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/system/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAoGtD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,GAAG,IAAI,CAqCnF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/system/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AA8GtD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,GAAG,IAAI,CAqCnF"}
@@ -2,7 +2,13 @@ import { z } from 'zod/v3';
2
2
  import { createContextLogger } from '../../core/logger.js';
3
3
  import { nexusConfig } from '../../core/config.js';
4
4
  const log = createContextLogger('tools/system');
5
- const SENSITIVE_KEYS = ['OPENAI_API_KEY', 'ANTHROPIC_API_KEY', 'BRAVE_SEARCH_API_KEY', 'NEXUS_CONFIG'];
5
+ const SENSITIVE_PATTERNS = [
6
+ /api[_-]?key/i, /token/i, /secret/i, /password/i, /auth/i,
7
+ /key$/i, /credential/i, /private/i, /session/i,
8
+ ];
9
+ function isSensitiveKey(key) {
10
+ return SENSITIVE_PATTERNS.some(p => p.test(key));
11
+ }
6
12
  async function systemInfoFull() {
7
13
  const os = await import('os');
8
14
  return {
@@ -71,15 +77,19 @@ async function configSet(params) {
71
77
  async function envRead(params) {
72
78
  if (!params.key) {
73
79
  const env = {};
80
+ const filtered = [];
74
81
  for (const [k, v] of Object.entries(process.env)) {
75
- if (!SENSITIVE_KEYS.includes(k)) {
82
+ if (isSensitiveKey(k)) {
83
+ filtered.push(k);
84
+ }
85
+ else {
76
86
  env[k] = v;
77
87
  }
78
88
  }
79
- return { success: true, env, filteredKeys: SENSITIVE_KEYS };
89
+ return { success: true, env, filteredKeys: filtered };
80
90
  }
81
- if (SENSITIVE_KEYS.includes(params.key)) {
82
- return { success: false, error: `Access denied: ${params.key} is a sensitive key` };
91
+ if (isSensitiveKey(params.key)) {
92
+ return { success: false, error: `Access denied: ${params.key} matches sensitive pattern` };
83
93
  }
84
94
  return { success: true, key: params.key, value: process.env[params.key] };
85
95
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/system/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/system/index.ts"],"names":[],"mappings":"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"}
package/mcp-config.json CHANGED
@@ -2,7 +2,11 @@
2
2
  "mcpServers": {
3
3
  "nexus": {
4
4
  "command": "npx",
5
- "args": ["-y", "nexus-mcp-agent"],
5
+ "args": [
6
+ "--silent",
7
+ "-y",
8
+ "nexus-mcp-agent"
9
+ ],
6
10
  "env": {}
7
11
  }
8
12
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nexus-mcp-agent",
3
- "version": "0.1.2",
3
+ "version": "0.1.4",
4
4
  "description": "Autonomous AI Agent MCP Server — no API keys required, works out of the box",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -3,59 +3,83 @@ import { resolve } from 'path';
3
3
  import { mkdirSync, existsSync } from 'fs';
4
4
  import { nexusConfig } from './config.js';
5
5
 
6
- // Ensure logs directory exists
7
- const logsDir = resolve(nexusConfig.paths.logs);
8
- if (!existsSync(logsDir)) {
9
- mkdirSync(logsDir, { recursive: true });
10
- }
6
+ const state: { logger: pino.Logger; audit: pino.Logger } = {
7
+ logger: pino({ level: 'silent' }),
8
+ audit: pino({ level: 'silent' }),
9
+ };
10
+
11
+ export function initLogger(): void {
12
+ const logsDir = resolve(nexusConfig.paths.logs);
13
+ if (!existsSync(logsDir)) {
14
+ mkdirSync(logsDir, { recursive: true });
15
+ }
16
+ const logFile = resolve(logsDir, `nexus-${new Date().toISOString().split('T')[0]}.log`);
11
17
 
12
- const logFile = resolve(logsDir, `nexus-${new Date().toISOString().split('T')[0]}.log`);
13
-
14
- // Create logger with both console and file transport
15
- export const logger = pino({
16
- level: nexusConfig.logging.level,
17
- transport: {
18
- targets: [
19
- {
20
- target: 'pino-pretty',
21
- options: {
22
- colorize: true,
23
- translateTime: 'SYS:standard',
24
- ignore: 'pid,hostname',
18
+ state.logger = pino({
19
+ level: nexusConfig.logging.level,
20
+ transport: {
21
+ targets: [
22
+ {
23
+ target: 'pino-pretty',
24
+ options: {
25
+ colorize: true,
26
+ translateTime: 'SYS:standard',
27
+ ignore: 'pid,hostname',
28
+ destination: 2,
29
+ },
25
30
  },
26
- },
27
- {
28
- target: 'pino/file',
29
- options: {
30
- destination: logFile,
31
- mkdir: true,
31
+ {
32
+ target: 'pino/file',
33
+ options: {
34
+ destination: logFile,
35
+ mkdir: true,
36
+ },
32
37
  },
33
- },
34
- ],
35
- },
36
- });
38
+ ],
39
+ },
40
+ });
37
41
 
38
- export type Logger = typeof logger;
42
+ state.audit = pino({
43
+ level: 'info',
44
+ transport: {
45
+ target: 'pino/file',
46
+ options: {
47
+ destination: resolve(logsDir, 'audit.log'),
48
+ mkdir: true,
49
+ },
50
+ },
51
+ });
52
+ }
39
53
 
40
- // Create child logger with context
41
- export function createContextLogger(context: string): Logger {
42
- return logger.child({ context });
54
+ function bind<T extends object>(obj: T): T {
55
+ return new Proxy(obj, {
56
+ get(target, prop) {
57
+ const val = (target as any)[prop];
58
+ return typeof val === 'function' ? val.bind(target) : val;
59
+ },
60
+ });
43
61
  }
44
62
 
45
- // Audit logger for security-sensitive operations
46
- export const auditLogger = pino({
47
- level: 'info',
48
- transport: {
49
- target: 'pino/file',
50
- options: {
51
- destination: resolve(logsDir, 'audit.log'),
52
- mkdir: true,
63
+ function lazyChild(context: string): pino.Logger {
64
+ let child: pino.Logger | null = null;
65
+ return new Proxy({} as pino.Logger, {
66
+ get(_target, prop) {
67
+ if (!child) child = state.logger.child({ context });
68
+ const val = (child as any)[prop];
69
+ return typeof val === 'function' ? val.bind(child) : val;
53
70
  },
54
- },
55
- });
71
+ });
72
+ }
73
+
74
+ export const logger = bind(state.logger);
75
+ export type Logger = pino.Logger;
76
+ export function createContextLogger(context: string): Logger {
77
+ return lazyChild(context);
78
+ }
79
+ export const auditLogger = bind(state.audit);
56
80
 
57
81
  export function logAudit(event: string, details: Record<string, any>): void {
58
82
  if (nexusConfig.security.auditLogEnabled) {
59
- auditLogger.info({ event, ...details, timestamp: new Date().toISOString() }, event);
83
+ state.audit.info({ event, ...details, timestamp: new Date().toISOString() }, event);
60
84
  }
61
85
  }
@@ -1,25 +1,14 @@
1
1
  import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
2
  import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
3
- import { createContextLogger } from './logger.js';
3
+ import { createContextLogger, initLogger } from './logger.js';
4
4
  import { nexusConfig, validateConfig } from './config.js';
5
5
  import { ToolRegistry } from './registry.js';
6
6
 
7
- // Import tool modules
8
- import { registerWebTools } from '../tools/web/index.js';
9
- import { registerFilesystemTools } from '../tools/filesystem/index.js';
10
- import { registerTerminalTools } from '../tools/terminal/index.js';
11
- import { registerGitTools } from '../tools/git/index.js';
12
- import { registerMemoryTools } from '../tools/memory/index.js';
13
- import { registerAutomationTools } from '../tools/automation/index.js';
14
- import { registerAgentTools } from '../tools/agents/index.js';
15
- import { registerSystemTools } from '../tools/system/index.js';
16
-
17
- const log = createContextLogger('server');
18
-
19
7
  export class NexusServer {
20
8
  private server: McpServer;
21
9
  private registry: ToolRegistry;
22
10
  private transport: StdioServerTransport | null = null;
11
+ private log!: ReturnType<typeof createContextLogger>;
23
12
 
24
13
  constructor() {
25
14
  this.server = new McpServer({
@@ -27,40 +16,47 @@ export class NexusServer {
27
16
  version: '0.1.0',
28
17
  description: 'Autonomous AI Agent Ecosystem - Self-empowered MCP Server',
29
18
  });
30
-
31
19
  this.registry = new ToolRegistry();
32
20
  }
33
21
 
34
22
  async initialize(): Promise<void> {
35
- log.info('Initializing NEXUS server...');
23
+ initLogger();
24
+ this.log = createContextLogger('server');
25
+ this.log.info('Initializing NEXUS server...');
36
26
 
37
- // Validate configuration
38
27
  const warnings = validateConfig();
39
- warnings.forEach(w => log.warn(w));
40
-
41
- // Register all tool categories
42
- log.info('Registering tools...');
43
- registerWebTools(this.server, this.registry);
44
- registerFilesystemTools(this.server, this.registry);
45
- registerTerminalTools(this.server, this.registry);
46
- registerGitTools(this.server, this.registry);
47
- registerMemoryTools(this.server, this.registry);
48
- registerAutomationTools(this.server, this.registry);
49
- registerAgentTools(this.server, this.registry);
50
- registerSystemTools(this.server, this.registry);
28
+ warnings.forEach(w => this.log.warn(w));
29
+
30
+ this.log.info('Registering tools...');
31
+
32
+ const { registerWebTools } = await import('../tools/web/index.js');
33
+ const { registerFilesystemTools } = await import('../tools/filesystem/index.js');
34
+ const { registerTerminalTools } = await import('../tools/terminal/index.js');
35
+ const { registerGitTools } = await import('../tools/git/index.js');
36
+ const { registerMemoryTools } = await import('../tools/memory/index.js');
37
+ const { registerAutomationTools } = await import('../tools/automation/index.js');
38
+ const { registerAgentTools } = await import('../tools/agents/index.js');
39
+ const { registerSystemTools } = await import('../tools/system/index.js');
40
+
41
+ await Promise.all([
42
+ registerWebTools(this.server, this.registry),
43
+ registerFilesystemTools(this.server, this.registry),
44
+ registerTerminalTools(this.server, this.registry),
45
+ registerGitTools(this.server, this.registry),
46
+ registerMemoryTools(this.server, this.registry),
47
+ registerAutomationTools(this.server, this.registry),
48
+ registerAgentTools(this.server, this.registry),
49
+ registerSystemTools(this.server, this.registry),
50
+ ]);
51
51
 
52
52
  const toolCount = this.registry.getToolCount();
53
- log.info(`Registered ${toolCount} tools`);
53
+ this.log.info(`Registered ${toolCount} tools`);
54
54
 
55
- // Register resources
56
55
  this.registerResources();
57
-
58
- // Register prompts
59
56
  this.registerPrompts();
60
57
  }
61
58
 
62
59
  private registerResources(): void {
63
- // System info resource
64
60
  this.server.resource(
65
61
  'system-info',
66
62
  'nexus://system/info',
@@ -84,11 +80,10 @@ export class NexusServer {
84
80
  })
85
81
  );
86
82
 
87
- log.info('Registered resources');
83
+ this.log.info('Registered resources');
88
84
  }
89
85
 
90
86
  private registerPrompts(): void {
91
- // System prompt for autonomous agent
92
87
  this.server.prompt(
93
88
  'autonomous-agent',
94
89
  'System prompt for autonomous operation',
@@ -123,22 +118,22 @@ Allowed directories: ${nexusConfig.security.allowedDirs.join(', ')}`,
123
118
  })
124
119
  );
125
120
 
126
- log.info('Registered prompts');
121
+ this.log.info('Registered prompts');
127
122
  }
128
123
 
129
124
  async start(): Promise<void> {
130
- log.info('Starting MCP server on stdio...');
125
+ this.log.info('Starting MCP server on stdio...');
131
126
  this.transport = new StdioServerTransport();
132
127
  await this.server.connect(this.transport);
133
- log.info('NEXUS server is running');
128
+ this.log.info('NEXUS server is running');
134
129
  }
135
130
 
136
131
  async stop(): Promise<void> {
137
- log.info('Stopping NEXUS server...');
132
+ this.log.info('Stopping NEXUS server...');
138
133
  if (this.transport) {
139
134
  await this.transport.close();
140
135
  }
141
136
  await this.server.close();
142
- log.info('NEXUS server stopped');
137
+ this.log.info('NEXUS server stopped');
143
138
  }
144
139
  }
@@ -6,7 +6,14 @@ import { nexusConfig } from '../../core/config.js';
6
6
 
7
7
  const log = createContextLogger('tools/system');
8
8
 
9
- const SENSITIVE_KEYS = ['OPENAI_API_KEY', 'ANTHROPIC_API_KEY', 'BRAVE_SEARCH_API_KEY', 'NEXUS_CONFIG'];
9
+ const SENSITIVE_PATTERNS = [
10
+ /api[_-]?key/i, /token/i, /secret/i, /password/i, /auth/i,
11
+ /key$/i, /credential/i, /private/i, /session/i,
12
+ ];
13
+
14
+ function isSensitiveKey(key: string): boolean {
15
+ return SENSITIVE_PATTERNS.some(p => p.test(key));
16
+ }
10
17
 
11
18
  async function systemInfoFull(): Promise<any> {
12
19
  const os = await import('os');
@@ -83,15 +90,18 @@ async function configSet(params: ConfigSetParams): Promise<any> {
83
90
  async function envRead(params: EnvReadParams): Promise<any> {
84
91
  if (!params.key) {
85
92
  const env: Record<string, string | undefined> = {};
93
+ const filtered: string[] = [];
86
94
  for (const [k, v] of Object.entries(process.env)) {
87
- if (!SENSITIVE_KEYS.includes(k)) {
95
+ if (isSensitiveKey(k)) {
96
+ filtered.push(k);
97
+ } else {
88
98
  env[k] = v;
89
99
  }
90
100
  }
91
- return { success: true, env, filteredKeys: SENSITIVE_KEYS };
101
+ return { success: true, env, filteredKeys: filtered };
92
102
  }
93
- if (SENSITIVE_KEYS.includes(params.key)) {
94
- return { success: false, error: `Access denied: ${params.key} is a sensitive key` };
103
+ if (isSensitiveKey(params.key)) {
104
+ return { success: false, error: `Access denied: ${params.key} matches sensitive pattern` };
95
105
  }
96
106
  return { success: true, key: params.key, value: process.env[params.key] };
97
107
  }