@vovy-ai/go 0.1.3 → 0.2.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.
Files changed (3) hide show
  1. package/README.md +4 -3
  2. package/dist/index.js +37 -2
  3. package/package.json +33 -2
package/README.md CHANGED
@@ -15,19 +15,20 @@ npx @vovy-ai/go uninstall # remove everything Vovy wrote, cleanly
15
15
 
16
16
  Installed globally (`npm i -g @vovy-ai/go`), the command is just `vovy`.
17
17
 
18
- ## Why this is free, forever
18
+ `npx @vovy-ai/go doctor` also reports a deterministic "always-on token footprint" — every installed skill file plus every registered MCP tool definition, the tokens a session pays whether or not any of it ever fires.
19
19
 
20
- Vovy never runs its own AI model and never calls a Vovy-hosted server. It only writes markdown skill files that your existing AI coding tool reads for free, using the model you already pay for. No account, no API key, no cost, ever.
20
+ It's MIT-licensed and runs entirely on your machine no account, no API key, nothing phoning home.
21
21
 
22
22
  ## What it installs
23
23
 
24
- Three skills that make AI coding assistants safer and better-scoped for non-technical founders:
24
+ Four skills plus a local MCP server that give AI coding assistants deterministic project context and safety rails:
25
25
 
26
26
  | Skill | What it does |
27
27
  |---|---|
28
28
  | **Prompt Rescoper** | Rewrites vague, oversized requests into a small, reviewable spec before any code is written. |
29
29
  | **Project Skill Drafter** | Analyzes your actual project and drafts a project-specific skill so future requests already know your stack. |
30
30
  | **Founder Explainer** | Explains destructive/high-stakes actions in plain English before they happen, and flags common vibe-coding security mistakes. |
31
+ | **Context Scoper** | Calls a tree-sitter-backed Context Engine to find the exact symbol or file before reading whole files — fewer tokens spent, fewer same-named false matches. |
31
32
 
32
33
  Full docs, architecture, and source: **[github.com/Vovy-AI/vovy-cli](https://github.com/Vovy-AI/vovy-cli)**
33
34
 
package/dist/index.js CHANGED
@@ -53,10 +53,40 @@ function runInstall(opts) {
53
53
  }
54
54
 
55
55
  // src/commands/doctor.ts
56
+ var MCP_TOOL_METADATA = [
57
+ {
58
+ name: "analyze_project",
59
+ title: "Analyze Project",
60
+ description: "Deterministic, non-LLM static analysis of a project: detected framework/stack, package manager, test runner, top-level directories, and any obvious security footguns (e.g. an untracked .env). No network access, no guessing."
61
+ },
62
+ {
63
+ name: "search_codebase",
64
+ title: "Search Codebase",
65
+ description: `Deterministic, non-LLM symbol search over a JS/TS/JSX/TSX project via tree-sitter (no embeddings, no network access). Use this BEFORE reading whole files to answer a 'where is X handled' / 'how does Y work' question \u2014 it finds the exact symbol or file first so you read only what's relevant, not entire files. Actions: "overview" (top-level functions/classes/interfaces/exports in one file, needs filePath), "find_symbol" (declaration sites of a name across the project, needs query), "find_references" (identifier-boundary-aware usage sites of a name \u2014 more precise than grep since it never matches inside a string/comment, needs query), "pattern" (plain regex/text search fallback for non-code content, needs query).`
66
+ }
67
+ ];
68
+ function estimateTokens(text) {
69
+ return Math.ceil(text.length / 4);
70
+ }
71
+ function computeTokenFootprint() {
72
+ const skills = getAllSkills2();
73
+ const skillsEstTokens = skills.reduce((sum, skill) => sum + estimateTokens(skill.raw), 0);
74
+ const toolsEstTokens = MCP_TOOL_METADATA.reduce(
75
+ (sum, tool) => sum + estimateTokens(tool.name + tool.title + tool.description),
76
+ 0
77
+ );
78
+ return {
79
+ skillCount: skills.length,
80
+ skillsEstTokens,
81
+ toolCount: MCP_TOOL_METADATA.length,
82
+ toolsEstTokens,
83
+ totalEstTokens: skillsEstTokens + toolsEstTokens
84
+ };
85
+ }
56
86
  function runDoctor(env, hosts, scope) {
57
87
  const dryRunResults = runInstall({ env, hosts, scope, dryRun: true });
58
88
  const totalSkillCount = getAllSkills2().length;
59
- return dryRunResults.map(({ adapter, skillResults, mcpResult }) => {
89
+ const reports = dryRunResults.map(({ adapter, skillResults, mcpResult }) => {
60
90
  const entries = skillResults.map((r) => ({
61
91
  skillId: r.skillId,
62
92
  path: r.path,
@@ -73,6 +103,7 @@ function runDoctor(env, hosts, scope) {
73
103
  healthy: entries.length === totalSkillCount && entries.every((e) => e.status === "ok") && (mcp === null || mcp.status === "ok")
74
104
  };
75
105
  });
106
+ return { reports, tokenFootprint: computeTokenFootprint() };
76
107
  }
77
108
 
78
109
  // src/commands/uninstall.ts
@@ -194,7 +225,7 @@ function cmdDoctor(argv) {
194
225
  const flags = parseCommonFlags(argv);
195
226
  if (flags.help) return console.log(HELP);
196
227
  const env = realEnv();
197
- const reports = runDoctor(env, flags.hosts, flags.scope);
228
+ const { reports, tokenFootprint } = runDoctor(env, flags.hosts, flags.scope);
198
229
  if (reports.length === 0) {
199
230
  console.log("No supported host tools detected on this machine \u2014 nothing to check.");
200
231
  return;
@@ -211,6 +242,10 @@ ${adapter.label}: ${healthy ? "OK" : "needs `npx @vovy-ai/go install`"}`);
211
242
  console.log(` [${mcp.status === "ok" ? "x" : " "}] mcp server (${mcp.status})`);
212
243
  }
213
244
  }
245
+ console.log(
246
+ `
247
+ Estimated always-on token footprint: ~${tokenFootprint.totalEstTokens} tokens (${tokenFootprint.skillCount} skill files ~${tokenFootprint.skillsEstTokens}, ${tokenFootprint.toolCount} MCP tool definitions ~${tokenFootprint.toolsEstTokens}) \u2014 what every session pays whether or not a skill fires. chars/4 estimate, not an exact tokenizer count.`
248
+ );
214
249
  process.exitCode = allHealthy ? 0 : 1;
215
250
  }
216
251
  function cmdUninstall(argv) {
package/package.json CHANGED
@@ -1,8 +1,39 @@
1
1
  {
2
2
  "name": "@vovy-ai/go",
3
- "version": "0.1.3",
3
+ "version": "0.2.1",
4
4
  "description": "Free, forever, drop-in MCP server + skill pack that teaches non-technical founders to vibe code safely. npx @vovy-ai/go install",
5
+ "keywords": [
6
+ "vibe-coding",
7
+ "ai-coding-assistant",
8
+ "claude-code",
9
+ "codex-cli",
10
+ "cursor",
11
+ "cline",
12
+ "windsurf",
13
+ "mcp",
14
+ "mcp-server",
15
+ "model-context-protocol",
16
+ "claude",
17
+ "llm-agent",
18
+ "ai-agent",
19
+ "coding-agent",
20
+ "prompt-engineering",
21
+ "tree-sitter",
22
+ "code-search",
23
+ "developer-tools",
24
+ "cli"
25
+ ],
5
26
  "license": "MIT",
27
+ "homepage": "https://github.com/Vovy-AI/vovy-cli#readme",
28
+ "repository": {
29
+ "type": "git",
30
+ "url": "git+https://github.com/Vovy-AI/vovy-cli.git",
31
+ "directory": "packages/cli"
32
+ },
33
+ "bugs": {
34
+ "url": "https://github.com/Vovy-AI/vovy-cli/issues"
35
+ },
36
+ "author": "Vovy AI",
6
37
  "type": "module",
7
38
  "bin": {
8
39
  "vovy": "./dist/index.js"
@@ -12,7 +43,7 @@
12
43
  ],
13
44
  "dependencies": {
14
45
  "@vovy-ai/host-detect": "0.1.1",
15
- "@vovy-ai/skills": "0.2.1"
46
+ "@vovy-ai/skills": "0.3.1"
16
47
  },
17
48
  "devDependencies": {
18
49
  "tsup": "^8.3.5",