@elizaos/shared 2.0.0-alpha.215 → 2.0.0-alpha.333

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 (54) hide show
  1. package/app-hero-art.d.ts +13 -0
  2. package/app-hero-art.d.ts.map +1 -0
  3. package/app-hero-art.js +378 -0
  4. package/app-hero-art.js.map +1 -0
  5. package/config/types.agent-defaults.d.ts +2 -23
  6. package/config/types.agent-defaults.d.ts.map +1 -1
  7. package/config/types.eliza.d.ts +1 -1
  8. package/config/types.messages.d.ts +3 -3
  9. package/contracts/apps.d.ts +3 -2
  10. package/contracts/apps.d.ts.map +1 -1
  11. package/contracts/apps.js.map +1 -1
  12. package/contracts/index.d.ts +1 -1
  13. package/contracts/index.d.ts.map +1 -1
  14. package/contracts/index.js +1 -1
  15. package/contracts/index.js.map +1 -1
  16. package/contracts/lifeops-extensions.d.ts +2 -0
  17. package/contracts/lifeops-extensions.d.ts.map +1 -1
  18. package/contracts/lifeops-extensions.js.map +1 -1
  19. package/contracts/lifeops.d.ts +791 -240
  20. package/contracts/lifeops.d.ts.map +1 -1
  21. package/contracts/lifeops.js +121 -18
  22. package/contracts/lifeops.js.map +1 -1
  23. package/contracts/onboarding.d.ts +1 -51
  24. package/contracts/onboarding.d.ts.map +1 -1
  25. package/contracts/onboarding.js +1 -1
  26. package/contracts/onboarding.js.map +1 -1
  27. package/contracts/service-routing.d.ts.map +1 -1
  28. package/contracts/service-routing.js +1 -5
  29. package/contracts/service-routing.js.map +1 -1
  30. package/contracts/wallet.d.ts +117 -55
  31. package/contracts/wallet.d.ts.map +1 -1
  32. package/contracts/wallet.js.map +1 -1
  33. package/eliza-core-roles.d.ts.map +1 -1
  34. package/eliza-core-roles.js +2 -6
  35. package/eliza-core-roles.js.map +1 -1
  36. package/i18n/generated/validation-keyword-data.d.ts +13 -0
  37. package/i18n/generated/validation-keyword-data.d.ts.map +1 -1
  38. package/i18n/generated/validation-keyword-data.js +13 -0
  39. package/i18n/generated/validation-keyword-data.js.map +1 -1
  40. package/i18n/keyword-matching.d.ts +2 -2
  41. package/i18n/keyword-matching.js +2 -2
  42. package/index.d.ts +2 -0
  43. package/index.d.ts.map +1 -1
  44. package/index.js +2 -0
  45. package/index.js.map +1 -1
  46. package/package.json +27 -7
  47. package/recent-messages-state.d.ts +10 -0
  48. package/recent-messages-state.d.ts.map +1 -0
  49. package/recent-messages-state.js +12 -0
  50. package/recent-messages-state.js.map +1 -0
  51. package/type-guards.d.ts +29 -0
  52. package/type-guards.d.ts.map +1 -0
  53. package/type-guards.js +44 -0
  54. package/type-guards.js.map +1 -0
@@ -24,7 +24,7 @@ export type LifeOpsWorkflowTriggerType = (typeof LIFEOPS_WORKFLOW_TRIGGER_TYPES)
24
24
  * publishes matching occurrences to `runDueEventWorkflows`, and — optionally —
25
25
  * a filter shape under {@link LifeOpsEventFilters}.
26
26
  */
27
- export declare const LIFEOPS_EVENT_KINDS: readonly ["calendar.event.ended"];
27
+ export declare const LIFEOPS_EVENT_KINDS: readonly ["calendar.event.ended", "gmail.message.received", "gmail.thread.needs_response", "lifeops.sleep.onset_candidate", "lifeops.sleep.detected", "lifeops.sleep.ended", "lifeops.wake.observed", "lifeops.wake.confirmed", "lifeops.nap.detected", "lifeops.bedtime.imminent", "lifeops.regularity.changed"];
28
28
  export type LifeOpsEventKind = (typeof LIFEOPS_EVENT_KINDS)[number];
29
29
  export interface LifeOpsCalendarEventEndedFilters {
30
30
  /** Only fire for events on these calendar ids (e.g. "primary"). */
@@ -36,9 +36,80 @@ export interface LifeOpsCalendarEventEndedFilters {
36
36
  /** Only fire when one attendee email contains one of these substrings. */
37
37
  attendeeEmailIncludesAny?: string[];
38
38
  }
39
+ export interface LifeOpsGmailEventFilters {
40
+ /** Only fire for these Google connector grant ids. */
41
+ grantIds?: string[];
42
+ /** Only fire when the sender email/display contains one of these substrings. */
43
+ fromIncludesAny?: string[];
44
+ /** Only fire when the subject contains one of these case-insensitive substrings. */
45
+ subjectIncludesAny?: string[];
46
+ /** Only fire when at least one Gmail label id is present. */
47
+ labelIds?: string[];
48
+ /** Only fire when LifeOps classified the message/thread as needing a reply. */
49
+ requiresReplyNeeded?: boolean;
50
+ }
51
+ export interface LifeOpsSleepOnsetCandidateFilters {
52
+ minConfidence?: number;
53
+ }
54
+ export interface LifeOpsSleepDetectedFilters {
55
+ minConfidence?: number;
56
+ }
57
+ export interface LifeOpsSleepEndedFilters {
58
+ minConfidence?: number;
59
+ }
60
+ export interface LifeOpsWakeObservedFilters {
61
+ offsetMinutes?: number;
62
+ minConfidence?: number;
63
+ }
64
+ export interface LifeOpsWakeConfirmedFilters {
65
+ offsetMinutes?: number;
66
+ minConfidence?: number;
67
+ }
68
+ export interface LifeOpsNapDetectedFilters {
69
+ minConfidence?: number;
70
+ maxDurationMinutes?: number;
71
+ }
72
+ export interface LifeOpsBedtimeImminentFilters {
73
+ minutesBefore?: number;
74
+ minConfidence?: number;
75
+ }
76
+ export interface LifeOpsRegularityChangedFilters {
77
+ /** Fires when regularity class transitions into this value. */
78
+ becomes?: LifeOpsRegularityClass;
79
+ }
39
80
  export type LifeOpsEventFilters = {
40
81
  kind: "calendar.event.ended";
41
82
  filters?: LifeOpsCalendarEventEndedFilters;
83
+ } | {
84
+ kind: "gmail.message.received";
85
+ filters?: LifeOpsGmailEventFilters;
86
+ } | {
87
+ kind: "gmail.thread.needs_response";
88
+ filters?: LifeOpsGmailEventFilters;
89
+ } | {
90
+ kind: "lifeops.sleep.onset_candidate";
91
+ filters?: LifeOpsSleepOnsetCandidateFilters;
92
+ } | {
93
+ kind: "lifeops.sleep.detected";
94
+ filters?: LifeOpsSleepDetectedFilters;
95
+ } | {
96
+ kind: "lifeops.sleep.ended";
97
+ filters?: LifeOpsSleepEndedFilters;
98
+ } | {
99
+ kind: "lifeops.wake.observed";
100
+ filters?: LifeOpsWakeObservedFilters;
101
+ } | {
102
+ kind: "lifeops.wake.confirmed";
103
+ filters?: LifeOpsWakeConfirmedFilters;
104
+ } | {
105
+ kind: "lifeops.nap.detected";
106
+ filters?: LifeOpsNapDetectedFilters;
107
+ } | {
108
+ kind: "lifeops.bedtime.imminent";
109
+ filters?: LifeOpsBedtimeImminentFilters;
110
+ } | {
111
+ kind: "lifeops.regularity.changed";
112
+ filters?: LifeOpsRegularityChangedFilters;
42
113
  };
43
114
  export declare const LIFEOPS_NEGOTIATION_STATES: readonly ["initiated", "proposals_sent", "awaiting_response", "confirmed", "cancelled"];
44
115
  export type LifeOpsNegotiationState = (typeof LIFEOPS_NEGOTIATION_STATES)[number];
@@ -83,9 +154,9 @@ export declare const LIFEOPS_CONNECTOR_EXECUTION_TARGETS: readonly ["local", "cl
83
154
  export type LifeOpsConnectorExecutionTarget = (typeof LIFEOPS_CONNECTOR_EXECUTION_TARGETS)[number];
84
155
  export declare const LIFEOPS_CONNECTOR_SOURCES_OF_TRUTH: readonly ["local_storage", "cloud_connection"];
85
156
  export type LifeOpsConnectorSourceOfTruth = (typeof LIFEOPS_CONNECTOR_SOURCES_OF_TRUTH)[number];
86
- export declare const LIFEOPS_GOOGLE_CAPABILITIES: readonly ["google.basic_identity", "google.calendar.read", "google.calendar.write", "google.gmail.triage", "google.gmail.send"];
157
+ export declare const LIFEOPS_GOOGLE_CAPABILITIES: readonly ["google.basic_identity", "google.calendar.read", "google.calendar.write", "google.gmail.triage", "google.gmail.send", "google.gmail.manage"];
87
158
  export type LifeOpsGoogleCapability = (typeof LIFEOPS_GOOGLE_CAPABILITIES)[number];
88
- export declare const LIFEOPS_X_CAPABILITIES: readonly ["x.read", "x.write"];
159
+ export declare const LIFEOPS_X_CAPABILITIES: readonly ["x.read", "x.write", "x.dm.read", "x.dm.write"];
89
160
  export type LifeOpsXCapability = (typeof LIFEOPS_X_CAPABILITIES)[number];
90
161
  export declare const LIFEOPS_SIGNAL_CAPABILITIES: readonly ["signal.read", "signal.send"];
91
162
  export type LifeOpsSignalCapability = (typeof LIFEOPS_SIGNAL_CAPABILITIES)[number];
@@ -94,9 +165,9 @@ export type LifeOpsDiscordCapability = (typeof LIFEOPS_DISCORD_CAPABILITIES)[num
94
165
  export declare const LIFEOPS_TELEGRAM_CAPABILITIES: readonly ["telegram.read", "telegram.send"];
95
166
  export type LifeOpsTelegramCapability = (typeof LIFEOPS_TELEGRAM_CAPABILITIES)[number];
96
167
  export declare function capabilitiesForSide<T extends string>(allCapabilities: readonly T[], side: LifeOpsConnectorSide): T[];
97
- export declare const LIFEOPS_REMINDER_CHANNELS: readonly ["in_app", "sms", "voice", "telegram", "discord", "signal", "whatsapp", "imessage"];
168
+ export declare const LIFEOPS_REMINDER_CHANNELS: readonly ["in_app", "sms", "voice", "telegram", "discord", "signal", "whatsapp", "imessage", "email", "push"];
98
169
  export type LifeOpsReminderChannel = (typeof LIFEOPS_REMINDER_CHANNELS)[number];
99
- export declare const LIFEOPS_CHANNEL_TYPES: readonly ["in_app", "sms", "voice", "telegram", "discord", "signal", "whatsapp", "imessage", "x", "browser"];
170
+ export declare const LIFEOPS_CHANNEL_TYPES: readonly ["in_app", "sms", "voice", "telegram", "discord", "signal", "whatsapp", "imessage", "x", "browser", "email", "push"];
100
171
  export type LifeOpsChannelType = (typeof LIFEOPS_CHANNEL_TYPES)[number];
101
172
  export declare const LIFEOPS_PRIVACY_CLASSES: readonly ["private", "shared", "public"];
102
173
  export type LifeOpsPrivacyClass = (typeof LIFEOPS_PRIVACY_CLASSES)[number];
@@ -117,9 +188,9 @@ export type LifeOpsReminderIntensityCompatibility = (typeof LIFEOPS_REMINDER_INT
117
188
  export type LifeOpsReminderIntensityInput = LifeOpsReminderIntensity | LifeOpsReminderIntensityCompatibility;
118
189
  export declare const LIFEOPS_REMINDER_PREFERENCE_SOURCES: readonly ["default", "global_policy", "definition_metadata"];
119
190
  export type LifeOpsReminderPreferenceSource = (typeof LIFEOPS_REMINDER_PREFERENCE_SOURCES)[number];
120
- export declare const LIFEOPS_OWNER_TYPES: readonly ["definition", "occurrence", "goal", "workflow", "calendar_event", "gmail_message", "connector", "channel_policy", "browser_session"];
191
+ export declare const LIFEOPS_OWNER_TYPES: readonly ["definition", "occurrence", "goal", "workflow", "calendar_event", "gmail_message", "connector", "channel_policy", "browser_session", "circadian_state"];
121
192
  export type LifeOpsOwnerType = (typeof LIFEOPS_OWNER_TYPES)[number];
122
- export declare const LIFEOPS_AUDIT_EVENT_TYPES: readonly ["definition_created", "definition_updated", "definition_deleted", "occurrence_generated", "occurrence_completed", "occurrence_skipped", "occurrence_snoozed", "goal_created", "goal_updated", "goal_deleted", "goal_reviewed", "calendar_event_created", "calendar_event_updated", "calendar_event_deleted", "gmail_triage_synced", "gmail_reply_drafted", "gmail_reply_sent", "gmail_message_sent", "reminder_due", "reminder_delivered", "reminder_blocked", "reminder_escalation_started", "reminder_escalation_resolved", "workflow_created", "workflow_updated", "workflow_run", "connector_grant_updated", "channel_policy_updated", "browser_session_created", "browser_session_updated", "x_post_sent", "seeding_offered"];
193
+ export declare const LIFEOPS_AUDIT_EVENT_TYPES: readonly ["definition_created", "definition_updated", "definition_deleted", "occurrence_generated", "occurrence_completed", "occurrence_skipped", "occurrence_snoozed", "goal_created", "goal_updated", "goal_deleted", "goal_reviewed", "calendar_event_created", "calendar_event_updated", "calendar_event_deleted", "gmail_triage_synced", "gmail_reply_drafted", "gmail_reply_sent", "gmail_message_sent", "reminder_due", "reminder_delivered", "reminder_blocked", "reminder_escalation_started", "reminder_escalation_resolved", "workflow_created", "workflow_updated", "workflow_run", "connector_grant_updated", "channel_policy_updated", "browser_session_created", "browser_session_updated", "x_post_sent", "seeding_offered", "circadian_event_emitted", "manual_override_accepted"];
123
194
  export type LifeOpsAuditEventType = (typeof LIFEOPS_AUDIT_EVENT_TYPES)[number];
124
195
  export declare const LIFEOPS_ACTORS: readonly ["agent", "user", "workflow", "connector"];
125
196
  export type LifeOpsActor = (typeof LIFEOPS_ACTORS)[number];
@@ -356,6 +427,50 @@ export type LifeOpsWorkflowSchedule = {
356
427
  kind: "cron";
357
428
  cronExpression: string;
358
429
  timezone: string;
430
+ } | {
431
+ kind: "relative_to_wake";
432
+ /** Minutes offset from wake anchor (wake.confirmed). Negative = before. */
433
+ offsetMinutes: number;
434
+ timezone: string;
435
+ onDays?: number[];
436
+ /** Minimum regularity required before projecting an anchor. Default: `regular`. */
437
+ requireRegularityAtLeast?: LifeOpsRegularityClass;
438
+ /**
439
+ * Minutes of sustained awake state after `wake.observed` required before
440
+ * the workflow fires. When set, the resolver waits for a `wake.confirmed`
441
+ * event rather than using the raw wake anchor.
442
+ */
443
+ stabilityWindowMinutes?: number;
444
+ } | {
445
+ kind: "relative_to_bedtime";
446
+ offsetMinutes: number;
447
+ timezone: string;
448
+ onDays?: number[];
449
+ requireRegularityAtLeast?: LifeOpsRegularityClass;
450
+ } | {
451
+ /**
452
+ * Fires during the canonical "morning" window anchored on the latest
453
+ * wake.confirmed. The window starts at `wakeConfirmedAt` and ends
454
+ * `windowMinutesFromWake` later (default 240). Workflow scheduler emits
455
+ * exactly once per morning window when the workflow becomes eligible.
456
+ */
457
+ kind: "during_morning";
458
+ timezone: string;
459
+ windowMinutesFromWake?: number;
460
+ onDays?: number[];
461
+ requireRegularityAtLeast?: LifeOpsRegularityClass;
462
+ } | {
463
+ /**
464
+ * Fires during the canonical "night" window anchored on the projected
465
+ * bedtime target. The window starts `windowMinutesBeforeSleepTarget`
466
+ * before the bedtime target and ends at `sleep.detected`. Fires exactly
467
+ * once per night window when the workflow becomes eligible.
468
+ */
469
+ kind: "during_night";
470
+ timezone: string;
471
+ windowMinutesBeforeSleepTarget?: number;
472
+ onDays?: number[];
473
+ requireRegularityAtLeast?: LifeOpsRegularityClass;
359
474
  } | {
360
475
  kind: "event";
361
476
  eventKind: LifeOpsEventKind;
@@ -371,12 +486,6 @@ export interface LifeOpsWorkflowPermissionPolicy {
371
486
  }
372
487
  export declare const LIFEOPS_BROWSER_KINDS: readonly ["chrome", "safari"];
373
488
  export type LifeOpsBrowserKind = (typeof LIFEOPS_BROWSER_KINDS)[number];
374
- export declare const LIFEOPS_BROWSER_TRACKING_MODES: readonly ["off", "current_tab", "active_tabs"];
375
- export type LifeOpsBrowserTrackingMode = (typeof LIFEOPS_BROWSER_TRACKING_MODES)[number];
376
- export declare const LIFEOPS_BROWSER_SITE_ACCESS_MODES: readonly ["current_site_only", "granted_sites", "all_sites"];
377
- export type LifeOpsBrowserSiteAccessMode = (typeof LIFEOPS_BROWSER_SITE_ACCESS_MODES)[number];
378
- export declare const LIFEOPS_BROWSER_COMPANION_CONNECTION_STATES: readonly ["disconnected", "connected", "paused", "permission_blocked"];
379
- export type LifeOpsBrowserCompanionConnectionState = (typeof LIFEOPS_BROWSER_COMPANION_CONNECTION_STATES)[number];
380
489
  export declare const LIFEOPS_BROWSER_ACTION_KINDS: readonly ["open", "navigate", "focus_tab", "back", "forward", "reload", "click", "type", "submit", "read_page", "extract_links", "extract_forms"];
381
490
  export type LifeOpsBrowserActionKind = (typeof LIFEOPS_BROWSER_ACTION_KINDS)[number];
382
491
  export interface LifeOpsBrowserAction {
@@ -393,230 +502,6 @@ export interface LifeOpsBrowserAction {
393
502
  requiresConfirmation: boolean;
394
503
  metadata: Record<string, unknown>;
395
504
  }
396
- export interface LifeOpsBrowserPermissionState {
397
- tabs: boolean;
398
- scripting: boolean;
399
- activeTab: boolean;
400
- allOrigins: boolean;
401
- grantedOrigins: string[];
402
- incognitoEnabled: boolean;
403
- }
404
- export interface LifeOpsBrowserSettings {
405
- enabled: boolean;
406
- trackingMode: LifeOpsBrowserTrackingMode;
407
- allowBrowserControl: boolean;
408
- requireConfirmationForAccountAffecting: boolean;
409
- incognitoEnabled: boolean;
410
- siteAccessMode: LifeOpsBrowserSiteAccessMode;
411
- grantedOrigins: string[];
412
- blockedOrigins: string[];
413
- maxRememberedTabs: number;
414
- pauseUntil: string | null;
415
- metadata: Record<string, unknown>;
416
- updatedAt: string | null;
417
- }
418
- export interface UpdateLifeOpsBrowserSettingsRequest {
419
- enabled?: boolean;
420
- trackingMode?: LifeOpsBrowserTrackingMode;
421
- allowBrowserControl?: boolean;
422
- requireConfirmationForAccountAffecting?: boolean;
423
- incognitoEnabled?: boolean;
424
- siteAccessMode?: LifeOpsBrowserSiteAccessMode;
425
- grantedOrigins?: string[];
426
- blockedOrigins?: string[];
427
- maxRememberedTabs?: number;
428
- pauseUntil?: string | null;
429
- metadata?: Record<string, unknown>;
430
- }
431
- export interface LifeOpsBrowserCompanionStatus {
432
- id: string;
433
- agentId: string;
434
- browser: LifeOpsBrowserKind;
435
- profileId: string;
436
- profileLabel: string;
437
- label: string;
438
- extensionVersion: string | null;
439
- connectionState: LifeOpsBrowserCompanionConnectionState;
440
- permissions: LifeOpsBrowserPermissionState;
441
- lastSeenAt: string | null;
442
- pairedAt: string | null;
443
- metadata: Record<string, unknown>;
444
- createdAt: string;
445
- updatedAt: string;
446
- }
447
- export interface LifeOpsBrowserTabSummary {
448
- id: string;
449
- agentId: string;
450
- companionId: string | null;
451
- browser: LifeOpsBrowserKind;
452
- profileId: string;
453
- windowId: string;
454
- tabId: string;
455
- url: string;
456
- title: string;
457
- activeInWindow: boolean;
458
- focusedWindow: boolean;
459
- focusedActive: boolean;
460
- incognito: boolean;
461
- faviconUrl: string | null;
462
- lastSeenAt: string;
463
- lastFocusedAt: string | null;
464
- metadata: Record<string, unknown>;
465
- createdAt: string;
466
- updatedAt: string;
467
- }
468
- export interface LifeOpsBrowserPageContext {
469
- id: string;
470
- agentId: string;
471
- browser: LifeOpsBrowserKind;
472
- profileId: string;
473
- windowId: string;
474
- tabId: string;
475
- url: string;
476
- title: string;
477
- selectionText: string | null;
478
- mainText: string | null;
479
- headings: string[];
480
- links: Array<{
481
- text: string;
482
- href: string;
483
- }>;
484
- forms: Array<{
485
- action: string | null;
486
- fields: string[];
487
- }>;
488
- capturedAt: string;
489
- metadata: Record<string, unknown>;
490
- }
491
- export interface UpsertLifeOpsBrowserCompanionRequest {
492
- browser: LifeOpsBrowserKind;
493
- profileId: string;
494
- profileLabel?: string | null;
495
- label: string;
496
- extensionVersion?: string | null;
497
- connectionState?: LifeOpsBrowserCompanionConnectionState;
498
- permissions?: Partial<LifeOpsBrowserPermissionState>;
499
- lastSeenAt?: string | null;
500
- metadata?: Record<string, unknown>;
501
- }
502
- export interface SyncLifeOpsBrowserStateRequest {
503
- companion: UpsertLifeOpsBrowserCompanionRequest;
504
- tabs: Array<{
505
- browser: LifeOpsBrowserKind;
506
- profileId: string;
507
- windowId: string;
508
- tabId: string;
509
- url: string;
510
- title: string;
511
- activeInWindow: boolean;
512
- focusedWindow: boolean;
513
- focusedActive: boolean;
514
- incognito?: boolean;
515
- faviconUrl?: string | null;
516
- lastSeenAt?: string;
517
- lastFocusedAt?: string | null;
518
- metadata?: Record<string, unknown>;
519
- }>;
520
- pageContexts?: Array<{
521
- browser: LifeOpsBrowserKind;
522
- profileId: string;
523
- windowId: string;
524
- tabId: string;
525
- url: string;
526
- title: string;
527
- selectionText?: string | null;
528
- mainText?: string | null;
529
- headings?: string[];
530
- links?: Array<{
531
- text: string;
532
- href: string;
533
- }>;
534
- forms?: Array<{
535
- action: string | null;
536
- fields: string[];
537
- }>;
538
- capturedAt?: string;
539
- metadata?: Record<string, unknown>;
540
- }>;
541
- }
542
- export interface CreateLifeOpsBrowserCompanionPairingRequest {
543
- browser: LifeOpsBrowserKind;
544
- profileId: string;
545
- profileLabel?: string | null;
546
- label?: string | null;
547
- extensionVersion?: string | null;
548
- metadata?: Record<string, unknown>;
549
- }
550
- export interface LifeOpsBrowserCompanionPairingResponse {
551
- companion: LifeOpsBrowserCompanionStatus;
552
- pairingToken: string;
553
- }
554
- export interface LifeOpsBrowserCompanionConfig {
555
- apiBaseUrl: string;
556
- companionId: string;
557
- pairingToken: string;
558
- browser: LifeOpsBrowserKind;
559
- profileId: string;
560
- profileLabel: string;
561
- label: string;
562
- }
563
- export interface CreateLifeOpsBrowserCompanionAutoPairRequest {
564
- browser: LifeOpsBrowserKind;
565
- profileId?: string | null;
566
- profileLabel?: string | null;
567
- label?: string | null;
568
- extensionVersion?: string | null;
569
- metadata?: Record<string, unknown>;
570
- }
571
- export interface LifeOpsBrowserCompanionAutoPairResponse {
572
- companion: LifeOpsBrowserCompanionStatus;
573
- config: LifeOpsBrowserCompanionConfig;
574
- }
575
- export interface UpdateLifeOpsBrowserSessionProgressRequest {
576
- currentActionIndex?: number;
577
- result?: Record<string, unknown>;
578
- metadata?: Record<string, unknown>;
579
- }
580
- export interface LifeOpsBrowserCompanionSyncResponse {
581
- companion: LifeOpsBrowserCompanionStatus;
582
- tabs: LifeOpsBrowserTabSummary[];
583
- currentPage: LifeOpsBrowserPageContext | null;
584
- settings: LifeOpsBrowserSettings;
585
- session: LifeOpsBrowserSession | null;
586
- }
587
- export interface LifeOpsBrowserCompanionPackageStatus {
588
- extensionPath: string | null;
589
- chromeBuildPath: string | null;
590
- chromePackagePath: string | null;
591
- safariWebExtensionPath: string | null;
592
- safariAppPath: string | null;
593
- safariPackagePath: string | null;
594
- releaseManifest: LifeOpsBrowserCompanionReleaseManifest | null;
595
- }
596
- export interface LifeOpsBrowserCompanionReleaseAsset {
597
- fileName: string;
598
- downloadUrl: string | null;
599
- }
600
- export interface LifeOpsBrowserCompanionReleaseTarget {
601
- installKind: "chrome_web_store" | "apple_app_store" | "github_release" | "local_download";
602
- installUrl: string | null;
603
- storeListingUrl: string | null;
604
- asset: LifeOpsBrowserCompanionReleaseAsset;
605
- }
606
- export interface LifeOpsBrowserCompanionReleaseManifest {
607
- schema: "lifeops_browser_release_v2";
608
- releaseTag: string;
609
- releaseVersion: string;
610
- repository: string | null;
611
- releasePageUrl: string | null;
612
- chromeVersion: string;
613
- chromeVersionName: string;
614
- safariMarketingVersion: string;
615
- safariBuildVersion: string;
616
- chrome: LifeOpsBrowserCompanionReleaseTarget;
617
- safari: LifeOpsBrowserCompanionReleaseTarget;
618
- generatedAt: string;
619
- }
620
505
  export interface LifeOpsWorkflowActionBase {
621
506
  id?: string;
622
507
  resultKey?: string;
@@ -640,6 +525,13 @@ export type LifeOpsWorkflowAction = (LifeOpsWorkflowActionBase & {
640
525
  }) | (LifeOpsWorkflowActionBase & {
641
526
  kind: "get_gmail_triage";
642
527
  request?: GetLifeOpsGmailTriageRequest;
528
+ }) | (LifeOpsWorkflowActionBase & {
529
+ kind: "get_gmail_unresponded";
530
+ request?: GetLifeOpsGmailUnrespondedRequest;
531
+ }) | (LifeOpsWorkflowActionBase & {
532
+ kind: "dispatch_n8n_workflow";
533
+ workflowId: string;
534
+ payload?: Record<string, unknown>;
643
535
  }) | (LifeOpsWorkflowActionBase & {
644
536
  kind: "summarize";
645
537
  sourceKey?: string;
@@ -702,7 +594,7 @@ export interface LifeOpsChannelPolicy {
702
594
  createdAt: string;
703
595
  updatedAt: string;
704
596
  }
705
- export declare const LIFEOPS_ACTIVITY_SIGNAL_SOURCES: readonly ["app_lifecycle", "page_visibility", "desktop_power", "mobile_device", "mobile_health"];
597
+ export declare const LIFEOPS_ACTIVITY_SIGNAL_SOURCES: readonly ["app_lifecycle", "page_visibility", "desktop_power", "desktop_interaction", "connector_activity", "imessage_outbound", "mobile_device", "mobile_health"];
706
598
  export type LifeOpsActivitySignalSource = (typeof LIFEOPS_ACTIVITY_SIGNAL_SOURCES)[number];
707
599
  export declare const LIFEOPS_ACTIVITY_SIGNAL_STATES: readonly ["active", "idle", "background", "locked", "sleeping"];
708
600
  export type LifeOpsActivitySignalState = (typeof LIFEOPS_ACTIVITY_SIGNAL_STATES)[number];
@@ -748,6 +640,113 @@ export interface LifeOpsActivitySignal {
748
640
  metadata: Record<string, unknown>;
749
641
  createdAt: string;
750
642
  }
643
+ export type LifeOpsDevicePlatform = "macos_desktop" | "macos_electrobun" | "ios_capacitor" | "ipados_capacitor" | "browser_web";
644
+ export interface LifeOpsDevicePresencePayload {
645
+ family: "device_presence_event";
646
+ platform: LifeOpsDevicePlatform;
647
+ state: LifeOpsActivitySignalState;
648
+ deviceId: string;
649
+ isTransition: boolean;
650
+ sequence: number;
651
+ }
652
+ export type LifeOpsDesktopPowerEventKind = "system_wake" | "system_sleep" | "screen_wake" | "screen_sleep" | "session_lock" | "session_unlock" | "ac_plug" | "ac_unplug";
653
+ export interface LifeOpsDesktopPowerPayload {
654
+ family: "desktop_power_event";
655
+ platform: "macos_desktop" | "macos_electrobun";
656
+ kind: LifeOpsDesktopPowerEventKind;
657
+ batteryPercent: number | null;
658
+ }
659
+ export interface LifeOpsDesktopIdleSamplePayload {
660
+ family: "desktop_idle_sample";
661
+ platform: "macos_desktop" | "macos_electrobun";
662
+ idleSeconds: number;
663
+ source: "iokit_hid" | "cgevent" | "collector_synthesized";
664
+ isThresholdCrossing: boolean;
665
+ }
666
+ export interface LifeOpsBrowserFocusPayload {
667
+ family: "browser_focus_window";
668
+ platform: "browser_web" | "macos_electrobun";
669
+ startAt: string;
670
+ endAt: string;
671
+ domain: string;
672
+ tabId: string;
673
+ focusedSeconds: number;
674
+ }
675
+ export interface LifeOpsMobileHealthPayload {
676
+ family: "mobile_health_snapshot";
677
+ platform: "ios_capacitor" | "ipados_capacitor";
678
+ signal: LifeOpsHealthSignal;
679
+ sampleId: string | null;
680
+ }
681
+ export type LifeOpsMobileDeviceTelemetrySource = "capacitor_mobile_signals" | "macos_continuity_probe";
682
+ export interface LifeOpsMobileDevicePayload {
683
+ family: "mobile_device_snapshot";
684
+ platform: "ios_capacitor" | "ipados_capacitor" | "macos_desktop";
685
+ source: LifeOpsMobileDeviceTelemetrySource;
686
+ locked: boolean;
687
+ idleTimeSeconds: number | null;
688
+ onBattery: boolean | null;
689
+ batteryPercent: number | null;
690
+ pairedDeviceId: string | null;
691
+ }
692
+ export type LifeOpsTelemetryMessageChannel = "gmail" | "x_dm" | "discord" | "telegram" | "signal" | "imessage" | "whatsapp" | "sms" | "milady_chat";
693
+ export type LifeOpsMessageDirection = "inbound" | "outbound_by_owner";
694
+ export interface LifeOpsMessageActivityPayload {
695
+ family: "message_activity_event";
696
+ platform: LifeOpsDevicePlatform;
697
+ channel: LifeOpsTelemetryMessageChannel;
698
+ direction: LifeOpsMessageDirection;
699
+ externalMessageId: string;
700
+ senderHash: string;
701
+ conversationHash: string;
702
+ }
703
+ export type LifeOpsStatusPlatform = "slack" | "discord" | "telegram" | "x";
704
+ export type LifeOpsStatusTransition = "online" | "offline" | "away" | "do_not_disturb" | "custom_set" | "custom_cleared";
705
+ export interface LifeOpsStatusActivityPayload {
706
+ family: "status_activity_event";
707
+ platform: LifeOpsStatusPlatform;
708
+ transition: LifeOpsStatusTransition;
709
+ }
710
+ export interface LifeOpsChargingPayload {
711
+ family: "charging_event";
712
+ platform: LifeOpsDevicePlatform;
713
+ connected: boolean;
714
+ batteryPercent: number;
715
+ }
716
+ export interface LifeOpsScreenTimePerAppUsage {
717
+ appBundleId: string;
718
+ minutesUsed: number;
719
+ }
720
+ export interface LifeOpsScreenTimeSummaryPayload {
721
+ family: "screen_time_summary";
722
+ platform: "ios_capacitor" | "ipados_capacitor" | "macos_desktop";
723
+ intervalStartAt: string;
724
+ intervalEndAt: string;
725
+ totalMinutesUsed: number;
726
+ apps: LifeOpsScreenTimePerAppUsage[];
727
+ }
728
+ export type LifeOpsManualOverrideTelemetryKind = "going_to_bed" | "just_woke_up";
729
+ export interface LifeOpsManualOverridePayload {
730
+ family: "manual_override_event";
731
+ platform: LifeOpsDevicePlatform;
732
+ kind: LifeOpsManualOverrideTelemetryKind;
733
+ note: string | null;
734
+ }
735
+ export type LifeOpsTelemetryPayload = LifeOpsDevicePresencePayload | LifeOpsDesktopPowerPayload | LifeOpsDesktopIdleSamplePayload | LifeOpsBrowserFocusPayload | LifeOpsMobileHealthPayload | LifeOpsMobileDevicePayload | LifeOpsMessageActivityPayload | LifeOpsStatusActivityPayload | LifeOpsChargingPayload | LifeOpsScreenTimeSummaryPayload | LifeOpsManualOverridePayload;
736
+ export type LifeOpsTelemetryFamily = LifeOpsTelemetryPayload["family"];
737
+ export declare const LIFEOPS_TELEMETRY_FAMILIES: readonly LifeOpsTelemetryFamily[];
738
+ export interface LifeOpsTelemetryEnvelope {
739
+ id: string;
740
+ agentId: string;
741
+ family: LifeOpsTelemetryFamily;
742
+ occurredAt: string;
743
+ ingestedAt: string;
744
+ dedupeKey: string;
745
+ sourceReliability: number;
746
+ }
747
+ export type LifeOpsTelemetryEvent = LifeOpsTelemetryEnvelope & {
748
+ payload: LifeOpsTelemetryPayload;
749
+ };
751
750
  export interface LifeOpsReminderPreferenceSetting {
752
751
  intensity: LifeOpsReminderIntensity;
753
752
  source: LifeOpsReminderPreferenceSource;
@@ -799,6 +798,193 @@ export interface LifeOpsOverviewSummary {
799
798
  activeReminderCount: number;
800
799
  activeGoalCount: number;
801
800
  }
801
+ export declare const LIFEOPS_CIRCADIAN_STATES: readonly ["awake", "winding_down", "sleeping", "waking", "napping", "unclear"];
802
+ export type LifeOpsCircadianState = (typeof LIFEOPS_CIRCADIAN_STATES)[number];
803
+ export declare const LIFEOPS_UNCLEAR_REASONS: readonly ["no_signals", "contradictory_signals", "insufficient_history", "permission_blocked", "signal_outage", "boot_cold_start", "stale_state"];
804
+ export type LifeOpsUnclearReason = (typeof LIFEOPS_UNCLEAR_REASONS)[number];
805
+ export type LifeOpsScheduleSleepStatus = "sleeping_now" | "slept" | "likely_missed" | "unknown";
806
+ export type LifeOpsSleepCycleEvidenceSource = "health" | "activity_gap";
807
+ export type LifeOpsSleepCycleType = "nap" | "overnight" | "unknown";
808
+ export type LifeOpsRegularityClass = "very_regular" | "regular" | "irregular" | "very_irregular" | "insufficient_data";
809
+ export interface LifeOpsScheduleRegularity {
810
+ sri: number;
811
+ bedtimeStddevMin: number;
812
+ wakeStddevMin: number;
813
+ midSleepStddevMin: number;
814
+ regularityClass: LifeOpsRegularityClass;
815
+ sampleCount: number;
816
+ windowDays: number;
817
+ }
818
+ /**
819
+ * Personal baseline derived from persisted sleep episodes over `windowDays`.
820
+ * Medians are computed via circular mean (sin/cos projection) so bedtimes
821
+ * crossing midnight produce correct answers. Returned as `null` on
822
+ * `LifeOpsScheduleInsight` when `sampleCount < 5` — the scalar typical hours
823
+ * that previously existed are deleted from the contract.
824
+ */
825
+ export interface LifeOpsPersonalBaseline {
826
+ /** Local wake hour in [0, 24). Circular mean over episode end instants. */
827
+ medianWakeLocalHour: number;
828
+ /** Local bedtime hour in [12, 36) (normalized so evening hours are next-day). Circular mean. */
829
+ medianBedtimeLocalHour: number;
830
+ /** Median sleep episode duration in minutes. */
831
+ medianSleepDurationMin: number;
832
+ /** Circular stddev of bedtime in minutes. */
833
+ bedtimeStddevMin: number;
834
+ /** Circular stddev of wake time in minutes. */
835
+ wakeStddevMin: number;
836
+ /** Number of persisted episodes that fed the computation. */
837
+ sampleCount: number;
838
+ /** Size of the look-back window in days (default 28). */
839
+ windowDays: number;
840
+ }
841
+ export type LifeOpsAwakeProbabilitySource = LifeOpsActivitySignalSource | "prior" | "health" | "activity_gap";
842
+ export interface LifeOpsAwakeProbabilityContributor {
843
+ source: LifeOpsAwakeProbabilitySource;
844
+ logLikelihoodRatio: number;
845
+ }
846
+ export interface LifeOpsAwakeProbability {
847
+ pAwake: number;
848
+ pAsleep: number;
849
+ pUnknown: number;
850
+ contributingSources: LifeOpsAwakeProbabilityContributor[];
851
+ computedAt: string;
852
+ }
853
+ export interface LifeOpsSleepCycleEvidence {
854
+ startAt: string;
855
+ endAt: string | null;
856
+ source: LifeOpsSleepCycleEvidenceSource;
857
+ confidence: number;
858
+ }
859
+ export interface LifeOpsSleepCycle {
860
+ cycleType: LifeOpsSleepCycleType;
861
+ sleepStatus: LifeOpsScheduleSleepStatus;
862
+ isProbablySleeping: boolean;
863
+ sleepConfidence: number;
864
+ currentSleepStartedAt: string | null;
865
+ lastSleepStartedAt: string | null;
866
+ lastSleepEndedAt: string | null;
867
+ lastSleepDurationMinutes: number | null;
868
+ evidence: LifeOpsSleepCycleEvidence[];
869
+ }
870
+ export type LifeOpsDayBoundaryAnchor = "start_of_day" | "end_of_day" | "before_sleep";
871
+ export interface LifeOpsDayBoundary {
872
+ effectiveDayKey: string;
873
+ localDate: string;
874
+ timezone: string;
875
+ anchor: LifeOpsDayBoundaryAnchor;
876
+ startOfDayAt: string;
877
+ endOfDayAt: string;
878
+ beforeSleepAt: string | null;
879
+ confidence: number;
880
+ }
881
+ export type LifeOpsRelativeTimeAnchorSource = "sleep_cycle" | "activity" | "typical_sleep" | "day_boundary";
882
+ export interface LifeOpsRelativeTime {
883
+ computedAt: string;
884
+ localNowAt: string;
885
+ circadianState: LifeOpsCircadianState;
886
+ stateConfidence: number;
887
+ uncertaintyReason: LifeOpsUnclearReason | null;
888
+ awakeProbability: LifeOpsAwakeProbability;
889
+ wakeAnchorAt: string | null;
890
+ wakeAnchorSource: LifeOpsRelativeTimeAnchorSource | null;
891
+ minutesSinceWake: number | null;
892
+ minutesAwake: number | null;
893
+ bedtimeTargetAt: string | null;
894
+ bedtimeTargetSource: LifeOpsRelativeTimeAnchorSource | null;
895
+ minutesUntilBedtimeTarget: number | null;
896
+ minutesSinceBedtimeTarget: number | null;
897
+ dayBoundaryStartAt: string;
898
+ dayBoundaryEndAt: string;
899
+ minutesSinceDayBoundaryStart: number;
900
+ minutesUntilDayBoundaryEnd: number;
901
+ confidence: number;
902
+ }
903
+ export type LifeOpsScheduleMealLabel = "breakfast" | "lunch" | "dinner";
904
+ export type LifeOpsScheduleMealSource = "activity_gap" | "expected_window" | "health";
905
+ export interface LifeOpsScheduleMealInsight {
906
+ label: LifeOpsScheduleMealLabel;
907
+ detectedAt: string;
908
+ confidence: number;
909
+ source: LifeOpsScheduleMealSource;
910
+ }
911
+ /**
912
+ * A single rule firing from `scoreCircadianRules`. Persisted on the schedule
913
+ * insight so the inspection UI can explain *why* the state machine landed
914
+ * where it did without re-running inference.
915
+ */
916
+ export interface LifeOpsCircadianRuleFiring {
917
+ name: string;
918
+ contributes: LifeOpsCircadianState;
919
+ weight: number;
920
+ observedAt: string;
921
+ reason: string;
922
+ }
923
+ export interface LifeOpsScheduleInsight {
924
+ effectiveDayKey: string;
925
+ localDate: string;
926
+ timezone: string;
927
+ inferredAt: string;
928
+ circadianState: LifeOpsCircadianState;
929
+ stateConfidence: number;
930
+ uncertaintyReason: LifeOpsUnclearReason | null;
931
+ relativeTime: LifeOpsRelativeTime;
932
+ awakeProbability: LifeOpsAwakeProbability;
933
+ regularity: LifeOpsScheduleRegularity;
934
+ baseline: LifeOpsPersonalBaseline | null;
935
+ /**
936
+ * Named-rules evidence from the circadian scorer. Ordered by descending
937
+ * weight. Empty when `circadianState === "unclear"` and no rules fired.
938
+ */
939
+ circadianRuleFirings: LifeOpsCircadianRuleFiring[];
940
+ sleepStatus: LifeOpsScheduleSleepStatus;
941
+ sleepConfidence: number;
942
+ currentSleepStartedAt: string | null;
943
+ lastSleepStartedAt: string | null;
944
+ lastSleepEndedAt: string | null;
945
+ lastSleepDurationMinutes: number | null;
946
+ wakeAt: string | null;
947
+ firstActiveAt: string | null;
948
+ lastActiveAt: string | null;
949
+ meals: LifeOpsScheduleMealInsight[];
950
+ lastMealAt: string | null;
951
+ nextMealLabel: LifeOpsScheduleMealLabel | null;
952
+ nextMealWindowStartAt: string | null;
953
+ nextMealWindowEndAt: string | null;
954
+ nextMealConfidence: number;
955
+ }
956
+ export type LifeOpsCapabilityDomain = "core" | "schedule" | "reminders" | "activity" | "connectors" | "profile";
957
+ export type LifeOpsCapabilityState = "working" | "degraded" | "blocked" | "not_configured";
958
+ export interface LifeOpsCapabilityEvidence {
959
+ label: string;
960
+ state: LifeOpsCapabilityState;
961
+ detail: string | null;
962
+ observedAt: string | null;
963
+ }
964
+ export interface LifeOpsCapabilityStatus {
965
+ id: string;
966
+ domain: LifeOpsCapabilityDomain;
967
+ label: string;
968
+ state: LifeOpsCapabilityState;
969
+ summary: string;
970
+ confidence: number;
971
+ lastCheckedAt: string;
972
+ evidence: LifeOpsCapabilityEvidence[];
973
+ }
974
+ export interface LifeOpsCapabilitiesSummary {
975
+ totalCount: number;
976
+ workingCount: number;
977
+ degradedCount: number;
978
+ blockedCount: number;
979
+ notConfiguredCount: number;
980
+ }
981
+ export interface LifeOpsCapabilitiesStatus {
982
+ generatedAt: string;
983
+ appEnabled: boolean;
984
+ relativeTime: LifeOpsRelativeTime | null;
985
+ capabilities: LifeOpsCapabilityStatus[];
986
+ summary: LifeOpsCapabilitiesSummary;
987
+ }
802
988
  export interface LifeOpsOverviewSection {
803
989
  occurrences: LifeOpsOccurrenceView[];
804
990
  goals: LifeOpsGoalDefinition[];
@@ -812,6 +998,7 @@ export interface LifeOpsOverview {
812
998
  summary: LifeOpsOverviewSummary;
813
999
  owner: LifeOpsOverviewSection;
814
1000
  agentOps: LifeOpsOverviewSection;
1001
+ schedule: LifeOpsScheduleInsight | null;
815
1002
  }
816
1003
  export interface LifeOpsCalendarEventAttendee {
817
1004
  email: string | null;
@@ -934,6 +1121,7 @@ export interface GetLifeOpsGmailSearchRequest {
934
1121
  maxResults?: number;
935
1122
  query: string;
936
1123
  replyNeededOnly?: boolean;
1124
+ includeSpamTrash?: boolean;
937
1125
  grantId?: string;
938
1126
  }
939
1127
  export interface LifeOpsGmailSearchSummary {
@@ -949,6 +1137,176 @@ export interface LifeOpsGmailSearchFeed {
949
1137
  syncedAt: string | null;
950
1138
  summary: LifeOpsGmailSearchSummary;
951
1139
  }
1140
+ export declare const LIFEOPS_GMAIL_RECOMMENDATION_KINDS: readonly ["reply", "archive", "mark_read", "review_spam"];
1141
+ export type LifeOpsGmailRecommendationKind = (typeof LIFEOPS_GMAIL_RECOMMENDATION_KINDS)[number];
1142
+ export declare const LIFEOPS_GMAIL_BULK_OPERATIONS: readonly ["archive", "trash", "delete", "report_spam", "mark_read", "mark_unread", "apply_label", "remove_label"];
1143
+ export type LifeOpsGmailBulkOperation = (typeof LIFEOPS_GMAIL_BULK_OPERATIONS)[number];
1144
+ export interface ManageLifeOpsGmailMessagesRequest {
1145
+ side?: LifeOpsConnectorSide;
1146
+ mode?: LifeOpsConnectorMode;
1147
+ grantId?: string;
1148
+ operation: LifeOpsGmailBulkOperation;
1149
+ messageIds?: string[];
1150
+ query?: string;
1151
+ maxResults?: number;
1152
+ labelIds?: string[];
1153
+ confirmDestructive?: boolean;
1154
+ }
1155
+ export interface LifeOpsGmailManageResult {
1156
+ ok: true;
1157
+ operation: LifeOpsGmailBulkOperation;
1158
+ messageIds: string[];
1159
+ affectedCount: number;
1160
+ labelIds: string[];
1161
+ destructive: boolean;
1162
+ grantId?: string;
1163
+ accountEmail?: string;
1164
+ }
1165
+ export interface LifeOpsGmailRecommendationMessage {
1166
+ messageId: string;
1167
+ subject: string;
1168
+ from: string;
1169
+ fromEmail: string | null;
1170
+ receivedAt: string;
1171
+ snippet: string;
1172
+ labels: string[];
1173
+ }
1174
+ export interface LifeOpsGmailRecommendation {
1175
+ id: string;
1176
+ kind: LifeOpsGmailRecommendationKind;
1177
+ title: string;
1178
+ rationale: string;
1179
+ operation: LifeOpsGmailBulkOperation | null;
1180
+ messageIds: string[];
1181
+ query: string | null;
1182
+ labelIds: string[];
1183
+ affectedCount: number;
1184
+ destructive: boolean;
1185
+ requiresConfirmation: boolean;
1186
+ confidence: number;
1187
+ sampleMessages: LifeOpsGmailRecommendationMessage[];
1188
+ }
1189
+ export interface LifeOpsGmailRecommendationsSummary {
1190
+ totalCount: number;
1191
+ replyCount: number;
1192
+ archiveCount: number;
1193
+ markReadCount: number;
1194
+ spamReviewCount: number;
1195
+ destructiveCount: number;
1196
+ }
1197
+ export interface LifeOpsGmailRecommendationsFeed {
1198
+ recommendations: LifeOpsGmailRecommendation[];
1199
+ source: "cache" | "synced";
1200
+ syncedAt: string | null;
1201
+ summary: LifeOpsGmailRecommendationsSummary;
1202
+ }
1203
+ export interface GetLifeOpsGmailRecommendationsRequest {
1204
+ side?: LifeOpsConnectorSide;
1205
+ mode?: LifeOpsConnectorMode;
1206
+ grantId?: string;
1207
+ forceSync?: boolean;
1208
+ maxResults?: number;
1209
+ query?: string;
1210
+ replyNeededOnly?: boolean;
1211
+ includeSpamTrash?: boolean;
1212
+ }
1213
+ export declare const LIFEOPS_GMAIL_SPAM_REVIEW_STATUSES: readonly ["pending", "confirmed_spam", "not_spam", "dismissed"];
1214
+ export type LifeOpsGmailSpamReviewStatus = (typeof LIFEOPS_GMAIL_SPAM_REVIEW_STATUSES)[number];
1215
+ export interface LifeOpsGmailSpamReviewItem {
1216
+ id: string;
1217
+ agentId: string;
1218
+ provider: "google";
1219
+ side: LifeOpsConnectorSide;
1220
+ grantId: string;
1221
+ accountEmail: string | null;
1222
+ messageId: string;
1223
+ externalMessageId: string;
1224
+ threadId: string;
1225
+ subject: string;
1226
+ from: string;
1227
+ fromEmail: string | null;
1228
+ receivedAt: string;
1229
+ snippet: string;
1230
+ labels: string[];
1231
+ rationale: string;
1232
+ confidence: number;
1233
+ status: LifeOpsGmailSpamReviewStatus;
1234
+ createdAt: string;
1235
+ updatedAt: string;
1236
+ reviewedAt: string | null;
1237
+ }
1238
+ export interface LifeOpsGmailSpamReviewSummary {
1239
+ totalCount: number;
1240
+ pendingCount: number;
1241
+ confirmedSpamCount: number;
1242
+ notSpamCount: number;
1243
+ dismissedCount: number;
1244
+ }
1245
+ export interface LifeOpsGmailSpamReviewFeed {
1246
+ items: LifeOpsGmailSpamReviewItem[];
1247
+ summary: LifeOpsGmailSpamReviewSummary;
1248
+ }
1249
+ export interface GetLifeOpsGmailSpamReviewRequest {
1250
+ side?: LifeOpsConnectorSide;
1251
+ mode?: LifeOpsConnectorMode;
1252
+ grantId?: string;
1253
+ status?: LifeOpsGmailSpamReviewStatus;
1254
+ maxResults?: number;
1255
+ }
1256
+ export interface UpdateLifeOpsGmailSpamReviewItemRequest {
1257
+ status: LifeOpsGmailSpamReviewStatus;
1258
+ }
1259
+ export interface LifeOpsGmailUnrespondedThread {
1260
+ threadId: string;
1261
+ messageId: string;
1262
+ subject: string;
1263
+ to: string[];
1264
+ cc: string[];
1265
+ lastOutboundAt: string;
1266
+ lastInboundAt: string | null;
1267
+ daysWaiting: number;
1268
+ snippet: string;
1269
+ labels: string[];
1270
+ htmlLink: string | null;
1271
+ grantId?: string;
1272
+ accountEmail?: string;
1273
+ }
1274
+ export interface LifeOpsGmailUnrespondedSummary {
1275
+ totalCount: number;
1276
+ oldestDaysWaiting: number | null;
1277
+ }
1278
+ export interface LifeOpsGmailUnrespondedFeed {
1279
+ threads: LifeOpsGmailUnrespondedThread[];
1280
+ source: "synced";
1281
+ syncedAt: string;
1282
+ summary: LifeOpsGmailUnrespondedSummary;
1283
+ }
1284
+ export interface GetLifeOpsGmailUnrespondedRequest {
1285
+ side?: LifeOpsConnectorSide;
1286
+ mode?: LifeOpsConnectorMode;
1287
+ grantId?: string;
1288
+ olderThanDays?: number;
1289
+ maxResults?: number;
1290
+ }
1291
+ export interface IngestLifeOpsGmailEventRequest {
1292
+ side?: LifeOpsConnectorSide;
1293
+ mode?: LifeOpsConnectorMode;
1294
+ grantId?: string;
1295
+ messageId: string;
1296
+ eventKind?: "gmail.message.received" | "gmail.thread.needs_response";
1297
+ occurredAt?: string;
1298
+ maxWorkflowRuns?: number;
1299
+ }
1300
+ export interface LifeOpsGmailEventIngestResult {
1301
+ ok: true;
1302
+ event: {
1303
+ id: string;
1304
+ kind: "gmail.message.received" | "gmail.thread.needs_response";
1305
+ occurredAt: string;
1306
+ payload: Record<string, unknown>;
1307
+ };
1308
+ workflowRunIds: string[];
1309
+ }
952
1310
  export declare const LIFEOPS_GMAIL_DRAFT_TONES: readonly ["brief", "neutral", "warm"];
953
1311
  export type LifeOpsGmailDraftTone = (typeof LIFEOPS_GMAIL_DRAFT_TONES)[number];
954
1312
  export interface CreateLifeOpsGmailReplyDraftRequest {
@@ -1078,8 +1436,69 @@ export interface LifeOpsNextCalendarEventContext {
1078
1436
  linkedMailError: string | null;
1079
1437
  linkedMail: Array<Pick<LifeOpsGmailMessageSummary, "id" | "subject" | "from" | "receivedAt" | "snippet" | "htmlLink">>;
1080
1438
  }
1439
+ export interface LifeOpsCalendarEventReminderOverride {
1440
+ minutesBefore: number;
1441
+ }
1442
+ export interface LifeOpsCalendarEventUpdate {
1443
+ title?: string;
1444
+ startAt?: string;
1445
+ endAt?: string;
1446
+ notes?: string;
1447
+ reminders?: LifeOpsCalendarEventReminderOverride[];
1448
+ }
1449
+ export interface LifeOpsCalendarEventMutationResult {
1450
+ event: LifeOpsCalendarEvent;
1451
+ }
1452
+ export declare const LIFEOPS_INBOX_CHANNELS: readonly ["gmail", "x_dm", "discord", "telegram", "signal", "imessage", "whatsapp", "sms"];
1453
+ export type LifeOpsInboxChannel = (typeof LIFEOPS_INBOX_CHANNELS)[number];
1454
+ export interface LifeOpsInboxMessageSender {
1455
+ id: string;
1456
+ displayName: string;
1457
+ avatarUrl: string | null;
1458
+ }
1459
+ export interface LifeOpsInboxMessageSourceRef {
1460
+ channel: LifeOpsInboxChannel;
1461
+ externalId: string;
1462
+ }
1463
+ export interface LifeOpsInboxMessage {
1464
+ /** Channel-prefixed, globally unique identifier. */
1465
+ id: string;
1466
+ channel: LifeOpsInboxChannel;
1467
+ sender: LifeOpsInboxMessageSender;
1468
+ /** Gmail-style subject; `null` for chat channels. */
1469
+ subject: string | null;
1470
+ snippet: string;
1471
+ /** ISO-8601 timestamp. */
1472
+ receivedAt: string;
1473
+ unread: boolean;
1474
+ deepLink: string | null;
1475
+ sourceRef: LifeOpsInboxMessageSourceRef;
1476
+ }
1477
+ export interface LifeOpsInboxChannelCount {
1478
+ total: number;
1479
+ unread: number;
1480
+ }
1481
+ export interface LifeOpsInbox {
1482
+ messages: LifeOpsInboxMessage[];
1483
+ channelCounts: Record<LifeOpsInboxChannel, LifeOpsInboxChannelCount>;
1484
+ fetchedAt: string;
1485
+ }
1486
+ export interface GetLifeOpsInboxRequest {
1487
+ /** Cap on the total number of messages returned. Defaults to 100. */
1488
+ limit?: number;
1489
+ /** If omitted, all connected channels are included. */
1490
+ channels?: LifeOpsInboxChannel[];
1491
+ }
1081
1492
  export declare const LIFEOPS_GOOGLE_CONNECTOR_REASONS: readonly ["connected", "disconnected", "config_missing", "token_missing", "needs_reauth"];
1082
1493
  export type LifeOpsGoogleConnectorReason = (typeof LIFEOPS_GOOGLE_CONNECTOR_REASONS)[number];
1494
+ export declare const LIFEOPS_CONNECTOR_DEGRADATION_AXES: readonly ["missing-scope", "rate-limited", "disconnected", "auth-expired", "session-revoked", "delivery-degraded", "helper-disconnected", "retry-idempotent", "hold-expired", "transport-offline", "blocked-resume"];
1495
+ export type LifeOpsConnectorDegradationAxis = (typeof LIFEOPS_CONNECTOR_DEGRADATION_AXES)[number];
1496
+ export interface LifeOpsConnectorDegradation {
1497
+ axis: LifeOpsConnectorDegradationAxis;
1498
+ code: string;
1499
+ message: string;
1500
+ retryable: boolean;
1501
+ }
1083
1502
  export interface LifeOpsGoogleConnectorStatus {
1084
1503
  provider: "google";
1085
1504
  side: LifeOpsConnectorSide;
@@ -1099,22 +1518,37 @@ export interface LifeOpsGoogleConnectorStatus {
1099
1518
  expiresAt: string | null;
1100
1519
  hasRefreshToken: boolean;
1101
1520
  grant: LifeOpsConnectorGrant | null;
1521
+ degradations?: LifeOpsConnectorDegradation[];
1102
1522
  }
1103
1523
  export interface LifeOpsXConnectorStatus {
1104
1524
  provider: "x";
1525
+ side?: LifeOpsConnectorSide;
1105
1526
  mode: LifeOpsConnectorMode;
1527
+ defaultMode?: LifeOpsConnectorMode;
1528
+ availableModes?: LifeOpsConnectorMode[];
1529
+ executionTarget?: LifeOpsConnectorExecutionTarget;
1530
+ sourceOfTruth?: LifeOpsConnectorSourceOfTruth;
1531
+ configured?: boolean;
1106
1532
  connected: boolean;
1533
+ reason?: "connected" | "disconnected" | "config_missing" | "needs_reauth";
1534
+ preferredByAgent?: boolean;
1535
+ cloudConnectionId?: string | null;
1107
1536
  grantedCapabilities: LifeOpsXCapability[];
1108
1537
  grantedScopes: string[];
1109
1538
  identity: Record<string, unknown> | null;
1110
1539
  hasCredentials: boolean;
1540
+ feedRead: boolean;
1541
+ feedWrite: boolean;
1542
+ dmRead: boolean;
1543
+ dmWrite: boolean;
1111
1544
  /**
1112
- * DM inbound read is supported when `x.read` capability is granted.
1545
+ * DM inbound read is supported when `x.dm.read` capability is granted.
1113
1546
  * Use `syncXDms()` to pull and persist, then `getXDms()` or
1114
1547
  * `readXInboundDms()` to retrieve.
1115
1548
  */
1116
1549
  dmInbound: boolean;
1117
1550
  grant: LifeOpsConnectorGrant | null;
1551
+ degradations?: LifeOpsConnectorDegradation[];
1118
1552
  }
1119
1553
  export declare const LIFEOPS_MESSAGING_CONNECTOR_REASONS: readonly ["connected", "disconnected", "pairing", "auth_pending", "auth_expired", "session_revoked"];
1120
1554
  export type LifeOpsMessagingConnectorReason = (typeof LIFEOPS_MESSAGING_CONNECTOR_REASONS)[number];
@@ -1132,6 +1566,29 @@ export interface LifeOpsSignalConnectorStatus {
1132
1566
  grantedCapabilities: LifeOpsSignalCapability[];
1133
1567
  pairing: LifeOpsSignalPairingStatus | null;
1134
1568
  grant: LifeOpsConnectorGrant | null;
1569
+ degradations?: LifeOpsConnectorDegradation[];
1570
+ }
1571
+ /**
1572
+ * A single inbound Signal message as returned by {@link readSignalInbound} and
1573
+ * the signal-local-client reader.
1574
+ */
1575
+ export interface LifeOpsSignalInboundMessage {
1576
+ /** Stable message ID (from the Signal service memory store or signal-cli). */
1577
+ id: string;
1578
+ /** elizaOS room ID this message was placed into. */
1579
+ roomId: string;
1580
+ /** Signal channel ID (typically the sender's phone number or group ID). */
1581
+ channelId: string;
1582
+ /** Display name of the sender. */
1583
+ speakerName: string;
1584
+ /** Plain-text body of the message. */
1585
+ text: string;
1586
+ /** Unix millisecond timestamp of the message. */
1587
+ createdAt: number;
1588
+ /** True when the message was sent by a contact (not by the agent's account). */
1589
+ isInbound: boolean;
1590
+ /** True when the message was received in a group conversation. */
1591
+ isGroup: boolean;
1135
1592
  }
1136
1593
  export interface LifeOpsDiscordDmPreview {
1137
1594
  channelId: string | null;
@@ -1194,11 +1651,18 @@ export interface LifeOpsDiscordConnectorStatus {
1194
1651
  /** Owner-side browser options for reaching the user's real Discord session. */
1195
1652
  browserAccess?: LifeOpsOwnerBrowserAccessStatus[];
1196
1653
  grant: LifeOpsConnectorGrant | null;
1654
+ degradations?: LifeOpsConnectorDegradation[];
1197
1655
  }
1198
1656
  export declare const LIFEOPS_TELEGRAM_AUTH_STATES: readonly ["idle", "waiting_for_provisioning_code", "waiting_for_code", "waiting_for_password", "connected", "error"];
1199
1657
  export type LifeOpsTelegramAuthState = (typeof LIFEOPS_TELEGRAM_AUTH_STATES)[number];
1200
1658
  export interface LifeOpsWhatsAppConnectorStatus {
1201
1659
  provider: "whatsapp";
1660
+ /**
1661
+ * `connected` here means credentials are present in env; it does NOT imply
1662
+ * a live network probe has been performed. A live send can still fail if
1663
+ * the token has been revoked upstream. Callers that need true liveness
1664
+ * must catch errors from the actual send/receive methods.
1665
+ */
1202
1666
  connected: boolean;
1203
1667
  /**
1204
1668
  * Inbound is always true for WhatsApp. Messages arrive via webhook push and
@@ -1207,6 +1671,7 @@ export interface LifeOpsWhatsAppConnectorStatus {
1207
1671
  inbound: true;
1208
1672
  phoneNumberId?: string;
1209
1673
  lastCheckedAt: string;
1674
+ degradations?: LifeOpsConnectorDegradation[];
1210
1675
  }
1211
1676
  export interface LifeOpsTelegramConnectorStatus {
1212
1677
  provider: "telegram";
@@ -1226,6 +1691,7 @@ export interface LifeOpsTelegramConnectorStatus {
1226
1691
  managedCredentialsAvailable: boolean;
1227
1692
  storedCredentialsAvailable: boolean;
1228
1693
  grant: LifeOpsConnectorGrant | null;
1694
+ degradations?: LifeOpsConnectorDegradation[];
1229
1695
  }
1230
1696
  export interface LifeOpsTelegramDialogSummary {
1231
1697
  id: string;
@@ -1322,13 +1788,32 @@ export interface DisconnectLifeOpsGoogleConnectorRequest {
1322
1788
  mode?: LifeOpsConnectorMode;
1323
1789
  }
1324
1790
  export interface UpsertLifeOpsXConnectorRequest {
1791
+ side?: LifeOpsConnectorSide;
1325
1792
  mode?: LifeOpsConnectorMode;
1326
1793
  capabilities: LifeOpsXCapability[];
1327
1794
  grantedScopes?: string[];
1328
1795
  identity?: Record<string, unknown>;
1329
1796
  metadata?: Record<string, unknown>;
1330
1797
  }
1798
+ export interface StartLifeOpsXConnectorRequest {
1799
+ side?: LifeOpsConnectorSide;
1800
+ mode?: LifeOpsConnectorMode;
1801
+ redirectUrl?: string;
1802
+ }
1803
+ export interface StartLifeOpsXConnectorResponse {
1804
+ provider: "x";
1805
+ side: LifeOpsConnectorSide;
1806
+ mode: LifeOpsConnectorMode;
1807
+ requestedCapabilities: LifeOpsXCapability[];
1808
+ redirectUri: string;
1809
+ authUrl: string;
1810
+ }
1811
+ export interface DisconnectLifeOpsXConnectorRequest {
1812
+ side?: LifeOpsConnectorSide;
1813
+ mode?: LifeOpsConnectorMode;
1814
+ }
1331
1815
  export interface CreateLifeOpsXPostRequest {
1816
+ side?: LifeOpsConnectorSide;
1332
1817
  mode?: LifeOpsConnectorMode;
1333
1818
  text: string;
1334
1819
  confirmPost?: boolean;
@@ -1338,7 +1823,7 @@ export interface LifeOpsXPostResponse {
1338
1823
  status: number | null;
1339
1824
  postId?: string;
1340
1825
  error?: string;
1341
- category: "success" | "auth" | "rate_limit" | "network" | "unknown";
1826
+ category: "success" | "auth" | "rate_limit" | "network" | "invalid" | "unknown";
1342
1827
  }
1343
1828
  export interface CreateLifeOpsDefinitionRequest {
1344
1829
  ownership?: LifeOpsOwnershipInput;
@@ -1447,6 +1932,47 @@ export interface LifeOpsGoalReview {
1447
1932
  semanticReviewedAt?: string | null;
1448
1933
  };
1449
1934
  }
1935
+ export interface LifeOpsGoalExperienceLoopSuggestion {
1936
+ sourceGoalId: string;
1937
+ definitionId: string | null;
1938
+ title: string;
1939
+ detail: string;
1940
+ }
1941
+ export interface LifeOpsGoalExperienceLoopMatch {
1942
+ goalId: string;
1943
+ title: string;
1944
+ description: string;
1945
+ score: number;
1946
+ status: LifeOpsGoalStatus;
1947
+ reviewState: LifeOpsGoalReviewState;
1948
+ linkedDefinitionCount: number;
1949
+ completedLast7Days: number;
1950
+ lastActivityAt: string | null;
1951
+ explanation: string;
1952
+ carryForwardSuggestions: LifeOpsGoalExperienceLoopSuggestion[];
1953
+ }
1954
+ export interface LifeOpsGoalExperienceLoop {
1955
+ referenceGoalId: string | null;
1956
+ referenceTitle: string;
1957
+ similarGoals: LifeOpsGoalExperienceLoopMatch[];
1958
+ suggestedCarryForward: LifeOpsGoalExperienceLoopSuggestion[];
1959
+ summary: string | null;
1960
+ }
1961
+ export interface LifeOpsWeeklyGoalReview {
1962
+ generatedAt: string;
1963
+ reviewWindow: "this_week";
1964
+ summary: {
1965
+ totalGoals: number;
1966
+ onTrackCount: number;
1967
+ atRiskCount: number;
1968
+ needsAttentionCount: number;
1969
+ idleCount: number;
1970
+ };
1971
+ onTrack: LifeOpsGoalReview[];
1972
+ atRisk: LifeOpsGoalReview[];
1973
+ needsAttention: LifeOpsGoalReview[];
1974
+ idle: LifeOpsGoalReview[];
1975
+ }
1450
1976
  export interface LifeOpsDefinitionPerformanceWindow {
1451
1977
  scheduledCount: number;
1452
1978
  completedCount: number;
@@ -1530,6 +2056,26 @@ export interface CaptureLifeOpsActivitySignalRequest {
1530
2056
  health?: LifeOpsHealthSignal | null;
1531
2057
  metadata?: Record<string, unknown>;
1532
2058
  }
2059
+ /**
2060
+ * User-attested circadian override. Emitted with maximum reliability weight;
2061
+ * force-transitions the state machine. See `sleep-wake-spec.md` §2 (manual
2062
+ * override row in the transition table).
2063
+ */
2064
+ export declare const LIFEOPS_MANUAL_OVERRIDE_KINDS: readonly ["going_to_bed", "just_woke_up"];
2065
+ export type LifeOpsManualOverrideKind = (typeof LIFEOPS_MANUAL_OVERRIDE_KINDS)[number];
2066
+ export interface CaptureLifeOpsManualOverrideRequest {
2067
+ kind: LifeOpsManualOverrideKind;
2068
+ occurredAt?: string;
2069
+ /** Optional user note capped at 500 chars. */
2070
+ note?: string;
2071
+ }
2072
+ export interface LifeOpsManualOverrideResult {
2073
+ accepted: true;
2074
+ kind: LifeOpsManualOverrideKind;
2075
+ occurredAt: string;
2076
+ circadianState: LifeOpsCircadianState;
2077
+ stateConfidence: number;
2078
+ }
1533
2079
  export interface ProcessLifeOpsRemindersRequest {
1534
2080
  now?: string;
1535
2081
  limit?: number;
@@ -1627,6 +2173,11 @@ export interface CreateLifeOpsBrowserSessionRequest {
1627
2173
  export interface ConfirmLifeOpsBrowserSessionRequest {
1628
2174
  confirmed: boolean;
1629
2175
  }
2176
+ export interface UpdateLifeOpsBrowserSessionProgressRequest {
2177
+ currentActionIndex?: number;
2178
+ result?: Record<string, unknown>;
2179
+ metadata?: Record<string, unknown>;
2180
+ }
1630
2181
  export interface CompleteLifeOpsBrowserSessionRequest {
1631
2182
  status?: Extract<LifeOpsBrowserSessionStatus, "done" | "failed">;
1632
2183
  result?: Record<string, unknown>;