aicodeman 0.2.9 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +118 -4
- 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 +42 -0
- package/dist/config/server-timing.d.ts.map +1 -0
- package/dist/config/server-timing.js +57 -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 +21 -6
- package/dist/hooks-config.d.ts.map +1 -1
- package/dist/hooks-config.js +28 -12
- 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/prompts/planner.d.ts +7 -8
- package/dist/prompts/planner.d.ts.map +1 -1
- package/dist/prompts/planner.js +7 -8
- package/dist/prompts/planner.js.map +1 -1
- package/dist/prompts/research-agent.d.ts +6 -4
- package/dist/prompts/research-agent.d.ts.map +1 -1
- package/dist/prompts/research-agent.js +6 -4
- package/dist/prompts/research-agent.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-loop.d.ts +14 -4
- package/dist/ralph-loop.d.ts.map +1 -1
- package/dist/ralph-loop.js +14 -4
- package/dist/ralph-loop.js.map +1 -1
- 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 +218 -692
- package/dist/ralph-tracker.d.ts.map +1 -1
- package/dist/ralph-tracker.js +389 -1723
- 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 +35 -115
- package/dist/respawn-controller.d.ts.map +1 -1
- package/dist/respawn-controller.js +167 -607
- 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-manager.d.ts +17 -5
- package/dist/session-manager.d.ts.map +1 -1
- package/dist/session-manager.js +17 -5
- package/dist/session-manager.js.map +1 -1
- 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 +23 -41
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +79 -317
- package/dist/session.js.map +1 -1
- package/dist/state-store.d.ts +19 -9
- package/dist/state-store.d.ts.map +1 -1
- package/dist/state-store.js +29 -30
- package/dist/state-store.js.map +1 -1
- package/dist/subagent-watcher.d.ts +26 -7
- package/dist/subagent-watcher.d.ts.map +1 -1
- package/dist/subagent-watcher.js +47 -64
- package/dist/subagent-watcher.js.map +1 -1
- package/dist/team-watcher.d.ts.map +1 -1
- package/dist/team-watcher.js +2 -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 +126 -7
- package/dist/tunnel-manager.js.map +1 -1
- package/dist/types/api.d.ts +108 -0
- package/dist/types/api.d.ts.map +1 -0
- package/dist/types/api.js +98 -0
- package/dist/types/api.js.map +1 -0
- package/dist/types/app-state.d.ts +117 -0
- package/dist/types/app-state.d.ts.map +1 -0
- package/dist/types/app-state.js +76 -0
- package/dist/types/app-state.js.map +1 -0
- package/dist/types/common.d.ts +79 -0
- package/dist/types/common.d.ts.map +1 -0
- package/dist/types/common.js +17 -0
- package/dist/types/common.js.map +1 -0
- package/dist/types/index.d.ts +66 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +66 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/lifecycle.d.ts +28 -0
- package/dist/types/lifecycle.d.ts.map +1 -0
- package/dist/types/lifecycle.js +16 -0
- package/dist/types/lifecycle.js.map +1 -0
- package/dist/types/plan.d.ts +45 -0
- package/dist/types/plan.d.ts.map +1 -0
- package/dist/types/plan.js +18 -0
- package/dist/types/plan.js.map +1 -0
- package/dist/types/push.d.ts +36 -0
- package/dist/types/push.d.ts.map +1 -0
- package/dist/types/push.js +18 -0
- package/dist/types/push.js.map +1 -0
- package/dist/types/ralph.d.ts +262 -0
- package/dist/types/ralph.d.ts.map +1 -0
- package/dist/types/ralph.js +70 -0
- package/dist/types/ralph.js.map +1 -0
- package/dist/types/respawn.d.ts +271 -0
- package/dist/types/respawn.d.ts.map +1 -0
- package/dist/types/respawn.js +26 -0
- package/dist/types/respawn.js.map +1 -0
- package/dist/types/run-summary.d.ts +96 -0
- package/dist/types/run-summary.d.ts.map +1 -0
- package/dist/types/run-summary.js +37 -0
- package/dist/types/run-summary.js.map +1 -0
- package/dist/types/session.d.ts +152 -0
- package/dist/types/session.d.ts.map +1 -0
- package/dist/types/session.js +27 -0
- package/dist/types/session.js.map +1 -0
- package/dist/types/task.d.ts +72 -0
- package/dist/types/task.d.ts.map +1 -0
- package/dist/types/task.js +19 -0
- package/dist/types/task.js.map +1 -0
- package/dist/types/teams.d.ts +73 -0
- package/dist/types/teams.d.ts.map +1 -0
- package/dist/types/teams.js +23 -0
- package/dist/types/teams.js.map +1 -0
- package/dist/types/tools.d.ts +61 -0
- package/dist/types/tools.d.ts.map +1 -0
- package/dist/types/tools.js +20 -0
- package/dist/types/tools.js.map +1 -0
- package/dist/types.d.ts +8 -1134
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +8 -210
- 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 +82 -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 +117 -201
- package/dist/web/public/app.js.br +0 -0
- package/dist/web/public/app.js.gz +0 -0
- package/dist/web/public/constants.js +365 -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 +15 -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 +302 -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 +491 -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 +472 -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 +33 -9
- 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 +1149 -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 +15 -0
- package/dist/web/public/sw.js.br +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-zerolag-input.js +4 -0
- package/dist/web/public/vendor/xterm-zerolag-input.js.br +0 -0
- package/dist/web/public/vendor/xterm-zerolag-input.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 +882 -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 +144 -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 +426 -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 +385 -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 +485 -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 +270 -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 +751 -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 +699 -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 +35 -15
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +563 -3971
- package/dist/web/server.js.map +1 -1
- package/dist/web/sse-events.d.ts +361 -0
- package/dist/web/sse-events.d.ts.map +1 -0
- package/dist/web/sse-events.js +396 -0
- package/dist/web/sse-events.js.map +1 -0
- package/package.json +2 -1
- package/scripts/postinstall.js +58 -0
|
@@ -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"}
|
|
@@ -1,11 +1,23 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @fileoverview Session Manager for coordinating multiple Claude sessions
|
|
2
|
+
* @fileoverview Session Manager for coordinating multiple Claude sessions.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* - Session creation with working directory
|
|
6
|
-
* - Event forwarding from individual sessions
|
|
4
|
+
* Lifecycle management for Claude CLI sessions:
|
|
5
|
+
* - Session creation with working directory, concurrent session limits (mutex-guarded)
|
|
6
|
+
* - Event forwarding from individual sessions to subscribers
|
|
7
7
|
* - State persistence via StateStore
|
|
8
|
-
* -
|
|
8
|
+
* - Graceful shutdown of all sessions
|
|
9
|
+
*
|
|
10
|
+
* Key exports:
|
|
11
|
+
* - `SessionManager` class — coordinator, extends EventEmitter
|
|
12
|
+
* - `SessionManagerEvents` interface — typed event map
|
|
13
|
+
* - `getSessionManager()` — singleton accessor
|
|
14
|
+
*
|
|
15
|
+
* Key methods: `createSession(workingDir)`, `getSession(id)`, `getAllSessions()`,
|
|
16
|
+
* `removeSession(id)`, `stopAll()`
|
|
17
|
+
*
|
|
18
|
+
* @dependencies session (Session class), state-store (persistence), types (SessionState)
|
|
19
|
+
* @consumedby web/server, ralph-loop, respawn-controller
|
|
20
|
+
* @emits sessionStarted, sessionStopped, sessionError, sessionOutput, sessionCompletion
|
|
9
21
|
*
|
|
10
22
|
* @module session-manager
|
|
11
23
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../src/session-manager.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../src/session-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,mDAAmD;IACnD,cAAc,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3C,sDAAsD;IACtD,cAAc,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,+CAA+C;IAC/C,YAAY,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACzD,oDAAoD;IACpD,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3D,iDAAiD;IACjD,iBAAiB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CAChE;AA4BD,qBAAa,cAAe,SAAQ,YAAY;IAC9C,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,eAAe,CAA2C;IAClE,OAAO,CAAC,KAAK,CAAc;IAG3B,OAAO,CAAC,oBAAoB,CAA8B;IAE1D;;OAEG;;IAMH,OAAO,CAAC,aAAa;IAarB;;;;;;;OAOG;IACG,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAqEzD;;;;OAIG;IACG,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA6B5C;;;OAGG;IACG,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAWtC;;;;OAIG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAI3C,gCAAgC;IAChC,cAAc,IAAI,OAAO,EAAE;IAI3B,yDAAyD;IACzD,eAAe,IAAI,OAAO,EAAE;IAI5B,qDAAqD;IACrD,eAAe,IAAI,OAAO,EAAE;IAI5B,yCAAyC;IACzC,eAAe,IAAI,MAAM;IAIzB,wCAAwC;IACxC,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAI/B,OAAO,CAAC,kBAAkB;IAI1B,qEAAqE;IACrE,iBAAiB,IAAI,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC;IAIjD;;;;;;OAMG;IACG,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQpE,4CAA4C;IAC5C,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAKlD,2CAA2C;IAC3C,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;CAIlD;AAKD;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,cAAc,CAKlD"}
|
package/dist/session-manager.js
CHANGED
|
@@ -1,11 +1,23 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @fileoverview Session Manager for coordinating multiple Claude sessions
|
|
2
|
+
* @fileoverview Session Manager for coordinating multiple Claude sessions.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* - Session creation with working directory
|
|
6
|
-
* - Event forwarding from individual sessions
|
|
4
|
+
* Lifecycle management for Claude CLI sessions:
|
|
5
|
+
* - Session creation with working directory, concurrent session limits (mutex-guarded)
|
|
6
|
+
* - Event forwarding from individual sessions to subscribers
|
|
7
7
|
* - State persistence via StateStore
|
|
8
|
-
* -
|
|
8
|
+
* - Graceful shutdown of all sessions
|
|
9
|
+
*
|
|
10
|
+
* Key exports:
|
|
11
|
+
* - `SessionManager` class — coordinator, extends EventEmitter
|
|
12
|
+
* - `SessionManagerEvents` interface — typed event map
|
|
13
|
+
* - `getSessionManager()` — singleton accessor
|
|
14
|
+
*
|
|
15
|
+
* Key methods: `createSession(workingDir)`, `getSession(id)`, `getAllSessions()`,
|
|
16
|
+
* `removeSession(id)`, `stopAll()`
|
|
17
|
+
*
|
|
18
|
+
* @dependencies session (Session class), state-store (persistence), types (SessionState)
|
|
19
|
+
* @consumedby web/server, ralph-loop, respawn-controller
|
|
20
|
+
* @emits sessionStarted, sessionStopped, sessionError, sessionOutput, sessionCompletion
|
|
9
21
|
*
|
|
10
22
|
* @module session-manager
|
|
11
23
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-manager.js","sourceRoot":"","sources":["../src/session-manager.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"session-manager.js","sourceRoot":"","sources":["../src/session-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -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"}
|