ugly-app 0.1.645 → 0.1.646
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.
- package/dist/agent/server/UglyBotTextStream.d.ts.map +1 -1
- package/dist/agent/server/UglyBotTextStream.js +164 -7
- package/dist/agent/server/UglyBotTextStream.js.map +1 -1
- package/dist/cli/version.d.ts +1 -1
- package/dist/cli/version.js +1 -1
- package/dist/server/AiImage.d.ts.map +1 -1
- package/dist/server/AiImage.js +4 -2
- package/dist/server/AiImage.js.map +1 -1
- package/dist/server/AiText.d.ts.map +1 -1
- package/dist/server/AiText.js +4 -2
- package/dist/server/AiText.js.map +1 -1
- package/package.json +1 -1
- package/src/agent/server/UglyBotTextStream.ts +154 -5
- package/src/cli/version.ts +1 -1
- package/src/server/AiImage.ts +4 -2
- package/src/server/AiText.ts +4 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UglyBotTextStream.d.ts","sourceRoot":"","sources":["../../../src/agent/server/UglyBotTextStream.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACjF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iDAAiD,CAAC;AACpF,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAO5E,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,WAAW,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,+DAA+D;IAC/D,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,mBAAmB;IAClC,kFAAkF;IAClF,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,8CAA8C;IAC9C,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACtC;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,eAAe,CAAC;IAC5B,SAAS,EAAE,YAAY,CAAC;IACxB,iFAAiF;IACjF,OAAO,EAAE,WAAW,EAAE,CAAC;CACxB;
|
|
1
|
+
{"version":3,"file":"UglyBotTextStream.d.ts","sourceRoot":"","sources":["../../../src/agent/server/UglyBotTextStream.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACjF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iDAAiD,CAAC;AACpF,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAO5E,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,WAAW,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,+DAA+D;IAC/D,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,mBAAmB;IAClC,kFAAkF;IAClF,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,8CAA8C;IAC9C,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACtC;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,eAAe,CAAC;IAC5B,SAAS,EAAE,YAAY,CAAC;IACxB,iFAAiF;IACjF,OAAO,EAAE,WAAW,EAAE,CAAC;CACxB;AAkTD;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,kBAAkB,EACzB,MAAM,EAAE,mBAAmB,EAC3B,IAAI,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,GAC9B,OAAO,CAAC,mBAAmB,CAAC,CA0C9B"}
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
// Transient failures (429 / 5xx / network) retry with exponential backoff; the
|
|
13
13
|
// call is abortable via `opts.signal`.
|
|
14
14
|
import { getUserToken } from '../../server/auth/userContext.js';
|
|
15
|
-
|
|
15
|
+
import { getUglyBotUrl } from '../../shared/uglyBotUrl.js';
|
|
16
16
|
const DEFAULT_TIMEOUT_MS = 120_000;
|
|
17
17
|
const MAX_ATTEMPTS = 3;
|
|
18
18
|
/** Mirror of AiText.resolveConfig — pick endpoint + bearer for the billing mode.
|
|
@@ -23,7 +23,11 @@ const MAX_ATTEMPTS = 3;
|
|
|
23
23
|
* the mode flag silently owner-bills the assistant (→ spurious 402 when the app
|
|
24
24
|
* owner's balance is empty even though the signed-in user has funds). */
|
|
25
25
|
function resolveConfig() {
|
|
26
|
-
|
|
26
|
+
// AI lives on the ugly.bot platform host (the same host as auth /verify, the
|
|
27
|
+
// op proxy, push/search) — `${getUglyBotUrl()}/v1/ai`. Derive it from the one
|
|
28
|
+
// UGLY_BOT_URL source of truth rather than a separate AI_PROXY_URL pointing at
|
|
29
|
+
// a now-defunct `api.ugly.bot`; AI_PROXY_URL stays only as an explicit override.
|
|
30
|
+
const baseUrl = process.env['AI_PROXY_URL'] ?? `${getUglyBotUrl()}/v1/ai`;
|
|
27
31
|
const ownerToken = process.env['AI_PROXY_TOKEN'] ?? '';
|
|
28
32
|
const selfHost = process.env['UGLY_APP_AUTH_MODE'] === 'self';
|
|
29
33
|
const userToken = selfHost ? null : getUserToken();
|
|
@@ -100,6 +104,155 @@ async function postText(body, signal) {
|
|
|
100
104
|
}
|
|
101
105
|
throw lastErr instanceof Error ? lastErr : new Error('[agent] turn failed');
|
|
102
106
|
}
|
|
107
|
+
/** The `/text/stream` endpoint isn't available (old proxy) — fall back to the
|
|
108
|
+
* buffered `/text` POST. Pre-byte only, so no double-run / double-charge. */
|
|
109
|
+
class StreamUnavailableError extends Error {
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* POST to the `/text/stream` SSE endpoint and emit text deltas live via
|
|
113
|
+
* `events.onText`. Returns the final `done` payload — the SAME shape as the
|
|
114
|
+
* buffered `/text` response — so `parseResponse` + telemetry are unchanged.
|
|
115
|
+
* Retries transient pre-byte failures; throws `StreamUnavailableError` on 404
|
|
116
|
+
* so the caller can fall back to buffered.
|
|
117
|
+
*/
|
|
118
|
+
async function streamText(body, events, signal) {
|
|
119
|
+
let lastErr;
|
|
120
|
+
for (let attempt = 1; attempt <= MAX_ATTEMPTS; attempt++) {
|
|
121
|
+
const { endpoint, bearer } = resolveConfig();
|
|
122
|
+
const controller = new AbortController();
|
|
123
|
+
const onAbort = () => controller.abort();
|
|
124
|
+
if (signal) {
|
|
125
|
+
if (signal.aborted)
|
|
126
|
+
controller.abort();
|
|
127
|
+
else
|
|
128
|
+
signal.addEventListener('abort', onAbort, { once: true });
|
|
129
|
+
}
|
|
130
|
+
const timer = setTimeout(() => controller.abort(), DEFAULT_TIMEOUT_MS);
|
|
131
|
+
let emitted = false;
|
|
132
|
+
try {
|
|
133
|
+
const res = await globalThis.fetch(`${endpoint}/stream`, {
|
|
134
|
+
method: 'POST',
|
|
135
|
+
headers: {
|
|
136
|
+
Authorization: `Bearer ${bearer}`,
|
|
137
|
+
'Content-Type': 'application/json',
|
|
138
|
+
Accept: 'text/event-stream',
|
|
139
|
+
},
|
|
140
|
+
body: JSON.stringify(body),
|
|
141
|
+
signal: controller.signal,
|
|
142
|
+
});
|
|
143
|
+
if (!res.ok || !res.body) {
|
|
144
|
+
const errBody = res.ok ? '' : await res.text().catch(() => '');
|
|
145
|
+
if (res.status === 404)
|
|
146
|
+
throw new StreamUnavailableError();
|
|
147
|
+
if (isTransient(res.status) && attempt < MAX_ATTEMPTS) {
|
|
148
|
+
lastErr = new Error(`[agent] stream ${res.status}: ${errBody}`);
|
|
149
|
+
await sleep(250 * 2 ** (attempt - 1));
|
|
150
|
+
continue;
|
|
151
|
+
}
|
|
152
|
+
throw new Error(`[agent] stream ${res.status}: ${errBody}`);
|
|
153
|
+
}
|
|
154
|
+
// A proxy that doesn't speak SSE here (older build returning JSON) → fall
|
|
155
|
+
// back to the buffered POST rather than mis-parsing the body.
|
|
156
|
+
if (!(res.headers.get('content-type') ?? '').includes('text/event-stream')) {
|
|
157
|
+
throw new StreamUnavailableError();
|
|
158
|
+
}
|
|
159
|
+
const reader = res.body.getReader();
|
|
160
|
+
const decoder = new TextDecoder('utf-8');
|
|
161
|
+
let buffer = '';
|
|
162
|
+
let done = null;
|
|
163
|
+
let streamError = null;
|
|
164
|
+
let reading = true;
|
|
165
|
+
while (reading) {
|
|
166
|
+
const { value, done: rdone } = await reader.read();
|
|
167
|
+
if (rdone)
|
|
168
|
+
break;
|
|
169
|
+
buffer += decoder.decode(value, { stream: true });
|
|
170
|
+
let nlIdx;
|
|
171
|
+
while ((nlIdx = buffer.indexOf('\n')) !== -1) {
|
|
172
|
+
const line = buffer.slice(0, nlIdx).replace(/\r$/, '');
|
|
173
|
+
buffer = buffer.slice(nlIdx + 1);
|
|
174
|
+
if (!line || line.startsWith(':') || !line.startsWith('data:'))
|
|
175
|
+
continue;
|
|
176
|
+
const dataStr = line.slice(5).trimStart();
|
|
177
|
+
if (!dataStr)
|
|
178
|
+
continue;
|
|
179
|
+
let evt;
|
|
180
|
+
try {
|
|
181
|
+
evt = JSON.parse(dataStr);
|
|
182
|
+
}
|
|
183
|
+
catch {
|
|
184
|
+
continue;
|
|
185
|
+
}
|
|
186
|
+
if (evt.type === 'delta') {
|
|
187
|
+
if (typeof evt.text === 'string' && evt.text) {
|
|
188
|
+
emitted = true;
|
|
189
|
+
events.onText(evt.text);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
else if (evt.type === 'thinking') {
|
|
193
|
+
if (typeof evt.text === 'string' && evt.text && events.onThinking) {
|
|
194
|
+
events.onThinking(evt.text);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
else if (evt.type === 'done') {
|
|
198
|
+
done = JSON.parse(dataStr);
|
|
199
|
+
reading = false;
|
|
200
|
+
break;
|
|
201
|
+
}
|
|
202
|
+
else if (evt.type === 'error') {
|
|
203
|
+
streamError = evt.error ?? 'stream error';
|
|
204
|
+
reading = false;
|
|
205
|
+
break;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
if (streamError)
|
|
210
|
+
throw new Error(`[agent] proxy stream: ${streamError}`);
|
|
211
|
+
if (!done)
|
|
212
|
+
throw new Error('[agent] proxy stream ended without a done frame');
|
|
213
|
+
return done;
|
|
214
|
+
}
|
|
215
|
+
catch (err) {
|
|
216
|
+
if (controller.signal.aborted)
|
|
217
|
+
throw new Error('[agent] turn aborted');
|
|
218
|
+
// Once tokens were emitted, never retry/fall back — that would re-run the
|
|
219
|
+
// model and double-charge. Surface the partial failure.
|
|
220
|
+
if (emitted)
|
|
221
|
+
throw err;
|
|
222
|
+
if (err instanceof StreamUnavailableError)
|
|
223
|
+
throw err;
|
|
224
|
+
lastErr = err;
|
|
225
|
+
if (attempt < MAX_ATTEMPTS) {
|
|
226
|
+
await sleep(250 * 2 ** (attempt - 1));
|
|
227
|
+
continue;
|
|
228
|
+
}
|
|
229
|
+
throw err;
|
|
230
|
+
}
|
|
231
|
+
finally {
|
|
232
|
+
clearTimeout(timer);
|
|
233
|
+
if (signal)
|
|
234
|
+
signal.removeEventListener('abort', onAbort);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
throw lastErr instanceof Error ? lastErr : new Error('[agent] stream failed');
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Fetch one turn: stream from `/text/stream` (live `onText` deltas); if that
|
|
241
|
+
* endpoint is unavailable (404 on an older proxy), fall back to the buffered
|
|
242
|
+
* `/text` POST. `streamed` tells the caller whether `onText` already fired so
|
|
243
|
+
* it doesn't re-emit the whole text at the end.
|
|
244
|
+
*/
|
|
245
|
+
async function fetchTurn(body, events, signal) {
|
|
246
|
+
try {
|
|
247
|
+
return { data: await streamText(body, events, signal), streamed: true };
|
|
248
|
+
}
|
|
249
|
+
catch (err) {
|
|
250
|
+
if (err instanceof StreamUnavailableError) {
|
|
251
|
+
return { data: await postText(body, signal), streamed: false };
|
|
252
|
+
}
|
|
253
|
+
throw err;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
103
256
|
/** Extract text + tool_use + thinking from a proxy response into normalized parts. */
|
|
104
257
|
function parseResponse(data) {
|
|
105
258
|
let text = '';
|
|
@@ -159,12 +312,16 @@ export async function streamUglyBotTurn(input, events, opts) {
|
|
|
159
312
|
...(input.options ? { options: input.options } : {}),
|
|
160
313
|
...(input.tools ? { tools: input.tools } : {}),
|
|
161
314
|
};
|
|
162
|
-
const data = await
|
|
315
|
+
const { data, streamed } = await fetchTurn(body, events, opts?.signal);
|
|
163
316
|
const { text, thinking, toolUse, content } = parseResponse(data);
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
if (
|
|
167
|
-
events.
|
|
317
|
+
// When streamed, `onText` already fired per token (and thinking deltas, if
|
|
318
|
+
// any) — don't re-emit the whole text. The buffered fallback emits once here.
|
|
319
|
+
if (!streamed) {
|
|
320
|
+
if (thinking && events.onThinking)
|
|
321
|
+
events.onThinking(thinking);
|
|
322
|
+
if (text)
|
|
323
|
+
events.onText(text);
|
|
324
|
+
}
|
|
168
325
|
const stopReason = toolUse.length > 0 ? 'tool_use' : 'end_turn';
|
|
169
326
|
const usage = data.usage ?? {};
|
|
170
327
|
const telemetry = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UglyBotTextStream.js","sourceRoot":"","sources":["../../../src/agent/server/UglyBotTextStream.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"UglyBotTextStream.js","sourceRoot":"","sources":["../../../src/agent/server/UglyBotTextStream.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const CLI_VERSION = "0.1.
|
|
1
|
+
export declare const CLI_VERSION = "0.1.646";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/cli/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AiImage.d.ts","sourceRoot":"","sources":["../../src/server/AiImage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAMrD;;;GAGG;AACH,cAAM,0BAA2B,SAAQ,KAAK;;CAO7C;AACD,OAAO,EAAE,0BAA0B,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"AiImage.d.ts","sourceRoot":"","sources":["../../src/server/AiImage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAMrD;;;GAGG;AACH,cAAM,0BAA2B,SAAQ,KAAK;;CAO7C;AACD,OAAO,EAAE,0BAA0B,EAAE,CAAC;AAwBtC,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACtE;AASD;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,QAAQ,CAAC,EAAE,eAAe,GACzB,cAAc,CAyDhB;AAGD,OAAO,EAAE,cAAc,IAAI,oBAAoB,EAAE,CAAC"}
|
package/dist/server/AiImage.js
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* caller-side image cache during the AI cutover.
|
|
15
15
|
*/
|
|
16
16
|
import { getUserToken } from './auth/userContext.js';
|
|
17
|
-
|
|
17
|
+
import { getUglyBotUrl } from '../shared/uglyBotUrl.js';
|
|
18
18
|
const DEFAULT_TIMEOUT_MS = 60_000;
|
|
19
19
|
/**
|
|
20
20
|
* Thrown when Mode A (uglybot auth) is active but no end-user token is on
|
|
@@ -28,7 +28,9 @@ class UnauthenticatedAiCallError extends Error {
|
|
|
28
28
|
}
|
|
29
29
|
export { UnauthenticatedAiCallError };
|
|
30
30
|
function resolveConfig() {
|
|
31
|
-
|
|
31
|
+
// AI proxy lives on the ugly.bot platform host; derive from UGLY_BOT_URL.
|
|
32
|
+
// AI_PROXY_URL stays only as an explicit override.
|
|
33
|
+
const baseUrl = process.env['AI_PROXY_URL'] ?? `${getUglyBotUrl()}/v1/ai`;
|
|
32
34
|
const ownerToken = process.env['AI_PROXY_TOKEN'] ?? '';
|
|
33
35
|
// Bill the END USER when a session token is present; fall back to the owner
|
|
34
36
|
// token for self-hosted apps + background/no-user contexts. See AiText.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AiImage.js","sourceRoot":"","sources":["../../src/server/AiImage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"AiImage.js","sourceRoot":"","sources":["../../src/server/AiImage.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AiText.d.ts","sourceRoot":"","sources":["../../src/server/AiText.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EACV,OAAO,EACP,cAAc,EACd,cAAc,EACd,OAAO,EACR,MAAM,eAAe,CAAC;AAMvB;;;;;GAKG;AACH,cAAM,0BAA2B,SAAQ,KAAK;;CAO7C;AACD,OAAO,EAAE,0BAA0B,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"AiText.d.ts","sourceRoot":"","sources":["../../src/server/AiText.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EACV,OAAO,EACP,cAAc,EACd,cAAc,EACd,OAAO,EACR,MAAM,eAAe,CAAC;AAMvB;;;;;GAKG;AACH,cAAM,0BAA2B,SAAQ,KAAK;;CAO7C;AACD,OAAO,EAAE,0BAA0B,EAAE,CAAC;AA8EtC,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACzE,YAAY,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,EACjC,MAAM,EAAE,CAAC,EACT,QAAQ,EAAE,OAAO,EAAE,EACnB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACvB,iBAAiB,CACf,QAAQ,EAAE,OAAO,EAAE,EACnB,KAAK,EAAE,OAAO,EACd,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,cAAc,CAAC,CAAC;CAC5B;AA0BD;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,EACd,QAAQ,CAAC,EAAE,cAAc,GACxB,aAAa,CA+Bf;AAGD,OAAO,EAAE,aAAa,IAAI,mBAAmB,EAAE,CAAC"}
|
package/dist/server/AiText.js
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
* the AI cutover.
|
|
17
17
|
*/
|
|
18
18
|
import { getUserToken } from './auth/userContext.js';
|
|
19
|
-
|
|
19
|
+
import { getUglyBotUrl } from '../shared/uglyBotUrl.js';
|
|
20
20
|
const DEFAULT_TIMEOUT_MS = 30_000;
|
|
21
21
|
/**
|
|
22
22
|
* Thrown when Mode A (uglybot auth) is active but no end-user token is on
|
|
@@ -32,7 +32,9 @@ class UnauthenticatedAiCallError extends Error {
|
|
|
32
32
|
}
|
|
33
33
|
export { UnauthenticatedAiCallError };
|
|
34
34
|
function resolveConfig() {
|
|
35
|
-
|
|
35
|
+
// The AI proxy lives on the ugly.bot platform host; derive it from the single
|
|
36
|
+
// UGLY_BOT_URL source of truth. AI_PROXY_URL stays only as an explicit override.
|
|
37
|
+
const baseUrl = process.env['AI_PROXY_URL'] ?? `${getUglyBotUrl()}/v1/ai`;
|
|
36
38
|
const ownerToken = process.env['AI_PROXY_TOKEN'] ?? '';
|
|
37
39
|
// Bill the END USER whenever a session token is in context (user-facing
|
|
38
40
|
// requests carry it via ALS); fall back to the owner token for self-hosted
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AiText.js","sourceRoot":"","sources":["../../src/server/AiText.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AASH,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"AiText.js","sourceRoot":"","sources":["../../src/server/AiText.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AASH,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAElC;;;;;GAKG;AACH,MAAM,0BAA2B,SAAQ,KAAK;IAC5C;QACE,KAAK,CACH,iGAAiG,CAClG,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAC;IAC3C,CAAC;CACF;AACD,OAAO,EAAE,0BAA0B,EAAE,CAAC;AAEtC,SAAS,aAAa;IACpB,8EAA8E;IAC9E,iFAAiF;IACjF,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,GAAG,aAAa,EAAE,QAAQ,CAAC;IAC1E,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC;IACvD,wEAAwE;IACxE,2EAA2E;IAC3E,4EAA4E;IAC5E,0EAA0E;IAC1E,6EAA6E;IAC7E,yEAAyE;IACzE,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,KAAK,MAAM,CAAC;IAC9D,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC;IACnD,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,EAAE,QAAQ,EAAE,GAAG,OAAO,mBAAmB,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC;IACvG,CAAC;IACD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,qDAAqD;QACrD,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,0BAA0B,EAAE,CAAC;QACtD,MAAM,IAAI,KAAK,CACb,+DAA+D;YAC7D,sDAAsD,CACzD,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,GAAG,OAAO,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC;AAC5F,CAAC;AASD,KAAK,UAAU,QAAQ,CAAC,IAA6B;IACnD,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,aAAa,EAAE,CAAC;IAExD,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,CAAC;IAC9D,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,QAAQ,EAAE;YAC3C,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,eAAe,EAAE,UAAU,MAAM,EAAE;gBACnC,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAC1B,MAAM,EAAE,UAAU,CAAC,MAAM;SAC1B,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YACjD,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE;gBACvC,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,IAAI,EAAE,OAAO;aACd,CAAC,CAAC;YACH,MAAM,IAAI,KAAK,CAAC,4BAA4B,GAAG,CAAC,MAAM,MAAM,OAAO,EAAE,CAAC,CAAC;QACzE,CAAC;QACD,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAsB,CAAC;QACrD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAK,GAAyB,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YACrD,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAChD,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,IAAuB;IAC7C,IAAI,IAAI,CAAC,OAAO,EAAE,OAAO,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;IACrE,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC,OAAO,CAAC;IACpD,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC,QAAQ,CAAC;IACtD,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;AAC7D,CAAC;AAgBD,SAAS,SAAS,CAChB,QAAmB,EACnB,OAAmC,EACnC,MAAc,EACd,KAA+B;IAE/B,MAAM,IAAI,GAA4B;QACpC,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,eAAe;QACxC,QAAQ;QACR,MAAM;QACN,OAAO,EAAE;YACP,SAAS,EAAE,OAAO,EAAE,SAAS;YAC7B,WAAW,EAAE,OAAO,EAAE,WAAW;YACjC,cAAc,EAAE,OAAO,EAAE,cAAc;YACvC,eAAe,EAAE,OAAO,EAAE,eAAe;YACzC,QAAQ,EAAE,OAAO,EAAE,QAAQ;YAC3B,MAAM,EAAE,OAAO,EAAE,MAAM;YACvB,gBAAgB,EAAE,OAAO,EAAE,gBAAgB;SAC5C;KACF,CAAC;IACF,IAAI,KAAK;QAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACtC,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAC3B,MAAc,EACd,QAAyB;IAEzB,OAAO;QACL,KAAK,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO;YAC9B,MAAM,IAAI,GAAG,EAAE,GAAG,QAAQ,EAAE,GAAG,OAAO,EAAE,CAAC;YACzC,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;YAC/D,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC;QAED,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO;YAC1C,MAAM,IAAI,GAAG,EAAE,GAAG,QAAQ,EAAE,GAAG,OAAO,EAAE,CAAC;YACzC,MAAM,IAAI,GAAG,MAAM,QAAQ,CACzB,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE;gBAChC,MAAM,EAAG,MAAuB,CAAC,IAAI;gBACrC,IAAI,EAAE,MAAM;aACb,CAAC,CACH,CAAC;YACF,MAAM,GAAG,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;YACjC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAA2B,CAAC;QACnD,CAAC;QAED,KAAK,CAAC,iBAAiB,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO;YAC9C,MAAM,IAAI,GAAG,EAAE,GAAG,QAAQ,EAAE,GAAG,OAAO,EAAE,CAAC;YACzC,MAAM,IAAI,GAAG,MAAM,QAAQ,CACzB,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAC7C,CAAC;YACF,MAAM,QAAQ,GACZ,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE,OAAO,IAAI,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;YAC/D,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;YACvC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;QACjC,CAAC;KACF,CAAC;AACJ,CAAC;AAED,yDAAyD;AACzD,OAAO,EAAE,aAAa,IAAI,mBAAmB,EAAE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ugly-app",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.646",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"comment:files": "Allowlist what ships to npm. dist = runtime; src = sourcemap targets (dist/*.js.map reference ../../src/); templates = CLI scaffold. Everything else at repo root (.pgdata local Postgres, coverage, assets/icons sources, test/, test-results/) is excluded by omission. The !negations strip the scaffold's installed deps + cruft (templates/node_modules is 200MB+ and must never ship). package.json/README/LICENSE ship automatically.",
|
|
6
6
|
"files": [
|
|
@@ -16,8 +16,8 @@ import type { ContentPart, Message, TextGenTool } from '../../shared/TextGen.js'
|
|
|
16
16
|
import type { MsgTelemetry } from '../../conversation/shared/ConversationStream.js';
|
|
17
17
|
import type { AgentStopReason, ToolUseRef } from '../shared/AgentStream.js';
|
|
18
18
|
import { getUserToken } from '../../server/auth/userContext.js';
|
|
19
|
+
import { getUglyBotUrl } from '../../shared/uglyBotUrl.js';
|
|
19
20
|
|
|
20
|
-
const DEFAULT_AI_PROXY_URL = 'https://api.ugly.bot/v1/ai';
|
|
21
21
|
const DEFAULT_TIMEOUT_MS = 120_000;
|
|
22
22
|
const MAX_ATTEMPTS = 3;
|
|
23
23
|
|
|
@@ -61,7 +61,11 @@ interface ResolvedConfig {
|
|
|
61
61
|
* the mode flag silently owner-bills the assistant (→ spurious 402 when the app
|
|
62
62
|
* owner's balance is empty even though the signed-in user has funds). */
|
|
63
63
|
function resolveConfig(): ResolvedConfig {
|
|
64
|
-
|
|
64
|
+
// AI lives on the ugly.bot platform host (the same host as auth /verify, the
|
|
65
|
+
// op proxy, push/search) — `${getUglyBotUrl()}/v1/ai`. Derive it from the one
|
|
66
|
+
// UGLY_BOT_URL source of truth rather than a separate AI_PROXY_URL pointing at
|
|
67
|
+
// a now-defunct `api.ugly.bot`; AI_PROXY_URL stays only as an explicit override.
|
|
68
|
+
const baseUrl = process.env['AI_PROXY_URL'] ?? `${getUglyBotUrl()}/v1/ai`;
|
|
65
69
|
const ownerToken = process.env['AI_PROXY_TOKEN'] ?? '';
|
|
66
70
|
const selfHost = process.env['UGLY_APP_AUTH_MODE'] === 'self';
|
|
67
71
|
const userToken = selfHost ? null : getUserToken();
|
|
@@ -158,6 +162,147 @@ async function postText(
|
|
|
158
162
|
throw lastErr instanceof Error ? lastErr : new Error('[agent] turn failed');
|
|
159
163
|
}
|
|
160
164
|
|
|
165
|
+
/** The `/text/stream` endpoint isn't available (old proxy) — fall back to the
|
|
166
|
+
* buffered `/text` POST. Pre-byte only, so no double-run / double-charge. */
|
|
167
|
+
class StreamUnavailableError extends Error {}
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* POST to the `/text/stream` SSE endpoint and emit text deltas live via
|
|
171
|
+
* `events.onText`. Returns the final `done` payload — the SAME shape as the
|
|
172
|
+
* buffered `/text` response — so `parseResponse` + telemetry are unchanged.
|
|
173
|
+
* Retries transient pre-byte failures; throws `StreamUnavailableError` on 404
|
|
174
|
+
* so the caller can fall back to buffered.
|
|
175
|
+
*/
|
|
176
|
+
async function streamText(
|
|
177
|
+
body: Record<string, unknown>,
|
|
178
|
+
events: StreamUglyBotEvents,
|
|
179
|
+
signal: AbortSignal | undefined,
|
|
180
|
+
): Promise<ProxyResponse> {
|
|
181
|
+
let lastErr: unknown;
|
|
182
|
+
for (let attempt = 1; attempt <= MAX_ATTEMPTS; attempt++) {
|
|
183
|
+
const { endpoint, bearer } = resolveConfig();
|
|
184
|
+
const controller = new AbortController();
|
|
185
|
+
const onAbort = (): void => controller.abort();
|
|
186
|
+
if (signal) {
|
|
187
|
+
if (signal.aborted) controller.abort();
|
|
188
|
+
else signal.addEventListener('abort', onAbort, { once: true });
|
|
189
|
+
}
|
|
190
|
+
const timer = setTimeout(() => controller.abort(), DEFAULT_TIMEOUT_MS);
|
|
191
|
+
let emitted = false;
|
|
192
|
+
try {
|
|
193
|
+
const res = await globalThis.fetch(`${endpoint}/stream`, {
|
|
194
|
+
method: 'POST',
|
|
195
|
+
headers: {
|
|
196
|
+
Authorization: `Bearer ${bearer}`,
|
|
197
|
+
'Content-Type': 'application/json',
|
|
198
|
+
Accept: 'text/event-stream',
|
|
199
|
+
},
|
|
200
|
+
body: JSON.stringify(body),
|
|
201
|
+
signal: controller.signal,
|
|
202
|
+
});
|
|
203
|
+
if (!res.ok || !res.body) {
|
|
204
|
+
const errBody = res.ok ? '' : await res.text().catch(() => '');
|
|
205
|
+
if (res.status === 404) throw new StreamUnavailableError();
|
|
206
|
+
if (isTransient(res.status) && attempt < MAX_ATTEMPTS) {
|
|
207
|
+
lastErr = new Error(`[agent] stream ${res.status}: ${errBody}`);
|
|
208
|
+
await sleep(250 * 2 ** (attempt - 1));
|
|
209
|
+
continue;
|
|
210
|
+
}
|
|
211
|
+
throw new Error(`[agent] stream ${res.status}: ${errBody}`);
|
|
212
|
+
}
|
|
213
|
+
// A proxy that doesn't speak SSE here (older build returning JSON) → fall
|
|
214
|
+
// back to the buffered POST rather than mis-parsing the body.
|
|
215
|
+
if (!(res.headers.get('content-type') ?? '').includes('text/event-stream')) {
|
|
216
|
+
throw new StreamUnavailableError();
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
const reader = res.body.getReader();
|
|
220
|
+
const decoder = new TextDecoder('utf-8');
|
|
221
|
+
let buffer = '';
|
|
222
|
+
let done: ProxyResponse | null = null;
|
|
223
|
+
let streamError: string | null = null;
|
|
224
|
+
let reading = true;
|
|
225
|
+
while (reading) {
|
|
226
|
+
const { value, done: rdone } = await reader.read();
|
|
227
|
+
if (rdone) break;
|
|
228
|
+
buffer += decoder.decode(value, { stream: true });
|
|
229
|
+
let nlIdx: number;
|
|
230
|
+
while ((nlIdx = buffer.indexOf('\n')) !== -1) {
|
|
231
|
+
const line = buffer.slice(0, nlIdx).replace(/\r$/, '');
|
|
232
|
+
buffer = buffer.slice(nlIdx + 1);
|
|
233
|
+
if (!line || line.startsWith(':') || !line.startsWith('data:')) continue;
|
|
234
|
+
const dataStr = line.slice(5).trimStart();
|
|
235
|
+
if (!dataStr) continue;
|
|
236
|
+
let evt: { type?: string; text?: string; error?: string };
|
|
237
|
+
try {
|
|
238
|
+
evt = JSON.parse(dataStr) as typeof evt;
|
|
239
|
+
} catch {
|
|
240
|
+
continue;
|
|
241
|
+
}
|
|
242
|
+
if (evt.type === 'delta') {
|
|
243
|
+
if (typeof evt.text === 'string' && evt.text) {
|
|
244
|
+
emitted = true;
|
|
245
|
+
events.onText(evt.text);
|
|
246
|
+
}
|
|
247
|
+
} else if (evt.type === 'thinking') {
|
|
248
|
+
if (typeof evt.text === 'string' && evt.text && events.onThinking) {
|
|
249
|
+
events.onThinking(evt.text);
|
|
250
|
+
}
|
|
251
|
+
} else if (evt.type === 'done') {
|
|
252
|
+
done = JSON.parse(dataStr) as ProxyResponse;
|
|
253
|
+
reading = false;
|
|
254
|
+
break;
|
|
255
|
+
} else if (evt.type === 'error') {
|
|
256
|
+
streamError = evt.error ?? 'stream error';
|
|
257
|
+
reading = false;
|
|
258
|
+
break;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
if (streamError) throw new Error(`[agent] proxy stream: ${streamError}`);
|
|
263
|
+
if (!done) throw new Error('[agent] proxy stream ended without a done frame');
|
|
264
|
+
return done;
|
|
265
|
+
} catch (err) {
|
|
266
|
+
if (controller.signal.aborted) throw new Error('[agent] turn aborted');
|
|
267
|
+
// Once tokens were emitted, never retry/fall back — that would re-run the
|
|
268
|
+
// model and double-charge. Surface the partial failure.
|
|
269
|
+
if (emitted) throw err;
|
|
270
|
+
if (err instanceof StreamUnavailableError) throw err;
|
|
271
|
+
lastErr = err;
|
|
272
|
+
if (attempt < MAX_ATTEMPTS) {
|
|
273
|
+
await sleep(250 * 2 ** (attempt - 1));
|
|
274
|
+
continue;
|
|
275
|
+
}
|
|
276
|
+
throw err;
|
|
277
|
+
} finally {
|
|
278
|
+
clearTimeout(timer);
|
|
279
|
+
if (signal) signal.removeEventListener('abort', onAbort);
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
throw lastErr instanceof Error ? lastErr : new Error('[agent] stream failed');
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
/**
|
|
286
|
+
* Fetch one turn: stream from `/text/stream` (live `onText` deltas); if that
|
|
287
|
+
* endpoint is unavailable (404 on an older proxy), fall back to the buffered
|
|
288
|
+
* `/text` POST. `streamed` tells the caller whether `onText` already fired so
|
|
289
|
+
* it doesn't re-emit the whole text at the end.
|
|
290
|
+
*/
|
|
291
|
+
async function fetchTurn(
|
|
292
|
+
body: Record<string, unknown>,
|
|
293
|
+
events: StreamUglyBotEvents,
|
|
294
|
+
signal: AbortSignal | undefined,
|
|
295
|
+
): Promise<{ data: ProxyResponse; streamed: boolean }> {
|
|
296
|
+
try {
|
|
297
|
+
return { data: await streamText(body, events, signal), streamed: true };
|
|
298
|
+
} catch (err) {
|
|
299
|
+
if (err instanceof StreamUnavailableError) {
|
|
300
|
+
return { data: await postText(body, signal), streamed: false };
|
|
301
|
+
}
|
|
302
|
+
throw err;
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
|
|
161
306
|
/** Extract text + tool_use + thinking from a proxy response into normalized parts. */
|
|
162
307
|
function parseResponse(data: ProxyResponse): {
|
|
163
308
|
text: string;
|
|
@@ -225,11 +370,15 @@ export async function streamUglyBotTurn(
|
|
|
225
370
|
...(input.tools ? { tools: input.tools } : {}),
|
|
226
371
|
};
|
|
227
372
|
|
|
228
|
-
const data = await
|
|
373
|
+
const { data, streamed } = await fetchTurn(body, events, opts?.signal);
|
|
229
374
|
const { text, thinking, toolUse, content } = parseResponse(data);
|
|
230
375
|
|
|
231
|
-
|
|
232
|
-
|
|
376
|
+
// When streamed, `onText` already fired per token (and thinking deltas, if
|
|
377
|
+
// any) — don't re-emit the whole text. The buffered fallback emits once here.
|
|
378
|
+
if (!streamed) {
|
|
379
|
+
if (thinking && events.onThinking) events.onThinking(thinking);
|
|
380
|
+
if (text) events.onText(text);
|
|
381
|
+
}
|
|
233
382
|
|
|
234
383
|
const stopReason: AgentStopReason =
|
|
235
384
|
toolUse.length > 0 ? 'tool_use' : 'end_turn';
|
package/src/cli/version.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// Auto-generated by prebuild — do not edit manually
|
|
2
|
-
export const CLI_VERSION = "0.1.
|
|
2
|
+
export const CLI_VERSION = "0.1.646";
|
package/src/server/AiImage.ts
CHANGED
|
@@ -16,8 +16,8 @@
|
|
|
16
16
|
|
|
17
17
|
import type { ImageGenOptions } from './ai/types.js';
|
|
18
18
|
import { getUserToken } from './auth/userContext.js';
|
|
19
|
+
import { getUglyBotUrl } from '../shared/uglyBotUrl.js';
|
|
19
20
|
|
|
20
|
-
const DEFAULT_AI_PROXY_URL = 'https://api.ugly.bot/v1/ai';
|
|
21
21
|
const DEFAULT_TIMEOUT_MS = 60_000;
|
|
22
22
|
|
|
23
23
|
/**
|
|
@@ -35,7 +35,9 @@ class UnauthenticatedAiCallError extends Error {
|
|
|
35
35
|
export { UnauthenticatedAiCallError };
|
|
36
36
|
|
|
37
37
|
function resolveConfig(): { endpoint: string; bearer: string; timeoutMs: number } {
|
|
38
|
-
|
|
38
|
+
// AI proxy lives on the ugly.bot platform host; derive from UGLY_BOT_URL.
|
|
39
|
+
// AI_PROXY_URL stays only as an explicit override.
|
|
40
|
+
const baseUrl = process.env['AI_PROXY_URL'] ?? `${getUglyBotUrl()}/v1/ai`;
|
|
39
41
|
const ownerToken = process.env['AI_PROXY_TOKEN'] ?? '';
|
|
40
42
|
// Bill the END USER when a session token is present; fall back to the owner
|
|
41
43
|
// token for self-hosted apps + background/no-user contexts. See AiText.
|
package/src/server/AiText.ts
CHANGED
|
@@ -24,8 +24,8 @@ import type {
|
|
|
24
24
|
ToolSet,
|
|
25
25
|
} from './ai/types.js';
|
|
26
26
|
import { getUserToken } from './auth/userContext.js';
|
|
27
|
+
import { getUglyBotUrl } from '../shared/uglyBotUrl.js';
|
|
27
28
|
|
|
28
|
-
const DEFAULT_AI_PROXY_URL = 'https://api.ugly.bot/v1/ai';
|
|
29
29
|
const DEFAULT_TIMEOUT_MS = 30_000;
|
|
30
30
|
|
|
31
31
|
/**
|
|
@@ -45,7 +45,9 @@ class UnauthenticatedAiCallError extends Error {
|
|
|
45
45
|
export { UnauthenticatedAiCallError };
|
|
46
46
|
|
|
47
47
|
function resolveConfig(): { endpoint: string; bearer: string; timeoutMs: number } {
|
|
48
|
-
|
|
48
|
+
// The AI proxy lives on the ugly.bot platform host; derive it from the single
|
|
49
|
+
// UGLY_BOT_URL source of truth. AI_PROXY_URL stays only as an explicit override.
|
|
50
|
+
const baseUrl = process.env['AI_PROXY_URL'] ?? `${getUglyBotUrl()}/v1/ai`;
|
|
49
51
|
const ownerToken = process.env['AI_PROXY_TOKEN'] ?? '';
|
|
50
52
|
// Bill the END USER whenever a session token is in context (user-facing
|
|
51
53
|
// requests carry it via ALS); fall back to the owner token for self-hosted
|