neoagent 2.1.18-beta.33 → 2.1.18-beta.35

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.
@@ -5,6 +5,7 @@ const STORAGE_KEYS = ['serverUrl', 'configuredServerUrl', 'token', 'pairingId',
5
5
  const protocol = createBrowserProtocol(chrome);
6
6
  let socket = null;
7
7
  let reconnectTimer = null;
8
+ let suppressSocketClose = false;
8
9
 
9
10
  function getStorage(keys = STORAGE_KEYS) {
10
11
  return chrome.storage.local.get(keys);
@@ -56,6 +57,30 @@ async function updateStatus(status) {
56
57
  chrome.runtime.sendMessage({ type: 'status', status }).catch(() => {});
57
58
  }
58
59
 
60
+ function clearReconnectTimer() {
61
+ clearTimeout(reconnectTimer);
62
+ reconnectTimer = null;
63
+ }
64
+
65
+ async function handleSocketDisconnected(ws) {
66
+ if (socket !== ws) {
67
+ return;
68
+ }
69
+ socket = null;
70
+ if (suppressSocketClose) {
71
+ suppressSocketClose = false;
72
+ return;
73
+ }
74
+ const { token } = await getStorage(['token']);
75
+ if (!token) {
76
+ await updateStatus('not_paired');
77
+ return;
78
+ }
79
+ await updateStatus('disconnected');
80
+ clearReconnectTimer();
81
+ reconnectTimer = setTimeout(() => connect().catch(() => {}), 5000);
82
+ }
83
+
59
84
  async function connect() {
60
85
  const { token } = await getStorage(['token']);
61
86
  const serverUrl = await resolveServerUrl();
@@ -69,22 +94,28 @@ async function connect() {
69
94
  if (socket) {
70
95
  try { socket.close(); } catch {}
71
96
  }
97
+ clearReconnectTimer();
98
+ suppressSocketClose = false;
72
99
 
73
- socket = new WebSocket(websocketUrl(serverUrl, token));
100
+ const ws = new WebSocket(websocketUrl(serverUrl, token));
101
+ socket = ws;
74
102
  await updateStatus('connecting');
75
103
 
76
- socket.addEventListener('open', () => {
104
+ ws.addEventListener('open', () => {
105
+ if (socket !== ws) return;
77
106
  updateStatus('connected');
78
107
  });
79
- socket.addEventListener('close', () => {
80
- updateStatus('disconnected');
81
- clearTimeout(reconnectTimer);
82
- reconnectTimer = setTimeout(() => connect().catch(() => {}), 5000);
108
+ ws.addEventListener('close', () => {
109
+ handleSocketDisconnected(ws).catch((error) => {
110
+ console.error('NeoAgent disconnect handling failed', error);
111
+ });
83
112
  });
84
- socket.addEventListener('error', () => {
85
- updateStatus('disconnected');
113
+ ws.addEventListener('error', () => {
114
+ handleSocketDisconnected(ws).catch((error) => {
115
+ console.error('NeoAgent socket error handling failed', error);
116
+ });
86
117
  });
87
- socket.addEventListener('message', (event) => {
118
+ ws.addEventListener('message', (event) => {
88
119
  handleSocketMessage(event.data).catch((error) => {
89
120
  console.error('NeoAgent command handling failed', error);
90
121
  });
@@ -160,8 +191,8 @@ async function claimPairing() {
160
191
  }
161
192
 
162
193
  async function disconnect() {
163
- clearTimeout(reconnectTimer);
164
- reconnectTimer = null;
194
+ clearReconnectTimer();
195
+ suppressSocketClose = true;
165
196
  if (socket) {
166
197
  try { socket.close(); } catch {}
167
198
  }
@@ -163,8 +163,12 @@ async function runAction(action) {
163
163
 
164
164
  async function refresh() {
165
165
  currentState = await send('getState');
166
- const status = currentState.status || 'not_paired';
166
+ const hasToken = Boolean(currentState.token || currentState.tokenId);
167
+ const status = !hasToken && currentState.status === 'disconnected'
168
+ ? 'not_paired'
169
+ : (currentState.status || 'not_paired');
167
170
  const serverUrl = currentState.serverUrl || currentState.configuredServerUrl || '';
171
+ currentState = { ...currentState, status };
168
172
 
169
173
  statusEl.textContent = STATUS_LABELS[status] || status;
170
174
  statusDotEl.dataset.status = status;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "neoagent",
3
- "version": "2.1.18-beta.33",
3
+ "version": "2.1.18-beta.35",
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":"425cfb54d01a9472b3e81d9e76fd63a4a44cfb
37
37
 
38
38
  _flutter.loader.load({
39
39
  serviceWorkerSettings: {
40
- serviceWorkerVersion: "1069383261" /* Flutter's service worker is deprecated and will be removed in a future Flutter release. */
40
+ serviceWorkerVersion: "1213638891" /* Flutter's service worker is deprecated and will be removed in a future Flutter release. */
41
41
  }
42
42
  });