Vincent Koc
25c375e47f
refactor: reuse canonical record guards ( #115810 )
...
* docs(agents): standardize canonical record guards
* refactor(model-catalog): use canonical record guard
* refactor(scripts): use canonical record guard
* refactor(ui): use canonical record guard
* refactor(codex): use canonical record guard
* refactor(agents): use canonical record guard
* refactor(sessions): use canonical record guard
* refactor(doctor): use canonical record guard
* refactor(infra): use canonical record guard
2026-07-29 11:43:36 +02:00
Peter Steinberger
99ec30b44b
feat(plugins): catch code-mode drift between catalogs shipping the same model ( #115183 )
...
* feat(plugins): catch code-mode drift between catalogs sharing one model
Adds a contract test that groups bundled catalog rows by shared upstream
model and requires every row in a group to declare compat.codeMode once any
sibling does. Rows sharing a model id group automatically; rows under
different ids opt in with the new manifest-only `upstreamModel` marker.
Moves the kimi catalog into its manifest so the scan can see it, and records
the tier reseller catalogs were silently missing as explicit "capable".
* docs: regenerate docs map for the shared-model code-mode section
2026-07-28 08:52:21 -04:00
Peter Steinberger
7394262cd1
feat: per-model code-mode capability flags with an "auto" master-switch tier ( #114695 )
...
* feat(tools): per-model code-mode capability flags and auto master-switch tier
* feat(anthropic): flag claude-sonnet-4-6 as code-mode preferred
* revert(anthropic): drop claude-sonnet-4-6 from the code-mode preferred set
* test(anthropic): type the manifest compat field in the catalog contract test
* fix(anthropic): carry catalog compat onto hand-built forward-compat model rows
2026-07-27 16:47:41 -04:00
Peter Steinberger
43ff420492
fix(providers): preserve local model discovery and retry ownership ( #114582 )
2026-07-27 09:14:23 -04:00
Peter Steinberger
b461ae6de8
test(model-catalog): cover normalization and routing boundaries ( #114384 )
2026-07-27 02:56:59 -04:00
Peter Steinberger
5347285d6b
improve(models): source pricing from hosted catalog ( #114060 )
...
* feat(model-catalog): serve hosted fallback pricing
* refactor(config): retire client pricing bootstrap settings
* refactor(gateway): delete client pricing refresh runtime
* docs(models): explain hosted catalog pricing
* fix(model-catalog): preserve pricing privacy and aliases
* fix(model-catalog): fingerprint pricing eligibility
* fix(model-catalog): harden pricing endpoint checks
* fix(model-catalog): materialize source-safe pricing aliases
* fix(model-catalog): keep unknown pricing fallbacks safe
* fix(model-catalog): reject zero-only hosted prices
* fix(model-catalog): fail closed without pricing policy metadata
* refactor(utils): extract usage pricing normalization
* fix(model-catalog): rebuild policy-owned pricing namespaces
* test(model-catalog): type publisher cost fixtures
* chore(config): regenerate schema baselines
* fix(utils): keep raw pricing tiers private
2026-07-26 03:48:25 -04:00
Peter Steinberger
be6ec97e11
refactor(providers): manifest-declared default models and unified onboarding presets ( #113794 )
...
* feat(model-catalog): declare provider default models
* refactor(providers): source onboarding defaults from manifests
* fix(cohere): remove unused model id export
* fix(chutes): preserve public default model id
* fix(model-catalog): accept provider default models
2026-07-25 12:54:53 -07:00
Peter Steinberger
bde7033ac4
feat(models): dynamic model catalogs via hosted refresh overlay ( #113660 )
...
* feat(models): add remote catalog core
* feat(config): add model catalog refresh settings
* feat(models): wire remote catalog refresh
* ci(models): publish hosted catalog
* docs(models): document catalog refresh
* test(models): allow catalog count growth
* refactor(models): preserve safe catalog merge
* ci(models): publish catalog through GitHub
* docs(models): link public catalog history
* fix(model-catalog): enforce Kysely store access
* fix(model-catalog): trim unused catalog exports
* docs(models): refresh generated docs map
2026-07-25 12:15:05 -07:00
Vincent Koc
e9f2bd63a3
refactor(models): share config ref flattening ( #113591 )
2026-07-25 17:20:38 +08:00
Peter Steinberger
82d1a03f25
refactor(agents): move implicit-main fallback into load-time roster injection ( #112678 )
...
* refactor(agents): require explicit roster defaults
* feat(onboard): create named first roster agent
* refactor(agents): remove runtime main fallbacks
* style(agents): apply roster refactor formatting
* refactor(agents): finish roster-only runtime sweep
* fix(doctor): migrate legacy main session sqlite
* fix(doctor): harden roster session migrations
* fix(onboard): commit first agent atomically
* fix(config): support empty-roster analysis
* fix(agents): preserve legacy main state during creation
* fix(setup): materialize baseline agent roster
* fix(agents): harden legacy default transfer recovery
* fix(agents): simplify roster-only legacy compatibility
* fix(agents): preserve staged first-agent entries
* fix(config): migrate persisted implicit-main rosters
* fix(config): preserve staged empty rosters
* fix(agents): finalize roster-only upgrade paths
* fix(sessions): close legacy main migration outcomes
* fix(config): migrate legacy roster markers at load
* fix(sessions): preserve roster upgrade history
* refactor(sessions): restore lean legacy main compatibility
* fix(setup): prepare first-agent credentials before publish
* fix(config): stabilize roster snapshot migration
* refactor(sessions): shrink legacy main compatibility
* fix(agents): restore roster compatibility fidelity
* fix(sessions): preserve divergent legacy history
* refactor(agents): narrow roster-only scope
* fix(config): isolate roster migration
* test(agents): align roster-only fixtures
* fix(agents): keep main agent undeletable
* fix(agents): harden roster migration invariants
* fix(agents): close setup and audit scope gaps
* fix(cron): scope session reaper throttles by agent
* fix(agents): preserve scoped owner precedence
* fix(config): preserve authored config ownership
* fix(setup): keep default workspace and roster in sync
* fix(setup): preserve default entry workspace on bare runs
* fix(agents): adapt roster rebase to keyed entries
* fix(agents): honor both roster representations
* fix(agents): route roster reads through shared helpers
* fix(config): preserve canonical roster writes
* fix(cron): resolve dynamic default for session reaper
* fix(agents): close dynamic default migration gaps
* fix(agents): align scoped session ownership
* fix(sessions): preserve legacy main directory casing
* fix(agents): align cron and legacy auth ownership
* fix(setup): provision the committed default workspace
* fix(cron): align scoped ownership and reaping
* fix(cron): treat blank agent ids as absent
* fix(cron): retain configured session-store owners
* fix(agents): repair roster-aware CI boundaries
* fix(cron): preserve scoped ownership resolution
* fix(agents): preserve rosterless maintenance paths
* fix(agents): propagate roster ownership through runtime boundaries
* fix(agents): preserve roster ownership across runtime paths
* fix(agents): harden roster diagnostics and legacy routing
* fix(agents): remove redundant diagnostic import
* test(agents): type CLI policy fixture explicitly
* fix(config): preserve canonical roster mutation identity
* fix(doctor): read canonical agent rosters consistently
* fix(config): resolve compound roster unsets safely
* fix(config): finalize main-session reconciliation
* fix(doctor): read canonical session state safely
* fix(sessions): preserve current visibility alias
* fix(config): track roster include provenance
* test(config): type roster provenance cases
* fix(config): refine roster include ownership
* fix(agents): preserve staged roster invariants
* test(config): align fixtures with explicit roster ownership
* test(node-host): preserve optional plan typing
* fix(config): preserve authored roster projections
* test(config): keep raw roster fixtures explicit
* test(config): normalize rosters at runtime fixtures
* fix(config): protect authored roster ownership
* fix(agents): require explicit session ownership
* fix(agents): enforce scoped roster ownership
* fix(sessions): merge fixed-store agent partitions
* fix(agents): harden roster ownership boundaries
* fix(config): reject ambiguous roster projections
* fix(sessions): preserve persisted store ownership
* fix(sessions): keep collision diagnostics additive
* fix(security): scan malformed roster workspaces
* test(config): align snapshot fixtures after rebase
* test(agents): use explicit roster fixtures
* fix(config): harden roster diagnostic boundaries
* fix(sessions): isolate fixed-store agent databases
* test(agents): type malformed default markers
* refactor(sessions): extract store collision resolution
* test(system-agent): split oversized setup coverage
* style(system-agent): format split setup suite
* fix(sessions): preserve promoted store ownership
* fix(sessions): derive scoped owner before target
* fix(sessions): preserve explicit sqlite ownership
* fix(agents): restore roster compatibility across CI
* fix(agents): enforce roster-owned runtime boundaries
* fix(agents): satisfy default lookup lint
* test(sessions): split known-owner coverage
* fix(state): satisfy path identity lint
* fix(agents): preserve malformed roster safety boundaries
* fix(agents): restore roster compatibility at runtime boundaries
* fix(config): satisfy roster boundary type checks
* fix(agents): preserve roster ownership across runtime probes
Setup inference probes now execute as the configured roster owner. Malformed agent-prefixed session rows are intentionally omitted by the fail-closed visibility contract rather than normalized by tests.
* fix(agents): satisfy session list owner lint
* fix(agents): preserve roster-owned runtime boundaries
Restore shared logical rows for exact SQLite session locators while keeping their physical database owner separate. The ownership regression test now constructs an explicit sole-owner database directly instead of relying on first-touch capture, matching the intentional shared-store contract.
* fix(sessions): preserve multiply owned exact stores
* fix(sessions): restore runtime owner boundaries
Keep incognito sentinels agent-owned, fold default-agent approvals into the global snapshot, and preserve the configless legacy-main CLI policy fallback. Also repair the existing CLI watchdog test lifecycle so the compact shard observes its timeout without an unawaited assertion or async timer stall; product behavior is unchanged by that test-only fix.
* test(ci): align owner-scoped fixtures
These assertions are unchanged. The fixtures now declare the intended non-default runner, expose the session-key constant imported by production status code, and select the main approvals bucket explicitly on Windows.
* fix(agents): close final roster ownership gaps
2026-07-24 22:38:09 -07:00
Peter Steinberger
2a5ad61ce9
feat(system-agent): constrain planner JSON output at generation time ( #113482 )
...
* feat(system-agent): constrain planner JSON output
* fix(ai): align response format request typing
* fix(ai): preserve response format backend contracts
2026-07-24 21:00:28 -07:00
Jason (Json)
872ba27ff3
docs(anthropic): document the rolling opus alias and pin alias-split coverage ( #113413 )
...
Main already resolves bare opus to Claude Opus 5 but documents nothing about
the rolling behavior. State that bare family aliases follow the current
generation and that pinning is the opt-out, and add regression coverage
separating bare aliases, pinned aliases, and retired-ref upgrades.
Co-authored-by: Claude Fable 5 <noreply@anthropic.com >
2026-07-24 17:14:49 -06:00
Peter Steinberger
5bea268128
feat(anthropic): complete Claude Opus 5 rollout ( #113392 )
...
* feat(models): add Claude Opus 5 support
* test(models): align Opus 5 setup fixtures
* test(models): update ambient Opus 5 detection
* fix(models): reconcile Opus 5 support with main
2026-07-24 14:55:36 -07:00
Jason (Json)
2ee8730450
feat(anthropic): add Claude Opus 5 model support ( #113391 )
...
* feat(anthropic): add Claude Opus 5 model support
Wire claude-opus-5 through the Claude 5 contract seams: adaptive-by-default
thinking with the full low..max effort range, default-sampling and prefill
stripping, streaming refusal contract, model-bound thinking replay, and 1M/128k
catalog metadata across anthropic, claude-cli, Vertex, Bedrock, and Mantle.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
* fix(anthropic-vertex): normalize explicit Vertex Opus 5 model rows
Extend normalizeAnthropicVertexResolvedModel so user-configured Vertex Opus 5
rows regain reasoning, image input, 1M/128k limits, and the native thinking
map; update the live-model priority expectation and regenerate docs_map.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
---------
Co-authored-by: Claude Fable 5 <noreply@anthropic.com >
2026-07-24 14:47:08 -06:00
Vincent Koc
e3636852ba
refactor(normalization): reuse trimmed list helpers ( #113295 )
2026-07-24 17:43:22 +08:00
Peter Steinberger
5808b72ed6
refactor(models): own compat in provider catalogs ( #112542 )
2026-07-22 02:14:29 -07:00
Peter Steinberger
edecdbd05e
refactor(config): config-surface reduction tranche 3 — product consolidations (review request) ( #111527 )
...
* refactor(config): consolidate media model lists
* refactor(config): unify memory configuration
* refactor(config): consolidate TTS ownership
* refactor(config): move typing policy to agents
* refactor(config): retire product-level config surfaces
* refactor(config): share scoped tool policy type
* chore(config): refresh generated baselines
* fix(config): honor agent typing overrides
* fix(config): migrate sibling config consumers
* refactor(infra): keep base64url decoder private
* fix(config): strip invalid legacy TTS values
* chore(config): refresh rebased baseline hash
* fix(doctor): route legacy messages.tts.realtime voice to talk during tts move
* refactor(config): polish final layout names
* refactor(config): freeze retired tuning defaults
* feat(config): add fast mode default symmetry
* refactor(config): key agent entries by id
* docs(config): update final layout reference
* test(config): cover final layout migrations
* chore(config): refresh final layout baselines
* fix(config): align final layout runtime readers
* fix(config): align remaining readers
* fix(config): stabilize final layout migrations
* fix(config): finalize config projection proof
* fix(config): address final layout review
* docs(release): preserve historical config names
* fix(config): complete keyed agent migration
* fix(config): close final migration gaps
* fix(config): finish full-branch review
* fix(config): complete runtime secret detection
* fix(config): close final review findings
* fix(config): finish canonical docs and heartbeat migration
* fix(config): integrate latest main after rebase
* refactor(env): isolate test-only controls
* refactor(env): isolate build and development controls
* refactor(env): collapse process identity indirection
* refactor(env): remove duplicate config and temp aliases
* docs(env): define the operator-facing allowlist
* ci(env): ratchet production variable count
* fix(env): remove stale provider helper import
* fix(env): make ratchet sorting explicit
* test(env): keep test seam in dead-code audit
* test(env): cover ratchet growth and boundary; document surface budgets
* docs(config): document tier-eval consolidations
* docs(config): clarify speech preference ownership
* test(memory): align retired tuning fixtures
* refactor(memory): freeze engine heuristics
* refactor(config): apply tier-eval tranche
* refactor(tts): move persona shaping to providers
* refactor(compaction): move prompt policy to providers
* test(config): align hookified prompt fixtures
* chore(deadcode): classify test-only exports
* chore(github): remove unused spawn helper
* chore(deadcode): classify queue diagnostics
* chore(deadcode): remove unused lane snapshot export
* chore(plugin-sdk): ratchet consolidated surface
* fix(config): integrate latest main after rebase
2026-07-21 20:28:43 -07:00
Peter Steinberger
f81f9d8570
chore: enforce max-lines suppression ratchet ( #107315 )
...
* ci: enforce max-lines suppression ratchet
* chore: prune stale max-lines suppression
* fix: close max-lines ratchet enforcement gaps
* fix: harden max-lines ratchet checks
* fix(ci): satisfy max-lines ratchet checks
* style: format max-lines declarations
* fix(ci): match oxlint suppression grammar
* test: isolate max-lines git fixtures
* chore: prune resolved max-lines debt
* test: skip newline path fixture on Windows
* fix: harden max-lines suppression ratchet
* chore: refresh max-lines baseline
* fix: close max-lines ratchet bypasses
* fix: derive ratchet base from PR merge tree
* fix: support older Git in staged ratchet
* fix: align max-lines declarations and baseline
* chore: refresh max-lines baseline for current main
* fix: exclude generated wizard locales from max-lines
* chore: prune resolved max-lines debt
2026-07-14 09:27:02 -07:00
Vincent Koc
3aab2ce6a9
refactor(packages): remove dead internal helpers ( #107077 )
2026-07-14 11:48:14 +08:00
Peter Steinberger
2aa4ff0825
refactor: consolidate duplicate helper exports ( #106016 )
...
* refactor(normalization): consolidate string helpers
* refactor(normalization): consolidate agent ids
* refactor(paths): consolidate user path resolution
* refactor(gateway): preserve transcript helper facade
* fix(normalization): align helper build aliases
* fix(memory): keep helper import line neutral
* chore(plugin-sdk): align consolidated helper surface
* refactor(normalization): reuse lowercase string helper
* refactor(normalization): reuse record guard
* refactor(normalization): share surrogate boundary helper
* refactor(agents): share token estimate constant
* refactor(memory): distinguish standalone helper contracts
* refactor(normalization): share error cause formatter
* refactor(config): distinguish eligibility predicates
* refactor(plugins): share registry state symbol
* refactor(cli): reuse outbound dependency adapter
* refactor(cron): distinguish positive duration parser
* fix(gateway): keep transcript helper private
* fix(paths): preserve public helper status
* refactor(channels): reuse registry normalizer
* refactor(agents): reuse agent core runtime facade
* refactor(auth): reuse locked profile upsert
* refactor(records): distinguish trap-safe guard
* refactor(migrations): distinguish sync directory helper
* test(plugins): drop stale duration alias expectations
* fix(channels): remove stale registry import
* chore(plugin-sdk): refresh helper API baseline
* fix(memory): keep renamed helpers private
* fix(plugins): keep registry state key private
* fix(plugin-sdk): tighten wildcard surface budget
* chore(plugin-sdk): refresh rebased helper API baseline
2026-07-13 03:22:00 -07:00
Vincent Koc
73bf1f29f8
refactor(models): trim private catalog exports ( #105150 )
2026-07-12 16:31:59 +08:00
Peter Steinberger
e686693732
feat(tooling): adopt noUncheckedIndexedAccess via a strict-ratchet lane (phase 1) ( #104577 )
...
* feat(tooling): add noUncheckedIndexedAccess strict-ratchet lane
* fix(packages): make indexed access explicit across ratchet packages
Burns down all 65 noUncheckedIndexedAccess errors in the seven ratchet
packages with behavior-identical restructuring (iteration, charAt/slice,
regex-group guards, validated hextet tuple). net-policy invariant
violations now throw instead of failing open. Adds
@openclaw/normalization-core/expect (expectDefined/first/last) with
subpath export and tests. memory-host-sdk fixes kept but the package
stays out of the lane: it re-exports core src/** so the flag would apply
transitively to all of core.
* fix(lint): keep .oxlintrc.json strict-JSON parseable for extension lint wrappers
2026-07-11 10:26:12 -07:00
Peter Steinberger
97bbbc2271
feat(agents): derive a provider-declared default utility model when unset ( #103769 )
...
* feat(agents): derive a provider-declared default utility model when unset
When agents.defaults.utilityModel is not set, utility tasks (titles, progress
narration) now use the primary provider's declared small model
(modelCatalog.providers.<id>.defaultUtilityModel: OpenAI -> gpt-5.6-luna,
Anthropic -> claude-haiku-4-5). Auth is inherent because derivation follows
the agent's primary provider. Setting utilityModel to an empty string
disables utility routing entirely; narration turns on automatically when a
default resolves and stays off otherwise.
Formatting/lint/tests verified on Testbox (oxfmt, oxlint, plugins:inventory,
docs:map, import-cycles, check:test-types, 4 test files).
* fix(ai): drop the temperature parameter for models that reject it
The GPT-5.6 family 400s on temperature via the Responses API (live-verified:
gpt-5.6-luna/-terra reject it; gpt-5.5 and gpt-5.4-mini/nano accept it).
supportsOpenAITemperature gates all three OpenAI payload builders, with a
catalog compat override (compat.supportsTemperature) declared for the 5.6
family in the openai manifest. Without this, utility tasks (titles,
narration) would fail once gpt-5.6-luna becomes the derived default.
Gates on Testbox: oxfmt, oxlint, plugins:inventory, import-cycles,
check:test-types, 6 test files. Live proof on Testbox: gpt-5.6-luna and
claude-haiku-4-5 one-shot completions succeed with temperature requested.
* fix(agents): carry the primary model's auth profile onto the derived utility default
A primary like openai/gpt-5.5@work previously reached utility tasks via the
profiled fallback; the derived default shares the provider, so its trailing
auth profile carries over instead of silently switching to default
credentials (Codex review). Gates on Testbox: oxfmt, check:test-types, tests.
* docs: realign the manifest provider-fields table after adding defaultUtilityModel
2026-07-10 17:40:11 +01:00
Peter Steinberger
db12cb7023
fix(xai): align current model catalog and tools ( #103260 )
...
* fix(xai): align current model catalog and tools
* chore(xai): defer release note to release closeout
* docs: refresh xai documentation map
2026-07-10 03:36:14 +01:00
Vortex Openclaw
1f6ddb5df0
feat(models): add Claude Sonnet 5 support ( #98254 )
...
* feat(models): add Claude Sonnet 5 support
Co-authored-by: Ariel Bravy <ariel@vortexradar.com >
* fix(models): align Sonnet 5 validation baselines
* fix(models): satisfy Sonnet 5 CI contracts
* fix(models): enforce Sonnet 5 provider contracts
* docs(changelog): defer Sonnet 5 release note
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
Co-authored-by: Ariel Bravy <ariel@vortexradar.com >
2026-07-07 00:05:35 +01:00
Vincent Koc
bf8626c0e9
feat(providers): add LongCat API support ( #100501 )
...
* fix(ai): honor provider reasoning compatibility
* feat(longcat): add hosted provider plugin
* chore(longcat): register package metadata
* docs(longcat): add provider setup guide
* docs(longcat): document self-hosted model routing
* refactor(longcat): externalize provider plugin
* chore(longcat): add npm release artifacts
2026-07-06 10:07:08 -07:00
xingzhou
27d6c88167
feat: add utility models and generated session titles ( #87643 )
...
* feat: add utility model session titles
* docs: clarify utility model calls
* fix: budget utility title reasoning
* docs: refresh config baseline
* docs: refresh plugin sdk baseline
* docs: refresh plugin sdk baseline
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-04 17:24:51 -04:00
Dallin Romney
d102715bb2
refactor(models): share strict model ref parsing ( #99790 )
2026-07-04 12:10:06 -07:00
Dallin Romney
a633887c34
refactor(models): consolidate catalog ref parsing ( #99682 )
2026-07-03 16:28:25 -07:00
Peter Steinberger
c52583a022
feat(openai): add GPT-5.6 series support ( #98333 )
...
* feat(openai): add GPT-5.6 series support
* docs: refresh map for GPT-5.6
* fix(openai): preserve GPT-5.6 thinking metadata
* fix(codex): sync managed app server version
* fix(codex): sync managed app server version
* fix(openai): account for GPT-5.6 cache writes
---------
Co-authored-by: Peter Steinberger <steipete@golden-gate.local >
2026-07-01 06:48:57 +01:00
Parvesh Saini
e33760c9df
fix(model-catalog): strip manifest model-id prefixes by the matched length ( #95744 )
2026-06-22 19:52:13 +00:00
Peter Steinberger
4df95d3c3f
docs: document package sources
2026-06-04 20:54:41 -04:00
Peter Steinberger
eaf803b223
docs: document shared package contracts
2026-06-04 01:39:12 -04:00
Peter Steinberger
9ead0ae921
fix: repair live model inference edge cases
...
Fix live model inference edge cases across provider streaming, model switching, outbound delivery, and gateway tool resolution.
Includes live/provider issue fixes and leaves #89100 explicitly partial for the remaining FM-2 group routing case.
2026-06-01 23:03:27 -04:00
charles-openclaw
84266cd30e
fix(models): strip remaining provider self prefixes ( #88781 )
...
* fix(models): strip remaining provider self prefixes
* fix(models): keep catalog refs prefix-preserving
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-05-31 22:29:47 +01:00
Andy Ye
826b378452
fix(agents): normalize prefixed Anthropic model ids ( #88587 )
2026-05-31 14:47:40 +01:00
Peter Steinberger
4c33aaa86c
refactor: unify OpenAI provider identity ( #88451 )
...
* refactor: unify OpenAI provider identity
* refactor: move legacy oauth sidecar doctor helpers
* test: align OpenAI fixtures after rebase
* test: clean OpenAI provider unification
* fix: finish OpenAI provider cleanup
* fix: finish OpenAI cleanup follow-through
* fix: finish OpenAI CI cleanup
2026-05-31 00:29:44 +01:00
Peter Steinberger
b374505e7a
refactor: source model catalog types from core
...
Source model catalog SDK types from @openclaw/model-catalog-core while preserving released compat fields and sanitized routing normalization.
2026-05-30 22:00:51 +01:00
Peter Steinberger
5891cfec3e
refactor: move model catalog normalization into core package
...
Move model catalog normalization and package-owned catalog schema/types into model-catalog-core while keeping public plugin SDK model catalog declarations on the existing SDK surface. Verified focused tests, package-boundary compile, full build, changed gate, declaration leak grep, CI, and autoreview.
2026-05-30 20:51:11 +01:00
Peter Steinberger
4e8b74568f
refactor: move model catalog refs into core package
...
Move model catalog ref helpers into @openclaw/model-catalog-core/model-catalog-refs and update internal callers/package-boundary aliases. Also fix the timestamp predicate typing that blocked prod type checks on current main.
2026-05-30 20:04:16 +01:00
Peter Steinberger
30e1556cda
refactor: extract model catalog core package
...
* refactor: extract model catalog core package
* refactor: route model catalog imports through package boundary
* build: include model catalog in plugin sdk package dts
* fix: preserve static fallback model metadata
2026-05-30 16:33:45 +01:00