antenna-fyi 1.2.29 â 1.2.31
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 +37 -22
- package/package.json +1 -1
package/lib/cli.js
CHANGED
|
@@ -534,28 +534,26 @@ export async function handleWatch(f) {
|
|
|
534
534
|
|
|
535
535
|
const notified = loadNotified();
|
|
536
536
|
|
|
537
|
-
// Detect local agent
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
537
|
+
// Detect local agent frameworks for push notifications
|
|
538
|
+
// Push to ALL available frameworks, not just one
|
|
539
|
+
const pushMethods = new Set();
|
|
540
|
+
if (f.push) {
|
|
541
|
+
f.push.split(",").forEach(m => pushMethods.add(m.trim()));
|
|
542
|
+
} else {
|
|
541
543
|
try {
|
|
542
544
|
execSync("which openclaw", { stdio: "pipe" });
|
|
543
|
-
// Verify gateway is running
|
|
544
545
|
try {
|
|
545
546
|
execSync("openclaw gateway health", { stdio: "pipe", timeout: 5000 });
|
|
546
|
-
|
|
547
|
+
pushMethods.add("openclaw");
|
|
547
548
|
} catch { /* gateway not running */ }
|
|
548
549
|
} catch { /* openclaw not installed */ }
|
|
549
|
-
|
|
550
|
-
|
|
550
|
+
try {
|
|
551
|
+
execSync("which hermes", { stdio: "pipe" });
|
|
551
552
|
try {
|
|
552
|
-
execSync("
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
} catch { /* hermes gateway not running */ }
|
|
557
|
-
} catch { /* hermes not installed */ }
|
|
558
|
-
}
|
|
553
|
+
execSync("hermes gateway status", { stdio: "pipe", timeout: 5000 });
|
|
554
|
+
pushMethods.add("hermes");
|
|
555
|
+
} catch { /* hermes gateway not running */ }
|
|
556
|
+
} catch { /* hermes not installed */ }
|
|
559
557
|
}
|
|
560
558
|
|
|
561
559
|
// Force stdout blocking mode for non-TTY environments (Hermes exec)
|
|
@@ -573,10 +571,8 @@ export async function handleWatch(f) {
|
|
|
573
571
|
};
|
|
574
572
|
|
|
575
573
|
_log(`đĄ Watching for new matches for ${id}...`);
|
|
576
|
-
if (
|
|
577
|
-
_log(` đ
|
|
578
|
-
} else if (pushMethod === "hermes") {
|
|
579
|
-
_log(` đ Detected Hermes â will push notifications to your channel.`);
|
|
574
|
+
if (pushMethods.size > 0) {
|
|
575
|
+
_log(` đ Push targets: ${[...pushMethods].join(", ")}`);
|
|
580
576
|
} else {
|
|
581
577
|
_log(` âšī¸ No agent framework detected â notifications will print here.`);
|
|
582
578
|
}
|
|
@@ -589,9 +585,9 @@ export async function handleWatch(f) {
|
|
|
589
585
|
async function pushNotify(message) {
|
|
590
586
|
_log(message); // always print to terminal
|
|
591
587
|
|
|
592
|
-
|
|
588
|
+
// Push to ALL available frameworks
|
|
589
|
+
if (pushMethods.has("openclaw")) {
|
|
593
590
|
try {
|
|
594
|
-
// Try to get chat_id from DB for direct message send
|
|
595
591
|
const profile = await getProfile({ device_id: id });
|
|
596
592
|
const chatId = profile?.last_chat_id;
|
|
597
593
|
const parts = id.split(":");
|
|
@@ -608,7 +604,8 @@ export async function handleWatch(f) {
|
|
|
608
604
|
);
|
|
609
605
|
}
|
|
610
606
|
} catch (err) { /* terminal output is the fallback */ }
|
|
611
|
-
}
|
|
607
|
+
}
|
|
608
|
+
if (pushMethods.has("hermes")) {
|
|
612
609
|
try {
|
|
613
610
|
execSync(
|
|
614
611
|
`hermes cron create --name "Antenna notification" --run-now --once --message ${JSON.stringify(message)}`,
|
|
@@ -765,6 +762,7 @@ export async function handleWatch(f) {
|
|
|
765
762
|
});
|
|
766
763
|
|
|
767
764
|
// Keep alive â also poll every 2 minutes as fallback
|
|
765
|
+
// (Realtime may not work without SELECT policies)
|
|
768
766
|
const pollInterval = setInterval(async () => {
|
|
769
767
|
try {
|
|
770
768
|
const result = await checkMatches({ device_id: id });
|
|
@@ -785,6 +783,23 @@ export async function handleWatch(f) {
|
|
|
785
783
|
}
|
|
786
784
|
}
|
|
787
785
|
} catch { /* silent */ }
|
|
786
|
+
|
|
787
|
+
// Poll event status changes (approval/rejection)
|
|
788
|
+
try {
|
|
789
|
+
const { data: events } = await sb.rpc("get_my_event_updates", { p_device_id: id });
|
|
790
|
+
for (const ev of (events || [])) {
|
|
791
|
+
const key = `event:${ev.event_id}:${ev.status}`;
|
|
792
|
+
if (!notified.has(key)) {
|
|
793
|
+
notified.add(key);
|
|
794
|
+
saveNotified(notified);
|
|
795
|
+
if (ev.status === "active" && ev.role !== "creator" && ev.role !== "cohost") {
|
|
796
|
+
pushNotify(`â
Your application to "${ev.event_name}" was approved! You're in.`);
|
|
797
|
+
} else if (ev.status === "rejected") {
|
|
798
|
+
pushNotify(`â Your application to "${ev.event_name}" was not approved.`);
|
|
799
|
+
}
|
|
800
|
+
}
|
|
801
|
+
}
|
|
802
|
+
} catch { /* silent */ }
|
|
788
803
|
}, 2 * 60 * 1000);
|
|
789
804
|
|
|
790
805
|
// Handle Ctrl+C
|