@pellux/goodvibes-sdk 0.33.38 → 0.34.0

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.
@@ -0,0 +1,9 @@
1
+ import type { GatewayMethodDescriptor } from './method-catalog-shared.js';
2
+ /**
3
+ * Calendar operator methods — CalDAV-backed event read/write and iCalendar
4
+ * import/export through the standard operator method protocol. Daemon-backed;
5
+ * the SDK publishes the typed contract surface (no internal handler). Local .ics
6
+ * parsing is handled agent-side and does not depend on these contracts.
7
+ */
8
+ export declare const builtinGatewayCalendarMethodDescriptors: readonly GatewayMethodDescriptor[];
9
+ //# sourceMappingURL=method-catalog-calendar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"method-catalog-calendar.d.ts","sourceRoot":"","sources":["../../../src/platform/control-plane/method-catalog-calendar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAiC1E;;;;;GAKG;AACH,eAAO,MAAM,uCAAuC,EAAE,SAAS,uBAAuB,EAyFrF,CAAC"}
@@ -0,0 +1,117 @@
1
+ import { STRING_SCHEMA, NUMBER_SCHEMA, arraySchema, objectSchema, listOutputSchema, bodyEnvelopeSchema, methodDescriptor, } from './method-catalog-shared.js';
2
+ const CALENDAR_EVENT_SUMMARY_SCHEMA = objectSchema({
3
+ id: STRING_SCHEMA,
4
+ title: STRING_SCHEMA,
5
+ start: STRING_SCHEMA,
6
+ end: STRING_SCHEMA,
7
+ location: STRING_SCHEMA,
8
+ description: STRING_SCHEMA,
9
+ attendees: arraySchema(STRING_SCHEMA),
10
+ }, ['id', 'title', 'start', 'end']);
11
+ const CALENDAR_EVENT_DETAIL_SCHEMA = objectSchema({
12
+ id: STRING_SCHEMA,
13
+ uid: STRING_SCHEMA,
14
+ title: STRING_SCHEMA,
15
+ start: STRING_SCHEMA,
16
+ end: STRING_SCHEMA,
17
+ location: STRING_SCHEMA,
18
+ description: STRING_SCHEMA,
19
+ attendees: arraySchema(STRING_SCHEMA),
20
+ recurrence: STRING_SCHEMA,
21
+ }, ['id', 'title', 'start', 'end']);
22
+ /**
23
+ * Calendar operator methods — CalDAV-backed event read/write and iCalendar
24
+ * import/export through the standard operator method protocol. Daemon-backed;
25
+ * the SDK publishes the typed contract surface (no internal handler). Local .ics
26
+ * parsing is handled agent-side and does not depend on these contracts.
27
+ */
28
+ export const builtinGatewayCalendarMethodDescriptors = [
29
+ methodDescriptor({
30
+ id: 'calendar.events.list',
31
+ title: 'List Calendar Events',
32
+ description: 'Return calendar event summaries from the configured CalDAV calendar within an optional time window.',
33
+ category: 'calendar',
34
+ scopes: ['read:calendar'],
35
+ http: { method: 'GET', path: '/api/calendar/events' },
36
+ inputSchema: objectSchema({
37
+ calendarId: STRING_SCHEMA,
38
+ from: STRING_SCHEMA,
39
+ to: STRING_SCHEMA,
40
+ limit: NUMBER_SCHEMA,
41
+ }),
42
+ outputSchema: listOutputSchema('events', CALENDAR_EVENT_SUMMARY_SCHEMA),
43
+ }),
44
+ methodDescriptor({
45
+ id: 'calendar.events.get',
46
+ title: 'Get Calendar Event',
47
+ description: 'Return the full event object including attendees, recurrence, and raw iCalendar UID.',
48
+ category: 'calendar',
49
+ scopes: ['read:calendar'],
50
+ http: { method: 'GET', path: '/api/calendar/events/{eventId}' },
51
+ inputSchema: objectSchema({
52
+ eventId: STRING_SCHEMA,
53
+ calendarId: STRING_SCHEMA,
54
+ }, ['eventId']),
55
+ outputSchema: CALENDAR_EVENT_DETAIL_SCHEMA,
56
+ }),
57
+ methodDescriptor({
58
+ id: 'calendar.events.create',
59
+ title: 'Create Calendar Event',
60
+ description: 'Create an event on the configured CalDAV calendar. Requires explicit confirmation.',
61
+ category: 'calendar',
62
+ scopes: ['write:calendar'],
63
+ access: 'admin',
64
+ http: { method: 'POST', path: '/api/calendar/events' },
65
+ inputSchema: bodyEnvelopeSchema({
66
+ title: STRING_SCHEMA,
67
+ start: STRING_SCHEMA,
68
+ end: STRING_SCHEMA,
69
+ description: STRING_SCHEMA,
70
+ attendees: arraySchema(STRING_SCHEMA),
71
+ location: STRING_SCHEMA,
72
+ calendarId: STRING_SCHEMA,
73
+ confirm: { type: 'boolean' },
74
+ }, ['title', 'start', 'end', 'confirm']),
75
+ outputSchema: objectSchema({
76
+ eventId: STRING_SCHEMA,
77
+ uid: STRING_SCHEMA,
78
+ createdAt: STRING_SCHEMA,
79
+ }, ['eventId', 'uid', 'createdAt']),
80
+ }),
81
+ methodDescriptor({
82
+ id: 'calendar.ics.import',
83
+ title: 'Import iCalendar',
84
+ description: 'Import raw .ics content into the configured CalDAV calendar. Requires explicit confirmation.',
85
+ category: 'calendar',
86
+ scopes: ['write:calendar'],
87
+ access: 'admin',
88
+ http: { method: 'POST', path: '/api/calendar/ics/import' },
89
+ inputSchema: bodyEnvelopeSchema({
90
+ icsContent: STRING_SCHEMA,
91
+ calendarId: STRING_SCHEMA,
92
+ confirm: { type: 'boolean' },
93
+ }, ['icsContent', 'confirm']),
94
+ outputSchema: objectSchema({
95
+ imported: NUMBER_SCHEMA,
96
+ eventIds: arraySchema(STRING_SCHEMA),
97
+ errors: arraySchema(STRING_SCHEMA),
98
+ }, ['imported', 'eventIds', 'errors']),
99
+ }),
100
+ methodDescriptor({
101
+ id: 'calendar.ics.export',
102
+ title: 'Export iCalendar',
103
+ description: 'Export events from the configured CalDAV calendar as raw .ics content within an optional time window.',
104
+ category: 'calendar',
105
+ scopes: ['read:calendar'],
106
+ http: { method: 'GET', path: '/api/calendar/ics/export' },
107
+ inputSchema: objectSchema({
108
+ calendarId: STRING_SCHEMA,
109
+ from: STRING_SCHEMA,
110
+ to: STRING_SCHEMA,
111
+ }),
112
+ outputSchema: objectSchema({
113
+ icsContent: STRING_SCHEMA,
114
+ eventCount: NUMBER_SCHEMA,
115
+ }, ['icsContent', 'eventCount']),
116
+ }),
117
+ ];
@@ -1 +1 @@
1
- {"version":3,"file":"method-catalog-channels.d.ts","sourceRoot":"","sources":["../../../src/platform/control-plane/method-catalog-channels.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAmC1E,eAAO,MAAM,sCAAsC,EAAE,SAAS,uBAAuB,EA6hBpF,CAAC"}
1
+ {"version":3,"file":"method-catalog-channels.d.ts","sourceRoot":"","sources":["../../../src/platform/control-plane/method-catalog-channels.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAuF1E,eAAO,MAAM,sCAAsC,EAAE,SAAS,uBAAuB,EAkqBpF,CAAC"}
@@ -1,6 +1,48 @@
1
1
  import { EMPTY_OBJECT_SCHEMA, STRING_SCHEMA, BOOLEAN_SCHEMA, NUMBER_SCHEMA, arraySchema, objectSchema, listOutputSchema, bodyEnvelopeSchema, methodDescriptor, runtimeEventId } from './method-catalog-shared.js';
2
2
  import { HTTP_HEADER_MAP_SCHEMA, METADATA_SCHEMA, } from './operator-contract-schemas-shared.js';
3
3
  import { CHANNEL_ACCOUNT_ACTION_OUTPUT_SCHEMA, CHANNEL_ACCOUNTS_OUTPUT_SCHEMA, CHANNEL_ACCOUNT_ENTITY_OUTPUT_SCHEMA, CHANNEL_ALLOWLIST_EDIT_RESULT_SCHEMA, CHANNEL_ALLOWLIST_RESOLUTION_SCHEMA, CHANNEL_AUTHORIZE_OUTPUT_SCHEMA, CHANNEL_CAPABILITY_SCHEMA, CHANNEL_DOCTOR_REPORT_SCHEMA, CHANNEL_DIRECTORY_ENTRY_SCHEMA, CHANNEL_GROUP_POLICY_SCHEMA, CHANNEL_LIFECYCLE_STATE_SCHEMA, CHANNEL_OPERATOR_ACTION_OUTPUT_SCHEMA, CHANNEL_OPERATOR_ACTION_SCHEMA, CHANNEL_POLICY_AUDIT_SCHEMA, CHANNEL_POLICY_SCHEMA, CHANNEL_SETUP_SCHEMA_SCHEMA, CHANNEL_STATUS_LIST_OUTPUT_SCHEMA, CHANNEL_TARGET_RESOLVE_OUTPUT_SCHEMA, CHANNEL_TOOL_SCHEMA, CHANNEL_TOOL_ACTION_OUTPUT_SCHEMA, CHANNEL_REPAIR_ACTION_SCHEMA, TOOL_DEFINITION_SCHEMA, REMOVE_WITH_ID_OUTPUT_SCHEMA, SERVICE_STATUS_SCHEMA, WATCHER_LIST_OUTPUT_SCHEMA, WATCHER_RECORD_SCHEMA, } from './operator-contract-schemas.js';
4
+ const CHANNEL_INBOX_ITEM_SCHEMA = objectSchema({
5
+ id: STRING_SCHEMA,
6
+ provider: STRING_SCHEMA,
7
+ kind: STRING_SCHEMA,
8
+ from: STRING_SCHEMA,
9
+ fromAddress: STRING_SCHEMA,
10
+ subject: STRING_SCHEMA,
11
+ bodyPreview: STRING_SCHEMA,
12
+ receivedAt: NUMBER_SCHEMA,
13
+ unread: BOOLEAN_SCHEMA,
14
+ routeId: STRING_SCHEMA,
15
+ threadId: STRING_SCHEMA,
16
+ attachmentCount: NUMBER_SCHEMA,
17
+ }, ['id', 'provider', 'kind', 'from', 'bodyPreview', 'receivedAt', 'unread']);
18
+ const CHANNEL_ROUTING_RULE_SCHEMA = objectSchema({
19
+ id: STRING_SCHEMA,
20
+ createdAt: STRING_SCHEMA,
21
+ updatedAt: STRING_SCHEMA,
22
+ surfaceKind: STRING_SCHEMA,
23
+ routeId: STRING_SCHEMA,
24
+ profileId: STRING_SCHEMA,
25
+ label: STRING_SCHEMA,
26
+ }, ['id', 'createdAt', 'updatedAt', 'surfaceKind', 'profileId']);
27
+ const CHANNEL_DRAFT_PROPERTIES = {
28
+ version: NUMBER_SCHEMA,
29
+ id: STRING_SCHEMA,
30
+ createdAt: STRING_SCHEMA,
31
+ updatedAt: STRING_SCHEMA,
32
+ status: STRING_SCHEMA,
33
+ title: STRING_SCHEMA,
34
+ message: STRING_SCHEMA,
35
+ channel: STRING_SCHEMA,
36
+ route: STRING_SCHEMA,
37
+ webhook: STRING_SCHEMA,
38
+ link: STRING_SCHEMA,
39
+ tags: arraySchema(STRING_SCHEMA),
40
+ sentResponseId: STRING_SCHEMA,
41
+ sendError: STRING_SCHEMA,
42
+ };
43
+ const CHANNEL_DRAFT_REQUIRED = ['version', 'id', 'createdAt', 'updatedAt', 'status', 'message'];
44
+ const CHANNEL_DRAFT_SCHEMA = objectSchema({ ...CHANNEL_DRAFT_PROPERTIES }, [...CHANNEL_DRAFT_REQUIRED]);
45
+ const CHANNEL_DRAFT_GET_OUTPUT_SCHEMA = objectSchema({ ...CHANNEL_DRAFT_PROPERTIES, notFound: BOOLEAN_SCHEMA }, [], { additionalProperties: true });
4
46
  export const builtinGatewayChannelMethodDescriptors = [
5
47
  methodDescriptor({
6
48
  id: 'channels.accounts.list',
@@ -542,4 +584,136 @@ export const builtinGatewayChannelMethodDescriptors = [
542
584
  outputSchema: SERVICE_STATUS_SCHEMA,
543
585
  dangerous: true,
544
586
  }),
587
+ methodDescriptor({
588
+ id: 'channels.inbox.list',
589
+ title: 'List Channel Inbox',
590
+ description: 'Return per-provider inbound message feeds (Slack DMs, Discord messages, email threads) fetched live from provider APIs. Read-only; no provider write.',
591
+ category: 'channels',
592
+ scopes: ['read:channels'],
593
+ http: { method: 'GET', path: '/api/channels/inbox' },
594
+ inputSchema: objectSchema({
595
+ provider: STRING_SCHEMA,
596
+ limit: NUMBER_SCHEMA,
597
+ since: NUMBER_SCHEMA,
598
+ }),
599
+ outputSchema: objectSchema({
600
+ items: arraySchema(CHANNEL_INBOX_ITEM_SCHEMA),
601
+ total: NUMBER_SCHEMA,
602
+ truncated: BOOLEAN_SCHEMA,
603
+ cursor: STRING_SCHEMA,
604
+ }, ['items', 'total', 'truncated']),
605
+ }),
606
+ methodDescriptor({
607
+ id: 'channels.routing.list',
608
+ title: 'List Channel Routing Rules',
609
+ description: 'Return the daemon-persisted channel-to-profile routing table.',
610
+ category: 'channels',
611
+ scopes: ['read:channels'],
612
+ http: { method: 'GET', path: '/api/channels/routing' },
613
+ inputSchema: objectSchema({
614
+ profileId: STRING_SCHEMA,
615
+ surfaceKind: STRING_SCHEMA,
616
+ limit: NUMBER_SCHEMA,
617
+ }),
618
+ outputSchema: objectSchema({
619
+ routes: arraySchema(CHANNEL_ROUTING_RULE_SCHEMA),
620
+ total: NUMBER_SCHEMA,
621
+ }, ['routes', 'total']),
622
+ }),
623
+ methodDescriptor({
624
+ id: 'channels.routing.assign',
625
+ title: 'Assign Channel Routing Rule',
626
+ description: 'Create or update a channel-to-profile routing rule in the daemon-persisted routing table. Requires explicit confirmation.',
627
+ category: 'channels',
628
+ scopes: ['write:channels'],
629
+ access: 'admin',
630
+ http: { method: 'POST', path: '/api/channels/routing' },
631
+ inputSchema: bodyEnvelopeSchema({
632
+ channelId: STRING_SCHEMA,
633
+ surfaceKind: STRING_SCHEMA,
634
+ routeId: STRING_SCHEMA,
635
+ profileId: STRING_SCHEMA,
636
+ label: STRING_SCHEMA,
637
+ }, ['surfaceKind', 'profileId']),
638
+ outputSchema: objectSchema({
639
+ assignmentId: STRING_SCHEMA,
640
+ channelId: STRING_SCHEMA,
641
+ surfaceKind: STRING_SCHEMA,
642
+ routeId: STRING_SCHEMA,
643
+ profileId: STRING_SCHEMA,
644
+ label: STRING_SCHEMA,
645
+ createdAt: STRING_SCHEMA,
646
+ updatedAt: STRING_SCHEMA,
647
+ }, ['assignmentId', 'surfaceKind', 'profileId', 'createdAt', 'updatedAt']),
648
+ }),
649
+ methodDescriptor({
650
+ id: 'channels.routing.delete',
651
+ title: 'Delete Channel Routing Rule',
652
+ description: 'Remove a channel-to-profile routing rule from the daemon-persisted routing table.',
653
+ category: 'channels',
654
+ scopes: ['write:channels'],
655
+ access: 'admin',
656
+ http: { method: 'DELETE', path: '/api/channels/routing/{assignmentId}' },
657
+ inputSchema: objectSchema({ assignmentId: STRING_SCHEMA }, ['assignmentId']),
658
+ outputSchema: objectSchema({
659
+ deleted: BOOLEAN_SCHEMA,
660
+ assignmentId: STRING_SCHEMA,
661
+ }, ['deleted', 'assignmentId']),
662
+ dangerous: true,
663
+ }),
664
+ methodDescriptor({
665
+ id: 'channels.drafts.list',
666
+ title: 'List Channel Drafts',
667
+ description: 'Return daemon-mirrored channel drafts for cross-device sync. Webhook values are stored redacted.',
668
+ category: 'channels',
669
+ scopes: ['read:channels'],
670
+ http: { method: 'GET', path: '/api/channels/drafts' },
671
+ inputSchema: objectSchema({
672
+ status: STRING_SCHEMA,
673
+ limit: NUMBER_SCHEMA,
674
+ }),
675
+ outputSchema: objectSchema({
676
+ drafts: arraySchema(CHANNEL_DRAFT_SCHEMA),
677
+ total: NUMBER_SCHEMA,
678
+ }, ['drafts', 'total']),
679
+ }),
680
+ methodDescriptor({
681
+ id: 'channels.drafts.get',
682
+ title: 'Get Channel Draft',
683
+ description: 'Return a single daemon-mirrored channel draft by id, or a notFound marker.',
684
+ category: 'channels',
685
+ scopes: ['read:channels'],
686
+ http: { method: 'GET', path: '/api/channels/drafts/{draftId}' },
687
+ inputSchema: objectSchema({ draftId: STRING_SCHEMA }, ['draftId']),
688
+ outputSchema: CHANNEL_DRAFT_GET_OUTPUT_SCHEMA,
689
+ }),
690
+ methodDescriptor({
691
+ id: 'channels.drafts.save',
692
+ title: 'Save Channel Draft',
693
+ description: 'Mirror a channel draft to the daemon-side store. Webhook values must be redacted before transmission; raw webhook tokens are rejected. Requires explicit confirmation.',
694
+ category: 'channels',
695
+ scopes: ['write:channels'],
696
+ access: 'admin',
697
+ http: { method: 'POST', path: '/api/channels/drafts' },
698
+ inputSchema: bodyEnvelopeSchema({ ...CHANNEL_DRAFT_PROPERTIES }, [...CHANNEL_DRAFT_REQUIRED]),
699
+ outputSchema: objectSchema({
700
+ draft: CHANNEL_DRAFT_SCHEMA,
701
+ created: BOOLEAN_SCHEMA,
702
+ }, ['draft', 'created']),
703
+ }),
704
+ methodDescriptor({
705
+ id: 'channels.drafts.delete',
706
+ title: 'Delete Channel Draft',
707
+ description: 'Remove a channel draft from the daemon-side store.',
708
+ category: 'channels',
709
+ scopes: ['write:channels'],
710
+ access: 'admin',
711
+ http: { method: 'DELETE', path: '/api/channels/drafts/{draftId}' },
712
+ inputSchema: objectSchema({ draftId: STRING_SCHEMA }, ['draftId']),
713
+ outputSchema: objectSchema({
714
+ deleted: BOOLEAN_SCHEMA,
715
+ draftId: STRING_SCHEMA,
716
+ }, ['deleted', 'draftId']),
717
+ dangerous: true,
718
+ }),
545
719
  ];
@@ -0,0 +1,9 @@
1
+ import type { GatewayMethodDescriptor } from './method-catalog-shared.js';
2
+ /**
3
+ * Email operator methods — exposes the agent's IMAP/SMTP capabilities through the
4
+ * standard operator method protocol so email operations can be triggered via MCP
5
+ * connector actions in addition to the direct-socket path. Daemon-backed; the SDK
6
+ * publishes the typed contract surface (no internal handler).
7
+ */
8
+ export declare const builtinGatewayEmailMethodDescriptors: readonly GatewayMethodDescriptor[];
9
+ //# sourceMappingURL=method-catalog-email.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"method-catalog-email.d.ts","sourceRoot":"","sources":["../../../src/platform/control-plane/method-catalog-email.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAsC1E;;;;;GAKG;AACH,eAAO,MAAM,oCAAoC,EAAE,SAAS,uBAAuB,EAyElF,CAAC"}
@@ -0,0 +1,101 @@
1
+ import { STRING_SCHEMA, BOOLEAN_SCHEMA, NUMBER_SCHEMA, arraySchema, objectSchema, bodyEnvelopeSchema, methodDescriptor, } from './method-catalog-shared.js';
2
+ const EMAIL_INBOX_MESSAGE_SCHEMA = objectSchema({
3
+ uid: NUMBER_SCHEMA,
4
+ from: STRING_SCHEMA,
5
+ subject: STRING_SCHEMA,
6
+ date: STRING_SCHEMA,
7
+ unread: BOOLEAN_SCHEMA,
8
+ bodyPreview: STRING_SCHEMA,
9
+ messageId: STRING_SCHEMA,
10
+ }, ['uid', 'from', 'subject', 'date', 'unread', 'bodyPreview', 'messageId']);
11
+ const EMAIL_ATTACHMENT_SCHEMA = objectSchema({
12
+ filename: STRING_SCHEMA,
13
+ contentType: STRING_SCHEMA,
14
+ sizeBytes: NUMBER_SCHEMA,
15
+ }, ['filename', 'contentType', 'sizeBytes']);
16
+ const EMAIL_MESSAGE_DETAIL_SCHEMA = objectSchema({
17
+ uid: NUMBER_SCHEMA,
18
+ from: STRING_SCHEMA,
19
+ subject: STRING_SCHEMA,
20
+ date: STRING_SCHEMA,
21
+ messageId: STRING_SCHEMA,
22
+ bodyText: STRING_SCHEMA,
23
+ bodyHtml: STRING_SCHEMA,
24
+ attachments: arraySchema(EMAIL_ATTACHMENT_SCHEMA),
25
+ }, ['uid', 'from', 'subject', 'date', 'messageId', 'bodyText']);
26
+ /**
27
+ * Email operator methods — exposes the agent's IMAP/SMTP capabilities through the
28
+ * standard operator method protocol so email operations can be triggered via MCP
29
+ * connector actions in addition to the direct-socket path. Daemon-backed; the SDK
30
+ * publishes the typed contract surface (no internal handler).
31
+ */
32
+ export const builtinGatewayEmailMethodDescriptors = [
33
+ methodDescriptor({
34
+ id: 'email.inbox.list',
35
+ title: 'List Email Inbox',
36
+ description: 'Return inbox message summaries fetched live from the configured IMAP account. Read-only (EXAMINE / BODY.PEEK); never marks messages read.',
37
+ category: 'email',
38
+ scopes: ['read:email'],
39
+ http: { method: 'GET', path: '/api/email/inbox' },
40
+ inputSchema: objectSchema({
41
+ limit: NUMBER_SCHEMA,
42
+ since: STRING_SCHEMA,
43
+ unreadOnly: BOOLEAN_SCHEMA,
44
+ }),
45
+ outputSchema: objectSchema({
46
+ messages: arraySchema(EMAIL_INBOX_MESSAGE_SCHEMA),
47
+ total: NUMBER_SCHEMA,
48
+ }, ['messages', 'total']),
49
+ }),
50
+ methodDescriptor({
51
+ id: 'email.inbox.read',
52
+ title: 'Read Email Message',
53
+ description: 'Return the full body and attachment metadata for a single inbox message by IMAP UID. Read-only (BODY.PEEK; does not mark as read).',
54
+ category: 'email',
55
+ scopes: ['read:email'],
56
+ http: { method: 'GET', path: '/api/email/inbox/{uid}' },
57
+ inputSchema: objectSchema({ uid: NUMBER_SCHEMA }, ['uid']),
58
+ outputSchema: EMAIL_MESSAGE_DETAIL_SCHEMA,
59
+ }),
60
+ methodDescriptor({
61
+ id: 'email.draft.create',
62
+ title: 'Create Email Draft',
63
+ description: 'Append a draft message to the configured IMAP Drafts folder. Distinct from the local channel draft store. Requires explicit confirmation.',
64
+ category: 'email',
65
+ scopes: ['write:email'],
66
+ access: 'admin',
67
+ http: { method: 'POST', path: '/api/email/drafts' },
68
+ inputSchema: bodyEnvelopeSchema({
69
+ to: STRING_SCHEMA,
70
+ subject: STRING_SCHEMA,
71
+ body: STRING_SCHEMA,
72
+ inReplyTo: STRING_SCHEMA,
73
+ references: STRING_SCHEMA,
74
+ }, ['to', 'subject', 'body']),
75
+ outputSchema: objectSchema({
76
+ uid: NUMBER_SCHEMA,
77
+ draftId: STRING_SCHEMA,
78
+ }, ['uid', 'draftId']),
79
+ }),
80
+ methodDescriptor({
81
+ id: 'email.send',
82
+ title: 'Send Email',
83
+ description: 'Send a composed email via the configured SMTP account. Irreversible external send; requires confirm: true and explicit user review of recipients and body.',
84
+ category: 'email',
85
+ scopes: ['write:email'],
86
+ access: 'admin',
87
+ http: { method: 'POST', path: '/api/email/send' },
88
+ inputSchema: bodyEnvelopeSchema({
89
+ to: STRING_SCHEMA,
90
+ subject: STRING_SCHEMA,
91
+ body: STRING_SCHEMA,
92
+ inReplyTo: STRING_SCHEMA,
93
+ confirm: BOOLEAN_SCHEMA,
94
+ }, ['to', 'subject', 'body', 'confirm']),
95
+ outputSchema: objectSchema({
96
+ messageId: STRING_SCHEMA,
97
+ sentAt: STRING_SCHEMA,
98
+ }, ['messageId', 'sentAt']),
99
+ dangerous: true,
100
+ }),
101
+ ];
@@ -1 +1 @@
1
- {"version":3,"file":"method-catalog.d.ts","sourceRoot":"","sources":["../../../src/platform/control-plane/method-catalog.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EACV,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,EACvB,oBAAoB,EACpB,uBAAuB,EACvB,wBAAwB,EACzB,MAAM,4BAA4B,CAAC;AAKpC,YAAY,EACV,sBAAsB,EACtB,uBAAuB,EACvB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,uBAAuB,EACvB,oBAAoB,EACpB,uBAAuB,EACvB,8BAA8B,EAC9B,wBAAwB,EACxB,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,4BAA4B,CAAC;AA2DpC,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA8C;IACtE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA6C;gBAExD,OAAO,GAAE;QAAE,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAA;KAAO;IAWhE,QAAQ,CACN,UAAU,EAAE,uBAAuB,EACnC,OAAO,CAAC,EAAE,oBAAoB,EAC9B,OAAO,GAAE;QAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAO,GAC3C,MAAM,IAAI;IAcb,aAAa,CACX,UAAU,EAAE,sBAAsB,EAClC,OAAO,GAAE;QAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAO,GAC3C,MAAM,IAAI;IAcb,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAI/B,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAIpC,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAa1C,IAAI,CAAC,OAAO,GAAE,wBAA6B,GAAG,uBAAuB,EAAE;IASvE,UAAU,CAAC,OAAO,GAAE,uBAA4B,GAAG,sBAAsB,EAAE;IAU3E,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,uBAAuB,GAAG,IAAI;IAI/C,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,sBAAsB,GAAG,IAAI;IAInD,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAI/B,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,uBAAuB,GAAG,IAAI;IAUnF,YAAY,CAAC,OAAO,GAAE;QAAE,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,MAAM,EAAE;IAiBnE,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,uBAAuB,GAAG,OAAO,CAAC,OAAO,CAAC;CAMhF"}
1
+ {"version":3,"file":"method-catalog.d.ts","sourceRoot":"","sources":["../../../src/platform/control-plane/method-catalog.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EACV,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,EACvB,oBAAoB,EACpB,uBAAuB,EACvB,wBAAwB,EACzB,MAAM,4BAA4B,CAAC;AAKpC,YAAY,EACV,sBAAsB,EACtB,uBAAuB,EACvB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,uBAAuB,EACvB,oBAAoB,EACpB,uBAAuB,EACvB,8BAA8B,EAC9B,wBAAwB,EACxB,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,4BAA4B,CAAC;AA6DpC,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA8C;IACtE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA6C;gBAExD,OAAO,GAAE;QAAE,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAA;KAAO;IAWhE,QAAQ,CACN,UAAU,EAAE,uBAAuB,EACnC,OAAO,CAAC,EAAE,oBAAoB,EAC9B,OAAO,GAAE;QAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAO,GAC3C,MAAM,IAAI;IAcb,aAAa,CACX,UAAU,EAAE,sBAAsB,EAClC,OAAO,GAAE;QAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAO,GAC3C,MAAM,IAAI;IAcb,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAI/B,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAIpC,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAa1C,IAAI,CAAC,OAAO,GAAE,wBAA6B,GAAG,uBAAuB,EAAE;IASvE,UAAU,CAAC,OAAO,GAAE,uBAA4B,GAAG,sBAAsB,EAAE;IAU3E,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,uBAAuB,GAAG,IAAI;IAI/C,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,sBAAsB,GAAG,IAAI;IAInD,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAI/B,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,uBAAuB,GAAG,IAAI;IAUnF,YAAY,CAAC,OAAO,GAAE;QAAE,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,MAAM,EAAE;IAiBnE,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,uBAAuB,GAAG,OAAO,CAAC,OAAO,CAAC;CAMhF"}
@@ -1,6 +1,8 @@
1
1
  import { builtinGatewayAdminMethodDescriptors, } from './method-catalog-admin.js';
2
2
  import { builtinGatewayChannelMethodDescriptors, } from './method-catalog-channels.js';
3
3
  import { builtinGatewayControlMethodDescriptors, } from './method-catalog-control.js';
4
+ import { builtinGatewayEmailMethodDescriptors, } from './method-catalog-email.js';
5
+ import { builtinGatewayCalendarMethodDescriptors, } from './method-catalog-calendar.js';
4
6
  import { builtinGatewayEventDescriptors, } from './method-catalog-events.js';
5
7
  import { builtinGatewayKnowledgeMethodDescriptors, } from './method-catalog-knowledge.js';
6
8
  import { builtinGatewayMediaMethodDescriptors, } from './method-catalog-media.js';
@@ -9,6 +11,8 @@ const BUILTIN_GATEWAY_EVENTS = builtinGatewayEventDescriptors;
9
11
  const BUILTIN_GATEWAY_METHODS = [
10
12
  ...builtinGatewayControlMethodDescriptors,
11
13
  ...builtinGatewayChannelMethodDescriptors,
14
+ ...builtinGatewayEmailMethodDescriptors,
15
+ ...builtinGatewayCalendarMethodDescriptors,
12
16
  ...builtinGatewayRuntimeMethodDescriptors,
13
17
  ...builtinGatewayKnowledgeMethodDescriptors,
14
18
  ...builtinGatewayMediaMethodDescriptors,
@@ -1,6 +1,6 @@
1
1
  import { readFileSync } from 'node:fs';
2
2
  import { join } from 'node:path';
3
- let version = '0.33.38';
3
+ let version = '0.34.0';
4
4
  try {
5
5
  const pkg = JSON.parse(readFileSync(join(import.meta.dir, '..', '..', 'package.json'), 'utf-8'));
6
6
  version = pkg.version ?? version;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pellux/goodvibes-sdk",
3
- "version": "0.33.38",
3
+ "version": "0.34.0",
4
4
  "description": "TypeScript SDK for building GoodVibes operator, peer, web, mobile, and daemon-connected apps with typed contracts, auth, realtime events, and transport layers.",
5
5
  "keywords": [
6
6
  "goodvibes",
@@ -453,14 +453,14 @@
453
453
  "sideEffects": false,
454
454
  "type": "module",
455
455
  "dependencies": {
456
- "@pellux/goodvibes-contracts": "0.33.38",
457
- "@pellux/goodvibes-daemon-sdk": "0.33.38",
458
- "@pellux/goodvibes-errors": "0.33.38",
459
- "@pellux/goodvibes-operator-sdk": "0.33.38",
460
- "@pellux/goodvibes-peer-sdk": "0.33.38",
461
- "@pellux/goodvibes-transport-core": "0.33.38",
462
- "@pellux/goodvibes-transport-http": "0.33.38",
463
- "@pellux/goodvibes-transport-realtime": "0.33.38"
456
+ "@pellux/goodvibes-contracts": "0.34.0",
457
+ "@pellux/goodvibes-daemon-sdk": "0.34.0",
458
+ "@pellux/goodvibes-errors": "0.34.0",
459
+ "@pellux/goodvibes-operator-sdk": "0.34.0",
460
+ "@pellux/goodvibes-peer-sdk": "0.34.0",
461
+ "@pellux/goodvibes-transport-core": "0.34.0",
462
+ "@pellux/goodvibes-transport-http": "0.34.0",
463
+ "@pellux/goodvibes-transport-realtime": "0.34.0"
464
464
  },
465
465
  "optionalDependencies": {
466
466
  "@agentclientprotocol/sdk": "^0.21.0",