@prsense/workflows 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 (169) hide show
  1. package/LICENSE +201 -0
  2. package/dist/contract/ResolvedConfig.d.ts +37 -0
  3. package/dist/contract/ResolvedConfig.d.ts.map +1 -0
  4. package/dist/contract/ResolvedConfig.js +3 -0
  5. package/dist/contract/ResolvedConfig.js.map +1 -0
  6. package/dist/doctor/adaptCapability.d.ts +11 -0
  7. package/dist/doctor/adaptCapability.d.ts.map +1 -0
  8. package/dist/doctor/adaptCapability.js +35 -0
  9. package/dist/doctor/adaptCapability.js.map +1 -0
  10. package/dist/doctor/buildCapabilityContext.d.ts +3 -0
  11. package/dist/doctor/buildCapabilityContext.d.ts.map +1 -0
  12. package/dist/doctor/buildCapabilityContext.js +15 -0
  13. package/dist/doctor/buildCapabilityContext.js.map +1 -0
  14. package/dist/doctor/checks/checkEnvConfig.d.ts +3 -0
  15. package/dist/doctor/checks/checkEnvConfig.d.ts.map +1 -0
  16. package/dist/doctor/checks/checkEnvConfig.js +18 -0
  17. package/dist/doctor/checks/checkEnvConfig.js.map +1 -0
  18. package/dist/doctor/checks/checkLLM.d.ts +3 -0
  19. package/dist/doctor/checks/checkLLM.d.ts.map +1 -0
  20. package/dist/doctor/checks/checkLLM.js +46 -0
  21. package/dist/doctor/checks/checkLLM.js.map +1 -0
  22. package/dist/doctor/checks/checkRepository.d.ts +3 -0
  23. package/dist/doctor/checks/checkRepository.d.ts.map +1 -0
  24. package/dist/doctor/checks/checkRepository.js +18 -0
  25. package/dist/doctor/checks/checkRepository.js.map +1 -0
  26. package/dist/doctor/checks/checkUserConfig.d.ts +3 -0
  27. package/dist/doctor/checks/checkUserConfig.d.ts.map +1 -0
  28. package/dist/doctor/checks/checkUserConfig.js +16 -0
  29. package/dist/doctor/checks/checkUserConfig.js.map +1 -0
  30. package/dist/doctor/doctorWorkflow.d.ts +3 -0
  31. package/dist/doctor/doctorWorkflow.d.ts.map +1 -0
  32. package/dist/doctor/doctorWorkflow.js +26 -0
  33. package/dist/doctor/doctorWorkflow.js.map +1 -0
  34. package/dist/doctor/types.d.ts +26 -0
  35. package/dist/doctor/types.d.ts.map +1 -0
  36. package/dist/doctor/types.js +2 -0
  37. package/dist/doctor/types.js.map +1 -0
  38. package/dist/doctor/workflow.d.ts +8 -0
  39. package/dist/doctor/workflow.d.ts.map +1 -0
  40. package/dist/doctor/workflow.js +66 -0
  41. package/dist/doctor/workflow.js.map +1 -0
  42. package/dist/index/debug.d.ts +16 -0
  43. package/dist/index/debug.d.ts.map +1 -0
  44. package/dist/index/debug.js +2 -0
  45. package/dist/index/debug.js.map +1 -0
  46. package/dist/index/deps.d.ts +8 -0
  47. package/dist/index/deps.d.ts.map +1 -0
  48. package/dist/index/deps.js +2 -0
  49. package/dist/index/deps.js.map +1 -0
  50. package/dist/index/events.d.ts +15 -0
  51. package/dist/index/events.d.ts.map +1 -0
  52. package/dist/index/events.js +2 -0
  53. package/dist/index/events.js.map +1 -0
  54. package/dist/index/helper.d.ts +2 -0
  55. package/dist/index/helper.d.ts.map +1 -0
  56. package/dist/index/helper.js +15 -0
  57. package/dist/index/helper.js.map +1 -0
  58. package/dist/index/index.d.ts +4 -0
  59. package/dist/index/index.d.ts.map +1 -0
  60. package/dist/index/index.js +4 -0
  61. package/dist/index/index.js.map +1 -0
  62. package/dist/index/indexWorkflow.d.ts +13 -0
  63. package/dist/index/indexWorkflow.d.ts.map +1 -0
  64. package/dist/index/indexWorkflow.js +301 -0
  65. package/dist/index/indexWorkflow.js.map +1 -0
  66. package/dist/index/listIndexedRepositories.d.ts +4 -0
  67. package/dist/index/listIndexedRepositories.d.ts.map +1 -0
  68. package/dist/index/listIndexedRepositories.js +6 -0
  69. package/dist/index/listIndexedRepositories.js.map +1 -0
  70. package/dist/index/ports.d.ts +6 -0
  71. package/dist/index/ports.d.ts.map +1 -0
  72. package/dist/index/ports.js +3 -0
  73. package/dist/index/ports.js.map +1 -0
  74. package/dist/index/types.d.ts +8 -0
  75. package/dist/index/types.d.ts.map +1 -0
  76. package/dist/index/types.js +3 -0
  77. package/dist/index/types.js.map +1 -0
  78. package/dist/index.d.ts +9 -0
  79. package/dist/index.d.ts.map +1 -0
  80. package/dist/index.js +9 -0
  81. package/dist/index.js.map +1 -0
  82. package/dist/review/buildDiffEmbeddingQuery.d.ts +8 -0
  83. package/dist/review/buildDiffEmbeddingQuery.d.ts.map +1 -0
  84. package/dist/review/buildDiffEmbeddingQuery.js +43 -0
  85. package/dist/review/buildDiffEmbeddingQuery.js.map +1 -0
  86. package/dist/review/dedupeSignals.d.ts +3 -0
  87. package/dist/review/dedupeSignals.d.ts.map +1 -0
  88. package/dist/review/dedupeSignals.js +11 -0
  89. package/dist/review/dedupeSignals.js.map +1 -0
  90. package/dist/review/extractJson.d.ts +2 -0
  91. package/dist/review/extractJson.d.ts.map +1 -0
  92. package/dist/review/extractJson.js +15 -0
  93. package/dist/review/extractJson.js.map +1 -0
  94. package/dist/review/index.d.ts +4 -0
  95. package/dist/review/index.d.ts.map +1 -0
  96. package/dist/review/index.js +4 -0
  97. package/dist/review/index.js.map +1 -0
  98. package/dist/review/input/ReviewInput.d.ts +18 -0
  99. package/dist/review/input/ReviewInput.d.ts.map +1 -0
  100. package/dist/review/input/ReviewInput.js +3 -0
  101. package/dist/review/input/ReviewInput.js.map +1 -0
  102. package/dist/review/normalizeSignal.d.ts +3 -0
  103. package/dist/review/normalizeSignal.d.ts.map +1 -0
  104. package/dist/review/normalizeSignal.js +31 -0
  105. package/dist/review/normalizeSignal.js.map +1 -0
  106. package/dist/review/ports.d.ts +5 -0
  107. package/dist/review/ports.d.ts.map +1 -0
  108. package/dist/review/ports.js +3 -0
  109. package/dist/review/ports.js.map +1 -0
  110. package/dist/review/retrieveContext.d.ts +12 -0
  111. package/dist/review/retrieveContext.d.ts.map +1 -0
  112. package/dist/review/retrieveContext.js +76 -0
  113. package/dist/review/retrieveContext.js.map +1 -0
  114. package/dist/review/reviewWorkflow.d.ts +11 -0
  115. package/dist/review/reviewWorkflow.d.ts.map +1 -0
  116. package/dist/review/reviewWorkflow.js +286 -0
  117. package/dist/review/reviewWorkflow.js.map +1 -0
  118. package/dist/review/types.d.ts +14 -0
  119. package/dist/review/types.d.ts.map +1 -0
  120. package/dist/review/types.js +3 -0
  121. package/dist/review/types.js.map +1 -0
  122. package/dist/review/validateReviewOutput.d.ts +4 -0
  123. package/dist/review/validateReviewOutput.d.ts.map +1 -0
  124. package/dist/review/validateReviewOutput.js +10 -0
  125. package/dist/review/validateReviewOutput.js.map +1 -0
  126. package/dist/setup/setupWorkflow.d.ts +9 -0
  127. package/dist/setup/setupWorkflow.d.ts.map +1 -0
  128. package/dist/setup/setupWorkflow.js +81 -0
  129. package/dist/setup/setupWorkflow.js.map +1 -0
  130. package/dist/setup/types.d.ts +16 -0
  131. package/dist/setup/types.d.ts.map +1 -0
  132. package/dist/setup/types.js +2 -0
  133. package/dist/setup/types.js.map +1 -0
  134. package/dist/types/checks.d.ts +17 -0
  135. package/dist/types/checks.d.ts.map +1 -0
  136. package/dist/types/checks.js +2 -0
  137. package/dist/types/checks.js.map +1 -0
  138. package/dist/types/core.d.ts +17 -0
  139. package/dist/types/core.d.ts.map +1 -0
  140. package/dist/types/core.js +2 -0
  141. package/dist/types/core.js.map +1 -0
  142. package/dist/types/deps.d.ts +9 -0
  143. package/dist/types/deps.d.ts.map +1 -0
  144. package/dist/types/deps.js +2 -0
  145. package/dist/types/deps.js.map +1 -0
  146. package/package.json +30 -0
  147. package/src/doctor/workflow.ts +99 -0
  148. package/src/index/index.ts +3 -0
  149. package/src/index/indexWorkflow.ts +411 -0
  150. package/src/index/listIndexedRepositories.ts +11 -0
  151. package/src/index/ports.ts +8 -0
  152. package/src/index/types.ts +11 -0
  153. package/src/index.ts +13 -0
  154. package/src/review/buildDiffEmbeddingQuery.ts +66 -0
  155. package/src/review/dedupeSignals.ts +10 -0
  156. package/src/review/extractJson.ts +17 -0
  157. package/src/review/index.ts +3 -0
  158. package/src/review/input/ReviewInput.ts +22 -0
  159. package/src/review/normalizeSignal.ts +34 -0
  160. package/src/review/ports.ts +7 -0
  161. package/src/review/retrieveContext.ts +105 -0
  162. package/src/review/reviewWorkflow.ts +366 -0
  163. package/src/review/types.ts +18 -0
  164. package/src/review/validateReviewOutput.ts +13 -0
  165. package/src/setup/setupWorkflow.ts +110 -0
  166. package/src/setup/types.ts +9 -0
  167. package/src/types/core.ts +18 -0
  168. package/tsconfig.json +11 -0
  169. package/tsconfig.tsbuildinfo +1 -0
@@ -0,0 +1,66 @@
1
+ import { gitRepositoryCapability, dockerCapability, ollamaCapability, pgVectorCapability, postgresCapability, } from "@prsense/preflight";
2
+ export async function runDoctorWorkflow({ config, eventBus, }) {
3
+ eventBus.emit("workflow.doctor.started");
4
+ const ctx = {
5
+ config,
6
+ env: process.env,
7
+ cwd: process.cwd(),
8
+ };
9
+ const capabilities = [
10
+ gitRepositoryCapability,
11
+ dockerCapability,
12
+ postgresCapability,
13
+ pgVectorCapability,
14
+ ollamaCapability,
15
+ ];
16
+ const checks = [];
17
+ for (const cap of capabilities) {
18
+ eventBus.emit("doctor.capability.check.started", {
19
+ capability: cap.id,
20
+ });
21
+ const status = await cap.check(ctx);
22
+ // Skip truly irrelevant capabilities
23
+ if (status.kind === "non-applicable") {
24
+ continue;
25
+ }
26
+ let check;
27
+ switch (status.kind) {
28
+ case "ready":
29
+ check = {
30
+ id: cap.id,
31
+ label: cap.description,
32
+ status: "ok",
33
+ };
34
+ break;
35
+ case "missing":
36
+ check = {
37
+ id: cap.id,
38
+ label: cap.description,
39
+ status: "fail",
40
+ message: status.reason,
41
+ };
42
+ break;
43
+ case "partial":
44
+ check = {
45
+ id: cap.id,
46
+ label: cap.description,
47
+ status: "warn",
48
+ message: status.reason,
49
+ };
50
+ break;
51
+ }
52
+ checks.push(check);
53
+ eventBus.emit("doctor.capability.check.finished", {
54
+ capability: cap.id,
55
+ status: check.status,
56
+ });
57
+ }
58
+ const hasFailure = checks.some((c) => c.status === "fail");
59
+ eventBus.emit("workflow.doctor.finished", {
60
+ outcome: hasFailure ? "failure" : "success",
61
+ });
62
+ return {
63
+ checks,
64
+ };
65
+ }
66
+ //# sourceMappingURL=workflow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow.js","sourceRoot":"","sources":["../../src/doctor/workflow.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,EACtC,MAAM,EACN,QAAQ,GAIT;IACC,QAAQ,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IAEzC,MAAM,GAAG,GAAsB;QAC7B,MAAM;QACN,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;KACnB,CAAC;IAEF,MAAM,YAAY,GAAiB;QACjC,uBAAuB;QACvB,gBAAgB;QAChB,kBAAkB;QAClB,kBAAkB;QAClB,gBAAgB;KACjB,CAAC;IAEF,MAAM,MAAM,GAAsB,EAAE,CAAC;IAErC,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAC/B,QAAQ,CAAC,IAAI,CAAC,iCAAiC,EAAE;YAC/C,UAAU,EAAE,GAAG,CAAC,EAAE;SACnB,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAEpC,qCAAqC;QACrC,IAAI,MAAM,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;YACrC,SAAS;QACX,CAAC;QAED,IAAI,KAAsB,CAAC;QAE3B,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;YACpB,KAAK,OAAO;gBACV,KAAK,GAAG;oBACN,EAAE,EAAE,GAAG,CAAC,EAAE;oBACV,KAAK,EAAE,GAAG,CAAC,WAAW;oBACtB,MAAM,EAAE,IAAI;iBACb,CAAC;gBACF,MAAM;YAER,KAAK,SAAS;gBACZ,KAAK,GAAG;oBACN,EAAE,EAAE,GAAG,CAAC,EAAE;oBACV,KAAK,EAAE,GAAG,CAAC,WAAW;oBACtB,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE,MAAM,CAAC,MAAM;iBACvB,CAAC;gBACF,MAAM;YAER,KAAK,SAAS;gBACZ,KAAK,GAAG;oBACN,EAAE,EAAE,GAAG,CAAC,EAAE;oBACV,KAAK,EAAE,GAAG,CAAC,WAAW;oBACtB,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE,MAAM,CAAC,MAAM;iBACvB,CAAC;gBACF,MAAM;QACV,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEnB,QAAQ,CAAC,IAAI,CAAC,kCAAkC,EAAE;YAChD,UAAU,EAAE,GAAG,CAAC,EAAE;YAClB,MAAM,EAAE,KAAK,CAAC,MAAM;SACrB,CAAC,CAAC;IACL,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;IAE3D,QAAQ,CAAC,IAAI,CAAC,0BAA0B,EAAE;QACxC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;KAC5C,CAAC,CAAC;IAEH,OAAO;QACL,MAAM;KACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { IndexDebugEvent } from "./events.js";
2
+ export type IndexWorkflowDeps = {
3
+ /**
4
+ * Optional debug event sink.
5
+ * CLI prints them, daemon stores or logs them.
6
+ */
7
+ onDebugEvent?: (event: IndexDebugEvent) => void;
8
+ /**
9
+ * Environment-resolved providers.
10
+ * Workflow does not create these.
11
+ */
12
+ embeddingProvider: unknown;
13
+ vectorStore: unknown;
14
+ repositorySourceFactory: (repoPath: string) => unknown;
15
+ };
16
+ //# sourceMappingURL=debug.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../../src/index/debug.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,MAAM,MAAM,iBAAiB,GAAG;IAC9B;;;OAGG;IACH,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IAEhD;;;OAGG;IACH,iBAAiB,EAAE,OAAO,CAAC;IAC3B,WAAW,EAAE,OAAO,CAAC;IACrB,uBAAuB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;CACxD,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=debug.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug.js","sourceRoot":"","sources":["../../src/index/debug.ts"],"names":[],"mappings":""}
@@ -0,0 +1,8 @@
1
+ import type { IndexDebugEvent } from "./events.js";
2
+ export type IndexWorkflowDeps = {
3
+ repositorySourceFactory: (repoPath: string) => unknown;
4
+ embeddingProvider: unknown;
5
+ vectorStore: unknown;
6
+ onDebugEvent?: (event: IndexDebugEvent) => void;
7
+ };
8
+ //# sourceMappingURL=deps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deps.d.ts","sourceRoot":"","sources":["../../src/index/deps.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,uBAAuB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;IACvD,iBAAiB,EAAE,OAAO,CAAC;IAC3B,WAAW,EAAE,OAAO,CAAC;IAErB,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;CACjD,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=deps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deps.js","sourceRoot":"","sources":["../../src/index/deps.ts"],"names":[],"mappings":""}
@@ -0,0 +1,15 @@
1
+ export type IndexDebugEvent = {
2
+ type: "file_discovered";
3
+ path: string;
4
+ } | {
5
+ type: "chunk_created";
6
+ startLine?: number;
7
+ endLine?: number;
8
+ } | {
9
+ type: "embedding_created";
10
+ vectorSize: number;
11
+ } | {
12
+ type: "chunk_stored";
13
+ chunkId: string;
14
+ };
15
+ //# sourceMappingURL=events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/index/events.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GACvB;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACzC;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAC/D;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GACjD;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/index/events.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export declare function detectKind(file: string): "code" | "test" | "doc" | "config";
2
+ //# sourceMappingURL=helper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helper.d.ts","sourceRoot":"","sources":["../../src/index/helper.ts"],"names":[],"mappings":"AAAA,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,CAkB3E"}
@@ -0,0 +1,15 @@
1
+ export function detectKind(file) {
2
+ if (file.includes(".test.") || file.includes("__tests__")) {
3
+ return "test";
4
+ }
5
+ if (file.endsWith(".md")) {
6
+ return "doc";
7
+ }
8
+ if (file.endsWith(".json") ||
9
+ file.endsWith(".yaml") ||
10
+ file.endsWith(".yml")) {
11
+ return "config";
12
+ }
13
+ return "code";
14
+ }
15
+ //# sourceMappingURL=helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helper.js","sourceRoot":"","sources":["../../src/index/helper.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QAC1D,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IACE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;QACtB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;QACtB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EACrB,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from "./indexWorkflow.js";
2
+ export * from "./types.js";
3
+ export * from "./listIndexedRepositories.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,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,8BAA8B,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from "./indexWorkflow.js";
2
+ export * from "./types.js";
3
+ export * from "./listIndexedRepositories.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,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,8BAA8B,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { EventBus } from "@prsense/core";
2
+ import type { IndexWorkflowResult } from "./types.js";
3
+ import type { ResolvedConfig, CredentialContext } from "@prsense/config";
4
+ export declare function runIndexWorkflow({ config, credentials, target, force, dryRun, eventBus, version, }: {
5
+ config: ResolvedConfig;
6
+ credentials: CredentialContext;
7
+ target: string;
8
+ force?: boolean;
9
+ dryRun?: boolean;
10
+ eventBus: EventBus;
11
+ version: string;
12
+ }): Promise<IndexWorkflowResult>;
13
+ //# sourceMappingURL=indexWorkflow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexWorkflow.d.ts","sourceRoot":"","sources":["../../src/index/indexWorkflow.ts"],"names":[],"mappings":"AAGA,OAAO,EAAc,QAAQ,EAAgB,MAAM,eAAe,CAAC;AAWnE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAOzE,wBAAsB,gBAAgB,CAAC,EACrC,MAAM,EACN,WAAW,EACX,MAAM,EACN,KAAK,EACL,MAAM,EACN,QAAQ,EACR,OAAO,GACR,EAAE;IACD,MAAM,EAAE,cAAc,CAAC;IACvB,WAAW,EAAE,iBAAiB,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAoX/B"}
@@ -0,0 +1,301 @@
1
+ // packages/workflows/src/index/indexWorkflow.ts
2
+ import path from "node:path";
3
+ import { CoreEvents } from "@prsense/core";
4
+ import { FileSystemRepositorySource, GitHubRepositorySource, PostgresIndexMetadataRepository, GitLabRepositorySource, PostgresRagChunkRepository, createCharChunker, detectKind, detectLanguage, } from "@prsense/context";
5
+ import { createOpenAiEmbeddingClient, createOllamaEmbeddingClient, } from "@prsense/llm";
6
+ //TODO: modularise this
7
+ export async function runIndexWorkflow({ config, credentials, target, force, dryRun, eventBus, version, }) {
8
+ eventBus.emit(CoreEvents.WorkflowIndexStarted);
9
+ try {
10
+ // -------------------------------------------------
11
+ // Resolve Repository Source
12
+ // -------------------------------------------------
13
+ let repositorySource;
14
+ const isGithub = /github\.com/.test(target);
15
+ const isGitlab = /gitlab\.com/.test(target);
16
+ if (isGithub) {
17
+ const match = target.match(/github\.com\/([^\/]+)\/([^\/]+)/);
18
+ if (!match) {
19
+ throw new Error("Invalid GitHub URL");
20
+ }
21
+ const owner = match[1];
22
+ const repo = match[2];
23
+ if (!owner || !repo) {
24
+ throw new Error("Invalid GitHub repository url");
25
+ }
26
+ repositorySource = new GitHubRepositorySource(owner, repo.replace(".git", ""));
27
+ }
28
+ else if (isGitlab) {
29
+ const match = target.match(/gitlab\.com\/(.+?)\/([^\/]+)(?:\.git)?$/);
30
+ if (!match)
31
+ throw new Error("Invalid GitLab URL");
32
+ const owner = match[1];
33
+ const repo = match[2];
34
+ if (!owner || !repo)
35
+ throw new Error("Invalid GitLab repository url");
36
+ repositorySource = new GitLabRepositorySource(owner, repo.replace(".git", ""));
37
+ }
38
+ else {
39
+ const absolute = path.resolve(target);
40
+ repositorySource = new FileSystemRepositorySource(absolute);
41
+ }
42
+ // -------------------------------------------------
43
+ // Resolve Identity + Revision
44
+ // -------------------------------------------------
45
+ const identity = repositorySource.getRepositoryIdentity();
46
+ let revision;
47
+ try {
48
+ revision = await repositorySource.getRevision();
49
+ }
50
+ catch {
51
+ throw new Error("Indexing requires a git repository. Run inside a git repository.");
52
+ }
53
+ // -------------------------------------------------
54
+ // Metadata Repository
55
+ // -------------------------------------------------
56
+ const metadataRepository = new PostgresIndexMetadataRepository(config.database.url);
57
+ const chunkRepository = new PostgresRagChunkRepository(config.database.url);
58
+ const stored = await metadataRepository.load(identity.provider, identity.id);
59
+ // -------------------------------------------------
60
+ // Create Embedding Client
61
+ // -------------------------------------------------
62
+ let embeddingClient;
63
+ if (config.embeddings.provider === "openai") {
64
+ const apiKey = credentials.openai?.apiKey;
65
+ if (!apiKey) {
66
+ throw new Error("OpenAI embedding credentials missing");
67
+ }
68
+ embeddingClient = createOpenAiEmbeddingClient({
69
+ apiKey,
70
+ model: config.embeddings.model,
71
+ });
72
+ }
73
+ else {
74
+ embeddingClient = createOllamaEmbeddingClient({
75
+ model: config.embeddings.model,
76
+ });
77
+ }
78
+ const embeddingDimension = await embeddingClient.dimension();
79
+ eventBus.emit(CoreEvents.WorkflowIndexEmbeddingDimensionDetected, {
80
+ dimension: embeddingDimension,
81
+ });
82
+ const dbDimension = await chunkRepository.getEmbeddingColumnDimension();
83
+ if (dbDimension !== null && dbDimension !== embeddingDimension) {
84
+ eventBus.emit(CoreEvents.WorkflowIndexDimensionMismatch, {
85
+ dbDimension,
86
+ embeddingDimension,
87
+ });
88
+ throw new Error(`Embedding dimension mismatch: database=${dbDimension}, model=${embeddingDimension}. Recreate table or change model.`);
89
+ }
90
+ // -------------------------------------------------
91
+ // Compute Current Fingerprint
92
+ // -------------------------------------------------
93
+ const currentFingerprint = {
94
+ commitSha: revision.commitSha,
95
+ embeddingProvider: config.embeddings.provider,
96
+ embeddingModel: config.embeddings.model,
97
+ embeddingDimension,
98
+ chunkStrategy: "default",
99
+ chunkVersion: 1,
100
+ };
101
+ let rebuildRequired = false;
102
+ if (!stored) {
103
+ rebuildRequired = true;
104
+ }
105
+ else {
106
+ if (stored.revision.commitSha !== currentFingerprint.commitSha) {
107
+ rebuildRequired = true;
108
+ }
109
+ if (stored.embedding.provider !== currentFingerprint.embeddingProvider) {
110
+ rebuildRequired = true;
111
+ }
112
+ if (stored.embedding.model !== currentFingerprint.embeddingModel) {
113
+ rebuildRequired = true;
114
+ }
115
+ if (stored.chunking.strategy !== currentFingerprint.chunkStrategy) {
116
+ rebuildRequired = true;
117
+ }
118
+ if (stored.chunking.version !== currentFingerprint.chunkVersion) {
119
+ rebuildRequired = true;
120
+ }
121
+ }
122
+ // -------------------------------------------------
123
+ // Up-to-date Case
124
+ // -------------------------------------------------
125
+ if (!rebuildRequired) {
126
+ eventBus.emit(CoreEvents.WorkflowIndexUpToDate, {
127
+ commitSha: revision.commitSha,
128
+ });
129
+ eventBus.emit(CoreEvents.WorkflowIndexFinished);
130
+ return {
131
+ outcome: "success",
132
+ payload: {
133
+ chunksIndexed: 0,
134
+ commitSha: revision.commitSha,
135
+ upToDate: true,
136
+ },
137
+ };
138
+ }
139
+ // -------------------------------------------------
140
+ // Outdated Case
141
+ // -------------------------------------------------
142
+ eventBus.emit(CoreEvents.WorkflowIndexOutdated, {
143
+ commitSha: revision.commitSha,
144
+ });
145
+ if (dryRun) {
146
+ eventBus.emit(CoreEvents.WorkflowIndexFinished);
147
+ return {
148
+ outcome: "success",
149
+ payload: { chunksIndexed: 0 },
150
+ };
151
+ }
152
+ if (!force && stored) {
153
+ eventBus.emit(CoreEvents.WorkflowIndexRebuildRequired, {
154
+ reason: "index-outdated",
155
+ });
156
+ eventBus.emit(CoreEvents.WorkflowIndexFinished);
157
+ return {
158
+ outcome: "success",
159
+ payload: {
160
+ chunksIndexed: 0,
161
+ commitSha: revision.commitSha,
162
+ upToDate: false,
163
+ },
164
+ };
165
+ }
166
+ // -------------------------------------------------
167
+ // Rebuild
168
+ // -------------------------------------------------
169
+ const files = await repositorySource.listFiles();
170
+ if (files.length === 0) {
171
+ eventBus.emit(CoreEvents.WorkflowIndexFinished);
172
+ return {
173
+ outcome: "success",
174
+ payload: {
175
+ chunksIndexed: 0,
176
+ commitSha: revision.commitSha,
177
+ upToDate: false,
178
+ },
179
+ };
180
+ }
181
+ const chunker = createCharChunker({
182
+ maxChars: config.index.chunkSizeChars,
183
+ overlapChars: config.index.chunkOverlapChars,
184
+ });
185
+ const chunks = [];
186
+ for (const file of files) {
187
+ try {
188
+ const content = await repositorySource.readFile(file);
189
+ const kind = detectKind(file);
190
+ const language = detectLanguage(file);
191
+ const fileChunks = chunker.chunk({
192
+ content,
193
+ source: { kind: "file", path: file },
194
+ });
195
+ for (const chunk of fileChunks) {
196
+ const metadata = {
197
+ ...chunk.metadata,
198
+ path: file,
199
+ kind,
200
+ };
201
+ if (language !== undefined)
202
+ metadata.language = language;
203
+ chunk.metadata = metadata;
204
+ }
205
+ chunks.push(...fileChunks);
206
+ }
207
+ catch (err) {
208
+ if (err instanceof Error && err.message === "BINARY_FILE_DETECTED") {
209
+ eventBus.emit(CoreEvents.ContextFileSkipped, {
210
+ path: file,
211
+ reason: "binary",
212
+ });
213
+ continue;
214
+ }
215
+ throw err;
216
+ }
217
+ }
218
+ eventBus.emit(CoreEvents.ContextChunksBuilt, {
219
+ count: chunks.length,
220
+ });
221
+ // -------------------------------------------------
222
+ // Delete Existing Chunks (Rebuild)
223
+ // -------------------------------------------------
224
+ await chunkRepository.deleteByRepository(identity.provider, identity.id);
225
+ // -------------------------------------------------
226
+ // Embed + Persist Chunks
227
+ // -------------------------------------------------
228
+ const allRows = [];
229
+ //PERF: different batch size for openai based embedding
230
+ //PERF: multi threaded?
231
+ const BATCH_SIZE = 32;
232
+ for (let i = 0; i < chunks.length; i += BATCH_SIZE) {
233
+ const batch = chunks.slice(i, i + BATCH_SIZE);
234
+ eventBus.emit(CoreEvents.WorkflowIndexProgress, {
235
+ processed: Math.min(i + BATCH_SIZE, chunks.length),
236
+ total: chunks.length,
237
+ });
238
+ const embeddings = await embeddingClient.embed(batch.map((c) => c.content));
239
+ const rows = batch.map((chunk, idx) => {
240
+ const embedding = embeddings[idx];
241
+ if (!embedding) {
242
+ throw new Error("Embedding generation mismatch");
243
+ }
244
+ return {
245
+ chunk,
246
+ repoProvider: identity.provider,
247
+ repoName: identity.id,
248
+ repoRef: revision.commitSha,
249
+ embedding,
250
+ };
251
+ });
252
+ allRows.push(...rows);
253
+ }
254
+ await chunkRepository.rebuildRepository(identity.provider, identity.id, allRows);
255
+ await metadataRepository.save({
256
+ repository: {
257
+ provider: identity.provider,
258
+ id: identity.id,
259
+ ...(revision.defaultBranch
260
+ ? { defaultBranch: revision.defaultBranch }
261
+ : {}),
262
+ },
263
+ revision: {
264
+ commitSha: revision.commitSha,
265
+ },
266
+ embedding: {
267
+ provider: config.embeddings.provider,
268
+ model: config.embeddings.model,
269
+ dimension: embeddingDimension,
270
+ },
271
+ chunking: {
272
+ strategy: "default",
273
+ version: 1,
274
+ },
275
+ prsenseVersion: version,
276
+ createdAt: new Date().toISOString(),
277
+ });
278
+ eventBus.emit(CoreEvents.WorkflowIndexFinished);
279
+ return {
280
+ outcome: "success",
281
+ payload: {
282
+ chunksIndexed: chunks.length,
283
+ commitSha: revision.commitSha,
284
+ upToDate: false,
285
+ },
286
+ };
287
+ }
288
+ catch (err) {
289
+ const message = err instanceof Error ? err.message : String(err);
290
+ eventBus.emit(CoreEvents.WorkflowIndexFailed, {
291
+ error: message,
292
+ });
293
+ return {
294
+ outcome: "failure",
295
+ payload: {
296
+ chunksIndexed: 0,
297
+ },
298
+ };
299
+ }
300
+ }
301
+ //# sourceMappingURL=indexWorkflow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexWorkflow.js","sourceRoot":"","sources":["../../src/index/indexWorkflow.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAEhD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,UAAU,EAA0B,MAAM,eAAe,CAAC;AACnE,OAAO,EACL,0BAA0B,EAC1B,sBAAsB,EACtB,+BAA+B,EAC/B,sBAAsB,EACtB,0BAA0B,EAC1B,iBAAiB,EACjB,UAAU,EACV,cAAc,GACf,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,2BAA2B,EAC3B,2BAA2B,GAC5B,MAAM,cAAc,CAAC;AAEtB,uBAAuB;AACvB,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,EACrC,MAAM,EACN,WAAW,EACX,MAAM,EACN,KAAK,EACL,MAAM,EACN,QAAQ,EACR,OAAO,GASR;IACC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;IAE/C,IAAI,CAAC;QACH,oDAAoD;QACpD,4BAA4B;QAC5B,oDAAoD;QAEpD,IAAI,gBAAgB,CAAC;QAErB,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5C,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAE5C,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;YAE9D,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;YACxC,CAAC;YAED,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACvB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAEtB,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;gBACpB,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;YACnD,CAAC;YAED,gBAAgB,GAAG,IAAI,sBAAsB,CAC3C,KAAK,EACL,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CACzB,CAAC;QACJ,CAAC;aAAM,IAAI,QAAQ,EAAE,CAAC;YACpB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;YAEtE,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;YAElD,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACvB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;YACtE,gBAAgB,GAAG,IAAI,sBAAsB,CAC3C,KAAK,EACL,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CACzB,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACtC,gBAAgB,GAAG,IAAI,0BAA0B,CAAC,QAAQ,CAAC,CAAC;QAC9D,CAAC;QAED,oDAAoD;QACpD,8BAA8B;QAC9B,oDAAoD;QAEpD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,qBAAqB,EAAE,CAAC;QAC1D,IAAI,QAAQ,CAAC;QAEb,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,gBAAgB,CAAC,WAAW,EAAE,CAAC;QAClD,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,KAAK,CACb,kEAAkE,CACnE,CAAC;QACJ,CAAC;QAED,oDAAoD;QACpD,sBAAsB;QACtB,oDAAoD;QAEpD,MAAM,kBAAkB,GAAG,IAAI,+BAA+B,CAC5D,MAAM,CAAC,QAAQ,CAAC,GAAG,CACpB,CAAC;QAEF,MAAM,eAAe,GAAG,IAAI,0BAA0B,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAE5E,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAC1C,QAAQ,CAAC,QAAQ,EACjB,QAAQ,CAAC,EAAE,CACZ,CAAC;QAEF,oDAAoD;QACpD,0BAA0B;QAC1B,oDAAoD;QAEpD,IAAI,eAAe,CAAC;QAEpB,IAAI,MAAM,CAAC,UAAU,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC5C,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC;YAC1C,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;YAC1D,CAAC;YAED,eAAe,GAAG,2BAA2B,CAAC;gBAC5C,MAAM;gBACN,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,KAAK;aAC/B,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,eAAe,GAAG,2BAA2B,CAAC;gBAC5C,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,KAAK;aAC/B,CAAC,CAAC;QACL,CAAC;QAED,MAAM,kBAAkB,GAAG,MAAM,eAAe,CAAC,SAAS,EAAE,CAAC;QAC7D,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,uCAAuC,EAAE;YAChE,SAAS,EAAE,kBAAkB;SAC9B,CAAC,CAAC;QAEH,MAAM,WAAW,GAAG,MAAM,eAAe,CAAC,2BAA2B,EAAE,CAAC;QAExE,IAAI,WAAW,KAAK,IAAI,IAAI,WAAW,KAAK,kBAAkB,EAAE,CAAC;YAC/D,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,8BAA8B,EAAE;gBACvD,WAAW;gBACX,kBAAkB;aACnB,CAAC,CAAC;YAEH,MAAM,IAAI,KAAK,CACb,0CAA0C,WAAW,WAAW,kBAAkB,mCAAmC,CACtH,CAAC;QACJ,CAAC;QAED,oDAAoD;QACpD,8BAA8B;QAC9B,oDAAoD;QAEpD,MAAM,kBAAkB,GAAG;YACzB,SAAS,EAAE,QAAQ,CAAC,SAAS;YAC7B,iBAAiB,EAAE,MAAM,CAAC,UAAU,CAAC,QAAQ;YAC7C,cAAc,EAAE,MAAM,CAAC,UAAU,CAAC,KAAK;YACvC,kBAAkB;YAClB,aAAa,EAAE,SAAS;YACxB,YAAY,EAAE,CAAC;SAChB,CAAC;QAEF,IAAI,eAAe,GAAG,KAAK,CAAC;QAE5B,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,eAAe,GAAG,IAAI,CAAC;QACzB,CAAC;aAAM,CAAC;YACN,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,KAAK,kBAAkB,CAAC,SAAS,EAAE,CAAC;gBAC/D,eAAe,GAAG,IAAI,CAAC;YACzB,CAAC;YAED,IAAI,MAAM,CAAC,SAAS,CAAC,QAAQ,KAAK,kBAAkB,CAAC,iBAAiB,EAAE,CAAC;gBACvE,eAAe,GAAG,IAAI,CAAC;YACzB,CAAC;YAED,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,KAAK,kBAAkB,CAAC,cAAc,EAAE,CAAC;gBACjE,eAAe,GAAG,IAAI,CAAC;YACzB,CAAC;YAED,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,KAAK,kBAAkB,CAAC,aAAa,EAAE,CAAC;gBAClE,eAAe,GAAG,IAAI,CAAC;YACzB,CAAC;YAED,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,KAAK,kBAAkB,CAAC,YAAY,EAAE,CAAC;gBAChE,eAAe,GAAG,IAAI,CAAC;YACzB,CAAC;QACH,CAAC;QAED,oDAAoD;QACpD,kBAAkB;QAClB,oDAAoD;QAEpD,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,qBAAqB,EAAE;gBAC9C,SAAS,EAAE,QAAQ,CAAC,SAAS;aAC9B,CAAC,CAAC;YAEH,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC;YAEhD,OAAO;gBACL,OAAO,EAAE,SAAS;gBAClB,OAAO,EAAE;oBACP,aAAa,EAAE,CAAC;oBAChB,SAAS,EAAE,QAAQ,CAAC,SAAS;oBAC7B,QAAQ,EAAE,IAAI;iBACf;aACF,CAAC;QACJ,CAAC;QAED,oDAAoD;QACpD,gBAAgB;QAChB,oDAAoD;QAEpD,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,qBAAqB,EAAE;YAC9C,SAAS,EAAE,QAAQ,CAAC,SAAS;SAC9B,CAAC,CAAC;QAEH,IAAI,MAAM,EAAE,CAAC;YACX,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC;YAChD,OAAO;gBACL,OAAO,EAAE,SAAS;gBAClB,OAAO,EAAE,EAAE,aAAa,EAAE,CAAC,EAAE;aAC9B,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,KAAK,IAAI,MAAM,EAAE,CAAC;YACrB,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,4BAA4B,EAAE;gBACrD,MAAM,EAAE,gBAAgB;aACzB,CAAC,CAAC;YAEH,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC;YAEhD,OAAO;gBACL,OAAO,EAAE,SAAS;gBAClB,OAAO,EAAE;oBACP,aAAa,EAAE,CAAC;oBAChB,SAAS,EAAE,QAAQ,CAAC,SAAS;oBAC7B,QAAQ,EAAE,KAAK;iBAChB;aACF,CAAC;QACJ,CAAC;QAED,oDAAoD;QACpD,UAAU;QACV,oDAAoD;QAEpD,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,SAAS,EAAE,CAAC;QACjD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC;YAEhD,OAAO;gBACL,OAAO,EAAE,SAAS;gBAClB,OAAO,EAAE;oBACP,aAAa,EAAE,CAAC;oBAChB,SAAS,EAAE,QAAQ,CAAC,SAAS;oBAC7B,QAAQ,EAAE,KAAK;iBAChB;aACF,CAAC;QACJ,CAAC;QACD,MAAM,OAAO,GAAG,iBAAiB,CAAC;YAChC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,cAAc;YACrC,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,iBAAiB;SAC7C,CAAC,CAAC;QAEH,MAAM,MAAM,GAAmB,EAAE,CAAC;QAClC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACtD,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;gBAC9B,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;gBAEtC,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC;oBAC/B,OAAO;oBACP,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE;iBACrC,CAAC,CAAC;gBAEH,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;oBAC/B,MAAM,QAAQ,GAA0B;wBACtC,GAAG,KAAK,CAAC,QAAQ;wBACjB,IAAI,EAAE,IAAI;wBACV,IAAI;qBACL,CAAC;oBACF,IAAI,QAAQ,KAAK,SAAS;wBAAE,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC;oBACzD,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;gBAC5B,CAAC;gBAED,MAAM,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC;YAC7B,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,OAAO,KAAK,sBAAsB,EAAE,CAAC;oBACnE,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,kBAAkB,EAAE;wBAC3C,IAAI,EAAE,IAAI;wBACV,MAAM,EAAE,QAAQ;qBACjB,CAAC,CAAC;oBACH,SAAS;gBACX,CAAC;gBAED,MAAM,GAAG,CAAC;YACZ,CAAC;QACH,CAAC;QAED,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,kBAAkB,EAAE;YAC3C,KAAK,EAAE,MAAM,CAAC,MAAM;SACrB,CAAC,CAAC;QAEH,oDAAoD;QACpD,mCAAmC;QACnC,oDAAoD;QAEpD,MAAM,eAAe,CAAC,kBAAkB,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;QAEzE,oDAAoD;QACpD,yBAAyB;QACzB,oDAAoD;QAEpD,MAAM,OAAO,GAAG,EAAE,CAAC;QAEnB,uDAAuD;QACvD,uBAAuB;QACvB,MAAM,UAAU,GAAG,EAAE,CAAC;QAEtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,UAAU,EAAE,CAAC;YACnD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC;YAE9C,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,qBAAqB,EAAE;gBAC9C,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC;gBAClD,KAAK,EAAE,MAAM,CAAC,MAAM;aACrB,CAAC,CAAC;YAEH,MAAM,UAAU,GAAG,MAAM,eAAe,CAAC,KAAK,CAC5C,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAC5B,CAAC;YAEF,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;gBACpC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;gBAElC,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;gBACnD,CAAC;gBACD,OAAO;oBACL,KAAK;oBACL,YAAY,EAAE,QAAQ,CAAC,QAAQ;oBAC/B,QAAQ,EAAE,QAAQ,CAAC,EAAE;oBACrB,OAAO,EAAE,QAAQ,CAAC,SAAS;oBAC3B,SAAS;iBACV,CAAC;YACJ,CAAC,CAAC,CAAC;YAEH,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QACxB,CAAC;QAED,MAAM,eAAe,CAAC,iBAAiB,CACrC,QAAQ,CAAC,QAAQ,EACjB,QAAQ,CAAC,EAAE,EACX,OAAO,CACR,CAAC;QACF,MAAM,kBAAkB,CAAC,IAAI,CAAC;YAC5B,UAAU,EAAE;gBACV,QAAQ,EAAE,QAAQ,CAAC,QAAQ;gBAC3B,EAAE,EAAE,QAAQ,CAAC,EAAE;gBACf,GAAG,CAAC,QAAQ,CAAC,aAAa;oBACxB,CAAC,CAAC,EAAE,aAAa,EAAE,QAAQ,CAAC,aAAa,EAAE;oBAC3C,CAAC,CAAC,EAAE,CAAC;aACR;YACD,QAAQ,EAAE;gBACR,SAAS,EAAE,QAAQ,CAAC,SAAS;aAC9B;YACD,SAAS,EAAE;gBACT,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,QAAQ;gBACpC,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,KAAK;gBAC9B,SAAS,EAAE,kBAAkB;aAC9B;YACD,QAAQ,EAAE;gBACR,QAAQ,EAAE,SAAS;gBACnB,OAAO,EAAE,CAAC;aACX;YACD,cAAc,EAAE,OAAO;YACvB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC,CAAC;QAEH,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC;QAEhD,OAAO;YACL,OAAO,EAAE,SAAS;YAClB,OAAO,EAAE;gBACP,aAAa,EAAE,MAAM,CAAC,MAAM;gBAC5B,SAAS,EAAE,QAAQ,CAAC,SAAS;gBAC7B,QAAQ,EAAE,KAAK;aAChB;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAEjE,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,mBAAmB,EAAE;YAC5C,KAAK,EAAE,OAAO;SACf,CAAC,CAAC;QAEH,OAAO;YACL,OAAO,EAAE,SAAS;YAClB,OAAO,EAAE;gBACP,aAAa,EAAE,CAAC;aACjB;SACF,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { ResolvedConfig } from "@prsense/config";
2
+ import type { IndexedRepository } from "@prsense/core";
3
+ export declare function listIndexedRepositories(config: ResolvedConfig): Promise<IndexedRepository[]>;
4
+ //# sourceMappingURL=listIndexedRepositories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listIndexedRepositories.d.ts","sourceRoot":"","sources":["../../src/index/listIndexedRepositories.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAEvD,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAI9B"}
@@ -0,0 +1,6 @@
1
+ import { PostgresIndexMetadataRepository } from "@prsense/context";
2
+ export async function listIndexedRepositories(config) {
3
+ const repo = new PostgresIndexMetadataRepository(config.database.url);
4
+ return repo.list();
5
+ }
6
+ //# sourceMappingURL=listIndexedRepositories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listIndexedRepositories.js","sourceRoot":"","sources":["../../src/index/listIndexedRepositories.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,+BAA+B,EAAE,MAAM,kBAAkB,CAAC;AAGnE,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,MAAsB;IAEtB,MAAM,IAAI,GAAG,IAAI,+BAA+B,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAEtE,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;AACrB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { ContextChunk } from "@prsense/core";
2
+ export interface ContextIndexer {
3
+ buildChunks(): Promise<ContextChunk[]>;
4
+ persistChunks(chunks: ContextChunk[]): Promise<void>;
5
+ }
6
+ //# sourceMappingURL=ports.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ports.d.ts","sourceRoot":"","sources":["../../src/index/ports.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD,MAAM,WAAW,cAAc;IAC7B,WAAW,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IACvC,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACtD"}
@@ -0,0 +1,3 @@
1
+ // packages/workflows/src/index/ports.ts
2
+ export {};
3
+ //# sourceMappingURL=ports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ports.js","sourceRoot":"","sources":["../../src/index/ports.ts"],"names":[],"mappings":"AAAA,wCAAwC"}
@@ -0,0 +1,8 @@
1
+ import { WorkflowResult } from "../types/core.js";
2
+ export type IndexPayload = {
3
+ chunksIndexed: number;
4
+ commitSha?: string;
5
+ upToDate?: boolean;
6
+ };
7
+ export type IndexWorkflowResult = WorkflowResult<IndexPayload>;
8
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/index/types.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,MAAM,MAAM,YAAY,GAAG;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,cAAc,CAAC,YAAY,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ // packages/workflows/src/index/types.ts
2
+ export {};
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/index/types.ts"],"names":[],"mappings":"AAAA,wCAAwC"}
@@ -0,0 +1,9 @@
1
+ export * from "./doctor/workflow.js";
2
+ export * from "./index/index.js";
3
+ export * from "./index/indexWorkflow.js";
4
+ export * from "./review/types.js";
5
+ export * from "./setup/types.js";
6
+ export * from "./setup/setupWorkflow.js";
7
+ export * from "./types/core.js";
8
+ export * from "./review/index.js";
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AAErC,cAAc,kBAAkB,CAAC;AACjC,cAAc,0BAA0B,CAAC;AAEzC,cAAc,mBAAmB,CAAC;AAElC,cAAc,kBAAkB,CAAC;AACjC,cAAc,0BAA0B,CAAC;AAEzC,cAAc,iBAAiB,CAAC;AAEhC,cAAc,mBAAmB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,9 @@
1
+ export * from "./doctor/workflow.js";
2
+ export * from "./index/index.js";
3
+ export * from "./index/indexWorkflow.js";
4
+ export * from "./review/types.js";
5
+ export * from "./setup/types.js";
6
+ export * from "./setup/setupWorkflow.js";
7
+ export * from "./types/core.js";
8
+ export * from "./review/index.js";
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AAErC,cAAc,kBAAkB,CAAC;AACjC,cAAc,0BAA0B,CAAC;AAEzC,cAAc,mBAAmB,CAAC;AAElC,cAAc,kBAAkB,CAAC;AACjC,cAAc,0BAA0B,CAAC;AAEzC,cAAc,iBAAiB,CAAC;AAEhC,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { UnifiedDiff } from "@prsense/core";
2
+ export declare function buildDiffEmbeddingQuery(params: {
3
+ diff: UnifiedDiff;
4
+ title?: string;
5
+ description?: string;
6
+ maxChars?: number;
7
+ }): string;
8
+ //# sourceMappingURL=buildDiffEmbeddingQuery.d.ts.map