UNPKG

pm-orchestrator-enhancement

Version:

PM Orchestrator Enhancement - Multi-agent parallel execution system

159 lines 4.1 kB
"use strict"; /** * Context Store Module * * サブエージェント間のデータ共有機構とライフサイクル管理を提供します。 */ Object.defineProperty(exports, "__esModule", { value: true }); exports.ContextStore = void 0; class ContextStore { constructor() { this.store = new Map(); } /** * コンテキストを設定 */ set(key, data, source, ttl) { const now = new Date(); const expiresAt = ttl ? new Date(now.getTime() + ttl) : undefined; this.store.set(key, { data, metadata: { createdAt: now, updatedAt: now, expiresAt, source } }); } /** * コンテキストを取得 */ get(key) { const entry = this.store.get(key); if (!entry) { return null; } // 有効期限チェック if (entry.metadata.expiresAt && entry.metadata.expiresAt < new Date()) { this.store.delete(key); return null; } return entry.data; } /** * コンテキストを更新 */ update(key, data, source) { const entry = this.store.get(key); if (!entry) { return false; } entry.data = { ...entry.data, ...data }; entry.metadata.updatedAt = new Date(); entry.metadata.source = source; return true; } /** * コンテキストを削除 */ delete(key) { return this.store.delete(key); } /** * 全てのキーを取得 */ keys() { return Array.from(this.store.keys()); } /** * 特定のソースのコンテキストを取得 */ getBySource(source) { const result = new Map(); for (const [key, entry] of this.store.entries()) { if (entry.metadata.source === source) { result.set(key, entry.data); } } return result; } /** * 期限切れエントリをクリーンアップ */ cleanup() { const now = new Date(); let removed = 0; for (const [key, entry] of this.store.entries()) { if (entry.metadata.expiresAt && entry.metadata.expiresAt < now) { this.store.delete(key); removed++; } } return removed; } /** * 全てクリア */ clear() { this.store.clear(); } /** * エントリ数を取得 */ size() { return this.store.size; } /** * コンテキストが存在するかチェック */ has(key) { const entry = this.store.get(key); if (!entry) { return false; } // 有効期限チェック if (entry.metadata.expiresAt && entry.metadata.expiresAt < new Date()) { this.store.delete(key); return false; } return true; } /** * メタデータを取得 */ getMetadata(key) { const entry = this.store.get(key); return entry ? entry.metadata : null; } /** * 名前空間でコンテキストをグループ化 */ getNamespace(namespace) { const result = new Map(); const prefix = `${namespace}:`; for (const [key, entry] of this.store.entries()) { if (key.startsWith(prefix)) { const shortKey = key.substring(prefix.length); result.set(shortKey, entry.data); } } return result; } /** * 名前空間のコンテキストをクリア */ clearNamespace(namespace) { const prefix = `${namespace}:`; let removed = 0; for (const key of this.store.keys()) { if (key.startsWith(prefix)) { this.store.delete(key); removed++; } } return removed; } } exports.ContextStore = ContextStore; //# sourceMappingURL=context-store.js.map