@pellux/goodvibes-contracts 0.33.37 → 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.
@@ -3,7 +3,7 @@ export const OPERATOR_CONTRACT = {
3
3
  "product": {
4
4
  "id": "goodvibes",
5
5
  "surface": "operator",
6
- "version": "0.33.37"
6
+ "version": "0.34.0"
7
7
  },
8
8
  "auth": {
9
9
  "modes": [
@@ -5770,7 +5770,7 @@ export const OPERATOR_CONTRACT = {
5770
5770
  {
5771
5771
  "id": "automation.jobs.list",
5772
5772
  "title": "List Automation Jobs",
5773
- "description": "Return automation jobs and recent runs.",
5773
+ "description": "Return automation jobs and recent runs. Without ?limit/?cursor returns { jobs: [...] } (backward compatible). With ?limit=N (1–500, default 100) and optional ?cursor=<opaque> returns a PaginatedResponse envelope { items, hasMore, nextCursor? }. Invalid cursors return HTTP 400.",
5774
5774
  "category": "automation",
5775
5775
  "source": "builtin",
5776
5776
  "access": "authenticated",
@@ -5790,7 +5790,14 @@ export const OPERATOR_CONTRACT = {
5790
5790
  ],
5791
5791
  "inputSchema": {
5792
5792
  "type": "object",
5793
- "properties": {},
5793
+ "properties": {
5794
+ "limit": {
5795
+ "type": "number"
5796
+ },
5797
+ "cursor": {
5798
+ "type": "string"
5799
+ }
5800
+ },
5794
5801
  "additionalProperties": false
5795
5802
  },
5796
5803
  "outputSchema": {
@@ -10115,7 +10122,7 @@ export const OPERATOR_CONTRACT = {
10115
10122
  {
10116
10123
  "id": "automation.runs.list",
10117
10124
  "title": "List Automation Runs",
10118
- "description": "Return automation run history.",
10125
+ "description": "Return automation run history. Without ?limit/?cursor returns { runs: [...] } (backward compatible). With ?limit=N (1–500, default 100) and optional ?cursor=<opaque> returns a PaginatedResponse envelope { items, hasMore, nextCursor? }. Invalid cursors return HTTP 400.",
10119
10126
  "category": "automation",
10120
10127
  "source": "builtin",
10121
10128
  "access": "authenticated",
@@ -10132,7 +10139,14 @@ export const OPERATOR_CONTRACT = {
10132
10139
  },
10133
10140
  "inputSchema": {
10134
10141
  "type": "object",
10135
- "properties": {},
10142
+ "properties": {
10143
+ "limit": {
10144
+ "type": "number"
10145
+ },
10146
+ "cursor": {
10147
+ "type": "string"
10148
+ }
10149
+ },
10136
10150
  "additionalProperties": false
10137
10151
  },
10138
10152
  "outputSchema": {
@@ -15223,6 +15237,364 @@ export const OPERATOR_CONTRACT = {
15223
15237
  },
15224
15238
  "invokable": true
15225
15239
  },
15240
+ {
15241
+ "id": "calendar.events.create",
15242
+ "title": "Create Calendar Event",
15243
+ "description": "Create an event on the configured CalDAV calendar. Requires explicit confirmation.",
15244
+ "category": "calendar",
15245
+ "source": "builtin",
15246
+ "access": "admin",
15247
+ "transport": [
15248
+ "http",
15249
+ "ws"
15250
+ ],
15251
+ "scopes": [
15252
+ "write:calendar"
15253
+ ],
15254
+ "http": {
15255
+ "method": "POST",
15256
+ "path": "/api/calendar/events"
15257
+ },
15258
+ "inputSchema": {
15259
+ "type": "object",
15260
+ "properties": {
15261
+ "title": {
15262
+ "type": "string"
15263
+ },
15264
+ "start": {
15265
+ "type": "string"
15266
+ },
15267
+ "end": {
15268
+ "type": "string"
15269
+ },
15270
+ "description": {
15271
+ "type": "string"
15272
+ },
15273
+ "attendees": {
15274
+ "type": "array",
15275
+ "items": {
15276
+ "type": "string"
15277
+ }
15278
+ },
15279
+ "location": {
15280
+ "type": "string"
15281
+ },
15282
+ "calendarId": {
15283
+ "type": "string"
15284
+ },
15285
+ "confirm": {
15286
+ "type": "boolean"
15287
+ }
15288
+ },
15289
+ "required": [
15290
+ "title",
15291
+ "start",
15292
+ "end",
15293
+ "confirm"
15294
+ ],
15295
+ "additionalProperties": true
15296
+ },
15297
+ "outputSchema": {
15298
+ "type": "object",
15299
+ "properties": {
15300
+ "eventId": {
15301
+ "type": "string"
15302
+ },
15303
+ "uid": {
15304
+ "type": "string"
15305
+ },
15306
+ "createdAt": {
15307
+ "type": "string"
15308
+ }
15309
+ },
15310
+ "required": [
15311
+ "eventId",
15312
+ "uid",
15313
+ "createdAt"
15314
+ ],
15315
+ "additionalProperties": false
15316
+ },
15317
+ "invokable": true
15318
+ },
15319
+ {
15320
+ "id": "calendar.events.get",
15321
+ "title": "Get Calendar Event",
15322
+ "description": "Return the full event object including attendees, recurrence, and raw iCalendar UID.",
15323
+ "category": "calendar",
15324
+ "source": "builtin",
15325
+ "access": "authenticated",
15326
+ "transport": [
15327
+ "http",
15328
+ "ws"
15329
+ ],
15330
+ "scopes": [
15331
+ "read:calendar"
15332
+ ],
15333
+ "http": {
15334
+ "method": "GET",
15335
+ "path": "/api/calendar/events/{eventId}"
15336
+ },
15337
+ "inputSchema": {
15338
+ "type": "object",
15339
+ "properties": {
15340
+ "eventId": {
15341
+ "type": "string"
15342
+ },
15343
+ "calendarId": {
15344
+ "type": "string"
15345
+ }
15346
+ },
15347
+ "required": [
15348
+ "eventId"
15349
+ ],
15350
+ "additionalProperties": false
15351
+ },
15352
+ "outputSchema": {
15353
+ "type": "object",
15354
+ "properties": {
15355
+ "id": {
15356
+ "type": "string"
15357
+ },
15358
+ "uid": {
15359
+ "type": "string"
15360
+ },
15361
+ "title": {
15362
+ "type": "string"
15363
+ },
15364
+ "start": {
15365
+ "type": "string"
15366
+ },
15367
+ "end": {
15368
+ "type": "string"
15369
+ },
15370
+ "location": {
15371
+ "type": "string"
15372
+ },
15373
+ "description": {
15374
+ "type": "string"
15375
+ },
15376
+ "attendees": {
15377
+ "type": "array",
15378
+ "items": {
15379
+ "type": "string"
15380
+ }
15381
+ },
15382
+ "recurrence": {
15383
+ "type": "string"
15384
+ }
15385
+ },
15386
+ "required": [
15387
+ "id",
15388
+ "title",
15389
+ "start",
15390
+ "end"
15391
+ ],
15392
+ "additionalProperties": false
15393
+ },
15394
+ "invokable": true
15395
+ },
15396
+ {
15397
+ "id": "calendar.events.list",
15398
+ "title": "List Calendar Events",
15399
+ "description": "Return calendar event summaries from the configured CalDAV calendar within an optional time window.",
15400
+ "category": "calendar",
15401
+ "source": "builtin",
15402
+ "access": "authenticated",
15403
+ "transport": [
15404
+ "http",
15405
+ "ws"
15406
+ ],
15407
+ "scopes": [
15408
+ "read:calendar"
15409
+ ],
15410
+ "http": {
15411
+ "method": "GET",
15412
+ "path": "/api/calendar/events"
15413
+ },
15414
+ "inputSchema": {
15415
+ "type": "object",
15416
+ "properties": {
15417
+ "calendarId": {
15418
+ "type": "string"
15419
+ },
15420
+ "from": {
15421
+ "type": "string"
15422
+ },
15423
+ "to": {
15424
+ "type": "string"
15425
+ },
15426
+ "limit": {
15427
+ "type": "number"
15428
+ }
15429
+ },
15430
+ "additionalProperties": false
15431
+ },
15432
+ "outputSchema": {
15433
+ "type": "object",
15434
+ "properties": {
15435
+ "events": {
15436
+ "type": "array",
15437
+ "items": {
15438
+ "type": "object",
15439
+ "properties": {
15440
+ "id": {
15441
+ "type": "string"
15442
+ },
15443
+ "title": {
15444
+ "type": "string"
15445
+ },
15446
+ "start": {
15447
+ "type": "string"
15448
+ },
15449
+ "end": {
15450
+ "type": "string"
15451
+ },
15452
+ "location": {
15453
+ "type": "string"
15454
+ },
15455
+ "description": {
15456
+ "type": "string"
15457
+ },
15458
+ "attendees": {
15459
+ "type": "array",
15460
+ "items": {
15461
+ "type": "string"
15462
+ }
15463
+ }
15464
+ },
15465
+ "required": [
15466
+ "id",
15467
+ "title",
15468
+ "start",
15469
+ "end"
15470
+ ],
15471
+ "additionalProperties": false
15472
+ }
15473
+ }
15474
+ },
15475
+ "required": [
15476
+ "events"
15477
+ ],
15478
+ "additionalProperties": false
15479
+ },
15480
+ "invokable": true
15481
+ },
15482
+ {
15483
+ "id": "calendar.ics.export",
15484
+ "title": "Export iCalendar",
15485
+ "description": "Export events from the configured CalDAV calendar as raw .ics content within an optional time window.",
15486
+ "category": "calendar",
15487
+ "source": "builtin",
15488
+ "access": "authenticated",
15489
+ "transport": [
15490
+ "http",
15491
+ "ws"
15492
+ ],
15493
+ "scopes": [
15494
+ "read:calendar"
15495
+ ],
15496
+ "http": {
15497
+ "method": "GET",
15498
+ "path": "/api/calendar/ics/export"
15499
+ },
15500
+ "inputSchema": {
15501
+ "type": "object",
15502
+ "properties": {
15503
+ "calendarId": {
15504
+ "type": "string"
15505
+ },
15506
+ "from": {
15507
+ "type": "string"
15508
+ },
15509
+ "to": {
15510
+ "type": "string"
15511
+ }
15512
+ },
15513
+ "additionalProperties": false
15514
+ },
15515
+ "outputSchema": {
15516
+ "type": "object",
15517
+ "properties": {
15518
+ "icsContent": {
15519
+ "type": "string"
15520
+ },
15521
+ "eventCount": {
15522
+ "type": "number"
15523
+ }
15524
+ },
15525
+ "required": [
15526
+ "icsContent",
15527
+ "eventCount"
15528
+ ],
15529
+ "additionalProperties": false
15530
+ },
15531
+ "invokable": true
15532
+ },
15533
+ {
15534
+ "id": "calendar.ics.import",
15535
+ "title": "Import iCalendar",
15536
+ "description": "Import raw .ics content into the configured CalDAV calendar. Requires explicit confirmation.",
15537
+ "category": "calendar",
15538
+ "source": "builtin",
15539
+ "access": "admin",
15540
+ "transport": [
15541
+ "http",
15542
+ "ws"
15543
+ ],
15544
+ "scopes": [
15545
+ "write:calendar"
15546
+ ],
15547
+ "http": {
15548
+ "method": "POST",
15549
+ "path": "/api/calendar/ics/import"
15550
+ },
15551
+ "inputSchema": {
15552
+ "type": "object",
15553
+ "properties": {
15554
+ "icsContent": {
15555
+ "type": "string"
15556
+ },
15557
+ "calendarId": {
15558
+ "type": "string"
15559
+ },
15560
+ "confirm": {
15561
+ "type": "boolean"
15562
+ }
15563
+ },
15564
+ "required": [
15565
+ "icsContent",
15566
+ "confirm"
15567
+ ],
15568
+ "additionalProperties": true
15569
+ },
15570
+ "outputSchema": {
15571
+ "type": "object",
15572
+ "properties": {
15573
+ "imported": {
15574
+ "type": "number"
15575
+ },
15576
+ "eventIds": {
15577
+ "type": "array",
15578
+ "items": {
15579
+ "type": "string"
15580
+ }
15581
+ },
15582
+ "errors": {
15583
+ "type": "array",
15584
+ "items": {
15585
+ "type": "string"
15586
+ }
15587
+ }
15588
+ },
15589
+ "required": [
15590
+ "imported",
15591
+ "eventIds",
15592
+ "errors"
15593
+ ],
15594
+ "additionalProperties": false
15595
+ },
15596
+ "invokable": true
15597
+ },
15226
15598
  {
15227
15599
  "id": "channels.accounts.action.default",
15228
15600
  "title": "Run Channel Account Action",
@@ -18317,6 +18689,508 @@ export const OPERATOR_CONTRACT = {
18317
18689
  },
18318
18690
  "invokable": true
18319
18691
  },
18692
+ {
18693
+ "id": "channels.drafts.delete",
18694
+ "title": "Delete Channel Draft",
18695
+ "description": "Remove a channel draft from the daemon-side store.",
18696
+ "category": "channels",
18697
+ "source": "builtin",
18698
+ "access": "admin",
18699
+ "transport": [
18700
+ "http",
18701
+ "ws"
18702
+ ],
18703
+ "scopes": [
18704
+ "write:channels"
18705
+ ],
18706
+ "http": {
18707
+ "method": "DELETE",
18708
+ "path": "/api/channels/drafts/{draftId}"
18709
+ },
18710
+ "inputSchema": {
18711
+ "type": "object",
18712
+ "properties": {
18713
+ "draftId": {
18714
+ "type": "string"
18715
+ }
18716
+ },
18717
+ "required": [
18718
+ "draftId"
18719
+ ],
18720
+ "additionalProperties": false
18721
+ },
18722
+ "outputSchema": {
18723
+ "type": "object",
18724
+ "properties": {
18725
+ "deleted": {
18726
+ "type": "boolean"
18727
+ },
18728
+ "draftId": {
18729
+ "type": "string"
18730
+ }
18731
+ },
18732
+ "required": [
18733
+ "deleted",
18734
+ "draftId"
18735
+ ],
18736
+ "additionalProperties": false
18737
+ },
18738
+ "dangerous": true,
18739
+ "invokable": true
18740
+ },
18741
+ {
18742
+ "id": "channels.drafts.get",
18743
+ "title": "Get Channel Draft",
18744
+ "description": "Return a single daemon-mirrored channel draft by id, or a notFound marker.",
18745
+ "category": "channels",
18746
+ "source": "builtin",
18747
+ "access": "authenticated",
18748
+ "transport": [
18749
+ "http",
18750
+ "ws"
18751
+ ],
18752
+ "scopes": [
18753
+ "read:channels"
18754
+ ],
18755
+ "http": {
18756
+ "method": "GET",
18757
+ "path": "/api/channels/drafts/{draftId}"
18758
+ },
18759
+ "inputSchema": {
18760
+ "type": "object",
18761
+ "properties": {
18762
+ "draftId": {
18763
+ "type": "string"
18764
+ }
18765
+ },
18766
+ "required": [
18767
+ "draftId"
18768
+ ],
18769
+ "additionalProperties": false
18770
+ },
18771
+ "outputSchema": {
18772
+ "type": "object",
18773
+ "properties": {
18774
+ "version": {
18775
+ "type": "number"
18776
+ },
18777
+ "id": {
18778
+ "type": "string"
18779
+ },
18780
+ "createdAt": {
18781
+ "type": "string"
18782
+ },
18783
+ "updatedAt": {
18784
+ "type": "string"
18785
+ },
18786
+ "status": {
18787
+ "type": "string"
18788
+ },
18789
+ "title": {
18790
+ "type": "string"
18791
+ },
18792
+ "message": {
18793
+ "type": "string"
18794
+ },
18795
+ "channel": {
18796
+ "type": "string"
18797
+ },
18798
+ "route": {
18799
+ "type": "string"
18800
+ },
18801
+ "webhook": {
18802
+ "type": "string"
18803
+ },
18804
+ "link": {
18805
+ "type": "string"
18806
+ },
18807
+ "tags": {
18808
+ "type": "array",
18809
+ "items": {
18810
+ "type": "string"
18811
+ }
18812
+ },
18813
+ "sentResponseId": {
18814
+ "type": "string"
18815
+ },
18816
+ "sendError": {
18817
+ "type": "string"
18818
+ },
18819
+ "notFound": {
18820
+ "type": "boolean"
18821
+ }
18822
+ },
18823
+ "additionalProperties": true
18824
+ },
18825
+ "invokable": true
18826
+ },
18827
+ {
18828
+ "id": "channels.drafts.list",
18829
+ "title": "List Channel Drafts",
18830
+ "description": "Return daemon-mirrored channel drafts for cross-device sync. Webhook values are stored redacted.",
18831
+ "category": "channels",
18832
+ "source": "builtin",
18833
+ "access": "authenticated",
18834
+ "transport": [
18835
+ "http",
18836
+ "ws"
18837
+ ],
18838
+ "scopes": [
18839
+ "read:channels"
18840
+ ],
18841
+ "http": {
18842
+ "method": "GET",
18843
+ "path": "/api/channels/drafts"
18844
+ },
18845
+ "inputSchema": {
18846
+ "type": "object",
18847
+ "properties": {
18848
+ "status": {
18849
+ "type": "string"
18850
+ },
18851
+ "limit": {
18852
+ "type": "number"
18853
+ }
18854
+ },
18855
+ "additionalProperties": false
18856
+ },
18857
+ "outputSchema": {
18858
+ "type": "object",
18859
+ "properties": {
18860
+ "drafts": {
18861
+ "type": "array",
18862
+ "items": {
18863
+ "type": "object",
18864
+ "properties": {
18865
+ "version": {
18866
+ "type": "number"
18867
+ },
18868
+ "id": {
18869
+ "type": "string"
18870
+ },
18871
+ "createdAt": {
18872
+ "type": "string"
18873
+ },
18874
+ "updatedAt": {
18875
+ "type": "string"
18876
+ },
18877
+ "status": {
18878
+ "type": "string"
18879
+ },
18880
+ "title": {
18881
+ "type": "string"
18882
+ },
18883
+ "message": {
18884
+ "type": "string"
18885
+ },
18886
+ "channel": {
18887
+ "type": "string"
18888
+ },
18889
+ "route": {
18890
+ "type": "string"
18891
+ },
18892
+ "webhook": {
18893
+ "type": "string"
18894
+ },
18895
+ "link": {
18896
+ "type": "string"
18897
+ },
18898
+ "tags": {
18899
+ "type": "array",
18900
+ "items": {
18901
+ "type": "string"
18902
+ }
18903
+ },
18904
+ "sentResponseId": {
18905
+ "type": "string"
18906
+ },
18907
+ "sendError": {
18908
+ "type": "string"
18909
+ }
18910
+ },
18911
+ "required": [
18912
+ "version",
18913
+ "id",
18914
+ "createdAt",
18915
+ "updatedAt",
18916
+ "status",
18917
+ "message"
18918
+ ],
18919
+ "additionalProperties": false
18920
+ }
18921
+ },
18922
+ "total": {
18923
+ "type": "number"
18924
+ }
18925
+ },
18926
+ "required": [
18927
+ "drafts",
18928
+ "total"
18929
+ ],
18930
+ "additionalProperties": false
18931
+ },
18932
+ "invokable": true
18933
+ },
18934
+ {
18935
+ "id": "channels.drafts.save",
18936
+ "title": "Save Channel Draft",
18937
+ "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.",
18938
+ "category": "channels",
18939
+ "source": "builtin",
18940
+ "access": "admin",
18941
+ "transport": [
18942
+ "http",
18943
+ "ws"
18944
+ ],
18945
+ "scopes": [
18946
+ "write:channels"
18947
+ ],
18948
+ "http": {
18949
+ "method": "POST",
18950
+ "path": "/api/channels/drafts"
18951
+ },
18952
+ "inputSchema": {
18953
+ "type": "object",
18954
+ "properties": {
18955
+ "version": {
18956
+ "type": "number"
18957
+ },
18958
+ "id": {
18959
+ "type": "string"
18960
+ },
18961
+ "createdAt": {
18962
+ "type": "string"
18963
+ },
18964
+ "updatedAt": {
18965
+ "type": "string"
18966
+ },
18967
+ "status": {
18968
+ "type": "string"
18969
+ },
18970
+ "title": {
18971
+ "type": "string"
18972
+ },
18973
+ "message": {
18974
+ "type": "string"
18975
+ },
18976
+ "channel": {
18977
+ "type": "string"
18978
+ },
18979
+ "route": {
18980
+ "type": "string"
18981
+ },
18982
+ "webhook": {
18983
+ "type": "string"
18984
+ },
18985
+ "link": {
18986
+ "type": "string"
18987
+ },
18988
+ "tags": {
18989
+ "type": "array",
18990
+ "items": {
18991
+ "type": "string"
18992
+ }
18993
+ },
18994
+ "sentResponseId": {
18995
+ "type": "string"
18996
+ },
18997
+ "sendError": {
18998
+ "type": "string"
18999
+ }
19000
+ },
19001
+ "required": [
19002
+ "version",
19003
+ "id",
19004
+ "createdAt",
19005
+ "updatedAt",
19006
+ "status",
19007
+ "message"
19008
+ ],
19009
+ "additionalProperties": true
19010
+ },
19011
+ "outputSchema": {
19012
+ "type": "object",
19013
+ "properties": {
19014
+ "draft": {
19015
+ "type": "object",
19016
+ "properties": {
19017
+ "version": {
19018
+ "type": "number"
19019
+ },
19020
+ "id": {
19021
+ "type": "string"
19022
+ },
19023
+ "createdAt": {
19024
+ "type": "string"
19025
+ },
19026
+ "updatedAt": {
19027
+ "type": "string"
19028
+ },
19029
+ "status": {
19030
+ "type": "string"
19031
+ },
19032
+ "title": {
19033
+ "type": "string"
19034
+ },
19035
+ "message": {
19036
+ "type": "string"
19037
+ },
19038
+ "channel": {
19039
+ "type": "string"
19040
+ },
19041
+ "route": {
19042
+ "type": "string"
19043
+ },
19044
+ "webhook": {
19045
+ "type": "string"
19046
+ },
19047
+ "link": {
19048
+ "type": "string"
19049
+ },
19050
+ "tags": {
19051
+ "type": "array",
19052
+ "items": {
19053
+ "type": "string"
19054
+ }
19055
+ },
19056
+ "sentResponseId": {
19057
+ "type": "string"
19058
+ },
19059
+ "sendError": {
19060
+ "type": "string"
19061
+ }
19062
+ },
19063
+ "required": [
19064
+ "version",
19065
+ "id",
19066
+ "createdAt",
19067
+ "updatedAt",
19068
+ "status",
19069
+ "message"
19070
+ ],
19071
+ "additionalProperties": false
19072
+ },
19073
+ "created": {
19074
+ "type": "boolean"
19075
+ }
19076
+ },
19077
+ "required": [
19078
+ "draft",
19079
+ "created"
19080
+ ],
19081
+ "additionalProperties": false
19082
+ },
19083
+ "invokable": true
19084
+ },
19085
+ {
19086
+ "id": "channels.inbox.list",
19087
+ "title": "List Channel Inbox",
19088
+ "description": "Return per-provider inbound message feeds (Slack DMs, Discord messages, email threads) fetched live from provider APIs. Read-only; no provider write.",
19089
+ "category": "channels",
19090
+ "source": "builtin",
19091
+ "access": "authenticated",
19092
+ "transport": [
19093
+ "http",
19094
+ "ws"
19095
+ ],
19096
+ "scopes": [
19097
+ "read:channels"
19098
+ ],
19099
+ "http": {
19100
+ "method": "GET",
19101
+ "path": "/api/channels/inbox"
19102
+ },
19103
+ "inputSchema": {
19104
+ "type": "object",
19105
+ "properties": {
19106
+ "provider": {
19107
+ "type": "string"
19108
+ },
19109
+ "limit": {
19110
+ "type": "number"
19111
+ },
19112
+ "since": {
19113
+ "type": "number"
19114
+ }
19115
+ },
19116
+ "additionalProperties": false
19117
+ },
19118
+ "outputSchema": {
19119
+ "type": "object",
19120
+ "properties": {
19121
+ "items": {
19122
+ "type": "array",
19123
+ "items": {
19124
+ "type": "object",
19125
+ "properties": {
19126
+ "id": {
19127
+ "type": "string"
19128
+ },
19129
+ "provider": {
19130
+ "type": "string"
19131
+ },
19132
+ "kind": {
19133
+ "type": "string"
19134
+ },
19135
+ "from": {
19136
+ "type": "string"
19137
+ },
19138
+ "fromAddress": {
19139
+ "type": "string"
19140
+ },
19141
+ "subject": {
19142
+ "type": "string"
19143
+ },
19144
+ "bodyPreview": {
19145
+ "type": "string"
19146
+ },
19147
+ "receivedAt": {
19148
+ "type": "number"
19149
+ },
19150
+ "unread": {
19151
+ "type": "boolean"
19152
+ },
19153
+ "routeId": {
19154
+ "type": "string"
19155
+ },
19156
+ "threadId": {
19157
+ "type": "string"
19158
+ },
19159
+ "attachmentCount": {
19160
+ "type": "number"
19161
+ }
19162
+ },
19163
+ "required": [
19164
+ "id",
19165
+ "provider",
19166
+ "kind",
19167
+ "from",
19168
+ "bodyPreview",
19169
+ "receivedAt",
19170
+ "unread"
19171
+ ],
19172
+ "additionalProperties": false
19173
+ }
19174
+ },
19175
+ "total": {
19176
+ "type": "number"
19177
+ },
19178
+ "truncated": {
19179
+ "type": "boolean"
19180
+ },
19181
+ "cursor": {
19182
+ "type": "string"
19183
+ }
19184
+ },
19185
+ "required": [
19186
+ "items",
19187
+ "total",
19188
+ "truncated"
19189
+ ],
19190
+ "additionalProperties": false
19191
+ },
19192
+ "invokable": true
19193
+ },
18320
19194
  {
18321
19195
  "id": "channels.lifecycle.get",
18322
19196
  "title": "Get Channel Lifecycle State",
@@ -19259,6 +20133,222 @@ export const OPERATOR_CONTRACT = {
19259
20133
  },
19260
20134
  "invokable": true
19261
20135
  },
20136
+ {
20137
+ "id": "channels.routing.assign",
20138
+ "title": "Assign Channel Routing Rule",
20139
+ "description": "Create or update a channel-to-profile routing rule in the daemon-persisted routing table. Requires explicit confirmation.",
20140
+ "category": "channels",
20141
+ "source": "builtin",
20142
+ "access": "admin",
20143
+ "transport": [
20144
+ "http",
20145
+ "ws"
20146
+ ],
20147
+ "scopes": [
20148
+ "write:channels"
20149
+ ],
20150
+ "http": {
20151
+ "method": "POST",
20152
+ "path": "/api/channels/routing"
20153
+ },
20154
+ "inputSchema": {
20155
+ "type": "object",
20156
+ "properties": {
20157
+ "channelId": {
20158
+ "type": "string"
20159
+ },
20160
+ "surfaceKind": {
20161
+ "type": "string"
20162
+ },
20163
+ "routeId": {
20164
+ "type": "string"
20165
+ },
20166
+ "profileId": {
20167
+ "type": "string"
20168
+ },
20169
+ "label": {
20170
+ "type": "string"
20171
+ }
20172
+ },
20173
+ "required": [
20174
+ "surfaceKind",
20175
+ "profileId"
20176
+ ],
20177
+ "additionalProperties": true
20178
+ },
20179
+ "outputSchema": {
20180
+ "type": "object",
20181
+ "properties": {
20182
+ "assignmentId": {
20183
+ "type": "string"
20184
+ },
20185
+ "channelId": {
20186
+ "type": "string"
20187
+ },
20188
+ "surfaceKind": {
20189
+ "type": "string"
20190
+ },
20191
+ "routeId": {
20192
+ "type": "string"
20193
+ },
20194
+ "profileId": {
20195
+ "type": "string"
20196
+ },
20197
+ "label": {
20198
+ "type": "string"
20199
+ },
20200
+ "createdAt": {
20201
+ "type": "string"
20202
+ },
20203
+ "updatedAt": {
20204
+ "type": "string"
20205
+ }
20206
+ },
20207
+ "required": [
20208
+ "assignmentId",
20209
+ "surfaceKind",
20210
+ "profileId",
20211
+ "createdAt",
20212
+ "updatedAt"
20213
+ ],
20214
+ "additionalProperties": false
20215
+ },
20216
+ "invokable": true
20217
+ },
20218
+ {
20219
+ "id": "channels.routing.delete",
20220
+ "title": "Delete Channel Routing Rule",
20221
+ "description": "Remove a channel-to-profile routing rule from the daemon-persisted routing table.",
20222
+ "category": "channels",
20223
+ "source": "builtin",
20224
+ "access": "admin",
20225
+ "transport": [
20226
+ "http",
20227
+ "ws"
20228
+ ],
20229
+ "scopes": [
20230
+ "write:channels"
20231
+ ],
20232
+ "http": {
20233
+ "method": "DELETE",
20234
+ "path": "/api/channels/routing/{assignmentId}"
20235
+ },
20236
+ "inputSchema": {
20237
+ "type": "object",
20238
+ "properties": {
20239
+ "assignmentId": {
20240
+ "type": "string"
20241
+ }
20242
+ },
20243
+ "required": [
20244
+ "assignmentId"
20245
+ ],
20246
+ "additionalProperties": false
20247
+ },
20248
+ "outputSchema": {
20249
+ "type": "object",
20250
+ "properties": {
20251
+ "deleted": {
20252
+ "type": "boolean"
20253
+ },
20254
+ "assignmentId": {
20255
+ "type": "string"
20256
+ }
20257
+ },
20258
+ "required": [
20259
+ "deleted",
20260
+ "assignmentId"
20261
+ ],
20262
+ "additionalProperties": false
20263
+ },
20264
+ "dangerous": true,
20265
+ "invokable": true
20266
+ },
20267
+ {
20268
+ "id": "channels.routing.list",
20269
+ "title": "List Channel Routing Rules",
20270
+ "description": "Return the daemon-persisted channel-to-profile routing table.",
20271
+ "category": "channels",
20272
+ "source": "builtin",
20273
+ "access": "authenticated",
20274
+ "transport": [
20275
+ "http",
20276
+ "ws"
20277
+ ],
20278
+ "scopes": [
20279
+ "read:channels"
20280
+ ],
20281
+ "http": {
20282
+ "method": "GET",
20283
+ "path": "/api/channels/routing"
20284
+ },
20285
+ "inputSchema": {
20286
+ "type": "object",
20287
+ "properties": {
20288
+ "profileId": {
20289
+ "type": "string"
20290
+ },
20291
+ "surfaceKind": {
20292
+ "type": "string"
20293
+ },
20294
+ "limit": {
20295
+ "type": "number"
20296
+ }
20297
+ },
20298
+ "additionalProperties": false
20299
+ },
20300
+ "outputSchema": {
20301
+ "type": "object",
20302
+ "properties": {
20303
+ "routes": {
20304
+ "type": "array",
20305
+ "items": {
20306
+ "type": "object",
20307
+ "properties": {
20308
+ "id": {
20309
+ "type": "string"
20310
+ },
20311
+ "createdAt": {
20312
+ "type": "string"
20313
+ },
20314
+ "updatedAt": {
20315
+ "type": "string"
20316
+ },
20317
+ "surfaceKind": {
20318
+ "type": "string"
20319
+ },
20320
+ "routeId": {
20321
+ "type": "string"
20322
+ },
20323
+ "profileId": {
20324
+ "type": "string"
20325
+ },
20326
+ "label": {
20327
+ "type": "string"
20328
+ }
20329
+ },
20330
+ "required": [
20331
+ "id",
20332
+ "createdAt",
20333
+ "updatedAt",
20334
+ "surfaceKind",
20335
+ "profileId"
20336
+ ],
20337
+ "additionalProperties": false
20338
+ }
20339
+ },
20340
+ "total": {
20341
+ "type": "number"
20342
+ }
20343
+ },
20344
+ "required": [
20345
+ "routes",
20346
+ "total"
20347
+ ],
20348
+ "additionalProperties": false
20349
+ },
20350
+ "invokable": true
20351
+ },
19262
20352
  {
19263
20353
  "id": "channels.setup.get",
19264
20354
  "title": "Get Channel Setup Schema",
@@ -24233,6 +25323,309 @@ export const OPERATOR_CONTRACT = {
24233
25323
  },
24234
25324
  "invokable": true
24235
25325
  },
25326
+ {
25327
+ "id": "email.draft.create",
25328
+ "title": "Create Email Draft",
25329
+ "description": "Append a draft message to the configured IMAP Drafts folder. Distinct from the local channel draft store. Requires explicit confirmation.",
25330
+ "category": "email",
25331
+ "source": "builtin",
25332
+ "access": "admin",
25333
+ "transport": [
25334
+ "http",
25335
+ "ws"
25336
+ ],
25337
+ "scopes": [
25338
+ "write:email"
25339
+ ],
25340
+ "http": {
25341
+ "method": "POST",
25342
+ "path": "/api/email/drafts"
25343
+ },
25344
+ "inputSchema": {
25345
+ "type": "object",
25346
+ "properties": {
25347
+ "to": {
25348
+ "type": "string"
25349
+ },
25350
+ "subject": {
25351
+ "type": "string"
25352
+ },
25353
+ "body": {
25354
+ "type": "string"
25355
+ },
25356
+ "inReplyTo": {
25357
+ "type": "string"
25358
+ },
25359
+ "references": {
25360
+ "type": "string"
25361
+ }
25362
+ },
25363
+ "required": [
25364
+ "to",
25365
+ "subject",
25366
+ "body"
25367
+ ],
25368
+ "additionalProperties": true
25369
+ },
25370
+ "outputSchema": {
25371
+ "type": "object",
25372
+ "properties": {
25373
+ "uid": {
25374
+ "type": "number"
25375
+ },
25376
+ "draftId": {
25377
+ "type": "string"
25378
+ }
25379
+ },
25380
+ "required": [
25381
+ "uid",
25382
+ "draftId"
25383
+ ],
25384
+ "additionalProperties": false
25385
+ },
25386
+ "invokable": true
25387
+ },
25388
+ {
25389
+ "id": "email.inbox.list",
25390
+ "title": "List Email Inbox",
25391
+ "description": "Return inbox message summaries fetched live from the configured IMAP account. Read-only (EXAMINE / BODY.PEEK); never marks messages read.",
25392
+ "category": "email",
25393
+ "source": "builtin",
25394
+ "access": "authenticated",
25395
+ "transport": [
25396
+ "http",
25397
+ "ws"
25398
+ ],
25399
+ "scopes": [
25400
+ "read:email"
25401
+ ],
25402
+ "http": {
25403
+ "method": "GET",
25404
+ "path": "/api/email/inbox"
25405
+ },
25406
+ "inputSchema": {
25407
+ "type": "object",
25408
+ "properties": {
25409
+ "limit": {
25410
+ "type": "number"
25411
+ },
25412
+ "since": {
25413
+ "type": "string"
25414
+ },
25415
+ "unreadOnly": {
25416
+ "type": "boolean"
25417
+ }
25418
+ },
25419
+ "additionalProperties": false
25420
+ },
25421
+ "outputSchema": {
25422
+ "type": "object",
25423
+ "properties": {
25424
+ "messages": {
25425
+ "type": "array",
25426
+ "items": {
25427
+ "type": "object",
25428
+ "properties": {
25429
+ "uid": {
25430
+ "type": "number"
25431
+ },
25432
+ "from": {
25433
+ "type": "string"
25434
+ },
25435
+ "subject": {
25436
+ "type": "string"
25437
+ },
25438
+ "date": {
25439
+ "type": "string"
25440
+ },
25441
+ "unread": {
25442
+ "type": "boolean"
25443
+ },
25444
+ "bodyPreview": {
25445
+ "type": "string"
25446
+ },
25447
+ "messageId": {
25448
+ "type": "string"
25449
+ }
25450
+ },
25451
+ "required": [
25452
+ "uid",
25453
+ "from",
25454
+ "subject",
25455
+ "date",
25456
+ "unread",
25457
+ "bodyPreview",
25458
+ "messageId"
25459
+ ],
25460
+ "additionalProperties": false
25461
+ }
25462
+ },
25463
+ "total": {
25464
+ "type": "number"
25465
+ }
25466
+ },
25467
+ "required": [
25468
+ "messages",
25469
+ "total"
25470
+ ],
25471
+ "additionalProperties": false
25472
+ },
25473
+ "invokable": true
25474
+ },
25475
+ {
25476
+ "id": "email.inbox.read",
25477
+ "title": "Read Email Message",
25478
+ "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).",
25479
+ "category": "email",
25480
+ "source": "builtin",
25481
+ "access": "authenticated",
25482
+ "transport": [
25483
+ "http",
25484
+ "ws"
25485
+ ],
25486
+ "scopes": [
25487
+ "read:email"
25488
+ ],
25489
+ "http": {
25490
+ "method": "GET",
25491
+ "path": "/api/email/inbox/{uid}"
25492
+ },
25493
+ "inputSchema": {
25494
+ "type": "object",
25495
+ "properties": {
25496
+ "uid": {
25497
+ "type": "number"
25498
+ }
25499
+ },
25500
+ "required": [
25501
+ "uid"
25502
+ ],
25503
+ "additionalProperties": false
25504
+ },
25505
+ "outputSchema": {
25506
+ "type": "object",
25507
+ "properties": {
25508
+ "uid": {
25509
+ "type": "number"
25510
+ },
25511
+ "from": {
25512
+ "type": "string"
25513
+ },
25514
+ "subject": {
25515
+ "type": "string"
25516
+ },
25517
+ "date": {
25518
+ "type": "string"
25519
+ },
25520
+ "messageId": {
25521
+ "type": "string"
25522
+ },
25523
+ "bodyText": {
25524
+ "type": "string"
25525
+ },
25526
+ "bodyHtml": {
25527
+ "type": "string"
25528
+ },
25529
+ "attachments": {
25530
+ "type": "array",
25531
+ "items": {
25532
+ "type": "object",
25533
+ "properties": {
25534
+ "filename": {
25535
+ "type": "string"
25536
+ },
25537
+ "contentType": {
25538
+ "type": "string"
25539
+ },
25540
+ "sizeBytes": {
25541
+ "type": "number"
25542
+ }
25543
+ },
25544
+ "required": [
25545
+ "filename",
25546
+ "contentType",
25547
+ "sizeBytes"
25548
+ ],
25549
+ "additionalProperties": false
25550
+ }
25551
+ }
25552
+ },
25553
+ "required": [
25554
+ "uid",
25555
+ "from",
25556
+ "subject",
25557
+ "date",
25558
+ "messageId",
25559
+ "bodyText"
25560
+ ],
25561
+ "additionalProperties": false
25562
+ },
25563
+ "invokable": true
25564
+ },
25565
+ {
25566
+ "id": "email.send",
25567
+ "title": "Send Email",
25568
+ "description": "Send a composed email via the configured SMTP account. Irreversible external send; requires confirm: true and explicit user review of recipients and body.",
25569
+ "category": "email",
25570
+ "source": "builtin",
25571
+ "access": "admin",
25572
+ "transport": [
25573
+ "http",
25574
+ "ws"
25575
+ ],
25576
+ "scopes": [
25577
+ "write:email"
25578
+ ],
25579
+ "http": {
25580
+ "method": "POST",
25581
+ "path": "/api/email/send"
25582
+ },
25583
+ "inputSchema": {
25584
+ "type": "object",
25585
+ "properties": {
25586
+ "to": {
25587
+ "type": "string"
25588
+ },
25589
+ "subject": {
25590
+ "type": "string"
25591
+ },
25592
+ "body": {
25593
+ "type": "string"
25594
+ },
25595
+ "inReplyTo": {
25596
+ "type": "string"
25597
+ },
25598
+ "confirm": {
25599
+ "type": "boolean"
25600
+ }
25601
+ },
25602
+ "required": [
25603
+ "to",
25604
+ "subject",
25605
+ "body",
25606
+ "confirm"
25607
+ ],
25608
+ "additionalProperties": true
25609
+ },
25610
+ "outputSchema": {
25611
+ "type": "object",
25612
+ "properties": {
25613
+ "messageId": {
25614
+ "type": "string"
25615
+ },
25616
+ "sentAt": {
25617
+ "type": "string"
25618
+ }
25619
+ },
25620
+ "required": [
25621
+ "messageId",
25622
+ "sentAt"
25623
+ ],
25624
+ "additionalProperties": false
25625
+ },
25626
+ "dangerous": true,
25627
+ "invokable": true
25628
+ },
24236
25629
  {
24237
25630
  "id": "health.snapshot",
24238
25631
  "title": "Health Snapshot",
@@ -39211,7 +40604,7 @@ export const OPERATOR_CONTRACT = {
39211
40604
  {
39212
40605
  "id": "knowledge.nodes.list",
39213
40606
  "title": "List Knowledge Nodes",
39214
- "description": "Return compiled knowledge nodes.",
40607
+ "description": "Return compiled knowledge nodes. Without ?limit/?cursor returns { nodes: [...] } (backward compatible). With ?limit=N (1–1000, default 100) and optional ?cursor=<opaque> returns a PaginatedResponse envelope { items, hasMore, nextCursor? }. Fetch cap is 5 000 items per request (knowledge store does not support cursor/offset range queries natively). Invalid cursors return HTTP 400.",
39215
40608
  "category": "knowledge",
39216
40609
  "source": "builtin",
39217
40610
  "access": "authenticated",
@@ -39232,6 +40625,9 @@ export const OPERATOR_CONTRACT = {
39232
40625
  "limit": {
39233
40626
  "type": "number"
39234
40627
  },
40628
+ "cursor": {
40629
+ "type": "string"
40630
+ },
39235
40631
  "knowledgeSpaceId": {
39236
40632
  "type": "string"
39237
40633
  },
@@ -43071,7 +44467,7 @@ export const OPERATOR_CONTRACT = {
43071
44467
  {
43072
44468
  "id": "knowledge.sources.list",
43073
44469
  "title": "List Knowledge Sources",
43074
- "description": "Return ingested structured knowledge sources.",
44470
+ "description": "Return ingested structured knowledge sources. Without ?limit/?cursor returns { sources: [...] } (backward compatible). With ?limit=N (1–1000, default 100) and optional ?cursor=<opaque> returns a PaginatedResponse envelope { items, hasMore, nextCursor? }. Fetch cap is 5 000 items per request (knowledge store does not support cursor/offset range queries natively). Invalid cursors return HTTP 400.",
43075
44471
  "category": "knowledge",
43076
44472
  "source": "builtin",
43077
44473
  "access": "authenticated",
@@ -43092,6 +44488,9 @@ export const OPERATOR_CONTRACT = {
43092
44488
  "limit": {
43093
44489
  "type": "number"
43094
44490
  },
44491
+ "cursor": {
44492
+ "type": "string"
44493
+ },
43095
44494
  "knowledgeSpaceId": {
43096
44495
  "type": "string"
43097
44496
  },
@@ -54793,6 +56192,60 @@ export const OPERATOR_CONTRACT = {
54793
56192
  },
54794
56193
  "invokable": true
54795
56194
  },
56195
+ {
56196
+ "id": "memory.review-queue",
56197
+ "title": "Memory Review Queue",
56198
+ "description": "Return memory records prioritised for review. Accepts optional limit (?limit=N) and scope filter (?scope=session|project|team). A scope query parameter that is present but not one of the three valid values returns 400.",
56199
+ "category": "memory",
56200
+ "source": "builtin",
56201
+ "access": "authenticated",
56202
+ "transport": [
56203
+ "http",
56204
+ "ws"
56205
+ ],
56206
+ "scopes": [
56207
+ "read:memory"
56208
+ ],
56209
+ "http": {
56210
+ "method": "GET",
56211
+ "path": "/api/memory/review-queue"
56212
+ },
56213
+ "inputSchema": {
56214
+ "type": "object",
56215
+ "properties": {
56216
+ "limit": {
56217
+ "type": "number"
56218
+ },
56219
+ "scope": {
56220
+ "type": "string",
56221
+ "enum": [
56222
+ "session",
56223
+ "project",
56224
+ "team"
56225
+ ]
56226
+ }
56227
+ },
56228
+ "additionalProperties": false
56229
+ },
56230
+ "outputSchema": {
56231
+ "type": "object",
56232
+ "properties": {
56233
+ "records": {
56234
+ "type": "array",
56235
+ "items": {
56236
+ "type": "object",
56237
+ "properties": {},
56238
+ "additionalProperties": true
56239
+ }
56240
+ }
56241
+ },
56242
+ "required": [
56243
+ "records"
56244
+ ],
56245
+ "additionalProperties": false
56246
+ },
56247
+ "invokable": true
56248
+ },
54796
56249
  {
54797
56250
  "id": "memory.vector.rebuild",
54798
56251
  "title": "Rebuild Memory Vector Index",
@@ -75035,10 +76488,10 @@ export const OPERATOR_CONTRACT = {
75035
76488
  }
75036
76489
  ],
75037
76490
  "schemaCoverage": {
75038
- "methods": 279,
75039
- "typedInputs": 279,
76491
+ "methods": 297,
76492
+ "typedInputs": 297,
75040
76493
  "genericInputs": 0,
75041
- "typedOutputs": 279,
76494
+ "typedOutputs": 297,
75042
76495
  "genericOutputs": 0
75043
76496
  },
75044
76497
  "eventCoverage": {