import { createKontextClient } from "@kontext-dev/js-sdk/client";
import { toKontextTools } from "@kontext-dev/js-sdk/ai";
import { generateText } from "ai";
import { openai } from "@ai-sdk/openai";
import open from "open";
import http from "node:http";
import readline from "readline";
function waitForCallback(): Promise<string> {
return new Promise((resolve, reject) => {
const server = http.createServer((req, res) => {
const url = new URL(req.url ?? "/", "http://localhost:3333");
if (url.pathname === "/callback") {
res.writeHead(200, { "Content-Type": "text/html" });
res.end("<h1>Authenticated. You can close this tab.</h1>");
server.close();
resolve(url.toString());
}
});
server.listen(3333);
server.on("error", reject);
});
}
const client = createKontextClient({
clientId: "app_your-app-id",
redirectUri: "http://localhost:3333/callback",
onAuthRequired: async (url) => {
await open(url.toString());
return await waitForCallback();
},
});
await client.connect();
const { tools, systemPrompt, integrations } = await toKontextTools(client);
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
const prompt = await new Promise<string>((resolve) =>
rl.question("You: ", resolve)
);
const result = await generateText({
model: openai("gpt-4o"),
tools,
system: systemPrompt,
prompt,
maxSteps: 5,
});
console.log(result.text);
await client.disconnect();