@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/dist/init.js
ADDED
|
@@ -0,0 +1,522 @@
|
|
|
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
|
+
import { existsSync, readFileSync, writeFileSync, mkdirSync, chmodSync, createWriteStream, cpSync } from 'node:fs';
|
|
18
|
+
import { join, dirname } from 'node:path';
|
|
19
|
+
import { fileURLToPath } from 'node:url';
|
|
20
|
+
import { createInterface } from 'node:readline';
|
|
21
|
+
import { pipeline } from 'node:stream/promises';
|
|
22
|
+
import { KeyokuClient } from '@keyoku/memory';
|
|
23
|
+
import { importMemoryFiles } from './migration.js';
|
|
24
|
+
import { migrateAllVectorStores, discoverVectorDbs } from './migrate-vector-store.js';
|
|
25
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
26
|
+
const HOME = process.env.HOME ?? '';
|
|
27
|
+
const OPENCLAW_CONFIG_PATH = join(HOME, '.openclaw', 'openclaw.json');
|
|
28
|
+
const KEYOKU_BIN_DIR = join(HOME, '.keyoku', 'bin');
|
|
29
|
+
const KEYOKU_BIN_PATH = join(KEYOKU_BIN_DIR, 'keyoku');
|
|
30
|
+
const OPENCLAW_MEMORY_DIR = join(HOME, '.openclaw', 'memory');
|
|
31
|
+
function log(msg) {
|
|
32
|
+
console.log(` ${msg}`);
|
|
33
|
+
}
|
|
34
|
+
function success(msg) {
|
|
35
|
+
console.log(` [OK] ${msg}`);
|
|
36
|
+
}
|
|
37
|
+
function warn(msg) {
|
|
38
|
+
console.log(` [!] ${msg}`);
|
|
39
|
+
}
|
|
40
|
+
// Pre-buffered stdin lines for piped (non-TTY) input.
|
|
41
|
+
// When stdin is a pipe, readline only delivers the first line via question().
|
|
42
|
+
// We read all lines upfront and serve them from the buffer.
|
|
43
|
+
let stdinLines = null;
|
|
44
|
+
let stdinReady = null;
|
|
45
|
+
function ensureStdinBuffer() {
|
|
46
|
+
if (stdinReady)
|
|
47
|
+
return stdinReady;
|
|
48
|
+
if (process.stdin.isTTY) {
|
|
49
|
+
stdinReady = Promise.resolve();
|
|
50
|
+
return stdinReady;
|
|
51
|
+
}
|
|
52
|
+
stdinReady = new Promise((resolve) => {
|
|
53
|
+
const rl = createInterface({ input: process.stdin });
|
|
54
|
+
const lines = [];
|
|
55
|
+
rl.on('line', (line) => lines.push(line));
|
|
56
|
+
rl.on('close', () => {
|
|
57
|
+
stdinLines = lines;
|
|
58
|
+
resolve();
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
return stdinReady;
|
|
62
|
+
}
|
|
63
|
+
// Shared readline for TTY interactive mode
|
|
64
|
+
let ttyRl = null;
|
|
65
|
+
function closeTtyReadline() {
|
|
66
|
+
if (ttyRl) {
|
|
67
|
+
ttyRl.close();
|
|
68
|
+
ttyRl = null;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
async function prompt(question) {
|
|
72
|
+
await ensureStdinBuffer();
|
|
73
|
+
// Piped mode — read from pre-buffered lines
|
|
74
|
+
if (stdinLines !== null) {
|
|
75
|
+
process.stdout.write(` ${question} `);
|
|
76
|
+
const answer = stdinLines.shift() ?? '';
|
|
77
|
+
console.log(answer);
|
|
78
|
+
return answer.trim();
|
|
79
|
+
}
|
|
80
|
+
// TTY mode — interactive prompt
|
|
81
|
+
if (!ttyRl) {
|
|
82
|
+
ttyRl = createInterface({ input: process.stdin, output: process.stdout });
|
|
83
|
+
}
|
|
84
|
+
return new Promise((resolve) => {
|
|
85
|
+
ttyRl.question(` ${question} `, (answer) => {
|
|
86
|
+
resolve(answer.trim());
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
/** Prompt that lowercases the answer (for y/n and enum choices). */
|
|
91
|
+
async function promptLower(question) {
|
|
92
|
+
return (await prompt(question)).toLowerCase();
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Detect platform and architecture for binary download.
|
|
96
|
+
*/
|
|
97
|
+
function getPlatformInfo() {
|
|
98
|
+
const platform = process.platform;
|
|
99
|
+
const arch = process.arch;
|
|
100
|
+
const osMap = {
|
|
101
|
+
darwin: 'darwin',
|
|
102
|
+
linux: 'linux',
|
|
103
|
+
win32: 'windows',
|
|
104
|
+
};
|
|
105
|
+
const archMap = {
|
|
106
|
+
x64: 'amd64',
|
|
107
|
+
arm64: 'arm64',
|
|
108
|
+
};
|
|
109
|
+
return {
|
|
110
|
+
os: osMap[platform] ?? platform,
|
|
111
|
+
arch: archMap[arch] ?? arch,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Download the keyoku-engine binary from GitHub releases.
|
|
116
|
+
*/
|
|
117
|
+
async function downloadBinary() {
|
|
118
|
+
const { os, arch } = getPlatformInfo();
|
|
119
|
+
const binaryName = os === 'windows' ? 'keyoku-server.exe' : 'keyoku-server';
|
|
120
|
+
const assetName = `keyoku-server-${os}-${arch}${os === 'windows' ? '.exe' : ''}`;
|
|
121
|
+
log(`Downloading keyoku-engine for ${os}/${arch}...`);
|
|
122
|
+
try {
|
|
123
|
+
// Get latest release info from GitHub API
|
|
124
|
+
const releaseRes = await fetch('https://api.github.com/repos/keyoku-ai/keyoku-engine/releases/latest', { headers: { Accept: 'application/vnd.github.v3+json' } });
|
|
125
|
+
if (!releaseRes.ok) {
|
|
126
|
+
warn(`Could not fetch latest release: ${releaseRes.status} ${releaseRes.statusText}`);
|
|
127
|
+
return false;
|
|
128
|
+
}
|
|
129
|
+
const release = await releaseRes.json();
|
|
130
|
+
const asset = release.assets.find((a) => a.name === assetName);
|
|
131
|
+
if (!asset) {
|
|
132
|
+
warn(`No binary found for ${os}/${arch} in release ${release.tag_name}`);
|
|
133
|
+
warn(`Available assets: ${release.assets.map((a) => a.name).join(', ')}`);
|
|
134
|
+
return false;
|
|
135
|
+
}
|
|
136
|
+
log(`Downloading ${asset.name} from release ${release.tag_name}...`);
|
|
137
|
+
// Download the binary
|
|
138
|
+
const downloadRes = await fetch(asset.browser_download_url);
|
|
139
|
+
if (!downloadRes.ok || !downloadRes.body) {
|
|
140
|
+
warn(`Download failed: ${downloadRes.status}`);
|
|
141
|
+
return false;
|
|
142
|
+
}
|
|
143
|
+
// Ensure directory exists
|
|
144
|
+
mkdirSync(KEYOKU_BIN_DIR, { recursive: true });
|
|
145
|
+
// Stream to file
|
|
146
|
+
const destPath = KEYOKU_BIN_PATH;
|
|
147
|
+
const fileStream = createWriteStream(destPath);
|
|
148
|
+
// @ts-expect-error — Node fetch body is a ReadableStream, pipeline handles it
|
|
149
|
+
await pipeline(downloadRes.body, fileStream);
|
|
150
|
+
// Make executable
|
|
151
|
+
if (os !== 'windows') {
|
|
152
|
+
chmodSync(destPath, 0o755);
|
|
153
|
+
}
|
|
154
|
+
success(`Binary installed at ${destPath}`);
|
|
155
|
+
return true;
|
|
156
|
+
}
|
|
157
|
+
catch (err) {
|
|
158
|
+
warn(`Failed to download binary: ${String(err)}`);
|
|
159
|
+
return false;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Read and parse the OpenClaw config file.
|
|
164
|
+
*/
|
|
165
|
+
function readOpenClawConfig() {
|
|
166
|
+
if (!existsSync(OPENCLAW_CONFIG_PATH))
|
|
167
|
+
return null;
|
|
168
|
+
try {
|
|
169
|
+
return JSON.parse(readFileSync(OPENCLAW_CONFIG_PATH, 'utf-8'));
|
|
170
|
+
}
|
|
171
|
+
catch {
|
|
172
|
+
return null;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Write the OpenClaw config file.
|
|
177
|
+
*/
|
|
178
|
+
function writeOpenClawConfig(config) {
|
|
179
|
+
writeFileSync(OPENCLAW_CONFIG_PATH, JSON.stringify(config, null, 2) + '\n', 'utf-8');
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Install the SKILL.md guidebook to the workspace skills directory.
|
|
183
|
+
* This teaches the LLM how to interpret heartbeat signals, use memory naturally, etc.
|
|
184
|
+
*/
|
|
185
|
+
function installSkill() {
|
|
186
|
+
// The skill ships with the package at ../skills/keyoku-memory/SKILL.md
|
|
187
|
+
const bundledSkillDir = join(__dirname, '..', 'skills', 'keyoku-memory');
|
|
188
|
+
const bundledSkillPath = join(bundledSkillDir, 'SKILL.md');
|
|
189
|
+
// Install to workspace skills (highest precedence)
|
|
190
|
+
const workspaceSkillDir = join(HOME, '.openclaw', 'skills', 'keyoku-memory');
|
|
191
|
+
if (existsSync(join(workspaceSkillDir, 'SKILL.md'))) {
|
|
192
|
+
success('SKILL.md already installed in workspace');
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
if (!existsSync(bundledSkillPath)) {
|
|
196
|
+
warn('Bundled SKILL.md not found — skill will load from plugin package instead');
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
mkdirSync(workspaceSkillDir, { recursive: true });
|
|
200
|
+
cpSync(bundledSkillPath, join(workspaceSkillDir, 'SKILL.md'));
|
|
201
|
+
success('SKILL.md installed to ~/.openclaw/skills/keyoku-memory/');
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Set up LLM provider and API keys.
|
|
205
|
+
* OpenAI is required for embeddings. Extraction provider is configurable.
|
|
206
|
+
*/
|
|
207
|
+
async function setupLlmProvider() {
|
|
208
|
+
console.log('');
|
|
209
|
+
log('LLM Provider Setup');
|
|
210
|
+
log('Keyoku needs an OpenAI API key for embeddings (text-embedding-3-small).');
|
|
211
|
+
log('It also needs an LLM for memory extraction (can be OpenAI, Anthropic, or Gemini).');
|
|
212
|
+
console.log('');
|
|
213
|
+
// Check existing env vars
|
|
214
|
+
const hasOpenAI = !!process.env.OPENAI_API_KEY;
|
|
215
|
+
const hasAnthropic = !!process.env.ANTHROPIC_API_KEY;
|
|
216
|
+
const hasGemini = !!process.env.GEMINI_API_KEY;
|
|
217
|
+
if (hasOpenAI) {
|
|
218
|
+
success('OPENAI_API_KEY found in environment');
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
warn('OPENAI_API_KEY not found — required for memory embeddings');
|
|
222
|
+
log('Set it in your shell profile or .env file:');
|
|
223
|
+
log(' export OPENAI_API_KEY=sk-...');
|
|
224
|
+
console.log('');
|
|
225
|
+
const key = await prompt('Enter your OpenAI API key (or press Enter to skip):');
|
|
226
|
+
if (key && key.startsWith('sk-')) {
|
|
227
|
+
appendToEnvFile('OPENAI_API_KEY', key);
|
|
228
|
+
process.env.OPENAI_API_KEY = key;
|
|
229
|
+
success('OPENAI_API_KEY saved to ~/.keyoku/.env');
|
|
230
|
+
}
|
|
231
|
+
else if (key) {
|
|
232
|
+
warn('That doesn\'t look like an OpenAI key (should start with sk-). Skipping.');
|
|
233
|
+
}
|
|
234
|
+
else {
|
|
235
|
+
warn('Skipped — you\'ll need to set OPENAI_API_KEY before using memory features');
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
// Extraction provider
|
|
239
|
+
const currentProvider = process.env.KEYOKU_EXTRACTION_PROVIDER;
|
|
240
|
+
if (currentProvider) {
|
|
241
|
+
success(`Extraction provider: ${currentProvider} (${process.env.KEYOKU_EXTRACTION_MODEL || 'default model'})`);
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
244
|
+
// Auto-detect best available provider
|
|
245
|
+
if (hasOpenAI || process.env.OPENAI_API_KEY) {
|
|
246
|
+
log('Using OpenAI for memory extraction (detected OPENAI_API_KEY)');
|
|
247
|
+
appendToEnvFile('KEYOKU_EXTRACTION_PROVIDER', 'openai');
|
|
248
|
+
appendToEnvFile('KEYOKU_EXTRACTION_MODEL', 'gpt-4.1-mini');
|
|
249
|
+
}
|
|
250
|
+
else if (hasGemini) {
|
|
251
|
+
log('Using Gemini for memory extraction (detected GEMINI_API_KEY)');
|
|
252
|
+
appendToEnvFile('KEYOKU_EXTRACTION_PROVIDER', 'gemini');
|
|
253
|
+
appendToEnvFile('KEYOKU_EXTRACTION_MODEL', 'gemini-3.1-flash-lite-preview');
|
|
254
|
+
}
|
|
255
|
+
else if (hasAnthropic) {
|
|
256
|
+
log('Using Anthropic for memory extraction (detected ANTHROPIC_API_KEY)');
|
|
257
|
+
appendToEnvFile('KEYOKU_EXTRACTION_PROVIDER', 'anthropic');
|
|
258
|
+
appendToEnvFile('KEYOKU_EXTRACTION_MODEL', 'claude-haiku-4-5-20251001');
|
|
259
|
+
}
|
|
260
|
+
else {
|
|
261
|
+
warn('No LLM API key detected. Memory extraction will not work.');
|
|
262
|
+
warn('Set at least one: OPENAI_API_KEY, ANTHROPIC_API_KEY, or GEMINI_API_KEY');
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Append a key=value to ~/.keyoku/.env (creates if needed).
|
|
267
|
+
* This file is sourced by the service when starting keyoku-engine.
|
|
268
|
+
*/
|
|
269
|
+
function appendToEnvFile(key, value) {
|
|
270
|
+
const envDir = join(HOME, '.keyoku');
|
|
271
|
+
const envPath = join(envDir, '.env');
|
|
272
|
+
mkdirSync(envDir, { recursive: true });
|
|
273
|
+
let content = '';
|
|
274
|
+
if (existsSync(envPath)) {
|
|
275
|
+
content = readFileSync(envPath, 'utf-8');
|
|
276
|
+
// Replace existing key if present
|
|
277
|
+
const regex = new RegExp(`^${key}=.*$`, 'm');
|
|
278
|
+
if (regex.test(content)) {
|
|
279
|
+
content = content.replace(regex, `${key}=${value}`);
|
|
280
|
+
writeFileSync(envPath, content, 'utf-8');
|
|
281
|
+
return;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
// Append new key
|
|
285
|
+
const line = `${key}=${value}\n`;
|
|
286
|
+
writeFileSync(envPath, content + line, 'utf-8');
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Detect the system timezone (IANA format).
|
|
290
|
+
*/
|
|
291
|
+
function detectTimezone() {
|
|
292
|
+
try {
|
|
293
|
+
return Intl.DateTimeFormat().resolvedOptions().timeZone;
|
|
294
|
+
}
|
|
295
|
+
catch {
|
|
296
|
+
return 'America/Los_Angeles';
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* Set up autonomy level — controls how aggressively heartbeat acts on signals.
|
|
301
|
+
*/
|
|
302
|
+
async function setupAutonomy(config) {
|
|
303
|
+
console.log('');
|
|
304
|
+
log('Autonomy Level');
|
|
305
|
+
log('Controls how the agent acts on heartbeat signals (deadlines, reminders, etc.).');
|
|
306
|
+
console.log('');
|
|
307
|
+
log(' observe — Note signals silently, only act when the user asks');
|
|
308
|
+
log(' suggest — Mention important signals naturally in conversation (recommended)');
|
|
309
|
+
log(' act — Proactively execute actions (create reminders, follow up, etc.)');
|
|
310
|
+
console.log('');
|
|
311
|
+
const answer = await promptLower('Autonomy level [observe/suggest/act] (default: suggest):');
|
|
312
|
+
const level = ['observe', 'suggest', 'act'].includes(answer) ? answer : 'suggest';
|
|
313
|
+
// Save to plugin config in openclaw.json
|
|
314
|
+
const entry = config.plugins?.entries?.['keyoku-memory'];
|
|
315
|
+
if (entry) {
|
|
316
|
+
if (!entry.config)
|
|
317
|
+
entry.config = {};
|
|
318
|
+
entry.config.autonomy = level;
|
|
319
|
+
writeOpenClawConfig(config);
|
|
320
|
+
}
|
|
321
|
+
success(`Autonomy set to: ${level}`);
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* Set up timezone and quiet hours — controls when heartbeats are suppressed.
|
|
325
|
+
*/
|
|
326
|
+
async function setupTimezoneAndQuietHours() {
|
|
327
|
+
console.log('');
|
|
328
|
+
log('Timezone & Quiet Hours');
|
|
329
|
+
// Auto-detect timezone
|
|
330
|
+
const detected = detectTimezone();
|
|
331
|
+
const tzAnswer = await prompt(`Timezone? (detected: ${detected}, press Enter to accept):`);
|
|
332
|
+
const timezone = tzAnswer || detected;
|
|
333
|
+
appendToEnvFile('KEYOKU_QUIET_HOURS_TIMEZONE', timezone);
|
|
334
|
+
success(`Timezone: ${timezone}`);
|
|
335
|
+
// Quiet hours
|
|
336
|
+
console.log('');
|
|
337
|
+
log('Quiet hours suppress non-urgent heartbeat signals (e.g., 11pm–7am).');
|
|
338
|
+
const enableQuiet = await promptLower('Enable quiet hours? (y/n, default: y):');
|
|
339
|
+
if (enableQuiet === 'n') {
|
|
340
|
+
appendToEnvFile('KEYOKU_QUIET_HOURS_ENABLED', 'false');
|
|
341
|
+
log('Quiet hours disabled — heartbeats can fire anytime');
|
|
342
|
+
return;
|
|
343
|
+
}
|
|
344
|
+
appendToEnvFile('KEYOKU_QUIET_HOURS_ENABLED', 'true');
|
|
345
|
+
const startAnswer = await prompt('Quiet start hour (0-23, default: 23):');
|
|
346
|
+
const endAnswer = await prompt('Quiet end hour (0-23, default: 7):');
|
|
347
|
+
const start = startAnswer ? parseInt(startAnswer, 10) : 23;
|
|
348
|
+
const end = endAnswer ? parseInt(endAnswer, 10) : 7;
|
|
349
|
+
if (!isNaN(start) && start >= 0 && start <= 23) {
|
|
350
|
+
appendToEnvFile('KEYOKU_QUIET_HOUR_START', String(start));
|
|
351
|
+
}
|
|
352
|
+
if (!isNaN(end) && end >= 0 && end <= 23) {
|
|
353
|
+
appendToEnvFile('KEYOKU_QUIET_HOUR_END', String(end));
|
|
354
|
+
}
|
|
355
|
+
success(`Quiet hours: ${isNaN(start) ? 23 : start}:00 – ${isNaN(end) ? 7 : end}:00 (${timezone})`);
|
|
356
|
+
}
|
|
357
|
+
/**
|
|
358
|
+
* Run a health check against keyoku-engine to verify the install works.
|
|
359
|
+
*/
|
|
360
|
+
async function healthCheck() {
|
|
361
|
+
const url = 'http://localhost:18900';
|
|
362
|
+
log('Running health check...');
|
|
363
|
+
try {
|
|
364
|
+
const controller = new AbortController();
|
|
365
|
+
const timer = setTimeout(() => controller.abort(), 3000);
|
|
366
|
+
const res = await fetch(`${url}/api/v1/health`, { signal: controller.signal });
|
|
367
|
+
clearTimeout(timer);
|
|
368
|
+
if (res.ok) {
|
|
369
|
+
success('Keyoku engine is healthy');
|
|
370
|
+
return true;
|
|
371
|
+
}
|
|
372
|
+
warn(`Health check returned ${res.status}`);
|
|
373
|
+
return false;
|
|
374
|
+
}
|
|
375
|
+
catch {
|
|
376
|
+
// Engine isn't running yet — that's fine, it auto-starts with OpenClaw
|
|
377
|
+
log('Keyoku engine not running (it will auto-start when OpenClaw loads the plugin)');
|
|
378
|
+
return false;
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
/**
|
|
382
|
+
* Main init function — orchestrates the full setup.
|
|
383
|
+
*/
|
|
384
|
+
export async function init() {
|
|
385
|
+
console.log('\n Keyoku OpenClaw Plugin — Setup\n');
|
|
386
|
+
// Step 1: Detect OpenClaw
|
|
387
|
+
const config = readOpenClawConfig();
|
|
388
|
+
if (!config) {
|
|
389
|
+
warn(`OpenClaw config not found at ${OPENCLAW_CONFIG_PATH}`);
|
|
390
|
+
warn('Make sure OpenClaw is installed first: https://openclaw.dev');
|
|
391
|
+
process.exit(1);
|
|
392
|
+
}
|
|
393
|
+
success('OpenClaw config detected');
|
|
394
|
+
// Step 2: Check if already installed
|
|
395
|
+
const entries = config.plugins?.entries ?? {};
|
|
396
|
+
const alreadyRegistered = !!entries['keyoku-memory']?.enabled;
|
|
397
|
+
if (alreadyRegistered) {
|
|
398
|
+
success('Keyoku plugin already registered in OpenClaw config');
|
|
399
|
+
}
|
|
400
|
+
else {
|
|
401
|
+
// Step 3: Ensure binary exists
|
|
402
|
+
if (existsSync(KEYOKU_BIN_PATH)) {
|
|
403
|
+
success(`Keyoku binary found at ${KEYOKU_BIN_PATH}`);
|
|
404
|
+
}
|
|
405
|
+
else {
|
|
406
|
+
log('Keyoku binary not found — downloading...');
|
|
407
|
+
const downloaded = await downloadBinary();
|
|
408
|
+
if (!downloaded) {
|
|
409
|
+
warn('Could not download binary. You can install it manually:');
|
|
410
|
+
warn(' Visit: https://github.com/keyoku-ai/keyoku-engine/releases');
|
|
411
|
+
warn(` Place the binary at: ${KEYOKU_BIN_PATH}`);
|
|
412
|
+
const proceed = await promptLower('Continue without binary? (y/n)');
|
|
413
|
+
if (proceed !== 'y') {
|
|
414
|
+
process.exit(1);
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
// Step 4: Register plugin in config
|
|
419
|
+
if (!config.plugins)
|
|
420
|
+
config.plugins = {};
|
|
421
|
+
if (!config.plugins.entries)
|
|
422
|
+
config.plugins.entries = {};
|
|
423
|
+
if (!config.plugins.slots)
|
|
424
|
+
config.plugins.slots = {};
|
|
425
|
+
config.plugins.entries['keyoku-memory'] = {
|
|
426
|
+
enabled: true,
|
|
427
|
+
config: {
|
|
428
|
+
keyokuUrl: 'http://localhost:18900',
|
|
429
|
+
autoRecall: true,
|
|
430
|
+
autoCapture: true,
|
|
431
|
+
heartbeat: true,
|
|
432
|
+
topK: 5,
|
|
433
|
+
},
|
|
434
|
+
};
|
|
435
|
+
config.plugins.slots['memory'] = 'keyoku-memory';
|
|
436
|
+
writeOpenClawConfig(config);
|
|
437
|
+
success('Plugin registered in openclaw.json');
|
|
438
|
+
}
|
|
439
|
+
// Step 5: Ensure DB path is configured
|
|
440
|
+
const dbPath = join(HOME, '.keyoku', 'data', 'keyoku.db');
|
|
441
|
+
appendToEnvFile('KEYOKU_DB_PATH', dbPath);
|
|
442
|
+
// Step 6: Set up LLM provider + API keys
|
|
443
|
+
await setupLlmProvider();
|
|
444
|
+
// Step 7: Autonomy level
|
|
445
|
+
await setupAutonomy(config);
|
|
446
|
+
// Step 8: Timezone & quiet hours
|
|
447
|
+
await setupTimezoneAndQuietHours();
|
|
448
|
+
// Step 9: Install SKILL.md guidebook
|
|
449
|
+
console.log('');
|
|
450
|
+
installSkill();
|
|
451
|
+
// Step 10: Check for existing memories to migrate
|
|
452
|
+
const memoryMdPath = join(HOME, '.openclaw', 'MEMORY.md');
|
|
453
|
+
const hasMemoryMd = existsSync(memoryMdPath);
|
|
454
|
+
const vectorDbs = discoverVectorDbs(OPENCLAW_MEMORY_DIR);
|
|
455
|
+
const hasVectorStores = vectorDbs.length > 0;
|
|
456
|
+
if (hasMemoryMd || hasVectorStores) {
|
|
457
|
+
console.log('');
|
|
458
|
+
log('Found existing OpenClaw memories:');
|
|
459
|
+
if (hasMemoryMd)
|
|
460
|
+
log(` - MEMORY.md`);
|
|
461
|
+
if (hasVectorStores)
|
|
462
|
+
log(` - ${vectorDbs.length} vector store(s) in ~/.openclaw/memory/`);
|
|
463
|
+
const migrate = await promptLower('Migrate existing memories into Keyoku? (y/n)');
|
|
464
|
+
if (migrate === 'y') {
|
|
465
|
+
log('Starting migration...');
|
|
466
|
+
const client = new KeyokuClient({
|
|
467
|
+
baseUrl: 'http://localhost:18900',
|
|
468
|
+
token: process.env.KEYOKU_SESSION_TOKEN,
|
|
469
|
+
timeout: 60000,
|
|
470
|
+
});
|
|
471
|
+
const entityId = 'default';
|
|
472
|
+
// Migrate markdown files
|
|
473
|
+
if (hasMemoryMd) {
|
|
474
|
+
try {
|
|
475
|
+
const mdResult = await importMemoryFiles({
|
|
476
|
+
client,
|
|
477
|
+
entityId,
|
|
478
|
+
workspaceDir: join(HOME, '.openclaw'),
|
|
479
|
+
logger: console,
|
|
480
|
+
});
|
|
481
|
+
success(`Markdown: ${mdResult.imported} imported, ${mdResult.skipped} skipped`);
|
|
482
|
+
}
|
|
483
|
+
catch (err) {
|
|
484
|
+
warn(`Markdown migration failed: ${String(err)}`);
|
|
485
|
+
warn('Make sure Keyoku is running (it will auto-start when OpenClaw loads the plugin)');
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
// Migrate vector stores
|
|
489
|
+
if (hasVectorStores) {
|
|
490
|
+
try {
|
|
491
|
+
const vsResult = await migrateAllVectorStores({
|
|
492
|
+
client,
|
|
493
|
+
entityId,
|
|
494
|
+
memoryDir: OPENCLAW_MEMORY_DIR,
|
|
495
|
+
logger: console,
|
|
496
|
+
});
|
|
497
|
+
success(`Vector store: ${vsResult.imported} imported, ${vsResult.skipped} skipped`);
|
|
498
|
+
}
|
|
499
|
+
catch (err) {
|
|
500
|
+
warn(`Vector store migration failed: ${String(err)}`);
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
else {
|
|
505
|
+
log('Skipping migration. You can run it later with: openclaw memory migrate');
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
// Step 11: Health check
|
|
509
|
+
console.log('');
|
|
510
|
+
await healthCheck();
|
|
511
|
+
// Done — close readline before exiting
|
|
512
|
+
closeTtyReadline();
|
|
513
|
+
console.log('\n Setup complete!\n');
|
|
514
|
+
log('Restart OpenClaw to load the plugin:');
|
|
515
|
+
log(' openclaw restart (or close and reopen your editor)');
|
|
516
|
+
console.log('');
|
|
517
|
+
log('The plugin will auto-start Keyoku when OpenClaw loads.');
|
|
518
|
+
log('Your agent now has persistent memory and heartbeat awareness.');
|
|
519
|
+
log('Run `openclaw memory stats` to check your memory status.');
|
|
520
|
+
log('Run `openclaw memory migrate` to migrate data later.\n');
|
|
521
|
+
}
|
|
522
|
+
//# sourceMappingURL=init.js.map
|
package/dist/init.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vector store migration — imports OpenClaw's SQLite-based vector store into Keyoku.
|
|
3
|
+
*
|
|
4
|
+
* OpenClaw stores memory chunks in SQLite at ~/.openclaw/memory/<agentId>.sqlite
|
|
5
|
+
* with a `chunks` table (id, path, source, text, embedding, start_line, end_line).
|
|
6
|
+
*
|
|
7
|
+
* This migrator reads the text from each chunk, deduplicates against existing
|
|
8
|
+
* Keyoku memories, and stores each unique chunk. Embeddings are NOT migrated —
|
|
9
|
+
* Keyoku re-embeds with its own model.
|
|
10
|
+
*/
|
|
11
|
+
import type { KeyokuClient } from '@keyoku/memory';
|
|
12
|
+
export interface VectorMigrationResult {
|
|
13
|
+
totalChunks: number;
|
|
14
|
+
imported: number;
|
|
15
|
+
skipped: number;
|
|
16
|
+
errors: number;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Discover OpenClaw SQLite memory databases.
|
|
20
|
+
*/
|
|
21
|
+
export declare function discoverVectorDbs(memoryDir: string): string[];
|
|
22
|
+
/**
|
|
23
|
+
* Migrate a single OpenClaw SQLite vector store into Keyoku.
|
|
24
|
+
*/
|
|
25
|
+
export declare function migrateVectorStore(params: {
|
|
26
|
+
client: KeyokuClient;
|
|
27
|
+
entityId: string;
|
|
28
|
+
sqlitePath: string;
|
|
29
|
+
agentId?: string;
|
|
30
|
+
dryRun?: boolean;
|
|
31
|
+
batchSize?: number;
|
|
32
|
+
delayMs?: number;
|
|
33
|
+
logger?: {
|
|
34
|
+
info: (msg: string) => void;
|
|
35
|
+
warn: (msg: string) => void;
|
|
36
|
+
};
|
|
37
|
+
}): Promise<VectorMigrationResult>;
|
|
38
|
+
/**
|
|
39
|
+
* Migrate all OpenClaw vector stores found in a directory.
|
|
40
|
+
*/
|
|
41
|
+
export declare function migrateAllVectorStores(params: {
|
|
42
|
+
client: KeyokuClient;
|
|
43
|
+
entityId: string;
|
|
44
|
+
memoryDir: string;
|
|
45
|
+
agentId?: string;
|
|
46
|
+
dryRun?: boolean;
|
|
47
|
+
logger?: {
|
|
48
|
+
info: (msg: string) => void;
|
|
49
|
+
warn: (msg: string) => void;
|
|
50
|
+
};
|
|
51
|
+
}): Promise<VectorMigrationResult>;
|
|
52
|
+
//# sourceMappingURL=migrate-vector-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate-vector-store.d.ts","sourceRoot":"","sources":["../src/migrate-vector-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAyBnD,MAAM,WAAW,qBAAqB;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAeD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAK7D;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE;IAC/C,MAAM,EAAE,YAAY,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE;QAAE,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;QAAC,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;KAAE,CAAC;CACvE,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAsGjC;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,MAAM,EAAE;IACnD,MAAM,EAAE,YAAY,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE;QAAE,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;QAAC,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;KAAE,CAAC;CACvE,GAAG,OAAO,CAAC,qBAAqB,CAAC,CA6BjC"}
|