neoagent 2.3.1-beta.69 → 2.3.1-beta.70

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "neoagent",
3
- "version": "2.3.1-beta.69",
3
+ "version": "2.3.1-beta.70",
4
4
  "description": "Proactive personal AI agent with no limits",
5
5
  "license": "MIT",
6
6
  "main": "server/index.js",
@@ -1 +1 @@
1
- 62727c9d64e6feb4f655dfedf5774805
1
+ 5938e78ce8065f2bdbeea2a8ccd118fb
@@ -37,6 +37,6 @@ _flutter.buildConfig = {"engineRevision":"42d3d75a56efe1a2e9902f52dc8006099c45d9
37
37
 
38
38
  _flutter.loader.load({
39
39
  serviceWorkerSettings: {
40
- serviceWorkerVersion: "3108647592" /* Flutter's service worker is deprecated and will be removed in a future Flutter release. */
40
+ serviceWorkerVersion: "2845487408" /* Flutter's service worker is deprecated and will be removed in a future Flutter release. */
41
41
  }
42
42
  });
@@ -127230,7 +127230,7 @@ r===$&&A.b()
127230
127230
  o.push(A.id(p,A.iS(!1,new A.a3(B.tE,A.dZ(new A.cU(B.h8,new A.a5p(r,p),p),p,p),p),!1,B.I,!0),p,p,0,0,0,p))}r=!1
127231
127231
  if(!s.ay)if(!s.ch){r=s.e
127232
127232
  r===$&&A.b()
127233
- r=B.b.A("mp100zt2-f179450").length!==0&&r.b}if(r){r=s.d
127233
+ r=B.b.A("mp10yphj-a1afcb2").length!==0&&r.b}if(r){r=s.d
127234
127234
  r===$&&A.b()
127235
127235
  r=r.V&&!r.a0?84:0
127236
127236
  q=s.e
@@ -131894,7 +131894,7 @@ $S:324}
131894
131894
  A.Y0.prototype={}
131895
131895
  A.R0.prototype={
131896
131896
  mJ(a){var s=this
131897
- if(B.b.A("mp100zt2-f179450").length===0||s.a!=null)return
131897
+ if(B.b.A("mp10yphj-a1afcb2").length===0||s.a!=null)return
131898
131898
  s.zY()
131899
131899
  s.a=A.pN(B.Pr,new A.b3g(s))},
131900
131900
  zY(){var s=0,r=A.l(t.H),q,p=2,o=[],n=this,m,l,k,j,i,h,g,f
@@ -131912,7 +131912,7 @@ if(!t.f.b(k)){s=1
131912
131912
  break}i=J.Z(k,"buildId")
131913
131913
  h=i==null?null:B.b.A(J.r(i))
131914
131914
  j=h==null?"":h
131915
- if(J.bi(j)===0||J.c(j,"mp100zt2-f179450")){s=1
131915
+ if(J.bi(j)===0||J.c(j,"mp10yphj-a1afcb2")){s=1
131916
131916
  break}n.b=!0
131917
131917
  n.J()
131918
131918
  p=2
@@ -131929,7 +131929,7 @@ case 2:return A.i(o.at(-1),r)}})
131929
131929
  return A.k($async$zY,r)},
131930
131930
  v_(){var s=0,r=A.l(t.H),q,p=2,o=[],n=this,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1
131931
131931
  var $async$v_=A.h(function(a2,a3){if(a2===1){o.push(a3)
131932
- s=p}for(;;)switch(s){case 0:if(B.b.A("mp100zt2-f179450").length===0||n.c){s=1
131932
+ s=p}for(;;)switch(s){case 0:if(B.b.A("mp10yphj-a1afcb2").length===0||n.c){s=1
131933
131933
  break}n.c=!0
131934
131934
  n.J()
131935
131935
  p=4
@@ -208,9 +208,30 @@ function ensureUserVmDisk(userRoot, baseImagePath) {
208
208
  return diskPath;
209
209
  }
210
210
 
211
- throw new Error(
212
- `Failed to create VM overlay with qemu-img: ${(result.stderr || result.stdout || 'unknown error').trim()}`,
213
- );
211
+ const detail = String(
212
+ result.stderr
213
+ || result.stdout
214
+ || result.error?.message
215
+ || `exit status ${result.status ?? 'unknown'}`
216
+ ).trim();
217
+ throw new Error(`Failed to create VM overlay with qemu-img: ${detail}`);
218
+ }
219
+
220
+ function formatReadinessIssues(readiness) {
221
+ if (!readiness) {
222
+ return ['VM runtime is unavailable on this host.'];
223
+ }
224
+ const issues = [];
225
+ if (!readiness.qemuAvailable) {
226
+ issues.push(`Missing QEMU binary (${readiness.qemuBinary}).`);
227
+ }
228
+ if (!readiness.qemuImgAvailable) {
229
+ issues.push(`Missing qemu-img binary (${readiness.qemuImgBinary}).`);
230
+ }
231
+ if (!readiness.baseImageExists && !readiness.downloadConfigured) {
232
+ issues.push('No VM base image is available for download or local reuse.');
233
+ }
234
+ return issues.length > 0 ? issues : ['VM runtime is unavailable on this host.'];
214
235
  }
215
236
 
216
237
  class QemuVmManager {
@@ -253,7 +274,7 @@ class QemuVmManager {
253
274
  }
254
275
 
255
276
  if (!isHttpUrl(this.baseImageUrl)) {
256
- throw new Error('VM base image is not configured. Set NEOAGENT_VM_BASE_IMAGE or NEOAGENT_VM_BASE_IMAGE_URL.');
277
+ throw new Error('VM base image is not configured and no downloadable base image URL is available.');
257
278
  }
258
279
 
259
280
  const cachePath = this.getBaseImageCachePath();
@@ -310,7 +331,7 @@ class QemuVmManager {
310
331
  }
311
332
  const readiness = this.getReadiness();
312
333
  if (!readiness.ready) {
313
- throw new Error('VM runtime is not configured on this host. Set NEOAGENT_VM_BASE_IMAGE or NEOAGENT_VM_BASE_IMAGE_URL.');
334
+ throw new Error(formatReadinessIssues(readiness).join(' '));
314
335
  }
315
336
 
316
337
  const userRoot = path.join(this.rootDir, key);
@@ -32,7 +32,19 @@ function getRuntimeValidation(runtimeManager) {
32
32
 
33
33
  if (policy.profile === 'prod' || nodeEnvIsProd) {
34
34
  if (!vmReadiness?.ready) {
35
- issues.push('prod profile requires a configured local VM runtime (QEMU + base image).');
35
+ if (!vmReadiness) {
36
+ issues.push('prod profile requires a working local VM runtime.');
37
+ } else {
38
+ if (!vmReadiness.qemuAvailable) {
39
+ issues.push(`prod profile requires QEMU (${vmReadiness.qemuBinary}) to be installed.`);
40
+ }
41
+ if (!vmReadiness.qemuImgAvailable) {
42
+ issues.push(`prod profile requires qemu-img (${vmReadiness.qemuImgBinary}) to be installed.`);
43
+ }
44
+ if (!vmReadiness.baseImageExists && !vmReadiness.downloadConfigured) {
45
+ issues.push('prod profile requires a VM base image or a downloadable base image URL.');
46
+ }
47
+ }
36
48
  }
37
49
  if (!guestTokenValidation.valid) {
38
50
  issues.push(`prod profile requires a secure NEOAGENT_VM_GUEST_TOKEN. ${guestTokenValidation.reason}`);