n2-soul 9.0.0 → 9.0.1
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/package.json +1 -1
- package/dist/lib/agent-registry.d.ts +0 -17
- package/dist/lib/agent-registry.js +0 -67
- package/dist/lib/agent-registry.js.map +0 -1
- package/dist/lib/config.d.ts +0 -3
- package/dist/lib/config.default.d.ts +0 -3
- package/dist/lib/config.default.js +0 -66
- package/dist/lib/config.default.js.map +0 -1
- package/dist/lib/config.js +0 -36
- package/dist/lib/config.js.map +0 -1
- package/dist/lib/context.d.ts +0 -15
- package/dist/lib/context.js +0 -35
- package/dist/lib/context.js.map +0 -1
- package/dist/lib/core-memory.d.ts +0 -34
- package/dist/lib/core-memory.js +0 -102
- package/dist/lib/core-memory.js.map +0 -1
- package/dist/lib/entity-memory.d.ts +0 -58
- package/dist/lib/entity-memory.js +0 -160
- package/dist/lib/entity-memory.js.map +0 -1
- package/dist/lib/intercom-log.d.ts +0 -41
- package/dist/lib/intercom-log.js +0 -163
- package/dist/lib/intercom-log.js.map +0 -1
- package/dist/lib/kv-cache/agent-adapter.d.ts +0 -44
- package/dist/lib/kv-cache/agent-adapter.js +0 -132
- package/dist/lib/kv-cache/agent-adapter.js.map +0 -1
- package/dist/lib/kv-cache/backup.d.ts +0 -64
- package/dist/lib/kv-cache/backup.js +0 -329
- package/dist/lib/kv-cache/backup.js.map +0 -1
- package/dist/lib/kv-cache/compressor.d.ts +0 -20
- package/dist/lib/kv-cache/compressor.js +0 -92
- package/dist/lib/kv-cache/compressor.js.map +0 -1
- package/dist/lib/kv-cache/embedding.d.ts +0 -39
- package/dist/lib/kv-cache/embedding.js +0 -159
- package/dist/lib/kv-cache/embedding.js.map +0 -1
- package/dist/lib/kv-cache/index.d.ts +0 -82
- package/dist/lib/kv-cache/index.js +0 -302
- package/dist/lib/kv-cache/index.js.map +0 -1
- package/dist/lib/kv-cache/schema.d.ts +0 -60
- package/dist/lib/kv-cache/schema.js +0 -85
- package/dist/lib/kv-cache/schema.js.map +0 -1
- package/dist/lib/kv-cache/snapshot.d.ts +0 -42
- package/dist/lib/kv-cache/snapshot.js +0 -220
- package/dist/lib/kv-cache/snapshot.js.map +0 -1
- package/dist/lib/kv-cache/sqlite-store.d.ts +0 -66
- package/dist/lib/kv-cache/sqlite-store.js +0 -311
- package/dist/lib/kv-cache/sqlite-store.js.map +0 -1
- package/dist/lib/kv-cache/tier-manager.d.ts +0 -71
- package/dist/lib/kv-cache/tier-manager.js +0 -132
- package/dist/lib/kv-cache/tier-manager.js.map +0 -1
- package/dist/lib/kv-cache/token-saver.d.ts +0 -19
- package/dist/lib/kv-cache/token-saver.js +0 -99
- package/dist/lib/kv-cache/token-saver.js.map +0 -1
- package/dist/lib/paths.d.ts +0 -6
- package/dist/lib/paths.js +0 -33
- package/dist/lib/paths.js.map +0 -1
- package/dist/lib/soul-engine.d.ts +0 -41
- package/dist/lib/soul-engine.js +0 -220
- package/dist/lib/soul-engine.js.map +0 -1
- package/dist/lib/utils.d.ts +0 -16
- package/dist/lib/utils.js +0 -174
- package/dist/lib/utils.js.map +0 -1
- package/dist/sequences/boot.d.ts +0 -13
- package/dist/sequences/boot.js +0 -153
- package/dist/sequences/boot.js.map +0 -1
- package/dist/sequences/end.d.ts +0 -3
- package/dist/sequences/end.js +0 -190
- package/dist/sequences/end.js.map +0 -1
- package/dist/sequences/work.d.ts +0 -17
- package/dist/sequences/work.js +0 -240
- package/dist/sequences/work.js.map +0 -1
- package/dist/tools/brain.d.ts +0 -3
- package/dist/tools/brain.js +0 -93
- package/dist/tools/brain.js.map +0 -1
- package/dist/tools/kv-cache.d.ts +0 -3
- package/dist/tools/kv-cache.js +0 -163
- package/dist/tools/kv-cache.js.map +0 -1
- package/index.js +0 -38
- package/lib/agent-registry.js +0 -60
- package/lib/config.default.js +0 -84
- package/lib/config.example.js +0 -28
- package/lib/config.js +0 -28
- package/lib/context.js +0 -34
- package/lib/core-memory.js +0 -137
- package/lib/entity-memory.js +0 -219
- package/lib/intercom-log.js +0 -187
- package/lib/kv-cache/agent-adapter.js +0 -192
- package/lib/kv-cache/backup.js +0 -357
- package/lib/kv-cache/compressor.js +0 -130
- package/lib/kv-cache/embedding.js +0 -205
- package/lib/kv-cache/index.js +0 -400
- package/lib/kv-cache/schema.js +0 -124
- package/lib/kv-cache/snapshot.js +0 -320
- package/lib/kv-cache/sqlite-store.js +0 -402
- package/lib/kv-cache/tier-manager.js +0 -248
- package/lib/kv-cache/token-saver.js +0 -153
- package/lib/paths.js +0 -29
- package/lib/soul-engine.js +0 -234
- package/lib/utils.js +0 -167
- package/sequences/boot.js +0 -127
- package/sequences/end.js +0 -157
- package/sequences/work.js +0 -260
- package/tools/brain.js +0 -122
- package/tools/kv-cache.js +0 -225
package/package.json
CHANGED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
export interface AgentInfo {
|
|
2
|
-
id: string;
|
|
3
|
-
name: string;
|
|
4
|
-
provider: string;
|
|
5
|
-
model: string;
|
|
6
|
-
soul: string;
|
|
7
|
-
rank: string;
|
|
8
|
-
enabled: boolean;
|
|
9
|
-
}
|
|
10
|
-
/** Detect agents directory dynamically (project-local first, cross-platform) */
|
|
11
|
-
export declare function detectAgentsDir(): string | null;
|
|
12
|
-
/** List all registered agents from the agents directory */
|
|
13
|
-
export declare function listAgents(agentsDir: string | null): AgentInfo[];
|
|
14
|
-
/** Find agent by name (case-insensitive) */
|
|
15
|
-
export declare function findAgent(agentsDir: string | null, name: string): AgentInfo | null;
|
|
16
|
-
/** Read global config */
|
|
17
|
-
export declare function readGlobalConfig(agentsDir: string | null): Record<string, unknown> | null;
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.detectAgentsDir = detectAgentsDir;
|
|
7
|
-
exports.listAgents = listAgents;
|
|
8
|
-
exports.findAgent = findAgent;
|
|
9
|
-
exports.readGlobalConfig = readGlobalConfig;
|
|
10
|
-
// Soul v9.0 — Dynamic agent registry. Detects agents from N2 Browser config.
|
|
11
|
-
const fs_1 = __importDefault(require("fs"));
|
|
12
|
-
const path_1 = __importDefault(require("path"));
|
|
13
|
-
const utils_1 = require("./utils");
|
|
14
|
-
const paths_1 = require("./paths");
|
|
15
|
-
/** Detect agents directory dynamically (project-local first, cross-platform) */
|
|
16
|
-
function detectAgentsDir() {
|
|
17
|
-
const candidates = [
|
|
18
|
-
process.env.N2_AGENTS_DIR,
|
|
19
|
-
(0, paths_1.getAgentsDir)(),
|
|
20
|
-
path_1.default.join(process.cwd(), '_data', 'agents'),
|
|
21
|
-
];
|
|
22
|
-
for (const dir of candidates) {
|
|
23
|
-
if (dir && fs_1.default.existsSync(dir))
|
|
24
|
-
return dir;
|
|
25
|
-
}
|
|
26
|
-
return null;
|
|
27
|
-
}
|
|
28
|
-
/** List all registered agents from the agents directory */
|
|
29
|
-
function listAgents(agentsDir) {
|
|
30
|
-
if (!agentsDir || !fs_1.default.existsSync(agentsDir))
|
|
31
|
-
return [];
|
|
32
|
-
try {
|
|
33
|
-
return fs_1.default.readdirSync(agentsDir)
|
|
34
|
-
.filter(f => f.endsWith('.json') && f !== 'global.json')
|
|
35
|
-
.map((f) => {
|
|
36
|
-
const data = (0, utils_1.readJson)(path_1.default.join(agentsDir, f));
|
|
37
|
-
if (!data)
|
|
38
|
-
return null;
|
|
39
|
-
return {
|
|
40
|
-
id: data.id || path_1.default.basename(f, '.json'),
|
|
41
|
-
name: data.name || 'unknown',
|
|
42
|
-
provider: data.provider || 'unknown',
|
|
43
|
-
model: data.model || 'unknown',
|
|
44
|
-
soul: data.soul || '',
|
|
45
|
-
rank: data.rank || '?',
|
|
46
|
-
enabled: data.enabled !== false,
|
|
47
|
-
};
|
|
48
|
-
})
|
|
49
|
-
.filter((a) => a !== null && a.enabled);
|
|
50
|
-
}
|
|
51
|
-
catch (e) {
|
|
52
|
-
(0, utils_1.logError)('listAgents', e);
|
|
53
|
-
return [];
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
/** Find agent by name (case-insensitive) */
|
|
57
|
-
function findAgent(agentsDir, name) {
|
|
58
|
-
const agents = listAgents(agentsDir);
|
|
59
|
-
return agents.find(a => a.name.toLowerCase() === name.toLowerCase()) || null;
|
|
60
|
-
}
|
|
61
|
-
/** Read global config */
|
|
62
|
-
function readGlobalConfig(agentsDir) {
|
|
63
|
-
if (!agentsDir)
|
|
64
|
-
return null;
|
|
65
|
-
return (0, utils_1.readJson)(path_1.default.join(agentsDir, 'global.json'));
|
|
66
|
-
}
|
|
67
|
-
//# sourceMappingURL=agent-registry.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"agent-registry.js","sourceRoot":"","sources":["../../src/lib/agent-registry.ts"],"names":[],"mappings":";;;;;AA2BA,0CAWC;AAGD,gCAuBC;AAGD,8BAGC;AAGD,4CAGC;AA5ED,6EAA6E;AAC7E,4CAAoB;AACpB,gDAAwB;AACxB,mCAA6C;AAC7C,mCAAuC;AAsBvC,gFAAgF;AAChF,SAAgB,eAAe;IAC7B,MAAM,UAAU,GAA2B;QACzC,OAAO,CAAC,GAAG,CAAC,aAAa;QACzB,IAAA,oBAAY,GAAE;QACd,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,QAAQ,CAAC;KAC5C,CAAC;IAEF,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,IAAI,GAAG,IAAI,YAAE,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO,GAAG,CAAC;IAC5C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,2DAA2D;AAC3D,SAAgB,UAAU,CAAC,SAAwB;IACjD,IAAI,CAAC,SAAS,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,EAAE,CAAC;IACvD,IAAI,CAAC;QACH,OAAO,YAAE,CAAC,WAAW,CAAC,SAAS,CAAC;aAC7B,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,aAAa,CAAC;aACvD,GAAG,CAAC,CAAC,CAAC,EAAoB,EAAE;YAC3B,MAAM,IAAI,GAAG,IAAA,gBAAQ,EAAgB,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;YAC9D,IAAI,CAAC,IAAI;gBAAE,OAAO,IAAI,CAAC;YACvB,OAAO;gBACL,EAAE,EAAE,IAAI,CAAC,EAAE,IAAI,cAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC;gBACxC,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,SAAS;gBAC5B,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,SAAS;gBACpC,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,SAAS;gBAC9B,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE;gBACrB,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,GAAG;gBACtB,OAAO,EAAE,IAAI,CAAC,OAAO,KAAK,KAAK;aAChC,CAAC;QACJ,CAAC,CAAC;aACD,MAAM,CAAC,CAAC,CAAC,EAAkB,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC;IAC5D,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAA,gBAAQ,EAAC,YAAY,EAAE,CAAC,CAAC,CAAC;QAC1B,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,4CAA4C;AAC5C,SAAgB,SAAS,CAAC,SAAwB,EAAE,IAAY;IAC9D,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IACrC,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,IAAI,CAAC;AAC/E,CAAC;AAED,yBAAyB;AACzB,SAAgB,gBAAgB,CAAC,SAAwB;IACvD,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAC5B,OAAO,IAAA,gBAAQ,EAA0B,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;AAChF,CAAC"}
|
package/dist/lib/config.d.ts
DELETED
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
// Soul v9.0 — Default config. Zero hardcoded paths, all dynamic.
|
|
7
|
-
const path_1 = __importDefault(require("path"));
|
|
8
|
-
const defaults = {
|
|
9
|
-
SOUL_ROOT: path_1.default.resolve(__dirname, '..', '..'),
|
|
10
|
-
DATA_DIR: path_1.default.resolve(__dirname, '..', '..', 'data'),
|
|
11
|
-
TIMEZONE: 'Asia/Seoul',
|
|
12
|
-
AGENTS_DIR: null,
|
|
13
|
-
LANG: process.env.N2_LANG || 'en',
|
|
14
|
-
SEARCH: {
|
|
15
|
-
maxDepth: 6,
|
|
16
|
-
minKeywordLength: 2,
|
|
17
|
-
previewLength: 200,
|
|
18
|
-
recencyBonus: 10,
|
|
19
|
-
defaultMaxResults: 10,
|
|
20
|
-
semanticEnabled: false,
|
|
21
|
-
semanticWeight: 0.3,
|
|
22
|
-
},
|
|
23
|
-
FILE_TREE: {
|
|
24
|
-
hidePaths: ['test', '_data', '_history', 'soul/data/kv-cache'],
|
|
25
|
-
compactPaths: ['soul/data/projects', 'soul/data/memory'],
|
|
26
|
-
childLimit: 20,
|
|
27
|
-
},
|
|
28
|
-
WORK: {
|
|
29
|
-
sessionTtlHours: 24,
|
|
30
|
-
maxDecisions: 20,
|
|
31
|
-
},
|
|
32
|
-
KV_CACHE: {
|
|
33
|
-
enabled: true,
|
|
34
|
-
autoSaveOnWorkEnd: true,
|
|
35
|
-
autoLoadOnBoot: true,
|
|
36
|
-
backend: 'json',
|
|
37
|
-
maxSnapshotsPerProject: 50,
|
|
38
|
-
maxSnapshotAgeDays: 30,
|
|
39
|
-
compressionTarget: 1000,
|
|
40
|
-
snapshotDir: null,
|
|
41
|
-
sqliteDir: null,
|
|
42
|
-
tokenBudget: {
|
|
43
|
-
bootContext: 2000,
|
|
44
|
-
searchResult: 500,
|
|
45
|
-
progressiveLoad: true,
|
|
46
|
-
},
|
|
47
|
-
tier: {
|
|
48
|
-
hotDays: 7,
|
|
49
|
-
warmDays: 30,
|
|
50
|
-
},
|
|
51
|
-
embedding: {
|
|
52
|
-
enabled: false,
|
|
53
|
-
model: 'nomic-embed-text',
|
|
54
|
-
endpoint: null,
|
|
55
|
-
},
|
|
56
|
-
backup: {
|
|
57
|
-
enabled: false,
|
|
58
|
-
dir: null,
|
|
59
|
-
schedule: 'daily',
|
|
60
|
-
keepCount: 7,
|
|
61
|
-
incremental: true,
|
|
62
|
-
},
|
|
63
|
-
},
|
|
64
|
-
};
|
|
65
|
-
exports.default = defaults;
|
|
66
|
-
//# sourceMappingURL=config.default.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.default.js","sourceRoot":"","sources":["../../src/lib/config.default.ts"],"names":[],"mappings":";;;;;AAAA,iEAAiE;AACjE,gDAAwB;AAGxB,MAAM,QAAQ,GAAe;IAC3B,SAAS,EAAE,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC;IAC9C,QAAQ,EAAE,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC;IACrD,QAAQ,EAAE,YAAY;IACtB,UAAU,EAAE,IAAI;IAChB,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,IAAI;IAEjC,MAAM,EAAE;QACN,QAAQ,EAAE,CAAC;QACX,gBAAgB,EAAE,CAAC;QACnB,aAAa,EAAE,GAAG;QAClB,YAAY,EAAE,EAAE;QAChB,iBAAiB,EAAE,EAAE;QACrB,eAAe,EAAE,KAAK;QACtB,cAAc,EAAE,GAAG;KACpB;IAED,SAAS,EAAE;QACT,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,oBAAoB,CAAC;QAC9D,YAAY,EAAE,CAAC,oBAAoB,EAAE,kBAAkB,CAAC;QACxD,UAAU,EAAE,EAAE;KACf;IAED,IAAI,EAAE;QACJ,eAAe,EAAE,EAAE;QACnB,YAAY,EAAE,EAAE;KACjB;IAED,QAAQ,EAAE;QACR,OAAO,EAAE,IAAI;QACb,iBAAiB,EAAE,IAAI;QACvB,cAAc,EAAE,IAAI;QACpB,OAAO,EAAE,MAAM;QACf,sBAAsB,EAAE,EAAE;QAC1B,kBAAkB,EAAE,EAAE;QACtB,iBAAiB,EAAE,IAAI;QACvB,WAAW,EAAE,IAAI;QACjB,SAAS,EAAE,IAAI;QACf,WAAW,EAAE;YACX,WAAW,EAAE,IAAI;YACjB,YAAY,EAAE,GAAG;YACjB,eAAe,EAAE,IAAI;SACtB;QACD,IAAI,EAAE;YACJ,OAAO,EAAE,CAAC;YACV,QAAQ,EAAE,EAAE;SACb;QACD,SAAS,EAAE;YACT,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,kBAAkB;YACzB,QAAQ,EAAE,IAAI;SACf;QACD,MAAM,EAAE;YACN,OAAO,EAAE,KAAK;YACd,GAAG,EAAE,IAAI;YACT,QAAQ,EAAE,OAAO;YACjB,SAAS,EAAE,CAAC;YACZ,WAAW,EAAE,IAAI;SAClB;KACF;CACF,CAAC;AAEF,kBAAe,QAAQ,CAAC"}
|
package/dist/lib/config.js
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const config_default_1 = __importDefault(require("./config.default"));
|
|
7
|
-
let local = {};
|
|
8
|
-
try {
|
|
9
|
-
// NOTE: require() intentionally kept — config.local.js is a runtime-optional CJS file
|
|
10
|
-
// that may or may not exist. Static import cannot handle optional modules gracefully.
|
|
11
|
-
local = require('./config.local.js');
|
|
12
|
-
}
|
|
13
|
-
catch (e) {
|
|
14
|
-
const err = e;
|
|
15
|
-
if (err.code !== 'MODULE_NOT_FOUND')
|
|
16
|
-
throw e;
|
|
17
|
-
}
|
|
18
|
-
/** Deep merge: local overrides default, nested objects are merged (not replaced) */
|
|
19
|
-
function deepMerge(base, override) {
|
|
20
|
-
const result = { ...base };
|
|
21
|
-
for (const key of Object.keys(override)) {
|
|
22
|
-
const ov = override[key];
|
|
23
|
-
const bv = base[key];
|
|
24
|
-
if (ov && typeof ov === 'object' && !Array.isArray(ov) &&
|
|
25
|
-
bv && typeof bv === 'object' && !Array.isArray(bv)) {
|
|
26
|
-
result[key] = deepMerge(bv, ov);
|
|
27
|
-
}
|
|
28
|
-
else {
|
|
29
|
-
result[key] = ov;
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
return result;
|
|
33
|
-
}
|
|
34
|
-
const config = deepMerge(config_default_1.default, local);
|
|
35
|
-
exports.default = config;
|
|
36
|
-
//# sourceMappingURL=config.js.map
|
package/dist/lib/config.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":";;;;;AAEA,sEAAwC;AAMxC,IAAI,KAAK,GAA4B,EAAE,CAAC;AACxC,IAAI,CAAC;IACH,sFAAsF;IACtF,sFAAsF;IACtF,KAAK,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;AACvC,CAAC;AAAC,OAAO,CAAU,EAAE,CAAC;IACpB,MAAM,GAAG,GAAG,CAA0B,CAAC;IACvC,IAAI,GAAG,CAAC,IAAI,KAAK,kBAAkB;QAAE,MAAM,CAAC,CAAC;AAC/C,CAAC;AAED,oFAAoF;AACpF,SAAS,SAAS,CAChB,IAAO,EACP,QAAwB;IAExB,MAAM,MAAM,GAAG,EAAE,GAAG,IAAI,EAA6B,CAAC;IACtD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxC,MAAM,EAAE,GAAG,QAAQ,CAAC,GAA4B,CAAC,CAAC;QAClD,MAAM,EAAE,GAAG,IAAI,CAAC,GAAc,CAAC,CAAC;QAChC,IACE,EAAE,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;YAClD,EAAE,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,EAClD,CAAC;YACD,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CACrB,EAA6B,EAC7B,EAA0C,CAC3C,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;QACnB,CAAC;IACH,CAAC;IACD,OAAO,MAAW,CAAC;AACrB,CAAC;AAED,MAAM,MAAM,GAAe,SAAS,CAClC,wBAA8C,EAC9C,KAAwD,CAChC,CAAC;AAE3B,kBAAe,MAAM,CAAC"}
|
package/dist/lib/context.d.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
interface SessionContext {
|
|
2
|
-
agentName: string | null;
|
|
3
|
-
kvChain: Record<string, string>;
|
|
4
|
-
}
|
|
5
|
-
/** Get current session context */
|
|
6
|
-
export declare function getContext(): SessionContext;
|
|
7
|
-
/** Set agent name (called during n2_boot) */
|
|
8
|
-
export declare function setAgentName(name: string): void;
|
|
9
|
-
/** Get agent name with fallback */
|
|
10
|
-
export declare function getAgentName(): string;
|
|
11
|
-
/** Set KV chain parent (for session linking) */
|
|
12
|
-
export declare function setKvChainParent(project: string, sessionId: string): void;
|
|
13
|
-
/** Get and consume KV chain parent */
|
|
14
|
-
export declare function popKvChainParent(project: string): string | null;
|
|
15
|
-
export {};
|
package/dist/lib/context.js
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// Soul v9.0 — Session context manager. Replaces global state anti-pattern.
|
|
3
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.getContext = getContext;
|
|
5
|
-
exports.setAgentName = setAgentName;
|
|
6
|
-
exports.getAgentName = getAgentName;
|
|
7
|
-
exports.setKvChainParent = setKvChainParent;
|
|
8
|
-
exports.popKvChainParent = popKvChainParent;
|
|
9
|
-
const _ctx = {
|
|
10
|
-
agentName: null,
|
|
11
|
-
kvChain: {},
|
|
12
|
-
};
|
|
13
|
-
/** Get current session context */
|
|
14
|
-
function getContext() {
|
|
15
|
-
return _ctx;
|
|
16
|
-
}
|
|
17
|
-
/** Set agent name (called during n2_boot) */
|
|
18
|
-
function setAgentName(name) {
|
|
19
|
-
_ctx.agentName = name;
|
|
20
|
-
}
|
|
21
|
-
/** Get agent name with fallback */
|
|
22
|
-
function getAgentName() {
|
|
23
|
-
return _ctx.agentName || process.env.N2_AGENT_NAME || 'default';
|
|
24
|
-
}
|
|
25
|
-
/** Set KV chain parent (for session linking) */
|
|
26
|
-
function setKvChainParent(project, sessionId) {
|
|
27
|
-
_ctx.kvChain[project] = sessionId;
|
|
28
|
-
}
|
|
29
|
-
/** Get and consume KV chain parent */
|
|
30
|
-
function popKvChainParent(project) {
|
|
31
|
-
const parent = _ctx.kvChain[project] || null;
|
|
32
|
-
delete _ctx.kvChain[project];
|
|
33
|
-
return parent;
|
|
34
|
-
}
|
|
35
|
-
//# sourceMappingURL=context.js.map
|
package/dist/lib/context.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/lib/context.ts"],"names":[],"mappings":";AAAA,2EAA2E;;AAa3E,gCAEC;AAGD,oCAEC;AAGD,oCAEC;AAGD,4CAEC;AAGD,4CAIC;AA9BD,MAAM,IAAI,GAAmB;IAC3B,SAAS,EAAE,IAAI;IACf,OAAO,EAAE,EAAE;CACZ,CAAC;AAEF,kCAAkC;AAClC,SAAgB,UAAU;IACxB,OAAO,IAAI,CAAC;AACd,CAAC;AAED,6CAA6C;AAC7C,SAAgB,YAAY,CAAC,IAAY;IACvC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AACxB,CAAC;AAED,mCAAmC;AACnC,SAAgB,YAAY;IAC1B,OAAO,IAAI,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,SAAS,CAAC;AAClE,CAAC;AAED,gDAAgD;AAChD,SAAgB,gBAAgB,CAAC,OAAe,EAAE,SAAiB;IACjE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC;AACpC,CAAC;AAED,sCAAsC;AACtC,SAAgB,gBAAgB,CAAC,OAAe;IAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;IAC7C,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7B,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
interface CoreMemoryFile {
|
|
2
|
-
agent: string;
|
|
3
|
-
memory: Record<string, string>;
|
|
4
|
-
updatedAt: string;
|
|
5
|
-
}
|
|
6
|
-
/**
|
|
7
|
-
* CoreMemory — Agent-specific always-loaded memory.
|
|
8
|
-
* Automatically included in context at boot.
|
|
9
|
-
* Data path: data/memory/core-memory/{agent}.json
|
|
10
|
-
*/
|
|
11
|
-
export declare class CoreMemory {
|
|
12
|
-
private readonly dir;
|
|
13
|
-
private _cache;
|
|
14
|
-
constructor(dataDir: string);
|
|
15
|
-
/** Agent core memory file path */
|
|
16
|
-
private _filePath;
|
|
17
|
-
/** Load agent core memory */
|
|
18
|
-
read(agentName: string): CoreMemoryFile;
|
|
19
|
-
/** Write key-value to core memory */
|
|
20
|
-
write(agentName: string, key: string, value: string): {
|
|
21
|
-
action: string;
|
|
22
|
-
};
|
|
23
|
-
/** Remove key from core memory */
|
|
24
|
-
remove(agentName: string, key: string): boolean;
|
|
25
|
-
/** List all keys for an agent */
|
|
26
|
-
keys(agentName: string): string[];
|
|
27
|
-
/** Generate prompt text for boot injection */
|
|
28
|
-
toPrompt(agentName: string, maxTokens?: number): string;
|
|
29
|
-
/** Summary of all agents' core memories */
|
|
30
|
-
toContextAll(): string;
|
|
31
|
-
/** Invalidate cache */
|
|
32
|
-
invalidateCache(): void;
|
|
33
|
-
}
|
|
34
|
-
export {};
|
package/dist/lib/core-memory.js
DELETED
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.CoreMemory = void 0;
|
|
7
|
-
// Soul v9.0 — Core Memory: agent-specific facts, auto-injected at boot.
|
|
8
|
-
const fs_1 = __importDefault(require("fs"));
|
|
9
|
-
const path_1 = __importDefault(require("path"));
|
|
10
|
-
const utils_1 = require("./utils");
|
|
11
|
-
/**
|
|
12
|
-
* CoreMemory — Agent-specific always-loaded memory.
|
|
13
|
-
* Automatically included in context at boot.
|
|
14
|
-
* Data path: data/memory/core-memory/{agent}.json
|
|
15
|
-
*/
|
|
16
|
-
class CoreMemory {
|
|
17
|
-
dir;
|
|
18
|
-
_cache;
|
|
19
|
-
constructor(dataDir) {
|
|
20
|
-
this.dir = path_1.default.join(dataDir, 'memory', 'core-memory');
|
|
21
|
-
this._cache = {};
|
|
22
|
-
}
|
|
23
|
-
/** Agent core memory file path */
|
|
24
|
-
_filePath(agentName) {
|
|
25
|
-
const safeName = agentName.toLowerCase().replace(/[^a-z0-9\-_]/g, '');
|
|
26
|
-
return path_1.default.join(this.dir, `${safeName}.json`);
|
|
27
|
-
}
|
|
28
|
-
/** Load agent core memory */
|
|
29
|
-
read(agentName) {
|
|
30
|
-
const cached = this._cache[agentName];
|
|
31
|
-
if (cached)
|
|
32
|
-
return cached;
|
|
33
|
-
const data = (0, utils_1.readJson)(this._filePath(agentName));
|
|
34
|
-
const result = data || { agent: agentName, memory: {}, updatedAt: (0, utils_1.nowISO)() };
|
|
35
|
-
this._cache[agentName] = result;
|
|
36
|
-
return result;
|
|
37
|
-
}
|
|
38
|
-
/** Write key-value to core memory */
|
|
39
|
-
write(agentName, key, value) {
|
|
40
|
-
const data = this.read(agentName);
|
|
41
|
-
const action = data.memory[key] ? 'updated' : 'created';
|
|
42
|
-
data.memory[key] = value;
|
|
43
|
-
data.updatedAt = (0, utils_1.nowISO)();
|
|
44
|
-
this._cache[agentName] = data;
|
|
45
|
-
if (!fs_1.default.existsSync(this.dir))
|
|
46
|
-
fs_1.default.mkdirSync(this.dir, { recursive: true });
|
|
47
|
-
(0, utils_1.writeJson)(this._filePath(agentName), data);
|
|
48
|
-
return { action };
|
|
49
|
-
}
|
|
50
|
-
/** Remove key from core memory */
|
|
51
|
-
remove(agentName, key) {
|
|
52
|
-
const data = this.read(agentName);
|
|
53
|
-
if (!(key in data.memory))
|
|
54
|
-
return false;
|
|
55
|
-
delete data.memory[key];
|
|
56
|
-
data.updatedAt = (0, utils_1.nowISO)();
|
|
57
|
-
this._cache[agentName] = data;
|
|
58
|
-
(0, utils_1.writeJson)(this._filePath(agentName), data);
|
|
59
|
-
return true;
|
|
60
|
-
}
|
|
61
|
-
/** List all keys for an agent */
|
|
62
|
-
keys(agentName) {
|
|
63
|
-
const data = this.read(agentName);
|
|
64
|
-
return Object.keys(data.memory);
|
|
65
|
-
}
|
|
66
|
-
/** Generate prompt text for boot injection */
|
|
67
|
-
toPrompt(agentName, maxTokens = 500) {
|
|
68
|
-
const data = this.read(agentName);
|
|
69
|
-
const entries = Object.entries(data.memory);
|
|
70
|
-
if (entries.length === 0)
|
|
71
|
-
return '';
|
|
72
|
-
const lines = entries.map(([k, v]) => `${k}: ${v}`);
|
|
73
|
-
let result = lines.join(' | ');
|
|
74
|
-
// Rough char-based token limit
|
|
75
|
-
if (result.length > maxTokens * 2) {
|
|
76
|
-
result = result.slice(0, maxTokens * 2) + '...';
|
|
77
|
-
}
|
|
78
|
-
return `Core[${agentName}]: ${result}`;
|
|
79
|
-
}
|
|
80
|
-
/** Summary of all agents' core memories */
|
|
81
|
-
toContextAll() {
|
|
82
|
-
if (!fs_1.default.existsSync(this.dir))
|
|
83
|
-
return '';
|
|
84
|
-
const files = fs_1.default.readdirSync(this.dir).filter(f => f.endsWith('.json'));
|
|
85
|
-
if (files.length === 0)
|
|
86
|
-
return '';
|
|
87
|
-
const summaries = [];
|
|
88
|
-
for (const f of files) {
|
|
89
|
-
const agent = f.replace('.json', '');
|
|
90
|
-
const prompt = this.toPrompt(agent, 200);
|
|
91
|
-
if (prompt)
|
|
92
|
-
summaries.push(prompt);
|
|
93
|
-
}
|
|
94
|
-
return summaries.join('\n');
|
|
95
|
-
}
|
|
96
|
-
/** Invalidate cache */
|
|
97
|
-
invalidateCache() {
|
|
98
|
-
this._cache = {};
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
exports.CoreMemory = CoreMemory;
|
|
102
|
-
//# sourceMappingURL=core-memory.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"core-memory.js","sourceRoot":"","sources":["../../src/lib/core-memory.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import type { EntityType } from '../types';
|
|
2
|
-
interface StoredEntity {
|
|
3
|
-
type: EntityType;
|
|
4
|
-
name: string;
|
|
5
|
-
attributes: Record<string, string | number | boolean | null>;
|
|
6
|
-
firstSeen: string;
|
|
7
|
-
lastMentioned: string;
|
|
8
|
-
mentionCount: number;
|
|
9
|
-
}
|
|
10
|
-
export interface EntityInput {
|
|
11
|
-
type: EntityType;
|
|
12
|
-
name: string;
|
|
13
|
-
attributes?: Record<string, string | number | boolean | null>;
|
|
14
|
-
}
|
|
15
|
-
interface UpsertResult {
|
|
16
|
-
action: 'created' | 'updated' | 'skip';
|
|
17
|
-
entity: StoredEntity | null;
|
|
18
|
-
}
|
|
19
|
-
interface BatchResult {
|
|
20
|
-
created: number;
|
|
21
|
-
updated: number;
|
|
22
|
-
skipped: number;
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* EntityMemory — Structured entity tracking and auto-injection.
|
|
26
|
-
* Data path: data/memory/entities.json
|
|
27
|
-
* Entity types: person, hardware, project, concept, place, service
|
|
28
|
-
*/
|
|
29
|
-
export declare class EntityMemory {
|
|
30
|
-
private readonly filePath;
|
|
31
|
-
private _cache;
|
|
32
|
-
constructor(dataDir: string);
|
|
33
|
-
/** Load entity data (with caching) */
|
|
34
|
-
private _load;
|
|
35
|
-
/** Save changes + update cache */
|
|
36
|
-
private _save;
|
|
37
|
-
/** Add or update an entity (upsert). Merges attributes on match. */
|
|
38
|
-
upsert(entity: EntityInput): UpsertResult;
|
|
39
|
-
/** Batch upsert multiple entities */
|
|
40
|
-
upsertBatch(entities: EntityInput[]): BatchResult;
|
|
41
|
-
/** Get entity by name */
|
|
42
|
-
get(name: string): StoredEntity | null;
|
|
43
|
-
/** Get entities by type */
|
|
44
|
-
getByType(type: EntityType): StoredEntity[];
|
|
45
|
-
/** Search entities by keyword */
|
|
46
|
-
search(query: string): StoredEntity[];
|
|
47
|
-
/** List all entities */
|
|
48
|
-
list(): StoredEntity[];
|
|
49
|
-
/** Remove entity by name (optionally filter by type) */
|
|
50
|
-
remove(name: string, type?: EntityType): boolean;
|
|
51
|
-
/** Prune old entities (not mentioned for maxAge days) */
|
|
52
|
-
prune(maxAgeDays?: number): number;
|
|
53
|
-
/** Generate context string for boot injection */
|
|
54
|
-
toContext(maxItems?: number): string;
|
|
55
|
-
/** Invalidate cache (for testing/reload) */
|
|
56
|
-
invalidateCache(): void;
|
|
57
|
-
}
|
|
58
|
-
export {};
|
|
@@ -1,160 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.EntityMemory = void 0;
|
|
7
|
-
// Soul v9.0 — Entity Memory: structured entity tracking for people, places, concepts, etc.
|
|
8
|
-
const fs_1 = __importDefault(require("fs"));
|
|
9
|
-
const path_1 = __importDefault(require("path"));
|
|
10
|
-
const utils_1 = require("./utils");
|
|
11
|
-
/**
|
|
12
|
-
* EntityMemory — Structured entity tracking and auto-injection.
|
|
13
|
-
* Data path: data/memory/entities.json
|
|
14
|
-
* Entity types: person, hardware, project, concept, place, service
|
|
15
|
-
*/
|
|
16
|
-
class EntityMemory {
|
|
17
|
-
filePath;
|
|
18
|
-
_cache;
|
|
19
|
-
constructor(dataDir) {
|
|
20
|
-
this.filePath = path_1.default.join(dataDir, 'memory', 'entities.json');
|
|
21
|
-
this._cache = null;
|
|
22
|
-
}
|
|
23
|
-
/** Load entity data (with caching) */
|
|
24
|
-
_load() {
|
|
25
|
-
if (this._cache)
|
|
26
|
-
return this._cache;
|
|
27
|
-
const data = (0, utils_1.readJson)(this.filePath);
|
|
28
|
-
this._cache = data || { entities: [], updatedAt: (0, utils_1.nowISO)() };
|
|
29
|
-
return this._cache;
|
|
30
|
-
}
|
|
31
|
-
/** Save changes + update cache */
|
|
32
|
-
_save(data) {
|
|
33
|
-
data.updatedAt = (0, utils_1.nowISO)();
|
|
34
|
-
this._cache = data;
|
|
35
|
-
const dir = path_1.default.dirname(this.filePath);
|
|
36
|
-
if (!fs_1.default.existsSync(dir))
|
|
37
|
-
fs_1.default.mkdirSync(dir, { recursive: true });
|
|
38
|
-
(0, utils_1.writeJson)(this.filePath, data);
|
|
39
|
-
}
|
|
40
|
-
/** Add or update an entity (upsert). Merges attributes on match. */
|
|
41
|
-
upsert(entity) {
|
|
42
|
-
if (!entity || !entity.name || !entity.type) {
|
|
43
|
-
return { action: 'skip', entity: null };
|
|
44
|
-
}
|
|
45
|
-
const data = this._load();
|
|
46
|
-
const nameKey = entity.name.toLowerCase().trim();
|
|
47
|
-
const existing = data.entities.find(e => e.name.toLowerCase().trim() === nameKey && e.type === entity.type);
|
|
48
|
-
if (existing) {
|
|
49
|
-
existing.attributes = { ...existing.attributes, ...(entity.attributes || {}) };
|
|
50
|
-
existing.lastMentioned = (0, utils_1.nowISO)();
|
|
51
|
-
existing.mentionCount = (existing.mentionCount || 1) + 1;
|
|
52
|
-
this._save(data);
|
|
53
|
-
return { action: 'updated', entity: existing };
|
|
54
|
-
}
|
|
55
|
-
const newEntity = {
|
|
56
|
-
type: entity.type,
|
|
57
|
-
name: entity.name,
|
|
58
|
-
attributes: entity.attributes || {},
|
|
59
|
-
firstSeen: (0, utils_1.nowISO)(),
|
|
60
|
-
lastMentioned: (0, utils_1.nowISO)(),
|
|
61
|
-
mentionCount: 1,
|
|
62
|
-
};
|
|
63
|
-
data.entities.push(newEntity);
|
|
64
|
-
this._save(data);
|
|
65
|
-
return { action: 'created', entity: newEntity };
|
|
66
|
-
}
|
|
67
|
-
/** Batch upsert multiple entities */
|
|
68
|
-
upsertBatch(entities) {
|
|
69
|
-
if (!Array.isArray(entities))
|
|
70
|
-
return { created: 0, updated: 0, skipped: 0 };
|
|
71
|
-
const stats = { created: 0, updated: 0, skipped: 0 };
|
|
72
|
-
for (const e of entities) {
|
|
73
|
-
const result = this.upsert(e);
|
|
74
|
-
if (result.action === 'created')
|
|
75
|
-
stats.created++;
|
|
76
|
-
else if (result.action === 'updated')
|
|
77
|
-
stats.updated++;
|
|
78
|
-
else
|
|
79
|
-
stats.skipped++;
|
|
80
|
-
}
|
|
81
|
-
return stats;
|
|
82
|
-
}
|
|
83
|
-
/** Get entity by name */
|
|
84
|
-
get(name) {
|
|
85
|
-
const data = this._load();
|
|
86
|
-
const nameKey = name.toLowerCase().trim();
|
|
87
|
-
return data.entities.find(e => e.name.toLowerCase().trim() === nameKey) || null;
|
|
88
|
-
}
|
|
89
|
-
/** Get entities by type */
|
|
90
|
-
getByType(type) {
|
|
91
|
-
const data = this._load();
|
|
92
|
-
return data.entities.filter(e => e.type === type);
|
|
93
|
-
}
|
|
94
|
-
/** Search entities by keyword */
|
|
95
|
-
search(query) {
|
|
96
|
-
const data = this._load();
|
|
97
|
-
const keywords = query.toLowerCase().split(/\s+/);
|
|
98
|
-
return data.entities.filter(e => {
|
|
99
|
-
const text = [e.name, e.type, JSON.stringify(e.attributes)].join(' ').toLowerCase();
|
|
100
|
-
return keywords.some(kw => text.includes(kw));
|
|
101
|
-
});
|
|
102
|
-
}
|
|
103
|
-
/** List all entities */
|
|
104
|
-
list() {
|
|
105
|
-
return this._load().entities;
|
|
106
|
-
}
|
|
107
|
-
/** Remove entity by name (optionally filter by type) */
|
|
108
|
-
remove(name, type) {
|
|
109
|
-
const data = this._load();
|
|
110
|
-
const nameKey = name.toLowerCase().trim();
|
|
111
|
-
const before = data.entities.length;
|
|
112
|
-
data.entities = data.entities.filter(e => {
|
|
113
|
-
const match = e.name.toLowerCase().trim() === nameKey;
|
|
114
|
-
if (type)
|
|
115
|
-
return !(match && e.type === type);
|
|
116
|
-
return !match;
|
|
117
|
-
});
|
|
118
|
-
if (data.entities.length < before) {
|
|
119
|
-
this._save(data);
|
|
120
|
-
return true;
|
|
121
|
-
}
|
|
122
|
-
return false;
|
|
123
|
-
}
|
|
124
|
-
/** Prune old entities (not mentioned for maxAge days) */
|
|
125
|
-
prune(maxAgeDays = 90) {
|
|
126
|
-
const data = this._load();
|
|
127
|
-
const cutoff = Date.now() - maxAgeDays * 24 * 60 * 60 * 1000;
|
|
128
|
-
const before = data.entities.length;
|
|
129
|
-
data.entities = data.entities.filter(e => {
|
|
130
|
-
const last = new Date(e.lastMentioned || e.firstSeen).getTime();
|
|
131
|
-
return last >= cutoff;
|
|
132
|
-
});
|
|
133
|
-
if (data.entities.length < before) {
|
|
134
|
-
this._save(data);
|
|
135
|
-
}
|
|
136
|
-
return before - data.entities.length;
|
|
137
|
-
}
|
|
138
|
-
/** Generate context string for boot injection */
|
|
139
|
-
toContext(maxItems = 10) {
|
|
140
|
-
const data = this._load();
|
|
141
|
-
if (data.entities.length === 0)
|
|
142
|
-
return '';
|
|
143
|
-
const sorted = [...data.entities]
|
|
144
|
-
.sort((a, b) => (b.mentionCount || 0) - (a.mentionCount || 0))
|
|
145
|
-
.slice(0, maxItems);
|
|
146
|
-
const lines = sorted.map(e => {
|
|
147
|
-
const attrs = Object.entries(e.attributes || {})
|
|
148
|
-
.map(([k, v]) => `${k}:${v}`)
|
|
149
|
-
.join(', ');
|
|
150
|
-
return `${e.name}[${e.type}]${attrs ? ': ' + attrs : ''}`;
|
|
151
|
-
});
|
|
152
|
-
return `Entities(${data.entities.length}): ${lines.join(' | ')}`;
|
|
153
|
-
}
|
|
154
|
-
/** Invalidate cache (for testing/reload) */
|
|
155
|
-
invalidateCache() {
|
|
156
|
-
this._cache = null;
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
exports.EntityMemory = EntityMemory;
|
|
160
|
-
//# sourceMappingURL=entity-memory.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"entity-memory.js","sourceRoot":"","sources":["../../src/lib/entity-memory.ts"],"names":[],"mappings":"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"}
|