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/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": { 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:** ```