@hippodid/openclaw-plugin 1.0.5 → 1.0.7
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/hooks/auto-capture.d.ts +2 -2
- package/dist/hooks/auto-capture.d.ts.map +1 -1
- package/dist/hooks/auto-capture.js +26 -39
- package/dist/hooks/auto-capture.js.map +1 -1
- package/dist/hooks/auto-recall.d.ts +2 -2
- package/dist/hooks/auto-recall.d.ts.map +1 -1
- package/dist/hooks/auto-recall.js +23 -38
- package/dist/hooks/auto-recall.js.map +1 -1
- package/dist/hooks/memory-flush.d.ts +1 -2
- package/dist/hooks/memory-flush.d.ts.map +1 -1
- package/dist/hooks/memory-flush.js +6 -10
- package/dist/hooks/memory-flush.js.map +1 -1
- package/dist/hooks/session-lifecycle.d.ts +2 -3
- package/dist/hooks/session-lifecycle.d.ts.map +1 -1
- package/dist/hooks/session-lifecycle.js +6 -26
- package/dist/hooks/session-lifecycle.js.map +1 -1
- package/dist/index.js +14 -3
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +1 -25
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/hooks/auto-capture.ts +27 -48
- package/src/hooks/auto-recall.ts +26 -57
- package/src/hooks/memory-flush.ts +7 -15
- package/src/hooks/session-lifecycle.ts +7 -33
- package/src/index.ts +14 -3
- package/src/types.ts +4 -29
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { HippoDidClient } from '../hippodid-client.js';
|
|
2
|
-
import type { PluginConfig
|
|
2
|
+
import type { PluginConfig } from '../types.js';
|
|
3
3
|
export declare function createAutoCaptureHook(client: HippoDidClient, config: PluginConfig, logger: {
|
|
4
4
|
info(msg: string): void;
|
|
5
5
|
warn(msg: string): void;
|
|
6
|
-
}): (api:
|
|
6
|
+
}): (api: any) => void;
|
|
7
7
|
//# sourceMappingURL=auto-capture.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-capture.d.ts","sourceRoot":"","sources":["../../src/hooks/auto-capture.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"auto-capture.d.ts","sourceRoot":"","sources":["../../src/hooks/auto-capture.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE;IAAE,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAC3D,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CA6BpB"}
|
|
@@ -1,45 +1,32 @@
|
|
|
1
1
|
export function createAutoCaptureHook(client, config, logger) {
|
|
2
2
|
return (api) => {
|
|
3
|
-
api.on(
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
3
|
+
// OpenClaw 2026 does not support api.on() for post-response hooks.
|
|
4
|
+
// Register a capture tool that agents invoke to store important information.
|
|
5
|
+
api.registerTool('hippodid:remember', {
|
|
6
|
+
description: 'Save important information to HippoDid character memory. Call this to store facts, decisions, preferences, or context that should persist across sessions.',
|
|
7
|
+
args: [
|
|
8
|
+
{
|
|
9
|
+
name: 'content',
|
|
10
|
+
description: 'The information to remember',
|
|
11
|
+
required: true,
|
|
12
|
+
},
|
|
13
|
+
],
|
|
14
|
+
handler: async (args) => {
|
|
15
|
+
const content = args['content'] ?? '';
|
|
16
|
+
if (!content)
|
|
17
|
+
return 'Nothing to remember.';
|
|
18
|
+
const result = await client.addMemory(config.characterId, content);
|
|
19
|
+
if (result.ok) {
|
|
20
|
+
logger.info(`hippodid: captured memory: ${content.slice(0, 80)}...`);
|
|
21
|
+
return 'Remembered.';
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
logger.warn(`hippodid: capture failed: ${result.error.message}`);
|
|
25
|
+
return `Failed to remember: ${result.error.message}`;
|
|
26
|
+
}
|
|
27
|
+
},
|
|
25
28
|
});
|
|
29
|
+
logger.info('hippodid: auto-capture tool registered as hippodid:remember');
|
|
26
30
|
};
|
|
27
31
|
}
|
|
28
|
-
function extractExchange(args) {
|
|
29
|
-
if (args.length > 0 && typeof args[0] === 'object' && args[0] !== null) {
|
|
30
|
-
const event = args[0];
|
|
31
|
-
const userMsg = typeof event['userMessage'] === 'string' ? event['userMessage'] : '';
|
|
32
|
-
const agentResp = typeof event['agentResponse'] === 'string' ? event['agentResponse'] : '';
|
|
33
|
-
if (userMsg || agentResp) {
|
|
34
|
-
return `User: ${userMsg}\n\nAgent: ${agentResp}`;
|
|
35
|
-
}
|
|
36
|
-
if (typeof event['content'] === 'string')
|
|
37
|
-
return event['content'];
|
|
38
|
-
if (typeof event['text'] === 'string')
|
|
39
|
-
return event['text'];
|
|
40
|
-
}
|
|
41
|
-
if (typeof args[0] === 'string')
|
|
42
|
-
return args[0];
|
|
43
|
-
return null;
|
|
44
|
-
}
|
|
45
32
|
//# sourceMappingURL=auto-capture.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-capture.js","sourceRoot":"","sources":["../../src/hooks/auto-capture.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,qBAAqB,CACnC,MAAsB,EACtB,MAAoB,EACpB,MAA4D;IAE5D,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"auto-capture.js","sourceRoot":"","sources":["../../src/hooks/auto-capture.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,qBAAqB,CACnC,MAAsB,EACtB,MAAoB,EACpB,MAA4D;IAE5D,OAAO,CAAC,GAAQ,EAAE,EAAE;QAClB,mEAAmE;QACnE,6EAA6E;QAC7E,GAAG,CAAC,YAAY,CAAC,mBAAmB,EAAE;YACpC,WAAW,EAAE,4JAA4J;YACzK,IAAI,EAAE;gBACJ;oBACE,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,6BAA6B;oBAC1C,QAAQ,EAAE,IAAI;iBACf;aACF;YACD,OAAO,EAAE,KAAK,EAAE,IAA4B,EAAE,EAAE;gBAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;gBACtC,IAAI,CAAC,OAAO;oBAAE,OAAO,sBAAsB,CAAC;gBAE5C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;gBACnE,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;oBACd,MAAM,CAAC,IAAI,CAAC,8BAA8B,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;oBACrE,OAAO,aAAa,CAAC;gBACvB,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,IAAI,CAAC,6BAA6B,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;oBACjE,OAAO,uBAAuB,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;gBACvD,CAAC;YACH,CAAC;SACF,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;IAC7E,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { HippoDidClient } from '../hippodid-client.js';
|
|
2
|
-
import type { PluginConfig
|
|
2
|
+
import type { PluginConfig } from '../types.js';
|
|
3
3
|
export declare function createAutoRecallHook(client: HippoDidClient, config: PluginConfig, logger: {
|
|
4
4
|
info(msg: string): void;
|
|
5
5
|
warn(msg: string): void;
|
|
6
|
-
}): (api:
|
|
6
|
+
}): (api: any) => void;
|
|
7
7
|
//# sourceMappingURL=auto-recall.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-recall.d.ts","sourceRoot":"","sources":["../../src/hooks/auto-recall.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"auto-recall.d.ts","sourceRoot":"","sources":["../../src/hooks/auto-recall.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE;IAAE,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAC3D,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CA4BpB"}
|
|
@@ -1,46 +1,31 @@
|
|
|
1
1
|
export function createAutoRecallHook(client, config, logger) {
|
|
2
2
|
return (api) => {
|
|
3
|
-
api.on(
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
3
|
+
// OpenClaw 2026 does not support api.on() for pre-response hooks.
|
|
4
|
+
// Register a recall tool that agents invoke when they need memory context.
|
|
5
|
+
api.registerTool('hippodid:recall', {
|
|
6
|
+
description: 'Search HippoDid character memory and return relevant context. Call this at the start of a task to recall relevant memories.',
|
|
7
|
+
args: [
|
|
8
|
+
{
|
|
9
|
+
name: 'query',
|
|
10
|
+
description: 'What to search for in memory',
|
|
11
|
+
required: true,
|
|
12
|
+
},
|
|
13
|
+
],
|
|
14
|
+
handler: async (args) => {
|
|
15
|
+
const query = args['query'] ?? '';
|
|
16
|
+
const result = await client.searchMemories(config.characterId, query);
|
|
17
|
+
if (result.ok) {
|
|
18
|
+
const memories = result.value;
|
|
19
|
+
logger.info(`hippodid: recalled ${memories.length} memories for query: ${query}`);
|
|
20
|
+
return memories.map((m) => m.content).join('\n\n');
|
|
12
21
|
}
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
return;
|
|
22
|
+
else {
|
|
23
|
+
logger.warn(`hippodid: recall failed: ${result.error.message}`);
|
|
24
|
+
return 'No memories found.';
|
|
17
25
|
}
|
|
18
|
-
|
|
19
|
-
api.context.prepend(contextBlock);
|
|
20
|
-
logger.info(`hippodid: recalled ${memories.length} memories for context`);
|
|
21
|
-
}
|
|
22
|
-
catch (e) {
|
|
23
|
-
logger.warn(`hippodid: recall hook error: ${e instanceof Error ? e.message : 'unknown'}`);
|
|
24
|
-
}
|
|
26
|
+
},
|
|
25
27
|
});
|
|
28
|
+
logger.info('hippodid: auto-recall tool registered as hippodid:recall');
|
|
26
29
|
};
|
|
27
30
|
}
|
|
28
|
-
function extractUserMessage(args) {
|
|
29
|
-
if (args.length > 0 && typeof args[0] === 'object' && args[0] !== null) {
|
|
30
|
-
const event = args[0];
|
|
31
|
-
if (typeof event['message'] === 'string')
|
|
32
|
-
return event['message'];
|
|
33
|
-
if (typeof event['content'] === 'string')
|
|
34
|
-
return event['content'];
|
|
35
|
-
if (typeof event['text'] === 'string')
|
|
36
|
-
return event['text'];
|
|
37
|
-
}
|
|
38
|
-
if (typeof args[0] === 'string')
|
|
39
|
-
return args[0];
|
|
40
|
-
return null;
|
|
41
|
-
}
|
|
42
|
-
function formatMemoriesBlock(memories) {
|
|
43
|
-
const lines = memories.map((m) => `- [Category: ${m.category}] ${m.content}`);
|
|
44
|
-
return `<hippodid-memories>\n${lines.join('\n')}\n</hippodid-memories>`;
|
|
45
|
-
}
|
|
46
31
|
//# sourceMappingURL=auto-recall.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-recall.js","sourceRoot":"","sources":["../../src/hooks/auto-recall.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,oBAAoB,CAClC,MAAsB,EACtB,MAAoB,EACpB,MAA4D;IAE5D,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"auto-recall.js","sourceRoot":"","sources":["../../src/hooks/auto-recall.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,oBAAoB,CAClC,MAAsB,EACtB,MAAoB,EACpB,MAA4D;IAE5D,OAAO,CAAC,GAAQ,EAAE,EAAE;QAClB,kEAAkE;QAClE,2EAA2E;QAC3E,GAAG,CAAC,YAAY,CAAC,iBAAiB,EAAE;YAClC,WAAW,EAAE,6HAA6H;YAC1I,IAAI,EAAE;gBACJ;oBACE,IAAI,EAAE,OAAO;oBACb,WAAW,EAAE,8BAA8B;oBAC3C,QAAQ,EAAE,IAAI;iBACf;aACF;YACD,OAAO,EAAE,KAAK,EAAE,IAA4B,EAAE,EAAE;gBAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;gBAClC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;gBACtE,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;oBACd,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC;oBAC9B,MAAM,CAAC,IAAI,CAAC,sBAAsB,QAAQ,CAAC,MAAM,wBAAwB,KAAK,EAAE,CAAC,CAAC;oBAClF,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACrD,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,IAAI,CAAC,4BAA4B,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;oBAChE,OAAO,oBAAoB,CAAC;gBAC9B,CAAC;YACH,CAAC;SACF,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;IAC1E,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import type { FileSync } from '../file-sync.js';
|
|
2
|
-
import type { OpenClawPluginAPI } from '../types.js';
|
|
3
2
|
export declare function createMemoryFlushHook(fileSync: FileSync, logger: {
|
|
4
3
|
info(msg: string): void;
|
|
5
4
|
warn(msg: string): void;
|
|
6
|
-
}): (api:
|
|
5
|
+
}): (api: any) => void;
|
|
7
6
|
//# sourceMappingURL=memory-flush.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-flush.d.ts","sourceRoot":"","sources":["../../src/hooks/memory-flush.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"memory-flush.d.ts","sourceRoot":"","sources":["../../src/hooks/memory-flush.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEhD,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE;IAAE,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAC3D,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAQpB"}
|
|
@@ -1,14 +1,10 @@
|
|
|
1
1
|
export function createMemoryFlushHook(fileSync, logger) {
|
|
2
|
-
return (
|
|
3
|
-
api.on(
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
catch (e) {
|
|
9
|
-
logger.warn(`hippodid: pre-compaction flush failed: ${e instanceof Error ? e.message : 'unknown'}`);
|
|
10
|
-
}
|
|
11
|
-
});
|
|
2
|
+
return (_api) => {
|
|
3
|
+
// OpenClaw 2026 does not support api.on() for event hooks.
|
|
4
|
+
// Pre-compaction flush is available via the hippodid:sync tool,
|
|
5
|
+
// which agents can call explicitly before a compaction.
|
|
6
|
+
// Background sync is handled by fileSync.start() interval.
|
|
7
|
+
logger.info('hippodid: memory flush handler ready (use hippodid:sync tool to trigger)');
|
|
12
8
|
};
|
|
13
9
|
}
|
|
14
10
|
//# sourceMappingURL=memory-flush.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-flush.js","sourceRoot":"","sources":["../../src/hooks/memory-flush.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"memory-flush.js","sourceRoot":"","sources":["../../src/hooks/memory-flush.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,qBAAqB,CACnC,QAAkB,EAClB,MAA4D;IAE5D,OAAO,CAAC,IAAS,EAAE,EAAE;QACnB,2DAA2D;QAC3D,gEAAgE;QAChE,wDAAwD;QACxD,2DAA2D;QAC3D,MAAM,CAAC,IAAI,CAAC,0EAA0E,CAAC,CAAC;IAC1F,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import type { FileSync } from '../file-sync.js';
|
|
2
2
|
import type { TierManager } from '../tier-manager.js';
|
|
3
|
-
|
|
4
|
-
export declare function createSessionHooks(fileSync: FileSync, tierManager: TierManager, autoRecallEnabled: boolean, logger: {
|
|
3
|
+
export declare function createSessionHooks(fileSync: FileSync, tierManager: TierManager, autoRecall: boolean, logger: {
|
|
5
4
|
info(msg: string): void;
|
|
6
5
|
warn(msg: string): void;
|
|
7
|
-
}): (api:
|
|
6
|
+
}): (api: any) => void;
|
|
8
7
|
//# sourceMappingURL=session-lifecycle.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-lifecycle.d.ts","sourceRoot":"","sources":["../../src/hooks/session-lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"session-lifecycle.d.ts","sourceRoot":"","sources":["../../src/hooks/session-lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,WAAW,EACxB,UAAU,EAAE,OAAO,EACnB,MAAM,EAAE;IAAE,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAC3D,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAOpB"}
|
|
@@ -1,29 +1,9 @@
|
|
|
1
|
-
export function createSessionHooks(fileSync, tierManager,
|
|
2
|
-
return (
|
|
3
|
-
api.on(
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
const count = await fileSync.hydrateFromCloud();
|
|
8
|
-
logger.info(`hippodid: session started, hydrated ${count} files from cloud`);
|
|
9
|
-
}
|
|
10
|
-
else {
|
|
11
|
-
logger.info('hippodid: session started, hydration skipped (autoRecall active)');
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
catch (e) {
|
|
15
|
-
logger.warn(`hippodid: session start error: ${e instanceof Error ? e.message : 'unknown'}`);
|
|
16
|
-
}
|
|
17
|
-
});
|
|
18
|
-
api.on('session:end', async () => {
|
|
19
|
-
try {
|
|
20
|
-
const { synced, changed } = await fileSync.flushNow();
|
|
21
|
-
logger.info(`hippodid: session ended, final sync — ${synced} files (${changed} changed)`);
|
|
22
|
-
}
|
|
23
|
-
catch (e) {
|
|
24
|
-
logger.warn(`hippodid: session end flush failed: ${e instanceof Error ? e.message : 'unknown'}`);
|
|
25
|
-
}
|
|
26
|
-
});
|
|
1
|
+
export function createSessionHooks(fileSync, tierManager, autoRecall, logger) {
|
|
2
|
+
return (_api) => {
|
|
3
|
+
// OpenClaw 2026 does not support api.on() for session lifecycle events.
|
|
4
|
+
// Session start hydration happens automatically via fileSync.start()
|
|
5
|
+
// which pulls cloud state on initialization.
|
|
6
|
+
logger.info('hippodid: session lifecycle handler ready');
|
|
27
7
|
};
|
|
28
8
|
}
|
|
29
9
|
//# sourceMappingURL=session-lifecycle.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-lifecycle.js","sourceRoot":"","sources":["../../src/hooks/session-lifecycle.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"session-lifecycle.js","sourceRoot":"","sources":["../../src/hooks/session-lifecycle.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,kBAAkB,CAChC,QAAkB,EAClB,WAAwB,EACxB,UAAmB,EACnB,MAA4D;IAE5D,OAAO,CAAC,IAAS,EAAE,EAAE;QACnB,wEAAwE;QACxE,qEAAqE;QACrE,6CAA6C;QAC7C,MAAM,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;IAC3D,CAAC,CAAC;AACJ,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -13,7 +13,7 @@ export default {
|
|
|
13
13
|
id: 'hippodid',
|
|
14
14
|
register(api) {
|
|
15
15
|
try {
|
|
16
|
-
const config = resolveConfig(api.
|
|
16
|
+
const config = resolveConfig(api.pluginConfig ?? {});
|
|
17
17
|
const logger = api.logger ?? {
|
|
18
18
|
info: (msg) => console.log(msg),
|
|
19
19
|
warn: (msg) => console.warn(msg),
|
|
@@ -70,9 +70,20 @@ export default {
|
|
|
70
70
|
},
|
|
71
71
|
};
|
|
72
72
|
function resolveConfig(raw) {
|
|
73
|
+
if (!raw || typeof raw !== 'object') {
|
|
74
|
+
return {
|
|
75
|
+
apiKey: '',
|
|
76
|
+
characterId: '',
|
|
77
|
+
baseUrl: 'https://api.hippodid.com',
|
|
78
|
+
syncIntervalSeconds: 300,
|
|
79
|
+
autoRecall: false,
|
|
80
|
+
autoCapture: false,
|
|
81
|
+
additionalPaths: [],
|
|
82
|
+
};
|
|
83
|
+
}
|
|
73
84
|
return {
|
|
74
|
-
apiKey: raw.apiKey,
|
|
75
|
-
characterId: raw.characterId,
|
|
85
|
+
apiKey: raw.apiKey ?? '',
|
|
86
|
+
characterId: raw.characterId ?? '',
|
|
76
87
|
baseUrl: raw.baseUrl ?? 'https://api.hippodid.com',
|
|
77
88
|
syncIntervalSeconds: raw.syncIntervalSeconds ?? 300,
|
|
78
89
|
autoRecall: raw.autoRecall ?? false,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,YAAY,EAAuB,MAAM,sBAAsB,CAAC;AACzE,OAAO,EAAE,cAAc,EAAiB,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAoB,MAAM,mBAAmB,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,MAAM,OAAO,GAAG,OAAO,CAAC;AAExB,eAAe;IACb,EAAE,EAAE,UAAU;IAEd,QAAQ,CAAC,GAAQ;QACf,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -93,29 +93,5 @@ export interface FileTrackingEntry {
|
|
|
93
93
|
hash: string;
|
|
94
94
|
lastSyncedAt: Date;
|
|
95
95
|
}
|
|
96
|
-
export
|
|
97
|
-
config: PluginConfig;
|
|
98
|
-
logger: {
|
|
99
|
-
info(message: string): void;
|
|
100
|
-
warn(message: string): void;
|
|
101
|
-
error(message: string): void;
|
|
102
|
-
};
|
|
103
|
-
on(event: string, handler: (...args: any[]) => void | Promise<void>): void;
|
|
104
|
-
context: {
|
|
105
|
-
prepend(content: string): void;
|
|
106
|
-
};
|
|
107
|
-
commands: {
|
|
108
|
-
register(name: string, options: CommandOptions): void;
|
|
109
|
-
};
|
|
110
|
-
}
|
|
111
|
-
export interface CommandOptions {
|
|
112
|
-
description: string;
|
|
113
|
-
args?: CommandArg[];
|
|
114
|
-
handler: (args: Record<string, string>) => void | Promise<void>;
|
|
115
|
-
}
|
|
116
|
-
export interface CommandArg {
|
|
117
|
-
name: string;
|
|
118
|
-
description: string;
|
|
119
|
-
required?: boolean;
|
|
120
|
-
}
|
|
96
|
+
export type OpenClawPluginAPI = any;
|
|
121
97
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,58 +1,37 @@
|
|
|
1
1
|
import type { HippoDidClient } from '../hippodid-client.js';
|
|
2
|
-
import type { PluginConfig
|
|
2
|
+
import type { PluginConfig } from '../types.js';
|
|
3
3
|
|
|
4
4
|
export function createAutoCaptureHook(
|
|
5
5
|
client: HippoDidClient,
|
|
6
6
|
config: PluginConfig,
|
|
7
7
|
logger: { info(msg: string): void; warn(msg: string): void },
|
|
8
|
-
): (api:
|
|
9
|
-
return (api:
|
|
10
|
-
api.on(
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
8
|
+
): (api: any) => void {
|
|
9
|
+
return (api: any) => {
|
|
10
|
+
// OpenClaw 2026 does not support api.on() for post-response hooks.
|
|
11
|
+
// Register a capture tool that agents invoke to store important information.
|
|
12
|
+
api.registerTool('hippodid:remember', {
|
|
13
|
+
description: 'Save important information to HippoDid character memory. Call this to store facts, decisions, preferences, or context that should persist across sessions.',
|
|
14
|
+
args: [
|
|
15
|
+
{
|
|
16
|
+
name: 'content',
|
|
17
|
+
description: 'The information to remember',
|
|
18
|
+
required: true,
|
|
19
|
+
},
|
|
20
|
+
],
|
|
21
|
+
handler: async (args: Record<string, string>) => {
|
|
22
|
+
const content = args['content'] ?? '';
|
|
23
|
+
if (!content) return 'Nothing to remember.';
|
|
14
24
|
|
|
15
|
-
client
|
|
16
|
-
|
|
17
|
-
.
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
}
|
|
25
|
-
})
|
|
26
|
-
.catch((e) => {
|
|
27
|
-
logger.warn(
|
|
28
|
-
`hippodid: capture error: ${e instanceof Error ? e.message : 'unknown'}`,
|
|
29
|
-
);
|
|
30
|
-
});
|
|
31
|
-
} catch (e) {
|
|
32
|
-
logger.warn(
|
|
33
|
-
`hippodid: capture hook error: ${e instanceof Error ? e.message : 'unknown'}`,
|
|
34
|
-
);
|
|
35
|
-
}
|
|
25
|
+
const result = await client.addMemory(config.characterId, content);
|
|
26
|
+
if (result.ok) {
|
|
27
|
+
logger.info(`hippodid: captured memory: ${content.slice(0, 80)}...`);
|
|
28
|
+
return 'Remembered.';
|
|
29
|
+
} else {
|
|
30
|
+
logger.warn(`hippodid: capture failed: ${result.error.message}`);
|
|
31
|
+
return `Failed to remember: ${result.error.message}`;
|
|
32
|
+
}
|
|
33
|
+
},
|
|
36
34
|
});
|
|
35
|
+
logger.info('hippodid: auto-capture tool registered as hippodid:remember');
|
|
37
36
|
};
|
|
38
37
|
}
|
|
39
|
-
|
|
40
|
-
function extractExchange(args: unknown[]): string | null {
|
|
41
|
-
if (args.length > 0 && typeof args[0] === 'object' && args[0] !== null) {
|
|
42
|
-
const event = args[0] as Record<string, unknown>;
|
|
43
|
-
|
|
44
|
-
const userMsg =
|
|
45
|
-
typeof event['userMessage'] === 'string' ? event['userMessage'] : '';
|
|
46
|
-
const agentResp =
|
|
47
|
-
typeof event['agentResponse'] === 'string' ? event['agentResponse'] : '';
|
|
48
|
-
|
|
49
|
-
if (userMsg || agentResp) {
|
|
50
|
-
return `User: ${userMsg}\n\nAgent: ${agentResp}`;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
if (typeof event['content'] === 'string') return event['content'];
|
|
54
|
-
if (typeof event['text'] === 'string') return event['text'];
|
|
55
|
-
}
|
|
56
|
-
if (typeof args[0] === 'string') return args[0];
|
|
57
|
-
return null;
|
|
58
|
-
}
|
package/src/hooks/auto-recall.ts
CHANGED
|
@@ -1,67 +1,36 @@
|
|
|
1
1
|
import type { HippoDidClient } from '../hippodid-client.js';
|
|
2
|
-
import type { PluginConfig
|
|
2
|
+
import type { PluginConfig } from '../types.js';
|
|
3
3
|
|
|
4
4
|
export function createAutoRecallHook(
|
|
5
5
|
client: HippoDidClient,
|
|
6
6
|
config: PluginConfig,
|
|
7
7
|
logger: { info(msg: string): void; warn(msg: string): void },
|
|
8
|
-
): (api:
|
|
9
|
-
return (api:
|
|
10
|
-
api.on(
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
return;
|
|
8
|
+
): (api: any) => void {
|
|
9
|
+
return (api: any) => {
|
|
10
|
+
// OpenClaw 2026 does not support api.on() for pre-response hooks.
|
|
11
|
+
// Register a recall tool that agents invoke when they need memory context.
|
|
12
|
+
api.registerTool('hippodid:recall', {
|
|
13
|
+
description: 'Search HippoDid character memory and return relevant context. Call this at the start of a task to recall relevant memories.',
|
|
14
|
+
args: [
|
|
15
|
+
{
|
|
16
|
+
name: 'query',
|
|
17
|
+
description: 'What to search for in memory',
|
|
18
|
+
required: true,
|
|
19
|
+
},
|
|
20
|
+
],
|
|
21
|
+
handler: async (args: Record<string, string>) => {
|
|
22
|
+
const query = args['query'] ?? '';
|
|
23
|
+
const result = await client.searchMemories(config.characterId, query);
|
|
24
|
+
if (result.ok) {
|
|
25
|
+
const memories = result.value;
|
|
26
|
+
logger.info(`hippodid: recalled ${memories.length} memories for query: ${query}`);
|
|
27
|
+
return memories.map((m) => m.content).join('\n\n');
|
|
28
|
+
} else {
|
|
29
|
+
logger.warn(`hippodid: recall failed: ${result.error.message}`);
|
|
30
|
+
return 'No memories found.';
|
|
32
31
|
}
|
|
33
|
-
|
|
34
|
-
const contextBlock = formatMemoriesBlock(memories);
|
|
35
|
-
api.context.prepend(contextBlock);
|
|
36
|
-
logger.info(`hippodid: recalled ${memories.length} memories for context`);
|
|
37
|
-
} catch (e) {
|
|
38
|
-
logger.warn(
|
|
39
|
-
`hippodid: recall hook error: ${e instanceof Error ? e.message : 'unknown'}`,
|
|
40
|
-
);
|
|
41
|
-
}
|
|
32
|
+
},
|
|
42
33
|
});
|
|
34
|
+
logger.info('hippodid: auto-recall tool registered as hippodid:recall');
|
|
43
35
|
};
|
|
44
36
|
}
|
|
45
|
-
|
|
46
|
-
function extractUserMessage(args: unknown[]): string | null {
|
|
47
|
-
if (args.length > 0 && typeof args[0] === 'object' && args[0] !== null) {
|
|
48
|
-
const event = args[0] as Record<string, unknown>;
|
|
49
|
-
if (typeof event['message'] === 'string') return event['message'];
|
|
50
|
-
if (typeof event['content'] === 'string') return event['content'];
|
|
51
|
-
if (typeof event['text'] === 'string') return event['text'];
|
|
52
|
-
}
|
|
53
|
-
if (typeof args[0] === 'string') return args[0];
|
|
54
|
-
return null;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
interface MemoryEntry {
|
|
58
|
-
content: string;
|
|
59
|
-
category: string;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
function formatMemoriesBlock(memories: MemoryEntry[]): string {
|
|
63
|
-
const lines = memories.map(
|
|
64
|
-
(m) => `- [Category: ${m.category}] ${m.content}`,
|
|
65
|
-
);
|
|
66
|
-
return `<hippodid-memories>\n${lines.join('\n')}\n</hippodid-memories>`;
|
|
67
|
-
}
|
|
@@ -1,22 +1,14 @@
|
|
|
1
1
|
import type { FileSync } from '../file-sync.js';
|
|
2
|
-
import type { OpenClawPluginAPI } from '../types.js';
|
|
3
2
|
|
|
4
3
|
export function createMemoryFlushHook(
|
|
5
4
|
fileSync: FileSync,
|
|
6
5
|
logger: { info(msg: string): void; warn(msg: string): void },
|
|
7
|
-
): (api:
|
|
8
|
-
return (
|
|
9
|
-
api.on(
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
);
|
|
15
|
-
} catch (e) {
|
|
16
|
-
logger.warn(
|
|
17
|
-
`hippodid: pre-compaction flush failed: ${e instanceof Error ? e.message : 'unknown'}`,
|
|
18
|
-
);
|
|
19
|
-
}
|
|
20
|
-
});
|
|
6
|
+
): (api: any) => void {
|
|
7
|
+
return (_api: any) => {
|
|
8
|
+
// OpenClaw 2026 does not support api.on() for event hooks.
|
|
9
|
+
// Pre-compaction flush is available via the hippodid:sync tool,
|
|
10
|
+
// which agents can call explicitly before a compaction.
|
|
11
|
+
// Background sync is handled by fileSync.start() interval.
|
|
12
|
+
logger.info('hippodid: memory flush handler ready (use hippodid:sync tool to trigger)');
|
|
21
13
|
};
|
|
22
14
|
}
|
|
@@ -1,42 +1,16 @@
|
|
|
1
1
|
import type { FileSync } from '../file-sync.js';
|
|
2
2
|
import type { TierManager } from '../tier-manager.js';
|
|
3
|
-
import type { OpenClawPluginAPI } from '../types.js';
|
|
4
3
|
|
|
5
4
|
export function createSessionHooks(
|
|
6
5
|
fileSync: FileSync,
|
|
7
6
|
tierManager: TierManager,
|
|
8
|
-
|
|
7
|
+
autoRecall: boolean,
|
|
9
8
|
logger: { info(msg: string): void; warn(msg: string): void },
|
|
10
|
-
): (api:
|
|
11
|
-
return (
|
|
12
|
-
api.on(
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
if (tierManager.shouldHydrateOnStart(autoRecallEnabled)) {
|
|
17
|
-
const count = await fileSync.hydrateFromCloud();
|
|
18
|
-
logger.info(`hippodid: session started, hydrated ${count} files from cloud`);
|
|
19
|
-
} else {
|
|
20
|
-
logger.info('hippodid: session started, hydration skipped (autoRecall active)');
|
|
21
|
-
}
|
|
22
|
-
} catch (e) {
|
|
23
|
-
logger.warn(
|
|
24
|
-
`hippodid: session start error: ${e instanceof Error ? e.message : 'unknown'}`,
|
|
25
|
-
);
|
|
26
|
-
}
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
api.on('session:end', async () => {
|
|
30
|
-
try {
|
|
31
|
-
const { synced, changed } = await fileSync.flushNow();
|
|
32
|
-
logger.info(
|
|
33
|
-
`hippodid: session ended, final sync — ${synced} files (${changed} changed)`,
|
|
34
|
-
);
|
|
35
|
-
} catch (e) {
|
|
36
|
-
logger.warn(
|
|
37
|
-
`hippodid: session end flush failed: ${e instanceof Error ? e.message : 'unknown'}`,
|
|
38
|
-
);
|
|
39
|
-
}
|
|
40
|
-
});
|
|
9
|
+
): (api: any) => void {
|
|
10
|
+
return (_api: any) => {
|
|
11
|
+
// OpenClaw 2026 does not support api.on() for session lifecycle events.
|
|
12
|
+
// Session start hydration happens automatically via fileSync.start()
|
|
13
|
+
// which pulls cloud state on initialization.
|
|
14
|
+
logger.info('hippodid: session lifecycle handler ready');
|
|
41
15
|
};
|
|
42
16
|
}
|
package/src/index.ts
CHANGED
|
@@ -17,7 +17,7 @@ export default {
|
|
|
17
17
|
|
|
18
18
|
register(api: any): void {
|
|
19
19
|
try {
|
|
20
|
-
const config = resolveConfig(api.
|
|
20
|
+
const config = resolveConfig(api.pluginConfig ?? {});
|
|
21
21
|
const logger = api.logger ?? {
|
|
22
22
|
info: (msg: string) => console.log(msg),
|
|
23
23
|
warn: (msg: string) => console.warn(msg),
|
|
@@ -122,9 +122,20 @@ export default {
|
|
|
122
122
|
};
|
|
123
123
|
|
|
124
124
|
function resolveConfig(raw: any): PluginConfig {
|
|
125
|
+
if (!raw || typeof raw !== 'object') {
|
|
126
|
+
return {
|
|
127
|
+
apiKey: '',
|
|
128
|
+
characterId: '',
|
|
129
|
+
baseUrl: 'https://api.hippodid.com',
|
|
130
|
+
syncIntervalSeconds: 300,
|
|
131
|
+
autoRecall: false,
|
|
132
|
+
autoCapture: false,
|
|
133
|
+
additionalPaths: [],
|
|
134
|
+
};
|
|
135
|
+
}
|
|
125
136
|
return {
|
|
126
|
-
apiKey: raw.apiKey,
|
|
127
|
-
characterId: raw.characterId,
|
|
137
|
+
apiKey: raw.apiKey ?? '',
|
|
138
|
+
characterId: raw.characterId ?? '',
|
|
128
139
|
baseUrl: raw.baseUrl ?? 'https://api.hippodid.com',
|
|
129
140
|
syncIntervalSeconds: raw.syncIntervalSeconds ?? 300,
|
|
130
141
|
autoRecall: raw.autoRecall ?? false,
|
package/src/types.ts
CHANGED
|
@@ -127,32 +127,7 @@ export interface FileTrackingEntry {
|
|
|
127
127
|
lastSyncedAt: Date;
|
|
128
128
|
}
|
|
129
129
|
|
|
130
|
-
//
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
logger: {
|
|
135
|
-
info(message: string): void;
|
|
136
|
-
warn(message: string): void;
|
|
137
|
-
error(message: string): void;
|
|
138
|
-
};
|
|
139
|
-
on(event: string, handler: (...args: any[]) => void | Promise<void>): void;
|
|
140
|
-
context: {
|
|
141
|
-
prepend(content: string): void;
|
|
142
|
-
};
|
|
143
|
-
commands: {
|
|
144
|
-
register(name: string, options: CommandOptions): void;
|
|
145
|
-
};
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
export interface CommandOptions {
|
|
149
|
-
description: string;
|
|
150
|
-
args?: CommandArg[];
|
|
151
|
-
handler: (args: Record<string, string>) => void | Promise<void>;
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
export interface CommandArg {
|
|
155
|
-
name: string;
|
|
156
|
-
description: string;
|
|
157
|
-
required?: boolean;
|
|
158
|
-
}
|
|
130
|
+
// OpenClaw Plugin API — typed as `any` at boundaries.
|
|
131
|
+
// The real type comes from openclaw/plugin-sdk/core at runtime.
|
|
132
|
+
// Methods used: api.registerTool(), api.logger, api.config
|
|
133
|
+
export type OpenClawPluginAPI = any;
|