@saccolabs/tars 1.35.1 → 1.37.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/channels/channel-manager.d.ts +5 -0
- package/dist/channels/channel-manager.js +7 -0
- package/dist/channels/channel-manager.js.map +1 -1
- package/dist/channels/tui/tui-channel.d.ts +98 -0
- package/dist/channels/tui/tui-channel.js +362 -0
- package/dist/channels/tui/tui-channel.js.map +1 -0
- package/dist/channels/tui/tui-renderer.d.ts +49 -0
- package/dist/channels/tui/tui-renderer.js +112 -0
- package/dist/channels/tui/tui-renderer.js.map +1 -0
- package/dist/cli/commands/chat.d.ts +9 -0
- package/dist/cli/commands/chat.js +51 -0
- package/dist/cli/commands/chat.js.map +1 -0
- package/dist/cli/index.d.ts +1 -1
- package/dist/cli/index.js +9 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/suppress-warnings.d.ts +1 -0
- package/dist/cli/suppress-warnings.js +9 -0
- package/dist/cli/suppress-warnings.js.map +1 -0
- package/dist/supervisor/bootstrap.d.ts +48 -0
- package/dist/supervisor/bootstrap.js +596 -0
- package/dist/supervisor/bootstrap.js.map +1 -0
- package/dist/supervisor/main.js +5 -529
- package/dist/supervisor/main.js.map +1 -1
- package/dist/supervisor/mcp-bridge.js +10 -1
- package/dist/supervisor/mcp-bridge.js.map +1 -1
- package/dist/supervisor/supervisor.js +3 -3
- package/dist/supervisor/supervisor.js.map +1 -1
- package/dist/supervisor/tars-engine.js +1 -1
- package/dist/supervisor/tars-engine.js.map +1 -1
- package/dist/utils/logger.d.ts +5 -0
- package/dist/utils/logger.js +23 -0
- package/dist/utils/logger.js.map +1 -1
- package/package.json +2 -1
package/dist/supervisor/main.js
CHANGED
|
@@ -1,537 +1,13 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { TarsEngine } from './tars-engine.js';
|
|
3
|
-
import { SessionManager } from './session-manager.js';
|
|
4
|
-
import { GetQuotaTool } from '../tools/get-quota.js';
|
|
5
|
-
import { Supervisor } from './supervisor.js';
|
|
6
|
-
import { HeartbeatService } from './heartbeat-service.js';
|
|
7
|
-
import { CronService } from './cron-service.js';
|
|
8
|
-
import { DashboardService } from './dashboard-service.js';
|
|
9
|
-
import { ChannelManager } from '../channels/channel-manager.js';
|
|
1
|
+
import { bootstrap, wireMessageRouting } from './bootstrap.js';
|
|
10
2
|
import logger from '../utils/logger.js';
|
|
11
|
-
import fs from 'fs';
|
|
12
|
-
import path from 'path';
|
|
13
|
-
import { execSync } from 'child_process';
|
|
14
|
-
import { fileURLToPath } from 'url';
|
|
15
|
-
import { BrainAuditor } from '../utils/brain-audit.js';
|
|
16
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
17
|
-
const __dirname = path.dirname(__filename);
|
|
18
3
|
/**
|
|
19
|
-
*
|
|
20
|
-
* This ensures the agent uses Tars' custom persona instead of the default coding-centric prompt.
|
|
21
|
-
*/
|
|
22
|
-
function installSystemPrompt(config) {
|
|
23
|
-
// Walk up from dist/supervisor/ or src/supervisor/ to find prompts/system.md
|
|
24
|
-
let searchDir = __dirname;
|
|
25
|
-
let srcPrompt = '';
|
|
26
|
-
// Try to find the prompt relative to the package root
|
|
27
|
-
for (let i = 0; i < 5; i++) {
|
|
28
|
-
const candidate = path.join(searchDir, 'prompts', 'system.md');
|
|
29
|
-
const srcCandidate = path.join(searchDir, 'src', 'prompts', 'system.md');
|
|
30
|
-
if (fs.existsSync(candidate)) {
|
|
31
|
-
srcPrompt = candidate;
|
|
32
|
-
break;
|
|
33
|
-
}
|
|
34
|
-
else if (fs.existsSync(srcCandidate)) {
|
|
35
|
-
srcPrompt = srcCandidate;
|
|
36
|
-
break;
|
|
37
|
-
}
|
|
38
|
-
searchDir = path.dirname(searchDir);
|
|
39
|
-
}
|
|
40
|
-
if (!srcPrompt) {
|
|
41
|
-
logger.warn('⚠️ Could not locate system.md prompt file');
|
|
42
|
-
return;
|
|
43
|
-
}
|
|
44
|
-
// Ensure target directory exists
|
|
45
|
-
const targetDir = path.dirname(config.systemPromptPath);
|
|
46
|
-
fs.mkdirSync(targetDir, { recursive: true });
|
|
47
|
-
// Read the template and process placeholders
|
|
48
|
-
let promptContent = fs.readFileSync(srcPrompt, 'utf-8');
|
|
49
|
-
promptContent = promptContent.replace(/{{ASSISTANT_NAME}}/g, config.assistantName);
|
|
50
|
-
promptContent = promptContent.replace(/{{INSTANCE_NAME}}/g, config.instanceName);
|
|
51
|
-
promptContent = promptContent.replace(/{{PROVIDER}}/g, config.piProvider);
|
|
52
|
-
promptContent = promptContent.replace(/{{MODEL_NAME}}/g, config.piModel);
|
|
53
|
-
promptContent = promptContent.replace(/{{CONTEXT_WINDOW}}/g, config.contextWindowTokens.toLocaleString());
|
|
54
|
-
// Always overwrite to ensure latest prompt is deployed
|
|
55
|
-
fs.writeFileSync(config.systemPromptPath, promptContent);
|
|
56
|
-
logger.info(`📝 System prompt installed: ${config.systemPromptPath}`);
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* Install and sync built-in skills into the Tars runtime directory.
|
|
60
|
-
* Safely updates built-in skills while preserving user-created ones.
|
|
61
|
-
*/
|
|
62
|
-
function installSkills(config) {
|
|
63
|
-
// 1. Locate context/skills/ in the repo
|
|
64
|
-
let searchDir = __dirname;
|
|
65
|
-
let skillsSrc = '';
|
|
66
|
-
for (let i = 0; i < 5; i++) {
|
|
67
|
-
const candidate = path.join(searchDir, 'context', 'skills');
|
|
68
|
-
const srcCandidate = path.join(searchDir, '..', 'context', 'skills'); // If in dist/supervisor/
|
|
69
|
-
if (fs.existsSync(candidate)) {
|
|
70
|
-
skillsSrc = candidate;
|
|
71
|
-
break;
|
|
72
|
-
}
|
|
73
|
-
else if (fs.existsSync(srcCandidate)) {
|
|
74
|
-
skillsSrc = srcCandidate;
|
|
75
|
-
break;
|
|
76
|
-
}
|
|
77
|
-
// Try finding context in root if running from src
|
|
78
|
-
const rootCandidate = path.join(searchDir, '..', '..', 'context', 'skills');
|
|
79
|
-
if (fs.existsSync(rootCandidate)) {
|
|
80
|
-
skillsSrc = rootCandidate;
|
|
81
|
-
break;
|
|
82
|
-
}
|
|
83
|
-
searchDir = path.dirname(searchDir);
|
|
84
|
-
}
|
|
85
|
-
if (!skillsSrc) {
|
|
86
|
-
logger.warn('⚠️ Could not locate built-in skills directory');
|
|
87
|
-
return;
|
|
88
|
-
}
|
|
89
|
-
// 2. Define target directory (~/.tars/skills)
|
|
90
|
-
const skillsDest = path.join(config.homeDir, 'skills');
|
|
91
|
-
try {
|
|
92
|
-
if (!fs.existsSync(skillsDest)) {
|
|
93
|
-
fs.mkdirSync(skillsDest, { recursive: true });
|
|
94
|
-
}
|
|
95
|
-
// 3. Selective Sync: Copy each built-in skill individually
|
|
96
|
-
const builtInSkills = fs.readdirSync(skillsSrc);
|
|
97
|
-
for (const skillName of builtInSkills) {
|
|
98
|
-
const srcSkillPath = path.join(skillsSrc, skillName);
|
|
99
|
-
const destSkillPath = path.join(skillsDest, skillName);
|
|
100
|
-
// Only copy directories
|
|
101
|
-
if (!fs.statSync(srcSkillPath).isDirectory())
|
|
102
|
-
continue;
|
|
103
|
-
// Remove existing destination (to ensure clean update - e.g. deleting old files)
|
|
104
|
-
if (fs.existsSync(destSkillPath)) {
|
|
105
|
-
fs.rmSync(destSkillPath, { recursive: true, force: true });
|
|
106
|
-
}
|
|
107
|
-
// Copy fresh from repo
|
|
108
|
-
fs.cpSync(srcSkillPath, destSkillPath, { recursive: true });
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
catch (error) {
|
|
112
|
-
logger.error(`❌ Failed to sync skills: ${error}`);
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
/**
|
|
116
|
-
* Automatically install/link extensions and enable them.
|
|
117
|
-
*/
|
|
118
|
-
function installExtensions(config) {
|
|
119
|
-
const repoExtensionsDir = path.join(__dirname, '..', '..', 'extensions');
|
|
120
|
-
const targetExtensionsDir = path.join(config.homeDir, 'extensions');
|
|
121
|
-
const enablementFile = path.join(targetExtensionsDir, 'extension-enablement.json');
|
|
122
|
-
if (!fs.existsSync(repoExtensionsDir)) {
|
|
123
|
-
logger.warn('⚠️ Could not locate extensions directory');
|
|
124
|
-
return;
|
|
125
|
-
}
|
|
126
|
-
if (!fs.existsSync(targetExtensionsDir)) {
|
|
127
|
-
fs.mkdirSync(targetExtensionsDir, { recursive: true });
|
|
128
|
-
}
|
|
129
|
-
// Load Enablement
|
|
130
|
-
let enablement = {};
|
|
131
|
-
if (fs.existsSync(enablementFile)) {
|
|
132
|
-
try {
|
|
133
|
-
enablement = JSON.parse(fs.readFileSync(enablementFile, 'utf-8'));
|
|
134
|
-
}
|
|
135
|
-
catch (e) {
|
|
136
|
-
logger.warn('⚠️ Could not parse extension-enablement.json, starting fresh');
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
const builtInExtensions = fs.readdirSync(repoExtensionsDir);
|
|
140
|
-
for (const extName of builtInExtensions) {
|
|
141
|
-
const srcPath = path.resolve(repoExtensionsDir, extName);
|
|
142
|
-
if (!fs.statSync(srcPath).isDirectory())
|
|
143
|
-
continue;
|
|
144
|
-
const finalExtName = extName === 'tasks' ? 'tars-tasks' : extName === 'memory' ? 'tars-memory' : extName;
|
|
145
|
-
const finalDestPath = path.join(targetExtensionsDir, finalExtName);
|
|
146
|
-
// Check if symlink exists and is valid
|
|
147
|
-
let needsLink = true;
|
|
148
|
-
try {
|
|
149
|
-
if (fs.existsSync(finalDestPath)) {
|
|
150
|
-
const stats = fs.lstatSync(finalDestPath);
|
|
151
|
-
if (stats.isSymbolicLink()) {
|
|
152
|
-
const realPath = fs.realpathSync(finalDestPath);
|
|
153
|
-
if (realPath === srcPath) {
|
|
154
|
-
needsLink = false;
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
catch (e) { }
|
|
160
|
-
if (needsLink) {
|
|
161
|
-
try {
|
|
162
|
-
if (fs.existsSync(finalDestPath) ||
|
|
163
|
-
(fs.existsSync(finalDestPath) && fs.lstatSync(finalDestPath).isSymbolicLink())) {
|
|
164
|
-
fs.rmSync(finalDestPath, { recursive: true, force: true });
|
|
165
|
-
}
|
|
166
|
-
fs.symlinkSync(srcPath, finalDestPath);
|
|
167
|
-
logger.info(`🔌 Integrated extension: ${finalExtName}`);
|
|
168
|
-
}
|
|
169
|
-
catch (error) {
|
|
170
|
-
logger.error(`❌ Failed to integrate extension ${finalExtName}: ${error}`);
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
// Hydration check
|
|
174
|
-
const nmPath = path.join(finalDestPath, 'node_modules');
|
|
175
|
-
if (!fs.existsSync(nmPath)) {
|
|
176
|
-
logger.info(`💧 Hydrating extension: ${finalExtName}...`);
|
|
177
|
-
try {
|
|
178
|
-
execSync('npm install --production', {
|
|
179
|
-
cwd: finalDestPath,
|
|
180
|
-
stdio: 'pipe'
|
|
181
|
-
});
|
|
182
|
-
const pkgPath = path.join(finalDestPath, 'package.json');
|
|
183
|
-
if (fs.existsSync(pkgPath)) {
|
|
184
|
-
const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));
|
|
185
|
-
if (pkg.scripts?.build) {
|
|
186
|
-
logger.info(`🏗️ Building extension: ${finalExtName}...`);
|
|
187
|
-
execSync('npm run build', {
|
|
188
|
-
cwd: finalDestPath,
|
|
189
|
-
stdio: 'pipe'
|
|
190
|
-
});
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
logger.info(`✅ Extension ${finalExtName} hydrated successfully.`);
|
|
194
|
-
}
|
|
195
|
-
catch (e) {
|
|
196
|
-
const stdout = e.stdout?.toString();
|
|
197
|
-
const stderr = e.stderr?.toString();
|
|
198
|
-
const out = stderr || stdout || e.message;
|
|
199
|
-
logger.error(`❌ Failed to hydrate extension ${finalExtName}: ${out}`);
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
// Update enablement
|
|
204
|
-
const allInstalledExtensions = fs.readdirSync(targetExtensionsDir);
|
|
205
|
-
for (const extName of allInstalledExtensions) {
|
|
206
|
-
const extPath = path.join(targetExtensionsDir, extName);
|
|
207
|
-
if (extName === 'extension-enablement.json')
|
|
208
|
-
continue;
|
|
209
|
-
if (!fs.statSync(extPath).isDirectory())
|
|
210
|
-
continue;
|
|
211
|
-
const realPath = fs.realpathSync(extPath);
|
|
212
|
-
if (!enablement[extName]) {
|
|
213
|
-
enablement[extName] = { overrides: [] };
|
|
214
|
-
}
|
|
215
|
-
const overrides = new Set(enablement[extName].overrides || []);
|
|
216
|
-
overrides.add(path.join(config.homeDir, '*'));
|
|
217
|
-
overrides.add(path.join(realPath, '*'));
|
|
218
|
-
enablement[extName].overrides = Array.from(overrides);
|
|
219
|
-
}
|
|
220
|
-
fs.writeFileSync(enablementFile, JSON.stringify(enablement, null, 2));
|
|
221
|
-
}
|
|
222
|
-
/**
|
|
223
|
-
* Install default settings if none exist.
|
|
224
|
-
*/
|
|
225
|
-
function installDefaultSettings(config) {
|
|
226
|
-
const settingsTemplate = path.join(__dirname, '..', '..', 'context', 'config', 'settings.json-template');
|
|
227
|
-
const targetSettings = path.join(config.homeDir, 'settings.json');
|
|
228
|
-
if (fs.existsSync(targetSettings))
|
|
229
|
-
return;
|
|
230
|
-
if (fs.existsSync(settingsTemplate)) {
|
|
231
|
-
fs.mkdirSync(path.dirname(targetSettings), { recursive: true });
|
|
232
|
-
fs.copyFileSync(settingsTemplate, targetSettings);
|
|
233
|
-
logger.info(`⚙️ Default settings installed: ${targetSettings}`);
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
/**
|
|
237
|
-
* Ensure existing settings.json has required settings
|
|
238
|
-
*/
|
|
239
|
-
function patchSettings(config) {
|
|
240
|
-
const targetSettings = path.join(config.homeDir, 'settings.json');
|
|
241
|
-
if (!fs.existsSync(targetSettings))
|
|
242
|
-
return;
|
|
243
|
-
const settingsTemplate = path.join(__dirname, '..', '..', 'context', 'config', 'settings.json-template');
|
|
244
|
-
try {
|
|
245
|
-
const raw = fs.readFileSync(targetSettings, 'utf-8');
|
|
246
|
-
const settings = JSON.parse(raw);
|
|
247
|
-
let modified = false;
|
|
248
|
-
if (fs.existsSync(settingsTemplate)) {
|
|
249
|
-
const template = JSON.parse(fs.readFileSync(settingsTemplate, 'utf-8'));
|
|
250
|
-
const sections = ['experimental', 'agents', 'model', 'general'];
|
|
251
|
-
for (const section of sections) {
|
|
252
|
-
if (template[section] && !settings[section]) {
|
|
253
|
-
settings[section] = template[section];
|
|
254
|
-
modified = true;
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
if (modified) {
|
|
259
|
-
fs.writeFileSync(targetSettings, JSON.stringify(settings, null, 2));
|
|
260
|
-
logger.info('⚙️ Patched settings.json from template.');
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
catch (e) {
|
|
264
|
-
logger.warn(`⚠️ Failed to patch settings.json: ${e.message}`);
|
|
265
|
-
}
|
|
266
|
-
}
|
|
267
|
-
/**
|
|
268
|
-
* Install the built-in dashboard into the Tars home directory.
|
|
269
|
-
* Safely copies the dashboard and hydrates it (npm install + npm build).
|
|
270
|
-
*/
|
|
271
|
-
function installDashboard(config) {
|
|
272
|
-
const repoDashSrc = path.join(__dirname, '..', '..', 'dash');
|
|
273
|
-
const targetDashDir = path.join(config.homeDir, 'apps', 'dashboard');
|
|
274
|
-
if (!fs.existsSync(repoDashSrc)) {
|
|
275
|
-
logger.warn('⚠️ Could not locate stock dashboard directory');
|
|
276
|
-
return;
|
|
277
|
-
}
|
|
278
|
-
// 1. Initial Copy if missing
|
|
279
|
-
if (!fs.existsSync(targetDashDir)) {
|
|
280
|
-
try {
|
|
281
|
-
fs.mkdirSync(path.dirname(targetDashDir), { recursive: true });
|
|
282
|
-
fs.cpSync(repoDashSrc, targetDashDir, { recursive: true });
|
|
283
|
-
logger.info(`🚚 Installed stock dashboard to ${targetDashDir}`);
|
|
284
|
-
}
|
|
285
|
-
catch (error) {
|
|
286
|
-
logger.error(`❌ Failed to install stock dashboard: ${error}`);
|
|
287
|
-
return;
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
// 2. Setup Default .env if missing
|
|
291
|
-
const targetEnv = path.join(targetDashDir, '.env');
|
|
292
|
-
const templateEnv = path.join(targetDashDir, '.env.template');
|
|
293
|
-
if (!fs.existsSync(targetEnv) && fs.existsSync(templateEnv)) {
|
|
294
|
-
try {
|
|
295
|
-
fs.copyFileSync(templateEnv, targetEnv);
|
|
296
|
-
logger.info('⚙️ Created default dashboard .env');
|
|
297
|
-
}
|
|
298
|
-
catch (e) { }
|
|
299
|
-
}
|
|
300
|
-
// 3. Hydration (npm install + build) if node_modules or .next missing
|
|
301
|
-
const nmPath = path.join(targetDashDir, 'node_modules');
|
|
302
|
-
const nextPath = path.join(targetDashDir, '.next');
|
|
303
|
-
if (!fs.existsSync(nmPath) || !fs.existsSync(nextPath)) {
|
|
304
|
-
logger.info('💧 Hydrating dashboard (this may take a minute)...');
|
|
305
|
-
try {
|
|
306
|
-
// Unset NODE_ENV temporarily to ensure devDependencies (like tailwind) are installed for build
|
|
307
|
-
const env = { ...process.env };
|
|
308
|
-
delete env.NODE_ENV;
|
|
309
|
-
execSync('npm install', {
|
|
310
|
-
cwd: targetDashDir,
|
|
311
|
-
stdio: 'pipe',
|
|
312
|
-
env
|
|
313
|
-
});
|
|
314
|
-
logger.info('🏗️ Building dashboard...');
|
|
315
|
-
execSync('npm run build', {
|
|
316
|
-
cwd: targetDashDir,
|
|
317
|
-
stdio: 'pipe',
|
|
318
|
-
env
|
|
319
|
-
});
|
|
320
|
-
logger.info('✅ Dashboard hydrated successfully.');
|
|
321
|
-
}
|
|
322
|
-
catch (e) {
|
|
323
|
-
const out = e.stdout?.toString() || e.stderr?.toString() || e.message;
|
|
324
|
-
logger.error(`❌ Failed to hydrate dashboard: ${out}`);
|
|
325
|
-
}
|
|
326
|
-
}
|
|
327
|
-
}
|
|
328
|
-
/**
|
|
329
|
-
* Tars Main Entry Point
|
|
4
|
+
* Tars Main Entry Point (PM2 Background Mode)
|
|
330
5
|
*/
|
|
331
6
|
async function main() {
|
|
332
7
|
try {
|
|
333
|
-
|
|
334
|
-
//
|
|
335
|
-
|
|
336
|
-
const auditor = new BrainAuditor(config.homeDir);
|
|
337
|
-
await auditor.audit({ silent: true });
|
|
338
|
-
// 2. Install components
|
|
339
|
-
installSystemPrompt(config);
|
|
340
|
-
installSkills(config);
|
|
341
|
-
installExtensions(config);
|
|
342
|
-
installDashboard(config);
|
|
343
|
-
installDefaultSettings(config);
|
|
344
|
-
patchSettings(config);
|
|
345
|
-
// 3. Initialize Core Services
|
|
346
|
-
const tarsEngine = new TarsEngine(config);
|
|
347
|
-
const sessionManager = new SessionManager(config.sessionFilePath);
|
|
348
|
-
const supervisor = new Supervisor(tarsEngine, sessionManager);
|
|
349
|
-
// 4. Initialize Multi-Channel Interface
|
|
350
|
-
const channelManager = new ChannelManager();
|
|
351
|
-
// 5. Inject Interface into Engine
|
|
352
|
-
tarsEngine.setChannelManager(channelManager);
|
|
353
|
-
supervisor.setChannelManager(channelManager);
|
|
354
|
-
tarsEngine.setSessionManager(sessionManager);
|
|
355
|
-
await tarsEngine.initialize();
|
|
356
|
-
// 6. Connect Routing
|
|
357
|
-
channelManager.onMessage(async (message) => {
|
|
358
|
-
const rawPrompt = message.content.trim();
|
|
359
|
-
if (rawPrompt.startsWith('/')) {
|
|
360
|
-
const parts = rawPrompt.split(' ');
|
|
361
|
-
const command = parts[0].toLowerCase();
|
|
362
|
-
if (command === '/reset' || command === '/clear') {
|
|
363
|
-
try {
|
|
364
|
-
const stats = sessionManager.getStats();
|
|
365
|
-
if (stats) {
|
|
366
|
-
const chatFile = path.join(config.homeDir, 'chats', `${stats.sessionId}.json`);
|
|
367
|
-
if (fs.existsSync(chatFile)) {
|
|
368
|
-
await fs.promises.unlink(chatFile).catch(() => { });
|
|
369
|
-
}
|
|
370
|
-
}
|
|
371
|
-
await sessionManager.clear();
|
|
372
|
-
tarsEngine.resetSession();
|
|
373
|
-
await message.reply('✨ **Session Reset:** I have cleared the current session context and started a new, clean conversation.');
|
|
374
|
-
}
|
|
375
|
-
catch (e) {
|
|
376
|
-
await message.reply(`❌ **Error resetting session:** ${e.message}`);
|
|
377
|
-
}
|
|
378
|
-
return;
|
|
379
|
-
}
|
|
380
|
-
if (command === '/quota' || command === '/stats') {
|
|
381
|
-
const stats = sessionManager.getStats();
|
|
382
|
-
if (!stats) {
|
|
383
|
-
await message.reply('📊 **No active session stats found.**');
|
|
384
|
-
return;
|
|
385
|
-
}
|
|
386
|
-
const quotaTool = new GetQuotaTool(sessionManager, {
|
|
387
|
-
piProvider: config.piProvider,
|
|
388
|
-
contextWindowTokens: config.contextWindowTokens,
|
|
389
|
-
piModel: config.piModel,
|
|
390
|
-
piBaseUrl: config.piBaseUrl
|
|
391
|
-
});
|
|
392
|
-
const usageText = quotaTool.getLocalUsage();
|
|
393
|
-
await message.reply(usageText);
|
|
394
|
-
return;
|
|
395
|
-
}
|
|
396
|
-
if (command === '/help') {
|
|
397
|
-
const helpText = [
|
|
398
|
-
`🤖 **Tars Deterministic Commands**`,
|
|
399
|
-
`• \`/reset\` or \`/clear\` - Reset active session and start a new clean conversation.`,
|
|
400
|
-
`• \`/quota\` or \`/stats\` - View token consumption, active context size, and session statistics.`,
|
|
401
|
-
`• \`/help\` - Show this help menu.`
|
|
402
|
-
].join('\n');
|
|
403
|
-
await message.reply(helpText);
|
|
404
|
-
return;
|
|
405
|
-
}
|
|
406
|
-
}
|
|
407
|
-
let responseBuffer = '';
|
|
408
|
-
let replyCount = 0;
|
|
409
|
-
// --- Live status tracking for in-place message editing ---
|
|
410
|
-
let statusInitialized = false;
|
|
411
|
-
const formatSize = (chars) => {
|
|
412
|
-
if (chars < 1024)
|
|
413
|
-
return `${chars}B`;
|
|
414
|
-
if (chars < 1024 * 1024)
|
|
415
|
-
return `${(chars / 1024).toFixed(1)}KB`;
|
|
416
|
-
return `${(chars / (1024 * 1024)).toFixed(1)}MB`;
|
|
417
|
-
};
|
|
418
|
-
const formatStatusContent = (turnCount, recentTools, isMilestone) => {
|
|
419
|
-
const lines = [];
|
|
420
|
-
if (isMilestone) {
|
|
421
|
-
lines.push(`⚡ **Milestone ${turnCount}** — still going strong...`);
|
|
422
|
-
}
|
|
423
|
-
const executedCount = recentTools.filter((t) => t.status === 'completed').length;
|
|
424
|
-
lines.push(`⏳ **Working...** (Turn ${turnCount}, ${executedCount} tools executed)`);
|
|
425
|
-
// Show last ~5 tool calls (moving window)
|
|
426
|
-
const toolsToShow = recentTools.slice(-5);
|
|
427
|
-
if (toolsToShow.length > 0) {
|
|
428
|
-
lines.push('');
|
|
429
|
-
for (const tool of toolsToShow) {
|
|
430
|
-
if (tool.status === 'running') {
|
|
431
|
-
lines.push(`⚙️ **${tool.name}** — *Executing...*`);
|
|
432
|
-
}
|
|
433
|
-
else {
|
|
434
|
-
let preview = (tool.responsePreview || '')
|
|
435
|
-
.replace(/\s+/g, ' ')
|
|
436
|
-
.replace(/[`*#_\[\]]/g, '') // remove markdown characters
|
|
437
|
-
.trim();
|
|
438
|
-
if (preview.length > 80) {
|
|
439
|
-
preview = preview.substring(0, 77) + '...';
|
|
440
|
-
}
|
|
441
|
-
const size = formatSize(tool.responseSize || 0);
|
|
442
|
-
lines.push(`🛠️ **${tool.name}** — "${preview}" (${size})`);
|
|
443
|
-
}
|
|
444
|
-
}
|
|
445
|
-
}
|
|
446
|
-
lines.push('');
|
|
447
|
-
lines.push(`_Last update: ${new Date().toLocaleTimeString()}_`);
|
|
448
|
-
return lines.join('\n');
|
|
449
|
-
};
|
|
450
|
-
const updateStatus = async (turnCount, recentTools, isMilestone) => {
|
|
451
|
-
const content = formatStatusContent(turnCount, recentTools, isMilestone);
|
|
452
|
-
if (!statusInitialized) {
|
|
453
|
-
// First status: send a new notification (tracks the message for editing)
|
|
454
|
-
await channelManager.notify(content);
|
|
455
|
-
statusInitialized = true;
|
|
456
|
-
}
|
|
457
|
-
else {
|
|
458
|
-
// Subsequent: edit the tracked message in-place
|
|
459
|
-
const edited = await channelManager.editStatus(content);
|
|
460
|
-
if (!edited) {
|
|
461
|
-
// Edit failed (rate-limited or message lost) — send fresh and re-track
|
|
462
|
-
logger.warn('[Main] Status edit failed, sending new notification.');
|
|
463
|
-
statusInitialized = false;
|
|
464
|
-
await channelManager.notify(content);
|
|
465
|
-
statusInitialized = true;
|
|
466
|
-
}
|
|
467
|
-
}
|
|
468
|
-
};
|
|
469
|
-
const flush = async (isDone = false) => {
|
|
470
|
-
const text = responseBuffer.trim();
|
|
471
|
-
if (!text)
|
|
472
|
-
return;
|
|
473
|
-
let finalContent = text;
|
|
474
|
-
// Prepend the binding alert to the first message if we just auto-bound
|
|
475
|
-
if (replyCount === 0 && message.metadata?.wasAutoBound) {
|
|
476
|
-
finalContent = `🔒 **System Alert:** I have permanently bound my background notification channel to your Discord account.\n\n${finalContent}`;
|
|
477
|
-
}
|
|
478
|
-
if (isDone) {
|
|
479
|
-
const stats = sessionManager.getStats();
|
|
480
|
-
if (stats && stats.lastInputTokens > 0) {
|
|
481
|
-
const limit = config.contextWindowTokens;
|
|
482
|
-
const active = stats.lastInputTokens;
|
|
483
|
-
const cumulative = stats.totalInputTokens + stats.totalOutputTokens;
|
|
484
|
-
const pct = ((active / limit) * 100).toFixed(1);
|
|
485
|
-
const thresholdPct = (config.compressionThreshold * 100).toFixed(1);
|
|
486
|
-
finalContent += `\n\n*Session context: ${active.toLocaleString()} / ${limit.toLocaleString()} tokens (${pct}% used, compaction at ${thresholdPct}%) | Session total: ${cumulative.toLocaleString()} tokens consumed*`;
|
|
487
|
-
}
|
|
488
|
-
}
|
|
489
|
-
await message.reply(finalContent);
|
|
490
|
-
responseBuffer = '';
|
|
491
|
-
replyCount++;
|
|
492
|
-
};
|
|
493
|
-
// Clear any previous status message for a fresh start
|
|
494
|
-
channelManager.clearStatus();
|
|
495
|
-
statusInitialized = false;
|
|
496
|
-
// Feature flag: status updates are per-backend
|
|
497
|
-
const statusEnabled = config.isStatusUpdatesEnabled();
|
|
498
|
-
if (!statusEnabled) {
|
|
499
|
-
logger.debug(`[Main] Status updates disabled for backend "${config.inferenceBackend}".`);
|
|
500
|
-
}
|
|
501
|
-
try {
|
|
502
|
-
message.startTyping();
|
|
503
|
-
await supervisor.run(message.content, async (event) => {
|
|
504
|
-
if (event.type === 'text' && event.content && event.role !== 'user') {
|
|
505
|
-
responseBuffer += event.content;
|
|
506
|
-
}
|
|
507
|
-
else if (event.type === 'tool_call') {
|
|
508
|
-
// Local models emit reasoning before a tool call. By clearing the buffer, we suppress it.
|
|
509
|
-
responseBuffer = '';
|
|
510
|
-
}
|
|
511
|
-
else if (event.type === 'error') {
|
|
512
|
-
await flush();
|
|
513
|
-
await message.reply(`❌ **Error:** ${event.error}`);
|
|
514
|
-
}
|
|
515
|
-
else if (event.type === 'done') {
|
|
516
|
-
await flush(true);
|
|
517
|
-
}
|
|
518
|
-
}, undefined, message.attachments, statusEnabled ? updateStatus : undefined // gated by feature flag
|
|
519
|
-
);
|
|
520
|
-
}
|
|
521
|
-
catch (error) {
|
|
522
|
-
const errorMsg = error.message ||
|
|
523
|
-
(typeof error === 'object' ? JSON.stringify(error) : String(error));
|
|
524
|
-
logger.error(`Routing error: ${errorMsg}`);
|
|
525
|
-
await message.reply(`❌ **Supervisor Error:** ${errorMsg}`);
|
|
526
|
-
}
|
|
527
|
-
finally {
|
|
528
|
-
message.stopTyping();
|
|
529
|
-
}
|
|
530
|
-
});
|
|
531
|
-
// 7. Initialize Background Services
|
|
532
|
-
const heartbeat = new HeartbeatService(supervisor, config, sessionManager);
|
|
533
|
-
const cron = new CronService(supervisor, config, channelManager);
|
|
534
|
-
const dashboard = new DashboardService(config);
|
|
8
|
+
const { config, tarsEngine, sessionManager, supervisor, channelManager, heartbeat, cron, dashboard } = await bootstrap();
|
|
9
|
+
// Wire message routing (shared slash commands + event handling)
|
|
10
|
+
wireMessageRouting(channelManager, supervisor, sessionManager, tarsEngine, config);
|
|
535
11
|
// Start everything
|
|
536
12
|
await channelManager.start();
|
|
537
13
|
await heartbeat.start();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/supervisor/main.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/supervisor/main.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,MAAM,MAAM,oBAAoB,CAAC;AAExC;;GAEG;AACH,KAAK,UAAU,IAAI;IACf,IAAI,CAAC;QACD,MAAM,EACF,MAAM,EACN,UAAU,EACV,cAAc,EACd,UAAU,EACV,cAAc,EACd,SAAS,EACT,IAAI,EACJ,SAAS,EACZ,GAAG,MAAM,SAAS,EAAE,CAAC;QAEtB,gEAAgE;QAChE,kBAAkB,CAAC,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;QAEnF,mBAAmB;QACnB,MAAM,cAAc,CAAC,KAAK,EAAE,CAAC;QAC7B,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC;QACxB,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QACnB,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC;QAExB,MAAM,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;QAE5D,oBAAoB;QACpB,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;YAC5B,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;YACnC,MAAM,cAAc,CAAC,IAAI,EAAE,CAAC;YAC5B,SAAS,CAAC,IAAI,EAAE,CAAC;YACjB,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,SAAS,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC,CAAC,CAAC;IACP,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QAClB,MAAM,QAAQ,GACV,KAAK,CAAC,OAAO,IAAI,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACzF,MAAM,CAAC,KAAK,CAAC,kCAAkC,QAAQ,EAAE,CAAC,CAAC;QAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC;AAED,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,KAAK,MAAM,EAAE,CAAC;IAC9C,MAAM,CAAC,KAAK,CAAC,kEAAkE,CAAC,CAAC;IACjF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC;AAED,IAAI,EAAE,CAAC"}
|
|
@@ -71,7 +71,16 @@ export class McpBridge {
|
|
|
71
71
|
const transport = new StdioClientTransport({
|
|
72
72
|
command: serverConfig.command,
|
|
73
73
|
args: resolvedArgs,
|
|
74
|
-
env: resolvedEnv
|
|
74
|
+
env: resolvedEnv,
|
|
75
|
+
stderr: 'pipe'
|
|
76
|
+
});
|
|
77
|
+
transport.stderr?.on('data', (chunk) => {
|
|
78
|
+
const str = chunk.toString().trim();
|
|
79
|
+
if (str) {
|
|
80
|
+
for (const line of str.split('\n')) {
|
|
81
|
+
logger.info(`[MCP:${serverName}] ${line.trim()}`);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
75
84
|
});
|
|
76
85
|
const client = new Client({
|
|
77
86
|
name: `tars-${serverName}-client`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-bridge.js","sourceRoot":"","sources":["../../src/supervisor/mcp-bridge.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"mcp-bridge.js","sourceRoot":"","sources":["../../src/supervisor/mcp-bridge.ts"],"names":[],"mappings":"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"}
|