neoagent 2.4.1-beta.30 → 2.4.1-beta.32

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.
Files changed (32) hide show
  1. package/flutter_app/assets/branding/onboarding_intro.mp4 +0 -0
  2. package/flutter_app/lib/features/onboarding/onboarding_chrome.dart +391 -382
  3. package/flutter_app/lib/features/onboarding/onboarding_companion_step.dart +78 -56
  4. package/flutter_app/lib/features/onboarding/onboarding_messaging_step.dart +18 -16
  5. package/flutter_app/lib/features/onboarding/onboarding_model_step.dart +18 -17
  6. package/flutter_app/lib/features/onboarding/onboarding_shell.dart +2 -1
  7. package/flutter_app/lib/features/onboarding/onboarding_video_step.dart +16 -13
  8. package/flutter_app/lib/features/onboarding/onboarding_welcome_step.dart +15 -11
  9. package/flutter_app/lib/main_account_settings.dart +1 -1
  10. package/flutter_app/lib/main_admin.dart +1 -1
  11. package/flutter_app/lib/main_app_shell.dart +190 -191
  12. package/flutter_app/lib/main_chat.dart +381 -228
  13. package/flutter_app/lib/main_devices.dart +1 -1
  14. package/flutter_app/lib/main_launcher.dart +1 -1
  15. package/flutter_app/lib/main_operations.dart +3 -3
  16. package/flutter_app/lib/main_shared.dart +336 -340
  17. package/flutter_app/lib/main_spacing.dart +4 -4
  18. package/flutter_app/lib/main_theme.dart +20 -14
  19. package/flutter_app/lib/src/theme/palette.dart +76 -34
  20. package/flutter_app/pubspec.lock +2 -2
  21. package/flutter_app/pubspec.yaml +1 -1
  22. package/package.json +1 -1
  23. package/server/public/.last_build_id +1 -1
  24. package/server/public/assets/assets/branding/onboarding_intro.mp4 +0 -0
  25. package/server/public/assets/fonts/MaterialIcons-Regular.otf +0 -0
  26. package/server/public/flutter_bootstrap.js +1 -1
  27. package/server/public/main.dart.js +60738 -60521
  28. package/server/services/ai/tools.js +51 -7
  29. package/server/services/messaging/formatting_guides.js +26 -1
  30. package/server/services/messaging/manager.js +5 -2
  31. package/server/services/tasks/runtime.js +182 -7
  32. package/server/services/tasks/task_repository.js +13 -0
@@ -23,11 +23,11 @@ abstract class AppBreakpoints {
23
23
  abstract class AppRadius {
24
24
  static const double tag = 8.0;
25
25
  static const double card = 14.0;
26
- static const double input = 18.0;
27
- static const double panel = 28.0;
26
+ static const double input = 14.0;
27
+ static const double panel = 22.0;
28
28
  static const double pill = 999.0;
29
29
  }
30
30
 
31
31
  /// Deep dark color used for QR code modules rendered on a white background.
32
- /// Matches the dark theme's primary background hue for brand consistency.
33
- const Color _qrDarkColor = Color(0xFF04111D);
32
+ /// Matches the dark theme's deep-olive background hue for brand consistency.
33
+ const Color _qrDarkColor = Color(0xFF0E1511);
@@ -18,8 +18,8 @@ Color get _bgCard => _palette.bgCard;
18
18
  Color get _textPrimary => _palette.textPrimary;
19
19
  Color get _textSecondary => _palette.textSecondary;
20
20
  Color get _textMuted => _palette.textMuted;
21
- const Color _brandAccent = Color(0xFF8F6D3E);
22
- const Color _brandAccentAlt = Color(0xFF2F7D6E);
21
+ const Color _brandAccent = Color(0xFFB07D2B);
22
+ const Color _brandAccentAlt = Color(0xFF5E6B4C);
23
23
  Color get _accent => _palette.accent;
24
24
  Color get _accentHover => _palette.accentHover;
25
25
  Color get _accentAlt => _palette.accentAlt;
@@ -104,10 +104,12 @@ TextStyle _heroTitleStyle([double size = 24]) => TextStyle(
104
104
  color: _textPrimary,
105
105
  );
106
106
 
107
- TextStyle _sectionEyebrowStyle() => TextStyle(
108
- fontSize: 12,
109
- fontWeight: FontWeight.w700,
110
- letterSpacing: 1.0,
107
+ // Eyebrow labels ("CONTROL SURFACE") use the mono typeface for telemetry
108
+ // flavor, matching the design system's `--mono` eyebrow treatment (Geist Mono).
109
+ TextStyle _sectionEyebrowStyle() => GoogleFonts.geistMono(
110
+ fontSize: 11,
111
+ fontWeight: FontWeight.w600,
112
+ letterSpacing: 1.6,
111
113
  color: _accentHover,
112
114
  );
113
115
 
@@ -130,7 +132,9 @@ ThemeData _buildNeoAgentTheme(NeoAgentPalette palette, Brightness brightness) {
130
132
  onSurface: palette.textPrimary,
131
133
  error: palette.danger,
132
134
  ),
133
- textTheme: base.textTheme.apply(
135
+ // Geist is the Control Surface design system's base typeface.
136
+ // Telemetry / mono runs stay on Geist Mono at the call sites.
137
+ textTheme: GoogleFonts.geistTextTheme(base.textTheme).apply(
134
138
  bodyColor: palette.textPrimary,
135
139
  displayColor: palette.textPrimary,
136
140
  ),
@@ -145,7 +149,7 @@ ThemeData _buildNeoAgentTheme(NeoAgentPalette palette, Brightness brightness) {
145
149
  elevation: brightness == Brightness.dark ? 8 : 3,
146
150
  margin: EdgeInsets.zero,
147
151
  shape: RoundedRectangleBorder(
148
- borderRadius: BorderRadius.circular(28),
152
+ borderRadius: BorderRadius.circular(AppRadius.panel),
149
153
  side: BorderSide(
150
154
  color: Colors.white.withValues(
151
155
  alpha: brightness == Brightness.dark ? 0.08 : 0.22,
@@ -159,15 +163,15 @@ ThemeData _buildNeoAgentTheme(NeoAgentPalette palette, Brightness brightness) {
159
163
  alpha: brightness == Brightness.dark ? 0.82 : 0.84,
160
164
  ),
161
165
  border: OutlineInputBorder(
162
- borderRadius: BorderRadius.circular(18),
166
+ borderRadius: BorderRadius.circular(AppRadius.input),
163
167
  borderSide: BorderSide(color: palette.borderLight),
164
168
  ),
165
169
  enabledBorder: OutlineInputBorder(
166
- borderRadius: BorderRadius.circular(18),
170
+ borderRadius: BorderRadius.circular(AppRadius.input),
167
171
  borderSide: BorderSide(color: palette.borderLight),
168
172
  ),
169
173
  focusedBorder: OutlineInputBorder(
170
- borderRadius: BorderRadius.circular(18),
174
+ borderRadius: BorderRadius.circular(AppRadius.input),
171
175
  borderSide: BorderSide(color: palette.accentHover, width: 1.4),
172
176
  ),
173
177
  contentPadding: const EdgeInsets.symmetric(horizontal: 16, vertical: 16),
@@ -193,7 +197,7 @@ ThemeData _buildNeoAgentTheme(NeoAgentPalette palette, Brightness brightness) {
193
197
  elevation: 0,
194
198
  padding: const EdgeInsets.symmetric(horizontal: 18, vertical: 16),
195
199
  shape: RoundedRectangleBorder(
196
- borderRadius: BorderRadius.circular(18),
200
+ borderRadius: BorderRadius.circular(AppRadius.input),
197
201
  side: BorderSide(
198
202
  color: Colors.white.withValues(
199
203
  alpha: brightness == Brightness.dark ? 0.14 : 0.26,
@@ -219,7 +223,9 @@ ThemeData _buildNeoAgentTheme(NeoAgentPalette palette, Brightness brightness) {
219
223
  alpha: brightness == Brightness.dark ? 0.2 : 0.5,
220
224
  ),
221
225
  padding: const EdgeInsets.symmetric(horizontal: 18, vertical: 16),
222
- shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(18)),
226
+ shape: RoundedRectangleBorder(
227
+ borderRadius: BorderRadius.circular(AppRadius.input),
228
+ ),
223
229
  textStyle: const TextStyle(fontSize: 15, fontWeight: FontWeight.w700),
224
230
  ),
225
231
  ),
@@ -266,7 +272,7 @@ ThemeData _buildNeoAgentTheme(NeoAgentPalette palette, Brightness brightness) {
266
272
  backgroundColor: palette.bgCard.withValues(alpha: 0.96),
267
273
  surfaceTintColor: Colors.transparent,
268
274
  shape: RoundedRectangleBorder(
269
- borderRadius: BorderRadius.circular(24),
275
+ borderRadius: BorderRadius.circular(AppRadius.panel),
270
276
  side: BorderSide(color: palette.borderLight),
271
277
  ),
272
278
  ),
@@ -1,5 +1,19 @@
1
1
  import 'package:flutter/widgets.dart';
2
2
 
3
+ /// Resolves the active [NeoAgentPalette] for the given [brightness].
4
+ NeoAgentPalette paletteFor(Brightness brightness) =>
5
+ brightness == Brightness.light ? lightPalette : darkPalette;
6
+
7
+ /// Resolves the active [NeoAgentPalette] from the ambient theme brightness.
8
+ NeoAgentPalette paletteOf(BuildContext context) =>
9
+ paletteFor(MediaQuery.platformBrightnessOf(context));
10
+
11
+ /// Canonical color tokens for the NeoAgent "Control Surface" design system.
12
+ ///
13
+ /// Visual language: warm-organic "agent OS" — olive/sage greens paired with
14
+ /// a gold accent, a paper-light day theme and a deep-olive night theme.
15
+ /// Every screen reads its colors from these tokens (via the theme getters in
16
+ /// `main_theme.dart`), so adjusting a value here re-skins the whole app.
3
17
  class NeoAgentPalette {
4
18
  const NeoAgentPalette({
5
19
  required this.bgPrimary,
@@ -21,61 +35,89 @@ class NeoAgentPalette {
21
35
  required this.info,
22
36
  });
23
37
 
38
+ /// Page background ("paper" by day, "deep olive" by night).
24
39
  final Color bgPrimary;
40
+
41
+ /// Slightly recessed background used for rails and inset wells.
25
42
  final Color bgSecondary;
43
+
44
+ /// Tertiary surface for nested wells, track fills and pressed states.
26
45
  final Color bgTertiary;
46
+
47
+ /// Raised surface for cards, sheets and bubbles.
27
48
  final Color bgCard;
49
+
50
+ /// Primary ink — headings and body text.
28
51
  final Color textPrimary;
52
+
53
+ /// Secondary ink — supporting copy and inactive labels.
29
54
  final Color textSecondary;
55
+
56
+ /// Muted ink — captions, placeholders and disabled glyphs.
30
57
  final Color textMuted;
58
+
59
+ /// Gold accent — primary actions, active nav, focus rings.
31
60
  final Color accent;
61
+
62
+ /// Readable gold ("gold-ink") for eyebrows, links and accent text on paper.
32
63
  final Color accentHover;
64
+
65
+ /// Sage green companion accent — calls, traces and secondary affordances.
33
66
  final Color accentAlt;
67
+
68
+ /// Translucent gold wash for soft fills and selection backgrounds.
34
69
  final Color accentMuted;
70
+
71
+ /// Hairline divider color.
35
72
  final Color border;
73
+
74
+ /// Stronger hairline for inputs and interactive outlines.
36
75
  final Color borderLight;
76
+
37
77
  final Color success;
38
78
  final Color warning;
39
79
  final Color danger;
40
80
  final Color info;
41
81
  }
42
82
 
83
+ /// Deep-olive night theme.
43
84
  const NeoAgentPalette darkPalette = NeoAgentPalette(
44
- bgPrimary: Color(0xFF061015),
45
- bgSecondary: Color(0xFF0B1820),
46
- bgTertiary: Color(0xFF112733),
47
- bgCard: Color(0xFF142430),
48
- textPrimary: Color(0xFFF5EFE4),
49
- textSecondary: Color(0xFFD2D7DC),
50
- textMuted: Color(0xFF95A0A8),
51
- accent: Color(0xFFFFC857),
52
- accentHover: Color(0xFFFFE29A),
53
- accentAlt: Color(0xFF30D5C8),
54
- accentMuted: Color(0x2EFFC857),
55
- border: Color(0x30576875),
56
- borderLight: Color(0x4A7B8D99),
57
- success: Color(0xFF37B67E),
58
- warning: Color(0xFFD49A43),
59
- danger: Color(0xFFE26E61),
60
- info: Color(0xFF74A8D9),
85
+ bgPrimary: Color(0xFF0E1511),
86
+ bgSecondary: Color(0xFF0A0F0C),
87
+ bgTertiary: Color(0xFF252D28),
88
+ bgCard: Color(0xFF171F1A),
89
+ textPrimary: Color(0xFFECEFE5),
90
+ textSecondary: Color(0xFFAEB7A6),
91
+ textMuted: Color(0xFF7E8877),
92
+ accent: Color(0xFFE1B052),
93
+ accentHover: Color(0xFFEAC272),
94
+ accentAlt: Color(0xFF84BA87),
95
+ accentMuted: Color(0x29E1B052),
96
+ border: Color(0x1AE0F0E0),
97
+ borderLight: Color(0x2BE0F0E0),
98
+ success: Color(0xFF74C07C),
99
+ warning: Color(0xFFD9A24B),
100
+ danger: Color(0xFFDE8A78),
101
+ info: Color(0xFF6FB0A4),
61
102
  );
62
103
 
104
+ /// Paper-light day theme.
63
105
  const NeoAgentPalette lightPalette = NeoAgentPalette(
64
- bgPrimary: Color(0xFFF4F0E9),
65
- bgSecondary: Color(0xFFEDE5D9),
66
- bgTertiary: Color(0xFFDDD4C5),
67
- bgCard: Color(0xFFFFFEFC),
68
- textPrimary: Color(0xFF16181D),
69
- textSecondary: Color(0xFF444A55),
70
- textMuted: Color(0xFF727987),
71
- accent: Color(0xFFB47716),
72
- accentHover: Color(0xFFD69324),
73
- accentAlt: Color(0xFF128B86),
74
- accentMuted: Color(0x24B47716),
75
- border: Color(0x223F4652),
76
- borderLight: Color(0x3847505D),
77
- success: Color(0xFF1F8C58),
78
- warning: Color(0xFFB87322),
79
- danger: Color(0xFFD25B4D),
80
- info: Color(0xFF2F7AA8),
106
+ bgPrimary: Color(0xFFF4F1E8),
107
+ bgSecondary: Color(0xFFEDE9DC),
108
+ bgTertiary: Color(0xFFF1EDE1),
109
+ bgCard: Color(0xFFFDFCF8),
110
+ textPrimary: Color(0xFF1C2117),
111
+ textSecondary: Color(0xFF49503F),
112
+ textMuted: Color(0xFF7E8470),
113
+ accent: Color(0xFFB07D2B),
114
+ accentHover: Color(0xFF8A5F1C),
115
+ accentAlt: Color(0xFF5E6B4C),
116
+ accentMuted: Color(0x24B07D2B),
117
+ border: Color(0x171C2117),
118
+ borderLight: Color(0x291C2117),
119
+ success: Color(0xFF527C4F),
120
+ warning: Color(0xFF9A7B33),
121
+ danger: Color(0xFFAE473C),
122
+ info: Color(0xFF2F7D6E),
81
123
  );
@@ -418,10 +418,10 @@ packages:
418
418
  dependency: "direct main"
419
419
  description:
420
420
  name: google_fonts
421
- sha256: ba03d03bcaa2f6cb7bd920e3b5027181db75ab524f8891c8bc3aa603885b8055
421
+ sha256: "4e9391085e524954a51e3625b7c9c7e9851dc3f376603208bb45c24b9a66255d"
422
422
  url: "https://pub.dev"
423
423
  source: hosted
424
- version: "6.3.3"
424
+ version: "8.1.0"
425
425
  hotkey_manager:
426
426
  dependency: "direct main"
427
427
  description:
@@ -12,7 +12,7 @@ dependencies:
12
12
  cupertino_icons: ^1.0.8
13
13
  flutter_markdown: ^0.7.4+1
14
14
  file_picker: ^8.0.7
15
- google_fonts: ^6.3.1
15
+ google_fonts: ^8.1.0
16
16
  image: ^4.5.4
17
17
  http: ^1.5.0
18
18
  mixpanel_flutter: ^2.6.1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "neoagent",
3
- "version": "2.4.1-beta.30",
3
+ "version": "2.4.1-beta.32",
4
4
  "description": "Proactive personal AI agent with no limits",
5
5
  "license": "AGPL-3.0-only",
6
6
  "main": "server/index.js",
@@ -1 +1 @@
1
- fc2b8c2fa82603cb22dd6526a84eb31e
1
+ bbd16dca2aaed152d1b5cce7dde070a9
@@ -37,6 +37,6 @@ _flutter.buildConfig = {"engineRevision":"c416acfeb8126e097f758c664aaa3da929e27d
37
37
 
38
38
  _flutter.loader.load({
39
39
  serviceWorkerSettings: {
40
- serviceWorkerVersion: "132005355" /* Flutter's service worker is deprecated and will be removed in a future Flutter release. */
40
+ serviceWorkerVersion: "15168279" /* Flutter's service worker is deprecated and will be removed in a future Flutter release. */
41
41
  }
42
42
  });