mirror of
http://192.168.0.88:13333/lywsvip/openclaw-zero-token.git
synced 2026-05-07 15:50:59 +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
50 lines
1.2 KiB
TypeScript
50 lines
1.2 KiB
TypeScript
export type KeyedAsyncQueueHooks = {
|
|
onEnqueue?: () => void;
|
|
onSettle?: () => void;
|
|
};
|
|
|
|
/** Serialize async work per key while allowing unrelated keys to run concurrently. */
|
|
export function enqueueKeyedTask<T>(params: {
|
|
tails: Map<string, Promise<void>>;
|
|
key: string;
|
|
task: () => Promise<T>;
|
|
hooks?: KeyedAsyncQueueHooks;
|
|
}): Promise<T> {
|
|
params.hooks?.onEnqueue?.();
|
|
const previous = params.tails.get(params.key) ?? Promise.resolve();
|
|
const current = previous
|
|
.catch(() => undefined)
|
|
.then(params.task)
|
|
.finally(() => {
|
|
params.hooks?.onSettle?.();
|
|
});
|
|
const tail = current.then(
|
|
() => undefined,
|
|
() => undefined,
|
|
);
|
|
params.tails.set(params.key, tail);
|
|
void tail.finally(() => {
|
|
if (params.tails.get(params.key) === tail) {
|
|
params.tails.delete(params.key);
|
|
}
|
|
});
|
|
return current;
|
|
}
|
|
|
|
export class KeyedAsyncQueue {
|
|
private readonly tails = new Map<string, Promise<void>>();
|
|
|
|
getTailMapForTesting(): Map<string, Promise<void>> {
|
|
return this.tails;
|
|
}
|
|
|
|
enqueue<T>(key: string, task: () => Promise<T>, hooks?: KeyedAsyncQueueHooks): Promise<T> {
|
|
return enqueueKeyedTask({
|
|
tails: this.tails,
|
|
key,
|
|
task,
|
|
...(hooks ? { hooks } : {}),
|
|
});
|
|
}
|
|
}
|