different-ai/openwork · error

Task creation did not return a session ID.

Error message

Task creation did not return a session ID.

What it means

After createTaskInWorkspace resolves, the action expects a session ID string; a null return means the backend accepted task creation but the response did not carry a session identifier. This throws so the caller never continues with a sessionId-less result. It signals an API contract violation rather than a user mistake.

Source

Thrown at apps/app/src/react-app/domains/session/control/session-control-actions.ts:98

    opencodeClient,
    refreshRouteState,
    selectedSessionId,
    selectedWorkspaceId,
    selectedWorkspaceRoot,
    sessionsByWorkspaceId,
    workspaces,
  } = input;

  const createTaskControlAction = useMemo<OpenworkControlAction>(() => ({
    id: "session.create_task",
    label: "Create a new task",
    description: "Create a new session in the selected workspace.",
    sideEffect: "mutation",
    disabled: !canCreateTask || !selectedWorkspaceId,
    execute: async () => {
      if (!selectedWorkspaceId) throw new Error("Cannot create a task without a selected workspace.");
      const sessionId = await createTaskInWorkspace(selectedWorkspaceId);
      if (sessionId === null) throw new Error("Task creation did not return a session ID.");
      return sessionId;
    },
  }), [canCreateTask, createTaskInWorkspace, selectedWorkspaceId]);
  useControlAction(createTaskControlAction);

  const listSessionsControlAction = useMemo<OpenworkControlAction>(() => ({
    id: "session.list_sessions",
    label: "List available sessions",
    description: "Return the list of sessions across workspaces so the user can ask to open one by name.",
    kind: "query",
    effects: { data: "read", ui: "none", external: false },
    sideEffect: "none",
    execute: () => {
      const out: { sessionId: string; title: string; workspace: string; updatedAt: number }[] = [];
      for (const workspace of workspaces) {
        const list = sessionsByWorkspaceId[workspace.id] ?? [];
        for (const session of list) {
          const sessionId = session.id?.trim() ?? "";

View on GitHub (pinned to 2b7df46e8a)

Solutions

  1. Inspect the network response of the task-creation call and confirm the session ID field is present; fix the server response or update the client's response parsing.
  2. Check for version mismatch between the OpenWork app and server and align versions.
  3. Retry creation; if it reproduces, capture the response payload and file a bug against the server endpoint.

Example fix

// before
const sessionId = await createTaskInWorkspace(selectedWorkspaceId);
if (sessionId === null) throw new Error("Task creation did not return a session ID.");
// after (surface server payload)
const sessionId = await createTaskInWorkspace(selectedWorkspaceId);
if (sessionId === null) {
  const raw = await debugLastResponse();
  throw new Error(`Task creation did not return a session ID. Response: ${raw}`);
}
Defensive patterns

Strategy: try-catch

Validate before calling

const response = await createTaskInWorkspace(id);
if (response !== null && typeof response !== "string") {
  throw new Error("Unexpected createTask response shape");
}

Type guard

function isSessionId(v: string | null): v is string {
  return typeof v === "string" && v.length > 0;
}

Try / catch

try {
  const sessionId = await createTaskInWorkspace(workspaceId);
  if (sessionId === null) throw new Error("Task creation did not return a session ID.");
} catch (e) {
  logServerError(e); // capture raw response for the backend bug report
  showToast("Task creation failed — server returned no session");
}

Prevention

When it happens

Trigger: createTaskInWorkspace(selectedWorkspaceId) resolves to null — e.g. the server returned a malformed/empty body, a 2xx response whose payload lacks sessionId, or the client wrapper returns null on unexpected response shapes.

Common situations: Backend/client version skew (server response schema changed), a proxy stripping the response body, or an OpenWork server bug where session creation succeeds but the session record isn't returned.

Related errors


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