Repository navigation
Replies: 1 comment
|
补充现状(2026-11-01,dsh-plugin-wsl-env 侧,基于 这个缺口的插件侧缓解已落地并发布(dsh-plugin-wsl-env 0.17.0),两点现状供参考: 1. 插件已内建 2. 源码位置复核无变化:
请求维持原议,两个方向任一即可闭合:
对按路径路由执行世界的 provider(Windows/WSL 混合桌面是常态场景),方向 2 的"读回"形态更自然——provider 知道自己实际启动了什么,而 spec 在改写发生前就该被允许说清楚。 |
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Motivation
现状
TerminalController.spawn在调用 provider 之前就把页签标题定死为解析出的 shell profile 名(packages/api/terminal-controller/src/index.ts):shell来自组合级配置config.shell,resolveShell里resolveExecutable只替换path、保留name。而:SubprocessTerminalSpawnSpec(dsh-subprocess)没有任何显示名字段(只有argv / cwd / env / rows / cols / terminalType / shellActivity / graceMs / signal);SubprocessTerminalHandle也不回读实际启动的程序。所以任何在
spawnTerminal里改写启动的 provider,对页签标题都是不可见的。受影响的场景
dsh-plugin-wsl-env(WSL 插件)的按会话路由:
subprocess-wsl.hostSessions会把 Windows 目录会话的wsl.exe启动改写为powershell.exe -NoLogo(Windows 目录会话运行 PowerShell,而不是落在/mnt/<盘符>/…的 distro shell)。功能正确,但页签仍显示 profile 名WSL——PowerShell 进程顶着 WSL 标题。插件侧无法自救(三条路都实测封死)
写这个提案是因为补丁层看起来像能解决,实际不能:
用子类替换控制器行的模块:补丁层契约是 "A truthy name asserts the existing plugin name rather than renaming it"(
packages/boot/app-boot/src/config-schema/document.ts)——按 id 覆写只能整块替换config,不能换name。禁用官方行、以新 id 插入子类行:行 id 被 web 组合承载。web-app bundle 插入的
terminal-controller行注册terminal远程命名空间,客户端的webTerminals服务以inject = ['remote', 'remote.terminal']挂载。禁用该行后 web boot 失败(dsh-desktop 0.2.0-rc.2 实测):按会话的配置:
shellprofile 是组合级状态;!!js表达式在配置解析期求值一次,触达不了 Session。当前用户变通:双击页签手动重命名;或在用户层给
terminal-controller行加shellCandidates(手动选中的 shell 以自身命名)。Behavior
提案(两选一,第 1 个最小、向后兼容):
SubprocessTerminalSpawnSpec增加可选displayTitle(或SubprocessTerminalHandle暴露实际启动的 argv);create()在存在时用它作info.title,否则回退shell.name。改写启动的 provider 声明它实际启动的程序,其余一切不变。argv[0]与shell.path指向不同程序时用executableName(effectiveArgv[0]),否则维持shell.name。两种方案下,不改写启动的 provider 与现有配置的标题行为完全不变。
Environment
0.2.0-rc.2@deepseek-ai/dsh-api-terminal-controller0.2.0-rc.2All reactions