@in-the-loop-labs/pair-review 3.2.1 → 3.2.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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@in-the-loop-labs/pair-review",
|
|
3
|
-
"version": "3.2.
|
|
3
|
+
"version": "3.2.2",
|
|
4
4
|
"description": "Your AI-powered code review partner - Close the feedback loop with AI coding agents",
|
|
5
5
|
"main": "src/server.js",
|
|
6
6
|
"bin": {
|
|
@@ -81,5 +81,10 @@
|
|
|
81
81
|
"jsdom": "^29.0.1",
|
|
82
82
|
"supertest": "^7.1.4",
|
|
83
83
|
"vitest": "^4.0.16"
|
|
84
|
+
},
|
|
85
|
+
"pnpm": {
|
|
86
|
+
"onlyBuiltDependencies": [
|
|
87
|
+
"better-sqlite3"
|
|
88
|
+
]
|
|
84
89
|
}
|
|
85
90
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pair-review",
|
|
3
|
-
"version": "3.2.
|
|
3
|
+
"version": "3.2.2",
|
|
4
4
|
"description": "pair-review app integration — Open PRs and local changes in the pair-review web UI, run server-side AI analysis, and address review feedback. Requires the pair-review MCP server.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "in-the-loop-labs",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "code-critic",
|
|
3
|
-
"version": "3.2.
|
|
3
|
+
"version": "3.2.2",
|
|
4
4
|
"description": "AI-powered code review analysis — Run three-level AI analysis and implement-review-fix loops directly in your coding agent. Works standalone, no server required.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "in-the-loop-labs",
|
package/src/ai/analyzer.js
CHANGED
|
@@ -96,7 +96,7 @@ function buildVoiceContext(voice, idx, instructions, progressCallback, db) {
|
|
|
96
96
|
const voiceProvider = isExecutable ? createProvider(voice.provider, voice.model) : null;
|
|
97
97
|
|
|
98
98
|
const voiceTier = voice.tier || 'balanced';
|
|
99
|
-
const voiceTimeout = voice.timeout || 600000;
|
|
99
|
+
const voiceTimeout = voice.timeout || ProviderClass?.defaultTimeout || 600000;
|
|
100
100
|
|
|
101
101
|
// Wrap progress callback with voice-centric metadata
|
|
102
102
|
const voiceProgressCallback = progressCallback ? (update) => {
|
|
@@ -319,7 +319,10 @@ class Analyzer {
|
|
|
319
319
|
const runId = options.runId || uuidv4();
|
|
320
320
|
const { analysisId, skipRunCreation, skipLevel3, reviewerNum, excludePrevious, serverPort } = options;
|
|
321
321
|
const logPrefix = options.logPrefix || '';
|
|
322
|
-
|
|
322
|
+
// Respect provider-configured timeout (e.g. Pi's 15 min, executable providers)
|
|
323
|
+
const ProviderClass = getProviderClass(this.provider);
|
|
324
|
+
const providerTimeout = ProviderClass?.defaultTimeout;
|
|
325
|
+
const executionTimeout = options.timeout || providerTimeout || 600000; // Default 10 minutes
|
|
323
326
|
|
|
324
327
|
// Resolve enabledLevels: prefer explicit option, fall back to skipLevel3 compat
|
|
325
328
|
const enabledLevels = options.enabledLevels
|
|
@@ -3396,6 +3399,7 @@ File-level suggestions should NOT have a line number. They apply to the entire f
|
|
|
3396
3399
|
: voice.customInstructions;
|
|
3397
3400
|
}
|
|
3398
3401
|
|
|
3402
|
+
const VoiceProviderClass = getProviderClass(voice.provider);
|
|
3399
3403
|
voiceTasks.push({
|
|
3400
3404
|
voiceId,
|
|
3401
3405
|
reviewerLabel,
|
|
@@ -3404,7 +3408,7 @@ File-level suggestions should NOT have a line number. They apply to the entire f
|
|
|
3404
3408
|
provider: voice.provider,
|
|
3405
3409
|
model: voice.model,
|
|
3406
3410
|
tier,
|
|
3407
|
-
timeout: voice.timeout || 600000,
|
|
3411
|
+
timeout: voice.timeout || VoiceProviderClass?.defaultTimeout || 600000,
|
|
3408
3412
|
customInstructions: voiceInstructions,
|
|
3409
3413
|
voiceCustomInstructions: voice.customInstructions || null
|
|
3410
3414
|
});
|
|
@@ -522,6 +522,11 @@ function createExecutableProviderClass(id, config) {
|
|
|
522
522
|
ExecProvider.getDefaultModel = () => resolveDefaultModel(models) || models[0]?.id;
|
|
523
523
|
ExecProvider.getInstallInstructions = () => config.installInstructions || `Install ${id}`;
|
|
524
524
|
|
|
525
|
+
// Surface configured timeout so the UI can pre-populate TimeoutSelect
|
|
526
|
+
if (config.timeout != null) {
|
|
527
|
+
ExecProvider.defaultTimeout = config.timeout;
|
|
528
|
+
}
|
|
529
|
+
|
|
525
530
|
// Flags for the system
|
|
526
531
|
ExecProvider.isExecutable = true;
|
|
527
532
|
const caps = config.capabilities || {};
|