@opengeni/sdk 3.3.2 → 3.4.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.
Files changed (299) hide show
  1. package/README.md +1007 -72
  2. package/dist/adapters/express.d.ts +31 -0
  3. package/dist/adapters/express.js +87 -0
  4. package/dist/adapters/express.js.map +1 -0
  5. package/dist/adapters/hono.d.ts +16 -0
  6. package/dist/adapters/hono.js +8 -0
  7. package/dist/adapters/hono.js.map +1 -0
  8. package/dist/adapters/next.d.ts +29 -0
  9. package/dist/adapters/next.js +22 -0
  10. package/dist/adapters/next.js.map +1 -0
  11. package/dist/allowance-refusal.d.ts +2 -0
  12. package/dist/allowance-refusal.js +50 -0
  13. package/dist/allowance-refusal.js.map +1 -0
  14. package/dist/app-links.d.ts +42 -0
  15. package/dist/app-links.js +66 -0
  16. package/dist/app-links.js.map +1 -0
  17. package/dist/artifact-catalog.d.ts +40 -0
  18. package/dist/artifact-client.d.ts +20 -8
  19. package/dist/artifacts.d.ts +1 -1
  20. package/dist/artifacts.js +8 -6
  21. package/dist/automations.js +8 -2
  22. package/dist/automations.js.map +1 -1
  23. package/dist/azure-live-transport.d.ts +32 -0
  24. package/dist/browser.d.ts +7 -2
  25. package/dist/browser.js +27 -5
  26. package/dist/chat/fold.d.ts +75 -0
  27. package/dist/chat/handler.d.ts +41 -0
  28. package/dist/chat/http.d.ts +67 -0
  29. package/dist/chat/ids.d.ts +34 -0
  30. package/dist/chat/index.d.ts +9 -0
  31. package/dist/chat/index.js +1369 -0
  32. package/dist/chat/index.js.map +1 -0
  33. package/dist/chat/openai.d.ts +30 -0
  34. package/dist/chat/opengeni.d.ts +129 -0
  35. package/dist/chat/types.d.ts +207 -0
  36. package/dist/chat/vercel.d.ts +49 -0
  37. package/dist/chats.d.ts +8 -0
  38. package/dist/chunk-4AHR4KGA.js +301 -0
  39. package/dist/chunk-4AHR4KGA.js.map +1 -0
  40. package/dist/chunk-6GYGMLX4.js +332 -0
  41. package/dist/chunk-6GYGMLX4.js.map +1 -0
  42. package/dist/chunk-7EWT3PV6.js +368 -0
  43. package/dist/chunk-7EWT3PV6.js.map +1 -0
  44. package/dist/chunk-FTWVVPR6.js +1665 -0
  45. package/dist/chunk-FTWVVPR6.js.map +1 -0
  46. package/dist/{chunk-VYCTL62C.js → chunk-GZQSWAKD.js} +1 -1
  47. package/dist/chunk-GZQSWAKD.js.map +1 -0
  48. package/dist/chunk-KGEABAID.js +71 -0
  49. package/dist/chunk-KGEABAID.js.map +1 -0
  50. package/dist/{chunk-YKZME56C.js → chunk-KWADQ227.js} +3 -3
  51. package/dist/{chunk-YKZME56C.js.map → chunk-KWADQ227.js.map} +1 -1
  52. package/dist/{chunk-JUS2UYRP.js → chunk-NCU5OAN7.js} +27 -2
  53. package/dist/chunk-NCU5OAN7.js.map +1 -0
  54. package/dist/{chunk-YXQX7RQT.js → chunk-OI5YLASH.js} +73 -2
  55. package/dist/chunk-OI5YLASH.js.map +1 -0
  56. package/dist/chunk-OV3POE62.js +359 -0
  57. package/dist/chunk-OV3POE62.js.map +1 -0
  58. package/dist/chunk-P7UWKORG.js +561 -0
  59. package/dist/chunk-P7UWKORG.js.map +1 -0
  60. package/dist/chunk-QGEIL4TR.js +195 -0
  61. package/dist/chunk-QGEIL4TR.js.map +1 -0
  62. package/dist/{chunk-TRNI7KEO.js → chunk-S2NLS3ES.js} +3669 -1281
  63. package/dist/chunk-S2NLS3ES.js.map +1 -0
  64. package/dist/chunk-UM4ZXXJR.js +9 -0
  65. package/dist/chunk-UM4ZXXJR.js.map +1 -0
  66. package/dist/{chunk-QT3KFVDP.js → chunk-UME3X7CP.js} +28 -32
  67. package/dist/chunk-UME3X7CP.js.map +1 -0
  68. package/dist/chunk-VT4YM4XQ.js +210 -0
  69. package/dist/chunk-VT4YM4XQ.js.map +1 -0
  70. package/dist/chunk-WSYYXONG.js +1602 -0
  71. package/dist/chunk-WSYYXONG.js.map +1 -0
  72. package/dist/{chunk-C2H7HBNP.js → chunk-WVCJRSGJ.js} +119 -14
  73. package/dist/chunk-WVCJRSGJ.js.map +1 -0
  74. package/dist/chunk-X5ITQVXE.js +15 -0
  75. package/dist/chunk-X5ITQVXE.js.map +1 -0
  76. package/dist/chunk-XA7HVIHI.js +126 -0
  77. package/dist/chunk-XA7HVIHI.js.map +1 -0
  78. package/dist/{chunk-KKRO2VCP.js → chunk-YJCHB7R3.js} +60 -12
  79. package/dist/chunk-YJCHB7R3.js.map +1 -0
  80. package/dist/chunk-YKIHNLWD.js +153 -0
  81. package/dist/chunk-YKIHNLWD.js.map +1 -0
  82. package/dist/chunk-ZDUBPV33.js +277 -0
  83. package/dist/chunk-ZDUBPV33.js.map +1 -0
  84. package/dist/client.d.ts +1068 -118
  85. package/dist/codex-realtime-controller.d.ts +13 -0
  86. package/dist/codex-realtime-controller.js +4 -2
  87. package/dist/codex-realtime-v3-wire.d.ts +3 -2
  88. package/dist/codex-realtime.d.ts +5 -1
  89. package/dist/company-brain.d.ts +1 -11
  90. package/dist/core.d.ts +7 -2
  91. package/dist/core.js +25 -6
  92. package/dist/deprecation.d.ts +47 -0
  93. package/dist/document-authority-client.d.ts +24 -2
  94. package/dist/document-authority.js +7 -5
  95. package/dist/editable-artifacts/index.d.ts +1 -1
  96. package/dist/editable-artifacts/types.d.ts +12 -2
  97. package/dist/editable-artifacts.js +19 -3
  98. package/dist/editable-artifacts.js.map +1 -1
  99. package/dist/embedding-client.d.ts +129 -0
  100. package/dist/errors.d.ts +76 -1
  101. package/dist/external-vault-receiver.d.ts +203 -0
  102. package/dist/external-vault-receiver.js +564 -0
  103. package/dist/external-vault-receiver.js.map +1 -0
  104. package/dist/feedback.d.ts +23 -0
  105. package/dist/gateway-realtime-transport.js +1 -1
  106. package/dist/github-repositories.d.ts +10 -0
  107. package/dist/github-repositories.js +36 -0
  108. package/dist/github-repositories.js.map +1 -0
  109. package/dist/index.d.ts +62 -11
  110. package/dist/index.js +557 -338
  111. package/dist/index.js.map +1 -1
  112. package/dist/insights-usage.d.ts +33 -0
  113. package/dist/insights-usage.js +7 -0
  114. package/dist/insights-usage.js.map +1 -0
  115. package/dist/interaction.d.ts +165 -71
  116. package/dist/interaction.js +2 -2
  117. package/dist/knowledge.d.ts +7 -0
  118. package/dist/knowledge.js +20 -0
  119. package/dist/knowledge.js.map +1 -0
  120. package/dist/known-tools.d.ts +4 -0
  121. package/dist/message-links.d.ts +68 -0
  122. package/dist/model-context.d.ts +68 -0
  123. package/dist/model-display.d.ts +2 -0
  124. package/dist/model-display.js +17 -0
  125. package/dist/model-display.js.map +1 -0
  126. package/dist/model-picker-order.d.ts +1 -0
  127. package/dist/model-picker-order.js +10 -0
  128. package/dist/model-picker-order.js.map +1 -0
  129. package/dist/organization-integration-policy.d.ts +26 -0
  130. package/dist/organization-integration-policy.js +26 -0
  131. package/dist/organization-integration-policy.js.map +1 -0
  132. package/dist/pr-review-client.d.ts +1 -1
  133. package/dist/pr-review.d.ts +1 -1
  134. package/dist/pr-review.js.map +1 -1
  135. package/dist/preference-registry.d.ts +1 -1
  136. package/dist/prepared-mcp-setup.d.ts +5 -0
  137. package/dist/proxy.d.ts +13 -11
  138. package/dist/realtime.d.ts +1 -1
  139. package/dist/realtime.js +253 -7
  140. package/dist/realtime.js.map +1 -1
  141. package/dist/session-history-import.d.ts +22 -0
  142. package/dist/session-history-import.js +36 -0
  143. package/dist/session-history-import.js.map +1 -0
  144. package/dist/session-list-entries.d.ts +1 -0
  145. package/dist/session-list-entries.js +7 -0
  146. package/dist/session-list-entries.js.map +1 -0
  147. package/dist/session-message-search.d.ts +53 -0
  148. package/dist/session-proxy-client.d.ts +28 -0
  149. package/dist/session-proxy.d.ts +334 -0
  150. package/dist/session-proxy.js +24 -0
  151. package/dist/session-proxy.js.map +1 -0
  152. package/dist/session-titles.d.ts +2 -28
  153. package/dist/session-usage-limits.d.ts +10 -0
  154. package/dist/session-usage-limits.js +43 -0
  155. package/dist/session-usage-limits.js.map +1 -0
  156. package/dist/shared-catalog-loader.d.ts +34 -0
  157. package/dist/site-ai.d.ts +35 -0
  158. package/dist/site-bridge-host.d.ts +112 -0
  159. package/dist/site-bridge-host.js +286 -0
  160. package/dist/site-bridge-host.js.map +1 -0
  161. package/dist/site-browser-entry.d.ts +1 -0
  162. package/dist/site-browser-runtime.gen.d.ts +1 -0
  163. package/dist/site-data.d.ts +178 -0
  164. package/dist/site-document.d.ts +5 -0
  165. package/dist/site-document.js +20 -0
  166. package/dist/site-document.js.map +1 -0
  167. package/dist/site-document.test.d.ts +1 -0
  168. package/dist/site-http.d.ts +17 -0
  169. package/dist/site-sql.d.ts +31 -0
  170. package/dist/site-tool-bridge.d.ts +57 -0
  171. package/dist/site.d.ts +186 -0
  172. package/dist/site.js +63 -0
  173. package/dist/site.js.map +1 -0
  174. package/dist/skills.d.ts +75 -0
  175. package/dist/sse.d.ts +1 -1
  176. package/dist/stream.d.ts +2 -0
  177. package/dist/tenant-workspaces.d.ts +47 -0
  178. package/dist/tenant-workspaces.js +8 -0
  179. package/dist/tenant-workspaces.js.map +1 -0
  180. package/dist/tool-auth.d.ts +87 -0
  181. package/dist/tool-auth.js +23 -0
  182. package/dist/tool-auth.js.map +1 -0
  183. package/dist/tool-display-metadata.d.ts +3 -0
  184. package/dist/tools-37DCTCNZ.js +12 -0
  185. package/dist/tools-37DCTCNZ.js.map +1 -0
  186. package/dist/tools.d.ts +81 -0
  187. package/dist/transcription.d.ts +1 -1
  188. package/dist/types.d.ts +2807 -583
  189. package/dist/usage-allowances.d.ts +36 -0
  190. package/dist/usage-allowances.js +80 -0
  191. package/dist/usage-allowances.js.map +1 -0
  192. package/dist/vault-types.d.ts +324 -0
  193. package/dist/vaults-api.d.ts +65 -0
  194. package/dist/workspace-artifacts.d.ts +47 -5
  195. package/dist/workspace-instruction-policies.d.ts +2 -2
  196. package/dist/workspace-integrations.d.ts +74 -0
  197. package/dist/workspace-integrations.js +67 -0
  198. package/dist/workspace-integrations.js.map +1 -0
  199. package/dist/workspace-state.d.ts +8 -71
  200. package/package.json +103 -5
  201. package/src/adapters/express.ts +136 -0
  202. package/src/adapters/hono.ts +18 -0
  203. package/src/adapters/next.ts +42 -0
  204. package/src/allowance-refusal.ts +5 -0
  205. package/src/app-links.ts +117 -0
  206. package/src/artifact-catalog.ts +51 -0
  207. package/src/artifact-client.ts +40 -49
  208. package/src/artifacts.ts +1 -0
  209. package/src/automations-client.ts +8 -2
  210. package/src/azure-live-transport.ts +286 -0
  211. package/src/browser.ts +37 -0
  212. package/src/chat/fold.ts +431 -0
  213. package/src/chat/handler.ts +240 -0
  214. package/src/chat/http.ts +257 -0
  215. package/src/chat/ids.ts +85 -0
  216. package/src/chat/index.ts +88 -0
  217. package/src/chat/openai.ts +439 -0
  218. package/src/chat/opengeni.ts +737 -0
  219. package/src/chat/types.ts +219 -0
  220. package/src/chat/vercel.ts +204 -0
  221. package/src/chats.ts +16 -0
  222. package/src/client.ts +5697 -1833
  223. package/src/codex-realtime-controller.ts +163 -8
  224. package/src/codex-realtime-v3-wire.ts +4 -3
  225. package/src/codex-realtime-v3.ts +12 -3
  226. package/src/codex-realtime.ts +11 -3
  227. package/src/company-brain.ts +0 -40
  228. package/src/core.ts +20 -0
  229. package/src/deprecation.ts +149 -0
  230. package/src/document-authority-client.ts +104 -1
  231. package/src/editable-artifacts/controller.ts +36 -2
  232. package/src/editable-artifacts/index.ts +1 -0
  233. package/src/editable-artifacts/types.ts +29 -16
  234. package/src/embedding-client.ts +519 -0
  235. package/src/errors.ts +303 -4
  236. package/src/external-vault-receiver.ts +914 -0
  237. package/src/feedback.ts +20 -0
  238. package/src/gateway-realtime-transport.ts +3 -3
  239. package/src/github-repositories.ts +60 -0
  240. package/src/index.ts +603 -65
  241. package/src/insights-usage.ts +64 -0
  242. package/src/interaction.ts +315 -93
  243. package/src/knowledge.ts +72 -0
  244. package/src/known-tools.ts +279 -0
  245. package/src/message-links.ts +178 -0
  246. package/src/model-context.ts +113 -0
  247. package/src/model-display.ts +11 -0
  248. package/src/model-picker-order.ts +6 -0
  249. package/src/organization-integration-policy.ts +54 -0
  250. package/src/pr-review-client.ts +1 -1
  251. package/src/pr-review.ts +1 -1
  252. package/src/preference-registry.ts +2 -0
  253. package/src/prepared-mcp-setup.ts +123 -0
  254. package/src/proxy.ts +23 -12
  255. package/src/realtime.ts +15 -6
  256. package/src/session-history-import.ts +84 -0
  257. package/src/session-list-entries.ts +1 -0
  258. package/src/session-message-search.ts +47 -0
  259. package/src/session-proxy-client.ts +68 -0
  260. package/src/session-proxy.ts +2098 -0
  261. package/src/session-titles.ts +8 -82
  262. package/src/session-usage-limits.ts +71 -0
  263. package/src/shared-catalog-loader.ts +169 -0
  264. package/src/site-ai.ts +284 -0
  265. package/src/site-bridge-host.ts +422 -0
  266. package/src/site-browser-entry.ts +6 -0
  267. package/src/site-browser-runtime.gen.ts +2 -0
  268. package/src/site-data.ts +372 -0
  269. package/src/site-document.test.ts +64 -0
  270. package/src/site-document.ts +18 -0
  271. package/src/site-http.ts +171 -0
  272. package/src/site-sql.ts +153 -0
  273. package/src/site-tool-bridge.ts +401 -0
  274. package/src/site.ts +878 -0
  275. package/src/skills.ts +69 -0
  276. package/src/sse.ts +9 -3
  277. package/src/stream.ts +33 -10
  278. package/src/tenant-workspaces.ts +148 -0
  279. package/src/tool-auth.ts +301 -0
  280. package/src/tool-display-metadata.ts +27 -0
  281. package/src/tools.ts +452 -0
  282. package/src/transcription.ts +3 -0
  283. package/src/types.ts +3170 -582
  284. package/src/usage-allowances.ts +189 -0
  285. package/src/vault-types.ts +379 -0
  286. package/src/vaults-api.ts +339 -0
  287. package/src/workspace-artifacts.ts +55 -6
  288. package/src/workspace-instruction-policies.ts +2 -1
  289. package/src/workspace-integrations.ts +402 -0
  290. package/src/workspace-state.ts +8 -82
  291. package/dist/chunk-C2H7HBNP.js.map +0 -1
  292. package/dist/chunk-C4DJPZRU.js +0 -119
  293. package/dist/chunk-C4DJPZRU.js.map +0 -1
  294. package/dist/chunk-JUS2UYRP.js.map +0 -1
  295. package/dist/chunk-KKRO2VCP.js.map +0 -1
  296. package/dist/chunk-QT3KFVDP.js.map +0 -1
  297. package/dist/chunk-TRNI7KEO.js.map +0 -1
  298. package/dist/chunk-VYCTL62C.js.map +0 -1
  299. package/dist/chunk-YXQX7RQT.js.map +0 -1
@@ -0,0 +1,339 @@
1
+ import type { OpenGeniClient } from "./client";
2
+ import type { VaultPolicy } from "./types";
3
+ import type {
4
+ CreateManagedProviderVaultRequest,
5
+ CreateVaultItemRequest,
6
+ CreateVaultRequest,
7
+ DisconnectOnePasswordResponse,
8
+ InstallOnePasswordRequest,
9
+ InstallOnePasswordResponse,
10
+ LinkProviderVaultRequest,
11
+ ListVaultItemsQuery,
12
+ MoveVaultItemRequest,
13
+ OnePasswordConnectionSummary,
14
+ ProviderVaultMeta,
15
+ ReplaceOnePasswordTokenRequest,
16
+ RevealVaultFieldResponse,
17
+ SessionSecretsView,
18
+ UpdateVaultItemRequest,
19
+ UpdateVaultRequest,
20
+ VaultErrorCode,
21
+ VaultFieldVersionMeta,
22
+ VaultItem,
23
+ VaultItemSummary,
24
+ VaultSummary,
25
+ InstallVaultProviderRequest,
26
+ InstallVaultProviderResponse,
27
+ ReplaceVaultProviderCredentialsRequest,
28
+ VaultProviderConnectionSummary,
29
+ ListVaultProviderConnectionsResponse,
30
+ DisconnectVaultProviderResponse,
31
+ } from "./vault-types";
32
+
33
+ /**
34
+ * Vault REST routes over the client's JSON transport. Responses carry metadata
35
+ * only; plaintext comes back only from `revealField`, and callers keep it in
36
+ * memory for as long as they need it, never in a cache.
37
+ */
38
+ export type VaultClientLike = Pick<OpenGeniClient, "requestJson">;
39
+
40
+ /**
41
+ * The client's JSON transport. A client without one still renders (a disabled
42
+ * hook never calls it); each request then fails with a clear error.
43
+ */
44
+ export function asVaultClient(client: unknown): VaultClientLike {
45
+ if (
46
+ client &&
47
+ typeof client === "object" &&
48
+ "requestJson" in client &&
49
+ typeof (client as { requestJson: unknown }).requestJson === "function"
50
+ ) {
51
+ return client as VaultClientLike;
52
+ }
53
+ return {
54
+ requestJson: (() =>
55
+ Promise.reject(
56
+ new Error("Vaults need a client with requestJson."),
57
+ )) as VaultClientLike["requestJson"],
58
+ };
59
+ }
60
+
61
+ const enc = encodeURIComponent;
62
+
63
+ function itemsQuery(query: ListVaultItemsQuery): Record<string, string> {
64
+ const out: Record<string, string> = {};
65
+ if (query.q) out.q = query.q;
66
+ if (query.type) out.type = query.type;
67
+ if (query.includeArchived) out.includeArchived = "true";
68
+ if (query.cursor) out.cursor = query.cursor;
69
+ if (query.limit) out.limit = String(query.limit);
70
+ return out;
71
+ }
72
+
73
+ export function vaultsApi(client: VaultClientLike, workspaceId: string) {
74
+ const base = `/v1/workspaces/${enc(workspaceId)}`;
75
+ const vault = (vaultId: string) => `${base}/vaults/${enc(vaultId)}`;
76
+ const item = (vaultId: string, itemId: string) => `${vault(vaultId)}/items/${enc(itemId)}`;
77
+ const field = (vaultId: string, itemId: string, fieldId: string) =>
78
+ `${item(vaultId, itemId)}/fields/${enc(fieldId)}`;
79
+ const json = <T>(
80
+ method: string,
81
+ path: string,
82
+ body?: unknown,
83
+ query?: Record<string, string>,
84
+ signal?: AbortSignal,
85
+ ) => client.requestJson<T>(method, path, body, query ?? {}, signal ? { signal } : {});
86
+ return {
87
+ listVaults: async (signal?: AbortSignal) =>
88
+ (await json<{ vaults: VaultSummary[] }>("GET", `${base}/vaults`, undefined, {}, signal))
89
+ .vaults,
90
+ getVault: (vaultId: string, signal?: AbortSignal) =>
91
+ json<VaultSummary>("GET", vault(vaultId), undefined, {}, signal),
92
+ createVault: (request: CreateVaultRequest) =>
93
+ json<VaultSummary>("POST", `${base}/vaults`, request),
94
+ updateVault: (vaultId: string, request: UpdateVaultRequest) =>
95
+ json<VaultSummary>("PATCH", vault(vaultId), request),
96
+ deleteVault: (vaultId: string, confirmName: string) =>
97
+ client.requestJson<void>(
98
+ "DELETE",
99
+ vault(vaultId),
100
+ { confirmName },
101
+ {},
102
+ { responseType: "void" },
103
+ ),
104
+ syncVault: (vaultId: string) => json<VaultSummary>("POST", `${vault(vaultId)}/sync`, {}),
105
+ listItems: (vaultId: string, query: ListVaultItemsQuery = {}, signal?: AbortSignal) =>
106
+ json<{ items: VaultItemSummary[]; nextCursor: string | null }>(
107
+ "GET",
108
+ `${vault(vaultId)}/items`,
109
+ undefined,
110
+ itemsQuery(query),
111
+ signal,
112
+ ),
113
+ getItem: (vaultId: string, itemId: string, signal?: AbortSignal) =>
114
+ json<VaultItem>("GET", item(vaultId, itemId), undefined, {}, signal),
115
+ createItem: (vaultId: string, request: CreateVaultItemRequest) =>
116
+ json<VaultItem>("POST", `${vault(vaultId)}/items`, request),
117
+ updateItem: (vaultId: string, itemId: string, request: UpdateVaultItemRequest) =>
118
+ json<VaultItem>("PATCH", item(vaultId, itemId), request),
119
+ /** Archives; `permanent` deletes an archived item. */
120
+ deleteItem: (vaultId: string, itemId: string, permanent = false) =>
121
+ client.requestJson<void>(
122
+ "DELETE",
123
+ item(vaultId, itemId),
124
+ undefined,
125
+ permanent ? { permanent: "true" } : {},
126
+ { responseType: "void" },
127
+ ),
128
+ restoreItem: (vaultId: string, itemId: string) =>
129
+ json<VaultItem>("POST", `${item(vaultId, itemId)}/restore`, {}),
130
+ moveItem: (vaultId: string, itemId: string, request: MoveVaultItemRequest) =>
131
+ json<VaultItem>("POST", `${item(vaultId, itemId)}/move`, request),
132
+ /** Plaintext. Audited server-side. Never cache the result. */
133
+ revealField: (vaultId: string, itemId: string, fieldId: string, version?: number) =>
134
+ json<RevealVaultFieldResponse>(
135
+ "POST",
136
+ `${field(vaultId, itemId, fieldId)}/reveal`,
137
+ version === undefined ? {} : { version },
138
+ ),
139
+ listFieldVersions: async (
140
+ vaultId: string,
141
+ itemId: string,
142
+ fieldId: string,
143
+ signal?: AbortSignal,
144
+ ) =>
145
+ (
146
+ await json<{ versions: VaultFieldVersionMeta[] }>(
147
+ "GET",
148
+ `${field(vaultId, itemId, fieldId)}/versions`,
149
+ undefined,
150
+ {},
151
+ signal,
152
+ )
153
+ ).versions,
154
+ restoreFieldVersion: (vaultId: string, itemId: string, fieldId: string, version: number) =>
155
+ json<VaultItem>("POST", `${field(vaultId, itemId, fieldId)}/restore`, { version }),
156
+ getSessionSecrets: (sessionId: string, signal?: AbortSignal) =>
157
+ json<SessionSecretsView>(
158
+ "GET",
159
+ `${base}/sessions/${enc(sessionId)}/secrets`,
160
+ undefined,
161
+ {},
162
+ signal,
163
+ ),
164
+ setSessionVaultPolicy: (sessionId: string, policy: VaultPolicy) =>
165
+ json<SessionSecretsView>("PUT", `${base}/sessions/${enc(sessionId)}/vault-policy`, {
166
+ policy,
167
+ }),
168
+ installOnePassword: (request: InstallOnePasswordRequest) =>
169
+ json<InstallOnePasswordResponse>("POST", `${base}/connections/1password/install`, request),
170
+ /** The 1Password connections the caller can see. */
171
+ listOnePasswordConnections: async (signal?: AbortSignal) =>
172
+ (
173
+ await json<{ connections: OnePasswordConnectionSummary[] }>(
174
+ "GET",
175
+ `${base}/connections/1password/service-accounts`,
176
+ undefined,
177
+ {},
178
+ signal,
179
+ )
180
+ ).connections,
181
+ /** Checks a new service account token and stores it on the same connection. */
182
+ replaceOnePasswordToken: (connectionId: string, request: ReplaceOnePasswordTokenRequest) =>
183
+ json<InstallOnePasswordResponse>(
184
+ "PUT",
185
+ `${base}/connections/${enc(connectionId)}/1password/token`,
186
+ request,
187
+ ),
188
+ /** Unlinks the connection's vaults (nothing is deleted in 1Password) and removes its token. */
189
+ disconnectOnePassword: (connectionId: string) =>
190
+ json<DisconnectOnePasswordResponse>(
191
+ "DELETE",
192
+ `${base}/connections/${enc(connectionId)}/1password`,
193
+ ),
194
+ listProviderVaults: async (connectionId: string, signal?: AbortSignal) =>
195
+ (
196
+ await json<{ vaults: ProviderVaultMeta[] }>(
197
+ "GET",
198
+ `${base}/connections/${enc(connectionId)}/provider-vaults`,
199
+ undefined,
200
+ {},
201
+ signal,
202
+ )
203
+ ).vaults,
204
+ installVaultProvider: (request: InstallVaultProviderRequest) =>
205
+ json<InstallVaultProviderResponse>("POST", `${base}/vault-providers/connections`, request),
206
+ /** Connections plus configured providers, even before the first connection. */
207
+ getVaultProviderCatalog: (signal?: AbortSignal) =>
208
+ json<ListVaultProviderConnectionsResponse>(
209
+ "GET",
210
+ `${base}/vault-providers/connections`,
211
+ undefined,
212
+ {},
213
+ signal,
214
+ ),
215
+ listVaultProviderConnections: async (signal?: AbortSignal) =>
216
+ (
217
+ await json<{ connections: VaultProviderConnectionSummary[] }>(
218
+ "GET",
219
+ `${base}/vault-providers/connections`,
220
+ undefined,
221
+ {},
222
+ signal,
223
+ )
224
+ ).connections,
225
+ replaceVaultProviderCredentials: (
226
+ connectionId: string,
227
+ request: ReplaceVaultProviderCredentialsRequest,
228
+ ) =>
229
+ json<InstallVaultProviderResponse>(
230
+ "PUT",
231
+ `${base}/vault-providers/connections/${enc(connectionId)}/credentials`,
232
+ request,
233
+ ),
234
+ disconnectVaultProvider: (connectionId: string) =>
235
+ json<DisconnectVaultProviderResponse>(
236
+ "DELETE",
237
+ `${base}/vault-providers/connections/${enc(connectionId)}`,
238
+ ),
239
+ /** Continue verification using the saved credentials, without replaying setup tokens. */
240
+ verifyVaultProviderConnection: (connectionId: string) =>
241
+ json<InstallVaultProviderResponse>(
242
+ "POST",
243
+ `${base}/vault-providers/connections/${enc(connectionId)}/verify`,
244
+ {},
245
+ ),
246
+ linkProviderVault: (request: LinkProviderVaultRequest) =>
247
+ json<VaultSummary>("POST", `${base}/vaults/link`, request),
248
+ createManagedProviderVault: (
249
+ connectionId: string,
250
+ request: CreateManagedProviderVaultRequest,
251
+ ) =>
252
+ json<VaultSummary>(
253
+ "POST",
254
+ `${base}/connections/${enc(connectionId)}/managed-vaults`,
255
+ request,
256
+ ),
257
+ };
258
+ }
259
+
260
+ export type VaultsApi = ReturnType<typeof vaultsApi>;
261
+
262
+ const VAULT_ERROR_CODES: ReadonlySet<string> = new Set<VaultErrorCode>([
263
+ "vault_not_found",
264
+ "vault_item_not_found",
265
+ "vault_field_not_found",
266
+ "vault_name_conflict",
267
+ "vault_item_name_conflict",
268
+ "vault_limit_reached",
269
+ "vault_read_only",
270
+ "vault_generation_conflict",
271
+ "vault_permission_denied",
272
+ "vault_reveal_requires_human",
273
+ "vault_policy_outside_parent",
274
+ "encryption_key_missing",
275
+ "provider_auth_invalid",
276
+ "provider_auth_expired",
277
+ "provider_rate_limited",
278
+ "provider_unavailable",
279
+ "provider_conflict",
280
+ "provider_locked",
281
+ "provider_inventory_incomplete",
282
+ "provider_outcome_unknown",
283
+ "variable_sets_removed",
284
+ "secret_save_forbidden",
285
+ "invalid_secret_name",
286
+ "secret_value_too_large",
287
+ "human_auth_required",
288
+ "secret_search_cursor_invalid",
289
+ ]);
290
+
291
+ /**
292
+ * The vault error code of a failed call, from either `{error: {code}}` or the
293
+ * vault routes' `{error: "<code>", message}` body. Null for anything else.
294
+ */
295
+ export function vaultErrorCode(error: unknown): VaultErrorCode | null {
296
+ if (!error || typeof error !== "object") return null;
297
+ const record = error as { code?: unknown; body?: unknown; details?: unknown };
298
+ if (typeof record.code === "string" && VAULT_ERROR_CODES.has(record.code)) {
299
+ return record.code as VaultErrorCode;
300
+ }
301
+ if (typeof record.body === "string" && record.body) {
302
+ try {
303
+ const parsed = JSON.parse(record.body) as { error?: unknown };
304
+ const candidate =
305
+ typeof parsed.error === "string"
306
+ ? parsed.error
307
+ : parsed.error && typeof parsed.error === "object"
308
+ ? (parsed.error as { code?: unknown }).code
309
+ : undefined;
310
+ if (typeof candidate === "string" && VAULT_ERROR_CODES.has(candidate)) {
311
+ return candidate as VaultErrorCode;
312
+ }
313
+ } catch {
314
+ return null;
315
+ }
316
+ }
317
+ return null;
318
+ }
319
+
320
+ /** Server-side detail of a vault error (for example `retryAt` on a rate limit). */
321
+ export function vaultErrorDetail(error: unknown, key: string): unknown {
322
+ if (!error || typeof error !== "object") return undefined;
323
+ const record = error as { details?: Record<string, unknown>; body?: unknown };
324
+ if (record.details && key in record.details) return record.details[key];
325
+ if (typeof record.body === "string" && record.body) {
326
+ try {
327
+ const parsed = JSON.parse(record.body) as Record<string, unknown>;
328
+ const nested =
329
+ parsed.error && typeof parsed.error === "object"
330
+ ? (parsed.error as Record<string, unknown>)
331
+ : parsed;
332
+ const details = (nested.details ?? parsed.details) as Record<string, unknown> | undefined;
333
+ return details?.[key] ?? nested[key];
334
+ } catch {
335
+ return undefined;
336
+ }
337
+ }
338
+ return undefined;
339
+ }
@@ -1,3 +1,15 @@
1
+ import type { ToolGatewayIdentity } from "./types";
2
+
3
+ export type WorkspaceArtifactSourceFile = {
4
+ path: string;
5
+ content: string;
6
+ };
7
+
8
+ export type WorkspaceArtifactSourceBundle = {
9
+ entrypoint: string;
10
+ files: WorkspaceArtifactSourceFile[];
11
+ };
12
+
1
13
  export type WorkspaceArtifactVersion = {
2
14
  id: string;
3
15
  accountId: string;
@@ -5,8 +17,11 @@ export type WorkspaceArtifactVersion = {
5
17
  artifactId: string;
6
18
  revision: number;
7
19
  contentType: "text/html";
8
- contentSha256: string;
20
+ contentSha256: string | null;
9
21
  sizeBytes: number;
22
+ sourceSha256: string | null;
23
+ sourceSizeBytes: number | null;
24
+ requestedTools: ToolGatewayIdentity[];
10
25
  sourceSessionId: string | null;
11
26
  sourceTurnId: string | null;
12
27
  sourceAttemptId: string | null;
@@ -15,6 +30,9 @@ export type WorkspaceArtifactVersion = {
15
30
  createdAt: string;
16
31
  };
17
32
 
33
+ /** Who can see a Site: everyone in the workspace, or only its owner ("Only me"). */
34
+ export type WorkspaceArtifactVisibility = "private" | "workspace";
35
+
18
36
  export type WorkspaceArtifact = {
19
37
  id: string;
20
38
  accountId: string;
@@ -23,6 +41,10 @@ export type WorkspaceArtifact = {
23
41
  title: string;
24
42
  description: string | null;
25
43
  status: "active" | "archived";
44
+ /** Absent from older servers, where every Site is visible to the workspace. */
45
+ visibility?: WorkspaceArtifactVisibility;
46
+ /** The person the Site belongs to; only they can change its audience. */
47
+ ownerSubjectId?: string | null;
26
48
  currentVersion: WorkspaceArtifactVersion | null;
27
49
  createdBySubjectId: string;
28
50
  createdAt: string;
@@ -34,7 +56,7 @@ export type WorkspaceArtifactEvent = {
34
56
  accountId: string;
35
57
  workspaceId: string;
36
58
  artifactId: string;
37
- type: "published" | "rolled_back";
59
+ type: "published" | "rolled_back" | "archived" | "restored";
38
60
  fromVersionId: string | null;
39
61
  toVersionId: string;
40
62
  sourceSessionId: string | null;
@@ -46,7 +68,12 @@ export type WorkspaceArtifactEvent = {
46
68
  createdAt: string;
47
69
  };
48
70
 
49
- export type WorkspaceArtifactListOptions = { limit?: number; cursor?: string };
71
+ export type WorkspaceArtifactListOptions = {
72
+ sourceSessionId?: string;
73
+ limit?: number;
74
+ cursor?: string;
75
+ status?: WorkspaceArtifact["status"];
76
+ };
50
77
  export type WorkspaceArtifactListResponse = {
51
78
  artifacts: WorkspaceArtifact[];
52
79
  nextCursor: string | null;
@@ -63,8 +90,10 @@ export type WorkspaceArtifactContentResponse = {
63
90
  artifactId: string;
64
91
  versionId: string;
65
92
  contentType: "text/html";
66
- contentSha256: string;
93
+ contentSha256: string | null;
67
94
  html: string;
95
+ source: WorkspaceArtifactSourceBundle;
96
+ requestedTools: ToolGatewayIdentity[];
68
97
  };
69
98
  export type WorkspaceArtifactMutationResponse = {
70
99
  artifact: WorkspaceArtifact;
@@ -76,13 +105,21 @@ export type CreateWorkspaceArtifactRequest = {
76
105
  slug?: string;
77
106
  title: string;
78
107
  description?: string | null;
79
- html: string;
108
+ html?: string;
109
+ uploadId?: string;
110
+ source?: WorkspaceArtifactSourceBundle;
111
+ requestedTools?: ToolGatewayIdentity[];
112
+ /** Who can see the new Site. Omitted: the whole workspace. */
113
+ visibility?: WorkspaceArtifactVisibility;
80
114
  idempotencyKey: string;
81
115
  };
82
116
  export type PublishWorkspaceArtifactVersionRequest = {
83
117
  title?: string;
84
118
  description?: string | null;
85
- html: string;
119
+ html?: string;
120
+ uploadId?: string;
121
+ source?: WorkspaceArtifactSourceBundle;
122
+ requestedTools?: ToolGatewayIdentity[];
86
123
  expectedCurrentVersionId: string;
87
124
  idempotencyKey: string;
88
125
  };
@@ -92,3 +129,15 @@ export type RollbackWorkspaceArtifactRequest = {
92
129
  reason: string;
93
130
  idempotencyKey: string;
94
131
  };
132
+ export type SetWorkspaceArtifactStatusRequest = {
133
+ status: "active" | "archived";
134
+ expectedCurrentVersionId: string;
135
+ reason: string;
136
+ idempotencyKey: string;
137
+ };
138
+ export type UpdateWorkspaceArtifactVisibilityRequest = {
139
+ visibility: WorkspaceArtifactVisibility;
140
+ };
141
+ export type UpdateWorkspaceArtifactVisibilityResponse = {
142
+ artifact: WorkspaceArtifact;
143
+ };
@@ -5,11 +5,12 @@ export type WorkspaceInstructionPolicyScope = "global" | "role";
5
5
  export type WorkspaceInstructionPolicyProvenanceSource =
6
6
  | "human"
7
7
  | "onboarding"
8
+ | "agent_learning"
8
9
  | "knowledge_proposal"
9
10
  | "legacy_import";
10
11
  export type WorkspaceInstructionPolicyDraftProvenanceSource = Exclude<
11
12
  WorkspaceInstructionPolicyProvenanceSource,
12
- "legacy_import"
13
+ "legacy_import" | "agent_learning"
13
14
  >;
14
15
  export type WorkspaceInstructionPolicyActivationType = "activate" | "rollback";
15
16