ugly-app 0.1.578 → 0.1.579

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 (37) hide show
  1. package/dist/cli/version.d.ts +1 -1
  2. package/dist/cli/version.js +1 -1
  3. package/dist/server/PushSend.d.ts.map +1 -1
  4. package/dist/server/PushSend.js +6 -7
  5. package/dist/server/PushSend.js.map +1 -1
  6. package/dist/server/User.d.ts.map +1 -1
  7. package/dist/server/User.js +4 -1
  8. package/dist/server/User.js.map +1 -1
  9. package/dist/server/ai/providers/UglyBotImageGenProvider.d.ts.map +1 -1
  10. package/dist/server/ai/providers/UglyBotImageGenProvider.js +7 -6
  11. package/dist/server/ai/providers/UglyBotImageGenProvider.js.map +1 -1
  12. package/dist/server/ai/providers/UglyBotTextGenProvider.d.ts.map +1 -1
  13. package/dist/server/ai/providers/UglyBotTextGenProvider.js +23 -7
  14. package/dist/server/ai/providers/UglyBotTextGenProvider.js.map +1 -1
  15. package/dist/server/embeddings/providers/OpenAI.js.map +1 -1
  16. package/dist/server/uglyBotProxy.d.ts +16 -1
  17. package/dist/server/uglyBotProxy.d.ts.map +1 -1
  18. package/dist/server/uglyBotProxy.js +28 -4
  19. package/dist/server/uglyBotProxy.js.map +1 -1
  20. package/dist/shared/ProxyOps.d.ts +747 -0
  21. package/dist/shared/ProxyOps.d.ts.map +1 -0
  22. package/dist/shared/ProxyOps.js +272 -0
  23. package/dist/shared/ProxyOps.js.map +1 -0
  24. package/dist/shared/index.d.ts +1 -0
  25. package/dist/shared/index.d.ts.map +1 -1
  26. package/dist/shared/index.js +1 -0
  27. package/dist/shared/index.js.map +1 -1
  28. package/package.json +1 -1
  29. package/src/cli/version.ts +1 -1
  30. package/src/server/PushSend.ts +7 -9
  31. package/src/server/User.ts +4 -1
  32. package/src/server/ai/providers/UglyBotImageGenProvider.ts +13 -21
  33. package/src/server/ai/providers/UglyBotTextGenProvider.ts +47 -37
  34. package/src/server/embeddings/providers/OpenAI.ts +1 -1
  35. package/src/server/uglyBotProxy.ts +48 -10
  36. package/src/shared/ProxyOps.ts +301 -0
  37. package/src/shared/index.ts +1 -0
@@ -1,2 +1,2 @@
1
- export declare const CLI_VERSION = "0.1.578";
1
+ export declare const CLI_VERSION = "0.1.579";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -1,3 +1,3 @@
1
1
  // Auto-generated by prebuild — do not edit manually
2
- export const CLI_VERSION = "0.1.578";
2
+ export const CLI_VERSION = "0.1.579";
3
3
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PushSend.d.ts","sourceRoot":"","sources":["../../src/server/PushSend.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,yDAAyD;IACzD,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,sCAAsC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,OAAO,CAAC;CACf;AAED;;;GAGG;AACH,wBAAsB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC,CAU5E"}
1
+ {"version":3,"file":"PushSend.d.ts","sourceRoot":"","sources":["../../src/server/PushSend.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,yDAAyD;IACzD,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,sCAAsC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,OAAO,CAAC;CACf;AAED;;;GAGG;AACH,wBAAsB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC,CAS5E"}
@@ -1,17 +1,16 @@
1
- import { DEFAULT_LOCAL_PORT } from '../shared/Defaults.js';
2
1
  import { uglyBotRequest } from './uglyBotProxy.js';
3
2
  /**
4
3
  * Send a push notification to a user via the ugly.bot platform.
5
4
  * Returns { sent: true } if the notification was delivered to at least one device.
6
5
  */
7
6
  export async function pushSend(input) {
8
- // Include the project's base URL so ugly.bot can construct absolute click URLs
9
- const baseUrl = process.env['PROJECT_URL'] ??
10
- `http://localhost:${process.env['PORT'] ?? DEFAULT_LOCAL_PORT}`;
11
7
  const result = await uglyBotRequest('pushSend', {
12
- ...input,
13
- baseUrl,
8
+ targetUserId: input.targetUserId,
9
+ title: input.title,
10
+ body: input.body,
11
+ path: input.path,
12
+ imageUrl: input.imageUrl,
14
13
  });
15
- return { sent: !!result.sent };
14
+ return { sent: result.sent };
16
15
  }
17
16
  //# sourceMappingURL=PushSend.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PushSend.js","sourceRoot":"","sources":["../../src/server/PushSend.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAkBnD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,KAAoB;IACjD,+EAA+E;IAC/E,MAAM,OAAO,GACX,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;QAC1B,oBAAoB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,kBAAkB,EAAE,CAAC;IAClE,MAAM,MAAM,GAAG,MAAM,cAAc,CAAqB,UAAU,EAAE;QAClE,GAAG,KAAK;QACR,OAAO;KACR,CAAC,CAAC;IACH,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;AACjC,CAAC"}
1
+ {"version":3,"file":"PushSend.js","sourceRoot":"","sources":["../../src/server/PushSend.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAkBnD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,KAAoB;IACjD,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,UAAU,EAAE;QAC9C,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,QAAQ,EAAE,KAAK,CAAC,QAAQ;KACzB,CAAC,CAAC;IACH,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;AAC/B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"User.d.ts","sourceRoot":"","sources":["../../src/server/User.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAsB,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAEjE"}
1
+ {"version":3,"file":"User.d.ts","sourceRoot":"","sources":["../../src/server/User.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAsB,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAKjE"}
@@ -3,6 +3,9 @@ import { uglyBotRequest } from './uglyBotProxy.js';
3
3
  * Fetch public user data (name, image) by user ID via the ugly.bot platform.
4
4
  */
5
5
  export async function userGet(userId) {
6
- return uglyBotRequest('userGet', { userId });
6
+ // `userGet` returns the raw platform user doc (app-specific fields); this is
7
+ // the framework's adaptation boundary to its PublicUser view.
8
+ const doc = await uglyBotRequest('userGet', { userId });
9
+ return (doc ?? {});
7
10
  }
8
11
  //# sourceMappingURL=User.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"User.js","sourceRoot":"","sources":["../../src/server/User.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAQnD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,MAAc;IAC1C,OAAO,cAAc,CAAa,SAAS,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;AAC3D,CAAC"}
1
+ {"version":3,"file":"User.js","sourceRoot":"","sources":["../../src/server/User.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAQnD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,MAAc;IAC1C,6EAA6E;IAC7E,8DAA8D;IAC9D,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IACxD,OAAO,CAAC,GAAG,IAAI,EAAE,CAA0B,CAAC;AAC9C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"UglyBotImageGenProvider.d.ts","sourceRoot":"","sources":["../../../../src/server/ai/providers/UglyBotImageGenProvider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAmB,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGrE,eAAO,MAAM,uBAAuB,EAAE,gBA8BrC,CAAC"}
1
+ {"version":3,"file":"UglyBotImageGenProvider.d.ts","sourceRoot":"","sources":["../../../../src/server/ai/providers/UglyBotImageGenProvider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAmB,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGrE,eAAO,MAAM,uBAAuB,EAAE,gBAsBrC,CAAC"}
@@ -10,14 +10,15 @@ export const uglyBotImageGenProvider = {
10
10
  options: {
11
11
  aspectRatio: options?.aspectRatio,
12
12
  },
13
- ...(options?.userId ? { userId: options.userId } : {}),
13
+ // Bill the end user when one is in scope (the platform charges the named
14
+ // user; falls back to the app owner when absent).
15
+ chargeUserIds: options?.userId ? [options.userId] : undefined,
14
16
  });
15
- // ugly.bot returns base64-encoded images; convert to data URI
16
- if (data.url)
17
- return data.url;
18
- if (data.base64)
17
+ // ugly.bot returns base64-encoded images; convert to a data URI.
18
+ if (data?.base64) {
19
19
  return `data:${data.mime ?? 'image/png'};base64,${data.base64}`;
20
- throw new Error(`[UglyBot] imageGen returned no image — response keys: ${Object.keys(data).join(', ')}`);
20
+ }
21
+ throw new Error('[UglyBot] imageGen returned no image');
21
22
  },
22
23
  };
23
24
  //# sourceMappingURL=UglyBotImageGenProvider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"UglyBotImageGenProvider.js","sourceRoot":"","sources":["../../../../src/server/ai/providers/UglyBotImageGenProvider.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,MAAM,CAAC,MAAM,uBAAuB,GAAqB;IACvD,IAAI,EAAE,SAAS;IACf,SAAS,EAAE,gBAAgB;IAE3B,KAAK,CAAC,QAAQ,CAAC,MAAc,EAAE,OAAyB;QACtD,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,YAAY,CAAC;QAC7C,MAAM,IAAI,GAAG,MAAM,cAAc,CAM/B,UAAU,EACV;YACE,KAAK;YACL,MAAM;YACN,OAAO,EAAE;gBACP,WAAW,EAAE,OAAO,EAAE,WAAW;aAClC;YACD,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACvD,CACF,CAAC;QACF,8DAA8D;QAC9D,IAAI,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC,GAAG,CAAC;QAC9B,IAAI,IAAI,CAAC,MAAM;YACb,OAAO,QAAQ,IAAI,CAAC,IAAI,IAAI,WAAW,WAAW,IAAI,CAAC,MAAM,EAAE,CAAC;QAClE,MAAM,IAAI,KAAK,CACb,yDAAyD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACxF,CAAC;IACJ,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"UglyBotImageGenProvider.js","sourceRoot":"","sources":["../../../../src/server/ai/providers/UglyBotImageGenProvider.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,MAAM,CAAC,MAAM,uBAAuB,GAAqB;IACvD,IAAI,EAAE,SAAS;IACf,SAAS,EAAE,gBAAgB;IAE3B,KAAK,CAAC,QAAQ,CAAC,MAAc,EAAE,OAAyB;QACtD,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,YAAY,CAAC;QAC7C,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,UAAU,EAAE;YAC5C,KAAK;YACL,MAAM;YACN,OAAO,EAAE;gBACP,WAAW,EAAE,OAAO,EAAE,WAAW;aAClC;YACD,yEAAyE;YACzE,kDAAkD;YAClD,aAAa,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;SAC9D,CAAC,CAAC;QACH,iEAAiE;QACjE,IAAI,IAAI,EAAE,MAAM,EAAE,CAAC;YACjB,OAAO,QAAQ,IAAI,CAAC,IAAI,IAAI,WAAW,WAAW,IAAI,CAAC,MAAM,EAAE,CAAC;QAClE,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAC1D,CAAC;CACF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"UglyBotTextGenProvider.d.ts","sourceRoot":"","sources":["../../../../src/server/ai/providers/UglyBotTextGenProvider.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAGV,eAAe,EAGhB,MAAM,aAAa,CAAC;AAGrB,eAAO,MAAM,sBAAsB,EAAE,eA0EpC,CAAC"}
1
+ {"version":3,"file":"UglyBotTextGenProvider.d.ts","sourceRoot":"","sources":["../../../../src/server/ai/providers/UglyBotTextGenProvider.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAGV,eAAe,EAGhB,MAAM,aAAa,CAAC;AAmBrB,eAAO,MAAM,sBAAsB,EAAE,eAoEpC,CAAC"}
@@ -1,4 +1,17 @@
1
1
  import { uglyBotRequest } from '../../uglyBotProxy.js';
2
+ /** Flatten a textGen message content (string or content-part array) to text. */
3
+ function contentToString(content) {
4
+ if (typeof content === 'string')
5
+ return content;
6
+ if (Array.isArray(content)) {
7
+ return content
8
+ .map((p) => p && typeof p === 'object' && 'text' in p
9
+ ? String(p.text ?? '')
10
+ : '')
11
+ .join('');
12
+ }
13
+ return '';
14
+ }
2
15
  export const uglyBotTextGenProvider = {
3
16
  name: 'uglybot',
4
17
  apiKeyEnv: 'UGLY_BOT_TOKEN',
@@ -19,9 +32,9 @@ export const uglyBotTextGenProvider = {
19
32
  maxTokens: options?.maxTokens,
20
33
  temperature: options?.temperature,
21
34
  },
22
- ...(options?.userId ? { userId: options.userId } : {}),
35
+ chargeUserIds: options?.userId ? [options.userId] : undefined,
23
36
  });
24
- return data.message.content;
37
+ return contentToString(data?.message.content);
25
38
  },
26
39
  async generateJson(schema, messages, options) {
27
40
  const model = options?.model ?? 'llama_4_scout';
@@ -33,22 +46,25 @@ export const uglyBotTextGenProvider = {
33
46
  maxTokens: options?.maxTokens,
34
47
  temperature: options?.temperature,
35
48
  },
36
- ...(options?.userId ? { userId: options.userId } : {}),
49
+ chargeUserIds: options?.userId ? [options.userId] : undefined,
37
50
  });
38
- return JSON.parse(data.message.content);
51
+ return JSON.parse(contentToString(data?.message.content));
39
52
  },
40
53
  async generateWithTools(messages, tools, options) {
41
54
  const model = options?.model ?? 'llama_4_scout';
42
- return uglyBotRequest('textGen', {
55
+ const data = await uglyBotRequest('textGen', {
43
56
  model,
44
57
  messages,
45
- tools,
58
+ tools: tools,
46
59
  options: {
47
60
  maxTokens: options?.maxTokens,
48
61
  temperature: options?.temperature,
49
62
  },
50
- ...(options?.userId ? { userId: options.userId } : {}),
63
+ chargeUserIds: options?.userId ? [options.userId] : undefined,
51
64
  });
65
+ // The tool-call shape is carried in the returned message; adapt at this
66
+ // provider boundary (the op's contract is the message, not ToolCallResult).
67
+ return data;
52
68
  },
53
69
  };
54
70
  //# sourceMappingURL=UglyBotTextGenProvider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"UglyBotTextGenProvider.js","sourceRoot":"","sources":["../../../../src/server/ai/providers/UglyBotTextGenProvider.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,MAAM,CAAC,MAAM,sBAAsB,GAAoB;IACrD,IAAI,EAAE,SAAS;IACf,SAAS,EAAE,gBAAgB;IAC3B,YAAY,EAAE;QACZ,IAAI,EAAE,IAAI;QACV,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,KAAK;QACb,gBAAgB,EAAE,OAAO;KAC1B;IACD,yBAAyB,EAAE,IAAI;IAC/B,0BAA0B,EAAE,IAAI;IAEhC,KAAK,CAAC,QAAQ,CACZ,QAAmB,EACnB,OAAwB;QAExB,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,eAAe,CAAC;QAChD,MAAM,IAAI,GAAG,MAAM,cAAc,CAC/B,SAAS,EACT;YACE,KAAK;YACL,QAAQ;YACR,OAAO,EAAE;gBACP,SAAS,EAAE,OAAO,EAAE,SAAS;gBAC7B,WAAW,EAAE,OAAO,EAAE,WAAW;aAClC;YACD,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACvD,CACF,CAAC;QACF,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,YAAY,CAChB,MAAS,EACT,QAAmB,EACnB,OAAwB;QAExB,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,eAAe,CAAC;QAChD,MAAM,IAAI,GAAG,MAAM,cAAc,CAC/B,SAAS,EACT;YACE,KAAK;YACL,MAAM,EAAE,MAAM,CAAC,IAAI;YACnB,QAAQ;YACR,OAAO,EAAE;gBACP,SAAS,EAAE,OAAO,EAAE,SAAS;gBAC7B,WAAW,EAAE,OAAO,EAAE,WAAW;aAClC;YACD,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACvD,CACF,CAAC;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAe,CAAC;IACxD,CAAC;IAED,KAAK,CAAC,iBAAiB,CACrB,QAAmB,EACnB,KAAc,EACd,OAAwB;QAExB,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,eAAe,CAAC;QAChD,OAAO,cAAc,CACnB,SAAS,EACT;YACE,KAAK;YACL,QAAQ;YACR,KAAK;YACL,OAAO,EAAE;gBACP,SAAS,EAAE,OAAO,EAAE,SAAS;gBAC7B,WAAW,EAAE,OAAO,EAAE,WAAW;aAClC;YACD,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACvD,CACF,CAAC;IACJ,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"UglyBotTextGenProvider.js","sourceRoot":"","sources":["../../../../src/server/ai/providers/UglyBotTextGenProvider.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"OpenAI.js","sourceRoot":"","sources":["../../../../src/server/embeddings/providers/OpenAI.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAGvD,MAAM,aAAa,GAAG,wBAAwB,CAAC;AAC/C,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAEhC,MAAM,CAAC,MAAM,uBAAuB,GAAsB;IACxD,IAAI,EAAE,QAAQ;IACd,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,UAA4B,EAAE;QAC/C,MAAM,MAAM,GAAG,MAAM,cAAc,CAA6B,UAAU,EAAE;YAC1E,KAAK;YACL,KAAK,EAAE,aAAa;YACpB,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,kBAAkB;SACrD,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,UAAU,CAAC;IAC3B,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"OpenAI.js","sourceRoot":"","sources":["../../../../src/server/embeddings/providers/OpenAI.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAGvD,MAAM,aAAa,GAAG,wBAAwB,CAAC;AAC/C,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAEhC,MAAM,CAAC,MAAM,uBAAuB,GAAsB;IACxD,IAAI,EAAE,QAAQ;IACd,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,UAA4B,EAAE;QAC/C,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,UAAU,EAAE;YAC9C,KAAK;YACL,KAAK,EAAE,aAAa;YACpB,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,kBAAkB;SACrD,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,UAAU,CAAC;IAC3B,CAAC;CACF,CAAC"}
@@ -1,2 +1,17 @@
1
- export declare function uglyBotRequest<T>(op: string, input: unknown): Promise<T>;
1
+ import type { ProxyOpName, ProxyOpInput, ProxyOpOutput } from '../shared/index.js';
2
+ export interface UglyBotRequestOptions {
3
+ /**
4
+ * Who ugly.bot bills:
5
+ * - 'owner' (default): the app owner, via `UGLY_BOT_TOKEN`. Works when no
6
+ * end user is logged in (cron / background / admin-charged work).
7
+ * - 'user': the end user, via their forwarded session JWT. Requires a
8
+ * logged-in user in the current request context.
9
+ */
10
+ billTo?: 'owner' | 'user';
11
+ }
12
+ /**
13
+ * Call a ugly.bot op. `input` is type-checked against the op's registered Zod
14
+ * schema and the result is typed as that op's output.
15
+ */
16
+ export declare function uglyBotRequest<K extends ProxyOpName>(op: K, input: ProxyOpInput<K>, options?: UglyBotRequestOptions): Promise<ProxyOpOutput<K>>;
2
17
  //# sourceMappingURL=uglyBotProxy.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"uglyBotProxy.d.ts","sourceRoot":"","sources":["../../src/server/uglyBotProxy.ts"],"names":[],"mappings":"AAGA,wBAAsB,cAAc,CAAC,CAAC,EACpC,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,CAAC,CAAC,CAsCZ"}
1
+ {"version":3,"file":"uglyBotProxy.d.ts","sourceRoot":"","sources":["../../src/server/uglyBotProxy.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnF,MAAM,WAAW,qBAAqB;IACpC;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CAC3B;AAmBD;;;GAGG;AACH,wBAAsB,cAAc,CAAC,CAAC,SAAS,WAAW,EACxD,EAAE,EAAE,CAAC,EACL,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EACtB,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAmC3B"}
@@ -1,16 +1,39 @@
1
1
  // src/server/uglyBotProxy.ts
2
+ //
3
+ // The ONLY way to call a ugly.bot op from app server code. Fully typed against
4
+ // the shared `proxyOps` registry: the op name, the input shape, and the return
5
+ // type are all inferred, so it is impossible to call an op with the wrong input
6
+ // or misread its result at compile time (see ugly-bot/CLAUDE.md "API exposure
7
+ // contract"). There is intentionally NO untyped escape hatch.
2
8
  import { getUglyBotUrl } from '../shared/uglyBotUrl.js';
3
- export async function uglyBotRequest(op, input) {
9
+ import { getUserToken } from './auth/userContext.js';
10
+ function resolveBearer(billTo) {
11
+ if (billTo === 'user') {
12
+ const userToken = getUserToken();
13
+ if (!userToken) {
14
+ throw new Error("[UglyBot] billTo:'user' requires a logged-in user, but no session token is in context.");
15
+ }
16
+ return userToken;
17
+ }
4
18
  const appToken = process.env.UGLY_BOT_TOKEN;
5
- if (!appToken)
19
+ if (!appToken) {
6
20
  throw new Error('[UglyBot] UGLY_BOT_TOKEN not set — run: npx ugly-app login');
21
+ }
22
+ return appToken;
23
+ }
24
+ /**
25
+ * Call a ugly.bot op. `input` is type-checked against the op's registered Zod
26
+ * schema and the result is typed as that op's output.
27
+ */
28
+ export async function uglyBotRequest(op, input, options = {}) {
29
+ const bearer = resolveBearer(options.billTo ?? 'owner');
7
30
  const controller = new AbortController();
8
31
  const timer = setTimeout(() => controller.abort(), 30_000);
9
32
  try {
10
33
  const res = await fetch(`${getUglyBotUrl()}/request`, {
11
34
  method: 'POST',
12
35
  headers: {
13
- 'Authorization': `Bearer ${appToken}`,
36
+ Authorization: `Bearer ${bearer}`,
14
37
  'Content-Type': 'application/json',
15
38
  },
16
39
  body: JSON.stringify({ op, input, sessionId: 'server' }),
@@ -30,7 +53,8 @@ export async function uglyBotRequest(op, input) {
30
53
  }
31
54
  const data = (await res.json());
32
55
  // ugly.bot returns flat responses; some paths wrap in { result: ... }
33
- return (data.result !== undefined ? data.result : data);
56
+ const payload = data.result !== undefined ? data.result : data;
57
+ return payload;
34
58
  }
35
59
  finally {
36
60
  clearTimeout(timer);
@@ -1 +1 @@
1
- {"version":3,"file":"uglyBotProxy.js","sourceRoot":"","sources":["../../src/server/uglyBotProxy.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,EAAU,EACV,KAAc;IAEd,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAC5C,IAAI,CAAC,QAAQ;QACX,MAAM,IAAI,KAAK,CACb,4DAA4D,CAC7D,CAAC;IAEJ,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,MAAM,CAAC,CAAC;IAC3D,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,aAAa,EAAE,UAAU,EAAE;YACpD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,eAAe,EAAE,UAAU,QAAQ,EAAE;gBACrC,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;YACxD,MAAM,EAAE,UAAU,CAAC,MAAM;SAC1B,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YAC9C,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBACvB,OAAO,CAAC,KAAK,CACX,iCAAiC,EAAE,uCAAuC;oBACxE,6BAA6B;oBAC7B,WAAW,IAAI,EAAE,CACpB,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,aAAa,EAAE,YAAY,GAAG,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC;YACjE,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC,CAAC;QAC5C,CAAC;QACD,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAA4B,CAAC;QAC3D,sEAAsE;QACtE,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAM,CAAC;IAC/D,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"uglyBotProxy.js","sourceRoot":"","sources":["../../src/server/uglyBotProxy.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,EAAE;AACF,+EAA+E;AAC/E,+EAA+E;AAC/E,gFAAgF;AAChF,8EAA8E;AAC9E,8DAA8D;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAarD,SAAS,aAAa,CAAC,MAAwB;IAC7C,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;QACjC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,wFAAwF,CACzF,CAAC;QACJ,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAC5C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;IAChF,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,EAAK,EACL,KAAsB,EACtB,UAAiC,EAAE;IAEnC,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,CAAC;IAExD,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,MAAM,CAAC,CAAC;IAC3D,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,aAAa,EAAE,UAAU,EAAE;YACpD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,MAAM,EAAE;gBACjC,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;YACxD,MAAM,EAAE,UAAU,CAAC,MAAM;SAC1B,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YAC9C,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBACvB,OAAO,CAAC,KAAK,CACX,iCAAiC,EAAE,uCAAuC;oBACxE,6BAA6B;oBAC7B,WAAW,IAAI,EAAE,CACpB,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,aAAa,EAAE,YAAY,GAAG,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC;YACjE,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC,CAAC;QAC5C,CAAC;QACD,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAA4B,CAAC;QAC3D,sEAAsE;QACtE,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QAC/D,OAAO,OAA2B,CAAC;IACrC,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;AACH,CAAC"}