@standardagents/skill 0.32.0 → 0.33.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@standardagents/skill",
3
- "version": "0.32.0",
3
+ "version": "0.33.1",
4
4
  "private": false,
5
5
  "publishConfig": {
6
6
  "access": "public",
@@ -431,14 +431,31 @@ If you have multiple configured providers, pass `--provider=<name>` explicitly.
431
431
 
432
432
  ### Fallback strategy
433
433
 
434
- Define more than one model per category, on different providers. The model `name` should describe the *use case*, not the provider, so a fallback can substitute transparently:
434
+ **Every model definition should declare `fallbacks`.** The runtime tries the primary (with retries), then each fallback in order — this is what keeps an agent alive through a provider outage, so a model without fallbacks is a single point of failure.
435
435
 
436
- ```
437
- agents/models/extra_reasoning.ts → primary (provider A)
438
- agents/models/extra_reasoning_fallback.ts → secondary (provider B)
436
+ Two rules for choosing the fallback:
437
+
438
+ 1. **Different provider.** The dominant failure mode is a provider-wide outage or rate-limit event, so a fallback at the same provider usually fails with the primary. Route the fallback through a different provider (or a different aggregator path).
439
+ 2. **Equal or smarter, never cheaper.** Fallback traffic is rare — it only flows when the primary is already failing — so its cost is negligible. Pick a model at least as capable as the primary whenever one exists at another provider; degrading quality mid-conversation during an outage is far worse than paying a little more for the handful of requests that fall through.
440
+
441
+ ```ts
442
+ // agents/models/extra_reasoning.ts — primary (provider A)
443
+ export default defineModel({
444
+ name: 'extra_reasoning',
445
+ provider: providerA,
446
+ model: '<primary model id>',
447
+ fallbacks: ['extra_reasoning_fallback'],
448
+ });
449
+
450
+ // agents/models/extra_reasoning_fallback.ts — equal-or-smarter model (provider B)
451
+ export default defineModel({
452
+ name: 'extra_reasoning_fallback',
453
+ provider: providerB,
454
+ model: '<fallback model id>',
455
+ });
439
456
  ```
440
457
 
441
- Prompts and agents reference `extra_reasoning`; if the primary provider is down, the fallback is one rename away.
458
+ The model `name` should describe the *use case*, not the provider (`extra_reasoning`, not `provider_a_thinker`), so prompts and agents never change when the models behind a name are swapped. Confirm both model ids through the Model selection workflow above — the fallback is still a model string, and the no-invented-model-strings rule applies to it too.
442
459
 
443
460
  For the authoritative list of which models currently fill each category, see `agents/models/AGENTS.md` in your project (created by `agents scaffold`). Do not embed the list here — it drifts.
444
461