treliq 0.4.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 +340 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +540 -0
- package/dist/cli.js.map +1 -0
- package/dist/core/cache.d.ts +29 -0
- package/dist/core/cache.d.ts.map +1 -0
- package/dist/core/cache.js +64 -0
- package/dist/core/cache.js.map +1 -0
- package/dist/core/concurrency.d.ts +16 -0
- package/dist/core/concurrency.d.ts.map +1 -0
- package/dist/core/concurrency.js +60 -0
- package/dist/core/concurrency.js.map +1 -0
- package/dist/core/db.d.ts +127 -0
- package/dist/core/db.d.ts.map +1 -0
- package/dist/core/db.js +490 -0
- package/dist/core/db.js.map +1 -0
- package/dist/core/dedup.d.ts +18 -0
- package/dist/core/dedup.d.ts.map +1 -0
- package/dist/core/dedup.js +159 -0
- package/dist/core/dedup.js.map +1 -0
- package/dist/core/graphql.d.ts +30 -0
- package/dist/core/graphql.d.ts.map +1 -0
- package/dist/core/graphql.js +243 -0
- package/dist/core/graphql.js.map +1 -0
- package/dist/core/notifications.d.ts +37 -0
- package/dist/core/notifications.d.ts.map +1 -0
- package/dist/core/notifications.js +174 -0
- package/dist/core/notifications.js.map +1 -0
- package/dist/core/provider.d.ts +45 -0
- package/dist/core/provider.d.ts.map +1 -0
- package/dist/core/provider.js +147 -0
- package/dist/core/provider.js.map +1 -0
- package/dist/core/ratelimit.d.ts +40 -0
- package/dist/core/ratelimit.d.ts.map +1 -0
- package/dist/core/ratelimit.js +77 -0
- package/dist/core/ratelimit.js.map +1 -0
- package/dist/core/reputation.d.ts +16 -0
- package/dist/core/reputation.d.ts.map +1 -0
- package/dist/core/reputation.js +59 -0
- package/dist/core/reputation.js.map +1 -0
- package/dist/core/scanner.d.ts +58 -0
- package/dist/core/scanner.d.ts.map +1 -0
- package/dist/core/scanner.js +635 -0
- package/dist/core/scanner.js.map +1 -0
- package/dist/core/scoring.d.ts +36 -0
- package/dist/core/scoring.d.ts.map +1 -0
- package/dist/core/scoring.js +360 -0
- package/dist/core/scoring.js.map +1 -0
- package/dist/core/types.d.ts +89 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +6 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/vectorstore.d.ts +42 -0
- package/dist/core/vectorstore.d.ts.map +1 -0
- package/dist/core/vectorstore.js +149 -0
- package/dist/core/vectorstore.js.map +1 -0
- package/dist/core/vision.d.ts +16 -0
- package/dist/core/vision.d.ts.map +1 -0
- package/dist/core/vision.js +41 -0
- package/dist/core/vision.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +34 -0
- package/dist/index.js.map +1 -0
- package/dist/server/app.d.ts +21 -0
- package/dist/server/app.d.ts.map +1 -0
- package/dist/server/app.js +284 -0
- package/dist/server/app.js.map +1 -0
- package/dist/server/index.d.ts +29 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +117 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/scheduler.d.ts +26 -0
- package/dist/server/scheduler.d.ts.map +1 -0
- package/dist/server/scheduler.js +136 -0
- package/dist/server/scheduler.js.map +1 -0
- package/dist/server/sse.d.ts +33 -0
- package/dist/server/sse.d.ts.map +1 -0
- package/dist/server/sse.js +80 -0
- package/dist/server/sse.js.map +1 -0
- package/dist/server/webhooks.d.ts +23 -0
- package/dist/server/webhooks.d.ts.map +1 -0
- package/dist/server/webhooks.js +175 -0
- package/dist/server/webhooks.js.map +1 -0
- package/package.json +84 -0
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Multi-provider LLM abstraction for Treliq
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.AnthropicProvider = exports.OpenAIProvider = exports.GeminiProvider = void 0;
|
|
7
|
+
exports.createProvider = createProvider;
|
|
8
|
+
async function sleep(ms) { return new Promise(r => setTimeout(r, ms)); }
|
|
9
|
+
class GeminiProvider {
|
|
10
|
+
name = 'gemini';
|
|
11
|
+
apiKey;
|
|
12
|
+
constructor(apiKey) {
|
|
13
|
+
this.apiKey = apiKey;
|
|
14
|
+
}
|
|
15
|
+
async generateText(prompt, options) {
|
|
16
|
+
await sleep(100);
|
|
17
|
+
const url = 'https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent';
|
|
18
|
+
const res = await fetch(url, {
|
|
19
|
+
method: 'POST',
|
|
20
|
+
headers: { 'Content-Type': 'application/json', 'x-goog-api-key': this.apiKey },
|
|
21
|
+
body: JSON.stringify({
|
|
22
|
+
contents: [{ parts: [{ text: prompt }] }],
|
|
23
|
+
generationConfig: {
|
|
24
|
+
temperature: options?.temperature ?? 0.1,
|
|
25
|
+
maxOutputTokens: options?.maxTokens ?? 200,
|
|
26
|
+
},
|
|
27
|
+
}),
|
|
28
|
+
});
|
|
29
|
+
if (!res.ok)
|
|
30
|
+
throw new Error(`Gemini ${res.status}`);
|
|
31
|
+
const data = await res.json();
|
|
32
|
+
return data.candidates?.[0]?.content?.parts?.[0]?.text ?? '';
|
|
33
|
+
}
|
|
34
|
+
async generateEmbedding(text) {
|
|
35
|
+
await sleep(100);
|
|
36
|
+
const url = 'https://generativelanguage.googleapis.com/v1beta/models/gemini-embedding-001:embedContent';
|
|
37
|
+
const res = await fetch(url, {
|
|
38
|
+
method: 'POST',
|
|
39
|
+
headers: { 'Content-Type': 'application/json', 'x-goog-api-key': this.apiKey },
|
|
40
|
+
body: JSON.stringify({
|
|
41
|
+
model: 'models/gemini-embedding-001',
|
|
42
|
+
content: { parts: [{ text }] },
|
|
43
|
+
}),
|
|
44
|
+
});
|
|
45
|
+
if (!res.ok)
|
|
46
|
+
throw new Error(`Embedding API error: ${res.status} ${await res.text()}`);
|
|
47
|
+
const data = await res.json();
|
|
48
|
+
return data.embedding.values;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
exports.GeminiProvider = GeminiProvider;
|
|
52
|
+
class OpenAIProvider {
|
|
53
|
+
name = 'openai';
|
|
54
|
+
apiKey;
|
|
55
|
+
constructor(apiKey) {
|
|
56
|
+
this.apiKey = apiKey;
|
|
57
|
+
}
|
|
58
|
+
async generateText(prompt, options) {
|
|
59
|
+
await sleep(100);
|
|
60
|
+
const res = await fetch('https://api.openai.com/v1/chat/completions', {
|
|
61
|
+
method: 'POST',
|
|
62
|
+
headers: {
|
|
63
|
+
'Content-Type': 'application/json',
|
|
64
|
+
'Authorization': `Bearer ${this.apiKey}`,
|
|
65
|
+
},
|
|
66
|
+
body: JSON.stringify({
|
|
67
|
+
model: 'gpt-4o-mini',
|
|
68
|
+
messages: [{ role: 'user', content: prompt }],
|
|
69
|
+
temperature: options?.temperature ?? 0.1,
|
|
70
|
+
max_tokens: options?.maxTokens ?? 200,
|
|
71
|
+
}),
|
|
72
|
+
});
|
|
73
|
+
if (!res.ok)
|
|
74
|
+
throw new Error(`OpenAI ${res.status}`);
|
|
75
|
+
const data = await res.json();
|
|
76
|
+
return data.choices?.[0]?.message?.content ?? '';
|
|
77
|
+
}
|
|
78
|
+
async generateEmbedding(text) {
|
|
79
|
+
await sleep(100);
|
|
80
|
+
const res = await fetch('https://api.openai.com/v1/embeddings', {
|
|
81
|
+
method: 'POST',
|
|
82
|
+
headers: {
|
|
83
|
+
'Content-Type': 'application/json',
|
|
84
|
+
'Authorization': `Bearer ${this.apiKey}`,
|
|
85
|
+
},
|
|
86
|
+
body: JSON.stringify({
|
|
87
|
+
model: 'text-embedding-3-small',
|
|
88
|
+
input: text,
|
|
89
|
+
}),
|
|
90
|
+
});
|
|
91
|
+
if (!res.ok)
|
|
92
|
+
throw new Error(`OpenAI Embedding ${res.status}`);
|
|
93
|
+
const data = await res.json();
|
|
94
|
+
const embedding = data.data?.[0]?.embedding ?? [];
|
|
95
|
+
if (embedding.length === 0) {
|
|
96
|
+
throw new Error('Empty embedding returned from OpenAI');
|
|
97
|
+
}
|
|
98
|
+
return embedding;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
exports.OpenAIProvider = OpenAIProvider;
|
|
102
|
+
class AnthropicProvider {
|
|
103
|
+
name = 'anthropic';
|
|
104
|
+
apiKey;
|
|
105
|
+
embeddingFallback;
|
|
106
|
+
constructor(apiKey, embeddingFallback) {
|
|
107
|
+
this.apiKey = apiKey;
|
|
108
|
+
this.embeddingFallback = embeddingFallback;
|
|
109
|
+
}
|
|
110
|
+
async generateText(prompt, options) {
|
|
111
|
+
await sleep(100);
|
|
112
|
+
const res = await fetch('https://api.anthropic.com/v1/messages', {
|
|
113
|
+
method: 'POST',
|
|
114
|
+
headers: {
|
|
115
|
+
'Content-Type': 'application/json',
|
|
116
|
+
'x-api-key': this.apiKey,
|
|
117
|
+
'anthropic-version': '2023-06-01',
|
|
118
|
+
},
|
|
119
|
+
body: JSON.stringify({
|
|
120
|
+
model: 'claude-haiku-4-5',
|
|
121
|
+
max_tokens: options?.maxTokens ?? 200,
|
|
122
|
+
messages: [{ role: 'user', content: prompt }],
|
|
123
|
+
temperature: options?.temperature ?? 0.1,
|
|
124
|
+
}),
|
|
125
|
+
});
|
|
126
|
+
if (!res.ok)
|
|
127
|
+
throw new Error(`Anthropic ${res.status}`);
|
|
128
|
+
const data = await res.json();
|
|
129
|
+
return data.content?.[0]?.text ?? '';
|
|
130
|
+
}
|
|
131
|
+
async generateEmbedding(text) {
|
|
132
|
+
if (!this.embeddingFallback) {
|
|
133
|
+
throw new Error('Anthropic does not support embeddings. Provide an embeddingFallback provider.');
|
|
134
|
+
}
|
|
135
|
+
return this.embeddingFallback.generateEmbedding(text);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
exports.AnthropicProvider = AnthropicProvider;
|
|
139
|
+
function createProvider(name, apiKey, embeddingFallback) {
|
|
140
|
+
switch (name) {
|
|
141
|
+
case 'gemini': return new GeminiProvider(apiKey);
|
|
142
|
+
case 'openai': return new OpenAIProvider(apiKey);
|
|
143
|
+
case 'anthropic': return new AnthropicProvider(apiKey, embeddingFallback);
|
|
144
|
+
default: throw new Error(`Unknown provider: ${name}`);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/core/provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RateLimitManager — Tracks GitHub API rate limits and controls request pacing
|
|
3
|
+
*
|
|
4
|
+
* Reads x-ratelimit-remaining and x-ratelimit-reset headers from GitHub responses
|
|
5
|
+
* to intelligently throttle requests before hitting the limit.
|
|
6
|
+
*/
|
|
7
|
+
export declare class RateLimitManager {
|
|
8
|
+
private remaining;
|
|
9
|
+
private limit;
|
|
10
|
+
private resetAt;
|
|
11
|
+
private lastUpdated;
|
|
12
|
+
/**
|
|
13
|
+
* Update rate limit state from GitHub API response headers.
|
|
14
|
+
* Works with both REST (Octokit) and GraphQL response headers.
|
|
15
|
+
*/
|
|
16
|
+
updateFromHeaders(headers: Record<string, string | undefined>): void;
|
|
17
|
+
/**
|
|
18
|
+
* Wait if we're critically low on rate limit quota.
|
|
19
|
+
* Pauses execution until the rate limit resets.
|
|
20
|
+
*/
|
|
21
|
+
waitIfNeeded(): Promise<void>;
|
|
22
|
+
/**
|
|
23
|
+
* Returns true when rate limit is getting low — callers should reduce concurrency.
|
|
24
|
+
*/
|
|
25
|
+
shouldSlowDown(): boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Returns true when rate limit is critically low — callers should pause.
|
|
28
|
+
*/
|
|
29
|
+
isCritical(): boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Get current rate limit status for logging/display.
|
|
32
|
+
*/
|
|
33
|
+
getStatus(): {
|
|
34
|
+
remaining: number;
|
|
35
|
+
limit: number;
|
|
36
|
+
resetAt: number;
|
|
37
|
+
usage: string;
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=ratelimit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ratelimit.d.ts","sourceRoot":"","sources":["../../src/core/ratelimit.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,WAAW,CAAK;IAExB;;;OAGG;IACH,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,IAAI;IAiBpE;;;OAGG;IACG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAenC;;OAEG;IACH,cAAc,IAAI,OAAO;IAIzB;;OAEG;IACH,UAAU,IAAI,OAAO;IAIrB;;OAEG;IACH,SAAS,IAAI;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE;CAWlF"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* RateLimitManager — Tracks GitHub API rate limits and controls request pacing
|
|
4
|
+
*
|
|
5
|
+
* Reads x-ratelimit-remaining and x-ratelimit-reset headers from GitHub responses
|
|
6
|
+
* to intelligently throttle requests before hitting the limit.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.RateLimitManager = void 0;
|
|
10
|
+
class RateLimitManager {
|
|
11
|
+
remaining = 5000;
|
|
12
|
+
limit = 5000;
|
|
13
|
+
resetAt = 0; // Unix timestamp (seconds)
|
|
14
|
+
lastUpdated = 0;
|
|
15
|
+
/**
|
|
16
|
+
* Update rate limit state from GitHub API response headers.
|
|
17
|
+
* Works with both REST (Octokit) and GraphQL response headers.
|
|
18
|
+
*/
|
|
19
|
+
updateFromHeaders(headers) {
|
|
20
|
+
const remaining = headers['x-ratelimit-remaining'];
|
|
21
|
+
const limit = headers['x-ratelimit-limit'];
|
|
22
|
+
const reset = headers['x-ratelimit-reset'];
|
|
23
|
+
if (remaining !== undefined) {
|
|
24
|
+
this.remaining = parseInt(remaining, 10);
|
|
25
|
+
}
|
|
26
|
+
if (limit !== undefined) {
|
|
27
|
+
this.limit = parseInt(limit, 10);
|
|
28
|
+
}
|
|
29
|
+
if (reset !== undefined) {
|
|
30
|
+
this.resetAt = parseInt(reset, 10);
|
|
31
|
+
}
|
|
32
|
+
this.lastUpdated = Date.now();
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Wait if we're critically low on rate limit quota.
|
|
36
|
+
* Pauses execution until the rate limit resets.
|
|
37
|
+
*/
|
|
38
|
+
async waitIfNeeded() {
|
|
39
|
+
if (this.remaining > 100)
|
|
40
|
+
return;
|
|
41
|
+
const nowSec = Math.floor(Date.now() / 1000);
|
|
42
|
+
const waitSec = this.resetAt - nowSec;
|
|
43
|
+
if (waitSec > 0 && this.remaining <= 100) {
|
|
44
|
+
const waitMs = Math.min(waitSec * 1000, 60_000); // Max 60s wait
|
|
45
|
+
console.error(`⏳ Rate limit low (${this.remaining}/${this.limit}). Waiting ${Math.ceil(waitMs / 1000)}s until reset...`);
|
|
46
|
+
await new Promise(r => setTimeout(r, waitMs));
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Returns true when rate limit is getting low — callers should reduce concurrency.
|
|
51
|
+
*/
|
|
52
|
+
shouldSlowDown() {
|
|
53
|
+
return this.remaining < 500 && this.remaining > 0;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Returns true when rate limit is critically low — callers should pause.
|
|
57
|
+
*/
|
|
58
|
+
isCritical() {
|
|
59
|
+
return this.remaining <= 100;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Get current rate limit status for logging/display.
|
|
63
|
+
*/
|
|
64
|
+
getStatus() {
|
|
65
|
+
const usagePct = this.limit > 0
|
|
66
|
+
? ((this.limit - this.remaining) / this.limit * 100).toFixed(1)
|
|
67
|
+
: '0.0';
|
|
68
|
+
return {
|
|
69
|
+
remaining: this.remaining,
|
|
70
|
+
limit: this.limit,
|
|
71
|
+
resetAt: this.resetAt,
|
|
72
|
+
usage: `${usagePct}%`,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
exports.RateLimitManager = RateLimitManager;
|
|
77
|
+
//# sourceMappingURL=ratelimit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ratelimit.js","sourceRoot":"","sources":["../../src/core/ratelimit.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,MAAa,gBAAgB;IACnB,SAAS,GAAG,IAAI,CAAC;IACjB,KAAK,GAAG,IAAI,CAAC;IACb,OAAO,GAAG,CAAC,CAAC,CAAC,2BAA2B;IACxC,WAAW,GAAG,CAAC,CAAC;IAExB;;;OAGG;IACH,iBAAiB,CAAC,OAA2C;QAC3D,MAAM,SAAS,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC;QACnD,MAAM,KAAK,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;QAC3C,MAAM,KAAK,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;QAE3C,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QAC3C,CAAC;QACD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACnC,CAAC;QACD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACrC,CAAC;QACD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAChC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,YAAY;QAChB,IAAI,IAAI,CAAC,SAAS,GAAG,GAAG;YAAE,OAAO;QAEjC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QAEtC,IAAI,OAAO,GAAG,CAAC,IAAI,IAAI,CAAC,SAAS,IAAI,GAAG,EAAE,CAAC;YACzC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,eAAe;YAChE,OAAO,CAAC,KAAK,CACX,qBAAqB,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,cAAc,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAC1G,CAAC;YACF,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,OAAO,IAAI,CAAC,SAAS,GAAG,GAAG,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;IACpD,CAAC;IAED;;OAEG;IACH,UAAU;QACR,OAAO,IAAI,CAAC,SAAS,IAAI,GAAG,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,SAAS;QACP,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC;YAC7B,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;YAC/D,CAAC,CAAC,KAAK,CAAC;QACV,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK,EAAE,GAAG,QAAQ,GAAG;SACtB,CAAC;IACJ,CAAC;CACF;AA1ED,4CA0EC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Contributor Reputation — Fetches GitHub profile data to assess contributor trust
|
|
3
|
+
*/
|
|
4
|
+
import { Octokit } from '@octokit/rest';
|
|
5
|
+
export interface ReputationData {
|
|
6
|
+
login: string;
|
|
7
|
+
followers: number;
|
|
8
|
+
publicRepos: number;
|
|
9
|
+
accountAgeDays: number;
|
|
10
|
+
suspicious: boolean;
|
|
11
|
+
suspiciousReasons: string[];
|
|
12
|
+
reputationScore: number;
|
|
13
|
+
}
|
|
14
|
+
export declare function getReputation(octokit: Octokit, login: string): Promise<ReputationData>;
|
|
15
|
+
export declare function clearReputationCache(): void;
|
|
16
|
+
//# sourceMappingURL=reputation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reputation.d.ts","sourceRoot":"","sources":["../../src/core/reputation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC;IACpB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC;CACzB;AAID,wBAAsB,aAAa,CACjC,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,cAAc,CAAC,CA+CzB;AAED,wBAAgB,oBAAoB,SAEnC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Contributor Reputation — Fetches GitHub profile data to assess contributor trust
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.getReputation = getReputation;
|
|
7
|
+
exports.clearReputationCache = clearReputationCache;
|
|
8
|
+
const cache = new Map();
|
|
9
|
+
async function getReputation(octokit, login) {
|
|
10
|
+
if (cache.has(login))
|
|
11
|
+
return cache.get(login);
|
|
12
|
+
try {
|
|
13
|
+
const { data } = await octokit.users.getByUsername({ username: login });
|
|
14
|
+
const ageDays = Math.floor((Date.now() - new Date(data.created_at).getTime()) / (1000 * 60 * 60 * 24));
|
|
15
|
+
const followers = data.followers ?? 0;
|
|
16
|
+
const repos = data.public_repos ?? 0;
|
|
17
|
+
const reasons = [];
|
|
18
|
+
if (ageDays < 30)
|
|
19
|
+
reasons.push(`Account age: ${ageDays}d`);
|
|
20
|
+
if (followers === 0 && repos === 0)
|
|
21
|
+
reasons.push('No followers or repos');
|
|
22
|
+
// Score: base 50, +up to 20 for followers, +up to 15 for repos, +up to 15 for age
|
|
23
|
+
let score = 50;
|
|
24
|
+
score += Math.min(20, followers * 2);
|
|
25
|
+
score += Math.min(15, repos);
|
|
26
|
+
score += Math.min(15, Math.floor(ageDays / 30));
|
|
27
|
+
if (reasons.length > 0)
|
|
28
|
+
score = Math.max(10, score - 30);
|
|
29
|
+
score = Math.min(100, score);
|
|
30
|
+
const result = {
|
|
31
|
+
login,
|
|
32
|
+
followers,
|
|
33
|
+
publicRepos: repos,
|
|
34
|
+
accountAgeDays: ageDays,
|
|
35
|
+
suspicious: reasons.length > 0,
|
|
36
|
+
suspiciousReasons: reasons,
|
|
37
|
+
reputationScore: score,
|
|
38
|
+
};
|
|
39
|
+
cache.set(login, result);
|
|
40
|
+
return result;
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
const fallback = {
|
|
44
|
+
login,
|
|
45
|
+
followers: 0,
|
|
46
|
+
publicRepos: 0,
|
|
47
|
+
accountAgeDays: 0,
|
|
48
|
+
suspicious: false,
|
|
49
|
+
suspiciousReasons: [],
|
|
50
|
+
reputationScore: 50,
|
|
51
|
+
};
|
|
52
|
+
cache.set(login, fallback);
|
|
53
|
+
return fallback;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
function clearReputationCache() {
|
|
57
|
+
cache.clear();
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=reputation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reputation.js","sourceRoot":"","sources":["../../src/core/reputation.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAgBH,sCAkDC;AAED,oDAEC;AAxDD,MAAM,KAAK,GAAG,IAAI,GAAG,EAA0B,CAAC;AAEzC,KAAK,UAAU,aAAa,CACjC,OAAgB,EAChB,KAAa;IAEb,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC;IAE/C,IAAI,CAAC;QACH,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;QACxE,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CACxB,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAC3E,CAAC;QACF,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC;QAErC,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,IAAI,OAAO,GAAG,EAAE;YAAE,OAAO,CAAC,IAAI,CAAC,gBAAgB,OAAO,GAAG,CAAC,CAAC;QAC3D,IAAI,SAAS,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QAE1E,kFAAkF;QAClF,IAAI,KAAK,GAAG,EAAE,CAAC;QACf,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC;QACrC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAC7B,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC;QAChD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,GAAG,EAAE,CAAC,CAAC;QACzD,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAE7B,MAAM,MAAM,GAAmB;YAC7B,KAAK;YACL,SAAS;YACT,WAAW,EAAE,KAAK;YAClB,cAAc,EAAE,OAAO;YACvB,UAAU,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC;YAC9B,iBAAiB,EAAE,OAAO;YAC1B,eAAe,EAAE,KAAK;SACvB,CAAC;QACF,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACzB,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,QAAQ,GAAmB;YAC/B,KAAK;YACL,SAAS,EAAE,CAAC;YACZ,WAAW,EAAE,CAAC;YACd,cAAc,EAAE,CAAC;YACjB,UAAU,EAAE,KAAK;YACjB,iBAAiB,EAAE,EAAE;YACrB,eAAe,EAAE,EAAE;SACpB,CAAC;QACF,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC3B,OAAO,QAAQ,CAAC;IAClB,CAAC;AACH,CAAC;AAED,SAAgB,oBAAoB;IAClC,KAAK,CAAC,KAAK,EAAE,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TreliqScanner — Fetches and analyzes PRs from a GitHub repository
|
|
3
|
+
* Uses GraphQL API by default with REST fallback for optimal performance.
|
|
4
|
+
*/
|
|
5
|
+
import type { TreliqConfig, PRData, TreliqResult } from './types';
|
|
6
|
+
import { ScoringEngine } from './scoring';
|
|
7
|
+
export declare const TEST_PATTERNS: RegExp[];
|
|
8
|
+
export declare class TreliqScanner {
|
|
9
|
+
private config;
|
|
10
|
+
private octokit;
|
|
11
|
+
private graphqlClient;
|
|
12
|
+
private rateLimit;
|
|
13
|
+
scoring: ScoringEngine;
|
|
14
|
+
shaMap: Map<number, string>;
|
|
15
|
+
private db?;
|
|
16
|
+
constructor(config: TreliqConfig);
|
|
17
|
+
scan(): Promise<TreliqResult>;
|
|
18
|
+
/** Fetch reputations for a list of authors in parallel */
|
|
19
|
+
private fetchReputations;
|
|
20
|
+
fetchPRs(): Promise<PRData[]>;
|
|
21
|
+
/**
|
|
22
|
+
* Fetch PRs via GraphQL — single query per 100 PRs (replaces 4 REST calls/PR)
|
|
23
|
+
*/
|
|
24
|
+
private fetchPRsGraphQL;
|
|
25
|
+
/**
|
|
26
|
+
* Fetch PRs via REST API — fallback when GraphQL fails.
|
|
27
|
+
* Makes 4 parallel REST calls per PR (slower but proven).
|
|
28
|
+
*/
|
|
29
|
+
private fetchPRsREST;
|
|
30
|
+
/**
|
|
31
|
+
* Lightweight PR list fetch — only metadata needed for cache comparison
|
|
32
|
+
*/
|
|
33
|
+
private fetchPRList;
|
|
34
|
+
private fetchPRListGraphQL;
|
|
35
|
+
private fetchPRListREST;
|
|
36
|
+
/**
|
|
37
|
+
* Fetch full details for specific PR numbers
|
|
38
|
+
*/
|
|
39
|
+
fetchPRDetails(prNumbers: number[]): Promise<PRData[]>;
|
|
40
|
+
/**
|
|
41
|
+
* Fetch specific PR details via GraphQL (one query per PR).
|
|
42
|
+
*/
|
|
43
|
+
private fetchPRDetailsGraphQL;
|
|
44
|
+
/**
|
|
45
|
+
* Fetch specific PR details via REST — fallback.
|
|
46
|
+
*/
|
|
47
|
+
private fetchPRDetailsREST;
|
|
48
|
+
/**
|
|
49
|
+
* Fetch CODEOWNERS file and parse into pattern -> owners map
|
|
50
|
+
*/
|
|
51
|
+
private fetchCodeowners;
|
|
52
|
+
/**
|
|
53
|
+
* Match changed files against CODEOWNERS patterns and return matched owners
|
|
54
|
+
*/
|
|
55
|
+
private matchCodeowners;
|
|
56
|
+
private fetchVisionDoc;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=scanner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../../src/core/scanner.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,EAAY,YAAY,EAAgB,MAAM,SAAS,CAAC;AAC1F,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAU1C,eAAO,MAAM,aAAa,UAAqG,CAAC;AAsBhI,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,aAAa,CAAiB;IACtC,OAAO,CAAC,SAAS,CAAmB;IACpC,OAAO,EAAE,aAAa,CAAC;IAChB,MAAM,sBAA6B;IAC1C,OAAO,CAAC,EAAE,CAAC,CAAW;gBAEV,MAAM,EAAE,YAAY;IAa1B,IAAI,IAAI,OAAO,CAAC,YAAY,CAAC;IAsLnC,0DAA0D;YAC5C,gBAAgB;IAaxB,QAAQ,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAYnC;;OAEG;YACW,eAAe;IAgC7B;;;OAGG;YACW,YAAY;IA6F1B;;OAEG;YACW,WAAW;YAYX,kBAAkB;YA+BlB,eAAe;IAqB7B;;OAEG;IACG,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAY5D;;OAEG;YACW,qBAAqB;IA2BnC;;OAEG;YACW,kBAAkB;IAqFhC;;OAEG;YACW,eAAe;IAsB7B;;OAEG;IACH,OAAO,CAAC,eAAe;YAkBT,cAAc;CAW7B"}
|