triage-ai 1.0.2
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/LICENSE +21 -0
- package/README.md +209 -0
- package/dist/cli.d.ts +9 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +633 -0
- package/dist/cli.js.map +1 -0
- package/dist/mcp-server.d.ts +24 -0
- package/dist/mcp-server.d.ts.map +1 -0
- package/dist/mcp-server.js +411 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/memory.d.ts +40 -0
- package/dist/memory.d.ts.map +1 -0
- package/dist/memory.js +241 -0
- package/dist/memory.js.map +1 -0
- package/dist/merge.d.ts +32 -0
- package/dist/merge.d.ts.map +1 -0
- package/dist/merge.js +251 -0
- package/dist/merge.js.map +1 -0
- package/dist/models/base.d.ts +72 -0
- package/dist/models/base.d.ts.map +1 -0
- package/dist/models/base.js +342 -0
- package/dist/models/base.js.map +1 -0
- package/dist/models/claude.d.ts +23 -0
- package/dist/models/claude.d.ts.map +1 -0
- package/dist/models/claude.js +30 -0
- package/dist/models/claude.js.map +1 -0
- package/dist/models/codex.d.ts +25 -0
- package/dist/models/codex.d.ts.map +1 -0
- package/dist/models/codex.js +34 -0
- package/dist/models/codex.js.map +1 -0
- package/dist/models/gemini.d.ts +23 -0
- package/dist/models/gemini.d.ts.map +1 -0
- package/dist/models/gemini.js +32 -0
- package/dist/models/gemini.js.map +1 -0
- package/dist/patch.d.ts +40 -0
- package/dist/patch.d.ts.map +1 -0
- package/dist/patch.js +183 -0
- package/dist/patch.js.map +1 -0
- package/dist/progress.d.ts +71 -0
- package/dist/progress.d.ts.map +1 -0
- package/dist/progress.js +268 -0
- package/dist/progress.js.map +1 -0
- package/dist/report.d.ts +19 -0
- package/dist/report.d.ts.map +1 -0
- package/dist/report.js +245 -0
- package/dist/report.js.map +1 -0
- package/dist/scanner.d.ts +64 -0
- package/dist/scanner.d.ts.map +1 -0
- package/dist/scanner.js +645 -0
- package/dist/scanner.js.map +1 -0
- package/dist/setup.d.ts +52 -0
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +252 -0
- package/dist/setup.js.map +1 -0
- package/dist/types.d.ts +153 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +203 -0
- package/dist/types.js.map +1 -0
- package/examples/claude-code-skill.md +22 -0
- package/examples/mcp-config.json +9 -0
- package/package.json +77 -0
package/dist/report.js
ADDED
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Report generation in Markdown and JSON formats.
|
|
3
|
+
*/
|
|
4
|
+
import { clusterRepresentative, clusterPatches, isConsensus, } from './types.js';
|
|
5
|
+
import { mergedResultToDict } from './merge.js';
|
|
6
|
+
// ---------------------------------------------------------------------------
|
|
7
|
+
// ReportGenerator
|
|
8
|
+
// ---------------------------------------------------------------------------
|
|
9
|
+
export class ReportGenerator {
|
|
10
|
+
/**
|
|
11
|
+
* Generate a Markdown report from merged results.
|
|
12
|
+
*
|
|
13
|
+
* Matches the exact section order and formatting of the Python original.
|
|
14
|
+
*/
|
|
15
|
+
toMarkdown(merged, prompt, context, elapsed) {
|
|
16
|
+
const lines = [];
|
|
17
|
+
// ---- Header ----
|
|
18
|
+
lines.push('# Code Triage Report');
|
|
19
|
+
lines.push('');
|
|
20
|
+
lines.push(`**Generated:** ${new Date().toISOString().replace('T', ' ').slice(0, 19)}`);
|
|
21
|
+
lines.push(`**Duration:** ${elapsed.toFixed(1)}s`);
|
|
22
|
+
lines.push(`**Models:** ${Object.keys(merged.summaries).join(', ')}`);
|
|
23
|
+
lines.push('');
|
|
24
|
+
// ---- Request ----
|
|
25
|
+
lines.push('## Request');
|
|
26
|
+
lines.push('');
|
|
27
|
+
lines.push(`> ${prompt}`);
|
|
28
|
+
lines.push('');
|
|
29
|
+
// ---- Summary ----
|
|
30
|
+
lines.push('## Summary');
|
|
31
|
+
lines.push('');
|
|
32
|
+
const total = merged.blockers.length +
|
|
33
|
+
merged.high.length +
|
|
34
|
+
merged.medium.length +
|
|
35
|
+
merged.low.length;
|
|
36
|
+
const consensusCount = merged.consensus.length;
|
|
37
|
+
lines.push(`- **Total Issues:** ${total}`);
|
|
38
|
+
lines.push(`- **Consensus (2+ models):** ${consensusCount}`);
|
|
39
|
+
lines.push(`- **Blockers (S0):** ${merged.blockers.length}`);
|
|
40
|
+
lines.push(`- **High (S1):** ${merged.high.length}`);
|
|
41
|
+
lines.push(`- **Medium (S2):** ${merged.medium.length}`);
|
|
42
|
+
lines.push(`- **Low (S3):** ${merged.low.length}`);
|
|
43
|
+
lines.push('');
|
|
44
|
+
// ---- Model Assessments ----
|
|
45
|
+
lines.push('### Model Assessments');
|
|
46
|
+
lines.push('');
|
|
47
|
+
for (const [model, summary] of Object.entries(merged.summaries)) {
|
|
48
|
+
lines.push(`**${model.toUpperCase()}:** ${summary}`);
|
|
49
|
+
lines.push('');
|
|
50
|
+
}
|
|
51
|
+
// ---- Blockers ----
|
|
52
|
+
if (merged.blockers.length > 0) {
|
|
53
|
+
lines.push('## Blockers (S0)');
|
|
54
|
+
lines.push('');
|
|
55
|
+
for (let i = 0; i < merged.blockers.length; i++) {
|
|
56
|
+
lines.push(...this._renderCluster(merged.blockers[i], i + 1));
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
// ---- High ----
|
|
60
|
+
if (merged.high.length > 0) {
|
|
61
|
+
lines.push('## High Priority (S1)');
|
|
62
|
+
lines.push('');
|
|
63
|
+
for (let i = 0; i < merged.high.length; i++) {
|
|
64
|
+
lines.push(...this._renderCluster(merged.high[i], i + 1));
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
// ---- Medium ----
|
|
68
|
+
if (merged.medium.length > 0) {
|
|
69
|
+
lines.push('## Medium Priority (S2)');
|
|
70
|
+
lines.push('');
|
|
71
|
+
for (let i = 0; i < merged.medium.length; i++) {
|
|
72
|
+
lines.push(...this._renderCluster(merged.medium[i], i + 1));
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
// ---- Low ----
|
|
76
|
+
if (merged.low.length > 0) {
|
|
77
|
+
lines.push('## Low Priority (S3)');
|
|
78
|
+
lines.push('');
|
|
79
|
+
for (let i = 0; i < merged.low.length; i++) {
|
|
80
|
+
lines.push(...this._renderCluster(merged.low[i], i + 1));
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
// ---- Consensus Findings ----
|
|
84
|
+
if (merged.consensus.length > 0) {
|
|
85
|
+
lines.push('## Consensus Findings');
|
|
86
|
+
lines.push('');
|
|
87
|
+
lines.push('*Issues identified by 2+ models:*');
|
|
88
|
+
lines.push('');
|
|
89
|
+
for (const cluster of merged.consensus) {
|
|
90
|
+
const f = clusterRepresentative(cluster);
|
|
91
|
+
const models = [...cluster.models].sort().join(', ');
|
|
92
|
+
lines.push(`- [${f.severity}] **${f.title}** (${f.location.path}) - *${models}*`);
|
|
93
|
+
}
|
|
94
|
+
lines.push('');
|
|
95
|
+
}
|
|
96
|
+
// ---- Unique Findings by Model ----
|
|
97
|
+
if (Object.keys(merged.unique_by_model).length > 0) {
|
|
98
|
+
lines.push('## Unique Findings by Model');
|
|
99
|
+
lines.push('');
|
|
100
|
+
for (const [model, findings] of Object.entries(merged.unique_by_model).sort()) {
|
|
101
|
+
if (findings.length > 0) {
|
|
102
|
+
lines.push(`### ${model.toUpperCase()} only (${findings.length})`);
|
|
103
|
+
lines.push('');
|
|
104
|
+
for (const f of findings) {
|
|
105
|
+
lines.push(`- [${f.severity}] ${f.title} (${f.location.path})`);
|
|
106
|
+
}
|
|
107
|
+
lines.push('');
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
// ---- Conflicts / Disagreements ----
|
|
112
|
+
if (merged.conflicts.length > 0) {
|
|
113
|
+
lines.push('## Conflicts / Disagreements');
|
|
114
|
+
lines.push('');
|
|
115
|
+
for (const conflict of merged.conflicts) {
|
|
116
|
+
lines.push(`### ${conflict.title}`);
|
|
117
|
+
lines.push(`*Type: ${conflict.conflict_type}*`);
|
|
118
|
+
lines.push('');
|
|
119
|
+
lines.push(conflict.details);
|
|
120
|
+
lines.push('');
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
// ---- Proposed Patches ----
|
|
124
|
+
if (merged.patches.length > 0) {
|
|
125
|
+
lines.push('## Proposed Patches');
|
|
126
|
+
lines.push('');
|
|
127
|
+
for (let i = 0; i < merged.patches.length; i++) {
|
|
128
|
+
const patch = merged.patches[i];
|
|
129
|
+
lines.push(`### Patch ${i + 1}: ${patch.description} (${patch.model})`);
|
|
130
|
+
lines.push(`*File: ${patch.path}*`);
|
|
131
|
+
lines.push('');
|
|
132
|
+
lines.push('```diff');
|
|
133
|
+
lines.push(patch.diff);
|
|
134
|
+
lines.push('```');
|
|
135
|
+
lines.push('');
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
// ---- Open Questions ----
|
|
139
|
+
if (merged.questions.length > 0) {
|
|
140
|
+
lines.push('## Open Questions');
|
|
141
|
+
lines.push('');
|
|
142
|
+
for (const q of merged.questions) {
|
|
143
|
+
lines.push(`- ${q}`);
|
|
144
|
+
}
|
|
145
|
+
lines.push('');
|
|
146
|
+
}
|
|
147
|
+
// ---- Recommended Plan ----
|
|
148
|
+
lines.push('## Recommended Plan');
|
|
149
|
+
lines.push('');
|
|
150
|
+
const planItems = [];
|
|
151
|
+
// Blockers first
|
|
152
|
+
for (const cluster of merged.blockers) {
|
|
153
|
+
const f = clusterRepresentative(cluster);
|
|
154
|
+
const tag = isConsensus(cluster) ? ' (consensus)' : '';
|
|
155
|
+
planItems.push(`1. **[BLOCKER]** ${f.title} - ${f.location.path}${tag}`);
|
|
156
|
+
}
|
|
157
|
+
// High priority consensus
|
|
158
|
+
for (const cluster of merged.high) {
|
|
159
|
+
if (isConsensus(cluster)) {
|
|
160
|
+
const f = clusterRepresentative(cluster);
|
|
161
|
+
planItems.push(`2. **[HIGH]** ${f.title} - ${f.location.path} (consensus)`);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
// Remaining high
|
|
165
|
+
for (const cluster of merged.high) {
|
|
166
|
+
if (!isConsensus(cluster)) {
|
|
167
|
+
const f = clusterRepresentative(cluster);
|
|
168
|
+
planItems.push(`3. **[HIGH]** ${f.title} - ${f.location.path}`);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
if (planItems.length > 0) {
|
|
172
|
+
lines.push(...planItems.slice(0, 10)); // Top 10 actions
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
lines.push('No critical issues found. Consider reviewing medium/low findings.');
|
|
176
|
+
}
|
|
177
|
+
lines.push('');
|
|
178
|
+
lines.push('---');
|
|
179
|
+
lines.push('*Report generated by triage-ai v1.0.2*');
|
|
180
|
+
return lines.join('\n');
|
|
181
|
+
}
|
|
182
|
+
/** Render a single finding cluster as Markdown lines. */
|
|
183
|
+
_renderCluster(cluster, index) {
|
|
184
|
+
const lines = [];
|
|
185
|
+
const f = clusterRepresentative(cluster);
|
|
186
|
+
const consensusTag = isConsensus(cluster) ? ' [CONSENSUS]' : '';
|
|
187
|
+
const models = [...cluster.models].sort().join(', ');
|
|
188
|
+
lines.push(`### ${index}. ${f.title}${consensusTag}`);
|
|
189
|
+
lines.push('');
|
|
190
|
+
lines.push(`- **Severity:** ${f.severity}`);
|
|
191
|
+
lines.push(`- **Confidence:** ${f.confidence}`);
|
|
192
|
+
lines.push(`- **Category:** ${f.category}`);
|
|
193
|
+
lines.push(`- **Location:** \`${f.location.path}:${f.location.start_line}-${f.location.end_line}\``);
|
|
194
|
+
lines.push(`- **Models:** ${models}`);
|
|
195
|
+
lines.push('');
|
|
196
|
+
if (f.evidence) {
|
|
197
|
+
lines.push('**Evidence:**');
|
|
198
|
+
lines.push('```');
|
|
199
|
+
lines.push(f.evidence.slice(0, 500));
|
|
200
|
+
lines.push('```');
|
|
201
|
+
lines.push('');
|
|
202
|
+
}
|
|
203
|
+
if (f.recommendation) {
|
|
204
|
+
lines.push(`**Recommendation:** ${f.recommendation}`);
|
|
205
|
+
lines.push('');
|
|
206
|
+
}
|
|
207
|
+
// Show first patch if any
|
|
208
|
+
const patches = clusterPatches(cluster);
|
|
209
|
+
if (patches.length > 0) {
|
|
210
|
+
lines.push('**Proposed fix:**');
|
|
211
|
+
lines.push('```diff');
|
|
212
|
+
lines.push(patches[0].diff.slice(0, 1000));
|
|
213
|
+
lines.push('```');
|
|
214
|
+
lines.push('');
|
|
215
|
+
}
|
|
216
|
+
return lines;
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Generate a JSON report from merged results.
|
|
220
|
+
*/
|
|
221
|
+
toJson(merged, prompt, context, elapsed) {
|
|
222
|
+
const report = {
|
|
223
|
+
metadata: {
|
|
224
|
+
generated: new Date().toISOString(),
|
|
225
|
+
duration_seconds: elapsed,
|
|
226
|
+
prompt,
|
|
227
|
+
models: Object.keys(merged.summaries),
|
|
228
|
+
},
|
|
229
|
+
summary: {
|
|
230
|
+
total_issues: merged.blockers.length +
|
|
231
|
+
merged.high.length +
|
|
232
|
+
merged.medium.length +
|
|
233
|
+
merged.low.length,
|
|
234
|
+
consensus_count: merged.consensus.length,
|
|
235
|
+
blockers: merged.blockers.length,
|
|
236
|
+
high: merged.high.length,
|
|
237
|
+
medium: merged.medium.length,
|
|
238
|
+
low: merged.low.length,
|
|
239
|
+
},
|
|
240
|
+
results: mergedResultToDict(merged),
|
|
241
|
+
};
|
|
242
|
+
return JSON.stringify(report, null, 2);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
//# sourceMappingURL=report.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report.js","sourceRoot":"","sources":["../src/report.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Repository scanning and context gathering.
|
|
3
|
+
*
|
|
4
|
+
* Handles:
|
|
5
|
+
* - Git diff detection
|
|
6
|
+
* - File discovery based on prompt
|
|
7
|
+
* - Secret redaction
|
|
8
|
+
*
|
|
9
|
+
* TypeScript port of triage_cli/repo_scan.py — faithful port, same logic,
|
|
10
|
+
* same constants, same behavior.
|
|
11
|
+
*/
|
|
12
|
+
import type { ScanContext, FileContext } from './types.js';
|
|
13
|
+
export declare class RepoScanner {
|
|
14
|
+
readonly root: string;
|
|
15
|
+
constructor(root?: string);
|
|
16
|
+
/**
|
|
17
|
+
* Scan repository and return context for models.
|
|
18
|
+
*
|
|
19
|
+
* Returns ScanContext with:
|
|
20
|
+
* - is_git_repo, has_diff, git_diff, git_status, git_log
|
|
21
|
+
* - tree (directory structure)
|
|
22
|
+
* - files: list of { path, content, reason, description }
|
|
23
|
+
* - prompt: original prompt
|
|
24
|
+
* - root: resolved repo root
|
|
25
|
+
*/
|
|
26
|
+
scan(diffOnly?: boolean, maxFiles?: number, prompt?: string): ScanContext;
|
|
27
|
+
/** Check if current directory is a git repository. */
|
|
28
|
+
_is_git_repo(): boolean;
|
|
29
|
+
/** Get git status output. */
|
|
30
|
+
_get_git_status(): string;
|
|
31
|
+
/** Get git diff for staged and unstaged changes. */
|
|
32
|
+
_get_git_diff(): string;
|
|
33
|
+
/** Get recent git commits for context. */
|
|
34
|
+
_get_git_log(limit?: number): string;
|
|
35
|
+
/** Get directory structure for orientation. */
|
|
36
|
+
_get_directory_tree(maxDepth?: number, maxEntries?: number): string;
|
|
37
|
+
/** Extract first docstring or comment as file description. */
|
|
38
|
+
_extract_file_description(content: string): string;
|
|
39
|
+
/**
|
|
40
|
+
* Discover relevant files based on prompt and repository structure.
|
|
41
|
+
*
|
|
42
|
+
* Returns list of FileContext objects.
|
|
43
|
+
* Order: explicit paths → explicit dirs → git diff files → keyword search → entrypoints.
|
|
44
|
+
*/
|
|
45
|
+
_discover_files(prompt: string, maxFiles: number): FileContext[];
|
|
46
|
+
/** Extract likely file/function/class names from prompt. */
|
|
47
|
+
_extract_keywords(prompt: string): string[];
|
|
48
|
+
/** Find files that match keywords in name or content. */
|
|
49
|
+
_find_files_by_keywords(keywords: string[]): Array<[string, string]>;
|
|
50
|
+
/** Get list of files changed in git diff. */
|
|
51
|
+
_get_diff_file_list(): string[];
|
|
52
|
+
/** Check if file should be included in context. */
|
|
53
|
+
_should_include_file(filePath: string): boolean;
|
|
54
|
+
/** Read file content with size limit and secret redaction. */
|
|
55
|
+
_read_file(filePath: string, maxSize?: number): string | null;
|
|
56
|
+
/** Redact potential secrets from content. */
|
|
57
|
+
_redact_secrets(content: string): string;
|
|
58
|
+
/**
|
|
59
|
+
* Recursively glob a directory for files matching a suffix (e.g. ".py").
|
|
60
|
+
* When recursive=false, only looks in top-level of the directory.
|
|
61
|
+
*/
|
|
62
|
+
private _globDir;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=scanner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../src/scanner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAqF3D,qBAAa,WAAW;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAEV,IAAI,CAAC,EAAE,MAAM;IAIzB;;;;;;;;;OASG;IACH,IAAI,CACF,QAAQ,UAAQ,EAChB,QAAQ,SAAK,EACb,MAAM,SAAK,GACV,WAAW;IAsCd,sDAAsD;IACtD,YAAY,IAAI,OAAO;IAavB,6BAA6B;IAC7B,eAAe,IAAI,MAAM;IAazB,oDAAoD;IACpD,aAAa,IAAI,MAAM;IA0BvB,0CAA0C;IAC1C,YAAY,CAAC,KAAK,SAAK,GAAG,MAAM;IAahC,+CAA+C;IAC/C,mBAAmB,CAAC,QAAQ,SAAI,EAAE,UAAU,SAAM,GAAG,MAAM;IA0E3D,8DAA8D;IAC9D,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAoDlD;;;;;OAKG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,WAAW,EAAE;IAqIhE,4DAA4D;IAC5D,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE;IAW3C,yDAAyD;IACzD,uBAAuB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IA6DpE,6CAA6C;IAC7C,mBAAmB,IAAI,MAAM,EAAE;IAoB/B,mDAAmD;IACnD,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAmB/C,8DAA8D;IAC9D,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,SAAU,GAAG,MAAM,GAAG,IAAI;IAuB9D,6CAA6C;IAC7C,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAcxC;;;OAGG;IACH,OAAO,CAAC,QAAQ;CA+CjB"}
|