1504 hand-written ranges pointing at workspace members become workspace:^, so pnpm pack substitutes each member's real version at publication: sibling peerDependencies follow the family version instead of being pinned at ^0.0.1, and a reference to a vendored package follows that package's own line. Without this, publishing 0.0.2 ships peer ranges naming a version that does not exist, and 0.0.1-rc.1 does not satisfy ^0.0.1 either. It also retires ranges that had gone stale against the workspace: ^4.0.0-rc.6 for a 4.0.0-rc.7 checkout, ^3.17.0 for schemastery 3.18.0. workspace:* stays where an exact published version is the point, which is how the Landlock entry pins its platform packages. A workspace constraint now requires the protocol, so a new package cannot reintroduce a hand-written range. The same constraint caught packages/boot/cmdline arriving on master without the publishable trio, which this change completes.
@deepseek-ai/dsh-typert-registry
English | 中文
Runtime registry for generated Typert artifacts. A contribution carries one package face's business reflection and optional live Zod schemas; ctx.typert registers both atomically and withdraws them with the calling Cordis fiber. TypeScript analysis and code generation live in dsh-typert-generator.
Package reflection is keyed by <package>#<face>. Schemas are keyed by <package>#<name> and retain the producer's Zod instance. JSON Schema is computed on demand at the consumer edge.
Public API
TypertRegistryis the default plugin and providesctx.typert.ctx.typert.lookups.register()registers the wire declaration and default resolver owned by the business package;configure()registers a resolver owned by Host composition that may run asynchronously. Their lifetimes are independent: configuration may precede the provider, and unloading the configuration restores the default policy.ctx.typert.contexts.registerHost()andconfigureHost()apply the same ownership split to scoped Context identity;registerClient()supplies the corresponding Client Context binder.register(contribution)rejects malformed identities and duplicate package-face or schema keys before committing anything, then returns the exact Cordis effect disposer.get(key),resolve(key), andlist(filter?)query live schemas.resolve()distinguishes a malformed key, an absent package, and a package that contributes no schema under that name.getPackage(packageName, face?)andlistPackages(filter?)query generated service, event, and object reflection; the default face ishost.toJSONSchema(key, params?)projects a live schema withz.toJSONSchema()without caching the result.typertKey()andtypertPackageKey()compose the two stable identity forms.
The @deepseek-ai/dsh-typert-registry/types subpath contains the pure contribution and record contracts. dsh-typert-loader discovers and registers generated host artifacts in Loader compositions; direct ctx.typert.register() supports other composition owners.
Model Experience
None, as the registry contributes no prompt, tool, or session event; consumers such as cordis_inspect own any model-visible projection.
KV Cache effect
No direct effect. A consumer that places reflection in a request owns the resulting prefix change.
Known Limitations and Deferred Work
- The registry stores generated reflection but does not merge host and client graphs or resolve TypeScript references. Those are analyzer and emitter concerns.
- Schema keys omit the face because host and client run in separate contexts. Registering same-named schemas from both faces into one context is rejected as a duplicate.