dsh-pwa-plugin
DSH 的 PWA 插件:离线支持、Service Worker 缓存,并可作为应用安装。
开发运行时
DSH PWA Plugin
PWA plugin for DeepSeek Harness that adds offline support and install-as-app capability.
Features
- Service Worker with smart caching strategy
- PWA Manifest with icons and metadata
- Automatic updates — silently activates new versions
- Offline-first for static assets
- Custom icons (gradient background with DSH branding)
Installation
1. Add as a dependency
In your DSH web profile's package.json:
▼json复制代码{ "dependencies": { "dsh-pwa-plugin": "file:~/workspace/dsh-pwa-plugin" } }
2. Register the plugin
In your profile's cordis.patch.yml:
▼yaml复制代码- insert: - id: dsh-pwa name: 'dsh-pwa-plugin'
3. Restart DSH
▼bash复制代码dsh web
Generate PNG Icons
The plugin ships with SVG icons. To generate PNG icons (required for some browsers):
▼bash复制代码cd dsh-pwa-plugin npm install sharp --save-dev node scripts/generate-icons.js
How It Works
- The host plugin serves
/sw.js,/manifest.webmanifest, and icon files - It injects a service worker registration script into the HTML
- The service worker caches static assets for offline use
- The manifest enables installing the app as a PWA
- Updates are detected automatically and silently activated
Caching Strategy
| Resource Type | Strategy | Description |
|---|---|---|
| HTML | Network-first | Always tries to fetch the latest version |
| JS/CSS/Fonts/Images | Cache-first | Serves from cache if available |
| API calls | Not cached | Always goes to the network |
Limitations
- Requires HTTPS to work (except localhost)
- Service worker cannot cache API calls
- Updates require a page reload (automatic after detection)
Project Structure
▼text复制代码dsh-pwa-plugin/ ├── src/ │ ├── host/ │ │ └── index.js # Host plugin (Node.js) │ └── sw.js # Service Worker ├── public/ │ ├── manifest.webmanifest # PWA Manifest │ ├── favicon.svg # Favicon │ └── icons/ # App icons (SVG + PNG) ├── scripts/ │ ├── generate-icons.js # Icon generator │ ├── install.js # Verification script │ └── verify.js # Verification ├── example/ │ ├── cordis.patch.yml # Configuration example │ └── package.json # Profile example ├── cordis.patch.yml # Plugin registration ├── LICENSE └── package.json
License
MIT
开发运行时










