@ebowwa/daemons 0.5.1 → 0.7.0

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.
Files changed (121) hide show
  1. package/dist/core.d.ts +89 -0
  2. package/dist/core.d.ts.map +1 -0
  3. package/dist/core.js +346 -0
  4. package/dist/core.js.map +1 -0
  5. package/dist/index.d.ts +16 -17
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +25 -125305
  8. package/dist/index.js.map +1 -0
  9. package/dist/types.d.ts +28 -273
  10. package/dist/types.d.ts.map +1 -1
  11. package/dist/types.js +7 -0
  12. package/dist/types.js.map +1 -0
  13. package/package.json +14 -65
  14. package/src/core.ts +476 -0
  15. package/src/index.ts +23 -101
  16. package/src/types.ts +24 -301
  17. package/dist/agent.d.ts +0 -37
  18. package/dist/agent.d.ts.map +0 -1
  19. package/dist/bin/discord-cli.js +0 -124083
  20. package/dist/bin/manager.js +0 -143
  21. package/dist/bin/telegram-cli.js +0 -124079
  22. package/dist/channels/base.d.ts +0 -163
  23. package/dist/channels/base.d.ts.map +0 -1
  24. package/dist/channels/discord.d.ts +0 -61
  25. package/dist/channels/discord.d.ts.map +0 -1
  26. package/dist/channels/index.d.ts +0 -55
  27. package/dist/channels/index.d.ts.map +0 -1
  28. package/dist/channels/telegram.d.ts +0 -113
  29. package/dist/channels/telegram.d.ts.map +0 -1
  30. package/dist/daemon.d.ts +0 -119
  31. package/dist/daemon.d.ts.map +0 -1
  32. package/dist/hooks.d.ts +0 -34
  33. package/dist/hooks.d.ts.map +0 -1
  34. package/dist/memory.d.ts +0 -151
  35. package/dist/memory.d.ts.map +0 -1
  36. package/dist/skills/coding/commit.d.ts +0 -31
  37. package/dist/skills/coding/commit.d.ts.map +0 -1
  38. package/dist/skills/coding/execute-subtask.d.ts +0 -30
  39. package/dist/skills/coding/execute-subtask.d.ts.map +0 -1
  40. package/dist/skills/coding/fix-issues.d.ts +0 -29
  41. package/dist/skills/coding/fix-issues.d.ts.map +0 -1
  42. package/dist/skills/coding/index.d.ts +0 -21
  43. package/dist/skills/coding/index.d.ts.map +0 -1
  44. package/dist/skills/coding/plan-task.d.ts +0 -38
  45. package/dist/skills/coding/plan-task.d.ts.map +0 -1
  46. package/dist/skills/coding/quality-check.d.ts +0 -35
  47. package/dist/skills/coding/quality-check.d.ts.map +0 -1
  48. package/dist/skills/index.d.ts +0 -38
  49. package/dist/skills/index.d.ts.map +0 -1
  50. package/dist/skills/registry.d.ts +0 -95
  51. package/dist/skills/registry.d.ts.map +0 -1
  52. package/dist/skills/shared/index.d.ts +0 -16
  53. package/dist/skills/shared/index.d.ts.map +0 -1
  54. package/dist/skills/shared/reflect.d.ts +0 -42
  55. package/dist/skills/shared/reflect.d.ts.map +0 -1
  56. package/dist/skills/shared/review.d.ts +0 -42
  57. package/dist/skills/shared/review.d.ts.map +0 -1
  58. package/dist/skills/shared/trajectory.d.ts +0 -80
  59. package/dist/skills/shared/trajectory.d.ts.map +0 -1
  60. package/dist/skills/trading/analyze-market.d.ts +0 -43
  61. package/dist/skills/trading/analyze-market.d.ts.map +0 -1
  62. package/dist/skills/trading/check-risk.d.ts +0 -33
  63. package/dist/skills/trading/check-risk.d.ts.map +0 -1
  64. package/dist/skills/trading/execute-trade.d.ts +0 -38
  65. package/dist/skills/trading/execute-trade.d.ts.map +0 -1
  66. package/dist/skills/trading/generate-signal.d.ts +0 -57
  67. package/dist/skills/trading/generate-signal.d.ts.map +0 -1
  68. package/dist/skills/trading/index.d.ts +0 -21
  69. package/dist/skills/trading/index.d.ts.map +0 -1
  70. package/dist/skills/trading/monitor-position.d.ts +0 -37
  71. package/dist/skills/trading/monitor-position.d.ts.map +0 -1
  72. package/dist/skills/types.d.ts +0 -173
  73. package/dist/skills/types.d.ts.map +0 -1
  74. package/dist/skills/workflows.d.ts +0 -36
  75. package/dist/skills/workflows.d.ts.map +0 -1
  76. package/dist/state.d.ts +0 -31
  77. package/dist/state.d.ts.map +0 -1
  78. package/dist/tools.d.ts +0 -42
  79. package/dist/tools.d.ts.map +0 -1
  80. package/dist/workflow.d.ts +0 -182
  81. package/dist/workflow.d.ts.map +0 -1
  82. package/dist/workflows/coding.d.ts +0 -79
  83. package/dist/workflows/coding.d.ts.map +0 -1
  84. package/dist/workflows/index.d.ts +0 -24
  85. package/dist/workflows/index.d.ts.map +0 -1
  86. package/dist/workflows/trading.d.ts +0 -72
  87. package/dist/workflows/trading.d.ts.map +0 -1
  88. package/src/agent.ts +0 -111
  89. package/src/channels/base.ts +0 -574
  90. package/src/channels/discord.ts +0 -306
  91. package/src/channels/index.ts +0 -169
  92. package/src/channels/telegram.ts +0 -316
  93. package/src/daemon.ts +0 -534
  94. package/src/hooks.ts +0 -97
  95. package/src/memory.ts +0 -369
  96. package/src/skills/coding/commit.ts +0 -202
  97. package/src/skills/coding/execute-subtask.ts +0 -136
  98. package/src/skills/coding/fix-issues.ts +0 -126
  99. package/src/skills/coding/index.ts +0 -26
  100. package/src/skills/coding/plan-task.ts +0 -158
  101. package/src/skills/coding/quality-check.ts +0 -155
  102. package/src/skills/index.ts +0 -65
  103. package/src/skills/registry.ts +0 -380
  104. package/src/skills/shared/index.ts +0 -21
  105. package/src/skills/shared/reflect.ts +0 -156
  106. package/src/skills/shared/review.ts +0 -201
  107. package/src/skills/shared/trajectory.ts +0 -326
  108. package/src/skills/trading/analyze-market.ts +0 -144
  109. package/src/skills/trading/check-risk.ts +0 -176
  110. package/src/skills/trading/execute-trade.ts +0 -185
  111. package/src/skills/trading/generate-signal.ts +0 -160
  112. package/src/skills/trading/index.ts +0 -26
  113. package/src/skills/trading/monitor-position.ts +0 -179
  114. package/src/skills/types.ts +0 -235
  115. package/src/skills/workflows.ts +0 -340
  116. package/src/state.ts +0 -77
  117. package/src/tools.ts +0 -134
  118. package/src/workflow.ts +0 -341
  119. package/src/workflows/coding.ts +0 -580
  120. package/src/workflows/index.ts +0 -61
  121. package/src/workflows/trading.ts +0 -608
package/dist/core.d.ts ADDED
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Daemon Core - Generic Daemon Primitive
3
+ *
4
+ * Base class for all daemons. Provides:
5
+ * - Lifecycle management (start/stop)
6
+ * - Signal handling (SIGINT, SIGTERM, SIGHUP)
7
+ * - Channel registration and routing
8
+ * - HTTP health/status API
9
+ * - State persistence
10
+ * - Hook system
11
+ *
12
+ * @module @ebowwa/daemons/core
13
+ */
14
+ import type { Channel, ChannelMessage, HealthStatus, DaemonStatus } from "./types.js";
15
+ export interface DaemonCoreConfig {
16
+ /** Unique daemon identifier */
17
+ id: string;
18
+ /** Human-readable name */
19
+ name: string;
20
+ /** HTTP API config */
21
+ api?: {
22
+ port?: number;
23
+ host?: string;
24
+ enabled?: boolean;
25
+ };
26
+ /** State persistence */
27
+ state?: {
28
+ path?: string;
29
+ autoSave?: boolean;
30
+ saveInterval?: number;
31
+ };
32
+ /** Graceful shutdown timeout (ms) */
33
+ shutdownTimeout?: number;
34
+ }
35
+ export interface DaemonCoreState {
36
+ status: DaemonStatus;
37
+ startedAt: string | null;
38
+ stoppedAt: string | null;
39
+ error: string | null;
40
+ metadata: Record<string, unknown>;
41
+ }
42
+ export type CoreHookName = "onStart" | "onStop" | "onError" | "onChannelRegister" | "onChannelStart" | "onChannelStop" | "onMessage" | "onHealthCheck";
43
+ export type CoreHookCallback<P = unknown, R = void> = (payload: P) => Promise<R> | R;
44
+ export interface DaemonPlugin {
45
+ id: string;
46
+ name: string;
47
+ init(daemon: DaemonCore): Promise<void>;
48
+ destroy?(): Promise<void>;
49
+ }
50
+ export declare class DaemonCore {
51
+ protected config: DaemonCoreConfig;
52
+ protected state: DaemonCoreState;
53
+ protected channels: Map<string, Channel>;
54
+ private hooks;
55
+ private plugins;
56
+ private messageHandler;
57
+ private httpServer;
58
+ private stateSaveInterval;
59
+ protected shuttingDown: boolean;
60
+ constructor(config: DaemonCoreConfig);
61
+ start(): Promise<void>;
62
+ stop(): Promise<void>;
63
+ restart(): Promise<void>;
64
+ getStatus(): DaemonStatus;
65
+ getState(): Readonly<DaemonCoreState>;
66
+ getHealth(): Promise<HealthStatus>;
67
+ registerChannel(channel: Channel): void;
68
+ getChannel(id: string): Channel | undefined;
69
+ getChannels(): Channel[];
70
+ private startChannel;
71
+ private stopAllChannels;
72
+ private handleChannelMessage;
73
+ onMessage(handler: (msg: ChannelMessage) => Promise<void>): void;
74
+ registerHook(name: CoreHookName, callback: CoreHookCallback): void;
75
+ onStart(cb: CoreHookCallback): void;
76
+ onStop(cb: CoreHookCallback): void;
77
+ onError(cb: CoreHookCallback): void;
78
+ onHealthCheck(cb: CoreHookCallback): void;
79
+ protected executeHooks(name: CoreHookName, payload: unknown): Promise<unknown[]>;
80
+ use(plugin: DaemonPlugin): Promise<void>;
81
+ updateState(updates: Partial<DaemonCoreState["metadata"]>): void;
82
+ private loadState;
83
+ private saveState;
84
+ private startHTTP;
85
+ private setupSignalHandlers;
86
+ protected log(message: string): void;
87
+ }
88
+ export default DaemonCore;
89
+ //# sourceMappingURL=core.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"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"}
package/dist/core.js ADDED
@@ -0,0 +1,346 @@
1
+ /**
2
+ * Daemon Core - Generic Daemon Primitive
3
+ *
4
+ * Base class for all daemons. Provides:
5
+ * - Lifecycle management (start/stop)
6
+ * - Signal handling (SIGINT, SIGTERM, SIGHUP)
7
+ * - Channel registration and routing
8
+ * - HTTP health/status API
9
+ * - State persistence
10
+ * - Hook system
11
+ *
12
+ * @module @ebowwa/daemons/core
13
+ */
14
+ import { promises as fs } from "fs";
15
+ // ============================================================
16
+ // Daemon Core Class
17
+ // ============================================================
18
+ const DEFAULT_STATE_PATH = ".daemon-state.json";
19
+ const DEFAULT_SHUTDOWN_TIMEOUT = 10000;
20
+ export class DaemonCore {
21
+ config;
22
+ state;
23
+ channels = new Map();
24
+ hooks = new Map();
25
+ plugins = new Map();
26
+ messageHandler = null;
27
+ httpServer = null;
28
+ stateSaveInterval = null;
29
+ shuttingDown = false;
30
+ constructor(config) {
31
+ this.config = {
32
+ ...config,
33
+ api: config.api ?? { enabled: false },
34
+ state: config.state ?? { autoSave: false },
35
+ shutdownTimeout: config.shutdownTimeout ?? DEFAULT_SHUTDOWN_TIMEOUT,
36
+ };
37
+ this.state = {
38
+ status: "stopped",
39
+ startedAt: null,
40
+ stoppedAt: null,
41
+ error: null,
42
+ metadata: {},
43
+ };
44
+ this.setupSignalHandlers();
45
+ }
46
+ // ============================================================
47
+ // Lifecycle
48
+ // ============================================================
49
+ async start() {
50
+ if (this.state.status === "running") {
51
+ throw new Error("Daemon already running");
52
+ }
53
+ this.state.status = "starting";
54
+ this.log("Starting...");
55
+ try {
56
+ await this.loadState();
57
+ await this.executeHooks("onStart", this.state);
58
+ for (const [id, channel] of this.channels) {
59
+ await this.startChannel(id, channel);
60
+ }
61
+ if (this.config.api?.enabled !== false && this.config.api?.port) {
62
+ this.startHTTP();
63
+ }
64
+ if (this.config.state?.autoSave && this.config.state.saveInterval) {
65
+ this.stateSaveInterval = setInterval(() => this.saveState(), this.config.state.saveInterval);
66
+ }
67
+ this.state.status = "running";
68
+ this.state.startedAt = new Date().toISOString();
69
+ this.state.error = null;
70
+ this.log("Running");
71
+ }
72
+ catch (error) {
73
+ this.state.status = "error";
74
+ this.state.error = error instanceof Error ? error.message : String(error);
75
+ await this.executeHooks("onError", error);
76
+ throw error;
77
+ }
78
+ }
79
+ async stop() {
80
+ if (this.state.status !== "running")
81
+ return;
82
+ if (this.shuttingDown)
83
+ return;
84
+ this.shuttingDown = true;
85
+ this.state.status = "stopping";
86
+ this.log("Stopping...");
87
+ const timeout = this.config.shutdownTimeout;
88
+ try {
89
+ if (this.stateSaveInterval) {
90
+ clearInterval(this.stateSaveInterval);
91
+ this.stateSaveInterval = null;
92
+ }
93
+ await Promise.race([
94
+ this.stopAllChannels(),
95
+ new Promise((_, reject) => setTimeout(() => reject(new Error("Channel stop timeout")), timeout / 2)),
96
+ ]);
97
+ if (this.httpServer) {
98
+ this.httpServer.stop();
99
+ this.httpServer = null;
100
+ }
101
+ await this.executeHooks("onStop", this.state);
102
+ for (const plugin of this.plugins.values()) {
103
+ await plugin.destroy?.();
104
+ }
105
+ await this.saveState();
106
+ this.state.status = "stopped";
107
+ this.state.stoppedAt = new Date().toISOString();
108
+ this.log("Stopped");
109
+ }
110
+ catch (error) {
111
+ this.state.status = "error";
112
+ this.state.error = error instanceof Error ? error.message : String(error);
113
+ this.log(`Stop error: ${error}`);
114
+ }
115
+ finally {
116
+ this.shuttingDown = false;
117
+ }
118
+ }
119
+ async restart() {
120
+ await this.stop();
121
+ await this.start();
122
+ }
123
+ // ============================================================
124
+ // Status & Health
125
+ // ============================================================
126
+ getStatus() {
127
+ return this.state.status;
128
+ }
129
+ getState() {
130
+ return { ...this.state };
131
+ }
132
+ async getHealth() {
133
+ const channelStatus = {};
134
+ for (const [id, channel] of this.channels) {
135
+ channelStatus[id] = { running: channel.isRunning() };
136
+ }
137
+ const hookResults = await this.executeHooks("onHealthCheck", null);
138
+ const checks = {};
139
+ hookResults.forEach((result, i) => {
140
+ if (result && typeof result === "object" && "passed" in result) {
141
+ checks[`check-${i}`] = result;
142
+ }
143
+ });
144
+ const allChannelsRunning = Object.values(channelStatus).every(c => c.running);
145
+ const allChecksPassed = Object.values(checks).every(c => c.passed);
146
+ let status;
147
+ if (!allChannelsRunning)
148
+ status = "unhealthy";
149
+ else if (!allChecksPassed)
150
+ status = "degraded";
151
+ else
152
+ status = "healthy";
153
+ return {
154
+ status,
155
+ uptime: this.state.startedAt ? Date.now() - new Date(this.state.startedAt).getTime() : 0,
156
+ channels: channelStatus,
157
+ checks,
158
+ };
159
+ }
160
+ // ============================================================
161
+ // Channels
162
+ // ============================================================
163
+ registerChannel(channel) {
164
+ if (this.channels.has(channel.id)) {
165
+ throw new Error(`Channel already registered: ${channel.id}`);
166
+ }
167
+ this.channels.set(channel.id, channel);
168
+ channel.onMessage((msg) => this.handleChannelMessage(channel.id, msg));
169
+ this.executeHooks("onChannelRegister", channel);
170
+ this.log(`Channel registered: ${channel.id}`);
171
+ }
172
+ getChannel(id) {
173
+ return this.channels.get(id);
174
+ }
175
+ getChannels() {
176
+ return Array.from(this.channels.values());
177
+ }
178
+ async startChannel(id, channel) {
179
+ await channel.start();
180
+ await this.executeHooks("onChannelStart", { id, channel });
181
+ this.log(`Channel started: ${id}`);
182
+ }
183
+ async stopAllChannels() {
184
+ const stops = Array.from(this.channels.entries()).map(async ([id, channel]) => {
185
+ try {
186
+ await channel.stop();
187
+ await this.executeHooks("onChannelStop", { id, channel });
188
+ }
189
+ catch (error) {
190
+ this.log(`Channel stop failed: ${id}`);
191
+ }
192
+ });
193
+ await Promise.allSettled(stops);
194
+ }
195
+ async handleChannelMessage(channelId, msg) {
196
+ const message = msg;
197
+ await this.executeHooks("onMessage", { channelId, message });
198
+ if (this.messageHandler) {
199
+ try {
200
+ await this.messageHandler(message);
201
+ }
202
+ catch (error) {
203
+ this.log(`Message handler error: ${error}`);
204
+ }
205
+ }
206
+ }
207
+ // ============================================================
208
+ // Message Handler
209
+ // ============================================================
210
+ onMessage(handler) {
211
+ this.messageHandler = handler;
212
+ }
213
+ // ============================================================
214
+ // Hooks
215
+ // ============================================================
216
+ registerHook(name, callback) {
217
+ if (!this.hooks.has(name))
218
+ this.hooks.set(name, new Set());
219
+ this.hooks.get(name).add(callback);
220
+ }
221
+ onStart(cb) { this.registerHook("onStart", cb); }
222
+ onStop(cb) { this.registerHook("onStop", cb); }
223
+ onError(cb) { this.registerHook("onError", cb); }
224
+ onHealthCheck(cb) { this.registerHook("onHealthCheck", cb); }
225
+ async executeHooks(name, payload) {
226
+ const callbacks = this.hooks.get(name);
227
+ if (!callbacks)
228
+ return [];
229
+ const results = [];
230
+ for (const cb of callbacks) {
231
+ try {
232
+ results.push(await cb(payload));
233
+ }
234
+ catch (error) {
235
+ this.log(`Hook ${name} error: ${error}`);
236
+ }
237
+ }
238
+ return results;
239
+ }
240
+ // ============================================================
241
+ // Plugins
242
+ // ============================================================
243
+ async use(plugin) {
244
+ if (this.plugins.has(plugin.id)) {
245
+ throw new Error(`Plugin already registered: ${plugin.id}`);
246
+ }
247
+ await plugin.init(this);
248
+ this.plugins.set(plugin.id, plugin);
249
+ this.log(`Plugin loaded: ${plugin.name}`);
250
+ }
251
+ // ============================================================
252
+ // State Persistence
253
+ // ============================================================
254
+ updateState(updates) {
255
+ this.state.metadata = { ...this.state.metadata, ...updates };
256
+ }
257
+ async loadState() {
258
+ const path = this.config.state?.path ?? DEFAULT_STATE_PATH;
259
+ try {
260
+ const data = await fs.readFile(path, "utf-8");
261
+ const saved = JSON.parse(data);
262
+ this.state.metadata = saved.metadata ?? {};
263
+ }
264
+ catch {
265
+ // No saved state
266
+ }
267
+ }
268
+ async saveState() {
269
+ const path = this.config.state?.path ?? DEFAULT_STATE_PATH;
270
+ try {
271
+ await fs.writeFile(path, JSON.stringify({
272
+ status: this.state.status,
273
+ metadata: this.state.metadata,
274
+ savedAt: new Date().toISOString(),
275
+ }, null, 2));
276
+ }
277
+ catch (error) {
278
+ this.log(`State save failed: ${error}`);
279
+ }
280
+ }
281
+ // ============================================================
282
+ // HTTP API
283
+ // ============================================================
284
+ startHTTP() {
285
+ const port = this.config.api?.port ?? 8911;
286
+ const hostname = this.config.api?.host ?? "0.0.0.0";
287
+ this.httpServer = Bun.serve({
288
+ port,
289
+ hostname,
290
+ fetch: async (req) => {
291
+ const url = new URL(req.url);
292
+ const path = url.pathname;
293
+ const corsHeaders = {
294
+ "Access-Control-Allow-Origin": "*",
295
+ "Access-Control-Allow-Methods": "GET, OPTIONS",
296
+ "Access-Control-Allow-Headers": "Content-Type",
297
+ };
298
+ if (req.method === "OPTIONS") {
299
+ return new Response(null, { headers: corsHeaders });
300
+ }
301
+ if (path === "/health") {
302
+ const health = await this.getHealth();
303
+ return Response.json(health, { headers: corsHeaders });
304
+ }
305
+ if (path === "/api/status" || path === "/status") {
306
+ return Response.json({
307
+ id: this.config.id,
308
+ name: this.config.name,
309
+ status: this.state.status,
310
+ startedAt: this.state.startedAt,
311
+ channels: Object.fromEntries(Array.from(this.channels.entries()).map(([id, ch]) => [id, ch.isRunning()])),
312
+ }, { headers: corsHeaders });
313
+ }
314
+ if (path === "/api/channels") {
315
+ return Response.json(this.getChannels().map(ch => ({ id: ch.id, type: ch.type, running: ch.isRunning() })), { headers: corsHeaders });
316
+ }
317
+ return Response.json({ error: "Not found" }, { status: 404, headers: corsHeaders });
318
+ },
319
+ });
320
+ this.log(`API: http://${hostname}:${port}`);
321
+ }
322
+ // ============================================================
323
+ // Signal Handlers
324
+ // ============================================================
325
+ setupSignalHandlers() {
326
+ const handleSignal = async (signal) => {
327
+ this.log(`Received ${signal}`);
328
+ await this.stop();
329
+ process.exit(0);
330
+ };
331
+ process.on("SIGINT", () => handleSignal("SIGINT"));
332
+ process.on("SIGTERM", () => handleSignal("SIGTERM"));
333
+ process.on("SIGHUP", async () => {
334
+ this.log("Received SIGHUP - saving state");
335
+ await this.saveState();
336
+ });
337
+ }
338
+ // ============================================================
339
+ // Logging
340
+ // ============================================================
341
+ log(message) {
342
+ console.log(`[${this.config.name}] ${message}`);
343
+ }
344
+ }
345
+ export default DaemonCore;
346
+ //# sourceMappingURL=core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,24 +1,23 @@
1
1
  /**
2
- * Daemons - Autonomous Agent Daemon Framework
2
+ * @ebowwa/daemons
3
3
  *
4
- * A daemon framework for autonomous AI agents.
5
- * Implements SLAM pattern (State Loop Action Memory).
6
- * Supports hooks, tools via MCP, multi-agent coordination, and communication channels.
4
+ * Framework for building daemons.
5
+ * Provides DaemonCore primitive with lifecycle, signals, channels, HTTP API, state persistence.
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * import { DaemonCore } from "@ebowwa/daemons";
10
+ *
11
+ * class MyDaemon extends DaemonCore {
12
+ * async start() {
13
+ * // Register channels, set up handlers
14
+ * await super.start();
15
+ * }
16
+ * }
17
+ * ```
7
18
  *
8
19
  * @module @ebowwa/daemons
9
20
  */
10
- export { GLMDaemon, type GLMDaemonConfigWithWorkflow } from "./daemon.js";
11
- export { GLMAgent } from "./agent.js";
12
- export { HookSystem } from "./hooks.js";
13
- export { ToolBridge } from "./tools.js";
14
- export { StateManager } from "./state.js";
15
- export { BaseWorkflow, WorkflowRegistry, workflowRegistry, initializeWorkflows, getWorkflow, getDefaultWorkflow, CodingWorkflow, codingWorkflow, CODING_PHASES, CODING_TRANSITIONS, CODING_WORKFLOW_CONFIG, TradingWorkflow, tradingWorkflow, TRADING_PHASES, TRADING_TRANSITIONS, TRADING_WORKFLOW_CONFIG, type GLMWorkflowPhase, type GLMWorkflowContext, type GLMWorkflowPhaseResult, type GLMWorkflowTransition, type GLMWorkflowConfig, type GLMWorkflowExecutor, type CodingPhase, type TradingPhase, } from "./workflows/index.js";
16
- export { BUILTIN_TOOLS, getBuiltinTool, getBuiltinToolNames, toGLMFormat, executeBuiltinTool, ToolExecutor, type ToolDefinition, type ToolCall, type ToolExecutorOptions, type ToolExecutionResult, } from "@ebowwa/ai/tools";
17
- export { ConversationMemory, NumericConversationMemory, StringConversationMemory, type ConversationMessage, type ConversationMemoryConfig, } from "./memory.js";
18
- export { BaseChannel, TelegramChannel, DiscordChannel, ChannelRegistry, type BaseChannelConfig, type TelegramChannelConfig, type DiscordChannelConfig, type MessageContext, type RouteResult, type MessageClassification, } from "./channels/index.js";
21
+ export { DaemonCore, type DaemonCoreConfig, type DaemonCoreState, type CoreHookName, type CoreHookCallback, type DaemonPlugin, } from "./core.js";
19
22
  export * from "./types.js";
20
- import { GLMDaemon } from "./daemon.js";
21
- import type { GLMDaemonConfig } from "./types.js";
22
- export declare function createGLMDaemon(config: GLMDaemonConfig): Promise<GLMDaemon>;
23
- export declare function startGLMDaemon(config: GLMDaemonConfig, prompt: string): Promise<string>;
24
23
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,SAAS,EAAE,KAAK,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAG1E,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGtC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG1C,OAAO,EAEL,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,EAEhB,mBAAmB,EACnB,WAAW,EACX,kBAAkB,EAElB,cAAc,EACd,cAAc,EACd,aAAa,EACb,kBAAkB,EAClB,sBAAsB,EACtB,eAAe,EACf,eAAe,EACf,cAAc,EACd,mBAAmB,EACnB,uBAAuB,EAEvB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,WAAW,EAChB,KAAK,YAAY,GAClB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,aAAa,EACb,cAAc,EACd,mBAAmB,EACnB,WAAW,EACX,kBAAkB,EAClB,YAAY,EACZ,KAAK,cAAc,EACnB,KAAK,QAAQ,EACb,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,GACzB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,kBAAkB,EAClB,yBAAyB,EACzB,wBAAwB,EACxB,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,GAC9B,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,WAAW,EACX,eAAe,EACf,cAAc,EACd,eAAe,EACf,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EACzB,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,qBAAqB,GAC3B,MAAM,qBAAqB,CAAC;AAG7B,cAAc,YAAY,CAAC;AAG3B,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,wBAAsB,eAAe,CACnC,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,SAAS,CAAC,CAGpB;AAED,wBAAsB,cAAc,CAClC,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,CAGjB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,EACL,UAAU,EACV,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,YAAY,GAClB,MAAM,WAAW,CAAC;AAGnB,cAAc,YAAY,CAAC"}