@sireai/optimus 0.1.31 → 0.1.34

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.
@@ -73,6 +73,7 @@ function renderSetupResult(result) {
73
73
  const envLabel = result.codexAuth.envName ?? "unknown";
74
74
  lines.push(`Codex Auth: ${result.codexAuth.mode} | ${result.codexAuth.configured ? `${envLabel} configured` : `${envLabel} missing`}${providerLabel}`);
75
75
  }
76
+ lines.push(`Codex Model: ${result.codexAuth.model ?? "missing"}`);
76
77
  lines.push("");
77
78
  lines.push("Next");
78
79
  lines.push("- optimus start");
@@ -1167,7 +1168,10 @@ async function promptSetupAnswers(defaults) {
1167
1168
  let codexProviderDisplayName;
1168
1169
  let codexProviderBaseUrl;
1169
1170
  let codexProviderApiKeyEnvName;
1171
+ let codexModel;
1170
1172
  if (codexAuthMode === "openai_api_key") {
1173
+ printSetupHint("Provider model: use a model name supported by the current provider. Examples: gpt-5.2-codex, gpt-5.2, gpt-5-mini.");
1174
+ codexModel = (await ask(renderSetupPrompt("Required", "Provider model (examples: gpt-5.2-codex, gpt-5.2, gpt-5-mini)", defaults.codexModel ?? ""))).trim() || defaults.codexModel;
1171
1175
  printSetupHint("OpenAI API key: used only when you choose direct OpenAI API authentication.");
1172
1176
  codexApiKey = (await ask(renderSetupPrompt("Optional", "OpenAI API key for OPENAI_API_KEY", "leave blank to keep existing"))).trim() || undefined;
1173
1177
  }
@@ -1178,12 +1182,18 @@ async function promptSetupAnswers(defaults) {
1178
1182
  codexProviderDisplayName = (await ask(renderSetupPrompt("Required", "Provider display name", defaults.codexProviderDisplayName ?? ""))).trim() || defaults.codexProviderDisplayName;
1179
1183
  printSetupHint("Provider base URL: the model API endpoint root Optimus should call.");
1180
1184
  codexProviderBaseUrl = (await ask(renderSetupPrompt("Required", "Provider base URL", defaults.codexProviderBaseUrl ?? ""))).trim() || defaults.codexProviderBaseUrl;
1185
+ printSetupHint("Provider model: use a model name supported by the current provider. Examples: gpt-5.2-codex, gpt-5.2, gpt-5-mini.");
1186
+ codexModel = (await ask(renderSetupPrompt("Required", "Provider model (examples: gpt-5.2-codex, gpt-5.2, gpt-5-mini)", defaults.codexModel ?? ""))).trim() || defaults.codexModel;
1181
1187
  printSetupHint("Provider API key env name: the environment variable name Optimus will read at runtime.");
1182
1188
  codexProviderApiKeyEnvName = (await ask(renderSetupPrompt("Required", "Provider API key env name", defaults.codexProviderApiKeyEnvName ?? ""))).trim() || defaults.codexProviderApiKeyEnvName;
1183
1189
  const providerKeyLabel = codexProviderApiKeyEnvName || defaults.codexProviderApiKeyEnvName || "the configured provider env";
1184
1190
  printSetupHint(`Provider API key value: optional here; leave blank to keep the current ${providerKeyLabel} value.`);
1185
1191
  codexApiKey = (await ask(renderSetupPrompt("Optional", `Provider API key value for ${providerKeyLabel}`, "leave blank to keep existing"))).trim() || undefined;
1186
1192
  }
1193
+ else {
1194
+ printSetupHint("Provider model: use a model name supported by the current provider. Examples: gpt-5.2-codex, gpt-5.2, gpt-5-mini.");
1195
+ codexModel = (await ask(renderSetupPrompt("Required", "Provider model (examples: gpt-5.2-codex, gpt-5.2, gpt-5-mini)", defaults.codexModel ?? ""))).trim() || defaults.codexModel;
1196
+ }
1187
1197
  printSetupSection("Feishu", "Built-in Feishu app delivery is already available. Add a webhook only if group notifications should go to a chat first. Type \"\" to clear an existing optional value.");
1188
1198
  printSetupHint("Feishu webhook: optional; leave empty to use direct Feishu app delivery only.");
1189
1199
  const feishuWebhook = resolveOptionalTextAnswer(await ask(renderSetupPrompt("Optional", "Feishu webhook", defaults.feishuWebhook ? "configured" : "")), defaults.feishuWebhook ?? undefined);
@@ -1218,6 +1228,7 @@ async function promptSetupAnswers(defaults) {
1218
1228
  repoPath,
1219
1229
  repoAlias,
1220
1230
  codexAuthMode,
1231
+ ...(codexModel ? { codexModel } : {}),
1221
1232
  ...(codexApiKey ? { codexApiKey } : {}),
1222
1233
  ...(codexProviderId ? { codexProviderId } : {}),
1223
1234
  ...(codexProviderDisplayName ? { codexProviderDisplayName } : {}),
@@ -1253,6 +1264,7 @@ async function resolveDefaultSetupAnswers() {
1253
1264
  repoPath: "",
1254
1265
  repoAlias: "",
1255
1266
  codexAuthMode: defaults.codex.auth.mode,
1267
+ ...(defaults.codex.model?.trim() ? { codexModel: defaults.codex.model.trim() } : {}),
1256
1268
  enableJira: false,
1257
1269
  enableSentry: false
1258
1270
  };
@@ -1268,6 +1280,7 @@ async function resolveDefaultSetupAnswers() {
1268
1280
  repoPath: primaryRepository?.path ?? "",
1269
1281
  repoAlias: primaryRepository?.alias ?? "",
1270
1282
  codexAuthMode: config.codex.auth.mode,
1283
+ ...(config.codex.model?.trim() ? { codexModel: config.codex.model.trim() } : {}),
1271
1284
  ...(provider?.id ? { codexProviderId: provider.id } : {}),
1272
1285
  ...(provider?.displayName ? { codexProviderDisplayName: provider.displayName } : {}),
1273
1286
  ...(provider?.baseUrl ? { codexProviderBaseUrl: provider.baseUrl } : {}),
@@ -1340,6 +1353,9 @@ function validateSetupAnswers(answers) {
1340
1353
  if (answers.codexAuthMode === "model_provider" && !answers.codexProviderApiKeyEnvName?.trim()) {
1341
1354
  return "setup requires provider API key env name when Codex auth mode is model_provider.";
1342
1355
  }
1356
+ if (!answers.codexModel?.trim()) {
1357
+ return "setup requires a Codex model.";
1358
+ }
1343
1359
  if (answers.enableJira && !answers.jiraBaseUrl?.trim()) {
1344
1360
  return "setup requires a Jira base URL when Jira integration is enabled.";
1345
1361
  }
@@ -1425,6 +1441,7 @@ function resolveSetupCachedProvider(rawConfig) {
1425
1441
  }
1426
1442
  function buildSetupConfig(answers, rawConfig) {
1427
1443
  const config = buildDefaultConfig();
1444
+ const configuredCodexModel = answers.codexModel?.trim();
1428
1445
  const cachedProvider = answers.codexAuthMode === "model_provider"
1429
1446
  ? {
1430
1447
  id: answers.codexProviderId.trim(),
@@ -1435,6 +1452,9 @@ function buildSetupConfig(answers, rawConfig) {
1435
1452
  }
1436
1453
  : resolveSetupCachedProvider(rawConfig);
1437
1454
  config.codex.auth.mode = answers.codexAuthMode;
1455
+ if (configuredCodexModel) {
1456
+ config.codex.model = configuredCodexModel;
1457
+ }
1438
1458
  if (answers.codexAuthMode === "model_provider") {
1439
1459
  config.codex.provider = {
1440
1460
  id: answers.codexProviderId.trim(),
@@ -2028,6 +2048,7 @@ async function runSetup(args) {
2028
2048
  sentryEnabled: config.sentry.enabled,
2029
2049
  codexAuth: {
2030
2050
  mode: codexAuth.mode,
2051
+ ...(config.codex.model?.trim() ? { model: config.codex.model.trim() } : {}),
2031
2052
  ...(codexAuth.apiKeyEnvName ? { envName: codexAuth.apiKeyEnvName } : {}),
2032
2053
  configured: codexAuth.authenticated,
2033
2054
  ...(codexAuth.providerId ? {