@hippodid/openclaw-plugin 1.0.6 → 1.0.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/hooks/auto-capture.d.ts +2 -2
- package/dist/hooks/auto-capture.d.ts.map +1 -1
- package/dist/hooks/auto-capture.js +15 -35
- 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 +14 -35
- 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/openclaw.plugin.json +1 -0
- package/package.json +2 -1
- package/skills/hippodid/SKILL.md +31 -0
- package/src/hooks/auto-capture.ts +21 -23
- package/src/hooks/auto-recall.ts +21 -23
- package/src/index.ts +1 -1
|
@@ -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,CA2BpB"}
|
|
@@ -1,45 +1,25 @@
|
|
|
1
1
|
export function createAutoCaptureHook(client, config, logger) {
|
|
2
2
|
return (api) => {
|
|
3
|
-
api.
|
|
3
|
+
api.registerHook('agent_end', async (ctx) => {
|
|
4
4
|
try {
|
|
5
|
-
const
|
|
6
|
-
|
|
5
|
+
const user = ctx?.userMessage ?? ctx?.prompt ?? ctx?.input ?? '';
|
|
6
|
+
const assistant = ctx?.assistantMessage ?? ctx?.response ?? ctx?.output ?? '';
|
|
7
|
+
if (!user && !assistant)
|
|
7
8
|
return;
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
}
|
|
17
|
-
})
|
|
18
|
-
.catch((e) => {
|
|
19
|
-
logger.warn(`hippodid: capture error: ${e instanceof Error ? e.message : 'unknown'}`);
|
|
20
|
-
});
|
|
9
|
+
const content = [
|
|
10
|
+
user ? `User: ${user}` : '',
|
|
11
|
+
assistant ? `Assistant: ${assistant}` : '',
|
|
12
|
+
].filter(Boolean).join('\n');
|
|
13
|
+
const result = await client.addMemory(config.characterId, content);
|
|
14
|
+
if (result.ok) {
|
|
15
|
+
logger.info('hippodid: captured conversation turn');
|
|
16
|
+
}
|
|
21
17
|
}
|
|
22
18
|
catch (e) {
|
|
23
|
-
logger.warn(`hippodid: capture
|
|
19
|
+
logger.warn(`hippodid: capture error: ${e instanceof Error ? e.message : String(e)}`);
|
|
24
20
|
}
|
|
25
|
-
});
|
|
21
|
+
}, { name: 'hippodid.agent-end', description: 'Capture conversation to HippoDid after agent responds' });
|
|
22
|
+
logger.info('hippodid: auto-capture hook registered (agent_end)');
|
|
26
23
|
};
|
|
27
24
|
}
|
|
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
25
|
//# 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,GAAG,CAAC,YAAY,CACd,WAAW,EACX,KAAK,EAAE,GAAQ,EAAE,EAAE;YACjB,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,GAAG,EAAE,WAAW,IAAI,GAAG,EAAE,MAAM,IAAI,GAAG,EAAE,KAAK,IAAI,EAAE,CAAC;gBACjE,MAAM,SAAS,GAAG,GAAG,EAAE,gBAAgB,IAAI,GAAG,EAAE,QAAQ,IAAI,GAAG,EAAE,MAAM,IAAI,EAAE,CAAC;gBAC9E,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS;oBAAE,OAAO;gBAEhC,MAAM,OAAO,GAAG;oBACd,IAAI,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE;oBAC3B,SAAS,CAAC,CAAC,CAAC,cAAc,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE;iBAC3C,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAE7B,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,sCAAsC,CAAC,CAAC;gBACtD,CAAC;YACH,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACxF,CAAC;QACH,CAAC,EACD,EAAE,IAAI,EAAE,oBAAoB,EAAE,WAAW,EAAE,uDAAuD,EAAE,CACrG,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;IACpE,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,CA0BpB"}
|
|
@@ -1,46 +1,25 @@
|
|
|
1
1
|
export function createAutoRecallHook(client, config, logger) {
|
|
2
2
|
return (api) => {
|
|
3
|
-
api.
|
|
3
|
+
api.registerHook('before_agent_start', async (ctx) => {
|
|
4
4
|
try {
|
|
5
|
-
const
|
|
6
|
-
if (!
|
|
7
|
-
return;
|
|
8
|
-
const result = await client.searchMemories(config.characterId, userMessage, 5);
|
|
9
|
-
if (!result.ok) {
|
|
10
|
-
logger.warn(`hippodid: recall search failed: ${result.error.message}`);
|
|
11
|
-
return;
|
|
12
|
-
}
|
|
13
|
-
const memories = result.value;
|
|
14
|
-
if (memories.length === 0) {
|
|
15
|
-
logger.info('hippodid: no relevant memories found');
|
|
5
|
+
const query = ctx?.prompt ?? ctx?.message ?? ctx?.input ?? '';
|
|
6
|
+
if (!query)
|
|
16
7
|
return;
|
|
8
|
+
const result = await client.searchMemories(config.characterId, query);
|
|
9
|
+
if (result.ok && result.value?.length > 0) {
|
|
10
|
+
const memories = result.value
|
|
11
|
+
.map((m) => m.content ?? m.text ?? m.body ?? '')
|
|
12
|
+
.filter(Boolean)
|
|
13
|
+
.join('\n---\n');
|
|
14
|
+
ctx.prependContext?.(`## HippoDid Memories\n${memories}\n`);
|
|
15
|
+
logger.info(`hippodid: recalled ${result.value.length} memories`);
|
|
17
16
|
}
|
|
18
|
-
const contextBlock = formatMemoriesBlock(memories);
|
|
19
|
-
api.context.prepend(contextBlock);
|
|
20
|
-
logger.info(`hippodid: recalled ${memories.length} memories for context`);
|
|
21
17
|
}
|
|
22
18
|
catch (e) {
|
|
23
|
-
logger.warn(`hippodid: recall
|
|
19
|
+
logger.warn(`hippodid: recall error: ${e instanceof Error ? e.message : String(e)}`);
|
|
24
20
|
}
|
|
25
|
-
});
|
|
21
|
+
}, { name: 'hippodid.before-agent-start', description: 'Inject HippoDid memories before agent responds' });
|
|
22
|
+
logger.info('hippodid: auto-recall hook registered (before_agent_start)');
|
|
26
23
|
};
|
|
27
24
|
}
|
|
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
25
|
//# 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,GAAG,CAAC,YAAY,CACd,oBAAoB,EACpB,KAAK,EAAE,GAAQ,EAAE,EAAE;YACjB,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,GAAG,EAAE,MAAM,IAAI,GAAG,EAAE,OAAO,IAAI,GAAG,EAAE,KAAK,IAAI,EAAE,CAAC;gBAC9D,IAAI,CAAC,KAAK;oBAAE,OAAO;gBAEnB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;gBACtE,IAAI,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC1C,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK;yBAC1B,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;yBACpD,MAAM,CAAC,OAAO,CAAC;yBACf,IAAI,CAAC,SAAS,CAAC,CAAC;oBACnB,GAAG,CAAC,cAAc,EAAE,CAAC,yBAAyB,QAAQ,IAAI,CAAC,CAAC;oBAC5D,MAAM,CAAC,IAAI,CAAC,sBAAsB,MAAM,CAAC,KAAK,CAAC,MAAM,WAAW,CAAC,CAAC;gBACpE,CAAC;YACH,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACvF,CAAC;QACH,CAAC,EACD,EAAE,IAAI,EAAE,6BAA6B,EAAE,WAAW,EAAE,gDAAgD,EAAE,CACvG,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC;IAC5E,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/openclaw.plugin.json
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
"id": "hippodid",
|
|
3
3
|
"name": "HippoDid — Cloud Character Memory",
|
|
4
4
|
"description": "Cloud sync for MEMORY.md with structured character memory. Survives context compaction.",
|
|
5
|
+
"skills": ["./skills"],
|
|
5
6
|
"configSchema": {
|
|
6
7
|
"type": "object",
|
|
7
8
|
"additionalProperties": false,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hippodid/openclaw-plugin",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.8",
|
|
4
4
|
"description": "Cloud sync for MEMORY.md with structured character memory. Survives context compaction.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
"files": [
|
|
21
21
|
"dist",
|
|
22
22
|
"src",
|
|
23
|
+
"skills",
|
|
23
24
|
"openclaw.plugin.json",
|
|
24
25
|
"LICENSE",
|
|
25
26
|
"README.md"
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: hippodid
|
|
3
|
+
description: Use HippoDid to save memories that persist across sessions and survive context compaction. Use this when the user wants to remember something, recall past context, or sync memory files.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# HippoDid — Persistent Cloud Memory
|
|
7
|
+
|
|
8
|
+
HippoDid stores memories in the cloud so they survive context compaction and persist across sessions and devices.
|
|
9
|
+
|
|
10
|
+
## When to use this skill
|
|
11
|
+
|
|
12
|
+
- User says "remember", "save this", "don't forget", "note that" → call hippodid:remember
|
|
13
|
+
- User asks "what do you know about me", "do you remember", "recall" → call hippodid:recall
|
|
14
|
+
- You need context from previous sessions at the start of a task → call hippodid:recall
|
|
15
|
+
- User wants to sync their memory files → call hippodid:sync
|
|
16
|
+
|
|
17
|
+
## Tools
|
|
18
|
+
|
|
19
|
+
### hippodid:remember
|
|
20
|
+
Saves information to persistent HippoDid cloud memory. Always use this instead of writing to local memory files.
|
|
21
|
+
- content: the information to save (string, required)
|
|
22
|
+
|
|
23
|
+
### hippodid:recall
|
|
24
|
+
Searches HippoDid cloud memory for relevant context.
|
|
25
|
+
- query: what to search for (string, required)
|
|
26
|
+
|
|
27
|
+
### hippodid:sync
|
|
28
|
+
Force-syncs all watched files to HippoDid cloud immediately.
|
|
29
|
+
|
|
30
|
+
### hippodid:status
|
|
31
|
+
Shows HippoDid connection status, tier, and watched paths.
|
|
@@ -7,31 +7,29 @@ export function createAutoCaptureHook(
|
|
|
7
7
|
logger: { info(msg: string): void; warn(msg: string): void },
|
|
8
8
|
): (api: any) => void {
|
|
9
9
|
return (api: any) => {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
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.';
|
|
10
|
+
api.registerHook(
|
|
11
|
+
'agent_end',
|
|
12
|
+
async (ctx: any) => {
|
|
13
|
+
try {
|
|
14
|
+
const user = ctx?.userMessage ?? ctx?.prompt ?? ctx?.input ?? '';
|
|
15
|
+
const assistant = ctx?.assistantMessage ?? ctx?.response ?? ctx?.output ?? '';
|
|
16
|
+
if (!user && !assistant) return;
|
|
24
17
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
18
|
+
const content = [
|
|
19
|
+
user ? `User: ${user}` : '',
|
|
20
|
+
assistant ? `Assistant: ${assistant}` : '',
|
|
21
|
+
].filter(Boolean).join('\n');
|
|
22
|
+
|
|
23
|
+
const result = await client.addMemory(config.characterId, content);
|
|
24
|
+
if (result.ok) {
|
|
25
|
+
logger.info('hippodid: captured conversation turn');
|
|
26
|
+
}
|
|
27
|
+
} catch (e) {
|
|
28
|
+
logger.warn(`hippodid: capture error: ${e instanceof Error ? e.message : String(e)}`);
|
|
32
29
|
}
|
|
33
30
|
},
|
|
34
|
-
|
|
35
|
-
|
|
31
|
+
{ name: 'hippodid.agent-end', description: 'Capture conversation to HippoDid after agent responds' },
|
|
32
|
+
);
|
|
33
|
+
logger.info('hippodid: auto-capture hook registered (agent_end)');
|
|
36
34
|
};
|
|
37
35
|
}
|
package/src/hooks/auto-recall.ts
CHANGED
|
@@ -7,30 +7,28 @@ export function createAutoRecallHook(
|
|
|
7
7
|
logger: { info(msg: string): void; warn(msg: string): void },
|
|
8
8
|
): (api: any) => void {
|
|
9
9
|
return (api: any) => {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
} else {
|
|
29
|
-
logger.warn(`hippodid: recall failed: ${result.error.message}`);
|
|
30
|
-
return 'No memories found.';
|
|
10
|
+
api.registerHook(
|
|
11
|
+
'before_agent_start',
|
|
12
|
+
async (ctx: any) => {
|
|
13
|
+
try {
|
|
14
|
+
const query = ctx?.prompt ?? ctx?.message ?? ctx?.input ?? '';
|
|
15
|
+
if (!query) return;
|
|
16
|
+
|
|
17
|
+
const result = await client.searchMemories(config.characterId, query);
|
|
18
|
+
if (result.ok && result.value?.length > 0) {
|
|
19
|
+
const memories = result.value
|
|
20
|
+
.map((m: any) => m.content ?? m.text ?? m.body ?? '')
|
|
21
|
+
.filter(Boolean)
|
|
22
|
+
.join('\n---\n');
|
|
23
|
+
ctx.prependContext?.(`## HippoDid Memories\n${memories}\n`);
|
|
24
|
+
logger.info(`hippodid: recalled ${result.value.length} memories`);
|
|
25
|
+
}
|
|
26
|
+
} catch (e) {
|
|
27
|
+
logger.warn(`hippodid: recall error: ${e instanceof Error ? e.message : String(e)}`);
|
|
31
28
|
}
|
|
32
29
|
},
|
|
33
|
-
|
|
34
|
-
|
|
30
|
+
{ name: 'hippodid.before-agent-start', description: 'Inject HippoDid memories before agent responds' },
|
|
31
|
+
);
|
|
32
|
+
logger.info('hippodid: auto-recall hook registered (before_agent_start)');
|
|
35
33
|
};
|
|
36
34
|
}
|
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),
|