opcode-pg-memory 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +42 -0
- package/README.md +132 -0
- package/dist/cli.js +165 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20938 -0
- package/dist/mcp-server.d.ts +8 -0
- package/dist/mcp-server.d.ts.map +1 -0
- package/dist/mcp-server.js +24047 -0
- package/dist/src/cache/semantic-cache.d.ts +120 -0
- package/dist/src/cache/semantic-cache.d.ts.map +1 -0
- package/dist/src/cli.d.ts +3 -0
- package/dist/src/cli.d.ts.map +1 -0
- package/dist/src/config.d.ts +39 -0
- package/dist/src/config.d.ts.map +1 -0
- package/dist/src/db/init-db.d.ts +45 -0
- package/dist/src/db/init-db.d.ts.map +1 -0
- package/dist/src/hooks/message-part-updated.d.ts +24 -0
- package/dist/src/hooks/message-part-updated.d.ts.map +1 -0
- package/dist/src/hooks/message-updated.d.ts +24 -0
- package/dist/src/hooks/message-updated.d.ts.map +1 -0
- package/dist/src/hooks/session-compacting.d.ts +50 -0
- package/dist/src/hooks/session-compacting.d.ts.map +1 -0
- package/dist/src/hooks/session-completed.d.ts +36 -0
- package/dist/src/hooks/session-completed.d.ts.map +1 -0
- package/dist/src/hooks/session-created.d.ts +23 -0
- package/dist/src/hooks/session-created.d.ts.map +1 -0
- package/dist/src/hooks/tool-execute.d.ts +32 -0
- package/dist/src/hooks/tool-execute.d.ts.map +1 -0
- package/dist/src/index.d.ts +64 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/mcp/hindsight-reflect-omo.d.ts +64 -0
- package/dist/src/mcp/hindsight-reflect-omo.d.ts.map +1 -0
- package/dist/src/mcp/hindsight-reflect.d.ts +75 -0
- package/dist/src/mcp/hindsight-reflect.d.ts.map +1 -0
- package/dist/src/mcp/recall-memory-omo.d.ts +47 -0
- package/dist/src/mcp/recall-memory-omo.d.ts.map +1 -0
- package/dist/src/mcp/recall-memory.d.ts +89 -0
- package/dist/src/mcp/recall-memory.d.ts.map +1 -0
- package/dist/src/omo/adapter.d.ts +144 -0
- package/dist/src/omo/adapter.d.ts.map +1 -0
- package/dist/src/omo/types.d.ts +132 -0
- package/dist/src/omo/types.d.ts.map +1 -0
- package/dist/src/services/keyword.d.ts +4 -0
- package/dist/src/services/keyword.d.ts.map +1 -0
- package/dist/src/services/logger.d.ts +8 -0
- package/dist/src/services/logger.d.ts.map +1 -0
- package/dist/src/services/privacy.d.ts +4 -0
- package/dist/src/services/privacy.d.ts.map +1 -0
- package/dist/src/topic/segment-manager.d.ts +165 -0
- package/dist/src/topic/segment-manager.d.ts.map +1 -0
- package/dist/src/types.d.ts +405 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/utils/embedding.d.ts +44 -0
- package/dist/src/utils/embedding.d.ts.map +1 -0
- package/dist/src/utils/token-budget.d.ts +68 -0
- package/dist/src/utils/token-budget.d.ts.map +1 -0
- package/package.json +68 -0
- package/scripts/migration-v2.sql +187 -0
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { Pool } from 'pg';
|
|
2
|
+
import { CacheResult } from '../types';
|
|
3
|
+
export interface SemanticCacheConfig {
|
|
4
|
+
initialThreshold: number;
|
|
5
|
+
adjustmentStep: number;
|
|
6
|
+
minThreshold: number;
|
|
7
|
+
maxThreshold: number;
|
|
8
|
+
queryWindowSize: number;
|
|
9
|
+
enabled: boolean;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* 语义缓存管理器
|
|
13
|
+
*
|
|
14
|
+
* 功能:
|
|
15
|
+
* 1. 使用 HNSW 索引实现亚 10ms 级检索
|
|
16
|
+
* 2. 动态阈值调整(初始 0.92,每 100 次查询根据命中率 ±0.02)
|
|
17
|
+
* 3. 与 DCP 协同,设置最高检索优先级
|
|
18
|
+
* 4. 缓存命中后直接返回,零 token 消耗
|
|
19
|
+
*/
|
|
20
|
+
export declare class SemanticCacheManager {
|
|
21
|
+
private pool;
|
|
22
|
+
private config;
|
|
23
|
+
private currentThreshold;
|
|
24
|
+
private queryCount;
|
|
25
|
+
private hitCount;
|
|
26
|
+
constructor(pool: Pool, config?: Partial<SemanticCacheConfig>);
|
|
27
|
+
/**
|
|
28
|
+
* 检查缓存
|
|
29
|
+
*
|
|
30
|
+
* 流程:
|
|
31
|
+
* 1. 生成查询哈希
|
|
32
|
+
* 2. 使用 HNSW 索引快速检索候选
|
|
33
|
+
* 3. 检查相似度是否达到阈值
|
|
34
|
+
* 4. 更新命中统计
|
|
35
|
+
*/
|
|
36
|
+
checkCache(queryText: string): Promise<CacheResult & {
|
|
37
|
+
cached?: boolean;
|
|
38
|
+
cacheId?: string;
|
|
39
|
+
similarity?: number;
|
|
40
|
+
}>;
|
|
41
|
+
/**
|
|
42
|
+
* 存储缓存
|
|
43
|
+
*/
|
|
44
|
+
storeCache(queryText: string, responseText: string, sessionId?: string): Promise<string | null>;
|
|
45
|
+
/**
|
|
46
|
+
* 记录缓存命中
|
|
47
|
+
*/
|
|
48
|
+
private recordHit;
|
|
49
|
+
/**
|
|
50
|
+
* 记录缓存未命中
|
|
51
|
+
*/
|
|
52
|
+
private recordMiss;
|
|
53
|
+
/**
|
|
54
|
+
* 动态调整阈值
|
|
55
|
+
*
|
|
56
|
+
* 策略:
|
|
57
|
+
* - 每 100 次查询检查一次
|
|
58
|
+
* - 命中率 < 30%:降低阈值(提高命中率)
|
|
59
|
+
* - 命中率 > 80%:提高阈值(提高精确度)
|
|
60
|
+
*/
|
|
61
|
+
private maybeAdjustThreshold;
|
|
62
|
+
/**
|
|
63
|
+
* 生成查询哈希
|
|
64
|
+
*/
|
|
65
|
+
private generateQueryHash;
|
|
66
|
+
/**
|
|
67
|
+
* 生成查询向量
|
|
68
|
+
*
|
|
69
|
+
* 注意:实际应调用 embedding API
|
|
70
|
+
*/
|
|
71
|
+
private generateQueryEmbedding;
|
|
72
|
+
/**
|
|
73
|
+
* 标记缓存为已压缩(DCP 协同)
|
|
74
|
+
*/
|
|
75
|
+
markAsPruned(cacheId: string): Promise<void>;
|
|
76
|
+
/**
|
|
77
|
+
* 批量标记缓存为已压缩
|
|
78
|
+
*/
|
|
79
|
+
markMultipleAsPruned(cacheIds: string[]): Promise<void>;
|
|
80
|
+
/**
|
|
81
|
+
* 获取缓存统计
|
|
82
|
+
*/
|
|
83
|
+
getStats(): Promise<{
|
|
84
|
+
totalEntries: number;
|
|
85
|
+
prunedEntries: number;
|
|
86
|
+
totalHits: number;
|
|
87
|
+
currentThreshold: number;
|
|
88
|
+
averageHitCount: number;
|
|
89
|
+
}>;
|
|
90
|
+
/**
|
|
91
|
+
* 清理过期缓存
|
|
92
|
+
*/
|
|
93
|
+
cleanupExpiredCache(maxAgeDays?: number): Promise<number>;
|
|
94
|
+
/**
|
|
95
|
+
* 获取当前阈值
|
|
96
|
+
*/
|
|
97
|
+
getCurrentThreshold(): number;
|
|
98
|
+
/**
|
|
99
|
+
* 手动设置阈值
|
|
100
|
+
*/
|
|
101
|
+
setThreshold(threshold: number): Promise<void>;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* 带缓存优先级的查询包装器
|
|
105
|
+
*
|
|
106
|
+
* 使用方式:
|
|
107
|
+
* 1. 首先检查语义缓存
|
|
108
|
+
* 2. 缓存命中:直接返回,零 token 消耗
|
|
109
|
+
* 3. 缓存未命中:执行实际查询,并存入缓存
|
|
110
|
+
*/
|
|
111
|
+
export declare function queryWithCachePriority<T>(queryText: string, actualQuery: () => Promise<T>, cacheManager: SemanticCacheManager, shouldCache?: (result: T) => boolean): Promise<{
|
|
112
|
+
result: T;
|
|
113
|
+
fromCache: boolean;
|
|
114
|
+
similarity?: number;
|
|
115
|
+
}>;
|
|
116
|
+
/**
|
|
117
|
+
* 创建缓存管理器实例
|
|
118
|
+
*/
|
|
119
|
+
export declare function createCacheManager(pool: Pool, config?: Partial<SemanticCacheConfig>): SemanticCacheManager;
|
|
120
|
+
//# sourceMappingURL=semantic-cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semantic-cache.d.ts","sourceRoot":"","sources":["../../../src/cache/semantic-cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAE1B,OAAO,EAAiB,WAAW,EAAE,MAAM,UAAU,CAAC;AAEtD,MAAM,WAAW,mBAAmB;IAClC,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;CAClB;AAWD;;;;;;;;GAQG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,IAAI,CAAO;IACnB,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAS;gBAEb,IAAI,EAAE,IAAI,EAAE,MAAM,GAAE,OAAO,CAAC,mBAAmB,CAAM;IAQjE;;;;;;;;OAQG;IACG,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG;QACzD,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;IAsFF;;OAEG;IACG,UAAU,CACd,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAuDzB;;OAEG;YACW,SAAS;IAcvB;;OAEG;YACW,UAAU;IAKxB;;;;;;;OAOG;YACW,oBAAoB;IA+ClC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAazB;;;;OAIG;YACW,sBAAsB;IAQpC;;OAEG;IACG,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQlD;;OAEG;IACG,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAU7D;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC;QACxB,YAAY,EAAE,MAAM,CAAC;QACrB,aAAa,EAAE,MAAM,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC;QAClB,gBAAgB,EAAE,MAAM,CAAC;QACzB,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;IAmBF;;OAEG;IACG,mBAAmB,CAAC,UAAU,GAAE,MAAW,GAAG,OAAO,CAAC,MAAM,CAAC;IAanE;;OAEG;IACH,mBAAmB,IAAI,MAAM;IAI7B;;OAEG;IACG,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAerD;AAED;;;;;;;GAOG;AACH,wBAAsB,sBAAsB,CAAC,CAAC,EAC5C,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC7B,YAAY,EAAE,oBAAoB,EAClC,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,OAAO,GACnC,OAAO,CAAC;IACT,MAAM,EAAE,CAAC,CAAC;IACV,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC,CA0BD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,IAAI,EACV,MAAM,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,GACpC,oBAAoB,CAEtB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export interface PgMemoryConfig {
|
|
2
|
+
pgHost?: string;
|
|
3
|
+
pgPort?: number;
|
|
4
|
+
pgDatabase?: string;
|
|
5
|
+
pgUser?: string;
|
|
6
|
+
pgPassword?: string;
|
|
7
|
+
embeddingProvider?: "ollama" | "deepseek" | "openai";
|
|
8
|
+
embeddingModel?: string;
|
|
9
|
+
embeddingDimensions?: number;
|
|
10
|
+
embeddingBatchSize?: number;
|
|
11
|
+
similarityThreshold?: number;
|
|
12
|
+
maxMemories?: number;
|
|
13
|
+
logLevel?: "debug" | "info" | "warn" | "error";
|
|
14
|
+
compactionThreshold?: number;
|
|
15
|
+
}
|
|
16
|
+
export declare const CONFIG: {
|
|
17
|
+
pgHost: string;
|
|
18
|
+
pgPort: number;
|
|
19
|
+
pgDatabase: string;
|
|
20
|
+
pgUser: string;
|
|
21
|
+
pgPassword: string;
|
|
22
|
+
embeddingProvider: "ollama" | "deepseek" | "openai";
|
|
23
|
+
embeddingModel: string;
|
|
24
|
+
embeddingDimensions: number;
|
|
25
|
+
embeddingBatchSize: number;
|
|
26
|
+
similarityThreshold: number;
|
|
27
|
+
maxMemories: number;
|
|
28
|
+
logLevel: "debug" | "info" | "warn" | "error";
|
|
29
|
+
compactionThreshold: number;
|
|
30
|
+
};
|
|
31
|
+
export declare function isConfigured(): boolean;
|
|
32
|
+
export declare function getDatabaseConfig(): {
|
|
33
|
+
host: string;
|
|
34
|
+
port: number;
|
|
35
|
+
database: string;
|
|
36
|
+
user: string;
|
|
37
|
+
password: string;
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAkBA,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,QAAQ,CAAC;IACrD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IAC/C,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AA8CD,eAAO,MAAM,MAAM;;;;;;uBAMoG,QAAQ,GAAG,UAAU,GAAG,QAAQ;;;;;;cAM1D,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO;;CAE/H,CAAC;AAEF,wBAAgB,YAAY,IAAI,OAAO,CAEtC;AAED,wBAAgB,iBAAiB;;;;;;EAQhC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { Pool } from 'pg';
|
|
2
|
+
export interface DatabaseConfig {
|
|
3
|
+
host: string;
|
|
4
|
+
port: number;
|
|
5
|
+
database: string;
|
|
6
|
+
user: string;
|
|
7
|
+
password: string;
|
|
8
|
+
ssl?: boolean | object;
|
|
9
|
+
maxConnections?: number;
|
|
10
|
+
}
|
|
11
|
+
export declare const DEFAULT_DB_CONFIG: DatabaseConfig;
|
|
12
|
+
export declare class DatabaseInitializer {
|
|
13
|
+
private pool;
|
|
14
|
+
private config;
|
|
15
|
+
constructor(config?: Partial<DatabaseConfig>);
|
|
16
|
+
initialize(): Promise<Pool>;
|
|
17
|
+
private testConnection;
|
|
18
|
+
private setupDatabase;
|
|
19
|
+
private createExtensions;
|
|
20
|
+
private createEnums;
|
|
21
|
+
private createTables;
|
|
22
|
+
private createIndexes;
|
|
23
|
+
/**
|
|
24
|
+
* 迁移旧列名 session_id → session_map_id
|
|
25
|
+
*
|
|
26
|
+
* 兼容从 v1.x 升级的场景:旧 schema 中 entities/observations 等子表
|
|
27
|
+
* 使用 session_id 列名,但新 schema 使用 session_map_id。
|
|
28
|
+
* 重命名是 PostgreSQL 元数据操作,不重写数据行,FK 关联自动继承新列名。
|
|
29
|
+
*/
|
|
30
|
+
private migrateLegacyColumnNames;
|
|
31
|
+
/**
|
|
32
|
+
* 将旧 sessions 表的数据迁移到新的 session_map 表。
|
|
33
|
+
* 旧 sessions 表保留不删除(_legacy),仅复制元数据映射。
|
|
34
|
+
* 注意:子表(entities/observations 等)的 session_map_id 不会自动填充,
|
|
35
|
+
* 需要单独的迁移脚本处理 FK 重映射。
|
|
36
|
+
*/
|
|
37
|
+
private migrateSessionsData;
|
|
38
|
+
private initializeOmOSchema;
|
|
39
|
+
close(): Promise<void>;
|
|
40
|
+
getPool(): Pool;
|
|
41
|
+
}
|
|
42
|
+
export declare function getDatabaseInitializer(config?: Partial<DatabaseConfig>): DatabaseInitializer;
|
|
43
|
+
export declare function initializeDatabase(config?: Partial<DatabaseConfig>): Promise<Pool>;
|
|
44
|
+
export declare function closeDatabase(): Promise<void>;
|
|
45
|
+
//# sourceMappingURL=init-db.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init-db.d.ts","sourceRoot":"","sources":["../../../src/db/init-db.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAc,MAAM,IAAI,CAAC;AAGtC,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,eAAO,MAAM,iBAAiB,EAAE,cAQ/B,CAAC;AAEF,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,IAAI,CAAqB;IACjC,OAAO,CAAC,MAAM,CAAiB;gBAEnB,MAAM,GAAE,OAAO,CAAC,cAAc,CAAM;IAI1C,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;YA4BnB,cAAc;YAYd,aAAa;YAqCb,gBAAgB;YAQhB,WAAW;YAgBX,YAAY;YAgKZ,aAAa;IAkI3B;;;;;;OAMG;YACW,wBAAwB;IA8BtC;;;;;OAKG;YACW,mBAAmB;YA8BnB,mBAAmB;IAmF3B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ5B,OAAO,IAAI,IAAI;CAMhB;AAKD,wBAAgB,sBAAsB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,mBAAmB,CAK5F;AAED,wBAAsB,kBAAkB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAGxF;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAKnD"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Pool } from 'pg';
|
|
2
|
+
import { MessagePartUpdatedInput, MessagePartUpdatedOutput } from '../types';
|
|
3
|
+
export interface MessagePartUpdatedHandlerConfig {
|
|
4
|
+
maxContentLength: number;
|
|
5
|
+
accumulationTimeoutMs: number;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* 处理 message.part.updated 事件
|
|
9
|
+
*
|
|
10
|
+
* 功能:
|
|
11
|
+
* 1. 监听工具输出的增量更新
|
|
12
|
+
* 2. 触发经验增量记录
|
|
13
|
+
* 3. 累积部分内容,在 isComplete = true 时统一处理
|
|
14
|
+
*
|
|
15
|
+
* 签名规范:(input, output) => Promise<void>
|
|
16
|
+
*/
|
|
17
|
+
export declare function handleMessagePartUpdated(input: MessagePartUpdatedInput, output: MessagePartUpdatedOutput, // ✅ 添加 output 参数
|
|
18
|
+
pool: Pool, config?: Partial<MessagePartUpdatedHandlerConfig>): Promise<void>;
|
|
19
|
+
/**
|
|
20
|
+
* 清理过期的累积器(防止内存泄漏)
|
|
21
|
+
* 应定期调用
|
|
22
|
+
*/
|
|
23
|
+
export declare function cleanupExpiredAccumulators(maxAgeMs?: number): void;
|
|
24
|
+
//# sourceMappingURL=message-part-updated.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-part-updated.d.ts","sourceRoot":"","sources":["../../../src/hooks/message-part-updated.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC1B,OAAO,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAC;AAE7E,MAAM,WAAW,+BAA+B;IAC9C,gBAAgB,EAAE,MAAM,CAAC;IACzB,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAgBD;;;;;;;;;GASG;AACH,wBAAsB,wBAAwB,CAC5C,KAAK,EAAE,uBAAuB,EAC9B,MAAM,EAAE,wBAAwB,EAAK,iBAAiB;AACtD,IAAI,EAAE,IAAI,EACV,MAAM,GAAE,OAAO,CAAC,+BAA+B,CAAM,GACpD,OAAO,CAAC,IAAI,CAAC,CAkDf;AA0JD;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,GAAE,MAAe,GAAG,IAAI,CAc1E"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Pool } from 'pg';
|
|
2
|
+
import { MessageUpdatedInput, MessageUpdatedOutput } from '../types';
|
|
3
|
+
export interface MessageUpdatedHandlerConfig {
|
|
4
|
+
minConfidence: number;
|
|
5
|
+
minEntityNameLength: number;
|
|
6
|
+
maxEntitiesPerMessage: number;
|
|
7
|
+
maxRelationsPerEntity: number;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* 处理 message.updated 事件
|
|
11
|
+
*
|
|
12
|
+
* 功能:
|
|
13
|
+
* 1. 存储原始消息到 messages 表
|
|
14
|
+
* 2. 异步调用 LLM 提取命名实体
|
|
15
|
+
* 3. 识别实体间关系
|
|
16
|
+
* 4. 写入 entities 表(置信度 < 0.5 的不写入)
|
|
17
|
+
* 5. 写入 relations 表(置信度 < 0.5 的不写入)
|
|
18
|
+
* 6. 更新实体 weight 和 last_seen_at
|
|
19
|
+
*
|
|
20
|
+
* 签名规范:(input, output) => Promise<void>
|
|
21
|
+
*/
|
|
22
|
+
export declare function handleMessageUpdated(input: MessageUpdatedInput, output: MessageUpdatedOutput, // ✅ 添加 output 参数
|
|
23
|
+
pool: Pool, config?: Partial<MessageUpdatedHandlerConfig>): Promise<void>;
|
|
24
|
+
//# sourceMappingURL=message-updated.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-updated.d.ts","sourceRoot":"","sources":["../../../src/hooks/message-updated.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC1B,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EAGrB,MAAM,UAAU,CAAC;AAIlB,MAAM,WAAW,2BAA2B;IAC1C,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AASD;;;;;;;;;;;;GAYG;AACH,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,mBAAmB,EAC1B,MAAM,EAAE,oBAAoB,EAAK,iBAAiB;AAClD,IAAI,EAAE,IAAI,EACV,MAAM,GAAE,OAAO,CAAC,2BAA2B,CAAM,GAChD,OAAO,CAAC,IAAI,CAAC,CAyCf"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { Pool } from 'pg';
|
|
2
|
+
import { SessionCompactingInput, SessionCompactingOutput } from '../types';
|
|
3
|
+
export interface SessionCompactingHandlerConfig {
|
|
4
|
+
preserveHighImportanceObservations: boolean;
|
|
5
|
+
minImportanceToPreserve: number;
|
|
6
|
+
markPrunedInCache: boolean;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* 处理 experimental.session.compacting / session.compacted 事件
|
|
10
|
+
*
|
|
11
|
+
* 功能:
|
|
12
|
+
* 1. 标记将被压缩的低价值消息
|
|
13
|
+
* 2. 避免对已压缩消息重复产生缓存
|
|
14
|
+
* 3. 与 DCP 协同,semantic_cache 检索优先级设为最高
|
|
15
|
+
*
|
|
16
|
+
* 签名规范:(input, output) => Promise<void>
|
|
17
|
+
*/
|
|
18
|
+
export declare function handleSessionCompacting(input: SessionCompactingInput, output: SessionCompactingOutput, // ✅ 添加 output 参数
|
|
19
|
+
pool: Pool, config?: Partial<SessionCompactingHandlerConfig>): Promise<void>;
|
|
20
|
+
/**
|
|
21
|
+
* 获取缓存优先级配置
|
|
22
|
+
*
|
|
23
|
+
* 说明:
|
|
24
|
+
* - semantic_cache 检索优先级设为最高(在 DCP 处理之前执行缓存查找)
|
|
25
|
+
* - 缓存命中后直接返回,无需进入 DCP 通道(零 token 消耗)
|
|
26
|
+
*/
|
|
27
|
+
export declare function getCachePriorityConfig(): {
|
|
28
|
+
priority: number;
|
|
29
|
+
bypassDCPOnHit: boolean;
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* 处理 session.compacted 事件(压缩完成后)
|
|
33
|
+
*
|
|
34
|
+
* 签名规范:(input, output) => Promise<void>
|
|
35
|
+
*/
|
|
36
|
+
export declare function handleSessionCompacted(input: SessionCompactingInput, output: SessionCompactingOutput, // ✅ 添加 output 参数
|
|
37
|
+
pool: Pool, config?: Partial<SessionCompactingHandlerConfig>): Promise<void>;
|
|
38
|
+
/**
|
|
39
|
+
* 检查消息是否已被压缩
|
|
40
|
+
*/
|
|
41
|
+
export declare function isMessageCompacted(sessionId: string, messageId: string, pool: Pool): Promise<boolean>;
|
|
42
|
+
/**
|
|
43
|
+
* 获取会话的压缩统计
|
|
44
|
+
*/
|
|
45
|
+
export declare function getCompactionStats(sessionId: string, pool: Pool): Promise<{
|
|
46
|
+
totalObservations: number;
|
|
47
|
+
prunedCacheEntries: number;
|
|
48
|
+
highImportanceObservations: number;
|
|
49
|
+
}>;
|
|
50
|
+
//# sourceMappingURL=session-compacting.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-compacting.d.ts","sourceRoot":"","sources":["../../../src/hooks/session-compacting.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC1B,OAAO,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAE3E,MAAM,WAAW,8BAA8B;IAC7C,kCAAkC,EAAE,OAAO,CAAC;IAC5C,uBAAuB,EAAE,MAAM,CAAC;IAChC,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAQD;;;;;;;;;GASG;AACH,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,sBAAsB,EAC7B,MAAM,EAAE,uBAAuB,EAAK,iBAAiB;AACrD,IAAI,EAAE,IAAI,EACV,MAAM,GAAE,OAAO,CAAC,8BAA8B,CAAM,GACnD,OAAO,CAAC,IAAI,CAAC,CA0Df;AAgED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,IAAI;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,OAAO,CAAC;CACzB,CAOA;AAED;;;;GAIG;AACH,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,sBAAsB,EAC7B,MAAM,EAAE,uBAAuB,EAAK,iBAAiB;AACrD,IAAI,EAAE,IAAI,EACV,MAAM,GAAE,OAAO,CAAC,8BAA8B,CAAM,GACnD,OAAO,CAAC,IAAI,CAAC,CAKf;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,IAAI,GACT,OAAO,CAAC,OAAO,CAAC,CAYlB;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,IAAI,GACT,OAAO,CAAC;IACT,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,0BAA0B,EAAE,MAAM,CAAC;CACpC,CAAC,CA2BD"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { Pool } from 'pg';
|
|
2
|
+
import { SessionCompletedInput, SessionCompletedOutput } from '../types';
|
|
3
|
+
export interface SessionCompletedHandlerConfig {
|
|
4
|
+
reflectionThreshold: number;
|
|
5
|
+
minObservationThreshold: number;
|
|
6
|
+
maxObservationThreshold: number;
|
|
7
|
+
enableReflection: boolean;
|
|
8
|
+
offPeakHours: number[];
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* 处理 session.completed 事件
|
|
12
|
+
*
|
|
13
|
+
* 功能:
|
|
14
|
+
* 1. 异步触发 hindsight_reflect 反思任务
|
|
15
|
+
* 2. 检查 observations 数量是否达到阈值 (30-50条)
|
|
16
|
+
* 3. 更新 sessions.reflection_last_at
|
|
17
|
+
* 4. 使用 7B 蒸馏模型在低峰期执行
|
|
18
|
+
*
|
|
19
|
+
* 签名规范:(input, output) => Promise<void>
|
|
20
|
+
*/
|
|
21
|
+
export declare function handleSessionCompleted(input: SessionCompletedInput, output: SessionCompletedOutput, // ✅ 添加 output 参数
|
|
22
|
+
pool: Pool, config?: Partial<SessionCompletedHandlerConfig>): Promise<void>;
|
|
23
|
+
/**
|
|
24
|
+
* 获取反思队列(供定时任务调用)
|
|
25
|
+
*/
|
|
26
|
+
export declare function getPendingReflections(pool: Pool): Promise<Array<{
|
|
27
|
+
sessionId: string;
|
|
28
|
+
externalSessionId: string;
|
|
29
|
+
observationCount: number;
|
|
30
|
+
queuedAt: Date;
|
|
31
|
+
}>>;
|
|
32
|
+
/**
|
|
33
|
+
* 处理反思错误重试
|
|
34
|
+
*/
|
|
35
|
+
export declare function retryFailedReflections(pool: Pool, maxRetries?: number): Promise<void>;
|
|
36
|
+
//# sourceMappingURL=session-completed.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-completed.d.ts","sourceRoot":"","sources":["../../../src/hooks/session-completed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC1B,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAEzE,MAAM,WAAW,6BAA6B;IAC5C,mBAAmB,EAAE,MAAM,CAAC;IAC5B,uBAAuB,EAAE,MAAM,CAAC;IAChC,uBAAuB,EAAE,MAAM,CAAC;IAChC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAUD;;;;;;;;;;GAUG;AACH,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,qBAAqB,EAC5B,MAAM,EAAE,sBAAsB,EAAK,iBAAiB;AACpD,IAAI,EAAE,IAAI,EACV,MAAM,GAAE,OAAO,CAAC,6BAA6B,CAAM,GAClD,OAAO,CAAC,IAAI,CAAC,CAuFf;AA6RD;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,IAAI,GACT,OAAO,CAAC,KAAK,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,IAAI,CAAC;CAChB,CAAC,CAAC,CAmBF;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,IAAI,EACV,UAAU,GAAE,MAAU,GACrB,OAAO,CAAC,IAAI,CAAC,CAkCf"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Pool } from 'pg';
|
|
2
|
+
import { SessionCreatedInput, SessionCreatedOutput } from '../types';
|
|
3
|
+
export interface SessionCreatedHandlerConfig {
|
|
4
|
+
contextLimitRatio: number;
|
|
5
|
+
minTokens: number;
|
|
6
|
+
maxTokens: number;
|
|
7
|
+
minConfidence: number;
|
|
8
|
+
minWeight: number;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* 处理 session.created 事件
|
|
12
|
+
*
|
|
13
|
+
* 功能:
|
|
14
|
+
* 1. 创建或更新 sessions 表记录
|
|
15
|
+
* 2. 基于 Token 预算检索 entities 和 reflections
|
|
16
|
+
* 3. 优先注入 permanent 级别事实,其次 project,最后 session
|
|
17
|
+
*
|
|
18
|
+
* 签名规范:(input, output) => Promise<void>
|
|
19
|
+
* output 为可变对象,通过突变 output 影响行为
|
|
20
|
+
*/
|
|
21
|
+
export declare function handleSessionCreated(input: SessionCreatedInput, output: SessionCreatedOutput, // ✅ 添加 output 参数
|
|
22
|
+
pool: Pool, config?: Partial<SessionCreatedHandlerConfig>): Promise<void>;
|
|
23
|
+
//# sourceMappingURL=session-created.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-created.d.ts","sourceRoot":"","sources":["../../../src/hooks/session-created.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC1B,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EAIrB,MAAM,UAAU,CAAC;AAQlB,MAAM,WAAW,2BAA2B;IAC1C,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAUD;;;;;;;;;;GAUG;AACH,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,mBAAmB,EAC1B,MAAM,EAAE,oBAAoB,EAAK,iBAAiB;AAClD,IAAI,EAAE,IAAI,EACV,MAAM,GAAE,OAAO,CAAC,2BAA2B,CAAM,GAChD,OAAO,CAAC,IAAI,CAAC,CAyCf"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { Pool } from 'pg';
|
|
2
|
+
import { ToolExecuteBeforeInput, ToolExecuteBeforeOutput, ToolExecuteAfterInput, ToolExecuteAfterOutput } from '../types';
|
|
3
|
+
export interface ToolExecuteHandlerConfig {
|
|
4
|
+
maxInputSummaryLength: number;
|
|
5
|
+
maxOutputSummaryLength: number;
|
|
6
|
+
defaultImportance: number;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* 处理 tool.execute.before 事件
|
|
10
|
+
*
|
|
11
|
+
* 功能:
|
|
12
|
+
* 1. 记录工具调用参数摘要到 observations 表
|
|
13
|
+
* 2. 零 token 开销,仅做记录
|
|
14
|
+
*
|
|
15
|
+
* 签名规范:(input, output) => Promise<void>
|
|
16
|
+
*/
|
|
17
|
+
export declare function handleToolExecuteBefore(input: ToolExecuteBeforeInput, output: ToolExecuteBeforeOutput, // ✅ 添加 output 参数
|
|
18
|
+
pool: Pool, config?: Partial<ToolExecuteHandlerConfig>): Promise<void>;
|
|
19
|
+
/**
|
|
20
|
+
* 处理 tool.execute.after 事件
|
|
21
|
+
*
|
|
22
|
+
* 功能:
|
|
23
|
+
* 1. 生成工具输出摘要
|
|
24
|
+
* 2. 异步向量化摘要内容
|
|
25
|
+
* 3. 更新 observations 表
|
|
26
|
+
* 4. 记录 token 使用
|
|
27
|
+
*
|
|
28
|
+
* 签名规范:(input, output) => Promise<void>
|
|
29
|
+
*/
|
|
30
|
+
export declare function handleToolExecuteAfter(input: ToolExecuteAfterInput, output: ToolExecuteAfterOutput, // ✅ 添加 output 参数
|
|
31
|
+
pool: Pool, config?: Partial<ToolExecuteHandlerConfig>): Promise<void>;
|
|
32
|
+
//# sourceMappingURL=tool-execute.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-execute.d.ts","sourceRoot":"","sources":["../../../src/hooks/tool-execute.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC1B,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,qBAAqB,EACrB,sBAAsB,EACvB,MAAM,UAAU,CAAC;AAGlB,MAAM,WAAW,wBAAwB;IACvC,qBAAqB,EAAE,MAAM,CAAC;IAC9B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAQD;;;;;;;;GAQG;AACH,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,sBAAsB,EAC7B,MAAM,EAAE,uBAAuB,EAAK,iBAAiB;AACrD,IAAI,EAAE,IAAI,EACV,MAAM,GAAE,OAAO,CAAC,wBAAwB,CAAM,GAC7C,OAAO,CAAC,IAAI,CAAC,CAuDf;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,qBAAqB,EAC5B,MAAM,EAAE,sBAAsB,EAAK,iBAAiB;AACpD,IAAI,EAAE,IAAI,EACV,MAAM,GAAE,OAAO,CAAC,wBAAwB,CAAM,GAC7C,OAAO,CAAC,IAAI,CAAC,CAyGf"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
interface PluginContext {
|
|
2
|
+
/** OpenCode SDK client */
|
|
3
|
+
client: any;
|
|
4
|
+
/** Project metadata */
|
|
5
|
+
project: any;
|
|
6
|
+
/** Working directory */
|
|
7
|
+
directory: string;
|
|
8
|
+
}
|
|
9
|
+
/** Official Plugin export signature */
|
|
10
|
+
type Plugin = (ctx: PluginContext) => Promise<PluginHooks>;
|
|
11
|
+
interface PluginHooks {
|
|
12
|
+
/** Unified event hook - receives ALL bus events */
|
|
13
|
+
event?: (input: {
|
|
14
|
+
event: {
|
|
15
|
+
type: string;
|
|
16
|
+
properties: Record<string, any>;
|
|
17
|
+
};
|
|
18
|
+
}) => Promise<void>;
|
|
19
|
+
/** Tool execute before - args mutation */
|
|
20
|
+
'tool.execute.before'?: (input: {
|
|
21
|
+
tool: string;
|
|
22
|
+
sessionID: string;
|
|
23
|
+
callID: string;
|
|
24
|
+
}, output: {
|
|
25
|
+
args: any;
|
|
26
|
+
}) => Promise<void>;
|
|
27
|
+
/** Tool execute after - title/output mutation */
|
|
28
|
+
'tool.execute.after'?: (input: {
|
|
29
|
+
tool: string;
|
|
30
|
+
sessionID: string;
|
|
31
|
+
callID: string;
|
|
32
|
+
args: any;
|
|
33
|
+
}, output: {
|
|
34
|
+
title: string;
|
|
35
|
+
output: string;
|
|
36
|
+
metadata: any;
|
|
37
|
+
}) => Promise<void>;
|
|
38
|
+
/** Session compacting hook */
|
|
39
|
+
'experimental.session.compacting'?: (input: {
|
|
40
|
+
sessionID: string;
|
|
41
|
+
}, output: {
|
|
42
|
+
context: string[];
|
|
43
|
+
prompt?: string;
|
|
44
|
+
}) => Promise<void>;
|
|
45
|
+
/** Custom MCP tools */
|
|
46
|
+
tool?: Record<string, PluginTool>;
|
|
47
|
+
[key: string]: any;
|
|
48
|
+
}
|
|
49
|
+
interface PluginTool {
|
|
50
|
+
description: string;
|
|
51
|
+
args: Record<string, any>;
|
|
52
|
+
execute: (args: any, context: {
|
|
53
|
+
client: any;
|
|
54
|
+
sessionID?: string;
|
|
55
|
+
}) => Promise<any>;
|
|
56
|
+
}
|
|
57
|
+
export declare const OpenCodePGMemory: Plugin;
|
|
58
|
+
export * from './types';
|
|
59
|
+
export * from './db/init-db';
|
|
60
|
+
export * from './utils/token-budget';
|
|
61
|
+
export * from './cache/semantic-cache';
|
|
62
|
+
export { recallMemory } from './mcp/recall-memory';
|
|
63
|
+
export { hindsightReflect } from './mcp/hindsight-reflect';
|
|
64
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAoBA,UAAU,aAAa;IACrB,0BAA0B;IAC1B,MAAM,EAAE,GAAG,CAAC;IACZ,uBAAuB;IACvB,OAAO,EAAE,GAAG,CAAC;IACb,wBAAwB;IACxB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,uCAAuC;AACvC,KAAK,MAAM,GAAG,CAAC,GAAG,EAAE,aAAa,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;AAE3D,UAAU,WAAW;IACnB,mDAAmD;IACnD,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;SAAE,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/F,0CAA0C;IAC1C,qBAAqB,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,MAAM,EAAE;QAAE,IAAI,EAAE,GAAG,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7H,iDAAiD;IACjD,oBAAoB,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,GAAG,CAAA;KAAE,EAAE,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,GAAG,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1K,8BAA8B;IAC9B,iCAAiC,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,EAAE,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpI,uBAAuB;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAClC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,UAAU,UAAU;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B,OAAO,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE;QAAE,MAAM,EAAE,GAAG,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;CACpF;AAwJD,eAAO,MAAM,gBAAgB,EAAE,MA2f9B,CAAC;AA8JF,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* hindsight_reflect MCP 工具 - OmO 适配版本
|
|
3
|
+
*
|
|
4
|
+
* 针对 Oh My OpenAgent 多 Agent 环境优化的反思工具
|
|
5
|
+
* 与 OmO Wisdom Accumulation 机制集成
|
|
6
|
+
*/
|
|
7
|
+
import { Pool } from 'pg';
|
|
8
|
+
import { HindsightReflectInput, HindsightReflectOutput } from './hindsight-reflect';
|
|
9
|
+
export interface HindsightReflectOmOInput extends HindsightReflectInput {
|
|
10
|
+
agent_id: string;
|
|
11
|
+
task_id?: string;
|
|
12
|
+
parent_session_id?: string;
|
|
13
|
+
sync_to_omo_wisdom?: boolean;
|
|
14
|
+
omo_wisdom_tags?: string[];
|
|
15
|
+
reflection_scope?: 'agent-only' | 'task-only' | 'session-wide' | 'hierarchical';
|
|
16
|
+
respect_omo_timeout?: boolean;
|
|
17
|
+
omo_timeout_deadline?: string;
|
|
18
|
+
}
|
|
19
|
+
export interface HindsightReflectOmOOutput extends HindsightReflectOutput {
|
|
20
|
+
agent_id: string;
|
|
21
|
+
task_id?: string;
|
|
22
|
+
success?: boolean;
|
|
23
|
+
error?: string;
|
|
24
|
+
omo_wisdom_synced: boolean;
|
|
25
|
+
omo_wisdom_entries?: Array<{
|
|
26
|
+
id: string;
|
|
27
|
+
type: string;
|
|
28
|
+
content: string;
|
|
29
|
+
}>;
|
|
30
|
+
cross_agent_stats?: {
|
|
31
|
+
total_observations: number;
|
|
32
|
+
own_observations: number;
|
|
33
|
+
inherited_observations: number;
|
|
34
|
+
child_agent_observations: number;
|
|
35
|
+
};
|
|
36
|
+
coordination_status: {
|
|
37
|
+
completed_before_timeout: boolean;
|
|
38
|
+
timeout_was_respected: boolean;
|
|
39
|
+
omo_acknowledged: boolean;
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* OmO 版本的 hindsight_reflect 工具
|
|
44
|
+
*
|
|
45
|
+
* 主要差异:
|
|
46
|
+
* 1. 支持按 Agent 范围反思
|
|
47
|
+
* 2. 与 OmO Wisdom Accumulation 同步
|
|
48
|
+
* 3. 尊重 OmO 后台超时控制
|
|
49
|
+
* 4. 支持层级反思(父子 Agent)
|
|
50
|
+
*/
|
|
51
|
+
export declare function hindsightReflectOmO(input: HindsightReflectOmOInput, pool: Pool): Promise<HindsightReflectOmOOutput>;
|
|
52
|
+
/**
|
|
53
|
+
* 获取排队的反思任务
|
|
54
|
+
*/
|
|
55
|
+
export declare function getQueuedReflections(pool: Pool): Promise<Array<{
|
|
56
|
+
session_id: string;
|
|
57
|
+
agent_id: string;
|
|
58
|
+
coordination_data: any;
|
|
59
|
+
}>>;
|
|
60
|
+
/**
|
|
61
|
+
* 处理排队的反思任务
|
|
62
|
+
*/
|
|
63
|
+
export declare function processQueuedReflections(pool: Pool): Promise<void>;
|
|
64
|
+
//# sourceMappingURL=hindsight-reflect-omo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hindsight-reflect-omo.d.ts","sourceRoot":"","sources":["../../../src/mcp/hindsight-reflect-omo.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC1B,OAAO,EAAoB,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAEtG,MAAM,WAAW,wBAAyB,SAAQ,qBAAqB;IAErE,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAG3B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAG3B,gBAAgB,CAAC,EAAE,YAAY,GAAG,WAAW,GAAG,cAAc,GAAG,cAAc,CAAC;IAGhF,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,yBAA0B,SAAQ,sBAAsB;IAEvE,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IAGjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IAGf,iBAAiB,EAAE,OAAO,CAAC;IAC3B,kBAAkB,CAAC,EAAE,KAAK,CAAC;QACzB,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;IAGH,iBAAiB,CAAC,EAAE;QAClB,kBAAkB,EAAE,MAAM,CAAC;QAC3B,gBAAgB,EAAE,MAAM,CAAC;QACzB,sBAAsB,EAAE,MAAM,CAAC;QAC/B,wBAAwB,EAAE,MAAM,CAAC;KAClC,CAAC;IAGF,mBAAmB,EAAE;QACnB,wBAAwB,EAAE,OAAO,CAAC;QAClC,qBAAqB,EAAE,OAAO,CAAC;QAC/B,gBAAgB,EAAE,OAAO,CAAC;KAC3B,CAAC;CACH;AAED;;;;;;;;GAQG;AACH,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,wBAAwB,EAC/B,IAAI,EAAE,IAAI,GACT,OAAO,CAAC,yBAAyB,CAAC,CA6FpC;AAuND;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,IAAI,GACT,OAAO,CAAC,KAAK,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,GAAG,CAAC;CACxB,CAAC,CAAC,CASF;AAED;;GAEG;AACH,wBAAsB,wBAAwB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBxE"}
|