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.
Files changed (55) hide show
  1. package/README.md +4 -1
  2. package/docs/getting-started.md +9 -3
  3. package/flutter_app/assets/branding/app_icon_light_1024.png +0 -0
  4. package/flutter_app/assets/branding/app_icon_light_128.png +0 -0
  5. package/flutter_app/assets/branding/app_icon_light_192.png +0 -0
  6. package/flutter_app/assets/branding/app_icon_light_256.png +0 -0
  7. package/flutter_app/assets/branding/app_icon_light_32.png +0 -0
  8. package/flutter_app/assets/branding/app_icon_light_512.png +0 -0
  9. package/flutter_app/assets/branding/app_icon_light_64.png +0 -0
  10. package/flutter_app/assets/branding/tray_icon_light_template.png +0 -0
  11. package/flutter_app/lib/features/location/location_service.dart +3 -0
  12. package/flutter_app/lib/main.dart +1 -0
  13. package/flutter_app/lib/main_account_settings.dart +9 -33
  14. package/flutter_app/lib/main_app_shell.dart +237 -197
  15. package/flutter_app/lib/main_controller.dart +0 -25
  16. package/flutter_app/lib/main_devices.dart +2 -0
  17. package/flutter_app/lib/main_models.dart +144 -0
  18. package/flutter_app/lib/main_operations.dart +150 -19
  19. package/flutter_app/lib/main_shared.dart +642 -195
  20. package/flutter_app/lib/main_theme.dart +2 -0
  21. package/flutter_app/lib/src/android_apk_drop_zone_web.dart +3 -1
  22. package/flutter_app/lib/src/security/password_strength.dart +84 -0
  23. package/flutter_app/lib/src/theme/palette.dart +15 -15
  24. package/flutter_app/pubspec.yaml +3 -0
  25. package/flutter_app/web/favicon_light.svg +3 -0
  26. package/flutter_app/web/icons/Icon-192-light.png +0 -0
  27. package/flutter_app/web/icons/Icon-512-light.png +0 -0
  28. package/flutter_app/web/icons/Icon-maskable-192-light.png +0 -0
  29. package/flutter_app/web/icons/Icon-maskable-512-light.png +0 -0
  30. package/lib/manager.js +282 -81
  31. package/package.json +17 -3
  32. package/server/config/origins.js +3 -1
  33. package/server/db/database.js +73 -0
  34. package/server/public/.last_build_id +1 -1
  35. package/server/public/assets/AssetManifest.bin +1 -1
  36. package/server/public/assets/AssetManifest.bin.json +1 -1
  37. package/server/public/assets/assets/branding/app_icon_light_256.png +0 -0
  38. package/server/public/assets/assets/branding/app_icon_light_512.png +0 -0
  39. package/server/public/assets/assets/branding/tray_icon_light_template.png +0 -0
  40. package/server/public/assets/fonts/MaterialIcons-Regular.otf +0 -0
  41. package/server/public/favicon_light.svg +3 -0
  42. package/server/public/flutter_bootstrap.js +1 -1
  43. package/server/public/icons/Icon-192-light.png +0 -0
  44. package/server/public/icons/Icon-512-light.png +0 -0
  45. package/server/public/icons/Icon-maskable-192-light.png +0 -0
  46. package/server/public/icons/Icon-maskable-512-light.png +0 -0
  47. package/server/public/main.dart.js +68769 -68268
  48. package/server/routes/agent_profiles.js +3 -0
  49. package/server/routes/memory.js +22 -1
  50. package/server/services/account/password_policy.js +6 -1
  51. package/server/services/memory/intelligence.js +181 -0
  52. package/server/services/memory/manager.js +475 -25
  53. package/server/utils/security.js +3 -0
  54. package/server/services/memory/openhuman_uplift.test.js +0 -98
  55. 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 = Color(0xFF112B43);
8
- const Color _qrPanelGlowBlue = Color(0xFF6EDBFF);
9
- const Color _qrPanelGlowGreen = Color(0xFF58E0A2);
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 ? 14 : 24,
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 < AppBreakpoints.mobile ? 18 : 34,
1002
- viewportConstraints.maxWidth < AppBreakpoints.mobile ? 20 : 30,
1003
- viewportConstraints.maxWidth < AppBreakpoints.mobile ? 18 : 34,
1004
- viewportConstraints.maxWidth < AppBreakpoints.mobile ? 20 : 30,
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: 260),
1216
- switchInCurve: Curves.easeOutCubic,
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.015, 0.02),
1234
+ begin: const Offset(0.018, 0.026),
1221
1235
  end: Offset.zero,
1222
1236
  ).animate(animation);
1223
- return FadeTransition(
1224
- opacity: animation,
1225
- child: SlideTransition(
1226
- position: offset,
1227
- child: child,
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(controller: controller, devicesPanelKey: _devicesPanelKey),
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: 240),
1281
- switchInCurve: Curves.easeOutCubic,
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(controller: controller, devicesPanelKey: _devicesPanelKey),
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
- borderRadius: BorderRadius.circular(24),
1609
- onTap: _toggleMenu,
1610
- child: AnimatedContainer(
1611
- duration: const Duration(milliseconds: 180),
1612
- curve: Curves.easeOutCubic,
1613
- padding: const EdgeInsets.fromLTRB(12, 9, 12, 9),
1614
- decoration: BoxDecoration(
1615
- borderRadius: BorderRadius.circular(24),
1616
- gradient: LinearGradient(
1617
- colors: <Color>[
1618
- Colors.white.withValues(alpha: isMenuOpen ? 0.13 : 0.08),
1619
- _accentMuted.withValues(alpha: isMenuOpen ? 0.24 : 0.14),
1620
- _bgSecondary.withValues(alpha: isMenuOpen ? 0.92 : 0.84),
1621
- ],
1622
- begin: Alignment.topLeft,
1623
- end: Alignment.bottomRight,
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
- const SizedBox(width: 10),
1648
- Expanded(
1649
- child: Column(
1650
- crossAxisAlignment: CrossAxisAlignment.start,
1651
- mainAxisSize: MainAxisSize.min,
1652
- children: <Widget>[
1653
- Row(
1654
- children: <Widget>[
1655
- Flexible(
1656
- child: Text(
1657
- selectedAgent.displayName,
1658
- maxLines: 1,
1659
- overflow: TextOverflow.ellipsis,
1660
- style: const TextStyle(
1661
- fontSize: 13.5,
1662
- fontWeight: FontWeight.w700,
1663
- letterSpacing: -0.15,
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
- if (selectedAgent.isDefault) ...<Widget>[
1668
- const SizedBox(width: 8),
1669
- _AgentTag(
1670
- label: 'DEFAULT',
1671
- color: _accent,
1672
- foreground: _accentHover,
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
- const SizedBox(width: 8),
1693
- AnimatedRotation(
1694
- turns: isMenuOpen ? 0.5 : 0,
1695
- duration: const Duration(milliseconds: 180),
1696
- curve: Curves.easeOutCubic,
1697
- child: Icon(
1698
- Icons.keyboard_arrow_down_rounded,
1699
- size: 20,
1700
- color: isMenuOpen ? _accentHover : _textSecondary,
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
- borderRadius: BorderRadius.circular(18),
1745
- onTap: onTap,
1746
- child: Ink(
1747
- decoration: BoxDecoration(
1748
- borderRadius: BorderRadius.circular(18),
1749
- gradient: selected
1750
- ? LinearGradient(
1751
- colors: <Color>[
1752
- _accent.withValues(alpha: 0.18),
1753
- _accentMuted.withValues(alpha: 0.3),
1754
- ],
1755
- begin: Alignment.topLeft,
1756
- end: Alignment.bottomRight,
1757
- )
1758
- : null,
1759
- color: selected ? null : Colors.white.withValues(alpha: 0.025),
1760
- border: Border.all(
1761
- color: selected ? _accent.withValues(alpha: 0.5) : _borderLight,
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
- child: Padding(
1765
- padding: const EdgeInsets.fromLTRB(12, 12, 12, 12),
1766
- child: Row(
1767
- crossAxisAlignment: CrossAxisAlignment.start,
1768
- children: <Widget>[
1769
- _AgentGlyph(agent: agent, selected: selected, compact: true),
1770
- const SizedBox(width: 12),
1771
- Expanded(
1772
- child: Column(
1773
- crossAxisAlignment: CrossAxisAlignment.start,
1774
- children: <Widget>[
1775
- Row(
1776
- children: <Widget>[
1777
- Expanded(
1778
- child: Text(
1779
- agent.displayName,
1780
- maxLines: 1,
1781
- overflow: TextOverflow.ellipsis,
1782
- style: TextStyle(
1783
- color: _textPrimary,
1784
- fontSize: 13.5,
1785
- fontWeight: selected
1786
- ? FontWeight.w700
1787
- : FontWeight.w600,
1788
- letterSpacing: -0.1,
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
- if (agent.isDefault) ...<Widget>[
1793
- const SizedBox(width: 8),
1794
- _AgentTag(
1795
- label: 'DEFAULT',
1796
- color: _accent,
1797
- foreground: _accentHover,
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
- const SizedBox(width: 10),
1818
- AnimatedOpacity(
1819
- duration: const Duration(milliseconds: 140),
1820
- opacity: selected ? 1 : 0,
1821
- child: Container(
1822
- width: 24,
1823
- height: 24,
1824
- decoration: BoxDecoration(
1825
- shape: BoxShape.circle,
1826
- color: _accent.withValues(alpha: 0.2),
1827
- border: Border.all(
1828
- color: _accent.withValues(alpha: 0.45),
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 {
@@ -1,5 +1,7 @@
1
1
  part of 'main.dart';
2
2
 
3
+ // ignore_for_file: unused_element
4
+
3
5
  class _OptimizedScreenshotPayload {
4
6
  const _OptimizedScreenshotPayload({
5
7
  required this.bytes,