visionclaw 0.1.12 → 0.1.14

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.
@@ -0,0 +1,63 @@
1
+ ---
2
+ description: Use this skill to transcribe audio files (voice messages, recordings) to text. Supports OGG, MP3, WAV, M4A, and other common audio formats. Uses OpenAI Whisper running locally for free, private transcription.
3
+ ---
4
+
5
+ # Transcribe Audio
6
+
7
+ Transcribe audio files to text using OpenAI Whisper (local, free, private).
8
+
9
+ ## Prerequisites
10
+
11
+ Whisper and ffmpeg must be installed. If not already installed, run:
12
+
13
+ ```bash
14
+ pip3 install openai-whisper
15
+ ```
16
+
17
+ ffmpeg is required for audio format conversion. On macOS:
18
+
19
+ ```bash
20
+ brew install ffmpeg
21
+ ```
22
+
23
+ ## Steps
24
+
25
+ 1. **Download the audio file** if it's a URL:
26
+ ```bash
27
+ curl -s -o /tmp/audio_input.ogg "THE_AUDIO_URL"
28
+ ```
29
+
30
+ 2. **Convert to WAV** (Whisper works best with WAV):
31
+ ```bash
32
+ ffmpeg -y -i /tmp/audio_input.ogg -ar 16000 -ac 1 /tmp/audio_input.wav 2>/dev/null
33
+ ```
34
+
35
+ 3. **Transcribe with Whisper** using the `base` model (fast, good accuracy):
36
+ ```bash
37
+ python3 -c "
38
+ import whisper
39
+ model = whisper.load_model('base')
40
+ result = model.transcribe('/tmp/audio_input.wav')
41
+ print(result['text'])
42
+ "
43
+ ```
44
+
45
+ 4. **Use the transcription** as needed -- respond to the user, take action, etc.
46
+
47
+ ## Notes
48
+
49
+ - The `base` model (~150MB) provides good speed/accuracy balance. Use `small` or `medium` for better accuracy on noisy audio.
50
+ - First run downloads the model (~150MB). Subsequent runs are instant.
51
+ - Supports: OGG, MP3, WAV, M4A, FLAC, WEBM, and most common audio formats.
52
+ - Runs entirely locally -- no API calls, no costs, fully private.
53
+
54
+ ## Generating Voice Replies
55
+
56
+ To send a voice message back to the user, use macOS text-to-speech:
57
+
58
+ ```bash
59
+ say -o /tmp/reply_voice.aiff "Your reply text here"
60
+ ffmpeg -y -i /tmp/reply_voice.aiff /tmp/reply_voice.ogg 2>/dev/null
61
+ ```
62
+
63
+ Then send via notify_user with `file_path: "/tmp/reply_voice.ogg"`.
@@ -1 +1 @@
1
- {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/skills/install.ts"],"names":[],"mappings":"AAQA;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,IAAI,CAiEzE"}
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/skills/install.ts"],"names":[],"mappings":"AAQA;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,IAAI,CAkFzE"}
@@ -10,27 +10,42 @@ const __dirname = path.dirname(fileURLToPath(import.meta.url));
10
10
  * By default, does not overwrite existing skills (to preserve user edits).
11
11
  */
12
12
  export function installBuiltinSkills(opts = {}) {
13
- const builtinDir = path.join(__dirname, "..", "skills");
14
13
  const targetDir = getSkillsDir();
15
- // In dev mode (tsx), __dirname points to src/skills.
16
- // In built mode, it points to dist/skills.
17
- // The skill files are in src/skills/ which may not exist in dist.
18
- // Try both locations.
19
- const sourceDirs = [
20
- builtinDir,
14
+ const builtinAssetDir = path.join(__dirname, "..", "builtin-skills");
15
+ // In dev mode (tsx), __dirname points to src/skills and contains built-in skill folders.
16
+ // In built mode, __dirname points to dist/skills which contains compiled JS only.
17
+ // So we must NOT treat dist/skills as the source.
18
+ const candidateDirs = [
19
+ builtinAssetDir,
20
+ __dirname,
21
21
  path.join(__dirname, "..", "..", "src", "skills"),
22
22
  ];
23
23
  let sourceDir = null;
24
- for (const dir of sourceDirs) {
25
- if (fs.existsSync(dir)) {
26
- sourceDir = dir;
27
- break;
24
+ for (const dir of candidateDirs) {
25
+ if (!fs.existsSync(dir))
26
+ continue;
27
+ // Filter out built output (dist/skills): it typically contains install.js but no skill folders.
28
+ try {
29
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
30
+ const hasAnySkillFolder = entries.some((e) => {
31
+ if (!e.isDirectory())
32
+ return false;
33
+ return fs.existsSync(path.join(dir, e.name, "SKILL.md"));
34
+ });
35
+ if (!hasAnySkillFolder)
36
+ continue;
37
+ }
38
+ catch {
39
+ continue;
28
40
  }
41
+ sourceDir = dir;
42
+ break;
29
43
  }
30
44
  if (!sourceDir) {
31
- logger.debug("No built-in skills directory found");
45
+ logger.debug(`No built-in skills directory found (checked: ${candidateDirs.join(", ")})`);
32
46
  return;
33
47
  }
48
+ logger.debug(`Using built-in skills source: ${sourceDir}`);
34
49
  if (!fs.existsSync(targetDir)) {
35
50
  fs.mkdirSync(targetDir, { recursive: true });
36
51
  }
@@ -1 +1 @@
1
- {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/skills/install.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/skills/install.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "visionclaw",
3
- "version": "0.1.12",
3
+ "version": "0.1.14",
4
4
  "description": "A personal assistant agent that runs on your desktop, receives commands from messaging channels, and executes tasks autonomously.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -9,6 +9,7 @@
9
9
  },
10
10
  "files": [
11
11
  "dist/**/*",
12
+ "dist/builtin-skills/**/*",
12
13
  "README.md"
13
14
  ],
14
15
  "dependencies": {
@@ -45,7 +46,7 @@
45
46
  "node": ">=20.0.0"
46
47
  },
47
48
  "scripts": {
48
- "build": "tsc",
49
+ "build": "tsc && node scripts/copy-builtin-skills.mjs",
49
50
  "dev": "tsx src/index.ts",
50
51
  "start": "node dist/index.js",
51
52
  "lint": "eslint src/",