mirror of
http://192.168.0.88:13333/lywsvip/openclaw-zero-token.git
synced 2026-05-22 15:21:43 +08:00
Major upgrade from e26988a38 to upstream v2026.3.28 (f9b107928).
Key changes:
- Upstream src/, ui/, extensions/ (89 bundled extensions)
- Zero-token web providers preserved in src/zero-token/
- AskOnce plugin restored and registered as CLI command
- Added missing packages: @anthropic-ai/vertex-sdk, @modelcontextprotocol/sdk
- Fixed tsconfig rootDir, skipLibCheck for plugin-sdk DTS build
- Added askonce to bundled plugin metadata and package.json exports
- Fixed AskOnce CLI command registration (missing commands metadata)
- Restored AskOnce adapter imports (correct 5-level relative paths)
- Removed stale migration artifacts from root directory
69 lines
1.7 KiB
TypeScript
69 lines
1.7 KiB
TypeScript
export type SafeStreamWriterOptions = {
|
|
beforeWrite?: () => void;
|
|
onBrokenPipe?: (err: NodeJS.ErrnoException, stream: NodeJS.WriteStream) => void;
|
|
};
|
|
|
|
export type SafeStreamWriter = {
|
|
write: (stream: NodeJS.WriteStream, text: string) => boolean;
|
|
writeLine: (stream: NodeJS.WriteStream, text: string) => boolean;
|
|
reset: () => void;
|
|
isClosed: () => boolean;
|
|
};
|
|
|
|
function isBrokenPipeError(err: unknown): err is NodeJS.ErrnoException {
|
|
const code = (err as NodeJS.ErrnoException)?.code;
|
|
return code === "EPIPE" || code === "EIO";
|
|
}
|
|
|
|
export function createSafeStreamWriter(options: SafeStreamWriterOptions = {}): SafeStreamWriter {
|
|
let closed = false;
|
|
let notified = false;
|
|
|
|
const noteBrokenPipe = (err: NodeJS.ErrnoException, stream: NodeJS.WriteStream) => {
|
|
if (notified) {
|
|
return;
|
|
}
|
|
notified = true;
|
|
options.onBrokenPipe?.(err, stream);
|
|
};
|
|
|
|
const handleError = (err: unknown, stream: NodeJS.WriteStream): boolean => {
|
|
if (!isBrokenPipeError(err)) {
|
|
throw err;
|
|
}
|
|
closed = true;
|
|
noteBrokenPipe(err, stream);
|
|
return false;
|
|
};
|
|
|
|
const write = (stream: NodeJS.WriteStream, text: string): boolean => {
|
|
if (closed) {
|
|
return false;
|
|
}
|
|
try {
|
|
options.beforeWrite?.();
|
|
} catch (err) {
|
|
return handleError(err, process.stderr);
|
|
}
|
|
try {
|
|
stream.write(text);
|
|
return !closed;
|
|
} catch (err) {
|
|
return handleError(err, stream);
|
|
}
|
|
};
|
|
|
|
const writeLine = (stream: NodeJS.WriteStream, text: string): boolean =>
|
|
write(stream, `${text}\n`);
|
|
|
|
return {
|
|
write,
|
|
writeLine,
|
|
reset: () => {
|
|
closed = false;
|
|
notified = false;
|
|
},
|
|
isClosed: () => closed,
|
|
};
|
|
}
|