pi-sync-system-theme 0.2.2 → 0.2.4

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.
Files changed (2) hide show
  1. package/index.ts +10 -21
  2. package/package.json +1 -1
package/index.ts CHANGED
@@ -61,7 +61,7 @@ const DEFAULT_CONFIG: Config = {
61
61
  const GLOBAL_CONFIG_PATH = path.join(os.homedir(), ".pi", "agent", "system-theme.json");
62
62
  const DETECTION_TIMEOUT_MS = 1200;
63
63
  const MIN_POLL_MS = 1000;
64
- const OSC11_QUERY_TIMEOUT_MS = 1200;
64
+ const OSC11_QUERY_TIMEOUT_MS = 3200;
65
65
  const OSC11_MIN_INTERVAL_MS = 15_000;
66
66
  const OSC11_DISABLE_AFTER_FAILURES = 3;
67
67
  const OSC11_DISABLE_COOLDOWN_MS = 60_000;
@@ -211,33 +211,23 @@ const OSC11_QUERY_SCRIPT = `
211
211
  'use strict';
212
212
  const fs = require('fs');
213
213
 
214
- const O_NONBLOCK = fs.constants.O_NONBLOCK ?? 0;
215
214
  let fd;
216
- try { fd = fs.openSync('/dev/tty', fs.constants.O_RDWR | fs.constants.O_NOCTTY | O_NONBLOCK); }
215
+ try { fd = fs.openSync('/dev/tty', fs.constants.O_RDWR | fs.constants.O_NOCTTY); }
217
216
  catch { process.exit(1); }
218
217
 
219
- // Send OSC 11 query.
220
- // Use ST terminator for better compatibility with tmux passthrough.
218
+ // Send OSC 11 query (ST terminator)
221
219
  try { fs.writeSync(fd, '\x1b]11;?\x1b\\'); }
222
220
  catch { try { fs.closeSync(fd); } catch {} process.exit(1); }
223
221
 
224
222
  const buf = Buffer.alloc(1024);
225
223
  let response = '';
226
- const deadline = Date.now() + 1000;
224
+ const deadline = Date.now() + 2500;
227
225
 
228
226
  function tryRead() {
229
- while (true) {
230
- try {
231
- const n = fs.readSync(fd, buf, 0, buf.length, null);
232
- if (n <= 0) return;
233
- response += buf.toString('utf8', 0, n);
234
- if (response.length > 8192) response = response.slice(-4096);
235
- } catch (err) {
236
- const code = err && err.code;
237
- if (code === 'EAGAIN' || code === 'EWOULDBLOCK') return;
238
- return;
239
- }
240
- }
227
+ try {
228
+ const n = fs.readSync(fd, buf, 0, buf.length);
229
+ if (n > 0) response += buf.toString('utf8', 0, n);
230
+ } catch {}
241
231
  }
242
232
 
243
233
  function to8Bit(hex) {
@@ -249,8 +239,7 @@ function to8Bit(hex) {
249
239
 
250
240
  function done() {
251
241
  try { fs.closeSync(fd); } catch {}
252
- // Keep parser permissive: tmux may wrap control sequences, but rgb payload remains stable.
253
- const m = response.match(/rgb:([0-9a-fA-F]{2,4})\\/([0-9a-fA-F]{2,4})\\/([0-9a-fA-F]{2,4})/);
242
+ const m = response.match(/rgb:([0-9a-fA-F]{2,8})\\/([0-9a-fA-F]{2,8})\\/([0-9a-fA-F]{2,8})/);
254
243
  if (m) {
255
244
  const r = to8Bit(m[1]);
256
245
  const g = to8Bit(m[2]);
@@ -264,7 +253,7 @@ function done() {
264
253
  function poll() {
265
254
  tryRead();
266
255
  if (response.includes('rgb:') || Date.now() > deadline) return done();
267
- setTimeout(poll, 16);
256
+ setTimeout(poll, 20);
268
257
  }
269
258
 
270
259
  poll();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-sync-system-theme",
3
- "version": "0.2.2",
3
+ "version": "0.2.4",
4
4
  "description": "Sync pi theme with system appearance — works locally and over SSH via OSC 11 terminal queries",
5
5
  "keywords": [
6
6
  "pi-package",