fullcourtdefense-cli 1.7.10 → 1.7.12
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/commands/hook.js +1 -1
- package/dist/commands/local-scan.js +58 -30
- package/dist/version.json +1 -1
- package/package.json +1 -1
package/dist/commands/hook.js
CHANGED
|
@@ -504,7 +504,7 @@ async function enforceActionPolicy(ctx) {
|
|
|
504
504
|
agentName: agentNameForCall(event, payload),
|
|
505
505
|
toolName: call.toolName,
|
|
506
506
|
toolArgs: call.toolArgs,
|
|
507
|
-
argsSummary:
|
|
507
|
+
argsSummary: call.toolArgs,
|
|
508
508
|
sessionId: sessionId(payload),
|
|
509
509
|
source: 'cursor_hook',
|
|
510
510
|
...(event === 'mcp' && mcpServerName(payload) ? { mcpServer: mcpServerName(payload) } : {}),
|
|
@@ -1095,7 +1095,11 @@ function compactScanHtml(args) {
|
|
|
1095
1095
|
.eyebrow { color: #1d4ed8; font-size: 12px; font-weight: 900; letter-spacing: .08em; text-transform: uppercase; }
|
|
1096
1096
|
h1 { margin: 6px 0 8px; font-size: 26px; line-height: 1.15; }
|
|
1097
1097
|
p { color: #475569; line-height: 1.55; }
|
|
1098
|
-
.grid { display: grid; grid-template-columns: repeat(
|
|
1098
|
+
.grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; }
|
|
1099
|
+
.menuShell { display: grid; grid-template-columns: minmax(180px, 1fr) minmax(0, 3fr) minmax(160px, .85fr); gap: 14px; margin-top: 18px; align-items: stretch; }
|
|
1100
|
+
.menuGroup { border: 1px solid #dbeafe; background: rgba(255,255,255,.7); border-radius: 20px; padding: 12px; }
|
|
1101
|
+
.menuGroup.run { border-color: #bbf7d0; background: #f0fdf4; }
|
|
1102
|
+
.menuLabel { color: #475569; font-size: 11px; font-weight: 900; letter-spacing: .08em; text-transform: uppercase; margin: 0 0 9px; }
|
|
1099
1103
|
.steps { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; margin-top: 18px; }
|
|
1100
1104
|
.step { border: 1px solid #e2e8f0; background: white; color: #64748b; border-radius: 16px; padding: 12px; font-size: 12px; font-weight: 900; }
|
|
1101
1105
|
.step.active { border-color: #2563eb; background: #eff6ff; color: #1d4ed8; }
|
|
@@ -1146,15 +1150,15 @@ function compactScanHtml(args) {
|
|
|
1146
1150
|
.localTable th { color: #475569; background: #f8fafc; font-size: 11px; text-transform: uppercase; letter-spacing: .05em; }
|
|
1147
1151
|
.copyBox { margin-top: 10px; }
|
|
1148
1152
|
.hidden { display: none; }
|
|
1149
|
-
@media (max-width: 800px) { .grid, .two { grid-template-columns: 1fr; } }
|
|
1153
|
+
@media (max-width: 800px) { .grid, .two, .menuShell { grid-template-columns: 1fr; } }
|
|
1150
1154
|
</style>
|
|
1151
1155
|
</head>
|
|
1152
1156
|
<body>
|
|
1153
1157
|
<main class="wrap">
|
|
1154
1158
|
<section class="hero">
|
|
1155
|
-
<div class="eyebrow">Local
|
|
1156
|
-
<h1>
|
|
1157
|
-
<p>This compact browser UI is served by the CLI on 127.0.0.1.
|
|
1159
|
+
<div class="eyebrow">Local Web Console</div>
|
|
1160
|
+
<h1>Run local MCP tools or scan internal AI targets</h1>
|
|
1161
|
+
<p>This compact browser UI is served by the CLI on 127.0.0.1. One-off MCP tool runs stay local in this page. Red-team scans run locally too, while Shield verdicts and saved reports go outbound to Full Court Defense.</p>
|
|
1158
1162
|
<div class="auth">
|
|
1159
1163
|
<div class="eyebrow">${isConfigured ? 'Authenticated' : 'Authentication Required'}</div>
|
|
1160
1164
|
<p id="authStatus">${isConfigured
|
|
@@ -1177,17 +1181,28 @@ function compactScanHtml(args) {
|
|
|
1177
1181
|
</div>
|
|
1178
1182
|
<div class="note" id="backendStatus">Backend status: not checked yet.</div>
|
|
1179
1183
|
</div>
|
|
1180
|
-
<div class="steps">
|
|
1184
|
+
<div class="steps" id="scanSteps">
|
|
1181
1185
|
<div class="step active" id="step-dot-1">1. Connect target</div>
|
|
1182
1186
|
<div class="step" id="step-dot-2">2. Select scan type</div>
|
|
1183
1187
|
<div class="step" id="step-dot-3">3. Run red-team scan</div>
|
|
1184
1188
|
</div>
|
|
1185
|
-
<div class="
|
|
1186
|
-
<
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
|
|
1190
|
-
<
|
|
1189
|
+
<div class="menuShell" id="cards">
|
|
1190
|
+
<div class="menuGroup run">
|
|
1191
|
+
<div class="menuLabel">Run, not a scan</div>
|
|
1192
|
+
<button class="card active" data-target="runner"><b>Run MCP Tool</b><span>Call one tool through a local MCP server or protected gateway.</span></button>
|
|
1193
|
+
</div>
|
|
1194
|
+
<div class="menuGroup">
|
|
1195
|
+
<div class="menuLabel">Security scans</div>
|
|
1196
|
+
<div class="grid">
|
|
1197
|
+
<button class="card" data-target="endpoint"><b>Endpoint Scan</b><span>Red-team an internal agent/chat API.</span></button>
|
|
1198
|
+
<button class="card" data-target="rag"><b>RAG Scan</b><span>Test retrieval URL or local corpus path.</span></button>
|
|
1199
|
+
<button class="card" data-target="mcp"><b>MCP Scan</b><span>Scan tool responses and tool-abuse paths.</span></button>
|
|
1200
|
+
</div>
|
|
1201
|
+
</div>
|
|
1202
|
+
<div class="menuGroup">
|
|
1203
|
+
<div class="menuLabel">Help</div>
|
|
1204
|
+
<button class="card" data-target="help"><b>Options</b><span>Modes, formats, and when to use each local workflow.</span></button>
|
|
1205
|
+
</div>
|
|
1191
1206
|
</div>
|
|
1192
1207
|
</section>
|
|
1193
1208
|
|
|
@@ -1195,12 +1210,12 @@ function compactScanHtml(args) {
|
|
|
1195
1210
|
<div id="step-1" class="stepSection">
|
|
1196
1211
|
<div class="sectionTitle">
|
|
1197
1212
|
<div>
|
|
1198
|
-
<h2>
|
|
1199
|
-
<div class="muted">
|
|
1213
|
+
<h2 id="connectTitle">Run MCP Tool</h2>
|
|
1214
|
+
<div class="muted" id="connectSubtitle">Call one MCP tool from this machine. This is not a scan.</div>
|
|
1200
1215
|
</div>
|
|
1201
1216
|
</div>
|
|
1202
1217
|
<div id="runner-fields">
|
|
1203
|
-
<div class="note">
|
|
1218
|
+
<div class="note">This is not a scan. It runs one MCP tool call from this machine. Use a protected proxy/gateway command to show policy decisions, or a direct local MCP server for raw tool testing.</div>
|
|
1204
1219
|
<label>Saved/protected MCP server</label>
|
|
1205
1220
|
<select id="runnerServer">
|
|
1206
1221
|
<option value="">Manual connection...</option>
|
|
@@ -1208,11 +1223,11 @@ function compactScanHtml(args) {
|
|
|
1208
1223
|
<div class="two">
|
|
1209
1224
|
<div>
|
|
1210
1225
|
<label>Protected MCP HTTP/SSE URL</label>
|
|
1211
|
-
<input id="runnerMcpUrl" placeholder="http://127.0.0.1:5066/mcp" />
|
|
1226
|
+
<input id="runnerMcpUrl" placeholder="Optional: http://127.0.0.1:5066/mcp" />
|
|
1212
1227
|
</div>
|
|
1213
1228
|
<div>
|
|
1214
1229
|
<label>Tool name</label>
|
|
1215
|
-
<input id="runnerTool" placeholder="
|
|
1230
|
+
<input id="runnerTool" placeholder="Example: lookup_customer_profile" />
|
|
1216
1231
|
</div>
|
|
1217
1232
|
</div>
|
|
1218
1233
|
<div class="two">
|
|
@@ -1226,12 +1241,12 @@ function compactScanHtml(args) {
|
|
|
1226
1241
|
</div>
|
|
1227
1242
|
</div>
|
|
1228
1243
|
<div class="two">
|
|
1229
|
-
<div><label>Or stdio command</label><input id="runnerMcpCommand" placeholder="
|
|
1230
|
-
<div><label>Command args</label><input id="runnerMcpArgs" placeholder=
|
|
1244
|
+
<div><label>Or stdio command</label><input id="runnerMcpCommand" placeholder="node" /></div>
|
|
1245
|
+
<div><label>Command args</label><input id="runnerMcpArgs" placeholder="C:\\path\\to\\mcp-server.js" /></div>
|
|
1231
1246
|
</div>
|
|
1232
1247
|
<label>Tool arguments JSON</label>
|
|
1233
1248
|
<textarea id="runnerToolArgs" spellcheck="false">{
|
|
1234
|
-
"customerId": "
|
|
1249
|
+
"customerId": "RO-PB-10492"
|
|
1235
1250
|
}</textarea>
|
|
1236
1251
|
<div class="actions">
|
|
1237
1252
|
<button class="primary" id="runMcpTool">Run MCP tool</button>
|
|
@@ -1282,7 +1297,7 @@ function compactScanHtml(args) {
|
|
|
1282
1297
|
</div>
|
|
1283
1298
|
|
|
1284
1299
|
<div id="help-fields" class="hidden">
|
|
1285
|
-
<div class="note">Use
|
|
1300
|
+
<div class="note">Use Run MCP Tool for one live tool call. Use Endpoint, RAG, or MCP Scan for red-team testing. Scan reports save back to the normal web report history when a Shield key is configured.</div>
|
|
1286
1301
|
</div>
|
|
1287
1302
|
<div class="actions" id="scanActions">
|
|
1288
1303
|
<button class="secondary" id="command">Show CLI command</button>
|
|
@@ -1346,11 +1361,11 @@ function compactScanHtml(args) {
|
|
|
1346
1361
|
<b>Red-team console</b>
|
|
1347
1362
|
<span class="pill" id="consoleStatus">Ready</span>
|
|
1348
1363
|
</div>
|
|
1349
|
-
<pre id="out">Full Court Defense Local
|
|
1364
|
+
<pre id="out">Full Court Defense Local Web Console ready.
|
|
1350
1365
|
|
|
1351
|
-
|
|
1352
|
-
|
|
1353
|
-
|
|
1366
|
+
Choose Run MCP Tool for one live tool call.
|
|
1367
|
+
Choose Endpoint/RAG/MCP Scan for a local red-team scan.
|
|
1368
|
+
Local targets stay on this machine; saved scan reports go to Full Court Defense.</pre>
|
|
1354
1369
|
</div>
|
|
1355
1370
|
</div>
|
|
1356
1371
|
</section>
|
|
@@ -1364,7 +1379,20 @@ Full uses the full web attack corpus bundled with the CLI.</pre>
|
|
|
1364
1379
|
const sync = () => {
|
|
1365
1380
|
document.querySelectorAll('.card').forEach(c => c.classList.toggle('active', c.dataset.target === target));
|
|
1366
1381
|
['runner','endpoint','rag','mcp','help'].forEach(id => byId(id + '-fields').classList.toggle('hidden', id !== target));
|
|
1367
|
-
|
|
1382
|
+
const scanTarget = ['endpoint','rag','mcp'].includes(target);
|
|
1383
|
+
byId('scanSteps').classList.toggle('hidden', !scanTarget);
|
|
1384
|
+
byId('scanActions').classList.toggle('hidden', !scanTarget);
|
|
1385
|
+
byId('connectTitle').textContent = target === 'runner'
|
|
1386
|
+
? 'Run MCP Tool'
|
|
1387
|
+
: target === 'help'
|
|
1388
|
+
? 'Local workflow options'
|
|
1389
|
+
: 'Connect scan target';
|
|
1390
|
+
byId('connectSubtitle').textContent = target === 'runner'
|
|
1391
|
+
? 'Call one MCP tool from this machine. This is not a scan.'
|
|
1392
|
+
: target === 'help'
|
|
1393
|
+
? 'Choose one-off tool run or local red-team scan.'
|
|
1394
|
+
: 'Choose the internal target to red-team from this machine.';
|
|
1395
|
+
if (!scanTarget) setStep(1);
|
|
1368
1396
|
};
|
|
1369
1397
|
const setStep = next => {
|
|
1370
1398
|
step = next;
|
|
@@ -1383,7 +1411,7 @@ Full uses the full web attack corpus bundled with the CLI.</pre>
|
|
|
1383
1411
|
byId('mcpCommand').value = qs.get('mcpCommand') || '';
|
|
1384
1412
|
byId('mcpArgs').value = qs.get('mcpArgs') || '';
|
|
1385
1413
|
byId('runnerMcpUrl').value = qs.get('mcpUrl') || '';
|
|
1386
|
-
byId('runnerMcpCommand').value = qs.get('mcpCommand') || '
|
|
1414
|
+
byId('runnerMcpCommand').value = qs.get('mcpCommand') || '';
|
|
1387
1415
|
byId('runnerMcpArgs').value = qs.get('mcpArgs') || '';
|
|
1388
1416
|
byId('runnerTool').value = qs.get('mcpTool') || '';
|
|
1389
1417
|
byId('runnerOperation').value = qs.get('operation') || '';
|
|
@@ -1491,18 +1519,18 @@ Full uses the full web attack corpus bundled with the CLI.</pre>
|
|
|
1491
1519
|
byId('mcpArgs').value = '';
|
|
1492
1520
|
byId('mcpTool').value = 'all';
|
|
1493
1521
|
byId('runnerMcpUrl').value = '';
|
|
1494
|
-
byId('runnerMcpCommand').value = '
|
|
1522
|
+
byId('runnerMcpCommand').value = '';
|
|
1495
1523
|
byId('runnerMcpArgs').value = '';
|
|
1496
1524
|
byId('runnerTool').value = '';
|
|
1497
1525
|
byId('runnerOperation').value = '';
|
|
1498
|
-
byId('runnerToolArgs').value = '{\\n "customerId": "
|
|
1526
|
+
byId('runnerToolArgs').value = '{\\n "customerId": "RO-PB-10492"\\n}';
|
|
1499
1527
|
byId('mcpResultCard').classList.add('hidden');
|
|
1500
1528
|
byId('mcpResultJson').value = '';
|
|
1501
1529
|
byId('mcpResultTable').innerHTML = '';
|
|
1502
1530
|
byId('mode').value = 'quick';
|
|
1503
1531
|
byId('format').value = 'report';
|
|
1504
1532
|
clearScanSummary();
|
|
1505
|
-
setConsole('Full Court Defense Local
|
|
1533
|
+
setConsole('Full Court Defense Local Web Console ready.\\n\\nChoose Run MCP Tool for one live tool call.\\nChoose Endpoint/RAG/MCP Scan for a local red-team scan.', 'Ready');
|
|
1506
1534
|
};
|
|
1507
1535
|
byId('command').onclick = () => { setConsole(renderCommand(payload()), 'Command'); };
|
|
1508
1536
|
byId('connectNext').onclick = () => setStep(2);
|
package/dist/version.json
CHANGED