@smilique/said 1.0.5 → 1.0.7
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 +11 -0
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +132 -19
- package/dist/agent.js.map +1 -1
- package/dist/web-ui.d.ts.map +1 -1
- package/dist/web-ui.js +53 -22
- package/dist/web-ui.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,6 +40,7 @@ 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;
|
|
43
45
|
constructor(config: AgentConfig, eventEmitter?: EventEmitter);
|
|
44
46
|
setProvider(provider: LLMProvider | null): void;
|
|
@@ -50,6 +52,15 @@ export declare class Agent extends Service {
|
|
|
50
52
|
start(): Promise<void>;
|
|
51
53
|
stop(): Promise<void>;
|
|
52
54
|
getLastTokenUsage(): TokenUsage;
|
|
55
|
+
/**
|
|
56
|
+
* Execute a skill from an LLM response string
|
|
57
|
+
* Returns {skillResult, remainingResponse} if skill found, null otherwise
|
|
58
|
+
*/
|
|
59
|
+
private executeSkillFromResponse;
|
|
60
|
+
/**
|
|
61
|
+
* Trim conversation context to keep it within limits
|
|
62
|
+
*/
|
|
63
|
+
private trimContext;
|
|
53
64
|
processMessage(chatId: number, userMessage: string): Promise<string>;
|
|
54
65
|
processMessageStream(chatId: number, userMessage: string): Promise<AsyncIterable<string>>;
|
|
55
66
|
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;AAC7C,OAAO,KAAK,EAAE,KAAK,EAA6B,MAAM,mBAAmB,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAuB,MAAM,sBAAsB,CAAC;AAE1E,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,KAAK,CAAC;QACd,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;QACtC,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;IACH,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAY,SAAQ,aAAa;IAChD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;
|
|
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;AAC7C,OAAO,KAAK,EAAE,KAAK,EAA6B,MAAM,mBAAmB,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAuB,MAAM,sBAAsB,CAAC;AAE1E,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,KAAK,CAAC;QACd,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;QACtC,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;IACH,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAY,SAAQ,aAAa;IAChD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAChE,oBAAoB,CAAC,OAAO,EAAE,qBAAqB,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IAC5E,iBAAiB,CAAC,IAAI,UAAU,CAAC;CAClC;AAED,qBAAa,KAAM,SAAQ,OAAO;IAChC,OAAO,CAAC,QAAQ,CAA4B;IAC5C,OAAO,CAAC,YAAY,CA+BgF;IACpG,OAAO,CAAC,QAAQ,CAA+C;IAC/D,OAAO,CAAC,gBAAgB,CAAc;IACtC,OAAO,CAAC,iBAAiB,CAAa;IACtC,OAAO,CAAC,aAAa,CAAgB;gBAEzB,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC,EAAE,YAAY;IAc5D,WAAW,CAAC,QAAQ,EAAE,WAAW,GAAG,IAAI,GAAG,IAAI;IAI/C,gBAAgB,IAAI,aAAa;IAIjC,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAIjC,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAItC,UAAU,IAAI,KAAK,EAAE;IAIf,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAK3B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAK3B,iBAAiB,IAAI,UAAU;IAO/B;;;OAGG;YACW,wBAAwB;IAmDtC;;OAEG;IACH,OAAO,CAAC,WAAW;IAWb,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAkGpE,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAgC/F,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAIlC,gBAAgB,IAAI,IAAI;CAGzB"}
|
package/dist/agent.js
CHANGED
|
@@ -3,9 +3,41 @@ import { loadConfig } from './config.js';
|
|
|
3
3
|
import { globalSkillRegistry } from './skills/registry.js';
|
|
4
4
|
export class Agent extends Service {
|
|
5
5
|
provider = null;
|
|
6
|
-
systemPrompt =
|
|
6
|
+
systemPrompt = `You are an autonomous AI agent running in a user's environment. You can help users with various tasks by:
|
|
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, delete, list 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
|
+
**IMPORTANT - How to use skills:**
|
|
21
|
+
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:
|
|
22
|
+
[[skillName '{"param": "value"}']]
|
|
23
|
+
|
|
24
|
+
For file-edit skill, use these operations:
|
|
25
|
+
- [[file-edit '{"operation": "read", "path": "/path/to/file"}']]
|
|
26
|
+
- [[file-edit '{"operation": "write", "path": "/path/to/file", "content": "text"}']]
|
|
27
|
+
- [[file-edit '{"operation": "list", "path": "/path/to/dir"}']]
|
|
28
|
+
- [[file-edit '{"operation": "delete", "path": "/path/to/file"}']]
|
|
29
|
+
- [[file-edit '{"operation": "mkdir", "path": "/path/to/dir"}']]
|
|
30
|
+
- [[file-edit '{"operation": "stat", "path": "/path/to/file"}']]
|
|
31
|
+
|
|
32
|
+
For web-surf:
|
|
33
|
+
- [[web-surf '{"operation": "fetch", "url": "https://example.com"}']]
|
|
34
|
+
|
|
35
|
+
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.
|
|
36
|
+
|
|
37
|
+
For normal responses (without skills), just respond as a helpful assistant. Be concise and accurate.`;
|
|
7
38
|
contexts = new Map();
|
|
8
39
|
maxContextLength = 10;
|
|
40
|
+
maxToolIterations = 5;
|
|
9
41
|
skillRegistry;
|
|
10
42
|
constructor(config, eventEmitter) {
|
|
11
43
|
super(config, eventEmitter);
|
|
@@ -15,6 +47,9 @@ export class Agent extends Service {
|
|
|
15
47
|
if (config.maxContextLength) {
|
|
16
48
|
this.maxContextLength = config.maxContextLength;
|
|
17
49
|
}
|
|
50
|
+
if (config.maxToolIterations) {
|
|
51
|
+
this.maxToolIterations = config.maxToolIterations;
|
|
52
|
+
}
|
|
18
53
|
this.skillRegistry = globalSkillRegistry;
|
|
19
54
|
}
|
|
20
55
|
setProvider(provider) {
|
|
@@ -49,11 +84,67 @@ export class Agent extends Service {
|
|
|
49
84
|
}
|
|
50
85
|
return { promptTokens: 0, completionTokens: 0, totalTokens: 0 };
|
|
51
86
|
}
|
|
87
|
+
/**
|
|
88
|
+
* Execute a skill from an LLM response string
|
|
89
|
+
* Returns {skillResult, remainingResponse} if skill found, null otherwise
|
|
90
|
+
*/
|
|
91
|
+
async executeSkillFromResponse(response, chatId) {
|
|
92
|
+
// Match [[skillName:action '{"param": "value"}']] pattern
|
|
93
|
+
const skillPattern = /\[\[(\w+)(?::(\w+))?\s*(.*?)\]\]/;
|
|
94
|
+
const match = response.match(skillPattern);
|
|
95
|
+
if (!match) {
|
|
96
|
+
return null;
|
|
97
|
+
}
|
|
98
|
+
const skillName = match[1];
|
|
99
|
+
const action = match[2] || 'execute';
|
|
100
|
+
const paramsStr = match[3];
|
|
101
|
+
console.log(`[Agent] Executing skill: ${skillName}:${action}`);
|
|
102
|
+
// Parse params
|
|
103
|
+
let params = {};
|
|
104
|
+
if (paramsStr) {
|
|
105
|
+
try {
|
|
106
|
+
params = JSON.parse(paramsStr);
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
params = { value: paramsStr };
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
// Add action as operation if specified
|
|
113
|
+
if (action && action !== 'execute') {
|
|
114
|
+
params.operation = action;
|
|
115
|
+
}
|
|
116
|
+
// Execute skill
|
|
117
|
+
const skillContext = {
|
|
118
|
+
sessionId: String(chatId),
|
|
119
|
+
};
|
|
120
|
+
const result = await this.skillRegistry.execute(skillName, params, skillContext);
|
|
121
|
+
// Remove the skill invocation from response
|
|
122
|
+
const remainingResponse = response.replace(match[0], '').trim();
|
|
123
|
+
return {
|
|
124
|
+
skillResult: result.success
|
|
125
|
+
? JSON.stringify(result.data, null, 2)
|
|
126
|
+
: `Error: ${result.error}`,
|
|
127
|
+
remainingResponse,
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Trim conversation context to keep it within limits
|
|
132
|
+
*/
|
|
133
|
+
trimContext(context) {
|
|
134
|
+
const maxMessages = this.maxContextLength + 10; // Buffer for tool results
|
|
135
|
+
if (context.messages.length > maxMessages) {
|
|
136
|
+
const systemMessage = context.messages[0];
|
|
137
|
+
context.messages = [
|
|
138
|
+
systemMessage,
|
|
139
|
+
...context.messages.slice(-this.maxContextLength),
|
|
140
|
+
];
|
|
141
|
+
}
|
|
142
|
+
}
|
|
52
143
|
async processMessage(chatId, userMessage) {
|
|
53
144
|
if (!this.provider) {
|
|
54
145
|
throw new Error('LLM provider not set');
|
|
55
146
|
}
|
|
56
|
-
// Check if message contains a skill invocation
|
|
147
|
+
// Check if message contains a direct skill invocation (from user)
|
|
57
148
|
const skillMatch = userMessage.match(/\[\[(\w+)(?::(\w+))?\s*(.*?)\]\]/);
|
|
58
149
|
if (skillMatch) {
|
|
59
150
|
const skillName = skillMatch[1];
|
|
@@ -69,15 +160,19 @@ export class Agent extends Service {
|
|
|
69
160
|
params = { value: paramsStr };
|
|
70
161
|
}
|
|
71
162
|
}
|
|
163
|
+
// Add action as operation if specified
|
|
164
|
+
if (action && action !== 'execute') {
|
|
165
|
+
params.operation = action;
|
|
166
|
+
}
|
|
72
167
|
const skillContext = {
|
|
73
168
|
sessionId: String(chatId),
|
|
74
169
|
};
|
|
75
170
|
const result = await this.skillRegistry.execute(skillName, params, skillContext);
|
|
76
171
|
if (result.success) {
|
|
77
|
-
return `
|
|
172
|
+
return `Result: ${JSON.stringify(result.data, null, 2)}`;
|
|
78
173
|
}
|
|
79
174
|
else {
|
|
80
|
-
return `
|
|
175
|
+
return `Error: ${result.error}`;
|
|
81
176
|
}
|
|
82
177
|
}
|
|
83
178
|
// Get or create conversation context
|
|
@@ -91,22 +186,40 @@ export class Agent extends Service {
|
|
|
91
186
|
}
|
|
92
187
|
// Add user message
|
|
93
188
|
context.messages.push({ role: 'user', content: userMessage });
|
|
94
|
-
//
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
context
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
189
|
+
// Tool execution loop (ReAct pattern)
|
|
190
|
+
let finalResponse = '';
|
|
191
|
+
for (let iteration = 0; iteration < this.maxToolIterations; iteration++) {
|
|
192
|
+
// Trim context if too long
|
|
193
|
+
this.trimContext(context);
|
|
194
|
+
// Get response from provider
|
|
195
|
+
const response = await this.provider.chatCompletion({
|
|
196
|
+
messages: context.messages,
|
|
197
|
+
});
|
|
198
|
+
// Check if response contains skill invocation
|
|
199
|
+
const skillExec = await this.executeSkillFromResponse(response, chatId);
|
|
200
|
+
if (skillExec) {
|
|
201
|
+
console.log(`[Agent] Skill execution result: ${skillExec.skillResult.substring(0, 100)}...`);
|
|
202
|
+
// Add assistant's skill attempt to context
|
|
203
|
+
if (skillExec.remainingResponse) {
|
|
204
|
+
context.messages.push({ role: 'assistant', content: skillExec.remainingResponse });
|
|
205
|
+
}
|
|
206
|
+
// Add tool result to context
|
|
207
|
+
context.messages.push({
|
|
208
|
+
role: 'system',
|
|
209
|
+
content: `Tool execution result: ${skillExec.skillResult}`,
|
|
210
|
+
});
|
|
211
|
+
// Continue to next iteration to let LLM process the result
|
|
212
|
+
continue;
|
|
213
|
+
}
|
|
214
|
+
// No skill detected - this is the final response
|
|
215
|
+
context.messages.push({ role: 'assistant', content: response });
|
|
216
|
+
finalResponse = response;
|
|
217
|
+
break;
|
|
102
218
|
}
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
// Add assistant response to context
|
|
108
|
-
context.messages.push({ role: 'assistant', content: response });
|
|
109
|
-
return response;
|
|
219
|
+
if (!finalResponse) {
|
|
220
|
+
finalResponse = context.messages[context.messages.length - 1].content || 'Max tool iterations reached';
|
|
221
|
+
}
|
|
222
|
+
return finalResponse;
|
|
110
223
|
}
|
|
111
224
|
async processMessageStream(chatId, userMessage) {
|
|
112
225
|
if (!this.provider) {
|
package/dist/agent.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAsB,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,OAAO,EAAiB,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
|
package/dist/web-ui.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-ui.d.ts","sourceRoot":"","sources":["../src/web-ui.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAE3D,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,MAAM,WAAW,WAAY,SAAQ,aAAa;IAChD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,qBAAa,YAAa,SAAQ,OAAO;IACvC,OAAO,CAAC,GAAG,CAAU;IACrB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,KAAK,CAAa;IAC1B,OAAO,CAAC,SAAS,CAAa;gBAElB,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC,EAAE,YAAY;IAU5D,QAAQ,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI;IAI1B,YAAY,CAAC,SAAS,EAAE,GAAG,GAAG,IAAI;IAIlC,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,WAAW;
|
|
1
|
+
{"version":3,"file":"web-ui.d.ts","sourceRoot":"","sources":["../src/web-ui.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAE3D,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,MAAM,WAAW,WAAY,SAAQ,aAAa;IAChD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,qBAAa,YAAa,SAAQ,OAAO;IACvC,OAAO,CAAC,GAAG,CAAU;IACrB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,KAAK,CAAa;IAC1B,OAAO,CAAC,SAAS,CAAa;gBAElB,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC,EAAE,YAAY;IAU5D,QAAQ,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI;IAI1B,YAAY,CAAC,SAAS,EAAE,GAAG,GAAG,IAAI;IAIlC,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,WAAW;IAoHnB,OAAO,CAAC,gBAAgB;IAwKlB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAStB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAY5B"}
|
package/dist/web-ui.js
CHANGED
|
@@ -29,35 +29,56 @@ export class WebUIService extends Service {
|
|
|
29
29
|
setupRoutes() {
|
|
30
30
|
// Status endpoint
|
|
31
31
|
this.app.get('/api/status', (req, res) => {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
32
|
+
try {
|
|
33
|
+
res.json({
|
|
34
|
+
status: 'running',
|
|
35
|
+
uptime: process.uptime(),
|
|
36
|
+
version: '1.0.0'
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
catch (err) {
|
|
40
|
+
console.error('[WebUI] Error in /api/status:', err);
|
|
41
|
+
res.status(500).json({ error: String(err) });
|
|
42
|
+
}
|
|
37
43
|
});
|
|
38
44
|
// Configuration endpoints
|
|
39
45
|
this.app.get('/api/config', (req, res) => {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
46
|
+
try {
|
|
47
|
+
const config = loadConfig();
|
|
48
|
+
// Don't expose sensitive data
|
|
49
|
+
const safeConfig = {
|
|
50
|
+
provider: config.provider,
|
|
51
|
+
model: config.model,
|
|
52
|
+
telegram: config.telegram ? { configured: true } : undefined,
|
|
53
|
+
};
|
|
54
|
+
res.json(safeConfig);
|
|
55
|
+
}
|
|
56
|
+
catch (err) {
|
|
57
|
+
console.error('[WebUI] Error in /api/config:', err);
|
|
58
|
+
res.status(500).json({ error: String(err) });
|
|
59
|
+
}
|
|
48
60
|
});
|
|
49
61
|
// Skills endpoints
|
|
50
62
|
this.app.get('/api/skills', (req, res) => {
|
|
63
|
+
console.log('[WebUI] /api/skills called, agent:', !!this.agent);
|
|
51
64
|
if (!this.agent) {
|
|
65
|
+
console.log('[WebUI] Agent not available');
|
|
52
66
|
return res.status(503).json({ error: 'Agent not available' });
|
|
53
67
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
68
|
+
try {
|
|
69
|
+
const skills = this.agent.listSkills();
|
|
70
|
+
console.log('[WebUI] Skills found:', skills.length);
|
|
71
|
+
res.json(skills.map((skill) => ({
|
|
72
|
+
name: skill.name,
|
|
73
|
+
description: skill.description,
|
|
74
|
+
version: skill.version,
|
|
75
|
+
parameters: skill.parameters
|
|
76
|
+
})));
|
|
77
|
+
}
|
|
78
|
+
catch (err) {
|
|
79
|
+
console.error('[WebUI] Error listing skills:', err);
|
|
80
|
+
res.status(500).json({ error: String(err) });
|
|
81
|
+
}
|
|
61
82
|
});
|
|
62
83
|
this.app.post('/api/skills/:name/enable', (req, res) => {
|
|
63
84
|
if (!this.agent) {
|
|
@@ -74,10 +95,20 @@ export class WebUIService extends Service {
|
|
|
74
95
|
});
|
|
75
96
|
// Jobs endpoints (scheduler)
|
|
76
97
|
this.app.get('/api/jobs', (req, res) => {
|
|
98
|
+
console.log('[WebUI] /api/jobs called, scheduler:', !!this.scheduler);
|
|
77
99
|
if (!this.scheduler) {
|
|
100
|
+
console.log('[WebUI] Scheduler not available');
|
|
78
101
|
return res.status(503).json({ error: 'Scheduler not available' });
|
|
79
102
|
}
|
|
80
|
-
|
|
103
|
+
try {
|
|
104
|
+
const jobs = this.scheduler.getJobs();
|
|
105
|
+
console.log('[WebUI] Jobs found:', jobs.length);
|
|
106
|
+
res.json(jobs);
|
|
107
|
+
}
|
|
108
|
+
catch (err) {
|
|
109
|
+
console.error('[WebUI] Error listing jobs:', err);
|
|
110
|
+
res.status(500).json({ error: String(err) });
|
|
111
|
+
}
|
|
81
112
|
});
|
|
82
113
|
this.app.post('/api/jobs', (req, res) => {
|
|
83
114
|
if (!this.scheduler) {
|
|
@@ -257,7 +288,7 @@ export class WebUIService extends Service {
|
|
|
257
288
|
const form = new FormData(e.target);
|
|
258
289
|
await fetch('/api/jobs', {
|
|
259
290
|
method: 'POST',
|
|
260
|
-
headers: { 'Content-Type': '
|
|
291
|
+
headers: { 'Content-Type': 'application/json' },
|
|
261
292
|
body: JSON.stringify(Object.fromEntries(form))
|
|
262
293
|
});
|
|
263
294
|
e.target.reset();
|
package/dist/web-ui.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-ui.js","sourceRoot":"","sources":["../src/web-ui.ts"],"names":[],"mappings":"AAAA,OAAO,OAAuC,MAAM,SAAS,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAsB,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAQzC,MAAM,OAAO,YAAa,SAAQ,OAAO;IAC/B,GAAG,CAAU;IACb,IAAI,CAAS;IACb,IAAI,CAAS;IACb,MAAM,GAAQ,IAAI,CAAC;IACnB,KAAK,GAAQ,IAAI,CAAC;IAClB,SAAS,GAAQ,IAAI,CAAC;IAE9B,YAAY,MAAmB,EAAE,YAA2B;QAC1D,KAAK,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QAC5B,IAAI,CAAC,GAAG,GAAG,OAAO,EAAE,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC;QAChC,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,SAAS,CAAC;QAErC,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,WAAW,EAAE,CAAC;IACrB,CAAC;IAED,QAAQ,CAAC,KAAU;QACjB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,YAAY,CAAC,SAAc;QACzB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAEO,eAAe;QACrB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAC7B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACvD,CAAC;IAEO,WAAW;QACjB,kBAAkB;QAClB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,GAAY,EAAE,GAAa,EAAE,EAAE;YAC1D,GAAG,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"web-ui.js","sourceRoot":"","sources":["../src/web-ui.ts"],"names":[],"mappings":"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"}
|