vectorvesper 2.5.0 → 2.6.0

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
@@ -1,113 +1,113 @@
1
- <!--
2
- BANNER: host a wide image (≈1280×640) at an ABSOLUTE url — relative paths do
3
- NOT render on npmjs.com — then uncomment this block:
4
-
5
- <p align="center">
6
- <a href="https://vectorvesper.dev">
7
- <img src="https://vectorvesper.dev/banner.png" alt="Vector Vesper" width="100%" />
8
- </a>
9
- </p>
10
- -->
11
-
12
- <h1 align="center">Vector Vesper</h1>
13
-
14
- <p align="center">
15
- Production-grade WebGL, 3D, and motion components for React. Copy directly into your codebase and own the code.
16
- </p>
17
-
18
- <p align="center">
19
- <a href="https://www.npmjs.com/package/vectorvesper"><img src="https://img.shields.io/npm/v/vectorvesper?color=7EACB5&label=npm" alt="npm version" /></a>
20
- <a href="https://github.com/vectorvesper/vv-components/blob/main/LICENSE"><img src="https://img.shields.io/github/license/vectorvesper/vv-components?color=7EACB5&label=license" alt="license" /></a>
21
- <a href="https://vectorvesper.dev"><img src="https://img.shields.io/badge/docs-vectorvesper.dev-7EACB5" alt="docs" /></a>
22
- </p>
23
-
24
- ---
25
-
26
- > Vector Vesper is a CLI you run with `npx`, not a package you install. Start with `npx vectorvesper init` below.
27
-
28
- **Vector Vesper** is a motion toolkit for React consisting of 3D animations, shaders, and advanced motion components.
29
-
30
- The CLI writes the component code directly into your repository. You have full control over the math, the shaders, and the styles.
31
-
32
- ## Quick Start
33
-
34
- ```bash
35
- # Initialize project configuration
36
- npx vectorvesper init
37
-
38
- # Add a visual component
39
- npx vectorvesper add video-card
40
- ```
41
-
42
- The CLI auto-detects your workspace, installs required animation dependencies (such as `three`, `@react-three/fiber`, or `gsap`), and writes the code to `@/components/vv/`.
43
-
44
- ```tsx
45
- import { VideoCard } from "@/components/vv/video-card";
46
-
47
- export default function Page() {
48
- return (
49
- <div className="h-screen w-full">
50
- <VideoCard src="/clip.mp4" />
51
- </div>
52
- );
53
- }
54
- ```
55
-
56
- ## MCP server — motion advice for your coding agent
57
-
58
- The same CLI runs as an [MCP](https://modelcontextprotocol.io) server, so Claude Code, Cursor, Copilot and friends can ask about motion before they write it.
59
-
60
- ```bash
61
- npx vectorvesper mcp install
62
- ```
63
-
64
- That configures every supported editor it finds. Restart the editor and run `npx vectorvesper mcp status` to confirm. No account or token is needed — the runtime, its contracts and the linter are free.
65
-
66
- **Why bother.** Bad motion code does not error. TypeScript passes, the build is green, and the page janks on a mid-range phone six weeks later with nothing connecting the two. An agent has no feedback signal for the one quality dimension that matters here, so this server gives it three:
67
-
68
- - **`plan_motion`** — describe what you are building and get told whether it needs a primitive **at all**, which ones, in what order, and when that advice would be wrong. It says "use CSS, not this" for a hover state, a fade on mount, a spinner or a one-time scroll reveal, because those are compositor features that cost no main-thread time. Roughly a fifth of its answers recommend the platform over this library.
69
- - **`get_hook` / `get_pattern` / `get_component`** — the contract, not the source. Does this need a client boundary, does it own the element's transform, what does it conflict with, which frame lane does it run in, and when should you not use it.
70
- - **`check_motion`** — a static linter for the failure class that ships silently: a private `requestAnimationFrame` loop outside the shared budget, a discarded unsubscribe, `setState` in a frame callback, layout read in the write lane, one transform with two owners, a `<Canvas>` prop that quietly overrules the adapter that set it, a WebGL scene with nothing watching for a lost context, motion with no reduced-motion guard.
71
-
72
- Prefer to wire it by hand? Add this to your client's MCP config:
73
-
74
- ```json
75
- {
76
- "mcpServers": {
77
- "vectorvesper": {
78
- "command": "npx",
79
- "args": ["-y", "vectorvesper", "mcp"]
80
- }
81
- }
82
- }
83
- ```
84
-
85
- Full setup notes and the per-client config paths: [vectorvesper.dev/docs/mcp](https://vectorvesper.dev/docs/mcp).
86
-
87
- ## CLI Command Reference
88
-
89
- | Command | Description |
90
- | --- | --- |
91
- | `init` | Detect project setup and write `vv.config.json` |
92
- | `add <slug>` | Add a component and auto-install its dependencies |
93
- | `list` | List all available components in the registry |
94
- | `update [slug]` | Update installed components to the latest version |
95
- | `diff [slug]` | Check local files against registry updates |
96
- | `remove <slug>` | Safely remove a component's files from the project |
97
- | `mcp install [client]` | Configure the MCP server for your editor(s) |
98
- | `mcp status` | Check which clients are wired up |
99
- | `mcp` | Run the MCP server on stdio (what the editor invokes) |
100
- | `info` | Output workspace diagnostics for troubleshooting |
101
-
102
- Works out of the box with **npm, pnpm, yarn, and bun** by checking your lockfile.
103
-
104
- ## Links
105
-
106
- * **Documentation & Guides:** [vectorvesper.dev/docs](https://vectorvesper.dev/docs)
107
- * **Visual Component Catalog:** [vectorvesper.dev/components](https://vectorvesper.dev/components)
108
- * **GitHub Repository:** [github.com/vectorvesper/vv-components](https://github.com/vectorvesper/vv-components)
109
- * **Report Issues:** [github.com/vectorvesper/vv-components/issues](https://github.com/vectorvesper/vv-components/issues)
110
-
111
- ---
112
-
113
- Licensed under the MIT License for open-source components. Premium/commercial components are subject to the Vector Vesper terms of service.
1
+ <!--
2
+ BANNER: host a wide image (≈1280×640) at an ABSOLUTE url — relative paths do
3
+ NOT render on npmjs.com — then uncomment this block:
4
+
5
+ <p align="center">
6
+ <a href="https://vectorvesper.dev">
7
+ <img src="https://vectorvesper.dev/banner.png" alt="Vector Vesper" width="100%" />
8
+ </a>
9
+ </p>
10
+ -->
11
+
12
+ <h1 align="center">Vector Vesper</h1>
13
+
14
+ <p align="center">
15
+ Production-grade WebGL, 3D, and motion components for React. Copy directly into your codebase and own the code.
16
+ </p>
17
+
18
+ <p align="center">
19
+ <a href="https://www.npmjs.com/package/vectorvesper"><img src="https://img.shields.io/npm/v/vectorvesper?color=7EACB5&label=npm" alt="npm version" /></a>
20
+ <a href="https://github.com/vectorvesper/vv-components/blob/main/LICENSE"><img src="https://img.shields.io/github/license/vectorvesper/vv-components?color=7EACB5&label=license" alt="license" /></a>
21
+ <a href="https://vectorvesper.dev"><img src="https://img.shields.io/badge/docs-vectorvesper.dev-7EACB5" alt="docs" /></a>
22
+ </p>
23
+
24
+ ---
25
+
26
+ > Vector Vesper is a CLI you run with `npx`, not a package you install. Start with `npx vectorvesper init` below.
27
+
28
+ **Vector Vesper** is a motion toolkit for React consisting of 3D animations, shaders, and advanced motion components.
29
+
30
+ The CLI writes the component code directly into your repository. You have full control over the math, the shaders, and the styles.
31
+
32
+ ## Quick Start
33
+
34
+ ```bash
35
+ # Initialize project configuration
36
+ npx vectorvesper init
37
+
38
+ # Add a visual component
39
+ npx vectorvesper add video-card
40
+ ```
41
+
42
+ The CLI auto-detects your workspace, installs required animation dependencies (such as `three`, `@react-three/fiber`, or `gsap`), and writes the code to `@/components/vv/`.
43
+
44
+ ```tsx
45
+ import { VideoCard } from "@/components/vv/video-card";
46
+
47
+ export default function Page() {
48
+ return (
49
+ <div className="h-screen w-full">
50
+ <VideoCard src="/clip.mp4" />
51
+ </div>
52
+ );
53
+ }
54
+ ```
55
+
56
+ ## MCP server — motion advice for your coding agent
57
+
58
+ The same CLI runs as an [MCP](https://modelcontextprotocol.io) server, so Claude Code, Cursor, Copilot and friends can ask about motion before they write it.
59
+
60
+ ```bash
61
+ npx vectorvesper mcp install
62
+ ```
63
+
64
+ That configures every supported editor it finds. Restart the editor and run `npx vectorvesper mcp status` to confirm. No account or token is needed — the runtime, its contracts and the linter are free.
65
+
66
+ **Why bother.** Bad motion code does not error. TypeScript passes, the build is green, and the page janks on a mid-range phone six weeks later with nothing connecting the two. An agent has no feedback signal for the one quality dimension that matters here, so this server gives it three:
67
+
68
+ - **`plan_motion`** — describe what you are building and get told whether it needs a primitive **at all**, which ones, in what order, and when that advice would be wrong. It says "use CSS, not this" for a hover state, a fade on mount, a spinner or a one-time scroll reveal, because those are compositor features that cost no main-thread time. Roughly a fifth of its answers recommend the platform over this library.
69
+ - **`get_hook` / `get_pattern` / `get_component`** — the contract, not the source. Does this need a client boundary, does it own the element's transform, what does it conflict with, which frame lane does it run in, and when should you not use it.
70
+ - **`check_motion`** — a static linter for the failure class that ships silently: a private `requestAnimationFrame` loop outside the shared budget, a discarded unsubscribe, `setState` in a frame callback, layout read in the write lane, one transform with two owners, a `<Canvas>` prop that quietly overrules the adapter that set it, a WebGL scene with nothing watching for a lost context, motion with no reduced-motion guard.
71
+
72
+ Prefer to wire it by hand? Add this to your client's MCP config:
73
+
74
+ ```json
75
+ {
76
+ "mcpServers": {
77
+ "vectorvesper": {
78
+ "command": "npx",
79
+ "args": ["-y", "vectorvesper", "mcp"]
80
+ }
81
+ }
82
+ }
83
+ ```
84
+
85
+ Full setup notes and the per-client config paths: [vectorvesper.dev/docs/mcp](https://vectorvesper.dev/docs/mcp).
86
+
87
+ ## CLI Command Reference
88
+
89
+ | Command | Description |
90
+ | --- | --- |
91
+ | `init` | Detect project setup and write `vv.config.json` |
92
+ | `add <slug>` | Add a component and auto-install its dependencies |
93
+ | `list` | List all available components in the registry |
94
+ | `update [slug]` | Update installed components to the latest version |
95
+ | `diff [slug]` | Check local files against registry updates |
96
+ | `remove <slug>` | Safely remove a component's files from the project |
97
+ | `mcp install [client]` | Configure the MCP server for your editor(s) |
98
+ | `mcp status` | Check which clients are wired up |
99
+ | `mcp` | Run the MCP server on stdio (what the editor invokes) |
100
+ | `info` | Output workspace diagnostics for troubleshooting |
101
+
102
+ Works out of the box with **npm, pnpm, yarn, and bun** by checking your lockfile.
103
+
104
+ ## Links
105
+
106
+ * **Documentation & Guides:** [vectorvesper.dev/docs](https://vectorvesper.dev/docs)
107
+ * **Visual Component Catalog:** [vectorvesper.dev/components](https://vectorvesper.dev/components)
108
+ * **GitHub Repository:** [github.com/vectorvesper/vv-components](https://github.com/vectorvesper/vv-components)
109
+ * **Report Issues:** [github.com/vectorvesper/vv-components/issues](https://github.com/vectorvesper/vv-components/issues)
110
+
111
+ ---
112
+
113
+ Licensed under the MIT License for open-source components. Premium/commercial components are subject to the Vector Vesper terms of service.
@@ -4,7 +4,7 @@ import {
4
4
  getAuthToken,
5
5
  logger,
6
6
  validateSlug
7
- } from "./chunk-SFP5K3ZO.js";
7
+ } from "./chunk-ZFHVMCR6.js";
8
8
 
9
9
  // src/utils/project.ts
10
10
  import fs from "fs";
@@ -130,7 +130,7 @@ var VVConfigSchema = z.object({
130
130
  })
131
131
  });
132
132
  var VVGlobalConfigSchema = z.object({
133
- // Auth — license key for paid components
133
+ // Auth — access token for paid components
134
134
  auth: z.object({
135
135
  token: z.string().optional(),
136
136
  email: z.string().optional(),
package/dist/hooks.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": "1.0.0",
3
- "engineVersion": "4.0.0",
4
- "generatedAt": "2026-08-29T13:09:19.680Z",
3
+ "engineVersion": "4.0.1",
4
+ "generatedAt": "2026-09-02T08:50:45.096Z",
5
5
  "contractLevel": "full",
6
6
  "hooks": [
7
7
  {
package/dist/index.js CHANGED
@@ -3,7 +3,7 @@ import {
3
3
  detectProject,
4
4
  fetchComponent,
5
5
  fetchRegistryIndex
6
- } from "./chunk-5YSVDVLK.js";
6
+ } from "./chunk-BI3LEGXE.js";
7
7
  import {
8
8
  getAuthToken,
9
9
  getGlobalConfigPath,
@@ -15,7 +15,7 @@ import {
15
15
  setVerbose,
16
16
  validateSlug,
17
17
  writeConfig
18
- } from "./chunk-SFP5K3ZO.js";
18
+ } from "./chunk-ZFHVMCR6.js";
19
19
 
20
20
  // src/index.ts
21
21
  import { Command } from "commander";
@@ -295,7 +295,7 @@ async function listCommand() {
295
295
  console.log(`
296
296
  ${pc2.green(String(freeCount))} free components${proCount > 0 ? ` \xB7 ${pc2.magenta(String(proCount))} pro components` : ""}`);
297
297
  if (proCount > 0 && !hasAuth) {
298
- console.log(` \u{1F511} ${pc2.dim("Unlock pro components:")} ${pc2.cyan("npx vectorvesper login <key>")} ${pc2.dim("\xB7")} ${pc2.cyan("https://vectorvesper.dev/pricing")}`);
298
+ console.log(` \u{1F511} ${pc2.dim("Unlock pro components:")} ${pc2.cyan("npx vectorvesper login <token>")} ${pc2.dim("\xB7")} ${pc2.cyan("https://vectorvesper.dev/pricing")}`);
299
299
  }
300
300
  console.log(`
301
301
  \u{1F449} Run ${pc2.bold(pc2.cyan("npx vectorvesper add <slug>"))} to add a component to your project.
@@ -303,7 +303,8 @@ async function listCommand() {
303
303
  } catch (error) {
304
304
  const message = error instanceof Error ? error.message : String(error);
305
305
  spinner.fail(pc2.red(`Failed to fetch components list: ${message}`));
306
- process.exit(1);
306
+ process.exitCode = 1;
307
+ return;
307
308
  }
308
309
  }
309
310
 
@@ -758,7 +759,7 @@ async function addCommand(slug, options = {}) {
758
759
  } catch (error) {
759
760
  const message = error instanceof Error ? error.message : String(error);
760
761
  spinner.fail(pc5.red(`Failed to resolve component "${slug}": ${message}`));
761
- process.exit(1);
762
+ process.exitCode = 1;
762
763
  return;
763
764
  }
764
765
  let transpileWarnings = [];
@@ -780,7 +781,7 @@ async function addCommand(slug, options = {}) {
780
781
  } catch (error) {
781
782
  const message = error instanceof Error ? error.message : String(error);
782
783
  spinner.fail(pc5.red(message));
783
- process.exit(1);
784
+ process.exitCode = 1;
784
785
  return;
785
786
  }
786
787
  const filesToWrite = [];
@@ -856,7 +857,7 @@ async function addCommand(slug, options = {}) {
856
857
  } catch (error) {
857
858
  const message = error instanceof Error ? error.message : String(error);
858
859
  spinner.fail(pc5.red(`Failed to write files: ${message}`));
859
- process.exit(1);
860
+ process.exitCode = 1;
860
861
  return;
861
862
  }
862
863
  try {
@@ -1018,7 +1019,7 @@ async function updateCommand(slug, options = {}) {
1018
1019
  if (updatedComponents.length > 0) {
1019
1020
  await handleDependencies(updatedComponents, projectRoot, projectInfo, options);
1020
1021
  }
1021
- if (failed.length > 0) process.exit(1);
1022
+ if (failed.length > 0) process.exitCode = 1;
1022
1023
  }
1023
1024
 
1024
1025
  // src/commands/remove.ts
@@ -1122,7 +1123,7 @@ Remove ${slug}
1122
1123
  import fs7 from "fs";
1123
1124
  import path7 from "path";
1124
1125
  import pc8 from "picocolors";
1125
- var CLI_VERSION = true ? "2.5.0" : "0.0.0-dev";
1126
+ var CLI_VERSION = true ? "2.6.0" : "0.0.0-dev";
1126
1127
  async function infoCommand() {
1127
1128
  console.log(pc8.bold(pc8.cyan("\nVector Vesper Diagnostics\n")));
1128
1129
  const projectInfo = detectProject();
@@ -1255,7 +1256,8 @@ Component Diff: ${slug}`)));
1255
1256
  } catch (error) {
1256
1257
  const message = error instanceof Error ? error.message : String(error);
1257
1258
  spinner.fail(pc9.red(`Failed to fetch remote component details: ${message}`));
1258
- process.exit(1);
1259
+ process.exitCode = 1;
1260
+ return;
1259
1261
  }
1260
1262
  } else {
1261
1263
  const spinner = ora4({
@@ -1320,7 +1322,8 @@ ${pc9.green("\u2714")} All components are up to date!
1320
1322
  } catch (error) {
1321
1323
  const message = error instanceof Error ? error.message : String(error);
1322
1324
  spinner.fail(pc9.red(`Failed to check updates: ${message}`));
1323
- process.exit(1);
1325
+ process.exitCode = 1;
1326
+ return;
1324
1327
  }
1325
1328
  }
1326
1329
  }
@@ -1420,7 +1423,7 @@ async function whoamiCommand() {
1420
1423
  }
1421
1424
 
1422
1425
  // src/index.ts
1423
- var version = true ? "2.5.0" : "0.0.0-dev";
1426
+ var version = true ? "2.6.0" : "0.0.0-dev";
1424
1427
  var program = new Command();
1425
1428
  program.name("vv").description("Vector Vesper CLI \u2014 add visual components to your React project").version(version).option("--verbose", "Show detailed debug output").hook("preAction", (thisCommand) => {
1426
1429
  const opts = thisCommand.opts();
@@ -1449,20 +1452,20 @@ program.command("info").description("Show project diagnostics and list installed
1449
1452
  program.command("diff [slug]").description("Check for updates against the component registry").action(async (slug) => {
1450
1453
  await diffCommand(slug);
1451
1454
  });
1452
- program.command("login <key>", { hidden: true }).description("Authenticate with a license key for pro components").action(async (key) => {
1455
+ program.command("login <token>").description("Authenticate with an access token for pro components").action(async (key) => {
1453
1456
  await loginCommand(key);
1454
1457
  });
1455
- program.command("logout", { hidden: true }).description("Clear stored license credentials").action(async () => {
1458
+ program.command("logout").description("Clear the stored access token").action(async () => {
1456
1459
  await logoutCommand();
1457
1460
  });
1458
- program.command("whoami", { hidden: true }).description("Show current authentication status").action(async () => {
1461
+ program.command("whoami").description("Show current authentication status").action(async () => {
1459
1462
  await whoamiCommand();
1460
1463
  });
1461
1464
  program.command("mcp [action] [client]").description(
1462
1465
  "Run as an MCP server (stdio) for AI coding agents. `vv mcp install` wires it into your editor; `vv mcp status` checks the setup."
1463
1466
  ).option("--stdio", "Force server mode even from an interactive terminal").option("-g, --global", "Write user-level config instead of project-level (install)").action(
1464
1467
  async (action, client, options) => {
1465
- const { mcpCommand } = await import("./mcp-QHRDHAME.js");
1468
+ const { mcpCommand } = await import("./mcp-BEM4TVKM.js");
1466
1469
  await mcpCommand(action, { ...options, client });
1467
1470
  }
1468
1471
  );
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-CPZKZO3A.js";
4
4
  import {
5
5
  getAuthToken
6
- } from "./chunk-SFP5K3ZO.js";
6
+ } from "./chunk-ZFHVMCR6.js";
7
7
 
8
8
  // src/commands/mcp.ts
9
9
  import pc from "picocolors";
@@ -146,7 +146,7 @@ function detectClients(cwd = process.cwd()) {
146
146
  }
147
147
 
148
148
  // src/commands/mcp.ts
149
- var VERSION = true ? "2.5.0" : "0.0.0-dev";
149
+ var VERSION = true ? "2.6.0" : "0.0.0-dev";
150
150
  var CONFIG_SNIPPET = `{
151
151
  "mcpServers": {
152
152
  "vectorvesper": {
@@ -293,7 +293,7 @@ ${pc.red("\u2717")} Unknown argument "${action}" for \`vv mcp\`.
293
293
  return;
294
294
  }
295
295
  protectStdout();
296
- const { startMcpServer } = await import("./server-ENS44LZV.js");
296
+ const { startMcpServer } = await import("./server-CIFO3HSN.js");
297
297
  try {
298
298
  await startMcpServer();
299
299
  } catch (error) {
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  detectProject,
3
3
  fetchRegistryIndex
4
- } from "./chunk-5YSVDVLK.js";
4
+ } from "./chunk-BI3LEGXE.js";
5
5
  import {
6
6
  findHook,
7
7
  findPattern,
@@ -9,7 +9,7 @@ import {
9
9
  } from "./chunk-CPZKZO3A.js";
10
10
  import {
11
11
  getAuthToken
12
- } from "./chunk-SFP5K3ZO.js";
12
+ } from "./chunk-ZFHVMCR6.js";
13
13
 
14
14
  // src/mcp/server.ts
15
15
  import { z } from "zod";
@@ -975,7 +975,7 @@ function formatPlan({ building, using }) {
975
975
  }
976
976
 
977
977
  // src/mcp/server.ts
978
- var VERSION = true ? "2.5.0" : "0.0.0-dev";
978
+ var VERSION = true ? "2.6.0" : "0.0.0-dev";
979
979
  function text(body) {
980
980
  return { content: [{ type: "text", text: body }] };
981
981
  }
package/package.json CHANGED
@@ -1,81 +1,81 @@
1
- {
2
- "name": "vectorvesper",
3
- "version": "2.5.0",
4
- "description": "Motion runtime and WebGL/R3F component CLI for React, with an MCP server that tells your coding agent which primitive to use, how to wire it, and when not to.",
5
- "type": "module",
6
- "license": "MIT",
7
- "main": "./dist/index.js",
8
- "bin": {
9
- "vectorvesper": "dist/index.js",
10
- "vv": "dist/index.js"
11
- },
12
- "files": [
13
- "dist",
14
- "package.json"
15
- ],
16
- "engines": {
17
- "node": ">=18"
18
- },
19
- "repository": {
20
- "type": "git",
21
- "url": "git+https://github.com/vectorvesper/vv-components.git"
22
- },
23
- "bugs": {
24
- "url": "https://github.com/vectorvesper/vv-components/issues"
25
- },
26
- "homepage": "https://vectorvesper.dev",
27
- "keywords": [
28
- "mcp",
29
- "model-context-protocol",
30
- "mcp-server",
31
- "ai",
32
- "agent",
33
- "claude",
34
- "cursor",
35
- "copilot",
36
- "react",
37
- "webgl",
38
- "three",
39
- "threejs",
40
- "react-three-fiber",
41
- "components",
42
- "cli",
43
- "ui",
44
- "animation",
45
- "motion",
46
- "gsap",
47
- "shader",
48
- "interactive",
49
- "performance",
50
- "requestanimationframe"
51
- ],
52
- "scripts": {
53
- "build": "tsup",
54
- "dev": "tsup --watch",
55
- "typecheck": "tsc --noEmit",
56
- "test": "vitest run",
57
- "test:watch": "vitest",
58
- "test:mcp": "node scripts/mcp-e2e/harness.mjs --local",
59
- "test:mcp:published": "node scripts/mcp-e2e/harness.mjs",
60
- "postbuild": "node scripts/bundle-manifest.mjs",
61
- "prepublishOnly": "npm run build"
62
- },
63
- "dependencies": {
64
- "@babel/core": "^7.24.0",
65
- "@babel/preset-typescript": "^7.24.0",
66
- "@clack/prompts": "^0.7.0",
67
- "@modelcontextprotocol/sdk": "^1.29.0",
68
- "commander": "^12.0.0",
69
- "ora": "^8.0.1",
70
- "picocolors": "^1.0.0",
71
- "zod": "^3.22.4"
72
- },
73
- "devDependencies": {
74
- "@types/babel__core": "^7.20.5",
75
- "@types/node": "^25.9.2",
76
- "tsup": "^8.0.2",
77
- "typescript": "^6.0.3",
78
- "vitest": "^2.1.8"
79
- },
80
- "mcpName": "dev.vectorvesper/motion"
81
- }
1
+ {
2
+ "name": "vectorvesper",
3
+ "version": "2.6.0",
4
+ "description": "Motion runtime and WebGL/R3F component CLI for React, with an MCP server that tells your coding agent which primitive to use, how to wire it, and when not to.",
5
+ "type": "module",
6
+ "license": "MIT",
7
+ "main": "./dist/index.js",
8
+ "bin": {
9
+ "vectorvesper": "dist/index.js",
10
+ "vv": "dist/index.js"
11
+ },
12
+ "files": [
13
+ "dist",
14
+ "package.json"
15
+ ],
16
+ "engines": {
17
+ "node": ">=18"
18
+ },
19
+ "repository": {
20
+ "type": "git",
21
+ "url": "git+https://github.com/vectorvesper/vv-components.git"
22
+ },
23
+ "bugs": {
24
+ "url": "https://github.com/vectorvesper/vv-components/issues"
25
+ },
26
+ "homepage": "https://vectorvesper.dev",
27
+ "keywords": [
28
+ "mcp",
29
+ "model-context-protocol",
30
+ "mcp-server",
31
+ "ai",
32
+ "agent",
33
+ "claude",
34
+ "cursor",
35
+ "copilot",
36
+ "react",
37
+ "webgl",
38
+ "three",
39
+ "threejs",
40
+ "react-three-fiber",
41
+ "components",
42
+ "cli",
43
+ "ui",
44
+ "animation",
45
+ "motion",
46
+ "gsap",
47
+ "shader",
48
+ "interactive",
49
+ "performance",
50
+ "requestanimationframe"
51
+ ],
52
+ "scripts": {
53
+ "build": "tsup",
54
+ "dev": "tsup --watch",
55
+ "typecheck": "tsc --noEmit",
56
+ "test": "vitest run",
57
+ "test:watch": "vitest",
58
+ "test:mcp": "node scripts/mcp-e2e/harness.mjs --local",
59
+ "test:mcp:published": "node scripts/mcp-e2e/harness.mjs",
60
+ "postbuild": "node scripts/bundle-manifest.mjs",
61
+ "prepublishOnly": "npm run build"
62
+ },
63
+ "dependencies": {
64
+ "@babel/core": "^7.24.0",
65
+ "@babel/preset-typescript": "^7.24.0",
66
+ "@clack/prompts": "^0.7.0",
67
+ "@modelcontextprotocol/sdk": "^1.29.0",
68
+ "commander": "^12.0.0",
69
+ "ora": "^8.0.1",
70
+ "picocolors": "^1.0.0",
71
+ "zod": "^3.22.4"
72
+ },
73
+ "devDependencies": {
74
+ "@types/babel__core": "^7.20.5",
75
+ "@types/node": "^25.9.2",
76
+ "tsup": "^8.0.2",
77
+ "typescript": "^6.0.3",
78
+ "vitest": "^2.1.8"
79
+ },
80
+ "mcpName": "dev.vectorvesper/motion"
81
+ }