@elizaos/agent 2.0.0-alpha.434 → 2.0.0-alpha.436

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.
@@ -1 +1 @@
1
- {"version":3,"file":"LifeOpsInboxSection.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/components/LifeOpsInboxSection.tsx"],"names":[],"mappings":"AASA,OAAO,EAEL,KAAK,mBAAmB,EAGzB,MAAM,iBAAiB,CAAC;AAmCzB,OAAO,EACL,KAAK,gBAAgB,EAEtB,MAAM,8BAA8B,CAAC;AA6EtC,eAAO,MAAM,wBAAwB,EAAE,mBAAmB,EACO,CAAC;AAClE,eAAO,MAAM,qBAAqB,EAAE,mBAAmB,EAAc,CAAC;AAitBtE,MAAM,WAAW,wBAAwB;IACvC,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IACrD,QAAQ,CAAC,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,mBAAmB,CAAC,KAAK,GAAE,wBAA6B,2CAsWvE"}
1
+ {"version":3,"file":"LifeOpsInboxSection.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/components/LifeOpsInboxSection.tsx"],"names":[],"mappings":"AASA,OAAO,EAEL,KAAK,mBAAmB,EAGzB,MAAM,iBAAiB,CAAC;AAmCzB,OAAO,EACL,KAAK,gBAAgB,EAEtB,MAAM,8BAA8B,CAAC;AA6EtC,eAAO,MAAM,wBAAwB,EAAE,mBAAmB,EACO,CAAC;AAClE,eAAO,MAAM,qBAAqB,EAAE,mBAAmB,EAAc,CAAC;AA2sBtE,MAAM,WAAW,wBAAwB;IACvC,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IACrD,QAAQ,CAAC,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,mBAAmB,CAAC,KAAK,GAAE,wBAA6B,2CAuWvE"}
@@ -1,5 +1,5 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { Button, client, Input, openExternalUrl, Spinner, useMediaQuery, useApp, } from "@elizaos/app-core";
2
+ import { Button, client, Input, openExternalUrl, Spinner, useApp, useMediaQuery, } from "@elizaos/app-core";
3
3
  import { LIFEOPS_INBOX_CHANNELS, } from "@elizaos/shared";
4
4
  import { AlarmClock, ArrowLeft, AtSign, CalendarClock, ExternalLink, MessageCircle, MessageSquare, MessageSquareReply, Phone, Search, Send, Shield, Smartphone, Sparkles, } from "lucide-react";
5
5
  import { useCallback, useEffect, useMemo, useState, } from "react";
@@ -227,7 +227,7 @@ function ReaderPane({ threadGroup, onReply, onChat, onBack, }) {
227
227
  ? `${threadMessages.length} messages`
228
228
  : message.sender.displayName }), receivedAt ? (_jsxs(_Fragment, { children: [_jsx("span", { children: "\u00B7" }), _jsx("span", { children: receivedAt })] })) : null] })] })] }), _jsx("div", { className: "flex-1 overflow-y-auto px-5 py-4", children: _jsx("div", { className: "space-y-3", children: (threadMessages.length > 0 ? threadMessages : [message]).map((item) => {
229
229
  const itemStyle = styleFor(item.channel);
230
- return (_jsxs("article", { className: "rounded-xl border border-border/12 bg-bg/20 px-3 py-3", children: [_jsxs("div", { className: "flex items-start justify-between gap-3", children: [_jsxs("div", { className: "min-w-0", children: [_jsx("div", { className: "truncate text-sm font-medium text-txt", children: item.sender.displayName }), _jsxs("div", { className: "mt-0.5 flex flex-wrap items-center gap-1.5 text-[11px] text-muted", children: [_jsxs("span", { className: `inline-flex items-center gap-1 ${itemStyle.text}`, children: [itemStyle.icon, itemStyle.label] }), item.sender.email ? _jsx("span", { children: item.sender.email }) : null] })] }), _jsx("span", { className: "shrink-0 text-[11px] tabular-nums text-muted", children: formatAbsoluteTime(item.receivedAt) })] }), _jsx("p", { className: "mt-3 whitespace-pre-wrap text-sm leading-relaxed text-txt/85", children: item.snippet })] }, item.id));
230
+ return (_jsxs("article", { className: "rounded-xl border border-border/12 bg-bg/20 px-3 py-3", children: [_jsxs("div", { className: "flex items-start justify-between gap-3", children: [_jsxs("div", { className: "min-w-0", children: [_jsx("div", { className: "truncate text-sm font-medium text-txt", children: item.sender.displayName }), _jsxs("div", { className: "mt-0.5 flex flex-wrap items-center gap-1.5 text-[11px] text-muted", children: [_jsxs("span", { className: `inline-flex items-center gap-1 ${itemStyle.text}`, children: [itemStyle.icon, itemStyle.label] }), item.sender.email ? (_jsx("span", { children: item.sender.email })) : null] })] }), _jsx("span", { className: "shrink-0 text-[11px] tabular-nums text-muted", children: formatAbsoluteTime(item.receivedAt) })] }), _jsx("p", { className: "mt-3 whitespace-pre-wrap text-sm leading-relaxed text-txt/85", children: item.snippet })] }, item.id));
231
231
  }) }) }), _jsxs("div", { className: "flex flex-wrap items-center gap-2 border-t border-border/12 px-5 py-3", children: [_jsxs(Button, { size: "sm", className: "h-8 rounded-xl px-3 text-xs font-semibold", onClick: () => onReply(message), children: [_jsx(MessageSquareReply, { className: "mr-1.5 h-3.5 w-3.5" }), t("lifeopsInbox.reply", { defaultValue: "Reply" })] }), _jsxs(Button, { size: "sm", variant: "ghost", className: "h-8 rounded-xl px-3 text-xs font-semibold text-muted", onClick: () => onChat(message), children: [_jsx(MessageSquare, { className: "mr-1.5 h-3.5 w-3.5" }), t("common.chat", { defaultValue: "Chat" })] }), message.channel === "gmail" ? (_jsx(InboxUnsubscribeButton, { message: message })) : null, message.deepLink ? (_jsxs(Button, { size: "sm", variant: "ghost", className: "h-8 rounded-xl px-3 text-xs font-semibold text-muted", onClick: () => message.deepLink && void openExternalUrl(message.deepLink), children: [_jsx(ExternalLink, { className: "mr-1.5 h-3.5 w-3.5" }), t("lifeopsInbox.openSource", { defaultValue: "Open source" })] })) : null] })] }));
232
232
  }
233
233
  function InboxUnsubscribeButton({ message, }) {
@@ -237,14 +237,14 @@ function InboxUnsubscribeButton({ message, }) {
237
237
  const onClick = useCallback(async () => {
238
238
  if (!senderEmail)
239
239
  return;
240
- if (!window.confirm(`Unsubscribe from ${senderEmail} and create a Gmail filter that auto-trashes future mail?`)) {
240
+ if (!window.confirm(`Send an unsubscribe request to ${senderEmail}?`)) {
241
241
  return;
242
242
  }
243
243
  setState("working");
244
244
  try {
245
245
  const result = await client.unsubscribeLifeOpsEmailSender({
246
246
  senderEmail,
247
- blockAfter: true,
247
+ blockAfter: false,
248
248
  trashExisting: false,
249
249
  confirmed: true,
250
250
  });
@@ -268,7 +268,7 @@ function InboxUnsubscribeButton({ message, }) {
268
268
  : state === "error"
269
269
  ? `Failed${note ? `: ${note}` : ""}`
270
270
  : "Unsubscribe";
271
- return (_jsx(Button, { size: "sm", variant: "ghost", className: "h-8 rounded-xl px-3 text-xs font-semibold text-muted", disabled: state === "working" || state === "done", onClick: () => void onClick(), title: `Send RFC 8058 one-click unsubscribe to ${senderEmail} and create a Gmail filter`, children: label }));
271
+ return (_jsx(Button, { size: "sm", variant: "ghost", className: "h-8 rounded-xl px-3 text-xs font-semibold text-muted", disabled: state === "working" || state === "done", onClick: () => void onClick(), title: `Send RFC 8058 one-click unsubscribe to ${senderEmail}`, children: label }));
272
272
  }
273
273
  function InboxListPane({ inbox, selectedMessageId, onSelect, onReply, emptyLabel, groupedMode, visibleThreadGroups, showGmailAccountSubtitles, }) {
274
274
  const { t } = useApp();
@@ -354,8 +354,9 @@ export function LifeOpsInboxSection(props = {}) {
354
354
  return map;
355
355
  }, [inbox.threadGroups]);
356
356
  const selectedMessage = (selectedMessageId ? messageById.get(selectedMessageId) : null) ?? null;
357
- const selectedThread = (selectedMessageId ? threadGroupByMessageId.get(selectedMessageId) : null) ??
358
- null;
357
+ const selectedThread = (selectedMessageId
358
+ ? threadGroupByMessageId.get(selectedMessageId)
359
+ : null) ?? null;
359
360
  // Distinct Gmail accounts visible in the current feed. Only show the chip
360
361
  // group when more than one Gmail account has produced messages.
361
362
  const gmailAccountOptions = useMemo(() => {
@@ -1 +1 @@
1
- {"version":3,"file":"useWhatsAppPairing.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/hooks/useWhatsAppPairing.ts"],"names":[],"mappings":"AAGA,KAAK,qBAAqB,GACtB,MAAM,GACN,cAAc,GACd,gBAAgB,GAChB,WAAW,GACX,cAAc,GACd,SAAS,GACT,OAAO,CAAC;AA6BZ,wBAAgB,kBAAkB,CAAC,SAAS,SAAY;;;;YA1B9C,qBAAqB;eAClB,MAAM,GAAG,IAAI;iBACX,MAAM,GAAG,IAAI;WACnB,MAAM,GAAG,IAAI;EAuKrB"}
1
+ {"version":3,"file":"useWhatsAppPairing.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/hooks/useWhatsAppPairing.ts"],"names":[],"mappings":"AAGA,KAAK,qBAAqB,GACtB,MAAM,GACN,cAAc,GACd,gBAAgB,GAChB,WAAW,GACX,cAAc,GACd,SAAS,GACT,OAAO,CAAC;AAkCZ,wBAAgB,kBAAkB,CAAC,SAAS,SAAY;;;;YA/B9C,qBAAqB;eAClB,MAAM,GAAG,IAAI;iBACX,MAAM,GAAG,IAAI;WACnB,MAAM,GAAG,IAAI;EA0LrB"}
@@ -9,6 +9,10 @@ const WHATSAPP_PAIRING_STATUSES = {
9
9
  timeout: true,
10
10
  error: true,
11
11
  };
12
+ const LIFEOPS_WHATSAPP_PAIRING_OPTIONS = {
13
+ authScope: "lifeops",
14
+ configurePlugin: false,
15
+ };
12
16
  function isWhatsAppPairingStatus(value) {
13
17
  return typeof value === "string" && value in WHATSAPP_PAIRING_STATUSES;
14
18
  }
@@ -25,7 +29,7 @@ export function useWhatsAppPairing(accountId = "default") {
25
29
  useEffect(() => {
26
30
  let cancelled = false;
27
31
  void client
28
- .getWhatsAppStatus(accountId)
32
+ .getWhatsAppStatus(accountId, LIFEOPS_WHATSAPP_PAIRING_OPTIONS)
29
33
  .then((response) => {
30
34
  if (!cancelled && response.authExists) {
31
35
  setState((previous) => ({
@@ -50,7 +54,9 @@ export function useWhatsAppPairing(accountId = "default") {
50
54
  }, [accountId]);
51
55
  useEffect(() => {
52
56
  const unbindQr = client.onWsEvent("whatsapp-qr", (data) => {
53
- if (data.accountId !== accountId || typeof data.qrDataUrl !== "string") {
57
+ if (data.accountId !== accountId ||
58
+ data.authScope !== "lifeops" ||
59
+ typeof data.qrDataUrl !== "string") {
54
60
  return;
55
61
  }
56
62
  const qrDataUrl = data.qrDataUrl;
@@ -63,6 +69,7 @@ export function useWhatsAppPairing(accountId = "default") {
63
69
  });
64
70
  const unbindStatus = client.onWsEvent("whatsapp-status", (data) => {
65
71
  if (data.accountId !== accountId ||
72
+ data.authScope !== "lifeops" ||
66
73
  !isWhatsAppPairingStatus(data.status)) {
67
74
  return;
68
75
  }
@@ -95,7 +102,7 @@ export function useWhatsAppPairing(accountId = "default") {
95
102
  error: null,
96
103
  });
97
104
  try {
98
- const result = await client.startWhatsAppPairing(accountId);
105
+ const result = await client.startWhatsAppPairing(accountId, LIFEOPS_WHATSAPP_PAIRING_OPTIONS);
99
106
  if (!result.ok) {
100
107
  setState((previous) => ({
101
108
  ...previous,
@@ -114,7 +121,7 @@ export function useWhatsAppPairing(accountId = "default") {
114
121
  }, [accountId]);
115
122
  const stopPairing = useCallback(async () => {
116
123
  try {
117
- await client.stopWhatsAppPairing(accountId);
124
+ await client.stopWhatsAppPairing(accountId, LIFEOPS_WHATSAPP_PAIRING_OPTIONS);
118
125
  setState({
119
126
  status: "idle",
120
127
  qrDataUrl: null,
@@ -132,7 +139,7 @@ export function useWhatsAppPairing(accountId = "default") {
132
139
  }, [accountId]);
133
140
  const disconnect = useCallback(async () => {
134
141
  try {
135
- await client.disconnectWhatsApp(accountId);
142
+ await client.disconnectWhatsApp(accountId, LIFEOPS_WHATSAPP_PAIRING_OPTIONS);
136
143
  setState({
137
144
  status: "idle",
138
145
  qrDataUrl: null,
@@ -4,7 +4,7 @@ import { createGmailFilterForSender, extractListUnsubscribeOptions, fetchGmailSu
4
4
  import { resolveGoogleExecutionTarget, resolveGoogleGrants, } from "./google-connector-gateway.js";
5
5
  import { ensureFreshGoogleAccessToken } from "./google-oauth.js";
6
6
  import { fail, normalizeOptionalBoolean, normalizeOptionalString, requireNonEmptyString, } from "./service-normalize.js";
7
- import { hasGoogleGmailManageCapability, hasGoogleGmailTriageCapability, } from "./service-normalize-calendar.js";
7
+ import { hasGoogleGmailManageCapability, hasGoogleGmailSendCapability, hasGoogleGmailTriageCapability, } from "./service-normalize-calendar.js";
8
8
  const DEFAULT_SCAN_MAX_MESSAGES = 200;
9
9
  const MAX_SENDERS_RETURNED = 200;
10
10
  const MAX_SAMPLE_SUBJECTS = 5;
@@ -108,13 +108,6 @@ function managedGoogleGrantId(grant) {
108
108
  /** @internal */
109
109
  export function withEmailUnsubscribe(Base) {
110
110
  class LifeOpsEmailUnsubscribeMixin extends Base {
111
- async requireGmailManageGrant(args) {
112
- const grant = await this.requireGoogleGmailGrant(args.requestUrl, args.mode, args.side, args.grantId);
113
- if (!hasGoogleGmailManageCapability(grant)) {
114
- fail(403, "Gmail auto-unsubscribe requires gmail.modify + gmail.settings.basic access. Reconnect Google and grant the 'Manage subscriptions' capability.");
115
- }
116
- return grant;
117
- }
118
111
  async accessTokenForGrant(grant) {
119
112
  if (resolveGoogleExecutionTarget(grant) === "cloud") {
120
113
  fail(409, "Gmail unsubscribe management is not available for cloud-managed Google connections yet. Reconnect Google in local mode to manage filters and unsubscribe mail.");
@@ -123,6 +116,40 @@ export function withEmailUnsubscribe(Base) {
123
116
  const token = await ensureFreshGoogleAccessToken(tokenRef);
124
117
  return token.accessToken;
125
118
  }
119
+ async readSubscriptionHeadersForGrant(args) {
120
+ if (resolveGoogleExecutionTarget(args.grant) === "cloud") {
121
+ return (await this.googleManagedClient.getGmailSubscriptionHeaders({
122
+ side: args.grant.side,
123
+ grantId: managedGoogleGrantId(args.grant),
124
+ query: args.query,
125
+ maxResults: args.maxMessages,
126
+ })).headers;
127
+ }
128
+ return fetchGmailSubscriptionHeaders({
129
+ accessToken: await this.accessTokenForGrant(args.grant),
130
+ query: args.query,
131
+ maxMessages: args.maxMessages,
132
+ });
133
+ }
134
+ async sendMailtoForGrant(args) {
135
+ if (!hasGoogleGmailSendCapability(args.grant)) {
136
+ fail(403, "Mailto unsubscribe requires Gmail send access.");
137
+ }
138
+ if (resolveGoogleExecutionTarget(args.grant) === "cloud") {
139
+ await this.googleManagedClient.sendGmailMessage({
140
+ side: args.grant.side,
141
+ grantId: managedGoogleGrantId(args.grant),
142
+ to: [args.mailto.recipient],
143
+ subject: args.mailto.subject ?? "unsubscribe",
144
+ bodyText: args.mailto.body ?? "unsubscribe",
145
+ });
146
+ return;
147
+ }
148
+ await sendMailtoUnsubscribeEmail({
149
+ accessToken: await this.accessTokenForGrant(args.grant),
150
+ mailto: args.mailto,
151
+ });
152
+ }
126
153
  async scanEmailSubscriptions(requestUrl, request = {}) {
127
154
  const query = normalizeOptionalString(request.query) ??
128
155
  "(category:promotions OR category:updates OR list:* OR unsubscribe) newer_than:180d";
@@ -138,18 +165,11 @@ export function withEmailUnsubscribe(Base) {
138
165
  }
139
166
  const results = await Promise.allSettled(grants.map(async (grant) => ({
140
167
  grant,
141
- headers: resolveGoogleExecutionTarget(grant) === "cloud"
142
- ? (await this.googleManagedClient.getGmailSubscriptionHeaders({
143
- side: grant.side,
144
- grantId: managedGoogleGrantId(grant),
145
- query,
146
- maxResults: maxMessages,
147
- })).headers
148
- : await fetchGmailSubscriptionHeaders({
149
- accessToken: await this.accessTokenForGrant(grant),
150
- query,
151
- maxMessages,
152
- }),
168
+ headers: await this.readSubscriptionHeadersForGrant({
169
+ grant,
170
+ query,
171
+ maxMessages,
172
+ }),
153
173
  })));
154
174
  const headers = [];
155
175
  let successfulScans = 0;
@@ -195,13 +215,12 @@ export function withEmailUnsubscribe(Base) {
195
215
  if (!confirmed) {
196
216
  fail(409, "Email unsubscribe requires explicit confirmation.");
197
217
  }
198
- const blockAfter = normalizeOptionalBoolean(request.blockAfter, "blockAfter") ?? true;
218
+ const blockAfter = normalizeOptionalBoolean(request.blockAfter, "blockAfter") ?? false;
199
219
  const trashExisting = normalizeOptionalBoolean(request.trashExisting, "trashExisting") ??
200
220
  false;
201
- const grant = await this.requireGmailManageGrant({ requestUrl });
202
- const accessToken = await this.accessTokenForGrant(grant);
203
- const headers = await fetchGmailSubscriptionHeaders({
204
- accessToken,
221
+ const grant = await this.requireGoogleGmailGrant(requestUrl, undefined, undefined, undefined);
222
+ const headers = await this.readSubscriptionHeadersForGrant({
223
+ grant,
205
224
  query: `from:${senderEmail}`,
206
225
  maxMessages: 25,
207
226
  });
@@ -245,10 +264,7 @@ export function withEmailUnsubscribe(Base) {
245
264
  }
246
265
  else {
247
266
  try {
248
- await sendMailtoUnsubscribeEmail({
249
- accessToken,
250
- mailto: parsed,
251
- });
267
+ await this.sendMailtoForGrant({ grant, mailto: parsed });
252
268
  status = "succeeded";
253
269
  method = "mailto";
254
270
  }
@@ -267,11 +283,14 @@ export function withEmailUnsubscribe(Base) {
267
283
  }
268
284
  let filterCreated = false;
269
285
  let filterId = null;
286
+ const canManageGmail = resolveGoogleExecutionTarget(grant) !== "cloud" &&
287
+ hasGoogleGmailManageCapability(grant);
270
288
  if (blockAfter &&
289
+ canManageGmail &&
271
290
  (status === "succeeded" || status === "manual_required")) {
272
291
  try {
273
292
  const filterResult = await createGmailFilterForSender({
274
- accessToken,
293
+ accessToken: await this.accessTokenForGrant(grant),
275
294
  fromAddress: senderEmail,
276
295
  trash: true,
277
296
  });
@@ -282,8 +301,18 @@ export function withEmailUnsubscribe(Base) {
282
301
  this.logLifeOpsWarn("email_unsubscribe_filter", `Filter creation failed for ${senderEmail}: ${error instanceof Error ? error.message : String(error)}`);
283
302
  }
284
303
  }
304
+ else if (blockAfter && !canManageGmail) {
305
+ this.logLifeOpsWarn("email_unsubscribe_filter", "Skipped Gmail filter creation because the connected Google grant does not include local Gmail manage access.", {
306
+ grantId: grant.id,
307
+ mode: grant.mode,
308
+ side: grant.side,
309
+ });
310
+ }
285
311
  let threadsTrashed = 0;
286
- if (trashExisting && (status === "succeeded" || filterCreated)) {
312
+ if (trashExisting &&
313
+ canManageGmail &&
314
+ (status === "succeeded" || filterCreated)) {
315
+ const accessToken = await this.accessTokenForGrant(grant);
287
316
  const uniqueThreadIds = Array.from(new Set(sender.allThreadIds));
288
317
  for (const threadId of uniqueThreadIds) {
289
318
  try {
@@ -1,17 +1,38 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { resolveDefaultAgentWorkspaceDir } from "@elizaos/agent/providers/workspace";
4
+ import { whatsappAuthExists } from "@elizaos/agent/services/whatsapp-pairing";
1
5
  import { fail } from "./service-normalize.js";
2
6
  import { drainWhatsAppInboundBuffer, parseAndBufferWhatsAppWebhookMessages, peekWhatsAppInboundBuffer, readWhatsAppCredentialsFromEnv, sendWhatsAppMessage as sendWhatsAppMessageRequest, WhatsAppError, } from "./whatsapp-client.js";
7
+ function hasLocalWhatsAppPairingAuth() {
8
+ const workspaceDir = resolveDefaultAgentWorkspaceDir();
9
+ return (fs.existsSync(path.join(workspaceDir, "lifeops-whatsapp-auth", "default", "creds.json")) || whatsappAuthExists(workspaceDir, "default"));
10
+ }
3
11
  /** @internal */
4
12
  export function withWhatsApp(Base) {
5
13
  class LifeOpsWhatsAppServiceMixin extends Base {
6
14
  async getWhatsAppConnectorStatus() {
7
15
  const creds = readWhatsAppCredentialsFromEnv();
8
- return {
16
+ const hasCloudCredentials = creds !== null;
17
+ const hasLocalAuth = hasLocalWhatsAppPairingAuth();
18
+ const status = {
9
19
  provider: "whatsapp",
10
- connected: creds !== null,
20
+ connected: hasCloudCredentials || hasLocalAuth,
11
21
  inbound: true,
12
22
  ...(creds?.phoneNumberId ? { phoneNumberId: creds.phoneNumberId } : {}),
13
23
  lastCheckedAt: new Date().toISOString(),
14
24
  };
25
+ if (!hasCloudCredentials && hasLocalAuth) {
26
+ status.degradations = [
27
+ {
28
+ axis: "delivery-degraded",
29
+ code: "business_cloud_credentials_missing",
30
+ message: "WhatsApp is paired locally. Outbound Cloud API sends still require ELIZA_WHATSAPP_ACCESS_TOKEN and ELIZA_WHATSAPP_PHONE_NUMBER_ID.",
31
+ retryable: true,
32
+ },
33
+ ];
34
+ }
35
+ return status;
15
36
  }
16
37
  async sendWhatsAppMessage(req) {
17
38
  const creds = readWhatsAppCredentialsFromEnv();
@@ -1070,13 +1070,16 @@ declare const LIFEOPS_COMPOSED: {
1070
1070
  };
1071
1071
  } & {
1072
1072
  new (...args: any[]): {
1073
- requireGmailManageGrant(args: {
1074
- requestUrl: URL;
1075
- mode?: import("@elizaos/shared").LifeOpsConnectorMode;
1076
- side?: import("@elizaos/shared").LifeOpsConnectorSide;
1077
- grantId?: string;
1078
- }): Promise<import("@elizaos/shared").LifeOpsConnectorGrant>;
1079
1073
  accessTokenForGrant(grant: import("@elizaos/shared").LifeOpsConnectorGrant): Promise<string>;
1074
+ readSubscriptionHeadersForGrant(args: {
1075
+ grant: import("@elizaos/shared").LifeOpsConnectorGrant;
1076
+ query: string;
1077
+ maxMessages: number;
1078
+ }): Promise<import("./email-unsubscribe-gmail.js").GmailSubscriptionMessageHeaders[]>;
1079
+ sendMailtoForGrant(args: {
1080
+ grant: import("@elizaos/shared").LifeOpsConnectorGrant;
1081
+ mailto: NonNullable<ReturnType<typeof import("./email-unsubscribe-gmail.js").parseMailtoUnsubscribe>>;
1082
+ }): Promise<void>;
1080
1083
  scanEmailSubscriptions(requestUrl: URL, request?: import("./email-unsubscribe-types.js").EmailUnsubscribeScanRequest): Promise<import("./email-unsubscribe-types.js").EmailSubscriptionScanResult>;
1081
1084
  unsubscribeEmailSender(requestUrl: URL, request: import("./email-unsubscribe-types.js").EmailUnsubscribeRequest): Promise<import("./email-unsubscribe-types.js").EmailUnsubscribeResult>;
1082
1085
  listEmailUnsubscribes(limit?: number): Promise<import("./email-unsubscribe-types.js").EmailUnsubscribeRecord[]>;
@@ -1 +1 @@
1
- {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/lifeops/service.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAIzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAkB7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EACL,KAAK,uBAAuB,EAE7B,MAAM,2BAA2B,CAAC;AAgDnC,QAAA,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oBA3DqB,CAAC;iBAClC,CAAC;mBAA8C,CAAC;eACnD,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uuBA2DN,CAAC;AAEF,cAAM,sBAAuB,SAAQ,gBAAgB;CAAG;AAExD;;;GAGG;AACH,qBAAa,cAAe,SAAQ,sBAAsB;CAAG"}
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/lifeops/service.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAIzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAkB7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EACL,KAAK,uBAAuB,EAE7B,MAAM,2BAA2B,CAAC;AAgDnC,QAAA,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oBA3DqB,CAAC;iBAClC,CAAC;mBAA8C,CAAC;eACnD,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uuBA2DN,CAAC;AAEF,cAAM,sBAAuB,SAAQ,gBAAgB;CAAG;AAExD;;;GAGG;AACH,qBAAa,cAAe,SAAQ,sBAAsB;CAAG"}
@@ -1953,7 +1953,7 @@ export async function handleLifeOpsRoutes(ctx) {
1953
1953
  const requestUrl = ctx.url;
1954
1954
  const result = await service.unsubscribeEmailSender(requestUrl, {
1955
1955
  senderEmail: body.senderEmail,
1956
- blockAfter: body.blockAfter ?? true,
1956
+ blockAfter: body.blockAfter ?? false,
1957
1957
  trashExisting: body.trashExisting ?? false,
1958
1958
  confirmed: body.confirmed ?? false,
1959
1959
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elizaos/agent",
3
- "version": "2.0.0-alpha.434",
3
+ "version": "2.0.0-alpha.436",
4
4
  "description": "Standalone elizaOS-based agent and backend server package.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -467,7 +467,7 @@
467
467
  "@elizaos/app-steward": "^0.0.0",
468
468
  "@elizaos/app-task-coordinator": "^0.0.0",
469
469
  "@elizaos/app-training": "^0.0.1",
470
- "@elizaos/core": "^2.0.0-alpha.434",
470
+ "@elizaos/core": "^2.0.0-alpha.436",
471
471
  "@elizaos/plugin-agent-orchestrator": "^0.6.2-alpha.0",
472
472
  "@elizaos/plugin-browser-bridge": "^0.1.0",
473
473
  "@elizaos/plugin-local-embedding": "^2.0.0-alpha.12",
@@ -476,8 +476,8 @@
476
476
  "@elizaos/plugin-solana": "^2.0.0-alpha.6",
477
477
  "@elizaos/plugin-sql": "^2.0.0-alpha.19",
478
478
  "@elizaos/plugin-wechat": "^0.1.0",
479
- "@elizaos/shared": "^2.0.0-alpha.434",
480
- "@elizaos/skills": "^2.0.0-alpha.434",
479
+ "@elizaos/shared": "^2.0.0-alpha.436",
480
+ "@elizaos/skills": "^2.0.0-alpha.436",
481
481
  "@hapi/boom": "^10.0.1",
482
482
  "@noble/curves": "^2.0.1",
483
483
  "@solana/web3.js": "^1.98.4",
@@ -1 +1 @@
1
- {"version":3,"file":"whatsapp-routes.d.ts","sourceRoot":"","sources":["../../../../../src/api/whatsapp-routes.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAGjE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAI5E,MAAM,MAAM,wBAAwB,GAAG,oBAAoB,CAAC;AAE5D,MAAM,WAAW,0BAA0B;IACzC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,IAAI,IAAI,IAAI,CAAC;IACb,SAAS,IAAI,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IACjC,uBAAuB,EAAE,GAAG,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAC;IACjE,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,MAAM,EAAE;QACN,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACtC,CAAC;IACF,OAAO,CAAC,EAAE;QACR,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;KAC1C,CAAC;IACF,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,iBAAiB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC;IACjD,kBAAkB,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC;IACzE,cAAc,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3E,4BAA4B,EAAE,CAAC,OAAO,EAAE;QACtC,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,CAAC,KAAK,EAAE,wBAAwB,KAAK,IAAI,CAAC;KACpD,KAAK,0BAA0B,CAAC;CAClC;AAGD,eAAO,MAAM,oBAAoB,KAAK,CAAC;AAavC,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,kBAAkB,EACzB,IAAI,EAAE,iBAAiB,GACtB,OAAO,CAAC,OAAO,CAAC,CAuQlB;AAED,wBAAgB,uBAAuB,CACrC,OAAO,EAAE;IACP,EAAE,EAAE,MAAM,CAAC;IACX,gBAAgB,EAAE,OAAO,EAAE,CAAC;IAC5B,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,EAAE,EACH,YAAY,EAAE,MAAM,GACnB,IAAI,CAmBN"}
1
+ {"version":3,"file":"whatsapp-routes.d.ts","sourceRoot":"","sources":["../../../../../src/api/whatsapp-routes.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAGjE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAI5E,MAAM,MAAM,wBAAwB,GAAG,oBAAoB,CAAC;AAE5D,MAAM,WAAW,0BAA0B;IACzC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,IAAI,IAAI,IAAI,CAAC;IACb,SAAS,IAAI,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IACjC,uBAAuB,EAAE,GAAG,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAC;IACjE,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,MAAM,EAAE;QACN,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACtC,CAAC;IACF,OAAO,CAAC,EAAE;QACR,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;KAC1C,CAAC;IACF,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,iBAAiB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC;IACjD,kBAAkB,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC;IACzE,cAAc,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3E,4BAA4B,EAAE,CAAC,OAAO,EAAE;QACtC,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,CAAC,KAAK,EAAE,wBAAwB,KAAK,IAAI,CAAC;KACpD,KAAK,0BAA0B,CAAC;CAClC;AAWD,eAAO,MAAM,oBAAoB,KAAK,CAAC;AAyDvC,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,kBAAkB,EACzB,IAAI,EAAE,iBAAiB,GACtB,OAAO,CAAC,OAAO,CAAC,CAuSlB;AAED,wBAAgB,uBAAuB,CACrC,OAAO,EAAE;IACP,EAAE,EAAE,MAAM,CAAC;IACX,gBAAgB,EAAE,OAAO,EAAE,CAAC;IAC5B,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,EAAE,EACH,YAAY,EAAE,MAAM,GACnB,IAAI,CAmBN"}
@@ -11,6 +11,24 @@ async function readJsonBody(req, res) {
11
11
  function json(res, data, status = 200) {
12
12
  sendJson(res, data, status);
13
13
  }
14
+ function shouldConfigurePlugin(body) {
15
+ return body?.configurePlugin !== false;
16
+ }
17
+ function resolveAuthScope(value) {
18
+ return value === "lifeops" ? "lifeops" : "platform";
19
+ }
20
+ function resolveSessionKey(authScope, accountId) {
21
+ return `${authScope}:${accountId}`;
22
+ }
23
+ function resolveAuthDir(workspaceDir, accountId, authScope) {
24
+ return path.join(workspaceDir, authScope === "lifeops" ? "lifeops-whatsapp-auth" : "whatsapp-auth", accountId);
25
+ }
26
+ function authExistsForScope(state, deps, accountId, authScope) {
27
+ if (authScope === "platform") {
28
+ return deps.whatsappAuthExists(state.workspaceDir, accountId);
29
+ }
30
+ return fs.existsSync(path.join(resolveAuthDir(state.workspaceDir, accountId, authScope), "creds.json"));
31
+ }
14
32
  export async function handleWhatsAppRoute(req, res, pathname, method, state, deps) {
15
33
  if (!pathname.startsWith("/api/whatsapp"))
16
34
  return false;
@@ -52,6 +70,8 @@ export async function handleWhatsAppRoute(req, res, pathname, method, state, dep
52
70
  }
53
71
  if (method === "POST" && pathname === "/api/whatsapp/pair") {
54
72
  const body = await readJsonBody(req, res);
73
+ const authScope = resolveAuthScope(body?.authScope);
74
+ const configurePlugin = authScope === "platform" && shouldConfigurePlugin(body);
55
75
  let accountId;
56
76
  try {
57
77
  accountId = deps.sanitizeAccountId(body && typeof body.accountId === "string" && body.accountId.trim()
@@ -62,7 +82,8 @@ export async function handleWhatsAppRoute(req, res, pathname, method, state, dep
62
82
  json(res, { error: err.message }, 400);
63
83
  return true;
64
84
  }
65
- const isReplacing = state.whatsappPairingSessions.has(accountId);
85
+ const sessionKey = resolveSessionKey(authScope, accountId);
86
+ const isReplacing = state.whatsappPairingSessions.has(sessionKey);
66
87
  if (!isReplacing &&
67
88
  state.whatsappPairingSessions.size >= MAX_PAIRING_SESSIONS) {
68
89
  json(res, {
@@ -70,27 +91,34 @@ export async function handleWhatsAppRoute(req, res, pathname, method, state, dep
70
91
  }, 429);
71
92
  return true;
72
93
  }
73
- const authDir = path.join(state.workspaceDir, "whatsapp-auth", accountId);
74
- state.whatsappPairingSessions.get(accountId)?.stop();
94
+ const authDir = resolveAuthDir(state.workspaceDir, accountId, authScope);
95
+ state.whatsappPairingSessions.get(sessionKey)?.stop();
75
96
  const session = deps.createWhatsAppPairingSession({
76
97
  authDir,
77
98
  accountId,
78
99
  onEvent: (event) => {
79
- state.broadcastWs?.({ ...event });
100
+ state.broadcastWs?.({ ...event, authScope });
80
101
  if (event.status === "connected") {
81
- if (!state.config.connectors)
82
- state.config.connectors = {};
83
- state.config.connectors.whatsapp = {
84
- ...(state.config.connectors.whatsapp ?? {}),
85
- authDir,
86
- enabled: true,
87
- };
88
- // Auto-populate owner contact so LifeOps can deliver reminders
102
+ let configChanged = false;
103
+ if (configurePlugin) {
104
+ if (!state.config.connectors)
105
+ state.config.connectors = {};
106
+ state.config.connectors.whatsapp = {
107
+ ...(state.config.connectors.whatsapp ?? {}),
108
+ authDir,
109
+ enabled: true,
110
+ };
111
+ configChanged = true;
112
+ }
89
113
  const phoneNumber = event.phoneNumber;
90
- setOwnerContact(state.config, {
91
- source: "whatsapp",
92
- channelId: phoneNumber ?? undefined,
93
- });
114
+ configChanged =
115
+ setOwnerContact(state.config, {
116
+ source: "whatsapp",
117
+ channelId: phoneNumber ?? undefined,
118
+ }) || configChanged;
119
+ if (!configChanged) {
120
+ return;
121
+ }
94
122
  try {
95
123
  state.saveConfig();
96
124
  }
@@ -100,10 +128,15 @@ export async function handleWhatsAppRoute(req, res, pathname, method, state, dep
100
128
  }
101
129
  },
102
130
  });
103
- state.whatsappPairingSessions.set(accountId, session);
131
+ state.whatsappPairingSessions.set(sessionKey, session);
104
132
  try {
105
133
  await session.start();
106
- json(res, { ok: true, accountId, status: session.getStatus() });
134
+ json(res, {
135
+ ok: true,
136
+ accountId,
137
+ authScope,
138
+ status: session.getStatus(),
139
+ });
107
140
  }
108
141
  catch (err) {
109
142
  json(res, { ok: false, error: String(err) }, 500);
@@ -120,7 +153,9 @@ export async function handleWhatsAppRoute(req, res, pathname, method, state, dep
120
153
  json(res, { error: err.message }, 400);
121
154
  return true;
122
155
  }
123
- const session = state.whatsappPairingSessions.get(accountId);
156
+ const authScope = resolveAuthScope(url.searchParams.get("authScope"));
157
+ const sessionKey = resolveSessionKey(authScope, accountId);
158
+ const session = state.whatsappPairingSessions.get(sessionKey);
124
159
  let serviceConnected = false;
125
160
  let servicePhone = null;
126
161
  if (state.runtime) {
@@ -137,8 +172,9 @@ export async function handleWhatsAppRoute(req, res, pathname, method, state, dep
137
172
  }
138
173
  json(res, {
139
174
  accountId,
175
+ authScope,
140
176
  status: session?.getStatus() ?? "idle",
141
- authExists: deps.whatsappAuthExists(state.workspaceDir, accountId),
177
+ authExists: authExistsForScope(state, deps, accountId, authScope),
142
178
  serviceConnected,
143
179
  servicePhone,
144
180
  });
@@ -146,6 +182,7 @@ export async function handleWhatsAppRoute(req, res, pathname, method, state, dep
146
182
  }
147
183
  if (method === "POST" && pathname === "/api/whatsapp/pair/stop") {
148
184
  const body = await readJsonBody(req, res);
185
+ const authScope = resolveAuthScope(body?.authScope);
149
186
  let accountId;
150
187
  try {
151
188
  accountId = deps.sanitizeAccountId(body && typeof body.accountId === "string" && body.accountId.trim()
@@ -156,16 +193,19 @@ export async function handleWhatsAppRoute(req, res, pathname, method, state, dep
156
193
  json(res, { error: err.message }, 400);
157
194
  return true;
158
195
  }
159
- const session = state.whatsappPairingSessions.get(accountId);
196
+ const sessionKey = resolveSessionKey(authScope, accountId);
197
+ const session = state.whatsappPairingSessions.get(sessionKey);
160
198
  if (session) {
161
199
  session.stop();
162
- state.whatsappPairingSessions.delete(accountId);
200
+ state.whatsappPairingSessions.delete(sessionKey);
163
201
  }
164
- json(res, { ok: true, accountId, status: "idle" });
202
+ json(res, { ok: true, accountId, authScope, status: "idle" });
165
203
  return true;
166
204
  }
167
205
  if (method === "POST" && pathname === "/api/whatsapp/disconnect") {
168
206
  const body = await readJsonBody(req, res);
207
+ const authScope = resolveAuthScope(body?.authScope);
208
+ const configurePlugin = authScope === "platform" && shouldConfigurePlugin(body);
169
209
  let accountId;
170
210
  try {
171
211
  accountId = deps.sanitizeAccountId(body && typeof body.accountId === "string" && body.accountId.trim()
@@ -176,20 +216,26 @@ export async function handleWhatsAppRoute(req, res, pathname, method, state, dep
176
216
  json(res, { error: err.message }, 400);
177
217
  return true;
178
218
  }
179
- const session = state.whatsappPairingSessions.get(accountId);
219
+ const sessionKey = resolveSessionKey(authScope, accountId);
220
+ const session = state.whatsappPairingSessions.get(sessionKey);
180
221
  if (session) {
181
222
  session.stop();
182
- state.whatsappPairingSessions.delete(accountId);
223
+ state.whatsappPairingSessions.delete(sessionKey);
183
224
  }
225
+ const authDir = resolveAuthDir(state.workspaceDir, accountId, authScope);
184
226
  try {
185
- await deps.whatsappLogout(state.workspaceDir, accountId);
227
+ if (authScope === "platform") {
228
+ await deps.whatsappLogout(state.workspaceDir, accountId);
229
+ }
230
+ else {
231
+ fs.rmSync(authDir, { recursive: true, force: true });
232
+ }
186
233
  }
187
234
  catch (logoutErr) {
188
235
  logger.warn({
189
236
  accountId,
190
237
  error: logoutErr instanceof Error ? logoutErr.message : String(logoutErr),
191
238
  }, "[whatsapp] Logout failed, deleting auth files directly");
192
- const authDir = path.join(state.workspaceDir, "whatsapp-auth", accountId);
193
239
  try {
194
240
  fs.rmSync(authDir, { recursive: true, force: true });
195
241
  }
@@ -197,7 +243,7 @@ export async function handleWhatsAppRoute(req, res, pathname, method, state, dep
197
243
  /* may not exist */
198
244
  }
199
245
  }
200
- if (state.config.connectors) {
246
+ if (configurePlugin && state.config.connectors) {
201
247
  delete state.config.connectors.whatsapp;
202
248
  try {
203
249
  state.saveConfig();
@@ -206,7 +252,7 @@ export async function handleWhatsAppRoute(req, res, pathname, method, state, dep
206
252
  /* test envs */
207
253
  }
208
254
  }
209
- json(res, { ok: true, accountId });
255
+ json(res, { ok: true, accountId, authScope });
210
256
  return true;
211
257
  }
212
258
  return false;
@@ -194,27 +194,41 @@ declare module "./client-base" {
194
194
  ok: boolean;
195
195
  generated: Record<string, unknown>;
196
196
  }>;
197
- getWhatsAppStatus(accountId?: string): Promise<{
197
+ getWhatsAppStatus(accountId?: string, options?: {
198
+ authScope?: "platform" | "lifeops";
199
+ }): Promise<{
198
200
  accountId: string;
201
+ authScope?: "platform" | "lifeops";
199
202
  status: string;
200
203
  authExists: boolean;
201
204
  serviceConnected: boolean;
202
205
  servicePhone: string | null;
203
206
  }>;
204
- startWhatsAppPairing(accountId?: string): Promise<{
207
+ startWhatsAppPairing(accountId?: string, options?: {
208
+ configurePlugin?: boolean;
209
+ authScope?: "platform" | "lifeops";
210
+ }): Promise<{
205
211
  ok: boolean;
206
212
  accountId: string;
213
+ authScope?: "platform" | "lifeops";
207
214
  status: string;
208
215
  error?: string;
209
216
  }>;
210
- stopWhatsAppPairing(accountId?: string): Promise<{
217
+ stopWhatsAppPairing(accountId?: string, options?: {
218
+ authScope?: "platform" | "lifeops";
219
+ }): Promise<{
211
220
  ok: boolean;
212
221
  accountId: string;
222
+ authScope?: "platform" | "lifeops";
213
223
  status: string;
214
224
  }>;
215
- disconnectWhatsApp(accountId?: string): Promise<{
225
+ disconnectWhatsApp(accountId?: string, options?: {
226
+ configurePlugin?: boolean;
227
+ authScope?: "platform" | "lifeops";
228
+ }): Promise<{
216
229
  ok: boolean;
217
230
  accountId: string;
231
+ authScope?: "platform" | "lifeops";
218
232
  }>;
219
233
  getSignalStatus(accountId?: string): Promise<{
220
234
  accountId: string;
@@ -1 +1 @@
1
- {"version":3,"file":"client-skills.d.ts","sourceRoot":"","sources":["../../../../../../app-core/src/api/client-skills.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client-skills.d.ts","sourceRoot":"","sources":["../../../../../../app-core/src/api/client-skills.ts"],"names":[],"mappings":"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"}
@@ -323,25 +323,29 @@ ElizaClient.prototype.generateCustomAction = async function (prompt) {
323
323
  body: JSON.stringify({ prompt }),
324
324
  });
325
325
  };
326
- ElizaClient.prototype.getWhatsAppStatus = async function (accountId = "default") {
327
- return this.fetch(`/api/whatsapp/status?accountId=${encodeURIComponent(accountId)}`);
328
- };
329
- ElizaClient.prototype.startWhatsAppPairing = async function (accountId = "default") {
326
+ ElizaClient.prototype.getWhatsAppStatus = async function (accountId = "default", options = {}) {
327
+ const params = new URLSearchParams({ accountId });
328
+ if (options.authScope) {
329
+ params.set("authScope", options.authScope);
330
+ }
331
+ return this.fetch(`/api/whatsapp/status?${params.toString()}`);
332
+ };
333
+ ElizaClient.prototype.startWhatsAppPairing = async function (accountId = "default", options = {}) {
330
334
  return this.fetch("/api/whatsapp/pair", {
331
335
  method: "POST",
332
- body: JSON.stringify({ accountId }),
336
+ body: JSON.stringify({ ...options, accountId }),
333
337
  });
334
338
  };
335
- ElizaClient.prototype.stopWhatsAppPairing = async function (accountId = "default") {
339
+ ElizaClient.prototype.stopWhatsAppPairing = async function (accountId = "default", options = {}) {
336
340
  return this.fetch("/api/whatsapp/pair/stop", {
337
341
  method: "POST",
338
- body: JSON.stringify({ accountId }),
342
+ body: JSON.stringify({ ...options, accountId }),
339
343
  });
340
344
  };
341
- ElizaClient.prototype.disconnectWhatsApp = async function (accountId = "default") {
345
+ ElizaClient.prototype.disconnectWhatsApp = async function (accountId = "default", options = {}) {
342
346
  return this.fetch("/api/whatsapp/disconnect", {
343
347
  method: "POST",
344
- body: JSON.stringify({ accountId }),
348
+ body: JSON.stringify({ ...options, accountId }),
345
349
  });
346
350
  };
347
351
  ElizaClient.prototype.getSignalStatus = async function (accountId = "default") {
@@ -1880,11 +1880,11 @@ export type LifeOpsTelegramAuthState = (typeof LIFEOPS_TELEGRAM_AUTH_STATES)[num
1880
1880
  export interface LifeOpsWhatsAppConnectorStatus {
1881
1881
  provider: "whatsapp";
1882
1882
  /**
1883
- * `connected` here means LifeOps-specific Cloud API credentials are present.
1884
- * It does NOT reflect the user-facing WhatsApp connector session and does not
1885
- * imply a live network probe has been performed. A live send can still fail if
1886
- * the upstream token has been revoked. Callers that need true liveness must
1887
- * catch errors from the actual send/receive methods.
1883
+ * `connected` here means LifeOps can see either WhatsApp Business Cloud API
1884
+ * credentials or a local QR-paired auth state. It does not imply a live
1885
+ * network probe has been performed. A live send can still fail if the
1886
+ * upstream token/session has been revoked. Callers that need true liveness
1887
+ * must catch errors from the actual send/receive methods.
1888
1888
  */
1889
1889
  connected: boolean;
1890
1890
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"roles.d.ts","sourceRoot":"","sources":["../../../../../../../../typescript/src/features/advanced-capabilities/providers/roles.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAGX,QAAQ,EAIR,MAAM,yBAAyB,CAAC;AAMjC;;;;;;;;;;GAUG;AACH;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAE,QA0M1B,CAAC;AAEF,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"roles.d.ts","sourceRoot":"","sources":["../../../../../../../../typescript/src/features/advanced-capabilities/providers/roles.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAKX,QAAQ,EAIR,MAAM,yBAAyB,CAAC;AAsEjC;;;;;;;;;;GAUG;AACH;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAE,QAwM1B,CAAC;AAEF,eAAe,YAAY,CAAC"}
@@ -3,6 +3,59 @@ import { logger } from "../../../logger.js";
3
3
  import { ChannelType } from "../../../types/index.js";
4
4
  // Get text content from centralized specs
5
5
  const spec = requireProviderSpec("ROLES");
6
+ function isIdentityFields(value) {
7
+ return value !== null && typeof value === "object";
8
+ }
9
+ function getString(value) {
10
+ return typeof value === "string" && value.trim().length > 0
11
+ ? value
12
+ : undefined;
13
+ }
14
+ function getMetadataIdentity(metadata) {
15
+ if (!metadata) {
16
+ return {};
17
+ }
18
+ const sourceOrder = [
19
+ "default",
20
+ "discord",
21
+ "telegram",
22
+ "twitter",
23
+ "twitch",
24
+ "slack",
25
+ ];
26
+ const candidates = [metadata];
27
+ for (const source of sourceOrder) {
28
+ const sourceMetadata = metadata[source];
29
+ if (isIdentityFields(sourceMetadata)) {
30
+ candidates.push(sourceMetadata);
31
+ }
32
+ }
33
+ for (const value of Object.values(metadata)) {
34
+ if (isIdentityFields(value)) {
35
+ candidates.push(value);
36
+ }
37
+ }
38
+ const identity = {};
39
+ for (const candidate of candidates) {
40
+ identity.name ??= getString(candidate.name);
41
+ identity.username ??=
42
+ getString(candidate.username) ?? getString(candidate.userName);
43
+ if (identity.name && identity.username) {
44
+ return identity;
45
+ }
46
+ }
47
+ return identity;
48
+ }
49
+ function getRoleUser(entity) {
50
+ const names = entity?.names?.filter((name) => name.trim().length > 0) ?? [];
51
+ const metadataIdentity = getMetadataIdentity(entity?.metadata);
52
+ const name = metadataIdentity.name ?? names[0];
53
+ const username = metadataIdentity.username ?? names[0];
54
+ if (!name || !username || names.length === 0) {
55
+ return null;
56
+ }
57
+ return { name, username, names };
58
+ }
6
59
  /**
7
60
  * Role provider that retrieves roles in the server based on the provided runtime, message, and state.
8
61
  * * @type { Provider }
@@ -105,10 +158,8 @@ export const roleProvider = {
105
158
  for (const entityId of entityIds) {
106
159
  const userRole = roles[entityId];
107
160
  const user = entityMap.get(entityId);
108
- const name = user?.metadata?.name;
109
- const username = user?.metadata?.username;
110
- const names = user?.names;
111
- if (!name || !username || !names) {
161
+ const roleUser = getRoleUser(user);
162
+ if (!roleUser) {
112
163
  logger.warn({
113
164
  src: "plugin:advanced-capabilities:provider:roles",
114
165
  agentId: runtime.agentId,
@@ -116,20 +167,20 @@ export const roleProvider = {
116
167
  }, "User has no name or username, skipping");
117
168
  continue;
118
169
  }
119
- if (seenUsernames.has(username)) {
170
+ if (seenUsernames.has(roleUser.username)) {
120
171
  continue;
121
172
  }
122
- seenUsernames.add(username);
173
+ seenUsernames.add(roleUser.username);
123
174
  // Add to appropriate group
124
175
  switch (userRole) {
125
176
  case "OWNER":
126
- owners.push({ name, username, names });
177
+ owners.push(roleUser);
127
178
  break;
128
179
  case "ADMIN":
129
- admins.push({ name, username, names });
180
+ admins.push(roleUser);
130
181
  break;
131
182
  default:
132
- members.push({ name, username, names });
183
+ members.push(roleUser);
133
184
  break;
134
185
  }
135
186
  }
@@ -57,7 +57,7 @@ export declare function findOwnedActionCorrectionFromMetadata(runtime: Pick<IAge
57
57
  */
58
58
  export declare function shouldEmitPlannerPreamble(runtime: IAgentRuntime, responseContent: Pick<Content, "text" | "actions"> | null | undefined): boolean;
59
59
  export declare function stripReplyWhenActionOwnsTurn(runtime: Pick<IAgentRuntime, "actions" | "logger">, actions: readonly string[] | null | undefined): string[];
60
- export declare function wrapSingleTurnVisibleCallback(runtime: Pick<IAgentRuntime, "agentId" | "logger">, message: Pick<Memory, "id" | "roomId">, callback?: HandlerCallback): HandlerCallback | undefined;
60
+ export declare function wrapSingleTurnVisibleCallback(_runtime: Pick<IAgentRuntime, "agentId" | "logger">, _message: Pick<Memory, "id" | "roomId">, callback?: HandlerCallback): HandlerCallback | undefined;
61
61
  export declare function withActionResultsForPrompt(state: State, actionResults: ActionResult[]): State;
62
62
  /**
63
63
  * Default implementation of the MessageService interface.
@@ -1 +1 @@
1
- {"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../../../../../typescript/src/services/message.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../../../../../typescript/src/services/message.ts"],"names":[],"mappings":"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"}
@@ -1638,132 +1638,8 @@ export function stripReplyWhenActionOwnsTurn(runtime, actions) {
1638
1638
  }, "Dropped passive actions because another selected action already owns the turn");
1639
1639
  return filtered.length > 0 ? filtered : ["REPLY"];
1640
1640
  }
1641
- function callbackTextPreview(content) {
1642
- if (!content || typeof content !== "object") {
1643
- return "";
1644
- }
1645
- const text = typeof content.text === "string" ? content.text.trim() : "";
1646
- if (!text) {
1647
- return "";
1648
- }
1649
- return text.replace(/\s+/g, " ").slice(0, 200);
1650
- }
1651
- function callbackHasVisibleOutput(content) {
1652
- if (!content || typeof content !== "object") {
1653
- return false;
1654
- }
1655
- if (typeof content.text === "string" && content.text.trim().length > 0) {
1656
- return true;
1657
- }
1658
- return Array.isArray(content.attachments) && content.attachments.length > 0;
1659
- }
1660
- function summarizeAttachmentKeyPart(url) {
1661
- const trimmed = url.trim();
1662
- if (trimmed.length <= 256) {
1663
- return trimmed;
1664
- }
1665
- return `${trimmed.slice(0, 128)}...(${trimmed.length})`;
1666
- }
1667
- function callbackDeliveryKey(content) {
1668
- if (!content || typeof content !== "object") {
1669
- return "";
1670
- }
1671
- const text = typeof content.text === "string"
1672
- ? content.text.replace(/\s+/g, " ").trim()
1673
- : "";
1674
- const attachmentKeys = Array.isArray(content.attachments)
1675
- ? content.attachments
1676
- .map((attachment) => {
1677
- if (!attachment || typeof attachment !== "object") {
1678
- return "";
1679
- }
1680
- const url = typeof attachment.url === "string"
1681
- ? summarizeAttachmentKeyPart(attachment.url)
1682
- : "";
1683
- const title = typeof attachment.title === "string" ? attachment.title.trim() : "";
1684
- const contentType = typeof attachment.contentType === "string"
1685
- ? attachment.contentType
1686
- : "";
1687
- if (!url && !title && !contentType) {
1688
- return "";
1689
- }
1690
- return `${contentType}:${title}:${url}`;
1691
- })
1692
- .filter((key) => key.length > 0)
1693
- .sort()
1694
- : [];
1695
- if (!text && attachmentKeys.length === 0) {
1696
- return "";
1697
- }
1698
- return JSON.stringify({
1699
- text,
1700
- attachments: attachmentKeys,
1701
- });
1702
- }
1703
- export function wrapSingleTurnVisibleCallback(runtime, message, callback) {
1704
- if (!callback) {
1705
- return undefined;
1706
- }
1707
- let visibleCallbackCount = 0;
1708
- let firstVisibleCallbackPreview = "";
1709
- const deliveredCallbackKeys = new Set();
1710
- return async (content, actionName) => {
1711
- const deliveryKey = callbackDeliveryKey(content);
1712
- const preview = callbackTextPreview(content);
1713
- const hasVisibleOutput = callbackHasVisibleOutput(content);
1714
- if (deliveryKey && deliveredCallbackKeys.has(deliveryKey)) {
1715
- runtime.logger.warn({
1716
- src: "service:message",
1717
- agentId: runtime.agentId,
1718
- messageId: message.id,
1719
- roomId: message.roomId,
1720
- action: typeof content?.action === "string"
1721
- ? String(content.action)
1722
- : actionName,
1723
- source: typeof content.source === "string" ? content.source : undefined,
1724
- preview: preview ||
1725
- (Array.isArray(content.attachments) &&
1726
- content.attachments.length > 0
1727
- ? `[attachments:${content.attachments.length}]`
1728
- : ""),
1729
- }, "Suppressing duplicate visible callback reply emitted for a single turn");
1730
- return [];
1731
- }
1732
- if (hasVisibleOutput && visibleCallbackCount >= 1) {
1733
- runtime.logger.warn({
1734
- src: "service:message",
1735
- agentId: runtime.agentId,
1736
- messageId: message.id,
1737
- roomId: message.roomId,
1738
- callbackCount: visibleCallbackCount + 1,
1739
- action: typeof content?.action === "string"
1740
- ? String(content.action)
1741
- : actionName,
1742
- source: typeof content.source === "string" ? content.source : undefined,
1743
- firstPreview: firstVisibleCallbackPreview,
1744
- currentPreview: preview ||
1745
- (Array.isArray(content.attachments) &&
1746
- content.attachments.length > 0
1747
- ? `[attachments:${content.attachments.length}]`
1748
- : ""),
1749
- }, "Suppressing additional visible callback reply emitted for a single turn");
1750
- return [];
1751
- }
1752
- if (deliveryKey) {
1753
- deliveredCallbackKeys.add(deliveryKey);
1754
- }
1755
- if (hasVisibleOutput) {
1756
- visibleCallbackCount += 1;
1757
- firstVisibleCallbackPreview =
1758
- preview ||
1759
- (Array.isArray(content.attachments) && content.attachments.length > 0
1760
- ? `[attachments:${content.attachments.length}]`
1761
- : "");
1762
- }
1763
- return actionName === undefined
1764
- ? callback(content)
1765
- : callback(content, actionName);
1766
- };
1641
+ export function wrapSingleTurnVisibleCallback(_runtime, _message, callback) {
1642
+ return callback;
1767
1643
  }
1768
1644
  function getLatestVisibleReplyText(responseContent, actionResults) {
1769
1645
  for (let index = actionResults.length - 1; index >= 0; index--) {