@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.
Files changed (92) hide show
  1. package/README.md +1 -1
  2. package/context/skills/create-extension/SKILL.md +2 -2
  3. package/context/skills/manage-extensions/SKILL.md +3 -3
  4. package/dist/channels/discord/discord-channel.js +2 -3
  5. package/dist/channels/discord/discord-channel.js.map +1 -1
  6. package/dist/channels/discord/message-formatter.d.ts +1 -1
  7. package/dist/channels/discord/message-formatter.js +1 -1
  8. package/dist/cli/commands/quota.js +13 -48
  9. package/dist/cli/commands/quota.js.map +1 -1
  10. package/dist/cli/commands/refresh.js +61 -9
  11. package/dist/cli/commands/refresh.js.map +1 -1
  12. package/dist/cli/commands/setup.js +192 -467
  13. package/dist/cli/commands/setup.js.map +1 -1
  14. package/dist/cli/index.js +1 -13
  15. package/dist/cli/index.js.map +1 -1
  16. package/dist/config/config.d.ts +5 -10
  17. package/dist/config/config.js +21 -27
  18. package/dist/config/config.js.map +1 -1
  19. package/dist/memory/knowledge-store.js +10 -1
  20. package/dist/memory/knowledge-store.js.map +1 -1
  21. package/dist/memory/memory-manager.d.ts +0 -3
  22. package/dist/memory/memory-manager.js +26 -34
  23. package/dist/memory/memory-manager.js.map +1 -1
  24. package/dist/scripts/debug-cli.js +2 -2
  25. package/dist/scripts/debug-cli.js.map +1 -1
  26. package/dist/supervisor/heartbeat-service.js +1 -1
  27. package/dist/supervisor/heartbeat-service.js.map +1 -1
  28. package/dist/supervisor/main.js +37 -79
  29. package/dist/supervisor/main.js.map +1 -1
  30. package/dist/supervisor/mcp-bridge.d.ts +25 -0
  31. package/dist/supervisor/mcp-bridge.js +157 -0
  32. package/dist/supervisor/mcp-bridge.js.map +1 -0
  33. package/dist/supervisor/session-manager.d.ts +1 -1
  34. package/dist/supervisor/session-manager.js +1 -1
  35. package/dist/supervisor/supervisor.d.ts +14 -7
  36. package/dist/supervisor/supervisor.js +87 -29
  37. package/dist/supervisor/supervisor.js.map +1 -1
  38. package/dist/supervisor/{gemini-engine.d.ts → tars-engine.d.ts} +39 -30
  39. package/dist/supervisor/tars-engine.js +698 -0
  40. package/dist/supervisor/tars-engine.js.map +1 -0
  41. package/dist/tools/get-quota.d.ts +38 -12
  42. package/dist/tools/get-quota.js +37 -94
  43. package/dist/tools/get-quota.js.map +1 -1
  44. package/dist/tools/send-notification.d.ts +32 -7
  45. package/dist/tools/send-notification.js +31 -37
  46. package/dist/tools/send-notification.js.map +1 -1
  47. package/dist/types/index.d.ts +2 -2
  48. package/dist/utils/brain-audit.js +4 -4
  49. package/dist/utils/brain-audit.js.map +1 -1
  50. package/dist/utils/migration-manager.d.ts +4 -0
  51. package/dist/utils/migration-manager.js +205 -0
  52. package/dist/utils/migration-manager.js.map +1 -0
  53. package/extensions/memory/dist/store.js +29 -20
  54. package/extensions/memory/dist/store.js.map +1 -1
  55. package/extensions/memory/src/store.ts +33 -23
  56. package/package.json +4 -3
  57. package/src/prompts/system.md +3 -14
  58. package/context/agents/scaffolder.md +0 -22
  59. package/dist/auth/credential-manager.d.ts +0 -14
  60. package/dist/auth/credential-manager.js +0 -60
  61. package/dist/auth/credential-manager.js.map +0 -1
  62. package/dist/auth/oauth-service.d.ts +0 -24
  63. package/dist/auth/oauth-service.js +0 -89
  64. package/dist/auth/oauth-service.js.map +0 -1
  65. package/dist/auth/workspace-auth-service.d.ts +0 -10
  66. package/dist/auth/workspace-auth-service.js +0 -78
  67. package/dist/auth/workspace-auth-service.js.map +0 -1
  68. package/dist/cli/commands/swarm.d.ts +0 -13
  69. package/dist/cli/commands/swarm.js +0 -250
  70. package/dist/cli/commands/swarm.js.map +0 -1
  71. package/dist/inference/LlamaCppGenerator.d.ts +0 -25
  72. package/dist/inference/LlamaCppGenerator.js +0 -461
  73. package/dist/inference/LlamaCppGenerator.js.map +0 -1
  74. package/dist/scripts/test-local-llamacpp.d.ts +0 -1
  75. package/dist/scripts/test-local-llamacpp.js +0 -77
  76. package/dist/scripts/test-local-llamacpp.js.map +0 -1
  77. package/dist/supervisor/gemini-engine.js +0 -983
  78. package/dist/supervisor/gemini-engine.js.map +0 -1
  79. package/dist/swarm/agent-card.d.ts +0 -14
  80. package/dist/swarm/agent-card.js +0 -93
  81. package/dist/swarm/agent-card.js.map +0 -1
  82. package/dist/swarm/rpc-handler.d.ts +0 -27
  83. package/dist/swarm/rpc-handler.js +0 -235
  84. package/dist/swarm/rpc-handler.js.map +0 -1
  85. package/dist/swarm/swarm-service.d.ts +0 -47
  86. package/dist/swarm/swarm-service.js +0 -207
  87. package/dist/swarm/swarm-service.js.map +0 -1
  88. package/dist/swarm/types.d.ts +0 -109
  89. package/dist/swarm/types.js +0 -15
  90. package/dist/swarm/types.js.map +0 -1
  91. /package/extensions/memory/{gemini-extension.json → tars-extension.json} +0 -0
  92. /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 dbResults = db
131
- .prepare(`
132
- SELECT f.path, c.content, rank as score
133
- FROM chunks_fts fts
134
- JOIN chunks c ON fts.rowid = c.id
135
- JOIN files f ON c.file_id = f.id
136
- WHERE chunks_fts MATCH ?
137
- ORDER BY rank
138
- LIMIT 5
139
- `)
140
- .all(query);
141
- for (const r of dbResults) {
142
- // Prettify the source path (e.g. history/session-XXX.json -> Session history)
143
- let source = r.path;
144
- if (source.startsWith('history/')) {
145
- const dateMatch = source.match(/session-(\d{4}-\d{2}-\d{2})/);
146
- source = dateMatch
147
- ? `Past Session ${dateMatch[1]}`
148
- : 'Past Session history';
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":"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,SAAS,GAAG,EAAE;qBACf,OAAO,CACJ;;;;;;;;iBAQP,CACI;qBACA,GAAG,CAAC,KAAK,CAAU,CAAC;gBAEzB,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;oBACxB,8EAA8E;oBAC9E,IAAI,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC;oBACpB,IAAI,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;wBAChC,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;wBAC9D,MAAM,GAAG,SAAS;4BACd,CAAC,CAAC,gBAAgB,SAAS,CAAC,CAAC,CAAC,EAAE;4BAChC,CAAC,CAAC,sBAAsB,CAAC;oBACjC,CAAC;oBACD,OAAO,CAAC,IAAI,CAAC,IAAI,MAAM,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBACpD,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"}
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
@@ -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 dbResults = db
168
- .prepare(
169
- `
170
- SELECT f.path, c.content, rank as score
171
- FROM chunks_fts fts
172
- JOIN chunks c ON fts.rowid = c.id
173
- JOIN files f ON c.file_id = f.id
174
- WHERE chunks_fts MATCH ?
175
- ORDER BY rank
176
- LIMIT 5
177
- `
178
- )
179
- .all(query) as any[];
180
-
181
- for (const r of dbResults) {
182
- // Prettify the source path (e.g. history/session-XXX.json -> Session history)
183
- let source = r.path;
184
- if (source.startsWith('history/')) {
185
- const dateMatch = source.match(/session-(\d{4}-\d{2}-\d{2})/);
186
- source = dateMatch
187
- ? `Past Session ${dateMatch[1]}`
188
- : 'Past Session history';
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.30.0",
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
- "@google/gemini-cli-core": "^0.34.0",
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",
@@ -2,11 +2,9 @@
2
2
 
3
3
  - **Assistant Name**: {{ASSISTANT_NAME}}
4
4
  - **Instance ID**: {{INSTANCE_NAME}}
5
- - **Designated Role**: {{INSTANCE_ROLE}}
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 (`.gemini/GEMINI.md`)**: Strictly for your core identity, personality, and high-level background directives.
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 `gemini` 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.
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
- }