orcommit 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +318 -0
  3. package/dist/cli.d.ts +70 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +391 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/index.d.ts +18 -0
  8. package/dist/index.d.ts.map +1 -0
  9. package/dist/index.js +21 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/modules/api.d.ts +48 -0
  12. package/dist/modules/api.d.ts.map +1 -0
  13. package/dist/modules/api.js +286 -0
  14. package/dist/modules/api.js.map +1 -0
  15. package/dist/modules/cache.d.ts +74 -0
  16. package/dist/modules/cache.d.ts.map +1 -0
  17. package/dist/modules/cache.js +284 -0
  18. package/dist/modules/cache.js.map +1 -0
  19. package/dist/modules/config.d.ts +53 -0
  20. package/dist/modules/config.d.ts.map +1 -0
  21. package/dist/modules/config.js +180 -0
  22. package/dist/modules/config.js.map +1 -0
  23. package/dist/modules/core.d.ts +54 -0
  24. package/dist/modules/core.d.ts.map +1 -0
  25. package/dist/modules/core.js +474 -0
  26. package/dist/modules/core.js.map +1 -0
  27. package/dist/modules/diff-filter.d.ts +71 -0
  28. package/dist/modules/diff-filter.d.ts.map +1 -0
  29. package/dist/modules/diff-filter.js +332 -0
  30. package/dist/modules/diff-filter.js.map +1 -0
  31. package/dist/modules/git.d.ts +61 -0
  32. package/dist/modules/git.d.ts.map +1 -0
  33. package/dist/modules/git.js +362 -0
  34. package/dist/modules/git.js.map +1 -0
  35. package/dist/modules/logger.d.ts +67 -0
  36. package/dist/modules/logger.d.ts.map +1 -0
  37. package/dist/modules/logger.js +212 -0
  38. package/dist/modules/logger.js.map +1 -0
  39. package/dist/modules/tokenizer.d.ts +43 -0
  40. package/dist/modules/tokenizer.d.ts.map +1 -0
  41. package/dist/modules/tokenizer.js +200 -0
  42. package/dist/modules/tokenizer.js.map +1 -0
  43. package/dist/types/index.d.ts +141 -0
  44. package/dist/types/index.d.ts.map +1 -0
  45. package/dist/types/index.js +70 -0
  46. package/dist/types/index.js.map +1 -0
  47. package/dist/utils/index.d.ts +64 -0
  48. package/dist/utils/index.d.ts.map +1 -0
  49. package/dist/utils/index.js +154 -0
  50. package/dist/utils/index.js.map +1 -0
  51. package/package.json +75 -0
@@ -0,0 +1,43 @@
1
+ export interface TokenizerOptions {
2
+ model: string;
3
+ maxTokens: number;
4
+ reservedTokens?: number;
5
+ }
6
+ export declare class TokenManager {
7
+ private encoders;
8
+ private readonly defaultMaxTokens;
9
+ /**
10
+ * Get or create tokenizer for specific model
11
+ */
12
+ private getEncoder;
13
+ /**
14
+ * Count tokens in text for specific model
15
+ */
16
+ countTokens(text: string, model: string): number;
17
+ /**
18
+ * Split text into chunks based on token limits
19
+ */
20
+ splitIntoTokenChunks(text: string, options: TokenizerOptions): string[];
21
+ /**
22
+ * Split a single long line into smaller parts
23
+ */
24
+ private splitLongLine;
25
+ /**
26
+ * Calculate optimal chunk size for model
27
+ */
28
+ getOptimalChunkSize(model: string): number;
29
+ /**
30
+ * Map provider-specific model names to tiktoken models
31
+ */
32
+ private mapToTiktokenModel;
33
+ /**
34
+ * Estimate tokens needed for system prompt and response
35
+ */
36
+ estimateSystemTokens(systemPrompt: string, model: string): number;
37
+ /**
38
+ * Clean up encoders on shutdown
39
+ */
40
+ cleanup(): void;
41
+ }
42
+ export declare const tokenManager: TokenManager;
43
+ //# sourceMappingURL=tokenizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenizer.d.ts","sourceRoot":"","sources":["../../src/modules/tokenizer.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAoC;IACpD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAQ;IAEzC;;OAEG;IACH,OAAO,CAAC,UAAU;IAoBlB;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IAWhD;;OAEG;IACH,oBAAoB,CAClB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,gBAAgB,GACxB,MAAM,EAAE;IAsDX;;OAEG;IACH,OAAO,CAAC,aAAa;IAsCrB;;OAEG;IACH,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAwB1C;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAuB1B;;OAEG;IACH,oBAAoB,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IAQjE;;OAEG;IACH,OAAO,IAAI,IAAI;CAMhB;AAGD,eAAO,MAAM,YAAY,cAAqB,CAAC"}
@@ -0,0 +1,200 @@
1
+ import { encoding_for_model } from 'tiktoken';
2
+ import { logger } from './logger.js';
3
+ export class TokenManager {
4
+ encoders = new Map();
5
+ defaultMaxTokens = 4000; // Conservative default
6
+ /**
7
+ * Get or create tokenizer for specific model
8
+ */
9
+ getEncoder(model) {
10
+ if (this.encoders.has(model)) {
11
+ return this.encoders.get(model);
12
+ }
13
+ try {
14
+ // Map provider models to tiktoken models
15
+ const tiktokenModel = this.mapToTiktokenModel(model);
16
+ const encoder = encoding_for_model(tiktokenModel);
17
+ this.encoders.set(model, encoder);
18
+ return encoder;
19
+ }
20
+ catch (error) {
21
+ logger.warn(`Failed to load tokenizer for ${model}, using default`);
22
+ // Fallback to gpt-3.5-turbo tokenizer
23
+ const encoder = encoding_for_model('gpt-3.5-turbo');
24
+ this.encoders.set(model, encoder);
25
+ return encoder;
26
+ }
27
+ }
28
+ /**
29
+ * Count tokens in text for specific model
30
+ */
31
+ countTokens(text, model) {
32
+ try {
33
+ const encoder = this.getEncoder(model);
34
+ return encoder.encode(text).length;
35
+ }
36
+ catch (error) {
37
+ logger.warn(`Token counting failed for ${model}, using character estimation`);
38
+ // Fallback: rough estimation (1 token ≈ 4 characters for English)
39
+ return Math.ceil(text.length / 4);
40
+ }
41
+ }
42
+ /**
43
+ * Split text into chunks based on token limits
44
+ */
45
+ splitIntoTokenChunks(text, options) {
46
+ const { model, maxTokens, reservedTokens = 500 } = options;
47
+ const effectiveMaxTokens = maxTokens - reservedTokens;
48
+ // If text fits in one chunk, return as-is
49
+ const totalTokens = this.countTokens(text, model);
50
+ if (totalTokens <= effectiveMaxTokens) {
51
+ return [text];
52
+ }
53
+ logger.debug(`Splitting ${totalTokens} tokens into chunks of ${effectiveMaxTokens}`);
54
+ const chunks = [];
55
+ const lines = text.split('\n');
56
+ let currentChunk = [];
57
+ let currentTokens = 0;
58
+ for (const line of lines) {
59
+ const lineTokens = this.countTokens(line + '\n', model);
60
+ // If single line exceeds limit, split it further
61
+ if (lineTokens > effectiveMaxTokens) {
62
+ if (currentChunk.length > 0) {
63
+ chunks.push(currentChunk.join('\n'));
64
+ currentChunk = [];
65
+ currentTokens = 0;
66
+ }
67
+ // Split long line by sentences or words
68
+ const splitLine = this.splitLongLine(line, effectiveMaxTokens, model);
69
+ chunks.push(...splitLine);
70
+ continue;
71
+ }
72
+ // Check if adding this line would exceed limit
73
+ if (currentTokens + lineTokens > effectiveMaxTokens && currentChunk.length > 0) {
74
+ chunks.push(currentChunk.join('\n'));
75
+ currentChunk = [line];
76
+ currentTokens = lineTokens;
77
+ }
78
+ else {
79
+ currentChunk.push(line);
80
+ currentTokens += lineTokens;
81
+ }
82
+ }
83
+ // Add remaining chunk
84
+ if (currentChunk.length > 0) {
85
+ chunks.push(currentChunk.join('\n'));
86
+ }
87
+ logger.debug(`Split into ${chunks.length} chunks`);
88
+ return chunks;
89
+ }
90
+ /**
91
+ * Split a single long line into smaller parts
92
+ */
93
+ splitLongLine(line, maxTokens, model) {
94
+ const chunks = [];
95
+ // Try splitting by sentences first
96
+ const sentences = line.split(/[.!?]+/).filter(s => s.trim());
97
+ if (sentences.length > 1) {
98
+ let currentChunk = '';
99
+ for (const sentence of sentences) {
100
+ const testChunk = currentChunk + sentence + '.';
101
+ if (this.countTokens(testChunk, model) <= maxTokens) {
102
+ currentChunk = testChunk;
103
+ }
104
+ else {
105
+ if (currentChunk)
106
+ chunks.push(currentChunk.trim());
107
+ currentChunk = sentence + '.';
108
+ }
109
+ }
110
+ if (currentChunk)
111
+ chunks.push(currentChunk.trim());
112
+ return chunks;
113
+ }
114
+ // Fallback: split by words
115
+ const words = line.split(/\s+/);
116
+ let currentChunk = '';
117
+ for (const word of words) {
118
+ const testChunk = currentChunk ? `${currentChunk} ${word}` : word;
119
+ if (this.countTokens(testChunk, model) <= maxTokens) {
120
+ currentChunk = testChunk;
121
+ }
122
+ else {
123
+ if (currentChunk)
124
+ chunks.push(currentChunk);
125
+ currentChunk = word;
126
+ }
127
+ }
128
+ if (currentChunk)
129
+ chunks.push(currentChunk);
130
+ return chunks;
131
+ }
132
+ /**
133
+ * Calculate optimal chunk size for model
134
+ */
135
+ getOptimalChunkSize(model) {
136
+ const modelLimits = {
137
+ 'gpt-4': 8192,
138
+ 'gpt-4-turbo': 128000,
139
+ 'gpt-3.5-turbo': 4096,
140
+ 'gpt-3.5-turbo-16k': 16384,
141
+ 'claude-3-haiku': 200000,
142
+ 'claude-3-sonnet': 200000,
143
+ 'claude-3-opus': 200000,
144
+ 'llama-2-70b': 4096,
145
+ 'mixtral-8x7b': 32768,
146
+ };
147
+ // Try to find exact match or partial match
148
+ for (const [key, limit] of Object.entries(modelLimits)) {
149
+ if (model.includes(key) || model.toLowerCase().includes(key.toLowerCase())) {
150
+ return Math.floor(limit * 0.7); // Use 70% of limit for safety
151
+ }
152
+ }
153
+ // Default conservative limit
154
+ return this.defaultMaxTokens;
155
+ }
156
+ /**
157
+ * Map provider-specific model names to tiktoken models
158
+ */
159
+ mapToTiktokenModel(model) {
160
+ const modelMap = {
161
+ // OpenAI models
162
+ 'gpt-4': 'gpt-4',
163
+ 'gpt-4-turbo': 'gpt-4',
164
+ 'gpt-4-turbo-preview': 'gpt-4',
165
+ 'gpt-3.5-turbo': 'gpt-3.5-turbo',
166
+ 'gpt-3.5-turbo-16k': 'gpt-3.5-turbo',
167
+ // OpenRouter models mapped to closest equivalent
168
+ 'openai/gpt-4': 'gpt-4',
169
+ 'openai/gpt-4-turbo': 'gpt-4',
170
+ 'openai/gpt-3.5-turbo': 'gpt-3.5-turbo',
171
+ 'anthropic/claude-3-haiku': 'gpt-3.5-turbo', // No Claude tokenizer in tiktoken
172
+ 'anthropic/claude-3-sonnet': 'gpt-4',
173
+ 'anthropic/claude-3-opus': 'gpt-4',
174
+ 'meta-llama/llama-2-70b': 'gpt-3.5-turbo',
175
+ 'mistralai/mixtral-8x7b': 'gpt-4',
176
+ };
177
+ return modelMap[model.toLowerCase()] || 'gpt-3.5-turbo';
178
+ }
179
+ /**
180
+ * Estimate tokens needed for system prompt and response
181
+ */
182
+ estimateSystemTokens(systemPrompt, model) {
183
+ const systemTokens = this.countTokens(systemPrompt, model);
184
+ const responseTokens = 200; // Conservative estimate for commit message
185
+ const overhead = 50; // API overhead
186
+ return systemTokens + responseTokens + overhead;
187
+ }
188
+ /**
189
+ * Clean up encoders on shutdown
190
+ */
191
+ cleanup() {
192
+ for (const encoder of this.encoders.values()) {
193
+ encoder.free();
194
+ }
195
+ this.encoders.clear();
196
+ }
197
+ }
198
+ // Singleton instance
199
+ export const tokenManager = new TokenManager();
200
+ //# sourceMappingURL=tokenizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenizer.js","sourceRoot":"","sources":["../../src/modules/tokenizer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,141 @@
1
+ export interface Config {
2
+ readonly providers: {
3
+ readonly openrouter: ProviderConfig;
4
+ readonly openai: ProviderConfig;
5
+ };
6
+ readonly preferences: UserPreferences;
7
+ readonly version: string;
8
+ }
9
+ export interface ProviderConfig {
10
+ readonly apiKey?: string;
11
+ readonly model?: string;
12
+ readonly baseUrl?: string;
13
+ readonly timeout?: number;
14
+ }
15
+ export interface UserPreferences {
16
+ readonly defaultProvider: 'openrouter' | 'openai';
17
+ readonly maxTokens: number;
18
+ readonly temperature: number;
19
+ readonly autoConfirm: boolean;
20
+ readonly language: string;
21
+ readonly commitFormat: 'conventional' | 'simple';
22
+ }
23
+ export interface GitDiff {
24
+ readonly files: GitFile[];
25
+ readonly totalLines: number;
26
+ readonly totalSize: number;
27
+ }
28
+ export interface GitFile {
29
+ readonly path: string;
30
+ readonly status: GitFileStatus;
31
+ readonly chunks: GitChunk[];
32
+ readonly isBinary: boolean;
33
+ }
34
+ export type GitFileStatus = 'added' | 'modified' | 'deleted' | 'renamed' | 'copied';
35
+ export interface GitChunk {
36
+ readonly header: string;
37
+ readonly oldStart: number;
38
+ readonly oldLines: number;
39
+ readonly newStart: number;
40
+ readonly newLines: number;
41
+ readonly lines: GitLine[];
42
+ readonly context: string;
43
+ }
44
+ export interface GitLine {
45
+ readonly type: 'context' | 'added' | 'removed';
46
+ readonly content: string;
47
+ readonly lineNumber?: number;
48
+ }
49
+ export interface ApiRequest {
50
+ readonly provider: 'openrouter' | 'openai';
51
+ readonly model: string;
52
+ readonly messages: ApiMessage[];
53
+ readonly maxTokens: number;
54
+ readonly temperature: number;
55
+ readonly stream?: boolean;
56
+ }
57
+ export interface ApiMessage {
58
+ readonly role: 'system' | 'user' | 'assistant';
59
+ readonly content: string;
60
+ }
61
+ export interface ApiResponse {
62
+ readonly message: string;
63
+ readonly usage?: TokenUsage;
64
+ readonly model: string;
65
+ readonly finishReason: string;
66
+ }
67
+ export interface TokenUsage {
68
+ readonly promptTokens: number;
69
+ readonly completionTokens: number;
70
+ readonly totalTokens: number;
71
+ }
72
+ export interface CliOptions {
73
+ readonly yes?: boolean;
74
+ readonly scope?: string;
75
+ readonly type?: CommitType;
76
+ readonly breaking?: boolean;
77
+ readonly dryRun?: boolean;
78
+ readonly verbose?: boolean;
79
+ readonly watch?: boolean;
80
+ readonly provider?: 'openrouter' | 'openai';
81
+ readonly emoji?: boolean;
82
+ readonly oneLine?: boolean;
83
+ readonly descriptionLength?: number;
84
+ readonly maxFiles?: number;
85
+ readonly ignoreGenerated?: boolean;
86
+ readonly ignoreWhitespace?: boolean;
87
+ readonly noCache?: boolean;
88
+ readonly clearCache?: boolean;
89
+ readonly push?: boolean;
90
+ readonly autoPush?: boolean;
91
+ }
92
+ export type CommitType = 'feat' | 'fix' | 'docs' | 'style' | 'refactor' | 'test' | 'chore' | 'perf' | 'ci' | 'build' | 'revert';
93
+ export declare abstract class BaseError extends Error {
94
+ readonly cause?: Error | undefined;
95
+ abstract readonly code: string;
96
+ abstract readonly isRetryable: boolean;
97
+ constructor(message: string, cause?: Error | undefined);
98
+ }
99
+ export declare class ConfigError extends BaseError {
100
+ readonly code = "CONFIG_ERROR";
101
+ readonly isRetryable = false;
102
+ }
103
+ export declare class GitError extends BaseError {
104
+ readonly code = "GIT_ERROR";
105
+ readonly isRetryable = false;
106
+ }
107
+ export declare class ApiError extends BaseError {
108
+ readonly statusCode?: number | undefined;
109
+ readonly code = "API_ERROR";
110
+ readonly isRetryable: boolean;
111
+ constructor(message: string, statusCode?: number | undefined, cause?: Error);
112
+ private determineRetryability;
113
+ }
114
+ export declare class NetworkError extends BaseError {
115
+ readonly code = "NETWORK_ERROR";
116
+ readonly isRetryable = true;
117
+ }
118
+ export interface ProcessingResult<T> {
119
+ readonly success: boolean;
120
+ readonly data?: T;
121
+ readonly error?: BaseError;
122
+ readonly retryAfter?: number;
123
+ }
124
+ export interface ChunkProcessingOptions {
125
+ readonly maxChunkSize: number;
126
+ readonly preserveContext: boolean;
127
+ readonly maxConcurrency: number;
128
+ }
129
+ export declare const DEFAULT_CONFIG: Readonly<Config>;
130
+ export declare const CHUNK_LIMITS: {
131
+ readonly MAX_CHUNK_SIZE: 8000;
132
+ readonly MAX_CHUNKS_PER_REQUEST: 10;
133
+ readonly MAX_CONCURRENT_REQUESTS: 3;
134
+ };
135
+ export declare const RETRY_CONFIG: {
136
+ readonly MAX_RETRIES: 3;
137
+ readonly BASE_DELAY: 1000;
138
+ readonly MAX_DELAY: 30000;
139
+ readonly BACKOFF_FACTOR: 2;
140
+ };
141
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,70 @@
1
+ // Error types
2
+ export class BaseError extends Error {
3
+ cause;
4
+ constructor(message, cause) {
5
+ super(message);
6
+ this.cause = cause;
7
+ this.name = this.constructor.name;
8
+ }
9
+ }
10
+ export class ConfigError extends BaseError {
11
+ code = 'CONFIG_ERROR';
12
+ isRetryable = false;
13
+ }
14
+ export class GitError extends BaseError {
15
+ code = 'GIT_ERROR';
16
+ isRetryable = false;
17
+ }
18
+ export class ApiError extends BaseError {
19
+ statusCode;
20
+ code = 'API_ERROR';
21
+ isRetryable;
22
+ constructor(message, statusCode, cause) {
23
+ super(message, cause);
24
+ this.statusCode = statusCode;
25
+ this.isRetryable = this.determineRetryability(statusCode);
26
+ }
27
+ determineRetryability(statusCode) {
28
+ if (!statusCode)
29
+ return false;
30
+ return statusCode === 429 || (statusCode >= 500 && statusCode < 600);
31
+ }
32
+ }
33
+ export class NetworkError extends BaseError {
34
+ code = 'NETWORK_ERROR';
35
+ isRetryable = true;
36
+ }
37
+ // Constants
38
+ export const DEFAULT_CONFIG = {
39
+ providers: {
40
+ openrouter: {
41
+ baseUrl: 'https://openrouter.ai/api/v1',
42
+ timeout: 60000,
43
+ },
44
+ openai: {
45
+ baseUrl: 'https://api.openai.com/v1',
46
+ timeout: 60000,
47
+ },
48
+ },
49
+ preferences: {
50
+ defaultProvider: 'openrouter',
51
+ maxTokens: 500,
52
+ temperature: 0.6,
53
+ autoConfirm: false,
54
+ language: 'en',
55
+ commitFormat: 'conventional',
56
+ },
57
+ version: '1.0.0',
58
+ };
59
+ export const CHUNK_LIMITS = {
60
+ MAX_CHUNK_SIZE: 8000, // characters
61
+ MAX_CHUNKS_PER_REQUEST: 10,
62
+ MAX_CONCURRENT_REQUESTS: 3,
63
+ };
64
+ export const RETRY_CONFIG = {
65
+ MAX_RETRIES: 3,
66
+ BASE_DELAY: 1000, // ms
67
+ MAX_DELAY: 30000, // ms
68
+ BACKOFF_FACTOR: 2,
69
+ };
70
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAiHA,cAAc;AACd,MAAM,OAAgB,SAAU,SAAQ,KAAK;IAIW;IAAtD,YAAY,OAAe,EAA2B,KAAa;QACjE,KAAK,CAAC,OAAO,CAAC,CAAC;QADqC,UAAK,GAAL,KAAK,CAAQ;QAEjE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;IACpC,CAAC;CACF;AAED,MAAM,OAAO,WAAY,SAAQ,SAAS;IAC/B,IAAI,GAAG,cAAc,CAAC;IACtB,WAAW,GAAG,KAAK,CAAC;CAC9B;AAED,MAAM,OAAO,QAAS,SAAQ,SAAS;IAC5B,IAAI,GAAG,WAAW,CAAC;IACnB,WAAW,GAAG,KAAK,CAAC;CAC9B;AAED,MAAM,OAAO,QAAS,SAAQ,SAAS;IAMnB;IALT,IAAI,GAAG,WAAW,CAAC;IACnB,WAAW,CAAU;IAE9B,YACE,OAAe,EACC,UAAmB,EACnC,KAAa;QAEb,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAHN,eAAU,GAAV,UAAU,CAAS;QAInC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC;IAC5D,CAAC;IAEO,qBAAqB,CAAC,UAAmB;QAC/C,IAAI,CAAC,UAAU;YAAE,OAAO,KAAK,CAAC;QAC9B,OAAO,UAAU,KAAK,GAAG,IAAI,CAAC,UAAU,IAAI,GAAG,IAAI,UAAU,GAAG,GAAG,CAAC,CAAC;IACvE,CAAC;CACF;AAED,MAAM,OAAO,YAAa,SAAQ,SAAS;IAChC,IAAI,GAAG,eAAe,CAAC;IACvB,WAAW,GAAG,IAAI,CAAC;CAC7B;AAgBD,YAAY;AACZ,MAAM,CAAC,MAAM,cAAc,GAAqB;IAC9C,SAAS,EAAE;QACT,UAAU,EAAE;YACV,OAAO,EAAE,8BAA8B;YACvC,OAAO,EAAE,KAAK;SACf;QACD,MAAM,EAAE;YACN,OAAO,EAAE,2BAA2B;YACpC,OAAO,EAAE,KAAK;SACf;KACF;IACD,WAAW,EAAE;QACX,eAAe,EAAE,YAAY;QAC7B,SAAS,EAAE,GAAG;QACd,WAAW,EAAE,GAAG;QAChB,WAAW,EAAE,KAAK;QAClB,QAAQ,EAAE,IAAI;QACd,YAAY,EAAE,cAAc;KAC7B;IACD,OAAO,EAAE,OAAO;CACR,CAAC;AAEX,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,cAAc,EAAE,IAAI,EAAE,aAAa;IACnC,sBAAsB,EAAE,EAAE;IAC1B,uBAAuB,EAAE,CAAC;CAClB,CAAC;AAEX,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,WAAW,EAAE,CAAC;IACd,UAAU,EAAE,IAAI,EAAE,KAAK;IACvB,SAAS,EAAE,KAAK,EAAE,KAAK;IACvB,cAAc,EAAE,CAAC;CACT,CAAC"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Utility functions for OpenRouter Commit
3
+ */
4
+ /**
5
+ * Truncate text to specified length with ellipsis
6
+ */
7
+ export declare function truncateText(text: string, maxLength: number): string;
8
+ /**
9
+ * Sanitize commit message to ensure it's valid
10
+ */
11
+ export declare function sanitizeCommitMessage(message: string): string;
12
+ /**
13
+ * Calculate delay for exponential backoff
14
+ */
15
+ export declare function calculateBackoffDelay(attempt: number, baseDelay?: number, maxDelay?: number, factor?: number): number;
16
+ /**
17
+ * Format file size in human-readable format
18
+ */
19
+ export declare function formatFileSize(bytes: number): string;
20
+ /**
21
+ * Format duration in human-readable format
22
+ */
23
+ export declare function formatDuration(ms: number): string;
24
+ /**
25
+ * Debounce function calls
26
+ */
27
+ export declare function debounce<T extends (...args: any[]) => any>(func: T, wait: number): (...args: Parameters<T>) => void;
28
+ /**
29
+ * Create a promise that resolves after specified delay
30
+ */
31
+ export declare function sleep(ms: number): Promise<void>;
32
+ /**
33
+ * Validate if a string is a valid commit type
34
+ */
35
+ export declare function isValidCommitType(type: string): boolean;
36
+ /**
37
+ * Parse conventional commit message
38
+ */
39
+ export interface ConventionalCommit {
40
+ type: string;
41
+ scope?: string;
42
+ description: string;
43
+ body?: string;
44
+ footer?: string;
45
+ breaking: boolean;
46
+ }
47
+ export declare function parseConventionalCommit(message: string): ConventionalCommit | null;
48
+ /**
49
+ * Format bytes as human readable
50
+ */
51
+ export declare function humanFileSize(bytes: number, si?: boolean, dp?: number): string;
52
+ /**
53
+ * Check if running in CI environment
54
+ */
55
+ export declare function isCI(): boolean;
56
+ /**
57
+ * Get safe environment variable
58
+ */
59
+ export declare function getEnvVar(name: string, defaultValue?: string): string;
60
+ /**
61
+ * Mask sensitive information in strings
62
+ */
63
+ export declare function maskSensitive(value: string, visibleChars?: number): string;
64
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAKpE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAO7D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,EACf,SAAS,GAAE,MAAa,EACxB,QAAQ,GAAE,MAAc,EACxB,MAAM,GAAE,MAAU,GACjB,MAAM,CAGR;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAWpD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAajD;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EACxD,IAAI,EAAE,CAAC,EACP,IAAI,EAAE,MAAM,GACX,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,CAclC;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAMvD;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI,CAiBlF;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,UAAQ,EAAE,EAAE,SAAI,GAAG,MAAM,CAmBvE;AAED;;GAEG;AACH,wBAAgB,IAAI,IAAI,OAAO,CAS9B;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,SAAK,GAAG,MAAM,CAEjE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,SAAI,GAAG,MAAM,CAUrE"}