verbalcoding 0.2.12 → 0.2.13
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/.env.example +74 -4
- package/README.es.md +3 -1
- package/README.fr.md +3 -1
- package/README.ja.md +3 -1
- package/README.ko.md +4 -2
- package/README.md +4 -2
- package/README.ru.md +3 -1
- package/README.zh.md +3 -1
- package/app-node/agent_adapters.test.mjs +14 -0
- package/app-node/agent_routing.mjs +148 -0
- package/app-node/agent_routing.test.mjs +138 -0
- package/app-node/agent_turn.mjs +86 -0
- package/app-node/agent_turn.test.mjs +109 -0
- package/app-node/bridge_context.mjs +73 -0
- package/app-node/bridge_context.test.mjs +54 -0
- package/app-node/bridge_state.mjs +4 -0
- package/app-node/bridge_wireup.test.mjs +462 -0
- package/app-node/cli_install.test.mjs +31 -0
- package/app-node/cross_agent_routing.test.mjs +78 -0
- package/app-node/discord_command_router.mjs +204 -0
- package/app-node/discord_command_router.test.mjs +311 -0
- package/app-node/discord_voice_setup.mjs +251 -0
- package/app-node/discord_voice_setup.test.mjs +86 -0
- package/app-node/hermes_profiles.test.mjs +12 -1
- package/app-node/install_config.mjs +110 -3
- package/app-node/install_config.test.mjs +8 -0
- package/app-node/instance_doctor.test.mjs +9 -0
- package/app-node/instances.test.mjs +8 -1
- package/app-node/main.mjs +488 -1368
- package/app-node/mcp_tools.test.mjs +7 -0
- package/app-node/notification_handler.mjs +89 -0
- package/app-node/notification_handler.test.mjs +187 -0
- package/app-node/plan_dispatcher.mjs +215 -0
- package/app-node/plan_dispatcher.test.mjs +101 -0
- package/app-node/plan_mode.mjs +36 -7
- package/app-node/plan_mode.test.mjs +78 -0
- package/app-node/progress_handler.mjs +220 -0
- package/app-node/progress_handler.test.mjs +193 -0
- package/app-node/progress_speech.mjs +54 -32
- package/app-node/progress_speech.test.mjs +12 -3
- package/app-node/project_sessions.mjs +5 -2
- package/app-node/project_sessions.test.mjs +7 -0
- package/app-node/research_mode.mjs +282 -0
- package/app-node/research_mode.test.mjs +264 -0
- package/app-node/restart_notice.mjs +3 -0
- package/app-node/restart_notice.test.mjs +11 -0
- package/app-node/session_ontology.mjs +271 -0
- package/app-node/session_ontology.test.mjs +130 -0
- package/app-node/smart_progress.mjs +1 -1
- package/app-node/stream_sentencer.mjs +32 -2
- package/app-node/stream_sentencer.test.mjs +65 -0
- package/app-node/streaming_tts_queue.mjs +5 -1
- package/app-node/streaming_tts_queue.test.mjs +7 -1
- package/app-node/stt_whisper.mjs +24 -0
- package/app-node/stt_whisper.test.mjs +32 -0
- package/app-node/text_routing.mjs +4 -2
- package/app-node/tts_backends.mjs +537 -3
- package/app-node/tts_backends.test.mjs +454 -0
- package/app-node/tts_player.mjs +164 -0
- package/app-node/tts_player.test.mjs +202 -0
- package/app-node/tts_runtime.mjs +134 -0
- package/app-node/tts_runtime.test.mjs +89 -0
- package/app-node/tts_settings.mjs +150 -3
- package/app-node/tts_settings.test.mjs +204 -0
- package/app-node/tts_voice_config.mjs +136 -2
- package/app-node/tts_voice_config.test.mjs +94 -0
- package/app-node/utterance_router.mjs +216 -0
- package/app-node/utterance_router.test.mjs +236 -0
- package/app-node/voice_autojoin.mjs +37 -0
- package/app-node/voice_autojoin.test.mjs +59 -0
- package/app-node/voice_io.mjs +272 -0
- package/app-node/voice_io.test.mjs +102 -0
- package/app-node/voice_turn_runner.mjs +449 -0
- package/app-node/voice_turn_runner.test.mjs +289 -0
- package/docs/CONFIGURATION.md +12 -2
- package/docs/HARNESSES.md +58 -0
- package/docs/HARNESS_AIDER.md +50 -0
- package/docs/HARNESS_CLAUDE.md +56 -0
- package/docs/HARNESS_CODEX.md +56 -0
- package/docs/HARNESS_CURSOR.md +45 -0
- package/docs/HARNESS_GEMINI.md +45 -0
- package/docs/HARNESS_HERMES.md +57 -0
- package/docs/HARNESS_OPENCLAW.md +44 -0
- package/docs/HARNESS_OPENCODE.md +44 -0
- package/docs/README.md +1 -0
- package/docs/ROADMAP.md +20 -5
- package/docs/TTS_BACKENDS.md +227 -0
- package/docs/USAGE.md +22 -0
- package/docs/i18n/AGENTS.es.md +34 -0
- package/docs/i18n/AGENTS.fr.md +34 -0
- package/docs/i18n/AGENTS.ja.md +34 -0
- package/docs/i18n/AGENTS.ko.md +34 -0
- package/docs/i18n/AGENTS.ru.md +34 -0
- package/docs/i18n/AGENTS.zh.md +34 -0
- package/docs/i18n/HARNESSES.es.md +58 -0
- package/docs/i18n/HARNESSES.fr.md +58 -0
- package/docs/i18n/HARNESSES.ja.md +58 -0
- package/docs/i18n/HARNESSES.ko.md +58 -0
- package/docs/i18n/HARNESSES.ru.md +58 -0
- package/docs/i18n/HARNESSES.zh.md +58 -0
- package/docs/i18n/HARNESS_AIDER.es.md +48 -0
- package/docs/i18n/HARNESS_AIDER.fr.md +48 -0
- package/docs/i18n/HARNESS_AIDER.ja.md +50 -0
- package/docs/i18n/HARNESS_AIDER.ko.md +50 -0
- package/docs/i18n/HARNESS_AIDER.ru.md +48 -0
- package/docs/i18n/HARNESS_AIDER.zh.md +48 -0
- package/docs/i18n/HARNESS_CLAUDE.es.md +55 -0
- package/docs/i18n/HARNESS_CLAUDE.fr.md +55 -0
- package/docs/i18n/HARNESS_CLAUDE.ja.md +56 -0
- package/docs/i18n/HARNESS_CLAUDE.ko.md +56 -0
- package/docs/i18n/HARNESS_CLAUDE.ru.md +55 -0
- package/docs/i18n/HARNESS_CLAUDE.zh.md +56 -0
- package/docs/i18n/HARNESS_CODEX.es.md +55 -0
- package/docs/i18n/HARNESS_CODEX.fr.md +55 -0
- package/docs/i18n/HARNESS_CODEX.ja.md +56 -0
- package/docs/i18n/HARNESS_CODEX.ko.md +56 -0
- package/docs/i18n/HARNESS_CODEX.ru.md +55 -0
- package/docs/i18n/HARNESS_CODEX.zh.md +56 -0
- package/docs/i18n/HARNESS_CURSOR.es.md +42 -0
- package/docs/i18n/HARNESS_CURSOR.fr.md +42 -0
- package/docs/i18n/HARNESS_CURSOR.ja.md +45 -0
- package/docs/i18n/HARNESS_CURSOR.ko.md +45 -0
- package/docs/i18n/HARNESS_CURSOR.ru.md +42 -0
- package/docs/i18n/HARNESS_CURSOR.zh.md +42 -0
- package/docs/i18n/HARNESS_GEMINI.es.md +44 -0
- package/docs/i18n/HARNESS_GEMINI.fr.md +44 -0
- package/docs/i18n/HARNESS_GEMINI.ja.md +45 -0
- package/docs/i18n/HARNESS_GEMINI.ko.md +45 -0
- package/docs/i18n/HARNESS_GEMINI.ru.md +44 -0
- package/docs/i18n/HARNESS_GEMINI.zh.md +45 -0
- package/docs/i18n/HARNESS_HERMES.es.md +54 -0
- package/docs/i18n/HARNESS_HERMES.fr.md +54 -0
- package/docs/i18n/HARNESS_HERMES.ja.md +57 -0
- package/docs/i18n/HARNESS_HERMES.ko.md +57 -0
- package/docs/i18n/HARNESS_HERMES.ru.md +54 -0
- package/docs/i18n/HARNESS_HERMES.zh.md +57 -0
- package/docs/i18n/HARNESS_OPENCLAW.es.md +41 -0
- package/docs/i18n/HARNESS_OPENCLAW.fr.md +41 -0
- package/docs/i18n/HARNESS_OPENCLAW.ja.md +44 -0
- package/docs/i18n/HARNESS_OPENCLAW.ko.md +44 -0
- package/docs/i18n/HARNESS_OPENCLAW.ru.md +41 -0
- package/docs/i18n/HARNESS_OPENCLAW.zh.md +42 -0
- package/docs/i18n/HARNESS_OPENCODE.es.md +41 -0
- package/docs/i18n/HARNESS_OPENCODE.fr.md +41 -0
- package/docs/i18n/HARNESS_OPENCODE.ja.md +44 -0
- package/docs/i18n/HARNESS_OPENCODE.ko.md +44 -0
- package/docs/i18n/HARNESS_OPENCODE.ru.md +41 -0
- package/docs/i18n/HARNESS_OPENCODE.zh.md +44 -0
- package/docs/superpowers/plans/2026-05-14-cross-agent-voice-transfer.md +625 -0
- package/docs/superpowers/plans/2026-05-21-audio-overview-narrated-diffs.md +95 -0
- package/docs/superpowers/plans/2026-05-21-autoresearch-ontology.md +83 -0
- package/docs/superpowers/plans/2026-05-21-phase11-push-to-talk-wakeword-v2.md +77 -0
- package/docs/superpowers/plans/2026-05-21-phase12-multi-user-voice.md +147 -0
- package/docs/superpowers/plans/2026-05-21-phase14-verbalbench.md +136 -0
- package/docs/superpowers/plans/2026-05-21-phase15-phone-companion.md +72 -0
- package/integrations/fireredtts2/mlx_llm.py +183 -0
- package/integrations/fireredtts2/synth.py +156 -0
- package/integrations/fireredtts2/synth_mlx.py +196 -0
- package/integrations/mlxaudio/synth.py +74 -0
- package/integrations/neuttsair/synth.py +104 -0
- package/integrations/omnivoice/synth.py +110 -0
- package/package.json +6 -1
- package/scripts/cli.mjs +84 -0
- package/scripts/doctor.mjs +104 -4
- package/scripts/install.mjs +5 -1
- package/scripts/install_fireredtts2.sh +109 -0
- package/scripts/install_mlxaudio.sh +34 -0
- package/scripts/install_mossttsnano.sh +46 -0
- package/scripts/postinstall.mjs +34 -0
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
|
4
|
+
cd "$ROOT"
|
|
5
|
+
ASSUME_YES=0
|
|
6
|
+
for arg in "$@"; do
|
|
7
|
+
case "$arg" in -y|--yes) ASSUME_YES=1 ;; esac
|
|
8
|
+
done
|
|
9
|
+
log() { printf '==> %s\n' "$*"; }
|
|
10
|
+
confirm() {
|
|
11
|
+
if [ "$ASSUME_YES" = "1" ]; then return 0; fi
|
|
12
|
+
printf '%s [y/N]: ' "$1" >&2
|
|
13
|
+
read -r answer
|
|
14
|
+
case "$answer" in y|Y|yes|YES) return 0 ;; *) return 1 ;; esac
|
|
15
|
+
}
|
|
16
|
+
if ! confirm 'Install mlx-audio under this project?'; then
|
|
17
|
+
echo 'Cancelled mlx-audio install.' >&2
|
|
18
|
+
exit 2
|
|
19
|
+
fi
|
|
20
|
+
PYTHON_BIN="${PYTHON_BIN:-}"
|
|
21
|
+
if [ -z "$PYTHON_BIN" ]; then
|
|
22
|
+
for candidate in python3.12 python3.11 python3.10 python3; do
|
|
23
|
+
if command -v "$candidate" >/dev/null 2>&1; then PYTHON_BIN="$candidate"; break; fi
|
|
24
|
+
done
|
|
25
|
+
fi
|
|
26
|
+
[ -n "$PYTHON_BIN" ] || { echo 'python3 is required' >&2; exit 1; }
|
|
27
|
+
if [ ! -x .venv-mlxaudio/bin/python ]; then
|
|
28
|
+
log 'Creating .venv-mlxaudio'
|
|
29
|
+
"$PYTHON_BIN" -m venv .venv-mlxaudio
|
|
30
|
+
fi
|
|
31
|
+
log 'Installing mlx-audio for Apple Silicon'
|
|
32
|
+
.venv-mlxaudio/bin/python -m pip install --upgrade pip setuptools wheel >/dev/null
|
|
33
|
+
.venv-mlxaudio/bin/python -m pip install --pre mlx-audio
|
|
34
|
+
log 'mlx-audio installed. Set TTS_BACKEND=mlxaudio or run: vc tts backend mlx'
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
|
4
|
+
cd "$ROOT"
|
|
5
|
+
ASSUME_YES=0
|
|
6
|
+
for arg in "$@"; do
|
|
7
|
+
case "$arg" in -y|--yes) ASSUME_YES=1 ;; esac
|
|
8
|
+
done
|
|
9
|
+
log() { printf '==> %s\n' "$*"; }
|
|
10
|
+
confirm() {
|
|
11
|
+
if [ "$ASSUME_YES" = "1" ]; then return 0; fi
|
|
12
|
+
printf '%s [y/N]: ' "$1" >&2
|
|
13
|
+
read -r answer
|
|
14
|
+
case "$answer" in y|Y|yes|YES) return 0 ;; *) return 1 ;; esac
|
|
15
|
+
}
|
|
16
|
+
if ! confirm 'Install MOSS-TTS-Nano code and Python environment under this project?'; then
|
|
17
|
+
echo 'Cancelled MOSS-TTS-Nano install.' >&2
|
|
18
|
+
exit 2
|
|
19
|
+
fi
|
|
20
|
+
command -v python3 >/dev/null 2>&1 || { echo 'python3 is required' >&2; exit 1; }
|
|
21
|
+
command -v git >/dev/null 2>&1 || { echo 'git is required' >&2; exit 1; }
|
|
22
|
+
mkdir -p vendor .local/bin
|
|
23
|
+
if [ ! -d vendor/MOSS-TTS-Nano/.git ]; then
|
|
24
|
+
log 'Cloning MOSS-TTS-Nano source'
|
|
25
|
+
git clone --depth 1 https://github.com/OpenMOSS/MOSS-TTS-Nano.git vendor/MOSS-TTS-Nano
|
|
26
|
+
else
|
|
27
|
+
log 'MOSS-TTS-Nano source already present'
|
|
28
|
+
fi
|
|
29
|
+
if [ ! -x .venv-mossttsnano/bin/python ]; then
|
|
30
|
+
log 'Creating .venv-mossttsnano'
|
|
31
|
+
python3 -m venv .venv-mossttsnano
|
|
32
|
+
fi
|
|
33
|
+
log 'Installing MOSS-TTS-Nano Python dependencies'
|
|
34
|
+
.venv-mossttsnano/bin/python -m pip install --upgrade pip >/dev/null
|
|
35
|
+
if [ -f vendor/MOSS-TTS-Nano/requirements.txt ]; then
|
|
36
|
+
.venv-mossttsnano/bin/python -m pip install -r vendor/MOSS-TTS-Nano/requirements.txt >/dev/null
|
|
37
|
+
else
|
|
38
|
+
.venv-mossttsnano/bin/python -m pip install torch torchaudio transformers accelerate soundfile huggingface_hub >/dev/null
|
|
39
|
+
fi
|
|
40
|
+
cat > .local/bin/mossttsnano <<'SH'
|
|
41
|
+
#!/usr/bin/env bash
|
|
42
|
+
ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
|
|
43
|
+
exec "$ROOT/.venv-mossttsnano/bin/python" "$ROOT/vendor/MOSS-TTS-Nano/infer.py" "$@"
|
|
44
|
+
SH
|
|
45
|
+
chmod +x .local/bin/mossttsnano
|
|
46
|
+
log 'MOSS-TTS-Nano installed: ./.local/bin/mossttsnano'
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { spawnSync } from 'node:child_process';
|
|
3
|
+
import fs from 'node:fs';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import { fileURLToPath } from 'node:url';
|
|
6
|
+
|
|
7
|
+
const ROOT = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..');
|
|
8
|
+
if (process.env.VERBALCODING_SKIP_POSTINSTALL === '1') process.exit(0);
|
|
9
|
+
|
|
10
|
+
function log(message) {
|
|
11
|
+
console.log(`[verbalcoding] ${message}`);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
function run(cmd, args, options = {}) {
|
|
15
|
+
return spawnSync(cmd, args, { cwd: ROOT, stdio: options.stdio || 'inherit', env: process.env });
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
try {
|
|
19
|
+
if (!fs.existsSync(path.join(ROOT, '.venv-tts', 'bin', 'edge-tts'))) {
|
|
20
|
+
const py = spawnSync('python3', ['--version'], { stdio: 'ignore' });
|
|
21
|
+
if (py.status === 0) {
|
|
22
|
+
log('installing local Edge TTS helper (.venv-tts)');
|
|
23
|
+
run('python3', ['-m', 'venv', path.join(ROOT, '.venv-tts')]);
|
|
24
|
+
run(path.join(ROOT, '.venv-tts', 'bin', 'python'), ['-m', 'pip', 'install', '--upgrade', 'pip'], { stdio: 'ignore' });
|
|
25
|
+
const result = run(path.join(ROOT, '.venv-tts', 'bin', 'python'), ['-m', 'pip', 'install', 'edge-tts']);
|
|
26
|
+
if (result.status !== 0) log('edge-tts helper install failed; run `vc setup` later');
|
|
27
|
+
} else {
|
|
28
|
+
log('python3 not found; skipping Edge TTS helper install');
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
log('postinstall complete. Run `vc setup` for Discord tokens and heavier optional TTS backends.');
|
|
32
|
+
} catch (error) {
|
|
33
|
+
log(`postinstall skipped after error: ${error?.message || error}`);
|
|
34
|
+
}
|