oh-my-magento 0.3.1 → 0.3.2
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 +318 -89
- package/dist/cli/minimax/index.d.ts +2 -0
- package/dist/cli/minimax/tui.d.ts +1 -0
- package/dist/index.js +13 -17
- package/package.json +12 -12
package/dist/cli/index.js
CHANGED
|
@@ -2145,7 +2145,7 @@ var package_default;
|
|
|
2145
2145
|
var init_package = __esm(() => {
|
|
2146
2146
|
package_default = {
|
|
2147
2147
|
name: "oh-my-magento",
|
|
2148
|
-
version: "0.3.
|
|
2148
|
+
version: "0.3.2",
|
|
2149
2149
|
description: "Magento 2 + Hyv\xE4 Enterprise E-Commerce Intelligent Agent Orchestration System - OpenCode Plugin",
|
|
2150
2150
|
main: "dist/index.js",
|
|
2151
2151
|
types: "dist/index.d.ts",
|
|
@@ -2225,17 +2225,17 @@ var init_package = __esm(() => {
|
|
|
2225
2225
|
typescript: "^5.7.3"
|
|
2226
2226
|
},
|
|
2227
2227
|
optionalDependencies: {
|
|
2228
|
-
"oh-my-magento-darwin-arm64": "0.3.
|
|
2229
|
-
"oh-my-magento-darwin-x64": "0.3.
|
|
2230
|
-
"oh-my-magento-darwin-x64-baseline": "0.3.
|
|
2231
|
-
"oh-my-magento-linux-arm64": "0.3.
|
|
2232
|
-
"oh-my-magento-linux-arm64-musl": "0.3.
|
|
2233
|
-
"oh-my-magento-linux-x64": "0.3.
|
|
2234
|
-
"oh-my-magento-linux-x64-baseline": "0.3.
|
|
2235
|
-
"oh-my-magento-linux-x64-musl": "0.3.
|
|
2236
|
-
"oh-my-magento-linux-x64-musl-baseline": "0.3.
|
|
2237
|
-
"oh-my-magento-windows-x64": "0.3.
|
|
2238
|
-
"oh-my-magento-windows-x64-baseline": "0.3.
|
|
2228
|
+
"oh-my-magento-darwin-arm64": "0.3.2",
|
|
2229
|
+
"oh-my-magento-darwin-x64": "0.3.2",
|
|
2230
|
+
"oh-my-magento-darwin-x64-baseline": "0.3.2",
|
|
2231
|
+
"oh-my-magento-linux-arm64": "0.3.2",
|
|
2232
|
+
"oh-my-magento-linux-arm64-musl": "0.3.2",
|
|
2233
|
+
"oh-my-magento-linux-x64": "0.3.2",
|
|
2234
|
+
"oh-my-magento-linux-x64-baseline": "0.3.2",
|
|
2235
|
+
"oh-my-magento-linux-x64-musl": "0.3.2",
|
|
2236
|
+
"oh-my-magento-linux-x64-musl-baseline": "0.3.2",
|
|
2237
|
+
"oh-my-magento-windows-x64": "0.3.2",
|
|
2238
|
+
"oh-my-magento-windows-x64-baseline": "0.3.2"
|
|
2239
2239
|
},
|
|
2240
2240
|
overrides: {
|
|
2241
2241
|
"@opencode-ai/sdk": "^1.2.24"
|
|
@@ -6456,7 +6456,6 @@ var init_model_requirements = __esm(() => {
|
|
|
6456
6456
|
variant: "max"
|
|
6457
6457
|
},
|
|
6458
6458
|
{ providers: ["opencode-go"], model: "kimi-k2.5" },
|
|
6459
|
-
{ providers: ["kimi-for-coding"], model: "k2p5" },
|
|
6460
6459
|
{
|
|
6461
6460
|
providers: [
|
|
6462
6461
|
"opencode",
|
|
@@ -6468,6 +6467,7 @@ var init_model_requirements = __esm(() => {
|
|
|
6468
6467
|
],
|
|
6469
6468
|
model: "kimi-k2.5"
|
|
6470
6469
|
},
|
|
6470
|
+
{ providers: ["kimi-for-coding"], model: "k2p5" },
|
|
6471
6471
|
{ providers: ["openai", "github-copilot", "opencode"], model: "gpt-5.4", variant: "medium" },
|
|
6472
6472
|
{ providers: ["zai-coding-plan", "opencode"], model: "glm-5" },
|
|
6473
6473
|
{ providers: ["opencode"], model: "big-pickle" }
|
|
@@ -6685,10 +6685,6 @@ var init_model_requirements = __esm(() => {
|
|
|
6685
6685
|
},
|
|
6686
6686
|
quick: {
|
|
6687
6687
|
fallbackChain: [
|
|
6688
|
-
{
|
|
6689
|
-
providers: ["openai", "github-copilot", "opencode"],
|
|
6690
|
-
model: "gpt-5.4-mini"
|
|
6691
|
-
},
|
|
6692
6688
|
{
|
|
6693
6689
|
providers: ["anthropic", "github-copilot", "opencode"],
|
|
6694
6690
|
model: "claude-haiku-4-5"
|
|
@@ -7626,7 +7622,7 @@ var init_openai_only_model_catalog = __esm(() => {
|
|
|
7626
7622
|
};
|
|
7627
7623
|
OPENAI_ONLY_CATEGORY_OVERRIDES = {
|
|
7628
7624
|
artistry: { model: "openai/gpt-5.4", variant: "xhigh" },
|
|
7629
|
-
quick: { model: "openai/gpt-5.
|
|
7625
|
+
quick: { model: "openai/gpt-5.3-codex", variant: "low" },
|
|
7630
7626
|
"visual-engineering": { model: "openai/gpt-5.4", variant: "high" },
|
|
7631
7627
|
writing: { model: "openai/gpt-5.4", variant: "medium" }
|
|
7632
7628
|
};
|
|
@@ -7714,14 +7710,6 @@ function generateModelConfig(config) {
|
|
|
7714
7710
|
const agents = {};
|
|
7715
7711
|
const categories = {};
|
|
7716
7712
|
for (const [role, req] of Object.entries(CLI_AGENT_MODEL_REQUIREMENTS)) {
|
|
7717
|
-
if (role === "librarian") {
|
|
7718
|
-
if (avail.opencodeGo) {
|
|
7719
|
-
agents[role] = { model: "opencode-go/minimax-m2.5" };
|
|
7720
|
-
} else if (avail.zai) {
|
|
7721
|
-
agents[role] = { model: ZAI_MODEL };
|
|
7722
|
-
}
|
|
7723
|
-
continue;
|
|
7724
|
-
}
|
|
7725
7713
|
if (role === "explore") {
|
|
7726
7714
|
if (avail.native.claude) {
|
|
7727
7715
|
agents[role] = { model: "anthropic/claude-haiku-4-5" };
|
|
@@ -7785,7 +7773,7 @@ function generateModelConfig(config) {
|
|
|
7785
7773
|
};
|
|
7786
7774
|
return isOpenAiOnlyAvailability(avail) ? applyOpenAiOnlyModelCatalog(generatedConfig) : generatedConfig;
|
|
7787
7775
|
}
|
|
7788
|
-
var
|
|
7776
|
+
var ULTIMATE_FALLBACK = "opencode/gpt-5-nano", SCHEMA_URL = "https://raw.githubusercontent.com/code-yeongyu/oh-my-openagent/dev/assets/oh-my-opencode.schema.json";
|
|
7789
7777
|
var init_model_fallback = __esm(() => {
|
|
7790
7778
|
init_model_fallback_requirements();
|
|
7791
7779
|
init_openai_only_model_catalog();
|
|
@@ -9693,6 +9681,41 @@ class dD extends x {
|
|
|
9693
9681
|
}
|
|
9694
9682
|
var A;
|
|
9695
9683
|
A = new WeakMap;
|
|
9684
|
+
var kD = Object.defineProperty;
|
|
9685
|
+
var $D = (e, u, t) => (u in e) ? kD(e, u, { enumerable: true, configurable: true, writable: true, value: t }) : e[u] = t;
|
|
9686
|
+
var H = (e, u, t) => ($D(e, typeof u != "symbol" ? u + "" : u, t), t);
|
|
9687
|
+
var SD = class extends x {
|
|
9688
|
+
constructor(u) {
|
|
9689
|
+
super(u, false), H(this, "options"), H(this, "cursor", 0), this.options = u.options, this.value = [...u.initialValues ?? []], this.cursor = Math.max(this.options.findIndex(({ value: t }) => t === u.cursorAt), 0), this.on("key", (t) => {
|
|
9690
|
+
t === "a" && this.toggleAll();
|
|
9691
|
+
}), this.on("cursor", (t) => {
|
|
9692
|
+
switch (t) {
|
|
9693
|
+
case "left":
|
|
9694
|
+
case "up":
|
|
9695
|
+
this.cursor = this.cursor === 0 ? this.options.length - 1 : this.cursor - 1;
|
|
9696
|
+
break;
|
|
9697
|
+
case "down":
|
|
9698
|
+
case "right":
|
|
9699
|
+
this.cursor = this.cursor === this.options.length - 1 ? 0 : this.cursor + 1;
|
|
9700
|
+
break;
|
|
9701
|
+
case "space":
|
|
9702
|
+
this.toggleValue();
|
|
9703
|
+
break;
|
|
9704
|
+
}
|
|
9705
|
+
});
|
|
9706
|
+
}
|
|
9707
|
+
get _value() {
|
|
9708
|
+
return this.options[this.cursor].value;
|
|
9709
|
+
}
|
|
9710
|
+
toggleAll() {
|
|
9711
|
+
const u = this.value.length === this.options.length;
|
|
9712
|
+
this.value = u ? [] : this.options.map((t) => t.value);
|
|
9713
|
+
}
|
|
9714
|
+
toggleValue() {
|
|
9715
|
+
const u = this.value.includes(this._value);
|
|
9716
|
+
this.value = u ? this.value.filter((t) => t !== this._value) : [...this.value, this._value];
|
|
9717
|
+
}
|
|
9718
|
+
};
|
|
9696
9719
|
var OD = Object.defineProperty;
|
|
9697
9720
|
var PD = (e, u, t) => (u in e) ? OD(e, u, { enumerable: true, configurable: true, writable: true, value: t }) : e[u] = t;
|
|
9698
9721
|
var J = (e, u, t) => (PD(e, typeof u != "symbol" ? u + "" : u, t), t);
|
|
@@ -9864,6 +9887,47 @@ ${import_picocolors4.default.cyan(d2)}
|
|
|
9864
9887
|
}
|
|
9865
9888
|
} }).prompt();
|
|
9866
9889
|
};
|
|
9890
|
+
var fe = (t) => {
|
|
9891
|
+
const n = (r2, i2) => {
|
|
9892
|
+
const s = r2.label ?? String(r2.value);
|
|
9893
|
+
return i2 === "active" ? `${import_picocolors4.default.cyan(A2)} ${s} ${r2.hint ? import_picocolors4.default.dim(`(${r2.hint})`) : ""}` : i2 === "selected" ? `${import_picocolors4.default.green(T)} ${import_picocolors4.default.dim(s)} ${r2.hint ? import_picocolors4.default.dim(`(${r2.hint})`) : ""}` : i2 === "cancelled" ? `${import_picocolors4.default.strikethrough(import_picocolors4.default.dim(s))}` : i2 === "active-selected" ? `${import_picocolors4.default.green(T)} ${s} ${r2.hint ? import_picocolors4.default.dim(`(${r2.hint})`) : ""}` : i2 === "submitted" ? `${import_picocolors4.default.dim(s)}` : `${import_picocolors4.default.dim(F)} ${import_picocolors4.default.dim(s)}`;
|
|
9894
|
+
};
|
|
9895
|
+
return new SD({ options: t.options, initialValues: t.initialValues, required: t.required ?? true, cursorAt: t.cursorAt, validate(r2) {
|
|
9896
|
+
if (this.required && r2.length === 0)
|
|
9897
|
+
return `Please select at least one option.
|
|
9898
|
+
${import_picocolors4.default.reset(import_picocolors4.default.dim(`Press ${import_picocolors4.default.gray(import_picocolors4.default.bgWhite(import_picocolors4.default.inverse(" space ")))} to select, ${import_picocolors4.default.gray(import_picocolors4.default.bgWhite(import_picocolors4.default.inverse(" enter ")))} to submit`))}`;
|
|
9899
|
+
}, render() {
|
|
9900
|
+
const r2 = `${import_picocolors4.default.gray(o)}
|
|
9901
|
+
${b2(this.state)} ${t.message}
|
|
9902
|
+
`, i2 = (s, c) => {
|
|
9903
|
+
const a = this.value.includes(s.value);
|
|
9904
|
+
return c && a ? n(s, "active-selected") : a ? n(s, "selected") : n(s, c ? "active" : "inactive");
|
|
9905
|
+
};
|
|
9906
|
+
switch (this.state) {
|
|
9907
|
+
case "submit":
|
|
9908
|
+
return `${r2}${import_picocolors4.default.gray(o)} ${this.options.filter(({ value: s }) => this.value.includes(s)).map((s) => n(s, "submitted")).join(import_picocolors4.default.dim(", ")) || import_picocolors4.default.dim("none")}`;
|
|
9909
|
+
case "cancel": {
|
|
9910
|
+
const s = this.options.filter(({ value: c }) => this.value.includes(c)).map((c) => n(c, "cancelled")).join(import_picocolors4.default.dim(", "));
|
|
9911
|
+
return `${r2}${import_picocolors4.default.gray(o)} ${s.trim() ? `${s}
|
|
9912
|
+
${import_picocolors4.default.gray(o)}` : ""}`;
|
|
9913
|
+
}
|
|
9914
|
+
case "error": {
|
|
9915
|
+
const s = this.error.split(`
|
|
9916
|
+
`).map((c, a) => a === 0 ? `${import_picocolors4.default.yellow(d2)} ${import_picocolors4.default.yellow(c)}` : ` ${c}`).join(`
|
|
9917
|
+
`);
|
|
9918
|
+
return `${r2 + import_picocolors4.default.yellow(o)} ${G2({ options: this.options, cursor: this.cursor, maxItems: t.maxItems, style: i2 }).join(`
|
|
9919
|
+
${import_picocolors4.default.yellow(o)} `)}
|
|
9920
|
+
${s}
|
|
9921
|
+
`;
|
|
9922
|
+
}
|
|
9923
|
+
default:
|
|
9924
|
+
return `${r2}${import_picocolors4.default.cyan(o)} ${G2({ options: this.options, cursor: this.cursor, maxItems: t.maxItems, style: i2 }).join(`
|
|
9925
|
+
${import_picocolors4.default.cyan(o)} `)}
|
|
9926
|
+
${import_picocolors4.default.cyan(d2)}
|
|
9927
|
+
`;
|
|
9928
|
+
}
|
|
9929
|
+
} }).prompt();
|
|
9930
|
+
};
|
|
9867
9931
|
var Me = (t = "", n = "") => {
|
|
9868
9932
|
const r2 = `
|
|
9869
9933
|
${t}
|
|
@@ -9939,7 +10003,7 @@ var Y2 = ({ indicator: t = "dots" } = {}) => {
|
|
|
9939
10003
|
}, R2 = (m2) => m2.replace(/\.+$/, ""), O2 = (m2) => {
|
|
9940
10004
|
const h2 = (performance.now() - m2) / 1000, w2 = Math.floor(h2 / 60), I2 = Math.floor(h2 % 60);
|
|
9941
10005
|
return w2 > 0 ? `[${w2}m ${I2}s]` : `[${I2}s]`;
|
|
9942
|
-
},
|
|
10006
|
+
}, H2 = (m2 = "") => {
|
|
9943
10007
|
a = true, s = fD(), l2 = R2(m2), g2 = performance.now(), process.stdout.write(`${import_picocolors4.default.gray(o)}
|
|
9944
10008
|
`);
|
|
9945
10009
|
let h2 = 0, w2 = 0;
|
|
@@ -9965,7 +10029,7 @@ var Y2 = ({ indicator: t = "dots" } = {}) => {
|
|
|
9965
10029
|
`) : process.stdout.write(`${w2} ${l2}
|
|
9966
10030
|
`), E(), s();
|
|
9967
10031
|
};
|
|
9968
|
-
return { start:
|
|
10032
|
+
return { start: H2, stop: N2, message: (m2 = "") => {
|
|
9969
10033
|
l2 = R2(m2 ?? l2);
|
|
9970
10034
|
} };
|
|
9971
10035
|
};
|
|
@@ -31083,11 +31147,175 @@ async function copilotXCli() {
|
|
|
31083
31147
|
}
|
|
31084
31148
|
}
|
|
31085
31149
|
|
|
31150
|
+
// src/cli/minimax/tui.ts
|
|
31151
|
+
init_config_context();
|
|
31152
|
+
init_ensure_config_directory_exists();
|
|
31153
|
+
init_shared();
|
|
31154
|
+
var import_picocolors24 = __toESM(require_picocolors(), 1);
|
|
31155
|
+
import { existsSync as existsSync33, readFileSync as readFileSync28, statSync as statSync4, writeFileSync as writeFileSync11 } from "fs";
|
|
31156
|
+
var MINIMAX_PROVIDER = "minimax-cn-coding-plan";
|
|
31157
|
+
var MINIMAX_MODELS = ["MiniMax-M2.7", "MiniMax-M2.7-highspeed"];
|
|
31158
|
+
function buildAssignments(config2) {
|
|
31159
|
+
const map3 = new Map;
|
|
31160
|
+
for (const [agent, cfg] of Object.entries(config2.agents ?? {})) {
|
|
31161
|
+
const model = cfg.model;
|
|
31162
|
+
if (!model)
|
|
31163
|
+
continue;
|
|
31164
|
+
const entry = map3.get(model) ?? { agents: [], categories: [] };
|
|
31165
|
+
entry.agents.push(agent);
|
|
31166
|
+
map3.set(model, entry);
|
|
31167
|
+
}
|
|
31168
|
+
for (const [cat, cfg] of Object.entries(config2.categories ?? {})) {
|
|
31169
|
+
const model = cfg.model;
|
|
31170
|
+
if (!model)
|
|
31171
|
+
continue;
|
|
31172
|
+
const entry = map3.get(model) ?? { agents: [], categories: [] };
|
|
31173
|
+
entry.categories.push(cat);
|
|
31174
|
+
map3.set(model, entry);
|
|
31175
|
+
}
|
|
31176
|
+
return map3;
|
|
31177
|
+
}
|
|
31178
|
+
function isEmptyOrWhitespace3(content) {
|
|
31179
|
+
return content.trim().length === 0;
|
|
31180
|
+
}
|
|
31181
|
+
function hintForModel(_model, assignments) {
|
|
31182
|
+
const parts = [];
|
|
31183
|
+
if (assignments.agents.length)
|
|
31184
|
+
parts.push(`agents: ${assignments.agents.join(", ")}`);
|
|
31185
|
+
if (assignments.categories.length)
|
|
31186
|
+
parts.push(`categories: ${assignments.categories.join(", ")}`);
|
|
31187
|
+
return parts.join(" ");
|
|
31188
|
+
}
|
|
31189
|
+
async function runMinimaxTui() {
|
|
31190
|
+
Ie(import_picocolors24.default.bgMagenta(import_picocolors24.default.black(" Minimax Model Replacement ")));
|
|
31191
|
+
const minimaxModel = await ve({
|
|
31192
|
+
message: "Select Minimax model to replace with:",
|
|
31193
|
+
options: MINIMAX_MODELS.map((m2) => ({
|
|
31194
|
+
value: m2,
|
|
31195
|
+
label: m2,
|
|
31196
|
+
hint: m2 === "MiniMax-M2.7-highspeed" ? "Premium plan required" : "Basic plan"
|
|
31197
|
+
})),
|
|
31198
|
+
initialValue: "MiniMax-M2.7"
|
|
31199
|
+
});
|
|
31200
|
+
if (pD(minimaxModel)) {
|
|
31201
|
+
Se(import_picocolors24.default.dim("Aborted."));
|
|
31202
|
+
return 0;
|
|
31203
|
+
}
|
|
31204
|
+
const qualifiedModel = `${MINIMAX_PROVIDER}/${minimaxModel}`;
|
|
31205
|
+
const configPath = getOmoConfigPath();
|
|
31206
|
+
let config2 = {};
|
|
31207
|
+
if (existsSync33(configPath)) {
|
|
31208
|
+
try {
|
|
31209
|
+
const stat = statSync4(configPath);
|
|
31210
|
+
if (stat.size > 0) {
|
|
31211
|
+
const content = readFileSync28(configPath, "utf-8");
|
|
31212
|
+
if (!isEmptyOrWhitespace3(content)) {
|
|
31213
|
+
const parsed = parseJsonc(content);
|
|
31214
|
+
if (parsed && typeof parsed === "object")
|
|
31215
|
+
config2 = parsed;
|
|
31216
|
+
}
|
|
31217
|
+
}
|
|
31218
|
+
} catch {}
|
|
31219
|
+
}
|
|
31220
|
+
const assignments = buildAssignments(config2);
|
|
31221
|
+
const models = Array.from(assignments.keys()).sort();
|
|
31222
|
+
if (models.length === 0) {
|
|
31223
|
+
M2.warn("No models found in config \u2014 nothing to replace.");
|
|
31224
|
+
Se(import_picocolors24.default.dim("Done."));
|
|
31225
|
+
return 0;
|
|
31226
|
+
}
|
|
31227
|
+
const selected = await fe({
|
|
31228
|
+
message: `Replace with ${import_picocolors24.default.cyan(qualifiedModel)} (select models to swap):`,
|
|
31229
|
+
options: models.map((m2) => ({
|
|
31230
|
+
value: m2,
|
|
31231
|
+
label: m2,
|
|
31232
|
+
hint: hintForModel(m2, assignments.get(m2))
|
|
31233
|
+
})),
|
|
31234
|
+
required: false
|
|
31235
|
+
});
|
|
31236
|
+
if (pD(selected)) {
|
|
31237
|
+
Se(import_picocolors24.default.dim("Aborted."));
|
|
31238
|
+
return 0;
|
|
31239
|
+
}
|
|
31240
|
+
if (!selected || Array.isArray(selected) && selected.length === 0) {
|
|
31241
|
+
Se(import_picocolors24.default.dim("No models selected \u2014 nothing changed."));
|
|
31242
|
+
return 0;
|
|
31243
|
+
}
|
|
31244
|
+
const patch = {};
|
|
31245
|
+
for (const model of selected) {
|
|
31246
|
+
const assign = assignments.get(model);
|
|
31247
|
+
if (!assign)
|
|
31248
|
+
continue;
|
|
31249
|
+
for (const agent of assign.agents) {
|
|
31250
|
+
if (!patch.agents)
|
|
31251
|
+
patch.agents = {};
|
|
31252
|
+
patch.agents[agent] = { model: qualifiedModel };
|
|
31253
|
+
}
|
|
31254
|
+
for (const cat of assign.categories) {
|
|
31255
|
+
if (!patch.categories)
|
|
31256
|
+
patch.categories = {};
|
|
31257
|
+
patch.categories[cat] = { model: qualifiedModel };
|
|
31258
|
+
}
|
|
31259
|
+
}
|
|
31260
|
+
try {
|
|
31261
|
+
ensureConfigDirectoryExists();
|
|
31262
|
+
} catch (err) {
|
|
31263
|
+
console.error(formatErrorWithSuggestion(err, "create config directory"));
|
|
31264
|
+
return 1;
|
|
31265
|
+
}
|
|
31266
|
+
try {
|
|
31267
|
+
if (existsSync33(configPath)) {
|
|
31268
|
+
const stat = statSync4(configPath);
|
|
31269
|
+
const content = readFileSync28(configPath, "utf-8");
|
|
31270
|
+
if (stat.size > 0 && !isEmptyOrWhitespace3(content)) {
|
|
31271
|
+
try {
|
|
31272
|
+
const existing = parseJsonc(content);
|
|
31273
|
+
if (existing && typeof existing === "object" && !Array.isArray(existing)) {
|
|
31274
|
+
const merged = deepMergeRecord(existing, patch);
|
|
31275
|
+
writeFileSync11(configPath, JSON.stringify(merged, null, 2) + `
|
|
31276
|
+
`);
|
|
31277
|
+
} else {
|
|
31278
|
+
writeFileSync11(configPath, JSON.stringify(patch, null, 2) + `
|
|
31279
|
+
`);
|
|
31280
|
+
}
|
|
31281
|
+
} catch {
|
|
31282
|
+
writeFileSync11(configPath, JSON.stringify(patch, null, 2) + `
|
|
31283
|
+
`);
|
|
31284
|
+
}
|
|
31285
|
+
} else {
|
|
31286
|
+
writeFileSync11(configPath, JSON.stringify(patch, null, 2) + `
|
|
31287
|
+
`);
|
|
31288
|
+
}
|
|
31289
|
+
} else {
|
|
31290
|
+
writeFileSync11(configPath, JSON.stringify(patch, null, 2) + `
|
|
31291
|
+
`);
|
|
31292
|
+
}
|
|
31293
|
+
} catch (err) {
|
|
31294
|
+
console.error(formatErrorWithSuggestion(err, "write oh-my-magento config"));
|
|
31295
|
+
return 1;
|
|
31296
|
+
}
|
|
31297
|
+
M2.success(`Replaced ${import_picocolors24.default.yellow(String(selected.length))} model(s) \u2192 ${import_picocolors24.default.cyan(qualifiedModel)} in ${import_picocolors24.default.dim(configPath)}`);
|
|
31298
|
+
Se(import_picocolors24.default.dim("Done."));
|
|
31299
|
+
return 0;
|
|
31300
|
+
}
|
|
31301
|
+
|
|
31302
|
+
// src/cli/minimax/index.ts
|
|
31303
|
+
function createMinimaxCommand() {
|
|
31304
|
+
const minimax = new Command("minimax").description("Replace configured models with Minimax").addHelpText("after", `
|
|
31305
|
+
Examples:
|
|
31306
|
+
$ bunx oh-my-magento minimax
|
|
31307
|
+
`).action(async () => {
|
|
31308
|
+
const exitCode = await runMinimaxTui();
|
|
31309
|
+
process.exit(exitCode);
|
|
31310
|
+
});
|
|
31311
|
+
return minimax;
|
|
31312
|
+
}
|
|
31313
|
+
|
|
31086
31314
|
// src/cli/usage/opencode-db-connection.ts
|
|
31087
31315
|
init_data_path();
|
|
31088
31316
|
import { Database } from "bun:sqlite";
|
|
31089
31317
|
import { join as join32 } from "path";
|
|
31090
|
-
import { existsSync as
|
|
31318
|
+
import { existsSync as existsSync34 } from "fs";
|
|
31091
31319
|
function getDbPath() {
|
|
31092
31320
|
const envPath = process.env.OPENCODE_DB;
|
|
31093
31321
|
if (envPath)
|
|
@@ -31095,7 +31323,7 @@ function getDbPath() {
|
|
|
31095
31323
|
return join32(getDataDir(), "opencode", "opencode.db");
|
|
31096
31324
|
}
|
|
31097
31325
|
function createConnection(dbPath) {
|
|
31098
|
-
if (!
|
|
31326
|
+
if (!existsSync34(dbPath)) {
|
|
31099
31327
|
throw new Error(`OpenCode database not found at ${dbPath}
|
|
31100
31328
|
Set OPENCODE_DB env var to override.`);
|
|
31101
31329
|
}
|
|
@@ -31410,7 +31638,7 @@ class OpenCodeDB {
|
|
|
31410
31638
|
}
|
|
31411
31639
|
|
|
31412
31640
|
// src/cli/usage/render-format.ts
|
|
31413
|
-
var
|
|
31641
|
+
var import_picocolors25 = __toESM(require_picocolors(), 1);
|
|
31414
31642
|
function formatTokens(n) {
|
|
31415
31643
|
if (n >= 1e9)
|
|
31416
31644
|
return `${(n / 1e9).toFixed(1)}B`;
|
|
@@ -31429,10 +31657,10 @@ function formatCost(c) {
|
|
|
31429
31657
|
}
|
|
31430
31658
|
function formatDelta(pct) {
|
|
31431
31659
|
if (pct > 0)
|
|
31432
|
-
return
|
|
31660
|
+
return import_picocolors25.default.red(`+${pct.toFixed(0)}%`);
|
|
31433
31661
|
if (pct < 0)
|
|
31434
|
-
return
|
|
31435
|
-
return
|
|
31662
|
+
return import_picocolors25.default.green(`${pct.toFixed(0)}%`);
|
|
31663
|
+
return import_picocolors25.default.dim("0%");
|
|
31436
31664
|
}
|
|
31437
31665
|
// src/cli/usage/render-helpers.ts
|
|
31438
31666
|
function stripAnsi2(str3) {
|
|
@@ -31486,20 +31714,20 @@ function bottomBorder(widths) {
|
|
|
31486
31714
|
return "\u2514" + widths.map((w2) => "\u2500".repeat(w2 + 2)).join("\u2534") + "\u2518";
|
|
31487
31715
|
}
|
|
31488
31716
|
// src/cli/usage/render-summary.ts
|
|
31489
|
-
var
|
|
31717
|
+
var import_picocolors26 = __toESM(require_picocolors(), 1);
|
|
31490
31718
|
function renderSummary(total, period, prevTotal) {
|
|
31491
31719
|
const parts = [];
|
|
31492
|
-
parts.push(`Calls: ${
|
|
31720
|
+
parts.push(`Calls: ${import_picocolors26.default.bold(import_picocolors26.default.magenta(total.calls.toLocaleString()))}`);
|
|
31493
31721
|
if (prevTotal && prevTotal.calls > 0) {
|
|
31494
31722
|
const pct = (total.calls - prevTotal.calls) / prevTotal.calls * 100;
|
|
31495
31723
|
parts.push(` ${formatDelta(pct)}`);
|
|
31496
31724
|
}
|
|
31497
|
-
parts.push(` \u2502 Tokens: ${
|
|
31725
|
+
parts.push(` \u2502 Tokens: ${import_picocolors26.default.bold(formatTokens(total.tokens.total))}`);
|
|
31498
31726
|
if (prevTotal && prevTotal.tokens.total > 0) {
|
|
31499
31727
|
const pct = (total.tokens.total - prevTotal.tokens.total) / prevTotal.tokens.total * 100;
|
|
31500
31728
|
parts.push(` ${formatDelta(pct)}`);
|
|
31501
31729
|
}
|
|
31502
|
-
parts.push(` \u2502 Cost: ${
|
|
31730
|
+
parts.push(` \u2502 Cost: ${import_picocolors26.default.bold(import_picocolors26.default.red(formatCost(total.cost)))}`);
|
|
31503
31731
|
if (prevTotal && prevTotal.cost > 0) {
|
|
31504
31732
|
const pct = (total.cost - prevTotal.cost) / prevTotal.cost * 100;
|
|
31505
31733
|
parts.push(` ${formatDelta(pct)}`);
|
|
@@ -31509,7 +31737,7 @@ function renderSummary(total, period, prevTotal) {
|
|
|
31509
31737
|
const title = `OpenCode Usage \u2014 ${period}`;
|
|
31510
31738
|
const innerWidth = Math.max(title.length + 6, rawContentLen + 2);
|
|
31511
31739
|
const titlePad = innerWidth - title.length - 5;
|
|
31512
|
-
const titleLine = `\u256D\u2500\u2500\u2500 ${
|
|
31740
|
+
const titleLine = `\u256D\u2500\u2500\u2500 ${import_picocolors26.default.bold(title)} ${"\u2500".repeat(Math.max(1, titlePad))}\u256E`;
|
|
31513
31741
|
const contentLine = `\u2502 ${content}${" ".repeat(Math.max(0, innerWidth - rawContentLen - 2))} \u2502`;
|
|
31514
31742
|
const bottomLine = `\u2570${"\u2500".repeat(innerWidth)}\u256F`;
|
|
31515
31743
|
console.log();
|
|
@@ -31518,16 +31746,16 @@ function renderSummary(total, period, prevTotal) {
|
|
|
31518
31746
|
console.log(bottomLine);
|
|
31519
31747
|
}
|
|
31520
31748
|
// src/cli/usage/render-tables.ts
|
|
31521
|
-
var
|
|
31749
|
+
var import_picocolors27 = __toESM(require_picocolors(), 1);
|
|
31522
31750
|
function renderDaily(rows, period) {
|
|
31523
|
-
const title =
|
|
31751
|
+
const title = import_picocolors27.default.bold(`Daily Usage (${period})`);
|
|
31524
31752
|
console.log();
|
|
31525
31753
|
console.log(` ${title}`);
|
|
31526
31754
|
const widths = [12, 7, 7, 7, 7, 7, 8, 8, 10];
|
|
31527
31755
|
const headers = ["Date", "Calls", "Input", "Output", "Cache R", "Cache W", "Total", "Cost", "Trend"];
|
|
31528
|
-
console.log(
|
|
31529
|
-
console.log(
|
|
31530
|
-
console.log(
|
|
31756
|
+
console.log(import_picocolors27.default.dim(topBorder(widths)));
|
|
31757
|
+
console.log(import_picocolors27.default.cyan(import_picocolors27.default.bold(headerRow(headers, widths))));
|
|
31758
|
+
console.log(import_picocolors27.default.dim(separator(widths)));
|
|
31531
31759
|
const maxTokens = Math.max(...rows.map((r2) => r2.tokens.total), 1);
|
|
31532
31760
|
for (const r2 of rows) {
|
|
31533
31761
|
const cells = [
|
|
@@ -31539,11 +31767,11 @@ function renderDaily(rows, period) {
|
|
|
31539
31767
|
` ${padLeft(formatTokens(r2.tokens.cacheWrite), widths[5])} `,
|
|
31540
31768
|
` ${padLeft(formatTokens(r2.tokens.total), widths[6])} `,
|
|
31541
31769
|
` ${padLeft(formatCost(r2.cost), widths[7])} `,
|
|
31542
|
-
` ${padRight(
|
|
31770
|
+
` ${padRight(import_picocolors27.default.cyan(sparkBar(r2.tokens.total, maxTokens, widths[8])), widths[8])} `
|
|
31543
31771
|
];
|
|
31544
31772
|
console.log("\u2502" + cells.join("\u2502") + "\u2502");
|
|
31545
31773
|
}
|
|
31546
|
-
console.log(
|
|
31774
|
+
console.log(import_picocolors27.default.dim(bottomBorder(widths)));
|
|
31547
31775
|
}
|
|
31548
31776
|
function renderGrouped(rows, groupBy, period, deltas) {
|
|
31549
31777
|
const labelMap = {
|
|
@@ -31555,7 +31783,7 @@ function renderGrouped(rows, groupBy, period, deltas) {
|
|
|
31555
31783
|
const labelHeader = labelMap[groupBy] ?? groupBy;
|
|
31556
31784
|
const showDetail = groupBy === "agent";
|
|
31557
31785
|
const showBreakdown = groupBy !== "session" && groupBy !== "agent";
|
|
31558
|
-
const title =
|
|
31786
|
+
const title = import_picocolors27.default.bold(`Usage by ${labelHeader} (${period})`);
|
|
31559
31787
|
console.log();
|
|
31560
31788
|
console.log(` ${title}`);
|
|
31561
31789
|
const widths = [24];
|
|
@@ -31576,14 +31804,14 @@ function renderGrouped(rows, groupBy, period, deltas) {
|
|
|
31576
31804
|
widths.push(7);
|
|
31577
31805
|
headers.push("Delta");
|
|
31578
31806
|
}
|
|
31579
|
-
console.log(
|
|
31580
|
-
console.log(
|
|
31581
|
-
console.log(
|
|
31807
|
+
console.log(import_picocolors27.default.dim(topBorder(widths)));
|
|
31808
|
+
console.log(import_picocolors27.default.cyan(import_picocolors27.default.bold(headerRow(headers, widths))));
|
|
31809
|
+
console.log(import_picocolors27.default.dim(separator(widths)));
|
|
31582
31810
|
let prevLabel = "";
|
|
31583
31811
|
for (let i2 = 0;i2 < rows.length; i2++) {
|
|
31584
31812
|
const r2 = rows[i2];
|
|
31585
31813
|
if (showDetail && prevLabel && r2.label !== prevLabel) {
|
|
31586
|
-
console.log(
|
|
31814
|
+
console.log(import_picocolors27.default.dim(separator(widths)));
|
|
31587
31815
|
}
|
|
31588
31816
|
const displayLabel = r2.label !== prevLabel ? r2.label : "";
|
|
31589
31817
|
prevLabel = r2.label;
|
|
@@ -31592,89 +31820,89 @@ function renderGrouped(rows, groupBy, period, deltas) {
|
|
|
31592
31820
|
];
|
|
31593
31821
|
let colIdx = 1;
|
|
31594
31822
|
if (showDetail) {
|
|
31595
|
-
cells.push(` ${padRight(
|
|
31823
|
+
cells.push(` ${padRight(import_picocolors27.default.dim(r2.detail ?? ""), widths[colIdx])} `);
|
|
31596
31824
|
colIdx++;
|
|
31597
31825
|
}
|
|
31598
|
-
cells.push(` ${padLeft(
|
|
31826
|
+
cells.push(` ${padLeft(import_picocolors27.default.magenta(String(r2.calls)), widths[colIdx])} `);
|
|
31599
31827
|
colIdx++;
|
|
31600
31828
|
if (showBreakdown) {
|
|
31601
|
-
cells.push(` ${padLeft(
|
|
31829
|
+
cells.push(` ${padLeft(import_picocolors27.default.green(formatTokens(r2.tokens.input)), widths[colIdx])} `);
|
|
31602
31830
|
colIdx++;
|
|
31603
|
-
cells.push(` ${padLeft(
|
|
31831
|
+
cells.push(` ${padLeft(import_picocolors27.default.yellow(formatTokens(r2.tokens.output)), widths[colIdx])} `);
|
|
31604
31832
|
colIdx++;
|
|
31605
|
-
cells.push(` ${padLeft(
|
|
31833
|
+
cells.push(` ${padLeft(import_picocolors27.default.dim(formatTokens(r2.tokens.cacheRead)), widths[colIdx])} `);
|
|
31606
31834
|
colIdx++;
|
|
31607
|
-
cells.push(` ${padLeft(
|
|
31835
|
+
cells.push(` ${padLeft(import_picocolors27.default.dim(formatTokens(r2.tokens.cacheWrite)), widths[colIdx])} `);
|
|
31608
31836
|
colIdx++;
|
|
31609
31837
|
}
|
|
31610
|
-
cells.push(` ${padLeft(
|
|
31838
|
+
cells.push(` ${padLeft(import_picocolors27.default.bold(formatTokens(r2.tokens.total)), widths[colIdx])} `);
|
|
31611
31839
|
colIdx++;
|
|
31612
|
-
cells.push(` ${padLeft(
|
|
31840
|
+
cells.push(` ${padLeft(import_picocolors27.default.red(formatCost(r2.cost)), widths[colIdx])} `);
|
|
31613
31841
|
colIdx++;
|
|
31614
31842
|
if (deltas) {
|
|
31615
31843
|
const d3 = deltas[i2];
|
|
31616
|
-
const deltaStr = d3 !== undefined ? formatDelta(d3) :
|
|
31844
|
+
const deltaStr = d3 !== undefined ? formatDelta(d3) : import_picocolors27.default.dim("-");
|
|
31617
31845
|
cells.push(` ${padLeft(deltaStr, widths[colIdx])} `);
|
|
31618
31846
|
}
|
|
31619
31847
|
console.log("\u2502" + cells.join("\u2502") + "\u2502");
|
|
31620
31848
|
}
|
|
31621
|
-
console.log(
|
|
31849
|
+
console.log(import_picocolors27.default.dim(bottomBorder(widths)));
|
|
31622
31850
|
}
|
|
31623
31851
|
function renderNoData() {
|
|
31624
31852
|
console.log();
|
|
31625
|
-
console.log(
|
|
31626
|
-
console.log(
|
|
31853
|
+
console.log(import_picocolors27.default.yellow("No usage data found for the specified period."));
|
|
31854
|
+
console.log(import_picocolors27.default.dim("Make sure OpenCode has been used and the database exists."));
|
|
31627
31855
|
}
|
|
31628
31856
|
// src/cli/usage/render-report.ts
|
|
31629
|
-
var
|
|
31857
|
+
var import_picocolors28 = __toESM(require_picocolors(), 1);
|
|
31630
31858
|
function renderReportAsTerminal(report, options) {
|
|
31631
|
-
const content = `User: ${
|
|
31859
|
+
const content = `User: ${import_picocolors28.default.cyan(options.user)} \u2502 Period: ${options.date} full day`;
|
|
31632
31860
|
const rawContentLen = stripAnsi2(content).length;
|
|
31633
31861
|
const title = `AI Usage Report \u2014 ${options.date}`;
|
|
31634
31862
|
const innerWidth = Math.max(title.length + 6, rawContentLen + 2);
|
|
31635
31863
|
const titlePad = innerWidth - title.length - 5;
|
|
31636
|
-
const titleLine = `\u256D\u2500\u2500\u2500 ${
|
|
31864
|
+
const titleLine = `\u256D\u2500\u2500\u2500 ${import_picocolors28.default.bold(title)} ${"\u2500".repeat(Math.max(1, titlePad))}\u256E`;
|
|
31637
31865
|
const contentLine = `\u2502 ${content}${" ".repeat(Math.max(0, innerWidth - rawContentLen - 2))} \u2502`;
|
|
31638
31866
|
const bottomLine = `\u2570${"\u2500".repeat(innerWidth)}\u256F`;
|
|
31639
31867
|
console.log();
|
|
31640
31868
|
console.log(titleLine);
|
|
31641
31869
|
console.log(contentLine);
|
|
31642
31870
|
console.log(bottomLine);
|
|
31643
|
-
const investmentTitle =
|
|
31871
|
+
const investmentTitle = import_picocolors28.default.bold("Investment");
|
|
31644
31872
|
console.log();
|
|
31645
31873
|
console.log(` ${investmentTitle}`);
|
|
31646
31874
|
const invW = [16, 12];
|
|
31647
|
-
console.log(
|
|
31875
|
+
console.log(import_picocolors28.default.dim(topBorder(invW)));
|
|
31648
31876
|
console.log("\u2502" + ` ${padRight("Metric", invW[0])} ` + "\u2502" + ` ${padRight("Value", invW[1])} ` + "\u2502");
|
|
31649
|
-
console.log(
|
|
31877
|
+
console.log(import_picocolors28.default.dim(separator(invW)));
|
|
31650
31878
|
console.log("\u2502" + ` ${padRight("Sessions", invW[0])} ` + "\u2502" + ` ${padLeft(String(report.investment.sessions), invW[1])} ` + "\u2502");
|
|
31651
31879
|
console.log("\u2502" + ` ${padRight("Total Tokens", invW[0])} ` + "\u2502" + ` ${padLeft(formatTokens(report.investment.tokens), invW[1])} ` + "\u2502");
|
|
31652
31880
|
console.log("\u2502" + ` ${padRight("Estimated Cost", invW[0])} ` + "\u2502" + ` ${padLeft(formatCost(report.investment.cost), invW[1])} ` + "\u2502");
|
|
31653
31881
|
console.log("\u2502" + ` ${padRight("Models Used", invW[0])} ` + "\u2502" + ` ${padLeft(String(report.investment.models_used.length), invW[1])} ` + "\u2502");
|
|
31654
|
-
console.log(
|
|
31882
|
+
console.log(import_picocolors28.default.dim(bottomBorder(invW)));
|
|
31655
31883
|
if (report.output) {
|
|
31656
|
-
const outputTitle =
|
|
31884
|
+
const outputTitle = import_picocolors28.default.bold("Output");
|
|
31657
31885
|
console.log();
|
|
31658
31886
|
console.log(` ${outputTitle}`);
|
|
31659
31887
|
const outW = [16, 12];
|
|
31660
|
-
console.log(
|
|
31888
|
+
console.log(import_picocolors28.default.dim(topBorder(outW)));
|
|
31661
31889
|
console.log("\u2502" + ` ${padRight("Metric", outW[0])} ` + "\u2502" + ` ${padRight("Value", outW[1])} ` + "\u2502");
|
|
31662
|
-
console.log(
|
|
31890
|
+
console.log(import_picocolors28.default.dim(separator(outW)));
|
|
31663
31891
|
console.log("\u2502" + ` ${padRight("Commits", outW[0])} ` + "\u2502" + ` ${padLeft(String(report.output.commits), outW[1])} ` + "\u2502");
|
|
31664
31892
|
console.log("\u2502" + ` ${padRight("Files Changed", outW[0])} ` + "\u2502" + ` ${padLeft(String(report.output.files_changed), outW[1])} ` + "\u2502");
|
|
31665
31893
|
console.log("\u2502" + ` ${padRight("Lines Added", outW[0])} ` + "\u2502" + ` ${padLeft(report.output.lines_added.toLocaleString(), outW[1])} ` + "\u2502");
|
|
31666
31894
|
console.log("\u2502" + ` ${padRight("Lines Removed", outW[0])} ` + "\u2502" + ` ${padLeft(report.output.lines_removed.toLocaleString(), outW[1])} ` + "\u2502");
|
|
31667
31895
|
console.log("\u2502" + ` ${padRight("Branches", outW[0])} ` + "\u2502" + ` ${padLeft(String(report.output.branches.length), outW[1])} ` + "\u2502");
|
|
31668
|
-
console.log(
|
|
31896
|
+
console.log(import_picocolors28.default.dim(bottomBorder(outW)));
|
|
31669
31897
|
}
|
|
31670
31898
|
if (report.efficiency) {
|
|
31671
|
-
const efficiencyTitle =
|
|
31899
|
+
const efficiencyTitle = import_picocolors28.default.bold("Efficiency");
|
|
31672
31900
|
console.log();
|
|
31673
31901
|
console.log(` ${efficiencyTitle}`);
|
|
31674
31902
|
const effW = [24, 16];
|
|
31675
|
-
console.log(
|
|
31903
|
+
console.log(import_picocolors28.default.dim(topBorder(effW)));
|
|
31676
31904
|
console.log("\u2502" + ` ${padRight("Metric", effW[0])} ` + "\u2502" + ` ${padRight("Value", effW[1])} ` + "\u2502");
|
|
31677
|
-
console.log(
|
|
31905
|
+
console.log(import_picocolors28.default.dim(separator(effW)));
|
|
31678
31906
|
if (report.efficiency.cost_per_commit !== null) {
|
|
31679
31907
|
console.log("\u2502" + ` ${padRight("Cost per Commit", effW[0])} ` + "\u2502" + ` ${padLeft(formatCost(report.efficiency.cost_per_commit), effW[1])} ` + "\u2502");
|
|
31680
31908
|
}
|
|
@@ -31687,7 +31915,7 @@ function renderReportAsTerminal(report, options) {
|
|
|
31687
31915
|
if (report.efficiency.session_productivity_score !== null) {
|
|
31688
31916
|
console.log("\u2502" + ` ${padRight("Session Productivity", effW[0])} ` + "\u2502" + ` ${padLeft(report.efficiency.session_productivity_score.toFixed(2), effW[1])} ` + "\u2502");
|
|
31689
31917
|
}
|
|
31690
|
-
console.log(
|
|
31918
|
+
console.log(import_picocolors28.default.dim(bottomBorder(effW)));
|
|
31691
31919
|
}
|
|
31692
31920
|
if (report.project_breakdown && report.project_breakdown.length > 1) {
|
|
31693
31921
|
renderBreakdownTable("Project Breakdown", report.project_breakdown);
|
|
@@ -31698,26 +31926,26 @@ function renderReportAsTerminal(report, options) {
|
|
|
31698
31926
|
}
|
|
31699
31927
|
function renderBreakdownTable(title, entries) {
|
|
31700
31928
|
console.log();
|
|
31701
|
-
console.log(` ${
|
|
31929
|
+
console.log(` ${import_picocolors28.default.bold(title)}`);
|
|
31702
31930
|
const labelWidth = Math.max(16, ...entries.map((e2) => e2.label.length + 2));
|
|
31703
31931
|
const colWidths = [labelWidth, 8, 10, 7, 8];
|
|
31704
31932
|
const headers = ["Name", "Sessions", "Tokens", "Commits", "+Lines"];
|
|
31705
|
-
console.log(
|
|
31933
|
+
console.log(import_picocolors28.default.dim(topBorder(colWidths)));
|
|
31706
31934
|
console.log(headerRow(headers, colWidths));
|
|
31707
|
-
console.log(
|
|
31935
|
+
console.log(import_picocolors28.default.dim(separator(colWidths)));
|
|
31708
31936
|
for (const entry of entries) {
|
|
31709
31937
|
console.log("\u2502" + ` ${padRight(entry.label, colWidths[0])} ` + "\u2502" + ` ${padLeft(String(entry.sessions), colWidths[1])} ` + "\u2502" + ` ${padLeft(formatTokens(entry.tokens), colWidths[2])} ` + "\u2502" + ` ${padLeft(String(entry.commits), colWidths[3])} ` + "\u2502" + ` ${padLeft(`+${entry.lines_added.toLocaleString()}`, colWidths[4])} ` + "\u2502");
|
|
31710
31938
|
}
|
|
31711
|
-
console.log(
|
|
31939
|
+
console.log(import_picocolors28.default.dim(bottomBorder(colWidths)));
|
|
31712
31940
|
}
|
|
31713
31941
|
// src/cli/usage/report-generator.ts
|
|
31714
31942
|
import { execSync } from "child_process";
|
|
31715
|
-
import { writeFileSync as
|
|
31943
|
+
import { writeFileSync as writeFileSync12 } from "fs";
|
|
31716
31944
|
|
|
31717
31945
|
// src/cli/usage/report-data-aggregator.ts
|
|
31718
31946
|
init_data_path();
|
|
31719
31947
|
import { Database as Database3 } from "bun:sqlite";
|
|
31720
|
-
import { existsSync as
|
|
31948
|
+
import { existsSync as existsSync36 } from "fs";
|
|
31721
31949
|
import { join as join34 } from "path";
|
|
31722
31950
|
|
|
31723
31951
|
// src/cli/usage/efficiency-calculator.ts
|
|
@@ -31756,7 +31984,7 @@ function calculateAllMetrics(params) {
|
|
|
31756
31984
|
init_data_path();
|
|
31757
31985
|
import { Database as Database2 } from "bun:sqlite";
|
|
31758
31986
|
import { join as join33 } from "path";
|
|
31759
|
-
import { existsSync as
|
|
31987
|
+
import { existsSync as existsSync35, mkdirSync as mkdirSync8 } from "fs";
|
|
31760
31988
|
|
|
31761
31989
|
// src/features/dev-metrics/schema.ts
|
|
31762
31990
|
var CREATE_SESSION_CONTEXT_TABLE = `
|
|
@@ -31811,7 +32039,7 @@ class DevMetricsDB {
|
|
|
31811
32039
|
constructor(dbPath) {
|
|
31812
32040
|
this.path = dbPath ?? join33(getDataDir(), "oh-my-opencode", "dev-metrics.db");
|
|
31813
32041
|
const dir = this.path.substring(0, this.path.lastIndexOf("/"));
|
|
31814
|
-
if (!
|
|
32042
|
+
if (!existsSync35(dir)) {
|
|
31815
32043
|
mkdirSync8(dir, { recursive: true });
|
|
31816
32044
|
}
|
|
31817
32045
|
this.db = new Database2(this.path);
|
|
@@ -32156,7 +32384,7 @@ function buildReportData(options) {
|
|
|
32156
32384
|
sessions: investmentSessions
|
|
32157
32385
|
};
|
|
32158
32386
|
const devMetricsPath = options.devMetricsDbPath ?? getDefaultDevMetricsDbPath();
|
|
32159
|
-
if (!
|
|
32387
|
+
if (!existsSync36(devMetricsPath)) {
|
|
32160
32388
|
return { investment, output: null, efficiency: null, project_breakdown: null, branch_breakdown: null };
|
|
32161
32389
|
}
|
|
32162
32390
|
const outputResult = readOutputData(devMetricsPath, dateRange);
|
|
@@ -32383,7 +32611,7 @@ function executeReport(options) {
|
|
|
32383
32611
|
}
|
|
32384
32612
|
if (options.output) {
|
|
32385
32613
|
const markdown = renderReportAsMarkdown(report, { user: userName, date: dateLabel });
|
|
32386
|
-
|
|
32614
|
+
writeFileSync12(options.output, markdown, "utf-8");
|
|
32387
32615
|
console.log(`Report saved to ${options.output}`);
|
|
32388
32616
|
} else {
|
|
32389
32617
|
renderReportAsTerminal(report, { user: userName, date: dateLabel });
|
|
@@ -32881,6 +33109,7 @@ program2.command("version").description("Show version information").action(() =>
|
|
|
32881
33109
|
});
|
|
32882
33110
|
program2.addCommand(createMcpOAuthCommand());
|
|
32883
33111
|
program2.addCommand(createUsageCommand());
|
|
33112
|
+
program2.addCommand(createMinimaxCommand());
|
|
32884
33113
|
program2.command("copilot-x").description("Manage GitHub Copilot accounts: add, switch, check quotas, toggle Loop Safety/Network Retry").addHelpText("after", `
|
|
32885
33114
|
Examples:
|
|
32886
33115
|
$ bunx oh-my-opencode copilot-x
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function runMinimaxTui(): Promise<number>;
|
package/dist/index.js
CHANGED
|
@@ -51,7 +51,7 @@ var package_default;
|
|
|
51
51
|
var init_package = __esm(() => {
|
|
52
52
|
package_default = {
|
|
53
53
|
name: "oh-my-magento",
|
|
54
|
-
version: "0.3.
|
|
54
|
+
version: "0.3.2",
|
|
55
55
|
description: "Magento 2 + Hyv\xE4 Enterprise E-Commerce Intelligent Agent Orchestration System - OpenCode Plugin",
|
|
56
56
|
main: "dist/index.js",
|
|
57
57
|
types: "dist/index.d.ts",
|
|
@@ -131,17 +131,17 @@ var init_package = __esm(() => {
|
|
|
131
131
|
typescript: "^5.7.3"
|
|
132
132
|
},
|
|
133
133
|
optionalDependencies: {
|
|
134
|
-
"oh-my-magento-darwin-arm64": "0.3.
|
|
135
|
-
"oh-my-magento-darwin-x64": "0.3.
|
|
136
|
-
"oh-my-magento-darwin-x64-baseline": "0.3.
|
|
137
|
-
"oh-my-magento-linux-arm64": "0.3.
|
|
138
|
-
"oh-my-magento-linux-arm64-musl": "0.3.
|
|
139
|
-
"oh-my-magento-linux-x64": "0.3.
|
|
140
|
-
"oh-my-magento-linux-x64-baseline": "0.3.
|
|
141
|
-
"oh-my-magento-linux-x64-musl": "0.3.
|
|
142
|
-
"oh-my-magento-linux-x64-musl-baseline": "0.3.
|
|
143
|
-
"oh-my-magento-windows-x64": "0.3.
|
|
144
|
-
"oh-my-magento-windows-x64-baseline": "0.3.
|
|
134
|
+
"oh-my-magento-darwin-arm64": "0.3.2",
|
|
135
|
+
"oh-my-magento-darwin-x64": "0.3.2",
|
|
136
|
+
"oh-my-magento-darwin-x64-baseline": "0.3.2",
|
|
137
|
+
"oh-my-magento-linux-arm64": "0.3.2",
|
|
138
|
+
"oh-my-magento-linux-arm64-musl": "0.3.2",
|
|
139
|
+
"oh-my-magento-linux-x64": "0.3.2",
|
|
140
|
+
"oh-my-magento-linux-x64-baseline": "0.3.2",
|
|
141
|
+
"oh-my-magento-linux-x64-musl": "0.3.2",
|
|
142
|
+
"oh-my-magento-linux-x64-musl-baseline": "0.3.2",
|
|
143
|
+
"oh-my-magento-windows-x64": "0.3.2",
|
|
144
|
+
"oh-my-magento-windows-x64-baseline": "0.3.2"
|
|
145
145
|
},
|
|
146
146
|
overrides: {
|
|
147
147
|
"@opencode-ai/sdk": "^1.2.24"
|
|
@@ -17323,7 +17323,6 @@ var AGENT_MODEL_REQUIREMENTS = {
|
|
|
17323
17323
|
variant: "max"
|
|
17324
17324
|
},
|
|
17325
17325
|
{ providers: ["opencode-go"], model: "kimi-k2.5" },
|
|
17326
|
-
{ providers: ["kimi-for-coding"], model: "k2p5" },
|
|
17327
17326
|
{
|
|
17328
17327
|
providers: [
|
|
17329
17328
|
"opencode",
|
|
@@ -17335,6 +17334,7 @@ var AGENT_MODEL_REQUIREMENTS = {
|
|
|
17335
17334
|
],
|
|
17336
17335
|
model: "kimi-k2.5"
|
|
17337
17336
|
},
|
|
17337
|
+
{ providers: ["kimi-for-coding"], model: "k2p5" },
|
|
17338
17338
|
{ providers: ["openai", "github-copilot", "opencode"], model: "gpt-5.4", variant: "medium" },
|
|
17339
17339
|
{ providers: ["zai-coding-plan", "opencode"], model: "glm-5" },
|
|
17340
17340
|
{ providers: ["opencode"], model: "big-pickle" }
|
|
@@ -17552,10 +17552,6 @@ var CATEGORY_MODEL_REQUIREMENTS = {
|
|
|
17552
17552
|
},
|
|
17553
17553
|
quick: {
|
|
17554
17554
|
fallbackChain: [
|
|
17555
|
-
{
|
|
17556
|
-
providers: ["openai", "github-copilot", "opencode"],
|
|
17557
|
-
model: "gpt-5.4-mini"
|
|
17558
|
-
},
|
|
17559
17555
|
{
|
|
17560
17556
|
providers: ["anthropic", "github-copilot", "opencode"],
|
|
17561
17557
|
model: "claude-haiku-4-5"
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "oh-my-magento",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.2",
|
|
4
4
|
"description": "Magento 2 + Hyvä Enterprise E-Commerce Intelligent Agent Orchestration System - OpenCode Plugin",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -80,17 +80,17 @@
|
|
|
80
80
|
"typescript": "^5.7.3"
|
|
81
81
|
},
|
|
82
82
|
"optionalDependencies": {
|
|
83
|
-
"oh-my-magento-darwin-arm64": "0.3.
|
|
84
|
-
"oh-my-magento-darwin-x64": "0.3.
|
|
85
|
-
"oh-my-magento-darwin-x64-baseline": "0.3.
|
|
86
|
-
"oh-my-magento-linux-arm64": "0.3.
|
|
87
|
-
"oh-my-magento-linux-arm64-musl": "0.3.
|
|
88
|
-
"oh-my-magento-linux-x64": "0.3.
|
|
89
|
-
"oh-my-magento-linux-x64-baseline": "0.3.
|
|
90
|
-
"oh-my-magento-linux-x64-musl": "0.3.
|
|
91
|
-
"oh-my-magento-linux-x64-musl-baseline": "0.3.
|
|
92
|
-
"oh-my-magento-windows-x64": "0.3.
|
|
93
|
-
"oh-my-magento-windows-x64-baseline": "0.3.
|
|
83
|
+
"oh-my-magento-darwin-arm64": "0.3.2",
|
|
84
|
+
"oh-my-magento-darwin-x64": "0.3.2",
|
|
85
|
+
"oh-my-magento-darwin-x64-baseline": "0.3.2",
|
|
86
|
+
"oh-my-magento-linux-arm64": "0.3.2",
|
|
87
|
+
"oh-my-magento-linux-arm64-musl": "0.3.2",
|
|
88
|
+
"oh-my-magento-linux-x64": "0.3.2",
|
|
89
|
+
"oh-my-magento-linux-x64-baseline": "0.3.2",
|
|
90
|
+
"oh-my-magento-linux-x64-musl": "0.3.2",
|
|
91
|
+
"oh-my-magento-linux-x64-musl-baseline": "0.3.2",
|
|
92
|
+
"oh-my-magento-windows-x64": "0.3.2",
|
|
93
|
+
"oh-my-magento-windows-x64-baseline": "0.3.2"
|
|
94
94
|
},
|
|
95
95
|
"overrides": {
|
|
96
96
|
"@opencode-ai/sdk": "^1.2.24"
|