UNPKG

autosnippet

Version:

Extract code patterns into a knowledge base for AI coding assistants

77 lines (76 loc) 2.14 kB
/** * 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 {};