mstro-app 0.1.47
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 +177 -0
- package/bin/commands/config.js +145 -0
- package/bin/commands/login.js +313 -0
- package/bin/commands/logout.js +75 -0
- package/bin/commands/status.js +197 -0
- package/bin/commands/whoami.js +161 -0
- package/bin/configure-claude.js +298 -0
- package/bin/mstro.js +581 -0
- package/bin/postinstall.js +45 -0
- package/bin/release.sh +110 -0
- package/dist/server/cli/headless/claude-invoker.d.ts +17 -0
- package/dist/server/cli/headless/claude-invoker.d.ts.map +1 -0
- package/dist/server/cli/headless/claude-invoker.js +311 -0
- package/dist/server/cli/headless/claude-invoker.js.map +1 -0
- package/dist/server/cli/headless/index.d.ts +13 -0
- package/dist/server/cli/headless/index.d.ts.map +1 -0
- package/dist/server/cli/headless/index.js +10 -0
- package/dist/server/cli/headless/index.js.map +1 -0
- package/dist/server/cli/headless/mcp-config.d.ts +11 -0
- package/dist/server/cli/headless/mcp-config.d.ts.map +1 -0
- package/dist/server/cli/headless/mcp-config.js +76 -0
- package/dist/server/cli/headless/mcp-config.js.map +1 -0
- package/dist/server/cli/headless/output-utils.d.ts +33 -0
- package/dist/server/cli/headless/output-utils.d.ts.map +1 -0
- package/dist/server/cli/headless/output-utils.js +101 -0
- package/dist/server/cli/headless/output-utils.js.map +1 -0
- package/dist/server/cli/headless/prompt-utils.d.ts +21 -0
- package/dist/server/cli/headless/prompt-utils.d.ts.map +1 -0
- package/dist/server/cli/headless/prompt-utils.js +84 -0
- package/dist/server/cli/headless/prompt-utils.js.map +1 -0
- package/dist/server/cli/headless/runner.d.ts +24 -0
- package/dist/server/cli/headless/runner.d.ts.map +1 -0
- package/dist/server/cli/headless/runner.js +99 -0
- package/dist/server/cli/headless/runner.js.map +1 -0
- package/dist/server/cli/headless/types.d.ts +106 -0
- package/dist/server/cli/headless/types.d.ts.map +1 -0
- package/dist/server/cli/headless/types.js +4 -0
- package/dist/server/cli/headless/types.js.map +1 -0
- package/dist/server/cli/improvisation-session-manager.d.ts +155 -0
- package/dist/server/cli/improvisation-session-manager.d.ts.map +1 -0
- package/dist/server/cli/improvisation-session-manager.js +415 -0
- package/dist/server/cli/improvisation-session-manager.js.map +1 -0
- package/dist/server/index.d.ts +2 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +386 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/mcp/bouncer-cli.d.ts +3 -0
- package/dist/server/mcp/bouncer-cli.d.ts.map +1 -0
- package/dist/server/mcp/bouncer-cli.js +99 -0
- package/dist/server/mcp/bouncer-cli.js.map +1 -0
- package/dist/server/mcp/bouncer-integration.d.ts +36 -0
- package/dist/server/mcp/bouncer-integration.d.ts.map +1 -0
- package/dist/server/mcp/bouncer-integration.js +301 -0
- package/dist/server/mcp/bouncer-integration.js.map +1 -0
- package/dist/server/mcp/security-audit.d.ts +52 -0
- package/dist/server/mcp/security-audit.d.ts.map +1 -0
- package/dist/server/mcp/security-audit.js +118 -0
- package/dist/server/mcp/security-audit.js.map +1 -0
- package/dist/server/mcp/security-patterns.d.ts +73 -0
- package/dist/server/mcp/security-patterns.d.ts.map +1 -0
- package/dist/server/mcp/security-patterns.js +247 -0
- package/dist/server/mcp/security-patterns.js.map +1 -0
- package/dist/server/mcp/server.d.ts +3 -0
- package/dist/server/mcp/server.d.ts.map +1 -0
- package/dist/server/mcp/server.js +146 -0
- package/dist/server/mcp/server.js.map +1 -0
- package/dist/server/routes/files.d.ts +9 -0
- package/dist/server/routes/files.d.ts.map +1 -0
- package/dist/server/routes/files.js +24 -0
- package/dist/server/routes/files.js.map +1 -0
- package/dist/server/routes/improvise.d.ts +3 -0
- package/dist/server/routes/improvise.d.ts.map +1 -0
- package/dist/server/routes/improvise.js +72 -0
- package/dist/server/routes/improvise.js.map +1 -0
- package/dist/server/routes/index.d.ts +10 -0
- package/dist/server/routes/index.d.ts.map +1 -0
- package/dist/server/routes/index.js +12 -0
- package/dist/server/routes/index.js.map +1 -0
- package/dist/server/routes/instances.d.ts +10 -0
- package/dist/server/routes/instances.d.ts.map +1 -0
- package/dist/server/routes/instances.js +47 -0
- package/dist/server/routes/instances.js.map +1 -0
- package/dist/server/routes/notifications.d.ts +3 -0
- package/dist/server/routes/notifications.d.ts.map +1 -0
- package/dist/server/routes/notifications.js +136 -0
- package/dist/server/routes/notifications.js.map +1 -0
- package/dist/server/services/analytics.d.ts +56 -0
- package/dist/server/services/analytics.d.ts.map +1 -0
- package/dist/server/services/analytics.js +240 -0
- package/dist/server/services/analytics.js.map +1 -0
- package/dist/server/services/auth.d.ts +26 -0
- package/dist/server/services/auth.d.ts.map +1 -0
- package/dist/server/services/auth.js +71 -0
- package/dist/server/services/auth.js.map +1 -0
- package/dist/server/services/client-id.d.ts +10 -0
- package/dist/server/services/client-id.d.ts.map +1 -0
- package/dist/server/services/client-id.js +61 -0
- package/dist/server/services/client-id.js.map +1 -0
- package/dist/server/services/credentials.d.ts +39 -0
- package/dist/server/services/credentials.d.ts.map +1 -0
- package/dist/server/services/credentials.js +110 -0
- package/dist/server/services/credentials.js.map +1 -0
- package/dist/server/services/files.d.ts +119 -0
- package/dist/server/services/files.d.ts.map +1 -0
- package/dist/server/services/files.js +560 -0
- package/dist/server/services/files.js.map +1 -0
- package/dist/server/services/instances.d.ts +52 -0
- package/dist/server/services/instances.d.ts.map +1 -0
- package/dist/server/services/instances.js +241 -0
- package/dist/server/services/instances.js.map +1 -0
- package/dist/server/services/pathUtils.d.ts +47 -0
- package/dist/server/services/pathUtils.d.ts.map +1 -0
- package/dist/server/services/pathUtils.js +124 -0
- package/dist/server/services/pathUtils.js.map +1 -0
- package/dist/server/services/platform.d.ts +72 -0
- package/dist/server/services/platform.d.ts.map +1 -0
- package/dist/server/services/platform.js +368 -0
- package/dist/server/services/platform.js.map +1 -0
- package/dist/server/services/sentry.d.ts +5 -0
- package/dist/server/services/sentry.d.ts.map +1 -0
- package/dist/server/services/sentry.js +71 -0
- package/dist/server/services/sentry.js.map +1 -0
- package/dist/server/services/terminal/pty-manager.d.ts +149 -0
- package/dist/server/services/terminal/pty-manager.d.ts.map +1 -0
- package/dist/server/services/terminal/pty-manager.js +377 -0
- package/dist/server/services/terminal/pty-manager.js.map +1 -0
- package/dist/server/services/terminal/tmux-manager.d.ts +82 -0
- package/dist/server/services/terminal/tmux-manager.d.ts.map +1 -0
- package/dist/server/services/terminal/tmux-manager.js +352 -0
- package/dist/server/services/terminal/tmux-manager.js.map +1 -0
- package/dist/server/services/websocket/autocomplete.d.ts +50 -0
- package/dist/server/services/websocket/autocomplete.d.ts.map +1 -0
- package/dist/server/services/websocket/autocomplete.js +361 -0
- package/dist/server/services/websocket/autocomplete.js.map +1 -0
- package/dist/server/services/websocket/file-utils.d.ts +44 -0
- package/dist/server/services/websocket/file-utils.d.ts.map +1 -0
- package/dist/server/services/websocket/file-utils.js +272 -0
- package/dist/server/services/websocket/file-utils.js.map +1 -0
- package/dist/server/services/websocket/handler.d.ts +246 -0
- package/dist/server/services/websocket/handler.d.ts.map +1 -0
- package/dist/server/services/websocket/handler.js +1771 -0
- package/dist/server/services/websocket/handler.js.map +1 -0
- package/dist/server/services/websocket/index.d.ts +11 -0
- package/dist/server/services/websocket/index.d.ts.map +1 -0
- package/dist/server/services/websocket/index.js +14 -0
- package/dist/server/services/websocket/index.js.map +1 -0
- package/dist/server/services/websocket/types.d.ts +214 -0
- package/dist/server/services/websocket/types.d.ts.map +1 -0
- package/dist/server/services/websocket/types.js +4 -0
- package/dist/server/services/websocket/types.js.map +1 -0
- package/dist/server/utils/agent-manager.d.ts +69 -0
- package/dist/server/utils/agent-manager.d.ts.map +1 -0
- package/dist/server/utils/agent-manager.js +269 -0
- package/dist/server/utils/agent-manager.js.map +1 -0
- package/dist/server/utils/paths.d.ts +25 -0
- package/dist/server/utils/paths.d.ts.map +1 -0
- package/dist/server/utils/paths.js +38 -0
- package/dist/server/utils/paths.js.map +1 -0
- package/dist/server/utils/port-manager.d.ts +10 -0
- package/dist/server/utils/port-manager.d.ts.map +1 -0
- package/dist/server/utils/port-manager.js +60 -0
- package/dist/server/utils/port-manager.js.map +1 -0
- package/dist/server/utils/port.d.ts +26 -0
- package/dist/server/utils/port.d.ts.map +1 -0
- package/dist/server/utils/port.js +83 -0
- package/dist/server/utils/port.js.map +1 -0
- package/hooks/bouncer.sh +138 -0
- package/package.json +74 -0
- package/server/README.md +191 -0
- package/server/cli/headless/claude-invoker.ts +415 -0
- package/server/cli/headless/index.ts +39 -0
- package/server/cli/headless/mcp-config.ts +87 -0
- package/server/cli/headless/output-utils.ts +109 -0
- package/server/cli/headless/prompt-utils.ts +108 -0
- package/server/cli/headless/runner.ts +133 -0
- package/server/cli/headless/types.ts +118 -0
- package/server/cli/improvisation-session-manager.ts +531 -0
- package/server/index.ts +456 -0
- package/server/mcp/README.md +122 -0
- package/server/mcp/bouncer-cli.ts +127 -0
- package/server/mcp/bouncer-integration.ts +430 -0
- package/server/mcp/security-audit.ts +180 -0
- package/server/mcp/security-patterns.ts +290 -0
- package/server/mcp/server.ts +174 -0
- package/server/routes/files.ts +29 -0
- package/server/routes/improvise.ts +82 -0
- package/server/routes/index.ts +13 -0
- package/server/routes/instances.ts +54 -0
- package/server/routes/notifications.ts +158 -0
- package/server/services/analytics.ts +277 -0
- package/server/services/auth.ts +80 -0
- package/server/services/client-id.ts +68 -0
- package/server/services/credentials.ts +134 -0
- package/server/services/files.ts +710 -0
- package/server/services/instances.ts +275 -0
- package/server/services/pathUtils.ts +158 -0
- package/server/services/platform.test.ts +1314 -0
- package/server/services/platform.ts +435 -0
- package/server/services/sentry.ts +81 -0
- package/server/services/terminal/pty-manager.ts +464 -0
- package/server/services/terminal/tmux-manager.ts +426 -0
- package/server/services/websocket/autocomplete.ts +438 -0
- package/server/services/websocket/file-utils.ts +305 -0
- package/server/services/websocket/handler.test.ts +20 -0
- package/server/services/websocket/handler.ts +2047 -0
- package/server/services/websocket/index.ts +40 -0
- package/server/services/websocket/types.ts +339 -0
- package/server/tsconfig.json +19 -0
- package/server/utils/agent-manager.ts +323 -0
- package/server/utils/paths.ts +45 -0
- package/server/utils/port-manager.ts +70 -0
- package/server/utils/port.ts +102 -0
|
@@ -0,0 +1,415 @@
|
|
|
1
|
+
// Copyright (c) 2025-present Mstro, Inc. All rights reserved.
|
|
2
|
+
// Licensed under the MIT License. See LICENSE file for details.
|
|
3
|
+
/**
|
|
4
|
+
* Improvisation Session Manager v2
|
|
5
|
+
*
|
|
6
|
+
* Optimized for fast, direct prompt execution in Improvise mode.
|
|
7
|
+
* For complex multi-part prompts with parallel/sequential movements, use Compose tab instead.
|
|
8
|
+
*/
|
|
9
|
+
import { EventEmitter } from 'node:events';
|
|
10
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
11
|
+
import { join } from 'node:path';
|
|
12
|
+
import { HeadlessRunner } from './headless/index.js';
|
|
13
|
+
export class ImprovisationSessionManager extends EventEmitter {
|
|
14
|
+
sessionId;
|
|
15
|
+
improviseDir;
|
|
16
|
+
historyPath;
|
|
17
|
+
history;
|
|
18
|
+
currentRunner = null;
|
|
19
|
+
options;
|
|
20
|
+
pendingApproval;
|
|
21
|
+
outputQueue = [];
|
|
22
|
+
queueTimer = null;
|
|
23
|
+
isFirstPrompt = true; // Track if this is the first prompt (no --resume needed)
|
|
24
|
+
claudeSessionId; // Claude CLI session ID for tab isolation
|
|
25
|
+
isResumedSession = false; // Track if this is a resumed historical session
|
|
26
|
+
accumulatedKnowledge = '';
|
|
27
|
+
/**
|
|
28
|
+
* Resume from a historical session.
|
|
29
|
+
* Creates a new session manager that continues the conversation from a previous session.
|
|
30
|
+
* The first prompt will include context from the historical session.
|
|
31
|
+
*/
|
|
32
|
+
static resumeFromHistory(workingDir, historicalSessionId) {
|
|
33
|
+
const improviseDir = join(workingDir, '.mstro', 'improvise');
|
|
34
|
+
// Extract timestamp from session ID (format: improv-1234567890123 or just 1234567890123)
|
|
35
|
+
const timestamp = historicalSessionId.replace('improv-', '');
|
|
36
|
+
const historyPath = join(improviseDir, `history-${timestamp}.json`);
|
|
37
|
+
if (!existsSync(historyPath)) {
|
|
38
|
+
throw new Error(`Historical session not found: ${historicalSessionId}`);
|
|
39
|
+
}
|
|
40
|
+
// Read the historical session
|
|
41
|
+
const historyData = JSON.parse(readFileSync(historyPath, 'utf-8'));
|
|
42
|
+
// Create a new session manager with the SAME session ID
|
|
43
|
+
// This ensures we continue writing to the same history file
|
|
44
|
+
const manager = new ImprovisationSessionManager({
|
|
45
|
+
workingDir,
|
|
46
|
+
sessionId: historyData.sessionId
|
|
47
|
+
});
|
|
48
|
+
// Load the historical data
|
|
49
|
+
manager.history = historyData;
|
|
50
|
+
// Build accumulated knowledge from historical movements
|
|
51
|
+
manager.accumulatedKnowledge = historyData.movements
|
|
52
|
+
.filter(m => m.summary)
|
|
53
|
+
.map(m => m.summary)
|
|
54
|
+
.join('\n\n');
|
|
55
|
+
// Restore Claude session ID if available so we can --resume the actual conversation
|
|
56
|
+
// NOTE: Always mark as resumed session so historical context can be injected as fallback
|
|
57
|
+
// if the Claude CLI session has expired (e.g., client was restarted)
|
|
58
|
+
manager.isResumedSession = true;
|
|
59
|
+
manager.isFirstPrompt = true; // Always true so historical context is injected on first prompt
|
|
60
|
+
if (historyData.claudeSessionId) {
|
|
61
|
+
manager.claudeSessionId = historyData.claudeSessionId;
|
|
62
|
+
}
|
|
63
|
+
return manager;
|
|
64
|
+
}
|
|
65
|
+
constructor(options = {}) {
|
|
66
|
+
super();
|
|
67
|
+
this.options = {
|
|
68
|
+
workingDir: options.workingDir || process.cwd(),
|
|
69
|
+
sessionId: options.sessionId || `improv-${Date.now()}`,
|
|
70
|
+
tokenBudgetThreshold: options.tokenBudgetThreshold || 170000,
|
|
71
|
+
maxSessions: options.maxSessions || 10,
|
|
72
|
+
verbose: options.verbose || false,
|
|
73
|
+
noColor: options.noColor || false
|
|
74
|
+
};
|
|
75
|
+
this.sessionId = this.options.sessionId;
|
|
76
|
+
this.improviseDir = join(this.options.workingDir, '.mstro', 'improvise');
|
|
77
|
+
this.historyPath = join(this.improviseDir, `history-${this.sessionId.replace('improv-', '')}.json`);
|
|
78
|
+
// Ensure improvise directory exists
|
|
79
|
+
if (!existsSync(this.improviseDir)) {
|
|
80
|
+
mkdirSync(this.improviseDir, { recursive: true });
|
|
81
|
+
}
|
|
82
|
+
// Load or initialize history
|
|
83
|
+
this.history = this.loadHistory();
|
|
84
|
+
// Start output queue processor
|
|
85
|
+
this.startQueueProcessor();
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Start background queue processor that flushes output immediately
|
|
89
|
+
*/
|
|
90
|
+
startQueueProcessor() {
|
|
91
|
+
this.queueTimer = setInterval(() => {
|
|
92
|
+
this.flushOutputQueue();
|
|
93
|
+
}, 10); // Process queue every 10ms for near-instant output
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Queue output for immediate processing
|
|
97
|
+
*/
|
|
98
|
+
queueOutput(text) {
|
|
99
|
+
this.outputQueue.push({ text, timestamp: Date.now() });
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Flush all queued output immediately
|
|
103
|
+
*/
|
|
104
|
+
flushOutputQueue() {
|
|
105
|
+
while (this.outputQueue.length > 0) {
|
|
106
|
+
const item = this.outputQueue.shift();
|
|
107
|
+
if (item) {
|
|
108
|
+
this.emit('onOutput', item.text);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Build prompt with text file attachments prepended
|
|
114
|
+
* Format: each text file is shown as @path followed by content in code block
|
|
115
|
+
*/
|
|
116
|
+
buildPromptWithAttachments(userPrompt, attachments) {
|
|
117
|
+
if (!attachments || attachments.length === 0) {
|
|
118
|
+
return userPrompt;
|
|
119
|
+
}
|
|
120
|
+
// Filter to text files only (non-images)
|
|
121
|
+
const textFiles = attachments.filter(a => !a.isImage);
|
|
122
|
+
if (textFiles.length === 0) {
|
|
123
|
+
return userPrompt;
|
|
124
|
+
}
|
|
125
|
+
// Build file content blocks
|
|
126
|
+
const fileBlocks = textFiles.map(file => {
|
|
127
|
+
return `@${file.filePath}\n\`\`\`\n${file.content}\n\`\`\``;
|
|
128
|
+
}).join('\n\n');
|
|
129
|
+
// Prepend file content to user prompt
|
|
130
|
+
return `${fileBlocks}\n\n${userPrompt}`;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Execute a user prompt directly (Improvise mode - no score decomposition)
|
|
134
|
+
* Uses persistent Claude sessions via --resume <sessionId> for conversation continuity
|
|
135
|
+
* Each tab maintains its own claudeSessionId for proper isolation
|
|
136
|
+
* Supports file attachments: text files prepended to prompt, images via stream-json multimodal
|
|
137
|
+
*/
|
|
138
|
+
async executePrompt(userPrompt, attachments) {
|
|
139
|
+
const _execStart = Date.now();
|
|
140
|
+
this.emit('onMovementStart', this.history.movements.length + 1, userPrompt);
|
|
141
|
+
try {
|
|
142
|
+
const sequenceNumber = this.history.movements.length + 1;
|
|
143
|
+
// DEBUG: Removed "Executing prompt..." message - it serves no purpose now that system responds fast
|
|
144
|
+
// this.queueOutput(`\n🎵 Executing prompt...\n`);
|
|
145
|
+
// this.flushOutputQueue();
|
|
146
|
+
// NOTE: Risk analysis removed - now handled by MCP bouncer at tool-use time
|
|
147
|
+
// The MCP bouncer intercepts ALL tool calls (Bash, Write, etc.) and uses
|
|
148
|
+
// Mstro's bouncer-integration.ts for AI-powered approval/denial.
|
|
149
|
+
// This is more effective than analyzing user prompts, which had false positives.
|
|
150
|
+
// Build prompt with text file attachments prepended
|
|
151
|
+
const promptWithAttachments = this.buildPromptWithAttachments(userPrompt, attachments);
|
|
152
|
+
// PERSISTENT SESSION: Use --resume <sessionId> to maintain conversation history per tab
|
|
153
|
+
// CRITICAL FIX: Using claudeSessionId ensures each tab resumes its own Claude session
|
|
154
|
+
// Previously used --continue which resumed the most recent global session, causing cross-tab contamination
|
|
155
|
+
const runner = new HeadlessRunner({
|
|
156
|
+
workingDir: this.options.workingDir,
|
|
157
|
+
tokenBudgetThreshold: this.options.tokenBudgetThreshold,
|
|
158
|
+
maxSessions: this.options.maxSessions,
|
|
159
|
+
verbose: this.options.verbose,
|
|
160
|
+
noColor: this.options.noColor,
|
|
161
|
+
improvisationMode: true,
|
|
162
|
+
movementNumber: sequenceNumber,
|
|
163
|
+
continueSession: !this.isFirstPrompt, // Used as fallback only if claudeSessionId is missing
|
|
164
|
+
claudeSessionId: this.claudeSessionId, // Resume specific session for tab isolation
|
|
165
|
+
outputCallback: (text) => {
|
|
166
|
+
this.queueOutput(text);
|
|
167
|
+
this.flushOutputQueue();
|
|
168
|
+
},
|
|
169
|
+
thinkingCallback: (text) => {
|
|
170
|
+
this.emit('onThinking', text);
|
|
171
|
+
this.flushOutputQueue();
|
|
172
|
+
},
|
|
173
|
+
toolUseCallback: (event) => {
|
|
174
|
+
this.emit('onToolUse', event);
|
|
175
|
+
this.flushOutputQueue();
|
|
176
|
+
},
|
|
177
|
+
directPrompt: promptWithAttachments,
|
|
178
|
+
// Pass image attachments for multimodal handling via stream-json
|
|
179
|
+
imageAttachments: attachments?.filter(a => a.isImage),
|
|
180
|
+
// Inject historical context on first prompt of a resumed session
|
|
181
|
+
// This serves as both the primary context mechanism (no claudeSessionId)
|
|
182
|
+
// and a fallback if claudeSessionId is stale (client restarted since original session)
|
|
183
|
+
promptContext: (this.isResumedSession && this.isFirstPrompt)
|
|
184
|
+
? { accumulatedKnowledge: this.buildHistoricalContext(), filesModified: [] }
|
|
185
|
+
: undefined
|
|
186
|
+
});
|
|
187
|
+
this.currentRunner = runner;
|
|
188
|
+
const result = await runner.run();
|
|
189
|
+
this.currentRunner = null;
|
|
190
|
+
// Capture Claude session ID for future prompts in this tab
|
|
191
|
+
// This is critical for tab isolation - each tab maintains its own Claude session
|
|
192
|
+
if (result.claudeSessionId) {
|
|
193
|
+
this.claudeSessionId = result.claudeSessionId;
|
|
194
|
+
this.history.claudeSessionId = result.claudeSessionId;
|
|
195
|
+
}
|
|
196
|
+
// Mark that we've executed at least one prompt
|
|
197
|
+
this.isFirstPrompt = false;
|
|
198
|
+
// Create movement record with accumulated output for persistence
|
|
199
|
+
const movement = {
|
|
200
|
+
id: `prompt-${sequenceNumber}`,
|
|
201
|
+
sequenceNumber,
|
|
202
|
+
userPrompt,
|
|
203
|
+
timestamp: new Date().toISOString(),
|
|
204
|
+
tokensUsed: result.totalTokens,
|
|
205
|
+
summary: '', // No summary needed - Claude session maintains context
|
|
206
|
+
filesModified: [],
|
|
207
|
+
// Persist accumulated output for history replay
|
|
208
|
+
assistantResponse: result.assistantResponse,
|
|
209
|
+
thinkingOutput: result.thinkingOutput,
|
|
210
|
+
toolUseHistory: result.toolUseHistory?.map(t => ({
|
|
211
|
+
toolName: t.toolName,
|
|
212
|
+
toolId: t.toolId,
|
|
213
|
+
toolInput: t.toolInput,
|
|
214
|
+
result: t.result,
|
|
215
|
+
isError: t.isError,
|
|
216
|
+
duration: t.duration
|
|
217
|
+
})),
|
|
218
|
+
errorOutput: result.error
|
|
219
|
+
};
|
|
220
|
+
// Handle file conflicts if any
|
|
221
|
+
if (result.conflicts && result.conflicts.length > 0) {
|
|
222
|
+
this.queueOutput(`\n⚠ File conflicts detected: ${result.conflicts.length}`);
|
|
223
|
+
result.conflicts.forEach(c => {
|
|
224
|
+
this.queueOutput(` - ${c.filePath} (modified by: ${c.modifiedBy.join(', ')})`);
|
|
225
|
+
if (c.backupPath) {
|
|
226
|
+
this.queueOutput(` Backup created: ${c.backupPath}`);
|
|
227
|
+
}
|
|
228
|
+
});
|
|
229
|
+
this.flushOutputQueue();
|
|
230
|
+
}
|
|
231
|
+
this.history.movements.push(movement);
|
|
232
|
+
this.history.totalTokens += movement.tokensUsed;
|
|
233
|
+
// Save history
|
|
234
|
+
this.saveHistory();
|
|
235
|
+
// Completion message is now handled by the client-side movementComplete event handler
|
|
236
|
+
// This prevents duplicate completion messages (one white, one green)
|
|
237
|
+
// this.queueOutput(`\n✓ Complete (tokens: ${result.totalTokens.toLocaleString()})\n`);
|
|
238
|
+
// this.flushOutputQueue();
|
|
239
|
+
this.emit('onMovementComplete', movement);
|
|
240
|
+
this.emit('onSessionUpdate', this.getHistory());
|
|
241
|
+
return movement;
|
|
242
|
+
}
|
|
243
|
+
catch (error) {
|
|
244
|
+
this.currentRunner = null;
|
|
245
|
+
this.emit('onMovementError', error);
|
|
246
|
+
this.queueOutput(`\n❌ Error: ${error.message}\n`);
|
|
247
|
+
this.flushOutputQueue();
|
|
248
|
+
throw error;
|
|
249
|
+
}
|
|
250
|
+
finally {
|
|
251
|
+
// Ensure final flush
|
|
252
|
+
this.flushOutputQueue();
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Build historical context for resuming a session.
|
|
257
|
+
* This creates a summary of the previous conversation that will be injected
|
|
258
|
+
* into the first prompt of a resumed session.
|
|
259
|
+
*/
|
|
260
|
+
buildHistoricalContext() {
|
|
261
|
+
if (this.history.movements.length === 0) {
|
|
262
|
+
return '';
|
|
263
|
+
}
|
|
264
|
+
const contextParts = [
|
|
265
|
+
'--- CONVERSATION HISTORY (for context, do not repeat these responses) ---',
|
|
266
|
+
''
|
|
267
|
+
];
|
|
268
|
+
// Include each movement as context
|
|
269
|
+
for (const movement of this.history.movements) {
|
|
270
|
+
contextParts.push(`[User Prompt ${movement.sequenceNumber}]:`);
|
|
271
|
+
contextParts.push(movement.userPrompt);
|
|
272
|
+
contextParts.push('');
|
|
273
|
+
if (movement.assistantResponse) {
|
|
274
|
+
contextParts.push(`[Your Response ${movement.sequenceNumber}]:`);
|
|
275
|
+
// Truncate very long responses to save tokens
|
|
276
|
+
const response = movement.assistantResponse.length > 2000
|
|
277
|
+
? `${movement.assistantResponse.slice(0, 2000)}\n... (response truncated for context)`
|
|
278
|
+
: movement.assistantResponse;
|
|
279
|
+
contextParts.push(response);
|
|
280
|
+
contextParts.push('');
|
|
281
|
+
}
|
|
282
|
+
if (movement.toolUseHistory && movement.toolUseHistory.length > 0) {
|
|
283
|
+
contextParts.push(`[Tools Used in Prompt ${movement.sequenceNumber}]:`);
|
|
284
|
+
for (const tool of movement.toolUseHistory) {
|
|
285
|
+
contextParts.push(`- ${tool.toolName}`);
|
|
286
|
+
}
|
|
287
|
+
contextParts.push('');
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
contextParts.push('--- END OF CONVERSATION HISTORY ---');
|
|
291
|
+
contextParts.push('');
|
|
292
|
+
contextParts.push('Continue the conversation from where we left off. The user is now asking:');
|
|
293
|
+
contextParts.push('');
|
|
294
|
+
return contextParts.join('\n');
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* Load history from disk
|
|
298
|
+
*/
|
|
299
|
+
loadHistory() {
|
|
300
|
+
if (existsSync(this.historyPath)) {
|
|
301
|
+
try {
|
|
302
|
+
const data = readFileSync(this.historyPath, 'utf-8');
|
|
303
|
+
return JSON.parse(data);
|
|
304
|
+
}
|
|
305
|
+
catch (error) {
|
|
306
|
+
console.error('Failed to load history:', error);
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
return {
|
|
310
|
+
sessionId: this.sessionId,
|
|
311
|
+
startedAt: new Date().toISOString(),
|
|
312
|
+
lastActivityAt: new Date().toISOString(),
|
|
313
|
+
totalTokens: 0,
|
|
314
|
+
movements: []
|
|
315
|
+
};
|
|
316
|
+
}
|
|
317
|
+
/**
|
|
318
|
+
* Save history to disk
|
|
319
|
+
*/
|
|
320
|
+
saveHistory() {
|
|
321
|
+
this.history.lastActivityAt = new Date().toISOString();
|
|
322
|
+
writeFileSync(this.historyPath, JSON.stringify(this.history, null, 2));
|
|
323
|
+
}
|
|
324
|
+
/**
|
|
325
|
+
* Get session history
|
|
326
|
+
*/
|
|
327
|
+
getHistory() {
|
|
328
|
+
return this.history;
|
|
329
|
+
}
|
|
330
|
+
/**
|
|
331
|
+
* Cancel current execution
|
|
332
|
+
*/
|
|
333
|
+
cancel() {
|
|
334
|
+
if (this.currentRunner) {
|
|
335
|
+
this.currentRunner.cleanup();
|
|
336
|
+
this.currentRunner = null;
|
|
337
|
+
this.queueOutput('\n⚠ Execution cancelled\n');
|
|
338
|
+
this.flushOutputQueue();
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
/**
|
|
342
|
+
* Cleanup queue processor on shutdown
|
|
343
|
+
*/
|
|
344
|
+
destroy() {
|
|
345
|
+
if (this.queueTimer) {
|
|
346
|
+
clearInterval(this.queueTimer);
|
|
347
|
+
this.queueTimer = null;
|
|
348
|
+
}
|
|
349
|
+
this.flushOutputQueue(); // Final flush
|
|
350
|
+
}
|
|
351
|
+
/**
|
|
352
|
+
* Clear session history and reset to fresh Claude session
|
|
353
|
+
* This resets the isFirstPrompt flag and claudeSessionId so the next prompt starts a new session
|
|
354
|
+
*/
|
|
355
|
+
clearHistory() {
|
|
356
|
+
this.history.movements = [];
|
|
357
|
+
this.history.totalTokens = 0;
|
|
358
|
+
this.accumulatedKnowledge = '';
|
|
359
|
+
this.isFirstPrompt = true; // Reset to start fresh Claude session
|
|
360
|
+
this.claudeSessionId = undefined; // Clear Claude session ID to start new conversation
|
|
361
|
+
this.saveHistory();
|
|
362
|
+
this.emit('onSessionUpdate', this.getHistory());
|
|
363
|
+
}
|
|
364
|
+
/**
|
|
365
|
+
* Request user approval for a plan
|
|
366
|
+
* Returns a promise that resolves when the user approves/rejects
|
|
367
|
+
*/
|
|
368
|
+
async requestApproval(plan) {
|
|
369
|
+
return new Promise((resolve) => {
|
|
370
|
+
this.pendingApproval = { plan, resolve };
|
|
371
|
+
this.emit('onApprovalRequired', plan);
|
|
372
|
+
});
|
|
373
|
+
}
|
|
374
|
+
/**
|
|
375
|
+
* Respond to approval request
|
|
376
|
+
*/
|
|
377
|
+
respondToApproval(approved) {
|
|
378
|
+
if (this.pendingApproval) {
|
|
379
|
+
this.pendingApproval.resolve(approved);
|
|
380
|
+
this.pendingApproval = undefined;
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
/**
|
|
384
|
+
* Get session metadata
|
|
385
|
+
*/
|
|
386
|
+
getSessionInfo() {
|
|
387
|
+
return {
|
|
388
|
+
sessionId: this.sessionId,
|
|
389
|
+
startTime: this.history.startedAt,
|
|
390
|
+
workingDir: this.options.workingDir,
|
|
391
|
+
totalTokens: this.history.totalTokens,
|
|
392
|
+
tokenBudgetThreshold: this.options.tokenBudgetThreshold,
|
|
393
|
+
movementCount: this.history.movements.length
|
|
394
|
+
};
|
|
395
|
+
}
|
|
396
|
+
/**
|
|
397
|
+
* Start a new session with fresh context
|
|
398
|
+
* Creates a completely new session manager with isFirstPrompt=true and no claudeSessionId,
|
|
399
|
+
* ensuring the next prompt starts a fresh Claude conversation (proper tab isolation)
|
|
400
|
+
*/
|
|
401
|
+
startNewSession() {
|
|
402
|
+
// Save current session
|
|
403
|
+
this.saveHistory();
|
|
404
|
+
// Create new session manager - the new instance has:
|
|
405
|
+
// - isFirstPrompt=true by default
|
|
406
|
+
// - claudeSessionId=undefined by default
|
|
407
|
+
// This means the first prompt will start a completely fresh Claude conversation
|
|
408
|
+
const newSession = new ImprovisationSessionManager({
|
|
409
|
+
...this.options,
|
|
410
|
+
sessionId: `improv-${Date.now()}`
|
|
411
|
+
});
|
|
412
|
+
return newSession;
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
//# sourceMappingURL=improvisation-session-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"improvisation-session-manager.js","sourceRoot":"","sources":["../../../server/cli/improvisation-session-manager.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,gEAAgE;AAEhE;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAqDrD,MAAM,OAAO,2BAA4B,SAAQ,YAAY;IACnD,SAAS,CAAS;IAClB,YAAY,CAAS;IACrB,WAAW,CAAS;IACpB,OAAO,CAAiB;IACxB,aAAa,GAA0B,IAAI,CAAC;IAC5C,OAAO,CAAuB;IAC9B,eAAe,CAGrB;IACM,WAAW,GAA+C,EAAE,CAAC;IAC7D,UAAU,GAA0B,IAAI,CAAC;IACzC,aAAa,GAAY,IAAI,CAAC,CAAC,yDAAyD;IACxF,eAAe,CAAqB,CAAC,0CAA0C;IAC/E,gBAAgB,GAAY,KAAK,CAAC,CAAC,gDAAgD;IAC3F,oBAAoB,GAAW,EAAE,CAAC;IAElC;;;;OAIG;IACH,MAAM,CAAC,iBAAiB,CAAC,UAAkB,EAAE,mBAA2B;QACtE,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;QAE7D,yFAAyF;QACzF,MAAM,SAAS,GAAG,mBAAmB,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QAC7D,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,EAAE,WAAW,SAAS,OAAO,CAAC,CAAC;QAEpE,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,iCAAiC,mBAAmB,EAAE,CAAC,CAAC;QAC1E,CAAC;QAED,8BAA8B;QAC9B,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAmB,CAAC;QAErF,wDAAwD;QACxD,4DAA4D;QAC5D,MAAM,OAAO,GAAG,IAAI,2BAA2B,CAAC;YAC9C,UAAU;YACV,SAAS,EAAE,WAAW,CAAC,SAAS;SACjC,CAAC,CAAC;QAEH,2BAA2B;QAC3B,OAAO,CAAC,OAAO,GAAG,WAAW,CAAC;QAE9B,wDAAwD;QACxD,OAAO,CAAC,oBAAoB,GAAG,WAAW,CAAC,SAAS;aACjD,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;aACtB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;aACnB,IAAI,CAAC,MAAM,CAAC,CAAC;QAEhB,oFAAoF;QACpF,yFAAyF;QACzF,qEAAqE;QACrE,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAChC,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC,gEAAgE;QAC9F,IAAI,WAAW,CAAC,eAAe,EAAE,CAAC;YAChC,OAAO,CAAC,eAAe,GAAG,WAAW,CAAC,eAAe,CAAC;QACxD,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,YAAY,UAAyC,EAAE;QACrD,KAAK,EAAE,CAAC;QAER,IAAI,CAAC,OAAO,GAAG;YACb,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,EAAE;YAC/C,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,UAAU,IAAI,CAAC,GAAG,EAAE,EAAE;YACtD,oBAAoB,EAAE,OAAO,CAAC,oBAAoB,IAAI,MAAM;YAC5D,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,EAAE;YACtC,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,KAAK;YACjC,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,KAAK;SAClC,CAAC;QAEF,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;QACxC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;QACzE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,WAAW,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC;QAEpG,oCAAoC;QACpC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;YACnC,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACpD,CAAC;QAED,6BAA6B;QAC7B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAElC,+BAA+B;QAC/B,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC7B,CAAC;IAED;;OAEG;IACK,mBAAmB;QACzB,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE;YACjC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC1B,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,mDAAmD;IAC7D,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,IAAY;QAC9B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACzD,CAAC;IAED;;OAEG;IACK,gBAAgB;QACtB,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;YACtC,IAAI,IAAI,EAAE,CAAC;gBACT,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,0BAA0B,CAAC,UAAkB,EAAE,WAA8B;QACnF,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7C,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,yCAAyC;QACzC,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QACtD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,4BAA4B;QAC5B,MAAM,UAAU,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YACtC,OAAO,IAAI,IAAI,CAAC,QAAQ,aAAa,IAAI,CAAC,OAAO,UAAU,CAAC;QAC9D,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEhB,sCAAsC;QACtC,OAAO,GAAG,UAAU,OAAO,UAAU,EAAE,CAAC;IAC1C,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,aAAa,CAAC,UAAkB,EAAE,WAA8B;QACpE,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE9B,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,UAAU,CAAC,CAAC;QAE5E,IAAI,CAAC;YACH,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;YAEzD,oGAAoG;YACpG,kDAAkD;YAClD,2BAA2B;YAE3B,4EAA4E;YAC5E,yEAAyE;YACzE,iEAAiE;YACjE,iFAAiF;YAGjF,oDAAoD;YACpD,MAAM,qBAAqB,GAAG,IAAI,CAAC,0BAA0B,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;YAEvF,wFAAwF;YACxF,sFAAsF;YACtF,2GAA2G;YAC3G,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC;gBAChC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU;gBACnC,oBAAoB,EAAE,IAAI,CAAC,OAAO,CAAC,oBAAoB;gBACvD,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW;gBACrC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO;gBAC7B,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO;gBAC7B,iBAAiB,EAAE,IAAI;gBACvB,cAAc,EAAE,cAAc;gBAC9B,eAAe,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,sDAAsD;gBAC5F,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,4CAA4C;gBACnF,cAAc,EAAE,CAAC,IAAY,EAAE,EAAE;oBAC/B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;oBACvB,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBAC1B,CAAC;gBACD,gBAAgB,EAAE,CAAC,IAAY,EAAE,EAAE;oBACjC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;oBAC9B,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBAC1B,CAAC;gBACD,eAAe,EAAE,CAAC,KAAK,EAAE,EAAE;oBACzB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;oBAC9B,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBAC1B,CAAC;gBACD,YAAY,EAAE,qBAAqB;gBACnC,iEAAiE;gBACjE,gBAAgB,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;gBACrD,iEAAiE;gBACjE,yEAAyE;gBACzE,uFAAuF;gBACvF,aAAa,EAAE,CAAC,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,aAAa,CAAC;oBAC1D,CAAC,CAAC,EAAE,oBAAoB,EAAE,IAAI,CAAC,sBAAsB,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE;oBAC5E,CAAC,CAAC,SAAS;aACd,CAAC,CAAC;YAEH,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC;YAE5B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,EAAE,CAAC;YAElC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAE1B,2DAA2D;YAC3D,iFAAiF;YACjF,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;gBAC3B,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;gBAC9C,IAAI,CAAC,OAAO,CAAC,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;YACxD,CAAC;YAED,+CAA+C;YAC/C,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;YAE3B,iEAAiE;YACjE,MAAM,QAAQ,GAAmB;gBAC/B,EAAE,EAAE,UAAU,cAAc,EAAE;gBAC9B,cAAc;gBACd,UAAU;gBACV,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACnC,UAAU,EAAE,MAAM,CAAC,WAAW;gBAC9B,OAAO,EAAE,EAAE,EAAE,uDAAuD;gBACpE,aAAa,EAAE,EAAE;gBACjB,gDAAgD;gBAChD,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;gBAC3C,cAAc,EAAE,MAAM,CAAC,cAAc;gBACrC,cAAc,EAAE,MAAM,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBAC/C,QAAQ,EAAE,CAAC,CAAC,QAAQ;oBACpB,MAAM,EAAE,CAAC,CAAC,MAAM;oBAChB,SAAS,EAAE,CAAC,CAAC,SAAS;oBACtB,MAAM,EAAE,CAAC,CAAC,MAAM;oBAChB,OAAO,EAAE,CAAC,CAAC,OAAO;oBAClB,QAAQ,EAAE,CAAC,CAAC,QAAQ;iBACrB,CAAC,CAAC;gBACH,WAAW,EAAE,MAAM,CAAC,KAAK;aAC1B,CAAC;YAEF,+BAA+B;YAC/B,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpD,IAAI,CAAC,WAAW,CAAC,gCAAgC,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC5E,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;oBAC3B,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,QAAQ,kBAAkB,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAChF,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC;wBACjB,IAAI,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;oBAC1D,CAAC;gBACH,CAAC,CAAC,CAAC;gBACH,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,CAAC;YAED,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACtC,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,QAAQ,CAAC,UAAU,CAAC;YAEhD,eAAe;YACf,IAAI,CAAC,WAAW,EAAE,CAAC;YAEnB,sFAAsF;YACtF,qEAAqE;YACrE,uFAAuF;YACvF,2BAA2B;YAE3B,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,QAAQ,CAAC,CAAC;YAC1C,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;YAEhD,OAAO,QAAQ,CAAC;QAElB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAC1B,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;YACpC,IAAI,CAAC,WAAW,CAAC,cAAc,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;YAClD,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,MAAM,KAAK,CAAC;QACd,CAAC;gBAAS,CAAC;YACT,qBAAqB;YACrB,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC1B,CAAC;IACH,CAAC;IAED;;;;OAIG;IACK,sBAAsB;QAC5B,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxC,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,YAAY,GAAa;YAC7B,2EAA2E;YAC3E,EAAE;SACH,CAAC;QAEF,mCAAmC;QACnC,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YAC9C,YAAY,CAAC,IAAI,CAAC,gBAAgB,QAAQ,CAAC,cAAc,IAAI,CAAC,CAAC;YAC/D,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YACvC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAEtB,IAAI,QAAQ,CAAC,iBAAiB,EAAE,CAAC;gBAC/B,YAAY,CAAC,IAAI,CAAC,kBAAkB,QAAQ,CAAC,cAAc,IAAI,CAAC,CAAC;gBACjE,8CAA8C;gBAC9C,MAAM,QAAQ,GAAG,QAAQ,CAAC,iBAAiB,CAAC,MAAM,GAAG,IAAI;oBACvD,CAAC,CAAC,GAAG,QAAQ,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,wCAAwC;oBACtF,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC;gBAC/B,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC5B,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACxB,CAAC;YAED,IAAI,QAAQ,CAAC,cAAc,IAAI,QAAQ,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAClE,YAAY,CAAC,IAAI,CAAC,yBAAyB,QAAQ,CAAC,cAAc,IAAI,CAAC,CAAC;gBACxE,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,cAAc,EAAE,CAAC;oBAC3C,YAAY,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAC1C,CAAC;gBACD,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;QAED,YAAY,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;QACzD,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACtB,YAAY,CAAC,IAAI,CAAC,2EAA2E,CAAC,CAAC;QAC/F,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEtB,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED;;OAEG;IACK,WAAW;QACjB,IAAI,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YACjC,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;gBACrD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC1B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;QAED,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,cAAc,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACxC,WAAW,EAAE,CAAC;YACd,SAAS,EAAE,EAAE;SACd,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,WAAW;QACjB,IAAI,CAAC,OAAO,CAAC,cAAc,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACvD,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACzE,CAAC;IAED;;OAEG;IACH,UAAU;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;YAC7B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAC1B,IAAI,CAAC,WAAW,CAAC,2BAA2B,CAAC,CAAC;YAC9C,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC1B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,OAAO;QACL,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC/B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACzB,CAAC;QACD,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,cAAc;IACzC,CAAC;IAED;;;OAGG;IACH,YAAY;QACV,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,CAAC,CAAC;QAC7B,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAC;QAC/B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC,sCAAsC;QACjE,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC,CAAC,oDAAoD;QACtF,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;IAClD,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,eAAe,CAAC,IAAS;QAC7B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,IAAI,CAAC,eAAe,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;YACzC,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAC,QAAiB;QACjC,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACvC,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;QACnC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS;YACjC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU;YACnC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW;YACrC,oBAAoB,EAAE,IAAI,CAAC,OAAO,CAAC,oBAAoB;YACvD,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM;SAC7C,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,eAAe;QACb,uBAAuB;QACvB,IAAI,CAAC,WAAW,EAAE,CAAC;QAEnB,qDAAqD;QACrD,kCAAkC;QAClC,yCAAyC;QACzC,gFAAgF;QAChF,MAAM,UAAU,GAAG,IAAI,2BAA2B,CAAC;YACjD,GAAG,IAAI,CAAC,OAAO;YACf,SAAS,EAAE,UAAU,IAAI,CAAC,GAAG,EAAE,EAAE;SAClC,CAAC,CAAC;QAEH,OAAO,UAAU,CAAC;IACpB,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../server/index.ts"],"names":[],"mappings":""}
|