aicodeman 0.2.8
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/LICENSE +21 -0
- package/README.md +403 -0
- package/dist/ai-checker-base.d.ts +175 -0
- package/dist/ai-checker-base.d.ts.map +1 -0
- package/dist/ai-checker-base.js +424 -0
- package/dist/ai-checker-base.js.map +1 -0
- package/dist/ai-idle-checker.d.ts +53 -0
- package/dist/ai-idle-checker.d.ts.map +1 -0
- package/dist/ai-idle-checker.js +141 -0
- package/dist/ai-idle-checker.js.map +1 -0
- package/dist/ai-plan-checker.d.ts +52 -0
- package/dist/ai-plan-checker.d.ts.map +1 -0
- package/dist/ai-plan-checker.js +103 -0
- package/dist/ai-plan-checker.js.map +1 -0
- package/dist/bash-tool-parser.d.ts +191 -0
- package/dist/bash-tool-parser.d.ts.map +1 -0
- package/dist/bash-tool-parser.js +598 -0
- package/dist/bash-tool-parser.js.map +1 -0
- package/dist/cli.d.ts +12 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +460 -0
- package/dist/cli.js.map +1 -0
- package/dist/config/buffer-limits.d.ts +59 -0
- package/dist/config/buffer-limits.d.ts.map +1 -0
- package/dist/config/buffer-limits.js +74 -0
- package/dist/config/buffer-limits.js.map +1 -0
- package/dist/config/map-limits.d.ts +40 -0
- package/dist/config/map-limits.d.ts.map +1 -0
- package/dist/config/map-limits.js +52 -0
- package/dist/config/map-limits.js.map +1 -0
- package/dist/file-stream-manager.d.ts +148 -0
- package/dist/file-stream-manager.d.ts.map +1 -0
- package/dist/file-stream-manager.js +351 -0
- package/dist/file-stream-manager.js.map +1 -0
- package/dist/hooks-config.d.ts +31 -0
- package/dist/hooks-config.d.ts.map +1 -0
- package/dist/hooks-config.js +115 -0
- package/dist/hooks-config.js.map +1 -0
- package/dist/image-watcher.d.ts +86 -0
- package/dist/image-watcher.d.ts.map +1 -0
- package/dist/image-watcher.js +275 -0
- package/dist/image-watcher.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +54 -0
- package/dist/index.js.map +1 -0
- package/dist/mux-factory.d.ts +13 -0
- package/dist/mux-factory.d.ts.map +1 -0
- package/dist/mux-factory.js +19 -0
- package/dist/mux-factory.js.map +1 -0
- package/dist/mux-interface.d.ts +145 -0
- package/dist/mux-interface.d.ts.map +1 -0
- package/dist/mux-interface.js +9 -0
- package/dist/mux-interface.js.map +1 -0
- package/dist/plan-orchestrator.d.ts +123 -0
- package/dist/plan-orchestrator.d.ts.map +1 -0
- package/dist/plan-orchestrator.js +500 -0
- package/dist/plan-orchestrator.js.map +1 -0
- package/dist/prompts/index.d.ts +9 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +9 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/prompts/planner.d.ts +14 -0
- package/dist/prompts/planner.d.ts.map +1 -0
- package/dist/prompts/planner.js +83 -0
- package/dist/prompts/planner.js.map +1 -0
- package/dist/prompts/research-agent.d.ts +10 -0
- package/dist/prompts/research-agent.d.ts.map +1 -0
- package/dist/prompts/research-agent.js +143 -0
- package/dist/prompts/research-agent.js.map +1 -0
- package/dist/push-store.d.ts +41 -0
- package/dist/push-store.d.ts.map +1 -0
- package/dist/push-store.js +168 -0
- package/dist/push-store.js.map +1 -0
- package/dist/ralph-config.d.ts +67 -0
- package/dist/ralph-config.d.ts.map +1 -0
- package/dist/ralph-config.js +134 -0
- package/dist/ralph-config.js.map +1 -0
- package/dist/ralph-loop.d.ts +124 -0
- package/dist/ralph-loop.d.ts.map +1 -0
- package/dist/ralph-loop.js +418 -0
- package/dist/ralph-loop.js.map +1 -0
- package/dist/ralph-tracker.d.ts +1081 -0
- package/dist/ralph-tracker.d.ts.map +1 -0
- package/dist/ralph-tracker.js +3343 -0
- package/dist/ralph-tracker.js.map +1 -0
- package/dist/respawn-controller.d.ts +1182 -0
- package/dist/respawn-controller.d.ts.map +1 -0
- package/dist/respawn-controller.js +2754 -0
- package/dist/respawn-controller.js.map +1 -0
- package/dist/run-summary.d.ts +123 -0
- package/dist/run-summary.d.ts.map +1 -0
- package/dist/run-summary.js +325 -0
- package/dist/run-summary.js.map +1 -0
- package/dist/session-lifecycle-log.d.ts +36 -0
- package/dist/session-lifecycle-log.d.ts.map +1 -0
- package/dist/session-lifecycle-log.js +101 -0
- package/dist/session-lifecycle-log.js.map +1 -0
- package/dist/session-manager.d.ts +97 -0
- package/dist/session-manager.d.ts.map +1 -0
- package/dist/session-manager.js +224 -0
- package/dist/session-manager.js.map +1 -0
- package/dist/session.d.ts +686 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +2025 -0
- package/dist/session.js.map +1 -0
- package/dist/state-store.d.ts +189 -0
- package/dist/state-store.d.ts.map +1 -0
- package/dist/state-store.js +730 -0
- package/dist/state-store.js.map +1 -0
- package/dist/subagent-watcher.d.ts +345 -0
- package/dist/subagent-watcher.d.ts.map +1 -0
- package/dist/subagent-watcher.js +1469 -0
- package/dist/subagent-watcher.js.map +1 -0
- package/dist/task-queue.d.ts +108 -0
- package/dist/task-queue.d.ts.map +1 -0
- package/dist/task-queue.js +235 -0
- package/dist/task-queue.js.map +1 -0
- package/dist/task-tracker.d.ts +306 -0
- package/dist/task-tracker.d.ts.map +1 -0
- package/dist/task-tracker.js +488 -0
- package/dist/task-tracker.js.map +1 -0
- package/dist/task.d.ts +73 -0
- package/dist/task.d.ts.map +1 -0
- package/dist/task.js +177 -0
- package/dist/task.js.map +1 -0
- package/dist/team-watcher.d.ts +53 -0
- package/dist/team-watcher.d.ts.map +1 -0
- package/dist/team-watcher.js +313 -0
- package/dist/team-watcher.js.map +1 -0
- package/dist/templates/case-template.md +461 -0
- package/dist/templates/claude-md.d.ts +26 -0
- package/dist/templates/claude-md.d.ts.map +1 -0
- package/dist/templates/claude-md.js +74 -0
- package/dist/templates/claude-md.js.map +1 -0
- package/dist/tmux-manager.d.ts +181 -0
- package/dist/tmux-manager.d.ts.map +1 -0
- package/dist/tmux-manager.js +1405 -0
- package/dist/tmux-manager.js.map +1 -0
- package/dist/transcript-watcher.d.ts +110 -0
- package/dist/transcript-watcher.d.ts.map +1 -0
- package/dist/transcript-watcher.js +338 -0
- package/dist/transcript-watcher.js.map +1 -0
- package/dist/tunnel-manager.d.ts +54 -0
- package/dist/tunnel-manager.d.ts.map +1 -0
- package/dist/tunnel-manager.js +251 -0
- package/dist/tunnel-manager.js.map +1 -0
- package/dist/types.d.ts +1139 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +215 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/buffer-accumulator.d.ts +111 -0
- package/dist/utils/buffer-accumulator.d.ts.map +1 -0
- package/dist/utils/buffer-accumulator.js +172 -0
- package/dist/utils/buffer-accumulator.js.map +1 -0
- package/dist/utils/claude-cli-resolver.d.ts +26 -0
- package/dist/utils/claude-cli-resolver.d.ts.map +1 -0
- package/dist/utils/claude-cli-resolver.js +78 -0
- package/dist/utils/claude-cli-resolver.js.map +1 -0
- package/dist/utils/cleanup-manager.d.ts +165 -0
- package/dist/utils/cleanup-manager.d.ts.map +1 -0
- package/dist/utils/cleanup-manager.js +274 -0
- package/dist/utils/cleanup-manager.js.map +1 -0
- package/dist/utils/index.d.ts +19 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +19 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/lru-map.d.ts +140 -0
- package/dist/utils/lru-map.d.ts.map +1 -0
- package/dist/utils/lru-map.js +234 -0
- package/dist/utils/lru-map.js.map +1 -0
- package/dist/utils/nice-wrapper.d.ts +13 -0
- package/dist/utils/nice-wrapper.d.ts.map +1 -0
- package/dist/utils/nice-wrapper.js +17 -0
- package/dist/utils/nice-wrapper.js.map +1 -0
- package/dist/utils/opencode-cli-resolver.d.ts +21 -0
- package/dist/utils/opencode-cli-resolver.d.ts.map +1 -0
- package/dist/utils/opencode-cli-resolver.js +67 -0
- package/dist/utils/opencode-cli-resolver.js.map +1 -0
- package/dist/utils/regex-patterns.d.ts +64 -0
- package/dist/utils/regex-patterns.d.ts.map +1 -0
- package/dist/utils/regex-patterns.js +74 -0
- package/dist/utils/regex-patterns.js.map +1 -0
- package/dist/utils/stale-expiration-map.d.ts +159 -0
- package/dist/utils/stale-expiration-map.d.ts.map +1 -0
- package/dist/utils/stale-expiration-map.js +277 -0
- package/dist/utils/stale-expiration-map.js.map +1 -0
- package/dist/utils/string-similarity.d.ts +108 -0
- package/dist/utils/string-similarity.d.ts.map +1 -0
- package/dist/utils/string-similarity.js +189 -0
- package/dist/utils/string-similarity.js.map +1 -0
- package/dist/utils/token-validation.d.ts +39 -0
- package/dist/utils/token-validation.d.ts.map +1 -0
- package/dist/utils/token-validation.js +59 -0
- package/dist/utils/token-validation.js.map +1 -0
- package/dist/utils/type-safety.d.ts +33 -0
- package/dist/utils/type-safety.d.ts.map +1 -0
- package/dist/utils/type-safety.js +35 -0
- package/dist/utils/type-safety.js.map +1 -0
- package/dist/web/public/app.js +491 -0
- package/dist/web/public/app.js.br +0 -0
- package/dist/web/public/app.js.gz +0 -0
- package/dist/web/public/index.html +1675 -0
- package/dist/web/public/index.html.br +0 -0
- package/dist/web/public/index.html.gz +0 -0
- package/dist/web/public/manifest.json +8 -0
- package/dist/web/public/mobile.css +1 -0
- package/dist/web/public/mobile.css.br +0 -0
- package/dist/web/public/mobile.css.gz +0 -0
- package/dist/web/public/ralph-wizard.js +1037 -0
- 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 +1 -0
- package/dist/web/public/styles.css.br +0 -0
- package/dist/web/public/styles.css.gz +0 -0
- package/dist/web/public/sw.js +67 -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 +155 -0
- package/dist/web/public/upload.html.br +0 -0
- package/dist/web/public/upload.html.gz +0 -0
- package/dist/web/public/vendor/xterm-addon-fit.min.js +1 -0
- package/dist/web/public/vendor/xterm-addon-fit.min.js.br +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 +1 -0
- package/dist/web/public/vendor/xterm-addon-unicode11.min.js.br +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 +2 -0
- package/dist/web/public/vendor/xterm-addon-webgl.min.js.br +0 -0
- package/dist/web/public/vendor/xterm-addon-webgl.min.js.gz +0 -0
- package/dist/web/public/vendor/xterm.css +209 -0
- package/dist/web/public/vendor/xterm.css.br +0 -0
- package/dist/web/public/vendor/xterm.css.gz +0 -0
- package/dist/web/public/vendor/xterm.min.js +9 -0
- package/dist/web/public/vendor/xterm.min.js.br +0 -0
- package/dist/web/public/vendor/xterm.min.js.gz +0 -0
- package/dist/web/schemas.d.ts +479 -0
- package/dist/web/schemas.d.ts.map +1 -0
- package/dist/web/schemas.js +448 -0
- package/dist/web/schemas.js.map +1 -0
- package/dist/web/server.d.ts +207 -0
- package/dist/web/server.d.ts.map +1 -0
- package/dist/web/server.js +5784 -0
- package/dist/web/server.js.map +1 -0
- package/package.json +110 -0
- package/scripts/postinstall.js +390 -0
package/dist/cli.js
ADDED
|
@@ -0,0 +1,460 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Codeman CLI command definitions
|
|
3
|
+
*
|
|
4
|
+
* Defines all CLI commands and subcommands for managing Claude sessions,
|
|
5
|
+
* tasks, Ralph loops, and the web server.
|
|
6
|
+
*
|
|
7
|
+
* @module cli
|
|
8
|
+
*/
|
|
9
|
+
import { Command } from 'commander';
|
|
10
|
+
import chalk from 'chalk';
|
|
11
|
+
import { createRequire } from 'module';
|
|
12
|
+
import { getSessionManager } from './session-manager.js';
|
|
13
|
+
import { getTaskQueue } from './task-queue.js';
|
|
14
|
+
import { getRalphLoop } from './ralph-loop.js';
|
|
15
|
+
import { getStore } from './state-store.js';
|
|
16
|
+
import { getErrorMessage } from './types.js';
|
|
17
|
+
const require = createRequire(import.meta.url);
|
|
18
|
+
const pkg = require('../package.json');
|
|
19
|
+
const program = new Command();
|
|
20
|
+
program.name('codeman').description('Claude Code session manager with autonomous Ralph Loop').version(pkg.version);
|
|
21
|
+
// ============ Session Commands ============
|
|
22
|
+
const sessionCmd = program.command('session').alias('s').description('Manage Claude sessions');
|
|
23
|
+
sessionCmd
|
|
24
|
+
.command('start')
|
|
25
|
+
.description('Start a new Claude session')
|
|
26
|
+
.option('-d, --dir <path>', 'Working directory', process.cwd())
|
|
27
|
+
.action(async (options) => {
|
|
28
|
+
try {
|
|
29
|
+
const manager = getSessionManager();
|
|
30
|
+
const session = await manager.createSession(options.dir);
|
|
31
|
+
console.log(chalk.green(`✓ Session started: ${session.id}`));
|
|
32
|
+
console.log(` Working directory: ${session.workingDir}`);
|
|
33
|
+
console.log(` PID: ${session.pid}`);
|
|
34
|
+
}
|
|
35
|
+
catch (err) {
|
|
36
|
+
console.error(chalk.red(`✗ Failed to start session: ${getErrorMessage(err)}`));
|
|
37
|
+
process.exit(1);
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
sessionCmd
|
|
41
|
+
.command('stop <id>')
|
|
42
|
+
.description('Stop a session')
|
|
43
|
+
.action(async (id) => {
|
|
44
|
+
try {
|
|
45
|
+
const manager = getSessionManager();
|
|
46
|
+
await manager.stopSession(id);
|
|
47
|
+
console.log(chalk.green(`✓ Session stopped: ${id}`));
|
|
48
|
+
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
console.error(chalk.red(`✗ Failed to stop session: ${getErrorMessage(err)}`));
|
|
51
|
+
process.exit(1);
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
sessionCmd
|
|
55
|
+
.command('list')
|
|
56
|
+
.alias('ls')
|
|
57
|
+
.description('List all sessions')
|
|
58
|
+
.action(() => {
|
|
59
|
+
const manager = getSessionManager();
|
|
60
|
+
const sessions = manager.getAllSessions();
|
|
61
|
+
const stored = manager.getStoredSessions();
|
|
62
|
+
if (sessions.length === 0 && Object.keys(stored).length === 0) {
|
|
63
|
+
console.log(chalk.yellow('No sessions found'));
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
console.log(chalk.bold('\nActive Sessions:'));
|
|
67
|
+
if (sessions.length === 0) {
|
|
68
|
+
console.log(' (none)');
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
for (const session of sessions) {
|
|
72
|
+
const status = session.status === 'idle'
|
|
73
|
+
? chalk.green('idle')
|
|
74
|
+
: session.status === 'busy'
|
|
75
|
+
? chalk.yellow('busy')
|
|
76
|
+
: chalk.red(session.status);
|
|
77
|
+
console.log(` ${chalk.cyan(session.id.slice(0, 8))} ${status} ${session.workingDir}`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
const stoppedSessions = Object.values(stored).filter((s) => s.status === 'stopped');
|
|
81
|
+
if (stoppedSessions.length > 0) {
|
|
82
|
+
console.log(chalk.bold('\nStopped Sessions:'));
|
|
83
|
+
for (const session of stoppedSessions) {
|
|
84
|
+
const name = session.name ? ` (${session.name})` : '';
|
|
85
|
+
console.log(` ${chalk.gray(session.id.slice(0, 8))} ${chalk.gray('stopped')}${name} ${session.workingDir}`);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
// Show active sessions from state (when web server manages them)
|
|
89
|
+
const activeSessions = Object.values(stored).filter((s) => s.status !== 'stopped');
|
|
90
|
+
if (sessions.length === 0 && activeSessions.length > 0) {
|
|
91
|
+
console.log(chalk.bold('\nActive Sessions (from web server):'));
|
|
92
|
+
for (const session of activeSessions) {
|
|
93
|
+
const status = session.status === 'idle'
|
|
94
|
+
? chalk.green('idle')
|
|
95
|
+
: session.status === 'busy'
|
|
96
|
+
? chalk.yellow('busy')
|
|
97
|
+
: chalk.red(session.status);
|
|
98
|
+
const name = session.name ? ` (${session.name})` : '';
|
|
99
|
+
const mode = session.mode === 'shell' ? chalk.gray(' [shell]') : '';
|
|
100
|
+
const cost = session.totalCost ? chalk.gray(` $${session.totalCost.toFixed(4)}`) : '';
|
|
101
|
+
console.log(` ${chalk.cyan(session.id.slice(0, 8))} ${status}${name}${mode}${cost} ${session.workingDir}`);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
console.log('');
|
|
105
|
+
});
|
|
106
|
+
sessionCmd
|
|
107
|
+
.command('logs <id>')
|
|
108
|
+
.description('View session output')
|
|
109
|
+
.option('-e, --errors', 'Show stderr instead of stdout')
|
|
110
|
+
.action((id, options) => {
|
|
111
|
+
const manager = getSessionManager();
|
|
112
|
+
const output = options.errors ? manager.getSessionError(id) : manager.getSessionOutput(id);
|
|
113
|
+
if (output === null) {
|
|
114
|
+
console.log(chalk.yellow(`Session ${id} not found or not active`));
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
if (output === '') {
|
|
118
|
+
console.log(chalk.gray('(no output)'));
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
console.log(output);
|
|
122
|
+
});
|
|
123
|
+
// ============ Task Commands ============
|
|
124
|
+
const taskCmd = program.command('task').alias('t').description('Manage tasks');
|
|
125
|
+
taskCmd
|
|
126
|
+
.command('add <prompt>')
|
|
127
|
+
.description('Add a new task')
|
|
128
|
+
.option('-d, --dir <path>', 'Working directory', process.cwd())
|
|
129
|
+
.option('-p, --priority <n>', 'Priority (higher = first)', '0')
|
|
130
|
+
.option('-c, --completion <phrase>', 'Completion phrase to detect')
|
|
131
|
+
.option('--timeout <ms>', 'Timeout in milliseconds')
|
|
132
|
+
.action((prompt, options) => {
|
|
133
|
+
const queue = getTaskQueue();
|
|
134
|
+
const task = queue.addTask({
|
|
135
|
+
prompt,
|
|
136
|
+
workingDir: options.dir,
|
|
137
|
+
priority: parseInt(options.priority, 10),
|
|
138
|
+
completionPhrase: options.completion,
|
|
139
|
+
timeoutMs: options.timeout ? parseInt(options.timeout, 10) : undefined,
|
|
140
|
+
});
|
|
141
|
+
console.log(chalk.green(`✓ Task added: ${task.id}`));
|
|
142
|
+
console.log(` Prompt: ${prompt.slice(0, 50)}${prompt.length > 50 ? '...' : ''}`);
|
|
143
|
+
console.log(` Priority: ${task.priority}`);
|
|
144
|
+
});
|
|
145
|
+
taskCmd
|
|
146
|
+
.command('list')
|
|
147
|
+
.alias('ls')
|
|
148
|
+
.description('List all tasks')
|
|
149
|
+
.option('-s, --status <status>', 'Filter by status (pending, running, completed, failed)')
|
|
150
|
+
.action((options) => {
|
|
151
|
+
const queue = getTaskQueue();
|
|
152
|
+
let tasks = queue.getAllTasks();
|
|
153
|
+
if (options.status) {
|
|
154
|
+
tasks = tasks.filter((t) => t.status === options.status);
|
|
155
|
+
}
|
|
156
|
+
if (tasks.length === 0) {
|
|
157
|
+
console.log(chalk.yellow('No tasks found'));
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
const statusColors = {
|
|
161
|
+
pending: chalk.gray,
|
|
162
|
+
running: chalk.yellow,
|
|
163
|
+
completed: chalk.green,
|
|
164
|
+
failed: chalk.red,
|
|
165
|
+
};
|
|
166
|
+
console.log(chalk.bold('\nTasks:'));
|
|
167
|
+
for (const task of tasks) {
|
|
168
|
+
const color = statusColors[task.status];
|
|
169
|
+
const prompt = task.prompt.slice(0, 40) + (task.prompt.length > 40 ? '...' : '');
|
|
170
|
+
console.log(` ${chalk.cyan(task.id.slice(0, 8))} ${color(task.status.padEnd(10))} [${task.priority}] ${prompt}`);
|
|
171
|
+
}
|
|
172
|
+
const counts = queue.getCount();
|
|
173
|
+
console.log(chalk.bold('\nSummary:'));
|
|
174
|
+
console.log(` Pending: ${counts.pending}, Running: ${counts.running}, Completed: ${counts.completed}, Failed: ${counts.failed}`);
|
|
175
|
+
console.log('');
|
|
176
|
+
});
|
|
177
|
+
taskCmd
|
|
178
|
+
.command('status <id>')
|
|
179
|
+
.description('Show task details')
|
|
180
|
+
.action((id) => {
|
|
181
|
+
const queue = getTaskQueue();
|
|
182
|
+
const task = queue.getTask(id);
|
|
183
|
+
if (!task) {
|
|
184
|
+
console.log(chalk.red(`Task ${id} not found`));
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
console.log(chalk.bold('\nTask Details:'));
|
|
188
|
+
console.log(` ID: ${task.id}`);
|
|
189
|
+
console.log(` Status: ${task.status}`);
|
|
190
|
+
console.log(` Priority: ${task.priority}`);
|
|
191
|
+
console.log(` Prompt: ${task.prompt}`);
|
|
192
|
+
console.log(` Working Dir: ${task.workingDir}`);
|
|
193
|
+
if (task.assignedSessionId) {
|
|
194
|
+
console.log(` Session: ${task.assignedSessionId}`);
|
|
195
|
+
}
|
|
196
|
+
if (task.error) {
|
|
197
|
+
console.log(` Error: ${chalk.red(task.error)}`);
|
|
198
|
+
}
|
|
199
|
+
if (task.output) {
|
|
200
|
+
console.log(chalk.bold('\nOutput:'));
|
|
201
|
+
console.log(task.output.slice(0, 500) + (task.output.length > 500 ? '...' : ''));
|
|
202
|
+
}
|
|
203
|
+
console.log('');
|
|
204
|
+
});
|
|
205
|
+
taskCmd
|
|
206
|
+
.command('remove <id>')
|
|
207
|
+
.alias('rm')
|
|
208
|
+
.description('Remove a task')
|
|
209
|
+
.action((id) => {
|
|
210
|
+
const queue = getTaskQueue();
|
|
211
|
+
if (queue.removeTask(id)) {
|
|
212
|
+
console.log(chalk.green(`✓ Task removed: ${id}`));
|
|
213
|
+
}
|
|
214
|
+
else {
|
|
215
|
+
console.log(chalk.red(`Task ${id} not found`));
|
|
216
|
+
}
|
|
217
|
+
});
|
|
218
|
+
taskCmd
|
|
219
|
+
.command('clear')
|
|
220
|
+
.description('Clear completed/failed tasks')
|
|
221
|
+
.option('-a, --all', 'Clear all tasks')
|
|
222
|
+
.option('-f, --failed', 'Clear only failed tasks')
|
|
223
|
+
.action((options) => {
|
|
224
|
+
const queue = getTaskQueue();
|
|
225
|
+
let count;
|
|
226
|
+
if (options.all) {
|
|
227
|
+
count = queue.clearAll();
|
|
228
|
+
console.log(chalk.green(`✓ Cleared ${count} tasks`));
|
|
229
|
+
}
|
|
230
|
+
else if (options.failed) {
|
|
231
|
+
count = queue.clearFailed();
|
|
232
|
+
console.log(chalk.green(`✓ Cleared ${count} failed tasks`));
|
|
233
|
+
}
|
|
234
|
+
else {
|
|
235
|
+
count = queue.clearCompleted();
|
|
236
|
+
console.log(chalk.green(`✓ Cleared ${count} completed tasks`));
|
|
237
|
+
}
|
|
238
|
+
});
|
|
239
|
+
// ============ Ralph Loop Commands ============
|
|
240
|
+
const ralphCmd = program.command('ralph').alias('r').description('Control the Ralph autonomous loop');
|
|
241
|
+
ralphCmd
|
|
242
|
+
.command('start')
|
|
243
|
+
.description('Start the Ralph loop')
|
|
244
|
+
.option('-m, --min-hours <hours>', 'Minimum duration in hours')
|
|
245
|
+
.option('--no-auto-generate', 'Disable auto-generating follow-up tasks')
|
|
246
|
+
.action(async (options) => {
|
|
247
|
+
const loop = getRalphLoop({
|
|
248
|
+
autoGenerateTasks: options.autoGenerate,
|
|
249
|
+
});
|
|
250
|
+
if (options.minHours) {
|
|
251
|
+
loop.setMinDuration(parseFloat(options.minHours));
|
|
252
|
+
}
|
|
253
|
+
if (loop.isRunning()) {
|
|
254
|
+
console.log(chalk.yellow('Ralph loop is already running'));
|
|
255
|
+
return;
|
|
256
|
+
}
|
|
257
|
+
loop.on('taskAssigned', (taskId, sessionId) => {
|
|
258
|
+
console.log(chalk.cyan(`→ Task ${taskId.slice(0, 8)} assigned to session ${sessionId.slice(0, 8)}`));
|
|
259
|
+
});
|
|
260
|
+
loop.on('taskCompleted', (taskId) => {
|
|
261
|
+
console.log(chalk.green(`✓ Task ${taskId.slice(0, 8)} completed`));
|
|
262
|
+
});
|
|
263
|
+
loop.on('taskFailed', (taskId, error) => {
|
|
264
|
+
console.log(chalk.red(`✗ Task ${taskId.slice(0, 8)} failed: ${error}`));
|
|
265
|
+
});
|
|
266
|
+
loop.on('stopped', () => {
|
|
267
|
+
console.log(chalk.yellow('\nRalph loop stopped'));
|
|
268
|
+
printStats(loop.getStats());
|
|
269
|
+
process.exit(0);
|
|
270
|
+
});
|
|
271
|
+
await loop.start();
|
|
272
|
+
console.log(chalk.green('✓ Ralph loop started'));
|
|
273
|
+
if (options.minHours) {
|
|
274
|
+
console.log(` Minimum duration: ${options.minHours} hours`);
|
|
275
|
+
}
|
|
276
|
+
console.log(chalk.gray(' Press Ctrl+C to stop\n'));
|
|
277
|
+
// Keep process running
|
|
278
|
+
process.on('SIGINT', () => {
|
|
279
|
+
console.log(chalk.yellow('\nStopping Ralph loop...'));
|
|
280
|
+
loop.stop();
|
|
281
|
+
});
|
|
282
|
+
});
|
|
283
|
+
ralphCmd
|
|
284
|
+
.command('stop')
|
|
285
|
+
.description('Stop the Ralph loop')
|
|
286
|
+
.action(() => {
|
|
287
|
+
const loop = getRalphLoop();
|
|
288
|
+
if (!loop.isRunning()) {
|
|
289
|
+
console.log(chalk.yellow('Ralph loop is not running'));
|
|
290
|
+
return;
|
|
291
|
+
}
|
|
292
|
+
loop.stop();
|
|
293
|
+
console.log(chalk.green('✓ Ralph loop stopped'));
|
|
294
|
+
});
|
|
295
|
+
ralphCmd
|
|
296
|
+
.command('status')
|
|
297
|
+
.description('Show Ralph loop status')
|
|
298
|
+
.action(() => {
|
|
299
|
+
const loop = getRalphLoop();
|
|
300
|
+
const stats = loop.getStats();
|
|
301
|
+
printStats(stats);
|
|
302
|
+
});
|
|
303
|
+
function printStats(stats) {
|
|
304
|
+
const statusColor = stats.status === 'running' ? chalk.green : stats.status === 'paused' ? chalk.yellow : chalk.gray;
|
|
305
|
+
console.log(chalk.bold('\nRalph Loop Status:'));
|
|
306
|
+
console.log(` Status: ${statusColor(stats.status)}`);
|
|
307
|
+
console.log(` Elapsed: ${stats.elapsedHours.toFixed(2)} hours`);
|
|
308
|
+
if (stats.minDurationMs) {
|
|
309
|
+
const minHours = stats.minDurationMs / (1000 * 60 * 60);
|
|
310
|
+
console.log(` Min Duration: ${minHours.toFixed(2)} hours (${stats.minDurationReached ? 'reached' : 'not reached'})`);
|
|
311
|
+
}
|
|
312
|
+
console.log(chalk.bold('\nTasks:'));
|
|
313
|
+
console.log(` Pending: ${stats.pending}`);
|
|
314
|
+
console.log(` Running: ${stats.running}`);
|
|
315
|
+
console.log(` Completed: ${stats.completed} (${stats.tasksCompleted} this session)`);
|
|
316
|
+
console.log(` Failed: ${stats.failed}`);
|
|
317
|
+
console.log(` Generated: ${stats.tasksGenerated}`);
|
|
318
|
+
console.log(chalk.bold('\nSessions:'));
|
|
319
|
+
console.log(` Active: ${stats.activeSessions}`);
|
|
320
|
+
console.log(` Idle: ${stats.idleSessions}`);
|
|
321
|
+
console.log(` Busy: ${stats.busySessions}`);
|
|
322
|
+
console.log('');
|
|
323
|
+
}
|
|
324
|
+
// ============ Utility Commands ============
|
|
325
|
+
program
|
|
326
|
+
.command('status')
|
|
327
|
+
.description('Show overall status')
|
|
328
|
+
.action(() => {
|
|
329
|
+
const manager = getSessionManager();
|
|
330
|
+
const queue = getTaskQueue();
|
|
331
|
+
const loop = getRalphLoop();
|
|
332
|
+
const sessions = manager.getAllSessions();
|
|
333
|
+
const stored = manager.getStoredSessions();
|
|
334
|
+
const storedValues = Object.values(stored);
|
|
335
|
+
const taskCounts = queue.getCount();
|
|
336
|
+
const loopStatus = loop.status;
|
|
337
|
+
// Use live sessions if available, otherwise fall back to stored state
|
|
338
|
+
const activeCount = sessions.length || storedValues.filter((s) => s.status !== 'stopped').length;
|
|
339
|
+
const idleCount = sessions.length
|
|
340
|
+
? sessions.filter((s) => s.isIdle()).length
|
|
341
|
+
: storedValues.filter((s) => s.status === 'idle').length;
|
|
342
|
+
const busyCount = sessions.length
|
|
343
|
+
? sessions.filter((s) => s.isBusy()).length
|
|
344
|
+
: storedValues.filter((s) => s.status === 'busy').length;
|
|
345
|
+
console.log(chalk.bold('\nCodeman Status'));
|
|
346
|
+
console.log('─'.repeat(40));
|
|
347
|
+
console.log(chalk.bold('\nSessions:'));
|
|
348
|
+
console.log(` Active: ${activeCount}`);
|
|
349
|
+
console.log(` Idle: ${idleCount}`);
|
|
350
|
+
console.log(` Busy: ${busyCount}`);
|
|
351
|
+
console.log(chalk.bold('\nTasks:'));
|
|
352
|
+
console.log(` Total: ${taskCounts.total}`);
|
|
353
|
+
console.log(` Pending: ${taskCounts.pending}`);
|
|
354
|
+
console.log(` Running: ${taskCounts.running}`);
|
|
355
|
+
console.log(` Completed: ${taskCounts.completed}`);
|
|
356
|
+
console.log(` Failed: ${taskCounts.failed}`);
|
|
357
|
+
const statusColor = loopStatus === 'running' ? chalk.green : loopStatus === 'paused' ? chalk.yellow : chalk.gray;
|
|
358
|
+
console.log(chalk.bold('\nRalph Loop:'));
|
|
359
|
+
console.log(` Status: ${statusColor(loopStatus)}`);
|
|
360
|
+
console.log('');
|
|
361
|
+
});
|
|
362
|
+
program
|
|
363
|
+
.command('reset')
|
|
364
|
+
.description('Reset all state')
|
|
365
|
+
.option('-f, --force', 'Skip confirmation')
|
|
366
|
+
.action(async (options) => {
|
|
367
|
+
if (!options.force) {
|
|
368
|
+
console.log(chalk.yellow('This will stop all sessions and clear all state.'));
|
|
369
|
+
console.log(chalk.yellow('Use --force to confirm.'));
|
|
370
|
+
return;
|
|
371
|
+
}
|
|
372
|
+
const manager = getSessionManager();
|
|
373
|
+
const store = getStore();
|
|
374
|
+
await manager.stopAllSessions();
|
|
375
|
+
store.reset();
|
|
376
|
+
console.log(chalk.green('✓ All state reset'));
|
|
377
|
+
});
|
|
378
|
+
// Shorthand commands at root level
|
|
379
|
+
program
|
|
380
|
+
.command('start')
|
|
381
|
+
.description('Start a new session (shorthand)')
|
|
382
|
+
.option('-d, --dir <path>', 'Working directory', process.cwd())
|
|
383
|
+
.action(async (options) => {
|
|
384
|
+
const manager = getSessionManager();
|
|
385
|
+
const session = await manager.createSession(options.dir);
|
|
386
|
+
console.log(chalk.green(`✓ Session started: ${session.id}`));
|
|
387
|
+
});
|
|
388
|
+
program
|
|
389
|
+
.command('list')
|
|
390
|
+
.alias('ls')
|
|
391
|
+
.description('List all sessions (shorthand)')
|
|
392
|
+
.action(() => {
|
|
393
|
+
const manager = getSessionManager();
|
|
394
|
+
const sessions = manager.getAllSessions();
|
|
395
|
+
const stored = manager.getStoredSessions();
|
|
396
|
+
if (sessions.length === 0 && Object.keys(stored).length === 0) {
|
|
397
|
+
console.log(chalk.yellow('No sessions found'));
|
|
398
|
+
return;
|
|
399
|
+
}
|
|
400
|
+
console.log(chalk.bold('\nActive Sessions:'));
|
|
401
|
+
if (sessions.length === 0) {
|
|
402
|
+
console.log(' (none)');
|
|
403
|
+
}
|
|
404
|
+
else {
|
|
405
|
+
for (const session of sessions) {
|
|
406
|
+
const status = session.status === 'idle'
|
|
407
|
+
? chalk.green('idle')
|
|
408
|
+
: session.status === 'busy'
|
|
409
|
+
? chalk.yellow('busy')
|
|
410
|
+
: chalk.red(session.status);
|
|
411
|
+
console.log(` ${chalk.cyan(session.id.slice(0, 8))} ${status} ${session.workingDir}`);
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
console.log('');
|
|
415
|
+
});
|
|
416
|
+
// Web interface command
|
|
417
|
+
program
|
|
418
|
+
.command('web')
|
|
419
|
+
.description('Start the web interface')
|
|
420
|
+
.option('-p, --port <port>', 'Port to listen on', '3000')
|
|
421
|
+
.option('--https', 'Enable HTTPS with self-signed certificate (only needed for remote access, not localhost)')
|
|
422
|
+
.action(async (options) => {
|
|
423
|
+
const { startWebServer } = await import('./web/server.js');
|
|
424
|
+
const port = parseInt(options.port, 10);
|
|
425
|
+
const https = !!options.https;
|
|
426
|
+
const protocol = https ? 'https' : 'http';
|
|
427
|
+
console.log(chalk.cyan(`Starting Codeman web interface on port ${port}${https ? ' (HTTPS)' : ''}...`));
|
|
428
|
+
try {
|
|
429
|
+
const server = await startWebServer(port, https);
|
|
430
|
+
console.log(chalk.green(`\n✓ Web interface running at ${protocol}://localhost:${port}`));
|
|
431
|
+
if (https) {
|
|
432
|
+
console.log(chalk.yellow(' Note: Accept the self-signed certificate in your browser on first visit'));
|
|
433
|
+
}
|
|
434
|
+
console.log(chalk.gray(' Press Ctrl+C to stop\n'));
|
|
435
|
+
// Graceful shutdown handler — flush state and clean up on SIGTERM/SIGINT
|
|
436
|
+
let shuttingDown = false;
|
|
437
|
+
const shutdown = async (signal) => {
|
|
438
|
+
if (shuttingDown)
|
|
439
|
+
return;
|
|
440
|
+
shuttingDown = true;
|
|
441
|
+
console.log(chalk.yellow(`\n${signal} received, shutting down gracefully...`));
|
|
442
|
+
try {
|
|
443
|
+
await server.stop();
|
|
444
|
+
}
|
|
445
|
+
catch (err) {
|
|
446
|
+
console.error(chalk.red(`Error during shutdown: ${getErrorMessage(err)}`));
|
|
447
|
+
}
|
|
448
|
+
process.exit(0);
|
|
449
|
+
};
|
|
450
|
+
process.on('SIGTERM', () => shutdown('SIGTERM'));
|
|
451
|
+
process.on('SIGINT', () => shutdown('SIGINT'));
|
|
452
|
+
process.on('SIGHUP', () => shutdown('SIGHUP'));
|
|
453
|
+
}
|
|
454
|
+
catch (err) {
|
|
455
|
+
console.error(chalk.red(`✗ Failed to start web server: ${getErrorMessage(err)}`));
|
|
456
|
+
process.exit(1);
|
|
457
|
+
}
|
|
458
|
+
});
|
|
459
|
+
export { program };
|
|
460
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAwB,CAAC;AAE9D,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,wDAAwD,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAEnH,6CAA6C;AAE7C,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;AAE/F,UAAU;KACP,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,4BAA4B,CAAC;KACzC,MAAM,CAAC,kBAAkB,EAAE,mBAAmB,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;KAC9D,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,sBAAsB,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,wBAAwB,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,UAAU,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACvC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,8BAA8B,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,UAAU;KACP,OAAO,CAAC,WAAW,CAAC;KACpB,WAAW,CAAC,gBAAgB,CAAC;KAC7B,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;IACnB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAC;QACpC,MAAM,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAAC,CAAC;IACvD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,6BAA6B,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,UAAU;KACP,OAAO,CAAC,MAAM,CAAC;KACf,KAAK,CAAC,IAAI,CAAC;KACX,WAAW,CAAC,mBAAmB,CAAC;KAChC,MAAM,CAAC,GAAG,EAAE;IACX,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAC;IACpC,MAAM,QAAQ,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAC1C,MAAM,MAAM,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAE3C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC;QAC/C,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;IAC9C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC1B,CAAC;SAAM,CAAC;QACN,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,MAAM,MAAM,GACV,OAAO,CAAC,MAAM,KAAK,MAAM;gBACvB,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;gBACrB,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,MAAM;oBACzB,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;oBACtB,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAClC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,MAAM,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;QACzF,CAAC;IACH,CAAC;IAED,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;IACpF,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAC/C,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACtD,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;QAC/G,CAAC;IACH,CAAC;IAED,iEAAiE;IACjE,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;IACnF,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC,CAAC;QAChE,KAAK,MAAM,OAAO,IAAI,cAAc,EAAE,CAAC;YACrC,MAAM,MAAM,GACV,OAAO,CAAC,MAAM,KAAK,MAAM;gBACvB,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;gBACrB,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,MAAM;oBACzB,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;oBACtB,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAClC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACtD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACpE,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACtF,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;QAC9G,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEL,UAAU;KACP,OAAO,CAAC,WAAW,CAAC;KACpB,WAAW,CAAC,qBAAqB,CAAC;KAClC,MAAM,CAAC,cAAc,EAAE,+BAA+B,CAAC;KACvD,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE;IACtB,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAC;IACpC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;IAE3F,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,0BAA0B,CAAC,CAAC,CAAC;QACnE,OAAO;IACT,CAAC;IAED,IAAI,MAAM,KAAK,EAAE,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;QACvC,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACtB,CAAC,CAAC,CAAC;AAEL,0CAA0C;AAE1C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;AAE/E,OAAO;KACJ,OAAO,CAAC,cAAc,CAAC;KACvB,WAAW,CAAC,gBAAgB,CAAC;KAC7B,MAAM,CAAC,kBAAkB,EAAE,mBAAmB,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;KAC9D,MAAM,CAAC,oBAAoB,EAAE,2BAA2B,EAAE,GAAG,CAAC;KAC9D,MAAM,CAAC,2BAA2B,EAAE,6BAA6B,CAAC;KAClE,MAAM,CAAC,gBAAgB,EAAE,yBAAyB,CAAC;KACnD,MAAM,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE;IAC1B,MAAM,KAAK,GAAG,YAAY,EAAE,CAAC;IAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC;QACzB,MAAM;QACN,UAAU,EAAE,OAAO,CAAC,GAAG;QACvB,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;QACxC,gBAAgB,EAAE,OAAO,CAAC,UAAU;QACpC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;KACvE,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,iBAAiB,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAClF,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC9C,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,KAAK,CAAC,IAAI,CAAC;KACX,WAAW,CAAC,gBAAgB,CAAC;KAC7B,MAAM,CAAC,uBAAuB,EAAE,wDAAwD,CAAC;KACzF,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE;IAClB,MAAM,KAAK,GAAG,YAAY,EAAE,CAAC;IAC7B,IAAI,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAEhC,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3D,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAC5C,OAAO;IACT,CAAC;IAED,MAAM,YAAY,GAAG;QACnB,OAAO,EAAE,KAAK,CAAC,IAAI;QACnB,OAAO,EAAE,KAAK,CAAC,MAAM;QACrB,SAAS,EAAE,KAAK,CAAC,KAAK;QACtB,MAAM,EAAE,KAAK,CAAC,GAAG;KAClB,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IACpC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACjF,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC,CAAC;IACpH,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;IAChC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;IACtC,OAAO,CAAC,GAAG,CACT,cAAc,MAAM,CAAC,OAAO,cAAc,MAAM,CAAC,OAAO,gBAAgB,MAAM,CAAC,SAAS,aAAa,MAAM,CAAC,MAAM,EAAE,CACrH,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,aAAa,CAAC;KACtB,WAAW,CAAC,mBAAmB,CAAC;KAChC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE;IACb,MAAM,KAAK,GAAG,YAAY,EAAE,CAAC;IAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAE/B,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;QAC/C,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAC3C,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IAChC,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;IACjD,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACtD,CAAC;IACD,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,YAAY,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACnD,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACnF,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,aAAa,CAAC;KACtB,KAAK,CAAC,IAAI,CAAC;KACX,WAAW,CAAC,eAAe,CAAC;KAC5B,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE;IACb,MAAM,KAAK,GAAG,YAAY,EAAE,CAAC;IAC7B,IAAI,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC,CAAC;IACpD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;IACjD,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,8BAA8B,CAAC;KAC3C,MAAM,CAAC,WAAW,EAAE,iBAAiB,CAAC;KACtC,MAAM,CAAC,cAAc,EAAE,yBAAyB,CAAC;KACjD,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE;IAClB,MAAM,KAAK,GAAG,YAAY,EAAE,CAAC;IAC7B,IAAI,KAAa,CAAC;IAElB,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC;IACvD,CAAC;SAAM,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QAC1B,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,KAAK,eAAe,CAAC,CAAC,CAAC;IAC9D,CAAC;SAAM,CAAC;QACN,KAAK,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,KAAK,kBAAkB,CAAC,CAAC,CAAC;IACjE,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,gDAAgD;AAEhD,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,mCAAmC,CAAC,CAAC;AAEtG,QAAQ;KACL,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,sBAAsB,CAAC;KACnC,MAAM,CAAC,yBAAyB,EAAE,2BAA2B,CAAC;KAC9D,MAAM,CAAC,oBAAoB,EAAE,yCAAyC,CAAC;KACvE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,MAAM,IAAI,GAAG,YAAY,CAAC;QACxB,iBAAiB,EAAE,OAAO,CAAC,YAAY;KACxC,CAAC,CAAC;IAEH,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IACpD,CAAC;IAED,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,+BAA+B,CAAC,CAAC,CAAC;QAC3D,OAAO;IACT,CAAC;IAED,IAAI,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE;QAC5C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,wBAAwB,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACvG,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,MAAM,EAAE,EAAE;QAClC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QACtC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,YAAY,KAAK,EAAE,CAAC,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;QACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC,CAAC;QAClD,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC5B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;IACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC;IACjD,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,uBAAuB,OAAO,CAAC,QAAQ,QAAQ,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;IAEpD,uBAAuB;IACvB,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;QACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC,CAAC;QACtD,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEL,QAAQ;KACL,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,qBAAqB,CAAC;KAClC,MAAM,CAAC,GAAG,EAAE;IACX,MAAM,IAAI,GAAG,YAAY,EAAE,CAAC;IAC5B,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAAC,CAAC;QACvD,OAAO;IACT,CAAC;IACD,IAAI,CAAC,IAAI,EAAE,CAAC;IACZ,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC;AACnD,CAAC,CAAC,CAAC;AAEL,QAAQ;KACL,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,wBAAwB,CAAC;KACrC,MAAM,CAAC,GAAG,EAAE;IACX,MAAM,IAAI,GAAG,YAAY,EAAE,CAAC;IAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC9B,UAAU,CAAC,KAAK,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC;AAEL,SAAS,UAAU,CAAC,KAA8D;IAChF,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;IAErH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,CAAC,aAAa,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IACjE,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;QACxB,MAAM,QAAQ,GAAG,KAAK,CAAC,aAAa,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACxD,OAAO,CAAC,GAAG,CACT,mBAAmB,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,GAAG,CACzG,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IACpC,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAC3C,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAC3C,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,CAAC,SAAS,KAAK,KAAK,CAAC,cAAc,gBAAgB,CAAC,CAAC;IACtF,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC;IAEpD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAED,6CAA6C;AAE7C,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,qBAAqB,CAAC;KAClC,MAAM,CAAC,GAAG,EAAE;IACX,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAC;IACpC,MAAM,KAAK,GAAG,YAAY,EAAE,CAAC;IAC7B,MAAM,IAAI,GAAG,YAAY,EAAE,CAAC;IAE5B,MAAM,QAAQ,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAC1C,MAAM,MAAM,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAC3C,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC3C,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;IACpC,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC;IAE/B,sEAAsE;IACtE,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC;IACjG,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM;QAC/B,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM;QAC3C,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,MAAM,CAAC;IAC3D,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM;QAC/B,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM;QAC3C,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,MAAM,CAAC;IAE3D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAE5B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,CAAC,aAAa,WAAW,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,WAAW,SAAS,EAAE,CAAC,CAAC;IACpC,OAAO,CAAC,GAAG,CAAC,WAAW,SAAS,EAAE,CAAC,CAAC;IAEpC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IACpC,OAAO,CAAC,GAAG,CAAC,YAAY,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,cAAc,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,CAAC,cAAc,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,CAAC,gBAAgB,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC;IACpD,OAAO,CAAC,GAAG,CAAC,aAAa,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;IAE9C,MAAM,WAAW,GAAG,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;IACjH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,aAAa,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IACpD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,iBAAiB,CAAC;KAC9B,MAAM,CAAC,aAAa,EAAE,mBAAmB,CAAC;KAC1C,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,kDAAkD,CAAC,CAAC,CAAC;QAC9E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC,CAAC;QACrD,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAC;IACpC,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IAEzB,MAAM,OAAO,CAAC,eAAe,EAAE,CAAC;IAChC,KAAK,CAAC,KAAK,EAAE,CAAC;IAEd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC;AAChD,CAAC,CAAC,CAAC;AAEL,mCAAmC;AACnC,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,iCAAiC,CAAC;KAC9C,MAAM,CAAC,kBAAkB,EAAE,mBAAmB,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;KAC9D,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAC;IACpC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACzD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,sBAAsB,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AAC/D,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,KAAK,CAAC,IAAI,CAAC;KACX,WAAW,CAAC,+BAA+B,CAAC;KAC5C,MAAM,CAAC,GAAG,EAAE;IACX,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAC;IACpC,MAAM,QAAQ,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAC1C,MAAM,MAAM,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAE3C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC;QAC/C,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;IAC9C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC1B,CAAC;SAAM,CAAC;QACN,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,MAAM,MAAM,GACV,OAAO,CAAC,MAAM,KAAK,MAAM;gBACvB,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;gBACrB,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,MAAM;oBACzB,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;oBACtB,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAClC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,MAAM,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;QACzF,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEL,wBAAwB;AACxB,OAAO;KACJ,OAAO,CAAC,KAAK,CAAC;KACd,WAAW,CAAC,yBAAyB,CAAC;KACtC,MAAM,CAAC,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,CAAC;KACxD,MAAM,CAAC,SAAS,EAAE,0FAA0F,CAAC;KAC7G,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAC3D,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACxC,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;IAC9B,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;IAE1C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,0CAA0C,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IAEvG,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,gCAAgC,QAAQ,gBAAgB,IAAI,EAAE,CAAC,CAAC,CAAC;QACzF,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,2EAA2E,CAAC,CAAC,CAAC;QACzG,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;QAEpD,yEAAyE;QACzE,IAAI,YAAY,GAAG,KAAK,CAAC;QACzB,MAAM,QAAQ,GAAG,KAAK,EAAE,MAAc,EAAE,EAAE;YACxC,IAAI,YAAY;gBAAE,OAAO;YACzB,YAAY,GAAG,IAAI,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,MAAM,wCAAwC,CAAC,CAAC,CAAC;YAC/E,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YACtB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,0BAA0B,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YAC7E,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC;QACF,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;QACjD,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC/C,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;IACjD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,iCAAiC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAClF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO,EAAE,OAAO,EAAE,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Centralized buffer size limits for memory management.
|
|
3
|
+
*
|
|
4
|
+
* These constants define the maximum sizes for various buffers throughout
|
|
5
|
+
* Codeman. Consolidating them here ensures consistent limits and makes
|
|
6
|
+
* it easy to tune memory usage.
|
|
7
|
+
*
|
|
8
|
+
* Memory Budget Rationale (for 20 concurrent sessions):
|
|
9
|
+
* - Terminal buffer: 2MB max × 20 = 40MB worst case
|
|
10
|
+
* - Text output: 1MB max × 20 = 20MB worst case
|
|
11
|
+
* - Messages: ~1KB each × 1000 × 20 = 20MB worst case
|
|
12
|
+
* - Total buffer overhead: ~80MB (acceptable for long-running server)
|
|
13
|
+
*
|
|
14
|
+
* @module config/buffer-limits
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* Maximum terminal buffer size in characters.
|
|
18
|
+
* Contains raw terminal output with ANSI escape sequences.
|
|
19
|
+
* Reduced from 5MB to 2MB for better render performance.
|
|
20
|
+
*/
|
|
21
|
+
export declare const MAX_TERMINAL_BUFFER_SIZE: number;
|
|
22
|
+
/**
|
|
23
|
+
* Size to trim terminal buffer to when max is exceeded.
|
|
24
|
+
* Keeps the most recent portion to preserve context.
|
|
25
|
+
*/
|
|
26
|
+
export declare const TRIM_TERMINAL_TO: number;
|
|
27
|
+
/**
|
|
28
|
+
* Maximum text output buffer size in characters.
|
|
29
|
+
* Contains ANSI-stripped text for search and analysis.
|
|
30
|
+
*/
|
|
31
|
+
export declare const MAX_TEXT_OUTPUT_SIZE: number;
|
|
32
|
+
/**
|
|
33
|
+
* Size to trim text output buffer to when max is exceeded.
|
|
34
|
+
*/
|
|
35
|
+
export declare const TRIM_TEXT_TO: number;
|
|
36
|
+
/**
|
|
37
|
+
* Maximum number of Claude JSON messages to keep in memory per session.
|
|
38
|
+
* Older messages are discarded when limit is exceeded.
|
|
39
|
+
*/
|
|
40
|
+
export declare const MAX_MESSAGES = 1000;
|
|
41
|
+
/**
|
|
42
|
+
* Number of messages to keep when trimming (80% of max).
|
|
43
|
+
*/
|
|
44
|
+
export declare const TRIM_MESSAGES_TO = 800;
|
|
45
|
+
/**
|
|
46
|
+
* Maximum line buffer size in characters.
|
|
47
|
+
* Prevents unbounded growth for extremely long lines without newlines.
|
|
48
|
+
*/
|
|
49
|
+
export declare const MAX_LINE_BUFFER_SIZE: number;
|
|
50
|
+
/**
|
|
51
|
+
* Maximum respawn controller buffer size.
|
|
52
|
+
* Smaller than session buffer since it's only used for idle detection.
|
|
53
|
+
*/
|
|
54
|
+
export declare const MAX_RESPAWN_BUFFER_SIZE: number;
|
|
55
|
+
/**
|
|
56
|
+
* Size to trim respawn buffer to when max is exceeded.
|
|
57
|
+
*/
|
|
58
|
+
export declare const TRIM_RESPAWN_BUFFER_TO: number;
|
|
59
|
+
//# sourceMappingURL=buffer-limits.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buffer-limits.d.ts","sourceRoot":"","sources":["../../src/config/buffer-limits.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAMH;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,QAAkB,CAAC;AAExD;;;GAGG;AACH,eAAO,MAAM,gBAAgB,QAAoB,CAAC;AAMlD;;;GAGG;AACH,eAAO,MAAM,oBAAoB,QAAkB,CAAC;AAEpD;;GAEG;AACH,eAAO,MAAM,YAAY,QAAa,CAAC;AAMvC;;;GAGG;AACH,eAAO,MAAM,YAAY,OAAO,CAAC;AAEjC;;GAEG;AACH,eAAO,MAAM,gBAAgB,MAAM,CAAC;AAMpC;;;GAGG;AACH,eAAO,MAAM,oBAAoB,QAAY,CAAC;AAM9C;;;GAGG;AACH,eAAO,MAAM,uBAAuB,QAAkB,CAAC;AAEvD;;GAEG;AACH,eAAO,MAAM,sBAAsB,QAAa,CAAC"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Centralized buffer size limits for memory management.
|
|
3
|
+
*
|
|
4
|
+
* These constants define the maximum sizes for various buffers throughout
|
|
5
|
+
* Codeman. Consolidating them here ensures consistent limits and makes
|
|
6
|
+
* it easy to tune memory usage.
|
|
7
|
+
*
|
|
8
|
+
* Memory Budget Rationale (for 20 concurrent sessions):
|
|
9
|
+
* - Terminal buffer: 2MB max × 20 = 40MB worst case
|
|
10
|
+
* - Text output: 1MB max × 20 = 20MB worst case
|
|
11
|
+
* - Messages: ~1KB each × 1000 × 20 = 20MB worst case
|
|
12
|
+
* - Total buffer overhead: ~80MB (acceptable for long-running server)
|
|
13
|
+
*
|
|
14
|
+
* @module config/buffer-limits
|
|
15
|
+
*/
|
|
16
|
+
// ============================================================================
|
|
17
|
+
// Terminal Buffer Limits
|
|
18
|
+
// ============================================================================
|
|
19
|
+
/**
|
|
20
|
+
* Maximum terminal buffer size in characters.
|
|
21
|
+
* Contains raw terminal output with ANSI escape sequences.
|
|
22
|
+
* Reduced from 5MB to 2MB for better render performance.
|
|
23
|
+
*/
|
|
24
|
+
export const MAX_TERMINAL_BUFFER_SIZE = 2 * 1024 * 1024; // 2MB
|
|
25
|
+
/**
|
|
26
|
+
* Size to trim terminal buffer to when max is exceeded.
|
|
27
|
+
* Keeps the most recent portion to preserve context.
|
|
28
|
+
*/
|
|
29
|
+
export const TRIM_TERMINAL_TO = 1.5 * 1024 * 1024; // 1.5MB
|
|
30
|
+
// ============================================================================
|
|
31
|
+
// Text Output Buffer Limits
|
|
32
|
+
// ============================================================================
|
|
33
|
+
/**
|
|
34
|
+
* Maximum text output buffer size in characters.
|
|
35
|
+
* Contains ANSI-stripped text for search and analysis.
|
|
36
|
+
*/
|
|
37
|
+
export const MAX_TEXT_OUTPUT_SIZE = 1 * 1024 * 1024; // 1MB
|
|
38
|
+
/**
|
|
39
|
+
* Size to trim text output buffer to when max is exceeded.
|
|
40
|
+
*/
|
|
41
|
+
export const TRIM_TEXT_TO = 768 * 1024; // 768KB
|
|
42
|
+
// ============================================================================
|
|
43
|
+
// Message Buffer Limits
|
|
44
|
+
// ============================================================================
|
|
45
|
+
/**
|
|
46
|
+
* Maximum number of Claude JSON messages to keep in memory per session.
|
|
47
|
+
* Older messages are discarded when limit is exceeded.
|
|
48
|
+
*/
|
|
49
|
+
export const MAX_MESSAGES = 1000;
|
|
50
|
+
/**
|
|
51
|
+
* Number of messages to keep when trimming (80% of max).
|
|
52
|
+
*/
|
|
53
|
+
export const TRIM_MESSAGES_TO = 800;
|
|
54
|
+
// ============================================================================
|
|
55
|
+
// Line Buffer Limits
|
|
56
|
+
// ============================================================================
|
|
57
|
+
/**
|
|
58
|
+
* Maximum line buffer size in characters.
|
|
59
|
+
* Prevents unbounded growth for extremely long lines without newlines.
|
|
60
|
+
*/
|
|
61
|
+
export const MAX_LINE_BUFFER_SIZE = 64 * 1024; // 64KB
|
|
62
|
+
// ============================================================================
|
|
63
|
+
// Respawn Controller Buffer Limits
|
|
64
|
+
// ============================================================================
|
|
65
|
+
/**
|
|
66
|
+
* Maximum respawn controller buffer size.
|
|
67
|
+
* Smaller than session buffer since it's only used for idle detection.
|
|
68
|
+
*/
|
|
69
|
+
export const MAX_RESPAWN_BUFFER_SIZE = 1 * 1024 * 1024; // 1MB
|
|
70
|
+
/**
|
|
71
|
+
* Size to trim respawn buffer to when max is exceeded.
|
|
72
|
+
*/
|
|
73
|
+
export const TRIM_RESPAWN_BUFFER_TO = 512 * 1024; // 512KB
|
|
74
|
+
//# sourceMappingURL=buffer-limits.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buffer-limits.js","sourceRoot":"","sources":["../../src/config/buffer-limits.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,+EAA+E;AAC/E,yBAAyB;AACzB,+EAA+E;AAE/E;;;;GAIG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,MAAM;AAE/D;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,QAAQ;AAE3D,+EAA+E;AAC/E,4BAA4B;AAC5B,+EAA+E;AAE/E;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,MAAM;AAE3D;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,QAAQ;AAEhD,+EAA+E;AAC/E,wBAAwB;AACxB,+EAA+E;AAE/E;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC;AAEjC;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAEpC,+EAA+E;AAC/E,qBAAqB;AACrB,+EAA+E;AAE/E;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,OAAO;AAEtD,+EAA+E;AAC/E,mCAAmC;AACnC,+EAA+E;AAE/E;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,MAAM;AAE9D;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,QAAQ"}
|