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
- Log/inspect the raw payload and compare against parseInstallConfig's required fields to see what is missing.
- Update the Den server (or web client) so both sides agree on the install-config schema.
- 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
- Keep Den server and web client versions in lockstep (shared schema/types).
- Zod-validate install-config on the server before responding 200.
- Log raw payloads when parse fails to spot proxies returning HTML with 200.
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
- Invalid cloud provider sync response.
- Invalid cloud provider sync status response.
- invalid_cloud_plugin
- Environment variable store has an invalid format
- workflow_current_input_invalid
AI-assisted analysis of different-ai/openwork@2b7df46e8a (2026-09-01).
Data as JSON: /api/errors/7dd4eba8d3cc4081.
Report an issue: GitHub.