@suzuke/agend 1.0.0 → 1.0.2
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 +50 -528
- package/README.zh-TW.md +49 -474
- package/dist/channel/adapters/discord.js +1 -1
- package/dist/channel/adapters/discord.js.map +1 -1
- package/dist/channel/factory.js +2 -2
- package/dist/channel/factory.js.map +1 -1
- package/dist/channel/mcp-tools.js +3 -3
- package/dist/channel/mcp-tools.js.map +1 -1
- package/dist/cli.js +1 -1
- package/dist/cli.js.map +1 -1
- package/dist/daemon.js +37 -36
- package/dist/daemon.js.map +1 -1
- package/dist/export-import.js +2 -2
- package/dist/export-import.js.map +1 -1
- package/dist/fleet-manager.js +5 -8
- package/dist/fleet-manager.js.map +1 -1
- package/dist/setup-wizard.js +2 -2
- package/dist/setup-wizard.js.map +1 -1
- package/dist/tmux-manager.js +3 -2
- package/dist/tmux-manager.js.map +1 -1
- package/package.json +3 -5
- package/dist/approval/approval-server.d.ts +0 -30
- package/dist/approval/approval-server.js +0 -156
- package/dist/approval/approval-server.js.map +0 -1
- package/dist/approval/tmux-prompt-detector.d.ts +0 -34
- package/dist/approval/tmux-prompt-detector.js +0 -264
- package/dist/approval/tmux-prompt-detector.js.map +0 -1
- package/dist/backend/approval-strategy.d.ts +0 -14
- package/dist/backend/approval-strategy.js +0 -2
- package/dist/backend/approval-strategy.js.map +0 -1
- package/dist/backend/hook-based-approval.d.ts +0 -20
- package/dist/backend/hook-based-approval.js +0 -41
- package/dist/backend/hook-based-approval.js.map +0 -1
- package/dist/container-manager.d.ts +0 -24
- package/dist/container-manager.js +0 -148
- package/dist/container-manager.js.map +0 -1
- package/dist/db.d.ts +0 -10
- package/dist/db.js +0 -43
- package/dist/db.js.map +0 -1
- package/dist/install-recorder.d.ts +0 -30
- package/dist/install-recorder.js +0 -159
- package/dist/install-recorder.js.map +0 -1
- package/dist/meeting/orchestrator.d.ts +0 -30
- package/dist/meeting/orchestrator.js +0 -355
- package/dist/meeting/orchestrator.js.map +0 -1
- package/dist/meeting/prompt-builder.d.ts +0 -12
- package/dist/meeting/prompt-builder.js +0 -96
- package/dist/meeting/prompt-builder.js.map +0 -1
- package/dist/meeting/role-assigner.d.ts +0 -2
- package/dist/meeting/role-assigner.js +0 -25
- package/dist/meeting/role-assigner.js.map +0 -1
- package/dist/meeting/types.d.ts +0 -21
- package/dist/meeting/types.js +0 -2
- package/dist/meeting/types.js.map +0 -1
- package/dist/meeting-manager.d.ts +0 -10
- package/dist/meeting-manager.js +0 -38
- package/dist/meeting-manager.js.map +0 -1
- package/dist/memory-layer.d.ts +0 -13
- package/dist/memory-layer.js +0 -44
- package/dist/memory-layer.js.map +0 -1
- package/dist/plugin/agend/.mcp.json +0 -9
- package/dist/plugin/ccd-channel/.claude-plugin/plugin.json +0 -5
- package/dist/plugin/ccd-channel/.mcp.json +0 -9
- package/dist/process-manager.d.ts +0 -31
- package/dist/process-manager.js +0 -264
- package/dist/process-manager.js.map +0 -1
package/dist/memory-layer.js
DELETED
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import { EventEmitter } from "node:events";
|
|
2
|
-
import { watch } from "chokidar";
|
|
3
|
-
import { readFileSync } from "node:fs";
|
|
4
|
-
export class MemoryLayer extends EventEmitter {
|
|
5
|
-
memoryDir;
|
|
6
|
-
db;
|
|
7
|
-
logger;
|
|
8
|
-
watcher = null;
|
|
9
|
-
constructor(memoryDir, db, logger) {
|
|
10
|
-
super();
|
|
11
|
-
this.memoryDir = memoryDir;
|
|
12
|
-
this.db = db;
|
|
13
|
-
this.logger = logger;
|
|
14
|
-
}
|
|
15
|
-
async start() {
|
|
16
|
-
this.logger.info({ dir: this.memoryDir }, "Watching memory directory");
|
|
17
|
-
this.watcher = watch(this.memoryDir, {
|
|
18
|
-
ignoreInitial: false,
|
|
19
|
-
awaitWriteFinish: { stabilityThreshold: 200 },
|
|
20
|
-
});
|
|
21
|
-
this.watcher.on("add", (path) => this.backupFile(path));
|
|
22
|
-
this.watcher.on("change", (path) => this.backupFile(path));
|
|
23
|
-
this.watcher.on("error", (err) => this.logger.error({ err }, "Memory watcher error"));
|
|
24
|
-
}
|
|
25
|
-
async stop() {
|
|
26
|
-
if (this.watcher) {
|
|
27
|
-
await this.watcher.close();
|
|
28
|
-
this.watcher = null;
|
|
29
|
-
}
|
|
30
|
-
this.db.close();
|
|
31
|
-
}
|
|
32
|
-
backupFile(filePath) {
|
|
33
|
-
try {
|
|
34
|
-
const content = readFileSync(filePath, "utf-8");
|
|
35
|
-
this.db.insertBackup(filePath, content, null);
|
|
36
|
-
this.logger.info({ filePath }, "Memory file backed up");
|
|
37
|
-
this.emit("file_changed", filePath);
|
|
38
|
-
}
|
|
39
|
-
catch (err) {
|
|
40
|
-
this.logger.error({ err, filePath }, "Failed to backup memory file");
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
//# sourceMappingURL=memory-layer.js.map
|
package/dist/memory-layer.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"memory-layer.js","sourceRoot":"","sources":["../src/memory-layer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAkB,MAAM,UAAU,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAIvC,MAAM,OAAO,WAAY,SAAQ,YAAY;IAIjC;IACA;IACA;IALF,OAAO,GAAqB,IAAI,CAAC;IAEzC,YACU,SAAiB,EACjB,EAAY,EACZ,MAAc;QAEtB,KAAK,EAAE,CAAC;QAJA,cAAS,GAAT,SAAS,CAAQ;QACjB,OAAE,GAAF,EAAE,CAAU;QACZ,WAAM,GAAN,MAAM,CAAQ;IAGxB,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,2BAA2B,CAAC,CAAC;QAEvE,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE;YACnC,aAAa,EAAE,KAAK;YACpB,gBAAgB,EAAE,EAAE,kBAAkB,EAAE,GAAG,EAAE;SAC9C,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QACxD,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3D,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,sBAAsB,CAAC,CAAC,CAAC;IACxF,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YAC3B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACtB,CAAC;QACD,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;IAEO,UAAU,CAAC,QAAgB;QACjC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAChD,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;YAC9C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,EAAE,uBAAuB,CAAC,CAAC;YACxD,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACtC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,8BAA8B,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;CACF"}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { EventEmitter } from "node:events";
|
|
2
|
-
import type { DaemonConfig } from "./types.js";
|
|
3
|
-
import type { Logger } from "./logger.js";
|
|
4
|
-
export declare const STATUSLINE_FILE: string;
|
|
5
|
-
export declare class ProcessManager extends EventEmitter {
|
|
6
|
-
private config;
|
|
7
|
-
private logger;
|
|
8
|
-
private term;
|
|
9
|
-
private running;
|
|
10
|
-
private retryCount;
|
|
11
|
-
private shuttingDown;
|
|
12
|
-
private restartTimer;
|
|
13
|
-
private uptimeTimer;
|
|
14
|
-
private sessionId;
|
|
15
|
-
private suppressSessionCapture;
|
|
16
|
-
constructor(config: DaemonConfig, logger: Logger);
|
|
17
|
-
isRunning(): boolean;
|
|
18
|
-
start(): Promise<void>;
|
|
19
|
-
stop(): Promise<void>;
|
|
20
|
-
/** Clear saved session ID so next start creates a fresh session. */
|
|
21
|
-
clearSessionId(): void;
|
|
22
|
-
sendInput(text: string): void;
|
|
23
|
-
private ensureStatusLineScript;
|
|
24
|
-
private ensureSpawnHelper;
|
|
25
|
-
private resolveClaudeBin;
|
|
26
|
-
private spawnChild;
|
|
27
|
-
private scheduleRestart;
|
|
28
|
-
private getBackoffDelay;
|
|
29
|
-
private loadSessionId;
|
|
30
|
-
private saveSessionId;
|
|
31
|
-
}
|
package/dist/process-manager.js
DELETED
|
@@ -1,264 +0,0 @@
|
|
|
1
|
-
import pty from "node-pty";
|
|
2
|
-
import { EventEmitter } from "node:events";
|
|
3
|
-
import { execSync, execFileSync } from "node:child_process";
|
|
4
|
-
import { existsSync, readFileSync, writeFileSync } from "node:fs";
|
|
5
|
-
import { join } from "node:path";
|
|
6
|
-
import { homedir } from "node:os";
|
|
7
|
-
import stripAnsi from "strip-ansi";
|
|
8
|
-
const DATA_DIR = join(homedir(), ".claude-channel-daemon");
|
|
9
|
-
const SESSION_FILE = join(DATA_DIR, "session-id");
|
|
10
|
-
export const STATUSLINE_FILE = join(DATA_DIR, "statusline.json");
|
|
11
|
-
const STATUSLINE_SCRIPT = join(DATA_DIR, "statusline.sh");
|
|
12
|
-
export class ProcessManager extends EventEmitter {
|
|
13
|
-
config;
|
|
14
|
-
logger;
|
|
15
|
-
term = null;
|
|
16
|
-
running = false;
|
|
17
|
-
retryCount = 0;
|
|
18
|
-
shuttingDown = false;
|
|
19
|
-
restartTimer = null;
|
|
20
|
-
uptimeTimer = null;
|
|
21
|
-
sessionId = null;
|
|
22
|
-
suppressSessionCapture = false;
|
|
23
|
-
constructor(config, logger) {
|
|
24
|
-
super();
|
|
25
|
-
this.config = config;
|
|
26
|
-
this.logger = logger;
|
|
27
|
-
this.loadSessionId();
|
|
28
|
-
}
|
|
29
|
-
isRunning() {
|
|
30
|
-
return this.running;
|
|
31
|
-
}
|
|
32
|
-
async start() {
|
|
33
|
-
if (this.running) {
|
|
34
|
-
this.logger.warn("Process already running");
|
|
35
|
-
return;
|
|
36
|
-
}
|
|
37
|
-
this.shuttingDown = false;
|
|
38
|
-
this.suppressSessionCapture = false;
|
|
39
|
-
this.ensureSpawnHelper();
|
|
40
|
-
this.ensureStatusLineScript();
|
|
41
|
-
this.spawnChild();
|
|
42
|
-
}
|
|
43
|
-
async stop() {
|
|
44
|
-
this.shuttingDown = true;
|
|
45
|
-
if (this.restartTimer) {
|
|
46
|
-
clearTimeout(this.restartTimer);
|
|
47
|
-
this.restartTimer = null;
|
|
48
|
-
}
|
|
49
|
-
if (this.uptimeTimer) {
|
|
50
|
-
clearTimeout(this.uptimeTimer);
|
|
51
|
-
this.uptimeTimer = null;
|
|
52
|
-
}
|
|
53
|
-
if (!this.term)
|
|
54
|
-
return;
|
|
55
|
-
// Send /exit to claude for graceful shutdown
|
|
56
|
-
this.term.write("/exit\r");
|
|
57
|
-
return new Promise((resolve) => {
|
|
58
|
-
const forceKillTimer = setTimeout(() => {
|
|
59
|
-
try {
|
|
60
|
-
this.term?.kill();
|
|
61
|
-
}
|
|
62
|
-
catch { }
|
|
63
|
-
}, 5000);
|
|
64
|
-
this.term.onExit(() => {
|
|
65
|
-
clearTimeout(forceKillTimer);
|
|
66
|
-
this.term = null;
|
|
67
|
-
this.running = false;
|
|
68
|
-
resolve();
|
|
69
|
-
});
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
/** Clear saved session ID so next start creates a fresh session. */
|
|
73
|
-
clearSessionId() {
|
|
74
|
-
this.sessionId = null;
|
|
75
|
-
this.suppressSessionCapture = true;
|
|
76
|
-
this.saveSessionId();
|
|
77
|
-
this.logger.info("Session ID cleared — next start will create a fresh session");
|
|
78
|
-
}
|
|
79
|
-
sendInput(text) {
|
|
80
|
-
if (!this.term || !this.running) {
|
|
81
|
-
this.logger.warn("Cannot send input: process not running");
|
|
82
|
-
return;
|
|
83
|
-
}
|
|
84
|
-
this.term.write(text + "\r");
|
|
85
|
-
}
|
|
86
|
-
ensureStatusLineScript() {
|
|
87
|
-
// Tee stdin JSON to our file, then pipe to the user's original statusLine command.
|
|
88
|
-
const script = `#!/bin/bash
|
|
89
|
-
INPUT=$(cat)
|
|
90
|
-
echo "$INPUT" > "${STATUSLINE_FILE}"
|
|
91
|
-
if command -v ccline &>/dev/null; then
|
|
92
|
-
echo "$INPUT" | ccline
|
|
93
|
-
else
|
|
94
|
-
echo "ok"
|
|
95
|
-
fi
|
|
96
|
-
`;
|
|
97
|
-
writeFileSync(STATUSLINE_SCRIPT, script, { mode: 0o755 });
|
|
98
|
-
// Write a settings file (not CLI flag) so it doesn't conflict with
|
|
99
|
-
// other --settings injected by tools like cmux
|
|
100
|
-
const settingsFile = join(DATA_DIR, "claude-settings.json");
|
|
101
|
-
const settings = {
|
|
102
|
-
hooks: {
|
|
103
|
-
PreToolUse: [
|
|
104
|
-
{
|
|
105
|
-
matcher: "*",
|
|
106
|
-
hooks: [
|
|
107
|
-
{
|
|
108
|
-
type: "command",
|
|
109
|
-
command: "curl -s -X POST http://127.0.0.1:18321/approve -H 'Content-Type: application/json' -d @- --max-time 130 --connect-timeout 1 || echo '{\"hookSpecificOutput\":{\"hookEventName\":\"PreToolUse\",\"permissionDecision\":\"deny\",\"permissionDecisionReason\":\"approval server unreachable — denied for safety\"}}'",
|
|
110
|
-
timeout: 135000,
|
|
111
|
-
},
|
|
112
|
-
],
|
|
113
|
-
},
|
|
114
|
-
],
|
|
115
|
-
},
|
|
116
|
-
permissions: {
|
|
117
|
-
allow: [
|
|
118
|
-
"Read", "Edit", "Write", "Glob", "Grep",
|
|
119
|
-
"Bash(*)", "WebFetch", "WebSearch", "Agent", "Skill",
|
|
120
|
-
"mcp__plugin_telegram_telegram__reply",
|
|
121
|
-
"mcp__plugin_telegram_telegram__react",
|
|
122
|
-
"mcp__plugin_telegram_telegram__edit_message",
|
|
123
|
-
],
|
|
124
|
-
deny: [
|
|
125
|
-
"Bash(rm -rf /)", "Bash(rm -rf /*)",
|
|
126
|
-
"Bash(rm -rf ~)", "Bash(rm -rf ~/*)",
|
|
127
|
-
"Bash(git push * --force *)", "Bash(git push --force *)",
|
|
128
|
-
"Bash(git reset --hard *)", "Bash(git clean -fd *)",
|
|
129
|
-
"Bash(git clean -f *)", "Bash(dd *)", "Bash(mkfs *)",
|
|
130
|
-
],
|
|
131
|
-
defaultMode: "default",
|
|
132
|
-
},
|
|
133
|
-
statusLine: {
|
|
134
|
-
type: "command",
|
|
135
|
-
command: STATUSLINE_SCRIPT,
|
|
136
|
-
},
|
|
137
|
-
};
|
|
138
|
-
writeFileSync(settingsFile, JSON.stringify(settings));
|
|
139
|
-
}
|
|
140
|
-
ensureSpawnHelper() {
|
|
141
|
-
// node-pty's spawn-helper loses +x after npm install on macOS
|
|
142
|
-
try {
|
|
143
|
-
const helperPath = join(process.cwd(), "node_modules/node-pty/prebuilds", `${process.platform}-${process.arch}`, "spawn-helper");
|
|
144
|
-
if (existsSync(helperPath)) {
|
|
145
|
-
execFileSync("chmod", ["+x", helperPath]);
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
catch {
|
|
149
|
-
// Best effort — may not be needed on all platforms
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
resolveClaudeBin() {
|
|
153
|
-
try {
|
|
154
|
-
return execSync("which claude", { encoding: "utf8" }).trim();
|
|
155
|
-
}
|
|
156
|
-
catch {
|
|
157
|
-
return "claude";
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
spawnChild() {
|
|
161
|
-
const claudeBin = this.resolveClaudeBin();
|
|
162
|
-
const args = [];
|
|
163
|
-
// Channel mode: route Telegram messages as user prompts
|
|
164
|
-
args.push("--channels", `plugin:${this.config.channel_plugin}`);
|
|
165
|
-
// Settings file has: permissions (bypassPermissions), PreToolUse hook (→ Telegram approval), statusLine
|
|
166
|
-
const settingsFile = join(DATA_DIR, "claude-settings.json");
|
|
167
|
-
args.push("--settings", settingsFile);
|
|
168
|
-
// Resume previous session if available
|
|
169
|
-
if (this.sessionId) {
|
|
170
|
-
args.push("--resume", this.sessionId);
|
|
171
|
-
this.logger.info({ sessionId: this.sessionId }, "Resuming previous session");
|
|
172
|
-
}
|
|
173
|
-
this.logger.info({ claudeBin, args: args.map(a => a.length > 50 ? a.slice(0, 50) + "..." : a), cwd: this.config.working_directory }, "Spawning claude via PTY");
|
|
174
|
-
this.term = pty.spawn(claudeBin, args, {
|
|
175
|
-
name: "xterm-256color",
|
|
176
|
-
cols: 220,
|
|
177
|
-
rows: 50,
|
|
178
|
-
cwd: this.config.working_directory,
|
|
179
|
-
env: {
|
|
180
|
-
...process.env,
|
|
181
|
-
TERM: "xterm-256color",
|
|
182
|
-
},
|
|
183
|
-
});
|
|
184
|
-
this.running = true;
|
|
185
|
-
this.term.onData((data) => {
|
|
186
|
-
const clean = stripAnsi(data);
|
|
187
|
-
if (clean.trim()) {
|
|
188
|
-
this.emit("stdout", clean);
|
|
189
|
-
this.logger.debug({ stdout: clean.trim().slice(0, 200) }, "claude stdout");
|
|
190
|
-
}
|
|
191
|
-
// Handle PTY permission prompts (hard-coded path protection)
|
|
192
|
-
// These only fire for .git/, .claude/, .vscode/, .idea/ writes
|
|
193
|
-
// that bypass acceptEdits. PreToolUse hook already handles tool-level permissions.
|
|
194
|
-
// Claude Code shows: "1.Yes 2.Yes,andallow... 3.No"
|
|
195
|
-
if (clean.includes("1.Yes") && clean.includes("3.No")) {
|
|
196
|
-
this.logger.warn("PTY permission prompt detected — forwarding to Telegram");
|
|
197
|
-
this.emit("permission_prompt", clean);
|
|
198
|
-
}
|
|
199
|
-
// Capture session ID from output (claude prints: claude --resume <uuid>)
|
|
200
|
-
const resumeMatch = clean.match(/--resume\s+([0-9a-f-]{36})/);
|
|
201
|
-
if (resumeMatch && !this.suppressSessionCapture) {
|
|
202
|
-
this.sessionId = resumeMatch[1];
|
|
203
|
-
this.saveSessionId();
|
|
204
|
-
this.logger.info({ sessionId: this.sessionId }, "Captured session ID for resume");
|
|
205
|
-
}
|
|
206
|
-
});
|
|
207
|
-
this.term.onExit(({ exitCode, signal }) => {
|
|
208
|
-
this.logger.info({ exitCode, signal }, "claude process exited");
|
|
209
|
-
this.term = null;
|
|
210
|
-
this.running = false;
|
|
211
|
-
this.emit("exited", { code: exitCode, signal });
|
|
212
|
-
if (!this.shuttingDown) {
|
|
213
|
-
this.scheduleRestart();
|
|
214
|
-
}
|
|
215
|
-
});
|
|
216
|
-
// Reset retry counter after stable uptime
|
|
217
|
-
this.uptimeTimer = setTimeout(() => {
|
|
218
|
-
this.retryCount = 0;
|
|
219
|
-
this.logger.info("Uptime threshold reached, retry counter reset");
|
|
220
|
-
}, this.config.restart_policy.reset_after * 1000);
|
|
221
|
-
this.emit("started");
|
|
222
|
-
}
|
|
223
|
-
scheduleRestart() {
|
|
224
|
-
if (this.shuttingDown)
|
|
225
|
-
return;
|
|
226
|
-
if (this.retryCount >= this.config.restart_policy.max_retries) {
|
|
227
|
-
this.logger.error("Max retries reached, giving up");
|
|
228
|
-
this.emit("max_retries_reached");
|
|
229
|
-
return;
|
|
230
|
-
}
|
|
231
|
-
const delay = this.getBackoffDelay(this.retryCount);
|
|
232
|
-
this.retryCount++;
|
|
233
|
-
this.logger.info({ delay, retryCount: this.retryCount }, "Scheduling restart");
|
|
234
|
-
this.restartTimer = setTimeout(() => {
|
|
235
|
-
this.spawnChild();
|
|
236
|
-
}, delay);
|
|
237
|
-
}
|
|
238
|
-
getBackoffDelay(attempt) {
|
|
239
|
-
const base = 1000;
|
|
240
|
-
const max = 60000;
|
|
241
|
-
if (this.config.restart_policy.backoff === "exponential") {
|
|
242
|
-
return Math.min(base * Math.pow(2, attempt), max);
|
|
243
|
-
}
|
|
244
|
-
return Math.min(base * (attempt + 1), max);
|
|
245
|
-
}
|
|
246
|
-
loadSessionId() {
|
|
247
|
-
try {
|
|
248
|
-
if (existsSync(SESSION_FILE)) {
|
|
249
|
-
this.sessionId = readFileSync(SESSION_FILE, "utf-8").trim();
|
|
250
|
-
if (this.sessionId) {
|
|
251
|
-
this.logger.info({ sessionId: this.sessionId }, "Loaded previous session ID");
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
catch { }
|
|
256
|
-
}
|
|
257
|
-
saveSessionId() {
|
|
258
|
-
try {
|
|
259
|
-
writeFileSync(SESSION_FILE, this.sessionId ?? "");
|
|
260
|
-
}
|
|
261
|
-
catch { }
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
//# sourceMappingURL=process-manager.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"process-manager.js","sourceRoot":"","sources":["../src/process-manager.ts"],"names":[],"mappings":"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"}
|