@vovy-ai/go 0.1.3 → 0.2.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.
Files changed (2) hide show
  1. package/dist/index.js +37 -2
  2. package/package.json +3 -3
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,6 +1,6 @@
1
1
  {
2
2
  "name": "@vovy-ai/go",
3
- "version": "0.1.3",
3
+ "version": "0.2.0",
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
5
  "license": "MIT",
6
6
  "type": "module",
@@ -11,8 +11,8 @@
11
11
  "dist"
12
12
  ],
13
13
  "dependencies": {
14
- "@vovy-ai/host-detect": "0.1.1",
15
- "@vovy-ai/skills": "0.2.1"
14
+ "@vovy-ai/skills": "0.3.0",
15
+ "@vovy-ai/host-detect": "0.1.1"
16
16
  },
17
17
  "devDependencies": {
18
18
  "tsup": "^8.3.5",