@proteos/sdk 0.38.0 → 0.40.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@proteos/sdk",
3
- "version": "0.38.0",
3
+ "version": "0.40.0",
4
4
  "license": "Apache-2.0",
5
5
  "description": "TypeScript SDK for the Proteos platform",
6
6
  "repository": {
@@ -5,6 +5,7 @@ import { type PromptService, PromptServiceImpl } from './prompts.js'
5
5
  import { type SessionService, SessionServiceImpl } from './sessions.js'
6
6
  import { type SkillService, SkillServiceImpl } from './skills.js'
7
7
  import { type ToolService, ToolServiceImpl } from './tools.js'
8
+ import { type ToolsetService, ToolsetServiceImpl } from './toolsets.js'
8
9
 
9
10
  /**
10
11
  * Client for the Proteos Agent Service API.
@@ -33,6 +34,8 @@ export class AgentClient {
33
34
  readonly skills: SkillService
34
35
  /** Service for managing tools. */
35
36
  readonly tools: ToolService
37
+ /** Service for managing toolsets (platform + custom tool groups). */
38
+ readonly toolsets: ToolsetService
36
39
  /** Service for managing MCP server registrations. */
37
40
  readonly mcpServers: McpServerService
38
41
  /** Service for managing chat sessions (conversations + event log + stream). */
@@ -48,6 +51,7 @@ export class AgentClient {
48
51
  this.prompts = new PromptServiceImpl(client)
49
52
  this.skills = new SkillServiceImpl(client)
50
53
  this.tools = new ToolServiceImpl(client)
54
+ this.toolsets = new ToolsetServiceImpl(client)
51
55
  this.mcpServers = new McpServerServiceImpl(client)
52
56
  this.sessions = new SessionServiceImpl(client)
53
57
  }
@@ -96,6 +100,7 @@ export type {
96
100
  export type { SessionService } from './sessions.js'
97
101
  export type { SkillService } from './skills.js'
98
102
  export type { ToolService } from './tools.js'
103
+ export type { ToolsetService } from './toolsets.js'
99
104
  // Re-export types
100
105
  export type {
101
106
  ActionBinding,
@@ -126,9 +131,17 @@ export type {
126
131
  SkillBundle,
127
132
  SkillVersion,
128
133
  StartMcpOAuthResponse,
134
+ PlatformBinding,
135
+ QueryBinding,
129
136
  Tool,
130
137
  ToolBinding,
131
138
  ToolKind,
139
+ Toolset,
140
+ ToolsetKind,
141
+ ToolsetToolSummary,
142
+ CreateToolsetRequest,
143
+ UpdateToolsetRequest,
144
+ ListToolsetsOptions,
132
145
  UpdateAgentRequest,
133
146
  UpdateMcpServerRequest,
134
147
  UpdatePromptRequest,
@@ -224,8 +224,15 @@ export interface StopReason {
224
224
  }
225
225
 
226
226
  /**
227
- * Emitted when a turn ends. `event_ids` carries the tool_use event ids awaiting a
228
- * client response when `stop_reason.type` is `user_action_required`.
227
+ * Ends a turn published once per turn by the server, not an echo of the upstream
228
+ * provider's session status (which flips idle/running once per server-side tool
229
+ * round, mid-turn).
230
+ *
231
+ * `event_ids` is set only with `stop_reason.type: 'user_action_required'`, and lists
232
+ * the tool_use events still OUTSTANDING — the ones a client must answer. Tools the
233
+ * server executes itself are resolved before this event exists, so seeing this event
234
+ * at all means the turn cannot continue without you: answer each id with a
235
+ * `user.tool_result`.
229
236
  */
230
237
  export interface SessionIdlePayload {
231
238
  stop_reason: StopReason
@@ -0,0 +1,80 @@
1
+ import type { ProteosClient } from '../client.js'
2
+ import { PageIterator } from '../iterator.js'
3
+ import type { ListResult } from '../types/common.js'
4
+ import type {
5
+ CreateToolsetRequest,
6
+ ListToolsetsOptions,
7
+ Toolset,
8
+ ToolsetToolSummary,
9
+ UpdateToolsetRequest,
10
+ } from './types.js'
11
+
12
+ const TOOLSETS_BASE_PATH = '/agents/v1/toolsets'
13
+
14
+ /**
15
+ * Service for managing Toolsets — the hardcoded platform toolsets (read-only)
16
+ * merged with the org's custom groups of its own tools. Writes apply to custom
17
+ * toolsets only; a platform key is rejected with `toolset_read_only`.
18
+ */
19
+ export interface ToolsetService {
20
+ /** Lists toolsets (platform + custom merged), auto-paginating. Filterable by `kind`. */
21
+ list(options?: ListToolsetsOptions): PageIterator<Toolset, ListToolsetsOptions>
22
+ /** Fetches a single page of toolsets with pagination metadata. */
23
+ listPage(options?: ListToolsetsOptions): Promise<ListResult<Toolset>>
24
+ /** Gets a single toolset by key (platform or custom). @throws {ProteosError} 404. */
25
+ get(key: string): Promise<Toolset>
26
+ /**
27
+ * Lists the tools inside a toolset — platform members proxied from the
28
+ * platform MCP server, custom members summarized from the org's Tool rows.
29
+ * @throws {ProteosError} 404.
30
+ */
31
+ listTools(key: string): Promise<ToolsetToolSummary[]>
32
+ /** Creates a custom toolset. @throws {ProteosError} 400/409. */
33
+ create(request: CreateToolsetRequest): Promise<Toolset>
34
+ /** Fully replaces a custom toolset's definition. @throws {ProteosError} 404/400. */
35
+ update(key: string, request: UpdateToolsetRequest): Promise<Toolset>
36
+ /** Creates or fully replaces a custom toolset (idempotent deploy entry point). */
37
+ upsert(key: string, request: CreateToolsetRequest): Promise<Toolset>
38
+ /** Deletes a custom toolset. @throws {ProteosError} 404/400. */
39
+ delete(key: string): Promise<void>
40
+ }
41
+
42
+ export class ToolsetServiceImpl implements ToolsetService {
43
+ constructor(private readonly client: ProteosClient) {}
44
+
45
+ list(options: ListToolsetsOptions = {}): PageIterator<Toolset, ListToolsetsOptions> {
46
+ return new PageIterator((opts) => this.listPage(opts), options)
47
+ }
48
+
49
+ async listPage(options: ListToolsetsOptions = {}): Promise<ListResult<Toolset>> {
50
+ return this.client.requestWithQuery<ListResult<Toolset>>('GET', TOOLSETS_BASE_PATH, options)
51
+ }
52
+
53
+ async get(key: string): Promise<Toolset> {
54
+ return this.client.request<Toolset>('GET', `${TOOLSETS_BASE_PATH}/${key}`)
55
+ }
56
+
57
+ async listTools(key: string): Promise<ToolsetToolSummary[]> {
58
+ const response = await this.client.request<{ data: ToolsetToolSummary[] }>(
59
+ 'GET',
60
+ `${TOOLSETS_BASE_PATH}/${key}/tools`,
61
+ )
62
+ return response.data
63
+ }
64
+
65
+ async create(request: CreateToolsetRequest): Promise<Toolset> {
66
+ return this.client.request<Toolset>('POST', TOOLSETS_BASE_PATH, request)
67
+ }
68
+
69
+ async update(key: string, request: UpdateToolsetRequest): Promise<Toolset> {
70
+ return this.client.request<Toolset>('PATCH', `${TOOLSETS_BASE_PATH}/${key}`, request)
71
+ }
72
+
73
+ async upsert(key: string, request: CreateToolsetRequest): Promise<Toolset> {
74
+ return this.client.request<Toolset>('PUT', `${TOOLSETS_BASE_PATH}/${key}`, request)
75
+ }
76
+
77
+ async delete(key: string): Promise<void> {
78
+ await this.client.request<void>('DELETE', `${TOOLSETS_BASE_PATH}/${key}`)
79
+ }
80
+ }
@@ -64,6 +64,8 @@ export interface Agent extends AuditFields {
64
64
  tools: string[]
65
65
  subagents: string[]
66
66
  mcp_servers: string[]
67
+ /** Toolset keys (platform or custom) attached as whole tool groups. */
68
+ toolsets: string[]
67
69
  /** Marks the single agent surfaced by default for the org (at most one). */
68
70
  is_org_default: boolean
69
71
  version: number
@@ -80,6 +82,7 @@ export interface CreateAgentRequest {
80
82
  tools?: string[]
81
83
  subagents?: string[]
82
84
  mcp_servers?: string[]
85
+ toolsets?: string[]
83
86
  is_org_default?: boolean
84
87
  }
85
88
 
@@ -93,6 +96,7 @@ export interface UpdateAgentRequest {
93
96
  tools?: string[]
94
97
  subagents?: string[]
95
98
  mcp_servers?: string[]
99
+ toolsets?: string[]
96
100
  is_org_default?: boolean
97
101
  }
98
102
 
@@ -211,8 +215,12 @@ export type ListSkillsOptions = AgentResourceListOptions
211
215
  * - `action` binds to a function-service Action.
212
216
  * - `mcp` binds to one tool on a registered {@link McpServer}.
213
217
  * - `client` is a host-provided builtin and carries no binding.
218
+ * - `platform` binds to one tool of the platform MCP server (mcp-service),
219
+ * executed server-side as the acting user.
220
+ * - `query` stores a SQL query with declared params, executed server-side
221
+ * against data-service as the acting user.
214
222
  */
215
- export type ToolKind = 'action' | 'mcp' | 'client'
223
+ export type ToolKind = 'action' | 'mcp' | 'client' | 'platform' | 'query'
216
224
 
217
225
  /** Binds to a function-service Action by its key (kind=action). */
218
226
  export interface ActionBinding {
@@ -225,8 +233,28 @@ export interface McpBinding {
225
233
  tool_name: string
226
234
  }
227
235
 
236
+ /**
237
+ * Binds to one tool of the platform MCP server (kind=platform). `toolset` pins
238
+ * the server mount the tool lives in.
239
+ */
240
+ export interface PlatformBinding {
241
+ toolset: string
242
+ tool_name: string
243
+ }
244
+
245
+ /**
246
+ * Stores a SELECT-only SQL query (data-service dialect) whose `{{param}}`
247
+ * placeholders are filled from the declared `params` at execution time
248
+ * (kind=query). Params are scalar attribute definitions (string, number,
249
+ * integer, boolean, datetime, enum); they generate the tool's input schema.
250
+ */
251
+ export interface QueryBinding {
252
+ sql: string
253
+ params?: Attribute[]
254
+ }
255
+
228
256
  /** Kind-discriminated binding payload. `kind=client` carries no binding. */
229
- export type ToolBinding = ActionBinding | McpBinding
257
+ export type ToolBinding = ActionBinding | McpBinding | PlatformBinding | QueryBinding
230
258
 
231
259
  /**
232
260
  * A thin registry entry over one of three binding sources. `key` is the wire
@@ -272,6 +300,65 @@ export interface ListToolsOptions extends AgentResourceListOptions {
272
300
  kind?: ToolKind
273
301
  }
274
302
 
303
+ // ---------------------------------------------------------------------------
304
+ // Toolsets
305
+ // ---------------------------------------------------------------------------
306
+
307
+ /**
308
+ * Toolset origin: `platform` toolsets are the hardcoded groups of the platform
309
+ * MCP server (read-only, one per server mount); `custom` toolsets are
310
+ * org-authored groups of the org's own {@link Tool} rows.
311
+ */
312
+ export type ToolsetKind = 'platform' | 'custom'
313
+
314
+ /**
315
+ * A named group of tools an agent attaches as one unit (`Agent.toolsets`).
316
+ * Platform and custom toolsets share one key namespace (platform keys are
317
+ * reserved). For platform toolsets `tools` is empty — the members live in
318
+ * mcp-service and are listed via `toolsets.listTools`; for custom toolsets it
319
+ * carries the member Tool keys. Keyed by (org_id, key).
320
+ */
321
+ export interface Toolset extends AuditFields {
322
+ org_id: string
323
+ key: string
324
+ name: string
325
+ module_slug: string
326
+ description: string
327
+ kind: ToolsetKind
328
+ tools: string[]
329
+ version: number
330
+ }
331
+
332
+ /** Creates a CUSTOM toolset — platform toolsets are hardcoded and read-only. */
333
+ export interface CreateToolsetRequest {
334
+ key: string
335
+ name: string
336
+ module_slug?: string
337
+ description?: string
338
+ /** Member Tool keys; existence is validated on write. */
339
+ tools?: string[]
340
+ }
341
+
342
+ /** Fully replaces the custom toolset's definition (membership is a set). */
343
+ export interface UpdateToolsetRequest {
344
+ name: string
345
+ module_slug?: string
346
+ description?: string
347
+ tools?: string[]
348
+ }
349
+
350
+ export interface ListToolsetsOptions extends AgentResourceListOptions {
351
+ /** Filter the merged listing by origin. */
352
+ kind?: ToolsetKind
353
+ }
354
+
355
+ /** One tool inside a toolset, for pickers: the wire name + display metadata. */
356
+ export interface ToolsetToolSummary {
357
+ name: string
358
+ title?: string
359
+ description?: string
360
+ }
361
+
275
362
  // ---------------------------------------------------------------------------
276
363
  // MCP Servers
277
364
  // ---------------------------------------------------------------------------
@@ -52,6 +52,7 @@ export const PLATFORM_ENTITIES: readonly PlatformEntity[] = [
52
52
  { slug: 'prompts', name: 'Prompts' },
53
53
  { slug: 'skills', name: 'Skills' },
54
54
  { slug: 'tools', name: 'Tools' },
55
+ { slug: 'toolsets', name: 'Toolsets' },
55
56
  { slug: 'mcp-servers', name: 'MCP Servers' },
56
57
  { slug: 'agent-sessions', name: 'Agent Sessions' },
57
58
  // Messaging bus (event-service)
@@ -19,6 +19,7 @@ import type {
19
19
  CreateConversationTypeRequest,
20
20
  CreateGlossaryTermRequest,
21
21
  CreateTranscriptionRequest,
22
+ DeleteConnectionQuery,
22
23
  DispatchMeetingBotRequest,
23
24
  GlossaryTerm,
24
25
  InstallConnectionResponse,
@@ -164,7 +165,14 @@ export interface ConnectionService {
164
165
  get(id: string): Promise<Connection>
165
166
  create(request: CreateConnectionRequest): Promise<Connection>
166
167
  update(id: string, request: UpdateConnectionRequest): Promise<Connection>
167
- delete(id: string): Promise<void>
168
+ /**
169
+ * Delete a connection. The connector first releases its provider-side
170
+ * registration (a Recall calendar and the OAuth grant behind it); when that
171
+ * fails the delete is refused with a `connector_uninstall_failed` 502 rather
172
+ * than orphaning it. Pass `{ is_forced: true }` to drop the row anyway and
173
+ * clean up at the provider by hand.
174
+ */
175
+ delete(id: string, query?: DeleteConnectionQuery): Promise<void>
168
176
  /** Begin the connector's install flow; open the returned URL in a popup. */
169
177
  install(id: string): Promise<InstallConnectionResponse>
170
178
  /**
@@ -211,10 +219,11 @@ class ConnectionServiceImpl implements ConnectionService {
211
219
  )
212
220
  }
213
221
 
214
- async delete(id: string): Promise<void> {
215
- await this.client.request(
222
+ async delete(id: string, query: DeleteConnectionQuery = {}): Promise<void> {
223
+ await this.client.requestWithQuery(
216
224
  'DELETE',
217
225
  `${CONVERSATION_BASE_PATH}/connections/${encodeURIComponent(id)}`,
226
+ query,
218
227
  )
219
228
  }
220
229
 
@@ -392,6 +401,11 @@ export interface ConversationService {
392
401
  /** Patch the user-editable surface (subject, summary, status, metadata). */
393
402
  update(id: string, request: UpdateConversationRequest): Promise<Conversation>
394
403
  end(id: string): Promise<Conversation>
404
+ /**
405
+ * Hard-delete the conversation, its thread children, and every dependent
406
+ * row (messages, attachments, read markers, transcriptions). Irreversible.
407
+ */
408
+ delete(id: string): Promise<void>
395
409
  /** Upsert the requesting user's read marker to now (open a conversation). */
396
410
  markRead(id: string): Promise<void>
397
411
  /** Remove the marker — the conversation reads as unread again. */
@@ -429,6 +443,13 @@ class ConversationServiceImpl implements ConversationService {
429
443
  )
430
444
  }
431
445
 
446
+ delete(id: string): Promise<void> {
447
+ return this.client.request(
448
+ 'DELETE',
449
+ `${CONVERSATION_BASE_PATH}/conversations/${encodeURIComponent(id)}`,
450
+ )
451
+ }
452
+
432
453
  markRead(id: string): Promise<void> {
433
454
  return this.client.request(
434
455
  'POST',
@@ -415,6 +415,14 @@ export interface AgentListenerAcknowledgementConfig {
415
415
  text?: string
416
416
  }
417
417
 
418
+ /**
419
+ * Where the dispatcher takes its acting user from: 'defined' (the listener's
420
+ * stored acting_user — the default) or 'inferred' (the triggering message
421
+ * sender's resolved platform user, with acting_user as OPTIONAL fallback — no
422
+ * platform user and no fallback means the dispatch is skipped).
423
+ */
424
+ export type AgentListenerActingUserMode = 'defined' | 'inferred'
425
+
418
426
  export interface AgentListener {
419
427
  id: string
420
428
  org_id: string
@@ -444,7 +452,12 @@ export interface AgentListener {
444
452
  */
445
453
  acknowledgement_type: AgentListenerAcknowledgementType
446
454
  acknowledgement_config?: AgentListenerAcknowledgementConfig
447
- /** The user the dispatcher acts as when driving the agent. */
455
+ acting_user_mode: AgentListenerActingUserMode
456
+ /**
457
+ * The user the dispatcher acts as (mode 'defined'), or the optional fallback
458
+ * when the sender has no platform user (mode 'inferred'; an empty ref means
459
+ * no fallback).
460
+ */
448
461
  acting_user: UserRef
449
462
  is_enabled: boolean
450
463
  /**
@@ -561,8 +574,14 @@ export interface CreateAgentListenerRequest {
561
574
  */
562
575
  acknowledgement_type?: AgentListenerAcknowledgementType
563
576
  acknowledgement_config?: AgentListenerAcknowledgementConfig
564
- /** A bare user id; the service wraps it into a person UserRef. */
565
- acting_user_id: string
577
+ /** Omit to default to 'defined'. */
578
+ acting_user_mode?: AgentListenerActingUserMode
579
+ /**
580
+ * A bare user id; the service wraps it into a person UserRef. Required in
581
+ * 'defined' mode (the default); optional in 'inferred' mode, where it is the
582
+ * fallback when the sender has no platform user.
583
+ */
584
+ acting_user_id?: string
566
585
  /** Omit to default to enabled. */
567
586
  is_enabled?: boolean
568
587
  /**
@@ -593,6 +612,9 @@ export interface UpdateAgentListenerRequest {
593
612
  */
594
613
  acknowledgement_type?: AgentListenerAcknowledgementType
595
614
  acknowledgement_config?: AgentListenerAcknowledgementConfig
615
+ /** Switching to 'defined' requires an effective acting user (stored or in this request). */
616
+ acting_user_mode?: AgentListenerActingUserMode
617
+ /** Pass "" to clear the user — only valid when the effective mode is 'inferred'. */
596
618
  acting_user_id?: string
597
619
  is_enabled?: boolean
598
620
  /** Toggle whether the platform auto-forwards the agent's text reply. */
@@ -708,6 +730,17 @@ export interface ListConnectionsQuery extends PaginationQuery {
708
730
  status?: string
709
731
  }
710
732
 
733
+ /**
734
+ * The delete's escape hatch. A connection delete makes the connector release
735
+ * its provider-side registration first and refuses with a 502
736
+ * `connector_uninstall_failed` when that fails — the row is the only handle on
737
+ * that state. `is_forced` drops the row anyway, leaving the provider-side
738
+ * leftovers as a manual cleanup.
739
+ */
740
+ export interface DeleteConnectionQuery {
741
+ is_forced?: boolean
742
+ }
743
+
711
744
  export interface ListConversationsQuery extends PaginationQuery {
712
745
  channel?: string
713
746
  status?: string
@@ -761,18 +794,33 @@ export interface ListAgentListenersQuery extends PaginationQuery {
761
794
  }
762
795
 
763
796
  /**
764
- * Conversation filters: ingest-time rules that drop matching inbound messages
765
- * BEFORE persistence (no message, no contact — only a content-free audit
766
- * event). Scope-first evaluation: connection-scoped rules are final when one
767
- * matches; global rules apply otherwise. Specificity within a scope:
768
- * address > domain > role_based > automated > internal_conversations > all,
769
- * allow beats block within a class.
797
+ * Conversation filters: rules that drop matching inbound messages BEFORE
798
+ * persistence (no message, no contact — only a content-free audit event) and,
799
+ * on meeting calendar connections, gate whether the meeting bot is scheduled
800
+ * at all (pre-join enforcement of the same rules — earliest possible point).
801
+ * Scope-first evaluation: connection-scoped rules are final when one matches;
802
+ * global rules apply otherwise. Specificity within a scope:
803
+ * address > domain > title_keyword > role_based > automated >
804
+ * self_originated > internal_participant > internal_conversations > all,
805
+ * allow beats block within a class; an allow match is a final keep, which is
806
+ * the auto-join composition mechanism (e.g. "organized by me" = a
807
+ * connection-scoped all-block plus a self_originated allow).
808
+ *
809
+ * Channel matrix: address/self_originated/all act on every channel;
810
+ * domain/title_keyword/internal_participant/internal_conversations act on
811
+ * email + meeting connections; role_based/automated are email-only. A
812
+ * connection-scoped rule of a type inert on that connection's channel is
813
+ * rejected (invalid_filter_config); global rules are unrestricted and stay
814
+ * inert where their facts are missing.
770
815
  */
771
816
  export type ConversationFilterType =
772
817
  | 'address'
773
818
  | 'domain'
819
+ | 'title_keyword'
774
820
  | 'role_based'
775
821
  | 'automated'
822
+ | 'self_originated'
823
+ | 'internal_participant'
776
824
  | 'internal_conversations'
777
825
  | 'all'
778
826
  export type ConversationFilterAction = 'block' | 'allow'
@@ -805,6 +853,16 @@ export interface RoleBasedFilterConfig {
805
853
  export interface AutomatedFilterConfig {
806
854
  signals?: AutomatedSignal[]
807
855
  }
856
+ /** Title/subject contains any keyword (case-insensitive substring; stored lowercased). */
857
+ export interface TitleKeywordFilterConfig {
858
+ keywords: string[]
859
+ }
860
+ /** Conversation originates from the connection owner (meeting organizer / self sender). Empty config. */
861
+ export type SelfOriginatedFilterConfig = Record<string, never>
862
+ /** ≥1 participant OTHER than the connection self is on one of these domains (any-internal). */
863
+ export interface InternalParticipantFilterConfig {
864
+ domains: string[]
865
+ }
808
866
  /** Drops only when sender AND every recipient are on these domains. Always block. */
809
867
  export interface InternalConversationsFilterConfig {
810
868
  domains: string[]
@@ -815,8 +873,11 @@ export type AllFilterConfig = Record<string, never>
815
873
  export type ConversationFilterConfig =
816
874
  | AddressFilterConfig
817
875
  | DomainFilterConfig
876
+ | TitleKeywordFilterConfig
818
877
  | RoleBasedFilterConfig
819
878
  | AutomatedFilterConfig
879
+ | SelfOriginatedFilterConfig
880
+ | InternalParticipantFilterConfig
820
881
  | InternalConversationsFilterConfig
821
882
  | AllFilterConfig
822
883
 
package/src/index.ts CHANGED
@@ -52,6 +52,7 @@ export type {
52
52
  CreatePromptRequest,
53
53
  CreateSessionRequest,
54
54
  CreateToolRequest,
55
+ CreateToolsetRequest,
55
56
  DependentAgent,
56
57
  DependentSyncResult,
57
58
  EmptyPayload,
@@ -64,6 +65,7 @@ export type {
64
65
  ListSessionsOptions,
65
66
  ListSkillsOptions,
66
67
  ListToolsOptions,
68
+ ListToolsetsOptions,
67
69
  McpBinding,
68
70
  McpConnectionState,
69
71
  McpConnectionStatus,
@@ -97,11 +99,17 @@ export type {
97
99
  StartMcpOAuthResponse,
98
100
  StopReason,
99
101
  TextBlock,
102
+ PlatformBinding,
103
+ QueryBinding,
100
104
  Tool,
101
105
  ToolBinding,
102
106
  ToolConfirmationPayload,
103
107
  ToolKind,
104
108
  ToolResultPayload,
109
+ Toolset,
110
+ ToolsetKind,
111
+ ToolsetService,
112
+ ToolsetToolSummary,
105
113
  ToolService,
106
114
  ToolUsePayload,
107
115
  Turn,
@@ -109,6 +117,7 @@ export type {
109
117
  UpdateMcpServerRequest,
110
118
  UpdatePromptRequest,
111
119
  UpdateToolRequest,
120
+ UpdateToolsetRequest,
112
121
  UserMessagePayload,
113
122
  } from './agent/index.js'
114
123
  export { AgentClient } from './agent/index.js'
@@ -187,6 +196,7 @@ export type {
187
196
  AgentListener,
188
197
  AgentListenerAcknowledgementConfig,
189
198
  AgentListenerAcknowledgementType,
199
+ AgentListenerActingUserMode,
190
200
  AgentListenerService,
191
201
  AgentListenerTriggerType,
192
202
  AllFilterConfig,