@opengeni/sdk 3.3.2-canary.1 → 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 (295) 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 +6 -2
  25. package/dist/browser.js +25 -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-E5BNEG2D.js → chunk-NCU5OAN7.js} +27 -2
  53. package/dist/chunk-NCU5OAN7.js.map +1 -0
  54. package/dist/{chunk-BESZFWMU.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-GY6RQPCG.js → chunk-S2NLS3ES.js} +3598 -1278
  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-TFCLHRZK.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-6NEPJ7NC.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-QTBAMHEF.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 +1056 -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 +6 -2
  91. package/dist/core.js +23 -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 +64 -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 +61 -11
  110. package/dist/index.js +555 -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/organization-integration-policy.d.ts +26 -0
  127. package/dist/organization-integration-policy.js +26 -0
  128. package/dist/organization-integration-policy.js.map +1 -0
  129. package/dist/pr-review-client.d.ts +1 -1
  130. package/dist/pr-review.d.ts +1 -1
  131. package/dist/pr-review.js.map +1 -1
  132. package/dist/preference-registry.d.ts +1 -1
  133. package/dist/prepared-mcp-setup.d.ts +5 -0
  134. package/dist/proxy.d.ts +13 -11
  135. package/dist/realtime.d.ts +1 -1
  136. package/dist/realtime.js +253 -7
  137. package/dist/realtime.js.map +1 -1
  138. package/dist/session-history-import.d.ts +22 -0
  139. package/dist/session-history-import.js +36 -0
  140. package/dist/session-history-import.js.map +1 -0
  141. package/dist/session-list-entries.d.ts +1 -0
  142. package/dist/session-list-entries.js +7 -0
  143. package/dist/session-list-entries.js.map +1 -0
  144. package/dist/session-message-search.d.ts +53 -0
  145. package/dist/session-proxy-client.d.ts +28 -0
  146. package/dist/session-proxy.d.ts +334 -0
  147. package/dist/session-proxy.js +24 -0
  148. package/dist/session-proxy.js.map +1 -0
  149. package/dist/session-titles.d.ts +2 -28
  150. package/dist/session-usage-limits.d.ts +10 -0
  151. package/dist/session-usage-limits.js +43 -0
  152. package/dist/session-usage-limits.js.map +1 -0
  153. package/dist/shared-catalog-loader.d.ts +34 -0
  154. package/dist/site-ai.d.ts +35 -0
  155. package/dist/site-bridge-host.d.ts +112 -0
  156. package/dist/site-bridge-host.js +286 -0
  157. package/dist/site-bridge-host.js.map +1 -0
  158. package/dist/site-browser-entry.d.ts +1 -0
  159. package/dist/site-browser-runtime.gen.d.ts +1 -0
  160. package/dist/site-data.d.ts +178 -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 +17 -0
  166. package/dist/site-sql.d.ts +31 -0
  167. package/dist/site-tool-bridge.d.ts +57 -0
  168. package/dist/site.d.ts +186 -0
  169. package/dist/site.js +63 -0
  170. package/dist/site.js.map +1 -0
  171. package/dist/skills.d.ts +75 -0
  172. package/dist/sse.d.ts +1 -1
  173. package/dist/stream.d.ts +2 -0
  174. package/dist/tenant-workspaces.d.ts +47 -0
  175. package/dist/tenant-workspaces.js +8 -0
  176. package/dist/tenant-workspaces.js.map +1 -0
  177. package/dist/tool-auth.d.ts +87 -0
  178. package/dist/tool-auth.js +23 -0
  179. package/dist/tool-auth.js.map +1 -0
  180. package/dist/tool-display-metadata.d.ts +3 -0
  181. package/dist/tools-37DCTCNZ.js +12 -0
  182. package/dist/tools-37DCTCNZ.js.map +1 -0
  183. package/dist/tools.d.ts +81 -0
  184. package/dist/transcription.d.ts +1 -1
  185. package/dist/types.d.ts +2785 -592
  186. package/dist/usage-allowances.d.ts +36 -0
  187. package/dist/usage-allowances.js +80 -0
  188. package/dist/usage-allowances.js.map +1 -0
  189. package/dist/vault-types.d.ts +324 -0
  190. package/dist/vaults-api.d.ts +65 -0
  191. package/dist/workspace-artifacts.d.ts +47 -5
  192. package/dist/workspace-instruction-policies.d.ts +2 -2
  193. package/dist/workspace-integrations.d.ts +74 -0
  194. package/dist/workspace-integrations.js +67 -0
  195. package/dist/workspace-integrations.js.map +1 -0
  196. package/dist/workspace-state.d.ts +8 -71
  197. package/package.json +99 -5
  198. package/src/adapters/express.ts +136 -0
  199. package/src/adapters/hono.ts +18 -0
  200. package/src/adapters/next.ts +42 -0
  201. package/src/allowance-refusal.ts +5 -0
  202. package/src/app-links.ts +117 -0
  203. package/src/artifact-catalog.ts +51 -0
  204. package/src/artifact-client.ts +40 -49
  205. package/src/artifacts.ts +1 -0
  206. package/src/automations-client.ts +8 -2
  207. package/src/azure-live-transport.ts +286 -0
  208. package/src/browser.ts +35 -0
  209. package/src/chat/fold.ts +431 -0
  210. package/src/chat/handler.ts +240 -0
  211. package/src/chat/http.ts +257 -0
  212. package/src/chat/ids.ts +85 -0
  213. package/src/chat/index.ts +88 -0
  214. package/src/chat/openai.ts +439 -0
  215. package/src/chat/opengeni.ts +737 -0
  216. package/src/chat/types.ts +219 -0
  217. package/src/chat/vercel.ts +204 -0
  218. package/src/chats.ts +16 -0
  219. package/src/client.ts +5595 -1847
  220. package/src/codex-realtime-controller.ts +163 -8
  221. package/src/codex-realtime-v3-wire.ts +4 -3
  222. package/src/codex-realtime-v3.ts +12 -3
  223. package/src/codex-realtime.ts +11 -3
  224. package/src/company-brain.ts +0 -40
  225. package/src/core.ts +18 -0
  226. package/src/deprecation.ts +149 -0
  227. package/src/document-authority-client.ts +104 -1
  228. package/src/editable-artifacts/controller.ts +36 -2
  229. package/src/editable-artifacts/index.ts +1 -0
  230. package/src/editable-artifacts/types.ts +29 -16
  231. package/src/embedding-client.ts +519 -0
  232. package/src/errors.ts +281 -5
  233. package/src/external-vault-receiver.ts +914 -0
  234. package/src/feedback.ts +20 -0
  235. package/src/gateway-realtime-transport.ts +3 -3
  236. package/src/github-repositories.ts +60 -0
  237. package/src/index.ts +592 -65
  238. package/src/insights-usage.ts +64 -0
  239. package/src/interaction.ts +315 -93
  240. package/src/knowledge.ts +72 -0
  241. package/src/known-tools.ts +279 -0
  242. package/src/message-links.ts +178 -0
  243. package/src/model-context.ts +113 -0
  244. package/src/model-display.ts +11 -0
  245. package/src/organization-integration-policy.ts +54 -0
  246. package/src/pr-review-client.ts +1 -1
  247. package/src/pr-review.ts +1 -1
  248. package/src/preference-registry.ts +2 -0
  249. package/src/prepared-mcp-setup.ts +123 -0
  250. package/src/proxy.ts +23 -12
  251. package/src/realtime.ts +15 -6
  252. package/src/session-history-import.ts +84 -0
  253. package/src/session-list-entries.ts +1 -0
  254. package/src/session-message-search.ts +47 -0
  255. package/src/session-proxy-client.ts +68 -0
  256. package/src/session-proxy.ts +2098 -0
  257. package/src/session-titles.ts +8 -82
  258. package/src/session-usage-limits.ts +71 -0
  259. package/src/shared-catalog-loader.ts +169 -0
  260. package/src/site-ai.ts +284 -0
  261. package/src/site-bridge-host.ts +422 -0
  262. package/src/site-browser-entry.ts +6 -0
  263. package/src/site-browser-runtime.gen.ts +2 -0
  264. package/src/site-data.ts +372 -0
  265. package/src/site-document.test.ts +64 -0
  266. package/src/site-document.ts +18 -0
  267. package/src/site-http.ts +171 -0
  268. package/src/site-sql.ts +153 -0
  269. package/src/site-tool-bridge.ts +401 -0
  270. package/src/site.ts +878 -0
  271. package/src/skills.ts +69 -0
  272. package/src/sse.ts +9 -3
  273. package/src/stream.ts +33 -10
  274. package/src/tenant-workspaces.ts +148 -0
  275. package/src/tool-auth.ts +301 -0
  276. package/src/tool-display-metadata.ts +27 -0
  277. package/src/tools.ts +452 -0
  278. package/src/transcription.ts +3 -0
  279. package/src/types.ts +3142 -594
  280. package/src/usage-allowances.ts +189 -0
  281. package/src/vault-types.ts +379 -0
  282. package/src/vaults-api.ts +339 -0
  283. package/src/workspace-artifacts.ts +55 -6
  284. package/src/workspace-instruction-policies.ts +2 -1
  285. package/src/workspace-integrations.ts +402 -0
  286. package/src/workspace-state.ts +8 -82
  287. package/dist/chunk-6NEPJ7NC.js.map +0 -1
  288. package/dist/chunk-BESZFWMU.js.map +0 -1
  289. package/dist/chunk-E5BNEG2D.js.map +0 -1
  290. package/dist/chunk-GY6RQPCG.js.map +0 -1
  291. package/dist/chunk-OO5LPTO7.js +0 -132
  292. package/dist/chunk-OO5LPTO7.js.map +0 -1
  293. package/dist/chunk-QTBAMHEF.js.map +0 -1
  294. package/dist/chunk-TFCLHRZK.js.map +0 -1
  295. package/dist/chunk-VYCTL62C.js.map +0 -1
@@ -0,0 +1,561 @@
1
+ import {
2
+ OpenGeniApiError
3
+ } from "./chunk-7EWT3PV6.js";
4
+
5
+ // src/shared-catalog-loader.ts
6
+ function createSharedCatalogLoader(fetchCatalog) {
7
+ let snapshot = null;
8
+ let epoch = 0;
9
+ let refreshPending = false;
10
+ let inFlight = null;
11
+ let staleReload = null;
12
+ const start = () => {
13
+ if (inFlight && inFlight.epoch === epoch) return inFlight;
14
+ const refresh = refreshPending;
15
+ const load = {
16
+ epoch,
17
+ controller: new AbortController(),
18
+ waiters: 0,
19
+ settled: false
20
+ };
21
+ inFlight = load;
22
+ load.promise = (async () => {
23
+ try {
24
+ const next = await fetchCatalog(refresh, load.controller.signal);
25
+ if (load.epoch === epoch && !load.controller.signal.aborted) {
26
+ snapshot = next;
27
+ refreshPending = false;
28
+ }
29
+ return next;
30
+ } finally {
31
+ load.settled = true;
32
+ if (inFlight === load) inFlight = null;
33
+ }
34
+ })();
35
+ load.promise.catch(() => void 0);
36
+ return load;
37
+ };
38
+ const abandon = (load, reason) => {
39
+ if (inFlight === load) inFlight = null;
40
+ if (staleReload?.load === load) staleReload = null;
41
+ load.controller.abort(reason);
42
+ };
43
+ const wait = (load, signal) => {
44
+ if (signal?.aborted) return Promise.reject(abortReason(signal));
45
+ load.waiters += 1;
46
+ return new Promise((resolve, reject) => {
47
+ let released = false;
48
+ const release = () => {
49
+ if (released) return false;
50
+ released = true;
51
+ load.waiters -= 1;
52
+ signal?.removeEventListener("abort", onAbort);
53
+ return true;
54
+ };
55
+ const onAbort = () => {
56
+ if (!release()) return;
57
+ const reason = abortReason(signal);
58
+ reject(reason);
59
+ if (load.waiters === 0 && !load.settled) abandon(load, reason);
60
+ };
61
+ signal?.addEventListener("abort", onAbort, { once: true });
62
+ load.promise.then(
63
+ (value) => {
64
+ if (release()) resolve(value);
65
+ },
66
+ (error) => {
67
+ if (release()) reject(error);
68
+ }
69
+ );
70
+ });
71
+ };
72
+ const advance = () => {
73
+ snapshot = null;
74
+ epoch += 1;
75
+ refreshPending = true;
76
+ };
77
+ return {
78
+ async load(options = {}) {
79
+ options.signal?.throwIfAborted();
80
+ if (options.refresh) advance();
81
+ if (snapshot) return snapshot;
82
+ return await wait(start(), options.signal);
83
+ },
84
+ async reloadAfterStale(staleDigest, signal) {
85
+ signal?.throwIfAborted();
86
+ const shared = staleReload;
87
+ if (shared?.staleDigest === staleDigest && (shared.settled === null ? shared.load.epoch === epoch : shared.settled === snapshot)) {
88
+ return await wait(shared.load, signal);
89
+ }
90
+ advance();
91
+ const load = start();
92
+ const reload = {
93
+ staleDigest,
94
+ load,
95
+ settled: null
96
+ };
97
+ staleReload = reload;
98
+ load.promise.then(
99
+ (next) => {
100
+ if (staleReload !== reload) return;
101
+ if (next.digest === staleDigest) staleReload = null;
102
+ else reload.settled = next;
103
+ },
104
+ () => {
105
+ if (staleReload === reload) staleReload = null;
106
+ }
107
+ );
108
+ return await wait(load, signal);
109
+ },
110
+ invalidate(digest) {
111
+ if (snapshot?.digest === digest) advance();
112
+ }
113
+ };
114
+ }
115
+ function abortReason(signal) {
116
+ return signal.reason ?? new DOMException("The operation was aborted.", "AbortError");
117
+ }
118
+
119
+ // src/known-tools.ts
120
+ var targetKey = (target) => "identity" in target ? JSON.stringify(["identity", target.identity.serverId, target.identity.toolName]) : JSON.stringify(["path", ...target.path]);
121
+ var isToolDefinitionStale = (error) => {
122
+ if (typeof error !== "object" || error === null) return false;
123
+ if ("outcomeUnknown" in error && error.outcomeUnknown === true || "retryable" in error && error.retryable === false)
124
+ return false;
125
+ return error instanceof OpenGeniApiError ? error.status === 409 && error.details?.code === "tool_definition_stale" : typeof error === "object" && error !== null && "code" in error && error.code === "tool_definition_stale";
126
+ };
127
+ function createKnownWorkspaceTools(transport, workspaceId, createLegacy) {
128
+ const base = `/v1/workspaces/${encodeURIComponent(workspaceId)}/tools`;
129
+ let legacy;
130
+ const old = () => legacy ??= createLegacy();
131
+ const legacyTokens = /* @__PURE__ */ new Set();
132
+ const loaders = /* @__PURE__ */ new Map();
133
+ const snapshots = /* @__PURE__ */ new Map();
134
+ const revisions = /* @__PURE__ */ new Map();
135
+ let revisionSequence = 0;
136
+ const advance = (key) => {
137
+ if (!revisions.has(key) && revisions.size >= 256)
138
+ revisions.delete(revisions.keys().next().value);
139
+ const revision = ++revisionSequence;
140
+ revisions.set(key, revision);
141
+ return revision;
142
+ };
143
+ const approvals = /* @__PURE__ */ new Map();
144
+ const loader = (target) => {
145
+ const key = targetKey(target);
146
+ let value = loaders.get(key);
147
+ if (!value) {
148
+ value = createSharedCatalogLoader(async (_refresh, signal) => {
149
+ const result = await transport.requestJson(
150
+ "POST",
151
+ `${base}/resolve`,
152
+ { target },
153
+ {},
154
+ { signal }
155
+ );
156
+ return { ...result, digest: result.definitionDigest };
157
+ });
158
+ if (loaders.size >= 256) loaders.delete(loaders.keys().next().value);
159
+ loaders.set(key, value);
160
+ }
161
+ return value;
162
+ };
163
+ const remember = (target, tool, revision) => {
164
+ const key = targetKey(target);
165
+ if (revisions.get(key) !== revision) return;
166
+ if (snapshots.size >= 256) snapshots.delete(snapshots.keys().next().value);
167
+ snapshots.set(key, tool);
168
+ };
169
+ const resolve = async (target, options = {}) => {
170
+ if (options.siteArtifactId || options.siteVersionId)
171
+ return await transport.requestJson(
172
+ "POST",
173
+ `${base}/resolve`,
174
+ { target, siteArtifactId: options.siteArtifactId, siteVersionId: options.siteVersionId },
175
+ {},
176
+ options.signal ? { signal: options.signal } : {}
177
+ );
178
+ const key = targetKey(target);
179
+ const revision = advance(key);
180
+ if (options.refresh) snapshots.delete(key);
181
+ const result = await loader(target).load(options);
182
+ remember(target, result, revision);
183
+ return result;
184
+ };
185
+ const invoke = (request, options = {}) => transport.requestJson(
186
+ "POST",
187
+ `${base}/invoke`,
188
+ request,
189
+ {},
190
+ options
191
+ );
192
+ const call = async (target, args = {}, options = {}) => {
193
+ if (options.approvalToken && (options.approvalBinding === "catalog" || legacyTokens.has(options.approvalToken))) {
194
+ if ("identity" in target) return await old().$call(target.identity, args, options);
195
+ let node2 = old();
196
+ for (const part of target.path) node2 = node2[part];
197
+ return await node2(args, options);
198
+ }
199
+ if (options.approvalToken && !options.operationId)
200
+ throw new TypeError("operationId is required when using an approval token");
201
+ options.signal?.throwIfAborted();
202
+ const operationId = options.operationId ?? crypto.randomUUID();
203
+ const key = targetKey(target);
204
+ const revision = advance(key);
205
+ if (options.refreshCatalog) snapshots.delete(key);
206
+ let tool = options.refreshCatalog ? await loader(target).load({
207
+ refresh: true,
208
+ ...options.signal ? { signal: options.signal } : {}
209
+ }) : snapshots.get(key);
210
+ const approved = options.approvalToken ? approvals.get(options.approvalToken) : void 0;
211
+ const expected = options.expectedDefinitionDigest !== void 0 ? options.expectedDefinitionDigest : options.approvalToken ? void 0 : tool?.definitionDigest;
212
+ if (approved && (approved.operationId !== operationId || "identity" in target && targetKey({ identity: approved.tool.entry.identity }) !== key))
213
+ throw new OpenGeniToolReapprovalRequiredError(
214
+ operationId,
215
+ approved.tool.definitionDigest,
216
+ expected ?? "",
217
+ approved.tool.entry.identity
218
+ );
219
+ const send = (digest) => invoke(
220
+ {
221
+ operationId,
222
+ target,
223
+ arguments: args,
224
+ ...digest === void 0 ? {} : { expectedDefinitionDigest: digest },
225
+ ...options.approvalToken ? { approvalToken: options.approvalToken } : {}
226
+ },
227
+ options.signal ? { signal: options.signal } : {}
228
+ );
229
+ let response;
230
+ try {
231
+ response = await send(expected);
232
+ } catch (error) {
233
+ if (!isToolDefinitionStale(error) || expected === void 0) throw error;
234
+ if (revisions.get(key) === revision) snapshots.delete(key);
235
+ if (options.expectedDefinitionDigest !== void 0 && !options.approvalToken) throw error;
236
+ tool = await loader(target).reloadAfterStale(expected, options.signal);
237
+ remember(target, tool, revision);
238
+ if (options.approvalToken || options.expectedDefinitionDigest !== void 0)
239
+ throw new OpenGeniToolReapprovalRequiredError(
240
+ operationId,
241
+ expected,
242
+ tool.definitionDigest,
243
+ tool.entry.identity
244
+ );
245
+ response = await send(tool.definitionDigest);
246
+ }
247
+ if (options.approvalToken) approvals.delete(options.approvalToken);
248
+ remember(target, response.tool, revision);
249
+ if (response.result.isError) throw new OpenGeniToolCallError(response.result);
250
+ return response.tool.entry.outputSchema && response.result.structuredContent !== void 0 ? response.result.structuredContent : response.result;
251
+ };
252
+ const approveTarget = async (identity, args = {}, options = {}) => {
253
+ const tool = await resolve(
254
+ { identity },
255
+ { ...options.signal ? { signal: options.signal } : {} }
256
+ );
257
+ const response = await transport.requestJson(
258
+ "POST",
259
+ `${base}/target-approvals`,
260
+ {
261
+ identity,
262
+ arguments: args,
263
+ operationId: options.operationId ?? crypto.randomUUID(),
264
+ expectedDefinitionDigest: options.expectedDefinitionDigest === void 0 ? tool.definitionDigest : options.expectedDefinitionDigest
265
+ },
266
+ {},
267
+ options.signal ? { signal: options.signal } : {}
268
+ );
269
+ if (approvals.size >= 256) approvals.delete(approvals.keys().next().value);
270
+ approvals.set(response.approvalToken, response);
271
+ return response;
272
+ };
273
+ const node = (path) => new Proxy(
274
+ async (args = {}, options = {}) => call({ path }, args, options),
275
+ {
276
+ get: (_target, property) => property === "then" || typeof property !== "string" ? void 0 : node([...path, property])
277
+ }
278
+ );
279
+ return new Proxy(/* @__PURE__ */ Object.create(null), {
280
+ get: (_target, property) => {
281
+ if (property === "then" || typeof property !== "string") return void 0;
282
+ if (property === "$targetProtocol") return 1;
283
+ if (property === "$resolve") return resolve;
284
+ if (property === "$invoke") return invoke;
285
+ if (property === "$manifest")
286
+ return (request, options = {}) => transport.requestJson(
287
+ "POST",
288
+ `${base}/manifest`,
289
+ request,
290
+ {},
291
+ options
292
+ );
293
+ if (property === "$call")
294
+ return (identity, args, options) => call({ identity }, args, options);
295
+ if (property === "$approveTarget") return approveTarget;
296
+ if (property === "$approve")
297
+ return async (...args) => {
298
+ const response = await old().$approve(...args);
299
+ if (legacyTokens.size >= 256) legacyTokens.delete(legacyTokens.values().next().value);
300
+ legacyTokens.add(response.approvalToken);
301
+ return response;
302
+ };
303
+ if (property === "$catalog") return old().$catalog;
304
+ if (property === "$declarations") return old().$declarations;
305
+ return node([property]);
306
+ }
307
+ });
308
+ }
309
+
310
+ // src/tools.ts
311
+ var OpenGeniToolCallError = class extends Error {
312
+ constructor(result) {
313
+ const structured = result.structuredContent;
314
+ super(
315
+ typeof structured?.error?.message === "string" ? structured.error.message : "Opengeni tool call failed"
316
+ );
317
+ this.result = result;
318
+ this.name = "OpenGeniToolCallError";
319
+ this.code = typeof structured?.error?.code === "string" ? structured.error.code : "tool_error";
320
+ this.retryable = structured?.error?.retryable === true;
321
+ this.outcomeUnknown = structured?.error?.outcomeUnknown === true;
322
+ }
323
+ code;
324
+ retryable;
325
+ outcomeUnknown;
326
+ };
327
+ var OpenGeniToolReapprovalRequiredError = class extends Error {
328
+ constructor(operationId, previousCatalogDigest, catalogDigest, identity) {
329
+ super(
330
+ "The workspace tool catalog changed after approval. Request a new approval for the refreshed tool identity and retry with the same operation ID."
331
+ );
332
+ this.operationId = operationId;
333
+ this.previousCatalogDigest = previousCatalogDigest;
334
+ this.catalogDigest = catalogDigest;
335
+ this.identity = identity;
336
+ this.name = "OpenGeniToolReapprovalRequiredError";
337
+ }
338
+ code = "tool_reapproval_required";
339
+ retryable = false;
340
+ };
341
+ var OpenGeniToolsClient = class _OpenGeniToolsClient {
342
+ constructor(transport) {
343
+ this.transport = transport;
344
+ }
345
+ forWorkspace(workspaceId) {
346
+ const normalizedWorkspaceId = requiredId(workspaceId, "workspaceId");
347
+ if (this.transport.toolGatewayMode !== "catalog") {
348
+ return createKnownWorkspaceTools(
349
+ this.transport,
350
+ normalizedWorkspaceId,
351
+ () => new _OpenGeniToolsClient({
352
+ toolGatewayMode: "catalog",
353
+ requestJson: this.transport.requestJson.bind(this.transport)
354
+ }).forWorkspace(normalizedWorkspaceId)
355
+ );
356
+ }
357
+ const catalogPath = `/v1/workspaces/${encodeURIComponent(normalizedWorkspaceId)}/tools/catalog`;
358
+ const catalogLoader = createSharedCatalogLoader(
359
+ async (_refresh, signal) => await this.transport.requestJson(
360
+ "GET",
361
+ catalogPath,
362
+ void 0,
363
+ {},
364
+ // Shared by every waiter: aborted only once all of them abort.
365
+ { signal }
366
+ )
367
+ );
368
+ const approvalBindings = /* @__PURE__ */ new Map();
369
+ const catalog = async (options = {}) => await catalogLoader.load({
370
+ ...options.refresh ? { refresh: true } : {},
371
+ ...options.signal ? { signal: options.signal } : {}
372
+ });
373
+ const catalogAfterStale = async (staleDigest, signal) => await catalogLoader.reloadAfterStale(staleDigest, signal);
374
+ const callResolvedIdentity = async (resolveIdentity, argumentsValue, options) => {
375
+ if (options.approvalToken && !options.operationId) {
376
+ throw new TypeError("operationId is required when using an approval token");
377
+ }
378
+ const operationId = options.operationId ?? crypto.randomUUID();
379
+ const initial = await catalog({
380
+ ...options.refreshCatalog === void 0 ? {} : { refresh: options.refreshCatalog },
381
+ ...options.signal ? { signal: options.signal } : {}
382
+ });
383
+ const invoke = async (current) => {
384
+ const identity = resolveIdentity(current);
385
+ const approvalBinding = options.approvalToken ? approvalBindings.get(options.approvalToken) : void 0;
386
+ if (approvalBinding && (approvalBinding.operationId !== operationId || approvalBinding.catalogDigest !== current.digest || !sameToolIdentity(approvalBinding.identity, identity))) {
387
+ throw new OpenGeniToolReapprovalRequiredError(
388
+ operationId,
389
+ approvalBinding.catalogDigest,
390
+ current.digest,
391
+ identity
392
+ );
393
+ }
394
+ const request = {
395
+ operationId,
396
+ catalogDigest: current.digest,
397
+ identity,
398
+ arguments: argumentsValue,
399
+ ...options.approvalToken ? { approvalToken: options.approvalToken } : {}
400
+ };
401
+ let response;
402
+ try {
403
+ response = await this.transport.requestJson(
404
+ "POST",
405
+ `/v1/workspaces/${encodeURIComponent(normalizedWorkspaceId)}/tools/calls`,
406
+ request,
407
+ {},
408
+ options.signal ? { signal: options.signal } : {}
409
+ );
410
+ } catch (error) {
411
+ if (isCatalogStaleApiError(error)) catalogLoader.invalidate(current.digest);
412
+ else if (options.approvalToken) approvalBindings.delete(options.approvalToken);
413
+ throw error;
414
+ }
415
+ if (options.approvalToken) approvalBindings.delete(options.approvalToken);
416
+ if (response.catalogDigest !== current.digest) {
417
+ catalogLoader.invalidate(current.digest);
418
+ }
419
+ if (response.result.isError) throw new OpenGeniToolCallError(response.result);
420
+ const entry = findCatalogEntry(current, identity);
421
+ return entry?.outputSchema && response.result.structuredContent !== void 0 ? response.result.structuredContent : response.result;
422
+ };
423
+ try {
424
+ return await invoke(initial);
425
+ } catch (error) {
426
+ if (!isCatalogStaleApiError(error)) throw error;
427
+ }
428
+ const refreshed = await catalogAfterStale(initial.digest, options.signal);
429
+ const refreshedIdentity = resolveIdentity(refreshed);
430
+ if (options.approvalToken && refreshed.digest !== initial.digest) {
431
+ throw new OpenGeniToolReapprovalRequiredError(
432
+ operationId,
433
+ initial.digest,
434
+ refreshed.digest,
435
+ refreshedIdentity
436
+ );
437
+ }
438
+ return await invoke(refreshed);
439
+ };
440
+ const callIdentity = async (identity, argumentsValue = {}, options = {}) => await callResolvedIdentity(
441
+ (current) => requireCatalogIdentity(current, identity),
442
+ argumentsValue,
443
+ options
444
+ );
445
+ const approveIdentity = async (identity, argumentsValue = {}, options = {}) => {
446
+ const operationId = options.operationId ?? crypto.randomUUID();
447
+ const approve = async (current) => {
448
+ const request = {
449
+ operationId,
450
+ catalogDigest: current.digest,
451
+ identity: requireCatalogIdentity(current, identity),
452
+ arguments: argumentsValue
453
+ };
454
+ try {
455
+ const response = await this.transport.requestJson(
456
+ "POST",
457
+ `/v1/workspaces/${encodeURIComponent(normalizedWorkspaceId)}/tools/approvals`,
458
+ request,
459
+ {},
460
+ options.signal ? { signal: options.signal } : {}
461
+ );
462
+ approvalBindings.set(response.approvalToken, {
463
+ operationId: response.operationId,
464
+ catalogDigest: response.catalogDigest,
465
+ identity: response.identity
466
+ });
467
+ return response;
468
+ } catch (error) {
469
+ if (isCatalogStaleApiError(error)) catalogLoader.invalidate(current.digest);
470
+ throw error;
471
+ }
472
+ };
473
+ const initial = await catalog(options.signal ? { signal: options.signal } : {});
474
+ try {
475
+ return await approve(initial);
476
+ } catch (error) {
477
+ if (!isCatalogStaleApiError(error)) throw error;
478
+ }
479
+ const refreshed = await catalogAfterStale(initial.digest, options.signal);
480
+ return await approve(refreshed);
481
+ };
482
+ const invokePath = async (path, argumentsValue = {}, options = {}) => {
483
+ return await callResolvedIdentity(
484
+ (current) => requireCatalogPath(current, path).identity,
485
+ argumentsValue,
486
+ options
487
+ );
488
+ };
489
+ const node = (path) => new Proxy(
490
+ async (argumentsValue = {}, options = {}) => await invokePath(path, argumentsValue, options),
491
+ {
492
+ get: (_target, property) => {
493
+ if (property === "then") return void 0;
494
+ if (typeof property !== "string") return void 0;
495
+ return node([...path, property]);
496
+ }
497
+ }
498
+ );
499
+ return new Proxy(/* @__PURE__ */ Object.create(null), {
500
+ get: (_target, property) => {
501
+ if (property === "then") return void 0;
502
+ if (property === "$catalog") return catalog;
503
+ if (property === "$call") return callIdentity;
504
+ if (property === "$approve") return approveIdentity;
505
+ if (property === "$declarations") {
506
+ return async (options = {}) => await this.transport.requestJson(
507
+ "GET",
508
+ `/v1/workspaces/${encodeURIComponent(normalizedWorkspaceId)}/tools/declarations`,
509
+ void 0,
510
+ {},
511
+ options.signal ? { signal: options.signal } : {}
512
+ );
513
+ }
514
+ if (typeof property !== "string") return void 0;
515
+ return node([property]);
516
+ }
517
+ });
518
+ }
519
+ };
520
+ function findCatalogEntry(catalog, identity) {
521
+ return catalog.entries.find(
522
+ (entry) => entry.identity.serverId === identity.serverId && entry.identity.toolName === identity.toolName
523
+ );
524
+ }
525
+ function sameToolIdentity(left, right) {
526
+ return left.serverId === right.serverId && left.toolName === right.toolName;
527
+ }
528
+ function requireCatalogIdentity(catalog, identity) {
529
+ const entry = findCatalogEntry(catalog, identity);
530
+ if (!entry) {
531
+ throw new Error(
532
+ `Tool is not present in the workspace catalog: ${identity.serverId}/${identity.toolName}`
533
+ );
534
+ }
535
+ return entry.identity;
536
+ }
537
+ function requireCatalogPath(catalog, path) {
538
+ const entry = catalog.entries.find(
539
+ (candidate) => candidate.codemodePath.length === path.length && candidate.codemodePath.every((segment, index) => segment === path[index])
540
+ );
541
+ if (!entry) throw new Error(`Tool is not present in the workspace catalog: ${path.join(".")}`);
542
+ return entry;
543
+ }
544
+ function isCatalogStaleApiError(error) {
545
+ if (typeof error !== "object" || error === null || "outcomeUnknown" in error && error.outcomeUnknown === true || "retryable" in error && error.retryable === false)
546
+ return false;
547
+ return error instanceof OpenGeniApiError && error.status === 409 && error.details?.code === "catalog_stale" || typeof error === "object" && error !== null && "code" in error && error.code === "catalog_stale";
548
+ }
549
+ function requiredId(value, label) {
550
+ const normalized = value.trim();
551
+ if (!normalized) throw new TypeError(`${label} is required`);
552
+ return normalized;
553
+ }
554
+
555
+ export {
556
+ createSharedCatalogLoader,
557
+ OpenGeniToolCallError,
558
+ OpenGeniToolReapprovalRequiredError,
559
+ OpenGeniToolsClient
560
+ };
561
+ //# sourceMappingURL=chunk-P7UWKORG.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/shared-catalog-loader.ts","../src/known-tools.ts","../src/tools.ts"],"sourcesContent":["/**\n * Single-flight loader for one digest-pinned tool catalog.\n *\n * - Concurrent cold callers share one request instead of each fetching.\n * - A waiter's AbortSignal cancels only its own wait. The shared request is\n * cancelled once every waiter has aborted, and the next caller then starts\n * a new request. A waiter without a signal keeps the shared request alive\n * for every joiner until it settles (bounded by transport/server timeouts).\n * - A failed load is never cached; the next caller starts a new request.\n * - An explicit refresh, or a stale rejection, always obtains a catalog from a\n * request started after that refresh/rejection. Callers rejected on the same\n * stale digest share one post-rejection request while it is still current.\n * - A load started before an invalidation never overwrites the newer state.\n */\nexport type SharedCatalogLoader<T extends { digest: string }> = {\n load(options?: { refresh?: boolean; signal?: AbortSignal }): Promise<T>;\n /** Reload after the server rejected `staleDigest` as a stale catalog. */\n reloadAfterStale(staleDigest: string, signal?: AbortSignal): Promise<T>;\n /** Drop the cached catalog when it is `digest`, without fetching. */\n invalidate(digest: string): void;\n};\n\ntype SharedLoad<T> = {\n epoch: number;\n promise: Promise<T>;\n controller: AbortController;\n waiters: number;\n settled: boolean;\n};\n\nexport function createSharedCatalogLoader<T extends { digest: string }>(\n /**\n * `refresh` is true when this load follows an invalidation or explicit\n * refresh. `signal` aborts only when every waiter has abandoned the load.\n */\n fetchCatalog: (refresh: boolean, signal: AbortSignal) => Promise<T>,\n): SharedCatalogLoader<T> {\n let snapshot: T | null = null;\n let epoch = 0;\n let refreshPending = false;\n let inFlight: SharedLoad<T> | null = null;\n let staleReload: {\n staleDigest: string;\n load: SharedLoad<T>;\n settled: T | null;\n } | null = null;\n\n const start = (): SharedLoad<T> => {\n if (inFlight && inFlight.epoch === epoch) return inFlight;\n const refresh = refreshPending;\n const load = {\n epoch,\n controller: new AbortController(),\n waiters: 0,\n settled: false,\n } as SharedLoad<T>;\n inFlight = load;\n load.promise = (async () => {\n try {\n const next = await fetchCatalog(refresh, load.controller.signal);\n // An abandoned load (every waiter aborted) never writes shared state,\n // even when its transport ignored the abort and settled late.\n if (load.epoch === epoch && !load.controller.signal.aborted) {\n snapshot = next;\n refreshPending = false;\n }\n return next;\n } finally {\n load.settled = true;\n if (inFlight === load) inFlight = null;\n }\n })();\n // Every waiter observes rejection itself; never leave an unobserved one.\n load.promise.catch(() => undefined);\n return load;\n };\n\n const abandon = (load: SharedLoad<T>, reason: unknown): void => {\n if (inFlight === load) inFlight = null;\n if (staleReload?.load === load) staleReload = null;\n load.controller.abort(reason);\n };\n\n const wait = (load: SharedLoad<T>, signal: AbortSignal | undefined): Promise<T> => {\n if (signal?.aborted) return Promise.reject(abortReason(signal));\n load.waiters += 1;\n return new Promise<T>((resolve, reject) => {\n let released = false;\n const release = (): boolean => {\n if (released) return false;\n released = true;\n load.waiters -= 1;\n signal?.removeEventListener(\"abort\", onAbort);\n return true;\n };\n const onAbort = () => {\n if (!release()) return;\n const reason = abortReason(signal!);\n reject(reason);\n if (load.waiters === 0 && !load.settled) abandon(load, reason);\n };\n signal?.addEventListener(\"abort\", onAbort, { once: true });\n load.promise.then(\n (value) => {\n if (release()) resolve(value);\n },\n (error: unknown) => {\n if (release()) reject(error);\n },\n );\n });\n };\n\n const advance = (): void => {\n snapshot = null;\n epoch += 1;\n refreshPending = true;\n };\n\n return {\n async load(options = {}) {\n options.signal?.throwIfAborted();\n if (options.refresh) advance();\n if (snapshot) return snapshot;\n return await wait(start(), options.signal);\n },\n async reloadAfterStale(staleDigest, signal) {\n signal?.throwIfAborted();\n // Share a post-rejection reload while it is still the current load, or\n // while its result is still the current catalog; never reuse a\n // superseded load or result.\n const shared = staleReload;\n if (\n shared?.staleDigest === staleDigest &&\n (shared.settled === null ? shared.load.epoch === epoch : shared.settled === snapshot)\n ) {\n return await wait(shared.load, signal);\n }\n advance();\n const load = start();\n const reload: { staleDigest: string; load: SharedLoad<T>; settled: T | null } = {\n staleDigest,\n load,\n settled: null,\n };\n staleReload = reload;\n load.promise.then(\n (next) => {\n // The same digest again proves nothing newer; a later rejection must\n // start its own request rather than reuse this one.\n if (staleReload !== reload) return;\n if (next.digest === staleDigest) staleReload = null;\n else reload.settled = next;\n },\n () => {\n if (staleReload === reload) staleReload = null;\n },\n );\n return await wait(load, signal);\n },\n invalidate(digest) {\n if (snapshot?.digest === digest) advance();\n },\n };\n}\n\nfunction abortReason(signal: AbortSignal): unknown {\n return signal.reason ?? new DOMException(\"The operation was aborted.\", \"AbortError\");\n}\n","import { OpenGeniApiError } from \"./errors\";\nimport { createSharedCatalogLoader, type SharedCatalogLoader } from \"./shared-catalog-loader\";\nimport {\n OpenGeniToolCallError,\n OpenGeniToolReapprovalRequiredError,\n type OpenGeniToolTransport,\n type OpenGeniWorkspaceTools,\n type OpenGeniToolCallOptions,\n} from \"./tools\";\nimport type {\n ToolGatewayTarget,\n ToolGatewayResolvedTool,\n ToolGatewayInvokeRequest,\n ToolGatewayInvokeResponse,\n ToolGatewayTargetApprovalResponse,\n ToolGatewayManifestRequest,\n ToolGatewayManifestResponse,\n ToolGatewayIdentity,\n} from \"./types\";\n\ntype Snapshot = ToolGatewayResolvedTool & { digest: string };\nconst targetKey = (target: ToolGatewayTarget) =>\n \"identity\" in target\n ? JSON.stringify([\"identity\", target.identity.serverId, target.identity.toolName])\n : JSON.stringify([\"path\", ...target.path]);\nexport const isToolDefinitionStale = (error: unknown) => {\n if (typeof error !== \"object\" || error === null) return false;\n if (\n (\"outcomeUnknown\" in error && error.outcomeUnknown === true) ||\n (\"retryable\" in error && error.retryable === false)\n )\n return false;\n return error instanceof OpenGeniApiError\n ? error.status === 409 && error.details?.code === \"tool_definition_stale\"\n : typeof error === \"object\" &&\n error !== null &&\n \"code\" in error &&\n error.code === \"tool_definition_stale\";\n};\n\n/** Per-facade metadata only. Never coalesce invocations or retain credentials. */\nexport function createKnownWorkspaceTools(\n transport: OpenGeniToolTransport,\n workspaceId: string,\n createLegacy: () => OpenGeniWorkspaceTools,\n): OpenGeniWorkspaceTools {\n const base = `/v1/workspaces/${encodeURIComponent(workspaceId)}/tools`;\n let legacy: OpenGeniWorkspaceTools | undefined;\n const old = () => (legacy ??= createLegacy());\n const legacyTokens = new Set<string>();\n const loaders = new Map<string, SharedCatalogLoader<Snapshot>>();\n const snapshots = new Map<string, ToolGatewayResolvedTool>();\n const revisions = new Map<string, number>();\n let revisionSequence = 0;\n const advance = (key: string) => {\n if (!revisions.has(key) && revisions.size >= 256)\n revisions.delete(revisions.keys().next().value!);\n const revision = ++revisionSequence;\n revisions.set(key, revision);\n return revision;\n };\n const approvals = new Map<string, ToolGatewayTargetApprovalResponse>();\n const loader = (target: ToolGatewayTarget) => {\n const key = targetKey(target);\n let value = loaders.get(key);\n if (!value) {\n value = createSharedCatalogLoader(async (_refresh, signal) => {\n const result = await transport.requestJson<ToolGatewayResolvedTool>(\n \"POST\",\n `${base}/resolve`,\n { target },\n {},\n { signal },\n );\n return { ...result, digest: result.definitionDigest };\n });\n if (loaders.size >= 256) loaders.delete(loaders.keys().next().value!);\n loaders.set(key, value);\n }\n return value;\n };\n const remember = (target: ToolGatewayTarget, tool: ToolGatewayResolvedTool, revision: number) => {\n const key = targetKey(target);\n if (revisions.get(key) !== revision) return;\n if (snapshots.size >= 256) snapshots.delete(snapshots.keys().next().value!);\n snapshots.set(key, tool);\n };\n const resolve = async (\n target: ToolGatewayTarget,\n options: {\n refresh?: boolean;\n signal?: AbortSignal;\n siteArtifactId?: string;\n siteVersionId?: string;\n } = {},\n ) => {\n if (options.siteArtifactId || options.siteVersionId)\n return await transport.requestJson<ToolGatewayResolvedTool>(\n \"POST\",\n `${base}/resolve`,\n { target, siteArtifactId: options.siteArtifactId, siteVersionId: options.siteVersionId },\n {},\n options.signal ? { signal: options.signal } : {},\n );\n const key = targetKey(target);\n const revision = advance(key);\n if (options.refresh) snapshots.delete(key);\n const result = await loader(target).load(options);\n remember(target, result, revision);\n return result;\n };\n const invoke = (request: ToolGatewayInvokeRequest, options: { signal?: AbortSignal } = {}) =>\n transport.requestJson<ToolGatewayInvokeResponse>(\n \"POST\",\n `${base}/invoke`,\n request,\n {},\n options,\n );\n const call = async (\n target: ToolGatewayTarget,\n args: Record<string, unknown> = {},\n options: OpenGeniToolCallOptions = {},\n ) => {\n if (\n options.approvalToken &&\n (options.approvalBinding === \"catalog\" || legacyTokens.has(options.approvalToken))\n ) {\n if (\"identity\" in target) return await old().$call(target.identity, args, options);\n let node: unknown = old();\n for (const part of target.path) node = (node as Record<string, unknown>)[part];\n return await (\n node as (\n args: Record<string, unknown>,\n options: OpenGeniToolCallOptions,\n ) => Promise<unknown>\n )(args, options);\n }\n if (options.approvalToken && !options.operationId)\n throw new TypeError(\"operationId is required when using an approval token\");\n options.signal?.throwIfAborted();\n const operationId = options.operationId ?? crypto.randomUUID();\n const key = targetKey(target);\n const revision = advance(key);\n if (options.refreshCatalog) snapshots.delete(key);\n let tool = options.refreshCatalog\n ? await loader(target).load({\n refresh: true,\n ...(options.signal ? { signal: options.signal } : {}),\n })\n : snapshots.get(key);\n const approved = options.approvalToken ? approvals.get(options.approvalToken) : undefined;\n const expected =\n options.expectedDefinitionDigest !== undefined\n ? options.expectedDefinitionDigest\n : options.approvalToken\n ? undefined\n : tool?.definitionDigest;\n if (\n approved &&\n (approved.operationId !== operationId ||\n (\"identity\" in target && targetKey({ identity: approved.tool.entry.identity }) !== key))\n )\n throw new OpenGeniToolReapprovalRequiredError(\n operationId,\n approved.tool.definitionDigest,\n expected ?? \"\",\n approved.tool.entry.identity,\n );\n const send = (digest: string | undefined) =>\n invoke(\n {\n operationId,\n target,\n arguments: args,\n ...(digest === undefined ? {} : { expectedDefinitionDigest: digest }),\n ...(options.approvalToken ? { approvalToken: options.approvalToken } : {}),\n },\n options.signal ? { signal: options.signal } : {},\n );\n let response: ToolGatewayInvokeResponse;\n try {\n response = await send(expected);\n } catch (error) {\n if (!isToolDefinitionStale(error) || expected === undefined) throw error;\n if (revisions.get(key) === revision) snapshots.delete(key);\n if (options.expectedDefinitionDigest !== undefined && !options.approvalToken) throw error;\n tool = await loader(target).reloadAfterStale(expected, options.signal);\n remember(target, tool, revision);\n if (options.approvalToken || options.expectedDefinitionDigest !== undefined)\n throw new OpenGeniToolReapprovalRequiredError(\n operationId,\n expected,\n tool.definitionDigest,\n tool.entry.identity,\n );\n response = await send(tool.definitionDigest);\n }\n if (options.approvalToken) approvals.delete(options.approvalToken);\n remember(target, response.tool, revision);\n if (response.result.isError) throw new OpenGeniToolCallError(response.result);\n return response.tool.entry.outputSchema && response.result.structuredContent !== undefined\n ? response.result.structuredContent\n : response.result;\n };\n const approveTarget = async (\n identity: ToolGatewayIdentity,\n args: Record<string, unknown> = {},\n options: OpenGeniToolCallOptions = {},\n ) => {\n const tool = await resolve(\n { identity },\n { ...(options.signal ? { signal: options.signal } : {}) },\n );\n const response = await transport.requestJson<ToolGatewayTargetApprovalResponse>(\n \"POST\",\n `${base}/target-approvals`,\n {\n identity,\n arguments: args,\n operationId: options.operationId ?? crypto.randomUUID(),\n expectedDefinitionDigest:\n options.expectedDefinitionDigest === undefined\n ? tool.definitionDigest\n : options.expectedDefinitionDigest,\n },\n {},\n options.signal ? { signal: options.signal } : {},\n );\n if (approvals.size >= 256) approvals.delete(approvals.keys().next().value!);\n approvals.set(response.approvalToken, response);\n return response;\n };\n const node = (path: string[]): unknown =>\n new Proxy(\n async (args: Record<string, unknown> = {}, options: OpenGeniToolCallOptions = {}) =>\n call({ path }, args, options),\n {\n get: (_target, property) =>\n property === \"then\" || typeof property !== \"string\"\n ? undefined\n : node([...path, property]),\n },\n );\n return new Proxy(Object.create(null) as OpenGeniWorkspaceTools, {\n get: (_target, property) => {\n if (property === \"then\" || typeof property !== \"string\") return undefined;\n if (property === \"$targetProtocol\") return 1;\n if (property === \"$resolve\") return resolve;\n if (property === \"$invoke\") return invoke;\n if (property === \"$manifest\")\n return (request: ToolGatewayManifestRequest, options: { signal?: AbortSignal } = {}) =>\n transport.requestJson<ToolGatewayManifestResponse>(\n \"POST\",\n `${base}/manifest`,\n request,\n {},\n options,\n );\n if (property === \"$call\")\n return (\n identity: ToolGatewayIdentity,\n args?: Record<string, unknown>,\n options?: OpenGeniToolCallOptions,\n ) => call({ identity }, args, options);\n if (property === \"$approveTarget\") return approveTarget;\n if (property === \"$approve\")\n return async (...args: Parameters<OpenGeniWorkspaceTools[\"$approve\"]>) => {\n const response = await old().$approve(...args);\n if (legacyTokens.size >= 256) legacyTokens.delete(legacyTokens.values().next().value!);\n legacyTokens.add(response.approvalToken);\n return response;\n };\n if (property === \"$catalog\") return old().$catalog;\n if (property === \"$declarations\") return old().$declarations;\n return node([property]);\n },\n });\n}\n","import type {\n ToolGatewayCallRequest,\n ToolGatewayCallResponse,\n ToolGatewayApprovalRequest,\n ToolGatewayApprovalResponse,\n ToolGatewayCatalog,\n ToolGatewayCatalogEntry,\n ToolGatewayDeclarationsResponse,\n ToolGatewayIdentity,\n ToolGatewayResult,\n ToolGatewayTarget,\n ToolGatewayResolvedTool,\n ToolGatewayInvokeRequest,\n ToolGatewayInvokeResponse,\n ToolGatewayTargetApprovalResponse,\n ToolGatewayManifestRequest,\n ToolGatewayManifestResponse,\n} from \"./types\";\nimport { createKnownWorkspaceTools } from \"./known-tools\";\nimport { OpenGeniApiError } from \"./errors\";\nimport { createSharedCatalogLoader } from \"./shared-catalog-loader\";\n\nexport type OpenGeniToolCallOptions = {\n operationId?: string;\n signal?: AbortSignal;\n refreshCatalog?: boolean;\n /** Server-issued, single-use capability returned by `$approve`. */\n approvalToken?: string;\n /** A schema-first precondition; absence on a cold call means current definition. */\n expectedDefinitionDigest?: string;\n /** External v1 approval capabilities must explicitly use the legacy adapter. */\n approvalBinding?: \"catalog\" | \"target\";\n};\n\nexport type OpenGeniToolFunction<\n TArguments extends Record<string, unknown> = Record<string, unknown>,\n TResult = unknown,\n> = (argumentsValue?: TArguments, options?: OpenGeniToolCallOptions) => Promise<TResult>;\n\nexport interface OpenGeniDynamicToolNamespace {\n readonly [key: string]: OpenGeniDynamicToolNode;\n}\n\nexport type OpenGeniDynamicToolNode = OpenGeniDynamicToolNamespace & OpenGeniToolFunction;\n\n/** Declaration-generation target for one exact workspace catalog. */\nexport interface OpenGeniGeneratedTools {}\n\nexport type OpenGeniWorkspaceTools<\n TCatalog extends Pick<\n ToolGatewayCatalog,\n \"version\" | \"generation\" | \"digest\" | \"createdAt\" | \"entries\"\n > = ToolGatewayCatalog,\n> = OpenGeniGeneratedTools &\n OpenGeniDynamicToolNamespace & {\n readonly $targetProtocol?: 1;\n readonly $resolve: (\n target: ToolGatewayTarget,\n options?: {\n refresh?: boolean;\n signal?: AbortSignal;\n siteArtifactId?: string;\n siteVersionId?: string;\n },\n ) => Promise<ToolGatewayResolvedTool>;\n readonly $invoke: (\n request: ToolGatewayInvokeRequest,\n options?: { signal?: AbortSignal },\n ) => Promise<ToolGatewayInvokeResponse>;\n readonly $manifest: (\n request: ToolGatewayManifestRequest,\n options?: { signal?: AbortSignal },\n ) => Promise<ToolGatewayManifestResponse>;\n readonly $approveTarget: (\n identity: ToolGatewayIdentity,\n argumentsValue?: Record<string, unknown>,\n options?: OpenGeniToolCallOptions,\n ) => Promise<ToolGatewayTargetApprovalResponse>;\n readonly $catalog: (options?: { refresh?: boolean; signal?: AbortSignal }) => Promise<TCatalog>;\n readonly $call: (\n identity: ToolGatewayIdentity,\n argumentsValue?: Record<string, unknown>,\n options?: OpenGeniToolCallOptions,\n ) => Promise<unknown>;\n readonly $approve: (\n identity: ToolGatewayIdentity,\n argumentsValue?: Record<string, unknown>,\n options?: {\n operationId?: string;\n signal?: AbortSignal;\n },\n ) => Promise<ToolGatewayApprovalResponse>;\n readonly $declarations: (options?: {\n signal?: AbortSignal;\n }) => Promise<ToolGatewayDeclarationsResponse>;\n };\n\nexport interface OpenGeniToolTransport {\n /** Explicit v1 compatibility. Never selected as a retry after an uncertain invoke. */\n readonly toolGatewayMode?: \"catalog\" | \"target\";\n requestJson<T>(\n method: string,\n path: string,\n body?: unknown,\n query?: Record<string, string>,\n options?: { signal?: AbortSignal; timeoutMs?: number },\n ): Promise<T>;\n}\n\nexport interface OpenGeniToolsFacade {\n forWorkspace(workspaceId: string): OpenGeniWorkspaceTools;\n}\n\nexport class OpenGeniToolCallError extends Error {\n readonly code: string;\n readonly retryable: boolean;\n readonly outcomeUnknown: boolean;\n\n constructor(readonly result: ToolGatewayResult) {\n const structured = result.structuredContent as\n | {\n error?: {\n code?: unknown;\n message?: unknown;\n retryable?: unknown;\n outcomeUnknown?: unknown;\n };\n }\n | undefined;\n super(\n typeof structured?.error?.message === \"string\"\n ? structured.error.message\n : \"Opengeni tool call failed\",\n );\n this.name = \"OpenGeniToolCallError\";\n this.code = typeof structured?.error?.code === \"string\" ? structured.error.code : \"tool_error\";\n this.retryable = structured?.error?.retryable === true;\n this.outcomeUnknown = structured?.error?.outcomeUnknown === true;\n }\n}\n\n/** A catalog refresh invalidated the single-use approval capability for this call. */\nexport class OpenGeniToolReapprovalRequiredError extends Error {\n readonly code = \"tool_reapproval_required\" as const;\n readonly retryable = false;\n\n constructor(\n readonly operationId: string,\n readonly previousCatalogDigest: string,\n readonly catalogDigest: string,\n readonly identity: ToolGatewayIdentity,\n ) {\n super(\n \"The workspace tool catalog changed after approval. Request a new approval for the refreshed tool identity and retry with the same operation ID.\",\n );\n this.name = \"OpenGeniToolReapprovalRequiredError\";\n }\n}\n\nexport class OpenGeniToolsClient implements OpenGeniToolsFacade {\n constructor(private readonly transport: OpenGeniToolTransport) {}\n\n forWorkspace(workspaceId: string): OpenGeniWorkspaceTools {\n const normalizedWorkspaceId = requiredId(workspaceId, \"workspaceId\");\n if (this.transport.toolGatewayMode !== \"catalog\") {\n return createKnownWorkspaceTools(this.transport, normalizedWorkspaceId, () =>\n new OpenGeniToolsClient({\n toolGatewayMode: \"catalog\",\n requestJson: this.transport.requestJson.bind(this.transport),\n }).forWorkspace(normalizedWorkspaceId),\n );\n }\n const catalogPath = `/v1/workspaces/${encodeURIComponent(normalizedWorkspaceId)}/tools/catalog`;\n const catalogLoader = createSharedCatalogLoader<ToolGatewayCatalog>(\n async (_refresh, signal) =>\n await this.transport.requestJson<ToolGatewayCatalog>(\n \"GET\",\n catalogPath,\n undefined,\n {},\n // Shared by every waiter: aborted only once all of them abort.\n { signal },\n ),\n );\n const approvalBindings = new Map<\n string,\n {\n operationId: string;\n catalogDigest: string;\n identity: ToolGatewayIdentity;\n }\n >();\n const catalog = async (\n options: { refresh?: boolean; signal?: AbortSignal } = {},\n ): Promise<ToolGatewayCatalog> =>\n await catalogLoader.load({\n ...(options.refresh ? { refresh: true } : {}),\n ...(options.signal ? { signal: options.signal } : {}),\n });\n /** Reload after `staleDigest` was rejected, joining a sibling's newer load. */\n const catalogAfterStale = async (\n staleDigest: string,\n signal: AbortSignal | undefined,\n ): Promise<ToolGatewayCatalog> => await catalogLoader.reloadAfterStale(staleDigest, signal);\n const callResolvedIdentity = async (\n resolveIdentity: (current: ToolGatewayCatalog) => ToolGatewayIdentity,\n argumentsValue: Record<string, unknown>,\n options: OpenGeniToolCallOptions,\n ): Promise<unknown> => {\n if (options.approvalToken && !options.operationId) {\n throw new TypeError(\"operationId is required when using an approval token\");\n }\n const operationId = options.operationId ?? crypto.randomUUID();\n const initial = await catalog({\n ...(options.refreshCatalog === undefined ? {} : { refresh: options.refreshCatalog }),\n ...(options.signal ? { signal: options.signal } : {}),\n });\n const invoke = async (current: ToolGatewayCatalog): Promise<unknown> => {\n const identity = resolveIdentity(current);\n const approvalBinding = options.approvalToken\n ? approvalBindings.get(options.approvalToken)\n : undefined;\n if (\n approvalBinding &&\n (approvalBinding.operationId !== operationId ||\n approvalBinding.catalogDigest !== current.digest ||\n !sameToolIdentity(approvalBinding.identity, identity))\n ) {\n throw new OpenGeniToolReapprovalRequiredError(\n operationId,\n approvalBinding.catalogDigest,\n current.digest,\n identity,\n );\n }\n const request: ToolGatewayCallRequest = {\n operationId,\n catalogDigest: current.digest,\n identity,\n arguments: argumentsValue,\n ...(options.approvalToken ? { approvalToken: options.approvalToken } : {}),\n };\n let response: ToolGatewayCallResponse;\n try {\n response = await this.transport.requestJson<ToolGatewayCallResponse>(\n \"POST\",\n `/v1/workspaces/${encodeURIComponent(normalizedWorkspaceId)}/tools/calls`,\n request,\n {},\n options.signal ? { signal: options.signal } : {},\n );\n } catch (error) {\n if (isCatalogStaleApiError(error)) catalogLoader.invalidate(current.digest);\n else if (options.approvalToken) approvalBindings.delete(options.approvalToken);\n throw error;\n }\n if (options.approvalToken) approvalBindings.delete(options.approvalToken);\n if (response.catalogDigest !== current.digest) {\n catalogLoader.invalidate(current.digest);\n }\n if (response.result.isError) throw new OpenGeniToolCallError(response.result);\n const entry = findCatalogEntry(current, identity);\n return entry?.outputSchema && response.result.structuredContent !== undefined\n ? response.result.structuredContent\n : response.result;\n };\n try {\n return await invoke(initial);\n } catch (error) {\n if (!isCatalogStaleApiError(error)) throw error;\n }\n const refreshed = await catalogAfterStale(initial.digest, options.signal);\n const refreshedIdentity = resolveIdentity(refreshed);\n if (options.approvalToken && refreshed.digest !== initial.digest) {\n throw new OpenGeniToolReapprovalRequiredError(\n operationId,\n initial.digest,\n refreshed.digest,\n refreshedIdentity,\n );\n }\n return await invoke(refreshed);\n };\n const callIdentity = async (\n identity: ToolGatewayIdentity,\n argumentsValue: Record<string, unknown> = {},\n options: OpenGeniToolCallOptions = {},\n ): Promise<unknown> =>\n await callResolvedIdentity(\n (current) => requireCatalogIdentity(current, identity),\n argumentsValue,\n options,\n );\n const approveIdentity = async (\n identity: ToolGatewayIdentity,\n argumentsValue: Record<string, unknown> = {},\n options: {\n operationId?: string;\n signal?: AbortSignal;\n } = {},\n ): Promise<ToolGatewayApprovalResponse> => {\n const operationId = options.operationId ?? crypto.randomUUID();\n const approve = async (current: ToolGatewayCatalog): Promise<ToolGatewayApprovalResponse> => {\n const request: ToolGatewayApprovalRequest = {\n operationId,\n catalogDigest: current.digest,\n identity: requireCatalogIdentity(current, identity),\n arguments: argumentsValue,\n };\n try {\n const response = await this.transport.requestJson<ToolGatewayApprovalResponse>(\n \"POST\",\n `/v1/workspaces/${encodeURIComponent(normalizedWorkspaceId)}/tools/approvals`,\n request,\n {},\n options.signal ? { signal: options.signal } : {},\n );\n approvalBindings.set(response.approvalToken, {\n operationId: response.operationId,\n catalogDigest: response.catalogDigest,\n identity: response.identity,\n });\n return response;\n } catch (error) {\n if (isCatalogStaleApiError(error)) catalogLoader.invalidate(current.digest);\n throw error;\n }\n };\n const initial = await catalog(options.signal ? { signal: options.signal } : {});\n try {\n return await approve(initial);\n } catch (error) {\n if (!isCatalogStaleApiError(error)) throw error;\n }\n const refreshed = await catalogAfterStale(initial.digest, options.signal);\n return await approve(refreshed);\n };\n const invokePath = async (\n path: readonly string[],\n argumentsValue: Record<string, unknown> = {},\n options: OpenGeniToolCallOptions = {},\n ): Promise<unknown> => {\n return await callResolvedIdentity(\n (current) => requireCatalogPath(current, path).identity,\n argumentsValue,\n options,\n );\n };\n const node = (path: readonly string[]): OpenGeniDynamicToolNode =>\n new Proxy(\n (async (argumentsValue = {}, options = {}) =>\n await invokePath(path, argumentsValue, options)) as OpenGeniDynamicToolNode,\n {\n get: (_target, property) => {\n // Dynamic namespaces must never become accidental Promise-like\n // values when passed through await/Promise.resolve.\n if (property === \"then\") return undefined;\n if (typeof property !== \"string\") return undefined;\n return node([...path, property]);\n },\n },\n );\n return new Proxy(Object.create(null) as OpenGeniWorkspaceTools, {\n get: (_target, property) => {\n if (property === \"then\") return undefined;\n if (property === \"$catalog\") return catalog;\n if (property === \"$call\") return callIdentity;\n if (property === \"$approve\") return approveIdentity;\n if (property === \"$declarations\") {\n return async (options: { signal?: AbortSignal } = {}) =>\n await this.transport.requestJson<ToolGatewayDeclarationsResponse>(\n \"GET\",\n `/v1/workspaces/${encodeURIComponent(normalizedWorkspaceId)}/tools/declarations`,\n undefined,\n {},\n options.signal ? { signal: options.signal } : {},\n );\n }\n if (typeof property !== \"string\") return undefined;\n return node([property]);\n },\n });\n }\n}\n\nfunction findCatalogEntry(\n catalog: ToolGatewayCatalog,\n identity: ToolGatewayIdentity,\n): ToolGatewayCatalogEntry | undefined {\n return catalog.entries.find(\n (entry) =>\n entry.identity.serverId === identity.serverId &&\n entry.identity.toolName === identity.toolName,\n );\n}\n\nfunction sameToolIdentity(left: ToolGatewayIdentity, right: ToolGatewayIdentity): boolean {\n return left.serverId === right.serverId && left.toolName === right.toolName;\n}\n\nfunction requireCatalogIdentity(\n catalog: ToolGatewayCatalog,\n identity: ToolGatewayIdentity,\n): ToolGatewayIdentity {\n const entry = findCatalogEntry(catalog, identity);\n if (!entry) {\n throw new Error(\n `Tool is not present in the workspace catalog: ${identity.serverId}/${identity.toolName}`,\n );\n }\n return entry.identity;\n}\n\nfunction requireCatalogPath(\n catalog: ToolGatewayCatalog,\n path: readonly string[],\n): ToolGatewayCatalogEntry {\n const entry = catalog.entries.find(\n (candidate) =>\n candidate.codemodePath.length === path.length &&\n candidate.codemodePath.every((segment, index) => segment === path[index]),\n );\n if (!entry) throw new Error(`Tool is not present in the workspace catalog: ${path.join(\".\")}`);\n return entry;\n}\n\nfunction isCatalogStaleApiError(\n error: unknown,\n): error is OpenGeniApiError | { code: \"catalog_stale\" } {\n if (\n typeof error !== \"object\" ||\n error === null ||\n (\"outcomeUnknown\" in error && error.outcomeUnknown === true) ||\n (\"retryable\" in error && error.retryable === false)\n )\n return false;\n return (\n (error instanceof OpenGeniApiError &&\n error.status === 409 &&\n error.details?.code === \"catalog_stale\") ||\n (typeof error === \"object\" &&\n error !== null &&\n \"code\" in error &&\n error.code === \"catalog_stale\")\n );\n}\n\nfunction requiredId(value: string, label: string): string {\n const normalized = value.trim();\n if (!normalized) throw new TypeError(`${label} is required`);\n return normalized;\n}\n"],"mappings":"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","names":["node"]}