feat: initial Lam Agent extension (#1)

This commit was merged in pull request #1.
This commit is contained in:
2026-10-03 20:32:40 +00:00
parent 1d39aabb50
commit 8b507e7953
36 changed files with 7136 additions and 2 deletions
+30
View File
@@ -0,0 +1,30 @@
import { DEFAULT_SYSTEM_PROMPT, RECENCY_HINT } from "./constants";
import type { ApiMessage, ChatTurn } from "./types";
/**
* Turns stored turns into the message array sent to the model.
*
* Only completed question/answer pairs are replayed. The intermediate tool
* messages from a previous turn are intentionally dropped: they are noise once
* the answer is written, and replaying them would re-send large page contents
* on every subsequent request.
*/
export function buildMessages(systemPrompt: string, turns: ChatTurn[], prompt: string): ApiMessage[] {
const messages: ApiMessage[] = [{ role: "system", content: systemPrompt }];
for (const turn of turns) {
if (!turn.response) continue;
messages.push({ role: "user", content: turn.prompt });
messages.push({ role: "assistant", content: turn.response });
}
messages.push({ role: "user", content: prompt });
return messages;
}
/** Uses the user's prompt if they set one, otherwise Lam's default. */
export function composeSystemPrompt(customPrompt: string, webEnabled: boolean): string {
const parts = [customPrompt.trim() || DEFAULT_SYSTEM_PROMPT];
if (webEnabled) parts.push(RECENCY_HINT);
return parts.join("\n\n");
}