[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M699KNGQAYCW2HBQ91RXMHD6":3,"skill-same:01M699KNGQAYCW2HBQ91RXMHD6":69},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":39,"linkOnly":40,"markdownContent":41,"markdownBody":42,"frontMatter":43,"refName":46,"commitSha":47,"skillDirectory":48,"forksCount":49,"repositoryHtmlUrl":50,"repositoryHomepageUrl":51,"ownerHtmlUrl":52,"ownerBlogUrl":53,"ownerDescription":54,"updatedAt":55,"install":56,"resources":68},"01M699KNGQAYCW2HBQ91RXMHD6","add-office365",null,"Adds Office 365 Outlook connector to a Power Apps code app. Use when accessing calendars, sending emails, reading inbox, or managing Outlook events.","microsoft\u002Fpower-platform-skills","microsoft","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F6154722?v=4","01M698VYDXZ6JW5WH3CRV650R8","Microsoft","01M699JVYJFB75D9JM70BN4H0Q",1149,"MIT","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fpower-platform-skills\u002Fblob\u002Fmain\u002Fplugins\u002Fcode-apps\u002Fskills\u002Fadd-office365\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],"add","Office365","add office365","true","events","sonnet","reading","edit","write","read","Connector","code","Bash","when","apps","lsp","inbox","power","outlook events","app","2026-11-10 10:12:30",false,"---\nname: add-office365\ndescription: Adds Office 365 Outlook connector to a Power Apps code app. Use when accessing calendars, sending emails, reading inbox, or managing Outlook events.\nuser-invocable: true\nallowed-tools: Read, Edit, Write, Grep, Glob, Bash, LSP, TaskCreate, TaskUpdate, TaskList, TaskGet, AskUserQuestion, Skill\nmodel: sonnet\n---\n\n**? Shared Instructions: [shared-instructions.md](..\u002F..\u002Fshared\u002Fshared-instructions.md)** - Cross-cutting concerns.\n\n# Add Office 365 Outlook\n\n## Workflow\n\n1. Check Memory Bank -> 2. Add Connector -> 3. Review Generated Service -> 4. Configure -> 5. Build -> 6. Update Memory Bank\n\n---\n\n### Step 1: Check Memory Bank\n\nCheck for `memory-bank.md` per [shared-instructions.md](..\u002F..\u002Fshared\u002Fshared-instructions.md).\n\n### Step 2: Add Connector\n\nGet the connection as described in [connector-reference.md](..\u002F..\u002Fshared\u002Fconnector-reference.md#connections).\n\n**CLI 1.3.0+ (`PA_INLINE_CONNECTIONS=yes`):** tell the user that adding Office 365 Outlook may create a connection with their account, then run the add without `-c` and handle the result with the outcome table in connector-reference.md:\n\n```bash\npa app add data-source --connector office365 --non-interactive\n```\n\n**Older CLIs:** run `\u002Flist-connections` to find the Office 365 Outlook connection ID (API name contains `office365`; if none exists, create one with `pa connection create` as described in connector-reference.md), then:\n\n```bash\npa app add data-source --connector office365 -c \u003Cconnection-id>\n```\n\n### Step 3: Review Generated Service\n\nThe generated service file (`src\u002Fgenerated\u002Fservices\u002FOffice365OutlookService.ts`) is large. **Use `Grep` to find specific methods** instead of reading the entire file:\n\n```\nGrep pattern=\"async \\w+\" path=\"src\u002Fgenerated\u002Fservices\u002FOffice365OutlookService.ts\"\n```\n\nKey methods (sorted by common usage):\n\n#### Calendar Operations\n\n| Method                    | Purpose                    | Key Parameters                                           |\n| ------------------------- | -------------------------- | -------------------------------------------------------- |\n| `GetEventsCalendarViewV2` | Get events in a date range | `calendarId`, `startDateTimeOffset`, `endDateTimeOffset` |\n| `V3CalendarPostItem`      | Create a calendar event    | `table` (calendar ID), `item` (CalendarEventHtmlClient)  |\n| `CalendarDeleteItem`      | Delete an event            | `table` (calendar ID), `id` (event ID)                   |\n| `CalendarPatchItem`       | Update an event            | `table`, `id`, `item`                                    |\n| `V2CalendarGetTables`     | List available calendars   | (none)                                                   |\n\n#### Email Operations\n\n| Method            | Purpose            | Key Parameters                           |\n| ----------------- | ------------------ | ---------------------------------------- |\n| `SendEmailV2`     | Send an email      | `emailMessage` (body, to, subject, etc.) |\n| `GetEmails`       | Get inbox emails   | `folderPath`, `fetchOnlyUnread`, `top`   |\n| `GetEmail`        | Get single email   | `messageId`                              |\n| `MarkAsRead`      | Mark email as read | `messageId`                              |\n| `ReplyToV3`       | Reply to an email  | `messageId`, `body`                      |\n| `Flag` \u002F `Unflag` | Flag\u002Funflag email  | `messageId`                              |\n\n#### Contact Operations\n\n| Method              | Purpose              |\n| ------------------- | -------------------- |\n| `GetContactFolders` | List contact folders |\n| `ContactGetTables`  | List contact tables  |\n\n### Step 4: Configure\n\nAsk the user what Office 365 Outlook operations they need (skip if already specified by caller).\n\n**Calendar -- Get events for a date range:**\n\n```typescript\nimport { Office365OutlookService } from \"..\u002Fgenerated\u002Fservices\u002FOffice365OutlookService\";\n\nconst result = await Office365OutlookService.GetEventsCalendarViewV2(\n  \"Calendar\", \u002F\u002F calendarId -- \"Calendar\" for default\n  startDate.toISOString(),\n  endDate.toISOString()\n);\nconst events = result.data?.value || [];\n```\n\n**Calendar -- Create an event:**\n\n```typescript\nawait Office365OutlookService.V3CalendarPostItem(\"Calendar\", {\n  Subject: \"Focus Time\",\n  Start: \"2025-06-15T10:00:00\", \u002F\u002F ISO 8601 format\n  End: \"2025-06-15T11:00:00\",\n  ShowAs: \"Busy\",\n  Importance: \"Normal\",\n  IsAllDay: false,\n  Body: \"\u003Cp>Blocked for focus work\u003C\u002Fp>\",\n  Reminder: 5\n});\n```\n\n**Calendar -- Delete an event:**\n\n```typescript\nawait Office365OutlookService.CalendarDeleteItem(\"Calendar\", eventId);\n```\n\n**Email -- Send an email:**\n\n```typescript\nawait Office365OutlookService.SendEmailV2({\n  To: \"\u003Crecipient-address>\",\n  Subject: \"Subject line\",\n  Body: \"\u003Cp>HTML email body\u003C\u002Fp>\",\n  Importance: \"Normal\"\n});\n```\n\n**Key types:**\n\n| Type                                                       | Purpose                                                                                                |\n| ---------------------------------------------------------- | ------------------------------------------------------------------------------------------------------ |\n| `CalendarEventClientReceiveStringEnums`                    | Read model -- has `Subject`, `Start`, `End`, `Id`, `ShowAs`, `IsAllDay`, `Organizer`                   |\n| `CalendarEventHtmlClient`                                  | Write model -- requires `Subject`, `Start`, `End`; optional `Body`, `ShowAs`, `Importance`, `Reminder` |\n| `EntityListResponse_CalendarEventClientReceiveStringEnums` | Response wrapper -- access events via `.value`                                                         |\n\n**Response pattern:**\n\n```typescript\nconst result = await Office365OutlookService.GetEventsCalendarViewV2(...);\nif (result.success) {\n  const events = result.data?.value || [];\n} else {\n  console.error(\"Failed:\", result.error);\n}\n```\n\n### Step 5: Build\n\n```bash\nnpm run build\n```\n\nFix TypeScript errors before proceeding. Do NOT deploy yet.\n\n### Step 6: Update Memory Bank\n\nUpdate `memory-bank.md` with: connector added, configured operations, build status.\n","**? Shared Instructions: [shared-instructions.md](..\u002F..\u002Fshared\u002Fshared-instructions.md)** - Cross-cutting concerns.\n\n# Add Office 365 Outlook\n\n## Workflow\n\n1. Check Memory Bank -> 2. Add Connector -> 3. Review Generated Service -> 4. Configure -> 5. Build -> 6. Update Memory Bank\n\n---\n\n### Step 1: Check Memory Bank\n\nCheck for `memory-bank.md` per [shared-instructions.md](..\u002F..\u002Fshared\u002Fshared-instructions.md).\n\n### Step 2: Add Connector\n\nGet the connection as described in [connector-reference.md](..\u002F..\u002Fshared\u002Fconnector-reference.md#connections).\n\n**CLI 1.3.0+ (`PA_INLINE_CONNECTIONS=yes`):** tell the user that adding Office 365 Outlook may create a connection with their account, then run the add without `-c` and handle the result with the outcome table in connector-reference.md:\n\n```bash\npa app add data-source --connector office365 --non-interactive\n```\n\n**Older CLIs:** run `\u002Flist-connections` to find the Office 365 Outlook connection ID (API name contains `office365`; if none exists, create one with `pa connection create` as described in connector-reference.md), then:\n\n```bash\npa app add data-source --connector office365 -c \u003Cconnection-id>\n```\n\n### Step 3: Review Generated Service\n\nThe generated service file (`src\u002Fgenerated\u002Fservices\u002FOffice365OutlookService.ts`) is large. **Use `Grep` to find specific methods** instead of reading the entire file:\n\n```\nGrep pattern=\"async \\w+\" path=\"src\u002Fgenerated\u002Fservices\u002FOffice365OutlookService.ts\"\n```\n\nKey methods (sorted by common usage):\n\n#### Calendar Operations\n\n| Method                    | Purpose                    | Key Parameters                                           |\n| ------------------------- | -------------------------- | -------------------------------------------------------- |\n| `GetEventsCalendarViewV2` | Get events in a date range | `calendarId`, `startDateTimeOffset`, `endDateTimeOffset` |\n| `V3CalendarPostItem`      | Create a calendar event    | `table` (calendar ID), `item` (CalendarEventHtmlClient)  |\n| `CalendarDeleteItem`      | Delete an event            | `table` (calendar ID), `id` (event ID)                   |\n| `CalendarPatchItem`       | Update an event            | `table`, `id`, `item`                                    |\n| `V2CalendarGetTables`     | List available calendars   | (none)                                                   |\n\n#### Email Operations\n\n| Method            | Purpose            | Key Parameters                           |\n| ----------------- | ------------------ | ---------------------------------------- |\n| `SendEmailV2`     | Send an email      | `emailMessage` (body, to, subject, etc.) |\n| `GetEmails`       | Get inbox emails   | `folderPath`, `fetchOnlyUnread`, `top`   |\n| `GetEmail`        | Get single email   | `messageId`                              |\n| `MarkAsRead`      | Mark email as read | `messageId`                              |\n| `ReplyToV3`       | Reply to an email  | `messageId`, `body`                      |\n| `Flag` \u002F `Unflag` | Flag\u002Funflag email  | `messageId`                              |\n\n#### Contact Operations\n\n| Method              | Purpose              |\n| ------------------- | -------------------- |\n| `GetContactFolders` | List contact folders |\n| `ContactGetTables`  | List contact tables  |\n\n### Step 4: Configure\n\nAsk the user what Office 365 Outlook operations they need (skip if already specified by caller).\n\n**Calendar -- Get events for a date range:**\n\n```typescript\nimport { Office365OutlookService } from \"..\u002Fgenerated\u002Fservices\u002FOffice365OutlookService\";\n\nconst result = await Office365OutlookService.GetEventsCalendarViewV2(\n  \"Calendar\", \u002F\u002F calendarId -- \"Calendar\" for default\n  startDate.toISOString(),\n  endDate.toISOString()\n);\nconst events = result.data?.value || [];\n```\n\n**Calendar -- Create an event:**\n\n```typescript\nawait Office365OutlookService.V3CalendarPostItem(\"Calendar\", {\n  Subject: \"Focus Time\",\n  Start: \"2025-06-15T10:00:00\", \u002F\u002F ISO 8601 format\n  End: \"2025-06-15T11:00:00\",\n  ShowAs: \"Busy\",\n  Importance: \"Normal\",\n  IsAllDay: false,\n  Body: \"\u003Cp>Blocked for focus work\u003C\u002Fp>\",\n  Reminder: 5\n});\n```\n\n**Calendar -- Delete an event:**\n\n```typescript\nawait Office365OutlookService.CalendarDeleteItem(\"Calendar\", eventId);\n```\n\n**Email -- Send an email:**\n\n```typescript\nawait Office365OutlookService.SendEmailV2({\n  To: \"\u003Crecipient-address>\",\n  Subject: \"Subject line\",\n  Body: \"\u003Cp>HTML email body\u003C\u002Fp>\",\n  Importance: \"Normal\"\n});\n```\n\n**Key types:**\n\n| Type                                                       | Purpose                                                                                                |\n| ---------------------------------------------------------- | ------------------------------------------------------------------------------------------------------ |\n| `CalendarEventClientReceiveStringEnums`                    | Read model -- has `Subject`, `Start`, `End`, `Id`, `ShowAs`, `IsAllDay`, `Organizer`                   |\n| `CalendarEventHtmlClient`                                  | Write model -- requires `Subject`, `Start`, `End`; optional `Body`, `ShowAs`, `Importance`, `Reminder` |\n| `EntityListResponse_CalendarEventClientReceiveStringEnums` | Response wrapper -- access events via `.value`                                                         |\n\n**Response pattern:**\n\n```typescript\nconst result = await Office365OutlookService.GetEventsCalendarViewV2(...);\nif (result.success) {\n  const events = result.data?.value || [];\n} else {\n  console.error(\"Failed:\", result.error);\n}\n```\n\n### Step 5: Build\n\n```bash\nnpm run build\n```\n\nFix TypeScript errors before proceeding. Do NOT deploy yet.\n\n### Step 6: Update Memory Bank\n\nUpdate `memory-bank.md` with: connector added, configured operations, build status.\n",{"name":5,"model":24,"description":7,"allowed-tools":44,"user-invocable":45},"Read, Edit, Write, Grep, Glob, Bash, LSP, TaskCreate, TaskUpdate, TaskList, TaskGet, AskUserQuestion, Skill",true,"main","9d26fde082b47f04e9bb97cb30a46dd1eaaa776e","plugins\u002Fcode-apps\u002Fskills\u002Fadd-office365",232,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fpower-platform-skills","https:\u002F\u002Fmicrosoft.github.io\u002Fpower-platform-skills\u002F","https:\u002F\u002Fgithub.com\u002Fmicrosoft","https:\u002F\u002Fopensource.microsoft.com","Open source projects and samples from Microsoft","2026-11-14 21:46:39",{"source":8,"skillName":5,"commands":57,"prompt":67,"zipAvailable":45},[58,61,64],{"tool":59,"command":60},"npx","npx skills add microsoft\u002Fpower-platform-skills --skill add-office365",{"tool":62,"command":63},"bunx","bunx skills add microsoft\u002Fpower-platform-skills --skill add-office365",{"tool":65,"command":66},"pnpm","pnpm dlx skills add microsoft\u002Fpower-platform-skills --skill add-office365","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fpower-platform-skills\u002Fblob\u002Fmain\u002Fplugins\u002Fcode-apps\u002Fskills\u002Fadd-office365\u002FSKILL.md",[],[70,89,112,130,144,154],{"skillNo":71,"name":72,"nameZh":6,"description":73,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":74,"categories":75,"keywords":76,"publishedAt":39},"01M699WVHX0XN59EPBTTPEKYPG","setup","Use when Process Intelligence needs building, explicit cloud\u002Faccount\u002Fenvironment configuration, sign-in, connection diagnostics, or recovery from an authentication error.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fpower-platform-skills\u002Fblob\u002Fmain\u002Fplugins\u002Fprocess-intelligence\u002Fskills\u002Fsetup\u002FSKILL.md",[],[72,28,32,77,78,79,80,81,82,83,84,85,86,87,88,31],"connection","error","sign","intelligence","configuration","use","process","diagnostics","environment","authentication","cloud","recovery",{"skillNo":90,"name":91,"nameZh":6,"description":92,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":93,"categories":94,"keywords":100,"publishedAt":39},"01M699WSR9EX55YY1WD9J22FEG","report-issue","Use when the user wants a Process Intelligence bug-report draft or support summary for a failed operation.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fpower-platform-skills\u002Fblob\u002Fmain\u002Fplugins\u002Fprocess-intelligence\u002Fskills\u002Freport-issue\u002FSKILL.md",[95],{"categoryNo":96,"categoryName":97,"taxonomyType":98,"taxonomyTypeDesc":99},"01JBSEEDCAT000000000000034","行政与办公人员","PROFESSION","适用职业",[101,102,103,104,105,83,82,106,107,80,108,109,110,32,111],"report issue","report","issue","support","user","bug","summary","draft","operation","for","bug-report",{"skillNo":113,"name":114,"nameZh":6,"description":115,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":116,"categories":117,"keywords":118,"publishedAt":39},"01M699WR26YQ9Q21KE6MJF5B2G","investigate-process","Use when a broad Process Mining business question, observed pattern or competing explanation needs investigation across analytical perspectives.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fpower-platform-skills\u002Fblob\u002Fmain\u002Fplugins\u002Fprocess-intelligence\u002Fskills\u002Finvestigate-process\u002FSKILL.md",[],[83,119,120,121,32,122,123,124,125,28,126,82,127,128,129],"investigate","investigate process","mining","process mining","investigation","perspectives","question","business","pattern","across","analytical",{"skillNo":131,"name":132,"nameZh":6,"description":133,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":134,"categories":135,"keywords":136,"publishedAt":39},"01M699WP9SDG5ZR12P8VYNXKTN","derive-metric","Use when a requested measure is missing, a saved custom metric needs reuse, or an ephemeral formula or derived scalar is needed.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fpower-platform-skills\u002Fblob\u002Fmain\u002Fplugins\u002Fprocess-intelligence\u002Fskills\u002Fderive-metric\u002FSKILL.md",[],[137,138,28,82,139,140,141,142,143,32],"metric","derive metric","formula","missing","reuse","saved","custom",{"skillNo":145,"name":146,"nameZh":6,"description":147,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":148,"categories":149,"keywords":150,"publishedAt":39},"01M699WMG5R8P6SMTDAS1TKF9E","compare-cohorts","Use when comparing process cohorts, departments, periods or before-and-after results under matched definitions.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fpower-platform-skills\u002Fblob\u002Fmain\u002Fplugins\u002Fprocess-intelligence\u002Fskills\u002Fcompare-cohorts\u002FSKILL.md",[],[151,152,32,82,83,153,28],"compare","compare cohorts","results",{"skillNo":155,"name":156,"nameZh":6,"description":157,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":158,"categories":159,"keywords":160,"publishedAt":39},"01M699WJWNVTMP9XK3NCJHV14D","analyze-variants","Use when investigating common or slow variants, repeated work, unusual paths, or a specific Process Mining case.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fpower-platform-skills\u002Fblob\u002Fmain\u002Fplugins\u002Fprocess-intelligence\u002Fskills\u002Fanalyze-variants\u002FSKILL.md",[],[161,162,163,122,32,121,164,165,82,83,28,166,167],"analyze","variants","analyze variants","case","paths","work","common"]