From fae8dbb76e8ad82cf54629ee283e54585f71ff95 Mon Sep 17 00:00:00 2001 From: Tianqi Zhang Date: Wed, 3 Jun 2026 14:31:45 +0800 Subject: [PATCH 1/2] Surface deliveryTypes, viewingOptions, hasLiveStream, hasOnDemand in CLI output Add four fields from the upstream catalog that were silently dropped during normalization: deliveryTypes, viewingOptions, hasLiveStream, and hasOnDemand. This lets remote attendees see whether a session is in-person only, has a live stream, or will be recorded. Changes: - contracts.ts: Add fields to RawSession and Session interfaces - normalize.ts: Map the four fields in normalizeSession() - search/index.ts: Add fields to MiniSearch storeFields - format.ts: Show delivery type in short format, all four in full format - cache.test.ts: Update session() helper with new required fields - SKILL.md: Document new fields in catalog table and session workflow - Plugin manifests: Bump version 1.0.5 -> 1.0.6 Closes #40 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .claude-plugin/plugin.json | 2 +- .github/plugin/plugin.json | 2 +- cli/src/contracts.ts | 8 ++++++++ cli/src/data/normalize.ts | 4 ++++ cli/src/output/format.ts | 5 +++++ cli/src/search/index.ts | 1 + cli/test/cache.test.ts | 4 ++++ skills/microsoft-build/SKILL.md | 7 ++++++- 8 files changed, 30 insertions(+), 3 deletions(-) diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json index 3e1de15..b8feb24 100644 --- a/.claude-plugin/plugin.json +++ b/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "name": "microsoft-events", "description": "Connect your project to Microsoft Build and Ignite sessions — discover relevant talks, explore what's new for your stack, and plan next steps from your development environment.", - "version": "1.0.5", + "version": "1.0.6", "author": { "name": "Microsoft" }, diff --git a/.github/plugin/plugin.json b/.github/plugin/plugin.json index ad35cdc..efbfb48 100644 --- a/.github/plugin/plugin.json +++ b/.github/plugin/plugin.json @@ -1,7 +1,7 @@ { "name": "microsoft-events", "description": "Connect your project to Microsoft Build and Ignite sessions — discover relevant talks, explore what's new for your stack, and plan next steps from your development environment.", - "version": "1.0.5", + "version": "1.0.6", "author": { "name": "Microsoft", "url": "https://www.microsoft.com" diff --git a/cli/src/contracts.ts b/cli/src/contracts.ts index 3de4730..14dc9f9 100644 --- a/cli/src/contracts.ts +++ b/cli/src/contracts.ts @@ -18,6 +18,10 @@ export interface RawSession { product?: Array<{ displayValue?: string; logicalValue?: string } | string>; programmingLanguages?: Array<{ displayValue?: string; logicalValue?: string } | string>; tags?: Array<{ displayValue?: string; logicalValue?: string } | string>; + deliveryTypes?: Array<{ displayValue?: string; logicalValue?: string } | string>; + viewingOptions?: Array<{ displayValue?: string; logicalValue?: string } | string>; + hasLiveStream?: boolean; + hasOnDemand?: boolean; relatedSessionCodes?: string[]; slideDeck?: string; onDemand?: string; @@ -40,6 +44,10 @@ export interface Session { product: string; languages: string; tags: string; + deliveryTypes: string; + viewingOptions: string; + hasLiveStream: boolean; + hasOnDemand: boolean; relatedSessionCodes: string; slideDeck: string; onDemand: string; diff --git a/cli/src/data/normalize.ts b/cli/src/data/normalize.ts index d939841..31b9950 100644 --- a/cli/src/data/normalize.ts +++ b/cli/src/data/normalize.ts @@ -50,6 +50,10 @@ export function normalizeSession(raw: RawSession, eventId: string): Session | nu product: extractDisplayValues(raw.product), languages: extractDisplayValues(raw.programmingLanguages), tags: extractDisplayValues(raw.tags), + deliveryTypes: extractDisplayValues(raw.deliveryTypes), + viewingOptions: extractDisplayValues(raw.viewingOptions), + hasLiveStream: !!raw.hasLiveStream, + hasOnDemand: !!raw.hasOnDemand, relatedSessionCodes: Array.isArray(raw.relatedSessionCodes) ? raw.relatedSessionCodes.join(', ') : '', diff --git a/cli/src/output/format.ts b/cli/src/output/format.ts index cdca7b2..ad7470b 100644 --- a/cli/src/output/format.ts +++ b/cli/src/output/format.ts @@ -3,6 +3,7 @@ import type { Session, SearchResult, CacheMeta } from '../contracts.js'; export function formatSessionShort(s: Session): string { const parts = [`[${s.sessionCode}] ${s.title}`]; parts.push(` Type: ${s.type || 'N/A'} | Level: ${s.level || 'N/A'} | Event: ${s.event}`); + if (s.deliveryTypes) parts.push(` Delivery: ${s.deliveryTypes}`); if (s.speakers) parts.push(` Speaker(s): ${s.speakers}`); if (s.startDateTime) { const d = new Date(s.startDateTime); @@ -37,6 +38,10 @@ export function formatSessionFull(s: Session): string { if (s.product) lines.push(`Product: ${s.product}`); if (s.languages) lines.push(`Languages: ${s.languages}`); if (s.tags) lines.push(`Tags: ${s.tags}`); + if (s.deliveryTypes) lines.push(`Delivery: ${s.deliveryTypes}`); + if (s.viewingOptions) lines.push(`Viewing: ${s.viewingOptions}`); + lines.push(`Live stream: ${s.hasLiveStream ? 'Yes' : 'No'}`); + lines.push(`On-demand: ${s.hasOnDemand ? 'Yes' : 'No'}`); if (s.relatedSessionCodes) lines.push(`Related sessions: ${s.relatedSessionCodes}`); lines.push(''); if (s.description) lines.push(s.description); diff --git a/cli/src/search/index.ts b/cli/src/search/index.ts index f338b1a..6586f3d 100644 --- a/cli/src/search/index.ts +++ b/cli/src/search/index.ts @@ -24,6 +24,7 @@ export function buildIndex(sessions: Session[]): void { 'sessionCode', 'title', 'description', 'speakers', 'timeSlot', 'startDateTime', 'endDateTime', 'location', 'level', 'type', 'topic', 'solutionArea', 'product', 'languages', 'tags', + 'deliveryTypes', 'viewingOptions', 'hasLiveStream', 'hasOnDemand', 'relatedSessionCodes', 'slideDeck', 'onDemand', 'event', ], idField: 'sessionCode', diff --git a/cli/test/cache.test.ts b/cli/test/cache.test.ts index d5fab99..ddb9ed9 100644 --- a/cli/test/cache.test.ts +++ b/cli/test/cache.test.ts @@ -30,6 +30,10 @@ function session(event: string, sessionCode: string = 'KEY01'): Session { product: '', languages: '', tags: '', + deliveryTypes: '', + viewingOptions: '', + hasLiveStream: false, + hasOnDemand: false, relatedSessionCodes: '', slideDeck: '', onDemand: '', diff --git a/skills/microsoft-build/SKILL.md b/skills/microsoft-build/SKILL.md index 63626a0..945e699 100644 --- a/skills/microsoft-build/SKILL.md +++ b/skills/microsoft-build/SKILL.md @@ -173,6 +173,10 @@ The response is a JSON array of session objects. Key fields: | `relatedSessionCodes` | Related session IDs | | `slideDeck` | Slide deck URL (when available) | | `onDemand` | On-demand video URL (when available) | +| `deliveryTypes` | How the session is delivered (e.g., "In-person", "Online") | +| `viewingOptions` | Recording status (e.g., "Will be recorded", "Will not be recorded") | +| `hasLiveStream` | Whether the session has a live stream (boolean) | +| `hasOnDemand` | Whether on-demand video will be available (boolean) | When using direct fetch: fetch once per conversation, filter for all technologies in the inventory in the same step, carry forward only matched sessions. @@ -316,9 +320,10 @@ The user wants to understand a specific session. 1. Look up the session: - **With CLI**: `npx -y @microsoft/events-cli session [ID] --event build-2026 --json` - **Without CLI**: Fetch the catalog and find by code or title -2. Present: title, speakers, abstract, session type, level, time slot, location, related sessions +2. Present: title, speakers, abstract, session type, level, time slot, location, delivery type, viewing options, related sessions 3. If the session covers specific products or technologies, search Learn MCP for current docs on those topics 4. Link to slides or on-demand video if available +5. If the user is remote, highlight whether the session is online, has a live stream, or will be available on-demand **Output format:** ``` From c2c9cd8527008e3c3ed0ad0da3abfea3bd7a6580 Mon Sep 17 00:00:00 2001 From: Tianqi Zhang Date: Wed, 3 Jun 2026 14:39:46 +0800 Subject: [PATCH 2/2] Bump @microsoft/events-cli version to 0.3.1 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- cli/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cli/package.json b/cli/package.json index a96abb7..2791840 100644 --- a/cli/package.json +++ b/cli/package.json @@ -1,6 +1,6 @@ { "name": "@microsoft/events-cli", - "version": "0.3.0", + "version": "0.3.1", "description": "CLI for searching Microsoft flagship event sessions (Build, Ignite).", "type": "module", "bin": {