@sonde/agent 0.2.5 → 0.2.6

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,4 +1,4 @@
1
1
 
2
- > @sonde/agent@0.2.4 build
2
+ > @sonde/agent@0.2.5 build
3
3
  > tsc
4
4
 
@@ -1,23 +1,23 @@
1
1
 
2
- > @sonde/agent@0.2.4 test
2
+ > @sonde/agent@0.2.5 test
3
3
  > vitest run
4
4
 
5
5
 
6
6
  RUN v2.1.9 /Users/joshowen/Library/CloudStorage/ProtonDrive-joshowen@protonmail.com-folder/AI/ClaudeCode/sonde/packages/agent
7
7
 
8
- ✓ src/cli/mcp-bridge.test.ts (5 tests) 2ms
9
- ✓ src/runtime/scrubber.test.ts (11 tests) 4ms
10
- ✓ src/system/scanner.test.ts (10 tests) 5ms
11
- ✓ src/runtime/audit.test.ts (5 tests) 4ms
12
- ✓ src/cli/update.test.ts (9 tests) 3ms
13
- ✓ src/runtime/privilege.test.ts (4 tests) 80ms
14
- ✓ src/runtime/attestation.test.ts (8 tests) 2ms
15
- ✓ src/cli/packs.test.ts (11 tests) 4ms
16
- ✓ src/runtime/executor.test.ts (7 tests) 3ms
17
- ✓ src/runtime/connection.test.ts (11 tests) 12ms
8
+ ✓ src/cli/mcp-bridge.test.ts (5 tests) 3ms
9
+ ✓ src/runtime/scrubber.test.ts (11 tests) 5ms
10
+ ✓ src/runtime/audit.test.ts (5 tests) 6ms
11
+ ✓ src/runtime/privilege.test.ts (4 tests) 29ms
12
+ ✓ src/system/scanner.test.ts (10 tests) 4ms
13
+ ✓ src/cli/update.test.ts (9 tests) 5ms
14
+ ✓ src/runtime/attestation.test.ts (8 tests) 4ms
15
+ ✓ src/cli/packs.test.ts (17 tests) 6ms
16
+ ✓ src/runtime/executor.test.ts (7 tests) 7ms
17
+ ✓ src/runtime/connection.test.ts (11 tests) 23ms
18
18
 
19
19
  Test Files 10 passed (10)
20
- Tests 81 passed (81)
21
- Start at 15:54:24
22
- Duration 2.37s (transform 1.89s, setup 0ms, collect 6.78s, tests 120ms, environment 1ms, prepare 3.41s)
20
+ Tests 87 passed (87)
21
+ Start at 10:01:38
22
+ Duration 2.99s (transform 2.29s, setup 0ms, collect 8.24s, tests 91ms, environment 1ms, prepare 4.29s)
23
23
 
package/CHANGELOG.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # @sonde/agent
2
2
 
3
+ ## 0.2.6
4
+
5
+ ### Patch Changes
6
+
7
+ - updates
8
+
9
+ - Updated dependencies []:
10
+ - @sonde/shared@0.1.3
11
+ - @sonde/packs@0.1.3
12
+
3
13
  ## 0.2.5
4
14
 
5
15
  ### Patch Changes
@@ -1,5 +1,10 @@
1
1
  import type { Pack } from '@sonde/packs';
2
2
  import { type PermissionCheck, type ScanResult, type SystemChecker } from '../system/scanner.js';
3
+ /**
4
+ * Build a pack map filtered by a disabled list.
5
+ * Used by both the CLI commands and ProbeExecutor creation.
6
+ */
7
+ export declare function buildEnabledPacks(registry: ReadonlyMap<string, Pack>, disabledPacks: string[]): Map<string, Pack>;
3
8
  export interface PackState {
4
9
  /** Packs currently loaded/active on this agent */
5
10
  installed: Map<string, Pack>;
@@ -11,6 +16,7 @@ export interface PackCommandDeps {
11
16
  checker: SystemChecker;
12
17
  getUserGroups: () => string[];
13
18
  log: (msg: string) => void;
19
+ persist: (disabledPacks: string[]) => void;
14
20
  }
15
21
  export declare function cmdPacksList(deps?: PackCommandDeps): void;
16
22
  export declare function cmdPacksScan(deps?: PackCommandDeps): ScanResult[];
@@ -1 +1 @@
1
- {"version":3,"file":"packs.d.ts","sourceRoot":"","sources":["../../src/cli/packs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAGzC,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,UAAU,EACf,KAAK,aAAa,EAInB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,WAAW,SAAS;IACxB,kDAAkD;IAClD,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC7B,4CAA4C;IAC5C,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,EAAE,aAAa,CAAC;IACvB,aAAa,EAAE,MAAM,MAAM,EAAE,CAAC;IAC9B,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAC5B;AA4BD,wBAAgB,YAAY,CAAC,IAAI,CAAC,EAAE,eAAe,GAAG,IAAI,CAmBzD;AAED,wBAAgB,YAAY,CAAC,IAAI,CAAC,EAAE,eAAe,GAAG,UAAU,EAAE,CAmCjE;AAED,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,eAAe,GACrB;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,eAAe,CAAA;CAAE,CA0CrD;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,eAAe,GAAG,OAAO,CAW/E;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CA2C1D"}
1
+ {"version":3,"file":"packs.d.ts","sourceRoot":"","sources":["../../src/cli/packs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAIzC,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,UAAU,EACf,KAAK,aAAa,EAInB,MAAM,sBAAsB,CAAC;AAE9B;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,EACnC,aAAa,EAAE,MAAM,EAAE,GACtB,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CASnB;AAED,MAAM,WAAW,SAAS;IACxB,kDAAkD;IAClD,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC7B,4CAA4C;IAC5C,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,EAAE,aAAa,CAAC;IACvB,aAAa,EAAE,MAAM,MAAM,EAAE,CAAC;IAC9B,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3B,OAAO,EAAE,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;CAC5C;AAsCD,wBAAgB,YAAY,CAAC,IAAI,CAAC,EAAE,eAAe,GAAG,IAAI,CAsBzD;AAED,wBAAgB,YAAY,CAAC,IAAI,CAAC,EAAE,eAAe,GAAG,UAAU,EAAE,CAmCjE;AAED,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,eAAe,GACrB;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,eAAe,CAAA;CAAE,CAgDrD;AAED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,eAAe,GACrB,OAAO,CAcT;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CA4C1D"}
package/dist/cli/packs.js CHANGED
@@ -1,14 +1,39 @@
1
1
  import { packRegistry } from '@sonde/packs';
2
+ import { loadConfig, saveConfig } from '../config.js';
2
3
  import { checkPackPermissions, createSystemChecker, scanForSoftware, } from '../system/scanner.js';
4
+ /**
5
+ * Build a pack map filtered by a disabled list.
6
+ * Used by both the CLI commands and ProbeExecutor creation.
7
+ */
8
+ export function buildEnabledPacks(registry, disabledPacks) {
9
+ const disabled = new Set(disabledPacks);
10
+ const result = new Map();
11
+ for (const [name, pack] of registry) {
12
+ if (!disabled.has(name)) {
13
+ result.set(name, pack);
14
+ }
15
+ }
16
+ return result;
17
+ }
3
18
  function createDefaultDeps() {
19
+ const config = loadConfig();
20
+ const disabledPacks = config?.disabledPacks ?? [];
4
21
  return {
5
22
  state: {
6
- installed: new Map(packRegistry),
23
+ installed: buildEnabledPacks(packRegistry, disabledPacks),
7
24
  available: packRegistry,
8
25
  },
9
26
  checker: createSystemChecker(),
10
27
  getUserGroups: getProcessUserGroups,
11
28
  log: console.log,
29
+ persist: (disabled) => {
30
+ const current = loadConfig();
31
+ if (current) {
32
+ current.disabledPacks =
33
+ disabled.length > 0 ? disabled : undefined;
34
+ saveConfig(current);
35
+ }
36
+ },
12
37
  };
13
38
  }
14
39
  function getProcessUserGroups() {
@@ -31,17 +56,19 @@ export function cmdPacksList(deps) {
31
56
  log('No packs installed.');
32
57
  return;
33
58
  }
59
+ const bold = (s) => `\x1b[1m${s}\x1b[0m`;
34
60
  log('Installed packs:');
35
61
  log('');
36
62
  for (const [name, pack] of state.installed) {
37
63
  const probeCount = pack.manifest.probes.length;
38
- log(` ${name} v${pack.manifest.version} (${probeCount} probes)`);
64
+ log(` ${bold(name)} v${pack.manifest.version} (${probeCount} probes)`);
39
65
  log(` ${pack.manifest.description}`);
40
66
  for (const probe of pack.manifest.probes) {
41
67
  log(` - ${name}.${probe.name}: ${probe.description}`);
42
68
  }
43
69
  log('');
44
70
  }
71
+ log(` Manage: sonde packs install ${bold('<name>')} | uninstall ${bold('<name>')}`);
45
72
  }
46
73
  export function cmdPacksScan(deps) {
47
74
  const { state, checker, log } = deps ?? createDefaultDeps();
@@ -77,7 +104,7 @@ export function cmdPacksScan(deps) {
77
104
  return results;
78
105
  }
79
106
  export function cmdPacksInstall(name, deps) {
80
- const { state, checker, getUserGroups, log } = deps ?? createDefaultDeps();
107
+ const { state, checker, getUserGroups, log, persist } = deps ?? createDefaultDeps();
81
108
  const pack = state.available.get(name);
82
109
  if (!pack) {
83
110
  log(`Error: Pack "${name}" not found.`);
@@ -110,28 +137,35 @@ export function cmdPacksInstall(name, deps) {
110
137
  return { success: false, permissions };
111
138
  }
112
139
  state.installed.set(name, pack);
140
+ const disabled = [...state.available.keys()]
141
+ .filter((k) => !state.installed.has(k));
142
+ persist(disabled);
113
143
  log(`Pack "${name}" installed successfully.`);
114
144
  log(` ${pack.manifest.probes.length} probes now available.`);
115
145
  return { success: true, permissions };
116
146
  }
117
147
  export function cmdPacksUninstall(name, deps) {
118
- const { state, log } = deps ?? createDefaultDeps();
148
+ const { state, log, persist } = deps ?? createDefaultDeps();
119
149
  if (!state.installed.has(name)) {
120
150
  log(`Error: Pack "${name}" is not installed.`);
121
151
  return false;
122
152
  }
123
153
  state.installed.delete(name);
154
+ const disabled = [...state.available.keys()]
155
+ .filter((k) => !state.installed.has(k));
156
+ persist(disabled);
124
157
  log(`Pack "${name}" uninstalled.`);
125
158
  return true;
126
159
  }
127
160
  export function handlePacksCommand(subArgs) {
128
161
  const subcommand = subArgs[0];
162
+ const deps = createDefaultDeps();
129
163
  switch (subcommand) {
130
164
  case 'list':
131
- cmdPacksList();
165
+ cmdPacksList(deps);
132
166
  break;
133
167
  case 'scan':
134
- cmdPacksScan();
168
+ cmdPacksScan(deps);
135
169
  break;
136
170
  case 'install': {
137
171
  const name = subArgs[1];
@@ -139,7 +173,7 @@ export function handlePacksCommand(subArgs) {
139
173
  console.error('Usage: sonde packs install <name>');
140
174
  process.exit(1);
141
175
  }
142
- const result = cmdPacksInstall(name);
176
+ const result = cmdPacksInstall(name, deps);
143
177
  if (!result.success)
144
178
  process.exit(1);
145
179
  break;
@@ -150,7 +184,7 @@ export function handlePacksCommand(subArgs) {
150
184
  console.error('Usage: sonde packs uninstall <name>');
151
185
  process.exit(1);
152
186
  }
153
- if (!cmdPacksUninstall(name))
187
+ if (!cmdPacksUninstall(name, deps))
154
188
  process.exit(1);
155
189
  break;
156
190
  }
@@ -1 +1 @@
1
- {"version":3,"file":"packs.js","sourceRoot":"","sources":["../../src/cli/packs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"packs.js","sourceRoot":"","sources":["../../src/cli/packs.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { describe, expect, it, vi } from 'vitest';
2
- import { cmdPacksInstall, cmdPacksList, cmdPacksScan, cmdPacksUninstall, } from './packs.js';
2
+ import { buildEnabledPacks, cmdPacksInstall, cmdPacksList, cmdPacksScan, cmdPacksUninstall, } from './packs.js';
3
3
  function createMockPack(name, overrides) {
4
4
  return {
5
5
  manifest: {
@@ -39,6 +39,7 @@ function createDeps(overrides = {}) {
39
39
  checker: createMockChecker(),
40
40
  getUserGroups: () => [],
41
41
  log: vi.fn(),
42
+ persist: vi.fn(),
42
43
  ...overrides,
43
44
  };
44
45
  }
@@ -167,5 +168,59 @@ describe('cmdPacksUninstall', () => {
167
168
  const log = deps.log;
168
169
  expect(log).toHaveBeenCalledWith('Error: Pack "docker" is not installed.');
169
170
  });
171
+ it('persists disabled packs on uninstall', () => {
172
+ const deps = createDeps();
173
+ cmdPacksUninstall('system', deps);
174
+ const persist = deps.persist;
175
+ expect(persist).toHaveBeenCalledTimes(1);
176
+ const firstCall = persist.mock.calls[0];
177
+ const disabled = firstCall[0];
178
+ expect(disabled).toContain('system');
179
+ expect(disabled).toContain('docker');
180
+ });
181
+ });
182
+ describe('cmdPacksInstall persistence', () => {
183
+ it('persists disabled packs on install', () => {
184
+ const deps = createDeps();
185
+ cmdPacksInstall('docker', deps);
186
+ const persist = deps.persist;
187
+ expect(persist).toHaveBeenCalledTimes(1);
188
+ const firstCall = persist.mock.calls[0];
189
+ const disabled = firstCall[0];
190
+ expect(disabled).not.toContain('docker');
191
+ expect(disabled).not.toContain('system');
192
+ });
193
+ it('does not persist when install fails', () => {
194
+ const deps = createDeps();
195
+ cmdPacksInstall('nonexistent', deps);
196
+ const persist = deps.persist;
197
+ expect(persist).not.toHaveBeenCalled();
198
+ });
199
+ });
200
+ describe('buildEnabledPacks', () => {
201
+ it('returns all packs when none disabled', () => {
202
+ const registry = new Map([
203
+ ['system', createMockPack('system')],
204
+ ['docker', createMockPack('docker')],
205
+ ]);
206
+ const result = buildEnabledPacks(registry, []);
207
+ expect([...result.keys()]).toEqual(['system', 'docker']);
208
+ });
209
+ it('filters out disabled packs', () => {
210
+ const registry = new Map([
211
+ ['system', createMockPack('system')],
212
+ ['docker', createMockPack('docker')],
213
+ ['nginx', createMockPack('nginx')],
214
+ ]);
215
+ const result = buildEnabledPacks(registry, ['docker', 'nginx']);
216
+ expect([...result.keys()]).toEqual(['system']);
217
+ });
218
+ it('ignores disabled names not in registry', () => {
219
+ const registry = new Map([
220
+ ['system', createMockPack('system')],
221
+ ]);
222
+ const result = buildEnabledPacks(registry, ['nonexistent']);
223
+ expect([...result.keys()]).toEqual(['system']);
224
+ });
170
225
  });
171
226
  //# sourceMappingURL=packs.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"packs.test.js","sourceRoot":"","sources":["../../src/cli/packs.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"packs.test.js","sourceRoot":"","sources":["../../src/cli/packs.test.ts"],"names":[],"mappings":"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"}
package/dist/config.d.ts CHANGED
@@ -9,6 +9,7 @@ export interface AgentConfig {
9
9
  caCertPath?: string;
10
10
  scrubPatterns?: string[];
11
11
  allowUnsignedPacks?: boolean;
12
+ disabledPacks?: string[];
12
13
  }
13
14
  export declare function getConfigPath(): string;
14
15
  export declare function loadConfig(): AgentConfig | undefined;
@@ -16,4 +17,16 @@ export declare function saveConfig(config: AgentConfig): void;
16
17
  export declare function getConfigDir(): string;
17
18
  /** Save cert/key/ca PEM files to ~/.sonde/ and update config paths. */
18
19
  export declare function saveCerts(config: AgentConfig, certPem: string, keyPem: string, caCertPem: string): void;
20
+ export declare function writePidFile(pid: number): void;
21
+ /**
22
+ * Read PID file and verify the process is still alive.
23
+ * Returns undefined if file missing or process is dead.
24
+ */
25
+ export declare function readPidFile(): number | undefined;
26
+ export declare function removePidFile(): void;
27
+ /**
28
+ * Stop a running background agent if one exists.
29
+ * Returns true if an agent was stopped.
30
+ */
31
+ export declare function stopRunningAgent(): boolean;
19
32
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAKD,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,wBAAgB,UAAU,IAAI,WAAW,GAAG,SAAS,CAoBpD;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAGpD;AAED,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,uEAAuE;AACvE,wBAAgB,SAAS,CACvB,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAChB,IAAI,CAcN"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAMD,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,wBAAgB,UAAU,IAAI,WAAW,GAAG,SAAS,CAoBpD;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAGpD;AAED,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,uEAAuE;AACvE,wBAAgB,SAAS,CACvB,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAChB,IAAI,CAcN;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAG9C;AAED;;;GAGG;AACH,wBAAgB,WAAW,IAAI,MAAM,GAAG,SAAS,CAmBhD;AAED,wBAAgB,aAAa,IAAI,IAAI,CAMpC;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAW1C"}
package/dist/config.js CHANGED
@@ -3,6 +3,7 @@ import os from 'node:os';
3
3
  import path from 'node:path';
4
4
  const CONFIG_DIR = path.join(os.homedir(), '.sonde');
5
5
  const CONFIG_FILE = path.join(CONFIG_DIR, 'config.json');
6
+ const PID_FILE = path.join(CONFIG_DIR, 'agent.pid');
6
7
  export function getConfigPath() {
7
8
  return CONFIG_FILE;
8
9
  }
@@ -49,4 +50,58 @@ export function saveCerts(config, certPem, keyPem, caCertPem) {
49
50
  config.keyPath = keyPath;
50
51
  config.caCertPath = caCertPath;
51
52
  }
53
+ export function writePidFile(pid) {
54
+ fs.mkdirSync(CONFIG_DIR, { recursive: true });
55
+ fs.writeFileSync(PID_FILE, String(pid), 'utf-8');
56
+ }
57
+ /**
58
+ * Read PID file and verify the process is still alive.
59
+ * Returns undefined if file missing or process is dead.
60
+ */
61
+ export function readPidFile() {
62
+ let raw;
63
+ try {
64
+ raw = fs.readFileSync(PID_FILE, 'utf-8').trim();
65
+ }
66
+ catch {
67
+ return undefined;
68
+ }
69
+ const pid = Number.parseInt(raw, 10);
70
+ if (Number.isNaN(pid))
71
+ return undefined;
72
+ try {
73
+ process.kill(pid, 0);
74
+ return pid;
75
+ }
76
+ catch {
77
+ // Process is dead — clean up stale PID file
78
+ removePidFile();
79
+ return undefined;
80
+ }
81
+ }
82
+ export function removePidFile() {
83
+ try {
84
+ fs.unlinkSync(PID_FILE);
85
+ }
86
+ catch {
87
+ // Ignore if already removed
88
+ }
89
+ }
90
+ /**
91
+ * Stop a running background agent if one exists.
92
+ * Returns true if an agent was stopped.
93
+ */
94
+ export function stopRunningAgent() {
95
+ const pid = readPidFile();
96
+ if (pid === undefined)
97
+ return false;
98
+ try {
99
+ process.kill(pid, 'SIGTERM');
100
+ }
101
+ catch {
102
+ // Process already gone
103
+ }
104
+ removePidFile();
105
+ return true;
106
+ }
52
107
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAe7B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;AACrD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AAEzD,MAAM,UAAU,aAAa;IAC3B,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,IAAI,GAAI,GAAyB,CAAC,IAAI,CAAC;QAC7C,IAAI,IAAI,KAAK,QAAQ;YAAE,OAAO,SAAS,CAAC;QACxC,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,OAAO,CAAC,KAAK,CAAC,yBAAyB,WAAW,2BAA2B,CAAC,CAAC;YAC/E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAgB,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,KAAK,CAAC,4BAA4B,WAAW,kCAAkC,CAAC,CAAC;QACzF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAmB;IAC5C,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACjF,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,SAAS,CACvB,MAAmB,EACnB,OAAe,EACf,MAAc,EACd,SAAiB;IAEjB,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE9C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IACnD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IACjD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAEnD,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC7C,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3C,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAEjD,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC;AACjC,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAKA,OAAO,EAAE,KAAK,WAAW,EAAyC,MAAM,aAAa,CAAC;AACtF,OAAO,EAAE,eAAe,EAAE,KAAK,gBAAgB,EAAiB,MAAM,yBAAyB,CAAC;AAChG,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAyCtD,UAAU,OAAO;IACf,MAAM,EAAE,WAAW,CAAC;IACpB,QAAQ,EAAE,aAAa,CAAC;IACxB,UAAU,EAAE,eAAe,CAAC;CAC7B;AAED,iBAAS,aAAa,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAaxD;AAiOD,OAAO,EAAE,aAAa,EAAE,CAAC;AACzB,YAAY,EAAE,OAAO,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAOA,OAAO,EACL,KAAK,WAAW,EAOjB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,eAAe,EAAE,KAAK,gBAAgB,EAAiB,MAAM,yBAAyB,CAAC;AAChG,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AA4CtD,UAAU,OAAO;IACf,MAAM,EAAE,WAAW,CAAC;IACpB,QAAQ,EAAE,aAAa,CAAC;IACxB,UAAU,EAAE,eAAe,CAAC;CAC7B;AAED,iBAAS,aAAa,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAgBxD;AAwSD,OAAO,EAAE,aAAa,EAAE,CAAC;AACzB,YAAY,EAAE,OAAO,EAAE,CAAC"}
package/dist/index.js CHANGED
@@ -1,12 +1,15 @@
1
1
  #!/usr/bin/env node
2
+ import { spawn } from 'node:child_process';
2
3
  import os from 'node:os';
3
- import { handlePacksCommand } from './cli/packs.js';
4
+ import { packRegistry } from '@sonde/packs';
5
+ import { buildEnabledPacks, handlePacksCommand } from './cli/packs.js';
4
6
  import { checkForUpdate, performUpdate } from './cli/update.js';
5
- import { getConfigPath, loadConfig, saveConfig } from './config.js';
7
+ import { getConfigPath, loadConfig, removePidFile, saveConfig, stopRunningAgent, writePidFile, } from './config.js';
6
8
  import { AgentConnection, enrollWithHub } from './runtime/connection.js';
7
9
  import { ProbeExecutor } from './runtime/executor.js';
8
10
  import { checkNotRoot } from './runtime/privilege.js';
9
11
  import { buildPatterns } from './runtime/scrubber.js';
12
+ import { createSystemChecker, scanForSoftware } from './system/scanner.js';
10
13
  import { VERSION } from './version.js';
11
14
  const args = process.argv.slice(2);
12
15
  const command = args[0];
@@ -21,6 +24,8 @@ function printUsage() {
21
24
  console.log(' install Interactive guided setup (enroll + scan + packs)');
22
25
  console.log(' enroll Enroll this agent with a hub');
23
26
  console.log(' start Start the agent (TUI by default, --headless for daemon)');
27
+ console.log(' stop Stop the background agent');
28
+ console.log(' restart Restart the agent in background');
24
29
  console.log(' status Show agent status');
25
30
  console.log(' packs Manage packs (list, scan, install, uninstall)');
26
31
  console.log(' update Check for and install agent updates');
@@ -48,7 +53,8 @@ function createRuntime(events) {
48
53
  console.error('Error: Agent not enrolled. Run "sonde enroll" first.');
49
54
  process.exit(1);
50
55
  }
51
- const executor = new ProbeExecutor(undefined, undefined, buildPatterns(config.scrubPatterns));
56
+ const enabledPacks = buildEnabledPacks(packRegistry, config.disabledPacks ?? []);
57
+ const executor = new ProbeExecutor(enabledPacks, undefined, buildPatterns(config.scrubPatterns));
52
58
  const connection = new AgentConnection(config, executor, events);
53
59
  return { config, executor, connection };
54
60
  }
@@ -96,6 +102,18 @@ async function cmdEnroll() {
96
102
  // Clear the one-time token after use
97
103
  config.enrollmentToken = undefined;
98
104
  saveConfig(config);
105
+ // Auto-detect packs
106
+ const manifests = [...packRegistry.values()].map((p) => p.manifest);
107
+ const checker = createSystemChecker();
108
+ const scanResults = scanForSoftware(manifests, checker);
109
+ const detectedNames = scanResults
110
+ .filter((r) => r.detected)
111
+ .map((r) => r.packName);
112
+ const allNames = manifests.map((m) => m.name);
113
+ const enabledNames = ['system', ...detectedNames.filter((n) => n !== 'system')];
114
+ const disabledNames = allNames.filter((n) => !enabledNames.includes(n));
115
+ config.disabledPacks = disabledNames;
116
+ saveConfig(config);
99
117
  console.log('Agent enrolled successfully.');
100
118
  console.log(` Hub: ${hubUrl}`);
101
119
  console.log(` Name: ${agentName}`);
@@ -105,6 +123,14 @@ async function cmdEnroll() {
105
123
  console.log(' mTLS: Client certificate issued and saved');
106
124
  }
107
125
  console.log('');
126
+ console.log('Pack detection:');
127
+ for (const name of enabledNames) {
128
+ console.log(` ✓ ${name}`);
129
+ }
130
+ for (const name of disabledNames) {
131
+ console.log(` ✗ ${name} (not detected)`);
132
+ }
133
+ console.log('');
108
134
  console.log('Run "sonde start" to connect.');
109
135
  }
110
136
  function cmdStart() {
@@ -131,21 +157,56 @@ function cmdStart() {
131
157
  console.log(` Hub: ${config.hubUrl}`);
132
158
  console.log('');
133
159
  connection.start();
160
+ writePidFile(process.pid);
134
161
  process.stdin.unref();
135
162
  const shutdown = () => {
136
163
  console.log('\nShutting down...');
137
164
  connection.stop();
165
+ removePidFile();
138
166
  process.exit(0);
139
167
  };
140
168
  process.on('SIGINT', shutdown);
141
169
  process.on('SIGTERM', shutdown);
142
170
  }
171
+ function spawnBackgroundAgent() {
172
+ const child = spawn(process.execPath, [process.argv[1], 'start', '--headless'], {
173
+ detached: true,
174
+ stdio: 'ignore',
175
+ });
176
+ child.unref();
177
+ return child.pid;
178
+ }
143
179
  async function cmdManager() {
180
+ stopRunningAgent();
181
+ let detached = false;
144
182
  const { render } = await import('ink');
145
183
  const { createElement } = await import('react');
146
184
  const { ManagerApp } = await import('./tui/manager/ManagerApp.js');
147
- const { waitUntilExit } = render(createElement(ManagerApp, { createRuntime }));
185
+ const onDetach = () => {
186
+ detached = true;
187
+ spawnBackgroundAgent();
188
+ };
189
+ const { waitUntilExit } = render(createElement(ManagerApp, { createRuntime, onDetach }));
148
190
  await waitUntilExit();
191
+ if (detached) {
192
+ console.log('Agent detached to background.');
193
+ console.log(' sonde stop — stop the background agent');
194
+ console.log(' sonde start — reattach the TUI');
195
+ console.log(' sonde restart — restart in background');
196
+ }
197
+ }
198
+ function cmdStop() {
199
+ if (stopRunningAgent()) {
200
+ console.log('Agent stopped.');
201
+ }
202
+ else {
203
+ console.log('No running agent found.');
204
+ }
205
+ }
206
+ function cmdRestart() {
207
+ stopRunningAgent();
208
+ const pid = spawnBackgroundAgent();
209
+ console.log(`Agent restarted in background (PID: ${pid}).`);
149
210
  }
150
211
  function cmdStatus() {
151
212
  const config = loadConfig();
@@ -154,7 +215,7 @@ function cmdStatus() {
154
215
  console.log(`Run "sonde enroll" to get started.`);
155
216
  return;
156
217
  }
157
- console.log('Sonde Agent Status');
218
+ console.log(`Sonde Agent v${VERSION}`);
158
219
  console.log(` Name: ${config.agentName}`);
159
220
  console.log(` Hub: ${config.hubUrl}`);
160
221
  console.log(` Agent ID: ${config.agentId ?? '(not yet assigned)'}`);
@@ -213,6 +274,12 @@ switch (command) {
213
274
  });
214
275
  }
215
276
  break;
277
+ case 'stop':
278
+ cmdStop();
279
+ break;
280
+ case 'restart':
281
+ cmdRestart();
282
+ break;
216
283
  case 'status':
217
284
  cmdStatus();
218
285
  break;