@foxden-app/foxclaw 0.5.48 → 0.5.49

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 CHANGED
@@ -56,17 +56,23 @@ CODEX_CLI_BIN=/absolute/path/to/codex
56
56
  # Optional Telegram voice summaries.
57
57
  # When enabled, completed final answers get a "listen" button and /voice can
58
58
  # generate Telegram voice messages. SSH mode runs TTS and ffmpeg conversion on
59
- # the speech host; HTTP mode calls VOICE_TTS_URL and converts locally.
59
+ # your own speech host; HTTP mode calls your own VOICE_TTS_URL and converts
60
+ # locally. FoxClaw does not ship with a public TTS backend.
60
61
  # VOICE_TTS_ENABLED=false
62
+ # HTTP backend example: compatible service exposing /v1/tts/custom or
63
+ # /v1/tts/design and returning WAV audio. Local ffmpeg is required.
64
+ # VOICE_TTS_MODE=http
65
+ # VOICE_TTS_URL=http://127.0.0.1:18081
66
+ # VOICE_TTS_TOKEN=
67
+ # VOICE_FFMPEG_BIN=ffmpeg
68
+ # SSH backend example: remote host has the compatible service, token in its
69
+ # service .env, and ffmpeg available on the remote host.
61
70
  # VOICE_TTS_MODE=ssh
62
- # VOICE_TTS_SSH_HOST=thinkbook16p
63
- # VOICE_TTS_SSH_DIR=/home/wuya/dev/qwen-speech-server
71
+ # VOICE_TTS_SSH_HOST=<ssh-host>
72
+ # VOICE_TTS_SSH_DIR=/path/to/qwen-speech-server
64
73
  # VOICE_TTS_DESIGN_INSTRUCT=用自然清晰的中文女声朗读,语速适中。
65
74
  # VOICE_SUMMARY_BUTTON_ENABLED=true
66
75
  # VOICE_TEXT_LIMIT=2800
67
- # VOICE_TTS_URL=https://tts.foxden.app
68
- # VOICE_TTS_TOKEN=
69
- # VOICE_FFMPEG_BIN=ffmpeg
70
76
 
71
77
  # Optional: standard HTTP(S) proxy for Telegram and ChatGPT/Codex backend requests.
72
78
  # Put these in the same env file that `foxclaw start` installs into systemd/launchd.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,18 @@
2
2
 
3
3
  All notable FoxClaw changes are listed here. Each release note is bilingual so GitHub Releases and the npm package are useful to both Chinese and English readers.
4
4
 
5
+ ## 0.5.49 - 2026-06-20
6
+
7
+ ### 中文
8
+ - 将 Telegram 总结语音后端彻底改为用户自配:默认不再内置 `thinkbook16p`、`tts.foxden.app` 或任何私有 TTS 服务地址。
9
+ - 启用语音后如果缺少 `VOICE_TTS_URL` 或 `VOICE_TTS_SSH_HOST`/`VOICE_TTS_SSH_DIR`,会明确提示配置缺失,而不是尝试连接开发者私有服务。
10
+ - 更新 `.env.example`,把 HTTP/SSH 语音后端写成通用占位示例,明确 FoxClaw 不随包提供公共 TTS 后端。
11
+
12
+ ### English
13
+ - Made the Telegram voice-summary backend fully user-configured: FoxClaw no longer embeds `thinkbook16p`, `tts.foxden.app`, or any private TTS service endpoint as a product default.
14
+ - When voice is enabled without `VOICE_TTS_URL` or `VOICE_TTS_SSH_HOST`/`VOICE_TTS_SSH_DIR`, FoxClaw now reports the missing configuration instead of trying a developer-private service.
15
+ - Updated `.env.example` to show generic HTTP/SSH backend placeholders and state that FoxClaw does not ship with a public TTS backend.
16
+
5
17
  ## 0.5.48 - 2026-06-20
6
18
 
7
19
  ### 中文
package/dist/config.d.ts CHANGED
@@ -67,8 +67,8 @@ export interface AppConfig {
67
67
  voiceTtsMode: 'http' | 'ssh';
68
68
  voiceTtsUrl: string | null;
69
69
  voiceTtsToken: string | null;
70
- voiceTtsSshHost: string;
71
- voiceTtsSshDir: string;
70
+ voiceTtsSshHost: string | null;
71
+ voiceTtsSshDir: string | null;
72
72
  voiceTtsDesignInstruct: string;
73
73
  voiceFfmpegBin: string;
74
74
  voiceSummaryButtonEnabled: boolean;
package/dist/config.js CHANGED
@@ -98,11 +98,11 @@ export function loadConfig() {
98
98
  authSyncTempDir: process.env.AUTH_SYNC_TEMP_DIR || DEFAULT_AUTH_SYNC_TEMP_DIR,
99
99
  authAutoDeleteNeedsRepair: boolEnv('AUTH_AUTO_DELETE_NEEDS_REPAIR', false),
100
100
  voiceTtsEnabled: boolEnv('VOICE_TTS_ENABLED', false),
101
- voiceTtsMode: parseVoiceTtsMode(process.env.VOICE_TTS_MODE || (process.env.VOICE_TTS_URL?.trim() ? 'http' : 'ssh')),
102
- voiceTtsUrl: optional('VOICE_TTS_URL') ?? 'https://tts.foxden.app',
101
+ voiceTtsMode: parseVoiceTtsMode(process.env.VOICE_TTS_MODE || (process.env.VOICE_TTS_SSH_HOST?.trim() ? 'ssh' : 'http')),
102
+ voiceTtsUrl: optional('VOICE_TTS_URL'),
103
103
  voiceTtsToken: optional('VOICE_TTS_TOKEN'),
104
- voiceTtsSshHost: process.env.VOICE_TTS_SSH_HOST?.trim() || 'thinkbook16p',
105
- voiceTtsSshDir: process.env.VOICE_TTS_SSH_DIR?.trim() || '/home/wuya/dev/qwen-speech-server',
104
+ voiceTtsSshHost: optional('VOICE_TTS_SSH_HOST'),
105
+ voiceTtsSshDir: optional('VOICE_TTS_SSH_DIR'),
106
106
  voiceTtsDesignInstruct: process.env.VOICE_TTS_DESIGN_INSTRUCT?.trim() || '用自然清晰的中文女声朗读,语速适中。',
107
107
  voiceFfmpegBin: process.env.VOICE_FFMPEG_BIN?.trim() || 'ffmpeg',
108
108
  voiceSummaryButtonEnabled: boolEnv('VOICE_SUMMARY_BUTTON_ENABLED', true),
package/dist/voice/tts.js CHANGED
@@ -105,6 +105,12 @@ async function convertToOggOpus(input, ffmpegBin) {
105
105
  }
106
106
  }
107
107
  async function synthesizeViaSsh(text, config) {
108
+ if (!config.voiceTtsSshHost) {
109
+ throw new Error('VOICE_TTS_SSH_HOST is not configured');
110
+ }
111
+ if (!config.voiceTtsSshDir) {
112
+ throw new Error('VOICE_TTS_SSH_DIR is not configured');
113
+ }
108
114
  const encodedText = Buffer.from(text, 'utf8').toString('base64');
109
115
  const script = String.raw `set -euo pipefail
110
116
  TEXT="$(printf '%s' "$1" | base64 -d)"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@foxden-app/foxclaw",
3
- "version": "0.5.48",
3
+ "version": "0.5.49",
4
4
  "description": "Foxden local execution claw for controlling Codex from trusted chat interfaces.",
5
5
  "type": "module",
6
6
  "main": "dist/main.js",