autosnippet
Version:
Extract code patterns into a knowledge base for AI coding assistants
77 lines (76 loc) • 2.14 kB
TypeScript
/**
* TemporaryToolRegistry — TTL 临时工具注册
*
* 在 ToolRegistry 之上增加 TTL 自动回收机制。
* 锻造的工具默认 30 分钟有效,到期自动从 ToolRegistry 中移除。
*
* 设计:
* - 装饰器模式,不修改 ToolRegistry 核心逻辑
* - 定期检查(60s 间隔)清理过期工具
* - 支持手动续期和提前回收
*/
import type { SignalBus } from '#infra/signal/SignalBus.js';
interface ToolRegistryLike {
register(toolDef: {
name: string;
description: string;
parameters?: Record<string, unknown>;
handler: Function;
}): void;
unregister(name: string): boolean;
has(name: string): boolean;
}
export interface TemporaryTool {
name: string;
description: string;
parameters: Record<string, unknown>;
handler: (params: Record<string, unknown>, context: Record<string, unknown>) => Promise<unknown>;
/** 锻造模式 */
forgeMode: 'reuse' | 'compose' | 'generate';
/** 注册时间 (ms) */
registeredAt: number;
/** 过期时间 (ms),0 = never */
expiresAt: number;
}
export interface TemporaryToolInfo {
name: string;
forgeMode: string;
registeredAt: number;
expiresAt: number;
remainingMs: number;
}
export declare class TemporaryToolRegistry {
#private;
constructor(registry: ToolRegistryLike, options?: {
signalBus?: SignalBus;
});
/**
* 注册一个临时工具
*/
registerTemporary(tool: Omit<TemporaryTool, 'registeredAt' | 'expiresAt'>, ttlMs?: number): void;
/**
* 手动回收临时工具
*/
revoke(name: string): boolean;
/**
* 续期临时工具
*/
renew(name: string, additionalMs?: number): boolean;
/**
* 清理过期工具
*/
cleanup(): number;
/**
* 获取所有临时工具信息
*/
list(): TemporaryToolInfo[];
/**
* 检查是否是临时工具
*/
isTemporary(name: string): boolean;
/** 临时工具数量 */
get size(): number;
/** 停止定期清理(用于 shutdown) */
dispose(): void;
}
export {};