ssh-mcp-pro 1.4.0 → 1.4.3

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.
Files changed (39) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/MIGRATION.md +2 -2
  3. package/README.md +25 -14
  4. package/SECURITY_DECISIONS.md +19 -0
  5. package/dist/config-security-env.d.ts +1 -1
  6. package/dist/config-security-env.d.ts.map +1 -1
  7. package/dist/config-types.d.ts +82 -0
  8. package/dist/config-types.d.ts.map +1 -0
  9. package/dist/config-types.js +2 -0
  10. package/dist/config-types.js.map +1 -0
  11. package/dist/config.d.ts +2 -81
  12. package/dist/config.d.ts.map +1 -1
  13. package/dist/config.js.map +1 -1
  14. package/dist/index.js +1 -1
  15. package/dist/index.js.map +1 -1
  16. package/dist/mcp.d.ts +1 -1
  17. package/dist/mcp.js +1 -1
  18. package/dist/remote/agent-cli.d.ts.map +1 -1
  19. package/dist/remote/agent-cli.js +62 -9
  20. package/dist/remote/agent-cli.js.map +1 -1
  21. package/dist/remote/web-dashboard-html.d.ts.map +1 -1
  22. package/dist/remote/web-dashboard-html.js +39 -21
  23. package/dist/remote/web-dashboard-html.js.map +1 -1
  24. package/dist/remote/web-dashboard-styles.d.ts +1 -1
  25. package/dist/remote/web-dashboard-styles.d.ts.map +1 -1
  26. package/dist/remote/web-dashboard-styles.js +25 -6
  27. package/dist/remote/web-dashboard-styles.js.map +1 -1
  28. package/docs/development/local-setup.md +1 -1
  29. package/docs/development/release-process.md +5 -5
  30. package/docs/docker.md +4 -4
  31. package/docs/openssf-evidence.md +11 -7
  32. package/docs/openssf-gap-analysis.md +7 -8
  33. package/docs/reference/cli.md +17 -6
  34. package/docs/reference/compatibility.md +1 -1
  35. package/docs/tutorials/getting-started.md +1 -1
  36. package/mcp.json +1 -1
  37. package/package.json +3 -3
  38. package/registry/ssh-mcp-pro/mcp.json +1 -1
  39. package/server.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"agent-cli.js","sourceRoot":"","sources":["../../src/remote/agent-cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-cli.js","sourceRoot":"","sources":["../../src/remote/agent-cli.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"web-dashboard-html.d.ts","sourceRoot":"","sources":["../../src/remote/web-dashboard-html.ts"],"names":[],"mappings":"AACA,wBAAgB,mBAAmB,CACjC,iBAAiB,EAAE,MAAM,EACzB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,GACpB,MAAM,CA8aR"}
1
+ {"version":3,"file":"web-dashboard-html.d.ts","sourceRoot":"","sources":["../../src/remote/web-dashboard-html.ts"],"names":[],"mappings":"AACA,wBAAgB,mBAAmB,CACjC,iBAAiB,EAAE,MAAM,EACzB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,GACpB,MAAM,CAgcR"}
@@ -68,7 +68,7 @@ export function renderDashboardHtml(initialUserBase64, mcpUrlJson, publicUrlJson
68
68
  <div style="display:flex; justify-content:space-between; align-items:center; flex-wrap:wrap; gap:16px;">
69
69
  <div>
70
70
  <div style="font-size:12px; text-transform:uppercase; font-weight:700; color:var(--blue); margin-bottom:4px;">Remote MCP Endpoint</div>
71
- <div style="font-family:var(--font-mono); font-size:15px; color:#fff; font-weight:600;">\${MCP_URL}</div>
71
+ <div style="font-family:var(--font-mono); font-size:15px; color:#fff; font-weight:600; overflow-wrap:anywhere;">\${MCP_URL}</div>
72
72
  <div style="font-size:13px; color:var(--text-muted); margin-top:4px;">Transport: Streamable HTTP • Auth: OAuth 2.1 PKCE (RFC 9728 & RFC 8414)</div>
73
73
  </div>
74
74
  <button class="btn btn-primary" onclick="switchTab('add-device')">➕ Add New Device</button>
@@ -102,7 +102,7 @@ export function renderDashboardHtml(initialUserBase64, mcpUrlJson, publicUrlJson
102
102
  <div class="hero">
103
103
  <div style="font-size: 48px; margin-bottom: 12px;">🛡️⚡</div>
104
104
  <h1>ssh-mcp-pro Gateway</h1>
105
- <p>Zero-Trust Model Context Protocol SSH Gateway with policy controls, biometric & OAuth 2.1 authentication, and dual local/remote agent support.</p>
105
+ <p>Zero-Trust Model Context Protocol SSH Gateway with policy controls, OAuth 2.1 authentication, and dual local/remote agent support.</p>
106
106
  <div class="auth-buttons">
107
107
  <a href="/auth/login/google" class="auth-btn auth-btn-google">
108
108
  <svg width="20" height="20" viewBox="0 0 24 24"><path fill="#EA4335" d="M12 5c1.7 0 3 .7 3.9 1.5l2.9-2.9C17 2 14.7 1 12 1 7.5 1 3.7 3.6 1.9 7.3l3.7 2.9C6.5 7.4 9 5 12 5z"/><path fill="#4285F4" d="M23.5 12.3c0-.8-.1-1.6-.2-2.3H12v4.5h6.5c-.3 1.5-1.1 2.8-2.4 3.7l3.7 2.9c2.2-2 3.7-5 3.7-8.8z"/><path fill="#FBBC05" d="M5.6 14.8c-.2-.7-.4-1.5-.4-2.3s.2-1.6.4-2.3L1.9 7.3C.7 9.7 0 12.3 0 15.2c0 2.8.7 5.5 1.9 7.8l3.7-2.9z"/><path fill="#34A853" d="M12 23.5c3.2 0 6-1.1 8-3l-3.7-2.9c-1.1.7-2.5 1.2-4.3 1.2-3 0-5.5-2.4-6.4-5.2L1.9 16.5C3.7 20.3 7.5 23.5 12 23.5z"/></svg>
@@ -122,8 +122,8 @@ export function renderDashboardHtml(initialUserBase64, mcpUrlJson, publicUrlJson
122
122
  <div class="code-box">\${MCP_URL}</div>
123
123
  </div>
124
124
  <div class="card">
125
- <h3 style="margin-bottom:8px; color:#7ee787;">💻 Local Stdio Mode (Unrestricted)</h3>
126
- <p style="font-size:14px; color:var(--text-muted); margin-bottom:12px;">No cloud dependencies, zero limits. Run ssh-mcp-pro locally with your own OpenSSH keys and config.</p>
125
+ <h3 style="margin-bottom:8px; color:#7ee787;">💻 Local Stdio Mode (Policy-Controlled)</h3>
126
+ <p style="font-size:14px; color:var(--text-muted); margin-bottom:12px;">Run ssh-mcp-pro locally with your own OpenSSH keys and host policy. No cloud account required.</p>
127
127
  <div class="code-box">npx ssh-mcp-pro</div>
128
128
  </div>
129
129
  </div>
@@ -158,7 +158,7 @@ export function renderDashboardHtml(initialUserBase64, mcpUrlJson, publicUrlJson
158
158
  </div>
159
159
  </div>
160
160
  </div>
161
- <div style="display:flex; gap:8px; align-items:center;">
161
+ <div class="device-actions">
162
162
  <select aria-label="Policy for \${escapeHtml(dev.alias)}" class="btn btn-outline btn-sm" onchange="changePolicy('\${dev.id}', this.value)" \${dev.status === 'revoked' ? 'disabled' : ''}>
163
163
  <option value="read-only" \${dev.profile === 'read-only' ? 'selected' : ''}>Profile: Read-Only</option>
164
164
  <option value="operations" \${dev.profile === 'operations' ? 'selected' : ''}>Profile: Operations</option>
@@ -199,7 +199,7 @@ export function renderDashboardHtml(initialUserBase64, mcpUrlJson, publicUrlJson
199
199
  <div style="margin-bottom:16px;">
200
200
  <div style="font-weight:600; font-size:13px; color:var(--blue); margin-bottom:4px;">🐧 Linux (systemd)</div>
201
201
  <div class="code-box">
202
- <button class="copy-btn" onclick="copySnippet('cmdLinux')">Copy</button>
202
+ <button type="button" class="copy-btn" aria-live="polite" aria-label="Copy Linux install command" onclick="copySnippet('cmdLinux')">Copy</button>
203
203
  <span id="cmdLinux"></span>
204
204
  </div>
205
205
  </div>
@@ -207,7 +207,7 @@ export function renderDashboardHtml(initialUserBase64, mcpUrlJson, publicUrlJson
207
207
  <div style="margin-bottom:16px;">
208
208
  <div style="font-weight:600; font-size:13px; color:var(--blue); margin-bottom:4px;">🪟 Windows (PowerShell)</div>
209
209
  <div class="code-box">
210
- <button class="copy-btn" onclick="copySnippet('cmdWindows')">Copy</button>
210
+ <button type="button" class="copy-btn" aria-live="polite" aria-label="Copy Windows install command" onclick="copySnippet('cmdWindows')">Copy</button>
211
211
  <span id="cmdWindows"></span>
212
212
  </div>
213
213
  </div>
@@ -215,7 +215,7 @@ export function renderDashboardHtml(initialUserBase64, mcpUrlJson, publicUrlJson
215
215
  <div>
216
216
  <div style="font-weight:600; font-size:13px; color:var(--blue); margin-bottom:4px;">📦 Node CLI (Linux/macOS)</div>
217
217
  <div class="code-box">
218
- <button class="copy-btn" onclick="copySnippet('cmdNpm')">Copy</button>
218
+ <button type="button" class="copy-btn" aria-live="polite" aria-label="Copy Node install command" onclick="copySnippet('cmdNpm')">Copy</button>
219
219
  <span id="cmdNpm"></span>
220
220
  </div>
221
221
  </div>
@@ -234,11 +234,11 @@ export function renderDashboardHtml(initialUserBase64, mcpUrlJson, publicUrlJson
234
234
  </div>
235
235
  <p style="font-size:13px; color:var(--text-muted); margin-bottom:12px;">For remote access in Claude or Claude Desktop: <strong>Customize &gt; Connectors &gt; Add custom connector</strong>, enter this URL, then sign in. Local Desktop servers still use <code>claude_desktop_config.json</code>.</p>
236
236
  <div style="font-size:12px; font-weight:700; color:var(--blue);">Claude remote custom connector URL:</div>
237
- <div class="code-box"><button class="copy-btn" onclick="copySnippet('cfgClaudeRemote')">Copy</button><span id="cfgClaudeRemote">\${MCP_URL}</span></div>
237
+ <div class="code-box"><button type="button" class="copy-btn" aria-live="polite" aria-label="Copy Claude remote MCP URL" onclick="copySnippet('cfgClaudeRemote')">Copy</button><span id="cfgClaudeRemote">\${MCP_URL}</span></div>
238
238
  <div style="font-size:12px; font-weight:700; color:var(--blue); margin-top:12px;">Claude Code remote (run in a terminal):</div>
239
- <div class="code-box"><button class="copy-btn" onclick="copySnippet('cfgClaudeCode')">Copy</button><span id="cfgClaudeCode">claude mcp add --transport http ssh-mcp-pro \${MCP_URL}</span></div>
239
+ <div class="code-box"><button type="button" class="copy-btn" aria-live="polite" aria-label="Copy Claude Code command" onclick="copySnippet('cfgClaudeCode')">Copy</button><span id="cfgClaudeCode">claude mcp add --transport http ssh-mcp-pro \${MCP_URL}</span></div>
240
240
  <div style="font-size:12px; font-weight:700; color:#7ee787; margin-top:12px;">Claude Desktop local stdio:</div>
241
- <div class="code-box"><button class="copy-btn" onclick="copySnippet('cfgClaudeLocal')">Copy</button><span id="cfgClaudeLocal">{\\n "mcpServers": {\\n "ssh-mcp-pro": {\\n "command": "ssh-mcp-pro",\\n "args": []\\n }\\n }\\n}</span></div>
241
+ <div class="code-box"><button type="button" class="copy-btn" aria-live="polite" aria-label="Copy Claude Desktop config" onclick="copySnippet('cfgClaudeLocal')">Copy</button><span id="cfgClaudeLocal">{\\n "mcpServers": {\\n "ssh-mcp-pro": {\\n "command": "ssh-mcp-pro",\\n "args": []\\n }\\n }\\n}</span></div>
242
242
  </div>
243
243
 
244
244
  <div class="card">
@@ -247,7 +247,7 @@ export function renderDashboardHtml(initialUserBase64, mcpUrlJson, publicUrlJson
247
247
  <h3>ChatGPT MCP Plugin</h3>
248
248
  </div>
249
249
  <p style="font-size:13px; color:var(--text-muted); margin-bottom:12px;">In supported ChatGPT workspaces, open <strong>Plugins &gt; Add custom MCP server</strong>, paste the URL below and configure OAuth. Custom GPT Actions are a separate OpenAPI-based feature.</p>
250
- <div class="code-box"><button class="copy-btn" onclick="copySnippet('cfgChatGptMcp')">Copy</button><span id="cfgChatGptMcp">\${MCP_URL}</span></div>
250
+ <div class="code-box"><button type="button" class="copy-btn" aria-live="polite" aria-label="Copy ChatGPT MCP URL" onclick="copySnippet('cfgChatGptMcp')">Copy</button><span id="cfgChatGptMcp">\${MCP_URL}</span></div>
251
251
  </div>
252
252
 
253
253
  <div class="card">
@@ -256,7 +256,7 @@ export function renderDashboardHtml(initialUserBase64, mcpUrlJson, publicUrlJson
256
256
  <h3>Gemini API (Interactions)</h3>
257
257
  </div>
258
258
  <p style="font-size:13px; color:var(--text-muted); margin-bottom:12px;">Use this Remote MCP tool definition with the Gemini API Interactions endpoint. Configure a valid OAuth bearer credential separately (for example via managed agent credentials); the URL alone does not authenticate. This is not a Gemini web-extension manifest. <a href="https://ai.google.dev/gemini-api/docs/function-calling" target="_blank" rel="noopener noreferrer">Gemini Remote MCP docs</a>.</p>
259
- <div class="code-box"><button class="copy-btn" onclick="copySnippet('cfgGemini')">Copy</button><span id="cfgGemini">{\\n "type": "mcp_server",\\n "name": "ssh_mcp_pro",\\n "url": "\${MCP_URL}"\\n}</span></div>
259
+ <div class="code-box"><button type="button" class="copy-btn" aria-live="polite" aria-label="Copy Gemini MCP config" onclick="copySnippet('cfgGemini')">Copy</button><span id="cfgGemini">{\\n "type": "mcp_server",\\n "name": "ssh_mcp_pro",\\n "url": "\${MCP_URL}"\\n}</span></div>
260
260
  </div>
261
261
 
262
262
  <div class="card">
@@ -266,13 +266,13 @@ export function renderDashboardHtml(initialUserBase64, mcpUrlJson, publicUrlJson
266
266
  </div>
267
267
  <p style="font-size:13px; color:var(--text-muted); margin-bottom:12px;">Copy the configuration for your chosen client. VS Code/Copilot portable files use <code>mcpServers</code>; the VS Code workspace format uses <code>servers</code>. Sign in through your client&#39;s OAuth flow.</p>
268
268
  <div style="font-size:12px; font-weight:700; color:var(--blue); margin-top:12px;">Copilot portable — <code>.mcp.json</code></div>
269
- <div class="code-box"><button class="copy-btn" onclick="copySnippet('cfgVsCodePortable')">Copy</button><span id="cfgVsCodePortable">{\\n "mcpServers": {\\n "ssh-mcp-pro": {\\n "type": "http",\\n "url": "\${MCP_URL}"\\n }\\n }\\n}</span></div>
269
+ <div class="code-box"><button type="button" class="copy-btn" aria-live="polite" aria-label="Copy VS Code portable config" onclick="copySnippet('cfgVsCodePortable')">Copy</button><span id="cfgVsCodePortable">{\\n "mcpServers": {\\n "ssh-mcp-pro": {\\n "type": "http",\\n "url": "\${MCP_URL}"\\n }\\n }\\n}</span></div>
270
270
  <div style="font-size:12px; font-weight:700; color:var(--blue); margin-top:12px;">VS Code workspace (compatible) — <code>.vscode/mcp.json</code></div>
271
- <div class="code-box"><button class="copy-btn" onclick="copySnippet('cfgVsCode')">Copy</button><span id="cfgVsCode">{\\n "servers": {\\n "ssh-mcp-pro": {\\n "type": "http",\\n "url": "\${MCP_URL}"\\n }\\n }\\n}</span></div>
271
+ <div class="code-box"><button type="button" class="copy-btn" aria-live="polite" aria-label="Copy VS Code workspace config" onclick="copySnippet('cfgVsCode')">Copy</button><span id="cfgVsCode">{\\n "servers": {\\n "ssh-mcp-pro": {\\n "type": "http",\\n "url": "\${MCP_URL}"\\n }\\n }\\n}</span></div>
272
272
  <div style="font-size:12px; font-weight:700; color:var(--blue); margin-top:12px;">Cursor — <code>.cursor/mcp.json</code></div>
273
- <div class="code-box"><button class="copy-btn" onclick="copySnippet('cfgCursor')">Copy</button><span id="cfgCursor">{\\n "mcpServers": {\\n "ssh-mcp-pro": {\\n "url": "\${MCP_URL}"\\n }\\n }\\n}</span></div>
273
+ <div class="code-box"><button type="button" class="copy-btn" aria-live="polite" aria-label="Copy Cursor MCP config" onclick="copySnippet('cfgCursor')">Copy</button><span id="cfgCursor">{\\n "mcpServers": {\\n "ssh-mcp-pro": {\\n "url": "\${MCP_URL}"\\n }\\n }\\n}</span></div>
274
274
  <div style="font-size:12px; font-weight:700; color:var(--blue); margin-top:12px;">Windsurf — <code>mcp_config.json</code></div>
275
- <div class="code-box"><button class="copy-btn" onclick="copySnippet('cfgWindsurf')">Copy</button><span id="cfgWindsurf">{\\n "mcpServers": {\\n "ssh-mcp-pro": {\\n "serverUrl": "\${MCP_URL}"\\n }\\n }\\n}</span></div>
275
+ <div class="code-box"><button type="button" class="copy-btn" aria-live="polite" aria-label="Copy Windsurf MCP config" onclick="copySnippet('cfgWindsurf')">Copy</button><span id="cfgWindsurf">{\\n "mcpServers": {\\n "ssh-mcp-pro": {\\n "serverUrl": "\${MCP_URL}"\\n }\\n }\\n}</span></div>
276
276
  </div>
277
277
  </div>
278
278
  \`;
@@ -418,10 +418,28 @@ export function renderDashboardHtml(initialUserBase64, mcpUrlJson, publicUrlJson
418
418
  }
419
419
 
420
420
  function copySnippet(id) {
421
- const text = document.getElementById(id).textContent;
422
- navigator.clipboard.writeText(text).then(() => {
423
- alert('Copied to clipboard!');
424
- });
421
+ const source = document.getElementById(id);
422
+ const button = source?.parentElement?.querySelector('.copy-btn');
423
+ if (!source || !button) return;
424
+ const originalLabel = button.dataset.copyLabel || button.getAttribute('aria-label') || 'Copy snippet';
425
+ button.dataset.copyLabel = originalLabel;
426
+ function feedback(label) {
427
+ button.textContent = label;
428
+ button.setAttribute('aria-label', originalLabel + ': ' + label);
429
+ clearTimeout(button.copyResetTimer);
430
+ button.copyResetTimer = setTimeout(() => {
431
+ if (!button.isConnected) return;
432
+ button.textContent = 'Copy';
433
+ button.setAttribute('aria-label', originalLabel);
434
+ }, 1800);
435
+ }
436
+ if (!navigator.clipboard?.writeText) {
437
+ feedback('Unavailable');
438
+ return;
439
+ }
440
+ navigator.clipboard.writeText(source.textContent || '')
441
+ .then(() => feedback('Copied'))
442
+ .catch(() => feedback('Copy failed'));
425
443
  }
426
444
 
427
445
  renderHeader();
@@ -1 +1 @@
1
- {"version":3,"file":"web-dashboard-html.js","sourceRoot":"","sources":["../../src/remote/web-dashboard-html.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,MAAM,UAAU,mBAAmB,CACjC,iBAAyB,EACzB,UAAkB,EAClB,aAAqB;IAErB,OAAO;;;;;;WAME,gBAAgB;;;;;;;;;;;;;;;;;;;4CAmBiB,iBAAiB;sBACvC,UAAU;yBACP,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAiZ9B,CAAC;AACT,CAAC"}
1
+ {"version":3,"file":"web-dashboard-html.js","sourceRoot":"","sources":["../../src/remote/web-dashboard-html.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,MAAM,UAAU,mBAAmB,CACjC,iBAAyB,EACzB,UAAkB,EAClB,aAAqB;IAErB,OAAO;;;;;;WAME,gBAAgB;;;;;;;;;;;;;;;;;;;4CAmBiB,iBAAiB;sBACvC,UAAU;yBACP,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAma9B,CAAC;AACT,CAAC"}
@@ -1,2 +1,2 @@
1
- export declare const DASHBOARD_STYLES = "\n :root {\n --bg: #0d1117;\n --card-bg: #161b22;\n --card-border: #30363d;\n --text-main: #f0f6fc;\n --text-muted: #8b949e;\n --primary: #238636;\n --primary-hover: #2ea043;\n --blue: #58a6ff;\n --blue-bg: rgba(56, 139, 253, 0.15);\n --red: #f85149;\n --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n }\n * { box-sizing: border-box; margin: 0; padding: 0; }\n body {\n background-color: var(--bg);\n color: var(--text-main);\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif;\n line-height: 1.5;\n padding-bottom: 60px;\n }\n header {\n background: #161b22;\n border-bottom: 1px solid var(--card-border);\n padding: 16px 24px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n position: sticky;\n top: 0;\n z-index: 100;\n }\n .logo-area { display: flex; align-items: center; gap: 12px; }\n .logo-icon { font-size: 24px; }\n .brand-title { font-size: 18px; font-weight: 700; color: #fff; letter-spacing: -0.5px; }\n .brand-sub { font-size: 12px; color: var(--text-muted); }\n .user-area { display: flex; align-items: center; gap: 16px; }\n .badge {\n display: inline-block;\n padding: 2px 8px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n }\n .badge-green { background: #238636; color: #fff; }\n .badge-gray { background: #30363d; color: #8b949e; }\n .badge-blue { background: var(--blue-bg); color: var(--blue); border: 1px solid rgba(56,139,253,0.3); }\n .btn {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n padding: 8px 16px;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 600;\n cursor: pointer;\n text-decoration: none;\n border: 1px solid transparent;\n transition: all 0.2s ease;\n }\n .btn-primary { background: var(--primary); color: #fff; border-color: rgba(240,246,252,0.1); }\n .btn-primary:hover { background: var(--primary-hover); }\n .btn-outline { background: transparent; color: var(--text-main); border-color: var(--card-border); }\n .btn-outline:hover { background: #21262d; border-color: #8b949e; }\n .btn-danger { background: rgba(248,81,73,0.1); color: var(--red); border-color: rgba(248,81,73,0.4); }\n .btn-danger:hover { background: var(--red); color: #fff; }\n .btn-sm { padding: 4px 10px; font-size: 12px; }\n\n .container { max-width: 1100px; margin: 32px auto; padding: 0 20px; }\n\n /* Hero banner */\n .hero {\n background: linear-gradient(180deg, #161b22 0%, #0d1117 100%);\n border: 1px solid var(--card-border);\n border-radius: 12px;\n padding: 48px 32px;\n text-align: center;\n margin-bottom: 32px;\n }\n .hero h1 { font-size: 32px; font-weight: 800; margin-bottom: 12px; color: #fff; }\n .hero p { font-size: 16px; color: var(--text-muted); max-width: 650px; margin: 0 auto 28px; }\n .auth-buttons { display: flex; justify-content: center; gap: 16px; flex-wrap: wrap; }\n .auth-btn {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 24px;\n border-radius: 8px;\n font-weight: 600;\n font-size: 15px;\n text-decoration: none;\n border: 1px solid transparent;\n transition: transform 0.15s ease;\n }\n .auth-btn:hover { transform: translateY(-2px); }\n .auth-btn-google { background: #ffffff; color: #1f2937; border-color: #d1d5db; }\n .auth-btn-github { background: #24292f; color: #ffffff; border-color: #30363d; }\n\n /* Tab nav */\n .tabs { display: flex; flex-wrap: wrap; gap: 8px; border-bottom: 1px solid var(--card-border); margin-bottom: 24px; }\n .tab-item {\n background: transparent;\n border: 0;\n font-family: inherit;\n text-align: left;\n padding: 12px 20px;\n cursor: pointer;\n font-weight: 600;\n font-size: 14px;\n color: var(--text-muted);\n border-bottom: 2px solid transparent;\n transition: color 0.15s ease;\n }\n .tab-item.active { color: var(--blue); border-bottom-color: var(--blue); }\n .tab-item:focus-visible { outline: 2px solid var(--blue); outline-offset: 2px; }\n .tab-pane { display: none; }\n .tab-pane.active { display: block; }\n\n /* Device Cards */\n .card {\n background: var(--card-bg);\n border: 1px solid var(--card-border);\n border-radius: 8px;\n padding: 20px;\n margin-bottom: 16px;\n }\n .device-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex-wrap: wrap;\n gap: 16px;\n }\n .device-info { display: flex; align-items: center; gap: 16px; }\n .device-icon {\n font-size: 28px;\n width: 48px;\n height: 48px;\n background: #21262d;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n .device-name { font-size: 16px; font-weight: 700; margin-bottom: 4px; display: flex; align-items: center; gap: 8px; }\n .device-meta { font-size: 13px; color: var(--text-muted); font-family: var(--font-mono); }\n\n /* Code block */\n .code-box {\n background: #090d13;\n border: 1px solid #30363d;\n border-radius: 6px;\n padding: 14px 18px;\n font-family: var(--font-mono);\n font-size: 13px;\n color: #7ee787;\n overflow-x: auto;\n margin: 12px 0;\n position: relative;\n }\n .copy-btn {\n position: absolute;\n top: 8px;\n right: 8px;\n padding: 4px 8px;\n font-size: 11px;\n background: #21262d;\n color: #c9d1d9;\n border: 1px solid #30363d;\n border-radius: 4px;\n cursor: pointer;\n }\n .copy-btn:hover { background: #30363d; color: #fff; }\n\n /* Config guide cards */\n .grid-2 { display: grid; grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); gap: 20px; }\n\n /* Empty state */\n .empty-box {\n text-align: center;\n padding: 48px 16px;\n color: var(--text-muted);\n }\n";
1
+ export declare const DASHBOARD_STYLES = "\n :root {\n --bg: #0d1117;\n --card-bg: #161b22;\n --card-border: #30363d;\n --text-main: #f0f6fc;\n --text-muted: #8b949e;\n --primary: #238636;\n --primary-hover: #2ea043;\n --blue: #58a6ff;\n --blue-bg: rgba(56, 139, 253, 0.15);\n --red: #f85149;\n --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n }\n * { box-sizing: border-box; margin: 0; padding: 0; }\n body {\n background-color: var(--bg);\n color: var(--text-main);\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif;\n line-height: 1.5;\n padding-bottom: 60px;\n }\n header {\n background: #161b22;\n border-bottom: 1px solid var(--card-border);\n padding: 16px 24px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex-wrap: wrap;\n gap: 12px;\n position: sticky;\n top: 0;\n z-index: 100;\n }\n .logo-area { display: flex; align-items: center; gap: 12px; }\n .logo-icon { font-size: 24px; }\n .brand-title { font-size: 18px; font-weight: 700; color: #fff; letter-spacing: -0.5px; }\n .brand-sub { font-size: 12px; color: var(--text-muted); }\n .user-area { display: flex; align-items: center; flex-wrap: wrap; gap: 12px; min-width: 0; }\n .badge {\n display: inline-block;\n padding: 2px 8px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n }\n .badge-green { background: #238636; color: #fff; }\n .badge-gray { background: #30363d; color: #c9d1d9; }\n .badge-blue { background: var(--blue-bg); color: var(--blue); border: 1px solid rgba(56,139,253,0.3); }\n .btn {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n padding: 8px 16px;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 600;\n cursor: pointer;\n text-decoration: none;\n border: 1px solid transparent;\n transition: all 0.2s ease;\n }\n .btn-primary { background: var(--primary); color: #fff; border-color: rgba(240,246,252,0.1); }\n .btn-primary:hover { background: var(--primary-hover); }\n .btn-outline { background: transparent; color: var(--text-main); border-color: var(--card-border); }\n .btn-outline:hover { background: #21262d; border-color: #8b949e; }\n .btn-danger { background: rgba(248,81,73,0.1); color: var(--red); border-color: rgba(248,81,73,0.4); }\n .btn-danger:hover { background: var(--red); color: #fff; }\n .btn-sm { padding: 4px 10px; font-size: 12px; }\n\n .container { max-width: 1100px; margin: 32px auto; padding: 0 20px; }\n\n /* Hero banner */\n .hero {\n background: linear-gradient(180deg, #161b22 0%, #0d1117 100%);\n border: 1px solid var(--card-border);\n border-radius: 12px;\n padding: 48px 32px;\n text-align: center;\n margin-bottom: 32px;\n }\n .hero h1 { font-size: 32px; font-weight: 800; margin-bottom: 12px; color: #fff; }\n .hero p { font-size: 16px; color: var(--text-muted); max-width: 650px; margin: 0 auto 28px; }\n .auth-buttons { display: flex; justify-content: center; gap: 16px; flex-wrap: wrap; }\n .auth-btn {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 24px;\n border-radius: 8px;\n font-weight: 600;\n font-size: 15px;\n text-decoration: none;\n border: 1px solid transparent;\n transition: transform 0.15s ease;\n }\n .auth-btn:hover { transform: translateY(-2px); }\n .auth-btn-google { background: #ffffff; color: #1f2937; border-color: #d1d5db; }\n .auth-btn-github { background: #24292f; color: #ffffff; border-color: #30363d; }\n\n /* Tab nav */\n .tabs { display: flex; flex-wrap: wrap; gap: 8px; border-bottom: 1px solid var(--card-border); margin-bottom: 24px; }\n .tab-item {\n background: transparent;\n border: 0;\n font-family: inherit;\n text-align: left;\n padding: 12px 20px;\n cursor: pointer;\n font-weight: 600;\n font-size: 14px;\n color: var(--text-muted);\n border-bottom: 2px solid transparent;\n transition: color 0.15s ease;\n }\n .tab-item.active { color: var(--blue); border-bottom-color: var(--blue); }\n .tab-item:focus-visible { outline: 2px solid var(--blue); outline-offset: 2px; }\n .tab-pane { display: none; }\n .tab-pane.active { display: block; }\n\n /* Device Cards */\n .card {\n background: var(--card-bg);\n border: 1px solid var(--card-border);\n border-radius: 8px;\n padding: 20px;\n margin-bottom: 16px;\n }\n .device-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex-wrap: wrap;\n gap: 16px;\n }\n .device-info { display: flex; align-items: center; flex: 1 1 260px; min-width: 0; gap: 16px; }\n .device-info > div:last-child { min-width: 0; }\n .device-icon {\n font-size: 28px;\n width: 48px;\n height: 48px;\n background: #21262d;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n .device-name { font-size: 16px; font-weight: 700; margin-bottom: 4px; display: flex; align-items: center; flex-wrap: wrap; overflow-wrap: anywhere; gap: 8px; }\n .device-meta { font-size: 13px; color: var(--text-muted); font-family: var(--font-mono); overflow-wrap: anywhere; }\n .device-actions { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; }\n\n /* Code block */\n .code-box {\n background: #090d13;\n border: 1px solid #30363d;\n border-radius: 6px;\n padding: 14px 18px;\n font-family: var(--font-mono);\n font-size: 13px;\n color: #7ee787;\n overflow-x: auto;\n margin: 12px 0;\n position: relative;\n }\n .code-box > span {\n display: block;\n padding-right: 52px;\n overflow-wrap: anywhere;\n }\n .card a { color: var(--blue); text-underline-offset: 2px; }\n .card a:hover { color: #b0d4ff; }\n .copy-btn {\n position: absolute;\n top: 8px;\n right: 8px;\n padding: 4px 8px;\n font-size: 11px;\n background: #21262d;\n color: #c9d1d9;\n border: 1px solid #30363d;\n border-radius: 4px;\n cursor: pointer;\n }\n .copy-btn:hover { background: #30363d; color: #fff; }\n .copy-btn:focus-visible { outline: 2px solid var(--blue); outline-offset: 2px; }\n\n /* Config guide cards */\n .grid-2 { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 320px), 1fr)); gap: 20px; }\n @media (max-width: 480px) {\n .container { margin: 20px auto; padding: 0 12px; }\n .hero { padding: 28px 18px; }\n .hero h1 { font-size: 26px; }\n .device-actions { width: 100%; }\n .device-actions select { width: 100%; min-width: 0; }\n }\n\n /* Empty state */\n .empty-box {\n text-align: center;\n padding: 48px 16px;\n color: var(--text-muted);\n }\n";
2
2
  //# sourceMappingURL=web-dashboard-styles.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"web-dashboard-styles.d.ts","sourceRoot":"","sources":["../../src/remote/web-dashboard-styles.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,mpMAyL5B,CAAC"}
1
+ {"version":3,"file":"web-dashboard-styles.d.ts","sourceRoot":"","sources":["../../src/remote/web-dashboard-styles.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,uhOA4M5B,CAAC"}
@@ -27,6 +27,8 @@ export const DASHBOARD_STYLES = `
27
27
  display: flex;
28
28
  align-items: center;
29
29
  justify-content: space-between;
30
+ flex-wrap: wrap;
31
+ gap: 12px;
30
32
  position: sticky;
31
33
  top: 0;
32
34
  z-index: 100;
@@ -35,7 +37,7 @@ export const DASHBOARD_STYLES = `
35
37
  .logo-icon { font-size: 24px; }
36
38
  .brand-title { font-size: 18px; font-weight: 700; color: #fff; letter-spacing: -0.5px; }
37
39
  .brand-sub { font-size: 12px; color: var(--text-muted); }
38
- .user-area { display: flex; align-items: center; gap: 16px; }
40
+ .user-area { display: flex; align-items: center; flex-wrap: wrap; gap: 12px; min-width: 0; }
39
41
  .badge {
40
42
  display: inline-block;
41
43
  padding: 2px 8px;
@@ -45,7 +47,7 @@ export const DASHBOARD_STYLES = `
45
47
  text-transform: uppercase;
46
48
  }
47
49
  .badge-green { background: #238636; color: #fff; }
48
- .badge-gray { background: #30363d; color: #8b949e; }
50
+ .badge-gray { background: #30363d; color: #c9d1d9; }
49
51
  .badge-blue { background: var(--blue-bg); color: var(--blue); border: 1px solid rgba(56,139,253,0.3); }
50
52
  .btn {
51
53
  display: inline-flex;
@@ -133,7 +135,8 @@ export const DASHBOARD_STYLES = `
133
135
  flex-wrap: wrap;
134
136
  gap: 16px;
135
137
  }
136
- .device-info { display: flex; align-items: center; gap: 16px; }
138
+ .device-info { display: flex; align-items: center; flex: 1 1 260px; min-width: 0; gap: 16px; }
139
+ .device-info > div:last-child { min-width: 0; }
137
140
  .device-icon {
138
141
  font-size: 28px;
139
142
  width: 48px;
@@ -144,8 +147,9 @@ export const DASHBOARD_STYLES = `
144
147
  align-items: center;
145
148
  justify-content: center;
146
149
  }
147
- .device-name { font-size: 16px; font-weight: 700; margin-bottom: 4px; display: flex; align-items: center; gap: 8px; }
148
- .device-meta { font-size: 13px; color: var(--text-muted); font-family: var(--font-mono); }
150
+ .device-name { font-size: 16px; font-weight: 700; margin-bottom: 4px; display: flex; align-items: center; flex-wrap: wrap; overflow-wrap: anywhere; gap: 8px; }
151
+ .device-meta { font-size: 13px; color: var(--text-muted); font-family: var(--font-mono); overflow-wrap: anywhere; }
152
+ .device-actions { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; }
149
153
 
150
154
  /* Code block */
151
155
  .code-box {
@@ -160,6 +164,13 @@ export const DASHBOARD_STYLES = `
160
164
  margin: 12px 0;
161
165
  position: relative;
162
166
  }
167
+ .code-box > span {
168
+ display: block;
169
+ padding-right: 52px;
170
+ overflow-wrap: anywhere;
171
+ }
172
+ .card a { color: var(--blue); text-underline-offset: 2px; }
173
+ .card a:hover { color: #b0d4ff; }
163
174
  .copy-btn {
164
175
  position: absolute;
165
176
  top: 8px;
@@ -173,9 +184,17 @@ export const DASHBOARD_STYLES = `
173
184
  cursor: pointer;
174
185
  }
175
186
  .copy-btn:hover { background: #30363d; color: #fff; }
187
+ .copy-btn:focus-visible { outline: 2px solid var(--blue); outline-offset: 2px; }
176
188
 
177
189
  /* Config guide cards */
178
- .grid-2 { display: grid; grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); gap: 20px; }
190
+ .grid-2 { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 320px), 1fr)); gap: 20px; }
191
+ @media (max-width: 480px) {
192
+ .container { margin: 20px auto; padding: 0 12px; }
193
+ .hero { padding: 28px 18px; }
194
+ .hero h1 { font-size: 26px; }
195
+ .device-actions { width: 100%; }
196
+ .device-actions select { width: 100%; min-width: 0; }
197
+ }
179
198
 
180
199
  /* Empty state */
181
200
  .empty-box {
@@ -1 +1 @@
1
- {"version":3,"file":"web-dashboard-styles.js","sourceRoot":"","sources":["../../src/remote/web-dashboard-styles.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyL/B,CAAC"}
1
+ {"version":3,"file":"web-dashboard-styles.js","sourceRoot":"","sources":["../../src/remote/web-dashboard-styles.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4M/B,CAAC"}
@@ -9,7 +9,7 @@ it adds the one-command shortcuts.
9
9
  ```bash
10
10
  git clone https://github.com/oaslananka/ssh-mcp-pro.git
11
11
  cd ssh-mcp-pro
12
- task install # or: corepack enable && corepack prepare pnpm@11.5.1 --activate && pnpm install --frozen-lockfile
12
+ task install # or: corepack enable && corepack prepare pnpm@11.28.10 --activate && pnpm install --frozen-lockfile
13
13
  task verify # lint + format:check + typecheck + test + build
14
14
  ```
15
15
 
@@ -6,11 +6,11 @@ Release Please v5 prepares Conventional Commit-driven version updates on `main`.
6
6
 
7
7
  When an unreleased version reaches `main`, the `Release` workflow preflights the **frozen dependency installation, full quality check, dependency freshness, package build, SBOM, checksums and GitHub artifact attestations** before Release Please creates the tag. It then attaches that exact prebuilt package and SBOM to the GitHub Release and dispatches an immutable-tag GHCR build. Ordinary main pushes without a new version do not repeat the heavy preflight.
8
8
 
9
- ## One-click npm publication
9
+ ## Automatic npm publication
10
10
 
11
- **Actions → Release → Run workflow → main → Run workflow** is the **manual npm publish button**. No extra version input, stage job or automatic npm publish on release PR merge is involved.
11
+ **Merge the Release Please PR** to publish the new version automatically. After preflight checks, Release Please creates the immutable GitHub Release, attaches the verified assets, and the dependent `publish-npm` job publishes that exact artifact. No separate manual workflow or npm approval step is part of the normal path. `Actions → Release → Run workflow → main` remains available as an idempotent recovery action for a release that has already been created.
12
12
 
13
- The `Publish current GitHub Release to npm` job identifies the `package.json` version on `main`, locates its immutable GitHub Release, downloads the already-built `.tgz` and checksum, verifies the tag's source/version, checks SHA-256, package metadata and the GitHub attestation, then calls **`npm publish` directly with GitHub-hosted Actions OIDC**. A version already public on npm is not published twice. After confirming that exact npm version is public, it dispatches the matching MCP Registry publication job. npm Trusted Publisher must authorize `.github/workflows/release.yml` and permit **direct publication**, not stage-only. This is a provider-side prerequisite, not a second GitHub workflow.
13
+ The `Publish verified GitHub Release to npm` job identifies the `package.json` version on `main`, locates its immutable GitHub Release, downloads the already-built `.tgz` and checksum, verifies the tag's source/version, checks SHA-256, package metadata and the GitHub attestation, then calls **`npm publish` directly with GitHub-hosted Actions OIDC**. A version already public on npm is not published twice. Newly accepted npm packages can remain invisible while registry processing finishes; the publishing job retries public visibility for up to 10 minutes without prompting for manual approval. After confirming that exact npm version is public, it dispatches the matching MCP Registry publication job. npm Trusted Publisher must authorize `.github/workflows/release.yml` and permit **direct publication**, not stage-only. This is a provider-side prerequisite, not a second GitHub workflow.
14
14
 
15
15
  GitHub does not override npm account/package security settings. If the npm publisher is configured for stage-only access or another mandatory owner restriction, the direct publish job fails clearly instead of silently staging or bypassing security. Avoid publishing historical versions to work around an npm account restriction; repair the publisher configuration through authorized account settings.
16
16
 
@@ -18,12 +18,12 @@ GitHub does not override npm account/package security settings. If the npm publi
18
18
 
19
19
  The release workflow triggers `.github/workflows/docker.yml` with the immutable `ssh-mcp-pro-vX.Y.Z` tag. GHCR must grant this repository's GitHub Actions **Write** access to the existing `ghcr.io/oaslananka/ssh-mcp-pro` package. Package access is managed through **GitHub Packages → Package settings → Manage Actions access**. Docker publishing verifies the release tag and package version before pushing both platform tags.
20
20
 
21
- The MCP Registry job requires an existing GitHub Release and the *same publicly visible npm version*. It skips versions already registered and uses GitHub OIDC. There is no daily staged-publication reconciliation job. The manual npm publish workflow dispatches the MCP Registry publication only after npm confirms the version is public.
21
+ The MCP Registry job requires an existing GitHub Release and the *same publicly visible npm version*. It skips versions already registered and uses GitHub OIDC. There is no daily staged-publication reconciliation job. The automatic npm publish job dispatches MCP Registry publication only after npm confirms the matching version is public; manual recovery uses the same checks.
22
22
 
23
23
  ## Verify and troubleshoot
24
24
 
25
25
  - `gh release view ssh-mcp-pro-vX.Y.Z --json assets` — the prepared GitHub Release.
26
- - `gh run list --workflow release.yml` — release preparation and manual npm publication status.
26
+ - `gh run list --workflow release.yml` — release preparation, automatic npm publication and optional manual recovery status.
27
27
  - `npm view ssh-mcp-pro@X.Y.Z version` — independently verify actual npm publication.
28
28
  - `gh run list --workflow docker.yml` and `gh api users/oaslananka/packages/container/ssh-mcp-pro` — GHCR status.
29
29
  - `gh run list --workflow publish-mcp-registry.yml` — MCP Registry publication.
package/docs/docker.md CHANGED
@@ -3,15 +3,15 @@
3
3
  Published release images are available from GitHub Container Registry:
4
4
 
5
5
  ```bash
6
- docker pull ghcr.io/oaslananka/ssh-mcp-pro:1.0.0
7
- docker run --rm ghcr.io/oaslananka/ssh-mcp-pro:1.0.0 --version
6
+ docker pull ghcr.io/oaslananka/ssh-mcp-pro:1.4.1
7
+ docker run --rm ghcr.io/oaslananka/ssh-mcp-pro:1.4.1 --version
8
8
  ```
9
9
 
10
10
  Each release publishes a multi-platform OCI image for `linux/amd64` and
11
11
  `linux/arm64`. The release workflow publishes two exact tags:
12
12
 
13
- - `ghcr.io/oaslananka/ssh-mcp-pro:<semver>` such as `1.0.0`
14
- - `ghcr.io/oaslananka/ssh-mcp-pro:<git-tag>` such as `v1.0.0`
13
+ - `ghcr.io/oaslananka/ssh-mcp-pro:<semver>` such as `1.4.1`
14
+ - `ghcr.io/oaslananka/ssh-mcp-pro:<git-tag>` such as `ssh-mcp-pro-v1.4.1`
15
15
 
16
16
  The project does not publish a mutable `latest` tag. Prefer digest-pinned
17
17
  references in production so container deployments match the npm package,
@@ -1,7 +1,7 @@
1
1
  # OpenSSF Best Practices — Evidence
2
2
 
3
3
  Self-assessment against the [OpenSSF Best Practices Passing criteria](https://www.bestpractices.dev/en/criteria/0),
4
- current as of 2026-07-03. This is a repo-side evidence log, not an official OpenSSF
4
+ originally assessed 2026-07-03; published release notes independently rechecked 2026-11-10. This is a repo-side evidence log, not an official OpenSSF
5
5
  artifact — the actual badge is issued by submitting these answers at
6
6
  [bestpractices.dev](https://www.bestpractices.dev/). See `.bestpractices.json` for the
7
7
  same answers in a structured tracking form used to prepare that submission.
@@ -19,7 +19,7 @@ vocabulary.
19
19
  | License is OSI-approved | Met | MIT |
20
20
  | Documentation: basic description of purpose | Met | README.md intro |
21
21
  | Documentation: how to obtain/provide feedback and contribute | Met | CONTRIBUTING.md, SUPPORT.md |
22
- | Interim versions/releases are identifiable | Met | Conventional Commits + release-please tagging (pending first tag — see gap analysis) |
22
+ | Interim versions/releases are identifiable | Met | Conventional Commits + release-please tagging (GitHub releases v1.4.0 and v1.4.1 verified 2026-11-10) |
23
23
 
24
24
  ## Change control
25
25
 
@@ -68,8 +68,12 @@ vocabulary.
68
68
 
69
69
  ## Bottom line
70
70
 
71
- As of 2026-07-03, the CodeQL blocker has been resolved. The remaining blocker is
72
- "cut a first release," already tracked in [ROADMAP.md](../ROADMAP.md), plus triaging
73
- the new Trivy container-image findings noted above. Nothing in this evidence log claims
74
- Silver or Gold; see [docs/openssf-gap-analysis.md](openssf-gap-analysis.md) for why
75
- those are out of reach right now.
71
+ As of 2026-11-10 the historical first-release blocker is resolved:
72
+ GitHub Releases v1.4.0 and v1.4.1 are published with notes. npm
73
+ `latest` remains v1.4.0 due to the intentionally separate manual registry
74
+ publication. Do not equate release notes with an npm publication or hosted deployment.
75
+
76
+ Historical 2026-07-03 image-scanning findings below are not a current scan.
77
+ Do not claim a current container CVE count without a new scan.
78
+ This internal self-assessment is still not submitted to Best Practices;
79
+ no Passing, Silver or Gold badge is claimed.
@@ -11,10 +11,10 @@ See [docs/openssf-evidence.md](openssf-evidence.md) for the full criterion table
11
11
  ~~Seven open CodeQL alerts (one High) with no fully-current documented disposition.~~
12
12
  **Resolved 2026-07-03** — see `SECURITY_DECISIONS.md`.
13
13
 
14
- The remaining concrete blocker: no release has been cut yet, so "release notes exist
15
- for each release" is unverified in practice even though the mechanism (release-please +
16
- CHANGELOG) is implemented. Tracked in [ROADMAP.md](../ROADMAP.md) and as a recommended
17
- issue in [docs/repo-maturity-report.md](repo-maturity-report.md).
14
+ **2026-11-10 update:** The first-release blocker is resolved: GitHub Releases
15
+ v1.4.0 and v1.4.1 contain release notes. npm `latest` remains
16
+ v1.4.0 under a separate manual publishing workflow. This does not imply
17
+ an official Best Practices submission or a completed hosted deployment.
18
18
 
19
19
  A new, unrelated item surfaced the same day: Trivy container-image scanning (added
20
20
  after this document was first written) found 50+ open findings against the built
@@ -57,7 +57,6 @@ preconditions are absent — and they are absent here:
57
57
  | High test coverage sustained over time | Coverage thresholds exist (85–90%) but "sustained over time" needs release/version history that doesn't exist yet (repo is 5 days old) |
58
58
  | Repeatable/reproducible release process | Implemented (SBOM, checksums, provenance) but never executed — zero releases published |
59
59
 
60
- **This is a gap list, not a target with a date.** None of these should be worked toward
61
- by editing files; they require either time (release/contribution history accruing
62
- naturally) or a maintainer decision (branch protection, recruiting a co-maintainer).
63
- Revisit this analysis after the "Silver" preconditions above are met.
60
+ **This is a dated internal self-assessment, not an official badge.**
61
+ Do not require a second human maintainer solely for a score. Re-evaluate
62
+ criteria using current evidence before making an external submission.
@@ -33,9 +33,20 @@ with extra arguments don't break the server.
33
33
 
34
34
  ## `ssh-mcp-pro-agent`
35
35
 
36
- Delegates directly to `src/remote/agent-cli.ts` via `argv` passthrough. See
37
- [docs/remote-mcp-hardening.md](../remote-mcp-hardening.md) and
38
- [docs/adding-a-device.md](../adding-a-device.md) for the documented agent workflows —
39
- this reference intentionally doesn't restate flags that aren't yet enumerated in one
40
- place in the source, to avoid documenting something that could drift silently from the
41
- implementation.
36
+ Source of truth: [src/remote/agent-cli.ts](../../src/remote/agent-cli.ts).
37
+
38
+ | Command | Effect |
39
+ | --- | --- |
40
+ | (no args), `help`, `--help`, `-h` | Print usage and exit successfully |
41
+ | `--version`, `-v` | Print the installed package version and exit |
42
+ | `enroll --server <url> --token <token> [--alias <alias>]` | Exchange a one-time enrollment token and save agent credentials |
43
+ | `run` | Connect the enrolled outbound agent to its control plane |
44
+ | `status` | Show local enrollment and current policy, not live connectivity |
45
+ | `logs [--tail 60] [--follow]` | Read agent activity logs; `--follow` streams updates |
46
+ | `install-service` | Print platform service setup guidance; does not install anything |
47
+ | `uninstall-service` | Print platform service removal guidance; does not remove anything |
48
+
49
+ Unknown commands fail with a nonzero exit code. For a persistent service, use the
50
+ [platform bootstrap installer](../adding-a-device.md#step-2--run-the-bootstrap-on-the-new-device).
51
+ The `install-service` and `uninstall-service` commands are advisory, not installers.
52
+ Treat enrollment tokens as secrets and never paste them into issues or logs.
@@ -13,7 +13,7 @@ LTS line). This is expected, not an oversight.
13
13
 
14
14
  ## Package manager
15
15
 
16
- pnpm `11.28.9`, enforced via `packageManager` in `package.json` and `engine-strict=true`.
16
+ pnpm `11.28.10`, enforced via `packageManager` in `package.json` and `engine-strict=true`.
17
17
  npm/yarn are not supported installation paths for *developing* this repo (consumers
18
18
  installing the published package via npm/npx are unaffected — see
19
19
  [README.md#installation](../../README.md#installation)).
@@ -10,7 +10,7 @@ and [Reference](../reference/README.md) for the full option set.
10
10
 
11
11
  You need:
12
12
 
13
- - Node.js `>=22.22.2` (or `>=24.15.0` / `>=26.3.0`) and pnpm `>=11.0.9`.
13
+ - Node.js `>=22.22.2` (or `>=24.15.0` / `>=26.3.0`) and pnpm `^11.28.10`.
14
14
  - At least one host you can already reach with plain `ssh`, with its key already in
15
15
  your `~/.ssh/known_hosts` (this tutorial uses the default `strict` host-key policy —
16
16
  see [SECURITY_DECISIONS.md](../../SECURITY_DECISIONS.md) for why).
package/mcp.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "ssh-mcp-pro",
3
3
  "display_name": "ssh-mcp-pro",
4
4
  "description": "Secure MCP SSH automation server with policy controls, resources, prompts, stdio, and HTTP.",
5
- "version": "1.4.0",
5
+ "version": "1.4.3",
6
6
  "author": "Osman Aslan",
7
7
  "license": "MIT",
8
8
  "runtime": "node",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ssh-mcp-pro",
3
- "version": "1.4.0",
3
+ "version": "1.4.3",
4
4
  "mcpName": "io.github.oaslananka/ssh-mcp-pro",
5
5
  "description": "Model Context Protocol (MCP) SSH client server for remote automation",
6
6
  "type": "module",
@@ -58,7 +58,7 @@
58
58
  },
59
59
  "engines": {
60
60
  "node": ">=22.22.2",
61
- "pnpm": "^11.28.9"
61
+ "pnpm": "^11.28.10"
62
62
  },
63
63
  "dependencies": {
64
64
  "@modelcontextprotocol/node": "^2.1.2",
@@ -92,7 +92,7 @@
92
92
  "dependency-cruiser": "^17.4.3",
93
93
  "eslint": "^10.12.0",
94
94
  "fast-check": "^4.10.2",
95
- "knip": "^6.44.0",
95
+ "knip": "^6.44.1",
96
96
  "prettier": "^3.9.9",
97
97
  "publint": "^0.3.25",
98
98
  "typedoc": "0.28.20",
@@ -2,7 +2,7 @@
2
2
  "name": "ssh-mcp-pro",
3
3
  "display_name": "ssh-mcp-pro",
4
4
  "description": "Secure MCP SSH automation server with policy controls, resources, prompts, stdio, and HTTP.",
5
- "version": "1.4.0",
5
+ "version": "1.4.3",
6
6
  "author": "Osman Aslan",
7
7
  "license": "MIT",
8
8
  "runtime": "node",