@sogni-ai/sogni-client 4.2.0-alpha.21 → 4.2.0-alpha.23

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 (178) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/CLAUDE.md +7 -0
  3. package/README.md +45 -25
  4. package/dist/Chat/ChatTools.js +30 -16
  5. package/dist/Chat/ChatTools.js.map +1 -1
  6. package/dist/Chat/hostedToolValidation.generated.d.ts +46 -0
  7. package/dist/Chat/hostedToolValidation.generated.js +306 -0
  8. package/dist/Chat/hostedToolValidation.generated.js.map +1 -0
  9. package/dist/Chat/index.d.ts +41 -1
  10. package/dist/Chat/index.js +285 -26
  11. package/dist/Chat/index.js.map +1 -1
  12. package/dist/Chat/modelRouting.d.ts +8 -26
  13. package/dist/Chat/modelRouting.js +11 -106
  14. package/dist/Chat/modelRouting.js.map +1 -1
  15. package/dist/Chat/sogniHostedTools.generated.json +1596 -304
  16. package/dist/Chat/tools.d.ts +52 -3
  17. package/dist/Chat/tools.js +80 -27
  18. package/dist/Chat/tools.js.map +1 -1
  19. package/dist/Chat/types.d.ts +119 -3
  20. package/dist/CreativeWorkflows/index.d.ts +1 -7
  21. package/dist/CreativeWorkflows/index.js +60 -21
  22. package/dist/CreativeWorkflows/index.js.map +1 -1
  23. package/dist/CreativeWorkflows/types.d.ts +28 -33
  24. package/dist/Projects/index.d.ts +49 -8
  25. package/dist/Projects/index.js +49 -8
  26. package/dist/Projects/index.js.map +1 -1
  27. package/dist/index.d.ts +19 -4
  28. package/dist/index.js +1 -1
  29. package/dist/index.js.map +1 -1
  30. package/dist/lib/Cache.js +6 -1
  31. package/dist/lib/Cache.js.map +1 -1
  32. package/dist/lib/mediaValidation.d.ts +3 -0
  33. package/dist/lib/mediaValidation.js +154 -0
  34. package/dist/lib/mediaValidation.js.map +1 -1
  35. package/dist-esm/Account/CurrentAccount.js +59 -0
  36. package/dist-esm/Account/CurrentAccount.js.map +1 -0
  37. package/dist-esm/Account/index.js +543 -0
  38. package/dist-esm/Account/index.js.map +1 -0
  39. package/dist-esm/Account/types.js +2 -0
  40. package/dist-esm/Account/types.js.map +1 -0
  41. package/dist-esm/ApiClient/WebSocketClient/BrowserWebSocketClient/ChannelCoordinator.js +327 -0
  42. package/dist-esm/ApiClient/WebSocketClient/BrowserWebSocketClient/ChannelCoordinator.js.map +1 -0
  43. package/dist-esm/ApiClient/WebSocketClient/BrowserWebSocketClient/index.js +222 -0
  44. package/dist-esm/ApiClient/WebSocketClient/BrowserWebSocketClient/index.js.map +1 -0
  45. package/dist-esm/ApiClient/WebSocketClient/ErrorCode.js +15 -0
  46. package/dist-esm/ApiClient/WebSocketClient/ErrorCode.js.map +1 -0
  47. package/dist-esm/ApiClient/WebSocketClient/eventSubscriptions.js +35 -0
  48. package/dist-esm/ApiClient/WebSocketClient/eventSubscriptions.js.map +1 -0
  49. package/dist-esm/ApiClient/WebSocketClient/events.js +2 -0
  50. package/dist-esm/ApiClient/WebSocketClient/events.js.map +1 -0
  51. package/dist-esm/ApiClient/WebSocketClient/index.js +221 -0
  52. package/dist-esm/ApiClient/WebSocketClient/index.js.map +1 -0
  53. package/dist-esm/ApiClient/WebSocketClient/messages.js +2 -0
  54. package/dist-esm/ApiClient/WebSocketClient/messages.js.map +1 -0
  55. package/dist-esm/ApiClient/WebSocketClient/types.js +2 -0
  56. package/dist-esm/ApiClient/WebSocketClient/types.js.map +1 -0
  57. package/dist-esm/ApiClient/events.js +2 -0
  58. package/dist-esm/ApiClient/events.js.map +1 -0
  59. package/dist-esm/ApiClient/index.js +120 -0
  60. package/dist-esm/ApiClient/index.js.map +1 -0
  61. package/dist-esm/ApiGroup.js +10 -0
  62. package/dist-esm/ApiGroup.js.map +1 -0
  63. package/dist-esm/Chat/ChatStream.js +181 -0
  64. package/dist-esm/Chat/ChatStream.js.map +1 -0
  65. package/dist-esm/Chat/ChatTools.js +562 -0
  66. package/dist-esm/Chat/ChatTools.js.map +1 -0
  67. package/dist-esm/Chat/hostedToolValidation.generated.js +301 -0
  68. package/dist-esm/Chat/hostedToolValidation.generated.js.map +1 -0
  69. package/dist-esm/Chat/index.js +693 -0
  70. package/dist-esm/Chat/index.js.map +1 -0
  71. package/dist-esm/Chat/modelRouting.js +326 -0
  72. package/dist-esm/Chat/modelRouting.js.map +1 -0
  73. package/dist-esm/Chat/sogniHostedTools.generated.json +1821 -0
  74. package/dist-esm/Chat/tools.js +149 -0
  75. package/dist-esm/Chat/tools.js.map +1 -0
  76. package/dist-esm/Chat/types.js +2 -0
  77. package/dist-esm/Chat/types.js.map +1 -0
  78. package/dist-esm/CreativeWorkflows/index.js +293 -0
  79. package/dist-esm/CreativeWorkflows/index.js.map +1 -0
  80. package/dist-esm/CreativeWorkflows/types.js +2 -0
  81. package/dist-esm/CreativeWorkflows/types.js.map +1 -0
  82. package/dist-esm/Projects/Job.js +391 -0
  83. package/dist-esm/Projects/Job.js.map +1 -0
  84. package/dist-esm/Projects/Project.js +295 -0
  85. package/dist-esm/Projects/Project.js.map +1 -0
  86. package/dist-esm/Projects/createJobRequestMessage.js +528 -0
  87. package/dist-esm/Projects/createJobRequestMessage.js.map +1 -0
  88. package/dist-esm/Projects/index.js +1350 -0
  89. package/dist-esm/Projects/index.js.map +1 -0
  90. package/dist-esm/Projects/types/ComfySamplerParams.js +2 -0
  91. package/dist-esm/Projects/types/ComfySamplerParams.js.map +1 -0
  92. package/dist-esm/Projects/types/ControlNetParams.js +2 -0
  93. package/dist-esm/Projects/types/ControlNetParams.js.map +1 -0
  94. package/dist-esm/Projects/types/EstimationResponse.js +2 -0
  95. package/dist-esm/Projects/types/EstimationResponse.js.map +1 -0
  96. package/dist-esm/Projects/types/ModelOptions.js +89 -0
  97. package/dist-esm/Projects/types/ModelOptions.js.map +1 -0
  98. package/dist-esm/Projects/types/ModelTiersRaw.js +13 -0
  99. package/dist-esm/Projects/types/ModelTiersRaw.js.map +1 -0
  100. package/dist-esm/Projects/types/RawProject.js +2 -0
  101. package/dist-esm/Projects/types/RawProject.js.map +1 -0
  102. package/dist-esm/Projects/types/events.js +2 -0
  103. package/dist-esm/Projects/types/events.js.map +1 -0
  104. package/dist-esm/Projects/types/index.js +10 -0
  105. package/dist-esm/Projects/types/index.js.map +1 -0
  106. package/dist-esm/Projects/utils/index.js +229 -0
  107. package/dist-esm/Projects/utils/index.js.map +1 -0
  108. package/dist-esm/Projects/utils/samplers.js +36 -0
  109. package/dist-esm/Projects/utils/samplers.js.map +1 -0
  110. package/dist-esm/Projects/utils/scheduler.js +27 -0
  111. package/dist-esm/Projects/utils/scheduler.js.map +1 -0
  112. package/dist-esm/Stats/index.js +20 -0
  113. package/dist-esm/Stats/index.js.map +1 -0
  114. package/dist-esm/Stats/types.js +2 -0
  115. package/dist-esm/Stats/types.js.map +1 -0
  116. package/dist-esm/events.js +2 -0
  117. package/dist-esm/events.js.map +1 -0
  118. package/dist-esm/index.js +144 -0
  119. package/dist-esm/index.js.map +1 -0
  120. package/dist-esm/lib/AuthManager/ApiKeyAuthManager.js +58 -0
  121. package/dist-esm/lib/AuthManager/ApiKeyAuthManager.js.map +1 -0
  122. package/dist-esm/lib/AuthManager/AuthManagerBase.js +9 -0
  123. package/dist-esm/lib/AuthManager/AuthManagerBase.js.map +1 -0
  124. package/dist-esm/lib/AuthManager/CookieAuthManager.js +48 -0
  125. package/dist-esm/lib/AuthManager/CookieAuthManager.js.map +1 -0
  126. package/dist-esm/lib/AuthManager/TokenAuthManager.js +186 -0
  127. package/dist-esm/lib/AuthManager/TokenAuthManager.js.map +1 -0
  128. package/dist-esm/lib/AuthManager/index.js +5 -0
  129. package/dist-esm/lib/AuthManager/index.js.map +1 -0
  130. package/dist-esm/lib/Cache.js +32 -0
  131. package/dist-esm/lib/Cache.js.map +1 -0
  132. package/dist-esm/lib/DataEntity.js +30 -0
  133. package/dist-esm/lib/DataEntity.js.map +1 -0
  134. package/dist-esm/lib/DefaultLogger.js +32 -0
  135. package/dist-esm/lib/DefaultLogger.js.map +1 -0
  136. package/dist-esm/lib/EIP712Helper.js +37 -0
  137. package/dist-esm/lib/EIP712Helper.js.map +1 -0
  138. package/dist-esm/lib/RestClient.js +90 -0
  139. package/dist-esm/lib/RestClient.js.map +1 -0
  140. package/dist-esm/lib/TypedEventEmitter.js +68 -0
  141. package/dist-esm/lib/TypedEventEmitter.js.map +1 -0
  142. package/dist-esm/lib/base64.js +18 -0
  143. package/dist-esm/lib/base64.js.map +1 -0
  144. package/dist-esm/lib/getUUID.js +7 -0
  145. package/dist-esm/lib/getUUID.js.map +1 -0
  146. package/dist-esm/lib/isNodejs.js +3 -0
  147. package/dist-esm/lib/isNodejs.js.map +1 -0
  148. package/dist-esm/lib/mediaValidation.js +430 -0
  149. package/dist-esm/lib/mediaValidation.js.map +1 -0
  150. package/dist-esm/lib/utils/index.js +30 -0
  151. package/dist-esm/lib/utils/index.js.map +1 -0
  152. package/dist-esm/lib/validation.js +138 -0
  153. package/dist-esm/lib/validation.js.map +1 -0
  154. package/dist-esm/package.json +3 -0
  155. package/dist-esm/types/ErrorData.js +2 -0
  156. package/dist-esm/types/ErrorData.js.map +1 -0
  157. package/dist-esm/types/json.js +2 -0
  158. package/dist-esm/types/json.js.map +1 -0
  159. package/dist-esm/types/token.js +2 -0
  160. package/dist-esm/types/token.js.map +1 -0
  161. package/dist-esm/version.js +3 -0
  162. package/dist-esm/version.js.map +1 -0
  163. package/llms-full.txt +11 -20
  164. package/llms.txt +9 -18
  165. package/package.json +21 -5
  166. package/src/Chat/ChatTools.ts +36 -16
  167. package/src/Chat/hostedToolValidation.generated.ts +453 -0
  168. package/src/Chat/index.ts +322 -37
  169. package/src/Chat/modelRouting.ts +26 -150
  170. package/src/Chat/sogniHostedTools.generated.json +1596 -304
  171. package/src/Chat/tools.ts +106 -41
  172. package/src/Chat/types.ts +131 -3
  173. package/src/CreativeWorkflows/index.ts +55 -41
  174. package/src/CreativeWorkflows/types.ts +70 -42
  175. package/src/Projects/index.ts +49 -8
  176. package/src/index.ts +33 -12
  177. package/src/lib/Cache.ts +8 -1
  178. package/src/lib/mediaValidation.ts +155 -0
@@ -0,0 +1,306 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateAndNormalizeHostedToolArguments = validateAndNormalizeHostedToolArguments;
4
+ exports.validateHostedToolArguments = validateHostedToolArguments;
5
+ exports.assertHostedToolArguments = assertHostedToolArguments;
6
+ function matchesType(value, type) {
7
+ switch (type) {
8
+ case 'array':
9
+ return Array.isArray(value);
10
+ case 'integer':
11
+ return typeof value === 'number' && Number.isInteger(value);
12
+ case 'number':
13
+ return typeof value === 'number' && Number.isFinite(value);
14
+ case 'boolean':
15
+ return typeof value === 'boolean';
16
+ case 'object':
17
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
18
+ case 'string':
19
+ return typeof value === 'string';
20
+ case 'null':
21
+ return value === null;
22
+ default:
23
+ return true;
24
+ }
25
+ }
26
+ function typeLabel(type) {
27
+ if (Array.isArray(type))
28
+ return type.join(' or ');
29
+ return type !== null && type !== void 0 ? type : 'valid value';
30
+ }
31
+ function typeList(type) {
32
+ if (!type)
33
+ return [];
34
+ return Array.isArray(type) ? type : [type];
35
+ }
36
+ function formatEnum(values) {
37
+ return values.map(value => JSON.stringify(value)).join(', ');
38
+ }
39
+ function isRecord(value) {
40
+ return !!value && typeof value === 'object' && !Array.isArray(value);
41
+ }
42
+ function valuesEqual(left, right) {
43
+ if (Object.is(left, right))
44
+ return true;
45
+ if (typeof left !== typeof right)
46
+ return false;
47
+ if (left === null || right === null)
48
+ return left === right;
49
+ if (typeof left !== 'object')
50
+ return false;
51
+ try {
52
+ return JSON.stringify(left) === JSON.stringify(right);
53
+ }
54
+ catch (_a) {
55
+ return false;
56
+ }
57
+ }
58
+ function coerceValueForTypes(value, allowedTypes) {
59
+ if (typeof value !== 'string')
60
+ return { value, coerced: false };
61
+ const trimmed = value.trim();
62
+ if (!trimmed)
63
+ return { value, coerced: false };
64
+ if (allowedTypes.includes('integer') || allowedTypes.includes('number')) {
65
+ const numberValue = Number(trimmed);
66
+ if (Number.isFinite(numberValue)
67
+ && (!allowedTypes.includes('integer') || Number.isInteger(numberValue))) {
68
+ return { value: numberValue, coerced: true };
69
+ }
70
+ }
71
+ if (allowedTypes.includes('boolean')) {
72
+ if (/^(?:true|false)$/i.test(trimmed)) {
73
+ return { value: trimmed.toLowerCase() === 'true', coerced: true };
74
+ }
75
+ }
76
+ return { value, coerced: false };
77
+ }
78
+ function validateNumberBounds(path, value, schema, errors) {
79
+ if (schema.minimum !== undefined && value < schema.minimum) {
80
+ errors.push(`Argument "${path}" must be at least ${schema.minimum}`);
81
+ }
82
+ if (schema.maximum !== undefined && value > schema.maximum) {
83
+ errors.push(`Argument "${path}" must be at most ${schema.maximum}`);
84
+ }
85
+ if (typeof schema.exclusiveMinimum === 'number' && value <= schema.exclusiveMinimum) {
86
+ errors.push(`Argument "${path}" must be greater than ${schema.exclusiveMinimum}`);
87
+ }
88
+ if (typeof schema.exclusiveMaximum === 'number' && value >= schema.exclusiveMaximum) {
89
+ errors.push(`Argument "${path}" must be less than ${schema.exclusiveMaximum}`);
90
+ }
91
+ if (schema.exclusiveMinimum === true && schema.minimum !== undefined && value <= schema.minimum) {
92
+ errors.push(`Argument "${path}" must be greater than ${schema.minimum}`);
93
+ }
94
+ if (schema.exclusiveMaximum === true && schema.maximum !== undefined && value >= schema.maximum) {
95
+ errors.push(`Argument "${path}" must be less than ${schema.maximum}`);
96
+ }
97
+ }
98
+ function validateStringConstraints(path, value, schema, errors) {
99
+ if (schema.minLength !== undefined && value.length < schema.minLength) {
100
+ errors.push(`Argument "${path}" must contain at least ${schema.minLength} character${schema.minLength === 1 ? '' : 's'}`);
101
+ }
102
+ if (schema.maxLength !== undefined && value.length > schema.maxLength) {
103
+ errors.push(`Argument "${path}" must contain at most ${schema.maxLength} character${schema.maxLength === 1 ? '' : 's'}`);
104
+ }
105
+ if (schema.pattern) {
106
+ try {
107
+ // Hosted-tool schema authors near-universally assume anchored matching
108
+ // for ID-like fields, but JSON Schema `pattern` is unanchored. Auto-anchor
109
+ // to prevent prefix/suffix injection (e.g. `pattern: 'safe-prefix-'` should
110
+ // reject `'evil-safe-prefix-suffix'`). Wrapping with `^(?:...)$` is safe
111
+ // even for already-anchored patterns — `^^…$$` still matches the same set.
112
+ if (!new RegExp(`^(?:${schema.pattern})$`).test(value)) {
113
+ errors.push(`Argument "${path}" must match pattern ${JSON.stringify(schema.pattern)}`);
114
+ }
115
+ }
116
+ catch (_a) {
117
+ errors.push(`Schema for "${path}" contains invalid pattern ${JSON.stringify(schema.pattern)}`);
118
+ }
119
+ }
120
+ }
121
+ function validateCompositeSchema(path, value, schema, context) {
122
+ var _a, _b;
123
+ if (schema.allOf) {
124
+ let nextValue = value;
125
+ for (const childSchema of schema.allOf) {
126
+ const result = validateValueAgainstSchema(path, nextValue, childSchema, context);
127
+ nextValue = result.value;
128
+ }
129
+ return { matched: true, value: nextValue };
130
+ }
131
+ const alternatives = (_a = schema.oneOf) !== null && _a !== void 0 ? _a : schema.anyOf;
132
+ if (!alternatives)
133
+ return { matched: true, value };
134
+ const matches = [];
135
+ for (const childSchema of alternatives) {
136
+ const trial = Object.assign(Object.assign({}, context), { errors: [], warnings: [] });
137
+ const result = validateValueAgainstSchema(path, value, childSchema, trial);
138
+ if (trial.errors.length === 0)
139
+ matches.push(result.value);
140
+ }
141
+ if (schema.oneOf && matches.length !== 1) {
142
+ context.errors.push(`Argument "${path}" must match exactly one allowed schema`);
143
+ return { matched: false, value };
144
+ }
145
+ if (schema.anyOf && matches.length < 1) {
146
+ context.errors.push(`Argument "${path}" must match at least one allowed schema`);
147
+ return { matched: false, value };
148
+ }
149
+ return { matched: true, value: (_b = matches[0]) !== null && _b !== void 0 ? _b : value };
150
+ }
151
+ function validateObjectAgainstSchema(path, value, schema, context) {
152
+ var _a, _b;
153
+ const properties = (_a = schema.properties) !== null && _a !== void 0 ? _a : {};
154
+ const cleaned = {};
155
+ for (const required of (_b = schema.required) !== null && _b !== void 0 ? _b : []) {
156
+ const propValue = value[required];
157
+ // Empty string and empty array are treated as missing — schema authors
158
+ // assume `required` means "has a usable value", not "is non-undefined".
159
+ // Empty object is left untouched (some schemas legitimately accept `{}`).
160
+ const isMissing = propValue === undefined
161
+ || propValue === null
162
+ || propValue === ''
163
+ || (Array.isArray(propValue) && propValue.length === 0);
164
+ if (isMissing) {
165
+ context.errors.push(`Missing required argument "${path ? `${path}.` : ''}${required}"`);
166
+ }
167
+ }
168
+ for (const [name, entryValue] of Object.entries(value)) {
169
+ if (entryValue === undefined || entryValue === null) {
170
+ if (name in properties || !context.stripUnknownProperties)
171
+ cleaned[name] = entryValue;
172
+ continue;
173
+ }
174
+ const property = properties[name];
175
+ if (!property) {
176
+ if (schema.additionalProperties === false || context.stripUnknownProperties) {
177
+ context.warnings.push(`Stripped unknown argument "${path ? `${path}.` : ''}${name}"`);
178
+ }
179
+ else if (isRecord(schema.additionalProperties)) {
180
+ cleaned[name] = validateValueAgainstSchema(path ? `${path}.${name}` : name, entryValue, schema.additionalProperties, context).value;
181
+ }
182
+ else {
183
+ cleaned[name] = entryValue;
184
+ }
185
+ continue;
186
+ }
187
+ cleaned[name] = validateValueAgainstSchema(path ? `${path}.${name}` : name, entryValue, property, context).value;
188
+ }
189
+ return cleaned;
190
+ }
191
+ function validateArrayAgainstSchema(path, value, schema, context) {
192
+ if (schema.minItems !== undefined && value.length < schema.minItems) {
193
+ context.errors.push(`Argument "${path}" must contain at least ${schema.minItems} item${schema.minItems === 1 ? '' : 's'}`);
194
+ }
195
+ if (schema.maxItems !== undefined && value.length > schema.maxItems) {
196
+ context.errors.push(`Argument "${path}" must contain at most ${schema.maxItems} item${schema.maxItems === 1 ? '' : 's'}`);
197
+ }
198
+ if (!schema.items)
199
+ return value;
200
+ if (Array.isArray(schema.items)) {
201
+ const tupleSchemas = schema.items;
202
+ return value.map((item, index) => {
203
+ const itemSchema = tupleSchemas[index];
204
+ return itemSchema
205
+ ? validateValueAgainstSchema(`${path}[${index}]`, item, itemSchema, context).value
206
+ : item;
207
+ });
208
+ }
209
+ return value.map((item, index) => validateValueAgainstSchema(`${path}[${index}]`, item, schema.items, context).value);
210
+ }
211
+ function validateValueAgainstSchema(path, rawValue, schema, context) {
212
+ var _a;
213
+ const composite = validateCompositeSchema(path, rawValue, schema, context);
214
+ if (!composite.matched)
215
+ return { value: rawValue };
216
+ let value = composite.value;
217
+ const allowedTypes = typeList(schema.type);
218
+ if (context.coercePrimitives
219
+ && allowedTypes.length > 0
220
+ && !allowedTypes.some(type => matchesType(value, type))) {
221
+ const coerced = coerceValueForTypes(value, allowedTypes);
222
+ if (coerced.coerced) {
223
+ context.warnings.push(`Coerced argument "${path}" to ${typeof coerced.value}`);
224
+ value = coerced.value;
225
+ }
226
+ }
227
+ if (allowedTypes.length > 0 && !allowedTypes.some(type => matchesType(value, type))) {
228
+ context.errors.push(`Argument "${path}" must be ${typeLabel(schema.type)}`);
229
+ return { value };
230
+ }
231
+ if (schema.const !== undefined && !valuesEqual(value, schema.const)) {
232
+ context.errors.push(`Argument "${path}" must be ${JSON.stringify(schema.const)}`);
233
+ }
234
+ if (schema.enum
235
+ && !context.skipEnumProperties.has(path)
236
+ && !context.skipEnumProperties.has((_a = path.split('.').at(-1)) !== null && _a !== void 0 ? _a : path)
237
+ && !schema.enum.some(candidate => valuesEqual(candidate, value))) {
238
+ context.errors.push(`Argument "${path}" must be one of ${formatEnum(schema.enum)}`);
239
+ }
240
+ if (typeof value === 'number') {
241
+ validateNumberBounds(path, value, schema, context.errors);
242
+ }
243
+ if (typeof value === 'string') {
244
+ validateStringConstraints(path, value, schema, context.errors);
245
+ }
246
+ if (Array.isArray(value)) {
247
+ value = validateArrayAgainstSchema(path, value, schema, context);
248
+ }
249
+ if (isRecord(value)) {
250
+ value = validateObjectAgainstSchema(path, value, schema, context);
251
+ }
252
+ return { value };
253
+ }
254
+ function validateAndNormalizeHostedToolArguments(tools, toolName, args, options = {}) {
255
+ var _a, _b;
256
+ if (!args || typeof args !== 'object' || Array.isArray(args)) {
257
+ return {
258
+ ok: false,
259
+ errors: ['Tool arguments must be a JSON object'],
260
+ cleaned: {},
261
+ warnings: [],
262
+ };
263
+ }
264
+ const tool = tools.find(candidate => candidate.function.name === toolName);
265
+ if (!tool) {
266
+ return {
267
+ ok: false,
268
+ errors: [`Unknown hosted Sogni tool "${toolName}"`],
269
+ cleaned: args,
270
+ warnings: [],
271
+ };
272
+ }
273
+ const schema = tool.function.parameters;
274
+ if (!schema) {
275
+ return { ok: true, errors: [], cleaned: args, warnings: [] };
276
+ }
277
+ const context = {
278
+ skipEnumProperties: new Set((_a = options.skipEnumProperties) !== null && _a !== void 0 ? _a : ['model']),
279
+ coercePrimitives: options.coercePrimitives === true,
280
+ stripUnknownProperties: options.stripUnknownProperties === true,
281
+ errors: [],
282
+ warnings: [],
283
+ };
284
+ const normalizedSchema = Object.assign(Object.assign({}, schema), { type: (_b = schema.type) !== null && _b !== void 0 ? _b : 'object' });
285
+ const cleaned = validateValueAgainstSchema('', args, normalizedSchema, context).value;
286
+ return {
287
+ ok: context.errors.length === 0,
288
+ errors: context.errors,
289
+ cleaned: isRecord(cleaned) ? cleaned : args,
290
+ warnings: context.warnings,
291
+ };
292
+ }
293
+ function validateHostedToolArguments(tools, toolName, args, options = {}) {
294
+ const result = validateAndNormalizeHostedToolArguments(tools, toolName, args, options);
295
+ return {
296
+ ok: result.ok,
297
+ errors: result.errors,
298
+ };
299
+ }
300
+ function assertHostedToolArguments(tools, toolName, args, options) {
301
+ const result = validateHostedToolArguments(tools, toolName, args, options);
302
+ if (!result.ok) {
303
+ throw new Error(`Invalid ${toolName} arguments: ${result.errors.join('; ')}`);
304
+ }
305
+ }
306
+ //# sourceMappingURL=hostedToolValidation.generated.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hostedToolValidation.generated.js","sourceRoot":"","sources":["../../src/Chat/hostedToolValidation.generated.ts"],"names":[],"mappings":";;AAyXA,0FAkDC;AAED,kEAWC;AAED,8DAUC;AA/YD,SAAS,WAAW,CAAC,KAAc,EAAE,IAAY;IAC/C,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,OAAO;YACV,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC9B,KAAK,SAAS;YACZ,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC9D,KAAK,QAAQ;YACX,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC7D,KAAK,SAAS;YACZ,OAAO,OAAO,KAAK,KAAK,SAAS,CAAC;QACpC,KAAK,QAAQ;YACX,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC9E,KAAK,QAAQ;YACX,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC;QACnC,KAAK,MAAM;YACT,OAAO,KAAK,KAAK,IAAI,CAAC;QACxB;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,IAAmC;IACpD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAClD,OAAO,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,aAAa,CAAC;AAC/B,CAAC;AAED,SAAS,QAAQ,CAAC,IAAmC;IACnD,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IACrB,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,UAAU,CAAC,MAAiB;IACnC,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/D,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,CAAC,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACvE,CAAC;AAED,SAAS,WAAW,CAAC,IAAa,EAAE,KAAc;IAChD,IAAI,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACxC,IAAI,OAAO,IAAI,KAAK,OAAO,KAAK;QAAE,OAAO,KAAK,CAAC;IAC/C,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,KAAK,KAAK,CAAC;IAC3D,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC3C,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACxD,CAAC;IAAC,WAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAC1B,KAAc,EACd,YAAsB;IAEtB,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAChE,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAE/C,IAAI,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxE,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;QACpC,IACE,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC;eACzB,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,EACvE,CAAC;YACD,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,IAAI,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACrC,IAAI,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACtC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,WAAW,EAAE,KAAK,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QACpE,CAAC;IACH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AACnC,CAAC;AAUD,SAAS,oBAAoB,CAC3B,IAAY,EACZ,KAAa,EACb,MAAgC,EAChC,MAAgB;IAEhB,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,IAAI,KAAK,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;QAC3D,MAAM,CAAC,IAAI,CAAC,aAAa,IAAI,sBAAsB,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IACvE,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,IAAI,KAAK,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;QAC3D,MAAM,CAAC,IAAI,CAAC,aAAa,IAAI,qBAAqB,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IACtE,CAAC;IACD,IAAI,OAAO,MAAM,CAAC,gBAAgB,KAAK,QAAQ,IAAI,KAAK,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;QACpF,MAAM,CAAC,IAAI,CAAC,aAAa,IAAI,0BAA0B,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACpF,CAAC;IACD,IAAI,OAAO,MAAM,CAAC,gBAAgB,KAAK,QAAQ,IAAI,KAAK,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;QACpF,MAAM,CAAC,IAAI,CAAC,aAAa,IAAI,uBAAuB,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACjF,CAAC;IACD,IAAI,MAAM,CAAC,gBAAgB,KAAK,IAAI,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,IAAI,KAAK,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QAChG,MAAM,CAAC,IAAI,CAAC,aAAa,IAAI,0BAA0B,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IAC3E,CAAC;IACD,IAAI,MAAM,CAAC,gBAAgB,KAAK,IAAI,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,IAAI,KAAK,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QAChG,MAAM,CAAC,IAAI,CAAC,aAAa,IAAI,uBAAuB,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IACxE,CAAC;AACH,CAAC;AAED,SAAS,yBAAyB,CAChC,IAAY,EACZ,KAAa,EACb,MAAgC,EAChC,MAAgB;IAEhB,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;QACtE,MAAM,CAAC,IAAI,CAAC,aAAa,IAAI,2BAA2B,MAAM,CAAC,SAAS,aAAa,MAAM,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAC5H,CAAC;IACD,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;QACtE,MAAM,CAAC,IAAI,CAAC,aAAa,IAAI,0BAA0B,MAAM,CAAC,SAAS,aAAa,MAAM,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAC3H,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,IAAI,CAAC;YACH,uEAAuE;YACvE,2EAA2E;YAC3E,4EAA4E;YAC5E,yEAAyE;YACzE,2EAA2E;YAC3E,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBACvD,MAAM,CAAC,IAAI,CAAC,aAAa,IAAI,wBAAwB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACzF,CAAC;QACH,CAAC;QAAC,WAAM,CAAC;YACP,MAAM,CAAC,IAAI,CAAC,eAAe,IAAI,8BAA8B,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACjG,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,uBAAuB,CAC9B,IAAY,EACZ,KAAc,EACd,MAAgC,EAChC,OAAgC;;IAEhC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,KAAK,MAAM,WAAW,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACvC,MAAM,MAAM,GAAG,0BAA0B,CAAC,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;YACjF,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC;QAC3B,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IAC7C,CAAC;IAED,MAAM,YAAY,GAAG,MAAA,MAAM,CAAC,KAAK,mCAAI,MAAM,CAAC,KAAK,CAAC;IAClD,IAAI,CAAC,YAAY;QAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IAEnD,MAAM,OAAO,GAAc,EAAE,CAAC;IAC9B,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;QACvC,MAAM,KAAK,mCACN,OAAO,KACV,MAAM,EAAE,EAAE,EACV,QAAQ,EAAE,EAAE,GACb,CAAC;QACF,MAAM,MAAM,GAAG,0BAA0B,CAAC,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;QAC3E,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5D,CAAC;IAED,IAAI,MAAM,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,IAAI,yCAAyC,CAAC,CAAC;QAChF,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IACnC,CAAC;IACD,IAAI,MAAM,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,IAAI,0CAA0C,CAAC,CAAC;QACjF,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IACnC,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAA,OAAO,CAAC,CAAC,CAAC,mCAAI,KAAK,EAAE,CAAC;AACvD,CAAC;AAED,SAAS,2BAA2B,CAClC,IAAY,EACZ,KAA8B,EAC9B,MAAgC,EAChC,OAAgC;;IAEhC,MAAM,UAAU,GAAG,MAAA,MAAM,CAAC,UAAU,mCAAI,EAAE,CAAC;IAC3C,MAAM,OAAO,GAA4B,EAAE,CAAC;IAE5C,KAAK,MAAM,QAAQ,IAAI,MAAA,MAAM,CAAC,QAAQ,mCAAI,EAAE,EAAE,CAAC;QAC7C,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;QAClC,uEAAuE;QACvE,wEAAwE;QACxE,0EAA0E;QAC1E,MAAM,SAAS,GACb,SAAS,KAAK,SAAS;eACpB,SAAS,KAAK,IAAI;eAClB,SAAS,KAAK,EAAE;eAChB,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;QAC1D,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,8BAA8B,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,QAAQ,GAAG,CAAC,CAAC;QAC1F,CAAC;IACH,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACvD,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;YACpD,IAAI,IAAI,IAAI,UAAU,IAAI,CAAC,OAAO,CAAC,sBAAsB;gBAAE,OAAO,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC;YACtF,SAAS;QACX,CAAC;QAED,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,IAAI,MAAM,CAAC,oBAAoB,KAAK,KAAK,IAAI,OAAO,CAAC,sBAAsB,EAAE,CAAC;gBAC5E,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,8BAA8B,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,GAAG,CAAC,CAAC;YACxF,CAAC;iBAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,oBAAoB,CAAC,EAAE,CAAC;gBACjD,OAAO,CAAC,IAAI,CAAC,GAAG,0BAA0B,CACxC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,EAC/B,UAAU,EACV,MAAM,CAAC,oBAAoB,EAC3B,OAAO,CACR,CAAC,KAAK,CAAC;YACV,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC;YAC7B,CAAC;YACD,SAAS;QACX,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,GAAG,0BAA0B,CACxC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,EAC/B,UAAU,EACV,QAAQ,EACR,OAAO,CACR,CAAC,KAAK,CAAC;IACV,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,0BAA0B,CACjC,IAAY,EACZ,KAAgB,EAChB,MAAgC,EAChC,OAAgC;IAEhC,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpE,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,IAAI,2BAA2B,MAAM,CAAC,QAAQ,QAAQ,MAAM,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAC7H,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpE,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,IAAI,0BAA0B,MAAM,CAAC,QAAQ,QAAQ,MAAM,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAC5H,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IAEhC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QAChC,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC;QAClC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YAC/B,MAAM,UAAU,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;YACvC,OAAO,UAAU;gBACf,CAAC,CAAC,0BAA0B,CAAC,GAAG,IAAI,IAAI,KAAK,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,KAAK;gBAClF,CAAC,CAAC,IAAI,CAAC;QACX,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,0BAA0B,CAAC,GAAG,IAAI,IAAI,KAAK,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,KAAiC,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC;AACpJ,CAAC;AAED,SAAS,0BAA0B,CACjC,IAAY,EACZ,QAAiB,EACjB,MAAgC,EAChC,OAAgC;;IAEhC,MAAM,SAAS,GAAG,uBAAuB,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3E,IAAI,CAAC,SAAS,CAAC,OAAO;QAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IACnD,IAAI,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;IAE5B,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC3C,IACE,OAAO,CAAC,gBAAgB;WACrB,YAAY,CAAC,MAAM,GAAG,CAAC;WACvB,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,EACvD,CAAC;QACD,MAAM,OAAO,GAAG,mBAAmB,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QACzD,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,qBAAqB,IAAI,QAAQ,OAAO,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;YAC/E,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QACxB,CAAC;IACH,CAAC;IAED,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;QACpF,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,IAAI,aAAa,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC5E,OAAO,EAAE,KAAK,EAAE,CAAC;IACnB,CAAC;IAED,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QACpE,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,IAAI,aAAa,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACpF,CAAC;IAED,IACE,MAAM,CAAC,IAAI;WACR,CAAC,OAAO,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC;WACrC,CAAC,OAAO,CAAC,kBAAkB,CAAC,GAAG,CAAC,MAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,mCAAI,IAAI,CAAC;WAC/D,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,WAAW,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,EAChE,CAAC;QACD,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,IAAI,oBAAoB,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACtF,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,oBAAoB,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5D,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,yBAAyB,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACjE,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,KAAK,GAAG,0BAA0B,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACnE,CAAC;IACD,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACpB,KAAK,GAAG,2BAA2B,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACpE,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,CAAC;AACnB,CAAC;AAED,SAAgB,uCAAuC,CACrD,KAA6B,EAC7B,QAAgB,EAChB,IAA6B,EAC7B,UAA8C,EAAE;;IAEhD,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7D,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,CAAC,sCAAsC,CAAC;YAChD,OAAO,EAAE,EAAE;YACX,QAAQ,EAAE,EAAE;SACb,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;IAC3E,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,CAAC,8BAA8B,QAAQ,GAAG,CAAC;YACnD,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,EAAE;SACb,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;IACxC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IAC/D,CAAC;IAED,MAAM,OAAO,GAA4B;QACvC,kBAAkB,EAAE,IAAI,GAAG,CAAC,MAAA,OAAO,CAAC,kBAAkB,mCAAI,CAAC,OAAO,CAAC,CAAC;QACpE,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,KAAK,IAAI;QACnD,sBAAsB,EAAE,OAAO,CAAC,sBAAsB,KAAK,IAAI;QAC/D,MAAM,EAAE,EAAE;QACV,QAAQ,EAAE,EAAE;KACb,CAAC;IAEF,MAAM,gBAAgB,mCACjB,MAAM,KACT,IAAI,EAAE,MAAA,MAAM,CAAC,IAAI,mCAAI,QAAQ,GAC9B,CAAC;IACF,MAAM,OAAO,GAAG,0BAA0B,CAAC,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC;IAEtF,OAAO;QACL,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;QAC/B,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;QAC3C,QAAQ,EAAE,OAAO,CAAC,QAAQ;KAC3B,CAAC;AACJ,CAAC;AAED,SAAgB,2BAA2B,CACzC,KAA6B,EAC7B,QAAgB,EAChB,IAA6B,EAC7B,UAA8C,EAAE;IAEhD,MAAM,MAAM,GAAG,uCAAuC,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACvF,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,MAAM,EAAE,MAAM,CAAC,MAAM;KACtB,CAAC;AACJ,CAAC;AAED,SAAgB,yBAAyB,CACvC,KAA6B,EAC7B,QAAgB,EAChB,IAA6B,EAC7B,OAA4C;IAE5C,MAAM,MAAM,GAAG,2BAA2B,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC3E,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,WAAW,QAAQ,eAAe,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChF,CAAC;AACH,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import ApiGroup, { ApiConfig } from '../ApiGroup';
2
2
  import ChatStream from './ChatStream';
3
3
  import ChatToolsApi from './ChatTools';
4
- import { ChatCompletionParams, ChatCompletionChunk, ChatCompletionResult, ChatJobStateEvent, ChatMessage, HostedChatCompletionParams, HostedChatCompletionResult, LLMCostEstimation, LLMModelInfo } from './types';
4
+ import { ChatCompletionParams, ChatCompletionChunk, ChatCompletionResult, ChatJobStateEvent, ChatMessage, ChatRunEvent, ChatRunRecord, HostedChatCompletionParams, HostedChatCompletionResult, LLMCostEstimation, LLMModelInfo, StartChatRunParams, StreamChatRunEventsOptions } from './types';
5
5
  import type ProjectsApi from '../Projects';
6
6
  export interface ChatApiEvents {
7
7
  /** Emitted for each token chunk received during streaming */
@@ -71,9 +71,32 @@ declare class ChatApi extends ApiGroup<ChatApiEvents> {
71
71
  stream?: false;
72
72
  }) => Promise<ChatCompletionResult>) & ((params: ChatCompletionParams) => Promise<ChatStream | ChatCompletionResult>);
73
73
  };
74
+ /**
75
+ * Hosted REST chat completion (`POST /v1/chat/completions`). The API
76
+ * executes any eligible hosted tools server-side and returns the
77
+ * final result within the request lifetime.
78
+ */
74
79
  hosted: {
75
80
  create: (params: HostedChatCompletionParams) => Promise<HostedChatCompletionResult>;
76
81
  };
82
+ /**
83
+ * Durable hosted chat runs (`POST /v1/chat/runs`). A run is submitted
84
+ * and persisted server-side; the executor drives the LLM/tool loop
85
+ * without requiring the client to stay connected. Clients can
86
+ * disconnect and reattach via SSE `Last-Event-ID` replay or fetch
87
+ * the final snapshot.
88
+ *
89
+ * - `create` returns the persisted run record immediately (202).
90
+ * - `get` reads the current run state.
91
+ * - `cancel` flips the run to `cancelled` and aborts in-flight work.
92
+ * - `streamEvents` yields `ChatRunEvent`s via SSE.
93
+ */
94
+ runs: {
95
+ create: (params: StartChatRunParams) => Promise<ChatRunRecord>;
96
+ get: (runId: string) => Promise<ChatRunRecord>;
97
+ cancel: (runId: string, reason?: string) => Promise<ChatRunRecord>;
98
+ streamEvents: (runId: string, options?: StreamChatRunEventsOptions) => AsyncIterableIterator<ChatRunEvent>;
99
+ };
77
100
  constructor(config: ApiConfig, projects?: ProjectsApi);
78
101
  /** Available LLM models and their worker counts */
79
102
  get models(): Record<string, LLMModelInfo>;
@@ -123,6 +146,23 @@ declare class ChatApi extends ApiGroup<ChatApiEvents> {
123
146
  private normalizeSogniToolsMode;
124
147
  private createCompletion;
125
148
  private createHostedCompletion;
149
+ private chatRunFetch;
150
+ private chatRunJson;
151
+ /**
152
+ * Submit a durable hosted chat run. Returns the persisted run record;
153
+ * the executor drives the LLM/tool loop server-side.
154
+ */
155
+ private createChatRun;
156
+ /** Read a persisted chat run record. */
157
+ private getChatRun;
158
+ /** Cancel an in-flight chat run. */
159
+ private cancelChatRun;
160
+ /**
161
+ * SSE iterator over chat-run events. Honors `Last-Event-ID` for replay.
162
+ * Yields events as `ChatRunEvent`. Caller is responsible for breaking
163
+ * the loop when they see a terminal `run_*` event type they care about.
164
+ */
165
+ private streamChatRunEvents;
126
166
  /**
127
167
  * Send a single chat completion request (no auto tool execution).
128
168
  */