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.
@@ -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 Cursor hooks.`,
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 Cursor hooks are not installed.`,
109
+ detail: `${agentFiles.length} agent instruction/skill files found but runtime hooks are not installed.`,
110
110
  });
111
111
  }
112
112
  let score = 100;
@@ -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) } : {}),
@@ -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 existing MCP servers + Cursor action hooks. No --mcp-command or folder path needed.\x1b[0m\n');
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(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
@@ -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="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
 
@@ -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 Endpoint, RAG, or MCP. This runs from inside your organization.</div>
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">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>
@@ -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>
@@ -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 Cursor hooks.');
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 Cursor hooks for built-in Cursor actions. No folder path
122
- or --mcp-command needed. Use --hooks false to skip Cursor hooks.
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
@@ -1,3 +1,3 @@
1
1
  {
2
- "version": "1.7.9"
2
+ "version": "1.7.11"
3
3
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fullcourtdefense-cli",
3
- "version": "1.7.9",
3
+ "version": "1.7.11",
4
4
  "description": "Full Court Defense CLI — security scanning for AI agents from your terminal",
5
5
  "main": "dist/index.js",
6
6
  "bin": {