- dsh.plugin.json 原生清单:id dsh-external/dsh-better-sidebar,version 0.1.2, main = lib/index.js,client.main = lib/client-registry.js,contributes 空声明 - tsdown client 构建参数化:lib/client.js(官方通道,id = 包名)+ lib/client-registry.js (registry 通道,id = 清单 id),同源不漂移 - scripts/package-registry.mjs 组装 registry/ 安装根(gitignore,不入库) - tests/manifest-consistency.spec.ts:id 两段校验 / version 同步 / 入口存在 / 双 bundle id 不互换 / contributes 空 - README:新增「通过 plugin-registry 安装(标准)」章节 + 保留官方 profile 安装 方案 + 通道互斥说明;架构表补 manifest 与双 client 行
50 lines
1.7 KiB
JavaScript
50 lines
1.7 KiB
JavaScript
#!/usr/bin/env node
|
|
/**
|
|
* Assemble the plugin-registry installable root (`registry/`) from the built
|
|
* `lib/` output. Run after `pnpm build`:
|
|
*
|
|
* pnpm build
|
|
* node scripts/package-registry.mjs
|
|
* dsh registry install ./registry
|
|
* dsh registry enable dsh-external/dsh-better-sidebar
|
|
*
|
|
* The registry install copies the whole source directory (`cp -r`), so
|
|
* installing the repo root would drag in `node_modules/` (machine-local
|
|
* `link:` devDependency symlinks, node-pty binaries) and `.git/`. This
|
|
* staging directory carries exactly the files the manifest references plus
|
|
* the docs — same layout as the dsh-subagent-tree `registry/` pattern. It is
|
|
* gitignored and rebuilt from scratch on every run.
|
|
*/
|
|
import { cpSync, existsSync, mkdirSync, rmSync } from 'node:fs'
|
|
import { dirname, join, resolve } from 'node:path'
|
|
import { fileURLToPath } from 'node:url'
|
|
|
|
const root = resolve(fileURLToPath(import.meta.url), '..', '..')
|
|
const out = join(root, 'registry')
|
|
|
|
/** Files copied into registry/, preserving relative paths (lib/ stays lib/). */
|
|
const files = [
|
|
'dsh.plugin.json',
|
|
'lib/index.js',
|
|
'lib/invariant.js',
|
|
'lib/client-registry.js',
|
|
'lib/client-registry.js.map',
|
|
'README.md',
|
|
'LICENSE',
|
|
]
|
|
|
|
rmSync(out, { recursive: true, force: true })
|
|
mkdirSync(out, { recursive: true })
|
|
for (const file of files) {
|
|
const source = join(root, file)
|
|
if (!existsSync(source)) {
|
|
console.error(`missing ${file} — run \`pnpm build\` first`)
|
|
process.exit(1)
|
|
}
|
|
const target = join(out, file)
|
|
mkdirSync(dirname(target), { recursive: true })
|
|
cpSync(source, target)
|
|
}
|
|
console.log(`registry/ assembled (${files.length} files)`)
|
|
console.log('next: dsh registry install ./registry && dsh registry enable dsh-external/dsh-better-sidebar')
|