@opengeni/sdk 0.57.0 → 1.0.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 (291) hide show
  1. package/README.md +1017 -26
  2. package/dist/accounts.d.ts +153 -0
  3. package/dist/accounts.js +307 -0
  4. package/dist/accounts.js.map +1 -0
  5. package/dist/adapters/express.d.ts +31 -0
  6. package/dist/adapters/express.js +87 -0
  7. package/dist/adapters/express.js.map +1 -0
  8. package/dist/adapters/hono.d.ts +16 -0
  9. package/dist/adapters/hono.js +8 -0
  10. package/dist/adapters/hono.js.map +1 -0
  11. package/dist/adapters/next.d.ts +29 -0
  12. package/dist/adapters/next.js +22 -0
  13. package/dist/adapters/next.js.map +1 -0
  14. package/dist/allowance-refusal.d.ts +2 -0
  15. package/dist/allowance-refusal.js +50 -0
  16. package/dist/allowance-refusal.js.map +1 -0
  17. package/dist/artifact-catalog.d.ts +31 -0
  18. package/dist/artifact-client.d.ts +23 -11
  19. package/dist/artifacts.d.ts +1 -1
  20. package/dist/artifacts.js +7 -5
  21. package/dist/automations-client.d.ts +17 -0
  22. package/dist/automations.d.ts +3 -0
  23. package/dist/automations.js +84 -0
  24. package/dist/automations.js.map +1 -0
  25. package/dist/browser.d.ts +11 -0
  26. package/dist/browser.js +47 -0
  27. package/dist/browser.js.map +1 -0
  28. package/dist/chat/fold.d.ts +75 -0
  29. package/dist/chat/handler.d.ts +41 -0
  30. package/dist/chat/http.d.ts +67 -0
  31. package/dist/chat/ids.d.ts +34 -0
  32. package/dist/chat/index.d.ts +9 -0
  33. package/dist/chat/index.js +1694 -0
  34. package/dist/chat/index.js.map +1 -0
  35. package/dist/chat/openai.d.ts +30 -0
  36. package/dist/chat/opengeni.d.ts +128 -0
  37. package/dist/chat/types.d.ts +207 -0
  38. package/dist/chat/vercel.d.ts +49 -0
  39. package/dist/chats.d.ts +8 -0
  40. package/dist/{chunk-JDLDDRNE.js → chunk-2UXZUCEZ.js} +291 -34
  41. package/dist/chunk-2UXZUCEZ.js.map +1 -0
  42. package/dist/chunk-4SMEOV3P.js +246 -0
  43. package/dist/chunk-4SMEOV3P.js.map +1 -0
  44. package/dist/{chunk-JRPFWI6T.js → chunk-AH5D5Q5V.js} +31 -35
  45. package/dist/chunk-AH5D5Q5V.js.map +1 -0
  46. package/dist/chunk-APXVSSSY.js +301 -0
  47. package/dist/chunk-APXVSSSY.js.map +1 -0
  48. package/dist/chunk-DUVIYER4.js +639 -0
  49. package/dist/chunk-DUVIYER4.js.map +1 -0
  50. package/dist/{chunk-PKQ377ED.js → chunk-FG3OO5LM.js} +2686 -611
  51. package/dist/chunk-FG3OO5LM.js.map +1 -0
  52. package/dist/chunk-GZYZT22T.js +260 -0
  53. package/dist/chunk-GZYZT22T.js.map +1 -0
  54. package/dist/chunk-HMGADJGZ.js +150 -0
  55. package/dist/chunk-HMGADJGZ.js.map +1 -0
  56. package/dist/{chunk-YKZME56C.js → chunk-KWADQ227.js} +3 -3
  57. package/dist/{chunk-YKZME56C.js.map → chunk-KWADQ227.js.map} +1 -1
  58. package/dist/chunk-LY2K6ELJ.js +126 -0
  59. package/dist/chunk-LY2K6ELJ.js.map +1 -0
  60. package/dist/chunk-MOTJYIYL.js +340 -0
  61. package/dist/chunk-MOTJYIYL.js.map +1 -0
  62. package/dist/{chunk-ST5DDKJP.js → chunk-NC57YMUO.js} +121 -3
  63. package/dist/chunk-NC57YMUO.js.map +1 -0
  64. package/dist/chunk-RWKB6YZG.js +1270 -0
  65. package/dist/chunk-RWKB6YZG.js.map +1 -0
  66. package/dist/chunk-U6CV2SXO.js +195 -0
  67. package/dist/chunk-U6CV2SXO.js.map +1 -0
  68. package/dist/chunk-UM4ZXXJR.js +9 -0
  69. package/dist/chunk-UM4ZXXJR.js.map +1 -0
  70. package/dist/chunk-V6GIY62B.js +229 -0
  71. package/dist/chunk-V6GIY62B.js.map +1 -0
  72. package/dist/chunk-WU6GQG25.js +268 -0
  73. package/dist/chunk-WU6GQG25.js.map +1 -0
  74. package/dist/{chunk-VWE2QIVO.js → chunk-XNG7YGR3.js} +23 -6
  75. package/dist/chunk-XNG7YGR3.js.map +1 -0
  76. package/dist/{chunk-HJ3HHUT5.js → chunk-YIKA2QT4.js} +33 -2
  77. package/dist/chunk-YIKA2QT4.js.map +1 -0
  78. package/dist/chunk-ZKPY6YAJ.js +135 -0
  79. package/dist/chunk-ZKPY6YAJ.js.map +1 -0
  80. package/dist/client.d.ts +740 -94
  81. package/dist/codex-realtime-controller.d.ts +3 -0
  82. package/dist/codex-realtime-controller.js +2 -2
  83. package/dist/codex-realtime-v3.d.ts +13 -2
  84. package/dist/company-brain.d.ts +22 -0
  85. package/dist/company-profile.d.ts +14 -1
  86. package/dist/core.d.ts +9 -3
  87. package/dist/core.js +25 -6
  88. package/dist/deprecation.d.ts +47 -0
  89. package/dist/document-authority-client.d.ts +51 -0
  90. package/dist/document-authority.d.ts +2 -0
  91. package/dist/document-authority.js +12 -0
  92. package/dist/document-authority.js.map +1 -0
  93. package/dist/editable-artifacts/browser-session.d.ts +7 -3
  94. package/dist/editable-artifacts/controller.d.ts +4 -1
  95. package/dist/editable-artifacts/errors.d.ts +1 -1
  96. package/dist/editable-artifacts/http-live-transport.d.ts +6 -2
  97. package/dist/editable-artifacts/index.d.ts +2 -0
  98. package/dist/editable-artifacts/open-failure.d.ts +9 -0
  99. package/dist/editable-artifacts/types.d.ts +6 -3
  100. package/dist/editable-artifacts/worker/kernel-adapter.d.ts +1 -1
  101. package/dist/editable-artifacts-worker.js +44 -17
  102. package/dist/editable-artifacts-worker.js.map +1 -1
  103. package/dist/editable-artifacts.js +240 -121
  104. package/dist/editable-artifacts.js.map +1 -1
  105. package/dist/embedding-client.d.ts +129 -0
  106. package/dist/errors.d.ts +36 -1
  107. package/dist/feedback.d.ts +23 -0
  108. package/dist/gateway-realtime-transport.js +1 -1
  109. package/dist/github-repositories.d.ts +10 -0
  110. package/dist/github-repositories.js +36 -0
  111. package/dist/github-repositories.js.map +1 -0
  112. package/dist/index.d.ts +56 -11
  113. package/dist/index.js +242 -125
  114. package/dist/index.js.map +1 -1
  115. package/dist/interaction.d.ts +84 -1
  116. package/dist/interaction.js +6 -1
  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/message-links.d.ts +68 -0
  121. package/dist/model-context.d.ts +68 -0
  122. package/dist/model-display.d.ts +2 -0
  123. package/dist/model-display.js +15 -0
  124. package/dist/model-display.js.map +1 -0
  125. package/dist/model-picker-order.d.ts +1 -0
  126. package/dist/model-picker-order.js +10 -0
  127. package/dist/model-picker-order.js.map +1 -0
  128. package/dist/organization-integration-policy.d.ts +26 -0
  129. package/dist/organization-integration-policy.js +26 -0
  130. package/dist/organization-integration-policy.js.map +1 -0
  131. package/dist/organization-private-session-settings.d.ts +6 -0
  132. package/dist/organization-private-session-settings.js +22 -0
  133. package/dist/organization-private-session-settings.js.map +1 -0
  134. package/dist/organization-user-setup.d.ts +8 -0
  135. package/dist/organization-user-setup.js +16 -0
  136. package/dist/organization-user-setup.js.map +1 -0
  137. package/dist/pr-review-client.d.ts +16 -0
  138. package/dist/pr-review.d.ts +4 -0
  139. package/dist/pr-review.js +62 -0
  140. package/dist/pr-review.js.map +1 -0
  141. package/dist/preference-registry.d.ts +9 -1
  142. package/dist/proxy.d.ts +7 -5
  143. package/dist/realtime.d.ts +3 -1
  144. package/dist/realtime.js +6 -6
  145. package/dist/realtime.js.map +1 -1
  146. package/dist/retained-artifacts.d.ts +5 -1
  147. package/dist/session-history-import.d.ts +22 -0
  148. package/dist/session-history-import.js +36 -0
  149. package/dist/session-history-import.js.map +1 -0
  150. package/dist/session-list-entries.d.ts +1 -0
  151. package/dist/session-list-entries.js +7 -0
  152. package/dist/session-list-entries.js.map +1 -0
  153. package/dist/session-message-search.d.ts +53 -0
  154. package/dist/session-proxy-client.d.ts +24 -0
  155. package/dist/session-proxy.d.ts +245 -0
  156. package/dist/session-proxy.js +24 -0
  157. package/dist/session-proxy.js.map +1 -0
  158. package/dist/session-titles.d.ts +2 -0
  159. package/dist/site-browser-entry.d.ts +1 -0
  160. package/dist/site-browser-runtime.gen.d.ts +1 -0
  161. package/dist/site-document.d.ts +5 -0
  162. package/dist/site-document.js +20 -0
  163. package/dist/site-document.js.map +1 -0
  164. package/dist/site-document.test.d.ts +1 -0
  165. package/dist/site-http.d.ts +16 -0
  166. package/dist/site-tool-bridge.d.ts +44 -0
  167. package/dist/site.d.ts +101 -0
  168. package/dist/site.js +49 -0
  169. package/dist/site.js.map +1 -0
  170. package/dist/skills.d.ts +75 -0
  171. package/dist/stream.d.ts +2 -0
  172. package/dist/tenant-workspaces.d.ts +47 -0
  173. package/dist/tenant-workspaces.js +8 -0
  174. package/dist/tenant-workspaces.js.map +1 -0
  175. package/dist/tool-auth.d.ts +87 -0
  176. package/dist/tool-auth.js +23 -0
  177. package/dist/tool-auth.js.map +1 -0
  178. package/dist/tool-display-metadata.d.ts +3 -0
  179. package/dist/tools-FXBLUWAE.js +12 -0
  180. package/dist/tools-FXBLUWAE.js.map +1 -0
  181. package/dist/tools.d.ts +61 -0
  182. package/dist/types.d.ts +2863 -424
  183. package/dist/usage-allowances.d.ts +36 -0
  184. package/dist/usage-allowances.js +80 -0
  185. package/dist/usage-allowances.js.map +1 -0
  186. package/dist/workspace-artifacts.d.ts +33 -5
  187. package/dist/workspace-instruction-policies.d.ts +24 -2
  188. package/dist/workspace-integrations.d.ts +74 -0
  189. package/dist/workspace-integrations.js +65 -0
  190. package/dist/workspace-integrations.js.map +1 -0
  191. package/dist/workspace-learning.d.ts +124 -0
  192. package/dist/workspace-state.d.ts +8 -71
  193. package/package.json +108 -3
  194. package/src/accounts.ts +443 -0
  195. package/src/adapters/express.ts +136 -0
  196. package/src/adapters/hono.ts +18 -0
  197. package/src/adapters/next.ts +42 -0
  198. package/src/allowance-refusal.ts +5 -0
  199. package/src/artifact-catalog.ts +41 -0
  200. package/src/artifact-client.ts +43 -52
  201. package/src/artifacts.ts +7 -1
  202. package/src/automations-client.ts +124 -0
  203. package/src/automations.ts +15 -0
  204. package/src/browser.ts +54 -0
  205. package/src/chat/fold.ts +431 -0
  206. package/src/chat/handler.ts +240 -0
  207. package/src/chat/http.ts +257 -0
  208. package/src/chat/ids.ts +85 -0
  209. package/src/chat/index.ts +87 -0
  210. package/src/chat/openai.ts +439 -0
  211. package/src/chat/opengeni.ts +722 -0
  212. package/src/chat/types.ts +219 -0
  213. package/src/chat/vercel.ts +204 -0
  214. package/src/chats.ts +16 -0
  215. package/src/client.ts +4084 -515
  216. package/src/codex-realtime-controller.ts +235 -5
  217. package/src/codex-realtime-v3.ts +162 -31
  218. package/src/codex-realtime.ts +1 -1
  219. package/src/company-brain.ts +59 -0
  220. package/src/company-profile.ts +17 -1
  221. package/src/core.ts +23 -1
  222. package/src/deprecation.ts +149 -0
  223. package/src/document-authority-client.ts +219 -0
  224. package/src/document-authority.ts +17 -0
  225. package/src/editable-artifacts/browser-session.ts +36 -22
  226. package/src/editable-artifacts/controller.ts +102 -47
  227. package/src/editable-artifacts/errors.ts +2 -0
  228. package/src/editable-artifacts/http-live-transport.ts +62 -37
  229. package/src/editable-artifacts/index.ts +6 -0
  230. package/src/editable-artifacts/open-failure.ts +79 -0
  231. package/src/editable-artifacts/storage.ts +31 -40
  232. package/src/editable-artifacts/types.ts +6 -3
  233. package/src/editable-artifacts/worker/kernel-adapter.ts +23 -7
  234. package/src/editable-artifacts/worker/runtime.ts +26 -13
  235. package/src/editable-artifacts/worker/wire-codec.ts +23 -5
  236. package/src/embedding-client.ts +519 -0
  237. package/src/errors.ts +169 -2
  238. package/src/feedback.ts +20 -0
  239. package/src/gateway-realtime-transport.ts +3 -3
  240. package/src/github-repositories.ts +60 -0
  241. package/src/index.ts +561 -41
  242. package/src/interaction.ts +276 -4
  243. package/src/knowledge.ts +72 -0
  244. package/src/message-links.ts +178 -0
  245. package/src/model-context.ts +112 -0
  246. package/src/model-display.ts +10 -0
  247. package/src/model-picker-order.ts +6 -0
  248. package/src/organization-integration-policy.ts +54 -0
  249. package/src/organization-private-session-settings.ts +33 -0
  250. package/src/organization-user-setup.ts +31 -0
  251. package/src/pr-review-client.ts +92 -0
  252. package/src/pr-review.ts +17 -0
  253. package/src/preference-registry.ts +11 -0
  254. package/src/proxy.ts +17 -6
  255. package/src/realtime.ts +1 -0
  256. package/src/retained-artifacts.ts +101 -0
  257. package/src/session-history-import.ts +84 -0
  258. package/src/session-list-entries.ts +1 -0
  259. package/src/session-message-search.ts +47 -0
  260. package/src/session-proxy-client.ts +64 -0
  261. package/src/session-proxy.ts +1473 -0
  262. package/src/session-titles.ts +10 -0
  263. package/src/site-browser-entry.ts +6 -0
  264. package/src/site-browser-runtime.gen.ts +2 -0
  265. package/src/site-document.test.ts +64 -0
  266. package/src/site-document.ts +18 -0
  267. package/src/site-http.ts +162 -0
  268. package/src/site-tool-bridge.ts +146 -0
  269. package/src/site.ts +585 -0
  270. package/src/skills.ts +69 -0
  271. package/src/sse.ts +8 -2
  272. package/src/stream.ts +38 -4
  273. package/src/tenant-workspaces.ts +148 -0
  274. package/src/tool-auth.ts +301 -0
  275. package/src/tool-display-metadata.ts +19 -0
  276. package/src/tools.ts +396 -0
  277. package/src/types.ts +3346 -501
  278. package/src/usage-allowances.ts +189 -0
  279. package/src/workspace-artifacts.ts +40 -6
  280. package/src/workspace-instruction-policies.ts +26 -1
  281. package/src/workspace-integrations.ts +402 -0
  282. package/src/workspace-learning.ts +138 -0
  283. package/src/workspace-state.ts +8 -82
  284. package/dist/chunk-GU6JF75T.js +0 -119
  285. package/dist/chunk-GU6JF75T.js.map +0 -1
  286. package/dist/chunk-HJ3HHUT5.js.map +0 -1
  287. package/dist/chunk-JDLDDRNE.js.map +0 -1
  288. package/dist/chunk-JRPFWI6T.js.map +0 -1
  289. package/dist/chunk-PKQ377ED.js.map +0 -1
  290. package/dist/chunk-ST5DDKJP.js.map +0 -1
  291. package/dist/chunk-VWE2QIVO.js.map +0 -1
@@ -0,0 +1,136 @@
1
+ import type { IncomingMessage, ServerResponse } from "node:http";
2
+ import { Readable } from "node:stream";
3
+
4
+ /** Any web-standard handler: `createSessionProxyHandler`, `createChatHandler`, or your own. */
5
+ export type WebHandler = (request: Request) => Promise<Response>;
6
+
7
+ /** Express/Connect request: Node's `IncomingMessage` plus what those frameworks add. */
8
+ export type NodeRequestLike = IncomingMessage & {
9
+ originalUrl?: string | undefined;
10
+ /** Set when a body parser (for example `express.json()`) already consumed the body. */
11
+ body?: unknown;
12
+ protocol?: string | undefined;
13
+ };
14
+
15
+ export type NodeMiddleware = (
16
+ request: NodeRequestLike,
17
+ response: ServerResponse,
18
+ next?: (error?: unknown) => void,
19
+ ) => void;
20
+
21
+ export type NodeMiddlewareOptions = {
22
+ /** Origin used to build the request URL. Defaults to the Host header over http(s). */
23
+ origin?: string | undefined;
24
+ };
25
+
26
+ /**
27
+ * Expose a web-standard handler as Express/Connect (or plain `node:http`)
28
+ * middleware. Mount it with the same path the browser client uses:
29
+ *
30
+ * ```ts
31
+ * app.use("/api/opengeni", toNodeMiddleware(handler));
32
+ * ```
33
+ *
34
+ * The full original URL is forwarded (Express strips the mount path from
35
+ * `req.url`), bodies stream through unless a body parser already consumed
36
+ * them, responses (including SSE) are written as they arrive, and a client
37
+ * disconnect aborts the request signal.
38
+ */
39
+ export function toNodeMiddleware(
40
+ handler: WebHandler,
41
+ options: NodeMiddlewareOptions = {},
42
+ ): NodeMiddleware {
43
+ return (request, response, next) => {
44
+ void (async () => {
45
+ const abort = new AbortController();
46
+ response.once("close", () => {
47
+ if (!response.writableFinished) abort.abort();
48
+ });
49
+ const web = await handler(toWebRequest(request, abort.signal, options));
50
+ await writeWebResponse(web, response);
51
+ })().catch((error: unknown) => {
52
+ if (next) next(error);
53
+ else if (!response.headersSent) {
54
+ response.statusCode = 500;
55
+ response.end();
56
+ } else response.destroy(error instanceof Error ? error : undefined);
57
+ });
58
+ };
59
+ }
60
+
61
+ /** Express/Connect naming alias. */
62
+ export const toExpressMiddleware = toNodeMiddleware;
63
+
64
+ function toWebRequest(
65
+ request: NodeRequestLike,
66
+ signal: AbortSignal,
67
+ options: NodeMiddlewareOptions,
68
+ ): Request {
69
+ const encrypted = (request.socket as { encrypted?: boolean } | undefined)?.encrypted === true;
70
+ const origin =
71
+ options.origin?.replace(/\/+$/, "") ??
72
+ `${request.protocol ?? (encrypted ? "https" : "http")}://${request.headers.host ?? "localhost"}`;
73
+ const url = new URL(request.originalUrl ?? request.url ?? "/", origin);
74
+ const headers = new Headers();
75
+ for (const [name, value] of Object.entries(request.headers)) {
76
+ if (value === undefined) continue;
77
+ if (Array.isArray(value)) for (const item of value) headers.append(name, item);
78
+ else headers.set(name, value);
79
+ }
80
+ const method = request.method ?? "GET";
81
+ let body: BodyInit | undefined;
82
+ if (method !== "GET" && method !== "HEAD") {
83
+ if (request.body !== undefined && (request.readableEnded || request.complete)) {
84
+ // A body parser consumed the stream: forward what it parsed.
85
+ body =
86
+ typeof request.body === "string" || request.body instanceof Uint8Array
87
+ ? (request.body as string | Uint8Array<ArrayBuffer>)
88
+ : JSON.stringify(request.body);
89
+ headers.delete("content-length");
90
+ } else {
91
+ body = Readable.toWeb(request) as unknown as ReadableStream<Uint8Array>;
92
+ }
93
+ }
94
+ return new Request(url, {
95
+ method,
96
+ headers,
97
+ signal,
98
+ ...(body !== undefined ? { body, duplex: "half" } : {}),
99
+ } as RequestInit);
100
+ }
101
+
102
+ async function writeWebResponse(web: Response, response: ServerResponse): Promise<void> {
103
+ response.statusCode = web.status;
104
+ const cookies = web.headers.getSetCookie?.() ?? [];
105
+ web.headers.forEach((value, name) => {
106
+ if (name.toLowerCase() !== "set-cookie") response.setHeader(name, value);
107
+ });
108
+ if (cookies.length > 0) response.setHeader("set-cookie", cookies);
109
+ if (!web.body) {
110
+ response.end();
111
+ return;
112
+ }
113
+ // Send headers now so SSE clients see the stream open before the first event.
114
+ response.flushHeaders();
115
+ const reader = web.body.getReader();
116
+ response.once("close", () => {
117
+ void reader.cancel().catch(() => undefined);
118
+ });
119
+ for (;;) {
120
+ const { done, value } = await reader.read();
121
+ if (done) break;
122
+ if (!response.write(value)) {
123
+ await new Promise<void>((resolve) => {
124
+ const settle = () => {
125
+ response.off("drain", settle);
126
+ response.off("close", settle);
127
+ resolve();
128
+ };
129
+ response.once("drain", settle);
130
+ response.once("close", settle);
131
+ });
132
+ }
133
+ if (response.destroyed) break;
134
+ }
135
+ response.end();
136
+ }
@@ -0,0 +1,18 @@
1
+ /** Any web-standard handler: `createSessionProxyHandler`, `createChatHandler`, or your own. */
2
+ export type WebHandler = (request: Request) => Promise<Response>;
3
+
4
+ /** The part of Hono's context this adapter uses (no Hono dependency). */
5
+ export type HonoContextLike = { req: { raw: Request } };
6
+
7
+ /**
8
+ * Expose a web-standard handler as a Hono handler:
9
+ *
10
+ * ```ts
11
+ * app.all("/api/opengeni/*", toHonoHandler(handler));
12
+ * ```
13
+ */
14
+ export function toHonoHandler(
15
+ handler: WebHandler,
16
+ ): (context: HonoContextLike) => Promise<Response> {
17
+ return async (context) => await handler(context.req.raw);
18
+ }
@@ -0,0 +1,42 @@
1
+ import { createSessionProxyHandler, type SessionProxyHandlerOptions } from "../session-proxy";
2
+
3
+ /** Any web-standard handler: `createSessionProxyHandler`, `createChatHandler`, or your own. */
4
+ export type WebHandler = (request: Request) => Promise<Response>;
5
+
6
+ /** Route handlers for a Next.js App Router catch-all route. */
7
+ export type NextRouteHandlers = {
8
+ GET: WebHandler;
9
+ POST: WebHandler;
10
+ PUT: WebHandler;
11
+ PATCH: WebHandler;
12
+ DELETE: WebHandler;
13
+ };
14
+
15
+ /**
16
+ * Expose a web-standard handler as Next.js App Router route handlers.
17
+ *
18
+ * ```ts
19
+ * // app/api/opengeni/[...path]/route.ts
20
+ * export const dynamic = "force-dynamic";
21
+ * export const { GET, POST, PUT, PATCH, DELETE } = toNextRouteHandlers(handler);
22
+ * ```
23
+ *
24
+ * Next passes the full request URL (including any `basePath`), so the proxy's
25
+ * own `/v1/` detection routes it; responses, including SSE, stream as-is.
26
+ */
27
+ export function toNextRouteHandlers(handler: WebHandler): NextRouteHandlers {
28
+ // Next calls route handlers with (request, context); only the request matters.
29
+ const route: WebHandler = async (request) => await handler(request);
30
+ return { GET: route, POST: route, PUT: route, PATCH: route, DELETE: route };
31
+ }
32
+
33
+ /**
34
+ * `createSessionProxyHandler` as Next.js App Router route handlers, for
35
+ * `app/<mount>/[...path]/route.ts`.
36
+ */
37
+ export function createSessionProxyRoute(
38
+ target: Parameters<typeof createSessionProxyHandler>[0],
39
+ options: SessionProxyHandlerOptions,
40
+ ): NextRouteHandlers {
41
+ return toNextRouteHandlers(createSessionProxyHandler(target, options));
42
+ }
@@ -0,0 +1,5 @@
1
+ /** Browser-safe allowance presentation without exposing the server core. */
2
+ export {
3
+ allowanceExhaustedMessage,
4
+ parseAllowanceExhaustedRefusal,
5
+ } from "@opengeni/contracts/allowance-refusal";
@@ -0,0 +1,41 @@
1
+ import type { RetainedArtifactReference } from "./types";
2
+
3
+ export type ArtifactCatalogKind =
4
+ | "site"
5
+ | "document"
6
+ | "spreadsheet"
7
+ | "presentation"
8
+ | "image"
9
+ | "file";
10
+
11
+ /** Native IDs are unique within a kind; use `${kind}:${id}` as a UI key. */
12
+ export type ArtifactCatalogItem = {
13
+ id: string;
14
+ kind: ArtifactCatalogKind;
15
+ title: string;
16
+ createdAt: string;
17
+ updatedAt: string;
18
+ status: "active" | "archived";
19
+ /** Present only when the viewer can read this session. */
20
+ sourceSessionId?: string;
21
+ versionId?: string;
22
+ file?: RetainedArtifactReference;
23
+ filename?: string;
24
+ contentType?: string;
25
+ sizeBytes?: number;
26
+ };
27
+
28
+ export type ArtifactCatalogListOptions = {
29
+ sourceSessionId?: string;
30
+ q?: string;
31
+ kind?: ArtifactCatalogKind;
32
+ sort?: "updated" | "newest" | "title";
33
+ status?: "active" | "archived";
34
+ limit?: number;
35
+ cursor?: string;
36
+ };
37
+
38
+ export type ArtifactCatalogListResponse = {
39
+ items: ArtifactCatalogItem[];
40
+ nextCursor: string | null;
41
+ };
@@ -1,4 +1,13 @@
1
- import { OpenGeniClient as OpenGeniCoreClient } from "./client";
1
+ import { OpenGeniDocumentAuthorityClient } from "./document-authority-client";
2
+ import type { FetchResponse } from "./client";
3
+ import type { SiteToolCallRequest } from "./site-tool-bridge";
4
+ import type { ToolGatewayCallResponse } from "./types";
5
+ import type {
6
+ CreateWorkspaceArtifactRequest,
7
+ PublishWorkspaceArtifactVersionRequest,
8
+ WorkspaceArtifactContentResponse,
9
+ WorkspaceArtifactMutationResponse,
10
+ } from "./workspace-artifacts";
2
11
  import type {
3
12
  CreateEditableArtifactMaterializationRequest,
4
13
  CreateEditableArtifactResourceRequest,
@@ -12,19 +21,9 @@ import type {
12
21
  ReadEditableArtifactMaterializationOptions,
13
22
  ReadEditableArtifactResourceOptions,
14
23
  } from "./editable-artifact-resources";
15
- import type {
16
- CreateWorkspaceArtifactRequest,
17
- PublishWorkspaceArtifactVersionRequest,
18
- RollbackWorkspaceArtifactRequest,
19
- WorkspaceArtifactContentResponse,
20
- WorkspaceArtifactDetailResponse,
21
- WorkspaceArtifactListOptions,
22
- WorkspaceArtifactListResponse,
23
- WorkspaceArtifactMutationResponse,
24
- } from "./workspace-artifacts";
25
24
 
26
- /** Public SDK client. Artifact operations stay out of the console's eager core graph. */
27
- export class OpenGeniClient extends OpenGeniCoreClient {
25
+ /** Public SDK client. Optional operator and artifact operations stay out of the console core. */
26
+ export class OpenGeniClient extends OpenGeniDocumentAuthorityClient {
28
27
  async createEditableArtifact(
29
28
  workspaceId: string,
30
29
  request: CreateEditableArtifactResourceRequest,
@@ -132,7 +131,7 @@ export class OpenGeniClient extends OpenGeniCoreClient {
132
131
  artifactId: string,
133
132
  jobId: string,
134
133
  options: ReadEditableArtifactMaterializationOptions,
135
- ): Promise<Response> {
134
+ ): Promise<FetchResponse> {
136
135
  return await this.requestResponse(
137
136
  "GET",
138
137
  `/v1/workspaces/${encodeURIComponent(workspaceId)}/editable-artifacts/${encodeURIComponent(artifactId)}/materializations/${encodeURIComponent(jobId)}/download`,
@@ -140,51 +139,52 @@ export class OpenGeniClient extends OpenGeniCoreClient {
140
139
  options,
141
140
  );
142
141
  }
143
-
144
- async listWorkspaceArtifacts(
145
- workspaceId: string,
146
- options: WorkspaceArtifactListOptions = {},
147
- ): Promise<WorkspaceArtifactListResponse> {
148
- const query = new URLSearchParams();
149
- if (options.limit !== undefined) query.set("limit", String(options.limit));
150
- if (options.cursor) query.set("cursor", options.cursor);
151
- const suffix = query.size > 0 ? `?${query.toString()}` : "";
152
- return await this.requestJson<WorkspaceArtifactListResponse>(
153
- "GET",
154
- `/v1/workspaces/${workspaceId}/published-artifacts${suffix}`,
155
- );
156
- }
157
-
158
- async getWorkspaceArtifact(
142
+ /** Exact Site-version gateway call. Keep this client on the authenticated host;
143
+ * the API enforces live viewer access and the version's declared tool allowlist. */
144
+ async callWorkspaceSiteTool(
159
145
  workspaceId: string,
160
- artifactId: string,
161
- ): Promise<WorkspaceArtifactDetailResponse> {
162
- return await this.requestJson<WorkspaceArtifactDetailResponse>(
163
- "GET",
164
- `/v1/workspaces/${workspaceId}/published-artifacts/${encodeURIComponent(artifactId)}`,
146
+ request: SiteToolCallRequest,
147
+ options: { signal?: AbortSignal } = {},
148
+ ): Promise<ToolGatewayCallResponse> {
149
+ return this.requestJson<ToolGatewayCallResponse>(
150
+ "POST",
151
+ `/v1/workspaces/${encodeURIComponent(workspaceId)}/tools/calls`,
152
+ request,
153
+ undefined,
154
+ options,
165
155
  );
166
156
  }
167
157
 
168
158
  async getWorkspaceArtifactContent(
169
159
  workspaceId: string,
170
160
  artifactId: string,
171
- versionId?: string,
161
+ versionOrOptions?: string | { versionId?: string; signal?: AbortSignal },
172
162
  ): Promise<WorkspaceArtifactContentResponse> {
173
- const query = versionId ? `?versionId=${encodeURIComponent(versionId)}` : "";
163
+ const options =
164
+ typeof versionOrOptions === "string"
165
+ ? { versionId: versionOrOptions }
166
+ : (versionOrOptions ?? {});
167
+ const query = options.versionId ? `?versionId=${encodeURIComponent(options.versionId)}` : "";
174
168
  return await this.requestJson<WorkspaceArtifactContentResponse>(
175
169
  "GET",
176
- `/v1/workspaces/${workspaceId}/published-artifacts/${encodeURIComponent(artifactId)}/content${query}`,
170
+ `/v1/workspaces/${encodeURIComponent(workspaceId)}/published-artifacts/${encodeURIComponent(artifactId)}/content${query}`,
171
+ undefined,
172
+ undefined,
173
+ options,
177
174
  );
178
175
  }
179
176
 
180
177
  async createWorkspaceArtifact(
181
178
  workspaceId: string,
182
179
  request: CreateWorkspaceArtifactRequest,
180
+ options: { signal?: AbortSignal } = {},
183
181
  ): Promise<WorkspaceArtifactMutationResponse> {
184
182
  return await this.requestJson<WorkspaceArtifactMutationResponse>(
185
183
  "POST",
186
- `/v1/workspaces/${workspaceId}/published-artifacts`,
184
+ `/v1/workspaces/${encodeURIComponent(workspaceId)}/published-artifacts`,
187
185
  request,
186
+ undefined,
187
+ options,
188
188
  );
189
189
  }
190
190
 
@@ -192,23 +192,14 @@ export class OpenGeniClient extends OpenGeniCoreClient {
192
192
  workspaceId: string,
193
193
  artifactId: string,
194
194
  request: PublishWorkspaceArtifactVersionRequest,
195
+ options: { signal?: AbortSignal } = {},
195
196
  ): Promise<WorkspaceArtifactMutationResponse> {
196
197
  return await this.requestJson<WorkspaceArtifactMutationResponse>(
197
198
  "POST",
198
- `/v1/workspaces/${workspaceId}/published-artifacts/${encodeURIComponent(artifactId)}/versions`,
199
- request,
200
- );
201
- }
202
-
203
- async rollbackWorkspaceArtifact(
204
- workspaceId: string,
205
- artifactId: string,
206
- request: RollbackWorkspaceArtifactRequest,
207
- ): Promise<WorkspaceArtifactMutationResponse> {
208
- return await this.requestJson<WorkspaceArtifactMutationResponse>(
209
- "POST",
210
- `/v1/workspaces/${workspaceId}/published-artifacts/${encodeURIComponent(artifactId)}/rollback`,
199
+ `/v1/workspaces/${encodeURIComponent(workspaceId)}/published-artifacts/${encodeURIComponent(artifactId)}/versions`,
211
200
  request,
201
+ undefined,
202
+ options,
212
203
  );
213
204
  }
214
205
  }
package/src/artifacts.ts CHANGED
@@ -14,4 +14,10 @@ export type {
14
14
  ReadEditableArtifactMaterializationOptions,
15
15
  ReadEditableArtifactResourceOptions,
16
16
  } from "./editable-artifact-resources";
17
- export type { FetchLike, OpenGeniClientOptions, OpenGeniRequestOptions } from "./client";
17
+ export type {
18
+ FetchLike,
19
+ FetchResponse,
20
+ GetSessionOptions,
21
+ OpenGeniClientOptions,
22
+ OpenGeniRequestOptions,
23
+ } from "./client";
@@ -0,0 +1,124 @@
1
+ import type {
2
+ AutomationRun,
3
+ AutomationSource,
4
+ AutomationTrigger,
5
+ AutomationWebhookResult,
6
+ CreateAutomationSourceRequest,
7
+ CreateAutomationTriggerRequest,
8
+ TriggerAutomationManuallyRequest,
9
+ UpdateAutomationSourceRequest,
10
+ UpdateAutomationTriggerRequest,
11
+ } from "@opengeni/contracts";
12
+ import type { OpenGeniClient as OpenGeniCoreClient } from "./client";
13
+
14
+ export type OpenGeniAutomationsTransport = Pick<OpenGeniCoreClient, "requestJson">;
15
+
16
+ export class OpenGeniAutomationsClient {
17
+ constructor(private readonly client: OpenGeniAutomationsTransport) {}
18
+
19
+ async listSources(workspaceId: string): Promise<AutomationSource[]> {
20
+ const result = await this.client.requestJson<{ sources: AutomationSource[] }>(
21
+ "GET",
22
+ `/v1/workspaces/${encodeURIComponent(workspaceId)}/automations/sources`,
23
+ );
24
+ return result.sources;
25
+ }
26
+
27
+ async createSource(
28
+ workspaceId: string,
29
+ request: CreateAutomationSourceRequest,
30
+ ): Promise<AutomationSource> {
31
+ return await this.client.requestJson(
32
+ "POST",
33
+ `/v1/workspaces/${encodeURIComponent(workspaceId)}/automations/sources`,
34
+ request,
35
+ );
36
+ }
37
+
38
+ async updateSource(
39
+ workspaceId: string,
40
+ sourceId: string,
41
+ request: UpdateAutomationSourceRequest,
42
+ ): Promise<AutomationSource> {
43
+ return await this.client.requestJson(
44
+ "PATCH",
45
+ `/v1/workspaces/${encodeURIComponent(workspaceId)}/automations/sources/${encodeURIComponent(sourceId)}`,
46
+ request,
47
+ );
48
+ }
49
+
50
+ async disableSource(workspaceId: string, sourceId: string): Promise<void> {
51
+ await this.client.requestJson<void>(
52
+ "DELETE",
53
+ `/v1/workspaces/${encodeURIComponent(workspaceId)}/automations/sources/${encodeURIComponent(sourceId)}`,
54
+ undefined,
55
+ {},
56
+ { responseType: "void" },
57
+ );
58
+ }
59
+
60
+ async listTriggers(workspaceId: string): Promise<AutomationTrigger[]> {
61
+ const result = await this.client.requestJson<{ triggers: AutomationTrigger[] }>(
62
+ "GET",
63
+ `/v1/workspaces/${encodeURIComponent(workspaceId)}/automations/triggers`,
64
+ );
65
+ return result.triggers;
66
+ }
67
+
68
+ async createTrigger(
69
+ workspaceId: string,
70
+ request: CreateAutomationTriggerRequest,
71
+ ): Promise<AutomationTrigger> {
72
+ return await this.client.requestJson(
73
+ "POST",
74
+ `/v1/workspaces/${encodeURIComponent(workspaceId)}/automations/triggers`,
75
+ request,
76
+ );
77
+ }
78
+
79
+ async updateTrigger(
80
+ workspaceId: string,
81
+ triggerId: string,
82
+ request: UpdateAutomationTriggerRequest,
83
+ ): Promise<AutomationTrigger> {
84
+ return await this.client.requestJson(
85
+ "PATCH",
86
+ `/v1/workspaces/${encodeURIComponent(workspaceId)}/automations/triggers/${encodeURIComponent(triggerId)}`,
87
+ request,
88
+ );
89
+ }
90
+
91
+ async disableTrigger(
92
+ workspaceId: string,
93
+ triggerId: string,
94
+ expectedRevision: number,
95
+ ): Promise<void> {
96
+ await this.client.requestJson<void>(
97
+ "DELETE",
98
+ `/v1/workspaces/${encodeURIComponent(workspaceId)}/automations/triggers/${encodeURIComponent(triggerId)}?expectedRevision=${expectedRevision}`,
99
+ undefined,
100
+ {},
101
+ { responseType: "void" },
102
+ );
103
+ }
104
+
105
+ async listRuns(workspaceId: string): Promise<AutomationRun[]> {
106
+ const result = await this.client.requestJson<{ runs: AutomationRun[] }>(
107
+ "GET",
108
+ `/v1/workspaces/${encodeURIComponent(workspaceId)}/automations/runs`,
109
+ );
110
+ return result.runs;
111
+ }
112
+
113
+ async triggerManually(
114
+ workspaceId: string,
115
+ sourceId: string,
116
+ request: TriggerAutomationManuallyRequest,
117
+ ): Promise<AutomationWebhookResult> {
118
+ return await this.client.requestJson(
119
+ "POST",
120
+ `/v1/workspaces/${encodeURIComponent(workspaceId)}/automations/sources/${encodeURIComponent(sourceId)}/events`,
121
+ request,
122
+ );
123
+ }
124
+ }
@@ -0,0 +1,15 @@
1
+ export { OpenGeniAutomationsClient } from "./automations-client";
2
+ export type { OpenGeniAutomationsTransport } from "./automations-client";
3
+ export type {
4
+ AutomationAcceptedExecution,
5
+ AutomationNormalizedEvent,
6
+ AutomationRun,
7
+ AutomationSource,
8
+ AutomationTrigger,
9
+ AutomationWebhookResult,
10
+ CreateAutomationSourceRequest,
11
+ CreateAutomationTriggerRequest,
12
+ TriggerAutomationManuallyRequest,
13
+ UpdateAutomationSourceRequest,
14
+ UpdateAutomationTriggerRequest,
15
+ } from "@opengeni/contracts";
package/src/browser.ts ADDED
@@ -0,0 +1,54 @@
1
+ /** Browser-console client. Optional SDK surfaces must not enter this eager graph. */
2
+ export { OpenGeniClient as OpenGeniBrowserClient } from "./client";
3
+ export type {
4
+ SessionMessageSearchRequest,
5
+ SessionMessageSearchMatch,
6
+ SessionMessageSearchResponse,
7
+ SessionMessagePreview,
8
+ SessionMessagePreviewReference,
9
+ } from "./session-message-search";
10
+ export {
11
+ OpenGeniToolCallError,
12
+ OpenGeniToolReapprovalRequiredError,
13
+ OpenGeniToolsClient,
14
+ } from "./tools";
15
+ export type {
16
+ OpenGeniGeneratedTools,
17
+ OpenGeniDynamicToolNode,
18
+ OpenGeniToolCallOptions,
19
+ OpenGeniToolFunction,
20
+ OpenGeniToolsFacade,
21
+ OpenGeniWorkspaceTools,
22
+ } from "./tools";
23
+ export type {
24
+ FetchLike,
25
+ FetchResponse,
26
+ GetSessionOptions,
27
+ OpenGeniClientOptions,
28
+ OpenGeniRequestOptions,
29
+ SendMessageInput,
30
+ SteerMessageResult,
31
+ TranscribeAudioInput,
32
+ WorkspaceControlEventPage,
33
+ } from "./client";
34
+ export {
35
+ OpenGeniApiContractMismatchError,
36
+ OpenGeniApiError,
37
+ OpenGeniSetupError,
38
+ OpenGeniAllowanceExhaustedError,
39
+ OpenGeniSecureContextRequiredError,
40
+ OpenGeniSessionListCursorError,
41
+ OpenGeniStreamError,
42
+ formatErrorMessage,
43
+ isRetryableStreamError,
44
+ } from "./errors";
45
+ export type { OpenGeniSecureContextRequiredReason } from "./errors";
46
+ export { resolveWorkspaceVoiceInputEnabled } from "./transcription";
47
+ export { OPENGENI_API_CONTRACT_HEADER, OPENGENI_API_CONTRACT_REVISION } from "./types";
48
+
49
+ export type {
50
+ ConnectorToolPermission,
51
+ ConnectorToolPermissionEntry,
52
+ ConnectorToolPermissionsResponse,
53
+ UpdateConnectorToolPermissionsRequest,
54
+ } from "./types";