@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/state.d.ts
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GLM Daemon - State Manager
|
|
3
|
+
*
|
|
4
|
+
* Manages SLAM state persistence to disk.
|
|
5
|
+
*/
|
|
6
|
+
import type { GLMDaemonState } from "./types.js";
|
|
7
|
+
export declare class StateManager {
|
|
8
|
+
private statePath;
|
|
9
|
+
constructor(statePath: string);
|
|
10
|
+
/**
|
|
11
|
+
* Load state from disk
|
|
12
|
+
*/
|
|
13
|
+
load(): Promise<GLMDaemonState | null>;
|
|
14
|
+
/**
|
|
15
|
+
* Save state to disk
|
|
16
|
+
*/
|
|
17
|
+
save(state: GLMDaemonState): Promise<void>;
|
|
18
|
+
/**
|
|
19
|
+
* Delete state file
|
|
20
|
+
*/
|
|
21
|
+
delete(): Promise<void>;
|
|
22
|
+
/**
|
|
23
|
+
* Check if state file exists
|
|
24
|
+
*/
|
|
25
|
+
exists(): Promise<boolean>;
|
|
26
|
+
/**
|
|
27
|
+
* Update a portion of state (merge)
|
|
28
|
+
*/
|
|
29
|
+
update(updates: Partial<GLMDaemonState>): Promise<GLMDaemonState>;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,qBAAa,YAAY;IACvB,OAAO,CAAC,SAAS,CAAS;gBAEd,SAAS,EAAE,MAAM;IAI7B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAU5C;;OAEG;IACG,IAAI,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAQhD;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ7B;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IAShC;;OAEG;IACG,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC;CAUxE"}
|
package/dist/state.js
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GLM Daemon - State Manager
|
|
3
|
+
*
|
|
4
|
+
* Manages SLAM state persistence to disk.
|
|
5
|
+
*/
|
|
6
|
+
import { promises as fsp } from "fs";
|
|
7
|
+
export class StateManager {
|
|
8
|
+
statePath;
|
|
9
|
+
constructor(statePath) {
|
|
10
|
+
this.statePath = statePath;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Load state from disk
|
|
14
|
+
*/
|
|
15
|
+
async load() {
|
|
16
|
+
try {
|
|
17
|
+
const content = await fsp.readFile(this.statePath, "utf-8");
|
|
18
|
+
return JSON.parse(content);
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
// File doesn't exist or invalid JSON
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Save state to disk
|
|
27
|
+
*/
|
|
28
|
+
async save(state) {
|
|
29
|
+
await fsp.writeFile(this.statePath, JSON.stringify(state, null, 2), "utf-8");
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Delete state file
|
|
33
|
+
*/
|
|
34
|
+
async delete() {
|
|
35
|
+
try {
|
|
36
|
+
await fsp.unlink(this.statePath);
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
// File doesn't exist, ignore
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Check if state file exists
|
|
44
|
+
*/
|
|
45
|
+
async exists() {
|
|
46
|
+
try {
|
|
47
|
+
await fsp.access(this.statePath);
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Update a portion of state (merge)
|
|
56
|
+
*/
|
|
57
|
+
async update(updates) {
|
|
58
|
+
const current = await this.load();
|
|
59
|
+
if (!current) {
|
|
60
|
+
throw new Error("No existing state to update");
|
|
61
|
+
}
|
|
62
|
+
const updated = { ...current, ...updates };
|
|
63
|
+
await this.save(updated);
|
|
64
|
+
return updated;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,IAAI,GAAG,EAAE,MAAM,IAAI,CAAC;AAGrC,MAAM,OAAO,YAAY;IACf,SAAS,CAAS;IAE1B,YAAY,SAAiB;QAC3B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI;QACR,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAC5D,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAmB,CAAC;QAC/C,CAAC;QAAC,MAAM,CAAC;YACP,qCAAqC;YACrC,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI,CAAC,KAAqB;QAC9B,MAAM,GAAG,CAAC,SAAS,CACjB,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAC9B,OAAO,CACR,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM;QACV,IAAI,CAAC;YACH,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACnC,CAAC;QAAC,MAAM,CAAC;YACP,6BAA6B;QAC/B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM;QACV,IAAI,CAAC;YACH,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACjC,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,OAAgC;QAC3C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAClC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACjD,CAAC;QAED,MAAM,OAAO,GAAG,EAAE,GAAG,OAAO,EAAE,GAAG,OAAO,EAAE,CAAC;QAC3C,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzB,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}
|
package/dist/tools.d.ts
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GLM Daemon - Tool Bridge
|
|
3
|
+
*
|
|
4
|
+
* Connects GLM agents to MCP servers for tool access.
|
|
5
|
+
*/
|
|
6
|
+
import type { GLMToolsConfig } from "./types.js";
|
|
7
|
+
export declare class ToolBridge {
|
|
8
|
+
private config;
|
|
9
|
+
private availableTools;
|
|
10
|
+
private toolTimeout;
|
|
11
|
+
private maxRetries;
|
|
12
|
+
constructor(config?: GLMToolsConfig);
|
|
13
|
+
/**
|
|
14
|
+
* Get list of available tools
|
|
15
|
+
*/
|
|
16
|
+
getAvailableTools(): string[];
|
|
17
|
+
/**
|
|
18
|
+
* Set available tools (from MCP discovery)
|
|
19
|
+
*/
|
|
20
|
+
setAvailableTools(tools: string[]): void;
|
|
21
|
+
/**
|
|
22
|
+
* Check if a tool is allowed
|
|
23
|
+
*/
|
|
24
|
+
isToolAllowed(toolName: string): boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Execute a tool with timeout and retry
|
|
27
|
+
*/
|
|
28
|
+
executeTool(toolName: string, args: Record<string, unknown>): Promise<{
|
|
29
|
+
success: boolean;
|
|
30
|
+
result?: unknown;
|
|
31
|
+
error?: string;
|
|
32
|
+
}>;
|
|
33
|
+
/**
|
|
34
|
+
* Execute tool with timeout
|
|
35
|
+
*/
|
|
36
|
+
private executeWithTimeout;
|
|
37
|
+
/**
|
|
38
|
+
* Discover tools from MCP servers
|
|
39
|
+
*/
|
|
40
|
+
discoverMCPTools(): Promise<void>;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,UAAU,CAAS;gBAEf,MAAM,GAAE,cAAmB;IAMvC;;OAEG;IACH,iBAAiB,IAAI,MAAM,EAAE;IAI7B;;OAEG;IACH,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAIxC;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAexC;;OAEG;IACG,WAAW,CACf,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IA+BlE;;OAEG;YACW,kBAAkB;IAkBhC;;OAEG;IACG,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;CAoBxC"}
|
package/dist/tools.js
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GLM Daemon - Tool Bridge
|
|
3
|
+
*
|
|
4
|
+
* Connects GLM agents to MCP servers for tool access.
|
|
5
|
+
*/
|
|
6
|
+
export class ToolBridge {
|
|
7
|
+
config;
|
|
8
|
+
availableTools = [];
|
|
9
|
+
toolTimeout;
|
|
10
|
+
maxRetries;
|
|
11
|
+
constructor(config = {}) {
|
|
12
|
+
this.config = config;
|
|
13
|
+
this.toolTimeout = config.toolTimeout || 30000;
|
|
14
|
+
this.maxRetries = config.maxRetries || 3;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Get list of available tools
|
|
18
|
+
*/
|
|
19
|
+
getAvailableTools() {
|
|
20
|
+
return this.availableTools;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Set available tools (from MCP discovery)
|
|
24
|
+
*/
|
|
25
|
+
setAvailableTools(tools) {
|
|
26
|
+
this.availableTools = tools;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Check if a tool is allowed
|
|
30
|
+
*/
|
|
31
|
+
isToolAllowed(toolName) {
|
|
32
|
+
// Check blacklist first
|
|
33
|
+
if (this.config.blockedTools?.includes(toolName)) {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
// If whitelist exists, check it
|
|
37
|
+
if (this.config.allowedTools && this.config.allowedTools.length > 0) {
|
|
38
|
+
return this.config.allowedTools.includes(toolName);
|
|
39
|
+
}
|
|
40
|
+
// Default: allow if not blocked
|
|
41
|
+
return true;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Execute a tool with timeout and retry
|
|
45
|
+
*/
|
|
46
|
+
async executeTool(toolName, args) {
|
|
47
|
+
if (!this.isToolAllowed(toolName)) {
|
|
48
|
+
return {
|
|
49
|
+
success: false,
|
|
50
|
+
error: `Tool not allowed: ${toolName}`,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
let lastError = null;
|
|
54
|
+
for (let attempt = 0; attempt < this.maxRetries; attempt++) {
|
|
55
|
+
try {
|
|
56
|
+
const result = await this.executeWithTimeout(toolName, args);
|
|
57
|
+
return { success: true, result };
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
lastError = error;
|
|
61
|
+
// Wait before retry (exponential backoff)
|
|
62
|
+
if (attempt < this.maxRetries - 1) {
|
|
63
|
+
await new Promise((resolve) => setTimeout(resolve, Math.pow(2, attempt) * 1000));
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return {
|
|
68
|
+
success: false,
|
|
69
|
+
error: lastError?.message || "Unknown error",
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Execute tool with timeout
|
|
74
|
+
*/
|
|
75
|
+
async executeWithTimeout(toolName, args) {
|
|
76
|
+
return new Promise((resolve, reject) => {
|
|
77
|
+
const timer = setTimeout(() => {
|
|
78
|
+
reject(new Error(`Tool timeout: ${toolName}`));
|
|
79
|
+
}, this.toolTimeout);
|
|
80
|
+
// TODO: Actually call MCP tool here
|
|
81
|
+
// For now, this is a placeholder
|
|
82
|
+
setTimeout(() => {
|
|
83
|
+
clearTimeout(timer);
|
|
84
|
+
resolve(`Executed ${toolName} with ${JSON.stringify(args)}`);
|
|
85
|
+
}, 100);
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Discover tools from MCP servers
|
|
90
|
+
*/
|
|
91
|
+
async discoverMCPTools() {
|
|
92
|
+
if (!this.config.enableMCP) {
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
// TODO: Query MCP servers for available tools
|
|
96
|
+
// For now, add common tools
|
|
97
|
+
const commonTools = [
|
|
98
|
+
"Read",
|
|
99
|
+
"Write",
|
|
100
|
+
"Edit",
|
|
101
|
+
"Grep",
|
|
102
|
+
"Glob",
|
|
103
|
+
"Bash",
|
|
104
|
+
"git_status",
|
|
105
|
+
"git_commit",
|
|
106
|
+
];
|
|
107
|
+
this.setAvailableTools(commonTools);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,OAAO,UAAU;IACb,MAAM,CAAiB;IACvB,cAAc,GAAa,EAAE,CAAC;IAC9B,WAAW,CAAS;IACpB,UAAU,CAAS;IAE3B,YAAY,SAAyB,EAAE;QACrC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,KAAK,CAAC;QAC/C,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC;IAC3C,CAAC;IAED;;OAEG;IACH,iBAAiB;QACf,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAC,KAAe;QAC/B,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,QAAgB;QAC5B,wBAAwB;QACxB,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YACjD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,gCAAgC;QAChC,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpE,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACrD,CAAC;QAED,gCAAgC;QAChC,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CACf,QAAgB,EAChB,IAA6B;QAE7B,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC;YAClC,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,qBAAqB,QAAQ,EAAE;aACvC,CAAC;QACJ,CAAC;QAED,IAAI,SAAS,GAAiB,IAAI,CAAC;QAEnC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC;YAC3D,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;gBAC7D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;YACnC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,SAAS,GAAG,KAAc,CAAC;gBAC3B,0CAA0C;gBAC1C,IAAI,OAAO,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;oBAClC,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAC5B,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CACjD,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,SAAS,EAAE,OAAO,IAAI,eAAe;SAC7C,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,kBAAkB,CAC9B,QAAgB,EAChB,IAA6B;QAE7B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC5B,MAAM,CAAC,IAAI,KAAK,CAAC,iBAAiB,QAAQ,EAAE,CAAC,CAAC,CAAC;YACjD,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YAErB,oCAAoC;YACpC,iCAAiC;YACjC,UAAU,CAAC,GAAG,EAAE;gBACd,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,OAAO,CAAC,YAAY,QAAQ,SAAS,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC/D,CAAC,EAAE,GAAG,CAAC,CAAC;QACV,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB;QACpB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YAC3B,OAAO;QACT,CAAC;QAED,8CAA8C;QAC9C,4BAA4B;QAC5B,MAAM,WAAW,GAAG;YAClB,MAAM;YACN,OAAO;YACP,MAAM;YACN,MAAM;YACN,MAAM;YACN,MAAM;YACN,YAAY;YACZ,YAAY;SACb,CAAC;QAEF,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;IACtC,CAAC;CACF"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GLM Daemon - Core Types
|
|
3
|
+
*
|
|
4
|
+
* Autonomous AI daemon powered by GLM 4.7 with hooks, tools, and teammates.
|
|
5
|
+
* Based on Ralph Iterative's SLAM pattern (State → Loop → Action → Memory).
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* GLM Daemon state phases (SLAM pattern)
|
|
9
|
+
*/
|
|
10
|
+
export declare const GLM_PHASES: {
|
|
11
|
+
readonly planning: "planning";
|
|
12
|
+
readonly executing: "executing";
|
|
13
|
+
readonly paranoid: "paranoid";
|
|
14
|
+
readonly reviewing: "reviewing";
|
|
15
|
+
readonly fixing: "fixing";
|
|
16
|
+
readonly committing: "committing";
|
|
17
|
+
readonly complete: "complete";
|
|
18
|
+
};
|
|
19
|
+
export type GLMPhase = keyof typeof GLM_PHASES;
|
|
20
|
+
/**
|
|
21
|
+
* GLM Daemon configuration
|
|
22
|
+
*/
|
|
23
|
+
export interface GLMDaemonConfig {
|
|
24
|
+
/** Team name for multi-agent coordination */
|
|
25
|
+
teamName: string;
|
|
26
|
+
/** GLM model to use */
|
|
27
|
+
model?: string;
|
|
28
|
+
/** Working directory */
|
|
29
|
+
cwd: string;
|
|
30
|
+
/** Enable git worktree isolation */
|
|
31
|
+
enableWorktree?: boolean;
|
|
32
|
+
/** Enable automatic commits */
|
|
33
|
+
autoCommit?: boolean;
|
|
34
|
+
/** Enable automatic PR creation */
|
|
35
|
+
autoPR?: boolean;
|
|
36
|
+
/** Base branch for PRs */
|
|
37
|
+
baseBranch?: string;
|
|
38
|
+
/** Maximum iterations (0 = unlimited) */
|
|
39
|
+
maxIterations?: number;
|
|
40
|
+
/** Completion promise text */
|
|
41
|
+
completionPromise?: string;
|
|
42
|
+
/** Hooks configuration */
|
|
43
|
+
hooks?: GLMHooksConfig;
|
|
44
|
+
/** Tools configuration */
|
|
45
|
+
tools?: GLMToolsConfig;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* GLM Daemon state (persisted to disk)
|
|
49
|
+
*/
|
|
50
|
+
export interface GLMDaemonState {
|
|
51
|
+
/** Original prompt/task */
|
|
52
|
+
prompt: string;
|
|
53
|
+
/** Completion promise (when to stop) */
|
|
54
|
+
promise: string;
|
|
55
|
+
/** Current iteration */
|
|
56
|
+
iteration: number;
|
|
57
|
+
/** Maximum iterations */
|
|
58
|
+
maxIterations: number;
|
|
59
|
+
/** Start timestamp */
|
|
60
|
+
startTime: string;
|
|
61
|
+
/** Last update timestamp */
|
|
62
|
+
lastUpdate: string;
|
|
63
|
+
/** Token usage tracking */
|
|
64
|
+
tokens: {
|
|
65
|
+
totalInput: number;
|
|
66
|
+
totalOutput: number;
|
|
67
|
+
byIteration: Array<{
|
|
68
|
+
iteration: number;
|
|
69
|
+
input: number;
|
|
70
|
+
output: number;
|
|
71
|
+
}>;
|
|
72
|
+
};
|
|
73
|
+
/** Files changed in this session */
|
|
74
|
+
filesChanged: string[];
|
|
75
|
+
/** Working memory */
|
|
76
|
+
workMemory: {
|
|
77
|
+
completedFiles: string[];
|
|
78
|
+
fileChecksums: Record<string, string>;
|
|
79
|
+
};
|
|
80
|
+
/** SLAM state */
|
|
81
|
+
slam: {
|
|
82
|
+
enabled: boolean;
|
|
83
|
+
phase: GLMPhase;
|
|
84
|
+
state: {
|
|
85
|
+
currentTask: string;
|
|
86
|
+
beliefs: Record<string, unknown>;
|
|
87
|
+
goals: string[];
|
|
88
|
+
};
|
|
89
|
+
subtasks: GLMSubtask[];
|
|
90
|
+
currentSubtask: string | null;
|
|
91
|
+
completedSubtasks: string[];
|
|
92
|
+
memory: {
|
|
93
|
+
actionsTaken: string[];
|
|
94
|
+
outcomes: Record<string, unknown>;
|
|
95
|
+
patterns: Record<string, unknown>;
|
|
96
|
+
};
|
|
97
|
+
};
|
|
98
|
+
/** Git configuration */
|
|
99
|
+
git: {
|
|
100
|
+
enabled: boolean;
|
|
101
|
+
autoCommit: boolean;
|
|
102
|
+
autoPR: boolean;
|
|
103
|
+
baseBranch: string;
|
|
104
|
+
useWorktree: boolean;
|
|
105
|
+
branchName: string;
|
|
106
|
+
branchCreated: boolean;
|
|
107
|
+
currentCommit: string;
|
|
108
|
+
};
|
|
109
|
+
/** Machine info */
|
|
110
|
+
machine?: {
|
|
111
|
+
cpu: {
|
|
112
|
+
count: number;
|
|
113
|
+
model: string;
|
|
114
|
+
tier: string;
|
|
115
|
+
};
|
|
116
|
+
memory: {
|
|
117
|
+
total: number;
|
|
118
|
+
free: number;
|
|
119
|
+
tier: string;
|
|
120
|
+
};
|
|
121
|
+
disk: {
|
|
122
|
+
total: number;
|
|
123
|
+
available: number;
|
|
124
|
+
tier: string;
|
|
125
|
+
};
|
|
126
|
+
platform: {
|
|
127
|
+
os: string;
|
|
128
|
+
arch: string;
|
|
129
|
+
isContainer: boolean;
|
|
130
|
+
};
|
|
131
|
+
capacity: string;
|
|
132
|
+
score: number;
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* GLM Subtask (for SLAM coordination)
|
|
137
|
+
*/
|
|
138
|
+
export interface GLMSubtask {
|
|
139
|
+
id: string;
|
|
140
|
+
title: string;
|
|
141
|
+
description: string;
|
|
142
|
+
status: "pending" | "in_progress" | "completed" | "blocked" | "failed";
|
|
143
|
+
assignedTo?: string;
|
|
144
|
+
dependencies?: string[];
|
|
145
|
+
result?: unknown;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* GLM Hooks configuration
|
|
149
|
+
*/
|
|
150
|
+
export interface GLMHooksConfig {
|
|
151
|
+
onSessionStart?: (state: GLMDaemonState) => Promise<void>;
|
|
152
|
+
onSessionEnd?: (state: GLMDaemonState) => Promise<void>;
|
|
153
|
+
onPreToolUse?: (tool: string, args: unknown) => Promise<boolean>;
|
|
154
|
+
onPostToolUse?: (tool: string, args: unknown, result: unknown) => Promise<void>;
|
|
155
|
+
onSubagentStart?: (subagentId: string) => Promise<void>;
|
|
156
|
+
onSubagentStop?: (subagentId: string, result: unknown) => Promise<void>;
|
|
157
|
+
onIterationStart?: (iteration: number) => Promise<void>;
|
|
158
|
+
onIterationEnd?: (iteration: number, result: unknown) => Promise<void>;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* GLM Tools configuration
|
|
162
|
+
*/
|
|
163
|
+
export interface GLMToolsConfig {
|
|
164
|
+
/** Enable MCP tool access */
|
|
165
|
+
enableMCP?: boolean;
|
|
166
|
+
/** Allowed tools (whitelist) */
|
|
167
|
+
allowedTools?: string[];
|
|
168
|
+
/** Blocked tools (blacklist) */
|
|
169
|
+
blockedTools?: string[];
|
|
170
|
+
/** Tool timeout in ms */
|
|
171
|
+
toolTimeout?: number;
|
|
172
|
+
/** Max retries for failed tools */
|
|
173
|
+
maxRetries?: number;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* GLM Agent (individual GLM-powered agent)
|
|
177
|
+
*/
|
|
178
|
+
export interface GLMAgentConfig {
|
|
179
|
+
/** Agent ID */
|
|
180
|
+
agentId: string;
|
|
181
|
+
/** Agent name */
|
|
182
|
+
name: string;
|
|
183
|
+
/** System prompt */
|
|
184
|
+
prompt: string;
|
|
185
|
+
/** Model to use */
|
|
186
|
+
model?: string;
|
|
187
|
+
/** Temperature (0-1) */
|
|
188
|
+
temperature?: number;
|
|
189
|
+
/** Max tokens */
|
|
190
|
+
maxTokens?: number;
|
|
191
|
+
/** Tools this agent can use */
|
|
192
|
+
tools?: string[];
|
|
193
|
+
/** Assigned subtasks */
|
|
194
|
+
assignedSubtasks?: string[];
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* GLM Tool execution result
|
|
198
|
+
*/
|
|
199
|
+
export interface GLMToolResult {
|
|
200
|
+
success: boolean;
|
|
201
|
+
result?: unknown;
|
|
202
|
+
error?: string;
|
|
203
|
+
duration: number;
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* GLM Daemon status
|
|
207
|
+
*/
|
|
208
|
+
export interface GLMDaemonStatus {
|
|
209
|
+
id: string;
|
|
210
|
+
status: "starting" | "running" | "complete" | "error" | "stopped";
|
|
211
|
+
phase: GLMPhase;
|
|
212
|
+
iteration: number;
|
|
213
|
+
prompt: string;
|
|
214
|
+
currentTask?: string;
|
|
215
|
+
totalSubtasks: number;
|
|
216
|
+
completedSubtasks: number;
|
|
217
|
+
startedAt: string;
|
|
218
|
+
lastUpdate: string;
|
|
219
|
+
processId?: number;
|
|
220
|
+
worktreePath?: string;
|
|
221
|
+
}
|
|
222
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GLM Daemon - Core Types
|
|
3
|
+
*
|
|
4
|
+
* Autonomous AI daemon powered by GLM 4.7 with hooks, tools, and teammates.
|
|
5
|
+
* Based on Ralph Iterative's SLAM pattern (State → Loop → Action → Memory).
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* GLM Daemon state phases (SLAM pattern)
|
|
9
|
+
*/
|
|
10
|
+
export const GLM_PHASES = {
|
|
11
|
+
planning: "planning",
|
|
12
|
+
executing: "executing",
|
|
13
|
+
paranoid: "paranoid",
|
|
14
|
+
reviewing: "reviewing",
|
|
15
|
+
fixing: "fixing",
|
|
16
|
+
committing: "committing",
|
|
17
|
+
complete: "complete",
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,QAAQ,EAAE,UAAU;IACpB,SAAS,EAAE,WAAW;IACtB,QAAQ,EAAE,UAAU;IACpB,SAAS,EAAE,WAAW;IACtB,MAAM,EAAE,QAAQ;IAChB,UAAU,EAAE,YAAY;IACxB,QAAQ,EAAE,UAAU;CACZ,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GLM Daemon - Worktree Manager
|
|
3
|
+
*
|
|
4
|
+
* Handles git worktree isolation for parallel task execution.
|
|
5
|
+
*/
|
|
6
|
+
import type { GLMDaemonConfig } from "./types.js";
|
|
7
|
+
export declare class WorktreeManager {
|
|
8
|
+
private config;
|
|
9
|
+
private worktreePath;
|
|
10
|
+
constructor(config: GLMDaemonConfig);
|
|
11
|
+
/**
|
|
12
|
+
* Create a new worktree for isolation
|
|
13
|
+
*/
|
|
14
|
+
createWorktree(): Promise<string>;
|
|
15
|
+
/**
|
|
16
|
+
* Create a feature branch in the worktree
|
|
17
|
+
*/
|
|
18
|
+
createBranch(): Promise<string>;
|
|
19
|
+
/**
|
|
20
|
+
* Commit changes in the worktree
|
|
21
|
+
*/
|
|
22
|
+
commitChanges(options: {
|
|
23
|
+
message: string;
|
|
24
|
+
files: string[];
|
|
25
|
+
}): Promise<string>;
|
|
26
|
+
/**
|
|
27
|
+
* Create a pull request
|
|
28
|
+
*/
|
|
29
|
+
createPullRequest(options: {
|
|
30
|
+
title: string;
|
|
31
|
+
body: string;
|
|
32
|
+
}): Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* Clean up worktree
|
|
35
|
+
*/
|
|
36
|
+
cleanup(): Promise<void>;
|
|
37
|
+
/**
|
|
38
|
+
* Get worktree path
|
|
39
|
+
*/
|
|
40
|
+
getPath(): string | null;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=worktree.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worktree.d.ts","sourceRoot":"","sources":["../src/worktree.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAIlD,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,YAAY,CAAuB;gBAE/B,MAAM,EAAE,eAAe;IAInC;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;IAoBvC;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IAWrC;;OAEG;IACG,aAAa,CAAC,OAAO,EAAE;QAC3B,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,MAAM,EAAE,CAAC;KACjB,GAAG,OAAO,CAAC,MAAM,CAAC;IAgBnB;;OAEG;IACG,iBAAiB,CAAC,OAAO,EAAE;QAC/B,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;KACd,GAAG,OAAO,CAAC,IAAI,CAAC;IAYjB;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAc9B;;OAEG;IACH,OAAO,IAAI,MAAM,GAAG,IAAI;CAGzB"}
|
package/dist/worktree.js
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GLM Daemon - Worktree Manager
|
|
3
|
+
*
|
|
4
|
+
* Handles git worktree isolation for parallel task execution.
|
|
5
|
+
*/
|
|
6
|
+
import { exec } from "child_process";
|
|
7
|
+
import { promisify } from "util";
|
|
8
|
+
import { join } from "path";
|
|
9
|
+
const execAsync = promisify(exec);
|
|
10
|
+
export class WorktreeManager {
|
|
11
|
+
config;
|
|
12
|
+
worktreePath = null;
|
|
13
|
+
constructor(config) {
|
|
14
|
+
this.config = config;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Create a new worktree for isolation
|
|
18
|
+
*/
|
|
19
|
+
async createWorktree() {
|
|
20
|
+
if (!this.config.enableWorktree) {
|
|
21
|
+
return this.config.cwd;
|
|
22
|
+
}
|
|
23
|
+
const timestamp = Date.now();
|
|
24
|
+
const worktreeName = `glm-${timestamp}`;
|
|
25
|
+
this.worktreePath = join(this.config.cwd, "worktrees", worktreeName);
|
|
26
|
+
// Create worktrees directory
|
|
27
|
+
await execAsync(`mkdir -p ${join(this.config.cwd, "worktrees")}`);
|
|
28
|
+
// Create worktree
|
|
29
|
+
await execAsync(`git worktree add -b ${worktreeName} ${this.worktreePath}`);
|
|
30
|
+
return this.worktreePath;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Create a feature branch in the worktree
|
|
34
|
+
*/
|
|
35
|
+
async createBranch() {
|
|
36
|
+
if (!this.worktreePath) {
|
|
37
|
+
throw new Error("No worktree created");
|
|
38
|
+
}
|
|
39
|
+
const branchName = `feat/glm-${Date.now()}`;
|
|
40
|
+
await execAsync(`cd ${this.worktreePath} && git checkout -b ${branchName}`);
|
|
41
|
+
return branchName;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Commit changes in the worktree
|
|
45
|
+
*/
|
|
46
|
+
async commitChanges(options) {
|
|
47
|
+
const cwd = this.worktreePath || this.config.cwd;
|
|
48
|
+
// Stage files
|
|
49
|
+
for (const file of options.files) {
|
|
50
|
+
await execAsync(`cd ${cwd} && git add ${file}`);
|
|
51
|
+
}
|
|
52
|
+
// Commit
|
|
53
|
+
const { stdout } = await execAsync(`cd ${cwd} && git commit -m "${options.message}"`);
|
|
54
|
+
return stdout.trim();
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Create a pull request
|
|
58
|
+
*/
|
|
59
|
+
async createPullRequest(options) {
|
|
60
|
+
const cwd = this.worktreePath || this.config.cwd;
|
|
61
|
+
// Push branch
|
|
62
|
+
await execAsync(`cd ${cwd} && git push -u origin HEAD`);
|
|
63
|
+
// Create PR using gh CLI
|
|
64
|
+
await execAsync(`cd ${cwd} && gh pr create --title "${options.title}" --body "${options.body}"`);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Clean up worktree
|
|
68
|
+
*/
|
|
69
|
+
async cleanup() {
|
|
70
|
+
if (!this.worktreePath) {
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
// Remove worktree
|
|
74
|
+
await execAsync(`git worktree remove ${this.worktreePath}`);
|
|
75
|
+
// Delete directory
|
|
76
|
+
await execAsync(`rm -rf ${this.worktreePath}`);
|
|
77
|
+
this.worktreePath = null;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Get worktree path
|
|
81
|
+
*/
|
|
82
|
+
getPath() {
|
|
83
|
+
return this.worktreePath;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=worktree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worktree.js","sourceRoot":"","sources":["../src/worktree.ts"],"names":[],"mappings":"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"}
|