@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.1",
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.1",
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.1",
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",
@@ -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
- const executionTimeout = options.timeout || 600000; // Default 10 minutes
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 || {};