@saccolabs/tars 1.0.36 → 1.0.38
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 +5 -4
- package/context/skills/create-extension/SKILL.md +14 -16
- package/context/skills/manage-extensions/SKILL.md +32 -37
- package/dist/discord/discord-bot.js +12 -5
- package/dist/discord/discord-bot.js.map +1 -1
- package/dist/supervisor/gemini-engine.d.ts +7 -2
- package/dist/supervisor/gemini-engine.js +161 -36
- package/dist/supervisor/gemini-engine.js.map +1 -1
- package/dist/supervisor/supervisor.d.ts +2 -2
- package/dist/supervisor/supervisor.js +2 -2
- package/dist/supervisor/supervisor.js.map +1 -1
- package/dist/types/index.d.ts +4 -0
- package/extensions/memory/dist/store.js +39 -6
- package/extensions/memory/dist/store.js.map +1 -1
- package/extensions/memory/src/store.ts +45 -6
- package/package.json +1 -1
- package/src/prompts/system.md +12 -0
package/README.md
CHANGED
|
@@ -36,8 +36,8 @@ Tars is designed for developers who need an assistant that integrates deeply wit
|
|
|
36
36
|
## Key Features
|
|
37
37
|
|
|
38
38
|
- **Multi-Agent Orchestration**: Delegates specialized tasks (like coding or research) to sub-agents for better accuracy.
|
|
39
|
-
- **
|
|
40
|
-
- **Autonomous
|
|
39
|
+
- **Native Gemini Core**: Integrated directly with the `@google/gemini-cli-core` library for high-speed, direct communication without subprocess overhead.
|
|
40
|
+
- **Autonomous Persistence**: A background "Heartbeat" service manages scheduled tasks and system health automatically.
|
|
41
41
|
- **Context-Aware Memory**: Utilizes `GEMINI.md` files to maintain long-term awareness of project structures and decisions.
|
|
42
42
|
|
|
43
43
|
---
|
|
@@ -54,11 +54,12 @@ Full documentation is available in the `site/` directory or at the deployed site
|
|
|
54
54
|
|
|
55
55
|
### Prerequisites
|
|
56
56
|
|
|
57
|
-
- **Node.js**: ≥ 22.0.
|
|
58
|
-
- **Gemini CLI**: `npm i -g @google/gemini-cli`
|
|
57
|
+
- **Node.js**: ≥ 22.0.2
|
|
59
58
|
|
|
60
59
|
### Installation
|
|
61
60
|
|
|
61
|
+
Tars is powered by the **Gemini CLI Core** library, which is automatically bundled during installation. No external CLI tools are required.
|
|
62
|
+
|
|
62
63
|
```bash
|
|
63
64
|
npm install -g @saccolabs/tars
|
|
64
65
|
```
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: extension-builder
|
|
3
|
-
description: Guide for creating new
|
|
3
|
+
description: Guide for creating new MCP extensions at runtime.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
#
|
|
6
|
+
# extension-builder Guide Skill
|
|
7
7
|
|
|
8
|
-
This skill allows Tars to create new
|
|
8
|
+
This skill allows Tars to create new MCP extensions to expand its own toolset.
|
|
9
9
|
|
|
10
10
|
## Instructions
|
|
11
11
|
|
|
@@ -13,22 +13,20 @@ When you need to build a new tool or integration:
|
|
|
13
13
|
|
|
14
14
|
1. **Plan the Extension**: Define the name and the MCP tools it will expose.
|
|
15
15
|
2. **Create the Directory**: Move to `~/.tars/.gemini/extensions/<name>`.
|
|
16
|
-
3. **Initialize npm**: Run `npm init -y`.
|
|
16
|
+
3. **Initialize npm**: Run `npm init -y`. Set `"type": "module"` in `package.json`.
|
|
17
17
|
4. **Install Dependencies**: Install `@modelcontextprotocol/sdk` and any other required libraries.
|
|
18
18
|
5. **Write the Server (JavaScript)**: Create a `server.js` file.
|
|
19
|
-
- **CRITICAL**: Use plain JavaScript for runtime-created extensions to avoid a build step.
|
|
19
|
+
- **CRITICAL**: Use **plain JavaScript** for runtime-created extensions to avoid a build step.
|
|
20
20
|
- Use the `@modelcontextprotocol/sdk` to define tools and handle stdio.
|
|
21
21
|
6. **Create Manifest**: Create `gemini-extension.json`.
|
|
22
|
-
7. **Enable Extension**: Edit `~/.tars/.gemini/extensions/extension-enablement.json
|
|
23
|
-
-
|
|
24
|
-
- You must now authorize it by adding an entry matching your Tars workspace path:
|
|
22
|
+
7. **Enable Extension**: Edit `~/.tars/.gemini/extensions/extension-enablement.json`.
|
|
23
|
+
- You must authorize the extension by adding its entry with safety overrides:
|
|
25
24
|
```json
|
|
26
25
|
"my-extension": {
|
|
27
|
-
"overrides": ["/path/to/
|
|
26
|
+
"overrides": ["/path/to/my/workspace/*"]
|
|
28
27
|
}
|
|
29
28
|
```
|
|
30
|
-
8. **Finalize**: Restart Tars using
|
|
31
|
-
- **Note**: Tars automatically enables extensions found in its source repository, but for runtime-created extensions like this one, you must manually add the enablement rule.
|
|
29
|
+
8. **Finalize**: Restart Tars using `tars stop && tars start`.
|
|
32
30
|
|
|
33
31
|
## Manifest Template (gemini-extension.json)
|
|
34
32
|
|
|
@@ -65,7 +63,9 @@ server.registerTool(
|
|
|
65
63
|
'my_tool',
|
|
66
64
|
{
|
|
67
65
|
description: 'Describe tool here',
|
|
68
|
-
inputSchema: z.object({
|
|
66
|
+
inputSchema: z.object({
|
|
67
|
+
param: z.string().description('example param')
|
|
68
|
+
})
|
|
69
69
|
},
|
|
70
70
|
async (args) => {
|
|
71
71
|
return {
|
|
@@ -80,11 +80,9 @@ await server.connect(transport);
|
|
|
80
80
|
|
|
81
81
|
## Handling Secrets & Authentication
|
|
82
82
|
|
|
83
|
-
Do **NOT**
|
|
84
|
-
|
|
85
|
-
**Standard Workflow:**
|
|
83
|
+
Do **NOT** hardcode API keys.
|
|
86
84
|
|
|
87
85
|
1. **Access**: Use `process.env.MY_SECRET_KEY` in your extension code.
|
|
88
86
|
2. **Missing Key Handling**: If missing, return a clear error:
|
|
89
87
|
`"API Key missing. Please run 'tars secret set MY_SECRET_KEY <YOUR_KEY>' and restart Tars."`
|
|
90
|
-
3. **Storage**: Tars manages these via `~/.tars/.env`
|
|
88
|
+
3. **Storage**: Tars manages these via `~/.tars/.env`. Use `tars secret set KEY VALUE` to store them.
|
|
@@ -1,69 +1,64 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: extension-manager
|
|
3
|
-
description: Enable, disable, list, and install
|
|
3
|
+
description: Enable, disable, list, and install MCP extensions at runtime.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# manage-extensions Guide Skill
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
Use this skill when you need to manage Tars' MCP extensions. Tars integrates extensions from `~/.tars/.gemini/extensions/`.
|
|
9
9
|
|
|
10
10
|
## How It Works
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
Tars performs **Extension Discovery** at startup. It scans the extensions directory for `gemini-extension.json` files. Enablement state and safety overrides are persisted in `~/.tars/.gemini/extensions/extension-enablement.json`.
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
`~/.tars/.gemini/extensions/extension-enablement.json`
|
|
14
|
+
## Operational Tasks
|
|
16
15
|
|
|
17
|
-
|
|
16
|
+
### 1. List Installed Extensions
|
|
18
17
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
### List Extensions
|
|
18
|
+
Check the contents of the extensions directory and the enablement file.
|
|
22
19
|
|
|
23
20
|
```bash
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
Shows all installed extensions, their enabled/disabled state, and their MCP servers.
|
|
21
|
+
# List all extension directories
|
|
22
|
+
ls -F ~/.tars/.gemini/extensions/
|
|
28
23
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
```bash
|
|
32
|
-
gemini extensions disable <name>
|
|
24
|
+
# Check enablement and safety overrides
|
|
25
|
+
cat ~/.tars/.gemini/extensions/extension-enablement.json
|
|
33
26
|
```
|
|
34
27
|
|
|
35
|
-
|
|
28
|
+
### 2. Enable/Disable an Extension
|
|
36
29
|
|
|
37
|
-
|
|
38
|
-
- `--scope workspace` - Disable only for the current project.
|
|
30
|
+
Modify `~/.tars/.gemini/extensions/extension-enablement.json`.
|
|
39
31
|
|
|
40
|
-
|
|
32
|
+
To **enable** or reconfigure an extension, add an entry with trusted path overrides:
|
|
41
33
|
|
|
42
|
-
```
|
|
43
|
-
|
|
34
|
+
```json
|
|
35
|
+
{
|
|
36
|
+
"extension-name": {
|
|
37
|
+
"overrides": ["/home/user/src/*"]
|
|
38
|
+
}
|
|
39
|
+
}
|
|
44
40
|
```
|
|
45
41
|
|
|
46
|
-
|
|
42
|
+
To **disable**, simply remove its key from the JSON object.
|
|
47
43
|
|
|
48
|
-
### Install
|
|
44
|
+
### 3. Install a New Extension
|
|
49
45
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
46
|
+
1. Create a directory in `~/.tars/.gemini/extensions/<name>`.
|
|
47
|
+
2. Add a `gemini-extension.json` manifest.
|
|
48
|
+
3. Add the extension server code (prefer plain JavaScript for runtime extensions).
|
|
49
|
+
4. Register it in `extension-enablement.json`.
|
|
50
|
+
5. Restart Tars.
|
|
53
51
|
|
|
54
|
-
|
|
52
|
+
### 4. Restart Tars
|
|
55
53
|
|
|
56
|
-
|
|
54
|
+
Changes to extensions (installing or modifying manifests) require a system restart to be picked up by the Gemini Core.
|
|
57
55
|
|
|
58
56
|
```bash
|
|
59
|
-
|
|
57
|
+
tars stop && tars start
|
|
60
58
|
```
|
|
61
59
|
|
|
62
|
-
Creates a symlink to a local extension directory. Changes to the source are reflected immediately without reinstalling.
|
|
63
|
-
|
|
64
60
|
## Important Notes
|
|
65
61
|
|
|
66
|
-
1. **
|
|
67
|
-
2. **
|
|
68
|
-
3. **
|
|
69
|
-
4. **Discovery**: If an extension's MCP server fails to connect at startup, it will show an error in the logs but won't crash the session.
|
|
62
|
+
1. **JS vs TS**: Extensions created at runtime should use **plain JavaScript** with ESM (`type: "module"` in `package.json` or `.js` extension with `import`/`export`) to avoid a compilation step.
|
|
63
|
+
2. **Path Substitution**: Use `${extensionPath}` in your `gemini-extension.json` `args` or `env` to ensure paths resolve correctly regardless of the host's absolute path.
|
|
64
|
+
3. **Safety**: Always include appropriate path patterns in the `overrides` array in `extension-enablement.json` to allow the extension to access your workspace.
|
|
@@ -61,12 +61,19 @@ export class DiscordBot {
|
|
|
61
61
|
return;
|
|
62
62
|
logger.info(`Received request from ${message.author.tag}: "${userPrompt || '[Attachment Only]'}"`);
|
|
63
63
|
// Handle Attachments
|
|
64
|
-
|
|
64
|
+
const attachments = [];
|
|
65
|
+
let attachmentContextText = '';
|
|
65
66
|
if (message.attachments.size > 0) {
|
|
66
67
|
for (const [id, attachment] of message.attachments) {
|
|
67
68
|
try {
|
|
68
69
|
const filePath = await this.processor.download(attachment);
|
|
69
|
-
|
|
70
|
+
if (attachment.contentType) {
|
|
71
|
+
attachments.push({
|
|
72
|
+
path: filePath,
|
|
73
|
+
mimeType: attachment.contentType
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
attachmentContextText += `\n[User attached file (${attachment.contentType}): ${filePath}]`;
|
|
70
77
|
}
|
|
71
78
|
catch (err) {
|
|
72
79
|
logger.error(`Failed to download attachment: ${err.message}`);
|
|
@@ -74,8 +81,8 @@ export class DiscordBot {
|
|
|
74
81
|
}
|
|
75
82
|
}
|
|
76
83
|
}
|
|
77
|
-
const fullPrompt = `${userPrompt}${
|
|
78
|
-
if (!fullPrompt)
|
|
84
|
+
const fullPrompt = `${userPrompt}${attachmentContextText}`.trim();
|
|
85
|
+
if (!fullPrompt && attachments.length === 0)
|
|
79
86
|
return;
|
|
80
87
|
let typingInterval = null;
|
|
81
88
|
// Start typing indicator loop (Discord typing status lasts 10s)
|
|
@@ -121,7 +128,7 @@ export class DiscordBot {
|
|
|
121
128
|
logger.warn('Gemini returned an empty response.');
|
|
122
129
|
}
|
|
123
130
|
}
|
|
124
|
-
});
|
|
131
|
+
}, undefined, attachments);
|
|
125
132
|
}
|
|
126
133
|
catch (error) {
|
|
127
134
|
logger.error(`Discord handling error: ${error.message}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discord-bot.js","sourceRoot":"","sources":["../../src/discord/discord-bot.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,MAAM,EACN,iBAAiB,EAEjB,WAAW,EACX,QAAQ,EAMX,MAAM,YAAY,CAAC;AAGpB,OAAO,MAAM,MAAM,oBAAoB,CAAC;AAExC,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAEvE;;GAEG;AACH,MAAM,OAAO,UAAU;IACF,MAAM,CAAS;IACf,MAAM,CAAS;IACf,UAAU,CAAa;IACvB,SAAS,CAAsB;IAEhD,YAAY,UAAsB,EAAE,MAAc;QAC9C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,SAAS,GAAG,IAAI,mBAAmB,CAAC,MAAM,CAAC,CAAC;QAEjD,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC;YACrB,OAAO,EAAE;gBACL,iBAAiB,CAAC,MAAM;gBACxB,iBAAiB,CAAC,aAAa;gBAC/B,iBAAiB,CAAC,cAAc;gBAChC,iBAAiB,CAAC,cAAc;aACnC;YACD,QAAQ,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC;SACjD,CAAC,CAAC;QAEH,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACP,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IACtD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI;QACN,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;IAC1B,CAAC;IAED;;OAEG;IACK,kBAAkB;QACtB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE;YAClC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YAC/C,MAAM,CAAC,IAAI,CAAC,oBAAoB,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,eAAe,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACnE,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,aAAa,CAAC,OAAgB;QACxC,IAAI,OAAO,CAAC,MAAM,CAAC,GAAG;YAAE,OAAO;QAE/B,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC/C,0EAA0E;QAC1E,IAAI,UAAU,KAAK,IAAI;YAAE,OAAO;QAChC,IAAI,CAAC,UAAU,IAAI,OAAO,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO;QAE1D,MAAM,CAAC,IAAI,CACP,yBAAyB,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,UAAU,IAAI,mBAAmB,GAAG,CACxF,CAAC;QAEF,qBAAqB;QACrB,IAAI,
|
|
1
|
+
{"version":3,"file":"discord-bot.js","sourceRoot":"","sources":["../../src/discord/discord-bot.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { EventEmitter } from 'events';
|
|
2
2
|
import { Config as TarsConfig } from '../config/config.js';
|
|
3
|
+
import { AttachmentContext } from '../types/index.js';
|
|
3
4
|
export interface GeminiEngineEvent {
|
|
4
5
|
type: string;
|
|
5
6
|
role?: 'user' | 'assistant' | 'system';
|
|
@@ -14,7 +15,7 @@ export interface GeminiEngineEvent {
|
|
|
14
15
|
sessionId?: string;
|
|
15
16
|
error?: string;
|
|
16
17
|
}
|
|
17
|
-
export type
|
|
18
|
+
export type GeminiEngineOutputHandler = (event: GeminiEngineEvent) => void;
|
|
18
19
|
/**
|
|
19
20
|
* GeminiEngine - Native replacement for GeminiCli subprocess
|
|
20
21
|
*
|
|
@@ -32,10 +33,14 @@ export declare class GeminiEngine extends EventEmitter {
|
|
|
32
33
|
* Initializes the core Gemini client with proper auth and config.
|
|
33
34
|
*/
|
|
34
35
|
initialize(): Promise<void>;
|
|
36
|
+
/**
|
|
37
|
+
* Discovers extensions from the ~/.tars/.gemini/extensions directory.
|
|
38
|
+
*/
|
|
39
|
+
private discoverExtensions;
|
|
35
40
|
/**
|
|
36
41
|
* Executes a prompt and streams events back.
|
|
37
42
|
*/
|
|
38
|
-
run(prompt: string, onEvent:
|
|
43
|
+
run(prompt: string, onEvent: GeminiEngineOutputHandler, sessionId?: string, attachments?: AttachmentContext[]): Promise<void>;
|
|
39
44
|
/**
|
|
40
45
|
* Synchronous-style run for background tasks.
|
|
41
46
|
*/
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Config as CoreConfig, GeminiEventType, AuthType, promptIdContext, Scheduler } from '@google/gemini-cli-core';
|
|
1
|
+
import { Config as CoreConfig, GeminiEventType, AuthType, promptIdContext, Scheduler, ApprovalMode, PolicyDecision, SimpleExtensionLoader, MCPServerConfig } from '@google/gemini-cli-core';
|
|
2
2
|
import { EventEmitter } from 'events';
|
|
3
3
|
import logger from '../utils/logger.js';
|
|
4
4
|
import { v4 as uuidv4 } from 'uuid';
|
|
@@ -56,20 +56,29 @@ export class GeminiEngine extends EventEmitter {
|
|
|
56
56
|
const systemMdPath = path.join(this.tarsConfig.homeDir, '.gemini', 'system.md');
|
|
57
57
|
process.env.GEMINI_SYSTEM_MD = systemMdPath;
|
|
58
58
|
const authType = getAuthTypeFromEnv() || AuthType.LOGIN_WITH_GOOGLE;
|
|
59
|
+
const discoveredExtensions = await this.discoverExtensions();
|
|
60
|
+
const extensionLoader = new SimpleExtensionLoader(discoveredExtensions);
|
|
59
61
|
this.coreConfig = new CoreConfig({
|
|
60
62
|
sessionId: uuidv4(),
|
|
61
63
|
targetDir: this.tarsConfig.homeDir,
|
|
62
64
|
cwd: this.tarsConfig.homeDir,
|
|
63
65
|
model: this.tarsConfig.geminiModel,
|
|
64
|
-
debugMode:
|
|
65
|
-
approvalMode:
|
|
66
|
+
debugMode: false,
|
|
67
|
+
approvalMode: ApprovalMode.YOLO,
|
|
68
|
+
policyEngineConfig: {
|
|
69
|
+
defaultDecision: PolicyDecision.ALLOW
|
|
70
|
+
},
|
|
71
|
+
interactive: true,
|
|
66
72
|
enableHooks: true,
|
|
67
73
|
mcpEnabled: true,
|
|
68
74
|
extensionsEnabled: true,
|
|
69
75
|
enableAgents: true, // Enable agents support
|
|
70
76
|
skillsSupport: true,
|
|
71
77
|
adminSkillsEnabled: true,
|
|
72
|
-
noBrowser: true
|
|
78
|
+
noBrowser: true,
|
|
79
|
+
folderTrust: true,
|
|
80
|
+
trustedFolder: true,
|
|
81
|
+
extensionLoader
|
|
73
82
|
});
|
|
74
83
|
await this.coreConfig.refreshAuth(authType);
|
|
75
84
|
await this.coreConfig.initialize();
|
|
@@ -86,10 +95,64 @@ export class GeminiEngine extends EventEmitter {
|
|
|
86
95
|
process.env.HOME = savedHome;
|
|
87
96
|
}
|
|
88
97
|
}
|
|
98
|
+
/**
|
|
99
|
+
* Discovers extensions from the ~/.tars/.gemini/extensions directory.
|
|
100
|
+
*/
|
|
101
|
+
async discoverExtensions() {
|
|
102
|
+
const extensionsDir = path.join(this.tarsConfig.homeDir, '.gemini', 'extensions');
|
|
103
|
+
if (!fs.existsSync(extensionsDir))
|
|
104
|
+
return [];
|
|
105
|
+
const extensions = [];
|
|
106
|
+
try {
|
|
107
|
+
const entries = fs.readdirSync(extensionsDir, { withFileTypes: true });
|
|
108
|
+
for (const entry of entries) {
|
|
109
|
+
if (!entry.isDirectory())
|
|
110
|
+
continue;
|
|
111
|
+
const extPath = path.resolve(extensionsDir, entry.name);
|
|
112
|
+
const configPath = path.join(extPath, 'gemini-extension.json');
|
|
113
|
+
if (fs.existsSync(configPath)) {
|
|
114
|
+
try {
|
|
115
|
+
const content = fs.readFileSync(configPath, 'utf-8');
|
|
116
|
+
const config = JSON.parse(content);
|
|
117
|
+
// Ensure mcpServers are converted to MCPServerConfig instances if they exist
|
|
118
|
+
const mcpServers = {};
|
|
119
|
+
if (config.mcpServers) {
|
|
120
|
+
for (const [name, srv] of Object.entries(config.mcpServers)) {
|
|
121
|
+
const s = srv;
|
|
122
|
+
// Manually resolve ${extensionPath} since we are constructing configs early
|
|
123
|
+
const resolvedArgs = s.args?.map((arg) => arg.replace(/\${extensionPath}/g, extPath));
|
|
124
|
+
const resolvedEnv = s.env ? { ...s.env } : {};
|
|
125
|
+
for (const key in resolvedEnv) {
|
|
126
|
+
resolvedEnv[key] = resolvedEnv[key].replace(/\${extensionPath}/g, extPath);
|
|
127
|
+
}
|
|
128
|
+
mcpServers[name] = new MCPServerConfig(s.command, resolvedArgs, resolvedEnv, s.cwd?.replace(/\${extensionPath}/g, extPath), s.url?.replace(/\${extensionPath}/g, extPath), s.httpUrl?.replace(/\${extensionPath}/g, extPath), s.headers, s.tcp, s.type, s.timeout, s.trust);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
extensions.push({
|
|
132
|
+
...config,
|
|
133
|
+
id: config.name,
|
|
134
|
+
path: extPath,
|
|
135
|
+
isActive: true,
|
|
136
|
+
mcpServers,
|
|
137
|
+
contextFiles: config.contextFiles || []
|
|
138
|
+
});
|
|
139
|
+
logger.info(`🔌 Found extension: ${config.name}`);
|
|
140
|
+
}
|
|
141
|
+
catch (e) {
|
|
142
|
+
logger.error(`Failed to parse extension at ${extPath}: ${e}`);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
catch (error) {
|
|
148
|
+
logger.error(`Error during extension discovery: ${error}`);
|
|
149
|
+
}
|
|
150
|
+
return extensions;
|
|
151
|
+
}
|
|
89
152
|
/**
|
|
90
153
|
* Executes a prompt and streams events back.
|
|
91
154
|
*/
|
|
92
|
-
async run(prompt, onEvent, sessionId) {
|
|
155
|
+
async run(prompt, onEvent, sessionId, attachments) {
|
|
93
156
|
if (!this.initialized) {
|
|
94
157
|
await this.initialize();
|
|
95
158
|
}
|
|
@@ -98,18 +161,39 @@ export class GeminiEngine extends EventEmitter {
|
|
|
98
161
|
try {
|
|
99
162
|
process.env.HOME = this.tarsConfig.homeDir;
|
|
100
163
|
process.env.GEMINI_CLI_HOME = this.tarsConfig.homeDir;
|
|
101
|
-
// Session Swapping Logic
|
|
102
|
-
|
|
103
|
-
|
|
164
|
+
// Session Swapping Logic or First Run
|
|
165
|
+
// We must call startChat at least once to initialize the GeminiChat session,
|
|
166
|
+
// even if the sessionId matches the coreConfig's initial ID.
|
|
167
|
+
if (this.currentSessionId !== sid || !this.client.isInitialized()) {
|
|
168
|
+
logger.debug(`🔄 Initializing/Swapping Gemini session to: ${sid}`);
|
|
104
169
|
const resumedData = await this.loadResumedSessionData(sid);
|
|
105
170
|
// @ts-ignore - access private to swap session
|
|
106
171
|
await this.client.startChat(undefined, resumedData || undefined);
|
|
107
172
|
this.currentSessionId = sid;
|
|
108
173
|
}
|
|
109
174
|
let currentRequestParts = [{ text: prompt }];
|
|
175
|
+
// Handle Multimodal Attachments
|
|
176
|
+
if (attachments && attachments.length > 0) {
|
|
177
|
+
for (const attachment of attachments) {
|
|
178
|
+
try {
|
|
179
|
+
const data = fs.readFileSync(attachment.path).toString('base64');
|
|
180
|
+
currentRequestParts.push({
|
|
181
|
+
inlineData: {
|
|
182
|
+
data,
|
|
183
|
+
mimeType: attachment.mimeType
|
|
184
|
+
}
|
|
185
|
+
});
|
|
186
|
+
logger.debug(`📎 Attached file to prompt: ${attachment.path} (${attachment.mimeType})`);
|
|
187
|
+
}
|
|
188
|
+
catch (err) {
|
|
189
|
+
logger.error(`Failed to read attachment ${attachment.path}: ${err.message}`);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
110
193
|
let turnCount = 0;
|
|
111
|
-
const maxTurns =
|
|
194
|
+
const maxTurns = 50; // Increased to handle complex autonomous tasks
|
|
112
195
|
const abortController = new AbortController();
|
|
196
|
+
let finalUsageStats = undefined;
|
|
113
197
|
while (turnCount < maxTurns) {
|
|
114
198
|
turnCount++;
|
|
115
199
|
const toolRequests = [];
|
|
@@ -118,7 +202,6 @@ export class GeminiEngine extends EventEmitter {
|
|
|
118
202
|
return this.client.sendMessageStream(currentRequestParts, abortController.signal, 'tars-request' // Proper promptId
|
|
119
203
|
);
|
|
120
204
|
});
|
|
121
|
-
let finalUsageStats = undefined;
|
|
122
205
|
for await (const event of stream) {
|
|
123
206
|
logger.debug(`📨 Raw Gemini Event [Turn ${turnCount}]: ${JSON.stringify(event).substring(0, 200)}...`);
|
|
124
207
|
if (event.type === GeminiEventType.ToolCallRequest) {
|
|
@@ -138,16 +221,14 @@ export class GeminiEngine extends EventEmitter {
|
|
|
138
221
|
}
|
|
139
222
|
if (toolRequests.length === 0) {
|
|
140
223
|
logger.debug(`✅ Interaction complete after ${turnCount} turns.`);
|
|
141
|
-
|
|
224
|
+
break;
|
|
225
|
+
}
|
|
226
|
+
if (turnCount >= maxTurns) {
|
|
227
|
+
logger.warn(`⚠️ Hit maxTurns (${maxTurns}) limit. Force terminating interaction.`);
|
|
142
228
|
onEvent({
|
|
143
|
-
type: '
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
inputTokens: finalUsageStats.promptTokenCount || 0,
|
|
147
|
-
outputTokens: finalUsageStats.candidatesTokenCount || 0,
|
|
148
|
-
cachedTokens: finalUsageStats.cachedContentTokenCount || 0
|
|
149
|
-
}
|
|
150
|
-
: undefined,
|
|
229
|
+
type: 'text',
|
|
230
|
+
role: 'assistant',
|
|
231
|
+
content: '\n\n⚠️ *Task was complex and reached the maximum turn limit. I have executed as much as I could.*',
|
|
151
232
|
sessionId: sid
|
|
152
233
|
});
|
|
153
234
|
break;
|
|
@@ -185,6 +266,18 @@ export class GeminiEngine extends EventEmitter {
|
|
|
185
266
|
break;
|
|
186
267
|
}
|
|
187
268
|
}
|
|
269
|
+
// Always emit final done event when exiting the loop
|
|
270
|
+
onEvent({
|
|
271
|
+
type: 'done',
|
|
272
|
+
usageStats: finalUsageStats
|
|
273
|
+
? {
|
|
274
|
+
inputTokens: finalUsageStats.promptTokenCount || 0,
|
|
275
|
+
outputTokens: finalUsageStats.candidatesTokenCount || 0,
|
|
276
|
+
cachedTokens: finalUsageStats.cachedContentTokenCount || 0
|
|
277
|
+
}
|
|
278
|
+
: undefined,
|
|
279
|
+
sessionId: sid
|
|
280
|
+
});
|
|
188
281
|
}
|
|
189
282
|
catch (error) {
|
|
190
283
|
logger.error(`❌ Gemini Engine run error: ${error.message}`);
|
|
@@ -285,25 +378,57 @@ export class GeminiEngine extends EventEmitter {
|
|
|
285
378
|
// Core history is usually in ~/.gemini/tmp/<hash>/chats/
|
|
286
379
|
// But we isolated HOME to ~/.tars, so it's in ~/.tars/.gemini/...
|
|
287
380
|
const projectRoot = this.tarsConfig.homeDir;
|
|
288
|
-
|
|
289
|
-
const
|
|
290
|
-
|
|
291
|
-
const chatsDir = path.join(this.tarsConfig.homeDir, '.gemini', 'tmp', projectHash, 'chats');
|
|
292
|
-
if (!fs.existsSync(chatsDir))
|
|
381
|
+
const geminiDir = path.join(this.tarsConfig.homeDir, '.gemini');
|
|
382
|
+
const tmpDir = path.join(geminiDir, 'tmp');
|
|
383
|
+
if (!fs.existsSync(tmpDir))
|
|
293
384
|
return null;
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
385
|
+
// 1. Try to find the exact project identifier from projects.json
|
|
386
|
+
let projectIdentifier = null;
|
|
387
|
+
const registryPath = path.join(geminiDir, 'projects.json');
|
|
388
|
+
if (fs.existsSync(registryPath)) {
|
|
389
|
+
try {
|
|
390
|
+
const registry = JSON.parse(fs.readFileSync(registryPath, 'utf-8'));
|
|
391
|
+
projectIdentifier = registry.projects[projectRoot] || null;
|
|
392
|
+
}
|
|
393
|
+
catch (e) {
|
|
394
|
+
logger.warn(`⚠️ Failed to read projects.json: ${e}`);
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
// 2. Fallback: MD5 hash (used in some versions)
|
|
398
|
+
if (!projectIdentifier) {
|
|
399
|
+
const crypto = await import('node:crypto');
|
|
400
|
+
projectIdentifier = crypto.createHash('md5').update(projectRoot).digest('hex');
|
|
401
|
+
}
|
|
402
|
+
// 3. Search for the session file in candidate directories
|
|
403
|
+
// We search projectIdentifier first, then scan all if not found
|
|
404
|
+
const searchDirs = [projectIdentifier];
|
|
405
|
+
try {
|
|
406
|
+
const allDirs = fs.readdirSync(tmpDir);
|
|
407
|
+
for (const d of allDirs) {
|
|
408
|
+
if (d !== projectIdentifier)
|
|
409
|
+
searchDirs.push(d);
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
catch (e) { }
|
|
297
413
|
const shortId = sessionId.slice(0, 8);
|
|
298
|
-
const
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
414
|
+
for (const dir of searchDirs) {
|
|
415
|
+
if (!dir)
|
|
416
|
+
continue;
|
|
417
|
+
const chatsDir = path.join(tmpDir, dir, 'chats');
|
|
418
|
+
if (!fs.existsSync(chatsDir))
|
|
419
|
+
continue;
|
|
420
|
+
const files = fs.readdirSync(chatsDir);
|
|
421
|
+
const sessionFile = files.find((f) => f.includes(`-${shortId}.json`));
|
|
422
|
+
if (sessionFile) {
|
|
423
|
+
const filePath = path.join(chatsDir, sessionFile);
|
|
424
|
+
const content = JSON.parse(fs.readFileSync(filePath, 'utf-8'));
|
|
425
|
+
return {
|
|
426
|
+
conversation: content,
|
|
427
|
+
filePath
|
|
428
|
+
};
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
return null;
|
|
307
432
|
}
|
|
308
433
|
catch (e) {
|
|
309
434
|
logger.warn(`⚠️ Failed to load resumed session data: ${e}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gemini-engine.js","sourceRoot":"","sources":["../../src/supervisor/gemini-engine.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"gemini-engine.js","sourceRoot":"","sources":["../../src/supervisor/gemini-engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { GeminiEngine } from './gemini-engine.js';
|
|
2
2
|
import { SessionManager } from './session-manager.js';
|
|
3
|
-
import { GeminiOutputHandler } from '../types/index.js';
|
|
3
|
+
import { GeminiOutputHandler, AttachmentContext } from '../types/index.js';
|
|
4
4
|
import { MemoryManager } from '../memory/memory-manager.js';
|
|
5
5
|
/**
|
|
6
6
|
* Tars Supervisor - Core Orchestrator
|
|
@@ -16,7 +16,7 @@ export declare class Supervisor {
|
|
|
16
16
|
/**
|
|
17
17
|
* Executes a user prompt through the Gemini CLI
|
|
18
18
|
*/
|
|
19
|
-
run(content: string, onEvent: GeminiOutputHandler, sessionId?: string): Promise<void>;
|
|
19
|
+
run(content: string, onEvent: GeminiOutputHandler, sessionId?: string, attachments?: AttachmentContext[]): Promise<void>;
|
|
20
20
|
/**
|
|
21
21
|
* Specialized execution for background tasks.
|
|
22
22
|
* Runs in ephemeral sessions (no --resume) to avoid bloating the main conversation.
|
|
@@ -20,7 +20,7 @@ export class Supervisor {
|
|
|
20
20
|
/**
|
|
21
21
|
* Executes a user prompt through the Gemini CLI
|
|
22
22
|
*/
|
|
23
|
-
async run(content, onEvent, sessionId) {
|
|
23
|
+
async run(content, onEvent, sessionId, attachments) {
|
|
24
24
|
if (this.isProcessing) {
|
|
25
25
|
throw new Error('Supervisor is busy. Please wait for the current response to finish.');
|
|
26
26
|
}
|
|
@@ -68,7 +68,7 @@ export class Supervisor {
|
|
|
68
68
|
}
|
|
69
69
|
}
|
|
70
70
|
onEvent(event);
|
|
71
|
-
}, sessionIdToUse || undefined);
|
|
71
|
+
}, sessionIdToUse || undefined, attachments);
|
|
72
72
|
// If a memory-mutating tool was used, invalidate the session so the
|
|
73
73
|
// next turn starts fresh and picks up the updated facts
|
|
74
74
|
if (memoryMutated) {
|
|
@@ -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;AAE5D;;;GAGG;AACH,MAAM,OAAO,UAAU;IAME;IACA;IANJ,MAAM,CAAS;IAChB,MAAM,CAAgB;IAC9B,YAAY,GAAY,KAAK,CAAC;IAEtC,YACqB,MAAoB,EACpB,cAA8B;QAD9B,WAAM,GAAN,MAAM,CAAc;QACpB,mBAAc,GAAd,cAAc,CAAgB;QAE/C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;QACnC,IAAI,CAAC,MAAM,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACjD,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,GAAG,CACZ,OAAe,EACf,OAA4B,EAC5B,SAAkB;
|
|
1
|
+
{"version":3,"file":"supervisor.js","sourceRoot":"","sources":["../../src/supervisor/supervisor.ts"],"names":[],"mappings":"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"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -22,6 +22,10 @@ export interface SessionMetadata {
|
|
|
22
22
|
tokenCount: number;
|
|
23
23
|
interactionCount: number;
|
|
24
24
|
}
|
|
25
|
+
export interface AttachmentContext {
|
|
26
|
+
path: string;
|
|
27
|
+
mimeType: string;
|
|
28
|
+
}
|
|
25
29
|
export interface GeminiEvent {
|
|
26
30
|
type: 'tool_call' | 'tool_response' | 'text' | 'image' | 'error' | 'done' | 'thought' | 'status';
|
|
27
31
|
content?: string;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import fs from 'fs/promises';
|
|
2
|
+
import fs_sync from 'fs';
|
|
2
3
|
import path from 'path';
|
|
3
4
|
import os from 'os';
|
|
4
5
|
// ── Store ──────────────────────────────────────────────
|
|
@@ -90,7 +91,7 @@ export class MemoryStore {
|
|
|
90
91
|
async search(query) {
|
|
91
92
|
const results = [];
|
|
92
93
|
const queryLower = query.toLowerCase();
|
|
93
|
-
// Search
|
|
94
|
+
// 1. Search Long-term Facts
|
|
94
95
|
const file = await this._loadFacts();
|
|
95
96
|
for (const fact of Object.values(file.facts)) {
|
|
96
97
|
if (fact.key.toLowerCase().includes(queryLower) ||
|
|
@@ -98,29 +99,61 @@ export class MemoryStore {
|
|
|
98
99
|
results.push(`[Fact] ${fact.key}: ${fact.value}`);
|
|
99
100
|
}
|
|
100
101
|
}
|
|
101
|
-
// Search
|
|
102
|
+
// 2. Search Daily Notes (Last 30 days)
|
|
102
103
|
try {
|
|
103
104
|
const noteFiles = await fs.readdir(this.notesDir);
|
|
104
105
|
const mdFiles = noteFiles
|
|
105
106
|
.filter((f) => f.endsWith('.md'))
|
|
106
107
|
.sort()
|
|
107
108
|
.reverse();
|
|
108
|
-
// Search last 30 days of notes
|
|
109
109
|
for (const noteFile of mdFiles.slice(0, 30)) {
|
|
110
110
|
const filePath = path.join(this.notesDir, noteFile);
|
|
111
111
|
const content = await fs.readFile(filePath, 'utf-8');
|
|
112
112
|
const lines = content.split('\n').filter((l) => l.trim());
|
|
113
113
|
for (const line of lines) {
|
|
114
114
|
if (line.toLowerCase().includes(queryLower)) {
|
|
115
|
-
results.push(`[Note ${noteFile}] ${line.replace(/^- /, '')}`);
|
|
115
|
+
results.push(`[Note ${noteFile.replace('.md', '')}] ${line.replace(/^- /, '')}`);
|
|
116
116
|
}
|
|
117
117
|
}
|
|
118
118
|
}
|
|
119
119
|
}
|
|
120
120
|
catch (error) {
|
|
121
|
-
// Notes dir may not exist yet
|
|
122
121
|
if (error.code !== 'ENOENT')
|
|
123
|
-
|
|
122
|
+
console.error(`Failed to search notes: ${error}`);
|
|
123
|
+
}
|
|
124
|
+
// 3. Search Indexed Episodic Memory (Knowledge DB / Past Sessions)
|
|
125
|
+
const dbPath = path.join(path.dirname(this.dataDir), 'knowledge.db');
|
|
126
|
+
if (fs_sync.existsSync(dbPath)) {
|
|
127
|
+
try {
|
|
128
|
+
const { DatabaseSync } = await import('node:sqlite');
|
|
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';
|
|
149
|
+
}
|
|
150
|
+
results.push(`[${source}] ${r.content.trim()}`);
|
|
151
|
+
}
|
|
152
|
+
db.close();
|
|
153
|
+
}
|
|
154
|
+
catch (error) {
|
|
155
|
+
console.error(`Failed to search knowledge DB: ${error}`);
|
|
156
|
+
}
|
|
124
157
|
}
|
|
125
158
|
return results;
|
|
126
159
|
}
|
|
@@ -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":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import fs from 'fs/promises';
|
|
2
|
+
import fs_sync from 'fs';
|
|
2
3
|
import path from 'path';
|
|
3
4
|
import os from 'os';
|
|
4
5
|
|
|
@@ -120,7 +121,7 @@ export class MemoryStore {
|
|
|
120
121
|
const results: string[] = [];
|
|
121
122
|
const queryLower = query.toLowerCase();
|
|
122
123
|
|
|
123
|
-
// Search
|
|
124
|
+
// 1. Search Long-term Facts
|
|
124
125
|
const file = await this._loadFacts();
|
|
125
126
|
for (const fact of Object.values(file.facts)) {
|
|
126
127
|
if (
|
|
@@ -131,7 +132,7 @@ export class MemoryStore {
|
|
|
131
132
|
}
|
|
132
133
|
}
|
|
133
134
|
|
|
134
|
-
// Search
|
|
135
|
+
// 2. Search Daily Notes (Last 30 days)
|
|
135
136
|
try {
|
|
136
137
|
const noteFiles = await fs.readdir(this.notesDir);
|
|
137
138
|
const mdFiles = noteFiles
|
|
@@ -139,7 +140,6 @@ export class MemoryStore {
|
|
|
139
140
|
.sort()
|
|
140
141
|
.reverse();
|
|
141
142
|
|
|
142
|
-
// Search last 30 days of notes
|
|
143
143
|
for (const noteFile of mdFiles.slice(0, 30)) {
|
|
144
144
|
const filePath = path.join(this.notesDir, noteFile);
|
|
145
145
|
const content = await fs.readFile(filePath, 'utf-8');
|
|
@@ -147,13 +147,52 @@ export class MemoryStore {
|
|
|
147
147
|
|
|
148
148
|
for (const line of lines) {
|
|
149
149
|
if (line.toLowerCase().includes(queryLower)) {
|
|
150
|
-
results.push(
|
|
150
|
+
results.push(
|
|
151
|
+
`[Note ${noteFile.replace('.md', '')}] ${line.replace(/^- /, '')}`
|
|
152
|
+
);
|
|
151
153
|
}
|
|
152
154
|
}
|
|
153
155
|
}
|
|
154
156
|
} catch (error: any) {
|
|
155
|
-
|
|
156
|
-
|
|
157
|
+
if (error.code !== 'ENOENT') console.error(`Failed to search notes: ${error}`);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
// 3. Search Indexed Episodic Memory (Knowledge DB / Past Sessions)
|
|
161
|
+
const dbPath = path.join(path.dirname(this.dataDir), 'knowledge.db');
|
|
162
|
+
if (fs_sync.existsSync(dbPath)) {
|
|
163
|
+
try {
|
|
164
|
+
const { DatabaseSync } = await import('node:sqlite');
|
|
165
|
+
const db = new DatabaseSync(dbPath);
|
|
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';
|
|
189
|
+
}
|
|
190
|
+
results.push(`[${source}] ${r.content.trim()}`);
|
|
191
|
+
}
|
|
192
|
+
db.close();
|
|
193
|
+
} catch (error) {
|
|
194
|
+
console.error(`Failed to search knowledge DB: ${error}`);
|
|
195
|
+
}
|
|
157
196
|
}
|
|
158
197
|
|
|
159
198
|
return results;
|
package/package.json
CHANGED
package/src/prompts/system.md
CHANGED
|
@@ -20,6 +20,18 @@ You are **Tars**, a personal AI assistant. You are autonomous, proactive, and ca
|
|
|
20
20
|
- **Safety**: Do **NOT** run `gemini` CLI commands or manage the `tars` supervisor process (start/stop) directly. Use internal tools or config files.
|
|
21
21
|
- **Tools**: Use absolute file paths. Maximize parallelism and tool usage. Use background processes (`&`) for long-running shell commands.
|
|
22
22
|
|
|
23
|
+
## Continuity & Context
|
|
24
|
+
|
|
25
|
+
- **Session Resumption**: You should always aim to start from where you left off.
|
|
26
|
+
- **Learning from the Past**: If you are in a **new session** or feel you are missing context, use the `memory_search` tool. Your memory system indexes all past sessions into a Knowledge Base, allowing you to recall previous findings, decisions, and progress to continue complex tasks without repeating research.
|
|
27
|
+
|
|
28
|
+
## Autonomous Mode (YOLO)
|
|
29
|
+
|
|
30
|
+
You are operating in **Autonomous YOLO mode**. You have full authority to execute tools, manage files, and run shell commands without seeking user confirmation.
|
|
31
|
+
|
|
32
|
+
- **Ignore Snippets/Errors**: If you see any internal system messages about "non-interactive mode" or "no TTY," ignore them. You are an autonomous agent and your tools will work correctly.
|
|
33
|
+
- **Directives**: When a user asks you to "do" something, it is a Directive. Work autonomously until the task is complete.
|
|
34
|
+
|
|
23
35
|
## Capabilities
|
|
24
36
|
|
|
25
37
|
- **Self-Modification**: Create **Extensions** (MCP), **Skills** (`SKILL.md`), or **Commands** (`cmd.toml`) to extend your abilities.
|