antenna-fyi 1.2.35 → 1.2.36

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/lib/cli.js CHANGED
@@ -343,8 +343,10 @@ export async function handleStatus(f) {
343
343
  const pidFile = path.join(os.homedir(), '.antenna', 'watch.pid');
344
344
  try {
345
345
  if (existsSync(pidFile)) {
346
- const pid = parseInt(readFileSync(pidFile, 'utf8').trim());
347
- try { process.kill(pid, 0); console.log(` Watch: ✅ running (PID ${pid})`); }
346
+ const content = readFileSync(pidFile, 'utf8').trim();
347
+ const [pidStr, watchId] = content.split(':');
348
+ const pid = parseInt(pidStr);
349
+ try { process.kill(pid, 0); console.log(` Watch: ✅ running (PID ${pid}${watchId ? ', id=' + watchId : ''})`); }
348
350
  catch { console.log(' Watch: ❌ stale PID file (process dead)'); }
349
351
  } else {
350
352
  console.log(' Watch: ❌ not running');
@@ -484,10 +486,12 @@ export async function handleWatch(f) {
484
486
  const pidDir = path.join(os.homedir(), '.antenna');
485
487
  const pidFile = path.join(pidDir, 'watch.pid');
486
488
 
487
- // Check for existing watch process
489
+ // Check for existing watch process (store PID:deviceId for cross-version dedup)
488
490
  if (existsSync(pidFile)) {
489
491
  try {
490
- const existingPid = parseInt(readFileSync(pidFile, 'utf8').trim());
492
+ const content = readFileSync(pidFile, 'utf8').trim();
493
+ const [pidStr] = content.split(':');
494
+ const existingPid = parseInt(pidStr);
491
495
  process.kill(existingPid, 0); // throws if not running
492
496
  console.error(`❌ Watch already running (PID ${existingPid}). Kill it first or remove ${pidFile}`);
493
497
  process.exit(1);
@@ -499,7 +503,7 @@ export async function handleWatch(f) {
499
503
 
500
504
  try {
501
505
  if (!existsSync(pidDir)) mkdirSync(pidDir, { recursive: true });
502
- writeFileSync(pidFile, String(process.pid));
506
+ writeFileSync(pidFile, `${process.pid}:${id}`);
503
507
  } catch {}
504
508
  process.on('exit', () => { try { unlinkSync(pidFile); } catch {} });
505
509
  process.on('SIGINT', () => { try { unlinkSync(pidFile); } catch {} process.exit(0); });
@@ -155,7 +155,32 @@ def register(ctx):
155
155
  except Exception:
156
156
  pass
157
157
 
158
- # 1. Check location_events table (web GPS updates)
158
+ # 0b. Check event approval status (every 60s)
159
+ if now - _last_match_check > _MATCH_CHECK_INTERVAL and _my_device_ids:
160
+ try:
161
+ sb = _sb()
162
+ for did in list(_my_device_ids):
163
+ resp = sb.rpc("get_my_event_updates", {"p_device_id": did}).execute()
164
+ events = resp.data or []
165
+ for ev in events:
166
+ key = f"event:{ev.get('event_id')}:{ev.get('status')}"
167
+ if key in _notified_match_keys:
168
+ continue
169
+ _notified_match_keys.add(key)
170
+ status = ev.get("status")
171
+ role = ev.get("role")
172
+ name = ev.get("event_name", "活动")
173
+ if status == "active" and role not in ("creator", "cohost"):
174
+ hints.append(
175
+ f"[Antenna] ✅ 你的申请已通过!欢迎加入「{name}」"
176
+ f"请立即通知用户这个好消息!"
177
+ )
178
+ elif status == "rejected":
179
+ hints.append(
180
+ f"[Antenna] ❌ 你的申请未通过「{name}」"
181
+ )
182
+ except Exception:
183
+ pass
159
184
  now = time.time()
160
185
  if now - _last_event_check > _EVENT_CHECK_INTERVAL:
161
186
  _last_event_check = now
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "antenna-fyi",
3
- "version": "1.2.35",
3
+ "version": "1.2.36",
4
4
  "description": "Antenna — nearby people discovery. CLI + MCP server + OpenClaw skill & plugin, all in one package.",
5
5
  "type": "module",
6
6
  "bin": {