@ebowwa/glm-daemon 0.1.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 (50) hide show
  1. package/README.md +264 -0
  2. package/dist/agent.d.ts +37 -0
  3. package/dist/agent.d.ts.map +1 -0
  4. package/dist/agent.js +97 -0
  5. package/dist/agent.js.map +1 -0
  6. package/dist/daemon.d.ts +91 -0
  7. package/dist/daemon.d.ts.map +1 -0
  8. package/dist/daemon.js +449 -0
  9. package/dist/daemon.js.map +1 -0
  10. package/dist/hooks.d.ts +34 -0
  11. package/dist/hooks.d.ts.map +1 -0
  12. package/dist/hooks.js +82 -0
  13. package/dist/hooks.js.map +1 -0
  14. package/dist/index.d.ts +21 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +31 -0
  17. package/dist/index.js.map +1 -0
  18. package/dist/state.d.ts +31 -0
  19. package/dist/state.d.ts.map +1 -0
  20. package/dist/state.js +67 -0
  21. package/dist/state.js.map +1 -0
  22. package/dist/tools.d.ts +42 -0
  23. package/dist/tools.d.ts.map +1 -0
  24. package/dist/tools.js +110 -0
  25. package/dist/tools.js.map +1 -0
  26. package/dist/types.d.ts +222 -0
  27. package/dist/types.d.ts.map +1 -0
  28. package/dist/types.js +19 -0
  29. package/dist/types.js.map +1 -0
  30. package/dist/worktree.d.ts +42 -0
  31. package/dist/worktree.d.ts.map +1 -0
  32. package/dist/worktree.js +86 -0
  33. package/dist/worktree.js.map +1 -0
  34. package/package.json +70 -0
  35. package/src/agent.js +166 -0
  36. package/src/agent.ts +110 -0
  37. package/src/daemon.js +591 -0
  38. package/src/daemon.ts +529 -0
  39. package/src/hooks.js +145 -0
  40. package/src/hooks.ts +94 -0
  41. package/src/index.js +105 -0
  42. package/src/index.ts +43 -0
  43. package/src/state.js +168 -0
  44. package/src/state.ts +77 -0
  45. package/src/tools.js +192 -0
  46. package/src/tools.ts +134 -0
  47. package/src/types.js +21 -0
  48. package/src/types.ts +249 -0
  49. package/src/worktree.js +195 -0
  50. package/src/worktree.ts +122 -0
package/dist/daemon.js ADDED
@@ -0,0 +1,449 @@
1
+ /**
2
+ * GLM Daemon - Core Daemon
3
+ *
4
+ * Main orchestrator for autonomous GLM 4.7 agents.
5
+ * Implements SLAM pattern: State → Loop → Action → Memory
6
+ */
7
+ import { join } from "path";
8
+ import { GLMAgent } from "./agent.js";
9
+ import { HookSystem } from "./hooks.js";
10
+ import { ToolBridge } from "./tools.js";
11
+ import { StateManager } from "./state.js";
12
+ import { WorktreeManager } from "./worktree.js";
13
+ import { Team } from "@ebowwa/teammates";
14
+ import { GLMClient } from "@ebowwa/ai/client";
15
+ const STATE_FILE = ".glm-daemon.json";
16
+ const SETTINGS_FILE = ".claude/settings.local.json";
17
+ export class GLMDaemon {
18
+ config;
19
+ state;
20
+ statePath;
21
+ agent;
22
+ hooks;
23
+ tools;
24
+ stateManager;
25
+ worktreeManager;
26
+ team = null;
27
+ subagents = new Map();
28
+ running = false;
29
+ client;
30
+ constructor(config) {
31
+ this.config = config;
32
+ this.statePath = join(config.cwd, STATE_FILE);
33
+ this.client = new GLMClient();
34
+ // Initialize state
35
+ this.state = this.initializeState();
36
+ // Initialize components
37
+ this.hooks = new HookSystem(config.hooks || {});
38
+ this.tools = new ToolBridge(config.tools || {});
39
+ this.stateManager = new StateManager(this.statePath);
40
+ this.worktreeManager = new WorktreeManager(config);
41
+ // Initialize main agent
42
+ this.agent = new GLMAgent({
43
+ agentId: "glm-daemon",
44
+ name: "GLM Daemon",
45
+ prompt: this.buildSystemPrompt(),
46
+ model: config.model,
47
+ tools: this.tools.getAvailableTools(),
48
+ });
49
+ }
50
+ /**
51
+ * Initialize daemon state
52
+ */
53
+ initializeState() {
54
+ const now = new Date().toISOString();
55
+ return {
56
+ prompt: "", // Will be set when starting
57
+ promise: this.config.completionPromise || "TASK_COMPLETE",
58
+ iteration: 0,
59
+ maxIterations: this.config.maxIterations || 0,
60
+ startTime: now,
61
+ lastUpdate: now,
62
+ tokens: {
63
+ totalInput: 0,
64
+ totalOutput: 0,
65
+ byIteration: [],
66
+ },
67
+ filesChanged: [],
68
+ workMemory: {
69
+ completedFiles: [],
70
+ fileChecksums: {},
71
+ },
72
+ slam: {
73
+ enabled: true,
74
+ phase: "planning",
75
+ state: {
76
+ currentTask: "",
77
+ beliefs: {},
78
+ goals: [this.config.completionPromise || "TASK_COMPLETE"],
79
+ },
80
+ subtasks: [],
81
+ currentSubtask: null,
82
+ completedSubtasks: [],
83
+ memory: {
84
+ actionsTaken: [],
85
+ outcomes: {},
86
+ patterns: {},
87
+ },
88
+ },
89
+ git: {
90
+ enabled: this.config.autoCommit || this.config.autoPR || false,
91
+ autoCommit: this.config.autoCommit || false,
92
+ autoPR: this.config.autoPR || false,
93
+ baseBranch: this.config.baseBranch || "main",
94
+ useWorktree: this.config.enableWorktree || false,
95
+ branchName: "",
96
+ branchCreated: false,
97
+ currentCommit: "",
98
+ },
99
+ };
100
+ }
101
+ /**
102
+ * Build system prompt from config and state
103
+ */
104
+ buildSystemPrompt() {
105
+ return `You are an autonomous AI agent powered by GLM 4.7.
106
+
107
+ Your task: ${this.state.prompt}
108
+
109
+ You work in SLAM phases:
110
+ - Planning: Break down the task into subtasks
111
+ - Executing: Work on the current subtask
112
+ - Paranoid: Review your work for bugs and issues
113
+ - Reviewing: Check quality of completed work
114
+ - Fixing: Address any issues found
115
+ - Committing: Commit your changes
116
+ - Complete: Task is finished
117
+
118
+ Use tools when available. Be thorough but efficient.
119
+
120
+ Current phase: ${this.state.slam.phase}
121
+ Iteration: ${this.state.iteration}
122
+ `;
123
+ }
124
+ /**
125
+ * Start the daemon with a prompt
126
+ */
127
+ async start(prompt) {
128
+ if (this.running) {
129
+ throw new Error("Daemon already running");
130
+ }
131
+ this.state.prompt = prompt;
132
+ this.state.slam.state.currentTask = prompt;
133
+ this.running = true;
134
+ // Setup worktree if enabled
135
+ if (this.config.enableWorktree) {
136
+ const worktreePath = await this.worktreeManager.createWorktree();
137
+ this.state.git.branchName = await this.worktreeManager.createBranch();
138
+ this.state.git.branchCreated = true;
139
+ }
140
+ // Initialize team for multi-agent coordination
141
+ this.team = await Team.create({
142
+ name: this.config.teamName,
143
+ description: `GLM daemon for: ${prompt.substring(0, 50)}...`,
144
+ });
145
+ // Run session start hook
146
+ await this.hooks.execute("onSessionStart", this.state);
147
+ // Save initial state
148
+ await this.stateManager.save(this.state);
149
+ // Start main loop
150
+ this.runLoop().catch((error) => {
151
+ console.error("[GLMDaemon] Loop error:", error);
152
+ this.running = false;
153
+ });
154
+ return this.config.teamName;
155
+ }
156
+ /**
157
+ * Main daemon loop (SLAM pattern)
158
+ */
159
+ async runLoop() {
160
+ while (this.running) {
161
+ // Check completion condition
162
+ if (this.checkCompletion()) {
163
+ await this.complete();
164
+ break;
165
+ }
166
+ // Check iteration limit
167
+ if (this.state.maxIterations > 0 &&
168
+ this.state.iteration >= this.state.maxIterations) {
169
+ console.log(`[GLMDaemon] Max iterations reached: ${this.state.maxIterations}`);
170
+ await this.stop();
171
+ break;
172
+ }
173
+ // Run iteration start hook
174
+ await this.hooks.execute("onIterationStart", this.state.iteration);
175
+ // Execute current SLAM phase
176
+ await this.executePhase();
177
+ // Update state
178
+ this.state.iteration++;
179
+ this.state.lastUpdate = new Date().toISOString();
180
+ // Save state
181
+ await this.stateManager.save(this.state);
182
+ // Run iteration end hook
183
+ await this.hooks.execute("onIterationEnd", this.state.iteration, null);
184
+ }
185
+ }
186
+ /**
187
+ * Execute current SLAM phase
188
+ */
189
+ async executePhase() {
190
+ const phase = this.state.slam.phase;
191
+ switch (phase) {
192
+ case "planning":
193
+ await this.phasePlanning();
194
+ break;
195
+ case "executing":
196
+ await this.phaseExecuting();
197
+ break;
198
+ case "paranoid":
199
+ await this.phaseParanoid();
200
+ break;
201
+ case "reviewing":
202
+ await this.phaseReviewing();
203
+ break;
204
+ case "fixing":
205
+ await this.phaseFixing();
206
+ break;
207
+ case "committing":
208
+ await this.phaseCommitting();
209
+ break;
210
+ case "complete":
211
+ await this.complete();
212
+ break;
213
+ }
214
+ }
215
+ /**
216
+ * Planning phase - break down task into subtasks
217
+ */
218
+ async phasePlanning() {
219
+ console.log("[GLMDaemon] Phase: Planning");
220
+ const prompt = `${this.state.prompt}
221
+
222
+ Break this task down into 3-7 concrete subtasks.
223
+ For each subtask, specify:
224
+ - Title (short description)
225
+ - Description (what needs to be done)
226
+ - Dependencies (which subtasks must come first)
227
+
228
+ Respond with a JSON array of subtasks.
229
+ `;
230
+ const response = await this.agent.execute(prompt);
231
+ const subtasks = this.parseSubtasks(response);
232
+ this.state.slam.subtasks = subtasks;
233
+ this.state.slam.phase = "executing";
234
+ this.state.slam.currentSubtask = subtasks[0]?.id || null;
235
+ }
236
+ /**
237
+ * Executing phase - work on current subtask
238
+ */
239
+ async phaseExecuting() {
240
+ const currentSubtaskId = this.state.slam.currentSubtask;
241
+ if (!currentSubtaskId) {
242
+ this.state.slam.phase = "reviewing";
243
+ return;
244
+ }
245
+ const subtask = this.state.slam.subtasks.find((st) => st.id === currentSubtaskId);
246
+ if (!subtask) {
247
+ this.state.slam.phase = "reviewing";
248
+ return;
249
+ }
250
+ console.log(`[GLMDaemon] Executing subtask: ${subtask.title}`);
251
+ const prompt = `Work on this subtask: ${subtask.title}
252
+
253
+ ${subtask.description}
254
+
255
+ Use available tools to complete the work.
256
+ Focus on code changes, testing, and verification.
257
+ `;
258
+ const response = await this.agent.execute(prompt);
259
+ // Update subtask status
260
+ subtask.status = "completed";
261
+ subtask.result = response;
262
+ this.state.slam.completedSubtasks.push(currentSubtaskId);
263
+ // Move to next subtask or paranoid phase
264
+ const nextSubtask = this.state.slam.subtasks.find((st) => !this.state.slam.completedSubtasks.includes(st.id));
265
+ if (nextSubtask) {
266
+ this.state.slam.currentSubtask = nextSubtask.id;
267
+ }
268
+ else {
269
+ this.state.slam.phase = "paranoid";
270
+ }
271
+ }
272
+ /**
273
+ * Paranoid phase - quality check after every edit
274
+ */
275
+ async phaseParanoid() {
276
+ console.log("[GLMDaemon] Phase: Paranoid (quality check)");
277
+ const prompt = `Review the changes made in this session for:
278
+ - Bugs or errors
279
+ - Edge cases not handled
280
+ - Security vulnerabilities
281
+ - Performance issues
282
+ - Breaking changes
283
+
284
+ Task: ${this.state.prompt}
285
+
286
+ Changes made:
287
+ ${this.state.filesChanged.map((f) => `- ${f}`).join("\n")}
288
+
289
+ Be thorough. If issues found, we'll fix them. If clean, we proceed to review.
290
+ `;
291
+ const response = await this.agent.execute(prompt);
292
+ const hasIssues = this.detectIssues(response);
293
+ if (hasIssues) {
294
+ this.state.slam.phase = "fixing";
295
+ }
296
+ else {
297
+ this.state.slam.phase = "reviewing";
298
+ }
299
+ }
300
+ /**
301
+ * Reviewing phase - final quality review
302
+ */
303
+ async phaseReviewing() {
304
+ console.log("[GLMDaemon] Phase: Reviewing");
305
+ const prompt = `Final review of the completed work.
306
+
307
+ Task: ${this.state.prompt}
308
+ Completion promise: ${this.state.promise}
309
+
310
+ Does the implementation fully satisfy the completion promise?
311
+ Are there any remaining issues or TODOs?
312
+
313
+ If complete and clean, respond with "APPROVED".
314
+ Otherwise, list remaining issues.
315
+ `;
316
+ const response = await this.agent.execute(prompt);
317
+ if (response.includes("APPROVED")) {
318
+ this.state.slam.phase = "committing";
319
+ }
320
+ else {
321
+ this.state.slam.phase = "fixing";
322
+ }
323
+ }
324
+ /**
325
+ * Fixing phase - fix issues found
326
+ */
327
+ async phaseFixing() {
328
+ console.log("[GLMDaemon] Phase: Fixing");
329
+ const prompt = `Fix the issues identified in the review.
330
+
331
+ Use tools to make necessary changes.
332
+ Test your fixes thoroughly.
333
+ `;
334
+ await this.agent.execute(prompt);
335
+ this.state.slam.phase = "paranoid"; // Re-check after fixes
336
+ }
337
+ /**
338
+ * Committing phase - commit changes
339
+ */
340
+ async phaseCommitting() {
341
+ console.log("[GLMDaemon] Phase: Committing");
342
+ if (this.state.git.autoCommit) {
343
+ // Commit changes via worktree manager
344
+ await this.worktreeManager.commitChanges({
345
+ message: `feat: ${this.state.prompt.substring(0, 50)}`,
346
+ files: this.state.filesChanged,
347
+ });
348
+ }
349
+ this.state.slam.phase = "complete";
350
+ }
351
+ /**
352
+ * Complete the daemon run
353
+ */
354
+ async complete() {
355
+ console.log("[GLMDaemon] Task complete!");
356
+ this.state.slam.phase = "complete";
357
+ this.running = false;
358
+ // Run session end hook
359
+ await this.hooks.execute("onSessionEnd", this.state);
360
+ // Save final state
361
+ await this.stateManager.save(this.state);
362
+ // Create PR if enabled
363
+ if (this.state.git.autoPR) {
364
+ await this.worktreeManager.createPullRequest({
365
+ title: this.state.prompt.substring(0, 50),
366
+ body: `Completes: ${this.state.promise}`,
367
+ });
368
+ }
369
+ }
370
+ /**
371
+ * Stop the daemon
372
+ */
373
+ async stop() {
374
+ console.log("[GLMDaemon] Stopping...");
375
+ this.running = false;
376
+ // Cleanup
377
+ if (this.team) {
378
+ await this.team.broadcast("team-lead", "Daemon stopping");
379
+ }
380
+ // Save final state
381
+ await this.stateManager.save(this.state);
382
+ }
383
+ /**
384
+ * Get daemon status
385
+ */
386
+ getStatus() {
387
+ return {
388
+ id: this.config.teamName,
389
+ status: this.running ? "running" : "stopped",
390
+ phase: this.state.slam.phase,
391
+ iteration: this.state.iteration,
392
+ prompt: this.state.prompt,
393
+ currentTask: this.state.slam.state.currentTask,
394
+ totalSubtasks: this.state.slam.subtasks.length,
395
+ completedSubtasks: this.state.slam.completedSubtasks.length,
396
+ startedAt: this.state.startTime,
397
+ lastUpdate: this.state.lastUpdate,
398
+ };
399
+ }
400
+ /**
401
+ * Parse subtasks from agent response
402
+ */
403
+ parseSubtasks(response) {
404
+ try {
405
+ const jsonMatch = response.match(/\[[\s\S]*\]/);
406
+ if (jsonMatch) {
407
+ const parsed = JSON.parse(jsonMatch[0]);
408
+ return parsed.map((st, idx) => ({
409
+ id: st.id || `subtask-${idx}`,
410
+ title: st.title || st.task || `Subtask ${idx + 1}`,
411
+ description: st.description || "",
412
+ status: "pending",
413
+ dependencies: st.dependencies || [],
414
+ }));
415
+ }
416
+ }
417
+ catch {
418
+ // Fallback: create single subtask from prompt
419
+ return [{
420
+ id: "subtask-0",
421
+ title: this.state.prompt.substring(0, 50),
422
+ description: this.state.prompt,
423
+ status: "pending",
424
+ }];
425
+ }
426
+ return [];
427
+ }
428
+ /**
429
+ * Detect issues in paranoid check response
430
+ */
431
+ detectIssues(response) {
432
+ const issueKeywords = [
433
+ "bug", "error", "issue", "problem", "vulnerability",
434
+ "fix", "improve", "missing", "incomplete", "broken"
435
+ ];
436
+ const lower = response.toLowerCase();
437
+ return issueKeywords.some((kw) => lower.includes(kw));
438
+ }
439
+ /**
440
+ * Check if completion promise is met
441
+ */
442
+ checkCompletion() {
443
+ // Simple check: all subtasks complete
444
+ const allComplete = this.state.slam.subtasks.length > 0 &&
445
+ this.state.slam.subtasks.every((st) => this.state.slam.completedSubtasks.includes(st.id));
446
+ return allComplete || this.state.slam.phase === "complete";
447
+ }
448
+ }
449
+ //# sourceMappingURL=daemon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * GLM Daemon - Hook System
3
+ *
4
+ * Implements hook lifecycle for daemon events.
5
+ * Based on Claude Code's hook system.
6
+ */
7
+ import type { GLMHooksConfig } from "./types.js";
8
+ type GLMHookHandler = (...args: unknown[]) => Promise<unknown> | unknown;
9
+ export declare class HookSystem {
10
+ private hooks;
11
+ constructor(config: GLMHooksConfig);
12
+ /**
13
+ * Register a hook handler
14
+ */
15
+ register(event: string, handler: GLMHookHandler): void;
16
+ /**
17
+ * Execute all handlers for an event
18
+ */
19
+ execute(event: string, ...args: unknown[]): Promise<void>;
20
+ /**
21
+ * Remove all handlers for an event
22
+ */
23
+ clear(event: string): void;
24
+ /**
25
+ * Remove all hooks
26
+ */
27
+ clearAll(): void;
28
+ /**
29
+ * Get registered events
30
+ */
31
+ getEvents(): string[];
32
+ }
33
+ export {};
34
+ //# sourceMappingURL=hooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAkB,MAAM,YAAY,CAAC;AAEjE,KAAK,cAAc,GAAG,CACpB,GAAG,IAAI,EAAE,OAAO,EAAE,KACf,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;AAEhC,qBAAa,UAAU;IACrB,OAAO,CAAC,KAAK,CAA4C;gBAE7C,MAAM,EAAE,cAAc;IA4BlC;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI;IAOtD;;OAEG;IACG,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB/D;;OAEG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI1B;;OAEG;IACH,QAAQ,IAAI,IAAI;IAIhB;;OAEG;IACH,SAAS,IAAI,MAAM,EAAE;CAGtB"}
package/dist/hooks.js ADDED
@@ -0,0 +1,82 @@
1
+ /**
2
+ * GLM Daemon - Hook System
3
+ *
4
+ * Implements hook lifecycle for daemon events.
5
+ * Based on Claude Code's hook system.
6
+ */
7
+ export class HookSystem {
8
+ hooks = new Map();
9
+ constructor(config) {
10
+ // Register hooks from config
11
+ if (config.onSessionStart) {
12
+ this.register("onSessionStart", config.onSessionStart);
13
+ }
14
+ if (config.onSessionEnd) {
15
+ this.register("onSessionEnd", config.onSessionEnd);
16
+ }
17
+ if (config.onPreToolUse) {
18
+ this.register("onPreToolUse", config.onPreToolUse);
19
+ }
20
+ if (config.onPostToolUse) {
21
+ this.register("onPostToolUse", config.onPostToolUse);
22
+ }
23
+ if (config.onSubagentStart) {
24
+ this.register("onSubagentStart", config.onSubagentStart);
25
+ }
26
+ if (config.onSubagentStop) {
27
+ this.register("onSubagentStop", config.onSubagentStop);
28
+ }
29
+ if (config.onIterationStart) {
30
+ this.register("onIterationStart", config.onIterationStart);
31
+ }
32
+ if (config.onIterationEnd) {
33
+ this.register("onIterationEnd", config.onIterationEnd);
34
+ }
35
+ }
36
+ /**
37
+ * Register a hook handler
38
+ */
39
+ register(event, handler) {
40
+ if (!this.hooks.has(event)) {
41
+ this.hooks.set(event, []);
42
+ }
43
+ this.hooks.get(event).push(handler);
44
+ }
45
+ /**
46
+ * Execute all handlers for an event
47
+ */
48
+ async execute(event, ...args) {
49
+ const handlers = this.hooks.get(event);
50
+ if (!handlers) {
51
+ return;
52
+ }
53
+ for (const handler of handlers) {
54
+ try {
55
+ await handler(...args);
56
+ }
57
+ catch (error) {
58
+ console.error(`[HookSystem] Error in ${event}:`, error);
59
+ // Continue executing other hooks even if one fails
60
+ }
61
+ }
62
+ }
63
+ /**
64
+ * Remove all handlers for an event
65
+ */
66
+ clear(event) {
67
+ this.hooks.delete(event);
68
+ }
69
+ /**
70
+ * Remove all hooks
71
+ */
72
+ clearAll() {
73
+ this.hooks.clear();
74
+ }
75
+ /**
76
+ * Get registered events
77
+ */
78
+ getEvents() {
79
+ return Array.from(this.hooks.keys());
80
+ }
81
+ }
82
+ //# sourceMappingURL=hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,MAAM,OAAO,UAAU;IACb,KAAK,GAAkC,IAAI,GAAG,EAAE,CAAC;IAEzD,YAAY,MAAsB;QAChC,6BAA6B;QAC7B,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;YAC1B,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC,cAAgC,CAAC,CAAC;QAC3E,CAAC;QACD,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YACxB,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC,YAA8B,CAAC,CAAC;QACvE,CAAC;QACD,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YACxB,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC,YAA8B,CAAC,CAAC;QACvE,CAAC;QACD,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;YACzB,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC,aAA+B,CAAC,CAAC;QACzE,CAAC;QACD,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;YAC3B,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC,eAAiC,CAAC,CAAC;QAC7E,CAAC;QACD,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;YAC1B,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC,cAAgC,CAAC,CAAC;QAC3E,CAAC;QACD,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;YAC5B,IAAI,CAAC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC,gBAAkC,CAAC,CAAC;QAC/E,CAAC;QACD,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;YAC1B,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC,cAAgC,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,KAAa,EAAE,OAAuB;QAC7C,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC5B,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,KAAa,EAAE,GAAG,IAAe;QAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACvC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO;QACT,CAAC;QAED,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,CAAC;gBACH,MAAM,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;YACzB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,yBAAyB,KAAK,GAAG,EAAE,KAAK,CAAC,CAAC;gBACxD,mDAAmD;YACrD,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAa;QACjB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IACvC,CAAC;CACF"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * GLM Daemon - Autonomous GLM 4.7 Agent Daemon
3
+ *
4
+ * A daemon for autonomous AI agents powered by GLM 4.7.
5
+ * Implements SLAM pattern (State → Loop → Action → Memory).
6
+ * Supports hooks, tools via MCP, and multi-agent coordination.
7
+ *
8
+ * @module @ebowwa/glm-daemon
9
+ */
10
+ export { GLMDaemon } 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 { WorktreeManager } from "./worktree.js";
16
+ export * from "./types.js";
17
+ import { GLMDaemon } from "./daemon.js";
18
+ import type { GLMDaemonConfig } from "./types.js";
19
+ export declare function createGLMDaemon(config: GLMDaemonConfig): Promise<GLMDaemon>;
20
+ export declare function startGLMDaemon(config: GLMDaemonConfig, prompt: string): Promise<string>;
21
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,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;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAGhD,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"}
package/dist/index.js ADDED
@@ -0,0 +1,31 @@
1
+ /**
2
+ * GLM Daemon - Autonomous GLM 4.7 Agent Daemon
3
+ *
4
+ * A daemon for autonomous AI agents powered by GLM 4.7.
5
+ * Implements SLAM pattern (State → Loop → Action → Memory).
6
+ * Supports hooks, tools via MCP, and multi-agent coordination.
7
+ *
8
+ * @module @ebowwa/glm-daemon
9
+ */
10
+ // Main daemon class
11
+ export { GLMDaemon } from "./daemon.js";
12
+ // Agent class
13
+ export { GLMAgent } from "./agent.js";
14
+ // Supporting systems
15
+ export { HookSystem } from "./hooks.js";
16
+ export { ToolBridge } from "./tools.js";
17
+ export { StateManager } from "./state.js";
18
+ export { WorktreeManager } from "./worktree.js";
19
+ // Types
20
+ export * from "./types.js";
21
+ // Convenience function to create and start a daemon
22
+ import { GLMDaemon } from "./daemon.js";
23
+ export async function createGLMDaemon(config) {
24
+ const daemon = new GLMDaemon(config);
25
+ return daemon;
26
+ }
27
+ export async function startGLMDaemon(config, prompt) {
28
+ const daemon = new GLMDaemon(config);
29
+ return await daemon.start(prompt);
30
+ }
31
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,oBAAoB;AACpB,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,cAAc;AACd,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,qBAAqB;AACrB,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,QAAQ;AACR,cAAc,YAAY,CAAC;AAE3B,oDAAoD;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAAuB;IAEvB,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC;IACrC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAAuB,EACvB,MAAc;IAEd,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC;IACrC,OAAO,MAAM,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AACpC,CAAC"}