clitrigger 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 (201) hide show
  1. package/.env.example +9 -0
  2. package/LICENSE +21 -0
  3. package/README.md +186 -0
  4. package/bin/clitrigger.js +106 -0
  5. package/dist/client/assets/index-BkOCv65b.css +1 -0
  6. package/dist/client/assets/index-Fbf16Lh1.js +129 -0
  7. package/dist/client/index.html +24 -0
  8. package/dist/server/db/connection.d.ts +4 -0
  9. package/dist/server/db/connection.d.ts.map +1 -0
  10. package/dist/server/db/connection.js +24 -0
  11. package/dist/server/db/connection.js.map +1 -0
  12. package/dist/server/db/queries.d.ts +265 -0
  13. package/dist/server/db/queries.d.ts.map +1 -0
  14. package/dist/server/db/queries.js +836 -0
  15. package/dist/server/db/queries.js.map +1 -0
  16. package/dist/server/db/schema.d.ts +3 -0
  17. package/dist/server/db/schema.d.ts.map +1 -0
  18. package/dist/server/db/schema.js +325 -0
  19. package/dist/server/db/schema.js.map +1 -0
  20. package/dist/server/index.d.ts +5 -0
  21. package/dist/server/index.d.ts.map +1 -0
  22. package/dist/server/index.js +207 -0
  23. package/dist/server/index.js.map +1 -0
  24. package/dist/server/middleware/auth.d.ts +5 -0
  25. package/dist/server/middleware/auth.d.ts.map +1 -0
  26. package/dist/server/middleware/auth.js +45 -0
  27. package/dist/server/middleware/auth.js.map +1 -0
  28. package/dist/server/plugins/github/index.d.ts +3 -0
  29. package/dist/server/plugins/github/index.d.ts.map +1 -0
  30. package/dist/server/plugins/github/index.js +18 -0
  31. package/dist/server/plugins/github/index.js.map +1 -0
  32. package/dist/server/plugins/github/router.d.ts +4 -0
  33. package/dist/server/plugins/github/router.d.ts.map +1 -0
  34. package/dist/server/plugins/github/router.js +250 -0
  35. package/dist/server/plugins/github/router.js.map +1 -0
  36. package/dist/server/plugins/gstack/index.d.ts +3 -0
  37. package/dist/server/plugins/gstack/index.d.ts.map +1 -0
  38. package/dist/server/plugins/gstack/index.js +36 -0
  39. package/dist/server/plugins/gstack/index.js.map +1 -0
  40. package/dist/server/plugins/jira/index.d.ts +3 -0
  41. package/dist/server/plugins/jira/index.d.ts.map +1 -0
  42. package/dist/server/plugins/jira/index.js +19 -0
  43. package/dist/server/plugins/jira/index.js.map +1 -0
  44. package/dist/server/plugins/jira/router.d.ts +4 -0
  45. package/dist/server/plugins/jira/router.d.ts.map +1 -0
  46. package/dist/server/plugins/jira/router.js +332 -0
  47. package/dist/server/plugins/jira/router.js.map +1 -0
  48. package/dist/server/plugins/notion/index.d.ts +3 -0
  49. package/dist/server/plugins/notion/index.d.ts.map +1 -0
  50. package/dist/server/plugins/notion/index.js +17 -0
  51. package/dist/server/plugins/notion/index.js.map +1 -0
  52. package/dist/server/plugins/notion/router.d.ts +4 -0
  53. package/dist/server/plugins/notion/router.d.ts.map +1 -0
  54. package/dist/server/plugins/notion/router.js +313 -0
  55. package/dist/server/plugins/notion/router.js.map +1 -0
  56. package/dist/server/plugins/registry.d.ts +8 -0
  57. package/dist/server/plugins/registry.d.ts.map +1 -0
  58. package/dist/server/plugins/registry.js +31 -0
  59. package/dist/server/plugins/registry.js.map +1 -0
  60. package/dist/server/plugins/types.d.ts +32 -0
  61. package/dist/server/plugins/types.d.ts.map +1 -0
  62. package/dist/server/plugins/types.js +2 -0
  63. package/dist/server/plugins/types.js.map +1 -0
  64. package/dist/server/resources/gstack-skills/LICENSE +21 -0
  65. package/dist/server/resources/gstack-skills/benchmark/SKILL.md +528 -0
  66. package/dist/server/resources/gstack-skills/careful/SKILL.md +59 -0
  67. package/dist/server/resources/gstack-skills/cso/SKILL.md +898 -0
  68. package/dist/server/resources/gstack-skills/investigate/SKILL.md +474 -0
  69. package/dist/server/resources/gstack-skills/qa/SKILL.md +1055 -0
  70. package/dist/server/resources/gstack-skills/qa-only/SKILL.md +672 -0
  71. package/dist/server/resources/gstack-skills/review/SKILL.md +1044 -0
  72. package/dist/server/resources/gstack-skills/skills-manifest.d.ts +9 -0
  73. package/dist/server/resources/gstack-skills/skills-manifest.d.ts.map +1 -0
  74. package/dist/server/resources/gstack-skills/skills-manifest.js +52 -0
  75. package/dist/server/resources/gstack-skills/skills-manifest.js.map +1 -0
  76. package/dist/server/resources/gstack-skills/skills-manifest.ts +59 -0
  77. package/dist/server/routes/auth.d.ts +3 -0
  78. package/dist/server/routes/auth.d.ts.map +1 -0
  79. package/dist/server/routes/auth.js +70 -0
  80. package/dist/server/routes/auth.js.map +1 -0
  81. package/dist/server/routes/debug-logs.d.ts +3 -0
  82. package/dist/server/routes/debug-logs.d.ts.map +1 -0
  83. package/dist/server/routes/debug-logs.js +43 -0
  84. package/dist/server/routes/debug-logs.js.map +1 -0
  85. package/dist/server/routes/discussions.d.ts +3 -0
  86. package/dist/server/routes/discussions.d.ts.map +1 -0
  87. package/dist/server/routes/discussions.js +544 -0
  88. package/dist/server/routes/discussions.js.map +1 -0
  89. package/dist/server/routes/execution.d.ts +3 -0
  90. package/dist/server/routes/execution.d.ts.map +1 -0
  91. package/dist/server/routes/execution.js +339 -0
  92. package/dist/server/routes/execution.js.map +1 -0
  93. package/dist/server/routes/github.d.ts +3 -0
  94. package/dist/server/routes/github.d.ts.map +1 -0
  95. package/dist/server/routes/github.js +251 -0
  96. package/dist/server/routes/github.js.map +1 -0
  97. package/dist/server/routes/images.d.ts +17 -0
  98. package/dist/server/routes/images.d.ts.map +1 -0
  99. package/dist/server/routes/images.js +152 -0
  100. package/dist/server/routes/images.js.map +1 -0
  101. package/dist/server/routes/jira.d.ts +3 -0
  102. package/dist/server/routes/jira.d.ts.map +1 -0
  103. package/dist/server/routes/jira.js +333 -0
  104. package/dist/server/routes/jira.js.map +1 -0
  105. package/dist/server/routes/logs.d.ts +3 -0
  106. package/dist/server/routes/logs.d.ts.map +1 -0
  107. package/dist/server/routes/logs.js +156 -0
  108. package/dist/server/routes/logs.js.map +1 -0
  109. package/dist/server/routes/models.d.ts +3 -0
  110. package/dist/server/routes/models.d.ts.map +1 -0
  111. package/dist/server/routes/models.js +65 -0
  112. package/dist/server/routes/models.js.map +1 -0
  113. package/dist/server/routes/notion.d.ts +3 -0
  114. package/dist/server/routes/notion.d.ts.map +1 -0
  115. package/dist/server/routes/notion.js +312 -0
  116. package/dist/server/routes/notion.js.map +1 -0
  117. package/dist/server/routes/pipelines.d.ts +3 -0
  118. package/dist/server/routes/pipelines.d.ts.map +1 -0
  119. package/dist/server/routes/pipelines.js +315 -0
  120. package/dist/server/routes/pipelines.js.map +1 -0
  121. package/dist/server/routes/plugins.d.ts +3 -0
  122. package/dist/server/routes/plugins.d.ts.map +1 -0
  123. package/dist/server/routes/plugins.js +71 -0
  124. package/dist/server/routes/plugins.js.map +1 -0
  125. package/dist/server/routes/projects.d.ts +3 -0
  126. package/dist/server/routes/projects.d.ts.map +1 -0
  127. package/dist/server/routes/projects.js +557 -0
  128. package/dist/server/routes/projects.js.map +1 -0
  129. package/dist/server/routes/schedules.d.ts +3 -0
  130. package/dist/server/routes/schedules.d.ts.map +1 -0
  131. package/dist/server/routes/schedules.js +247 -0
  132. package/dist/server/routes/schedules.js.map +1 -0
  133. package/dist/server/routes/todos.d.ts +3 -0
  134. package/dist/server/routes/todos.d.ts.map +1 -0
  135. package/dist/server/routes/todos.js +103 -0
  136. package/dist/server/routes/todos.js.map +1 -0
  137. package/dist/server/routes/tunnel.d.ts +3 -0
  138. package/dist/server/routes/tunnel.d.ts.map +1 -0
  139. package/dist/server/routes/tunnel.js +44 -0
  140. package/dist/server/routes/tunnel.js.map +1 -0
  141. package/dist/server/services/claude-manager.d.ts +42 -0
  142. package/dist/server/services/claude-manager.d.ts.map +1 -0
  143. package/dist/server/services/claude-manager.js +275 -0
  144. package/dist/server/services/claude-manager.js.map +1 -0
  145. package/dist/server/services/cli-adapters.d.ts +35 -0
  146. package/dist/server/services/cli-adapters.d.ts.map +1 -0
  147. package/dist/server/services/cli-adapters.js +139 -0
  148. package/dist/server/services/cli-adapters.js.map +1 -0
  149. package/dist/server/services/debug-logger.d.ts +35 -0
  150. package/dist/server/services/debug-logger.d.ts.map +1 -0
  151. package/dist/server/services/debug-logger.js +168 -0
  152. package/dist/server/services/debug-logger.js.map +1 -0
  153. package/dist/server/services/discussion-orchestrator.d.ts +47 -0
  154. package/dist/server/services/discussion-orchestrator.d.ts.map +1 -0
  155. package/dist/server/services/discussion-orchestrator.js +599 -0
  156. package/dist/server/services/discussion-orchestrator.js.map +1 -0
  157. package/dist/server/services/log-streamer.d.ts +45 -0
  158. package/dist/server/services/log-streamer.d.ts.map +1 -0
  159. package/dist/server/services/log-streamer.js +348 -0
  160. package/dist/server/services/log-streamer.js.map +1 -0
  161. package/dist/server/services/orchestrator.d.ts +69 -0
  162. package/dist/server/services/orchestrator.d.ts.map +1 -0
  163. package/dist/server/services/orchestrator.js +642 -0
  164. package/dist/server/services/orchestrator.js.map +1 -0
  165. package/dist/server/services/pipeline-orchestrator.d.ts +43 -0
  166. package/dist/server/services/pipeline-orchestrator.d.ts.map +1 -0
  167. package/dist/server/services/pipeline-orchestrator.js +503 -0
  168. package/dist/server/services/pipeline-orchestrator.js.map +1 -0
  169. package/dist/server/services/prompt-guard.d.ts +19 -0
  170. package/dist/server/services/prompt-guard.d.ts.map +1 -0
  171. package/dist/server/services/prompt-guard.js +43 -0
  172. package/dist/server/services/prompt-guard.js.map +1 -0
  173. package/dist/server/services/scheduler.d.ts +43 -0
  174. package/dist/server/services/scheduler.d.ts.map +1 -0
  175. package/dist/server/services/scheduler.js +199 -0
  176. package/dist/server/services/scheduler.js.map +1 -0
  177. package/dist/server/services/skill-injector.d.ts +17 -0
  178. package/dist/server/services/skill-injector.d.ts.map +1 -0
  179. package/dist/server/services/skill-injector.js +60 -0
  180. package/dist/server/services/skill-injector.js.map +1 -0
  181. package/dist/server/services/tunnel-manager.d.ts +42 -0
  182. package/dist/server/services/tunnel-manager.d.ts.map +1 -0
  183. package/dist/server/services/tunnel-manager.js +265 -0
  184. package/dist/server/services/tunnel-manager.js.map +1 -0
  185. package/dist/server/services/worktree-manager.d.ts +117 -0
  186. package/dist/server/services/worktree-manager.d.ts.map +1 -0
  187. package/dist/server/services/worktree-manager.js +400 -0
  188. package/dist/server/services/worktree-manager.js.map +1 -0
  189. package/dist/server/websocket/broadcaster.d.ts +12 -0
  190. package/dist/server/websocket/broadcaster.d.ts.map +1 -0
  191. package/dist/server/websocket/broadcaster.js +23 -0
  192. package/dist/server/websocket/broadcaster.js.map +1 -0
  193. package/dist/server/websocket/events.d.ts +94 -0
  194. package/dist/server/websocket/events.d.ts.map +1 -0
  195. package/dist/server/websocket/events.js +2 -0
  196. package/dist/server/websocket/events.js.map +1 -0
  197. package/dist/server/websocket/index.d.ts +3 -0
  198. package/dist/server/websocket/index.d.ts.map +1 -0
  199. package/dist/server/websocket/index.js +82 -0
  200. package/dist/server/websocket/index.js.map +1 -0
  201. package/package.json +68 -0
@@ -0,0 +1,265 @@
1
+ import { spawn, execFile } from 'child_process';
2
+ import { EventEmitter } from 'events';
3
+ import { existsSync } from 'fs';
4
+ import { join } from 'path';
5
+ export class TunnelManager extends EventEmitter {
6
+ process = null;
7
+ url = null;
8
+ status = 'stopped';
9
+ cloudflaredPath = 'cloudflared';
10
+ /**
11
+ * Start a quick (unnamed) cloudflared tunnel.
12
+ * Runs: cloudflared tunnel --url http://localhost:<port>
13
+ * Parses stderr for the generated trycloudflare.com URL.
14
+ */
15
+ async startTunnel(port) {
16
+ if (this.status === 'running' || this.status === 'starting') {
17
+ throw new Error('Tunnel is already running or starting');
18
+ }
19
+ const installed = await this.isCloudflaredInstalled();
20
+ if (!installed) {
21
+ throw new Error('cloudflared is not installed. Install it with: winget install cloudflare.cloudflared (Windows) or brew install cloudflared (macOS)');
22
+ }
23
+ this.status = 'starting';
24
+ this.url = null;
25
+ return new Promise((resolve, reject) => {
26
+ const proc = spawn(this.cloudflaredPath, ['tunnel', '--url', `http://localhost:${port}`], {
27
+ stdio: ['ignore', 'pipe', 'pipe'],
28
+ shell: true,
29
+ });
30
+ this.process = proc;
31
+ const urlPattern = /https:\/\/[a-zA-Z0-9-]+\.trycloudflare\.com/;
32
+ let resolved = false;
33
+ // A timeout so we don't hang forever waiting for a URL
34
+ const timeout = setTimeout(() => {
35
+ if (!resolved) {
36
+ resolved = true;
37
+ this.status = 'error';
38
+ this.emit('error', new Error('Timed out waiting for tunnel URL'));
39
+ reject(new Error('Timed out waiting for tunnel URL (30s)'));
40
+ }
41
+ }, 30_000);
42
+ const handleOutput = (data) => {
43
+ const text = data.toString();
44
+ const match = text.match(urlPattern);
45
+ if (match && !resolved) {
46
+ resolved = true;
47
+ clearTimeout(timeout);
48
+ this.url = match[0];
49
+ this.status = 'running';
50
+ this.emit('url', this.url);
51
+ resolve(this.url);
52
+ }
53
+ };
54
+ // cloudflared outputs the URL to stderr
55
+ proc.stderr?.on('data', handleOutput);
56
+ // Also check stdout just in case
57
+ proc.stdout?.on('data', handleOutput);
58
+ proc.on('error', (err) => {
59
+ clearTimeout(timeout);
60
+ this.status = 'error';
61
+ this.process = null;
62
+ this.emit('error', err);
63
+ if (!resolved) {
64
+ resolved = true;
65
+ reject(err);
66
+ }
67
+ });
68
+ proc.on('exit', (code) => {
69
+ clearTimeout(timeout);
70
+ this.process = null;
71
+ if (this.status === 'running') {
72
+ this.status = 'stopped';
73
+ this.url = null;
74
+ this.emit('exit', code);
75
+ }
76
+ else if (!resolved) {
77
+ resolved = true;
78
+ this.status = 'error';
79
+ reject(new Error(`cloudflared exited with code ${code} before producing a URL`));
80
+ }
81
+ });
82
+ });
83
+ }
84
+ /**
85
+ * Start a named cloudflared tunnel.
86
+ * Runs: cloudflared tunnel run <tunnelName>
87
+ * The URL comes from the tunnel's DNS configuration (not parsed from output).
88
+ */
89
+ async startNamedTunnel(tunnelName, port) {
90
+ if (this.status === 'running' || this.status === 'starting') {
91
+ throw new Error('Tunnel is already running or starting');
92
+ }
93
+ const installed = await this.isCloudflaredInstalled();
94
+ if (!installed) {
95
+ throw new Error('cloudflared is not installed. Install it with: winget install cloudflare.cloudflared (Windows) or brew install cloudflared (macOS)');
96
+ }
97
+ this.status = 'starting';
98
+ this.url = null;
99
+ return new Promise((resolve, reject) => {
100
+ const proc = spawn(this.cloudflaredPath, ['tunnel', '--url', `http://localhost:${port}`, 'run', tunnelName], {
101
+ stdio: ['ignore', 'pipe', 'pipe'],
102
+ shell: true,
103
+ });
104
+ this.process = proc;
105
+ let resolved = false;
106
+ // For named tunnels, look for a connection registration message
107
+ const connPattern = /connection.*registered|Registered tunnel connection/i;
108
+ const urlPattern = /https:\/\/[a-zA-Z0-9.-]+/;
109
+ const timeout = setTimeout(() => {
110
+ if (!resolved) {
111
+ resolved = true;
112
+ // Named tunnels may not output a URL, but the tunnel is running
113
+ this.status = 'running';
114
+ const inferredUrl = `https://${tunnelName}.cfargotunnel.com`;
115
+ this.url = inferredUrl;
116
+ this.emit('url', inferredUrl);
117
+ resolve(inferredUrl);
118
+ }
119
+ }, 15_000);
120
+ const handleOutput = (data) => {
121
+ const text = data.toString();
122
+ if (connPattern.test(text) && !resolved) {
123
+ resolved = true;
124
+ clearTimeout(timeout);
125
+ // Try to find a URL in the output
126
+ const match = text.match(urlPattern);
127
+ this.url = match ? match[0] : `https://${tunnelName}.cfargotunnel.com`;
128
+ this.status = 'running';
129
+ this.emit('url', this.url);
130
+ resolve(this.url);
131
+ }
132
+ };
133
+ proc.stderr?.on('data', handleOutput);
134
+ proc.stdout?.on('data', handleOutput);
135
+ proc.on('error', (err) => {
136
+ clearTimeout(timeout);
137
+ this.status = 'error';
138
+ this.process = null;
139
+ this.emit('error', err);
140
+ if (!resolved) {
141
+ resolved = true;
142
+ reject(err);
143
+ }
144
+ });
145
+ proc.on('exit', (code) => {
146
+ clearTimeout(timeout);
147
+ this.process = null;
148
+ if (this.status === 'running') {
149
+ this.status = 'stopped';
150
+ this.url = null;
151
+ this.emit('exit', code);
152
+ }
153
+ else if (!resolved) {
154
+ resolved = true;
155
+ this.status = 'error';
156
+ reject(new Error(`cloudflared exited with code ${code}`));
157
+ }
158
+ });
159
+ });
160
+ }
161
+ /**
162
+ * Stop the running cloudflared tunnel process.
163
+ */
164
+ async stopTunnel() {
165
+ if (!this.process) {
166
+ this.status = 'stopped';
167
+ this.url = null;
168
+ return;
169
+ }
170
+ return new Promise((resolve) => {
171
+ const proc = this.process;
172
+ const forceKillTimeout = setTimeout(() => {
173
+ try {
174
+ proc.kill('SIGKILL');
175
+ }
176
+ catch {
177
+ // Process may already be dead
178
+ }
179
+ }, 5_000);
180
+ proc.once('exit', () => {
181
+ clearTimeout(forceKillTimeout);
182
+ this.process = null;
183
+ this.status = 'stopped';
184
+ this.url = null;
185
+ resolve();
186
+ });
187
+ try {
188
+ proc.kill('SIGTERM');
189
+ }
190
+ catch {
191
+ // Process may already be dead
192
+ clearTimeout(forceKillTimeout);
193
+ this.process = null;
194
+ this.status = 'stopped';
195
+ this.url = null;
196
+ resolve();
197
+ }
198
+ });
199
+ }
200
+ /**
201
+ * Get the current tunnel status and URL.
202
+ */
203
+ getTunnelStatus() {
204
+ return { status: this.status, url: this.url };
205
+ }
206
+ /**
207
+ * Resolve the full path to cloudflared, checking PATH first,
208
+ * then common Windows installation locations (winget, Program Files).
209
+ */
210
+ resolveCloudflaredPath() {
211
+ // 1) Try PATH first (works if cloudflared is globally accessible)
212
+ // execFileSync would throw, so we just return the bare name and let the caller test it.
213
+ // We'll verify in isCloudflaredInstalled.
214
+ if (process.platform === 'win32') {
215
+ const home = process.env.USERPROFILE || process.env.HOME || '';
216
+ const candidates = [
217
+ // winget package location
218
+ join(home, 'AppData', 'Local', 'Microsoft', 'WinGet', 'Packages', 'Cloudflare.cloudflared_Microsoft.Winget.Source_8wekyb3d8bbwe', 'cloudflared.exe'),
219
+ // winget links
220
+ join(home, 'AppData', 'Local', 'Microsoft', 'WinGet', 'Links', 'cloudflared.exe'),
221
+ // common manual install locations
222
+ join('C:', 'Program Files', 'cloudflared', 'cloudflared.exe'),
223
+ join('C:', 'Program Files (x86)', 'cloudflared', 'cloudflared.exe'),
224
+ ];
225
+ for (const candidate of candidates) {
226
+ if (existsSync(candidate)) {
227
+ return candidate;
228
+ }
229
+ }
230
+ }
231
+ return null;
232
+ }
233
+ /**
234
+ * Check if cloudflared is installed by running 'cloudflared --version'.
235
+ * Falls back to known installation paths on Windows if not found in PATH.
236
+ */
237
+ async isCloudflaredInstalled() {
238
+ // First try the current cloudflaredPath (default: 'cloudflared' = from PATH)
239
+ const inPath = await new Promise((resolve) => {
240
+ execFile('cloudflared', ['--version'], { shell: true }, (error) => {
241
+ resolve(!error);
242
+ });
243
+ });
244
+ if (inPath) {
245
+ this.cloudflaredPath = 'cloudflared';
246
+ return true;
247
+ }
248
+ // Fallback: try known installation paths
249
+ const resolved = this.resolveCloudflaredPath();
250
+ if (resolved) {
251
+ const works = await new Promise((resolve) => {
252
+ execFile(resolved, ['--version'], (error) => {
253
+ resolve(!error);
254
+ });
255
+ });
256
+ if (works) {
257
+ this.cloudflaredPath = resolved;
258
+ return true;
259
+ }
260
+ }
261
+ return false;
262
+ }
263
+ }
264
+ export const tunnelManager = new TunnelManager();
265
+ //# sourceMappingURL=tunnel-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tunnel-manager.js","sourceRoot":"","sources":["../../../src/server/services/tunnel-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,117 @@
1
+ export declare class WorktreeManager {
2
+ /**
3
+ * Sanitize a todo title into a valid branch name.
4
+ * Converts Korean/special chars to a safe slug, prefixed with "feature/".
5
+ */
6
+ sanitizeBranchName(title: string): string;
7
+ /**
8
+ * Check if a directory is inside a git repository.
9
+ */
10
+ isGitRepository(dirPath: string): Promise<boolean>;
11
+ /**
12
+ * Check if a directory is a valid git worktree (has .git file and can run git status).
13
+ */
14
+ isValidWorktree(worktreePath: string): Promise<boolean>;
15
+ /**
16
+ * Create a worktree for a todo item.
17
+ * Worktree path: <projectPath>/../worktrees/<branchName>
18
+ * Returns the absolute worktree path.
19
+ */
20
+ createWorktree(projectPath: string, branchName: string): Promise<string>;
21
+ /**
22
+ * Install npm dependencies in a worktree (root + client).
23
+ * Failures are logged but do not block worktree creation.
24
+ */
25
+ private installDependencies;
26
+ /**
27
+ * Remove a worktree and prune.
28
+ */
29
+ removeWorktree(projectPath: string, worktreePath: string): Promise<void>;
30
+ /**
31
+ * Remove a worktree, delete its branch, and clean up the DB record.
32
+ * Returns info about what was cleaned up.
33
+ */
34
+ cleanupWorktree(projectPath: string, worktreePath: string, branchName: string): Promise<{
35
+ worktreeRemoved: boolean;
36
+ branchDeleted: boolean;
37
+ }>;
38
+ /**
39
+ * Squash merge a source branch into a target worktree's branch.
40
+ * This takes all commits from sourceBranch and applies them as a single commit on the target.
41
+ */
42
+ squashMergeBranch(targetWorktreePath: string, sourceBranch: string): Promise<void>;
43
+ /**
44
+ * List all worktrees for a project.
45
+ */
46
+ listWorktrees(projectPath: string): Promise<Array<{
47
+ path: string;
48
+ branch: string;
49
+ }>>;
50
+ /**
51
+ * Get git status for a directory (repo or worktree).
52
+ * Returns branch info and file statuses.
53
+ */
54
+ /**
55
+ * Get git log (commit history) for a directory.
56
+ */
57
+ getGitLog(dirPath: string, options?: {
58
+ skip?: number;
59
+ limit?: number;
60
+ }): Promise<{
61
+ commits: Array<{
62
+ hash: string;
63
+ parentHashes: string[];
64
+ refs: string[];
65
+ message: string;
66
+ author: string;
67
+ date: string;
68
+ }>;
69
+ hasMore: boolean;
70
+ }>;
71
+ /**
72
+ * Get git refs (branches, tags, stash count) for a directory.
73
+ */
74
+ getGitRefs(dirPath: string): Promise<{
75
+ branches: Array<{
76
+ name: string;
77
+ current: boolean;
78
+ remote: boolean;
79
+ }>;
80
+ tags: string[];
81
+ stashCount: number;
82
+ }>;
83
+ gitStage(dirPath: string, files: string[]): Promise<void>;
84
+ gitUnstage(dirPath: string, files: string[]): Promise<void>;
85
+ gitCommit(dirPath: string, message: string): Promise<string>;
86
+ gitPull(dirPath: string, remote?: string, branch?: string): Promise<string>;
87
+ gitPush(dirPath: string, remote?: string, branch?: string, setUpstream?: boolean): Promise<string>;
88
+ gitFetch(dirPath: string, remote?: string, prune?: boolean): Promise<void>;
89
+ gitCreateBranch(dirPath: string, branchName: string, startPoint?: string): Promise<void>;
90
+ gitDeleteBranch(dirPath: string, branchName: string, force?: boolean): Promise<void>;
91
+ gitCheckout(dirPath: string, branchName: string): Promise<void>;
92
+ gitMerge(dirPath: string, sourceBranch: string): Promise<string>;
93
+ gitStashPush(dirPath: string, message?: string): Promise<void>;
94
+ gitStashPop(dirPath: string, index?: number): Promise<void>;
95
+ gitStashList(dirPath: string): Promise<Array<{
96
+ index: number;
97
+ message: string;
98
+ }>>;
99
+ gitDiscard(dirPath: string, files: string[]): Promise<void>;
100
+ gitDiscardAll(dirPath: string): Promise<void>;
101
+ gitCreateTag(dirPath: string, tagName: string, message?: string, commit?: string): Promise<void>;
102
+ gitDeleteTag(dirPath: string, tagName: string): Promise<void>;
103
+ gitDiff(dirPath: string, file?: string, staged?: boolean): Promise<string>;
104
+ getGitStatus(dirPath: string): Promise<{
105
+ branch: string;
106
+ tracking: string | null;
107
+ ahead: number;
108
+ behind: number;
109
+ files: Array<{
110
+ path: string;
111
+ index: string;
112
+ working_dir: string;
113
+ }>;
114
+ }>;
115
+ }
116
+ export declare const worktreeManager: WorktreeManager;
117
+ //# sourceMappingURL=worktree-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worktree-manager.d.ts","sourceRoot":"","sources":["../../../src/server/services/worktree-manager.ts"],"names":[],"mappings":"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"}