@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 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: 15,
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: 10,
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.file_path || toolInput.notebook_path || toolInput.path || '';
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.file_path || toolInput.notebook_path || toolInput.path || '';
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); // e.g. ".ts"
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
- : (Array.isArray(toolInput.edits) ? toolInput.edits.map((e: any) => e?.new_string || '').join('\\n') : '');
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 + ' \\u2192 skipped (silent mode)' });
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 + ' \\u2192 clean (no CWE rules for ' + fileExt + ')' });
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('\\n');
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 + ' \\u2192 grader unavailable (' + reason + '), skipped' });
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>([^<]+)<\\/rule_id>/g) || [];
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(/<\\/?rule_id>/g, '').trim().replace(/^cwe-/, 'CWE-');
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>([^<]+)<\\/suggested_fix>/g) || [];
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(/<\\/?suggested_fix>/g, '').trim();
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 + ' \\u2192 clean (exempted: ' + cweIds.join(', ') + ')' });
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 + ' \\u2192 ' + count + ' CWE ' + label + ' (' + displayIds + ')';
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 ? '\\n' + fixLines.join('\\n') : '';
2259
- const ctx = 'CWE: ' + denyDetail + fixHint + '\\nFix all issues before retrying. Do NOT ask the user to make the edit manually \u2014 resolve the weakness in code yourself.';
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 + ' \\u2192 clean' + (verdict.reason ? ' (' + verdict.reason + ')' : '');
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) + '\\n');
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.file_path || toolInput.notebook_path || toolInput.path || '';
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.70")}`
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",