episoda 0.2.23 → 0.2.25
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/daemon/daemon-process.js +73 -19
- package/dist/daemon/daemon-process.js.map +1 -1
- package/dist/hooks/post-checkout +12 -1
- package/dist/index.js +147 -133
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -2696,7 +2696,7 @@ var require_package = __commonJS({
|
|
|
2696
2696
|
"package.json"(exports2, module2) {
|
|
2697
2697
|
module2.exports = {
|
|
2698
2698
|
name: "episoda",
|
|
2699
|
-
version: "0.2.
|
|
2699
|
+
version: "0.2.24",
|
|
2700
2700
|
description: "CLI tool for Episoda local development workflow orchestration",
|
|
2701
2701
|
main: "dist/index.js",
|
|
2702
2702
|
types: "dist/index.d.ts",
|
|
@@ -6174,6 +6174,28 @@ async function fetchWithAuth(url, options = {}, retryOnUnauthorized = true) {
|
|
|
6174
6174
|
}
|
|
6175
6175
|
return response;
|
|
6176
6176
|
}
|
|
6177
|
+
async function fetchEnvVars() {
|
|
6178
|
+
try {
|
|
6179
|
+
const config = await (0, import_core10.loadConfig)();
|
|
6180
|
+
if (!config?.project_id) {
|
|
6181
|
+
console.warn("[Daemon] EP973: No project_id in config, cannot fetch env vars");
|
|
6182
|
+
return {};
|
|
6183
|
+
}
|
|
6184
|
+
const apiUrl = config.api_url || "https://episoda.dev";
|
|
6185
|
+
const response = await fetchWithAuth(`${apiUrl}/api/cli/env-vars`);
|
|
6186
|
+
if (!response.ok) {
|
|
6187
|
+
console.warn(`[Daemon] EP973: Failed to fetch env vars: ${response.status}`);
|
|
6188
|
+
return {};
|
|
6189
|
+
}
|
|
6190
|
+
const data = await response.json();
|
|
6191
|
+
const envVars = data.env_vars || {};
|
|
6192
|
+
console.log(`[Daemon] EP973: Fetched ${Object.keys(envVars).length} env vars from server`);
|
|
6193
|
+
return envVars;
|
|
6194
|
+
} catch (error) {
|
|
6195
|
+
console.warn("[Daemon] EP973: Error fetching env vars:", error instanceof Error ? error.message : error);
|
|
6196
|
+
return {};
|
|
6197
|
+
}
|
|
6198
|
+
}
|
|
6177
6199
|
var Daemon = class _Daemon {
|
|
6178
6200
|
// 60 seconds
|
|
6179
6201
|
constructor() {
|
|
@@ -6688,7 +6710,27 @@ var Daemon = class _Daemon {
|
|
|
6688
6710
|
const tunnelManager = getTunnelManager();
|
|
6689
6711
|
let result;
|
|
6690
6712
|
if (cmd.action === "start") {
|
|
6691
|
-
const
|
|
6713
|
+
const worktree = await getWorktreeInfoForModule(cmd.moduleUid);
|
|
6714
|
+
if (!worktree) {
|
|
6715
|
+
console.error(`[Daemon] EP973: Cannot resolve worktree path for ${cmd.moduleUid}`);
|
|
6716
|
+
await client.send({
|
|
6717
|
+
type: "tunnel_result",
|
|
6718
|
+
commandId: message.id,
|
|
6719
|
+
result: { success: false, error: "Cannot resolve worktree path - missing config slugs" }
|
|
6720
|
+
});
|
|
6721
|
+
return;
|
|
6722
|
+
}
|
|
6723
|
+
if (!worktree.exists) {
|
|
6724
|
+
console.error(`[Daemon] EP973: Worktree not found at ${worktree.path}`);
|
|
6725
|
+
await client.send({
|
|
6726
|
+
type: "tunnel_result",
|
|
6727
|
+
commandId: message.id,
|
|
6728
|
+
result: { success: false, error: `Worktree not found at ${worktree.path}` }
|
|
6729
|
+
});
|
|
6730
|
+
return;
|
|
6731
|
+
}
|
|
6732
|
+
console.log(`[Daemon] EP973: Using worktree path ${worktree.path} for ${cmd.moduleUid}`);
|
|
6733
|
+
const port = cmd.port || detectDevPort(worktree.path);
|
|
6692
6734
|
const previewUrl = `https://${cmd.moduleUid.toLowerCase()}-${cmd.projectUid.toLowerCase()}.episoda.site`;
|
|
6693
6735
|
const reportTunnelStatus = async (data) => {
|
|
6694
6736
|
const config2 = await (0, import_core10.loadConfig)();
|
|
@@ -6723,8 +6765,10 @@ var Daemon = class _Daemon {
|
|
|
6723
6765
|
});
|
|
6724
6766
|
try {
|
|
6725
6767
|
await tunnelManager.initialize();
|
|
6726
|
-
|
|
6727
|
-
const
|
|
6768
|
+
const devConfig = await (0, import_core10.loadConfig)();
|
|
6769
|
+
const devServerScript = devConfig?.project_settings?.worktree_dev_server_script;
|
|
6770
|
+
console.log(`[Daemon] EP973: Ensuring dev server is running in ${worktree.path} on port ${port}...`);
|
|
6771
|
+
const devServerResult = await ensureDevServer(worktree.path, port, cmd.moduleUid, devServerScript);
|
|
6728
6772
|
if (!devServerResult.success) {
|
|
6729
6773
|
const errorMsg2 = `Dev server failed to start: ${devServerResult.error}`;
|
|
6730
6774
|
console.error(`[Daemon] ${errorMsg2}`);
|
|
@@ -7055,17 +7099,18 @@ var Daemon = class _Daemon {
|
|
|
7055
7099
|
}
|
|
7056
7100
|
const worktreeConfig = await (0, import_core10.loadConfig)();
|
|
7057
7101
|
const setupConfig = worktreeConfig?.project_settings;
|
|
7058
|
-
const
|
|
7102
|
+
const envVars = await fetchEnvVars();
|
|
7103
|
+
const hasEnvVars = Object.keys(envVars).length > 0;
|
|
7059
7104
|
if (setupConfig?.worktree_copy_files?.length || setupConfig?.worktree_setup_script || hasEnvVars) {
|
|
7060
7105
|
console.log(`[Daemon] EP959: Starting async worktree setup for ${moduleUid}`);
|
|
7061
7106
|
await worktreeManager.updateWorktreeStatus(moduleUid, "pending");
|
|
7062
7107
|
this.runWorktreeSetupAsync(
|
|
7063
7108
|
moduleUid,
|
|
7064
7109
|
worktreeManager,
|
|
7065
|
-
setupConfig
|
|
7066
|
-
setupConfig
|
|
7110
|
+
setupConfig?.worktree_copy_files || [],
|
|
7111
|
+
setupConfig?.worktree_setup_script,
|
|
7067
7112
|
worktree.path,
|
|
7068
|
-
|
|
7113
|
+
envVars
|
|
7069
7114
|
).then(() => {
|
|
7070
7115
|
console.log(`[Daemon] EP959: Setup complete for ${moduleUid}, starting tunnel`);
|
|
7071
7116
|
this.startTunnelForModule(moduleUid, worktree.path);
|
|
@@ -7359,22 +7404,31 @@ var Daemon = class _Daemon {
|
|
|
7359
7404
|
const data = await response.json();
|
|
7360
7405
|
const serverSettings = data.settings;
|
|
7361
7406
|
if (serverSettings) {
|
|
7362
|
-
const
|
|
7407
|
+
const projectSlug = data.project_slug || config.project_slug;
|
|
7408
|
+
const workspaceSlug = data.workspace_slug || config.workspace_slug;
|
|
7409
|
+
if (data.project_slug && !config.project_slug) {
|
|
7410
|
+
console.log(`[Daemon] EP973: Synced project_slug: ${data.project_slug}`);
|
|
7411
|
+
}
|
|
7412
|
+
if (data.workspace_slug && !config.workspace_slug) {
|
|
7413
|
+
console.log(`[Daemon] EP973: Synced workspace_slug: ${data.workspace_slug}`);
|
|
7414
|
+
}
|
|
7363
7415
|
const updatedConfig = {
|
|
7364
7416
|
...config,
|
|
7417
|
+
// EP973: Include synced slugs
|
|
7418
|
+
project_slug: projectSlug,
|
|
7419
|
+
workspace_slug: workspaceSlug,
|
|
7365
7420
|
project_settings: {
|
|
7366
7421
|
...config.project_settings,
|
|
7367
7422
|
worktree_setup_script: serverSettings.worktree_setup_script,
|
|
7368
7423
|
worktree_cleanup_script: serverSettings.worktree_cleanup_script,
|
|
7369
7424
|
worktree_dev_server_script: serverSettings.worktree_dev_server_script,
|
|
7370
|
-
worktree_env_vars: envVars,
|
|
7371
7425
|
// Keep deprecated field for backward compatibility
|
|
7372
7426
|
worktree_copy_files: serverSettings.worktree_copy_files,
|
|
7373
7427
|
cached_at: Date.now()
|
|
7374
7428
|
}
|
|
7375
7429
|
};
|
|
7376
7430
|
await (0, import_core10.saveConfig)(updatedConfig);
|
|
7377
|
-
console.log(`[Daemon]
|
|
7431
|
+
console.log(`[Daemon] EP973: Project settings synced (slugs: ${projectSlug}/${workspaceSlug})`);
|
|
7378
7432
|
}
|
|
7379
7433
|
} catch (error) {
|
|
7380
7434
|
console.warn("[Daemon] EP964: Failed to sync project settings:", error instanceof Error ? error.message : error);
|
|
@@ -7951,14 +8005,13 @@ var Daemon = class _Daemon {
|
|
|
7951
8005
|
} catch (e) {
|
|
7952
8006
|
console.warn(`[Daemon] EP833: Failed to fetch module details for project lookup`);
|
|
7953
8007
|
}
|
|
7954
|
-
const
|
|
7955
|
-
|
|
7956
|
-
|
|
7957
|
-
|
|
7958
|
-
console.warn(`[Daemon] EP833: Could not find project ${projectId}, using fallback`);
|
|
8008
|
+
const worktree = await getWorktreeInfoForModule(moduleUid);
|
|
8009
|
+
if (!worktree) {
|
|
8010
|
+
console.error(`[Daemon] EP973: Cannot resolve worktree path for ${moduleUid} - missing config slugs`);
|
|
8011
|
+
return;
|
|
7959
8012
|
}
|
|
7960
|
-
if (!
|
|
7961
|
-
console.error(`[Daemon]
|
|
8013
|
+
if (!worktree.exists) {
|
|
8014
|
+
console.error(`[Daemon] EP973: Worktree not found at ${worktree.path}`);
|
|
7962
8015
|
return;
|
|
7963
8016
|
}
|
|
7964
8017
|
const { isPortInUse: isPortInUse2 } = await Promise.resolve().then(() => (init_port_check(), port_check_exports));
|
|
@@ -7970,7 +8023,8 @@ var Daemon = class _Daemon {
|
|
|
7970
8023
|
await killProcessOnPort(port);
|
|
7971
8024
|
}
|
|
7972
8025
|
}
|
|
7973
|
-
const
|
|
8026
|
+
const devServerScript = config.project_settings?.worktree_dev_server_script;
|
|
8027
|
+
const startResult2 = await ensureDevServer(worktree.path, port, moduleUid, devServerScript);
|
|
7974
8028
|
if (!startResult2.success) {
|
|
7975
8029
|
console.error(`[Daemon] EP932: Failed to start dev server: ${startResult2.error}`);
|
|
7976
8030
|
return;
|