episoda 0.2.5 → 0.2.8
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/dist/index.d.ts +2 -8
- package/dist/index.js +3735 -82
- package/dist/index.js.map +1 -1
- package/package.json +5 -4
- package/dist/commands/auth.d.ts +0 -22
- package/dist/commands/auth.d.ts.map +0 -1
- package/dist/commands/auth.js +0 -384
- package/dist/commands/auth.js.map +0 -1
- package/dist/commands/dev.d.ts +0 -20
- package/dist/commands/dev.d.ts.map +0 -1
- package/dist/commands/dev.js +0 -305
- package/dist/commands/dev.js.map +0 -1
- package/dist/commands/status.d.ts +0 -13
- package/dist/commands/status.d.ts.map +0 -1
- package/dist/commands/status.js +0 -102
- package/dist/commands/status.js.map +0 -1
- package/dist/commands/stop.d.ts +0 -17
- package/dist/commands/stop.d.ts.map +0 -1
- package/dist/commands/stop.js +0 -81
- package/dist/commands/stop.js.map +0 -1
- package/dist/daemon/daemon-manager.d.ts +0 -71
- package/dist/daemon/daemon-manager.d.ts.map +0 -1
- package/dist/daemon/daemon-manager.js +0 -289
- package/dist/daemon/daemon-manager.js.map +0 -1
- package/dist/daemon/daemon-process.d.ts +0 -13
- package/dist/daemon/daemon-process.d.ts.map +0 -1
- package/dist/daemon/daemon-process.js +0 -662
- package/dist/daemon/daemon-process.js.map +0 -1
- package/dist/daemon/identity-server.d.ts +0 -51
- package/dist/daemon/identity-server.d.ts.map +0 -1
- package/dist/daemon/identity-server.js +0 -162
- package/dist/daemon/identity-server.js.map +0 -1
- package/dist/daemon/machine-id.d.ts +0 -36
- package/dist/daemon/machine-id.d.ts.map +0 -1
- package/dist/daemon/machine-id.js +0 -195
- package/dist/daemon/machine-id.js.map +0 -1
- package/dist/daemon/project-tracker.d.ts +0 -92
- package/dist/daemon/project-tracker.d.ts.map +0 -1
- package/dist/daemon/project-tracker.js +0 -259
- package/dist/daemon/project-tracker.js.map +0 -1
- package/dist/dev-wrapper.d.ts +0 -88
- package/dist/dev-wrapper.d.ts.map +0 -1
- package/dist/dev-wrapper.js +0 -288
- package/dist/dev-wrapper.js.map +0 -1
- package/dist/framework-detector.d.ts +0 -29
- package/dist/framework-detector.d.ts.map +0 -1
- package/dist/framework-detector.js +0 -276
- package/dist/framework-detector.js.map +0 -1
- package/dist/git-helpers/git-credential-helper.d.ts +0 -29
- package/dist/git-helpers/git-credential-helper.d.ts.map +0 -1
- package/dist/git-helpers/git-credential-helper.js +0 -349
- package/dist/git-helpers/git-credential-helper.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/ipc/ipc-client.d.ts +0 -116
- package/dist/ipc/ipc-client.d.ts.map +0 -1
- package/dist/ipc/ipc-client.js +0 -216
- package/dist/ipc/ipc-client.js.map +0 -1
- package/dist/ipc/ipc-server.d.ts +0 -55
- package/dist/ipc/ipc-server.d.ts.map +0 -1
- package/dist/ipc/ipc-server.js +0 -177
- package/dist/ipc/ipc-server.js.map +0 -1
- package/dist/output.d.ts +0 -48
- package/dist/output.d.ts.map +0 -1
- package/dist/output.js +0 -129
- package/dist/output.js.map +0 -1
- package/dist/utils/port-check.d.ts +0 -15
- package/dist/utils/port-check.d.ts.map +0 -1
- package/dist/utils/port-check.js +0 -79
- package/dist/utils/port-check.js.map +0 -1
- package/dist/utils/update-checker.d.ts +0 -23
- package/dist/utils/update-checker.d.ts.map +0 -1
- package/dist/utils/update-checker.js +0 -95
- package/dist/utils/update-checker.js.map +0 -1
|
@@ -1,259 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Project tracking for daemon
|
|
4
|
-
*
|
|
5
|
-
* Manages ~/.episoda/projects.json which tracks all projects
|
|
6
|
-
* the daemon is monitoring.
|
|
7
|
-
*
|
|
8
|
-
* Format:
|
|
9
|
-
* {
|
|
10
|
-
* "projects": [
|
|
11
|
-
* {
|
|
12
|
-
* "id": "proj_abc123",
|
|
13
|
-
* "path": "/Users/alan/Dev/my-project",
|
|
14
|
-
* "name": "my-project",
|
|
15
|
-
* "added_at": "2025-01-18T10:30:00.000Z",
|
|
16
|
-
* "last_active": "2025-01-18T12:45:00.000Z"
|
|
17
|
-
* }
|
|
18
|
-
* ]
|
|
19
|
-
* }
|
|
20
|
-
*/
|
|
21
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
22
|
-
if (k2 === undefined) k2 = k;
|
|
23
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
24
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
25
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
26
|
-
}
|
|
27
|
-
Object.defineProperty(o, k2, desc);
|
|
28
|
-
}) : (function(o, m, k, k2) {
|
|
29
|
-
if (k2 === undefined) k2 = k;
|
|
30
|
-
o[k2] = m[k];
|
|
31
|
-
}));
|
|
32
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
33
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
34
|
-
}) : function(o, v) {
|
|
35
|
-
o["default"] = v;
|
|
36
|
-
});
|
|
37
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
38
|
-
var ownKeys = function(o) {
|
|
39
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
40
|
-
var ar = [];
|
|
41
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
42
|
-
return ar;
|
|
43
|
-
};
|
|
44
|
-
return ownKeys(o);
|
|
45
|
-
};
|
|
46
|
-
return function (mod) {
|
|
47
|
-
if (mod && mod.__esModule) return mod;
|
|
48
|
-
var result = {};
|
|
49
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
50
|
-
__setModuleDefault(result, mod);
|
|
51
|
-
return result;
|
|
52
|
-
};
|
|
53
|
-
})();
|
|
54
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
55
|
-
exports.addProject = addProject;
|
|
56
|
-
exports.removeProject = removeProject;
|
|
57
|
-
exports.getProject = getProject;
|
|
58
|
-
exports.getProjectById = getProjectById;
|
|
59
|
-
exports.getAllProjects = getAllProjects;
|
|
60
|
-
exports.touchProject = touchProject;
|
|
61
|
-
exports.cleanupStaleProjects = cleanupStaleProjects;
|
|
62
|
-
exports.clearAllProjects = clearAllProjects;
|
|
63
|
-
const fs = __importStar(require("fs"));
|
|
64
|
-
const path = __importStar(require("path"));
|
|
65
|
-
const core_1 = require("@episoda/core");
|
|
66
|
-
/**
|
|
67
|
-
* Get path to projects.json file
|
|
68
|
-
*/
|
|
69
|
-
function getProjectsFilePath() {
|
|
70
|
-
return path.join((0, core_1.getConfigDir)(), 'projects.json');
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* Read projects from file
|
|
74
|
-
*
|
|
75
|
-
* @returns Projects data, or empty list if file doesn't exist
|
|
76
|
-
*/
|
|
77
|
-
function readProjects() {
|
|
78
|
-
const projectsPath = getProjectsFilePath();
|
|
79
|
-
try {
|
|
80
|
-
if (!fs.existsSync(projectsPath)) {
|
|
81
|
-
return { projects: [] };
|
|
82
|
-
}
|
|
83
|
-
const content = fs.readFileSync(projectsPath, 'utf-8');
|
|
84
|
-
const data = JSON.parse(content);
|
|
85
|
-
// Validate structure
|
|
86
|
-
if (!data.projects || !Array.isArray(data.projects)) {
|
|
87
|
-
console.warn('Invalid projects.json structure, resetting');
|
|
88
|
-
return { projects: [] };
|
|
89
|
-
}
|
|
90
|
-
return data;
|
|
91
|
-
}
|
|
92
|
-
catch (error) {
|
|
93
|
-
console.error('Error reading projects.json:', error);
|
|
94
|
-
return { projects: [] };
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
/**
|
|
98
|
-
* Write projects to file
|
|
99
|
-
*/
|
|
100
|
-
function writeProjects(data) {
|
|
101
|
-
const projectsPath = getProjectsFilePath();
|
|
102
|
-
try {
|
|
103
|
-
// Ensure directory exists
|
|
104
|
-
const dir = path.dirname(projectsPath);
|
|
105
|
-
if (!fs.existsSync(dir)) {
|
|
106
|
-
fs.mkdirSync(dir, { recursive: true });
|
|
107
|
-
}
|
|
108
|
-
fs.writeFileSync(projectsPath, JSON.stringify(data, null, 2), 'utf-8');
|
|
109
|
-
}
|
|
110
|
-
catch (error) {
|
|
111
|
-
throw new Error(`Failed to write projects.json: ${error}`);
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
/**
|
|
115
|
-
* Add or update a project
|
|
116
|
-
*
|
|
117
|
-
* EP593: Now enforces one entry per projectId to prevent duplicate connections.
|
|
118
|
-
* When adding a project:
|
|
119
|
-
* - If same path exists, update last_active
|
|
120
|
-
* - If same projectId exists with different path, REPLACE the old entry
|
|
121
|
-
* (user wants git operations in the new directory)
|
|
122
|
-
* - Otherwise, add new project
|
|
123
|
-
*
|
|
124
|
-
* @param projectId Supabase project ID
|
|
125
|
-
* @param projectPath Absolute path to project
|
|
126
|
-
* @returns The tracked project
|
|
127
|
-
*/
|
|
128
|
-
function addProject(projectId, projectPath) {
|
|
129
|
-
const data = readProjects();
|
|
130
|
-
const now = new Date().toISOString();
|
|
131
|
-
// Check if project already exists by path (exact match)
|
|
132
|
-
const existingByPath = data.projects.find(p => p.path === projectPath);
|
|
133
|
-
if (existingByPath) {
|
|
134
|
-
// Update existing project
|
|
135
|
-
existingByPath.id = projectId; // Update ID in case it changed
|
|
136
|
-
existingByPath.last_active = now;
|
|
137
|
-
writeProjects(data);
|
|
138
|
-
return existingByPath;
|
|
139
|
-
}
|
|
140
|
-
// EP593: Check if project exists by ID (different path)
|
|
141
|
-
// This prevents multiple entries for the same project from different directories
|
|
142
|
-
const existingByIdIndex = data.projects.findIndex(p => p.id === projectId);
|
|
143
|
-
if (existingByIdIndex !== -1) {
|
|
144
|
-
const existingById = data.projects[existingByIdIndex];
|
|
145
|
-
console.log(`[ProjectTracker] Replacing project entry: ${existingById.path} -> ${projectPath}`);
|
|
146
|
-
// Remove the old entry
|
|
147
|
-
data.projects.splice(existingByIdIndex, 1);
|
|
148
|
-
}
|
|
149
|
-
// Add new project
|
|
150
|
-
const projectName = path.basename(projectPath);
|
|
151
|
-
const newProject = {
|
|
152
|
-
id: projectId,
|
|
153
|
-
path: projectPath,
|
|
154
|
-
name: projectName,
|
|
155
|
-
added_at: now,
|
|
156
|
-
last_active: now,
|
|
157
|
-
};
|
|
158
|
-
data.projects.push(newProject);
|
|
159
|
-
writeProjects(data);
|
|
160
|
-
return newProject;
|
|
161
|
-
}
|
|
162
|
-
/**
|
|
163
|
-
* Remove a project
|
|
164
|
-
*
|
|
165
|
-
* @param projectPath Absolute path to project
|
|
166
|
-
* @returns true if removed, false if not found
|
|
167
|
-
*/
|
|
168
|
-
function removeProject(projectPath) {
|
|
169
|
-
const data = readProjects();
|
|
170
|
-
const initialLength = data.projects.length;
|
|
171
|
-
data.projects = data.projects.filter(p => p.path !== projectPath);
|
|
172
|
-
if (data.projects.length < initialLength) {
|
|
173
|
-
writeProjects(data);
|
|
174
|
-
return true;
|
|
175
|
-
}
|
|
176
|
-
return false;
|
|
177
|
-
}
|
|
178
|
-
/**
|
|
179
|
-
* Get a project by path
|
|
180
|
-
*
|
|
181
|
-
* @param projectPath Absolute path to project
|
|
182
|
-
* @returns Project if found, null otherwise
|
|
183
|
-
*/
|
|
184
|
-
function getProject(projectPath) {
|
|
185
|
-
const data = readProjects();
|
|
186
|
-
return data.projects.find(p => p.path === projectPath) || null;
|
|
187
|
-
}
|
|
188
|
-
/**
|
|
189
|
-
* Get a project by ID
|
|
190
|
-
*
|
|
191
|
-
* @param projectId Supabase project ID
|
|
192
|
-
* @returns Project if found, null otherwise
|
|
193
|
-
*/
|
|
194
|
-
function getProjectById(projectId) {
|
|
195
|
-
const data = readProjects();
|
|
196
|
-
return data.projects.find(p => p.id === projectId) || null;
|
|
197
|
-
}
|
|
198
|
-
/**
|
|
199
|
-
* Get all tracked projects
|
|
200
|
-
*
|
|
201
|
-
* @returns Array of tracked projects
|
|
202
|
-
*/
|
|
203
|
-
function getAllProjects() {
|
|
204
|
-
const data = readProjects();
|
|
205
|
-
return data.projects;
|
|
206
|
-
}
|
|
207
|
-
/**
|
|
208
|
-
* Update last active timestamp for a project
|
|
209
|
-
*
|
|
210
|
-
* @param projectPath Absolute path to project
|
|
211
|
-
*/
|
|
212
|
-
function touchProject(projectPath) {
|
|
213
|
-
const data = readProjects();
|
|
214
|
-
const project = data.projects.find(p => p.path === projectPath);
|
|
215
|
-
if (project) {
|
|
216
|
-
project.last_active = new Date().toISOString();
|
|
217
|
-
writeProjects(data);
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
/**
|
|
221
|
-
* Clean up stale projects
|
|
222
|
-
*
|
|
223
|
-
* Removes projects that:
|
|
224
|
-
* - Haven't been active in N days
|
|
225
|
-
* - Directory no longer exists
|
|
226
|
-
*
|
|
227
|
-
* @param maxAgeDays Maximum age in days (default: 30)
|
|
228
|
-
* @returns Number of projects removed
|
|
229
|
-
*/
|
|
230
|
-
function cleanupStaleProjects(maxAgeDays = 30) {
|
|
231
|
-
const data = readProjects();
|
|
232
|
-
const now = Date.now();
|
|
233
|
-
const maxAgeMs = maxAgeDays * 24 * 60 * 60 * 1000;
|
|
234
|
-
const initialLength = data.projects.length;
|
|
235
|
-
data.projects = data.projects.filter(project => {
|
|
236
|
-
// Check if directory still exists
|
|
237
|
-
if (!fs.existsSync(project.path)) {
|
|
238
|
-
return false;
|
|
239
|
-
}
|
|
240
|
-
// Check if too old
|
|
241
|
-
const lastActive = new Date(project.last_active).getTime();
|
|
242
|
-
const age = now - lastActive;
|
|
243
|
-
return age < maxAgeMs;
|
|
244
|
-
});
|
|
245
|
-
const removedCount = initialLength - data.projects.length;
|
|
246
|
-
if (removedCount > 0) {
|
|
247
|
-
writeProjects(data);
|
|
248
|
-
}
|
|
249
|
-
return removedCount;
|
|
250
|
-
}
|
|
251
|
-
/**
|
|
252
|
-
* Clear all projects
|
|
253
|
-
*
|
|
254
|
-
* USE WITH CAUTION - removes all tracked projects
|
|
255
|
-
*/
|
|
256
|
-
function clearAllProjects() {
|
|
257
|
-
writeProjects({ projects: [] });
|
|
258
|
-
}
|
|
259
|
-
//# sourceMappingURL=project-tracker.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"project-tracker.js","sourceRoot":"","sources":["../../src/daemon/project-tracker.ts"],"names":[],"mappings":"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"}
|
package/dist/dev-wrapper.d.ts
DELETED
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Dev Server Wrapper
|
|
3
|
-
*
|
|
4
|
-
* This module wraps the user's dev server command and keeps it running
|
|
5
|
-
* while maintaining the WebSocket connection to episoda.dev
|
|
6
|
-
*/
|
|
7
|
-
export interface DevServerStatus {
|
|
8
|
-
running: boolean;
|
|
9
|
-
pid?: number;
|
|
10
|
-
command: string[];
|
|
11
|
-
restartCount: number;
|
|
12
|
-
connectedToCloud: boolean;
|
|
13
|
-
}
|
|
14
|
-
export interface DevWrapperOptions {
|
|
15
|
-
command?: string[];
|
|
16
|
-
cwd?: string;
|
|
17
|
-
autoRestart?: boolean;
|
|
18
|
-
wsUrl?: string;
|
|
19
|
-
token?: string;
|
|
20
|
-
projectId?: string;
|
|
21
|
-
userId?: string;
|
|
22
|
-
workspaceId?: string;
|
|
23
|
-
apiUrl?: string;
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* DevServerWrapper class manages the dev server process and WebSocket connection
|
|
27
|
-
*/
|
|
28
|
-
export declare class DevServerWrapper {
|
|
29
|
-
private devProcess?;
|
|
30
|
-
private wsClient?;
|
|
31
|
-
private gitExecutor;
|
|
32
|
-
private command?;
|
|
33
|
-
private cwd;
|
|
34
|
-
private autoRestart;
|
|
35
|
-
private restartCount;
|
|
36
|
-
private shuttingDown;
|
|
37
|
-
private wsUrl?;
|
|
38
|
-
private token?;
|
|
39
|
-
private projectId?;
|
|
40
|
-
private userId?;
|
|
41
|
-
private workspaceId?;
|
|
42
|
-
private apiUrl?;
|
|
43
|
-
private connectionOnlyMode;
|
|
44
|
-
constructor(options: DevWrapperOptions);
|
|
45
|
-
/**
|
|
46
|
-
* Start the dev server and WebSocket connection
|
|
47
|
-
*/
|
|
48
|
-
start(): Promise<void>;
|
|
49
|
-
/**
|
|
50
|
-
* Start the dev server process
|
|
51
|
-
*/
|
|
52
|
-
private startDevServer;
|
|
53
|
-
/**
|
|
54
|
-
* Connect to episoda.dev WebSocket
|
|
55
|
-
*/
|
|
56
|
-
private connectWebSocket;
|
|
57
|
-
/**
|
|
58
|
-
* Handle git command from server
|
|
59
|
-
*/
|
|
60
|
-
private handleGitCommand;
|
|
61
|
-
/**
|
|
62
|
-
* Format git command for display
|
|
63
|
-
*/
|
|
64
|
-
private formatGitCommand;
|
|
65
|
-
/**
|
|
66
|
-
* Set up signal handlers for graceful shutdown
|
|
67
|
-
*/
|
|
68
|
-
private setupSignalHandlers;
|
|
69
|
-
/**
|
|
70
|
-
* Gracefully shutdown dev server and WebSocket
|
|
71
|
-
*/
|
|
72
|
-
shutdown(): Promise<void>;
|
|
73
|
-
/**
|
|
74
|
-
* Get current status
|
|
75
|
-
*/
|
|
76
|
-
getStatus(): DevServerStatus;
|
|
77
|
-
}
|
|
78
|
-
/**
|
|
79
|
-
* Wrap and run a dev server command
|
|
80
|
-
* @param command - Command to run (e.g., ["npm", "start"])
|
|
81
|
-
* @param options - Additional options
|
|
82
|
-
*/
|
|
83
|
-
export declare function wrapDevServer(command: string[], options?: Partial<DevWrapperOptions>): Promise<DevServerWrapper>;
|
|
84
|
-
/**
|
|
85
|
-
* Stop the wrapped dev server
|
|
86
|
-
*/
|
|
87
|
-
export declare function stopDevServer(): Promise<void>;
|
|
88
|
-
//# sourceMappingURL=dev-wrapper.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dev-wrapper.d.ts","sourceRoot":"","sources":["../src/dev-wrapper.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,gBAAgB,EAAE,OAAO,CAAA;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,UAAU,CAAC,CAAc;IACjC,OAAO,CAAC,QAAQ,CAAC,CAAe;IAChC,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,OAAO,CAAC,CAAU;IAC1B,OAAO,CAAC,GAAG,CAAQ;IACnB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,YAAY,CAAI;IACxB,OAAO,CAAC,YAAY,CAAQ;IAC5B,OAAO,CAAC,KAAK,CAAC,CAAQ;IACtB,OAAO,CAAC,KAAK,CAAC,CAAQ;IACtB,OAAO,CAAC,SAAS,CAAC,CAAQ;IAC1B,OAAO,CAAC,MAAM,CAAC,CAAQ;IACvB,OAAO,CAAC,WAAW,CAAC,CAAQ;IAC5B,OAAO,CAAC,MAAM,CAAC,CAAQ;IACvB,OAAO,CAAC,kBAAkB,CAAS;gBAEvB,OAAO,EAAE,iBAAiB;IActC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAmB5B;;OAEG;YACW,cAAc;IAyC5B;;OAEG;YACW,gBAAgB;IAyC9B;;OAEG;YACW,gBAAgB;IAwC9B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAqBxB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAU3B;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IA8C/B;;OAEG;IACH,SAAS,IAAI,eAAe;CAS7B;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,GACnC,OAAO,CAAC,gBAAgB,CAAC,CAQ3B;AAOD;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAKnD"}
|
package/dist/dev-wrapper.js
DELETED
|
@@ -1,288 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Dev Server Wrapper
|
|
4
|
-
*
|
|
5
|
-
* This module wraps the user's dev server command and keeps it running
|
|
6
|
-
* while maintaining the WebSocket connection to episoda.dev
|
|
7
|
-
*/
|
|
8
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.DevServerWrapper = void 0;
|
|
10
|
-
exports.wrapDevServer = wrapDevServer;
|
|
11
|
-
exports.stopDevServer = stopDevServer;
|
|
12
|
-
const child_process_1 = require("child_process");
|
|
13
|
-
const core_1 = require("@episoda/core");
|
|
14
|
-
const output_1 = require("./output");
|
|
15
|
-
/**
|
|
16
|
-
* DevServerWrapper class manages the dev server process and WebSocket connection
|
|
17
|
-
*/
|
|
18
|
-
class DevServerWrapper {
|
|
19
|
-
constructor(options) {
|
|
20
|
-
this.restartCount = 0;
|
|
21
|
-
this.shuttingDown = false;
|
|
22
|
-
this.command = options.command;
|
|
23
|
-
this.cwd = options.cwd || process.cwd();
|
|
24
|
-
this.autoRestart = options.autoRestart ?? false;
|
|
25
|
-
this.wsUrl = options.wsUrl;
|
|
26
|
-
this.token = options.token;
|
|
27
|
-
this.projectId = options.projectId;
|
|
28
|
-
this.userId = options.userId;
|
|
29
|
-
this.workspaceId = options.workspaceId;
|
|
30
|
-
this.apiUrl = options.apiUrl;
|
|
31
|
-
this.connectionOnlyMode = !options.command || options.command.length === 0;
|
|
32
|
-
this.gitExecutor = new core_1.GitExecutor();
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Start the dev server and WebSocket connection
|
|
36
|
-
*/
|
|
37
|
-
async start() {
|
|
38
|
-
// Set up signal handlers for graceful shutdown
|
|
39
|
-
this.setupSignalHandlers();
|
|
40
|
-
// Start WebSocket connection (if credentials provided)
|
|
41
|
-
if (this.wsUrl && this.token) {
|
|
42
|
-
await this.connectWebSocket();
|
|
43
|
-
}
|
|
44
|
-
// Start dev server (skip if in connection-only mode)
|
|
45
|
-
if (!this.connectionOnlyMode && this.command) {
|
|
46
|
-
await this.startDevServer();
|
|
47
|
-
}
|
|
48
|
-
else if (this.connectionOnlyMode) {
|
|
49
|
-
output_1.status.info('Running in connection-only mode (no dev server wrapped)');
|
|
50
|
-
output_1.status.info('Connection will be maintained until you press Ctrl+C');
|
|
51
|
-
output_1.status.info('');
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* Start the dev server process
|
|
56
|
-
*/
|
|
57
|
-
async startDevServer() {
|
|
58
|
-
if (!this.command || this.command.length === 0) {
|
|
59
|
-
throw new Error('No command provided to start dev server');
|
|
60
|
-
}
|
|
61
|
-
output_1.status.info(`Starting dev server: ${this.command.join(' ')}`);
|
|
62
|
-
this.devProcess = (0, child_process_1.spawn)(this.command[0], this.command.slice(1), {
|
|
63
|
-
cwd: this.cwd,
|
|
64
|
-
stdio: ['inherit', 'inherit', 'inherit'], // Forward all stdio
|
|
65
|
-
shell: true
|
|
66
|
-
});
|
|
67
|
-
// Track process events
|
|
68
|
-
this.devProcess.on('exit', (code, signal) => {
|
|
69
|
-
if (this.shuttingDown) {
|
|
70
|
-
output_1.status.info('Dev server stopped');
|
|
71
|
-
return;
|
|
72
|
-
}
|
|
73
|
-
if (code === 0) {
|
|
74
|
-
output_1.status.success('Dev server exited successfully');
|
|
75
|
-
}
|
|
76
|
-
else {
|
|
77
|
-
output_1.status.error(`Dev server exited with code ${code}${signal ? ` (signal: ${signal})` : ''}`);
|
|
78
|
-
}
|
|
79
|
-
// Auto-restart if enabled
|
|
80
|
-
if (this.autoRestart && !this.shuttingDown) {
|
|
81
|
-
this.restartCount++;
|
|
82
|
-
output_1.status.info(`Auto-restarting dev server (attempt ${this.restartCount})...`);
|
|
83
|
-
setTimeout(() => {
|
|
84
|
-
this.startDevServer();
|
|
85
|
-
}, 2000); // Wait 2 seconds before restart
|
|
86
|
-
}
|
|
87
|
-
});
|
|
88
|
-
this.devProcess.on('error', (error) => {
|
|
89
|
-
output_1.status.error(`Dev server error: ${error.message}`);
|
|
90
|
-
});
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* Connect to episoda.dev WebSocket
|
|
94
|
-
*/
|
|
95
|
-
async connectWebSocket() {
|
|
96
|
-
if (!this.wsUrl || !this.token) {
|
|
97
|
-
output_1.status.debug('WebSocket credentials not provided, skipping connection');
|
|
98
|
-
return;
|
|
99
|
-
}
|
|
100
|
-
try {
|
|
101
|
-
output_1.status.info('Connecting to episoda.dev...');
|
|
102
|
-
this.wsClient = new core_1.EpisodaClient();
|
|
103
|
-
// Set up event handlers BEFORE connecting
|
|
104
|
-
this.wsClient.on('command', async (event) => {
|
|
105
|
-
if (event.type === 'command') {
|
|
106
|
-
// Type narrowing: event is { type: 'command'; id: string; command: GitCommand }
|
|
107
|
-
const { id, command } = event;
|
|
108
|
-
await this.handleGitCommand(id, command);
|
|
109
|
-
}
|
|
110
|
-
});
|
|
111
|
-
this.wsClient.on('ping', async () => {
|
|
112
|
-
// Ping handled automatically by client
|
|
113
|
-
output_1.status.debug('Received ping from server');
|
|
114
|
-
});
|
|
115
|
-
this.wsClient.on('error', (event) => {
|
|
116
|
-
if (event.type === 'error') {
|
|
117
|
-
// Type narrowing: event is { type: 'error'; code: string; message: string }
|
|
118
|
-
const { message: errMsg } = event;
|
|
119
|
-
output_1.status.error(`WebSocket error: ${errMsg}`);
|
|
120
|
-
}
|
|
121
|
-
});
|
|
122
|
-
// Connect to server
|
|
123
|
-
await this.wsClient.connect(this.wsUrl, this.token);
|
|
124
|
-
output_1.status.success(`Connected to episoda.dev${this.projectId ? ` (${this.projectId})` : ''}`);
|
|
125
|
-
}
|
|
126
|
-
catch (error) {
|
|
127
|
-
output_1.status.warning(`Failed to connect to episoda.dev: ${error instanceof Error ? error.message : String(error)}`);
|
|
128
|
-
output_1.status.info('Dev server will continue running without cloud connection');
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
/**
|
|
132
|
-
* Handle git command from server
|
|
133
|
-
*/
|
|
134
|
-
async handleGitCommand(commandId, command) {
|
|
135
|
-
try {
|
|
136
|
-
// Log the command
|
|
137
|
-
const commandStr = this.formatGitCommand(command);
|
|
138
|
-
(0, output_1.printGitCommand)(commandStr);
|
|
139
|
-
// Execute git command
|
|
140
|
-
const result = await this.gitExecutor.execute(command, {
|
|
141
|
-
cwd: this.cwd
|
|
142
|
-
});
|
|
143
|
-
// Print result
|
|
144
|
-
console.log((0, output_1.formatResult)(result));
|
|
145
|
-
// Send result back to server
|
|
146
|
-
if (this.wsClient) {
|
|
147
|
-
await this.wsClient.send({
|
|
148
|
-
type: 'result',
|
|
149
|
-
commandId,
|
|
150
|
-
result
|
|
151
|
-
});
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
catch (error) {
|
|
155
|
-
output_1.status.error(`Failed to execute git command: ${error instanceof Error ? error.message : String(error)}`);
|
|
156
|
-
// Send error result to server
|
|
157
|
-
if (this.wsClient) {
|
|
158
|
-
await this.wsClient.send({
|
|
159
|
-
type: 'result',
|
|
160
|
-
commandId,
|
|
161
|
-
result: {
|
|
162
|
-
success: false,
|
|
163
|
-
error: 'UNKNOWN_ERROR',
|
|
164
|
-
output: error instanceof Error ? error.message : String(error)
|
|
165
|
-
}
|
|
166
|
-
});
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
/**
|
|
171
|
-
* Format git command for display
|
|
172
|
-
*/
|
|
173
|
-
formatGitCommand(command) {
|
|
174
|
-
switch (command.action) {
|
|
175
|
-
case 'checkout':
|
|
176
|
-
return `git checkout ${command.create ? '-b ' : ''}${command.branch}`;
|
|
177
|
-
case 'create_branch':
|
|
178
|
-
return `git checkout -b ${command.branch}${command.from ? ` ${command.from}` : ''}`;
|
|
179
|
-
case 'commit':
|
|
180
|
-
return `git commit -m "${command.message}"${command.files ? ` ${command.files.join(' ')}` : ''}`;
|
|
181
|
-
case 'push':
|
|
182
|
-
return `git push${command.force ? ' --force' : ''}${command.setUpstream ? ' -u origin ' : ' '}${command.branch}`;
|
|
183
|
-
case 'status':
|
|
184
|
-
return 'git status';
|
|
185
|
-
case 'pull':
|
|
186
|
-
return `git pull${command.branch ? ` origin ${command.branch}` : ''}`;
|
|
187
|
-
case 'delete_branch':
|
|
188
|
-
return `git branch ${command.force ? '-D' : '-d'} ${command.branch}`;
|
|
189
|
-
default:
|
|
190
|
-
return 'git (unknown command)';
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
/**
|
|
194
|
-
* Set up signal handlers for graceful shutdown
|
|
195
|
-
*/
|
|
196
|
-
setupSignalHandlers() {
|
|
197
|
-
const shutdown = async () => {
|
|
198
|
-
await this.shutdown();
|
|
199
|
-
process.exit(0);
|
|
200
|
-
};
|
|
201
|
-
process.on('SIGINT', shutdown);
|
|
202
|
-
process.on('SIGTERM', shutdown);
|
|
203
|
-
}
|
|
204
|
-
/**
|
|
205
|
-
* Gracefully shutdown dev server and WebSocket
|
|
206
|
-
*/
|
|
207
|
-
async shutdown() {
|
|
208
|
-
if (this.shuttingDown) {
|
|
209
|
-
return;
|
|
210
|
-
}
|
|
211
|
-
this.shuttingDown = true;
|
|
212
|
-
output_1.status.info('Shutting down...');
|
|
213
|
-
// Disconnect WebSocket
|
|
214
|
-
if (this.wsClient) {
|
|
215
|
-
try {
|
|
216
|
-
await this.wsClient.disconnect();
|
|
217
|
-
output_1.status.debug('WebSocket disconnected');
|
|
218
|
-
}
|
|
219
|
-
catch (error) {
|
|
220
|
-
output_1.status.debug(`WebSocket disconnect error: ${error}`);
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
// Stop dev server
|
|
224
|
-
if (this.devProcess && !this.devProcess.killed) {
|
|
225
|
-
try {
|
|
226
|
-
this.devProcess.kill('SIGTERM');
|
|
227
|
-
// Wait up to 5 seconds for graceful shutdown
|
|
228
|
-
await new Promise((resolve) => {
|
|
229
|
-
const timeout = setTimeout(() => {
|
|
230
|
-
if (this.devProcess && !this.devProcess.killed) {
|
|
231
|
-
output_1.status.warning('Force killing dev server...');
|
|
232
|
-
this.devProcess.kill('SIGKILL');
|
|
233
|
-
}
|
|
234
|
-
resolve();
|
|
235
|
-
}, 5000);
|
|
236
|
-
this.devProcess?.on('exit', () => {
|
|
237
|
-
clearTimeout(timeout);
|
|
238
|
-
resolve();
|
|
239
|
-
});
|
|
240
|
-
});
|
|
241
|
-
}
|
|
242
|
-
catch (error) {
|
|
243
|
-
output_1.status.debug(`Dev server shutdown error: ${error}`);
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
output_1.status.success('Shutdown complete');
|
|
247
|
-
}
|
|
248
|
-
/**
|
|
249
|
-
* Get current status
|
|
250
|
-
*/
|
|
251
|
-
getStatus() {
|
|
252
|
-
return {
|
|
253
|
-
running: this.connectionOnlyMode ? true : (this.devProcess !== undefined && !this.devProcess.killed),
|
|
254
|
-
pid: this.devProcess?.pid,
|
|
255
|
-
command: this.command || [],
|
|
256
|
-
restartCount: this.restartCount,
|
|
257
|
-
connectedToCloud: this.wsClient?.getStatus().connected || false
|
|
258
|
-
};
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
exports.DevServerWrapper = DevServerWrapper;
|
|
262
|
-
/**
|
|
263
|
-
* Wrap and run a dev server command
|
|
264
|
-
* @param command - Command to run (e.g., ["npm", "start"])
|
|
265
|
-
* @param options - Additional options
|
|
266
|
-
*/
|
|
267
|
-
async function wrapDevServer(command, options) {
|
|
268
|
-
const wrapper = new DevServerWrapper({
|
|
269
|
-
command,
|
|
270
|
-
...options
|
|
271
|
-
});
|
|
272
|
-
await wrapper.start();
|
|
273
|
-
return wrapper;
|
|
274
|
-
}
|
|
275
|
-
/**
|
|
276
|
-
* Global wrapper instance for tracking
|
|
277
|
-
*/
|
|
278
|
-
let globalWrapper = null;
|
|
279
|
-
/**
|
|
280
|
-
* Stop the wrapped dev server
|
|
281
|
-
*/
|
|
282
|
-
async function stopDevServer() {
|
|
283
|
-
if (globalWrapper) {
|
|
284
|
-
await globalWrapper.shutdown();
|
|
285
|
-
globalWrapper = null;
|
|
286
|
-
}
|
|
287
|
-
}
|
|
288
|
-
//# sourceMappingURL=dev-wrapper.js.map
|
package/dist/dev-wrapper.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dev-wrapper.js","sourceRoot":"","sources":["../src/dev-wrapper.ts"],"names":[],"mappings":"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"}
|