@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 @@
1
+ {"version":3,"file":"parseUnifiedDiff.js","sourceRoot":"","sources":["../../src/diff/parseUnifiedDiff.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAIhD,MAAM,UAAU,gBAAgB,CAAC,QAAgB;IAC/C,MAAM,KAAK,GAAe,EAAE,CAAC;IAE7B,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;QACrB,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACvB,CAAC;IAED,MAAM,YAAY,GAAG,QAAQ;SAC1B,KAAK,CAAC,gBAAgB,CAAC;SACvB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAEtC,KAAK,MAAM,OAAO,IAAI,YAAY,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAElC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QAEjC,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,CAAC,MAAM;YAAE,SAAS;QAEtB,sBAAsB;QACtB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QAE/C,IAAI,QAAQ,GAAG,SAAS,CAAC;QAEzB,IAAI,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YACtB,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,CAAC;QAED,KAAK,CAAC,IAAI,CAAC;YACT,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE;SACtB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,CAAC;AACnB,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { IndexMetadata } from "@prsense/core";
2
+ export interface IndexMetadataRepository {
3
+ load(repositoryProvider: string, repositoryId: string): Promise<IndexMetadata | null>;
4
+ save(metadata: IndexMetadata): Promise<void>;
5
+ delete(repositoryProvider: string, repositoryId: string): Promise<void>;
6
+ }
7
+ //# sourceMappingURL=IndexMetadataRepository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IndexMetadataRepository.d.ts","sourceRoot":"","sources":["../../src/index/IndexMetadataRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,MAAM,WAAW,uBAAuB;IACtC,IAAI,CACF,kBAAkB,EAAE,MAAM,EAC1B,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;IAEjC,IAAI,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7C,MAAM,CAAC,kBAAkB,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACzE"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=IndexMetadataRepository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IndexMetadataRepository.js","sourceRoot":"","sources":["../../src/index/IndexMetadataRepository.ts"],"names":[],"mappings":""}
@@ -0,0 +1,12 @@
1
+ import { IndexMetadata, IndexedRepository } from "@prsense/core";
2
+ import { IndexMetadataRepository } from "./IndexMetadataRepository.js";
3
+ export declare class PostgresIndexMetadataRepository implements IndexMetadataRepository {
4
+ private readonly connectionString;
5
+ constructor(connectionString: string);
6
+ private withClient;
7
+ load(repositoryProvider: string, repositoryId: string): Promise<IndexMetadata | null>;
8
+ save(metadata: IndexMetadata): Promise<void>;
9
+ delete(repositoryProvider: string, repositoryId: string): Promise<void>;
10
+ list(): Promise<IndexedRepository[]>;
11
+ }
12
+ //# sourceMappingURL=PostgresIndexMetadataRepository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PostgresIndexMetadataRepository.d.ts","sourceRoot":"","sources":["../../src/index/PostgresIndexMetadataRepository.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAEvE,qBAAa,+BAAgC,YAAW,uBAAuB;IACjE,OAAO,CAAC,QAAQ,CAAC,gBAAgB;gBAAhB,gBAAgB,EAAE,MAAM;YAEvC,UAAU;IAelB,IAAI,CACR,kBAAkB,EAAE,MAAM,EAC1B,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAyC1B,IAAI,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IA4C5C,MAAM,CACV,kBAAkB,EAAE,MAAM,EAC1B,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC;IAaV,IAAI,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;CA+B3C"}
@@ -0,0 +1,132 @@
1
+ import pg from "pg";
2
+ export class PostgresIndexMetadataRepository {
3
+ connectionString;
4
+ constructor(connectionString) {
5
+ this.connectionString = connectionString;
6
+ }
7
+ async withClient(fn) {
8
+ const client = new pg.Client({
9
+ connectionString: this.connectionString,
10
+ });
11
+ await client.connect();
12
+ try {
13
+ return await fn(client);
14
+ }
15
+ finally {
16
+ await client.end().catch(() => { });
17
+ }
18
+ }
19
+ async load(repositoryProvider, repositoryId) {
20
+ return this.withClient(async (client) => {
21
+ const res = await client.query(`
22
+ SELECT *
23
+ FROM prsense_index_metadata
24
+ WHERE repository_provider = $1
25
+ AND repository_id = $2
26
+ `, [repositoryProvider, repositoryId]);
27
+ if (res.rowCount === 0) {
28
+ return null;
29
+ }
30
+ const row = res.rows[0];
31
+ return {
32
+ repository: {
33
+ provider: row.repository_provider,
34
+ id: row.repository_id,
35
+ },
36
+ revision: {
37
+ commitSha: row.commit_sha,
38
+ },
39
+ embedding: {
40
+ provider: row.embedding_provider,
41
+ model: row.embedding_model,
42
+ dimension: Number(row.embedding_dimension),
43
+ },
44
+ chunking: {
45
+ strategy: row.chunk_strategy,
46
+ version: row.chunk_version,
47
+ },
48
+ prsenseVersion: row.prsense_version,
49
+ createdAt: row.created_at.toISOString(),
50
+ };
51
+ });
52
+ }
53
+ async save(metadata) {
54
+ await this.withClient(async (client) => {
55
+ await client.query(`
56
+ INSERT INTO prsense_index_metadata (
57
+ repository_provider,
58
+ repository_id,
59
+ commit_sha,
60
+ embedding_provider,
61
+ embedding_model,
62
+ embedding_dimension,
63
+ chunk_strategy,
64
+ chunk_version,
65
+ prsense_version,
66
+ created_at
67
+ )
68
+ VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10)
69
+ ON CONFLICT (repository_provider, repository_id)
70
+ DO UPDATE SET
71
+ commit_sha = EXCLUDED.commit_sha,
72
+ embedding_provider = EXCLUDED.embedding_provider,
73
+ embedding_model = EXCLUDED.embedding_model,
74
+ embedding_dimension = EXCLUDED.embedding_dimension,
75
+ chunk_strategy = EXCLUDED.chunk_strategy,
76
+ chunk_version = EXCLUDED.chunk_version,
77
+ prsense_version = EXCLUDED.prsense_version,
78
+ created_at = EXCLUDED.created_at
79
+ `, [
80
+ metadata.repository.provider,
81
+ metadata.repository.id,
82
+ metadata.revision.commitSha,
83
+ metadata.embedding.provider,
84
+ metadata.embedding.model,
85
+ metadata.embedding.dimension,
86
+ metadata.chunking.strategy,
87
+ metadata.chunking.version,
88
+ metadata.prsenseVersion,
89
+ metadata.createdAt,
90
+ ]);
91
+ });
92
+ }
93
+ async delete(repositoryProvider, repositoryId) {
94
+ await this.withClient(async (client) => {
95
+ await client.query(`
96
+ DELETE FROM prsense_index_metadata
97
+ WHERE repository_provider = $1
98
+ AND repository_id = $2
99
+ `, [repositoryProvider, repositoryId]);
100
+ });
101
+ }
102
+ async list() {
103
+ const client = new pg.Client({
104
+ connectionString: this.connectionString,
105
+ });
106
+ await client.connect();
107
+ try {
108
+ const res = await client.query(`
109
+ SELECT
110
+ repository_provider,
111
+ repository_id,
112
+ commit_sha,
113
+ created_at,
114
+ embedding_provider,
115
+ embedding_model
116
+ FROM prsense_index_metadata
117
+ `);
118
+ return res.rows.map((r) => ({
119
+ provider: r.repository_provider,
120
+ repository: r.repository_id,
121
+ commitSha: r.commit_sha,
122
+ indexedAt: Number(r.created_at),
123
+ embeddingProvider: r.embedding_provider,
124
+ embeddingModel: r.embedding_model,
125
+ }));
126
+ }
127
+ finally {
128
+ await client.end();
129
+ }
130
+ }
131
+ }
132
+ //# sourceMappingURL=PostgresIndexMetadataRepository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PostgresIndexMetadataRepository.js","sourceRoot":"","sources":["../../src/index/PostgresIndexMetadataRepository.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export type FileKind = "code" | "test" | "doc" | "config";
2
+ export declare function detectKind(filePath: string): FileKind;
3
+ //# sourceMappingURL=detectKind.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detectKind.d.ts","sourceRoot":"","sources":["../../src/index/detectKind.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;AAE1D,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAuCrD"}
@@ -0,0 +1,31 @@
1
+ export function detectKind(filePath) {
2
+ const lower = filePath.toLowerCase();
3
+ // Docs
4
+ if (lower.endsWith(".md") ||
5
+ lower.endsWith(".rst") ||
6
+ lower.includes("readme") ||
7
+ lower.includes("changelog") ||
8
+ lower.includes("contributing")) {
9
+ return "doc";
10
+ }
11
+ // Tests
12
+ if (lower.includes("/test") ||
13
+ lower.includes("__tests__") ||
14
+ lower.endsWith(".spec.ts") ||
15
+ lower.endsWith(".spec.js") ||
16
+ lower.endsWith(".test.ts") ||
17
+ lower.endsWith(".test.js")) {
18
+ return "test";
19
+ }
20
+ // Config
21
+ if (lower.endsWith(".json") ||
22
+ lower.endsWith(".yml") ||
23
+ lower.endsWith(".yaml") ||
24
+ lower.endsWith(".toml") ||
25
+ lower.endsWith(".ini") ||
26
+ lower.endsWith(".env")) {
27
+ return "config";
28
+ }
29
+ return "code";
30
+ }
31
+ //# sourceMappingURL=detectKind.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detectKind.js","sourceRoot":"","sources":["../../src/index/detectKind.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,UAAU,CAAC,QAAgB;IACzC,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IAErC,OAAO;IACP,IACE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;QACrB,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;QACtB,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACxB,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC;QAC3B,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,EAC9B,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,QAAQ;IACR,IACE,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;QACvB,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC;QAC3B,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC;QAC1B,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC;QAC1B,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC;QAC1B,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,EAC1B,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,SAAS;IACT,IACE,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;QACvB,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;QACtB,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;QACvB,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;QACvB,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;QACtB,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EACtB,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from "./IndexMetadataRepository.js";
2
+ export * from "./PostgresIndexMetadataRepository.js";
3
+ export * from "./detectKind.js";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index/index.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAC;AAC7C,cAAc,sCAAsC,CAAC;AACrD,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from "./IndexMetadataRepository.js";
2
+ export * from "./PostgresIndexMetadataRepository.js";
3
+ export * from "./detectKind.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index/index.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAC;AAC7C,cAAc,sCAAsC,CAAC;AACrD,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,12 @@
1
+ export * from "./chunking/types.js";
2
+ export * from "./chunking/simpleChunker.js";
3
+ export * from "./chunking/charChunker.js";
4
+ export * from "./repository/index.js";
5
+ export * from "./index/index.js";
6
+ export * from "./rag/index.js";
7
+ export * from "./utils/detectLanguage.js";
8
+ export * from "./diff/LocalGitDiffProvider.js";
9
+ export * from "./diff/GitHubPrDiffProvider.js";
10
+ export * from "./diff/GitLabMrDiffProvider.js";
11
+ export { ensureDatabaseSchema } from "./migrations/ensureDatabaseSchema.js";
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC;AAE1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,2BAA2B,CAAC;AAE1C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,gCAAgC,CAAC;AAE/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,13 @@
1
+ //packages/context/src/index.ts
2
+ export * from "./chunking/types.js";
3
+ export * from "./chunking/simpleChunker.js";
4
+ export * from "./chunking/charChunker.js";
5
+ export * from "./repository/index.js";
6
+ export * from "./index/index.js";
7
+ export * from "./rag/index.js";
8
+ export * from "./utils/detectLanguage.js";
9
+ export * from "./diff/LocalGitDiffProvider.js";
10
+ export * from "./diff/GitHubPrDiffProvider.js";
11
+ export * from "./diff/GitLabMrDiffProvider.js";
12
+ export { ensureDatabaseSchema } from "./migrations/ensureDatabaseSchema.js";
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAE/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC;AAE1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,2BAA2B,CAAC;AAE1C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,gCAAgC,CAAC;AAE/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC"}
@@ -0,0 +1,72 @@
1
+ -- packages/context/migrations/0001_init.sql
2
+ CREATE EXTENSION IF NOT EXISTS vector;
3
+
4
+ CREATE TABLE IF NOT EXISTS rag_chunks (
5
+ id TEXT PRIMARY KEY,
6
+
7
+ -- repository identity
8
+ repo_provider TEXT NOT NULL,
9
+ repo_owner TEXT,
10
+ repo_name TEXT NOT NULL,
11
+ repo_ref TEXT,
12
+
13
+ -- source info
14
+ path TEXT NOT NULL,
15
+ kind TEXT NOT NULL, -- code | test | doc | config
16
+ language TEXT,
17
+
18
+ -- content
19
+ content TEXT NOT NULL,
20
+
21
+ -- optional metadata
22
+ line_start INTEGER,
23
+ line_end INTEGER,
24
+
25
+ -- embedding
26
+ embedding VECTOR(768),
27
+
28
+ indexed_at TIMESTAMPTZ NOT NULL DEFAULT now()
29
+ );
30
+
31
+
32
+ CREATE INDEX ON rag_chunks
33
+ USING ivfflat (embedding vector_l2_ops)
34
+ WITH (lists = 100);
35
+
36
+ -- SELECT
37
+ -- id,
38
+ -- path,
39
+ -- kind,
40
+ -- language,
41
+ -- content,
42
+ -- line_start,
43
+ -- line_end,
44
+ -- embedding <-> $1 AS distance
45
+ -- FROM rag_chunks
46
+ -- WHERE
47
+ -- repo_provider = $2
48
+ -- AND repo_name = $3
49
+ -- AND (repo_ref = $4 OR repo_ref IS NULL)
50
+ -- ORDER BY embedding <-> $1
51
+ -- LIMIT $5;
52
+ --
53
+
54
+ CREATE TABLE IF NOT EXISTS prsense_index_metadata (
55
+ repository_provider TEXT NOT NULL,
56
+ repository_id TEXT NOT NULL,
57
+
58
+ commit_sha TEXT NOT NULL,
59
+
60
+ embedding_provider TEXT NOT NULL,
61
+ embedding_model TEXT NOT NULL,
62
+ embedding_dimension INTEGER NOT NULL,
63
+
64
+ chunk_strategy TEXT NOT NULL,
65
+ chunk_version INTEGER NOT NULL,
66
+
67
+ prsense_version TEXT NOT NULL,
68
+
69
+ created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(),
70
+
71
+ PRIMARY KEY (repository_provider, repository_id)
72
+ );
@@ -0,0 +1,2 @@
1
+ export declare function ensureDatabaseSchema(databaseUrl: string): Promise<void>;
2
+ //# sourceMappingURL=ensureDatabaseSchema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ensureDatabaseSchema.d.ts","sourceRoot":"","sources":["../../src/migrations/ensureDatabaseSchema.ts"],"names":[],"mappings":"AAmBA,wBAAsB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAqB7E"}
@@ -0,0 +1,32 @@
1
+ import pg from "pg";
2
+ import { loadMigrationSql } from "./loadSql.js";
3
+ const { Client } = pg;
4
+ async function tableExists(client, table) {
5
+ const result = await client.query(`
6
+ SELECT EXISTS (
7
+ SELECT FROM information_schema.tables
8
+ WHERE table_name = $1
9
+ );
10
+ `, [table]);
11
+ return result.rows[0]?.exists === true;
12
+ }
13
+ export async function ensureDatabaseSchema(databaseUrl) {
14
+ const client = new Client({
15
+ connectionString: databaseUrl,
16
+ });
17
+ await client.connect();
18
+ try {
19
+ // 1️⃣ Ensure pgvector extension
20
+ await client.query(`CREATE EXTENSION IF NOT EXISTS vector;`);
21
+ // 2️⃣ Check if main table exists
22
+ const exists = await tableExists(client, "rag_chunks");
23
+ if (!exists) {
24
+ const sql = loadMigrationSql("0001_init.sql");
25
+ await client.query(sql);
26
+ }
27
+ }
28
+ finally {
29
+ await client.end();
30
+ }
31
+ }
32
+ //# sourceMappingURL=ensureDatabaseSchema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ensureDatabaseSchema.js","sourceRoot":"","sources":["../../src/migrations/ensureDatabaseSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AAEtB,KAAK,UAAU,WAAW,CAAC,MAAiB,EAAE,KAAa;IACzD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAC/B;;;;;GAKD,EACC,CAAC,KAAK,CAAC,CACR,CAAC;IAEF,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;AACzC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,WAAmB;IAC5D,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC;QACxB,gBAAgB,EAAE,WAAW;KAC9B,CAAC,CAAC;IAEH,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;IAEvB,IAAI,CAAC;QACH,gCAAgC;QAChC,MAAM,MAAM,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAE7D,iCAAiC;QACjC,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QAEvD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,GAAG,GAAG,gBAAgB,CAAC,eAAe,CAAC,CAAC;YAC9C,MAAM,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,CAAC,GAAG,EAAE,CAAC;IACrB,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function loadMigrationSql(filename: string): string;
2
+ //# sourceMappingURL=loadSql.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loadSql.d.ts","sourceRoot":"","sources":["../../src/migrations/loadSql.ts"],"names":[],"mappings":"AAIA,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAOzD"}
@@ -0,0 +1,10 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ export function loadMigrationSql(filename) {
5
+ const __filename = fileURLToPath(import.meta.url);
6
+ const __dirname = path.dirname(__filename);
7
+ const sqlPath = path.join(__dirname, filename);
8
+ return fs.readFileSync(sqlPath, "utf8");
9
+ }
10
+ //# sourceMappingURL=loadSql.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loadSql.js","sourceRoot":"","sources":["../../src/migrations/loadSql.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,UAAU,gBAAgB,CAAC,QAAgB;IAC/C,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAE3C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAE/C,OAAO,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AAC1C,CAAC"}
@@ -0,0 +1,5 @@
1
+ export interface RepositorySource {
2
+ listFilest(): Promise<string[]>;
3
+ readFile(path: string): Promise<string>;
4
+ }
5
+ //# sourceMappingURL=ports.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ports.d.ts","sourceRoot":"","sources":["../src/ports.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACzC"}
package/dist/ports.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ports.js","sourceRoot":"","sources":["../src/ports.ts"],"names":[],"mappings":""}
@@ -0,0 +1,42 @@
1
+ import type { RagChunkRepository } from "./RagChunkRepository.js";
2
+ import type { ContextChunk } from "@prsense/core";
3
+ export declare class PostgresRagChunkRepository implements RagChunkRepository {
4
+ private readonly connectionString;
5
+ constructor(connectionString: string);
6
+ private withClient;
7
+ getEmbeddingColumnDimension(): Promise<number | null>;
8
+ rebuildRepository(provider: string, name: string, rows: Array<{
9
+ chunk: ContextChunk;
10
+ repoProvider: string;
11
+ repoOwner?: string;
12
+ repoName: string;
13
+ repoRef: string;
14
+ embedding: number[];
15
+ }>): Promise<void>;
16
+ deleteByRepository(provider: string, name: string): Promise<void>;
17
+ insertChunks(rows: Array<{
18
+ chunk: ContextChunk;
19
+ repoProvider: string;
20
+ repoOwner?: string;
21
+ repoName: string;
22
+ repoRef: string;
23
+ embedding: number[];
24
+ }>): Promise<void>;
25
+ searchNearest(params: {
26
+ repoProvider: string;
27
+ repoName: string;
28
+ repoRef?: string;
29
+ embedding: number[];
30
+ limit: number;
31
+ }): Promise<Array<{
32
+ id: string;
33
+ path: string;
34
+ kind: string;
35
+ language: string | null;
36
+ content: string;
37
+ lineStart: number | null;
38
+ lineEnd: number | null;
39
+ distance: number;
40
+ }>>;
41
+ }
42
+ //# sourceMappingURL=PostgresRagChunkRepository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PostgresRagChunkRepository.d.ts","sourceRoot":"","sources":["../../src/rag/PostgresRagChunkRepository.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD,qBAAa,0BAA2B,YAAW,kBAAkB;IACvD,OAAO,CAAC,QAAQ,CAAC,gBAAgB;gBAAhB,gBAAgB,EAAE,MAAM;YAEvC,UAAU;IAelB,2BAA2B,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAmBrD,iBAAiB,CACrB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,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;IAmEV,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAajE,YAAY,CAChB,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;IA6CV,aAAa,CAAC,MAAM,EAAE;QAC1B,YAAY,EAAE,MAAM,CAAC;QACrB,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,EAAE,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;KACf,GAAG,OAAO,CACT,KAAK,CAAC;QACJ,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;QACxB,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC,CACH;CAgDF"}