auto-save 2026-05-11 18:29 (~2)

This commit is contained in:
2026-05-11 18:29:22 +08:00
parent 61de95f8c7
commit 111dbfe6a5
2 changed files with 50 additions and 96 deletions

View File

@@ -1,18 +1,5 @@
{ {
"entries": [ "entries": [
{
"files_changed": 1,
"hash": "194bb75",
"message": "auto-save 2026-05-10 09:32 (~1)",
"ts": "2026-05-10T09:32:06+08:00",
"type": "commit"
},
{
"files_changed": 1,
"message": "Codex 会话活跃 · 最近命令codex · 分支 master · 1 项未提交变更 · 最近提交auto-save 2026-05-10 09:32 (~1)",
"ts": "2026-05-10T01:36:25Z",
"type": "session-heartbeat"
},
{ {
"files_changed": 1, "files_changed": 1,
"hash": "a94dc90", "hash": "a94dc90",
@@ -3268,6 +3255,19 @@
"message": "Polish Hermes model and MCP labels", "message": "Polish Hermes model and MCP labels",
"hash": "f298be6", "hash": "f298be6",
"files_changed": 2 "files_changed": 2
},
{
"ts": "2026-05-11T18:23:47+08:00",
"type": "commit",
"message": "auto-save 2026-05-11 18:23 (~1)",
"hash": "61de95f",
"files_changed": 1
},
{
"ts": "2026-05-11T10:26:30Z",
"type": "session-heartbeat",
"message": "Codex 会话活跃 · 最近命令codex · 分支 master · 1 项未提交变更 · 最近提交auto-save 2026-05-11 18:23 (~1)",
"files_changed": 1
} }
] ]
} }

View File

@@ -54,29 +54,33 @@
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/></svg> <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/></svg>
<span>对话</span> <span>对话</span>
</button> </button>
<button class="side-item" data-tab="research"> <button class="side-item" data-tab="sessions">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="8"/><path d="m21 21-4.3-4.3"/></svg> <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 6h18"/><path d="M3 12h18"/><path d="M3 18h18"/></svg>
<span>研究</span> <span>会话</span>
</button> </button>
<button class="side-item" data-tab="agent"> <button class="side-item" data-tab="agents">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2a5 5 0 0 0-5 5v2H5a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-9a2 2 0 0 0-2-2h-2V7a5 5 0 0 0-5-5z"/><circle cx="9" cy="14" r="1"/><circle cx="15" cy="14" r="1"/></svg> <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2a5 5 0 0 0-5 5v2H5a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-9a2 2 0 0 0-2-2h-2V7a5 5 0 0 0-5-5z"/><circle cx="9" cy="14" r="1"/><circle cx="15" cy="14" r="1"/></svg>
<span>Agent</span> <span>档案</span>
</button>
<button class="side-item" data-tab="office">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2"/><path d="M3 9h18"/><path d="M9 21V9"/></svg>
<span>工作区</span>
</button> </button>
<button class="side-item" data-tab="models"> <button class="side-item" data-tab="models">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2v20"/><path d="M2 12h20"/><path d="M4.93 4.93 19.07 19.07"/><path d="M19.07 4.93 4.93 19.07"/></svg> <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2v20"/><path d="M2 12h20"/><path d="M4.93 4.93 19.07 19.07"/><path d="M19.07 4.93 4.93 19.07"/></svg>
<span>模型</span> <span>模型</span>
</button> </button>
<button class="side-item" data-tab="integrations"> <button class="side-item" data-tab="providers">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="7" height="7" rx="1"/><rect x="14" y="3" width="7" height="7" rx="1"/><rect x="3" y="14" width="7" height="7" rx="1"/><rect x="14" y="14" width="7" height="7" rx="1"/><path d="M10 6.5h4"/><path d="M6.5 10v4"/><path d="M17.5 10v4"/><path d="M10 17.5h4"/></svg> <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M15 7h.01"/><path d="M7.5 7h3.75a3.75 3.75 0 0 1 0 7.5H9L6 18v-3.5H5A3.5 3.5 0 0 1 5 7h2.5z"/><path d="M15 14.5h1a3.5 3.5 0 0 0 0-7h-1"/></svg>
<span>集成</span> <span>提供商</span>
</button> </button>
<button class="side-item" data-tab="studio"> <button class="side-item" data-tab="skills">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2L2 7v10l10 5 10-5V7L12 2z"/><path d="M2 7l10 5 10-5"/><path d="M12 12v10"/></svg> <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2L2 7v10l10 5 10-5V7L12 2z"/><path d="M2 7l10 5 10-5"/><path d="M12 12v10"/></svg>
<span>Skill Studio</span> <span>技能</span>
</button> </button>
<button class="side-item" data-tab="cron"> <button class="side-item" data-tab="soul">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></svg> <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 3l1.8 5.2L19 10l-5.2 1.8L12 17l-1.8-5.2L5 10l5.2-1.8L12 3z"/><path d="M19 15l.8 2.2L22 18l-2.2.8L19 21l-.8-2.2L16 18l2.2-.8L19 15z"/></svg>
<span>定时任务</span> <span>人格</span>
</button> </button>
<button class="side-item" data-tab="memory"> <button class="side-item" data-tab="memory">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3 3 3 0 0 0 3-3V5a3 3 0 0 0-3-3z"/><path d="M6 10a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3 3 3 0 0 0 3-3v-2a3 3 0 0 0-3-3z"/><path d="M18 10a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3 3 3 0 0 0 3-3v-2a3 3 0 0 0-3-3z"/><path d="M12 18a3 3 0 0 0-3 3"/><path d="M12 18a3 3 0 0 1 3 3"/></svg> <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3 3 3 0 0 0 3-3V5a3 3 0 0 0-3-3z"/><path d="M6 10a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3 3 3 0 0 0 3-3v-2a3 3 0 0 0-3-3z"/><path d="M18 10a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3 3 3 0 0 0 3-3v-2a3 3 0 0 0-3-3z"/><path d="M12 18a3 3 0 0 0-3 3"/><path d="M12 18a3 3 0 0 1 3 3"/></svg>
@@ -86,17 +90,13 @@
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z"/></svg> <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z"/></svg>
<span>工具</span> <span>工具</span>
</button> </button>
<button class="side-item" data-tab="runs"> <button class="side-item" data-tab="schedules">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="22 12 18 12 15 21 9 3 6 12 2 12"/></svg> <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></svg>
<span>异步任务</span> <span>计划任务</span>
</button> </button>
<button class="side-item" data-tab="help"> <button class="side-item" data-tab="gateway">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"/><line x1="12" y1="17" x2="12.01" y2="17"/></svg> <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="7" height="7" rx="1"/><rect x="14" y="3" width="7" height="7" rx="1"/><rect x="3" y="14" width="7" height="7" rx="1"/><rect x="14" y="14" width="7" height="7" rx="1"/><path d="M10 6.5h4"/><path d="M6.5 10v4"/><path d="M17.5 10v4"/><path d="M10 17.5h4"/></svg>
<span>帮助</span> <span>网关</span>
</button>
<button class="side-item" data-tab="dashboard">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="7" height="9"/><rect x="14" y="3" width="7" height="5"/><rect x="14" y="12" width="7" height="9"/><rect x="3" y="16" width="7" height="5"/></svg>
<span>仪表盘</span>
</button> </button>
<button class="side-item" data-tab="settings"> <button class="side-item" data-tab="settings">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="3"/><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 1 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09a1.65 1.65 0 0 0-1-1.51 1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 1 1-2.83-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 1 1 2.83-2.83l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 1 1 2.83 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z"/></svg> <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="3"/><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 1 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09a1.65 1.65 0 0 0-1-1.51 1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 1 1-2.83-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 1 1 2.83-2.83l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 1 1 2.83 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z"/></svg>
@@ -345,13 +345,13 @@
</form> </form>
</section> </section>
<!-- TAB: Agent --> <!-- TAB: 档案 -->
<section class="tab-panel" id="tab-agent"> <section class="tab-panel" id="tab-agents">
<div class="panel-head"> <div class="panel-head">
<div class="panel-head-row"> <div class="panel-head-row">
<div> <div>
<h2>智能体</h2> <h2>档案</h2>
<p>创建不同角色的 AI 助手,单独对话或组成集群并行协作</p> <p>每个档案都是独立的 Hermes 工作区,可绑定模型 Profile、技能、编排阶段和提示词</p>
</div> </div>
<div class="panel-head-actions"> <div class="panel-head-actions">
<button class="glass-btn-sm primary" onclick="openAgentModal()"> <button class="glass-btn-sm primary" onclick="openAgentModal()">
@@ -448,13 +448,13 @@
</div> </div>
</div> </div>
<!-- TAB: Skill Studio (全屏编排) --> <!-- TAB: 技能 -->
<section class="tab-panel" id="tab-studio"> <section class="tab-panel" id="tab-skills">
<div class="panel-head"> <div class="panel-head">
<div class="panel-head-row"> <div class="panel-head-row">
<div> <div>
<h2>Skill Studio</h2> <h2>技能</h2>
<p id="studioSubtitle">技能库 + 编排画布 · 接入 Hermes 真实 skill(75 个,26 类) + 前端 prompt 技能</p> <p id="studioSubtitle">可复用技能库 + 编排画布 · 接入 Hermes 真实 skill(75 个,26 类) + 前端 prompt 技能</p>
</div> </div>
<div class="panel-head-actions"> <div class="panel-head-actions">
<button class="glass-btn-sm" onclick="studioNewFlow()"> <button class="glass-btn-sm" onclick="studioNewFlow()">
@@ -545,13 +545,13 @@
</div> </div>
</section> </section>
<!-- TAB: 定时任务 (Cron,真实对接 Hermes /api/jobs) --> <!-- TAB: 计划任务 (Cron,真实对接 Hermes /api/jobs) -->
<section class="tab-panel" id="tab-cron"> <section class="tab-panel" id="tab-schedules">
<div class="panel-head"> <div class="panel-head">
<div class="panel-head-row"> <div class="panel-head-row">
<div> <div>
<h2>定时任务</h2> <h2>计划任务</h2>
<p>直接对接 Hermes 后端 <code>/api/jobs</code>,所有创建/更新/删除都是真实后端操作</p> <p>通过定时运行 Agent 自动完成任务;直接对接 Hermes 后端 <code>/api/jobs</code></p>
</div> </div>
<div class="panel-head-actions"> <div class="panel-head-actions">
<button class="glass-btn-sm" onclick="refreshCron()"> <button class="glass-btn-sm" onclick="refreshCron()">
@@ -651,61 +651,15 @@
<div class="panel-head-row"> <div class="panel-head-row">
<div> <div>
<h2>模型</h2> <h2>模型</h2>
<p>管理 AI 模型 ProfilesProvider、Base URL 与线上 Hermes agent 默认运行模型</p> <p>管理模型库和 Agent 可绑定的模型 ProfilesProvider 和运行模型放在「提供商」</p>
</div> </div>
<div class="panel-head-actions"> <div class="panel-head-actions">
<button class="glass-btn-sm" onclick="refreshHermesConfig(true)"> <button class="glass-btn-sm" onclick="clearModelProfileForm()">新增 Profile</button>
<svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M3 12a9 9 0 0 1 15.5-6.3L21 8"/><path d="M21 3v5h-5"/><path d="M21 12a9 9 0 0 1-15.5 6.3L3 16"/><path d="M3 21v-5h5"/></svg>
读取运行配置
</button>
</div> </div>
</div> </div>
</div> </div>
<div class="models-scroll settings-scroll"> <div class="models-scroll settings-scroll">
<div class="settings-group wide">
<div class="settings-group-head">
<div class="settings-group-icon">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2v20"/><path d="M2 12h20"/><path d="M4.93 4.93 19.07 19.07"/><path d="M19.07 4.93 4.93 19.07"/></svg>
</div>
<div>
<div class="settings-group-title">运行模型</div>
<div class="settings-group-desc">线上 Hermes agent 当前默认调用的模型接入配置</div>
</div>
</div>
<div class="settings-group-body">
<div class="settings-grid-3">
<div class="settings-field">
<label for="hermesModelDefault">默认模型 ID</label>
<input type="text" id="hermesModelDefault" placeholder="google/gemini-3.1-pro-preview" autocomplete="off">
</div>
<div class="settings-field">
<label for="hermesModelProvider">Provider</label>
<input type="text" id="hermesModelProvider" placeholder="openrouter" autocomplete="off">
</div>
<div class="settings-field">
<label for="hermesModelBaseUrl">Base URL</label>
<input type="text" id="hermesModelBaseUrl" placeholder="https://openrouter.ai/api/v1" autocomplete="off">
</div>
</div>
<div class="settings-grid-3">
<div class="settings-field">
<label for="hermesModelApiKeyRef">AI API Key</label>
<input type="password" id="hermesModelApiKeyRef" placeholder="服务器环境变量,不在浏览器显示" disabled>
<div class="settings-help">真实 Key 仍只放在服务器环境变量;这里不保存、不回显密钥。</div>
</div>
</div>
<div class="settings-actions">
<button class="glass-btn-sm" onclick="refreshHermesConfig(true)">读取模型配置</button>
<button class="glass-btn-sm primary" id="hermesModelSaveBtn" onclick="saveModelConfig()">
<svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.3" stroke-linecap="round" stroke-linejoin="round"><path d="M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2z"/><path d="M17 21v-8H7v8"/><path d="M7 3v5h8"/></svg>
保存模型并重启
</button>
<div class="settings-help" id="hermesModelStatus">打开模型页后自动读取。</div>
</div>
</div>
</div>
<div class="settings-group wide"> <div class="settings-group wide">
<div class="settings-group-head"> <div class="settings-group-head">
<div class="settings-group-icon"> <div class="settings-group-icon">