pm-orchestrator-enhancement
Version:
PM Orchestrator Enhancement - Multi-agent parallel execution system
159 lines • 4.1 kB
JavaScript
"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