different-ai/openwork · error

This install link returned incomplete setup details.

Error message

This install link returned incomplete setup details.

What it means

After a successful /v1/install-config response, fetchInstallConfig runs parseInstallConfig on the payload. If the payload does not validate into an InstallConfig (missing required fields), it throws "This install link returned incomplete setup details." The server replied 2xx but with a body the client considers incomplete.

Source

Thrown at ee/apps/den-web/app/(den)/_components/install-screen.tsx:171

  };
}

async function fetchInstallConfig(token: string | null) {
  const path = token ? `/v1/install-config?token=${encodeURIComponent(token)}` : "/v1/me/install-config";
  const { response, payload } = await requestJson(
    path,
    { method: "GET" },
    12000,
  );
  if (!response.ok) {
    if (!token && response.status === 401) {
      throw new Error("Sign in to your Den portal to install OpenWork.");
    }
    throw new Error(getInstallConfigErrorMessage(payload, response.status));
  }
  const parsed = parseInstallConfig(payload);
  if (!parsed) {
    throw new Error("This install link returned incomplete setup details.");
  }
  return parsed;
}

function installHref(config: InstallConfig, platform: InstallPlatform, token: string | null) {
  return token
    ? buildInstallDownloadHref(config.apiUrl, platform, token)
    : buildAuthenticatedInstallDownloadHref(config.apiUrl, platform);
}

type StepState = "complete" | "active" | "pending";

const STEP_BADGE: Record<StepState, string> = {
  complete: "bg-emerald-50 text-emerald-600",
  active: "bg-[#101828] text-white",
  pending: "bg-slate-100 text-slate-400",
};

View on GitHub (pinned to 2b7df46e8a)

Solutions

  1. Log/inspect the raw payload and compare against parseInstallConfig's required fields to see what is missing.
  2. Update the Den server (or web client) so both sides agree on the install-config schema.
  3. Retry later if the server was mid-deploy; if persistent, report the server returning invalid install-config.

Example fix

// before: server omits apiUrl -> parse fails
{ "platforms": { ... } }
// after: server includes all required fields
{ "apiUrl": "https://den.example.com", "platforms": { ... } }
Defensive patterns

Strategy: type-guard

Validate before calling

function isInstallConfig(p) {
  return typeof p === "object" && p !== null &&
    typeof p.apiUrl === "string" && p.apiUrl.length > 0 &&
    typeof p.platforms === "object" && p.platforms !== null;
}

Type guard

function isInstallConfig(p) {
  return typeof p === "object" && p !== null && "apiUrl" in p && typeof p.apiUrl === "string";
}

Try / catch

try {
  const config = await fetchInstallConfig(token);
} catch (err) {
  if (err.message === "This install link returned incomplete setup details.") {
    // server/client schema mismatch: show a 'contact admin / retry' state
  } else throw err;
}

Prevention

When it happens

Trigger: Server returns 200 with a JSON payload missing required install-config fields (e.g. no API URL, platform assets, or config sections the parser requires).

Common situations: Den server and web client version skew (new/old schema fields); a proxy or error page returning 200 with HTML; server-side feature flag returning a partial config.

Understand the failure class

Background: Schema validation failed / invalid input schema: payload rejected because its shape doesn't match the expected schema — this error's family across 28 libraries.

Related errors


AI-assisted analysis of different-ai/openwork@2b7df46e8a (2026-09-01). Data as JSON: /api/errors/7dd4eba8d3cc4081. Report an issue: GitHub.