nox-openclaw-hunter 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +140 -0
- package/bin/nox.js +2 -0
- package/dist/branding.d.ts +39 -0
- package/dist/branding.d.ts.map +1 -0
- package/dist/branding.js +66 -0
- package/dist/branding.js.map +1 -0
- package/dist/cli.d.ts +15 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +94 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/export.d.ts +21 -0
- package/dist/commands/export.d.ts.map +1 -0
- package/dist/commands/export.js +616 -0
- package/dist/commands/export.js.map +1 -0
- package/dist/commands/index.d.ts +8 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +8 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/isolate.d.ts +30 -0
- package/dist/commands/isolate.d.ts.map +1 -0
- package/dist/commands/isolate.js +547 -0
- package/dist/commands/isolate.js.map +1 -0
- package/dist/commands/purge.d.ts +22 -0
- package/dist/commands/purge.d.ts.map +1 -0
- package/dist/commands/purge.js +295 -0
- package/dist/commands/purge.js.map +1 -0
- package/dist/commands/scan.d.ts +23 -0
- package/dist/commands/scan.d.ts.map +1 -0
- package/dist/commands/scan.js +155 -0
- package/dist/commands/scan.js.map +1 -0
- package/dist/detector/app-bundle.d.ts +13 -0
- package/dist/detector/app-bundle.d.ts.map +1 -0
- package/dist/detector/app-bundle.js +27 -0
- package/dist/detector/app-bundle.js.map +1 -0
- package/dist/detector/cli-binary.d.ts +12 -0
- package/dist/detector/cli-binary.d.ts.map +1 -0
- package/dist/detector/cli-binary.js +66 -0
- package/dist/detector/cli-binary.js.map +1 -0
- package/dist/detector/config.d.ts +21 -0
- package/dist/detector/config.d.ts.map +1 -0
- package/dist/detector/config.js +337 -0
- package/dist/detector/config.js.map +1 -0
- package/dist/detector/detection-config.d.ts +24 -0
- package/dist/detector/detection-config.d.ts.map +1 -0
- package/dist/detector/detection-config.js +242 -0
- package/dist/detector/detection-config.js.map +1 -0
- package/dist/detector/docker.d.ts +10 -0
- package/dist/detector/docker.d.ts.map +1 -0
- package/dist/detector/docker.js +94 -0
- package/dist/detector/docker.js.map +1 -0
- package/dist/detector/index.d.ts +50 -0
- package/dist/detector/index.d.ts.map +1 -0
- package/dist/detector/index.js +155 -0
- package/dist/detector/index.js.map +1 -0
- package/dist/detector/network.d.ts +34 -0
- package/dist/detector/network.d.ts.map +1 -0
- package/dist/detector/network.js +205 -0
- package/dist/detector/network.js.map +1 -0
- package/dist/detector/process.d.ts +16 -0
- package/dist/detector/process.d.ts.map +1 -0
- package/dist/detector/process.js +47 -0
- package/dist/detector/process.js.map +1 -0
- package/dist/detector/service.d.ts +17 -0
- package/dist/detector/service.d.ts.map +1 -0
- package/dist/detector/service.js +51 -0
- package/dist/detector/service.js.map +1 -0
- package/dist/enforcer/docker-cleaner.d.ts +30 -0
- package/dist/enforcer/docker-cleaner.d.ts.map +1 -0
- package/dist/enforcer/docker-cleaner.js +163 -0
- package/dist/enforcer/docker-cleaner.js.map +1 -0
- package/dist/enforcer/file-remover.d.ts +34 -0
- package/dist/enforcer/file-remover.d.ts.map +1 -0
- package/dist/enforcer/file-remover.js +137 -0
- package/dist/enforcer/file-remover.js.map +1 -0
- package/dist/enforcer/index.d.ts +33 -0
- package/dist/enforcer/index.d.ts.map +1 -0
- package/dist/enforcer/index.js +142 -0
- package/dist/enforcer/index.js.map +1 -0
- package/dist/enforcer/process-killer.d.ts +18 -0
- package/dist/enforcer/process-killer.d.ts.map +1 -0
- package/dist/enforcer/process-killer.js +80 -0
- package/dist/enforcer/process-killer.js.map +1 -0
- package/dist/enforcer/service-stopper.d.ts +23 -0
- package/dist/enforcer/service-stopper.d.ts.map +1 -0
- package/dist/enforcer/service-stopper.js +95 -0
- package/dist/enforcer/service-stopper.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/isolator/firewall.d.ts +25 -0
- package/dist/isolator/firewall.d.ts.map +1 -0
- package/dist/isolator/firewall.js +114 -0
- package/dist/isolator/firewall.js.map +1 -0
- package/dist/isolator/index.d.ts +63 -0
- package/dist/isolator/index.d.ts.map +1 -0
- package/dist/isolator/index.js +201 -0
- package/dist/isolator/index.js.map +1 -0
- package/dist/isolator/lockdown.d.ts +22 -0
- package/dist/isolator/lockdown.d.ts.map +1 -0
- package/dist/isolator/lockdown.js +401 -0
- package/dist/isolator/lockdown.js.map +1 -0
- package/dist/isolator/quarantine.d.ts +39 -0
- package/dist/isolator/quarantine.d.ts.map +1 -0
- package/dist/isolator/quarantine.js +364 -0
- package/dist/isolator/quarantine.js.map +1 -0
- package/dist/mdm/index.d.ts +93 -0
- package/dist/mdm/index.d.ts.map +1 -0
- package/dist/mdm/index.js +414 -0
- package/dist/mdm/index.js.map +1 -0
- package/dist/mdm/intune.d.ts +69 -0
- package/dist/mdm/intune.d.ts.map +1 -0
- package/dist/mdm/intune.js +409 -0
- package/dist/mdm/intune.js.map +1 -0
- package/dist/mdm/jamf.d.ts +58 -0
- package/dist/mdm/jamf.d.ts.map +1 -0
- package/dist/mdm/jamf.js +441 -0
- package/dist/mdm/jamf.js.map +1 -0
- package/dist/mdm/jumpcloud.d.ts +73 -0
- package/dist/mdm/jumpcloud.d.ts.map +1 -0
- package/dist/mdm/jumpcloud.js +470 -0
- package/dist/mdm/jumpcloud.js.map +1 -0
- package/dist/mdm/templates/detect.ps1.d.ts +30 -0
- package/dist/mdm/templates/detect.ps1.d.ts.map +1 -0
- package/dist/mdm/templates/detect.ps1.js +463 -0
- package/dist/mdm/templates/detect.ps1.js.map +1 -0
- package/dist/mdm/templates/detect.sh.d.ts +30 -0
- package/dist/mdm/templates/detect.sh.d.ts.map +1 -0
- package/dist/mdm/templates/detect.sh.js +474 -0
- package/dist/mdm/templates/detect.sh.js.map +1 -0
- package/dist/mdm/templates/enforce.ps1.d.ts +33 -0
- package/dist/mdm/templates/enforce.ps1.d.ts.map +1 -0
- package/dist/mdm/templates/enforce.ps1.js +681 -0
- package/dist/mdm/templates/enforce.ps1.js.map +1 -0
- package/dist/mdm/templates/enforce.sh.d.ts +33 -0
- package/dist/mdm/templates/enforce.sh.d.ts.map +1 -0
- package/dist/mdm/templates/enforce.sh.js +591 -0
- package/dist/mdm/templates/enforce.sh.js.map +1 -0
- package/dist/platform/darwin.d.ts +6 -0
- package/dist/platform/darwin.d.ts.map +1 -0
- package/dist/platform/darwin.js +192 -0
- package/dist/platform/darwin.js.map +1 -0
- package/dist/platform/index.d.ts +43 -0
- package/dist/platform/index.d.ts.map +1 -0
- package/dist/platform/index.js +27 -0
- package/dist/platform/index.js.map +1 -0
- package/dist/platform/linux.d.ts +6 -0
- package/dist/platform/linux.d.ts.map +1 -0
- package/dist/platform/linux.js +134 -0
- package/dist/platform/linux.js.map +1 -0
- package/dist/platform/windows.d.ts +6 -0
- package/dist/platform/windows.d.ts.map +1 -0
- package/dist/platform/windows.js +134 -0
- package/dist/platform/windows.js.map +1 -0
- package/dist/reporter/console.d.ts +27 -0
- package/dist/reporter/console.d.ts.map +1 -0
- package/dist/reporter/console.js +431 -0
- package/dist/reporter/console.js.map +1 -0
- package/dist/reporter/index.d.ts +11 -0
- package/dist/reporter/index.d.ts.map +1 -0
- package/dist/reporter/index.js +13 -0
- package/dist/reporter/index.js.map +1 -0
- package/dist/reporter/json.d.ts +61 -0
- package/dist/reporter/json.d.ts.map +1 -0
- package/dist/reporter/json.js +75 -0
- package/dist/reporter/json.js.map +1 -0
- package/dist/reporter/webhook.d.ts +57 -0
- package/dist/reporter/webhook.d.ts.map +1 -0
- package/dist/reporter/webhook.js +230 -0
- package/dist/reporter/webhook.js.map +1 -0
- package/dist/types/config.d.ts +116 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +6 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/detection.d.ts +85 -0
- package/dist/types/detection.d.ts.map +1 -0
- package/dist/types/detection.js +5 -0
- package/dist/types/detection.js.map +1 -0
- package/dist/types/enforcement.d.ts +33 -0
- package/dist/types/enforcement.d.ts.map +1 -0
- package/dist/types/enforcement.js +5 -0
- package/dist/types/enforcement.js.map +1 -0
- package/dist/types/index.d.ts +8 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +8 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/isolation.d.ts +55 -0
- package/dist/types/isolation.d.ts.map +1 -0
- package/dist/types/isolation.js +5 -0
- package/dist/types/isolation.js.map +1 -0
- package/dist/utils/exec.d.ts +48 -0
- package/dist/utils/exec.d.ts.map +1 -0
- package/dist/utils/exec.js +103 -0
- package/dist/utils/exec.js.map +1 -0
- package/dist/utils/fs.d.ts +34 -0
- package/dist/utils/fs.d.ts.map +1 -0
- package/dist/utils/fs.js +111 -0
- package/dist/utils/fs.js.map +1 -0
- package/dist/utils/index.d.ts +7 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +7 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +14 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +48 -0
- package/dist/utils/logger.js.map +1 -0
- package/docs/intune.md +390 -0
- package/docs/jamf.md +400 -0
- package/docs/jumpcloud.md +510 -0
- package/package.json +65 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/detector/service.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAG9D;;;GAGG;AACH,wBAAsB,aAAa,CACjC,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,gBAAgB,CAAC,CAkC3B;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,CAC3C,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,OAAO,CAAC,CAIlB"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Service detection for OpenClaw gateway.
|
|
3
|
+
* Checks launchd (macOS), systemd (Linux), and Windows services.
|
|
4
|
+
*/
|
|
5
|
+
import { logger } from '../utils/logger.js';
|
|
6
|
+
/**
|
|
7
|
+
* Detect the OpenClaw gateway service.
|
|
8
|
+
* Uses platform-specific service management (launchctl, systemctl, sc).
|
|
9
|
+
*/
|
|
10
|
+
export async function detectService(platform) {
|
|
11
|
+
logger.debug('Detecting gateway service...');
|
|
12
|
+
const serviceName = platform.getServiceName();
|
|
13
|
+
try {
|
|
14
|
+
const running = await platform.checkServiceRunning(serviceName);
|
|
15
|
+
if (running) {
|
|
16
|
+
logger.debug(`Service ${serviceName} is running`);
|
|
17
|
+
return {
|
|
18
|
+
found: true,
|
|
19
|
+
name: serviceName,
|
|
20
|
+
running: true,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
// Service might exist but not be running
|
|
24
|
+
// For now, we consider it "found" only if running
|
|
25
|
+
// A more thorough check could look for plist/unit files
|
|
26
|
+
logger.debug(`Service ${serviceName} not found or not running`);
|
|
27
|
+
return {
|
|
28
|
+
found: false,
|
|
29
|
+
name: serviceName,
|
|
30
|
+
running: false,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
catch (err) {
|
|
34
|
+
logger.debug(`Error checking service: ${err}`);
|
|
35
|
+
return {
|
|
36
|
+
found: false,
|
|
37
|
+
name: serviceName,
|
|
38
|
+
running: false,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Check if the service definition file exists (plist, unit file, etc.).
|
|
44
|
+
* This indicates OpenClaw was installed even if not currently running.
|
|
45
|
+
*/
|
|
46
|
+
export async function detectServiceDefinition(platform) {
|
|
47
|
+
// This is a supplementary check that could be added
|
|
48
|
+
// For now, we rely on the main detectService function
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/detector/service.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,QAAkB;IAElB,MAAM,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAE7C,MAAM,WAAW,GAAG,QAAQ,CAAC,cAAc,EAAE,CAAC;IAE9C,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;QAEhE,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,CAAC,KAAK,CAAC,WAAW,WAAW,aAAa,CAAC,CAAC;YAClD,OAAO;gBACL,KAAK,EAAE,IAAI;gBACX,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,yCAAyC;QACzC,kDAAkD;QAClD,wDAAwD;QACxD,MAAM,CAAC,KAAK,CAAC,WAAW,WAAW,2BAA2B,CAAC,CAAC;QAChE,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,KAAK;SACf,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,KAAK,CAAC,2BAA2B,GAAG,EAAE,CAAC,CAAC;QAC/C,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,KAAK;SACf,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,QAAkB;IAElB,oDAAoD;IACpD,sDAAsD;IACtD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Docker cleaner for removing OpenClaw containers and images.
|
|
3
|
+
*/
|
|
4
|
+
import type { EnforcementAction } from '../types/enforcement.js';
|
|
5
|
+
import type { DockerDetection } from '../types/detection.js';
|
|
6
|
+
/**
|
|
7
|
+
* Stop a Docker container by ID or name.
|
|
8
|
+
*/
|
|
9
|
+
export declare function stopContainer(containerId: string, dryRun?: boolean): Promise<EnforcementAction>;
|
|
10
|
+
/**
|
|
11
|
+
* Remove a Docker container by ID or name.
|
|
12
|
+
*/
|
|
13
|
+
export declare function removeContainer(containerId: string, dryRun?: boolean): Promise<EnforcementAction>;
|
|
14
|
+
/**
|
|
15
|
+
* Remove a Docker image by ID or name.
|
|
16
|
+
*/
|
|
17
|
+
export declare function removeImage(imageId: string, dryRun?: boolean): Promise<EnforcementAction>;
|
|
18
|
+
/**
|
|
19
|
+
* Clean up all OpenClaw Docker containers.
|
|
20
|
+
*/
|
|
21
|
+
export declare function cleanContainers(containers: string[], dryRun?: boolean): Promise<EnforcementAction[]>;
|
|
22
|
+
/**
|
|
23
|
+
* Clean up all OpenClaw Docker images.
|
|
24
|
+
*/
|
|
25
|
+
export declare function cleanImages(images: string[], dryRun?: boolean): Promise<EnforcementAction[]>;
|
|
26
|
+
/**
|
|
27
|
+
* Clean up all OpenClaw Docker artifacts from detection results.
|
|
28
|
+
*/
|
|
29
|
+
export declare function cleanDockerArtifacts(docker: DockerDetection, dryRun?: boolean): Promise<EnforcementAction[]>;
|
|
30
|
+
//# sourceMappingURL=docker-cleaner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docker-cleaner.d.ts","sourceRoot":"","sources":["../../src/enforcer/docker-cleaner.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAgB7D;;GAEG;AACH,wBAAsB,aAAa,CACjC,WAAW,EAAE,MAAM,EACnB,MAAM,GAAE,OAAe,GACtB,OAAO,CAAC,iBAAiB,CAAC,CA0B5B;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,MAAM,GAAE,OAAe,GACtB,OAAO,CAAC,iBAAiB,CAAC,CA2B5B;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,MAAM,EACf,MAAM,GAAE,OAAe,GACtB,OAAO,CAAC,iBAAiB,CAAC,CA2B5B;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,UAAU,EAAE,MAAM,EAAE,EACpB,MAAM,GAAE,OAAe,GACtB,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAgB9B;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,MAAM,EAAE,EAChB,MAAM,GAAE,OAAe,GACtB,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAgB9B;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,eAAe,EACvB,MAAM,GAAE,OAAe,GACtB,OAAO,CAAC,iBAAiB,EAAE,CAAC,CA4B9B"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Docker cleaner for removing OpenClaw containers and images.
|
|
3
|
+
*/
|
|
4
|
+
import { exec } from '../utils/exec.js';
|
|
5
|
+
import { logger } from '../utils/logger.js';
|
|
6
|
+
/**
|
|
7
|
+
* Check if Docker is available on the system.
|
|
8
|
+
*/
|
|
9
|
+
async function isDockerAvailable() {
|
|
10
|
+
try {
|
|
11
|
+
await exec('docker --version');
|
|
12
|
+
return true;
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Stop a Docker container by ID or name.
|
|
20
|
+
*/
|
|
21
|
+
export async function stopContainer(containerId, dryRun = false) {
|
|
22
|
+
const action = {
|
|
23
|
+
type: 'docker-rm',
|
|
24
|
+
target: `container:${containerId}`,
|
|
25
|
+
status: 'pending',
|
|
26
|
+
dryRun,
|
|
27
|
+
};
|
|
28
|
+
if (dryRun) {
|
|
29
|
+
logger.info(`[dry-run] Would stop Docker container: ${containerId}`);
|
|
30
|
+
action.status = 'skipped';
|
|
31
|
+
return action;
|
|
32
|
+
}
|
|
33
|
+
try {
|
|
34
|
+
await exec(`docker stop ${containerId}`);
|
|
35
|
+
logger.success(`Stopped Docker container: ${containerId}`);
|
|
36
|
+
action.status = 'success';
|
|
37
|
+
}
|
|
38
|
+
catch (err) {
|
|
39
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
40
|
+
logger.error(`Failed to stop Docker container ${containerId}: ${message}`);
|
|
41
|
+
action.status = 'failed';
|
|
42
|
+
action.error = message;
|
|
43
|
+
}
|
|
44
|
+
return action;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Remove a Docker container by ID or name.
|
|
48
|
+
*/
|
|
49
|
+
export async function removeContainer(containerId, dryRun = false) {
|
|
50
|
+
const action = {
|
|
51
|
+
type: 'docker-rm',
|
|
52
|
+
target: `container:${containerId}`,
|
|
53
|
+
status: 'pending',
|
|
54
|
+
dryRun,
|
|
55
|
+
};
|
|
56
|
+
if (dryRun) {
|
|
57
|
+
logger.info(`[dry-run] Would remove Docker container: ${containerId}`);
|
|
58
|
+
action.status = 'skipped';
|
|
59
|
+
return action;
|
|
60
|
+
}
|
|
61
|
+
try {
|
|
62
|
+
// Force remove (also stops if running)
|
|
63
|
+
await exec(`docker rm -f ${containerId}`);
|
|
64
|
+
logger.success(`Removed Docker container: ${containerId}`);
|
|
65
|
+
action.status = 'success';
|
|
66
|
+
}
|
|
67
|
+
catch (err) {
|
|
68
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
69
|
+
logger.error(`Failed to remove Docker container ${containerId}: ${message}`);
|
|
70
|
+
action.status = 'failed';
|
|
71
|
+
action.error = message;
|
|
72
|
+
}
|
|
73
|
+
return action;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Remove a Docker image by ID or name.
|
|
77
|
+
*/
|
|
78
|
+
export async function removeImage(imageId, dryRun = false) {
|
|
79
|
+
const action = {
|
|
80
|
+
type: 'docker-rm',
|
|
81
|
+
target: `image:${imageId}`,
|
|
82
|
+
status: 'pending',
|
|
83
|
+
dryRun,
|
|
84
|
+
};
|
|
85
|
+
if (dryRun) {
|
|
86
|
+
logger.info(`[dry-run] Would remove Docker image: ${imageId}`);
|
|
87
|
+
action.status = 'skipped';
|
|
88
|
+
return action;
|
|
89
|
+
}
|
|
90
|
+
try {
|
|
91
|
+
// Force remove
|
|
92
|
+
await exec(`docker rmi -f ${imageId}`);
|
|
93
|
+
logger.success(`Removed Docker image: ${imageId}`);
|
|
94
|
+
action.status = 'success';
|
|
95
|
+
}
|
|
96
|
+
catch (err) {
|
|
97
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
98
|
+
logger.error(`Failed to remove Docker image ${imageId}: ${message}`);
|
|
99
|
+
action.status = 'failed';
|
|
100
|
+
action.error = message;
|
|
101
|
+
}
|
|
102
|
+
return action;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Clean up all OpenClaw Docker containers.
|
|
106
|
+
*/
|
|
107
|
+
export async function cleanContainers(containers, dryRun = false) {
|
|
108
|
+
const actions = [];
|
|
109
|
+
if (containers.length === 0) {
|
|
110
|
+
logger.info('No OpenClaw Docker containers to clean');
|
|
111
|
+
return actions;
|
|
112
|
+
}
|
|
113
|
+
logger.info(`Cleaning ${containers.length} OpenClaw Docker container(s)...`);
|
|
114
|
+
for (const containerId of containers) {
|
|
115
|
+
const action = await removeContainer(containerId, dryRun);
|
|
116
|
+
actions.push(action);
|
|
117
|
+
}
|
|
118
|
+
return actions;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Clean up all OpenClaw Docker images.
|
|
122
|
+
*/
|
|
123
|
+
export async function cleanImages(images, dryRun = false) {
|
|
124
|
+
const actions = [];
|
|
125
|
+
if (images.length === 0) {
|
|
126
|
+
logger.info('No OpenClaw Docker images to clean');
|
|
127
|
+
return actions;
|
|
128
|
+
}
|
|
129
|
+
logger.info(`Cleaning ${images.length} OpenClaw Docker image(s)...`);
|
|
130
|
+
for (const imageId of images) {
|
|
131
|
+
const action = await removeImage(imageId, dryRun);
|
|
132
|
+
actions.push(action);
|
|
133
|
+
}
|
|
134
|
+
return actions;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Clean up all OpenClaw Docker artifacts from detection results.
|
|
138
|
+
*/
|
|
139
|
+
export async function cleanDockerArtifacts(docker, dryRun = false) {
|
|
140
|
+
const actions = [];
|
|
141
|
+
if (!docker.found) {
|
|
142
|
+
logger.info('No OpenClaw Docker artifacts detected');
|
|
143
|
+
return actions;
|
|
144
|
+
}
|
|
145
|
+
// Check if Docker is available
|
|
146
|
+
const dockerAvailable = await isDockerAvailable();
|
|
147
|
+
if (!dockerAvailable) {
|
|
148
|
+
logger.warn('Docker is not available on this system');
|
|
149
|
+
return actions;
|
|
150
|
+
}
|
|
151
|
+
// Remove containers first (they depend on images)
|
|
152
|
+
if (docker.containers && docker.containers.length > 0) {
|
|
153
|
+
const containerActions = await cleanContainers(docker.containers, dryRun);
|
|
154
|
+
actions.push(...containerActions);
|
|
155
|
+
}
|
|
156
|
+
// Then remove images
|
|
157
|
+
if (docker.images && docker.images.length > 0) {
|
|
158
|
+
const imageActions = await cleanImages(docker.images, dryRun);
|
|
159
|
+
actions.push(...imageActions);
|
|
160
|
+
}
|
|
161
|
+
return actions;
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=docker-cleaner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docker-cleaner.js","sourceRoot":"","sources":["../../src/enforcer/docker-cleaner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File and directory remover for OpenClaw artifacts.
|
|
3
|
+
*/
|
|
4
|
+
import type { EnforcementAction } from '../types/enforcement.js';
|
|
5
|
+
import type { CliBinaryDetection, AppBundleDetection, StateDirDetection, ConfigDetection } from '../types/detection.js';
|
|
6
|
+
/**
|
|
7
|
+
* Remove a single file.
|
|
8
|
+
*/
|
|
9
|
+
export declare function removeFile(filePath: string, dryRun?: boolean): Promise<EnforcementAction>;
|
|
10
|
+
/**
|
|
11
|
+
* Remove a directory and all its contents.
|
|
12
|
+
*/
|
|
13
|
+
export declare function removeDirectory(dirPath: string, dryRun?: boolean): Promise<EnforcementAction>;
|
|
14
|
+
/**
|
|
15
|
+
* Remove the OpenClaw CLI binary.
|
|
16
|
+
*/
|
|
17
|
+
export declare function removeCliBinary(cli: CliBinaryDetection, dryRun?: boolean): Promise<EnforcementAction | null>;
|
|
18
|
+
/**
|
|
19
|
+
* Remove the OpenClaw app bundle (macOS .app directory).
|
|
20
|
+
*/
|
|
21
|
+
export declare function removeAppBundle(app: AppBundleDetection, dryRun?: boolean): Promise<EnforcementAction | null>;
|
|
22
|
+
/**
|
|
23
|
+
* Remove the OpenClaw state directory (~/.openclaw).
|
|
24
|
+
*/
|
|
25
|
+
export declare function removeStateDir(stateDir: StateDirDetection, dryRun?: boolean): Promise<EnforcementAction | null>;
|
|
26
|
+
/**
|
|
27
|
+
* Remove the OpenClaw config file.
|
|
28
|
+
*/
|
|
29
|
+
export declare function removeConfigFile(config: ConfigDetection, dryRun?: boolean): Promise<EnforcementAction | null>;
|
|
30
|
+
/**
|
|
31
|
+
* Remove all OpenClaw file artifacts from detection results.
|
|
32
|
+
*/
|
|
33
|
+
export declare function removeAllFileArtifacts(cli: CliBinaryDetection, app: AppBundleDetection, stateDir: StateDirDetection, dryRun?: boolean): Promise<EnforcementAction[]>;
|
|
34
|
+
//# sourceMappingURL=file-remover.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-remover.d.ts","sourceRoot":"","sources":["../../src/enforcer/file-remover.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,EACV,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EAChB,MAAM,uBAAuB,CAAC;AAI/B;;GAEG;AACH,wBAAsB,UAAU,CAC9B,QAAQ,EAAE,MAAM,EAChB,MAAM,GAAE,OAAe,GACtB,OAAO,CAAC,iBAAiB,CAAC,CAkC5B;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,MAAM,GAAE,OAAe,GACtB,OAAO,CAAC,iBAAiB,CAAC,CAkC5B;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,kBAAkB,EACvB,MAAM,GAAE,OAAe,GACtB,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAQnC;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,kBAAkB,EACvB,MAAM,GAAE,OAAe,GACtB,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAQnC;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,iBAAiB,EAC3B,MAAM,GAAE,OAAe,GACtB,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAQnC;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,eAAe,EACvB,MAAM,GAAE,OAAe,GACtB,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAQnC;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,kBAAkB,EACvB,GAAG,EAAE,kBAAkB,EACvB,QAAQ,EAAE,iBAAiB,EAC3B,MAAM,GAAE,OAAe,GACtB,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAgB9B"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File and directory remover for OpenClaw artifacts.
|
|
3
|
+
*/
|
|
4
|
+
import { pathExists, safeRemove } from '../utils/fs.js';
|
|
5
|
+
import { logger } from '../utils/logger.js';
|
|
6
|
+
/**
|
|
7
|
+
* Remove a single file.
|
|
8
|
+
*/
|
|
9
|
+
export async function removeFile(filePath, dryRun = false) {
|
|
10
|
+
const action = {
|
|
11
|
+
type: 'remove-file',
|
|
12
|
+
target: filePath,
|
|
13
|
+
status: 'pending',
|
|
14
|
+
dryRun,
|
|
15
|
+
};
|
|
16
|
+
if (dryRun) {
|
|
17
|
+
logger.info(`[dry-run] Would remove file: ${filePath}`);
|
|
18
|
+
action.status = 'skipped';
|
|
19
|
+
return action;
|
|
20
|
+
}
|
|
21
|
+
// Check if file exists first
|
|
22
|
+
const exists = await pathExists(filePath);
|
|
23
|
+
if (!exists) {
|
|
24
|
+
logger.info(`File does not exist: ${filePath}`);
|
|
25
|
+
action.status = 'skipped';
|
|
26
|
+
return action;
|
|
27
|
+
}
|
|
28
|
+
const result = await safeRemove(filePath);
|
|
29
|
+
if (result.success) {
|
|
30
|
+
logger.success(`Removed file: ${filePath}`);
|
|
31
|
+
action.status = 'success';
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
logger.error(`Failed to remove file ${filePath}: ${result.error}`);
|
|
35
|
+
action.status = 'failed';
|
|
36
|
+
action.error = result.error;
|
|
37
|
+
}
|
|
38
|
+
return action;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Remove a directory and all its contents.
|
|
42
|
+
*/
|
|
43
|
+
export async function removeDirectory(dirPath, dryRun = false) {
|
|
44
|
+
const action = {
|
|
45
|
+
type: 'remove-dir',
|
|
46
|
+
target: dirPath,
|
|
47
|
+
status: 'pending',
|
|
48
|
+
dryRun,
|
|
49
|
+
};
|
|
50
|
+
if (dryRun) {
|
|
51
|
+
logger.info(`[dry-run] Would remove directory: ${dirPath}`);
|
|
52
|
+
action.status = 'skipped';
|
|
53
|
+
return action;
|
|
54
|
+
}
|
|
55
|
+
// Check if directory exists first
|
|
56
|
+
const exists = await pathExists(dirPath);
|
|
57
|
+
if (!exists) {
|
|
58
|
+
logger.info(`Directory does not exist: ${dirPath}`);
|
|
59
|
+
action.status = 'skipped';
|
|
60
|
+
return action;
|
|
61
|
+
}
|
|
62
|
+
const result = await safeRemove(dirPath);
|
|
63
|
+
if (result.success) {
|
|
64
|
+
logger.success(`Removed directory: ${dirPath}`);
|
|
65
|
+
action.status = 'success';
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
logger.error(`Failed to remove directory ${dirPath}: ${result.error}`);
|
|
69
|
+
action.status = 'failed';
|
|
70
|
+
action.error = result.error;
|
|
71
|
+
}
|
|
72
|
+
return action;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Remove the OpenClaw CLI binary.
|
|
76
|
+
*/
|
|
77
|
+
export async function removeCliBinary(cli, dryRun = false) {
|
|
78
|
+
if (!cli.found || !cli.path) {
|
|
79
|
+
logger.info('No OpenClaw CLI binary detected');
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
logger.info(`Removing OpenClaw CLI binary: ${cli.path}...`);
|
|
83
|
+
return removeFile(cli.path, dryRun);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Remove the OpenClaw app bundle (macOS .app directory).
|
|
87
|
+
*/
|
|
88
|
+
export async function removeAppBundle(app, dryRun = false) {
|
|
89
|
+
if (!app.found || !app.path) {
|
|
90
|
+
logger.info('No OpenClaw app bundle detected');
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
logger.info(`Removing OpenClaw app bundle: ${app.path}...`);
|
|
94
|
+
return removeDirectory(app.path, dryRun);
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Remove the OpenClaw state directory (~/.openclaw).
|
|
98
|
+
*/
|
|
99
|
+
export async function removeStateDir(stateDir, dryRun = false) {
|
|
100
|
+
if (!stateDir.found || !stateDir.path) {
|
|
101
|
+
logger.info('No OpenClaw state directory detected');
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
logger.info(`Removing OpenClaw state directory: ${stateDir.path}...`);
|
|
105
|
+
return removeDirectory(stateDir.path, dryRun);
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Remove the OpenClaw config file.
|
|
109
|
+
*/
|
|
110
|
+
export async function removeConfigFile(config, dryRun = false) {
|
|
111
|
+
if (!config.found || !config.path) {
|
|
112
|
+
logger.info('No OpenClaw config file detected');
|
|
113
|
+
return null;
|
|
114
|
+
}
|
|
115
|
+
logger.info(`Removing OpenClaw config file: ${config.path}...`);
|
|
116
|
+
return removeFile(config.path, dryRun);
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Remove all OpenClaw file artifacts from detection results.
|
|
120
|
+
*/
|
|
121
|
+
export async function removeAllFileArtifacts(cli, app, stateDir, dryRun = false) {
|
|
122
|
+
const actions = [];
|
|
123
|
+
// Remove CLI binary
|
|
124
|
+
const cliAction = await removeCliBinary(cli, dryRun);
|
|
125
|
+
if (cliAction)
|
|
126
|
+
actions.push(cliAction);
|
|
127
|
+
// Remove app bundle
|
|
128
|
+
const appAction = await removeAppBundle(app, dryRun);
|
|
129
|
+
if (appAction)
|
|
130
|
+
actions.push(appAction);
|
|
131
|
+
// Remove state directory (includes config)
|
|
132
|
+
const stateDirAction = await removeStateDir(stateDir, dryRun);
|
|
133
|
+
if (stateDirAction)
|
|
134
|
+
actions.push(stateDirAction);
|
|
135
|
+
return actions;
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=file-remover.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-remover.js","sourceRoot":"","sources":["../../src/enforcer/file-remover.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Enforcement orchestrator for OpenClaw removal.
|
|
3
|
+
*
|
|
4
|
+
* Coordinates all enforcement actions: killing processes, stopping services,
|
|
5
|
+
* removing files, and cleaning up Docker artifacts.
|
|
6
|
+
*/
|
|
7
|
+
import type { EnforcementResult, EnforceOptions } from '../types/enforcement.js';
|
|
8
|
+
import type { DetectionResult } from '../types/detection.js';
|
|
9
|
+
export * from './process-killer.js';
|
|
10
|
+
export * from './service-stopper.js';
|
|
11
|
+
export * from './file-remover.js';
|
|
12
|
+
export * from './docker-cleaner.js';
|
|
13
|
+
/**
|
|
14
|
+
* Main enforcement orchestrator.
|
|
15
|
+
*
|
|
16
|
+
* Takes detection results and options, then executes the appropriate
|
|
17
|
+
* enforcement actions in the correct order:
|
|
18
|
+
* 1. Kill running processes
|
|
19
|
+
* 2. Stop and disable services
|
|
20
|
+
* 3. Remove files (CLI, app, config)
|
|
21
|
+
* 4. Clean up Docker artifacts
|
|
22
|
+
*/
|
|
23
|
+
export declare function enforce(detection: DetectionResult, options: EnforceOptions): Promise<EnforcementResult>;
|
|
24
|
+
/**
|
|
25
|
+
* Validate enforcement options.
|
|
26
|
+
* Returns true if at least one enforcement action is enabled.
|
|
27
|
+
*/
|
|
28
|
+
export declare function validateEnforceOptions(options: EnforceOptions): boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Get a human-readable description of what will be enforced.
|
|
31
|
+
*/
|
|
32
|
+
export declare function describeEnforceOptions(options: EnforceOptions): string[];
|
|
33
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/enforcer/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAEV,iBAAiB,EAEjB,cAAc,EACf,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAI7D,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AAuBpC;;;;;;;;;GASG;AACH,wBAAsB,OAAO,CAC3B,SAAS,EAAE,eAAe,EAC1B,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,iBAAiB,CAAC,CA2E5B;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CASvE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,EAAE,CA6BxE"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Enforcement orchestrator for OpenClaw removal.
|
|
3
|
+
*
|
|
4
|
+
* Coordinates all enforcement actions: killing processes, stopping services,
|
|
5
|
+
* removing files, and cleaning up Docker artifacts.
|
|
6
|
+
*/
|
|
7
|
+
import { getPlatform } from '../platform/index.js';
|
|
8
|
+
import { logger } from '../utils/logger.js';
|
|
9
|
+
// Re-export sub-modules for direct access
|
|
10
|
+
export * from './process-killer.js';
|
|
11
|
+
export * from './service-stopper.js';
|
|
12
|
+
export * from './file-remover.js';
|
|
13
|
+
export * from './docker-cleaner.js';
|
|
14
|
+
import { killDetectedProcesses } from './process-killer.js';
|
|
15
|
+
import { stopDetectedService } from './service-stopper.js';
|
|
16
|
+
import { removeCliBinary, removeAppBundle, removeStateDir, } from './file-remover.js';
|
|
17
|
+
import { cleanDockerArtifacts } from './docker-cleaner.js';
|
|
18
|
+
/**
|
|
19
|
+
* Summarize enforcement actions.
|
|
20
|
+
*/
|
|
21
|
+
function summarizeActions(actions) {
|
|
22
|
+
return {
|
|
23
|
+
total: actions.length,
|
|
24
|
+
success: actions.filter((a) => a.status === 'success').length,
|
|
25
|
+
failed: actions.filter((a) => a.status === 'failed').length,
|
|
26
|
+
skipped: actions.filter((a) => a.status === 'skipped').length,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Main enforcement orchestrator.
|
|
31
|
+
*
|
|
32
|
+
* Takes detection results and options, then executes the appropriate
|
|
33
|
+
* enforcement actions in the correct order:
|
|
34
|
+
* 1. Kill running processes
|
|
35
|
+
* 2. Stop and disable services
|
|
36
|
+
* 3. Remove files (CLI, app, config)
|
|
37
|
+
* 4. Clean up Docker artifacts
|
|
38
|
+
*/
|
|
39
|
+
export async function enforce(detection, options) {
|
|
40
|
+
const actions = [];
|
|
41
|
+
const platform = getPlatform();
|
|
42
|
+
const dryRun = options.dryRun ?? false;
|
|
43
|
+
if (dryRun) {
|
|
44
|
+
logger.warn('Running in dry-run mode - no changes will be made');
|
|
45
|
+
}
|
|
46
|
+
// 1. Kill running processes
|
|
47
|
+
if (options.kill || options.all) {
|
|
48
|
+
logger.info('Enforcement step 1/4: Killing processes...');
|
|
49
|
+
const processActions = await killDetectedProcesses(platform, detection.processes, dryRun);
|
|
50
|
+
actions.push(...processActions);
|
|
51
|
+
}
|
|
52
|
+
// 2. Stop and disable services
|
|
53
|
+
if (options.stopService || options.all) {
|
|
54
|
+
logger.info('Enforcement step 2/4: Stopping services...');
|
|
55
|
+
const serviceActions = await stopDetectedService(platform, detection.service, dryRun);
|
|
56
|
+
actions.push(...serviceActions);
|
|
57
|
+
}
|
|
58
|
+
// 3. Remove CLI binary
|
|
59
|
+
if (options.removeCli || options.all) {
|
|
60
|
+
logger.info('Enforcement step 3a/4: Removing CLI binary...');
|
|
61
|
+
const cliAction = await removeCliBinary(detection.cli, dryRun);
|
|
62
|
+
if (cliAction)
|
|
63
|
+
actions.push(cliAction);
|
|
64
|
+
}
|
|
65
|
+
// 4. Remove app bundle (macOS only)
|
|
66
|
+
if (options.removeApp || options.all) {
|
|
67
|
+
logger.info('Enforcement step 3b/4: Removing app bundle...');
|
|
68
|
+
const appAction = await removeAppBundle(detection.app, dryRun);
|
|
69
|
+
if (appAction)
|
|
70
|
+
actions.push(appAction);
|
|
71
|
+
}
|
|
72
|
+
// 5. Remove config/state directory
|
|
73
|
+
if (options.removeConfig || options.all) {
|
|
74
|
+
logger.info('Enforcement step 3c/4: Removing config directory...');
|
|
75
|
+
const configAction = await removeStateDir(detection.stateDir, dryRun);
|
|
76
|
+
if (configAction)
|
|
77
|
+
actions.push(configAction);
|
|
78
|
+
}
|
|
79
|
+
// 6. Clean up Docker artifacts (always attempted with --all)
|
|
80
|
+
if (options.all) {
|
|
81
|
+
logger.info('Enforcement step 4/4: Cleaning Docker artifacts...');
|
|
82
|
+
const dockerActions = await cleanDockerArtifacts(detection.docker, dryRun);
|
|
83
|
+
actions.push(...dockerActions);
|
|
84
|
+
}
|
|
85
|
+
const summary = summarizeActions(actions);
|
|
86
|
+
// Log summary
|
|
87
|
+
if (actions.length === 0) {
|
|
88
|
+
logger.info('No enforcement actions were required');
|
|
89
|
+
}
|
|
90
|
+
else if (dryRun) {
|
|
91
|
+
logger.info(`Dry run complete: ${summary.total} action(s) would be performed`);
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
logger.info(`Enforcement complete: ${summary.success} succeeded, ${summary.failed} failed, ${summary.skipped} skipped`);
|
|
95
|
+
}
|
|
96
|
+
return { actions, summary };
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Validate enforcement options.
|
|
100
|
+
* Returns true if at least one enforcement action is enabled.
|
|
101
|
+
*/
|
|
102
|
+
export function validateEnforceOptions(options) {
|
|
103
|
+
return !!(options.all ||
|
|
104
|
+
options.kill ||
|
|
105
|
+
options.stopService ||
|
|
106
|
+
options.removeCli ||
|
|
107
|
+
options.removeApp ||
|
|
108
|
+
options.removeConfig);
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Get a human-readable description of what will be enforced.
|
|
112
|
+
*/
|
|
113
|
+
export function describeEnforceOptions(options) {
|
|
114
|
+
const descriptions = [];
|
|
115
|
+
if (options.all) {
|
|
116
|
+
descriptions.push('Kill all OpenClaw processes');
|
|
117
|
+
descriptions.push('Stop and disable OpenClaw services');
|
|
118
|
+
descriptions.push('Remove OpenClaw CLI binary');
|
|
119
|
+
descriptions.push('Remove OpenClaw app bundle');
|
|
120
|
+
descriptions.push('Remove OpenClaw config directory');
|
|
121
|
+
descriptions.push('Remove OpenClaw Docker containers and images');
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
if (options.kill) {
|
|
125
|
+
descriptions.push('Kill all OpenClaw processes');
|
|
126
|
+
}
|
|
127
|
+
if (options.stopService) {
|
|
128
|
+
descriptions.push('Stop and disable OpenClaw services');
|
|
129
|
+
}
|
|
130
|
+
if (options.removeCli) {
|
|
131
|
+
descriptions.push('Remove OpenClaw CLI binary');
|
|
132
|
+
}
|
|
133
|
+
if (options.removeApp) {
|
|
134
|
+
descriptions.push('Remove OpenClaw app bundle');
|
|
135
|
+
}
|
|
136
|
+
if (options.removeConfig) {
|
|
137
|
+
descriptions.push('Remove OpenClaw config directory');
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return descriptions;
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/enforcer/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Process killer for terminating OpenClaw processes.
|
|
3
|
+
*/
|
|
4
|
+
import type { Platform, ProcessInfo } from '../platform/index.js';
|
|
5
|
+
import type { EnforcementAction } from '../types/enforcement.js';
|
|
6
|
+
/**
|
|
7
|
+
* Kill a single process by PID.
|
|
8
|
+
*/
|
|
9
|
+
export declare function killProcess(platform: Platform, pid: number, dryRun?: boolean, processName?: string): Promise<EnforcementAction>;
|
|
10
|
+
/**
|
|
11
|
+
* Kill all processes matching a given name.
|
|
12
|
+
*/
|
|
13
|
+
export declare function killProcessesByName(platform: Platform, name: string, dryRun?: boolean): Promise<EnforcementAction[]>;
|
|
14
|
+
/**
|
|
15
|
+
* Kill all OpenClaw-related processes from detection results.
|
|
16
|
+
*/
|
|
17
|
+
export declare function killDetectedProcesses(platform: Platform, processes: ProcessInfo[], dryRun?: boolean): Promise<EnforcementAction[]>;
|
|
18
|
+
//# sourceMappingURL=process-killer.d.ts.map
|