@synkro-sh/cli 1.4.70 → 1.4.71
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/dist/bootstrap.js +65 -54
- package/dist/bootstrap.js.map +1 -1
- package/package.json +1 -1
package/dist/bootstrap.js
CHANGED
|
@@ -147,11 +147,6 @@ function installCCHooks(settingsPath, config) {
|
|
|
147
147
|
command: config.editPrecheckScriptPath,
|
|
148
148
|
timeout: 30
|
|
149
149
|
},
|
|
150
|
-
{
|
|
151
|
-
type: "command",
|
|
152
|
-
command: config.cwePrecheckScriptPath,
|
|
153
|
-
timeout: 30
|
|
154
|
-
},
|
|
155
150
|
{
|
|
156
151
|
type: "command",
|
|
157
152
|
command: config.cvePrecheckScriptPath,
|
|
@@ -369,15 +364,15 @@ function installCursorHooks(hooksJsonPath, config) {
|
|
|
369
364
|
});
|
|
370
365
|
pushCcHook(h, "preToolUse", config.editPrecheckScriptPath, {
|
|
371
366
|
timeout: 15,
|
|
372
|
-
matcher: "Write|Edit|StrReplace|MultiEdit|NotebookEdit|edit_file|reapply|edit_notebook"
|
|
367
|
+
matcher: "Write|Edit|StrReplace|MultiEdit|NotebookEdit|edit_file|reapply|edit_notebook|ApplyPatch|apply_patch"
|
|
373
368
|
});
|
|
374
369
|
pushCcHook(h, "preToolUse", config.cwePrecheckScriptPath, {
|
|
375
|
-
timeout:
|
|
376
|
-
matcher: "Write|Edit|StrReplace|MultiEdit|NotebookEdit|edit_file|reapply|edit_notebook"
|
|
370
|
+
timeout: 60,
|
|
371
|
+
matcher: "Write|Edit|StrReplace|MultiEdit|NotebookEdit|edit_file|reapply|edit_notebook|ApplyPatch|apply_patch"
|
|
377
372
|
});
|
|
378
373
|
pushCcHook(h, "preToolUse", config.cvePrecheckScriptPath, {
|
|
379
|
-
timeout:
|
|
380
|
-
matcher: "Write|Edit|StrReplace|MultiEdit|NotebookEdit|edit_file|reapply|edit_notebook"
|
|
374
|
+
timeout: 20,
|
|
375
|
+
matcher: "Write|Edit|StrReplace|MultiEdit|NotebookEdit|edit_file|reapply|edit_notebook|ApplyPatch|apply_patch"
|
|
381
376
|
});
|
|
382
377
|
pushCcHook(h, "preToolUse", config.agentJudgeScriptPath, {
|
|
383
378
|
timeout: 15,
|
|
@@ -1437,11 +1432,40 @@ export function ruleMode(ruleId: string, rules: Rule[]): 'blocking' | 'audit' {
|
|
|
1437
1432
|
|
|
1438
1433
|
// \u2500\u2500\u2500 Content Reconstruction \u2500\u2500\u2500
|
|
1439
1434
|
|
|
1435
|
+
function patchTextFromToolInput(toolInput: any): string {
|
|
1436
|
+
return String(toolInput.patch ?? toolInput.content ?? toolInput.code_edit ?? toolInput.new_string ?? toolInput.input ?? toolInput.diff ?? '');
|
|
1437
|
+
}
|
|
1438
|
+
|
|
1439
|
+
function filePathFromPatch(patchText: string): string {
|
|
1440
|
+
const match = patchText.match(/^\\*\\*\\* (?:Add|Update|Delete) File:\\s*(.+)$/m);
|
|
1441
|
+
return match?.[1]?.trim() || '';
|
|
1442
|
+
}
|
|
1443
|
+
|
|
1444
|
+
function contentFromPatch(patchText: string): string {
|
|
1445
|
+
const addedOrContext = patchText
|
|
1446
|
+
.split('\\n')
|
|
1447
|
+
.filter(line => (line.startsWith('+') && !line.startsWith('+++')) || line.startsWith(' '))
|
|
1448
|
+
.map(line => line.slice(1))
|
|
1449
|
+
.join('\\n')
|
|
1450
|
+
.trim();
|
|
1451
|
+
return addedOrContext || patchText;
|
|
1452
|
+
}
|
|
1453
|
+
|
|
1454
|
+
export function filePathFromToolInput(toolInput: any): string {
|
|
1455
|
+
return toolInput.file_path || toolInput.notebook_path || toolInput.path || toolInput.target_file || filePathFromPatch(patchTextFromToolInput(toolInput));
|
|
1456
|
+
}
|
|
1457
|
+
|
|
1440
1458
|
export function reconstructContent(toolName: string, toolInput: any, filePath: string, cwd?: string): string {
|
|
1441
1459
|
const canRead = filePath && cwd && isPathUnder(filePath, cwd);
|
|
1442
1460
|
switch (toolName) {
|
|
1461
|
+
case 'ApplyPatch':
|
|
1462
|
+
case 'apply_patch':
|
|
1463
|
+
return contentFromPatch(patchTextFromToolInput(toolInput));
|
|
1443
1464
|
case 'Write':
|
|
1444
1465
|
return toolInput.content || '';
|
|
1466
|
+
case 'edit_file':
|
|
1467
|
+
case 'reapply':
|
|
1468
|
+
return toolInput.content || toolInput.new_string || toolInput.code_edit || '';
|
|
1445
1469
|
case 'Edit': {
|
|
1446
1470
|
let content = '';
|
|
1447
1471
|
try {
|
|
@@ -1475,6 +1499,7 @@ export function reconstructContent(toolName: string, toolInput: any, filePath: s
|
|
|
1475
1499
|
return content;
|
|
1476
1500
|
}
|
|
1477
1501
|
case 'NotebookEdit':
|
|
1502
|
+
case 'edit_notebook':
|
|
1478
1503
|
return toolInput.new_source || '';
|
|
1479
1504
|
case 'StrReplace':
|
|
1480
1505
|
return toolInput.new_string || toolInput.content || toolInput.code_edit || '';
|
|
@@ -1797,6 +1822,7 @@ export function dispatchFinding(
|
|
|
1797
1822
|
|
|
1798
1823
|
export const EDIT_TOOL_NAMES = new Set([
|
|
1799
1824
|
'Edit', 'Write', 'MultiEdit', 'NotebookEdit', 'StrReplace',
|
|
1825
|
+
'edit_file', 'reapply', 'edit_notebook', 'ApplyPatch', 'apply_patch',
|
|
1800
1826
|
]);
|
|
1801
1827
|
export const SHELL_TOOL_NAMES = new Set([
|
|
1802
1828
|
'Bash', 'Shell', 'Read', 'Grep', 'Glob', 'terminal', 'run_terminal_cmd', 'execute_command',
|
|
@@ -1896,7 +1922,7 @@ export function outputEmpty(): void {
|
|
|
1896
1922
|
import {
|
|
1897
1923
|
loadJwt, ensureFreshJwt, detectRepo, loadConfig, route, tag, localGrade,
|
|
1898
1924
|
parseVerdict, dispatchCapture, ruleMode, reconstructContent, isPathUnder, postWithRetry,
|
|
1899
|
-
readStdin, extractTranscript, readLastPrompt, findNearestDeps, log,
|
|
1925
|
+
readStdin, extractTranscript, readLastPrompt, findNearestDeps, filePathFromToolInput, log,
|
|
1900
1926
|
outputJson, outputEmpty, setupCursorHookSignals, isEditTool, hookSessionId, GATEWAY_URL,
|
|
1901
1927
|
type HookConfig, type Rule,
|
|
1902
1928
|
} from './_synkro-common.ts';
|
|
@@ -1923,7 +1949,7 @@ async function main() {
|
|
|
1923
1949
|
const permissionMode = payload.permission_mode || '';
|
|
1924
1950
|
const transcriptPath = payload.transcript_path || '';
|
|
1925
1951
|
|
|
1926
|
-
const filePath = toolInput
|
|
1952
|
+
const filePath = filePathFromToolInput(toolInput);
|
|
1927
1953
|
if (!filePath) { outputEmpty(); return; }
|
|
1928
1954
|
|
|
1929
1955
|
if (filePath.includes('/.synkro/hooks/')) { outputEmpty(); return; }
|
|
@@ -2105,11 +2131,11 @@ async function main() {
|
|
|
2105
2131
|
|
|
2106
2132
|
main();
|
|
2107
2133
|
`;
|
|
2108
|
-
CWE_PRECHECK_TS = `#!/usr/bin/env bun
|
|
2134
|
+
CWE_PRECHECK_TS = String.raw`#!/usr/bin/env bun
|
|
2109
2135
|
import {
|
|
2110
2136
|
loadJwt, ensureFreshJwt, detectRepo, loadConfig, cweRoute, tag,
|
|
2111
2137
|
localGradeCwe, parseVerdict, reconstructContent, readStdin, log,
|
|
2112
|
-
outputJson, outputEmpty, setupCursorHookSignals, isEditTool, hookSessionId, dispatchFinding, GATEWAY_URL,
|
|
2138
|
+
outputJson, outputEmpty, setupCursorHookSignals, isEditTool, hookSessionId, filePathFromToolInput, dispatchFinding, dispatchCapture, GATEWAY_URL,
|
|
2113
2139
|
} from './_synkro-common.ts';
|
|
2114
2140
|
import { basename, extname } from 'node:path';
|
|
2115
2141
|
|
|
@@ -2131,29 +2157,28 @@ async function main() {
|
|
|
2131
2157
|
const cwd = payload.cwd || '';
|
|
2132
2158
|
const gitRepo = detectRepo(cwd || '.');
|
|
2133
2159
|
|
|
2134
|
-
const filePath = toolInput
|
|
2160
|
+
const filePath = filePathFromToolInput(toolInput);
|
|
2135
2161
|
if (!filePath) { outputEmpty(); return; }
|
|
2136
2162
|
|
|
2137
2163
|
if (filePath.includes('/.synkro/hooks/')) { outputEmpty(); return; }
|
|
2138
2164
|
|
|
2139
2165
|
const fileShort = basename(filePath);
|
|
2140
|
-
const fileExt = extname(filePath);
|
|
2166
|
+
const fileExt = extname(filePath);
|
|
2141
2167
|
|
|
2142
2168
|
let jwt = loadJwt();
|
|
2143
2169
|
if (!jwt) { outputEmpty(); return; }
|
|
2144
2170
|
jwt = await ensureFreshJwt(jwt);
|
|
2145
2171
|
|
|
2146
|
-
// Reconstruct proposed content
|
|
2147
2172
|
const proposed = reconstructContent(toolName, toolInput, filePath, cwd);
|
|
2148
2173
|
if (!proposed) { outputEmpty(); return; }
|
|
2149
2174
|
|
|
2150
|
-
// Change-anchored window: for Edit/MultiEdit send context around the diff,
|
|
2151
|
-
// for Write send first 4000 chars (new files have patterns at the top).
|
|
2152
2175
|
let cweContent: string;
|
|
2153
|
-
if (toolName === 'Edit' || toolName === 'MultiEdit') {
|
|
2154
|
-
const newStr = toolName === 'Edit'
|
|
2176
|
+
if (toolName === 'Edit' || toolName === 'MultiEdit' || toolName === 'edit_file' || toolName === 'reapply' || toolName === 'ApplyPatch' || toolName === 'apply_patch') {
|
|
2177
|
+
const newStr = toolName === 'Edit' || toolName === 'edit_file' || toolName === 'reapply'
|
|
2155
2178
|
? (toolInput.new_string || '')
|
|
2156
|
-
:
|
|
2179
|
+
: toolName === 'ApplyPatch' || toolName === 'apply_patch'
|
|
2180
|
+
? (toolInput.patch || toolInput.content || toolInput.code_edit || '')
|
|
2181
|
+
: (Array.isArray(toolInput.edits) ? toolInput.edits.map((e: any) => e?.new_string || '').join('\n') : '');
|
|
2157
2182
|
const changeIdx = proposed.indexOf(newStr);
|
|
2158
2183
|
if (changeIdx >= 0 && proposed.length > 6000) {
|
|
2159
2184
|
const start = Math.max(0, changeIdx - 2000);
|
|
@@ -2169,7 +2194,6 @@ async function main() {
|
|
|
2169
2194
|
const config = await loadConfig(jwt);
|
|
2170
2195
|
const rt = await cweRoute(config);
|
|
2171
2196
|
|
|
2172
|
-
// Build set of exempted CWE IDs for this file path
|
|
2173
2197
|
const exemptedCwes = new Set<string>();
|
|
2174
2198
|
for (const ex of config.scanExemptions) {
|
|
2175
2199
|
if (ex.cwe_id && filePath.includes(ex.path)) {
|
|
@@ -2177,14 +2201,13 @@ async function main() {
|
|
|
2177
2201
|
}
|
|
2178
2202
|
}
|
|
2179
2203
|
if (config.silent) {
|
|
2180
|
-
outputJson({ systemMessage: '[synkro:' + rt + ':cweScan] ' + fileShort + '
|
|
2204
|
+
outputJson({ systemMessage: '[synkro:' + rt + ':cweScan] ' + fileShort + ' \u2192 skipped (silent mode)' });
|
|
2181
2205
|
return;
|
|
2182
2206
|
}
|
|
2183
2207
|
|
|
2184
2208
|
const cweTag = '[synkro:' + rt + ':cweScan]';
|
|
2185
2209
|
|
|
2186
2210
|
if (rt === 'local') {
|
|
2187
|
-
// \u2500\u2500\u2500 Local CWE grading on channel 2 (port 8930) \u2500\u2500\u2500
|
|
2188
2211
|
let cweRules: any[] = [];
|
|
2189
2212
|
try {
|
|
2190
2213
|
const resp = await fetch(GATEWAY_URL + '/api/v1/cwe-rules?ext=' + encodeURIComponent(fileExt), {
|
|
@@ -2196,7 +2219,7 @@ async function main() {
|
|
|
2196
2219
|
} catch {}
|
|
2197
2220
|
|
|
2198
2221
|
if (cweRules.length === 0) {
|
|
2199
|
-
outputJson({ systemMessage: cweTag + ' ' + fileShort + '
|
|
2222
|
+
outputJson({ systemMessage: cweTag + ' ' + fileShort + ' \u2192 clean (no CWE rules for ' + fileExt + ')' });
|
|
2200
2223
|
return;
|
|
2201
2224
|
}
|
|
2202
2225
|
|
|
@@ -2207,38 +2230,37 @@ async function main() {
|
|
|
2207
2230
|
'',
|
|
2208
2231
|
'CWE rules to check against:',
|
|
2209
2232
|
JSON.stringify(cweRules),
|
|
2210
|
-
].join('
|
|
2233
|
+
].join('\n');
|
|
2211
2234
|
|
|
2212
2235
|
let gradeResp: string;
|
|
2213
2236
|
try {
|
|
2214
2237
|
gradeResp = await localGradeCwe(graderPrompt);
|
|
2215
2238
|
} catch (gradeErr: any) {
|
|
2216
2239
|
const reason = gradeErr?.message || String(gradeErr);
|
|
2217
|
-
outputJson({ systemMessage: cweTag + ' ' + fileShort + '
|
|
2240
|
+
outputJson({ systemMessage: cweTag + ' ' + fileShort + ' \u2192 grader unavailable (' + reason + '), skipped' });
|
|
2218
2241
|
return;
|
|
2219
2242
|
}
|
|
2220
2243
|
|
|
2221
2244
|
const verdict = parseVerdict(gradeResp);
|
|
2222
2245
|
|
|
2223
2246
|
if (!verdict.ok) {
|
|
2224
|
-
const ruleIdMatches = gradeResp.match(/<rule_id>([^<]+)
|
|
2247
|
+
const ruleIdMatches = gradeResp.match(/<rule_id>([^<]+)<\/rule_id>/g) || [];
|
|
2225
2248
|
const cweIds: string[] = [];
|
|
2226
2249
|
for (const match of ruleIdMatches.slice(0, 5)) {
|
|
2227
|
-
const id = match.replace(
|
|
2250
|
+
const id = match.replace(/<\/?rule_id>/g, '').trim().replace(/^cwe-/, 'CWE-');
|
|
2228
2251
|
if (id && !cweIds.includes(id)) cweIds.push(id);
|
|
2229
2252
|
}
|
|
2230
2253
|
|
|
2231
|
-
const fixMatches = gradeResp.match(/<suggested_fix>([^<]+)
|
|
2254
|
+
const fixMatches = gradeResp.match(/<suggested_fix>([^<]+)<\/suggested_fix>/g) || [];
|
|
2232
2255
|
const fixes: Record<string, string> = {};
|
|
2233
2256
|
for (let i = 0; i < Math.min(cweIds.length, fixMatches.length); i++) {
|
|
2234
|
-
fixes[cweIds[i]] = fixMatches[i].replace(
|
|
2257
|
+
fixes[cweIds[i]] = fixMatches[i].replace(/<\/?suggested_fix>/g, '').trim();
|
|
2235
2258
|
}
|
|
2236
2259
|
|
|
2237
|
-
// Filter out exempted CWEs for this file
|
|
2238
2260
|
const activeCweIds = cweIds.filter(id => !exemptedCwes.has(id.toUpperCase()));
|
|
2239
2261
|
|
|
2240
2262
|
if (activeCweIds.length === 0) {
|
|
2241
|
-
outputJson({ systemMessage: cweTag + ' ' + fileShort + '
|
|
2263
|
+
outputJson({ systemMessage: cweTag + ' ' + fileShort + ' \u2192 clean (exempted: ' + cweIds.join(', ') + ')' });
|
|
2242
2264
|
return;
|
|
2243
2265
|
}
|
|
2244
2266
|
|
|
@@ -2250,13 +2272,13 @@ async function main() {
|
|
|
2250
2272
|
const displayIds = activeCweIds.slice(0, 3).join(', ');
|
|
2251
2273
|
const count = activeCweIds.length;
|
|
2252
2274
|
const label = count === 1 ? 'match' : 'matches';
|
|
2253
|
-
const cweMsg = cweTag + ' ' + fileShort + '
|
|
2275
|
+
const cweMsg = cweTag + ' ' + fileShort + ' \u2192 ' + count + ' CWE ' + label + ' (' + displayIds + ')';
|
|
2254
2276
|
const denyDetail = '[' + displayIds + '] ' + (verdict.reason || 'code weakness detected');
|
|
2255
2277
|
const fixLines = activeCweIds
|
|
2256
2278
|
.filter(id => fixes[id])
|
|
2257
2279
|
.map(id => '[' + id + '] Fix: ' + fixes[id]);
|
|
2258
|
-
const fixHint = fixLines.length > 0 ? '
|
|
2259
|
-
const ctx = 'CWE: ' + denyDetail + fixHint + '
|
|
2280
|
+
const fixHint = fixLines.length > 0 ? '\n' + fixLines.join('\n') : '';
|
|
2281
|
+
const ctx = 'CWE: ' + denyDetail + fixHint + '\nFix all issues before retrying. Do NOT ask the user to make the edit manually — resolve the weakness in code yourself.';
|
|
2260
2282
|
|
|
2261
2283
|
for (const cweId of activeCweIds) {
|
|
2262
2284
|
dispatchFinding(jwt, {
|
|
@@ -2299,16 +2321,14 @@ async function main() {
|
|
|
2299
2321
|
reasoning: verdict.reason || 'no CWE weaknesses detected',
|
|
2300
2322
|
});
|
|
2301
2323
|
|
|
2302
|
-
const cleanMsg = cweTag + ' ' + fileShort + '
|
|
2324
|
+
const cleanMsg = cweTag + ' ' + fileShort + ' \u2192 clean' + (verdict.reason ? ' (' + verdict.reason + ')' : '');
|
|
2303
2325
|
outputJson({ systemMessage: cleanMsg, hookSpecificOutput: { hookEventName: 'PreToolUse', additionalContext: cleanMsg } });
|
|
2304
2326
|
return;
|
|
2305
2327
|
}
|
|
2306
2328
|
|
|
2307
|
-
// \u2500\u2500\u2500 Cloud CWE grading (handled by server) \u2500\u2500\u2500
|
|
2308
|
-
// Cloud edit precheck already includes CWE \u2014 this hook is a no-op for cloud.
|
|
2309
2329
|
outputEmpty();
|
|
2310
2330
|
} catch (err) {
|
|
2311
|
-
process.stderr.write('[synkro] cweGuard error: ' + String(err) + '
|
|
2331
|
+
process.stderr.write('[synkro] cweGuard error: ' + String(err) + '\n');
|
|
2312
2332
|
outputEmpty();
|
|
2313
2333
|
}
|
|
2314
2334
|
}
|
|
@@ -2318,7 +2338,7 @@ main();
|
|
|
2318
2338
|
CVE_PRECHECK_TS = `#!/usr/bin/env bun
|
|
2319
2339
|
import {
|
|
2320
2340
|
loadJwt, ensureFreshJwt, detectRepo, loadConfig, route, tag,
|
|
2321
|
-
reconstructContent, readStdin, findNearestDeps, log,
|
|
2341
|
+
reconstructContent, readStdin, findNearestDeps, filePathFromToolInput, log,
|
|
2322
2342
|
outputJson, outputEmpty, setupCursorHookSignals, isEditTool, hookSessionId, dispatchFinding, dispatchCapture, GATEWAY_URL,
|
|
2323
2343
|
} from './_synkro-common.ts';
|
|
2324
2344
|
import { basename } from 'node:path';
|
|
@@ -2354,7 +2374,7 @@ async function main() {
|
|
|
2354
2374
|
const cwd = payload.cwd || '';
|
|
2355
2375
|
const gitRepo = detectRepo(cwd || '.');
|
|
2356
2376
|
|
|
2357
|
-
const filePath = toolInput
|
|
2377
|
+
const filePath = filePathFromToolInput(toolInput);
|
|
2358
2378
|
if (!filePath) { outputEmpty(); return; }
|
|
2359
2379
|
|
|
2360
2380
|
if (filePath.includes('/.synkro/hooks/')) { outputEmpty(); return; }
|
|
@@ -3924,7 +3944,7 @@ async function main() {
|
|
|
3924
3944
|
if (!input.trim()) finish();
|
|
3925
3945
|
|
|
3926
3946
|
const payload = JSON.parse(input);
|
|
3927
|
-
const filePath = payload.file_path || '';
|
|
3947
|
+
const filePath = payload.file_path || payload.path || payload.target_file || '';
|
|
3928
3948
|
if (!filePath) finish();
|
|
3929
3949
|
|
|
3930
3950
|
const cwd = payload.cwd || payload.workspace_roots?.[0] || '';
|
|
@@ -6229,7 +6249,6 @@ function writeHookScripts() {
|
|
|
6229
6249
|
const bashScriptPath = join11(HOOKS_DIR, "cc-bash-judge.ts");
|
|
6230
6250
|
const bashFollowupScriptPath = join11(HOOKS_DIR, "cc-bash-followup.ts");
|
|
6231
6251
|
const editPrecheckScriptPath = join11(HOOKS_DIR, "cc-edit-precheck.ts");
|
|
6232
|
-
const cwePrecheckScriptPath = join11(HOOKS_DIR, "cc-cwe-precheck.ts");
|
|
6233
6252
|
const cvePrecheckScriptPath = join11(HOOKS_DIR, "cc-cve-precheck.ts");
|
|
6234
6253
|
const planJudgeScriptPath = join11(HOOKS_DIR, "cc-plan-judge.ts");
|
|
6235
6254
|
const agentJudgeScriptPath = join11(HOOKS_DIR, "cc-agent-judge.ts");
|
|
@@ -6245,7 +6264,6 @@ function writeHookScripts() {
|
|
|
6245
6264
|
writeFileSync7(bashScriptPath, BASH_JUDGE_TS, "utf-8");
|
|
6246
6265
|
writeFileSync7(bashFollowupScriptPath, BASH_FOLLOWUP_TS, "utf-8");
|
|
6247
6266
|
writeFileSync7(editPrecheckScriptPath, EDIT_PRECHECK_TS, "utf-8");
|
|
6248
|
-
writeFileSync7(cwePrecheckScriptPath, CWE_PRECHECK_TS, "utf-8");
|
|
6249
6267
|
writeFileSync7(cvePrecheckScriptPath, CVE_PRECHECK_TS, "utf-8");
|
|
6250
6268
|
writeFileSync7(planJudgeScriptPath, PLAN_JUDGE_TS, "utf-8");
|
|
6251
6269
|
writeFileSync7(agentJudgeScriptPath, AGENT_JUDGE_TS, "utf-8");
|
|
@@ -7061,7 +7079,6 @@ console.log(\`[synkro] local MCP guardrails server listening on http://127.0.0.1
|
|
|
7061
7079
|
chmodSync2(bashScriptPath, 493);
|
|
7062
7080
|
chmodSync2(bashFollowupScriptPath, 493);
|
|
7063
7081
|
chmodSync2(editPrecheckScriptPath, 493);
|
|
7064
|
-
chmodSync2(cwePrecheckScriptPath, 493);
|
|
7065
7082
|
chmodSync2(cvePrecheckScriptPath, 493);
|
|
7066
7083
|
chmodSync2(planJudgeScriptPath, 493);
|
|
7067
7084
|
chmodSync2(agentJudgeScriptPath, 493);
|
|
@@ -7078,7 +7095,6 @@ console.log(\`[synkro] local MCP guardrails server listening on http://127.0.0.1
|
|
|
7078
7095
|
bashScript: bashScriptPath,
|
|
7079
7096
|
bashFollowupScript: bashFollowupScriptPath,
|
|
7080
7097
|
editPrecheckScript: editPrecheckScriptPath,
|
|
7081
|
-
cwePrecheckScript: cwePrecheckScriptPath,
|
|
7082
7098
|
cvePrecheckScript: cvePrecheckScriptPath,
|
|
7083
7099
|
planJudgeScript: planJudgeScriptPath,
|
|
7084
7100
|
agentJudgeScript: agentJudgeScriptPath,
|
|
@@ -7120,7 +7136,7 @@ function writeConfigEnv(opts) {
|
|
|
7120
7136
|
`SYNKRO_CREDENTIALS_PATH=${shellQuoteSingle(credsPath)}`,
|
|
7121
7137
|
`SYNKRO_TIER=${shellQuoteSingle(safeTier)}`,
|
|
7122
7138
|
`SYNKRO_INFERENCE=${shellQuoteSingle(safeInference)}`,
|
|
7123
|
-
`SYNKRO_VERSION=${shellQuoteSingle("1.4.
|
|
7139
|
+
`SYNKRO_VERSION=${shellQuoteSingle("1.4.71")}`
|
|
7124
7140
|
];
|
|
7125
7141
|
if (safeSynkroBin) lines.push(`SYNKRO_CLI_BIN=${shellQuoteSingle(safeSynkroBin)}`);
|
|
7126
7142
|
if (safeUserId) lines.push(`SYNKRO_USER_ID=${shellQuoteSingle(safeUserId)}`);
|
|
@@ -7249,7 +7265,6 @@ function isAlreadyInstalled() {
|
|
|
7249
7265
|
join11(HOOKS_DIR, "cc-bash-judge.ts"),
|
|
7250
7266
|
join11(HOOKS_DIR, "cc-bash-followup.ts"),
|
|
7251
7267
|
join11(HOOKS_DIR, "cc-edit-precheck.ts"),
|
|
7252
|
-
join11(HOOKS_DIR, "cc-cwe-precheck.ts"),
|
|
7253
7268
|
join11(HOOKS_DIR, "cc-cve-precheck.ts"),
|
|
7254
7269
|
join11(HOOKS_DIR, "cc-plan-judge.ts"),
|
|
7255
7270
|
join11(HOOKS_DIR, "cc-stop-summary.ts"),
|
|
@@ -7556,7 +7571,6 @@ async function installCommand(opts = {}) {
|
|
|
7556
7571
|
bashJudgeScriptPath: scripts.bashScript,
|
|
7557
7572
|
bashFollowupScriptPath: scripts.bashFollowupScript,
|
|
7558
7573
|
editPrecheckScriptPath: scripts.editPrecheckScript,
|
|
7559
|
-
cwePrecheckScriptPath: scripts.cwePrecheckScript,
|
|
7560
7574
|
cvePrecheckScriptPath: scripts.cvePrecheckScript,
|
|
7561
7575
|
planJudgeScriptPath: scripts.planJudgeScript,
|
|
7562
7576
|
agentJudgeScriptPath: scripts.agentJudgeScript,
|
|
@@ -7574,7 +7588,6 @@ async function installCommand(opts = {}) {
|
|
|
7574
7588
|
editCaptureScriptPath: scripts.cursorEditCaptureScript,
|
|
7575
7589
|
bashFollowupScriptPath: scripts.bashFollowupScript,
|
|
7576
7590
|
editPrecheckScriptPath: scripts.editPrecheckScript,
|
|
7577
|
-
cwePrecheckScriptPath: scripts.cwePrecheckScript,
|
|
7578
7591
|
cvePrecheckScriptPath: scripts.cvePrecheckScript,
|
|
7579
7592
|
planJudgeScriptPath: scripts.planJudgeScript,
|
|
7580
7593
|
agentJudgeScriptPath: scripts.agentJudgeScript,
|
|
@@ -8207,7 +8220,6 @@ async function statusCommand() {
|
|
|
8207
8220
|
"cc-bash-judge.ts",
|
|
8208
8221
|
"cc-bash-followup.ts",
|
|
8209
8222
|
"cc-edit-precheck.ts",
|
|
8210
|
-
"cc-cwe-precheck.ts",
|
|
8211
8223
|
"cc-cve-precheck.ts",
|
|
8212
8224
|
"cc-plan-judge.ts",
|
|
8213
8225
|
"cc-agent-judge.ts",
|
|
@@ -8221,7 +8233,6 @@ async function statusCommand() {
|
|
|
8221
8233
|
"cursor-bash-judge.ts",
|
|
8222
8234
|
"cursor-edit-capture.ts",
|
|
8223
8235
|
"cc-edit-precheck.ts",
|
|
8224
|
-
"cc-cwe-precheck.ts",
|
|
8225
8236
|
"cc-cve-precheck.ts",
|
|
8226
8237
|
"cc-agent-judge.ts",
|
|
8227
8238
|
"cc-plan-judge.ts",
|