fullcourtdefense-cli 1.7.9 → 1.7.11
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/discoverBlastRadius.js +2 -2
- package/dist/commands/hook.js +1 -1
- package/dist/commands/installAll.js +1 -1
- package/dist/commands/local-scan.js +29 -14
- package/dist/commands/login.js +1 -1
- package/dist/commands/mcpGateway.js +2 -0
- package/dist/index.js +2 -2
- package/dist/version.json +1 -1
- package/package.json +1 -1
|
@@ -73,7 +73,7 @@ function computeBlastRadius(input) {
|
|
|
73
73
|
id: 'no_gateway_coverage',
|
|
74
74
|
severity: 'high',
|
|
75
75
|
title: 'No gateway on any AI client',
|
|
76
|
-
detail: `${clientsWithMcp.length} AI client(s) have MCP configured but no FCD gateway or
|
|
76
|
+
detail: `${clientsWithMcp.length} AI client(s) have MCP configured but no FCD gateway or runtime hooks.`,
|
|
77
77
|
});
|
|
78
78
|
}
|
|
79
79
|
if (countDirect(mcpServers, 'critical') >= 2) {
|
|
@@ -106,7 +106,7 @@ function computeBlastRadius(input) {
|
|
|
106
106
|
id: 'rich_instructions_no_hooks',
|
|
107
107
|
severity: 'medium',
|
|
108
108
|
title: 'Many instruction files, no runtime hooks',
|
|
109
|
-
detail: `${agentFiles.length} agent instruction/skill files found but
|
|
109
|
+
detail: `${agentFiles.length} agent instruction/skill files found but runtime hooks are not installed.`,
|
|
110
110
|
});
|
|
111
111
|
}
|
|
112
112
|
let score = 100;
|
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) } : {}),
|
|
@@ -26,7 +26,7 @@ async function installAllCommand(args, config) {
|
|
|
26
26
|
clients: args.clients || 'all',
|
|
27
27
|
};
|
|
28
28
|
console.log('\n\x1b[1m\x1b[36mFullCourtDefense — install all AI clients\x1b[0m');
|
|
29
|
-
console.log('\x1b[2mAuto-protect
|
|
29
|
+
console.log('\x1b[2mAuto-protect MCP servers across AI clients + Cursor built-in action hooks. No --mcp-command or folder path needed.\x1b[0m\n');
|
|
30
30
|
await (0, mcpGateway_1.protectAllCommand)(gatewayArgs, config);
|
|
31
31
|
if (args.hooks !== 'false') {
|
|
32
32
|
console.log('\n\x1b[1mInstalling Cursor runtime hooks…\x1b[0m');
|
|
@@ -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
|
|
@@ -1182,12 +1186,23 @@ function compactScanHtml(args) {
|
|
|
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
|
|
|
@@ -1196,11 +1211,11 @@ function compactScanHtml(args) {
|
|
|
1196
1211
|
<div class="sectionTitle">
|
|
1197
1212
|
<div>
|
|
1198
1213
|
<h2>Connect target</h2>
|
|
1199
|
-
<div class="muted">Choose
|
|
1214
|
+
<div class="muted">Choose Run MCP Tool for a single action, or choose a scan target for red-team testing.</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>
|
|
@@ -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>
|
package/dist/commands/login.js
CHANGED
|
@@ -57,5 +57,5 @@ async function loginCommand(args, config) {
|
|
|
57
57
|
console.log(` Mode: ${result.mode} (monitor-first — no blocking until you enable enforcement)`);
|
|
58
58
|
console.log(` Config: ${savedPath}`);
|
|
59
59
|
console.log('');
|
|
60
|
-
console.log('Next: \x1b[1mfullcourtdefense install-all\x1b[0m to wrap your MCP clients and
|
|
60
|
+
console.log('Next: \x1b[1mfullcourtdefense install-all\x1b[0m to wrap your MCP clients and install available runtime hooks.');
|
|
61
61
|
}
|
|
@@ -108,6 +108,7 @@ function normalizeAgentClient(value, fallback) {
|
|
|
108
108
|
'claude-code': 'claude-code',
|
|
109
109
|
'claude-desktop': 'claude-desktop',
|
|
110
110
|
codex: 'codex',
|
|
111
|
+
codec: 'codex',
|
|
111
112
|
'gemini-cli': 'gemini-cli',
|
|
112
113
|
gemini: 'gemini-cli',
|
|
113
114
|
windsurf: 'windsurf',
|
|
@@ -811,6 +812,7 @@ function parseClientList(value) {
|
|
|
811
812
|
claude_desktop: 'claude-desktop',
|
|
812
813
|
desktop: 'claude-desktop',
|
|
813
814
|
codex: 'codex',
|
|
815
|
+
codec: 'codex',
|
|
814
816
|
'gemini-cli': 'gemini-cli',
|
|
815
817
|
gemini: 'gemini-cli',
|
|
816
818
|
windsurf: 'windsurf',
|
package/dist/index.js
CHANGED
|
@@ -118,8 +118,8 @@ function printHelp() {
|
|
|
118
118
|
Shield ID, and Shield key to ~/.fullcourtdefense.yml.
|
|
119
119
|
setup Same as configure — manual fallback when not using fleet login.
|
|
120
120
|
install-all One-click: protect existing MCP servers in every AI client and
|
|
121
|
-
install
|
|
122
|
-
or --mcp-command needed. Use --hooks false to skip
|
|
121
|
+
install available runtime hooks for built-in actions. No folder path
|
|
122
|
+
or --mcp-command needed. Use --hooks false to skip runtime hooks.
|
|
123
123
|
install Alias for install-all.
|
|
124
124
|
scan Runs the scan. Use --local for inside-organization scans.
|
|
125
125
|
discover Finds MCP servers, local secrets, agent rules/skills, and machine
|
package/dist/version.json
CHANGED