@ai-setting/roy-agent-core 1.4.13 → 1.4.15
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/config/index.js +32 -0
- package/dist/env/agent/index.js +24 -0
- package/dist/env/commands/index.js +14 -0
- package/dist/env/debug/formatters/index.js +11 -0
- package/dist/env/debug/index.js +26 -0
- package/dist/env/hook/index.js +29 -0
- package/dist/env/index.js +81 -0
- package/dist/env/llm/index.js +40 -0
- package/dist/env/log-trace/index.js +83 -0
- package/dist/env/mcp/index.js +39 -0
- package/dist/env/mcp/tool/index.js +14 -0
- package/dist/env/memory/built-in/index.js +11 -0
- package/dist/env/memory/index.js +56 -0
- package/dist/env/memory/plugin/index.js +36 -0
- package/dist/env/prompt/index.js +20 -0
- package/dist/env/session/index.js +25 -0
- package/dist/env/session/storage/index.js +18 -0
- package/dist/env/skill/index.js +34 -0
- package/dist/env/skill/tool/index.js +9 -0
- package/dist/env/task/delegate/index.js +18 -0
- package/dist/env/task/hooks/index.js +7 -0
- package/dist/env/task/index.js +30 -0
- package/dist/env/task/plugins/index.js +23 -0
- package/dist/env/task/storage/index.js +14 -0
- package/dist/env/task/tools/index.js +17 -0
- package/dist/env/task/tools/operation/index.js +15 -0
- package/dist/{shared/chunk-1d4rwms4.js → env/tool/built-in/index.js} +4 -4
- package/dist/env/tool/index.js +39 -0
- package/dist/env/workflow/decorators/index.js +27 -0
- package/dist/env/workflow/engine/index.js +28 -0
- package/dist/env/workflow/index.js +132 -0
- package/dist/env/workflow/nodes/index.js +19 -0
- package/dist/env/workflow/service/index.js +13 -0
- package/dist/env/workflow/storage/index.js +27 -0
- package/dist/env/workflow/tools/index.js +159 -0
- package/dist/env/workflow/types/index.js +94 -0
- package/dist/env/workflow/utils/index.js +637 -0
- package/dist/index.js +233 -16386
- package/dist/shared/{chunk-2b5kbhx3.js → @ai-setting/roy-agent-core-0rtxwr28.js} +6 -114
- package/dist/shared/@ai-setting/roy-agent-core-0vbdz0x7.js +36 -0
- package/dist/shared/@ai-setting/roy-agent-core-12zkpda2.js +393 -0
- package/dist/shared/@ai-setting/roy-agent-core-1ce3fqrk.js +117 -0
- package/dist/shared/@ai-setting/roy-agent-core-2dhd60aw.js +11 -0
- package/dist/shared/@ai-setting/roy-agent-core-2kg2wma8.js +620 -0
- package/dist/shared/@ai-setting/roy-agent-core-2x0m2p66.js +851 -0
- package/dist/shared/@ai-setting/roy-agent-core-35x0wrtt.js +172 -0
- package/dist/shared/{chunk-1pf5mfgd.js → @ai-setting/roy-agent-core-37e4tep3.js} +2 -2
- package/dist/shared/@ai-setting/roy-agent-core-3agad0d9.js +603 -0
- package/dist/shared/@ai-setting/roy-agent-core-4arba14a.js +419 -0
- package/dist/shared/@ai-setting/roy-agent-core-4rqmfr7t.js +266 -0
- package/dist/shared/@ai-setting/roy-agent-core-4t40mkpv.js +206 -0
- package/dist/shared/@ai-setting/roy-agent-core-561b1c4p.js +377 -0
- package/dist/shared/@ai-setting/roy-agent-core-5xf65pz6.js +1305 -0
- package/dist/shared/@ai-setting/roy-agent-core-6a72jfdy.js +303 -0
- package/dist/shared/{chunk-1aakcfp1.js → @ai-setting/roy-agent-core-7f303ffd.js} +3 -3
- package/dist/shared/@ai-setting/roy-agent-core-7fgf85wc.js +284 -0
- package/dist/shared/{chunk-t1rh6jtm.js → @ai-setting/roy-agent-core-7n436rb4.js} +7 -12
- package/dist/shared/@ai-setting/roy-agent-core-7r85t0qn.js +492 -0
- package/dist/shared/@ai-setting/roy-agent-core-7rewcey6.js +862 -0
- package/dist/shared/@ai-setting/roy-agent-core-92z6t4he.js +14 -0
- package/dist/shared/@ai-setting/roy-agent-core-9qwp5qkz.js +1387 -0
- package/dist/shared/{chunk-mf5xqbdh.js → @ai-setting/roy-agent-core-9yxb3ty9.js} +3 -2
- package/dist/shared/@ai-setting/roy-agent-core-anwsxdds.js +1205 -0
- package/dist/shared/{chunk-1qwabsm0.js → @ai-setting/roy-agent-core-bncgx3gb.js} +1 -1
- package/dist/shared/@ai-setting/roy-agent-core-cd00w5mb.js +762 -0
- package/dist/shared/@ai-setting/roy-agent-core-cgs0j60t.js +442 -0
- package/dist/shared/@ai-setting/roy-agent-core-ctdhjv68.js +93 -0
- package/dist/shared/@ai-setting/roy-agent-core-dbsk841j.js +286 -0
- package/dist/shared/@ai-setting/roy-agent-core-e25xkv53.js +64 -0
- package/dist/shared/{chunk-yqmx37vm.js → @ai-setting/roy-agent-core-e5jcp24a.js} +2 -2
- package/dist/shared/@ai-setting/roy-agent-core-e62e2a5a.js +204 -0
- package/dist/shared/{chunk-g6j5n3gv.js → @ai-setting/roy-agent-core-ewrj1c4k.js} +2 -2
- package/dist/shared/{chunk-rncy3rtd.js → @ai-setting/roy-agent-core-fdb6m4e4.js} +119 -1113
- package/dist/shared/{chunk-q9j99fsm.js → @ai-setting/roy-agent-core-fv32jaa8.js} +3 -3
- package/dist/shared/@ai-setting/roy-agent-core-g1s2h0e5.js +171 -0
- package/dist/shared/@ai-setting/roy-agent-core-gmnkza34.js +202 -0
- package/dist/shared/@ai-setting/roy-agent-core-hz7rr4yx.js +513 -0
- package/dist/shared/@ai-setting/roy-agent-core-j3bbr2n0.js +378 -0
- package/dist/shared/{chunk-a9qmy3sc.js → @ai-setting/roy-agent-core-j3wc4465.js} +6 -3
- package/dist/shared/@ai-setting/roy-agent-core-jj79gszx.js +1130 -0
- package/dist/shared/@ai-setting/roy-agent-core-mwwk6req.js +913 -0
- package/dist/shared/{chunk-0q6s9wm6.js → @ai-setting/roy-agent-core-pc9g3962.js} +6 -50
- package/dist/shared/@ai-setting/roy-agent-core-psvxt4c9.js +60 -0
- package/dist/shared/@ai-setting/roy-agent-core-pzsg9pvf.js +393 -0
- package/dist/shared/{chunk-91bas8w5.js → @ai-setting/roy-agent-core-q779wnwm.js} +5 -5
- package/dist/shared/{chunk-25x2pdtp.js → @ai-setting/roy-agent-core-qw0ebh1d.js} +1 -1
- package/dist/shared/@ai-setting/roy-agent-core-qxhq8ven.js +57 -0
- package/dist/shared/@ai-setting/roy-agent-core-qxnbvgwe.js +66 -0
- package/dist/shared/@ai-setting/roy-agent-core-qya7seh6.js +408 -0
- package/dist/shared/@ai-setting/roy-agent-core-rbetrphj.js +97 -0
- package/dist/shared/@ai-setting/roy-agent-core-re1wjfw7.js +587 -0
- package/dist/shared/@ai-setting/roy-agent-core-rft3fmp0.js +14 -0
- package/dist/shared/@ai-setting/roy-agent-core-rvv6ydff.js +584 -0
- package/dist/shared/{chunk-ze20rksg.js → @ai-setting/roy-agent-core-rvxg1wps.js} +1 -1
- package/dist/shared/@ai-setting/roy-agent-core-rzp9kxne.js +341 -0
- package/dist/shared/@ai-setting/roy-agent-core-t94ktchq.js +213 -0
- package/dist/shared/@ai-setting/roy-agent-core-w78syn7w.js +788 -0
- package/dist/shared/{chunk-9qzt1v1p.js → @ai-setting/roy-agent-core-z2t8hse8.js} +3 -2
- package/package.json +8 -7
- package/dist/index.d.ts +0 -7825
- package/dist/shared/chunk-hs7tbmje.js +0 -24
- /package/dist/shared/{chunk-wbkh7wat.js → @ai-setting/roy-agent-core-fs0mn2jk.js} +0 -0
|
@@ -0,0 +1,419 @@
|
|
|
1
|
+
import {
|
|
2
|
+
envKeyToConfigKey
|
|
3
|
+
} from "./roy-agent-core-qxhq8ven.js";
|
|
4
|
+
import {
|
|
5
|
+
BaseComponent
|
|
6
|
+
} from "./roy-agent-core-rbetrphj.js";
|
|
7
|
+
import {
|
|
8
|
+
init_decorator
|
|
9
|
+
} from "./roy-agent-core-35x0wrtt.js";
|
|
10
|
+
import {
|
|
11
|
+
createLogger,
|
|
12
|
+
init_logger,
|
|
13
|
+
setConfigComponent,
|
|
14
|
+
setQuietMode
|
|
15
|
+
} from "./roy-agent-core-j3wc4465.js";
|
|
16
|
+
import {
|
|
17
|
+
getTracerProvider,
|
|
18
|
+
init_propagation,
|
|
19
|
+
init_tracer_provider,
|
|
20
|
+
init_types,
|
|
21
|
+
propagation
|
|
22
|
+
} from "./roy-agent-core-fv32jaa8.js";
|
|
23
|
+
import {
|
|
24
|
+
SQLiteSpanStorage,
|
|
25
|
+
init_span_storage
|
|
26
|
+
} from "./roy-agent-core-bncgx3gb.js";
|
|
27
|
+
import {
|
|
28
|
+
__require
|
|
29
|
+
} from "./roy-agent-core-fs0mn2jk.js";
|
|
30
|
+
|
|
31
|
+
// src/env/log-trace/index.ts
|
|
32
|
+
init_types();
|
|
33
|
+
init_span_storage();
|
|
34
|
+
|
|
35
|
+
// src/env/log-trace/log-trace-component.ts
|
|
36
|
+
init_logger();
|
|
37
|
+
init_tracer_provider();
|
|
38
|
+
init_span_storage();
|
|
39
|
+
import { z } from "zod";
|
|
40
|
+
import { join } from "path";
|
|
41
|
+
|
|
42
|
+
// src/env/log-trace/trace-context.ts
|
|
43
|
+
import { AsyncLocalStorage } from "async_hooks";
|
|
44
|
+
var contextStore = new AsyncLocalStorage;
|
|
45
|
+
function createLightweightContext() {
|
|
46
|
+
return new LightweightTraceContext;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
class LightweightTraceContext {
|
|
50
|
+
getRequestId() {
|
|
51
|
+
return contextStore.getStore()?.requestId;
|
|
52
|
+
}
|
|
53
|
+
getSpanContext() {
|
|
54
|
+
return contextStore.getStore()?.spanContext;
|
|
55
|
+
}
|
|
56
|
+
setSpanContext(spanContext) {
|
|
57
|
+
const store = contextStore.getStore();
|
|
58
|
+
if (store) {
|
|
59
|
+
store.spanContext = spanContext;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
runWithContext(fn) {
|
|
63
|
+
const store = contextStore.getStore();
|
|
64
|
+
if (store) {
|
|
65
|
+
return contextStore.run(store, fn);
|
|
66
|
+
}
|
|
67
|
+
return fn();
|
|
68
|
+
}
|
|
69
|
+
runWithNewContext(requestId, sessionId, fn) {
|
|
70
|
+
const context = {
|
|
71
|
+
requestId,
|
|
72
|
+
sessionId,
|
|
73
|
+
timestamp: Date.now(),
|
|
74
|
+
spanContext: {
|
|
75
|
+
traceId: requestId,
|
|
76
|
+
spanId: this.generateSpanId()
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
return contextStore.run(context, fn);
|
|
80
|
+
}
|
|
81
|
+
async runWithContextAsync(fn) {
|
|
82
|
+
const store = contextStore.getStore();
|
|
83
|
+
if (store) {
|
|
84
|
+
return contextStore.run(store, fn);
|
|
85
|
+
}
|
|
86
|
+
return fn();
|
|
87
|
+
}
|
|
88
|
+
async runWithNewContextAsync(requestId, sessionId, fn) {
|
|
89
|
+
const context = {
|
|
90
|
+
requestId,
|
|
91
|
+
sessionId,
|
|
92
|
+
timestamp: Date.now(),
|
|
93
|
+
spanContext: {
|
|
94
|
+
traceId: requestId,
|
|
95
|
+
spanId: this.generateSpanId()
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
return contextStore.run(context, fn);
|
|
99
|
+
}
|
|
100
|
+
generateRequestId() {
|
|
101
|
+
return `req_${Date.now()}_${Math.random().toString(36).slice(2, 11)}`;
|
|
102
|
+
}
|
|
103
|
+
generateSpanId() {
|
|
104
|
+
return `span_${Date.now()}_${Math.random().toString(36).slice(2, 11)}`;
|
|
105
|
+
}
|
|
106
|
+
initContext(requestId, sessionId) {
|
|
107
|
+
const context = {
|
|
108
|
+
requestId,
|
|
109
|
+
sessionId,
|
|
110
|
+
timestamp: Date.now(),
|
|
111
|
+
spanContext: {
|
|
112
|
+
traceId: requestId,
|
|
113
|
+
spanId: this.generateSpanId()
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
contextStore.enterWith(context);
|
|
117
|
+
}
|
|
118
|
+
startNewContext(requestId, sessionId) {
|
|
119
|
+
const context = {
|
|
120
|
+
requestId,
|
|
121
|
+
sessionId,
|
|
122
|
+
timestamp: Date.now(),
|
|
123
|
+
spanContext: {
|
|
124
|
+
traceId: requestId,
|
|
125
|
+
spanId: this.generateSpanId()
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
const previousStore = contextStore.getStore();
|
|
129
|
+
contextStore.enterWith(context);
|
|
130
|
+
return () => {
|
|
131
|
+
contextStore.enterWith(previousStore);
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
var traceContextImpl = null;
|
|
136
|
+
function initTraceContext(options) {
|
|
137
|
+
traceContextImpl = createLightweightContext();
|
|
138
|
+
return traceContextImpl;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
// src/env/log-trace/log-trace-config-registration.ts
|
|
142
|
+
var LOG_TRACE_DEFAULTS = {
|
|
143
|
+
"log-trace.logging.enabled": true,
|
|
144
|
+
"log-trace.logging.level": "info",
|
|
145
|
+
"log-trace.logging.quiet": false,
|
|
146
|
+
"log-trace.tracing.enabled": true
|
|
147
|
+
};
|
|
148
|
+
var LOG_TRACE_CONFIG_REGISTRATION = {
|
|
149
|
+
name: "log-trace",
|
|
150
|
+
sources: [
|
|
151
|
+
{ type: "env", envPrefix: "LOG_TRACE", priority: 20, watch: false }
|
|
152
|
+
],
|
|
153
|
+
keys: [
|
|
154
|
+
{ key: "log-trace.logging.enabled", sources: ["env", "file"] },
|
|
155
|
+
{ key: "log-trace.logging.level", sources: ["env", "file"] },
|
|
156
|
+
{ key: "log-trace.logging.quiet", sources: ["env", "file"] },
|
|
157
|
+
{ key: "log-trace.logging.dir", sources: ["env", "file"] },
|
|
158
|
+
{ key: "log-trace.logging.file", sources: ["env", "file"] },
|
|
159
|
+
{ key: "log-trace.logging.maxOutput", sources: ["env", "file"] },
|
|
160
|
+
{ key: "log-trace.tracing.enabled", sources: ["env", "file"] },
|
|
161
|
+
{ key: "log-trace.tracing.dbPath", sources: ["env", "file"] }
|
|
162
|
+
]
|
|
163
|
+
};
|
|
164
|
+
|
|
165
|
+
// src/env/log-trace/log-trace-component.ts
|
|
166
|
+
function getDefaultDataDir() {
|
|
167
|
+
try {
|
|
168
|
+
const xdg = __require("xdg-basedir");
|
|
169
|
+
if (xdg.xdgData) {
|
|
170
|
+
return xdg.xdgData;
|
|
171
|
+
}
|
|
172
|
+
} catch {}
|
|
173
|
+
const home = process.env.HOME || process.env.USERPROFILE || "/tmp";
|
|
174
|
+
return join(home, ".local", "share");
|
|
175
|
+
}
|
|
176
|
+
function getDefaultLogDir() {
|
|
177
|
+
return join(getDefaultDataDir(), "roy-agent", "logs");
|
|
178
|
+
}
|
|
179
|
+
function getDefaultSpanDbPath() {
|
|
180
|
+
return join(getDefaultDataDir(), "roy-agent", "traces.db");
|
|
181
|
+
}
|
|
182
|
+
var LogTraceConfigSchema = z.object({
|
|
183
|
+
logging: z.object({
|
|
184
|
+
enabled: z.boolean().default(true),
|
|
185
|
+
level: z.enum(["debug", "info", "warn", "error"]).default("info"),
|
|
186
|
+
quiet: z.boolean().default(false),
|
|
187
|
+
file: z.string().default("app.log"),
|
|
188
|
+
dir: z.string().default(getDefaultLogDir()),
|
|
189
|
+
maxOutput: z.number().default(0)
|
|
190
|
+
}).default({}),
|
|
191
|
+
tracing: z.object({
|
|
192
|
+
enabled: z.boolean().default(true),
|
|
193
|
+
dbPath: z.string().optional()
|
|
194
|
+
}).default({}),
|
|
195
|
+
initContext: z.object({
|
|
196
|
+
requestId: z.string().optional(),
|
|
197
|
+
sessionId: z.string().optional()
|
|
198
|
+
}).optional()
|
|
199
|
+
});
|
|
200
|
+
|
|
201
|
+
class LogTraceComponent extends BaseComponent {
|
|
202
|
+
name = "log-trace";
|
|
203
|
+
version = "1.0.0";
|
|
204
|
+
config;
|
|
205
|
+
configComponent;
|
|
206
|
+
tracer;
|
|
207
|
+
traceContext;
|
|
208
|
+
configWatcher;
|
|
209
|
+
constructor() {
|
|
210
|
+
super();
|
|
211
|
+
}
|
|
212
|
+
async init(config) {
|
|
213
|
+
await super.init(config);
|
|
214
|
+
const options = config.options;
|
|
215
|
+
if (!options?.configComponent) {
|
|
216
|
+
throw new Error("ConfigComponent is required for LogTraceComponent initialization");
|
|
217
|
+
}
|
|
218
|
+
this.configComponent = options.configComponent;
|
|
219
|
+
await this.registerConfig(options);
|
|
220
|
+
this.traceContext = initTraceContext();
|
|
221
|
+
const provider = getTracerProvider();
|
|
222
|
+
const _unused = provider;
|
|
223
|
+
await provider.initialize();
|
|
224
|
+
this.tracer = provider.getTracer("roy-tracer");
|
|
225
|
+
this.configureLogging();
|
|
226
|
+
if (this.config?.initContext?.requestId) {
|
|
227
|
+
this.traceContext.initContext(this.config.initContext.requestId, this.config.initContext.sessionId);
|
|
228
|
+
}
|
|
229
|
+
this.setStatus("running");
|
|
230
|
+
}
|
|
231
|
+
async registerConfig(options) {
|
|
232
|
+
const configComponent = options.configComponent;
|
|
233
|
+
if (!configComponent)
|
|
234
|
+
return;
|
|
235
|
+
const { configPath, envPrefix, config } = options;
|
|
236
|
+
const prefix = envPrefix !== undefined ? envPrefix : "LOG_TRACE";
|
|
237
|
+
configComponent.registerComponent(LOG_TRACE_CONFIG_REGISTRATION);
|
|
238
|
+
if (configPath) {
|
|
239
|
+
configComponent.registerSource({
|
|
240
|
+
type: "file",
|
|
241
|
+
relativePath: configPath,
|
|
242
|
+
optional: true,
|
|
243
|
+
watch: false
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
configComponent.registerSource({
|
|
247
|
+
type: "env",
|
|
248
|
+
envPrefix: prefix,
|
|
249
|
+
priority: 20,
|
|
250
|
+
watch: false
|
|
251
|
+
});
|
|
252
|
+
await configComponent.load("log-trace");
|
|
253
|
+
for (const envKey of Object.keys(process.env)) {
|
|
254
|
+
const configKey = envKeyToConfigKey(envKey, prefix, "log-trace");
|
|
255
|
+
if (!configKey)
|
|
256
|
+
continue;
|
|
257
|
+
const value = process.env[envKey];
|
|
258
|
+
if (value !== undefined) {
|
|
259
|
+
await configComponent.set(configKey, value);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
for (const [key, value] of Object.entries(LOG_TRACE_DEFAULTS)) {
|
|
263
|
+
if (configComponent.get(key) === undefined) {
|
|
264
|
+
await configComponent.set(key, value);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
if (configComponent.get("log-trace.logging.dir") === undefined) {
|
|
268
|
+
await configComponent.set("log-trace.logging.dir", getDefaultLogDir());
|
|
269
|
+
}
|
|
270
|
+
if (configComponent.get("log-trace.logging.file") === undefined) {
|
|
271
|
+
await configComponent.set("log-trace.logging.file", "app.log");
|
|
272
|
+
}
|
|
273
|
+
if (configComponent.get("log-trace.logging.maxOutput") === undefined) {
|
|
274
|
+
await configComponent.set("log-trace.logging.maxOutput", 0);
|
|
275
|
+
}
|
|
276
|
+
if (configComponent.get("log-trace.tracing.dbPath") === undefined) {
|
|
277
|
+
await configComponent.set("log-trace.tracing.dbPath", getDefaultSpanDbPath());
|
|
278
|
+
}
|
|
279
|
+
if (config) {
|
|
280
|
+
const flatConfig = this.flattenConfig(config);
|
|
281
|
+
for (const [key, value] of Object.entries(flatConfig)) {
|
|
282
|
+
await configComponent.set(key, value);
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
this.registerConfigWatcher(configComponent);
|
|
286
|
+
setConfigComponent(configComponent);
|
|
287
|
+
const tracingDbPath = configComponent.get("log-trace.tracing.dbPath");
|
|
288
|
+
this.config = {
|
|
289
|
+
logging: {
|
|
290
|
+
enabled: configComponent.get("log-trace.logging.enabled") ?? true,
|
|
291
|
+
level: configComponent.get("log-trace.logging.level") ?? "info",
|
|
292
|
+
quiet: configComponent.get("log-trace.logging.quiet") ?? false,
|
|
293
|
+
file: configComponent.get("log-trace.logging.file") ?? "app.log",
|
|
294
|
+
dir: configComponent.get("log-trace.logging.dir") ?? getDefaultLogDir(),
|
|
295
|
+
maxOutput: configComponent.get("log-trace.logging.maxOutput") ?? 0
|
|
296
|
+
},
|
|
297
|
+
tracing: {
|
|
298
|
+
enabled: configComponent.get("log-trace.tracing.enabled") ?? true,
|
|
299
|
+
dbPath: tracingDbPath ?? getDefaultSpanDbPath()
|
|
300
|
+
}
|
|
301
|
+
};
|
|
302
|
+
}
|
|
303
|
+
flattenConfig(obj, prefix = "log-trace") {
|
|
304
|
+
const result = {};
|
|
305
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
306
|
+
const fullKey = `${prefix}.${key}`;
|
|
307
|
+
if (value && typeof value === "object" && !Array.isArray(value)) {
|
|
308
|
+
Object.assign(result, this.flattenConfig(value, fullKey));
|
|
309
|
+
} else {
|
|
310
|
+
result[fullKey] = value;
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
return result;
|
|
314
|
+
}
|
|
315
|
+
registerConfigWatcher(configComponent) {
|
|
316
|
+
if (typeof configComponent.watch !== "function") {
|
|
317
|
+
return;
|
|
318
|
+
}
|
|
319
|
+
this.configWatcher = configComponent.watch("log-trace.*", (event) => {
|
|
320
|
+
this.onConfigChange(event);
|
|
321
|
+
});
|
|
322
|
+
}
|
|
323
|
+
onConfigChange(event) {
|
|
324
|
+
if (event.key === "log-trace.logging.quiet") {
|
|
325
|
+
setQuietMode(event.newValue);
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
createStorage() {
|
|
329
|
+
if (this.configComponent) {
|
|
330
|
+
const dbPath = this.configComponent.get("log-trace.tracing.dbPath");
|
|
331
|
+
if (dbPath) {
|
|
332
|
+
return new SQLiteSpanStorage(dbPath);
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
if (this.config?.tracing?.dbPath) {
|
|
336
|
+
return new SQLiteSpanStorage(this.config.tracing.dbPath);
|
|
337
|
+
}
|
|
338
|
+
return new SQLiteSpanStorage(getDefaultSpanDbPath());
|
|
339
|
+
}
|
|
340
|
+
configureLogging() {
|
|
341
|
+
if (!this.config?.logging)
|
|
342
|
+
return;
|
|
343
|
+
if (this.config.logging.quiet) {
|
|
344
|
+
setQuietMode(true);
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
initContext(requestId, sessionId) {
|
|
348
|
+
if (!this.traceContext) {
|
|
349
|
+
throw new Error("Component not initialized");
|
|
350
|
+
}
|
|
351
|
+
this.traceContext.initContext(requestId, sessionId);
|
|
352
|
+
}
|
|
353
|
+
startContext(requestId, sessionId) {
|
|
354
|
+
if (!this.traceContext) {
|
|
355
|
+
throw new Error("Component not initialized");
|
|
356
|
+
}
|
|
357
|
+
return this.traceContext.startNewContext(requestId, sessionId);
|
|
358
|
+
}
|
|
359
|
+
getLogger(prefix) {
|
|
360
|
+
return createLogger(prefix || "app");
|
|
361
|
+
}
|
|
362
|
+
getTracer() {
|
|
363
|
+
if (!this.tracer) {
|
|
364
|
+
throw new Error("Component not initialized");
|
|
365
|
+
}
|
|
366
|
+
return this.tracer;
|
|
367
|
+
}
|
|
368
|
+
getTraceContext() {
|
|
369
|
+
return this.traceContext;
|
|
370
|
+
}
|
|
371
|
+
getRequestId() {
|
|
372
|
+
return this.traceContext?.getRequestId();
|
|
373
|
+
}
|
|
374
|
+
async onStop() {
|
|
375
|
+
this.configWatcher?.();
|
|
376
|
+
this.configWatcher = undefined;
|
|
377
|
+
this.tracer = undefined;
|
|
378
|
+
this.setStatus("stopped");
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
// src/env/log-trace/index.ts
|
|
383
|
+
init_tracer_provider();
|
|
384
|
+
init_propagation();
|
|
385
|
+
|
|
386
|
+
// src/env/log-trace/opentelemetry/propagation-env.ts
|
|
387
|
+
init_propagation();
|
|
388
|
+
init_tracer_provider();
|
|
389
|
+
function injectToEnv(env = {}) {
|
|
390
|
+
const provider = getTracerProvider();
|
|
391
|
+
const tracer = provider.getTracer("roy-tracer");
|
|
392
|
+
tracer.injectToEnv(env);
|
|
393
|
+
return env;
|
|
394
|
+
}
|
|
395
|
+
function injectToEnvWithContext(env, context) {
|
|
396
|
+
propagation.inject(env, context);
|
|
397
|
+
return env;
|
|
398
|
+
}
|
|
399
|
+
function injectToEnvFromCarrier(target, source) {
|
|
400
|
+
const extracted = propagation.extract(source);
|
|
401
|
+
if (extracted) {
|
|
402
|
+
const context = {
|
|
403
|
+
traceId: extracted.traceId,
|
|
404
|
+
spanId: extracted.spanId,
|
|
405
|
+
parentSpanId: undefined
|
|
406
|
+
};
|
|
407
|
+
propagation.inject(target, context);
|
|
408
|
+
}
|
|
409
|
+
return target;
|
|
410
|
+
}
|
|
411
|
+
function getTraceparentHeader() {
|
|
412
|
+
return propagation.getTraceparentHeader();
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
// src/env/log-trace/index.ts
|
|
416
|
+
init_logger();
|
|
417
|
+
init_decorator();
|
|
418
|
+
|
|
419
|
+
export { getDefaultLogDir, getDefaultSpanDbPath, LogTraceConfigSchema, LogTraceComponent, injectToEnv, injectToEnvWithContext, injectToEnvFromCarrier, getTraceparentHeader };
|
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
import {
|
|
2
|
+
exports_node_registry_helper,
|
|
3
|
+
init_node_registry_helper
|
|
4
|
+
} from "./roy-agent-core-0rtxwr28.js";
|
|
5
|
+
import {
|
|
6
|
+
WorkflowService
|
|
7
|
+
} from "./roy-agent-core-4t40mkpv.js";
|
|
8
|
+
import {
|
|
9
|
+
askUserTool
|
|
10
|
+
} from "./roy-agent-core-0vbdz0x7.js";
|
|
11
|
+
import {
|
|
12
|
+
WorkflowEngine,
|
|
13
|
+
exports_engine,
|
|
14
|
+
init_engine
|
|
15
|
+
} from "./roy-agent-core-fdb6m4e4.js";
|
|
16
|
+
import {
|
|
17
|
+
BaseComponent
|
|
18
|
+
} from "./roy-agent-core-rbetrphj.js";
|
|
19
|
+
import {
|
|
20
|
+
createLogger,
|
|
21
|
+
init_logger
|
|
22
|
+
} from "./roy-agent-core-j3wc4465.js";
|
|
23
|
+
import {
|
|
24
|
+
__require,
|
|
25
|
+
__toCommonJS
|
|
26
|
+
} from "./roy-agent-core-fs0mn2jk.js";
|
|
27
|
+
|
|
28
|
+
// src/env/workflow/workflow-component.ts
|
|
29
|
+
import"reflect-metadata";
|
|
30
|
+
init_engine();
|
|
31
|
+
init_logger();
|
|
32
|
+
init_engine();
|
|
33
|
+
init_node_registry_helper();
|
|
34
|
+
var componentLogger = createLogger("workflow");
|
|
35
|
+
|
|
36
|
+
class SkillRegistryAdapter {
|
|
37
|
+
skillComponent;
|
|
38
|
+
constructor(skillComponent) {
|
|
39
|
+
this.skillComponent = skillComponent;
|
|
40
|
+
}
|
|
41
|
+
getSkill(name) {
|
|
42
|
+
const entry = this.skillComponent.getSkill(name);
|
|
43
|
+
if (!entry)
|
|
44
|
+
return;
|
|
45
|
+
return {
|
|
46
|
+
name: entry.name,
|
|
47
|
+
invoke: async (input, context) => {
|
|
48
|
+
return entry.content;
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
hasSkill(name) {
|
|
53
|
+
return this.skillComponent.hasSkill(name);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
class WorkflowComponent extends BaseComponent {
|
|
58
|
+
name = "workflow";
|
|
59
|
+
version = "1.0.0";
|
|
60
|
+
workflowService = null;
|
|
61
|
+
sessionComponent = null;
|
|
62
|
+
nodeRegistry = null;
|
|
63
|
+
decoratorsRegistered = false;
|
|
64
|
+
getService() {
|
|
65
|
+
return this.workflowService;
|
|
66
|
+
}
|
|
67
|
+
toolComponent;
|
|
68
|
+
llmComponent;
|
|
69
|
+
logTraceComponent;
|
|
70
|
+
_workflowEnv;
|
|
71
|
+
skillRegistry;
|
|
72
|
+
agentRunner;
|
|
73
|
+
async init(options) {
|
|
74
|
+
const opts = options;
|
|
75
|
+
this._status = "initializing";
|
|
76
|
+
componentLogger.info("Initializing WorkflowComponent...");
|
|
77
|
+
this.toolComponent = opts.toolComponent;
|
|
78
|
+
this.llmComponent = opts.llmComponent;
|
|
79
|
+
this.logTraceComponent = opts.logTraceComponent;
|
|
80
|
+
this._workflowEnv = opts.env;
|
|
81
|
+
this.skillRegistry = opts.skillRegistry;
|
|
82
|
+
this.agentRunner = opts.agentRunner;
|
|
83
|
+
try {
|
|
84
|
+
if (opts.autoRegisterDecorators !== false) {
|
|
85
|
+
await this.registerDecorators();
|
|
86
|
+
}
|
|
87
|
+
this._status = "ready";
|
|
88
|
+
componentLogger.info("WorkflowComponent initialized successfully");
|
|
89
|
+
} catch (error) {
|
|
90
|
+
this._status = "error";
|
|
91
|
+
componentLogger.error("Failed to initialize WorkflowComponent:", error);
|
|
92
|
+
throw error;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
async registerDecorators() {
|
|
96
|
+
if (this.decoratorsRegistered)
|
|
97
|
+
return;
|
|
98
|
+
try {
|
|
99
|
+
const { NodeRegistry } = await import("../../env/workflow/engine/index.js");
|
|
100
|
+
const { registerDecoratorNodeType: registerDecoratorNodeType2 } = await import("./roy-agent-core-9yxb3ty9.js");
|
|
101
|
+
this.nodeRegistry = new NodeRegistry;
|
|
102
|
+
registerDecoratorNodeType2(this.nodeRegistry);
|
|
103
|
+
this.decoratorsRegistered = true;
|
|
104
|
+
componentLogger.info("Decorator node type registered");
|
|
105
|
+
} catch (error) {
|
|
106
|
+
componentLogger.error("Failed to register decorator node type:", error);
|
|
107
|
+
throw error;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
createService(options) {
|
|
111
|
+
const skillRegistryAdapter = options.skillRegistry ? new SkillRegistryAdapter(options.skillRegistry) : undefined;
|
|
112
|
+
const sessionComponentForEngine = options.sessionComponent;
|
|
113
|
+
const engineFactory = (workflow, opts) => {
|
|
114
|
+
const { NodeRegistry, WorkflowEngine: WorkflowEngine2 } = (init_engine(), __toCommonJS(exports_engine));
|
|
115
|
+
const registry = new NodeRegistry({
|
|
116
|
+
toolRegistry: options.toolComponent,
|
|
117
|
+
agentComponent: options.env?.getComponent("agent"),
|
|
118
|
+
skillRegistry: skillRegistryAdapter,
|
|
119
|
+
sessionComponent: sessionComponentForEngine
|
|
120
|
+
});
|
|
121
|
+
const { registerDecoratorNodeType: registerDecoratorNodeType2 } = (init_node_registry_helper(), __toCommonJS(exports_node_registry_helper));
|
|
122
|
+
registerDecoratorNodeType2(registry);
|
|
123
|
+
return new WorkflowEngine2(registry, sessionComponentForEngine, options.workflowRepository);
|
|
124
|
+
};
|
|
125
|
+
this.workflowService = new WorkflowService(options.workflowRepository, engineFactory, options.sessionComponent);
|
|
126
|
+
return this.workflowService;
|
|
127
|
+
}
|
|
128
|
+
async runWorkflow(definition, input, options) {
|
|
129
|
+
const { NodeRegistry } = await import("../../env/workflow/engine/index.js");
|
|
130
|
+
const { registerDecoratorNodeType: registerDecoratorNodeType2 } = await import("./roy-agent-core-9yxb3ty9.js");
|
|
131
|
+
const toolComponent = this.toolComponent || this._workflowEnv?.getComponent("tool");
|
|
132
|
+
const skillComponent = this._workflowEnv?.getComponent("skill");
|
|
133
|
+
let agentRunner = this.agentRunner;
|
|
134
|
+
if (!agentRunner && this._workflowEnv) {
|
|
135
|
+
const agentComponent = this._workflowEnv.getComponent("agent");
|
|
136
|
+
if (agentComponent) {
|
|
137
|
+
const { AgentComponentAdapter } = await import("./roy-agent-core-z2t8hse8.js");
|
|
138
|
+
agentRunner = new AgentComponentAdapter(agentComponent);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
const registry = new NodeRegistry({
|
|
142
|
+
toolRegistry: toolComponent,
|
|
143
|
+
skillRegistry: skillComponent,
|
|
144
|
+
agentRunner
|
|
145
|
+
});
|
|
146
|
+
registerDecoratorNodeType2(registry);
|
|
147
|
+
const engine = new WorkflowEngine(registry);
|
|
148
|
+
return engine.runWorkflow(definition, { ...options, input });
|
|
149
|
+
}
|
|
150
|
+
async onStop() {
|
|
151
|
+
componentLogger.info("[WorkflowComponent] Stopping and cleaning up resources...");
|
|
152
|
+
if (this.nodeRegistry) {
|
|
153
|
+
this.nodeRegistry = null;
|
|
154
|
+
}
|
|
155
|
+
if (this.workflowService) {
|
|
156
|
+
this.workflowService = null;
|
|
157
|
+
try {
|
|
158
|
+
const { closeDatabase } = await import("./roy-agent-core-q779wnwm.js");
|
|
159
|
+
closeDatabase();
|
|
160
|
+
componentLogger.info("[WorkflowComponent] SQLite database closed");
|
|
161
|
+
} catch (error) {
|
|
162
|
+
componentLogger.warn("[WorkflowComponent] Failed to close SQLite database:", error);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
this._status = "stopped";
|
|
166
|
+
componentLogger.info("[WorkflowComponent] Cleanup completed");
|
|
167
|
+
}
|
|
168
|
+
async start() {
|
|
169
|
+
await super.start();
|
|
170
|
+
await this.initSqliteService();
|
|
171
|
+
await this.registerAskUserTool();
|
|
172
|
+
}
|
|
173
|
+
async registerAskUserTool() {
|
|
174
|
+
try {
|
|
175
|
+
const toolComponent = this.toolComponent || this._workflowEnv?.getComponent("tool");
|
|
176
|
+
if (!toolComponent) {
|
|
177
|
+
componentLogger.warn("ToolComponent not available, cannot register ask_user tool");
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
if (typeof toolComponent.register === "function") {
|
|
181
|
+
toolComponent.register(askUserTool);
|
|
182
|
+
componentLogger.info("ask_user tool registered to ToolComponent");
|
|
183
|
+
} else if (typeof toolComponent.registerMany === "function") {
|
|
184
|
+
toolComponent.registerMany([askUserTool]);
|
|
185
|
+
componentLogger.info("ask_user tool registered to ToolComponent");
|
|
186
|
+
} else {
|
|
187
|
+
componentLogger.warn("ToolComponent does not support tool registration");
|
|
188
|
+
}
|
|
189
|
+
} catch (error) {
|
|
190
|
+
componentLogger.warn("Failed to register ask_user tool:", error);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
async initSqliteService() {
|
|
194
|
+
try {
|
|
195
|
+
const { getDatabase, initializeTables } = await import("./roy-agent-core-q779wnwm.js");
|
|
196
|
+
const { WorkflowRepository } = await import("./roy-agent-core-rft3fmp0.js");
|
|
197
|
+
const db = getDatabase();
|
|
198
|
+
initializeTables();
|
|
199
|
+
const workflowRepository = new WorkflowRepository(db);
|
|
200
|
+
const toolComponent = this.toolComponent || this._workflowEnv?.getComponent("tool");
|
|
201
|
+
const llmComponent = this.llmComponent || this._workflowEnv?.getComponent("llm");
|
|
202
|
+
const agentComponent = this._workflowEnv?.getComponent("agent");
|
|
203
|
+
const skillComponent = this.skillRegistry || this._workflowEnv?.getComponent("skill");
|
|
204
|
+
const sessionComponent = this._workflowEnv?.getComponent("session");
|
|
205
|
+
componentLogger.info(`initSqliteService - toolComponent: ${!!toolComponent}, llmComponent: ${!!llmComponent}, skillRegistry: ${!!skillComponent}, sessionComponent: ${!!sessionComponent}`);
|
|
206
|
+
this.createService({
|
|
207
|
+
workflowRepository,
|
|
208
|
+
toolComponent,
|
|
209
|
+
llmComponent,
|
|
210
|
+
env: this._workflowEnv,
|
|
211
|
+
skillRegistry: skillComponent,
|
|
212
|
+
sessionComponent
|
|
213
|
+
});
|
|
214
|
+
this.sessionComponent = sessionComponent;
|
|
215
|
+
await this.registerAskUserTool();
|
|
216
|
+
componentLogger.info("SQLite WorkflowService initialized successfully");
|
|
217
|
+
} catch (error) {
|
|
218
|
+
componentLogger.error("Failed to initialize SQLite WorkflowService:", error);
|
|
219
|
+
await this.createInMemoryService();
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
createInMemoryService() {
|
|
223
|
+
const workflows = new Map;
|
|
224
|
+
const workflowRepository = {
|
|
225
|
+
create: (wf) => {
|
|
226
|
+
const id = wf.id || `wf_${Date.now()}`;
|
|
227
|
+
const record = { ...wf, id, createdAt: new Date, updatedAt: new Date };
|
|
228
|
+
workflows.set(id, record);
|
|
229
|
+
return record;
|
|
230
|
+
},
|
|
231
|
+
getById: (id) => workflows.get(id) || null,
|
|
232
|
+
getByName: (name) => {
|
|
233
|
+
for (const wf of workflows.values()) {
|
|
234
|
+
if (wf.name === name)
|
|
235
|
+
return wf;
|
|
236
|
+
}
|
|
237
|
+
return null;
|
|
238
|
+
},
|
|
239
|
+
list: () => Array.from(workflows.values()),
|
|
240
|
+
update: (id, updates) => {
|
|
241
|
+
const wf = workflows.get(id);
|
|
242
|
+
if (!wf)
|
|
243
|
+
return null;
|
|
244
|
+
const updated = { ...wf, ...updates, updatedAt: new Date };
|
|
245
|
+
workflows.set(id, updated);
|
|
246
|
+
return updated;
|
|
247
|
+
},
|
|
248
|
+
delete: (id) => workflows.delete(id)
|
|
249
|
+
};
|
|
250
|
+
const sessionComponent = this._workflowEnv?.getComponent("session");
|
|
251
|
+
return this.createService({
|
|
252
|
+
workflowRepository,
|
|
253
|
+
sessionComponent
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
async stop() {
|
|
257
|
+
componentLogger.info("Stopping WorkflowComponent...");
|
|
258
|
+
this._status = "stopping";
|
|
259
|
+
this.workflowService = null;
|
|
260
|
+
this.nodeRegistry = null;
|
|
261
|
+
this._status = "stopped";
|
|
262
|
+
componentLogger.info("WorkflowComponent stopped");
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
export { WorkflowComponent };
|