nio-cat 0.3.4 → 0.3.5

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": "nio-cat",
3
- "version": "0.3.4",
3
+ "version": "0.3.5",
4
4
  "description": "nio: fes servir Claude Code, Codex, Grok, Antigravity i Ollama del teu ordinador des del mòbil.",
5
5
  "license": "MIT",
6
6
  "author": "f.cat",
package/src/config.js CHANGED
@@ -37,6 +37,7 @@ function load() {
37
37
  }
38
38
  cfg = { ...DEFAULTS, ...cfg };
39
39
  if (!cfg.token) cfg.token = crypto.randomBytes(24).toString('base64url');
40
+ if (!cfg.id) cfg.id = crypto.randomBytes(8).toString('hex'); // identifica aquest ordinador, sigui quina sigui l'adreça
40
41
  if (!cfg.vapid) cfg.vapid = makeVapid();
41
42
  save(cfg);
42
43
  return cfg;
package/src/server.js CHANGED
@@ -169,6 +169,7 @@ function createServer({ cfg, hub, getPublicUrl, getApp }) {
169
169
  agents: await detectAll(cfg, url.searchParams.has('refresh')),
170
170
  roots: cfg.roots,
171
171
  vapidKey: cfg.vapid.publicKey,
172
+ id: cfg.id,
172
173
  };
173
174
  }
174
175
  if (p === '/api/projects' && method === 'GET') return listProjects(cfg);
package/web/app/app.js CHANGED
@@ -125,7 +125,7 @@ async function connect() {
125
125
  if (res.status === 401) throw Object.assign(new Error('La clau no és vàlida. Torna a connectar amb el codi QR.'), { fatal: true });
126
126
  if (!res.ok || !res.body) throw new Error(`Error ${res.status}`);
127
127
  state.connected = true; state.lastError = null; retry = 0;
128
- renameMachine(state.info.host); syncServiceWorker(); render(); brainsForBoard();
128
+ renameMachine(state.info.host, state.info.id); syncServiceWorker(); render(); brainsForBoard();
129
129
  const reader = res.body.getReader(), dec = new TextDecoder(); let buf = '';
130
130
  for (;;) {
131
131
  const { value, done } = await reader.read(); if (done) break;
@@ -146,7 +146,17 @@ async function connect() {
146
146
  setTimeout(() => machine() && !ctrl.signal.aborted && connect(), Math.min(15000, 1000 * 2 ** retry++));
147
147
  }
148
148
  }
149
- function renameMachine(host) { const ms = store.machines, m = ms[store.active]; if (m && host && m.name !== host) { m.name = host; store.machines = ms; } }
149
+ // Posa nom i identificador a l'ordinador actiu i fusiona els duplicats (el mateix ordinador desat amb dues adreces: wifi i 127.0.0.1).
150
+ function renameMachine(host, id) {
151
+ let ms = store.machines; const cur = ms[store.active]; if (!cur) return;
152
+ if (host) cur.name = host;
153
+ if (id) {
154
+ cur.id = id;
155
+ const keep = cur.url, list = ms.filter((m) => m === cur || m.id !== id);
156
+ if (list.length !== ms.length) { ms = list; store.active = ms.findIndex((m) => m.url === keep); }
157
+ }
158
+ store.machines = ms;
159
+ }
150
160
 
151
161
  function handle(msg) {
152
162
  const r = state.route;