Lint / JS (eslint) (pull_request) Successful in 10s
Lint / Notify on failure (pull_request) Skipped
Lint / Deploy (pull_request) Skipped
Security / JS Security (npm audit) (pull_request) Failing after 10s
Test / JS Tests (jest) (pull_request) Successful in 14s
Lint / JS (eslint) (push) Successful in 11s
Lint / Notify on failure (push) Skipped
Lint / Deploy (push) Skipped
Security / JS Security (npm audit) (push) Failing after 11s
Test / JS Tests (jest) (push) Successful in 10s
- Fix design-system class names that do not exist in base.css (.lt-alert--error, .lt-form-hint); add shared .lt-modal-lg, .lt-field-error and .is-invalid rules - Remove public/index.html and the public/base.js symlink - package.json: start script, correct main - README: vendored design system, Web UI section, new env vars, read-only dev mode Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HamVMDrA8RqhyxmUHgiqRp
90 lines
4.0 KiB
Plaintext
90 lines
4.0 KiB
Plaintext
<%#
|
|
Quick Command page (WP-F). Ad-hoc command execution against one or more
|
|
workers. All data loaded client-side by /assets/pages/quick.js.
|
|
%>
|
|
<%- include('../partials/page-header', {
|
|
title: 'Quick Command',
|
|
subtitle: 'Execute a command on selected workers instantly',
|
|
actions: '<button type="button" class="lt-btn lt-btn-secondary lt-btn-sm" data-action="qc:templates-open">📋 Templates</button>' +
|
|
'<button type="button" class="lt-btn lt-btn-secondary lt-btn-sm" data-action="qc:history-open">🕐 History</button>'
|
|
}) %>
|
|
|
|
<div class="lt-frame">
|
|
<form id="qc-form" data-submit-action="qc:execute">
|
|
<div class="lt-form-group">
|
|
<label class="lt-label">Execution Mode</label>
|
|
<div class="qc-mode-row">
|
|
<label class="qc-radio-label">
|
|
<input type="radio" class="lt-radio" name="qc-exec-mode" id="qc-mode-single" value="single" checked data-change-action="qc:mode">
|
|
<span>Single Worker</span>
|
|
</label>
|
|
<label class="qc-radio-label">
|
|
<input type="radio" class="lt-radio" name="qc-exec-mode" id="qc-mode-multi" value="multi" data-change-action="qc:mode">
|
|
<span>Multiple Workers</span>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="lt-form-group" id="qc-single-mode">
|
|
<label class="lt-label" for="qc-worker">Select Worker</label>
|
|
<select class="lt-select" id="qc-worker">
|
|
<option value="">Loading workers…</option>
|
|
</select>
|
|
</div>
|
|
|
|
<div class="lt-form-group" id="qc-multi-mode" hidden>
|
|
<label class="lt-label">Select Workers</label>
|
|
<div id="qc-worker-list" class="qc-worker-list">
|
|
<div class="lt-empty-state lt-empty-state--sm"><div class="lt-empty-state-title">Loading…</div></div>
|
|
</div>
|
|
<div class="lt-btn-group qc-worker-actions">
|
|
<button type="button" class="lt-btn lt-btn-secondary lt-btn-sm" data-action="qc:select-all">Select All</button>
|
|
<button type="button" class="lt-btn lt-btn-secondary lt-btn-sm" data-action="qc:select-online">Online Only</button>
|
|
<button type="button" class="lt-btn lt-btn-secondary lt-btn-sm" data-action="qc:clear-all">Clear All</button>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="lt-form-group">
|
|
<label class="lt-label" for="qc-command">Command</label>
|
|
<textarea class="lt-textarea" id="qc-command" rows="4" placeholder="Enter command to execute (e.g. 'uptime' or 'df -h')"></textarea>
|
|
<div class="lt-form-hint">Ctrl+Enter to execute</div>
|
|
</div>
|
|
|
|
<button type="submit" class="lt-btn lt-btn-primary" id="qc-execute-btn">▶ Execute Command</button>
|
|
</form>
|
|
|
|
<div id="qc-result" class="qc-result"></div>
|
|
</div>
|
|
|
|
<!-- Command Templates Modal -->
|
|
<div class="lt-modal-overlay" id="qc-templates-modal" aria-hidden="true" role="dialog" aria-modal="true" aria-labelledby="qc-templates-title">
|
|
<div class="lt-modal lt-modal-lg">
|
|
<div class="lt-modal-header">
|
|
<span class="lt-modal-title" id="qc-templates-title">Command Templates</span>
|
|
<button type="button" class="lt-modal-close" data-modal-close aria-label="Close">✕</button>
|
|
</div>
|
|
<div class="lt-modal-body">
|
|
<div id="qc-templates-list" class="qc-scroll-list"></div>
|
|
</div>
|
|
<div class="lt-modal-footer">
|
|
<button type="button" class="lt-btn lt-btn-ghost" data-modal-close>Close</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Command History Modal -->
|
|
<div class="lt-modal-overlay" id="qc-history-modal" aria-hidden="true" role="dialog" aria-modal="true" aria-labelledby="qc-history-title">
|
|
<div class="lt-modal lt-modal-lg">
|
|
<div class="lt-modal-header">
|
|
<span class="lt-modal-title" id="qc-history-title">Command History</span>
|
|
<button type="button" class="lt-modal-close" data-modal-close aria-label="Close">✕</button>
|
|
</div>
|
|
<div class="lt-modal-body">
|
|
<div id="qc-history-list" class="qc-scroll-list"></div>
|
|
</div>
|
|
<div class="lt-modal-footer">
|
|
<button type="button" class="lt-btn lt-btn-ghost" data-modal-close>Close</button>
|
|
</div>
|
|
</div>
|
|
</div>
|