@reinamaccredy/oh-my-opencode 1.0.0 → 2.14.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/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.0",
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
  },
@@ -2291,7 +2295,12 @@ var require_package = __commonJS((exports, module) => {
2291
2295
  "librarian",
2292
2296
  "agents",
2293
2297
  "ai",
2294
- "llm"
2298
+ "llm",
2299
+ "maestro",
2300
+ "workflow",
2301
+ "tdd",
2302
+ "design-phases",
2303
+ "multi-agent"
2295
2304
  ],
2296
2305
  author: "YeonGyu-Kim",
2297
2306
  license: "SUL-1.0",
@@ -6729,44 +6738,84 @@ function generateOmoConfig(installConfig) {
6729
6738
  const config = {
6730
6739
  $schema: "https://raw.githubusercontent.com/code-yeongyu/oh-my-opencode/master/assets/oh-my-opencode.schema.json"
6731
6740
  };
6732
- if (installConfig.hasGemini) {
6741
+ if (installConfig.hasProxyPal || installConfig.hasGemini) {
6733
6742
  config.google_auth = false;
6734
6743
  }
6735
6744
  const agents = {};
6736
- if (!installConfig.hasClaude) {
6737
- agents["Sisyphus"] = { model: "opencode/glm-4.7-free" };
6738
- }
6739
- agents["librarian"] = { model: "opencode/glm-4.7-free" };
6740
- if (installConfig.hasGemini) {
6741
- agents["explore"] = { model: "google/antigravity-gemini-3-flash" };
6742
- } else if (installConfig.hasClaude && installConfig.isMax20) {
6743
- 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" };
6744
6774
  } else {
6775
+ agents["Sisyphus"] = { model: "opencode/glm-4.7-free" };
6776
+ agents["librarian"] = { model: "opencode/glm-4.7-free" };
6745
6777
  agents["explore"] = { model: "opencode/glm-4.7-free" };
6746
- }
6747
- if (!installConfig.hasChatGPT) {
6748
- agents["oracle"] = {
6749
- model: installConfig.hasClaude ? "anthropic/claude-opus-4-5" : "opencode/glm-4.7-free"
6750
- };
6751
- }
6752
- if (installConfig.hasGemini) {
6753
- agents["frontend-ui-ux-engineer"] = { model: "google/antigravity-gemini-3-pro-high" };
6754
- agents["document-writer"] = { model: "google/antigravity-gemini-3-flash" };
6755
- agents["multimodal-looker"] = { model: "google/antigravity-gemini-3-flash" };
6756
- } else {
6757
- const fallbackModel = installConfig.hasClaude ? "anthropic/claude-opus-4-5" : "opencode/glm-4.7-free";
6758
- agents["frontend-ui-ux-engineer"] = { model: fallbackModel };
6759
- agents["document-writer"] = { model: fallbackModel };
6760
- 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
+ }
6761
6792
  }
6762
6793
  if (Object.keys(agents).length > 0) {
6763
6794
  config.agents = agents;
6764
6795
  }
6765
- 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) {
6766
6807
  config.categories = {
6767
- "visual-engineering": { model: "google/gemini-3-pro-high" },
6768
- artistry: { model: "google/gemini-3-pro-high" },
6769
- 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" }
6770
6819
  };
6771
6820
  }
6772
6821
  return config;
@@ -6882,6 +6931,78 @@ async function addAuthPlugins(config) {
6882
6931
  return { success: false, configPath: path3, error: formatErrorWithSuggestion(err, "add auth plugins to config") };
6883
6932
  }
6884
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
+ };
6885
7006
  var ANTIGRAVITY_PROVIDER_CONFIG = {
6886
7007
  google: {
6887
7008
  name: "Google",
@@ -6976,6 +7097,9 @@ function addProviderConfig(config) {
6976
7097
  }
6977
7098
  const newConfig = { ...existingConfig ?? {} };
6978
7099
  const providers = newConfig.provider ?? {};
7100
+ if (config.hasProxyPal) {
7101
+ providers.proxypal = PROXYPAL_PROVIDER_CONFIG.proxypal;
7102
+ }
6979
7103
  if (config.hasGemini) {
6980
7104
  providers.google = ANTIGRAVITY_PROVIDER_CONFIG.google;
6981
7105
  }
@@ -6995,6 +7119,7 @@ function addProviderConfig(config) {
6995
7119
  function detectCurrentConfig() {
6996
7120
  const result = {
6997
7121
  isInstalled: false,
7122
+ hasProxyPal: false,
6998
7123
  hasClaude: true,
6999
7124
  isMax20: true,
7000
7125
  hasChatGPT: true,
@@ -7034,6 +7159,14 @@ function detectCurrentConfig() {
7034
7159
  return result;
7035
7160
  }
7036
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
+ }
7037
7170
  if (agents["Sisyphus"]?.model === "opencode/glm-4.7-free") {
7038
7171
  result.hasClaude = false;
7039
7172
  result.isMax20 = false;
@@ -7073,19 +7206,48 @@ function formatConfigSummary(config) {
7073
7206
  const lines = [];
7074
7207
  lines.push(import_picocolors2.default.bold(import_picocolors2.default.white("Configuration Summary")));
7075
7208
  lines.push("");
7076
- const claudeDetail = config.hasClaude ? config.isMax20 ? "max20" : "standard" : undefined;
7077
- lines.push(formatProvider("Claude", config.hasClaude, claudeDetail));
7078
- lines.push(formatProvider("ChatGPT", config.hasChatGPT));
7079
- 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
+ }
7080
7221
  lines.push("");
7081
7222
  lines.push(import_picocolors2.default.dim("\u2500".repeat(40)));
7082
7223
  lines.push("");
7083
7224
  lines.push(import_picocolors2.default.bold(import_picocolors2.default.white("Agent Configuration")));
7084
7225
  lines.push("");
7085
- const sisyphusModel = config.hasClaude ? "claude-opus-4-5" : "glm-4.7-free";
7086
- const oracleModel = config.hasChatGPT ? "gpt-5.2" : config.hasClaude ? "claude-opus-4-5" : "glm-4.7-free";
7087
- const librarianModel = "glm-4.7-free";
7088
- 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
+ }
7089
7251
  lines.push(` ${SYMBOLS.bullet} Sisyphus ${SYMBOLS.arrow} ${import_picocolors2.default.cyan(sisyphusModel)}`);
7090
7252
  lines.push(` ${SYMBOLS.bullet} Oracle ${SYMBOLS.arrow} ${import_picocolors2.default.cyan(oracleModel)}`);
7091
7253
  lines.push(` ${SYMBOLS.bullet} Librarian ${SYMBOLS.arrow} ${import_picocolors2.default.cyan(librarianModel)}`);
@@ -7136,6 +7298,12 @@ function printBox(content, title) {
7136
7298
  }
7137
7299
  function validateNonTuiArgs(args) {
7138
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
+ }
7139
7307
  if (args.claude === undefined) {
7140
7308
  errors.push("--claude is required (values: no, yes, max20)");
7141
7309
  } else if (!["no", "yes", "max20"].includes(args.claude)) {
@@ -7154,7 +7322,17 @@ function validateNonTuiArgs(args) {
7154
7322
  return { valid: errors.length === 0, errors };
7155
7323
  }
7156
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
+ }
7157
7334
  return {
7335
+ hasProxyPal: false,
7158
7336
  hasClaude: args.claude !== "no",
7159
7337
  isMax20: args.claude === "max20",
7160
7338
  hasChatGPT: args.chatgpt === "yes",
@@ -7167,6 +7345,7 @@ function detectedToInitialValues(detected) {
7167
7345
  claude = detected.isMax20 ? "max20" : "yes";
7168
7346
  }
7169
7347
  return {
7348
+ proxypal: detected.hasProxyPal ? "yes" : "no",
7170
7349
  claude,
7171
7350
  chatgpt: detected.hasChatGPT ? "yes" : "no",
7172
7351
  gemini: detected.hasGemini ? "yes" : "no"
@@ -7174,6 +7353,27 @@ function detectedToInitialValues(detected) {
7174
7353
  }
7175
7354
  async function runTuiMode(detected) {
7176
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
+ }
7177
7377
  const claude = await ve({
7178
7378
  message: "Do you have a Claude Pro/Max subscription?",
7179
7379
  options: [
@@ -7212,6 +7412,7 @@ async function runTuiMode(detected) {
7212
7412
  return null;
7213
7413
  }
7214
7414
  return {
7415
+ hasProxyPal: false,
7215
7416
  hasClaude: claude !== "no",
7216
7417
  isMax20: claude === "max20",
7217
7418
  hasChatGPT: chatgpt === "yes",
@@ -7227,7 +7428,8 @@ async function runNonTuiInstall(args) {
7227
7428
  console.log(` ${SYMBOLS.bullet} ${err}`);
7228
7429
  }
7229
7430
  console.log();
7230
- 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>");
7231
7433
  console.log();
7232
7434
  return 1;
7233
7435
  }
@@ -7247,7 +7449,11 @@ async function runNonTuiInstall(args) {
7247
7449
  printSuccess(`OpenCode ${version ?? ""} detected`);
7248
7450
  if (isUpdate) {
7249
7451
  const initial = detectedToInitialValues(detected);
7250
- 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
+ }
7251
7457
  }
7252
7458
  const config = argsToConfig(args);
7253
7459
  printStep(step++, totalSteps, "Adding oh-my-opencode plugin...");
@@ -7257,7 +7463,16 @@ async function runNonTuiInstall(args) {
7257
7463
  return 1;
7258
7464
  }
7259
7465
  printSuccess(`Plugin ${isUpdate ? "verified" : "added"} ${SYMBOLS.arrow} ${import_picocolors2.default.dim(pluginResult.configPath)}`);
7260
- 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) {
7261
7476
  printStep(step++, totalSteps, "Adding auth plugins...");
7262
7477
  const authResult = await addAuthPlugins(config);
7263
7478
  if (!authResult.success) {
@@ -7283,10 +7498,16 @@ async function runNonTuiInstall(args) {
7283
7498
  }
7284
7499
  printSuccess(`Config written ${SYMBOLS.arrow} ${import_picocolors2.default.dim(omoResult.configPath)}`);
7285
7500
  printBox(formatConfigSummary(config), isUpdate ? "Updated Configuration" : "Installation Complete");
7286
- if (!config.hasClaude && !config.hasChatGPT && !config.hasGemini) {
7501
+ if (!config.hasProxyPal && !config.hasClaude && !config.hasChatGPT && !config.hasGemini) {
7287
7502
  printWarning("No model providers configured. Using opencode/glm-4.7-free as fallback.");
7288
7503
  }
7289
- 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) {
7290
7511
  console.log(import_picocolors2.default.bold("Next Steps - Authenticate your providers:"));
7291
7512
  console.log();
7292
7513
  if (config.hasClaude) {
@@ -7322,7 +7543,11 @@ async function install(args) {
7322
7543
  Ie(import_picocolors2.default.bgMagenta(import_picocolors2.default.white(isUpdate ? " oMoMoMoMo... Update " : " oMoMoMoMo... ")));
7323
7544
  if (isUpdate) {
7324
7545
  const initial = detectedToInitialValues(detected);
7325
- 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
+ }
7326
7551
  }
7327
7552
  const s = Y2();
7328
7553
  s.start("Checking OpenCode installation");
@@ -7347,7 +7572,16 @@ async function install(args) {
7347
7572
  return 1;
7348
7573
  }
7349
7574
  s.stop(`Plugin added to ${import_picocolors2.default.cyan(pluginResult.configPath)}`);
7350
- 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) {
7351
7585
  s.start("Adding auth plugins (fetching latest versions)");
7352
7586
  const authResult = await addAuthPlugins(config);
7353
7587
  if (!authResult.success) {
@@ -7373,11 +7607,18 @@ async function install(args) {
7373
7607
  return 1;
7374
7608
  }
7375
7609
  s.stop(`Config written to ${import_picocolors2.default.cyan(omoResult.configPath)}`);
7376
- if (!config.hasClaude && !config.hasChatGPT && !config.hasGemini) {
7610
+ if (!config.hasProxyPal && !config.hasClaude && !config.hasChatGPT && !config.hasGemini) {
7377
7611
  M2.warn("No model providers configured. Using opencode/glm-4.7-free as fallback.");
7378
7612
  }
7379
7613
  Me(formatConfigSummary(config), isUpdate ? "Updated Configuration" : "Installation Complete");
7380
- 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) {
7381
7622
  const steps = [];
7382
7623
  if (config.hasClaude) {
7383
7624
  steps.push(`${import_picocolors2.default.dim("opencode auth login")} ${import_picocolors2.default.gray("(select Anthropic \u2192 Claude Pro/Max)")}`);
@@ -23490,19 +23731,22 @@ var packageJson = await Promise.resolve().then(() => __toESM(require_package(),
23490
23731
  var VERSION = packageJson.version;
23491
23732
  var program2 = new Command;
23492
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");
23493
- 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", `
23494
23735
  Examples:
23495
23736
  $ bunx oh-my-opencode install
23737
+ $ bunx oh-my-opencode install --no-tui --proxypal=yes
23496
23738
  $ bunx oh-my-opencode install --no-tui --claude=max20 --chatgpt=yes --gemini=yes
23497
23739
  $ bunx oh-my-opencode install --no-tui --claude=no --chatgpt=no --gemini=no
23498
23740
 
23499
23741
  Model Providers:
23742
+ ProxyPal Use ProxyPal proxy for all models (github.com/heyhuynhgiabuu/proxypal)
23500
23743
  Claude Required for Sisyphus (main orchestrator) and Librarian agents
23501
23744
  ChatGPT Powers the Oracle agent for debugging and architecture
23502
23745
  Gemini Powers frontend, documentation, and multimodal agents
23503
23746
  `).action(async (options) => {
23504
23747
  const args = {
23505
23748
  tui: options.tui !== false,
23749
+ proxypal: options.proxypal,
23506
23750
  claude: options.claude,
23507
23751
  chatgpt: options.chatgpt,
23508
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 {};