Merge pull request #1704 from deepseek-harness/worktree/add-web-pwa-manifest

feat(web): expose install and theme metadata
This commit is contained in:
Tianyi Cui
2026-08-07 21:43:21 +08:00
committed by GitHub
21 changed files with 305 additions and 24 deletions

View File

@@ -2,5 +2,5 @@
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write packages/host/frontend-static/README.md
README.md: c3a831abb1060b59e1802d38d5407a29d24e3bb3
README.zh.md: d4dc71763280a3c88c73de50f63f2615570c7182
README.md: 82ba5a2cd0937e2c24505648aa1e3daec6bf2ece
README.zh.md: 1130aa7cc241ee5245fceaba0ef66fcf95871e67

View File

@@ -16,4 +16,4 @@ None; this package neither assembles nor sends a provider request.
## Known Limitations and Deferred Work
- **The starter MIME table is minimal** — extensions beyond the vite-emitted set fall back to `application/octet-stream`; extend the table when an asset class actually ships.
- **The starter MIME table is minimal** — it covers the Vite-emitted asset set plus the shipped PWA manifest; other extensions fall back to `application/octet-stream` until an asset class actually ships.

View File

@@ -16,4 +16,4 @@ Web 壳的 SPA dist 服务器:一个函数插件(配置为 `{distIndex}`
## 已知限制与延期工作
- **初始 MIME 表很精简**vite 输出集合以外的扩展名会回退到 `application/octet-stream`;实际发布新的资产类别时再扩展该表
- **初始 MIME 表很精简**它覆盖 Vite 输出的资产集合及实际交付的 PWA manifest其他扩展名在相应资产类别实际发布前都会回退到 `application/octet-stream`

View File

@@ -41,6 +41,7 @@ const MIME: Record<string, string> = {
'.svg': 'image/svg+xml',
'.json': 'application/json',
'.map': 'application/json',
'.webmanifest': 'application/manifest+json',
}
/**

View File

@@ -36,6 +36,7 @@ async function loadComposition(): Promise<Context> {
await writeFile(distIndex, '<head></head><body>shell</body>')
await writeFile(join(dist, 'app.js'), 'export {}')
await writeFile(join(dist, 'blob.bin'), 'BLOB')
await writeFile(join(dist, 'manifest.webmanifest'), '{}')
const configPath = join(root, 'cordis.yml')
await writeFile(configPath, [
"- name: '@deepseek-ai/dsh-host-webserver'",
@@ -92,8 +93,13 @@ describe('real Loader composition', () => {
const server = loaded.httpServer
const port = server.port
// Real asset with its MIME type; a live rebuild is served on the next read.
// Real assets with their MIME types; a live rebuild is served on the next read.
expect(await request(port, '/app.js')).toMatchObject({ status: 200, type: 'text/javascript; charset=utf-8', body: 'export {}' })
expect(await request(port, '/manifest.webmanifest')).toMatchObject({
status: 200,
type: 'application/manifest+json',
body: '{}',
})
await writeFile(join(root!, 'dist', 'app.js'), 'export const rebuilt = true')
expect(await request(port, '/app.js')).toMatchObject({ status: 200, body: 'export const rebuilt = true' })