codebuff 1.0.224 → 1.0.225

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 (49) hide show
  1. package/dist/client.d.ts +5 -5
  2. package/dist/client.js +5 -0
  3. package/dist/client.js.map +1 -1
  4. package/dist/code-map/tsconfig.tsbuildinfo +1 -1
  5. package/dist/common/actions.d.ts +134 -134
  6. package/dist/common/advanced-analyzer.d.ts +19 -0
  7. package/dist/common/advanced-analyzer.js +140 -0
  8. package/dist/common/advanced-analyzer.js.map +1 -0
  9. package/dist/common/billing/balance-calculator.d.ts +1 -1
  10. package/dist/common/billing/check-auto-topup.d.ts +12 -0
  11. package/dist/common/billing/check-auto-topup.js +50 -0
  12. package/dist/common/billing/check-auto-topup.js.map +1 -0
  13. package/dist/common/billing/credit-check.d.ts +8 -0
  14. package/dist/common/billing/credit-check.js +45 -0
  15. package/dist/common/billing/credit-check.js.map +1 -0
  16. package/dist/common/billing/rollover-logic.d.ts +13 -0
  17. package/dist/common/billing/rollover-logic.js +174 -0
  18. package/dist/common/billing/rollover-logic.js.map +1 -0
  19. package/dist/common/billing/stripe-api.d.ts +31 -0
  20. package/dist/common/billing/stripe-api.js +104 -0
  21. package/dist/common/billing/stripe-api.js.map +1 -0
  22. package/dist/common/message-image-handling.d.ts +41 -0
  23. package/dist/common/message-image-handling.js +57 -0
  24. package/dist/common/message-image-handling.js.map +1 -0
  25. package/dist/common/types/billing.d.ts +16 -0
  26. package/dist/common/types/billing.js +3 -0
  27. package/dist/common/types/billing.js.map +1 -0
  28. package/dist/common/types/usage.d.ts +2 -2
  29. package/dist/common/util/process-stream.d.ts +8 -0
  30. package/dist/common/util/process-stream.js +102 -0
  31. package/dist/common/util/process-stream.js.map +1 -0
  32. package/dist/common/util/referral-credits.d.ts +1 -0
  33. package/dist/common/util/referral-credits.js +48 -0
  34. package/dist/common/util/referral-credits.js.map +1 -0
  35. package/dist/common/websockets/websocket-schema.d.ts +258 -258
  36. package/dist/index.js +1 -1
  37. package/package.json +1 -1
  38. package/dist/common/logger.d.ts +0 -1
  39. package/dist/common/logger.js +0 -7
  40. package/dist/common/logger.js.map +0 -1
  41. package/dist/common/util/constants.d.ts +0 -1
  42. package/dist/common/util/constants.js +0 -7
  43. package/dist/common/util/constants.js.map +0 -1
  44. package/dist/common/util/helpers.d.ts +0 -1
  45. package/dist/common/util/helpers.js +0 -6
  46. package/dist/common/util/helpers.js.map +0 -1
  47. package/dist/common/util/token-counter.d.ts +0 -3
  48. package/dist/common/util/token-counter.js +0 -27
  49. package/dist/common/util/token-counter.js.map +0 -1
@@ -0,0 +1,41 @@
1
+ import { Message } from './actions';
2
+ /**
3
+ * Contexts where message processing may occur
4
+ */
5
+ export declare enum ProcessingContext {
6
+ ModelCall = "model-call",
7
+ FileCache = "file-cache",
8
+ WarmCache = "warm-cache"
9
+ }
10
+ /**
11
+ * Interface for provider-specific image handling
12
+ */
13
+ export interface IImageHandler {
14
+ /**
15
+ * Returns whether images should be passed along in the given context
16
+ */
17
+ supportsImages(context: ProcessingContext): boolean;
18
+ /**
19
+ * Transform a message by either stripping, replacing, or modifying image blocks
20
+ */
21
+ transformMessage(message: Message, context: ProcessingContext): Message;
22
+ }
23
+ /**
24
+ * Base handler that removes all images unless explicitly allowed
25
+ */
26
+ export declare class DefaultImageHandler implements IImageHandler {
27
+ supportsImages(context: ProcessingContext): boolean;
28
+ transformMessage(message: Message, context: ProcessingContext): Message;
29
+ }
30
+ /**
31
+ * Register a new image handler for a provider
32
+ */
33
+ export declare function registerImageHandler(provider: string, handler: IImageHandler): void;
34
+ /**
35
+ * Transform a message for a specific provider and context
36
+ */
37
+ export declare function transformMessageForProvider(message: Message, provider: string, context: ProcessingContext): Message;
38
+ /**
39
+ * Transform an array of messages for a specific provider and context
40
+ */
41
+ export declare function transformMessagesForProvider(messages: Message[], provider: string, context: ProcessingContext): Message[];
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DefaultImageHandler = exports.ProcessingContext = void 0;
4
+ exports.registerImageHandler = registerImageHandler;
5
+ exports.transformMessageForProvider = transformMessageForProvider;
6
+ exports.transformMessagesForProvider = transformMessagesForProvider;
7
+ /**
8
+ * Contexts where message processing may occur
9
+ */
10
+ var ProcessingContext;
11
+ (function (ProcessingContext) {
12
+ ProcessingContext["ModelCall"] = "model-call";
13
+ ProcessingContext["FileCache"] = "file-cache";
14
+ ProcessingContext["WarmCache"] = "warm-cache";
15
+ })(ProcessingContext || (exports.ProcessingContext = ProcessingContext = {}));
16
+ /**
17
+ * Base handler that removes all images unless explicitly allowed
18
+ */
19
+ class DefaultImageHandler {
20
+ supportsImages(context) {
21
+ return context === ProcessingContext.FileCache;
22
+ }
23
+ transformMessage(message, context) {
24
+ if (!this.supportsImages(context)) {
25
+ const transformed = Array.isArray(message.content)
26
+ ? message.content.filter(block => typeof block === 'string' ? true : block.type !== 'image')
27
+ : message.content;
28
+ return { ...message, content: transformed };
29
+ }
30
+ return message;
31
+ }
32
+ }
33
+ exports.DefaultImageHandler = DefaultImageHandler;
34
+ /**
35
+ * Registry mapping provider names to their image handlers
36
+ */
37
+ const imageHandlerRegistry = {};
38
+ /**
39
+ * Register a new image handler for a provider
40
+ */
41
+ function registerImageHandler(provider, handler) {
42
+ imageHandlerRegistry[provider] = handler;
43
+ }
44
+ /**
45
+ * Transform a message for a specific provider and context
46
+ */
47
+ function transformMessageForProvider(message, provider, context) {
48
+ const handler = imageHandlerRegistry[provider] || new DefaultImageHandler();
49
+ return handler.transformMessage(message, context);
50
+ }
51
+ /**
52
+ * Transform an array of messages for a specific provider and context
53
+ */
54
+ function transformMessagesForProvider(messages, provider, context) {
55
+ return messages.map(message => transformMessageForProvider(message, provider, context));
56
+ }
57
+ //# sourceMappingURL=message-image-handling.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-image-handling.js","sourceRoot":"","sources":["../src/message-image-handling.ts"],"names":[],"mappings":";;;AAuDA,oDAEC;AAKD,kEAOC;AAKD,oEAMC;AA9ED;;GAEG;AACH,IAAY,iBAIX;AAJD,WAAY,iBAAiB;IAC3B,6CAAwB,CAAA;IACxB,6CAAwB,CAAA;IACxB,6CAAwB,CAAA;AAC1B,CAAC,EAJW,iBAAiB,iCAAjB,iBAAiB,QAI5B;AAiBD;;GAEG;AACH,MAAa,mBAAmB;IAC9B,cAAc,CAAC,OAA0B;QACvC,OAAO,OAAO,KAAK,iBAAiB,CAAC,SAAS,CAAC;IACjD,CAAC;IAED,gBAAgB,CAAC,OAAgB,EAAE,OAA0B;QAC3D,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;YAClC,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;gBAChD,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC7B,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO,CAC1D;gBACH,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;YACpB,OAAO,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;QAC9C,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;CACF;AAhBD,kDAgBC;AAED;;GAEG;AACH,MAAM,oBAAoB,GAAkC,EAAE,CAAC;AAE/D;;GAEG;AACH,SAAgB,oBAAoB,CAAC,QAAgB,EAAE,OAAsB;IAC3E,oBAAoB,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC;AAC3C,CAAC;AAED;;GAEG;AACH,SAAgB,2BAA2B,CACzC,OAAgB,EAChB,QAAgB,EAChB,OAA0B;IAE1B,MAAM,OAAO,GAAG,oBAAoB,CAAC,QAAQ,CAAC,IAAI,IAAI,mBAAmB,EAAE,CAAC;IAC5E,OAAO,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AACpD,CAAC;AAED;;GAEG;AACH,SAAgB,4BAA4B,CAC1C,QAAmB,EACnB,QAAgB,EAChB,OAA0B;IAE1B,OAAO,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,2BAA2B,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;AAC1F,CAAC"}
@@ -0,0 +1,16 @@
1
+ export type GrantType = 'free' | 'referral' | 'purchase' | 'admin';
2
+ export interface CreditBalance {
3
+ totalRemaining: number;
4
+ totalDebt: number;
5
+ netBalance: number;
6
+ breakdown: Partial<Record<GrantType, number>>;
7
+ principals: Partial<Record<GrantType, number>>;
8
+ }
9
+ export interface CreditUsageAndBalance {
10
+ usageThisCycle: number;
11
+ balance: CreditBalance;
12
+ }
13
+ export interface CreditConsumptionResult {
14
+ consumed: number;
15
+ fromPurchased: number;
16
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=billing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"billing.js","sourceRoot":"","sources":["../../src/types/billing.ts"],"names":[],"mappings":""}
@@ -20,23 +20,23 @@ export declare const usageDataSchema: z.ZodObject<{
20
20
  nextQuotaReset: z.ZodNullable<z.ZodDate>;
21
21
  nextMonthlyGrant: z.ZodNumber;
22
22
  }, "strip", z.ZodTypeAny, {
23
- nextMonthlyGrant: number;
24
23
  balance: {
25
24
  totalRemaining: number;
26
25
  totalDebt: number;
27
26
  netBalance: number;
28
27
  breakdown?: Record<string, number> | undefined;
29
28
  };
29
+ nextMonthlyGrant: number;
30
30
  usageThisCycle: number;
31
31
  nextQuotaReset: Date | null;
32
32
  }, {
33
- nextMonthlyGrant: number;
34
33
  balance: {
35
34
  totalRemaining: number;
36
35
  totalDebt: number;
37
36
  netBalance: number;
38
37
  breakdown?: Record<string, number> | undefined;
39
38
  };
39
+ nextMonthlyGrant: number;
40
40
  usageThisCycle: number;
41
41
  nextQuotaReset: Date | null;
42
42
  }>;
@@ -0,0 +1,8 @@
1
+ export declare function processStreamWithTags<T extends string>(stream: AsyncGenerator<T> | ReadableStream<T>, tags: {
2
+ [tagName: string]: {
3
+ attributeNames: string[];
4
+ onTagStart: (attributes: Record<string, string>) => void;
5
+ onTagEnd: (content: string, attributes: Record<string, string>) => boolean;
6
+ };
7
+ }): AsyncGenerator<string, void, unknown>;
8
+ export declare function parseAttributes(attributesString: string, attributeNames: string[]): Record<string, string>;
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.processStreamWithTags = processStreamWithTags;
4
+ exports.parseAttributes = parseAttributes;
5
+ async function* processStreamWithTags(stream, tags) {
6
+ let buffer = '';
7
+ let insideTag = null;
8
+ let currentAttributes = {};
9
+ let streamCompleted = false;
10
+ const escapeRegExp = (string) => string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
11
+ const tagNames = Object.keys(tags);
12
+ const openTagRegex = new RegExp(`<(${tagNames.map(escapeRegExp).join('|')})\\s*([^>]*)>`);
13
+ const closeTagRegex = new RegExp(`</(${tagNames.map(escapeRegExp).join('|')})>`);
14
+ function* parseBuffer(chunk) {
15
+ const isEOF = chunk === undefined;
16
+ if (chunk) {
17
+ yield chunk;
18
+ }
19
+ let didParse = true;
20
+ while (!streamCompleted && didParse) {
21
+ didParse = false;
22
+ if (insideTag === null) {
23
+ // Outside a tag: try to find the next opening tag
24
+ const openMatch = buffer.match(openTagRegex);
25
+ if (openMatch && openMatch.index !== undefined) {
26
+ const [fullMatch, openTag, attributesString] = openMatch;
27
+ const beforeTag = buffer.slice(0, openMatch.index);
28
+ const afterMatchIndex = openMatch.index + fullMatch.length;
29
+ // Move buffer forward
30
+ buffer = buffer.slice(afterMatchIndex);
31
+ // We are now inside this tag
32
+ insideTag = openTag;
33
+ currentAttributes = parseAttributes(attributesString, tags[openTag].attributeNames);
34
+ // Call onTagStart
35
+ tags[openTag].onTagStart(currentAttributes);
36
+ didParse = true;
37
+ }
38
+ else {
39
+ // No opening tag found. If it's EOF, yield remaining text.
40
+ if (isEOF && buffer.length > 0) {
41
+ buffer = '';
42
+ }
43
+ }
44
+ }
45
+ else {
46
+ // Inside a tag: try to find the closing tag
47
+ const closeMatch = buffer.match(closeTagRegex);
48
+ if (closeMatch && closeMatch.index !== undefined) {
49
+ const [fullMatch, closeTag] = closeMatch;
50
+ const content = buffer.slice(0, closeMatch.index);
51
+ // Move buffer forward
52
+ buffer = buffer.slice(closeMatch.index + fullMatch.length);
53
+ // Close the tag
54
+ const complete = tags[insideTag].onTagEnd(content, currentAttributes);
55
+ insideTag = null;
56
+ currentAttributes = {};
57
+ if (complete) {
58
+ // If onTagEnd signals completion, set streamCompleted and return
59
+ streamCompleted = true;
60
+ return;
61
+ }
62
+ didParse = true;
63
+ }
64
+ else if (isEOF) {
65
+ // We reached EOF without finding a closing tag
66
+ // Treat remaining buffer as content and close the tag
67
+ if (buffer.length > 0) {
68
+ const complete = tags[insideTag].onTagEnd(buffer, currentAttributes);
69
+ yield '</' + insideTag + '>';
70
+ buffer = '';
71
+ insideTag = null;
72
+ currentAttributes = {};
73
+ if (complete) {
74
+ streamCompleted = true;
75
+ return;
76
+ }
77
+ }
78
+ }
79
+ }
80
+ }
81
+ }
82
+ for await (const chunk of stream) {
83
+ if (streamCompleted)
84
+ continue;
85
+ buffer += chunk;
86
+ yield* parseBuffer(chunk);
87
+ }
88
+ if (!streamCompleted) {
89
+ // After the stream ends, try parsing one last time in case there's leftover text
90
+ yield* parseBuffer(undefined);
91
+ }
92
+ }
93
+ function parseAttributes(attributesString, attributeNames) {
94
+ const attributes = {};
95
+ const regex = new RegExp(`(${attributeNames.join('|')})="([^"]*)"`, 'g');
96
+ let match;
97
+ while ((match = regex.exec(attributesString)) !== null) {
98
+ attributes[match[1]] = match[2];
99
+ }
100
+ return attributes;
101
+ }
102
+ //# sourceMappingURL=process-stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-stream.js","sourceRoot":"","sources":["../../src/util/process-stream.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function getTotalReferralCreditsForCustomer(userId: string): Promise<number>;
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.getTotalReferralCreditsForCustomer = getTotalReferralCreditsForCustomer;
30
+ const drizzle_orm_1 = require("drizzle-orm");
31
+ const drizzle_orm_2 = require("drizzle-orm");
32
+ const db_1 = __importDefault(require("../db"));
33
+ const schema = __importStar(require("../db/schema"));
34
+ async function getTotalReferralCreditsForCustomer(userId) {
35
+ return db_1.default
36
+ .select({
37
+ referralCredits: (0, drizzle_orm_1.sql) `SUM(COALESCE(${schema.referral.credits}, 0))`,
38
+ })
39
+ .from(schema.user)
40
+ .leftJoin(schema.referral, (0, drizzle_orm_2.or)((0, drizzle_orm_2.eq)(schema.referral.referrer_id, schema.user.id), (0, drizzle_orm_2.eq)(schema.referral.referred_id, schema.user.id)))
41
+ .where((0, drizzle_orm_2.eq)(schema.user.id, userId))
42
+ .limit(1)
43
+ .then((rows) => {
44
+ const firstRow = rows[0];
45
+ return parseInt(firstRow?.referralCredits ?? '0');
46
+ });
47
+ }
48
+ //# sourceMappingURL=referral-credits.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"referral-credits.js","sourceRoot":"","sources":["../../src/util/referral-credits.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,gFAqBC;AA1BD,6CAAiC;AACjC,6CAAoC;AACpC,+CAAsB;AACtB,qDAAsC;AAE/B,KAAK,UAAU,kCAAkC,CACtD,MAAc;IAEd,OAAO,YAAE;SACN,MAAM,CAAC;QACN,eAAe,EAAE,IAAA,iBAAG,EAAQ,gBAAgB,MAAM,CAAC,QAAQ,CAAC,OAAO,OAAO;KAC3E,CAAC;SACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;SACjB,QAAQ,CACP,MAAM,CAAC,QAAQ,EACf,IAAA,gBAAE,EACA,IAAA,gBAAE,EAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAC/C,IAAA,gBAAE,EAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAChD,CACF;SACA,KAAK,CAAC,IAAA,gBAAE,EAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;SACjC,KAAK,CAAC,CAAC,CAAC;SACR,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;QACb,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;QACxB,OAAO,QAAQ,CAAC,QAAQ,EAAE,eAAe,IAAI,GAAG,CAAC,CAAA;IACnD,CAAC,CAAC,CAAA;AACN,CAAC"}