antenna-openclaw-plugin 1.2.2 → 1.2.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/index.ts +32 -0
- package/package.json +1 -1
- package/skills/antenna/SKILL.md +24 -2
package/index.ts
CHANGED
|
@@ -642,6 +642,8 @@ export default function register(api: any) {
|
|
|
642
642
|
lng: { type: "number", description: "Event longitude" },
|
|
643
643
|
starts_at: { type: "string", description: "Start time ISO" },
|
|
644
644
|
ends_at: { type: "string", description: "End time ISO" },
|
|
645
|
+
description: { type: "string", description: "Event description" },
|
|
646
|
+
og_image: { type: "string", description: "OG image URL for social sharing" },
|
|
645
647
|
},
|
|
646
648
|
required: ["name", "sender_id", "channel"],
|
|
647
649
|
},
|
|
@@ -656,6 +658,36 @@ export default function register(api: any) {
|
|
|
656
658
|
p_created_by: deviceId,
|
|
657
659
|
p_starts_at: params.starts_at || new Date().toISOString(),
|
|
658
660
|
p_ends_at: params.ends_at || new Date(Date.now() + 12*60*60*1000).toISOString(),
|
|
661
|
+
p_description: params.description || null,
|
|
662
|
+
p_og_image: params.og_image || null,
|
|
663
|
+
});
|
|
664
|
+
if (error) return ok({ error: error.message });
|
|
665
|
+
return ok(data);
|
|
666
|
+
},
|
|
667
|
+
});
|
|
668
|
+
|
|
669
|
+
// ═════════════════════════════════════════════════════════════════
|
|
670
|
+
// Tool: antenna_event_end
|
|
671
|
+
// ═════════════════════════════════════════════════════════════════
|
|
672
|
+
api.registerTool({
|
|
673
|
+
name: "antenna_event_end",
|
|
674
|
+
description: "End an event. Only the creator can end it.",
|
|
675
|
+
parameters: {
|
|
676
|
+
type: "object",
|
|
677
|
+
properties: {
|
|
678
|
+
code: { type: "string", description: "Event code" },
|
|
679
|
+
sender_id: { type: "string" },
|
|
680
|
+
channel: { type: "string" },
|
|
681
|
+
},
|
|
682
|
+
required: ["code", "sender_id", "channel"],
|
|
683
|
+
},
|
|
684
|
+
async execute(_id: string, params: any) {
|
|
685
|
+
const cfg = getConfig(api);
|
|
686
|
+
const supabase = getSupabase(cfg);
|
|
687
|
+
const deviceId = deriveDeviceId(params.sender_id, params.channel);
|
|
688
|
+
const { data, error } = await supabase.rpc("end_event", {
|
|
689
|
+
p_code: params.code,
|
|
690
|
+
p_device_id: deviceId,
|
|
659
691
|
});
|
|
660
692
|
if (error) return ok({ error: error.message });
|
|
661
693
|
return ok(data);
|
package/package.json
CHANGED
package/skills/antenna/SKILL.md
CHANGED
|
@@ -66,11 +66,12 @@ cron 设完后,问用户一句:
|
|
|
66
66
|
## Tools
|
|
67
67
|
|
|
68
68
|
### `antenna_scan`
|
|
69
|
-
Scan for nearby people
|
|
69
|
+
Scan for nearby people **and events**. Returns raw profile cards + active events within 5km.
|
|
70
70
|
- `lat`, `lng`: coordinates (from `LocationLat`/`LocationLon` context, or geocoded from user input)
|
|
71
|
-
- `radius_m`: search radius in meters (default 500, max 1000)
|
|
71
|
+
- `radius_m`: search radius in meters (default 500, max 1000) for people; events search uses 5km
|
|
72
72
|
- `sender_id`: the user's id from message context
|
|
73
73
|
- `channel`: the channel name (telegram, whatsapp, discord, etc.)
|
|
74
|
+
- Returns `profiles` (nearby people) + `nearby_events` (active events with name, participants count, code)
|
|
74
75
|
|
|
75
76
|
After receiving the nearby profiles, **you decide** who to recommend:
|
|
76
77
|
- Use everything you know about the user: their SOUL.md, memory, recent conversations, interests, current mood
|
|
@@ -122,6 +123,20 @@ Get today's global recommendation — the person most similar to you worldwide.
|
|
|
122
123
|
- If all users have been recommended, returns a message saying "wait for new people"
|
|
123
124
|
- Use this in the daily cron job, or when user asks "find someone interesting globally"
|
|
124
125
|
|
|
126
|
+
### `antenna_pass`
|
|
127
|
+
Pass/skip a person. They won't be recommended again.
|
|
128
|
+
- `sender_id`, `channel`: from context
|
|
129
|
+
- `ref`: ref number from scan/discover results (e.g. '1')
|
|
130
|
+
- `target_device_id`: device ID (use ref instead when possible)
|
|
131
|
+
- Use when the user says "skip", "pass", "not interested", etc.
|
|
132
|
+
|
|
133
|
+
### `antenna_checkin`
|
|
134
|
+
Check in at a location — update your position so others can find you when they scan.
|
|
135
|
+
- `lat`, `lng`: coordinates (required)
|
|
136
|
+
- `sender_id`, `channel`: from context
|
|
137
|
+
- `place_name`: optional name of the place
|
|
138
|
+
- Use when the user says "I'm at XX" or wants to be discoverable without scanning others
|
|
139
|
+
|
|
125
140
|
## Data Transparency — what Antenna sends
|
|
126
141
|
|
|
127
142
|
Antenna only communicates with Supabase (bcudjloikmpcqwcptuyd.supabase.co) via HTTPS.
|
|
@@ -264,6 +279,13 @@ Create an event. Returns a shareable link (antenna.fyi/e/CODE).
|
|
|
264
279
|
- `sender_id`, `channel`: from context
|
|
265
280
|
- `lat`, `lng`: optional event location
|
|
266
281
|
- `starts_at`, `ends_at`: optional time range (default: now to +12h)
|
|
282
|
+
- `description`: optional event description
|
|
283
|
+
- `og_image`: optional OG image URL for social sharing preview
|
|
284
|
+
|
|
285
|
+
### `antenna_event_end`
|
|
286
|
+
End an event. Only the creator can end it.
|
|
287
|
+
- `code`: event code
|
|
288
|
+
- `sender_id`, `channel`: from context
|
|
267
289
|
|
|
268
290
|
### `antenna_event_join`
|
|
269
291
|
Join an event by code.
|