Rebases the whole branch onto main's new 0.1.7-rc.1 baseline and lands the adaptation the new host contract requires: the ui-primitives icon family rename (Icon<Name><14|16> -> Icon<Name>Regular/Medium, with the 14px defaults pinned back explicitly) and the StateDot redraw, the rewritten dsh-settings surface (entry-id namespace, DSH schemastery with collected volatile returns, configure auto:false), session format v4 (producer-owned source kind plus the rewritten tool-result shape, parsers accepting both), the client snapshot move to projectionsBySession.subagentCatalog with the jobs.list route behind it, the ^0.1.7-rc.1 peer floor with vendor and bare-import devDeps, the reduced chunk set mirrored in all eight places, and the capability hand-backs (read-only previews, terminal, browser). Verified: typecheck and lint clean; 119 files / 1200 tests; build with no old contract residue in the bundles; mount e2e 7/7; the tasks page still passes its 70-assertion real-browser contract.
62 lines
2.3 KiB
JavaScript
62 lines
2.3 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) 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',
|
|
// Lazy chunks: the client fetches these from the host's /sidebar/bundle
|
|
// route on first use (see src/client/chunk-loader.ts / src/bundle-route.ts).
|
|
// EVERY `CHUNK_NAMES` entry belongs here — the route reads the file out of
|
|
// the installed copy, so a chunk left out of this list 404s on the registry
|
|
// channel (`locale` was). tests/manifest-consistency.spec.ts guards the list
|
|
// against src/bundle-route.ts.
|
|
'lib/client-editor.js',
|
|
'lib/client-editor.js.map',
|
|
'lib/client-mermaid.js',
|
|
'lib/client-mermaid.js.map',
|
|
'lib/client-locale.js',
|
|
'lib/client-locale.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')
|