@rubytech/create-sitedesk-code 0.1.414 → 0.1.417
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/dist/__tests__/outlook-client-id-env.test.js +46 -0
- package/dist/index.js +31 -0
- package/dist/port-resolution.js +8 -1
- package/package.json +1 -1
- package/payload/platform/config/brand.json +1 -0
- package/payload/platform/lib/account-enumeration/dist/__tests__/is-provisioned.test.d.ts +2 -0
- package/payload/platform/lib/account-enumeration/dist/__tests__/is-provisioned.test.d.ts.map +1 -0
- package/payload/platform/lib/account-enumeration/dist/__tests__/is-provisioned.test.js +81 -0
- package/payload/platform/lib/account-enumeration/dist/__tests__/is-provisioned.test.js.map +1 -0
- package/payload/platform/lib/account-enumeration/dist/index.d.ts +17 -0
- package/payload/platform/lib/account-enumeration/dist/index.d.ts.map +1 -1
- package/payload/platform/lib/account-enumeration/dist/index.js +46 -9
- package/payload/platform/lib/account-enumeration/dist/index.js.map +1 -1
- package/payload/platform/lib/account-enumeration/src/__tests__/is-provisioned.test.ts +86 -0
- package/payload/platform/lib/account-enumeration/src/index.ts +45 -9
- package/payload/platform/lib/account-scope/dist/index.d.ts +14 -5
- package/payload/platform/lib/account-scope/dist/index.d.ts.map +1 -1
- package/payload/platform/lib/account-scope/dist/index.js +14 -5
- package/payload/platform/lib/account-scope/dist/index.js.map +1 -1
- package/payload/platform/lib/account-scope/src/index.ts +22 -5
- package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +43 -10
- package/payload/platform/plugins/docs/references/outlook-guide.md +42 -9
- package/payload/platform/plugins/email/references/email-reference.md +1 -1
- package/payload/platform/plugins/filesystem/PLUGIN.md +1 -1
- package/payload/platform/plugins/filesystem/mcp/dist/lib/__tests__/scope.test.js +16 -2
- package/payload/platform/plugins/filesystem/mcp/dist/lib/__tests__/scope.test.js.map +1 -1
- package/payload/platform/plugins/filesystem/mcp/dist/lib/scope.d.ts +1 -1
- package/payload/platform/plugins/filesystem/mcp/dist/lib/scope.d.ts.map +1 -1
- package/payload/platform/plugins/filesystem/mcp/dist/lib/scope.js +8 -3
- package/payload/platform/plugins/filesystem/mcp/dist/lib/scope.js.map +1 -1
- package/payload/platform/plugins/filesystem/mcp/dist/tools/__tests__/handlers.test.js +2 -2
- package/payload/platform/plugins/filesystem/mcp/dist/tools/__tests__/handlers.test.js.map +1 -1
- package/payload/platform/plugins/memory/PLUGIN.md +2 -2
- package/payload/platform/plugins/memory/mcp/dist/index-testable.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/index-testable.js +14 -5
- package/payload/platform/plugins/memory/mcp/dist/index-testable.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/index.js +6 -2
- package/payload/platform/plugins/memory/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/neo4j-constraint.d.ts +29 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/neo4j-constraint.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/neo4j-constraint.js +44 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/neo4j-constraint.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/owner-person-embed-text.test.d.ts +2 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/owner-person-embed-text.test.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/owner-person-embed-text.test.js +22 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/owner-person-embed-text.test.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-update-personfields-bootstrap.test.d.ts +2 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-update-personfields-bootstrap.test.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-update-personfields-bootstrap.test.js +204 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-update-personfields-bootstrap.test.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-update-personfields-embed.test.d.ts +2 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-update-personfields-embed.test.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-update-personfields-embed.test.js +78 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-update-personfields-embed.test.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/resolve-tool-account.test.js +2 -2
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/resolve-tool-account.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.d.ts +0 -5
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.js +2 -12
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/profile-update.d.ts +17 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/profile-update.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/profile-update.js +137 -6
- package/payload/platform/plugins/memory/mcp/dist/tools/profile-update.js.map +1 -1
- package/payload/platform/plugins/outlook/.claude-plugin/plugin.json +1 -1
- package/payload/platform/plugins/outlook/PLUGIN.md +40 -7
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/account-register.test.d.ts +2 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/account-register.test.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/account-register.test.js +137 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/account-register.test.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/calendar-write.test.d.ts +2 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/calendar-write.test.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/calendar-write.test.js +186 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/calendar-write.test.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/device-flow.test.d.ts +2 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/device-flow.test.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/device-flow.test.js +110 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/device-flow.test.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/graph-client-retry.test.d.ts +2 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/graph-client-retry.test.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/graph-client-retry.test.js +108 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/graph-client-retry.test.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/graph-client.test.js +13 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/graph-client.test.js.map +1 -1
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/message.test.d.ts +2 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/message.test.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/message.test.js +32 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/message.test.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/pending-store.test.d.ts +2 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/pending-store.test.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/pending-store.test.js +67 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/pending-store.test.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/pkce-flow.test.js +7 -5
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/pkce-flow.test.js.map +1 -1
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/write-tools.test.d.ts +2 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/write-tools.test.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/write-tools.test.js +141 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/write-tools.test.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/auth/device-flow.d.ts +69 -0
- package/payload/platform/plugins/outlook/mcp/dist/auth/device-flow.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/auth/device-flow.js +129 -0
- package/payload/platform/plugins/outlook/mcp/dist/auth/device-flow.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/auth/pending-store.d.ts +39 -0
- package/payload/platform/plugins/outlook/mcp/dist/auth/pending-store.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/auth/pending-store.js +101 -0
- package/payload/platform/plugins/outlook/mcp/dist/auth/pending-store.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/auth/pkce-flow.d.ts.map +1 -1
- package/payload/platform/plugins/outlook/mcp/dist/auth/pkce-flow.js +3 -2
- package/payload/platform/plugins/outlook/mcp/dist/auth/pkce-flow.js.map +1 -1
- package/payload/platform/plugins/outlook/mcp/dist/index.js +187 -5
- package/payload/platform/plugins/outlook/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/outlook/mcp/dist/lib/graph-client.d.ts +34 -1
- package/payload/platform/plugins/outlook/mcp/dist/lib/graph-client.d.ts.map +1 -1
- package/payload/platform/plugins/outlook/mcp/dist/lib/graph-client.js +96 -7
- package/payload/platform/plugins/outlook/mcp/dist/lib/graph-client.js.map +1 -1
- package/payload/platform/plugins/outlook/mcp/dist/lib/message.d.ts +31 -0
- package/payload/platform/plugins/outlook/mcp/dist/lib/message.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/lib/message.js +30 -0
- package/payload/platform/plugins/outlook/mcp/dist/lib/message.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/account-register.d.ts +41 -17
- package/payload/platform/plugins/outlook/mcp/dist/tools/account-register.d.ts.map +1 -1
- package/payload/platform/plugins/outlook/mcp/dist/tools/account-register.js +87 -28
- package/payload/platform/plugins/outlook/mcp/dist/tools/account-register.js.map +1 -1
- package/payload/platform/plugins/outlook/mcp/dist/tools/calendar-cancel.d.ts +17 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/calendar-cancel.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/calendar-cancel.js +38 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/calendar-cancel.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/calendar-create.d.ts +29 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/calendar-create.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/calendar-create.js +50 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/calendar-create.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/calendar-freebusy.d.ts +34 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/calendar-freebusy.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/calendar-freebusy.js +46 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/calendar-freebusy.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/calendar-respond.d.ts +15 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/calendar-respond.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/calendar-respond.js +27 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/calendar-respond.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/calendar-update.d.ts +11 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/calendar-update.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/calendar-update.js +20 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/calendar-update.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/draft-send.d.ts +17 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/draft-send.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/draft-send.js +26 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/draft-send.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/draft.d.ts +11 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/draft.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/draft.js +26 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/draft.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/mail-send.d.ts +14 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/mail-send.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/mail-send.js +26 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/mail-send.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/scripts/verify-doc-impl.sh +2 -2
- package/payload/platform/plugins/outlook/references/auth.md +51 -54
- package/payload/platform/plugins/outlook/references/graph-surfaces.md +97 -4
- package/payload/platform/plugins/outlook/skills/outlook/SKILL.md +34 -9
- package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js +9 -0
- package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/config.d.ts +18 -0
- package/payload/platform/services/claude-session-manager/dist/config.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/config.js +16 -0
- package/payload/platform/services/claude-session-manager/dist/config.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/http-server.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/http-server.js +34 -10
- package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.js +7 -2
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/rc-daemon.d.ts +9 -0
- package/payload/platform/services/claude-session-manager/dist/rc-daemon.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/rc-daemon.js +9 -0
- package/payload/platform/services/claude-session-manager/dist/rc-daemon.js.map +1 -1
- package/payload/platform/services/whatsapp-channel/dist/notification.d.ts +5 -5
- package/payload/platform/services/whatsapp-channel/dist/notification.d.ts.map +1 -1
- package/payload/platform/services/whatsapp-channel/dist/notification.js +6 -5
- package/payload/platform/services/whatsapp-channel/dist/notification.js.map +1 -1
- package/payload/platform/services/whatsapp-channel/dist/server.d.ts.map +1 -1
- package/payload/platform/services/whatsapp-channel/dist/server.js +11 -11
- package/payload/platform/services/whatsapp-channel/dist/server.js.map +1 -1
- package/payload/platform/templates/specialists/agents/personal-assistant.md +1 -1
- package/payload/server/public/assets/{AdminLoginScreens-CYPTMmTk.js → AdminLoginScreens-CBTx7ZPK.js} +1 -1
- package/payload/server/public/assets/AdminShell-DPHUeXea.js +2 -0
- package/payload/server/public/assets/{Checkbox-B0pbYJDQ.js → Checkbox-BHTxekRB.js} +1 -1
- package/payload/server/public/assets/{Transcript-CYaAPBFX.js → Transcript-5kLbBInN.js} +1 -1
- package/payload/server/public/assets/{admin-BKDMSRto.js → admin-BWCLE32N.js} +1 -1
- package/payload/server/public/assets/{browser-CxeMDDZA.js → browser-CRvCPsvV.js} +1 -1
- package/payload/server/public/assets/{calendar-DiIiTY9-.js → calendar-BI-kd-QP.js} +1 -1
- package/payload/server/public/assets/chat-DFy8hb1y.js +1 -0
- package/payload/server/public/assets/chevron-left-Bggm5B5U.js +1 -0
- package/payload/server/public/assets/data-HvZ69Ya1.js +1 -0
- package/payload/server/public/assets/{graph-DC3dwnMZ.js → graph-BFSyW_5i.js} +1 -1
- package/payload/server/public/assets/{graph-labels-Csnovm_c.js → graph-labels-DEjD_qJh.js} +1 -1
- package/payload/server/public/assets/{maximize-2-WRUJsg5n.js → maximize-2-BcMJNeCB.js} +1 -1
- package/payload/server/public/assets/{operator-BpzeHTAw.js → operator-Dtvm9ero.js} +1 -1
- package/payload/server/public/assets/{page-8jJOxx6y.js → page-C_pm3hl3.js} +1 -1
- package/payload/server/public/assets/{page-IQDLdebG.js → page-TXi9dmaB.js} +1 -1
- package/payload/server/public/assets/{public-Dqg7jwjq.js → public-DBx3U0r8.js} +1 -1
- package/payload/server/public/assets/{rotate-ccw-BayMWwfc.js → rotate-ccw-8ti3QkeY.js} +1 -1
- package/payload/server/public/assets/useSubAccountSwitcher-BUvlETHN.css +1 -0
- package/payload/server/public/assets/{useSubAccountSwitcher-C9aLg8yI.js → useSubAccountSwitcher-Bc5dOBdI.js} +1 -1
- package/payload/server/public/browser.html +4 -4
- package/payload/server/public/calendar.html +5 -5
- package/payload/server/public/chat.html +9 -9
- package/payload/server/public/data.html +8 -8
- package/payload/server/public/graph.html +9 -9
- package/payload/server/public/index.html +11 -11
- package/payload/server/public/operator.html +11 -11
- package/payload/server/public/public.html +9 -9
- package/payload/server/server.js +13 -31
- package/payload/server/public/assets/AdminShell-CZH_EZIy.js +0 -2
- package/payload/server/public/assets/chat-C56Oqvt1.js +0 -1
- package/payload/server/public/assets/chevron-left-Da-iZGi_.js +0 -1
- package/payload/server/public/assets/data-ZUdT44Ba.js +0 -1
- package/payload/server/public/assets/useSubAccountSwitcher-CRZfyJXR.css +0 -1
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { GraphClientConfig } from "../lib/graph-client.js";
|
|
2
|
+
export interface DraftSendArgs {
|
|
3
|
+
draftId: string;
|
|
4
|
+
}
|
|
5
|
+
export interface DraftSendResult {
|
|
6
|
+
status: "sent";
|
|
7
|
+
draftId: string;
|
|
8
|
+
httpStatus: number;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Send an existing draft via Graph `POST /me/messages/{id}/send` (empty body).
|
|
12
|
+
* Graph consumes the draft and returns 202. Success is asserted on the 202
|
|
13
|
+
* status. The draft-created / draft-sent id pairing in the logs is the orphan
|
|
14
|
+
* diagnostic: a draft-created id with no matching draft-sent is an orphan.
|
|
15
|
+
*/
|
|
16
|
+
export declare function runDraftSend(config: GraphClientConfig, args: DraftSendArgs): Promise<DraftSendResult>;
|
|
17
|
+
//# sourceMappingURL=draft-send.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"draft-send.d.ts","sourceRoot":"","sources":["../../src/tools/draft-send.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAIhE,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,iBAAiB,EACzB,IAAI,EAAE,aAAa,GAClB,OAAO,CAAC,eAAe,CAAC,CAoB1B"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { postGraph } from "../lib/graph-client.js";
|
|
2
|
+
import { log } from "../lib/log.js";
|
|
3
|
+
/**
|
|
4
|
+
* Send an existing draft via Graph `POST /me/messages/{id}/send` (empty body).
|
|
5
|
+
* Graph consumes the draft and returns 202. Success is asserted on the 202
|
|
6
|
+
* status. The draft-created / draft-sent id pairing in the logs is the orphan
|
|
7
|
+
* diagnostic: a draft-created id with no matching draft-sent is an orphan.
|
|
8
|
+
*/
|
|
9
|
+
export async function runDraftSend(config, args) {
|
|
10
|
+
const account = config.accountId;
|
|
11
|
+
const draftId = args.draftId.trim();
|
|
12
|
+
if (!draftId) {
|
|
13
|
+
throw new Error("outlook-draft-send: draftId is required.");
|
|
14
|
+
}
|
|
15
|
+
log({ event: "draft-send-request", account, id: draftId });
|
|
16
|
+
try {
|
|
17
|
+
const { status } = await postGraph(config, `/me/messages/${encodeURIComponent(draftId)}/send`, undefined, { tool: "draft-send" });
|
|
18
|
+
log({ event: "draft-sent", account, id: draftId, status });
|
|
19
|
+
return { status: "sent", draftId, httpStatus: status };
|
|
20
|
+
}
|
|
21
|
+
catch (err) {
|
|
22
|
+
log({ event: "draft-send-failed", account, id: draftId, error: err.message });
|
|
23
|
+
throw err;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=draft-send.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"draft-send.js","sourceRoot":"","sources":["../../src/tools/draft-send.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAYpC;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,MAAyB,EACzB,IAAmB;IAEnB,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC;IACjC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IACpC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC9D,CAAC;IACD,GAAG,CAAC,EAAE,KAAK,EAAE,oBAAoB,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IAC3D,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAChC,MAAM,EACN,gBAAgB,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAClD,SAAS,EACT,EAAE,IAAI,EAAE,YAAY,EAAE,CACvB,CAAC;QACF,GAAG,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QAC3D,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;IACzD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAG,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QACzF,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { GraphClientConfig } from "../lib/graph-client.js";
|
|
2
|
+
import { type MessageInput } from "../lib/message.js";
|
|
3
|
+
export interface DraftResult {
|
|
4
|
+
draftId: string;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Create a draft via Graph `POST /me/messages`. Graph returns 201 with the
|
|
8
|
+
* created message, whose `id` is the stable handle passed to outlook-draft-send.
|
|
9
|
+
*/
|
|
10
|
+
export declare function runDraft(config: GraphClientConfig, input: MessageInput): Promise<DraftResult>;
|
|
11
|
+
//# sourceMappingURL=draft.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"draft.d.ts","sourceRoot":"","sources":["../../src/tools/draft.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAEhE,OAAO,EAAgB,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGpE,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,iBAAiB,EACzB,KAAK,EAAE,YAAY,GAClB,OAAO,CAAC,WAAW,CAAC,CAgBtB"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { postGraph } from "../lib/graph-client.js";
|
|
2
|
+
import { buildMessage } from "../lib/message.js";
|
|
3
|
+
import { log } from "../lib/log.js";
|
|
4
|
+
/**
|
|
5
|
+
* Create a draft via Graph `POST /me/messages`. Graph returns 201 with the
|
|
6
|
+
* created message, whose `id` is the stable handle passed to outlook-draft-send.
|
|
7
|
+
*/
|
|
8
|
+
export async function runDraft(config, input) {
|
|
9
|
+
const account = config.accountId;
|
|
10
|
+
log({ event: "draft-request", account });
|
|
11
|
+
const message = buildMessage(input);
|
|
12
|
+
try {
|
|
13
|
+
const { json } = await postGraph(config, "/me/messages", message, { tool: "draft" });
|
|
14
|
+
const draftId = json?.id;
|
|
15
|
+
if (!draftId) {
|
|
16
|
+
throw new Error("outlook-draft: Graph created the draft but returned no id.");
|
|
17
|
+
}
|
|
18
|
+
log({ event: "draft-created", account, id: draftId });
|
|
19
|
+
return { draftId };
|
|
20
|
+
}
|
|
21
|
+
catch (err) {
|
|
22
|
+
log({ event: "draft-failed", account, error: err.message });
|
|
23
|
+
throw err;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=draft.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"draft.js","sourceRoot":"","sources":["../../src/tools/draft.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAqB,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAMpC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,MAAyB,EACzB,KAAmB;IAEnB,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC;IACjC,GAAG,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACpC,IAAI,CAAC;QACH,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,SAAS,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QACrF,MAAM,OAAO,GAAI,IAA+B,EAAE,EAAE,CAAC;QACrD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;QAChF,CAAC;QACD,GAAG,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QACtD,OAAO,EAAE,OAAO,EAAE,CAAC;IACrB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,KAAK,EAAG,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QACvE,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { GraphClientConfig } from "../lib/graph-client.js";
|
|
2
|
+
import { type MessageInput } from "../lib/message.js";
|
|
3
|
+
export interface MailSendResult {
|
|
4
|
+
status: "sent";
|
|
5
|
+
httpStatus: number;
|
|
6
|
+
messageId: string | null;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Send a message via Graph `POST /me/sendMail`. Graph returns 202 with no body,
|
|
10
|
+
* so `messageId` is null unless a body is ever returned. Success is asserted on
|
|
11
|
+
* the 202 status, not on the absence of a throw.
|
|
12
|
+
*/
|
|
13
|
+
export declare function runMailSend(config: GraphClientConfig, input: MessageInput): Promise<MailSendResult>;
|
|
14
|
+
//# sourceMappingURL=mail-send.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mail-send.d.ts","sourceRoot":"","sources":["../../src/tools/mail-send.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAEhE,OAAO,EAAgB,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGpE,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,iBAAiB,EACzB,KAAK,EAAE,YAAY,GAClB,OAAO,CAAC,cAAc,CAAC,CAoBzB"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { postGraph } from "../lib/graph-client.js";
|
|
2
|
+
import { buildMessage } from "../lib/message.js";
|
|
3
|
+
import { log } from "../lib/log.js";
|
|
4
|
+
/**
|
|
5
|
+
* Send a message via Graph `POST /me/sendMail`. Graph returns 202 with no body,
|
|
6
|
+
* so `messageId` is null unless a body is ever returned. Success is asserted on
|
|
7
|
+
* the 202 status, not on the absence of a throw.
|
|
8
|
+
*/
|
|
9
|
+
export async function runMailSend(config, input) {
|
|
10
|
+
const account = config.accountId;
|
|
11
|
+
log({ event: "send-request", account, to: input.to.length, subjLen: input.subject.length });
|
|
12
|
+
const message = buildMessage(input);
|
|
13
|
+
const recipients = input.to.length + (input.cc?.length ?? 0) + (input.bcc?.length ?? 0);
|
|
14
|
+
log({ event: "send-args", account, recipients, hasBody: input.body.length > 0 });
|
|
15
|
+
try {
|
|
16
|
+
const { status, json } = await postGraph(config, "/me/sendMail", { message, saveToSentItems: true }, { tool: "mail-send" });
|
|
17
|
+
const messageId = json?.id ?? null;
|
|
18
|
+
log({ event: "sent", account, status, messageId });
|
|
19
|
+
return { status: "sent", httpStatus: status, messageId };
|
|
20
|
+
}
|
|
21
|
+
catch (err) {
|
|
22
|
+
log({ event: "send-failed", account, error: err.message });
|
|
23
|
+
throw err;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=mail-send.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mail-send.js","sourceRoot":"","sources":["../../src/tools/mail-send.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAqB,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAQpC;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,MAAyB,EACzB,KAAmB;IAEnB,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC;IACjC,GAAG,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5F,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACpC,MAAM,UAAU,GAAG,KAAK,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,IAAI,CAAC,CAAC,CAAC;IACxF,GAAG,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC;IACjF,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,SAAS,CACtC,MAAM,EACN,cAAc,EACd,EAAE,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,EAClC,EAAE,IAAI,EAAE,WAAW,EAAE,CACtB,CAAC;QACF,MAAM,SAAS,GAAI,IAA+B,EAAE,EAAE,IAAI,IAAI,CAAC;QAC/D,GAAG,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;QACnD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IAC3D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,KAAK,EAAG,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QACtE,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC"}
|
|
@@ -45,8 +45,8 @@ TOOLS_REGISTERED=$(grep -oE '"outlook-[a-z\-]+",' "$INDEX_TS" \
|
|
|
45
45
|
# Tool names referenced in outlook-guide.md (backtick-wrapped)
|
|
46
46
|
TOOLS_IN_GUIDE=$(grep -oE '`outlook-[a-z\-]+`' "$GUIDE" | tr -d '`' | sort -u)
|
|
47
47
|
|
|
48
|
-
# Tool names in PLUGIN.md frontmatter (lines
|
|
49
|
-
TOOLS_IN_PLUGIN_MD=$(grep -E '
|
|
48
|
+
# Tool names in PLUGIN.md frontmatter (lines shaped " - name: outlook-...")
|
|
49
|
+
TOOLS_IN_PLUGIN_MD=$(grep -E '^[[:space:]]+- name: outlook-' "$PLUGIN_MD" | sed -E 's/^[[:space:]]*-[[:space:]]+name:[[:space:]]*//' | sort -u)
|
|
50
50
|
|
|
51
51
|
# Set 1: every tool in guide must be registered
|
|
52
52
|
while IFS= read -r tool; do
|
|
@@ -1,102 +1,99 @@
|
|
|
1
1
|
# Outlook Auth Reference
|
|
2
2
|
|
|
3
|
-
##
|
|
3
|
+
## Provenance
|
|
4
4
|
|
|
5
|
-
The
|
|
5
|
+
The device-code register flow is **bespoke to SiteDesk**, not vendored. It is not the `nsakki55/outlook-mcp` loopback `authManager` — that ran an HTTP server on the box and required consent in a browser on the same machine, which is impossible on a headless/remote install. `device-flow.ts` talks to Microsoft's `/devicecode` and `/token` endpoints directly.
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
- **Pinned commit:** `e49d8e68ac8d69db653c25803127dc3b98626cda`
|
|
9
|
-
- **License:** MIT
|
|
10
|
-
|
|
11
|
-
Adaptations:
|
|
7
|
+
The **encrypted token store** (`token-store.ts`) is still adapted from [`nsakki55/outlook-mcp`](https://github.com/nsakki55/outlook-mcp) (commit `e49d8e68ac8d69db653c25803127dc3b98626cda`, MIT):
|
|
12
8
|
|
|
13
9
|
- Per-account paths (`{ACCOUNTS_DIR}/{accountId}/secrets/outlook/`) instead of upstream's single-user `~/.outlook-mcp/`
|
|
14
10
|
- `keytar` fallback removed (Pi runs headless; no Secret Service)
|
|
15
11
|
- `node-persist` removed; single JSON blob written atomically (temp + rename)
|
|
16
|
-
- Loopback callback port is **ephemeral** via `server.listen(0)` (upstream uses fixed `49152`)
|
|
17
|
-
- No `xdg-open` browser auto-launch; auth URL is logged + returned to the operator for the VNC browser
|
|
18
|
-
- `outlook-account-register` awaits the full PKCE flow synchronously (5-min timeout)
|
|
19
12
|
|
|
20
|
-
|
|
13
|
+
## Client ID model: one vendor app per brand
|
|
14
|
+
|
|
15
|
+
End users never register an Azure app. The `OUTLOOK_CLIENT_ID` is a **public, non-secret** value (a PKCE public-client app has no client secret), and the app is **multi-tenant** (`/common`), so **one vendor-owned Entra app per brand** serves every install and every mailbox on that brand. End users only complete the OAuth consent screen; per-mailbox tokens stay per-account and encrypted, so a shared client ID does not weaken isolation.
|
|
21
16
|
|
|
22
|
-
|
|
23
|
-
2. Apply the adaptations above.
|
|
24
|
-
3. Update the **Pinned commit** line above.
|
|
25
|
-
4. Bump `@maxy/outlook` version.
|
|
26
|
-
5. Run the test suite.
|
|
17
|
+
The value ships as the brand default: `brands/<brand>/brand.json#outlookClientId`. The installer stamps it onto the `-claude-session-manager` unit env as `OUTLOOK_CLIENT_ID` (+ `OUTLOOK_TENANT_ID=common`), and the plugin resolves it through the PLUGIN.md `mcp.env` passthrough. A brand that ships the field empty has the plugin inert (register refuses) until its vendor app exists — no operator action makes it work.
|
|
27
18
|
|
|
28
|
-
|
|
19
|
+
**Per-install override (escape hatch, not required):** setting `OUTLOOK_CLIENT_ID` in the install's env overrides the brand default. This is only for a vendor testing a replacement app; normal installs need nothing.
|
|
29
20
|
|
|
30
|
-
|
|
21
|
+
### Vendor provisioning runbook (one-time per brand)
|
|
31
22
|
|
|
32
|
-
|
|
23
|
+
Run once per brand to mint the app whose ID goes in that brand's `brand.json`. Not an end-user step.
|
|
24
|
+
|
|
25
|
+
1. Sign in to the [Azure portal](https://portal.azure.com) with the brand's Microsoft account.
|
|
33
26
|
2. Go to **Microsoft Entra ID → App registrations → New registration**.
|
|
34
|
-
3. **Name:**
|
|
35
|
-
4. **Supported account types:** *Accounts in any organizational directory and personal Microsoft accounts
|
|
36
|
-
5. **Redirect URI**
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
27
|
+
3. **Name:** the brand's product name plus "Outlook" (e.g. `SiteDesk Outlook`).
|
|
28
|
+
4. **Supported account types:** *Accounts in any organizational directory and personal Microsoft accounts* (multi-tenant is required — one app serves every end user's tenant).
|
|
29
|
+
5. Leave **Redirect URI** empty. The device-code flow does not use one.
|
|
30
|
+
6. Click **Register**. Copy the **Application (client) ID** — this is the brand's `outlookClientId`.
|
|
31
|
+
7. Go to **Authentication → Advanced settings → Allow public client flows** and set it to **Yes**. The device-code grant is a public-client flow and fails with `AADSTS7000218` if this is off.
|
|
32
|
+
8. Go to **API permissions → Add a permission → Microsoft Graph → Delegated permissions**, add:
|
|
40
33
|
- `offline_access`
|
|
41
34
|
- `User.Read`
|
|
42
|
-
- `Mail.
|
|
35
|
+
- `Mail.ReadWrite`
|
|
36
|
+
- `Mail.Send`
|
|
43
37
|
- `Calendars.Read`
|
|
44
38
|
- `Contacts.Read`
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
|
|
39
|
+
9. Leave admin consent to the end user: with delegated scopes on a multi-tenant app, each end user consents for their own mailbox at first sign-in. (Frictionless cross-tenant consent is smoother once the app is publisher-verified via MPN — a separate enabling step.)
|
|
40
|
+
10. Set the value in the brand's `brand.json` and re-bundle:
|
|
41
|
+
```jsonc
|
|
42
|
+
// brands/<brand>/brand.json
|
|
43
|
+
"outlookClientId": "<the Application (client) ID copied above>"
|
|
50
44
|
```
|
|
45
|
+
`OUTLOOK_TENANT_ID` is always `common`; the installer stamps it and no brand field is needed.
|
|
51
46
|
|
|
52
|
-
##
|
|
47
|
+
## Device-code flow (per-account)
|
|
53
48
|
|
|
54
|
-
|
|
49
|
+
Two tools: `outlook-account-register` starts the flow, `outlook-account-register-poll` completes it. No loopback server, no same-machine constraint — the operator consents on any device.
|
|
55
50
|
|
|
56
51
|
```
|
|
57
52
|
operator plugin Microsoft
|
|
58
53
|
| | |
|
|
59
54
|
| outlook-account-register | |
|
|
60
|
-
|--------------------------------------------->|
|
|
61
|
-
| |
|
|
62
|
-
| |
|
|
63
|
-
| |
|
|
64
|
-
| |
|
|
65
|
-
| |
|
|
66
|
-
|
|
|
55
|
+
|--------------------------------------------->| POST /devicecode (client_id+scope) |
|
|
56
|
+
| | -----------------------------------> |
|
|
57
|
+
| | < device_code, user_code, |
|
|
58
|
+
| | verification_uri, expires_in, |
|
|
59
|
+
| | interval |
|
|
60
|
+
| | <----------------------------------- |
|
|
61
|
+
| | encrypt → write {pending-devicecode.enc}
|
|
62
|
+
| { status: "pending", userCode, | |
|
|
63
|
+
| verificationUri, ... } | |
|
|
67
64
|
|<---------------------------------------------| |
|
|
68
65
|
| | |
|
|
69
|
-
| open
|
|
70
|
-
|
|
66
|
+
| open microsoft.com/devicelogin on ANY device | |
|
|
67
|
+
| enter userCode, sign in, consent ------------------------------------------------> |
|
|
71
68
|
| | |
|
|
72
|
-
|
|
|
73
|
-
|
|
|
74
|
-
| | GET /callback?code=...&state=... |
|
|
75
|
-
| | <----------------------------------|
|
|
76
|
-
| | |
|
|
77
|
-
| | verify state |
|
|
78
|
-
| | POST /token (code + verifier) |
|
|
69
|
+
| outlook-account-register-poll (repeat) | |
|
|
70
|
+
|--------------------------------------------->| POST /token (device_code grant) |
|
|
79
71
|
| | -----------------------------------> |
|
|
80
|
-
| | <
|
|
72
|
+
| | < authorization_pending → pending |
|
|
73
|
+
| | < tokens (once consented) → success |
|
|
81
74
|
| | <----------------------------------- |
|
|
82
75
|
| | encrypt → write {tokens.enc} |
|
|
83
76
|
| | GET /me (record graphUserId) |
|
|
84
|
-
| |
|
|
85
|
-
| | |
|
|
77
|
+
| | clear pending (verified re-stat) |
|
|
86
78
|
| { status: "registered", graphUserId, ... } | |
|
|
87
79
|
|<---------------------------------------------| |
|
|
88
80
|
```
|
|
89
81
|
|
|
82
|
+
`poll` maps Microsoft's polling errors: `authorization_pending` → `pending` (wait `intervalSec`, poll again), `slow_down` → `pending` with a bumped interval, `expired_token` → `expired`, `access_denied` → `denied`.
|
|
83
|
+
|
|
90
84
|
## Token store layout
|
|
91
85
|
|
|
92
86
|
Per-account, mode 0700 directory + mode 0600 files:
|
|
93
87
|
|
|
94
88
|
```
|
|
95
89
|
data/accounts/<accountId>/secrets/outlook/
|
|
96
|
-
├── .key
|
|
97
|
-
|
|
90
|
+
├── .key # 32 random bytes, base64-encoded — the AES-256-CBC key
|
|
91
|
+
├── tokens.enc # AES-256-CBC ciphertext: "<iv-hex>:<cipher-hex>" of the token JSON blob
|
|
92
|
+
└── pending-devicecode.enc # transient — the device_code between register + poll; cleared on any terminal outcome
|
|
98
93
|
```
|
|
99
94
|
|
|
95
|
+
The pending file reuses the same `.key`. It is written by `outlook-account-register` and removed (verified by re-stat) when polling reaches `registered`, `expired`, or `denied`, so a device_code never lingers.
|
|
96
|
+
|
|
100
97
|
The JSON blob shape:
|
|
101
98
|
|
|
102
99
|
```typescript
|
|
@@ -28,6 +28,42 @@ Array<{
|
|
|
28
28
|
|
|
29
29
|
**Returned shape:** identical to `outlook-mail-list`.
|
|
30
30
|
|
|
31
|
+
## outlook-mail-send
|
|
32
|
+
|
|
33
|
+
**Endpoint:** `POST /me/sendMail`
|
|
34
|
+
|
|
35
|
+
**Request body:**
|
|
36
|
+
```json
|
|
37
|
+
{
|
|
38
|
+
"message": {
|
|
39
|
+
"subject": "…",
|
|
40
|
+
"body": { "contentType": "Text | HTML", "content": "…" },
|
|
41
|
+
"toRecipients": [{ "emailAddress": { "address": "a@example.com" } }],
|
|
42
|
+
"ccRecipients": [ … ],
|
|
43
|
+
"bccRecipients": [ … ]
|
|
44
|
+
},
|
|
45
|
+
"saveToSentItems": true
|
|
46
|
+
}
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
**Success:** HTTP `202 Accepted`, empty body. No message id is returned. The tool asserts on the 202 — an empty body is not proof of send.
|
|
50
|
+
|
|
51
|
+
## outlook-draft
|
|
52
|
+
|
|
53
|
+
**Endpoint:** `POST /me/messages`
|
|
54
|
+
|
|
55
|
+
**Request body:** the `message` object above (no `saveToSentItems` wrapper).
|
|
56
|
+
|
|
57
|
+
**Success:** HTTP `201 Created` with the created message JSON; `id` is the stable handle for `outlook-draft-send`.
|
|
58
|
+
|
|
59
|
+
## outlook-draft-send
|
|
60
|
+
|
|
61
|
+
**Endpoint:** `POST /me/messages/{id}/send`
|
|
62
|
+
|
|
63
|
+
**Request body:** none.
|
|
64
|
+
|
|
65
|
+
**Success:** HTTP `202 Accepted`, empty body. Graph consumes the draft (it moves out of Drafts on send).
|
|
66
|
+
|
|
31
67
|
## outlook-calendar-list
|
|
32
68
|
|
|
33
69
|
**Endpoint:** `GET /me/calendarView?startDateTime={now}&endDateTime={now+rangeDays}&$top={N}&$orderby=start/dateTime ASC&$select=id,subject,start,end,location,attendees,isAllDay,organizer`
|
|
@@ -59,6 +95,54 @@ Array<{
|
|
|
59
95
|
}
|
|
60
96
|
```
|
|
61
97
|
|
|
98
|
+
## outlook-calendar-create
|
|
99
|
+
|
|
100
|
+
**Endpoint:** `POST /me/events` (`ResponseType.RAW`; success asserted on HTTP 201).
|
|
101
|
+
|
|
102
|
+
**Request body:** `subject`, `start`/`end` (`{ dateTime, timeZone }`), and optionally `body` (`{ contentType: "HTML", content }`), `location` (`{ displayName }`), `attendees` (`{ emailAddress: { address, name }, type }`), `isOnlineMeeting`, `recurrence` (Graph recurrence object, passed through).
|
|
103
|
+
|
|
104
|
+
**Returned shape:** `{ eventId: string; webLink: string | null }`.
|
|
105
|
+
|
|
106
|
+
## outlook-calendar-update
|
|
107
|
+
|
|
108
|
+
**Endpoint:** `PATCH /me/events/{eventId}` (`ResponseType.RAW`; success asserted on HTTP 200).
|
|
109
|
+
|
|
110
|
+
**Request body:** only the supplied fields, same shapes as create.
|
|
111
|
+
|
|
112
|
+
**Returned shape:** `{ eventId: string; updated: true }`.
|
|
113
|
+
|
|
114
|
+
## outlook-calendar-cancel
|
|
115
|
+
|
|
116
|
+
**Endpoint:** determined by a pre-GET on `GET /me/events/{eventId}?$select=isOrganizer,attendees`.
|
|
117
|
+
- Organiser of a meeting with attendees: `POST /me/events/{eventId}/cancel` with `{ Comment }` (HTTP 202); attendees are notified.
|
|
118
|
+
- Otherwise: `DELETE /me/events/{eventId}` (HTTP 204).
|
|
119
|
+
|
|
120
|
+
**Returned shape:** `{ eventId: string; mode: "cancel" | "delete" }`.
|
|
121
|
+
|
|
122
|
+
## outlook-calendar-respond
|
|
123
|
+
|
|
124
|
+
**Endpoint:** `POST /me/events/{eventId}/{accept|decline|tentativelyAccept}` with `{ Comment, SendResponse }` (HTTP 202). `action=tentative` maps to `tentativelyAccept`.
|
|
125
|
+
|
|
126
|
+
**Returned shape:** `{ eventId: string; action: "accept" | "decline" | "tentative" }`.
|
|
127
|
+
|
|
128
|
+
## outlook-calendar-freebusy
|
|
129
|
+
|
|
130
|
+
**Endpoint:** `POST /me/calendar/getSchedule` with `{ schedules, startTime, endTime, availabilityViewInterval }` (HTTP 200).
|
|
131
|
+
|
|
132
|
+
**Returned shape:**
|
|
133
|
+
```typescript
|
|
134
|
+
{
|
|
135
|
+
requested: number;
|
|
136
|
+
resolved: number; // count of error-free entries; resolved < requested flags a failed address
|
|
137
|
+
availability: Array<{
|
|
138
|
+
address: string; // scheduleId
|
|
139
|
+
availabilityView: string;
|
|
140
|
+
busy: Array<{ start: string; end: string; status: string }>;
|
|
141
|
+
error: string | null; // Graph FreeBusyError message when the address could not be resolved
|
|
142
|
+
}>;
|
|
143
|
+
}
|
|
144
|
+
```
|
|
145
|
+
|
|
62
146
|
## outlook-contacts-list
|
|
63
147
|
|
|
64
148
|
**Endpoint:** `GET /me/contacts?$top={N}&$select=id,displayName,emailAddresses,businessPhones,homePhones,mobilePhone,jobTitle,companyName`
|
|
@@ -94,19 +178,28 @@ Array<{
|
|
|
94
178
|
|
|
95
179
|
## outlook-account-register
|
|
96
180
|
|
|
97
|
-
No Graph endpoint of its own
|
|
181
|
+
Starts the device-code flow. No Graph endpoint of its own:
|
|
182
|
+
|
|
183
|
+
- `POST https://login.microsoftonline.com/{tenant}/oauth2/v2.0/devicecode` (client_id + scope)
|
|
184
|
+
|
|
185
|
+
Returns `{ status: "pending", userCode, verificationUri, verificationUriComplete, expiresInSec, intervalSec }` immediately and writes an encrypted pending entry. Does not block.
|
|
186
|
+
|
|
187
|
+
## outlook-account-register-poll
|
|
188
|
+
|
|
189
|
+
One token poll per call:
|
|
98
190
|
|
|
99
|
-
- `POST https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token`
|
|
191
|
+
- `POST https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token` with `grant_type=urn:ietf:params:oauth:grant-type:device_code`
|
|
100
192
|
|
|
101
|
-
|
|
193
|
+
Returns `pending` / `registered` / `expired` / `denied`. On `registered`, the tool fetches `GET /me?$select=id,mail,userPrincipalName` to record `graphUserId`, persists tokens, and clears the pending entry.
|
|
102
194
|
|
|
103
195
|
## Error classification
|
|
104
196
|
|
|
105
|
-
All tool failures route through `lib/graph-client.ts:classifyGraphError`. Decisions key off **status code + Graph `error.code` field + headers**, never the error `message` body.
|
|
197
|
+
All tool failures route through `lib/graph-client.ts:classifyGraphError`. Decisions key off **status code + Graph `error.code` field + headers**, never the error `message` body. Read tools use `callGraph` (the Graph SDK throws on non-2xx); write tools use `postGraph` / `patchGraph` / `deleteGraph` (one `writeGraph` core), which request `ResponseType.RAW` so a non-2xx status is returned rather than thrown, normalize it into the shape `classifyGraphError` reads, and re-throw it through `callGraph`'s loop — success is asserted on the status code.
|
|
106
198
|
|
|
107
199
|
| HTTP status | Graph `error.code` | Class | Action |
|
|
108
200
|
|---|---|---|---|
|
|
109
201
|
| 401 | (any) | `auth` | Refresh once, retry; if still 401 → terminal `auth-required` |
|
|
202
|
+
| 403 | (any) | `scope-insufficient` | Terminal: name the scope the failing tool needs (`Mail.Send`, `Mail.ReadWrite`, or `Calendars.ReadWrite` for a calendar write) and route the operator to `outlook-account-register` |
|
|
110
203
|
| 429 | (any) — header `Retry-After` present | `rate-limit-recoverable` | Backoff per header, retry once |
|
|
111
204
|
| 429 | (any) — header `Retry-After` absent | `rate-limit-terminal` | Terminal abort |
|
|
112
205
|
| 503 | `MailboxNotEnabledForRESTAPI` | `on-prem` | Terminal: route operator to IMAP plugin |
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: outlook
|
|
3
|
-
description: "Microsoft 365 / Outlook.com via Microsoft Graph
|
|
3
|
+
description: "Microsoft 365 / Outlook.com via Microsoft Graph. Mail is read, draft, and send; contacts are read-only; the calendar is read plus control. Use when the user asks about their Outlook mail, calendar, or contacts, wants to send or draft a message, or asks to book, move, cancel, or accept a calendar event. First-time use requires outlook-account-register plus outlook-account-register-poll; subsequent use is transparent. Tools: outlook-mail-list / outlook-mail-search (inbox), outlook-mail-send / outlook-draft / outlook-draft-send (compose and send), outlook-calendar-list / outlook-calendar-event (read calendar), outlook-calendar-create / outlook-calendar-update / outlook-calendar-cancel / outlook-calendar-respond / outlook-calendar-freebusy (control calendar), outlook-contacts-list (contacts), outlook-mailbox-info (health), outlook-account-register / outlook-account-register-poll (device-code register)."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Outlook (Microsoft Graph)
|
|
7
7
|
|
|
8
8
|
Invoked from `specialists:personal-assistant`.
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
Access to the user's Outlook.com or Microsoft 365 mailbox via Microsoft Graph. Mail is read, draft, and send; contacts are read-only. The calendar is read plus control: the agent can book, reschedule, cancel, and respond to events, and check availability. Per-account OAuth, encrypted token storage, refresh handled automatically.
|
|
11
11
|
|
|
12
12
|
## When to activate
|
|
13
13
|
|
|
@@ -21,29 +21,52 @@ Do **not** activate for:
|
|
|
21
21
|
|
|
22
22
|
- IMAP-only providers (Gmail, iCloud, custom domains not on Microsoft 365) — use the `email` plugin instead.
|
|
23
23
|
- On-premises Exchange — Microsoft Graph deprecated hybrid REST 2023-07. The plugin detects on-prem mailboxes and emits a clear error pointing to the IMAP path.
|
|
24
|
-
-
|
|
24
|
+
- Moving, flagging, or deleting messages, or writing to contacts — out of scope. Mail read, draft, and send are supported, and the calendar is read plus control; contacts stay read-only.
|
|
25
25
|
|
|
26
26
|
## First-time setup (one-time per account)
|
|
27
27
|
|
|
28
|
-
The
|
|
28
|
+
The client ID ships with the brand, so there is no app to register and no Azure work. End users only consent to the mailbox they want to connect. The vendor app that backs the brand is provisioned once per brand and documented at [`references/auth.md`](references/auth.md); end users never touch it.
|
|
29
29
|
|
|
30
|
-
|
|
30
|
+
Connect a mailbox via the device-code flow. The operator never needs the box's browser and never screen-shares.
|
|
31
31
|
|
|
32
|
-
1. **`outlook-account-register
|
|
33
|
-
2.
|
|
32
|
+
1. Call **`outlook-account-register`**. It returns immediately with `{ status: "pending", userCode, verificationUri, verificationUriComplete, expiresInSec, intervalSec }`. Relay the `userCode` and `verificationUri` to the operator in your reply.
|
|
33
|
+
2. The operator opens `verificationUri` (`microsoft.com/devicelogin`) on any device (their phone or laptop), enters the `userCode`, signs in with the Microsoft account they want to connect, and consents to the requested scopes (`offline_access`, `User.Read`, `Mail.ReadWrite`, `Mail.Send`, `Calendars.ReadWrite`, `Contacts.Read`). `Mail.Send` enables sending and `Calendars.ReadWrite` enables calendar control; a mailbox last consented on an older read-only scope set must re-register before send or any calendar write succeeds.
|
|
34
|
+
3. Call **`outlook-account-register-poll`** once per check. While it returns `{ status: "pending" }`, wait `intervalSec` seconds and call it again. It returns `{ status: "registered", graphUserId, scopes, tokenExpSec }` once consent completes, `{ status: "expired" }` if the code timed out (restart at step 1), or `{ status: "denied" }` if the operator declined.
|
|
34
35
|
|
|
35
36
|
Subsequent tool calls use the persisted refresh token to mint access tokens transparently. Re-register is only needed if the refresh token expires (90 days) or the user revokes consent.
|
|
36
37
|
|
|
38
|
+
If the brand ships no vendor app yet, `outlook-account-register` reports that the client ID is not configured. There is no per-install workaround; the brand's vendor app has to exist first.
|
|
39
|
+
|
|
40
|
+
**Microsoft mail does not use IMAP or app passwords.** Microsoft retired Basic auth for Exchange Online and app passwords stopped working. Never route a Microsoft mailbox through the `email` plugin's IMAP path, and never suggest an app password. The device-code flow above is the only supported connection.
|
|
41
|
+
|
|
37
42
|
## Reading mail
|
|
38
43
|
|
|
39
44
|
- `outlook-mail-list` — recent mail, default top=25, folder=Inbox.
|
|
40
45
|
- `outlook-mail-search query=<keyword>` — Microsoft Graph `$search` over the mailbox.
|
|
41
46
|
|
|
47
|
+
## Sending and drafting
|
|
48
|
+
|
|
49
|
+
- `outlook-mail-send` — send a message. `to` is an array of addresses (at least one); `cc`/`bcc` optional arrays; `subject`; `body`; `isHtml` true for an HTML body, otherwise plain text. A copy is saved to Sent Items. Success is confirmed on Graph's 202 response.
|
|
50
|
+
- `outlook-draft` — create a draft in the Drafts folder (same fields as send). Returns the draft's id.
|
|
51
|
+
- `outlook-draft-send draftId=<id>` — send a draft created earlier. Graph consumes the draft on send.
|
|
52
|
+
|
|
53
|
+
If the mailbox was registered before send was available, the first send returns "re-register to grant send" — run `outlook-account-register` again and consent to the send scopes.
|
|
54
|
+
|
|
42
55
|
## Reading calendar
|
|
43
56
|
|
|
44
57
|
- `outlook-calendar-list rangeDays=<N>` — events in the next N days (default 7, max 365).
|
|
45
58
|
- `outlook-calendar-event eventId=<id>` — single event with full body and attendees.
|
|
46
59
|
|
|
60
|
+
## Controlling calendar
|
|
61
|
+
|
|
62
|
+
All calendar writes need the `Calendars.ReadWrite` consent (see setup above). Times are `{ dateTime, timeZone }`, for example `{ "dateTime": "2026-07-10T09:00:00", "timeZone": "Europe/London" }`.
|
|
63
|
+
|
|
64
|
+
- `outlook-calendar-create` — book an event. Requires `subject`, `start`, `end`. Optional `body`, `attendees` (each `{ email, name?, type? }`), `location`, `isOnlineMeeting`, and a Graph `recurrence` object. Returns the new `eventId` and `webLink`.
|
|
65
|
+
- `outlook-calendar-update eventId=<id>` — reschedule or edit. Pass only the fields to change.
|
|
66
|
+
- `outlook-calendar-cancel eventId=<id>` — cancel. When the account organises a meeting with attendees, this posts a cancellation that notifies them (optional `comment` is the message); otherwise it deletes the event from the calendar. The chosen mode is reported back.
|
|
67
|
+
- `outlook-calendar-respond eventId=<id> action=<accept|decline|tentative>` — reply to an invite. Optional `comment`; `sendResponse` defaults to true.
|
|
68
|
+
- `outlook-calendar-freebusy schedules=[<address>...]` — availability for one or more addresses over a `start`/`end` window (optional `intervalMinutes`, default 60). Each address Graph cannot resolve comes back with an `error` (not counted in `resolved`), so a `resolved` count below `requested` flags a bad or inaccessible address rather than reading it as free.
|
|
69
|
+
|
|
47
70
|
## Reading contacts
|
|
48
71
|
|
|
49
72
|
- `outlook-contacts-list` — top contacts, default top=50.
|
|
@@ -56,14 +79,16 @@ Subsequent tool calls use the persisted refresh token to mint access tokens tran
|
|
|
56
79
|
|
|
57
80
|
| Error | Meaning | Operator action |
|
|
58
81
|
|---|---|---|
|
|
59
|
-
| `auth-required` | Account not registered, or refresh token expired | Run `outlook-account-register` |
|
|
82
|
+
| `auth-required` | Account not registered, or refresh token expired | Run `outlook-account-register`, then `outlook-account-register-poll` |
|
|
83
|
+
| `Calendars.ReadWrite scope not granted` | Mailbox last consented on the old read-only calendar scope | Re-run `outlook-account-register` + `outlook-account-register-poll` to re-consent with calendar write |
|
|
60
84
|
| `Outlook token refresh failed` | Network down or refresh token invalidated | Verify connectivity; re-run register if persistent |
|
|
61
85
|
| `Microsoft Graph does not support on-premises Exchange` | Mailbox is on hybrid Exchange | Use the `email` plugin (IMAP) |
|
|
86
|
+
| `Outlook send scope not granted (missing Mail.Send)` | Mailbox registered under the old read-only consent | Re-run `outlook-account-register` and consent to the send scopes |
|
|
62
87
|
| `Outlook rate-limited without Retry-After hint` | Graph 429 with no backoff guidance | Retry later; if persistent, file a bug |
|
|
63
88
|
|
|
64
89
|
## Reference files
|
|
65
90
|
|
|
66
91
|
Open each with the `plugin-read` tool (`file="references/auth.md"`), which resolves the path at the plugin root. A plain `Read` of `references/auth.md` against this skill's base directory misses, because these files live one level up at the plugin root, not under the skill.
|
|
67
92
|
|
|
68
|
-
- [`references/auth.md`](references/auth.md) —
|
|
93
|
+
- [`references/auth.md`](references/auth.md) — vendor app model (one per brand) + device-code flow + public-client requirement
|
|
69
94
|
- [`references/graph-surfaces.md`](references/graph-surfaces.md) — Graph endpoint and response shape per tool
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canonical-tool-names.generated.d.ts","sourceRoot":"","sources":["../src/canonical-tool-names.generated.ts"],"names":[],"mappings":"AAQA,+EAA+E;AAC/E,eAAO,MAAM,gBAAgB,EAAE,SAAS,MAAM,EAqB7C,CAAA;AAED,gEAAgE;AAChE,eAAO,MAAM,yBAAyB,EAAE,SAAS,MAAM,
|
|
1
|
+
{"version":3,"file":"canonical-tool-names.generated.d.ts","sourceRoot":"","sources":["../src/canonical-tool-names.generated.ts"],"names":[],"mappings":"AAQA,+EAA+E;AAC/E,eAAO,MAAM,gBAAgB,EAAE,SAAS,MAAM,EAqB7C,CAAA;AAED,gEAAgE;AAChE,eAAO,MAAM,yBAAyB,EAAE,SAAS,MAAM,EA2QtD,CAAA"}
|
package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js
CHANGED
|
@@ -216,11 +216,20 @@ export const CANONICAL_MAXY_TOOL_NAMES = [
|
|
|
216
216
|
"mcp__plugin_memory_memory__session-compact",
|
|
217
217
|
"mcp__plugin_memory_memory__session-compact-status",
|
|
218
218
|
"mcp__plugin_outlook_outlook__outlook-account-register",
|
|
219
|
+
"mcp__plugin_outlook_outlook__outlook-account-register-poll",
|
|
220
|
+
"mcp__plugin_outlook_outlook__outlook-calendar-cancel",
|
|
221
|
+
"mcp__plugin_outlook_outlook__outlook-calendar-create",
|
|
219
222
|
"mcp__plugin_outlook_outlook__outlook-calendar-event",
|
|
223
|
+
"mcp__plugin_outlook_outlook__outlook-calendar-freebusy",
|
|
220
224
|
"mcp__plugin_outlook_outlook__outlook-calendar-list",
|
|
225
|
+
"mcp__plugin_outlook_outlook__outlook-calendar-respond",
|
|
226
|
+
"mcp__plugin_outlook_outlook__outlook-calendar-update",
|
|
221
227
|
"mcp__plugin_outlook_outlook__outlook-contacts-list",
|
|
228
|
+
"mcp__plugin_outlook_outlook__outlook-draft",
|
|
229
|
+
"mcp__plugin_outlook_outlook__outlook-draft-send",
|
|
222
230
|
"mcp__plugin_outlook_outlook__outlook-mail-list",
|
|
223
231
|
"mcp__plugin_outlook_outlook__outlook-mail-search",
|
|
232
|
+
"mcp__plugin_outlook_outlook__outlook-mail-send",
|
|
224
233
|
"mcp__plugin_outlook_outlook__outlook-mailbox-info",
|
|
225
234
|
"mcp__plugin_quickbooks_quickbooks__quickbooks-authorize-url",
|
|
226
235
|
"mcp__plugin_quickbooks_quickbooks__quickbooks-bill-create",
|
package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canonical-tool-names.generated.js","sourceRoot":"","sources":["../src/canonical-tool-names.generated.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"canonical-tool-names.generated.js","sourceRoot":"","sources":["../src/canonical-tool-names.generated.ts"],"names":[],"mappings":"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"}
|