neoagent 2.1.18-beta.24 → 2.1.18-beta.26

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.
@@ -53,7 +53,7 @@ Android control supports:
53
53
  - Installing `.apk` and universal `.apks` bundles.
54
54
  - Running `adb shell` commands when higher-level tools are not enough.
55
55
 
56
- These actions run where the NeoAgent backend or runtime worker is running. If NeoAgent is deployed on a remote server, the AI controls the Android runtime attached to that server, not the laptop where you are reading the docs.
56
+ These actions run where the NeoAgent backend is running. If NeoAgent is deployed on a remote server, the AI controls the Android runtime attached to that server, not the laptop where you are reading the docs.
57
57
 
58
58
  ## Android App, Health, And Wearables
59
59
 
@@ -117,10 +117,9 @@ Runtime settings let operators choose where higher-risk work runs:
117
117
  |---|---|
118
118
  | `trusted-host` | CLI, browser, and Android tools run on the host |
119
119
  | `secure-vm` | CLI, browser, and Android tools run through the local VM backend |
120
- | `hybrid` | CLI, browser, and Android tools use a configured remote worker |
121
120
 
122
- Remote execution uses `remote_worker_base_url` and an encrypted `remote_worker_token`. Production policy can require the secure VM profile and a strong VM guest token.
121
+ Production policy can require the secure VM profile and a strong VM guest token.
123
122
 
124
- These controls matter operationally: the browser, Android emulator, local files, and shell commands run wherever the NeoAgent backend, configured worker, or paired browser extension is running, not necessarily on the computer where you are reading the docs. Logs from a different server or remote browser may not match the logs on the local machine.
123
+ These controls matter operationally: the browser, Android emulator, local files, and shell commands run wherever the NeoAgent backend, VM, or paired browser extension is running, not necessarily on the computer where you are reading the docs. Logs from a different server or remote browser may not match the logs on the local machine.
125
124
 
126
125
  For extension-only remote browser control, download `/api/browser-extension/download` from NeoAgent, unzip it on the remote machine, load the folder in `chrome://extensions`, and pair after logging in. The extension uses Chrome's debugger permission for full browser control, so Chrome will show its normal debugging warning while attached. The popup can check whether the server has a newer extension bundle, but unpacked Developer Mode installs still need a manual download and reload.
@@ -83,13 +83,11 @@ Telnyx webhook verification is configured through the environment.
83
83
 
84
84
  ## Runtime Isolation
85
85
 
86
- Runtime profile and backend selection are stored in user settings, not normally in `.env`. The available profiles are `trusted-host`, `secure-vm`, and `hybrid`. They control where CLI, browser, and Android tools run: on the host, through a local VM, or through a configured remote worker.
86
+ Runtime profile and backend selection are stored in user settings, not normally in `.env`. The main profiles are `trusted-host` and `secure-vm`. They control whether CLI, browser, and Android tools run on the host or through the local VM backend.
87
87
 
88
88
  Production policy can require the VM backend. In that case, set a strong `NEOAGENT_VM_GUEST_TOKEN` of at least 32 characters and avoid placeholder values.
89
89
 
90
- Remote worker settings are stored through the app as `remote_worker_base_url` and encrypted `remote_worker_token` values. Use an `http` or `https` worker URL only.
91
-
92
- The browser backend can also be set to `extension`. In that mode, browser actions use the paired Chrome extension connection rather than the server-local Puppeteer browser. To install only the extension on a remote machine, open NeoAgent, download `/api/browser-extension/download`, unzip it, load the folder through `chrome://extensions` with Developer mode enabled, then pair after logging in to NeoAgent. Unpacked Chrome extensions cannot replace themselves automatically; use the extension popup's update check to compare against the server bundle, then download and reload the latest ZIP when needed.
90
+ The app exposes two browser backend choices: Cloud and Chrome extension. Cloud uses the current deployment policy, which means host browser control for trusted private installs and VM browser control for isolated production installs. Chrome extension uses the paired extension connection instead of the server-local Puppeteer browser. To install only the extension on a remote machine, open NeoAgent, download `/api/browser-extension/download`, unzip it, load the folder through `chrome://extensions` with Developer mode enabled, then pair after logging in to NeoAgent. Unpacked Chrome extensions cannot replace themselves automatically; use the extension popup's update check to compare against the server bundle, then download and reload the latest ZIP when needed.
93
91
 
94
92
  ## Secrets Guidance
95
93
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "neoagent",
3
- "version": "2.1.18-beta.24",
3
+ "version": "2.1.18-beta.26",
4
4
  "description": "Proactive personal AI agent with no limits",
5
5
  "license": "MIT",
6
6
  "main": "server/index.js",
@@ -60,12 +60,14 @@
60
60
  "express": "^4.21.2",
61
61
  "express-rate-limit": "^7.5.0",
62
62
  "express-session": "^1.18.1",
63
+ "geoip-lite": "^1.4.10",
63
64
  "googleapis": "^150.0.1",
64
65
  "helmet": "^8.0.0",
65
66
  "multer": "^1.4.5-lts.1",
66
67
  "node-cron": "^3.0.3",
67
68
  "node-pty": "^1.0.0",
68
69
  "openai": "^4.85.4",
70
+ "otplib": "^13.4.0",
69
71
  "proper-lockfile": "^4.1.2",
70
72
  "puppeteer-core": "^24.40.0",
71
73
  "puppeteer-extra": "^3.3.6",
@@ -53,6 +53,41 @@ db.exec(`
53
53
  UNIQUE(user_id, key)
54
54
  );
55
55
 
56
+ CREATE TABLE IF NOT EXISTS user_two_factor (
57
+ user_id INTEGER PRIMARY KEY,
58
+ secret TEXT,
59
+ pending_secret TEXT,
60
+ enabled INTEGER DEFAULT 0,
61
+ created_at TEXT DEFAULT (datetime('now')),
62
+ enabled_at TEXT,
63
+ updated_at TEXT DEFAULT (datetime('now')),
64
+ FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
65
+ );
66
+
67
+ CREATE TABLE IF NOT EXISTS user_recovery_codes (
68
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
69
+ user_id INTEGER NOT NULL,
70
+ code_hash TEXT NOT NULL,
71
+ used_at TEXT,
72
+ created_at TEXT DEFAULT (datetime('now')),
73
+ FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
74
+ );
75
+
76
+ CREATE TABLE IF NOT EXISTS user_sessions (
77
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
78
+ user_id INTEGER NOT NULL,
79
+ session_hash TEXT UNIQUE NOT NULL,
80
+ ip_address TEXT,
81
+ user_agent TEXT,
82
+ location_label TEXT,
83
+ location_json TEXT DEFAULT '{}',
84
+ created_at TEXT DEFAULT (datetime('now')),
85
+ last_seen_at TEXT DEFAULT (datetime('now')),
86
+ expires_at TEXT,
87
+ revoked_at TEXT,
88
+ FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
89
+ );
90
+
56
91
  CREATE TABLE IF NOT EXISTS agent_runs (
57
92
  id TEXT PRIMARY KEY,
58
93
  user_id INTEGER NOT NULL,
@@ -270,6 +305,8 @@ db.exec(`
270
305
  CREATE INDEX IF NOT EXISTS idx_agent_runs_status ON agent_runs(status);
271
306
  CREATE INDEX IF NOT EXISTS idx_agent_steps_run ON agent_steps(run_id, step_index);
272
307
  CREATE INDEX IF NOT EXISTS idx_agents_user ON agents(user_id, status, updated_at DESC);
308
+ CREATE INDEX IF NOT EXISTS idx_user_recovery_codes_user ON user_recovery_codes(user_id, used_at);
309
+ CREATE INDEX IF NOT EXISTS idx_user_sessions_user ON user_sessions(user_id, revoked_at, last_seen_at DESC);
273
310
  CREATE INDEX IF NOT EXISTS idx_integration_oauth_states_state ON integration_oauth_states(state);
274
311
  CREATE INDEX IF NOT EXISTS idx_integration_oauth_states_expires ON integration_oauth_states(expires_at);
275
312
  CREATE INDEX IF NOT EXISTS idx_browser_extension_pairing_status ON browser_extension_pairing_requests(status, expires_at);
@@ -7,6 +7,7 @@ const { getRuntimeValidation } = require('../services/runtime/validation');
7
7
 
8
8
  const routeRegistry = [
9
9
  { basePath: null, modulePath: '../routes/auth' },
10
+ { basePath: '/api/account', modulePath: '../routes/account' },
10
11
  { basePath: '/api/settings', modulePath: '../routes/settings' },
11
12
  { basePath: '/api/agent-profiles', modulePath: '../routes/agent_profiles' },
12
13
  { basePath: '/api/agents', modulePath: '../routes/agents' },
@@ -24943,6 +24943,69 @@ process_runner
24943
24943
  Copyright 2020 The Flutter Authors. All rights reserved.
24944
24944
  Use of this source code is governed by a BSD-style license that can be
24945
24945
  found in the LICENSE file.
24946
+ --------------------------------------------------------------------------------
24947
+ qr
24948
+
24949
+ Copyright 2014, the Dart QR project authors. All rights reserved.
24950
+ Redistribution and use in source and binary forms, with or without
24951
+ modification, are permitted provided that the following conditions are
24952
+ met:
24953
+
24954
+ * Redistributions of source code must retain the above copyright
24955
+ notice, this list of conditions and the following disclaimer.
24956
+ * Redistributions in binary form must reproduce the above
24957
+ copyright notice, this list of conditions and the following
24958
+ disclaimer in the documentation and/or other materials provided
24959
+ with the distribution.
24960
+ * Neither the name of Google Inc. nor the names of its
24961
+ contributors may be used to endorse or promote products derived
24962
+ from this software without specific prior written permission.
24963
+
24964
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
24965
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24966
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24967
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24968
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24969
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24970
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24971
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24972
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24973
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24974
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24975
+
24976
+ --------------------------------------------------------------------------------
24977
+ qr_flutter
24978
+
24979
+ BSD 3-Clause License
24980
+
24981
+ Copyright (c) 2020, Luke Freeman.
24982
+ All rights reserved.
24983
+
24984
+ Redistribution and use in source and binary forms, with or without
24985
+ modification, are permitted provided that the following conditions are met:
24986
+
24987
+ 1. Redistributions of source code must retain the above copyright notice, this
24988
+ list of conditions and the following disclaimer.
24989
+
24990
+ 2. Redistributions in binary form must reproduce the above copyright notice,
24991
+ this list of conditions and the following disclaimer in the documentation
24992
+ and/or other materials provided with the distribution.
24993
+
24994
+ 3. Neither the name of the copyright holder nor the names of its
24995
+ contributors may be used to endorse or promote products derived from
24996
+ this software without specific prior written permission.
24997
+
24998
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
24999
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25000
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
25001
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
25002
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25003
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
25004
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
25005
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
25006
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25007
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25008
+
24946
25009
  --------------------------------------------------------------------------------
24947
25010
  rapidjson
24948
25011
 
@@ -37,6 +37,6 @@ _flutter.buildConfig = {"engineRevision":"425cfb54d01a9472b3e81d9e76fd63a4a44cfb
37
37
 
38
38
  _flutter.loader.load({
39
39
  serviceWorkerSettings: {
40
- serviceWorkerVersion: "4224103647" /* Flutter's service worker is deprecated and will be removed in a future Flutter release. */
40
+ serviceWorkerVersion: "2050277533" /* Flutter's service worker is deprecated and will be removed in a future Flutter release. */
41
41
  }
42
42
  });