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,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Config and state directory detection for OpenClaw/Clawdbot.
|
|
3
|
+
* Uses configurable patterns to detect various AI agent installations.
|
|
4
|
+
*/
|
|
5
|
+
import type { Platform } from '../platform/index.js';
|
|
6
|
+
import type { StateDirDetection, ConfigDetection } from '../types/detection.js';
|
|
7
|
+
/**
|
|
8
|
+
* Detect the state directory for AI agents.
|
|
9
|
+
* Checks all configured state directory patterns.
|
|
10
|
+
*/
|
|
11
|
+
export declare function detectStateDir(platform: Platform, options?: {
|
|
12
|
+
allUsers?: boolean;
|
|
13
|
+
}): Promise<StateDirDetection>;
|
|
14
|
+
/**
|
|
15
|
+
* Detect and parse config file for AI agents.
|
|
16
|
+
* Checks all configured config file patterns.
|
|
17
|
+
*/
|
|
18
|
+
export declare function detectConfig(platform: Platform, options?: {
|
|
19
|
+
allUsers?: boolean;
|
|
20
|
+
}): Promise<ConfigDetection>;
|
|
21
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/detector/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAyB,MAAM,uBAAuB,CAAC;AAiRvG;;;GAGG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,QAAQ,EAClB,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAO,GACnC,OAAO,CAAC,iBAAiB,CAAC,CA6C5B;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAChC,QAAQ,EAAE,QAAQ,EAClB,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAO,GACnC,OAAO,CAAC,eAAe,CAAC,CAiD1B"}
|
|
@@ -0,0 +1,337 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Config and state directory detection for OpenClaw/Clawdbot.
|
|
3
|
+
* Uses configurable patterns to detect various AI agent installations.
|
|
4
|
+
*/
|
|
5
|
+
import * as os from 'node:os';
|
|
6
|
+
import * as path from 'node:path';
|
|
7
|
+
import { readFile } from 'node:fs/promises';
|
|
8
|
+
import { pathExists } from '../utils/fs.js';
|
|
9
|
+
import { logger } from '../utils/logger.js';
|
|
10
|
+
import { getDetectionConfig } from './detection-config.js';
|
|
11
|
+
/**
|
|
12
|
+
* Get the home directory for a user.
|
|
13
|
+
*/
|
|
14
|
+
function getHomeDir(user) {
|
|
15
|
+
if (user === os.userInfo().username) {
|
|
16
|
+
return os.homedir();
|
|
17
|
+
}
|
|
18
|
+
// Platform-specific home directory paths
|
|
19
|
+
if (process.platform === 'darwin') {
|
|
20
|
+
return user === 'root' ? '/var/root' : `/Users/${user}`;
|
|
21
|
+
}
|
|
22
|
+
else if (process.platform === 'win32') {
|
|
23
|
+
return `C:\\Users\\${user}`;
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
return user === 'root' ? '/root' : `/home/${user}`;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Find a value in a nested object using dot-notation path.
|
|
31
|
+
*/
|
|
32
|
+
function getNestedValue(obj, dotPath) {
|
|
33
|
+
const parts = dotPath.split('.');
|
|
34
|
+
let current = obj;
|
|
35
|
+
for (const part of parts) {
|
|
36
|
+
if (current && typeof current === 'object' && part in current) {
|
|
37
|
+
current = current[part];
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return current;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Find first matching value from multiple paths.
|
|
47
|
+
*/
|
|
48
|
+
function findFirstValue(obj, paths) {
|
|
49
|
+
for (const p of paths) {
|
|
50
|
+
const value = getNestedValue(obj, p);
|
|
51
|
+
if (value !== undefined) {
|
|
52
|
+
return value;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return undefined;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Check if a value represents an "enabled" state.
|
|
59
|
+
*/
|
|
60
|
+
function isEnabled(value) {
|
|
61
|
+
if (value === true || value === 'true' || value === 1 || value === '1') {
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
if (value && typeof value === 'object') {
|
|
65
|
+
const v = value;
|
|
66
|
+
return v.enabled === true || v.active === true || v.configured === true;
|
|
67
|
+
}
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Infer AI provider from model name using configured patterns.
|
|
72
|
+
*/
|
|
73
|
+
function inferProvider(model, config) {
|
|
74
|
+
const modelLower = model.toLowerCase();
|
|
75
|
+
// First check if model is in "provider/model" format
|
|
76
|
+
if (model.includes('/')) {
|
|
77
|
+
const [provider] = model.split('/');
|
|
78
|
+
return provider.toLowerCase();
|
|
79
|
+
}
|
|
80
|
+
// Try to match against known provider patterns
|
|
81
|
+
for (const pattern of config.providerPatterns) {
|
|
82
|
+
for (const match of pattern.modelPatterns) {
|
|
83
|
+
if (modelLower.includes(match.toLowerCase())) {
|
|
84
|
+
return pattern.provider;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return undefined;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Extract enabled channels from config using configured patterns.
|
|
92
|
+
*/
|
|
93
|
+
function extractChannels(configObj, detectionConfig) {
|
|
94
|
+
const known = {};
|
|
95
|
+
const other = [];
|
|
96
|
+
// Find the channels object using configured paths
|
|
97
|
+
const channelsObj = findFirstValue(configObj, detectionConfig.extractionPatterns.channels);
|
|
98
|
+
if (!channelsObj || typeof channelsObj !== 'object') {
|
|
99
|
+
return { known, other };
|
|
100
|
+
}
|
|
101
|
+
// Build a lookup map for known channels (including aliases)
|
|
102
|
+
const channelLookup = new Map();
|
|
103
|
+
for (const pattern of detectionConfig.channelPatterns) {
|
|
104
|
+
channelLookup.set(pattern.id.toLowerCase(), pattern.id);
|
|
105
|
+
if (pattern.aliases) {
|
|
106
|
+
for (const alias of pattern.aliases) {
|
|
107
|
+
channelLookup.set(alias.toLowerCase(), pattern.id);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
// Check each key in the channels config
|
|
112
|
+
for (const key of Object.keys(channelsObj)) {
|
|
113
|
+
const channelConfig = channelsObj[key];
|
|
114
|
+
if (!isEnabled(channelConfig)) {
|
|
115
|
+
continue;
|
|
116
|
+
}
|
|
117
|
+
// Check if this is a known channel
|
|
118
|
+
const knownId = channelLookup.get(key.toLowerCase());
|
|
119
|
+
if (knownId) {
|
|
120
|
+
known[knownId] = true;
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
// Unknown channel - add to other
|
|
124
|
+
other.push(key);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return { known, other };
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Deep clone an object for sanitization.
|
|
131
|
+
*/
|
|
132
|
+
function deepClone(obj) {
|
|
133
|
+
if (obj === null || typeof obj !== 'object') {
|
|
134
|
+
return obj;
|
|
135
|
+
}
|
|
136
|
+
if (Array.isArray(obj)) {
|
|
137
|
+
return obj.map(deepClone);
|
|
138
|
+
}
|
|
139
|
+
const cloned = {};
|
|
140
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
141
|
+
cloned[key] = deepClone(value);
|
|
142
|
+
}
|
|
143
|
+
return cloned;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Redact sensitive fields from config object.
|
|
147
|
+
*/
|
|
148
|
+
function sanitizeConfig(config, sensitiveFields) {
|
|
149
|
+
const sanitized = deepClone(config);
|
|
150
|
+
// Build a set of field names to redact (lowercase for case-insensitive matching)
|
|
151
|
+
const fieldsToRedact = new Set(sensitiveFields.map(f => f.field.toLowerCase()));
|
|
152
|
+
// Recursive function to redact sensitive fields
|
|
153
|
+
function redactSensitive(obj, parentKey) {
|
|
154
|
+
for (const key of Object.keys(obj)) {
|
|
155
|
+
const value = obj[key];
|
|
156
|
+
const keyLower = key.toLowerCase();
|
|
157
|
+
// Check if this field should be redacted
|
|
158
|
+
if (fieldsToRedact.has(keyLower)) {
|
|
159
|
+
// Check parent constraint if specified
|
|
160
|
+
const pattern = sensitiveFields.find(f => f.field.toLowerCase() === keyLower);
|
|
161
|
+
if (!pattern?.parent || pattern.parent === parentKey) {
|
|
162
|
+
obj[key] = '[REDACTED]';
|
|
163
|
+
continue;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
// Recurse into nested objects
|
|
167
|
+
if (value && typeof value === 'object' && !Array.isArray(value)) {
|
|
168
|
+
redactSensitive(value, key);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
redactSensitive(sanitized);
|
|
173
|
+
return sanitized;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Parse config file and extract relevant details.
|
|
177
|
+
*/
|
|
178
|
+
async function parseConfigFile(configPath, detectionConfig) {
|
|
179
|
+
try {
|
|
180
|
+
const content = await readFile(configPath, 'utf8');
|
|
181
|
+
const config = JSON.parse(content);
|
|
182
|
+
const patterns = detectionConfig.extractionPatterns;
|
|
183
|
+
const details = {};
|
|
184
|
+
// Extract model
|
|
185
|
+
const modelValue = findFirstValue(config, patterns.model);
|
|
186
|
+
if (typeof modelValue === 'string') {
|
|
187
|
+
details.model = modelValue;
|
|
188
|
+
}
|
|
189
|
+
// Extract/infer API provider
|
|
190
|
+
if (details.model) {
|
|
191
|
+
details.apiProvider = inferProvider(details.model, detectionConfig);
|
|
192
|
+
}
|
|
193
|
+
if (!details.apiProvider) {
|
|
194
|
+
const providerValue = findFirstValue(config, patterns.apiProvider);
|
|
195
|
+
if (typeof providerValue === 'string') {
|
|
196
|
+
details.apiProvider = providerValue;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
// Extract autonomous mode
|
|
200
|
+
const autonomousValue = findFirstValue(config, patterns.autonomousMode);
|
|
201
|
+
const maxConcurrentValue = findFirstValue(config, patterns.maxConcurrent);
|
|
202
|
+
details.autonomousMode = isEnabled(autonomousValue) ||
|
|
203
|
+
(typeof maxConcurrentValue === 'number' && maxConcurrentValue > 0);
|
|
204
|
+
// Extract communication channels
|
|
205
|
+
const { known, other } = extractChannels(config, detectionConfig);
|
|
206
|
+
details.channels = known;
|
|
207
|
+
if (other.length > 0) {
|
|
208
|
+
details.channels.other = other;
|
|
209
|
+
}
|
|
210
|
+
// Extract permissions
|
|
211
|
+
const permsValue = findFirstValue(config, patterns.permissions);
|
|
212
|
+
if (Array.isArray(permsValue)) {
|
|
213
|
+
details.permissions = permsValue.filter(p => typeof p === 'string');
|
|
214
|
+
}
|
|
215
|
+
else if (permsValue && typeof permsValue === 'object') {
|
|
216
|
+
details.permissions = Object.entries(permsValue)
|
|
217
|
+
.filter(([_, enabled]) => enabled)
|
|
218
|
+
.map(([name]) => name);
|
|
219
|
+
}
|
|
220
|
+
else if (permsValue === 'auto') {
|
|
221
|
+
details.permissions = ['native-skills (auto)'];
|
|
222
|
+
}
|
|
223
|
+
// Extract workspace and add to permissions
|
|
224
|
+
const workspaceValue = findFirstValue(config, patterns.workspace);
|
|
225
|
+
if (typeof workspaceValue === 'string') {
|
|
226
|
+
details.permissions = details.permissions || [];
|
|
227
|
+
details.permissions.push(`workspace: ${workspaceValue}`);
|
|
228
|
+
}
|
|
229
|
+
// Store sanitized raw config
|
|
230
|
+
details.raw = sanitizeConfig(config, detectionConfig.sensitiveFields);
|
|
231
|
+
logger.debug(`Parsed config: model=${details.model}, provider=${details.apiProvider}, autonomous=${details.autonomousMode}`);
|
|
232
|
+
return details;
|
|
233
|
+
}
|
|
234
|
+
catch (err) {
|
|
235
|
+
logger.debug(`Failed to parse config file: ${err}`);
|
|
236
|
+
return undefined;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Detect the state directory for AI agents.
|
|
241
|
+
* Checks all configured state directory patterns.
|
|
242
|
+
*/
|
|
243
|
+
export async function detectStateDir(platform, options = {}) {
|
|
244
|
+
const config = getDetectionConfig();
|
|
245
|
+
logger.debug('Detecting state directory...');
|
|
246
|
+
// Check current user first
|
|
247
|
+
const currentUser = os.userInfo().username;
|
|
248
|
+
const homeDir = getHomeDir(currentUser);
|
|
249
|
+
for (const pattern of config.stateDirs) {
|
|
250
|
+
const statePath = path.join(homeDir, pattern.name);
|
|
251
|
+
if (await pathExists(statePath)) {
|
|
252
|
+
logger.debug(`Found state directory at ${statePath} (${pattern.description ?? pattern.name})`);
|
|
253
|
+
return {
|
|
254
|
+
found: true,
|
|
255
|
+
path: statePath,
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
// If scanning all users, check each user's directory
|
|
260
|
+
if (options.allUsers) {
|
|
261
|
+
try {
|
|
262
|
+
const users = await platform.getAllUsers();
|
|
263
|
+
for (const user of users) {
|
|
264
|
+
if (user === currentUser)
|
|
265
|
+
continue;
|
|
266
|
+
const userHome = getHomeDir(user);
|
|
267
|
+
for (const pattern of config.stateDirs) {
|
|
268
|
+
const statePath = path.join(userHome, pattern.name);
|
|
269
|
+
if (await pathExists(statePath)) {
|
|
270
|
+
logger.debug(`Found state directory for user ${user} at ${statePath}`);
|
|
271
|
+
return {
|
|
272
|
+
found: true,
|
|
273
|
+
path: statePath,
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
catch (err) {
|
|
280
|
+
logger.debug(`Error scanning all users: ${err}`);
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
logger.debug('State directory not found');
|
|
284
|
+
return { found: false };
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Detect and parse config file for AI agents.
|
|
288
|
+
* Checks all configured config file patterns.
|
|
289
|
+
*/
|
|
290
|
+
export async function detectConfig(platform, options = {}) {
|
|
291
|
+
const config = getDetectionConfig();
|
|
292
|
+
logger.debug('Detecting config file...');
|
|
293
|
+
// Check current user first
|
|
294
|
+
const currentUser = os.userInfo().username;
|
|
295
|
+
const homeDir = getHomeDir(currentUser);
|
|
296
|
+
for (const pattern of config.configFiles) {
|
|
297
|
+
const configPath = path.join(homeDir, pattern.dir, pattern.file);
|
|
298
|
+
if (await pathExists(configPath)) {
|
|
299
|
+
logger.debug(`Found config file at ${configPath} (${pattern.description ?? pattern.file})`);
|
|
300
|
+
const details = await parseConfigFile(configPath, config);
|
|
301
|
+
return {
|
|
302
|
+
found: true,
|
|
303
|
+
path: configPath,
|
|
304
|
+
details,
|
|
305
|
+
};
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
// If scanning all users, check each user's config
|
|
309
|
+
if (options.allUsers) {
|
|
310
|
+
try {
|
|
311
|
+
const users = await platform.getAllUsers();
|
|
312
|
+
for (const user of users) {
|
|
313
|
+
if (user === currentUser)
|
|
314
|
+
continue;
|
|
315
|
+
const userHome = getHomeDir(user);
|
|
316
|
+
for (const pattern of config.configFiles) {
|
|
317
|
+
const configPath = path.join(userHome, pattern.dir, pattern.file);
|
|
318
|
+
if (await pathExists(configPath)) {
|
|
319
|
+
logger.debug(`Found config file for user ${user} at ${configPath}`);
|
|
320
|
+
const details = await parseConfigFile(configPath, config);
|
|
321
|
+
return {
|
|
322
|
+
found: true,
|
|
323
|
+
path: configPath,
|
|
324
|
+
details,
|
|
325
|
+
};
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
catch (err) {
|
|
331
|
+
logger.debug(`Error scanning all users: ${err}`);
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
logger.debug('Config file not found');
|
|
335
|
+
return { found: false };
|
|
336
|
+
}
|
|
337
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/detector/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default detection configuration patterns.
|
|
3
|
+
*
|
|
4
|
+
* This module defines the patterns used to detect AI agent installations.
|
|
5
|
+
* Patterns are checked in order of priority (first match wins).
|
|
6
|
+
*
|
|
7
|
+
* To add support for a new agent variant:
|
|
8
|
+
* 1. Add state directory pattern to `stateDirs`
|
|
9
|
+
* 2. Add config file pattern to `configFiles`
|
|
10
|
+
* 3. Add any new extraction paths to `extractionPatterns`
|
|
11
|
+
* 4. Add provider patterns if using new AI providers
|
|
12
|
+
* 5. Add channel patterns if using new communication channels
|
|
13
|
+
*/
|
|
14
|
+
import type { DetectionConfig } from '../types/config.js';
|
|
15
|
+
/**
|
|
16
|
+
* Default detection configuration.
|
|
17
|
+
* Can be extended or overridden via environment variables or config file.
|
|
18
|
+
*/
|
|
19
|
+
export declare const defaultDetectionConfig: DetectionConfig;
|
|
20
|
+
/**
|
|
21
|
+
* Get the detection configuration.
|
|
22
|
+
*/
|
|
23
|
+
export declare function getDetectionConfig(): DetectionConfig;
|
|
24
|
+
//# sourceMappingURL=detection-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detection-config.d.ts","sourceRoot":"","sources":["../../src/detector/detection-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1D;;;GAGG;AACH,eAAO,MAAM,sBAAsB,EAAE,eAoOpC,CAAC;AAEF;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,eAAe,CAEpD"}
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default detection configuration patterns.
|
|
3
|
+
*
|
|
4
|
+
* This module defines the patterns used to detect AI agent installations.
|
|
5
|
+
* Patterns are checked in order of priority (first match wins).
|
|
6
|
+
*
|
|
7
|
+
* To add support for a new agent variant:
|
|
8
|
+
* 1. Add state directory pattern to `stateDirs`
|
|
9
|
+
* 2. Add config file pattern to `configFiles`
|
|
10
|
+
* 3. Add any new extraction paths to `extractionPatterns`
|
|
11
|
+
* 4. Add provider patterns if using new AI providers
|
|
12
|
+
* 5. Add channel patterns if using new communication channels
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* Default detection configuration.
|
|
16
|
+
* Can be extended or overridden via environment variables or config file.
|
|
17
|
+
*/
|
|
18
|
+
export const defaultDetectionConfig = {
|
|
19
|
+
/**
|
|
20
|
+
* State directory patterns (checked in order).
|
|
21
|
+
* These are directories where the agent stores its state/data.
|
|
22
|
+
*/
|
|
23
|
+
stateDirs: [
|
|
24
|
+
{ name: '.clawdbot', description: 'Clawdbot state directory' },
|
|
25
|
+
{ name: '.moltbot', description: 'Moltbot state directory' },
|
|
26
|
+
{ name: '.openclaw', description: 'OpenClaw state directory' },
|
|
27
|
+
// Add new variants here as they are discovered
|
|
28
|
+
],
|
|
29
|
+
/**
|
|
30
|
+
* Config file patterns (checked in order).
|
|
31
|
+
* Directory is relative to user home, file is the config filename.
|
|
32
|
+
*/
|
|
33
|
+
configFiles: [
|
|
34
|
+
{ dir: '.clawdbot', file: 'clawdbot.json', description: 'Clawdbot config' },
|
|
35
|
+
{ dir: '.moltbot', file: 'moltbot.json', description: 'Moltbot config' },
|
|
36
|
+
{ dir: '.openclaw', file: 'openclaw.json', description: 'OpenClaw config' },
|
|
37
|
+
// Support for alternative config locations
|
|
38
|
+
{ dir: '.clawdbot', file: 'config.json', description: 'Clawdbot alt config' },
|
|
39
|
+
{ dir: '.moltbot', file: 'config.json', description: 'Moltbot alt config' },
|
|
40
|
+
{ dir: '.openclaw', file: 'config.json', description: 'OpenClaw alt config' },
|
|
41
|
+
],
|
|
42
|
+
/**
|
|
43
|
+
* Extraction patterns for config values.
|
|
44
|
+
* Uses dot notation for nested paths. Paths are checked in order.
|
|
45
|
+
*/
|
|
46
|
+
extractionPatterns: {
|
|
47
|
+
model: [
|
|
48
|
+
// Nested agent config structures
|
|
49
|
+
'agents.defaults.model.primary',
|
|
50
|
+
'agents.defaults.model.default',
|
|
51
|
+
'agents.model.primary',
|
|
52
|
+
'agents.model.default',
|
|
53
|
+
'agent.model.primary',
|
|
54
|
+
'agent.model',
|
|
55
|
+
// Direct model config
|
|
56
|
+
'model.primary',
|
|
57
|
+
'model.default',
|
|
58
|
+
'model.name',
|
|
59
|
+
'model',
|
|
60
|
+
// LLM-specific config
|
|
61
|
+
'llm.model',
|
|
62
|
+
'llm.modelId',
|
|
63
|
+
'llm.model_id',
|
|
64
|
+
// AI config section
|
|
65
|
+
'ai.model',
|
|
66
|
+
'ai.modelId',
|
|
67
|
+
// Settings section
|
|
68
|
+
'settings.model',
|
|
69
|
+
'settings.modelId',
|
|
70
|
+
// Flat config
|
|
71
|
+
'modelId',
|
|
72
|
+
'model_id',
|
|
73
|
+
'modelName',
|
|
74
|
+
'model_name',
|
|
75
|
+
],
|
|
76
|
+
apiProvider: [
|
|
77
|
+
// Auth/profile based
|
|
78
|
+
'auth.profiles.default.provider',
|
|
79
|
+
'auth.provider',
|
|
80
|
+
'auth.default.provider',
|
|
81
|
+
// Direct provider config
|
|
82
|
+
'provider',
|
|
83
|
+
'api.provider',
|
|
84
|
+
'api_provider',
|
|
85
|
+
'apiProvider',
|
|
86
|
+
// LLM section
|
|
87
|
+
'llm.provider',
|
|
88
|
+
'llm.api_provider',
|
|
89
|
+
// AI section
|
|
90
|
+
'ai.provider',
|
|
91
|
+
// Settings
|
|
92
|
+
'settings.provider',
|
|
93
|
+
],
|
|
94
|
+
autonomousMode: [
|
|
95
|
+
'autonomous',
|
|
96
|
+
'autonomousMode',
|
|
97
|
+
'autonomous_mode',
|
|
98
|
+
'settings.autonomous',
|
|
99
|
+
'settings.autonomousMode',
|
|
100
|
+
'agent.autonomous',
|
|
101
|
+
'agents.autonomous',
|
|
102
|
+
'mode.autonomous',
|
|
103
|
+
],
|
|
104
|
+
workspace: [
|
|
105
|
+
'agents.defaults.workspace',
|
|
106
|
+
'agents.workspace',
|
|
107
|
+
'agent.workspace',
|
|
108
|
+
'workspace',
|
|
109
|
+
'workdir',
|
|
110
|
+
'workingDirectory',
|
|
111
|
+
'working_directory',
|
|
112
|
+
'settings.workspace',
|
|
113
|
+
],
|
|
114
|
+
channels: [
|
|
115
|
+
'channels',
|
|
116
|
+
'communications',
|
|
117
|
+
'integrations',
|
|
118
|
+
'connectors',
|
|
119
|
+
'messaging',
|
|
120
|
+
'plugins.entries',
|
|
121
|
+
'plugins.channels',
|
|
122
|
+
'extensions',
|
|
123
|
+
],
|
|
124
|
+
permissions: [
|
|
125
|
+
'permissions',
|
|
126
|
+
'capabilities',
|
|
127
|
+
'access',
|
|
128
|
+
'grants',
|
|
129
|
+
'commands.nativeSkills',
|
|
130
|
+
'skills',
|
|
131
|
+
'features',
|
|
132
|
+
'abilities',
|
|
133
|
+
],
|
|
134
|
+
maxConcurrent: [
|
|
135
|
+
'agents.defaults.maxConcurrent',
|
|
136
|
+
'agents.defaults.max_concurrent',
|
|
137
|
+
'agents.maxConcurrent',
|
|
138
|
+
'maxConcurrent',
|
|
139
|
+
'max_concurrent',
|
|
140
|
+
'concurrency',
|
|
141
|
+
'agents.defaults.subagents.maxConcurrent',
|
|
142
|
+
'subagents.maxConcurrent',
|
|
143
|
+
],
|
|
144
|
+
},
|
|
145
|
+
/**
|
|
146
|
+
* Provider detection patterns.
|
|
147
|
+
* Used to infer the AI provider from model names.
|
|
148
|
+
*/
|
|
149
|
+
providerPatterns: [
|
|
150
|
+
{
|
|
151
|
+
provider: 'anthropic',
|
|
152
|
+
modelPatterns: ['claude', 'anthropic'],
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
provider: 'openai',
|
|
156
|
+
modelPatterns: ['gpt', 'openai', 'o1', 'o3', 'davinci', 'curie', 'babbage'],
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
provider: 'google',
|
|
160
|
+
modelPatterns: ['gemini', 'palm', 'bard', 'google'],
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
provider: 'mistral',
|
|
164
|
+
modelPatterns: ['mistral', 'mixtral'],
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
provider: 'meta',
|
|
168
|
+
modelPatterns: ['llama', 'meta'],
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
provider: 'cohere',
|
|
172
|
+
modelPatterns: ['cohere', 'command'],
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
provider: 'deepseek',
|
|
176
|
+
modelPatterns: ['deepseek'],
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
provider: 'xai',
|
|
180
|
+
modelPatterns: ['grok', 'xai'],
|
|
181
|
+
},
|
|
182
|
+
],
|
|
183
|
+
/**
|
|
184
|
+
* Known communication channel patterns.
|
|
185
|
+
*/
|
|
186
|
+
channelPatterns: [
|
|
187
|
+
{ id: 'telegram', displayName: 'Telegram', aliases: ['tg', 'tgbot'] },
|
|
188
|
+
{ id: 'whatsapp', displayName: 'WhatsApp', aliases: ['wa', 'whatsappbot'] },
|
|
189
|
+
{ id: 'slack', displayName: 'Slack', aliases: ['slackbot'] },
|
|
190
|
+
{ id: 'discord', displayName: 'Discord', aliases: ['discordbot'] },
|
|
191
|
+
{ id: 'email', displayName: 'Email', aliases: ['mail', 'smtp', 'imap'] },
|
|
192
|
+
{ id: 'sms', displayName: 'SMS', aliases: ['text', 'twilio'] },
|
|
193
|
+
{ id: 'signal', displayName: 'Signal', aliases: ['signalbot'] },
|
|
194
|
+
{ id: 'teams', displayName: 'Microsoft Teams', aliases: ['msteams', 'microsoftteams'] },
|
|
195
|
+
{ id: 'matrix', displayName: 'Matrix', aliases: ['element'] },
|
|
196
|
+
{ id: 'irc', displayName: 'IRC', aliases: ['ircbot'] },
|
|
197
|
+
{ id: 'xmpp', displayName: 'XMPP', aliases: ['jabber'] },
|
|
198
|
+
{ id: 'webhook', displayName: 'Webhook', aliases: ['webhooks', 'http'] },
|
|
199
|
+
{ id: 'api', displayName: 'API', aliases: ['rest', 'restapi'] },
|
|
200
|
+
],
|
|
201
|
+
/**
|
|
202
|
+
* Sensitive fields to redact from raw config output.
|
|
203
|
+
* Prevents accidental exposure of secrets in logs/output.
|
|
204
|
+
*/
|
|
205
|
+
sensitiveFields: [
|
|
206
|
+
// Authentication tokens
|
|
207
|
+
{ field: 'token' },
|
|
208
|
+
{ field: 'apiKey' },
|
|
209
|
+
{ field: 'api_key' },
|
|
210
|
+
{ field: 'apikey' },
|
|
211
|
+
{ field: 'secret' },
|
|
212
|
+
{ field: 'secretKey' },
|
|
213
|
+
{ field: 'secret_key' },
|
|
214
|
+
{ field: 'password' },
|
|
215
|
+
{ field: 'passwd' },
|
|
216
|
+
{ field: 'credentials' },
|
|
217
|
+
{ field: 'auth', parent: 'gateway' },
|
|
218
|
+
// Bot tokens
|
|
219
|
+
{ field: 'botToken' },
|
|
220
|
+
{ field: 'bot_token' },
|
|
221
|
+
{ field: 'accessToken' },
|
|
222
|
+
{ field: 'access_token' },
|
|
223
|
+
{ field: 'refreshToken' },
|
|
224
|
+
{ field: 'refresh_token' },
|
|
225
|
+
// Keys
|
|
226
|
+
{ field: 'privateKey' },
|
|
227
|
+
{ field: 'private_key' },
|
|
228
|
+
{ field: 'signingKey' },
|
|
229
|
+
{ field: 'encryptionKey' },
|
|
230
|
+
// Webhook secrets
|
|
231
|
+
{ field: 'webhookSecret' },
|
|
232
|
+
{ field: 'webhook_secret' },
|
|
233
|
+
{ field: 'signingSecret' },
|
|
234
|
+
],
|
|
235
|
+
};
|
|
236
|
+
/**
|
|
237
|
+
* Get the detection configuration.
|
|
238
|
+
*/
|
|
239
|
+
export function getDetectionConfig() {
|
|
240
|
+
return defaultDetectionConfig;
|
|
241
|
+
}
|
|
242
|
+
//# sourceMappingURL=detection-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detection-config.js","sourceRoot":"","sources":["../../src/detector/detection-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Docker detection for OpenClaw.
|
|
3
|
+
* Checks for OpenClaw containers and images.
|
|
4
|
+
*/
|
|
5
|
+
import type { DockerDetection } from '../types/detection.js';
|
|
6
|
+
/**
|
|
7
|
+
* Detect OpenClaw Docker containers and images.
|
|
8
|
+
*/
|
|
9
|
+
export declare function detectDocker(): Promise<DockerDetection>;
|
|
10
|
+
//# sourceMappingURL=docker.d.ts.map
|