@ariso-ai/ivan 1.0.24 → 1.0.26

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 (189) hide show
  1. package/.github/workflows/ivanagent.yml +1 -1
  2. package/README.md +29 -0
  3. package/dist/database/migration.d.ts +3 -2
  4. package/dist/database/migration.d.ts.map +1 -1
  5. package/dist/database/migration.js +4 -2
  6. package/dist/database/migration.js.map +1 -1
  7. package/dist/database/migrations/015_create_learnings_tables.d.ts +3 -0
  8. package/dist/database/migrations/015_create_learnings_tables.d.ts.map +1 -0
  9. package/dist/database/migrations/015_create_learnings_tables.js +32 -0
  10. package/dist/database/migrations/015_create_learnings_tables.js.map +1 -0
  11. package/dist/database/migrations/016_create_reviews_table.d.ts +3 -0
  12. package/dist/database/migrations/016_create_reviews_table.d.ts.map +1 -0
  13. package/dist/database/migrations/016_create_reviews_table.js +19 -0
  14. package/dist/database/migrations/016_create_reviews_table.js.map +1 -0
  15. package/dist/database/migrations/index.d.ts +1 -0
  16. package/dist/database/migrations/index.d.ts.map +1 -1
  17. package/dist/database/migrations/index.js +2 -0
  18. package/dist/database/migrations/index.js.map +1 -1
  19. package/dist/database/types.d.ts +1 -1
  20. package/dist/database/types.d.ts.map +1 -1
  21. package/dist/database.d.ts +1 -1
  22. package/dist/database.d.ts.map +1 -1
  23. package/dist/index.js +13 -5
  24. package/dist/index.js.map +1 -1
  25. package/dist/learnings/builder.d.ts +25 -0
  26. package/dist/learnings/builder.d.ts.map +1 -0
  27. package/dist/learnings/builder.js +247 -0
  28. package/dist/learnings/builder.js.map +1 -0
  29. package/dist/learnings/database.d.ts +45 -0
  30. package/dist/learnings/database.d.ts.map +1 -0
  31. package/dist/learnings/database.js +63 -0
  32. package/dist/learnings/database.js.map +1 -0
  33. package/dist/learnings/embeddings.d.ts +20 -0
  34. package/dist/learnings/embeddings.d.ts.map +1 -0
  35. package/dist/learnings/embeddings.js +54 -0
  36. package/dist/learnings/embeddings.js.map +1 -0
  37. package/dist/learnings/evidence-writer.d.ts +13 -0
  38. package/dist/learnings/evidence-writer.d.ts.map +1 -0
  39. package/dist/learnings/evidence-writer.js +182 -0
  40. package/dist/learnings/evidence-writer.js.map +1 -0
  41. package/dist/learnings/extractor.d.ts +32 -0
  42. package/dist/learnings/extractor.d.ts.map +1 -0
  43. package/dist/learnings/extractor.js +265 -0
  44. package/dist/learnings/extractor.js.map +1 -0
  45. package/dist/learnings/github-evidence.d.ts +89 -0
  46. package/dist/learnings/github-evidence.d.ts.map +1 -0
  47. package/dist/learnings/github-evidence.js +255 -0
  48. package/dist/learnings/github-evidence.js.map +1 -0
  49. package/dist/learnings/github-ingestion.d.ts +18 -0
  50. package/dist/learnings/github-ingestion.d.ts.map +1 -0
  51. package/dist/learnings/github-ingestion.js +29 -0
  52. package/dist/learnings/github-ingestion.js.map +1 -0
  53. package/dist/learnings/heuristics.d.ts +17 -0
  54. package/dist/learnings/heuristics.d.ts.map +1 -0
  55. package/dist/learnings/heuristics.js +52 -0
  56. package/dist/learnings/heuristics.js.map +1 -0
  57. package/dist/learnings/id.d.ts +11 -0
  58. package/dist/learnings/id.d.ts.map +1 -0
  59. package/dist/learnings/id.js +36 -0
  60. package/dist/learnings/id.js.map +1 -0
  61. package/dist/learnings/index.d.ts +9 -0
  62. package/dist/learnings/index.d.ts.map +1 -0
  63. package/dist/learnings/index.js +55 -0
  64. package/dist/learnings/index.js.map +1 -0
  65. package/dist/learnings/ingest-pr-command.d.ts +8 -0
  66. package/dist/learnings/ingest-pr-command.d.ts.map +1 -0
  67. package/dist/learnings/ingest-pr-command.js +15 -0
  68. package/dist/learnings/ingest-pr-command.js.map +1 -0
  69. package/dist/learnings/ingest-repo-command.d.ts +9 -0
  70. package/dist/learnings/ingest-repo-command.d.ts.map +1 -0
  71. package/dist/learnings/ingest-repo-command.js +62 -0
  72. package/dist/learnings/ingest-repo-command.js.map +1 -0
  73. package/dist/learnings/init-command.d.ts +15 -0
  74. package/dist/learnings/init-command.d.ts.map +1 -0
  75. package/dist/learnings/init-command.js +36 -0
  76. package/dist/learnings/init-command.js.map +1 -0
  77. package/dist/learnings/install-hooks-command.d.ts +17 -0
  78. package/dist/learnings/install-hooks-command.d.ts.map +1 -0
  79. package/dist/learnings/install-hooks-command.js +241 -0
  80. package/dist/learnings/install-hooks-command.js.map +1 -0
  81. package/dist/learnings/learning-writer.d.ts +6 -0
  82. package/dist/learnings/learning-writer.d.ts.map +1 -0
  83. package/dist/learnings/learning-writer.js +42 -0
  84. package/dist/learnings/learning-writer.js.map +1 -0
  85. package/dist/learnings/parser.d.ts +12 -0
  86. package/dist/learnings/parser.d.ts.map +1 -0
  87. package/dist/learnings/parser.js +133 -0
  88. package/dist/learnings/parser.js.map +1 -0
  89. package/dist/learnings/paths.d.ts +6 -0
  90. package/dist/learnings/paths.d.ts.map +1 -0
  91. package/dist/learnings/paths.js +11 -0
  92. package/dist/learnings/paths.js.map +1 -0
  93. package/dist/learnings/query-command.d.ts +9 -0
  94. package/dist/learnings/query-command.d.ts.map +1 -0
  95. package/dist/learnings/query-command.js +37 -0
  96. package/dist/learnings/query-command.js.map +1 -0
  97. package/dist/learnings/query.d.ts +7 -0
  98. package/dist/learnings/query.d.ts.map +1 -0
  99. package/dist/learnings/query.js +65 -0
  100. package/dist/learnings/query.js.map +1 -0
  101. package/dist/learnings/rebuild-command.d.ts +8 -0
  102. package/dist/learnings/rebuild-command.d.ts.map +1 -0
  103. package/dist/learnings/rebuild-command.js +16 -0
  104. package/dist/learnings/rebuild-command.js.map +1 -0
  105. package/dist/learnings/record-types.d.ts +98 -0
  106. package/dist/learnings/record-types.d.ts.map +1 -0
  107. package/dist/learnings/record-types.js +5 -0
  108. package/dist/learnings/record-types.js.map +1 -0
  109. package/dist/learnings/repository.d.ts +18 -0
  110. package/dist/learnings/repository.d.ts.map +1 -0
  111. package/dist/learnings/repository.js +73 -0
  112. package/dist/learnings/repository.js.map +1 -0
  113. package/dist/learnings/types.d.ts +17 -0
  114. package/dist/learnings/types.d.ts.map +1 -0
  115. package/dist/learnings/types.js +4 -0
  116. package/dist/learnings/types.js.map +1 -0
  117. package/dist/learnings/validator.d.ts +14 -0
  118. package/dist/learnings/validator.d.ts.map +1 -0
  119. package/dist/learnings/validator.js +44 -0
  120. package/dist/learnings/validator.js.map +1 -0
  121. package/dist/learnings/weighting.d.ts +33 -0
  122. package/dist/learnings/weighting.d.ts.map +1 -0
  123. package/dist/learnings/weighting.js +106 -0
  124. package/dist/learnings/weighting.js.map +1 -0
  125. package/dist/services/address-executor.d.ts +0 -1
  126. package/dist/services/address-executor.d.ts.map +1 -1
  127. package/dist/services/address-executor.js +1 -4
  128. package/dist/services/address-executor.js.map +1 -1
  129. package/dist/services/address-task-executor.d.ts +0 -1
  130. package/dist/services/address-task-executor.d.ts.map +1 -1
  131. package/dist/services/address-task-executor.js +18 -14
  132. package/dist/services/address-task-executor.js.map +1 -1
  133. package/dist/services/claude-cli-executor.d.ts +1 -1
  134. package/dist/services/claude-cli-executor.d.ts.map +1 -1
  135. package/dist/services/claude-executor.d.ts +1 -1
  136. package/dist/services/claude-executor.d.ts.map +1 -1
  137. package/dist/services/claude-executor.js +2 -2
  138. package/dist/services/claude-executor.js.map +1 -1
  139. package/dist/services/git-interfaces.d.ts +3 -3
  140. package/dist/services/git-interfaces.d.ts.map +1 -1
  141. package/dist/services/git-manager-cli.d.ts +1 -1
  142. package/dist/services/git-manager-cli.d.ts.map +1 -1
  143. package/dist/services/git-manager-cli.js +36 -13
  144. package/dist/services/git-manager-cli.js.map +1 -1
  145. package/dist/services/git-manager-pat.d.ts +2 -2
  146. package/dist/services/git-manager-pat.d.ts.map +1 -1
  147. package/dist/services/git-manager-pat.js +31 -8
  148. package/dist/services/git-manager-pat.js.map +1 -1
  149. package/dist/services/github-api-client.d.ts +39 -3
  150. package/dist/services/github-api-client.d.ts.map +1 -1
  151. package/dist/services/github-api-client.js +76 -8
  152. package/dist/services/github-api-client.js.map +1 -1
  153. package/dist/services/index.d.ts +2 -1
  154. package/dist/services/index.d.ts.map +1 -1
  155. package/dist/services/index.js.map +1 -1
  156. package/dist/services/job-manager.d.ts +1 -1
  157. package/dist/services/job-manager.d.ts.map +1 -1
  158. package/dist/services/job-manager.js.map +1 -1
  159. package/dist/services/openai-service.d.ts +1 -0
  160. package/dist/services/openai-service.d.ts.map +1 -1
  161. package/dist/services/openai-service.js +54 -0
  162. package/dist/services/openai-service.js.map +1 -1
  163. package/dist/services/pr-service-cli.d.ts +1 -1
  164. package/dist/services/pr-service-cli.d.ts.map +1 -1
  165. package/dist/services/pr-service-pat.d.ts +1 -1
  166. package/dist/services/pr-service-pat.d.ts.map +1 -1
  167. package/dist/services/pr-service-pat.js +2 -2
  168. package/dist/services/pr-service-pat.js.map +1 -1
  169. package/dist/services/repository-manager-cli.d.ts +1 -1
  170. package/dist/services/repository-manager-cli.d.ts.map +1 -1
  171. package/dist/services/repository-manager-cli.js.map +1 -1
  172. package/dist/services/repository-manager-pat.d.ts +3 -3
  173. package/dist/services/repository-manager-pat.d.ts.map +1 -1
  174. package/dist/services/repository-manager-pat.js.map +1 -1
  175. package/dist/services/review-executor.d.ts +8 -0
  176. package/dist/services/review-executor.d.ts.map +1 -0
  177. package/dist/services/review-executor.js +159 -0
  178. package/dist/services/review-executor.js.map +1 -0
  179. package/dist/services/service-factory.d.ts +1 -1
  180. package/dist/services/service-factory.d.ts.map +1 -1
  181. package/dist/services/task-executor.d.ts +3 -2
  182. package/dist/services/task-executor.d.ts.map +1 -1
  183. package/dist/services/task-executor.js +54 -13
  184. package/dist/services/task-executor.js.map +1 -1
  185. package/dist/types/non-interactive-config.d.ts +5 -0
  186. package/dist/types/non-interactive-config.d.ts.map +1 -1
  187. package/dist/web-server.d.ts.map +1 -1
  188. package/dist/web-server.js.map +1 -1
  189. package/package.json +7 -5
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evidence-writer.js","sourceRoot":"","sources":["../../src/learnings/evidence-writer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import type { LearningsBuildResult } from './builder.js';
2
+ import type { EvidenceSignal, EvidenceContextCache, LearningRecord } from './record-types.js';
3
+ export interface ExtractionResult {
4
+ writtenLearningCount: number;
5
+ writtenPaths: string[];
6
+ rebuild: LearningsBuildResult;
7
+ }
8
+ /**
9
+ * Extracts actionable learning records from evidence via the OpenAI API.
10
+ * Holds the OpenAI client as an instance field, following the codebase's
11
+ * class-based service pattern (matching PromptRewriter, OpenAIService, etc.).
12
+ */
13
+ export declare class LearningsExtractor {
14
+ private client;
15
+ private getClient;
16
+ /**
17
+ * Runs the full extract pipeline for a repo: calls the LLM on the provided signals,
18
+ * writes learning records to JSONL, and rebuilds the SQLite index.
19
+ */
20
+ extractLearningsFromEvidence(repoPath: string, signals: EvidenceSignal[], contextCache: EvidenceContextCache): Promise<ExtractionResult>;
21
+ /**
22
+ * Pre-filters evidence through cheap gates, then batches survivors to the LLM.
23
+ * Returns records sorted by id for deterministic JSONL output.
24
+ */
25
+ extractLearningRecords(signals: EvidenceSignal[], contextCache: EvidenceContextCache): Promise<LearningRecord[]>;
26
+ private extractBatch;
27
+ }
28
+ /** Runs the full extract pipeline using the shared extractor instance. */
29
+ export declare function extractLearningsFromEvidence(repoPath: string, signals: EvidenceSignal[], contextCache: EvidenceContextCache): Promise<ExtractionResult>;
30
+ /** Extracts learning records from evidence using the shared extractor instance. */
31
+ export declare function extractLearningRecords(signals: EvidenceSignal[], contextCache: EvidenceContextCache): Promise<LearningRecord[]>;
32
+ //# sourceMappingURL=extractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extractor.d.ts","sourceRoot":"","sources":["../../src/learnings/extractor.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAKzD,OAAO,KAAK,EACV,cAAc,EACd,oBAAoB,EACpB,cAAc,EACf,MAAM,mBAAmB,CAAC;AAM3B,MAAM,WAAW,gBAAgB;IAC/B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,EAAE,oBAAoB,CAAC;CAC/B;AAgID;;;;GAIG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAuB;IAErC,OAAO,CAAC,SAAS;IAKjB;;;OAGG;IACG,4BAA4B,CAChC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,cAAc,EAAE,EACzB,YAAY,EAAE,oBAAoB,GACjC,OAAO,CAAC,gBAAgB,CAAC;IAqB5B;;;OAGG;IACG,sBAAsB,CAC1B,OAAO,EAAE,cAAc,EAAE,EACzB,YAAY,EAAE,oBAAoB,GACjC,OAAO,CAAC,cAAc,EAAE,CAAC;YAad,YAAY;CAuF3B;AAKD,0EAA0E;AAC1E,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,cAAc,EAAE,EACzB,YAAY,EAAE,oBAAoB,GACjC,OAAO,CAAC,gBAAgB,CAAC,CAM3B;AAED,mFAAmF;AACnF,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,cAAc,EAAE,EACzB,YAAY,EAAE,oBAAoB,GACjC,OAAO,CAAC,cAAc,EAAE,CAAC,CAE3B"}
@@ -0,0 +1,265 @@
1
+ // Converts raw evidence signals into actionable learning records via LLM extraction.
2
+ // Pipeline: cheap pre-filter gates -> batch to GPT-4o-mini -> parse structured JSON output.
3
+ import OpenAI from 'openai';
4
+ import { rebuildLearningsDatabase } from './builder.js';
5
+ import { createDeterministicId } from './id.js';
6
+ import { writeLearningRecords } from './learning-writer.js';
7
+ import { LESSONS_JSONL_RELATIVE_PATH } from './paths.js';
8
+ import { ensureLearningsDirectories, resolveLearningsRepositoryContext } from './repository.js';
9
+ const BATCH_SIZE = 15;
10
+ /**
11
+ * JSON Schema passed to OpenAI structured outputs (strict: true).
12
+ * The model is constrained to emit exactly this shape -- no runtime type-guards needed below.
13
+ * rationale / applicability are nullable so the model can omit them cleanly.
14
+ */
15
+ const EXTRACTION_SCHEMA = {
16
+ type: 'object',
17
+ properties: {
18
+ items: {
19
+ type: 'array',
20
+ items: {
21
+ type: 'object',
22
+ properties: {
23
+ evidence_id: { type: 'string' },
24
+ lesson: {
25
+ anyOf: [
26
+ { type: 'null' },
27
+ {
28
+ type: 'object',
29
+ properties: {
30
+ statement: { type: 'string' },
31
+ kind: {
32
+ type: 'string',
33
+ enum: ['repo_convention', 'engineering_lesson']
34
+ },
35
+ confidence: { type: 'number' },
36
+ rationale: { anyOf: [{ type: 'null' }, { type: 'string' }] },
37
+ applicability: {
38
+ anyOf: [{ type: 'null' }, { type: 'string' }]
39
+ }
40
+ },
41
+ required: [
42
+ 'statement',
43
+ 'kind',
44
+ 'confidence',
45
+ 'rationale',
46
+ 'applicability'
47
+ ],
48
+ additionalProperties: false
49
+ }
50
+ ]
51
+ }
52
+ },
53
+ required: ['evidence_id', 'lesson'],
54
+ additionalProperties: false
55
+ }
56
+ }
57
+ },
58
+ required: ['items'],
59
+ additionalProperties: false
60
+ };
61
+ const EXTRACTION_SYSTEM_PROMPT = `\
62
+ You are an expert at extracting actionable engineering lessons from GitHub PR review feedback.
63
+
64
+ For each piece of evidence, determine if it contains a reusable engineering lesson worth preserving.
65
+ If yes, distill it into a single imperative statement. If no, output null.
66
+
67
+ ## Rewriting guidelines
68
+
69
+ Transform common review phrasings into clear imperatives:
70
+
71
+ | Input pattern | Output form |
72
+ |------------------------------------------------------|-----------------------------------|
73
+ | "I think X would be nice [as we Y]" | "Consider X [as we Y]" |
74
+ | "I recommend X" / "I'd recommend X" | X |
75
+ | "I think X" | X |
76
+ | "Can we X?" / "Could we X?" | X |
77
+ | "Needs to X" / "Need to X" | X |
78
+ | "avoid X" / "prefer X" / "use X" / "ensure X" | keep as-is (already imperative) |
79
+ | "btw I moved this here because Y" | "Keep this here because Y" |
80
+ | "This is a bit odd, we shouldn't have X" | "Do not have X" |
81
+ | "Also fixes X" / "Good catch, X" | X |
82
+
83
+ If the evidence contains **bold-emphasized** text, prefer that as the statement before extracting from prose.
84
+ Write statements in sentence case (capitalise the first word only).
85
+
86
+ ## Return null for
87
+
88
+ - Bot boilerplate: walkthrough summaries, "Actionable comments posted:", "Reviews paused", "Thanks for using CodeRabbit"
89
+ - PR metadata lines: "PR #42:", "Before Rewrite:", "After Rewrite:", "Verify DB after...", "Changed files:"
90
+ - Content under 8 words or consisting of a single severity label (Minor, Major, Nitpick, Trivial, Critical)
91
+ - Pure questions with no extractable answer
92
+ - Content that only corrects formatting, whitespace, or spelling
93
+ - Auto-generated checklist items
94
+
95
+ ## Classification (kind)
96
+
97
+ "repo_convention" -- statement references project-specific tools or patterns:
98
+ ivan, claude, hook, prompt, CLI, command, settings, GitHub workflow, worktree
99
+
100
+ "engineering_lesson" -- general software engineering patterns applicable beyond this repo.
101
+
102
+ ## Confidence
103
+
104
+ Derive from the provided weight (integer 1-12); clamp result to [0.35, 0.95]:
105
+ weight 6+ -> 0.85-0.95
106
+ weight 4-5 -> 0.65-0.80
107
+ weight 3 -> 0.50-0.60
108
+
109
+ Return one item per evidence item in the same order as the input.
110
+ Set lesson to null when the evidence is not worth a lesson.
111
+ Set rationale and applicability to null when not applicable.
112
+
113
+ Some evidence items include a "diff context" block showing the code change being discussed.
114
+ Use this context to understand what specific code pattern the reviewer is commenting on.`;
115
+ /**
116
+ * Extracts actionable learning records from evidence via the OpenAI API.
117
+ * Holds the OpenAI client as an instance field, following the codebase's
118
+ * class-based service pattern (matching PromptRewriter, OpenAIService, etc.).
119
+ */
120
+ export class LearningsExtractor {
121
+ client = null;
122
+ getClient() {
123
+ if (!this.client)
124
+ this.client = new OpenAI();
125
+ return this.client;
126
+ }
127
+ /**
128
+ * Runs the full extract pipeline for a repo: calls the LLM on the provided signals,
129
+ * writes learning records to JSONL, and rebuilds the SQLite index.
130
+ */
131
+ async extractLearningsFromEvidence(repoPath, signals, contextCache) {
132
+ const context = resolveLearningsRepositoryContext(repoPath);
133
+ ensureLearningsDirectories(context);
134
+ const extractedRecords = await this.extractLearningRecords(signals, contextCache);
135
+ const writtenPaths = writeLearningRecords(context.repoPath, extractedRecords);
136
+ const rebuild = await rebuildLearningsDatabase(context.repoPath);
137
+ return {
138
+ writtenLearningCount: extractedRecords.length,
139
+ writtenPaths,
140
+ rebuild
141
+ };
142
+ }
143
+ /**
144
+ * Pre-filters evidence through cheap gates, then batches survivors to the LLM.
145
+ * Returns records sorted by id for deterministic JSONL output.
146
+ */
147
+ async extractLearningRecords(signals, contextCache) {
148
+ const eligible = signals.filter(isEligibleForExtraction);
149
+ if (eligible.length === 0)
150
+ return [];
151
+ const all = [];
152
+ for (let i = 0; i < eligible.length; i += BATCH_SIZE) {
153
+ const batch = eligible.slice(i, i + BATCH_SIZE);
154
+ all.push(...(await this.extractBatch(batch, contextCache)));
155
+ }
156
+ return all.sort((a, b) => a.id.localeCompare(b.id));
157
+ }
158
+ async extractBatch(batch, contextCache) {
159
+ const userContent = batch
160
+ .map((signal, i) => {
161
+ const ctx = contextCache.get(signal.id);
162
+ return [
163
+ `## Evidence ${i + 1}`,
164
+ `evidence_id: ${signal.id}`,
165
+ `source_type: ${signal.source_type}`,
166
+ `weight: ${signal.final_weight ?? signal.base_weight ?? 0}`,
167
+ `author: ${signal.author_name ?? 'unknown'}`,
168
+ ctx?.title != null ? `title: ${ctx.title}` : null,
169
+ ctx?.file_path != null ? `file: ${ctx.file_path}` : null,
170
+ ctx?.diff_hunk != null
171
+ ? `\ndiff context:\n\`\`\`\n${ctx.diff_hunk}\n\`\`\``
172
+ : null,
173
+ ctx?.content != null ? `\n${ctx.content}` : '\n[content unavailable]'
174
+ ]
175
+ .filter(Boolean)
176
+ .join('\n');
177
+ })
178
+ .join('\n\n---\n\n');
179
+ const response = await this.getClient().chat.completions.create({
180
+ model: 'gpt-4o-mini',
181
+ response_format: {
182
+ type: 'json_schema',
183
+ json_schema: {
184
+ name: 'lesson_extraction',
185
+ strict: true,
186
+ schema: EXTRACTION_SCHEMA
187
+ }
188
+ },
189
+ messages: [
190
+ { role: 'system', content: EXTRACTION_SYSTEM_PROMPT },
191
+ { role: 'user', content: userContent }
192
+ ]
193
+ });
194
+ let extraction;
195
+ try {
196
+ extraction = JSON.parse(response.choices[0]?.message?.content ?? '{"items":[]}');
197
+ }
198
+ catch {
199
+ return [];
200
+ }
201
+ const now = new Date().toISOString();
202
+ const results = [];
203
+ for (const item of extraction.items) {
204
+ if (!item.lesson)
205
+ continue;
206
+ const evidence = batch.find((ev) => ev.id === item.evidence_id);
207
+ if (!evidence)
208
+ continue;
209
+ const { statement, kind, confidence, rationale, applicability } = item.lesson;
210
+ const trimmed = statement.trim();
211
+ if (trimmed.length < 4)
212
+ continue;
213
+ results.push({
214
+ type: 'learning',
215
+ sourcePath: LESSONS_JSONL_RELATIVE_PATH,
216
+ id: createDeterministicId('lrn', evidence.id, trimmed),
217
+ kind,
218
+ source_type: 'github_pr_discourse',
219
+ source_url: evidence.parent_url ?? evidence.external_url,
220
+ statement: trimmed,
221
+ title: trimmed.length <= 72
222
+ ? trimmed
223
+ : `${trimmed.slice(0, 69).trimEnd()}...`,
224
+ ...(rationale !== null ? { rationale } : {}),
225
+ ...(applicability !== null ? { applicability } : {}),
226
+ confidence: Math.max(0.35, Math.min(0.95, confidence)),
227
+ status: 'active',
228
+ created_at: evidence.updated_at ?? now,
229
+ updated_at: evidence.updated_at ?? now
230
+ });
231
+ }
232
+ return results;
233
+ }
234
+ }
235
+ // Module-level shared instance used by the standalone helper functions below.
236
+ const _sharedExtractor = new LearningsExtractor();
237
+ /** Runs the full extract pipeline using the shared extractor instance. */
238
+ export function extractLearningsFromEvidence(repoPath, signals, contextCache) {
239
+ return _sharedExtractor.extractLearningsFromEvidence(repoPath, signals, contextCache);
240
+ }
241
+ /** Extracts learning records from evidence using the shared extractor instance. */
242
+ export function extractLearningRecords(signals, contextCache) {
243
+ return _sharedExtractor.extractLearningRecords(signals, contextCache);
244
+ }
245
+ /**
246
+ * Fast pre-filter that eliminates obvious non-lessons before incurring an LLM call.
247
+ * Bots, CI checks, sub-threshold weights, and explicitly penalised items are all dropped here.
248
+ */
249
+ function isEligibleForExtraction(signal) {
250
+ if (signal.author_type === 'bot' ||
251
+ /(coderabbit(?:ai)?|copilot|assistant|github-actions|ari|ivan|codex)/i.test(signal.author_name ?? '')) {
252
+ return false;
253
+ }
254
+ if (signal.source_type === 'pr_check') {
255
+ return false;
256
+ }
257
+ if ((signal.final_weight ?? 0) < 3) {
258
+ return false;
259
+ }
260
+ if (signal.penalties.includes('low_signal_text')) {
261
+ return false;
262
+ }
263
+ return true;
264
+ }
265
+ //# sourceMappingURL=extractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extractor.js","sourceRoot":"","sources":["../../src/learnings/extractor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,89 @@
1
+ /** A GitHub user, as returned by REST and GraphQL APIs. */
2
+ export interface GitHubActor {
3
+ login: string;
4
+ }
5
+ /** A comment posted directly on the PR issue (not a review thread comment). */
6
+ export interface GitHubIssueCommentEvidence {
7
+ id: string;
8
+ body: string;
9
+ createdAt: string;
10
+ author?: GitHubActor;
11
+ url?: string;
12
+ }
13
+ /** A full PR review submission (`APPROVED`, `CHANGES_REQUESTED`, or `COMMENTED`). */
14
+ export interface GitHubReviewEvidence {
15
+ id: string;
16
+ body: string;
17
+ state: string;
18
+ submittedAt?: string;
19
+ author?: GitHubActor;
20
+ url?: string;
21
+ }
22
+ /** A single comment within a review thread, which may be anchored to a specific file and line. */
23
+ export interface GitHubReviewThreadCommentEvidence {
24
+ id: string;
25
+ databaseId?: number;
26
+ body: string;
27
+ createdAt: string;
28
+ author?: GitHubActor;
29
+ path?: string;
30
+ line?: number;
31
+ url?: string;
32
+ diffHunk?: string;
33
+ }
34
+ /** A PR review thread containing one or more comments; may be resolved or outdated. */
35
+ export interface GitHubReviewThreadEvidence {
36
+ id?: string;
37
+ isResolved: boolean;
38
+ isOutdated?: boolean;
39
+ comments: GitHubReviewThreadCommentEvidence[];
40
+ }
41
+ /** Metadata about a single file changed in the PR. */
42
+ export interface GitHubFileEvidence {
43
+ path: string;
44
+ additions?: number;
45
+ deletions?: number;
46
+ changeType?: string;
47
+ }
48
+ /** A single CI check run result associated with the PR head commit. */
49
+ export interface GitHubCheckEvidence {
50
+ name: string;
51
+ state: string;
52
+ link?: string;
53
+ }
54
+ /** Complete evidence payload for one PR: all comments, reviews, threads, files, and checks. */
55
+ export interface GitHubPullRequestEvidence {
56
+ repository: {
57
+ owner: string;
58
+ name: string;
59
+ };
60
+ pullRequest: {
61
+ number: number;
62
+ title: string;
63
+ body: string;
64
+ url: string;
65
+ state: string;
66
+ headRefName: string;
67
+ headSha?: string;
68
+ author?: GitHubActor;
69
+ };
70
+ issueComments: GitHubIssueCommentEvidence[];
71
+ reviews: GitHubReviewEvidence[];
72
+ reviewThreads: GitHubReviewThreadEvidence[];
73
+ files: GitHubFileEvidence[];
74
+ checks: GitHubCheckEvidence[];
75
+ }
76
+ /**
77
+ * Lists all PR numbers for the repo, using the configured auth type.
78
+ * Returns numbers in descending order (newest first).
79
+ */
80
+ export declare function fetchAllPullRequestNumbers(repoPath: string, options?: {
81
+ state?: 'open' | 'closed' | 'merged' | 'all';
82
+ limit?: number;
83
+ }): Promise<number[]>;
84
+ /**
85
+ * Entry point for PR evidence fetching: routes to the PAT-based REST/GraphQL path
86
+ * or the `gh` CLI path depending on the configured auth type.
87
+ */
88
+ export declare function fetchGitHubPullRequestEvidence(repoPath: string, prNumber: number): Promise<GitHubPullRequestEvidence>;
89
+ //# sourceMappingURL=github-evidence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-evidence.d.ts","sourceRoot":"","sources":["../../src/learnings/github-evidence.ts"],"names":[],"mappings":"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"}