antenna-fyi 1.2.12 → 1.2.14

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
@@ -178,8 +178,8 @@ export async function handleEvent(f) {
178
178
  }
179
179
 
180
180
  if (f.create || (!f.join && !f.scan && !f.end && f.name)) {
181
- if (!f.name) return console.error("Usage: antenna event --create --name 'AI Meetup' [--desc 'description'] [--og-image 'url']");
182
- const result = await createEvent({ name: f.name, device_id: f.id || null, lat: f.lat ? +f.lat : undefined, lng: f.lng ? +f.lng : undefined, description: f.desc || undefined, og_image: f['og-image'] || undefined });
181
+ if (!f.name) return console.error("Usage: antenna event --create --name 'AI Meetup' [--desc 'description'] [--og-image 'url'] [--requires-approval] [--screening-questions 'Q1|Q2']");
182
+ const result = await createEvent({ name: f.name, device_id: f.id || null, lat: f.lat ? +f.lat : undefined, lng: f.lng ? +f.lng : undefined, description: f.desc || undefined, og_image: f['og-image'] || undefined, requires_approval: f['requires-approval'] === true || f['requires-approval'] === 'true' || undefined, screening_questions: f['screening-questions'] ? f['screening-questions'].split('|') : undefined });
183
183
  console.log(`\nšŸŽ‰ Event created!\n`);
184
184
  console.log(` Name: ${result.name}`);
185
185
  console.log(` Code: ${result.code}`);
@@ -190,7 +190,7 @@ export async function handleEvent(f) {
190
190
 
191
191
  if (f.join) {
192
192
  if (!f.code || !f.id) return console.error("Usage: antenna event --join --code abc123 --id telegram:123");
193
- const result = await joinEvent({ code: f.code, device_id: f.id });
193
+ const result = await joinEvent({ code: f.code, device_id: f.id, lat: f.lat ? +f.lat : undefined, lng: f.lng ? +f.lng : undefined, application_context: f['application-context'] || undefined });
194
194
  if (result.joined) {
195
195
  console.log(`\nāœ… Joined "${result.name}" (${result.code})\n`);
196
196
  } else {
@@ -215,7 +215,7 @@ export async function handleEvent(f) {
215
215
  }
216
216
 
217
217
  console.log(`Usage:
218
- antenna event --create --name 'AI Meetup' [--id telegram:123] [--desc 'description'] [--og-image 'url']
218
+ antenna event --create --name 'AI Meetup' [--id telegram:123] [--desc 'description'] [--og-image 'url'] [--requires-approval] [--screening-questions 'Q1|Q2']
219
219
  antenna event --join --code abc123 --id telegram:123
220
220
  antenna event --scan --code abc123 [--id telegram:123]
221
221
  antenna event --checkin --code abc123 --id telegram:123 [--lat 34.05 --lng -118.24]
@@ -606,7 +606,7 @@ Usage:
606
606
  antenna pass --id telegram:123 --target telegram:789 (or --ref 1)
607
607
  antenna matches --id telegram:123
608
608
  antenna discover --id telegram:123
609
- antenna event --create --name 'AI Meetup' [--desc '...'] [--og-image 'url'] | --join --code abc123 | --scan --code abc123 | --end --code abc123 --id telegram:123 | --upload-image --code abc123 --file /path/to/image.png
609
+ antenna event --create --name 'AI Meetup' [--desc '...'] [--og-image 'url'] [--requires-approval] [--screening-questions 'Q1|Q2'] | --join --code abc123 | --scan --code abc123 | --end --code abc123 --id telegram:123 | --upload-image --code abc123 --file /path/to/image.png | --update --code abc123 --name 'New Name' | --approve --code abc123 --ref 1 | --reject --code abc123 --ref 1 | --add-host --code abc123 --ref 1
610
610
  antenna watch --id telegram:123 Watch for new matches in real-time (Ctrl+C to stop)
611
611
  antenna bind --id telegram:123
612
612
  antenna serve Start MCP server (stdio transport)
package/lib/core.js CHANGED
@@ -555,6 +555,8 @@ export async function joinEvent({ code, device_id, lat, lng, application_context
555
555
  const { data, error } = await sb.rpc("join_event", {
556
556
  p_code: code,
557
557
  p_device_id: device_id,
558
+ p_lat: (lat != null && lng != null) ? fuzzyCoord(lat, lng).lat : null,
559
+ p_lng: (lat != null && lng != null) ? fuzzyCoord(lat, lng).lng : null,
558
560
  p_application_context: application_context || null,
559
561
  });
560
562
  if (error) throw new Error(error.message);
@@ -383,6 +383,10 @@ def handle_event_create(params: dict) -> str:
383
383
  rpc_params["p_description"] = params["description"]
384
384
  if params.get("og_image"):
385
385
  rpc_params["p_og_image"] = params["og_image"]
386
+ if params.get("requires_approval"):
387
+ rpc_params["p_requires_approval"] = params["requires_approval"]
388
+ if params.get("screening_questions"):
389
+ rpc_params["p_screening_questions"] = params["screening_questions"]
386
390
 
387
391
  resp = sb.rpc("create_event", rpc_params).execute()
388
392
  data = resp.data or {}
@@ -423,6 +427,9 @@ def handle_event_join(params: dict) -> str:
423
427
  resp = sb.rpc("join_event", {
424
428
  "p_device_id": did,
425
429
  "p_code": params["code"],
430
+ "p_lat": lat,
431
+ "p_lng": lng,
432
+ "p_application_context": params.get("application_context"),
426
433
  }).execute()
427
434
  data = resp.data or {}
428
435
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "antenna-fyi",
3
- "version": "1.2.12",
3
+ "version": "1.2.14",
4
4
  "description": "Antenna — nearby people discovery. CLI + MCP server + OpenClaw skill & plugin, all in one package.",
5
5
  "type": "module",
6
6
  "bin": {
package/skill/EVENTS.md CHANGED
@@ -33,6 +33,10 @@ Create an event. Returns a shareable link (antenna.fyi/events/CODE).
33
33
  - `starts_at`, `ends_at`: optional time range (default: now to +12h)
34
34
  - `description`: optional event description
35
35
  - `og_image`: optional OG image URL for social sharing preview
36
+ - `requires_approval`: boolean, default false. If true, participants must be approved by the organizer before they become visible.
37
+ - `screening_questions`: string array. Questions to ask applicants. Agent should collect answers via conversation and submit as `application_context` when joining.
38
+
39
+ **When the user says anything about "宔批" / "approval" / "筛选" / "ęŠ„åč”Ø"**, set `requires_approval: true` and ask what screening questions they want.
36
40
 
37
41
  **GPS flow for events:** If the user doesn't provide coordinates, generate a bind link (`antenna_bind` with `purpose="event"` and `event_code`) and ask them to open it at the event location. The GPS will update the event's coordinates, NOT the user's profile.
38
42
 
@@ -79,9 +83,10 @@ Generate a GPS link for setting event location.
79
83
 
80
84
  ### When someone says "create an event"
81
85
  1. Ask for event name (required) and description (optional)
82
- 2. Call `antenna_event_create`
83
- 3. If no GPS provided, call `antenna_bind(purpose="event", event_code=CODE)` and send the link
84
- 4. Share the event URL with the user
86
+ 2. **Ask if participants need approval** ("Do you want to review and approve participants before they join?"). If yes, ask what screening questions to include.
87
+ 3. Call `antenna_event_create` with `requires_approval` and `screening_questions` if applicable
88
+ 4. If no GPS provided, call `antenna_bind(purpose="event", event_code=CODE)` and send the link
89
+ 5. Share the event URL with the user
85
90
 
86
91
  ### When someone shares an event link
87
92
  1. Extract the code from `antenna.fyi/events/CODE`
package/skill/SKILL.md CHANGED
@@ -302,6 +302,10 @@ Create an event. Returns a shareable link (antenna.fyi/events/CODE).
302
302
  - `starts_at`, `ends_at`: optional time range (default: now to +12h)
303
303
  - `description`: optional event description
304
304
  - `og_image`: optional OG image URL for social sharing preview
305
+ - `requires_approval`: boolean, default false. If true, participants need organizer approval.
306
+ - `screening_questions`: string array. Questions for applicants.
307
+
308
+ **When the user mentions "宔批" / "approval" / "筛选" / "ęŠ„åč”Ø"**, set `requires_approval: true` and ask what questions they want to screen with.
305
309
 
306
310
  **GPS flow for events:** If the user doesn't provide coordinates, generate a bind link (`antenna_bind`) and ask them to open it at the event location. Once GPS comes in, use those coordinates for the event's `lat`/`lng` — do NOT treat this as the user's personal location. The bind link GPS for event creation goes to the event, not the user's profile. Only use `antenna_checkin` when the user wants to update their own location.
307
311