@cubos/agent-sdk 0.0.1148891 → 0.0.1150186

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.
@@ -192,6 +192,16 @@ export declare function agentsApi(t: Transport, tenantSlug: string): {
192
192
  addTaskTemplate: (agentSlug: string, templateSlug: string) => Promise<void>;
193
193
  removeTaskTemplate: (agentSlug: string, templateSlug: string) => Promise<void>;
194
194
  replaceTaskTemplateRoles: (agentSlug: string, templateSlug: string, roleSlugs: string[]) => Promise<void>;
195
+ listKnowledgeBases: (agentSlug: string, signal?: AbortSignal) => Promise<{
196
+ created_at: string;
197
+ display_name: string;
198
+ id: string;
199
+ pending_count: number;
200
+ slug: string;
201
+ updated_at: string;
202
+ }[]>;
203
+ attachKnowledgeBase: (agentSlug: string, kbSlug: string) => Promise<void>;
204
+ detachKnowledgeBase: (agentSlug: string, kbSlug: string) => Promise<void>;
195
205
  listAutoCallTools: (agentSlug: string, signal?: AbortSignal) => Promise<{
196
206
  available: import("../generated/schema.js").components["schemas"]["AutoCallableTool"][];
197
207
  enabled_mcp_count: number;
@@ -135,3 +135,42 @@ export declare function sharedProvidersApi(t: Transport): {
135
135
  }[]>;
136
136
  updateModel: (slug: string, modelId: string, input: Schemas["UpdateProviderModelInput"]) => Promise<void>;
137
137
  };
138
+ /**
139
+ * The plugins this *instance* found on disk, and the switch that turns one on
140
+ * or off across every replica.
141
+ *
142
+ * Root-only, and global rather than per tenant: a plugin belongs to the
143
+ * deployment the way the container image does, so there is no `plugins:*` grant
144
+ * to scope it with. The list is an answer about one instance — during a partial
145
+ * deploy two replicas can legitimately report different sets.
146
+ */
147
+ export declare function pluginsApi(t: Transport): {
148
+ list: (signal?: AbortSignal) => Promise<{
149
+ capabilities: import("../generated/schema.js").components["schemas"]["Capability"][];
150
+ description: string;
151
+ display_name: string;
152
+ enabled: boolean;
153
+ error: string | null;
154
+ restarts: number;
155
+ sandbox: string;
156
+ sandbox_detail: string | null;
157
+ sandbox_needs?: string[];
158
+ slug: string;
159
+ state: string;
160
+ }[]>;
161
+ /** Takes effect on every replica: the decision is a row, and a notification
162
+ * wakes each instance to start or stop its own copy. */
163
+ setEnabled: (slug: string, enabled: boolean) => Promise<{
164
+ capabilities: import("../generated/schema.js").components["schemas"]["Capability"][];
165
+ description: string;
166
+ display_name: string;
167
+ enabled: boolean;
168
+ error: string | null;
169
+ restarts: number;
170
+ sandbox: string;
171
+ sandbox_detail: string | null;
172
+ sandbox_needs?: string[];
173
+ slug: string;
174
+ state: string;
175
+ }>;
176
+ };
@@ -7,7 +7,7 @@ import { channelsApi } from "./channels.js";
7
7
  import { clientToolsApi } from "./client-tools.js";
8
8
  import { componentLibrariesApi } from "./component-libraries.js";
9
9
  import { conversationsAdminApi } from "./conversations.js";
10
- import { apiKeysApi, sharedProvidersApi, tenantsApi } from "./global.js";
10
+ import { apiKeysApi, pluginsApi, sharedProvidersApi, tenantsApi } from "./global.js";
11
11
  import { knowledgeBasesApi } from "./knowledge-bases.js";
12
12
  import { mcpsApi } from "./mcps.js";
13
13
  import { skillsApi } from "./skills.js";
@@ -52,6 +52,7 @@ export interface AdminClient {
52
52
  tenants: ReturnType<typeof tenantsApi>;
53
53
  apiKeys: ReturnType<typeof apiKeysApi>;
54
54
  sharedProviders: ReturnType<typeof sharedProvidersApi>;
55
+ plugins: ReturnType<typeof pluginsApi>;
55
56
  tenant(slug: string): TenantScope;
56
57
  /** Escape hatch for a route the SDK hasn't wrapped yet. Paths are absolute
57
58
  * (`/api/v1/…`) and auth is applied for you. */
@@ -878,6 +878,120 @@ export interface paths {
878
878
  patch?: never;
879
879
  trace?: never;
880
880
  };
881
+ "/api/v1/plugins": {
882
+ parameters: {
883
+ query?: never;
884
+ header?: never;
885
+ path?: never;
886
+ cookie?: never;
887
+ };
888
+ /**
889
+ * List the plugins this instance loaded
890
+ * @description Every plugin found on disk by the instance serving this request, with what it is doing right now. Root only — a plugin belongs to the deployment, not to a tenant, so there is no grant for it.
891
+ */
892
+ get: {
893
+ parameters: {
894
+ query?: never;
895
+ header?: never;
896
+ path?: never;
897
+ cookie?: never;
898
+ };
899
+ requestBody?: never;
900
+ responses: {
901
+ 200: {
902
+ headers: {
903
+ [name: string]: unknown;
904
+ };
905
+ content: {
906
+ "application/json": components["schemas"]["Plugin"][];
907
+ };
908
+ };
909
+ 401: {
910
+ headers: {
911
+ [name: string]: unknown;
912
+ };
913
+ content?: never;
914
+ };
915
+ /** @description Only the `root` caller can list plugins. */
916
+ 403: {
917
+ headers: {
918
+ [name: string]: unknown;
919
+ };
920
+ content?: never;
921
+ };
922
+ };
923
+ };
924
+ put?: never;
925
+ post?: never;
926
+ delete?: never;
927
+ options?: never;
928
+ head?: never;
929
+ patch?: never;
930
+ trace?: never;
931
+ };
932
+ "/api/v1/plugins/{slug}": {
933
+ parameters: {
934
+ query?: never;
935
+ header?: never;
936
+ path?: never;
937
+ cookie?: never;
938
+ };
939
+ get?: never;
940
+ put?: never;
941
+ post?: never;
942
+ delete?: never;
943
+ options?: never;
944
+ head?: never;
945
+ /**
946
+ * Enable or disable a plugin
947
+ * @description Takes effect on every replica: the row is updated and a notification wakes each instance to start or stop its own copy. Disabling one retracts the file types it reads, so `read_file` reports them as having no reader until it is enabled again. Root only. Returns 404 for a slug this instance did not find on disk.
948
+ */
949
+ patch: {
950
+ parameters: {
951
+ query?: never;
952
+ header?: never;
953
+ path: {
954
+ /** @description Plugin slug. */
955
+ slug: string;
956
+ };
957
+ cookie?: never;
958
+ };
959
+ requestBody: {
960
+ content: {
961
+ "application/json": components["schemas"]["UpdatePluginInput"];
962
+ };
963
+ };
964
+ responses: {
965
+ 200: {
966
+ headers: {
967
+ [name: string]: unknown;
968
+ };
969
+ content: {
970
+ "application/json": components["schemas"]["Plugin"];
971
+ };
972
+ };
973
+ 401: {
974
+ headers: {
975
+ [name: string]: unknown;
976
+ };
977
+ content?: never;
978
+ };
979
+ 403: {
980
+ headers: {
981
+ [name: string]: unknown;
982
+ };
983
+ content?: never;
984
+ };
985
+ 404: {
986
+ headers: {
987
+ [name: string]: unknown;
988
+ };
989
+ content?: never;
990
+ };
991
+ };
992
+ };
993
+ trace?: never;
994
+ };
881
995
  "/api/v1/tenants": {
882
996
  parameters: {
883
997
  query?: never;
@@ -1354,6 +1468,173 @@ export interface paths {
1354
1468
  patch?: never;
1355
1469
  trace?: never;
1356
1470
  };
1471
+ "/api/v1/tenants/{tenantSlug}/agents/{agentSlug}/knowledge-bases": {
1472
+ parameters: {
1473
+ query?: never;
1474
+ header?: never;
1475
+ path?: never;
1476
+ cookie?: never;
1477
+ };
1478
+ /**
1479
+ * List an agent's knowledge bases
1480
+ * @description Lists the knowledge bases attached to the agent. These reach every conversation the agent runs, read-only: conversation material is never filed into a base reached only through its agent.
1481
+ */
1482
+ get: {
1483
+ parameters: {
1484
+ query?: never;
1485
+ header?: never;
1486
+ path: {
1487
+ /** @description Agent slug. */
1488
+ agentSlug: string;
1489
+ /** @description Tenant slug. */
1490
+ tenantSlug: string;
1491
+ };
1492
+ cookie?: never;
1493
+ };
1494
+ requestBody?: never;
1495
+ responses: {
1496
+ 200: {
1497
+ headers: {
1498
+ [name: string]: unknown;
1499
+ };
1500
+ content: {
1501
+ "application/json": components["schemas"]["KnowledgeBaseListItem"][];
1502
+ };
1503
+ };
1504
+ 401: {
1505
+ headers: {
1506
+ [name: string]: unknown;
1507
+ };
1508
+ content?: never;
1509
+ };
1510
+ 403: {
1511
+ headers: {
1512
+ [name: string]: unknown;
1513
+ };
1514
+ content?: never;
1515
+ };
1516
+ 404: {
1517
+ headers: {
1518
+ [name: string]: unknown;
1519
+ };
1520
+ content?: never;
1521
+ };
1522
+ };
1523
+ };
1524
+ put?: never;
1525
+ post?: never;
1526
+ delete?: never;
1527
+ options?: never;
1528
+ head?: never;
1529
+ patch?: never;
1530
+ trace?: never;
1531
+ };
1532
+ "/api/v1/tenants/{tenantSlug}/agents/{agentSlug}/knowledge-bases/{kbSlug}": {
1533
+ parameters: {
1534
+ query?: never;
1535
+ header?: never;
1536
+ path?: never;
1537
+ cookie?: never;
1538
+ };
1539
+ get?: never;
1540
+ /**
1541
+ * Attach a knowledge base to an agent
1542
+ * @description Attaches a knowledge base to the agent so every conversation it runs searches it. Read-only from those conversations: `memory_write` files into a base only when it is also attached to the conversation or its user. Idempotent; takes effect on each conversation's next turn.
1543
+ */
1544
+ put: {
1545
+ parameters: {
1546
+ query?: never;
1547
+ header?: never;
1548
+ path: {
1549
+ /** @description Agent slug. */
1550
+ agentSlug: string;
1551
+ /** @description Knowledge base slug. */
1552
+ kbSlug: string;
1553
+ /** @description Tenant slug. */
1554
+ tenantSlug: string;
1555
+ };
1556
+ cookie?: never;
1557
+ };
1558
+ requestBody?: never;
1559
+ responses: {
1560
+ 204: {
1561
+ headers: {
1562
+ [name: string]: unknown;
1563
+ };
1564
+ content?: never;
1565
+ };
1566
+ 401: {
1567
+ headers: {
1568
+ [name: string]: unknown;
1569
+ };
1570
+ content?: never;
1571
+ };
1572
+ 403: {
1573
+ headers: {
1574
+ [name: string]: unknown;
1575
+ };
1576
+ content?: never;
1577
+ };
1578
+ 404: {
1579
+ headers: {
1580
+ [name: string]: unknown;
1581
+ };
1582
+ content?: never;
1583
+ };
1584
+ };
1585
+ };
1586
+ post?: never;
1587
+ /**
1588
+ * Detach a knowledge base from an agent
1589
+ * @description Stops the agent's conversations from searching the knowledge base through the agent. Links to a conversation or a user are untouched.
1590
+ */
1591
+ delete: {
1592
+ parameters: {
1593
+ query?: never;
1594
+ header?: never;
1595
+ path: {
1596
+ /** @description Agent slug. */
1597
+ agentSlug: string;
1598
+ /** @description Knowledge base slug. */
1599
+ kbSlug: string;
1600
+ /** @description Tenant slug. */
1601
+ tenantSlug: string;
1602
+ };
1603
+ cookie?: never;
1604
+ };
1605
+ requestBody?: never;
1606
+ responses: {
1607
+ 204: {
1608
+ headers: {
1609
+ [name: string]: unknown;
1610
+ };
1611
+ content?: never;
1612
+ };
1613
+ 401: {
1614
+ headers: {
1615
+ [name: string]: unknown;
1616
+ };
1617
+ content?: never;
1618
+ };
1619
+ 403: {
1620
+ headers: {
1621
+ [name: string]: unknown;
1622
+ };
1623
+ content?: never;
1624
+ };
1625
+ 404: {
1626
+ headers: {
1627
+ [name: string]: unknown;
1628
+ };
1629
+ content?: never;
1630
+ };
1631
+ };
1632
+ };
1633
+ options?: never;
1634
+ head?: never;
1635
+ patch?: never;
1636
+ trace?: never;
1637
+ };
1357
1638
  "/api/v1/tenants/{tenantSlug}/agents/{agentSlug}/mcps": {
1358
1639
  parameters: {
1359
1640
  query?: never;
@@ -5632,7 +5913,7 @@ export interface paths {
5632
5913
  };
5633
5914
  /**
5634
5915
  * List a conversation's knowledge bases
5635
- * @description Lists the knowledge bases this conversation searches — those attached to the conversation directly plus those attached to its user. Deduplicated.
5916
+ * @description Lists the knowledge bases this conversation searches — those attached to the conversation directly plus those attached to its user or to its agent. Deduplicated.
5636
5917
  */
5637
5918
  get: {
5638
5919
  parameters: {
@@ -6280,7 +6561,7 @@ export interface paths {
6280
6561
  put?: never;
6281
6562
  /**
6282
6563
  * Send a user message with images
6283
- * @description Appends one `user_message` carrying up to 10 image attachments. `multipart/form-data` with repeated `file` parts (png/jpeg/webp/gif), optional repeated `label` text parts (the i-th label names the i-th file — the model sees it next to that image and can refer to images by name), and an optional `caption` text part shared by the set. The harness shows the images to the model natively when the agent's chat model has vision, or describes them with the agent's fallback vision model. Same channel rule as the plain user-message route: channel-backed conversations return 409.
6564
+ * @description Appends one `user_message` carrying up to 10 image attachments. `multipart/form-data` with repeated `file` parts (any `image/*` type), optional repeated `label` text parts (the i-th label names the i-th file — the model sees it next to that image and can refer to images by name), and an optional `caption` text part shared by the set. The harness shows the images to the model natively when the agent's chat model has vision, or describes them with the agent's fallback vision model — in both cases after the image plugin has normalized them (oriented, downscaled, re-encoded as PNG or JPEG); a type no plugin reads reaches the model as a placeholder. Same channel rule as the plain user-message route: channel-backed conversations return 409.
6284
6565
  */
6285
6566
  post: {
6286
6567
  parameters: {
@@ -11549,6 +11830,26 @@ export interface components {
11549
11830
  */
11550
11831
  tools: number;
11551
11832
  };
11833
+ /**
11834
+ * @description One kind of thing a plugin provides.
11835
+ *
11836
+ * Tagged by `kind` so that a plugin bringing providers or channels is a new
11837
+ * variant here, not new top-level fields on every plugin that has none.
11838
+ */
11839
+ Capability: {
11840
+ /**
11841
+ * @description Claims another plugin already held, so this one does not serve them.
11842
+ *
11843
+ * Reported because a dropped claim is otherwise silent: the plugin is
11844
+ * `ready` and healthy, and simply never receives the file it was
11845
+ * installed for. Resolve it by disabling one of the two.
11846
+ */
11847
+ conflicts?: components["schemas"]["Conflict"][];
11848
+ /** @enum {string} */
11849
+ kind: "file_formats";
11850
+ /** @description MIME types it is answering for — what it *won*. */
11851
+ mimes: string[];
11852
+ };
11552
11853
  Channel: (components["schemas"]["TelegramChannel"] & {
11553
11854
  /** @enum {string} */
11554
11855
  type: "telegram";
@@ -11686,6 +11987,18 @@ export interface components {
11686
11987
  /** Format: date-time */
11687
11988
  updated_at: string;
11688
11989
  };
11990
+ /** @description A claim this plugin lost to another. */
11991
+ Conflict: {
11992
+ /**
11993
+ * @description The slug that holds it. First in alphabetical order wins, so the outcome
11994
+ * is the same on every replica.
11995
+ */
11996
+ held_by: string;
11997
+ /** @description `mime`, `mime_prefix` or `extension`. */
11998
+ kind: string;
11999
+ /** @description The MIME type, prefix or extension that was claimed twice. */
12000
+ value: string;
12001
+ };
11689
12002
  Conversation: {
11690
12003
  agent: null | components["schemas"]["AgentRef"];
11691
12004
  /**
@@ -13072,6 +13385,57 @@ export interface components {
13072
13385
  /** Format: date-time */
13073
13386
  recorded_at: string;
13074
13387
  };
13388
+ Plugin: {
13389
+ /**
13390
+ * @description What it is providing right now, one entry per kind. Empty unless
13391
+ * `ready`.
13392
+ */
13393
+ capabilities: components["schemas"]["Capability"][];
13394
+ /**
13395
+ * @description What the plugin says it does, in its own words — it ships from its own
13396
+ * repository, so the core has nothing of its own to say here. Empty until
13397
+ * its first handshake.
13398
+ */
13399
+ description: string;
13400
+ /**
13401
+ * @description Reported by the plugin at its handshake; empty until it has completed
13402
+ * one. Kept while it is disabled or failed, so the list never loses the
13403
+ * name of the thing an operator turned off.
13404
+ */
13405
+ display_name: string;
13406
+ /**
13407
+ * @description Whether it is *meant* to run. `false` means someone turned it off; it
13408
+ * says nothing about whether it is currently healthy — that is `state`.
13409
+ */
13410
+ enabled: boolean;
13411
+ /** @description Why it is not running, when `failed`. */
13412
+ error: string | null;
13413
+ /**
13414
+ * Format: int32
13415
+ * @description How many times it has been restarted in a row without staying up.
13416
+ */
13417
+ restarts: number;
13418
+ /**
13419
+ * @description How contained this plugin's process is: `full`, `partial`, `none`, or
13420
+ * `unknown` before its first spawn.
13421
+ *
13422
+ * Reported because it is a property of the *deployment*, not of the
13423
+ * plugin: the same binary is fully sandboxed on one kernel and partly on
13424
+ * another, and an operator reading the card is the only one who can act on
13425
+ * that. See `plugins/sandbox.rs`.
13426
+ */
13427
+ sandbox: string;
13428
+ /** @description Why it is not `full`, when it is not. */
13429
+ sandbox_detail: string | null;
13430
+ /**
13431
+ * @description What the plugin's manifest asked for beyond the default sandbox, in
13432
+ * words. Empty when it asked for nothing, which is the common case.
13433
+ */
13434
+ sandbox_needs?: string[];
13435
+ slug: string;
13436
+ /** @description `disabled` | `starting` | `ready` | `failed`. */
13437
+ state: string;
13438
+ };
13075
13439
  /**
13076
13440
  * @description Reduced provider reference embedded into other resources' responses (e.g. the provider that
13077
13441
  * served a conversation event's LLM call) in place of a bare `provider_id`.
@@ -13779,6 +14143,9 @@ export interface components {
13779
14143
  */
13780
14144
  revision: number;
13781
14145
  };
14146
+ UpdatePluginInput: {
14147
+ enabled: boolean;
14148
+ };
13782
14149
  UpdateProviderModelInput: {
13783
14150
  /**
13784
14151
  * Format: int32