@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/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 +286 -47
- 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 +5 -1
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
|
},
|
|
@@ -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 (
|
|
6742
|
-
agents["Sisyphus"] = { model: "
|
|
6743
|
-
|
|
6744
|
-
|
|
6745
|
-
|
|
6746
|
-
agents["
|
|
6747
|
-
|
|
6748
|
-
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" };
|
|
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
|
-
|
|
6753
|
-
agents["
|
|
6754
|
-
|
|
6755
|
-
|
|
6756
|
-
|
|
6757
|
-
|
|
6758
|
-
|
|
6759
|
-
|
|
6760
|
-
|
|
6761
|
-
|
|
6762
|
-
|
|
6763
|
-
|
|
6764
|
-
|
|
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.
|
|
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: "
|
|
6773
|
-
|
|
6774
|
-
|
|
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
|
-
|
|
7082
|
-
|
|
7083
|
-
|
|
7084
|
-
|
|
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
|
-
|
|
7091
|
-
|
|
7092
|
-
|
|
7093
|
-
|
|
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 --
|
|
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
|
-
|
|
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.
|
|
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 (
|
|
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
|
-
|
|
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.
|
|
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 (
|
|
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,
|
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 {};
|