neoagent 2.0.6 → 2.0.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.
package/README.md CHANGED
@@ -10,7 +10,7 @@
10
10
  [![License](https://img.shields.io/badge/License-MIT-a855f7?style=flat-square)](LICENSE)
11
11
 
12
12
  A self-hosted, proactive AI agent with a Flutter client for web and Android.
13
- Connects to OpenAI, xAI, Google, and local Ollama with `qwen3.5:4b`.
13
+ Connects to OpenAI, xAI, Google, and local Ollama.
14
14
  Runs tasks on a schedule, controls a browser, manages files, and talks to you over Telegram, Discord, or WhatsApp.
15
15
 
16
16
  ```bash
@@ -18,11 +18,6 @@ npm install -g neoagent
18
18
  neoagent install
19
19
  ```
20
20
 
21
- From source:
22
- ```bash
23
- bash <(curl -fsSL https://raw.githubusercontent.com/NeoLabs-Systems/NeoAgent/main/install.sh)
24
- ```
25
-
26
21
  Manage the service:
27
22
  ```bash
28
23
  neoagent status
@@ -30,21 +25,6 @@ neoagent update
30
25
  neoagent logs
31
26
  ```
32
27
 
33
- Build the Flutter web client:
34
- ```bash
35
- npm run flutter:build:web
36
- ```
37
-
38
- The installer and npm package ship the bundled web client from `server/public`, so Flutter is only needed when you want to rebuild the frontend locally.
39
-
40
- Local development helpers live in `dev/`:
41
- ```bash
42
- ./dev/backend.sh
43
- ./dev/web.sh
44
- ./dev/stack.sh
45
- ./dev/test.sh
46
- ```
47
-
48
28
  ---
49
29
 
50
30
  [⚙️ Configuration](docs/configuration.md) · [🧰 Skills](docs/skills.md) · [🐛 Issues](https://github.com/NeoLabs-Systems/NeoAgent/issues)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "neoagent",
3
- "version": "2.0.6",
3
+ "version": "2.0.7",
4
4
  "description": "Proactive personal AI agent with no limits",
5
5
  "license": "MIT",
6
6
  "main": "server/index.js",
@@ -37,6 +37,6 @@ _flutter.buildConfig = {"engineRevision":"052f31d115eceda8cbff1b3481fcde4330c4ae
37
37
 
38
38
  _flutter.loader.load({
39
39
  serviceWorkerSettings: {
40
- serviceWorkerVersion: "1176812150" /* Flutter's service worker is deprecated and will be removed in a future Flutter release. */
40
+ serviceWorkerVersion: "1494853266" /* Flutter's service worker is deprecated and will be removed in a future Flutter release. */
41
41
  }
42
42
  });
@@ -1,5 +1,6 @@
1
1
  const express = require('express');
2
2
  const fs = require('fs');
3
+ const path = require('path');
3
4
  const router = express.Router();
4
5
  const db = require('../db/database');
5
6
  const { requireAuth } = require('../middleware/auth');
@@ -28,6 +29,17 @@ function readUpdateStatus() {
28
29
  }
29
30
  }
30
31
 
32
+ function writeUpdateStatus(patch) {
33
+ const next = {
34
+ ...readUpdateStatus(),
35
+ ...patch,
36
+ updatedAt: new Date().toISOString()
37
+ };
38
+ fs.mkdirSync(path.dirname(UPDATE_STATUS_FILE), { recursive: true });
39
+ fs.writeFileSync(UPDATE_STATUS_FILE, JSON.stringify(next, null, 2));
40
+ return next;
41
+ }
42
+
31
43
  // Get supported models metadata
32
44
  router.get('/meta/models', async (req, res) => {
33
45
  const { getSupportedModels } = require('../services/ai/models');
@@ -221,6 +233,16 @@ router.post('/update', (req, res) => {
221
233
  return res.status(409).json({ success: false, error: 'An update is already running' });
222
234
  }
223
235
  console.log('[Settings] Triggering update-runner...');
236
+ writeUpdateStatus({
237
+ state: 'running',
238
+ progress: 1,
239
+ phase: 'starting',
240
+ message: 'Launching update job',
241
+ startedAt: new Date().toISOString(),
242
+ completedAt: null,
243
+ changelog: [],
244
+ logs: []
245
+ });
224
246
 
225
247
  // Spawn detached runner so status survives server restarts.
226
248
  const child = spawn(process.execPath, ['scripts/update-runner.js'], {
@@ -229,6 +251,16 @@ router.post('/update', (req, res) => {
229
251
  cwd: APP_DIR
230
252
  });
231
253
 
254
+ child.once('error', (error) => {
255
+ writeUpdateStatus({
256
+ state: 'failed',
257
+ progress: 100,
258
+ phase: 'failed',
259
+ message: `Failed to launch update job: ${error.message}`,
260
+ completedAt: new Date().toISOString()
261
+ });
262
+ });
263
+
232
264
  child.unref();
233
265
  res.json({ success: true, message: 'Update triggered', pid: child.pid });
234
266
  });