@elizaos/agent 2.0.0-alpha.192 → 2.0.0-alpha.196
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/apps/app-lifeops/src/action.d.ts.map +1 -1
- package/apps/app-lifeops/src/action.js +21 -2
- package/apps/app-lifeops/src/actions/app-blocker.d.ts +3 -1
- package/apps/app-lifeops/src/actions/app-blocker.d.ts.map +1 -1
- package/apps/app-lifeops/src/actions/app-blocker.js +2 -0
- package/apps/app-lifeops/src/actions/calendar.d.ts.map +1 -1
- package/apps/app-lifeops/src/actions/calendar.js +140 -7
- package/apps/app-lifeops/src/actions/computer-use.d.ts.map +1 -1
- package/apps/app-lifeops/src/actions/computer-use.js +248 -17
- package/apps/app-lifeops/src/actions/cross-channel-send.d.ts +3 -1
- package/apps/app-lifeops/src/actions/cross-channel-send.d.ts.map +1 -1
- package/apps/app-lifeops/src/actions/cross-channel-send.js +1 -0
- package/apps/app-lifeops/src/actions/dossier.d.ts.map +1 -1
- package/apps/app-lifeops/src/actions/dossier.js +51 -34
- package/apps/app-lifeops/src/actions/gmail.d.ts.map +1 -1
- package/apps/app-lifeops/src/actions/gmail.js +5 -0
- package/apps/app-lifeops/src/actions/inbox.d.ts.map +1 -1
- package/apps/app-lifeops/src/actions/inbox.js +8 -1
- package/apps/app-lifeops/src/actions/life.d.ts.map +1 -1
- package/apps/app-lifeops/src/actions/life.extractor.d.ts.map +1 -1
- package/apps/app-lifeops/src/actions/life.extractor.js +103 -4
- package/apps/app-lifeops/src/actions/life.js +8 -0
- package/apps/app-lifeops/src/actions/non-actionable-request.d.ts +6 -0
- package/apps/app-lifeops/src/actions/non-actionable-request.d.ts.map +1 -0
- package/apps/app-lifeops/src/actions/non-actionable-request.js +33 -0
- package/apps/app-lifeops/src/actions/password-manager.d.ts.map +1 -1
- package/apps/app-lifeops/src/actions/password-manager.js +11 -2
- package/apps/app-lifeops/src/actions/relationships.d.ts +3 -1
- package/apps/app-lifeops/src/actions/relationships.d.ts.map +1 -1
- package/apps/app-lifeops/src/actions/relationships.js +167 -11
- package/apps/app-lifeops/src/actions/remote-desktop.js +1 -1
- package/apps/app-lifeops/src/actions/screen-time.d.ts.map +1 -1
- package/apps/app-lifeops/src/actions/screen-time.js +8 -2
- package/apps/app-lifeops/src/actions/start-remote-session.js +1 -1
- package/apps/app-lifeops/src/actions/subscriptions.d.ts +5 -0
- package/apps/app-lifeops/src/actions/subscriptions.d.ts.map +1 -0
- package/apps/app-lifeops/src/actions/subscriptions.js +251 -0
- package/apps/app-lifeops/src/actions/twilio-call.d.ts.map +1 -1
- package/apps/app-lifeops/src/actions/twilio-call.js +48 -3
- package/apps/app-lifeops/src/actions/update-owner-profile.d.ts.map +1 -1
- package/apps/app-lifeops/src/actions/update-owner-profile.js +2 -1
- package/apps/app-lifeops/src/actions/website-blocker.d.ts +6 -2
- package/apps/app-lifeops/src/actions/website-blocker.d.ts.map +1 -1
- package/apps/app-lifeops/src/actions/website-blocker.js +38 -0
- package/apps/app-lifeops/src/actions/x-read.d.ts.map +1 -1
- package/apps/app-lifeops/src/actions/x-read.js +27 -3
- package/apps/app-lifeops/src/dossier/action.d.ts.map +1 -1
- package/apps/app-lifeops/src/dossier/action.js +8 -7
- package/apps/app-lifeops/src/followup/actions/listOverdueFollowups.d.ts.map +1 -1
- package/apps/app-lifeops/src/followup/actions/listOverdueFollowups.js +1 -0
- package/apps/app-lifeops/src/followup/actions/markFollowupDone.d.ts.map +1 -1
- package/apps/app-lifeops/src/followup/actions/markFollowupDone.js +2 -1
- package/apps/app-lifeops/src/followup/actions/setFollowupThreshold.d.ts.map +1 -1
- package/apps/app-lifeops/src/followup/actions/setFollowupThreshold.js +2 -1
- package/apps/app-lifeops/src/lifeops/calendly-client.d.ts.map +1 -1
- package/apps/app-lifeops/src/lifeops/calendly-client.js +4 -2
- package/apps/app-lifeops/src/lifeops/discord-browser-scraper.d.ts.map +1 -1
- package/apps/app-lifeops/src/lifeops/discord-browser-scraper.js +6 -5
- package/apps/app-lifeops/src/lifeops/password-manager-bridge.d.ts +1 -1
- package/apps/app-lifeops/src/lifeops/password-manager-bridge.d.ts.map +1 -1
- package/apps/app-lifeops/src/lifeops/password-manager-bridge.js +84 -6
- package/apps/app-lifeops/src/lifeops/remote-desktop.d.ts.map +1 -1
- package/apps/app-lifeops/src/lifeops/remote-desktop.js +30 -0
- package/apps/app-lifeops/src/lifeops/repository.d.ts +15 -0
- package/apps/app-lifeops/src/lifeops/repository.d.ts.map +1 -1
- package/apps/app-lifeops/src/lifeops/repository.js +330 -1
- package/apps/app-lifeops/src/lifeops/service-mixin-discord.js +222 -42
- package/apps/app-lifeops/src/lifeops/service-mixin-subscriptions.d.ts +2 -0
- package/apps/app-lifeops/src/lifeops/service-mixin-subscriptions.d.ts.map +1 -0
- package/apps/app-lifeops/src/lifeops/service-mixin-subscriptions.js +763 -0
- package/apps/app-lifeops/src/lifeops/service.d.ts +63 -0
- package/apps/app-lifeops/src/lifeops/service.d.ts.map +1 -1
- package/apps/app-lifeops/src/lifeops/service.js +2 -1
- package/apps/app-lifeops/src/lifeops/subscriptions-playbooks.d.ts +54 -0
- package/apps/app-lifeops/src/lifeops/subscriptions-playbooks.d.ts.map +1 -0
- package/apps/app-lifeops/src/lifeops/subscriptions-playbooks.js +213 -0
- package/apps/app-lifeops/src/lifeops/subscriptions-types.d.ts +80 -0
- package/apps/app-lifeops/src/lifeops/subscriptions-types.d.ts.map +1 -0
- package/apps/app-lifeops/src/lifeops/twilio.d.ts.map +1 -1
- package/apps/app-lifeops/src/lifeops/twilio.js +4 -2
- package/apps/app-lifeops/src/lifeops/whatsapp-client.d.ts.map +1 -1
- package/apps/app-lifeops/src/lifeops/whatsapp-client.js +4 -2
- package/apps/app-lifeops/src/lifeops/x-poster.d.ts.map +1 -1
- package/apps/app-lifeops/src/lifeops/x-poster.js +12 -6
- package/apps/app-lifeops/src/lifeops/x-reader.d.ts.map +1 -1
- package/apps/app-lifeops/src/lifeops/x-reader.js +7 -5
- package/apps/app-lifeops/src/plugin.d.ts.map +1 -1
- package/apps/app-lifeops/src/plugin.js +31 -24
- package/apps/app-lifeops/src/provider.d.ts.map +1 -1
- package/apps/app-lifeops/src/provider.js +4 -4
- package/apps/app-lifeops/src/providers/inbox-triage.js +2 -2
- package/apps/app-lifeops/src/providers/lifeops.d.ts.map +1 -1
- package/apps/app-lifeops/src/providers/lifeops.js +19 -10
- package/apps/app-lifeops/src/providers/website-blocker.js +1 -1
- package/apps/app-lifeops/src/public.d.ts +4 -0
- package/apps/app-lifeops/src/public.d.ts.map +1 -0
- package/apps/app-lifeops/src/public.js +3 -0
- package/apps/app-lifeops/src/routes/plugin.d.ts +18 -0
- package/apps/app-lifeops/src/routes/plugin.d.ts.map +1 -0
- package/apps/app-lifeops/src/routes/plugin.js +270 -0
- package/apps/app-lifeops/src/website-blocker/chat-integration/actions/blockUntilTaskComplete.d.ts.map +1 -1
- package/apps/app-lifeops/src/website-blocker/chat-integration/actions/blockUntilTaskComplete.js +18 -2
- package/apps/app-training/src/core/training-orchestrator.d.ts.map +1 -1
- package/apps/app-training/src/core/training-orchestrator.js +4 -0
- package/apps/app-training/src/services/training-trigger.d.ts +32 -18
- package/apps/app-training/src/services/training-trigger.d.ts.map +1 -1
- package/apps/app-training/src/services/training-trigger.js +10 -1
- package/package.json +4 -4
- package/packages/agent/src/actions/browser-session.d.ts +3 -0
- package/packages/agent/src/actions/browser-session.d.ts.map +1 -0
- package/packages/agent/src/actions/browser-session.js +207 -0
- package/packages/agent/src/actions/context-signal.d.ts +1 -1
- package/packages/agent/src/actions/context-signal.d.ts.map +1 -1
- package/packages/agent/src/actions/context-signal.js +1 -1
- package/packages/agent/src/actions/extract-page.d.ts +3 -0
- package/packages/agent/src/actions/extract-page.d.ts.map +1 -0
- package/packages/agent/src/actions/extract-page.js +124 -0
- package/packages/agent/src/actions/grounded-action-reply.js +1 -1
- package/packages/agent/src/actions/recent-conversation-texts.d.ts +9 -0
- package/packages/agent/src/actions/recent-conversation-texts.d.ts.map +1 -0
- package/packages/agent/src/actions/recent-conversation-texts.js +81 -0
- package/packages/agent/src/actions/set-user-name.js +1 -1
- package/packages/agent/src/actions/web-search.d.ts +4 -10
- package/packages/agent/src/actions/web-search.d.ts.map +1 -1
- package/packages/agent/src/actions/web-search.js +89 -19
- package/packages/agent/src/api/binance-skill-helpers.d.ts.map +1 -1
- package/packages/agent/src/api/binance-skill-helpers.js +1 -1
- package/packages/agent/src/api/chat-augmentation.d.ts +1 -20
- package/packages/agent/src/api/chat-augmentation.d.ts.map +1 -1
- package/packages/agent/src/api/chat-augmentation.js +2 -110
- package/packages/agent/src/api/conversation-metadata.d.ts +9 -0
- package/packages/agent/src/api/conversation-metadata.d.ts.map +1 -0
- package/packages/agent/src/api/conversation-metadata.js +98 -0
- package/packages/agent/src/api/conversation-routes.d.ts.map +1 -1
- package/packages/agent/src/api/conversation-routes.js +40 -9
- package/packages/agent/src/api/lifeops-browser-packaging.d.ts +1 -1
- package/packages/agent/src/api/lifeops-browser-packaging.d.ts.map +1 -1
- package/packages/agent/src/api/lifeops-browser-packaging.js +1 -1
- package/packages/agent/src/api/permissions-routes.js +1 -1
- package/packages/agent/src/api/server-helpers-auth.js +1 -1
- package/packages/agent/src/api/server-helpers.d.ts +2 -1
- package/packages/agent/src/api/server-helpers.d.ts.map +1 -1
- package/packages/agent/src/api/server-helpers.js +2 -110
- package/packages/agent/src/api/server-types.d.ts +14 -0
- package/packages/agent/src/api/server-types.d.ts.map +1 -1
- package/packages/agent/src/api/server.d.ts.map +1 -1
- package/packages/agent/src/api/server.js +3 -13
- package/packages/agent/src/api/workbench-routes.d.ts.map +1 -1
- package/packages/agent/src/api/workbench-routes.js +0 -14
- package/packages/agent/src/auth/credentials.d.ts.map +1 -1
- package/packages/agent/src/auth/credentials.js +8 -0
- package/packages/agent/src/config/zod-schema.d.ts +2 -2
- package/packages/agent/src/config/zod-schema.providers-core.d.ts +3 -3
- package/packages/agent/src/providers/automation-terminal-bridge.d.ts +3 -0
- package/packages/agent/src/providers/automation-terminal-bridge.d.ts.map +1 -0
- package/packages/agent/src/providers/automation-terminal-bridge.js +71 -0
- package/packages/agent/src/providers/index.d.ts +1 -0
- package/packages/agent/src/providers/index.d.ts.map +1 -1
- package/packages/agent/src/providers/index.js +1 -0
- package/packages/agent/src/providers/recent-conversations.d.ts.map +1 -1
- package/packages/agent/src/providers/recent-conversations.js +5 -0
- package/packages/agent/src/providers/relevant-conversations.d.ts.map +1 -1
- package/packages/agent/src/providers/relevant-conversations.js +5 -0
- package/packages/agent/src/providers/user-name.d.ts.map +1 -1
- package/packages/agent/src/providers/user-name.js +1 -1
- package/packages/agent/src/runtime/eliza-plugin.d.ts.map +1 -1
- package/packages/agent/src/runtime/eliza-plugin.js +6 -0
- package/packages/agent/src/runtime/plugin-resolver.d.ts.map +1 -1
- package/packages/agent/src/runtime/plugin-resolver.js +115 -0
- package/packages/agent/src/services/browser-workspace-types.d.ts +5 -1
- package/packages/agent/src/services/browser-workspace-types.d.ts.map +1 -1
- package/packages/agent/src/services/browser-workspace.d.ts.map +1 -1
- package/packages/agent/src/services/browser-workspace.js +178 -7
- package/packages/agent/src/services/coding-agent-context.d.ts +4 -4
- package/packages/agent/src/services/escalation.d.ts +0 -11
- package/packages/agent/src/services/escalation.d.ts.map +1 -1
- package/packages/agent/src/services/escalation.js +19 -58
- package/packages/agent/src/services/hosted-tools.d.ts +70 -0
- package/packages/agent/src/services/hosted-tools.d.ts.map +1 -0
- package/packages/agent/src/services/hosted-tools.js +87 -0
- package/packages/agent/src/services/owner-name.d.ts +4 -0
- package/packages/agent/src/services/owner-name.d.ts.map +1 -0
- package/packages/agent/src/services/owner-name.js +46 -0
- package/packages/agent/src/services/registry-client-queries.d.ts +1 -1
- package/packages/agent/src/services/registry-client-queries.js +1 -1
- package/packages/agent/src/services/registry-client-types.d.ts +1 -1
- package/packages/agent/src/services/stream-manager.d.ts +1 -1
- package/packages/app-core/src/config/boot-config-store.d.ts +1 -1
- package/packages/app-core/src/config/boot-config-store.d.ts.map +1 -1
- package/packages/shared/src/contracts/lifeops.d.ts +26 -0
- package/packages/shared/src/contracts/lifeops.d.ts.map +1 -1
- package/packages/shared/src/contracts/lifeops.js +28 -0
- package/packages/typescript/src/actions.d.ts.map +1 -1
- package/packages/typescript/src/actions.js +12 -0
- package/packages/typescript/src/features/advanced-capabilities/actions/scheduleFollowUp.d.ts.map +1 -1
- package/packages/typescript/src/features/advanced-capabilities/actions/scheduleFollowUp.js +8 -2
- package/packages/typescript/src/features/advanced-capabilities/providers/settings.d.ts.map +1 -1
- package/packages/typescript/src/features/advanced-capabilities/providers/settings.js +11 -3
- package/packages/typescript/src/features/basic-capabilities/providers/actions.d.ts.map +1 -1
- package/packages/typescript/src/features/basic-capabilities/providers/actions.js +23 -1
- package/packages/typescript/src/features/basic-capabilities/providers/non-actionable-chatter.d.ts +5 -0
- package/packages/typescript/src/features/basic-capabilities/providers/non-actionable-chatter.d.ts.map +1 -0
- package/packages/typescript/src/features/basic-capabilities/providers/non-actionable-chatter.js +22 -0
- package/packages/typescript/src/features/basic-capabilities/providers/providers.d.ts.map +1 -1
- package/packages/typescript/src/features/basic-capabilities/providers/providers.js +10 -5
- package/packages/typescript/src/features/knowledge/documents-provider.d.ts.map +1 -1
- package/packages/typescript/src/features/knowledge/documents-provider.js +1 -0
- package/packages/typescript/src/features/shared/schedule-follow-up-response.d.ts +10 -0
- package/packages/typescript/src/features/shared/schedule-follow-up-response.d.ts.map +1 -0
- package/packages/typescript/src/features/shared/schedule-follow-up-response.js +49 -0
- package/packages/typescript/src/features/trajectories/TrajectoriesService.d.ts +1 -0
- package/packages/typescript/src/features/trajectories/TrajectoriesService.d.ts.map +1 -1
- package/packages/typescript/src/features/trajectories/TrajectoriesService.js +21 -2
- package/packages/typescript/src/features/trust/providers/settings.d.ts.map +1 -1
- package/packages/typescript/src/features/trust/providers/settings.js +11 -1
- package/packages/typescript/src/prompts.d.ts +4 -4
- package/packages/typescript/src/prompts.d.ts.map +1 -1
- package/packages/typescript/src/prompts.js +10 -2
- package/packages/typescript/src/schemas/character.d.ts +3 -3
- package/packages/typescript/src/services/message.d.ts +1 -0
- package/packages/typescript/src/services/message.d.ts.map +1 -1
- package/packages/typescript/src/services/message.js +483 -18
- package/packages/typescript/src/types/components.d.ts +6 -0
- package/packages/typescript/src/types/components.d.ts.map +1 -1
- package/packages/typescript/src/utils/context-routing.d.ts.map +1 -1
- package/packages/typescript/src/utils/context-routing.js +5 -1
- package/packages/typescript/src/utils/toon.d.ts.map +1 -1
- package/packages/typescript/src/utils/toon.js +23 -2
- package/packages/typescript/src/utils.d.ts +1 -0
- package/packages/typescript/src/utils.d.ts.map +1 -1
- package/packages/typescript/src/utils.js +1 -0
- package/apps/app-lifeops/src/types/app-blocker-settings-card.d.ts +0 -2
- package/apps/app-lifeops/src/types/app-blocker-settings-card.d.ts.map +0 -1
- package/apps/app-lifeops/src/types/index.d.ts +0 -3
- package/apps/app-lifeops/src/types/index.d.ts.map +0 -1
- package/apps/app-lifeops/src/types/index.js +0 -1
- package/apps/app-lifeops/src/types/website-blocker-settings-card.d.ts +0 -2
- package/apps/app-lifeops/src/types/website-blocker-settings-card.d.ts.map +0 -1
- package/apps/app-lifeops/src/types/website-blocker-settings-card.js +0 -1
- /package/apps/app-lifeops/src/{types/app-blocker-settings-card.js → lifeops/subscriptions-types.js} +0 -0
|
@@ -454,9 +454,15 @@ declare const LifeOpsServiceComposedBase_base: {
|
|
|
454
454
|
lifeOpsDiscordGetBrowserSessionById(sessionId: string | null): Promise<import("@elizaos/shared/contracts/lifeops.js").LifeOpsBrowserSession | null>;
|
|
455
455
|
lifeOpsDiscordGetOwnerBrowserDiscordState(grant: import("@elizaos/shared/contracts/lifeops.js").LifeOpsConnectorGrant | null): Promise<{
|
|
456
456
|
available: boolean;
|
|
457
|
+
settingsEnabled: boolean;
|
|
458
|
+
trackingEnabled: boolean;
|
|
459
|
+
paused: boolean;
|
|
457
460
|
canControl: boolean;
|
|
458
461
|
selectedCompanion: import("@elizaos/shared/contracts/lifeops.js").LifeOpsBrowserCompanionStatus | null;
|
|
462
|
+
hasAnyCompanion: boolean;
|
|
463
|
+
hasConnectedCompanion: boolean;
|
|
459
464
|
discordTab: import("@elizaos/shared/contracts/lifeops.js").LifeOpsBrowserTabSummary | null;
|
|
465
|
+
currentPageUrl: string | null;
|
|
460
466
|
probe: import("./discord-browser-scraper.js").DiscordTabProbe | null;
|
|
461
467
|
session: import("@elizaos/shared/contracts/lifeops.js").LifeOpsBrowserSession | null;
|
|
462
468
|
lastError: string | null;
|
|
@@ -871,6 +877,63 @@ declare const LifeOpsServiceComposedBase_base: {
|
|
|
871
877
|
getWorkflowDefinition(workflowId: string): Promise<import("@elizaos/shared/contracts/lifeops.js").LifeOpsWorkflowDefinition>;
|
|
872
878
|
requireXGrant(requestedMode?: import("@elizaos/shared/contracts/lifeops.js").LifeOpsConnectorMode): Promise<import("@elizaos/shared/contracts/lifeops.js").LifeOpsConnectorGrant>;
|
|
873
879
|
};
|
|
880
|
+
} & {
|
|
881
|
+
new (...args: any[]): {
|
|
882
|
+
listSubscriptionPlaybooks(): Promise<import("./subscriptions-playbooks.js").LifeOpsSubscriptionPlaybook[]>;
|
|
883
|
+
getLatestSubscriptionAudit(): Promise<import("./subscriptions-types.js").LifeOpsSubscriptionAuditSummary | null>;
|
|
884
|
+
auditSubscriptions(requestUrl: URL, request?: import("./subscriptions-types.js").LifeOpsSubscriptionDiscoveryRequest): Promise<import("./subscriptions-types.js").LifeOpsSubscriptionAuditSummary>;
|
|
885
|
+
getSubscriptionCancellationStatus(args: {
|
|
886
|
+
cancellationId?: string | null;
|
|
887
|
+
serviceName?: string | null;
|
|
888
|
+
serviceSlug?: string | null;
|
|
889
|
+
}): Promise<import("./subscriptions-types.js").LifeOpsSubscriptionCancellationSummary | null>;
|
|
890
|
+
cancelSubscription(request: import("./subscriptions-types.js").LifeOpsSubscriptionCancellationRequest): Promise<import("./subscriptions-types.js").LifeOpsSubscriptionCancellationSummary>;
|
|
891
|
+
summarizeSubscriptionAudit(summary: import("./subscriptions-types.js").LifeOpsSubscriptionAuditSummary): string;
|
|
892
|
+
summarizeSubscriptionCancellation(summary: import("./subscriptions-types.js").LifeOpsSubscriptionCancellationSummary): string;
|
|
893
|
+
resolveSubscriptionIntent(text: string): {
|
|
894
|
+
mode: "audit" | "cancel" | "status" | null;
|
|
895
|
+
serviceName?: string;
|
|
896
|
+
serviceSlug?: string;
|
|
897
|
+
executor?: import("./subscriptions-types.js").LifeOpsSubscriptionExecutor;
|
|
898
|
+
};
|
|
899
|
+
readonly repository: import("./repository.js").LifeOpsRepository;
|
|
900
|
+
readonly explicitOwnerEntityIdValue: string | null;
|
|
901
|
+
readonly ownerEntityIdValue: string;
|
|
902
|
+
readonly googleManagedClient: import("./google-managed-client.js").GoogleManagedClient;
|
|
903
|
+
ownerRoutingEntityIdPromise: Promise<string | null> | null;
|
|
904
|
+
adaptiveWindowPolicyCache: {
|
|
905
|
+
policy: ReturnType<typeof import("./defaults.js").computeAdaptiveWindowPolicy>;
|
|
906
|
+
computedAt: number;
|
|
907
|
+
} | null;
|
|
908
|
+
readonly runtime: import("@elizaos/core").IAgentRuntime;
|
|
909
|
+
agentId(): string;
|
|
910
|
+
ownerEntityId(): string;
|
|
911
|
+
ownerRoutingEntityId(): Promise<string | null>;
|
|
912
|
+
getBrowserSettingsInternal(): Promise<import("@elizaos/shared/contracts/lifeops.js").LifeOpsBrowserSettings>;
|
|
913
|
+
isBrowserPaused(settings: import("@elizaos/shared/contracts/lifeops.js").LifeOpsBrowserSettings): boolean;
|
|
914
|
+
requireBrowserAvailableForActions(actions: readonly import("@elizaos/shared/contracts/lifeops.js").LifeOpsBrowserAction[]): Promise<import("@elizaos/shared/contracts/lifeops.js").LifeOpsBrowserSettings>;
|
|
915
|
+
buildBrowserCompanion(request: import("@elizaos/shared/contracts/lifeops.js").UpsertLifeOpsBrowserCompanionRequest, current: import("@elizaos/shared/contracts/lifeops.js").LifeOpsBrowserCompanionStatus | null): import("@elizaos/shared/contracts/lifeops.js").LifeOpsBrowserCompanionStatus;
|
|
916
|
+
normalizeOwnership(input: import("@elizaos/shared/contracts/lifeops.js").LifeOpsOwnershipInput | undefined, current?: import("@elizaos/shared/contracts/lifeops.js").LifeOpsOwnership): import("@elizaos/shared/contracts/lifeops.js").LifeOpsOwnership;
|
|
917
|
+
normalizeChildOwnership(parent: import("@elizaos/shared/contracts/lifeops.js").LifeOpsOwnership, input: import("@elizaos/shared/contracts/lifeops.js").LifeOpsOwnershipInput | undefined, field?: string): import("@elizaos/shared/contracts/lifeops.js").LifeOpsOwnership;
|
|
918
|
+
logLifeOpsWarn(operation: string, message: string, context?: Record<string, unknown>): void;
|
|
919
|
+
logLifeOpsError(operation: string, error: unknown, context?: Record<string, unknown>): void;
|
|
920
|
+
withReminderProcessingLock<T>(operation: () => Promise<T>): Promise<T>;
|
|
921
|
+
recordAudit(eventType: import("@elizaos/shared/contracts/lifeops.js").LifeOpsAuditEventType, ownerType: "definition" | "occurrence" | "goal", ownerId: string, reason: string, inputs: Record<string, unknown>, decision: Record<string, unknown>): Promise<void>;
|
|
922
|
+
recordConnectorAudit(ownerId: string, reason: string, inputs: Record<string, unknown>, decision: Record<string, unknown>): Promise<void>;
|
|
923
|
+
recordChannelPolicyAudit(ownerId: string, reason: string, inputs: Record<string, unknown>, decision: Record<string, unknown>): Promise<void>;
|
|
924
|
+
recordWorkflowAudit(eventType: "workflow_created" | "workflow_updated" | "workflow_run", ownerId: string, actor: "user" | "workflow", reason: string, inputs: Record<string, unknown>, decision: Record<string, unknown>): Promise<import("@elizaos/shared/contracts/lifeops.js").LifeOpsAuditEvent>;
|
|
925
|
+
recordReminderAudit(eventType: "reminder_due" | "reminder_delivered" | "reminder_blocked" | "reminder_escalation_started" | "reminder_escalation_resolved", ownerType: "occurrence" | "calendar_event", ownerId: string, reason: string, inputs: Record<string, unknown>, decision: Record<string, unknown>): Promise<void>;
|
|
926
|
+
recordBrowserAudit(eventType: "browser_session_created" | "browser_session_updated", ownerId: string, reason: string, inputs: Record<string, unknown>, decision: Record<string, unknown>): Promise<void>;
|
|
927
|
+
recordXPostAudit(ownerId: string, reason: string, inputs: Record<string, unknown>, decision: Record<string, unknown>): Promise<void>;
|
|
928
|
+
clearGoogleGrantAuthFailure(grant: import("@elizaos/shared/contracts/lifeops.js").LifeOpsConnectorGrant): Promise<import("@elizaos/shared/contracts/lifeops.js").LifeOpsConnectorGrant>;
|
|
929
|
+
markGoogleGrantNeedsReauth(grant: import("@elizaos/shared/contracts/lifeops.js").LifeOpsConnectorGrant, message: string): Promise<import("@elizaos/shared/contracts/lifeops.js").LifeOpsConnectorGrant>;
|
|
930
|
+
emitAssistantEvent(text: string, source: string, data?: Record<string, unknown>): void;
|
|
931
|
+
getWorkflowDefinition(workflowId: string): Promise<import("@elizaos/shared/contracts/lifeops.js").LifeOpsWorkflowDefinition>;
|
|
932
|
+
requireXGrant(requestedMode?: import("@elizaos/shared/contracts/lifeops.js").LifeOpsConnectorMode): Promise<import("@elizaos/shared/contracts/lifeops.js").LifeOpsConnectorGrant>;
|
|
933
|
+
getGmailTriage(requestUrl: URL, request?: Record<string, unknown>, now?: Date): Promise<import("@elizaos/shared/contracts/lifeops.js").LifeOpsGmailTriageFeed>;
|
|
934
|
+
listBrowserCompanions(): Promise<import("@elizaos/shared/contracts/lifeops.js").LifeOpsBrowserCompanionStatus[]>;
|
|
935
|
+
createBrowserSession(request: import("@elizaos/shared/contracts/lifeops.js").CreateLifeOpsBrowserSessionRequest): Promise<import("@elizaos/shared/contracts/lifeops.js").LifeOpsBrowserSession>;
|
|
936
|
+
};
|
|
874
937
|
} & {
|
|
875
938
|
new (...args: any[]): {
|
|
876
939
|
createBrowserSessionInternal(request: import("@elizaos/shared/contracts/lifeops.js").CreateLifeOpsBrowserSessionRequest): Promise<import("@elizaos/shared/contracts/lifeops.js").LifeOpsBrowserSession>;
|
|
@@ -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;AAEzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC
|
|
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;AAEzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iEA6EokpC,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;0BAA55iC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AArDtvG;;;;;;;GAOG;AACH,qBAAa,0BAA2B,SAAQ,+BA0C/C;CAAG;AAEJ,qBAAa,cAAe,SAAQ,0BAA0B;CAAG"}
|
|
@@ -28,6 +28,7 @@ import { withScheduling } from "./service-mixin-scheduling.js";
|
|
|
28
28
|
import { withDossier } from "./service-mixin-dossier.js";
|
|
29
29
|
import { withHealth } from "./service-mixin-health.js";
|
|
30
30
|
import { withDrive } from "./service-mixin-drive.js";
|
|
31
|
+
import { withSubscriptions } from "./service-mixin-subscriptions.js";
|
|
31
32
|
/**
|
|
32
33
|
* Main LifeOps service — assembled from domain mixins layered on top of
|
|
33
34
|
* {@link LifeOpsServiceBase}.
|
|
@@ -36,7 +37,7 @@ import { withDrive } from "./service-mixin-drive.js";
|
|
|
36
37
|
* (Calendar, Gmail, Drive) → business logic (Reminders, Browser, Workflows,
|
|
37
38
|
* Definitions, Goals) → connectors (X, Telegram, Discord, Signal).
|
|
38
39
|
*/
|
|
39
|
-
export class LifeOpsServiceComposedBase extends withHealth(withDossier(withScheduling(withScreenTime(withWhatsApp(withRelationships(withIMessage(withSignal(withDiscord(withTelegram(withXRead(withX(withGoals(withDefinitions(withWorkflows(withBrowser(withReminders(withGmail(withDrive(withCalendar(withGoogle(LifeOpsServiceBase))))))))))))))))))))) {
|
|
40
|
+
export class LifeOpsServiceComposedBase extends withHealth(withDossier(withScheduling(withScreenTime(withWhatsApp(withRelationships(withIMessage(withSignal(withDiscord(withTelegram(withXRead(withX(withGoals(withDefinitions(withWorkflows(withSubscriptions(withBrowser(withReminders(withGmail(withDrive(withCalendar(withGoogle(LifeOpsServiceBase)))))))))))))))))))))) {
|
|
40
41
|
}
|
|
41
42
|
export class LifeOpsService extends LifeOpsServiceComposedBase {
|
|
42
43
|
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { LifeOpsSubscriptionExecutor } from "./subscriptions-types.js";
|
|
2
|
+
export type SubscriptionAutomationStep = {
|
|
3
|
+
kind: "open";
|
|
4
|
+
url: string;
|
|
5
|
+
} | {
|
|
6
|
+
kind: "navigate";
|
|
7
|
+
url: string;
|
|
8
|
+
} | {
|
|
9
|
+
kind: "wait_text";
|
|
10
|
+
text: string;
|
|
11
|
+
timeoutMs?: number;
|
|
12
|
+
} | {
|
|
13
|
+
kind: "wait_selector";
|
|
14
|
+
selector: string;
|
|
15
|
+
timeoutMs?: number;
|
|
16
|
+
} | {
|
|
17
|
+
kind: "click_text";
|
|
18
|
+
text: string;
|
|
19
|
+
destructive?: boolean;
|
|
20
|
+
} | {
|
|
21
|
+
kind: "click_selector";
|
|
22
|
+
selector: string;
|
|
23
|
+
destructive?: boolean;
|
|
24
|
+
} | {
|
|
25
|
+
kind: "assert_text";
|
|
26
|
+
text: string;
|
|
27
|
+
} | {
|
|
28
|
+
kind: "screenshot";
|
|
29
|
+
label: string;
|
|
30
|
+
};
|
|
31
|
+
export interface LifeOpsSubscriptionPlaybook {
|
|
32
|
+
key: string;
|
|
33
|
+
serviceName: string;
|
|
34
|
+
aliases: string[];
|
|
35
|
+
executorPreference: LifeOpsSubscriptionExecutor;
|
|
36
|
+
managementUrl: string;
|
|
37
|
+
managementPath?: string;
|
|
38
|
+
auditDomains: string[];
|
|
39
|
+
auditSubjectKeywords: string[];
|
|
40
|
+
loginMarkers: string[];
|
|
41
|
+
mfaMarkers: string[];
|
|
42
|
+
phoneOnlyMarkers: string[];
|
|
43
|
+
chatOnlyMarkers: string[];
|
|
44
|
+
cancellationMarkers: string[];
|
|
45
|
+
steps: SubscriptionAutomationStep[];
|
|
46
|
+
companionSelectors?: {
|
|
47
|
+
cancel?: string;
|
|
48
|
+
confirm?: string;
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
export declare const LIFEOPS_SUBSCRIPTION_PLAYBOOKS: readonly LifeOpsSubscriptionPlaybook[];
|
|
52
|
+
export declare function listLifeOpsSubscriptionPlaybooks(): readonly LifeOpsSubscriptionPlaybook[];
|
|
53
|
+
export declare function findLifeOpsSubscriptionPlaybook(serviceNameOrSlug: string | null | undefined): LifeOpsSubscriptionPlaybook | null;
|
|
54
|
+
//# sourceMappingURL=subscriptions-playbooks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subscriptions-playbooks.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/lifeops/subscriptions-playbooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AAE5E,MAAM,MAAM,0BAA0B,GAClC;IACE,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb,GACD;IACE,IAAI,EAAE,UAAU,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;CACb,GACD;IACE,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GACD;IACE,IAAI,EAAE,eAAe,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GACD;IACE,IAAI,EAAE,YAAY,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,GACD;IACE,IAAI,EAAE,gBAAgB,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,GACD;IACE,IAAI,EAAE,aAAa,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd,GACD;IACE,IAAI,EAAE,YAAY,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEN,MAAM,WAAW,2BAA2B;IAC1C,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,kBAAkB,EAAE,2BAA2B,CAAC;IAChD,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,KAAK,EAAE,0BAA0B,EAAE,CAAC;IACpC,kBAAkB,CAAC,EAAE;QACnB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAgCD,eAAO,MAAM,8BAA8B,EAAE,SAAS,2BAA2B,EA6LrE,CAAC;AAMb,wBAAgB,gCAAgC,IAAI,SAAS,2BAA2B,EAAE,CAEzF;AAED,wBAAgB,+BAA+B,CAC7C,iBAAiB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC3C,2BAA2B,GAAG,IAAI,CA0BpC"}
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
const FIXTURE_BASE_URL_ENV = "MILADY_SUBSCRIPTION_FIXTURE_BASE_URL";
|
|
2
|
+
function configuredFixtureBaseUrl() {
|
|
3
|
+
const value = process.env[FIXTURE_BASE_URL_ENV]?.trim();
|
|
4
|
+
if (!value) {
|
|
5
|
+
return null;
|
|
6
|
+
}
|
|
7
|
+
return value.replace(/\/+$/, "");
|
|
8
|
+
}
|
|
9
|
+
function withFixtureOverride(path, fallback) {
|
|
10
|
+
const base = configuredFixtureBaseUrl();
|
|
11
|
+
return base ? `${base}${path}` : fallback;
|
|
12
|
+
}
|
|
13
|
+
const GENERIC_LOGIN_MARKERS = [
|
|
14
|
+
"sign in",
|
|
15
|
+
"log in",
|
|
16
|
+
"login",
|
|
17
|
+
"password",
|
|
18
|
+
"email address",
|
|
19
|
+
];
|
|
20
|
+
const GENERIC_MFA_MARKERS = [
|
|
21
|
+
"verification code",
|
|
22
|
+
"two-factor",
|
|
23
|
+
"2-step verification",
|
|
24
|
+
"enter code",
|
|
25
|
+
];
|
|
26
|
+
export const LIFEOPS_SUBSCRIPTION_PLAYBOOKS = [
|
|
27
|
+
{
|
|
28
|
+
key: "google_play",
|
|
29
|
+
serviceName: "Google Play",
|
|
30
|
+
aliases: [
|
|
31
|
+
"google play",
|
|
32
|
+
"play store",
|
|
33
|
+
"play subscriptions",
|
|
34
|
+
],
|
|
35
|
+
executorPreference: "agent_browser",
|
|
36
|
+
managementUrl: withFixtureOverride("/stores/google-play", "https://play.google.com/store/account/subscriptions"),
|
|
37
|
+
managementPath: "/stores/google-play",
|
|
38
|
+
auditDomains: ["google.com", "googleplay.com"],
|
|
39
|
+
auditSubjectKeywords: [
|
|
40
|
+
"google play",
|
|
41
|
+
"subscription",
|
|
42
|
+
"renewal",
|
|
43
|
+
"receipt",
|
|
44
|
+
],
|
|
45
|
+
loginMarkers: [...GENERIC_LOGIN_MARKERS],
|
|
46
|
+
mfaMarkers: [...GENERIC_MFA_MARKERS],
|
|
47
|
+
phoneOnlyMarkers: ["phone support"],
|
|
48
|
+
chatOnlyMarkers: ["chat support"],
|
|
49
|
+
cancellationMarkers: ["subscription canceled", "canceled on"],
|
|
50
|
+
steps: [
|
|
51
|
+
{
|
|
52
|
+
kind: "open",
|
|
53
|
+
url: withFixtureOverride("/stores/google-play", "https://play.google.com/store/account/subscriptions"),
|
|
54
|
+
},
|
|
55
|
+
{ kind: "wait_text", text: "Subscriptions" },
|
|
56
|
+
{ kind: "click_text", text: "Cancel subscription" },
|
|
57
|
+
{ kind: "wait_text", text: "Confirm cancellation" },
|
|
58
|
+
{ kind: "click_text", text: "Confirm cancellation", destructive: true },
|
|
59
|
+
{ kind: "wait_text", text: "subscription canceled" },
|
|
60
|
+
{ kind: "screenshot", label: "google-play-cancelled" },
|
|
61
|
+
],
|
|
62
|
+
companionSelectors: {
|
|
63
|
+
cancel: "[data-lifeops-action='cancel-subscription']",
|
|
64
|
+
confirm: "[data-lifeops-action='confirm-cancellation']",
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
key: "apple_subscriptions",
|
|
69
|
+
serviceName: "Apple subscriptions",
|
|
70
|
+
aliases: [
|
|
71
|
+
"apple subscriptions",
|
|
72
|
+
"app store",
|
|
73
|
+
"itunes subscription",
|
|
74
|
+
"apple services",
|
|
75
|
+
],
|
|
76
|
+
executorPreference: "agent_browser",
|
|
77
|
+
managementUrl: withFixtureOverride("/stores/apple-subscriptions", "https://account.apple.com/account/manage/section/subscriptions"),
|
|
78
|
+
managementPath: "/stores/apple-subscriptions",
|
|
79
|
+
auditDomains: ["apple.com", "itunes.com"],
|
|
80
|
+
auditSubjectKeywords: [
|
|
81
|
+
"app store",
|
|
82
|
+
"apple subscription",
|
|
83
|
+
"renewal receipt",
|
|
84
|
+
],
|
|
85
|
+
loginMarkers: [...GENERIC_LOGIN_MARKERS, "apple id"],
|
|
86
|
+
mfaMarkers: [...GENERIC_MFA_MARKERS, "trusted device"],
|
|
87
|
+
phoneOnlyMarkers: ["contact apple support by phone"],
|
|
88
|
+
chatOnlyMarkers: ["chat with apple support"],
|
|
89
|
+
cancellationMarkers: ["subscription canceled", "expires on"],
|
|
90
|
+
steps: [
|
|
91
|
+
{
|
|
92
|
+
kind: "open",
|
|
93
|
+
url: withFixtureOverride("/stores/apple-subscriptions", "https://account.apple.com/account/manage/section/subscriptions"),
|
|
94
|
+
},
|
|
95
|
+
{ kind: "wait_text", text: "Subscriptions" },
|
|
96
|
+
{ kind: "click_text", text: "Cancel subscription" },
|
|
97
|
+
{ kind: "wait_text", text: "Confirm cancellation" },
|
|
98
|
+
{ kind: "click_text", text: "Confirm cancellation", destructive: true },
|
|
99
|
+
{ kind: "wait_text", text: "subscription canceled" },
|
|
100
|
+
{ kind: "screenshot", label: "apple-subscriptions-cancelled" },
|
|
101
|
+
],
|
|
102
|
+
companionSelectors: {
|
|
103
|
+
cancel: "[data-lifeops-action='cancel-subscription']",
|
|
104
|
+
confirm: "[data-lifeops-action='confirm-cancellation']",
|
|
105
|
+
},
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
key: "fixture_streaming",
|
|
109
|
+
serviceName: "Fixture Streaming",
|
|
110
|
+
aliases: ["fixture streaming", "streaming fixture", "test streaming"],
|
|
111
|
+
executorPreference: "agent_browser",
|
|
112
|
+
managementUrl: withFixtureOverride("/services/fixture-streaming", "https://example.com/account/subscription"),
|
|
113
|
+
managementPath: "/services/fixture-streaming",
|
|
114
|
+
auditDomains: ["fixture-streaming.example"],
|
|
115
|
+
auditSubjectKeywords: ["fixture streaming", "monthly plan", "receipt"],
|
|
116
|
+
loginMarkers: [...GENERIC_LOGIN_MARKERS],
|
|
117
|
+
mfaMarkers: [...GENERIC_MFA_MARKERS],
|
|
118
|
+
phoneOnlyMarkers: ["call us to cancel"],
|
|
119
|
+
chatOnlyMarkers: ["chat with support to cancel"],
|
|
120
|
+
cancellationMarkers: ["subscription canceled"],
|
|
121
|
+
steps: [
|
|
122
|
+
{
|
|
123
|
+
kind: "open",
|
|
124
|
+
url: withFixtureOverride("/services/fixture-streaming", "https://example.com/account/subscription"),
|
|
125
|
+
},
|
|
126
|
+
{ kind: "wait_text", text: "Fixture Streaming" },
|
|
127
|
+
{ kind: "click_text", text: "Cancel subscription" },
|
|
128
|
+
{ kind: "wait_text", text: "Confirm cancellation" },
|
|
129
|
+
{ kind: "click_text", text: "Confirm cancellation", destructive: true },
|
|
130
|
+
{ kind: "wait_text", text: "subscription canceled" },
|
|
131
|
+
{ kind: "screenshot", label: "fixture-streaming-cancelled" },
|
|
132
|
+
],
|
|
133
|
+
companionSelectors: {
|
|
134
|
+
cancel: "[data-lifeops-action='cancel-subscription']",
|
|
135
|
+
confirm: "[data-lifeops-action='confirm-cancellation']",
|
|
136
|
+
},
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
key: "fixture_login_required",
|
|
140
|
+
serviceName: "Fixture Login Required",
|
|
141
|
+
aliases: ["fixture login required", "test login required"],
|
|
142
|
+
executorPreference: "agent_browser",
|
|
143
|
+
managementUrl: withFixtureOverride("/services/login-required", "https://example.com/account/subscription"),
|
|
144
|
+
managementPath: "/services/login-required",
|
|
145
|
+
auditDomains: ["login-required.example"],
|
|
146
|
+
auditSubjectKeywords: ["login required", "membership receipt"],
|
|
147
|
+
loginMarkers: [...GENERIC_LOGIN_MARKERS],
|
|
148
|
+
mfaMarkers: [...GENERIC_MFA_MARKERS],
|
|
149
|
+
phoneOnlyMarkers: [],
|
|
150
|
+
chatOnlyMarkers: [],
|
|
151
|
+
cancellationMarkers: ["subscription canceled"],
|
|
152
|
+
steps: [
|
|
153
|
+
{
|
|
154
|
+
kind: "open",
|
|
155
|
+
url: withFixtureOverride("/services/login-required", "https://example.com/account/subscription"),
|
|
156
|
+
},
|
|
157
|
+
{ kind: "wait_text", text: "Sign in to continue" },
|
|
158
|
+
],
|
|
159
|
+
companionSelectors: {},
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
key: "fixture_phone_only",
|
|
163
|
+
serviceName: "Fixture Phone Only",
|
|
164
|
+
aliases: ["fixture phone only", "test phone only"],
|
|
165
|
+
executorPreference: "agent_browser",
|
|
166
|
+
managementUrl: withFixtureOverride("/services/phone-only", "https://example.com/account/subscription"),
|
|
167
|
+
managementPath: "/services/phone-only",
|
|
168
|
+
auditDomains: ["phone-only.example"],
|
|
169
|
+
auditSubjectKeywords: ["phone only", "billing receipt"],
|
|
170
|
+
loginMarkers: [],
|
|
171
|
+
mfaMarkers: [],
|
|
172
|
+
phoneOnlyMarkers: ["call us to cancel"],
|
|
173
|
+
chatOnlyMarkers: [],
|
|
174
|
+
cancellationMarkers: [],
|
|
175
|
+
steps: [
|
|
176
|
+
{
|
|
177
|
+
kind: "open",
|
|
178
|
+
url: withFixtureOverride("/services/phone-only", "https://example.com/account/subscription"),
|
|
179
|
+
},
|
|
180
|
+
{ kind: "wait_text", text: "Call us to cancel" },
|
|
181
|
+
],
|
|
182
|
+
companionSelectors: {},
|
|
183
|
+
},
|
|
184
|
+
];
|
|
185
|
+
function normalizeName(value) {
|
|
186
|
+
return value.trim().toLowerCase().replace(/[^a-z0-9]+/g, " ").trim();
|
|
187
|
+
}
|
|
188
|
+
export function listLifeOpsSubscriptionPlaybooks() {
|
|
189
|
+
return LIFEOPS_SUBSCRIPTION_PLAYBOOKS;
|
|
190
|
+
}
|
|
191
|
+
export function findLifeOpsSubscriptionPlaybook(serviceNameOrSlug) {
|
|
192
|
+
if (!serviceNameOrSlug) {
|
|
193
|
+
return null;
|
|
194
|
+
}
|
|
195
|
+
const normalized = normalizeName(serviceNameOrSlug);
|
|
196
|
+
for (const playbook of LIFEOPS_SUBSCRIPTION_PLAYBOOKS) {
|
|
197
|
+
if (normalizeName(playbook.key) === normalized) {
|
|
198
|
+
return playbook;
|
|
199
|
+
}
|
|
200
|
+
if (normalizeName(playbook.serviceName) === normalized) {
|
|
201
|
+
return playbook;
|
|
202
|
+
}
|
|
203
|
+
if (playbook.aliases.some((alias) => normalizeName(alias) === normalized)) {
|
|
204
|
+
return playbook;
|
|
205
|
+
}
|
|
206
|
+
if (normalized.includes(normalizeName(playbook.key)) ||
|
|
207
|
+
normalized.includes(normalizeName(playbook.serviceName)) ||
|
|
208
|
+
playbook.aliases.some((alias) => normalized.includes(normalizeName(alias)))) {
|
|
209
|
+
return playbook;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
return null;
|
|
213
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
export type LifeOpsSubscriptionAuditStatus = "completed" | "failed";
|
|
2
|
+
export type LifeOpsSubscriptionSource = "gmail" | "manual";
|
|
3
|
+
export type LifeOpsSubscriptionState = "active" | "canceled" | "uncertain";
|
|
4
|
+
export type LifeOpsSubscriptionCadence = "monthly" | "annual" | "unknown";
|
|
5
|
+
export type LifeOpsSubscriptionExecutor = "user_browser" | "agent_browser" | "desktop_native";
|
|
6
|
+
export type LifeOpsSubscriptionCancellationStatus = "draft" | "awaiting_confirmation" | "running" | "completed" | "already_canceled" | "needs_login" | "needs_mfa" | "needs_user_choice" | "retention_offer" | "phone_only" | "chat_only" | "unsupported_surface" | "blocked" | "failed";
|
|
7
|
+
export interface LifeOpsSubscriptionAudit {
|
|
8
|
+
id: string;
|
|
9
|
+
agentId: string;
|
|
10
|
+
source: LifeOpsSubscriptionSource;
|
|
11
|
+
queryWindowDays: number;
|
|
12
|
+
status: LifeOpsSubscriptionAuditStatus;
|
|
13
|
+
totalCandidates: number;
|
|
14
|
+
activeCandidates: number;
|
|
15
|
+
canceledCandidates: number;
|
|
16
|
+
uncertainCandidates: number;
|
|
17
|
+
summary: string;
|
|
18
|
+
metadata: Record<string, unknown>;
|
|
19
|
+
createdAt: string;
|
|
20
|
+
updatedAt: string;
|
|
21
|
+
}
|
|
22
|
+
export interface LifeOpsSubscriptionCandidate {
|
|
23
|
+
id: string;
|
|
24
|
+
agentId: string;
|
|
25
|
+
auditId: string;
|
|
26
|
+
serviceSlug: string;
|
|
27
|
+
serviceName: string;
|
|
28
|
+
provider: string;
|
|
29
|
+
cadence: LifeOpsSubscriptionCadence;
|
|
30
|
+
state: LifeOpsSubscriptionState;
|
|
31
|
+
confidence: number;
|
|
32
|
+
annualCostEstimateUsd: number | null;
|
|
33
|
+
managementUrl: string | null;
|
|
34
|
+
latestEvidenceAt: string | null;
|
|
35
|
+
evidenceJson: Array<Record<string, unknown>>;
|
|
36
|
+
metadata: Record<string, unknown>;
|
|
37
|
+
createdAt: string;
|
|
38
|
+
updatedAt: string;
|
|
39
|
+
}
|
|
40
|
+
export interface LifeOpsSubscriptionCancellation {
|
|
41
|
+
id: string;
|
|
42
|
+
agentId: string;
|
|
43
|
+
auditId: string | null;
|
|
44
|
+
candidateId: string | null;
|
|
45
|
+
serviceSlug: string;
|
|
46
|
+
serviceName: string;
|
|
47
|
+
executor: LifeOpsSubscriptionExecutor;
|
|
48
|
+
status: LifeOpsSubscriptionCancellationStatus;
|
|
49
|
+
confirmed: boolean;
|
|
50
|
+
currentStep: string | null;
|
|
51
|
+
browserSessionId: string | null;
|
|
52
|
+
evidenceSummary: string | null;
|
|
53
|
+
artifactCount: number;
|
|
54
|
+
managementUrl: string | null;
|
|
55
|
+
error: string | null;
|
|
56
|
+
metadata: Record<string, unknown>;
|
|
57
|
+
createdAt: string;
|
|
58
|
+
updatedAt: string;
|
|
59
|
+
finishedAt: string | null;
|
|
60
|
+
}
|
|
61
|
+
export interface LifeOpsSubscriptionAuditSummary {
|
|
62
|
+
audit: LifeOpsSubscriptionAudit;
|
|
63
|
+
candidates: LifeOpsSubscriptionCandidate[];
|
|
64
|
+
}
|
|
65
|
+
export interface LifeOpsSubscriptionCancellationSummary {
|
|
66
|
+
cancellation: LifeOpsSubscriptionCancellation;
|
|
67
|
+
candidate: LifeOpsSubscriptionCandidate | null;
|
|
68
|
+
}
|
|
69
|
+
export interface LifeOpsSubscriptionDiscoveryRequest {
|
|
70
|
+
queryWindowDays?: number;
|
|
71
|
+
serviceQuery?: string | null;
|
|
72
|
+
}
|
|
73
|
+
export interface LifeOpsSubscriptionCancellationRequest {
|
|
74
|
+
candidateId?: string | null;
|
|
75
|
+
serviceName?: string | null;
|
|
76
|
+
serviceSlug?: string | null;
|
|
77
|
+
executor?: LifeOpsSubscriptionExecutor | null;
|
|
78
|
+
confirmed?: boolean;
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=subscriptions-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subscriptions-types.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/lifeops/subscriptions-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"twilio.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/lifeops/twilio.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+GAA+G;IAC/G,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAUD,wBAAgB,4BAA4B,CAC1C,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,iBAAiB,GAAG,IAAI,CAY1B;
|
|
1
|
+
{"version":3,"file":"twilio.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/lifeops/twilio.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+GAA+G;IAC/G,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAUD,wBAAgB,4BAA4B,CAC1C,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,iBAAiB,GAAG,IAAI,CAY1B;AAwID,wBAAsB,aAAa,CAAC,IAAI,EAAE;IACxC,WAAW,EAAE,iBAAiB,CAAC;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAWhC;AAYD,wBAAsB,mBAAmB,CAAC,IAAI,EAAE;IAC9C,WAAW,EAAE,iBAAiB,CAAC;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAWhC"}
|
|
@@ -19,7 +19,9 @@ export function readTwilioCredentialsFromEnv(env = process.env) {
|
|
|
19
19
|
fromPhoneNumber,
|
|
20
20
|
};
|
|
21
21
|
}
|
|
22
|
-
|
|
22
|
+
function getTwilioBaseUrl() {
|
|
23
|
+
return process.env.MILADY_MOCK_TWILIO_BASE ?? "https://api.twilio.com";
|
|
24
|
+
}
|
|
23
25
|
/** Maximum number of retries for transient (5xx / network) failures. */
|
|
24
26
|
const MAX_RETRIES = 2;
|
|
25
27
|
/** Base delay in ms for exponential backoff between retries. */
|
|
@@ -35,7 +37,7 @@ function isTransientFailure(result) {
|
|
|
35
37
|
}
|
|
36
38
|
async function sendTwilioRequest(args) {
|
|
37
39
|
const { credentials, path, payload } = args;
|
|
38
|
-
const url = `${
|
|
40
|
+
const url = `${getTwilioBaseUrl()}/2010-04-01/Accounts/${encodeURIComponent(credentials.accountSid)}${path}`;
|
|
39
41
|
const operation = twilioOperation(path);
|
|
40
42
|
let lastResult = null;
|
|
41
43
|
for (let attempt = 0; attempt <= MAX_RETRIES; attempt++) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"whatsapp-client.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/lifeops/whatsapp-client.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,GAAG,SAAS,CAAC;IAC1D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,qBAAa,aAAc,SAAQ,KAAK;aAGpB,MAAM,EAAE,MAAM;aACd,IAAI,CAAC,EAAE,OAAO;gBAF9B,OAAO,EAAE,MAAM,EACC,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,OAAO;CAKjC;
|
|
1
|
+
{"version":3,"file":"whatsapp-client.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/lifeops/whatsapp-client.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,GAAG,SAAS,CAAC;IAC1D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,qBAAa,aAAc,SAAQ,KAAK;aAGpB,MAAM,EAAE,MAAM;aACd,IAAI,CAAC,EAAE,OAAO;gBAF9B,OAAO,EAAE,MAAM,EACC,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,OAAO;CAKjC;AAOD,wBAAgB,8BAA8B,CAC5C,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,mBAAmB,GAAG,IAAI,CAY5B;AAED,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,mBAAmB,EAC1B,GAAG,EAAE,mBAAmB,GACvB,OAAO,CAAC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAqD1C;AA0CD;;;;GAIG;AACH,wBAAgB,qCAAqC,CACnD,OAAO,EAAE,OAAO,GACf,eAAe,EAAE,CAMnB;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,IAAI,eAAe,EAAE,CAI9D;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,IAAI,eAAe,EAAE,CAE7D;AAED,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,OAAO,GAAG,eAAe,EAAE,CA0EhF"}
|
|
@@ -10,7 +10,9 @@ export class WhatsAppError extends Error {
|
|
|
10
10
|
}
|
|
11
11
|
}
|
|
12
12
|
const DEFAULT_API_VERSION = "v21.0";
|
|
13
|
-
|
|
13
|
+
function getWhatsAppBaseUrl() {
|
|
14
|
+
return process.env.MILADY_MOCK_WHATSAPP_BASE ?? "https://graph.facebook.com";
|
|
15
|
+
}
|
|
14
16
|
export function readWhatsAppCredentialsFromEnv(env = process.env) {
|
|
15
17
|
const accessToken = env.ELIZA_WHATSAPP_ACCESS_TOKEN?.trim();
|
|
16
18
|
const phoneNumberId = env.ELIZA_WHATSAPP_PHONE_NUMBER_ID?.trim();
|
|
@@ -26,7 +28,7 @@ export function readWhatsAppCredentialsFromEnv(env = process.env) {
|
|
|
26
28
|
}
|
|
27
29
|
export async function sendWhatsAppMessage(creds, req) {
|
|
28
30
|
const apiVersion = creds.apiVersion ?? DEFAULT_API_VERSION;
|
|
29
|
-
const url = `${
|
|
31
|
+
const url = `${getWhatsAppBaseUrl()}/${apiVersion}/${encodeURIComponent(creds.phoneNumberId)}/messages`;
|
|
30
32
|
const payload = {
|
|
31
33
|
messaging_product: "whatsapp",
|
|
32
34
|
to: req.to,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"x-poster.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/lifeops/x-poster.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,SAAS,GAAG,MAAM,GAAG,YAAY,GAAG,SAAS,GAAG,SAAS,CAAC;CACrE;
|
|
1
|
+
{"version":3,"file":"x-poster.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/lifeops/x-poster.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,SAAS,GAAG,MAAM,GAAG,YAAY,GAAG,SAAS,GAAG,SAAS,CAAC;CACrE;AAmFD,wBAAgB,6BAA6B,CAC3C,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,kBAAkB,GAAG,IAAI,CAgB3B;AAED,wBAAsB,OAAO,CAAC,IAAI,EAAE;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,kBAAkB,CAAC;CACjC,GAAG,OAAO,CAAC,WAAW,CAAC,CA+FvB;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,SAAS,GAAG,MAAM,GAAG,YAAY,GAAG,SAAS,GAAG,SAAS,CAAC;CACrE;AAMD;;;;;;;;GAQG;AACH,wBAAsB,OAAO,CAAC,IAAI,EAAE;IAClC,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,kBAAkB,CAAC;CACjC,GAAG,OAAO,CAAC,SAAS,CAAC,CAgErB"}
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
import crypto from "node:crypto";
|
|
2
2
|
import { logger } from "@elizaos/core";
|
|
3
3
|
import { createIntegrationTelemetrySpan } from "@elizaos/agent/diagnostics/integration-observability";
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
function getXBaseUrl() {
|
|
5
|
+
return process.env.MILADY_MOCK_X_BASE ?? "https://api.twitter.com";
|
|
6
|
+
}
|
|
7
|
+
function getXPostUrl() {
|
|
8
|
+
return `${getXBaseUrl()}/2/tweets`;
|
|
9
|
+
}
|
|
6
10
|
function percentEncode(value) {
|
|
7
11
|
return encodeURIComponent(value).replace(/[!'()*]/g, (char) => `%${char.charCodeAt(0).toString(16).toUpperCase()}`);
|
|
8
12
|
}
|
|
@@ -76,13 +80,13 @@ export async function postToX(args) {
|
|
|
76
80
|
const timestamp = String(Math.floor(Date.now() / 1000));
|
|
77
81
|
const authorization = buildOAuth1AuthorizationHeader({
|
|
78
82
|
method: "POST",
|
|
79
|
-
url:
|
|
83
|
+
url: getXPostUrl(),
|
|
80
84
|
credentials,
|
|
81
85
|
nonce,
|
|
82
86
|
timestamp,
|
|
83
87
|
});
|
|
84
88
|
try {
|
|
85
|
-
const response = await fetch(
|
|
89
|
+
const response = await fetch(getXPostUrl(), {
|
|
86
90
|
method: "POST",
|
|
87
91
|
headers: {
|
|
88
92
|
Authorization: authorization,
|
|
@@ -147,7 +151,9 @@ export async function postToX(args) {
|
|
|
147
151
|
};
|
|
148
152
|
}
|
|
149
153
|
}
|
|
150
|
-
|
|
154
|
+
function getXDmUrl(participantId) {
|
|
155
|
+
return `${getXBaseUrl()}/2/dm_conversations/with/${encodeURIComponent(participantId)}/messages`;
|
|
156
|
+
}
|
|
151
157
|
/**
|
|
152
158
|
* Send a Direct Message on X (Twitter) via the v2 DM API.
|
|
153
159
|
*
|
|
@@ -159,7 +165,7 @@ const X_DM_URL_TEMPLATE = `${X_BASE_URL}/2/dm_conversations/with/{participantId}
|
|
|
159
165
|
*/
|
|
160
166
|
export async function sendXDm(args) {
|
|
161
167
|
const { participantId, text, credentials } = args;
|
|
162
|
-
const url =
|
|
168
|
+
const url = getXDmUrl(participantId);
|
|
163
169
|
const nonce = crypto.randomBytes(16).toString("hex");
|
|
164
170
|
const timestamp = String(Math.floor(Date.now() / 1000));
|
|
165
171
|
const authorization = buildOAuth1AuthorizationHeader({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"x-reader.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/lifeops/x-reader.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"x-reader.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/lifeops/x-reader.ts"],"names":[],"mappings":"AAOA;;;;;GAKG;AACH,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAiB,SAAQ,gBAAgB;IACxD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,SAAS,GAAG,eAAe,GAAG,UAAU,GAAG,QAAQ,CAAC;AAEhE,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,SAAS,CAAC,CAAC;IAC1B,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,qBAAa,UAAW,SAAQ,KAAK;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,GAAG,YAAY,GAAG,SAAS,GAAG,SAAS,CAAC;IAC/E,QAAQ,CAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;gBAGxC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;QACP,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QACtB,QAAQ,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC;QACjC,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KACnC;CAQJ;AAyOD;;;GAGG;AACH,wBAAsB,QAAQ,CAC5B,WAAW,EAAE,kBAAkB,EAC/B,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CA6B5B;AAED;;GAEG;AACH,wBAAsB,SAAS,CAC7B,WAAW,EAAE,kBAAkB,EAC/B,QAAQ,EAAE,SAAS,EACnB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAsDlC;AAED;;GAEG;AACH,wBAAgB,OAAO,CACrB,WAAW,EAAE,kBAAkB,EAC/B,KAAK,EAAE,MAAM,EACb,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAO,GAChD,OAAO,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAElC"}
|