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
|
@@ -4,9 +4,9 @@ part of 'main.dart';
|
|
|
4
4
|
// surface palette to create visual contrast during the auth flow. Named here
|
|
5
5
|
// so they can be updated in one place rather than hunted across the widget tree.
|
|
6
6
|
const Color _qrPanelGradientStart = Color(0xFF0A1D2E);
|
|
7
|
-
const Color _qrPanelGradientEnd
|
|
8
|
-
const Color _qrPanelGlowBlue
|
|
9
|
-
const Color _qrPanelGlowGreen
|
|
7
|
+
const Color _qrPanelGradientEnd = Color(0xFF112B43);
|
|
8
|
+
const Color _qrPanelGlowBlue = Color(0xFF6EDBFF);
|
|
9
|
+
const Color _qrPanelGlowGreen = Color(0xFF58E0A2);
|
|
10
10
|
|
|
11
11
|
class SplashView extends StatelessWidget {
|
|
12
12
|
const SplashView({super.key});
|
|
@@ -982,7 +982,9 @@ class _AuthViewState extends State<AuthView> {
|
|
|
982
982
|
),
|
|
983
983
|
child: Padding(
|
|
984
984
|
padding: EdgeInsets.all(
|
|
985
|
-
viewportConstraints.maxWidth < AppBreakpoints.mobile
|
|
985
|
+
viewportConstraints.maxWidth < AppBreakpoints.mobile
|
|
986
|
+
? 14
|
|
987
|
+
: 24,
|
|
986
988
|
),
|
|
987
989
|
child: Center(
|
|
988
990
|
child: ConstrainedBox(
|
|
@@ -998,10 +1000,22 @@ class _AuthViewState extends State<AuthView> {
|
|
|
998
1000
|
fillColor: _glassFill,
|
|
999
1001
|
child: Padding(
|
|
1000
1002
|
padding: EdgeInsets.fromLTRB(
|
|
1001
|
-
viewportConstraints.maxWidth <
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1003
|
+
viewportConstraints.maxWidth <
|
|
1004
|
+
AppBreakpoints.mobile
|
|
1005
|
+
? 18
|
|
1006
|
+
: 34,
|
|
1007
|
+
viewportConstraints.maxWidth <
|
|
1008
|
+
AppBreakpoints.mobile
|
|
1009
|
+
? 20
|
|
1010
|
+
: 30,
|
|
1011
|
+
viewportConstraints.maxWidth <
|
|
1012
|
+
AppBreakpoints.mobile
|
|
1013
|
+
? 18
|
|
1014
|
+
: 34,
|
|
1015
|
+
viewportConstraints.maxWidth <
|
|
1016
|
+
AppBreakpoints.mobile
|
|
1017
|
+
? 20
|
|
1018
|
+
: 30,
|
|
1005
1019
|
),
|
|
1006
1020
|
child: LayoutBuilder(
|
|
1007
1021
|
builder: (context, panelConstraints) {
|
|
@@ -1212,19 +1226,27 @@ class _HomeViewState extends State<HomeView> {
|
|
|
1212
1226
|
child: ClipRRect(
|
|
1213
1227
|
borderRadius: BorderRadius.circular(32),
|
|
1214
1228
|
child: AnimatedSwitcher(
|
|
1215
|
-
duration: const Duration(milliseconds:
|
|
1216
|
-
switchInCurve: Curves.
|
|
1229
|
+
duration: const Duration(milliseconds: 320),
|
|
1230
|
+
switchInCurve: Curves.easeOutBack,
|
|
1217
1231
|
switchOutCurve: Curves.easeInCubic,
|
|
1218
1232
|
transitionBuilder: (child, animation) {
|
|
1219
1233
|
final offset = Tween<Offset>(
|
|
1220
|
-
begin: const Offset(0.
|
|
1234
|
+
begin: const Offset(0.018, 0.026),
|
|
1221
1235
|
end: Offset.zero,
|
|
1222
1236
|
).animate(animation);
|
|
1223
|
-
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
|
|
1237
|
+
final scale = Tween<double>(
|
|
1238
|
+
begin: 0.992,
|
|
1239
|
+
end: 1,
|
|
1240
|
+
).animate(animation);
|
|
1241
|
+
return ScaleTransition(
|
|
1242
|
+
scale: scale,
|
|
1243
|
+
alignment: Alignment.topCenter,
|
|
1244
|
+
child: FadeTransition(
|
|
1245
|
+
opacity: animation,
|
|
1246
|
+
child: SlideTransition(
|
|
1247
|
+
position: offset,
|
|
1248
|
+
child: child,
|
|
1249
|
+
),
|
|
1228
1250
|
),
|
|
1229
1251
|
);
|
|
1230
1252
|
},
|
|
@@ -1232,7 +1254,10 @@ class _HomeViewState extends State<HomeView> {
|
|
|
1232
1254
|
key: ValueKey<AppSection>(
|
|
1233
1255
|
controller.selectedSection,
|
|
1234
1256
|
),
|
|
1235
|
-
child: _SectionBody(
|
|
1257
|
+
child: _SectionBody(
|
|
1258
|
+
controller: controller,
|
|
1259
|
+
devicesPanelKey: _devicesPanelKey,
|
|
1260
|
+
),
|
|
1236
1261
|
),
|
|
1237
1262
|
),
|
|
1238
1263
|
),
|
|
@@ -1277,12 +1302,27 @@ class _HomeViewState extends State<HomeView> {
|
|
|
1277
1302
|
child: ClipRRect(
|
|
1278
1303
|
borderRadius: BorderRadius.circular(26),
|
|
1279
1304
|
child: AnimatedSwitcher(
|
|
1280
|
-
duration: const Duration(milliseconds:
|
|
1281
|
-
switchInCurve: Curves.
|
|
1305
|
+
duration: const Duration(milliseconds: 280),
|
|
1306
|
+
switchInCurve: Curves.easeOutBack,
|
|
1282
1307
|
switchOutCurve: Curves.easeInCubic,
|
|
1308
|
+
transitionBuilder: (child, animation) {
|
|
1309
|
+
return FadeTransition(
|
|
1310
|
+
opacity: animation,
|
|
1311
|
+
child: SlideTransition(
|
|
1312
|
+
position: Tween<Offset>(
|
|
1313
|
+
begin: const Offset(0, 0.018),
|
|
1314
|
+
end: Offset.zero,
|
|
1315
|
+
).animate(animation),
|
|
1316
|
+
child: child,
|
|
1317
|
+
),
|
|
1318
|
+
);
|
|
1319
|
+
},
|
|
1283
1320
|
child: KeyedSubtree(
|
|
1284
1321
|
key: ValueKey<AppSection>(controller.selectedSection),
|
|
1285
|
-
child: _SectionBody(
|
|
1322
|
+
child: _SectionBody(
|
|
1323
|
+
controller: controller,
|
|
1324
|
+
devicesPanelKey: _devicesPanelKey,
|
|
1325
|
+
),
|
|
1286
1326
|
),
|
|
1287
1327
|
),
|
|
1288
1328
|
),
|
|
@@ -1605,106 +1645,106 @@ class _AgentSwitcherState extends State<_AgentSwitcher> {
|
|
|
1605
1645
|
child: Tooltip(
|
|
1606
1646
|
message: 'Switch agent',
|
|
1607
1647
|
child: InkWell(
|
|
1608
|
-
|
|
1609
|
-
|
|
1610
|
-
|
|
1611
|
-
|
|
1612
|
-
|
|
1613
|
-
|
|
1614
|
-
|
|
1615
|
-
|
|
1616
|
-
|
|
1617
|
-
|
|
1618
|
-
|
|
1619
|
-
|
|
1620
|
-
|
|
1621
|
-
|
|
1622
|
-
|
|
1623
|
-
|
|
1624
|
-
),
|
|
1625
|
-
border: Border.all(
|
|
1626
|
-
color: isMenuOpen
|
|
1627
|
-
? _accent.withValues(alpha: 0.65)
|
|
1628
|
-
: _borderLight,
|
|
1629
|
-
),
|
|
1630
|
-
boxShadow: isMenuOpen
|
|
1631
|
-
? <BoxShadow>[
|
|
1632
|
-
BoxShadow(
|
|
1633
|
-
color: _accent.withValues(alpha: 0.16),
|
|
1634
|
-
blurRadius: 24,
|
|
1635
|
-
offset: const Offset(0, 10),
|
|
1636
|
-
),
|
|
1637
|
-
]
|
|
1638
|
-
: null,
|
|
1639
|
-
),
|
|
1640
|
-
child: Row(
|
|
1641
|
-
children: <Widget>[
|
|
1642
|
-
_AgentGlyph(
|
|
1643
|
-
agent: selectedAgent,
|
|
1644
|
-
selected: true,
|
|
1645
|
-
compact: true,
|
|
1648
|
+
borderRadius: BorderRadius.circular(24),
|
|
1649
|
+
onTap: _toggleMenu,
|
|
1650
|
+
child: AnimatedContainer(
|
|
1651
|
+
duration: const Duration(milliseconds: 180),
|
|
1652
|
+
curve: Curves.easeOutCubic,
|
|
1653
|
+
padding: const EdgeInsets.fromLTRB(12, 9, 12, 9),
|
|
1654
|
+
decoration: BoxDecoration(
|
|
1655
|
+
borderRadius: BorderRadius.circular(24),
|
|
1656
|
+
gradient: LinearGradient(
|
|
1657
|
+
colors: <Color>[
|
|
1658
|
+
Colors.white.withValues(alpha: isMenuOpen ? 0.13 : 0.08),
|
|
1659
|
+
_accentMuted.withValues(alpha: isMenuOpen ? 0.24 : 0.14),
|
|
1660
|
+
_bgSecondary.withValues(alpha: isMenuOpen ? 0.92 : 0.84),
|
|
1661
|
+
],
|
|
1662
|
+
begin: Alignment.topLeft,
|
|
1663
|
+
end: Alignment.bottomRight,
|
|
1646
1664
|
),
|
|
1647
|
-
|
|
1648
|
-
|
|
1649
|
-
|
|
1650
|
-
|
|
1651
|
-
|
|
1652
|
-
|
|
1653
|
-
|
|
1654
|
-
|
|
1655
|
-
|
|
1656
|
-
|
|
1657
|
-
|
|
1658
|
-
|
|
1659
|
-
|
|
1660
|
-
|
|
1661
|
-
|
|
1662
|
-
|
|
1663
|
-
|
|
1665
|
+
border: Border.all(
|
|
1666
|
+
color: isMenuOpen
|
|
1667
|
+
? _accent.withValues(alpha: 0.65)
|
|
1668
|
+
: _borderLight,
|
|
1669
|
+
),
|
|
1670
|
+
boxShadow: isMenuOpen
|
|
1671
|
+
? <BoxShadow>[
|
|
1672
|
+
BoxShadow(
|
|
1673
|
+
color: _accent.withValues(alpha: 0.16),
|
|
1674
|
+
blurRadius: 24,
|
|
1675
|
+
offset: const Offset(0, 10),
|
|
1676
|
+
),
|
|
1677
|
+
]
|
|
1678
|
+
: null,
|
|
1679
|
+
),
|
|
1680
|
+
child: Row(
|
|
1681
|
+
children: <Widget>[
|
|
1682
|
+
_AgentGlyph(
|
|
1683
|
+
agent: selectedAgent,
|
|
1684
|
+
selected: true,
|
|
1685
|
+
compact: true,
|
|
1686
|
+
),
|
|
1687
|
+
const SizedBox(width: 10),
|
|
1688
|
+
Expanded(
|
|
1689
|
+
child: Column(
|
|
1690
|
+
crossAxisAlignment: CrossAxisAlignment.start,
|
|
1691
|
+
mainAxisSize: MainAxisSize.min,
|
|
1692
|
+
children: <Widget>[
|
|
1693
|
+
Row(
|
|
1694
|
+
children: <Widget>[
|
|
1695
|
+
Flexible(
|
|
1696
|
+
child: Text(
|
|
1697
|
+
selectedAgent.displayName,
|
|
1698
|
+
maxLines: 1,
|
|
1699
|
+
overflow: TextOverflow.ellipsis,
|
|
1700
|
+
style: const TextStyle(
|
|
1701
|
+
fontSize: 13.5,
|
|
1702
|
+
fontWeight: FontWeight.w700,
|
|
1703
|
+
letterSpacing: -0.15,
|
|
1704
|
+
),
|
|
1664
1705
|
),
|
|
1665
1706
|
),
|
|
1666
|
-
|
|
1667
|
-
|
|
1668
|
-
|
|
1669
|
-
|
|
1670
|
-
|
|
1671
|
-
|
|
1672
|
-
|
|
1673
|
-
|
|
1707
|
+
if (selectedAgent.isDefault) ...<Widget>[
|
|
1708
|
+
const SizedBox(width: 8),
|
|
1709
|
+
_AgentTag(
|
|
1710
|
+
label: 'DEFAULT',
|
|
1711
|
+
color: _accent,
|
|
1712
|
+
foreground: _accentHover,
|
|
1713
|
+
),
|
|
1714
|
+
],
|
|
1674
1715
|
],
|
|
1675
|
-
],
|
|
1676
|
-
),
|
|
1677
|
-
const SizedBox(height: 2),
|
|
1678
|
-
Text(
|
|
1679
|
-
_agentSwitcherSubtitle(selectedAgent),
|
|
1680
|
-
maxLines: 1,
|
|
1681
|
-
overflow: TextOverflow.ellipsis,
|
|
1682
|
-
style: TextStyle(
|
|
1683
|
-
color: _textSecondary,
|
|
1684
|
-
fontSize: 12,
|
|
1685
|
-
fontWeight: FontWeight.w600,
|
|
1686
|
-
height: 1.2,
|
|
1687
1716
|
),
|
|
1688
|
-
|
|
1689
|
-
|
|
1717
|
+
const SizedBox(height: 2),
|
|
1718
|
+
Text(
|
|
1719
|
+
_agentSwitcherSubtitle(selectedAgent),
|
|
1720
|
+
maxLines: 1,
|
|
1721
|
+
overflow: TextOverflow.ellipsis,
|
|
1722
|
+
style: TextStyle(
|
|
1723
|
+
color: _textSecondary,
|
|
1724
|
+
fontSize: 12,
|
|
1725
|
+
fontWeight: FontWeight.w600,
|
|
1726
|
+
height: 1.2,
|
|
1727
|
+
),
|
|
1728
|
+
),
|
|
1729
|
+
],
|
|
1730
|
+
),
|
|
1690
1731
|
),
|
|
1691
|
-
|
|
1692
|
-
|
|
1693
|
-
|
|
1694
|
-
|
|
1695
|
-
|
|
1696
|
-
|
|
1697
|
-
|
|
1698
|
-
|
|
1699
|
-
|
|
1700
|
-
|
|
1732
|
+
const SizedBox(width: 8),
|
|
1733
|
+
AnimatedRotation(
|
|
1734
|
+
turns: isMenuOpen ? 0.5 : 0,
|
|
1735
|
+
duration: const Duration(milliseconds: 180),
|
|
1736
|
+
curve: Curves.easeOutCubic,
|
|
1737
|
+
child: Icon(
|
|
1738
|
+
Icons.keyboard_arrow_down_rounded,
|
|
1739
|
+
size: 20,
|
|
1740
|
+
color: isMenuOpen ? _accentHover : _textSecondary,
|
|
1741
|
+
),
|
|
1701
1742
|
),
|
|
1702
|
-
|
|
1703
|
-
|
|
1743
|
+
],
|
|
1744
|
+
),
|
|
1704
1745
|
),
|
|
1705
1746
|
),
|
|
1706
1747
|
),
|
|
1707
|
-
),
|
|
1708
1748
|
);
|
|
1709
1749
|
},
|
|
1710
1750
|
);
|
|
@@ -1741,105 +1781,105 @@ class _AgentSwitcherMenuItem extends StatelessWidget {
|
|
|
1741
1781
|
child: Tooltip(
|
|
1742
1782
|
message: agent.displayName,
|
|
1743
1783
|
child: InkWell(
|
|
1744
|
-
|
|
1745
|
-
|
|
1746
|
-
|
|
1747
|
-
|
|
1748
|
-
|
|
1749
|
-
|
|
1750
|
-
|
|
1751
|
-
|
|
1752
|
-
|
|
1753
|
-
|
|
1754
|
-
|
|
1755
|
-
|
|
1756
|
-
|
|
1757
|
-
|
|
1758
|
-
|
|
1759
|
-
|
|
1760
|
-
|
|
1761
|
-
|
|
1784
|
+
borderRadius: BorderRadius.circular(18),
|
|
1785
|
+
onTap: onTap,
|
|
1786
|
+
child: Ink(
|
|
1787
|
+
decoration: BoxDecoration(
|
|
1788
|
+
borderRadius: BorderRadius.circular(18),
|
|
1789
|
+
gradient: selected
|
|
1790
|
+
? LinearGradient(
|
|
1791
|
+
colors: <Color>[
|
|
1792
|
+
_accent.withValues(alpha: 0.18),
|
|
1793
|
+
_accentMuted.withValues(alpha: 0.3),
|
|
1794
|
+
],
|
|
1795
|
+
begin: Alignment.topLeft,
|
|
1796
|
+
end: Alignment.bottomRight,
|
|
1797
|
+
)
|
|
1798
|
+
: null,
|
|
1799
|
+
color: selected ? null : Colors.white.withValues(alpha: 0.025),
|
|
1800
|
+
border: Border.all(
|
|
1801
|
+
color: selected ? _accent.withValues(alpha: 0.5) : _borderLight,
|
|
1802
|
+
),
|
|
1762
1803
|
),
|
|
1763
|
-
|
|
1764
|
-
|
|
1765
|
-
|
|
1766
|
-
|
|
1767
|
-
|
|
1768
|
-
|
|
1769
|
-
|
|
1770
|
-
|
|
1771
|
-
|
|
1772
|
-
|
|
1773
|
-
|
|
1774
|
-
|
|
1775
|
-
|
|
1776
|
-
|
|
1777
|
-
|
|
1778
|
-
|
|
1779
|
-
|
|
1780
|
-
|
|
1781
|
-
|
|
1782
|
-
|
|
1783
|
-
|
|
1784
|
-
|
|
1785
|
-
|
|
1786
|
-
|
|
1787
|
-
|
|
1788
|
-
|
|
1804
|
+
child: Padding(
|
|
1805
|
+
padding: const EdgeInsets.fromLTRB(12, 12, 12, 12),
|
|
1806
|
+
child: Row(
|
|
1807
|
+
crossAxisAlignment: CrossAxisAlignment.start,
|
|
1808
|
+
children: <Widget>[
|
|
1809
|
+
_AgentGlyph(agent: agent, selected: selected, compact: true),
|
|
1810
|
+
const SizedBox(width: 12),
|
|
1811
|
+
Expanded(
|
|
1812
|
+
child: Column(
|
|
1813
|
+
crossAxisAlignment: CrossAxisAlignment.start,
|
|
1814
|
+
children: <Widget>[
|
|
1815
|
+
Row(
|
|
1816
|
+
children: <Widget>[
|
|
1817
|
+
Expanded(
|
|
1818
|
+
child: Text(
|
|
1819
|
+
agent.displayName,
|
|
1820
|
+
maxLines: 1,
|
|
1821
|
+
overflow: TextOverflow.ellipsis,
|
|
1822
|
+
style: TextStyle(
|
|
1823
|
+
color: _textPrimary,
|
|
1824
|
+
fontSize: 13.5,
|
|
1825
|
+
fontWeight: selected
|
|
1826
|
+
? FontWeight.w700
|
|
1827
|
+
: FontWeight.w600,
|
|
1828
|
+
letterSpacing: -0.1,
|
|
1829
|
+
),
|
|
1789
1830
|
),
|
|
1790
1831
|
),
|
|
1791
|
-
|
|
1792
|
-
|
|
1793
|
-
|
|
1794
|
-
|
|
1795
|
-
|
|
1796
|
-
|
|
1797
|
-
|
|
1798
|
-
|
|
1832
|
+
if (agent.isDefault) ...<Widget>[
|
|
1833
|
+
const SizedBox(width: 8),
|
|
1834
|
+
_AgentTag(
|
|
1835
|
+
label: 'DEFAULT',
|
|
1836
|
+
color: _accent,
|
|
1837
|
+
foreground: _accentHover,
|
|
1838
|
+
),
|
|
1839
|
+
],
|
|
1799
1840
|
],
|
|
1800
|
-
],
|
|
1801
|
-
),
|
|
1802
|
-
const SizedBox(height: 4),
|
|
1803
|
-
Text(
|
|
1804
|
-
_agentSwitcherSubtitle(agent),
|
|
1805
|
-
maxLines: 2,
|
|
1806
|
-
overflow: TextOverflow.ellipsis,
|
|
1807
|
-
style: TextStyle(
|
|
1808
|
-
color: _textSecondary,
|
|
1809
|
-
fontSize: 12,
|
|
1810
|
-
height: 1.3,
|
|
1811
|
-
fontWeight: FontWeight.w600,
|
|
1812
1841
|
),
|
|
1813
|
-
|
|
1814
|
-
|
|
1842
|
+
const SizedBox(height: 4),
|
|
1843
|
+
Text(
|
|
1844
|
+
_agentSwitcherSubtitle(agent),
|
|
1845
|
+
maxLines: 2,
|
|
1846
|
+
overflow: TextOverflow.ellipsis,
|
|
1847
|
+
style: TextStyle(
|
|
1848
|
+
color: _textSecondary,
|
|
1849
|
+
fontSize: 12,
|
|
1850
|
+
height: 1.3,
|
|
1851
|
+
fontWeight: FontWeight.w600,
|
|
1852
|
+
),
|
|
1853
|
+
),
|
|
1854
|
+
],
|
|
1855
|
+
),
|
|
1815
1856
|
),
|
|
1816
|
-
|
|
1817
|
-
|
|
1818
|
-
|
|
1819
|
-
|
|
1820
|
-
|
|
1821
|
-
|
|
1822
|
-
|
|
1823
|
-
|
|
1824
|
-
|
|
1825
|
-
|
|
1826
|
-
|
|
1827
|
-
|
|
1828
|
-
|
|
1857
|
+
const SizedBox(width: 10),
|
|
1858
|
+
AnimatedOpacity(
|
|
1859
|
+
duration: const Duration(milliseconds: 140),
|
|
1860
|
+
opacity: selected ? 1 : 0,
|
|
1861
|
+
child: Container(
|
|
1862
|
+
width: 24,
|
|
1863
|
+
height: 24,
|
|
1864
|
+
decoration: BoxDecoration(
|
|
1865
|
+
shape: BoxShape.circle,
|
|
1866
|
+
color: _accent.withValues(alpha: 0.2),
|
|
1867
|
+
border: Border.all(
|
|
1868
|
+
color: _accent.withValues(alpha: 0.45),
|
|
1869
|
+
),
|
|
1870
|
+
),
|
|
1871
|
+
child: Icon(
|
|
1872
|
+
Icons.check_rounded,
|
|
1873
|
+
size: 15,
|
|
1874
|
+
color: _accentHover,
|
|
1829
1875
|
),
|
|
1830
|
-
),
|
|
1831
|
-
child: Icon(
|
|
1832
|
-
Icons.check_rounded,
|
|
1833
|
-
size: 15,
|
|
1834
|
-
color: _accentHover,
|
|
1835
1876
|
),
|
|
1836
1877
|
),
|
|
1837
|
-
|
|
1838
|
-
|
|
1878
|
+
],
|
|
1879
|
+
),
|
|
1839
1880
|
),
|
|
1840
1881
|
),
|
|
1841
1882
|
),
|
|
1842
|
-
),
|
|
1843
1883
|
),
|
|
1844
1884
|
);
|
|
1845
1885
|
}
|
|
@@ -2478,31 +2478,6 @@ class NeoAgentController extends ChangeNotifier {
|
|
|
2478
2478
|
);
|
|
2479
2479
|
notifyListeners();
|
|
2480
2480
|
} catch (_) {}
|
|
2481
|
-
|
|
2482
|
-
Future<String> fetchMemoryTransferPrompt() async {
|
|
2483
|
-
final response = await _backendClient.fetchMemoryTransferPrompt(
|
|
2484
|
-
backendUrl,
|
|
2485
|
-
agentId: _scopedAgentId,
|
|
2486
|
-
);
|
|
2487
|
-
return response['prompt']?.toString() ?? '';
|
|
2488
|
-
}
|
|
2489
|
-
|
|
2490
|
-
Future<MemoryTransferImportResult> importMemoryTransfer(
|
|
2491
|
-
String text, {
|
|
2492
|
-
bool applyBehaviorNotes = true,
|
|
2493
|
-
bool applyCoreMemory = true,
|
|
2494
|
-
}) async {
|
|
2495
|
-
final response = await _backendClient.importMemoryTransfer(
|
|
2496
|
-
backendUrl,
|
|
2497
|
-
text: text,
|
|
2498
|
-
applyBehaviorNotes: applyBehaviorNotes,
|
|
2499
|
-
applyCoreMemory: applyCoreMemory,
|
|
2500
|
-
agentId: _scopedAgentId,
|
|
2501
|
-
);
|
|
2502
|
-
final result = MemoryTransferImportResult.fromJson(response);
|
|
2503
|
-
await refreshMemory();
|
|
2504
|
-
return result;
|
|
2505
|
-
}
|
|
2506
2481
|
}
|
|
2507
2482
|
|
|
2508
2483
|
Future<void> refreshMessaging() async {
|