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,616 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Export command - generate MDM deployment scripts.
|
|
3
|
+
*/
|
|
4
|
+
import * as fs from 'node:fs/promises';
|
|
5
|
+
import * as path from 'node:path';
|
|
6
|
+
import chalk from 'chalk';
|
|
7
|
+
import ora from 'ora';
|
|
8
|
+
import { printBanner, EXIT_CODES } from '../branding.js';
|
|
9
|
+
import { logger, setLogLevel } from '../utils/logger.js';
|
|
10
|
+
import { printStatus } from '../reporter/index.js';
|
|
11
|
+
/**
|
|
12
|
+
* Validate MDM platform option.
|
|
13
|
+
*/
|
|
14
|
+
function validatePlatform(platform) {
|
|
15
|
+
return ['jamf', 'intune', 'jumpcloud'].includes(platform.toLowerCase());
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Validate script mode option.
|
|
19
|
+
*/
|
|
20
|
+
function validateMode(mode) {
|
|
21
|
+
return ['detect', 'purge'].includes(mode.toLowerCase());
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Generate detection shell script for Unix-like systems.
|
|
25
|
+
*/
|
|
26
|
+
function generateDetectShellScript(webhookUrl, webhookToken) {
|
|
27
|
+
const webhookSection = webhookUrl
|
|
28
|
+
? `
|
|
29
|
+
# Webhook configuration
|
|
30
|
+
WEBHOOK_URL="${webhookUrl}"
|
|
31
|
+
${webhookToken ? `WEBHOOK_TOKEN="${webhookToken}"` : ''}
|
|
32
|
+
|
|
33
|
+
send_webhook() {
|
|
34
|
+
local status="$1"
|
|
35
|
+
local details="$2"
|
|
36
|
+
local payload="{\\"event\\":\\"openclaw.detection\\",\\"status\\":\\"$status\\",\\"hostname\\":\\"$(hostname)\\",\\"details\\":\\"$details\\"}"
|
|
37
|
+
|
|
38
|
+
curl -s -X POST "$WEBHOOK_URL" \\
|
|
39
|
+
-H "Content-Type: application/json" \\
|
|
40
|
+
${webhookToken ? '-H "Authorization: Bearer $WEBHOOK_TOKEN"' : ''} \\
|
|
41
|
+
-d "$payload" > /dev/null 2>&1 || true
|
|
42
|
+
}
|
|
43
|
+
`
|
|
44
|
+
: '';
|
|
45
|
+
return `#!/bin/bash
|
|
46
|
+
# Nox OpenClaw Detection Script
|
|
47
|
+
# Generated by nox-openclaw-detector
|
|
48
|
+
# https://nox.security
|
|
49
|
+
|
|
50
|
+
set -euo pipefail
|
|
51
|
+
|
|
52
|
+
OPENCLAW_FOUND=0
|
|
53
|
+
DETAILS=""
|
|
54
|
+
${webhookSection}
|
|
55
|
+
# Check if nox CLI is installed
|
|
56
|
+
if command -v nox &>/dev/null; then
|
|
57
|
+
if nox scan --quiet --json > /tmp/nox_scan_result.json 2>/dev/null; then
|
|
58
|
+
SUMMARY=$(cat /tmp/nox_scan_result.json | grep -o '"summary":"[^"]*"' | cut -d'"' -f4 || echo "")
|
|
59
|
+
if [[ "$SUMMARY" != "not-installed" ]]; then
|
|
60
|
+
OPENCLAW_FOUND=1
|
|
61
|
+
DETAILS="Detected via nox CLI: $SUMMARY"
|
|
62
|
+
fi
|
|
63
|
+
rm -f /tmp/nox_scan_result.json
|
|
64
|
+
fi
|
|
65
|
+
${webhookUrl ? 'send_webhook "$([[ $OPENCLAW_FOUND -eq 1 ]] && echo "detected" || echo "clean")" "$DETAILS"' : ''}
|
|
66
|
+
exit $OPENCLAW_FOUND
|
|
67
|
+
fi
|
|
68
|
+
|
|
69
|
+
# Fallback: direct detection
|
|
70
|
+
|
|
71
|
+
# Check CLI binary
|
|
72
|
+
for cli_path in /usr/local/bin/openclaw /opt/homebrew/bin/openclaw /usr/bin/openclaw; do
|
|
73
|
+
if [[ -f "$cli_path" ]]; then
|
|
74
|
+
OPENCLAW_FOUND=1
|
|
75
|
+
DETAILS="CLI found at $cli_path"
|
|
76
|
+
break
|
|
77
|
+
fi
|
|
78
|
+
done
|
|
79
|
+
|
|
80
|
+
# Check config directory
|
|
81
|
+
if [[ -d "$HOME/.openclaw" ]] || [[ -d "/Users/*/.openclaw" ]]; then
|
|
82
|
+
OPENCLAW_FOUND=1
|
|
83
|
+
DETAILS="$DETAILS; Config directory found"
|
|
84
|
+
fi
|
|
85
|
+
|
|
86
|
+
# Check macOS app bundle
|
|
87
|
+
if [[ -d "/Applications/OpenClaw.app" ]]; then
|
|
88
|
+
OPENCLAW_FOUND=1
|
|
89
|
+
DETAILS="$DETAILS; App bundle found"
|
|
90
|
+
fi
|
|
91
|
+
|
|
92
|
+
# Check gateway port
|
|
93
|
+
if command -v nc &>/dev/null && nc -z localhost 18789 2>/dev/null; then
|
|
94
|
+
OPENCLAW_FOUND=1
|
|
95
|
+
DETAILS="$DETAILS; Gateway port 18789 listening"
|
|
96
|
+
fi
|
|
97
|
+
|
|
98
|
+
# Check running processes
|
|
99
|
+
if pgrep -x "openclaw" > /dev/null 2>&1 || pgrep -f "openclaw" > /dev/null 2>&1; then
|
|
100
|
+
OPENCLAW_FOUND=1
|
|
101
|
+
DETAILS="$DETAILS; Process running"
|
|
102
|
+
fi
|
|
103
|
+
${webhookUrl ? '\nsend_webhook "$([[ $OPENCLAW_FOUND -eq 1 ]] && echo "detected" || echo "clean")" "$DETAILS"' : ''}
|
|
104
|
+
|
|
105
|
+
exit $OPENCLAW_FOUND
|
|
106
|
+
`;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Generate detection PowerShell script for Windows.
|
|
110
|
+
*/
|
|
111
|
+
function generateDetectPowerShellScript(webhookUrl, webhookToken) {
|
|
112
|
+
const webhookSection = webhookUrl
|
|
113
|
+
? `
|
|
114
|
+
# Webhook configuration
|
|
115
|
+
$WebhookUrl = "${webhookUrl}"
|
|
116
|
+
${webhookToken ? `$WebhookToken = "${webhookToken}"` : ''}
|
|
117
|
+
|
|
118
|
+
function Send-Webhook {
|
|
119
|
+
param([string]$Status, [string]$Details)
|
|
120
|
+
$payload = @{
|
|
121
|
+
event = "openclaw.detection"
|
|
122
|
+
status = $Status
|
|
123
|
+
hostname = $env:COMPUTERNAME
|
|
124
|
+
details = $Details
|
|
125
|
+
} | ConvertTo-Json
|
|
126
|
+
|
|
127
|
+
try {
|
|
128
|
+
$headers = @{ "Content-Type" = "application/json" }
|
|
129
|
+
${webhookToken ? '$headers["Authorization"] = "Bearer $WebhookToken"' : ''}
|
|
130
|
+
Invoke-RestMethod -Uri $WebhookUrl -Method Post -Headers $headers -Body $payload -ErrorAction SilentlyContinue
|
|
131
|
+
} catch {}
|
|
132
|
+
}
|
|
133
|
+
`
|
|
134
|
+
: '';
|
|
135
|
+
return `# Nox OpenClaw Detection Script (PowerShell)
|
|
136
|
+
# Generated by nox-openclaw-detector
|
|
137
|
+
# https://nox.security
|
|
138
|
+
|
|
139
|
+
$ErrorActionPreference = "SilentlyContinue"
|
|
140
|
+
$OpenClawFound = $false
|
|
141
|
+
$Details = @()
|
|
142
|
+
${webhookSection}
|
|
143
|
+
# Check common installation paths
|
|
144
|
+
$CliPaths = @(
|
|
145
|
+
"$env:LOCALAPPDATA\\Programs\\openclaw\\openclaw.exe",
|
|
146
|
+
"$env:ProgramFiles\\OpenClaw\\openclaw.exe",
|
|
147
|
+
"$env:ProgramFiles(x86)\\OpenClaw\\openclaw.exe"
|
|
148
|
+
)
|
|
149
|
+
|
|
150
|
+
foreach ($path in $CliPaths) {
|
|
151
|
+
if (Test-Path $path) {
|
|
152
|
+
$OpenClawFound = $true
|
|
153
|
+
$Details += "CLI found at $path"
|
|
154
|
+
break
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
# Check config directory
|
|
159
|
+
$ConfigPaths = @(
|
|
160
|
+
"$env:USERPROFILE\\.openclaw",
|
|
161
|
+
"$env:APPDATA\\OpenClaw"
|
|
162
|
+
)
|
|
163
|
+
|
|
164
|
+
foreach ($path in $ConfigPaths) {
|
|
165
|
+
if (Test-Path $path) {
|
|
166
|
+
$OpenClawFound = $true
|
|
167
|
+
$Details += "Config directory found at $path"
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
# Check running processes
|
|
172
|
+
$processes = Get-Process -Name "*openclaw*" -ErrorAction SilentlyContinue
|
|
173
|
+
if ($processes) {
|
|
174
|
+
$OpenClawFound = $true
|
|
175
|
+
$Details += "Process running: $($processes.Name -join ', ')"
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
# Check gateway port
|
|
179
|
+
$portCheck = Test-NetConnection -ComputerName localhost -Port 18789 -WarningAction SilentlyContinue -ErrorAction SilentlyContinue
|
|
180
|
+
if ($portCheck.TcpTestSucceeded) {
|
|
181
|
+
$OpenClawFound = $true
|
|
182
|
+
$Details += "Gateway port 18789 listening"
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
# Check Windows service
|
|
186
|
+
$service = Get-Service -Name "*openclaw*" -ErrorAction SilentlyContinue
|
|
187
|
+
if ($service) {
|
|
188
|
+
$OpenClawFound = $true
|
|
189
|
+
$Details += "Service found: $($service.Name) ($($service.Status))"
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
$DetailsString = $Details -join "; "
|
|
193
|
+
${webhookUrl ? '\nSend-Webhook -Status $(if ($OpenClawFound) { "detected" } else { "clean" }) -Details $DetailsString' : ''}
|
|
194
|
+
|
|
195
|
+
if ($OpenClawFound) {
|
|
196
|
+
Write-Host "OpenClaw DETECTED: $DetailsString"
|
|
197
|
+
exit 1
|
|
198
|
+
} else {
|
|
199
|
+
Write-Host "OpenClaw not detected"
|
|
200
|
+
exit 0
|
|
201
|
+
}
|
|
202
|
+
`;
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Generate purge shell script for Unix-like systems.
|
|
206
|
+
*/
|
|
207
|
+
function generatePurgeShellScript(webhookUrl, webhookToken) {
|
|
208
|
+
const webhookSection = webhookUrl
|
|
209
|
+
? `
|
|
210
|
+
# Webhook configuration
|
|
211
|
+
WEBHOOK_URL="${webhookUrl}"
|
|
212
|
+
${webhookToken ? `WEBHOOK_TOKEN="${webhookToken}"` : ''}
|
|
213
|
+
|
|
214
|
+
send_webhook() {
|
|
215
|
+
local status="$1"
|
|
216
|
+
local details="$2"
|
|
217
|
+
local payload="{\\"event\\":\\"openclaw.purge\\",\\"status\\":\\"$status\\",\\"hostname\\":\\"$(hostname)\\",\\"details\\":\\"$details\\"}"
|
|
218
|
+
|
|
219
|
+
curl -s -X POST "$WEBHOOK_URL" \\
|
|
220
|
+
-H "Content-Type: application/json" \\
|
|
221
|
+
${webhookToken ? '-H "Authorization: Bearer $WEBHOOK_TOKEN"' : ''} \\
|
|
222
|
+
-d "$payload" > /dev/null 2>&1 || true
|
|
223
|
+
}
|
|
224
|
+
`
|
|
225
|
+
: '';
|
|
226
|
+
return `#!/bin/bash
|
|
227
|
+
# Nox OpenClaw Purge Script
|
|
228
|
+
# Generated by nox-openclaw-detector
|
|
229
|
+
# https://nox.security
|
|
230
|
+
#
|
|
231
|
+
# WARNING: This script will remove OpenClaw installations!
|
|
232
|
+
# Run with sudo for full purge capabilities.
|
|
233
|
+
|
|
234
|
+
set -euo pipefail
|
|
235
|
+
|
|
236
|
+
PURGE_RESULTS=""
|
|
237
|
+
${webhookSection}
|
|
238
|
+
log_action() {
|
|
239
|
+
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1"
|
|
240
|
+
PURGE_RESULTS="$PURGE_RESULTS; $1"
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
# Check if running as root
|
|
244
|
+
if [[ $EUID -ne 0 ]]; then
|
|
245
|
+
echo "Warning: Not running as root. Some actions may fail."
|
|
246
|
+
fi
|
|
247
|
+
|
|
248
|
+
# Kill running processes
|
|
249
|
+
log_action "Killing OpenClaw processes..."
|
|
250
|
+
pkill -9 -f "openclaw" 2>/dev/null || log_action "No processes to kill"
|
|
251
|
+
|
|
252
|
+
# Stop and disable launchd service (macOS)
|
|
253
|
+
if [[ "$(uname)" == "Darwin" ]]; then
|
|
254
|
+
for plist in ~/Library/LaunchAgents/bot.molt.* /Library/LaunchAgents/bot.molt.* /Library/LaunchDaemons/bot.molt.*; do
|
|
255
|
+
if [[ -f "$plist" ]]; then
|
|
256
|
+
launchctl unload "$plist" 2>/dev/null || true
|
|
257
|
+
rm -f "$plist"
|
|
258
|
+
log_action "Removed launchd plist: $plist"
|
|
259
|
+
fi
|
|
260
|
+
done
|
|
261
|
+
fi
|
|
262
|
+
|
|
263
|
+
# Stop and disable systemd service (Linux)
|
|
264
|
+
if command -v systemctl &>/dev/null; then
|
|
265
|
+
systemctl stop openclaw.service 2>/dev/null || true
|
|
266
|
+
systemctl disable openclaw.service 2>/dev/null || true
|
|
267
|
+
rm -f /etc/systemd/system/openclaw.service 2>/dev/null || true
|
|
268
|
+
systemctl daemon-reload 2>/dev/null || true
|
|
269
|
+
log_action "Stopped and disabled systemd service"
|
|
270
|
+
fi
|
|
271
|
+
|
|
272
|
+
# Remove CLI binary
|
|
273
|
+
for cli_path in /usr/local/bin/openclaw /opt/homebrew/bin/openclaw /usr/bin/openclaw; do
|
|
274
|
+
if [[ -f "$cli_path" ]]; then
|
|
275
|
+
rm -f "$cli_path"
|
|
276
|
+
log_action "Removed CLI: $cli_path"
|
|
277
|
+
fi
|
|
278
|
+
done
|
|
279
|
+
|
|
280
|
+
# Remove macOS app bundle
|
|
281
|
+
if [[ -d "/Applications/OpenClaw.app" ]]; then
|
|
282
|
+
rm -rf "/Applications/OpenClaw.app"
|
|
283
|
+
log_action "Removed app bundle: /Applications/OpenClaw.app"
|
|
284
|
+
fi
|
|
285
|
+
|
|
286
|
+
# Remove config directories
|
|
287
|
+
for config_dir in ~/.openclaw /Users/*/.openclaw; do
|
|
288
|
+
if [[ -d "$config_dir" ]]; then
|
|
289
|
+
rm -rf "$config_dir"
|
|
290
|
+
log_action "Removed config: $config_dir"
|
|
291
|
+
fi
|
|
292
|
+
done
|
|
293
|
+
|
|
294
|
+
# Remove Docker containers and images
|
|
295
|
+
if command -v docker &>/dev/null; then
|
|
296
|
+
docker ps -a --filter "name=openclaw" --format "{{.ID}}" | xargs -r docker rm -f 2>/dev/null || true
|
|
297
|
+
docker images --filter "reference=*openclaw*" --format "{{.ID}}" | xargs -r docker rmi -f 2>/dev/null || true
|
|
298
|
+
log_action "Cleaned Docker artifacts"
|
|
299
|
+
fi
|
|
300
|
+
|
|
301
|
+
log_action "Purge complete"
|
|
302
|
+
${webhookUrl ? '\nsend_webhook "purged" "$PURGE_RESULTS"' : ''}
|
|
303
|
+
|
|
304
|
+
echo "Purge complete. Results: $PURGE_RESULTS"
|
|
305
|
+
exit 0
|
|
306
|
+
`;
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* Generate purge PowerShell script for Windows.
|
|
310
|
+
*/
|
|
311
|
+
function generatePurgePowerShellScript(webhookUrl, webhookToken) {
|
|
312
|
+
const webhookSection = webhookUrl
|
|
313
|
+
? `
|
|
314
|
+
# Webhook configuration
|
|
315
|
+
$WebhookUrl = "${webhookUrl}"
|
|
316
|
+
${webhookToken ? `$WebhookToken = "${webhookToken}"` : ''}
|
|
317
|
+
|
|
318
|
+
function Send-Webhook {
|
|
319
|
+
param([string]$Status, [string]$Details)
|
|
320
|
+
$payload = @{
|
|
321
|
+
event = "openclaw.purge"
|
|
322
|
+
status = $Status
|
|
323
|
+
hostname = $env:COMPUTERNAME
|
|
324
|
+
details = $Details
|
|
325
|
+
} | ConvertTo-Json
|
|
326
|
+
|
|
327
|
+
try {
|
|
328
|
+
$headers = @{ "Content-Type" = "application/json" }
|
|
329
|
+
${webhookToken ? '$headers["Authorization"] = "Bearer $WebhookToken"' : ''}
|
|
330
|
+
Invoke-RestMethod -Uri $WebhookUrl -Method Post -Headers $headers -Body $payload -ErrorAction SilentlyContinue
|
|
331
|
+
} catch {}
|
|
332
|
+
}
|
|
333
|
+
`
|
|
334
|
+
: '';
|
|
335
|
+
return `# Nox OpenClaw Purge Script (PowerShell)
|
|
336
|
+
# Generated by nox-openclaw-detector
|
|
337
|
+
# https://nox.security
|
|
338
|
+
#
|
|
339
|
+
# WARNING: This script will remove OpenClaw installations!
|
|
340
|
+
# Run as Administrator for full purge capabilities.
|
|
341
|
+
|
|
342
|
+
#Requires -RunAsAdministrator
|
|
343
|
+
|
|
344
|
+
$ErrorActionPreference = "SilentlyContinue"
|
|
345
|
+
$PurgeResults = @()
|
|
346
|
+
${webhookSection}
|
|
347
|
+
function Log-Action {
|
|
348
|
+
param([string]$Message)
|
|
349
|
+
Write-Host "[$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')] $Message"
|
|
350
|
+
$script:PurgeResults += $Message
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
# Kill running processes
|
|
354
|
+
Log-Action "Killing OpenClaw processes..."
|
|
355
|
+
Get-Process -Name "*openclaw*" | Stop-Process -Force -ErrorAction SilentlyContinue
|
|
356
|
+
Log-Action "Processes terminated"
|
|
357
|
+
|
|
358
|
+
# Stop and remove Windows service
|
|
359
|
+
$service = Get-Service -Name "*openclaw*" -ErrorAction SilentlyContinue
|
|
360
|
+
if ($service) {
|
|
361
|
+
Stop-Service -Name $service.Name -Force -ErrorAction SilentlyContinue
|
|
362
|
+
sc.exe delete $service.Name 2>$null
|
|
363
|
+
Log-Action "Stopped and removed service: $($service.Name)"
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
# Remove CLI binaries
|
|
367
|
+
$CliPaths = @(
|
|
368
|
+
"$env:LOCALAPPDATA\\Programs\\openclaw",
|
|
369
|
+
"$env:ProgramFiles\\OpenClaw",
|
|
370
|
+
"$env:ProgramFiles(x86)\\OpenClaw"
|
|
371
|
+
)
|
|
372
|
+
|
|
373
|
+
foreach ($path in $CliPaths) {
|
|
374
|
+
if (Test-Path $path) {
|
|
375
|
+
Remove-Item -Path $path -Recurse -Force -ErrorAction SilentlyContinue
|
|
376
|
+
Log-Action "Removed: $path"
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
# Remove config directories
|
|
381
|
+
$ConfigPaths = @(
|
|
382
|
+
"$env:USERPROFILE\\.openclaw",
|
|
383
|
+
"$env:APPDATA\\OpenClaw"
|
|
384
|
+
)
|
|
385
|
+
|
|
386
|
+
foreach ($path in $ConfigPaths) {
|
|
387
|
+
if (Test-Path $path) {
|
|
388
|
+
Remove-Item -Path $path -Recurse -Force -ErrorAction SilentlyContinue
|
|
389
|
+
Log-Action "Removed config: $path"
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
# Remove scheduled tasks
|
|
394
|
+
Get-ScheduledTask -TaskName "*openclaw*" | Unregister-ScheduledTask -Confirm:$false -ErrorAction SilentlyContinue
|
|
395
|
+
Log-Action "Removed scheduled tasks"
|
|
396
|
+
|
|
397
|
+
# Clean Docker (if installed)
|
|
398
|
+
if (Get-Command docker -ErrorAction SilentlyContinue) {
|
|
399
|
+
docker ps -a --filter "name=openclaw" --format "{{.ID}}" | ForEach-Object { docker rm -f $_ 2>$null }
|
|
400
|
+
docker images --filter "reference=*openclaw*" --format "{{.ID}}" | ForEach-Object { docker rmi -f $_ 2>$null }
|
|
401
|
+
Log-Action "Cleaned Docker artifacts"
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
$ResultsString = $PurgeResults -join "; "
|
|
405
|
+
${webhookUrl ? '\nSend-Webhook -Status "purged" -Details $ResultsString' : ''}
|
|
406
|
+
|
|
407
|
+
Write-Host ""
|
|
408
|
+
Write-Host "Purge complete. Results: $ResultsString"
|
|
409
|
+
exit 0
|
|
410
|
+
`;
|
|
411
|
+
}
|
|
412
|
+
/**
|
|
413
|
+
* Generate scripts for the specified MDM platform.
|
|
414
|
+
*/
|
|
415
|
+
function generateScripts(platform, mode, webhookUrl, webhookToken) {
|
|
416
|
+
const scripts = [];
|
|
417
|
+
if (mode === 'detect') {
|
|
418
|
+
if (platform === 'intune') {
|
|
419
|
+
// Intune primarily uses PowerShell
|
|
420
|
+
scripts.push({
|
|
421
|
+
filename: 'nox-scan.ps1',
|
|
422
|
+
content: generateDetectPowerShellScript(webhookUrl, webhookToken),
|
|
423
|
+
description: 'PowerShell detection script for Microsoft Intune',
|
|
424
|
+
});
|
|
425
|
+
}
|
|
426
|
+
else {
|
|
427
|
+
// Jamf and JumpCloud use shell scripts (and optionally PowerShell for Windows)
|
|
428
|
+
scripts.push({
|
|
429
|
+
filename: 'nox-scan.sh',
|
|
430
|
+
content: generateDetectShellScript(webhookUrl, webhookToken),
|
|
431
|
+
description: 'Shell detection script for macOS/Linux',
|
|
432
|
+
});
|
|
433
|
+
scripts.push({
|
|
434
|
+
filename: 'nox-scan.ps1',
|
|
435
|
+
content: generateDetectPowerShellScript(webhookUrl, webhookToken),
|
|
436
|
+
description: 'PowerShell detection script for Windows',
|
|
437
|
+
});
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
else {
|
|
441
|
+
// Purge mode
|
|
442
|
+
if (platform === 'intune') {
|
|
443
|
+
scripts.push({
|
|
444
|
+
filename: 'nox-purge.ps1',
|
|
445
|
+
content: generatePurgePowerShellScript(webhookUrl, webhookToken),
|
|
446
|
+
description: 'PowerShell purge script for Microsoft Intune',
|
|
447
|
+
});
|
|
448
|
+
}
|
|
449
|
+
else {
|
|
450
|
+
scripts.push({
|
|
451
|
+
filename: 'nox-purge.sh',
|
|
452
|
+
content: generatePurgeShellScript(webhookUrl, webhookToken),
|
|
453
|
+
description: 'Shell purge script for macOS/Linux',
|
|
454
|
+
});
|
|
455
|
+
scripts.push({
|
|
456
|
+
filename: 'nox-purge.ps1',
|
|
457
|
+
content: generatePurgePowerShellScript(webhookUrl, webhookToken),
|
|
458
|
+
description: 'PowerShell purge script for Windows',
|
|
459
|
+
});
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
return scripts;
|
|
463
|
+
}
|
|
464
|
+
/**
|
|
465
|
+
* Generate README for the exported scripts.
|
|
466
|
+
*/
|
|
467
|
+
function generateReadme(platform, mode) {
|
|
468
|
+
const platformName = platform === 'jamf'
|
|
469
|
+
? 'Jamf Pro'
|
|
470
|
+
: platform === 'intune'
|
|
471
|
+
? 'Microsoft Intune'
|
|
472
|
+
: 'JumpCloud';
|
|
473
|
+
const modeDescription = mode === 'detect' ? 'detection (scan)' : 'removal (purge)';
|
|
474
|
+
return `# Nox OpenClaw ${mode === 'detect' ? 'Scan' : 'Purge'} Scripts
|
|
475
|
+
|
|
476
|
+
Generated by nox-openclaw-detector for ${platformName}.
|
|
477
|
+
|
|
478
|
+
## Overview
|
|
479
|
+
|
|
480
|
+
These scripts provide OpenClaw ${modeDescription} capabilities for deployment via ${platformName}.
|
|
481
|
+
|
|
482
|
+
## Exit Codes
|
|
483
|
+
|
|
484
|
+
| Code | Meaning |
|
|
485
|
+
|------|---------|
|
|
486
|
+
| 0 | ${mode === 'detect' ? 'OpenClaw not detected (clean)' : 'Purge successful'} |
|
|
487
|
+
| 1 | ${mode === 'detect' ? 'OpenClaw detected' : 'Purge failed'} |
|
|
488
|
+
| 2 | Script error |
|
|
489
|
+
|
|
490
|
+
## Deployment Instructions
|
|
491
|
+
|
|
492
|
+
${platform === 'jamf' ? `
|
|
493
|
+
### Jamf Pro
|
|
494
|
+
|
|
495
|
+
1. Navigate to **Settings > Computer Management > Scripts**
|
|
496
|
+
2. Click **New** and paste the script content
|
|
497
|
+
3. Set appropriate **Priority** and **Parameter Labels**
|
|
498
|
+
4. Create a **Policy** to deploy the script:
|
|
499
|
+
- Trigger: Recurring Check-in (for ongoing monitoring)
|
|
500
|
+
- Execution Frequency: Once per day (recommended)
|
|
501
|
+
- Scope: Target computers/groups
|
|
502
|
+
` : ''}
|
|
503
|
+
|
|
504
|
+
${platform === 'intune' ? `
|
|
505
|
+
### Microsoft Intune
|
|
506
|
+
|
|
507
|
+
1. Navigate to **Devices > Scripts**
|
|
508
|
+
2. Click **Add > Windows 10 and later**
|
|
509
|
+
3. Upload the PowerShell script
|
|
510
|
+
4. Configure script settings:
|
|
511
|
+
- Run script in 64-bit PowerShell: Yes
|
|
512
|
+
- Run script as administrator: Yes (for purge)
|
|
513
|
+
5. Assign to device groups
|
|
514
|
+
` : ''}
|
|
515
|
+
|
|
516
|
+
${platform === 'jumpcloud' ? `
|
|
517
|
+
### JumpCloud
|
|
518
|
+
|
|
519
|
+
1. Navigate to **Device Management > Commands**
|
|
520
|
+
2. Click **+** to create a new command
|
|
521
|
+
3. Select the appropriate OS type
|
|
522
|
+
4. Paste the script content
|
|
523
|
+
5. Configure:
|
|
524
|
+
- Command Type: Script
|
|
525
|
+
- Run As: Root (for purge)
|
|
526
|
+
- Timeout: 120 seconds (recommended)
|
|
527
|
+
6. Assign to device groups or systems
|
|
528
|
+
` : ''}
|
|
529
|
+
|
|
530
|
+
## Webhook Integration
|
|
531
|
+
|
|
532
|
+
The scripts support webhook notifications for SIEM/alerting integration.
|
|
533
|
+
Configure the webhook URL and token when generating scripts with:
|
|
534
|
+
|
|
535
|
+
\`\`\`bash
|
|
536
|
+
nox export --platform ${platform} --mode ${mode} --webhook https://your-siem.example.com/webhook --webhook-token YOUR_TOKEN
|
|
537
|
+
\`\`\`
|
|
538
|
+
|
|
539
|
+
## Support
|
|
540
|
+
|
|
541
|
+
For issues or questions, contact support@nox.security
|
|
542
|
+
`;
|
|
543
|
+
}
|
|
544
|
+
/**
|
|
545
|
+
* Export command handler.
|
|
546
|
+
*/
|
|
547
|
+
export async function exportCommand(options) {
|
|
548
|
+
// Handle debug mode
|
|
549
|
+
const parentOpts = options.parent?.opts() ?? {};
|
|
550
|
+
if (parentOpts.debug) {
|
|
551
|
+
setLogLevel('debug');
|
|
552
|
+
}
|
|
553
|
+
printBanner();
|
|
554
|
+
// Validate platform
|
|
555
|
+
if (!validatePlatform(options.platform)) {
|
|
556
|
+
console.log(chalk.red(`Invalid platform: ${options.platform}`));
|
|
557
|
+
console.log();
|
|
558
|
+
console.log('Supported platforms:');
|
|
559
|
+
console.log(' jamf - Jamf Pro');
|
|
560
|
+
console.log(' intune - Microsoft Intune');
|
|
561
|
+
console.log(' jumpcloud - JumpCloud');
|
|
562
|
+
process.exit(EXIT_CODES.ERROR);
|
|
563
|
+
}
|
|
564
|
+
// Validate mode
|
|
565
|
+
if (!validateMode(options.mode)) {
|
|
566
|
+
console.log(chalk.red(`Invalid mode: ${options.mode}`));
|
|
567
|
+
console.log();
|
|
568
|
+
console.log('Supported modes:');
|
|
569
|
+
console.log(' detect - Scan/detection scripts');
|
|
570
|
+
console.log(' purge - Removal/purge scripts');
|
|
571
|
+
process.exit(EXIT_CODES.ERROR);
|
|
572
|
+
}
|
|
573
|
+
const platform = options.platform.toLowerCase();
|
|
574
|
+
const mode = options.mode.toLowerCase();
|
|
575
|
+
const outputDir = options.output;
|
|
576
|
+
const spinner = ora(`Generating ${mode} scripts for ${platform}...`).start();
|
|
577
|
+
try {
|
|
578
|
+
// Generate scripts
|
|
579
|
+
const scripts = generateScripts(platform, mode, options.webhook, options.webhookToken);
|
|
580
|
+
const readme = generateReadme(platform, mode);
|
|
581
|
+
// Create output directory
|
|
582
|
+
await fs.mkdir(outputDir, { recursive: true });
|
|
583
|
+
// Write scripts
|
|
584
|
+
for (const script of scripts) {
|
|
585
|
+
const filePath = path.join(outputDir, script.filename);
|
|
586
|
+
await fs.writeFile(filePath, script.content, 'utf-8');
|
|
587
|
+
// Make shell scripts executable
|
|
588
|
+
if (script.filename.endsWith('.sh')) {
|
|
589
|
+
await fs.chmod(filePath, 0o755);
|
|
590
|
+
}
|
|
591
|
+
}
|
|
592
|
+
// Write README
|
|
593
|
+
await fs.writeFile(path.join(outputDir, 'README.md'), readme, 'utf-8');
|
|
594
|
+
spinner.succeed('Scripts generated successfully');
|
|
595
|
+
// Display results
|
|
596
|
+
console.log();
|
|
597
|
+
console.log(chalk.bold('Generated files:'));
|
|
598
|
+
console.log();
|
|
599
|
+
for (const script of scripts) {
|
|
600
|
+
console.log(` ${chalk.green('●')} ${path.join(outputDir, script.filename)}`);
|
|
601
|
+
console.log(` ${chalk.dim(script.description)}`);
|
|
602
|
+
}
|
|
603
|
+
console.log(` ${chalk.blue('●')} ${path.join(outputDir, 'README.md')}`);
|
|
604
|
+
console.log(` ${chalk.dim('Deployment instructions')}`);
|
|
605
|
+
console.log();
|
|
606
|
+
printStatus(`Scripts exported to ${outputDir}`, 'success');
|
|
607
|
+
process.exit(EXIT_CODES.CLEAN);
|
|
608
|
+
}
|
|
609
|
+
catch (error) {
|
|
610
|
+
spinner.fail('Failed to generate scripts');
|
|
611
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
612
|
+
logger.error(`Export error: ${message}`);
|
|
613
|
+
process.exit(EXIT_CODES.ERROR);
|
|
614
|
+
}
|
|
615
|
+
}
|
|
616
|
+
//# sourceMappingURL=export.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export.js","sourceRoot":"","sources":["../../src/commands/export.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Command exports for Nox OpenClaw Detector CLI.
|
|
3
|
+
*/
|
|
4
|
+
export { scanCommand } from './scan.js';
|
|
5
|
+
export { purgeCommand } from './purge.js';
|
|
6
|
+
export { isolateApplyCommand, isolateRevertCommand, isolateListCommand, } from './isolate.js';
|
|
7
|
+
export { exportCommand } from './export.js';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Command exports for Nox OpenClaw Detector CLI.
|
|
3
|
+
*/
|
|
4
|
+
export { scanCommand } from './scan.js';
|
|
5
|
+
export { purgeCommand } from './purge.js';
|
|
6
|
+
export { isolateApplyCommand, isolateRevertCommand, isolateListCommand, } from './isolate.js';
|
|
7
|
+
export { exportCommand } from './export.js';
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Isolate command - isolate device from OpenClaw.
|
|
3
|
+
*/
|
|
4
|
+
interface BaseCommandOptions {
|
|
5
|
+
json?: boolean;
|
|
6
|
+
quiet?: boolean;
|
|
7
|
+
force?: boolean;
|
|
8
|
+
parent?: {
|
|
9
|
+
parent?: {
|
|
10
|
+
opts(): {
|
|
11
|
+
debug?: boolean;
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
interface IsolateApplyOptions extends BaseCommandOptions {
|
|
17
|
+
port?: number;
|
|
18
|
+
dryRun?: boolean;
|
|
19
|
+
webhook?: string;
|
|
20
|
+
webhookToken?: string;
|
|
21
|
+
}
|
|
22
|
+
export declare function isolateApplyCommand(options: IsolateApplyOptions): Promise<void>;
|
|
23
|
+
export declare function isolateListCommand(options: BaseCommandOptions): Promise<void>;
|
|
24
|
+
interface IsolateRevertOptions extends BaseCommandOptions {
|
|
25
|
+
port?: number;
|
|
26
|
+
dryRun?: boolean;
|
|
27
|
+
}
|
|
28
|
+
export declare function isolateRevertCommand(options: IsolateRevertOptions): Promise<void>;
|
|
29
|
+
export {};
|
|
30
|
+
//# sourceMappingURL=isolate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isolate.d.ts","sourceRoot":"","sources":["../../src/commands/isolate.ts"],"names":[],"mappings":"AAAA;;GAEG;AA4BH,UAAU,kBAAkB;IAC1B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE;QACP,MAAM,CAAC,EAAE;YACP,IAAI,IAAI;gBAAE,KAAK,CAAC,EAAE,OAAO,CAAA;aAAE,CAAC;SAC7B,CAAC;KACH,CAAC;CACH;AAED,UAAU,mBAAoB,SAAQ,kBAAkB;IACtD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAsED,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiLrF;AAED,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmCnF;AA6FD,UAAU,oBAAqB,SAAQ,kBAAkB;IACvD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAiCD,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CA6LvF"}
|