mirror of
https://github.com/Ed1s0nZ/CyberStrikeAI.git
synced 2026-07-01 02:05:34 +02:00
Add files via upload
This commit is contained in:
+168
-3
@@ -942,6 +942,19 @@
|
||||
<option value="review_edit" data-i18n="chat.hitlModeReviewEdit">审查编辑</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="hitl-config-field" id="hitl-reviewer-field">
|
||||
<label class="hitl-config-label" data-i18n="chat.hitlReviewerLabel">审批方</label>
|
||||
<div class="hitl-reviewer-toggle" role="group" aria-label="Reviewer">
|
||||
<button type="button" class="hitl-reviewer-toggle-btn is-active" data-reviewer="human" aria-pressed="true">
|
||||
<span data-i18n="chat.hitlReviewerHuman">人工审批</span>
|
||||
</button>
|
||||
<button type="button" class="hitl-reviewer-toggle-btn" data-reviewer="audit_agent" aria-pressed="false">
|
||||
<span data-i18n="chat.hitlReviewerAgent">审计 Agent</span>
|
||||
</button>
|
||||
</div>
|
||||
<input type="hidden" id="hitl-reviewer-select" value="human" />
|
||||
<p class="hitl-config-hint" data-i18n="chat.hitlReviewerHint">可在人工与审计 Agent 之间随时切换;规则与白名单不变。人机协同为「关闭」时也可预先选择。</p>
|
||||
</div>
|
||||
<div class="hitl-config-field hitl-config-field--tools">
|
||||
<label class="hitl-config-label" for="hitl-sensitive-tools" data-i18n="chat.hitlWhitelistTools">白名单工具(免审批,逗号分隔)</label>
|
||||
<textarea id="hitl-sensitive-tools" class="hitl-config-textarea" rows="3" spellcheck="false" autocomplete="off" data-i18n="chat.hitlWhitelistPlaceholder" data-i18n-attr="placeholder" placeholder=""></textarea>
|
||||
@@ -1160,13 +1173,165 @@
|
||||
<div class="page-header">
|
||||
<h2 data-i18n="hitl.pageTitle">人机协同审批</h2>
|
||||
<div class="page-header-actions">
|
||||
<button class="btn-secondary" onclick="refreshHitlPending()" data-i18n="common.refresh">刷新</button>
|
||||
<button type="button" class="btn-secondary" id="hitl-refresh-btn" onclick="refreshHitlActivePanel()" data-i18n="common.refresh">刷新</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="page-content">
|
||||
<div class="settings-section">
|
||||
<h3 data-i18n="hitl.pendingTitle">待处理审批</h3>
|
||||
<div class="hitl-page-reviewer-bar" id="hitl-page-reviewer-bar">
|
||||
<div class="hitl-page-reviewer-main">
|
||||
<span class="hitl-page-reviewer-label" data-i18n="hitl.pageReviewerLabel">当前审批方</span>
|
||||
<div class="hitl-reviewer-toggle hitl-reviewer-toggle--page" role="group" aria-label="Reviewer">
|
||||
<button type="button" class="hitl-reviewer-toggle-btn is-active" data-reviewer="human" aria-pressed="true">
|
||||
<span data-i18n="chat.hitlReviewerHuman">人工审批</span>
|
||||
</button>
|
||||
<button type="button" class="hitl-reviewer-toggle-btn" data-reviewer="audit_agent" aria-pressed="false">
|
||||
<span data-i18n="chat.hitlReviewerAgent">审计 Agent</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<p class="hitl-page-reviewer-hint" data-i18n="hitl.pageReviewerHint">作用于当前选中会话;未选会话时保存到本机,新建会话时沿用。切换后立即生效。</p>
|
||||
</div>
|
||||
<div class="hitl-page-tabs" role="tablist">
|
||||
<button type="button" class="hitl-page-tab hitl-page-tab--active" id="hitl-tab-pending" role="tab" aria-selected="true" onclick="switchHitlPageTab('pending')">
|
||||
<span data-i18n="hitl.tabPending">待审计</span>
|
||||
<span class="hitl-tab-badge" id="hitl-pending-count" hidden>0</span>
|
||||
</button>
|
||||
<button type="button" class="hitl-page-tab" id="hitl-tab-logs" role="tab" aria-selected="false" onclick="switchHitlPageTab('logs')">
|
||||
<span data-i18n="hitl.tabLogs">审计日志</span>
|
||||
</button>
|
||||
<button type="button" class="hitl-page-tab" id="hitl-tab-strategy" role="tab" aria-selected="false" onclick="switchHitlPageTab('strategy')">
|
||||
<span data-i18n="hitl.tabStrategy">审计策略</span>
|
||||
</button>
|
||||
<button type="button" class="hitl-page-tab" id="hitl-tab-whitelist" role="tab" aria-selected="false" onclick="switchHitlPageTab('whitelist')">
|
||||
<span data-i18n="hitl.tabWhitelist">工具白名单</span>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div id="hitl-panel-pending" class="hitl-page-panel">
|
||||
<div class="hitl-filters">
|
||||
<label>
|
||||
<span data-i18n="hitl.searchLabel">搜索</span>
|
||||
<input type="search" id="hitl-pending-search" class="hitl-filter-input" data-i18n="hitl.searchPlaceholder" data-i18n-attr="placeholder" placeholder="" onkeydown="if(event.key==='Enter')filterHitlPending()" />
|
||||
</label>
|
||||
<button type="button" class="btn-secondary" onclick="filterHitlPending()" data-i18n="hitl.searchApply">搜索</button>
|
||||
</div>
|
||||
<div id="hitl-pending-list" class="hitl-pending-list"></div>
|
||||
<div id="hitl-pending-pagination" class="hitl-pending-pagination"></div>
|
||||
</div>
|
||||
|
||||
<div id="hitl-panel-logs" class="hitl-page-panel" hidden>
|
||||
<div class="hitl-filters hitl-filters--logs">
|
||||
<label>
|
||||
<span data-i18n="hitl.searchLabel">搜索</span>
|
||||
<input type="search" id="hitl-logs-search" class="hitl-filter-input" data-i18n="hitl.searchPlaceholder" data-i18n-attr="placeholder" placeholder="" onkeydown="if(event.key==='Enter')filterHitlLogs()" />
|
||||
</label>
|
||||
<label>
|
||||
<span data-i18n="hitl.filterDecision">决策</span>
|
||||
<select id="hitl-logs-decision-filter" class="hitl-filter-select" onchange="filterHitlLogs()">
|
||||
<option value="all" data-i18n="hitl.filterAll">全部</option>
|
||||
<option value="approve" data-i18n="hitl.decisionApprove">通过</option>
|
||||
<option value="reject" data-i18n="hitl.decisionReject">拒绝</option>
|
||||
</select>
|
||||
</label>
|
||||
<label>
|
||||
<span data-i18n="hitl.filterDecidedBy">审批方</span>
|
||||
<select id="hitl-logs-decidedby-filter" class="hitl-filter-select" onchange="filterHitlLogs()">
|
||||
<option value="all" data-i18n="hitl.filterAll">全部</option>
|
||||
<option value="human" data-i18n="hitl.reviewerHuman">人工</option>
|
||||
<option value="audit_agent" data-i18n="hitl.reviewerAgent">审计 Agent</option>
|
||||
<option value="system" data-i18n="hitl.reviewerSystem">系统</option>
|
||||
<option value="manual" data-i18n="hitl.reviewerManual">手动录入</option>
|
||||
</select>
|
||||
</label>
|
||||
<button type="button" class="btn-secondary" onclick="filterHitlLogs()" data-i18n="hitl.searchApply">搜索</button>
|
||||
</div>
|
||||
<div id="hitl-logs-table-wrap" class="hitl-logs-table-wrap">
|
||||
<div class="loading-spinner" data-i18n="hitl.loading">加载中...</div>
|
||||
</div>
|
||||
<div id="hitl-logs-pagination" class="hitl-logs-pagination"></div>
|
||||
</div>
|
||||
|
||||
<div id="hitl-panel-strategy" class="hitl-page-panel" hidden>
|
||||
<div class="hitl-page-strategy-bar" id="hitl-page-strategy-bar">
|
||||
<div class="hitl-page-strategy-header">
|
||||
<span class="hitl-page-strategy-label" data-i18n="hitl.strategyLabel">审计策略</span>
|
||||
<div class="hitl-page-strategy-actions">
|
||||
<button type="button" class="btn-link" id="hitl-strategy-reset-btn" onclick="resetHitlAuditStrategy()" data-i18n="hitl.strategyReset">恢复默认</button>
|
||||
<button type="button" class="btn-secondary" id="hitl-strategy-save-btn" onclick="saveHitlAuditStrategy()" data-i18n="common.save">保存</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="hitl-strategy-subtabs" role="tablist" aria-label="Audit strategy mode">
|
||||
<button type="button" class="hitl-strategy-subtab hitl-strategy-subtab--active" id="hitl-strategy-tab-approval" role="tab" aria-selected="true" data-strategy-mode="approval" onclick="switchHitlStrategyMode('approval')" data-i18n="hitl.strategyTabApproval">审批模式</button>
|
||||
<button type="button" class="hitl-strategy-subtab" id="hitl-strategy-tab-review-edit" role="tab" aria-selected="false" data-strategy-mode="review_edit" onclick="switchHitlStrategyMode('review_edit')" data-i18n="hitl.strategyTabReviewEdit">审查编辑模式</button>
|
||||
</div>
|
||||
<p class="hitl-page-strategy-hint" id="hitl-strategy-hint-approval" data-i18n="hitl.strategyHintApproval">白名单内工具免审批;审批模式下审计 Agent 仅裁决通过/拒绝。</p>
|
||||
<p class="hitl-page-strategy-hint" id="hitl-strategy-hint-review-edit" hidden data-i18n="hitl.strategyHintReviewEdit">审查编辑模式下审计 Agent 可通过 editedArguments 收窄参数后放行;无法安全改参时应拒绝。</p>
|
||||
<textarea id="hitl-audit-agent-prompt" class="hitl-strategy-textarea" rows="14" spellcheck="false" autocomplete="off"></textarea>
|
||||
<textarea id="hitl-audit-agent-prompt-review-edit" class="hitl-strategy-textarea" rows="14" spellcheck="false" autocomplete="off" hidden></textarea>
|
||||
<div id="hitl-strategy-feedback" class="hitl-apply-feedback" role="status" aria-live="polite" hidden></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="hitl-panel-whitelist" class="hitl-page-panel" hidden>
|
||||
<div class="hitl-page-whitelist-bar" id="hitl-page-whitelist-bar">
|
||||
<div class="hitl-page-whitelist-header">
|
||||
<span class="hitl-page-whitelist-label" data-i18n="hitl.whitelistLabel">免审批工具白名单</span>
|
||||
<button type="button" class="btn-secondary" id="hitl-page-whitelist-save-btn" onclick="saveHitlPageWhitelist()" data-i18n="common.save">保存</button>
|
||||
</div>
|
||||
<p class="hitl-page-whitelist-hint" data-i18n="hitl.whitelistHint">每行一个或逗号分隔;保存后写入 config.yaml 全局白名单并立即生效(与聊天侧栏同步展示)。</p>
|
||||
<textarea id="hitl-page-sensitive-tools" class="hitl-page-whitelist-textarea" rows="6" spellcheck="false" autocomplete="off" data-i18n="chat.hitlWhitelistPlaceholder" data-i18n-attr="placeholder" placeholder=""></textarea>
|
||||
<div id="hitl-page-whitelist-feedback" class="hitl-apply-feedback" role="status" aria-live="polite" hidden></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="hitl-log-modal" class="modal" style="display:none" role="dialog" aria-modal="true" aria-labelledby="hitl-log-modal-title">
|
||||
<div class="modal-content hitl-log-modal-content">
|
||||
<div class="modal-header">
|
||||
<h3 id="hitl-log-modal-title" data-i18n="hitl.logModalView">审计日志详情</h3>
|
||||
<button type="button" class="modal-close" onclick="closeHitlLogModal()" aria-label="Close">×</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div id="hitl-log-context-readonly" class="hitl-log-readonly-section" hidden></div>
|
||||
<div id="hitl-log-execution-readonly" class="hitl-log-readonly-section" hidden></div>
|
||||
<dl class="hitl-log-detail-meta">
|
||||
<div class="hitl-log-detail-row">
|
||||
<dt data-i18n="hitl.colId">ID</dt>
|
||||
<dd id="hitl-log-detail-id" class="hitl-log-detail-mono">—</dd>
|
||||
</div>
|
||||
<div class="hitl-log-detail-row">
|
||||
<dt data-i18n="hitl.colTool">工具</dt>
|
||||
<dd id="hitl-log-detail-tool">—</dd>
|
||||
</div>
|
||||
<div class="hitl-log-detail-row">
|
||||
<dt data-i18n="hitl.colConversation">会话</dt>
|
||||
<dd id="hitl-log-detail-conversation" class="hitl-log-detail-mono">—</dd>
|
||||
</div>
|
||||
<div class="hitl-log-detail-row">
|
||||
<dt data-i18n="hitl.colDecision">决策</dt>
|
||||
<dd id="hitl-log-detail-decision">—</dd>
|
||||
</div>
|
||||
<div class="hitl-log-detail-row">
|
||||
<dt data-i18n="hitl.colDecidedBy">审批方</dt>
|
||||
<dd id="hitl-log-detail-decided-by">—</dd>
|
||||
</div>
|
||||
<div class="hitl-log-detail-row">
|
||||
<dt data-i18n="hitl.colTime">时间</dt>
|
||||
<dd id="hitl-log-detail-time">—</dd>
|
||||
</div>
|
||||
<div class="hitl-log-detail-row hitl-log-detail-row--full" id="hitl-log-detail-comment-row" hidden>
|
||||
<dt data-i18n="hitl.fieldComment">备注</dt>
|
||||
<dd id="hitl-log-detail-comment">—</dd>
|
||||
</div>
|
||||
</dl>
|
||||
<div class="hitl-log-detail-payload" id="hitl-log-detail-payload-wrap" hidden>
|
||||
<div class="hitl-context-label" data-i18n="hitl.fieldPayload">载荷</div>
|
||||
<pre id="hitl-log-detail-payload" class="hitl-context-text"></pre>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn-secondary" onclick="closeHitlLogModal()" data-i18n="common.close">关闭</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user