@elizaos/core 1.5.1 → 1.5.2
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/browser/index.browser.js +120 -120
- package/dist/browser/index.browser.js.map +5 -21
- package/dist/browser/index.d.ts +3 -1
- package/dist/index.d.ts +2 -3
- package/dist/index.js +1 -5
- package/dist/node/index.d.ts +3 -1
- package/package.json +10 -4
- package/src/__tests__/action-chaining-simple.test.ts +203 -0
- package/src/__tests__/actions.test.ts +218 -0
- package/src/__tests__/buffer.test.ts +337 -0
- package/src/__tests__/character-validation.test.ts +309 -0
- package/src/__tests__/database.test.ts +750 -0
- package/src/__tests__/entities.test.ts +727 -0
- package/src/__tests__/env.test.ts +23 -0
- package/src/__tests__/environment.test.ts +285 -0
- package/src/__tests__/logger-browser-node.test.ts +716 -0
- package/src/__tests__/logger.test.ts +403 -0
- package/src/__tests__/messages.test.ts +196 -0
- package/src/__tests__/mockCharacter.ts +544 -0
- package/src/__tests__/parsing.test.ts +58 -0
- package/src/__tests__/prompts.test.ts +159 -0
- package/src/__tests__/roles.test.ts +331 -0
- package/src/__tests__/runtime-embedding.test.ts +343 -0
- package/src/__tests__/runtime.test.ts +978 -0
- package/src/__tests__/search.test.ts +15 -0
- package/src/__tests__/services-by-type.test.ts +204 -0
- package/src/__tests__/services.test.ts +136 -0
- package/src/__tests__/settings.test.ts +810 -0
- package/src/__tests__/utils.test.ts +1105 -0
- package/src/__tests__/uuid.test.ts +94 -0
- package/src/actions.ts +122 -0
- package/src/database.ts +579 -0
- package/src/entities.ts +406 -0
- package/src/index.browser.ts +48 -0
- package/src/index.node.ts +39 -0
- package/src/index.ts +50 -0
- package/src/logger.ts +527 -0
- package/src/prompts.ts +243 -0
- package/src/roles.ts +85 -0
- package/src/runtime.ts +2514 -0
- package/src/schemas/character.ts +149 -0
- package/src/search.ts +1543 -0
- package/src/sentry/instrument.browser.ts +65 -0
- package/src/sentry/instrument.node.ts +57 -0
- package/src/sentry/instrument.ts +82 -0
- package/src/services.ts +105 -0
- package/src/settings.ts +409 -0
- package/src/test_resources/constants.ts +12 -0
- package/src/test_resources/testSetup.ts +21 -0
- package/src/test_resources/types.ts +22 -0
- package/src/types/agent.ts +112 -0
- package/src/types/browser.ts +145 -0
- package/src/types/components.ts +184 -0
- package/src/types/database.ts +348 -0
- package/src/types/email.ts +162 -0
- package/src/types/environment.ts +129 -0
- package/src/types/events.ts +249 -0
- package/src/types/index.ts +29 -0
- package/src/types/knowledge.ts +65 -0
- package/src/types/lp.ts +124 -0
- package/src/types/memory.ts +228 -0
- package/src/types/message.ts +233 -0
- package/src/types/messaging.ts +57 -0
- package/src/types/model.ts +359 -0
- package/src/types/pdf.ts +77 -0
- package/src/types/plugin.ts +78 -0
- package/src/types/post.ts +271 -0
- package/src/types/primitives.ts +97 -0
- package/src/types/runtime.ts +190 -0
- package/src/types/service.ts +198 -0
- package/src/types/settings.ts +30 -0
- package/src/types/state.ts +60 -0
- package/src/types/task.ts +72 -0
- package/src/types/tee.ts +107 -0
- package/src/types/testing.ts +30 -0
- package/src/types/token.ts +96 -0
- package/src/types/transcription.ts +133 -0
- package/src/types/video.ts +108 -0
- package/src/types/wallet.ts +56 -0
- package/src/types/web-search.ts +146 -0
- package/src/utils/__tests__/buffer.test.ts +80 -0
- package/src/utils/__tests__/environment.test.ts +58 -0
- package/src/utils/__tests__/stringToUuid.test.ts +88 -0
- package/src/utils/buffer.ts +312 -0
- package/src/utils/environment.ts +316 -0
- package/src/utils/server-health.ts +117 -0
- package/src/utils.ts +1076 -0
- package/dist/tsconfig.build.tsbuildinfo +0 -1
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { getEnv, getBooleanEnv, getNumberEnv } from '../utils/environment';
|
|
2
|
+
|
|
3
|
+
type SentryBrowserModule = {
|
|
4
|
+
init: (options: Record<string, any>) => void;
|
|
5
|
+
captureException: (error: unknown) => void;
|
|
6
|
+
flush?: (timeout?: number) => Promise<boolean>;
|
|
7
|
+
onLoad?: (cb: () => void) => void;
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
let initialized = false;
|
|
11
|
+
let sentryClient: SentryBrowserModule | null = null;
|
|
12
|
+
|
|
13
|
+
async function ensureSentryInitialized(): Promise<SentryBrowserModule | null> {
|
|
14
|
+
if (getEnv('SENTRY_LOGGING') === 'false') return null;
|
|
15
|
+
|
|
16
|
+
const dsn =
|
|
17
|
+
getEnv('SENTRY_DSN') ||
|
|
18
|
+
'https://c20e2d51b66c14a783b0689d536f7e5c@o4509349865259008.ingest.us.sentry.io/4509352524120064';
|
|
19
|
+
|
|
20
|
+
if (initialized && sentryClient) return sentryClient;
|
|
21
|
+
|
|
22
|
+
try {
|
|
23
|
+
const mod = (await import('@sentry/browser')) as unknown as SentryBrowserModule;
|
|
24
|
+
|
|
25
|
+
const init = () =>
|
|
26
|
+
mod.init({
|
|
27
|
+
dsn,
|
|
28
|
+
environment: getEnv('SENTRY_ENVIRONMENT') || getEnv('NODE_ENV', 'development'),
|
|
29
|
+
tracesSampleRate: (getNumberEnv('SENTRY_TRACES_SAMPLE_RATE', 1.0) as number) ?? 1.0,
|
|
30
|
+
sendDefaultPii: getBooleanEnv('SENTRY_SEND_DEFAULT_PII', false),
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
if (typeof mod.onLoad === 'function') {
|
|
34
|
+
mod.onLoad(init);
|
|
35
|
+
} else {
|
|
36
|
+
init();
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
initialized = true;
|
|
40
|
+
sentryClient = mod;
|
|
41
|
+
return sentryClient;
|
|
42
|
+
} catch {
|
|
43
|
+
initialized = true;
|
|
44
|
+
sentryClient = null;
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export const Sentry = {
|
|
50
|
+
async captureException(error: unknown) {
|
|
51
|
+
const client = await ensureSentryInitialized();
|
|
52
|
+
try {
|
|
53
|
+
client?.captureException?.(error);
|
|
54
|
+
} catch {}
|
|
55
|
+
},
|
|
56
|
+
async flush(timeout?: number): Promise<boolean> {
|
|
57
|
+
const client = await ensureSentryInitialized();
|
|
58
|
+
try {
|
|
59
|
+
if (client?.flush) return await client.flush(timeout);
|
|
60
|
+
} catch {}
|
|
61
|
+
return true;
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
export type { SentryBrowserModule };
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { getEnv, getBooleanEnv, getNumberEnv } from '../utils/environment';
|
|
2
|
+
|
|
3
|
+
type SentryNodeModule = {
|
|
4
|
+
init: (options: Record<string, any>) => void;
|
|
5
|
+
captureException: (error: unknown) => void;
|
|
6
|
+
flush?: (timeout?: number) => Promise<boolean>;
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
let initialized = false;
|
|
10
|
+
let sentryClient: SentryNodeModule | null = null;
|
|
11
|
+
|
|
12
|
+
async function ensureSentryInitialized(): Promise<SentryNodeModule | null> {
|
|
13
|
+
if (getEnv('SENTRY_LOGGING') === 'false') return null;
|
|
14
|
+
|
|
15
|
+
const dsn =
|
|
16
|
+
getEnv('SENTRY_DSN') ||
|
|
17
|
+
'https://c20e2d51b66c14a783b0689d536f7e5c@o4509349865259008.ingest.us.sentry.io/4509352524120064';
|
|
18
|
+
|
|
19
|
+
if (initialized && sentryClient) return sentryClient;
|
|
20
|
+
|
|
21
|
+
try {
|
|
22
|
+
const mod = (await import('@sentry/node')) as unknown as SentryNodeModule;
|
|
23
|
+
|
|
24
|
+
mod.init({
|
|
25
|
+
dsn,
|
|
26
|
+
environment: getEnv('SENTRY_ENVIRONMENT') || getEnv('NODE_ENV', 'development'),
|
|
27
|
+
tracesSampleRate: (getNumberEnv('SENTRY_TRACES_SAMPLE_RATE', 1.0) as number) ?? 1.0,
|
|
28
|
+
sendDefaultPii: getBooleanEnv('SENTRY_SEND_DEFAULT_PII', false),
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
initialized = true;
|
|
32
|
+
sentryClient = mod;
|
|
33
|
+
return sentryClient;
|
|
34
|
+
} catch {
|
|
35
|
+
initialized = true;
|
|
36
|
+
sentryClient = null;
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export const Sentry = {
|
|
42
|
+
async captureException(error: unknown) {
|
|
43
|
+
const client = await ensureSentryInitialized();
|
|
44
|
+
try {
|
|
45
|
+
client?.captureException?.(error);
|
|
46
|
+
} catch {}
|
|
47
|
+
},
|
|
48
|
+
async flush(timeout?: number): Promise<boolean> {
|
|
49
|
+
const client = await ensureSentryInitialized();
|
|
50
|
+
try {
|
|
51
|
+
if (client?.flush) return await client.flush(timeout);
|
|
52
|
+
} catch {}
|
|
53
|
+
return true;
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
export type { SentryNodeModule };
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { getEnv, getBooleanEnv, getNumberEnv, detectEnvironment } from '../utils/environment';
|
|
2
|
+
|
|
3
|
+
type SentryModule = {
|
|
4
|
+
init: (options: Record<string, any>) => void;
|
|
5
|
+
captureException: (error: unknown) => void;
|
|
6
|
+
flush?: (timeout?: number) => Promise<boolean>;
|
|
7
|
+
onLoad?: (cb: () => void) => void; // only present in browser sdk types
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
let initialized = false;
|
|
11
|
+
let sentryClient: SentryModule | null = null;
|
|
12
|
+
|
|
13
|
+
async function ensureSentryInitialized(): Promise<SentryModule | null> {
|
|
14
|
+
if (getEnv('SENTRY_LOGGING') === 'false') return null;
|
|
15
|
+
|
|
16
|
+
const dsn =
|
|
17
|
+
getEnv('SENTRY_DSN') ||
|
|
18
|
+
'https://c20e2d51b66c14a783b0689d536f7e5c@o4509349865259008.ingest.us.sentry.io/4509352524120064';
|
|
19
|
+
|
|
20
|
+
if (initialized && sentryClient) return sentryClient;
|
|
21
|
+
|
|
22
|
+
const isBrowser = detectEnvironment() === 'browser';
|
|
23
|
+
|
|
24
|
+
try {
|
|
25
|
+
if (isBrowser) {
|
|
26
|
+
const mod = (await import('@sentry/browser')) as unknown as SentryModule;
|
|
27
|
+
|
|
28
|
+
const init = () =>
|
|
29
|
+
mod.init({
|
|
30
|
+
dsn,
|
|
31
|
+
environment: getEnv('SENTRY_ENVIRONMENT') || getEnv('NODE_ENV', 'development'),
|
|
32
|
+
tracesSampleRate: (getNumberEnv('SENTRY_TRACES_SAMPLE_RATE', 1.0) as number) ?? 1.0,
|
|
33
|
+
sendDefaultPii: getBooleanEnv('SENTRY_SEND_DEFAULT_PII', false),
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
if (typeof mod.onLoad === 'function') {
|
|
37
|
+
mod.onLoad(init);
|
|
38
|
+
} else {
|
|
39
|
+
init();
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
initialized = true;
|
|
43
|
+
sentryClient = mod;
|
|
44
|
+
return sentryClient;
|
|
45
|
+
} else {
|
|
46
|
+
const mod = (await import('@sentry/node')) as unknown as SentryModule;
|
|
47
|
+
|
|
48
|
+
mod.init({
|
|
49
|
+
dsn,
|
|
50
|
+
environment: getEnv('SENTRY_ENVIRONMENT') || getEnv('NODE_ENV', 'development'),
|
|
51
|
+
tracesSampleRate: (getNumberEnv('SENTRY_TRACES_SAMPLE_RATE', 1.0) as number) ?? 1.0,
|
|
52
|
+
sendDefaultPii: getBooleanEnv('SENTRY_SEND_DEFAULT_PII', false),
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
initialized = true;
|
|
56
|
+
sentryClient = mod;
|
|
57
|
+
return sentryClient;
|
|
58
|
+
}
|
|
59
|
+
} catch {
|
|
60
|
+
initialized = true;
|
|
61
|
+
sentryClient = null;
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export const Sentry = {
|
|
67
|
+
async captureException(error: unknown) {
|
|
68
|
+
const client = await ensureSentryInitialized();
|
|
69
|
+
try {
|
|
70
|
+
client?.captureException?.(error);
|
|
71
|
+
} catch {}
|
|
72
|
+
},
|
|
73
|
+
async flush(timeout?: number): Promise<boolean> {
|
|
74
|
+
const client = await ensureSentryInitialized();
|
|
75
|
+
try {
|
|
76
|
+
if (client?.flush) return await client.flush(timeout);
|
|
77
|
+
} catch {}
|
|
78
|
+
return true;
|
|
79
|
+
},
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
export type { SentryModule };
|
package/src/services.ts
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { Service } from './types';
|
|
2
|
+
import type { IAgentRuntime, ServiceTypeName } from './types';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Service builder class that provides type-safe service creation
|
|
6
|
+
* with automatic type inference
|
|
7
|
+
*/
|
|
8
|
+
export class ServiceBuilder<TService extends Service = Service> {
|
|
9
|
+
protected serviceType: ServiceTypeName | string;
|
|
10
|
+
protected startFn!: (runtime: IAgentRuntime) => Promise<TService>;
|
|
11
|
+
protected stopFn?: () => Promise<void>;
|
|
12
|
+
protected description: string;
|
|
13
|
+
|
|
14
|
+
constructor(serviceType: ServiceTypeName | string) {
|
|
15
|
+
this.serviceType = serviceType;
|
|
16
|
+
this.description = '';
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Set the service description
|
|
21
|
+
*/
|
|
22
|
+
withDescription(description: string): this {
|
|
23
|
+
this.description = description;
|
|
24
|
+
return this;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Set the start function for the service
|
|
29
|
+
*/
|
|
30
|
+
withStart(startFn: (runtime: IAgentRuntime) => Promise<TService>): this {
|
|
31
|
+
this.startFn = startFn;
|
|
32
|
+
return this;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Set the stop function for the service
|
|
37
|
+
*/
|
|
38
|
+
withStop(stopFn: () => Promise<void>): this {
|
|
39
|
+
this.stopFn = stopFn;
|
|
40
|
+
return this;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Build the service class with all configured properties
|
|
45
|
+
*/
|
|
46
|
+
build(): new (runtime?: IAgentRuntime) => TService {
|
|
47
|
+
const serviceType = this.serviceType;
|
|
48
|
+
const description = this.description;
|
|
49
|
+
const startFn = this.startFn;
|
|
50
|
+
const stopFn = this.stopFn;
|
|
51
|
+
|
|
52
|
+
// Create a dynamic class with the configured properties
|
|
53
|
+
return class extends (Service as any) {
|
|
54
|
+
static serviceType = serviceType;
|
|
55
|
+
capabilityDescription = description;
|
|
56
|
+
|
|
57
|
+
static async start(runtime: IAgentRuntime): Promise<Service> {
|
|
58
|
+
if (!startFn) {
|
|
59
|
+
throw new Error(`Start function not defined for service ${serviceType}`);
|
|
60
|
+
}
|
|
61
|
+
return startFn(runtime);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
async stop(): Promise<void> {
|
|
65
|
+
if (stopFn) {
|
|
66
|
+
await stopFn();
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
} as any;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Create a type-safe service builder
|
|
75
|
+
* @param serviceType - The service type name
|
|
76
|
+
* @returns A new ServiceBuilder instance
|
|
77
|
+
*/
|
|
78
|
+
export function createService<TService extends Service = Service>(
|
|
79
|
+
serviceType: ServiceTypeName | string
|
|
80
|
+
): ServiceBuilder<TService> {
|
|
81
|
+
return new ServiceBuilder<TService>(serviceType);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Type-safe service definition helper
|
|
86
|
+
*/
|
|
87
|
+
export interface ServiceDefinition<T extends Service = Service> {
|
|
88
|
+
serviceType: ServiceTypeName;
|
|
89
|
+
description: string;
|
|
90
|
+
start: (runtime: IAgentRuntime) => Promise<T>;
|
|
91
|
+
stop?: () => Promise<void>;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Define a service with type safety
|
|
96
|
+
*/
|
|
97
|
+
export function defineService<T extends Service = Service>(
|
|
98
|
+
definition: ServiceDefinition<T>
|
|
99
|
+
): new (runtime?: IAgentRuntime) => T {
|
|
100
|
+
return createService<T>(definition.serviceType)
|
|
101
|
+
.withDescription(definition.description)
|
|
102
|
+
.withStart(definition.start)
|
|
103
|
+
.withStop(definition.stop || (() => Promise.resolve()))
|
|
104
|
+
.build();
|
|
105
|
+
}
|