Skip to content

同步本地主线:合并 GitHub 上游、撞号重定版与深链导航修复(37 提交 / 24 个 tag) - #4

Open
hkluoji-lab wants to merge 42 commits into
techflag:mainfrom
hkluoji-lab:main
Open

hkluoji-lab wants to merge 42 commits into
techflag:mainfrom
hkluoji-lab:main

Conversation

@hkluoji-lab

Copy link
Copy Markdown

内容

  • 合并上游 de5077b(合并基点 f00e273),冲突按既定策略保留本地导航决策:未实现入口保留侧栏行并标「(待开放)」,已实现页面由所属插件自持入口
  • 撞号重定版:root 0.1.0-alpha.8、bundle alpha.50、skills alpha.32、office alpha.8、workbench alpha.13、library alpha.3
  • 修复 ?workdsh-view= 深链冷启动被官方首次导航恢复清空
  • 探针外观断言改为官方主题契约
  • 依赖统一锁定 alpha.2 基线,lockfile 重生成

验证(真实执行)

  • pnpm install / build / typecheck 均通过
  • check:plan PASS、check:versions PASS(513 条锁定 alpha.2)
  • test:integration 110/110、test:planning 2/2、test:activity 14/14、test:office:csv 2/2、test:office:content 21/21、probe:install 三段 PASS

已知未通过(如实登记)

  • probe:browser 停在第 162 行后的 mcp-client(playwright-mcp) 同 Host 重名阻塞(非本 PR 引入)
  • probe:experts 既有未通过

24 个 tag 已同步到 fork https://github.com/hkluoji-lab/workdsh ,PR 不携带 tag 对象。

证据见 docs/STATUS.md 顶部小节。

techflag and others added 30 commits September 16, 2026 16:10
Replace the WorkDSH label rendered by the public sidebar.brand.name slot
with DSH JOB AI, leaving the mark, the owner and the test id untouched.
The browser probe assertion follows the new visible text, and the bundle
module version moves to 0.1.0-alpha.46 with a changelog entry.
Refresh docs/deepseek-harness-docs against tag dsh-v0.1.6-alpha.1 so the
mirror matches the pinned release (530 files, verified file by file),
follow the upstream rename of the code-runtime page to ptc-runtime and
unify the remaining 0.1.5-rc.1 references in docs and on the website.

Drop the pnpm overrides for the three package names retired in this
version line; the resolved lock already used their replacements, so the
installed tree is unchanged. The version check now also fails when an
override points at a package that no longer resolves, which is how the
stale entries went unnoticed.
Move the documented and scripted preview address off 18989 so the local
preview matches the address actually in use; WORKDSH_PREVIEW_PORT still
overrides it.
合并远端 v0.1.0-alpha.5 线(专家团韧性验收、PPT 原生画布坐标修正、office/activity/contracts 更新)
与本地 DSH 0.1.6-alpha.1 线(文档镜像同步、退役包名清理、品牌 DSH JOB AI、预览端口 3031)。

docs/STATUS.md 冲突按倒序流水账规则解决:远端两节(16:14 前)在前,本地四节在后,两边内容全部保留。
README.md、README.zh-CN.md、package.json 自动合并。
…lanned module

左侧「助理」此前只是 workbench 通过官方 sidebar.panellist 贡献的展示占位。
ADR-0027 将其定义为引用型工作入口包:只承担职责描述与技能、专家、连接器实例的
引用,不拥有执行、会话、凭据、数据与权限。本地文件继续由原生工作区与 office
内容服务承担;唤起本机应用或小程序只能经官方 computer-use 或显式授权命令并经过
审批;出站写入遵守 ADR-0007 的审批与回执边界;入站机器人常驻服务属部署形态,
不在业务插件内自建。

新增 P1-12 任务定义与 packages/plugins/assistant 规划骨架(README 与目录占位,
无 package.json、无加载入口)。不修改 development-order.json,P1-12 保持未排期,
D00—D15 门槛与顺序不变。
…deps as a graph

用户确认 P1-12 按独立模块推进,排在 D08 之后,并纳入首期集成与组合验收,
必须在 D10 之前完成。development-order 追加 D16(dependsOn [D08]),
D10 的依赖改为 [D09, D16],lastReconciled 更新为 2026-09-16。

为在不重编号 D00—D15 的前提下表达该约束,依赖由线性链放宽为显式图,
currentStep 改为按依赖就绪判定;步骤数不少于 16 与编号连续性的断言保留。
两者必须同批落地,否则旧校验器会拒绝新的依赖声明。
An aborted fetch does not always reject with DOMException AbortError:
when the plugin lifetime ends (dispose or dev module reload) or a request
is superseded, the browser can reject with a TypeError: Failed to fetch
that carries no code at all. The management client and its callers only
classified failures by error type, so every normal cancellation was
logged and surfaced as a skill service fault on the skills page.

Attribute transport failures by our own signal state first (timeout, then
cancelled) and fall back to the error type, keep server-side business
errors out of the transport catch, and let the panel hold a single
in-flight read that aborts its superseded request while revalidation
waits for it.

Verified with typecheck, build, preview:install (byte-compared), the
skills probe (8 PASS) and a browser run: no module console output on a
cold load or after repeated refresh and tab switching, all requests 200.
…aries

- probe:experts installed six tarballs with --offline into a fresh mkdtemp
  HOME, which cannot resolve transitive packages on a clean machine; use
  --prefer-offline like the other packaged probes.
- BusinessPanel gains a required `boundary` field so each planned entry
  names its own development step, missing data and one real next step
  instead of sharing hard-coded placeholder text.
- expose the skill catalog builder as `catalog:build` and document the
  marketplace image contract it requires.
The second Session created in one Host fails inside the official
browser-use MCP mount: the mcp__playwright-mcp__* registrations land in
the global tool layer, so the second agent collides on the same server
name and sessionController.create rejects with gateway/internal.

Recorded evidence: the official log lines (the default exporter only
buffers in memory), the ternary branch in dsh-tools/dsh-system-prompt
that identifies a global-layer duplicate, the two dsh-scope module
instances the Host resolves, the controlled probe that reproduces the
invisible scope tag, the dependency declaration that creates the second
copy, and the bundle insert that mounts the official browser plugins.

Also re-aligns the module/step ledger with the released module versions
and adds the boundary note for the planned assistant entry pack.
The Trae credential popup now hands git a working token, but Gitee
answers 403 Access denied for techflag/workdsh, and the techflag account
cannot be signed into from this machine. The ten local commits therefore
stay local until the repository owner grants write access or another
authorised account is used, so stop retrying the push.

Also corrects the earlier note that claimed the Trae askpass IPC never
responds from a terminal: it did respond, and 403 was the real failure.
The repeated `/plugins/events` failures on dsh.10ge.cn are not a deployment
defect: the endpoint is an SSE stream that goes idle after the handshake, and
the office egress path silently clears it every ~120-127s. Six A/B probes
(Cloudflare x gzip x client x TCP keepalive) plus 70 server-side
`canceled by remote` events in 3h place the cause outside dsh, Caddy and the
tunnel. The retry noise is the client's expected backoff; `/modlens/config`
403 is loopback-only by design and needs no fix.

Record the read-only statistics device started to confirm this over >=24h
(hourly cron, `/var/lib/dsh-sse-watch/`); no production config was changed and
no heartbeat relay was added.

Also record why `git pull --tags origin main` kept failing: the repo sets
neither `pull.rebase` nor `pull.ff`, so the divergence was resolved with an
explicit `--no-rebase` merge instead of touching git config.
The GitHub credential on this machine has no write access to
techflag/workdsh and the Gitee remote has no stored credential, so the
only available return channel was a fork pull request. Records the three
remote locations, the three-way review of the four files both sides
touched, the verification chain on the merged tree, and the two traps
hit on the way (git add -u for the ignored /docs/, and the missing
pull.rebase/pull.ff).
ADR-0028 fixes the ownership and boundary of the idle-heartbeat relay
between dsh and Caddy, so /plugins/events stops being reclaimed by the
office egress at ~127s. STATUS records the derived-only deployment, the
byte-exact smoke and public-endpoint evidence, the browser-side checks,
and the two cancellations that remain unexplained.
…library panel to its plugin

Sidebar entries for 助理/项目/定时任务/更多 pointed at placeholder main panels, and
the library row collided with the panel the library plugin registers.

- workbench only registers a `main` occupant for its own `pending` entries, so
  `workdsh-library` is owned by workdsh-plugin-library alone.
- those four entries carry a structured reason and the currently usable path; the
  sidebar label gets a 待开放 suffix, since the official `sidebar.panellist`
  contract exposes no disabled semantics.
- bundle 0.1.0-alpha.47, workbench 0.1.0-alpha.11; probe assertion follows the labels.
- record the deployment, the container registry constraint, and the profile-layer
  computer-use disable in STATUS and the dsh-10ge-ops skill.
- /modlens/config 403 定位为第三方插件 @liustack/modlens 的 loopback-only 同源防线:
  容器内 Host=127.0.0.1:3080 → 200、Host=dsh.10ge.cn → 403,非 WorkDSH 缺陷,不改其代码。
- 本地预览 profile 补装 workdsh-plugin-library(11 → 12 项依赖)后复验:
  1440×1000 实测导航六项逐字一致、资料库为真实页面(网格 292px 868px)、
  四个待开放入口渲染徽标与原因,pageerror/console error 均 0,无 layout.selectPanel 报错。
- 登记新发现(未修改):仅装 bundle 不装 library 时,「资料库」入口无 main 面板会抛错。
工作台此前无条件注册「资料库」侧栏行,而 main 面板 key workdsh-library 归
workdsh-plugin-library;只装组合包不装资料库时点击该行会抛
layout.selectPanel: main panel "workdsh-library" is not registered。

- 侧栏行改由拥有该 main 面板的插件注册:library 自持 sidebar.panellist
  (id workdsh-library / label 资料库 / order 50),workbench 只登记四项未实现入口
- businessPanels 的 pending 改为必填,main 与 sidebar 行成对注册
- library 补 @deepseek-ai/dsh-client-ui-sidebar 开发依赖(缺它时 sidebar.panellist
  不在槽位联合类型里,构建报 TS2769)
- 版本:workbench alpha.12 / library alpha.2 / bundle alpha.48(组合包与资料库需同批安装)
- probe-browser 重写技能页陈旧断言,并说明 probe:browser 仍被 Host 侧 MCP 会话创建阻塞
bundle alpha.48 + library alpha.2 已装到线上 web profile 并重启:健康检查
healthy、插件加载错误 0;真实浏览器复验导航六项(资料库@y=280)与资料库
页面 292px 868px 正常,selectPanel 报错 0。同时登记 lingshu-bridge 缺
python 的既有现象(非本轮引入,未处理)。
线上 dsh 容器 rootfs 只读、镜像内无 python,第三方插件
@furongjun1999/dsh-memory 的 md_cg 桥 spawn python ENOENT,重试 8 次后
进入 failed 终态。改为把 python-build-standalone 落在持久挂载
/data/dsh/tools/python3.11、把插件自带 md_cg 链入其 site-packages,并在
profile cordis.patch.yml 指定 config.python;重启后子进程持续存活、
00:34 之后无任何 lingshu-bridge 错误行。
逐包解包比对 sha256:10 个 workdsh 包中 8 个与线上完全一致,skills 仅
package.json 依赖键顺序不同,office 的 client.browser.js 为唯一实质差异
(本地 65,204,471 B vs 线上 65,068,085 B)。上传覆盖后用 pnpm add 触发
重新解包(install/--force 均判定 up to date),校验线上产物 sha256 与本地
一致,重启后健康、office 接口 200。同时登记 pnpm 不重算 file: integrity
与旧制品被同名覆盖两条遗留。
本地 3031 直接读开发机 ~/.agents/skills(23 个用户技能 + 6 个内置 = 29),
线上 /data/dsh/home/.agents/skills 为空,15 个全是内置(6 WorkDSH + 9 univer/vision)。
整包同步 23 个用户技能到该持久目录并重启,线上复验 38 个(23 manageable + 15 readonly)。
官方 sidebar.brand.mark 的 owner props 是 SidebarBrandMarkOwnerProps,本次由
workdsh-ui 的 LogoMark 换成自绘 SVG 字标:1/眼球/G/E 共用同一光学高度,眼球
用 24 齿虹膜环 + 白色巩膜 + 蓝色虹膜 + 深瞳 + 高光构成;环取 currentColor,
避免固定浅灰环在浅色主题侧栏上消失。官方模块加载器不提供静态资源路由,故以
纯 SVG 内联,不引入位图资源、不新增资源目录。

名称 DSH JOB AI 与两个席位的 owner props 未改动;LogoMark 仍导出。
版本 0.1.0-alpha.48 -> alpha.49,MODULE-VERSIONS 与 CHANGELOG 同步。
- 侧栏品牌位换成 10GE 字标(bundle alpha.49):本地构建与预览安装、线上真实
  客户端几何复验、三方同源 sha256、部署步骤与未执行项。
- 线上 502:@awiki/dsh-plugin 与官方 0.1.6-alpha.1 不兼容,ESM 具名导入失败使
  整棵插件树启动失败;按 computer-use 先例在 profile patch 层禁用其条目后恢复。
- minimumReleaseAge:定位为 pnpm 11 内置默认值(24h),exclude 条目由 pnpm
  自身写入且同名条目被首条遮蔽;去重后线上校验安装 exit=0。
复验确认品牌位 10GE 环在浅色调色板下可见(对比度 11.94:1),
并定位到应用锁定深色源于 workdsh-client 的主题注册与回切,
故浅色数据取自 DOM 级调色板替换而非应用内真实切换。
客户端只保留注册壳,打开文档时才经 /workdsh-office/runtime.js 注入
office-runtime.js 与 editor.html;两者由插件自己的 ctx.webServer 前缀路由托管
(白名单 + ETag + must-revalidate)。运行时入口经 kernel client 模块表
物化,故 inject 需声明 "modules"。

体积与首屏:dist/client.browser.js 65.2MB → 16,677 B;首屏插件字节
16,450,968 B,零 /workdsh-office/ 请求。线上三条路径复验:docx/pptx/xlsx
编辑器分别在 25.0s/30.1s/20.0s 打开且可编辑。模块版本 0.1.0-alpha.6。

STATUS 同时记录:容器两次停机经查实为外部 docker restart(优雅 SIGTERM、
约 2 秒窗口、当日 Container Id 未变、OOMKilled=false),并逐项排除看门狗、
1Panel 定时任务、tunnel/sse 脚本与 sudo 记录;复验测试数据(8 个会话、
3 条 Office 记录、2 个导出文件及相关簿记)已备份后清理,仅保留审计历史引用。
插件随包技能落在依赖包目录内,不在可管理根,面板只能渲染成禁用的「关」
且无法停用。改为在注册表层抑制:新增 suppression provider 与
.workdsh-state/skills/suppressed.json,list/detail/setEnabled 识别
origin='plugin' 来源,开关走真实启停并禁止改写包内文件。
pnpm 对未决的生命周期脚本会写入字面量 "set this to true or false"
(pnpm #11535);该占位一旦留下就会永久阻断后续所有审批。安装脚本原来
只声明 protobufjs 一项,其余交给 pnpm 追问,线上因此累积了六个占位值。

改为按锁定 Harness 版本声明完整决定表,写入时合并重复 allowBuilds 块、
保留其他来源的显式审批、丢弃无布尔值的陈旧条目,使重复执行幂等。
luoji added 7 commits September 20, 2026 22:59
含线上逐包决定表、执行验证证据、本地预览 Profile 同批修复结果,以及
workdsh-plugin-skills@0.1.0-alpha.31 的部署与线上复验记录。
- 导航策略冲突按用户决定保留本地:未实现入口保留侧栏行并标「(待开放)」,已实现页面由所属插件自持入口
- 撞号重定版:root alpha.8、bundle alpha.50、skills alpha.32、office alpha.8、workbench alpha.13、library alpha.3
- 修复 URL 深链视图被官方首次导航恢复清空:显式 deep link 只重放一次,以官方 mainView 保留提交为界
- 探针外观断言改为官方主题契约(data-ds-theme-source + colorScheme 跟随),原因见 docs/STATUS.md
- 依赖对齐 0.1.6-alpha.2 并重生成 lockfile
- 证据、未通过项(probe:browser 既有 mcp 重名阻塞)与未执行项见 docs/STATUS.md
- 生成临时令牌 workdsh-push-temp(user_info+projects)并写入钥匙串,用于实测权限
- OpenAPI 实测 techflag/workdsh:pull=True push=False admin=False,推送被提前拦下
- 远端未发生写入:origin/main 仍为 31f68bb,远端 23 tag
- 登记令牌暴露风险与待外部授权事项(Gitee 开发者 / GitHub Collaborator)
…lag#4)

- Gitee:Fork szluoji/workdsh 并推送 main+24 tag(31f68bb..3658a07),开 PR !1 到 techflag:main
- GitHub:fork hkluoji-lab/workdsh 已有 3658a07,开 PR techflag#4 到 techflag:main(Able to merge)
- 登记 tag 不能经 PR 传递的限制与主线直推仍未执行
Gitee PR !1 的审查/测试「最少人数」为创建时固定值,编辑页两个下拉带
disabled,程序化置 0 后保存被服务端还原为 1,本机无法单方解除。
复核:GitHub PR techflag#4 可干净合并,Gitee PR !1 等待维护者履行审查/测试。
@hkluoji-lab

Copy link
Copy Markdown
Author

【需要持有者操作】WorkDSH 主线同步

本机对 techflag/workdsh 没有写权限,直推被拒绝,因此改走 PR 路径。两个 PR 内容一致:

  1. Gitee https://gitee.com/techflag/workdsh/pulls/1 (szluoji:main → techflag:main)
    当前页面显示「此 Pull Request 暂不能合并,一些审核尚未通过」(审查 0/1人、测试 0/1人)
  2. GitHub 同步本地主线:合并 GitHub 上游、撞号重定版与深链导航修复(37 提交 / 24 个 tag) #4 (hkluoji-lab:main → techflag:main)
    当前显示 No conflicts with base branch / Changes can be cleanly merged

需要你做的事(任选一条路径)

路径 A:直接合并(最小动作)

路径 B:给写权限,由我直推(后续迭代更省事)

  • Gitee:仓库 → 管理 → 仓库成员管理 → 添加成员,把 szluoji 加为【开发者】
  • GitHub:Settings → Collaborators → Add people,把 hkluoji-lab 加为 Write

补充

  • 两个 PR 提交内容相同,合并任一个后另一个可关掉
  • 验证清单与已知未通过项见 PR 正文与 docs/STATUS.md 顶部小节

luoji added 5 commits September 21, 2026 07:09
通知含两条并列路径(直接合并 / 授权直推)与 tag 补推提醒,未写任何凭据。
记录:JS 赋值 + input/change 事件不足以启用提交按钮,需 CDP 键盘输入。
Gitee 令牌仍 push=false,github/origin 的 dry-run 推送均为 403,
两个 PR 无对方动作。阻塞项与未执行范围如实登记,等待 techflag 授权或合并。
修复「浅色外观下业务页仍呈现深色」:原型阶段遗留的硬编码色值改为官方
主题令牌,并保留原值作为 var() 回退,避免令牌缺失时无回退。

- 背景层次:bg-layer-1/2/3、bg-base、bg-multi-select、specific-input-major
- 文本:label-primary / label-secondary / label-caption / label-tertiary /
  label-primary-bluish / label-primary-inverted
- 交互:interactive-bg-hover / -hover-solid / -bg-active / -bg-hover-danger
- 状态与边框:state-error|success|warn|business-primary(+secondary)、
  border-l1/l2/l3,分隔线统一 0.5px
- 主按钮统一 button-primary-fill + label-primary-inverted
- 弹窗:bg-mask-1、elevation-prominent / elevation-panel

范围:activity、connectors、experts、library、projects、skills,以及共享
ui 的 modal / navigation / tokens;workbench 的 TaskExecutionNotice 顺带
修正无效令牌 --dsw-fg-muted。外观仍由官方 ThemeRuntime 与用户偏好驱动,
未新增或复制第二套主题。

未执行:未在真实 Host 页面同时目检 sidebar 与内容区的深色/浅色外观。
workbench 0.1.0-alpha.15 / bundle 0.1.0-alpha.52 / projects 0.1.0-alpha.3。

「新建任务」不再等同「新会话」:`workdsh-new-task` 的 main 面板由不渲染
内容的占位改为任务创建器,六段为运行位置(工作空间)/ 项目(可选)/ 专家
(可选)/ 连接器(可选)/ 任务描述(可选)/ 本版待开放。官方「新会话」
入口文案保持不动(与 WorkBuddy、豆包工作的产品口径对齐,见 UI-DESIGN §5)。

- 专家任务走 prepare-execution → create-execution → consume-handoff,与专家
  插件召唤链路同构,不可召唤在创建前作为可见拒绝返回。
- 项目任务走 link-task,并按项目配置预勾选连接器;连接器走 set-selection。
- 任务描述只作为一次性草稿交给原生输入器(sessionStorage +
  conversation.input.overlay),绝不自动发送。
- 项目/专家/连接器任一路读取失败时降级为显式原因文案,不返回空列表冒充
  「没有可选项」。
- 不注册自建输入器、不复制编辑器、不持有会话或执行状态;inject 增加
  layout / sessions / workspaces(官方 Web 客户端已由 dsh-client-ui-workspace
  载入 workspace controller,与既有插件注入一致)。
- 侧栏「项目」行 order 20 → 5,排在「新建任务(0)」之后、「助理(10)」之前。
- 「本版待开放」逐条写明未实现原因与当前替代路径,不放置无效控件。
- 清理 styles.ts 末尾多余空行(产物 client.js 字节未变)。

文档:UI-DESIGN 第 5 节改写、evidence/workbench-sidebar 复用记录、
MODULE-VERSIONS 回填、STATUS 登记实现与验证证据。

已实测:本地预览三轮端到端(含项目联动自动预勾选、link-task 落库);线上
dsh.10ge.cn 部署窗口通过(制品与本机构建逐字节一致)并浏览器复验(六段
齐备、专家/连接器加载成功、草稿预填、未自动发送)。
未执行:浅色/深色外观实机目检;线上截图存档(截图工具不可用)。
f32cdb5(主题令牌迁移)与 c199bcf(任务创建器与导航顺序)已落地;
fork 与 mygitee 推送成功,github 与 origin 均 403,往上游仍走 fork + PR。

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant