@ugm/desiagent 0.2.0 → 0.2.1
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 +77 -3
- package/dist/core/execution/agents.d.ts.map +1 -1
- package/dist/core/execution/agents.js +18 -4
- package/dist/core/execution/agents.js.map +1 -1
- package/dist/core/execution/dagExecutor.d.ts +8 -1
- package/dist/core/execution/dagExecutor.d.ts.map +1 -1
- package/dist/core/execution/dagExecutor.js +156 -28
- package/dist/core/execution/dagExecutor.js.map +1 -1
- package/dist/core/execution/dags.d.ts +10 -0
- package/dist/core/execution/dags.d.ts.map +1 -1
- package/dist/core/execution/dags.js +152 -88
- package/dist/core/execution/dags.js.map +1 -1
- package/dist/core/execution/inference.d.ts +10 -10
- package/dist/core/providers/openrouter.d.ts.map +1 -1
- package/dist/core/providers/openrouter.js +13 -7
- package/dist/core/providers/openrouter.js.map +1 -1
- package/dist/core/providers/types.d.ts +9 -0
- package/dist/core/providers/types.d.ts.map +1 -1
- package/dist/core/skills/detector.d.ts +8 -0
- package/dist/core/skills/detector.d.ts.map +1 -0
- package/dist/core/skills/detector.js +60 -0
- package/dist/core/skills/detector.js.map +1 -0
- package/dist/core/skills/registry.d.ts +44 -0
- package/dist/core/skills/registry.d.ts.map +1 -0
- package/dist/core/skills/registry.js +149 -0
- package/dist/core/skills/registry.js.map +1 -0
- package/dist/core/tools/edit.d.ts +1 -1
- package/dist/core/tools/fetchPage.d.ts +1 -1
- package/dist/core/tools/llmExecute.d.ts +17 -16
- package/dist/core/tools/llmExecute.d.ts.map +1 -1
- package/dist/core/tools/llmExecute.js +1 -0
- package/dist/core/tools/llmExecute.js.map +1 -1
- package/dist/core/tools/readEmail.d.ts +1 -1
- package/dist/core/tools/sendEmail.d.ts +11 -11
- package/dist/core/tools/writeFile.d.ts +3 -3
- package/dist/core/workers/statsQueue.d.ts +69 -0
- package/dist/core/workers/statsQueue.d.ts.map +1 -0
- package/dist/core/workers/statsQueue.js +106 -0
- package/dist/core/workers/statsQueue.js.map +1 -0
- package/dist/core/workers/statsWorker.d.ts +11 -0
- package/dist/core/workers/statsWorker.d.ts.map +1 -0
- package/dist/core/workers/statsWorker.js +235 -0
- package/dist/core/workers/statsWorker.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +27 -2
- package/dist/index.js.map +1 -1
- package/dist/services/agentsSeedData.d.ts.map +1 -1
- package/dist/services/agentsSeedData.js +14 -0
- package/dist/services/agentsSeedData.js.map +1 -1
- package/dist/test/setup.d.ts +1 -0
- package/dist/test/setup.d.ts.map +1 -0
- package/dist/test/setup.js +3 -0
- package/dist/test/setup.js.map +1 -0
- package/dist/types/client.d.ts +1 -0
- package/dist/types/client.d.ts.map +1 -1
- package/dist/types/config.d.ts +7 -2
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/config.js +3 -0
- package/dist/types/config.js.map +1 -1
- package/dist/types/dag.d.ts +20 -20
- package/dist/types/dag.js +1 -1
- package/dist/types/dag.js.map +1 -1
- package/dist/util/sendEmailTool.d.ts +11 -11
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -13,6 +13,7 @@ A library-first async agent system for building autonomous workflows with TypeSc
|
|
|
13
13
|
- **Cron Scheduling** — Schedule DAGs to run on a cron expression with timezone support.
|
|
14
14
|
- **Artifacts** — Tools can write output files (reports, code, images) that are automatically stored and retrievable.
|
|
15
15
|
- **Cost Tracking** — Token usage and USD cost are recorded per execution step.
|
|
16
|
+
- **Skills** — Drop a `SKILL.md` file into your workspace or global config and the agent discovers it automatically. Skills can be injected as context into LLM prompts or executed as sub-tasks in a DAG.
|
|
16
17
|
- **Experiments API** — Compare models and temperatures on the same goal in one call.
|
|
17
18
|
|
|
18
19
|
## Installation
|
|
@@ -71,7 +72,7 @@ const client = await setupDesiAgent({
|
|
|
71
72
|
|
|
72
73
|
const result = await client.dags.createAndExecuteFromGoal({
|
|
73
74
|
goalText: 'Research the top 5 trends in AI agents for 2025 and write a concise briefing document to ai-trends.md',
|
|
74
|
-
agentName: '
|
|
75
|
+
agentName: 'DecomposerV9',
|
|
75
76
|
temperature: 0.7,
|
|
76
77
|
});
|
|
77
78
|
|
|
@@ -111,7 +112,7 @@ const client = await setupDesiAgent({
|
|
|
111
112
|
// Step 1 — Plan
|
|
112
113
|
const plan = await client.dags.createFromGoal({
|
|
113
114
|
goalText: 'Create a tutorial on processing driftwood into handicrafts — cover cleaning, tools, finishes — and write it to driftwood.md',
|
|
114
|
-
agentName: '
|
|
115
|
+
agentName: 'DecomposerV9',
|
|
115
116
|
temperature: 0.7,
|
|
116
117
|
});
|
|
117
118
|
|
|
@@ -185,7 +186,7 @@ const client = await setupDesiAgent({
|
|
|
185
186
|
|
|
186
187
|
const plan = await client.dags.createFromGoal({
|
|
187
188
|
goalText: 'Build the app',
|
|
188
|
-
agentName: '
|
|
189
|
+
agentName: 'DecomposerV9',
|
|
189
190
|
});
|
|
190
191
|
|
|
191
192
|
if (plan.status === 'clarification_required') {
|
|
@@ -242,6 +243,75 @@ bun run examples/list-agents.ts
|
|
|
242
243
|
bun run examples/list-tools.ts --names
|
|
243
244
|
```
|
|
244
245
|
|
|
246
|
+
## Skills
|
|
247
|
+
|
|
248
|
+
Skills are reusable instruction files (`SKILL.md`) that extend what the agent can do. Each skill is a Markdown file with YAML frontmatter describing its name, description, and type. When a goal is submitted, desiAgent automatically discovers skills, detects which ones are relevant, and either injects their content into the LLM prompt or executes them as sub-tasks inside a DAG.
|
|
249
|
+
|
|
250
|
+
### Skill Types
|
|
251
|
+
|
|
252
|
+
| Type | Behaviour |
|
|
253
|
+
|---|---|
|
|
254
|
+
| `context` | The skill's Markdown body is loaded and injected as instructions into an LLM inference call during DAG execution. |
|
|
255
|
+
| `executable` | A sibling `handler.ts` file is imported and its default export is called with the task parameters. |
|
|
256
|
+
|
|
257
|
+
### SKILL.md Format
|
|
258
|
+
|
|
259
|
+
```markdown
|
|
260
|
+
---
|
|
261
|
+
name: my-skill
|
|
262
|
+
description: A short sentence describing what this skill does (min 10 chars).
|
|
263
|
+
type: context # or "executable"
|
|
264
|
+
model: openai/gpt-4o # optional — override model for this skill
|
|
265
|
+
provider: openrouter # optional — override provider
|
|
266
|
+
---
|
|
267
|
+
|
|
268
|
+
Your skill instructions in Markdown go here.
|
|
269
|
+
The agent receives this content when the skill is used.
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
> The `name` field **must** match the enclosing directory name (e.g., `my-skill/SKILL.md` must have `name: my-skill`).
|
|
273
|
+
|
|
274
|
+
### Discovery
|
|
275
|
+
|
|
276
|
+
On startup, `SkillRegistry.discover()` scans the following locations **in order**. The first skill registered for a given name wins — later duplicates are silently skipped.
|
|
277
|
+
|
|
278
|
+
| Priority | Location | Scope |
|
|
279
|
+
|---|---|---|
|
|
280
|
+
| 1 | `<workspace>/.agents/skills/<name>/SKILL.md` | Local (workspace) |
|
|
281
|
+
| 2 | `<workspace>/skills/<name>/SKILL.md` | Local (workspace) |
|
|
282
|
+
| 3 | `<workspace>/SKILL.md` | Local (workspace root) |
|
|
283
|
+
| 4 | `~/.config/agents/skills/<name>/SKILL.md` | Global |
|
|
284
|
+
| 5 | `~/.desiAgent/skills/<name>/SKILL.md` | Global |
|
|
285
|
+
|
|
286
|
+
**Local wins over global.** If a workspace defines a skill named `summarizer` in `.agents/skills/summarizer/SKILL.md` and a global skill with the same name exists in `~/.desiAgent/skills/summarizer/SKILL.md`, the workspace version is used.
|
|
287
|
+
|
|
288
|
+
### How Skills Are Selected
|
|
289
|
+
|
|
290
|
+
When you submit a goal, a `MinimalSkillDetector` checks for:
|
|
291
|
+
|
|
292
|
+
1. **Explicit triggers** — phrases like `use skill <name>` or `use <name> skill` in the goal text.
|
|
293
|
+
2. **Keyword matching** — if no explicit trigger is found, skill descriptions are matched against keywords in the goal.
|
|
294
|
+
|
|
295
|
+
Matched skills are listed in the agent's system prompt so the LLM can plan DAG tasks with `action_type: 'skill'`.
|
|
296
|
+
|
|
297
|
+
### Using Skills Programmatically
|
|
298
|
+
|
|
299
|
+
```typescript
|
|
300
|
+
import { SkillRegistry } from '@ugm/desiagent';
|
|
301
|
+
|
|
302
|
+
const registry = new SkillRegistry(process.cwd());
|
|
303
|
+
await registry.discover();
|
|
304
|
+
|
|
305
|
+
// List all discovered skills
|
|
306
|
+
for (const skill of registry.getAll()) {
|
|
307
|
+
console.log(`${skill.name} (${skill.type}) — ${skill.description}`);
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
// Load a skill's content
|
|
311
|
+
const content = await registry.loadContent('my-skill');
|
|
312
|
+
console.log(content);
|
|
313
|
+
```
|
|
314
|
+
|
|
245
315
|
## Configuration Reference
|
|
246
316
|
|
|
247
317
|
```typescript
|
|
@@ -269,9 +339,13 @@ interface DesiAgentConfig {
|
|
|
269
339
|
onExecutionStart?: (executionId: string) => void;
|
|
270
340
|
onExecutionEnd?: (executionId: string, result: Record<string, any>) => void;
|
|
271
341
|
|
|
342
|
+
// Workspace root for skill discovery
|
|
343
|
+
workspaceRoot?: string; // default: process.cwd()
|
|
344
|
+
|
|
272
345
|
// Feature flags
|
|
273
346
|
autoStartScheduler?: boolean; // default: true
|
|
274
347
|
enableToolValidation?: boolean; // default: true
|
|
348
|
+
skipGenerationStats?: boolean; // default: false
|
|
275
349
|
}
|
|
276
350
|
```
|
|
277
351
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../../src/core/execution/agents.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAIlD;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAUD;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,EAAE,CAAY;IACtB,OAAO,CAAC,MAAM,CAAe;IAG7B,OAAO,CAAC,MAAM,CAAC,UAAU,CAAkC;IAC3D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAU;IAC9C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAM;gBAEhC,EAAE,EAAE,SAAS;IAIzB;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;IAQ3C;;OAEG;IACG,MAAM,CACV,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC3B,OAAO,CAAC,KAAK,CAAC;IA2CjB;;OAEG;IACG,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAYrC;;OAEG;IACG,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAmB1D;;OAEG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../../src/core/execution/agents.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAIlD;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAUD;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,EAAE,CAAY;IACtB,OAAO,CAAC,MAAM,CAAe;IAG7B,OAAO,CAAC,MAAM,CAAC,UAAU,CAAkC;IAC3D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAU;IAC9C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAM;gBAEhC,EAAE,EAAE,SAAS;IAIzB;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;IAQ3C;;OAEG;IACG,MAAM,CACV,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC3B,OAAO,CAAC,KAAK,CAAC;IA2CjB;;OAEG;IACG,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAYrC;;OAEG;IACG,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAmB1D;;OAEG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC;IAkFjE;;OAEG;IACG,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAiC1C;;;OAGG;IACG,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IA+BlD;;OAEG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBvC;;OAEG;IACH,OAAO,CAAC,QAAQ;CAgBjB"}
|
|
@@ -133,11 +133,25 @@ export class AgentsService {
|
|
|
133
133
|
if (updates.systemPrompt !== undefined) {
|
|
134
134
|
updateData.promptTemplate = updates.systemPrompt;
|
|
135
135
|
}
|
|
136
|
-
if (updates.
|
|
137
|
-
updateData.
|
|
136
|
+
if (updates.provider !== undefined) {
|
|
137
|
+
updateData.provider = updates.provider;
|
|
138
138
|
}
|
|
139
|
-
if (updates.
|
|
140
|
-
updateData.
|
|
139
|
+
if (updates.model !== undefined) {
|
|
140
|
+
updateData.model = updates.model;
|
|
141
|
+
}
|
|
142
|
+
// Build metadata: if metadata is explicitly provided, it replaces existing;
|
|
143
|
+
// description and constraints are merged on top of existing metadata
|
|
144
|
+
if (updates.metadata !== undefined || updates.description !== undefined || updates.constraints !== undefined) {
|
|
145
|
+
const currentMetadata = existing.metadata || {};
|
|
146
|
+
const baseMetadata = updates.metadata !== undefined ? updates.metadata : currentMetadata;
|
|
147
|
+
updateData.metadata = {
|
|
148
|
+
...baseMetadata,
|
|
149
|
+
...(updates.constraints !== undefined ? { constraints: updates.constraints } : {}),
|
|
150
|
+
...(updates.description !== undefined ? { description: updates.description } : {}),
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
if (updates.isActive !== undefined) {
|
|
154
|
+
updateData.active = updates.isActive;
|
|
141
155
|
}
|
|
142
156
|
await this.db.update(agents).set(updateData).where(eq(agents.id, id));
|
|
143
157
|
// Invalidate cache for this agent
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agents.js","sourceRoot":"","sources":["../../../src/core/execution/agents.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"agents.js","sourceRoot":"","sources":["../../../src/core/execution/agents.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,11 +7,13 @@
|
|
|
7
7
|
import type { DrizzleDB } from '../../db/client.js';
|
|
8
8
|
import type { LLMProvider } from '../providers/types.js';
|
|
9
9
|
import type { ToolRegistry } from '../tools/registry.js';
|
|
10
|
+
import type { SkillRegistry } from '../skills/registry.js';
|
|
11
|
+
import type { StatsQueue } from '../workers/statsQueue.js';
|
|
10
12
|
export interface SubTask {
|
|
11
13
|
id: string;
|
|
12
14
|
description: string;
|
|
13
15
|
thought: string;
|
|
14
|
-
action_type: 'tool' | 'inference';
|
|
16
|
+
action_type: 'tool' | 'inference' | 'skill';
|
|
15
17
|
tool_or_prompt: {
|
|
16
18
|
name: string;
|
|
17
19
|
params?: Record<string, any>;
|
|
@@ -49,6 +51,8 @@ export interface DAGExecutorConfig {
|
|
|
49
51
|
apiKey?: string;
|
|
50
52
|
ollamaBaseUrl?: string;
|
|
51
53
|
skipGenerationStats?: boolean;
|
|
54
|
+
skillRegistry?: SkillRegistry;
|
|
55
|
+
statsQueue?: StatsQueue;
|
|
52
56
|
}
|
|
53
57
|
/**
|
|
54
58
|
* Execution configuration for performance tuning
|
|
@@ -82,6 +86,7 @@ export interface TaskExecutionResult {
|
|
|
82
86
|
};
|
|
83
87
|
costUsd?: number;
|
|
84
88
|
generationStats?: Record<string, any>;
|
|
89
|
+
generationId?: string;
|
|
85
90
|
}
|
|
86
91
|
export declare class DAGExecutor {
|
|
87
92
|
private db;
|
|
@@ -91,6 +96,8 @@ export declare class DAGExecutor {
|
|
|
91
96
|
private apiKey?;
|
|
92
97
|
private ollamaBaseUrl?;
|
|
93
98
|
private skipGenerationStats?;
|
|
99
|
+
private skillRegistry?;
|
|
100
|
+
private statsQueue?;
|
|
94
101
|
private logger;
|
|
95
102
|
constructor(config: DAGExecutorConfig);
|
|
96
103
|
private extractUrls;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dagExecutor.d.ts","sourceRoot":"","sources":["../../../src/core/execution/dagExecutor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"dagExecutor.d.ts","sourceRoot":"","sources":["../../../src/core/execution/dagExecutor.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,6 +22,8 @@ export class DAGExecutor {
|
|
|
22
22
|
apiKey;
|
|
23
23
|
ollamaBaseUrl;
|
|
24
24
|
skipGenerationStats;
|
|
25
|
+
skillRegistry;
|
|
26
|
+
statsQueue;
|
|
25
27
|
logger = getLogger();
|
|
26
28
|
constructor(config) {
|
|
27
29
|
this.db = config.db;
|
|
@@ -31,6 +33,8 @@ export class DAGExecutor {
|
|
|
31
33
|
this.apiKey = config.apiKey;
|
|
32
34
|
this.ollamaBaseUrl = config.ollamaBaseUrl;
|
|
33
35
|
this.skipGenerationStats = config.skipGenerationStats;
|
|
36
|
+
this.skillRegistry = config.skillRegistry;
|
|
37
|
+
this.statsQueue = config.statsQueue;
|
|
34
38
|
this.logger.debug({
|
|
35
39
|
provider: this.llmProvider.name,
|
|
36
40
|
}, 'DAGExecutor created');
|
|
@@ -355,6 +359,69 @@ Respond with ONLY the expected output format. Build upon dependencies for cohere
|
|
|
355
359
|
task: agent.promptTemplate,
|
|
356
360
|
prompt: fullPrompt,
|
|
357
361
|
}, toolCtx);
|
|
362
|
+
return {
|
|
363
|
+
content: result.content,
|
|
364
|
+
usage: result.usage,
|
|
365
|
+
costUsd: result.costUsd,
|
|
366
|
+
generationStats: result.generationStats,
|
|
367
|
+
generationId: result.generationId,
|
|
368
|
+
};
|
|
369
|
+
}
|
|
370
|
+
else if (task.action_type === 'skill') {
|
|
371
|
+
const skillName = task.tool_or_prompt.name;
|
|
372
|
+
if (!this.skillRegistry) {
|
|
373
|
+
throw new Error(`Skill "${skillName}" requested but no SkillRegistry configured`);
|
|
374
|
+
}
|
|
375
|
+
const skillMeta = this.skillRegistry.getByName(skillName);
|
|
376
|
+
if (!skillMeta) {
|
|
377
|
+
throw new Error(`Skill not found: ${skillName}`);
|
|
378
|
+
}
|
|
379
|
+
if (skillMeta.type === 'executable') {
|
|
380
|
+
const handlerPath = skillMeta.filePath.replace(/SKILL\.md$/, 'handler.ts');
|
|
381
|
+
try {
|
|
382
|
+
const mod = await import(`file://${handlerPath}`);
|
|
383
|
+
const handler = mod.default || mod.handler;
|
|
384
|
+
if (!handler) {
|
|
385
|
+
throw new Error(`Skill "${skillName}" is not executable or missing handler`);
|
|
386
|
+
}
|
|
387
|
+
const handlerResult = await handler(task.tool_or_prompt.params || {});
|
|
388
|
+
return { content: handlerResult };
|
|
389
|
+
}
|
|
390
|
+
catch (err) {
|
|
391
|
+
if (err instanceof Error && err.message.includes('is not executable or missing handler')) {
|
|
392
|
+
throw err;
|
|
393
|
+
}
|
|
394
|
+
throw new Error(`Skill "${skillName}" is not executable or missing handler`);
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
// Context skill: load content and run via LlmExecuteTool
|
|
398
|
+
const skillBody = await this.skillRegistry.loadContent(skillName);
|
|
399
|
+
if (!skillBody) {
|
|
400
|
+
throw new Error(`Skill not found: ${skillName}`);
|
|
401
|
+
}
|
|
402
|
+
const fullPrompt = this.buildInferencePrompt(task, globalContext, taskResults);
|
|
403
|
+
// Resolve provider/model from skill frontmatter, falling back to inference agent
|
|
404
|
+
let skillProvider = 'openai';
|
|
405
|
+
let skillModel = 'gpt-4o';
|
|
406
|
+
if (skillMeta.provider && skillMeta.model) {
|
|
407
|
+
skillProvider = skillMeta.provider;
|
|
408
|
+
skillModel = skillMeta.model;
|
|
409
|
+
}
|
|
410
|
+
else {
|
|
411
|
+
// Fall back to inference agent from cache
|
|
412
|
+
const inferenceAgent = agentCache.get(task.tool_or_prompt.name) || agentCache.values().next().value;
|
|
413
|
+
if (inferenceAgent) {
|
|
414
|
+
skillProvider = inferenceAgent.provider;
|
|
415
|
+
skillModel = inferenceAgent.model;
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
const llmExecuteTool = new LlmExecuteTool({ apiKey: this.apiKey, baseUrl: this.ollamaBaseUrl, skipGenerationStats: this.skipGenerationStats });
|
|
419
|
+
const result = await llmExecuteTool.execute({
|
|
420
|
+
provider: skillProvider,
|
|
421
|
+
model: skillModel,
|
|
422
|
+
task: skillBody,
|
|
423
|
+
prompt: fullPrompt,
|
|
424
|
+
}, toolCtx);
|
|
358
425
|
return {
|
|
359
426
|
content: result.content,
|
|
360
427
|
usage: result.usage,
|
|
@@ -409,16 +476,29 @@ Respond with ONLY the expected output format. Build upon dependencies for cohere
|
|
|
409
476
|
this.logger.debug({ taskId: task.id, result: serializedResult }, `╰─task ${task.id} result after executeTask():`);
|
|
410
477
|
// Skip individual DB update if batching - will batch at wave end
|
|
411
478
|
if (!execConfig.batchDbUpdates) {
|
|
412
|
-
|
|
413
|
-
.set({
|
|
479
|
+
const subStepUpdate = {
|
|
414
480
|
status: 'completed',
|
|
415
481
|
result: serializedResult,
|
|
416
482
|
completedAt: new Date(),
|
|
417
483
|
durationMs: Date.now() - taskExecStartTime,
|
|
418
484
|
usage: execResult.usage,
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
485
|
+
};
|
|
486
|
+
// When statsQueue is available, defer stats to background worker
|
|
487
|
+
if (this.statsQueue && execResult.generationId) {
|
|
488
|
+
this.statsQueue.enqueue({
|
|
489
|
+
table: 'sub_steps',
|
|
490
|
+
id: task.id,
|
|
491
|
+
taskId: task.id,
|
|
492
|
+
executionId: execId,
|
|
493
|
+
generationId: execResult.generationId,
|
|
494
|
+
});
|
|
495
|
+
}
|
|
496
|
+
else {
|
|
497
|
+
subStepUpdate.costUsd = execResult.costUsd?.toString();
|
|
498
|
+
subStepUpdate.generationStats = execResult.generationStats;
|
|
499
|
+
}
|
|
500
|
+
await this.db.update(dagSubSteps)
|
|
501
|
+
.set(subStepUpdate)
|
|
422
502
|
.where(and(eq(dagSubSteps.taskId, task.id), eq(dagSubSteps.executionId, execId)));
|
|
423
503
|
}
|
|
424
504
|
this.emitEventIfEnabled(execConfig, {
|
|
@@ -467,16 +547,29 @@ Respond with ONLY the expected output format. Build upon dependencies for cohere
|
|
|
467
547
|
const serializedResult = typeof wr.result.content === 'string'
|
|
468
548
|
? wr.result.content
|
|
469
549
|
: JSON.stringify(wr.result.content);
|
|
470
|
-
|
|
471
|
-
.set({
|
|
550
|
+
const batchUpdate = {
|
|
472
551
|
status: 'completed',
|
|
473
552
|
result: serializedResult,
|
|
474
553
|
completedAt: new Date(),
|
|
475
554
|
durationMs: Date.now() - wr.startTime,
|
|
476
555
|
usage: wr.result.usage,
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
556
|
+
};
|
|
557
|
+
// When statsQueue is available, defer stats to background worker
|
|
558
|
+
if (this.statsQueue && wr.result.generationId) {
|
|
559
|
+
this.statsQueue.enqueue({
|
|
560
|
+
table: 'sub_steps',
|
|
561
|
+
id: wr.taskId,
|
|
562
|
+
taskId: wr.taskId,
|
|
563
|
+
executionId: execId,
|
|
564
|
+
generationId: wr.result.generationId,
|
|
565
|
+
});
|
|
566
|
+
}
|
|
567
|
+
else {
|
|
568
|
+
batchUpdate.costUsd = wr.result.costUsd?.toString();
|
|
569
|
+
batchUpdate.generationStats = wr.result.generationStats;
|
|
570
|
+
}
|
|
571
|
+
return this.db.update(dagSubSteps)
|
|
572
|
+
.set(batchUpdate)
|
|
480
573
|
.where(and(eq(dagSubSteps.taskId, wr.taskId), eq(dagSubSteps.executionId, execId)));
|
|
481
574
|
});
|
|
482
575
|
await Promise.all(batchUpdatePromises);
|
|
@@ -520,22 +613,45 @@ Respond with ONLY the expected output format. Build upon dependencies for cohere
|
|
|
520
613
|
where: eq(dagSubSteps.executionId, execId),
|
|
521
614
|
});
|
|
522
615
|
const statusData = this.deriveExecutionStatus(allSubSteps);
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
.
|
|
616
|
+
if (this.statsQueue) {
|
|
617
|
+
// Write execution status without cost aggregates — worker will fill them in
|
|
618
|
+
await this.db.update(dagExecutions)
|
|
619
|
+
.set({
|
|
620
|
+
status: statusData.status,
|
|
621
|
+
completedTasks: statusData.completedTasks,
|
|
622
|
+
failedTasks: statusData.failedTasks,
|
|
623
|
+
waitingTasks: statusData.waitingTasks,
|
|
624
|
+
finalResult: validatedResult,
|
|
625
|
+
synthesisResult: synthesisResult.content,
|
|
626
|
+
completedAt: new Date(),
|
|
627
|
+
durationMs: Date.now() - startTime,
|
|
628
|
+
})
|
|
629
|
+
.where(eq(dagExecutions.id, execId));
|
|
630
|
+
// Enqueue aggregation to the background worker (generationId not needed for aggregation)
|
|
631
|
+
this.statsQueue.enqueue({
|
|
632
|
+
table: 'dag_executions',
|
|
633
|
+
id: execId,
|
|
634
|
+
generationId: '',
|
|
635
|
+
});
|
|
636
|
+
}
|
|
637
|
+
else {
|
|
638
|
+
const totalUsage = this.aggregateUsage(allSubSteps);
|
|
639
|
+
const totalCostUsd = this.aggregateCost(allSubSteps);
|
|
640
|
+
await this.db.update(dagExecutions)
|
|
641
|
+
.set({
|
|
642
|
+
status: statusData.status,
|
|
643
|
+
completedTasks: statusData.completedTasks,
|
|
644
|
+
failedTasks: statusData.failedTasks,
|
|
645
|
+
waitingTasks: statusData.waitingTasks,
|
|
646
|
+
finalResult: validatedResult,
|
|
647
|
+
synthesisResult: synthesisResult.content,
|
|
648
|
+
completedAt: new Date(),
|
|
649
|
+
durationMs: Date.now() - startTime,
|
|
650
|
+
totalUsage,
|
|
651
|
+
totalCostUsd: totalCostUsd?.toString(),
|
|
652
|
+
})
|
|
653
|
+
.where(eq(dagExecutions.id, execId));
|
|
654
|
+
}
|
|
539
655
|
if (statusData.status === 'completed' || statusData.status === 'partial') {
|
|
540
656
|
this.emitEventIfEnabled(execConfig, {
|
|
541
657
|
type: ExecutionEventType.Completed,
|
|
@@ -642,6 +758,17 @@ Generate the final report in Markdown format as specified in the synthesis plan.
|
|
|
642
758
|
abortSignal,
|
|
643
759
|
});
|
|
644
760
|
const synthesisSubStepId = generateSubStepId();
|
|
761
|
+
const deferStats = !!(this.statsQueue && response.generationId);
|
|
762
|
+
// When statsQueue is available, defer stats to background worker
|
|
763
|
+
if (deferStats) {
|
|
764
|
+
this.statsQueue.enqueue({
|
|
765
|
+
table: 'sub_steps',
|
|
766
|
+
id: '__SYNTHESIS__',
|
|
767
|
+
taskId: '__SYNTHESIS__',
|
|
768
|
+
executionId,
|
|
769
|
+
generationId: response.generationId,
|
|
770
|
+
});
|
|
771
|
+
}
|
|
645
772
|
await this.db.insert(dagSubSteps).values({
|
|
646
773
|
id: synthesisSubStepId,
|
|
647
774
|
executionId,
|
|
@@ -657,8 +784,8 @@ Generate the final report in Markdown format as specified in the synthesis plan.
|
|
|
657
784
|
completedAt: new Date(),
|
|
658
785
|
durationMs: Date.now() - startTime,
|
|
659
786
|
usage: response.usage,
|
|
660
|
-
costUsd: response.costUsd?.toString(),
|
|
661
|
-
generationStats: response.generationStats,
|
|
787
|
+
costUsd: deferStats ? undefined : response.costUsd?.toString(),
|
|
788
|
+
generationStats: deferStats ? undefined : response.generationStats,
|
|
662
789
|
result: response.content,
|
|
663
790
|
});
|
|
664
791
|
this.logger.debug({ synthesisSubStepId, usage: response.usage }, 'Synthesis sub-step created');
|
|
@@ -667,6 +794,7 @@ Generate the final report in Markdown format as specified in the synthesis plan.
|
|
|
667
794
|
usage: response.usage,
|
|
668
795
|
costUsd: response.costUsd,
|
|
669
796
|
generationStats: response.generationStats,
|
|
797
|
+
generationId: response.generationId,
|
|
670
798
|
};
|
|
671
799
|
}
|
|
672
800
|
async validate(output) {
|