Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -385,9 +385,10 @@ jobs:
return $child.ExitCode
}
$koffiProbe = "import { createRequire } from 'node:module'; import { pathToFileURL } from 'node:url'; const require = createRequire(pathToFileURL(process.argv[1])); const resolved = require.resolve('koffi'); if (!resolved.startsWith(process.argv[2])) throw new Error('koffi resolved outside packaged app: ' + resolved); const koffi = require('koffi'); const getCurrentProcessId = koffi.load('kernel32.dll').func('GetCurrentProcessId', 'uint32', []); if (getCurrentProcessId() !== process.pid) throw new Error('Native koffi smoke failed'); console.log('Packaged koffi native binding passed'); process.exit(0);"
$koffiExitCode = Invoke-ElectronNode @('--input-type=module', '-e', $koffiProbe, (Join-Path $isolatedApp 'resources\app.asar.unpacked\node_modules\koffi\package.json'), (Join-Path $isolatedApp 'resources\app.asar.unpacked\node_modules'))
$koffiExitCode = Invoke-ElectronNode @('--input-type=module', '-e', $koffiProbe, (Join-Path $isolatedApp 'resources\app.asar\node_modules\koffi\package.json'), (Join-Path $isolatedApp 'resources\app.asar\node_modules'))
if ($koffiExitCode -ne 0) { throw "Packaged koffi native binding failed (exit code $koffiExitCode)." }
$pnpmEntry = Join-Path $isolatedApp 'resources\app.asar.unpacked\node_modules\pnpm\bin\pnpm.cjs'
# Packages load through app.asar (native files are unpacked beside it).
$pnpmEntry = Join-Path $isolatedApp 'resources\app.asar\node_modules\pnpm\bin\pnpm.cjs'
$pnpmExitCode = Invoke-ElectronNode @($pnpmEntry, '--version')
if ($pnpmExitCode -ne 0) { throw "Packaged pnpm failed under Electron Node mode (exit code $pnpmExitCode)." }
if (Test-Path $userData) { Remove-Item -Recurse -Force $userData }
Expand Down
3 changes: 2 additions & 1 deletion README.es.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
DSH Desktop convierte la experiencia local de DeepSeek Harness en una aplicación de escritorio instalable. Inicia Harness automáticamente, guarda Profile, plugins, espacios de trabajo, ajustes de modelos y sesiones fuera del directorio de la aplicación y abre la interfaz completa cuando el Runtime local está listo.

> [!IMPORTANT]
> DSH Desktop es una versión preliminar basada en `@deepseek-ai/dsh@0.1.7-rc.1`, que evoluciona rápidamente. Las versiones de macOS están firmadas y notarizadas por Apple. Los instaladores para Windows x64 también están firmados; las advertencias de seguridad de Windows pueden disminuir gradualmente a medida que el editor acumula reputación de descargas e instalaciones.
> DSH Desktop es una versión preliminar basada en `@deepseek-ai/dsh@0.2.0-rc.2`, que evoluciona rápidamente. Las versiones de macOS están firmadas y notarizadas por Apple. Los instaladores para Windows x64 también están firmados; las advertencias de seguridad de Windows pueden disminuir gradualmente a medida que el editor acumula reputación de descargas e instalaciones.

## Descarga

Expand All @@ -52,6 +52,7 @@ DeepSeek Harness ya proporciona el Agent Runtime y la Web UI. DSH Desktop añade
- Admite modelos oficiales de DeepSeek y proveedores externos populares
- Importa y exporta Agent Preset completos como [paquetes `.dshpreset`](docs/preset-packages.md) portátiles
- Convierte material de origen en presentaciones PPTX editables mediante el modo PPT integrado
- Incluye Python y bibliotecas de Office para crear y comprobar DOCX, PPTX y XLSX sin conexión en macOS y Windows
- Conserva Profile, plugins, espacios de trabajo, sesiones y ajustes de modelos al actualizar la aplicación
- Detecta fallos de inicio y de plugins de la interfaz, guarda diagnósticos y ofrece recuperación guiada
- Incluye un Modo seguro no destructivo que bloquea temporalmente plugins de terceros
Expand Down
3 changes: 2 additions & 1 deletion README.ja.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
DSH Desktop は、ローカルの DeepSeek Harness をインストール可能なデスクトップアプリとして提供します。Harness を自動起動し、Profile、プラグイン、ワークスペース、モデル設定、セッションをアプリ本体とは別の場所に保存し、ローカル Runtime の準備が整うと完全な Harness 画面を開きます。

> [!IMPORTANT]
> DSH Desktop は、急速に進化している `@deepseek-ai/dsh@0.1.7-rc.1` を基盤とする早期プレビューです。macOS 版はコード署名と Apple 公証済みです。Windows x64 インストーラーもコード署名済みですが、発行元のダウンロード・インストール実績が蓄積されるまでは Windows のセキュリティ警告が表示される場合があります。
> DSH Desktop は、急速に進化している `@deepseek-ai/dsh@0.2.0-rc.2` を基盤とする早期プレビューです。macOS 版はコード署名と Apple 公証済みです。Windows x64 インストーラーもコード署名済みですが、発行元のダウンロード・インストール実績が蓄積されるまでは Windows のセキュリティ警告が表示される場合があります。

## ダウンロード

Expand All @@ -51,6 +51,7 @@ DeepSeek Harness は Agent Runtime と Web UI を提供します。DSH Desktop
- DeepSeek 公式モデルと主要なサードパーティーモデルプロバイダーに対応
- カスタム Agent Preset 一式をポータブルな [`.dshpreset` パッケージ](docs/preset-packages.md)としてインポート・エクスポート
- 内蔵の PPT モードで資料から編集可能な PPTX を生成・出力
- macOS と Windows に Python と Office ライブラリを同梱し、DOCX・PPTX・XLSX のオフライン作成と検証に対応
- アプリ更新後も Profile、プラグイン、ワークスペース、セッション、モデル設定を保持
- Harness 起動時やフロントエンドのプラグイン障害を検出し、診断ログとガイド付き復旧を提供
- サードパーティープラグインだけを一時停止する非破壊的なセーフモード
Expand Down
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
DSH Desktop packages the local DeepSeek Harness experience as an installed desktop application. It starts Harness automatically, keeps profiles, plugins, workspaces, model settings, and sessions outside the application directory, and opens the full Harness interface as soon as the local runtime is ready.

> [!IMPORTANT]
> DSH Desktop is an early preview built on the rapidly evolving `@deepseek-ai/dsh@0.1.7-rc.1`. macOS releases are code-signed and notarized by Apple. Windows x64 installers are code-signed; Windows security warnings may still decrease gradually as the publisher builds download and installation reputation.
> DSH Desktop is an early preview built on the rapidly evolving `@deepseek-ai/dsh@0.2.0-rc.2`. macOS releases are code-signed and notarized by Apple. Windows x64 installers are code-signed; Windows security warnings may still decrease gradually as the publisher builds download and installation reputation.

## Download

Expand All @@ -52,6 +52,7 @@ DeepSeek Harness already provides the Agent runtime and Web UI. DSH Desktop adds
- Supports official DeepSeek models and mainstream third-party model providers
- Imports and exports complete custom Agent presets as portable [`.dshpreset` packages](docs/preset-packages.md), with conflict checks and a trust warning before installation
- Turns source material into editable PPTX decks through the built-in PPT mode
- Includes offline DOCX, PPTX and XLSX skills with bundled Python libraries on macOS and Windows
- Preserves profiles, plugins, workspaces, sessions, and model settings across app upgrades
- Detects startup and frontend plugin failures, keeps diagnostics in `harness.log`, and offers guided recovery actions
- Provides a non-destructive Safe Mode that temporarily blocks third-party plugins
Expand Down
3 changes: 2 additions & 1 deletion README.pt.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
O DSH Desktop transforma a experiência local do DeepSeek Harness em um aplicativo desktop instalável. Ele inicia o Harness automaticamente, armazena Profile, plugins, espaços de trabalho, configurações de modelos e sessões fora do diretório do aplicativo e abre a interface completa quando o Runtime local está pronto.

> [!IMPORTANT]
> O DSH Desktop é uma versão inicial baseada no `@deepseek-ai/dsh@0.1.7-rc.1`, que evolui rapidamente. As versões para macOS são assinadas e notarizadas pela Apple. Os instaladores para Windows x64 também são assinados; os avisos de segurança do Windows podem diminuir gradualmente à medida que o editor acumula reputação de downloads e instalações.
> O DSH Desktop é uma versão inicial baseada no `@deepseek-ai/dsh@0.2.0-rc.2`, que evolui rapidamente. As versões para macOS são assinadas e notarizadas pela Apple. Os instaladores para Windows x64 também são assinados; os avisos de segurança do Windows podem diminuir gradualmente à medida que o editor acumula reputação de downloads e instalações.

## Download

Expand All @@ -52,6 +52,7 @@ O DeepSeek Harness já fornece o Agent Runtime e a Web UI. O DSH Desktop acresce
- Oferece suporte aos modelos oficiais da DeepSeek e a provedores de terceiros populares
- Importa e exporta Agent Preset completos como [pacotes `.dshpreset`](docs/preset-packages.md) portáteis
- Transforma materiais em apresentações PPTX editáveis por meio do modo PPT integrado
- Inclui Python e bibliotecas de Office para criar e verificar DOCX, PPTX e XLSX offline no macOS e Windows
- Preserva Profile, plugins, espaços de trabalho, sessões e configurações de modelos durante atualizações
- Detecta falhas de inicialização e de plugins da interface, guarda diagnósticos e oferece recuperação guiada
- Inclui um Modo de segurança não destrutivo que bloqueia temporariamente plugins de terceiros
Expand Down
3 changes: 2 additions & 1 deletion README.ru.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
DSH Desktop превращает локальный DeepSeek Harness в устанавливаемое настольное приложение. Оно автоматически запускает Harness, хранит Profile, плагины, рабочие пространства, настройки моделей и сессии вне каталога приложения и открывает полный интерфейс Harness, когда локальный Runtime готов.

> [!IMPORTANT]
> DSH Desktop — ранняя предварительная версия на основе быстро развивающегося `@deepseek-ai/dsh@0.1.7-rc.1`. Выпуски для macOS подписаны и нотариально заверены Apple. Установщики Windows x64 также подписаны; предупреждения безопасности Windows могут уменьшаться постепенно по мере накопления репутации загрузок и установок.
> DSH Desktop — ранняя предварительная версия на основе быстро развивающегося `@deepseek-ai/dsh@0.2.0-rc.2`. Выпуски для macOS подписаны и нотариально заверены Apple. Установщики Windows x64 также подписаны; предупреждения безопасности Windows могут уменьшаться постепенно по мере накопления репутации загрузок и установок.

## Загрузка

Expand All @@ -52,6 +52,7 @@ DeepSeek Harness уже предоставляет Agent Runtime и Web UI. DSH
- Поддерживает официальные модели DeepSeek и популярные сторонние поставщики моделей
- Импортирует и экспортирует пользовательские Agent Preset как переносимые [пакеты `.dshpreset`](docs/preset-packages.md)
- Превращает исходные материалы в редактируемые презентации PPTX во встроенном режиме PPT
- Включает Python и библиотеки Office для автономного создания и проверки DOCX, PPTX и XLSX в macOS и Windows
- Сохраняет Profile, плагины, рабочие пространства, сессии и настройки моделей при обновлении приложения
- Обнаруживает сбои запуска и ошибки плагинов интерфейса, сохраняет диагностику и предлагает управляемое восстановление
- Предоставляет неразрушающий безопасный режим, временно блокирующий сторонние плагины
Expand Down
3 changes: 2 additions & 1 deletion README.zh.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
DSH Desktop 把本地 DeepSeek Harness 封装为可安装的桌面应用。它会自动启动 Harness,把 Profile、插件、工作区、模型配置和会话保存在应用安装目录之外,并在本地 Runtime 就绪后直接进入完整 Harness 界面。

> [!IMPORTANT]
> DSH Desktop 当前处于早期预览阶段,基于仍在快速迭代的 `@deepseek-ai/dsh@0.1.7-rc.1`。macOS 正式包已完成代码签名并通过 Apple 公证;Windows x64 安装包也已完成代码签名。随着下载量、安装量和发行者信誉逐步积累,Windows 安全提示会逐渐减少,但不会立即消失。
> DSH Desktop 当前处于早期预览阶段,基于仍在快速迭代的 `@deepseek-ai/dsh@0.2.0-rc.2`。macOS 正式包已完成代码签名并通过 Apple 公证;Windows x64 安装包也已完成代码签名。随着下载量、安装量和发行者信誉逐步积累,Windows 安全提示会逐渐减少,但不会立即消失。

## 下载安装

Expand All @@ -51,6 +51,7 @@ DeepSeek Harness 已经提供 Agent Runtime 与 Web UI。DSH Desktop 在此基
- 支持 DeepSeek 官方模型与主流第三方模型提供方
- 将完整的自定义 Agent Preset 导入或导出为便携的 [`.dshpreset` 压缩包](docs/preset-packages.md),安装前检查命名冲突并提示信任风险
- 通过内置 PPT 模式将材料生成并交付为可继续编辑的 PPTX
- 在 macOS 和 Windows 自带 Python 及 Office 库,支持离线生成和检查 DOCX、PPTX、XLSX
- 应用升级时保留 Profile、插件、工作区、会话和模型配置
- 识别 Harness 启动或前端插件故障,把诊断写入 `harness.log` 并提供引导恢复入口
- 提供不破坏用户数据的安全模式,临时屏蔽第三方插件
Expand Down
8 changes: 8 additions & 0 deletions build/dsh-desktop.patch.yml
Original file line number Diff line number Diff line change
Expand Up @@ -68,3 +68,11 @@
- insert:
- id: dsh-desktop-preset-transfer
name: dsh-desktop-preset-transfer

# Offline Office authoring is installation-owned and shared by agent presets.
- insert:
- id: dsh-desktop-office
name: dsh-desktop-office
config:
resources: !!js process.env.DSH_DESKTOP_OFFICE_RESOURCES
cli: !!js process.env.DSH_DESKTOP_OFFICE_CLI
15 changes: 13 additions & 2 deletions build/harness-node-entry.mjs
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
import childProcess from 'node:child_process'
import { syncBuiltinESMExports } from 'node:module'
import { dirname, join } from 'node:path'
import { pathToFileURL } from 'node:url'
import { registerHostModuleFallback } from './host-module-fallback.mjs'
import { packagedArchiveRoot, registerOfficeEngineResolution } from './office-engine-resolution.mjs'
import { enforceWindowsChildProcessHide } from './windows-child-process-hide.mjs'

// On macOS Harness runs inside an Electron utility process (TCC responsibility
Expand All @@ -12,8 +14,8 @@ import { enforceWindowsChildProcessHide } from './windows-child-process-hide.mjs
// `--expose-internals` shifts argv and the CLI answers "--profile <name> is
// required" instead of installing. Declaring it here, after this process has
// already parsed the Chromium switches it was launched with, marks only the
// children as Node processes. Windows declares Node mode before launching this
// entry; Linux uses a standalone Node runtime.
// children as Node processes. Windows and Linux declare Node mode before
// launching this entry.
if (process.versions.electron !== undefined) {
process.env.ELECTRON_RUN_AS_NODE = '1'
}
Expand Down Expand Up @@ -85,7 +87,16 @@ if (!dshEntryPath) {
process.stdout.write(`[harness-node] loading=${dshEntryPath}\n`)
process.argv = [process.execPath, dshEntryPath, ...dshArguments]
try {
const archive = packagedArchiveRoot(dshEntryPath)
const resources = archive ? dirname(archive) : import.meta.dirname
process.env.DSH_DESKTOP_OFFICE_RESOURCES = archive
? join(resources, 'office-runtime')
: join(resources, '..', '.build', 'office-runtime')
process.env.DSH_DESKTOP_OFFICE_CLI = join(resources, 'office-cli.mjs')
registerHostModuleFallback(dshEntryPath)
// Packages load through app.asar; the Office engine must resolve to its
// unpacked directory so the OS can spawn it.
registerOfficeEngineResolution(dshEntryPath)
// Harness 0.1.5 gates its CLI behind `if (import.meta.main)` and exports
// `runCli`. This file imports the entry rather than being it, so that guard
// is false here and a plain import would load the module, run nothing, and
Expand Down
14 changes: 14 additions & 0 deletions build/office-cli.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import { existsSync } from 'node:fs'
import { createRequire } from 'node:module'
import { dirname, join } from 'node:path'
import { pathToFileURL } from 'node:url'
import { registerOfficeEngineResolution } from './office-engine-resolution.mjs'

// Agent shells inherit Node mode from harness-node-entry. Declare it again for
// LibreOffice's children; this CLI must be launched with ELECTRON_RUN_AS_NODE=1.
process.env.ELECTRON_RUN_AS_NODE = '1'
const archive = join(import.meta.dirname, 'app.asar')
const root = existsSync(archive) ? archive : dirname(import.meta.dirname)
const requireHost = createRequire(join(root, 'package.json'))
registerOfficeEngineResolution(requireHost.resolve('@deepseek-ai/dsh/lib/bin.js'))
await import(pathToFileURL(requireHost.resolve('@deepseek-ai/libreoffice-kit/cli')).href)
2 changes: 2 additions & 0 deletions build/office-engine-resolution.d.mts
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
export function packagedArchiveRoot(dshEntryPath: string): string | undefined
export function registerOfficeEngineResolution(dshEntryPath: string): { deregister(): void } | undefined
Loading
Loading