twelveai 0.4.0 → 0.6.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.
@@ -19,7 +19,9 @@ function buildManage(request) {
19
19
  plugins: {
20
20
  list: () => request("GET", "/v1/plugins"),
21
21
  install: (id) => request("POST", `/v1/plugins/${encodeURIComponent(id)}/install`),
22
- uninstall: (id) => request("POST", `/v1/plugins/${encodeURIComponent(id)}/uninstall`)
22
+ uninstall: (id) => request("POST", `/v1/plugins/${encodeURIComponent(id)}/uninstall`),
23
+ /** Follow a pack's releases for an agent you already run. Changes nothing today. */
24
+ track: (id) => request("POST", `/v1/plugins/${encodeURIComponent(id)}/track`)
23
25
  },
24
26
  customers: {
25
27
  list: (opts = {}) => request("GET", `/v1/customers?limit=${opts.limit ?? 100}${opts.range ? `&range=${opts.range}` : ""}`),
package/dist/cli.cjs CHANGED
@@ -47,7 +47,9 @@ function buildManage(request) {
47
47
  plugins: {
48
48
  list: () => request("GET", "/v1/plugins"),
49
49
  install: (id) => request("POST", `/v1/plugins/${encodeURIComponent(id)}/install`),
50
- uninstall: (id) => request("POST", `/v1/plugins/${encodeURIComponent(id)}/uninstall`)
50
+ uninstall: (id) => request("POST", `/v1/plugins/${encodeURIComponent(id)}/uninstall`),
51
+ /** Follow a pack's releases for an agent you already run. Changes nothing today. */
52
+ track: (id) => request("POST", `/v1/plugins/${encodeURIComponent(id)}/track`)
51
53
  },
52
54
  customers: {
53
55
  list: (opts = {}) => request("GET", `/v1/customers?limit=${opts.limit ?? 100}${opts.range ? `&range=${opts.range}` : ""}`),
package/dist/cli.d.cts CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { T as TwelveAI } from './client-C5vzks2N.cjs';
2
+ import { T as TwelveAI } from './client-DEsf0_MF.cjs';
3
3
 
4
4
  interface CliDeps {
5
5
  env: Record<string, string | undefined>;
package/dist/cli.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { T as TwelveAI } from './client-C5vzks2N.js';
2
+ import { T as TwelveAI } from './client-DEsf0_MF.js';
3
3
 
4
4
  interface CliDeps {
5
5
  env: Record<string, string | undefined>;
package/dist/cli.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  TwelveAI
4
- } from "./chunk-6RZKLIGP.js";
4
+ } from "./chunk-7VVR7AFE.js";
5
5
 
6
6
  // src/cli.ts
7
7
  import { readFileSync } from "fs";
@@ -36,7 +36,15 @@ interface ChatInput {
36
36
  /** Sandbox: tools return sample data; nothing real is called or moved. */
37
37
  sandbox?: boolean;
38
38
  channel?: string;
39
- /** Force a specific agent instead of routing. */
39
+ /**
40
+ * Pin the turn to one agent, skipping the router entirely - no keyword pass,
41
+ * no AI pass, no mid-conversation switch. Use it when YOU already know the
42
+ * intent (a deep link, a menu choice, an IVR branch, a batch job), not on a
43
+ * general chat box: the pinned agent answers whatever the customer says next,
44
+ * with its own tools. Every pinned response carries `warning` saying so.
45
+ */
46
+ agent?: string;
47
+ /** Alias of `agent`, kept for existing integrations. */
40
48
  intent?: string;
41
49
  /** Customer tier to sync for this turn's caps. */
42
50
  tier?: string;
@@ -79,6 +87,14 @@ interface ChatResponse {
79
87
  /** The assistant's reply to show the user. */
80
88
  message: string | null;
81
89
  intent: string | null;
90
+ /** Routing confidence for the intent, same scale as classify. Null on resumes and guide fallback. */
91
+ confidence?: number | null;
92
+ /**
93
+ * Non-fatal advice about how this turn was handled: set when you pinned an
94
+ * agent (the router was skipped), or when the pin named an agent that could
95
+ * not run. Never an error - the reply in `message` still stands.
96
+ */
97
+ warning?: string | null;
82
98
  toolCalls: ToolCall[];
83
99
  /** A write awaiting the user's confirmation (resend with confirmed: true). */
84
100
  pendingConfirmation: {
@@ -163,6 +179,146 @@ interface ManageResult {
163
179
  error?: string;
164
180
  [key: string]: unknown;
165
181
  }
182
+ /** A placeholder you may put in a tool's URL; the engine fills it per turn. */
183
+ interface ToolVariable {
184
+ /** Use it as `{name}` in the URL, path or query. */
185
+ name: string;
186
+ type: string;
187
+ description: string | null;
188
+ required: boolean;
189
+ }
190
+ /** One tool as GET /v1/tools returns it. */
191
+ interface ToolListItem {
192
+ name: string;
193
+ description: string;
194
+ sideEffect: 'read' | 'write';
195
+ permission: string | null;
196
+ kind: 'managed' | 'client' | 'http';
197
+ execution: 'hosted' | 'client';
198
+ binding: {
199
+ method: string;
200
+ url: string;
201
+ resultPath: string | null;
202
+ } | null;
203
+ hasAuth: boolean;
204
+ auth: {
205
+ type: string;
206
+ header: string | null;
207
+ } | null;
208
+ sampleResponse: unknown;
209
+ tenantSample?: boolean;
210
+ example: {
211
+ method: string;
212
+ url: string;
213
+ } | null;
214
+ /** Placeholders this tool understands - the click-to-insert list in the console. */
215
+ variables: ToolVariable[];
216
+ agents: string[];
217
+ editable: boolean;
218
+ }
219
+ interface ToolsResult extends ManageResult {
220
+ tools: ToolListItem[];
221
+ }
222
+ /** A published version of an agent pack, newest first. */
223
+ interface PluginRelease {
224
+ version: string;
225
+ date: string;
226
+ breaking?: boolean;
227
+ changes: string[];
228
+ }
229
+ /** Domain vocabulary a pack's tools use, so you can map it to your own API. */
230
+ interface PluginConcept {
231
+ term: string;
232
+ meaning: string;
233
+ }
234
+ interface PluginToolSpec {
235
+ name: string;
236
+ description: string | null;
237
+ sideEffect: 'read' | 'write' | null;
238
+ variables: ToolVariable[];
239
+ }
240
+ interface PluginListItem {
241
+ id: string;
242
+ name: string;
243
+ description: string;
244
+ category: string;
245
+ version: string;
246
+ intent: string;
247
+ tools: string[];
248
+ visibility: 'public' | 'private';
249
+ installed: boolean;
250
+ configured?: boolean;
251
+ managedByPlugin?: boolean;
252
+ installedVersion: string | null;
253
+ updateAvailable: boolean;
254
+ /** True when you run this agent outside the marketplace and could follow its releases. */
255
+ canTrack?: boolean;
256
+ details: {
257
+ about: string;
258
+ examples: string[];
259
+ dataSource: string;
260
+ concepts?: PluginConcept[];
261
+ } | null;
262
+ /** Per-tool placeholders, visible before you install. */
263
+ toolSpecs?: PluginToolSpec[];
264
+ /** Releases between the version you run and the current one. */
265
+ releases?: PluginRelease[];
266
+ }
267
+ interface PluginsResult extends ManageResult {
268
+ plugins: PluginListItem[];
269
+ }
270
+ /** One tool in GET /v1/manifest - the contract you code against. */
271
+ interface ManifestTool {
272
+ name: string;
273
+ description: string;
274
+ parameters: Record<string, unknown>;
275
+ sideEffect: 'read' | 'write';
276
+ permission: string | null;
277
+ managed: boolean;
278
+ execution: 'hosted' | 'client';
279
+ /** True when the ENGINE invokes this tool itself; it never appears as a model decision. */
280
+ automatic?: boolean;
281
+ binding: {
282
+ method: string;
283
+ url: string;
284
+ } | null;
285
+ }
286
+ interface ManifestResult extends ManageResult {
287
+ agents: Array<{
288
+ intent: string;
289
+ label: string;
290
+ requiresCustomer: boolean;
291
+ permissions: string[] | null;
292
+ tools: ManifestTool[];
293
+ }>;
294
+ }
295
+ /**
296
+ * Per-tool endpoint auth. A discriminated union on purpose: TypeScript rejects
297
+ * a bearer without a token, or an api_key missing its header/value, at compile
298
+ * time rather than at the first live call.
299
+ */
300
+ type ToolAuth = {
301
+ type: 'none';
302
+ } | {
303
+ type: 'bearer';
304
+ token: string;
305
+ } | {
306
+ type: 'api_key';
307
+ header: string;
308
+ value: string;
309
+ } | {
310
+ type: 'signed';
311
+ } | {
312
+ type: 'jwks';
313
+ } | {
314
+ type: 'customer_token';
315
+ } | {
316
+ type: 'oauth2';
317
+ tokenUrl: string;
318
+ clientId: string;
319
+ clientSecret: string;
320
+ scope?: string;
321
+ };
166
322
  interface CreateAgentInput {
167
323
  intent: string;
168
324
  label?: string;
@@ -171,6 +327,13 @@ interface CreateAgentInput {
171
327
  systemPrompt?: string;
172
328
  tools?: string[];
173
329
  requiresCustomer?: boolean;
330
+ /**
331
+ * 'internal' makes this your own team's agent: used from the console's agent
332
+ * page, invisible to the API key your customers talk to. Default 'customer'.
333
+ */
334
+ audience?: 'customer' | 'internal';
335
+ /** An internal agent's remit, in plain words. Put in front of every turn and enforced by refusal. */
336
+ scope?: string;
174
337
  }
175
338
  interface CreateToolInput {
176
339
  name: string;
@@ -189,7 +352,7 @@ interface BindToolInput {
189
352
  resultPath?: string | null;
190
353
  sampleResponse?: unknown;
191
354
  execution?: 'hosted' | 'client';
192
- auth?: Record<string, unknown>;
355
+ auth?: ToolAuth;
193
356
  }
194
357
  type Request = (method: string, path: string, body?: Record<string, unknown>) => Promise<ManageResult>;
195
358
  /** Build the management namespaces over one authenticated request function. */
@@ -203,7 +366,7 @@ declare function buildManage(request: Request): {
203
366
  delete: (intent: string) => Promise<ManageResult>;
204
367
  };
205
368
  tools: {
206
- list: () => Promise<ManageResult>;
369
+ list: () => Promise<ToolsResult>;
207
370
  create: (input: CreateToolInput) => Promise<ManageResult>;
208
371
  bind: (name: string, binding: BindToolInput) => Promise<ManageResult>;
209
372
  test: (name: string) => Promise<ManageResult>;
@@ -212,13 +375,15 @@ declare function buildManage(request: Request): {
212
375
  spec?: unknown;
213
376
  execution?: "hosted" | "client";
214
377
  dryRun?: boolean;
215
- auth?: Record<string, unknown>;
378
+ auth?: ToolAuth;
216
379
  }) => Promise<ManageResult>;
217
380
  };
218
381
  plugins: {
219
- list: () => Promise<ManageResult>;
220
- install: (id: string) => Promise<ManageResult>;
221
- uninstall: (id: string) => Promise<ManageResult>;
382
+ list: () => Promise<PluginsResult>;
383
+ install: (id: string) => Promise<PluginsResult>;
384
+ uninstall: (id: string) => Promise<PluginsResult>;
385
+ /** Follow a pack's releases for an agent you already run. Changes nothing today. */
386
+ track: (id: string) => Promise<PluginsResult>;
222
387
  };
223
388
  customers: {
224
389
  list: (opts?: {
@@ -248,7 +413,7 @@ declare function buildManage(request: Request): {
248
413
  event: (id: number | string) => Promise<ManageResult>;
249
414
  analytics: (days?: number) => Promise<ManageResult>;
250
415
  };
251
- manifest: () => Promise<ManageResult>;
416
+ manifest: () => Promise<ManifestResult>;
252
417
  };
253
418
  type Manage = ReturnType<typeof buildManage>;
254
419
 
@@ -322,4 +487,4 @@ declare class TwelveAI {
322
487
  private performHandoff;
323
488
  }
324
489
 
325
- export { type Attachment as A, type BindToolInput as B, type ChatInput as C, type HandoffExecutor as H, type Manage as M, type PendingToolCall as P, TwelveAI as T, type ChatResponse as a, type ClassifyResponse as b, type CreateAgentInput as c, type CreateToolInput as d, type HandoffRequest as e, type ManageResult as f, type ToolCall as g, type ToolResult as h, type TwelveAIOptions as i, buildManage as j };
490
+ export { type Attachment as A, type BindToolInput as B, type ChatInput as C, type HandoffExecutor as H, type Manage as M, type PendingToolCall as P, TwelveAI as T, type ChatResponse as a, type ClassifyResponse as b, type CreateAgentInput as c, type CreateToolInput as d, type HandoffRequest as e, type ManageResult as f, type ManifestResult as g, type ManifestTool as h, type PluginConcept as i, type PluginListItem as j, type PluginRelease as k, type PluginToolSpec as l, type PluginsResult as m, type ToolAuth as n, type ToolCall as o, type ToolListItem as p, type ToolResult as q, type ToolVariable as r, type ToolsResult as s, type TwelveAIOptions as t, buildManage as u };
@@ -36,7 +36,15 @@ interface ChatInput {
36
36
  /** Sandbox: tools return sample data; nothing real is called or moved. */
37
37
  sandbox?: boolean;
38
38
  channel?: string;
39
- /** Force a specific agent instead of routing. */
39
+ /**
40
+ * Pin the turn to one agent, skipping the router entirely - no keyword pass,
41
+ * no AI pass, no mid-conversation switch. Use it when YOU already know the
42
+ * intent (a deep link, a menu choice, an IVR branch, a batch job), not on a
43
+ * general chat box: the pinned agent answers whatever the customer says next,
44
+ * with its own tools. Every pinned response carries `warning` saying so.
45
+ */
46
+ agent?: string;
47
+ /** Alias of `agent`, kept for existing integrations. */
40
48
  intent?: string;
41
49
  /** Customer tier to sync for this turn's caps. */
42
50
  tier?: string;
@@ -79,6 +87,14 @@ interface ChatResponse {
79
87
  /** The assistant's reply to show the user. */
80
88
  message: string | null;
81
89
  intent: string | null;
90
+ /** Routing confidence for the intent, same scale as classify. Null on resumes and guide fallback. */
91
+ confidence?: number | null;
92
+ /**
93
+ * Non-fatal advice about how this turn was handled: set when you pinned an
94
+ * agent (the router was skipped), or when the pin named an agent that could
95
+ * not run. Never an error - the reply in `message` still stands.
96
+ */
97
+ warning?: string | null;
82
98
  toolCalls: ToolCall[];
83
99
  /** A write awaiting the user's confirmation (resend with confirmed: true). */
84
100
  pendingConfirmation: {
@@ -163,6 +179,146 @@ interface ManageResult {
163
179
  error?: string;
164
180
  [key: string]: unknown;
165
181
  }
182
+ /** A placeholder you may put in a tool's URL; the engine fills it per turn. */
183
+ interface ToolVariable {
184
+ /** Use it as `{name}` in the URL, path or query. */
185
+ name: string;
186
+ type: string;
187
+ description: string | null;
188
+ required: boolean;
189
+ }
190
+ /** One tool as GET /v1/tools returns it. */
191
+ interface ToolListItem {
192
+ name: string;
193
+ description: string;
194
+ sideEffect: 'read' | 'write';
195
+ permission: string | null;
196
+ kind: 'managed' | 'client' | 'http';
197
+ execution: 'hosted' | 'client';
198
+ binding: {
199
+ method: string;
200
+ url: string;
201
+ resultPath: string | null;
202
+ } | null;
203
+ hasAuth: boolean;
204
+ auth: {
205
+ type: string;
206
+ header: string | null;
207
+ } | null;
208
+ sampleResponse: unknown;
209
+ tenantSample?: boolean;
210
+ example: {
211
+ method: string;
212
+ url: string;
213
+ } | null;
214
+ /** Placeholders this tool understands - the click-to-insert list in the console. */
215
+ variables: ToolVariable[];
216
+ agents: string[];
217
+ editable: boolean;
218
+ }
219
+ interface ToolsResult extends ManageResult {
220
+ tools: ToolListItem[];
221
+ }
222
+ /** A published version of an agent pack, newest first. */
223
+ interface PluginRelease {
224
+ version: string;
225
+ date: string;
226
+ breaking?: boolean;
227
+ changes: string[];
228
+ }
229
+ /** Domain vocabulary a pack's tools use, so you can map it to your own API. */
230
+ interface PluginConcept {
231
+ term: string;
232
+ meaning: string;
233
+ }
234
+ interface PluginToolSpec {
235
+ name: string;
236
+ description: string | null;
237
+ sideEffect: 'read' | 'write' | null;
238
+ variables: ToolVariable[];
239
+ }
240
+ interface PluginListItem {
241
+ id: string;
242
+ name: string;
243
+ description: string;
244
+ category: string;
245
+ version: string;
246
+ intent: string;
247
+ tools: string[];
248
+ visibility: 'public' | 'private';
249
+ installed: boolean;
250
+ configured?: boolean;
251
+ managedByPlugin?: boolean;
252
+ installedVersion: string | null;
253
+ updateAvailable: boolean;
254
+ /** True when you run this agent outside the marketplace and could follow its releases. */
255
+ canTrack?: boolean;
256
+ details: {
257
+ about: string;
258
+ examples: string[];
259
+ dataSource: string;
260
+ concepts?: PluginConcept[];
261
+ } | null;
262
+ /** Per-tool placeholders, visible before you install. */
263
+ toolSpecs?: PluginToolSpec[];
264
+ /** Releases between the version you run and the current one. */
265
+ releases?: PluginRelease[];
266
+ }
267
+ interface PluginsResult extends ManageResult {
268
+ plugins: PluginListItem[];
269
+ }
270
+ /** One tool in GET /v1/manifest - the contract you code against. */
271
+ interface ManifestTool {
272
+ name: string;
273
+ description: string;
274
+ parameters: Record<string, unknown>;
275
+ sideEffect: 'read' | 'write';
276
+ permission: string | null;
277
+ managed: boolean;
278
+ execution: 'hosted' | 'client';
279
+ /** True when the ENGINE invokes this tool itself; it never appears as a model decision. */
280
+ automatic?: boolean;
281
+ binding: {
282
+ method: string;
283
+ url: string;
284
+ } | null;
285
+ }
286
+ interface ManifestResult extends ManageResult {
287
+ agents: Array<{
288
+ intent: string;
289
+ label: string;
290
+ requiresCustomer: boolean;
291
+ permissions: string[] | null;
292
+ tools: ManifestTool[];
293
+ }>;
294
+ }
295
+ /**
296
+ * Per-tool endpoint auth. A discriminated union on purpose: TypeScript rejects
297
+ * a bearer without a token, or an api_key missing its header/value, at compile
298
+ * time rather than at the first live call.
299
+ */
300
+ type ToolAuth = {
301
+ type: 'none';
302
+ } | {
303
+ type: 'bearer';
304
+ token: string;
305
+ } | {
306
+ type: 'api_key';
307
+ header: string;
308
+ value: string;
309
+ } | {
310
+ type: 'signed';
311
+ } | {
312
+ type: 'jwks';
313
+ } | {
314
+ type: 'customer_token';
315
+ } | {
316
+ type: 'oauth2';
317
+ tokenUrl: string;
318
+ clientId: string;
319
+ clientSecret: string;
320
+ scope?: string;
321
+ };
166
322
  interface CreateAgentInput {
167
323
  intent: string;
168
324
  label?: string;
@@ -171,6 +327,13 @@ interface CreateAgentInput {
171
327
  systemPrompt?: string;
172
328
  tools?: string[];
173
329
  requiresCustomer?: boolean;
330
+ /**
331
+ * 'internal' makes this your own team's agent: used from the console's agent
332
+ * page, invisible to the API key your customers talk to. Default 'customer'.
333
+ */
334
+ audience?: 'customer' | 'internal';
335
+ /** An internal agent's remit, in plain words. Put in front of every turn and enforced by refusal. */
336
+ scope?: string;
174
337
  }
175
338
  interface CreateToolInput {
176
339
  name: string;
@@ -189,7 +352,7 @@ interface BindToolInput {
189
352
  resultPath?: string | null;
190
353
  sampleResponse?: unknown;
191
354
  execution?: 'hosted' | 'client';
192
- auth?: Record<string, unknown>;
355
+ auth?: ToolAuth;
193
356
  }
194
357
  type Request = (method: string, path: string, body?: Record<string, unknown>) => Promise<ManageResult>;
195
358
  /** Build the management namespaces over one authenticated request function. */
@@ -203,7 +366,7 @@ declare function buildManage(request: Request): {
203
366
  delete: (intent: string) => Promise<ManageResult>;
204
367
  };
205
368
  tools: {
206
- list: () => Promise<ManageResult>;
369
+ list: () => Promise<ToolsResult>;
207
370
  create: (input: CreateToolInput) => Promise<ManageResult>;
208
371
  bind: (name: string, binding: BindToolInput) => Promise<ManageResult>;
209
372
  test: (name: string) => Promise<ManageResult>;
@@ -212,13 +375,15 @@ declare function buildManage(request: Request): {
212
375
  spec?: unknown;
213
376
  execution?: "hosted" | "client";
214
377
  dryRun?: boolean;
215
- auth?: Record<string, unknown>;
378
+ auth?: ToolAuth;
216
379
  }) => Promise<ManageResult>;
217
380
  };
218
381
  plugins: {
219
- list: () => Promise<ManageResult>;
220
- install: (id: string) => Promise<ManageResult>;
221
- uninstall: (id: string) => Promise<ManageResult>;
382
+ list: () => Promise<PluginsResult>;
383
+ install: (id: string) => Promise<PluginsResult>;
384
+ uninstall: (id: string) => Promise<PluginsResult>;
385
+ /** Follow a pack's releases for an agent you already run. Changes nothing today. */
386
+ track: (id: string) => Promise<PluginsResult>;
222
387
  };
223
388
  customers: {
224
389
  list: (opts?: {
@@ -248,7 +413,7 @@ declare function buildManage(request: Request): {
248
413
  event: (id: number | string) => Promise<ManageResult>;
249
414
  analytics: (days?: number) => Promise<ManageResult>;
250
415
  };
251
- manifest: () => Promise<ManageResult>;
416
+ manifest: () => Promise<ManifestResult>;
252
417
  };
253
418
  type Manage = ReturnType<typeof buildManage>;
254
419
 
@@ -322,4 +487,4 @@ declare class TwelveAI {
322
487
  private performHandoff;
323
488
  }
324
489
 
325
- export { type Attachment as A, type BindToolInput as B, type ChatInput as C, type HandoffExecutor as H, type Manage as M, type PendingToolCall as P, TwelveAI as T, type ChatResponse as a, type ClassifyResponse as b, type CreateAgentInput as c, type CreateToolInput as d, type HandoffRequest as e, type ManageResult as f, type ToolCall as g, type ToolResult as h, type TwelveAIOptions as i, buildManage as j };
490
+ export { type Attachment as A, type BindToolInput as B, type ChatInput as C, type HandoffExecutor as H, type Manage as M, type PendingToolCall as P, TwelveAI as T, type ChatResponse as a, type ClassifyResponse as b, type CreateAgentInput as c, type CreateToolInput as d, type HandoffRequest as e, type ManageResult as f, type ManifestResult as g, type ManifestTool as h, type PluginConcept as i, type PluginListItem as j, type PluginRelease as k, type PluginToolSpec as l, type PluginsResult as m, type ToolAuth as n, type ToolCall as o, type ToolListItem as p, type ToolResult as q, type ToolVariable as r, type ToolsResult as s, type TwelveAIOptions as t, buildManage as u };
package/dist/index.cjs CHANGED
@@ -49,7 +49,9 @@ function buildManage(request) {
49
49
  plugins: {
50
50
  list: () => request("GET", "/v1/plugins"),
51
51
  install: (id) => request("POST", `/v1/plugins/${encodeURIComponent(id)}/install`),
52
- uninstall: (id) => request("POST", `/v1/plugins/${encodeURIComponent(id)}/uninstall`)
52
+ uninstall: (id) => request("POST", `/v1/plugins/${encodeURIComponent(id)}/uninstall`),
53
+ /** Follow a pack's releases for an agent you already run. Changes nothing today. */
54
+ track: (id) => request("POST", `/v1/plugins/${encodeURIComponent(id)}/track`)
53
55
  },
54
56
  customers: {
55
57
  list: (opts = {}) => request("GET", `/v1/customers?limit=${opts.limit ?? 100}${opts.range ? `&range=${opts.range}` : ""}`),
package/dist/index.d.cts CHANGED
@@ -1,4 +1,4 @@
1
- export { A as Attachment, B as BindToolInput, C as ChatInput, a as ChatResponse, b as ClassifyResponse, c as CreateAgentInput, d as CreateToolInput, H as HandoffExecutor, e as HandoffRequest, M as Manage, f as ManageResult, P as PendingToolCall, g as ToolCall, h as ToolResult, T as TwelveAI, i as TwelveAIOptions, j as buildManage } from './client-C5vzks2N.cjs';
1
+ export { A as Attachment, B as BindToolInput, C as ChatInput, a as ChatResponse, b as ClassifyResponse, c as CreateAgentInput, d as CreateToolInput, H as HandoffExecutor, e as HandoffRequest, M as Manage, f as ManageResult, g as ManifestResult, h as ManifestTool, P as PendingToolCall, i as PluginConcept, j as PluginListItem, k as PluginRelease, l as PluginToolSpec, m as PluginsResult, n as ToolAuth, o as ToolCall, p as ToolListItem, q as ToolResult, r as ToolVariable, s as ToolsResult, T as TwelveAI, t as TwelveAIOptions, u as buildManage } from './client-DEsf0_MF.cjs';
2
2
 
3
3
  /** Verify a TwelveAI webhook delivery: the x-webhook-secret header must match your secret. */
4
4
  declare function verifyWebhook(secret: string, headers: Record<string, string | string[] | undefined>): boolean;
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export { A as Attachment, B as BindToolInput, C as ChatInput, a as ChatResponse, b as ClassifyResponse, c as CreateAgentInput, d as CreateToolInput, H as HandoffExecutor, e as HandoffRequest, M as Manage, f as ManageResult, P as PendingToolCall, g as ToolCall, h as ToolResult, T as TwelveAI, i as TwelveAIOptions, j as buildManage } from './client-C5vzks2N.js';
1
+ export { A as Attachment, B as BindToolInput, C as ChatInput, a as ChatResponse, b as ClassifyResponse, c as CreateAgentInput, d as CreateToolInput, H as HandoffExecutor, e as HandoffRequest, M as Manage, f as ManageResult, g as ManifestResult, h as ManifestTool, P as PendingToolCall, i as PluginConcept, j as PluginListItem, k as PluginRelease, l as PluginToolSpec, m as PluginsResult, n as ToolAuth, o as ToolCall, p as ToolListItem, q as ToolResult, r as ToolVariable, s as ToolsResult, T as TwelveAI, t as TwelveAIOptions, u as buildManage } from './client-DEsf0_MF.js';
2
2
 
3
3
  /** Verify a TwelveAI webhook delivery: the x-webhook-secret header must match your secret. */
4
4
  declare function verifyWebhook(secret: string, headers: Record<string, string | string[] | undefined>): boolean;
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  TwelveAI,
3
3
  buildManage
4
- } from "./chunk-6RZKLIGP.js";
4
+ } from "./chunk-7VVR7AFE.js";
5
5
 
6
6
  // src/verify.ts
7
7
  import { createHash, createHmac, createPublicKey, createVerify, timingSafeEqual } from "crypto";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "twelveai",
3
- "version": "0.4.0",
3
+ "version": "0.6.0",
4
4
  "description": "Official SDK for TwelveAI - AI infrastructure for conversational banking. One call runs the whole chat protocol: routing, grounded tool calls, client-fetch hand-offs, confirmations, and request verification.",
5
5
  "license": "MIT",
6
6
  "author": "TwelveAI",