c7de4745f4
Adds the Cloud Workbench Code Agent chat path and keeps provider/credential gaps explicit instead of faking replies.
275 lines
12 KiB
HTML
275 lines
12 KiB
HTML
<!doctype html>
|
|
<html lang="zh-CN">
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
<title>HWLAB 云工作台</title>
|
|
<link rel="stylesheet" href="/styles.css" />
|
|
<script type="module" src="/app.mjs"></script>
|
|
</head>
|
|
<body>
|
|
<main class="workbench-shell" data-app-shell data-help-route-policy="non-default-internal-help" data-internal-help-path="/help.md">
|
|
<aside class="activity-rail" aria-label="工作台活动栏">
|
|
<button class="rail-button active" type="button" data-route="workspace" title="工作台" aria-label="工作台">工作台</button>
|
|
<button class="rail-button" type="button" data-route="gate" title="内部复核" aria-label="内部复核">内部复核</button>
|
|
<button class="rail-button" type="button" data-route="help" title="使用说明" aria-label="使用说明">使用说明</button>
|
|
<span class="rail-spacer" aria-hidden="true"></span>
|
|
<button class="rail-button" id="explorer-toggle" type="button" title="展开或收起资源树" aria-label="展开或收起资源树">资源树</button>
|
|
</aside>
|
|
|
|
<aside class="explorer" aria-label="资源浏览与硬件资源树">
|
|
<header class="explorer-head">
|
|
<div>
|
|
<p class="eyebrow">HWLAB Cloud</p>
|
|
<h1>云工作台</h1>
|
|
</div>
|
|
<span class="status-dot tone-source" id="explorer-status">只读工作区</span>
|
|
</header>
|
|
<section class="quick-actions" aria-label="常用工作入口">
|
|
<button type="button" data-focus-command>编写任务</button>
|
|
<button type="button" data-side-tab-jump="wiring">查看接线</button>
|
|
<button type="button" data-side-tab-jump="control">查看状态</button>
|
|
</section>
|
|
<section class="tree-panel">
|
|
<div class="panel-title-row">
|
|
<h2>硬件资源</h2>
|
|
<span id="tree-count">0</span>
|
|
</div>
|
|
<nav id="resource-tree" class="resource-tree" aria-label="HWLAB 硬件资源"></nav>
|
|
</section>
|
|
<section class="tree-panel blockers-panel">
|
|
<div class="panel-title-row">
|
|
<h2>常用能力</h2>
|
|
<span id="capability-count">0</span>
|
|
</div>
|
|
<div id="explorer-capabilities" class="compact-list"></div>
|
|
</section>
|
|
</aside>
|
|
|
|
<section class="center-workspace">
|
|
<header class="topbar">
|
|
<div class="topbar-main">
|
|
<p class="eyebrow">用户工作台</p>
|
|
<h2>Agent 对话与硬件资源面板</h2>
|
|
<p id="route-path" class="route-path">当前浏览器会话只保存任务草稿,硬件动作需通过受控后端流程。</p>
|
|
</div>
|
|
<div class="probe-card user-card" aria-live="polite">
|
|
<span class="metric-label">工作区状态</span>
|
|
<strong id="live-status" class="tone-source">只读模式</strong>
|
|
<small id="live-detail">可整理任务、查看资源、核对接线和可信记录;不会触发硬件变更。</small>
|
|
</div>
|
|
</header>
|
|
|
|
<section class="view workbench-view" id="workspace" data-view="workspace" aria-labelledby="workspace-title">
|
|
<div class="conversation-column">
|
|
<div class="workspace-panel conversation-panel">
|
|
<div class="panel-title-row">
|
|
<div>
|
|
<p class="eyebrow">Agent 工作区</p>
|
|
<h2 id="workspace-title">Agent 对话</h2>
|
|
</div>
|
|
<span class="state-tag tone-source" id="agent-chat-status">等待输入</span>
|
|
</div>
|
|
<div class="conversation-list" id="conversation-list" aria-live="polite"></div>
|
|
</div>
|
|
|
|
<div class="workspace-panel task-panel">
|
|
<div class="panel-title-row">
|
|
<div>
|
|
<p class="eyebrow">工作清单</p>
|
|
<h2>下一步任务草稿</h2>
|
|
</div>
|
|
<span class="state-tag tone-source">浏览器本地</span>
|
|
</div>
|
|
<div id="task-list" class="task-list"></div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="view help-view" id="help" data-view="help" aria-labelledby="help-title" hidden>
|
|
<div class="workspace-panel help-panel">
|
|
<div class="panel-title-row">
|
|
<div>
|
|
<p class="eyebrow">内部说明</p>
|
|
<h2 id="help-title">使用说明</h2>
|
|
</div>
|
|
<span class="state-tag tone-dry-run" id="help-status">加载中</span>
|
|
</div>
|
|
<div id="help-content" class="help-content" aria-live="polite"></div>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="view gate-view" id="gate" data-view="gate" aria-labelledby="gate-title" hidden>
|
|
<div class="workspace-panel">
|
|
<div class="panel-title-row">
|
|
<div>
|
|
<p class="eyebrow">内部二级入口</p>
|
|
<h2 id="gate-title">Gate / 诊断 / 验收</h2>
|
|
</div>
|
|
<span class="state-tag tone-source">来源 SOURCE 报告</span>
|
|
</div>
|
|
<p class="panel-copy">
|
|
Gate、诊断、验收、BLOCKED 与 M0-M5 执行轨迹仅在此内部页面展示;默认入口保持用户工作台。
|
|
</p>
|
|
</div>
|
|
<div class="workspace-panel danger">
|
|
<div class="panel-title-row">
|
|
<div>
|
|
<p class="eyebrow">解阻路径</p>
|
|
<h2>DB live 与 patch-panel 闭环</h2>
|
|
</div>
|
|
<span class="state-tag tone-blocked">阻塞 BLOCKED</span>
|
|
</div>
|
|
<div id="unblock-list" class="compact-list"></div>
|
|
</div>
|
|
<div class="gate-grid" id="gate-metadata"></div>
|
|
<div class="workspace-panel">
|
|
<div class="panel-title-row">
|
|
<h2>M0-M5 Gate 状态</h2>
|
|
<span class="state-tag tone-blocked">阻塞 BLOCKED 实况前置失败时</span>
|
|
</div>
|
|
<div class="milestone-grid" id="milestone-grid"></div>
|
|
</div>
|
|
<div class="workspace-panel">
|
|
<div class="panel-title-row">
|
|
<h2>M0-M5 执行轨迹</h2>
|
|
<span class="state-tag tone-dry-run">演练 DRY-RUN 计划</span>
|
|
</div>
|
|
<div id="trace-list" class="trace-list"></div>
|
|
</div>
|
|
<div class="workspace-panel">
|
|
<div class="panel-title-row">
|
|
<h2>DEV 健康契约</h2>
|
|
<span class="state-tag tone-source">来源 SOURCE fixture</span>
|
|
</div>
|
|
<div class="table-wrap">
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>组件</th>
|
|
<th>服务</th>
|
|
<th>状态</th>
|
|
<th>观测来源</th>
|
|
<th>端点</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody id="health-body"></tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
<div class="gate-split">
|
|
<div class="workspace-panel danger">
|
|
<div class="panel-title-row">
|
|
<h2>未关闭阻塞</h2>
|
|
<span class="state-tag tone-blocked">阻塞 BLOCKED</span>
|
|
</div>
|
|
<div id="gate-blockers" class="compact-list"></div>
|
|
</div>
|
|
<div class="workspace-panel">
|
|
<div class="panel-title-row">
|
|
<h2>轻量验证</h2>
|
|
<span class="state-tag tone-source">来源 SOURCE 检查</span>
|
|
</div>
|
|
<ol id="validation-list" class="command-list"></ol>
|
|
</div>
|
|
</div>
|
|
<div class="workspace-panel">
|
|
<div class="panel-title-row">
|
|
<div>
|
|
<p class="eyebrow">同源只读</p>
|
|
<h2>诊断探测</h2>
|
|
</div>
|
|
<span class="state-tag tone-dev-live">开发实况 DEV-LIVE 只读探测</span>
|
|
</div>
|
|
<div id="diagnostics-list" class="compact-list"></div>
|
|
<div class="readonly-rpc">
|
|
<h3>允许的只读 RPC</h3>
|
|
<div id="method-list" class="rpc-chip-list"></div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<form class="command-bar" id="command-form" aria-label="Agent 输入">
|
|
<div class="input-shell">
|
|
<span class="prompt-mark">hwlab</span>
|
|
<input
|
|
id="command-input"
|
|
autocomplete="off"
|
|
type="text"
|
|
placeholder="输入要发送给 Code Agent 的消息;不会直接触发硬件变更。"
|
|
/>
|
|
</div>
|
|
<button class="command-button" id="command-send" type="submit">发送</button>
|
|
<button class="command-button secondary" id="command-clear" type="button">清空</button>
|
|
</form>
|
|
</section>
|
|
|
|
<aside class="right-sidebar" aria-label="运行状态与可信记录">
|
|
<section class="hardware-status">
|
|
<div class="panel-title-row">
|
|
<div>
|
|
<p class="eyebrow">运行界面</p>
|
|
<h2>硬件状态:BOX-SIMU / Gateway-SIMU / hwlab-patch-panel</h2>
|
|
</div>
|
|
<span class="state-tag tone-dev-live">开发实况 DEV-LIVE 只读探测</span>
|
|
</div>
|
|
<div id="hardware-list" class="hardware-list"></div>
|
|
</section>
|
|
|
|
<section class="side-workspace">
|
|
<div class="side-tabs" role="tablist" aria-label="工作台右侧面板">
|
|
<button class="side-tab active" id="tab-control" type="button" role="tab" aria-selected="true" data-side-tab="control">控制</button>
|
|
<button class="side-tab" id="tab-wiring" type="button" role="tab" aria-selected="false" data-side-tab="wiring">接线</button>
|
|
<button class="side-tab" id="tab-records" type="button" role="tab" aria-selected="false" data-side-tab="records">可信记录</button>
|
|
</div>
|
|
|
|
<section class="side-panel active" id="panel-control" role="tabpanel" aria-labelledby="tab-control" data-side-panel="control">
|
|
<div class="panel-title-row">
|
|
<h2>控制草稿</h2>
|
|
<span class="state-tag tone-dry-run">演练 DRY-RUN 仅本地</span>
|
|
</div>
|
|
<div id="control-list" class="compact-list"></div>
|
|
</section>
|
|
|
|
<section class="side-panel" id="panel-wiring" role="tabpanel" aria-labelledby="tab-wiring" data-side-panel="wiring" hidden>
|
|
<div class="panel-title-row">
|
|
<h2>接线:hwlab-patch-panel</h2>
|
|
<span class="state-tag tone-source">来源 SOURCE 接线</span>
|
|
</div>
|
|
<div class="table-wrap wiring-table-wrap">
|
|
<table class="wiring-table">
|
|
<thead>
|
|
<tr>
|
|
<th>源设备</th>
|
|
<th>源端口</th>
|
|
<th>接线盘</th>
|
|
<th>目标设备</th>
|
|
<th>目标端口</th>
|
|
<th>状态</th>
|
|
<th>证据来源</th>
|
|
<th>trace/evidence</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody id="wiring-body"></tbody>
|
|
</table>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="side-panel" id="panel-records" role="tabpanel" aria-labelledby="tab-records" data-side-panel="records" hidden>
|
|
<div class="panel-title-row">
|
|
<h2>可信记录</h2>
|
|
<span class="state-tag tone-source">来源 SOURCE + 只读查询</span>
|
|
</div>
|
|
<div id="records-list" class="compact-list"></div>
|
|
</section>
|
|
|
|
<div class="readonly-rpc sidebar-note">
|
|
<h3>复核入口</h3>
|
|
<p class="panel-copy">技术复核已移至二级页面,不作为默认工作区内容。</p>
|
|
</div>
|
|
</section>
|
|
</aside>
|
|
</main>
|
|
</body>
|
|
</html>
|