neoagent 2.4.4-beta.5 → 2.4.4-beta.7

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.
@@ -111,17 +111,17 @@ _CategoryInfo _categoryInfo(String category) {
111
111
  label: category,
112
112
  subtitle: 'Controls access to $category tools.',
113
113
  icon: Icons.lock_outline,
114
- color: Colors.grey,
114
+ color: const Color(0xFF888888),
115
115
  riskLevel: 'medium',
116
116
  );
117
117
  }
118
118
 
119
119
  Color _riskColor(String level) {
120
120
  return switch (level) {
121
- 'critical' => const Color(0xFFE53935),
122
- 'high' => const Color(0xFFF4511E),
123
- 'medium' => const Color(0xFFFF8F00),
124
- _ => Colors.grey,
121
+ 'critical' => _danger,
122
+ 'high' => _warning,
123
+ 'medium' => _accent,
124
+ _ => _textSecondary,
125
125
  };
126
126
  }
127
127
 
@@ -295,7 +295,7 @@ class _MainSecurityState extends State<MainSecurity> {
295
295
  setState(() => _mode = prev);
296
296
  if (mounted) {
297
297
  ScaffoldMessenger.of(context).showSnackBar(
298
- SnackBar(content: Text('Failed to save: $e'), backgroundColor: Colors.red),
298
+ SnackBar(content: Text('Failed to save: $e'), backgroundColor: _danger),
299
299
  );
300
300
  }
301
301
  }
@@ -312,7 +312,7 @@ class _MainSecurityState extends State<MainSecurity> {
312
312
  setState(() => _policies = {..._policies, category: prev ?? 'require_approval'});
313
313
  if (mounted) {
314
314
  ScaffoldMessenger.of(context).showSnackBar(
315
- SnackBar(content: Text('Failed to save: $e'), backgroundColor: Colors.red),
315
+ SnackBar(content: Text('Failed to save: $e'), backgroundColor: _danger),
316
316
  );
317
317
  }
318
318
  }
@@ -360,11 +360,8 @@ class _MainSecurityState extends State<MainSecurity> {
360
360
  ),
361
361
  const SizedBox(height: 4),
362
362
  const Padding(
363
- padding: EdgeInsets.symmetric(vertical: 6, horizontal: 4),
364
- child: Text(
365
- 'Per-category permissions',
366
- style: TextStyle(fontWeight: FontWeight.w700, fontSize: 13),
367
- ),
363
+ padding: EdgeInsets.only(top: 4, bottom: 6),
364
+ child: _SectionTitle('Per-category permissions'),
368
365
  ),
369
366
  ..._policies.entries.map((e) => Padding(
370
367
  padding: const EdgeInsets.only(bottom: 8),
@@ -393,11 +390,11 @@ class _ErrorView extends StatelessWidget {
393
390
  child: Column(
394
391
  mainAxisSize: MainAxisSize.min,
395
392
  children: <Widget>[
396
- const Icon(Icons.error_outline, size: 48, color: Colors.red),
393
+ Icon(Icons.error_outline, size: 48, color: _danger),
397
394
  const SizedBox(height: 12),
398
395
  Text('Failed to load policies', style: Theme.of(context).textTheme.titleMedium),
399
396
  const SizedBox(height: 6),
400
- Text(error, style: const TextStyle(fontSize: 12, color: Colors.grey), textAlign: TextAlign.center),
397
+ Text(error, style: TextStyle(fontSize: 12, color: _textSecondary), textAlign: TextAlign.center),
401
398
  const SizedBox(height: 16),
402
399
  OutlinedButton.icon(onPressed: onRetry, icon: const Icon(Icons.refresh), label: const Text('Retry')),
403
400
  ],
@@ -447,7 +444,7 @@ class _GlobalModeCard extends StatelessWidget {
447
444
  return Card(
448
445
  elevation: 0,
449
446
  shape: RoundedRectangleBorder(
450
- borderRadius: BorderRadius.circular(14),
447
+ borderRadius: BorderRadius.circular(12),
451
448
  side: BorderSide(color: colorScheme.outlineVariant),
452
449
  ),
453
450
  child: Padding(
@@ -457,7 +454,7 @@ class _GlobalModeCard extends StatelessWidget {
457
454
  children: <Widget>[
458
455
  Row(
459
456
  children: <Widget>[
460
- Icon(Icons.tune_rounded, size: 18, color: colorScheme.primary),
457
+ Icon(Icons.tune_rounded, size: 18, color: _accent),
461
458
  const SizedBox(width: 8),
462
459
  const Text('Global security mode', style: TextStyle(fontWeight: FontWeight.w700, fontSize: 14)),
463
460
  ],
@@ -469,7 +466,7 @@ class _GlobalModeCard extends StatelessWidget {
469
466
  label: 'Allow all',
470
467
  subtitle: 'No approval prompts — agent runs without interruption.',
471
468
  icon: Icons.lock_open_rounded,
472
- color: Colors.green,
469
+ color: _warning,
473
470
  onTap: () => onChanged('allow_all'),
474
471
  ),
475
472
  const SizedBox(height: 6),
@@ -479,7 +476,7 @@ class _GlobalModeCard extends StatelessWidget {
479
476
  label: 'Default (recommended)',
480
477
  subtitle: 'Use per-category settings below.',
481
478
  icon: Icons.shield_outlined,
482
- color: colorScheme.primary,
479
+ color: _accentAlt,
483
480
  onTap: () => onChanged('default'),
484
481
  ),
485
482
  const SizedBox(height: 6),
@@ -489,7 +486,7 @@ class _GlobalModeCard extends StatelessWidget {
489
486
  label: 'Always ask',
490
487
  subtitle: 'Every sensitive tool requires approval, every time.',
491
488
  icon: Icons.pan_tool_outlined,
492
- color: Colors.orange,
489
+ color: _info,
493
490
  onTap: () => onChanged('always_ask'),
494
491
  ),
495
492
  ],
@@ -520,23 +517,22 @@ class _ModeOption extends StatelessWidget {
520
517
  @override
521
518
  Widget build(BuildContext context) {
522
519
  final selected = value == current;
523
- final colorScheme = Theme.of(context).colorScheme;
524
520
  return GestureDetector(
525
521
  onTap: onTap,
526
522
  child: AnimatedContainer(
527
523
  duration: const Duration(milliseconds: 150),
528
524
  padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 10),
529
525
  decoration: BoxDecoration(
530
- color: selected ? color.withAlpha(20) : Colors.transparent,
526
+ color: selected ? color.withAlpha(24) : Colors.transparent,
531
527
  borderRadius: BorderRadius.circular(10),
532
528
  border: Border.all(
533
- color: selected ? color : colorScheme.outlineVariant,
529
+ color: selected ? color : _border,
534
530
  width: selected ? 1.5 : 1,
535
531
  ),
536
532
  ),
537
533
  child: Row(
538
534
  children: <Widget>[
539
- Icon(icon, size: 18, color: selected ? color : colorScheme.onSurfaceVariant),
535
+ Icon(icon, size: 18, color: selected ? color : _textSecondary),
540
536
  const SizedBox(width: 10),
541
537
  Expanded(
542
538
  child: Column(
@@ -548,7 +544,7 @@ class _ModeOption extends StatelessWidget {
548
544
  fontSize: 13,
549
545
  color: selected ? color : null,
550
546
  )),
551
- Text(subtitle, style: const TextStyle(fontSize: 11, color: Colors.grey)),
547
+ Text(subtitle, style: TextStyle(fontSize: 11, color: _textSecondary)),
552
548
  ],
553
549
  ),
554
550
  ),
@@ -607,7 +603,7 @@ class _PolicyCard extends StatelessWidget {
607
603
  crossAxisAlignment: CrossAxisAlignment.start,
608
604
  children: <Widget>[
609
605
  Text(info.label, style: const TextStyle(fontWeight: FontWeight.w600, fontSize: 13)),
610
- Text(info.subtitle, style: const TextStyle(fontSize: 11, color: Colors.grey)),
606
+ Text(info.subtitle, style: TextStyle(fontSize: 11, color: _textSecondary)),
611
607
  ],
612
608
  ),
613
609
  ),
@@ -656,11 +652,11 @@ class _PolicyHint extends StatelessWidget {
656
652
  @override
657
653
  Widget build(BuildContext context) {
658
654
  final (text, color) = switch (policy) {
659
- 'deny' => ('Completely blocked — the agent cannot use this category.', Colors.red),
660
- 'require_approval' => ('Agent pauses and asks you before running.', Colors.orange),
661
- 'allow' => ('Allowed for this run — will ask again next session.', Colors.green),
662
- 'allow_always' => ('Permanently allowed — never asks again.', Colors.blue),
663
- _ => ('', Colors.grey),
655
+ 'deny' => ('Completely blocked — the agent cannot use this category.', _danger),
656
+ 'require_approval' => ('Agent pauses and asks you before running.', _warning),
657
+ 'allow' => ('Allowed for this run — will ask again next session.', _accentAlt),
658
+ 'allow_always' => ('Permanently allowed — never asks again.', _info),
659
+ _ => ('', _textSecondary),
664
660
  };
665
661
  if (text.isEmpty) return const SizedBox.shrink();
666
662
  return Text(text, style: TextStyle(fontSize: 11, color: color));
@@ -939,7 +935,7 @@ class _ToolApprovalSheetState extends State<ToolApprovalSheet>
939
935
  child: OutlinedButton.icon(
940
936
  icon: const Icon(Icons.history_rounded, size: 15),
941
937
  label: const Text('Allow session'),
942
- style: OutlinedButton.styleFrom(foregroundColor: Colors.teal),
938
+ style: OutlinedButton.styleFrom(foregroundColor: _info),
943
939
  onPressed: () => _decide('approved', 'session'),
944
940
  ),
945
941
  ),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "neoagent",
3
- "version": "2.4.4-beta.5",
3
+ "version": "2.4.4-beta.7",
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
- c2289b3fa7982a602c361af43c1bfaec
1
+ 29d7d0faaf7d97f5cfec115cfea8fcbc
@@ -37,6 +37,6 @@ _flutter.buildConfig = {"engineRevision":"77e2e94772b6eb43759e34ed1ad7da4674e19c
37
37
 
38
38
  _flutter.loader.load({
39
39
  serviceWorkerSettings: {
40
- serviceWorkerVersion: "2175258401" /* Flutter's service worker is deprecated and will be removed in a future Flutter release. */
40
+ serviceWorkerVersion: "149219383" /* Flutter's service worker is deprecated and will be removed in a future Flutter release. */
41
41
  }
42
42
  });