@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/README.ja.md +8 -8
- package/README.md +16 -16
- package/README.zh-cn.md +8 -8
- package/dist/agents/metis.d.ts +1 -0
- package/dist/agents/orchestrator-sisyphus.d.ts +1 -0
- package/dist/cli/config-manager.d.ts +0 -14
- package/dist/cli/index.js +292 -48
- package/dist/cli/types.d.ts +3 -0
- package/dist/features/background-agent/manager.d.ts +1 -0
- package/dist/hooks/auto-update-checker/index.d.ts +3 -0
- package/dist/hooks/auto-update-checker/index.test.d.ts +1 -0
- package/dist/index.js +164 -86
- package/package.json +11 -2
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: "
|
|
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 (
|
|
6737
|
-
agents["Sisyphus"] = { model: "
|
|
6738
|
-
|
|
6739
|
-
|
|
6740
|
-
|
|
6741
|
-
agents["
|
|
6742
|
-
|
|
6743
|
-
agents["
|
|
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
|
-
|
|
6748
|
-
agents["
|
|
6749
|
-
|
|
6750
|
-
|
|
6751
|
-
|
|
6752
|
-
|
|
6753
|
-
|
|
6754
|
-
|
|
6755
|
-
|
|
6756
|
-
|
|
6757
|
-
|
|
6758
|
-
|
|
6759
|
-
|
|
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.
|
|
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: "
|
|
6768
|
-
|
|
6769
|
-
|
|
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
|
-
|
|
7077
|
-
|
|
7078
|
-
|
|
7079
|
-
|
|
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
|
-
|
|
7086
|
-
|
|
7087
|
-
|
|
7088
|
-
|
|
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 --
|
|
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
|
-
|
|
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.
|
|
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 (
|
|
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
|
-
|
|
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.
|
|
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 (
|
|
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,
|
package/dist/cli/types.d.ts
CHANGED
|
@@ -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;
|
|
@@ -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 {};
|