gws-axi 0.16.2 → 0.17.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/README.md CHANGED
@@ -120,7 +120,8 @@ gws-axi doctor # prerequisites + setup + live API prob
120
120
  gws-axi calendar events # upcoming 7 days on primary
121
121
  gws-axi calendar events --from 2026-04-20T00:00 --to 2026-04-27T00:00
122
122
  gws-axi calendar events --fields attendees,location,status
123
- gws-axi calendar get <event-id> # full detail + attendees
123
+ gws-axi calendar events --fields join_url,conference # provider-uniform join link (Meet/Zoom/Teams/Webex)
124
+ gws-axi calendar get <event-id> # full detail + attendees + conference block
124
125
  gws-axi calendar get <event-id> --full # don't truncate description
125
126
  gws-axi calendar calendars # list calendars accessible to this account
126
127
  gws-axi calendar search --query "standup" # primary calendar by default
@@ -0,0 +1,61 @@
1
+ import type { calendar_v3 } from "googleapis";
2
+ /**
3
+ * Conferencing / join-URL resolution for calendar events.
4
+ *
5
+ * Google populates the structured `conferenceData` object ONLY when the
6
+ * conference was created through a Google-Calendar-integrated path — native
7
+ * Google Meet, or a third-party add-on installed *in Google Calendar* (e.g.
8
+ * the Zoom-for-GSuite add-on). A Teams/Zoom/Webex meeting that is organized
9
+ * externally and merely *synced onto* the calendar via invite arrives as a
10
+ * plain event: `location` gets a human label ("Microsoft Teams Meeting"), the
11
+ * join URL lands in the `description` body, and `conferenceData` stays null.
12
+ *
13
+ * So a genuinely provider-uniform join URL needs a resolution chain, not a
14
+ * single field:
15
+ * 1. conferenceData video entryPoint uri (Meet + add-on Zoom/Teams/Webex)
16
+ * 2. hangoutLink (legacy Meet, pre-conferenceData)
17
+ * 3. provider-anchored URL scraped from description, then location
18
+ * (externally-organized meetings)
19
+ *
20
+ * The `source` field discloses which link won so a consumer can trust a
21
+ * structured hit and treat a scraped one as best-effort
22
+ * ([principles.md#surface-completeness-limits]).
23
+ */
24
+ export type ConferenceSource = "conferenceData" | "hangoutLink" | "description" | "location";
25
+ export interface ConferenceEntryPoint {
26
+ type: string;
27
+ uri: string;
28
+ label: string;
29
+ }
30
+ export interface ConferenceInfo {
31
+ /** Provider label, e.g. "Google Meet" / "Zoom" / "Microsoft Teams" / "Webex". "" if unknown. */
32
+ provider: string;
33
+ /** Best single tappable join URL. "" when none could be resolved. */
34
+ joinUrl: string;
35
+ /** Which path in the resolution chain produced `joinUrl`. "" when joinUrl is "". */
36
+ source: ConferenceSource | "";
37
+ /** Structured entry points from conferenceData (video/phone/sip/more). Empty when absent. */
38
+ entryPoints: ConferenceEntryPoint[];
39
+ /** True when `joinUrl` came from a description/location text scrape (best-effort, unverified). */
40
+ fromScrape: boolean;
41
+ }
42
+ /** Identify the conferencing provider from a join URL's host. "" if unrecognized. */
43
+ export declare function detectProvider(url: string): string;
44
+ /**
45
+ * Find the first provider-anchored join URL in a block of free text.
46
+ * Returns the leftmost match across all provider patterns (so the "Join: <url>"
47
+ * line near the top of a Teams/Zoom boilerplate block wins over deeper links),
48
+ * or null when nothing matches.
49
+ */
50
+ export declare function scrapeJoinUrl(text: string): {
51
+ provider: string;
52
+ url: string;
53
+ } | null;
54
+ /**
55
+ * Normalize an event's conferencing into a provider-uniform shape by walking
56
+ * the resolution chain (structured → hangoutLink → description/location scrape).
57
+ * Returns null when the event carries no conferencing signal at all.
58
+ */
59
+ export declare function extractConference(event: calendar_v3.Schema$Event): ConferenceInfo | null;
60
+ /** Best single tappable join URL for an event, or "" when none resolves. */
61
+ export declare function resolveJoinUrl(event: calendar_v3.Schema$Event): string;
@@ -0,0 +1,112 @@
1
+ const PROVIDER_PATTERNS = [
2
+ { provider: "Google Meet", re: /https:\/\/meet\.google\.com\/[a-z0-9-]+/i },
3
+ { provider: "Zoom", re: /https:\/\/[\w.-]*zoom\.us\/(?:j|w|my)\/[^\s<>"]+/i },
4
+ {
5
+ provider: "Microsoft Teams",
6
+ re: /https:\/\/teams\.(?:microsoft|live)\.com\/(?:meet|l\/meetup-join)\/[^\s<>"]+/i,
7
+ },
8
+ {
9
+ provider: "Webex",
10
+ re: /https:\/\/[\w.-]*webex\.com\/(?:meet\/[^\s<>"]+|[^\s<>"/]+\/j\.php\?[^\s<>"]+)/i,
11
+ },
12
+ ];
13
+ /** Identify the conferencing provider from a join URL's host. "" if unrecognized. */
14
+ export function detectProvider(url) {
15
+ if (/meet\.google\.com/i.test(url))
16
+ return "Google Meet";
17
+ if (/zoom\.us/i.test(url))
18
+ return "Zoom";
19
+ if (/teams\.(?:microsoft|live)\.com/i.test(url))
20
+ return "Microsoft Teams";
21
+ if (/webex\.com/i.test(url))
22
+ return "Webex";
23
+ return "";
24
+ }
25
+ /**
26
+ * Find the first provider-anchored join URL in a block of free text.
27
+ * Returns the leftmost match across all provider patterns (so the "Join: <url>"
28
+ * line near the top of a Teams/Zoom boilerplate block wins over deeper links),
29
+ * or null when nothing matches.
30
+ */
31
+ export function scrapeJoinUrl(text) {
32
+ if (!text)
33
+ return null;
34
+ let best = null;
35
+ for (const { provider, re } of PROVIDER_PATTERNS) {
36
+ const m = re.exec(text);
37
+ if (m && (best === null || m.index < best.index)) {
38
+ best = { provider, url: m[0], index: m.index };
39
+ }
40
+ }
41
+ return best ? { provider: best.provider, url: best.url } : null;
42
+ }
43
+ /**
44
+ * Normalize an event's conferencing into a provider-uniform shape by walking
45
+ * the resolution chain (structured → hangoutLink → description/location scrape).
46
+ * Returns null when the event carries no conferencing signal at all.
47
+ */
48
+ export function extractConference(event) {
49
+ const cd = event.conferenceData;
50
+ const entryPoints = (cd?.entryPoints ?? []).map((ep) => ({
51
+ type: ep.entryPointType ?? "",
52
+ uri: ep.uri ?? "",
53
+ label: ep.label ?? "",
54
+ }));
55
+ // 1. Structured conferenceData video entry point — the correct source when present.
56
+ const videoEp = entryPoints.find((ep) => ep.type === "video" && ep.uri);
57
+ if (videoEp) {
58
+ return {
59
+ provider: cd?.conferenceSolution?.name ?? detectProvider(videoEp.uri),
60
+ joinUrl: videoEp.uri,
61
+ source: "conferenceData",
62
+ entryPoints,
63
+ fromScrape: false,
64
+ };
65
+ }
66
+ // 2. Legacy Meet hangoutLink (predates conferenceData; Meet-only).
67
+ const hangoutLink = event.hangoutLink ?? "";
68
+ if (hangoutLink) {
69
+ return {
70
+ provider: cd?.conferenceSolution?.name ?? "Google Meet",
71
+ joinUrl: hangoutLink,
72
+ source: "hangoutLink",
73
+ entryPoints,
74
+ fromScrape: false,
75
+ };
76
+ }
77
+ // 3. Scrape the description, then the location — externally-organized
78
+ // Teams/Zoom/Webex meetings put the URL here with no conferenceData.
79
+ const scrapeTargets = [
80
+ ["description", event.description],
81
+ ["location", event.location],
82
+ ];
83
+ for (const [src, text] of scrapeTargets) {
84
+ const hit = scrapeJoinUrl(text ?? "");
85
+ if (hit) {
86
+ return {
87
+ provider: hit.provider,
88
+ joinUrl: hit.url,
89
+ source: src,
90
+ entryPoints,
91
+ fromScrape: true,
92
+ };
93
+ }
94
+ }
95
+ // conferenceData present but no usable video link (e.g. phone-only) and no
96
+ // scrape hit — surface the provider, but there's no join URL to give.
97
+ if (cd || entryPoints.length) {
98
+ return {
99
+ provider: cd?.conferenceSolution?.name ?? "",
100
+ joinUrl: "",
101
+ source: "",
102
+ entryPoints,
103
+ fromScrape: false,
104
+ };
105
+ }
106
+ return null;
107
+ }
108
+ /** Best single tappable join URL for an event, or "" when none resolves. */
109
+ export function resolveJoinUrl(event) {
110
+ return extractConference(event)?.joinUrl ?? "";
111
+ }
112
+ //# sourceMappingURL=conference.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conference.js","sourceRoot":"","sources":["../../../../src/commands/calendar/conference.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,170 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { detectProvider, extractConference, resolveJoinUrl, scrapeJoinUrl } from "./conference.js";
3
+ // Real-shape fixtures drawn from live Calendar API responses (Meet + a
4
+ // Teams meeting synced in from Outlook whose join URL is description-only).
5
+ const meetEvent = {
6
+ summary: "Delivery Team Meeting",
7
+ hangoutLink: "https://meet.google.com/nqb-ptqo-koj",
8
+ conferenceData: {
9
+ entryPoints: [
10
+ {
11
+ entryPointType: "video",
12
+ uri: "https://meet.google.com/nqb-ptqo-koj",
13
+ label: "meet.google.com/nqb-ptqo-koj",
14
+ },
15
+ { entryPointType: "more", uri: "https://tel.meet/nqb-ptqo-koj?pin=9984343524328" },
16
+ {
17
+ entryPointType: "phone",
18
+ uri: "tel:+1-470-268-2857",
19
+ label: "+1 470-268-2857",
20
+ },
21
+ ],
22
+ conferenceSolution: { key: { type: "hangoutsMeet" }, name: "Google Meet" },
23
+ conferenceId: "nqb-ptqo-koj",
24
+ },
25
+ };
26
+ const teamsSyncedEvent = {
27
+ summary: "Transit Data - Weekly Sync",
28
+ location: "Microsoft Teams Meeting",
29
+ // No hangoutLink, no conferenceData — join URL lives only in the body.
30
+ description: [
31
+ "Team,",
32
+ "",
33
+ "________________________________________________________________________________",
34
+ "Microsoft Teams meeting",
35
+ "Join: https://teams.microsoft.com/meet/23594392319690?p=8e5nhXSwJy8vtRgHXo",
36
+ "Meeting ID: 235 943 923 196 90",
37
+ "________________________________",
38
+ "System reference<https://teams.microsoft.com/l/meetup-join/19%3ameeting_abc%40thread.v2/0?context=x>",
39
+ "Dial in by phone",
40
+ "+1 206-485-1387,,477344212# United States, Seattle",
41
+ ].join("\n"),
42
+ };
43
+ describe("detectProvider", () => {
44
+ it("identifies each supported provider from a URL host", () => {
45
+ expect(detectProvider("https://meet.google.com/nqb-ptqo-koj")).toBe("Google Meet");
46
+ expect(detectProvider("https://us02web.zoom.us/j/123456789")).toBe("Zoom");
47
+ expect(detectProvider("https://teams.microsoft.com/meet/2359")).toBe("Microsoft Teams");
48
+ expect(detectProvider("https://teams.live.com/meet/9988")).toBe("Microsoft Teams");
49
+ expect(detectProvider("https://acme.webex.com/meet/room")).toBe("Webex");
50
+ });
51
+ it("returns empty string for an unrecognized host", () => {
52
+ expect(detectProvider("https://example.com/join/x")).toBe("");
53
+ expect(detectProvider("")).toBe("");
54
+ });
55
+ });
56
+ describe("scrapeJoinUrl", () => {
57
+ it("extracts a Teams join URL from boilerplate, preferring the /meet/ link over /l/meetup-join/", () => {
58
+ const hit = scrapeJoinUrl(teamsSyncedEvent.description ?? "");
59
+ expect(hit).toEqual({
60
+ provider: "Microsoft Teams",
61
+ url: "https://teams.microsoft.com/meet/23594392319690?p=8e5nhXSwJy8vtRgHXo",
62
+ });
63
+ });
64
+ it("stops the URL at whitespace and does not swallow a trailing angle bracket", () => {
65
+ const hit = scrapeJoinUrl("reference<https://teams.microsoft.com/l/meetup-join/19%3ameeting_abc%40thread.v2/0> more");
66
+ expect(hit?.url).toBe("https://teams.microsoft.com/l/meetup-join/19%3ameeting_abc%40thread.v2/0");
67
+ });
68
+ it("matches Zoom and Webex join URLs", () => {
69
+ expect(scrapeJoinUrl("please join https://us02web.zoom.us/j/8912345?pwd=abc now")).toEqual({
70
+ provider: "Zoom",
71
+ url: "https://us02web.zoom.us/j/8912345?pwd=abc",
72
+ });
73
+ expect(scrapeJoinUrl("link: https://acme.webex.com/meet/pr123 end")).toEqual({
74
+ provider: "Webex",
75
+ url: "https://acme.webex.com/meet/pr123",
76
+ });
77
+ });
78
+ it("returns null when no known provider URL is present", () => {
79
+ expect(scrapeJoinUrl("just some notes, no meeting link here")).toBeNull();
80
+ expect(scrapeJoinUrl("https://example.com/random")).toBeNull();
81
+ expect(scrapeJoinUrl("")).toBeNull();
82
+ });
83
+ });
84
+ describe("extractConference — resolution chain", () => {
85
+ it("prefers the structured conferenceData video entry point (Meet)", () => {
86
+ const c = extractConference(meetEvent);
87
+ expect(c).not.toBeNull();
88
+ expect(c?.source).toBe("conferenceData");
89
+ expect(c?.provider).toBe("Google Meet");
90
+ expect(c?.joinUrl).toBe("https://meet.google.com/nqb-ptqo-koj");
91
+ expect(c?.fromScrape).toBe(false);
92
+ expect(c?.entryPoints).toHaveLength(3);
93
+ expect(c?.entryPoints[0]).toEqual({
94
+ type: "video",
95
+ uri: "https://meet.google.com/nqb-ptqo-koj",
96
+ label: "meet.google.com/nqb-ptqo-koj",
97
+ });
98
+ });
99
+ it("falls back to hangoutLink when conferenceData is absent (legacy Meet)", () => {
100
+ const c = extractConference({ hangoutLink: "https://meet.google.com/abc-defg-hij" });
101
+ expect(c?.source).toBe("hangoutLink");
102
+ expect(c?.provider).toBe("Google Meet");
103
+ expect(c?.joinUrl).toBe("https://meet.google.com/abc-defg-hij");
104
+ expect(c?.fromScrape).toBe(false);
105
+ expect(c?.entryPoints).toHaveLength(0);
106
+ });
107
+ it("scrapes the description for externally-organized Teams meetings (no conferenceData)", () => {
108
+ const c = extractConference(teamsSyncedEvent);
109
+ expect(c?.source).toBe("description");
110
+ expect(c?.provider).toBe("Microsoft Teams");
111
+ expect(c?.joinUrl).toBe("https://teams.microsoft.com/meet/23594392319690?p=8e5nhXSwJy8vtRgHXo");
112
+ expect(c?.fromScrape).toBe(true);
113
+ });
114
+ it("scrapes the location when the description has no link", () => {
115
+ const c = extractConference({
116
+ location: "Join here https://us02web.zoom.us/j/555?pwd=z",
117
+ description: "no link in the body",
118
+ });
119
+ expect(c?.source).toBe("location");
120
+ expect(c?.provider).toBe("Zoom");
121
+ expect(c?.joinUrl).toBe("https://us02web.zoom.us/j/555?pwd=z");
122
+ expect(c?.fromScrape).toBe(true);
123
+ });
124
+ it("structured data wins even when the description also contains a link", () => {
125
+ const c = extractConference({
126
+ ...meetEvent,
127
+ description: "backup https://us02web.zoom.us/j/999",
128
+ });
129
+ expect(c?.source).toBe("conferenceData");
130
+ expect(c?.joinUrl).toBe("https://meet.google.com/nqb-ptqo-koj");
131
+ });
132
+ it("scrapes when conferenceData has only phone entry points (no video)", () => {
133
+ const c = extractConference({
134
+ conferenceData: {
135
+ entryPoints: [{ entryPointType: "phone", uri: "tel:+1-206-555-0100" }],
136
+ conferenceSolution: { name: "Zoom" },
137
+ },
138
+ description: "video link: https://us02web.zoom.us/j/42",
139
+ });
140
+ expect(c?.source).toBe("description");
141
+ expect(c?.joinUrl).toBe("https://us02web.zoom.us/j/42");
142
+ // structured phone entry point still rides along
143
+ expect(c?.entryPoints).toHaveLength(1);
144
+ });
145
+ it("surfaces the provider with an empty joinUrl when conferenceData has no usable link and nothing scrapes", () => {
146
+ const c = extractConference({
147
+ conferenceData: {
148
+ entryPoints: [{ entryPointType: "phone", uri: "tel:+1-206-555-0100" }],
149
+ conferenceSolution: { name: "Webex" },
150
+ },
151
+ });
152
+ expect(c?.provider).toBe("Webex");
153
+ expect(c?.joinUrl).toBe("");
154
+ expect(c?.source).toBe("");
155
+ });
156
+ it("returns null for an event with no conferencing signal at all", () => {
157
+ expect(extractConference({ summary: "Office" })).toBeNull();
158
+ expect(extractConference({ summary: "x", description: "no meeting link" })).toBeNull();
159
+ });
160
+ });
161
+ describe("resolveJoinUrl", () => {
162
+ it("returns the best join URL across the chain", () => {
163
+ expect(resolveJoinUrl(meetEvent)).toBe("https://meet.google.com/nqb-ptqo-koj");
164
+ expect(resolveJoinUrl(teamsSyncedEvent)).toBe("https://teams.microsoft.com/meet/23594392319690?p=8e5nhXSwJy8vtRgHXo");
165
+ });
166
+ it("returns empty string when nothing resolves", () => {
167
+ expect(resolveJoinUrl({ summary: "Office" })).toBe("");
168
+ });
169
+ });
170
+ //# sourceMappingURL=conference.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conference.test.js","sourceRoot":"","sources":["../../../../src/commands/calendar/conference.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- export declare const EVENTS_HELP = "usage: gws-axi calendar events [flags]\nflags[8]:\n --calendar <id> Calendar to query (default: \"primary\")\n --from <iso> Earliest event start (default: now)\n --to <iso> Latest event start (default: 7 days from now)\n --limit <n> Max events to return (default: 100, max: 2500)\n --query <text> Full-text search across summary/description/location/attendees\n --single-events Expand recurring events into individual instances (default: true)\n --fields <list> Extra columns: status, organizer, location, attendees, description, htmlLink, hangoutLink\n --account <email> Account override when 2+ are configured\nexamples:\n gws-axi calendar events\n gws-axi calendar events --from 2026-04-20T00:00 --to 2026-04-21T00:00\n gws-axi calendar events --calendar team@jarv.us --limit 50\n gws-axi calendar events --query standup\n gws-axi calendar events --fields status,attendees,location\ntime formats:\n Timed events: ISO 8601 with offset \u2014 2026-04-20T14:00:00-04:00\n Local time: 2026-04-20T14:00 (interpreted as local tz)\n Date-only: 2026-04-20 (midnight local)\noutput note:\n The start/end columns use datetime (with offset) for timed events\n and date-only strings for all-day events. Agents parsing these\n columns must handle both formats.\ndefault columns:\n id, summary, start, end, my_response (your responseStatus if you're\n an attendee; blank for self-organized events with no attendee list),\n attachments (compact count; \"(N Docs)\" suffix when meeting notes /\n Gemini Notes Docs are attached \u2014 chase any with `calendar get <id>`\n to see file_ids and hand off to `docs read`).\n status column suppressed by default (most events are \"confirmed\" \u2014\n add --fields status to see cancelled/tentative).\n";
1
+ export declare const EVENTS_HELP = "usage: gws-axi calendar events [flags]\nflags[8]:\n --calendar <id> Calendar to query (default: \"primary\")\n --from <iso> Earliest event start (default: now)\n --to <iso> Latest event start (default: 7 days from now)\n --limit <n> Max events to return (default: 100, max: 2500)\n --query <text> Full-text search across summary/description/location/attendees\n --single-events Expand recurring events into individual instances (default: true)\n --fields <list> Extra columns: status, organizer, location, attendees, description, htmlLink, hangoutLink, join_url, conference, conference_source\n --account <email> Account override when 2+ are configured\nexamples:\n gws-axi calendar events\n gws-axi calendar events --from 2026-04-20T00:00 --to 2026-04-21T00:00\n gws-axi calendar events --calendar team@jarv.us --limit 50\n gws-axi calendar events --query standup\n gws-axi calendar events --fields status,attendees,location\n gws-axi calendar events --fields join_url,conference\ntime formats:\n Timed events: ISO 8601 with offset \u2014 2026-04-20T14:00:00-04:00\n Local time: 2026-04-20T14:00 (interpreted as local tz)\n Date-only: 2026-04-20 (midnight local)\noutput note:\n The start/end columns use datetime (with offset) for timed events\n and date-only strings for all-day events. Agents parsing these\n columns must handle both formats.\ndefault columns:\n id, summary, start, end, my_response (your responseStatus if you're\n an attendee; blank for self-organized events with no attendee list),\n attachments (compact count; \"(N Docs)\" suffix when meeting notes /\n Gemini Notes Docs are attached \u2014 chase any with `calendar get <id>`\n to see file_ids and hand off to `docs read`).\n status column suppressed by default (most events are \"confirmed\" \u2014\n add --fields status to see cancelled/tentative).\nconferencing:\n --fields join_url provider-uniform join link \u2014 resolves from\n structured conferenceData (Meet + Calendar add-on\n Zoom/Teams/Webex), then hangoutLink, then a\n provider-anchored URL scraped from the description\n or location (externally-organized Teams/Zoom/Webex\n meetings carry no conferenceData).\n --fields conference provider label (Google Meet / Zoom / Microsoft\n Teams / Webex).\n --fields conference_source where join_url came from: conferenceData |\n hangoutLink | description | location. A\n description/location value means a best-effort\n scrape \u2014 verify before use.\n";
2
2
  export declare function calendarEventsCommand(account: string, args: string[]): Promise<string>;
@@ -1,6 +1,7 @@
1
1
  import { AxiError } from "axi-sdk-js";
2
2
  import { calendarClient, translateGoogleError } from "../../google/client.js";
3
- import { field, mapEnum, pluck, renderListResponse, truncated, } from "../../output/index.js";
3
+ import { computed, field, mapEnum, pluck, renderListResponse, truncated, } from "../../output/index.js";
4
+ import { extractConference, resolveJoinUrl } from "./conference.js";
4
5
  import { parseDateishFlag } from "./dateish.js";
5
6
  export const EVENTS_HELP = `usage: gws-axi calendar events [flags]
6
7
  flags[8]:
@@ -10,7 +11,7 @@ flags[8]:
10
11
  --limit <n> Max events to return (default: 100, max: 2500)
11
12
  --query <text> Full-text search across summary/description/location/attendees
12
13
  --single-events Expand recurring events into individual instances (default: true)
13
- --fields <list> Extra columns: status, organizer, location, attendees, description, htmlLink, hangoutLink
14
+ --fields <list> Extra columns: status, organizer, location, attendees, description, htmlLink, hangoutLink, join_url, conference, conference_source
14
15
  --account <email> Account override when 2+ are configured
15
16
  examples:
16
17
  gws-axi calendar events
@@ -18,6 +19,7 @@ examples:
18
19
  gws-axi calendar events --calendar team@jarv.us --limit 50
19
20
  gws-axi calendar events --query standup
20
21
  gws-axi calendar events --fields status,attendees,location
22
+ gws-axi calendar events --fields join_url,conference
21
23
  time formats:
22
24
  Timed events: ISO 8601 with offset — 2026-04-20T14:00:00-04:00
23
25
  Local time: 2026-04-20T14:00 (interpreted as local tz)
@@ -34,6 +36,19 @@ default columns:
34
36
  to see file_ids and hand off to \`docs read\`).
35
37
  status column suppressed by default (most events are "confirmed" —
36
38
  add --fields status to see cancelled/tentative).
39
+ conferencing:
40
+ --fields join_url provider-uniform join link — resolves from
41
+ structured conferenceData (Meet + Calendar add-on
42
+ Zoom/Teams/Webex), then hangoutLink, then a
43
+ provider-anchored URL scraped from the description
44
+ or location (externally-organized Teams/Zoom/Webex
45
+ meetings carry no conferenceData).
46
+ --fields conference provider label (Google Meet / Zoom / Microsoft
47
+ Teams / Webex).
48
+ --fields conference_source where join_url came from: conferenceData |
49
+ hangoutLink | description | location. A
50
+ description/location value means a best-effort
51
+ scrape — verify before use.
37
52
  `;
38
53
  function parseEventsFlags(args) {
39
54
  const flags = {
@@ -175,6 +190,22 @@ function schemaWithExtras(extras) {
175
190
  case "hangoutLink":
176
191
  base.push(field("hangoutLink"));
177
192
  break;
193
+ case "join_url":
194
+ // Provider-uniform tappable join link. Resolution chain (structured →
195
+ // hangoutLink → description/location scrape) lives in conference.ts;
196
+ // resolves Teams/Zoom/Webex meetings that carry no conferenceData.
197
+ base.push(computed("join_url", (item) => resolveJoinUrl(item)));
198
+ break;
199
+ case "conference":
200
+ // Provider label (Google Meet / Zoom / Microsoft Teams / Webex).
201
+ base.push(computed("conference", (item) => extractConference(item)?.provider ?? ""));
202
+ break;
203
+ case "conference_source":
204
+ // Which path resolved join_url: conferenceData | hangoutLink |
205
+ // description | location. Lets a consumer trust a structured hit and
206
+ // treat a description/location scrape as best-effort.
207
+ base.push(computed("conference_source", (item) => extractConference(item)?.source ?? ""));
208
+ break;
178
209
  default:
179
210
  // Unknown field — skip silently rather than error. Keeps --fields
180
211
  // lenient (user doesn't need to know exact field names).
@@ -243,6 +274,16 @@ export async function calendarEventsCommand(account, args) {
243
274
  if (flags.calendar === "primary") {
244
275
  suggestions.push(`Query a different calendar with \`--calendar <id>\` (list them with \`gws-axi calendar calendars\`)`);
245
276
  }
277
+ // Disclose when any join_url was scraped from description/location text
278
+ // rather than read from structured conferenceData — the scrape is
279
+ // provider-anchored but best-effort, so a consumer should verify.
280
+ const conferenceRequested = flags.extraFields.some((f) => ["join_url", "conference", "conference_source"].includes(f));
281
+ if (conferenceRequested) {
282
+ const scraped = items.filter((it) => extractConference(it)?.fromScrape).length;
283
+ if (scraped > 0) {
284
+ suggestions.push(`${scraped} join_url${scraped === 1 ? "" : "s"} scraped from event description/location text (no structured conferenceData) — verify before use`);
285
+ }
286
+ }
246
287
  }
247
288
  else {
248
289
  // Empty-result-specific hints — don't recycle the general ones above.
@@ -1 +1 @@
1
- {"version":3,"file":"events.js","sourceRoot":"","sources":["../../../../src/commands/calendar/events.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../../../src/commands/calendar/events.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- export declare const GET_HELP = "usage: gws-axi calendar get <event-id> [flags]\nargs[1]:\n <event-id> Event ID (from `calendar events` output)\nflags[3]:\n --calendar <id> Calendar containing the event (default: \"primary\")\n --full Don't truncate description / attendee list\n --account <email> Account override when 2+ are configured\nexamples:\n gws-axi calendar get abc_123 --calendar primary\n gws-axi calendar get abc_123 --full\noutput:\n Event metadata (summary, start/end, status, creator, organizer,\n location, hangout link, htmlLink) plus the attendee list with each\n person's response status. Description is truncated to 500 chars by\n default \u2014 use --full to see the complete body.\n";
1
+ export declare const GET_HELP = "usage: gws-axi calendar get <event-id> [flags]\nargs[1]:\n <event-id> Event ID (from `calendar events` output)\nflags[3]:\n --calendar <id> Calendar containing the event (default: \"primary\")\n --full Don't truncate description / attendee list\n --account <email> Account override when 2+ are configured\nexamples:\n gws-axi calendar get abc_123 --calendar primary\n gws-axi calendar get abc_123 --full\noutput:\n Event metadata (summary, start/end, status, creator, organizer,\n location, hangout link, htmlLink) plus the attendee list with each\n person's response status. Description is truncated to 500 chars by\n default \u2014 use --full to see the complete body.\n\n A conference{} block surfaces the provider-uniform join link when the\n event has conferencing: provider, join_url, and source (conferenceData |\n hangoutLink | description | location). conference_entry_points[] lists\n the structured video/phone/sip entries when conferenceData is present.\n A source of description/location means the URL was scraped best-effort\n from free text (externally-organized Teams/Zoom/Webex meetings carry no\n conferenceData) \u2014 verify before use.\n";
2
2
  export declare function calendarGetCommand(account: string, args: string[]): Promise<string>;
@@ -1,6 +1,7 @@
1
1
  import { AxiError } from "axi-sdk-js";
2
2
  import { calendarClient, translateGoogleError } from "../../google/client.js";
3
3
  import { field, joinBlocks, renderHelp, renderList, renderObject } from "../../output/index.js";
4
+ import { extractConference } from "./conference.js";
4
5
  import { formatEventTime } from "./dateish.js";
5
6
  export const GET_HELP = `usage: gws-axi calendar get <event-id> [flags]
6
7
  args[1]:
@@ -17,6 +18,14 @@ output:
17
18
  location, hangout link, htmlLink) plus the attendee list with each
18
19
  person's response status. Description is truncated to 500 chars by
19
20
  default — use --full to see the complete body.
21
+
22
+ A conference{} block surfaces the provider-uniform join link when the
23
+ event has conferencing: provider, join_url, and source (conferenceData |
24
+ hangoutLink | description | location). conference_entry_points[] lists
25
+ the structured video/phone/sip entries when conferenceData is present.
26
+ A source of description/location means the URL was scraped best-effort
27
+ from free text (externally-organized Teams/Zoom/Webex meetings carry no
28
+ conferenceData) — verify before use.
20
29
  `;
21
30
  function parseFlags(args) {
22
31
  const flags = { calendar: "primary", full: false };
@@ -113,6 +122,26 @@ export async function calendarGetCommand(account, args) {
113
122
  if (event.updated)
114
123
  details.updated = event.updated;
115
124
  blocks.push(renderObject({ event: details }));
125
+ // Conferencing block — the provider-uniform join surface. Resolves a join
126
+ // URL for Meet, Calendar-add-on Zoom/Teams/Webex, AND externally-organized
127
+ // meetings whose link lives only in the description (no conferenceData). The
128
+ // `source` field discloses structured-vs-scraped so the reader can judge
129
+ // trust. hangout_link stays in the details block above for back-compat.
130
+ const conference = extractConference(event);
131
+ if (conference && (conference.joinUrl || conference.provider || conference.entryPoints.length)) {
132
+ const confObj = {};
133
+ if (conference.provider)
134
+ confObj.provider = conference.provider;
135
+ if (conference.joinUrl)
136
+ confObj.join_url = conference.joinUrl;
137
+ if (conference.source)
138
+ confObj.source = conference.source;
139
+ blocks.push(renderObject({ conference: confObj }));
140
+ if (conference.entryPoints.length > 0) {
141
+ const epSchema = [field("type"), field("uri"), field("label")];
142
+ blocks.push(renderList("conference_entry_points", conference.entryPoints, epSchema));
143
+ }
144
+ }
116
145
  if (descResult.value) {
117
146
  const descBlock = { description: descResult.value };
118
147
  if (descResult.truncated) {
@@ -177,6 +206,12 @@ export async function calendarGetCommand(account, args) {
177
206
  if (descResult.truncated || attendees.length > 20) {
178
207
  suggestions.push(`Run with --full to see complete description and all attendees`);
179
208
  }
209
+ if (conference?.joinUrl) {
210
+ const via = conference.source === "description" || conference.source === "location"
211
+ ? ` (scraped from ${conference.source} — verify before use)`
212
+ : "";
213
+ suggestions.push(`Join ${conference.provider || "meeting"}: ${conference.joinUrl}${via}`);
214
+ }
180
215
  if (event.htmlLink) {
181
216
  suggestions.push(`Open in browser: ${event.htmlLink}`);
182
217
  }
@@ -1 +1 @@
1
- {"version":3,"file":"get.js","sourceRoot":"","sources":["../../../../src/commands/calendar/get.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"get.js","sourceRoot":"","sources":["../../../../src/commands/calendar/get.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gws-axi",
3
- "version": "0.16.2",
3
+ "version": "0.17.0",
4
4
  "description": "AXI-compliant Google Workspace CLI — token-efficient TOON output, agent-guided auth setup, unified interface for Gmail, Calendar, Docs, Drive, Slides",
5
5
  "type": "module",
6
6
  "repository": {