mover-os 4.7.9 → 4.7.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.md CHANGED
@@ -8,7 +8,7 @@ Mover OS turns Obsidian into an AI-powered execution engine. It audits your beha
8
8
 
9
9
  **Works best with Claude Code.** Supports 15 AI agents.
10
10
 
11
- **Version:** 4.7.9 | **Status:** Production
11
+ **Version:** 4.7.10 | **Status:** Production
12
12
 
13
13
  ---
14
14
 
package/install.js CHANGED
@@ -5629,6 +5629,34 @@ function collectInventory() {
5629
5629
  };
5630
5630
  }
5631
5631
 
5632
+ // The public npm package is intentionally only the installer + dashboard. The
5633
+ // paid workflows, skills, and hooks arrive after license validation, so a
5634
+ // clean `npx mover-os help` cannot derive their counts from src/. Use the
5635
+ // release-generated public counts file in that environment without exposing
5636
+ // the paid payload on npm. Repository/dev runs still derive the full inventory
5637
+ // from source above, which keeps docs generation exact.
5638
+ function collectPublicCounts() {
5639
+ try {
5640
+ const inv = collectInventory();
5641
+ return {
5642
+ workflows: inv.workflows.length,
5643
+ skills: inv.skills.length,
5644
+ agents: inv.agents.length,
5645
+ };
5646
+ } catch (_) {
5647
+ try {
5648
+ const counts = JSON.parse(fs.readFileSync(path.join(__dirname, "src", "system", "counts.json"), "utf8"));
5649
+ return {
5650
+ workflows: Number(counts.workflows) || 0,
5651
+ skills: Number(counts.skills) || 0,
5652
+ agents: Number(counts.agents) || AGENT_SELECTIONS.length,
5653
+ };
5654
+ } catch (_) {
5655
+ return { workflows: 0, skills: 0, agents: AGENT_SELECTIONS.length };
5656
+ }
5657
+ }
5658
+ }
5659
+
5632
5660
  function cmdInventory() {
5633
5661
  // Pure JSON on stdout — no banner, no color — so callers can pipe it.
5634
5662
  process.stdout.write(JSON.stringify(collectInventory(), null, 2) + "\n");
@@ -7130,7 +7158,7 @@ async function cmdHelp(opts) {
7130
7158
 
7131
7159
  // Counts computed, never typed: this screen shipped "23 commands / 61
7132
7160
  // packs / 16 agents" while the bundle held 25/70/15.
7133
- const inv = collectInventory();
7161
+ const inv = collectPublicCounts();
7134
7162
  const pages = [
7135
7163
  {
7136
7164
  title: "What is Mover OS?",
@@ -7145,10 +7173,10 @@ async function cmdHelp(opts) {
7145
7173
  "",
7146
7174
  `${dim("Three things make it work:")}`,
7147
7175
  ` ${cyan("1.")} The ${bold("Engine")} — files that store your identity, strategy, goals`,
7148
- ` ${cyan("2.")} ${bold("Workflows")} — ${inv.workflows.length} commands that run your day (plan, build, log, repeat)`,
7149
- ` ${cyan("3.")} ${bold("Skills")} — ${inv.skills.length} packs that make your AI genuinely useful`,
7176
+ ` ${cyan("2.")} ${bold("Workflows")} — ${inv.workflows} commands that run your day (plan, build, log, repeat)`,
7177
+ ` ${cyan("3.")} ${bold("Skills")} — ${inv.skills} packs that make your AI genuinely useful`,
7150
7178
  "",
7151
- `Works across ${inv.agents.length} agents. Claude Code, Cursor, Gemini, all of them.`,
7179
+ `Works across ${inv.agents} agents. Claude Code, Cursor, Gemini, all of them.`,
7152
7180
  `Same context, every editor. ${dim("Press → to continue.")}`,
7153
7181
  ],
7154
7182
  },
@@ -7188,7 +7216,7 @@ async function cmdHelp(opts) {
7188
7216
  ],
7189
7217
  },
7190
7218
  {
7191
- title: "23 Workflows",
7219
+ title: `${inv.workflows} Workflows`,
7192
7220
  body: [
7193
7221
  `${dim("Slash commands inside your AI agent. Type / and go.")}`,
7194
7222
  "",
@@ -7206,7 +7234,7 @@ async function cmdHelp(opts) {
7206
7234
  ],
7207
7235
  },
7208
7236
  {
7209
- title: "61 Skill Packs",
7237
+ title: `${inv.skills} Skill Packs`,
7210
7238
  body: [
7211
7239
  `${dim("Specialized knowledge your AI loads automatically.")}`,
7212
7240
  "",
@@ -7301,7 +7329,7 @@ async function cmdHelp(opts) {
7301
7329
  `${dim("Keep everything in sync without thinking about it.")}`,
7302
7330
  "",
7303
7331
  ` ${cyan("sync")} Update all agents to latest rules and skills`,
7304
- ` ${dim("One command updates 16 agents. Shows what changed.")}`,
7332
+ ` ${dim(`One command updates ${inv.agents} agents. Shows what changed.`)}`,
7305
7333
  "",
7306
7334
  ` ${cyan("backup")} Backup Engine, Areas, or agent configs`,
7307
7335
  ` ${dim("With manifest. Knows what's in each backup.")}`,
@@ -7317,7 +7345,7 @@ async function cmdHelp(opts) {
7317
7345
  ],
7318
7346
  },
7319
7347
  {
7320
- title: "16 Agents, One Brain",
7348
+ title: `${inv.agents} Agents, One Brain`,
7321
7349
  body: [
7322
7350
  `${dim("Install once. Every agent gets the same context.")}`,
7323
7351
  "",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mover-os",
3
- "version": "4.7.9",
3
+ "version": "4.7.10",
4
4
  "description": "Your AI co-founder. Remembers your goals, pushes back when you drift. Works with 15 AI agents.",
5
5
  "bin": {
6
6
  "moveros": "install.js"
@@ -16,7 +16,8 @@
16
16
  "src/dashboard/templates/**",
17
17
  "src/dashboard/static/**",
18
18
  "src/dashboard/lib/**",
19
- "src/dashboard/ui/dist/**"
19
+ "src/dashboard/ui/dist/**",
20
+ "src/system/counts.json"
20
21
  ],
21
22
  "scripts": {
22
23
  "test": "node test/runner.mjs",
@@ -234,7 +234,12 @@ function createShortcut({ name, nodeBin, entry, iconPath, platform, homeDir, des
234
234
  created.push(deskBat);
235
235
  } catch (_) { /* Desktop may not exist (headless) — the stable .bat still works */ }
236
236
  }
237
- return { created, platform: plat };
237
+ const hasDesktopLauncher = created.some((createdPath) => createdPath === lnkPath || path.dirname(createdPath) === desktop);
238
+ return {
239
+ created,
240
+ platform: plat,
241
+ ...(hasDesktopLauncher ? {} : { warning: "The launcher was created, but Windows could not add it to your Desktop." }),
242
+ };
238
243
  }
239
244
 
240
245
  if (plat === "linux") {