@keyoku/openclaw 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/init.js +15 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +58 -0
- package/dist/cli.js.map +1 -1
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +21 -1
- package/dist/context.js.map +1 -1
- package/dist/heartbeat-setup.d.ts +8 -1
- package/dist/heartbeat-setup.d.ts.map +1 -1
- package/dist/heartbeat-setup.js +58 -15
- package/dist/heartbeat-setup.js.map +1 -1
- package/dist/hooks.d.ts.map +1 -1
- package/dist/hooks.js +76 -50
- package/dist/hooks.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts +21 -0
- package/dist/init.d.ts.map +1 -0
- package/dist/init.js +522 -0
- package/dist/init.js.map +1 -0
- package/dist/migrate-vector-store.d.ts +52 -0
- package/dist/migrate-vector-store.d.ts.map +1 -0
- package/dist/migrate-vector-store.js +158 -0
- package/dist/migrate-vector-store.js.map +1 -0
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +27 -3
- package/dist/service.js.map +1 -1
- package/package.json +13 -4
- package/skills/keyoku-memory/SKILL.md +67 -0
- package/src/capture.ts +0 -116
- package/src/cli.ts +0 -95
- package/src/config.ts +0 -43
- package/src/context.ts +0 -164
- package/src/heartbeat-setup.ts +0 -53
- package/src/hooks.ts +0 -175
- package/src/incremental-capture.ts +0 -88
- package/src/index.ts +0 -68
- package/src/migration.ts +0 -241
- package/src/service.ts +0 -145
- package/src/tools.ts +0 -239
- package/src/types.ts +0 -40
- package/test/capture.test.ts +0 -139
- package/test/context.test.ts +0 -273
- package/test/hooks.test.ts +0 -137
- package/test/tools.test.ts +0 -174
- package/tsconfig.json +0 -8
package/bin/init.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* npx @keyoku/openclaw init
|
|
5
|
+
*
|
|
6
|
+
* One-command setup for the Keyoku OpenClaw plugin.
|
|
7
|
+
* This is a thin shim that imports the compiled init module.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import('../dist/init.js')
|
|
11
|
+
.then((m) => m.init())
|
|
12
|
+
.catch((err) => {
|
|
13
|
+
console.error('Setup failed:', err);
|
|
14
|
+
process.exit(1);
|
|
15
|
+
});
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,SAAS,EAAgB,MAAM,YAAY,CAAC;AAc1D,wBAAgB,WAAW,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAgJxF"}
|
package/dist/cli.js
CHANGED
|
@@ -2,8 +2,10 @@
|
|
|
2
2
|
* CLI subcommand registration for memory management.
|
|
3
3
|
* Registers `memory` command with search, list, stats, clear subcommands.
|
|
4
4
|
*/
|
|
5
|
+
import { join } from 'node:path';
|
|
5
6
|
import { formatMemoryList } from './context.js';
|
|
6
7
|
import { importMemoryFiles } from './migration.js';
|
|
8
|
+
import { migrateVectorStore, migrateAllVectorStores, discoverVectorDbs } from './migrate-vector-store.js';
|
|
7
9
|
export function registerCli(api, client, entityId) {
|
|
8
10
|
api.registerCli(({ program }) => {
|
|
9
11
|
const prog = program;
|
|
@@ -66,6 +68,62 @@ export function registerCli(api, client, entityId) {
|
|
|
66
68
|
});
|
|
67
69
|
console.log(`\nImport complete: ${result.imported} imported, ${result.skipped} skipped, ${result.errors} errors`);
|
|
68
70
|
});
|
|
71
|
+
memory
|
|
72
|
+
.command('migrate')
|
|
73
|
+
.description('Migrate OpenClaw vector store (SQLite) into Keyoku')
|
|
74
|
+
.option('--agent-id <id>', 'Agent ID to scope the migration')
|
|
75
|
+
.option('--sqlite <path>', 'Path to a specific OpenClaw .sqlite file')
|
|
76
|
+
.option('--include-markdown', 'Also import MEMORY.md and memory/*.md files')
|
|
77
|
+
.option('--dry-run', 'Show what would be imported without storing')
|
|
78
|
+
.action(async (opts) => {
|
|
79
|
+
const options = opts;
|
|
80
|
+
const home = process.env.HOME ?? '';
|
|
81
|
+
// Vector store migration
|
|
82
|
+
if (options.sqlite) {
|
|
83
|
+
// Migrate a specific SQLite file
|
|
84
|
+
const result = await migrateVectorStore({
|
|
85
|
+
client,
|
|
86
|
+
entityId,
|
|
87
|
+
sqlitePath: options.sqlite,
|
|
88
|
+
agentId: options.agentId,
|
|
89
|
+
dryRun: options.dryRun,
|
|
90
|
+
logger: console,
|
|
91
|
+
});
|
|
92
|
+
console.log(`\nVector migration: ${result.totalChunks} total, ${result.imported} imported, ${result.skipped} skipped, ${result.errors} errors`);
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
// Auto-discover OpenClaw memory directory
|
|
96
|
+
const memoryDir = join(home, '.openclaw', 'memory');
|
|
97
|
+
const dbs = discoverVectorDbs(memoryDir);
|
|
98
|
+
if (dbs.length === 0) {
|
|
99
|
+
console.log('No OpenClaw vector stores found at ~/.openclaw/memory/*.sqlite');
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
const result = await migrateAllVectorStores({
|
|
103
|
+
client,
|
|
104
|
+
entityId,
|
|
105
|
+
memoryDir,
|
|
106
|
+
agentId: options.agentId,
|
|
107
|
+
dryRun: options.dryRun,
|
|
108
|
+
logger: console,
|
|
109
|
+
});
|
|
110
|
+
console.log(`\nVector migration: ${result.totalChunks} total, ${result.imported} imported, ${result.skipped} skipped, ${result.errors} errors`);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
// Optionally also import markdown files
|
|
114
|
+
if (options.includeMarkdown) {
|
|
115
|
+
const workspaceDir = join(home, '.openclaw');
|
|
116
|
+
const mdResult = await importMemoryFiles({
|
|
117
|
+
client,
|
|
118
|
+
entityId,
|
|
119
|
+
workspaceDir,
|
|
120
|
+
agentId: options.agentId,
|
|
121
|
+
dryRun: options.dryRun,
|
|
122
|
+
logger: console,
|
|
123
|
+
});
|
|
124
|
+
console.log(`Markdown import: ${mdResult.imported} imported, ${mdResult.skipped} skipped, ${mdResult.errors} errors`);
|
|
125
|
+
}
|
|
126
|
+
});
|
|
69
127
|
}, { commands: ['memory'] });
|
|
70
128
|
}
|
|
71
129
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/context.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAElF;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAIrD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,MAAM,CAQnE;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,sBAAsB,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAElF;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAIrD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,MAAM,CAQnE;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,sBAAsB,GAAG,MAAM,CAgJ1E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAM3D"}
|
package/dist/context.js
CHANGED
|
@@ -23,6 +23,19 @@ export function formatMemoryContext(results) {
|
|
|
23
23
|
* Used with the combined /heartbeat/context endpoint.
|
|
24
24
|
*/
|
|
25
25
|
export function formatHeartbeatContext(ctx) {
|
|
26
|
+
// Nudge: engine selected a specific memory to reference naturally
|
|
27
|
+
if (ctx.decision_reason === 'nudge' && ctx.nudge_context) {
|
|
28
|
+
const sections = [];
|
|
29
|
+
sections.push(`## Nudge\nYou haven't heard from the user in a while. Here's something from memory you could casually bring up — only if it feels natural and useful. ONE short sentence max.`);
|
|
30
|
+
sections.push(`- ${escapeMemoryText(ctx.nudge_context)}`);
|
|
31
|
+
if (ctx.relevant_memories?.length > 0) {
|
|
32
|
+
sections.push('## What You Know');
|
|
33
|
+
for (const r of ctx.relevant_memories) {
|
|
34
|
+
sections.push(`- ${escapeMemoryText(r.memory.content)}`);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return `<heartbeat-signals>\n${sections.join('\n\n')}\n</heartbeat-signals>`;
|
|
38
|
+
}
|
|
26
39
|
// If LLM analysis is available, use the analyzed output
|
|
27
40
|
if (ctx.analysis) {
|
|
28
41
|
const a = ctx.analysis;
|
|
@@ -46,6 +59,13 @@ export function formatHeartbeatContext(ctx) {
|
|
|
46
59
|
if (a.user_facing) {
|
|
47
60
|
sections.push(`## Tell the User\n${escapeMemoryText(a.user_facing)}`);
|
|
48
61
|
}
|
|
62
|
+
// Inject relevant memories so the LLM has knowledge context, not just action signals
|
|
63
|
+
if (ctx.relevant_memories?.length > 0) {
|
|
64
|
+
sections.push('## What You Know');
|
|
65
|
+
for (const r of ctx.relevant_memories) {
|
|
66
|
+
sections.push(`- ${escapeMemoryText(r.memory.content)}`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
49
69
|
sections.push(`Urgency: ${a.urgency} | Mode: ${a.autonomy}`);
|
|
50
70
|
return `<heartbeat-signals>\n${sections.join('\n\n')}\n</heartbeat-signals>`;
|
|
51
71
|
}
|
|
@@ -121,7 +141,7 @@ export function formatHeartbeatContext(ctx) {
|
|
|
121
141
|
}
|
|
122
142
|
if (sections.length === 0)
|
|
123
143
|
return '';
|
|
124
|
-
return `<heartbeat-signals>\
|
|
144
|
+
return `<heartbeat-signals>\nReview the signals below. If something genuinely warrants a message (a deadline, a reminder, new info), send ONE short sentence. Do NOT repeat things you have already said. If nothing is new or urgent, reply HEARTBEAT_OK.\n\n${sections.join('\n')}\n</heartbeat-signals>`;
|
|
125
145
|
}
|
|
126
146
|
/**
|
|
127
147
|
* Format a list of memories for display (e.g., CLI or tool output).
|
package/dist/context.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Auto-generates HEARTBEAT.md so that OpenClaw's heartbeat runner
|
|
3
3
|
* actually fires the heartbeat (empty file = skip).
|
|
4
|
+
*
|
|
5
|
+
* Preserves existing user content — appends keyoku instructions as
|
|
6
|
+
* an addendum rather than overwriting.
|
|
4
7
|
*/
|
|
5
8
|
import type { PluginApi } from './types.js';
|
|
6
9
|
/**
|
|
7
|
-
*
|
|
10
|
+
* Ensure HEARTBEAT.md exists with keyoku instructions.
|
|
11
|
+
* - No file → write full template
|
|
12
|
+
* - File with no user content → write full template
|
|
13
|
+
* - File with user content but no keyoku section → append keyoku section
|
|
14
|
+
* - File already has keyoku section → update it in place
|
|
8
15
|
*/
|
|
9
16
|
export declare function ensureHeartbeatMd(api: PluginApi): void;
|
|
10
17
|
//# sourceMappingURL=heartbeat-setup.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"heartbeat-setup.d.ts","sourceRoot":"","sources":["../src/heartbeat-setup.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"heartbeat-setup.d.ts","sourceRoot":"","sources":["../src/heartbeat-setup.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAmD5C;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,SAAS,GAAG,IAAI,CAuCtD"}
|
package/dist/heartbeat-setup.js
CHANGED
|
@@ -1,15 +1,20 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Auto-generates HEARTBEAT.md so that OpenClaw's heartbeat runner
|
|
3
3
|
* actually fires the heartbeat (empty file = skip).
|
|
4
|
+
*
|
|
5
|
+
* Preserves existing user content — appends keyoku instructions as
|
|
6
|
+
* an addendum rather than overwriting.
|
|
4
7
|
*/
|
|
5
8
|
import { existsSync, readFileSync, writeFileSync } from 'node:fs';
|
|
6
9
|
import { join } from 'node:path';
|
|
7
10
|
const HEARTBEAT_FILENAME = 'HEARTBEAT.md';
|
|
8
|
-
const
|
|
11
|
+
const KEYOKU_SECTION_MARKER = '<!-- keyoku-heartbeat-start -->';
|
|
12
|
+
const KEYOKU_SECTION_END = '<!-- keyoku-heartbeat-end -->';
|
|
13
|
+
const KEYOKU_HEARTBEAT_INSTRUCTIONS = `## Keyoku Memory Heartbeat
|
|
9
14
|
|
|
10
15
|
You have been checked in on. Your memory system has reviewed your recent activity and surfaced anything that needs your attention. The signals are injected into your context automatically — look for the <heartbeat-signals> block.
|
|
11
16
|
|
|
12
|
-
|
|
17
|
+
### How to respond
|
|
13
18
|
|
|
14
19
|
IMPORTANT: If the signals contain \`should_act: true\` or a "Tell the User" section with ANY content, you MUST write a message to the user. Do NOT reply HEARTBEAT_OK in that case. Say something — even one sentence is fine.
|
|
15
20
|
|
|
@@ -19,26 +24,64 @@ IMPORTANT: If the signals contain \`should_act: true\` or a "Tell the User" sect
|
|
|
19
24
|
4. If mode is \`suggest\` and urgency is not \`none\` — surface the suggestion naturally.
|
|
20
25
|
5. ONLY reply HEARTBEAT_OK if \`should_act\` is false AND there is truly nothing in the signals worth mentioning.
|
|
21
26
|
|
|
22
|
-
Do not repeat old tasks from prior conversations. Only act on what the signals say right now
|
|
27
|
+
Do not repeat old tasks from prior conversations. Only act on what the signals say right now.`;
|
|
28
|
+
const HEARTBEAT_TEMPLATE = `# Heartbeat Check
|
|
29
|
+
|
|
30
|
+
${KEYOKU_SECTION_MARKER}
|
|
31
|
+
${KEYOKU_HEARTBEAT_INSTRUCTIONS}
|
|
32
|
+
${KEYOKU_SECTION_END}
|
|
23
33
|
`;
|
|
24
34
|
/**
|
|
25
|
-
*
|
|
35
|
+
* Check if the file has meaningful user content beyond headings and whitespace.
|
|
36
|
+
*/
|
|
37
|
+
function hasUserContent(content) {
|
|
38
|
+
// Strip out the keyoku section to check if there's OTHER content
|
|
39
|
+
const withoutKeyoku = content
|
|
40
|
+
.replace(new RegExp(`${escapeRegex(KEYOKU_SECTION_MARKER)}[\\s\\S]*?${escapeRegex(KEYOKU_SECTION_END)}`, 'g'), '')
|
|
41
|
+
.trim();
|
|
42
|
+
return withoutKeyoku
|
|
43
|
+
.split('\n')
|
|
44
|
+
.some((line) => {
|
|
45
|
+
const trimmed = line.trim();
|
|
46
|
+
return trimmed.length > 0 && !trimmed.startsWith('#') && trimmed !== '---';
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
function escapeRegex(s) {
|
|
50
|
+
return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Ensure HEARTBEAT.md exists with keyoku instructions.
|
|
54
|
+
* - No file → write full template
|
|
55
|
+
* - File with no user content → write full template
|
|
56
|
+
* - File with user content but no keyoku section → append keyoku section
|
|
57
|
+
* - File already has keyoku section → update it in place
|
|
26
58
|
*/
|
|
27
59
|
export function ensureHeartbeatMd(api) {
|
|
28
60
|
try {
|
|
29
61
|
const heartbeatPath = join(api.resolvePath('.'), HEARTBEAT_FILENAME);
|
|
30
|
-
if (existsSync(heartbeatPath)) {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
});
|
|
39
|
-
if (
|
|
40
|
-
|
|
62
|
+
if (!existsSync(heartbeatPath)) {
|
|
63
|
+
writeFileSync(heartbeatPath, HEARTBEAT_TEMPLATE, 'utf-8');
|
|
64
|
+
api.logger.info(`keyoku: created ${HEARTBEAT_FILENAME} for heartbeat support`);
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
const content = readFileSync(heartbeatPath, 'utf-8');
|
|
68
|
+
// Already has keyoku section — update it in place
|
|
69
|
+
if (content.includes(KEYOKU_SECTION_MARKER)) {
|
|
70
|
+
const updated = content.replace(new RegExp(`${escapeRegex(KEYOKU_SECTION_MARKER)}[\\s\\S]*?${escapeRegex(KEYOKU_SECTION_END)}`), `${KEYOKU_SECTION_MARKER}\n${KEYOKU_HEARTBEAT_INSTRUCTIONS}\n${KEYOKU_SECTION_END}`);
|
|
71
|
+
if (updated !== content) {
|
|
72
|
+
writeFileSync(heartbeatPath, updated, 'utf-8');
|
|
73
|
+
api.logger.info(`keyoku: updated keyoku section in ${HEARTBEAT_FILENAME}`);
|
|
74
|
+
}
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
// Has user content but no keyoku section — append
|
|
78
|
+
if (hasUserContent(content)) {
|
|
79
|
+
const addendum = `\n\n---\n\n${KEYOKU_SECTION_MARKER}\n${KEYOKU_HEARTBEAT_INSTRUCTIONS}\n${KEYOKU_SECTION_END}\n`;
|
|
80
|
+
writeFileSync(heartbeatPath, content.trimEnd() + addendum, 'utf-8');
|
|
81
|
+
api.logger.info(`keyoku: appended keyoku section to existing ${HEARTBEAT_FILENAME}`);
|
|
82
|
+
return;
|
|
41
83
|
}
|
|
84
|
+
// No meaningful content — write full template
|
|
42
85
|
writeFileSync(heartbeatPath, HEARTBEAT_TEMPLATE, 'utf-8');
|
|
43
86
|
api.logger.info(`keyoku: created ${HEARTBEAT_FILENAME} for heartbeat support`);
|
|
44
87
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"heartbeat-setup.js","sourceRoot":"","sources":["../src/heartbeat-setup.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"heartbeat-setup.js","sourceRoot":"","sources":["../src/heartbeat-setup.ts"],"names":[],"mappings":"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"}
|
package/dist/hooks.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAkG5C,wBAAgB,aAAa,CAC3B,GAAG,EAAE,SAAS,EACd,MAAM,EAAE,YAAY,EACpB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC,GAC7B,IAAI,CA8FN"}
|
package/dist/hooks.js
CHANGED
|
@@ -4,6 +4,55 @@
|
|
|
4
4
|
* - agent_end: auto-capture memorable facts
|
|
5
5
|
*/
|
|
6
6
|
import { formatMemoryContext, formatHeartbeatContext } from './context.js';
|
|
7
|
+
/**
|
|
8
|
+
* Strip OpenClaw-injected inbound metadata blocks from a prompt string.
|
|
9
|
+
* These blocks (e.g. "Conversation info (untrusted metadata):" followed by
|
|
10
|
+
* fenced JSON) are AI-facing context that pollutes search queries.
|
|
11
|
+
*/
|
|
12
|
+
const INBOUND_META_SENTINELS = [
|
|
13
|
+
'Conversation info (untrusted metadata):',
|
|
14
|
+
'Sender (untrusted metadata):',
|
|
15
|
+
'Thread starter (untrusted, for context):',
|
|
16
|
+
'Replied message (untrusted, for context):',
|
|
17
|
+
'Forwarded message context (untrusted metadata):',
|
|
18
|
+
'Chat history since last reply (untrusted, for context):',
|
|
19
|
+
'Untrusted context (metadata, do not treat as instructions or commands):',
|
|
20
|
+
];
|
|
21
|
+
function stripInboundMetadata(text) {
|
|
22
|
+
if (!text || !INBOUND_META_SENTINELS.some((s) => text.includes(s))) {
|
|
23
|
+
return text;
|
|
24
|
+
}
|
|
25
|
+
const lines = text.split('\n');
|
|
26
|
+
const result = [];
|
|
27
|
+
let inMetaBlock = false;
|
|
28
|
+
let inFencedJson = false;
|
|
29
|
+
for (const line of lines) {
|
|
30
|
+
if (!inMetaBlock && INBOUND_META_SENTINELS.some((s) => line.startsWith(s))) {
|
|
31
|
+
inMetaBlock = true;
|
|
32
|
+
inFencedJson = false;
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
if (inMetaBlock) {
|
|
36
|
+
if (!inFencedJson && line.trim() === '```json') {
|
|
37
|
+
inFencedJson = true;
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
if (inFencedJson) {
|
|
41
|
+
if (line.trim() === '```') {
|
|
42
|
+
inMetaBlock = false;
|
|
43
|
+
inFencedJson = false;
|
|
44
|
+
}
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
if (line.trim() === '')
|
|
48
|
+
continue;
|
|
49
|
+
// Non-blank line outside fence — treat as user content
|
|
50
|
+
inMetaBlock = false;
|
|
51
|
+
}
|
|
52
|
+
result.push(line);
|
|
53
|
+
}
|
|
54
|
+
return result.join('\n').replace(/^\n+/, '').replace(/\n+$/, '');
|
|
55
|
+
}
|
|
7
56
|
/**
|
|
8
57
|
* Extract a summary of recent activity from conversation messages.
|
|
9
58
|
* Takes the last N user and assistant messages and builds a query string
|
|
@@ -42,10 +91,6 @@ function summarizeRecentActivity(messages, maxMessages = 6) {
|
|
|
42
91
|
}
|
|
43
92
|
return parts.join('\n');
|
|
44
93
|
}
|
|
45
|
-
// Idle check-in: track consecutive quiet heartbeats.
|
|
46
|
-
// After N quiet beats, force the LLM to engage with the user.
|
|
47
|
-
const IDLE_CHECK_IN_INTERVAL = 3; // every 3 quiet beats (~15 min with 5m heartbeat)
|
|
48
|
-
let quietHeartbeatCount = 0;
|
|
49
94
|
export function registerHooks(api, client, entityId, agentId, config) {
|
|
50
95
|
// before_prompt_build: auto-recall + heartbeat context injection
|
|
51
96
|
if (config.autoRecall || config.heartbeat) {
|
|
@@ -54,62 +99,41 @@ export function registerHooks(api, client, entityId, agentId, config) {
|
|
|
54
99
|
if (!ev.prompt || ev.prompt.length < 5)
|
|
55
100
|
return;
|
|
56
101
|
const isHeartbeat = ev.prompt.includes('HEARTBEAT');
|
|
57
|
-
// Heartbeat path:
|
|
102
|
+
// Heartbeat path: engine handles all intelligence (cooldown, novelty, active hours, nudges)
|
|
58
103
|
if (isHeartbeat && config.heartbeat) {
|
|
59
104
|
const activitySummary = summarizeRecentActivity(ev.messages ?? []);
|
|
105
|
+
// Detect active conversation: messages array has recent user content
|
|
106
|
+
const hasUserMessages = Array.isArray(ev.messages) && ev.messages.some((m) => {
|
|
107
|
+
const msg = m;
|
|
108
|
+
return msg.role === 'user' && msg.content && !msg.content.includes('HEARTBEAT');
|
|
109
|
+
});
|
|
110
|
+
const heartbeatQuery = activitySummary
|
|
111
|
+
|| 'important things about this user, recent plans, preferences, and what they care about';
|
|
60
112
|
try {
|
|
61
113
|
const ctx = await client.heartbeatContext(entityId, {
|
|
62
|
-
query:
|
|
63
|
-
top_k: config.topK,
|
|
64
|
-
min_score: 0.
|
|
114
|
+
query: heartbeatQuery,
|
|
115
|
+
top_k: Math.max(config.topK, 8),
|
|
116
|
+
min_score: 0.05,
|
|
65
117
|
agent_id: agentId,
|
|
66
118
|
max_results: 10,
|
|
67
119
|
analyze: true,
|
|
68
120
|
activity_summary: activitySummary || undefined,
|
|
69
121
|
autonomy: config.autonomy,
|
|
122
|
+
in_conversation: hasUserMessages,
|
|
70
123
|
});
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
const
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
.join('; ');
|
|
82
|
-
const checkInBlock = [
|
|
83
|
-
'<heartbeat-signals>',
|
|
84
|
-
'## Action Brief',
|
|
85
|
-
'It has been a while since you last reached out. Send the user a brief, friendly message right now.',
|
|
86
|
-
'',
|
|
87
|
-
'## Tell the User',
|
|
88
|
-
memoryHints
|
|
89
|
-
? `Hey! Just checking in. Reference what you know about them: ${memoryHints}`
|
|
90
|
-
: 'Hey! Just wanted to check in — how are things going?',
|
|
91
|
-
'',
|
|
92
|
-
'## Execute These Actions',
|
|
93
|
-
'- Send a short, warm greeting to the user',
|
|
94
|
-
'',
|
|
95
|
-
'should_act: true',
|
|
96
|
-
`Urgency: low | Mode: ${config.autonomy}`,
|
|
97
|
-
'</heartbeat-signals>',
|
|
98
|
-
];
|
|
99
|
-
api.logger.info?.('keyoku: idle check-in triggered — forcing engagement');
|
|
100
|
-
return { prependContext: checkInBlock.join('\n') };
|
|
124
|
+
const memories = ctx.relevant_memories ?? [];
|
|
125
|
+
const decision = ctx.decision_reason ?? 'unknown';
|
|
126
|
+
// Engine decides — plugin just logs and passes through
|
|
127
|
+
if (ctx.should_act) {
|
|
128
|
+
const formatted = formatHeartbeatContext(ctx);
|
|
129
|
+
if (formatted) {
|
|
130
|
+
const analysis = ctx.analysis;
|
|
131
|
+
const analyzed = analysis ? ` [${analysis.autonomy}/${analysis.urgency}]` : '';
|
|
132
|
+
api.logger.info?.(`keyoku: heartbeat ${decision} (memories: ${memories.length}, tier: ${ctx.highest_urgency_tier ?? 'n/a'}${analyzed})`);
|
|
133
|
+
return { prependContext: formatted };
|
|
101
134
|
}
|
|
102
135
|
}
|
|
103
|
-
|
|
104
|
-
// Active heartbeat resets the quiet counter
|
|
105
|
-
quietHeartbeatCount = 0;
|
|
106
|
-
}
|
|
107
|
-
const formatted = formatHeartbeatContext(ctx);
|
|
108
|
-
if (formatted) {
|
|
109
|
-
const analyzed = ctx.analysis ? ` [${ctx.analysis.autonomy}/${ctx.analysis.urgency}]` : '';
|
|
110
|
-
api.logger.info?.(`keyoku: heartbeat context injected (should_act: ${ctx.should_act}, memories: ${ctx.relevant_memories.length}${analyzed})`);
|
|
111
|
-
return { prependContext: formatted };
|
|
112
|
-
}
|
|
136
|
+
api.logger.info?.(`keyoku: heartbeat ${decision} (should_act: false, memories: ${memories.length})`);
|
|
113
137
|
}
|
|
114
138
|
catch (err) {
|
|
115
139
|
api.logger.warn(`keyoku: heartbeat context failed: ${String(err)}`);
|
|
@@ -119,11 +143,13 @@ export function registerHooks(api, client, entityId, agentId, config) {
|
|
|
119
143
|
// Auto-recall path: search memories relevant to user's prompt + recent context
|
|
120
144
|
if (config.autoRecall && !isHeartbeat) {
|
|
121
145
|
try {
|
|
146
|
+
// Strip OpenClaw metadata blocks so the search query is the actual user message
|
|
147
|
+
const cleanPrompt = stripInboundMetadata(ev.prompt);
|
|
122
148
|
// Build a richer query: user prompt + last assistant message for context
|
|
123
149
|
const recentContext = summarizeRecentActivity(ev.messages ?? [], 2);
|
|
124
150
|
const query = recentContext
|
|
125
|
-
? `${
|
|
126
|
-
:
|
|
151
|
+
? `${cleanPrompt}\n\nRecent context:\n${recentContext}`
|
|
152
|
+
: cleanPrompt;
|
|
127
153
|
api.logger.info?.(`keyoku: auto-recall searching (query: ${query.slice(0, 80)}...)`);
|
|
128
154
|
const results = await client.search(entityId, query, {
|
|
129
155
|
limit: config.topK,
|
package/dist/hooks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAG3E;;;;GAIG;AACH,SAAS,uBAAuB,CAAC,QAAmB,EAAE,WAAW,GAAG,CAAC;IACnE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEjE,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,GAAoF,CAAC;QAC/F,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,OAAO;YAAE,SAAS;QAEpC,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YAClC,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC;QACnB,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;YACpC,mCAAmC;YACnC,IAAI,GAAG,CAAC,CAAC,OAAO;iBACb,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC;iBAC1C,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAK,CAAC;iBACnB,IAAI,CAAC,GAAG,CAAC,CAAC;QACf,CAAC;QAED,IAAI,CAAC,IAAI;YAAE,SAAS;QAEpB,mDAAmD;QACnD,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAEhE,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACtB,KAAK,CAAC,IAAI,CAAC,SAAS,SAAS,EAAE,CAAC,CAAC;QACnC,CAAC;aAAM,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAClC,KAAK,CAAC,IAAI,CAAC,cAAc,SAAS,EAAE,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAG3E;;;;GAIG;AACH,MAAM,sBAAsB,GAAG;IAC7B,yCAAyC;IACzC,8BAA8B;IAC9B,0CAA0C;IAC1C,2CAA2C;IAC3C,iDAAiD;IACjD,yDAAyD;IACzD,yEAAyE;CACjE,CAAC;AAEX,SAAS,oBAAoB,CAAC,IAAY;IACxC,IAAI,CAAC,IAAI,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACnE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,WAAW,GAAG,KAAK,CAAC;IACxB,IAAI,YAAY,GAAG,KAAK,CAAC;IAEzB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,WAAW,IAAI,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3E,WAAW,GAAG,IAAI,CAAC;YACnB,YAAY,GAAG,KAAK,CAAC;YACrB,SAAS;QACX,CAAC;QAED,IAAI,WAAW,EAAE,CAAC;YAChB,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;gBAC/C,YAAY,GAAG,IAAI,CAAC;gBACpB,SAAS;YACX,CAAC;YACD,IAAI,YAAY,EAAE,CAAC;gBACjB,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,KAAK,EAAE,CAAC;oBAC1B,WAAW,GAAG,KAAK,CAAC;oBACpB,YAAY,GAAG,KAAK,CAAC;gBACvB,CAAC;gBACD,SAAS;YACX,CAAC;YACD,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE;gBAAE,SAAS;YACjC,uDAAuD;YACvD,WAAW,GAAG,KAAK,CAAC;QACtB,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACnE,CAAC;AAED;;;;GAIG;AACH,SAAS,uBAAuB,CAAC,QAAmB,EAAE,WAAW,GAAG,CAAC;IACnE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEjE,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,GAAoF,CAAC;QAC/F,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,OAAO;YAAE,SAAS;QAEpC,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YAClC,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC;QACnB,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;YACpC,mCAAmC;YACnC,IAAI,GAAG,CAAC,CAAC,OAAO;iBACb,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC;iBAC1C,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAK,CAAC;iBACnB,IAAI,CAAC,GAAG,CAAC,CAAC;QACf,CAAC;QAED,IAAI,CAAC,IAAI;YAAE,SAAS;QAEpB,mDAAmD;QACnD,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAEhE,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACtB,KAAK,CAAC,IAAI,CAAC,SAAS,SAAS,EAAE,CAAC,CAAC;QACnC,CAAC;aAAM,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAClC,KAAK,CAAC,IAAI,CAAC,cAAc,SAAS,EAAE,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,GAAc,EACd,MAAoB,EACpB,QAAgB,EAChB,OAAe,EACf,MAA8B;IAE9B,iEAAiE;IACjE,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QAC1C,GAAG,CAAC,EAAE,CAAC,qBAAqB,EAAE,KAAK,EAAE,KAAc,EAAE,EAAE;YACrD,MAAM,EAAE,GAAG,KAAkD,CAAC;YAC9D,IAAI,CAAC,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO;YAE/C,MAAM,WAAW,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;YAEpD,4FAA4F;YAC5F,IAAI,WAAW,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;gBACpC,MAAM,eAAe,GAAG,uBAAuB,CAAC,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;gBAEnE,qEAAqE;gBACrE,MAAM,eAAe,GAAG,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;oBAC3E,MAAM,GAAG,GAAG,CAAwC,CAAC;oBACrD,OAAO,GAAG,CAAC,IAAI,KAAK,MAAM,IAAI,GAAG,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;gBAClF,CAAC,CAAC,CAAC;gBAEH,MAAM,cAAc,GAAG,eAAe;uBACjC,uFAAuF,CAAC;gBAE7F,IAAI,CAAC;oBACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE;wBAClD,KAAK,EAAE,cAAc;wBACrB,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;wBAC/B,SAAS,EAAE,IAAI;wBACf,QAAQ,EAAE,OAAO;wBACjB,WAAW,EAAE,EAAE;wBACf,OAAO,EAAE,IAAI;wBACb,gBAAgB,EAAE,eAAe,IAAI,SAAS;wBAC9C,QAAQ,EAAE,MAAM,CAAC,QAAQ;wBACzB,eAAe,EAAE,eAAe;qBACjC,CAAC,CAAC;oBAEH,MAAM,QAAQ,GAAG,GAAG,CAAC,iBAAiB,IAAI,EAAE,CAAC;oBAC7C,MAAM,QAAQ,GAAG,GAAG,CAAC,eAAe,IAAI,SAAS,CAAC;oBAElD,uDAAuD;oBACvD,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;wBACnB,MAAM,SAAS,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAC;wBAC9C,IAAI,SAAS,EAAE,CAAC;4BACd,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;4BAC9B,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;4BAC/E,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CACf,qBAAqB,QAAQ,eAAe,QAAQ,CAAC,MAAM,WAAW,GAAG,CAAC,oBAAoB,IAAI,KAAK,GAAG,QAAQ,GAAG,CACtH,CAAC;4BACF,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC;wBACvC,CAAC;oBACH,CAAC;oBAED,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,qBAAqB,QAAQ,kCAAkC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;gBACvG,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,qCAAqC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACtE,CAAC;gBACD,OAAO;YACT,CAAC;YAED,+EAA+E;YAC/E,IAAI,MAAM,CAAC,UAAU,IAAI,CAAC,WAAW,EAAE,CAAC;gBACtC,IAAI,CAAC;oBACH,gFAAgF;oBAChF,MAAM,WAAW,GAAG,oBAAoB,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;oBACpD,yEAAyE;oBACzE,MAAM,aAAa,GAAG,uBAAuB,CAAC,EAAE,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;oBACpE,MAAM,KAAK,GAAG,aAAa;wBACzB,CAAC,CAAC,GAAG,WAAW,wBAAwB,aAAa,EAAE;wBACvD,CAAC,CAAC,WAAW,CAAC;oBAEhB,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,yCAAyC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC;oBAErF,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE;wBACnD,KAAK,EAAE,MAAM,CAAC,IAAI;wBAClB,SAAS,EAAE,IAAI;qBAChB,CAAC,CAAC;oBAEH,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACvB,MAAM,SAAS,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;wBAC/C,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,gCAAgC,OAAO,CAAC,MAAM,WAAW,CAAC,CAAC;wBAC7E,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC;oBACvC,CAAC;yBAAM,CAAC;wBACN,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,+CAA+C,CAAC,CAAC;oBACrE,CAAC;gBACH,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,+BAA+B,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChE,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,iFAAiF;IACjF,wEAAwE;IACxE,4EAA4E;IAC5E,gCAAgC;AAClC,CAAC"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,KAAK,YAAY,EAAiB,MAAM,aAAa,CAAC;AAO/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,MAAM,CAAC,EAAE,YAAY;;;;;kBAOxC,SAAS;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,KAAK,YAAY,EAAiB,MAAM,aAAa,CAAC;AAO/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,MAAM,CAAC,EAAE,YAAY;;;;;kBAOxC,SAAS;EAqC1B"}
|
package/dist/index.js
CHANGED
|
@@ -30,7 +30,10 @@ export default function keyokuMemory(config) {
|
|
|
30
30
|
// Resolve entity/agent IDs — fall back to plugin API id
|
|
31
31
|
const entityId = cfg.entityId || api.id || 'default';
|
|
32
32
|
const agentId = cfg.agentId || api.id || 'default';
|
|
33
|
-
const client = new KeyokuClient({
|
|
33
|
+
const client = new KeyokuClient({
|
|
34
|
+
baseUrl: cfg.keyokuUrl,
|
|
35
|
+
token: process.env.KEYOKU_SESSION_TOKEN,
|
|
36
|
+
});
|
|
34
37
|
api.logger.info(`keyoku: plugin registered (url: ${cfg.keyokuUrl}, entity: ${entityId})`);
|
|
35
38
|
// Register 6 memory/schedule tools
|
|
36
39
|
registerTools(api, client, entityId, agentId);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAqB,aAAa,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAIzD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,MAAqB;IACxD,OAAO;QACL,EAAE,EAAE,eAAe;QACnB,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,4EAA4E;QACzF,IAAI,EAAE,QAAiB;QAEvB,QAAQ,CAAC,GAAc;YACrB,MAAM,GAAG,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;YAElC,wDAAwD;YACxD,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,EAAE,IAAI,SAAS,CAAC;YACrD,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,EAAE,IAAI,SAAS,CAAC;YAEnD,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAqB,aAAa,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAIzD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,MAAqB;IACxD,OAAO;QACL,EAAE,EAAE,eAAe;QACnB,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,4EAA4E;QACzF,IAAI,EAAE,QAAiB;QAEvB,QAAQ,CAAC,GAAc;YACrB,MAAM,GAAG,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;YAElC,wDAAwD;YACxD,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,EAAE,IAAI,SAAS,CAAC;YACrD,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,EAAE,IAAI,SAAS,CAAC;YAEnD,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC;gBAC9B,OAAO,EAAE,GAAG,CAAC,SAAS;gBACtB,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB;aACxC,CAAC,CAAC;YAEH,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,mCAAmC,GAAG,CAAC,SAAS,aAAa,QAAQ,GAAG,CAAC,CAAC;YAE1F,mCAAmC;YACnC,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;YAE9C,kEAAkE;YAClE,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;YAEnD,2CAA2C;YAC3C,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;YAEpC,2BAA2B;YAC3B,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;YAEnC,2CAA2C;YAC3C,IAAI,GAAG,CAAC,kBAAkB,EAAE,CAAC;gBAC3B,0BAA0B,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;YAClE,CAAC;YAED,4EAA4E;YAC5E,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;gBAClB,iBAAiB,CAAC,GAAG,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/dist/init.d.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One-command installer for the Keyoku OpenClaw plugin.
|
|
3
|
+
*
|
|
4
|
+
* `npx @keyoku/openclaw init`
|
|
5
|
+
*
|
|
6
|
+
* 1. Detects OpenClaw config
|
|
7
|
+
* 2. Downloads keyoku-engine binary if missing
|
|
8
|
+
* 3. Registers plugin in openclaw.json (with full config defaults)
|
|
9
|
+
* 4. Configures DB path (~/.keyoku/data/keyoku.db)
|
|
10
|
+
* 5. Sets up LLM provider + API key (OpenAI required for embeddings)
|
|
11
|
+
* 6. Sets autonomy level (observe/suggest/act)
|
|
12
|
+
* 7. Auto-detects timezone, configures quiet hours
|
|
13
|
+
* 8. Installs SKILL.md (LLM guidebook) to workspace
|
|
14
|
+
* 9. Offers migration of existing OpenClaw memories
|
|
15
|
+
* 10. Health check to verify everything works
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* Main init function — orchestrates the full setup.
|
|
19
|
+
*/
|
|
20
|
+
export declare function init(): Promise<void>;
|
|
21
|
+
//# sourceMappingURL=init.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AA+aH;;GAEG;AACH,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAoJ1C"}
|