@eggjs/agent-runtime 0.0.0 → 3.73.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,447 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.AGENT_DEFAULT_FACTORIES = void 0;
7
+ const node_crypto_1 = __importDefault(require("node:crypto"));
8
+ const tegg_runtime_1 = require("@eggjs/tegg-runtime");
9
+ function nowUnix() {
10
+ return Math.floor(Date.now() / 1000);
11
+ }
12
+ function newMsgId() {
13
+ return `msg_${node_crypto_1.default.randomUUID()}`;
14
+ }
15
+ /**
16
+ * Convert an AgentStreamMessage's message field into OpenAI MessageContentBlock[].
17
+ */
18
+ function toContentBlocks(msg) {
19
+ if (!msg)
20
+ return [];
21
+ const content = msg.content;
22
+ if (typeof content === 'string') {
23
+ return [{ type: 'text', text: { value: content, annotations: [] } }];
24
+ }
25
+ if (Array.isArray(content)) {
26
+ return content
27
+ .filter(part => part.type === 'text')
28
+ .map(part => ({ type: 'text', text: { value: part.text, annotations: [] } }));
29
+ }
30
+ return [];
31
+ }
32
+ /**
33
+ * Build a completed MessageObject from an AgentStreamMessage.
34
+ */
35
+ function toMessageObject(msg, runId) {
36
+ return {
37
+ id: newMsgId(),
38
+ object: 'thread.message',
39
+ created_at: nowUnix(),
40
+ run_id: runId,
41
+ role: 'assistant',
42
+ status: 'completed',
43
+ content: toContentBlocks(msg),
44
+ };
45
+ }
46
+ /**
47
+ * Extract MessageObjects and accumulated usage from AgentStreamMessage objects.
48
+ */
49
+ function extractFromStreamMessages(messages, runId) {
50
+ var _a, _b, _c;
51
+ const output = [];
52
+ let promptTokens = 0;
53
+ let completionTokens = 0;
54
+ let totalTokens = 0;
55
+ let hasUsage = false;
56
+ for (const msg of messages) {
57
+ if (msg.message) {
58
+ output.push(toMessageObject(msg.message, runId));
59
+ }
60
+ if (msg.usage) {
61
+ hasUsage = true;
62
+ promptTokens += (_a = msg.usage.prompt_tokens) !== null && _a !== void 0 ? _a : 0;
63
+ completionTokens += (_b = msg.usage.completion_tokens) !== null && _b !== void 0 ? _b : 0;
64
+ totalTokens += (_c = msg.usage.total_tokens) !== null && _c !== void 0 ? _c : 0;
65
+ }
66
+ }
67
+ let usage;
68
+ if (hasUsage) {
69
+ usage = {
70
+ prompt_tokens: promptTokens,
71
+ completion_tokens: completionTokens,
72
+ total_tokens: Math.max(promptTokens + completionTokens, totalTokens),
73
+ };
74
+ }
75
+ return { output, usage };
76
+ }
77
+ /**
78
+ * Convert input messages to MessageObjects for thread history.
79
+ * System messages are filtered out — they are transient instructions, not conversation history.
80
+ */
81
+ function toInputMessageObjects(messages, threadId) {
82
+ return messages
83
+ .filter(m => m.role !== 'system')
84
+ .map(m => ({
85
+ id: newMsgId(),
86
+ object: 'thread.message',
87
+ created_at: nowUnix(),
88
+ thread_id: threadId,
89
+ role: m.role,
90
+ status: 'completed',
91
+ content: typeof m.content === 'string'
92
+ ? [{ type: 'text', text: { value: m.content, annotations: [] } }]
93
+ : m.content.map(p => ({ type: 'text', text: { value: p.text, annotations: [] } })),
94
+ }));
95
+ }
96
+ function defaultCreateThread() {
97
+ return async function () {
98
+ var _a;
99
+ const thread = await this.__agentStore.createThread();
100
+ return {
101
+ id: thread.id,
102
+ object: 'thread',
103
+ created_at: thread.created_at,
104
+ metadata: (_a = thread.metadata) !== null && _a !== void 0 ? _a : {},
105
+ };
106
+ };
107
+ }
108
+ function defaultGetThread() {
109
+ return async function (threadId) {
110
+ var _a;
111
+ const thread = await this.__agentStore.getThread(threadId);
112
+ return {
113
+ id: thread.id,
114
+ object: 'thread',
115
+ created_at: thread.created_at,
116
+ metadata: (_a = thread.metadata) !== null && _a !== void 0 ? _a : {},
117
+ messages: thread.messages,
118
+ };
119
+ };
120
+ }
121
+ function defaultSyncRun() {
122
+ return async function (input) {
123
+ let threadId = input.thread_id;
124
+ if (!threadId) {
125
+ const thread = await this.__agentStore.createThread();
126
+ threadId = thread.id;
127
+ input = { ...input, thread_id: threadId };
128
+ }
129
+ const run = await this.__agentStore.createRun(input.input.messages, threadId, input.config, input.metadata);
130
+ try {
131
+ const startedAt = nowUnix();
132
+ await this.__agentStore.updateRun(run.id, { status: 'in_progress', started_at: startedAt });
133
+ const streamMessages = [];
134
+ for await (const msg of this.execRun(input)) {
135
+ streamMessages.push(msg);
136
+ }
137
+ const { output, usage } = extractFromStreamMessages(streamMessages, run.id);
138
+ const completedAt = nowUnix();
139
+ await this.__agentStore.updateRun(run.id, {
140
+ status: 'completed',
141
+ output,
142
+ usage,
143
+ completed_at: completedAt,
144
+ });
145
+ await this.__agentStore.appendMessages(threadId, [
146
+ ...toInputMessageObjects(input.input.messages, threadId),
147
+ ...output,
148
+ ]);
149
+ return {
150
+ id: run.id,
151
+ object: 'thread.run',
152
+ created_at: run.created_at,
153
+ thread_id: threadId,
154
+ status: 'completed',
155
+ started_at: startedAt,
156
+ completed_at: completedAt,
157
+ output,
158
+ usage,
159
+ metadata: run.metadata,
160
+ };
161
+ }
162
+ catch (err) {
163
+ const failedAt = nowUnix();
164
+ await this.__agentStore.updateRun(run.id, {
165
+ status: 'failed',
166
+ last_error: { code: 'EXEC_ERROR', message: err.message },
167
+ failed_at: failedAt,
168
+ });
169
+ throw err;
170
+ }
171
+ };
172
+ }
173
+ function defaultAsyncRun() {
174
+ return async function (input) {
175
+ let threadId = input.thread_id;
176
+ if (!threadId) {
177
+ const thread = await this.__agentStore.createThread();
178
+ threadId = thread.id;
179
+ input = { ...input, thread_id: threadId };
180
+ }
181
+ const run = await this.__agentStore.createRun(input.input.messages, threadId, input.config, input.metadata);
182
+ const abortController = new AbortController();
183
+ const promise = (async () => {
184
+ try {
185
+ await this.__agentStore.updateRun(run.id, { status: 'in_progress', started_at: nowUnix() });
186
+ const streamMessages = [];
187
+ for await (const msg of this.execRun(input, abortController.signal)) {
188
+ if (abortController.signal.aborted)
189
+ break;
190
+ streamMessages.push(msg);
191
+ }
192
+ if (abortController.signal.aborted)
193
+ return;
194
+ const { output, usage } = extractFromStreamMessages(streamMessages, run.id);
195
+ await this.__agentStore.updateRun(run.id, {
196
+ status: 'completed',
197
+ output,
198
+ usage,
199
+ completed_at: nowUnix(),
200
+ });
201
+ await this.__agentStore.appendMessages(threadId, [
202
+ ...toInputMessageObjects(input.input.messages, threadId),
203
+ ...output,
204
+ ]);
205
+ }
206
+ catch (err) {
207
+ if (!abortController.signal.aborted) {
208
+ try {
209
+ await this.__agentStore.updateRun(run.id, {
210
+ status: 'failed',
211
+ last_error: { code: 'EXEC_ERROR', message: err.message },
212
+ failed_at: nowUnix(),
213
+ });
214
+ }
215
+ catch {
216
+ // Ignore store update failure to avoid swallowing the original error
217
+ }
218
+ }
219
+ }
220
+ finally {
221
+ this.__runningTasks.delete(run.id);
222
+ }
223
+ })();
224
+ this.__runningTasks.set(run.id, { promise, abortController });
225
+ return {
226
+ id: run.id,
227
+ object: 'thread.run',
228
+ created_at: run.created_at,
229
+ thread_id: threadId,
230
+ status: 'queued',
231
+ metadata: run.metadata,
232
+ };
233
+ };
234
+ }
235
+ function defaultStreamRun() {
236
+ return async function (input) {
237
+ var _a, _b, _c;
238
+ const runtimeCtx = tegg_runtime_1.ContextHandler.getContext();
239
+ if (!runtimeCtx) {
240
+ throw new Error('streamRun must be called within a request context');
241
+ }
242
+ const ctx = runtimeCtx.get(Symbol.for('context#eggContext'));
243
+ // Bypass Koa response handling — write SSE directly to the raw response
244
+ ctx.respond = false;
245
+ const res = ctx.res;
246
+ res.writeHead(200, {
247
+ 'Content-Type': 'text/event-stream',
248
+ 'Cache-Control': 'no-cache',
249
+ Connection: 'keep-alive',
250
+ });
251
+ // Abort execRun generator when client disconnects
252
+ const abortController = new AbortController();
253
+ res.on('close', () => abortController.abort());
254
+ let threadId = input.thread_id;
255
+ if (!threadId) {
256
+ const thread = await this.__agentStore.createThread();
257
+ threadId = thread.id;
258
+ input = { ...input, thread_id: threadId };
259
+ }
260
+ const run = await this.__agentStore.createRun(input.input.messages, threadId, input.config, input.metadata);
261
+ const runObj = {
262
+ id: run.id,
263
+ object: 'thread.run',
264
+ created_at: run.created_at,
265
+ thread_id: threadId,
266
+ status: 'queued',
267
+ metadata: run.metadata,
268
+ };
269
+ // event: thread.run.created
270
+ res.write(`event: thread.run.created\ndata: ${JSON.stringify(runObj)}\n\n`);
271
+ // event: thread.run.in_progress
272
+ runObj.status = 'in_progress';
273
+ runObj.started_at = nowUnix();
274
+ await this.__agentStore.updateRun(run.id, { status: 'in_progress', started_at: runObj.started_at });
275
+ res.write(`event: thread.run.in_progress\ndata: ${JSON.stringify(runObj)}\n\n`);
276
+ const msgId = newMsgId();
277
+ const accumulatedContent = [];
278
+ // event: thread.message.created
279
+ const msgObj = {
280
+ id: msgId,
281
+ object: 'thread.message',
282
+ created_at: nowUnix(),
283
+ run_id: run.id,
284
+ role: 'assistant',
285
+ status: 'in_progress',
286
+ content: [],
287
+ };
288
+ res.write(`event: thread.message.created\ndata: ${JSON.stringify(msgObj)}\n\n`);
289
+ let promptTokens = 0;
290
+ let completionTokens = 0;
291
+ let totalTokens = 0;
292
+ let hasUsage = false;
293
+ try {
294
+ for await (const msg of this.execRun(input, abortController.signal)) {
295
+ if (abortController.signal.aborted)
296
+ break;
297
+ if (msg.message) {
298
+ const contentBlocks = toContentBlocks(msg.message);
299
+ accumulatedContent.push(...contentBlocks);
300
+ // event: thread.message.delta
301
+ const delta = {
302
+ id: msgId,
303
+ object: 'thread.message.delta',
304
+ delta: { content: contentBlocks },
305
+ };
306
+ res.write(`event: thread.message.delta\ndata: ${JSON.stringify(delta)}\n\n`);
307
+ }
308
+ if (msg.usage) {
309
+ hasUsage = true;
310
+ promptTokens += (_a = msg.usage.prompt_tokens) !== null && _a !== void 0 ? _a : 0;
311
+ completionTokens += (_b = msg.usage.completion_tokens) !== null && _b !== void 0 ? _b : 0;
312
+ totalTokens += (_c = msg.usage.total_tokens) !== null && _c !== void 0 ? _c : 0;
313
+ }
314
+ }
315
+ // If client disconnected / abort signaled, emit cancelled and return
316
+ if (abortController.signal.aborted) {
317
+ const cancelledAt = nowUnix();
318
+ try {
319
+ await this.__agentStore.updateRun(run.id, { status: 'cancelled', cancelled_at: cancelledAt });
320
+ }
321
+ catch {
322
+ // Ignore store update failure during abort
323
+ }
324
+ runObj.status = 'cancelled';
325
+ runObj.cancelled_at = cancelledAt;
326
+ res.write(`event: thread.run.cancelled\ndata: ${JSON.stringify(runObj)}\n\n`);
327
+ return;
328
+ }
329
+ // event: thread.message.completed
330
+ msgObj.status = 'completed';
331
+ msgObj.content = accumulatedContent;
332
+ res.write(`event: thread.message.completed\ndata: ${JSON.stringify(msgObj)}\n\n`);
333
+ // Build final output
334
+ const output = accumulatedContent.length > 0 ? [msgObj] : [];
335
+ let usage;
336
+ if (hasUsage) {
337
+ usage = {
338
+ prompt_tokens: promptTokens,
339
+ completion_tokens: completionTokens,
340
+ total_tokens: Math.max(promptTokens + completionTokens, totalTokens),
341
+ };
342
+ }
343
+ const completedAt = nowUnix();
344
+ await this.__agentStore.updateRun(run.id, {
345
+ status: 'completed',
346
+ output,
347
+ usage,
348
+ completed_at: completedAt,
349
+ });
350
+ await this.__agentStore.appendMessages(threadId, [
351
+ ...toInputMessageObjects(input.input.messages, threadId),
352
+ ...output,
353
+ ]);
354
+ // event: thread.run.completed
355
+ runObj.status = 'completed';
356
+ runObj.completed_at = completedAt;
357
+ runObj.usage = usage;
358
+ runObj.output = output;
359
+ res.write(`event: thread.run.completed\ndata: ${JSON.stringify(runObj)}\n\n`);
360
+ }
361
+ catch (err) {
362
+ const failedAt = nowUnix();
363
+ try {
364
+ await this.__agentStore.updateRun(run.id, {
365
+ status: 'failed',
366
+ last_error: { code: 'EXEC_ERROR', message: err.message },
367
+ failed_at: failedAt,
368
+ });
369
+ }
370
+ catch {
371
+ // Ignore store update failure to avoid swallowing the original error
372
+ }
373
+ // event: thread.run.failed
374
+ runObj.status = 'failed';
375
+ runObj.failed_at = failedAt;
376
+ runObj.last_error = { code: 'EXEC_ERROR', message: err.message };
377
+ res.write(`event: thread.run.failed\ndata: ${JSON.stringify(runObj)}\n\n`);
378
+ }
379
+ finally {
380
+ // event: done
381
+ res.write('event: done\ndata: [DONE]\n\n');
382
+ res.end();
383
+ }
384
+ };
385
+ }
386
+ function defaultGetRun() {
387
+ return async function (runId) {
388
+ const run = await this.__agentStore.getRun(runId);
389
+ return {
390
+ id: run.id,
391
+ object: 'thread.run',
392
+ created_at: run.created_at,
393
+ thread_id: run.thread_id,
394
+ status: run.status,
395
+ last_error: run.last_error,
396
+ started_at: run.started_at,
397
+ completed_at: run.completed_at,
398
+ cancelled_at: run.cancelled_at,
399
+ failed_at: run.failed_at,
400
+ usage: run.usage,
401
+ output: run.output,
402
+ config: run.config,
403
+ metadata: run.metadata,
404
+ };
405
+ };
406
+ }
407
+ const TERMINAL_RUN_STATUSES = new Set(['completed', 'failed', 'cancelled', 'expired']);
408
+ function defaultCancelRun() {
409
+ return async function (runId) {
410
+ // Abort running task first to prevent it from writing completed status
411
+ const task = this.__runningTasks.get(runId);
412
+ if (task) {
413
+ task.abortController.abort();
414
+ // Wait for the background task to finish so it won't race with our update
415
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
416
+ await task.promise.catch(() => { });
417
+ }
418
+ // Re-read run status after background task has settled
419
+ const run = await this.__agentStore.getRun(runId);
420
+ if (TERMINAL_RUN_STATUSES.has(run.status)) {
421
+ throw new Error(`Cannot cancel run with status '${run.status}'`);
422
+ }
423
+ const cancelledAt = nowUnix();
424
+ await this.__agentStore.updateRun(runId, {
425
+ status: 'cancelled',
426
+ cancelled_at: cancelledAt,
427
+ });
428
+ return {
429
+ id: run.id,
430
+ object: 'thread.run',
431
+ created_at: run.created_at,
432
+ thread_id: run.thread_id,
433
+ status: 'cancelled',
434
+ cancelled_at: cancelledAt,
435
+ };
436
+ };
437
+ }
438
+ exports.AGENT_DEFAULT_FACTORIES = {
439
+ createThread: defaultCreateThread,
440
+ getThread: defaultGetThread,
441
+ syncRun: defaultSyncRun,
442
+ asyncRun: defaultAsyncRun,
443
+ streamRun: defaultStreamRun,
444
+ getRun: defaultGetRun,
445
+ cancelRun: defaultCancelRun,
446
+ };
447
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnREZWZhdWx0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hZ2VudERlZmF1bHRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDhEQUFpQztBQUNqQyxzREFBcUQ7QUFtQnJELFNBQVMsT0FBTztJQUNkLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDdkMsQ0FBQztBQUVELFNBQVMsUUFBUTtJQUNmLE9BQU8sT0FBTyxxQkFBTSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7QUFDdEMsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyxlQUFlLENBQUMsR0FBa0M7SUFDekQsSUFBSSxDQUFDLEdBQUc7UUFBRSxPQUFPLEVBQUUsQ0FBQztJQUNwQixNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDO0lBQzVCLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDaEMsT0FBTyxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUNELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQzNCLE9BQU8sT0FBTzthQUNYLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDO2FBQ3BDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBZSxFQUFFLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMzRixDQUFDO0lBQ0Qs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
@@ -0,0 +1,2 @@
1
+ import type { EggProtoImplClass } from '@eggjs/tegg-types';
2
+ export declare function enhanceAgentController(clazz: EggProtoImplClass): void;
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.enhanceAgentController = enhanceAgentController;
7
+ const node_path_1 = __importDefault(require("node:path"));
8
+ const FileAgentStore_1 = require("./FileAgentStore");
9
+ const agentDefaults_1 = require("./agentDefaults");
10
+ const AGENT_METHOD_NAMES = [
11
+ 'createThread', 'getThread', 'asyncRun', 'streamRun', 'syncRun', 'getRun', 'cancelRun',
12
+ ];
13
+ const NOT_IMPLEMENTED = Symbol.for('AGENT_NOT_IMPLEMENTED');
14
+ const AGENT_ENHANCED = Symbol.for('AGENT_CONTROLLER_ENHANCED');
15
+ // Enhance an AgentController class with smart default implementations.
16
+ //
17
+ // Called by the plugin/controller lifecycle hook AFTER the decorator has set
18
+ // HTTP metadata and injected stub methods. Detects which methods are
19
+ // user-defined vs stubs (via Symbol.for('AGENT_NOT_IMPLEMENTED') marker)
20
+ // and replaces stubs with store-backed default implementations.
21
+ // Also wraps init()/destroy() to manage the AgentStore lifecycle.
22
+ //
23
+ // Prerequisites:
24
+ // - The class must be marked with Symbol.for('AGENT_CONTROLLER') (otherwise this is a no-op).
25
+ // - Stub methods must be marked with Symbol.for('AGENT_NOT_IMPLEMENTED').
26
+ function enhanceAgentController(clazz) {
27
+ // Only enhance classes marked by @AgentController decorator
28
+ if (!clazz[Symbol.for('AGENT_CONTROLLER')]) {
29
+ return;
30
+ }
31
+ // Guard against repeated enhancement (e.g., multiple lifecycle hook calls)
32
+ if (clazz[AGENT_ENHANCED]) {
33
+ return;
34
+ }
35
+ // Identify which methods are stubs vs user-defined
36
+ const stubMethods = new Set();
37
+ for (const name of AGENT_METHOD_NAMES) {
38
+ const method = clazz.prototype[name];
39
+ if (!method || method[NOT_IMPLEMENTED]) {
40
+ stubMethods.add(name);
41
+ }
42
+ }
43
+ // Wrap init() lifecycle to create store and task tracking
44
+ const originalInit = clazz.prototype.init;
45
+ clazz.prototype.init = async function () {
46
+ // Allow user to provide custom store via createStore()
47
+ if (typeof this.createStore === 'function') {
48
+ this.__agentStore = await this.createStore();
49
+ }
50
+ else {
51
+ const dataDir = process.env.TEGG_AGENT_DATA_DIR || node_path_1.default.join(process.cwd(), '.agent-data');
52
+ this.__agentStore = new FileAgentStore_1.FileAgentStore({ dataDir });
53
+ }
54
+ if (this.__agentStore.init) {
55
+ await this.__agentStore.init();
56
+ }
57
+ this.__runningTasks = new Map();
58
+ if (originalInit) {
59
+ await originalInit.call(this);
60
+ }
61
+ };
62
+ // Wrap destroy() lifecycle to wait for in-flight tasks and cleanup
63
+ const originalDestroy = clazz.prototype.destroy;
64
+ clazz.prototype.destroy = async function () {
65
+ var _a, _b;
66
+ // Wait for in-flight background tasks
67
+ if ((_a = this.__runningTasks) === null || _a === void 0 ? void 0 : _a.size) {
68
+ const pending = Array.from(this.__runningTasks.values()).map((t) => t.promise);
69
+ await Promise.allSettled(pending);
70
+ }
71
+ // Destroy store
72
+ if ((_b = this.__agentStore) === null || _b === void 0 ? void 0 : _b.destroy) {
73
+ await this.__agentStore.destroy();
74
+ }
75
+ if (originalDestroy) {
76
+ await originalDestroy.call(this);
77
+ }
78
+ };
79
+ // Inject smart defaults for stub methods
80
+ for (const methodName of AGENT_METHOD_NAMES) {
81
+ if (!stubMethods.has(methodName))
82
+ continue;
83
+ const factory = agentDefaults_1.AGENT_DEFAULT_FACTORIES[methodName];
84
+ if (factory) {
85
+ clazz.prototype[methodName] = factory();
86
+ }
87
+ }
88
+ clazz[AGENT_ENHANCED] = true;
89
+ }
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5oYW5jZUFnZW50Q29udHJvbGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbmhhbmNlQWdlbnRDb250cm9sbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBd0JBLHdEQXVFQztBQS9GRCwwREFBNkI7QUFFN0IscURBQWtEO0FBRWxELG1EQUEwRDtBQUUxRCxNQUFNLGtCQUFrQixHQUFHO0lBQ3pCLGNBQWMsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFdBQVc7Q0FDdkYsQ0FBQztBQUVGLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsdUJBQXVCLENBQUMsQ0FBQztBQUM1RCxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLDJCQUEyQixDQUFDLENBQUM7QUFFL0QsdUVBQXVFO0FBQ3ZFLEVBQUU7QUFDRiw2RUFBNkU7QUFDN0UscUVBQXFFO0FBQ3JFLHlFQUF5RTtBQUN6RSxnRUFBZ0U7QUFDaEUsa0VBQWtFO0FBQ2xFLEVBQUU7QUFDRixpQkFBaUI7QUFDakIsOEZBQThGO0FBQzlGLDBFQUEwRTtBQUMxRSxTQUFnQixzQkFBc0IsQ0FBQyxLQUF3QjtJQUM3RCw0REFBNEQ7SUFDNUQsSUFBSSxDQUFFLEtBQWEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3BELE9BQU87SUFDVCxDQUFDO0lBRUQsMkVBQTJFO0lBQzNFLElBQUssS0FBYSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7UUFDbkMsT0FBTztJQUNULENBQUM7SUFFRCxtREFBbUQ7SUFDbkQsTUFBTSxXQUFXLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztJQUN0QyxLQUFLLE1BQU0sSUFBSSxJQUFJLGtCQUFrQixFQUFFLENBQUM7UUFDdEMsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJ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
package/package.json CHANGED
@@ -1,31 +1,50 @@
1
1
  {
2
2
  "name": "@eggjs/agent-runtime",
3
- "version": "0.0.0",
4
- "description": "egg logger",
3
+ "version": "3.73.0-beta.1",
4
+ "description": "Agent runtime with store abstraction for Egg.js tegg",
5
5
  "keywords": [
6
+ "agent",
6
7
  "egg",
7
- "logger"
8
+ "runtime",
9
+ "store",
10
+ "tegg"
8
11
  ],
9
- "homepage": "https://github.com/eggjs/egg/tree/next/packages/logger",
12
+ "homepage": "https://github.com/eggjs/tegg/tree/master/core/agent-runtime",
10
13
  "bugs": {
11
- "url": "https://github.com/eggjs/egg/issues"
14
+ "url": "https://github.com/eggjs/tegg/issues"
12
15
  },
13
16
  "license": "MIT",
14
- "author": "fengmk2 <fengmk2@gmail.com> (https://github.com/fengmk2)",
15
17
  "repository": {
16
18
  "type": "git",
17
- "url": "git+https://github.com/eggjs/egg.git",
18
- "directory": "packages/logger"
19
+ "url": "git+https://github.com/eggjs/tegg.git",
20
+ "directory": "core/agent-runtime"
19
21
  },
20
- "publishConfig": {
21
- "access": "public"
22
+ "files": [
23
+ "dist",
24
+ "index.js",
25
+ "index.d.ts"
26
+ ],
27
+ "main": "dist/index.js",
28
+ "types": "dist/index.d.ts",
29
+ "scripts": {
30
+ "tsc": "tsc -p tsconfig.json",
31
+ "tsc:pub": "tsc -p tsconfig.pub.json",
32
+ "prepublishOnly": "npm run tsc:pub",
33
+ "test": "mocha"
22
34
  },
23
35
  "dependencies": {
36
+ "@eggjs/tegg-types": "^3.73.0-beta.1",
37
+ "egg-logger": "^3.0.1",
38
+ "oss-client": "^2.5.1"
24
39
  },
25
40
  "devDependencies": {
41
+ "@types/mocha": "^10.0.0",
42
+ "@types/node": "^20.0.0",
43
+ "mocha": "^10.0.0",
44
+ "typescript": "^5.0.0"
26
45
  },
27
46
  "engines": {
28
- "node": ">= 22.18.0"
29
- }
47
+ "node": ">= 16.0.0"
48
+ },
49
+ "gitHead": "b29319ee49b55f6e777d5581d70bfea224bf6e1f"
30
50
  }
31
-