Sessions API

使用工作階段列表和載入功能管理對話歷史。

Sessions API 提供管理對話歷史的端點,讓使用者可以檢視和載入過去的對話。

概觀

Sessions API 提供兩個主要端點:

  • GET /sessions - 列出所有使用者對話
  • GET /sessions/[id] - 取得特定對話的訊息

列出工作階段

src/app/api/lens/agent/sessions/route.ts
import { NextResponse } from "next/server";
import { auth } from "@/auth";
import { LensClient } from "@lens-os/sdk";

const client = new LensClient({ apiKey: process.env.LENS_OS_API_KEY! });

export async function GET() {
  const session = await auth();
  if (!session?.user) {
    return NextResponse.json(
      { success: false, error: "Unauthorized" },
      { status: 401 }
    );
  }

  const userId = session.user.id || "default-user";

  try {
    const sessions = await client.listSessions(userId);

    // Add title for each session (first user message)
    const enriched = await Promise.all(
      sessions.map(async (s) => {
        try {
          const messages = await client.getMessages(s.id);
          const firstUserMsg = messages.find((m) => m.role === "user");
          const title = typeof firstUserMsg?.content === "string"
            ? firstUserMsg.content.slice(0, 60)
            : "New Conversation";

          return {
            ...s,
            title,
            messageCount: messages.length,
          };
        } catch {
          return { ...s, title: "New Conversation", messageCount: 0 };
        }
      })
    );

    return NextResponse.json({ success: true, sessions: enriched });
  } catch (err) {
    console.error("[Sessions API] Error:", err);
    return NextResponse.json(
      { success: false, error: "Failed to list sessions" },
      { status: 500 }
    );
  }
}

取得工作階段訊息

src/app/api/lens/agent/sessions/[id]/route.ts
import { NextRequest, NextResponse } from "next/server";
import { auth } from "@/auth";
import { LensClient } from "@lens-os/sdk";

const client = new LensClient({ apiKey: process.env.LENS_OS_API_KEY! });

export async function GET(
  _request: NextRequest,
  { params }: { params: Promise<{ id: string }> }
) {
  const session = await auth();
  if (!session?.user) {
    return NextResponse.json(
      { success: false, error: "Unauthorized" },
      { status: 401 }
    );
  }

  const { id: sessionId } = await params;

  try {
    const messages = await client.getMessages(sessionId);
    return NextResponse.json({ success: true, messages });
  } catch (err) {
    console.error("[Sessions API] Error:", err);
    return NextResponse.json(
      { success: false, error: "Failed to load messages" },
      { status: 500 }
    );
  }
}

回應格式

列出工作階段

回應
{
  success: true,
  sessions: [
    {
      id: "session-123",
      created_at: "2024-01-15T10:30:00Z",
      title: "Help me find TypeScript books",
      messageCount: 8
    },
    // ...
  ]
}

取得訊息

回應
{
  success: true,
  messages: [
    { role: "user", content: "Help me find TypeScript books" },
    { role: "assistant", content: "Let me search for you..." },
    // ...
  ]
}

Tip

工作階段會由 SDK 自動建立和儲存。你不需要手動管理工作階段的建立或儲存。