Skip to content

@uservane/vercel-ai: SurveyType

SurveyType = "nps" | "csat" | "ces" | "pmf"

Defined in: products/uservane/browser/dist/index.d.ts:16

@uservane/vercel-ai - agent-native capture for Vercel AI SDK hosts.

Thin positioning shim over @uservane/agent-core + @uservane/agent-react. Headless core (AgentController) + React <UserVaneProvider> / <InlineFeedback/>. Reuses @uservane/browser for bootstrap, decideShow, submit. Does not reimplement show-token, suppression, or sampling.

Session correlation (production linked path):

  1. Server: import { mintFeedbackToken } from "@uservane/vercel-ai/server" with the project SECRET key + the same sessionId passed to Langfuse propagateAttributes.
  2. Thread showToken + sessionId to the client.
  3. Client: controller.bind({ surveyId, showToken, sessionId }) then resolveTask. Submit carries the bound token + sessionId -> response stored linked.

Without bind(), the unbound bootstrap path still works (stored unlinked). Do not import the /server entry from client code (secret key must stay server-side). Observation-level auto-read remains deferred.

// NEEDS CEO VERIFICATION: observation-level auto-read (deferred)

import { UserVaneProvider, useUserVane } from "@uservane/vercel-ai";
<UserVaneProvider apiKey="uv_pk_live_..." surveySlug="post-task">
<Chat />
</UserVaneProvider>
// after server mints a bound token:
controller.bind({ surveyId, showToken, sessionId });
// at true resolution:
const { resolveTask } = useUserVane();
resolveTask({ outcome: "refunded" });

Headless-only: construct AgentController with headlessMode: true and supply setHeadlessContract({ isTaskOpen, onDismiss }) or shows are refused.