neoagent 2.4.1-beta.19 → 2.4.1-beta.21
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/README.md +4 -1
- package/docs/getting-started.md +9 -3
- package/flutter_app/assets/branding/app_icon_light_1024.png +0 -0
- package/flutter_app/assets/branding/app_icon_light_128.png +0 -0
- package/flutter_app/assets/branding/app_icon_light_192.png +0 -0
- package/flutter_app/assets/branding/app_icon_light_256.png +0 -0
- package/flutter_app/assets/branding/app_icon_light_32.png +0 -0
- package/flutter_app/assets/branding/app_icon_light_512.png +0 -0
- package/flutter_app/assets/branding/app_icon_light_64.png +0 -0
- package/flutter_app/assets/branding/tray_icon_light_template.png +0 -0
- package/flutter_app/lib/features/location/location_service.dart +3 -0
- package/flutter_app/lib/main.dart +1 -0
- package/flutter_app/lib/main_account_settings.dart +9 -33
- package/flutter_app/lib/main_app_shell.dart +237 -197
- package/flutter_app/lib/main_controller.dart +0 -25
- package/flutter_app/lib/main_devices.dart +2 -0
- package/flutter_app/lib/main_models.dart +144 -0
- package/flutter_app/lib/main_operations.dart +150 -19
- package/flutter_app/lib/main_shared.dart +642 -195
- package/flutter_app/lib/main_theme.dart +2 -0
- package/flutter_app/lib/src/android_apk_drop_zone_web.dart +3 -1
- package/flutter_app/lib/src/security/password_strength.dart +84 -0
- package/flutter_app/lib/src/theme/palette.dart +15 -15
- package/flutter_app/pubspec.yaml +3 -0
- package/flutter_app/web/favicon_light.svg +3 -0
- package/flutter_app/web/icons/Icon-192-light.png +0 -0
- package/flutter_app/web/icons/Icon-512-light.png +0 -0
- package/flutter_app/web/icons/Icon-maskable-192-light.png +0 -0
- package/flutter_app/web/icons/Icon-maskable-512-light.png +0 -0
- package/lib/manager.js +282 -81
- package/package.json +17 -3
- package/server/config/origins.js +3 -1
- package/server/db/database.js +73 -0
- package/server/public/.last_build_id +1 -1
- package/server/public/assets/AssetManifest.bin +1 -1
- package/server/public/assets/AssetManifest.bin.json +1 -1
- package/server/public/assets/assets/branding/app_icon_light_256.png +0 -0
- package/server/public/assets/assets/branding/app_icon_light_512.png +0 -0
- package/server/public/assets/assets/branding/tray_icon_light_template.png +0 -0
- package/server/public/assets/fonts/MaterialIcons-Regular.otf +0 -0
- package/server/public/favicon_light.svg +3 -0
- package/server/public/flutter_bootstrap.js +1 -1
- package/server/public/icons/Icon-192-light.png +0 -0
- package/server/public/icons/Icon-512-light.png +0 -0
- package/server/public/icons/Icon-maskable-192-light.png +0 -0
- package/server/public/icons/Icon-maskable-512-light.png +0 -0
- package/server/public/main.dart.js +68769 -68268
- package/server/routes/agent_profiles.js +3 -0
- package/server/routes/memory.js +22 -1
- package/server/services/account/password_policy.js +6 -1
- package/server/services/memory/intelligence.js +181 -0
- package/server/services/memory/manager.js +475 -25
- package/server/utils/security.js +3 -0
- package/server/services/memory/openhuman_uplift.test.js +0 -98
- package/server/utils/version.test.js +0 -39
|
@@ -447,7 +447,9 @@ class _AndroidApkTileWebState extends State<_AndroidApkTileWeb> {
|
|
|
447
447
|
|
|
448
448
|
@override
|
|
449
449
|
void dispose() {
|
|
450
|
-
for (final s in _subs)
|
|
450
|
+
for (final s in _subs) {
|
|
451
|
+
s.cancel();
|
|
452
|
+
}
|
|
451
453
|
_dropElement.remove();
|
|
452
454
|
super.dispose();
|
|
453
455
|
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
class PasswordStrengthEvaluation {
|
|
2
|
+
const PasswordStrengthEvaluation({
|
|
3
|
+
required this.score,
|
|
4
|
+
required this.containsUserInfo,
|
|
5
|
+
required this.obviousPattern,
|
|
6
|
+
required this.hasMinimumLength,
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
final int score;
|
|
10
|
+
final bool containsUserInfo;
|
|
11
|
+
final bool obviousPattern;
|
|
12
|
+
final bool hasMinimumLength;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
bool hasSequentialPattern(String input) {
|
|
16
|
+
if (input.length < 4) return false;
|
|
17
|
+
|
|
18
|
+
// check for ascending/descending sequences of length >= 4
|
|
19
|
+
for (int i = 0; i <= input.length - 4; i++) {
|
|
20
|
+
bool asc = true;
|
|
21
|
+
bool desc = true;
|
|
22
|
+
for (int j = 0; j < 3; j++) {
|
|
23
|
+
if (input.codeUnitAt(i + j + 1) != input.codeUnitAt(i + j) + 1) asc = false;
|
|
24
|
+
if (input.codeUnitAt(i + j + 1) != input.codeUnitAt(i + j) - 1) desc = false;
|
|
25
|
+
}
|
|
26
|
+
if (asc || desc) return true;
|
|
27
|
+
}
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
PasswordStrengthEvaluation evaluatePasswordStrength({
|
|
32
|
+
required String password,
|
|
33
|
+
String username = '',
|
|
34
|
+
String email = '',
|
|
35
|
+
}) {
|
|
36
|
+
final value = password.trim();
|
|
37
|
+
if (value.isEmpty) {
|
|
38
|
+
return const PasswordStrengthEvaluation(
|
|
39
|
+
score: 0,
|
|
40
|
+
containsUserInfo: false,
|
|
41
|
+
obviousPattern: false,
|
|
42
|
+
hasMinimumLength: false,
|
|
43
|
+
);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
final lower = RegExp(r'[a-z]').hasMatch(value);
|
|
47
|
+
final upper = RegExp(r'[A-Z]').hasMatch(value);
|
|
48
|
+
final digits = RegExp(r'[0-9]').hasMatch(value);
|
|
49
|
+
final symbols = RegExp(r'[^A-Za-z0-9]').hasMatch(value);
|
|
50
|
+
final variety = <bool>[lower, upper, digits, symbols]
|
|
51
|
+
.where((item) => item)
|
|
52
|
+
.length;
|
|
53
|
+
final normalized = value.toLowerCase();
|
|
54
|
+
final userHints = <String>{
|
|
55
|
+
username.trim().toLowerCase(),
|
|
56
|
+
email.trim().toLowerCase(),
|
|
57
|
+
email.trim().toLowerCase().split('@').first,
|
|
58
|
+
}.where((item) => item.length >= 3);
|
|
59
|
+
final containsUserInfo = userHints.any(normalized.contains);
|
|
60
|
+
final obviousPattern =
|
|
61
|
+
RegExp(r'(.)\1\1').hasMatch(value) ||
|
|
62
|
+
normalized.contains('password') ||
|
|
63
|
+
normalized.contains('123456') ||
|
|
64
|
+
normalized.contains('qwerty') ||
|
|
65
|
+
normalized.contains('letmein') ||
|
|
66
|
+
normalized.contains('welcome') ||
|
|
67
|
+
normalized.contains('admin') ||
|
|
68
|
+
normalized.contains('neoagent') ||
|
|
69
|
+
hasSequentialPattern(normalized);
|
|
70
|
+
|
|
71
|
+
var score = 0;
|
|
72
|
+
if (value.length >= 8) score += 1;
|
|
73
|
+
if (value.length >= 12) score += 1;
|
|
74
|
+
if (variety >= 3) score += 1;
|
|
75
|
+
if (variety == 4 || value.length >= 16) score += 1;
|
|
76
|
+
if (containsUserInfo || obviousPattern) score -= 1;
|
|
77
|
+
|
|
78
|
+
return PasswordStrengthEvaluation(
|
|
79
|
+
score: score.clamp(0, 4),
|
|
80
|
+
containsUserInfo: containsUserInfo,
|
|
81
|
+
obviousPattern: obviousPattern,
|
|
82
|
+
hasMinimumLength: value.length >= 8,
|
|
83
|
+
);
|
|
84
|
+
}
|
|
@@ -41,17 +41,17 @@ class NeoAgentPalette {
|
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
const NeoAgentPalette darkPalette = NeoAgentPalette(
|
|
44
|
-
bgPrimary: Color(
|
|
45
|
-
bgSecondary: Color(
|
|
46
|
-
bgTertiary: Color(
|
|
47
|
-
bgCard: Color(
|
|
44
|
+
bgPrimary: Color(0xFF061015),
|
|
45
|
+
bgSecondary: Color(0xFF0B1820),
|
|
46
|
+
bgTertiary: Color(0xFF112733),
|
|
47
|
+
bgCard: Color(0xFF142430),
|
|
48
48
|
textPrimary: Color(0xFFF5EFE4),
|
|
49
49
|
textSecondary: Color(0xFFD2D7DC),
|
|
50
50
|
textMuted: Color(0xFF95A0A8),
|
|
51
|
-
accent: Color(
|
|
52
|
-
accentHover: Color(
|
|
53
|
-
accentAlt: Color(
|
|
54
|
-
accentMuted: Color(
|
|
51
|
+
accent: Color(0xFFFFC857),
|
|
52
|
+
accentHover: Color(0xFFFFE29A),
|
|
53
|
+
accentAlt: Color(0xFF30D5C8),
|
|
54
|
+
accentMuted: Color(0x2EFFC857),
|
|
55
55
|
border: Color(0x30576875),
|
|
56
56
|
borderLight: Color(0x4A7B8D99),
|
|
57
57
|
success: Color(0xFF37B67E),
|
|
@@ -61,17 +61,17 @@ const NeoAgentPalette darkPalette = NeoAgentPalette(
|
|
|
61
61
|
);
|
|
62
62
|
|
|
63
63
|
const NeoAgentPalette lightPalette = NeoAgentPalette(
|
|
64
|
-
bgPrimary: Color(
|
|
65
|
-
bgSecondary: Color(
|
|
66
|
-
bgTertiary: Color(
|
|
64
|
+
bgPrimary: Color(0xFFF4F0E9),
|
|
65
|
+
bgSecondary: Color(0xFFEDE5D9),
|
|
66
|
+
bgTertiary: Color(0xFFDDD4C5),
|
|
67
67
|
bgCard: Color(0xFFFFFEFC),
|
|
68
68
|
textPrimary: Color(0xFF16181D),
|
|
69
69
|
textSecondary: Color(0xFF444A55),
|
|
70
70
|
textMuted: Color(0xFF727987),
|
|
71
|
-
accent: Color(
|
|
72
|
-
accentHover: Color(
|
|
73
|
-
accentAlt: Color(
|
|
74
|
-
accentMuted: Color(
|
|
71
|
+
accent: Color(0xFFB47716),
|
|
72
|
+
accentHover: Color(0xFFD69324),
|
|
73
|
+
accentAlt: Color(0xFF128B86),
|
|
74
|
+
accentMuted: Color(0x24B47716),
|
|
75
75
|
border: Color(0x223F4652),
|
|
76
76
|
borderLight: Color(0x3847505D),
|
|
77
77
|
success: Color(0xFF1F8C58),
|
package/flutter_app/pubspec.yaml
CHANGED
|
@@ -56,5 +56,8 @@ flutter:
|
|
|
56
56
|
- web/icons/Icon-192.png
|
|
57
57
|
- assets/branding/app_icon_256.png
|
|
58
58
|
- assets/branding/app_icon_512.png
|
|
59
|
+
- assets/branding/app_icon_light_256.png
|
|
60
|
+
- assets/branding/app_icon_light_512.png
|
|
59
61
|
- assets/branding/tray_icon_template.png
|
|
62
|
+
- assets/branding/tray_icon_light_template.png
|
|
60
63
|
- assets/branding/onboarding_intro.mp4
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32">
|
|
2
|
+
<image width="32" height="32" xlink:href="data:image/png;base64,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"/>
|
|
3
|
+
</svg>
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|