beecork 0.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/dist/cli/commands.d.ts +14 -0
- package/dist/cli/commands.d.ts.map +1 -0
- package/dist/cli/commands.js +215 -0
- package/dist/cli/commands.js.map +1 -0
- package/dist/cli/helpers.d.ts +4 -0
- package/dist/cli/helpers.d.ts.map +1 -0
- package/dist/cli/helpers.js +46 -0
- package/dist/cli/helpers.js.map +1 -0
- package/dist/cli/setup.d.ts +2 -0
- package/dist/cli/setup.d.ts.map +1 -0
- package/dist/cli/setup.js +145 -0
- package/dist/cli/setup.js.map +1 -0
- package/dist/config.d.ts +9 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +97 -0
- package/dist/config.js.map +1 -0
- package/dist/cron/scheduler.d.ts +20 -0
- package/dist/cron/scheduler.d.ts.map +1 -0
- package/dist/cron/scheduler.js +151 -0
- package/dist/cron/scheduler.js.map +1 -0
- package/dist/cron/store.d.ts +12 -0
- package/dist/cron/store.d.ts.map +1 -0
- package/dist/cron/store.js +82 -0
- package/dist/cron/store.js.map +1 -0
- package/dist/daemon.d.ts +2 -0
- package/dist/daemon.d.ts.map +1 -0
- package/dist/daemon.js +140 -0
- package/dist/daemon.js.map +1 -0
- package/dist/db/index.d.ts +4 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +66 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/migrations.d.ts +3 -0
- package/dist/db/migrations.d.ts.map +1 -0
- package/dist/db/migrations.js +85 -0
- package/dist/db/migrations.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +66 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/server.d.ts +3 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +304 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/memory/extractor.d.ts +6 -0
- package/dist/memory/extractor.d.ts.map +1 -0
- package/dist/memory/extractor.js +105 -0
- package/dist/memory/extractor.js.map +1 -0
- package/dist/service/install.d.ts +5 -0
- package/dist/service/install.d.ts.map +1 -0
- package/dist/service/install.js +118 -0
- package/dist/service/install.js.map +1 -0
- package/dist/service/templates.d.ts +5 -0
- package/dist/service/templates.d.ts.map +1 -0
- package/dist/service/templates.js +53 -0
- package/dist/service/templates.js.map +1 -0
- package/dist/session/approval.d.ts +20 -0
- package/dist/session/approval.d.ts.map +1 -0
- package/dist/session/approval.js +59 -0
- package/dist/session/approval.js.map +1 -0
- package/dist/session/circuit-breaker.d.ts +18 -0
- package/dist/session/circuit-breaker.d.ts.map +1 -0
- package/dist/session/circuit-breaker.js +67 -0
- package/dist/session/circuit-breaker.js.map +1 -0
- package/dist/session/context-monitor.d.ts +16 -0
- package/dist/session/context-monitor.d.ts.map +1 -0
- package/dist/session/context-monitor.js +44 -0
- package/dist/session/context-monitor.js.map +1 -0
- package/dist/session/manager.d.ts +42 -0
- package/dist/session/manager.d.ts.map +1 -0
- package/dist/session/manager.js +291 -0
- package/dist/session/manager.js.map +1 -0
- package/dist/session/subprocess.d.ts +23 -0
- package/dist/session/subprocess.d.ts.map +1 -0
- package/dist/session/subprocess.js +119 -0
- package/dist/session/subprocess.js.map +1 -0
- package/dist/session/tool-classifier.d.ts +4 -0
- package/dist/session/tool-classifier.d.ts.map +1 -0
- package/dist/session/tool-classifier.js +57 -0
- package/dist/session/tool-classifier.js.map +1 -0
- package/dist/telegram/bot.d.ts +25 -0
- package/dist/telegram/bot.d.ts.map +1 -0
- package/dist/telegram/bot.js +293 -0
- package/dist/telegram/bot.js.map +1 -0
- package/dist/telegram/formatter.d.ts +11 -0
- package/dist/telegram/formatter.d.ts.map +1 -0
- package/dist/telegram/formatter.js +54 -0
- package/dist/telegram/formatter.js.map +1 -0
- package/dist/types.d.ts +131 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/util/logger.d.ts +17 -0
- package/dist/util/logger.d.ts.map +1 -0
- package/dist/util/logger.js +56 -0
- package/dist/util/logger.js.map +1 -0
- package/dist/util/paths.d.ts +11 -0
- package/dist/util/paths.d.ts.map +1 -0
- package/dist/util/paths.js +40 -0
- package/dist/util/paths.js.map +1 -0
- package/dist/util/platform.d.ts +3 -0
- package/dist/util/platform.d.ts.map +1 -0
- package/dist/util/platform.js +10 -0
- package/dist/util/platform.js.map +1 -0
- package/dist/util/retry.d.ts +3 -0
- package/dist/util/retry.d.ts.map +1 -0
- package/dist/util/retry.js +19 -0
- package/dist/util/retry.js.map +1 -0
- package/dist/whatsapp/client.d.ts +23 -0
- package/dist/whatsapp/client.d.ts.map +1 -0
- package/dist/whatsapp/client.js +125 -0
- package/dist/whatsapp/client.js.map +1 -0
- package/dist/whatsapp/formatter.d.ts +3 -0
- package/dist/whatsapp/formatter.d.ts.map +1 -0
- package/dist/whatsapp/formatter.js +25 -0
- package/dist/whatsapp/formatter.js.map +1 -0
- package/package.json +53 -0
- package/templates/CLAUDE.md +25 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/service/install.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare function getLaunchdPlist(nodePath: string, daemonPath: string): string;
|
|
2
|
+
export declare function getSystemdUnit(nodePath: string, daemonPath: string): string;
|
|
3
|
+
export declare function getLaunchdPlistPath(): string;
|
|
4
|
+
export declare function getSystemdUnitPath(): string;
|
|
5
|
+
//# sourceMappingURL=templates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/service/templates.ts"],"names":[],"mappings":"AAEA,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CA8B5E;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAa3E;AAED,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import os from 'node:os';
|
|
2
|
+
export function getLaunchdPlist(nodePath, daemonPath) {
|
|
3
|
+
const home = os.homedir();
|
|
4
|
+
return `<?xml version="1.0" encoding="UTF-8"?>
|
|
5
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
6
|
+
<plist version="1.0">
|
|
7
|
+
<dict>
|
|
8
|
+
<key>Label</key>
|
|
9
|
+
<string>com.beecork.daemon</string>
|
|
10
|
+
<key>ProgramArguments</key>
|
|
11
|
+
<array>
|
|
12
|
+
<string>${nodePath}</string>
|
|
13
|
+
<string>${daemonPath}</string>
|
|
14
|
+
</array>
|
|
15
|
+
<key>RunAtLoad</key>
|
|
16
|
+
<true/>
|
|
17
|
+
<key>KeepAlive</key>
|
|
18
|
+
<true/>
|
|
19
|
+
<key>StandardOutPath</key>
|
|
20
|
+
<string>${home}/.beecork/logs/daemon.stdout.log</string>
|
|
21
|
+
<key>StandardErrorPath</key>
|
|
22
|
+
<string>${home}/.beecork/logs/daemon.stderr.log</string>
|
|
23
|
+
<key>EnvironmentVariables</key>
|
|
24
|
+
<dict>
|
|
25
|
+
<key>PATH</key>
|
|
26
|
+
<string>/usr/local/bin:/usr/bin:/bin:${home}/.local/bin:${home}/.nvm/versions/node/current/bin</string>
|
|
27
|
+
<key>HOME</key>
|
|
28
|
+
<string>${home}</string>
|
|
29
|
+
</dict>
|
|
30
|
+
</dict>
|
|
31
|
+
</plist>`;
|
|
32
|
+
}
|
|
33
|
+
export function getSystemdUnit(nodePath, daemonPath) {
|
|
34
|
+
return `[Unit]
|
|
35
|
+
Description=Beecork - Claude Code always-on infrastructure
|
|
36
|
+
After=network.target
|
|
37
|
+
|
|
38
|
+
[Service]
|
|
39
|
+
ExecStart=${nodePath} ${daemonPath}
|
|
40
|
+
Restart=always
|
|
41
|
+
RestartSec=5
|
|
42
|
+
Environment=PATH=/usr/local/bin:/usr/bin:/bin:%h/.local/bin
|
|
43
|
+
|
|
44
|
+
[Install]
|
|
45
|
+
WantedBy=default.target`;
|
|
46
|
+
}
|
|
47
|
+
export function getLaunchdPlistPath() {
|
|
48
|
+
return `${os.homedir()}/Library/LaunchAgents/com.beecork.daemon.plist`;
|
|
49
|
+
}
|
|
50
|
+
export function getSystemdUnitPath() {
|
|
51
|
+
return `${os.homedir()}/.config/systemd/user/beecork.service`;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=templates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/service/templates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,MAAM,UAAU,eAAe,CAAC,QAAgB,EAAE,UAAkB;IAClE,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC1B,OAAO;;;;;;;;kBAQS,QAAQ;kBACR,UAAU;;;;;;;cAOd,IAAI;;cAEJ,IAAI;;;;+CAI6B,IAAI,eAAe,IAAI;;kBAEpD,IAAI;;;SAGb,CAAC;AACV,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,QAAgB,EAAE,UAAkB;IACjE,OAAO;;;;;YAKG,QAAQ,IAAI,UAAU;;;;;;wBAMV,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE,gDAAgD,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE,uCAAuC,CAAC;AAChE,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { type ToolRisk } from './tool-classifier.js';
|
|
2
|
+
import type { ApprovalMode, StreamContentToolUse } from '../types.js';
|
|
3
|
+
export interface ApprovalRequest {
|
|
4
|
+
tabName: string;
|
|
5
|
+
toolName: string;
|
|
6
|
+
toolArgs: Record<string, unknown>;
|
|
7
|
+
risk: ToolRisk;
|
|
8
|
+
description: string;
|
|
9
|
+
}
|
|
10
|
+
export type ApprovalCallback = (request: ApprovalRequest) => Promise<boolean>;
|
|
11
|
+
export declare class ApprovalManager {
|
|
12
|
+
private mode;
|
|
13
|
+
private tabName;
|
|
14
|
+
private onApprovalNeeded;
|
|
15
|
+
private timeoutMs;
|
|
16
|
+
constructor(mode: ApprovalMode, tabName: string, onApprovalNeeded: ApprovalCallback | null, timeoutMs?: number);
|
|
17
|
+
/** Check if a tool call should proceed. Returns true if approved. */
|
|
18
|
+
shouldApprove(toolUse: StreamContentToolUse): Promise<boolean>;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=approval.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approval.d.ts","sourceRoot":"","sources":["../../src/session/approval.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEnE,OAAO,KAAK,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEtE,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,IAAI,EAAE,QAAQ,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,EAAE,eAAe,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAE9E,qBAAa,eAAe;IAExB,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,SAAS;gBAHT,IAAI,EAAE,YAAY,EAClB,OAAO,EAAE,MAAM,EACf,gBAAgB,EAAE,gBAAgB,GAAG,IAAI,EACzC,SAAS,GAAE,MAAuB;IAG5C,qEAAqE;IAC/D,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC;CAsCrE"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { classifyTool } from './tool-classifier.js';
|
|
2
|
+
import { logger } from '../util/logger.js';
|
|
3
|
+
export class ApprovalManager {
|
|
4
|
+
mode;
|
|
5
|
+
tabName;
|
|
6
|
+
onApprovalNeeded;
|
|
7
|
+
timeoutMs;
|
|
8
|
+
constructor(mode, tabName, onApprovalNeeded, timeoutMs = 30 * 60 * 1000) {
|
|
9
|
+
this.mode = mode;
|
|
10
|
+
this.tabName = tabName;
|
|
11
|
+
this.onApprovalNeeded = onApprovalNeeded;
|
|
12
|
+
this.timeoutMs = timeoutMs;
|
|
13
|
+
}
|
|
14
|
+
/** Check if a tool call should proceed. Returns true if approved. */
|
|
15
|
+
async shouldApprove(toolUse) {
|
|
16
|
+
if (this.mode === 'yolo')
|
|
17
|
+
return true;
|
|
18
|
+
const risk = classifyTool(toolUse.name, toolUse.input);
|
|
19
|
+
if (this.mode === 'auto-safe' && risk === 'safe') {
|
|
20
|
+
logger.debug(`[${this.tabName}] Auto-approved safe tool: ${toolUse.name}`);
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
// Need user approval
|
|
24
|
+
if (!this.onApprovalNeeded) {
|
|
25
|
+
logger.warn(`[${this.tabName}] Approval needed but no callback set — rejecting ${toolUse.name}`);
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
const request = {
|
|
29
|
+
tabName: this.tabName,
|
|
30
|
+
toolName: toolUse.name,
|
|
31
|
+
toolArgs: toolUse.input,
|
|
32
|
+
risk,
|
|
33
|
+
description: formatToolDescription(toolUse),
|
|
34
|
+
};
|
|
35
|
+
// Wait for user response with timeout
|
|
36
|
+
try {
|
|
37
|
+
const result = await Promise.race([
|
|
38
|
+
this.onApprovalNeeded(request),
|
|
39
|
+
new Promise((_, reject) => setTimeout(() => reject(new Error('Approval timeout')), this.timeoutMs)),
|
|
40
|
+
]);
|
|
41
|
+
return result;
|
|
42
|
+
}
|
|
43
|
+
catch (err) {
|
|
44
|
+
logger.warn(`[${this.tabName}] Approval timed out for ${toolUse.name}`);
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
function formatToolDescription(toolUse) {
|
|
50
|
+
const input = toolUse.input;
|
|
51
|
+
if (toolUse.name === 'Bash') {
|
|
52
|
+
return `Run command: ${String(input.command || '').slice(0, 200)}`;
|
|
53
|
+
}
|
|
54
|
+
if (toolUse.name === 'Write' || toolUse.name === 'Edit') {
|
|
55
|
+
return `${toolUse.name}: ${String(input.file_path || '')}`;
|
|
56
|
+
}
|
|
57
|
+
return `${toolUse.name}: ${JSON.stringify(input).slice(0, 200)}`;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=approval.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approval.js","sourceRoot":"","sources":["../../src/session/approval.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { CircuitBreakerConfig, StreamContentToolUse } from '../types.js';
|
|
2
|
+
export type CircuitBreakerAction = 'ok' | 'warn' | 'notify' | 'break';
|
|
3
|
+
export declare class CircuitBreaker {
|
|
4
|
+
private tabName;
|
|
5
|
+
private recentCalls;
|
|
6
|
+
private config;
|
|
7
|
+
private tripped;
|
|
8
|
+
private warnedAt;
|
|
9
|
+
private notifiedAt;
|
|
10
|
+
private readonly WARN_THRESHOLD;
|
|
11
|
+
private readonly NOTIFY_THRESHOLD;
|
|
12
|
+
constructor(tabName: string, config?: Partial<CircuitBreakerConfig>);
|
|
13
|
+
/** Record a tool call. Returns the action to take. */
|
|
14
|
+
recordToolCall(toolUse: StreamContentToolUse): CircuitBreakerAction;
|
|
15
|
+
reset(): void;
|
|
16
|
+
get isTripped(): boolean;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=circuit-breaker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"circuit-breaker.d.ts","sourceRoot":"","sources":["../../src/session/circuit-breaker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAG9E,MAAM,MAAM,oBAAoB,GAAG,IAAI,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;AAOtE,qBAAa,cAAc;IAUb,OAAO,CAAC,OAAO;IAT3B,OAAO,CAAC,WAAW,CAAgB;IACnC,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,UAAU,CAAK;IAEvB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAK;IACpC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAM;gBAEnB,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC;IAI3E,sDAAsD;IACtD,cAAc,CAAC,OAAO,EAAE,oBAAoB,GAAG,oBAAoB;IA2CnE,KAAK,IAAI,IAAI;IAOb,IAAI,SAAS,IAAI,OAAO,CAEvB;CACF"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { logger } from '../util/logger.js';
|
|
2
|
+
const DEFAULT_CONFIG = {
|
|
3
|
+
maxRepeats: 20,
|
|
4
|
+
windowSize: 30,
|
|
5
|
+
};
|
|
6
|
+
export class CircuitBreaker {
|
|
7
|
+
tabName;
|
|
8
|
+
recentCalls = [];
|
|
9
|
+
config;
|
|
10
|
+
tripped = false;
|
|
11
|
+
warnedAt = 0;
|
|
12
|
+
notifiedAt = 0;
|
|
13
|
+
WARN_THRESHOLD = 5;
|
|
14
|
+
NOTIFY_THRESHOLD = 10;
|
|
15
|
+
constructor(tabName, config) {
|
|
16
|
+
this.tabName = tabName;
|
|
17
|
+
this.config = { ...DEFAULT_CONFIG, ...config };
|
|
18
|
+
}
|
|
19
|
+
/** Record a tool call. Returns the action to take. */
|
|
20
|
+
recordToolCall(toolUse) {
|
|
21
|
+
if (this.tripped)
|
|
22
|
+
return 'break';
|
|
23
|
+
const signature = `${toolUse.name}:${JSON.stringify(toolUse.input)}`;
|
|
24
|
+
this.recentCalls.push(signature);
|
|
25
|
+
// Keep only the last windowSize calls
|
|
26
|
+
if (this.recentCalls.length > this.config.windowSize) {
|
|
27
|
+
this.recentCalls = this.recentCalls.slice(-this.config.windowSize);
|
|
28
|
+
}
|
|
29
|
+
// Count consecutive identical calls from the end
|
|
30
|
+
const lastCall = this.recentCalls[this.recentCalls.length - 1];
|
|
31
|
+
let repeatCount = 0;
|
|
32
|
+
for (let i = this.recentCalls.length - 1; i >= 0; i--) {
|
|
33
|
+
if (this.recentCalls[i] === lastCall) {
|
|
34
|
+
repeatCount++;
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
break;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
if (repeatCount >= this.config.maxRepeats) {
|
|
41
|
+
logger.warn(`[${this.tabName}] Circuit breaker tripped: ${toolUse.name} repeated ${repeatCount} times`);
|
|
42
|
+
this.tripped = true;
|
|
43
|
+
return 'break';
|
|
44
|
+
}
|
|
45
|
+
if (repeatCount >= this.NOTIFY_THRESHOLD && this.notifiedAt < this.NOTIFY_THRESHOLD) {
|
|
46
|
+
logger.warn(`[${this.tabName}] Loop detected: ${toolUse.name} repeated ${repeatCount} times — notifying user`);
|
|
47
|
+
this.notifiedAt = repeatCount;
|
|
48
|
+
return 'notify';
|
|
49
|
+
}
|
|
50
|
+
if (repeatCount >= this.WARN_THRESHOLD && this.warnedAt < this.WARN_THRESHOLD) {
|
|
51
|
+
logger.info(`[${this.tabName}] Loop detected: ${toolUse.name} repeated ${repeatCount} times — warning`);
|
|
52
|
+
this.warnedAt = repeatCount;
|
|
53
|
+
return 'warn';
|
|
54
|
+
}
|
|
55
|
+
return 'ok';
|
|
56
|
+
}
|
|
57
|
+
reset() {
|
|
58
|
+
this.recentCalls = [];
|
|
59
|
+
this.tripped = false;
|
|
60
|
+
this.warnedAt = 0;
|
|
61
|
+
this.notifiedAt = 0;
|
|
62
|
+
}
|
|
63
|
+
get isTripped() {
|
|
64
|
+
return this.tripped;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=circuit-breaker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"circuit-breaker.js","sourceRoot":"","sources":["../../src/session/circuit-breaker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { StreamUsage } from '../types.js';
|
|
2
|
+
export type ContextAction = 'ok' | 'warn' | 'checkpoint';
|
|
3
|
+
export declare class ContextMonitor {
|
|
4
|
+
private tabName;
|
|
5
|
+
private cumulativeTokens;
|
|
6
|
+
private contextWindow;
|
|
7
|
+
private warned;
|
|
8
|
+
private checkpointed;
|
|
9
|
+
constructor(tabName: string, contextWindow?: number);
|
|
10
|
+
/** Record token usage from a StreamAssistant or StreamResult event. Returns action needed. */
|
|
11
|
+
recordUsage(usage: StreamUsage): ContextAction;
|
|
12
|
+
get tokenCount(): number;
|
|
13
|
+
get usageRatio(): number;
|
|
14
|
+
reset(): void;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=context-monitor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-monitor.d.ts","sourceRoot":"","sources":["../../src/session/context-monitor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,MAAM,aAAa,GAAG,IAAI,GAAG,MAAM,GAAG,YAAY,CAAC;AAMzD,qBAAa,cAAc;IAOvB,OAAO,CAAC,OAAO;IANjB,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,YAAY,CAAS;gBAGnB,OAAO,EAAE,MAAM,EACvB,aAAa,GAAE,MAA+B;IAKhD,8FAA8F;IAC9F,WAAW,CAAC,KAAK,EAAE,WAAW,GAAG,aAAa;IAqB9C,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,KAAK,IAAI,IAAI;CAKd"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { logger } from '../util/logger.js';
|
|
2
|
+
const DEFAULT_CONTEXT_WINDOW = 200_000; // Claude's context window in tokens
|
|
3
|
+
const WARNING_THRESHOLD = 0.80;
|
|
4
|
+
const CHECKPOINT_THRESHOLD = 0.90;
|
|
5
|
+
export class ContextMonitor {
|
|
6
|
+
tabName;
|
|
7
|
+
cumulativeTokens = 0;
|
|
8
|
+
contextWindow;
|
|
9
|
+
warned = false;
|
|
10
|
+
checkpointed = false;
|
|
11
|
+
constructor(tabName, contextWindow = DEFAULT_CONTEXT_WINDOW) {
|
|
12
|
+
this.tabName = tabName;
|
|
13
|
+
this.contextWindow = contextWindow;
|
|
14
|
+
}
|
|
15
|
+
/** Record token usage from a StreamAssistant or StreamResult event. Returns action needed. */
|
|
16
|
+
recordUsage(usage) {
|
|
17
|
+
this.cumulativeTokens += usage.input_tokens + usage.output_tokens +
|
|
18
|
+
usage.cache_creation_input_tokens + usage.cache_read_input_tokens;
|
|
19
|
+
const ratio = this.cumulativeTokens / this.contextWindow;
|
|
20
|
+
if (ratio >= CHECKPOINT_THRESHOLD && !this.checkpointed) {
|
|
21
|
+
this.checkpointed = true;
|
|
22
|
+
logger.warn(`[${this.tabName}] Context at ${Math.round(ratio * 100)}% — checkpoint needed`);
|
|
23
|
+
return 'checkpoint';
|
|
24
|
+
}
|
|
25
|
+
if (ratio >= WARNING_THRESHOLD && !this.warned) {
|
|
26
|
+
this.warned = true;
|
|
27
|
+
logger.info(`[${this.tabName}] Context at ${Math.round(ratio * 100)}% — warning`);
|
|
28
|
+
return 'warn';
|
|
29
|
+
}
|
|
30
|
+
return 'ok';
|
|
31
|
+
}
|
|
32
|
+
get tokenCount() {
|
|
33
|
+
return this.cumulativeTokens;
|
|
34
|
+
}
|
|
35
|
+
get usageRatio() {
|
|
36
|
+
return this.cumulativeTokens / this.contextWindow;
|
|
37
|
+
}
|
|
38
|
+
reset() {
|
|
39
|
+
this.cumulativeTokens = 0;
|
|
40
|
+
this.warned = false;
|
|
41
|
+
this.checkpointed = false;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=context-monitor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-monitor.js","sourceRoot":"","sources":["../../src/session/context-monitor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAK3C,MAAM,sBAAsB,GAAG,OAAO,CAAC,CAAC,oCAAoC;AAC5E,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAC/B,MAAM,oBAAoB,GAAG,IAAI,CAAC;AAElC,MAAM,OAAO,cAAc;IAOf;IANF,gBAAgB,GAAG,CAAC,CAAC;IACrB,aAAa,CAAS;IACtB,MAAM,GAAG,KAAK,CAAC;IACf,YAAY,GAAG,KAAK,CAAC;IAE7B,YACU,OAAe,EACvB,gBAAwB,sBAAsB;QADtC,YAAO,GAAP,OAAO,CAAQ;QAGvB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,CAAC;IAED,8FAA8F;IAC9F,WAAW,CAAC,KAAkB;QAC5B,IAAI,CAAC,gBAAgB,IAAI,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,aAAa;YAC/D,KAAK,CAAC,2BAA2B,GAAG,KAAK,CAAC,uBAAuB,CAAC;QAEpE,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,aAAa,CAAC;QAEzD,IAAI,KAAK,IAAI,oBAAoB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACxD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,gBAAgB,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,uBAAuB,CAAC,CAAC;YAC5F,OAAO,YAAY,CAAC;QACtB,CAAC;QAED,IAAI,KAAK,IAAI,iBAAiB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YAC/C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YACnB,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,gBAAgB,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,aAAa,CAAC,CAAC;YAClF,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,aAAa,CAAC;IACpD,CAAC;IAED,KAAK;QACH,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;QAC1B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;IAC5B,CAAC;CACF"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { BeecorkConfig, Tab } from '../types.js';
|
|
2
|
+
export interface SendResult {
|
|
3
|
+
text: string;
|
|
4
|
+
costUsd: number;
|
|
5
|
+
durationMs: number;
|
|
6
|
+
sessionId: string;
|
|
7
|
+
error: boolean;
|
|
8
|
+
}
|
|
9
|
+
export type NotifyCallback = (text: string) => Promise<void>;
|
|
10
|
+
export declare class TabManager {
|
|
11
|
+
private config;
|
|
12
|
+
private subprocesses;
|
|
13
|
+
private circuitBreakers;
|
|
14
|
+
private messageQueues;
|
|
15
|
+
private onNotify;
|
|
16
|
+
constructor(config: BeecorkConfig);
|
|
17
|
+
/** Set a callback for sending notifications (e.g., via Telegram) */
|
|
18
|
+
setNotifyCallback(cb: NotifyCallback): void;
|
|
19
|
+
/** Ensure a tab exists in the database. Creates it if missing. */
|
|
20
|
+
ensureTab(tabName: string): Tab;
|
|
21
|
+
/** Send a message to a tab. Creates the tab if it doesn't exist. Queues if busy. */
|
|
22
|
+
sendMessage(tabName: string, prompt: string, options?: {
|
|
23
|
+
resume?: boolean;
|
|
24
|
+
onTextChunk?: (text: string) => void;
|
|
25
|
+
}): Promise<SendResult>;
|
|
26
|
+
/** Get all tabs from the database */
|
|
27
|
+
listTabs(): Tab[];
|
|
28
|
+
/** Get a specific tab */
|
|
29
|
+
getTab(tabName: string): Tab | undefined;
|
|
30
|
+
private queryTab;
|
|
31
|
+
/** Stop a tab's running subprocess */
|
|
32
|
+
stopTab(tabName: string): void;
|
|
33
|
+
/** Stop all running subprocesses (clean shutdown) */
|
|
34
|
+
stopAll(): void;
|
|
35
|
+
/** Process pending messages from MCP server IPC */
|
|
36
|
+
processPendingMessages(): void;
|
|
37
|
+
private executeMessage;
|
|
38
|
+
private processNextInQueue;
|
|
39
|
+
private updateTabStatus;
|
|
40
|
+
private clearQueue;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/session/manager.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,aAAa,EACb,GAAG,EAOJ,MAAM,aAAa,CAAC;AA2BrB,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;CAChB;AAID,MAAM,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAE7D,qBAAa,UAAU;IAMT,OAAO,CAAC,MAAM;IAL1B,OAAO,CAAC,YAAY,CAA4C;IAChE,OAAO,CAAC,eAAe,CAA0C;IACjE,OAAO,CAAC,aAAa,CAAmH;IACxI,OAAO,CAAC,QAAQ,CAA+B;gBAE3B,MAAM,EAAE,aAAa;IAEzC,oEAAoE;IACpE,iBAAiB,CAAC,EAAE,EAAE,cAAc,GAAG,IAAI;IAI3C,kEAAkE;IAClE,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,GAAG;IAyB/B,oFAAoF;IAC9E,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;KAAE,GAAG,OAAO,CAAC,UAAU,CAAC;IAqB7I,qCAAqC;IACrC,QAAQ,IAAI,GAAG,EAAE;IAKjB,yBAAyB;IACzB,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,GAAG,GAAG,SAAS;IAKxC,OAAO,CAAC,QAAQ;IAKhB,sCAAsC;IACtC,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAS9B,qDAAqD;IACrD,OAAO,IAAI,IAAI;IAYf,mDAAmD;IACnD,sBAAsB,IAAI,IAAI;YAuBhB,cAAc;IAuK5B,OAAO,CAAC,kBAAkB;IAc1B,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,UAAU;CASnB"}
|