@elizaos/app-core 2.0.0-alpha.211 → 2.0.0-alpha.214

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 (76) hide show
  1. package/apps/app-lifeops/src/actions/autofill.d.ts.map +1 -1
  2. package/apps/app-lifeops/src/actions/autofill.js +90 -0
  3. package/apps/app-lifeops/src/actions/calendar.d.ts.map +1 -1
  4. package/apps/app-lifeops/src/actions/calendar.js +1 -0
  5. package/apps/app-lifeops/src/actions/calendly.d.ts.map +1 -1
  6. package/apps/app-lifeops/src/actions/calendly.js +12 -1
  7. package/apps/app-lifeops/src/actions/checkin.d.ts.map +1 -1
  8. package/apps/app-lifeops/src/actions/checkin.js +60 -0
  9. package/apps/app-lifeops/src/actions/intent-sync.d.ts.map +1 -1
  10. package/apps/app-lifeops/src/actions/intent-sync.js +4 -41
  11. package/apps/app-lifeops/src/actions/life.d.ts.map +1 -1
  12. package/apps/app-lifeops/src/actions/life.js +14 -5
  13. package/apps/app-lifeops/src/actions/password-manager.d.ts.map +1 -1
  14. package/apps/app-lifeops/src/actions/password-manager.js +1 -32
  15. package/apps/app-lifeops/src/actions/remote-desktop.d.ts.map +1 -1
  16. package/apps/app-lifeops/src/actions/remote-desktop.js +1 -40
  17. package/apps/app-lifeops/src/actions/scheduling.d.ts.map +1 -1
  18. package/apps/app-lifeops/src/actions/scheduling.js +30 -0
  19. package/apps/app-lifeops/src/actions/screen-time.d.ts.map +1 -1
  20. package/apps/app-lifeops/src/actions/screen-time.js +1 -20
  21. package/apps/app-lifeops/src/actions/subscriptions.d.ts.map +1 -1
  22. package/apps/app-lifeops/src/actions/subscriptions.js +23 -84
  23. package/apps/app-lifeops/src/actions/website-blocker.d.ts.map +1 -1
  24. package/apps/app-lifeops/src/actions/website-blocker.js +1 -3
  25. package/apps/app-lifeops/src/lifeops/repository.d.ts +14 -0
  26. package/apps/app-lifeops/src/lifeops/repository.d.ts.map +1 -1
  27. package/apps/app-lifeops/src/lifeops/repository.js +25 -0
  28. package/apps/app-lifeops/src/lifeops/service-helpers-browser.d.ts.map +1 -1
  29. package/apps/app-lifeops/src/lifeops/service-helpers-browser.js +8 -0
  30. package/apps/app-lifeops/src/lifeops/service-mixin-reminders.js +5 -1
  31. package/apps/app-lifeops/src/lifeops/service-mixin-workflows.d.ts +2 -1
  32. package/apps/app-lifeops/src/lifeops/service-mixin-workflows.d.ts.map +1 -1
  33. package/apps/app-lifeops/src/lifeops/service-mixin-workflows.js +187 -13
  34. package/apps/app-lifeops/src/lifeops/service-normalize-connector.d.ts.map +1 -1
  35. package/apps/app-lifeops/src/lifeops/service-normalize-connector.js +52 -1
  36. package/apps/app-lifeops/src/lifeops/service-types.d.ts +8 -0
  37. package/apps/app-lifeops/src/lifeops/service-types.d.ts.map +1 -1
  38. package/apps/app-lifeops/src/lifeops/service.d.ts +5 -0
  39. package/apps/app-lifeops/src/lifeops/service.d.ts.map +1 -1
  40. package/package.json +5 -5
  41. package/packages/agent/src/actions/app-control.d.ts.map +1 -1
  42. package/packages/agent/src/actions/app-control.js +60 -0
  43. package/packages/agent/src/actions/browser-session.d.ts.map +1 -1
  44. package/packages/agent/src/actions/browser-session.js +30 -0
  45. package/packages/agent/src/actions/entity-actions.d.ts.map +1 -1
  46. package/packages/agent/src/actions/entity-actions.js +90 -0
  47. package/packages/agent/src/actions/extract-page.d.ts.map +1 -1
  48. package/packages/agent/src/actions/extract-page.js +30 -0
  49. package/packages/agent/src/actions/read-channel.d.ts.map +1 -1
  50. package/packages/agent/src/actions/read-channel.js +30 -0
  51. package/packages/agent/src/actions/restart.d.ts.map +1 -1
  52. package/packages/agent/src/actions/restart.js +30 -0
  53. package/packages/agent/src/actions/search-conversations.d.ts.map +1 -1
  54. package/packages/agent/src/actions/search-conversations.js +30 -0
  55. package/packages/agent/src/actions/send-admin-message.d.ts.map +1 -1
  56. package/packages/agent/src/actions/send-admin-message.js +30 -0
  57. package/packages/agent/src/actions/send-message.d.ts.map +1 -1
  58. package/packages/agent/src/actions/send-message.js +30 -0
  59. package/packages/agent/src/actions/set-user-name.d.ts.map +1 -1
  60. package/packages/agent/src/actions/set-user-name.js +30 -0
  61. package/packages/agent/src/actions/skill-command.d.ts.map +1 -1
  62. package/packages/agent/src/actions/skill-command.js +1 -0
  63. package/packages/agent/src/actions/terminal.d.ts.map +1 -1
  64. package/packages/agent/src/actions/terminal.js +43 -144
  65. package/packages/agent/src/actions/web-search.d.ts.map +1 -1
  66. package/packages/agent/src/actions/web-search.js +8 -0
  67. package/packages/agent/src/runtime/eliza.js +2 -2
  68. package/packages/app-core/src/api/automations-compat-routes.d.ts.map +1 -1
  69. package/packages/app-core/src/api/automations-compat-routes.js +20 -0
  70. package/packages/app-core/src/api/client-types-config.d.ts +1 -1
  71. package/packages/app-core/src/api/client-types-config.d.ts.map +1 -1
  72. package/packages/app-core/src/components/pages/AutomationsView.d.ts.map +1 -1
  73. package/packages/app-core/src/components/pages/AutomationsView.js +3 -0
  74. package/packages/shared/src/contracts/lifeops.d.ts +29 -1
  75. package/packages/shared/src/contracts/lifeops.d.ts.map +1 -1
  76. package/packages/shared/src/contracts/lifeops.js +14 -1
@@ -1 +1 @@
1
- {"version":3,"file":"autofill.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/actions/autofill.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAEL,KAAK,MAAM,EAKZ,MAAM,eAAe,CAAC;AA2BvB,iBAAe,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAK3E;AAED,iBAAe,eAAe,CAC5B,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,SAAS,MAAM,EAAE,GACzB,OAAO,CAAC,IAAI,CAAC,CAGf;AAED,iBAAe,kBAAkB,CAC/B,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAY5B;AA2FD,eAAO,MAAM,sBAAsB,EAAE,MAwIpC,CAAC;AAOF,eAAO,MAAM,0BAA0B,EAAE,MAmFxC,CAAC;AAEF,eAAO,MAAM,2BAA2B,EAAE,MAgCzC,CAAC;AAEF,eAAO,MAAM,UAAU;;;;;CAKtB,CAAC"}
1
+ {"version":3,"file":"autofill.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/actions/autofill.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAEL,KAAK,MAAM,EAMZ,MAAM,eAAe,CAAC;AA2BvB,iBAAe,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAK3E;AAED,iBAAe,eAAe,CAC5B,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,SAAS,MAAM,EAAE,GACzB,OAAO,CAAC,IAAI,CAAC,CAGf;AAED,iBAAe,kBAAkB,CAC/B,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAY5B;AA2FD,eAAO,MAAM,sBAAsB,EAAE,MAsKpC,CAAC;AAOF,eAAO,MAAM,0BAA0B,EAAE,MAiHxC,CAAC;AAEF,eAAO,MAAM,2BAA2B,EAAE,MA8DzC,CAAC;AAEF,eAAO,MAAM,UAAU;;;;;CAKtB,CAAC"}
@@ -232,6 +232,36 @@ export const requestFieldFillAction = {
232
232
  schema: { type: "string" },
233
233
  },
234
234
  ],
235
+ examples: [
236
+ [
237
+ {
238
+ name: "{{name1}}",
239
+ content: {
240
+ text: "Can you log me into github? I'm on the sign-in page.",
241
+ },
242
+ },
243
+ {
244
+ name: "{{agentName}}",
245
+ content: {
246
+ text: "Requested password autofill on github.com via the browser extension.",
247
+ },
248
+ },
249
+ ],
250
+ [
251
+ {
252
+ name: "{{name1}}",
253
+ content: {
254
+ text: "Fill in my email on this signup form.",
255
+ },
256
+ },
257
+ {
258
+ name: "{{agentName}}",
259
+ content: {
260
+ text: "Requested email autofill on example.com via the browser extension.",
261
+ },
262
+ },
263
+ ],
264
+ ],
235
265
  };
236
266
  export const addAutofillWhitelistAction = {
237
267
  name: "ADD_AUTOFILL_WHITELIST",
@@ -303,6 +333,36 @@ export const addAutofillWhitelistAction = {
303
333
  schema: { type: "boolean" },
304
334
  },
305
335
  ],
336
+ examples: [
337
+ [
338
+ {
339
+ name: "{{name1}}",
340
+ content: {
341
+ text: "Yes, trust notion.so for autofill going forward.",
342
+ },
343
+ },
344
+ {
345
+ name: "{{agentName}}",
346
+ content: {
347
+ text: "Added notion.so to the autofill whitelist.",
348
+ },
349
+ },
350
+ ],
351
+ [
352
+ {
353
+ name: "{{name1}}",
354
+ content: {
355
+ text: "Go ahead and approve linear.app for password autofill.",
356
+ },
357
+ },
358
+ {
359
+ name: "{{agentName}}",
360
+ content: {
361
+ text: "Added linear.app to the autofill whitelist.",
362
+ },
363
+ },
364
+ ],
365
+ ],
306
366
  };
307
367
  export const listAutofillWhitelistAction = {
308
368
  name: "LIST_AUTOFILL_WHITELIST",
@@ -331,6 +391,36 @@ export const listAutofillWhitelistAction = {
331
391
  };
332
392
  },
333
393
  parameters: [],
394
+ examples: [
395
+ [
396
+ {
397
+ name: "{{name1}}",
398
+ content: {
399
+ text: "Which sites are allowed for autofill right now?",
400
+ },
401
+ },
402
+ {
403
+ name: "{{agentName}}",
404
+ content: {
405
+ text: "Autofill whitelist (4 entries): github.com, notion.so, linear.app, example.com",
406
+ },
407
+ },
408
+ ],
409
+ [
410
+ {
411
+ name: "{{name1}}",
412
+ content: {
413
+ text: "Show me my trusted sites.",
414
+ },
415
+ },
416
+ {
417
+ name: "{{agentName}}",
418
+ content: {
419
+ text: "Autofill whitelist (3 entries): github.com, notion.so, linear.app",
420
+ },
421
+ },
422
+ ],
423
+ ],
334
424
  };
335
425
  export const __internal = {
336
426
  effectiveWhitelist,
@@ -1 +1 @@
1
- {"version":3,"file":"calendar.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/actions/calendar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EAKN,aAAa,EACb,MAAM,EACN,KAAK,EACN,MAAM,eAAe,CAAC;AAyCvB,KAAK,iBAAiB,GAClB,MAAM,GACN,YAAY,GACZ,eAAe,GACf,cAAc,GACd,cAAc,GACd,cAAc,GACd,aAAa,CAAC;AAuBlB,MAAM,MAAM,eAAe,GAAG;IAC5B,SAAS,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACpC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAkjDF,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,KAAK,GAAG,SAAS,EACxB,MAAM,EAAE,MAAM,EACd,QAAQ,SAA2B,GAClC,OAAO,CAAC,eAAe,CAAC,CA6J1B;AA2gCD,eAAO,MAAM,cAAc,EAAE,MAAM,GAAG;IACpC,8BAA8B,CAAC,EAAE,OAAO,CAAC;CAkqC1C,CAAC"}
1
+ {"version":3,"file":"calendar.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/actions/calendar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EAKN,aAAa,EACb,MAAM,EACN,KAAK,EACN,MAAM,eAAe,CAAC;AAyCvB,KAAK,iBAAiB,GAClB,MAAM,GACN,YAAY,GACZ,eAAe,GACf,cAAc,GACd,cAAc,GACd,cAAc,GACd,aAAa,CAAC;AAuBlB,MAAM,MAAM,eAAe,GAAG;IAC5B,SAAS,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACpC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAkjDF,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,KAAK,GAAG,SAAS,EACxB,MAAM,EAAE,MAAM,EACd,QAAQ,SAA2B,GAClC,OAAO,CAAC,eAAe,CAAC,CA6J1B;AA2gCD,eAAO,MAAM,cAAc,EAAE,MAAM,GAAG;IACpC,8BAA8B,CAAC,EAAE,OAAO,CAAC;CAmqC1C,CAAC"}
@@ -2124,6 +2124,7 @@ export const calendarAction = {
2124
2124
  "DO NOT use this action when the user is only making an observation like 'my calendar has been crazy this quarter' unless they actually ask you to inspect or change calendar state. " +
2125
2125
  "DO NOT use this action for email inbox work, drafting or sending emails — use GMAIL_ACTION instead. " +
2126
2126
  "DO NOT use this action for personal habits, goals, routines, or reminders — use LIFE instead. " +
2127
+ "DO NOT use this action for Calendly — any request that mentions Calendly by name, or passes a calendly.com / api.calendly.com URL (including an eventTypeUri), belongs to the CALENDLY action, which is a separate product from Google Calendar. " +
2127
2128
  "This action provides the final grounded reply; do not pair it with a speculative REPLY action." +
2128
2129
  " DO NOT use this action when the user asks to 'help schedule', 'help me schedule', 'set up a meeting with', 'find a time with', 'find us a time', 'find a slot with', or otherwise wants to negotiate a meeting with a person or team WITHOUT naming a concrete date or time — that is SCHEDULING (subaction: start). Any time the request mentions a person/team AND no specific time, route it to SCHEDULING, not here. DO NOT use this action to 'propose', 'suggest', or 'offer' meeting time slots — that is PROPOSE_MEETING_TIMES. Use CALENDAR_ACTION only when the user specifies (or intends to specify) a concrete date/time for the event.",
2129
2130
  descriptionCompressed: "Google Calendar via LifeOps: view schedule, search events, create events, query travel. Not for email or habits.",
@@ -1 +1 @@
1
- {"version":3,"file":"calendly.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/actions/calendly.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,MAAM,EAMZ,MAAM,eAAe,CAAC;AA6GvB,eAAO,MAAM,cAAc,EAAE,MAqO5B,CAAC"}
1
+ {"version":3,"file":"calendly.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/actions/calendly.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,MAAM,EAMZ,MAAM,eAAe,CAAC;AA6GvB,eAAO,MAAM,cAAc,EAAE,MAgP5B,CAAC"}
@@ -72,8 +72,19 @@ export const calendlyAction = {
72
72
  "CALENDLY_AVAILABILITY",
73
73
  "CALENDLY_UPCOMING",
74
74
  "CALENDLY_BOOKING_LINK",
75
+ "CALENDLY_ACTION",
76
+ "CALENDLY_EVENT_TYPES",
77
+ "CALENDLY_SCHEDULED_EVENTS",
75
78
  ],
76
- description: "Work with Calendly: list event types, check availability, list scheduled events, generate single-use booking links. Subactions: list_event_types, availability, upcoming_events, single_use_link.",
79
+ description: "Work with Calendly specifically (calendly.com / api.calendly.com): " +
80
+ "list event types, check availability against a Calendly event type URI, " +
81
+ "list Calendly-scheduled events, generate Calendly single-use booking " +
82
+ "links. Subactions: list_event_types, availability, upcoming_events, " +
83
+ "single_use_link. " +
84
+ "Use this — NOT CALENDAR_ACTION — whenever the user mentions Calendly by " +
85
+ "name or passes a calendly.com / api.calendly.com URL. CALENDAR_ACTION " +
86
+ "is for Google Calendar; CALENDLY is its own third-party scheduling " +
87
+ "product with a separate API, event-type URIs, and booking-link flow.",
77
88
  validate: async (runtime, message) => {
78
89
  if (!readCalendlyCredentialsFromEnv())
79
90
  return false;
@@ -1 +1 @@
1
- {"version":3,"file":"checkin.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/actions/checkin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAsB,MAAM,eAAe,CAAC;AAuBhE,eAAO,MAAM,uBAAuB,EAAE,MA8BrC,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,MA0BnC,CAAC"}
1
+ {"version":3,"file":"checkin.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/actions/checkin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAqC,MAAM,eAAe,CAAC;AAuB/E,eAAO,MAAM,uBAAuB,EAAE,MA4DrC,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,MAwDnC,CAAC"}
@@ -44,6 +44,36 @@ export const runMorningCheckinAction = {
44
44
  };
45
45
  },
46
46
  parameters: [],
47
+ examples: [
48
+ [
49
+ {
50
+ name: "{{name1}}",
51
+ content: {
52
+ text: "Let's do my morning check-in.",
53
+ },
54
+ },
55
+ {
56
+ name: "{{agentName}}",
57
+ content: {
58
+ text: "Here's your morning review: 2 overdue todos, 3 meetings today, and yesterday you closed out the onboarding draft.",
59
+ },
60
+ },
61
+ ],
62
+ [
63
+ {
64
+ name: "{{name1}}",
65
+ content: {
66
+ text: "What's on my plate this morning?",
67
+ },
68
+ },
69
+ {
70
+ name: "{{agentName}}",
71
+ content: {
72
+ text: "Morning check-in ready: 1 overdue todo, 2 meetings today, and yesterday's wins included the PR review.",
73
+ },
74
+ },
75
+ ],
76
+ ],
47
77
  };
48
78
  export const runNightCheckinAction = {
49
79
  name: "RUN_NIGHT_CHECKIN",
@@ -69,4 +99,34 @@ export const runNightCheckinAction = {
69
99
  };
70
100
  },
71
101
  parameters: [],
102
+ examples: [
103
+ [
104
+ {
105
+ name: "{{name1}}",
106
+ content: {
107
+ text: "Ready to wrap up for the day.",
108
+ },
109
+ },
110
+ {
111
+ name: "{{agentName}}",
112
+ content: {
113
+ text: "Here's your night check-in: 3 meetings done, 2 wins captured, 1 todo still open for tomorrow.",
114
+ },
115
+ },
116
+ ],
117
+ [
118
+ {
119
+ name: "{{name1}}",
120
+ content: {
121
+ text: "How did today go?",
122
+ },
123
+ },
124
+ {
125
+ name: "{{agentName}}",
126
+ content: {
127
+ text: "Night recap ready: you closed 2 meetings and shipped the release notes; 1 todo rolls over.",
128
+ },
129
+ },
130
+ ],
131
+ ],
72
132
  };
@@ -1 +1 @@
1
- {"version":3,"file":"intent-sync.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/actions/intent-sync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EAMP,MAAM,eAAe,CAAC;AA+JvB,eAAO,MAAM,gBAAgB,EAAE,MAqS9B,CAAC"}
1
+ {"version":3,"file":"intent-sync.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/actions/intent-sync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EAMP,MAAM,eAAe,CAAC;AAsIvB,eAAO,MAAM,gBAAgB,EAAE,MA6R9B,CAAC"}
@@ -86,35 +86,6 @@ function normalizeParams(raw) {
86
86
  }
87
87
  return {};
88
88
  }
89
- function inferSubactionFromText(text) {
90
- const t = text.toLowerCase();
91
- if (/\b(broadcast|send|publish|push|ping)\b/.test(t))
92
- return "broadcast";
93
- if (/\b(list|show|what.*pending)\b/.test(t))
94
- return "list_pending";
95
- if (/\b(acknowledge|ack|mark\s+done)\b/.test(t))
96
- return "acknowledge";
97
- if (/\b(prune|expire|clean)\b/.test(t))
98
- return "prune_expired";
99
- return undefined;
100
- }
101
- function inferKindFromText(text) {
102
- const t = text.toLowerCase();
103
- if (/\b(reminder|stretch|break|vitamin|hydrate|water|walk)\b/.test(t)) {
104
- if (isKind("routine_reminder"))
105
- return "routine_reminder";
106
- }
107
- if (/\b(urgent|help|need)\b/.test(t)) {
108
- if (isKind("attention_request"))
109
- return "attention_request";
110
- }
111
- if (/\b(request|ask|please)\b/.test(t)) {
112
- if (isKind("user_action_requested")) {
113
- return "user_action_requested";
114
- }
115
- }
116
- return undefined;
117
- }
118
89
  export const intentSyncAction = {
119
90
  name: ACTION_NAME,
120
91
  similes: [
@@ -255,14 +226,13 @@ export const intentSyncAction = {
255
226
  }
256
227
  const rawParams = options?.parameters;
257
228
  const params = normalizeParams(rawParams);
258
- const messageText = typeof message.content?.text === "string" ? message.content.text : "";
259
229
  let subactionRaw = coerceString(params.subaction);
260
230
  if (!subactionRaw) {
261
- // Tolerate LLMs that emit the verb in `intent` / `mode` / plain text.
231
+ // Tolerate LLMs that emit the verb in `mode` / `action` field name
232
+ // variants (parameter-key normalization only — not free-text inference).
262
233
  subactionRaw =
263
234
  coerceString(params.mode) ??
264
- coerceString(params.action) ??
265
- inferSubactionFromText(messageText);
235
+ coerceString(params.action);
266
236
  }
267
237
  if (!subactionRaw) {
268
238
  return validationTerminate("MISSING_SUBACTION", "I couldn't tell whether you wanted to broadcast, list, acknowledge, or prune an intent. Please say which.");
@@ -272,14 +242,7 @@ export const intentSyncAction = {
272
242
  }
273
243
  const subaction = subactionRaw;
274
244
  if (subaction === "broadcast") {
275
- let kindRaw = coerceString(params.kind);
276
- if (!kindRaw || !isKind(kindRaw)) {
277
- // Only infer when the current value is clearly wrong/missing — not
278
- // when it's already a valid kind.
279
- const inferred = inferKindFromText(messageText);
280
- if (inferred)
281
- kindRaw = inferred;
282
- }
245
+ const kindRaw = coerceString(params.kind);
283
246
  const title = coerceString(params.title);
284
247
  const body = coerceString(params.body);
285
248
  if (!kindRaw) {
@@ -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;AA44EvB,eAAO,MAAM,UAAU,EAAE,MAAM,GAAG;IAChC,8BAA8B,CAAC,EAAE,OAAO,CAAC;CAisD1C,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;AA44EvB,eAAO,MAAM,UAAU,EAAE,MAAM,GAAG;IAChC,8BAA8B,CAAC,EAAE,OAAO,CAAC;CA6sD1C,CAAC"}
@@ -2295,15 +2295,24 @@ export const lifeAction = {
2295
2295
  data: toActionData(ctx),
2296
2296
  };
2297
2297
  }
2298
- const timeRangeHint = intent.toLowerCase();
2299
- const range = /\btomorrow\b/.test(timeRangeHint)
2298
+ // The planner extracts the time window as a structured `when` param
2299
+ // ("today" | "tomorrow" | "this_week"), so we never re-parse the
2300
+ // free-form `intent` string at runtime. Default to "today" when the
2301
+ // caller omits it.
2302
+ const whenRaw = detailString(details, "when")?.toLowerCase().trim();
2303
+ const when = whenRaw === "tomorrow"
2304
+ ? "tomorrow"
2305
+ : whenRaw === "this_week" || whenRaw === "this week" || whenRaw === "week"
2306
+ ? "this_week"
2307
+ : "today";
2308
+ const range = when === "tomorrow"
2300
2309
  ? dayRange(1)
2301
- : /\b(this week|week)\b/.test(timeRangeHint)
2310
+ : when === "this_week"
2302
2311
  ? weekRange()
2303
2312
  : dayRange(0);
2304
- const label = /\btomorrow\b/.test(timeRangeHint)
2313
+ const label = when === "tomorrow"
2305
2314
  ? "tomorrow"
2306
- : /\b(this week|week)\b/.test(timeRangeHint)
2315
+ : when === "this_week"
2307
2316
  ? "this week"
2308
2317
  : "today";
2309
2318
  const feed = await service.getCalendarFeed(INTERNAL_URL, {
@@ -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;AAwJvB,eAAO,MAAM,qBAAqB,EAAE,MAwJnC,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;AAsHvB,eAAO,MAAM,qBAAqB,EAAE,MAgJnC,CAAC"}
@@ -1,30 +1,6 @@
1
1
  import { logger, } from "@elizaos/core";
2
2
  import { hasOwnerAccess } from "@elizaos/agent/security/access";
3
3
  import { injectCredentialToClipboard, listPasswordItems, searchPasswordItems, } from "../lifeops/password-manager-bridge.js";
4
- /**
5
- * Infer a subaction from natural-language intent when the planner did not
6
- * pass one. Keeps the benchmark/common-path green without a planner-round-trip.
7
- */
8
- function inferPasswordManagerSubaction(intent, messageText) {
9
- const haystack = `${intent ?? ""}\n${messageText ?? ""}`.toLowerCase();
10
- if (!haystack.trim())
11
- return "";
12
- if (/\b(copy|paste|fill)\s+(the\s+)?password\b/.test(haystack)) {
13
- return "inject_password";
14
- }
15
- if (/\b(copy|paste|fill)\s+(the\s+)?username\b/.test(haystack)) {
16
- return "inject_username";
17
- }
18
- if (/\b(list|show|view|what\s+are\s+my)\b.*\b(logins|passwords|credentials|saved)\b/.test(haystack) ||
19
- /\b(saved\s+logins|all\s+logins)\b/.test(haystack)) {
20
- return "list";
21
- }
22
- if (/\b(look\s*up|find|search|what(?:'s|\s+is)?|where\s+is)\b.*\b(login|password|credential)\b/.test(haystack) ||
23
- /\b(password\s+for|login\s+for|credential\s+for)\b/.test(haystack)) {
24
- return "search";
25
- }
26
- return "";
27
- }
28
4
  function readConfig(runtime) {
29
5
  const account = process.env.ELIZA_1PASSWORD_ACCOUNT?.trim() ||
30
6
  (() => {
@@ -120,14 +96,7 @@ export const passwordManagerAction = {
120
96
  return failure("PERMISSION_DENIED");
121
97
  }
122
98
  const params = options?.parameters ?? {};
123
- const messageText = typeof message?.content?.text === "string"
124
- ? (message.content.text)
125
- : "";
126
- const explicitSubaction = (params.subaction ?? "").toString().trim().toLowerCase();
127
- const inferredSubaction = explicitSubaction
128
- ? ""
129
- : inferPasswordManagerSubaction(params.intent, messageText);
130
- const subaction = explicitSubaction || inferredSubaction;
99
+ const subaction = (params.subaction ?? "").toString().trim().toLowerCase();
131
100
  const config = readConfig(runtime);
132
101
  if (subaction === "search") {
133
102
  const query = (params.query ?? params.intent ?? "").toString().trim();
@@ -1 +1 @@
1
- {"version":3,"file":"remote-desktop.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/actions/remote-desktop.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,MAAM,EAMZ,MAAM,eAAe,CAAC;AAsFvB,eAAO,MAAM,mBAAmB,EAAE,MAoPjC,CAAC"}
1
+ {"version":3,"file":"remote-desktop.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/actions/remote-desktop.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,MAAM,EAMZ,MAAM,eAAe,CAAC;AAiDvB,eAAO,MAAM,mBAAmB,EAAE,MA6OjC,CAAC"}
@@ -13,40 +13,6 @@ function coerceSubaction(value) {
13
13
  }
14
14
  return undefined;
15
15
  }
16
- /**
17
- * Infer a subaction from natural-language intent when the planner did not
18
- * pass one. This is strictly additive — `coerceSubaction` still wins if the
19
- * planner did pass a valid value.
20
- */
21
- function inferSubactionFromText(text) {
22
- if (!text)
23
- return undefined;
24
- const h = text.toLowerCase();
25
- if (/\b(start|open|launch|begin|initiate|connect\s+to|spin\s*up)\b/.test(h) &&
26
- /\b(remote|session|desktop|screen\s*share)\b/.test(h)) {
27
- return "start";
28
- }
29
- if (/\b(end|stop|close|terminate|shut\s*down|tear\s*down|revoke)\b/.test(h) &&
30
- /\b(remote|session|desktop)\b/.test(h)) {
31
- return "end";
32
- }
33
- if (/\b(status|check)\b.*\b(remote|session|desktop)\b/.test(h)) {
34
- return "status";
35
- }
36
- if (/\b(list|show|view)\b.*\b(remote|session|desktop)\b/.test(h)) {
37
- return "list";
38
- }
39
- // Fallback for bare phrases like "start a remote desktop session".
40
- if (/\bremote\s+desktop\b/.test(h) || /\bvnc\b/.test(h)) {
41
- if (/\bstart|open|launch|begin|initiate|connect\b/.test(h))
42
- return "start";
43
- if (/\bend|stop|close|terminate|shut|revoke\b/.test(h))
44
- return "end";
45
- if (/\blist|show|view\b/.test(h))
46
- return "list";
47
- }
48
- return undefined;
49
- }
50
16
  function formatSession(session) {
51
17
  const lines = [
52
18
  `Session ${session.id}`,
@@ -148,12 +114,7 @@ export const remoteDesktopAction = {
148
114
  }
149
115
  const params = (options?.parameters ??
150
116
  {});
151
- const messageText = typeof message?.content?.text === "string"
152
- ? (message.content.text)
153
- : undefined;
154
- const subaction = coerceSubaction(params.subaction) ??
155
- inferSubactionFromText(params.intent) ??
156
- inferSubactionFromText(messageText);
117
+ const subaction = coerceSubaction(params.subaction);
157
118
  if (!subaction) {
158
119
  return {
159
120
  text: "Missing or invalid subaction. Use one of: start, status, end, list.",
@@ -1 +1 @@
1
- {"version":3,"file":"scheduling.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/actions/scheduling.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EACV,MAAM,EAOP,MAAM,eAAe,CAAC;AAMvB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAO9E,OAAO,EAIL,KAAK,yBAAyB,EAG/B,MAAM,6BAA6B,CAAC;AAUrC,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG;IAC1C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAkGF,wBAAgB,oBAAoB,CAAC,IAAI,EAAE;IACzC,GAAG,EAAE,IAAI,CAAC;IACV,WAAW,EAAE,IAAI,CAAC;IAClB,SAAS,EAAE,IAAI,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,yBAAyB,CAAC;IACvC,MAAM,EAAE,SAAS,oBAAoB,EAAE,CAAC;CACzC,GAAG,mBAAmB,EAAE,CAwExB;AAiCD,eAAO,MAAM,yBAAyB,EAAE,MAAM,GAAG;IAC/C,8BAA8B,CAAC,EAAE,OAAO,CAAC;CA8J1C,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,MAoGrC,CAAC;AAEF,eAAO,MAAM,8BAA8B,EAAE,MAAM,GAAG;IACpD,8BAA8B,CAAC,EAAE,OAAO,CAAC;CAqI1C,CAAC;AAsLF,eAAO,MAAM,gBAAgB,EAAE,MAyS9B,CAAC"}
1
+ {"version":3,"file":"scheduling.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/actions/scheduling.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EACV,MAAM,EAOP,MAAM,eAAe,CAAC;AAMvB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAO9E,OAAO,EAIL,KAAK,yBAAyB,EAG/B,MAAM,6BAA6B,CAAC;AAUrC,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG;IAC1C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAkGF,wBAAgB,oBAAoB,CAAC,IAAI,EAAE;IACzC,GAAG,EAAE,IAAI,CAAC;IACV,WAAW,EAAE,IAAI,CAAC;IAClB,SAAS,EAAE,IAAI,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,yBAAyB,CAAC;IACvC,MAAM,EAAE,SAAS,oBAAoB,EAAE,CAAC;CACzC,GAAG,mBAAmB,EAAE,CAwExB;AAiCD,eAAO,MAAM,yBAAyB,EAAE,MAAM,GAAG;IAC/C,8BAA8B,CAAC,EAAE,OAAO,CAAC;CA8J1C,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,MAkIrC,CAAC;AAEF,eAAO,MAAM,8BAA8B,EAAE,MAAM,GAAG;IACpD,8BAA8B,CAAC,EAAE,OAAO,CAAC;CAqI1C,CAAC;AAsLF,eAAO,MAAM,gBAAgB,EAAE,MAyS9B,CAAC"}
@@ -412,6 +412,36 @@ export const checkAvailabilityAction = {
412
412
  schema: { type: "string" },
413
413
  },
414
414
  ],
415
+ examples: [
416
+ [
417
+ {
418
+ name: "{{name1}}",
419
+ content: {
420
+ text: "Am I free tomorrow between 2pm and 4pm?",
421
+ },
422
+ },
423
+ {
424
+ name: "{{agentName}}",
425
+ content: {
426
+ text: "You're free from Tue, Apr 20, 2:00 PM to Tue, Apr 20, 4:00 PM.",
427
+ },
428
+ },
429
+ ],
430
+ [
431
+ {
432
+ name: "{{name1}}",
433
+ content: {
434
+ text: "Do I have anything on my calendar Friday afternoon?",
435
+ },
436
+ },
437
+ {
438
+ name: "{{agentName}}",
439
+ content: {
440
+ text: "You have 1 conflict in that window: Design review with the team.",
441
+ },
442
+ },
443
+ ],
444
+ ],
415
445
  };
416
446
  export const updateMeetingPreferencesAction = {
417
447
  name: "UPDATE_MEETING_PREFERENCES",
@@ -1 +1 @@
1
- {"version":3,"file":"screen-time.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/actions/screen-time.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,MAAM,EAKP,MAAM,eAAe,CAAC;AAmEvB,eAAO,MAAM,gBAAgB,EAAE,MA0N9B,CAAC"}
1
+ {"version":3,"file":"screen-time.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/actions/screen-time.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,MAAM,EAKP,MAAM,eAAe,CAAC;AA8CvB,eAAO,MAAM,gBAAgB,EAAE,MAyN9B,CAAC"}
@@ -29,24 +29,6 @@ function formatSeconds(seconds) {
29
29
  }
30
30
  return `${m}m`;
31
31
  }
32
- function inferSubaction(intent, messageBody) {
33
- const text = `${intent ?? ""} ${messageBody}`.toLowerCase();
34
- if (/\btoday\b/.test(text))
35
- return "today";
36
- if (/\b(this week|weekly|past (7|seven) days|last week)\b/.test(text)) {
37
- return "weekly";
38
- }
39
- if (/\b(on|at|in|spent)\b.*\b(website|site|domain|url)\b/.test(text)) {
40
- return "by_website";
41
- }
42
- if (/\b(in|on|using|app)\b/.test(text) && /\b(app|application)\b/.test(text)) {
43
- return "by_app";
44
- }
45
- if (/\b(top|most used|top apps|top websites)\b/.test(text)) {
46
- return "summary";
47
- }
48
- return "summary";
49
- }
50
32
  export const screenTimeAction = {
51
33
  name: "SCREEN_TIME",
52
34
  similes: ["SCREENTIME", "APP_USAGE", "WEBSITE_USAGE", "DWELL_TIME"],
@@ -64,8 +46,7 @@ export const screenTimeAction = {
64
46
  return { text, success: false, data: { error: "PERMISSION_DENIED" } };
65
47
  }
66
48
  const params = getParams(options);
67
- const body = messageText(message);
68
- const subaction = params.subaction ?? inferSubaction(params.intent, body);
49
+ const subaction = params.subaction ?? "summary";
69
50
  const service = new LifeOpsService(runtime);
70
51
  if (subaction === "today") {
71
52
  const date = params.date ?? todayIso();
@@ -1 +1 @@
1
- {"version":3,"file":"subscriptions.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/actions/subscriptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EAOP,MAAM,eAAe,CAAC;AAoUvB,eAAO,MAAM,mBAAmB,EAAE,MAAM,GAAG;IACzC,8BAA8B,CAAC,EAAE,OAAO,CAAC;CAuC1C,CAAC"}
1
+ {"version":3,"file":"subscriptions.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/actions/subscriptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EAOP,MAAM,eAAe,CAAC;AA6PvB,eAAO,MAAM,mBAAmB,EAAE,MAAM,GAAG;IACzC,8BAA8B,CAAC,EAAE,OAAO,CAAC;CAuC1C,CAAC"}