@ariso-ai/ivan 1.0.23 → 1.0.25
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.
- package/.github/workflows/ivanagent.yml +1 -1
- package/README.md +29 -0
- package/dist/__tests__/cli.test.d.ts +2 -0
- package/dist/__tests__/cli.test.d.ts.map +1 -0
- package/dist/__tests__/cli.test.js +100 -0
- package/dist/__tests__/cli.test.js.map +1 -0
- package/dist/database/migration.d.ts +3 -2
- package/dist/database/migration.d.ts.map +1 -1
- package/dist/database/migration.js +4 -2
- package/dist/database/migration.js.map +1 -1
- package/dist/database/migrations/015_create_learnings_tables.d.ts +3 -0
- package/dist/database/migrations/015_create_learnings_tables.d.ts.map +1 -0
- package/dist/database/migrations/015_create_learnings_tables.js +32 -0
- package/dist/database/migrations/015_create_learnings_tables.js.map +1 -0
- package/dist/database/migrations/index.d.ts +1 -0
- package/dist/database/migrations/index.d.ts.map +1 -1
- package/dist/database/migrations/index.js +2 -0
- package/dist/database/migrations/index.js.map +1 -1
- package/dist/database/types.d.ts +1 -1
- package/dist/database/types.d.ts.map +1 -1
- package/dist/database.d.ts +1 -1
- package/dist/database.d.ts.map +1 -1
- package/dist/index.js +21 -4
- package/dist/index.js.map +1 -1
- package/dist/learnings/builder.d.ts +25 -0
- package/dist/learnings/builder.d.ts.map +1 -0
- package/dist/learnings/builder.js +247 -0
- package/dist/learnings/builder.js.map +1 -0
- package/dist/learnings/database.d.ts +45 -0
- package/dist/learnings/database.d.ts.map +1 -0
- package/dist/learnings/database.js +63 -0
- package/dist/learnings/database.js.map +1 -0
- package/dist/learnings/embeddings.d.ts +20 -0
- package/dist/learnings/embeddings.d.ts.map +1 -0
- package/dist/learnings/embeddings.js +54 -0
- package/dist/learnings/embeddings.js.map +1 -0
- package/dist/learnings/evidence-writer.d.ts +13 -0
- package/dist/learnings/evidence-writer.d.ts.map +1 -0
- package/dist/learnings/evidence-writer.js +182 -0
- package/dist/learnings/evidence-writer.js.map +1 -0
- package/dist/learnings/extractor.d.ts +32 -0
- package/dist/learnings/extractor.d.ts.map +1 -0
- package/dist/learnings/extractor.js +265 -0
- package/dist/learnings/extractor.js.map +1 -0
- package/dist/learnings/github-evidence.d.ts +89 -0
- package/dist/learnings/github-evidence.d.ts.map +1 -0
- package/dist/learnings/github-evidence.js +255 -0
- package/dist/learnings/github-evidence.js.map +1 -0
- package/dist/learnings/github-ingestion.d.ts +18 -0
- package/dist/learnings/github-ingestion.d.ts.map +1 -0
- package/dist/learnings/github-ingestion.js +29 -0
- package/dist/learnings/github-ingestion.js.map +1 -0
- package/dist/learnings/heuristics.d.ts +17 -0
- package/dist/learnings/heuristics.d.ts.map +1 -0
- package/dist/learnings/heuristics.js +52 -0
- package/dist/learnings/heuristics.js.map +1 -0
- package/dist/learnings/id.d.ts +11 -0
- package/dist/learnings/id.d.ts.map +1 -0
- package/dist/learnings/id.js +36 -0
- package/dist/learnings/id.js.map +1 -0
- package/dist/learnings/index.d.ts +9 -0
- package/dist/learnings/index.d.ts.map +1 -0
- package/dist/learnings/index.js +55 -0
- package/dist/learnings/index.js.map +1 -0
- package/dist/learnings/ingest-pr-command.d.ts +8 -0
- package/dist/learnings/ingest-pr-command.d.ts.map +1 -0
- package/dist/learnings/ingest-pr-command.js +15 -0
- package/dist/learnings/ingest-pr-command.js.map +1 -0
- package/dist/learnings/ingest-repo-command.d.ts +9 -0
- package/dist/learnings/ingest-repo-command.d.ts.map +1 -0
- package/dist/learnings/ingest-repo-command.js +62 -0
- package/dist/learnings/ingest-repo-command.js.map +1 -0
- package/dist/learnings/init-command.d.ts +15 -0
- package/dist/learnings/init-command.d.ts.map +1 -0
- package/dist/learnings/init-command.js +36 -0
- package/dist/learnings/init-command.js.map +1 -0
- package/dist/learnings/install-hooks-command.d.ts +17 -0
- package/dist/learnings/install-hooks-command.d.ts.map +1 -0
- package/dist/learnings/install-hooks-command.js +241 -0
- package/dist/learnings/install-hooks-command.js.map +1 -0
- package/dist/learnings/learning-writer.d.ts +6 -0
- package/dist/learnings/learning-writer.d.ts.map +1 -0
- package/dist/learnings/learning-writer.js +42 -0
- package/dist/learnings/learning-writer.js.map +1 -0
- package/dist/learnings/parser.d.ts +12 -0
- package/dist/learnings/parser.d.ts.map +1 -0
- package/dist/learnings/parser.js +133 -0
- package/dist/learnings/parser.js.map +1 -0
- package/dist/learnings/paths.d.ts +6 -0
- package/dist/learnings/paths.d.ts.map +1 -0
- package/dist/learnings/paths.js +11 -0
- package/dist/learnings/paths.js.map +1 -0
- package/dist/learnings/query-command.d.ts +9 -0
- package/dist/learnings/query-command.d.ts.map +1 -0
- package/dist/learnings/query-command.js +37 -0
- package/dist/learnings/query-command.js.map +1 -0
- package/dist/learnings/query.d.ts +7 -0
- package/dist/learnings/query.d.ts.map +1 -0
- package/dist/learnings/query.js +65 -0
- package/dist/learnings/query.js.map +1 -0
- package/dist/learnings/rebuild-command.d.ts +8 -0
- package/dist/learnings/rebuild-command.d.ts.map +1 -0
- package/dist/learnings/rebuild-command.js +16 -0
- package/dist/learnings/rebuild-command.js.map +1 -0
- package/dist/learnings/record-types.d.ts +98 -0
- package/dist/learnings/record-types.d.ts.map +1 -0
- package/dist/learnings/record-types.js +5 -0
- package/dist/learnings/record-types.js.map +1 -0
- package/dist/learnings/repository.d.ts +18 -0
- package/dist/learnings/repository.d.ts.map +1 -0
- package/dist/learnings/repository.js +73 -0
- package/dist/learnings/repository.js.map +1 -0
- package/dist/learnings/types.d.ts +17 -0
- package/dist/learnings/types.d.ts.map +1 -0
- package/dist/learnings/types.js +4 -0
- package/dist/learnings/types.js.map +1 -0
- package/dist/learnings/validator.d.ts +14 -0
- package/dist/learnings/validator.d.ts.map +1 -0
- package/dist/learnings/validator.js +44 -0
- package/dist/learnings/validator.js.map +1 -0
- package/dist/learnings/weighting.d.ts +33 -0
- package/dist/learnings/weighting.d.ts.map +1 -0
- package/dist/learnings/weighting.js +106 -0
- package/dist/learnings/weighting.js.map +1 -0
- package/dist/services/address-executor.d.ts +0 -1
- package/dist/services/address-executor.d.ts.map +1 -1
- package/dist/services/address-executor.js +1 -4
- package/dist/services/address-executor.js.map +1 -1
- package/dist/services/address-task-executor.d.ts +0 -1
- package/dist/services/address-task-executor.d.ts.map +1 -1
- package/dist/services/address-task-executor.js +18 -14
- package/dist/services/address-task-executor.js.map +1 -1
- package/dist/services/claude-cli-executor.d.ts +1 -1
- package/dist/services/claude-cli-executor.d.ts.map +1 -1
- package/dist/services/claude-executor.d.ts +1 -1
- package/dist/services/claude-executor.d.ts.map +1 -1
- package/dist/services/claude-executor.js +2 -2
- package/dist/services/claude-executor.js.map +1 -1
- package/dist/services/git-interfaces.d.ts +3 -3
- package/dist/services/git-interfaces.d.ts.map +1 -1
- package/dist/services/git-manager-cli.d.ts +1 -1
- package/dist/services/git-manager-cli.d.ts.map +1 -1
- package/dist/services/git-manager-cli.js +111 -49
- package/dist/services/git-manager-cli.js.map +1 -1
- package/dist/services/git-manager-pat.d.ts +2 -2
- package/dist/services/git-manager-pat.d.ts.map +1 -1
- package/dist/services/git-manager-pat.js +31 -8
- package/dist/services/git-manager-pat.js.map +1 -1
- package/dist/services/github-api-client.d.ts +39 -3
- package/dist/services/github-api-client.d.ts.map +1 -1
- package/dist/services/github-api-client.js +76 -8
- package/dist/services/github-api-client.js.map +1 -1
- package/dist/services/index.d.ts +2 -1
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js.map +1 -1
- package/dist/services/job-manager.d.ts +1 -1
- package/dist/services/job-manager.d.ts.map +1 -1
- package/dist/services/job-manager.js.map +1 -1
- package/dist/services/openai-service.d.ts +1 -0
- package/dist/services/openai-service.d.ts.map +1 -1
- package/dist/services/openai-service.js +54 -0
- package/dist/services/openai-service.js.map +1 -1
- package/dist/services/pr-service-cli.d.ts +1 -1
- package/dist/services/pr-service-cli.d.ts.map +1 -1
- package/dist/services/pr-service-pat.d.ts +1 -1
- package/dist/services/pr-service-pat.d.ts.map +1 -1
- package/dist/services/pr-service-pat.js +2 -2
- package/dist/services/pr-service-pat.js.map +1 -1
- package/dist/services/repository-manager-cli.d.ts +1 -1
- package/dist/services/repository-manager-cli.d.ts.map +1 -1
- package/dist/services/repository-manager-cli.js.map +1 -1
- package/dist/services/repository-manager-pat.d.ts +3 -3
- package/dist/services/repository-manager-pat.d.ts.map +1 -1
- package/dist/services/repository-manager-pat.js.map +1 -1
- package/dist/services/service-factory.d.ts +1 -1
- package/dist/services/service-factory.d.ts.map +1 -1
- package/dist/services/task-executor.d.ts +3 -2
- package/dist/services/task-executor.d.ts.map +1 -1
- package/dist/services/task-executor.js +54 -13
- package/dist/services/task-executor.js.map +1 -1
- package/dist/types/non-interactive-config.d.ts +5 -0
- package/dist/types/non-interactive-config.d.ts.map +1 -1
- package/dist/web-server.d.ts.map +1 -1
- package/dist/web-server.js.map +1 -1
- 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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"}
|