@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.
Files changed (240) hide show
  1. package/apps/app-lifeops/src/action.d.ts.map +1 -1
  2. package/apps/app-lifeops/src/action.js +21 -2
  3. package/apps/app-lifeops/src/actions/app-blocker.d.ts +3 -1
  4. package/apps/app-lifeops/src/actions/app-blocker.d.ts.map +1 -1
  5. package/apps/app-lifeops/src/actions/app-blocker.js +2 -0
  6. package/apps/app-lifeops/src/actions/calendar.d.ts.map +1 -1
  7. package/apps/app-lifeops/src/actions/calendar.js +140 -7
  8. package/apps/app-lifeops/src/actions/computer-use.d.ts.map +1 -1
  9. package/apps/app-lifeops/src/actions/computer-use.js +248 -17
  10. package/apps/app-lifeops/src/actions/cross-channel-send.d.ts +3 -1
  11. package/apps/app-lifeops/src/actions/cross-channel-send.d.ts.map +1 -1
  12. package/apps/app-lifeops/src/actions/cross-channel-send.js +1 -0
  13. package/apps/app-lifeops/src/actions/dossier.d.ts.map +1 -1
  14. package/apps/app-lifeops/src/actions/dossier.js +51 -34
  15. package/apps/app-lifeops/src/actions/gmail.d.ts.map +1 -1
  16. package/apps/app-lifeops/src/actions/gmail.js +5 -0
  17. package/apps/app-lifeops/src/actions/inbox.d.ts.map +1 -1
  18. package/apps/app-lifeops/src/actions/inbox.js +8 -1
  19. package/apps/app-lifeops/src/actions/life.d.ts.map +1 -1
  20. package/apps/app-lifeops/src/actions/life.extractor.d.ts.map +1 -1
  21. package/apps/app-lifeops/src/actions/life.extractor.js +103 -4
  22. package/apps/app-lifeops/src/actions/life.js +8 -0
  23. package/apps/app-lifeops/src/actions/non-actionable-request.d.ts +6 -0
  24. package/apps/app-lifeops/src/actions/non-actionable-request.d.ts.map +1 -0
  25. package/apps/app-lifeops/src/actions/non-actionable-request.js +33 -0
  26. package/apps/app-lifeops/src/actions/password-manager.d.ts.map +1 -1
  27. package/apps/app-lifeops/src/actions/password-manager.js +11 -2
  28. package/apps/app-lifeops/src/actions/relationships.d.ts +3 -1
  29. package/apps/app-lifeops/src/actions/relationships.d.ts.map +1 -1
  30. package/apps/app-lifeops/src/actions/relationships.js +167 -11
  31. package/apps/app-lifeops/src/actions/remote-desktop.js +1 -1
  32. package/apps/app-lifeops/src/actions/screen-time.d.ts.map +1 -1
  33. package/apps/app-lifeops/src/actions/screen-time.js +8 -2
  34. package/apps/app-lifeops/src/actions/start-remote-session.js +1 -1
  35. package/apps/app-lifeops/src/actions/subscriptions.d.ts +5 -0
  36. package/apps/app-lifeops/src/actions/subscriptions.d.ts.map +1 -0
  37. package/apps/app-lifeops/src/actions/subscriptions.js +251 -0
  38. package/apps/app-lifeops/src/actions/twilio-call.d.ts.map +1 -1
  39. package/apps/app-lifeops/src/actions/twilio-call.js +48 -3
  40. package/apps/app-lifeops/src/actions/update-owner-profile.d.ts.map +1 -1
  41. package/apps/app-lifeops/src/actions/update-owner-profile.js +2 -1
  42. package/apps/app-lifeops/src/actions/website-blocker.d.ts +6 -2
  43. package/apps/app-lifeops/src/actions/website-blocker.d.ts.map +1 -1
  44. package/apps/app-lifeops/src/actions/website-blocker.js +38 -0
  45. package/apps/app-lifeops/src/actions/x-read.d.ts.map +1 -1
  46. package/apps/app-lifeops/src/actions/x-read.js +27 -3
  47. package/apps/app-lifeops/src/dossier/action.d.ts.map +1 -1
  48. package/apps/app-lifeops/src/dossier/action.js +8 -7
  49. package/apps/app-lifeops/src/followup/actions/listOverdueFollowups.d.ts.map +1 -1
  50. package/apps/app-lifeops/src/followup/actions/listOverdueFollowups.js +1 -0
  51. package/apps/app-lifeops/src/followup/actions/markFollowupDone.d.ts.map +1 -1
  52. package/apps/app-lifeops/src/followup/actions/markFollowupDone.js +2 -1
  53. package/apps/app-lifeops/src/followup/actions/setFollowupThreshold.d.ts.map +1 -1
  54. package/apps/app-lifeops/src/followup/actions/setFollowupThreshold.js +2 -1
  55. package/apps/app-lifeops/src/lifeops/calendly-client.d.ts.map +1 -1
  56. package/apps/app-lifeops/src/lifeops/calendly-client.js +4 -2
  57. package/apps/app-lifeops/src/lifeops/discord-browser-scraper.d.ts.map +1 -1
  58. package/apps/app-lifeops/src/lifeops/discord-browser-scraper.js +6 -5
  59. package/apps/app-lifeops/src/lifeops/password-manager-bridge.d.ts +1 -1
  60. package/apps/app-lifeops/src/lifeops/password-manager-bridge.d.ts.map +1 -1
  61. package/apps/app-lifeops/src/lifeops/password-manager-bridge.js +84 -6
  62. package/apps/app-lifeops/src/lifeops/remote-desktop.d.ts.map +1 -1
  63. package/apps/app-lifeops/src/lifeops/remote-desktop.js +30 -0
  64. package/apps/app-lifeops/src/lifeops/repository.d.ts +15 -0
  65. package/apps/app-lifeops/src/lifeops/repository.d.ts.map +1 -1
  66. package/apps/app-lifeops/src/lifeops/repository.js +330 -1
  67. package/apps/app-lifeops/src/lifeops/service-mixin-discord.js +222 -42
  68. package/apps/app-lifeops/src/lifeops/service-mixin-subscriptions.d.ts +2 -0
  69. package/apps/app-lifeops/src/lifeops/service-mixin-subscriptions.d.ts.map +1 -0
  70. package/apps/app-lifeops/src/lifeops/service-mixin-subscriptions.js +763 -0
  71. package/apps/app-lifeops/src/lifeops/service.d.ts +63 -0
  72. package/apps/app-lifeops/src/lifeops/service.d.ts.map +1 -1
  73. package/apps/app-lifeops/src/lifeops/service.js +2 -1
  74. package/apps/app-lifeops/src/lifeops/subscriptions-playbooks.d.ts +54 -0
  75. package/apps/app-lifeops/src/lifeops/subscriptions-playbooks.d.ts.map +1 -0
  76. package/apps/app-lifeops/src/lifeops/subscriptions-playbooks.js +213 -0
  77. package/apps/app-lifeops/src/lifeops/subscriptions-types.d.ts +80 -0
  78. package/apps/app-lifeops/src/lifeops/subscriptions-types.d.ts.map +1 -0
  79. package/apps/app-lifeops/src/lifeops/twilio.d.ts.map +1 -1
  80. package/apps/app-lifeops/src/lifeops/twilio.js +4 -2
  81. package/apps/app-lifeops/src/lifeops/whatsapp-client.d.ts.map +1 -1
  82. package/apps/app-lifeops/src/lifeops/whatsapp-client.js +4 -2
  83. package/apps/app-lifeops/src/lifeops/x-poster.d.ts.map +1 -1
  84. package/apps/app-lifeops/src/lifeops/x-poster.js +12 -6
  85. package/apps/app-lifeops/src/lifeops/x-reader.d.ts.map +1 -1
  86. package/apps/app-lifeops/src/lifeops/x-reader.js +7 -5
  87. package/apps/app-lifeops/src/plugin.d.ts.map +1 -1
  88. package/apps/app-lifeops/src/plugin.js +31 -24
  89. package/apps/app-lifeops/src/provider.d.ts.map +1 -1
  90. package/apps/app-lifeops/src/provider.js +4 -4
  91. package/apps/app-lifeops/src/providers/inbox-triage.js +2 -2
  92. package/apps/app-lifeops/src/providers/lifeops.d.ts.map +1 -1
  93. package/apps/app-lifeops/src/providers/lifeops.js +19 -10
  94. package/apps/app-lifeops/src/providers/website-blocker.js +1 -1
  95. package/apps/app-lifeops/src/public.d.ts +4 -0
  96. package/apps/app-lifeops/src/public.d.ts.map +1 -0
  97. package/apps/app-lifeops/src/public.js +3 -0
  98. package/apps/app-lifeops/src/routes/plugin.d.ts +18 -0
  99. package/apps/app-lifeops/src/routes/plugin.d.ts.map +1 -0
  100. package/apps/app-lifeops/src/routes/plugin.js +270 -0
  101. package/apps/app-lifeops/src/website-blocker/chat-integration/actions/blockUntilTaskComplete.d.ts.map +1 -1
  102. package/apps/app-lifeops/src/website-blocker/chat-integration/actions/blockUntilTaskComplete.js +18 -2
  103. package/apps/app-training/src/core/training-orchestrator.d.ts.map +1 -1
  104. package/apps/app-training/src/core/training-orchestrator.js +4 -0
  105. package/apps/app-training/src/services/training-trigger.d.ts +32 -18
  106. package/apps/app-training/src/services/training-trigger.d.ts.map +1 -1
  107. package/apps/app-training/src/services/training-trigger.js +10 -1
  108. package/package.json +4 -4
  109. package/packages/agent/src/actions/browser-session.d.ts +3 -0
  110. package/packages/agent/src/actions/browser-session.d.ts.map +1 -0
  111. package/packages/agent/src/actions/browser-session.js +207 -0
  112. package/packages/agent/src/actions/context-signal.d.ts +1 -1
  113. package/packages/agent/src/actions/context-signal.d.ts.map +1 -1
  114. package/packages/agent/src/actions/context-signal.js +1 -1
  115. package/packages/agent/src/actions/extract-page.d.ts +3 -0
  116. package/packages/agent/src/actions/extract-page.d.ts.map +1 -0
  117. package/packages/agent/src/actions/extract-page.js +124 -0
  118. package/packages/agent/src/actions/grounded-action-reply.js +1 -1
  119. package/packages/agent/src/actions/recent-conversation-texts.d.ts +9 -0
  120. package/packages/agent/src/actions/recent-conversation-texts.d.ts.map +1 -0
  121. package/packages/agent/src/actions/recent-conversation-texts.js +81 -0
  122. package/packages/agent/src/actions/set-user-name.js +1 -1
  123. package/packages/agent/src/actions/web-search.d.ts +4 -10
  124. package/packages/agent/src/actions/web-search.d.ts.map +1 -1
  125. package/packages/agent/src/actions/web-search.js +89 -19
  126. package/packages/agent/src/api/binance-skill-helpers.d.ts.map +1 -1
  127. package/packages/agent/src/api/binance-skill-helpers.js +1 -1
  128. package/packages/agent/src/api/chat-augmentation.d.ts +1 -20
  129. package/packages/agent/src/api/chat-augmentation.d.ts.map +1 -1
  130. package/packages/agent/src/api/chat-augmentation.js +2 -110
  131. package/packages/agent/src/api/conversation-metadata.d.ts +9 -0
  132. package/packages/agent/src/api/conversation-metadata.d.ts.map +1 -0
  133. package/packages/agent/src/api/conversation-metadata.js +98 -0
  134. package/packages/agent/src/api/conversation-routes.d.ts.map +1 -1
  135. package/packages/agent/src/api/conversation-routes.js +40 -9
  136. package/packages/agent/src/api/lifeops-browser-packaging.d.ts +1 -1
  137. package/packages/agent/src/api/lifeops-browser-packaging.d.ts.map +1 -1
  138. package/packages/agent/src/api/lifeops-browser-packaging.js +1 -1
  139. package/packages/agent/src/api/permissions-routes.js +1 -1
  140. package/packages/agent/src/api/server-helpers-auth.js +1 -1
  141. package/packages/agent/src/api/server-helpers.d.ts +2 -1
  142. package/packages/agent/src/api/server-helpers.d.ts.map +1 -1
  143. package/packages/agent/src/api/server-helpers.js +2 -110
  144. package/packages/agent/src/api/server-types.d.ts +14 -0
  145. package/packages/agent/src/api/server-types.d.ts.map +1 -1
  146. package/packages/agent/src/api/server.d.ts.map +1 -1
  147. package/packages/agent/src/api/server.js +3 -13
  148. package/packages/agent/src/api/workbench-routes.d.ts.map +1 -1
  149. package/packages/agent/src/api/workbench-routes.js +0 -14
  150. package/packages/agent/src/auth/credentials.d.ts.map +1 -1
  151. package/packages/agent/src/auth/credentials.js +8 -0
  152. package/packages/agent/src/config/zod-schema.d.ts +2 -2
  153. package/packages/agent/src/config/zod-schema.providers-core.d.ts +3 -3
  154. package/packages/agent/src/providers/automation-terminal-bridge.d.ts +3 -0
  155. package/packages/agent/src/providers/automation-terminal-bridge.d.ts.map +1 -0
  156. package/packages/agent/src/providers/automation-terminal-bridge.js +71 -0
  157. package/packages/agent/src/providers/index.d.ts +1 -0
  158. package/packages/agent/src/providers/index.d.ts.map +1 -1
  159. package/packages/agent/src/providers/index.js +1 -0
  160. package/packages/agent/src/providers/recent-conversations.d.ts.map +1 -1
  161. package/packages/agent/src/providers/recent-conversations.js +5 -0
  162. package/packages/agent/src/providers/relevant-conversations.d.ts.map +1 -1
  163. package/packages/agent/src/providers/relevant-conversations.js +5 -0
  164. package/packages/agent/src/providers/user-name.d.ts.map +1 -1
  165. package/packages/agent/src/providers/user-name.js +1 -1
  166. package/packages/agent/src/runtime/eliza-plugin.d.ts.map +1 -1
  167. package/packages/agent/src/runtime/eliza-plugin.js +6 -0
  168. package/packages/agent/src/runtime/plugin-resolver.d.ts.map +1 -1
  169. package/packages/agent/src/runtime/plugin-resolver.js +115 -0
  170. package/packages/agent/src/services/browser-workspace-types.d.ts +5 -1
  171. package/packages/agent/src/services/browser-workspace-types.d.ts.map +1 -1
  172. package/packages/agent/src/services/browser-workspace.d.ts.map +1 -1
  173. package/packages/agent/src/services/browser-workspace.js +178 -7
  174. package/packages/agent/src/services/coding-agent-context.d.ts +4 -4
  175. package/packages/agent/src/services/escalation.d.ts +0 -11
  176. package/packages/agent/src/services/escalation.d.ts.map +1 -1
  177. package/packages/agent/src/services/escalation.js +19 -58
  178. package/packages/agent/src/services/hosted-tools.d.ts +70 -0
  179. package/packages/agent/src/services/hosted-tools.d.ts.map +1 -0
  180. package/packages/agent/src/services/hosted-tools.js +87 -0
  181. package/packages/agent/src/services/owner-name.d.ts +4 -0
  182. package/packages/agent/src/services/owner-name.d.ts.map +1 -0
  183. package/packages/agent/src/services/owner-name.js +46 -0
  184. package/packages/agent/src/services/registry-client-queries.d.ts +1 -1
  185. package/packages/agent/src/services/registry-client-queries.js +1 -1
  186. package/packages/agent/src/services/registry-client-types.d.ts +1 -1
  187. package/packages/agent/src/services/stream-manager.d.ts +1 -1
  188. package/packages/app-core/src/config/boot-config-store.d.ts +1 -1
  189. package/packages/app-core/src/config/boot-config-store.d.ts.map +1 -1
  190. package/packages/shared/src/contracts/lifeops.d.ts +26 -0
  191. package/packages/shared/src/contracts/lifeops.d.ts.map +1 -1
  192. package/packages/shared/src/contracts/lifeops.js +28 -0
  193. package/packages/typescript/src/actions.d.ts.map +1 -1
  194. package/packages/typescript/src/actions.js +12 -0
  195. package/packages/typescript/src/features/advanced-capabilities/actions/scheduleFollowUp.d.ts.map +1 -1
  196. package/packages/typescript/src/features/advanced-capabilities/actions/scheduleFollowUp.js +8 -2
  197. package/packages/typescript/src/features/advanced-capabilities/providers/settings.d.ts.map +1 -1
  198. package/packages/typescript/src/features/advanced-capabilities/providers/settings.js +11 -3
  199. package/packages/typescript/src/features/basic-capabilities/providers/actions.d.ts.map +1 -1
  200. package/packages/typescript/src/features/basic-capabilities/providers/actions.js +23 -1
  201. package/packages/typescript/src/features/basic-capabilities/providers/non-actionable-chatter.d.ts +5 -0
  202. package/packages/typescript/src/features/basic-capabilities/providers/non-actionable-chatter.d.ts.map +1 -0
  203. package/packages/typescript/src/features/basic-capabilities/providers/non-actionable-chatter.js +22 -0
  204. package/packages/typescript/src/features/basic-capabilities/providers/providers.d.ts.map +1 -1
  205. package/packages/typescript/src/features/basic-capabilities/providers/providers.js +10 -5
  206. package/packages/typescript/src/features/knowledge/documents-provider.d.ts.map +1 -1
  207. package/packages/typescript/src/features/knowledge/documents-provider.js +1 -0
  208. package/packages/typescript/src/features/shared/schedule-follow-up-response.d.ts +10 -0
  209. package/packages/typescript/src/features/shared/schedule-follow-up-response.d.ts.map +1 -0
  210. package/packages/typescript/src/features/shared/schedule-follow-up-response.js +49 -0
  211. package/packages/typescript/src/features/trajectories/TrajectoriesService.d.ts +1 -0
  212. package/packages/typescript/src/features/trajectories/TrajectoriesService.d.ts.map +1 -1
  213. package/packages/typescript/src/features/trajectories/TrajectoriesService.js +21 -2
  214. package/packages/typescript/src/features/trust/providers/settings.d.ts.map +1 -1
  215. package/packages/typescript/src/features/trust/providers/settings.js +11 -1
  216. package/packages/typescript/src/prompts.d.ts +4 -4
  217. package/packages/typescript/src/prompts.d.ts.map +1 -1
  218. package/packages/typescript/src/prompts.js +10 -2
  219. package/packages/typescript/src/schemas/character.d.ts +3 -3
  220. package/packages/typescript/src/services/message.d.ts +1 -0
  221. package/packages/typescript/src/services/message.d.ts.map +1 -1
  222. package/packages/typescript/src/services/message.js +483 -18
  223. package/packages/typescript/src/types/components.d.ts +6 -0
  224. package/packages/typescript/src/types/components.d.ts.map +1 -1
  225. package/packages/typescript/src/utils/context-routing.d.ts.map +1 -1
  226. package/packages/typescript/src/utils/context-routing.js +5 -1
  227. package/packages/typescript/src/utils/toon.d.ts.map +1 -1
  228. package/packages/typescript/src/utils/toon.js +23 -2
  229. package/packages/typescript/src/utils.d.ts +1 -0
  230. package/packages/typescript/src/utils.d.ts.map +1 -1
  231. package/packages/typescript/src/utils.js +1 -0
  232. package/apps/app-lifeops/src/types/app-blocker-settings-card.d.ts +0 -2
  233. package/apps/app-lifeops/src/types/app-blocker-settings-card.d.ts.map +0 -1
  234. package/apps/app-lifeops/src/types/index.d.ts +0 -3
  235. package/apps/app-lifeops/src/types/index.d.ts.map +0 -1
  236. package/apps/app-lifeops/src/types/index.js +0 -1
  237. package/apps/app-lifeops/src/types/website-blocker-settings-card.d.ts +0 -2
  238. package/apps/app-lifeops/src/types/website-blocker-settings-card.d.ts.map +0 -1
  239. package/apps/app-lifeops/src/types/website-blocker-settings-card.js +0 -1
  240. /package/apps/app-lifeops/src/{types/app-blocker-settings-card.js → lifeops/subscriptions-types.js} +0 -0
@@ -28,6 +28,10 @@ export const dossierAction = {
28
28
  "MEETING_BRIEFING",
29
29
  "PREPARE_FOR_MEETING",
30
30
  "BRIEF_ME",
31
+ "BACKGROUND_BRIEF",
32
+ "PERSON_BACKGROUND",
33
+ "NEXT_MEETING_BRIEF",
34
+ "WHO_AM_I_MEETING",
31
35
  ],
32
36
  tags: [
33
37
  "always-include",
@@ -37,7 +41,9 @@ export const dossierAction = {
37
41
  "next event",
38
42
  "meeting prep",
39
43
  ],
40
- description: "Generate a pre-meeting briefing dossier with context about attendees, recent interactions, and upcoming event details. Use this for 'give me the dossier for my next meeting or event' style prep requests.",
44
+ description: "Generate a pre-meeting or person-background briefing dossier with context about attendees, recent interactions, and upcoming event details. " +
45
+ "Use this for requests like 'pull up a dossier on Satya Nadella', 'give me the background on the person I'm meeting next: Julia Chen', or 'brief me for my next meeting'. " +
46
+ "If the user explicitly wants a brief, backgrounder, prep sheet, or dossier, use this action instead of replying from ENTITIES, FACTS, or memory alone.",
41
47
  descriptionCompressed: "Pre-meeting briefing dossier with attendees, recent context, and event details. Admin only.",
42
48
  suppressPostActionContinuation: true,
43
49
  validate: async (runtime, message) => hasAdminAccess(runtime, message),
@@ -72,40 +78,25 @@ export const dossierAction = {
72
78
  data: { actionName: ACTION_NAME },
73
79
  };
74
80
  }
75
- try {
76
- const dossier = await service.generateDossier({
77
- subject,
78
- calendarEventId: params.calendarEventId ?? null,
79
- attendeeHandles: coerceHandles(params.attendeeHandles),
80
- generatedForAt: params.generatedForAt,
81
- });
82
- return {
83
- text: dossier.contentMd || `Dossier generated for "${subject}".`,
81
+ const dossier = await service.generateDossier({
82
+ subject,
83
+ calendarEventId: params.calendarEventId ?? null,
84
+ attendeeHandles: coerceHandles(params.attendeeHandles),
85
+ generatedForAt: params.generatedForAt,
86
+ });
87
+ return {
88
+ text: dossier.contentMd || `Dossier generated for "${subject}".`,
89
+ success: true,
90
+ values: {
84
91
  success: true,
85
- values: {
86
- success: true,
87
- dossierId: dossier.id,
88
- subject: dossier.subject,
89
- },
90
- data: {
91
- actionName: ACTION_NAME,
92
- dossier,
93
- },
94
- };
95
- }
96
- catch (error) {
97
- return {
98
- text: error instanceof Error && /\bno calendar event matched\b/i.test(error.message)
99
- ? "I couldn't resolve which meeting or event you mean from that wording. Ask for your next meeting/event explicitly or name the meeting."
100
- : "I couldn't generate that dossier right now.",
101
- success: false,
102
- values: {
103
- success: false,
104
- error: error instanceof Error ? error.message : String(error),
105
- },
106
- data: { actionName: ACTION_NAME },
107
- };
108
- }
92
+ dossierId: dossier.id,
93
+ subject: dossier.subject,
94
+ },
95
+ data: {
96
+ actionName: ACTION_NAME,
97
+ dossier,
98
+ },
99
+ };
109
100
  },
110
101
  parameters: [
111
102
  {
@@ -143,6 +134,32 @@ export const dossierAction = {
143
134
  },
144
135
  ],
145
136
  examples: [
137
+ [
138
+ {
139
+ name: "{{name1}}",
140
+ content: { text: "Pull up a dossier on Satya Nadella" },
141
+ },
142
+ {
143
+ name: "{{agentName}}",
144
+ content: {
145
+ text: "# Satya Nadella Briefing\n\n## Summary\n...",
146
+ },
147
+ },
148
+ ],
149
+ [
150
+ {
151
+ name: "{{name1}}",
152
+ content: {
153
+ text: "Give me the background on the person I'm meeting next: Julia Chen",
154
+ },
155
+ },
156
+ {
157
+ name: "{{agentName}}",
158
+ content: {
159
+ text: "# Julia Chen Briefing\n\n## Summary\n...\n## Recent Context\n...",
160
+ },
161
+ },
162
+ ],
146
163
  [
147
164
  {
148
165
  name: "{{name1}}",
@@ -1 +1 @@
1
- {"version":3,"file":"gmail.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/actions/gmail.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EAKN,aAAa,EACb,MAAM,EACN,KAAK,EACN,MAAM,eAAe,CAAC;AA6CvB,KAAK,cAAc,GACf,QAAQ,GACR,gBAAgB,GAChB,QAAQ,GACR,MAAM,GACN,aAAa,GACb,qBAAqB,GACrB,YAAY,GACZ,oBAAoB,GACpB,cAAc,CAAC;AAEnB,MAAM,MAAM,YAAY,GAAG;IACzB,SAAS,EAAE,cAAc,GAAG,IAAI,CAAC;IACjC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC3B,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,KAAK,uBAAuB,GAAG,uBAAuB,GAAG,MAAM,CAAC;AAEhE,KAAK,iBAAiB,GAAG;IACvB,SAAS,EAAE,cAAc,CAAC;IAC1B,MAAM,EAAE,uBAAuB,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AA8qBF,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,KAAK,GAAG,SAAS,EACxB,MAAM,EAAE,MAAM,EACd,kBAAkB,CAAC,EAAE,iBAAiB,GAAG,IAAI,GAC5C,OAAO,CAAC,YAAY,CAAC,CAkMvB;AAqRD,eAAO,MAAM,WAAW,EAAE,MAAM,GAAG;IACjC,8BAA8B,CAAC,EAAE,OAAO,CAAC;CAqhC1C,CAAC"}
1
+ {"version":3,"file":"gmail.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/actions/gmail.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EAKN,aAAa,EACb,MAAM,EACN,KAAK,EACN,MAAM,eAAe,CAAC;AA8CvB,KAAK,cAAc,GACf,QAAQ,GACR,gBAAgB,GAChB,QAAQ,GACR,MAAM,GACN,aAAa,GACb,qBAAqB,GACrB,YAAY,GACZ,oBAAoB,GACpB,cAAc,CAAC;AAEnB,MAAM,MAAM,YAAY,GAAG;IACzB,SAAS,EAAE,cAAc,GAAG,IAAI,CAAC;IACjC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC3B,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,KAAK,uBAAuB,GAAG,uBAAuB,GAAG,MAAM,CAAC;AAEhE,KAAK,iBAAiB,GAAG;IACvB,SAAS,EAAE,cAAc,CAAC;IAC1B,MAAM,EAAE,uBAAuB,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AA8qBF,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,KAAK,GAAG,SAAS,EACxB,MAAM,EAAE,MAAM,EACd,kBAAkB,CAAC,EAAE,iBAAiB,GAAG,IAAI,GAC5C,OAAO,CAAC,YAAY,CAAC,CAkMvB;AAqRD,eAAO,MAAM,WAAW,EAAE,MAAM,GAAG;IACjC,8BAA8B,CAAC,EAAE,OAAO,CAAC;CAyhC1C,CAAC"}
@@ -5,6 +5,7 @@ import { hasContextSignalForKey } from "@elizaos/agent/actions/context-signal";
5
5
  import { extractActionResultsFromState, extractRecentMessageEntriesFromState, extractStateDataRecords, renderGroundedActionReply, summarizeActiveTrajectory, summarizeRecentActionHistory, } from "@elizaos/agent/actions/grounded-action-reply";
6
6
  import { recentConversationTexts as collectRecentConversationTexts } from "./life-recent-context.js";
7
7
  import { detailArray, detailBoolean, detailNumber, detailString, formatEmailNeedsResponse, formatEmailRead, formatEmailSearch, formatEmailTriage, formatGmailBatchReplyDrafts, formatGmailReplyDraft, getGoogleCapabilityStatus, gmailReadUnavailableMessage, gmailSendUnavailableMessage, hasLifeOpsAccess, INTERNAL_URL, messageText, toActionData, } from "./lifeops-google-helpers.js";
8
+ import { looksLikeEmailVenting } from "./non-actionable-request.js";
8
9
  const GMAIL_CONTEXT_WINDOW = 12;
9
10
  const GMAIL_DETAIL_ALIASES = {
10
11
  forceSync: ["forcesync", "force_sync"],
@@ -936,12 +937,16 @@ export const gmailAction = {
936
937
  "drafting reply text for one or more emails; sending confirmed replies; " +
937
938
  "requests like 'triage my Gmail inbox', 'summarize my unread emails', 'draft a reply to the latest email from Sarah', or 'send a reply to the last email from finance'. " +
938
939
  "If the request explicitly says Gmail, email, unread emails, sender, subject, or reply to a specific email, use GMAIL_ACTION instead of INBOX. " +
940
+ "DO NOT use this action when the user is only venting or making a general observation like 'I hate email' unless they actually ask you to triage, search, read, draft, or send. " +
939
941
  "DO NOT use this action for calendar events, meetings, or scheduling — use CALENDAR_ACTION instead. " +
940
942
  "DO NOT use this action for personal habits, goals, routines, or reminders — use LIFE instead. " +
941
943
  "This action provides the final grounded reply; do not pair it with a speculative REPLY action.",
942
944
  descriptionCompressed: "Gmail via LifeOps: inbox triage, search, read, draft/send replies. Not for calendar or habits.",
943
945
  suppressPostActionContinuation: true,
944
946
  validate: async (runtime, message, state) => {
947
+ if (looksLikeEmailVenting(messageText(message))) {
948
+ return false;
949
+ }
945
950
  if (!(await hasLifeOpsAccess(runtime, message)))
946
951
  return false;
947
952
  return hasContextSignalForKey(runtime, message, state, "gmail", {
@@ -1 +1 @@
1
- {"version":3,"file":"inbox.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/actions/inbox.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EAQP,MAAM,eAAe,CAAC;AAsNvB,eAAO,MAAM,WAAW,EAAE,MAAM,GAAG;IACjC,8BAA8B,CAAC,EAAE,OAAO,CAAC;CAiP1C,CAAC"}
1
+ {"version":3,"file":"inbox.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/actions/inbox.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EAQP,MAAM,eAAe,CAAC;AAuNvB,eAAO,MAAM,WAAW,EAAE,MAAM,GAAG;IACjC,8BAA8B,CAAC,EAAE,OAAO,CAAC;CAuP1C,CAAC"}
@@ -7,6 +7,7 @@ import { classifyMessages } from "../inbox/triage-classifier.js";
7
7
  import { hasAdminAccess } from "@elizaos/agent/security/access";
8
8
  import { resolveAdminEntityId } from "@elizaos/agent/actions/send-message";
9
9
  import { INTERNAL_URL } from "./lifeops-google-helpers.js";
10
+ import { looksLikeEmailVenting } from "./non-actionable-request.js";
10
11
  function inboxRecentConversation(state, limit = 10) {
11
12
  if (!state || typeof state !== "object") {
12
13
  return [];
@@ -172,11 +173,17 @@ export const inboxAction = {
172
173
  "priority inbox ranking, unread summaries, drafts awaiting sign-off, " +
173
174
  "missed-call repair follow-up, and group-chat handoff coordination. " +
174
175
  "Examples: 'triage my inbox', 'give me my inbox digest', or 'respond to the messages that need an answer in my inbox'. " +
176
+ "DO NOT use this action when the user is only complaining about email or messages without asking for triage, a digest, or a reply workflow. " +
175
177
  "If the request is explicitly Gmail or email-specific, about unread emails, or about drafting or sending a reply to a specific email, use GMAIL_ACTION instead. " +
176
178
  "Subactions: triage, digest, respond. Admin/owner only.",
177
179
  descriptionCompressed: "Unified inbox: triage messages, daily digest, draft/send responses. Admin only.",
178
180
  suppressPostActionContinuation: true,
179
- validate: async (runtime, message) => hasAdminAccess(runtime, message),
181
+ validate: async (runtime, message) => {
182
+ if (looksLikeEmailVenting(extractText(message))) {
183
+ return false;
184
+ }
185
+ return hasAdminAccess(runtime, message);
186
+ },
180
187
  handler: async (runtime, message, state, options) => {
181
188
  if (!(await hasAdminAccess(runtime, message))) {
182
189
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"life.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/actions/life.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EAMP,MAAM,eAAe,CAAC;AA+3EvB,eAAO,MAAM,UAAU,EAAE,MAAM,GAAG;IAChC,8BAA8B,CAAC,EAAE,OAAO,CAAC;CAwrD1C,CAAC"}
1
+ {"version":3,"file":"life.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/actions/life.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EAMP,MAAM,eAAe,CAAC;AAm4EvB,eAAO,MAAM,UAAU,EAAE,MAAM,GAAG;IAChC,8BAA8B,CAAC,EAAE,OAAO,CAAC;CAisD1C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"life.extractor.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/actions/life.extractor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAQlE,eAAO,MAAM,qBAAqB,yVAkBxB,CAAC;AAEX,MAAM,MAAM,sBAAsB,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAC;AAC5E,MAAM,MAAM,yBAAyB,GACjC,OAAO,GACP,UAAU,GACV,QAAQ,GACR,MAAM,GACN,cAAc,GACd,oBAAoB,GACpB,SAAS,CAAC;AAEd,KAAK,0BAA0B,GAAG;IAChC,SAAS,EAAE,sBAAsB,GAAG,IAAI,CAAC;IACzC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,yBAAyB,EAAE,CAAC;IACrC,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC;AAoLF,wBAAsB,2BAA2B,CAAC,IAAI,EAAE;IACtD,OAAO,EAAE,aAAa,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,KAAK,GAAG,SAAS,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,0BAA0B,CAAC,CA6GtC"}
1
+ {"version":3,"file":"life.extractor.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/actions/life.extractor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAQlE,eAAO,MAAM,qBAAqB,yVAkBxB,CAAC;AAEX,MAAM,MAAM,sBAAsB,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAC;AAC5E,MAAM,MAAM,yBAAyB,GACjC,OAAO,GACP,UAAU,GACV,QAAQ,GACR,MAAM,GACN,cAAc,GACd,oBAAoB,GACpB,SAAS,CAAC;AAEd,KAAK,0BAA0B,GAAG;IAChC,SAAS,EAAE,sBAAsB,GAAG,IAAI,CAAC;IACzC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,yBAAyB,EAAE,CAAC;IACrC,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC;AAyRF,wBAAsB,2BAA2B,CAAC,IAAI,EAAE;IACtD,OAAO,EAAE,aAAa,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,KAAK,GAAG,SAAS,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAsItC"}
@@ -131,7 +131,9 @@ const REPLY_ONLY_OPERATION_PLAN = {
131
131
  };
132
132
  function normalizeOperationPlan(parsed) {
133
133
  const operation = normalizeOperation(parsed.operation);
134
- const shouldAct = normalizeShouldAct(parsed.shouldAct);
134
+ const missing = normalizeMissingFields(parsed.missing);
135
+ const shouldAct = normalizeShouldAct(parsed.shouldAct) ??
136
+ (operation ? missing.length === 0 : null);
135
137
  if (shouldAct === null) {
136
138
  return null;
137
139
  }
@@ -142,7 +144,7 @@ function normalizeOperationPlan(parsed) {
142
144
  return {
143
145
  operation,
144
146
  confidence: normalizeConfidence(parsed.confidence) ?? 0,
145
- missing: normalizeMissingFields(parsed.missing),
147
+ missing,
146
148
  shouldAct,
147
149
  };
148
150
  }
@@ -164,6 +166,80 @@ function buildRepairPrompt(args) {
164
166
  `Previous invalid output: ${JSON.stringify(args.rawResponse)}`,
165
167
  ].join("\n");
166
168
  }
169
+ function normalizeCoreLifeOperation(value) {
170
+ switch (value) {
171
+ case "create_definition":
172
+ case "complete_occurrence":
173
+ case "snooze_occurrence":
174
+ case "query_overview":
175
+ return value;
176
+ default:
177
+ return null;
178
+ }
179
+ }
180
+ function normalizeCoreLifeOperationPlan(parsed) {
181
+ const operation = normalizeCoreLifeOperation(parsed.operation);
182
+ const missing = normalizeMissingFields(parsed.missing);
183
+ const shouldAct = normalizeShouldAct(parsed.shouldAct) ??
184
+ (operation ? missing.length === 0 : null);
185
+ if (shouldAct === null) {
186
+ return null;
187
+ }
188
+ if (shouldAct && operation === null) {
189
+ return null;
190
+ }
191
+ return {
192
+ operation,
193
+ confidence: normalizeConfidence(parsed.confidence) ?? 0,
194
+ missing,
195
+ shouldAct,
196
+ };
197
+ }
198
+ async function recoverCoreLifeOperationWithLlm(args) {
199
+ const prompt = [
200
+ "Recover the core LifeOps intent for this request.",
201
+ "The user may speak in any language.",
202
+ "Choose the closest operation from: create_definition, complete_occurrence, snooze_occurrence, query_overview, or null.",
203
+ "create_definition is for creating a reminder, alarm, routine, or recurring task.",
204
+ "complete_occurrence is for saying the user already did something.",
205
+ "snooze_occurrence is for deferring or postponing something to later.",
206
+ "query_overview is for asking what is still left, active, or remaining today.",
207
+ "Use null only when the request is casual chat or not a core LifeOps action.",
208
+ "",
209
+ "Return ONLY valid JSON with exactly these fields:",
210
+ " operation: create_definition, complete_occurrence, snooze_occurrence, query_overview, or null",
211
+ " confidence: number from 0 to 1",
212
+ " shouldAct: boolean",
213
+ ' missing: array of missing fields from ["title","schedule","target","goal","phone_number","reminder_intensity","details"]',
214
+ "",
215
+ "Examples:",
216
+ ' "remind me to brush my teeth every night" -> {"operation":"create_definition","confidence":0.95,"shouldAct":true,"missing":[]}',
217
+ ' "Je viens de me brosser les dents" -> {"operation":"complete_occurrence","confidence":0.95,"shouldAct":true,"missing":[]}',
218
+ ' "remind me later" -> {"operation":"snooze_occurrence","confidence":0.9,"shouldAct":true,"missing":[]}',
219
+ ' "¿Qué me queda por hacer hoy?" -> {"operation":"query_overview","confidence":0.88,"shouldAct":true,"missing":[]}',
220
+ ' "yeah lol" -> {"operation":null,"confidence":0.6,"shouldAct":false,"missing":[]}',
221
+ "",
222
+ `Current request: ${JSON.stringify(args.currentMessage)}`,
223
+ `Resolved intent: ${JSON.stringify(args.intent)}`,
224
+ `Recent conversation: ${JSON.stringify(args.recentConversation.join("\\n"))}`,
225
+ ].join("\n");
226
+ try {
227
+ const result = await args.runtime.useModel(ModelType.TEXT_LARGE, {
228
+ prompt,
229
+ });
230
+ const rawResponse = typeof result === "string" ? result : "";
231
+ const parsed = parseKeyValueXml(rawResponse) ??
232
+ parseJSONObjectFromText(rawResponse);
233
+ return parsed ? normalizeCoreLifeOperationPlan(parsed) : null;
234
+ }
235
+ catch (error) {
236
+ args.runtime.logger?.warn?.({
237
+ src: "action:life",
238
+ error: error instanceof Error ? error.message : String(error),
239
+ }, "Core LifeOps recovery model call failed");
240
+ return null;
241
+ }
242
+ }
167
243
  export async function extractLifeOperationWithLlm(args) {
168
244
  const { runtime, message, state, intent } = args;
169
245
  const recentConversation = stateTextCandidates(state).slice(-resolveContextWindow());
@@ -221,6 +297,7 @@ export async function extractLifeOperationWithLlm(args) {
221
297
  ' "make sure I brush my teeth when I wake up and before bed" -> {"operation":"create_definition","confidence":0.95,"shouldAct":true,"missing":[]}',
222
298
  ' "how am I doing on my reading goal" -> {"operation":"review_goal","confidence":0.9,"shouldAct":true,"missing":[]}',
223
299
  ' "what\'s still left for today" -> {"operation":"query_overview","confidence":0.88,"shouldAct":true,"missing":[]}',
300
+ ' "¿Qué me queda por hacer hoy?" -> {"operation":"query_overview","confidence":0.88,"shouldAct":true,"missing":[]}',
224
301
  ' "lol yeah. can you help me add a todo for my life?" -> {"operation":"create_definition","confidence":0.82,"shouldAct":false,"missing":["title","schedule"]}',
225
302
  ' "yeah lol" -> {"operation":null,"confidence":0.62,"shouldAct":false,"missing":[]}',
226
303
  "",
@@ -241,7 +318,16 @@ export async function extractLifeOperationWithLlm(args) {
241
318
  const rawResponse = typeof result === "string" ? result : "";
242
319
  const parsedPlan = parseResponse(rawResponse);
243
320
  if (parsedPlan) {
244
- return parsedPlan;
321
+ if (parsedPlan.operation !== null) {
322
+ return parsedPlan;
323
+ }
324
+ const recoveredPlan = await recoverCoreLifeOperationWithLlm({
325
+ runtime,
326
+ currentMessage,
327
+ intent,
328
+ recentConversation,
329
+ });
330
+ return recoveredPlan ?? parsedPlan;
245
331
  }
246
332
  const repairResult = await runtime.useModel(ModelType.TEXT_LARGE, {
247
333
  prompt: buildRepairPrompt({
@@ -252,7 +338,20 @@ export async function extractLifeOperationWithLlm(args) {
252
338
  }),
253
339
  });
254
340
  const repairedRawResponse = typeof repairResult === "string" ? repairResult : "";
255
- return parseResponse(repairedRawResponse) ?? REPLY_ONLY_OPERATION_PLAN;
341
+ const repairedPlan = parseResponse(repairedRawResponse);
342
+ if (repairedPlan && repairedPlan.operation !== null) {
343
+ return repairedPlan;
344
+ }
345
+ const recoveredPlan = await recoverCoreLifeOperationWithLlm({
346
+ runtime,
347
+ currentMessage,
348
+ intent,
349
+ recentConversation,
350
+ });
351
+ if (recoveredPlan) {
352
+ return recoveredPlan;
353
+ }
354
+ return repairedPlan ?? REPLY_ONLY_OPERATION_PLAN;
256
355
  }
257
356
  catch (error) {
258
357
  runtime.logger?.warn?.({
@@ -11,6 +11,7 @@ import { extractReminderIntensityWithLlm, extractTaskCreatePlanWithLlm, } from "
11
11
  import { recentConversationTexts } from "./life-recent-context.js";
12
12
  import { extractUpdateFieldsWithLlm } from "./life-update-extractor.js";
13
13
  import { calendarReadUnavailableMessage, dayRange, detailArray, detailBoolean, detailNumber, detailObject, detailString, formatCalendarFeed, formatNextEventContext, formatOverviewForQuery, getGoogleCapabilityStatus, hasLifeOpsAccess, INTERNAL_URL, messageText, toActionData, weekRange, } from "./lifeops-google-helpers.js";
14
+ import { looksLikeGoalAdviceOnly, looksLikeRelationshipFollowUpRequest, } from "./non-actionable-request.js";
14
15
  import { extractExplicitTimeZoneFromText, normalizeExplicitTimeZoneToken, } from "./timezone-normalization.js";
15
16
  const ACTION_TO_OPERATION = {
16
17
  create: "create_definition",
@@ -1785,6 +1786,8 @@ export const lifeAction = {
1785
1786
  "These are executable LifeOps items, not profile facts or bio updates. " +
1786
1787
  "ALWAYS use LIFE for dynamic status questions like 'what's still left for today', 'what do i still need to do today', or 'anything else in my LifeOps list', even when the conversation already mentioned tasks, because their status may have changed after a completion, snooze, or reminder. " +
1787
1788
  "Do not fall back to REPLY, UPDATE_ENTITY, or UPDATE_OWNER_PROFILE when the user is asking to create or inspect a todo, habit, goal, reminder, or alarm. " +
1789
+ "DO NOT use this action for generic coaching or advice questions like 'any tips on setting better goals?' unless the user is also asking you to create, update, review, or track a concrete goal, task, reminder, or routine. " +
1790
+ "DO NOT use this action for person-specific follow-ups like 'remind me to follow up with David next week about the project' — use RELATIONSHIP instead. " +
1788
1791
  "DO NOT use this action for Gmail inbox triage, email search, drafting or sending emails — use GMAIL_ACTION instead. " +
1789
1792
  "DO NOT use this action for daily briefs, unread summaries, drafts awaiting sign-off, or cross-channel inbox review — use INBOX, GMAIL_ACTION, or SEARCH_ACROSS_CHANNELS instead. " +
1790
1793
  "DO NOT use this action for calendar lookups, scheduling meetings, searching events, or travel itineraries — use CALENDAR_ACTION instead. " +
@@ -1795,6 +1798,11 @@ export const lifeAction = {
1795
1798
  descriptionCompressed: "LifeOps: manage habits, goals, reminders, alarms, escalation. Create/edit/complete/snooze items. Query active status.",
1796
1799
  suppressPostActionContinuation: true,
1797
1800
  validate: async (runtime, message) => {
1801
+ const text = messageText(message);
1802
+ if (looksLikeGoalAdviceOnly(text) ||
1803
+ looksLikeRelationshipFollowUpRequest(text)) {
1804
+ return false;
1805
+ }
1798
1806
  return hasLifeOpsAccess(runtime, message);
1799
1807
  },
1800
1808
  handler: async (runtime, message, state, options) => {
@@ -0,0 +1,6 @@
1
+ export declare function looksLikeEmailVenting(text: string): boolean;
2
+ export declare function looksLikeCalendarObservation(text: string): boolean;
3
+ export declare function looksLikeGoalAdviceOnly(text: string): boolean;
4
+ export declare function looksLikeScreenTimeReflection(text: string): boolean;
5
+ export declare function looksLikeRelationshipFollowUpRequest(text: string): boolean;
6
+ //# sourceMappingURL=non-actionable-request.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"non-actionable-request.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/actions/non-actionable-request.ts"],"names":[],"mappings":"AAIA,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAU3D;AAED,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAMlE;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAM7D;AAED,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAOnE;AAED,wBAAgB,oCAAoC,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAW1E"}
@@ -0,0 +1,33 @@
1
+ function normalizeRequestText(text) {
2
+ return text.toLowerCase().replace(/\s+/g, " ").trim();
3
+ }
4
+ export function looksLikeEmailVenting(text) {
5
+ const normalized = normalizeRequestText(text);
6
+ if (!/\b(email|gmail|inbox|mailbox|mail)\b/.test(normalized)) {
7
+ return false;
8
+ }
9
+ return (/\bi hate\b/.test(normalized) ||
10
+ /\btime sink\b/.test(normalized) ||
11
+ /\boverwhelm(?:ing|ed)\b/.test(normalized));
12
+ }
13
+ export function looksLikeCalendarObservation(text) {
14
+ const normalized = normalizeRequestText(text);
15
+ return (/^my calendar has been\b/.test(normalized) ||
16
+ /\bmy calendar\b.*\b(crazy|chaotic|packed|insane|nuts)\b/.test(normalized));
17
+ }
18
+ export function looksLikeGoalAdviceOnly(text) {
19
+ const normalized = normalizeRequestText(text);
20
+ return (/\bgoal/.test(normalized) &&
21
+ /\b(any )?(tips|advice|suggestions?)\b/.test(normalized));
22
+ }
23
+ export function looksLikeScreenTimeReflection(text) {
24
+ const normalized = normalizeRequestText(text);
25
+ return (/\bi think i spend\b.*\btoo much time\b.*\b(phone|screen)\b/.test(normalized) || /\bi spend\b.*\btoo much time\b.*\bon my phone\b/.test(normalized));
26
+ }
27
+ export function looksLikeRelationshipFollowUpRequest(text) {
28
+ const normalized = normalizeRequestText(text);
29
+ if (!/\bfollow up with\b/.test(normalized)) {
30
+ return false;
31
+ }
32
+ return (/\b(next\s+(week|month)|tomorrow|today|tonight|this\s+week|on\s+(monday|tuesday|wednesday|thursday|friday|saturday|sunday)|at\s+\d)\b/.test(normalized) && !/\bevery\b/.test(normalized));
33
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"password-manager.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/actions/password-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,MAAM,EAMZ,MAAM,eAAe,CAAC;AAyGvB,eAAO,MAAM,qBAAqB,EAAE,MAuInC,CAAC"}
1
+ {"version":3,"file":"password-manager.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/actions/password-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,MAAM,EAMZ,MAAM,eAAe,CAAC;AAyGvB,eAAO,MAAM,qBAAqB,EAAE,MAgJnC,CAAC"}
@@ -68,8 +68,17 @@ const examples = [
68
68
  ];
69
69
  export const passwordManagerAction = {
70
70
  name: "PASSWORD_MANAGER",
71
- similes: ["ONEPASSWORD", "CREDENTIAL_LOOKUP", "COPY_CREDENTIAL"],
72
- description: "Look up or copy credentials from your password manager (1Password CLI or ProtonPass). Subactions: search, list, inject_username, inject_password. Credentials are NEVER displayed in chat — injection only copies to the OS clipboard briefly.",
71
+ similes: [
72
+ "ONEPASSWORD",
73
+ "CREDENTIAL_LOOKUP",
74
+ "COPY_CREDENTIAL",
75
+ "LOOK_UP_PASSWORD",
76
+ "SHOW_SAVED_LOGINS",
77
+ "LIST_LOGINS",
78
+ ],
79
+ description: "Look up or copy credentials from your password manager (1Password CLI or ProtonPass). " +
80
+ "Use this for requests like 'look up my GitHub password' or 'show me my saved logins for github.com'. " +
81
+ "Subactions: search, list, inject_username, inject_password. Credentials are NEVER displayed in chat — injection only copies to the OS clipboard briefly.",
73
82
  validate: async (runtime, message) => hasOwnerAccess(runtime, message),
74
83
  handler: async (runtime, message, _state, options) => {
75
84
  if (!(await hasOwnerAccess(runtime, message))) {
@@ -5,5 +5,7 @@
5
5
  * complete_follow_up, follow_up_list, days_since.
6
6
  */
7
7
  import type { Action } from "@elizaos/core";
8
- export declare const relationshipAction: Action;
8
+ export declare const relationshipAction: Action & {
9
+ suppressPostActionContinuation?: boolean;
10
+ };
9
11
  //# sourceMappingURL=relationships.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"relationships.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/actions/relationships.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,MAAM,EAMP,MAAM,eAAe,CAAC;AAkLvB,eAAO,MAAM,kBAAkB,EAAE,MA6ZhC,CAAC"}
1
+ {"version":3,"file":"relationships.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/actions/relationships.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,MAAM,EAMP,MAAM,eAAe,CAAC;AA+XvB,eAAO,MAAM,kBAAkB,EAAE,MAAM,GAAG;IACxC,8BAA8B,CAAC,EAAE,OAAO,CAAC;CAia1C,CAAC"}