@oh-my-pi/pi-catalog 18.2.6 → 18.2.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +24 -3
- package/README.md +18 -18
- package/THIRD-PARTY-NOTICES.txt +0 -37
- package/dist/types/build.d.ts +7 -1
- package/dist/types/compat/auth-ids.d.ts +1 -1
- package/dist/types/compat/axes.d.ts +1 -1
- package/dist/types/compat/cascade.d.ts +3 -2
- package/dist/types/compat/provider-ids.d.ts +1 -1
- package/dist/types/compat/resolve.d.ts +2 -0
- package/dist/types/compat/taxonomy.d.ts +2 -2
- package/dist/types/compat/types.d.ts +18 -7
- package/dist/types/discovery/index.d.ts +1 -0
- package/dist/types/discovery/openai-compatible.d.ts +2 -0
- package/dist/types/discovery/typesafe.d.ts +26 -0
- package/dist/types/model-manager.d.ts +1 -1
- package/dist/types/provider-models/openai-compat.d.ts +6 -4
- package/dist/types/provider-models/special.d.ts +10 -0
- package/dist/types/types.d.ts +23 -0
- package/package.json +38 -38
- package/src/build.ts +27 -5
- package/src/compat/auth-ids.ts +2 -0
- package/src/compat/axes.ts +9 -1
- package/src/compat/cascade.ts +45 -23
- package/src/compat/provider-ids.ts +3 -0
- package/src/compat/resolve.ts +24 -14
- package/src/compat/rules/README.md +38 -35
- package/src/compat/rules/auth/local.kdl +4 -0
- package/src/compat/rules/auth/typesafe.kdl +3 -6
- package/src/compat/rules/auth/web.kdl +4 -0
- package/src/compat/rules/classes/qwen.kdl +6 -5
- package/src/compat/rules/providers/anthropic.kdl +1 -0
- package/src/compat/rules/providers/deepinfra.kdl +28 -0
- package/src/compat/rules/providers/google-antigravity.kdl +17 -0
- package/src/compat/rules/providers/google.kdl +9 -0
- package/src/compat/rules/providers/llama.cpp.kdl +23 -0
- package/src/compat/rules/providers/local.kdl +110 -0
- package/src/compat/rules/providers/openai-codex.kdl +18 -0
- package/src/compat/rules/providers/openai.kdl +61 -0
- package/src/compat/rules/providers/openrouter.kdl +132 -0
- package/src/compat/rules/providers/typesafe.kdl +21 -0
- package/src/compat/rules/providers/web.kdl +153 -0
- package/src/compat/rules/providers/xai-oauth.kdl +26 -0
- package/src/compat/rules/providers/xai.kdl +22 -0
- package/src/compat/rules/runtime/behavior.kdl +2 -1
- package/src/compat/rules/taxonomy/qwen.kdl +2 -0
- package/src/compat/rules.json +12526 -1
- package/src/compat/taxonomy.ts +92 -31
- package/src/compat/types.ts +22 -7
- package/src/discovery/devin.ts +3 -1
- package/src/discovery/index.ts +1 -0
- package/src/discovery/openai-compatible.ts +4 -1
- package/src/discovery/typesafe.ts +118 -0
- package/src/model-manager.ts +44 -15
- package/src/models.json +1 -1
- package/src/provider-models/descriptors.ts +6 -0
- package/src/provider-models/openai-compat.ts +357 -78
- package/src/provider-models/special.ts +53 -0
- package/src/types.ts +51 -0
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,27 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [18.2.8] - 2026-09-21
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
- Expanded OpenRouter provider support with embedding, reranking, video generation, text-to-speech, and speech-to-text capabilities, including five new speech-to-text models.
|
|
10
|
+
- Added speech-to-text support to the OpenAI provider.
|
|
11
|
+
|
|
12
|
+
## [18.2.7] - 2026-09-21
|
|
13
|
+
|
|
14
|
+
### Added
|
|
15
|
+
|
|
16
|
+
- Added model-kind and grounded-search capability metadata, along with catalogs for local inference and search-engine models.
|
|
17
|
+
- Added OpenRouter image-model discovery and live TypeSafe judge-model discovery.
|
|
18
|
+
- Added the `buildDiscoveredModel` helper for defining custom providers.
|
|
19
|
+
- Added glob-based patterns for identity overrides.
|
|
20
|
+
|
|
21
|
+
### Changed
|
|
22
|
+
|
|
23
|
+
- Updated input cost for TypeSafe models to 0.042
|
|
24
|
+
- Improved model routing and thinking-policy handling for llama.cpp Qwen models, Bonsai lineage aliases, and custom provider names.
|
|
25
|
+
|
|
5
26
|
## [18.2.5] - 2026-09-17
|
|
6
27
|
|
|
7
28
|
### Added
|
|
@@ -167,9 +188,9 @@
|
|
|
167
188
|
### Fixed
|
|
168
189
|
|
|
169
190
|
- Fixed OpenCode Go/Zen live model discovery (`GET /v1/models`) missing `x-opencode-session` and omp's `User-Agent`: discovery requests now attribute with the stable install id so the requests OpenCode flags as `Bun fetch` carry the required session header.
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
191
|
+
- Fixed GPT-6 Astra requests through GitHub Copilot failing with an unsupported endpoint error ([#10874](https://github.com/can1357/oh-my-pi/pull/10874) by [@xpcmdshell](https://github.com/xpcmdshell)).
|
|
192
|
+
- Fixed GPT-6 Astra showing as free with a 272K-token window in the OpenAI Codex catalog by applying its documented pricing; `/extended-context` enables the wire-advertised 872K-token maximum ([#10980](https://github.com/can1357/oh-my-pi/pull/10980) by [@H4vC](https://github.com/H4vC)).
|
|
193
|
+
- Made extended-context catalog rebuilds faster by resolving each model's maximum window once per process ([#11039](https://github.com/can1357/oh-my-pi/pull/11039) by [@H4vC](https://github.com/H4vC)).
|
|
173
194
|
|
|
174
195
|
## [18.1.9] - 2026-09-04
|
|
175
196
|
|
package/README.md
CHANGED
|
@@ -4,18 +4,18 @@ Model catalog for [oh-my-pi](https://github.com/can1357/oh-my-pi): bundled model
|
|
|
4
4
|
|
|
5
5
|
## What's inside
|
|
6
6
|
|
|
7
|
-
| Module | Purpose
|
|
8
|
-
| ------------------------------- |
|
|
9
|
-
| `models.json` + `models` | Bundled model database (pricing, context windows, modalities, thinking support)
|
|
10
|
-
| `provider-models` | Provider catalog descriptors (`CATALOG_PROVIDERS`), per-provider model resolution rules
|
|
11
|
-
| `discovery` | Runtime model discovery for OpenAI-compatible endpoints, Gemini, Codex, Cursor, Antigravity, Ollama
|
|
12
|
-
| `compat/rules` | Checked-in KDL policy tree: taxonomy (classes/families/revisions), class/provider cascade rules, runtime behavior vocabulary; compiled by `bun run gen:compat` into the committed `rules.json`
|
|
7
|
+
| Module | Purpose |
|
|
8
|
+
| ------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
9
|
+
| `models.json` + `models` | Bundled model database (pricing, context windows, modalities, thinking support) |
|
|
10
|
+
| `provider-models` | Provider catalog descriptors (`CATALOG_PROVIDERS`), per-provider model resolution rules |
|
|
11
|
+
| `discovery` | Runtime model discovery for OpenAI-compatible endpoints, Gemini, Codex, Cursor, Antigravity, Ollama |
|
|
12
|
+
| `compat/rules` | Checked-in KDL policy tree: taxonomy (classes/families/revisions), class/provider cascade rules, runtime behavior vocabulary; compiled by `bun run gen:compat` into the committed `rules.json` |
|
|
13
13
|
| `compat` | The rule engine: `classifyModel` (taxonomy), `resolveModelPolicy` (cascade), behavior accessors (`api-routes`, `model-limits`, `exclude-models`, `pricing-peer`), collapse, and OpenAI/Anthropic wire builders that consume resolved records |
|
|
14
|
-
| `identity` | Mechanical id utilities: reference resolution against the bundled index, dialects, selection priority, tokenizer families
|
|
15
|
-
| `model-thinking` | Runtime thinking helpers (`getSupportedEfforts`, effort clamping/mapping, wire-id routing) over resolved model records
|
|
16
|
-
| `model-manager` / `model-cache` | Runtime model registry with discovery refresh and on-disk caching
|
|
17
|
-
| `wire` | Wire-level helpers: Codex, Gemini headers, GitHub Copilot
|
|
18
|
-
| `effort` | Reasoning-effort level definitions
|
|
14
|
+
| `identity` | Mechanical id utilities: reference resolution against the bundled index, dialects, selection priority, tokenizer families |
|
|
15
|
+
| `model-thinking` | Runtime thinking helpers (`getSupportedEfforts`, effort clamping/mapping, wire-id routing) over resolved model records |
|
|
16
|
+
| `model-manager` / `model-cache` | Runtime model registry with discovery refresh and on-disk caching |
|
|
17
|
+
| `wire` | Wire-level helpers: Codex, Gemini headers, GitHub Copilot |
|
|
18
|
+
| `effort` | Reasoning-effort level definitions |
|
|
19
19
|
|
|
20
20
|
Import from subpaths (`@oh-my-pi/pi-catalog/<module>`) or the root barrel.
|
|
21
21
|
|
|
@@ -42,13 +42,13 @@ Ships TypeScript source directly (no build step); requires Bun ≥ 1.3.14.
|
|
|
42
42
|
|
|
43
43
|
The `models` subpath (also exported from the root) provides timestamp-aware pricing helpers:
|
|
44
44
|
|
|
45
|
-
| API
|
|
46
|
-
|
|
|
47
|
-
| `calculateCost(model, usage, timestamp?)`
|
|
48
|
-
| `calculateUsageCost(cost, usage, timestamp?)`
|
|
49
|
-
| `calculateUncachedInputCost(cost, promptInputTokens, timestamp?)` | Returns the cost of a fully uncached prompt.
|
|
50
|
-
| `getTimeBasedPricingPeriod(cost, timestamp?)`
|
|
51
|
-
| `getNextTimeBasedPricingTransition(cost, timestamp?)`
|
|
45
|
+
| API | Result |
|
|
46
|
+
| ----------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- |
|
|
47
|
+
| `calculateCost(model, usage, timestamp?)` | Updates and returns `usage.cost` using `model.cost`. |
|
|
48
|
+
| `calculateUsageCost(cost, usage, timestamp?)` | Updates and returns `usage.cost` using a `ModelCost`. |
|
|
49
|
+
| `calculateUncachedInputCost(cost, promptInputTokens, timestamp?)` | Returns the cost of a fully uncached prompt. |
|
|
50
|
+
| `getTimeBasedPricingPeriod(cost, timestamp?)` | Returns `"peak"`, `"off-peak"`, or `undefined` without a schedule. |
|
|
51
|
+
| `getNextTimeBasedPricingTransition(cost, timestamp?)` | Returns the next actual peak/off-peak change strictly after the timestamp, or `undefined` if none exists. |
|
|
52
52
|
|
|
53
53
|
Timestamps are Unix milliseconds; omitted timestamps use the current time for scheduled pricing. Flat token prices are unaffected. Pricing selects the latest applicable effective rate card, then its long-context tier, then the peak/off-peak multiplier. A transition query concerns the recurring tariff, not dated rate-card changes.
|
|
54
54
|
|
package/THIRD-PARTY-NOTICES.txt
CHANGED
|
@@ -335,43 +335,6 @@ This license allows the work and adaptations of it to be shared and used
|
|
|
335
335
|
commercially, as long as it is attributed to Poppy Works. The font is bundled
|
|
336
336
|
here (crates/pi-natives/src/fonts/Silver.ttf) as a CJK/Unicode bitmap fallback.
|
|
337
337
|
|
|
338
|
-
-------------------------------------------------------------------------------
|
|
339
|
-
packages/utils/src/vendor/mermaid-ascii/NOTICE
|
|
340
|
-
|
|
341
|
-
This directory contains an in-house Mermaid-diagram-to-ASCII renderer adapted
|
|
342
|
-
from beautiful-mermaid (https://github.com/lukilabs/beautiful-mermaid), used
|
|
343
|
-
under the MIT License.
|
|
344
|
-
|
|
345
|
-
Copyright (c) 2026 Craft Docs
|
|
346
|
-
|
|
347
|
-
Only the ASCII rendering pipeline is ported (flowchart/state, sequence, class,
|
|
348
|
-
ER, and xychart diagrams); the SVG renderer and its `elkjs` graph-layout
|
|
349
|
-
dependency, the browser entry point, and the SVG theme/style modules were
|
|
350
|
-
dropped. Terminal display width is reimplemented on `Bun.stringWidth`, and
|
|
351
|
-
inline label formatting (HTML tags, markdown emphasis) is reduced to plain text
|
|
352
|
-
for ASCII output. Layout and edge-routing logic is preserved faithfully so
|
|
353
|
-
ASCII output matches the upstream package.
|
|
354
|
-
|
|
355
|
-
MIT License
|
|
356
|
-
|
|
357
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
358
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
359
|
-
in the Software without restriction, including without limitation the rights
|
|
360
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
361
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
362
|
-
furnished to do so, subject to the following conditions:
|
|
363
|
-
|
|
364
|
-
The above copyright notice and this permission notice shall be included in all
|
|
365
|
-
copies or substantial portions of the Software.
|
|
366
|
-
|
|
367
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
368
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
369
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
370
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
371
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
372
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
373
|
-
SOFTWARE.
|
|
374
|
-
|
|
375
338
|
-------------------------------------------------------------------------------
|
|
376
339
|
packages/coding-agent/src/markit/NOTICE
|
|
377
340
|
|
package/dist/types/build.d.ts
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* Request handlers read fields — they never detect, parse ids, or allocate
|
|
7
7
|
* compat per request.
|
|
8
8
|
*/
|
|
9
|
-
import type
|
|
9
|
+
import { type Api, type Model, type ModelSpec } from "./types.js";
|
|
10
10
|
/**
|
|
11
11
|
* Applies reviewed catalog-data value corrections (`cost-patch`,
|
|
12
12
|
* `limits-patch`, `long-context-cost`, `context-window-floor`,
|
|
@@ -16,6 +16,12 @@ import type { Api, Model, ModelSpec } from "./types.js";
|
|
|
16
16
|
* limits and pricing still win.
|
|
17
17
|
*/
|
|
18
18
|
export declare function applyCatalogCorrections(model: Pick<ModelSpec<Api>, "cost" | "contextWindow" | "maxTokens" | "input">, catalog: Record<string, unknown>): void;
|
|
19
|
+
/**
|
|
20
|
+
* Build a discovered model using the backend's catalog-selected request API.
|
|
21
|
+
* The credential-bearing provider id remains unchanged while `providerType`
|
|
22
|
+
* persists the backend policy identity across cache and config round trips.
|
|
23
|
+
*/
|
|
24
|
+
export declare function buildDiscoveredModel(spec: ModelSpec<Api>, providerType: string): Model<Api>;
|
|
19
25
|
/**
|
|
20
26
|
* Build one model from an authored spec. Bundled models.json rows are fully
|
|
21
27
|
* materialized by the generator and consumed directly (see `models.ts`), so
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
/** Every provider with an `auth/<id>.kdl` policy. */
|
|
2
|
-
export type AuthProviderId = "abliteration" | "aiand" | "aimlapi" | "alibaba-coding-plan" | "alibaba-token-plan" | "amazon-bedrock" | "anthropic" | "azure" | "baseten" | "bedrock-mantle" | "cerebras" | "charm-hyper" | "cline-pass" | "cloudflare-ai-gateway" | "commandcode" | "coreweave" | "cursor" | "deepinfra" | "deepseek" | "devin" | "exa" | "firepass" | "fireworks" | "github-copilot" | "gitlab-duo" | "gitlab-duo-agent" | "gmi-cloud" | "google" | "google-antigravity" | "google-gemini-cli" | "google-vertex" | "groq" | "huggingface" | "kagi" | "kilo" | "kimi-code" | "litellm" | "llama.cpp" | "lm-studio" | "meta" | "minimax" | "minimax-code" | "minimax-code-cn" | "mistral" | "moonshot" | "muse-code" | "nanogpt" | "novita" | "nvidia" | "ollama" | "ollama-cloud" | "openai" | "openai-codex" | "openai-codex-device" | "opencode-go" | "opencode-zen" | "openrouter" | "parallel" | "perplexity" | "qianfan" | "qwen-portal" | "sakana" | "siliconflow" | "siliconflow-cn" | "stencil" | "synthetic" | "tavily" | "together" | "typesafe" | "umans" | "venice" | "vercel-ai-gateway" | "vllm" | "wafer-serverless" | "xai" | "xai-oauth" | "xiaomi" | "xiaomi-token-plan-ams" | "xiaomi-token-plan-cn" | "xiaomi-token-plan-sgp" | "yolo-auto" | "zai" | "zai-coding-plan" | "zenmux" | "zhipu-coding-plan";
|
|
2
|
+
export type AuthProviderId = "abliteration" | "aiand" | "aimlapi" | "alibaba-coding-plan" | "alibaba-token-plan" | "amazon-bedrock" | "anthropic" | "azure" | "baseten" | "bedrock-mantle" | "cerebras" | "charm-hyper" | "cline-pass" | "cloudflare-ai-gateway" | "commandcode" | "coreweave" | "cursor" | "deepinfra" | "deepseek" | "devin" | "exa" | "firepass" | "fireworks" | "github-copilot" | "gitlab-duo" | "gitlab-duo-agent" | "gmi-cloud" | "google" | "google-antigravity" | "google-gemini-cli" | "google-vertex" | "groq" | "huggingface" | "kagi" | "kilo" | "kimi-code" | "litellm" | "llama.cpp" | "lm-studio" | "local" | "meta" | "minimax" | "minimax-code" | "minimax-code-cn" | "mistral" | "moonshot" | "muse-code" | "nanogpt" | "novita" | "nvidia" | "ollama" | "ollama-cloud" | "openai" | "openai-codex" | "openai-codex-device" | "opencode-go" | "opencode-zen" | "openrouter" | "parallel" | "perplexity" | "qianfan" | "qwen-portal" | "sakana" | "siliconflow" | "siliconflow-cn" | "stencil" | "synthetic" | "tavily" | "together" | "typesafe" | "umans" | "venice" | "vercel-ai-gateway" | "vllm" | "wafer-serverless" | "web" | "xai" | "xai-oauth" | "xiaomi" | "xiaomi-token-plan-ams" | "xiaomi-token-plan-cn" | "xiaomi-token-plan-sgp" | "yolo-auto" | "zai" | "zai-coding-plan" | "zenmux" | "zhipu-coding-plan";
|
|
3
3
|
/** Providers whose policy declares a `login` flow (the `/login` roster). */
|
|
4
4
|
export type LoginProviderId = "abliteration" | "aiand" | "alibaba-coding-plan" | "alibaba-token-plan" | "anthropic" | "baseten" | "cerebras" | "charm-hyper" | "cline-pass" | "cloudflare-ai-gateway" | "commandcode" | "coreweave" | "cursor" | "deepinfra" | "deepseek" | "devin" | "exa" | "firepass" | "fireworks" | "github-copilot" | "gitlab-duo" | "gitlab-duo-agent" | "gmi-cloud" | "google-antigravity" | "google-gemini-cli" | "huggingface" | "kagi" | "kilo" | "kimi-code" | "litellm" | "llama.cpp" | "lm-studio" | "meta" | "minimax-code" | "minimax-code-cn" | "moonshot" | "muse-code" | "nanogpt" | "novita" | "nvidia" | "ollama" | "ollama-cloud" | "openai-codex" | "openai-codex-device" | "opencode-go" | "opencode-zen" | "openrouter" | "parallel" | "perplexity" | "qianfan" | "qwen-portal" | "sakana" | "siliconflow" | "siliconflow-cn" | "stencil" | "synthetic" | "tavily" | "together" | "typesafe" | "umans" | "venice" | "vercel-ai-gateway" | "vllm" | "wafer-serverless" | "xai" | "xai-oauth" | "xiaomi" | "xiaomi-token-plan-ams" | "xiaomi-token-plan-cn" | "xiaomi-token-plan-sgp" | "yolo-auto" | "zai" | "zai-coding-plan" | "zenmux" | "zhipu-coding-plan";
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* one of the axis's declared records.
|
|
11
11
|
*/
|
|
12
12
|
import type { Effort } from "../effort.js";
|
|
13
|
-
import type
|
|
13
|
+
import { type ThinkingControlMode } from "../types.js";
|
|
14
14
|
/** Value shape a directive accepts (see `rules/README.md`). */
|
|
15
15
|
export type AxisShape = "scalar" | "array" | "object";
|
|
16
16
|
/** Axis namespace: request-wire compat, thinking control surface, or catalog metadata. */
|
|
@@ -15,8 +15,9 @@ export declare class AmbiguousOverlapError extends Error {
|
|
|
15
15
|
export declare function globMatch(pattern: string, value: string): boolean;
|
|
16
16
|
/**
|
|
17
17
|
* Resolve wire, thinking, and catalog assignments for one structured target.
|
|
18
|
-
* Exact model effort corrections
|
|
19
|
-
*
|
|
18
|
+
* Exact model effort corrections and identity-scoped neutral-upgrade policies
|
|
19
|
+
* can enable reasoning; absent family/revision facts never satisfy selectors
|
|
20
|
+
* that require them. Returned axes are caller-owned.
|
|
20
21
|
*
|
|
21
22
|
* @throws AmbiguousOverlapError when equal-rank rules contest one axis.
|
|
22
23
|
*/
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/** Every chat-model provider with a catalog entry (`default-model` in its provider rules). */
|
|
2
|
-
export type KnownProvider = "abliteration" | "aiand" | "aimlapi" | "alibaba-coding-plan" | "alibaba-token-plan" | "amazon-bedrock" | "anthropic" | "azure" | "baseten" | "bedrock-mantle" | "cerebras" | "charm-hyper" | "cline-pass" | "cloudflare-ai-gateway" | "commandcode" | "coreweave" | "cursor" | "deepinfra" | "deepseek" | "devin" | "firepass" | "fireworks" | "github-copilot" | "gitlab-duo" | "gitlab-duo-agent" | "gmi-cloud" | "google" | "google-antigravity" | "google-gemini-cli" | "google-vertex" | "groq" | "huggingface" | "kilo" | "kimi-code" | "litellm" | "lm-studio" | "meta" | "minimax" | "minimax-code" | "minimax-code-cn" | "mistral" | "moonshot" | "muse-code" | "nanogpt" | "novita" | "nvidia" | "ollama" | "ollama-cloud" | "openai" | "openai-codex" | "opencode-go" | "opencode-zen" | "openrouter" | "qianfan" | "qwen-portal" | "sakana" | "siliconflow" | "siliconflow-cn" | "synthetic" | "together" | "umans" | "venice" | "vercel-ai-gateway" | "vllm" | "wafer-serverless" | "xai" | "xai-oauth" | "xiaomi" | "xiaomi-token-plan-ams" | "xiaomi-token-plan-cn" | "xiaomi-token-plan-sgp" | "yolo-auto" | "zai" | "zenmux" | "zhipu-coding-plan";
|
|
2
|
+
export type KnownProvider = "abliteration" | "aiand" | "aimlapi" | "alibaba-coding-plan" | "alibaba-token-plan" | "amazon-bedrock" | "anthropic" | "azure" | "baseten" | "bedrock-mantle" | "cerebras" | "charm-hyper" | "cline-pass" | "cloudflare-ai-gateway" | "commandcode" | "coreweave" | "cursor" | "deepinfra" | "deepseek" | "devin" | "firepass" | "fireworks" | "github-copilot" | "gitlab-duo" | "gitlab-duo-agent" | "gmi-cloud" | "google" | "google-antigravity" | "google-gemini-cli" | "google-vertex" | "groq" | "huggingface" | "kilo" | "kimi-code" | "litellm" | "lm-studio" | "local" | "meta" | "minimax" | "minimax-code" | "minimax-code-cn" | "mistral" | "moonshot" | "muse-code" | "nanogpt" | "novita" | "nvidia" | "ollama" | "ollama-cloud" | "openai" | "openai-codex" | "opencode-go" | "opencode-zen" | "openrouter" | "qianfan" | "qwen-portal" | "sakana" | "siliconflow" | "siliconflow-cn" | "synthetic" | "together" | "typesafe" | "umans" | "venice" | "vercel-ai-gateway" | "vllm" | "wafer-serverless" | "web" | "xai" | "xai-oauth" | "xiaomi" | "xiaomi-token-plan-ams" | "xiaomi-token-plan-cn" | "xiaomi-token-plan-sgp" | "yolo-auto" | "zai" | "zenmux" | "zhipu-coding-plan";
|
|
@@ -8,6 +8,8 @@ export interface ResolvedModelPolicy<TApi extends Api = Api> {
|
|
|
8
8
|
/** Catalog-data axis assignments (longContext, priority, …) for generation. */
|
|
9
9
|
catalog: Record<string, unknown>;
|
|
10
10
|
}
|
|
11
|
+
/** Resolve the request adapter assigned to a discovery backend before materialization. */
|
|
12
|
+
export declare function resolveDiscoveryApi(spec: ModelSpec<Api>, providerType: string): Api;
|
|
11
13
|
/**
|
|
12
14
|
* Resolves the full policy surface for one model spec: structured identity,
|
|
13
15
|
* complete compat record, thinking metadata, and catalog-data corrections.
|
|
@@ -10,12 +10,12 @@
|
|
|
10
10
|
*/
|
|
11
11
|
import type { Effort } from "../effort.js";
|
|
12
12
|
import type { ModelIdentity } from "./types.js";
|
|
13
|
-
/** Two classes
|
|
13
|
+
/** Two classes, families, or reviewed override patterns tie for one model id. */
|
|
14
14
|
export declare class AmbiguousIdentityError extends Error {
|
|
15
15
|
readonly model: string;
|
|
16
16
|
readonly first: string;
|
|
17
17
|
readonly second: string;
|
|
18
|
-
constructor(model: string, first: string, second: string, kind: "class" | "family");
|
|
18
|
+
constructor(model: string, first: string, second: string, kind: "class" | "family" | "override");
|
|
19
19
|
}
|
|
20
20
|
/** Options for {@link classifyModel}. */
|
|
21
21
|
export interface ClassifyOptions {
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* `behavior.ts`, `resolve.ts`) exposes to consumers.
|
|
6
6
|
*/
|
|
7
7
|
import type { Effort } from "../effort.js";
|
|
8
|
-
import type {
|
|
8
|
+
import type { Api, KindApiKind, ThinkingControlMode, TokenCost } from "../types.js";
|
|
9
9
|
import type { RevisionOp } from "./revision.js";
|
|
10
10
|
/** Class-membership matcher kinds, most to least specific. */
|
|
11
11
|
export type MatcherKind = "exact" | "bounded" | "namespace" | "prefix" | "glob";
|
|
@@ -27,11 +27,9 @@ export interface CompiledRevisionPrefix {
|
|
|
27
27
|
prefix: string;
|
|
28
28
|
anywhere?: boolean;
|
|
29
29
|
}
|
|
30
|
-
|
|
31
|
-
export interface CompiledIdentityOverride {
|
|
30
|
+
interface CompiledIdentityOverrideFields {
|
|
32
31
|
id: string;
|
|
33
32
|
provider?: string;
|
|
34
|
-
model: string;
|
|
35
33
|
logical?: string;
|
|
36
34
|
class?: string;
|
|
37
35
|
family?: string;
|
|
@@ -43,6 +41,16 @@ export interface CompiledIdentityOverride {
|
|
|
43
41
|
provenance: string;
|
|
44
42
|
expiresAtMs?: number;
|
|
45
43
|
}
|
|
44
|
+
/** One compiled reviewed identity correction with exactly one bare-model selector. */
|
|
45
|
+
export type CompiledIdentityOverride = CompiledIdentityOverrideFields & ({
|
|
46
|
+
/** Exact bare-model selector. */
|
|
47
|
+
model: string;
|
|
48
|
+
glob?: never;
|
|
49
|
+
} | {
|
|
50
|
+
model?: never;
|
|
51
|
+
/** Anchored, case-insensitive bare-model glob. */
|
|
52
|
+
glob: string;
|
|
53
|
+
});
|
|
46
54
|
/** One compiled model class: matchers, families, revision rules, overrides. */
|
|
47
55
|
export interface CompiledClass {
|
|
48
56
|
id: string;
|
|
@@ -567,7 +575,7 @@ export interface CompiledProviderDiscovery {
|
|
|
567
575
|
export interface CompiledSeedModel {
|
|
568
576
|
id: string;
|
|
569
577
|
name: string;
|
|
570
|
-
api:
|
|
578
|
+
api: Api;
|
|
571
579
|
provider: string;
|
|
572
580
|
baseUrl: string;
|
|
573
581
|
reasoning: boolean;
|
|
@@ -592,8 +600,8 @@ export interface CompiledSeed {
|
|
|
592
600
|
models: CompiledSeedModel[];
|
|
593
601
|
}
|
|
594
602
|
/**
|
|
595
|
-
* One
|
|
596
|
-
*
|
|
603
|
+
* One model provider's catalog entry: the non-code half of what the runtime
|
|
604
|
+
* and generator know about a provider. A `providers/<id>.kdl` file
|
|
597
605
|
* declares one by carrying `default-model`; files without it are wire-compat
|
|
598
606
|
* only (custom provider ids such as `llama.cpp`).
|
|
599
607
|
*/
|
|
@@ -611,6 +619,8 @@ export interface CompiledProvider {
|
|
|
611
619
|
skipCrossProviderReferenceFills?: boolean;
|
|
612
620
|
/** Present only for providers enrolled in `generate-models.ts` discovery. */
|
|
613
621
|
discovery?: CompiledProviderDiscovery;
|
|
622
|
+
/** Non-chat model kinds mapped to their runtime transport APIs. */
|
|
623
|
+
kindApis?: Partial<Record<KindApiKind, Api>>;
|
|
614
624
|
/** Authored bundled rows, when the provider cannot be discovered at generation time. */
|
|
615
625
|
seed?: CompiledSeed;
|
|
616
626
|
}
|
|
@@ -673,3 +683,4 @@ export interface ResolvedAxes {
|
|
|
673
683
|
*/
|
|
674
684
|
reasoning: boolean;
|
|
675
685
|
}
|
|
686
|
+
export {};
|
|
@@ -59,6 +59,8 @@ export interface FetchOpenAICompatibleModelsOptions<TApi extends Api> {
|
|
|
59
59
|
apiKey?: string;
|
|
60
60
|
/** Additional request headers. */
|
|
61
61
|
headers?: Record<string, string>;
|
|
62
|
+
/** Query parameters appended to the `/models` probe (e.g. OpenRouter's `output_modalities` roster filter). */
|
|
63
|
+
query?: Record<string, string>;
|
|
62
64
|
/** Optional AbortSignal for request cancellation; caller owns its lifecycle. */
|
|
63
65
|
signal?: AbortSignal;
|
|
64
66
|
/**
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { FetchImpl, ModelSpec } from "../types.js";
|
|
2
|
+
/** Public TypeSafe API root shared by discovery and judgment requests. */
|
|
3
|
+
export declare const TYPESAFE_DEFAULT_BASE_URL = "https://api.typesafe.ai";
|
|
4
|
+
/** Wire card returned by TypeSafe's authenticated `GET /v1/models`. */
|
|
5
|
+
export interface TypeSafeModelCard {
|
|
6
|
+
name: string;
|
|
7
|
+
description: string;
|
|
8
|
+
release_date: string;
|
|
9
|
+
}
|
|
10
|
+
/** Credentials and transport overrides for TypeSafe account model discovery. */
|
|
11
|
+
export interface FetchTypeSafeModelsOptions {
|
|
12
|
+
apiKey: string;
|
|
13
|
+
baseUrl?: string;
|
|
14
|
+
fetch?: FetchImpl;
|
|
15
|
+
signal?: AbortSignal;
|
|
16
|
+
}
|
|
17
|
+
/** Validate and de-duplicate the official `{ models: [...] }` response. */
|
|
18
|
+
export declare function parseTypeSafeModelCards(payload: unknown): TypeSafeModelCard[] | null;
|
|
19
|
+
/**
|
|
20
|
+
* Fetch TypeSafe's account-visible judge models.
|
|
21
|
+
*
|
|
22
|
+
* Returns `null` for transport, HTTP, or envelope failures. A valid empty
|
|
23
|
+
* roster returns `[]`, allowing the model manager to distinguish it from an
|
|
24
|
+
* unavailable discovery endpoint.
|
|
25
|
+
*/
|
|
26
|
+
export declare function fetchTypeSafeModels(options: FetchTypeSafeModelsOptions): Promise<ModelSpec<"typesafe">[] | null>;
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import type { ModelManagerOptions, ModelsDevFallback } from "../model-manager.js";
|
|
2
2
|
import { getBundledModels } from "../models.js";
|
|
3
|
-
import type
|
|
3
|
+
import { type Api, type FetchImpl, type ModelSpec, type Provider } from "../types.js";
|
|
4
4
|
import { ALIBABA_TOKEN_PLAN_BASE_URL } from "../wire/alibaba-token-plan.js";
|
|
5
5
|
import type { ModelManagerConfig } from "./descriptor-types.js";
|
|
6
6
|
export interface ModelsDevModel {
|
|
7
7
|
id?: string;
|
|
8
8
|
name?: string;
|
|
9
|
+
kind?: string;
|
|
9
10
|
tool_call?: boolean;
|
|
10
11
|
reasoning?: boolean;
|
|
11
12
|
reasoning_options?: Array<{
|
|
@@ -26,6 +27,7 @@ export interface ModelsDevModel {
|
|
|
26
27
|
};
|
|
27
28
|
modalities?: {
|
|
28
29
|
input?: string[];
|
|
30
|
+
output?: string[];
|
|
29
31
|
};
|
|
30
32
|
status?: string;
|
|
31
33
|
provider?: {
|
|
@@ -167,8 +169,8 @@ export declare function applyXaiResponsesThinkingPolicy(model: ModelSpec<"openai
|
|
|
167
169
|
* Render the xai-oauth KDL seed as the static runtime fallback consumed by
|
|
168
170
|
* {@link xaiOAuthModelManagerOptions}.
|
|
169
171
|
*/
|
|
170
|
-
export declare function buildXaiOAuthStaticSeed(baseUrl?: string): ModelSpec<
|
|
171
|
-
export declare function xaiOAuthModelManagerOptions(config?: XaiOAuthModelManagerConfig): ModelManagerOptions<
|
|
172
|
+
export declare function buildXaiOAuthStaticSeed(baseUrl?: string): ModelSpec<Api>[];
|
|
173
|
+
export declare function xaiOAuthModelManagerOptions(config?: XaiOAuthModelManagerConfig): ModelManagerOptions<Api>;
|
|
172
174
|
export declare function isLikelyAimlApiChatModelId(id: string): boolean;
|
|
173
175
|
export interface AimlApiModelManagerConfig {
|
|
174
176
|
apiKey?: string;
|
|
@@ -322,7 +324,7 @@ export interface OpenRouterModelManagerConfig {
|
|
|
322
324
|
baseUrl?: string;
|
|
323
325
|
fetch?: FetchImpl;
|
|
324
326
|
}
|
|
325
|
-
export declare function openrouterModelManagerOptions(config?: OpenRouterModelManagerConfig): ModelManagerOptions<
|
|
327
|
+
export declare function openrouterModelManagerOptions(config?: OpenRouterModelManagerConfig): ModelManagerOptions<Api>;
|
|
326
328
|
export interface ZenMuxModelManagerConfig {
|
|
327
329
|
apiKey?: string;
|
|
328
330
|
baseUrl?: string;
|
|
@@ -55,6 +55,16 @@ export interface DevinModelManagerConfig {
|
|
|
55
55
|
fetch?: DevinModelDiscoveryOptions["fetch"];
|
|
56
56
|
}
|
|
57
57
|
export declare function devinModelManagerOptions(config?: DevinModelManagerConfig): ModelManagerOptions<"devin-agent">;
|
|
58
|
+
export declare function localModelManagerOptions(): ModelManagerOptions<"local-inference">;
|
|
59
|
+
export declare function webModelManagerOptions(): ModelManagerOptions<"web-search">;
|
|
60
|
+
/** Credentials and endpoint overrides for the TypeSafe catalog manager. */
|
|
61
|
+
export interface TypeSafeModelManagerConfig {
|
|
62
|
+
apiKey?: string;
|
|
63
|
+
baseUrl?: string;
|
|
64
|
+
fetch?: FetchImpl;
|
|
65
|
+
}
|
|
66
|
+
/** Discover account-visible judge models while keeping the bundled offline seed. */
|
|
67
|
+
export declare function typesafeModelManagerOptions(config?: TypeSafeModelManagerConfig): ModelManagerOptions<"typesafe">;
|
|
58
68
|
export interface ZaiModelManagerConfig {
|
|
59
69
|
}
|
|
60
70
|
/** Creates model-manager options for Z.AI's mixed native and Anthropic transports. */
|
package/dist/types/types.d.ts
CHANGED
|
@@ -4,6 +4,19 @@ export type { FetchImpl } from "@oh-my-pi/pi-utils";
|
|
|
4
4
|
export type { KnownProvider } from "./provider-models/descriptors.js";
|
|
5
5
|
export type KnownApi = "openai-completions" | "openai-responses" | "openrouter" | "openai-codex-responses" | "azure-openai-responses" | "anthropic-messages" | "bedrock-converse-stream" | "google-generative-ai" | "google-gemini-cli" | "google-vertex" | "ollama-chat" | "cursor-agent" | "gitlab-duo-agent" | "devin-agent";
|
|
6
6
|
export type Api = KnownApi | (string & {});
|
|
7
|
+
/** Catalog kinds used to isolate role-specific runners from session chat models. */
|
|
8
|
+
export declare const MODEL_KINDS: readonly ["chat", "tiny", "image", "tts", "stt", "search", "judge", "embedding", "rerank", "video"];
|
|
9
|
+
/** Technical capability of a catalog model; absent model kinds mean chat. */
|
|
10
|
+
export type ModelKind = (typeof MODEL_KINDS)[number];
|
|
11
|
+
/** Kinds a provider maps to a runner transport through `kind-apis` in its KDL; discovery drops rows of these kinds when the provider declares no API. */
|
|
12
|
+
export declare const KIND_API_KINDS: readonly ["image", "tts", "stt", "embedding", "rerank", "video"];
|
|
13
|
+
export type KindApiKind = (typeof KIND_API_KINDS)[number];
|
|
14
|
+
/** Grounding transport available to chat models selected by the web role. */
|
|
15
|
+
export type WebSearchGrounding = "gemini" | "anthropic" | "codex" | "xai" | "openrouter";
|
|
16
|
+
/** Non-chat runner protocols accepted by catalog seeds, outside the chat dispatch union. */
|
|
17
|
+
export declare const RUNNER_APIS: readonly ["local-inference", "web-search", "typesafe", "openrouter-decisions", "openai-images", "openrouter-images", "xai-tts", "openai-speech", "openai-embeddings", "openrouter-rerank", "openrouter-video", "openai-transcriptions"];
|
|
18
|
+
/** Resolve a model's kind while preserving chat semantics for existing catalog rows. */
|
|
19
|
+
export declare function modelKind(model: Pick<Model, "kind">): ModelKind;
|
|
7
20
|
/** Canonical thinking transport used by a model. */
|
|
8
21
|
export type ThinkingControlMode = "effort" | "budget" | "google-level" | "anthropic-adaptive" | "anthropic-budget-effort";
|
|
9
22
|
/** Per-model thinking capabilities used to clamp and map user-facing effort levels. */
|
|
@@ -942,6 +955,10 @@ export interface ModelCost extends TokenCost {
|
|
|
942
955
|
export type ModelTokenizer = "claude-v3" | "claude-v47" | "claude-v5" | "claude-v5-sonnet" | "qwen3" | "deepseek-v3" | "kimi-k2" | "glm5";
|
|
943
956
|
export interface Model<TApi extends Api = Api> {
|
|
944
957
|
id: string;
|
|
958
|
+
/** Role-specific runner capability; omitted for ordinary chat models. */
|
|
959
|
+
kind?: ModelKind;
|
|
960
|
+
/** Grounding transport supported by this chat model. */
|
|
961
|
+
webSearch?: WebSearchGrounding;
|
|
945
962
|
/**
|
|
946
963
|
* Structured model identity resolved by the compat engine: vendor lineage
|
|
947
964
|
* class, product family, and revision. Baked into models.json rows and
|
|
@@ -984,6 +1001,12 @@ export interface Model<TApi extends Api = Api> {
|
|
|
984
1001
|
name: string;
|
|
985
1002
|
api: TApi;
|
|
986
1003
|
provider: Provider;
|
|
1004
|
+
/**
|
|
1005
|
+
* Discovery backend whose catalog policy applies when it differs from the
|
|
1006
|
+
* credential-bearing provider id. Persisted so cached and rebuilt custom
|
|
1007
|
+
* providers retain their transport backend's policy.
|
|
1008
|
+
*/
|
|
1009
|
+
providerType?: string;
|
|
987
1010
|
baseUrl: string;
|
|
988
1011
|
reasoning: boolean;
|
|
989
1012
|
/**
|
package/package.json
CHANGED
|
@@ -1,51 +1,25 @@
|
|
|
1
1
|
{
|
|
2
|
-
"type": "module",
|
|
3
2
|
"name": "@oh-my-pi/pi-catalog",
|
|
4
|
-
"version": "18.2.
|
|
3
|
+
"version": "18.2.8",
|
|
5
4
|
"description": "Model catalog for omp: bundled model database, provider discovery descriptors, model identity, classification, and equivalence",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"ai",
|
|
7
|
+
"catalog",
|
|
8
|
+
"discovery",
|
|
9
|
+
"llm",
|
|
10
|
+
"models"
|
|
11
|
+
],
|
|
6
12
|
"homepage": "https://omp.sh",
|
|
7
|
-
"
|
|
13
|
+
"bugs": {
|
|
14
|
+
"url": "https://github.com/can1357/oh-my-pi/issues"
|
|
15
|
+
},
|
|
8
16
|
"license": "MIT",
|
|
17
|
+
"author": "Stencil Labs, Inc.",
|
|
9
18
|
"repository": {
|
|
10
19
|
"type": "git",
|
|
11
20
|
"url": "git+https://github.com/can1357/oh-my-pi.git",
|
|
12
21
|
"directory": "packages/catalog"
|
|
13
22
|
},
|
|
14
|
-
"bugs": {
|
|
15
|
-
"url": "https://github.com/can1357/oh-my-pi/issues"
|
|
16
|
-
},
|
|
17
|
-
"keywords": [
|
|
18
|
-
"ai",
|
|
19
|
-
"llm",
|
|
20
|
-
"models",
|
|
21
|
-
"catalog",
|
|
22
|
-
"discovery"
|
|
23
|
-
],
|
|
24
|
-
"main": "./src/index.ts",
|
|
25
|
-
"types": "./dist/types/index.d.ts",
|
|
26
|
-
"scripts": {
|
|
27
|
-
"check": "oxlint . && oxfmt --check --no-error-on-unmatched-pattern 'src/**/*.{ts,tsx}' '{test,bench,examples,scripts}/**/*.ts' '*.ts' && bun run check:types",
|
|
28
|
-
"check:types": "tsgo -p tsconfig.json --noEmit",
|
|
29
|
-
"lint": "oxlint .",
|
|
30
|
-
"test": "bun test --parallel",
|
|
31
|
-
"fix": "oxlint --fix --fix-suggestions . && bun run fmt",
|
|
32
|
-
"fmt": "oxfmt --no-error-on-unmatched-pattern 'src/**/*.{ts,tsx}' '{test,bench,examples,scripts}/**/*.ts' '*.ts'",
|
|
33
|
-
"gen:models": "bun scripts/generate-models.ts",
|
|
34
|
-
"gen:compat": "bun scripts/compile-compat.ts",
|
|
35
|
-
"gen:proto": "bun scripts/generate-protocols.ts"
|
|
36
|
-
},
|
|
37
|
-
"dependencies": {
|
|
38
|
-
"@oh-my-pi/omptype": "18.2.6",
|
|
39
|
-
"@oh-my-pi/pi-utils": "18.2.6"
|
|
40
|
-
},
|
|
41
|
-
"devDependencies": {
|
|
42
|
-
"@bgotink/kdl": "0.4.0",
|
|
43
|
-
"@oh-my-pi/pi-ai": "18.2.6",
|
|
44
|
-
"@types/bun": "^1.3.14"
|
|
45
|
-
},
|
|
46
|
-
"engines": {
|
|
47
|
-
"bun": ">=1.3.14"
|
|
48
|
-
},
|
|
49
23
|
"files": [
|
|
50
24
|
"src",
|
|
51
25
|
"README.md",
|
|
@@ -54,6 +28,9 @@
|
|
|
54
28
|
"THIRD-PARTY-NOTICES.txt",
|
|
55
29
|
"dist/types"
|
|
56
30
|
],
|
|
31
|
+
"type": "module",
|
|
32
|
+
"main": "./src/index.ts",
|
|
33
|
+
"types": "./dist/types/index.d.ts",
|
|
57
34
|
"exports": {
|
|
58
35
|
".": {
|
|
59
36
|
"types": "./dist/types/index.d.ts",
|
|
@@ -100,5 +77,28 @@
|
|
|
100
77
|
"import": "./src/*.ts"
|
|
101
78
|
},
|
|
102
79
|
"./*.js": "./src/*.ts"
|
|
80
|
+
},
|
|
81
|
+
"scripts": {
|
|
82
|
+
"check": "oxlint . && oxfmt --check --no-error-on-unmatched-pattern 'src/**/*.{ts,tsx}' '{test,bench,examples,scripts}/**/*.ts' '*.ts' && bun run check:types",
|
|
83
|
+
"check:types": "tsgo -p tsconfig.json --noEmit",
|
|
84
|
+
"lint": "oxlint .",
|
|
85
|
+
"test": "bun test --parallel",
|
|
86
|
+
"fix": "oxlint --fix --fix-suggestions . && bun run fmt",
|
|
87
|
+
"fmt": "oxfmt --no-error-on-unmatched-pattern 'src/**/*.{ts,tsx}' '{test,bench,examples,scripts}/**/*.ts' '*.ts'",
|
|
88
|
+
"gen:models": "bun scripts/generate-models.ts",
|
|
89
|
+
"gen:compat": "bun scripts/compile-compat.ts",
|
|
90
|
+
"gen:proto": "bun scripts/generate-protocols.ts"
|
|
91
|
+
},
|
|
92
|
+
"dependencies": {
|
|
93
|
+
"@oh-my-pi/omptype": "18.2.8",
|
|
94
|
+
"@oh-my-pi/pi-utils": "18.2.8"
|
|
95
|
+
},
|
|
96
|
+
"devDependencies": {
|
|
97
|
+
"@bgotink/kdl": "0.4.0",
|
|
98
|
+
"@oh-my-pi/pi-ai": "18.2.8",
|
|
99
|
+
"@types/bun": "^1.3.14"
|
|
100
|
+
},
|
|
101
|
+
"engines": {
|
|
102
|
+
"bun": ">=1.3.14"
|
|
103
103
|
}
|
|
104
104
|
}
|