What
libraries exists only on MetaDataLoader.fromDirectory in the TypeScript port. The CLI never passes it and no flag or config key exposes it, so meta gen / meta verify cannot load metaobjects::ai::LlmCallBase.
The generators that consume it are registered for the CLI, so the generator is reachable from the command line while its input is not.
Evidence (against main @ 0994d6e41)
$ git grep -l "libraries" main -- 'server/typescript/packages/cli/**'
(no output)
librarySources is wired only at server/typescript/packages/metadata/src/loader/meta-data-loader.ts (the fromDirectory factory).
Why it matters
Programmatic consumers can opt in; anyone driving the toolchain the documented way — metaobjects gen ./metadata --out ./generated — cannot. An adopter's extends: metaobjects::ai::LlmCallBase fails with ERR_UNRESOLVED_SUPER through the CLI even though the identical model loads fine through the API.
Suggested shape
The Python port just took a libraries key on the project config and threaded it into its single load path, alongside the existing providers key — that is probably the closest analogue here, since metaobjects.config.ts already carries providers.
One design point worth keeping if you follow it: on Python an unknown package name is a hard config error naming the valid ones, while the programmatic API keeps the silent skip. A name a human typed into a config file is a mistake worth failing on; an API caller asking for a package that version does not ship should still be able to load its own metadata. Skipping silently in the config case resurfaces later as ERR_UNRESOLVED_SUPER pointing at the adopter's own metadata — the wrong place to go looking.
Related
- Java is missing the whole feature (generator present, no loader option at all) — filed separately.
What
librariesexists only onMetaDataLoader.fromDirectoryin the TypeScript port. The CLI never passes it and no flag or config key exposes it, someta gen/meta verifycannot loadmetaobjects::ai::LlmCallBase.The generators that consume it are registered for the CLI, so the generator is reachable from the command line while its input is not.
Evidence (against
main@0994d6e41)librarySourcesis wired only atserver/typescript/packages/metadata/src/loader/meta-data-loader.ts(thefromDirectoryfactory).Why it matters
Programmatic consumers can opt in; anyone driving the toolchain the documented way —
metaobjects gen ./metadata --out ./generated— cannot. An adopter'sextends: metaobjects::ai::LlmCallBasefails withERR_UNRESOLVED_SUPERthrough the CLI even though the identical model loads fine through the API.Suggested shape
The Python port just took a
librarieskey on the project config and threaded it into its single load path, alongside the existingproviderskey — that is probably the closest analogue here, sincemetaobjects.config.tsalready carriesproviders.One design point worth keeping if you follow it: on Python an unknown package name is a hard config error naming the valid ones, while the programmatic API keeps the silent skip. A name a human typed into a config file is a mistake worth failing on; an API caller asking for a package that version does not ship should still be able to load its own metadata. Skipping silently in the config case resurfaces later as
ERR_UNRESOLVED_SUPERpointing at the adopter's own metadata — the wrong place to go looking.Related