@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/README.md
ADDED
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
# @ebowwa/glm-daemon
|
|
2
|
+
|
|
3
|
+
Autonomous GLM 4.7 agent daemon with hooks, tools, and teammates.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
GLM Daemon is an autonomous AI agent daemon powered by GLM 4.7. It implements the **SLAM pattern** (State → Loop → Action → Memory) for relentless task execution, similar to Ralph Iterative but with GLM as the LLM backend.
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
- **GLM 4.7 Integration**: Uses `@ebowwa/ai` for GLM API calls
|
|
12
|
+
- **SLAM Pattern**: State → Loop → Action → Memory execution model
|
|
13
|
+
- **Hook System**: Pre/post tool use, subagent lifecycle, iteration events
|
|
14
|
+
- **Tool Access**: MCP server integration for tool execution
|
|
15
|
+
- **Multi-Agent Coordination**: Uses `@ebowwa/teammates` for parallel execution
|
|
16
|
+
- **Git Worktree Isolation**: Parallel task execution in isolated environments
|
|
17
|
+
- **State Persistence**: Crash recovery with JSON state files
|
|
18
|
+
|
|
19
|
+
## Installation
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
bun add @ebowwa/glm-daemon
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Quick Start
|
|
26
|
+
|
|
27
|
+
```typescript
|
|
28
|
+
import { startGLMDaemon } from "@ebowwa/glm-daemon";
|
|
29
|
+
|
|
30
|
+
const teamName = await startGLMDaemon(
|
|
31
|
+
{
|
|
32
|
+
teamName: "my-glm-agent",
|
|
33
|
+
cwd: process.cwd(),
|
|
34
|
+
model: "glm-4.7",
|
|
35
|
+
enableWorktree: true,
|
|
36
|
+
autoCommit: true,
|
|
37
|
+
completionPromise: "TASK_COMPLETE",
|
|
38
|
+
},
|
|
39
|
+
"Build a REST API for user authentication"
|
|
40
|
+
);
|
|
41
|
+
|
|
42
|
+
console.log(`GLM daemon started: ${teamName}`);
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Architecture
|
|
46
|
+
|
|
47
|
+
### SLAM Pattern
|
|
48
|
+
|
|
49
|
+
GLM Daemon follows the SLAM pattern for autonomous execution:
|
|
50
|
+
|
|
51
|
+
```
|
|
52
|
+
State → Loop → Action → Memory
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
**Phases:**
|
|
56
|
+
1. **Planning** - Break task into subtasks
|
|
57
|
+
2. **Executing** - Work on current subtask
|
|
58
|
+
3. **Paranoid** - Quality check after every edit
|
|
59
|
+
4. **Reviewing** - Final quality review
|
|
60
|
+
5. **Fixing** - Fix issues found
|
|
61
|
+
6. **Committing** - Commit changes
|
|
62
|
+
7. **Complete** - Task finished
|
|
63
|
+
|
|
64
|
+
### State File
|
|
65
|
+
|
|
66
|
+
State is persisted to `.glm-daemon.json` in the working directory:
|
|
67
|
+
|
|
68
|
+
```json
|
|
69
|
+
{
|
|
70
|
+
"prompt": "the original task",
|
|
71
|
+
"promise": "TASK_COMPLETE",
|
|
72
|
+
"iteration": 0,
|
|
73
|
+
"maxIterations": 0,
|
|
74
|
+
"startTime": "2026-02-06T04:30:00.000Z",
|
|
75
|
+
"lastUpdate": "2026-02-06T04:30:00.000Z",
|
|
76
|
+
"tokens": {
|
|
77
|
+
"totalInput": 0,
|
|
78
|
+
"totalOutput": 0
|
|
79
|
+
},
|
|
80
|
+
"slam": {
|
|
81
|
+
"enabled": true,
|
|
82
|
+
"phase": "planning",
|
|
83
|
+
"subtasks": [],
|
|
84
|
+
"currentSubtask": null,
|
|
85
|
+
"completedSubtasks": []
|
|
86
|
+
},
|
|
87
|
+
"git": {
|
|
88
|
+
"enabled": true,
|
|
89
|
+
"autoCommit": true,
|
|
90
|
+
"autoPR": false
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
## Configuration
|
|
96
|
+
|
|
97
|
+
```typescript
|
|
98
|
+
interface GLMDaemonConfig {
|
|
99
|
+
teamName: string; // Team name for coordination
|
|
100
|
+
model?: string; // GLM model (default: glm-4.7)
|
|
101
|
+
cwd: string; // Working directory
|
|
102
|
+
enableWorktree?: boolean; // Git worktree isolation
|
|
103
|
+
autoCommit?: boolean; // Auto-commit changes
|
|
104
|
+
autoPR?: boolean; // Auto-create PR
|
|
105
|
+
baseBranch?: string; // Base branch for PR
|
|
106
|
+
maxIterations?: number; // Max iterations (0 = unlimited)
|
|
107
|
+
completionPromise?: string; // Completion text
|
|
108
|
+
hooks?: GLMHooksConfig; // Hook configuration
|
|
109
|
+
tools?: GLMToolsConfig; // Tool configuration
|
|
110
|
+
}
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
## Hooks
|
|
114
|
+
|
|
115
|
+
Configure hooks for lifecycle events:
|
|
116
|
+
|
|
117
|
+
```typescript
|
|
118
|
+
const daemon = await createGLMDaemon({
|
|
119
|
+
teamName: "my-agent",
|
|
120
|
+
cwd: process.cwd(),
|
|
121
|
+
hooks: {
|
|
122
|
+
onSessionStart: async (state) => {
|
|
123
|
+
console.log("Session starting:", state.prompt);
|
|
124
|
+
},
|
|
125
|
+
onPreToolUse: async (tool, args) => {
|
|
126
|
+
console.log("Using tool:", tool);
|
|
127
|
+
return true; // Allow tool use
|
|
128
|
+
},
|
|
129
|
+
onIterationEnd: async (iteration, result) => {
|
|
130
|
+
console.log("Iteration complete:", iteration);
|
|
131
|
+
},
|
|
132
|
+
},
|
|
133
|
+
});
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
Available hooks:
|
|
137
|
+
- `onSessionStart` - Session begins
|
|
138
|
+
- `onSessionEnd` - Session ends
|
|
139
|
+
- `onPreToolUse` - Before tool use (can block)
|
|
140
|
+
- `onPostToolUse` - After tool use
|
|
141
|
+
- `onSubagentStart` - Subagent spawns
|
|
142
|
+
- `onSubagentStop` - Subagent stops
|
|
143
|
+
- `onIterationStart` - Iteration begins
|
|
144
|
+
- `onIterationEnd` - Iteration ends
|
|
145
|
+
|
|
146
|
+
## Tools
|
|
147
|
+
|
|
148
|
+
GLM Daemon integrates with MCP servers for tool access:
|
|
149
|
+
|
|
150
|
+
```typescript
|
|
151
|
+
const daemon = await createGLMDaemon({
|
|
152
|
+
teamName: "my-agent",
|
|
153
|
+
cwd: process.cwd(),
|
|
154
|
+
tools: {
|
|
155
|
+
enableMCP: true,
|
|
156
|
+
allowedTools: ["Read", "Write", "Edit", "Bash"],
|
|
157
|
+
toolTimeout: 30000,
|
|
158
|
+
maxRetries: 3,
|
|
159
|
+
},
|
|
160
|
+
});
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
## Multi-Agent Coordination
|
|
164
|
+
|
|
165
|
+
GLM Daemon uses `@ebowwa/teammates` for multi-agent coordination:
|
|
166
|
+
|
|
167
|
+
```typescript
|
|
168
|
+
import { Team, Teammate } from "@ebowwa/teammates";
|
|
169
|
+
|
|
170
|
+
const team = await Team.create({
|
|
171
|
+
name: "my-team",
|
|
172
|
+
description: "Build a REST API",
|
|
173
|
+
});
|
|
174
|
+
|
|
175
|
+
const explorer = await Teammate.create("my-team", {
|
|
176
|
+
name: "explorer",
|
|
177
|
+
subagentType: "Explore",
|
|
178
|
+
prompt: "Explore the codebase",
|
|
179
|
+
model: "glm-4.7",
|
|
180
|
+
});
|
|
181
|
+
|
|
182
|
+
await explorer.sendTo("team-lead", "Found 50 TypeScript files");
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
## Git Worktree Isolation
|
|
186
|
+
|
|
187
|
+
For parallel task execution, use git worktrees:
|
|
188
|
+
|
|
189
|
+
```typescript
|
|
190
|
+
const daemon = await createGLMDaemon({
|
|
191
|
+
teamName: "my-agent",
|
|
192
|
+
cwd: process.cwd(),
|
|
193
|
+
enableWorktree: true,
|
|
194
|
+
autoCommit: true,
|
|
195
|
+
});
|
|
196
|
+
|
|
197
|
+
// Creates worktree at: worktrees/glm-1234567890/
|
|
198
|
+
// Creates feature branch: feat/glm-1234567890
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
## API Reference
|
|
202
|
+
|
|
203
|
+
### Classes
|
|
204
|
+
|
|
205
|
+
#### `GLMDaemon`
|
|
206
|
+
|
|
207
|
+
Main daemon orchestrator.
|
|
208
|
+
|
|
209
|
+
**Methods:**
|
|
210
|
+
- `start(prompt: string)` - Start daemon with a prompt
|
|
211
|
+
- `stop()` - Stop the daemon
|
|
212
|
+
- `getStatus()` - Get current status
|
|
213
|
+
|
|
214
|
+
#### `GLMAgent`
|
|
215
|
+
|
|
216
|
+
Individual GLM-powered agent.
|
|
217
|
+
|
|
218
|
+
**Methods:**
|
|
219
|
+
- `execute(prompt: string)` - Execute a prompt
|
|
220
|
+
- `executeTool(toolName: string, args)` - Execute a tool
|
|
221
|
+
- `registerTool(name, handler)` - Register a tool
|
|
222
|
+
|
|
223
|
+
#### `HookSystem`
|
|
224
|
+
|
|
225
|
+
Hook lifecycle management.
|
|
226
|
+
|
|
227
|
+
**Methods:**
|
|
228
|
+
- `register(event, handler)` - Register a hook
|
|
229
|
+
- `execute(event, ...args)` - Execute hooks for event
|
|
230
|
+
- `clear(event)` - Clear hooks for event
|
|
231
|
+
|
|
232
|
+
#### `ToolBridge`
|
|
233
|
+
|
|
234
|
+
MCP tool integration.
|
|
235
|
+
|
|
236
|
+
**Methods:**
|
|
237
|
+
- `getAvailableTools()` - Get available tools
|
|
238
|
+
- `isToolAllowed(toolName)` - Check if tool is allowed
|
|
239
|
+
- `executeTool(toolName, args)` - Execute a tool
|
|
240
|
+
|
|
241
|
+
#### `StateManager`
|
|
242
|
+
|
|
243
|
+
State persistence.
|
|
244
|
+
|
|
245
|
+
**Methods:**
|
|
246
|
+
- `load()` - Load state from disk
|
|
247
|
+
- `save(state)` - Save state to disk
|
|
248
|
+
- `update(updates)` - Update state (merge)
|
|
249
|
+
- `delete()` - Delete state file
|
|
250
|
+
|
|
251
|
+
#### `WorktreeManager`
|
|
252
|
+
|
|
253
|
+
Git worktree isolation.
|
|
254
|
+
|
|
255
|
+
**Methods:**
|
|
256
|
+
- `createWorktree()` - Create a new worktree
|
|
257
|
+
- `createBranch()` - Create a feature branch
|
|
258
|
+
- `commitChanges(options)` - Commit changes
|
|
259
|
+
- `createPullRequest(options)` - Create PR
|
|
260
|
+
- `cleanup()` - Clean up worktree
|
|
261
|
+
|
|
262
|
+
## License
|
|
263
|
+
|
|
264
|
+
MIT
|
package/dist/agent.d.ts
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GLM Agent - Individual GLM-powered agent
|
|
3
|
+
*
|
|
4
|
+
* Wraps GLM 4.7 API with tool access and hook integration.
|
|
5
|
+
*/
|
|
6
|
+
import type { GLMAgentConfig, GLMToolResult } from "./types.js";
|
|
7
|
+
export declare class GLMAgent {
|
|
8
|
+
private config;
|
|
9
|
+
private client;
|
|
10
|
+
private tools;
|
|
11
|
+
constructor(config: GLMAgentConfig);
|
|
12
|
+
/**
|
|
13
|
+
* Execute a prompt and get response
|
|
14
|
+
*/
|
|
15
|
+
execute(prompt: string, tools?: Record<string, unknown>): Promise<string>;
|
|
16
|
+
/**
|
|
17
|
+
* Execute a tool call
|
|
18
|
+
*/
|
|
19
|
+
executeTool(toolName: string, args: unknown): Promise<GLMToolResult>;
|
|
20
|
+
/**
|
|
21
|
+
* Register a tool
|
|
22
|
+
*/
|
|
23
|
+
registerTool(name: string, handler: (args: unknown) => Promise<unknown>): void;
|
|
24
|
+
/**
|
|
25
|
+
* Get available tools
|
|
26
|
+
*/
|
|
27
|
+
getAvailableTools(): string[];
|
|
28
|
+
/**
|
|
29
|
+
* Get agent ID
|
|
30
|
+
*/
|
|
31
|
+
get agentId(): string;
|
|
32
|
+
/**
|
|
33
|
+
* Get agent name
|
|
34
|
+
*/
|
|
35
|
+
get name(): string;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=agent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGhE,qBAAa,QAAQ;IACnB,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,KAAK,CAA+D;gBAEhE,MAAM,EAAE,cAAc;IAKlC;;OAEG;IACG,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IA6B/E;;OAEG;IACG,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC;IA4B1E;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI;IAI9E;;OAEG;IACH,iBAAiB,IAAI,MAAM,EAAE;IAI7B;;OAEG;IACH,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF"}
|
package/dist/agent.js
ADDED
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GLM Agent - Individual GLM-powered agent
|
|
3
|
+
*
|
|
4
|
+
* Wraps GLM 4.7 API with tool access and hook integration.
|
|
5
|
+
*/
|
|
6
|
+
import { GLMClient } from "@ebowwa/ai/client";
|
|
7
|
+
export class GLMAgent {
|
|
8
|
+
config;
|
|
9
|
+
client;
|
|
10
|
+
tools = new Map();
|
|
11
|
+
constructor(config) {
|
|
12
|
+
this.config = config;
|
|
13
|
+
this.client = new GLMClient();
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Execute a prompt and get response
|
|
17
|
+
*/
|
|
18
|
+
async execute(prompt, tools) {
|
|
19
|
+
const messages = [
|
|
20
|
+
{
|
|
21
|
+
role: "system",
|
|
22
|
+
content: this.config.prompt,
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
role: "user",
|
|
26
|
+
content: prompt,
|
|
27
|
+
},
|
|
28
|
+
];
|
|
29
|
+
// Add tool context if provided
|
|
30
|
+
if (tools) {
|
|
31
|
+
messages.push({
|
|
32
|
+
role: "user",
|
|
33
|
+
content: `\nAvailable tools: ${Object.keys(tools).join(", ")}`,
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
const response = await this.client.chatCompletion(messages, {
|
|
37
|
+
model: this.config.model || "glm-4.7",
|
|
38
|
+
temperature: this.config.temperature || 0.7,
|
|
39
|
+
maxTokens: this.config.maxTokens || 4096,
|
|
40
|
+
});
|
|
41
|
+
return response.choices[0]?.message?.content || "";
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Execute a tool call
|
|
45
|
+
*/
|
|
46
|
+
async executeTool(toolName, args) {
|
|
47
|
+
const start = Date.now();
|
|
48
|
+
const tool = this.tools.get(toolName);
|
|
49
|
+
if (!tool) {
|
|
50
|
+
return {
|
|
51
|
+
success: false,
|
|
52
|
+
error: `Tool not found: ${toolName}`,
|
|
53
|
+
duration: Date.now() - start,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
try {
|
|
57
|
+
const result = await tool(args);
|
|
58
|
+
return {
|
|
59
|
+
success: true,
|
|
60
|
+
result,
|
|
61
|
+
duration: Date.now() - start,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
return {
|
|
66
|
+
success: false,
|
|
67
|
+
error: error instanceof Error ? error.message : String(error),
|
|
68
|
+
duration: Date.now() - start,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Register a tool
|
|
74
|
+
*/
|
|
75
|
+
registerTool(name, handler) {
|
|
76
|
+
this.tools.set(name, handler);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Get available tools
|
|
80
|
+
*/
|
|
81
|
+
getAvailableTools() {
|
|
82
|
+
return Array.from(this.tools.keys());
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Get agent ID
|
|
86
|
+
*/
|
|
87
|
+
get agentId() {
|
|
88
|
+
return this.config.agentId;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Get agent name
|
|
92
|
+
*/
|
|
93
|
+
get name() {
|
|
94
|
+
return this.config.name;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
|
package/dist/daemon.d.ts
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
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 type { GLMDaemonConfig, GLMDaemonStatus } from "./types.js";
|
|
8
|
+
export declare class GLMDaemon {
|
|
9
|
+
private config;
|
|
10
|
+
private state;
|
|
11
|
+
private statePath;
|
|
12
|
+
private agent;
|
|
13
|
+
private hooks;
|
|
14
|
+
private tools;
|
|
15
|
+
private stateManager;
|
|
16
|
+
private worktreeManager;
|
|
17
|
+
private team;
|
|
18
|
+
private subagents;
|
|
19
|
+
private running;
|
|
20
|
+
private client;
|
|
21
|
+
constructor(config: GLMDaemonConfig);
|
|
22
|
+
/**
|
|
23
|
+
* Initialize daemon state
|
|
24
|
+
*/
|
|
25
|
+
private initializeState;
|
|
26
|
+
/**
|
|
27
|
+
* Build system prompt from config and state
|
|
28
|
+
*/
|
|
29
|
+
private buildSystemPrompt;
|
|
30
|
+
/**
|
|
31
|
+
* Start the daemon with a prompt
|
|
32
|
+
*/
|
|
33
|
+
start(prompt: string): Promise<string>;
|
|
34
|
+
/**
|
|
35
|
+
* Main daemon loop (SLAM pattern)
|
|
36
|
+
*/
|
|
37
|
+
private runLoop;
|
|
38
|
+
/**
|
|
39
|
+
* Execute current SLAM phase
|
|
40
|
+
*/
|
|
41
|
+
private executePhase;
|
|
42
|
+
/**
|
|
43
|
+
* Planning phase - break down task into subtasks
|
|
44
|
+
*/
|
|
45
|
+
private phasePlanning;
|
|
46
|
+
/**
|
|
47
|
+
* Executing phase - work on current subtask
|
|
48
|
+
*/
|
|
49
|
+
private phaseExecuting;
|
|
50
|
+
/**
|
|
51
|
+
* Paranoid phase - quality check after every edit
|
|
52
|
+
*/
|
|
53
|
+
private phaseParanoid;
|
|
54
|
+
/**
|
|
55
|
+
* Reviewing phase - final quality review
|
|
56
|
+
*/
|
|
57
|
+
private phaseReviewing;
|
|
58
|
+
/**
|
|
59
|
+
* Fixing phase - fix issues found
|
|
60
|
+
*/
|
|
61
|
+
private phaseFixing;
|
|
62
|
+
/**
|
|
63
|
+
* Committing phase - commit changes
|
|
64
|
+
*/
|
|
65
|
+
private phaseCommitting;
|
|
66
|
+
/**
|
|
67
|
+
* Complete the daemon run
|
|
68
|
+
*/
|
|
69
|
+
private complete;
|
|
70
|
+
/**
|
|
71
|
+
* Stop the daemon
|
|
72
|
+
*/
|
|
73
|
+
stop(): Promise<void>;
|
|
74
|
+
/**
|
|
75
|
+
* Get daemon status
|
|
76
|
+
*/
|
|
77
|
+
getStatus(): GLMDaemonStatus;
|
|
78
|
+
/**
|
|
79
|
+
* Parse subtasks from agent response
|
|
80
|
+
*/
|
|
81
|
+
private parseSubtasks;
|
|
82
|
+
/**
|
|
83
|
+
* Detect issues in paranoid check response
|
|
84
|
+
*/
|
|
85
|
+
private detectIssues;
|
|
86
|
+
/**
|
|
87
|
+
* Check if completion promise is met
|
|
88
|
+
*/
|
|
89
|
+
private checkCompletion;
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=daemon.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EACV,eAAe,EAGf,eAAe,EAChB,MAAM,YAAY,CAAC;AAYpB,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,KAAK,CAAiB;IAC9B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,KAAK,CAAW;IACxB,OAAO,CAAC,KAAK,CAAa;IAC1B,OAAO,CAAC,KAAK,CAAa;IAC1B,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,IAAI,CAAqB;IACjC,OAAO,CAAC,SAAS,CAAoC;IACrD,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAY;gBAEd,MAAM,EAAE,eAAe;IAwBnC;;OAEG;IACH,OAAO,CAAC,eAAe;IAiDvB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAqBzB;;OAEG;IACG,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAqC5C;;OAEG;YACW,OAAO;IAoCrB;;OAEG;YACW,YAAY;IA4B1B;;OAEG;YACW,aAAa;IAsB3B;;OAEG;YACW,cAAc;IA0C5B;;OAEG;YACW,aAAa;IA4B3B;;OAEG;YACW,cAAc;IAwB5B;;OAEG;YACW,WAAW;IAazB;;OAEG;YACW,eAAe;IAc7B;;OAEG;YACW,QAAQ;IAoBtB;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAa3B;;OAEG;IACH,SAAS,IAAI,eAAe;IAe5B;;OAEG;IACH,OAAO,CAAC,aAAa;IAgCrB;;OAEG;IACH,OAAO,CAAC,YAAY;IAUpB;;OAEG;IACH,OAAO,CAAC,eAAe;CASxB"}
|