01218b2907
- console: GET /api/workflows/{id}, /runs/{run_id}, /runs/{run_id}/diagnosis
(journal trace + sanitized bounded log tails, workflow/run pairing enforced)
- workbench/: dsh 宿主插件(7 个工作流工具、中文系统提示词、失败监控器、
本机回环桥接服务)+ 侧边栏面板客户端包(sidebar.footer.action 与
shell.overlay 追加插槽)+ 降级独立面板 + 一键启动脚本
- adapters/browser: 收敛 looks_like_login_url 到共享层,修复
jd_main_image_collector 对 gyxx_flow.accounts 的越层导入
- tests: 新端点覆盖;replay_policy 断言对齐已迁移的 catalog(repeatable)
5.3 KiB
5.3 KiB
智能工作台设计(dsh-refact 分支)
状态:v1 已实现。本文档记录「以 deepseek-harness 为 agent 底座、gyxx-flow 工作流插件化」 的架构决策与边界。使用说明见 ../workbench/README.md。
目标与约束
- 底座:deepseek-harness(
dsh)Web UI + DeepSeek 模型 = 智能体运行时; gyxx-flow 保持唯一的工作流执行/调度事实来源(LangGraph 引擎、RunJournal、LockManager、EffectLedger契约不变)。 - 插件化:不重写工作流;通过 dsh「everything-is-a-plugin」扩展点把现有 控制台能力投影为智能体工具与 UI 面板。
- UI:在原 dsh Web UI 侧边栏追加工作流入口(
sidebar.footer.action+shell.overlay两个追加型插槽,不替换任何内置区域),选中工作流即可 提问 / 诊断 / 修复。 - 生产约束(AGENTS.md):
gyxx schedule run仍是唯一生产调度路径; 正式执行保持execute + confirmed双确认;控制台仍以--env-file注入云端凭据 (启动脚本默认D:\product-collector-analyze-flow\.env)。
为什么不把 gyxx-flow 改写进 dsh monorepo
dsh 是 pnpm monorepo(host/client 双聚合、Typert 远程契约、自有构建链)。
把 Python 工作流引擎迁进去既不可能也无必要。dsh 的外部插件机制
(--patch cordis.yml + 绝对路径插件 + dsh.client 包声明)就是为这种
「外部系统接入」设计的。我们选择进程外集成:
- gyxx-flow 控制台 HTTP API 是唯一集成面(已含脱敏、并发守卫、写操作令牌);
- 工作台插件只是控制台的客户端 + 智能体能力注册器;
- 控制台挂了,dsh 照常可用;dsh 挂了,调度器照常跑。
组件
1. 控制台诊断端点(Python,src/gyxx_flow/console.py)
| 端点 | 说明 |
|---|---|
GET /api/workflows/{id} |
单工作流详情(overview 投影 + schedule_revision) |
GET /api/workflows/{id}/runs/{run_id} |
单次运行 + 步骤明细 |
GET /api/workflows/{id}/runs/{run_id}/diagnosis |
诊断包:运行 + journal trace + 脱敏日志尾部 |
诊断包日志来源:run.json 的 trace.paths.log 目录 + 运行时间窗内的控制台日志
(logs/console/{workflow_id}-*.log),每个文件限读尾部 256KB,经 _sanitize_error
脱敏并截断,单响应最多 5 个文件。run_id 与 workflow_id 强制配对(404 不泄露
跨工作流记录)。
2. 宿主插件(workbench/plugin/gyxx-workbench.mjs,零运行时依赖)
- 7 个工具(原始 JSON-Schema
ToolDefinition,不 import 任何 dsh 包, 保证以绝对路径加载时无解析风险); - 系统提示词段(
gyxx-workbench,order 700):中文运维契约与安全规则; - 失败监控器:
ctx.effect轮询,workflow_id+run_id去重,自定义事件gyxx-workbench/alert+ 可选自动诊断会话; - 桥接服务(127.0.0.1:8790):为浏览器面板代理控制台 API(控制台禁 CORS,
面板无法直连),并承载
/bridge/ask会话创建与降级页面。 写操作校验x-gyxx-workbench: 1+ JSON content-type;CORS 仅回环来源。
3. 侧边栏面板(workbench/plugin/client/)
- React 源码经 esbuild 打包为 CJS,平台模块(react 等)按 dsh 模块表协议外置,
包装为
window.__ModuleLoader__.load({id, factory})——与官方 tsdown 产物同协议; package.json的dsh.client声明让client-modules扫描器(支持路径型 Loader 条目,向上找最近 package.json)发现并提供该浏览器包;- 插槽:
sidebar.footer.action(「工作流」开关 + 聚合状态点)、shell.overlay(左抽屉面板 + 失败 toast)。均为 list 型追加插槽,不替换内置区域; - 面板动作:提问/诊断/修复(创建带工作流上下文的智能体会话)、试运行/正式运行 (浏览器端 confirm)、停止、运行历史查看、单运行诊断视图。
4. 会话创建(/bridge/ask)
ctx.agents.create({ sessionId, meta: { cwd, origin } }) → agent.followup() 注入
带工作流上下文的首条用户消息。新会话自动出现在 dsh 会话列表(host 侧创建即入册)。
文案模板区分 ask/diagnose/repair 三种动作。
已知限制(v1)
- 会话创建后不能自动聚焦(dsh 客户端无公开的「选中会话」运行时 API);面板以 toast 提示用户在会话列表中点开。
sidebar.workspaces为 single 型插槽(替换即失去会话树),故面板走 overlay 抽屉而非内嵌会话树;若未来 dsh 提供追加型侧栏区块插槽,可平移。- 客户端包协议依赖 dsh 未冻结的 developer-preview 契约;升级 dsh 需回归验证 (README「依赖的 dsh 扩展点」一节列出了核对清单)。
autoDiagnose默认关闭:自动开会话会产生模型调用成本。
测试
- Python:
tests/test_console.py新增 5 用例(详情/运行详情/诊断包/越权配对/HTTP 路由)。 - 插件:
workbench/plugin/tests/(node:test)——工具注册、离线错误结构化、 confirmed 守卫、桥接代理。 - 端到端手工验证:
start-workbench.ps1→ 面板选中工作流 → 提问/诊断/修复/试运行。