AGENT SKILL

add-office365

Adds Office 365 Outlook connector to a Power Apps code app. Use when accessing calendars, sending emails, reading inbox, or managing Outlook events.

License 许可
MIT
最近更新
2026-11-14
Stars
★ 1.1k
Forks
232

01 前言 Front Matter

name
add-office365
model
sonnet
description
Adds Office 365 Outlook connector to a Power Apps code app. Use when accessing calendars, sending emails, reading inbox, or managing Outlook events.
allowed-tools
Read, Edit, Write, Grep, Glob, Bash, LSP, TaskCreate, TaskUpdate, TaskList, TaskGet, AskUserQuestion, Skill
user-invocable
true

03 SKILL.md 正文

? Shared Instructions: shared-instructions.md - Cross-cutting concerns.

Add Office 365 Outlook

Workflow

  1. Check Memory Bank -> 2. Add Connector -> 3. Review Generated Service -> 4. Configure -> 5. Build -> 6. Update Memory Bank

Step 1: Check Memory Bank

Check for memory-bank.md per shared-instructions.md.

Step 2: Add Connector

Get the connection as described in connector-reference.md.

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:

pa app add data-source --connector office365 --non-interactive

Older CLIs: run /list-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:

pa app add data-source --connector office365 -c <connection-id>

Step 3: Review Generated Service

The generated service file (src/generated/services/Office365OutlookService.ts) is large. Use Grep to find specific methods instead of reading the entire file:

Grep pattern="async \w+" path="src/generated/services/Office365OutlookService.ts"

Key methods (sorted by common usage):

Calendar Operations

Method Purpose Key Parameters
GetEventsCalendarViewV2 Get events in a date range calendarId, startDateTimeOffset, endDateTimeOffset
V3CalendarPostItem Create a calendar event table (calendar ID), item (CalendarEventHtmlClient)
CalendarDeleteItem Delete an event table (calendar ID), id (event ID)
CalendarPatchItem Update an event table, id, item
V2CalendarGetTables List available calendars (none)

Email Operations

Method Purpose Key Parameters
SendEmailV2 Send an email emailMessage (body, to, subject, etc.)
GetEmails Get inbox emails folderPath, fetchOnlyUnread, top
GetEmail Get single email messageId
MarkAsRead Mark email as read messageId
ReplyToV3 Reply to an email messageId, body
Flag / Unflag Flag/unflag email messageId

Contact Operations

Method Purpose
GetContactFolders List contact folders
ContactGetTables List contact tables

Step 4: Configure

Ask the user what Office 365 Outlook operations they need (skip if already specified by caller).

Calendar -- Get events for a date range:

import { Office365OutlookService } from "../generated/services/Office365OutlookService";

const result = await Office365OutlookService.GetEventsCalendarViewV2(
  "Calendar", // calendarId -- "Calendar" for default
  startDate.toISOString(),
  endDate.toISOString()
);
const events = result.data?.value || [];

Calendar -- Create an event:

await Office365OutlookService.V3CalendarPostItem("Calendar", {
  Subject: "Focus Time",
  Start: "2025-06-15T10:00:00", // ISO 8601 format
  End: "2025-06-15T11:00:00",
  ShowAs: "Busy",
  Importance: "Normal",
  IsAllDay: false,
  Body: "<p>Blocked for focus work</p>",
  Reminder: 5
});

Calendar -- Delete an event:

await Office365OutlookService.CalendarDeleteItem("Calendar", eventId);

Email -- Send an email:

await Office365OutlookService.SendEmailV2({
  To: "<recipient-address>",
  Subject: "Subject line",
  Body: "<p>HTML email body</p>",
  Importance: "Normal"
});

Key types:

Type Purpose
CalendarEventClientReceiveStringEnums Read model -- has Subject, Start, End, Id, ShowAs, IsAllDay, Organizer
CalendarEventHtmlClient Write model -- requires Subject, Start, End; optional Body, ShowAs, Importance, Reminder
EntityListResponse_CalendarEventClientReceiveStringEnums Response wrapper -- access events via .value

Response pattern:

const result = await Office365OutlookService.GetEventsCalendarViewV2(...);
if (result.success) {
  const events = result.data?.value || [];
} else {
  console.error("Failed:", result.error);
}

Step 5: Build

npm run build

Fix TypeScript errors before proceeding. Do NOT deploy yet.

Step 6: Update Memory Bank

Update memory-bank.md with: connector added, configured operations, build status.

04 同仓库更多 Skills