@autohq/cli 0.1.357 → 0.1.358

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.
@@ -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.357",
23495
+ version: "0.1.358",
23496
23496
  license: "SEE LICENSE IN README.md",
23497
23497
  publishConfig: {
23498
23498
  access: "public"
@@ -25385,13 +25385,35 @@ var AgentReasoningEffortSchema = external_exports.enum([
25385
25385
  "max"
25386
25386
  ]);
25387
25387
  var OPENROUTER_MODEL_SLUG_PATTERN = /^[A-Za-z0-9][A-Za-z0-9_.-]*(?:\/[A-Za-z0-9][A-Za-z0-9_.:-]*)+$/;
25388
+ var AgentModelOpenRouterProviderPrefsSchema = external_exports.object({
25389
+ allowFallbacks: external_exports.boolean().optional(),
25390
+ order: external_exports.array(external_exports.string().trim().min(1)).min(1).optional(),
25391
+ sort: external_exports.enum(["price", "throughput", "latency"]).optional(),
25392
+ only: external_exports.array(external_exports.string().trim().min(1)).min(1).optional(),
25393
+ ignore: external_exports.array(external_exports.string().trim().min(1)).min(1).optional()
25394
+ }).strict();
25395
+ var AgentModelOpenRouterSchema = external_exports.object({
25396
+ // Fallback chain; the primary id is implicit and prepended at the gateway,
25397
+ // so each entry must be distinct and exclude the primary.
25398
+ models: external_exports.array(external_exports.string().trim().min(1).regex(OPENROUTER_MODEL_SLUG_PATTERN)).min(1).max(3),
25399
+ provider: AgentModelOpenRouterProviderPrefsSchema.optional()
25400
+ }).strict();
25388
25401
  var AgentModelSelectionSchema = external_exports.object({
25389
25402
  provider: ModelApiTokenProviderSchema.optional(),
25390
- id: external_exports.string().trim().min(1).max(256)
25403
+ id: external_exports.string().trim().min(1).max(256),
25404
+ openrouter: AgentModelOpenRouterSchema.optional()
25391
25405
  }).strict();
25392
25406
  var ResolvedAgentModelSelectionSchema = AgentModelSelectionSchema.extend({
25393
25407
  provider: ModelApiTokenProviderSchema
25394
25408
  });
25409
+ var ModelRoutingOpenRouterSchema = external_exports.object({
25410
+ models: external_exports.array(external_exports.string().min(1)).min(1).max(3),
25411
+ provider: AgentModelOpenRouterProviderPrefsSchema.optional()
25412
+ }).strict();
25413
+ var ModelRoutingConfigSchema = external_exports.object({
25414
+ primaryModelId: external_exports.string().min(1),
25415
+ openrouter: ModelRoutingOpenRouterSchema.optional()
25416
+ }).strict();
25395
25417
  var InvalidModelSelectionError = class extends Error {
25396
25418
  constructor(message) {
25397
25419
  super(message);
@@ -25495,6 +25517,41 @@ function validateReasoningEffortForHarness(input) {
25495
25517
  );
25496
25518
  }
25497
25519
  }
25520
+ function validateAgentModelOpenRouterForHarness(spec, context) {
25521
+ const openrouter = spec.model?.openrouter;
25522
+ if (!openrouter) {
25523
+ return;
25524
+ }
25525
+ if (spec.resolvedModel?.provider !== "openrouter") {
25526
+ context.addIssue({
25527
+ code: external_exports.ZodIssueCode.custom,
25528
+ path: ["model", "openrouter"],
25529
+ message: `model.openrouter is only valid when the resolved provider is openrouter (got ${spec.resolvedModel?.provider ?? "none"})`
25530
+ });
25531
+ return;
25532
+ }
25533
+ const primaryId = spec.resolvedModel.id;
25534
+ const seen = /* @__PURE__ */ new Set();
25535
+ for (const [index, id] of openrouter.models.entries()) {
25536
+ if (id === primaryId) {
25537
+ context.addIssue({
25538
+ code: external_exports.ZodIssueCode.custom,
25539
+ path: ["model", "openrouter", "models", index],
25540
+ message: "model.openrouter.models must not include the primary model id (it is prepended automatically)"
25541
+ });
25542
+ return;
25543
+ }
25544
+ if (seen.has(id)) {
25545
+ context.addIssue({
25546
+ code: external_exports.ZodIssueCode.custom,
25547
+ path: ["model", "openrouter", "models", index],
25548
+ message: "model.openrouter.models must not contain duplicate entries"
25549
+ });
25550
+ return;
25551
+ }
25552
+ seen.add(id);
25553
+ }
25554
+ }
25498
25555
  function validateAgentModelFieldsForHarness(spec, context) {
25499
25556
  const harness = spec.harness;
25500
25557
  if (harness !== "claude-code" && harness !== "codex") {
@@ -25525,6 +25582,10 @@ function validateAgentModelFieldsForHarness(spec, context) {
25525
25582
  message: error51 instanceof Error ? error51.message : String(error51)
25526
25583
  });
25527
25584
  }
25585
+ validateAgentModelOpenRouterForHarness(
25586
+ { harness, model: spec.model, resolvedModel },
25587
+ context
25588
+ );
25528
25589
  }
25529
25590
  function validateModelProviderForHarness(harness, provider) {
25530
25591
  const rules = modelRulesForHarness(harness);
package/dist/index.js CHANGED
@@ -16756,6 +16756,41 @@ function validateReasoningEffortForHarness(input) {
16756
16756
  );
16757
16757
  }
16758
16758
  }
16759
+ function validateAgentModelOpenRouterForHarness(spec, context) {
16760
+ const openrouter = spec.model?.openrouter;
16761
+ if (!openrouter) {
16762
+ return;
16763
+ }
16764
+ if (spec.resolvedModel?.provider !== "openrouter") {
16765
+ context.addIssue({
16766
+ code: external_exports.ZodIssueCode.custom,
16767
+ path: ["model", "openrouter"],
16768
+ message: `model.openrouter is only valid when the resolved provider is openrouter (got ${spec.resolvedModel?.provider ?? "none"})`
16769
+ });
16770
+ return;
16771
+ }
16772
+ const primaryId = spec.resolvedModel.id;
16773
+ const seen = /* @__PURE__ */ new Set();
16774
+ for (const [index, id] of openrouter.models.entries()) {
16775
+ if (id === primaryId) {
16776
+ context.addIssue({
16777
+ code: external_exports.ZodIssueCode.custom,
16778
+ path: ["model", "openrouter", "models", index],
16779
+ message: "model.openrouter.models must not include the primary model id (it is prepended automatically)"
16780
+ });
16781
+ return;
16782
+ }
16783
+ if (seen.has(id)) {
16784
+ context.addIssue({
16785
+ code: external_exports.ZodIssueCode.custom,
16786
+ path: ["model", "openrouter", "models", index],
16787
+ message: "model.openrouter.models must not contain duplicate entries"
16788
+ });
16789
+ return;
16790
+ }
16791
+ seen.add(id);
16792
+ }
16793
+ }
16759
16794
  function validateAgentModelFieldsForHarness(spec, context) {
16760
16795
  const harness = spec.harness;
16761
16796
  if (harness !== "claude-code" && harness !== "codex") {
@@ -16786,6 +16821,10 @@ function validateAgentModelFieldsForHarness(spec, context) {
16786
16821
  message: error51 instanceof Error ? error51.message : String(error51)
16787
16822
  });
16788
16823
  }
16824
+ validateAgentModelOpenRouterForHarness(
16825
+ { harness, model: spec.model, resolvedModel },
16826
+ context
16827
+ );
16789
16828
  }
16790
16829
  function validateModelProviderForHarness(harness, provider) {
16791
16830
  const rules = modelRulesForHarness(harness);
@@ -16814,7 +16853,7 @@ function validateModelIdForProvider(input) {
16814
16853
  `${input.provider} model ids are not open for ${input.harness}`
16815
16854
  );
16816
16855
  }
16817
- var MODEL_API_TOKEN_PROVIDERS, ModelApiTokenProviderSchema, CLAUDE_CODE_REASONING_EFFORTS, CODEX_REASONING_EFFORTS, ClaudeCodeReasoningEffortSchema, CodexReasoningEffortSchema, AgentReasoningEffortSchema, OPENROUTER_MODEL_SLUG_PATTERN, AgentModelSelectionSchema, ResolvedAgentModelSelectionSchema, InvalidModelSelectionError, HARNESS_MODEL_RULES;
16856
+ 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;
16818
16857
  var init_model_selection = __esm({
16819
16858
  "../../packages/schemas/src/model-selection.ts"() {
16820
16859
  "use strict";
@@ -16852,13 +16891,35 @@ var init_model_selection = __esm({
16852
16891
  "max"
16853
16892
  ]);
16854
16893
  OPENROUTER_MODEL_SLUG_PATTERN = /^[A-Za-z0-9][A-Za-z0-9_.-]*(?:\/[A-Za-z0-9][A-Za-z0-9_.:-]*)+$/;
16894
+ AgentModelOpenRouterProviderPrefsSchema = external_exports.object({
16895
+ allowFallbacks: external_exports.boolean().optional(),
16896
+ order: external_exports.array(external_exports.string().trim().min(1)).min(1).optional(),
16897
+ sort: external_exports.enum(["price", "throughput", "latency"]).optional(),
16898
+ only: external_exports.array(external_exports.string().trim().min(1)).min(1).optional(),
16899
+ ignore: external_exports.array(external_exports.string().trim().min(1)).min(1).optional()
16900
+ }).strict();
16901
+ AgentModelOpenRouterSchema = external_exports.object({
16902
+ // Fallback chain; the primary id is implicit and prepended at the gateway,
16903
+ // so each entry must be distinct and exclude the primary.
16904
+ models: external_exports.array(external_exports.string().trim().min(1).regex(OPENROUTER_MODEL_SLUG_PATTERN)).min(1).max(3),
16905
+ provider: AgentModelOpenRouterProviderPrefsSchema.optional()
16906
+ }).strict();
16855
16907
  AgentModelSelectionSchema = external_exports.object({
16856
16908
  provider: ModelApiTokenProviderSchema.optional(),
16857
- id: external_exports.string().trim().min(1).max(256)
16909
+ id: external_exports.string().trim().min(1).max(256),
16910
+ openrouter: AgentModelOpenRouterSchema.optional()
16858
16911
  }).strict();
16859
16912
  ResolvedAgentModelSelectionSchema = AgentModelSelectionSchema.extend({
16860
16913
  provider: ModelApiTokenProviderSchema
16861
16914
  });
16915
+ ModelRoutingOpenRouterSchema = external_exports.object({
16916
+ models: external_exports.array(external_exports.string().min(1)).min(1).max(3),
16917
+ provider: AgentModelOpenRouterProviderPrefsSchema.optional()
16918
+ }).strict();
16919
+ ModelRoutingConfigSchema = external_exports.object({
16920
+ primaryModelId: external_exports.string().min(1),
16921
+ openrouter: ModelRoutingOpenRouterSchema.optional()
16922
+ }).strict();
16862
16923
  InvalidModelSelectionError = class extends Error {
16863
16924
  constructor(message) {
16864
16925
  super(message);
@@ -31068,7 +31129,7 @@ var init_package = __esm({
31068
31129
  "package.json"() {
31069
31130
  package_default = {
31070
31131
  name: "@autohq/cli",
31071
- version: "0.1.357",
31132
+ version: "0.1.358",
31072
31133
  license: "SEE LICENSE IN README.md",
31073
31134
  publishConfig: {
31074
31135
  access: "public"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@autohq/cli",
3
- "version": "0.1.357",
3
+ "version": "0.1.358",
4
4
  "license": "SEE LICENSE IN README.md",
5
5
  "publishConfig": {
6
6
  "access": "public"