@ugm/desiagent 0.1.21
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 +251 -0
- package/dist/__tests__/test-utils.d.ts +24 -0
- package/dist/__tests__/test-utils.d.ts.map +1 -0
- package/dist/__tests__/test-utils.js +32 -0
- package/dist/__tests__/test-utils.js.map +1 -0
- package/dist/core/execution/agents.d.ts +60 -0
- package/dist/core/execution/agents.d.ts.map +1 -0
- package/dist/core/execution/agents.js +249 -0
- package/dist/core/execution/agents.js.map +1 -0
- package/dist/core/execution/artifacts.d.ts +27 -0
- package/dist/core/execution/artifacts.d.ts.map +1 -0
- package/dist/core/execution/artifacts.js +93 -0
- package/dist/core/execution/artifacts.js.map +1 -0
- package/dist/core/execution/costs.d.ts +160 -0
- package/dist/core/execution/costs.d.ts.map +1 -0
- package/dist/core/execution/costs.js +196 -0
- package/dist/core/execution/costs.js.map +1 -0
- package/dist/core/execution/dagExecutor.d.ts +112 -0
- package/dist/core/execution/dagExecutor.d.ts.map +1 -0
- package/dist/core/execution/dagExecutor.js +647 -0
- package/dist/core/execution/dagExecutor.js.map +1 -0
- package/dist/core/execution/dags.d.ts +167 -0
- package/dist/core/execution/dags.d.ts.map +1 -0
- package/dist/core/execution/dags.js +713 -0
- package/dist/core/execution/dags.js.map +1 -0
- package/dist/core/execution/executions.d.ts +158 -0
- package/dist/core/execution/executions.d.ts.map +1 -0
- package/dist/core/execution/executions.js +258 -0
- package/dist/core/execution/executions.js.map +1 -0
- package/dist/core/execution/goals.d.ts +62 -0
- package/dist/core/execution/goals.d.ts.map +1 -0
- package/dist/core/execution/goals.js +245 -0
- package/dist/core/execution/goals.js.map +1 -0
- package/dist/core/execution/runs.d.ts +65 -0
- package/dist/core/execution/runs.d.ts.map +1 -0
- package/dist/core/execution/runs.js +219 -0
- package/dist/core/execution/runs.js.map +1 -0
- package/dist/core/execution/tools.d.ts +24 -0
- package/dist/core/execution/tools.d.ts.map +1 -0
- package/dist/core/execution/tools.js +33 -0
- package/dist/core/execution/tools.js.map +1 -0
- package/dist/core/orchestration/index.d.ts +7 -0
- package/dist/core/orchestration/index.d.ts.map +1 -0
- package/dist/core/orchestration/index.js +7 -0
- package/dist/core/orchestration/index.js.map +1 -0
- package/dist/core/orchestration/orchestrator.d.ts +39 -0
- package/dist/core/orchestration/orchestrator.d.ts.map +1 -0
- package/dist/core/orchestration/orchestrator.js +141 -0
- package/dist/core/orchestration/orchestrator.js.map +1 -0
- package/dist/core/orchestration/planner.d.ts +63 -0
- package/dist/core/orchestration/planner.d.ts.map +1 -0
- package/dist/core/orchestration/planner.js +99 -0
- package/dist/core/orchestration/planner.js.map +1 -0
- package/dist/core/providers/factory.d.ts +25 -0
- package/dist/core/providers/factory.d.ts.map +1 -0
- package/dist/core/providers/factory.js +86 -0
- package/dist/core/providers/factory.js.map +1 -0
- package/dist/core/providers/index.d.ts +11 -0
- package/dist/core/providers/index.d.ts.map +1 -0
- package/dist/core/providers/index.js +10 -0
- package/dist/core/providers/index.js.map +1 -0
- package/dist/core/providers/ollama.d.ts +36 -0
- package/dist/core/providers/ollama.d.ts.map +1 -0
- package/dist/core/providers/ollama.js +123 -0
- package/dist/core/providers/ollama.js.map +1 -0
- package/dist/core/providers/openai.d.ts +33 -0
- package/dist/core/providers/openai.d.ts.map +1 -0
- package/dist/core/providers/openai.js +114 -0
- package/dist/core/providers/openai.js.map +1 -0
- package/dist/core/providers/openrouter.d.ts +38 -0
- package/dist/core/providers/openrouter.d.ts.map +1 -0
- package/dist/core/providers/openrouter.js +269 -0
- package/dist/core/providers/openrouter.js.map +1 -0
- package/dist/core/providers/types.d.ts +101 -0
- package/dist/core/providers/types.d.ts.map +1 -0
- package/dist/core/providers/types.js +7 -0
- package/dist/core/providers/types.js.map +1 -0
- package/dist/core/tools/base.d.ts +56 -0
- package/dist/core/tools/base.d.ts.map +1 -0
- package/dist/core/tools/base.js +60 -0
- package/dist/core/tools/base.js.map +1 -0
- package/dist/core/tools/bash.d.ts +50 -0
- package/dist/core/tools/bash.d.ts.map +1 -0
- package/dist/core/tools/bash.js +179 -0
- package/dist/core/tools/bash.js.map +1 -0
- package/dist/core/tools/edit.d.ts +39 -0
- package/dist/core/tools/edit.d.ts.map +1 -0
- package/dist/core/tools/edit.js +67 -0
- package/dist/core/tools/edit.js.map +1 -0
- package/dist/core/tools/executor.d.ts +33 -0
- package/dist/core/tools/executor.d.ts.map +1 -0
- package/dist/core/tools/executor.js +105 -0
- package/dist/core/tools/executor.js.map +1 -0
- package/dist/core/tools/fetchPage.d.ts +46 -0
- package/dist/core/tools/fetchPage.d.ts.map +1 -0
- package/dist/core/tools/fetchPage.js +87 -0
- package/dist/core/tools/fetchPage.js.map +1 -0
- package/dist/core/tools/fetchURLs.d.ts +39 -0
- package/dist/core/tools/fetchURLs.d.ts.map +1 -0
- package/dist/core/tools/fetchURLs.js +67 -0
- package/dist/core/tools/fetchURLs.js.map +1 -0
- package/dist/core/tools/glob.d.ts +36 -0
- package/dist/core/tools/glob.d.ts.map +1 -0
- package/dist/core/tools/glob.js +78 -0
- package/dist/core/tools/glob.js.map +1 -0
- package/dist/core/tools/grep.d.ts +51 -0
- package/dist/core/tools/grep.d.ts.map +1 -0
- package/dist/core/tools/grep.js +152 -0
- package/dist/core/tools/grep.js.map +1 -0
- package/dist/core/tools/index.d.ts +22 -0
- package/dist/core/tools/index.d.ts.map +1 -0
- package/dist/core/tools/index.js +22 -0
- package/dist/core/tools/index.js.map +1 -0
- package/dist/core/tools/llmExecute.d.ts +153 -0
- package/dist/core/tools/llmExecute.d.ts.map +1 -0
- package/dist/core/tools/llmExecute.js +105 -0
- package/dist/core/tools/llmExecute.js.map +1 -0
- package/dist/core/tools/readEmail.d.ts +68 -0
- package/dist/core/tools/readEmail.d.ts.map +1 -0
- package/dist/core/tools/readEmail.js +182 -0
- package/dist/core/tools/readEmail.js.map +1 -0
- package/dist/core/tools/readFile.d.ts +42 -0
- package/dist/core/tools/readFile.d.ts.map +1 -0
- package/dist/core/tools/readFile.js +79 -0
- package/dist/core/tools/readFile.js.map +1 -0
- package/dist/core/tools/registry.d.ts +53 -0
- package/dist/core/tools/registry.d.ts.map +1 -0
- package/dist/core/tools/registry.js +112 -0
- package/dist/core/tools/registry.js.map +1 -0
- package/dist/core/tools/sendEmail.d.ts +83 -0
- package/dist/core/tools/sendEmail.d.ts.map +1 -0
- package/dist/core/tools/sendEmail.js +132 -0
- package/dist/core/tools/sendEmail.js.map +1 -0
- package/dist/core/tools/sendWebhook.d.ts +48 -0
- package/dist/core/tools/sendWebhook.d.ts.map +1 -0
- package/dist/core/tools/sendWebhook.js +61 -0
- package/dist/core/tools/sendWebhook.js.map +1 -0
- package/dist/core/tools/webSearch.d.ts +34 -0
- package/dist/core/tools/webSearch.d.ts.map +1 -0
- package/dist/core/tools/webSearch.js +104 -0
- package/dist/core/tools/webSearch.js.map +1 -0
- package/dist/core/tools/writeFile.d.ts +49 -0
- package/dist/core/tools/writeFile.d.ts.map +1 -0
- package/dist/core/tools/writeFile.js +120 -0
- package/dist/core/tools/writeFile.js.map +1 -0
- package/dist/db/client.d.ts +22 -0
- package/dist/db/client.d.ts.map +1 -0
- package/dist/db/client.js +178 -0
- package/dist/db/client.js.map +1 -0
- package/dist/db/schema.d.ts +1846 -0
- package/dist/db/schema.d.ts.map +1 -0
- package/dist/db/schema.js +175 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/errors/index.d.ts +80 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +135 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/index.d.ts +52 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +172 -0
- package/dist/index.js.map +1 -0
- package/dist/services/initDB.d.ts +17 -0
- package/dist/services/initDB.d.ts.map +1 -0
- package/dist/services/initDB.js +212 -0
- package/dist/services/initDB.js.map +1 -0
- package/dist/types/agent.d.ts +354 -0
- package/dist/types/agent.d.ts.map +1 -0
- package/dist/types/agent.js +63 -0
- package/dist/types/agent.js.map +1 -0
- package/dist/types/client.d.ts +309 -0
- package/dist/types/client.d.ts.map +1 -0
- package/dist/types/client.js +2 -0
- package/dist/types/client.js.map +1 -0
- package/dist/types/config.d.ts +96 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +33 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/dag.d.ts +253 -0
- package/dist/types/dag.d.ts.map +1 -0
- package/dist/types/dag.js +46 -0
- package/dist/types/dag.js.map +1 -0
- package/dist/types/execution.d.ts +171 -0
- package/dist/types/execution.d.ts.map +1 -0
- package/dist/types/execution.js +41 -0
- package/dist/types/execution.js.map +1 -0
- package/dist/types/index.d.ts +12 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +11 -0
- package/dist/types/index.js.map +1 -0
- package/dist/util/cron-validator.d.ts +16 -0
- package/dist/util/cron-validator.d.ts.map +1 -0
- package/dist/util/cron-validator.js +31 -0
- package/dist/util/cron-validator.js.map +1 -0
- package/dist/util/dag-utils.d.ts +54 -0
- package/dist/util/dag-utils.d.ts.map +1 -0
- package/dist/util/dag-utils.js +167 -0
- package/dist/util/dag-utils.js.map +1 -0
- package/dist/util/logger.d.ts +21 -0
- package/dist/util/logger.d.ts.map +1 -0
- package/dist/util/logger.js +87 -0
- package/dist/util/logger.js.map +1 -0
- package/package.json +82 -0
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Artifacts Service
|
|
3
|
+
*
|
|
4
|
+
* Manages artifact files generated during execution.
|
|
5
|
+
* Artifacts are output files created by agents and stored for later retrieval.
|
|
6
|
+
*/
|
|
7
|
+
import { resolve, basename } from 'path';
|
|
8
|
+
import { existsSync } from 'fs';
|
|
9
|
+
import { readFile, readdir } from 'fs/promises';
|
|
10
|
+
import { getLogger } from '../../util/logger.js';
|
|
11
|
+
import { NotFoundError } from '../../errors/index.js';
|
|
12
|
+
/**
|
|
13
|
+
* ArtifactsService handles artifact listing and retrieval
|
|
14
|
+
*/
|
|
15
|
+
export class ArtifactsService {
|
|
16
|
+
artifactsDir;
|
|
17
|
+
logger = getLogger();
|
|
18
|
+
constructor(artifactsDir) {
|
|
19
|
+
this.artifactsDir = artifactsDir || resolve('./artifacts');
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* List all artifacts
|
|
23
|
+
*/
|
|
24
|
+
async list() {
|
|
25
|
+
try {
|
|
26
|
+
if (!existsSync(this.artifactsDir)) {
|
|
27
|
+
return [];
|
|
28
|
+
}
|
|
29
|
+
const files = await readdir(this.artifactsDir, { withFileTypes: true });
|
|
30
|
+
const filenames = files
|
|
31
|
+
.filter((file) => file.isFile())
|
|
32
|
+
.map((file) => file.name)
|
|
33
|
+
.sort();
|
|
34
|
+
return filenames;
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
this.logger.error('Failed to list artifacts');
|
|
38
|
+
return [];
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Get an artifact by filename
|
|
43
|
+
*/
|
|
44
|
+
async get(filename) {
|
|
45
|
+
// Security: prevent path traversal
|
|
46
|
+
const safeFilename = basename(filename);
|
|
47
|
+
const fullPath = resolve(this.artifactsDir, safeFilename);
|
|
48
|
+
// Ensure the resolved path is within artifacts directory
|
|
49
|
+
if (!fullPath.startsWith(this.artifactsDir)) {
|
|
50
|
+
throw new NotFoundError('Artifact', filename);
|
|
51
|
+
}
|
|
52
|
+
if (!existsSync(fullPath)) {
|
|
53
|
+
throw new NotFoundError('Artifact', filename);
|
|
54
|
+
}
|
|
55
|
+
try {
|
|
56
|
+
const content = await readFile(fullPath);
|
|
57
|
+
return content;
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
this.logger.error(`Failed to read artifact: ${filename}`);
|
|
61
|
+
throw new NotFoundError('Artifact', filename);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Internal: Save an artifact
|
|
66
|
+
*/
|
|
67
|
+
async _save(filename, content) {
|
|
68
|
+
try {
|
|
69
|
+
// Ensure artifacts directory exists
|
|
70
|
+
if (!existsSync(this.artifactsDir)) {
|
|
71
|
+
// In Phase 2, we don't use mkdir to avoid dependencies
|
|
72
|
+
// This will be handled in Phase 3+
|
|
73
|
+
this.logger.warn(`Artifacts directory does not exist: ${this.artifactsDir}`);
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
const safeFilename = basename(filename);
|
|
77
|
+
const fullPath = resolve(this.artifactsDir, safeFilename);
|
|
78
|
+
// Prevent path traversal
|
|
79
|
+
if (!fullPath.startsWith(this.artifactsDir)) {
|
|
80
|
+
throw new Error('Invalid artifact path');
|
|
81
|
+
}
|
|
82
|
+
// TODO: Implement file writing in Phase 3
|
|
83
|
+
// For now, just log (content is intentionally unused)
|
|
84
|
+
void content; // Suppress unused variable warning
|
|
85
|
+
this.logger.debug(`Would save artifact: ${safeFilename}`);
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
this.logger.error(`Failed to save artifact: ${filename}`);
|
|
89
|
+
throw error;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=artifacts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../../../src/core/execution/artifacts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Costs Service
|
|
3
|
+
*
|
|
4
|
+
* Provides cost tracking functionality for DAG planning and execution.
|
|
5
|
+
* Tracks usage and costs at planning, execution, and sub-step levels.
|
|
6
|
+
*/
|
|
7
|
+
import type { DrizzleDB } from '../../db/client.js';
|
|
8
|
+
/**
|
|
9
|
+
* Usage information for token tracking
|
|
10
|
+
*/
|
|
11
|
+
export interface UsageInfo {
|
|
12
|
+
promptTokens?: number;
|
|
13
|
+
completionTokens?: number;
|
|
14
|
+
totalTokens?: number;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Planning usage total (aggregate over all attempts)
|
|
18
|
+
*/
|
|
19
|
+
export interface PlanningUsageTotal {
|
|
20
|
+
promptTokens: number;
|
|
21
|
+
completionTokens: number;
|
|
22
|
+
totalTokens: number;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Individual planning attempt details
|
|
26
|
+
*/
|
|
27
|
+
export interface PlanningAttempt {
|
|
28
|
+
attempt: number;
|
|
29
|
+
reason: 'initial' | 'retry_gaps' | 'retry_parse_error' | 'retry_validation' | 'title_master';
|
|
30
|
+
usage?: {
|
|
31
|
+
promptTokens?: number;
|
|
32
|
+
completionTokens?: number;
|
|
33
|
+
totalTokens?: number;
|
|
34
|
+
};
|
|
35
|
+
costUsd?: number | null;
|
|
36
|
+
errorMessage?: string;
|
|
37
|
+
generationStats?: Record<string, any>;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Sub-step cost information
|
|
41
|
+
*/
|
|
42
|
+
export interface SubStepCost {
|
|
43
|
+
id: string;
|
|
44
|
+
taskId: string;
|
|
45
|
+
actionType: string;
|
|
46
|
+
toolOrPromptName: string;
|
|
47
|
+
usage: UsageInfo | null;
|
|
48
|
+
costUsd: string | null;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Synthesis cost information
|
|
52
|
+
*/
|
|
53
|
+
export interface SynthesisCost {
|
|
54
|
+
usage: UsageInfo | null;
|
|
55
|
+
costUsd: string | null;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Execution cost breakdown
|
|
59
|
+
*/
|
|
60
|
+
export interface ExecutionCostBreakdown {
|
|
61
|
+
dagId: string | null;
|
|
62
|
+
executionId: string;
|
|
63
|
+
planning: {
|
|
64
|
+
totalUsage: PlanningUsageTotal | null;
|
|
65
|
+
totalCostUsd: string | null;
|
|
66
|
+
attempts: PlanningAttempt[] | null;
|
|
67
|
+
} | null;
|
|
68
|
+
execution: {
|
|
69
|
+
totalUsage: UsageInfo | null;
|
|
70
|
+
totalCostUsd: string | null;
|
|
71
|
+
subSteps: SubStepCost[];
|
|
72
|
+
synthesis: SynthesisCost | null;
|
|
73
|
+
};
|
|
74
|
+
totals: {
|
|
75
|
+
planningCostUsd: string;
|
|
76
|
+
executionCostUsd: string;
|
|
77
|
+
grandTotalCostUsd: string;
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Execution summary for DAG costs
|
|
82
|
+
*/
|
|
83
|
+
export interface ExecutionSummary {
|
|
84
|
+
executionId: string;
|
|
85
|
+
status: string;
|
|
86
|
+
totalCostUsd: string | null;
|
|
87
|
+
startedAt: Date | null;
|
|
88
|
+
completedAt: Date | null;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* DAG cost breakdown
|
|
92
|
+
*/
|
|
93
|
+
export interface DagCostBreakdown {
|
|
94
|
+
dagId: string;
|
|
95
|
+
planning: {
|
|
96
|
+
totalUsage: PlanningUsageTotal | null;
|
|
97
|
+
totalCostUsd: string | null;
|
|
98
|
+
attempts: PlanningAttempt[] | null;
|
|
99
|
+
};
|
|
100
|
+
executions: ExecutionSummary[];
|
|
101
|
+
totals: {
|
|
102
|
+
planningCostUsd: string;
|
|
103
|
+
executionsCostUsd: string;
|
|
104
|
+
grandTotalCostUsd: string;
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Cost summary by date
|
|
109
|
+
*/
|
|
110
|
+
export interface CostSummaryEntry {
|
|
111
|
+
date: string;
|
|
112
|
+
planningCostUsd: string;
|
|
113
|
+
executionCostUsd: string;
|
|
114
|
+
totalCostUsd: string;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Aggregated cost summary result
|
|
118
|
+
*/
|
|
119
|
+
export interface CostSummaryResult {
|
|
120
|
+
dateRange: {
|
|
121
|
+
from: string;
|
|
122
|
+
to: string;
|
|
123
|
+
groupBy: string;
|
|
124
|
+
};
|
|
125
|
+
summary: CostSummaryEntry[];
|
|
126
|
+
totals: {
|
|
127
|
+
planningCostUsd: string;
|
|
128
|
+
executionCostUsd: string;
|
|
129
|
+
totalCostUsd: string;
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Options for cost summary aggregation
|
|
134
|
+
*/
|
|
135
|
+
export interface CostSummaryOptions {
|
|
136
|
+
from?: Date;
|
|
137
|
+
to?: Date;
|
|
138
|
+
groupBy?: 'day' | 'week' | 'month';
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* CostsService handles cost tracking and aggregation
|
|
142
|
+
*/
|
|
143
|
+
export declare class CostsService {
|
|
144
|
+
private db;
|
|
145
|
+
private logger;
|
|
146
|
+
constructor(db: DrizzleDB);
|
|
147
|
+
/**
|
|
148
|
+
* Get cost breakdown for a specific execution
|
|
149
|
+
*/
|
|
150
|
+
getExecutionCosts(executionId: string): Promise<ExecutionCostBreakdown>;
|
|
151
|
+
/**
|
|
152
|
+
* Get total costs for a DAG (planning + all executions)
|
|
153
|
+
*/
|
|
154
|
+
getDagCosts(dagId: string): Promise<DagCostBreakdown>;
|
|
155
|
+
/**
|
|
156
|
+
* Get cost summary aggregated by date
|
|
157
|
+
*/
|
|
158
|
+
getCostSummary(opts?: CostSummaryOptions): Promise<CostSummaryResult>;
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=costs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"costs.d.ts","sourceRoot":"","sources":["../../../src/core/execution/costs.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAKpD;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,SAAS,GAAG,YAAY,GAAG,mBAAmB,GAAG,kBAAkB,GAAG,cAAc,CAAC;IAC7F,KAAK,CAAC,EAAE;QACN,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACvC;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IACxB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IACxB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE;QACR,UAAU,EAAE,kBAAkB,GAAG,IAAI,CAAC;QACtC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;QAC5B,QAAQ,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC;KACpC,GAAG,IAAI,CAAC;IACT,SAAS,EAAE;QACT,UAAU,EAAE,SAAS,GAAG,IAAI,CAAC;QAC7B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;QAC5B,QAAQ,EAAE,WAAW,EAAE,CAAC;QACxB,SAAS,EAAE,aAAa,GAAG,IAAI,CAAC;KACjC,CAAC;IACF,MAAM,EAAE;QACN,eAAe,EAAE,MAAM,CAAC;QACxB,gBAAgB,EAAE,MAAM,CAAC;QACzB,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;IACvB,WAAW,EAAE,IAAI,GAAG,IAAI,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE;QACR,UAAU,EAAE,kBAAkB,GAAG,IAAI,CAAC;QACtC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;QAC5B,QAAQ,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC;KACpC,CAAC;IACF,UAAU,EAAE,gBAAgB,EAAE,CAAC;IAC/B,MAAM,EAAE;QACN,eAAe,EAAE,MAAM,CAAC;QACxB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE;QACT,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,EAAE,MAAM,CAAC;QACX,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,MAAM,EAAE;QACN,eAAe,EAAE,MAAM,CAAC;QACxB,gBAAgB,EAAE,MAAM,CAAC;QACzB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,EAAE,CAAC,EAAE,IAAI,CAAC;IACV,OAAO,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC;CACpC;AA4BD;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,EAAE,CAAY;IACtB,OAAO,CAAC,MAAM,CAAe;gBAEjB,EAAE,EAAE,SAAS;IAIzB;;OAEG;IACG,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAyD7E;;OAEG;IACG,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA4C3D;;OAEG;IACG,cAAc,CAAC,IAAI,GAAE,kBAAuB,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAkEhF"}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Costs Service
|
|
3
|
+
*
|
|
4
|
+
* Provides cost tracking functionality for DAG planning and execution.
|
|
5
|
+
* Tracks usage and costs at planning, execution, and sub-step levels.
|
|
6
|
+
*/
|
|
7
|
+
import { eq } from 'drizzle-orm';
|
|
8
|
+
import { dags, dagExecutions, dagSubSteps } from '../../db/schema.js';
|
|
9
|
+
import { NotFoundError } from '../../errors/index.js';
|
|
10
|
+
import { getLogger } from '../../util/logger.js';
|
|
11
|
+
/**
|
|
12
|
+
* Parses a date string or returns default date
|
|
13
|
+
*/
|
|
14
|
+
function parseDate(dateStr, defaultDate) {
|
|
15
|
+
if (!dateStr)
|
|
16
|
+
return defaultDate;
|
|
17
|
+
if (dateStr instanceof Date)
|
|
18
|
+
return dateStr;
|
|
19
|
+
return new Date(dateStr);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Formats a date according to the specified grouping
|
|
23
|
+
*/
|
|
24
|
+
function formatDateByGroup(date, groupBy) {
|
|
25
|
+
switch (groupBy) {
|
|
26
|
+
case 'week': {
|
|
27
|
+
const d = new Date(date);
|
|
28
|
+
d.setDate(d.getDate() - d.getDay());
|
|
29
|
+
return d.toISOString().split('T')[0];
|
|
30
|
+
}
|
|
31
|
+
case 'month':
|
|
32
|
+
return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}`;
|
|
33
|
+
default:
|
|
34
|
+
return date.toISOString().split('T')[0];
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* CostsService handles cost tracking and aggregation
|
|
39
|
+
*/
|
|
40
|
+
export class CostsService {
|
|
41
|
+
db;
|
|
42
|
+
logger = getLogger();
|
|
43
|
+
constructor(db) {
|
|
44
|
+
this.db = db;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Get cost breakdown for a specific execution
|
|
48
|
+
*/
|
|
49
|
+
async getExecutionCosts(executionId) {
|
|
50
|
+
const execution = await this.db.query.dagExecutions.findFirst({
|
|
51
|
+
where: eq(dagExecutions.id, executionId),
|
|
52
|
+
});
|
|
53
|
+
if (!execution) {
|
|
54
|
+
throw new NotFoundError('Execution', executionId);
|
|
55
|
+
}
|
|
56
|
+
const dag = execution.dagId
|
|
57
|
+
? await this.db.query.dags.findFirst({ where: eq(dags.id, execution.dagId) })
|
|
58
|
+
: null;
|
|
59
|
+
const allSubSteps = await this.db.query.dagSubSteps.findMany({
|
|
60
|
+
where: eq(dagSubSteps.executionId, executionId),
|
|
61
|
+
});
|
|
62
|
+
const synthesisStep = allSubSteps.find(s => s.toolOrPromptName === '__synthesis__');
|
|
63
|
+
const taskSteps = allSubSteps.filter(s => s.toolOrPromptName !== '__synthesis__');
|
|
64
|
+
const planningCost = parseFloat(dag?.planningTotalCostUsd ?? '0');
|
|
65
|
+
const executionCost = parseFloat(execution.totalCostUsd ?? '0');
|
|
66
|
+
this.logger.debug({ executionId, planningCost, executionCost }, 'Retrieved execution costs');
|
|
67
|
+
return {
|
|
68
|
+
dagId: execution.dagId,
|
|
69
|
+
executionId,
|
|
70
|
+
planning: dag ? {
|
|
71
|
+
totalUsage: dag.planningTotalUsage,
|
|
72
|
+
totalCostUsd: dag.planningTotalCostUsd ?? null,
|
|
73
|
+
attempts: dag.planningAttempts,
|
|
74
|
+
} : null,
|
|
75
|
+
execution: {
|
|
76
|
+
totalUsage: execution.totalUsage,
|
|
77
|
+
totalCostUsd: execution.totalCostUsd ?? null,
|
|
78
|
+
subSteps: taskSteps.map(s => ({
|
|
79
|
+
id: s.id,
|
|
80
|
+
taskId: s.taskId,
|
|
81
|
+
actionType: s.actionType,
|
|
82
|
+
toolOrPromptName: s.toolOrPromptName,
|
|
83
|
+
usage: s.usage,
|
|
84
|
+
costUsd: s.costUsd ?? null,
|
|
85
|
+
})),
|
|
86
|
+
synthesis: synthesisStep ? {
|
|
87
|
+
usage: synthesisStep.usage,
|
|
88
|
+
costUsd: synthesisStep.costUsd ?? null,
|
|
89
|
+
} : null,
|
|
90
|
+
},
|
|
91
|
+
totals: {
|
|
92
|
+
planningCostUsd: dag?.planningTotalCostUsd ?? '0',
|
|
93
|
+
executionCostUsd: execution.totalCostUsd ?? '0',
|
|
94
|
+
grandTotalCostUsd: (planningCost + executionCost).toString(),
|
|
95
|
+
},
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Get total costs for a DAG (planning + all executions)
|
|
100
|
+
*/
|
|
101
|
+
async getDagCosts(dagId) {
|
|
102
|
+
const dag = await this.db.query.dags.findFirst({
|
|
103
|
+
where: eq(dags.id, dagId),
|
|
104
|
+
});
|
|
105
|
+
if (!dag) {
|
|
106
|
+
throw new NotFoundError('DAG', dagId);
|
|
107
|
+
}
|
|
108
|
+
const allExecutions = await this.db.query.dagExecutions.findMany({
|
|
109
|
+
where: eq(dagExecutions.dagId, dagId),
|
|
110
|
+
});
|
|
111
|
+
const executionTotalCost = allExecutions.reduce((sum, e) => sum + parseFloat(e.totalCostUsd ?? '0'), 0);
|
|
112
|
+
const planningCost = parseFloat(dag.planningTotalCostUsd ?? '0');
|
|
113
|
+
this.logger.debug({ dagId, planningCost, executionTotalCost }, 'Retrieved DAG costs');
|
|
114
|
+
return {
|
|
115
|
+
dagId,
|
|
116
|
+
planning: {
|
|
117
|
+
totalUsage: dag.planningTotalUsage,
|
|
118
|
+
totalCostUsd: dag.planningTotalCostUsd ?? null,
|
|
119
|
+
attempts: dag.planningAttempts,
|
|
120
|
+
},
|
|
121
|
+
executions: allExecutions.map(e => ({
|
|
122
|
+
executionId: e.id,
|
|
123
|
+
status: e.status,
|
|
124
|
+
totalCostUsd: e.totalCostUsd ?? null,
|
|
125
|
+
startedAt: e.startedAt ?? null,
|
|
126
|
+
completedAt: e.completedAt ?? null,
|
|
127
|
+
})),
|
|
128
|
+
totals: {
|
|
129
|
+
planningCostUsd: dag.planningTotalCostUsd ?? '0',
|
|
130
|
+
executionsCostUsd: executionTotalCost.toString(),
|
|
131
|
+
grandTotalCostUsd: (planningCost + executionTotalCost).toString(),
|
|
132
|
+
},
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Get cost summary aggregated by date
|
|
137
|
+
*/
|
|
138
|
+
async getCostSummary(opts = {}) {
|
|
139
|
+
const groupBy = opts.groupBy ?? 'day';
|
|
140
|
+
const fromDate = parseDate(opts.from, new Date(Date.now() - 30 * 24 * 60 * 60 * 1000));
|
|
141
|
+
const toDate = parseDate(opts.to, new Date());
|
|
142
|
+
const allDags = await this.db.query.dags.findMany();
|
|
143
|
+
const allExecutions = await this.db.query.dagExecutions.findMany();
|
|
144
|
+
const costsByDate = new Map();
|
|
145
|
+
for (const dag of allDags) {
|
|
146
|
+
if (!dag.createdAt)
|
|
147
|
+
continue;
|
|
148
|
+
const dagDate = dag.createdAt instanceof Date ? dag.createdAt : new Date(dag.createdAt);
|
|
149
|
+
if (dagDate < fromDate || dagDate > toDate)
|
|
150
|
+
continue;
|
|
151
|
+
const dateKey = formatDateByGroup(dagDate, groupBy);
|
|
152
|
+
const existing = costsByDate.get(dateKey) ?? { planningCostUsd: 0, executionCostUsd: 0 };
|
|
153
|
+
existing.planningCostUsd += parseFloat(dag.planningTotalCostUsd ?? '0');
|
|
154
|
+
costsByDate.set(dateKey, existing);
|
|
155
|
+
}
|
|
156
|
+
for (const exec of allExecutions) {
|
|
157
|
+
if (!exec.completedAt)
|
|
158
|
+
continue;
|
|
159
|
+
const execDate = exec.completedAt instanceof Date ? exec.completedAt : new Date(exec.completedAt);
|
|
160
|
+
if (execDate < fromDate || execDate > toDate)
|
|
161
|
+
continue;
|
|
162
|
+
const dateKey = formatDateByGroup(execDate, groupBy);
|
|
163
|
+
const existing = costsByDate.get(dateKey) ?? { planningCostUsd: 0, executionCostUsd: 0 };
|
|
164
|
+
existing.executionCostUsd += parseFloat(exec.totalCostUsd ?? '0');
|
|
165
|
+
costsByDate.set(dateKey, existing);
|
|
166
|
+
}
|
|
167
|
+
const summary = Array.from(costsByDate.entries())
|
|
168
|
+
.map(([date, costs]) => ({
|
|
169
|
+
date,
|
|
170
|
+
planningCostUsd: costs.planningCostUsd.toString(),
|
|
171
|
+
executionCostUsd: costs.executionCostUsd.toString(),
|
|
172
|
+
totalCostUsd: (costs.planningCostUsd + costs.executionCostUsd).toString(),
|
|
173
|
+
}))
|
|
174
|
+
.sort((a, b) => a.date.localeCompare(b.date));
|
|
175
|
+
const totals = summary.reduce((acc, day) => ({
|
|
176
|
+
planningCostUsd: acc.planningCostUsd + parseFloat(day.planningCostUsd),
|
|
177
|
+
executionCostUsd: acc.executionCostUsd + parseFloat(day.executionCostUsd),
|
|
178
|
+
totalCostUsd: acc.totalCostUsd + parseFloat(day.totalCostUsd),
|
|
179
|
+
}), { planningCostUsd: 0, executionCostUsd: 0, totalCostUsd: 0 });
|
|
180
|
+
this.logger.debug({ from: fromDate, to: toDate, groupBy, entries: summary.length }, 'Retrieved cost summary');
|
|
181
|
+
return {
|
|
182
|
+
dateRange: {
|
|
183
|
+
from: fromDate.toISOString(),
|
|
184
|
+
to: toDate.toISOString(),
|
|
185
|
+
groupBy,
|
|
186
|
+
},
|
|
187
|
+
summary,
|
|
188
|
+
totals: {
|
|
189
|
+
planningCostUsd: totals.planningCostUsd.toString(),
|
|
190
|
+
executionCostUsd: totals.executionCostUsd.toString(),
|
|
191
|
+
totalCostUsd: totals.totalCostUsd.toString(),
|
|
192
|
+
},
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
//# sourceMappingURL=costs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"costs.js","sourceRoot":"","sources":["../../../src/core/execution/costs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DAG Executor
|
|
3
|
+
*
|
|
4
|
+
* Executes DAG (Directed Acyclic Graph) workflows by running tasks
|
|
5
|
+
* in dependency order with parallel execution where possible.
|
|
6
|
+
*/
|
|
7
|
+
import type { DrizzleDB } from '../../db/client.js';
|
|
8
|
+
import type { LLMProvider } from '../providers/types.js';
|
|
9
|
+
import type { ToolRegistry } from '../tools/registry.js';
|
|
10
|
+
export interface SubTask {
|
|
11
|
+
id: string;
|
|
12
|
+
description: string;
|
|
13
|
+
thought: string;
|
|
14
|
+
action_type: 'tool' | 'inference';
|
|
15
|
+
tool_or_prompt: {
|
|
16
|
+
name: string;
|
|
17
|
+
params?: Record<string, any>;
|
|
18
|
+
};
|
|
19
|
+
expected_output: string;
|
|
20
|
+
dependencies: string[];
|
|
21
|
+
}
|
|
22
|
+
export interface DecomposerJob {
|
|
23
|
+
original_request: string;
|
|
24
|
+
title?: string;
|
|
25
|
+
intent: {
|
|
26
|
+
primary: string;
|
|
27
|
+
sub_intents: string[];
|
|
28
|
+
};
|
|
29
|
+
entities: Array<{
|
|
30
|
+
entity: string;
|
|
31
|
+
type: string;
|
|
32
|
+
grounded_value: string;
|
|
33
|
+
}>;
|
|
34
|
+
sub_tasks: SubTask[];
|
|
35
|
+
synthesis_plan: string;
|
|
36
|
+
validation: {
|
|
37
|
+
coverage: string;
|
|
38
|
+
gaps: string[];
|
|
39
|
+
iteration_triggers: string[];
|
|
40
|
+
};
|
|
41
|
+
clarification_needed: boolean;
|
|
42
|
+
clarification_query?: string;
|
|
43
|
+
}
|
|
44
|
+
export interface DAGExecutorConfig {
|
|
45
|
+
db: DrizzleDB;
|
|
46
|
+
llmProvider: LLMProvider;
|
|
47
|
+
toolRegistry: ToolRegistry;
|
|
48
|
+
artifactsDir?: string;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Execution configuration for performance tuning
|
|
52
|
+
*/
|
|
53
|
+
export interface ExecutionConfig {
|
|
54
|
+
/**
|
|
55
|
+
* Skip event emission for maximum speed when streaming not needed.
|
|
56
|
+
* Default: false (events enabled)
|
|
57
|
+
*/
|
|
58
|
+
skipEvents?: boolean;
|
|
59
|
+
/**
|
|
60
|
+
* Batch DB updates per wave instead of per-task.
|
|
61
|
+
* Default: true
|
|
62
|
+
*/
|
|
63
|
+
batchDbUpdates?: boolean;
|
|
64
|
+
}
|
|
65
|
+
export interface GlobalContext {
|
|
66
|
+
formatted: string;
|
|
67
|
+
totalTasks: number;
|
|
68
|
+
}
|
|
69
|
+
export interface TaskExecutionResult {
|
|
70
|
+
content: any;
|
|
71
|
+
usage?: {
|
|
72
|
+
promptTokens?: number;
|
|
73
|
+
completionTokens?: number;
|
|
74
|
+
totalTokens?: number;
|
|
75
|
+
};
|
|
76
|
+
costUsd?: number;
|
|
77
|
+
generationStats?: Record<string, any>;
|
|
78
|
+
}
|
|
79
|
+
export declare class DAGExecutor {
|
|
80
|
+
private db;
|
|
81
|
+
private llmProvider;
|
|
82
|
+
private toolRegistry;
|
|
83
|
+
private artifactsDir;
|
|
84
|
+
private logger;
|
|
85
|
+
constructor(config: DAGExecutorConfig);
|
|
86
|
+
private extractUrls;
|
|
87
|
+
private buildGlobalContext;
|
|
88
|
+
private buildInferencePrompt;
|
|
89
|
+
private resolveDependencies;
|
|
90
|
+
private handleMultipleMatches;
|
|
91
|
+
private resolveEmailContent;
|
|
92
|
+
private resolveWriteFileContent;
|
|
93
|
+
private resolveFetchURLs;
|
|
94
|
+
private resolveStringReplacements;
|
|
95
|
+
/**
|
|
96
|
+
* Pre-fetch all agents needed for inference tasks
|
|
97
|
+
* Reduces DB queries during execution from O(n) to O(1) per agent
|
|
98
|
+
*/
|
|
99
|
+
private prefetchAgents;
|
|
100
|
+
/**
|
|
101
|
+
* Conditionally emit event based on config
|
|
102
|
+
*/
|
|
103
|
+
private emitEventIfEnabled;
|
|
104
|
+
execute(job: DecomposerJob, executionId: string, dagId?: string, originalRequest?: string, config?: ExecutionConfig): Promise<string>;
|
|
105
|
+
private suspendExecution;
|
|
106
|
+
private deriveExecutionStatus;
|
|
107
|
+
private synthesize;
|
|
108
|
+
private validate;
|
|
109
|
+
private aggregateUsage;
|
|
110
|
+
private aggregateCost;
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=dagExecutor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dagExecutor.d.ts","sourceRoot":"","sources":["../../../src/core/execution/dagExecutor.ts"],"names":[],"mappings":"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"}
|