neoagent 2.5.2-beta.16 → 2.5.2-beta.17

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.5.2-beta.16",
3
+ "version": "2.5.2-beta.17",
4
4
  "description": "Proactive personal AI agent with no limits",
5
5
  "license": "AGPL-3.0-only",
6
6
  "main": "server/index.js",
@@ -1 +1 @@
1
- 5acb38c4eeee836df0a631d5ed3f863e
1
+ 650df5014c7ce4c65d54bc0b04a490c7
@@ -37,6 +37,6 @@ _flutter.buildConfig = {"engineRevision":"77e2e94772b6eb43759e34ed1ad7da4674e19c
37
37
 
38
38
  _flutter.loader.load({
39
39
  serviceWorkerSettings: {
40
- serviceWorkerVersion: "1920445875" /* Flutter's service worker is deprecated and will be removed in a future Flutter release. */
40
+ serviceWorkerVersion: "1231520764" /* Flutter's service worker is deprecated and will be removed in a future Flutter release. */
41
41
  }
42
42
  });
@@ -134794,7 +134794,7 @@ r===$&&A.b()
134794
134794
  p.push(A.jP(q,A.j9(!1,new A.a_(B.uG,A.d8(new A.cA(B.jt,new A.a7N(r,q),q),q,q),q),!1,B.H,!0),q,q,0,0,0,q))}r=!1
134795
134795
  if(!s.ay)if(!s.ch){r=s.e
134796
134796
  r===$&&A.b()
134797
- r=B.b.u("mqgdktti-6bc08d8").length!==0&&r.b}if(r){r=s.d
134797
+ r=B.b.u("mqge9i3q-1dd91a5").length!==0&&r.b}if(r){r=s.d
134798
134798
  r===$&&A.b()
134799
134799
  r=r.aP&&!r.ai?84:0
134800
134800
  s=s.e
@@ -140506,7 +140506,7 @@ $S:0}
140506
140506
  A.a_6.prototype={}
140507
140507
  A.SQ.prototype={
140508
140508
  nb(a){var s=this
140509
- if(B.b.u("mqgdktti-6bc08d8").length===0||s.a!=null)return
140509
+ if(B.b.u("mqge9i3q-1dd91a5").length===0||s.a!=null)return
140510
140510
  s.AU()
140511
140511
  s.a=A.on(B.RH,new A.bc8(s))},
140512
140512
  AU(){var s=0,r=A.l(t.H),q,p=2,o=[],n=this,m,l,k,j,i,h,g,f
@@ -140524,7 +140524,7 @@ if(!t.f.b(k)){s=1
140524
140524
  break}i=J.a3(k,"buildId")
140525
140525
  h=i==null?null:B.b.u(J.p(i))
140526
140526
  j=h==null?"":h
140527
- if(J.bi(j)===0||J.d(j,"mqgdktti-6bc08d8")){s=1
140527
+ if(J.bi(j)===0||J.d(j,"mqge9i3q-1dd91a5")){s=1
140528
140528
  break}n.b=!0
140529
140529
  n.F()
140530
140530
  p=2
@@ -140541,7 +140541,7 @@ case 2:return A.i(o.at(-1),r)}})
140541
140541
  return A.k($async$AU,r)},
140542
140542
  vE(){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
140543
140543
  var $async$vE=A.h(function(a2,a3){if(a2===1){o.push(a3)
140544
- s=p}for(;;)switch(s){case 0:if(B.b.u("mqgdktti-6bc08d8").length===0||n.c){s=1
140544
+ s=p}for(;;)switch(s){case 0:if(B.b.u("mqge9i3q-1dd91a5").length===0||n.c){s=1
140545
140545
  break}n.c=!0
140546
140546
  n.F()
140547
140547
  p=4
@@ -564,9 +564,16 @@ async function runConversation(engine, userId, userMessage, options = {}, _model
564
564
 
565
565
  const runTitle = generateTitle(userMessage);
566
566
  const initialRunMetadata = buildInitialRunMetadata(options);
567
- db.prepare(`INSERT OR REPLACE INTO agent_runs(
567
+ db.prepare(`INSERT INTO agent_runs(
568
568
  id, user_id, agent_id, title, status, trigger_type, trigger_source, model, metadata_json
569
- ) VALUES(?, ?, ?, ?, 'running', ?, ?, ?, ?)`).run(
569
+ ) VALUES(?, ?, ?, ?, 'running', ?, ?, ?, ?)
570
+ ON CONFLICT(id) DO UPDATE SET
571
+ status = 'running',
572
+ model = excluded.model,
573
+ updated_at = datetime('now'),
574
+ completed_at = NULL,
575
+ error = NULL,
576
+ metadata_json = COALESCE(agent_runs.metadata_json, excluded.metadata_json)`).run(
570
577
  runId,
571
578
  userId,
572
579
  agentId,
@@ -762,7 +769,14 @@ async function runConversation(engine, userId, userMessage, options = {}, _model
762
769
  let iteration = 0;
763
770
  let totalTokens = 0;
764
771
  let lastContent = '';
765
- let stepIndex = 0;
772
+ let stepIndex = Number(options.messagingRetryStepOffset || 0);
773
+ if (!Number.isFinite(stepIndex) || stepIndex < 0) {
774
+ stepIndex = 0;
775
+ }
776
+ if (options.messagingAutonomousRetryCount > 0) {
777
+ const existingStep = db.prepare('SELECT COALESCE(MAX(step_index), 0) AS maxStep FROM agent_steps WHERE run_id = ?').get(runId);
778
+ stepIndex = Math.max(stepIndex, Number(existingStep?.maxStep || 0));
779
+ }
766
780
  let failedStepCount = 0;
767
781
  let modelFailureRecoveries = 0;
768
782
  let promptMetrics = {};
@@ -2231,6 +2245,8 @@ async function runConversation(engine, userId, userMessage, options = {}, _model
2231
2245
 
2232
2246
  const retryOptions = {
2233
2247
  ...options,
2248
+ runId,
2249
+ messagingRetryStepOffset: stepIndex,
2234
2250
  messagingAutonomousRetryCount: retryCount + 1,
2235
2251
  messagingRetryState: {
2236
2252
  lastFinalMessage: String(runMeta?.lastSentMessage || options?.messagingRetryState?.lastFinalMessage || '').trim(),
@@ -2257,7 +2273,6 @@ async function runConversation(engine, userId, userMessage, options = {}, _model
2257
2273
  ].filter(Boolean).join('\n\n')
2258
2274
  }
2259
2275
  };
2260
- delete retryOptions.runId;
2261
2276
 
2262
2277
  return engine.runWithModel(userId, userMessage, retryOptions, _modelOverride);
2263
2278
  }
@@ -60,11 +60,12 @@ function evaluateProgressLiveness(runMeta, now = Date.now()) {
60
60
 
61
61
  function buildProgressNudge({ stalled = false } = {}) {
62
62
  return [
63
- 'Internal progress check for the active messaging run.',
63
+ 'Mandatory internal progress check for the active messaging run.',
64
64
  stalled
65
65
  ? 'No verified progress has been recorded for the stall threshold.'
66
66
  : 'The originating chat has not received a user-visible update for the progress threshold.',
67
- 'On the next normal agent turn, decide whether to continue silently, send a concise model-authored interim update with send_interim_update, report a real blocker, or finish with the final answer.',
67
+ 'Before starting more tool work, either send a concise model-authored interim update with send_interim_update, report a real blocker, or finish with the final answer.',
68
+ 'Do not continue silently once this check is present unless the immediate next action itself delivers a final answer or explicit no-response decision.',
68
69
  'Do not repeat previous status text and do not treat an interim update as final delivery.',
69
70
  ].join(' ');
70
71
  }