@herdctl/discord 0.0.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.
- package/dist/__tests__/auto-mode-handler.test.d.ts +2 -0
- package/dist/__tests__/auto-mode-handler.test.d.ts.map +1 -0
- package/dist/__tests__/auto-mode-handler.test.js +362 -0
- package/dist/__tests__/auto-mode-handler.test.js.map +1 -0
- package/dist/__tests__/discord-connector.test.d.ts +2 -0
- package/dist/__tests__/discord-connector.test.d.ts.map +1 -0
- package/dist/__tests__/discord-connector.test.js +958 -0
- package/dist/__tests__/discord-connector.test.js.map +1 -0
- package/dist/__tests__/error-handler.test.d.ts +2 -0
- package/dist/__tests__/error-handler.test.d.ts.map +1 -0
- package/dist/__tests__/error-handler.test.js +509 -0
- package/dist/__tests__/error-handler.test.js.map +1 -0
- package/dist/__tests__/errors.test.d.ts +2 -0
- package/dist/__tests__/errors.test.d.ts.map +1 -0
- package/dist/__tests__/errors.test.js +152 -0
- package/dist/__tests__/errors.test.js.map +1 -0
- package/dist/__tests__/logger.test.d.ts +2 -0
- package/dist/__tests__/logger.test.d.ts.map +1 -0
- package/dist/__tests__/logger.test.js +282 -0
- package/dist/__tests__/logger.test.js.map +1 -0
- package/dist/__tests__/mention-handler.test.d.ts +2 -0
- package/dist/__tests__/mention-handler.test.d.ts.map +1 -0
- package/dist/__tests__/mention-handler.test.js +547 -0
- package/dist/__tests__/mention-handler.test.js.map +1 -0
- package/dist/auto-mode-handler.d.ts +145 -0
- package/dist/auto-mode-handler.d.ts.map +1 -0
- package/dist/auto-mode-handler.js +211 -0
- package/dist/auto-mode-handler.js.map +1 -0
- package/dist/commands/__tests__/command-manager.test.d.ts +2 -0
- package/dist/commands/__tests__/command-manager.test.d.ts.map +1 -0
- package/dist/commands/__tests__/command-manager.test.js +307 -0
- package/dist/commands/__tests__/command-manager.test.js.map +1 -0
- package/dist/commands/__tests__/help.test.d.ts +2 -0
- package/dist/commands/__tests__/help.test.d.ts.map +1 -0
- package/dist/commands/__tests__/help.test.js +105 -0
- package/dist/commands/__tests__/help.test.js.map +1 -0
- package/dist/commands/__tests__/reset.test.d.ts +2 -0
- package/dist/commands/__tests__/reset.test.d.ts.map +1 -0
- package/dist/commands/__tests__/reset.test.js +140 -0
- package/dist/commands/__tests__/reset.test.js.map +1 -0
- package/dist/commands/__tests__/status.test.d.ts +2 -0
- package/dist/commands/__tests__/status.test.d.ts.map +1 -0
- package/dist/commands/__tests__/status.test.js +205 -0
- package/dist/commands/__tests__/status.test.js.map +1 -0
- package/dist/commands/command-manager.d.ts +66 -0
- package/dist/commands/command-manager.d.ts.map +1 -0
- package/dist/commands/command-manager.js +191 -0
- package/dist/commands/command-manager.js.map +1 -0
- package/dist/commands/help.d.ts +8 -0
- package/dist/commands/help.d.ts.map +1 -0
- package/dist/commands/help.js +27 -0
- package/dist/commands/help.js.map +1 -0
- package/dist/commands/index.d.ts +12 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +13 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/reset.d.ts +9 -0
- package/dist/commands/reset.d.ts.map +1 -0
- package/dist/commands/reset.js +28 -0
- package/dist/commands/reset.js.map +1 -0
- package/dist/commands/status.d.ts +9 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +102 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/types.d.ts +87 -0
- package/dist/commands/types.d.ts.map +1 -0
- package/dist/commands/types.js +8 -0
- package/dist/commands/types.js.map +1 -0
- package/dist/discord-connector.d.ts +154 -0
- package/dist/discord-connector.d.ts.map +1 -0
- package/dist/discord-connector.js +638 -0
- package/dist/discord-connector.js.map +1 -0
- package/dist/error-handler.d.ts +237 -0
- package/dist/error-handler.d.ts.map +1 -0
- package/dist/error-handler.js +433 -0
- package/dist/error-handler.js.map +1 -0
- package/dist/errors.d.ts +61 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +77 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +34 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +36 -0
- package/dist/index.js.map +1 -0
- package/dist/logger.d.ts +119 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +198 -0
- package/dist/logger.js.map +1 -0
- package/dist/mention-handler.d.ts +176 -0
- package/dist/mention-handler.d.ts.map +1 -0
- package/dist/mention-handler.js +236 -0
- package/dist/mention-handler.js.map +1 -0
- package/dist/session-manager/__tests__/errors.test.d.ts +2 -0
- package/dist/session-manager/__tests__/errors.test.d.ts.map +1 -0
- package/dist/session-manager/__tests__/errors.test.js +124 -0
- package/dist/session-manager/__tests__/errors.test.js.map +1 -0
- package/dist/session-manager/__tests__/session-manager.test.d.ts +2 -0
- package/dist/session-manager/__tests__/session-manager.test.d.ts.map +1 -0
- package/dist/session-manager/__tests__/session-manager.test.js +517 -0
- package/dist/session-manager/__tests__/session-manager.test.js.map +1 -0
- package/dist/session-manager/__tests__/types.test.d.ts +2 -0
- package/dist/session-manager/__tests__/types.test.d.ts.map +1 -0
- package/dist/session-manager/__tests__/types.test.js +169 -0
- package/dist/session-manager/__tests__/types.test.js.map +1 -0
- package/dist/session-manager/errors.d.ts +58 -0
- package/dist/session-manager/errors.d.ts.map +1 -0
- package/dist/session-manager/errors.js +70 -0
- package/dist/session-manager/errors.js.map +1 -0
- package/dist/session-manager/index.d.ts +11 -0
- package/dist/session-manager/index.d.ts.map +1 -0
- package/dist/session-manager/index.js +12 -0
- package/dist/session-manager/index.js.map +1 -0
- package/dist/session-manager/session-manager.d.ts +107 -0
- package/dist/session-manager/session-manager.d.ts.map +1 -0
- package/dist/session-manager/session-manager.js +347 -0
- package/dist/session-manager/session-manager.js.map +1 -0
- package/dist/session-manager/types.d.ts +167 -0
- package/dist/session-manager/types.d.ts.map +1 -0
- package/dist/session-manager/types.js +57 -0
- package/dist/session-manager/types.js.map +1 -0
- package/dist/types.d.ts +323 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/__tests__/formatting.test.d.ts +2 -0
- package/dist/utils/__tests__/formatting.test.d.ts.map +1 -0
- package/dist/utils/__tests__/formatting.test.js +571 -0
- package/dist/utils/__tests__/formatting.test.js.map +1 -0
- package/dist/utils/formatting.d.ts +211 -0
- package/dist/utils/formatting.d.ts.map +1 -0
- package/dist/utils/formatting.js +305 -0
- package/dist/utils/formatting.js.map +1 -0
- package/dist/utils/index.d.ts +5 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +9 -0
- package/dist/utils/index.js.map +1 -0
- package/package.json +49 -0
package/dist/errors.d.ts
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error classes for the Discord connector
|
|
3
|
+
*
|
|
4
|
+
* Provides typed errors for Discord connection and operation failures.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Error codes for Discord connector operations
|
|
8
|
+
*/
|
|
9
|
+
export declare enum DiscordErrorCode {
|
|
10
|
+
CONNECTION_FAILED = "DISCORD_CONNECTION_FAILED",
|
|
11
|
+
ALREADY_CONNECTED = "DISCORD_ALREADY_CONNECTED",
|
|
12
|
+
NOT_CONNECTED = "DISCORD_NOT_CONNECTED",
|
|
13
|
+
INVALID_TOKEN = "DISCORD_INVALID_TOKEN",
|
|
14
|
+
MISSING_TOKEN = "DISCORD_MISSING_TOKEN",
|
|
15
|
+
GATEWAY_ERROR = "DISCORD_GATEWAY_ERROR",
|
|
16
|
+
RATE_LIMITED = "DISCORD_RATE_LIMITED"
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Base error class for Discord connector operations
|
|
20
|
+
*
|
|
21
|
+
* Note: This extends Error directly rather than FleetManagerError
|
|
22
|
+
* because Discord connector errors have their own error code type.
|
|
23
|
+
*/
|
|
24
|
+
export declare class DiscordConnectorError extends Error {
|
|
25
|
+
readonly code: DiscordErrorCode;
|
|
26
|
+
readonly agentName: string;
|
|
27
|
+
constructor(message: string, code: DiscordErrorCode, agentName: string, options?: {
|
|
28
|
+
cause?: Error;
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Error thrown when connection to Discord fails
|
|
33
|
+
*/
|
|
34
|
+
export declare class DiscordConnectionError extends DiscordConnectorError {
|
|
35
|
+
constructor(agentName: string, message: string, options?: {
|
|
36
|
+
cause?: Error;
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Error thrown when attempting to connect while already connected
|
|
41
|
+
*/
|
|
42
|
+
export declare class AlreadyConnectedError extends DiscordConnectorError {
|
|
43
|
+
constructor(agentName: string);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Error thrown when bot token is missing or invalid
|
|
47
|
+
*/
|
|
48
|
+
export declare class InvalidTokenError extends DiscordConnectorError {
|
|
49
|
+
constructor(agentName: string, reason: string);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Error thrown when bot token is not provided
|
|
53
|
+
*/
|
|
54
|
+
export declare class MissingTokenError extends DiscordConnectorError {
|
|
55
|
+
constructor(agentName: string, envVar: string);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Type guard to check if an error is a DiscordConnectorError
|
|
59
|
+
*/
|
|
60
|
+
export declare function isDiscordConnectorError(error: unknown): error is DiscordConnectorError;
|
|
61
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,oBAAY,gBAAgB;IAC1B,iBAAiB,8BAA8B;IAC/C,iBAAiB,8BAA8B;IAC/C,aAAa,0BAA0B;IACvC,aAAa,0BAA0B;IACvC,aAAa,0BAA0B;IACvC,aAAa,0BAA0B;IACvC,YAAY,yBAAyB;CACtC;AAED;;;;;GAKG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,SAAgB,IAAI,EAAE,gBAAgB,CAAC;IACvC,SAAgB,SAAS,EAAE,MAAM,CAAC;gBAGhC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,gBAAgB,EACtB,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,KAAK,CAAA;KAAE;CAO9B;AAED;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,qBAAqB;gBACnD,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,KAAK,CAAA;KAAE;CAS5E;AAED;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,qBAAqB;gBAClD,SAAS,EAAE,MAAM;CAQ9B;AAED;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,qBAAqB;gBAC9C,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAQ9C;AAED;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,qBAAqB;gBAC9C,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAQ9C;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,qBAAqB,CAEhC"}
|
package/dist/errors.js
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error classes for the Discord connector
|
|
3
|
+
*
|
|
4
|
+
* Provides typed errors for Discord connection and operation failures.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Error codes for Discord connector operations
|
|
8
|
+
*/
|
|
9
|
+
export var DiscordErrorCode;
|
|
10
|
+
(function (DiscordErrorCode) {
|
|
11
|
+
DiscordErrorCode["CONNECTION_FAILED"] = "DISCORD_CONNECTION_FAILED";
|
|
12
|
+
DiscordErrorCode["ALREADY_CONNECTED"] = "DISCORD_ALREADY_CONNECTED";
|
|
13
|
+
DiscordErrorCode["NOT_CONNECTED"] = "DISCORD_NOT_CONNECTED";
|
|
14
|
+
DiscordErrorCode["INVALID_TOKEN"] = "DISCORD_INVALID_TOKEN";
|
|
15
|
+
DiscordErrorCode["MISSING_TOKEN"] = "DISCORD_MISSING_TOKEN";
|
|
16
|
+
DiscordErrorCode["GATEWAY_ERROR"] = "DISCORD_GATEWAY_ERROR";
|
|
17
|
+
DiscordErrorCode["RATE_LIMITED"] = "DISCORD_RATE_LIMITED";
|
|
18
|
+
})(DiscordErrorCode || (DiscordErrorCode = {}));
|
|
19
|
+
/**
|
|
20
|
+
* Base error class for Discord connector operations
|
|
21
|
+
*
|
|
22
|
+
* Note: This extends Error directly rather than FleetManagerError
|
|
23
|
+
* because Discord connector errors have their own error code type.
|
|
24
|
+
*/
|
|
25
|
+
export class DiscordConnectorError extends Error {
|
|
26
|
+
code;
|
|
27
|
+
agentName;
|
|
28
|
+
constructor(message, code, agentName, options) {
|
|
29
|
+
super(message, options);
|
|
30
|
+
this.name = "DiscordConnectorError";
|
|
31
|
+
this.code = code;
|
|
32
|
+
this.agentName = agentName;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Error thrown when connection to Discord fails
|
|
37
|
+
*/
|
|
38
|
+
export class DiscordConnectionError extends DiscordConnectorError {
|
|
39
|
+
constructor(agentName, message, options) {
|
|
40
|
+
super(`Discord connection failed for agent '${agentName}': ${message}`, DiscordErrorCode.CONNECTION_FAILED, agentName, options);
|
|
41
|
+
this.name = "DiscordConnectionError";
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Error thrown when attempting to connect while already connected
|
|
46
|
+
*/
|
|
47
|
+
export class AlreadyConnectedError extends DiscordConnectorError {
|
|
48
|
+
constructor(agentName) {
|
|
49
|
+
super(`Discord connector for agent '${agentName}' is already connected`, DiscordErrorCode.ALREADY_CONNECTED, agentName);
|
|
50
|
+
this.name = "AlreadyConnectedError";
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Error thrown when bot token is missing or invalid
|
|
55
|
+
*/
|
|
56
|
+
export class InvalidTokenError extends DiscordConnectorError {
|
|
57
|
+
constructor(agentName, reason) {
|
|
58
|
+
super(`Invalid Discord bot token for agent '${agentName}': ${reason}`, DiscordErrorCode.INVALID_TOKEN, agentName);
|
|
59
|
+
this.name = "InvalidTokenError";
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Error thrown when bot token is not provided
|
|
64
|
+
*/
|
|
65
|
+
export class MissingTokenError extends DiscordConnectorError {
|
|
66
|
+
constructor(agentName, envVar) {
|
|
67
|
+
super(`Missing Discord bot token for agent '${agentName}': environment variable '${envVar}' is not set`, DiscordErrorCode.MISSING_TOKEN, agentName);
|
|
68
|
+
this.name = "MissingTokenError";
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Type guard to check if an error is a DiscordConnectorError
|
|
73
|
+
*/
|
|
74
|
+
export function isDiscordConnectorError(error) {
|
|
75
|
+
return error instanceof DiscordConnectorError;
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,CAAN,IAAY,gBAQX;AARD,WAAY,gBAAgB;IAC1B,mEAA+C,CAAA;IAC/C,mEAA+C,CAAA;IAC/C,2DAAuC,CAAA;IACvC,2DAAuC,CAAA;IACvC,2DAAuC,CAAA;IACvC,2DAAuC,CAAA;IACvC,yDAAqC,CAAA;AACvC,CAAC,EARW,gBAAgB,KAAhB,gBAAgB,QAQ3B;AAED;;;;;GAKG;AACH,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IAC9B,IAAI,CAAmB;IACvB,SAAS,CAAS;IAElC,YACE,OAAe,EACf,IAAsB,EACtB,SAAiB,EACjB,OAA2B;QAE3B,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;QACpC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,sBAAuB,SAAQ,qBAAqB;IAC/D,YAAY,SAAiB,EAAE,OAAe,EAAE,OAA2B;QACzE,KAAK,CACH,wCAAwC,SAAS,MAAM,OAAO,EAAE,EAChE,gBAAgB,CAAC,iBAAiB,EAClC,SAAS,EACT,OAAO,CACR,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;IACvC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,qBAAsB,SAAQ,qBAAqB;IAC9D,YAAY,SAAiB;QAC3B,KAAK,CACH,gCAAgC,SAAS,wBAAwB,EACjE,gBAAgB,CAAC,iBAAiB,EAClC,SAAS,CACV,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;IACtC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,iBAAkB,SAAQ,qBAAqB;IAC1D,YAAY,SAAiB,EAAE,MAAc;QAC3C,KAAK,CACH,wCAAwC,SAAS,MAAM,MAAM,EAAE,EAC/D,gBAAgB,CAAC,aAAa,EAC9B,SAAS,CACV,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IAClC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,iBAAkB,SAAQ,qBAAqB;IAC1D,YAAY,SAAiB,EAAE,MAAc;QAC3C,KAAK,CACH,wCAAwC,SAAS,4BAA4B,MAAM,cAAc,EACjG,gBAAgB,CAAC,aAAa,EAC9B,SAAS,CACV,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IAClC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CACrC,KAAc;IAEd,OAAO,KAAK,YAAY,qBAAqB,CAAC;AAChD,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @herdctl/discord
|
|
3
|
+
*
|
|
4
|
+
* Discord connector for herdctl - Autonomous Agent Fleet Management for Claude Code
|
|
5
|
+
*
|
|
6
|
+
* This package provides:
|
|
7
|
+
* - DiscordConnector class for connecting agents to Discord
|
|
8
|
+
* - Per-agent Discord bot support
|
|
9
|
+
* - Connection lifecycle management
|
|
10
|
+
* - Event-driven architecture for monitoring
|
|
11
|
+
* - SessionManager for per-channel conversation context
|
|
12
|
+
*/
|
|
13
|
+
export declare const VERSION = "0.0.1";
|
|
14
|
+
export { DiscordConnector } from "./discord-connector.js";
|
|
15
|
+
export { DiscordLogger, createLoggerFromConfig, createDefaultDiscordLogger, } from "./logger.js";
|
|
16
|
+
export type { DiscordLogLevel, DiscordLoggerOptions, } from "./logger.js";
|
|
17
|
+
export { SessionManager } from "./session-manager/index.js";
|
|
18
|
+
export type { DiscordConnectorOptions, DiscordConnectorState, DiscordConnectionStatus, DiscordConnectorLogger, IDiscordConnector, DiscordConnectorEventMap, DiscordConnectorEventName, DiscordConnectorEventPayload, } from "./types.js";
|
|
19
|
+
export type { SessionManagerOptions, SessionManagerLogger, ISessionManager, SessionResult, ChannelSession, DiscordSessionState, } from "./session-manager/index.js";
|
|
20
|
+
export { DiscordSessionStateSchema, ChannelSessionSchema, createInitialSessionState, createChannelSession, } from "./session-manager/index.js";
|
|
21
|
+
export { isBotMentioned, shouldProcessMessage, stripBotMention, stripMentions, processMessage, fetchMessageHistory, buildConversationContext, formatContextForPrompt, } from "./mention-handler.js";
|
|
22
|
+
export type { TextBasedChannel, ContextMessage, ContextBuildOptions, ConversationContext, } from "./mention-handler.js";
|
|
23
|
+
export { isDMEnabled, getDMMode, checkDMUserFilter, findChannelConfig, resolveChannelConfig, shouldProcessInMode, DEFAULT_DM_CONTEXT_MESSAGES, DEFAULT_CHANNEL_CONTEXT_MESSAGES, } from "./auto-mode-handler.js";
|
|
24
|
+
export type { DMFilterResult, DMConfig, ResolvedChannelConfig, } from "./auto-mode-handler.js";
|
|
25
|
+
export { DiscordErrorCode, DiscordConnectorError, DiscordConnectionError, AlreadyConnectedError, InvalidTokenError, MissingTokenError, isDiscordConnectorError, } from "./errors.js";
|
|
26
|
+
export { USER_ERROR_MESSAGES, ErrorCategory, classifyError, withRetry, ErrorHandler, safeExecute, safeExecuteWithReply, } from "./error-handler.js";
|
|
27
|
+
export type { UserErrorMessageKey, ClassifiedError, RetryOptions, RetryResult, ErrorHandlerOptions, } from "./error-handler.js";
|
|
28
|
+
export { SessionErrorCode, SessionManagerError, SessionStateReadError, SessionStateWriteError, SessionDirectoryCreateError, isSessionManagerError, } from "./session-manager/index.js";
|
|
29
|
+
export { CommandManager } from "./commands/index.js";
|
|
30
|
+
export { helpCommand, resetCommand, statusCommand } from "./commands/index.js";
|
|
31
|
+
export type { CommandContext, SlashCommand, CommandManagerLogger, CommandManagerOptions, ICommandManager, } from "./commands/index.js";
|
|
32
|
+
export { DISCORD_MAX_MESSAGE_LENGTH, DEFAULT_MESSAGE_DELAY_MS, MIN_CHUNK_SIZE, findSplitPoint, splitMessage, needsSplit, startTypingIndicator, sendSplitMessage, sendWithTyping, truncateMessage, formatCodeBlock, escapeMarkdown, } from "./utils/index.js";
|
|
33
|
+
export type { SendableChannel, MessageSplitOptions, SendSplitOptions, SplitResult, TypingController, } from "./utils/index.js";
|
|
34
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,eAAO,MAAM,OAAO,UAAU,CAAC;AAG/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAG1D,OAAO,EACL,aAAa,EACb,sBAAsB,EACtB,0BAA0B,GAC3B,MAAM,aAAa,CAAC;AAErB,YAAY,EACV,eAAe,EACf,oBAAoB,GACrB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAG5D,YAAY,EACV,uBAAuB,EACvB,qBAAqB,EACrB,uBAAuB,EACvB,sBAAsB,EACtB,iBAAiB,EACjB,wBAAwB,EACxB,yBAAyB,EACzB,4BAA4B,GAC7B,MAAM,YAAY,CAAC;AAGpB,YAAY,EACV,qBAAqB,EACrB,oBAAoB,EACpB,eAAe,EACf,aAAa,EACb,cAAc,EACd,mBAAmB,GACpB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EACL,yBAAyB,EACzB,oBAAoB,EACpB,yBAAyB,EACzB,oBAAoB,GACrB,MAAM,4BAA4B,CAAC;AAGpC,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,eAAe,EACf,aAAa,EACb,cAAc,EACd,mBAAmB,EACnB,wBAAwB,EACxB,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAE9B,YAAY,EACV,gBAAgB,EAChB,cAAc,EACd,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,WAAW,EACX,SAAS,EACT,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,EACnB,2BAA2B,EAC3B,gCAAgC,GACjC,MAAM,wBAAwB,CAAC;AAEhC,YAAY,EACV,cAAc,EACd,QAAQ,EACR,qBAAqB,GACtB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,sBAAsB,EACtB,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,aAAa,EACb,SAAS,EACT,YAAY,EACZ,WAAW,EACX,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAE5B,YAAY,EACV,mBAAmB,EACnB,eAAe,EACf,YAAY,EACZ,WAAW,EACX,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,qBAAqB,EACrB,sBAAsB,EACtB,2BAA2B,EAC3B,qBAAqB,GACtB,MAAM,4BAA4B,CAAC;AAGpC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAE/E,YAAY,EACV,cAAc,EACd,YAAY,EACZ,oBAAoB,EACpB,qBAAqB,EACrB,eAAe,GAChB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,0BAA0B,EAC1B,wBAAwB,EACxB,cAAc,EACd,cAAc,EACd,YAAY,EACZ,UAAU,EACV,oBAAoB,EACpB,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,eAAe,EACf,cAAc,GACf,MAAM,kBAAkB,CAAC;AAE1B,YAAY,EACV,eAAe,EACf,mBAAmB,EACnB,gBAAgB,EAChB,WAAW,EACX,gBAAgB,GACjB,MAAM,kBAAkB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @herdctl/discord
|
|
3
|
+
*
|
|
4
|
+
* Discord connector for herdctl - Autonomous Agent Fleet Management for Claude Code
|
|
5
|
+
*
|
|
6
|
+
* This package provides:
|
|
7
|
+
* - DiscordConnector class for connecting agents to Discord
|
|
8
|
+
* - Per-agent Discord bot support
|
|
9
|
+
* - Connection lifecycle management
|
|
10
|
+
* - Event-driven architecture for monitoring
|
|
11
|
+
* - SessionManager for per-channel conversation context
|
|
12
|
+
*/
|
|
13
|
+
export const VERSION = "0.0.1";
|
|
14
|
+
// Main connector class
|
|
15
|
+
export { DiscordConnector } from "./discord-connector.js";
|
|
16
|
+
// Logger
|
|
17
|
+
export { DiscordLogger, createLoggerFromConfig, createDefaultDiscordLogger, } from "./logger.js";
|
|
18
|
+
// Session manager
|
|
19
|
+
export { SessionManager } from "./session-manager/index.js";
|
|
20
|
+
export { DiscordSessionStateSchema, ChannelSessionSchema, createInitialSessionState, createChannelSession, } from "./session-manager/index.js";
|
|
21
|
+
// Mention handling
|
|
22
|
+
export { isBotMentioned, shouldProcessMessage, stripBotMention, stripMentions, processMessage, fetchMessageHistory, buildConversationContext, formatContextForPrompt, } from "./mention-handler.js";
|
|
23
|
+
// Auto mode handling (DMs and dedicated channels)
|
|
24
|
+
export { isDMEnabled, getDMMode, checkDMUserFilter, findChannelConfig, resolveChannelConfig, shouldProcessInMode, DEFAULT_DM_CONTEXT_MESSAGES, DEFAULT_CHANNEL_CONTEXT_MESSAGES, } from "./auto-mode-handler.js";
|
|
25
|
+
// Errors
|
|
26
|
+
export { DiscordErrorCode, DiscordConnectorError, DiscordConnectionError, AlreadyConnectedError, InvalidTokenError, MissingTokenError, isDiscordConnectorError, } from "./errors.js";
|
|
27
|
+
// Error handling utilities
|
|
28
|
+
export { USER_ERROR_MESSAGES, ErrorCategory, classifyError, withRetry, ErrorHandler, safeExecute, safeExecuteWithReply, } from "./error-handler.js";
|
|
29
|
+
// Session manager errors
|
|
30
|
+
export { SessionErrorCode, SessionManagerError, SessionStateReadError, SessionStateWriteError, SessionDirectoryCreateError, isSessionManagerError, } from "./session-manager/index.js";
|
|
31
|
+
// Commands
|
|
32
|
+
export { CommandManager } from "./commands/index.js";
|
|
33
|
+
export { helpCommand, resetCommand, statusCommand } from "./commands/index.js";
|
|
34
|
+
// Formatting utilities
|
|
35
|
+
export { DISCORD_MAX_MESSAGE_LENGTH, DEFAULT_MESSAGE_DELAY_MS, MIN_CHUNK_SIZE, findSplitPoint, splitMessage, needsSplit, startTypingIndicator, sendSplitMessage, sendWithTyping, truncateMessage, formatCodeBlock, escapeMarkdown, } from "./utils/index.js";
|
|
36
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC;AAE/B,uBAAuB;AACvB,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,SAAS;AACT,OAAO,EACL,aAAa,EACb,sBAAsB,EACtB,0BAA0B,GAC3B,MAAM,aAAa,CAAC;AAOrB,kBAAkB;AAClB,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAwB5D,OAAO,EACL,yBAAyB,EACzB,oBAAoB,EACpB,yBAAyB,EACzB,oBAAoB,GACrB,MAAM,4BAA4B,CAAC;AAEpC,mBAAmB;AACnB,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,eAAe,EACf,aAAa,EACb,cAAc,EACd,mBAAmB,EACnB,wBAAwB,EACxB,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAS9B,kDAAkD;AAClD,OAAO,EACL,WAAW,EACX,SAAS,EACT,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,EACnB,2BAA2B,EAC3B,gCAAgC,GACjC,MAAM,wBAAwB,CAAC;AAQhC,SAAS;AACT,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,sBAAsB,EACtB,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,aAAa,CAAC;AAErB,2BAA2B;AAC3B,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,aAAa,EACb,SAAS,EACT,YAAY,EACZ,WAAW,EACX,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAU5B,yBAAyB;AACzB,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,qBAAqB,EACrB,sBAAsB,EACtB,2BAA2B,EAC3B,qBAAqB,GACtB,MAAM,4BAA4B,CAAC;AAEpC,WAAW;AACX,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAU/E,uBAAuB;AACvB,OAAO,EACL,0BAA0B,EAC1B,wBAAwB,EACxB,cAAc,EACd,cAAc,EACd,YAAY,EACZ,UAAU,EACV,oBAAoB,EACpB,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,eAAe,EACf,cAAc,GACf,MAAM,kBAAkB,CAAC"}
|
package/dist/logger.d.ts
ADDED
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configurable logger for Discord connector operations
|
|
3
|
+
*
|
|
4
|
+
* Implements log level filtering based on configuration:
|
|
5
|
+
* - minimal: Only errors and critical state changes
|
|
6
|
+
* - standard: Connection events, message counts, session operations (default)
|
|
7
|
+
* - verbose: All messages logged with optional content redaction
|
|
8
|
+
*/
|
|
9
|
+
import type { AgentChatDiscord } from "@herdctl/core";
|
|
10
|
+
import type { DiscordConnectorLogger } from "./types.js";
|
|
11
|
+
/**
|
|
12
|
+
* Log level hierarchy for filtering
|
|
13
|
+
* Higher number = more severe = always logged
|
|
14
|
+
*/
|
|
15
|
+
export type DiscordLogLevel = "minimal" | "standard" | "verbose";
|
|
16
|
+
/**
|
|
17
|
+
* Options for configuring the Discord logger
|
|
18
|
+
*/
|
|
19
|
+
export interface DiscordLoggerOptions {
|
|
20
|
+
/**
|
|
21
|
+
* Name of the agent this logger is for
|
|
22
|
+
*/
|
|
23
|
+
agentName: string;
|
|
24
|
+
/**
|
|
25
|
+
* Log level setting from config
|
|
26
|
+
* @default "standard"
|
|
27
|
+
*/
|
|
28
|
+
logLevel?: DiscordLogLevel;
|
|
29
|
+
/**
|
|
30
|
+
* Whether to redact message content in verbose mode
|
|
31
|
+
* @default true
|
|
32
|
+
*/
|
|
33
|
+
redactContent?: boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Custom prefix for log messages
|
|
36
|
+
* @default "[discord:agentName]"
|
|
37
|
+
*/
|
|
38
|
+
prefix?: string;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Configurable logger for Discord connector operations
|
|
42
|
+
*
|
|
43
|
+
* Implements log level filtering based on configuration:
|
|
44
|
+
* - minimal: Only errors and critical state changes (warn/error)
|
|
45
|
+
* - standard: Connection events, message counts, session operations (info/warn/error)
|
|
46
|
+
* - verbose: All messages logged with optional content redaction (debug/info/warn/error)
|
|
47
|
+
*
|
|
48
|
+
* @example
|
|
49
|
+
* ```typescript
|
|
50
|
+
* const logger = new DiscordLogger({
|
|
51
|
+
* agentName: 'my-agent',
|
|
52
|
+
* logLevel: 'standard',
|
|
53
|
+
* redactContent: true,
|
|
54
|
+
* });
|
|
55
|
+
*
|
|
56
|
+
* logger.info('Connected to Discord', { username: 'Bot#1234' });
|
|
57
|
+
* logger.debug('Debug message', { sensitive: 'data' }); // Filtered out in standard mode
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
export declare class DiscordLogger implements DiscordConnectorLogger {
|
|
61
|
+
private readonly agentName;
|
|
62
|
+
private readonly logLevel;
|
|
63
|
+
private readonly redactContent;
|
|
64
|
+
private readonly prefix;
|
|
65
|
+
private readonly levelValue;
|
|
66
|
+
constructor(options: DiscordLoggerOptions);
|
|
67
|
+
/**
|
|
68
|
+
* Check if a log method should output based on current log level
|
|
69
|
+
*/
|
|
70
|
+
private shouldLog;
|
|
71
|
+
/**
|
|
72
|
+
* Process data for logging, applying redaction if needed
|
|
73
|
+
*/
|
|
74
|
+
private processData;
|
|
75
|
+
/**
|
|
76
|
+
* Format and output a log message
|
|
77
|
+
*/
|
|
78
|
+
private log;
|
|
79
|
+
/**
|
|
80
|
+
* Log a debug message (only visible in verbose mode)
|
|
81
|
+
*/
|
|
82
|
+
debug(message: string, data?: Record<string, unknown>): void;
|
|
83
|
+
/**
|
|
84
|
+
* Log an info message (visible in standard and verbose modes)
|
|
85
|
+
*/
|
|
86
|
+
info(message: string, data?: Record<string, unknown>): void;
|
|
87
|
+
/**
|
|
88
|
+
* Log a warning message (always visible)
|
|
89
|
+
*/
|
|
90
|
+
warn(message: string, data?: Record<string, unknown>): void;
|
|
91
|
+
/**
|
|
92
|
+
* Log an error message (always visible)
|
|
93
|
+
*/
|
|
94
|
+
error(message: string, data?: Record<string, unknown>): void;
|
|
95
|
+
/**
|
|
96
|
+
* Get the current log level
|
|
97
|
+
*/
|
|
98
|
+
getLogLevel(): DiscordLogLevel;
|
|
99
|
+
/**
|
|
100
|
+
* Check if redaction is enabled
|
|
101
|
+
*/
|
|
102
|
+
isRedactionEnabled(): boolean;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Create a DiscordLogger from agent Discord configuration
|
|
106
|
+
*
|
|
107
|
+
* @param agentName - Name of the agent
|
|
108
|
+
* @param discordConfig - Discord configuration from agent config
|
|
109
|
+
* @returns Configured DiscordLogger instance
|
|
110
|
+
*/
|
|
111
|
+
export declare function createLoggerFromConfig(agentName: string, discordConfig: AgentChatDiscord): DiscordLogger;
|
|
112
|
+
/**
|
|
113
|
+
* Create a default logger for an agent (standard log level)
|
|
114
|
+
*
|
|
115
|
+
* @param agentName - Name of the agent
|
|
116
|
+
* @returns DiscordLogger with default settings
|
|
117
|
+
*/
|
|
118
|
+
export declare function createDefaultDiscordLogger(agentName: string): DiscordLogger;
|
|
119
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEzD;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;AAqBjE;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,QAAQ,CAAC,EAAE,eAAe,CAAC;IAE3B;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAgDD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,aAAc,YAAW,sBAAsB;IAC1D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkB;IAC3C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAU;IACxC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAExB,OAAO,EAAE,oBAAoB;IAQzC;;OAEG;IACH,OAAO,CAAC,SAAS;IAIjB;;OAEG;IACH,OAAO,CAAC,WAAW;IAQnB;;OAEG;IACH,OAAO,CAAC,GAAG;IAoBX;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI5D;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI3D;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI3D;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI5D;;OAEG;IACH,WAAW,IAAI,eAAe;IAI9B;;OAEG;IACH,kBAAkB,IAAI,OAAO;CAG9B;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,gBAAgB,GAC9B,aAAa,CAMf;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,CAM3E"}
|
package/dist/logger.js
ADDED
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configurable logger for Discord connector operations
|
|
3
|
+
*
|
|
4
|
+
* Implements log level filtering based on configuration:
|
|
5
|
+
* - minimal: Only errors and critical state changes
|
|
6
|
+
* - standard: Connection events, message counts, session operations (default)
|
|
7
|
+
* - verbose: All messages logged with optional content redaction
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Maps log level names to numeric values for comparison
|
|
11
|
+
*/
|
|
12
|
+
const LOG_LEVEL_VALUES = {
|
|
13
|
+
verbose: 0, // Most permissive - logs everything
|
|
14
|
+
standard: 1, // Default - logs info and above
|
|
15
|
+
minimal: 2, // Most restrictive - logs errors only
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Maps method names to their required log levels
|
|
19
|
+
*/
|
|
20
|
+
const METHOD_LEVELS = {
|
|
21
|
+
debug: 0, // Only in verbose
|
|
22
|
+
info: 1, // Standard and above
|
|
23
|
+
warn: 2, // Always logged
|
|
24
|
+
error: 2, // Always logged
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Keys that should be redacted in data objects when redactContent is true
|
|
28
|
+
*/
|
|
29
|
+
const REDACTABLE_KEYS = [
|
|
30
|
+
"content",
|
|
31
|
+
"message",
|
|
32
|
+
"prompt",
|
|
33
|
+
"text",
|
|
34
|
+
"body",
|
|
35
|
+
"token",
|
|
36
|
+
"secret",
|
|
37
|
+
"password",
|
|
38
|
+
];
|
|
39
|
+
/**
|
|
40
|
+
* Redact sensitive content from a data object
|
|
41
|
+
*/
|
|
42
|
+
function redactData(data, keysToRedact = REDACTABLE_KEYS) {
|
|
43
|
+
const result = {};
|
|
44
|
+
for (const [key, value] of Object.entries(data)) {
|
|
45
|
+
if (keysToRedact.includes(key.toLowerCase())) {
|
|
46
|
+
if (typeof value === "string") {
|
|
47
|
+
result[key] = `[REDACTED ${value.length} chars]`;
|
|
48
|
+
}
|
|
49
|
+
else if (Array.isArray(value)) {
|
|
50
|
+
result[key] = `[REDACTED ${value.length} items]`;
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
result[key] = "[REDACTED]";
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
else if (typeof value === "object" &&
|
|
57
|
+
value !== null &&
|
|
58
|
+
!Array.isArray(value)) {
|
|
59
|
+
result[key] = redactData(value, keysToRedact);
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
result[key] = value;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return result;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Configurable logger for Discord connector operations
|
|
69
|
+
*
|
|
70
|
+
* Implements log level filtering based on configuration:
|
|
71
|
+
* - minimal: Only errors and critical state changes (warn/error)
|
|
72
|
+
* - standard: Connection events, message counts, session operations (info/warn/error)
|
|
73
|
+
* - verbose: All messages logged with optional content redaction (debug/info/warn/error)
|
|
74
|
+
*
|
|
75
|
+
* @example
|
|
76
|
+
* ```typescript
|
|
77
|
+
* const logger = new DiscordLogger({
|
|
78
|
+
* agentName: 'my-agent',
|
|
79
|
+
* logLevel: 'standard',
|
|
80
|
+
* redactContent: true,
|
|
81
|
+
* });
|
|
82
|
+
*
|
|
83
|
+
* logger.info('Connected to Discord', { username: 'Bot#1234' });
|
|
84
|
+
* logger.debug('Debug message', { sensitive: 'data' }); // Filtered out in standard mode
|
|
85
|
+
* ```
|
|
86
|
+
*/
|
|
87
|
+
export class DiscordLogger {
|
|
88
|
+
agentName;
|
|
89
|
+
logLevel;
|
|
90
|
+
redactContent;
|
|
91
|
+
prefix;
|
|
92
|
+
levelValue;
|
|
93
|
+
constructor(options) {
|
|
94
|
+
this.agentName = options.agentName;
|
|
95
|
+
this.logLevel = options.logLevel ?? "standard";
|
|
96
|
+
this.redactContent = options.redactContent ?? true;
|
|
97
|
+
this.prefix = options.prefix ?? `[discord:${options.agentName}]`;
|
|
98
|
+
this.levelValue = LOG_LEVEL_VALUES[this.logLevel];
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Check if a log method should output based on current log level
|
|
102
|
+
*/
|
|
103
|
+
shouldLog(methodLevel) {
|
|
104
|
+
return methodLevel >= this.levelValue;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Process data for logging, applying redaction if needed
|
|
108
|
+
*/
|
|
109
|
+
processData(data) {
|
|
110
|
+
if (!data)
|
|
111
|
+
return undefined;
|
|
112
|
+
if (this.redactContent && this.logLevel === "verbose") {
|
|
113
|
+
return redactData(data);
|
|
114
|
+
}
|
|
115
|
+
return data;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Format and output a log message
|
|
119
|
+
*/
|
|
120
|
+
log(level, message, data) {
|
|
121
|
+
const methodLevel = METHOD_LEVELS[level];
|
|
122
|
+
if (!this.shouldLog(methodLevel)) {
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
const processedData = this.processData(data);
|
|
126
|
+
const logFn = console[level];
|
|
127
|
+
if (processedData) {
|
|
128
|
+
logFn(this.prefix, message, processedData);
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
logFn(this.prefix, message);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Log a debug message (only visible in verbose mode)
|
|
136
|
+
*/
|
|
137
|
+
debug(message, data) {
|
|
138
|
+
this.log("debug", message, data);
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Log an info message (visible in standard and verbose modes)
|
|
142
|
+
*/
|
|
143
|
+
info(message, data) {
|
|
144
|
+
this.log("info", message, data);
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Log a warning message (always visible)
|
|
148
|
+
*/
|
|
149
|
+
warn(message, data) {
|
|
150
|
+
this.log("warn", message, data);
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Log an error message (always visible)
|
|
154
|
+
*/
|
|
155
|
+
error(message, data) {
|
|
156
|
+
this.log("error", message, data);
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Get the current log level
|
|
160
|
+
*/
|
|
161
|
+
getLogLevel() {
|
|
162
|
+
return this.logLevel;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Check if redaction is enabled
|
|
166
|
+
*/
|
|
167
|
+
isRedactionEnabled() {
|
|
168
|
+
return this.redactContent;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Create a DiscordLogger from agent Discord configuration
|
|
173
|
+
*
|
|
174
|
+
* @param agentName - Name of the agent
|
|
175
|
+
* @param discordConfig - Discord configuration from agent config
|
|
176
|
+
* @returns Configured DiscordLogger instance
|
|
177
|
+
*/
|
|
178
|
+
export function createLoggerFromConfig(agentName, discordConfig) {
|
|
179
|
+
return new DiscordLogger({
|
|
180
|
+
agentName,
|
|
181
|
+
logLevel: discordConfig.log_level,
|
|
182
|
+
redactContent: true,
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Create a default logger for an agent (standard log level)
|
|
187
|
+
*
|
|
188
|
+
* @param agentName - Name of the agent
|
|
189
|
+
* @returns DiscordLogger with default settings
|
|
190
|
+
*/
|
|
191
|
+
export function createDefaultDiscordLogger(agentName) {
|
|
192
|
+
return new DiscordLogger({
|
|
193
|
+
agentName,
|
|
194
|
+
logLevel: "standard",
|
|
195
|
+
redactContent: true,
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"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"}
|