@pellux/goodvibes-sdk 0.33.38 → 0.34.1

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 (199) hide show
  1. package/dist/contracts/artifacts/operator-contract.json +1383 -4
  2. package/dist/events/workflows.d.ts +4 -0
  3. package/dist/events/workflows.d.ts.map +1 -1
  4. package/dist/platform/agents/message-bus-core.d.ts +11 -0
  5. package/dist/platform/agents/message-bus-core.d.ts.map +1 -1
  6. package/dist/platform/agents/message-bus-core.js +28 -21
  7. package/dist/platform/agents/orchestrator-runner.d.ts.map +1 -1
  8. package/dist/platform/agents/orchestrator-runner.js +6 -4
  9. package/dist/platform/agents/wrfc-config.d.ts.map +1 -1
  10. package/dist/platform/agents/wrfc-config.js +16 -10
  11. package/dist/platform/agents/wrfc-controller.d.ts +26 -0
  12. package/dist/platform/agents/wrfc-controller.d.ts.map +1 -1
  13. package/dist/platform/agents/wrfc-controller.js +134 -138
  14. package/dist/platform/agents/wrfc-runtime-events.d.ts +1 -0
  15. package/dist/platform/agents/wrfc-runtime-events.d.ts.map +1 -1
  16. package/dist/platform/agents/wrfc-runtime-events.js +4 -1
  17. package/dist/platform/automation/delivery-manager.d.ts.map +1 -1
  18. package/dist/platform/automation/delivery-manager.js +1 -6
  19. package/dist/platform/batch/manager.d.ts.map +1 -1
  20. package/dist/platform/batch/manager.js +1 -3
  21. package/dist/platform/channels/policy-manager.d.ts.map +1 -1
  22. package/dist/platform/channels/policy-manager.js +1 -3
  23. package/dist/platform/channels/reply-pipeline.d.ts.map +1 -1
  24. package/dist/platform/channels/reply-pipeline.js +4 -0
  25. package/dist/platform/config/schema-domain-core.d.ts +1 -1
  26. package/dist/platform/config/schema-domain-core.d.ts.map +1 -1
  27. package/dist/platform/config/schema-domain-core.js +12 -12
  28. package/dist/platform/config/schema-domain-runtime.d.ts +1 -1
  29. package/dist/platform/config/schema-domain-runtime.d.ts.map +1 -1
  30. package/dist/platform/config/schema-domain-runtime.js +19 -18
  31. package/dist/platform/config/schema-domain-surfaces.d.ts +1 -1
  32. package/dist/platform/config/schema-domain-surfaces.d.ts.map +1 -1
  33. package/dist/platform/config/schema-domain-surfaces.js +4 -3
  34. package/dist/platform/config/schema-shared.d.ts +6 -0
  35. package/dist/platform/config/schema-shared.d.ts.map +1 -1
  36. package/dist/platform/config/schema-shared.js +21 -1
  37. package/dist/platform/control-plane/approval-broker.d.ts.map +1 -1
  38. package/dist/platform/control-plane/approval-broker.js +1 -3
  39. package/dist/platform/control-plane/method-catalog-calendar.d.ts +9 -0
  40. package/dist/platform/control-plane/method-catalog-calendar.d.ts.map +1 -0
  41. package/dist/platform/control-plane/method-catalog-calendar.js +117 -0
  42. package/dist/platform/control-plane/method-catalog-channels.d.ts.map +1 -1
  43. package/dist/platform/control-plane/method-catalog-channels.js +174 -0
  44. package/dist/platform/control-plane/method-catalog-email.d.ts +9 -0
  45. package/dist/platform/control-plane/method-catalog-email.d.ts.map +1 -0
  46. package/dist/platform/control-plane/method-catalog-email.js +101 -0
  47. package/dist/platform/control-plane/method-catalog.d.ts.map +1 -1
  48. package/dist/platform/control-plane/method-catalog.js +4 -0
  49. package/dist/platform/control-plane/session-broker-state.d.ts.map +1 -1
  50. package/dist/platform/control-plane/session-broker-state.js +1 -3
  51. package/dist/platform/core/compaction-sections.d.ts +5 -1
  52. package/dist/platform/core/compaction-sections.d.ts.map +1 -1
  53. package/dist/platform/core/compaction-sections.js +73 -66
  54. package/dist/platform/core/context-compaction.d.ts.map +1 -1
  55. package/dist/platform/core/context-compaction.js +9 -16
  56. package/dist/platform/core/orchestrator-context-runtime.d.ts +2 -2
  57. package/dist/platform/core/orchestrator-context-runtime.d.ts.map +1 -1
  58. package/dist/platform/core/orchestrator-context-runtime.js +24 -21
  59. package/dist/platform/core/orchestrator-tool-runtime.d.ts.map +1 -1
  60. package/dist/platform/core/orchestrator-tool-runtime.js +2 -1
  61. package/dist/platform/core/session-lineage.d.ts +2 -5
  62. package/dist/platform/core/session-lineage.d.ts.map +1 -1
  63. package/dist/platform/core/session-lineage.js +4 -16
  64. package/dist/platform/core/wrfc-routing.d.ts.map +1 -1
  65. package/dist/platform/core/wrfc-routing.js +1 -3
  66. package/dist/platform/daemon/http/mcp-routes.d.ts.map +1 -1
  67. package/dist/platform/daemon/http/mcp-routes.js +1 -3
  68. package/dist/platform/daemon/http/openai-compatible-routes.d.ts.map +1 -1
  69. package/dist/platform/daemon/http/openai-compatible-routes.js +1 -3
  70. package/dist/platform/daemon/http/runtime-routes.d.ts.map +1 -1
  71. package/dist/platform/daemon/http/runtime-routes.js +1 -3
  72. package/dist/platform/hooks/runners/http.d.ts.map +1 -1
  73. package/dist/platform/hooks/runners/http.js +9 -19
  74. package/dist/platform/integrations/webhooks.js +2 -11
  75. package/dist/platform/knowledge/semantic/self-improvement.d.ts.map +1 -1
  76. package/dist/platform/knowledge/semantic/self-improvement.js +2 -21
  77. package/dist/platform/mcp/client.d.ts.map +1 -1
  78. package/dist/platform/mcp/client.js +1 -3
  79. package/dist/platform/mcp/config.d.ts.map +1 -1
  80. package/dist/platform/mcp/config.js +1 -3
  81. package/dist/platform/media/builtin-generation-providers.d.ts.map +1 -1
  82. package/dist/platform/media/builtin-generation-providers.js +1 -6
  83. package/dist/platform/providers/anthropic-compat.d.ts.map +1 -1
  84. package/dist/platform/providers/anthropic-compat.js +11 -131
  85. package/dist/platform/providers/anthropic-sdk-provider.d.ts.map +1 -1
  86. package/dist/platform/providers/anthropic-sdk-provider.js +8 -42
  87. package/dist/platform/providers/anthropic-sse-assembler.d.ts +80 -0
  88. package/dist/platform/providers/anthropic-sse-assembler.d.ts.map +1 -0
  89. package/dist/platform/providers/anthropic-sse-assembler.js +146 -0
  90. package/dist/platform/providers/anthropic-stream.d.ts +30 -0
  91. package/dist/platform/providers/anthropic-stream.d.ts.map +1 -0
  92. package/dist/platform/providers/anthropic-stream.js +44 -0
  93. package/dist/platform/providers/anthropic-vertex.d.ts.map +1 -1
  94. package/dist/platform/providers/anthropic-vertex.js +1 -3
  95. package/dist/platform/providers/anthropic.d.ts.map +1 -1
  96. package/dist/platform/providers/anthropic.js +15 -151
  97. package/dist/platform/providers/capabilities.d.ts.map +1 -1
  98. package/dist/platform/providers/capabilities.js +11 -7
  99. package/dist/platform/providers/context-discovery.d.ts.map +1 -1
  100. package/dist/platform/providers/context-discovery.js +9 -16
  101. package/dist/platform/providers/context-window-fallback.d.ts +24 -0
  102. package/dist/platform/providers/context-window-fallback.d.ts.map +1 -0
  103. package/dist/platform/providers/context-window-fallback.js +48 -0
  104. package/dist/platform/providers/gemini.d.ts.map +1 -1
  105. package/dist/platform/providers/gemini.js +3 -6
  106. package/dist/platform/providers/json-ttl-cache.d.ts +35 -0
  107. package/dist/platform/providers/json-ttl-cache.d.ts.map +1 -0
  108. package/dist/platform/providers/json-ttl-cache.js +52 -0
  109. package/dist/platform/providers/llama-cpp.d.ts.map +1 -1
  110. package/dist/platform/providers/llama-cpp.js +2 -23
  111. package/dist/platform/providers/lm-studio-helpers.d.ts +1 -1
  112. package/dist/platform/providers/lm-studio-helpers.d.ts.map +1 -1
  113. package/dist/platform/providers/lm-studio-helpers.js +5 -25
  114. package/dist/platform/providers/model-benchmarks.d.ts.map +1 -1
  115. package/dist/platform/providers/model-benchmarks.js +11 -34
  116. package/dist/platform/providers/model-catalog-cache.d.ts.map +1 -1
  117. package/dist/platform/providers/model-catalog-cache.js +15 -38
  118. package/dist/platform/providers/model-catalog-synthetic.d.ts.map +1 -1
  119. package/dist/platform/providers/model-catalog-synthetic.js +3 -2
  120. package/dist/platform/providers/model-catalog.d.ts.map +1 -1
  121. package/dist/platform/providers/model-catalog.js +3 -2
  122. package/dist/platform/providers/model-limits.d.ts.map +1 -1
  123. package/dist/platform/providers/model-limits.js +18 -42
  124. package/dist/platform/providers/ollama.d.ts.map +1 -1
  125. package/dist/platform/providers/ollama.js +3 -24
  126. package/dist/platform/providers/openai-codex.d.ts.map +1 -1
  127. package/dist/platform/providers/openai-codex.js +8 -9
  128. package/dist/platform/providers/openai-compat.d.ts.map +1 -1
  129. package/dist/platform/providers/openai-compat.js +13 -40
  130. package/dist/platform/providers/openai-stream-helpers.d.ts +62 -0
  131. package/dist/platform/providers/openai-stream-helpers.d.ts.map +1 -0
  132. package/dist/platform/providers/openai-stream-helpers.js +73 -0
  133. package/dist/platform/providers/openai.d.ts.map +1 -1
  134. package/dist/platform/providers/openai.js +13 -41
  135. package/dist/platform/providers/provider-error.d.ts +17 -0
  136. package/dist/platform/providers/provider-error.d.ts.map +1 -0
  137. package/dist/platform/providers/provider-error.js +33 -0
  138. package/dist/platform/providers/provider-stop-reason.d.ts +15 -0
  139. package/dist/platform/providers/provider-stop-reason.d.ts.map +1 -0
  140. package/dist/platform/providers/provider-stop-reason.js +15 -0
  141. package/dist/platform/providers/sse-line-buffer.d.ts +13 -0
  142. package/dist/platform/providers/sse-line-buffer.d.ts.map +1 -0
  143. package/dist/platform/providers/sse-line-buffer.js +23 -0
  144. package/dist/platform/providers/tool-formats.d.ts +5 -0
  145. package/dist/platform/providers/tool-formats.d.ts.map +1 -1
  146. package/dist/platform/providers/tool-formats.js +14 -0
  147. package/dist/platform/runtime/bootstrap-runtime-events.d.ts.map +1 -1
  148. package/dist/platform/runtime/bootstrap-runtime-events.js +6 -0
  149. package/dist/platform/runtime/bootstrap-services.d.ts.map +1 -1
  150. package/dist/platform/runtime/bootstrap-services.js +4 -5
  151. package/dist/platform/runtime/emitters/workflows.d.ts +4 -0
  152. package/dist/platform/runtime/emitters/workflows.d.ts.map +1 -1
  153. package/dist/platform/runtime/emitters/workflows.js +3 -0
  154. package/dist/platform/runtime/remote/distributed-runtime-store.d.ts.map +1 -1
  155. package/dist/platform/runtime/remote/distributed-runtime-store.js +1 -3
  156. package/dist/platform/runtime/retention/pruner.js +2 -5
  157. package/dist/platform/runtime/store/helpers/reducers/lifecycle.d.ts.map +1 -1
  158. package/dist/platform/runtime/store/helpers/reducers/lifecycle.js +15 -14
  159. package/dist/platform/runtime/store/helpers/reducers/shared.d.ts +6 -0
  160. package/dist/platform/runtime/store/helpers/reducers/shared.d.ts.map +1 -1
  161. package/dist/platform/runtime/store/helpers/reducers/shared.js +8 -1
  162. package/dist/platform/runtime/telemetry/exporters/queue.d.ts.map +1 -1
  163. package/dist/platform/runtime/telemetry/exporters/queue.js +1 -7
  164. package/dist/platform/runtime/transports/http-helpers.d.ts +0 -1
  165. package/dist/platform/runtime/transports/http-helpers.d.ts.map +1 -1
  166. package/dist/platform/runtime/transports/http-helpers.js +1 -3
  167. package/dist/platform/runtime/ui-read-model-helpers.d.ts +2 -0
  168. package/dist/platform/runtime/ui-read-model-helpers.d.ts.map +1 -1
  169. package/dist/platform/runtime/ui-read-model-helpers.js +8 -0
  170. package/dist/platform/runtime/ui-read-models-core.d.ts.map +1 -1
  171. package/dist/platform/runtime/ui-read-models-core.js +3 -5
  172. package/dist/platform/runtime/ui-read-models-observability-remote.d.ts.map +1 -1
  173. package/dist/platform/runtime/ui-read-models-observability-remote.js +2 -4
  174. package/dist/platform/runtime/ui-read-models-operations.d.ts.map +1 -1
  175. package/dist/platform/runtime/ui-read-models-operations.js +8 -26
  176. package/dist/platform/scheduler/scheduler.d.ts.map +1 -1
  177. package/dist/platform/scheduler/scheduler.js +1 -3
  178. package/dist/platform/tools/exec/runtime.d.ts.map +1 -1
  179. package/dist/platform/tools/exec/runtime.js +1 -7
  180. package/dist/platform/tools/fetch/runtime.d.ts.map +1 -1
  181. package/dist/platform/tools/fetch/runtime.js +9 -20
  182. package/dist/platform/tools/shared/process-manager.d.ts.map +1 -1
  183. package/dist/platform/tools/shared/process-manager.js +1 -6
  184. package/dist/platform/utils/concurrency.d.ts +1 -0
  185. package/dist/platform/utils/concurrency.d.ts.map +1 -1
  186. package/dist/platform/utils/concurrency.js +1 -0
  187. package/dist/platform/utils/error-display.d.ts +9 -0
  188. package/dist/platform/utils/error-display.d.ts.map +1 -1
  189. package/dist/platform/utils/error-display.js +11 -0
  190. package/dist/platform/utils/fetch-with-timeout.d.ts +22 -2
  191. package/dist/platform/utils/fetch-with-timeout.d.ts.map +1 -1
  192. package/dist/platform/utils/fetch-with-timeout.js +33 -15
  193. package/dist/platform/utils/record-coerce.d.ts +5 -0
  194. package/dist/platform/utils/record-coerce.d.ts.map +1 -1
  195. package/dist/platform/utils/record-coerce.js +7 -0
  196. package/dist/platform/utils/retry.d.ts.map +1 -1
  197. package/dist/platform/utils/retry.js +2 -4
  198. package/dist/platform/version.js +1 -1
  199. package/package.json +9 -9
@@ -3,7 +3,7 @@
3
3
  "product": {
4
4
  "id": "goodvibes",
5
5
  "surface": "operator",
6
- "version": "0.33.38"
6
+ "version": "0.34.1"
7
7
  },
8
8
  "auth": {
9
9
  "modes": [
@@ -15237,6 +15237,364 @@
15237
15237
  },
15238
15238
  "invokable": true
15239
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
+ },
15240
15598
  {
15241
15599
  "id": "channels.accounts.action.default",
15242
15600
  "title": "Run Channel Account Action",
@@ -18331,6 +18689,508 @@
18331
18689
  },
18332
18690
  "invokable": true
18333
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
+ },
18334
19194
  {
18335
19195
  "id": "channels.lifecycle.get",
18336
19196
  "title": "Get Channel Lifecycle State",
@@ -19273,6 +20133,222 @@
19273
20133
  },
19274
20134
  "invokable": true
19275
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
+ },
19276
20352
  {
19277
20353
  "id": "channels.setup.get",
19278
20354
  "title": "Get Channel Setup Schema",
@@ -24247,6 +25323,309 @@
24247
25323
  },
24248
25324
  "invokable": true
24249
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
+ },
24250
25629
  {
24251
25630
  "id": "health.snapshot",
24252
25631
  "title": "Health Snapshot",
@@ -75109,10 +76488,10 @@
75109
76488
  }
75110
76489
  ],
75111
76490
  "schemaCoverage": {
75112
- "methods": 280,
75113
- "typedInputs": 280,
76491
+ "methods": 297,
76492
+ "typedInputs": 297,
75114
76493
  "genericInputs": 0,
75115
- "typedOutputs": 280,
76494
+ "typedOutputs": 297,
75116
76495
  "genericOutputs": 0
75117
76496
  },
75118
76497
  "eventCoverage": {