shieldcortex 2.4.6 → 2.4.8
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/dist/index.js +27 -9
- package/dist/index.js.map +1 -1
- package/dist/setup/clawdbot.d.ts +15 -0
- package/dist/setup/clawdbot.d.ts.map +1 -0
- package/dist/setup/clawdbot.js +118 -0
- package/dist/setup/clawdbot.js.map +1 -0
- package/hooks/openclaw/cortex-memory/HOOK.md +7 -1
- package/hooks/openclaw/cortex-memory/handler.js +49 -1
- package/package.json +6 -4
package/dist/index.js
CHANGED
|
@@ -90,9 +90,13 @@ async function startMcpServer(dbPath) {
|
|
|
90
90
|
* Start the Next.js dashboard as a child process
|
|
91
91
|
*/
|
|
92
92
|
function startDashboard() {
|
|
93
|
-
// Dashboard
|
|
94
|
-
//
|
|
93
|
+
// Dashboard paths - check standalone first (npm package), then fall back to dev
|
|
94
|
+
// Note: Next.js standalone output puts files in a subdirectory named after the project
|
|
95
|
+
const standaloneServer = path.resolve(__dirname, '..', 'dashboard', '.next', 'standalone', 'dashboard', 'server.js');
|
|
95
96
|
const dashboardDir = path.resolve(__dirname, '..', 'dashboard');
|
|
97
|
+
// Check if standalone server exists (bundled in npm package)
|
|
98
|
+
const fs = require('fs');
|
|
99
|
+
const useStandalone = fs.existsSync(standaloneServer);
|
|
96
100
|
console.log(`
|
|
97
101
|
╔══════════════════════════════════════════════════════════════╗
|
|
98
102
|
║ 🧠 ShieldCortex Dashboard ║
|
|
@@ -102,12 +106,24 @@ function startDashboard() {
|
|
|
102
106
|
║ API: http://localhost:3001 ║
|
|
103
107
|
╚══════════════════════════════════════════════════════════════╝
|
|
104
108
|
`);
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
109
|
+
let dashboard;
|
|
110
|
+
if (useStandalone) {
|
|
111
|
+
// Use standalone server (npm package distribution)
|
|
112
|
+
const standaloneCwd = path.resolve(__dirname, '..', 'dashboard', '.next', 'standalone', 'dashboard');
|
|
113
|
+
dashboard = spawn(process.execPath, ['server.js'], {
|
|
114
|
+
cwd: standaloneCwd,
|
|
115
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
116
|
+
env: { ...process.env, PORT: '3030', HOSTNAME: '0.0.0.0' },
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
// Fall back to npm run start (local development)
|
|
121
|
+
dashboard = spawn('npm', ['run', 'start'], {
|
|
122
|
+
cwd: dashboardDir,
|
|
123
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
124
|
+
shell: true,
|
|
125
|
+
});
|
|
126
|
+
}
|
|
111
127
|
// Pipe dashboard output with prefix
|
|
112
128
|
dashboard.stdout?.on('data', (data) => {
|
|
113
129
|
const lines = data.toString().split('\n').filter((l) => l.trim());
|
|
@@ -123,7 +139,9 @@ function startDashboard() {
|
|
|
123
139
|
});
|
|
124
140
|
dashboard.on('error', (error) => {
|
|
125
141
|
console.error('[dashboard] Failed to start:', error.message);
|
|
126
|
-
|
|
142
|
+
if (!useStandalone) {
|
|
143
|
+
console.error('[dashboard] Make sure to run "npm run build" in the dashboard directory first.');
|
|
144
|
+
}
|
|
127
145
|
});
|
|
128
146
|
dashboard.on('exit', (code, signal) => {
|
|
129
147
|
if (signal) {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenClaw/Clawdbot hook installer.
|
|
3
|
+
*
|
|
4
|
+
* Copies the cortex-memory hook into Clawdbot's bundled hooks directory.
|
|
5
|
+
* Only works if OpenClaw is installed on the system.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Find Clawdbot's bundled hooks directory by locating the binary
|
|
9
|
+
*/
|
|
10
|
+
export declare function findClawdbotHooksDir(): string | null;
|
|
11
|
+
export declare function installClawdbotHook(): Promise<void>;
|
|
12
|
+
export declare function uninstallClawdbotHook(): Promise<void>;
|
|
13
|
+
export declare function clawdbotHookStatus(): Promise<void>;
|
|
14
|
+
export declare function handleClawdbotCommand(subcommand: string): Promise<void>;
|
|
15
|
+
//# sourceMappingURL=clawdbot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clawdbot.d.ts","sourceRoot":"","sources":["../../src/setup/clawdbot.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAgBH;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,GAAG,IAAI,CA8BpD;AAED,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAgCzD;AAED,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,CAiB3D;AAED,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAcxD;AAED,wBAAsB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAe7E"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenClaw/Clawdbot hook installer.
|
|
3
|
+
*
|
|
4
|
+
* Copies the cortex-memory hook into Clawdbot's bundled hooks directory.
|
|
5
|
+
* Only works if OpenClaw is installed on the system.
|
|
6
|
+
*/
|
|
7
|
+
import fs from 'fs';
|
|
8
|
+
import path from 'path';
|
|
9
|
+
import { execSync } from 'child_process';
|
|
10
|
+
import { fileURLToPath } from 'url';
|
|
11
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
12
|
+
const __dirname = path.dirname(__filename);
|
|
13
|
+
const HOOK_NAME = 'cortex-memory';
|
|
14
|
+
// Hook source is in hooks/clawdbot/cortex-memory/ relative to project root
|
|
15
|
+
// From dist/setup/, go up two levels to project root
|
|
16
|
+
const HOOK_SOURCE = path.resolve(__dirname, '..', '..', 'hooks', 'clawdbot', HOOK_NAME);
|
|
17
|
+
/**
|
|
18
|
+
* Find Clawdbot's bundled hooks directory by locating the binary
|
|
19
|
+
*/
|
|
20
|
+
export function findClawdbotHooksDir() {
|
|
21
|
+
try {
|
|
22
|
+
const binPath = execSync('which openclaw 2>/dev/null || which clawdbot 2>/dev/null || which moltbot 2>/dev/null', {
|
|
23
|
+
encoding: 'utf-8',
|
|
24
|
+
}).trim();
|
|
25
|
+
if (!binPath)
|
|
26
|
+
return null;
|
|
27
|
+
// Resolve symlink — lands in e.g. <prefix>/lib/node_modules/clawdbot/dist/entry.js
|
|
28
|
+
const realBin = fs.realpathSync(binPath);
|
|
29
|
+
// Walk up from resolved path to find dist/hooks/bundled/
|
|
30
|
+
let dir = path.dirname(realBin);
|
|
31
|
+
for (let i = 0; i < 5; i++) {
|
|
32
|
+
const candidate = path.join(dir, 'hooks', 'bundled');
|
|
33
|
+
if (fs.existsSync(candidate)) {
|
|
34
|
+
return candidate;
|
|
35
|
+
}
|
|
36
|
+
// Also check dist/hooks/bundled from current dir
|
|
37
|
+
const distCandidate = path.join(dir, 'dist', 'hooks', 'bundled');
|
|
38
|
+
if (fs.existsSync(distCandidate)) {
|
|
39
|
+
return distCandidate;
|
|
40
|
+
}
|
|
41
|
+
dir = path.dirname(dir);
|
|
42
|
+
}
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
export async function installClawdbotHook() {
|
|
50
|
+
const hooksDir = findClawdbotHooksDir();
|
|
51
|
+
if (!hooksDir) {
|
|
52
|
+
console.error('OpenClaw/Clawdbot is not installed on this system.');
|
|
53
|
+
console.log('Install it first: npm install -g openclaw');
|
|
54
|
+
process.exit(1);
|
|
55
|
+
}
|
|
56
|
+
if (!fs.existsSync(HOOK_SOURCE)) {
|
|
57
|
+
console.error('Hook source files not found. Package may be corrupted.');
|
|
58
|
+
process.exit(1);
|
|
59
|
+
}
|
|
60
|
+
const destDir = path.join(hooksDir, HOOK_NAME);
|
|
61
|
+
// Copy hook files
|
|
62
|
+
fs.mkdirSync(destDir, { recursive: true });
|
|
63
|
+
for (const file of ['HOOK.md', 'handler.js']) {
|
|
64
|
+
const src = path.join(HOOK_SOURCE, file);
|
|
65
|
+
const dest = path.join(destDir, file);
|
|
66
|
+
fs.copyFileSync(src, dest);
|
|
67
|
+
}
|
|
68
|
+
console.log(`✓ Installed cortex-memory hook to ${destDir}`);
|
|
69
|
+
console.log(' The hook will activate on next OpenClaw restart.');
|
|
70
|
+
console.log('');
|
|
71
|
+
console.log(' What it does:');
|
|
72
|
+
console.log(' • Auto-saves important session context on /new');
|
|
73
|
+
console.log(' • Injects past memories on session start');
|
|
74
|
+
console.log(' • "remember this: ..." keyword trigger');
|
|
75
|
+
}
|
|
76
|
+
export async function uninstallClawdbotHook() {
|
|
77
|
+
const hooksDir = findClawdbotHooksDir();
|
|
78
|
+
if (!hooksDir) {
|
|
79
|
+
console.log('OpenClaw/Clawdbot is not installed on this system.');
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
const destDir = path.join(hooksDir, HOOK_NAME);
|
|
83
|
+
if (!fs.existsSync(destDir)) {
|
|
84
|
+
console.log('cortex-memory hook is not installed.');
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
fs.rmSync(destDir, { recursive: true });
|
|
88
|
+
console.log(`✓ Removed cortex-memory hook from ${destDir}`);
|
|
89
|
+
}
|
|
90
|
+
export async function clawdbotHookStatus() {
|
|
91
|
+
const hooksDir = findClawdbotHooksDir();
|
|
92
|
+
if (!hooksDir) {
|
|
93
|
+
console.log('OpenClaw/Clawdbot: not installed');
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
const destDir = path.join(hooksDir, HOOK_NAME);
|
|
97
|
+
const installed = fs.existsSync(destDir);
|
|
98
|
+
console.log(`OpenClaw/Clawdbot: installed`);
|
|
99
|
+
console.log(`Hooks directory: ${hooksDir}`);
|
|
100
|
+
console.log(`cortex-memory: ${installed ? 'installed' : 'not installed'}`);
|
|
101
|
+
}
|
|
102
|
+
export async function handleClawdbotCommand(subcommand) {
|
|
103
|
+
switch (subcommand) {
|
|
104
|
+
case 'install':
|
|
105
|
+
await installClawdbotHook();
|
|
106
|
+
break;
|
|
107
|
+
case 'uninstall':
|
|
108
|
+
await uninstallClawdbotHook();
|
|
109
|
+
break;
|
|
110
|
+
case 'status':
|
|
111
|
+
await clawdbotHookStatus();
|
|
112
|
+
break;
|
|
113
|
+
default:
|
|
114
|
+
console.log('Usage: shieldcortex clawdbot <install|uninstall|status>');
|
|
115
|
+
process.exit(1);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=clawdbot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clawdbot.js","sourceRoot":"","sources":["../../src/setup/clawdbot.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAE3C,MAAM,SAAS,GAAG,eAAe,CAAC;AAElC,2EAA2E;AAC3E,qDAAqD;AACrD,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;AAExF;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAClC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,QAAQ,CAAC,uFAAuF,EAAE;YAChH,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC,IAAI,EAAE,CAAC;QAEV,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAE1B,mFAAmF;QACnF,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAEzC,yDAAyD;QACzD,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;YACrD,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC7B,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,iDAAiD;YACjD,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;YACjE,IAAI,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;gBACjC,OAAO,aAAa,CAAC;YACvB,CAAC;YACD,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACvC,MAAM,QAAQ,GAAG,oBAAoB,EAAE,CAAC;IAExC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACpE,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;QACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;QACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAE/C,kBAAkB;IAClB,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE3C,KAAK,MAAM,IAAI,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,CAAC;QAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACtC,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,qCAAqC,OAAO,EAAE,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;IAClE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAC/B,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;IAChE,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;IAC1D,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB;IACzC,MAAM,QAAQ,GAAG,oBAAoB,EAAE,CAAC;IAExC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;QAClE,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAE/C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;QACpD,OAAO;IACT,CAAC;IAED,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,qCAAqC,OAAO,EAAE,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACtC,MAAM,QAAQ,GAAG,oBAAoB,EAAE,CAAC;IAExC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;QAChD,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAC/C,MAAM,SAAS,GAAG,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAEzC,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,qBAAqB,QAAQ,EAAE,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,qBAAqB,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;AAChF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,UAAkB;IAC5D,QAAQ,UAAU,EAAE,CAAC;QACnB,KAAK,SAAS;YACZ,MAAM,mBAAmB,EAAE,CAAC;YAC5B,MAAM;QACR,KAAK,WAAW;YACd,MAAM,qBAAqB,EAAE,CAAC;YAC9B,MAAM;QACR,KAAK,QAAQ;YACX,MAAM,kBAAkB,EAAE,CAAC;YAC3B,MAAM;QACR;YACE,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;YACvE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACH,CAAC"}
|
|
@@ -7,7 +7,7 @@ metadata:
|
|
|
7
7
|
"openclaw":
|
|
8
8
|
{
|
|
9
9
|
"emoji": "🧠",
|
|
10
|
-
"events": ["command:new", "agent:bootstrap", "command"],
|
|
10
|
+
"events": ["command:new", "command:stop", "agent:bootstrap", "command"],
|
|
11
11
|
"requires": { "anyBins": ["npx"] },
|
|
12
12
|
"install": [{ "id": "community", "kind": "community", "label": "ShieldCortex" }],
|
|
13
13
|
},
|
|
@@ -25,6 +25,12 @@ Integrates [ShieldCortex](https://github.com/Drakon-Systems-Ltd/ShieldCortex) pe
|
|
|
25
25
|
2. Pattern-matches for decisions, bug fixes, learnings, architecture changes, and preferences
|
|
26
26
|
3. Saves up to 5 high-salience memories to ShieldCortex via mcporter
|
|
27
27
|
|
|
28
|
+
### On `/stop`, `/clear`, `/exit` (Session End)
|
|
29
|
+
1. Captures the current session transcript before it ends
|
|
30
|
+
2. Pattern-matches for important content (same patterns as `/new`)
|
|
31
|
+
3. Saves memories with a `session-stop` tag for tracking
|
|
32
|
+
4. **Ensures work is saved** even when explicitly ending a session
|
|
33
|
+
|
|
28
34
|
### On Session Start (Agent Bootstrap)
|
|
29
35
|
1. Calls Cortex `get_context` to retrieve relevant memories
|
|
30
36
|
2. Injects them into the agent's bootstrap context
|
|
@@ -187,6 +187,49 @@ async function onSessionEnd(event) {
|
|
|
187
187
|
console.log(`[cortex-memory] Saved ${saved}/${memories.length} memories from session`);
|
|
188
188
|
}
|
|
189
189
|
|
|
190
|
+
/**
|
|
191
|
+
* Handle command:stop — extract memories before session ends
|
|
192
|
+
* This fires when user explicitly calls /stop
|
|
193
|
+
*/
|
|
194
|
+
async function onSessionStop(event) {
|
|
195
|
+
const context = event.context || {};
|
|
196
|
+
const sessionEntry = context.sessionEntry || {};
|
|
197
|
+
const sessionFile = sessionEntry.sessionFile;
|
|
198
|
+
|
|
199
|
+
if (!sessionFile) {
|
|
200
|
+
console.log("[cortex-memory] No session file found for stop, skipping extraction");
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
const messages = await getRecentMessages(sessionFile);
|
|
205
|
+
if (messages.length === 0) {
|
|
206
|
+
console.log("[cortex-memory] No messages to extract on stop");
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
const memories = extractMemories(messages);
|
|
211
|
+
if (memories.length === 0) {
|
|
212
|
+
console.log("[cortex-memory] No high-salience content found on stop");
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
let saved = 0;
|
|
217
|
+
for (const mem of memories) {
|
|
218
|
+
const result = await callCortex("remember", {
|
|
219
|
+
title: mem.title,
|
|
220
|
+
content: mem.content,
|
|
221
|
+
category: mem.category,
|
|
222
|
+
project: "openclaw",
|
|
223
|
+
scope: "global",
|
|
224
|
+
importance: "high",
|
|
225
|
+
tags: "auto-extracted,openclaw-hook,session-stop",
|
|
226
|
+
});
|
|
227
|
+
if (result) saved++;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
console.log(`[cortex-memory] Saved ${saved}/${memories.length} memories on session stop`);
|
|
231
|
+
}
|
|
232
|
+
|
|
190
233
|
/**
|
|
191
234
|
* Handle agent:bootstrap — inject past context into agent
|
|
192
235
|
*/
|
|
@@ -216,7 +259,7 @@ async function onBootstrap(event) {
|
|
|
216
259
|
* Handle command events — check for keyword triggers
|
|
217
260
|
*/
|
|
218
261
|
async function onKeywordTrigger(event) {
|
|
219
|
-
if (event.action === "new" || event.action === "stop") return;
|
|
262
|
+
if (event.action === "new" || event.action === "stop" || event.action === "clear" || event.action === "exit") return;
|
|
220
263
|
|
|
221
264
|
const context = event.context || {};
|
|
222
265
|
const sessionEntry = context.sessionEntry || {};
|
|
@@ -263,6 +306,11 @@ const cortexMemoryHandler = async (event) => {
|
|
|
263
306
|
try {
|
|
264
307
|
if (event.type === "command" && event.action === "new") {
|
|
265
308
|
await onSessionEnd(event);
|
|
309
|
+
} else if (event.type === "command" && event.action === "stop") {
|
|
310
|
+
await onSessionStop(event);
|
|
311
|
+
} else if (event.type === "command" && (event.action === "clear" || event.action === "exit")) {
|
|
312
|
+
// Also save on clear/exit - these also end the session context
|
|
313
|
+
await onSessionStop(event);
|
|
266
314
|
} else if (event.type === "agent" && event.action === "bootstrap") {
|
|
267
315
|
await onBootstrap(event);
|
|
268
316
|
} else if (event.type === "command") {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "shieldcortex",
|
|
3
|
-
"version": "2.4.
|
|
3
|
+
"version": "2.4.8",
|
|
4
4
|
"description": "Complete memory system + security layer for AI agents. Native OpenClaw integration. Persistent storage, semantic search, prompt injection firewall, credential protection, and audit trail. One package, full solution.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -25,7 +25,8 @@
|
|
|
25
25
|
"type": "module",
|
|
26
26
|
"scripts": {
|
|
27
27
|
"build": "tsc",
|
|
28
|
-
"build:
|
|
28
|
+
"build:dashboard": "cd dashboard && npm run build && cp -r .next/static .next/standalone/dashboard/.next/ && cp -r public .next/standalone/dashboard/",
|
|
29
|
+
"build:all": "npm run build && npm run build:dashboard",
|
|
29
30
|
"start": "node dist/index.js",
|
|
30
31
|
"start:api": "node dist/index.js --mode api",
|
|
31
32
|
"start:dashboard": "node dist/index.js --dashboard",
|
|
@@ -37,7 +38,7 @@
|
|
|
37
38
|
"test:watch": "node --experimental-vm-modules node_modules/jest/bin/jest.js --watch",
|
|
38
39
|
"test:coverage": "node --experimental-vm-modules node_modules/jest/bin/jest.js --coverage",
|
|
39
40
|
"audit:security": "npm audit --audit-level=moderate",
|
|
40
|
-
"prepublishOnly": "npm run build"
|
|
41
|
+
"prepublishOnly": "npm run build:all"
|
|
41
42
|
},
|
|
42
43
|
"keywords": [
|
|
43
44
|
"ai",
|
|
@@ -103,6 +104,7 @@
|
|
|
103
104
|
"files": [
|
|
104
105
|
"dist",
|
|
105
106
|
"hooks",
|
|
106
|
-
"scripts"
|
|
107
|
+
"scripts",
|
|
108
|
+
"dashboard/.next/standalone"
|
|
107
109
|
]
|
|
108
110
|
}
|