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.
Files changed (87) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +340 -0
  3. package/dist/cli.d.ts +3 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +540 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/core/cache.d.ts +29 -0
  8. package/dist/core/cache.d.ts.map +1 -0
  9. package/dist/core/cache.js +64 -0
  10. package/dist/core/cache.js.map +1 -0
  11. package/dist/core/concurrency.d.ts +16 -0
  12. package/dist/core/concurrency.d.ts.map +1 -0
  13. package/dist/core/concurrency.js +60 -0
  14. package/dist/core/concurrency.js.map +1 -0
  15. package/dist/core/db.d.ts +127 -0
  16. package/dist/core/db.d.ts.map +1 -0
  17. package/dist/core/db.js +490 -0
  18. package/dist/core/db.js.map +1 -0
  19. package/dist/core/dedup.d.ts +18 -0
  20. package/dist/core/dedup.d.ts.map +1 -0
  21. package/dist/core/dedup.js +159 -0
  22. package/dist/core/dedup.js.map +1 -0
  23. package/dist/core/graphql.d.ts +30 -0
  24. package/dist/core/graphql.d.ts.map +1 -0
  25. package/dist/core/graphql.js +243 -0
  26. package/dist/core/graphql.js.map +1 -0
  27. package/dist/core/notifications.d.ts +37 -0
  28. package/dist/core/notifications.d.ts.map +1 -0
  29. package/dist/core/notifications.js +174 -0
  30. package/dist/core/notifications.js.map +1 -0
  31. package/dist/core/provider.d.ts +45 -0
  32. package/dist/core/provider.d.ts.map +1 -0
  33. package/dist/core/provider.js +147 -0
  34. package/dist/core/provider.js.map +1 -0
  35. package/dist/core/ratelimit.d.ts +40 -0
  36. package/dist/core/ratelimit.d.ts.map +1 -0
  37. package/dist/core/ratelimit.js +77 -0
  38. package/dist/core/ratelimit.js.map +1 -0
  39. package/dist/core/reputation.d.ts +16 -0
  40. package/dist/core/reputation.d.ts.map +1 -0
  41. package/dist/core/reputation.js +59 -0
  42. package/dist/core/reputation.js.map +1 -0
  43. package/dist/core/scanner.d.ts +58 -0
  44. package/dist/core/scanner.d.ts.map +1 -0
  45. package/dist/core/scanner.js +635 -0
  46. package/dist/core/scanner.js.map +1 -0
  47. package/dist/core/scoring.d.ts +36 -0
  48. package/dist/core/scoring.d.ts.map +1 -0
  49. package/dist/core/scoring.js +360 -0
  50. package/dist/core/scoring.js.map +1 -0
  51. package/dist/core/types.d.ts +89 -0
  52. package/dist/core/types.d.ts.map +1 -0
  53. package/dist/core/types.js +6 -0
  54. package/dist/core/types.js.map +1 -0
  55. package/dist/core/vectorstore.d.ts +42 -0
  56. package/dist/core/vectorstore.d.ts.map +1 -0
  57. package/dist/core/vectorstore.js +149 -0
  58. package/dist/core/vectorstore.js.map +1 -0
  59. package/dist/core/vision.d.ts +16 -0
  60. package/dist/core/vision.d.ts.map +1 -0
  61. package/dist/core/vision.js +41 -0
  62. package/dist/core/vision.js.map +1 -0
  63. package/dist/index.d.ts +21 -0
  64. package/dist/index.d.ts.map +1 -0
  65. package/dist/index.js +34 -0
  66. package/dist/index.js.map +1 -0
  67. package/dist/server/app.d.ts +21 -0
  68. package/dist/server/app.d.ts.map +1 -0
  69. package/dist/server/app.js +284 -0
  70. package/dist/server/app.js.map +1 -0
  71. package/dist/server/index.d.ts +29 -0
  72. package/dist/server/index.d.ts.map +1 -0
  73. package/dist/server/index.js +117 -0
  74. package/dist/server/index.js.map +1 -0
  75. package/dist/server/scheduler.d.ts +26 -0
  76. package/dist/server/scheduler.d.ts.map +1 -0
  77. package/dist/server/scheduler.js +136 -0
  78. package/dist/server/scheduler.js.map +1 -0
  79. package/dist/server/sse.d.ts +33 -0
  80. package/dist/server/sse.d.ts.map +1 -0
  81. package/dist/server/sse.js +80 -0
  82. package/dist/server/sse.js.map +1 -0
  83. package/dist/server/webhooks.d.ts +23 -0
  84. package/dist/server/webhooks.d.ts.map +1 -0
  85. package/dist/server/webhooks.js +175 -0
  86. package/dist/server/webhooks.js.map +1 -0
  87. package/package.json +84 -0
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ /**
3
+ * Incremental cache for Treliq — skips re-scanning unchanged PRs
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.configHash = configHash;
7
+ exports.loadCache = loadCache;
8
+ exports.saveCache = saveCache;
9
+ exports.getCacheHit = getCacheHit;
10
+ const fs_1 = require("fs");
11
+ const crypto_1 = require("crypto");
12
+ /** Generate a hash of config options that affect scoring results */
13
+ function configHash(opts) {
14
+ const input = JSON.stringify({
15
+ trustContributors: opts.trustContributors,
16
+ provider: opts.providerName ?? 'none',
17
+ });
18
+ return (0, crypto_1.createHash)('md5').update(input).digest('hex').slice(0, 8);
19
+ }
20
+ function loadCache(cacheFile, repo, hash) {
21
+ if (!(0, fs_1.existsSync)(cacheFile))
22
+ return null;
23
+ try {
24
+ const raw = JSON.parse((0, fs_1.readFileSync)(cacheFile, 'utf-8'));
25
+ if (raw.repo !== repo)
26
+ return null;
27
+ // Invalidate cache if config changed (backwards compatible with old caches without hash)
28
+ if (hash && raw.configHash && raw.configHash !== hash) {
29
+ console.error('📦 Cache invalidated (config changed)');
30
+ return null;
31
+ }
32
+ return raw;
33
+ }
34
+ catch {
35
+ return null;
36
+ }
37
+ }
38
+ function saveCache(cacheFile, repo, scored, shaMap, hash) {
39
+ const cache = {
40
+ repo,
41
+ lastScan: new Date().toISOString(),
42
+ configHash: hash ?? '',
43
+ prs: {},
44
+ };
45
+ for (const pr of scored) {
46
+ const { embedding, ...rest } = pr;
47
+ cache.prs[String(pr.number)] = {
48
+ updatedAt: pr.updatedAt,
49
+ headSha: shaMap.get(pr.number) ?? '',
50
+ scoredPR: rest,
51
+ };
52
+ }
53
+ (0, fs_1.writeFileSync)(cacheFile, JSON.stringify(cache, null, 2));
54
+ }
55
+ function getCacheHit(cache, item) {
56
+ const cached = cache.prs[String(item.number)];
57
+ if (!cached)
58
+ return null;
59
+ if (cached.updatedAt === item.updatedAt && cached.headSha === item.headSha) {
60
+ return cached.scoredPR;
61
+ }
62
+ return null;
63
+ }
64
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/core/cache.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAoBH,gCAMC;AAED,8BAcC;AAED,8BAsBC;AAQD,kCAOC;AA/ED,2BAA6D;AAC7D,mCAAoC;AAgBpC,oEAAoE;AACpE,SAAgB,UAAU,CAAC,IAA2D;IACpF,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;QAC3B,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;QACzC,QAAQ,EAAE,IAAI,CAAC,YAAY,IAAI,MAAM;KACtC,CAAC,CAAC;IACH,OAAO,IAAA,mBAAU,EAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACnE,CAAC;AAED,SAAgB,SAAS,CAAC,SAAiB,EAAE,IAAY,EAAE,IAAa;IACtE,IAAI,CAAC,IAAA,eAAU,EAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC;IACxC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAY,EAAC,SAAS,EAAE,OAAO,CAAC,CAAgB,CAAC;QACxE,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QACnC,yFAAyF;QACzF,IAAI,IAAI,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;YACtD,OAAO,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;YACvD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAgB,SAAS,CACvB,SAAiB,EACjB,IAAY,EACZ,MAAkB,EAClB,MAA2B,EAC3B,IAAa;IAEb,MAAM,KAAK,GAAgB;QACzB,IAAI;QACJ,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QAClC,UAAU,EAAE,IAAI,IAAI,EAAE;QACtB,GAAG,EAAE,EAAE;KACR,CAAC;IACF,KAAK,MAAM,EAAE,IAAI,MAAM,EAAE,CAAC;QACxB,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,CAAC;QAClC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG;YAC7B,SAAS,EAAE,EAAE,CAAC,SAAS;YACvB,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE;YACpC,QAAQ,EAAE,IAAI;SACf,CAAC;IACJ,CAAC;IACD,IAAA,kBAAa,EAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC3D,CAAC;AAQD,SAAgB,WAAW,CAAC,KAAkB,EAAE,IAAgB;IAC9D,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9C,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,IAAI,MAAM,CAAC,SAAS,KAAK,IAAI,CAAC,SAAS,IAAI,MAAM,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;QAC3E,OAAO,MAAM,CAAC,QAAoB,CAAC;IACrC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * ConcurrencyController — Limit parallel async operations with retry support
3
+ */
4
+ export declare class ConcurrencyController {
5
+ private maxConcurrent;
6
+ private retryAttempts;
7
+ private retryDelay;
8
+ private running;
9
+ private queue;
10
+ constructor(maxConcurrent?: number, retryAttempts?: number, retryDelay?: number);
11
+ execute<T>(fn: () => Promise<T>): Promise<T>;
12
+ private acquire;
13
+ private release;
14
+ private withRetry;
15
+ }
16
+ //# sourceMappingURL=concurrency.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"concurrency.d.ts","sourceRoot":"","sources":["../../src/core/concurrency.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,KAAK,CAAyB;gBAE1B,aAAa,SAAI,EAAE,aAAa,SAAI,EAAE,UAAU,SAAO;IAM7D,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IASlD,OAAO,CAAC,OAAO;IAaf,OAAO,CAAC,OAAO;YAMD,SAAS;CAWxB"}
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ /**
3
+ * ConcurrencyController — Limit parallel async operations with retry support
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ConcurrencyController = void 0;
7
+ class ConcurrencyController {
8
+ maxConcurrent;
9
+ retryAttempts;
10
+ retryDelay;
11
+ running = 0;
12
+ queue = [];
13
+ constructor(maxConcurrent = 5, retryAttempts = 2, retryDelay = 1000) {
14
+ this.maxConcurrent = maxConcurrent;
15
+ this.retryAttempts = retryAttempts;
16
+ this.retryDelay = retryDelay;
17
+ }
18
+ async execute(fn) {
19
+ await this.acquire();
20
+ try {
21
+ return await this.withRetry(fn);
22
+ }
23
+ finally {
24
+ this.release();
25
+ }
26
+ }
27
+ acquire() {
28
+ if (this.running < this.maxConcurrent) {
29
+ this.running++;
30
+ return Promise.resolve();
31
+ }
32
+ return new Promise(resolve => {
33
+ this.queue.push(() => {
34
+ this.running++;
35
+ resolve();
36
+ });
37
+ });
38
+ }
39
+ release() {
40
+ this.running--;
41
+ const next = this.queue.shift();
42
+ if (next)
43
+ next();
44
+ }
45
+ async withRetry(fn) {
46
+ for (let attempt = 0; attempt <= this.retryAttempts; attempt++) {
47
+ try {
48
+ return await fn();
49
+ }
50
+ catch (err) {
51
+ if (attempt === this.retryAttempts)
52
+ throw err;
53
+ await new Promise(r => setTimeout(r, this.retryDelay * (attempt + 1)));
54
+ }
55
+ }
56
+ throw new Error('Max retries exceeded');
57
+ }
58
+ }
59
+ exports.ConcurrencyController = ConcurrencyController;
60
+ //# sourceMappingURL=concurrency.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"concurrency.js","sourceRoot":"","sources":["../../src/core/concurrency.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,MAAa,qBAAqB;IACxB,aAAa,CAAS;IACtB,aAAa,CAAS;IACtB,UAAU,CAAS;IACnB,OAAO,GAAG,CAAC,CAAC;IACZ,KAAK,GAAsB,EAAE,CAAC;IAEtC,YAAY,aAAa,GAAG,CAAC,EAAE,aAAa,GAAG,CAAC,EAAE,UAAU,GAAG,IAAI;QACjE,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,OAAO,CAAI,EAAoB;QACnC,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACrB,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAClC,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,CAAC;IACH,CAAC;IAEO,OAAO;QACb,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YACtC,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;QAC3B,CAAC;QACD,OAAO,IAAI,OAAO,CAAO,OAAO,CAAC,EAAE;YACjC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE;gBACnB,IAAI,CAAC,OAAO,EAAE,CAAC;gBACf,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,OAAO;QACb,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QAChC,IAAI,IAAI;YAAE,IAAI,EAAE,CAAC;IACnB,CAAC;IAEO,KAAK,CAAC,SAAS,CAAI,EAAoB;QAC7C,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE,EAAE,CAAC;YAC/D,IAAI,CAAC;gBACH,OAAO,MAAM,EAAE,EAAE,CAAC;YACpB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,OAAO,KAAK,IAAI,CAAC,aAAa;oBAAE,MAAM,GAAG,CAAC;gBAC9C,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACzE,CAAC;QACH,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC1C,CAAC;CACF;AApDD,sDAoDC"}
@@ -0,0 +1,127 @@
1
+ /**
2
+ * TreliqDB - SQLite persistence layer for PR scan results
3
+ *
4
+ * Stores repositories, pull requests, scoring signals, and scan history
5
+ * with full transaction support and optimized indexes.
6
+ */
7
+ import type { ScoredPR } from './types';
8
+ export interface Repository {
9
+ id: number;
10
+ owner: string;
11
+ repo: string;
12
+ createdAt: string;
13
+ lastScan: string | null;
14
+ }
15
+ export interface ScanHistoryEntry {
16
+ scannedAt: string;
17
+ totalPRs: number;
18
+ spamCount: number;
19
+ dupClusters: number;
20
+ configHash: string;
21
+ }
22
+ export interface GetPRsOptions {
23
+ state?: string;
24
+ limit?: number;
25
+ offset?: number;
26
+ sortBy?: string;
27
+ }
28
+ export declare class TreliqDB {
29
+ private db;
30
+ constructor(dbPath: string);
31
+ /**
32
+ * Initialize database schema with tables and indexes
33
+ */
34
+ private initSchema;
35
+ /**
36
+ * Insert or update a repository and return its ID
37
+ */
38
+ upsertRepository(owner: string, repo: string): number;
39
+ /**
40
+ * Get all repositories
41
+ */
42
+ getRepositories(): Array<{
43
+ id: number;
44
+ owner: string;
45
+ repo: string;
46
+ lastScan: string | null;
47
+ }>;
48
+ /**
49
+ * Insert or update a pull request with its scoring signals
50
+ * Uses transaction to ensure atomicity
51
+ */
52
+ upsertPR(repoId: number, pr: ScoredPR, configHash: string): number;
53
+ /**
54
+ * Get pull requests with optional filtering, sorting, and pagination
55
+ */
56
+ getPRs(repoId: number, opts?: GetPRsOptions): ScoredPR[];
57
+ /**
58
+ * Get spam PRs for a repository
59
+ */
60
+ getSpamPRs(repoId: number): ScoredPR[];
61
+ /**
62
+ * Get a single PR by number
63
+ */
64
+ getPRByNumber(repoId: number, prNumber: number): ScoredPR | null;
65
+ /**
66
+ * Update PR state (e.g., 'open', 'closed', 'merged')
67
+ */
68
+ updatePRState(repoId: number, prNumber: number, state: string): void;
69
+ /**
70
+ * Get signals for a specific PR
71
+ */
72
+ private getSignalsForPR;
73
+ /**
74
+ * Convert database row to ScoredPR object
75
+ */
76
+ private rowToPR;
77
+ /**
78
+ * Record a scan in history and update repository last_scan timestamp
79
+ */
80
+ recordScan(repoId: number, totalPRs: number, spamCount: number, dupClusters: number, configHash: string): void;
81
+ /**
82
+ * Get scan history for a repository
83
+ */
84
+ getScanHistory(repoId: number, limit?: number): ScanHistoryEntry[];
85
+ /**
86
+ * Get duplicate PR groups for a repository
87
+ */
88
+ getDuplicateGroups(repoId: number): Array<{
89
+ duplicateGroup: number;
90
+ prs: ScoredPR[];
91
+ }>;
92
+ /**
93
+ * Get PRs in a specific duplicate group
94
+ */
95
+ private getPRsByDuplicateGroup;
96
+ /**
97
+ * Get statistics for a repository
98
+ */
99
+ getRepositoryStats(repoId: number): {
100
+ totalPRs: number;
101
+ openPRs: number;
102
+ spamPRs: number;
103
+ duplicateGroups: number;
104
+ avgScore: number;
105
+ };
106
+ /**
107
+ * Clear all PR data, scoring signals, and scan history for a repository
108
+ * Repository entry itself is preserved
109
+ */
110
+ clearRepository(repoId: number): {
111
+ deletedPRs: number;
112
+ deletedScans: number;
113
+ };
114
+ /**
115
+ * Close the database connection
116
+ */
117
+ close(): void;
118
+ /**
119
+ * Optimize database (VACUUM and ANALYZE)
120
+ */
121
+ optimize(): void;
122
+ /**
123
+ * Get database size in bytes
124
+ */
125
+ getDatabaseSize(): number;
126
+ }
127
+ //# sourceMappingURL=db.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/core/db.ts"],"names":[],"mappings":"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"}