devicely 1.0.5
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 +7 -0
- package/README.md +243 -0
- package/bin/devicely.js +3 -0
- package/config/apps_presets.conf +271 -0
- package/config/devices.conf +20 -0
- package/lib/aiProviders.js +518 -0
- package/lib/aiProviders.js.backup +301 -0
- package/lib/aiProvidersConfig.js +176 -0
- package/lib/aiProviders_new.js +70 -0
- package/lib/androidDeviceDetection.js +2 -0
- package/lib/appMappings.js +1 -0
- package/lib/deviceDetection.js +2 -0
- package/lib/devices.conf +20 -0
- package/lib/devices.js +1 -0
- package/lib/doctor.js +1 -0
- package/lib/executor.js +1 -0
- package/lib/fix_logs.sh +18 -0
- package/lib/frontend/asset-manifest.json +13 -0
- package/lib/frontend/index.html +1 -0
- package/lib/frontend/static/css/main.23bd35c0.css +2 -0
- package/lib/frontend/static/css/main.23bd35c0.css.map +1 -0
- package/lib/frontend/static/js/main.3f13aeaf.js +1 -0
- package/lib/frontend/static/js/main.3f13aeaf.js.LICENSE.txt +48 -0
- package/lib/frontend/static/js/main.3f13aeaf.js.map +1 -0
- package/lib/frontend/voice-test.html +156 -0
- package/lib/index.js +1 -0
- package/lib/package-lock.json +1678 -0
- package/lib/package.json +30 -0
- package/lib/server.js +1 -0
- package/lib/server.js.bak +3380 -0
- package/package.json +78 -0
- package/scripts/postinstall.js +110 -0
- package/scripts/shell/android_device_control +0 -0
- package/scripts/shell/connect_android_usb +0 -0
- package/scripts/shell/connect_android_usb_multi_final +0 -0
- package/scripts/shell/connect_android_wireless +0 -0
- package/scripts/shell/connect_android_wireless_multi_final +0 -0
- package/scripts/shell/connect_ios_usb +0 -0
- package/scripts/shell/connect_ios_usb_multi_final +0 -0
- package/scripts/shell/connect_ios_wireless_multi_final +0 -0
- package/scripts/shell/find_element_coordinates +0 -0
- package/scripts/shell/find_wda +0 -0
- package/scripts/shell/install_uiautomator2 +0 -0
- package/scripts/shell/ios_device_control +0 -0
- package/scripts/shell/setup +0 -0
- package/scripts/shell/setup_android +0 -0
- package/scripts/shell/start +0 -0
- package/scripts/shell/test_android_locators +0 -0
- package/scripts/shell/test_connect +0 -0
- package/scripts/shell/test_device_detection +0 -0
- package/scripts/shell/test_fixes +0 -0
- package/scripts/shell/test_getlocators_fix +0 -0
- package/scripts/shell/test_recording_feature +0 -0
- package/scripts/shell/verify_distribution +0 -0
package/package.json
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "devicely",
|
|
3
|
+
"version": "1.0.5",
|
|
4
|
+
"description": "Devicely - One Command, All Devices. AI Powered Mobile Automation for iOS and Android",
|
|
5
|
+
"main": "lib/index.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"devicely": "./bin/devicely.js"
|
|
8
|
+
},
|
|
9
|
+
"scripts": {
|
|
10
|
+
"test": "echo \"Error: no test specified\" && exit 1",
|
|
11
|
+
"postinstall": "node scripts/postinstall.js"
|
|
12
|
+
},
|
|
13
|
+
"keywords": [
|
|
14
|
+
"ios",
|
|
15
|
+
"android",
|
|
16
|
+
"automation",
|
|
17
|
+
"testing",
|
|
18
|
+
"webdriveragent",
|
|
19
|
+
"appium",
|
|
20
|
+
"uiautomator2",
|
|
21
|
+
"mobile",
|
|
22
|
+
"device-control",
|
|
23
|
+
"iphone",
|
|
24
|
+
"ipad",
|
|
25
|
+
"ui-testing",
|
|
26
|
+
"qa",
|
|
27
|
+
"testing-tools",
|
|
28
|
+
"ai",
|
|
29
|
+
"natural-language",
|
|
30
|
+
"device-pool"
|
|
31
|
+
],
|
|
32
|
+
"author": "Suresh Kumar M <devicelyai@gmail.com>",
|
|
33
|
+
"license": "UNLICENSED",
|
|
34
|
+
"private": false,
|
|
35
|
+
"repository": {
|
|
36
|
+
"type": "git",
|
|
37
|
+
"url": "https://github.com/sureshkumarm8/Devicely.git"
|
|
38
|
+
},
|
|
39
|
+
"bugs": {
|
|
40
|
+
"url": "https://github.com/sureshkumarm8/Devicely/issues"
|
|
41
|
+
},
|
|
42
|
+
"homepage": "https://devicely-ai.vercel.app",
|
|
43
|
+
"engines": {
|
|
44
|
+
"node": ">=16.0.0",
|
|
45
|
+
"npm": ">=8.0.0"
|
|
46
|
+
},
|
|
47
|
+
"os": [
|
|
48
|
+
"darwin",
|
|
49
|
+
"linux"
|
|
50
|
+
],
|
|
51
|
+
"dependencies": {
|
|
52
|
+
"@anthropic-ai/sdk": "^0.71.2",
|
|
53
|
+
"@google/generative-ai": "^0.24.1",
|
|
54
|
+
"axios": "^1.13.4",
|
|
55
|
+
"chalk": "^4.1.2",
|
|
56
|
+
"commander": "^11.1.0",
|
|
57
|
+
"cors": "^2.8.5",
|
|
58
|
+
"dotenv": "^16.3.1",
|
|
59
|
+
"express": "^4.18.2",
|
|
60
|
+
"node-fetch": "^2.7.0",
|
|
61
|
+
"open": "^8.4.2",
|
|
62
|
+
"openai": "^4.20.0",
|
|
63
|
+
"ora": "^5.4.1",
|
|
64
|
+
"ws": "^8.14.2"
|
|
65
|
+
},
|
|
66
|
+
"files": [
|
|
67
|
+
"bin/",
|
|
68
|
+
"lib/",
|
|
69
|
+
"scripts/",
|
|
70
|
+
"config/",
|
|
71
|
+
"README.md",
|
|
72
|
+
"LICENSE"
|
|
73
|
+
],
|
|
74
|
+
"preferGlobal": true,
|
|
75
|
+
"publishConfig": {
|
|
76
|
+
"access": "public"
|
|
77
|
+
}
|
|
78
|
+
}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Devicely - Post Install Script
|
|
3
|
+
* Runs after npm install to setup environment
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
const chalk = require('chalk');
|
|
7
|
+
const fs = require('fs');
|
|
8
|
+
const path = require('path');
|
|
9
|
+
const os = require('os');
|
|
10
|
+
|
|
11
|
+
console.log('');
|
|
12
|
+
console.log(chalk.cyan.bold('🎉 Devicely installed successfully!'));
|
|
13
|
+
console.log(chalk.gray(' One Command, All Devices. AI Powered Mobile Automation'));
|
|
14
|
+
console.log(chalk.gray('━'.repeat(50)));
|
|
15
|
+
console.log('');
|
|
16
|
+
|
|
17
|
+
// Create config directory in .devicely
|
|
18
|
+
const configDir = path.join(os.homedir(), '.devicely');
|
|
19
|
+
try {
|
|
20
|
+
if (!fs.existsSync(configDir)) {
|
|
21
|
+
fs.mkdirSync(configDir, { recursive: true });
|
|
22
|
+
console.log(chalk.green('✅ Created config directory'));
|
|
23
|
+
console.log(chalk.gray(` ${configDir}`));
|
|
24
|
+
}
|
|
25
|
+
} catch (error) {
|
|
26
|
+
// Silent fail - directory might already exist
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// Copy default configs if they don't exist
|
|
30
|
+
const defaultConfigs = [
|
|
31
|
+
{ name: 'devices.conf', content: `# Device Configuration
|
|
32
|
+
# Format: device_name,udid,ip_address
|
|
33
|
+
# Example:
|
|
34
|
+
# iPhone15Pro,00008110-001C24361E41801C,192.168.1.100
|
|
35
|
+
|
|
36
|
+
` },
|
|
37
|
+
{ name: 'apps_presets.conf', content: `# App Presets Configuration
|
|
38
|
+
# iOS Apps
|
|
39
|
+
Safari,com.apple.mobilesafari
|
|
40
|
+
Settings,com.apple.Preferences
|
|
41
|
+
Messages,com.apple.MobileSMS
|
|
42
|
+
Camera,com.apple.camera
|
|
43
|
+
Photos,com.apple.mobileslideshow
|
|
44
|
+
Notes,com.apple.mobilenotes
|
|
45
|
+
Maps,com.apple.Maps
|
|
46
|
+
AppStore,com.apple.AppStore
|
|
47
|
+
|
|
48
|
+
# Android Apps
|
|
49
|
+
Chrome,com.android.chrome
|
|
50
|
+
Settings,com.android.settings
|
|
51
|
+
Camera,com.android.camera2
|
|
52
|
+
Gallery,com.google.android.apps.photos
|
|
53
|
+
Messages,com.google.android.apps.messaging
|
|
54
|
+
` }
|
|
55
|
+
];
|
|
56
|
+
|
|
57
|
+
defaultConfigs.forEach(config => {
|
|
58
|
+
const configPath = path.join(configDir, config.name);
|
|
59
|
+
if (!fs.existsSync(configPath)) {
|
|
60
|
+
try {
|
|
61
|
+
fs.writeFileSync(configPath, config.content);
|
|
62
|
+
console.log(chalk.green(`✅ Created ${config.name}`));
|
|
63
|
+
} catch (error) {
|
|
64
|
+
// Silent fail
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
// Create .env template
|
|
70
|
+
const envPath = path.join(configDir, '.env');
|
|
71
|
+
if (!fs.existsSync(envPath)) {
|
|
72
|
+
const envContent = `# Devicely Configuration
|
|
73
|
+
# Add your AI Provider API keys here
|
|
74
|
+
|
|
75
|
+
# OpenAI Configuration
|
|
76
|
+
OPENAI_API_KEY=
|
|
77
|
+
|
|
78
|
+
# Google Gemini Configuration
|
|
79
|
+
GOOGLE_API_KEY=
|
|
80
|
+
|
|
81
|
+
# Anthropic Claude Configuration
|
|
82
|
+
ANTHROPIC_API_KEY=
|
|
83
|
+
|
|
84
|
+
# Default AI Provider (openai, gemini, or anthropic)
|
|
85
|
+
AI_PROVIDER=gemini
|
|
86
|
+
`;
|
|
87
|
+
try {
|
|
88
|
+
fs.writeFileSync(envPath, envContent);
|
|
89
|
+
console.log(chalk.green('✅ Created .env template'));
|
|
90
|
+
} catch (error) {
|
|
91
|
+
// Silent fail
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
console.log('');
|
|
96
|
+
console.log(chalk.cyan.bold('🚀 Getting Started:'));
|
|
97
|
+
console.log('');
|
|
98
|
+
console.log(chalk.white(' 1. Connect your iOS or Android device'));
|
|
99
|
+
console.log(chalk.white(' 2. Run: ') + chalk.yellow.bold('devicely start'));
|
|
100
|
+
console.log(chalk.white(' 3. Browser opens at: ') + chalk.cyan('https://devicely-ai.vercel.app'));
|
|
101
|
+
console.log(chalk.white(' 4. Control your devices with AI!'));
|
|
102
|
+
console.log('');
|
|
103
|
+
console.log(chalk.cyan('📖 More commands:'));
|
|
104
|
+
console.log(chalk.gray(' devicely list ') + chalk.white('- List connected devices'));
|
|
105
|
+
console.log(chalk.gray(' devicely --help ') + chalk.white('- Show all commands'));
|
|
106
|
+
console.log('');
|
|
107
|
+
console.log(chalk.gray('━'.repeat(50)));
|
|
108
|
+
console.log(chalk.gray('📖 Documentation: https://github.com/sureshkumarm8/Devicely'));
|
|
109
|
+
console.log(chalk.gray('🌐 Frontend: https://devicely-ai.vercel.app'));
|
|
110
|
+
console.log('');
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|