@saccolabs/tars 1.31.0 → 1.32.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -11
- package/context/skills/create-extension/SKILL.md +2 -2
- package/context/skills/manage-extensions/SKILL.md +3 -3
- package/dist/channels/discord/discord-channel.d.ts +4 -0
- package/dist/channels/discord/discord-channel.js +21 -3
- package/dist/channels/discord/discord-channel.js.map +1 -1
- package/dist/channels/discord/message-formatter.d.ts +1 -1
- package/dist/channels/discord/message-formatter.js +1 -1
- package/dist/cli/commands/quota.js +13 -48
- package/dist/cli/commands/quota.js.map +1 -1
- package/dist/cli/commands/refresh.js +40 -3
- package/dist/cli/commands/refresh.js.map +1 -1
- package/dist/cli/commands/setup.js +192 -467
- package/dist/cli/commands/setup.js.map +1 -1
- package/dist/cli/index.js +3 -13
- package/dist/cli/index.js.map +1 -1
- package/dist/config/config.d.ts +5 -10
- package/dist/config/config.js +21 -27
- package/dist/config/config.js.map +1 -1
- package/dist/memory/knowledge-store.js +10 -1
- package/dist/memory/knowledge-store.js.map +1 -1
- package/dist/memory/memory-manager.d.ts +0 -3
- package/dist/memory/memory-manager.js +26 -34
- package/dist/memory/memory-manager.js.map +1 -1
- package/dist/scripts/debug-cli.js +2 -2
- package/dist/scripts/debug-cli.js.map +1 -1
- package/dist/supervisor/heartbeat-service.js +1 -1
- package/dist/supervisor/heartbeat-service.js.map +1 -1
- package/dist/supervisor/main.js +37 -79
- package/dist/supervisor/main.js.map +1 -1
- package/dist/supervisor/mcp-bridge.d.ts +25 -0
- package/dist/supervisor/mcp-bridge.js +157 -0
- package/dist/supervisor/mcp-bridge.js.map +1 -0
- package/dist/supervisor/session-manager.d.ts +1 -1
- package/dist/supervisor/session-manager.js +1 -1
- package/dist/supervisor/supervisor.d.ts +14 -7
- package/dist/supervisor/supervisor.js +87 -29
- package/dist/supervisor/supervisor.js.map +1 -1
- package/dist/supervisor/{gemini-engine.d.ts → tars-engine.d.ts} +38 -33
- package/dist/supervisor/tars-engine.js +698 -0
- package/dist/supervisor/tars-engine.js.map +1 -0
- package/dist/tools/get-quota.d.ts +38 -12
- package/dist/tools/get-quota.js +37 -94
- package/dist/tools/get-quota.js.map +1 -1
- package/dist/tools/send-notification.d.ts +32 -7
- package/dist/tools/send-notification.js +31 -37
- package/dist/tools/send-notification.js.map +1 -1
- package/dist/types/index.d.ts +2 -2
- package/dist/utils/brain-audit.js +4 -4
- package/dist/utils/brain-audit.js.map +1 -1
- package/dist/utils/migration-manager.d.ts +4 -0
- package/dist/utils/migration-manager.js +205 -0
- package/dist/utils/migration-manager.js.map +1 -0
- package/extensions/memory/dist/store.js +29 -20
- package/extensions/memory/dist/store.js.map +1 -1
- package/extensions/memory/src/store.ts +33 -23
- package/package.json +4 -3
- package/src/prompts/system.md +3 -14
- package/context/agents/scaffolder.md +0 -22
- package/dist/auth/credential-manager.d.ts +0 -14
- package/dist/auth/credential-manager.js +0 -60
- package/dist/auth/credential-manager.js.map +0 -1
- package/dist/auth/oauth-service.d.ts +0 -24
- package/dist/auth/oauth-service.js +0 -89
- package/dist/auth/oauth-service.js.map +0 -1
- package/dist/auth/workspace-auth-service.d.ts +0 -10
- package/dist/auth/workspace-auth-service.js +0 -78
- package/dist/auth/workspace-auth-service.js.map +0 -1
- package/dist/cli/commands/swarm.d.ts +0 -13
- package/dist/cli/commands/swarm.js +0 -250
- package/dist/cli/commands/swarm.js.map +0 -1
- package/dist/inference/LlamaCppGenerator.d.ts +0 -25
- package/dist/inference/LlamaCppGenerator.js +0 -461
- package/dist/inference/LlamaCppGenerator.js.map +0 -1
- package/dist/scripts/test-local-llamacpp.d.ts +0 -1
- package/dist/scripts/test-local-llamacpp.js +0 -77
- package/dist/scripts/test-local-llamacpp.js.map +0 -1
- package/dist/supervisor/gemini-engine.js +0 -1056
- package/dist/supervisor/gemini-engine.js.map +0 -1
- package/dist/swarm/agent-card.d.ts +0 -14
- package/dist/swarm/agent-card.js +0 -93
- package/dist/swarm/agent-card.js.map +0 -1
- package/dist/swarm/rpc-handler.d.ts +0 -27
- package/dist/swarm/rpc-handler.js +0 -235
- package/dist/swarm/rpc-handler.js.map +0 -1
- package/dist/swarm/swarm-service.d.ts +0 -47
- package/dist/swarm/swarm-service.js +0 -207
- package/dist/swarm/swarm-service.js.map +0 -1
- package/dist/swarm/types.d.ts +0 -109
- package/dist/swarm/types.js +0 -15
- package/dist/swarm/types.js.map +0 -1
- /package/extensions/memory/{gemini-extension.json → tars-extension.json} +0 -0
- /package/extensions/tasks/{gemini-extension.json → tars-extension.json} +0 -0
|
@@ -3,22 +3,26 @@ import { Config } from '../config/config.js';
|
|
|
3
3
|
import { MemoryManager } from '../memory/memory-manager.js';
|
|
4
4
|
/**
|
|
5
5
|
* Tars Supervisor - Core Orchestrator
|
|
6
|
-
* Handles session management and
|
|
6
|
+
* Handles session management and Tars Engine execution.
|
|
7
7
|
*/
|
|
8
8
|
export class Supervisor {
|
|
9
|
-
|
|
9
|
+
tarsEngine;
|
|
10
10
|
sessionManager;
|
|
11
11
|
config;
|
|
12
12
|
memory;
|
|
13
13
|
processingSince = null;
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
channelManager;
|
|
15
|
+
constructor(tarsEngine, sessionManager) {
|
|
16
|
+
this.tarsEngine = tarsEngine;
|
|
16
17
|
this.sessionManager = sessionManager;
|
|
17
18
|
this.config = Config.getInstance();
|
|
18
19
|
this.memory = new MemoryManager(this.config);
|
|
19
20
|
}
|
|
21
|
+
setChannelManager(channelManager) {
|
|
22
|
+
this.channelManager = channelManager;
|
|
23
|
+
}
|
|
20
24
|
/**
|
|
21
|
-
* Executes a user prompt through the
|
|
25
|
+
* Executes a user prompt through the Tars CLI
|
|
22
26
|
*/
|
|
23
27
|
async run(content, onEvent, sessionId, attachments, onStatus) {
|
|
24
28
|
if (this.processingSince !== null) {
|
|
@@ -34,11 +38,15 @@ export class Supervisor {
|
|
|
34
38
|
let sessionIdToUse = sessionId || (await this.sessionManager.load());
|
|
35
39
|
// Track user activity for idle suppression
|
|
36
40
|
await this.sessionManager.touchActivity();
|
|
41
|
+
// Proactive compression check before run starts
|
|
42
|
+
if (sessionIdToUse) {
|
|
43
|
+
await this.performCompressionIfNeeded(sessionIdToUse, onEvent, onStatus);
|
|
44
|
+
}
|
|
37
45
|
let toolCallCount = 0;
|
|
38
46
|
const callIdToNameMap = new Map();
|
|
39
|
-
// Run
|
|
40
|
-
await this.
|
|
41
|
-
// Learn session ID from
|
|
47
|
+
// Run Tars CLI
|
|
48
|
+
await this.tarsEngine.run(content, async (event) => {
|
|
49
|
+
// Learn session ID from Tars CLI if it was newly generated
|
|
42
50
|
if (event.sessionId && !sessionIdToUse) {
|
|
43
51
|
sessionIdToUse = event.sessionId;
|
|
44
52
|
this.sessionManager
|
|
@@ -87,25 +95,7 @@ export class Supervisor {
|
|
|
87
95
|
if (event.type === 'done') {
|
|
88
96
|
if (event.usageStats) {
|
|
89
97
|
await this.sessionManager.updateUsage(event.usageStats);
|
|
90
|
-
|
|
91
|
-
if (this.sessionManager.needsCompression(this.config.contextWindowTokens, this.config.compressionThreshold)) {
|
|
92
|
-
logger.info('[Supervisor] Context threshold exceeded — triggering compression');
|
|
93
|
-
try {
|
|
94
|
-
const didCompress = await this.gemini.compressSession();
|
|
95
|
-
await this.sessionManager.recordCompression();
|
|
96
|
-
if (didCompress) {
|
|
97
|
-
await onEvent({
|
|
98
|
-
type: 'text',
|
|
99
|
-
role: 'assistant',
|
|
100
|
-
content: '\n\n✨ *Session memory compacted to optimally save context space while retaining historical facts.*',
|
|
101
|
-
sessionId: sessionIdToUse
|
|
102
|
-
});
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
catch (e) {
|
|
106
|
-
logger.warn(`[Supervisor] Compression failed: ${e.message}`);
|
|
107
|
-
}
|
|
108
|
-
}
|
|
98
|
+
await this.performCompressionIfNeeded(sessionIdToUse, onEvent, onStatus);
|
|
109
99
|
}
|
|
110
100
|
}
|
|
111
101
|
await onEvent(event);
|
|
@@ -114,7 +104,7 @@ export class Supervisor {
|
|
|
114
104
|
// instead of destroying the session
|
|
115
105
|
if (memoryMutated) {
|
|
116
106
|
logger.info('[Supervisor] Memory mutated — refreshing system instruction in-place');
|
|
117
|
-
this.
|
|
107
|
+
this.tarsEngine.refreshSystemInstruction();
|
|
118
108
|
}
|
|
119
109
|
}
|
|
120
110
|
catch (error) {
|
|
@@ -135,22 +125,90 @@ export class Supervisor {
|
|
|
135
125
|
logger.warn('⚠️ Supervisor is busy, skipping background task');
|
|
136
126
|
throw new Error('Supervisor is busy');
|
|
137
127
|
}
|
|
128
|
+
const isCron = prompt.includes('Task Directive:');
|
|
129
|
+
const taskType = isCron ? 'scheduled cron task' : 'background heartbeat check';
|
|
130
|
+
if (this.channelManager) {
|
|
131
|
+
await this.channelManager.notify(`⏳ *Starting a background task (${taskType}). Please hold on while I finish...*`);
|
|
132
|
+
}
|
|
138
133
|
logger.info(`⚙️ Executing background task...`);
|
|
139
134
|
try {
|
|
140
135
|
this.processingSince = Date.now();
|
|
141
136
|
// Run in the active session so context is shared
|
|
142
137
|
const activeSessionId = await this.sessionManager.load();
|
|
143
|
-
const result = await this.
|
|
138
|
+
const result = await this.tarsEngine.runSync(prompt, activeSessionId || undefined);
|
|
139
|
+
if (this.channelManager) {
|
|
140
|
+
await this.channelManager.notify(`✅ *Finished background task (${taskType}). I am free now.*`);
|
|
141
|
+
}
|
|
144
142
|
return result;
|
|
145
143
|
}
|
|
146
144
|
catch (error) {
|
|
147
145
|
logger.error(`❌ Background task failed: ${error.message}`);
|
|
146
|
+
if (this.channelManager) {
|
|
147
|
+
await this.channelManager.notify(`⚠️ *Background task (${taskType}) failed:* ${error.message}`);
|
|
148
|
+
}
|
|
148
149
|
throw error;
|
|
149
150
|
}
|
|
150
151
|
finally {
|
|
151
152
|
this.processingSince = null;
|
|
152
153
|
}
|
|
153
154
|
}
|
|
155
|
+
/**
|
|
156
|
+
* Checks if the session needs compression and performs it, updating status if requested.
|
|
157
|
+
*/
|
|
158
|
+
async performCompressionIfNeeded(sessionIdToUse, onEvent, onStatus) {
|
|
159
|
+
if (this.sessionManager.needsCompression(this.config.contextWindowTokens, this.config.compressionThreshold)) {
|
|
160
|
+
logger.info('[Supervisor] Context threshold exceeded — triggering compression');
|
|
161
|
+
if (onStatus) {
|
|
162
|
+
await onStatus(0, [
|
|
163
|
+
...this.tarsEngine.activeTools,
|
|
164
|
+
{
|
|
165
|
+
id: 'compression',
|
|
166
|
+
name: 'Memory Compactor',
|
|
167
|
+
status: 'running'
|
|
168
|
+
}
|
|
169
|
+
], false);
|
|
170
|
+
}
|
|
171
|
+
try {
|
|
172
|
+
const didCompress = await this.tarsEngine.compressSession();
|
|
173
|
+
await this.sessionManager.recordCompression();
|
|
174
|
+
if (didCompress) {
|
|
175
|
+
if (onStatus) {
|
|
176
|
+
await onStatus(0, [
|
|
177
|
+
...this.tarsEngine.activeTools,
|
|
178
|
+
{
|
|
179
|
+
id: 'compression',
|
|
180
|
+
name: 'Memory Compactor',
|
|
181
|
+
status: 'completed',
|
|
182
|
+
responsePreview: 'Successfully compacted session memory to optimally save context space while retaining historical facts.',
|
|
183
|
+
responseSize: 114
|
|
184
|
+
}
|
|
185
|
+
], false);
|
|
186
|
+
}
|
|
187
|
+
await onEvent({
|
|
188
|
+
type: 'text',
|
|
189
|
+
role: 'assistant',
|
|
190
|
+
content: '\n\n✨ *Session memory compacted to optimally save context space while retaining historical facts.*',
|
|
191
|
+
sessionId: sessionIdToUse
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
catch (e) {
|
|
196
|
+
logger.warn(`[Supervisor] Compression failed: ${e.message}`);
|
|
197
|
+
if (onStatus) {
|
|
198
|
+
await onStatus(0, [
|
|
199
|
+
...this.tarsEngine.activeTools,
|
|
200
|
+
{
|
|
201
|
+
id: 'compression',
|
|
202
|
+
name: 'Memory Compactor',
|
|
203
|
+
status: 'completed',
|
|
204
|
+
responsePreview: `Compression failed: ${e.message}`,
|
|
205
|
+
responseSize: e.message.length
|
|
206
|
+
}
|
|
207
|
+
], false);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
}
|
|
154
212
|
isBusy() {
|
|
155
213
|
return this.processingSince !== null;
|
|
156
214
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"supervisor.js","sourceRoot":"","sources":["../../src/supervisor/supervisor.ts"],"names":[],"mappings":"AAGA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"supervisor.js","sourceRoot":"","sources":["../../src/supervisor/supervisor.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ import { Config as TarsConfig } from '../config/config.js';
|
|
|
3
3
|
import { AttachmentContext } from '../types/index.js';
|
|
4
4
|
import { ChannelManager } from '../channels/channel-manager.js';
|
|
5
5
|
import { SessionManager } from './session-manager.js';
|
|
6
|
-
export interface
|
|
6
|
+
export interface TarsEngineEvent {
|
|
7
7
|
type: string;
|
|
8
8
|
role?: 'user' | 'assistant' | 'system';
|
|
9
9
|
content?: string;
|
|
@@ -18,35 +18,37 @@ export interface GeminiEngineEvent {
|
|
|
18
18
|
sessionId?: string;
|
|
19
19
|
error?: string;
|
|
20
20
|
}
|
|
21
|
-
export type
|
|
21
|
+
export type TarsEngineOutputHandler = (event: TarsEngineEvent) => void | Promise<void>;
|
|
22
22
|
/**
|
|
23
23
|
* Snapshot of a completed tool call for status reporting.
|
|
24
24
|
*/
|
|
25
25
|
export interface ToolStatus {
|
|
26
|
+
id?: string;
|
|
26
27
|
name: string;
|
|
27
|
-
|
|
28
|
-
|
|
28
|
+
status: 'running' | 'completed';
|
|
29
|
+
responsePreview?: string;
|
|
30
|
+
responseSize?: number;
|
|
29
31
|
}
|
|
30
32
|
/**
|
|
31
33
|
* Callback signature for live status updates during long-running tasks.
|
|
32
34
|
*/
|
|
33
35
|
export type StatusUpdateHandler = (turnCount: number, recentTools: ToolStatus[], isMilestone: boolean) => void | Promise<void>;
|
|
34
36
|
/**
|
|
35
|
-
*
|
|
37
|
+
* TarsEngine - Wraps the Pi Agent SDK as a drop-in replacement.
|
|
36
38
|
*
|
|
37
|
-
*
|
|
38
|
-
* Operates within the ~/.tars isolated environment
|
|
39
|
+
* Interacts with configured providers (Google, OpenAI, Anthropic, or Custom).
|
|
40
|
+
* Operates within the ~/.tars isolated environment.
|
|
39
41
|
*/
|
|
40
|
-
export declare class
|
|
42
|
+
export declare class TarsEngine extends EventEmitter {
|
|
41
43
|
private readonly tarsConfig;
|
|
42
|
-
private coreConfig;
|
|
43
|
-
private client;
|
|
44
44
|
private initialized;
|
|
45
|
-
private initializedWithFallback;
|
|
46
45
|
private currentSessionId;
|
|
47
46
|
private channelManager?;
|
|
48
47
|
private sessionManager?;
|
|
49
48
|
private rateLimiter;
|
|
49
|
+
private mcpBridge;
|
|
50
|
+
private allTools;
|
|
51
|
+
activeTools: ToolStatus[];
|
|
50
52
|
constructor(tarsConfig: TarsConfig);
|
|
51
53
|
/**
|
|
52
54
|
* Provide the ChannelManager instance to the engine so it can build proactive notification tools
|
|
@@ -57,50 +59,53 @@ export declare class GeminiEngine extends EventEmitter {
|
|
|
57
59
|
*/
|
|
58
60
|
setSessionManager(sessionManager: SessionManager): void;
|
|
59
61
|
/**
|
|
60
|
-
* Initializes the
|
|
62
|
+
* Initializes the Tars Engine and discovers MCP extensions.
|
|
61
63
|
*/
|
|
62
64
|
initialize(initialSessionId?: string): Promise<void>;
|
|
63
65
|
/**
|
|
64
|
-
*
|
|
66
|
+
* Returns the API key mapped to the provider name from process.env.
|
|
65
67
|
*/
|
|
66
|
-
private
|
|
68
|
+
private getApiKeyForProvider;
|
|
67
69
|
/**
|
|
68
|
-
* Executes
|
|
70
|
+
* Executes the conversational agent loop using the Pi Agent SDK.
|
|
69
71
|
*/
|
|
70
|
-
run(prompt: string, onEvent:
|
|
72
|
+
run(prompt: string, onEvent: TarsEngineOutputHandler, sessionId?: string, attachments?: AttachmentContext[], onStatus?: StatusUpdateHandler): Promise<void>;
|
|
71
73
|
/**
|
|
72
|
-
*
|
|
74
|
+
* Executes a prompt synchronously and returns the model response.
|
|
73
75
|
*/
|
|
74
76
|
runSync(prompt: string, sessionId?: string): Promise<string>;
|
|
75
|
-
/**
|
|
76
|
-
* Rebuilds the response array for Gemini ensuring 1:1 parity with function calls.
|
|
77
|
-
*/
|
|
78
|
-
static buildToolResponseParts(toolRequests: any[], completedCalls: any[], blockedResponses: Map<string, string>, sensitiveCalls: Set<string>, isLocalInference?: boolean): any[];
|
|
79
77
|
/**
|
|
80
78
|
* Proactively compress the session history to reclaim context window space.
|
|
81
|
-
*
|
|
79
|
+
* Summarizes older messages into a <state_snapshot> block.
|
|
82
80
|
*/
|
|
83
81
|
compressSession(force?: boolean): Promise<boolean>;
|
|
84
82
|
/**
|
|
85
|
-
* Refreshes the system instruction in-place
|
|
86
|
-
* Used after memory mutations so the model sees updated facts.
|
|
83
|
+
* Refreshes the system instruction in-place.
|
|
87
84
|
*/
|
|
88
85
|
refreshSystemInstruction(): void;
|
|
89
86
|
/**
|
|
90
|
-
*
|
|
87
|
+
* Attempts to find and load session history from either the Pi chats directory
|
|
88
|
+
* or the legacy Core history directory.
|
|
91
89
|
*/
|
|
92
|
-
private
|
|
90
|
+
private loadHistory;
|
|
93
91
|
/**
|
|
94
|
-
*
|
|
92
|
+
* Saves session history to the Pi chats directory.
|
|
95
93
|
*/
|
|
96
|
-
private
|
|
94
|
+
private saveHistory;
|
|
95
|
+
/**
|
|
96
|
+
* Helper to load legacy conversation records.
|
|
97
|
+
*/
|
|
98
|
+
private loadConversationRecord;
|
|
99
|
+
/**
|
|
100
|
+
* Converts a legacy ConversationRecord to Pi SDK AgentMessage[] format.
|
|
101
|
+
*/
|
|
102
|
+
private migrateLegacyConversation;
|
|
97
103
|
/**
|
|
98
|
-
*
|
|
104
|
+
* Attempts to find and load legacy session history.
|
|
99
105
|
*/
|
|
100
|
-
private
|
|
106
|
+
private loadResumedSessionData;
|
|
101
107
|
/**
|
|
102
|
-
*
|
|
103
|
-
* in specific environments (e.g., local inference).
|
|
108
|
+
* Closes the MCP client bridge connections.
|
|
104
109
|
*/
|
|
105
|
-
|
|
110
|
+
shutdown(): Promise<void>;
|
|
106
111
|
}
|