@autohq/cli 0.1.372 → 0.1.373
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/dist/agent-bridge.js +87 -3
- package/dist/index.js +88 -4
- package/package.json +1 -1
package/dist/agent-bridge.js
CHANGED
|
@@ -23492,7 +23492,7 @@ Object.assign(lookup, {
|
|
|
23492
23492
|
// package.json
|
|
23493
23493
|
var package_default = {
|
|
23494
23494
|
name: "@autohq/cli",
|
|
23495
|
-
version: "0.1.
|
|
23495
|
+
version: "0.1.373",
|
|
23496
23496
|
license: "SEE LICENSE IN README.md",
|
|
23497
23497
|
publishConfig: {
|
|
23498
23498
|
access: "public"
|
|
@@ -25412,10 +25412,15 @@ var AgentModelOpenRouterSchema = external_exports.object({
|
|
|
25412
25412
|
models: external_exports.array(external_exports.string().trim().min(1).regex(OPENROUTER_MODEL_SLUG_PATTERN)).min(1).max(3),
|
|
25413
25413
|
provider: AgentModelOpenRouterProviderPrefsSchema.optional()
|
|
25414
25414
|
}).strict();
|
|
25415
|
+
var AgentModelFallbackSchema = external_exports.object({
|
|
25416
|
+
provider: ModelApiTokenProviderSchema.optional(),
|
|
25417
|
+
id: external_exports.string().trim().min(1).max(256)
|
|
25418
|
+
}).strict();
|
|
25415
25419
|
var AgentModelSelectionSchema = external_exports.object({
|
|
25416
25420
|
provider: ModelApiTokenProviderSchema.optional(),
|
|
25417
25421
|
id: external_exports.string().trim().min(1).max(256),
|
|
25418
|
-
openrouter: AgentModelOpenRouterSchema.optional()
|
|
25422
|
+
openrouter: AgentModelOpenRouterSchema.optional(),
|
|
25423
|
+
fallbacks: external_exports.array(AgentModelFallbackSchema).min(1).max(2).optional()
|
|
25419
25424
|
}).strict();
|
|
25420
25425
|
var ResolvedAgentModelSelectionSchema = AgentModelSelectionSchema.extend({
|
|
25421
25426
|
provider: ModelApiTokenProviderSchema
|
|
@@ -25426,7 +25431,12 @@ var ModelRoutingOpenRouterSchema = external_exports.object({
|
|
|
25426
25431
|
}).strict();
|
|
25427
25432
|
var ModelRoutingConfigSchema = external_exports.object({
|
|
25428
25433
|
primaryModelId: external_exports.string().min(1),
|
|
25429
|
-
openrouter: ModelRoutingOpenRouterSchema.optional()
|
|
25434
|
+
openrouter: ModelRoutingOpenRouterSchema.optional(),
|
|
25435
|
+
// Capability 1 — the ordered same-provider fallback chain the gateway
|
|
25436
|
+
// rewrites `body.model` through when the primary exhausts the transient
|
|
25437
|
+
// retry loop. Mutually exclusive with `openrouter` by construction (the
|
|
25438
|
+
// authored fields are mutually exclusive at validation).
|
|
25439
|
+
fallbackModelIds: external_exports.array(external_exports.string().min(1)).min(1).max(2).optional()
|
|
25430
25440
|
}).strict();
|
|
25431
25441
|
var InvalidModelSelectionError = class extends Error {
|
|
25432
25442
|
constructor(message) {
|
|
@@ -25566,6 +25576,71 @@ function validateAgentModelOpenRouterForHarness(spec, context) {
|
|
|
25566
25576
|
seen.add(id);
|
|
25567
25577
|
}
|
|
25568
25578
|
}
|
|
25579
|
+
function validateAgentModelFallbacksForHarness(spec, context) {
|
|
25580
|
+
const fallbacks = spec.model?.fallbacks;
|
|
25581
|
+
if (!fallbacks || fallbacks.length === 0) {
|
|
25582
|
+
return;
|
|
25583
|
+
}
|
|
25584
|
+
if (spec.model?.openrouter) {
|
|
25585
|
+
context.addIssue({
|
|
25586
|
+
code: external_exports.ZodIssueCode.custom,
|
|
25587
|
+
path: ["model", "fallbacks"],
|
|
25588
|
+
message: "model.fallbacks and model.openrouter cannot be combined"
|
|
25589
|
+
});
|
|
25590
|
+
return;
|
|
25591
|
+
}
|
|
25592
|
+
const primary = spec.resolvedModel;
|
|
25593
|
+
if (!primary) {
|
|
25594
|
+
return;
|
|
25595
|
+
}
|
|
25596
|
+
const seenIds = /* @__PURE__ */ new Set([primary.id]);
|
|
25597
|
+
for (const [index, fallback] of fallbacks.entries()) {
|
|
25598
|
+
let resolved;
|
|
25599
|
+
try {
|
|
25600
|
+
resolved = resolveModelSelectionForHarness(spec.harness, {
|
|
25601
|
+
provider: fallback.provider ?? primary.provider,
|
|
25602
|
+
id: fallback.id
|
|
25603
|
+
});
|
|
25604
|
+
} catch (error51) {
|
|
25605
|
+
context.addIssue({
|
|
25606
|
+
code: external_exports.ZodIssueCode.custom,
|
|
25607
|
+
path: ["model", "fallbacks", index],
|
|
25608
|
+
message: error51 instanceof Error ? error51.message : String(error51)
|
|
25609
|
+
});
|
|
25610
|
+
continue;
|
|
25611
|
+
}
|
|
25612
|
+
if (resolved.provider !== primary.provider) {
|
|
25613
|
+
context.addIssue({
|
|
25614
|
+
code: external_exports.ZodIssueCode.custom,
|
|
25615
|
+
path: ["model", "fallbacks", index, "provider"],
|
|
25616
|
+
message: `model.fallbacks entries must resolve to the primary's provider (${primary.provider}); got ${resolved.provider}`
|
|
25617
|
+
});
|
|
25618
|
+
continue;
|
|
25619
|
+
}
|
|
25620
|
+
if (seenIds.has(resolved.id)) {
|
|
25621
|
+
context.addIssue({
|
|
25622
|
+
code: external_exports.ZodIssueCode.custom,
|
|
25623
|
+
path: ["model", "fallbacks", index, "id"],
|
|
25624
|
+
message: "model.fallbacks ids must be distinct and must not repeat the primary model id"
|
|
25625
|
+
});
|
|
25626
|
+
continue;
|
|
25627
|
+
}
|
|
25628
|
+
seenIds.add(resolved.id);
|
|
25629
|
+
try {
|
|
25630
|
+
validateReasoningEffortForHarness({
|
|
25631
|
+
harness: spec.harness,
|
|
25632
|
+
model: resolved,
|
|
25633
|
+
reasoningEffort: spec.reasoningEffort
|
|
25634
|
+
});
|
|
25635
|
+
} catch (error51) {
|
|
25636
|
+
context.addIssue({
|
|
25637
|
+
code: external_exports.ZodIssueCode.custom,
|
|
25638
|
+
path: ["model", "fallbacks", index],
|
|
25639
|
+
message: error51 instanceof Error ? error51.message : String(error51)
|
|
25640
|
+
});
|
|
25641
|
+
}
|
|
25642
|
+
}
|
|
25643
|
+
}
|
|
25569
25644
|
function validateAgentModelFieldsForHarness(spec, context) {
|
|
25570
25645
|
const harness = spec.harness;
|
|
25571
25646
|
if (harness !== "claude-code" && harness !== "codex") {
|
|
@@ -25600,6 +25675,15 @@ function validateAgentModelFieldsForHarness(spec, context) {
|
|
|
25600
25675
|
{ harness, model: spec.model, resolvedModel },
|
|
25601
25676
|
context
|
|
25602
25677
|
);
|
|
25678
|
+
validateAgentModelFallbacksForHarness(
|
|
25679
|
+
{
|
|
25680
|
+
harness,
|
|
25681
|
+
model: spec.model,
|
|
25682
|
+
reasoningEffort: spec.reasoningEffort,
|
|
25683
|
+
resolvedModel
|
|
25684
|
+
},
|
|
25685
|
+
context
|
|
25686
|
+
);
|
|
25603
25687
|
}
|
|
25604
25688
|
function validateModelProviderForHarness(harness, provider) {
|
|
25605
25689
|
const rules = modelRulesForHarness(harness);
|
package/dist/index.js
CHANGED
|
@@ -16805,6 +16805,71 @@ function validateAgentModelOpenRouterForHarness(spec, context) {
|
|
|
16805
16805
|
seen.add(id);
|
|
16806
16806
|
}
|
|
16807
16807
|
}
|
|
16808
|
+
function validateAgentModelFallbacksForHarness(spec, context) {
|
|
16809
|
+
const fallbacks = spec.model?.fallbacks;
|
|
16810
|
+
if (!fallbacks || fallbacks.length === 0) {
|
|
16811
|
+
return;
|
|
16812
|
+
}
|
|
16813
|
+
if (spec.model?.openrouter) {
|
|
16814
|
+
context.addIssue({
|
|
16815
|
+
code: external_exports.ZodIssueCode.custom,
|
|
16816
|
+
path: ["model", "fallbacks"],
|
|
16817
|
+
message: "model.fallbacks and model.openrouter cannot be combined"
|
|
16818
|
+
});
|
|
16819
|
+
return;
|
|
16820
|
+
}
|
|
16821
|
+
const primary = spec.resolvedModel;
|
|
16822
|
+
if (!primary) {
|
|
16823
|
+
return;
|
|
16824
|
+
}
|
|
16825
|
+
const seenIds = /* @__PURE__ */ new Set([primary.id]);
|
|
16826
|
+
for (const [index, fallback] of fallbacks.entries()) {
|
|
16827
|
+
let resolved;
|
|
16828
|
+
try {
|
|
16829
|
+
resolved = resolveModelSelectionForHarness(spec.harness, {
|
|
16830
|
+
provider: fallback.provider ?? primary.provider,
|
|
16831
|
+
id: fallback.id
|
|
16832
|
+
});
|
|
16833
|
+
} catch (error51) {
|
|
16834
|
+
context.addIssue({
|
|
16835
|
+
code: external_exports.ZodIssueCode.custom,
|
|
16836
|
+
path: ["model", "fallbacks", index],
|
|
16837
|
+
message: error51 instanceof Error ? error51.message : String(error51)
|
|
16838
|
+
});
|
|
16839
|
+
continue;
|
|
16840
|
+
}
|
|
16841
|
+
if (resolved.provider !== primary.provider) {
|
|
16842
|
+
context.addIssue({
|
|
16843
|
+
code: external_exports.ZodIssueCode.custom,
|
|
16844
|
+
path: ["model", "fallbacks", index, "provider"],
|
|
16845
|
+
message: `model.fallbacks entries must resolve to the primary's provider (${primary.provider}); got ${resolved.provider}`
|
|
16846
|
+
});
|
|
16847
|
+
continue;
|
|
16848
|
+
}
|
|
16849
|
+
if (seenIds.has(resolved.id)) {
|
|
16850
|
+
context.addIssue({
|
|
16851
|
+
code: external_exports.ZodIssueCode.custom,
|
|
16852
|
+
path: ["model", "fallbacks", index, "id"],
|
|
16853
|
+
message: "model.fallbacks ids must be distinct and must not repeat the primary model id"
|
|
16854
|
+
});
|
|
16855
|
+
continue;
|
|
16856
|
+
}
|
|
16857
|
+
seenIds.add(resolved.id);
|
|
16858
|
+
try {
|
|
16859
|
+
validateReasoningEffortForHarness({
|
|
16860
|
+
harness: spec.harness,
|
|
16861
|
+
model: resolved,
|
|
16862
|
+
reasoningEffort: spec.reasoningEffort
|
|
16863
|
+
});
|
|
16864
|
+
} catch (error51) {
|
|
16865
|
+
context.addIssue({
|
|
16866
|
+
code: external_exports.ZodIssueCode.custom,
|
|
16867
|
+
path: ["model", "fallbacks", index],
|
|
16868
|
+
message: error51 instanceof Error ? error51.message : String(error51)
|
|
16869
|
+
});
|
|
16870
|
+
}
|
|
16871
|
+
}
|
|
16872
|
+
}
|
|
16808
16873
|
function validateAgentModelFieldsForHarness(spec, context) {
|
|
16809
16874
|
const harness = spec.harness;
|
|
16810
16875
|
if (harness !== "claude-code" && harness !== "codex") {
|
|
@@ -16839,6 +16904,15 @@ function validateAgentModelFieldsForHarness(spec, context) {
|
|
|
16839
16904
|
{ harness, model: spec.model, resolvedModel },
|
|
16840
16905
|
context
|
|
16841
16906
|
);
|
|
16907
|
+
validateAgentModelFallbacksForHarness(
|
|
16908
|
+
{
|
|
16909
|
+
harness,
|
|
16910
|
+
model: spec.model,
|
|
16911
|
+
reasoningEffort: spec.reasoningEffort,
|
|
16912
|
+
resolvedModel
|
|
16913
|
+
},
|
|
16914
|
+
context
|
|
16915
|
+
);
|
|
16842
16916
|
}
|
|
16843
16917
|
function validateModelProviderForHarness(harness, provider) {
|
|
16844
16918
|
const rules = modelRulesForHarness(harness);
|
|
@@ -16867,7 +16941,7 @@ function validateModelIdForProvider(input) {
|
|
|
16867
16941
|
`${input.provider} model ids are not open for ${input.harness}`
|
|
16868
16942
|
);
|
|
16869
16943
|
}
|
|
16870
|
-
var MODEL_API_TOKEN_PROVIDERS, ModelApiTokenProviderSchema, CLAUDE_CODE_REASONING_EFFORTS, CODEX_REASONING_EFFORTS, ClaudeCodeReasoningEffortSchema, CodexReasoningEffortSchema, AgentReasoningEffortSchema, OPENROUTER_MODEL_SLUG_PATTERN, AgentModelOpenRouterProviderPrefsSchema, AgentModelOpenRouterSchema, AgentModelSelectionSchema, ResolvedAgentModelSelectionSchema, ModelRoutingOpenRouterSchema, ModelRoutingConfigSchema, InvalidModelSelectionError, HARNESS_MODEL_RULES;
|
|
16944
|
+
var MODEL_API_TOKEN_PROVIDERS, ModelApiTokenProviderSchema, CLAUDE_CODE_REASONING_EFFORTS, CODEX_REASONING_EFFORTS, ClaudeCodeReasoningEffortSchema, CodexReasoningEffortSchema, AgentReasoningEffortSchema, OPENROUTER_MODEL_SLUG_PATTERN, AgentModelOpenRouterProviderPrefsSchema, AgentModelOpenRouterSchema, AgentModelFallbackSchema, AgentModelSelectionSchema, ResolvedAgentModelSelectionSchema, ModelRoutingOpenRouterSchema, ModelRoutingConfigSchema, InvalidModelSelectionError, HARNESS_MODEL_RULES;
|
|
16871
16945
|
var init_model_selection = __esm({
|
|
16872
16946
|
"../../packages/schemas/src/model-selection.ts"() {
|
|
16873
16947
|
"use strict";
|
|
@@ -16918,10 +16992,15 @@ var init_model_selection = __esm({
|
|
|
16918
16992
|
models: external_exports.array(external_exports.string().trim().min(1).regex(OPENROUTER_MODEL_SLUG_PATTERN)).min(1).max(3),
|
|
16919
16993
|
provider: AgentModelOpenRouterProviderPrefsSchema.optional()
|
|
16920
16994
|
}).strict();
|
|
16995
|
+
AgentModelFallbackSchema = external_exports.object({
|
|
16996
|
+
provider: ModelApiTokenProviderSchema.optional(),
|
|
16997
|
+
id: external_exports.string().trim().min(1).max(256)
|
|
16998
|
+
}).strict();
|
|
16921
16999
|
AgentModelSelectionSchema = external_exports.object({
|
|
16922
17000
|
provider: ModelApiTokenProviderSchema.optional(),
|
|
16923
17001
|
id: external_exports.string().trim().min(1).max(256),
|
|
16924
|
-
openrouter: AgentModelOpenRouterSchema.optional()
|
|
17002
|
+
openrouter: AgentModelOpenRouterSchema.optional(),
|
|
17003
|
+
fallbacks: external_exports.array(AgentModelFallbackSchema).min(1).max(2).optional()
|
|
16925
17004
|
}).strict();
|
|
16926
17005
|
ResolvedAgentModelSelectionSchema = AgentModelSelectionSchema.extend({
|
|
16927
17006
|
provider: ModelApiTokenProviderSchema
|
|
@@ -16932,7 +17011,12 @@ var init_model_selection = __esm({
|
|
|
16932
17011
|
}).strict();
|
|
16933
17012
|
ModelRoutingConfigSchema = external_exports.object({
|
|
16934
17013
|
primaryModelId: external_exports.string().min(1),
|
|
16935
|
-
openrouter: ModelRoutingOpenRouterSchema.optional()
|
|
17014
|
+
openrouter: ModelRoutingOpenRouterSchema.optional(),
|
|
17015
|
+
// Capability 1 — the ordered same-provider fallback chain the gateway
|
|
17016
|
+
// rewrites `body.model` through when the primary exhausts the transient
|
|
17017
|
+
// retry loop. Mutually exclusive with `openrouter` by construction (the
|
|
17018
|
+
// authored fields are mutually exclusive at validation).
|
|
17019
|
+
fallbackModelIds: external_exports.array(external_exports.string().min(1)).min(1).max(2).optional()
|
|
16936
17020
|
}).strict();
|
|
16937
17021
|
InvalidModelSelectionError = class extends Error {
|
|
16938
17022
|
constructor(message) {
|
|
@@ -31744,7 +31828,7 @@ var init_package = __esm({
|
|
|
31744
31828
|
"package.json"() {
|
|
31745
31829
|
package_default = {
|
|
31746
31830
|
name: "@autohq/cli",
|
|
31747
|
-
version: "0.1.
|
|
31831
|
+
version: "0.1.373",
|
|
31748
31832
|
license: "SEE LICENSE IN README.md",
|
|
31749
31833
|
publishConfig: {
|
|
31750
31834
|
access: "public"
|