Skip to content

feat: add GitHub Copilot provider support - #1306

Open
FateFeng wants to merge 49 commits into
anywhere-labs:masterfrom
FateFeng:fate-dev
Open

FateFeng wants to merge 49 commits into
anywhere-labs:masterfrom
FateFeng:fate-dev

Conversation

@FateFeng

@FateFeng FateFeng commented Oct 3, 2026

Copy link
Copy Markdown

Summary / 摘要

Related Issues / 关联 Issue

Type / 类型

  • Bug fix / 问题修复
  • Feature / 新功能
  • Documentation / 文档
  • Release or packaging / 发布或打包
  • Tests only / 仅测试
  • Other / 其他

Platforms / 影响平台

  • Windows installer / Windows 安装包
  • Windows portable ZIP / Windows 便携版 ZIP
  • macOS Apple Silicon
  • macOS Intel
  • macOS Universal package / macOS 通用安装包
  • Linux
  • Not platform-specific / 与平台无关

Verification / 验证

  • corepack yarn check:layout
  • corepack yarn typecheck
  • corepack yarn test
  • corepack yarn check
  • Platform package smoke / 平台打包或启动冒烟
  • Manual test / 人工测试

Release Notes / 发布说明

fengshuai and others added 30 commits October 3, 2026 15:49
… features

将 Workspace Sources、多根目录授权和 Files 根目录切换纳入 Stable/Beta。

保留 Host 更新错误的 HTTP 状态和响应详情,便于定位路由与授权失败。

集成 Android Logcat 界面、筛选、设备偏好和截图能力。

同步上游 Files 拖拽及结构化 workspace reference 支持和回归测试。

加入本地 runtime overlay 构建流程,不改变 pinned upstream 版本。

刷新 Agents Anywhere main artifact、provenance、包依赖和 Yarn lockfile。

已运行 Stable/Beta focused tests、类型检查、变体校验和 Linux package gate。

[Scope]:{dsh-desktop}

[Risk]:{Stable/Beta 多模块变更;Windows 附加目录仍保持 fail-closed}

[Dependence]:{pinned DeepSeek Harness 本地改动走 runtime overlay;AA main artifact}

[TestCase]:{Workspace Sources 各 33 tests;Host route/plugin 各 34 tests;typecheck;variant parity;Linux gate 138 passed, 1 skipped;runtime closure passed}

[ProductConfirm]:{Logcat 已验收;Workspace Sources 重启后待用户复测}

[Power]:{NA}

[OTA]:{NA}

[UncontrollableDep]:{NA}
…t output

在 Stable 与 Beta 系统提示词中加入文件路径输出规则。
要求输出可核实的绝对路径,避免相对路径无法定位。
多工作目录时按文件实际所属目录分组并在组内排序。
附加目录从 Session cwd 对应的授权工作区根目录解析。
Files 面板当前选择不替代 Session cwd。
新增单元测试覆盖路径格式、分组排序和附加目录。

[Scope]:{dsh-desktop}
[Risk]:{仅影响模型输出指引}
[Dependence]:{NA}
[TestCase]:{定向测试、类型检查、构建通过}
[ProductConfirm]:{NA}
[Power]:{NA}
[OTA]:{NA}
[UncontrollableDep]:{NA}
以源码工作区方式集成 dsh-ide-git,并默认挂载到 Stable。
Git 面板独立切换主目录和附加目录,保留嵌套 Session 仓库。
Host 每次请求核验实时目录授权,限制仓库与写操作边界。
一并纳入工作区中既有的 Stable/Beta Git Review 和 Logcat 改动。
同步 dshmarket、Agents Anywhere、Next 的依赖、补丁与锁文件。
补充插件测试、打包检查和第三方许可证声明。
保持上游子模块 gitlink 不变,其本地 overlay 不包含在本次提交。

[Scope]:{dsh-desktop}
[Risk]:{Stable/Beta 变体检查存在已知源码差异;本地 overlay 包不可作为正式发布包}
[Dependence]:{dsh-ide-git MIT 源码;dshmarket 1.66.18;Agents Anywhere 2.1.0}
[TestCase]:{Git 插件 121 通过;Stable Linux 预检 138 通过 1 跳过;Beta Linux 预检 142 通过 1 跳过}
[ProductConfirm]:{Git 根目录切换方案已由用户确认;其余既有改动按用户要求一并提交}
[Power]:{NA}
[OTA]:{NA}
[UncontrollableDep]:{GitHub 上游源码与 npm 包源}
…nventory

更新中英文 README,补充 Git Review 与代码审阅功能说明。\n加入两张已脱敏的代码审阅和 Git Review 截图。\n加入本地 desktop Profile 的插件包名与版本清单。\n下载区移除 Beta 项,仅保留 Stable 安装包链接。\n本次提交不包含 dirty deepseek-harness 子模块或构建脚本。\n\n[Scope]:{dsh-desktop README}\n[Risk]:{仅文档与图片资源变更}\n[Dependence]:{GitHub Release Stable 资产}\n[TestCase]:{git diff --check; 敏感信息模式扫描}\n[ProductConfirm]:{NA}\n[Power]:{NA}\n[OTA]:{NA}\n[UncontrollableDep]:{GitHub Release 上传链路}
按标题导航、功能改动、效果图、下载链接和 Release Note 重排 README。\n为每项上游改动补充一句话功能总结,保留本地 Profile 插件清单。\n列出 Git Review、工作区、Copilot、Logcat 和文件操作的全部效果图。\n同步中英文 README,下载区只展示当前 Stable Debian 资产。\n记录 2.0.17-fate-dev 的关键代码提交和 Debian SHA-256。\n\n[Scope]:{dsh-desktop README}\n[Risk]:{仅文档结构与链接变更}\n[Dependence]:{GitHub Release v2.0.17-fate-dev}\n[TestCase]:{git diff --check; Release API asset verification}\n[ProductConfirm]:{NA}\n[Power]:{NA}\n[OTA]:{NA}\n[UncontrollableDep]:{GitHub Release asset availability}
根据发布策略移除 AppImage 下载栏位。\n明确后续只维护 Debian / Ubuntu Stable 安装包。\n保留已验证的 Debian Release 下载链接和 SHA-256。\n同步更新中文和英文 README。\n避免文档继续显示待上传的 AppImage。\n\n[Scope]:{dsh-desktop README}\n[Risk]:{仅发布文档说明变更}\n[Dependence]:{GitHub Stable Debian Release}\n[TestCase]:{git diff --check}\n[ProductConfirm]:{NA}\n[Power]:{NA}\n[OTA]:{NA}\n[UncontrollableDep]:{GitHub Release}
统一 README 效果图的宽度和居中方式。\n缩小工作区、文件树、Copilot 和 Logcat 截图。\n按实际宽高比调整代码审阅与 Git Review 并排比例。\n同步更新中文和英文 README。\n保持图片内容和下载信息不变。\n\n[Scope]:{dsh-desktop README}\n[Risk]:{仅文档展示样式变更}\n[Dependence]:{GitHub README rendering}\n[TestCase]:{git diff --check}\n[ProductConfirm]:{NA}\n[Power]:{NA}\n[OTA]:{NA}\n[UncontrollableDep]:{GitHub Markdown renderer}
将中文和英文 README 的效果图章节移动到文档最后。\n保持导航、功能说明、插件、下载和 Release Note 优先展示。\n保留已调整的截图尺寸、居中布局和并排比例。\n不修改截图内容和下载信息。\n\n[Scope]:{dsh-desktop README}\n[Risk]:{仅文档章节顺序变更}\n[Dependence]:{GitHub Markdown renderer}\n[TestCase]:{git diff --check}\n[ProductConfirm]:{NA}\n[Power]:{NA}\n[OTA]:{NA}\n[UncontrollableDep]:{GitHub Markdown renderer}
…heme surfaces

新增运行时主题颜色解析逻辑,读取当前主题的 Logcat layer-1 和 layer-2 颜色。\n通过浏览器规范化颜色值并移除 alpha,保证 Logcat 表面最终保持不透明。\n保留标题与日志区域的原有层级,并让明暗主题切换时自动重新计算颜色。\nStable 与 Beta 同步实现,文字颜色继续使用主题语义变量。\n更新样式回归断言,覆盖新的 Logcat 私有背景变量。\n\n[Scope]:{dsh-desktop-logcat}\n[Risk]:{仅影响 Android Logcat 表面背景渲染}\n[Dependence]:{依赖浏览器 CSS 颜色解析与主题属性}\n[TestCase]:{git diff --check 通过;focused tests 因当前环境缺少 node/corepack 未执行}\n[ProductConfirm]:{NA}\n[Power]:{NA}\n[OTA]:{NA}\n[UncontrollableDep]:{NA}
…oss adb disconnects

按 adb serial 分开持久化 Android Logcat 正文,避免设备断连或列表刷新导致日志丢失。\n每次接收日志后保存有界的原始正文,并在重新选择设备时恢复对应内容。\n设备暂时离线时保留当前 serial 和日志,不再因为设备列表变化清空正文。\n只有用户点击清空按钮时才删除内存和本地持久化记录。\nStable 与 Beta 同步实现,并补充断连保留和显式清空测试。\n\n[Scope]:{dsh-desktop-logcat}\n[Risk]:{仅增加 Logcat 正文本地持久化,storage 失败时回退为内存日志}\n[Dependence]:{浏览器 localStorage}\n[TestCase]:{git diff --check 通过;focused tests 因当前环境缺少 node/corepack 未执行}\n[ProductConfirm]:{NA}\n[Power]:{NA}\n[OTA]:{NA}\n[UncontrollableDep]:{NA}
…ct dedupe, render window, process polling, default device

- Follow pauses when scrolled away from the bottom and resumes at the bottom
- Stream (re)connects carry a since marker; Host appends adb logcat -T and
  replayed overlap at or before the marker is dropped, so reconnects and
  post-clear starts no longer re-dump the device buffer
- Live-following renders only the trailing 500-entry window with an in-list
  hint; scrolling up or pausing expands full history without viewport jump
- Log persistence writes are debounced (1.2s) with flush on stop, device
  switch, drawer close, and page hide
- Process list polls every 5s; clicking a row PID isolates that process,
  clicking again restores all
- The drawer auto-selects the first connected device instead of none
…ed model endpoints

GitHub Copilot rejects multi-image sessions with HTTP 413; persist
normalized attachments at a 1568px long edge within 240KiB so several
inline screenshots stay under a 1MiB-class request-body limit. Pairs
with the local deepseek-harness request-size gate (cec59fa8af).
Carries the 13-patch series cut against the 0.2.0-rc.2 pin plus the layer rules and the replay recipe, so the local edits outlive the submodule working tree and an upstream bump resolves them one feature at a time.
Take upstream as the new baseline for the outer workspace and keep the local
series on the shipped Stable channel only.

- dsh-plugin-desktop (Stable, the channel the Linux deb builds from) keeps the
  local feature work: Git review, multi-workspace sources, worktree-aware paths,
  Android Logcat and Copilot surfaces, plus the dsh-ide-git workspace plugin and
  the prepare-local-runtime build hook.
- dsh-plugin-desktop-beta and dsh-desktop-next follow upstream's restructured
  packages byte for byte, because the variant gate now pairs Next with Beta and
  upstream replaced that pair's whole source layout.
- Root manifest takes upstream's vendored runtime pins and re-adds the local
  dsh-ide-git workspace entry; bilingual records are re-hashed for the merged docs.
Replay the frozen uncommitted outer-repo work onto the merged baseline, limited to
paths the shipped Stable channel still owns.

- Git review, multi-workspace sources and the worktree-aware path guidance keep
  their latest in-progress edits.
- Adds the Desktop terminal panel (@XTerm), the goal loop containment host plugin
  and the attached-root file reference surface to dsh-plugin-desktop only.
- Skips the Beta/Next mirrors and the local Agents Anywhere vendor artifact, whose
  packages now follow upstream's restructured layout.
Records the upstream 0.2.1-rc.3/0.2.2-alpha.2 dependency graph together with the
restored local Stable-channel packages.
…and Slot records

The merge kept Stable's koffi 3.1.5 while upstream had already moved the
channel back to 3.1.1 through the root resolution, its own test assertion,
and the lock, so the manifest carried a version nothing else did. Reverted
to 3.1.1 and pruned the now-unreferenced 3.1.5 lock entries.

The Copilot provider card registers one settings Slot ahead of the hidden
bundles, so the hidden-market assertions that upstream renumbered for
dsh-community-market still pointed dshmarket and the bridge at the old
indexes.

deepseek-harness now records the replayed series plus the re-confirmed
bilingual pairing records.
…d Files fixes

Records the harness commits that finish the restored multi-Workspace,
forced-new-session and Files-search surfaces so the Linux package
gate typechecks against them.
scripts/prepare-local-runtime.mjs packs the off-pin harness through
`upstream:pack:dsh:local`, so a missing entry aborts the Linux package
build before it writes any artifact.
fengshuai added 19 commits October 31, 2026 11:36
Stable used to pin 0.2.1-rc.3 while the local upstream tree is the
beta-line 0.2.2-alpha.2, so the local runtime overlay refused to build:
its version gate compares the packed source against what the workspace
has installed. Both channels now consume the same official tarballs and
only the package names differ, which keeps one shared resolution set.
Stable now installs the 0.2.2-alpha.2 family, and those packages ask for
the alpha Cordis plugins and schemastery that Beta already carries. Left
on 4.0.5 the runtime preflight rejects the Desktop workspace before the
overlay starts.
The inspector compatibility patch edits a chunk named after its content,
so the same source built locally produces a different filename and the
patch has nothing to apply to. The overlay now leaves that package on
its pinned official payload instead of failing the build.
The runtime moved PROFILE_TEMPLATES, DEFAULT_PROFILE_BUNDLES and
OPTIONAL_BUNDLES out of app-boot into @deepseek-ai/dsh-official-bundles,
so the Desktop profile code and its specs now import them from there and
declare that package as a direct dependency.
Slot components now receive the remote, Session and Workspace access
Hooks, and the composer actions gained insertQuote and persistDraft, so
the hand-built props in the Desktop specs supply them. The recovery panel
passes an optional id only when one exists, which exactOptionalPropertyTypes
requires.
Stable moved onto 0.2.2-alpha.2, where dsh-llm-pi-ai requires pi-ai ^1.3.0 and
the channel resolves that to 1.4.0. The pi-ai fix that stops a streamed
tool-call from re-parsing its whole accumulated JSON on every delta was pinned
to 1.1.0, so the new release would have shipped the quadratic behaviour back.

The same hunks apply unchanged to 1.4.0, so the patch is recorded under that
version and both the range the runtime asks for and the exact version other
pi packages ask for resolve through it. Desktop's own catalog pin on ^0.87.1
is deliberately left unpatched: that hoisted copy only feeds the Copilot model
catalog and never streams a completion.
…he runtime copy

The channel test hardcoded Stable and Beta and had already gone stale on the
merged baseline: three pi-ai releases are resolved in the lock while it only
expected one. Both now derive from upstream.json and from the copy the runtime
actually loads, so a channel bump moves the assertion with the pin instead of
failing a release that is already correct.
0.2.2-alpha.2 reaches two required peers through bundles Desktop does not
declare itself: dsh-cua needs dsh-ptc-runtime-node and the three forge
packages need dsh-experimental-forge. verify-runtime-closure only accepts a
peer supplied by the deploy root, so the Stable manifest now carries both at
the channel version; the existing vendor resolutions already pin them.
cordis-plugin-loader 1.0.7 writes `<profile>/.cordis/resolve.mjs` and resolves every
plugin import from that helper, so the bare-specifier bridge has to recognize it as
this Profile's parent. Without it the alpha.2 profile boot lost 177 modules.
…erves

dsh 0.2.2-alpha.2 hands the Web dist to registerFallback as a Fetch resource, and
dsh-host-webserver now accepts resources on register too. Desktop only wrapped the
HTTP handler shape, so the fallback threw into the upstream catch-all and an
unauthenticated renderer reached the assembled root with HTTP 400 instead of 401.
Both shapes now carry the same browser-access gate, and the in-process read that
arrives with an already-admitted peer stays allowed.
The Copilot provider put authorization and credentials into the shell's inject
list, and no smoke request reaches that route, so the loader boot failed on the
missing services. The stubs answer reads and throw on writes, so a real call
surfaces as an error instead of a fabricated record.
The alpha.2 optional bundle list names four packages Stable never declared, so
optional-bundles could not resolve their pinned version. Declaring them at
0.2.2-alpha.2 keeps the stable channel's closure honest without loading them.
The panel persists through a 200 ms debounce, so a coordinator left alive wrote
its state into the next case's storage and flipped `open` and `fontSize` at
random. Each case now hands its instances to the afterEach disposer.
Next compiles Stable's client sources, whose `ctx.configForms` reach comes from
a settings augmentation landing on one Context declaration. Now that Stable
carries the alpha.2 Cordis line, the unmapped bare import resolved into Stable's
node_modules and the augmentation never applied, so Next's typecheck lost the
service. Mapping it joins the other runtime copies the next-lead block already
pins.
Two local upstream edits were live only in the dirty submodule tree, where a
`git submodule update` discards them: the session log gate that reads past a
newer harness's job bookkeeping, and the composer seed that refuses a
non-string persisted draft. Both caused a blank transcript on boot.

Record the measured drift at the same time: replaying 0005-0013 no longer
reproduces the working tree current builds package.
把这台机器上未提交的 rc.5 收尾先固化成一个可回退的快照,再合并云端
fate/fate-dev 的 268 个提交。云端已有的补丁序列与 inject 口径以云端为准,
本地独有的 beta 通道镜像与 config/desktop-profile 插件靠这个提交保住。

子模块 pin、.gitmodules 的 fork URL 与 dsh-harness-rc5-series/ 独立仓库
不入这个提交,留给云端版本和本地工作区。
Cloud already carries the runtime bump, the rc.5/alpha.2 patch series and the
beta-to-Next channel migration, so every path cloud owns now uses cloud's
version. Local work that cloud does not have stays: the .worktrees repo scan in
dsh-ide-git, the dsh-byte-guard-recovery profile plugin, the crashpad/node-mode/
workspace-root tests, the upstream worktree-snapshot patches, and the committed
desktop Profile config snapshot.

61 legacy files were removed from dsh-plugin-desktop-beta because cloud replaced
that channel with the Next framework; each one still exists in dsh-plugin-desktop
(or in the pre-merge snapshot cb23a01), so nothing is lost.

README (both languages, hashes re-recorded) now documents attached directories
and the Git Review worktree picker with the masked screenshot.
…al config and code deltas

The plugin inventory listed packages the local Profile manifest no longer
declares, and the Profile snapshot still recorded the previous default model.
Both now come from the live desktop Profile, minus the remote-ssh block that
carries an internal address and a private key path.

The change log records the 0.2.2-alpha.2 merge and the code that is still
local-only on top of cloud. Only the attached-directory/worktree screenshot
stays in the README; the other readme captures are deleted because nothing else
references them.
Local master now equals anywhere-labs/dsh-desktop master (a8b9865) and is
merged into fate-dev, bringing 48 upstream commits: Beta and Next follow DeepSeek
Harness 0.2.2-rc.1, with its vendor runtime, rc.1 patches and the Next packaging
rework, plus upstream's removal of the retired runtime snapshots and patches.

Stable deliberately stays on 0.2.2-alpha.2 — the installed 2.0.17 package and the
local Stable sources were validated against that runtime — so the root resolutions
keep both vendor maps and drop the retired 0.2.1-rc.5 map. Because Beta and Next
now follow the same release they must mirror, so the paths block that Next carried
under next-lead markers is shared into Beta's tsconfig.

Two upstream deltas needed reconciliation rather than a side pick: the cleanup
deleted the alpha.2 runtime patches Stable still resolves, so they are restored;
and the electron-builder launcher option became optional so upstream's new
package-targets spec, which builds options without it, keeps passing against the
shared Stable script.
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