@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
|
@@ -54,13 +54,15 @@ function tabIdFromGrant(grant) {
|
|
|
54
54
|
function sessionIdFromGrant(grant) {
|
|
55
55
|
if (!grant)
|
|
56
56
|
return null;
|
|
57
|
-
const raw = grant.metadata
|
|
57
|
+
const raw = grant.metadata
|
|
58
|
+
?.sessionId;
|
|
58
59
|
return typeof raw === "string" && raw.length > 0 ? raw : null;
|
|
59
60
|
}
|
|
60
61
|
function companionIdFromGrant(grant) {
|
|
61
62
|
if (!grant)
|
|
62
63
|
return null;
|
|
63
|
-
const raw = grant.metadata
|
|
64
|
+
const raw = grant.metadata
|
|
65
|
+
?.companionId;
|
|
64
66
|
return typeof raw === "string" && raw.length > 0 ? raw : null;
|
|
65
67
|
}
|
|
66
68
|
function companionKey(args) {
|
|
@@ -79,10 +81,14 @@ function sortCompanionsByRecency(companions) {
|
|
|
79
81
|
return [...companions].sort((left, right) => {
|
|
80
82
|
const leftMs = Date.parse(left.lastSeenAt ?? "");
|
|
81
83
|
const rightMs = Date.parse(right.lastSeenAt ?? "");
|
|
82
|
-
if (Number.isFinite(leftMs) &&
|
|
84
|
+
if (Number.isFinite(leftMs) &&
|
|
85
|
+
Number.isFinite(rightMs) &&
|
|
86
|
+
leftMs !== rightMs) {
|
|
83
87
|
return rightMs - leftMs;
|
|
84
88
|
}
|
|
85
|
-
if (left.lastSeenAt &&
|
|
89
|
+
if (left.lastSeenAt &&
|
|
90
|
+
right.lastSeenAt &&
|
|
91
|
+
left.lastSeenAt !== right.lastSeenAt) {
|
|
86
92
|
return right.lastSeenAt.localeCompare(left.lastSeenAt);
|
|
87
93
|
}
|
|
88
94
|
return left.id.localeCompare(right.id);
|
|
@@ -100,7 +106,9 @@ function pickNewestDiscordTab(tabs) {
|
|
|
100
106
|
}
|
|
101
107
|
const leftMs = Date.parse(left.lastFocusedAt ?? left.lastSeenAt);
|
|
102
108
|
const rightMs = Date.parse(right.lastFocusedAt ?? right.lastSeenAt);
|
|
103
|
-
if (Number.isFinite(leftMs) &&
|
|
109
|
+
if (Number.isFinite(leftMs) &&
|
|
110
|
+
Number.isFinite(rightMs) &&
|
|
111
|
+
leftMs !== rightMs) {
|
|
104
112
|
return rightMs - leftMs;
|
|
105
113
|
}
|
|
106
114
|
return right.lastSeenAt.localeCompare(left.lastSeenAt);
|
|
@@ -112,8 +120,7 @@ function parseSessionProbe(session) {
|
|
|
112
120
|
const result = asRecord(session.result);
|
|
113
121
|
if (!result)
|
|
114
122
|
return null;
|
|
115
|
-
const actionResults = asRecord(result.actionResults) ??
|
|
116
|
-
result;
|
|
123
|
+
const actionResults = asRecord(result.actionResults) ?? result;
|
|
117
124
|
let pageUrl = null;
|
|
118
125
|
let pageTitle = null;
|
|
119
126
|
let mainText = null;
|
|
@@ -137,7 +144,9 @@ function parseSessionProbe(session) {
|
|
|
137
144
|
}
|
|
138
145
|
else if (action.kind === "read_page") {
|
|
139
146
|
pageUrl =
|
|
140
|
-
typeof entry.url === "string" && entry.url.length > 0
|
|
147
|
+
typeof entry.url === "string" && entry.url.length > 0
|
|
148
|
+
? entry.url
|
|
149
|
+
: pageUrl;
|
|
141
150
|
pageTitle =
|
|
142
151
|
typeof entry.title === "string" && entry.title.length > 0
|
|
143
152
|
? entry.title
|
|
@@ -176,7 +185,133 @@ function sessionError(session) {
|
|
|
176
185
|
return null;
|
|
177
186
|
const result = asRecord(session.result);
|
|
178
187
|
const error = result?.error;
|
|
179
|
-
return typeof error === "string" && error.trim().length > 0
|
|
188
|
+
return typeof error === "string" && error.trim().length > 0
|
|
189
|
+
? error.trim()
|
|
190
|
+
: null;
|
|
191
|
+
}
|
|
192
|
+
function siteAccessAllowsDiscord(companion, hasDiscordPage) {
|
|
193
|
+
if (!companion) {
|
|
194
|
+
return null;
|
|
195
|
+
}
|
|
196
|
+
if (hasDiscordPage) {
|
|
197
|
+
return true;
|
|
198
|
+
}
|
|
199
|
+
if (companion.permissions.allOrigins) {
|
|
200
|
+
return true;
|
|
201
|
+
}
|
|
202
|
+
return companion.permissions.grantedOrigins.some((origin) => origin.includes("discord.com"));
|
|
203
|
+
}
|
|
204
|
+
function browserAuthStateFromProbe(probe) {
|
|
205
|
+
if (probe?.loggedIn === true) {
|
|
206
|
+
return "logged_in";
|
|
207
|
+
}
|
|
208
|
+
if (probe?.loggedIn === false &&
|
|
209
|
+
Boolean(probe.url?.includes("discord.com"))) {
|
|
210
|
+
return "logged_out";
|
|
211
|
+
}
|
|
212
|
+
return "unknown";
|
|
213
|
+
}
|
|
214
|
+
function browserTabState(args) {
|
|
215
|
+
if (args.probe?.dmInbox.visible) {
|
|
216
|
+
return "dm_inbox_visible";
|
|
217
|
+
}
|
|
218
|
+
if (args.probe?.url?.includes("discord.com")) {
|
|
219
|
+
return "discord_open";
|
|
220
|
+
}
|
|
221
|
+
if (args.hasDiscordTab) {
|
|
222
|
+
return "background_discord";
|
|
223
|
+
}
|
|
224
|
+
return "missing";
|
|
225
|
+
}
|
|
226
|
+
function lifeOpsBrowserAccessStatus(args) {
|
|
227
|
+
const authState = browserAuthStateFromProbe(args.probe);
|
|
228
|
+
const tabState = browserTabState({
|
|
229
|
+
probe: args.probe,
|
|
230
|
+
hasDiscordTab: args.hasDiscordTab,
|
|
231
|
+
});
|
|
232
|
+
let nextAction = "none";
|
|
233
|
+
if (!args.settingsEnabled || !args.trackingEnabled || args.paused) {
|
|
234
|
+
nextAction = "enable_browser_access";
|
|
235
|
+
}
|
|
236
|
+
else if (!args.hasAnyCompanion) {
|
|
237
|
+
nextAction = "connect_browser";
|
|
238
|
+
}
|
|
239
|
+
else if (!args.hasConnectedCompanion) {
|
|
240
|
+
nextAction = "open_extension_popup";
|
|
241
|
+
}
|
|
242
|
+
else if (authState === "logged_out") {
|
|
243
|
+
nextAction = "log_in";
|
|
244
|
+
}
|
|
245
|
+
else if (!args.canControl && tabState === "missing") {
|
|
246
|
+
nextAction = "enable_browser_control";
|
|
247
|
+
}
|
|
248
|
+
else if (!args.canControl && tabState !== "dm_inbox_visible") {
|
|
249
|
+
nextAction = "focus_dm_inbox_manually";
|
|
250
|
+
}
|
|
251
|
+
else if (tabState === "missing") {
|
|
252
|
+
nextAction = "open_discord";
|
|
253
|
+
}
|
|
254
|
+
else if (authState === "logged_in" && tabState !== "dm_inbox_visible") {
|
|
255
|
+
nextAction = "open_dm_inbox";
|
|
256
|
+
}
|
|
257
|
+
if (args.siteAccessOk === false && nextAction === "none") {
|
|
258
|
+
nextAction = "open_discord";
|
|
259
|
+
}
|
|
260
|
+
return {
|
|
261
|
+
source: "lifeops_browser",
|
|
262
|
+
active: args.active,
|
|
263
|
+
available: args.settingsEnabled &&
|
|
264
|
+
args.trackingEnabled &&
|
|
265
|
+
!args.paused &&
|
|
266
|
+
args.hasConnectedCompanion,
|
|
267
|
+
browser: args.companion?.browser ?? null,
|
|
268
|
+
profileId: args.companion?.profileId ?? null,
|
|
269
|
+
profileLabel: args.companion?.profileLabel ?? null,
|
|
270
|
+
companionId: args.companion?.id ?? null,
|
|
271
|
+
companionLabel: args.companion?.label ?? null,
|
|
272
|
+
canControl: args.canControl,
|
|
273
|
+
siteAccessOk: args.siteAccessOk,
|
|
274
|
+
currentUrl: args.probe?.url ?? null,
|
|
275
|
+
tabState,
|
|
276
|
+
authState,
|
|
277
|
+
nextAction,
|
|
278
|
+
};
|
|
279
|
+
}
|
|
280
|
+
function desktopBrowserAccessStatus(args) {
|
|
281
|
+
const authState = browserAuthStateFromProbe(args.probe);
|
|
282
|
+
const tabState = browserTabState({
|
|
283
|
+
probe: args.probe,
|
|
284
|
+
hasDiscordTab: args.hasTab,
|
|
285
|
+
});
|
|
286
|
+
let nextAction = "none";
|
|
287
|
+
if (!args.available) {
|
|
288
|
+
nextAction = "open_desktop_browser";
|
|
289
|
+
}
|
|
290
|
+
else if (authState === "logged_out") {
|
|
291
|
+
nextAction = "log_in";
|
|
292
|
+
}
|
|
293
|
+
else if (tabState === "missing") {
|
|
294
|
+
nextAction = "open_discord";
|
|
295
|
+
}
|
|
296
|
+
else if (authState === "logged_in" && tabState !== "dm_inbox_visible") {
|
|
297
|
+
nextAction = "open_dm_inbox";
|
|
298
|
+
}
|
|
299
|
+
return {
|
|
300
|
+
source: "desktop_browser",
|
|
301
|
+
active: args.active,
|
|
302
|
+
available: args.available,
|
|
303
|
+
browser: null,
|
|
304
|
+
profileId: null,
|
|
305
|
+
profileLabel: null,
|
|
306
|
+
companionId: null,
|
|
307
|
+
companionLabel: null,
|
|
308
|
+
canControl: args.available,
|
|
309
|
+
siteAccessOk: args.available ? true : null,
|
|
310
|
+
currentUrl: args.probe?.url ?? null,
|
|
311
|
+
tabState,
|
|
312
|
+
authState,
|
|
313
|
+
nextAction,
|
|
314
|
+
};
|
|
180
315
|
}
|
|
181
316
|
/** @internal */
|
|
182
317
|
export function withDiscord(Base) {
|
|
@@ -204,17 +339,18 @@ export function withDiscord(Base) {
|
|
|
204
339
|
}
|
|
205
340
|
async lifeOpsDiscordGetOwnerBrowserDiscordState(grant) {
|
|
206
341
|
const settings = await this.getBrowserSettings();
|
|
207
|
-
const
|
|
208
|
-
const
|
|
209
|
-
|
|
210
|
-
|
|
342
|
+
const allCompanions = sortCompanionsByRecency(await this.listBrowserCompanions());
|
|
343
|
+
const connectedCompanions = allCompanions.filter((companion) => companion.connectionState === "connected");
|
|
344
|
+
const paused = this.isBrowserPaused(settings);
|
|
345
|
+
const trackingEnabled = settings.trackingMode !== "off";
|
|
346
|
+
const settingsEnabled = settings.enabled;
|
|
347
|
+
const available = settingsEnabled &&
|
|
348
|
+
trackingEnabled &&
|
|
349
|
+
!paused &&
|
|
211
350
|
connectedCompanions.length > 0;
|
|
212
|
-
if (!available) {
|
|
213
|
-
return null;
|
|
214
|
-
}
|
|
215
351
|
const tabs = await this.listBrowserTabs();
|
|
216
352
|
const currentPage = await this.getCurrentBrowserPage();
|
|
217
|
-
const currentPageProbe = currentPage
|
|
353
|
+
const currentPageProbe = currentPage?.url.includes("discord.com")
|
|
218
354
|
? probeDiscordCapturedPage(currentPage)
|
|
219
355
|
: null;
|
|
220
356
|
const discordTab = pickNewestDiscordTab(tabs);
|
|
@@ -240,9 +376,13 @@ export function withDiscord(Base) {
|
|
|
240
376
|
profileId: discordTab.profileId,
|
|
241
377
|
}))) ??
|
|
242
378
|
(companionIdFromGrant(grant)
|
|
243
|
-
? connectedCompanions.find((companion) => companion.id === companionIdFromGrant(grant)) ?? null
|
|
379
|
+
? (connectedCompanions.find((companion) => companion.id === companionIdFromGrant(grant)) ?? null)
|
|
244
380
|
: null) ??
|
|
245
381
|
connectedCompanions[0] ??
|
|
382
|
+
(companionIdFromGrant(grant)
|
|
383
|
+
? (allCompanions.find((companion) => companion.id === companionIdFromGrant(grant)) ?? null)
|
|
384
|
+
: null) ??
|
|
385
|
+
allCompanions[0] ??
|
|
246
386
|
null;
|
|
247
387
|
const reason = browserReasonFor({
|
|
248
388
|
available,
|
|
@@ -257,9 +397,15 @@ export function withDiscord(Base) {
|
|
|
257
397
|
});
|
|
258
398
|
return {
|
|
259
399
|
available,
|
|
400
|
+
settingsEnabled,
|
|
401
|
+
trackingEnabled,
|
|
402
|
+
paused,
|
|
260
403
|
canControl: settings.allowBrowserControl,
|
|
261
404
|
selectedCompanion,
|
|
405
|
+
hasAnyCompanion: allCompanions.length > 0,
|
|
406
|
+
hasConnectedCompanion: connectedCompanions.length > 0,
|
|
262
407
|
discordTab,
|
|
408
|
+
currentPageUrl: currentPage?.url ?? null,
|
|
263
409
|
probe,
|
|
264
410
|
session,
|
|
265
411
|
lastError: sessionError(session),
|
|
@@ -271,6 +417,14 @@ export function withDiscord(Base) {
|
|
|
271
417
|
const tabId = tabIdFromGrant(grant);
|
|
272
418
|
const probe = available ? await this.lifeOpsDiscordProbeTab(tabId) : null;
|
|
273
419
|
const loggedIn = probe?.loggedIn === true;
|
|
420
|
+
const browserAccess = [
|
|
421
|
+
desktopBrowserAccessStatus({
|
|
422
|
+
active: available,
|
|
423
|
+
available,
|
|
424
|
+
probe,
|
|
425
|
+
hasTab: Boolean(tabId),
|
|
426
|
+
}),
|
|
427
|
+
];
|
|
274
428
|
const capabilities = loggedIn || probe?.dmInbox.visible
|
|
275
429
|
? capabilitiesForSide(LIFEOPS_DISCORD_CAPABILITIES, normalizedSide)
|
|
276
430
|
: (grant?.capabilities ?? []).filter((candidate) => candidate === "discord.read" || candidate === "discord.send");
|
|
@@ -290,6 +444,7 @@ export function withDiscord(Base) {
|
|
|
290
444
|
grantedCapabilities: capabilities,
|
|
291
445
|
lastError: null,
|
|
292
446
|
tabId,
|
|
447
|
+
browserAccess,
|
|
293
448
|
grant,
|
|
294
449
|
};
|
|
295
450
|
}
|
|
@@ -298,9 +453,37 @@ export function withDiscord(Base) {
|
|
|
298
453
|
const grant = await this.repository.getConnectorGrant(this.agentId(), "discord", "local", normalizedSide);
|
|
299
454
|
if (normalizedSide === "owner") {
|
|
300
455
|
const browserState = await this.lifeOpsDiscordGetOwnerBrowserDiscordState(grant);
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
456
|
+
const workspaceAvailable = discordBrowserWorkspaceAvailable();
|
|
457
|
+
const workspaceTabId = tabIdFromGrant(grant);
|
|
458
|
+
const workspaceProbe = workspaceAvailable
|
|
459
|
+
? await this.lifeOpsDiscordProbeTab(workspaceTabId)
|
|
460
|
+
: null;
|
|
461
|
+
const probe = browserState.probe;
|
|
462
|
+
const connected = probe?.loggedIn === true;
|
|
463
|
+
const onDiscordPage = Boolean(browserState.currentPageUrl?.includes("discord.com")) ||
|
|
464
|
+
Boolean(browserState.discordTab);
|
|
465
|
+
const browserAccess = [
|
|
466
|
+
lifeOpsBrowserAccessStatus({
|
|
467
|
+
active: browserState.available,
|
|
468
|
+
settingsEnabled: browserState.settingsEnabled,
|
|
469
|
+
trackingEnabled: browserState.trackingEnabled,
|
|
470
|
+
paused: browserState.paused,
|
|
471
|
+
canControl: browserState.canControl,
|
|
472
|
+
companion: browserState.selectedCompanion,
|
|
473
|
+
hasAnyCompanion: browserState.hasAnyCompanion,
|
|
474
|
+
hasConnectedCompanion: browserState.hasConnectedCompanion,
|
|
475
|
+
probe,
|
|
476
|
+
hasDiscordTab: onDiscordPage,
|
|
477
|
+
siteAccessOk: siteAccessAllowsDiscord(browserState.selectedCompanion, onDiscordPage || Boolean(browserState.discordTab)),
|
|
478
|
+
}),
|
|
479
|
+
desktopBrowserAccessStatus({
|
|
480
|
+
active: !browserState.available && workspaceAvailable,
|
|
481
|
+
available: workspaceAvailable,
|
|
482
|
+
probe: workspaceProbe,
|
|
483
|
+
hasTab: Boolean(workspaceTabId),
|
|
484
|
+
}),
|
|
485
|
+
];
|
|
486
|
+
if (browserState.available) {
|
|
304
487
|
return {
|
|
305
488
|
provider: "discord",
|
|
306
489
|
side: normalizedSide,
|
|
@@ -314,9 +497,15 @@ export function withDiscord(Base) {
|
|
|
314
497
|
: [],
|
|
315
498
|
lastError: browserState.lastError,
|
|
316
499
|
tabId: tabIdFromGrant(grant),
|
|
500
|
+
browserAccess,
|
|
317
501
|
grant,
|
|
318
502
|
};
|
|
319
503
|
}
|
|
504
|
+
const workspaceStatus = await this.lifeOpsDiscordBuildWorkspaceStatus(normalizedSide, grant);
|
|
505
|
+
return {
|
|
506
|
+
...workspaceStatus,
|
|
507
|
+
browserAccess,
|
|
508
|
+
};
|
|
320
509
|
}
|
|
321
510
|
return this.lifeOpsDiscordBuildWorkspaceStatus(normalizedSide, grant);
|
|
322
511
|
}
|
|
@@ -330,16 +519,22 @@ export function withDiscord(Base) {
|
|
|
330
519
|
const existing = await this.repository.getConnectorGrant(this.agentId(), "discord", "local", normalizedSide);
|
|
331
520
|
if (normalizedSide === "owner") {
|
|
332
521
|
const browserState = await this.lifeOpsDiscordGetOwnerBrowserDiscordState(existing);
|
|
333
|
-
|
|
522
|
+
const hasConnectedBrowserPath = browserState.hasConnectedCompanion ||
|
|
523
|
+
Boolean(browserState.currentPageUrl?.includes("discord.com")) ||
|
|
524
|
+
Boolean(browserState.discordTab) ||
|
|
525
|
+
Boolean(browserState.probe);
|
|
526
|
+
if (hasConnectedBrowserPath) {
|
|
334
527
|
const probe = browserState.probe;
|
|
335
528
|
const connected = probe?.loggedIn === true;
|
|
336
529
|
const dmInboxVisible = probe?.dmInbox.visible === true;
|
|
337
530
|
const identity = identityFromProbe(probe, existing?.identity ?? null) ?? {};
|
|
338
|
-
const onDiscordPage = Boolean(probe?.url
|
|
339
|
-
const onDiscordDmPage = Boolean(probe?.url
|
|
531
|
+
const onDiscordPage = Boolean(probe?.url?.includes("discord.com"));
|
|
532
|
+
const onDiscordDmPage = Boolean(probe?.url?.includes("/channels/@me"));
|
|
340
533
|
const needsDiscordOpen = !connected && !onDiscordPage;
|
|
341
534
|
const needsDmInspection = connected && !dmInboxVisible;
|
|
342
|
-
if (!browserState.canControl &&
|
|
535
|
+
if (!browserState.canControl &&
|
|
536
|
+
!browserState.discordTab &&
|
|
537
|
+
!onDiscordPage) {
|
|
343
538
|
fail(409, "LifeOps Browser can see your browser, but browser control is disabled. Enable browser control or open Discord manually, then try again.");
|
|
344
539
|
}
|
|
345
540
|
let sessionId = sessionIdFromGrant(existing);
|
|
@@ -487,7 +682,7 @@ export function withDiscord(Base) {
|
|
|
487
682
|
}
|
|
488
683
|
}
|
|
489
684
|
if (!discordBrowserWorkspaceAvailable()) {
|
|
490
|
-
fail(503, "Discord connector requires either
|
|
685
|
+
fail(503, "Discord connector requires either Your Browser connected through LifeOps Browser or Milady Desktop Browser.");
|
|
491
686
|
}
|
|
492
687
|
const { tabId } = await ensureDiscordTab({
|
|
493
688
|
agentId: this.agentId(),
|
|
@@ -581,22 +776,7 @@ export function withDiscord(Base) {
|
|
|
581
776
|
}
|
|
582
777
|
await this.repository.deleteConnectorGrant(this.agentId(), "discord", "local", normalizedSide);
|
|
583
778
|
await this.recordConnectorAudit(`discord:${normalizedSide}`, "discord browser connector disconnected", { side: normalizedSide }, {});
|
|
584
|
-
return
|
|
585
|
-
provider: "discord",
|
|
586
|
-
side: normalizedSide,
|
|
587
|
-
available: normalizedSide === "owner"
|
|
588
|
-
? Boolean(await this.lifeOpsDiscordGetOwnerBrowserDiscordState(null)) ||
|
|
589
|
-
discordBrowserWorkspaceAvailable()
|
|
590
|
-
: discordBrowserWorkspaceAvailable(),
|
|
591
|
-
connected: false,
|
|
592
|
-
reason: "disconnected",
|
|
593
|
-
identity: null,
|
|
594
|
-
dmInbox: emptyDiscordDmInboxProbe(),
|
|
595
|
-
grantedCapabilities: [],
|
|
596
|
-
lastError: null,
|
|
597
|
-
tabId: null,
|
|
598
|
-
grant: null,
|
|
599
|
-
};
|
|
779
|
+
return this.getDiscordConnectorStatus(normalizedSide);
|
|
600
780
|
}
|
|
601
781
|
}
|
|
602
782
|
return LifeOpsDiscordServiceMixin;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-mixin-subscriptions.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/lifeops/service-mixin-subscriptions.ts"],"names":[],"mappings":""}
|