@kraki/tentacle 0.1.1 → 0.2.1
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/README.md +12 -0
- package/dist/cli.js +11 -10
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +7 -5
- package/dist/config.js +36 -24
- package/dist/config.js.map +1 -1
- package/dist/daemon-worker.js +9 -8
- package/dist/daemon-worker.js.map +1 -1
- package/dist/daemon.d.ts +1 -1
- package/dist/daemon.js +12 -39
- package/dist/daemon.js.map +1 -1
- package/dist/logger.d.ts +1 -1
- package/dist/logger.js +4 -6
- package/dist/logger.js.map +1 -1
- package/dist/relay-client.d.ts +29 -9
- package/dist/relay-client.js +202 -58
- package/dist/relay-client.js.map +1 -1
- package/dist/session-manager.d.ts +4 -0
- package/dist/session-manager.js +10 -1
- package/dist/session-manager.js.map +1 -1
- package/dist/setup.js +13 -15
- package/dist/setup.js.map +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -50,6 +50,18 @@ The hosted web app lives at:
|
|
|
50
50
|
|
|
51
51
|
- `https://kraki.corelli.cloud`
|
|
52
52
|
|
|
53
|
+
## What tentacle handles
|
|
54
|
+
|
|
55
|
+
Beyond bridging agent events, tentacle is responsible for several things that used to live on the relay:
|
|
56
|
+
|
|
57
|
+
- **Sequence numbers and timestamps** — assigned locally by tentacle, not by the relay
|
|
58
|
+
- **Message buffering** — tentacle buffers messages and handles replay when devices reconnect
|
|
59
|
+
- **Session lifecycle** — session create, update, and close are managed here
|
|
60
|
+
- **Auto-approval** — tools on a local allowed list are approved automatically without user interaction
|
|
61
|
+
- **Encryption** — all outgoing messages are encrypted before leaving the machine
|
|
62
|
+
|
|
63
|
+
The relay is a thin forwarder. Tentacle and the frontend own the application logic.
|
|
64
|
+
|
|
53
65
|
## Useful commands
|
|
54
66
|
|
|
55
67
|
```bash
|
package/dist/cli.js
CHANGED
|
@@ -14,13 +14,12 @@
|
|
|
14
14
|
*/
|
|
15
15
|
import chalk from 'chalk';
|
|
16
16
|
import { join } from 'node:path';
|
|
17
|
-
import { homedir } from 'node:os';
|
|
18
17
|
import { spawn } from 'node:child_process';
|
|
19
18
|
import { readFileSync, existsSync, unlinkSync } from 'node:fs';
|
|
20
19
|
import { fileURLToPath } from 'node:url';
|
|
21
20
|
import { dirname } from 'node:path';
|
|
22
21
|
import { select } from '@inquirer/prompts';
|
|
23
|
-
import { loadConfig, saveConfig,
|
|
22
|
+
import { loadConfig, saveConfig, getConfigPath, getKrakiHome, getLogVerbosity, loadChannelKey } from './config.js';
|
|
24
23
|
import { isDaemonRunning, getDaemonStatus, startDaemon, stopDaemon } from './daemon.js';
|
|
25
24
|
import { runSetup } from './setup.js';
|
|
26
25
|
import { requestPairingToken, buildPairingUrl, renderQrToTerminal } from './pair.js';
|
|
@@ -83,11 +82,10 @@ async function cmdStart() {
|
|
|
83
82
|
console.log(chalk.dim(' Stopped..'));
|
|
84
83
|
if (action === 'clean') {
|
|
85
84
|
const { rmSync } = await import('node:fs');
|
|
86
|
-
const
|
|
87
|
-
const { homedir } = await import('node:os');
|
|
85
|
+
const krakiHome = getKrakiHome();
|
|
88
86
|
try {
|
|
89
|
-
rmSync(
|
|
90
|
-
console.log(chalk.dim(
|
|
87
|
+
rmSync(krakiHome, { recursive: true, force: true });
|
|
88
|
+
console.log(chalk.dim(` Cleared ${krakiHome}`));
|
|
91
89
|
}
|
|
92
90
|
catch { /* already clean */ }
|
|
93
91
|
config = await runSetup();
|
|
@@ -153,9 +151,9 @@ function cmdStatus() {
|
|
|
153
151
|
console.log('');
|
|
154
152
|
}
|
|
155
153
|
function cmdLogs(follow) {
|
|
156
|
-
const logDir = join(
|
|
154
|
+
const logDir = join(getKrakiHome(), 'logs');
|
|
157
155
|
if (!existsSync(logDir)) {
|
|
158
|
-
console.log(chalk.yellow(
|
|
156
|
+
console.log(chalk.yellow(`No log directory found at ${logDir}`));
|
|
159
157
|
return;
|
|
160
158
|
}
|
|
161
159
|
const args = follow
|
|
@@ -201,7 +199,7 @@ function cmdConfigLog(verbosity) {
|
|
|
201
199
|
console.log(chalk.dim('Restart Kraki to apply the new log level.'));
|
|
202
200
|
}
|
|
203
201
|
async function cmdConfigReset() {
|
|
204
|
-
const configPath =
|
|
202
|
+
const configPath = getConfigPath();
|
|
205
203
|
try {
|
|
206
204
|
unlinkSync(configPath);
|
|
207
205
|
console.log(chalk.dim('Config deleted.'));
|
|
@@ -225,13 +223,16 @@ async function cmdConnect() {
|
|
|
225
223
|
try {
|
|
226
224
|
// Resolve auth token (same logic as daemon-worker)
|
|
227
225
|
let token;
|
|
228
|
-
if (config.authMethod === '
|
|
226
|
+
if (config.authMethod === 'github_token') {
|
|
229
227
|
try {
|
|
230
228
|
const { execSync } = await import('node:child_process');
|
|
231
229
|
token = execSync('gh auth token 2>/dev/null', { encoding: 'utf8' }).trim() || undefined;
|
|
232
230
|
}
|
|
233
231
|
catch { /* ignore */ }
|
|
234
232
|
}
|
|
233
|
+
else if (config.authMethod === 'open') {
|
|
234
|
+
token = 'dev';
|
|
235
|
+
}
|
|
235
236
|
else {
|
|
236
237
|
token = loadChannelKey() ?? undefined;
|
|
237
238
|
}
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Configuration management for Kraki tentacle.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* Daemon PID is tracked at ~/.kraki/daemon.pid.
|
|
4
|
+
* By default Kraki stores state under ~/.kraki. For local development and tests,
|
|
5
|
+
* the root can be overridden with KRAKI_HOME.
|
|
7
6
|
*/
|
|
8
7
|
export type KrakiLogVerbosity = 'normal' | 'verbose';
|
|
9
8
|
export interface KrakiConfig {
|
|
10
9
|
relay: string;
|
|
11
|
-
authMethod: '
|
|
10
|
+
authMethod: 'github_token' | 'github_oauth' | 'apikey' | 'open';
|
|
12
11
|
device: {
|
|
13
12
|
name: string;
|
|
14
13
|
id?: string;
|
|
@@ -18,10 +17,13 @@ export interface KrakiConfig {
|
|
|
18
17
|
};
|
|
19
18
|
}
|
|
20
19
|
export declare const DEFAULT_LOG_VERBOSITY: KrakiLogVerbosity;
|
|
20
|
+
export declare function getKrakiHome(): string;
|
|
21
21
|
export declare function getConfigDir(): string;
|
|
22
|
+
export declare function getConfigPath(): string;
|
|
23
|
+
export declare function getLogsDir(): string;
|
|
22
24
|
/**
|
|
23
25
|
* Get the stable device ID for this machine.
|
|
24
|
-
* Generated once and persisted
|
|
26
|
+
* Generated once and persisted under the current Kraki home.
|
|
25
27
|
* Sent to the head on auth so reconnections don't create ghost devices.
|
|
26
28
|
*/
|
|
27
29
|
export declare function getOrCreateDeviceId(): string;
|
package/dist/config.js
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Configuration management for Kraki tentacle.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* Daemon PID is tracked at ~/.kraki/daemon.pid.
|
|
4
|
+
* By default Kraki stores state under ~/.kraki. For local development and tests,
|
|
5
|
+
* the root can be overridden with KRAKI_HOME.
|
|
7
6
|
*/
|
|
8
7
|
import { mkdirSync, readFileSync, writeFileSync, unlinkSync, existsSync, chmodSync } from 'node:fs';
|
|
9
8
|
import { join } from 'node:path';
|
|
@@ -11,24 +10,36 @@ import { homedir } from 'node:os';
|
|
|
11
10
|
import { randomUUID } from 'node:crypto';
|
|
12
11
|
export const DEFAULT_LOG_VERBOSITY = 'normal';
|
|
13
12
|
// ── Paths ───────────────────────────────────────────────
|
|
14
|
-
|
|
15
|
-
const
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
const DEVICE_ID_PATH = join(CONFIG_DIR, 'device-id');
|
|
13
|
+
export function getKrakiHome() {
|
|
14
|
+
const override = process.env.KRAKI_HOME?.trim();
|
|
15
|
+
return override ? join(override) : join(homedir(), '.kraki');
|
|
16
|
+
}
|
|
19
17
|
export function getConfigDir() {
|
|
20
|
-
|
|
21
|
-
|
|
18
|
+
const dir = getKrakiHome();
|
|
19
|
+
mkdirSync(dir, { recursive: true });
|
|
20
|
+
return dir;
|
|
21
|
+
}
|
|
22
|
+
export function getConfigPath() {
|
|
23
|
+
return join(getKrakiHome(), 'config.json');
|
|
24
|
+
}
|
|
25
|
+
export function getLogsDir() {
|
|
26
|
+
const dir = join(getKrakiHome(), 'logs');
|
|
27
|
+
mkdirSync(dir, { recursive: true });
|
|
28
|
+
return dir;
|
|
29
|
+
}
|
|
30
|
+
function getDeviceIdPath() {
|
|
31
|
+
return join(getKrakiHome(), 'device-id');
|
|
22
32
|
}
|
|
23
33
|
// ── Device ID ───────────────────────────────────────────
|
|
24
34
|
/**
|
|
25
35
|
* Get the stable device ID for this machine.
|
|
26
|
-
* Generated once and persisted
|
|
36
|
+
* Generated once and persisted under the current Kraki home.
|
|
27
37
|
* Sent to the head on auth so reconnections don't create ghost devices.
|
|
28
38
|
*/
|
|
29
39
|
export function getOrCreateDeviceId() {
|
|
40
|
+
const deviceIdPath = getDeviceIdPath();
|
|
30
41
|
try {
|
|
31
|
-
const existing = readFileSync(
|
|
42
|
+
const existing = readFileSync(deviceIdPath, 'utf8').trim();
|
|
32
43
|
if (existing)
|
|
33
44
|
return existing;
|
|
34
45
|
}
|
|
@@ -37,12 +48,12 @@ export function getOrCreateDeviceId() {
|
|
|
37
48
|
}
|
|
38
49
|
const id = `dev_${randomUUID().slice(0, 12)}`;
|
|
39
50
|
getConfigDir();
|
|
40
|
-
writeFileSync(
|
|
51
|
+
writeFileSync(deviceIdPath, id, 'utf8');
|
|
41
52
|
return id;
|
|
42
53
|
}
|
|
43
54
|
// ── Config ──────────────────────────────────────────────
|
|
44
55
|
export function configExists() {
|
|
45
|
-
return existsSync(
|
|
56
|
+
return existsSync(getConfigPath());
|
|
46
57
|
}
|
|
47
58
|
export function getLogVerbosity(config) {
|
|
48
59
|
return config?.logging?.verbosity === 'verbose' ? 'verbose' : DEFAULT_LOG_VERBOSITY;
|
|
@@ -56,7 +67,7 @@ function normalizeConfig(config) {
|
|
|
56
67
|
}
|
|
57
68
|
export function loadConfig() {
|
|
58
69
|
try {
|
|
59
|
-
const raw = readFileSync(
|
|
70
|
+
const raw = readFileSync(getConfigPath(), 'utf8');
|
|
60
71
|
return normalizeConfig(JSON.parse(raw));
|
|
61
72
|
}
|
|
62
73
|
catch {
|
|
@@ -65,20 +76,21 @@ export function loadConfig() {
|
|
|
65
76
|
}
|
|
66
77
|
export function saveConfig(config) {
|
|
67
78
|
getConfigDir();
|
|
68
|
-
writeFileSync(
|
|
79
|
+
writeFileSync(getConfigPath(), JSON.stringify(normalizeConfig(config), null, 2) + '\n', 'utf8');
|
|
69
80
|
}
|
|
70
81
|
// ── Channel key ─────────────────────────────────────────
|
|
71
82
|
export function getChannelKeyPath() {
|
|
72
|
-
return
|
|
83
|
+
return join(getKrakiHome(), 'channel.key');
|
|
73
84
|
}
|
|
74
85
|
export function saveChannelKey(key) {
|
|
75
86
|
getConfigDir();
|
|
76
|
-
|
|
77
|
-
|
|
87
|
+
const keyPath = getChannelKeyPath();
|
|
88
|
+
writeFileSync(keyPath, key, 'utf8');
|
|
89
|
+
chmodSync(keyPath, 0o600);
|
|
78
90
|
}
|
|
79
91
|
export function loadChannelKey() {
|
|
80
92
|
try {
|
|
81
|
-
return readFileSync(
|
|
93
|
+
return readFileSync(getChannelKeyPath(), 'utf8').trim();
|
|
82
94
|
}
|
|
83
95
|
catch {
|
|
84
96
|
return null;
|
|
@@ -86,15 +98,15 @@ export function loadChannelKey() {
|
|
|
86
98
|
}
|
|
87
99
|
// ── Daemon PID ──────────────────────────────────────────
|
|
88
100
|
export function getDaemonPidPath() {
|
|
89
|
-
return
|
|
101
|
+
return join(getKrakiHome(), 'daemon.pid');
|
|
90
102
|
}
|
|
91
103
|
export function saveDaemonPid(pid) {
|
|
92
104
|
getConfigDir();
|
|
93
|
-
writeFileSync(
|
|
105
|
+
writeFileSync(getDaemonPidPath(), String(pid), 'utf8');
|
|
94
106
|
}
|
|
95
107
|
export function loadDaemonPid() {
|
|
96
108
|
try {
|
|
97
|
-
const raw = readFileSync(
|
|
109
|
+
const raw = readFileSync(getDaemonPidPath(), 'utf8').trim();
|
|
98
110
|
const pid = parseInt(raw, 10);
|
|
99
111
|
return Number.isFinite(pid) ? pid : null;
|
|
100
112
|
}
|
|
@@ -104,7 +116,7 @@ export function loadDaemonPid() {
|
|
|
104
116
|
}
|
|
105
117
|
export function clearDaemonPid() {
|
|
106
118
|
try {
|
|
107
|
-
unlinkSync(
|
|
119
|
+
unlinkSync(getDaemonPidPath());
|
|
108
120
|
}
|
|
109
121
|
catch {
|
|
110
122
|
// File may not exist — that's fine
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/daemon-worker.js
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* KeyManager handles E2E encryption keys.
|
|
11
11
|
*/
|
|
12
12
|
import { execSync } from 'node:child_process';
|
|
13
|
-
import { loadConfig, loadChannelKey, getOrCreateDeviceId } from './config.js';
|
|
13
|
+
import { loadConfig, loadChannelKey, getOrCreateDeviceId, getConfigPath, getChannelKeyPath } from './config.js';
|
|
14
14
|
import { CopilotAdapter } from './adapters/copilot.js';
|
|
15
15
|
import { RelayClient } from './relay-client.js';
|
|
16
16
|
import { SessionManager } from './session-manager.js';
|
|
@@ -28,15 +28,17 @@ process.on('unhandledRejection', (reason) => {
|
|
|
28
28
|
});
|
|
29
29
|
export async function startWorker() {
|
|
30
30
|
logger.info('Daemon starting…');
|
|
31
|
+
const configPath = getConfigPath();
|
|
32
|
+
const channelKeyPath = getChannelKeyPath();
|
|
31
33
|
// 1. Load config
|
|
32
34
|
const config = loadConfig();
|
|
33
35
|
if (!config) {
|
|
34
|
-
logger.fatal(
|
|
36
|
+
logger.fatal({ configPath }, `No config found at ${configPath} — run \`kraki\` to set up`);
|
|
35
37
|
process.exit(1);
|
|
36
38
|
}
|
|
37
39
|
// 2. Resolve auth token
|
|
38
40
|
let token;
|
|
39
|
-
if (config.authMethod === '
|
|
41
|
+
if (config.authMethod === 'github_token') {
|
|
40
42
|
try {
|
|
41
43
|
token = execSync('gh auth token 2>/dev/null', { encoding: 'utf8' }).trim() || undefined;
|
|
42
44
|
if (token)
|
|
@@ -50,10 +52,10 @@ export async function startWorker() {
|
|
|
50
52
|
const channelKey = loadChannelKey();
|
|
51
53
|
if (channelKey) {
|
|
52
54
|
token = channelKey;
|
|
53
|
-
logger.debug(
|
|
55
|
+
logger.debug({ channelKeyPath }, `Loaded channel key from ${channelKeyPath}`);
|
|
54
56
|
}
|
|
55
57
|
else {
|
|
56
|
-
logger.warn(
|
|
58
|
+
logger.warn({ channelKeyPath }, `No channel key found at ${channelKeyPath}`);
|
|
57
59
|
}
|
|
58
60
|
}
|
|
59
61
|
// 3. Initialize components
|
|
@@ -86,6 +88,7 @@ export async function startWorker() {
|
|
|
86
88
|
deviceId,
|
|
87
89
|
capabilities: models.length > 0 ? { models } : undefined,
|
|
88
90
|
},
|
|
91
|
+
authMethod: config.authMethod,
|
|
89
92
|
token,
|
|
90
93
|
reconnectDelay: 3000,
|
|
91
94
|
}, keyManager);
|
|
@@ -94,11 +97,9 @@ export async function startWorker() {
|
|
|
94
97
|
};
|
|
95
98
|
relay.onAuthenticated = (info) => {
|
|
96
99
|
logger.info({
|
|
97
|
-
channel: info.channel,
|
|
98
100
|
deviceId: info.deviceId,
|
|
99
|
-
|
|
101
|
+
user: info.user?.login,
|
|
100
102
|
devices: info.devices.length,
|
|
101
|
-
sessions: info.sessions.length,
|
|
102
103
|
}, 'Connected to relay');
|
|
103
104
|
};
|
|
104
105
|
relay.onFatalError = (message) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daemon-worker.js","sourceRoot":"","sources":["../src/daemon-worker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"daemon-worker.js","sourceRoot":"","sources":["../src/daemon-worker.ts"],"names":[],"mappings":"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"}
|
package/dist/daemon.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Daemon process management for Kraki tentacle.
|
|
3
3
|
*
|
|
4
4
|
* The daemon runs as a detached child process executing daemon-worker.js.
|
|
5
|
-
* Its PID is tracked
|
|
5
|
+
* Its PID is tracked under the current Kraki home.
|
|
6
6
|
*/
|
|
7
7
|
import { type KrakiConfig } from './config.js';
|
|
8
8
|
export interface DaemonLaunchSpec {
|
package/dist/daemon.js
CHANGED
|
@@ -2,19 +2,16 @@
|
|
|
2
2
|
* Daemon process management for Kraki tentacle.
|
|
3
3
|
*
|
|
4
4
|
* The daemon runs as a detached child process executing daemon-worker.js.
|
|
5
|
-
* Its PID is tracked
|
|
5
|
+
* Its PID is tracked under the current Kraki home.
|
|
6
6
|
*/
|
|
7
|
-
import { spawn
|
|
7
|
+
import { spawn } from 'node:child_process';
|
|
8
8
|
import { closeSync, mkdirSync, openSync } from 'node:fs';
|
|
9
|
-
import { homedir } from 'node:os';
|
|
10
9
|
import { join, dirname, resolve } from 'node:path';
|
|
11
10
|
import { fileURLToPath } from 'node:url';
|
|
12
|
-
import { getLogVerbosity, saveDaemonPid, loadDaemonPid, clearDaemonPid, } from './config.js';
|
|
13
|
-
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
11
|
+
import { getLogsDir, getLogVerbosity, saveDaemonPid, loadDaemonPid, clearDaemonPid, } from './config.js';
|
|
14
12
|
const STARTUP_GRACE_MS = 1500;
|
|
15
|
-
const BOOTSTRAP_LOG_PATH = join(homedir(), '.kraki', 'logs', 'daemon-bootstrap.log');
|
|
16
13
|
export function getDaemonBootstrapLogPath() {
|
|
17
|
-
return
|
|
14
|
+
return join(getLogsDir(), 'daemon-bootstrap.log');
|
|
18
15
|
}
|
|
19
16
|
export function resolveDaemonLaunch(currentUrl = import.meta.url) {
|
|
20
17
|
const moduleDir = dirname(fileURLToPath(currentUrl));
|
|
@@ -38,7 +35,7 @@ export function resolveDaemonLaunch(currentUrl = import.meta.url) {
|
|
|
38
35
|
workerPath,
|
|
39
36
|
};
|
|
40
37
|
}
|
|
41
|
-
function waitForDaemonBootstrap(child, timeoutMs = STARTUP_GRACE_MS) {
|
|
38
|
+
function waitForDaemonBootstrap(child, bootstrapLogPath, timeoutMs = STARTUP_GRACE_MS) {
|
|
42
39
|
return new Promise((resolve, reject) => {
|
|
43
40
|
const cleanup = () => {
|
|
44
41
|
clearTimeout(timer);
|
|
@@ -47,11 +44,11 @@ function waitForDaemonBootstrap(child, timeoutMs = STARTUP_GRACE_MS) {
|
|
|
47
44
|
};
|
|
48
45
|
const onError = (err) => {
|
|
49
46
|
cleanup();
|
|
50
|
-
reject(new Error(`Kraki failed to start: ${err.message}. Check ${
|
|
47
|
+
reject(new Error(`Kraki failed to start: ${err.message}. Check ${bootstrapLogPath}`));
|
|
51
48
|
};
|
|
52
49
|
const onExit = (code, signal) => {
|
|
53
50
|
cleanup();
|
|
54
|
-
reject(new Error(`Kraki exited during startup (code ${code ?? 'null'}, signal ${signal ?? 'none'}). Check ${
|
|
51
|
+
reject(new Error(`Kraki exited during startup (code ${code ?? 'null'}, signal ${signal ?? 'none'}). Check ${bootstrapLogPath}`));
|
|
55
52
|
};
|
|
56
53
|
const timer = setTimeout(() => {
|
|
57
54
|
cleanup();
|
|
@@ -94,8 +91,9 @@ export async function startDaemon(config) {
|
|
|
94
91
|
stopDaemon();
|
|
95
92
|
const launch = resolveDaemonLaunch();
|
|
96
93
|
launch.env.LOG_LEVEL = getLogVerbosity(config) === 'verbose' ? 'debug' : 'info';
|
|
97
|
-
|
|
98
|
-
|
|
94
|
+
const bootstrapLogPath = getDaemonBootstrapLogPath();
|
|
95
|
+
mkdirSync(dirname(bootstrapLogPath), { recursive: true });
|
|
96
|
+
const bootstrapFd = openSync(bootstrapLogPath, 'w');
|
|
99
97
|
const child = spawn(launch.runtime, launch.args, {
|
|
100
98
|
detached: true,
|
|
101
99
|
stdio: ['ignore', bootstrapFd, bootstrapFd],
|
|
@@ -104,10 +102,10 @@ export async function startDaemon(config) {
|
|
|
104
102
|
});
|
|
105
103
|
closeSync(bootstrapFd);
|
|
106
104
|
if (!child.pid) {
|
|
107
|
-
throw new Error(`Kraki failed to start: no daemon PID returned. Check ${
|
|
105
|
+
throw new Error(`Kraki failed to start: no daemon PID returned. Check ${bootstrapLogPath}`);
|
|
108
106
|
}
|
|
109
107
|
try {
|
|
110
|
-
await waitForDaemonBootstrap(child);
|
|
108
|
+
await waitForDaemonBootstrap(child, bootstrapLogPath);
|
|
111
109
|
}
|
|
112
110
|
catch (err) {
|
|
113
111
|
try {
|
|
@@ -133,31 +131,6 @@ export function stopDaemon() {
|
|
|
133
131
|
}
|
|
134
132
|
clearDaemonPid();
|
|
135
133
|
}
|
|
136
|
-
// Kill any orphaned daemon-worker processes (missed by PID tracking)
|
|
137
|
-
killOrphanedWorkers();
|
|
138
134
|
return pid !== null;
|
|
139
135
|
}
|
|
140
|
-
/**
|
|
141
|
-
* Find and kill any daemon-worker processes not tracked by the PID file.
|
|
142
|
-
*/
|
|
143
|
-
function killOrphanedWorkers() {
|
|
144
|
-
try {
|
|
145
|
-
const output = execSync('ps -eo pid,command', { encoding: 'utf8' });
|
|
146
|
-
for (const line of output.split('\n')) {
|
|
147
|
-
if (line.includes('daemon-worker') && !line.includes('grep')) {
|
|
148
|
-
const pidStr = line.trim().split(/\s+/)[0];
|
|
149
|
-
const orphanPid = parseInt(pidStr, 10);
|
|
150
|
-
if (orphanPid && orphanPid !== process.pid) {
|
|
151
|
-
try {
|
|
152
|
-
process.kill(orphanPid, 'SIGTERM');
|
|
153
|
-
}
|
|
154
|
-
catch { /* already gone */ }
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
catch {
|
|
160
|
-
// ps not available — skip orphan cleanup
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
136
|
//# sourceMappingURL=daemon.js.map
|
package/dist/daemon.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daemon.js","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"daemon.js","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"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"}
|
package/dist/logger.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Structured logging for Kraki tentacle.
|
|
3
3
|
*
|
|
4
4
|
* - Development: pretty-prints to stdout
|
|
5
|
-
* - Production: writes to rotating log files under
|
|
5
|
+
* - Production: writes to rotating log files under the current Kraki home
|
|
6
6
|
*/
|
|
7
7
|
import pino from 'pino';
|
|
8
8
|
export declare function createLogger(name: string): pino.Logger;
|
package/dist/logger.js
CHANGED
|
@@ -2,13 +2,11 @@
|
|
|
2
2
|
* Structured logging for Kraki tentacle.
|
|
3
3
|
*
|
|
4
4
|
* - Development: pretty-prints to stdout
|
|
5
|
-
* - Production: writes to rotating log files under
|
|
5
|
+
* - Production: writes to rotating log files under the current Kraki home
|
|
6
6
|
*/
|
|
7
7
|
import pino from 'pino';
|
|
8
|
-
import { mkdirSync } from 'node:fs';
|
|
9
8
|
import { join } from 'node:path';
|
|
10
|
-
import {
|
|
11
|
-
const LOG_DIR = join(homedir(), '.kraki', 'logs');
|
|
9
|
+
import { getLogsDir } from './config.js';
|
|
12
10
|
export function createLogger(name) {
|
|
13
11
|
const level = process.env.LOG_LEVEL ?? 'info';
|
|
14
12
|
const isDev = process.env.NODE_ENV !== 'production';
|
|
@@ -16,11 +14,11 @@ export function createLogger(name) {
|
|
|
16
14
|
return pino({ name, level });
|
|
17
15
|
}
|
|
18
16
|
// Production: rotate log files via pino-roll
|
|
19
|
-
|
|
17
|
+
const logDir = getLogsDir();
|
|
20
18
|
const transport = pino.transport({
|
|
21
19
|
target: 'pino-roll',
|
|
22
20
|
options: {
|
|
23
|
-
file: join(
|
|
21
|
+
file: join(logDir, `${name}.log`),
|
|
24
22
|
size: '5m',
|
|
25
23
|
limit: { count: 5 },
|
|
26
24
|
},
|
package/dist/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM,CAAC;IAC9C,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAC;IAEpD,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC/B,CAAC;IAED,6CAA6C;IAC7C,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAE5B,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAC/B,MAAM,EAAE,WAAW;QACnB,OAAO,EAAE;YACP,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC;YACjC,IAAI,EAAE,IAAI;YACV,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;SACpB;KACF,CAAC,CAAC;IAEH,OAAO,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,SAAS,CAAC,CAAC;AAC1C,CAAC"}
|