@saccolabs/tars 1.30.0 → 1.32.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/README.md +1 -1
- package/context/skills/create-extension/SKILL.md +2 -2
- package/context/skills/manage-extensions/SKILL.md +3 -3
- package/dist/channels/discord/discord-channel.js +2 -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 +61 -9
- 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 +1 -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} +39 -30
- 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 -983
- 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
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
import fs from 'fs/promises';
|
|
2
|
+
import fsSync from 'fs';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import chalk from 'chalk';
|
|
5
|
+
import logger from './logger.js';
|
|
6
|
+
/**
|
|
7
|
+
* Handles migration from legacy engine hidden directories to a consolidated ~/.tars layout
|
|
8
|
+
*/
|
|
9
|
+
export async function migrateLegacyConfig(tarsHome) {
|
|
10
|
+
const geminiDir = path.join(tarsHome, '.gemini');
|
|
11
|
+
// Check if legacy directory exists
|
|
12
|
+
if (!fsSync.existsSync(geminiDir)) {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
console.log(chalk.yellow.bold('\n📦 Legacy Tars environment detected in ~/.tars/.gemini'));
|
|
16
|
+
console.log(chalk.yellow('Commencing automated migration to Pi Agent layout...\n'));
|
|
17
|
+
try {
|
|
18
|
+
// 1. Ensure target directory structures exist
|
|
19
|
+
const targetChats = path.join(tarsHome, 'chats');
|
|
20
|
+
const targetExtensions = path.join(tarsHome, 'extensions');
|
|
21
|
+
const targetSkills = path.join(tarsHome, 'skills');
|
|
22
|
+
const targetAgents = path.join(tarsHome, 'agents');
|
|
23
|
+
for (const dir of [targetChats, targetExtensions, targetSkills, targetAgents]) {
|
|
24
|
+
if (!fsSync.existsSync(dir)) {
|
|
25
|
+
await fs.mkdir(dir, { recursive: true });
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
// 2. Migrate system.md
|
|
29
|
+
const oldSystemMd = path.join(geminiDir, 'system.md');
|
|
30
|
+
const newSystemMd = path.join(tarsHome, 'system.md');
|
|
31
|
+
if (fsSync.existsSync(oldSystemMd)) {
|
|
32
|
+
if (!fsSync.existsSync(newSystemMd)) {
|
|
33
|
+
await fs.copyFile(oldSystemMd, newSystemMd);
|
|
34
|
+
logger.info(`Migrated system.md to ${newSystemMd}`);
|
|
35
|
+
}
|
|
36
|
+
await fs.unlink(oldSystemMd).catch(() => { });
|
|
37
|
+
}
|
|
38
|
+
// 3. Helper to migrate folder contents
|
|
39
|
+
const migrateFolder = async (srcName, destPath) => {
|
|
40
|
+
const srcPath = path.join(geminiDir, srcName);
|
|
41
|
+
if (!fsSync.existsSync(srcPath))
|
|
42
|
+
return;
|
|
43
|
+
const items = await fs.readdir(srcPath);
|
|
44
|
+
for (const item of items) {
|
|
45
|
+
const itemSrc = path.join(srcPath, item);
|
|
46
|
+
const itemDest = path.join(destPath, item);
|
|
47
|
+
if (fsSync.existsSync(itemDest)) {
|
|
48
|
+
// Avoid overwriting newer user files
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
await fs.rename(itemSrc, itemDest).catch(async () => {
|
|
52
|
+
// Fallback to copy if cross-device rename fails
|
|
53
|
+
const stat = await fs.stat(itemSrc);
|
|
54
|
+
if (stat.isDirectory()) {
|
|
55
|
+
await fs.cp(itemSrc, itemDest, { recursive: true });
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
await fs.copyFile(itemSrc, itemDest);
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
// Clean up old directory contents recursively
|
|
63
|
+
await fs.rm(srcPath, { recursive: true, force: true }).catch(() => { });
|
|
64
|
+
};
|
|
65
|
+
// Migrate folders
|
|
66
|
+
await migrateFolder('extensions', targetExtensions);
|
|
67
|
+
// Rename gemini-extension.json to tars-extension.json in targetExtensions
|
|
68
|
+
if (fsSync.existsSync(targetExtensions)) {
|
|
69
|
+
const extDirs = await fs.readdir(targetExtensions).catch(() => []);
|
|
70
|
+
for (const extDir of extDirs) {
|
|
71
|
+
const extPath = path.join(targetExtensions, extDir);
|
|
72
|
+
const stat = await fs.stat(extPath).catch(() => null);
|
|
73
|
+
if (stat?.isDirectory() || stat?.isSymbolicLink()) {
|
|
74
|
+
const oldManifest = path.join(extPath, 'gemini-extension.json');
|
|
75
|
+
const newManifest = path.join(extPath, 'tars-extension.json');
|
|
76
|
+
if (fsSync.existsSync(oldManifest) && !fsSync.existsSync(newManifest)) {
|
|
77
|
+
await fs.rename(oldManifest, newManifest).catch(() => { });
|
|
78
|
+
logger.info(`Renamed legacy manifest to tars-extension.json in ${extDir}`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
await migrateFolder('skills', targetSkills);
|
|
84
|
+
await migrateFolder('agents', targetAgents);
|
|
85
|
+
await migrateFolder('chats', targetChats);
|
|
86
|
+
// 4. Best-effort chat history conversion from tmp directories
|
|
87
|
+
const tmpDir = path.join(geminiDir, 'tmp');
|
|
88
|
+
if (fsSync.existsSync(tmpDir)) {
|
|
89
|
+
const hashes = await fs.readdir(tmpDir).catch(() => []);
|
|
90
|
+
for (const hash of hashes) {
|
|
91
|
+
const subChatPath = path.join(tmpDir, hash, 'chats');
|
|
92
|
+
if (fsSync.existsSync(subChatPath)) {
|
|
93
|
+
const chatFiles = await fs.readdir(subChatPath).catch(() => []);
|
|
94
|
+
for (const file of chatFiles) {
|
|
95
|
+
if (file.endsWith('.json')) {
|
|
96
|
+
const oldChatFile = path.join(subChatPath, file);
|
|
97
|
+
const newChatFile = path.join(targetChats, file);
|
|
98
|
+
try {
|
|
99
|
+
const raw = await fs.readFile(oldChatFile, 'utf-8');
|
|
100
|
+
const conversation = JSON.parse(raw);
|
|
101
|
+
// Perform legacy conversation structure translation
|
|
102
|
+
if (conversation && Array.isArray(conversation.messages)) {
|
|
103
|
+
const messages = [];
|
|
104
|
+
for (const msg of conversation.messages) {
|
|
105
|
+
const timestamp = new Date().toISOString();
|
|
106
|
+
if (msg.type === 'user') {
|
|
107
|
+
messages.push({
|
|
108
|
+
role: 'user',
|
|
109
|
+
content: msg.content || '',
|
|
110
|
+
timestamp
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
else if (msg.type === 'gemini') {
|
|
114
|
+
const content = [];
|
|
115
|
+
if (msg.content) {
|
|
116
|
+
content.push({ type: 'text', text: msg.content });
|
|
117
|
+
}
|
|
118
|
+
if (Array.isArray(msg.toolCalls)) {
|
|
119
|
+
for (const tc of msg.toolCalls) {
|
|
120
|
+
content.push({
|
|
121
|
+
type: 'toolCall',
|
|
122
|
+
id: tc.id,
|
|
123
|
+
name: tc.name,
|
|
124
|
+
arguments: tc.args || {}
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
messages.push({
|
|
129
|
+
role: 'assistant',
|
|
130
|
+
content,
|
|
131
|
+
timestamp
|
|
132
|
+
});
|
|
133
|
+
// Append tool results immediately following the assistant toolCall turn
|
|
134
|
+
if (Array.isArray(msg.toolCalls)) {
|
|
135
|
+
for (const tc of msg.toolCalls) {
|
|
136
|
+
if (tc.status === 'done') {
|
|
137
|
+
const resultText = typeof tc.result === 'string'
|
|
138
|
+
? tc.result
|
|
139
|
+
: JSON.stringify(tc.result);
|
|
140
|
+
messages.push({
|
|
141
|
+
role: 'toolResult',
|
|
142
|
+
toolCallId: tc.id,
|
|
143
|
+
toolName: tc.name,
|
|
144
|
+
content: [
|
|
145
|
+
{ type: 'text', text: resultText }
|
|
146
|
+
],
|
|
147
|
+
details: typeof tc.result === 'object' &&
|
|
148
|
+
tc.result !== null
|
|
149
|
+
? tc.result
|
|
150
|
+
: {},
|
|
151
|
+
isError: false,
|
|
152
|
+
timestamp
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
await fs.writeFile(newChatFile, JSON.stringify(messages, null, 2));
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
catch (e) {
|
|
163
|
+
logger.warn(`Failed to migrate legacy chat file ${file}: ${e.message}`);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
await fs.rm(tmpDir, { recursive: true, force: true }).catch(() => { });
|
|
170
|
+
}
|
|
171
|
+
// 5. Purge Gemini configuration files
|
|
172
|
+
const filesToPurge = [
|
|
173
|
+
'google_accounts.json',
|
|
174
|
+
'oauth_creds.json',
|
|
175
|
+
'oauth_creds.json.bak',
|
|
176
|
+
'settings.json',
|
|
177
|
+
'projects.json',
|
|
178
|
+
'installation_id',
|
|
179
|
+
'GEMINI.md'
|
|
180
|
+
];
|
|
181
|
+
for (const file of filesToPurge) {
|
|
182
|
+
const filePath = path.join(geminiDir, file);
|
|
183
|
+
if (fsSync.existsSync(filePath)) {
|
|
184
|
+
await fs.unlink(filePath).catch(() => { });
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
// 6. Delete empty hidden folder
|
|
188
|
+
await fs.rm(geminiDir, { recursive: true, force: true }).catch(() => { });
|
|
189
|
+
// 7. Clean up other hidden folders (.claude, .codex, etc.)
|
|
190
|
+
const obsoleteFolders = ['.claude', '.codex', '.pi'];
|
|
191
|
+
for (const folder of obsoleteFolders) {
|
|
192
|
+
const folderPath = path.join(tarsHome, folder);
|
|
193
|
+
if (fsSync.existsSync(folderPath)) {
|
|
194
|
+
await fs.rm(folderPath, { recursive: true, force: true }).catch(() => { });
|
|
195
|
+
logger.info(`Purged obsolete hidden folder: ${folder}`);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
console.log(chalk.green.bold('✨ Migration completed. Legacy Gemini primitives successfully purged.\n'));
|
|
199
|
+
}
|
|
200
|
+
catch (err) {
|
|
201
|
+
console.log(chalk.red(`❌ Automated migration failed: ${err.message}`));
|
|
202
|
+
logger.error(`Automated migration failed: ${err.stack}`);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
//# sourceMappingURL=migration-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migration-manager.js","sourceRoot":"","sources":["../../src/utils/migration-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -127,27 +127,36 @@ export class MemoryStore {
|
|
|
127
127
|
try {
|
|
128
128
|
const { DatabaseSync } = await import('node:sqlite');
|
|
129
129
|
const db = new DatabaseSync(dbPath);
|
|
130
|
-
const
|
|
131
|
-
.
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
130
|
+
const sanitizedQuery = query
|
|
131
|
+
.replace(/[-\/\\^$*+?.()|[\]{}]/g, ' ')
|
|
132
|
+
.trim()
|
|
133
|
+
.split(/\s+/)
|
|
134
|
+
.filter(Boolean)
|
|
135
|
+
.map((term) => `"${term.replace(/"/g, '""')}"`)
|
|
136
|
+
.join(' AND ');
|
|
137
|
+
if (sanitizedQuery) {
|
|
138
|
+
const dbResults = db
|
|
139
|
+
.prepare(`
|
|
140
|
+
SELECT f.path, c.content, rank as score
|
|
141
|
+
FROM chunks_fts fts
|
|
142
|
+
JOIN chunks c ON fts.rowid = c.id
|
|
143
|
+
JOIN files f ON c.file_id = f.id
|
|
144
|
+
WHERE chunks_fts MATCH ?
|
|
145
|
+
ORDER BY rank
|
|
146
|
+
LIMIT 5
|
|
147
|
+
`)
|
|
148
|
+
.all(sanitizedQuery);
|
|
149
|
+
for (const r of dbResults) {
|
|
150
|
+
// Prettify the source path (e.g. history/session-XXX.json -> Session history)
|
|
151
|
+
let source = r.path;
|
|
152
|
+
if (source.startsWith('history/')) {
|
|
153
|
+
const dateMatch = source.match(/session-(\d{4}-\d{2}-\d{2})/);
|
|
154
|
+
source = dateMatch
|
|
155
|
+
? `Past Session ${dateMatch[1]}`
|
|
156
|
+
: 'Past Session history';
|
|
157
|
+
}
|
|
158
|
+
results.push(`[${source}] ${r.content.trim()}`);
|
|
149
159
|
}
|
|
150
|
-
results.push(`[${source}] ${r.content.trim()}`);
|
|
151
160
|
}
|
|
152
161
|
db.close();
|
|
153
162
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,OAAO,MAAM,IAAI,CAAC;AACzB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AAcpB,0DAA0D;AAE1D,MAAM,OAAO,WAAW;IACH,OAAO,CAAS;IAChB,SAAS,CAAS;IAClB,QAAQ,CAAS;IAC1B,IAAI,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;IAEhD;QACI,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;QAC3E,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QACrD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QACvD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;IAEO,KAAK,CAAC,QAAQ,CAAI,EAAoB;QAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClC,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CACnB,GAAG,EAAE,GAAE,CAAC,EACR,GAAG,EAAE,GAAE,CAAC,CACX,CAAC;QACF,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,qDAAqD;IAE7C,KAAK,CAAC,UAAU;QACpB,IAAI,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YACxD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YAClB,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC1B,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;YACzB,CAAC;YACD,MAAM,KAAK,CAAC;QAChB,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,UAAU,CAAC,IAAe;QACpC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAClE,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAC/E,CAAC;IAEM,KAAK,CAAC,SAAS,CAAC,GAAW,EAAE,KAAa;QAC7C,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE;YAC5B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;YACrC,MAAM,IAAI,GAAS;gBACf,GAAG;gBACH,KAAK;gBACL,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACtC,CAAC;YACF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;YACvB,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAC5B,OAAO,IAAI,CAAC;QAChB,CAAC,CAAC,CAAC;IACP,CAAC;IAEM,KAAK,CAAC,UAAU,CAAC,GAAW;QAC/B,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE;YAC5B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;YACrC,IAAI,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC;gBAAE,OAAO,KAAK,CAAC;YACvC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACvB,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAC5B,OAAO,IAAI,CAAC;QAChB,CAAC,CAAC,CAAC;IACP,CAAC;IAEM,KAAK,CAAC,SAAS;QAClB,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE;YAC5B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;YACrC,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;IACP,CAAC;IAED,qDAAqD;IAE7C,gBAAgB;QACpB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;QAC/B,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACvD,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAClD,OAAO,GAAG,IAAI,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC;IACpC,CAAC;IAEO,YAAY;QAChB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACnD,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACrD,OAAO,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC;IACzB,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,OAAe;QAChC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACpD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,KAAK,OAAO,IAAI,CAAC;QACxD,MAAM,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAC9C,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED,qDAAqD;IAE9C,KAAK,CAAC,MAAM,CAAC,KAAa;QAC7B,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAEvC,4BAA4B;QAC5B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACrC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3C,IACI,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;gBAC3C,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,EAC/C,CAAC;gBACC,OAAO,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;YACtD,CAAC;QACL,CAAC;QAED,uCAAuC;QACvC,IAAI,CAAC;YACD,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAClD,MAAM,OAAO,GAAG,SAAS;iBACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;iBAChC,IAAI,EAAE;iBACN,OAAO,EAAE,CAAC;YAEf,KAAK,MAAM,QAAQ,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;gBAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;gBACpD,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBACrD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;gBAE1D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACvB,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;wBAC1C,OAAO,CAAC,IAAI,CACR,SAAS,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CACrE,CAAC;oBACN,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YAClB,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;gBAAE,OAAO,CAAC,KAAK,CAAC,2BAA2B,KAAK,EAAE,CAAC,CAAC;QACnF,CAAC;QAED,mEAAmE;QACnE,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,cAAc,CAAC,CAAC;QACrE,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC;gBACD,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;gBACrD,MAAM,EAAE,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC;gBAEpC,MAAM,cAAc,GAAG,KAAK;qBACvB,OAAO,CAAC,wBAAwB,EAAE,GAAG,CAAC;qBACtC,IAAI,EAAE;qBACN,KAAK,CAAC,KAAK,CAAC;qBACZ,MAAM,CAAC,OAAO,CAAC;qBACf,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC;qBAC9C,IAAI,CAAC,OAAO,CAAC,CAAC;gBAEnB,IAAI,cAAc,EAAE,CAAC;oBACjB,MAAM,SAAS,GAAG,EAAE;yBACf,OAAO,CACJ;;;;;;;;qBAQP,CACI;yBACA,GAAG,CAAC,cAAc,CAAU,CAAC;oBAElC,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;wBACxB,8EAA8E;wBAC9E,IAAI,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC;wBACpB,IAAI,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;4BAChC,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;4BAC9D,MAAM,GAAG,SAAS;gCACd,CAAC,CAAC,gBAAgB,SAAS,CAAC,CAAC,CAAC,EAAE;gCAChC,CAAC,CAAC,sBAAsB,CAAC;wBACjC,CAAC;wBACD,OAAO,CAAC,IAAI,CAAC,IAAI,MAAM,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;oBACpD,CAAC;gBACL,CAAC;gBACD,EAAE,CAAC,KAAK,EAAE,CAAC;YACf,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,kCAAkC,KAAK,EAAE,CAAC,CAAC;YAC7D,CAAC;QACL,CAAC;QAED,OAAO,OAAO,CAAC;IACnB,CAAC;CACJ"}
|
|
@@ -164,30 +164,40 @@ export class MemoryStore {
|
|
|
164
164
|
const { DatabaseSync } = await import('node:sqlite');
|
|
165
165
|
const db = new DatabaseSync(dbPath);
|
|
166
166
|
|
|
167
|
-
const
|
|
168
|
-
.
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
167
|
+
const sanitizedQuery = query
|
|
168
|
+
.replace(/[-\/\\^$*+?.()|[\]{}]/g, ' ')
|
|
169
|
+
.trim()
|
|
170
|
+
.split(/\s+/)
|
|
171
|
+
.filter(Boolean)
|
|
172
|
+
.map((term) => `"${term.replace(/"/g, '""')}"`)
|
|
173
|
+
.join(' AND ');
|
|
174
|
+
|
|
175
|
+
if (sanitizedQuery) {
|
|
176
|
+
const dbResults = db
|
|
177
|
+
.prepare(
|
|
178
|
+
`
|
|
179
|
+
SELECT f.path, c.content, rank as score
|
|
180
|
+
FROM chunks_fts fts
|
|
181
|
+
JOIN chunks c ON fts.rowid = c.id
|
|
182
|
+
JOIN files f ON c.file_id = f.id
|
|
183
|
+
WHERE chunks_fts MATCH ?
|
|
184
|
+
ORDER BY rank
|
|
185
|
+
LIMIT 5
|
|
186
|
+
`
|
|
187
|
+
)
|
|
188
|
+
.all(sanitizedQuery) as any[];
|
|
189
|
+
|
|
190
|
+
for (const r of dbResults) {
|
|
191
|
+
// Prettify the source path (e.g. history/session-XXX.json -> Session history)
|
|
192
|
+
let source = r.path;
|
|
193
|
+
if (source.startsWith('history/')) {
|
|
194
|
+
const dateMatch = source.match(/session-(\d{4}-\d{2}-\d{2})/);
|
|
195
|
+
source = dateMatch
|
|
196
|
+
? `Past Session ${dateMatch[1]}`
|
|
197
|
+
: 'Past Session history';
|
|
198
|
+
}
|
|
199
|
+
results.push(`[${source}] ${r.content.trim()}`);
|
|
189
200
|
}
|
|
190
|
-
results.push(`[${source}] ${r.content.trim()}`);
|
|
191
201
|
}
|
|
192
202
|
db.close();
|
|
193
203
|
} catch (error) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@saccolabs/tars",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.32.0",
|
|
4
4
|
"description": "Tars — Your personal AI assistant",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -37,14 +37,15 @@
|
|
|
37
37
|
"!site/"
|
|
38
38
|
],
|
|
39
39
|
"dependencies": {
|
|
40
|
-
"@
|
|
40
|
+
"@earendil-works/pi-agent-core": "^0.79.1",
|
|
41
|
+
"@earendil-works/pi-ai": "^0.79.1",
|
|
42
|
+
"@earendil-works/pi-coding-agent": "^0.79.9",
|
|
41
43
|
"@modelcontextprotocol/sdk": "^1.26.0",
|
|
42
44
|
"chalk": "^5.0.0",
|
|
43
45
|
"commander": "^12.0.0",
|
|
44
46
|
"cron-parser": "^5.4.0",
|
|
45
47
|
"discord.js": "^14.16.3",
|
|
46
48
|
"dotenv": "^16.4.7",
|
|
47
|
-
"google-auth-library": "^10.5.0",
|
|
48
49
|
"inquirer": "^9.0.0",
|
|
49
50
|
"ora": "^8.0.0",
|
|
50
51
|
"pino": "^10.3.1",
|
package/src/prompts/system.md
CHANGED
|
@@ -2,11 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
- **Assistant Name**: {{ASSISTANT_NAME}}
|
|
4
4
|
- **Instance ID**: {{INSTANCE_NAME}}
|
|
5
|
-
- **
|
|
6
|
-
- **Inference Backend**: {{INFERENCE_BACKEND}}
|
|
5
|
+
- **Provider**: {{PROVIDER}}
|
|
7
6
|
- **Model**: {{MODEL_NAME}}
|
|
8
7
|
- **Context Window**: {{CONTEXT_WINDOW}} tokens
|
|
9
|
-
- **Inference Endpoint**: {{INFERENCE_ENDPOINT}}
|
|
10
8
|
|
|
11
9
|
You are **{{ASSISTANT_NAME}}**, a personal AI assistant. You are autonomous, proactive, and capable of self-improvement. You serve one user as a trusted generalist across all domains.
|
|
12
10
|
|
|
@@ -21,15 +19,11 @@ You are **{{ASSISTANT_NAME}}**, a personal AI assistant. You are autonomous, pro
|
|
|
21
19
|
## Operational Rules
|
|
22
20
|
|
|
23
21
|
- **Memory Management**: Tars uses a tiered memory system:
|
|
24
|
-
- **Durable Memory (
|
|
25
|
-
- **Explicit Instruction ONLY**: You may only write to `.gemini/GEMINI.md` (using `replace` or `write_file`) if the user explicitly instructs you to "remember this every time" or "save this to your durable memory."
|
|
26
|
-
- **Conciseness Policy**: Always read the file first to check its length. Keep it under 100 lines. If it grows too long, summarize or move older, less relevant facts to the Knowledge Base (MCP).
|
|
27
|
-
- **No `save_memory`**: Do NOT use the deprecated `save_memory` tool.
|
|
28
|
-
- **Active Memory (MCP)**: Use the `tars-memory` MCP tools for all autonomous memory operations:
|
|
22
|
+
- **Durable Memory (tars-memory)**: Use the `tars-memory` MCP tools for all memory operations:
|
|
29
23
|
- `memory_store_fact` / `memory_delete_fact` / `memory_list_facts` for preferences and durable rules.
|
|
30
24
|
- `memory_add_note` for daily observations and project context.
|
|
31
25
|
- `memory_search` to recall past facts and notes.
|
|
32
|
-
- **Safety**: Do **NOT** run `
|
|
26
|
+
- **Safety**: Do **NOT** run `tars` CLI commands or manage the `tars` supervisor process (start/stop/restart) directly. You will forcefully terminate your own active node process if you do. If a restart is required, you must ask the **USER** to do it. Use internal tools or config files for other operations.
|
|
33
27
|
- **Tools**: Use absolute file paths. Maximize parallelism and tool usage. Use background processes (`&`) for long-running shell commands.
|
|
34
28
|
- **Non-Interactive Execution**: NEVER run interactive commands that wait for user input (e.g., `npx create-next-app` without flags). ALWAYS use non-interactive flags (e.g., `--yes`, `--non-interactive`). If you are unsure what the non-interactive flags are for a specific command, search the web or command's `--help` output first.
|
|
35
29
|
|
|
@@ -50,8 +44,3 @@ You are operating in **Autonomous YOLO mode**. You have full authority to execut
|
|
|
50
44
|
- **Self-Modification**: Create **Extensions** (MCP), **Skills** (`SKILL.md`), or **Commands** (`cmd.toml`) to extend your abilities.
|
|
51
45
|
- **Task Scheduling**: Use task tools to create reminders or recurring jobs (prefer cron syntax).
|
|
52
46
|
- **Coding**: When coding, prioritize understanding the existing codebase, planning before acting, and verifying your changes with tests/linting.
|
|
53
|
-
|
|
54
|
-
${AgentSkills}
|
|
55
|
-
${SubAgents}
|
|
56
|
-
|
|
57
|
-
${tools}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: t-scaffolder
|
|
3
|
-
description: A specialized Tars Sub-Agent for generating large codebases, scaffolding entire projects, and writing boilerplate. Use this agent when you need to bootstrap a new application, like a React/Next.js frontend, a Python backend, or when writing a completely new feature from scratch.
|
|
4
|
-
kind: local
|
|
5
|
-
tools:
|
|
6
|
-
- run_shell_command
|
|
7
|
-
- write_file
|
|
8
|
-
- replace
|
|
9
|
-
- glob
|
|
10
|
-
temperature: 0.2
|
|
11
|
-
max_turns: 20
|
|
12
|
-
---
|
|
13
|
-
|
|
14
|
-
You are the T-Scaffolder Sub-Agent. Your objective is to quickly and accurately scaffold large projects, write extensive boilerplate, and run dependency installations (like npm install or pip install).
|
|
15
|
-
|
|
16
|
-
Rules:
|
|
17
|
-
|
|
18
|
-
1. Try to minimize back-and-forth conversation. Generate code silently and reliably.
|
|
19
|
-
2. If dependencies need to be installed, run the shell commands to do so.
|
|
20
|
-
3. If creating files, use write_file.
|
|
21
|
-
4. Use run_shell_command for running scaffolding tools like `npx create-next-app` or `cargo new`. Always run tools in a NON-INTERACTIVE mode (e.g., passing `-y` or using default config files).
|
|
22
|
-
5. When scaffolding is complete, write a very brief summary of what you did and exit. Do NOT give long explanations of the code you generated unless explicitly asked.
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { AuthType } from '@google/gemini-cli-core';
|
|
2
|
-
export declare class TarsCredentialManager {
|
|
3
|
-
private readonly homeDir;
|
|
4
|
-
constructor(homeDir: string);
|
|
5
|
-
/**
|
|
6
|
-
* Resolves the authentication type to use.
|
|
7
|
-
* Precedence: Environment Variable -> Config File -> OAuth (Default)
|
|
8
|
-
*/
|
|
9
|
-
getAuthType(): Promise<AuthType>;
|
|
10
|
-
/**
|
|
11
|
-
* Clear all credentials – both API key and OAuth tokens.
|
|
12
|
-
*/
|
|
13
|
-
clearAll(): Promise<void>;
|
|
14
|
-
}
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import { AuthType } from '@google/gemini-cli-core';
|
|
2
|
-
import fs from 'fs/promises';
|
|
3
|
-
import path from 'path';
|
|
4
|
-
import logger from '../utils/logger.js';
|
|
5
|
-
export class TarsCredentialManager {
|
|
6
|
-
homeDir;
|
|
7
|
-
constructor(homeDir) {
|
|
8
|
-
this.homeDir = homeDir;
|
|
9
|
-
}
|
|
10
|
-
/**
|
|
11
|
-
* Resolves the authentication type to use.
|
|
12
|
-
* Precedence: Environment Variable -> Config File -> OAuth (Default)
|
|
13
|
-
*/
|
|
14
|
-
async getAuthType() {
|
|
15
|
-
// 1. Check environment variables (e.g. GEMINI_API_KEY)
|
|
16
|
-
if (process.env.GEMINI_API_KEY) {
|
|
17
|
-
return AuthType.USE_GEMINI;
|
|
18
|
-
}
|
|
19
|
-
if (process.env.GOOGLE_GENAI_USE_VERTEXAI === 'true') {
|
|
20
|
-
return AuthType.USE_VERTEX_AI;
|
|
21
|
-
}
|
|
22
|
-
// 2. Check settings.json in Tars isolated storage
|
|
23
|
-
const settingsPath = path.join(this.homeDir, '.gemini', 'settings.json');
|
|
24
|
-
try {
|
|
25
|
-
const data = await fs.readFile(settingsPath, 'utf-8');
|
|
26
|
-
const settings = JSON.parse(data);
|
|
27
|
-
const selectedType = settings.security?.auth?.selectedType;
|
|
28
|
-
if (selectedType === 'gemini-api-key')
|
|
29
|
-
return AuthType.USE_GEMINI;
|
|
30
|
-
if (selectedType === 'vertex-ai')
|
|
31
|
-
return AuthType.USE_VERTEX_AI;
|
|
32
|
-
if (selectedType === 'oauth-personal')
|
|
33
|
-
return AuthType.LOGIN_WITH_GOOGLE;
|
|
34
|
-
}
|
|
35
|
-
catch {
|
|
36
|
-
// Ignore missing settings, fall through
|
|
37
|
-
}
|
|
38
|
-
// 3. Default to OAuth (Personal) if nothing else is found
|
|
39
|
-
return AuthType.LOGIN_WITH_GOOGLE;
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Clear all credentials – both API key and OAuth tokens.
|
|
43
|
-
*/
|
|
44
|
-
async clearAll() {
|
|
45
|
-
const geminiDir = path.join(this.homeDir, '.gemini');
|
|
46
|
-
const filesToClear = ['oauth_creds.json', 'google_accounts.json', 'state.json'];
|
|
47
|
-
for (const file of filesToClear) {
|
|
48
|
-
try {
|
|
49
|
-
await fs.unlink(path.join(geminiDir, file));
|
|
50
|
-
}
|
|
51
|
-
catch {
|
|
52
|
-
// Ignore missing files
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
// Also clear any API key from process environment if possible
|
|
56
|
-
delete process.env.GEMINI_API_KEY;
|
|
57
|
-
logger.info('✨ All Tars credentials cleared.');
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
//# sourceMappingURL=credential-manager.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"credential-manager.js","sourceRoot":"","sources":["../../src/auth/credential-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,MAAM,MAAM,oBAAoB,CAAC;AAExC,MAAM,OAAO,qBAAqB;IACD;IAA7B,YAA6B,OAAe;QAAf,YAAO,GAAP,OAAO,CAAQ;IAAG,CAAC;IAEhD;;;OAGG;IACI,KAAK,CAAC,WAAW;QACpB,uDAAuD;QACvD,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;YAC7B,OAAO,QAAQ,CAAC,UAAU,CAAC;QAC/B,CAAC;QAED,IAAI,OAAO,CAAC,GAAG,CAAC,yBAAyB,KAAK,MAAM,EAAE,CAAC;YACnD,OAAO,QAAQ,CAAC,aAAa,CAAC;QAClC,CAAC;QAED,kDAAkD;QAClD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;QACzE,IAAI,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,YAAY,GAAG,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,YAAY,CAAC;YAE3D,IAAI,YAAY,KAAK,gBAAgB;gBAAE,OAAO,QAAQ,CAAC,UAAU,CAAC;YAClE,IAAI,YAAY,KAAK,WAAW;gBAAE,OAAO,QAAQ,CAAC,aAAa,CAAC;YAChE,IAAI,YAAY,KAAK,gBAAgB;gBAAE,OAAO,QAAQ,CAAC,iBAAiB,CAAC;QAC7E,CAAC;QAAC,MAAM,CAAC;YACL,wCAAwC;QAC5C,CAAC;QAED,0DAA0D;QAC1D,OAAO,QAAQ,CAAC,iBAAiB,CAAC;IACtC,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,QAAQ;QACjB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QACrD,MAAM,YAAY,GAAG,CAAC,kBAAkB,EAAE,sBAAsB,EAAE,YAAY,CAAC,CAAC;QAEhF,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;YAC9B,IAAI,CAAC;gBACD,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;YAChD,CAAC;YAAC,MAAM,CAAC;gBACL,uBAAuB;YAC3B,CAAC;QACL,CAAC;QAED,8DAA8D;QAC9D,OAAO,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;QAElC,MAAM,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;IACnD,CAAC;CACJ"}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* TarsOAuthService - Native OAuth Flow for Tars
|
|
3
|
-
*
|
|
4
|
-
* This service wraps the @google/gemini-cli-core auth logic but ensures
|
|
5
|
-
* it operates exclusively within the ~/.tars isolated environment.
|
|
6
|
-
*/
|
|
7
|
-
export declare class TarsOAuthService {
|
|
8
|
-
private readonly homeDir;
|
|
9
|
-
constructor(homeDir: string);
|
|
10
|
-
/**
|
|
11
|
-
* Executes the OAuth login flow.
|
|
12
|
-
* This will open a browser for the user to authenticate.
|
|
13
|
-
* @param force If true, clears existing credentials before starting the flow.
|
|
14
|
-
*/
|
|
15
|
-
login(force?: boolean): Promise<void>;
|
|
16
|
-
/**
|
|
17
|
-
* Checks if a valid OAuth credential exists in the Tars isolated storage.
|
|
18
|
-
*/
|
|
19
|
-
isAuthenticated(): Promise<boolean>;
|
|
20
|
-
/**
|
|
21
|
-
* Clears cached credentials.
|
|
22
|
-
*/
|
|
23
|
-
logout(): Promise<void>;
|
|
24
|
-
}
|