refactor(packages): dissolve ui/ and rename sdk/ to scaffold/

git mv per the regrouping RFC: the five human-collaboration seams and
tui join packages/interaction/, app-boot becomes packages/boot/, and
jsonrpc joins the renamed scaffold/ (formerly sdk/) as its server half
beside client/protocol/create-sdk/helper/scripts/telemetry, whose
folders drop the legacy sdk- prefix. Three new group README triplets
replace the ui/ and sdk/ ones; tsconfig references/paths/globs,
knip keys, vitest globs, gate scripts, catalogs, docs, and the
lockfile follow. Adds the four settled FIXME rename markers
(dsh-sdk-server, dsh-sdk-telemetry, dsh-sdk-helper, dsh-sdk-scripts).

The scaffold folders diverge from their npm names until those renames
land, so tsconfig.base.json maps the three affected names explicitly
beside the group wildcard. Also repairs two pre-existing stale-path
classes the strengthened sweep surfaced: docs/web-styling.md's retired
web-ui host package and type-model spec fixture-literal joins.

app-boot's three Loader-composition specs time out at the default 5s
under full-suite parallel load on this filesystem (pre-existing;
pass isolated with --testTimeout=30000); interaction/scaffold/boot
suites otherwise green (687 passed).
This commit is contained in:
Tianyi Cui
2026-07-30 03:13:49 +08:00
parent 7e445c3a67
commit 3fc35c91ff
351 changed files with 368 additions and 311 deletions

View File

@@ -419,7 +419,7 @@ describe('WorkspaceAnalyzer', { timeout: 60_000 }, () => {
it('rejects relative imports across face boundaries', () => {
const root = copyFixture('typert-relative-face-')
const sourcePath = join(root, 'packages/client/src/index.ts')
const sourcePath = join(root, 'packages/client', 'src/index.ts')
const source = readFileSync(sourcePath, 'utf8')
.replace("from '@fixture/host'", "from '../../host/src/index.ts'")
writeFileSync(sourcePath, source)
@@ -435,7 +435,7 @@ describe('WorkspaceAnalyzer', { timeout: 60_000 }, () => {
join(root, 'packages/host/src/private.ts'),
'export interface PrivateHost { readonly value: string }\n',
)
const sourcePath = join(root, 'packages/client/src/index.ts')
const sourcePath = join(root, 'packages/client', 'src/index.ts')
const source = readFileSync(sourcePath, 'utf8')
.replace(
"import type { HostAgent, Payload } from '@fixture/host'",
@@ -458,7 +458,7 @@ describe('WorkspaceAnalyzer', { timeout: 60_000 }, () => {
join(root, 'packages/host/src/private.ts'),
'export interface PrivateHost { readonly value: string }\n',
)
const sourcePath = join(root, 'packages/client/src/index.ts')
const sourcePath = join(root, 'packages/client', 'src/index.ts')
writeFileSync(sourcePath, [
readFileSync(sourcePath, 'utf8'),
"export type { PrivateHost } from '@fixture/host/private'",
@@ -472,7 +472,7 @@ describe('WorkspaceAnalyzer', { timeout: 60_000 }, () => {
it('rejects cross-face namespace re-exports until the model has a namespace target', () => {
const root = copyFixture('typert-namespace-reexport-')
const sourcePath = join(root, 'packages/client/src/index.ts')
const sourcePath = join(root, 'packages/client', 'src/index.ts')
writeFileSync(sourcePath, [
readFileSync(sourcePath, 'utf8'),
"export type * as HostNamespace from '@fixture/host'",
@@ -487,10 +487,10 @@ describe('WorkspaceAnalyzer', { timeout: 60_000 }, () => {
it('ignores cross-face namespace exports that are not package exports', () => {
const root = copyFixture('typert-private-namespace-reexport-')
writeFileSync(
join(root, 'packages/client/src/internal.ts'),
join(root, 'packages/client', 'src/internal.ts'),
"export type * as HiddenHostNamespace from '@fixture/host'\n",
)
const sourcePath = join(root, 'packages/client/src/index.ts')
const sourcePath = join(root, 'packages/client', 'src/index.ts')
writeFileSync(sourcePath, [
"import './internal.ts'",
readFileSync(sourcePath, 'utf8'),
@@ -503,7 +503,7 @@ describe('WorkspaceAnalyzer', { timeout: 60_000 }, () => {
it('records public symbols from explicit cross-face star re-exports', () => {
const root = copyFixture('typert-star-reexport-')
const sourcePath = join(root, 'packages/client/src/index.ts')
const sourcePath = join(root, 'packages/client', 'src/index.ts')
writeFileSync(
sourcePath,
readFileSync(sourcePath, 'utf8')
@@ -1138,7 +1138,7 @@ describe('WorkspaceTypertGenerator', { timeout: 60_000 }, () => {
it('rejects a public Typert subpath that points outside the root-level face artifact', () => {
const root = copyFixture('typert-artifact-path-')
const manifestPath = join(root, 'packages/client/package.json')
const manifestPath = join(root, 'packages/client', 'package.json')
const manifest = JSON.parse(readFileSync(manifestPath, 'utf8')) as {
exports: Record<string, { types: string; default: string }>
}
@@ -1154,7 +1154,7 @@ describe('WorkspaceTypertGenerator', { timeout: 60_000 }, () => {
it('rejects absent Typert exports and package file entries', () => {
const noSubpathRoot = copyFixture('typert-missing-artifact-export-')
const noSubpathManifest = join(noSubpathRoot, 'packages/client/package.json')
const noSubpathManifest = join(noSubpathRoot, 'packages/client', 'package.json')
const noSubpath = JSON.parse(readFileSync(noSubpathManifest, 'utf8')) as Record<string, unknown>
noSubpath.exports = './lib/index.js'
writeFileSync(noSubpathManifest, `${JSON.stringify(noSubpath, null, 2)}\n`)
@@ -1163,7 +1163,7 @@ describe('WorkspaceTypertGenerator', { timeout: 60_000 }, () => {
)
const invalidSubpathRoot = copyFixture('typert-invalid-artifact-export-')
const invalidSubpathManifest = join(invalidSubpathRoot, 'packages/client/package.json')
const invalidSubpathManifest = join(invalidSubpathRoot, 'packages/client', 'package.json')
const invalidSubpath = JSON.parse(readFileSync(invalidSubpathManifest, 'utf8')) as {
exports: Record<string, unknown>
}
@@ -1174,7 +1174,7 @@ describe('WorkspaceTypertGenerator', { timeout: 60_000 }, () => {
)
const noFilesRoot = copyFixture('typert-missing-artifact-files-')
const noFilesManifest = join(noFilesRoot, 'packages/client/package.json')
const noFilesManifest = join(noFilesRoot, 'packages/client', 'package.json')
const noFiles = JSON.parse(readFileSync(noFilesManifest, 'utf8')) as Record<string, unknown>
delete noFiles.files
writeFileSync(noFilesManifest, `${JSON.stringify(noFiles, null, 2)}\n`)