antenna-fyi 0.8.2 → 0.9.0

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/core.js CHANGED
@@ -35,6 +35,18 @@ export function fuzzyCoord(lat, lng) {
35
35
 
36
36
  export async function scan({ lat, lng, radius_m = 500, device_id, supabaseUrl, supabaseKey }) {
37
37
  const sb = getClient(supabaseUrl, supabaseKey);
38
+
39
+ // If no lat/lng provided, read from profile (web GPS bind scenario)
40
+ if ((lat == null || lng == null) && device_id) {
41
+ const { data: loc } = await sb.rpc("get_profile_location", { p_device_id: device_id });
42
+ if (loc?.found) {
43
+ lat = loc.lat;
44
+ lng = loc.lng;
45
+ } else {
46
+ return { count: 0, radius_m, profiles: [], message: "还没有位置信息。请先通过链接分享位置,或者发送位置消息。" };
47
+ }
48
+ }
49
+
38
50
  const fuzzy = fuzzyCoord(lat, lng);
39
51
 
40
52
  if (device_id) {
@@ -3,15 +3,14 @@
3
3
  SCAN_SCHEMA = {
4
4
  "name": "antenna_scan",
5
5
  "description": (
6
- "Scan for nearby people at a given location. Returns raw profile cards "
7
- "of nearby people — the agent should read these cards and decide who to "
8
- "recommend based on its understanding of the user."
6
+ "Scan for nearby people. If lat/lng are omitted, uses the location "
7
+ "from the user's web GPS binding (antenna.fyi/locate)."
9
8
  ),
10
9
  "parameters": {
11
10
  "type": "object",
12
11
  "properties": {
13
- "lat": {"type": "number", "description": "Latitude"},
14
- "lng": {"type": "number", "description": "Longitude"},
12
+ "lat": {"type": "number", "description": "Latitude (optional if location was shared via web)"},
13
+ "lng": {"type": "number", "description": "Longitude (optional if location was shared via web)"},
15
14
  "radius_m": {
16
15
  "type": "number",
17
16
  "description": "Search radius in meters (default: 500)",
@@ -25,7 +24,7 @@ SCAN_SCHEMA = {
25
24
  "description": "Platform name (telegram, discord, etc.)",
26
25
  },
27
26
  },
28
- "required": ["lat", "lng", "sender_id", "channel"],
27
+ "required": ["sender_id", "channel"],
29
28
  },
30
29
  }
31
30
 
@@ -76,7 +76,20 @@ def handle_scan(params: dict) -> str:
76
76
  return _ok({"nearby": [], "message": "刚刚才扫描过,稍等一会儿再试。", "rate_limited": True})
77
77
  _last_scan[did] = now
78
78
 
79
- flat, flng = _fuzzy(params["lat"], params["lng"])
79
+ lat = params.get("lat")
80
+ lng = params.get("lng")
81
+
82
+ # If no coordinates, read from profile (web GPS bind)
83
+ if lat is None or lng is None:
84
+ loc_resp = sb.rpc("get_profile_location", {"p_device_id": did}).execute()
85
+ loc = loc_resp.data if loc_resp.data else {}
86
+ if loc.get("found"):
87
+ lat = loc["lat"]
88
+ lng = loc["lng"]
89
+ else:
90
+ return _ok({"nearby": [], "message": "还没有位置信息。请先通过链接分享位置,或者发送位置消息。"})
91
+
92
+ flat, flng = _fuzzy(lat, lng)
80
93
 
81
94
  # Update own location
82
95
  sb.rpc("upsert_profile_location", {
package/lib/mcp.js CHANGED
@@ -30,10 +30,10 @@ export async function startMcpServer() {
30
30
 
31
31
  server.tool(
32
32
  "antenna_scan",
33
- "Scan for nearby people at a given location.",
33
+ "Scan for nearby people. If lat/lng are omitted, uses the location from the user's web GPS binding.",
34
34
  {
35
- lat: z.number().describe("Latitude"),
36
- lng: z.number().describe("Longitude"),
35
+ lat: z.number().optional().describe("Latitude (optional if location was shared via web)"),
36
+ lng: z.number().optional().describe("Longitude (optional if location was shared via web)"),
37
37
  radius_m: z.number().optional().default(500).describe("Search radius in meters"),
38
38
  sender_id: z.string().describe("The sender's user ID"),
39
39
  channel: z.string().describe("Channel name (telegram, whatsapp, discord, etc.)"),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "antenna-fyi",
3
- "version": "0.8.2",
3
+ "version": "0.9.0",
4
4
  "description": "Antenna — nearby people discovery. CLI + MCP server + OpenClaw skill & plugin, all in one package.",
5
5
  "type": "module",
6
6
  "bin": {