🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

新会话起始屏 yusufameri/dsh-t3-new-session-screen

DeepSeek 客户端
yusufameri31 天前有提交已提供中文文档扫描:含敏感能力兼容 / 相关生态

在空白会话上方添加项目标题、推理档位与分支选择器

28.9/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/11 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

相关生态插件(非 dsh 原生,按其对应运行时安装)
git clone https://github.com/yusufameri/dsh-t3-new-session-screen.git

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:待复验
是什么
生态应用
桌面端 / Web 外壳,不以 dsh plugin add 安装
装得上吗
曾在 dsh 0.2.0-rc.2 下真实安装成功,但当前 dsh 已更新至 0.2.1-rc.5,本站尚未在新版下复验
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 31 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件
查看扫描证据(共 2 处,展示前 2 条)
  • 执行外部命令固定命令
    index.js:348
    child = spawn('git', argv, {
  • 读取本地文件
    index.js:386
    info = statSync(cwd)
扫描于 2026/10/31(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/schemastery
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 添加项目标题
  • 项目下拉菜单
  • 推理强度与分支选择

T3 Code 为 DeepSeek Harness 打造的新会话界面:「在 <项目> 里做点什么?」标题,内嵌项目下拉菜单、推理强度选择器和 git 分支选择器。

README

由 DeepSeek 最新模型翻译生成
dsh-t3-new-session-screen T3 Code 的 New Session screen,用于 DeepSeek Harness 的 composer。 New Session screen:标题、项目菜单、分支选择器和 effort 选择器 这个界面有三样东西,DeepSeek Harness 的空白会话没有: - What should we build in <project>? —— 来自 T3 的 DraftHeroHeadline 的标题,项目名本身就是选择器。 - 推理 effort 选择器 —— T3 的 TraitsPicker,放在 composer 工具行里,而不是藏在模型菜单后面。 - git 分支选择器 —— T3 的 BranchToolbar,带真正的 git checkout。 致谢 这个插件实现的界面来自 T3 Code。标题句子及其内联项目控件、effort 选择器的形态、带可搜索 ref 菜单的分支条,都是他们的。T3 Code 基于 MIT 开源;这个移植版保留相同行为,只把底层数据换成 DeepSeek Harness 自己的服务。请支持原项目。 功能 - 标题。 What should we build in <project>?,居中显示在 composer 上方,项目名带下划线且可点击。
展开完整文档(README 剩余 1 节)
dsh-t3-new-session-screen

T3 Code 的 New Session screen,用于 DeepSeek Harness 的 composer。

New Session screen:标题、项目菜单、分支选择器和 effort 选择器

这个界面有三样东西,DeepSeek Harness 的空白会话没有:

- What should we build in <project>? —— 来自 T3 的 DraftHeroHeadline 的标题,项目名本身就是选择器。
- 推理 effort 选择器 —— T3 的 TraitsPicker,放在 composer 工具行里,而不是藏在模型菜单后面。
- git 分支选择器 —— T3 的 BranchToolbar,带真正的 git checkout。

致谢

这个插件实现的界面来自 T3 Code。标题句子及其内联项目控件、effort 选择器的形态、带可搜索 ref 菜单的分支条,都是他们的。T3 Code 基于 MIT 开源;这个移植版保留相同行为,只把底层数据换成 DeepSeek Harness 自己的服务。请支持原项目。

功能

- 标题。 What should we build in <project>?,居中显示在 composer 上方,项目名带下划线且可点击。点击它会打开 T3 风格的项目菜单:每个已注册的工作区、当前项上的勾选、一条分隔线,以及 New project。选择项目会把空白会话移到该项目。DSH 用自己的标题从字面字符串渲染,没有插槽,所以这个插件填补那一行里唯一可加的洞(conversation.hero.brand.mark),并抑制旁边自带的标题。模板可配置,{project} 标记控件的位置。在选定项目之前,这句话根本不会运行:标题只是行动号召 —— Choose a project to start —— 和 T3 一样,所以空状态永远不会声称一个还不存在的项目。DSH 自己的工作区 chip 与智能体预设座位共享标题下方那一行;标题承载项目后,那个 chip 也离开布局,它原本引领的预设座位重新落到 composer 的右边缘 —— 见对齐。
- 推理 effort。 composer 工具行里的一个仪表控件,显示当前模型实际使用的级别(DeepSeek 自家模型为 Off、Low、High、Max)。菜单带有每个级别的描述,以及当前项上的勾选。它读写与模型座位相同的按会话模型目录,所以模型座位自己的标签会随之更新。不声明任何 effort 级别的模型完全不渲染控件 —— effort 是每个模型的能力,不是全局偏好。
- Git 分支。 composer 卡片下方的一条:左边是 checkout,右边是当前 ref。ref 菜单可搜索,列出本地和远程 ref,标注 current / default / remote,并切换 git checkout <ref>。查询里出现尚不存在的 ref 时,会多出一行 Create new ref,执行 git checkout -b。DSH 本身不带任何 git 界面,所以这里的一切都来自本 bundle 的 Host 部分。这条横条按 composer 的共享宽度轴对齐,而不是按卡片对齐——见 Alignment。

Screenshots

| The New Session screen | Project menu | Branch picker | Reasoning effort |
| Headline and strip | Project menu | Branch picker | Effort picker |

Install

从本仓库安装:

dsh plugin --profile web add github:yusufameri/dsh-t3-new-session-screen

包发布到 npm 后,用 registry 形式能少写一个词:

dsh plugin --profile web add dsh-t3-new-session-screen

两种写法都会同步 profile 的 bundle 列表,下次启动就会合并插件的补丁并加载它的客户端部分。移除 bundle 后,原有的标题、模型座位和 composer 都会恢复,不留痕迹。

Configuration

每个字段都可选;默认值就能渲染出整个界面。在 profile 的 cordis.patch.yml 里,对应 bundle 那一行上设置:

- id: t3-new-session-screen
name: 'dsh-t3-new-session-screen'
config:
headlineText: 'What should we build in {project}?'
effortSlot: right
branchCreateEnabled: false

| Key | Default | Meaning |
| headlineEnabled | true | 把空白会话的标题替换成 T3 那句话。 |
| headlineText | What should we build in {project}? | 标题模板;{project} 会变成当前交互的项目名。没有这个占位符时,整句按纯文本渲染;没选项目时,则让位给行动号召。 |
| hideShippedHeadline | true | 隐藏 DSH 自带的「Into the Unknown」标题,它就在标题旁边。 |
| hideWorkspaceChip | true | 隐藏标题下方自带的工作区 chip,标题已取代它。 |
| effortEnabled | true | composer 工具行里的推理强度选择器。 |
| effortSlot | left | 推理强度选择器占用 composer 的哪个座位:left(挨着权限和计划控件)或 right(挨着模型座位)。 |
| branchEnabled | true | composer 下方的 Git 分支横条,在新会话界面和活动会话里都显示。 |
| branchCreateEnabled | true | 在分支选择器里提供 Create new ref(git checkout -b)。 |
| gitEnabled | true | 分支横条背后的 git 桥接。关掉它,横条就不出现。 |
| gitTimeoutMs | 30000 | 单个 git 子进程的时间预算。 |

客户端部分通过分支数据所用的同一条路由,从 Host 读取解析后的配置,所以改动会在下次页面加载时生效。

How it works

整个界面都通过 DSH 自己的接缝贡献。

| Piece | Seam |
| Headline | conversation.hero.brand.mark(单个,根级)—— DSH 标题行里唯一的可加插槽。 |
| Project menu | conversation.hero.workspace(单个,根级),优先级 -1,会遮住同一格中自带的 WorkspacePicker。 |
| Project roster | 根级 useWorkspaces 标准钩子,由 ctx.slots.provideRoot 提供数据。 |
| New project | 先 ctx.uiWorkspace.pickDirectory(),再 ctx.workspaces.create({ path })。 |
| Reasoning effort | conversation.input.left / .right(列表),读取 ctx.modelDirectories.directoryFor(sessionId)。 |
| Branch strip | conversation.input.dock(两个阶段共用一个座位)。 |
| Hero workspace row | 没有自己的座位。自带的这一行被重新声明:它的 workspace chip 离开布局,它的 agent-preset 座位被拖到 composer 轴上,依据插件在 上设置的 data-t3nss-preset-trailing 属性。 |
| Working directory | ctx.sessions.list.getSnapshot().byId[sessionId]?.cwd。 |
| Git | Host 那一半的围栏路由 POST /t3-new-session/api(config、git.status、git.branches、git.checkout、git.createBranch),通过 node:child_process 运行 git。 |

有两个细节是承重的,不是可有可无的:

- 客户端那一半必须注入 remote 和 remote.session。
modelDirectories.directoryFor 通过 Cordis 的调用方上下文追踪器解析,所以插件读取模型目录时,如果不持有同一个 remote 命名空间,就会得到 cannot get property "remote.session" without inject,effort 控件会悄悄消失。
- Host 那一半不导入 node: 之外的任何东西。插件以目录链接方式安装时,会从自己的真实路径解析导入,那里够不到 DSH 的任何 @deepseek-ai/ 包,所以配置 schema 是手写的 Standard Schema,而不是 Schemastery 的 —— Cordis 只需要一个同步的 ~standard.validate。

Alignment

这个界面是按 T3 自己的数值来量的,不是靠眼睛估的。T3 的 composer 外壳是 max-w-3xl,带 --chat-composer-drawer-inset: 1.375rem,它的 context strip 内缩两个这样的值(44px),并带 ps-1 pe-2。DSH 的轴是 --dsh-composer-side-clearance(16px)、--dsh-composer-dock-inset(8px)和 --dsh-composer-card-max-width,自带的 QueueDock 宽度也由这三个值推导。strip 用同一套推导,所以在自带配置档下,它落在卡片的内容盒上:

| Element | X range | |
| Composer card | 498..1375 | 877px |
| Composer tool row, content box | 506..1367 | 861px |
| Headline stack (HeroShell) | 506..1367 | 861px |
| Branch strip | 506..1367 | 861px |
| Hero preset seat(右对齐) | 1218..1367 | 149px |

这四个盒子中心都是 936,strip 的文字在卡片下方 4px —— 这正是 T3 的 -mt-4 + pt-5 组合净出来的结果。
工具行里,推理强度控件高 28px,与附件按钮、权限控件垂直居中(三者都在 513..541)。

预设座位是这一行里唯一标签尺寸的元素,所以只有它的右边缘是固定数值:座位按内容撑开(Standard mode 时为 149px),左边缘跟着 DSH 给预设起的名字走——这就是它不在上面居中组里的原因。它的右边缘落在 1367,和条带、标题堆栈、工具行的内容框一致,也是发送按钮和条带尾部控件的右边缘——这一行读起来像卡片上方的一条尾部列,而不是行中间的一枚 chip。

有两个细节是承重的,很容易回归:

- 条带上的 box-sizing: border-box。没有它,水平内边距会加到 width: 100% 上,条带就会比它的堆栈每侧多出内边距的宽度——测量之前它就是这样。
- width / max-width 这一对。在 hero 上,堆栈每侧已经内缩了一个侧边留白,所以两侧留白和两侧 dock 内缩都从百分比里扣掉。在活跃会话里,堆栈是完整的座位宽度,由 max-width 负责收窄,margin-inline: auto 再把它居中——同样的 861px,同样的 506px 起点,只是父级不同。

hero 工作区行是插件唯一调整 DSH 自己盒子的地方,而不是填充座位。把随附的工作区 chip 从这一行移除,才腾出预设座位,而真正要紧的是布局上的移除:visibility: hidden——隐藏一个行为仍需要的元素时最直观的做法——会把它 226px 的盒子留给本仓库自己的名字,旁边的座位就会落在那个盒子结束的任意 x 上。由此引出两点,也正是下面检查所测量的:

- chip 是 display: none,不是 hidden,所以它过去用来撑尺寸的东西不会在行里留下任何痕迹;
- 座位尾部用 auto 左外边距加 8px 右外边距,而不是用行上的 justify-content:行属于 DSH,外边距属于座位,auto 外边距让这块滑片在任何行宽下都靠右——行自己的右内边距(16px)就是一个侧边留白,所以是 8px 外边距把座位落在轴线上,而不是落在卡片外边缘上。

scripts/measure-alignment.mjs 会对着运行中的页面重新核对上面每一个数字,出现回归就以非零退出——包括检查 6 和 7,它们会在那个错误的任一半上失败:座位不再结束于 1367,以及 chip 又开始占空间。

与 T3 的差异

DSH 没有这些 T3 概念的对应物,所以移植时直接省略,而不是伪造:

- 没有本地/工作树环境切换。 T3 的条带开头是一个 Current checkout / New worktree 选择器。DSH 没有工作树概念,所以条带左侧标签只报告检出状态,不是菜单。
- 条带上没有 pull-request 徽章。
- 这条横条排在卡片下方,而不是布局在那里。 DSH 的空白会话首屏不会在输入卡片下方渲染扩展席位,所以横条被贡献到它上方的席位,再用 order 往下移。渲染器给每个插槽占用者套的包装盒都是纯内容盒,因此横条是 composer 栈的 flex 子项,排序无需改动已发布的 CSS 就能生效。在活跃会话里,DSH 自带的上下文计量条占据卡片正下方的空间,于是横条改排在它下面。

有个行为值得了解:DSH 的 session/selectModel 会写入会话选择和部署默认值,所以选定一档 effort 级别,也会让它成为新会话的默认值。这是 Host 的行为,不是本插件的;已发布的模型菜单也是同样做法。

Development

one-time: shim pnpm if it is not on PATH
mkdir -p ~/.dsh/dsh-runtimes/shim

install into a scratch profile and boot it
dsh plugin --profile t3demo add "$PWD"
dsh --profile t3demo --port 8899 --no-open

assets/ 背后的录制工具在 scripts/ 里:record.mjs 通过一条 Chrome DevTools Protocol 连接驱动脚本化交互(也能录制帧),encode-gif.py 把这些帧转成 GIF,capture-stills.json / demo-steps.json 是它运行的两个脚本。

CDP_PORT=9333 node scripts/record.mjs scripts/capture-stills.json --no-frames
CDP_PORT=9333 node scripts/record.mjs scripts/demo-steps.json /tmp/frames
python3 scripts/encode-gif.py /tmp/frames assets/demo.gif

scripts/measure-alignment.mjs 就是 Alignment 里说的对齐检查。把它指向运行本插件的页面,只要那些数字有任何一个变动,它就会以非零退出码失败:

CDP_PORT=9333 node scripts/measure-alignment.mjs

License

MIT。T3 Code 也是 MIT;见 Credit。
预览分享卡片长什么样 ↓yusufameri/dsh-t3-new-session-screen
分享 · DeepSeek Harness Hub
yusufameri/dsh-t3-new-session-screen

在空白会话上方添加项目标题、推理档位与分支选择器

回到顶部