@oharness/engine 0.6.0 → 0.7.1

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.
Files changed (90) hide show
  1. package/dist/agent/agent.d.ts +83 -0
  2. package/dist/agent/agent.js +112 -1
  3. package/dist/agent/agent.js.map +1 -1
  4. package/dist/agent/memory-backup.d.ts +2 -0
  5. package/dist/agent/memory-backup.js +9 -1
  6. package/dist/agent/memory-backup.js.map +1 -1
  7. package/dist/agent/memory-limits.js +8 -1
  8. package/dist/agent/memory-limits.js.map +1 -1
  9. package/dist/agent/memory-usage.d.ts +1 -1
  10. package/dist/agent/memory-usage.js +2 -3
  11. package/dist/agent/memory-usage.js.map +1 -1
  12. package/dist/agent/memory.d.ts +3 -0
  13. package/dist/agent/memory.js +6 -18
  14. package/dist/agent/memory.js.map +1 -1
  15. package/dist/agent/session.d.ts +9 -0
  16. package/dist/agent/session.js +14 -2
  17. package/dist/agent/session.js.map +1 -1
  18. package/dist/agent/settings.js +3 -2
  19. package/dist/agent/settings.js.map +1 -1
  20. package/dist/agent/store.d.ts +45 -4
  21. package/dist/agent/store.js +198 -25
  22. package/dist/agent/store.js.map +1 -1
  23. package/dist/artifacts/files.d.ts +52 -0
  24. package/dist/artifacts/files.js +169 -0
  25. package/dist/artifacts/files.js.map +1 -0
  26. package/dist/auth/store.js +3 -2
  27. package/dist/auth/store.js.map +1 -1
  28. package/dist/config-files.js +3 -2
  29. package/dist/config-files.js.map +1 -1
  30. package/dist/config.d.ts +6 -1
  31. package/dist/config.js +10 -2
  32. package/dist/config.js.map +1 -1
  33. package/dist/harness.d.ts +62 -1
  34. package/dist/harness.js +174 -12
  35. package/dist/harness.js.map +1 -1
  36. package/dist/paths.d.ts +5 -0
  37. package/dist/paths.js +21 -3
  38. package/dist/paths.js.map +1 -1
  39. package/dist/providers/builtin.d.ts +2 -0
  40. package/dist/providers/builtin.js +38 -24
  41. package/dist/providers/builtin.js.map +1 -1
  42. package/dist/providers/catalog.d.ts +5 -0
  43. package/dist/providers/catalog.js +32 -1
  44. package/dist/providers/catalog.js.map +1 -1
  45. package/dist/providers/catalog.json +241 -123
  46. package/dist/providers/discovery.js +17 -0
  47. package/dist/providers/discovery.js.map +1 -1
  48. package/dist/providers/models-dev.d.ts +89 -0
  49. package/dist/providers/models-dev.js +160 -0
  50. package/dist/providers/models-dev.js.map +1 -0
  51. package/dist/providers/models-dev.json +821 -0
  52. package/dist/providers/registry.d.ts +12 -0
  53. package/dist/providers/registry.js +33 -1
  54. package/dist/providers/registry.js.map +1 -1
  55. package/dist/providers/types.d.ts +21 -0
  56. package/dist/providers/types.js +16 -0
  57. package/dist/providers/types.js.map +1 -1
  58. package/dist/runtime-plugins/builtin/memory-migrate.d.ts +5 -21
  59. package/dist/runtime-plugins/builtin/memory-migrate.js +5 -125
  60. package/dist/runtime-plugins/builtin/memory-migrate.js.map +1 -1
  61. package/dist/runtime-plugins/builtin/memory.d.ts +3 -0
  62. package/dist/runtime-plugins/builtin/memory.js +12 -10
  63. package/dist/runtime-plugins/builtin/memory.js.map +1 -1
  64. package/dist/schedule/clock.d.ts +76 -0
  65. package/dist/schedule/clock.js +147 -0
  66. package/dist/schedule/clock.js.map +1 -0
  67. package/dist/schedule/cron.d.ts +9 -0
  68. package/dist/schedule/cron.js +18 -0
  69. package/dist/schedule/cron.js.map +1 -1
  70. package/dist/schedule/lock.d.ts +38 -0
  71. package/dist/schedule/lock.js +100 -0
  72. package/dist/schedule/lock.js.map +1 -0
  73. package/dist/schedule/runner.d.ts +67 -0
  74. package/dist/schedule/runner.js +100 -0
  75. package/dist/schedule/runner.js.map +1 -0
  76. package/dist/schedule/scheduler.d.ts +56 -15
  77. package/dist/schedule/scheduler.js +80 -107
  78. package/dist/schedule/scheduler.js.map +1 -1
  79. package/dist/storage/kv.js +3 -2
  80. package/dist/storage/kv.js.map +1 -1
  81. package/dist/storage/project.d.ts +26 -0
  82. package/dist/storage/project.js +74 -15
  83. package/dist/storage/project.js.map +1 -1
  84. package/dist/tools/builtin/routine.d.ts +31 -0
  85. package/dist/tools/builtin/routine.js +70 -0
  86. package/dist/tools/builtin/routine.js.map +1 -0
  87. package/dist/util/fs.d.ts +6 -0
  88. package/dist/util/fs.js +22 -0
  89. package/dist/util/fs.js.map +1 -0
  90. package/package.json +3 -3
@@ -57,7 +57,8 @@
57
57
  ],
58
58
  "docsUrl": "https://console.anthropic.com/settings/keys",
59
59
  "popular": true,
60
- "description": "Claude models, direct API or ant CLI subscription"
60
+ "description": "Claude models, direct API or ant CLI subscription",
61
+ "modelsDev": "anthropic"
61
62
  },
62
63
  "ottoport": {
63
64
  "label": "OttoPort",
@@ -85,7 +86,8 @@
85
86
  "$note": "Responses is the API OpenAI's current models are documented against, and some (the pro tiers) are served nowhere else. A proxy that only speaks chat completions needs { \"providers\": { \"openai\": { \"protocol\": \"openai-chat\" } } }.",
86
87
  "docsUrl": "https://platform.openai.com/api-keys",
87
88
  "popular": true,
88
- "description": "GPT models, official API"
89
+ "description": "GPT models, official API",
90
+ "modelsDev": "openai"
89
91
  },
90
92
  "openai-codex": {
91
93
  "label": "ChatGPT (Codex)",
@@ -93,7 +95,11 @@
93
95
  "baseUrl": "https://chatgpt.com/backend-api",
94
96
  "envVars": [],
95
97
  "subscription": true,
96
- "excludeModels": ["gpt-5.3-codex-spark", "gpt-5.4", "gpt-5.4-mini"],
98
+ "excludeModels": [
99
+ "gpt-5.3-codex-spark",
100
+ "gpt-5.4",
101
+ "gpt-5.4-mini"
102
+ ],
97
103
  "$note": "The backend the Codex CLI talks to. It is a different wire format from the OpenAI Responses API and it takes no API key at all — only a ChatGPT OAuth token, which this build reads from the Codex CLI's own credential file rather than running a second login of its own. `excludeModels` lists the models this backend refuses to a ChatGPT account outright — verified against a live Plus account; a plan that does serve one can drop it from this list in a user catalog.",
98
104
  "docsUrl": "https://developers.openai.com/codex/cli/",
99
105
  "description": "GPT models on a ChatGPT Plus/Pro plan, via the Codex CLI login"
@@ -108,85 +114,8 @@
108
114
  ],
109
115
  "docsUrl": "https://aistudio.google.com/apikey",
110
116
  "popular": true,
111
- "description": "Gemini models, official API"
112
- },
113
- "moonshot": {
114
- "label": "Moonshot (Kimi)",
115
- "protocol": "openai-chat",
116
- "baseUrl": "https://api.moonshot.ai/v1",
117
- "envVars": [
118
- "MOONSHOT_API_KEY",
119
- "KIMI_API_KEY"
120
- ],
121
- "discovery": "openai",
122
- "piProvider": "moonshotai",
123
- "docsUrl": "https://platform.moonshot.ai/console/api-keys",
124
- "$note": "Mainland China accounts use https://api.moonshot.cn/v1 — override baseUrl.",
125
- "popular": true,
126
- "description": "Kimi official API, long context"
127
- },
128
- "deepseek": {
129
- "label": "DeepSeek",
130
- "protocol": "openai-chat",
131
- "baseUrl": "https://api.deepseek.com/v1",
132
- "envVars": [
133
- "DEEPSEEK_API_KEY"
134
- ],
135
- "discovery": "openai",
136
- "docsUrl": "https://platform.deepseek.com/api_keys",
137
- "popular": true,
138
- "description": "DeepSeek official API, low cost"
139
- },
140
- "zhipu": {
141
- "label": "Zhipu (GLM)",
142
- "protocol": "openai-chat",
143
- "baseUrl": "https://open.bigmodel.cn/api/paas/v4",
144
- "envVars": [
145
- "ZHIPU_API_KEY",
146
- "GLM_API_KEY"
147
- ],
148
- "discovery": "openai",
149
- "piProvider": "zai-coding-cn",
150
- "docsUrl": "https://open.bigmodel.cn/usercenter/apikeys",
151
- "$note": "pi-ai files the mainland GLM models under `zai-coding-cn`; the model ids are the same ones open.bigmodel.cn serves, so only the name needs reconciling — the endpoint above stays this entry's.",
152
- "popular": true,
153
- "description": "Zhipu GLM official API"
154
- },
155
- "zai": {
156
- "label": "Z.ai (GLM)",
157
- "protocol": "openai-chat",
158
- "baseUrl": "https://api.z.ai/api/paas/v4",
159
- "envVars": [
160
- "ZAI_API_KEY",
161
- "Z_AI_API_KEY"
162
- ],
163
- "discovery": "openai",
164
- "docsUrl": "https://z.ai/manage-apikey/apikey-list",
165
- "$note": "Zhipu's international arm, a separate host and a separate key from `zhipu`. A GLM Coding Plan subscription is served from https://api.z.ai/api/coding/paas/v4 — override baseUrl for it.",
166
- "popular": true,
167
- "description": "GLM models, international endpoint"
168
- },
169
- "siliconflow": {
170
- "label": "SiliconFlow",
171
- "protocol": "openai-chat",
172
- "baseUrl": "https://api.siliconflow.cn/v1",
173
- "envVars": [
174
- "SILICONFLOW_API_KEY"
175
- ],
176
- "discovery": "openai",
177
- "description": "SiliconFlow, aggregated open models"
178
- },
179
- "volcengine": {
180
- "label": "Volcengine (Doubao)",
181
- "protocol": "openai-chat",
182
- "baseUrl": "https://ark.cn-beijing.volces.com/api/v3",
183
- "envVars": [
184
- "ARK_API_KEY",
185
- "VOLCENGINE_API_KEY"
186
- ],
187
- "discovery": "openai",
188
- "popular": true,
189
- "description": "Volcengine Ark: Doubao and third-party models"
117
+ "description": "Gemini models, official API",
118
+ "modelsDev": "google"
190
119
  },
191
120
  "xai": {
192
121
  "label": "xAI",
@@ -197,7 +126,8 @@
197
126
  ],
198
127
  "discovery": "openai",
199
128
  "docsUrl": "https://console.x.ai",
200
- "description": "Grok models, official API"
129
+ "description": "Grok models, official API",
130
+ "modelsDev": "xai"
201
131
  },
202
132
  "mistral": {
203
133
  "label": "Mistral",
@@ -219,7 +149,8 @@
219
149
  ],
220
150
  "discovery": "openai",
221
151
  "docsUrl": "https://console.groq.com/keys",
222
- "description": "Very low latency inference"
152
+ "description": "Very low latency inference",
153
+ "modelsDev": "groq"
223
154
  },
224
155
  "together": {
225
156
  "label": "Together AI",
@@ -230,7 +161,8 @@
230
161
  ],
231
162
  "discovery": "openai",
232
163
  "docsUrl": "https://api.together.xyz/settings/api-keys",
233
- "description": "Hosted open-model inference"
164
+ "description": "Hosted open-model inference",
165
+ "modelsDev": "togetherai"
234
166
  },
235
167
  "cerebras": {
236
168
  "label": "Cerebras",
@@ -241,7 +173,8 @@
241
173
  ],
242
174
  "discovery": "openai",
243
175
  "docsUrl": "https://cloud.cerebras.ai",
244
- "description": "Wafer-scale hardware, very high throughput"
176
+ "description": "Wafer-scale hardware, very high throughput",
177
+ "modelsDev": "cerebras"
245
178
  },
246
179
  "fireworks": {
247
180
  "label": "Fireworks",
@@ -252,7 +185,8 @@
252
185
  ],
253
186
  "discovery": "openai",
254
187
  "docsUrl": "https://fireworks.ai/api-keys",
255
- "description": "Fast open-model inference"
188
+ "description": "Fast open-model inference",
189
+ "modelsDev": "fireworks-ai"
256
190
  },
257
191
  "deepinfra": {
258
192
  "label": "DeepInfra",
@@ -262,33 +196,8 @@
262
196
  "DEEPINFRA_API_KEY"
263
197
  ],
264
198
  "discovery": "openai",
265
- "description": "Low-cost open-model inference"
266
- },
267
- "ollama": {
268
- "label": "Ollama",
269
- "protocol": "openai-chat",
270
- "baseUrl": "http://localhost:11434/v1",
271
- "envVars": [],
272
- "discovery": "openai",
273
- "includeUsage": false,
274
- "description": "Runs locally, no key needed"
275
- },
276
- "lmstudio": {
277
- "label": "LM Studio",
278
- "protocol": "openai-chat",
279
- "baseUrl": "http://localhost:1234/v1",
280
- "envVars": [],
281
- "discovery": "openai",
282
- "includeUsage": false,
283
- "description": "Runs locally, no key needed"
284
- },
285
- "vllm": {
286
- "label": "vLLM",
287
- "protocol": "openai-chat",
288
- "baseUrl": "http://localhost:8000/v1",
289
- "envVars": [],
290
- "discovery": "openai",
291
- "description": "Your own vLLM server"
199
+ "description": "Low-cost open-model inference",
200
+ "modelsDev": "deepinfra"
292
201
  },
293
202
  "perplexity": {
294
203
  "label": "Perplexity",
@@ -299,7 +208,8 @@
299
208
  ],
300
209
  "discovery": "openai",
301
210
  "docsUrl": "https://www.perplexity.ai/settings/api",
302
- "description": "Models with live web search"
211
+ "description": "Models with live web search",
212
+ "modelsDev": "perplexity"
303
213
  },
304
214
  "nvidia": {
305
215
  "label": "NVIDIA NIM",
@@ -310,7 +220,8 @@
310
220
  ],
311
221
  "discovery": "openai",
312
222
  "docsUrl": "https://build.nvidia.com/",
313
- "description": "NVIDIA NIM hosted inference"
223
+ "description": "NVIDIA NIM hosted inference",
224
+ "modelsDev": "nvidia"
314
225
  },
315
226
  "novita": {
316
227
  "label": "Novita",
@@ -321,7 +232,8 @@
321
232
  ],
322
233
  "discovery": "openai",
323
234
  "docsUrl": "https://novita.ai/settings/key-management",
324
- "description": "Open-model inference platform"
235
+ "description": "Open-model inference platform",
236
+ "modelsDev": "novita-ai"
325
237
  },
326
238
  "hyperbolic": {
327
239
  "label": "Hyperbolic",
@@ -334,16 +246,202 @@
334
246
  "docsUrl": "https://app.hyperbolic.xyz/settings",
335
247
  "description": "Low-cost open-model inference"
336
248
  },
337
- "minimax": {
338
- "label": "MiniMax",
249
+ "huggingface": {
250
+ "label": "Hugging Face",
339
251
  "protocol": "openai-chat",
340
- "baseUrl": "https://api.minimax.chat/v1",
252
+ "baseUrl": "https://router.huggingface.co/v1",
341
253
  "envVars": [
342
- "MINIMAX_API_KEY"
254
+ "HF_TOKEN"
343
255
  ],
344
256
  "discovery": "openai",
345
- "docsUrl": "https://platform.minimaxi.com/user-center/basic-information/interface-key",
346
- "description": "MiniMax official API"
257
+ "modelsDev": "huggingface",
258
+ "docsUrl": "https://huggingface.co/settings/tokens",
259
+ "description": "Open models through Hugging Face Inference Providers"
260
+ },
261
+ "baseten": {
262
+ "label": "Baseten",
263
+ "protocol": "openai-chat",
264
+ "baseUrl": "https://inference.baseten.co/v1",
265
+ "envVars": [
266
+ "BASETEN_API_KEY"
267
+ ],
268
+ "discovery": "openai",
269
+ "modelsDev": "baseten",
270
+ "docsUrl": "https://app.baseten.co/settings/api_keys",
271
+ "description": "Open models on Baseten Model APIs"
272
+ },
273
+ "nebius": {
274
+ "label": "Nebius Token Factory",
275
+ "protocol": "openai-chat",
276
+ "baseUrl": "https://api.tokenfactory.nebius.com/v1",
277
+ "envVars": [
278
+ "NEBIUS_API_KEY"
279
+ ],
280
+ "discovery": "openai",
281
+ "modelsDev": "nebius",
282
+ "docsUrl": "https://tokenfactory.nebius.com/",
283
+ "description": "Open models on Nebius"
284
+ },
285
+ "llama": {
286
+ "label": "Llama API (Meta)",
287
+ "protocol": "openai-chat",
288
+ "baseUrl": "https://api.llama.com/compat/v1",
289
+ "envVars": [
290
+ "LLAMA_API_KEY"
291
+ ],
292
+ "modelsDev": "llama",
293
+ "docsUrl": "https://llama.developer.meta.com/",
294
+ "description": "Meta's official Llama API"
295
+ },
296
+ "deepseek": {
297
+ "label": "DeepSeek",
298
+ "protocol": "openai-chat",
299
+ "baseUrl": "https://api.deepseek.com/v1",
300
+ "envVars": [
301
+ "DEEPSEEK_API_KEY"
302
+ ],
303
+ "discovery": "openai",
304
+ "docsUrl": "https://platform.deepseek.com/api_keys",
305
+ "popular": true,
306
+ "description": "DeepSeek official API, low cost",
307
+ "modelsDev": "deepseek"
308
+ },
309
+ "qwen": {
310
+ "label": "Qwen (Alibaba Cloud)",
311
+ "protocol": "openai-chat",
312
+ "baseUrl": "https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
313
+ "envVars": [
314
+ "DASHSCOPE_API_KEY"
315
+ ],
316
+ "discovery": "openai",
317
+ "modelsDev": "alibaba",
318
+ "docsUrl": "https://modelstudio.console.alibabacloud.com/?tab=model#/api-key",
319
+ "$note": "Alibaba Cloud International. Only the international endpoint is listed; a mainland account can point this entry at https://dashscope.aliyuncs.com/compatible-mode/v1 in a user catalog.",
320
+ "description": "Qwen official API (Alibaba Cloud Model Studio, international)",
321
+ "popular": true
322
+ },
323
+ "qwen-coding-plan": {
324
+ "label": "Alibaba Coding Plan",
325
+ "protocol": "openai-chat",
326
+ "baseUrl": "https://coding-intl.dashscope.aliyuncs.com/v1",
327
+ "envVars": [
328
+ "ALIBABA_CODING_PLAN_API_KEY"
329
+ ],
330
+ "modelsDev": "alibaba-coding-plan",
331
+ "subscription": true,
332
+ "docsUrl": "https://www.alibabacloud.com/help/en/model-studio/coding-plan",
333
+ "$note": "A plan endpoint: its own env var, because a plan key sent to the pay-as-you-go host (or the reverse) is refused or billed per token.",
334
+ "description": "Qwen and partner models on an Alibaba Cloud Coding Plan"
335
+ },
336
+ "moonshot": {
337
+ "label": "Moonshot (Kimi)",
338
+ "protocol": "openai-chat",
339
+ "baseUrl": "https://api.moonshot.ai/v1",
340
+ "envVars": [
341
+ "MOONSHOT_API_KEY",
342
+ "KIMI_API_KEY"
343
+ ],
344
+ "discovery": "openai",
345
+ "piProvider": "moonshotai",
346
+ "docsUrl": "https://platform.moonshot.ai/console/api-keys",
347
+ "$note": "The international platform. Mainland accounts use https://api.moonshot.cn/v1 — override baseUrl in a user catalog. A Kimi Code plan is a separate endpoint; see `kimi-coding`.",
348
+ "popular": true,
349
+ "description": "Kimi official API, international",
350
+ "modelsDev": "moonshotai"
351
+ },
352
+ "kimi-coding": {
353
+ "label": "Kimi Code",
354
+ "protocol": "openai-chat",
355
+ "baseUrl": "https://api.kimi.ai/coding/v1",
356
+ "envVars": [
357
+ "KIMI_CODING_API_KEY"
358
+ ],
359
+ "modelsDev": "kimi-code-plan-global",
360
+ "subscription": true,
361
+ "docsUrl": "https://www.kimi.ai/code",
362
+ "$note": "The international Kimi Code endpoint (kimi.ai), over the OpenAI-compatible form models.dev records. A plan endpoint: its own env var, because a plan key sent to the pay-as-you-go host (or the reverse) is refused or billed per token.",
363
+ "description": "Kimi models on a Kimi Code subscription"
364
+ },
365
+ "zai": {
366
+ "label": "Z.ai (GLM)",
367
+ "protocol": "openai-chat",
368
+ "baseUrl": "https://api.z.ai/api/paas/v4",
369
+ "envVars": [
370
+ "ZAI_API_KEY",
371
+ "Z_AI_API_KEY"
372
+ ],
373
+ "discovery": "openai",
374
+ "docsUrl": "https://z.ai/manage-apikey/apikey-list",
375
+ "$note": "Zhipu's international arm, a separate host and a separate key from `zhipu`. A GLM Coding Plan is served from its own endpoint; see `zai-coding`.",
376
+ "popular": true,
377
+ "description": "GLM official API, international",
378
+ "modelsDev": "zai"
379
+ },
380
+ "zai-coding": {
381
+ "label": "Z.ai GLM Coding Plan",
382
+ "protocol": "openai-chat",
383
+ "baseUrl": "https://api.z.ai/api/coding/paas/v4",
384
+ "envVars": [
385
+ "ZAI_CODING_API_KEY"
386
+ ],
387
+ "piProvider": "zai",
388
+ "subscription": true,
389
+ "docsUrl": "https://z.ai/manage-apikey/apikey-list",
390
+ "$note": "The GLM Coding Plan endpoint. A plan key is not accepted on the pay-as-you-go host `zai` uses, and a pay-as-you-go key is not billed against a plan here, so the two are separate entries with separate env vars — sharing ZAI_API_KEY would send one kind of key to the other's endpoint. pi-ai's `zai` roster is this endpoint's, so it seeds both.",
391
+ "description": "GLM models on a GLM Coding Plan subscription",
392
+ "modelsDev": "zai-coding-plan"
393
+ },
394
+ "byteplus": {
395
+ "label": "BytePlus ModelArk",
396
+ "protocol": "openai-chat",
397
+ "baseUrl": "https://ark.ap-southeast.bytepluses.com/api/v3",
398
+ "envVars": [
399
+ "BYTEPLUS_API_KEY"
400
+ ],
401
+ "discovery": "openai",
402
+ "docsUrl": "https://docs.byteplus.com/en/docs/ModelArk/1399008",
403
+ "description": "ByteDance's Dola Seed models, international",
404
+ "$note": "BytePlus is ByteDance's international cloud; ModelArk serves the Dola Seed models (Doubao Seed on the mainland) at the pay-as-you-go endpoint. Its own key variable: a Volcengine Ark (mainland) key does not work here, and the Coding Plan's /api/coding/v3 host is a different product. Not in models.dev, whose `volcengine` entry is the mainland host with doubao- ids, so it is not linked; models come from discovery, with the 2.0 family seeded from ids confirmed in use. Seed 2.1 Pro is mainland-only as of September 2026 — BytePlus lists 2.1 Turbo, 2.0 Pro, Lite and Mini — and appears here through discovery when BytePlus ships it."
405
+ },
406
+ "siliconflow": {
407
+ "label": "SiliconFlow",
408
+ "protocol": "openai-chat",
409
+ "baseUrl": "https://api.siliconflow.com/v1",
410
+ "envVars": [
411
+ "SILICONFLOW_API_KEY"
412
+ ],
413
+ "discovery": "openai",
414
+ "modelsDev": "siliconflow",
415
+ "docsUrl": "https://cloud.siliconflow.com/account/ak",
416
+ "$note": "siliconflow.com. The mainland host is https://api.siliconflow.cn/v1, with a separate account; override baseUrl in a user catalog for it.",
417
+ "description": "Open models, international"
418
+ },
419
+ "ollama": {
420
+ "label": "Ollama",
421
+ "protocol": "openai-chat",
422
+ "baseUrl": "http://localhost:11434/v1",
423
+ "envVars": [],
424
+ "discovery": "openai",
425
+ "includeUsage": false,
426
+ "description": "Runs locally, no key needed"
427
+ },
428
+ "lmstudio": {
429
+ "label": "LM Studio",
430
+ "protocol": "openai-chat",
431
+ "baseUrl": "http://localhost:1234/v1",
432
+ "envVars": [],
433
+ "discovery": "openai",
434
+ "includeUsage": false,
435
+ "description": "Runs locally, no key needed",
436
+ "modelsDev": "lmstudio"
437
+ },
438
+ "vllm": {
439
+ "label": "vLLM",
440
+ "protocol": "openai-chat",
441
+ "baseUrl": "http://localhost:8000/v1",
442
+ "envVars": [],
443
+ "discovery": "openai",
444
+ "description": "Your own vLLM server"
347
445
  }
348
446
  },
349
447
  "models": [
@@ -503,6 +601,26 @@
503
601
  "supportsSampling": true,
504
602
  "costPer1MInput": 1,
505
603
  "costPer1MOutput": 5
604
+ },
605
+ {
606
+ "id": "dola-seed-2.0-pro",
607
+ "provider": "byteplus",
608
+ "model": "dola-seed-2.0-pro",
609
+ "displayName": "Dola Seed 2.0 Pro",
610
+ "contextWindow": 256000,
611
+ "maxOutputTokens": 128000,
612
+ "supportsTools": true,
613
+ "supportsImages": true
614
+ },
615
+ {
616
+ "id": "dola-seed-2.0-lite",
617
+ "provider": "byteplus",
618
+ "model": "dola-seed-2.0-lite",
619
+ "displayName": "Dola Seed 2.0 Lite",
620
+ "contextWindow": 256000,
621
+ "maxOutputTokens": 131072,
622
+ "supportsTools": true,
623
+ "supportsImages": true
506
624
  }
507
625
  ]
508
626
  }
@@ -75,6 +75,7 @@ function bareModel(providerId, entry) {
75
75
  provider: providerId,
76
76
  model: id,
77
77
  displayName: typeof displayName === "string" ? displayName : id,
78
+ ...releasedFrom(entry),
78
79
  contextWindow: asNumber(entry["context_window"] ?? entry["context_length"]) ?? 128_000,
79
80
  maxOutputTokens: asNumber(entry["max_output_tokens"]) ?? 8_192,
80
81
  supportsTools: true,
@@ -114,6 +115,7 @@ function openRouterModel(providerId, entry) {
114
115
  provider: providerId,
115
116
  model: id,
116
117
  displayName: typeof entry["name"] === "string" ? entry["name"] : id,
118
+ ...releasedFrom(entry),
117
119
  contextWindow: asNumber(topProvider?.["context_length"] ?? entry["context_length"]) ?? 128_000,
118
120
  maxOutputTokens: asNumber(topProvider?.["max_completion_tokens"]) ?? 8_192,
119
121
  supportsTools: params.includes("tools"),
@@ -130,6 +132,21 @@ function openRouterModel(providerId, entry) {
130
132
  costPer1MOutput: perMillion(pricing?.["completion"]),
131
133
  };
132
134
  }
135
+ /**
136
+ * The listing's `created`, in seconds as the OpenAI shape has it, as a
137
+ * release time. Only a plausible one: vendors that fill it with 0, with a
138
+ * constant from 2023 for every model, or with the time of the request would
139
+ * otherwise order a list by nothing. A value is kept if it falls between GPT's
140
+ * public release and tomorrow; the models.dev date, where there is one, wins
141
+ * over it when the list is ordered.
142
+ */
143
+ function releasedFrom(entry) {
144
+ const seconds = asNumber(entry["created"]);
145
+ if (seconds === undefined)
146
+ return {};
147
+ const ms = seconds * 1000;
148
+ return ms > Date.UTC(2018, 5, 1) && ms < Date.now() + 86_400_000 ? { releasedAt: ms } : {};
149
+ }
133
150
  function asRecord(value) {
134
151
  return value && typeof value === "object" ? value : undefined;
135
152
  }
@@ -1 +1 @@
1
- {"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../src/providers/discovery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../src/providers/discovery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,89 @@
1
+ import type { CatalogProvider } from "./catalog.ts";
2
+ import type { ModelSpec } from "./types.ts";
3
+ /**
4
+ * Models from models.dev, for the providers catalog.json has chosen.
5
+ *
6
+ * catalog.json decides which providers exist and how they are presented —
7
+ * that is curation, and it stays in this repository. What models each one
8
+ * serves, at what context length and price, is a fact about the vendor that
9
+ * changes weekly, and models.dev tracks it for two hundred providers. Its
10
+ * snapshot is written at build time by scripts/sync-models-dev.mjs, only for
11
+ * the ids catalog.json names under `modelsDev`, and shipped beside the
12
+ * catalog: nothing here fetches at runtime, so a change upstream reaches
13
+ * users only after someone has regenerated and reviewed it.
14
+ *
15
+ * It sits beside pi-ai's snapshot at the bottom of the stack. Where both know
16
+ * a model, pi-ai's entry wins — it carries the per-vendor thinking tiers the
17
+ * wire layer needs, which models.dev describes more loosely — and models.dev
18
+ * adds what pi-ai lacks, which for most of the providers added with it is
19
+ * everything. A live `/models` listing still replaces both.
20
+ */
21
+ export interface ModelsDevModel {
22
+ id: string;
23
+ name?: string;
24
+ attachment?: boolean;
25
+ reasoning?: boolean;
26
+ reasoning_options?: {
27
+ type: string;
28
+ values?: string[];
29
+ }[];
30
+ tool_call?: boolean;
31
+ temperature?: boolean;
32
+ status?: string;
33
+ modalities?: {
34
+ input?: string[];
35
+ output?: string[];
36
+ };
37
+ limit?: {
38
+ context?: number;
39
+ output?: number;
40
+ };
41
+ cost?: {
42
+ input?: number;
43
+ output?: number;
44
+ cache_read?: number;
45
+ cache_write?: number;
46
+ };
47
+ /** "YYYY-MM-DD", or "YYYY-MM" for a model announced without a day. */
48
+ release_date?: string;
49
+ }
50
+ export interface ModelsDevProvider {
51
+ name?: string;
52
+ api?: string;
53
+ models: Record<string, ModelsDevModel>;
54
+ }
55
+ export interface ModelsDevSnapshot {
56
+ fetchedAt?: string;
57
+ providers: Record<string, ModelsDevProvider>;
58
+ }
59
+ /** The bundled snapshot, or an empty one: it is a convenience, never a requirement. */
60
+ export declare function loadModelsDev(): Promise<ModelsDevSnapshot>;
61
+ /**
62
+ * Release dates by model id, across every provider in the snapshot.
63
+ *
64
+ * For ordering a list in which a model arrived with no date of its own, or a
65
+ * doubtful one: a gateway's `deepseek-v4-flash` is DeepSeek's model, and
66
+ * OpenRouter's `anthropic/claude-opus-5` is Anthropic's. Looked up by the
67
+ * whole id and by the part after the last slash, lowercased; where providers
68
+ * disagree about the same id the earliest date is kept, since a reseller
69
+ * listing a model later does not make it newer.
70
+ */
71
+ export declare function releaseDates(snapshot: ModelsDevSnapshot): Map<string, number>;
72
+ /**
73
+ * The date for a wire id from `releaseDates`: the earlier of the whole id's
74
+ * and its last part's, so a reseller's "vendor/model" entry cannot postdate
75
+ * the vendor's own "model".
76
+ */
77
+ export declare function releaseDateOf(dates: Map<string, number>, wireId: string): number | undefined;
78
+ /**
79
+ * Whether a models.dev entry belongs in a harness picker at all: something
80
+ * that answers in text, can call tools, and is not on its way out.
81
+ */
82
+ export declare function isUsableModel(model: ModelsDevModel): boolean;
83
+ export declare function specFromModelsDev(entry: CatalogProvider, model: ModelsDevModel): ModelSpec;
84
+ /**
85
+ * Specs for every catalog provider that names a models.dev id, skipping the
86
+ * models already `taken` — by the catalog files and by pi-ai's seed, both of
87
+ * which rank above this.
88
+ */
89
+ export declare function modelsDevSeeds(providers: Record<string, CatalogProvider>, snapshot: ModelsDevSnapshot, taken: Set<string>, listed?: ReadonlySet<string>): ModelSpec[];