@prsense/context 0.1.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 (99) hide show
  1. package/LICENSE +201 -0
  2. package/dist/chunking/charChunker.d.ts +7 -0
  3. package/dist/chunking/charChunker.d.ts.map +1 -0
  4. package/dist/chunking/charChunker.js +27 -0
  5. package/dist/chunking/charChunker.js.map +1 -0
  6. package/dist/chunking/simpleChunker.d.ts +6 -0
  7. package/dist/chunking/simpleChunker.d.ts.map +1 -0
  8. package/dist/chunking/simpleChunker.js +29 -0
  9. package/dist/chunking/simpleChunker.js.map +1 -0
  10. package/dist/chunking/types.d.ts +8 -0
  11. package/dist/chunking/types.d.ts.map +1 -0
  12. package/dist/chunking/types.js +2 -0
  13. package/dist/chunking/types.js.map +1 -0
  14. package/dist/diff/GitHubPrDiffProvider.d.ts +25 -0
  15. package/dist/diff/GitHubPrDiffProvider.d.ts.map +1 -0
  16. package/dist/diff/GitHubPrDiffProvider.js +87 -0
  17. package/dist/diff/GitHubPrDiffProvider.js.map +1 -0
  18. package/dist/diff/GitLabMrDiffProvider.d.ts +21 -0
  19. package/dist/diff/GitLabMrDiffProvider.d.ts.map +1 -0
  20. package/dist/diff/GitLabMrDiffProvider.js +76 -0
  21. package/dist/diff/GitLabMrDiffProvider.js.map +1 -0
  22. package/dist/diff/LocalGitDiffProvider.d.ts +13 -0
  23. package/dist/diff/LocalGitDiffProvider.d.ts.map +1 -0
  24. package/dist/diff/LocalGitDiffProvider.js +37 -0
  25. package/dist/diff/LocalGitDiffProvider.js.map +1 -0
  26. package/dist/diff/parseUnifiedDiff.d.ts +3 -0
  27. package/dist/diff/parseUnifiedDiff.d.ts.map +1 -0
  28. package/dist/diff/parseUnifiedDiff.js +30 -0
  29. package/dist/diff/parseUnifiedDiff.js.map +1 -0
  30. package/dist/index/IndexMetadataRepository.d.ts +7 -0
  31. package/dist/index/IndexMetadataRepository.d.ts.map +1 -0
  32. package/dist/index/IndexMetadataRepository.js +2 -0
  33. package/dist/index/IndexMetadataRepository.js.map +1 -0
  34. package/dist/index/PostgresIndexMetadataRepository.d.ts +12 -0
  35. package/dist/index/PostgresIndexMetadataRepository.d.ts.map +1 -0
  36. package/dist/index/PostgresIndexMetadataRepository.js +132 -0
  37. package/dist/index/PostgresIndexMetadataRepository.js.map +1 -0
  38. package/dist/index/detectKind.d.ts +3 -0
  39. package/dist/index/detectKind.d.ts.map +1 -0
  40. package/dist/index/detectKind.js +31 -0
  41. package/dist/index/detectKind.js.map +1 -0
  42. package/dist/index/index.d.ts +4 -0
  43. package/dist/index/index.d.ts.map +1 -0
  44. package/dist/index/index.js +4 -0
  45. package/dist/index/index.js.map +1 -0
  46. package/dist/index.d.ts +12 -0
  47. package/dist/index.d.ts.map +1 -0
  48. package/dist/index.js +13 -0
  49. package/dist/index.js.map +1 -0
  50. package/dist/migrations/0001_init.sql +72 -0
  51. package/dist/migrations/ensureDatabaseSchema.d.ts +2 -0
  52. package/dist/migrations/ensureDatabaseSchema.d.ts.map +1 -0
  53. package/dist/migrations/ensureDatabaseSchema.js +32 -0
  54. package/dist/migrations/ensureDatabaseSchema.js.map +1 -0
  55. package/dist/migrations/loadSql.d.ts +2 -0
  56. package/dist/migrations/loadSql.d.ts.map +1 -0
  57. package/dist/migrations/loadSql.js +10 -0
  58. package/dist/migrations/loadSql.js.map +1 -0
  59. package/dist/ports.d.ts +5 -0
  60. package/dist/ports.d.ts.map +1 -0
  61. package/dist/ports.js +2 -0
  62. package/dist/ports.js.map +1 -0
  63. package/dist/rag/PostgresRagChunkRepository.d.ts +42 -0
  64. package/dist/rag/PostgresRagChunkRepository.d.ts.map +1 -0
  65. package/dist/rag/PostgresRagChunkRepository.js +189 -0
  66. package/dist/rag/PostgresRagChunkRepository.js.map +1 -0
  67. package/dist/rag/RagChunkRepository.d.ts +13 -0
  68. package/dist/rag/RagChunkRepository.d.ts.map +1 -0
  69. package/dist/rag/RagChunkRepository.js +2 -0
  70. package/dist/rag/RagChunkRepository.js.map +1 -0
  71. package/dist/rag/index.d.ts +3 -0
  72. package/dist/rag/index.d.ts.map +1 -0
  73. package/dist/rag/index.js +3 -0
  74. package/dist/rag/index.js.map +1 -0
  75. package/dist/repository/FilesystemRepositorySource.d.ts +11 -0
  76. package/dist/repository/FilesystemRepositorySource.d.ts.map +1 -0
  77. package/dist/repository/FilesystemRepositorySource.js +100 -0
  78. package/dist/repository/FilesystemRepositorySource.js.map +1 -0
  79. package/dist/repository/GitHubRepositorySource.d.ts +15 -0
  80. package/dist/repository/GitHubRepositorySource.d.ts.map +1 -0
  81. package/dist/repository/GitHubRepositorySource.js +49 -0
  82. package/dist/repository/GitHubRepositorySource.js.map +1 -0
  83. package/dist/repository/GitLabRepositorySource.d.ts +15 -0
  84. package/dist/repository/GitLabRepositorySource.d.ts.map +1 -0
  85. package/dist/repository/GitLabRepositorySource.js +49 -0
  86. package/dist/repository/GitLabRepositorySource.js.map +1 -0
  87. package/dist/repository/RepositorySource.d.ts +32 -0
  88. package/dist/repository/RepositorySource.d.ts.map +1 -0
  89. package/dist/repository/RepositorySource.js +3 -0
  90. package/dist/repository/RepositorySource.js.map +1 -0
  91. package/dist/repository/index.d.ts +5 -0
  92. package/dist/repository/index.d.ts.map +1 -0
  93. package/dist/repository/index.js +5 -0
  94. package/dist/repository/index.js.map +1 -0
  95. package/dist/utils/detectLanguage.d.ts +2 -0
  96. package/dist/utils/detectLanguage.d.ts.map +1 -0
  97. package/dist/utils/detectLanguage.js +41 -0
  98. package/dist/utils/detectLanguage.js.map +1 -0
  99. package/package.json +33 -0
@@ -0,0 +1,189 @@
1
+ // packages/context/src/rag/PostgresRagChunkRepository.ts
2
+ import pg from "pg";
3
+ export class PostgresRagChunkRepository {
4
+ connectionString;
5
+ constructor(connectionString) {
6
+ this.connectionString = connectionString;
7
+ }
8
+ async withClient(fn) {
9
+ const client = new pg.Client({
10
+ connectionString: this.connectionString,
11
+ });
12
+ await client.connect();
13
+ try {
14
+ return await fn(client);
15
+ }
16
+ finally {
17
+ await client.end().catch(() => { });
18
+ }
19
+ }
20
+ async getEmbeddingColumnDimension() {
21
+ return this.withClient(async (client) => {
22
+ const result = await client.query(`
23
+ SELECT
24
+ a.atttypmod AS dimension
25
+ FROM pg_attribute a
26
+ JOIN pg_class c ON a.attrelid = c.oid
27
+ WHERE c.relname = 'rag_chunks'
28
+ AND a.attname = 'embedding'
29
+ `);
30
+ if (result.rows.length === 0) {
31
+ return null;
32
+ }
33
+ return Number(result.rows[0].dimension);
34
+ });
35
+ }
36
+ async rebuildRepository(provider, name, rows) {
37
+ const client = new pg.Client({
38
+ connectionString: this.connectionString,
39
+ });
40
+ await client.connect();
41
+ try {
42
+ await client.query("BEGIN");
43
+ await client.query(`
44
+ DELETE FROM rag_chunks
45
+ WHERE repo_provider = $1
46
+ AND repo_name = $2
47
+ `, [provider, name]);
48
+ const insertText = `
49
+ INSERT INTO rag_chunks (
50
+ id,
51
+ repo_provider,
52
+ repo_owner,
53
+ repo_name,
54
+ repo_ref,
55
+ path,
56
+ kind,
57
+ language,
58
+ content,
59
+ line_start,
60
+ line_end,
61
+ embedding
62
+ )
63
+ VALUES (
64
+ $1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12
65
+ )
66
+ `;
67
+ for (const row of rows) {
68
+ const { chunk } = row;
69
+ await client.query(insertText, [
70
+ chunk.id,
71
+ row.repoProvider,
72
+ row.repoOwner ?? null,
73
+ row.repoName,
74
+ row.repoRef,
75
+ chunk.source.kind === "file" ? chunk.source.path : null,
76
+ chunk.source.kind,
77
+ chunk.metadata?.language ?? null,
78
+ chunk.content,
79
+ chunk.metadata?.lineStart ?? null,
80
+ chunk.metadata?.lineEnd ?? null,
81
+ `[${row.embedding.join(",")}]`,
82
+ ]);
83
+ }
84
+ await client.query("COMMIT");
85
+ }
86
+ catch (err) {
87
+ await client.query("ROLLBACK");
88
+ throw err;
89
+ }
90
+ finally {
91
+ await client.end().catch(() => { });
92
+ }
93
+ }
94
+ async deleteByRepository(provider, name) {
95
+ await this.withClient(async (client) => {
96
+ await client.query(`
97
+ DELETE FROM rag_chunks
98
+ WHERE repo_provider = $1
99
+ AND repo_name = $2
100
+ `, [provider, name]);
101
+ });
102
+ }
103
+ async insertChunks(rows) {
104
+ if (rows.length === 0)
105
+ return;
106
+ await this.withClient(async (client) => {
107
+ const text = `
108
+ INSERT INTO rag_chunks (
109
+ id,
110
+ repo_provider,
111
+ repo_owner,
112
+ repo_name,
113
+ repo_ref,
114
+ path,
115
+ kind,
116
+ language,
117
+ content,
118
+ line_start,
119
+ line_end,
120
+ embedding
121
+ )
122
+ VALUES (
123
+ $1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12
124
+ )
125
+ `;
126
+ for (const row of rows) {
127
+ const { chunk } = row;
128
+ await client.query(text, [
129
+ chunk.id,
130
+ row.repoProvider,
131
+ row.repoOwner ?? null,
132
+ row.repoName,
133
+ row.repoRef,
134
+ chunk.metadata?.path ?? null,
135
+ chunk.metadata?.kind ?? "code",
136
+ chunk.metadata?.language ?? null,
137
+ chunk.content,
138
+ chunk.metadata?.lineStart ?? null,
139
+ chunk.metadata?.lineEnd ?? null,
140
+ `[${row.embedding.join(",")}]`,
141
+ ]);
142
+ }
143
+ });
144
+ }
145
+ async searchNearest(params) {
146
+ const client = new pg.Client({
147
+ connectionString: this.connectionString,
148
+ });
149
+ await client.connect();
150
+ try {
151
+ const query = `
152
+ SELECT
153
+ id,
154
+ path,
155
+ kind,
156
+ language,
157
+ content,
158
+ line_start,
159
+ line_end,
160
+ embedding <-> $1 AS distance
161
+ FROM rag_chunks
162
+ WHERE repo_provider = $2
163
+ AND repo_name = $3
164
+ ${params.repoRef ? "AND repo_ref = $4" : ""}
165
+ ORDER BY embedding <-> $1
166
+ LIMIT ${params.limit}
167
+ `;
168
+ const vectorLiteral = `[${params.embedding.join(",")}]`;
169
+ const values = params.repoRef
170
+ ? [vectorLiteral, params.repoProvider, params.repoName, params.repoRef]
171
+ : [vectorLiteral, params.repoProvider, params.repoName];
172
+ const result = await client.query(query, values);
173
+ return result.rows.map((row) => ({
174
+ id: row.id,
175
+ path: row.path,
176
+ kind: row.kind,
177
+ language: row.language,
178
+ content: row.content,
179
+ lineStart: row.line_start,
180
+ lineEnd: row.line_end,
181
+ distance: row.distance,
182
+ }));
183
+ }
184
+ finally {
185
+ await client.end().catch(() => { });
186
+ }
187
+ }
188
+ }
189
+ //# sourceMappingURL=PostgresRagChunkRepository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PostgresRagChunkRepository.js","sourceRoot":"","sources":["../../src/rag/PostgresRagChunkRepository.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { ContextChunk } from "@prsense/core";
2
+ export interface RagChunkRepository {
3
+ deleteByRepository(provider: string, name: string, ref: string): Promise<void>;
4
+ insertChunks(rows: Array<{
5
+ chunk: ContextChunk;
6
+ repoProvider: string;
7
+ repoOwner?: string;
8
+ repoName: string;
9
+ repoRef: string;
10
+ embedding: number[];
11
+ }>): Promise<void>;
12
+ }
13
+ //# sourceMappingURL=RagChunkRepository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RagChunkRepository.d.ts","sourceRoot":"","sources":["../../src/rag/RagChunkRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,MAAM,WAAW,kBAAkB;IACjC,kBAAkB,CAChB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB,YAAY,CACV,IAAI,EAAE,KAAK,CAAC;QACV,KAAK,EAAE,YAAY,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC,GACD,OAAO,CAAC,IAAI,CAAC,CAAC;CAClB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=RagChunkRepository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RagChunkRepository.js","sourceRoot":"","sources":["../../src/rag/RagChunkRepository.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ export * from "./PostgresRagChunkRepository.js";
2
+ export * from "./RagChunkRepository.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rag/index.ts"],"names":[],"mappings":"AAAA,cAAc,iCAAiC,CAAC;AAChD,cAAc,yBAAyB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from "./PostgresRagChunkRepository.js";
2
+ export * from "./RagChunkRepository.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rag/index.ts"],"names":[],"mappings":"AAAA,cAAc,iCAAiC,CAAC;AAChD,cAAc,yBAAyB,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { RepositorySource, RepositoryIdentity, RepositoryRevision } from "./RepositorySource.js";
2
+ export declare class FileSystemRepositorySource implements RepositorySource {
3
+ private readonly root;
4
+ constructor(root: string);
5
+ listFiles(): Promise<string[]>;
6
+ private walkDirectory;
7
+ readFile(filePath: string): Promise<string>;
8
+ getRevision(): Promise<RepositoryRevision>;
9
+ getRepositoryIdentity(): RepositoryIdentity;
10
+ }
11
+ //# sourceMappingURL=FilesystemRepositorySource.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilesystemRepositorySource.d.ts","sourceRoot":"","sources":["../../src/repository/FilesystemRepositorySource.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EACnB,MAAM,uBAAuB,CAAC;AAE/B,qBAAa,0BAA2B,YAAW,gBAAgB;IACrD,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,MAAM;IAEnC,SAAS,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YAiCtB,aAAa;IAuBrB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAyB3C,WAAW,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAuBhD,qBAAqB,IAAI,kBAAkB;CAM5C"}
@@ -0,0 +1,100 @@
1
+ //packages/context/src/repository/FileSystemRepositorySource.ts
2
+ import { execSync } from "node:child_process";
3
+ import fs from "node:fs/promises";
4
+ import path from "node:path";
5
+ export class FileSystemRepositorySource {
6
+ root;
7
+ constructor(root) {
8
+ this.root = root;
9
+ }
10
+ async listFiles() {
11
+ try {
12
+ const output = execSync("git -c core.quotepath=false ls-files -z --cached --others --exclude-standard", { cwd: this.root });
13
+ const candidates = output
14
+ .toString("utf8")
15
+ .split("\0")
16
+ .filter(Boolean)
17
+ .map((relative) => path.join(this.root, relative));
18
+ const files = [];
19
+ for (const filePath of candidates) {
20
+ try {
21
+ const stat = await fs.stat(filePath);
22
+ if (stat.isFile()) {
23
+ files.push(filePath);
24
+ }
25
+ }
26
+ catch {
27
+ // ignore broken symlinks or transient paths
28
+ }
29
+ }
30
+ return files;
31
+ }
32
+ catch {
33
+ return this.walkDirectory(this.root);
34
+ }
35
+ }
36
+ async walkDirectory(dir) {
37
+ const files = [];
38
+ async function walk(current) {
39
+ const entries = await fs.readdir(current, { withFileTypes: true });
40
+ for (const entry of entries) {
41
+ if (entry.name === ".git")
42
+ continue;
43
+ const fullPath = path.join(current, entry.name);
44
+ if (entry.isDirectory()) {
45
+ await walk(fullPath);
46
+ }
47
+ else if (entry.isFile()) {
48
+ files.push(fullPath);
49
+ }
50
+ }
51
+ }
52
+ await walk(dir);
53
+ return files;
54
+ }
55
+ async readFile(filePath) {
56
+ const stat = await fs.stat(filePath);
57
+ if (!stat.isFile()) {
58
+ throw new Error("NOT_A_FILE");
59
+ }
60
+ const buffer = await fs.readFile(filePath);
61
+ // Detect binary via NULL byte
62
+ const sampleSize = Math.min(buffer.length, 8000);
63
+ for (let i = 0; i < sampleSize; i++) {
64
+ if (buffer[i] === 0) {
65
+ throw new Error("BINARY_FILE_DETECTED");
66
+ }
67
+ }
68
+ // Convert to UTF-8 safely
69
+ let content = buffer.toString("utf8");
70
+ // Defensive: strip remaining NULL characters if any
71
+ content = content.replace(/\u0000/g, "");
72
+ return content;
73
+ }
74
+ async getRevision() {
75
+ try {
76
+ const sha = execSync("git rev-parse HEAD", {
77
+ cwd: this.root,
78
+ encoding: "utf8",
79
+ }).trim();
80
+ const branch = execSync("git rev-parse --abbrev-ref HEAD", {
81
+ cwd: this.root,
82
+ encoding: "utf8",
83
+ }).trim();
84
+ return {
85
+ commitSha: sha,
86
+ defaultBranch: branch,
87
+ };
88
+ }
89
+ catch {
90
+ throw new Error("Unable to resolve git revision. Ensure this is a git repository.");
91
+ }
92
+ }
93
+ getRepositoryIdentity() {
94
+ return {
95
+ provider: "filesystem",
96
+ id: this.root,
97
+ };
98
+ }
99
+ }
100
+ //# sourceMappingURL=FilesystemRepositorySource.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilesystemRepositorySource.js","sourceRoot":"","sources":["../../src/repository/FilesystemRepositorySource.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { RepositorySource, RepositoryIdentity, RepositoryRevision } from "./RepositorySource.js";
2
+ export declare class GitHubRepositorySource implements RepositorySource {
3
+ private readonly owner;
4
+ private readonly repo;
5
+ private readonly token?;
6
+ private tempDir;
7
+ private fsSource;
8
+ constructor(owner: string, repo: string, token?: string | undefined);
9
+ private ensureCloned;
10
+ listFiles(): Promise<string[]>;
11
+ readFile(filePath: string): Promise<string>;
12
+ getRevision(): Promise<RepositoryRevision>;
13
+ getRepositoryIdentity(): RepositoryIdentity;
14
+ }
15
+ //# sourceMappingURL=GitHubRepositorySource.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GitHubRepositorySource.d.ts","sourceRoot":"","sources":["../../src/repository/GitHubRepositorySource.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EACnB,MAAM,uBAAuB,CAAC;AAG/B,qBAAa,sBAAuB,YAAW,gBAAgB;IAK3D,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;IANzB,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,QAAQ,CAA2C;gBAGxC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE,MAAM,YAAA;YAGnB,YAAY;IAiBpB,SAAS,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAK9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAK3C,WAAW,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAKhD,qBAAqB,IAAI,kBAAkB;CAM5C"}
@@ -0,0 +1,49 @@
1
+ import { execSync } from "node:child_process";
2
+ import os from "node:os";
3
+ import path from "node:path";
4
+ import fs from "node:fs/promises";
5
+ import { FileSystemRepositorySource } from "./FilesystemRepositorySource.js";
6
+ export class GitHubRepositorySource {
7
+ owner;
8
+ repo;
9
+ token;
10
+ tempDir = null;
11
+ fsSource = null;
12
+ constructor(owner, repo, token) {
13
+ this.owner = owner;
14
+ this.repo = repo;
15
+ this.token = token;
16
+ }
17
+ async ensureCloned() {
18
+ if (this.fsSource)
19
+ return;
20
+ const baseTemp = await fs.mkdtemp(path.join(os.tmpdir(), "prsense-"));
21
+ const cloneUrl = this.token
22
+ ? `https://${this.token}@github.com/${this.owner}/${this.repo}.git`
23
+ : `https://github.com/${this.owner}/${this.repo}.git`;
24
+ execSync(`git clone --depth 1 ${cloneUrl} ${baseTemp}`, {
25
+ stdio: "ignore",
26
+ });
27
+ this.tempDir = baseTemp;
28
+ this.fsSource = new FileSystemRepositorySource(baseTemp);
29
+ }
30
+ async listFiles() {
31
+ await this.ensureCloned();
32
+ return this.fsSource.listFiles();
33
+ }
34
+ async readFile(filePath) {
35
+ await this.ensureCloned();
36
+ return this.fsSource.readFile(filePath);
37
+ }
38
+ async getRevision() {
39
+ await this.ensureCloned();
40
+ return this.fsSource.getRevision();
41
+ }
42
+ getRepositoryIdentity() {
43
+ return {
44
+ provider: "github",
45
+ id: `${this.owner}/${this.repo}`,
46
+ };
47
+ }
48
+ }
49
+ //# sourceMappingURL=GitHubRepositorySource.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GitHubRepositorySource.js","sourceRoot":"","sources":["../../src/repository/GitHubRepositorySource.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAMlC,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAE7E,MAAM,OAAO,sBAAsB;IAKd;IACA;IACA;IANX,OAAO,GAAkB,IAAI,CAAC;IAC9B,QAAQ,GAAsC,IAAI,CAAC;IAE3D,YACmB,KAAa,EACb,IAAY,EACZ,KAAc;QAFd,UAAK,GAAL,KAAK,CAAQ;QACb,SAAI,GAAJ,IAAI,CAAQ;QACZ,UAAK,GAAL,KAAK,CAAS;IAC9B,CAAC;IAEI,KAAK,CAAC,YAAY;QACxB,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAE1B,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC;QAEtE,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK;YACzB,CAAC,CAAC,WAAW,IAAI,CAAC,KAAK,eAAe,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,MAAM;YACnE,CAAC,CAAC,sBAAsB,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,MAAM,CAAC;QAExD,QAAQ,CAAC,uBAAuB,QAAQ,IAAI,QAAQ,EAAE,EAAE;YACtD,KAAK,EAAE,QAAQ;SAChB,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC;QACxB,IAAI,CAAC,QAAQ,GAAG,IAAI,0BAA0B,CAAC,QAAQ,CAAC,CAAC;IAC3D,CAAC;IAED,KAAK,CAAC,SAAS;QACb,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC,QAAS,CAAC,SAAS,EAAE,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,QAAgB;QAC7B,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC,QAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,WAAW;QACf,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC,QAAS,CAAC,WAAW,EAAE,CAAC;IACtC,CAAC;IAED,qBAAqB;QACnB,OAAO;YACL,QAAQ,EAAE,QAAQ;YAClB,EAAE,EAAE,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE;SACjC,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,15 @@
1
+ import { RepositorySource, RepositoryIdentity, RepositoryRevision } from "./RepositorySource.js";
2
+ export declare class GitLabRepositorySource implements RepositorySource {
3
+ private readonly namespace;
4
+ private readonly repo;
5
+ private readonly token?;
6
+ private tempDir;
7
+ private fsSource;
8
+ constructor(namespace: string, repo: string, token?: string | undefined);
9
+ private ensureCloned;
10
+ listFiles(): Promise<string[]>;
11
+ readFile(filePath: string): Promise<string>;
12
+ getRevision(): Promise<RepositoryRevision>;
13
+ getRepositoryIdentity(): RepositoryIdentity;
14
+ }
15
+ //# sourceMappingURL=GitLabRepositorySource.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GitLabRepositorySource.d.ts","sourceRoot":"","sources":["../../src/repository/GitLabRepositorySource.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EACnB,MAAM,uBAAuB,CAAC;AAG/B,qBAAa,sBAAuB,YAAW,gBAAgB;IAK3D,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;IANzB,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,QAAQ,CAA2C;gBAGxC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE,MAAM,YAAA;YAGnB,YAAY;IAiBpB,SAAS,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAK9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAK3C,WAAW,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAKhD,qBAAqB,IAAI,kBAAkB;CAM5C"}
@@ -0,0 +1,49 @@
1
+ import { execSync } from "node:child_process";
2
+ import os from "node:os";
3
+ import path from "node:path";
4
+ import fs from "node:fs/promises";
5
+ import { FileSystemRepositorySource } from "./FilesystemRepositorySource.js";
6
+ export class GitLabRepositorySource {
7
+ namespace;
8
+ repo;
9
+ token;
10
+ tempDir = null;
11
+ fsSource = null;
12
+ constructor(namespace, repo, token) {
13
+ this.namespace = namespace;
14
+ this.repo = repo;
15
+ this.token = token;
16
+ }
17
+ async ensureCloned() {
18
+ if (this.fsSource)
19
+ return;
20
+ const baseTemp = await fs.mkdtemp(path.join(os.tmpdir(), "prsense-"));
21
+ const cloneUrl = this.token
22
+ ? `https://${this.token}@gitlab.com/${this.namespace}/${this.repo}.git`
23
+ : `https://gitlab.com/${this.namespace}/${this.repo}.git`;
24
+ execSync(`git clone --depth 1 ${cloneUrl} ${baseTemp}`, {
25
+ stdio: "ignore",
26
+ });
27
+ this.tempDir = baseTemp;
28
+ this.fsSource = new FileSystemRepositorySource(baseTemp);
29
+ }
30
+ async listFiles() {
31
+ await this.ensureCloned();
32
+ return this.fsSource.listFiles();
33
+ }
34
+ async readFile(filePath) {
35
+ await this.ensureCloned();
36
+ return this.fsSource.readFile(filePath);
37
+ }
38
+ async getRevision() {
39
+ await this.ensureCloned();
40
+ return this.fsSource.getRevision();
41
+ }
42
+ getRepositoryIdentity() {
43
+ return {
44
+ provider: "gitlab",
45
+ id: `${this.namespace}/${this.repo}`,
46
+ };
47
+ }
48
+ }
49
+ //# sourceMappingURL=GitLabRepositorySource.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GitLabRepositorySource.js","sourceRoot":"","sources":["../../src/repository/GitLabRepositorySource.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAMlC,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAE7E,MAAM,OAAO,sBAAsB;IAKd;IACA;IACA;IANX,OAAO,GAAkB,IAAI,CAAC;IAC9B,QAAQ,GAAsC,IAAI,CAAC;IAE3D,YACmB,SAAiB,EACjB,IAAY,EACZ,KAAc;QAFd,cAAS,GAAT,SAAS,CAAQ;QACjB,SAAI,GAAJ,IAAI,CAAQ;QACZ,UAAK,GAAL,KAAK,CAAS;IAC9B,CAAC;IAEI,KAAK,CAAC,YAAY;QACxB,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAE1B,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC;QAEtE,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK;YACzB,CAAC,CAAC,WAAW,IAAI,CAAC,KAAK,eAAe,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,MAAM;YACvE,CAAC,CAAC,sBAAsB,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,MAAM,CAAC;QAE5D,QAAQ,CAAC,uBAAuB,QAAQ,IAAI,QAAQ,EAAE,EAAE;YACtD,KAAK,EAAE,QAAQ;SAChB,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC;QACxB,IAAI,CAAC,QAAQ,GAAG,IAAI,0BAA0B,CAAC,QAAQ,CAAC,CAAC;IAC3D,CAAC;IAED,KAAK,CAAC,SAAS;QACb,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC,QAAS,CAAC,SAAS,EAAE,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,QAAgB;QAC7B,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC,QAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,WAAW;QACf,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC,QAAS,CAAC,WAAW,EAAE,CAAC;IACtC,CAAC;IAED,qBAAqB;QACnB,OAAO;YACL,QAAQ,EAAE,QAAQ;YAClB,EAAE,EAAE,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,EAAE;SACrC,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,32 @@
1
+ export type RepositoryIdentity = {
2
+ provider: "filesystem" | "github" | "gitlab";
3
+ id: string;
4
+ };
5
+ export type RepositoryRevision = {
6
+ commitSha: string;
7
+ defaultBranch?: string;
8
+ };
9
+ export interface RepositorySource {
10
+ listFiles(): Promise<string[]>;
11
+ /** Read file contents */
12
+ readFile(path: string): Promise<string>;
13
+ /**
14
+ * Returns the canonical revision identifier for this repository.
15
+ * For git-backed repos, this is the current commit SHA.
16
+ */
17
+ getRevision(): Promise<{
18
+ commitSha: string;
19
+ defaultBranch?: string;
20
+ }>;
21
+ /**
22
+ * Unique identifier for this repository.
23
+ * Example:
24
+ * filesystem:/abs/path
25
+ * github:owner/repo
26
+ */
27
+ getRepositoryIdentity(): {
28
+ provider: "filesystem" | "github" | "gitlab";
29
+ id: string;
30
+ };
31
+ }
32
+ //# sourceMappingURL=RepositorySource.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RepositorySource.d.ts","sourceRoot":"","sources":["../../src/repository/RepositorySource.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,EAAE,YAAY,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC7C,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,WAAW,gBAAgB;IAC/B,SAAS,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC/B,yBAAyB;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAExC;;;OAGG;IACH,WAAW,IAAI,OAAO,CAAC;QACrB,SAAS,EAAE,MAAM,CAAC;QAClB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC,CAAC;IAEH;;;;;OAKG;IACH,qBAAqB,IAAI;QACvB,QAAQ,EAAE,YAAY,GAAG,QAAQ,GAAG,QAAQ,CAAC;QAC7C,EAAE,EAAE,MAAM,CAAC;KACZ,CAAC;CACH"}
@@ -0,0 +1,3 @@
1
+ // packages/context/src/repository/RepositorySource.ts
2
+ export {};
3
+ //# sourceMappingURL=RepositorySource.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RepositorySource.js","sourceRoot":"","sources":["../../src/repository/RepositorySource.ts"],"names":[],"mappings":"AAAA,sDAAsD"}
@@ -0,0 +1,5 @@
1
+ export * from "./RepositorySource.js";
2
+ export * from "./FilesystemRepositorySource.js";
3
+ export * from "./GitHubRepositorySource.js";
4
+ export * from "./GitLabRepositorySource.js";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/repository/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,iCAAiC,CAAC;AAChD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,6BAA6B,CAAC"}
@@ -0,0 +1,5 @@
1
+ export * from "./RepositorySource.js";
2
+ export * from "./FilesystemRepositorySource.js";
3
+ export * from "./GitHubRepositorySource.js";
4
+ export * from "./GitLabRepositorySource.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/repository/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,iCAAiC,CAAC;AAChD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,6BAA6B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function detectLanguage(filePath: string): string | undefined;
2
+ //# sourceMappingURL=detectLanguage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detectLanguage.d.ts","sourceRoot":"","sources":["../../src/utils/detectLanguage.ts"],"names":[],"mappings":"AAwCA,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAMnE"}
@@ -0,0 +1,41 @@
1
+ import path from "node:path";
2
+ const extensionMap = {
3
+ ".ts": "typescript",
4
+ ".tsx": "typescript",
5
+ ".js": "javascript",
6
+ ".jsx": "javascript",
7
+ ".mjs": "javascript",
8
+ ".cjs": "javascript",
9
+ ".py": "python",
10
+ ".go": "go",
11
+ ".rs": "rust",
12
+ ".java": "java",
13
+ ".kt": "kotlin",
14
+ ".swift": "swift",
15
+ ".php": "php",
16
+ ".rb": "ruby",
17
+ ".cs": "csharp",
18
+ ".cpp": "cpp",
19
+ ".cc": "cpp",
20
+ ".c": "c",
21
+ ".h": "c",
22
+ ".json": "json",
23
+ ".yaml": "yaml",
24
+ ".yml": "yaml",
25
+ ".toml": "toml",
26
+ ".md": "markdown",
27
+ ".sh": "shell",
28
+ ".bash": "shell",
29
+ ".zsh": "shell",
30
+ ".sql": "sql",
31
+ ".html": "html",
32
+ ".css": "css",
33
+ ".scss": "scss",
34
+ };
35
+ export function detectLanguage(filePath) {
36
+ const ext = path.extname(filePath).toLowerCase();
37
+ if (!ext)
38
+ return undefined;
39
+ return extensionMap[ext];
40
+ }
41
+ //# sourceMappingURL=detectLanguage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detectLanguage.js","sourceRoot":"","sources":["../../src/utils/detectLanguage.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,YAAY,GAA2B;IAC3C,KAAK,EAAE,YAAY;IACnB,MAAM,EAAE,YAAY;IACpB,KAAK,EAAE,YAAY;IACnB,MAAM,EAAE,YAAY;IACpB,MAAM,EAAE,YAAY;IACpB,MAAM,EAAE,YAAY;IAEpB,KAAK,EAAE,QAAQ;IACf,KAAK,EAAE,IAAI;IACX,KAAK,EAAE,MAAM;IACb,OAAO,EAAE,MAAM;IACf,KAAK,EAAE,QAAQ;IACf,QAAQ,EAAE,OAAO;IACjB,MAAM,EAAE,KAAK;IACb,KAAK,EAAE,MAAM;IACb,KAAK,EAAE,QAAQ;IACf,MAAM,EAAE,KAAK;IACb,KAAK,EAAE,KAAK;IACZ,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;IAET,OAAO,EAAE,MAAM;IACf,OAAO,EAAE,MAAM;IACf,MAAM,EAAE,MAAM;IACd,OAAO,EAAE,MAAM;IAEf,KAAK,EAAE,UAAU;IACjB,KAAK,EAAE,OAAO;IACd,OAAO,EAAE,OAAO;IAChB,MAAM,EAAE,OAAO;IAEf,MAAM,EAAE,KAAK;IACb,OAAO,EAAE,MAAM;IACf,MAAM,EAAE,KAAK;IACb,OAAO,EAAE,MAAM;CAChB,CAAC;AAEF,MAAM,UAAU,cAAc,CAAC,QAAgB;IAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;IAEjD,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IAE3B,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC;AAC3B,CAAC"}