@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.
- package/README.md +264 -0
- package/dist/agent.d.ts +37 -0
- package/dist/agent.d.ts.map +1 -0
- package/dist/agent.js +97 -0
- package/dist/agent.js.map +1 -0
- package/dist/daemon.d.ts +91 -0
- package/dist/daemon.d.ts.map +1 -0
- package/dist/daemon.js +449 -0
- package/dist/daemon.js.map +1 -0
- package/dist/hooks.d.ts +34 -0
- package/dist/hooks.d.ts.map +1 -0
- package/dist/hooks.js +82 -0
- package/dist/hooks.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +31 -0
- package/dist/index.js.map +1 -0
- package/dist/state.d.ts +31 -0
- package/dist/state.d.ts.map +1 -0
- package/dist/state.js +67 -0
- package/dist/state.js.map +1 -0
- package/dist/tools.d.ts +42 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +110 -0
- package/dist/tools.js.map +1 -0
- package/dist/types.d.ts +222 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +19 -0
- package/dist/types.js.map +1 -0
- package/dist/worktree.d.ts +42 -0
- package/dist/worktree.d.ts.map +1 -0
- package/dist/worktree.js +86 -0
- package/dist/worktree.js.map +1 -0
- package/package.json +70 -0
- package/src/agent.js +166 -0
- package/src/agent.ts +110 -0
- package/src/daemon.js +591 -0
- package/src/daemon.ts +529 -0
- package/src/hooks.js +145 -0
- package/src/hooks.ts +94 -0
- package/src/index.js +105 -0
- package/src/index.ts +43 -0
- package/src/state.js +168 -0
- package/src/state.ts +77 -0
- package/src/tools.js +192 -0
- package/src/tools.ts +134 -0
- package/src/types.js +21 -0
- package/src/types.ts +249 -0
- package/src/worktree.js +195 -0
- 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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"}
|
package/dist/hooks.d.ts
ADDED
|
@@ -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"}
|
package/dist/index.d.ts
ADDED
|
@@ -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"}
|