Files
openclaw-zero-token/daemon/arg-split.ts
sjhu 571e14a236 feat: upgrade to upstream v2026.3.28
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
2026-03-30 17:58:12 +08:00

49 lines
1.0 KiB
TypeScript

export type ArgSplitEscapeMode = "none" | "backslash" | "backslash-quote-only";
export function splitArgsPreservingQuotes(
value: string,
options?: { escapeMode?: ArgSplitEscapeMode },
): string[] {
const args: string[] = [];
let current = "";
let inQuotes = false;
const escapeMode = options?.escapeMode ?? "none";
for (let i = 0; i < value.length; i++) {
const char = value[i];
if (escapeMode === "backslash" && char === "\\") {
if (i + 1 < value.length) {
current += value[i + 1];
i++;
}
continue;
}
if (
escapeMode === "backslash-quote-only" &&
char === "\\" &&
i + 1 < value.length &&
value[i + 1] === '"'
) {
current += '"';
i++;
continue;
}
if (char === '"') {
inQuotes = !inQuotes;
continue;
}
if (!inQuotes && /\s/.test(char)) {
if (current) {
args.push(current);
current = "";
}
continue;
}
current += char;
}
if (current) {
args.push(current);
}
return args;
}