@reinamaccredy/oh-my-opencode 1.0.1 → 3.0.0-beta.10

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/cli/index.js CHANGED
@@ -2253,7 +2253,7 @@ var require_picocolors = __commonJS((exports, module) => {
2253
2253
  var require_package = __commonJS((exports, module) => {
2254
2254
  module.exports = {
2255
2255
  name: "@reinamaccredy/oh-my-opencode",
2256
- version: "1.0.1",
2256
+ version: "3.0.0-beta.10",
2257
2257
  description: "Fork of oh-my-opencode with Maestro workflow integration - Multi-Model Orchestration, Parallel Background Agents, Design Phases, and TDD Methodology",
2258
2258
  main: "dist/index.js",
2259
2259
  types: "dist/index.d.ts",
@@ -2281,6 +2281,10 @@ var require_package = __commonJS((exports, module) => {
2281
2281
  "build:schema": "bun run script/build-schema.ts",
2282
2282
  clean: "rm -rf dist",
2283
2283
  prepublishOnly: "bun run clean && bun run build",
2284
+ "publish:beta": "./scripts/publish.sh prerelease",
2285
+ "publish:patch": "./scripts/publish.sh patch",
2286
+ "publish:minor": "./scripts/publish.sh minor",
2287
+ "publish:major": "./scripts/publish.sh major",
2284
2288
  typecheck: "tsc --noEmit",
2285
2289
  test: "bun test"
2286
2290
  },
@@ -6734,44 +6738,84 @@ function generateOmoConfig(installConfig) {
6734
6738
  const config = {
6735
6739
  $schema: "https://raw.githubusercontent.com/code-yeongyu/oh-my-opencode/master/assets/oh-my-opencode.schema.json"
6736
6740
  };
6737
- if (installConfig.hasGemini) {
6741
+ if (installConfig.hasProxyPal || installConfig.hasGemini) {
6738
6742
  config.google_auth = false;
6739
6743
  }
6740
6744
  const agents = {};
6741
- if (!installConfig.hasClaude) {
6742
- agents["Sisyphus"] = { model: "opencode/glm-4.7-free" };
6743
- }
6744
- agents["librarian"] = { model: "opencode/glm-4.7-free" };
6745
- if (installConfig.hasGemini) {
6746
- agents["explore"] = { model: "google/antigravity-gemini-3-flash" };
6747
- } else if (installConfig.hasClaude && installConfig.isMax20) {
6748
- agents["explore"] = { model: "anthropic/claude-haiku-4-5" };
6745
+ if (installConfig.hasProxyPal) {
6746
+ agents["Sisyphus"] = { model: "proxypal/gemini-claude-opus-4-5-thinking" };
6747
+ agents["librarian"] = { model: "proxypal/gemini-claude-opus-4-5-thinking" };
6748
+ agents["explore"] = { model: "proxypal/gemini-3-flash-preview" };
6749
+ agents["frontend-ui-ux-engineer"] = { model: "proxypal/gemini-3-pro-preview" };
6750
+ agents["document-writer"] = { model: "proxypal/gemini-3-flash-preview" };
6751
+ agents["multimodal-looker"] = { model: "proxypal/gemini-3-flash-preview" };
6752
+ agents["orchestrator-sisyphus"] = { model: "proxypal/gemini-claude-sonnet-4-5-thinking" };
6753
+ agents["Prometheus (Planner)"] = { model: "proxypal/gemini-claude-opus-4-5-thinking" };
6754
+ agents["Metis (Plan Consultant)"] = { model: "proxypal/gemini-claude-opus-4-5-thinking" };
6755
+ agents["oracle"] = { model: "proxypal/gpt-5.2-codex" };
6756
+ agents["Momus (Plan Reviewer)"] = { model: "proxypal/gpt-5.2-codex" };
6757
+ } else if (installConfig.hasGemini) {
6758
+ agents["Sisyphus"] = { model: "proxypal/gemini-claude-opus-4-5-thinking" };
6759
+ agents["librarian"] = { model: "proxypal/gemini-claude-opus-4-5-thinking" };
6760
+ agents["explore"] = { model: "proxypal/gemini-3-flash-preview" };
6761
+ agents["frontend-ui-ux-engineer"] = { model: "proxypal/gemini-3-pro-preview" };
6762
+ agents["document-writer"] = { model: "proxypal/gemini-3-flash-preview" };
6763
+ agents["multimodal-looker"] = { model: "proxypal/gemini-3-flash-preview" };
6764
+ agents["orchestrator-sisyphus"] = { model: "proxypal/gemini-claude-sonnet-4-5-thinking" };
6765
+ agents["Prometheus (Planner)"] = { model: "proxypal/gemini-claude-opus-4-5-thinking" };
6766
+ agents["Metis (Plan Consultant)"] = { model: "proxypal/gemini-claude-opus-4-5-thinking" };
6767
+ } else if (installConfig.hasClaude) {
6768
+ agents["Sisyphus"] = { model: "anthropic/claude-opus-4-5" };
6769
+ agents["librarian"] = { model: "anthropic/claude-sonnet-4-5" };
6770
+ agents["explore"] = { model: installConfig.isMax20 ? "anthropic/claude-haiku-4-5" : "opencode/glm-4.7-free" };
6771
+ agents["frontend-ui-ux-engineer"] = { model: "anthropic/claude-opus-4-5" };
6772
+ agents["document-writer"] = { model: "anthropic/claude-opus-4-5" };
6773
+ agents["multimodal-looker"] = { model: "anthropic/claude-opus-4-5" };
6749
6774
  } else {
6775
+ agents["Sisyphus"] = { model: "opencode/glm-4.7-free" };
6776
+ agents["librarian"] = { model: "opencode/glm-4.7-free" };
6750
6777
  agents["explore"] = { model: "opencode/glm-4.7-free" };
6751
- }
6752
- if (!installConfig.hasChatGPT) {
6753
- agents["oracle"] = {
6754
- model: installConfig.hasClaude ? "anthropic/claude-opus-4-5" : "opencode/glm-4.7-free"
6755
- };
6756
- }
6757
- if (installConfig.hasGemini) {
6758
- agents["frontend-ui-ux-engineer"] = { model: "google/antigravity-gemini-3-pro-high" };
6759
- agents["document-writer"] = { model: "google/antigravity-gemini-3-flash" };
6760
- agents["multimodal-looker"] = { model: "google/antigravity-gemini-3-flash" };
6761
- } else {
6762
- const fallbackModel = installConfig.hasClaude ? "anthropic/claude-opus-4-5" : "opencode/glm-4.7-free";
6763
- agents["frontend-ui-ux-engineer"] = { model: fallbackModel };
6764
- agents["document-writer"] = { model: fallbackModel };
6765
- agents["multimodal-looker"] = { model: fallbackModel };
6778
+ agents["frontend-ui-ux-engineer"] = { model: "opencode/glm-4.7-free" };
6779
+ agents["document-writer"] = { model: "opencode/glm-4.7-free" };
6780
+ agents["multimodal-looker"] = { model: "opencode/glm-4.7-free" };
6781
+ }
6782
+ if (!installConfig.hasProxyPal) {
6783
+ if (installConfig.hasChatGPT) {
6784
+ agents["oracle"] = { model: "proxypal/gpt-5.2-codex" };
6785
+ agents["Momus (Plan Reviewer)"] = { model: "proxypal/gpt-5.2-codex" };
6786
+ } else if (installConfig.hasClaude) {
6787
+ agents["oracle"] = { model: "anthropic/claude-opus-4-5" };
6788
+ agents["Momus (Plan Reviewer)"] = { model: "anthropic/claude-opus-4-5" };
6789
+ } else {
6790
+ agents["oracle"] = { model: "opencode/glm-4.7-free" };
6791
+ }
6766
6792
  }
6767
6793
  if (Object.keys(agents).length > 0) {
6768
6794
  config.agents = agents;
6769
6795
  }
6770
- if (installConfig.hasGemini) {
6796
+ if (installConfig.hasProxyPal) {
6797
+ config.categories = {
6798
+ "visual-engineering": { model: "proxypal/gemini-3-pro-preview" },
6799
+ ultrabrain: { model: "proxypal/gpt-5.2-codex" },
6800
+ artistry: { model: "proxypal/gemini-3-pro-preview" },
6801
+ quick: { model: "proxypal/gemini-3-flash-preview" },
6802
+ "most-capable": { model: "proxypal/gemini-claude-opus-4-5-thinking" },
6803
+ writing: { model: "proxypal/gemini-3-flash-preview" },
6804
+ general: { model: "proxypal/gemini-claude-opus-4-5-thinking" }
6805
+ };
6806
+ } else if (installConfig.hasGemini) {
6771
6807
  config.categories = {
6772
- "visual-engineering": { model: "google/gemini-3-pro-high" },
6773
- artistry: { model: "google/gemini-3-pro-high" },
6774
- writing: { model: "google/gemini-3-flash-high" }
6808
+ "visual-engineering": { model: "proxypal/gemini-3-pro-preview" },
6809
+ ultrabrain: { model: "proxypal/gpt-5.2-codex" },
6810
+ artistry: { model: "proxypal/gemini-3-pro-preview" },
6811
+ quick: { model: "proxypal/gemini-3-flash-preview" },
6812
+ "most-capable": { model: "proxypal/gemini-claude-opus-4-5-thinking" },
6813
+ writing: { model: "proxypal/gemini-3-flash-preview" },
6814
+ general: { model: "proxypal/gemini-claude-opus-4-5-thinking" }
6815
+ };
6816
+ } else if (installConfig.hasChatGPT) {
6817
+ config.categories = {
6818
+ ultrabrain: { model: "proxypal/gpt-5.2-codex" }
6775
6819
  };
6776
6820
  }
6777
6821
  return config;
@@ -6887,6 +6931,78 @@ async function addAuthPlugins(config) {
6887
6931
  return { success: false, configPath: path3, error: formatErrorWithSuggestion(err, "add auth plugins to config") };
6888
6932
  }
6889
6933
  }
6934
+ var PROXYPAL_PROVIDER_CONFIG = {
6935
+ proxypal: {
6936
+ name: "ProxyPal",
6937
+ npm: "@ai-sdk/anthropic",
6938
+ options: {
6939
+ apiKey: "proxypal-local",
6940
+ baseURL: "http://127.0.0.1:8317/v1",
6941
+ includeUsage: true
6942
+ },
6943
+ models: {
6944
+ "gemini-claude-opus-4-5-thinking": {
6945
+ name: "Gemini Claude Opus 4 5 Thinking",
6946
+ limit: { context: 168000, output: 64000 },
6947
+ options: { thinking: { budgetTokens: 32768, type: "enabled" } },
6948
+ reasoning: true
6949
+ },
6950
+ "gemini-claude-sonnet-4-5-thinking": {
6951
+ name: "Gemini Claude Sonnet 4 5 Thinking",
6952
+ limit: { context: 168000, output: 64000 },
6953
+ options: { thinking: { budgetTokens: 32768, type: "enabled" } },
6954
+ reasoning: true
6955
+ },
6956
+ "gemini-claude-sonnet-4-5": {
6957
+ name: "Gemini Claude Sonnet 4 5",
6958
+ limit: { context: 168000, output: 64000 }
6959
+ },
6960
+ "gemini-3-pro-preview": {
6961
+ name: "Gemini 3 Pro Preview",
6962
+ limit: { context: 880964, output: 65536 }
6963
+ },
6964
+ "gemini-3-flash-preview": {
6965
+ name: "Gemini 3 Flash Preview",
6966
+ limit: { context: 880964, output: 65536 }
6967
+ },
6968
+ "gemini-2.5-flash": {
6969
+ name: "Gemini 2 5 Flash",
6970
+ limit: { context: 880964, output: 65536 }
6971
+ },
6972
+ "gpt-5.2-codex": {
6973
+ name: "Gpt 5 2 Codex",
6974
+ limit: { context: 336000, output: 32768 },
6975
+ options: { reasoningEffort: "xhigh" },
6976
+ reasoning: true
6977
+ },
6978
+ "gpt-5.2": {
6979
+ name: "Gpt 5 2",
6980
+ limit: { context: 336000, output: 32768 },
6981
+ options: { reasoningEffort: "xhigh" },
6982
+ reasoning: true
6983
+ },
6984
+ "gpt-5.1-codex-max": {
6985
+ name: "Gpt 5 1 Codex Max",
6986
+ limit: { context: 336000, output: 32768 },
6987
+ options: { reasoningEffort: "xhigh" },
6988
+ reasoning: true
6989
+ },
6990
+ "antigravity-gemini-3-pro-high": {
6991
+ name: "Gemini 3 Pro High (Antigravity)",
6992
+ thinking: true,
6993
+ attachment: true,
6994
+ limit: { context: 1048576, output: 65535 },
6995
+ modalities: { input: ["text", "image", "pdf"], output: ["text"] }
6996
+ },
6997
+ "antigravity-gemini-3-flash": {
6998
+ name: "Gemini 3 Flash (Antigravity)",
6999
+ attachment: true,
7000
+ limit: { context: 1048576, output: 65536 },
7001
+ modalities: { input: ["text", "image", "pdf"], output: ["text"] }
7002
+ }
7003
+ }
7004
+ }
7005
+ };
6890
7006
  var ANTIGRAVITY_PROVIDER_CONFIG = {
6891
7007
  google: {
6892
7008
  name: "Google",
@@ -6981,6 +7097,9 @@ function addProviderConfig(config) {
6981
7097
  }
6982
7098
  const newConfig = { ...existingConfig ?? {} };
6983
7099
  const providers = newConfig.provider ?? {};
7100
+ if (config.hasProxyPal) {
7101
+ providers.proxypal = PROXYPAL_PROVIDER_CONFIG.proxypal;
7102
+ }
6984
7103
  if (config.hasGemini) {
6985
7104
  providers.google = ANTIGRAVITY_PROVIDER_CONFIG.google;
6986
7105
  }
@@ -7000,6 +7119,7 @@ function addProviderConfig(config) {
7000
7119
  function detectCurrentConfig() {
7001
7120
  const result = {
7002
7121
  isInstalled: false,
7122
+ hasProxyPal: false,
7003
7123
  hasClaude: true,
7004
7124
  isMax20: true,
7005
7125
  hasChatGPT: true,
@@ -7039,6 +7159,14 @@ function detectCurrentConfig() {
7039
7159
  return result;
7040
7160
  }
7041
7161
  const agents = omoConfig.agents ?? {};
7162
+ if (agents["Sisyphus"]?.model?.startsWith("proxypal/")) {
7163
+ result.hasProxyPal = true;
7164
+ result.hasClaude = false;
7165
+ result.isMax20 = false;
7166
+ result.hasChatGPT = false;
7167
+ result.hasGemini = false;
7168
+ return result;
7169
+ }
7042
7170
  if (agents["Sisyphus"]?.model === "opencode/glm-4.7-free") {
7043
7171
  result.hasClaude = false;
7044
7172
  result.isMax20 = false;
@@ -7078,19 +7206,48 @@ function formatConfigSummary(config) {
7078
7206
  const lines = [];
7079
7207
  lines.push(import_picocolors2.default.bold(import_picocolors2.default.white("Configuration Summary")));
7080
7208
  lines.push("");
7081
- const claudeDetail = config.hasClaude ? config.isMax20 ? "max20" : "standard" : undefined;
7082
- lines.push(formatProvider("Claude", config.hasClaude, claudeDetail));
7083
- lines.push(formatProvider("ChatGPT", config.hasChatGPT));
7084
- lines.push(formatProvider("Gemini", config.hasGemini));
7209
+ if (config.hasProxyPal) {
7210
+ lines.push(formatProvider("ProxyPal", true, "all models via proxy"));
7211
+ lines.push(formatProvider("Claude", false));
7212
+ lines.push(formatProvider("ChatGPT", false));
7213
+ lines.push(formatProvider("Gemini", false));
7214
+ } else {
7215
+ lines.push(formatProvider("ProxyPal", false));
7216
+ const claudeDetail = config.hasClaude ? config.isMax20 ? "max20" : "standard" : undefined;
7217
+ lines.push(formatProvider("Claude", config.hasClaude, claudeDetail));
7218
+ lines.push(formatProvider("ChatGPT", config.hasChatGPT));
7219
+ lines.push(formatProvider("Gemini", config.hasGemini));
7220
+ }
7085
7221
  lines.push("");
7086
7222
  lines.push(import_picocolors2.default.dim("\u2500".repeat(40)));
7087
7223
  lines.push("");
7088
7224
  lines.push(import_picocolors2.default.bold(import_picocolors2.default.white("Agent Configuration")));
7089
7225
  lines.push("");
7090
- const sisyphusModel = config.hasClaude ? "claude-opus-4-5" : "glm-4.7-free";
7091
- const oracleModel = config.hasChatGPT ? "gpt-5.2" : config.hasClaude ? "claude-opus-4-5" : "glm-4.7-free";
7092
- const librarianModel = "glm-4.7-free";
7093
- const frontendModel = config.hasGemini ? "antigravity-gemini-3-pro-high" : config.hasClaude ? "claude-opus-4-5" : "glm-4.7-free";
7226
+ let sisyphusModel;
7227
+ let oracleModel;
7228
+ let librarianModel;
7229
+ let frontendModel;
7230
+ if (config.hasProxyPal) {
7231
+ sisyphusModel = "gemini-claude-opus-4-5-thinking";
7232
+ oracleModel = "gpt-5.2-codex";
7233
+ librarianModel = "gemini-claude-opus-4-5-thinking";
7234
+ frontendModel = "gemini-3-pro-preview";
7235
+ } else if (config.hasGemini) {
7236
+ sisyphusModel = "gemini-claude-opus-4-5-thinking";
7237
+ oracleModel = config.hasChatGPT ? "gpt-5.2-codex" : config.hasClaude ? "claude-opus-4-5" : "glm-4.7-free";
7238
+ librarianModel = "gemini-claude-opus-4-5-thinking";
7239
+ frontendModel = "gemini-3-pro-preview";
7240
+ } else if (config.hasClaude) {
7241
+ sisyphusModel = "claude-opus-4-5";
7242
+ oracleModel = config.hasChatGPT ? "gpt-5.2-codex" : "claude-opus-4-5";
7243
+ librarianModel = "claude-sonnet-4-5";
7244
+ frontendModel = "claude-opus-4-5";
7245
+ } else {
7246
+ sisyphusModel = "glm-4.7-free";
7247
+ oracleModel = config.hasChatGPT ? "gpt-5.2-codex" : "glm-4.7-free";
7248
+ librarianModel = "glm-4.7-free";
7249
+ frontendModel = "glm-4.7-free";
7250
+ }
7094
7251
  lines.push(` ${SYMBOLS.bullet} Sisyphus ${SYMBOLS.arrow} ${import_picocolors2.default.cyan(sisyphusModel)}`);
7095
7252
  lines.push(` ${SYMBOLS.bullet} Oracle ${SYMBOLS.arrow} ${import_picocolors2.default.cyan(oracleModel)}`);
7096
7253
  lines.push(` ${SYMBOLS.bullet} Librarian ${SYMBOLS.arrow} ${import_picocolors2.default.cyan(librarianModel)}`);
@@ -7141,6 +7298,12 @@ function printBox(content, title) {
7141
7298
  }
7142
7299
  function validateNonTuiArgs(args) {
7143
7300
  const errors = [];
7301
+ if (args.proxypal !== undefined && !["no", "yes"].includes(args.proxypal)) {
7302
+ errors.push(`Invalid --proxypal value: ${args.proxypal} (expected: no, yes)`);
7303
+ }
7304
+ if (args.proxypal === "yes") {
7305
+ return { valid: errors.length === 0, errors };
7306
+ }
7144
7307
  if (args.claude === undefined) {
7145
7308
  errors.push("--claude is required (values: no, yes, max20)");
7146
7309
  } else if (!["no", "yes", "max20"].includes(args.claude)) {
@@ -7159,7 +7322,17 @@ function validateNonTuiArgs(args) {
7159
7322
  return { valid: errors.length === 0, errors };
7160
7323
  }
7161
7324
  function argsToConfig(args) {
7325
+ if (args.proxypal === "yes") {
7326
+ return {
7327
+ hasProxyPal: true,
7328
+ hasClaude: false,
7329
+ isMax20: false,
7330
+ hasChatGPT: false,
7331
+ hasGemini: false
7332
+ };
7333
+ }
7162
7334
  return {
7335
+ hasProxyPal: false,
7163
7336
  hasClaude: args.claude !== "no",
7164
7337
  isMax20: args.claude === "max20",
7165
7338
  hasChatGPT: args.chatgpt === "yes",
@@ -7172,6 +7345,7 @@ function detectedToInitialValues(detected) {
7172
7345
  claude = detected.isMax20 ? "max20" : "yes";
7173
7346
  }
7174
7347
  return {
7348
+ proxypal: detected.hasProxyPal ? "yes" : "no",
7175
7349
  claude,
7176
7350
  chatgpt: detected.hasChatGPT ? "yes" : "no",
7177
7351
  gemini: detected.hasGemini ? "yes" : "no"
@@ -7179,6 +7353,27 @@ function detectedToInitialValues(detected) {
7179
7353
  }
7180
7354
  async function runTuiMode(detected) {
7181
7355
  const initial = detectedToInitialValues(detected);
7356
+ const proxypal = await ve({
7357
+ message: "Are you using ProxyPal? (github.com/heyhuynhgiabuu/proxypal)",
7358
+ options: [
7359
+ { value: "yes", label: "Yes", hint: "All models via ProxyPal proxy - skip other questions" },
7360
+ { value: "no", label: "No", hint: "Configure individual providers" }
7361
+ ],
7362
+ initialValue: initial.proxypal
7363
+ });
7364
+ if (pD(proxypal)) {
7365
+ xe("Installation cancelled.");
7366
+ return null;
7367
+ }
7368
+ if (proxypal === "yes") {
7369
+ return {
7370
+ hasProxyPal: true,
7371
+ hasClaude: false,
7372
+ isMax20: false,
7373
+ hasChatGPT: false,
7374
+ hasGemini: false
7375
+ };
7376
+ }
7182
7377
  const claude = await ve({
7183
7378
  message: "Do you have a Claude Pro/Max subscription?",
7184
7379
  options: [
@@ -7217,6 +7412,7 @@ async function runTuiMode(detected) {
7217
7412
  return null;
7218
7413
  }
7219
7414
  return {
7415
+ hasProxyPal: false,
7220
7416
  hasClaude: claude !== "no",
7221
7417
  isMax20: claude === "max20",
7222
7418
  hasChatGPT: chatgpt === "yes",
@@ -7232,7 +7428,8 @@ async function runNonTuiInstall(args) {
7232
7428
  console.log(` ${SYMBOLS.bullet} ${err}`);
7233
7429
  }
7234
7430
  console.log();
7235
- printInfo("Usage: bunx oh-my-opencode install --no-tui --claude=<no|yes|max20> --chatgpt=<no|yes> --gemini=<no|yes>");
7431
+ printInfo("Usage: bunx oh-my-opencode install --no-tui --proxypal=yes");
7432
+ printInfo(" or: bunx oh-my-opencode install --no-tui --claude=<no|yes|max20> --chatgpt=<no|yes> --gemini=<no|yes>");
7236
7433
  console.log();
7237
7434
  return 1;
7238
7435
  }
@@ -7252,7 +7449,11 @@ async function runNonTuiInstall(args) {
7252
7449
  printSuccess(`OpenCode ${version ?? ""} detected`);
7253
7450
  if (isUpdate) {
7254
7451
  const initial = detectedToInitialValues(detected);
7255
- printInfo(`Current config: Claude=${initial.claude}, ChatGPT=${initial.chatgpt}, Gemini=${initial.gemini}`);
7452
+ if (initial.proxypal === "yes") {
7453
+ printInfo(`Current config: ProxyPal=yes`);
7454
+ } else {
7455
+ printInfo(`Current config: Claude=${initial.claude}, ChatGPT=${initial.chatgpt}, Gemini=${initial.gemini}`);
7456
+ }
7256
7457
  }
7257
7458
  const config = argsToConfig(args);
7258
7459
  printStep(step++, totalSteps, "Adding oh-my-opencode plugin...");
@@ -7262,7 +7463,16 @@ async function runNonTuiInstall(args) {
7262
7463
  return 1;
7263
7464
  }
7264
7465
  printSuccess(`Plugin ${isUpdate ? "verified" : "added"} ${SYMBOLS.arrow} ${import_picocolors2.default.dim(pluginResult.configPath)}`);
7265
- if (config.hasGemini || config.hasChatGPT) {
7466
+ if (config.hasProxyPal) {
7467
+ printStep(step++, totalSteps, "Adding ProxyPal provider configuration...");
7468
+ const providerResult = addProviderConfig(config);
7469
+ if (!providerResult.success) {
7470
+ printError(`Failed: ${providerResult.error}`);
7471
+ return 1;
7472
+ }
7473
+ printSuccess(`ProxyPal configured ${SYMBOLS.arrow} ${import_picocolors2.default.dim(providerResult.configPath)}`);
7474
+ step += 1;
7475
+ } else if (config.hasGemini || config.hasChatGPT) {
7266
7476
  printStep(step++, totalSteps, "Adding auth plugins...");
7267
7477
  const authResult = await addAuthPlugins(config);
7268
7478
  if (!authResult.success) {
@@ -7288,10 +7498,16 @@ async function runNonTuiInstall(args) {
7288
7498
  }
7289
7499
  printSuccess(`Config written ${SYMBOLS.arrow} ${import_picocolors2.default.dim(omoResult.configPath)}`);
7290
7500
  printBox(formatConfigSummary(config), isUpdate ? "Updated Configuration" : "Installation Complete");
7291
- if (!config.hasClaude && !config.hasChatGPT && !config.hasGemini) {
7501
+ if (!config.hasProxyPal && !config.hasClaude && !config.hasChatGPT && !config.hasGemini) {
7292
7502
  printWarning("No model providers configured. Using opencode/glm-4.7-free as fallback.");
7293
7503
  }
7294
- if ((config.hasClaude || config.hasChatGPT || config.hasGemini) && !args.skipAuth) {
7504
+ if (config.hasProxyPal && !args.skipAuth) {
7505
+ console.log(import_picocolors2.default.bold("Next Steps - Configure ProxyPal:"));
7506
+ console.log();
7507
+ console.log(` ${SYMBOLS.arrow} Start ProxyPal and ensure proxy is running on ${import_picocolors2.default.cyan("http://localhost:8317")}`);
7508
+ console.log(` ${SYMBOLS.arrow} Authenticate your providers in ProxyPal app`);
7509
+ console.log();
7510
+ } else if ((config.hasClaude || config.hasChatGPT || config.hasGemini) && !args.skipAuth) {
7295
7511
  console.log(import_picocolors2.default.bold("Next Steps - Authenticate your providers:"));
7296
7512
  console.log();
7297
7513
  if (config.hasClaude) {
@@ -7327,7 +7543,11 @@ async function install(args) {
7327
7543
  Ie(import_picocolors2.default.bgMagenta(import_picocolors2.default.white(isUpdate ? " oMoMoMoMo... Update " : " oMoMoMoMo... ")));
7328
7544
  if (isUpdate) {
7329
7545
  const initial = detectedToInitialValues(detected);
7330
- M2.info(`Existing configuration detected: Claude=${initial.claude}, ChatGPT=${initial.chatgpt}, Gemini=${initial.gemini}`);
7546
+ if (initial.proxypal === "yes") {
7547
+ M2.info(`Existing configuration detected: ProxyPal=yes`);
7548
+ } else {
7549
+ M2.info(`Existing configuration detected: Claude=${initial.claude}, ChatGPT=${initial.chatgpt}, Gemini=${initial.gemini}`);
7550
+ }
7331
7551
  }
7332
7552
  const s = Y2();
7333
7553
  s.start("Checking OpenCode installation");
@@ -7352,7 +7572,16 @@ async function install(args) {
7352
7572
  return 1;
7353
7573
  }
7354
7574
  s.stop(`Plugin added to ${import_picocolors2.default.cyan(pluginResult.configPath)}`);
7355
- if (config.hasGemini || config.hasChatGPT) {
7575
+ if (config.hasProxyPal) {
7576
+ s.start("Adding ProxyPal provider configuration");
7577
+ const providerResult = addProviderConfig(config);
7578
+ if (!providerResult.success) {
7579
+ s.stop(`Failed to add provider config: ${providerResult.error}`);
7580
+ Se(import_picocolors2.default.red("Installation failed."));
7581
+ return 1;
7582
+ }
7583
+ s.stop(`ProxyPal configured to ${import_picocolors2.default.cyan(providerResult.configPath)}`);
7584
+ } else if (config.hasGemini || config.hasChatGPT) {
7356
7585
  s.start("Adding auth plugins (fetching latest versions)");
7357
7586
  const authResult = await addAuthPlugins(config);
7358
7587
  if (!authResult.success) {
@@ -7378,11 +7607,18 @@ async function install(args) {
7378
7607
  return 1;
7379
7608
  }
7380
7609
  s.stop(`Config written to ${import_picocolors2.default.cyan(omoResult.configPath)}`);
7381
- if (!config.hasClaude && !config.hasChatGPT && !config.hasGemini) {
7610
+ if (!config.hasProxyPal && !config.hasClaude && !config.hasChatGPT && !config.hasGemini) {
7382
7611
  M2.warn("No model providers configured. Using opencode/glm-4.7-free as fallback.");
7383
7612
  }
7384
7613
  Me(formatConfigSummary(config), isUpdate ? "Updated Configuration" : "Installation Complete");
7385
- if ((config.hasClaude || config.hasChatGPT || config.hasGemini) && !args.skipAuth) {
7614
+ if (config.hasProxyPal && !args.skipAuth) {
7615
+ const steps = [
7616
+ `Start ProxyPal and ensure proxy is running on ${import_picocolors2.default.cyan("http://localhost:8317")}`,
7617
+ `Authenticate your providers in the ProxyPal app`
7618
+ ];
7619
+ Me(steps.join(`
7620
+ `), "Next Steps - Configure ProxyPal");
7621
+ } else if ((config.hasClaude || config.hasChatGPT || config.hasGemini) && !args.skipAuth) {
7386
7622
  const steps = [];
7387
7623
  if (config.hasClaude) {
7388
7624
  steps.push(`${import_picocolors2.default.dim("opencode auth login")} ${import_picocolors2.default.gray("(select Anthropic \u2192 Claude Pro/Max)")}`);
@@ -23495,19 +23731,22 @@ var packageJson = await Promise.resolve().then(() => __toESM(require_package(),
23495
23731
  var VERSION = packageJson.version;
23496
23732
  var program2 = new Command;
23497
23733
  program2.name("oh-my-opencode").description("The ultimate OpenCode plugin - multi-model orchestration, LSP tools, and more").version(VERSION, "-v, --version", "Show version number");
23498
- program2.command("install").description("Install and configure oh-my-opencode with interactive setup").option("--no-tui", "Run in non-interactive mode (requires all options)").option("--claude <value>", "Claude subscription: no, yes, max20").option("--chatgpt <value>", "ChatGPT subscription: no, yes").option("--gemini <value>", "Gemini integration: no, yes").option("--skip-auth", "Skip authentication setup hints").addHelpText("after", `
23734
+ program2.command("install").description("Install and configure oh-my-opencode with interactive setup").option("--no-tui", "Run in non-interactive mode (requires all options)").option("--proxypal <value>", "ProxyPal proxy: no, yes (if yes, skips claude/chatgpt/gemini)").option("--claude <value>", "Claude subscription: no, yes, max20").option("--chatgpt <value>", "ChatGPT subscription: no, yes").option("--gemini <value>", "Gemini integration: no, yes").option("--skip-auth", "Skip authentication setup hints").addHelpText("after", `
23499
23735
  Examples:
23500
23736
  $ bunx oh-my-opencode install
23737
+ $ bunx oh-my-opencode install --no-tui --proxypal=yes
23501
23738
  $ bunx oh-my-opencode install --no-tui --claude=max20 --chatgpt=yes --gemini=yes
23502
23739
  $ bunx oh-my-opencode install --no-tui --claude=no --chatgpt=no --gemini=no
23503
23740
 
23504
23741
  Model Providers:
23742
+ ProxyPal Use ProxyPal proxy for all models (github.com/heyhuynhgiabuu/proxypal)
23505
23743
  Claude Required for Sisyphus (main orchestrator) and Librarian agents
23506
23744
  ChatGPT Powers the Oracle agent for debugging and architecture
23507
23745
  Gemini Powers frontend, documentation, and multimodal agents
23508
23746
  `).action(async (options) => {
23509
23747
  const args = {
23510
23748
  tui: options.tui !== false,
23749
+ proxypal: options.proxypal,
23511
23750
  claude: options.claude,
23512
23751
  chatgpt: options.chatgpt,
23513
23752
  gemini: options.gemini,
@@ -2,12 +2,14 @@ export type ClaudeSubscription = "no" | "yes" | "max20";
2
2
  export type BooleanArg = "no" | "yes";
3
3
  export interface InstallArgs {
4
4
  tui: boolean;
5
+ proxypal?: BooleanArg;
5
6
  claude?: ClaudeSubscription;
6
7
  chatgpt?: BooleanArg;
7
8
  gemini?: BooleanArg;
8
9
  skipAuth?: boolean;
9
10
  }
10
11
  export interface InstallConfig {
12
+ hasProxyPal: boolean;
11
13
  hasClaude: boolean;
12
14
  isMax20: boolean;
13
15
  hasChatGPT: boolean;
@@ -20,6 +22,7 @@ export interface ConfigMergeResult {
20
22
  }
21
23
  export interface DetectedConfig {
22
24
  isInstalled: boolean;
25
+ hasProxyPal: boolean;
23
26
  hasClaude: boolean;
24
27
  isMax20: boolean;
25
28
  hasChatGPT: boolean;
@@ -35,6 +35,7 @@ export declare class BackgroundManager {
35
35
  parentSessionID: string;
36
36
  description: string;
37
37
  agent?: string;
38
+ parentAgent?: string;
38
39
  }): BackgroundTask;
39
40
  resume(input: ResumeInput): Promise<BackgroundTask>;
40
41
  private checkSessionTodos;
@@ -1,5 +1,8 @@
1
1
  import type { PluginInput } from "@opencode-ai/plugin";
2
2
  import type { AutoUpdateCheckerOptions } from "./types";
3
+ export declare function isPrereleaseVersion(version: string): boolean;
4
+ export declare function isDistTag(version: string): boolean;
5
+ export declare function isPrereleaseOrDistTag(pinnedVersion: string | null): boolean;
3
6
  export declare function createAutoUpdateCheckerHook(ctx: PluginInput, options?: AutoUpdateCheckerOptions): {
4
7
  event: ({ event }: {
5
8
  event: {
@@ -0,0 +1 @@
1
+ export {};