@vellumai/plugin-api 0.11.2 → 0.11.3-dev.202608080427.92f668a

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 (3) hide show
  1. package/index.d.ts +453 -29
  2. package/index.js +3 -0
  3. package/package.json +1 -1
package/index.d.ts CHANGED
@@ -76,6 +76,37 @@ export declare type AgentLoopExitReason =
76
76
  /** An unhandled error ended the turn. */
77
77
  | "error";
78
78
 
79
+ declare type AnsweredQuestion = z.infer<typeof AnsweredQuestionSchema>;
80
+
81
+ declare const AnsweredQuestionSchema: z.ZodObject<{
82
+ requestId: z.ZodString;
83
+ questions: z.ZodArray<z.ZodObject<{
84
+ id: z.ZodString;
85
+ question: z.ZodString;
86
+ description: z.ZodOptional<z.ZodString>;
87
+ options: z.ZodArray<z.ZodObject<{
88
+ id: z.ZodString;
89
+ label: z.ZodString;
90
+ description: z.ZodOptional<z.ZodString>;
91
+ }, z.core.$strip>>;
92
+ freeTextPlaceholder: z.ZodOptional<z.ZodString>;
93
+ }, z.core.$strip>>;
94
+ responses: z.ZodArray<z.ZodObject<{
95
+ questionId: z.ZodString;
96
+ decision: z.ZodEnum<{
97
+ option: "option";
98
+ free_text: "free_text";
99
+ skipped: "skipped";
100
+ }>;
101
+ optionId: z.ZodOptional<z.ZodString>;
102
+ text: z.ZodOptional<z.ZodString>;
103
+ }, z.core.$strip>>;
104
+ overall: z.ZodEnum<{
105
+ completed: "completed";
106
+ closed: "closed";
107
+ }>;
108
+ }, z.core.$strip>;
109
+
79
110
  /**
80
111
  * How {@link listConversations} (and friends) treats archived rows.
81
112
  *
@@ -116,11 +147,12 @@ declare const AssistantConfigSchema: z.ZodObject<{
116
147
  provider: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodEnum<{
117
148
  vellum: "vellum";
118
149
  deepgram: "deepgram";
150
+ "deepgram-flux": "deepgram-flux";
119
151
  "google-gemini": "google-gemini";
120
152
  "openai-whisper": "openai-whisper";
121
153
  xai: "xai";
122
154
  }>>;
123
- language: z.ZodOptional<z.ZodString>;
155
+ language: z.ZodDefault<z.ZodString>;
124
156
  providers: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>>>;
125
157
  }, z.core.$strip>>;
126
158
  tts: z.ZodDefault<z.ZodObject<{
@@ -139,6 +171,9 @@ declare const AssistantConfigSchema: z.ZodObject<{
139
171
  stability: z.ZodDefault<z.ZodNumber>;
140
172
  similarityBoost: z.ZodDefault<z.ZodNumber>;
141
173
  conversationTimeoutSeconds: z.ZodDefault<z.ZodNumber>;
174
+ languageVoices: z.ZodOptional<z.ZodPipe<z.ZodRecord<z.ZodString, z.ZodString>, z.ZodTransform<{
175
+ [k: string]: string;
176
+ }, Record<string, string>>>>;
142
177
  }, z.core.$strip>>;
143
178
  "fish-audio": z.ZodDefault<z.ZodObject<{
144
179
  referenceId: z.ZodDefault<z.ZodString>;
@@ -161,6 +196,9 @@ declare const AssistantConfigSchema: z.ZodObject<{
161
196
  wav: "wav";
162
197
  opus: "opus";
163
198
  }>>;
199
+ languageVoices: z.ZodOptional<z.ZodPipe<z.ZodRecord<z.ZodString, z.ZodString>, z.ZodTransform<{
200
+ [k: string]: string;
201
+ }, Record<string, string>>>>;
164
202
  }, z.core.$strip>>;
165
203
  xai: z.ZodDefault<z.ZodObject<{
166
204
  voiceId: z.ZodDefault<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>>;
@@ -174,6 +212,9 @@ declare const AssistantConfigSchema: z.ZodObject<{
174
212
  }, z.core.$strip>>;
175
213
  vellum: z.ZodDefault<z.ZodObject<{
176
214
  model: z.ZodOptional<z.ZodString>;
215
+ languageVoices: z.ZodOptional<z.ZodPipe<z.ZodRecord<z.ZodString, z.ZodString>, z.ZodTransform<{
216
+ [k: string]: string;
217
+ }, Record<string, string>>>>;
177
218
  }, z.core.$strip>>;
178
219
  }, z.core.$strip>>;
179
220
  }, z.core.$strip>>;
@@ -484,6 +525,11 @@ declare const AssistantConfigSchema: z.ZodObject<{
484
525
  }, z.core.$strip>>;
485
526
  }, z.core.$strip>>;
486
527
  retrospective: z.ZodDefault<z.ZodObject<{
528
+ enabled: z.ZodDefault<z.ZodBoolean>;
529
+ forkStrategy: z.ZodDefault<z.ZodEnum<{
530
+ cloning: "cloning";
531
+ reference: "reference";
532
+ }>>;
487
533
  timeThresholdMs: z.ZodDefault<z.ZodNumber>;
488
534
  messageThreshold: z.ZodDefault<z.ZodNumber>;
489
535
  minCooldownMs: z.ZodDefault<z.ZodNumber>;
@@ -680,7 +726,7 @@ declare const AssistantConfigSchema: z.ZodObject<{
680
726
  skillCategoryInference: "skillCategoryInference";
681
727
  inference: "inference";
682
728
  vision: "vision";
683
- voiceFrontDecision: "voiceFrontDecision";
729
+ voiceProgressNarration: "voiceProgressNarration";
684
730
  voiceFrontDoor: "voiceFrontDoor";
685
731
  trustRuleSuggestion: "trustRuleSuggestion";
686
732
  homeGreeting: "homeGreeting";
@@ -1010,7 +1056,6 @@ declare const AssistantConfigSchema: z.ZodObject<{
1010
1056
  denyCategories: z.ZodDefault<z.ZodArray<z.ZodString>>;
1011
1057
  }, z.core.$strip>>;
1012
1058
  voice: z.ZodDefault<z.ZodObject<{
1013
- language: z.ZodDefault<z.ZodString>;
1014
1059
  interruptSensitivity: z.ZodDefault<z.ZodEnum<{
1015
1060
  low: "low";
1016
1061
  medium: "medium";
@@ -1039,13 +1084,14 @@ declare const AssistantConfigSchema: z.ZodObject<{
1039
1084
  silenceThresholdMs: z.ZodDefault<z.ZodNumber>;
1040
1085
  maxTurnDurationMs: z.ZodDefault<z.ZodNumber>;
1041
1086
  bargeInMinSpeechMs: z.ZodDefault<z.ZodNumber>;
1087
+ echoBargeInMargin: z.ZodDefault<z.ZodNumber>;
1088
+ echoEmaHalfLifeMs: z.ZodDefault<z.ZodNumber>;
1089
+ echoDrainSlackMs: z.ZodDefault<z.ZodNumber>;
1042
1090
  }, z.core.$strip>>;
1043
1091
  frontModel: z.ZodDefault<z.ZodObject<{
1044
1092
  endpointDecisionTimeoutMs: z.ZodDefault<z.ZodNumber>;
1045
1093
  endpointExtensionMs: z.ZodDefault<z.ZodNumber>;
1046
1094
  endpointMaxExtensions: z.ZodDefault<z.ZodNumber>;
1047
- ackFirstDeltaTimeoutMs: z.ZodDefault<z.ZodNumber>;
1048
- ackGenerationTimeoutMs: z.ZodDefault<z.ZodNumber>;
1049
1095
  progress: z.ZodDefault<z.ZodObject<{
1050
1096
  enabled: z.ZodDefault<z.ZodBoolean>;
1051
1097
  opsThreshold: z.ZodDefault<z.ZodNumber>;
@@ -1056,6 +1102,15 @@ declare const AssistantConfigSchema: z.ZodObject<{
1056
1102
  generationTimeoutMs: z.ZodDefault<z.ZodNumber>;
1057
1103
  }, z.core.$strip>>;
1058
1104
  }, z.core.$strip>>;
1105
+ flux: z.ZodDefault<z.ZodObject<{
1106
+ turnEnd: z.ZodDefault<z.ZodObject<{
1107
+ enabled: z.ZodDefault<z.ZodBoolean>;
1108
+ }, z.core.$strip>>;
1109
+ model: z.ZodDefault<z.ZodString>;
1110
+ eotThreshold: z.ZodDefault<z.ZodNumber>;
1111
+ eagerEotThreshold: z.ZodOptional<z.ZodNumber>;
1112
+ eotTimeoutMs: z.ZodDefault<z.ZodNumber>;
1113
+ }, z.core.$strip>>;
1059
1114
  maxSessionDurationSeconds: z.ZodDefault<z.ZodNumber>;
1060
1115
  archiveAudio: z.ZodDefault<z.ZodBoolean>;
1061
1116
  }, z.core.$strip>>;
@@ -1070,6 +1125,7 @@ declare const AssistantConfigSchema: z.ZodObject<{
1070
1125
  botId: z.ZodDefault<z.ZodString>;
1071
1126
  botUsername: z.ZodDefault<z.ZodString>;
1072
1127
  apiBaseUrl: z.ZodDefault<z.ZodString>;
1128
+ registeredWebhookUrl: z.ZodOptional<z.ZodString>;
1073
1129
  deliverAuthBypass: z.ZodDefault<z.ZodBoolean>;
1074
1130
  timeoutMs: z.ZodDefault<z.ZodNumber>;
1075
1131
  maxRetries: z.ZodDefault<z.ZodNumber>;
@@ -1162,6 +1218,18 @@ declare const AssistantConfigSchema: z.ZodObject<{
1162
1218
  journalRetentionDays: z.ZodDefault<z.ZodNumber>;
1163
1219
  }, z.core.$strip>>;
1164
1220
  plugins: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
1221
+ pluginUpdates: z.ZodDefault<z.ZodObject<{
1222
+ mode: z.ZodDefault<z.ZodEnum<{
1223
+ auto: "auto";
1224
+ manual: "manual";
1225
+ }>>;
1226
+ strategy: z.ZodDefault<z.ZodEnum<{
1227
+ theirs: "theirs";
1228
+ ours: "ours";
1229
+ overwrite: "overwrite";
1230
+ }>>;
1231
+ checkIntervalMs: z.ZodDefault<z.ZodNumber>;
1232
+ }, z.core.$strip>>;
1165
1233
  legacyTelemetryOptOut: z.ZodOptional<z.ZodBoolean>;
1166
1234
  legacyDiagnosticsOptOut: z.ZodOptional<z.ZodBoolean>;
1167
1235
  maxStepsPerSession: z.ZodDefault<z.ZodNumber>;
@@ -1306,8 +1374,8 @@ declare const AssistantEventEnvelopeSchema: z.ZodObject<{
1306
1374
  id: z.ZodString;
1307
1375
  conversationId: z.ZodString;
1308
1376
  status: z.ZodEnum<{
1309
- cancelled: "cancelled";
1310
1377
  completed: "completed";
1378
+ cancelled: "cancelled";
1311
1379
  failed: "failed";
1312
1380
  }>;
1313
1381
  exitCode: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
@@ -2258,6 +2326,34 @@ declare const AssistantEventEnvelopeSchema: z.ZodObject<{
2258
2326
  mayRequireJavaScript: z.ZodOptional<z.ZodBoolean>;
2259
2327
  }, z.core.$strip>>;
2260
2328
  }, z.core.$strip>>;
2329
+ answeredQuestion: z.ZodOptional<z.ZodObject<{
2330
+ requestId: z.ZodString;
2331
+ questions: z.ZodArray<z.ZodObject<{
2332
+ id: z.ZodString;
2333
+ question: z.ZodString;
2334
+ description: z.ZodOptional<z.ZodString>;
2335
+ options: z.ZodArray<z.ZodObject<{
2336
+ id: z.ZodString;
2337
+ label: z.ZodString;
2338
+ description: z.ZodOptional<z.ZodString>;
2339
+ }, z.core.$strip>>;
2340
+ freeTextPlaceholder: z.ZodOptional<z.ZodString>;
2341
+ }, z.core.$strip>>;
2342
+ responses: z.ZodArray<z.ZodObject<{
2343
+ questionId: z.ZodString;
2344
+ decision: z.ZodEnum<{
2345
+ option: "option";
2346
+ free_text: "free_text";
2347
+ skipped: "skipped";
2348
+ }>;
2349
+ optionId: z.ZodOptional<z.ZodString>;
2350
+ text: z.ZodOptional<z.ZodString>;
2351
+ }, z.core.$strip>>;
2352
+ overall: z.ZodEnum<{
2353
+ completed: "completed";
2354
+ closed: "closed";
2355
+ }>;
2356
+ }, z.core.$strip>>;
2261
2357
  errorCode: z.ZodOptional<z.ZodString>;
2262
2358
  completedAt: z.ZodOptional<z.ZodNumber>;
2263
2359
  }, z.core.$strip>, z.ZodObject<{
@@ -2474,6 +2570,12 @@ export declare class AssistantEventHub {
2474
2570
  * delivery to remaining subscribers.
2475
2571
  */
2476
2572
  publish(event: AssistantEventEnvelope, options?: AssistantEventPublishOptions): Promise<void>;
2573
+ /**
2574
+ * Yield every active client entry with the given clientId. `subscribe`
2575
+ * disposes any prior entries for the same clientId, so at most one entry
2576
+ * matches.
2577
+ */
2578
+ private activeClientEntries;
2477
2579
  /**
2478
2580
  * Return the active client subscriber with the given clientId, or
2479
2581
  * `undefined` if no such subscriber exists.
@@ -2488,6 +2590,29 @@ export declare class AssistantEventHub {
2488
2590
  * authenticated user identity that opened the target client's SSE stream.
2489
2591
  */
2490
2592
  getActorPrincipalIdForClient(clientId: string): string | undefined;
2593
+ /**
2594
+ * Whether the connection identified by `connectionId` is still an active
2595
+ * client subscription that carries no `actorPrincipalId`.
2596
+ *
2597
+ * Drives the retrying SSE self-heal (`sse-actor-principal-heal.ts`): the loop
2598
+ * re-checks before each attempt so it stops as soon as the connection closes,
2599
+ * is replaced by a reconnect, or gets a principal from any path. Returns
2600
+ * `false` for an unknown, inactive, or process-type connection.
2601
+ */
2602
+ needsActorPrincipalHeal(connectionId: string): boolean;
2603
+ /**
2604
+ * Fill a missing `actorPrincipalId` on a live client subscription.
2605
+ *
2606
+ * Used by the SSE dev-bypass self-heal: when the guardian-delivery cache is
2607
+ * cold at subscribe time, the registration lands without a principal; the
2608
+ * route resolves it async and patches the record here. Keyed by
2609
+ * `connectionId` (not clientId) so a reconnect race cannot patch the
2610
+ * subscription that replaced the one being healed. No-op when the
2611
+ * connection is gone or already carries a principal: this only fills a
2612
+ * missing value, never overwrites one. The value must come from the
2613
+ * daemon's own server-side guardian lookup, never from client input.
2614
+ */
2615
+ fillClientActorPrincipalId(connectionId: string, actorPrincipalId: string): void;
2491
2616
  /**
2492
2617
  * Returns true when at least one active subscriber would receive the given
2493
2618
  * event based on the same conversation matching rules as publish().
@@ -2517,6 +2642,12 @@ export declare class AssistantEventHub {
2517
2642
  * Touch a client subscriber — update `lastActiveAt`. Used by heartbeat.
2518
2643
  */
2519
2644
  touchClient(clientId: string): void;
2645
+ /**
2646
+ * Record the desktop presence state reported by a client. `reportedAt`
2647
+ * always advances. Returns true when at least one active client entry
2648
+ * matched.
2649
+ */
2650
+ setClientPresence(clientId: string, state: DesktopPresenceState): boolean;
2520
2651
  /**
2521
2652
  * Force-disconnect a client by disposing all subscribers for the given
2522
2653
  * `clientId`. Returns the number of disposed entries.
@@ -2548,6 +2679,7 @@ declare const AssistantEventPublishOptionsSchema: z.ZodObject<{
2548
2679
  }>>;
2549
2680
  targetClientId: z.ZodOptional<z.ZodString>;
2550
2681
  targetInterfaceId: z.ZodOptional<z.ZodEnum<{
2682
+ plugin: "plugin";
2551
2683
  telegram: "telegram";
2552
2684
  phone: "phone";
2553
2685
  whatsapp: "whatsapp";
@@ -2694,8 +2826,8 @@ declare const AssistantEventSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
2694
2826
  id: z.ZodString;
2695
2827
  conversationId: z.ZodString;
2696
2828
  status: z.ZodEnum<{
2697
- cancelled: "cancelled";
2698
2829
  completed: "completed";
2830
+ cancelled: "cancelled";
2699
2831
  failed: "failed";
2700
2832
  }>;
2701
2833
  exitCode: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
@@ -3646,6 +3778,34 @@ declare const AssistantEventSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
3646
3778
  mayRequireJavaScript: z.ZodOptional<z.ZodBoolean>;
3647
3779
  }, z.core.$strip>>;
3648
3780
  }, z.core.$strip>>;
3781
+ answeredQuestion: z.ZodOptional<z.ZodObject<{
3782
+ requestId: z.ZodString;
3783
+ questions: z.ZodArray<z.ZodObject<{
3784
+ id: z.ZodString;
3785
+ question: z.ZodString;
3786
+ description: z.ZodOptional<z.ZodString>;
3787
+ options: z.ZodArray<z.ZodObject<{
3788
+ id: z.ZodString;
3789
+ label: z.ZodString;
3790
+ description: z.ZodOptional<z.ZodString>;
3791
+ }, z.core.$strip>>;
3792
+ freeTextPlaceholder: z.ZodOptional<z.ZodString>;
3793
+ }, z.core.$strip>>;
3794
+ responses: z.ZodArray<z.ZodObject<{
3795
+ questionId: z.ZodString;
3796
+ decision: z.ZodEnum<{
3797
+ option: "option";
3798
+ free_text: "free_text";
3799
+ skipped: "skipped";
3800
+ }>;
3801
+ optionId: z.ZodOptional<z.ZodString>;
3802
+ text: z.ZodOptional<z.ZodString>;
3803
+ }, z.core.$strip>>;
3804
+ overall: z.ZodEnum<{
3805
+ completed: "completed";
3806
+ closed: "closed";
3807
+ }>;
3808
+ }, z.core.$strip>>;
3649
3809
  errorCode: z.ZodOptional<z.ZodString>;
3650
3810
  completedAt: z.ZodOptional<z.ZodNumber>;
3651
3811
  }, z.core.$strip>, z.ZodObject<{
@@ -3944,6 +4104,17 @@ declare interface ClientEntry extends BaseSubscriberEntry {
3944
4104
  * service-token connections that have no principal.
3945
4105
  */
3946
4106
  actorPrincipalId?: string;
4107
+ /**
4108
+ * Last desktop presence reported by this client, for clients that report it.
4109
+ * In-memory only, so consumers must fail open when it is absent.
4110
+ */
4111
+ presence?: ClientPresence;
4112
+ }
4113
+
4114
+ declare interface ClientPresence {
4115
+ state: DesktopPresenceState;
4116
+ /** When the daemon last heard from the client. Drives staleness. */
4117
+ reportedAt: Date;
3947
4118
  }
3948
4119
 
3949
4120
  declare interface CliOptionHelp {
@@ -4033,6 +4204,8 @@ export declare interface ConversationRow {
4033
4204
  originInterface: string | null;
4034
4205
  forkParentConversationId: string | null;
4035
4206
  forkParentMessageId: string | null;
4207
+ /** `"reference"` on referential forks; `"cloning"` or null on copied ones. */
4208
+ forkStrategy: string | null;
4036
4209
  isAutoTitle: number;
4037
4210
  scheduleJobId: string | null;
4038
4211
  lastMessageAt: number | null;
@@ -4102,6 +4275,14 @@ export declare class CredentialResolutionError extends Error {
4102
4275
  */
4103
4276
  export declare function deleteConversation(id: string): Promise<void>;
4104
4277
 
4278
+ /**
4279
+ * The presence states a desktop client may report. Single runtime source: the
4280
+ * stored type and the route's wire enum both derive from this tuple.
4281
+ */
4282
+ declare const DESKTOP_PRESENCE_STATES: readonly ["active", "idle", "away"];
4283
+
4284
+ declare type DesktopPresenceState = (typeof DESKTOP_PRESENCE_STATES)[number];
4285
+
4105
4286
  declare interface DiffInfo {
4106
4287
  filePath: string;
4107
4288
  oldContent: string;
@@ -4190,6 +4371,14 @@ export declare function getConversation(id: string): Promise<ConversationRow | n
4190
4371
  */
4191
4372
  export declare function getConversationDirPath(id: string, createdAtMs: number): Promise<string>;
4192
4373
 
4374
+ /**
4375
+ * The persisted `processing_started_at` stamp for a conversation, or null
4376
+ * when the conversation is idle (or the row does not exist). Lets background
4377
+ * consumers age-gate the processing flag: a stamp far in the past is a
4378
+ * stranded flag (a swallowed turn-end clear), not a live turn.
4379
+ */
4380
+ export declare function getConversationProcessingStartedAt(id: string): Promise<number | null>;
4381
+
4193
4382
  /** Fetch one document from the calling plugin's index, or null. */
4194
4383
  export declare function getDocument(documentId: string): Promise<IndexedDocument | null>;
4195
4384
 
@@ -4433,7 +4622,7 @@ declare interface InsertedMessage {
4433
4622
  deduplicated: boolean;
4434
4623
  }
4435
4624
 
4436
- declare const INTERFACE_IDS: readonly ["macos", "ios", "cli", "telegram", "phone", "web", "whatsapp", "slack", "email", "chrome-extension", "a2a", "discord", "route"];
4625
+ declare const INTERFACE_IDS: readonly ["macos", "ios", "cli", "telegram", "phone", "web", "whatsapp", "slack", "email", "chrome-extension", "a2a", "discord", "route", "plugin"];
4437
4626
 
4438
4627
  declare type InterfaceId = (typeof INTERFACE_IDS)[number];
4439
4628
 
@@ -4512,7 +4701,13 @@ export declare function lastToolResultUserMessageIndex(history: Message[]): numb
4512
4701
  */
4513
4702
  export declare function listCatalogSkills(): Promise<ResolvedSkillEntry[]>;
4514
4703
 
4515
- /** List conversation rows, newest first. */
4704
+ /**
4705
+ * List conversation rows, newest first.
4706
+ *
4707
+ * The positional signature is part of the plugin API surface and stays
4708
+ * stable; the underlying query takes a named filter, which this maps onto.
4709
+ * Omitted arguments stay omitted so the query's own defaults apply.
4710
+ */
4516
4711
  export declare function listConversations(limit?: number, conversationType?: ConversationType, offset?: number, archiveStatus?: ArchiveStatusFilter, originChannel?: string): Promise<ConversationRow[]>;
4517
4712
 
4518
4713
  /**
@@ -4607,6 +4802,19 @@ declare interface LiveVoiceErrorServerFrame extends LiveVoiceServerFrameBase {
4607
4802
  readonly type: "error";
4608
4803
  readonly code: LiveVoiceProtocolErrorCode;
4609
4804
  readonly message: string;
4805
+ /**
4806
+ * The client frame this error is about, when the failure was a parse or
4807
+ * validation failure of a specific frame. Absent otherwise, and absent from
4808
+ * daemons predating the field.
4809
+ *
4810
+ * It exists so an `unknown_type` is attributable. A client that sends more
4811
+ * than one optional frame (today: `update_config` and `attach_image`) gets
4812
+ * the same code for either, and without this has to assume which one was
4813
+ * refused. The wrong assumption is silent in both directions: settings stop
4814
+ * applying for a session, or a photo the user watched themselves take is
4815
+ * dropped with nothing said.
4816
+ */
4817
+ readonly frameType?: string;
4610
4818
  /**
4611
4819
  * True when the session continues past the error (e.g. a transient
4612
4820
  * transcriber blip or one failed TTS segment). Absent (including on frames
@@ -4635,14 +4843,34 @@ declare interface LiveVoiceMetricsServerFrame extends LiveVoiceServerFrameBase {
4635
4843
  /** End-of-speech (utterance_end, or ptt_release in manual mode) to first TTS audio. */
4636
4844
  readonly roundTripMs: number | null;
4637
4845
  readonly totalMs: number | null;
4846
+ /**
4847
+ * End-of-turn latency: the local VAD speech-stop mark to the moment the
4848
+ * turn committed. Recorded on every committed turn, and measured from the
4849
+ * same anchor whichever decider owned the boundary, so front-door and Flux
4850
+ * turns are one comparable population. Absent on a turn that never
4851
+ * committed and in push-to-talk mode, where there is no local VAD
4852
+ * speech-stop mark.
4853
+ */
4854
+ readonly endpointCommitLatencyMs?: number;
4638
4855
  /**
4639
4856
  * Semantic-endpointing "hold" decisions taken during the turn. Present only
4640
4857
  * when the endpoint decider was consulted (otherwise the field is absent,
4641
4858
  * keeping frames unchanged).
4642
4859
  */
4643
4860
  readonly endpointHoldCount?: number;
4644
- /** Worst endpoint-decision latency observed during the turn. */
4861
+ /**
4862
+ * Worst endpoint-decision latency observed during the turn. It spans only
4863
+ * the decider's own work, and the two deciders start it at different
4864
+ * moments, so it is a diagnostic rather than a cross-path comparison: read
4865
+ * `endpointCommitLatencyMs` for that.
4866
+ */
4645
4867
  readonly endpointDecisionMaxLatencyMs?: number;
4868
+ /**
4869
+ * Which path decided the turn's endpoint: the front-door hold verdict or
4870
+ * the STT provider's model-integrated end-of-turn. Present under the same
4871
+ * condition as the two fields above.
4872
+ */
4873
+ readonly endpointDecisionSource?: "front-door" | "provider";
4646
4874
  /** Which floor-holding ack actually spoke during the turn, if any. */
4647
4875
  readonly ackSpoken?: "first_delta" | "tool_use";
4648
4876
  /**
@@ -4816,7 +5044,7 @@ declare const LLMCallSiteEnum: z.ZodEnum<{
4816
5044
  skillCategoryInference: "skillCategoryInference";
4817
5045
  inference: "inference";
4818
5046
  vision: "vision";
4819
- voiceFrontDecision: "voiceFrontDecision";
5047
+ voiceProgressNarration: "voiceProgressNarration";
4820
5048
  voiceFrontDoor: "voiceFrontDoor";
4821
5049
  trustRuleSuggestion: "trustRuleSuggestion";
4822
5050
  homeGreeting: "homeGreeting";
@@ -4859,6 +5087,7 @@ declare type MessageMetadata_2 = z.infer<typeof messageMetadataSchema>;
4859
5087
 
4860
5088
  declare const messageMetadataSchema: z.ZodObject<{
4861
5089
  userMessageChannel: z.ZodOptional<z.ZodEnum<{
5090
+ plugin: "plugin";
4862
5091
  vellum: "vellum";
4863
5092
  platform: "platform";
4864
5093
  telegram: "telegram";
@@ -4870,6 +5099,7 @@ declare const messageMetadataSchema: z.ZodObject<{
4870
5099
  discord: "discord";
4871
5100
  }>>;
4872
5101
  assistantMessageChannel: z.ZodOptional<z.ZodEnum<{
5102
+ plugin: "plugin";
4873
5103
  vellum: "vellum";
4874
5104
  platform: "platform";
4875
5105
  telegram: "telegram";
@@ -4880,9 +5110,10 @@ declare const messageMetadataSchema: z.ZodObject<{
4880
5110
  a2a: "a2a";
4881
5111
  discord: "discord";
4882
5112
  }>>;
4883
- userMessageInterface: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<"telegram" | "phone" | "whatsapp" | "slack" | "email" | "a2a" | "discord" | "macos" | "ios" | "cli" | "web" | "chrome-extension" | "route" | null, string>> & z.ZodType<"telegram" | "phone" | "whatsapp" | "slack" | "email" | "a2a" | "discord" | "macos" | "ios" | "cli" | "web" | "chrome-extension" | "route", string, z.core.$ZodTypeInternals<"telegram" | "phone" | "whatsapp" | "slack" | "email" | "a2a" | "discord" | "macos" | "ios" | "cli" | "web" | "chrome-extension" | "route", string>>>;
4884
- assistantMessageInterface: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<"telegram" | "phone" | "whatsapp" | "slack" | "email" | "a2a" | "discord" | "macos" | "ios" | "cli" | "web" | "chrome-extension" | "route" | null, string>> & z.ZodType<"telegram" | "phone" | "whatsapp" | "slack" | "email" | "a2a" | "discord" | "macos" | "ios" | "cli" | "web" | "chrome-extension" | "route", string, z.core.$ZodTypeInternals<"telegram" | "phone" | "whatsapp" | "slack" | "email" | "a2a" | "discord" | "macos" | "ios" | "cli" | "web" | "chrome-extension" | "route", string>>>;
5113
+ userMessageInterface: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<"plugin" | "telegram" | "phone" | "whatsapp" | "slack" | "email" | "a2a" | "discord" | "macos" | "ios" | "cli" | "web" | "chrome-extension" | "route" | null, string>> & z.ZodType<"plugin" | "telegram" | "phone" | "whatsapp" | "slack" | "email" | "a2a" | "discord" | "macos" | "ios" | "cli" | "web" | "chrome-extension" | "route", string, z.core.$ZodTypeInternals<"plugin" | "telegram" | "phone" | "whatsapp" | "slack" | "email" | "a2a" | "discord" | "macos" | "ios" | "cli" | "web" | "chrome-extension" | "route", string>>>;
5114
+ assistantMessageInterface: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<"plugin" | "telegram" | "phone" | "whatsapp" | "slack" | "email" | "a2a" | "discord" | "macos" | "ios" | "cli" | "web" | "chrome-extension" | "route" | null, string>> & z.ZodType<"plugin" | "telegram" | "phone" | "whatsapp" | "slack" | "email" | "a2a" | "discord" | "macos" | "ios" | "cli" | "web" | "chrome-extension" | "route", string, z.core.$ZodTypeInternals<"plugin" | "telegram" | "phone" | "whatsapp" | "slack" | "email" | "a2a" | "discord" | "macos" | "ios" | "cli" | "web" | "chrome-extension" | "route", string>>>;
4885
5115
  client: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
5116
+ clientOsFromRequest: z.ZodOptional<z.ZodBoolean>;
4886
5117
  subagentNotification: z.ZodOptional<z.ZodObject<{
4887
5118
  subagentId: z.ZodString;
4888
5119
  label: z.ZodString;
@@ -4908,6 +5139,7 @@ declare const messageMetadataSchema: z.ZodObject<{
4908
5139
  }>>;
4909
5140
  model: z.ZodOptional<z.ZodString>;
4910
5141
  provenanceSourceChannel: z.ZodOptional<z.ZodEnum<{
5142
+ plugin: "plugin";
4911
5143
  vellum: "vellum";
4912
5144
  platform: "platform";
4913
5145
  telegram: "telegram";
@@ -4933,8 +5165,8 @@ declare const messageMetadataSchema: z.ZodObject<{
4933
5165
  command: z.ZodString;
4934
5166
  startedAt: z.ZodNumber;
4935
5167
  status: z.ZodEnum<{
4936
- cancelled: "cancelled";
4937
5168
  completed: "completed";
5169
+ cancelled: "cancelled";
4938
5170
  failed: "failed";
4939
5171
  }>;
4940
5172
  exitCode: z.ZodNullable<z.ZodNumber>;
@@ -5624,7 +5856,7 @@ declare type ResolutionFallbackReason = "missing" | "disabled" | "incomplete";
5624
5856
  * 3. `llm.callSites[callSite].profile` (the call site's named profile)
5625
5857
  * 4. `CALL_SITE_DEFAULTS[callSite].profile` intent resolved through
5626
5858
  * `llm.defaultProvider`
5627
- * 5. balanced intent through `llm.defaultProvider` — the code-owned anchor
5859
+ * 5. balanced intent through `llm.defaultProvider`: the code-owned anchor
5628
5860
  * for profileless call sites, or when nothing above is usable
5629
5861
  *
5630
5862
  * A winner must carry its own `provider` AND `model`: the base layer's schema
@@ -5767,12 +5999,46 @@ export declare function resolveMediaSourceData(source: MediaSource_2): {
5767
5999
  } | null;
5768
6000
 
5769
6001
  /**
5770
- * Read the guardian's display name from `users/default.md`. We look for the
5771
- * markdown-bold "Name" label (matching the IDENTITY.md convention) and fall
5772
- * back to `null` on any miss; callers substitute a generic label.
6002
+ * Resolve the redirect URI an authorization server should send the user
6003
+ * back to.
6004
+ *
6005
+ * Takes no arguments on purpose: every caller shares one route, so there
6006
+ * is nothing to vary. That is what makes the URI stable across callers and
6007
+ * across attempts, which is what an exact-match `redirect_uri` check needs.
6008
+ *
6009
+ * @throws when no public ingress is configured and the assistant is not
6010
+ * connected to the platform. There is no URL that would work in that
6011
+ * case, and returning a plausible one produces an authorization request
6012
+ * whose callback silently never arrives.
6013
+ */
6014
+ export declare function resolveOauthCallbackUrl(): Promise<string>;
6015
+
6016
+ /**
6017
+ * Read the user's display name from the guardian's persona file
6018
+ * (`users/<slug>.md`, resolved via the guardian-delivery binding), falling
6019
+ * back to `users/default.md`. Returns `null` on any miss; callers substitute
6020
+ * a generic label.
6021
+ *
6022
+ * The guardian resolution reads the sync in-process guardian-delivery cache;
6023
+ * callers in processes that do not otherwise warm it (memory worker) await
6024
+ * `getGuardianDelivery` first.
5773
6025
  */
5774
6026
  export declare function resolveUserName(workspaceDir: string): string | null;
5775
6027
 
6028
+ /**
6029
+ * Resolve the public URL a third party should deliver to for `path`.
6030
+ *
6031
+ * On the managed branches this registers a callback route with the platform,
6032
+ * which is idempotent and matches what `assistant webhooks register` does.
6033
+ *
6034
+ * @throws when the plugin cannot be determined, when `path` is not one the
6035
+ * gateway would serve, or when no ingress is configured and the assistant is
6036
+ * not connected to the platform. That last case has no URL that would work,
6037
+ * and a plausible one would produce a vendor registration that silently
6038
+ * receives nothing.
6039
+ */
6040
+ export declare function resolveWebhookUrl(options: WebhookUrlOptions): Promise<string>;
6041
+
5776
6042
  export declare enum RiskLevel {
5777
6043
  Low = "low",
5778
6044
  Medium = "medium",
@@ -5992,12 +6258,32 @@ export declare interface SendMessageConfig {
5992
6258
  */
5993
6259
  logit_bias?: Record<string, number>;
5994
6260
  /**
5995
- * When true, the most recent user message's content varies across
5996
- * otherwise-identical turns (e.g. a per-turn memory block was injected into
5997
- * it). The provider places the primary long-TTL cache breakpoint on the most
5998
- * recent *stable* user message instead of the volatile latest one, so the
5999
- * cached prefix stays reusable across turns. Default false — existing
6000
- * behavior.
6261
+ * When true, the TURN-STARTING user message carries content that will not
6262
+ * recur byte-identically on the next turn, so a long-TTL breakpoint placed
6263
+ * on it could never be read back across turns. The agent loop is the only
6264
+ * producer: it sets the flag from the history it is about to send, when the
6265
+ * turn-starting message carries a memory-v3 `<memory_spotlight>` block (the
6266
+ * one injected block strip-and-replaced from every user message each turn).
6267
+ *
6268
+ * The flag describes the turn, not the request, so it holds for every
6269
+ * request the turn makes, including tool-loop iterations, whose trailing
6270
+ * tool-result message is user-role but carries no injected blocks.
6271
+ *
6272
+ * Consumed by the Anthropic client only, where it selects the TTL of the
6273
+ * turn-start breakpoint: short instead of long. The block is still marked,
6274
+ * so the turn's tool-loop iterations read the prefix back and each hit
6275
+ * refreshes the entry; nothing is spent on a long-TTL entry whose bytes
6276
+ * change before the next turn could reach it. Holding the flag steady across
6277
+ * the turn is what keeps that one boundary on a single TTL; marking it at
6278
+ * two would bill two writes for one reusable prefix.
6279
+ *
6280
+ * The OpenAI Responses transport ignores the flag and marks every markable
6281
+ * user item: a volatile message is fixed within its own turn, so the write is
6282
+ * prepaid once and read back by each tool-loop iteration.
6283
+ *
6284
+ * Default false. Providers that place no message-level breakpoints, or that
6285
+ * key their cache on a request-level identifier rather than message bytes,
6286
+ * can ignore it.
6001
6287
  */
6002
6288
  mutableLatestUserMessage?: boolean;
6003
6289
  /**
@@ -6272,13 +6558,32 @@ export declare type SttErrorCategory =
6272
6558
  * Canonical provider identifiers for daemon-hosted STT backends.
6273
6559
  * Extend this union as new providers are integrated.
6274
6560
  */
6275
- export declare type SttProviderId = "openai-whisper" | "deepgram" | "google-gemini" | "xai" | "vellum";
6561
+ export declare type SttProviderId = "openai-whisper" | "deepgram"
6562
+ /**
6563
+ * Deepgram's Flux conversational speech model. Shares the `deepgram`
6564
+ * credential and is streaming-only: Flux has no batch endpoint.
6565
+ */
6566
+ | "deepgram-flux" | "google-gemini" | "xai" | "vellum";
6276
6567
 
6277
6568
  /** The streaming session has closed (no more events will be emitted). */
6278
6569
  export declare interface SttStreamServerClosedEvent {
6279
6570
  readonly type: "closed";
6280
6571
  }
6281
6572
 
6573
+ /**
6574
+ * The provider's turn model speculates the user has finished, ahead of its
6575
+ * committed end-of-turn decision. A {@link SttStreamServerTurnResumedEvent}
6576
+ * retracts the speculation; a {@link SttStreamServerTurnEndEvent} confirms it.
6577
+ *
6578
+ * Emitted only by providers with model-integrated turn detection; providers
6579
+ * without it never emit these.
6580
+ */
6581
+ export declare interface SttStreamServerEagerTurnEndEvent {
6582
+ readonly type: "eager-turn-end";
6583
+ /** Transcript text as of the speculated turn end. */
6584
+ readonly text: string;
6585
+ }
6586
+
6282
6587
  /** An error occurred during streaming transcription. */
6283
6588
  export declare interface SttStreamServerErrorEvent {
6284
6589
  readonly type: "error";
@@ -6295,7 +6600,7 @@ export declare interface SttStreamServerErrorEvent {
6295
6600
  * and final transcripts, errors, and session lifecycle signals in a
6296
6601
  * type-safe manner.
6297
6602
  */
6298
- export declare type SttStreamServerEvent = SttStreamServerPartialEvent | SttStreamServerFinalEvent | SttStreamServerFinalizedEvent | SttStreamServerErrorEvent | SttStreamServerClosedEvent;
6603
+ export declare type SttStreamServerEvent = SttStreamServerPartialEvent | SttStreamServerFinalEvent | SttStreamServerFinalizedEvent | SttStreamServerTurnStartEvent | SttStreamServerEagerTurnEndEvent | SttStreamServerTurnResumedEvent | SttStreamServerTurnEndEvent | SttStreamServerErrorEvent | SttStreamServerClosedEvent;
6299
6604
 
6300
6605
  /**
6301
6606
  * A final (committed) transcript — this segment will not be revised.
@@ -6310,6 +6615,14 @@ export declare interface SttStreamServerFinalEvent {
6310
6615
  * provider does not surface confidence on this chunk.
6311
6616
  */
6312
6617
  readonly confidence?: number;
6618
+ /**
6619
+ * All detected languages of this chunk in dominance order (first entry
6620
+ * dominant), already normalized to lowercase base subtags (e.g. "en",
6621
+ * "hi") by the emitting adapter; consumers must not re-normalize. Only
6622
+ * providers with code-switching metadata (currently Deepgram nova-3
6623
+ * `multi`) populate this. Absence means "unknown", never English.
6624
+ */
6625
+ readonly languages?: readonly string[];
6313
6626
  /**
6314
6627
  * True when this final is the flush response to
6315
6628
  * {@link StreamingTranscriber.finalizeUtterance} — i.e. it commits audio
@@ -6343,6 +6656,67 @@ export declare interface SttStreamServerPartialEvent {
6343
6656
  * provider does not surface confidence on interim chunks.
6344
6657
  */
6345
6658
  readonly confidence?: number;
6659
+ /**
6660
+ * All detected languages of this chunk in dominance order (first entry
6661
+ * dominant), already normalized to lowercase base subtags (e.g. "en",
6662
+ * "hi") by the emitting adapter; consumers must not re-normalize. Only
6663
+ * providers with code-switching metadata (currently Deepgram nova-3
6664
+ * `multi`) populate this. Absence means "unknown", never English.
6665
+ */
6666
+ readonly languages?: readonly string[];
6667
+ }
6668
+
6669
+ /**
6670
+ * The provider's turn model committed an end of turn: the user has finished
6671
+ * speaking and a reply can be dispatched.
6672
+ *
6673
+ * Emitted only by providers with model-integrated turn detection; providers
6674
+ * without it never emit these.
6675
+ */
6676
+ export declare interface SttStreamServerTurnEndEvent {
6677
+ readonly type: "turn-end";
6678
+ /** Committed transcript text for the completed turn. */
6679
+ readonly text: string;
6680
+ /**
6681
+ * Provider-emitted end-of-turn confidence in [0, 1]. Undefined when the
6682
+ * provider does not surface a score.
6683
+ */
6684
+ readonly confidence?: number;
6685
+ /**
6686
+ * Provider's index for the turn being closed, matching the
6687
+ * {@link SttStreamServerTurnStartEvent} that opened it. A consumer can
6688
+ * compare it against the newest turn it has seen opened to tell an
6689
+ * end-of-turn for the turn still in progress from one the provider has
6690
+ * already superseded. Undefined when the provider does not number its
6691
+ * turns.
6692
+ */
6693
+ readonly turnIndex?: number;
6694
+ }
6695
+
6696
+ /**
6697
+ * The user kept speaking after an {@link SttStreamServerEagerTurnEndEvent},
6698
+ * retracting the speculated turn end.
6699
+ *
6700
+ * Emitted only by providers with model-integrated turn detection; providers
6701
+ * without it never emit these.
6702
+ */
6703
+ export declare interface SttStreamServerTurnResumedEvent {
6704
+ readonly type: "turn-resumed";
6705
+ }
6706
+
6707
+ /**
6708
+ * The provider's turn model detected the start of a user turn.
6709
+ *
6710
+ * Emitted only by providers with model-integrated turn detection; providers
6711
+ * without it never emit these.
6712
+ */
6713
+ export declare interface SttStreamServerTurnStartEvent {
6714
+ readonly type: "turn-start";
6715
+ /**
6716
+ * Provider's index for the turn being opened, monotonically increasing
6717
+ * within a stream. Undefined when the provider does not number its turns.
6718
+ */
6719
+ readonly turnIndex?: number;
6346
6720
  }
6347
6721
 
6348
6722
  declare type SubscriberEntry = ClientEntry | ProcessEntry;
@@ -6685,6 +7059,14 @@ export declare interface ToolContext {
6685
7059
  * @legacy
6686
7060
  */
6687
7061
  overrideProfile?: string;
7062
+ /**
7063
+ * The firing's `cron_runs.id` when a schedule triggered this turn, `null`
7064
+ * otherwise. Tools that spawn further LLM work (`subagent_spawn`,
7065
+ * `subagent_message`) forward it so the delegated usage rows carry the same
7066
+ * stamp and attribute to the firing rather than dropping out of schedule
7067
+ * cost reporting.
7068
+ */
7069
+ cronRunId?: string | null;
6688
7070
  /**
6689
7071
  * The LLM call site of the turn currently executing this tool (`mainAgent`,
6690
7072
  * `heartbeatAgent`, scheduled work, etc.). `subagent_spawn` reads it to
@@ -6696,10 +7078,12 @@ export declare interface ToolContext {
6696
7078
  invokingCallSite?: LLMCallSite;
6697
7079
  /**
6698
7080
  * Canonical principal ID of the actor on whose behalf this tool invocation
6699
- * is running. Sourced from `conversation.trustContext.guardianPrincipalId`.
7081
+ * is running — the turn's actor principal, falling back to the trust
7082
+ * context's `guardianPrincipalId` (see `resolveTurnActorPrincipalId`).
6700
7083
  * Used by host proxies to bind cross-client targeted execution to the same
6701
- * authenticated user identity. May be undefined for legacy/internal flows
6702
- * with no resolved actor identity.
7084
+ * authenticated user identity, so it must resolve to the SAME principal a
7085
+ * desktop client registers with on its SSE stream. May be undefined for
7086
+ * legacy/internal flows with no resolved actor identity.
6703
7087
  * @legacy
6704
7088
  */
6705
7089
  sourceActorPrincipalId?: string;
@@ -6860,6 +7244,14 @@ export declare interface ToolExecutionResult {
6860
7244
  /** Structured activity metadata for client rendering (web search, web fetch, etc).
6861
7245
  * Populated by daemon-internal tools; plugins must not set this. */
6862
7246
  activityMetadata?: ToolActivityMetadata;
7247
+ /**
7248
+ * Typed side channel from the `ask_question` executor to the agent loop: the
7249
+ * questions asked and the answers the user gave. The loop forwards it on the
7250
+ * `tool_result` event and persists it on the tool_use block, so the answered
7251
+ * card renders live and survives a history reopen instead of the decision
7252
+ * disappearing with the interactive prompt. Set only by `ask_question`.
7253
+ */
7254
+ answeredQuestion?: AnsweredQuestion;
6863
7255
  }
6864
7256
 
6865
7257
  export declare interface ToolResultContent {
@@ -7104,6 +7496,38 @@ declare interface WebFetchMetadata {
7104
7496
  /** Provider that backed a `web_fetch` call. `default` is the built-in fetcher. */
7105
7497
  declare type WebFetchProviderId = "default" | "firecrawl";
7106
7498
 
7499
+ /**
7500
+ * Public URL resolution for a plugin's own ingress route.
7501
+ *
7502
+ * A plugin that receives third-party webhooks has to tell the vendor where to
7503
+ * deliver. Which URL is correct depends on how the assistant is reachable:
7504
+ * a platform pod and a platform-connected assistant are served through a
7505
+ * managed callback route, while a self-hosted deployment is served through its
7506
+ * configured public ingress. `ingress.publicBaseUrl` alone does not decide it,
7507
+ * because on a platform-connected assistant that value holds the Velay tunnel
7508
+ * address, which is not where plugin routes are served.
7509
+ *
7510
+ * `resolveCallbackUrl` owns that decision for every caller in the codebase
7511
+ * (`webhooks register`, the Telegram webhook manager). This exposes it to
7512
+ * plugins so there is one implementation rather than one per plugin.
7513
+ */
7514
+ export declare interface WebhookUrlOptions {
7515
+ /**
7516
+ * Route path within the plugin's namespace, such as `"events-photon"`.
7517
+ * Relative, with no leading slash.
7518
+ */
7519
+ path: string;
7520
+ /**
7521
+ * Plugin whose namespace the route belongs to.
7522
+ *
7523
+ * Defaults to the plugin in context, which covers hooks and tools. Supply it
7524
+ * explicitly from a plugin route handler, where no context is established.
7525
+ */
7526
+ plugin?: string;
7527
+ /** Human-readable label for the platform's admin display. */
7528
+ sourceIdentifier?: string;
7529
+ }
7530
+
7107
7531
  declare interface WebSearchMetadata {
7108
7532
  query: string;
7109
7533
  provider: WebSearchProviderId;
package/index.js CHANGED
@@ -21,6 +21,7 @@ export const getAssistantName = api.getAssistantName;
21
21
  export const getConfiguredProvider = api.getConfiguredProvider;
22
22
  export const getConversation = api.getConversation;
23
23
  export const getConversationDirPath = api.getConversationDirPath;
24
+ export const getConversationProcessingStartedAt = api.getConversationProcessingStartedAt;
24
25
  export const getDocument = api.getDocument;
25
26
  export const getMessages = api.getMessages;
26
27
  export const getModelProfiles = api.getModelProfiles;
@@ -43,7 +44,9 @@ export const queryIndex = api.queryIndex;
43
44
  export const removeDocument = api.removeDocument;
44
45
  export const resolveCredential = api.resolveCredential;
45
46
  export const resolveMediaSourceData = api.resolveMediaSourceData;
47
+ export const resolveOauthCallbackUrl = api.resolveOauthCallbackUrl;
46
48
  export const resolveUserName = api.resolveUserName;
49
+ export const resolveWebhookUrl = api.resolveWebhookUrl;
47
50
  export const runConversationTurn = api.runConversationTurn;
48
51
  export const searchMessageIdsLexical = api.searchMessageIdsLexical;
49
52
  export const selectedBackendSupportsMultimodal = api.selectedBackendSupportsMultimodal;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vellumai/plugin-api",
3
- "version": "0.11.2",
3
+ "version": "0.11.3-dev.202608080427.92f668a",
4
4
  "description": "Public TypeScript authoring contract for Vellum assistant plugins.",
5
5
  "license": "MIT",
6
6
  "type": "module",