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.
Files changed (169) hide show
  1. package/.env.example +74 -4
  2. package/README.es.md +3 -1
  3. package/README.fr.md +3 -1
  4. package/README.ja.md +3 -1
  5. package/README.ko.md +4 -2
  6. package/README.md +4 -2
  7. package/README.ru.md +3 -1
  8. package/README.zh.md +3 -1
  9. package/app-node/agent_adapters.test.mjs +14 -0
  10. package/app-node/agent_routing.mjs +148 -0
  11. package/app-node/agent_routing.test.mjs +138 -0
  12. package/app-node/agent_turn.mjs +86 -0
  13. package/app-node/agent_turn.test.mjs +109 -0
  14. package/app-node/bridge_context.mjs +73 -0
  15. package/app-node/bridge_context.test.mjs +54 -0
  16. package/app-node/bridge_state.mjs +4 -0
  17. package/app-node/bridge_wireup.test.mjs +462 -0
  18. package/app-node/cli_install.test.mjs +31 -0
  19. package/app-node/cross_agent_routing.test.mjs +78 -0
  20. package/app-node/discord_command_router.mjs +204 -0
  21. package/app-node/discord_command_router.test.mjs +311 -0
  22. package/app-node/discord_voice_setup.mjs +251 -0
  23. package/app-node/discord_voice_setup.test.mjs +86 -0
  24. package/app-node/hermes_profiles.test.mjs +12 -1
  25. package/app-node/install_config.mjs +110 -3
  26. package/app-node/install_config.test.mjs +8 -0
  27. package/app-node/instance_doctor.test.mjs +9 -0
  28. package/app-node/instances.test.mjs +8 -1
  29. package/app-node/main.mjs +488 -1368
  30. package/app-node/mcp_tools.test.mjs +7 -0
  31. package/app-node/notification_handler.mjs +89 -0
  32. package/app-node/notification_handler.test.mjs +187 -0
  33. package/app-node/plan_dispatcher.mjs +215 -0
  34. package/app-node/plan_dispatcher.test.mjs +101 -0
  35. package/app-node/plan_mode.mjs +36 -7
  36. package/app-node/plan_mode.test.mjs +78 -0
  37. package/app-node/progress_handler.mjs +220 -0
  38. package/app-node/progress_handler.test.mjs +193 -0
  39. package/app-node/progress_speech.mjs +54 -32
  40. package/app-node/progress_speech.test.mjs +12 -3
  41. package/app-node/project_sessions.mjs +5 -2
  42. package/app-node/project_sessions.test.mjs +7 -0
  43. package/app-node/research_mode.mjs +282 -0
  44. package/app-node/research_mode.test.mjs +264 -0
  45. package/app-node/restart_notice.mjs +3 -0
  46. package/app-node/restart_notice.test.mjs +11 -0
  47. package/app-node/session_ontology.mjs +271 -0
  48. package/app-node/session_ontology.test.mjs +130 -0
  49. package/app-node/smart_progress.mjs +1 -1
  50. package/app-node/stream_sentencer.mjs +32 -2
  51. package/app-node/stream_sentencer.test.mjs +65 -0
  52. package/app-node/streaming_tts_queue.mjs +5 -1
  53. package/app-node/streaming_tts_queue.test.mjs +7 -1
  54. package/app-node/stt_whisper.mjs +24 -0
  55. package/app-node/stt_whisper.test.mjs +32 -0
  56. package/app-node/text_routing.mjs +4 -2
  57. package/app-node/tts_backends.mjs +537 -3
  58. package/app-node/tts_backends.test.mjs +454 -0
  59. package/app-node/tts_player.mjs +164 -0
  60. package/app-node/tts_player.test.mjs +202 -0
  61. package/app-node/tts_runtime.mjs +134 -0
  62. package/app-node/tts_runtime.test.mjs +89 -0
  63. package/app-node/tts_settings.mjs +150 -3
  64. package/app-node/tts_settings.test.mjs +204 -0
  65. package/app-node/tts_voice_config.mjs +136 -2
  66. package/app-node/tts_voice_config.test.mjs +94 -0
  67. package/app-node/utterance_router.mjs +216 -0
  68. package/app-node/utterance_router.test.mjs +236 -0
  69. package/app-node/voice_autojoin.mjs +37 -0
  70. package/app-node/voice_autojoin.test.mjs +59 -0
  71. package/app-node/voice_io.mjs +272 -0
  72. package/app-node/voice_io.test.mjs +102 -0
  73. package/app-node/voice_turn_runner.mjs +449 -0
  74. package/app-node/voice_turn_runner.test.mjs +289 -0
  75. package/docs/CONFIGURATION.md +12 -2
  76. package/docs/HARNESSES.md +58 -0
  77. package/docs/HARNESS_AIDER.md +50 -0
  78. package/docs/HARNESS_CLAUDE.md +56 -0
  79. package/docs/HARNESS_CODEX.md +56 -0
  80. package/docs/HARNESS_CURSOR.md +45 -0
  81. package/docs/HARNESS_GEMINI.md +45 -0
  82. package/docs/HARNESS_HERMES.md +57 -0
  83. package/docs/HARNESS_OPENCLAW.md +44 -0
  84. package/docs/HARNESS_OPENCODE.md +44 -0
  85. package/docs/README.md +1 -0
  86. package/docs/ROADMAP.md +20 -5
  87. package/docs/TTS_BACKENDS.md +227 -0
  88. package/docs/USAGE.md +22 -0
  89. package/docs/i18n/AGENTS.es.md +34 -0
  90. package/docs/i18n/AGENTS.fr.md +34 -0
  91. package/docs/i18n/AGENTS.ja.md +34 -0
  92. package/docs/i18n/AGENTS.ko.md +34 -0
  93. package/docs/i18n/AGENTS.ru.md +34 -0
  94. package/docs/i18n/AGENTS.zh.md +34 -0
  95. package/docs/i18n/HARNESSES.es.md +58 -0
  96. package/docs/i18n/HARNESSES.fr.md +58 -0
  97. package/docs/i18n/HARNESSES.ja.md +58 -0
  98. package/docs/i18n/HARNESSES.ko.md +58 -0
  99. package/docs/i18n/HARNESSES.ru.md +58 -0
  100. package/docs/i18n/HARNESSES.zh.md +58 -0
  101. package/docs/i18n/HARNESS_AIDER.es.md +48 -0
  102. package/docs/i18n/HARNESS_AIDER.fr.md +48 -0
  103. package/docs/i18n/HARNESS_AIDER.ja.md +50 -0
  104. package/docs/i18n/HARNESS_AIDER.ko.md +50 -0
  105. package/docs/i18n/HARNESS_AIDER.ru.md +48 -0
  106. package/docs/i18n/HARNESS_AIDER.zh.md +48 -0
  107. package/docs/i18n/HARNESS_CLAUDE.es.md +55 -0
  108. package/docs/i18n/HARNESS_CLAUDE.fr.md +55 -0
  109. package/docs/i18n/HARNESS_CLAUDE.ja.md +56 -0
  110. package/docs/i18n/HARNESS_CLAUDE.ko.md +56 -0
  111. package/docs/i18n/HARNESS_CLAUDE.ru.md +55 -0
  112. package/docs/i18n/HARNESS_CLAUDE.zh.md +56 -0
  113. package/docs/i18n/HARNESS_CODEX.es.md +55 -0
  114. package/docs/i18n/HARNESS_CODEX.fr.md +55 -0
  115. package/docs/i18n/HARNESS_CODEX.ja.md +56 -0
  116. package/docs/i18n/HARNESS_CODEX.ko.md +56 -0
  117. package/docs/i18n/HARNESS_CODEX.ru.md +55 -0
  118. package/docs/i18n/HARNESS_CODEX.zh.md +56 -0
  119. package/docs/i18n/HARNESS_CURSOR.es.md +42 -0
  120. package/docs/i18n/HARNESS_CURSOR.fr.md +42 -0
  121. package/docs/i18n/HARNESS_CURSOR.ja.md +45 -0
  122. package/docs/i18n/HARNESS_CURSOR.ko.md +45 -0
  123. package/docs/i18n/HARNESS_CURSOR.ru.md +42 -0
  124. package/docs/i18n/HARNESS_CURSOR.zh.md +42 -0
  125. package/docs/i18n/HARNESS_GEMINI.es.md +44 -0
  126. package/docs/i18n/HARNESS_GEMINI.fr.md +44 -0
  127. package/docs/i18n/HARNESS_GEMINI.ja.md +45 -0
  128. package/docs/i18n/HARNESS_GEMINI.ko.md +45 -0
  129. package/docs/i18n/HARNESS_GEMINI.ru.md +44 -0
  130. package/docs/i18n/HARNESS_GEMINI.zh.md +45 -0
  131. package/docs/i18n/HARNESS_HERMES.es.md +54 -0
  132. package/docs/i18n/HARNESS_HERMES.fr.md +54 -0
  133. package/docs/i18n/HARNESS_HERMES.ja.md +57 -0
  134. package/docs/i18n/HARNESS_HERMES.ko.md +57 -0
  135. package/docs/i18n/HARNESS_HERMES.ru.md +54 -0
  136. package/docs/i18n/HARNESS_HERMES.zh.md +57 -0
  137. package/docs/i18n/HARNESS_OPENCLAW.es.md +41 -0
  138. package/docs/i18n/HARNESS_OPENCLAW.fr.md +41 -0
  139. package/docs/i18n/HARNESS_OPENCLAW.ja.md +44 -0
  140. package/docs/i18n/HARNESS_OPENCLAW.ko.md +44 -0
  141. package/docs/i18n/HARNESS_OPENCLAW.ru.md +41 -0
  142. package/docs/i18n/HARNESS_OPENCLAW.zh.md +42 -0
  143. package/docs/i18n/HARNESS_OPENCODE.es.md +41 -0
  144. package/docs/i18n/HARNESS_OPENCODE.fr.md +41 -0
  145. package/docs/i18n/HARNESS_OPENCODE.ja.md +44 -0
  146. package/docs/i18n/HARNESS_OPENCODE.ko.md +44 -0
  147. package/docs/i18n/HARNESS_OPENCODE.ru.md +41 -0
  148. package/docs/i18n/HARNESS_OPENCODE.zh.md +44 -0
  149. package/docs/superpowers/plans/2026-05-14-cross-agent-voice-transfer.md +625 -0
  150. package/docs/superpowers/plans/2026-05-21-audio-overview-narrated-diffs.md +95 -0
  151. package/docs/superpowers/plans/2026-05-21-autoresearch-ontology.md +83 -0
  152. package/docs/superpowers/plans/2026-05-21-phase11-push-to-talk-wakeword-v2.md +77 -0
  153. package/docs/superpowers/plans/2026-05-21-phase12-multi-user-voice.md +147 -0
  154. package/docs/superpowers/plans/2026-05-21-phase14-verbalbench.md +136 -0
  155. package/docs/superpowers/plans/2026-05-21-phase15-phone-companion.md +72 -0
  156. package/integrations/fireredtts2/mlx_llm.py +183 -0
  157. package/integrations/fireredtts2/synth.py +156 -0
  158. package/integrations/fireredtts2/synth_mlx.py +196 -0
  159. package/integrations/mlxaudio/synth.py +74 -0
  160. package/integrations/neuttsair/synth.py +104 -0
  161. package/integrations/omnivoice/synth.py +110 -0
  162. package/package.json +6 -1
  163. package/scripts/cli.mjs +84 -0
  164. package/scripts/doctor.mjs +104 -4
  165. package/scripts/install.mjs +5 -1
  166. package/scripts/install_fireredtts2.sh +109 -0
  167. package/scripts/install_mlxaudio.sh +34 -0
  168. package/scripts/install_mossttsnano.sh +46 -0
  169. 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
+ }