mover-os 4.6.0 → 4.6.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/install.js +80 -22
- package/package.json +1 -1
package/install.js
CHANGED
|
@@ -1670,9 +1670,14 @@ async function runUninstall(vaultPath) {
|
|
|
1670
1670
|
barLn(`${dim("Could not reach Polar — license not deactivated")}`);
|
|
1671
1671
|
}
|
|
1672
1672
|
}
|
|
1673
|
-
// Remove config file
|
|
1674
|
-
|
|
1675
|
-
|
|
1673
|
+
// Remove config file but preserve license key for reinstall
|
|
1674
|
+
if (cfg.licenseKey) {
|
|
1675
|
+
fs.writeFileSync(configPath, JSON.stringify({ licenseKey: cfg.licenseKey }, null, 2), "utf8");
|
|
1676
|
+
barLn(`${green("\u2713")} ${dim("~/.mover/config.json (license key preserved for reinstall)")}`);
|
|
1677
|
+
} else {
|
|
1678
|
+
fs.unlinkSync(configPath);
|
|
1679
|
+
barLn(`${green("\u2713")} ${dim("~/.mover/config.json")}`);
|
|
1680
|
+
}
|
|
1676
1681
|
removed++;
|
|
1677
1682
|
} catch {}
|
|
1678
1683
|
}
|
|
@@ -1880,13 +1885,14 @@ const AGENT_REGISTRY = {
|
|
|
1880
1885
|
},
|
|
1881
1886
|
};
|
|
1882
1887
|
|
|
1883
|
-
// User-selectable agents (
|
|
1888
|
+
// User-selectable agents (15 selections). Each maps to 1+ install targets.
|
|
1884
1889
|
const AGENT_SELECTIONS = [
|
|
1885
1890
|
{ id: "claude-code", targets: ["claude-code"], name: "Claude Code" },
|
|
1886
1891
|
{ id: "cursor", targets: ["cursor"], name: "Cursor" },
|
|
1887
1892
|
{ id: "cline", targets: ["cline"], name: "Cline" },
|
|
1888
1893
|
{ id: "windsurf", targets: ["windsurf"], name: "Windsurf" },
|
|
1889
|
-
{ id: "gemini-cli", targets: ["gemini-cli"
|
|
1894
|
+
{ id: "gemini-cli", targets: ["gemini-cli"], name: "Gemini CLI" },
|
|
1895
|
+
{ id: "antigravity", targets: ["antigravity"], name: "Antigravity" },
|
|
1890
1896
|
{ id: "copilot", targets: ["copilot"], name: "GitHub Copilot" },
|
|
1891
1897
|
{ id: "codex", targets: ["codex"], name: "Codex" },
|
|
1892
1898
|
{ id: "amazon-q", targets: ["amazon-q"], name: "Amazon Q Developer" },
|
|
@@ -5093,6 +5099,21 @@ async function cmdUpdateComprehensive(opts, bundleDir, startTime) {
|
|
|
5093
5099
|
return;
|
|
5094
5100
|
}
|
|
5095
5101
|
|
|
5102
|
+
// ── Confirmation gate ──
|
|
5103
|
+
barLn();
|
|
5104
|
+
const updateConfirm = await interactiveSelect(
|
|
5105
|
+
[
|
|
5106
|
+
{ id: "yes", name: "Apply updates", tier: `${totalChanged} file${totalChanged > 1 ? "s" : ""} will be updated` },
|
|
5107
|
+
{ id: "no", name: "Cancel", tier: "No changes will be made" },
|
|
5108
|
+
],
|
|
5109
|
+
{ multi: false, defaultIndex: 0 }
|
|
5110
|
+
);
|
|
5111
|
+
if (!updateConfirm || updateConfirm === "no") {
|
|
5112
|
+
outro("Update cancelled.");
|
|
5113
|
+
return;
|
|
5114
|
+
}
|
|
5115
|
+
barLn();
|
|
5116
|
+
|
|
5096
5117
|
// ── Apply safe system files directly (no user customizations in these) ──
|
|
5097
5118
|
const home = os.homedir();
|
|
5098
5119
|
let appliedCount = 0;
|
|
@@ -5677,8 +5698,9 @@ async function main() {
|
|
|
5677
5698
|
if (selectedIds.includes("claude-code")) {
|
|
5678
5699
|
barLn();
|
|
5679
5700
|
question("Install Claude Code status line?");
|
|
5680
|
-
barLn(dim("
|
|
5681
|
-
barLn(dim(" Example:
|
|
5701
|
+
barLn(dim(" Live status bar with model, context %, project, session cost, and Mover OS data."));
|
|
5702
|
+
barLn(dim(" Example: Opus 4.6 · 24% · my-project (main) · 2h14m · $12.50"));
|
|
5703
|
+
barLn(dim(" ▸ next task · 2/5 done · Sleep by 22:00 · logged 30m ago"));
|
|
5682
5704
|
barLn();
|
|
5683
5705
|
|
|
5684
5706
|
const slChoice = await interactiveSelect(
|
|
@@ -5805,30 +5827,33 @@ async function main() {
|
|
|
5805
5827
|
}
|
|
5806
5828
|
}
|
|
5807
5829
|
|
|
5808
|
-
// ── Settings step — let user configure before install ──
|
|
5830
|
+
// ── Settings step — let user configure before install (loops until esc) ──
|
|
5809
5831
|
{
|
|
5810
5832
|
barLn();
|
|
5811
|
-
question("Configure settings " + dim("(esc to
|
|
5833
|
+
question("Configure settings " + dim("(esc to continue with defaults)"));
|
|
5812
5834
|
barLn();
|
|
5813
|
-
|
|
5814
|
-
|
|
5815
|
-
|
|
5816
|
-
|
|
5817
|
-
|
|
5818
|
-
|
|
5819
|
-
|
|
5820
|
-
|
|
5835
|
+
let editingSettings = true;
|
|
5836
|
+
while (editingSettings) {
|
|
5837
|
+
const cfgPath = path.join(os.homedir(), ".mover", "config.json");
|
|
5838
|
+
let cfg = {};
|
|
5839
|
+
if (fs.existsSync(cfgPath)) { try { cfg = JSON.parse(fs.readFileSync(cfgPath, "utf8")); } catch {} }
|
|
5840
|
+
if (!cfg.settings) cfg.settings = {};
|
|
5841
|
+
|
|
5842
|
+
const settingsItems = [
|
|
5843
|
+
{ id: "review_day", name: `review_day ${(cfg.settings.review_day || "Sunday").toString().padEnd(12)}Weekly review day` },
|
|
5844
|
+
{ id: "track_food", name: `track_food ${(cfg.settings.track_food !== undefined ? (cfg.settings.track_food ? "on" : "off") : "on").padEnd(12)}Track food in daily notes` },
|
|
5845
|
+
{ id: "track_sleep", name: `track_sleep ${(cfg.settings.track_sleep !== undefined ? (cfg.settings.track_sleep ? "on" : "off") : "on").padEnd(12)}Track sleep in daily notes` },
|
|
5846
|
+
{ id: "friction_level", name: `friction_level ${(cfg.settings.friction_level || 3).toString().padEnd(12)}Max friction level (1-4)` },
|
|
5847
|
+
];
|
|
5848
|
+
const settingsPick = await interactiveSelect(settingsItems);
|
|
5849
|
+
if (!settingsPick) { editingSettings = false; break; }
|
|
5821
5850
|
const meta = KNOWN_SETTINGS[settingsPick];
|
|
5822
5851
|
if (meta) {
|
|
5823
|
-
const cfgPath = path.join(os.homedir(), ".mover", "config.json");
|
|
5824
|
-
let cfg = {};
|
|
5825
|
-
if (fs.existsSync(cfgPath)) { try { cfg = JSON.parse(fs.readFileSync(cfgPath, "utf8")); } catch {} }
|
|
5826
|
-
if (!cfg.settings) cfg.settings = {};
|
|
5827
5852
|
if (meta.type === "boolean") {
|
|
5828
5853
|
cfg.settings[settingsPick] = !(cfg.settings[settingsPick] !== undefined ? cfg.settings[settingsPick] : meta.defaults);
|
|
5829
5854
|
statusLine("ok", settingsPick, cfg.settings[settingsPick] ? "on" : "off");
|
|
5830
5855
|
} else {
|
|
5831
|
-
const answer = await textInput({ label: settingsPick, initial: String(meta.defaults) });
|
|
5856
|
+
const answer = await textInput({ label: settingsPick, initial: String(cfg.settings[settingsPick] !== undefined ? cfg.settings[settingsPick] : meta.defaults) });
|
|
5832
5857
|
if (answer !== null && answer.trim() !== "") {
|
|
5833
5858
|
cfg.settings[settingsPick] = meta.type === "number" ? parseInt(answer.trim(), 10) : answer.trim();
|
|
5834
5859
|
statusLine("ok", settingsPick, JSON.stringify(cfg.settings[settingsPick]));
|
|
@@ -5840,6 +5865,39 @@ async function main() {
|
|
|
5840
5865
|
}
|
|
5841
5866
|
}
|
|
5842
5867
|
|
|
5868
|
+
// ── Confirmation gate — show what will be installed ──
|
|
5869
|
+
{
|
|
5870
|
+
barLn();
|
|
5871
|
+
question(bold("Review your selections:"));
|
|
5872
|
+
barLn();
|
|
5873
|
+
barLn(` ${bold("Vault:")} ${vaultPath}`);
|
|
5874
|
+
barLn(` ${bold("Agents:")} ${selectedAgents.map((a) => a.name).join(", ")}`);
|
|
5875
|
+
if (installSkills && selectedCategories) {
|
|
5876
|
+
barLn(` ${bold("Skills:")} ${[...selectedCategories].join(", ")}`);
|
|
5877
|
+
} else if (installSkills) {
|
|
5878
|
+
barLn(` ${bold("Skills:")} all categories`);
|
|
5879
|
+
} else {
|
|
5880
|
+
barLn(` ${bold("Skills:")} none`);
|
|
5881
|
+
}
|
|
5882
|
+
if (selectedIds.includes("claude-code")) {
|
|
5883
|
+
barLn(` ${bold("Status line:")} ${installStatusLine ? "yes" : "no"}`);
|
|
5884
|
+
}
|
|
5885
|
+
barLn(` ${bold("Prayer:")} ${prayerSetup ? "yes" : "no"}`);
|
|
5886
|
+
barLn();
|
|
5887
|
+
|
|
5888
|
+
const confirmChoice = await interactiveSelect(
|
|
5889
|
+
[
|
|
5890
|
+
{ id: "yes", name: "Install", tier: "Proceed with the selections above" },
|
|
5891
|
+
{ id: "no", name: "Cancel", tier: "Go back and start over" },
|
|
5892
|
+
],
|
|
5893
|
+
{ multi: false, defaultIndex: 0 }
|
|
5894
|
+
);
|
|
5895
|
+
if (!confirmChoice || confirmChoice === "no") {
|
|
5896
|
+
outro("Cancelled.");
|
|
5897
|
+
return;
|
|
5898
|
+
}
|
|
5899
|
+
}
|
|
5900
|
+
|
|
5843
5901
|
// ── Install with animated spinners ──
|
|
5844
5902
|
barLn();
|
|
5845
5903
|
question(bold("Installing..."));
|