supbuddy 3.0.8 → 3.0.9

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.
@@ -37777,6 +37777,12 @@ function projectsNeedingVmMigration(projects) {
37777
37777
  return projects.filter((p) => p.isolation === "vm");
37778
37778
  }
37779
37779
  const ALL_SCOPE_KEYS = Object.keys(McpScopesSchema.shape);
37780
+ function dnsResolverRepairNeeded(resolver) {
37781
+ if (resolver.in_sync !== false) return false;
37782
+ const hasMissing = Array.isArray(resolver.missing) && resolver.missing.length > 0;
37783
+ const hasExtra = Array.isArray(resolver.extra) && resolver.extra.length > 0;
37784
+ return hasMissing || hasExtra;
37785
+ }
37780
37786
  const readTools = {
37781
37787
  list_pending_vm_migrations: async () => {
37782
37788
  const projects = useStore.getState().projects;
@@ -37829,19 +37835,19 @@ const readTools = {
37829
37835
  error: e.message
37830
37836
  })) : Promise.resolve({ ok: false, resolved: [], reachable: [], error: `caddy not alive (status=${proxyStatus})` })
37831
37837
  ]);
37832
- const dnsResolverRepairNeeded = resolver.in_sync === false && Array.isArray(resolver.missing) && resolver.missing.length > 0;
37838
+ const resolverRepairNeeded = dnsResolverRepairNeeded(resolver);
37833
37839
  return {
37834
37840
  worker: { running: true, uptime_ms: process.uptime() * 1e3 },
37835
37841
  mcp_server: s.mcpServerState,
37836
37842
  proxy: {
37837
37843
  ...s.proxyState,
37838
- needsPrivilegedRepair: s.proxyState.needsPrivilegedRepair || dnsResolverRepairNeeded,
37844
+ needsPrivilegedRepair: s.proxyState.needsPrivilegedRepair || resolverRepairNeeded,
37839
37845
  status: proxyStatus,
37840
37846
  liveness
37841
37847
  },
37842
37848
  dns: {
37843
37849
  server: { ...s.dnsState, probe },
37844
- resolver: { ...resolver, repairNeeded: dnsResolverRepairNeeded },
37850
+ resolver: { ...resolver, repairNeeded: resolverRepairNeeded },
37845
37851
  reachability
37846
37852
  }
37847
37853
  };
@@ -41549,6 +41555,7 @@ const executors = {
41549
41555
  const m = useStore.getState().mappings.find((x) => x.id === args.id_or_domain || x.domain === args.id_or_domain);
41550
41556
  if (!m) throw new McpError("plan_not_found", `Mapping not found`);
41551
41557
  const trashed = await trashMapping(m.id, `mcp:${ctx.client_id}`);
41558
+ await applyMappingChangeSideEffects();
41552
41559
  return { trashed_id: trashed.id };
41553
41560
  },
41554
41561
  cloud_teardown: async (args) => daemonCloudTeardownProject(args.project_id),
@@ -51161,7 +51168,7 @@ process.on("message", async (message) => {
51161
51168
  store2.deleteMapping(id);
51162
51169
  process.send({ type: "mappings:delete:response", data: { success: true } });
51163
51170
  if (isCaddyRunning()) {
51164
- reloadCaddyConfig().catch((err) => console.error("[Worker] Failed to reload Caddy after mapping delete:", err));
51171
+ reloadCaddyConfig().then(() => reapplyDnsResolversIfDrifted("mappings:delete")).catch((err) => console.error("[Worker] Caddy reload / DNS re-apply after mapping delete failed:", err));
51165
51172
  }
51166
51173
  break;
51167
51174
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "supbuddy",
3
- "version": "3.0.8",
3
+ "version": "3.0.9",
4
4
  "description": "Run multiple Supabase projects at once on custom local domains with HTTPS. A headless CLI and daemon (proxy, DNS, Supabase/Compose lifecycle, MCP) for macOS and Linux.",
5
5
  "keywords": [
6
6
  "supabase",