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.
Files changed (118) hide show
  1. package/dist/cli/commands.d.ts +14 -0
  2. package/dist/cli/commands.d.ts.map +1 -0
  3. package/dist/cli/commands.js +215 -0
  4. package/dist/cli/commands.js.map +1 -0
  5. package/dist/cli/helpers.d.ts +4 -0
  6. package/dist/cli/helpers.d.ts.map +1 -0
  7. package/dist/cli/helpers.js +46 -0
  8. package/dist/cli/helpers.js.map +1 -0
  9. package/dist/cli/setup.d.ts +2 -0
  10. package/dist/cli/setup.d.ts.map +1 -0
  11. package/dist/cli/setup.js +145 -0
  12. package/dist/cli/setup.js.map +1 -0
  13. package/dist/config.d.ts +9 -0
  14. package/dist/config.d.ts.map +1 -0
  15. package/dist/config.js +97 -0
  16. package/dist/config.js.map +1 -0
  17. package/dist/cron/scheduler.d.ts +20 -0
  18. package/dist/cron/scheduler.d.ts.map +1 -0
  19. package/dist/cron/scheduler.js +151 -0
  20. package/dist/cron/scheduler.js.map +1 -0
  21. package/dist/cron/store.d.ts +12 -0
  22. package/dist/cron/store.d.ts.map +1 -0
  23. package/dist/cron/store.js +82 -0
  24. package/dist/cron/store.js.map +1 -0
  25. package/dist/daemon.d.ts +2 -0
  26. package/dist/daemon.d.ts.map +1 -0
  27. package/dist/daemon.js +140 -0
  28. package/dist/daemon.js.map +1 -0
  29. package/dist/db/index.d.ts +4 -0
  30. package/dist/db/index.d.ts.map +1 -0
  31. package/dist/db/index.js +66 -0
  32. package/dist/db/index.js.map +1 -0
  33. package/dist/db/migrations.d.ts +3 -0
  34. package/dist/db/migrations.d.ts.map +1 -0
  35. package/dist/db/migrations.js +85 -0
  36. package/dist/db/migrations.js.map +1 -0
  37. package/dist/index.d.ts +3 -0
  38. package/dist/index.d.ts.map +1 -0
  39. package/dist/index.js +66 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/mcp/server.d.ts +3 -0
  42. package/dist/mcp/server.d.ts.map +1 -0
  43. package/dist/mcp/server.js +304 -0
  44. package/dist/mcp/server.js.map +1 -0
  45. package/dist/memory/extractor.d.ts +6 -0
  46. package/dist/memory/extractor.d.ts.map +1 -0
  47. package/dist/memory/extractor.js +105 -0
  48. package/dist/memory/extractor.js.map +1 -0
  49. package/dist/service/install.d.ts +5 -0
  50. package/dist/service/install.d.ts.map +1 -0
  51. package/dist/service/install.js +118 -0
  52. package/dist/service/install.js.map +1 -0
  53. package/dist/service/templates.d.ts +5 -0
  54. package/dist/service/templates.d.ts.map +1 -0
  55. package/dist/service/templates.js +53 -0
  56. package/dist/service/templates.js.map +1 -0
  57. package/dist/session/approval.d.ts +20 -0
  58. package/dist/session/approval.d.ts.map +1 -0
  59. package/dist/session/approval.js +59 -0
  60. package/dist/session/approval.js.map +1 -0
  61. package/dist/session/circuit-breaker.d.ts +18 -0
  62. package/dist/session/circuit-breaker.d.ts.map +1 -0
  63. package/dist/session/circuit-breaker.js +67 -0
  64. package/dist/session/circuit-breaker.js.map +1 -0
  65. package/dist/session/context-monitor.d.ts +16 -0
  66. package/dist/session/context-monitor.d.ts.map +1 -0
  67. package/dist/session/context-monitor.js +44 -0
  68. package/dist/session/context-monitor.js.map +1 -0
  69. package/dist/session/manager.d.ts +42 -0
  70. package/dist/session/manager.d.ts.map +1 -0
  71. package/dist/session/manager.js +291 -0
  72. package/dist/session/manager.js.map +1 -0
  73. package/dist/session/subprocess.d.ts +23 -0
  74. package/dist/session/subprocess.d.ts.map +1 -0
  75. package/dist/session/subprocess.js +119 -0
  76. package/dist/session/subprocess.js.map +1 -0
  77. package/dist/session/tool-classifier.d.ts +4 -0
  78. package/dist/session/tool-classifier.d.ts.map +1 -0
  79. package/dist/session/tool-classifier.js +57 -0
  80. package/dist/session/tool-classifier.js.map +1 -0
  81. package/dist/telegram/bot.d.ts +25 -0
  82. package/dist/telegram/bot.d.ts.map +1 -0
  83. package/dist/telegram/bot.js +293 -0
  84. package/dist/telegram/bot.js.map +1 -0
  85. package/dist/telegram/formatter.d.ts +11 -0
  86. package/dist/telegram/formatter.d.ts.map +1 -0
  87. package/dist/telegram/formatter.js +54 -0
  88. package/dist/telegram/formatter.js.map +1 -0
  89. package/dist/types.d.ts +131 -0
  90. package/dist/types.d.ts.map +1 -0
  91. package/dist/types.js +3 -0
  92. package/dist/types.js.map +1 -0
  93. package/dist/util/logger.d.ts +17 -0
  94. package/dist/util/logger.d.ts.map +1 -0
  95. package/dist/util/logger.js +56 -0
  96. package/dist/util/logger.js.map +1 -0
  97. package/dist/util/paths.d.ts +11 -0
  98. package/dist/util/paths.d.ts.map +1 -0
  99. package/dist/util/paths.js +40 -0
  100. package/dist/util/paths.js.map +1 -0
  101. package/dist/util/platform.d.ts +3 -0
  102. package/dist/util/platform.d.ts.map +1 -0
  103. package/dist/util/platform.js +10 -0
  104. package/dist/util/platform.js.map +1 -0
  105. package/dist/util/retry.d.ts +3 -0
  106. package/dist/util/retry.d.ts.map +1 -0
  107. package/dist/util/retry.js +19 -0
  108. package/dist/util/retry.js.map +1 -0
  109. package/dist/whatsapp/client.d.ts +23 -0
  110. package/dist/whatsapp/client.d.ts.map +1 -0
  111. package/dist/whatsapp/client.js +125 -0
  112. package/dist/whatsapp/client.js.map +1 -0
  113. package/dist/whatsapp/formatter.d.ts +3 -0
  114. package/dist/whatsapp/formatter.d.ts.map +1 -0
  115. package/dist/whatsapp/formatter.js +25 -0
  116. package/dist/whatsapp/formatter.js.map +1 -0
  117. package/package.json +53 -0
  118. 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"}