@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
@@ -3,6 +3,7 @@ import type {
3
3
  GeneratedVideoReceipt,
4
4
  MediaGenerationResult,
5
5
  RetainedArtifactReference,
6
+ SandboxFileArtifactReceipt,
6
7
  } from "./types";
7
8
 
8
9
  const UUID = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/;
@@ -15,6 +16,94 @@ const MAX_VIDEO_BYTES = 512 * 1024 * 1024;
15
16
  const MAX_DIMENSION = 16_384;
16
17
  const MAX_PIXELS = 67_108_864;
17
18
  const MAX_RANGE_BYTES = 1024 * 1024;
19
+ const MAX_SANDBOX_FILE_BYTES = 25 * 1024 * 1024 - 1;
20
+
21
+ /** Zero-dependency validation for a permanent generic workspace-file receipt. */
22
+ export function parseRetainedWorkspaceFileReference(
23
+ value: unknown,
24
+ expectedWorkspaceId?: string,
25
+ ): RetainedArtifactReference | null {
26
+ if (!recordWithKeys(value, WORKSPACE_FILE_REFERENCE_KEYS)) return null;
27
+ const artifact = value as Record<string, unknown>;
28
+ if (
29
+ artifact.available !== true ||
30
+ artifact.kind !== "file" ||
31
+ typeof artifact.artifactId !== "string" ||
32
+ !UUID.test(artifact.artifactId) ||
33
+ typeof artifact.contentType !== "string" ||
34
+ !/^[a-z0-9][a-z0-9!#$&^_.+-]{0,62}\/[a-z0-9][a-z0-9!#$&^_.+-]{0,62}$/.test(
35
+ artifact.contentType,
36
+ ) ||
37
+ !safeIntegerBetween(artifact.originalBytes, 1, MAX_SANDBOX_FILE_BYTES) ||
38
+ typeof artifact.sha256 !== "string" ||
39
+ !SHA256.test(artifact.sha256) ||
40
+ typeof artifact.retainedAt !== "string" ||
41
+ artifact.retainedAt.length > 64 ||
42
+ !ISO_DATETIME_WITH_OFFSET.test(artifact.retainedAt) ||
43
+ !Number.isFinite(Date.parse(artifact.retainedAt)) ||
44
+ !recordWithKeys(artifact.retention, RETENTION_KEYS) ||
45
+ !recordWithKeys(artifact.retrieval, RETRIEVAL_KEYS)
46
+ ) {
47
+ return null;
48
+ }
49
+ const retention = artifact.retention as Record<string, unknown>;
50
+ if (retention.policy !== "workspace_file" || retention.expiresAt !== null) return null;
51
+ const retrieval = artifact.retrieval as Record<string, unknown>;
52
+ if (
53
+ retrieval.method !== "GET" ||
54
+ retrieval.acceptRanges !== "bytes" ||
55
+ retrieval.maxRangeBytes !== MAX_RANGE_BYTES ||
56
+ typeof retrieval.path !== "string" ||
57
+ retrieval.path.length > 256
58
+ ) {
59
+ return null;
60
+ }
61
+ const match = WORKSPACE_PATH.exec(retrieval.path);
62
+ if (
63
+ !match ||
64
+ !UUID.test(match[1] ?? "") ||
65
+ match[2] !== artifact.artifactId ||
66
+ (expectedWorkspaceId !== undefined && match[1] !== expectedWorkspaceId)
67
+ ) {
68
+ return null;
69
+ }
70
+ return value as RetainedArtifactReference;
71
+ }
72
+
73
+ /** Parse the closed result returned by sandbox_file_publish and the session API. */
74
+ export function parseSandboxFileArtifactReceipt(
75
+ value: unknown,
76
+ expectedWorkspaceId?: string,
77
+ ): SandboxFileArtifactReceipt | null {
78
+ if (typeof value === "string" && value.length <= 8_192) {
79
+ try {
80
+ return parseSandboxFileArtifactReceipt(JSON.parse(value), expectedWorkspaceId);
81
+ } catch {
82
+ return null;
83
+ }
84
+ }
85
+ if (!recordWithKeys(value, SANDBOX_FILE_RECEIPT_KEYS)) return null;
86
+ const artifact = parseRetainedWorkspaceFileReference(value.artifact, expectedWorkspaceId);
87
+ const pathSegments = typeof value.sandboxPath === "string" ? value.sandboxPath.split("/") : [];
88
+ if (
89
+ value.type !== "sandbox_file" ||
90
+ typeof value.sandboxPath !== "string" ||
91
+ !value.sandboxPath.startsWith("/workspace/") ||
92
+ value.sandboxPath.length > 4_096 ||
93
+ value.sandboxPath.includes("\0") ||
94
+ pathSegments.some(
95
+ (segment, index) => index > 1 && (!segment || segment === "." || segment === ".."),
96
+ ) ||
97
+ typeof value.filename !== "string" ||
98
+ value.filename.length < 1 ||
99
+ value.filename.length > 1_024 ||
100
+ pathSegments.at(-1) !== value.filename ||
101
+ !artifact
102
+ ) {
103
+ return null;
104
+ }
105
+ return value as SandboxFileArtifactReceipt;
106
+ }
18
107
 
19
108
  /** Zero-dependency validation for the SDK's permanent generated-image wire receipt. */
20
109
  export function parseRetainedGeneratedImageReference(
@@ -272,10 +361,22 @@ const GENERATED_IMAGE_REFERENCE_KEYS = new Set([
272
361
  "retention",
273
362
  "retrieval",
274
363
  ]);
364
+ const WORKSPACE_FILE_REFERENCE_KEYS = new Set([
365
+ "available",
366
+ "artifactId",
367
+ "kind",
368
+ "contentType",
369
+ "originalBytes",
370
+ "sha256",
371
+ "retainedAt",
372
+ "retention",
373
+ "retrieval",
374
+ ]);
275
375
  const DIMENSION_KEYS = new Set(["width", "height"]);
276
376
  const RETENTION_KEYS = new Set(["policy", "expiresAt"]);
277
377
  const RETRIEVAL_KEYS = new Set(["method", "path", "acceptRanges", "maxRangeBytes"]);
278
378
  const GENERATED_IMAGE_RECEIPT_KEYS = new Set(["type", "artifact", "sandboxPath"]);
379
+ const SANDBOX_FILE_RECEIPT_KEYS = new Set(["type", "sandboxPath", "filename", "artifact"]);
279
380
  const GENERATED_VIDEO_RECEIPT_KEYS = new Set([
280
381
  "type",
281
382
  "schemaVersion",
@@ -0,0 +1,84 @@
1
+ import type { OpenGeniClient } from "./client";
2
+ import type {
3
+ AppendArchivedSessionEventsRequest,
4
+ AppendArchivedSessionEventsResponse,
5
+ ImportArchivedSessionRequest,
6
+ ImportArchivedSessionResponse,
7
+ } from "@opengeni/contracts";
8
+
9
+ export type {
10
+ ArchivedSessionImportEvent,
11
+ AppendArchivedSessionEventsRequest,
12
+ AppendArchivedSessionEventsResponse,
13
+ ImportArchivedSessionRequest,
14
+ ImportArchivedSessionResponse,
15
+ SessionImportedArchive,
16
+ } from "@opengeni/contracts";
17
+
18
+ type SessionHistoryImportClient = Pick<OpenGeniClient, "requestJson">;
19
+
20
+ /**
21
+ * Server-only migration of a read-only archive, not model-facing conversation
22
+ * history. Use an asUser client to preserve the verified creator/owner. Persist
23
+ * importId and retry the exact request after an uncertain outcome.
24
+ * Requires sessions:create in the authenticated actor's permissions.
25
+ */
26
+ export function importArchivedSession(
27
+ client: SessionHistoryImportClient,
28
+ workspaceId: string,
29
+ request: ImportArchivedSessionRequest,
30
+ ): Promise<ImportArchivedSessionResponse> {
31
+ return client.requestJson(
32
+ "POST",
33
+ `/v1/workspaces/${encodeURIComponent(workspaceId)}/session-imports`,
34
+ request,
35
+ );
36
+ }
37
+
38
+ /**
39
+ * Append historical events at the acknowledged nextOffset. Retrying the exact
40
+ * batchId, offset and events replays its receipt; conflicting reuse returns 409.
41
+ * Each request accepts at most 100 events / 1 MiB, with 256 KiB per event.
42
+ * Requires sessions:control and the same authenticated importer.
43
+ */
44
+ export function appendArchivedSessionEvents(
45
+ client: SessionHistoryImportClient,
46
+ workspaceId: string,
47
+ importId: string,
48
+ request: AppendArchivedSessionEventsRequest,
49
+ ): Promise<AppendArchivedSessionEventsResponse> {
50
+ return client.requestJson(
51
+ "POST",
52
+ `/v1/workspaces/${encodeURIComponent(workspaceId)}/session-imports/${encodeURIComponent(importId)}/events`,
53
+ request,
54
+ );
55
+ }
56
+
57
+ /** Import through an existing external tenant mapping; this does not onboard it. */
58
+ export function importExternalWorkspaceArchivedSession(
59
+ client: SessionHistoryImportClient,
60
+ source: string,
61
+ externalId: string,
62
+ request: ImportArchivedSessionRequest,
63
+ ): Promise<ImportArchivedSessionResponse> {
64
+ return client.requestJson(
65
+ "POST",
66
+ `/v1/workspaces/external/${encodeURIComponent(source)}/${encodeURIComponent(externalId)}/session-imports`,
67
+ request,
68
+ );
69
+ }
70
+
71
+ /** Append to an archive through the same external tenant mapping and actor. */
72
+ export function appendExternalWorkspaceArchivedSessionEvents(
73
+ client: SessionHistoryImportClient,
74
+ source: string,
75
+ externalId: string,
76
+ importId: string,
77
+ request: AppendArchivedSessionEventsRequest,
78
+ ): Promise<AppendArchivedSessionEventsResponse> {
79
+ return client.requestJson(
80
+ "POST",
81
+ `/v1/workspaces/external/${encodeURIComponent(source)}/${encodeURIComponent(externalId)}/session-imports/${encodeURIComponent(importId)}/events`,
82
+ request,
83
+ );
84
+ }
@@ -0,0 +1 @@
1
+ export { sessionListEntry } from "@opengeni/contracts/session-list-entries";
@@ -0,0 +1,47 @@
1
+ /** Literal Unicode case-insensitive substring. Whitespace is significant. */
2
+ export type SessionMessageSearchRequest = {
3
+ query: string;
4
+ sessionId?: string | undefined;
5
+ /** Workspace-only first hit per session; cannot combine with sessionId. */
6
+ groupBy?: "session" | undefined;
7
+ archiveStatus?: "active" | "archived" | "all" | undefined;
8
+ limit?: number | undefined;
9
+ cursor?: string | undefined;
10
+ };
11
+
12
+ export type SessionMessageSearchMatch = {
13
+ sessionId: string;
14
+ sessionTitle: string | null;
15
+ eventId: string;
16
+ sequence: number;
17
+ turnId: string | null;
18
+ role: "user" | "assistant";
19
+ messageId: string | null;
20
+ /** Zero-based UTF-16 offset in the complete visible message. */
21
+ messageMatchOffset: number;
22
+ /** Zero-based UTF-16 offsets in text; matchEnd is exclusive. */
23
+ snippet: { text: string; matchStart: number; matchEnd: number };
24
+ };
25
+
26
+ export type SessionMessageSearchResponse = {
27
+ matches: SessionMessageSearchMatch[];
28
+ nextCursor: string | null;
29
+ /** Empty advancing pages are valid. Continue until false. */
30
+ hasMore: boolean;
31
+ /** Cumulative distinct messages visited in this live traversal. */
32
+ scannedMessages: number;
33
+ /** Cumulative matching messages, or session representatives with groupBy=session. */
34
+ matchedMessageCount: number;
35
+ /** Cumulative occurrences, or session representatives with groupBy=session. */
36
+ matchedOccurrenceCount: number;
37
+ /** True only on exhaustion. Concurrent mutations require a fresh traversal. */
38
+ countIsExact: boolean;
39
+ };
40
+
41
+ /** Exact selected event reference from a search match; no payload fields are read. */
42
+ export type SessionMessagePreviewReference = { eventId: string; sequence: number };
43
+
44
+ /** A complete visible message, or an explicit over-12,000-UTF-16-unit result. */
45
+ export type SessionMessagePreview =
46
+ | { status: "available"; text: string }
47
+ | { status: "unavailable" };
@@ -0,0 +1,64 @@
1
+ import type { OpenGeniEmbeddingClient } from "./embedding-client";
2
+ import type { OpenGeniRequestOptions, FetchResponse } from "./client";
3
+ import type { AccessGrant } from "./types";
4
+
5
+ /** Maximum actual UTF-8 bytes forwarded for one embedded Site HTML response. */
6
+ export const SESSION_PROXY_SITE_HTML_MAX_BYTES = 25 * 1024 * 1024;
7
+
8
+ /** A streaming Site download exceeded the host proxy's actual-byte ceiling. */
9
+ export class SessionProxySiteHtmlTooLargeError extends Error {
10
+ readonly code = "site_html_too_large";
11
+ readonly limitBytes = SESSION_PROXY_SITE_HTML_MAX_BYTES;
12
+
13
+ constructor() {
14
+ super(`Site HTML exceeds the ${SESSION_PROXY_SITE_HTML_MAX_BYTES}-byte proxy limit.`);
15
+ this.name = "SessionProxySiteHtmlTooLargeError";
16
+ }
17
+ }
18
+
19
+ /** Server-only effective grant read; never derive external authority from access/me snapshots. */
20
+ export function getSessionProxyWorkspaceGrant(
21
+ client: Pick<OpenGeniEmbeddingClient, "requestJson">,
22
+ workspaceId: string,
23
+ options: OpenGeniRequestOptions = {},
24
+ ): Promise<AccessGrant> {
25
+ return client.requestJson(
26
+ "GET",
27
+ `/v1/workspaces/${encodeURIComponent(workspaceId)}/access/grant`,
28
+ undefined,
29
+ {},
30
+ options,
31
+ );
32
+ }
33
+
34
+ /** Exact association read. The API reauthorizes the source session on every call. */
35
+ export function getSessionProxyArtifactAssociation(
36
+ client: Pick<OpenGeniEmbeddingClient, "requestJson">,
37
+ workspaceId: string,
38
+ sessionId: string,
39
+ kind: "editable" | "site",
40
+ artifactId: string,
41
+ options: OpenGeniRequestOptions = {},
42
+ ): Promise<{ sessionId: string; artifactId: string; kind: "editable" | "site" }> {
43
+ return client.requestJson(
44
+ "GET",
45
+ `/v1/workspaces/${encodeURIComponent(workspaceId)}/sessions/${encodeURIComponent(sessionId)}/artifact-associations/${encodeURIComponent(artifactId)}`,
46
+ undefined,
47
+ { kind },
48
+ options,
49
+ );
50
+ }
51
+
52
+ /** Authenticated response stream for the server proxy; does not buffer Site HTML. */
53
+ export function downloadSessionProxySiteHtml(
54
+ client: Pick<OpenGeniEmbeddingClient, "requestJsonResponse">,
55
+ workspaceId: string,
56
+ artifactId: string,
57
+ options: { versionId: string; signal?: AbortSignal },
58
+ ): Promise<FetchResponse> {
59
+ return client.requestJsonResponse(
60
+ `/v1/workspaces/${encodeURIComponent(workspaceId)}/published-artifacts/${encodeURIComponent(artifactId)}/html`,
61
+ { versionId: options.versionId },
62
+ options,
63
+ );
64
+ }