@sowonai/crewx-cli 0.8.0-rc.3 → 0.8.0-rc.5
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/app.module.js
CHANGED
|
@@ -72,6 +72,7 @@ const mcp_client_service_1 = require("./services/mcp-client.service");
|
|
|
72
72
|
const remote_agent_service_1 = require("./services/remote-agent.service");
|
|
73
73
|
const provider_bridge_service_1 = require("./services/provider-bridge.service");
|
|
74
74
|
const skill_loader_service_1 = require("./services/skill-loader.service");
|
|
75
|
+
const tracing_service_1 = require("./services/tracing.service");
|
|
75
76
|
const crewx_sdk_2 = require("@sowonai/crewx-sdk");
|
|
76
77
|
const path = __importStar(require("path"));
|
|
77
78
|
const fs_1 = require("fs");
|
|
@@ -148,6 +149,7 @@ let AppModule = AppModule_1 = class AppModule {
|
|
|
148
149
|
doctor_handler_1.DoctorHandler,
|
|
149
150
|
help_service_1.HelpService,
|
|
150
151
|
config_service_1.ConfigService,
|
|
152
|
+
tracing_service_1.TracingService,
|
|
151
153
|
],
|
|
152
154
|
controllers: [mcp_controller_1.McpController, health_controller_1.HealthController],
|
|
153
155
|
exports: [ai_service_1.AIService, project_service_1.ProjectService, crewx_tool_1.CrewXTool, ai_provider_service_1.AIProviderService, provider_bridge_service_1.ProviderBridgeService],
|
package/dist/app.module.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.module.js","sourceRoot":"","sources":["../src/app.module.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAAuD;AACvD,uCAA+C;AAC/C,oEAA+D;AAC/D,6CAAyC;AACzC,uDAAmD;AACnD,6CAAyC;AACzC,qDAAiD;AAEjD,kDAAiD;AACjD,+DAA0D;AAC1D,mFAA8E;AAC9E,wFAAmF;AACnF,gFAA2E;AAC3E,kFAA6E;AAC7E,oEAA+D;AAC/D,0EAAqE;AACrE,kEAA8D;AAC9D,gFAA2E;AAC3E,qDAAiD;AACjD,yDAAqD;AACrD,0DAAsD;AACtD,8DAA0D;AAC1D,gGAA2F;AAC3F,kFAA6E;AAC7E,iDAA6D;AAC7D,0DAAsD;AACtD,kEAA6D;AAC7D,2DAAuD;AACvD,sEAAiE;AACjE,0EAAqE;AACrE,gFAA2E;AAC3E,0EAAqE;
|
|
1
|
+
{"version":3,"file":"app.module.js","sourceRoot":"","sources":["../src/app.module.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { OnModuleDestroy, OnModuleInit } from '@nestjs/common';
|
|
2
|
+
export declare enum TaskStatus {
|
|
3
|
+
PENDING = "pending",
|
|
4
|
+
RUNNING = "running",
|
|
5
|
+
SUCCESS = "success",
|
|
6
|
+
FAILED = "failed"
|
|
7
|
+
}
|
|
8
|
+
export declare enum SpanKind {
|
|
9
|
+
INTERNAL = "internal",
|
|
10
|
+
CLIENT = "client",
|
|
11
|
+
SERVER = "server",
|
|
12
|
+
PRODUCER = "producer",
|
|
13
|
+
CONSUMER = "consumer"
|
|
14
|
+
}
|
|
15
|
+
export interface TaskRecord {
|
|
16
|
+
id: string;
|
|
17
|
+
agent_id: string;
|
|
18
|
+
user_id?: string;
|
|
19
|
+
prompt: string;
|
|
20
|
+
mode: 'query' | 'execute';
|
|
21
|
+
status: TaskStatus;
|
|
22
|
+
result?: string;
|
|
23
|
+
error?: string;
|
|
24
|
+
started_at: string;
|
|
25
|
+
completed_at?: string;
|
|
26
|
+
duration_ms?: number;
|
|
27
|
+
metadata?: Record<string, unknown>;
|
|
28
|
+
}
|
|
29
|
+
export interface SpanRecord {
|
|
30
|
+
id: string;
|
|
31
|
+
task_id: string;
|
|
32
|
+
parent_span_id?: string;
|
|
33
|
+
name: string;
|
|
34
|
+
kind: SpanKind;
|
|
35
|
+
status: 'ok' | 'error';
|
|
36
|
+
started_at: string;
|
|
37
|
+
completed_at?: string;
|
|
38
|
+
duration_ms?: number;
|
|
39
|
+
input?: string;
|
|
40
|
+
output?: string;
|
|
41
|
+
error?: string;
|
|
42
|
+
attributes?: Record<string, unknown>;
|
|
43
|
+
}
|
|
44
|
+
export interface CreateTaskInput {
|
|
45
|
+
agent_id: string;
|
|
46
|
+
user_id?: string;
|
|
47
|
+
prompt: string;
|
|
48
|
+
mode: 'query' | 'execute';
|
|
49
|
+
metadata?: Record<string, unknown>;
|
|
50
|
+
}
|
|
51
|
+
export interface CreateSpanInput {
|
|
52
|
+
task_id: string;
|
|
53
|
+
parent_span_id?: string;
|
|
54
|
+
name: string;
|
|
55
|
+
kind?: SpanKind;
|
|
56
|
+
input?: string;
|
|
57
|
+
attributes?: Record<string, unknown>;
|
|
58
|
+
}
|
|
59
|
+
export interface TracingServiceOptions {
|
|
60
|
+
dbPath?: string;
|
|
61
|
+
}
|
|
62
|
+
export declare class TracingService implements OnModuleInit, OnModuleDestroy {
|
|
63
|
+
private readonly logger;
|
|
64
|
+
private db;
|
|
65
|
+
private dbPath;
|
|
66
|
+
constructor(options?: TracingServiceOptions);
|
|
67
|
+
onModuleInit(): void;
|
|
68
|
+
onModuleDestroy(): void;
|
|
69
|
+
private initializeDatabase;
|
|
70
|
+
close(): void;
|
|
71
|
+
private generateId;
|
|
72
|
+
private now;
|
|
73
|
+
createTask(input: CreateTaskInput): string | null;
|
|
74
|
+
completeTask(taskId: string, result?: string): boolean;
|
|
75
|
+
failTask(taskId: string, error: string): boolean;
|
|
76
|
+
getTask(taskId: string): TaskRecord | null;
|
|
77
|
+
listTasks(options?: {
|
|
78
|
+
limit?: number;
|
|
79
|
+
offset?: number;
|
|
80
|
+
agentId?: string;
|
|
81
|
+
}): TaskRecord[];
|
|
82
|
+
createSpan(input: CreateSpanInput): string | null;
|
|
83
|
+
completeSpan(spanId: string, output?: string): boolean;
|
|
84
|
+
failSpan(spanId: string, error: string): boolean;
|
|
85
|
+
getSpansForTask(taskId: string): SpanRecord[];
|
|
86
|
+
getSpan(spanId: string): SpanRecord | null;
|
|
87
|
+
cleanupOldTasks(daysToKeep?: number): number;
|
|
88
|
+
getStats(): {
|
|
89
|
+
taskCount: number;
|
|
90
|
+
spanCount: number;
|
|
91
|
+
dbSizeBytes: number;
|
|
92
|
+
} | null;
|
|
93
|
+
isEnabled(): boolean;
|
|
94
|
+
getDbPath(): string;
|
|
95
|
+
}
|
|
@@ -0,0 +1,422 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
19
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
20
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
21
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
22
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
23
|
+
};
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
41
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
42
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
43
|
+
};
|
|
44
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
45
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
46
|
+
};
|
|
47
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
48
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
49
|
+
};
|
|
50
|
+
var TracingService_1;
|
|
51
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
52
|
+
exports.TracingService = exports.SpanKind = exports.TaskStatus = void 0;
|
|
53
|
+
const common_1 = require("@nestjs/common");
|
|
54
|
+
const fs = __importStar(require("fs"));
|
|
55
|
+
const path = __importStar(require("path"));
|
|
56
|
+
const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
|
|
57
|
+
var TaskStatus;
|
|
58
|
+
(function (TaskStatus) {
|
|
59
|
+
TaskStatus["PENDING"] = "pending";
|
|
60
|
+
TaskStatus["RUNNING"] = "running";
|
|
61
|
+
TaskStatus["SUCCESS"] = "success";
|
|
62
|
+
TaskStatus["FAILED"] = "failed";
|
|
63
|
+
})(TaskStatus || (exports.TaskStatus = TaskStatus = {}));
|
|
64
|
+
var SpanKind;
|
|
65
|
+
(function (SpanKind) {
|
|
66
|
+
SpanKind["INTERNAL"] = "internal";
|
|
67
|
+
SpanKind["CLIENT"] = "client";
|
|
68
|
+
SpanKind["SERVER"] = "server";
|
|
69
|
+
SpanKind["PRODUCER"] = "producer";
|
|
70
|
+
SpanKind["CONSUMER"] = "consumer";
|
|
71
|
+
})(SpanKind || (exports.SpanKind = SpanKind = {}));
|
|
72
|
+
let TracingService = TracingService_1 = class TracingService {
|
|
73
|
+
constructor(options) {
|
|
74
|
+
this.logger = new common_1.Logger(TracingService_1.name);
|
|
75
|
+
this.db = null;
|
|
76
|
+
if (options?.dbPath) {
|
|
77
|
+
this.dbPath = options.dbPath;
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
const crewxDir = path.join(process.cwd(), '.crewx');
|
|
81
|
+
this.dbPath = path.join(crewxDir, 'traces.db');
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
onModuleInit() {
|
|
85
|
+
this.initializeDatabase();
|
|
86
|
+
}
|
|
87
|
+
onModuleDestroy() {
|
|
88
|
+
this.close();
|
|
89
|
+
}
|
|
90
|
+
initializeDatabase() {
|
|
91
|
+
try {
|
|
92
|
+
const dir = path.dirname(this.dbPath);
|
|
93
|
+
if (!fs.existsSync(dir)) {
|
|
94
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
95
|
+
}
|
|
96
|
+
this.db = new better_sqlite3_1.default(this.dbPath);
|
|
97
|
+
this.db.pragma('journal_mode = WAL');
|
|
98
|
+
this.db.exec(`
|
|
99
|
+
CREATE TABLE IF NOT EXISTS tasks (
|
|
100
|
+
id TEXT PRIMARY KEY,
|
|
101
|
+
agent_id TEXT NOT NULL,
|
|
102
|
+
user_id TEXT,
|
|
103
|
+
prompt TEXT NOT NULL,
|
|
104
|
+
mode TEXT NOT NULL CHECK (mode IN ('query', 'execute')),
|
|
105
|
+
status TEXT NOT NULL CHECK (status IN ('pending', 'running', 'success', 'failed')),
|
|
106
|
+
result TEXT,
|
|
107
|
+
error TEXT,
|
|
108
|
+
started_at TEXT NOT NULL,
|
|
109
|
+
completed_at TEXT,
|
|
110
|
+
duration_ms INTEGER,
|
|
111
|
+
metadata TEXT
|
|
112
|
+
)
|
|
113
|
+
`);
|
|
114
|
+
this.db.exec(`
|
|
115
|
+
CREATE TABLE IF NOT EXISTS spans (
|
|
116
|
+
id TEXT PRIMARY KEY,
|
|
117
|
+
task_id TEXT NOT NULL,
|
|
118
|
+
parent_span_id TEXT,
|
|
119
|
+
name TEXT NOT NULL,
|
|
120
|
+
kind TEXT NOT NULL CHECK (kind IN ('internal', 'client', 'server', 'producer', 'consumer')),
|
|
121
|
+
status TEXT NOT NULL CHECK (status IN ('ok', 'error')),
|
|
122
|
+
started_at TEXT NOT NULL,
|
|
123
|
+
completed_at TEXT,
|
|
124
|
+
duration_ms INTEGER,
|
|
125
|
+
input TEXT,
|
|
126
|
+
output TEXT,
|
|
127
|
+
error TEXT,
|
|
128
|
+
attributes TEXT,
|
|
129
|
+
FOREIGN KEY (task_id) REFERENCES tasks(id) ON DELETE CASCADE,
|
|
130
|
+
FOREIGN KEY (parent_span_id) REFERENCES spans(id) ON DELETE SET NULL
|
|
131
|
+
)
|
|
132
|
+
`);
|
|
133
|
+
this.db.exec(`
|
|
134
|
+
CREATE INDEX IF NOT EXISTS idx_tasks_agent_id ON tasks(agent_id);
|
|
135
|
+
CREATE INDEX IF NOT EXISTS idx_tasks_status ON tasks(status);
|
|
136
|
+
CREATE INDEX IF NOT EXISTS idx_tasks_started_at ON tasks(started_at);
|
|
137
|
+
CREATE INDEX IF NOT EXISTS idx_spans_task_id ON spans(task_id);
|
|
138
|
+
CREATE INDEX IF NOT EXISTS idx_spans_parent_span_id ON spans(parent_span_id);
|
|
139
|
+
`);
|
|
140
|
+
this.logger.log(`Tracing database initialized at ${this.dbPath}`);
|
|
141
|
+
}
|
|
142
|
+
catch (error) {
|
|
143
|
+
this.logger.error(`Failed to initialize tracing database: ${error instanceof Error ? error.message : String(error)}`);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
close() {
|
|
147
|
+
if (this.db) {
|
|
148
|
+
this.db.close();
|
|
149
|
+
this.db = null;
|
|
150
|
+
this.logger.log('Tracing database connection closed');
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
generateId() {
|
|
154
|
+
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
|
|
155
|
+
const r = (Math.random() * 16) | 0;
|
|
156
|
+
const v = c === 'x' ? r : (r & 0x3) | 0x8;
|
|
157
|
+
return v.toString(16);
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
now() {
|
|
161
|
+
return new Date().toISOString();
|
|
162
|
+
}
|
|
163
|
+
createTask(input) {
|
|
164
|
+
if (!this.db) {
|
|
165
|
+
return null;
|
|
166
|
+
}
|
|
167
|
+
const id = this.generateId();
|
|
168
|
+
const now = this.now();
|
|
169
|
+
try {
|
|
170
|
+
const stmt = this.db.prepare(`
|
|
171
|
+
INSERT INTO tasks (id, agent_id, user_id, prompt, mode, status, started_at, metadata)
|
|
172
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
|
173
|
+
`);
|
|
174
|
+
stmt.run(id, input.agent_id, input.user_id ?? null, input.prompt, input.mode, TaskStatus.RUNNING, now, input.metadata ? JSON.stringify(input.metadata) : null);
|
|
175
|
+
this.logger.debug(`Task created: ${id} for agent ${input.agent_id}`);
|
|
176
|
+
return id;
|
|
177
|
+
}
|
|
178
|
+
catch (error) {
|
|
179
|
+
this.logger.error(`Failed to create task: ${error instanceof Error ? error.message : String(error)}`);
|
|
180
|
+
return null;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
completeTask(taskId, result) {
|
|
184
|
+
if (!this.db) {
|
|
185
|
+
return false;
|
|
186
|
+
}
|
|
187
|
+
try {
|
|
188
|
+
const now = this.now();
|
|
189
|
+
const stmt = this.db.prepare(`
|
|
190
|
+
UPDATE tasks
|
|
191
|
+
SET status = ?, result = ?, completed_at = ?,
|
|
192
|
+
duration_ms = CAST((julianday(?) - julianday(started_at)) * 86400000 AS INTEGER)
|
|
193
|
+
WHERE id = ?
|
|
194
|
+
`);
|
|
195
|
+
const info = stmt.run(TaskStatus.SUCCESS, result ?? null, now, now, taskId);
|
|
196
|
+
return info.changes > 0;
|
|
197
|
+
}
|
|
198
|
+
catch (error) {
|
|
199
|
+
this.logger.error(`Failed to complete task ${taskId}: ${error instanceof Error ? error.message : String(error)}`);
|
|
200
|
+
return false;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
failTask(taskId, error) {
|
|
204
|
+
if (!this.db) {
|
|
205
|
+
return false;
|
|
206
|
+
}
|
|
207
|
+
try {
|
|
208
|
+
const now = this.now();
|
|
209
|
+
const stmt = this.db.prepare(`
|
|
210
|
+
UPDATE tasks
|
|
211
|
+
SET status = ?, error = ?, completed_at = ?,
|
|
212
|
+
duration_ms = CAST((julianday(?) - julianday(started_at)) * 86400000 AS INTEGER)
|
|
213
|
+
WHERE id = ?
|
|
214
|
+
`);
|
|
215
|
+
const info = stmt.run(TaskStatus.FAILED, error, now, now, taskId);
|
|
216
|
+
return info.changes > 0;
|
|
217
|
+
}
|
|
218
|
+
catch (error) {
|
|
219
|
+
this.logger.error(`Failed to fail task ${taskId}: ${error instanceof Error ? error.message : String(error)}`);
|
|
220
|
+
return false;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
getTask(taskId) {
|
|
224
|
+
if (!this.db) {
|
|
225
|
+
return null;
|
|
226
|
+
}
|
|
227
|
+
try {
|
|
228
|
+
const stmt = this.db.prepare('SELECT * FROM tasks WHERE id = ?');
|
|
229
|
+
const row = stmt.get(taskId);
|
|
230
|
+
if (!row) {
|
|
231
|
+
return null;
|
|
232
|
+
}
|
|
233
|
+
return {
|
|
234
|
+
...row,
|
|
235
|
+
metadata: row.metadata ? JSON.parse(row.metadata) : undefined,
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
catch (error) {
|
|
239
|
+
this.logger.error(`Failed to get task ${taskId}: ${error instanceof Error ? error.message : String(error)}`);
|
|
240
|
+
return null;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
listTasks(options) {
|
|
244
|
+
if (!this.db) {
|
|
245
|
+
return [];
|
|
246
|
+
}
|
|
247
|
+
const limit = options?.limit ?? 20;
|
|
248
|
+
const offset = options?.offset ?? 0;
|
|
249
|
+
try {
|
|
250
|
+
let query = 'SELECT * FROM tasks';
|
|
251
|
+
const params = [];
|
|
252
|
+
if (options?.agentId) {
|
|
253
|
+
query += ' WHERE agent_id = ?';
|
|
254
|
+
params.push(options.agentId);
|
|
255
|
+
}
|
|
256
|
+
query += ' ORDER BY started_at DESC LIMIT ? OFFSET ?';
|
|
257
|
+
params.push(limit, offset);
|
|
258
|
+
const stmt = this.db.prepare(query);
|
|
259
|
+
const rows = stmt.all(...params);
|
|
260
|
+
return rows.map((row) => ({
|
|
261
|
+
...row,
|
|
262
|
+
metadata: row.metadata ? JSON.parse(row.metadata) : undefined,
|
|
263
|
+
}));
|
|
264
|
+
}
|
|
265
|
+
catch (error) {
|
|
266
|
+
this.logger.error(`Failed to list tasks: ${error instanceof Error ? error.message : String(error)}`);
|
|
267
|
+
return [];
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
createSpan(input) {
|
|
271
|
+
if (!this.db) {
|
|
272
|
+
return null;
|
|
273
|
+
}
|
|
274
|
+
const id = this.generateId();
|
|
275
|
+
const now = this.now();
|
|
276
|
+
try {
|
|
277
|
+
const stmt = this.db.prepare(`
|
|
278
|
+
INSERT INTO spans (id, task_id, parent_span_id, name, kind, status, started_at, input, attributes)
|
|
279
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
280
|
+
`);
|
|
281
|
+
stmt.run(id, input.task_id, input.parent_span_id ?? null, input.name, input.kind ?? SpanKind.INTERNAL, 'ok', now, input.input ?? null, input.attributes ? JSON.stringify(input.attributes) : null);
|
|
282
|
+
this.logger.debug(`Span created: ${id} for task ${input.task_id}`);
|
|
283
|
+
return id;
|
|
284
|
+
}
|
|
285
|
+
catch (error) {
|
|
286
|
+
this.logger.error(`Failed to create span: ${error instanceof Error ? error.message : String(error)}`);
|
|
287
|
+
return null;
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
completeSpan(spanId, output) {
|
|
291
|
+
if (!this.db) {
|
|
292
|
+
return false;
|
|
293
|
+
}
|
|
294
|
+
try {
|
|
295
|
+
const now = this.now();
|
|
296
|
+
const stmt = this.db.prepare(`
|
|
297
|
+
UPDATE spans
|
|
298
|
+
SET status = 'ok', output = ?, completed_at = ?,
|
|
299
|
+
duration_ms = CAST((julianday(?) - julianday(started_at)) * 86400000 AS INTEGER)
|
|
300
|
+
WHERE id = ?
|
|
301
|
+
`);
|
|
302
|
+
const info = stmt.run(output ?? null, now, now, spanId);
|
|
303
|
+
return info.changes > 0;
|
|
304
|
+
}
|
|
305
|
+
catch (error) {
|
|
306
|
+
this.logger.error(`Failed to complete span ${spanId}: ${error instanceof Error ? error.message : String(error)}`);
|
|
307
|
+
return false;
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
failSpan(spanId, error) {
|
|
311
|
+
if (!this.db) {
|
|
312
|
+
return false;
|
|
313
|
+
}
|
|
314
|
+
try {
|
|
315
|
+
const now = this.now();
|
|
316
|
+
const stmt = this.db.prepare(`
|
|
317
|
+
UPDATE spans
|
|
318
|
+
SET status = 'error', error = ?, completed_at = ?,
|
|
319
|
+
duration_ms = CAST((julianday(?) - julianday(started_at)) * 86400000 AS INTEGER)
|
|
320
|
+
WHERE id = ?
|
|
321
|
+
`);
|
|
322
|
+
const info = stmt.run(error, now, now, spanId);
|
|
323
|
+
return info.changes > 0;
|
|
324
|
+
}
|
|
325
|
+
catch (error) {
|
|
326
|
+
this.logger.error(`Failed to fail span ${spanId}: ${error instanceof Error ? error.message : String(error)}`);
|
|
327
|
+
return false;
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
getSpansForTask(taskId) {
|
|
331
|
+
if (!this.db) {
|
|
332
|
+
return [];
|
|
333
|
+
}
|
|
334
|
+
try {
|
|
335
|
+
const stmt = this.db.prepare('SELECT * FROM spans WHERE task_id = ? ORDER BY started_at ASC');
|
|
336
|
+
const rows = stmt.all(taskId);
|
|
337
|
+
return rows.map((row) => ({
|
|
338
|
+
...row,
|
|
339
|
+
attributes: row.attributes ? JSON.parse(row.attributes) : undefined,
|
|
340
|
+
}));
|
|
341
|
+
}
|
|
342
|
+
catch (error) {
|
|
343
|
+
this.logger.error(`Failed to get spans for task ${taskId}: ${error instanceof Error ? error.message : String(error)}`);
|
|
344
|
+
return [];
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
getSpan(spanId) {
|
|
348
|
+
if (!this.db) {
|
|
349
|
+
return null;
|
|
350
|
+
}
|
|
351
|
+
try {
|
|
352
|
+
const stmt = this.db.prepare('SELECT * FROM spans WHERE id = ?');
|
|
353
|
+
const row = stmt.get(spanId);
|
|
354
|
+
if (!row) {
|
|
355
|
+
return null;
|
|
356
|
+
}
|
|
357
|
+
return {
|
|
358
|
+
...row,
|
|
359
|
+
attributes: row.attributes ? JSON.parse(row.attributes) : undefined,
|
|
360
|
+
};
|
|
361
|
+
}
|
|
362
|
+
catch (error) {
|
|
363
|
+
this.logger.error(`Failed to get span ${spanId}: ${error instanceof Error ? error.message : String(error)}`);
|
|
364
|
+
return null;
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
cleanupOldTasks(daysToKeep = 30) {
|
|
368
|
+
if (!this.db) {
|
|
369
|
+
return 0;
|
|
370
|
+
}
|
|
371
|
+
try {
|
|
372
|
+
const cutoffDate = new Date();
|
|
373
|
+
cutoffDate.setDate(cutoffDate.getDate() - daysToKeep);
|
|
374
|
+
const cutoff = cutoffDate.toISOString();
|
|
375
|
+
const stmt = this.db.prepare('DELETE FROM tasks WHERE started_at < ?');
|
|
376
|
+
const info = stmt.run(cutoff);
|
|
377
|
+
if (info.changes > 0) {
|
|
378
|
+
this.logger.log(`Cleaned up ${info.changes} old tasks`);
|
|
379
|
+
}
|
|
380
|
+
return info.changes;
|
|
381
|
+
}
|
|
382
|
+
catch (error) {
|
|
383
|
+
this.logger.error(`Failed to cleanup old tasks: ${error instanceof Error ? error.message : String(error)}`);
|
|
384
|
+
return 0;
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
getStats() {
|
|
388
|
+
if (!this.db) {
|
|
389
|
+
return null;
|
|
390
|
+
}
|
|
391
|
+
try {
|
|
392
|
+
const taskCountStmt = this.db.prepare('SELECT COUNT(*) as count FROM tasks');
|
|
393
|
+
const spanCountStmt = this.db.prepare('SELECT COUNT(*) as count FROM spans');
|
|
394
|
+
const taskCount = taskCountStmt.get().count;
|
|
395
|
+
const spanCount = spanCountStmt.get().count;
|
|
396
|
+
let dbSizeBytes = 0;
|
|
397
|
+
if (fs.existsSync(this.dbPath)) {
|
|
398
|
+
const stats = fs.statSync(this.dbPath);
|
|
399
|
+
dbSizeBytes = stats.size;
|
|
400
|
+
}
|
|
401
|
+
return { taskCount, spanCount, dbSizeBytes };
|
|
402
|
+
}
|
|
403
|
+
catch (error) {
|
|
404
|
+
this.logger.error(`Failed to get stats: ${error instanceof Error ? error.message : String(error)}`);
|
|
405
|
+
return null;
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
isEnabled() {
|
|
409
|
+
return this.db !== null;
|
|
410
|
+
}
|
|
411
|
+
getDbPath() {
|
|
412
|
+
return this.dbPath;
|
|
413
|
+
}
|
|
414
|
+
};
|
|
415
|
+
exports.TracingService = TracingService;
|
|
416
|
+
exports.TracingService = TracingService = TracingService_1 = __decorate([
|
|
417
|
+
(0, common_1.Injectable)(),
|
|
418
|
+
__param(0, (0, common_1.Optional)()),
|
|
419
|
+
__param(0, (0, common_1.Inject)('TRACING_OPTIONS')),
|
|
420
|
+
__metadata("design:paramtypes", [Object])
|
|
421
|
+
], TracingService);
|
|
422
|
+
//# sourceMappingURL=tracing.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tracing.service.js","sourceRoot":"","sources":["../../src/services/tracing.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAAqG;AACrG,uCAAyB;AACzB,2CAA6B;AAC7B,oEAAsC;AAKtC,IAAY,UAKX;AALD,WAAY,UAAU;IACpB,iCAAmB,CAAA;IACnB,iCAAmB,CAAA;IACnB,iCAAmB,CAAA;IACnB,+BAAiB,CAAA;AACnB,CAAC,EALW,UAAU,0BAAV,UAAU,QAKrB;AAKD,IAAY,QAMX;AAND,WAAY,QAAQ;IAClB,iCAAqB,CAAA;IACrB,6BAAiB,CAAA;IACjB,6BAAiB,CAAA;IACjB,iCAAqB,CAAA;IACrB,iCAAqB,CAAA;AACvB,CAAC,EANW,QAAQ,wBAAR,QAAQ,QAMnB;AAgFM,IAAM,cAAc,sBAApB,MAAM,cAAc;IAKzB,YACyC,OAA+B;QALvD,WAAM,GAAG,IAAI,eAAM,CAAC,gBAAc,CAAC,IAAI,CAAC,CAAC;QAClD,OAAE,GAA6B,IAAI,CAAC;QAM1C,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;YACpB,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC/B,CAAC;aAAM,CAAC;YACN,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC;YACpD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED,YAAY;QACV,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;IAED,eAAe;QACb,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;IAKO,kBAAkB;QACxB,IAAI,CAAC;YAEH,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACtC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACzC,CAAC;YAGD,IAAI,CAAC,EAAE,GAAG,IAAI,wBAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAGpC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;YAGrC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;OAeZ,CAAC,CAAC;YAGH,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;OAkBZ,CAAC,CAAC;YAGH,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;;;;;;OAMZ,CAAC,CAAC;YAEH,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,mCAAmC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACpE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,0CAA0C,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACnG,CAAC;QAEJ,CAAC;IACH,CAAC;IAKD,KAAK;QACH,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACZ,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAKO,UAAU;QAChB,OAAO,sCAAsC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;YACnE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;YACnC,MAAM,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;YAC1C,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACxB,CAAC,CAAC,CAAC;IACL,CAAC;IAKO,GAAG;QACT,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAClC,CAAC;IAKD,UAAU,CAAC,KAAsB;QAC/B,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEvB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;OAG5B,CAAC,CAAC;YAEH,IAAI,CAAC,GAAG,CACN,EAAE,EACF,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,OAAO,IAAI,IAAI,EACrB,KAAK,CAAC,MAAM,EACZ,KAAK,CAAC,IAAI,EACV,UAAU,CAAC,OAAO,EAClB,GAAG,EACH,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CACvD,CAAC;YAEF,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,EAAE,cAAc,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;YACrE,OAAO,EAAE,CAAC;QACZ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,0BAA0B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACnF,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAKD,YAAY,CAAC,MAAc,EAAE,MAAe;QAC1C,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;OAK5B,CAAC,CAAC;YAEH,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,IAAI,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;YAC5E,OAAO,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;QAC1B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,2BAA2B,MAAM,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC/F,CAAC;YACF,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAKD,QAAQ,CAAC,MAAc,EAAE,KAAa;QACpC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;OAK5B,CAAC,CAAC;YAEH,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;YAClE,OAAO,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;QAC1B,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,uBAAuB,MAAM,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC3F,CAAC;YACF,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAKD,OAAO,CAAC,MAAc;QACpB,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,kCAAkC,CAAC,CAAC;YACjE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAQ,CAAC;YAEpC,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,OAAO,IAAI,CAAC;YACd,CAAC;YAED,OAAO;gBACL,GAAG,GAAG;gBACN,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;aAC9D,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,sBAAsB,MAAM,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC1F,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAKD,SAAS,CAAC,OAA+D;QACvE,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,CAAC,CAAC;QAEpC,IAAI,CAAC;YACH,IAAI,KAAK,GAAG,qBAAqB,CAAC;YAClC,MAAM,MAAM,GAAU,EAAE,CAAC;YAEzB,IAAI,OAAO,EAAE,OAAO,EAAE,CAAC;gBACrB,KAAK,IAAI,qBAAqB,CAAC;gBAC/B,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC/B,CAAC;YAED,KAAK,IAAI,4CAA4C,CAAC;YACtD,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YAE3B,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACpC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAU,CAAC;YAE1C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBACxB,GAAG,GAAG;gBACN,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;aAC9D,CAAC,CAAC,CAAC;QACN,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,yBAAyB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAClF,CAAC;YACF,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAKD,UAAU,CAAC,KAAsB;QAC/B,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEvB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;OAG5B,CAAC,CAAC;YAEH,IAAI,CAAC,GAAG,CACN,EAAE,EACF,KAAK,CAAC,OAAO,EACb,KAAK,CAAC,cAAc,IAAI,IAAI,EAC5B,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,IAAI,IAAI,QAAQ,CAAC,QAAQ,EAC/B,IAAI,EACJ,GAAG,EACH,KAAK,CAAC,KAAK,IAAI,IAAI,EACnB,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAC3D,CAAC;YAEF,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,EAAE,aAAa,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YACnE,OAAO,EAAE,CAAC;QACZ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,0BAA0B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACnF,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAKD,YAAY,CAAC,MAAc,EAAE,MAAe;QAC1C,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;OAK5B,CAAC,CAAC;YAEH,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;YACxD,OAAO,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;QAC1B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,2BAA2B,MAAM,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC/F,CAAC;YACF,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAKD,QAAQ,CAAC,MAAc,EAAE,KAAa;QACpC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;OAK5B,CAAC,CAAC;YAEH,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;YAC/C,OAAO,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;QAC1B,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,uBAAuB,MAAM,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC3F,CAAC;YACF,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAKD,eAAe,CAAC,MAAc;QAC5B,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,+DAA+D,CAAC,CAAC;YAC9F,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAU,CAAC;YAEvC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBACxB,GAAG,GAAG;gBACN,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS;aACpE,CAAC,CAAC,CAAC;QACN,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,gCAAgC,MAAM,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACpG,CAAC;YACF,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAKD,OAAO,CAAC,MAAc;QACpB,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,kCAAkC,CAAC,CAAC;YACjE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAQ,CAAC;YAEpC,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,OAAO,IAAI,CAAC;YACd,CAAC;YAED,OAAO;gBACL,GAAG,GAAG;gBACN,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS;aACpE,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,sBAAsB,MAAM,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC1F,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAKD,eAAe,CAAC,aAAqB,EAAE;QACrC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,OAAO,CAAC,CAAC;QACX,CAAC;QAED,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC;YAC9B,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,UAAU,CAAC,CAAC;YACtD,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC;YAGxC,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,wCAAwC,CAAC,CAAC;YACvE,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAE9B,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;gBACrB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,OAAO,YAAY,CAAC,CAAC;YAC1D,CAAC;YAED,OAAO,IAAI,CAAC,OAAO,CAAC;QACtB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,gCAAgC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACzF,CAAC;YACF,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC;IAKD,QAAQ;QACN,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC;YACH,MAAM,aAAa,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC;YAC7E,MAAM,aAAa,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC;YAE7E,MAAM,SAAS,GAAI,aAAa,CAAC,GAAG,EAAwB,CAAC,KAAK,CAAC;YACnE,MAAM,SAAS,GAAI,aAAa,CAAC,GAAG,EAAwB,CAAC,KAAK,CAAC;YAGnE,IAAI,WAAW,GAAG,CAAC,CAAC;YACpB,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC/B,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACvC,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC;YAC3B,CAAC;YAED,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC;QAC/C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,wBAAwB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACjF,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAKD,SAAS;QACP,OAAO,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC;IAC1B,CAAC;IAKD,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;CACF,CAAA;AAxfY,wCAAc;yBAAd,cAAc;IAD1B,IAAA,mBAAU,GAAE;IAOR,WAAA,IAAA,iBAAQ,GAAE,CAAA;IAAE,WAAA,IAAA,eAAM,EAAC,iBAAiB,CAAC,CAAA;;GAN7B,cAAc,CAwf1B"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sowonai/crewx-cli",
|
|
3
|
-
"version": "0.8.0-rc.
|
|
3
|
+
"version": "0.8.0-rc.5",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"engines": {
|
|
6
6
|
"node": ">=20.19.0"
|
|
@@ -79,6 +79,7 @@
|
|
|
79
79
|
"@types/unist": "^3.0.3",
|
|
80
80
|
"ajv": "^8.17.1",
|
|
81
81
|
"ajv-formats": "^3.0.1",
|
|
82
|
+
"better-sqlite3": "^12.5.0",
|
|
82
83
|
"chalk": "^4.1.2",
|
|
83
84
|
"dotenv": "^17.2.3",
|
|
84
85
|
"execa": "^8.0.1",
|
|
@@ -102,6 +103,7 @@
|
|
|
102
103
|
"@nestjs/schematics": "^11.0.0",
|
|
103
104
|
"@nestjs/testing": "^11.0.0",
|
|
104
105
|
"@types/ajv": "^0.0.5",
|
|
106
|
+
"@types/better-sqlite3": "^7.6.13",
|
|
105
107
|
"@types/express": "^5.0.3",
|
|
106
108
|
"@types/node": "^20.19.19",
|
|
107
109
|
"@types/yargs": "^17.0.0",
|
|
@@ -129,6 +129,8 @@ layouts:
|
|
|
129
129
|
1. Read the skill file using the file_path
|
|
130
130
|
2. Follow the instructions in the skill document
|
|
131
131
|
3. Apply the skill's guidance to the user's request
|
|
132
|
+
|
|
133
|
+
**IMPORTANT**: Do NOT guess skill usage. Always read SKILL.md first before using any skill.
|
|
132
134
|
{{/if}}
|
|
133
135
|
{{/if}}
|
|
134
136
|
|