@neurosec/sentry 1.0.9 → 1.0.13

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.
@@ -0,0 +1,32 @@
1
+ import { TaggedProcess } from '../types';
2
+ import { SentryConfig } from '../config';
3
+ interface SentryPolicy {
4
+ id: string;
5
+ hostId: string | null;
6
+ type: 'kill_process' | 'block_provider' | 'block_domain';
7
+ target: string;
8
+ enabled: boolean;
9
+ action: 'deny' | 'sigterm' | 'sigkill';
10
+ description: string;
11
+ }
12
+ interface PolicyResult {
13
+ policyId: string;
14
+ action: 'kill_process' | 'block_provider' | 'block_domain';
15
+ target: string;
16
+ applied: boolean;
17
+ detail: string;
18
+ }
19
+ export declare class PolicyExecutor {
20
+ private config;
21
+ private appliedRules;
22
+ private lastPolicies;
23
+ constructor(config: SentryConfig);
24
+ apply(policies: SentryPolicy[], taggedProcesses: TaggedProcess[]): Promise<PolicyResult[]>;
25
+ private applyKillProcess;
26
+ private applyBlockProvider;
27
+ private applyBlockDomain;
28
+ private addIptablesRule;
29
+ private removeRule;
30
+ }
31
+ export {};
32
+ //# sourceMappingURL=policy-executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy-executor.d.ts","sourceRoot":"","sources":["../../src/enforcement/policy-executor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAA2B,MAAM,UAAU,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAGzC,UAAU,YAAY;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,EAAE,cAAc,GAAG,gBAAgB,GAAG,cAAc,CAAC;IACzD,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;IACvC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,YAAY;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,cAAc,GAAG,gBAAgB,GAAG,cAAc,CAAC;IAC3D,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,cAAc;IAIb,OAAO,CAAC,MAAM;IAH1B,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,YAAY,CAAsB;gBAEtB,MAAM,EAAE,YAAY;IAGlC,KAAK,CACT,QAAQ,EAAE,YAAY,EAAE,EACxB,eAAe,EAAE,aAAa,EAAE,GAC/B,OAAO,CAAC,YAAY,EAAE,CAAC;YAyCZ,gBAAgB;IAoC9B,OAAO,CAAC,kBAAkB;IA+B1B,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,UAAU;CAInB"}
@@ -0,0 +1,132 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PolicyExecutor = void 0;
4
+ const child_process_1 = require("child_process");
5
+ const types_1 = require("../types");
6
+ const logger_1 = require("../logger");
7
+ class PolicyExecutor {
8
+ constructor(config) {
9
+ this.config = config;
10
+ this.appliedRules = new Set();
11
+ this.lastPolicies = [];
12
+ }
13
+ // Apply policies to the current host — returns list of actions taken
14
+ async apply(policies, taggedProcesses) {
15
+ const results = [];
16
+ const hostId = this.config.sentry.hostId;
17
+ // Only process enabled policies for this host (or global)
18
+ const active = policies.filter(p => p.enabled && (!p.hostId || p.hostId === hostId));
19
+ for (const policy of active) {
20
+ switch (policy.type) {
21
+ case 'kill_process':
22
+ results.push(await this.applyKillProcess(policy, taggedProcesses));
23
+ break;
24
+ case 'block_provider':
25
+ results.push(this.applyBlockProvider(policy));
26
+ break;
27
+ case 'block_domain':
28
+ results.push(this.applyBlockDomain(policy));
29
+ break;
30
+ }
31
+ }
32
+ // Remove rules for policies that no longer exist
33
+ for (const ruleId of this.appliedRules) {
34
+ if (!active.some(p => p.id === ruleId)) {
35
+ this.removeRule(ruleId);
36
+ this.appliedRules.delete(ruleId);
37
+ }
38
+ }
39
+ this.lastPolicies = active;
40
+ if (results.length > 0) {
41
+ const applied = results.filter(r => r.applied).length;
42
+ logger_1.logger.info('Policy executor', { total: results.length, applied });
43
+ }
44
+ return results;
45
+ }
46
+ async applyKillProcess(policy, processes) {
47
+ const target = policy.target.toLowerCase();
48
+ const matched = processes.filter(p => {
49
+ if (p.frameworkId === target)
50
+ return true;
51
+ if (p.frameworkName?.toLowerCase() === target)
52
+ return true;
53
+ if (p.command?.toLowerCase().includes(target))
54
+ return true;
55
+ return false;
56
+ });
57
+ if (matched.length === 0) {
58
+ return { policyId: policy.id, action: 'kill_process', target: policy.target, applied: false, detail: 'No matching process found' };
59
+ }
60
+ const signal = policy.action === 'sigkill' ? 'SIGKILL' : 'SIGTERM';
61
+ let killed = 0;
62
+ for (const proc of matched) {
63
+ try {
64
+ process.kill(proc.pid, signal);
65
+ killed++;
66
+ }
67
+ catch {
68
+ try {
69
+ (0, child_process_1.execSync)(`kill -${signal === 'SIGKILL' ? 9 : 15} ${proc.pid}`, { timeout: 3000 });
70
+ killed++;
71
+ }
72
+ catch { /* process may already be gone */ }
73
+ }
74
+ }
75
+ const detail = killed > 0 ? `Killed ${killed} process(es) with ${signal}` : 'Failed to kill processes';
76
+ logger_1.logger.info('Policy: kill_process', { target: policy.target, killed, signal });
77
+ return { policyId: policy.id, action: 'kill_process', target: policy.target, applied: killed > 0, detail };
78
+ }
79
+ applyBlockProvider(policy) {
80
+ const provider = types_1.LLM_PROVIDER_SIGNATURES.find(p => p.id === policy.target || p.name === policy.target);
81
+ if (!provider) {
82
+ return { policyId: policy.id, action: 'block_provider', target: policy.target, applied: false, detail: `Unknown provider: ${policy.target}` };
83
+ }
84
+ const ruleId = `sentry-block-${provider.id}`;
85
+ let success = 0;
86
+ for (const domain of provider.domains) {
87
+ try {
88
+ this.addIptablesRule(ruleId, domain);
89
+ success++;
90
+ }
91
+ catch { /* best-effort */ }
92
+ }
93
+ this.appliedRules.add(ruleId);
94
+ if (success > 0) {
95
+ logger_1.logger.info('Policy: block_provider', { provider: provider.name, domains: success });
96
+ }
97
+ return {
98
+ policyId: policy.id,
99
+ action: 'block_provider',
100
+ target: provider.name,
101
+ applied: success > 0,
102
+ detail: success > 0 ? `Blocked ${success} domain(s) via iptables` : 'No domains blocked (try running as root)',
103
+ };
104
+ }
105
+ applyBlockDomain(policy) {
106
+ const ruleId = `sentry-block-domain-${policy.id.slice(0, 8)}`;
107
+ try {
108
+ this.addIptablesRule(ruleId, policy.target);
109
+ this.appliedRules.add(ruleId);
110
+ logger_1.logger.info('Policy: block_domain', { target: policy.target });
111
+ return { policyId: policy.id, action: 'block_domain', target: policy.target, applied: true, detail: `Blocked ${policy.target} via iptables` };
112
+ }
113
+ catch (err) {
114
+ return { policyId: policy.id, action: 'block_domain', target: policy.target, applied: false, detail: `Failed: ${err.message}` };
115
+ }
116
+ }
117
+ addIptablesRule(ruleId, target) {
118
+ // Try nftables first, fall back to iptables
119
+ try {
120
+ (0, child_process_1.execSync)(`nft add rule inet filter output ${ruleId} ip daddr ${target} drop 2>/dev/null || iptables -C OUTPUT -d ${target} -j DROP 2>/dev/null || iptables -A OUTPUT -d ${target} -j DROP`, { timeout: 5000 });
121
+ }
122
+ catch {
123
+ (0, child_process_1.execSync)(`iptables -C OUTPUT -d ${target} -j DROP 2>/dev/null || iptables -A OUTPUT -d ${target} -j DROP`, { timeout: 5000 });
124
+ }
125
+ }
126
+ removeRule(ruleId) {
127
+ // Cleanup is deferred — rules persist until explicitly removed or reboot
128
+ logger_1.logger.debug('Policy rule removed from tracking', { ruleId });
129
+ }
130
+ }
131
+ exports.PolicyExecutor = PolicyExecutor;
132
+ //# sourceMappingURL=policy-executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy-executor.js","sourceRoot":"","sources":["../../src/enforcement/policy-executor.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -13,6 +13,7 @@ const sandbox_1 = require("./sandbox");
13
13
  const enforcement_engine_1 = require("./enforcement/enforcement-engine");
14
14
  const file_monitor_1 = require("./enforcement/file-monitor");
15
15
  const network_monitor_1 = require("./enforcement/network-monitor");
16
+ const policy_executor_1 = require("./enforcement/policy-executor");
16
17
  const skill_scanner_1 = require("./skill-authz/skill-scanner");
17
18
  const skill_evaluator_1 = require("./skill-authz/skill-evaluator");
18
19
  const api_1 = require("./api");
@@ -28,6 +29,7 @@ class SentryDaemon {
28
29
  constructor() {
29
30
  this.taggedProcesses = [];
30
31
  this.discoveryTimer = null;
32
+ this.policySyncTimer = null;
31
33
  this.healthServer = null;
32
34
  this.policyVersion = '1.0.0';
33
35
  this.startTime = Date.now();
@@ -47,12 +49,14 @@ class SentryDaemon {
47
49
  await this.auditLogger.init();
48
50
  this.enforcementEngine = new enforcement_engine_1.EnforcementEngine(this.config, this.auditLogger);
49
51
  this.skillEvaluator = new skill_evaluator_1.SkillEvaluator(this.config, this.auditLogger);
52
+ this.policyExecutor = new policy_executor_1.PolicyExecutor(this.config);
50
53
  this.apiServer = new api_1.SentryApiServer(this.config, () => this.taggedProcesses, () => this.enforcementEngine, () => this.skillEvaluator, () => this.policyVersion, () => this.telemetryReporter?.getLastSyncAt() ?? null);
51
54
  await this.apiServer.start();
52
55
  this.telemetryReporter = new telemetry_1.TelemetryReporter(this.config, () => this.apiServer.getStatus(), () => this.taggedProcesses, () => this.enforcementEngine.getRecentDecisions());
53
56
  this.telemetryReporter.start();
54
57
  this.startHealthServer();
55
58
  this.startDiscoveryLoop();
59
+ this.startPolicySync();
56
60
  this.running = true;
57
61
  logger_1.logger.info('NeuroShield Sentry daemon is operational', {
58
62
  healthPort: this.config.sentry.healthPort,
@@ -189,6 +193,44 @@ class SentryDaemon {
189
193
  logger_1.logger.info('Health server listening', { port: this.config.sentry.healthPort });
190
194
  });
191
195
  }
196
+ startPolicySync() {
197
+ setTimeout(() => this.syncPolicies().catch(() => { }), 5000);
198
+ this.policySyncTimer = setInterval(() => this.syncPolicies().catch(err => logger_1.logger.warn('Policy sync failed', { err: err.message })), 30000);
199
+ logger_1.logger.info('Policy sync started', { intervalMs: 30000 });
200
+ }
201
+ async syncPolicies() {
202
+ if (!this.config.neurosec.endpoint)
203
+ return;
204
+ try {
205
+ const token = require('fs').readFileSync(this.config.neurosec.tokenPath, 'utf8').trim();
206
+ if (!token)
207
+ return;
208
+ const url = new URL(`/api/v1/sentry/policies?hostId=${encodeURIComponent(this.config.sentry.hostId)}`, this.config.neurosec.endpoint);
209
+ const isHttps = url.protocol === 'https:';
210
+ const lib = isHttps ? require('https') : require('http');
211
+ const data = await new Promise((resolve, reject) => {
212
+ const agent = isHttps ? new lib.Agent({ rejectUnauthorized: false }) : undefined;
213
+ const req = lib.get(url.href, { agent, timeout: 10000, headers: { 'Authorization': `Bearer ${token}` } }, (res) => {
214
+ let body = '';
215
+ res.on('data', (c) => body += c);
216
+ res.on('end', () => { try {
217
+ resolve(JSON.parse(body));
218
+ }
219
+ catch {
220
+ reject(new Error(body));
221
+ } });
222
+ });
223
+ req.on('error', reject);
224
+ req.on('timeout', () => { req.destroy(); reject(new Error('timeout')); });
225
+ });
226
+ if (data?.data && Array.isArray(data.data)) {
227
+ await this.policyExecutor.apply(data.data, this.taggedProcesses);
228
+ }
229
+ }
230
+ catch (err) {
231
+ logger_1.logger.debug('Policy sync failed (non-fatal)', { err: err.message });
232
+ }
233
+ }
192
234
  async stopHealthServer() {
193
235
  if (!this.healthServer)
194
236
  return;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -15,6 +15,7 @@ export declare class TelemetryReporter {
15
15
  getLastSyncAt(): string | null;
16
16
  private readToken;
17
17
  private sendHeartbeat;
18
+ private flushDecisions;
18
19
  private syncProcesses;
19
20
  private apiRequest;
20
21
  }
@@ -1 +1 @@
1
- {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAoB3E,qBAAa,iBAAiB;IAO1B,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,kBAAkB;IAT5B,OAAO,CAAC,cAAc,CAA+C;IACrE,OAAO,CAAC,SAAS,CAA+C;IAChE,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,iBAAiB,CAAc;gBAG7B,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,MAAM,YAAY,EAC7B,kBAAkB,EAAE,MAAM,aAAa,EAAE,EACzC,kBAAkB,EAAE,MAAM,mBAAmB,EAAE;IAGzD,KAAK,IAAI,IAAI;IAkBb,IAAI,IAAI,IAAI;IAKZ,aAAa,IAAI,MAAM,GAAG,IAAI;IAI9B,OAAO,CAAC,SAAS;YAQH,aAAa;YAoDb,aAAa;YA2Bb,UAAU;CAiDzB"}
1
+ {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAoB3E,qBAAa,iBAAiB;IAO1B,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,kBAAkB;IAT5B,OAAO,CAAC,cAAc,CAA+C;IACrE,OAAO,CAAC,SAAS,CAA+C;IAChE,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,iBAAiB,CAAc;gBAG7B,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,MAAM,YAAY,EAC7B,kBAAkB,EAAE,MAAM,aAAa,EAAE,EACzC,kBAAkB,EAAE,MAAM,mBAAmB,EAAE;IAGzD,KAAK,IAAI,IAAI;IAsBb,IAAI,IAAI,IAAI;IAKZ,aAAa,IAAI,MAAM,GAAG,IAAI;IAI9B,OAAO,CAAC,SAAS;YAQH,aAAa;YAgCb,cAAc;YA4Bd,aAAa;YA2Bb,UAAU;CAiDzB"}
package/dist/telemetry.js CHANGED
@@ -21,11 +21,15 @@ class TelemetryReporter {
21
21
  }
22
22
  start() {
23
23
  this.sendHeartbeat().catch(() => { });
24
- this.heartbeatTimer = setInterval(() => this.sendHeartbeat().catch(err => logger_1.logger.warn('Telemetry heartbeat failed', { err: err.message })), this.config.neurosec.heartbeatIntervalMs);
25
- this.syncTimer = setInterval(() => this.syncProcesses().catch(err => logger_1.logger.warn('Process sync failed', { err: err.message })), this.config.neurosec.syncIntervalMs);
24
+ this.heartbeatTimer = setInterval(() => this.sendHeartbeat().catch(err => logger_1.logger.warn('Telemetry heartbeat failed', { err: err.message })), Math.min(this.config.neurosec.heartbeatIntervalMs, 60000));
25
+ // Also flush decisions on the faster sync interval
26
+ this.syncTimer = setInterval(() => {
27
+ this.syncProcesses().catch(() => { });
28
+ this.flushDecisions().catch(() => { });
29
+ }, Math.min(this.config.neurosec.syncIntervalMs, 30000));
26
30
  logger_1.logger.info('Telemetry reporter started', {
27
- heartbeatIntervalMs: this.config.neurosec.heartbeatIntervalMs,
28
- syncIntervalMs: this.config.neurosec.syncIntervalMs,
31
+ heartbeatIntervalMs: Math.min(this.config.neurosec.heartbeatIntervalMs, 60000),
32
+ syncIntervalMs: Math.min(this.config.neurosec.syncIntervalMs, 30000),
29
33
  });
30
34
  }
31
35
  stop() {
@@ -74,30 +78,40 @@ class TelemetryReporter {
74
78
  await this.apiRequest('POST', '/api/v1/sentry/heartbeat', payload);
75
79
  this.lastSyncAt = new Date().toISOString();
76
80
  logger_1.logger.debug('Heartbeat sent', { processes: processes.length });
77
- // Send decisions that haven't been sent yet
78
- const newDecisions = decisions.filter(d => !this.lastDecisionsHash.includes(d.id));
79
- if (newDecisions.length > 0) {
80
- await this.apiRequest('POST', '/api/v1/sentry/decisions', {
81
- hostId: this.config.sentry.hostId,
82
- decisions: newDecisions.slice(-100).map(d => ({
83
- id: d.id,
84
- type: d.type,
85
- action: d.action,
86
- reason: d.reason,
87
- frameworkId: d.frameworkId,
88
- frameworkName: d.frameworkId,
89
- pid: d.pid,
90
- detail: d.detail,
91
- timestamp: new Date(d.timestamp).toISOString(),
92
- })),
93
- });
94
- this.lastDecisionsHash = decisions.slice(-50).map(d => d.id).join(',');
95
- }
96
81
  }
97
82
  catch (err) {
98
83
  logger_1.logger.warn('Telemetry send failed', { err: err.message });
99
84
  }
100
85
  }
86
+ async flushDecisions() {
87
+ if (!this.config.neurosec.endpoint)
88
+ return;
89
+ const decisions = this.getRecentDecisions();
90
+ const newDecisions = decisions.filter(d => !this.lastDecisionsHash.includes(d.id));
91
+ if (newDecisions.length === 0)
92
+ return;
93
+ try {
94
+ await this.apiRequest('POST', '/api/v1/sentry/decisions', {
95
+ hostId: this.config.sentry.hostId,
96
+ decisions: newDecisions.slice(-100).map(d => ({
97
+ id: d.id,
98
+ type: d.type,
99
+ action: d.action,
100
+ reason: d.reason,
101
+ frameworkId: d.frameworkId,
102
+ frameworkName: d.frameworkId,
103
+ pid: d.pid,
104
+ detail: d.detail,
105
+ timestamp: new Date(d.timestamp).toISOString(),
106
+ })),
107
+ });
108
+ this.lastDecisionsHash = decisions.slice(-50).map(d => d.id).join(',');
109
+ logger_1.logger.debug('Decisions flushed', { count: newDecisions.length });
110
+ }
111
+ catch (err) {
112
+ logger_1.logger.warn('Decision flush failed', { err: err.message });
113
+ }
114
+ }
101
115
  async syncProcesses() {
102
116
  if (!this.config.neurosec.endpoint)
103
117
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@neurosec/sentry",
3
- "version": "1.0.9",
3
+ "version": "1.0.13",
4
4
  "description": "NeuroShield Sentry — host-level agent protection daemon. Detects and blocks malicious AI agent actions at the OS level.",
5
5
  "keywords": [
6
6
  "ai-security",
@@ -120,6 +120,58 @@ discovery:
120
120
  `;
121
121
  }
122
122
 
123
+ const SERVICE_NAME = 'neuroshield-sentry';
124
+
125
+ function installSystemdService(paths) {
126
+ const servicePath = '/etc/systemd/system/' + SERVICE_NAME + '.service';
127
+ const binPath = '/usr/local/bin/neuroshield-sentryd';
128
+ const content = `[Unit]
129
+ Description=NeuroShield Sentry — Host-Level Agent Protection Daemon
130
+ Documentation=https://docs.neurosec.ai/sentry
131
+ After=network.target network-online.target
132
+ Wants=network-online.target
133
+
134
+ [Service]
135
+ Type=simple
136
+ ExecStart=${binPath}
137
+ Restart=always
138
+ RestartSec=10
139
+ Environment=NODE_ENV=production
140
+ Environment=SENTRY_CONFIG_PATH=${paths.configPath}
141
+ Environment=LOG_LEVEL=info
142
+ StandardOutput=journal
143
+ StandardError=journal
144
+
145
+ [Install]
146
+ WantedBy=multi-user.target
147
+ `;
148
+
149
+ try {
150
+ fs.writeFileSync(servicePath, content, 'utf8');
151
+ console.log(`[neuroshield-sentry] Service file created: ${servicePath}`);
152
+ return true;
153
+ } catch (e) {
154
+ console.warn(`[neuroshield-sentry] Could not write service file: ${e.message}`);
155
+ return false;
156
+ }
157
+ }
158
+
159
+ function enableAndStartService() {
160
+ const { execSync } = require('child_process');
161
+ for (const cmd of [
162
+ 'systemctl daemon-reload',
163
+ 'systemctl enable ' + SERVICE_NAME,
164
+ 'systemctl start ' + SERVICE_NAME,
165
+ ]) {
166
+ try {
167
+ execSync(cmd, { timeout: 10000, stdio: 'pipe' });
168
+ } catch (e) {
169
+ return false;
170
+ }
171
+ }
172
+ return true;
173
+ }
174
+
123
175
  function main() {
124
176
  const paths = getPlatformPaths();
125
177
  const configDir = paths.configDir;
@@ -128,6 +180,10 @@ function main() {
128
180
 
129
181
  // Skip if config already exists
130
182
  if (fs.existsSync(configPath)) {
183
+ // Still ensure service is installed if on Linux
184
+ if (os.platform() === 'linux' && process.getuid && process.getuid() === 0) {
185
+ installSystemdService(paths);
186
+ }
131
187
  console.log(`[neuroshield-sentry] Config already exists at ${configPath} — skipping`);
132
188
  return;
133
189
  }
@@ -164,25 +220,38 @@ function main() {
164
220
  console.warn(`[neuroshield-sentry] Warning: could not write token: ${e.message}`);
165
221
  }
166
222
 
223
+ console.log('');
224
+ // Auto-install systemd service on Linux if running as root
225
+ let serviceInstalled = false;
226
+ if (os.platform() === 'linux' && process.getuid && process.getuid() === 0) {
227
+ if (installSystemdService(paths)) {
228
+ serviceInstalled = enableAndStartService();
229
+ }
230
+ }
231
+
167
232
  console.log('');
168
233
  console.log('╔══════════════════════════════════════════════════════════╗');
169
234
  console.log('║ NeuroShield Sentry installed! ║');
170
235
  console.log('╠══════════════════════════════════════════════════════════╣');
171
236
  console.log('║ ║');
237
+ if (serviceInstalled) {
238
+ console.log('║ ✓ Systemd service installed and started ║');
239
+ console.log('║ ║');
240
+ }
172
241
  console.log('║ Next steps: ║');
173
242
  console.log('║ ║');
174
243
  console.log('║ 1. Configure your NeuroSec connection: ║');
175
244
  console.log(`║ neuroshield-sentry setup ║`);
176
- console.log('║ (or set env vars: NEUROSEC_ORG_ID, etc.) ║');
177
245
  console.log('║ ║');
178
- console.log('║ 2. Install as a system service: ║');
179
- console.log('║ sudo neuroshield-sentry install ║');
180
- console.log('║ ║');
181
- console.log('║ 3. Or run directly: ║');
182
- console.log('║ sudo neuroshield-sentryd ║');
183
- console.log('║ ║');
184
- console.log('║ 4. Check status: ║');
185
- console.log('║ neuroshield-sentry status ║');
246
+ if (!serviceInstalled) {
247
+ console.log('║ 2. Install as a system service: ║');
248
+ console.log('║ sudo systemctl daemon-reload ║');
249
+ console.log('║ sudo systemctl enable ' + SERVICE_NAME + ' ║');
250
+ console.log('║ sudo systemctl start ' + SERVICE_NAME + ' ║');
251
+ console.log('║ ║');
252
+ }
253
+ console.log('║ Check status: ║');
254
+ console.log('║ systemctl status ' + SERVICE_NAME + ' ║');
186
255
  console.log('║ ║');
187
256
  console.log('╚══════════════════════════════════════════════════════════╝');
188
257
  console.log('');