@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
@@ -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"}
@@ -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":"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"}
@@ -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"}
@@ -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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"}