aicodeman 0.2.8 → 0.3.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/README.md +91 -0
- package/dist/ai-idle-checker.d.ts.map +1 -1
- package/dist/ai-idle-checker.js +3 -2
- package/dist/ai-idle-checker.js.map +1 -1
- package/dist/ai-plan-checker.d.ts.map +1 -1
- package/dist/ai-plan-checker.js +3 -2
- package/dist/ai-plan-checker.js.map +1 -1
- package/dist/bash-tool-parser.d.ts +2 -3
- package/dist/bash-tool-parser.d.ts.map +1 -1
- package/dist/bash-tool-parser.js +14 -31
- package/dist/bash-tool-parser.js.map +1 -1
- package/dist/config/ai-defaults.d.ts +16 -0
- package/dist/config/ai-defaults.d.ts.map +1 -0
- package/dist/config/ai-defaults.js +16 -0
- package/dist/config/ai-defaults.js.map +1 -0
- package/dist/config/auth-config.d.ts +19 -0
- package/dist/config/auth-config.d.ts.map +1 -0
- package/dist/config/auth-config.js +28 -0
- package/dist/config/auth-config.js.map +1 -0
- package/dist/config/exec-timeout.d.ts +10 -0
- package/dist/config/exec-timeout.d.ts.map +1 -0
- package/dist/config/exec-timeout.js +10 -0
- package/dist/config/exec-timeout.js.map +1 -0
- package/dist/config/map-limits.d.ts +4 -0
- package/dist/config/map-limits.d.ts.map +1 -1
- package/dist/config/map-limits.js +7 -0
- package/dist/config/map-limits.js.map +1 -1
- package/dist/config/server-timing.d.ts +36 -0
- package/dist/config/server-timing.d.ts.map +1 -0
- package/dist/config/server-timing.js +51 -0
- package/dist/config/server-timing.js.map +1 -0
- package/dist/config/team-config.d.ts +16 -0
- package/dist/config/team-config.d.ts.map +1 -0
- package/dist/config/team-config.js +16 -0
- package/dist/config/team-config.js.map +1 -0
- package/dist/config/terminal-limits.d.ts +18 -0
- package/dist/config/terminal-limits.d.ts.map +1 -0
- package/dist/config/terminal-limits.js +18 -0
- package/dist/config/terminal-limits.js.map +1 -0
- package/dist/config/tunnel-config.d.ts +27 -0
- package/dist/config/tunnel-config.d.ts.map +1 -0
- package/dist/config/tunnel-config.js +36 -0
- package/dist/config/tunnel-config.js.map +1 -0
- package/dist/hooks-config.d.ts.map +1 -1
- package/dist/hooks-config.js +7 -6
- package/dist/hooks-config.js.map +1 -1
- package/dist/image-watcher.d.ts +4 -4
- package/dist/image-watcher.d.ts.map +1 -1
- package/dist/image-watcher.js +17 -30
- package/dist/image-watcher.js.map +1 -1
- package/dist/index.js +1 -2
- package/dist/index.js.map +1 -1
- package/dist/plan-orchestrator.d.ts +2 -24
- package/dist/plan-orchestrator.d.ts.map +1 -1
- package/dist/plan-orchestrator.js.map +1 -1
- package/dist/push-store.d.ts +1 -1
- package/dist/push-store.d.ts.map +1 -1
- package/dist/push-store.js +4 -12
- package/dist/push-store.js.map +1 -1
- package/dist/ralph-fix-plan-watcher.d.ts +91 -0
- package/dist/ralph-fix-plan-watcher.d.ts.map +1 -0
- package/dist/ralph-fix-plan-watcher.js +326 -0
- package/dist/ralph-fix-plan-watcher.js.map +1 -0
- package/dist/ralph-plan-tracker.d.ts +201 -0
- package/dist/ralph-plan-tracker.d.ts.map +1 -0
- package/dist/ralph-plan-tracker.js +325 -0
- package/dist/ralph-plan-tracker.js.map +1 -0
- package/dist/ralph-stall-detector.d.ts +84 -0
- package/dist/ralph-stall-detector.d.ts.map +1 -0
- package/dist/ralph-stall-detector.js +139 -0
- package/dist/ralph-stall-detector.js.map +1 -0
- package/dist/ralph-status-parser.d.ts +141 -0
- package/dist/ralph-status-parser.d.ts.map +1 -0
- package/dist/ralph-status-parser.js +478 -0
- package/dist/ralph-status-parser.js.map +1 -0
- package/dist/ralph-tracker.d.ts +194 -685
- package/dist/ralph-tracker.d.ts.map +1 -1
- package/dist/ralph-tracker.js +349 -1713
- package/dist/ralph-tracker.js.map +1 -1
- package/dist/respawn-adaptive-timing.d.ts +61 -0
- package/dist/respawn-adaptive-timing.d.ts.map +1 -0
- package/dist/respawn-adaptive-timing.js +105 -0
- package/dist/respawn-adaptive-timing.js.map +1 -0
- package/dist/respawn-controller.d.ts +14 -101
- package/dist/respawn-controller.d.ts.map +1 -1
- package/dist/respawn-controller.js +155 -594
- package/dist/respawn-controller.js.map +1 -1
- package/dist/respawn-health.d.ts +54 -0
- package/dist/respawn-health.d.ts.map +1 -0
- package/dist/respawn-health.js +183 -0
- package/dist/respawn-health.js.map +1 -0
- package/dist/respawn-metrics.d.ts +81 -0
- package/dist/respawn-metrics.d.ts.map +1 -0
- package/dist/respawn-metrics.js +198 -0
- package/dist/respawn-metrics.js.map +1 -0
- package/dist/respawn-patterns.d.ts +45 -0
- package/dist/respawn-patterns.d.ts.map +1 -0
- package/dist/respawn-patterns.js +125 -0
- package/dist/respawn-patterns.js.map +1 -0
- package/dist/session-auto-ops.d.ts +89 -0
- package/dist/session-auto-ops.d.ts.map +1 -0
- package/dist/session-auto-ops.js +224 -0
- package/dist/session-auto-ops.js.map +1 -0
- package/dist/session-cli-builder.d.ts +62 -0
- package/dist/session-cli-builder.d.ts.map +1 -0
- package/dist/session-cli-builder.js +121 -0
- package/dist/session-cli-builder.js.map +1 -0
- package/dist/session-task-cache.d.ts +52 -0
- package/dist/session-task-cache.d.ts.map +1 -0
- package/dist/session-task-cache.js +90 -0
- package/dist/session-task-cache.js.map +1 -0
- package/dist/session.d.ts +2 -33
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +58 -309
- package/dist/session.js.map +1 -1
- package/dist/state-store.d.ts +9 -2
- package/dist/state-store.d.ts.map +1 -1
- package/dist/state-store.js +112 -39
- package/dist/state-store.js.map +1 -1
- package/dist/subagent-watcher.d.ts +16 -9
- package/dist/subagent-watcher.d.ts.map +1 -1
- package/dist/subagent-watcher.js +126 -147
- package/dist/subagent-watcher.js.map +1 -1
- package/dist/team-watcher.d.ts +3 -0
- package/dist/team-watcher.d.ts.map +1 -1
- package/dist/team-watcher.js +54 -5
- package/dist/team-watcher.js.map +1 -1
- package/dist/tmux-manager.d.ts.map +1 -1
- package/dist/tmux-manager.js +1 -2
- package/dist/tmux-manager.js.map +1 -1
- package/dist/tunnel-manager.d.ts +26 -0
- package/dist/tunnel-manager.d.ts.map +1 -1
- package/dist/tunnel-manager.js +127 -7
- package/dist/tunnel-manager.js.map +1 -1
- package/dist/types/api.d.ts +93 -0
- package/dist/types/api.d.ts.map +1 -0
- package/dist/types/api.js +83 -0
- package/dist/types/api.js.map +1 -0
- package/dist/types/app-state.d.ts +100 -0
- package/dist/types/app-state.d.ts.map +1 -0
- package/dist/types/app-state.js +59 -0
- package/dist/types/app-state.js.map +1 -0
- package/dist/types/common.d.ts +70 -0
- package/dist/types/common.d.ts.map +1 -0
- package/dist/types/common.js +8 -0
- package/dist/types/common.js.map +1 -0
- package/dist/types/index.d.ts +18 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +18 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/lifecycle.d.ts +17 -0
- package/dist/types/lifecycle.d.ts.map +1 -0
- package/dist/types/lifecycle.js +5 -0
- package/dist/types/lifecycle.js.map +1 -0
- package/dist/types/plan.d.ts +32 -0
- package/dist/types/plan.d.ts.map +1 -0
- package/dist/types/plan.js +5 -0
- package/dist/types/plan.js.map +1 -0
- package/dist/types/push.d.ts +23 -0
- package/dist/types/push.d.ts.map +1 -0
- package/dist/types/push.js +5 -0
- package/dist/types/push.js.map +1 -0
- package/dist/types/ralph.d.ts +241 -0
- package/dist/types/ralph.d.ts.map +1 -0
- package/dist/types/ralph.js +49 -0
- package/dist/types/ralph.js.map +1 -0
- package/dist/types/respawn.d.ts +250 -0
- package/dist/types/respawn.d.ts.map +1 -0
- package/dist/types/respawn.js +5 -0
- package/dist/types/respawn.js.map +1 -0
- package/dist/types/run-summary.d.ts +81 -0
- package/dist/types/run-summary.d.ts.map +1 -0
- package/dist/types/run-summary.js +22 -0
- package/dist/types/run-summary.js.map +1 -0
- package/dist/types/session.d.ts +130 -0
- package/dist/types/session.d.ts.map +1 -0
- package/dist/types/session.js +5 -0
- package/dist/types/session.js.map +1 -0
- package/dist/types/task.d.ts +58 -0
- package/dist/types/task.d.ts.map +1 -0
- package/dist/types/task.js +5 -0
- package/dist/types/task.js.map +1 -0
- package/dist/types/teams.d.ts +55 -0
- package/dist/types/teams.d.ts.map +1 -0
- package/dist/types/teams.js +5 -0
- package/dist/types/teams.js.map +1 -0
- package/dist/types/tools.d.ts +46 -0
- package/dist/types/tools.d.ts.map +1 -0
- package/dist/types/tools.js +5 -0
- package/dist/types/tools.js.map +1 -0
- package/dist/types.d.ts +1 -1138
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -214
- package/dist/types.js.map +1 -1
- package/dist/utils/claude-cli-resolver.d.ts.map +1 -1
- package/dist/utils/claude-cli-resolver.js +1 -2
- package/dist/utils/claude-cli-resolver.js.map +1 -1
- package/dist/utils/debouncer.d.ts +111 -0
- package/dist/utils/debouncer.d.ts.map +1 -0
- package/dist/utils/debouncer.js +162 -0
- package/dist/utils/debouncer.js.map +1 -0
- package/dist/utils/index.d.ts +3 -2
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +3 -2
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/opencode-cli-resolver.d.ts.map +1 -1
- package/dist/utils/opencode-cli-resolver.js +1 -2
- package/dist/utils/opencode-cli-resolver.js.map +1 -1
- package/dist/utils/string-similarity.d.ts +0 -57
- package/dist/utils/string-similarity.d.ts.map +1 -1
- package/dist/utils/string-similarity.js +3 -18
- package/dist/utils/string-similarity.js.map +1 -1
- package/dist/web/middleware/auth.d.ts +31 -0
- package/dist/web/middleware/auth.d.ts.map +1 -0
- package/dist/web/middleware/auth.js +154 -0
- package/dist/web/middleware/auth.js.map +1 -0
- package/dist/web/ports/auth-port.d.ts +18 -0
- package/dist/web/ports/auth-port.d.ts.map +1 -0
- package/dist/web/ports/auth-port.js +6 -0
- package/dist/web/ports/auth-port.js.map +1 -0
- package/dist/web/ports/config-port.d.ts +28 -0
- package/dist/web/ports/config-port.d.ts.map +1 -0
- package/dist/web/ports/config-port.js +6 -0
- package/dist/web/ports/config-port.js.map +1 -0
- package/dist/web/ports/event-port.d.ts +13 -0
- package/dist/web/ports/event-port.d.ts.map +1 -0
- package/dist/web/ports/event-port.js +6 -0
- package/dist/web/ports/event-port.js.map +1 -0
- package/dist/web/ports/index.d.ts +14 -0
- package/dist/web/ports/index.d.ts.map +1 -0
- package/dist/web/ports/index.js +9 -0
- package/dist/web/ports/index.js.map +1 -0
- package/dist/web/ports/infra-port.d.ts +36 -0
- package/dist/web/ports/infra-port.d.ts.map +1 -0
- package/dist/web/ports/infra-port.js +6 -0
- package/dist/web/ports/infra-port.js.map +1 -0
- package/dist/web/ports/respawn-port.d.ts +20 -0
- package/dist/web/ports/respawn-port.d.ts.map +1 -0
- package/dist/web/ports/respawn-port.js +6 -0
- package/dist/web/ports/respawn-port.js.map +1 -0
- package/dist/web/ports/session-port.d.ts +15 -0
- package/dist/web/ports/session-port.d.ts.map +1 -0
- package/dist/web/ports/session-port.js +6 -0
- package/dist/web/ports/session-port.js.map +1 -0
- package/dist/web/public/api-client.js +70 -0
- package/dist/web/public/api-client.js.br +0 -0
- package/dist/web/public/api-client.js.gz +0 -0
- package/dist/web/public/app.js +152 -236
- package/dist/web/public/app.js.br +0 -0
- package/dist/web/public/app.js.gz +0 -0
- package/dist/web/public/constants.js +238 -0
- package/dist/web/public/constants.js.br +0 -0
- package/dist/web/public/constants.js.gz +0 -0
- package/dist/web/public/index.html +11 -3
- package/dist/web/public/index.html.br +0 -0
- package/dist/web/public/index.html.gz +0 -0
- package/dist/web/public/keyboard-accessory.js +279 -0
- package/dist/web/public/keyboard-accessory.js.br +0 -0
- package/dist/web/public/keyboard-accessory.js.gz +0 -0
- package/dist/web/public/mobile-handlers.js +467 -0
- package/dist/web/public/mobile-handlers.js.br +0 -0
- package/dist/web/public/mobile-handlers.js.gz +0 -0
- package/dist/web/public/mobile.css.gz +0 -0
- package/dist/web/public/notification-manager.js +445 -0
- package/dist/web/public/notification-manager.js.br +0 -0
- package/dist/web/public/notification-manager.js.gz +0 -0
- package/dist/web/public/ralph-wizard.js +3 -3
- package/dist/web/public/ralph-wizard.js.br +0 -0
- package/dist/web/public/ralph-wizard.js.gz +0 -0
- package/dist/web/public/styles.css.gz +0 -0
- package/dist/web/public/subagent-windows.js +1115 -0
- package/dist/web/public/subagent-windows.js.br +0 -0
- package/dist/web/public/subagent-windows.js.gz +0 -0
- package/dist/web/public/sw.js.gz +0 -0
- package/dist/web/public/upload.html.gz +0 -0
- package/dist/web/public/vendor/xterm-addon-fit.min.js.gz +0 -0
- package/dist/web/public/vendor/xterm-addon-unicode11.min.js.gz +0 -0
- package/dist/web/public/vendor/xterm-addon-webgl.min.js.gz +0 -0
- package/dist/web/public/vendor/xterm.css.gz +0 -0
- package/dist/web/public/vendor/xterm.min.js.gz +0 -0
- package/dist/web/public/voice-input.js +858 -0
- package/dist/web/public/voice-input.js.br +0 -0
- package/dist/web/public/voice-input.js.gz +0 -0
- package/dist/web/route-helpers.d.ts +38 -0
- package/dist/web/route-helpers.d.ts.map +1 -0
- package/dist/web/route-helpers.js +143 -0
- package/dist/web/route-helpers.js.map +1 -0
- package/dist/web/routes/case-routes.d.ts +9 -0
- package/dist/web/routes/case-routes.d.ts.map +1 -0
- package/dist/web/routes/case-routes.js +419 -0
- package/dist/web/routes/case-routes.js.map +1 -0
- package/dist/web/routes/file-routes.d.ts +8 -0
- package/dist/web/routes/file-routes.d.ts.map +1 -0
- package/dist/web/routes/file-routes.js +337 -0
- package/dist/web/routes/file-routes.js.map +1 -0
- package/dist/web/routes/hook-event-routes.d.ts +9 -0
- package/dist/web/routes/hook-event-routes.d.ts.map +1 -0
- package/dist/web/routes/hook-event-routes.js +57 -0
- package/dist/web/routes/hook-event-routes.js.map +1 -0
- package/dist/web/routes/index.d.ts +16 -0
- package/dist/web/routes/index.d.ts.map +1 -0
- package/dist/web/routes/index.js +16 -0
- package/dist/web/routes/index.js.map +1 -0
- package/dist/web/routes/mux-routes.d.ts +8 -0
- package/dist/web/routes/mux-routes.d.ts.map +1 -0
- package/dist/web/routes/mux-routes.js +32 -0
- package/dist/web/routes/mux-routes.js.map +1 -0
- package/dist/web/routes/plan-routes.d.ts +9 -0
- package/dist/web/routes/plan-routes.d.ts.map +1 -0
- package/dist/web/routes/plan-routes.js +381 -0
- package/dist/web/routes/plan-routes.js.map +1 -0
- package/dist/web/routes/push-routes.d.ts +8 -0
- package/dist/web/routes/push-routes.d.ts.map +1 -0
- package/dist/web/routes/push-routes.js +49 -0
- package/dist/web/routes/push-routes.js.map +1 -0
- package/dist/web/routes/ralph-routes.d.ts +9 -0
- package/dist/web/routes/ralph-routes.d.ts.map +1 -0
- package/dist/web/routes/ralph-routes.js +475 -0
- package/dist/web/routes/ralph-routes.js.map +1 -0
- package/dist/web/routes/respawn-routes.d.ts +8 -0
- package/dist/web/routes/respawn-routes.d.ts.map +1 -0
- package/dist/web/routes/respawn-routes.js +260 -0
- package/dist/web/routes/respawn-routes.js.map +1 -0
- package/dist/web/routes/scheduled-routes.d.ts +8 -0
- package/dist/web/routes/scheduled-routes.d.ts.map +1 -0
- package/dist/web/routes/scheduled-routes.js +51 -0
- package/dist/web/routes/scheduled-routes.js.map +1 -0
- package/dist/web/routes/session-routes.d.ts +9 -0
- package/dist/web/routes/session-routes.d.ts.map +1 -0
- package/dist/web/routes/session-routes.js +729 -0
- package/dist/web/routes/session-routes.js.map +1 -0
- package/dist/web/routes/system-routes.d.ts +9 -0
- package/dist/web/routes/system-routes.d.ts.map +1 -0
- package/dist/web/routes/system-routes.js +678 -0
- package/dist/web/routes/system-routes.js.map +1 -0
- package/dist/web/routes/team-routes.d.ts +8 -0
- package/dist/web/routes/team-routes.d.ts.map +1 -0
- package/dist/web/routes/team-routes.js +14 -0
- package/dist/web/routes/team-routes.js.map +1 -0
- package/dist/web/schemas.d.ts +43 -3
- package/dist/web/schemas.d.ts.map +1 -1
- package/dist/web/schemas.js +6 -2
- package/dist/web/schemas.js.map +1 -1
- package/dist/web/server.d.ts +10 -9
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +342 -3829
- package/dist/web/server.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Auto-compact and auto-clear automation for Session.
|
|
3
|
+
*
|
|
4
|
+
* Monitors token counts and triggers /compact or /clear commands when
|
|
5
|
+
* configurable thresholds are reached. Waits for Claude to be idle
|
|
6
|
+
* before sending commands, with retry logic and mutual exclusion
|
|
7
|
+
* (compact and clear never run simultaneously).
|
|
8
|
+
*
|
|
9
|
+
* @module session-auto-ops
|
|
10
|
+
*/
|
|
11
|
+
import { EventEmitter } from 'node:events';
|
|
12
|
+
// ============================================================================
|
|
13
|
+
// Timing Constants
|
|
14
|
+
// ============================================================================
|
|
15
|
+
/** Delay for auto-compact/clear retry attempts (2 seconds) */
|
|
16
|
+
const AUTO_RETRY_DELAY_MS = 2000;
|
|
17
|
+
/** Delay for auto-compact/clear initial check (1 second) */
|
|
18
|
+
const AUTO_INITIAL_DELAY_MS = 1000;
|
|
19
|
+
/** Cooldown after compact completes before re-enabling (10 seconds) */
|
|
20
|
+
const COMPACT_COOLDOWN_MS = 10000;
|
|
21
|
+
/** Cooldown after clear completes before re-enabling (5 seconds) */
|
|
22
|
+
const CLEAR_COOLDOWN_MS = 5000;
|
|
23
|
+
/** Minimum valid threshold for auto-clear/compact (1000 tokens) */
|
|
24
|
+
const MIN_AUTO_THRESHOLD = 1000;
|
|
25
|
+
/** Maximum valid threshold for auto-clear/compact (500k tokens) */
|
|
26
|
+
const MAX_AUTO_THRESHOLD = 500_000;
|
|
27
|
+
/** Default auto-clear threshold when invalid value provided */
|
|
28
|
+
const DEFAULT_AUTO_CLEAR_THRESHOLD = 140_000;
|
|
29
|
+
/** Default auto-compact threshold when invalid value provided */
|
|
30
|
+
const DEFAULT_AUTO_COMPACT_THRESHOLD = 110_000;
|
|
31
|
+
/**
|
|
32
|
+
* Manages auto-compact and auto-clear automation for a Session.
|
|
33
|
+
*
|
|
34
|
+
* When enabled, monitors token counts after each update and triggers
|
|
35
|
+
* /compact or /clear commands when thresholds are exceeded. Ensures
|
|
36
|
+
* mutual exclusion between compact and clear operations.
|
|
37
|
+
*/
|
|
38
|
+
export class SessionAutoOps extends EventEmitter {
|
|
39
|
+
// Auto-compact state
|
|
40
|
+
_autoCompactThreshold;
|
|
41
|
+
_autoCompactEnabled = false;
|
|
42
|
+
_autoCompactPrompt = '';
|
|
43
|
+
_isCompacting = false;
|
|
44
|
+
_autoCompactTimer = null;
|
|
45
|
+
// Auto-clear state
|
|
46
|
+
_autoClearThreshold;
|
|
47
|
+
_autoClearEnabled = false;
|
|
48
|
+
_isClearing = false;
|
|
49
|
+
_autoClearTimer = null;
|
|
50
|
+
callbacks;
|
|
51
|
+
constructor(callbacks, config) {
|
|
52
|
+
super();
|
|
53
|
+
this.callbacks = callbacks;
|
|
54
|
+
this._autoCompactThreshold = config?.compactThreshold ?? DEFAULT_AUTO_COMPACT_THRESHOLD;
|
|
55
|
+
this._autoClearThreshold = config?.clearThreshold ?? DEFAULT_AUTO_CLEAR_THRESHOLD;
|
|
56
|
+
}
|
|
57
|
+
// ============================================================================
|
|
58
|
+
// Auto-compact getters/setters
|
|
59
|
+
// ============================================================================
|
|
60
|
+
get autoCompactThreshold() {
|
|
61
|
+
return this._autoCompactThreshold;
|
|
62
|
+
}
|
|
63
|
+
get autoCompactEnabled() {
|
|
64
|
+
return this._autoCompactEnabled;
|
|
65
|
+
}
|
|
66
|
+
get autoCompactPrompt() {
|
|
67
|
+
return this._autoCompactPrompt;
|
|
68
|
+
}
|
|
69
|
+
get isCompacting() {
|
|
70
|
+
return this._isCompacting;
|
|
71
|
+
}
|
|
72
|
+
setAutoCompact(enabled, threshold, prompt) {
|
|
73
|
+
this._autoCompactEnabled = enabled;
|
|
74
|
+
if (threshold !== undefined) {
|
|
75
|
+
if (threshold < MIN_AUTO_THRESHOLD || threshold > MAX_AUTO_THRESHOLD) {
|
|
76
|
+
console.warn(`[SessionAutoOps ${this.callbacks.getSessionId()}] Invalid autoCompact threshold ${threshold}, must be between ${MIN_AUTO_THRESHOLD} and ${MAX_AUTO_THRESHOLD}. Using default ${DEFAULT_AUTO_COMPACT_THRESHOLD}.`);
|
|
77
|
+
this._autoCompactThreshold = DEFAULT_AUTO_COMPACT_THRESHOLD;
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
this._autoCompactThreshold = threshold;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
if (prompt !== undefined) {
|
|
84
|
+
this._autoCompactPrompt = prompt;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
// ============================================================================
|
|
88
|
+
// Auto-clear getters/setters
|
|
89
|
+
// ============================================================================
|
|
90
|
+
get autoClearThreshold() {
|
|
91
|
+
return this._autoClearThreshold;
|
|
92
|
+
}
|
|
93
|
+
get autoClearEnabled() {
|
|
94
|
+
return this._autoClearEnabled;
|
|
95
|
+
}
|
|
96
|
+
get isClearing() {
|
|
97
|
+
return this._isClearing;
|
|
98
|
+
}
|
|
99
|
+
setAutoClear(enabled, threshold) {
|
|
100
|
+
this._autoClearEnabled = enabled;
|
|
101
|
+
if (threshold !== undefined) {
|
|
102
|
+
if (threshold < MIN_AUTO_THRESHOLD || threshold > MAX_AUTO_THRESHOLD) {
|
|
103
|
+
console.warn(`[SessionAutoOps ${this.callbacks.getSessionId()}] Invalid autoClear threshold ${threshold}, must be between ${MIN_AUTO_THRESHOLD} and ${MAX_AUTO_THRESHOLD}. Using default ${DEFAULT_AUTO_CLEAR_THRESHOLD}.`);
|
|
104
|
+
this._autoClearThreshold = DEFAULT_AUTO_CLEAR_THRESHOLD;
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
this._autoClearThreshold = threshold;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
// ============================================================================
|
|
112
|
+
// Threshold checks
|
|
113
|
+
// ============================================================================
|
|
114
|
+
/**
|
|
115
|
+
* Check if auto-compact should be triggered based on current token count.
|
|
116
|
+
* Called after token count updates.
|
|
117
|
+
*/
|
|
118
|
+
checkAutoCompact() {
|
|
119
|
+
if (this.callbacks.isStopped())
|
|
120
|
+
return;
|
|
121
|
+
if (!this._autoCompactEnabled || this._isCompacting || this._isClearing)
|
|
122
|
+
return;
|
|
123
|
+
const totalTokens = this.callbacks.getTotalTokens();
|
|
124
|
+
if (totalTokens >= this._autoCompactThreshold) {
|
|
125
|
+
this._isCompacting = true;
|
|
126
|
+
console.log(`[SessionAutoOps] Auto-compact triggered: ${totalTokens} tokens >= ${this._autoCompactThreshold} threshold`);
|
|
127
|
+
const checkAndCompact = async () => {
|
|
128
|
+
if (this.callbacks.isStopped())
|
|
129
|
+
return;
|
|
130
|
+
if (!this._isCompacting)
|
|
131
|
+
return;
|
|
132
|
+
if (!this.callbacks.isWorking()) {
|
|
133
|
+
if (this.callbacks.isStopped())
|
|
134
|
+
return;
|
|
135
|
+
const compactCmd = this._autoCompactPrompt ? `/compact ${this._autoCompactPrompt}\r` : '/compact\r';
|
|
136
|
+
await this.callbacks.writeCommand(compactCmd);
|
|
137
|
+
this.emit('autoCompact', {
|
|
138
|
+
tokens: totalTokens,
|
|
139
|
+
threshold: this._autoCompactThreshold,
|
|
140
|
+
prompt: this._autoCompactPrompt || undefined,
|
|
141
|
+
});
|
|
142
|
+
if (!this.callbacks.isStopped()) {
|
|
143
|
+
this._autoCompactTimer = setTimeout(() => {
|
|
144
|
+
if (this.callbacks.isStopped())
|
|
145
|
+
return;
|
|
146
|
+
this._autoCompactTimer = null;
|
|
147
|
+
this._isCompacting = false;
|
|
148
|
+
}, COMPACT_COOLDOWN_MS);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
if (!this.callbacks.isStopped()) {
|
|
153
|
+
this._autoCompactTimer = setTimeout(checkAndCompact, AUTO_RETRY_DELAY_MS);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
};
|
|
157
|
+
if (!this.callbacks.isStopped()) {
|
|
158
|
+
this._autoCompactTimer = setTimeout(checkAndCompact, AUTO_INITIAL_DELAY_MS);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Check if auto-clear should be triggered based on current token count.
|
|
164
|
+
* Called after token count updates.
|
|
165
|
+
*/
|
|
166
|
+
checkAutoClear() {
|
|
167
|
+
if (this.callbacks.isStopped())
|
|
168
|
+
return;
|
|
169
|
+
if (!this._autoClearEnabled || this._isClearing || this._isCompacting)
|
|
170
|
+
return;
|
|
171
|
+
const totalTokens = this.callbacks.getTotalTokens();
|
|
172
|
+
if (totalTokens >= this._autoClearThreshold) {
|
|
173
|
+
this._isClearing = true;
|
|
174
|
+
console.log(`[SessionAutoOps] Auto-clear triggered: ${totalTokens} tokens >= ${this._autoClearThreshold} threshold`);
|
|
175
|
+
const checkAndClear = async () => {
|
|
176
|
+
if (this.callbacks.isStopped())
|
|
177
|
+
return;
|
|
178
|
+
if (!this._isClearing)
|
|
179
|
+
return;
|
|
180
|
+
if (!this.callbacks.isWorking()) {
|
|
181
|
+
if (this.callbacks.isStopped())
|
|
182
|
+
return;
|
|
183
|
+
await this.callbacks.writeCommand('/clear\r');
|
|
184
|
+
this.emit('autoClear', { tokens: totalTokens, threshold: this._autoClearThreshold });
|
|
185
|
+
if (!this.callbacks.isStopped()) {
|
|
186
|
+
this._autoClearTimer = setTimeout(() => {
|
|
187
|
+
if (this.callbacks.isStopped())
|
|
188
|
+
return;
|
|
189
|
+
this._autoClearTimer = null;
|
|
190
|
+
this._isClearing = false;
|
|
191
|
+
}, CLEAR_COOLDOWN_MS);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
if (!this.callbacks.isStopped()) {
|
|
196
|
+
this._autoClearTimer = setTimeout(checkAndClear, AUTO_RETRY_DELAY_MS);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
};
|
|
200
|
+
if (!this.callbacks.isStopped()) {
|
|
201
|
+
this._autoClearTimer = setTimeout(checkAndClear, AUTO_INITIAL_DELAY_MS);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
// ============================================================================
|
|
206
|
+
// Cleanup
|
|
207
|
+
// ============================================================================
|
|
208
|
+
/**
|
|
209
|
+
* Clear all timers and reset state. Called when the session stops.
|
|
210
|
+
*/
|
|
211
|
+
destroy() {
|
|
212
|
+
if (this._autoCompactTimer) {
|
|
213
|
+
clearTimeout(this._autoCompactTimer);
|
|
214
|
+
this._autoCompactTimer = null;
|
|
215
|
+
}
|
|
216
|
+
this._isCompacting = false;
|
|
217
|
+
if (this._autoClearTimer) {
|
|
218
|
+
clearTimeout(this._autoClearTimer);
|
|
219
|
+
this._autoClearTimer = null;
|
|
220
|
+
}
|
|
221
|
+
this._isClearing = false;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
//# sourceMappingURL=session-auto-ops.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-auto-ops.js","sourceRoot":"","sources":["../src/session-auto-ops.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Pure functions for building CLI arguments and environment variables
|
|
3
|
+
* for Claude and OpenCode CLI spawning.
|
|
4
|
+
*
|
|
5
|
+
* Extracted from Session to keep argument construction logic testable and
|
|
6
|
+
* separate from PTY lifecycle management.
|
|
7
|
+
*
|
|
8
|
+
* @module session-cli-builder
|
|
9
|
+
*/
|
|
10
|
+
import type { ClaudeMode } from './types.js';
|
|
11
|
+
/**
|
|
12
|
+
* Build Claude CLI permission flags based on the configured mode.
|
|
13
|
+
* Returns an array of args to pass to the CLI.
|
|
14
|
+
*/
|
|
15
|
+
export declare function buildPermissionArgs(claudeMode: ClaudeMode, allowedTools?: string): string[];
|
|
16
|
+
/**
|
|
17
|
+
* Build args for an interactive Claude CLI session (direct PTY, non-mux fallback).
|
|
18
|
+
*
|
|
19
|
+
* @param sessionId - The Codeman session ID (passed as --session-id to Claude)
|
|
20
|
+
* @param claudeMode - Permission mode for the CLI
|
|
21
|
+
* @param model - Optional model override (e.g., 'opus', 'sonnet')
|
|
22
|
+
* @param allowedTools - Optional comma-separated allowed tools list
|
|
23
|
+
* @returns Array of CLI arguments
|
|
24
|
+
*/
|
|
25
|
+
export declare function buildInteractiveArgs(sessionId: string, claudeMode: ClaudeMode, model?: string, allowedTools?: string): string[];
|
|
26
|
+
/**
|
|
27
|
+
* Build args for a one-shot Claude CLI prompt (runPrompt mode).
|
|
28
|
+
*
|
|
29
|
+
* @param prompt - The prompt text to send
|
|
30
|
+
* @param model - Optional model override
|
|
31
|
+
* @returns Array of CLI arguments
|
|
32
|
+
*/
|
|
33
|
+
export declare function buildPromptArgs(prompt: string, model?: string): string[];
|
|
34
|
+
/**
|
|
35
|
+
* Build environment variables for Claude CLI processes (direct PTY, non-mux).
|
|
36
|
+
*
|
|
37
|
+
* Augments process.env with:
|
|
38
|
+
* - UTF-8 locale settings
|
|
39
|
+
* - Augmented PATH (includes Claude CLI directory)
|
|
40
|
+
* - xterm-256color terminal type
|
|
41
|
+
* - Codeman session identification vars
|
|
42
|
+
*
|
|
43
|
+
* @param sessionId - The Codeman session ID
|
|
44
|
+
* @returns Environment variables object for pty.spawn
|
|
45
|
+
*/
|
|
46
|
+
export declare function buildClaudeEnv(sessionId: string): Record<string, string | undefined>;
|
|
47
|
+
/**
|
|
48
|
+
* Build environment variables for mux-attached PTY sessions (tmux attach).
|
|
49
|
+
* Lighter than buildClaudeEnv — no PATH augmentation or Codeman vars needed
|
|
50
|
+
* since the mux session already has those set.
|
|
51
|
+
*
|
|
52
|
+
* @returns Environment variables object for pty.spawn
|
|
53
|
+
*/
|
|
54
|
+
export declare function buildMuxAttachEnv(): Record<string, string | undefined>;
|
|
55
|
+
/**
|
|
56
|
+
* Build environment variables for a direct shell session (non-mux fallback).
|
|
57
|
+
*
|
|
58
|
+
* @param sessionId - The Codeman session ID
|
|
59
|
+
* @returns Environment variables object for pty.spawn
|
|
60
|
+
*/
|
|
61
|
+
export declare function buildShellEnv(sessionId: string): Record<string, string | undefined>;
|
|
62
|
+
//# sourceMappingURL=session-cli-builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-cli-builder.d.ts","sourceRoot":"","sources":["../src/session-cli-builder.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAG7C;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,UAAU,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAc3F;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,UAAU,EACtB,KAAK,CAAC,EAAE,MAAM,EACd,YAAY,CAAC,EAAE,MAAM,GACpB,MAAM,EAAE,CAIV;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAOxE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAcpF;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAStE;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAUnF"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Pure functions for building CLI arguments and environment variables
|
|
3
|
+
* for Claude and OpenCode CLI spawning.
|
|
4
|
+
*
|
|
5
|
+
* Extracted from Session to keep argument construction logic testable and
|
|
6
|
+
* separate from PTY lifecycle management.
|
|
7
|
+
*
|
|
8
|
+
* @module session-cli-builder
|
|
9
|
+
*/
|
|
10
|
+
import { getAugmentedPath } from './utils/claude-cli-resolver.js';
|
|
11
|
+
/**
|
|
12
|
+
* Build Claude CLI permission flags based on the configured mode.
|
|
13
|
+
* Returns an array of args to pass to the CLI.
|
|
14
|
+
*/
|
|
15
|
+
export function buildPermissionArgs(claudeMode, allowedTools) {
|
|
16
|
+
switch (claudeMode) {
|
|
17
|
+
case 'dangerously-skip-permissions':
|
|
18
|
+
return ['--dangerously-skip-permissions'];
|
|
19
|
+
case 'allowedTools':
|
|
20
|
+
if (allowedTools) {
|
|
21
|
+
return ['--allowedTools', allowedTools];
|
|
22
|
+
}
|
|
23
|
+
// Fall back to normal mode if no tools specified
|
|
24
|
+
return [];
|
|
25
|
+
case 'normal':
|
|
26
|
+
default:
|
|
27
|
+
return [];
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Build args for an interactive Claude CLI session (direct PTY, non-mux fallback).
|
|
32
|
+
*
|
|
33
|
+
* @param sessionId - The Codeman session ID (passed as --session-id to Claude)
|
|
34
|
+
* @param claudeMode - Permission mode for the CLI
|
|
35
|
+
* @param model - Optional model override (e.g., 'opus', 'sonnet')
|
|
36
|
+
* @param allowedTools - Optional comma-separated allowed tools list
|
|
37
|
+
* @returns Array of CLI arguments
|
|
38
|
+
*/
|
|
39
|
+
export function buildInteractiveArgs(sessionId, claudeMode, model, allowedTools) {
|
|
40
|
+
const args = [...buildPermissionArgs(claudeMode, allowedTools), '--session-id', sessionId];
|
|
41
|
+
if (model)
|
|
42
|
+
args.push('--model', model);
|
|
43
|
+
return args;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Build args for a one-shot Claude CLI prompt (runPrompt mode).
|
|
47
|
+
*
|
|
48
|
+
* @param prompt - The prompt text to send
|
|
49
|
+
* @param model - Optional model override
|
|
50
|
+
* @returns Array of CLI arguments
|
|
51
|
+
*/
|
|
52
|
+
export function buildPromptArgs(prompt, model) {
|
|
53
|
+
const args = ['-p', '--verbose', '--dangerously-skip-permissions', '--output-format', 'stream-json'];
|
|
54
|
+
if (model) {
|
|
55
|
+
args.push('--model', model);
|
|
56
|
+
}
|
|
57
|
+
args.push(prompt);
|
|
58
|
+
return args;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Build environment variables for Claude CLI processes (direct PTY, non-mux).
|
|
62
|
+
*
|
|
63
|
+
* Augments process.env with:
|
|
64
|
+
* - UTF-8 locale settings
|
|
65
|
+
* - Augmented PATH (includes Claude CLI directory)
|
|
66
|
+
* - xterm-256color terminal type
|
|
67
|
+
* - Codeman session identification vars
|
|
68
|
+
*
|
|
69
|
+
* @param sessionId - The Codeman session ID
|
|
70
|
+
* @returns Environment variables object for pty.spawn
|
|
71
|
+
*/
|
|
72
|
+
export function buildClaudeEnv(sessionId) {
|
|
73
|
+
return {
|
|
74
|
+
...process.env,
|
|
75
|
+
LANG: 'en_US.UTF-8',
|
|
76
|
+
LC_ALL: 'en_US.UTF-8',
|
|
77
|
+
PATH: getAugmentedPath(),
|
|
78
|
+
TERM: 'xterm-256color',
|
|
79
|
+
COLORTERM: undefined,
|
|
80
|
+
CLAUDECODE: undefined,
|
|
81
|
+
// Inform Claude it's running within Codeman (helps prevent self-termination)
|
|
82
|
+
CODEMAN_MUX: '1',
|
|
83
|
+
CODEMAN_SESSION_ID: sessionId,
|
|
84
|
+
CODEMAN_API_URL: process.env.CODEMAN_API_URL || 'http://localhost:3000',
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Build environment variables for mux-attached PTY sessions (tmux attach).
|
|
89
|
+
* Lighter than buildClaudeEnv — no PATH augmentation or Codeman vars needed
|
|
90
|
+
* since the mux session already has those set.
|
|
91
|
+
*
|
|
92
|
+
* @returns Environment variables object for pty.spawn
|
|
93
|
+
*/
|
|
94
|
+
export function buildMuxAttachEnv() {
|
|
95
|
+
return {
|
|
96
|
+
...process.env,
|
|
97
|
+
LANG: 'en_US.UTF-8',
|
|
98
|
+
LC_ALL: 'en_US.UTF-8',
|
|
99
|
+
TERM: 'xterm-256color',
|
|
100
|
+
COLORTERM: undefined,
|
|
101
|
+
CLAUDECODE: undefined,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Build environment variables for a direct shell session (non-mux fallback).
|
|
106
|
+
*
|
|
107
|
+
* @param sessionId - The Codeman session ID
|
|
108
|
+
* @returns Environment variables object for pty.spawn
|
|
109
|
+
*/
|
|
110
|
+
export function buildShellEnv(sessionId) {
|
|
111
|
+
return {
|
|
112
|
+
...process.env,
|
|
113
|
+
LANG: 'en_US.UTF-8',
|
|
114
|
+
LC_ALL: 'en_US.UTF-8',
|
|
115
|
+
TERM: 'xterm-256color',
|
|
116
|
+
CODEMAN_MUX: '1',
|
|
117
|
+
CODEMAN_SESSION_ID: sessionId,
|
|
118
|
+
CODEMAN_API_URL: process.env.CODEMAN_API_URL || 'http://localhost:3000',
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=session-cli-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-cli-builder.js","sourceRoot":"","sources":["../src/session-cli-builder.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAElE;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,UAAsB,EAAE,YAAqB;IAC/E,QAAQ,UAAU,EAAE,CAAC;QACnB,KAAK,8BAA8B;YACjC,OAAO,CAAC,gCAAgC,CAAC,CAAC;QAC5C,KAAK,cAAc;YACjB,IAAI,YAAY,EAAE,CAAC;gBACjB,OAAO,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC;YAC1C,CAAC;YACD,iDAAiD;YACjD,OAAO,EAAE,CAAC;QACZ,KAAK,QAAQ,CAAC;QACd;YACE,OAAO,EAAE,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,oBAAoB,CAClC,SAAiB,EACjB,UAAsB,EACtB,KAAc,EACd,YAAqB;IAErB,MAAM,IAAI,GAAG,CAAC,GAAG,mBAAmB,CAAC,UAAU,EAAE,YAAY,CAAC,EAAE,cAAc,EAAE,SAAS,CAAC,CAAC;IAC3F,IAAI,KAAK;QAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IACvC,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,MAAc,EAAE,KAAc;IAC5D,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,WAAW,EAAE,gCAAgC,EAAE,iBAAiB,EAAE,aAAa,CAAC,CAAC;IACrG,IAAI,KAAK,EAAE,CAAC;QACV,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC9B,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAClB,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,cAAc,CAAC,SAAiB;IAC9C,OAAO;QACL,GAAG,OAAO,CAAC,GAAG;QACd,IAAI,EAAE,aAAa;QACnB,MAAM,EAAE,aAAa;QACrB,IAAI,EAAE,gBAAgB,EAAE;QACxB,IAAI,EAAE,gBAAgB;QACtB,SAAS,EAAE,SAAS;QACpB,UAAU,EAAE,SAAS;QACrB,6EAA6E;QAC7E,WAAW,EAAE,GAAG;QAChB,kBAAkB,EAAE,SAAS;QAC7B,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,uBAAuB;KACxE,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO;QACL,GAAG,OAAO,CAAC,GAAG;QACd,IAAI,EAAE,aAAa;QACnB,MAAM,EAAE,aAAa;QACrB,IAAI,EAAE,gBAAgB;QACtB,SAAS,EAAE,SAAS;QACpB,UAAU,EAAE,SAAS;KACtB,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,SAAiB;IAC7C,OAAO;QACL,GAAG,OAAO,CAAC,GAAG;QACd,IAAI,EAAE,aAAa;QACnB,MAAM,EAAE,aAAa;QACrB,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,GAAG;QAChB,kBAAkB,EAAE,SAAS;QAC7B,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,uBAAuB;KACxE,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview LRU cache for task descriptions parsed from terminal output.
|
|
3
|
+
*
|
|
4
|
+
* Stores descriptions extracted from Claude Code's Task tool invocations
|
|
5
|
+
* (e.g., "Explore(Check files)") keyed by timestamp. Used to correlate
|
|
6
|
+
* with SubagentWatcher discoveries for better window titles.
|
|
7
|
+
*
|
|
8
|
+
* @module session-task-cache
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* LRU cache for task descriptions parsed from terminal output.
|
|
12
|
+
*
|
|
13
|
+
* Descriptions are keyed by the timestamp when they were parsed.
|
|
14
|
+
* Old entries are automatically cleaned up based on maxAgeMs.
|
|
15
|
+
* Size is bounded by the underlying LRUMap.
|
|
16
|
+
*/
|
|
17
|
+
export declare class SessionTaskCache {
|
|
18
|
+
private readonly cache;
|
|
19
|
+
private readonly maxAgeMs;
|
|
20
|
+
constructor(maxSize?: number, maxAgeMs?: number);
|
|
21
|
+
/**
|
|
22
|
+
* Add a task description at the given timestamp.
|
|
23
|
+
*/
|
|
24
|
+
add(timestamp: number, description: string): void;
|
|
25
|
+
/**
|
|
26
|
+
* Remove task descriptions older than maxAgeMs.
|
|
27
|
+
* LRUMap maintains insertion order, so we can break early
|
|
28
|
+
* once we find a non-expired entry.
|
|
29
|
+
*/
|
|
30
|
+
private cleanupOld;
|
|
31
|
+
/**
|
|
32
|
+
* Get all recent task descriptions sorted by timestamp (most recent first).
|
|
33
|
+
*/
|
|
34
|
+
getAll(): Array<{
|
|
35
|
+
timestamp: number;
|
|
36
|
+
description: string;
|
|
37
|
+
}>;
|
|
38
|
+
/**
|
|
39
|
+
* Find a task description that was parsed close to a given timestamp.
|
|
40
|
+
* Used to correlate with SubagentWatcher discoveries.
|
|
41
|
+
*
|
|
42
|
+
* @param subagentStartTime - The timestamp when the subagent was discovered
|
|
43
|
+
* @param maxAgeMs - Maximum age difference to consider (default 10 seconds)
|
|
44
|
+
* @returns The matching description or undefined
|
|
45
|
+
*/
|
|
46
|
+
findNear(subagentStartTime: number, maxAgeMs?: number): string | undefined;
|
|
47
|
+
/**
|
|
48
|
+
* Clear all cached descriptions.
|
|
49
|
+
*/
|
|
50
|
+
clear(): void;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=session-task-cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-task-cache.d.ts","sourceRoot":"","sources":["../src/session-task-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAUH;;;;;;GAMG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAyB;IAC/C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAEtB,OAAO,GAAE,MAAyB,EAAE,QAAQ,GAAE,MAA2B;IAKrF;;OAEG;IACH,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAIjD;;;;OAIG;IACH,OAAO,CAAC,UAAU;IAWlB;;OAEG;IACH,MAAM,IAAI,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IAS3D;;;;;;;OAOG;IACH,QAAQ,CAAC,iBAAiB,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAc,GAAG,MAAM,GAAG,SAAS;IAiBjF;;OAEG;IACH,KAAK,IAAI,IAAI;CAGd"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview LRU cache for task descriptions parsed from terminal output.
|
|
3
|
+
*
|
|
4
|
+
* Stores descriptions extracted from Claude Code's Task tool invocations
|
|
5
|
+
* (e.g., "Explore(Check files)") keyed by timestamp. Used to correlate
|
|
6
|
+
* with SubagentWatcher discoveries for better window titles.
|
|
7
|
+
*
|
|
8
|
+
* @module session-task-cache
|
|
9
|
+
*/
|
|
10
|
+
import { LRUMap } from './utils/lru-map.js';
|
|
11
|
+
/** Default maximum number of task descriptions to keep */
|
|
12
|
+
const DEFAULT_MAX_SIZE = 100;
|
|
13
|
+
/** Default maximum age for task descriptions (30 seconds) */
|
|
14
|
+
const DEFAULT_MAX_AGE_MS = 30_000;
|
|
15
|
+
/**
|
|
16
|
+
* LRU cache for task descriptions parsed from terminal output.
|
|
17
|
+
*
|
|
18
|
+
* Descriptions are keyed by the timestamp when they were parsed.
|
|
19
|
+
* Old entries are automatically cleaned up based on maxAgeMs.
|
|
20
|
+
* Size is bounded by the underlying LRUMap.
|
|
21
|
+
*/
|
|
22
|
+
export class SessionTaskCache {
|
|
23
|
+
cache;
|
|
24
|
+
maxAgeMs;
|
|
25
|
+
constructor(maxSize = DEFAULT_MAX_SIZE, maxAgeMs = DEFAULT_MAX_AGE_MS) {
|
|
26
|
+
this.cache = new LRUMap({ maxSize });
|
|
27
|
+
this.maxAgeMs = maxAgeMs;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Add a task description at the given timestamp.
|
|
31
|
+
*/
|
|
32
|
+
add(timestamp, description) {
|
|
33
|
+
this.cache.set(timestamp, description);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Remove task descriptions older than maxAgeMs.
|
|
37
|
+
* LRUMap maintains insertion order, so we can break early
|
|
38
|
+
* once we find a non-expired entry.
|
|
39
|
+
*/
|
|
40
|
+
cleanupOld() {
|
|
41
|
+
const cutoff = Date.now() - this.maxAgeMs;
|
|
42
|
+
for (const timestamp of this.cache.keysInOrder()) {
|
|
43
|
+
if (timestamp < cutoff) {
|
|
44
|
+
this.cache.delete(timestamp);
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
break;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Get all recent task descriptions sorted by timestamp (most recent first).
|
|
53
|
+
*/
|
|
54
|
+
getAll() {
|
|
55
|
+
this.cleanupOld();
|
|
56
|
+
const results = [];
|
|
57
|
+
for (const [timestamp, description] of this.cache) {
|
|
58
|
+
results.push({ timestamp, description });
|
|
59
|
+
}
|
|
60
|
+
return results.sort((a, b) => b.timestamp - a.timestamp);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Find a task description that was parsed close to a given timestamp.
|
|
64
|
+
* Used to correlate with SubagentWatcher discoveries.
|
|
65
|
+
*
|
|
66
|
+
* @param subagentStartTime - The timestamp when the subagent was discovered
|
|
67
|
+
* @param maxAgeMs - Maximum age difference to consider (default 10 seconds)
|
|
68
|
+
* @returns The matching description or undefined
|
|
69
|
+
*/
|
|
70
|
+
findNear(subagentStartTime, maxAgeMs = 10000) {
|
|
71
|
+
this.cleanupOld();
|
|
72
|
+
let bestMatch;
|
|
73
|
+
let bestDiff = Infinity;
|
|
74
|
+
for (const [timestamp, description] of this.cache) {
|
|
75
|
+
const diff = Math.abs(subagentStartTime - timestamp);
|
|
76
|
+
if (diff < maxAgeMs && diff < bestDiff) {
|
|
77
|
+
bestMatch = { timestamp, description };
|
|
78
|
+
bestDiff = diff;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return bestMatch?.description;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Clear all cached descriptions.
|
|
85
|
+
*/
|
|
86
|
+
clear() {
|
|
87
|
+
this.cache.clear();
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=session-task-cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-task-cache.js","sourceRoot":"","sources":["../src/session-task-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,0DAA0D;AAC1D,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAE7B,6DAA6D;AAC7D,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAElC;;;;;;GAMG;AACH,MAAM,OAAO,gBAAgB;IACV,KAAK,CAAyB;IAC9B,QAAQ,CAAS;IAElC,YAAY,UAAkB,gBAAgB,EAAE,WAAmB,kBAAkB;QACnF,IAAI,CAAC,KAAK,GAAG,IAAI,MAAM,CAAiB,EAAE,OAAO,EAAE,CAAC,CAAC;QACrD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,SAAiB,EAAE,WAAmB;QACxC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACzC,CAAC;IAED;;;;OAIG;IACK,UAAU;QAChB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC1C,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACjD,IAAI,SAAS,GAAG,MAAM,EAAE,CAAC;gBACvB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAC/B,CAAC;iBAAM,CAAC;gBACN,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,MAAM,OAAO,GAAsD,EAAE,CAAC;QACtE,KAAK,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAClD,OAAO,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,CAAC;QAC3C,CAAC;QACD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;IAC3D,CAAC;IAED;;;;;;;OAOG;IACH,QAAQ,CAAC,iBAAyB,EAAE,WAAmB,KAAK;QAC1D,IAAI,CAAC,UAAU,EAAE,CAAC;QAElB,IAAI,SAAiE,CAAC;QACtE,IAAI,QAAQ,GAAG,QAAQ,CAAC;QAExB,KAAK,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAClD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,iBAAiB,GAAG,SAAS,CAAC,CAAC;YACrD,IAAI,IAAI,GAAG,QAAQ,IAAI,IAAI,GAAG,QAAQ,EAAE,CAAC;gBACvC,SAAS,GAAG,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC;gBACvC,QAAQ,GAAG,IAAI,CAAC;YAClB,CAAC;QACH,CAAC;QAED,OAAO,SAAS,EAAE,WAAW,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;CACF"}
|
package/dist/session.d.ts
CHANGED
|
@@ -157,9 +157,7 @@ export declare class Session extends EventEmitter {
|
|
|
157
157
|
readonly workingDir: string;
|
|
158
158
|
readonly createdAt: number;
|
|
159
159
|
readonly mode: SessionMode;
|
|
160
|
-
|
|
161
|
-
private static readonly MAX_TASK_DESCRIPTIONS;
|
|
162
|
-
private static readonly TASK_DESCRIPTION_MAX_AGE_MS;
|
|
160
|
+
private _taskCache;
|
|
163
161
|
private _name;
|
|
164
162
|
private ptyProcess;
|
|
165
163
|
private _pid;
|
|
@@ -184,13 +182,7 @@ export declare class Session extends EventEmitter {
|
|
|
184
182
|
private _taskTracker;
|
|
185
183
|
private _totalInputTokens;
|
|
186
184
|
private _totalOutputTokens;
|
|
187
|
-
private
|
|
188
|
-
private _autoClearEnabled;
|
|
189
|
-
private _isClearing;
|
|
190
|
-
private _autoCompactThreshold;
|
|
191
|
-
private _autoCompactEnabled;
|
|
192
|
-
private _autoCompactPrompt;
|
|
193
|
-
private _isCompacting;
|
|
185
|
+
private _autoOps;
|
|
194
186
|
private _imageWatcherEnabled;
|
|
195
187
|
private _flickerFilterEnabled;
|
|
196
188
|
private _cliVersion;
|
|
@@ -198,8 +190,6 @@ export declare class Session extends EventEmitter {
|
|
|
198
190
|
private _cliAccountType;
|
|
199
191
|
private _cliLatestVersion;
|
|
200
192
|
private _cliInfoParsed;
|
|
201
|
-
private _autoCompactTimer;
|
|
202
|
-
private _autoClearTimer;
|
|
203
193
|
private _promptCheckInterval;
|
|
204
194
|
private _promptCheckTimeout;
|
|
205
195
|
private _shellIdleTimer;
|
|
@@ -220,7 +210,6 @@ export declare class Session extends EventEmitter {
|
|
|
220
210
|
private _ralphHandlers;
|
|
221
211
|
private _bashToolParser;
|
|
222
212
|
private _bashToolHandlers;
|
|
223
|
-
private _recentTaskDescriptions;
|
|
224
213
|
private _lastExpensiveProcessTime;
|
|
225
214
|
private _pendingCleanData;
|
|
226
215
|
private _expensiveProcessTimer;
|
|
@@ -288,11 +277,6 @@ export declare class Session extends EventEmitter {
|
|
|
288
277
|
get claudeMode(): ClaudeMode;
|
|
289
278
|
/** Allowed tools list (for 'allowedTools' mode) */
|
|
290
279
|
get allowedTools(): string | undefined;
|
|
291
|
-
/**
|
|
292
|
-
* Build Claude CLI permission flags based on the configured mode.
|
|
293
|
-
* Returns an array of args to pass to the CLI.
|
|
294
|
-
*/
|
|
295
|
-
private _buildPermissionArgs;
|
|
296
280
|
/**
|
|
297
281
|
* Set CPU priority configuration.
|
|
298
282
|
* Note: This only affects new sessions; existing running processes won't be changed.
|
|
@@ -312,14 +296,6 @@ export declare class Session extends EventEmitter {
|
|
|
312
296
|
get autoClearEnabled(): boolean;
|
|
313
297
|
get name(): string;
|
|
314
298
|
set name(value: string);
|
|
315
|
-
/** Minimum valid threshold for auto-clear/compact (1000 tokens) */
|
|
316
|
-
private static readonly MIN_AUTO_THRESHOLD;
|
|
317
|
-
/** Maximum valid threshold for auto-clear/compact (500k tokens) */
|
|
318
|
-
private static readonly MAX_AUTO_THRESHOLD;
|
|
319
|
-
/** Default auto-clear threshold when invalid value provided */
|
|
320
|
-
private static readonly DEFAULT_AUTO_CLEAR_THRESHOLD;
|
|
321
|
-
/** Default auto-compact threshold when invalid value provided */
|
|
322
|
-
private static readonly DEFAULT_AUTO_COMPACT_THRESHOLD;
|
|
323
299
|
setAutoClear(enabled: boolean, threshold?: number): void;
|
|
324
300
|
get autoCompactThreshold(): number;
|
|
325
301
|
get autoCompactEnabled(): boolean;
|
|
@@ -580,11 +556,6 @@ export declare class Session extends EventEmitter {
|
|
|
580
556
|
* Used by both processOutput() and parseTaskDescriptionsFromTerminalData().
|
|
581
557
|
*/
|
|
582
558
|
private parseTaskDescriptionsDirect;
|
|
583
|
-
/**
|
|
584
|
-
* Remove task descriptions older than TASK_DESCRIPTION_MAX_AGE_MS.
|
|
585
|
-
* Size limit is handled automatically by LRUMap eviction on set().
|
|
586
|
-
*/
|
|
587
|
-
private cleanupOldTaskDescriptions;
|
|
588
559
|
/**
|
|
589
560
|
* Get recent task descriptions parsed from terminal output.
|
|
590
561
|
* Returns descriptions sorted by timestamp (most recent first).
|
|
@@ -604,8 +575,6 @@ export declare class Session extends EventEmitter {
|
|
|
604
575
|
findTaskDescriptionNear(subagentStartTime: number, maxAgeMs?: number): string | undefined;
|
|
605
576
|
private parseTokensFromStatusLine;
|
|
606
577
|
private parseClaudeCodeInfo;
|
|
607
|
-
private checkAutoCompact;
|
|
608
|
-
private checkAutoClear;
|
|
609
578
|
/**
|
|
610
579
|
* Sends input directly to the PTY process.
|
|
611
580
|
*
|