@in-the-loop-labs/pair-review 2.6.0 → 2.6.1
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": "pair-review",
|
|
3
|
-
"version": "2.6.
|
|
3
|
+
"version": "2.6.1",
|
|
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": "2.6.
|
|
3
|
+
"version": "2.6.1",
|
|
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/public/index.html
CHANGED
|
@@ -177,6 +177,14 @@
|
|
|
177
177
|
color: var(--color-text-primary);
|
|
178
178
|
}
|
|
179
179
|
|
|
180
|
+
.app-version {
|
|
181
|
+
color: var(--color-fg-muted, #656d76);
|
|
182
|
+
font-size: 12px;
|
|
183
|
+
font-weight: 400;
|
|
184
|
+
margin-left: 6px;
|
|
185
|
+
opacity: 0.7;
|
|
186
|
+
}
|
|
187
|
+
|
|
180
188
|
.header-right {
|
|
181
189
|
display: flex;
|
|
182
190
|
align-items: center;
|
|
@@ -1089,6 +1097,7 @@
|
|
|
1089
1097
|
<path transform="rotate(-50 12 12)" d="M18.178 8c5.096 0 5.096 8 0 8-5.095 0-7.133-8-12.356-8-5.096 0-5.096 8 0 8 5.223 0 7.26-8 12.356-8z"/>
|
|
1090
1098
|
</svg>
|
|
1091
1099
|
<span class="logo-text">pair<span class="logo-accent">review</span></span>
|
|
1100
|
+
<span id="app-version" class="app-version"></span>
|
|
1092
1101
|
</a>
|
|
1093
1102
|
</div>
|
|
1094
1103
|
<div class="header-right">
|
package/public/js/index.js
CHANGED
|
@@ -1092,6 +1092,12 @@
|
|
|
1092
1092
|
const config = await response.json();
|
|
1093
1093
|
updateCommandExamples(config.is_running_via_npx);
|
|
1094
1094
|
|
|
1095
|
+
// Display version in header
|
|
1096
|
+
if (config.version) {
|
|
1097
|
+
const versionEl = document.getElementById('app-version');
|
|
1098
|
+
if (versionEl) versionEl.textContent = 'v' + config.version;
|
|
1099
|
+
}
|
|
1100
|
+
|
|
1095
1101
|
// Expose chat provider config to components (ChatPanel reads these)
|
|
1096
1102
|
window.__pairReview = window.__pairReview || {};
|
|
1097
1103
|
window.__pairReview.chatProvider = config.chat_provider || 'pi';
|
package/public/setup.html
CHANGED
|
@@ -137,6 +137,14 @@
|
|
|
137
137
|
color: var(--color-text-primary);
|
|
138
138
|
}
|
|
139
139
|
|
|
140
|
+
.app-version {
|
|
141
|
+
color: var(--color-fg-muted, #656d76);
|
|
142
|
+
font-size: 12px;
|
|
143
|
+
font-weight: 400;
|
|
144
|
+
margin-left: 6px;
|
|
145
|
+
opacity: 0.7;
|
|
146
|
+
}
|
|
147
|
+
|
|
140
148
|
.setup-target {
|
|
141
149
|
font-family: var(--font-mono);
|
|
142
150
|
font-size: 15px;
|
|
@@ -463,6 +471,7 @@
|
|
|
463
471
|
<path transform="rotate(-50 12 12)" d="M18.178 8c5.096 0 5.096 8 0 8-5.095 0-7.133-8-12.356-8-5.096 0-5.096 8 0 8 5.223 0 7.26-8 12.356-8z"/>
|
|
464
472
|
</svg>
|
|
465
473
|
<span class="logo-text">pair<span class="logo-accent">review</span></span>
|
|
474
|
+
<span id="app-version" class="app-version"></span>
|
|
466
475
|
</a>
|
|
467
476
|
<div class="setup-target" id="setup-target"></div>
|
|
468
477
|
<div class="setup-subtitle">Setting up review</div>
|
|
@@ -839,6 +848,16 @@
|
|
|
839
848
|
});
|
|
840
849
|
}
|
|
841
850
|
|
|
851
|
+
/* ── Display Version ── */
|
|
852
|
+
fetch('/api/config').then(function(r) {
|
|
853
|
+
return r.ok ? r.json() : null;
|
|
854
|
+
}).then(function(config) {
|
|
855
|
+
if (config && config.version) {
|
|
856
|
+
var versionEl = document.getElementById('app-version');
|
|
857
|
+
if (versionEl) versionEl.textContent = 'v' + config.version;
|
|
858
|
+
}
|
|
859
|
+
}).catch(function() { /* non-critical */ });
|
|
860
|
+
|
|
842
861
|
/* ── Kick Off ── */
|
|
843
862
|
startSetup();
|
|
844
863
|
})();
|
package/src/config.js
CHANGED
|
@@ -185,22 +185,26 @@ async function loadConfig() {
|
|
|
185
185
|
|
|
186
186
|
let mergedConfig = { ...DEFAULT_CONFIG };
|
|
187
187
|
let isFirstRun = false;
|
|
188
|
+
let hasManagedConfig = false;
|
|
188
189
|
|
|
189
190
|
for (const source of sources) {
|
|
190
191
|
try {
|
|
191
192
|
const data = await fs.readFile(source.path, 'utf8');
|
|
192
193
|
const parsed = JSON.parse(data);
|
|
194
|
+
if (source.label === 'managed config' && Object.keys(parsed).length > 0) {
|
|
195
|
+
hasManagedConfig = true;
|
|
196
|
+
}
|
|
193
197
|
mergedConfig = deepMerge(mergedConfig, parsed);
|
|
194
198
|
} catch (error) {
|
|
195
199
|
if (error.code === 'ENOENT') {
|
|
196
|
-
if (source.required) {
|
|
200
|
+
if (source.required && !hasManagedConfig) {
|
|
197
201
|
// Global config doesn't exist — create it with defaults
|
|
198
202
|
const config = { ...DEFAULT_CONFIG };
|
|
199
203
|
await saveConfig(config);
|
|
200
204
|
logger.debug(`Created default config file: ${CONFIG_FILE}`);
|
|
201
205
|
isFirstRun = true;
|
|
202
206
|
}
|
|
203
|
-
// Optional files: skip silently
|
|
207
|
+
// Optional files or managed-config-present: skip silently
|
|
204
208
|
} else if (error instanceof SyntaxError) {
|
|
205
209
|
if (source.required) {
|
|
206
210
|
console.error(`Invalid configuration file at ~/.pair-review/config.json`);
|
package/src/routes/config.js
CHANGED
|
@@ -21,6 +21,7 @@ const {
|
|
|
21
21
|
} = require('../ai');
|
|
22
22
|
const { normalizeRepository } = require('../utils/paths');
|
|
23
23
|
const { isRunningViaNpx, saveConfig } = require('../config');
|
|
24
|
+
const { version } = require('../../package.json');
|
|
24
25
|
const { getAllChatProviders, getAllCachedChatAvailability } = require('../chat/chat-providers');
|
|
25
26
|
const { PRESETS } = require('../utils/comment-formatter');
|
|
26
27
|
const logger = require('../utils/logger');
|
|
@@ -42,6 +43,7 @@ router.get('/api/config', (req, res) => {
|
|
|
42
43
|
|
|
43
44
|
// Only return safe configuration values (not secrets like github_token)
|
|
44
45
|
res.json({
|
|
46
|
+
version,
|
|
45
47
|
theme: config.theme || 'light',
|
|
46
48
|
comment_button_action: config.comment_button_action || 'submit',
|
|
47
49
|
comment_format: config.comment_format || 'legacy',
|