mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-06 09:50:42 +00:00
[codex] Extract filesystem safety primitives (#77918)
* refactor: extract filesystem safety primitives * refactor: use fs-safe for file access helpers * refactor: reuse fs-safe for media reads * refactor: use fs-safe for image reads * refactor: reuse fs-safe in qqbot media opener * refactor: reuse fs-safe for local media checks * refactor: consume cleaner fs-safe api * refactor: align fs-safe json option names * fix: preserve fs-safe migration contracts * refactor: use fs-safe primitive subpaths * refactor: use grouped fs-safe subpaths * refactor: align fs-safe api usage * refactor: adapt private state store api * chore: refresh proof gate * refactor: follow fs-safe json api split * refactor: follow reduced fs-safe surface * build: default fs-safe python helper off * fix: preserve fs-safe plugin sdk aliases * refactor: consolidate fs-safe usage * refactor: unify fs-safe store usage * refactor: trim fs-safe temp workspace usage * refactor: hide low-level fs-safe primitives * build: use published fs-safe package * fix: preserve outbound recovery durability after rebase * chore: refresh pr checks
This commit is contained in:
committed by
GitHub
parent
61481eb34f
commit
538605ff44
@@ -1,5 +1,5 @@
|
||||
import { spawn } from "node:child_process";
|
||||
import { existsSync, mkdtempSync, readdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
|
||||
import { existsSync, readdirSync, readFileSync } from "node:fs";
|
||||
import path from "node:path";
|
||||
import { runFfmpeg } from "openclaw/plugin-sdk/media-runtime";
|
||||
import { createSubsystemLogger } from "openclaw/plugin-sdk/runtime-env";
|
||||
@@ -9,7 +9,7 @@ import type {
|
||||
SpeechSynthesisRequest,
|
||||
SpeechTelephonySynthesisRequest,
|
||||
} from "openclaw/plugin-sdk/speech-core";
|
||||
import { resolvePreferredOpenClawTmpDir } from "openclaw/plugin-sdk/temp-path";
|
||||
import { tempWorkspace, resolvePreferredOpenClawTmpDir } from "openclaw/plugin-sdk/temp-path";
|
||||
|
||||
const log = createSubsystemLogger("tts-local-cli");
|
||||
|
||||
@@ -326,7 +326,11 @@ export function buildCliSpeechProvider(): SpeechProviderPlugin {
|
||||
|
||||
log.debug(`synthesize: text=${req.text.slice(0, 50)}...`);
|
||||
|
||||
const tempDir = mkdtempSync(path.join(resolvePreferredOpenClawTmpDir(), "openclaw-cli-tts-"));
|
||||
const temp = await tempWorkspace({
|
||||
rootDir: resolvePreferredOpenClawTmpDir(),
|
||||
prefix: "openclaw-cli-tts-",
|
||||
});
|
||||
const tempDir = temp.dir;
|
||||
|
||||
try {
|
||||
const result = await runCli({
|
||||
@@ -351,7 +355,7 @@ export function buildCliSpeechProvider(): SpeechProviderPlugin {
|
||||
const inputFile =
|
||||
result.audioPath ?? path.join(tempDir, `input${getFileExt(result.actualFormat)}`);
|
||||
if (!result.audioPath) {
|
||||
writeFileSync(inputFile, result.buffer);
|
||||
await temp.write(`input${getFileExt(result.actualFormat)}`, result.buffer);
|
||||
}
|
||||
buffer = await convertAudio(inputFile, tempDir, "opus");
|
||||
format = "opus";
|
||||
@@ -365,7 +369,7 @@ export function buildCliSpeechProvider(): SpeechProviderPlugin {
|
||||
const inputFile =
|
||||
result.audioPath ?? path.join(tempDir, `input${getFileExt(result.actualFormat)}`);
|
||||
if (!result.audioPath) {
|
||||
writeFileSync(inputFile, result.buffer);
|
||||
await temp.write(`input${getFileExt(result.actualFormat)}`, result.buffer);
|
||||
}
|
||||
buffer = await convertAudio(inputFile, tempDir, desired);
|
||||
format = desired;
|
||||
@@ -383,9 +387,7 @@ export function buildCliSpeechProvider(): SpeechProviderPlugin {
|
||||
voiceCompatible: req.target === "voice-note" && format === "opus",
|
||||
};
|
||||
} finally {
|
||||
try {
|
||||
rmSync(tempDir, { recursive: true, force: true });
|
||||
} catch {}
|
||||
await temp.cleanup();
|
||||
}
|
||||
},
|
||||
|
||||
@@ -397,7 +399,11 @@ export function buildCliSpeechProvider(): SpeechProviderPlugin {
|
||||
|
||||
log.debug(`synthesizeTelephony: text=${req.text.slice(0, 50)}...`);
|
||||
|
||||
const tempDir = mkdtempSync(path.join(resolvePreferredOpenClawTmpDir(), "openclaw-cli-tts-"));
|
||||
const temp = await tempWorkspace({
|
||||
rootDir: resolvePreferredOpenClawTmpDir(),
|
||||
prefix: "openclaw-cli-tts-",
|
||||
});
|
||||
const tempDir = temp.dir;
|
||||
|
||||
try {
|
||||
const result = await runCli({
|
||||
@@ -415,7 +421,7 @@ export function buildCliSpeechProvider(): SpeechProviderPlugin {
|
||||
const inputFile =
|
||||
result.audioPath ?? path.join(tempDir, `input${getFileExt(result.actualFormat)}`);
|
||||
if (!result.audioPath) {
|
||||
writeFileSync(inputFile, result.buffer);
|
||||
await temp.write(`input${getFileExt(result.actualFormat)}`, result.buffer);
|
||||
}
|
||||
|
||||
// Convert to raw 16kHz mono PCM for telephony (no WAV headers)
|
||||
@@ -427,9 +433,7 @@ export function buildCliSpeechProvider(): SpeechProviderPlugin {
|
||||
sampleRate: 16000,
|
||||
};
|
||||
} finally {
|
||||
try {
|
||||
rmSync(tempDir, { recursive: true, force: true });
|
||||
} catch {}
|
||||
await temp.cleanup();
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user