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.
- package/LICENSE +21 -0
- package/README.md +318 -0
- package/dist/cli.d.ts +70 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +391 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/modules/api.d.ts +48 -0
- package/dist/modules/api.d.ts.map +1 -0
- package/dist/modules/api.js +286 -0
- package/dist/modules/api.js.map +1 -0
- package/dist/modules/cache.d.ts +74 -0
- package/dist/modules/cache.d.ts.map +1 -0
- package/dist/modules/cache.js +284 -0
- package/dist/modules/cache.js.map +1 -0
- package/dist/modules/config.d.ts +53 -0
- package/dist/modules/config.d.ts.map +1 -0
- package/dist/modules/config.js +180 -0
- package/dist/modules/config.js.map +1 -0
- package/dist/modules/core.d.ts +54 -0
- package/dist/modules/core.d.ts.map +1 -0
- package/dist/modules/core.js +474 -0
- package/dist/modules/core.js.map +1 -0
- package/dist/modules/diff-filter.d.ts +71 -0
- package/dist/modules/diff-filter.d.ts.map +1 -0
- package/dist/modules/diff-filter.js +332 -0
- package/dist/modules/diff-filter.js.map +1 -0
- package/dist/modules/git.d.ts +61 -0
- package/dist/modules/git.d.ts.map +1 -0
- package/dist/modules/git.js +362 -0
- package/dist/modules/git.js.map +1 -0
- package/dist/modules/logger.d.ts +67 -0
- package/dist/modules/logger.d.ts.map +1 -0
- package/dist/modules/logger.js +212 -0
- package/dist/modules/logger.js.map +1 -0
- package/dist/modules/tokenizer.d.ts +43 -0
- package/dist/modules/tokenizer.d.ts.map +1 -0
- package/dist/modules/tokenizer.js +200 -0
- package/dist/modules/tokenizer.js.map +1 -0
- package/dist/types/index.d.ts +141 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +70 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/index.d.ts +64 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +154 -0
- package/dist/utils/index.js.map +1 -0
- 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"}
|