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.
@@ -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: summarizeToolCall(call.toolName, call.toolArgs),
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(5, minmax(0, 1fr)); gap: 12px; margin-top: 18px; }
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 Runner</div>
1156
- <h1>Scan internal Endpoint, RAG, and MCP from inside your organization</h1>
1157
- <p>This compact browser UI is served by the CLI on 127.0.0.1. Targets stay private. Scan traffic runs locally, while Shield verdicts and saved reports go outbound to Full Court Defense.</p>
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="grid" id="cards">
1186
- <button class="card active" data-target="runner"><b>Run MCP Tool</b><span>Direct local call through proxy</span></button>
1187
- <button class="card" data-target="endpoint"><b>Endpoint</b><span>Internal agent/chat API</span></button>
1188
- <button class="card" data-target="rag"><b>RAG</b><span>Retrieval URL or corpus path</span></button>
1189
- <button class="card" data-target="mcp"><b>MCP</b><span>Tool server via stdio or HTTP</span></button>
1190
- <button class="card" data-target="help"><b>Options</b><span>Same modes as web red-team scan</span></button>
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>Connect target</h2>
1199
- <div class="muted">Choose Endpoint, RAG, or MCP. This runs from inside your organization.</div>
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">Run one MCP tool call from this machine. Use a protected proxy/gateway command or local MCP URL. Results stay local in this browser page.</div>
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="lookup_customer" />
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="fullcourtdefense" /></div>
1230
- <div><label>Command args</label><input id="runnerMcpArgs" placeholder='mcp-gateway --mcp-command node --mcp-args "[&quot;./server.js&quot;]"' /></div>
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": "cus_123"
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 Endpoint for internal chat APIs, RAG for retrieval/corpus injection checks, and MCP for tool output and tool-abuse red-team scans. Reports save back to the normal web report history when Shield key is configured.</div>
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 Runner ready.
1364
+ <pre id="out">Full Court Defense Local Web Console ready.
1350
1365
 
1351
- Select Endpoint, RAG, or MCP above, then run a scan.
1352
- Quick uses the same critical/high attack selection as the web scanner.
1353
- Full uses the full web attack corpus bundled with the CLI.</pre>
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
- byId('scanActions').classList.toggle('hidden', target === 'runner');
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') || 'fullcourtdefense';
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 = 'fullcourtdefense';
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": "cus_123"\\n}';
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 Runner ready.\\n\\nSelect Endpoint, RAG, or MCP above, then run a scan.\\nQuick uses the same critical/high attack selection as the web scanner.\\nFull uses the full web attack corpus bundled with the CLI.', 'Ready');
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
@@ -1,3 +1,3 @@
1
1
  {
2
- "version": "1.7.10"
2
+ "version": "1.7.12"
3
3
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fullcourtdefense-cli",
3
- "version": "1.7.10",
3
+ "version": "1.7.12",
4
4
  "description": "Full Court Defense CLI — security scanning for AI agents from your terminal",
5
5
  "main": "dist/index.js",
6
6
  "bin": {