@smilique/said 1.0.6 → 1.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent.d.ts +19 -0
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +251 -41
- package/dist/agent.js.map +1 -1
- package/package.json +1 -1
package/dist/agent.d.ts
CHANGED
|
@@ -17,6 +17,7 @@ export interface ConversationContext {
|
|
|
17
17
|
export interface AgentConfig extends ServiceConfig {
|
|
18
18
|
systemPrompt?: string;
|
|
19
19
|
maxContextLength?: number;
|
|
20
|
+
maxToolIterations?: number;
|
|
20
21
|
}
|
|
21
22
|
export interface ChatMessage {
|
|
22
23
|
role: 'system' | 'user' | 'assistant';
|
|
@@ -39,8 +40,12 @@ export declare class Agent extends Service {
|
|
|
39
40
|
private systemPrompt;
|
|
40
41
|
private contexts;
|
|
41
42
|
private maxContextLength;
|
|
43
|
+
private maxToolIterations;
|
|
42
44
|
private skillRegistry;
|
|
45
|
+
private skillAliases;
|
|
43
46
|
constructor(config: AgentConfig, eventEmitter?: EventEmitter);
|
|
47
|
+
private getEnvironmentInfo;
|
|
48
|
+
private buildSystemPrompt;
|
|
44
49
|
setProvider(provider: LLMProvider | null): void;
|
|
45
50
|
getSkillRegistry(): SkillRegistry;
|
|
46
51
|
registerSkill(skill: Skill): void;
|
|
@@ -50,6 +55,20 @@ export declare class Agent extends Service {
|
|
|
50
55
|
start(): Promise<void>;
|
|
51
56
|
stop(): Promise<void>;
|
|
52
57
|
getLastTokenUsage(): TokenUsage;
|
|
58
|
+
/**
|
|
59
|
+
* Resolve skill name (handle aliases)
|
|
60
|
+
*/
|
|
61
|
+
private resolveSkillName;
|
|
62
|
+
/**
|
|
63
|
+
* Execute a skill from an LLM response string
|
|
64
|
+
* Returns {skillResult, remainingResponse, skillNotFound} if skill found
|
|
65
|
+
* Returns null if no skill pattern found in response
|
|
66
|
+
*/
|
|
67
|
+
private executeSkillFromResponse;
|
|
68
|
+
/**
|
|
69
|
+
* Trim conversation context to keep it within limits
|
|
70
|
+
*/
|
|
71
|
+
private trimContext;
|
|
53
72
|
processMessage(chatId: number, userMessage: string): Promise<string>;
|
|
54
73
|
processMessageStream(chatId: number, userMessage: string): Promise<AsyncIterable<string>>;
|
|
55
74
|
clearContext(chatId: number): void;
|
package/dist/agent.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAE3D,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
|
package/dist/agent.js
CHANGED
|
@@ -1,39 +1,120 @@
|
|
|
1
1
|
import { Service } from './service.js';
|
|
2
2
|
import { loadConfig } from './config.js';
|
|
3
|
+
import { cpus, userInfo, platform, hostname, homedir } from 'os';
|
|
3
4
|
import { globalSkillRegistry } from './skills/registry.js';
|
|
4
5
|
export class Agent extends Service {
|
|
5
6
|
provider = null;
|
|
6
|
-
systemPrompt =
|
|
7
|
-
|
|
8
|
-
1. **Using Skills** - You have access to skills that can interact with the filesystem, browse the web, make API calls, and execute custom tools. When a user asks for something that requires these capabilities, use the appropriate skill.
|
|
9
|
-
|
|
10
|
-
2. **Skills Available**:
|
|
11
|
-
- file-edit: Read, write, and manage files on the filesystem
|
|
12
|
-
- web-surf: Fetch and parse web pages and URLs
|
|
13
|
-
- api-call: Make HTTP API requests
|
|
14
|
-
- tool-call: Execute custom tools and commands
|
|
15
|
-
|
|
16
|
-
3. **Job Scheduling** - You can schedule background jobs that run on cron schedules (like daily reminders, periodic checks, etc.)
|
|
17
|
-
|
|
18
|
-
4. **Subagents** - You can spawn and manage subagents to handle parallel tasks.
|
|
19
|
-
|
|
20
|
-
When a skill is needed, respond with the skill invocation in format: [[skillName:action '{"param": "value"}']]
|
|
21
|
-
Example: [[file-edit:read '{"path": "/tmp/test.txt"}']]
|
|
22
|
-
Example: [[web-surf:fetch '{"url": "https://example.com"}']]
|
|
23
|
-
|
|
24
|
-
Otherwise, respond as a helpful assistant. Be concise and accurate.`;
|
|
7
|
+
systemPrompt = '';
|
|
25
8
|
contexts = new Map();
|
|
26
9
|
maxContextLength = 10;
|
|
10
|
+
maxToolIterations = 5;
|
|
27
11
|
skillRegistry;
|
|
12
|
+
skillAliases = new Map([
|
|
13
|
+
// Map common short names to actual skill names
|
|
14
|
+
['file', 'file-edit'],
|
|
15
|
+
['files', 'file-edit'],
|
|
16
|
+
['filesystem', 'file-edit'],
|
|
17
|
+
['edit', 'file-edit'],
|
|
18
|
+
['tool', 'tool-call'],
|
|
19
|
+
['tools', 'tool-call'],
|
|
20
|
+
['shell', 'tool-call'],
|
|
21
|
+
['cmd', 'tool-call'],
|
|
22
|
+
['command', 'tool-call'],
|
|
23
|
+
['web', 'web-surf'],
|
|
24
|
+
['browse', 'web-surf'],
|
|
25
|
+
['fetch', 'web-surf'],
|
|
26
|
+
['http', 'api-call'],
|
|
27
|
+
['request', 'api-call'],
|
|
28
|
+
]);
|
|
28
29
|
constructor(config, eventEmitter) {
|
|
29
30
|
super(config, eventEmitter);
|
|
30
|
-
if (config.systemPrompt) {
|
|
31
|
-
this.systemPrompt = config.systemPrompt;
|
|
32
|
-
}
|
|
33
31
|
if (config.maxContextLength) {
|
|
34
32
|
this.maxContextLength = config.maxContextLength;
|
|
35
33
|
}
|
|
34
|
+
if (config.maxToolIterations) {
|
|
35
|
+
this.maxToolIterations = config.maxToolIterations;
|
|
36
|
+
}
|
|
36
37
|
this.skillRegistry = globalSkillRegistry;
|
|
38
|
+
// Build system prompt with environment context
|
|
39
|
+
const osInfo = this.getEnvironmentInfo();
|
|
40
|
+
const availableSkills = this.listSkills();
|
|
41
|
+
if (config.systemPrompt) {
|
|
42
|
+
this.systemPrompt = config.systemPrompt;
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
this.systemPrompt = this.buildSystemPrompt(osInfo, availableSkills);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
getEnvironmentInfo() {
|
|
49
|
+
const osPlatform = platform();
|
|
50
|
+
const host = hostname();
|
|
51
|
+
const user = userInfo();
|
|
52
|
+
const home = homedir();
|
|
53
|
+
const cpuCount = cpus().length;
|
|
54
|
+
let osName = osPlatform;
|
|
55
|
+
if (osPlatform === 'linux')
|
|
56
|
+
osName = 'Linux';
|
|
57
|
+
else if (osPlatform === 'win32')
|
|
58
|
+
osName = 'Windows';
|
|
59
|
+
else if (osPlatform === 'darwin')
|
|
60
|
+
osName = 'macOS';
|
|
61
|
+
return `
|
|
62
|
+
**Environment:**
|
|
63
|
+
- OS: ${osName} (${osPlatform})
|
|
64
|
+
- Hostname: ${host}
|
|
65
|
+
- User: ${user.username}
|
|
66
|
+
- Home Directory: ${home}
|
|
67
|
+
- CPU Cores: ${cpuCount}
|
|
68
|
+
- Current Working Directory: ${process.cwd()}`;
|
|
69
|
+
}
|
|
70
|
+
buildSystemPrompt(osInfo, skills) {
|
|
71
|
+
const skillList = skills.map(s => ` - ${s.name}: ${s.description}`).join('\n');
|
|
72
|
+
const skillExamples = skills.map(s => {
|
|
73
|
+
if (s.name === 'file-edit') {
|
|
74
|
+
return `For ${s.name}:
|
|
75
|
+
- [[${s.name} '{"operation": "read", "path": "/path/to/file"}']]
|
|
76
|
+
- [[${s.name} '{"operation": "write", "path": "/path/to/file", "content": "text"}']]
|
|
77
|
+
- [[${s.name} '{"operation": "list", "path": "/path/to/dir"}']]
|
|
78
|
+
- [[${s.name} '{"operation": "delete", "path": "/path/to/file"}']]
|
|
79
|
+
- [[${s.name} '{"operation": "mkdir", "path": "/path/to/dir"}']]
|
|
80
|
+
- [[${s.name} '{"operation": "stat", "path": "/path/to/file"}']]`;
|
|
81
|
+
}
|
|
82
|
+
if (s.name === 'web-surf') {
|
|
83
|
+
return `For ${s.name}:
|
|
84
|
+
- [[${s.name} '{"operation": "fetch", "url": "https://example.com"}']]`;
|
|
85
|
+
}
|
|
86
|
+
if (s.name === 'api-call') {
|
|
87
|
+
return `For ${s.name}:
|
|
88
|
+
- [[${s.name} '{"method": "GET", "url": "https://api.example.com/data"}']]
|
|
89
|
+
- [[${s.name} '{"method": "POST", "url": "https://api.example.com/data", "body": {"key": "value"}}']]`;
|
|
90
|
+
}
|
|
91
|
+
if (s.name === 'tool-call') {
|
|
92
|
+
return `For ${s.name}:
|
|
93
|
+
- [[${s.name} '{"command": "ls", "args": ["-la"]}']]
|
|
94
|
+
- [[${s.name} '{"command": "top", "args": ["-bn1"]}']]
|
|
95
|
+
- [[${s.name} '{"command": "node", "args": ["script.js"]}']]`;
|
|
96
|
+
}
|
|
97
|
+
return `For ${s.name}:
|
|
98
|
+
- [[${s.name} '{"param": "value"}']]`;
|
|
99
|
+
}).join('\n');
|
|
100
|
+
return `You are an autonomous AI agent running in a user's environment.${osInfo}
|
|
101
|
+
|
|
102
|
+
**Available Skills (USE THESE EXACT NAMES):**
|
|
103
|
+
${skillList}
|
|
104
|
+
|
|
105
|
+
**Job Scheduling** - You can schedule background jobs that run on cron schedules (like daily reminders, periodic checks, etc.)
|
|
106
|
+
|
|
107
|
+
**Subagents** - You can spawn and manage subagents to handle parallel tasks.
|
|
108
|
+
|
|
109
|
+
**IMPORTANT - How to use skills:**
|
|
110
|
+
When you need to use a skill, respond with ONLY the skill invocation in this exact format. Do NOT include any other text in your response:
|
|
111
|
+
[[skillName '{"param": "value"}']]
|
|
112
|
+
|
|
113
|
+
${skillExamples}
|
|
114
|
+
|
|
115
|
+
The system will execute the skill and return the result. Then you can respond to the user with the actual answer based on the tool result.
|
|
116
|
+
|
|
117
|
+
For normal responses (without skills), just respond as a helpful assistant. Be concise and accurate.`;
|
|
37
118
|
}
|
|
38
119
|
setProvider(provider) {
|
|
39
120
|
this.provider = provider;
|
|
@@ -67,16 +148,119 @@ Otherwise, respond as a helpful assistant. Be concise and accurate.`;
|
|
|
67
148
|
}
|
|
68
149
|
return { promptTokens: 0, completionTokens: 0, totalTokens: 0 };
|
|
69
150
|
}
|
|
151
|
+
/**
|
|
152
|
+
* Resolve skill name (handle aliases)
|
|
153
|
+
*/
|
|
154
|
+
resolveSkillName(name) {
|
|
155
|
+
// Check exact match first
|
|
156
|
+
if (this.skillRegistry.has(name)) {
|
|
157
|
+
return name;
|
|
158
|
+
}
|
|
159
|
+
// Check alias
|
|
160
|
+
if (this.skillAliases.has(name)) {
|
|
161
|
+
const resolved = this.skillAliases.get(name);
|
|
162
|
+
console.log(`[Agent] Resolved skill alias: ${name} -> ${resolved}`);
|
|
163
|
+
return resolved;
|
|
164
|
+
}
|
|
165
|
+
// Check if alias resolves to valid skill
|
|
166
|
+
for (const [alias, target] of this.skillAliases) {
|
|
167
|
+
if (target === name && this.skillRegistry.has(target)) {
|
|
168
|
+
return target;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
return name;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Execute a skill from an LLM response string
|
|
175
|
+
* Returns {skillResult, remainingResponse, skillNotFound} if skill found
|
|
176
|
+
* Returns null if no skill pattern found in response
|
|
177
|
+
*/
|
|
178
|
+
async executeSkillFromResponse(response, chatId) {
|
|
179
|
+
// Match [[skillName:action '{"param": "value"}']] pattern
|
|
180
|
+
const skillPattern = /\[\[(\w+)(?::(\w+))?\s*(.*?)\]\]/;
|
|
181
|
+
const match = response.match(skillPattern);
|
|
182
|
+
if (!match) {
|
|
183
|
+
return null;
|
|
184
|
+
}
|
|
185
|
+
let skillName = match[1];
|
|
186
|
+
const action = match[2] || 'execute';
|
|
187
|
+
const paramsStr = match[3];
|
|
188
|
+
// Resolve skill name (handle aliases like "file" -> "file-edit")
|
|
189
|
+
skillName = this.resolveSkillName(skillName);
|
|
190
|
+
console.log(`[Agent] Executing skill: ${skillName}:${action}`);
|
|
191
|
+
// Check if skill exists
|
|
192
|
+
if (!this.skillRegistry.has(skillName)) {
|
|
193
|
+
const availableSkills = this.listSkills().map(s => s.name).join(', ');
|
|
194
|
+
console.log(`[Agent] Skill not found: ${skillName}. Available: ${availableSkills}`);
|
|
195
|
+
// Remove the skill invocation from response
|
|
196
|
+
const remainingResponse = response.replace(match[0], '').trim();
|
|
197
|
+
return {
|
|
198
|
+
skillResult: `Error: Skill "${skillName}" not found. Available skills: ${availableSkills}`,
|
|
199
|
+
remainingResponse,
|
|
200
|
+
skillNotFound: true, // Flag to stop the loop
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
// Parse params
|
|
204
|
+
let params = {};
|
|
205
|
+
if (paramsStr) {
|
|
206
|
+
try {
|
|
207
|
+
params = JSON.parse(paramsStr);
|
|
208
|
+
}
|
|
209
|
+
catch {
|
|
210
|
+
params = { value: paramsStr };
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
// Add action as operation if specified
|
|
214
|
+
if (action && action !== 'execute') {
|
|
215
|
+
params.operation = action;
|
|
216
|
+
}
|
|
217
|
+
// Execute skill
|
|
218
|
+
const skillContext = {
|
|
219
|
+
sessionId: String(chatId),
|
|
220
|
+
};
|
|
221
|
+
const result = await this.skillRegistry.execute(skillName, params, skillContext);
|
|
222
|
+
// Remove the skill invocation from response
|
|
223
|
+
const remainingResponse = response.replace(match[0], '').trim();
|
|
224
|
+
// If skill execution failed, flag to stop retrying
|
|
225
|
+
const skillNotFound = !result.success;
|
|
226
|
+
return {
|
|
227
|
+
skillResult: result.success
|
|
228
|
+
? JSON.stringify(result.data, null, 2)
|
|
229
|
+
: `Error: ${result.error}`,
|
|
230
|
+
remainingResponse,
|
|
231
|
+
skillNotFound,
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Trim conversation context to keep it within limits
|
|
236
|
+
*/
|
|
237
|
+
trimContext(context) {
|
|
238
|
+
const maxMessages = this.maxContextLength + 10; // Buffer for tool results
|
|
239
|
+
if (context.messages.length > maxMessages) {
|
|
240
|
+
const systemMessage = context.messages[0];
|
|
241
|
+
context.messages = [
|
|
242
|
+
systemMessage,
|
|
243
|
+
...context.messages.slice(-this.maxContextLength),
|
|
244
|
+
];
|
|
245
|
+
}
|
|
246
|
+
}
|
|
70
247
|
async processMessage(chatId, userMessage) {
|
|
71
248
|
if (!this.provider) {
|
|
72
249
|
throw new Error('LLM provider not set');
|
|
73
250
|
}
|
|
74
|
-
// Check if message contains a skill invocation
|
|
251
|
+
// Check if message contains a direct skill invocation (from user)
|
|
75
252
|
const skillMatch = userMessage.match(/\[\[(\w+)(?::(\w+))?\s*(.*?)\]\]/);
|
|
76
253
|
if (skillMatch) {
|
|
77
|
-
|
|
254
|
+
let skillName = skillMatch[1];
|
|
78
255
|
const action = skillMatch[2] || 'execute';
|
|
79
256
|
const paramsStr = skillMatch[3];
|
|
257
|
+
// Resolve skill name (handle aliases)
|
|
258
|
+
skillName = this.resolveSkillName(skillName);
|
|
259
|
+
// Check if skill exists
|
|
260
|
+
const availableSkills = this.listSkills().map(s => s.name).join(', ');
|
|
261
|
+
if (!this.skillRegistry.has(skillName)) {
|
|
262
|
+
return `Error: Skill "${skillName}" not found. Available skills: ${availableSkills}`;
|
|
263
|
+
}
|
|
80
264
|
let params = {};
|
|
81
265
|
if (paramsStr) {
|
|
82
266
|
try {
|
|
@@ -87,15 +271,19 @@ Otherwise, respond as a helpful assistant. Be concise and accurate.`;
|
|
|
87
271
|
params = { value: paramsStr };
|
|
88
272
|
}
|
|
89
273
|
}
|
|
274
|
+
// Add action as operation if specified
|
|
275
|
+
if (action && action !== 'execute') {
|
|
276
|
+
params.operation = action;
|
|
277
|
+
}
|
|
90
278
|
const skillContext = {
|
|
91
279
|
sessionId: String(chatId),
|
|
92
280
|
};
|
|
93
281
|
const result = await this.skillRegistry.execute(skillName, params, skillContext);
|
|
94
282
|
if (result.success) {
|
|
95
|
-
return `
|
|
283
|
+
return `Result: ${JSON.stringify(result.data, null, 2)}`;
|
|
96
284
|
}
|
|
97
285
|
else {
|
|
98
|
-
return `
|
|
286
|
+
return `Error: ${result.error}`;
|
|
99
287
|
}
|
|
100
288
|
}
|
|
101
289
|
// Get or create conversation context
|
|
@@ -109,22 +297,44 @@ Otherwise, respond as a helpful assistant. Be concise and accurate.`;
|
|
|
109
297
|
}
|
|
110
298
|
// Add user message
|
|
111
299
|
context.messages.push({ role: 'user', content: userMessage });
|
|
112
|
-
//
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
context
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
300
|
+
// Tool execution loop (ReAct pattern)
|
|
301
|
+
let finalResponse = '';
|
|
302
|
+
for (let iteration = 0; iteration < this.maxToolIterations; iteration++) {
|
|
303
|
+
// Trim context if too long
|
|
304
|
+
this.trimContext(context);
|
|
305
|
+
// Get response from provider
|
|
306
|
+
const response = await this.provider.chatCompletion({
|
|
307
|
+
messages: context.messages,
|
|
308
|
+
});
|
|
309
|
+
// Check if response contains skill invocation
|
|
310
|
+
const skillExec = await this.executeSkillFromResponse(response, chatId);
|
|
311
|
+
if (skillExec) {
|
|
312
|
+
console.log(`[Agent] Skill execution result: ${skillExec.skillResult.substring(0, 100)}...`);
|
|
313
|
+
// Add assistant's skill attempt to context
|
|
314
|
+
if (skillExec.remainingResponse) {
|
|
315
|
+
context.messages.push({ role: 'assistant', content: skillExec.remainingResponse });
|
|
316
|
+
}
|
|
317
|
+
// Add tool result to context
|
|
318
|
+
context.messages.push({
|
|
319
|
+
role: 'system',
|
|
320
|
+
content: `Tool execution result: ${skillExec.skillResult}`,
|
|
321
|
+
});
|
|
322
|
+
// If skill was not found or failed, stop the loop and return error
|
|
323
|
+
if (skillExec.skillNotFound) {
|
|
324
|
+
return skillExec.skillResult;
|
|
325
|
+
}
|
|
326
|
+
// Continue to next iteration to let LLM process the result
|
|
327
|
+
continue;
|
|
328
|
+
}
|
|
329
|
+
// No skill detected - this is the final response
|
|
330
|
+
context.messages.push({ role: 'assistant', content: response });
|
|
331
|
+
finalResponse = response;
|
|
332
|
+
break;
|
|
120
333
|
}
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
// Add assistant response to context
|
|
126
|
-
context.messages.push({ role: 'assistant', content: response });
|
|
127
|
-
return response;
|
|
334
|
+
if (!finalResponse) {
|
|
335
|
+
finalResponse = context.messages[context.messages.length - 1].content || 'Max tool iterations reached';
|
|
336
|
+
}
|
|
337
|
+
return finalResponse;
|
|
128
338
|
}
|
|
129
339
|
async processMessageStream(chatId, userMessage) {
|
|
130
340
|
if (!this.provider) {
|
package/dist/agent.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
|