codebee 0.1.50 → 0.1.52
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.
- package/CHANGELOG.md +13 -0
- package/README.md +3 -4
- package/app/core/automation.py +7 -1
- package/app/core/builtin_agent.py +172 -97
- package/app/core/catalog.py +21 -2
- package/app/core/jobs.py +170 -42
- package/app/core/knowledge.py +4 -1
- package/app/core/manager.py +24 -7
- package/app/core/market.py +27 -1
- package/app/core/pipeline.py +58 -12
- package/app/core/planner.py +14 -5
- package/app/core/prefs.py +25 -20
- package/app/core/router.py +189 -104
- package/app/core/runner.py +37 -3
- package/app/core/settings.py +4 -3
- package/app/core/skills.py +41 -13
- package/app/core/store.py +11 -0
- package/app/core/zentao.py +126 -17
- package/app/main.py +29 -6
- package/app/ui/app.js +13324 -13171
- package/app/ui/i18n.js +63 -4
- package/app/ui/index.html +11 -11
- package/app/ui/style.css +22 -1
- package/package.json +1 -1
package/app/ui/i18n.js
CHANGED
|
@@ -42,6 +42,9 @@
|
|
|
42
42
|
"对话厂商": "Chat provider",
|
|
43
43
|
"对话模型": "Chat model",
|
|
44
44
|
"随厂商推荐": "Provider default",
|
|
45
|
+
"指定 CLI": "Run via CLI",
|
|
46
|
+
"执行 CLI": "Agent CLI",
|
|
47
|
+
"执行 CLI:": "Agent CLI: ",
|
|
45
48
|
"只对本次对话生效,不会修改全局绑定;指定渠道不可用时会明确报错。": "Applies only to this chat and does not change global bindings. An unavailable selected route returns an explicit error.",
|
|
46
49
|
"推荐任务类型": "Recommended task type",
|
|
47
50
|
"切换类型": "Switch type",
|
|
@@ -182,6 +185,9 @@
|
|
|
182
185
|
"点击步骤卡片查看 CLI 日志": "Click a step card to view its CLI log",
|
|
183
186
|
"任务完成": "Task completed",
|
|
184
187
|
"任务失败": "Task failed",
|
|
188
|
+
"本轮完成": "Round completed",
|
|
189
|
+
"本轮失败": "Round failed",
|
|
190
|
+
"运行展示": "Run it",
|
|
185
191
|
"轮对话": "turns",
|
|
186
192
|
"产出文件": "Output files",
|
|
187
193
|
"无文件产出": "No output files",
|
|
@@ -866,6 +872,10 @@
|
|
|
866
872
|
"自定义 CLI": "Custom CLI",
|
|
867
873
|
"已归档": "Archived",
|
|
868
874
|
"已停用": "Disabled",
|
|
875
|
+
"有效 ": "Helped ",
|
|
876
|
+
"失守 ": "Missed ",
|
|
877
|
+
"注入后任务过审的次数(真实帮上忙)": "Times tasks passed review with this lesson injected (actually helped)",
|
|
878
|
+
"注入后任务仍失败的次数(没防住)": "Times tasks still failed with this lesson injected (didn't prevent it)",
|
|
869
879
|
"正在刷新模型列表…": "Refreshing model list…",
|
|
870
880
|
"无任务": "No tasks yet",
|
|
871
881
|
"暂无任务": "No tasks yet",
|
|
@@ -920,7 +930,7 @@
|
|
|
920
930
|
"默认保存路径已更新:": "Default save path updated: ",
|
|
921
931
|
"当前生效:": "Currently in effect: ",
|
|
922
932
|
"(内置默认,尚未自定义)": " (built-in default, not customized)",
|
|
923
|
-
"
|
|
933
|
+
"已保存:编排并发上限 ": "Saved: orchestration concurrency limit = ",
|
|
924
934
|
"总 Tokens": "Total tokens",
|
|
925
935
|
"调用次数": "Calls",
|
|
926
936
|
"累计费用": "Total cost",
|
|
@@ -1183,9 +1193,9 @@
|
|
|
1183
1193
|
"先选一个供应商再测试连通": "Pick a provider first",
|
|
1184
1194
|
"当前配置不生效:请检查供应商密钥、启停状态与模型选择。": "Current config is not active: check the API key, enabled state, and model selection.",
|
|
1185
1195
|
"最大并发任务数(多任务同时跑、互不打扰)": "Max concurrent tasks (run in parallel, fully isolated)",
|
|
1186
|
-
"
|
|
1196
|
+
"编排并发上限(本机资源保护)": "Orchestration concurrency limit (local resource guard)",
|
|
1187
1197
|
"1 · 串行": "1 · serial",
|
|
1188
|
-
"
|
|
1198
|
+
"编排类任务按此上限执行,满载自动转入「排队中」并每 15 秒尝试补跑(最长 10 分钟),不判失败。此上限保护的是本机资源(CLI 子进程数),与各 API 厂商的限流无关——多厂商并行不必为厂商额度调大它;direct 对话走独立轻量通道,不占此额度。自动续跑的退避等待不占执行位。": "Orchestration tasks run up to this limit; when full they queue up (shown as \"Queued\") and auto-retry every 15s for up to 10 minutes instead of failing. This guards local resources (CLI subprocesses), not provider rate limits — no need to raise it for multi-provider parallelism. Direct chats use a separate lightweight lane and don't consume this quota. Auto-resume backoff uses no execution slot.",
|
|
1189
1199
|
"正在启动": "Starting",
|
|
1190
1200
|
"默认保存路径(新建任务未指定工作目录时使用;支持 ~)": "Default save path (used when a new task doesn't specify one; ~ supported)",
|
|
1191
1201
|
"保存时把「旧默认路径下」的现有任务目录迁移到新路径(运行中的跳过;手动指定的目录不受影响)": "When saving, migrate existing task directories under the old default path to the new one (skip running tasks; manually specified paths are untouched)",
|
|
@@ -2259,7 +2269,7 @@
|
|
|
2259
2269
|
"「冷却中」是什么意思?": "What does \"Cooling down\" mean?",
|
|
2260
2270
|
"一把 Key 连续失败会被暂停 30 分钟,防止反复撞墙烧钱,到期自动恢复;也可以在密钥旁手动重置。": "A key that keeps failing is paused for 30 minutes so it stops burning money against a wall; it recovers automatically when time is up, or reset it manually next to the key.",
|
|
2261
2271
|
"任务一直显示「排队」?": "Task stuck on \"Queued\"?",
|
|
2262
|
-
"
|
|
2272
|
+
"编排任务满载(达到并发上限)时自动转入「排队中」,每 15 秒尝试补跑,最长等 10 分钟,超时才判失败;排队不占额外资源,取消随时可停。direct 对话走独立轻量通道,不占编排并发额度。自动续跑的退避等待会显示预定恢复时间;服务重启遗留的排队记录由恢复机制立即接管或收口。": "When orchestration tasks hit the concurrency limit they automatically turn to \"Queued\" and retry every 15 seconds for up to 10 minutes before failing; queuing uses no extra resources and cancel works anytime. Direct chats use a separate lightweight lane and don't consume the orchestration quota. Auto-resume backoff shows its scheduled recovery time; queued records left behind by a restart are immediately resumed or closed by recovery.",
|
|
2263
2273
|
"状态里写着「将于 HH:MM 自动续跑」?": "Status says \"Auto-resumes at HH:MM\"?",
|
|
2264
2274
|
"这一步失败了,正在退避等待自动重试,到点会接着跑,不需要手动干预;等不及也可以在详情页手动重试。": "That step failed and is backing off before an automatic retry — it continues on its own at the shown time, no manual action needed; if you can't wait, retry manually from the detail page.",
|
|
2265
2275
|
"生成的文件在哪?": "Where are the generated files?",
|
|
@@ -2321,6 +2331,7 @@
|
|
|
2321
2331
|
"64 位 Python 路径(需装 wechatauto-replica)": "64-bit Python path (with wechatauto-replica installed)",
|
|
2322
2332
|
"例如 C:\\Users\\HP\\anaconda3\\envs\\wxprobe\\python.exe": "e.g. C:\\Users\\HP\\anaconda3\\envs\\wxprobe\\python.exe",
|
|
2323
2333
|
"选择要监听的群({0})": "Pick groups to watch ({0})",
|
|
2334
|
+
"选择要监听的群(0)": "Pick groups to watch (0)",
|
|
2324
2335
|
"搜索群名": "Search group name",
|
|
2325
2336
|
"群列表为空,点「刷新群列表」": "Group list is empty — click \"Refresh group list\"",
|
|
2326
2337
|
"没有匹配的群": "No matching groups",
|
|
@@ -2463,6 +2474,54 @@
|
|
|
2463
2474
|
"本月还没有调用": "No runs this month yet",
|
|
2464
2475
|
" tokens · ": " tokens · ",
|
|
2465
2476
|
"正在运行或排队 ": "Running or queued: ",
|
|
2477
|
+
|
|
2478
|
+
// —— 2026-09-22 i18n 补漏:字典缺翻译 + 直连对话活动标签 + 标点 ——
|
|
2479
|
+
" tokens": " tokens",
|
|
2480
|
+
"tokens": "tokens",
|
|
2481
|
+
" · ": " · ",
|
|
2482
|
+
"{0} · {1} · {2}": "{0} · {1} · {2}",
|
|
2483
|
+
" · 失败 ": " · failed ",
|
|
2484
|
+
"wechatauto-replica 安装完成": "wechatauto-replica installed",
|
|
2485
|
+
"上期 ": "Prev period ",
|
|
2486
|
+
"任务开始": "Task starts",
|
|
2487
|
+
"例:20": "e.g. 20",
|
|
2488
|
+
"保存全部钩子": "Save all hooks",
|
|
2489
|
+
"保存钩子": "Save hook",
|
|
2490
|
+
"内置": "Built-in",
|
|
2491
|
+
"刷新分支列表": "Refresh branch list",
|
|
2492
|
+
"加一条钩子": "Add a hook",
|
|
2493
|
+
"命令:python D:\\proj\\hook.py(stdin 收 JSON,stdout 回 {\"inject\":\"文本\"})": "Command: python D:\\proj\\hook.py (reads JSON event from stdin, writes {\"inject\": \"text\"} to stdout)",
|
|
2494
|
+
"在任务生命周期的关键点执行本机命令:命令从标准输入收到 JSON(事件与任务上下文),标准输出回 {\"inject\": \"文本\"} 即把文本注入提示词(run_end 的输出被忽略,适合回写知识库)。命令按空格分词执行,不支持管道;失败或超时自动跳过,绝不挡主流程。": "Run a local command at key points in the task lifecycle: it receives JSON on stdin (event and task context); anything it prints to stdout as {\"inject\": \"text\"} is injected into the prompt (run_end output is ignored — handy for writing back to the knowledge base). The command is split on spaces, no pipes; failures and timeouts are skipped and never block the main flow.",
|
|
2495
|
+
"导出 txt 丢进监控文件夹,或开启微信直连由蜜蜂自动拉取;按间隔增量生成每群摘要。记录只存本地;摘要请求会发给当前绑定的模型,桌面小蜜蜂会提醒新摘要。": "Export a txt into the watch folder, or enable the WeChat direct connection and let the bee pull it automatically; each group's digest is generated incrementally at every interval. Records stay local; digest requests go to the currently bound model, and the desktop bee notifies you when a new digest is ready.",
|
|
2496
|
+
"推荐": "Recommended",
|
|
2497
|
+
"摘要列表": "Digest list",
|
|
2498
|
+
"操作失败": "Operation failed",
|
|
2499
|
+
"新建任务": "New task",
|
|
2500
|
+
"新建钩子": "New hook",
|
|
2501
|
+
"正在删除任务…": "Deleting task…",
|
|
2502
|
+
"测试成功后自动保存连接并拉取产品列表": "On a successful test, saves the connection and fetches the product list",
|
|
2503
|
+
"消息送达": "Message delivered",
|
|
2504
|
+
"澄清响应较慢,已直接创建任务…": "Clarify is slow — task created directly…",
|
|
2505
|
+
"管理模型…": "Manage models…",
|
|
2506
|
+
"自动:按任务类型与风险动态决定步骤": "Auto: adapt steps to task type and risk",
|
|
2507
|
+
"设置 → 用量统计:每次调用的模型、token 与费用按多个维度聚合展示,历史运行会在启动时自动回填——每个任务花了多少,一目了然。": "Settings → Usage: every call's model, tokens and cost are aggregated across dimensions, and past runs are backfilled at startup — you can see what each task cost at a glance.",
|
|
2508
|
+
"超时(秒)": "Timeout (s)",
|
|
2509
|
+
"运行中…": "Running…",
|
|
2510
|
+
"运行结束": "Run finished",
|
|
2511
|
+
"还没有钩子——点「新建钩子」在任务开始 / 消息送达 / 运行结束时挂你自己的脚本。": "No hooks yet — click \"New hook\" to run your own script on task start / message delivered / run end.",
|
|
2512
|
+
"连接成功,已保存;正在拉取产品清单…": "Connected and saved; fetching products…",
|
|
2513
|
+
"钩子": "Hooks",
|
|
2514
|
+
"钩子名称": "Hook name",
|
|
2515
|
+
"钩子已保存": "Hook saved",
|
|
2516
|
+
"请求工具": "Requesting tools",
|
|
2517
|
+
",": ", ",
|
|
2518
|
+
"。": ". ",
|
|
2519
|
+
"《": "“",
|
|
2520
|
+
"》": "”",
|
|
2521
|
+
"【": "[",
|
|
2522
|
+
"】": "]",
|
|
2523
|
+
"(已发 ": " (sent ",
|
|
2524
|
+
"未命名": "Untitled",
|
|
2466
2525
|
};
|
|
2467
2526
|
|
|
2468
2527
|
// ---------- 工具 ----------
|
package/app/ui/index.html
CHANGED
|
@@ -379,7 +379,7 @@
|
|
|
379
379
|
<option data-i18n="专家:完整规划、多评审、失败修复与换将" value="expert">专家:完整规划、多评审、失败修复与换将</option>
|
|
380
380
|
<option data-i18n="手动:自行指定实现者与评审组" value="manual">手动:自行指定实现者与评审组</option>
|
|
381
381
|
</select>
|
|
382
|
-
<span class="cmp-sel-face" id="f-mode-face">自动</span>
|
|
382
|
+
<span class="cmp-sel-face" id="f-mode-face" data-i18n="自动">自动</span>
|
|
383
383
|
<svg class="ico chev" aria-hidden="true"><use href="#i-chevron-r"></use></svg>
|
|
384
384
|
</span>
|
|
385
385
|
<span class="cmp-sel" data-i18n-title="思考程度" title="思考程度">
|
|
@@ -389,13 +389,13 @@
|
|
|
389
389
|
<option data-i18n="快速:少推理、优先响应" value="low">快速:少推理、优先响应</option>
|
|
390
390
|
<option data-i18n="深度:更多推理与检查" value="high">深度:更多推理与检查</option>
|
|
391
391
|
</select>
|
|
392
|
-
<span class="cmp-sel-face" id="f-thinking-face">标准</span>
|
|
392
|
+
<span class="cmp-sel-face" id="f-thinking-face" data-i18n="标准">标准</span>
|
|
393
393
|
<svg class="ico chev" aria-hidden="true"><use href="#i-chevron-r"></use></svg>
|
|
394
394
|
</span>
|
|
395
395
|
<!-- 厂商/模型 pill(仅「直接执行」类型显示):点开厂商→模型两级
|
|
396
396
|
钻取菜单,选定写回隐藏 select 真源 -->
|
|
397
397
|
<span class="cmp-sel hidden" id="f-direct-wrap" data-i18n-title="对话模型(可选)" title="对话模型(可选)">
|
|
398
|
-
<button type="button" class="cmp-sel-face cmp-sel-btn" id="f-direct-btn" onclick="toggleModelMenu()" aria-haspopup="menu" aria-controls="cmp-model-menu">自动推荐</button>
|
|
398
|
+
<button type="button" class="cmp-sel-face cmp-sel-btn" id="f-direct-btn" onclick="toggleModelMenu()" aria-haspopup="menu" aria-controls="cmp-model-menu" data-i18n="自动推荐">自动推荐</button>
|
|
399
399
|
<svg class="ico chev" aria-hidden="true"><use href="#i-chevron-r"></use></svg>
|
|
400
400
|
<div id="cmp-model-menu" class="type-menu hidden" role="menu" aria-label="对话模型" data-i18n-aria="对话模型"></div>
|
|
401
401
|
</span>
|
|
@@ -424,7 +424,7 @@
|
|
|
424
424
|
<div id="f-direct-model" class="field hidden"><label data-i18n="对话模型(可选)">对话模型(可选)</label><div class="grid-2">
|
|
425
425
|
<select id="f-direct-provider" aria-label="对话厂商" data-i18n-aria="对话厂商"><option data-i18n="自动推荐">自动推荐</option></select>
|
|
426
426
|
<select id="f-direct-model-name" aria-label="对话模型" data-i18n-aria="对话模型"><option data-i18n="随厂商推荐">随厂商推荐</option></select>
|
|
427
|
-
</div><p class="hint" data-i18n="只对本次对话生效,不会修改全局绑定;指定渠道不可用时会明确报错。">只对本次对话生效,不会修改全局绑定;指定渠道不可用时会明确报错。</p></div>
|
|
427
|
+
</div><input type="hidden" id="f-direct-agent" value=""><p class="hint" data-i18n="只对本次对话生效,不会修改全局绑定;指定渠道不可用时会明确报错。">只对本次对话生效,不会修改全局绑定;指定渠道不可用时会明确报错。</p></div>
|
|
428
428
|
<div class="grid-2">
|
|
429
429
|
<div class="field">
|
|
430
430
|
<label data-i18n="继续会话">继续会话</label>
|
|
@@ -578,7 +578,7 @@
|
|
|
578
578
|
<option data-i18n="专家:完整规划、多评审、失败修复与换将" value="expert">专家:完整规划、多评审、失败修复与换将</option>
|
|
579
579
|
<option data-i18n="手动:自行指定实现者与评审组" value="manual">手动:自行指定实现者与评审组</option>
|
|
580
580
|
</select>
|
|
581
|
-
<span class="cmp-sel-face" id="rd-mode-face">自动</span>
|
|
581
|
+
<span class="cmp-sel-face" id="rd-mode-face" data-i18n="自动">自动</span>
|
|
582
582
|
<svg class="ico chev" aria-hidden="true"><use href="#i-chevron-r"></use></svg>
|
|
583
583
|
</span>
|
|
584
584
|
<span class="cmp-sel" data-i18n-title="思考程度" title="思考程度">
|
|
@@ -588,11 +588,11 @@
|
|
|
588
588
|
<option data-i18n="快速:少推理、优先响应" value="low">快速:少推理、优先响应</option>
|
|
589
589
|
<option data-i18n="深度:更多推理与检查" value="high">深度:更多推理与检查</option>
|
|
590
590
|
</select>
|
|
591
|
-
<span class="cmp-sel-face" id="rd-thinking-face">标准</span>
|
|
591
|
+
<span class="cmp-sel-face" id="rd-thinking-face" data-i18n="标准">标准</span>
|
|
592
592
|
<svg class="ico chev" aria-hidden="true"><use href="#i-chevron-r"></use></svg>
|
|
593
593
|
</span>
|
|
594
594
|
<span class="cmp-sel" id="rd-model-wrap" data-i18n-title="对话模型" title="对话模型">
|
|
595
|
-
<button type="button" class="cmp-sel-face cmp-sel-btn" id="rd-model-btn" onclick="toggleRdModelMenu()" aria-haspopup="menu" aria-controls="rd-model-menu">自动推荐</button>
|
|
595
|
+
<button type="button" class="cmp-sel-face cmp-sel-btn" id="rd-model-btn" onclick="toggleRdModelMenu()" aria-haspopup="menu" aria-controls="rd-model-menu" data-i18n="自动推荐">自动推荐</button>
|
|
596
596
|
<svg class="ico chev" aria-hidden="true"><use href="#i-chevron-r"></use></svg>
|
|
597
597
|
<div id="rd-model-menu" class="type-menu hidden" role="menu" aria-label="对话模型" data-i18n-aria="对话模型"></div>
|
|
598
598
|
</span>
|
|
@@ -927,12 +927,12 @@
|
|
|
927
927
|
<p data-i18n="「编排者」是 CodeBee 自己的智能体:直连 API 供应商的模型(不占 CLI 会话),统一负责任务规划拆解、难度判定与写作大纲。未启用或调用失败时自动回落为「最强可用 CLI 智能体」规划,流程永不阻塞。" class="hint">「编排者」是 CodeBee 自己的智能体:直连 API 供应商的模型(不占 CLI 会话),统一负责任务规划拆解、难度判定与写作大纲。未启用或调用失败时自动回落为「最强可用 CLI 智能体」规划,流程永不阻塞。</p>
|
|
928
928
|
<div id="orch-config"></div>
|
|
929
929
|
<h3 data-i18n="运行设置" class="sec-title">运行设置</h3>
|
|
930
|
-
<div class="field"><label data-i18n="
|
|
930
|
+
<div class="field"><label data-i18n="编排并发上限(本机资源保护)">编排并发上限(本机资源保护)</label>
|
|
931
931
|
<div class="input-row">
|
|
932
|
-
<input id="set-workers" type="number" min="1" max="
|
|
932
|
+
<input id="set-workers" type="number" min="1" max="24" value="12">
|
|
933
933
|
<button data-i18n="保存" class="ghost small" onclick="saveSettings()">保存</button>
|
|
934
934
|
</div>
|
|
935
|
-
<p data-i18n="
|
|
935
|
+
<p data-i18n="编排类任务按此上限执行,满载自动转入「排队中」并每 15 秒尝试补跑(最长 10 分钟),不判失败。此上限保护的是本机资源(CLI 子进程数),与各 API 厂商的限流无关——多厂商并行不必为厂商额度调大它;direct 对话走独立轻量通道,不占此额度。自动续跑的退避等待不占执行位。" class="hint">编排类任务按此上限执行,满载自动转入「排队中」并每 15 秒尝试补跑(最长 10 分钟),不判失败。此上限保护的是本机资源(CLI 子进程数),与各 API 厂商的限流无关——多厂商并行不必为厂商额度调大它;direct 对话走独立轻量通道,不占此额度。自动续跑的退避等待不占执行位。</p>
|
|
936
936
|
</div>
|
|
937
937
|
<div class="field"><label data-i18n="默认保存路径(新建任务未指定工作目录时使用;支持 ~)">默认保存路径(新建任务未指定工作目录时使用;支持 ~)</label>
|
|
938
938
|
<div class="input-row">
|
|
@@ -1309,7 +1309,7 @@
|
|
|
1309
1309
|
<div class="welcome-card" role="dialog" aria-modal="true" aria-labelledby="welcome-title">
|
|
1310
1310
|
<button class="welcome-x icon-btn" title="关闭" aria-label="关闭" data-i18n-title="关闭" data-i18n-aria="关闭" onclick="welcomeClose()">✕</button>
|
|
1311
1311
|
<div class="help-rail">
|
|
1312
|
-
<span class="welcome-badge" id="welcome-badge">首次启动</span>
|
|
1312
|
+
<span class="welcome-badge" id="welcome-badge" data-i18n="首次启动">首次启动</span>
|
|
1313
1313
|
<div class="welcome-brand">
|
|
1314
1314
|
<svg class="ico welcome-bee" aria-hidden="true"><use href="#i-bee"></use></svg>
|
|
1315
1315
|
<span class="brand-name">CodeBee</span>
|
package/app/ui/style.css
CHANGED
|
@@ -5565,9 +5565,11 @@ button.request-busy > * { opacity: .18; }
|
|
|
5565
5565
|
/* 禅道自动化开关行:四个开关做成并列胶囊(选中态用强调色淡染,一眼看出开了哪些),
|
|
5566
5566
|
扫描间隔靠右成组「标签 + 圆角输入框(内嵌单位)」。窄屏自动换行、间隔独占一行。
|
|
5567
5567
|
(此前 grid 版与 flex 版叠了两层,后者已全量覆盖前者,此处合并成单块) */
|
|
5568
|
+
/* 禅道页小节标题收边距(全局 24px/12px 在这块 12px 高的小标题上下显得空) */
|
|
5569
|
+
#sub-zentao .sec-title { margin: 14px 0 8px; }
|
|
5568
5570
|
.zt-auto-options {
|
|
5569
5571
|
display: flex; flex-wrap: wrap; align-items: center;
|
|
5570
|
-
gap: 10px 12px; grid-template-columns: none; margin:
|
|
5572
|
+
gap: 10px 12px; grid-template-columns: none; margin: 0 0 4px;
|
|
5571
5573
|
}
|
|
5572
5574
|
.zt-auto-options > .toggle {
|
|
5573
5575
|
display: inline-flex; align-items: center; gap: 8px;
|
|
@@ -6065,3 +6067,22 @@ button.request-busy > * { opacity: .18; }
|
|
|
6065
6067
|
#run-list .item .rt { gap: 0; }
|
|
6066
6068
|
}
|
|
6067
6069
|
|
|
6070
|
+
|
|
6071
|
+
/* ---------- 对话结果卡「运行展示」弹窗:file-pop 内嵌运行视图 iframe ----------
|
|
6072
|
+
* 弹窗正文是 overflow:auto 的纵排容器(不同于 .pv-body 的 flex 填满),
|
|
6073
|
+
* 给 iframe 显式高度即可;白底与 .pv-frame 同口径——生成的页面多为浅色,
|
|
6074
|
+
* 深色皮肤下也不该透出暗底把内容染脏。 */
|
|
6075
|
+
#file-pop .fp-frame {
|
|
6076
|
+
display: block; width: 100%; height: min(72vh, 660px);
|
|
6077
|
+
border: none; border-radius: 10px; background: #fff;
|
|
6078
|
+
}
|
|
6079
|
+
|
|
6080
|
+
/* 对话模型菜单里的 CLI 分组标题(2026-09-23 手动指定 CLI):与底部
|
|
6081
|
+
* 「管理模型…」同款弱化字重,但不可点,仅作分组界碑。 */
|
|
6082
|
+
.type-menu-cap {
|
|
6083
|
+
padding: 7px 14px 3px;
|
|
6084
|
+
font-size: 11px; font-weight: 600; letter-spacing: .04em;
|
|
6085
|
+
color: var(--muted);
|
|
6086
|
+
border-top: 1px solid var(--line, rgba(127,127,127,.18));
|
|
6087
|
+
margin-top: 4px;
|
|
6088
|
+
}
|
package/package.json
CHANGED