feat(coding-agent): add configurable title system prompt for sessions

- add discovery of `TITLE_SYSTEM.md` and pass it through interactive startup context
- route custom title prompts to online and local tiny title generators via protocol
- update session-title docs and changelog with override behavior
- add tests for prompt discovery, forwarding, and fallback to bundled title prompts
This commit is contained in:
Adryel Dearo
2026-06-10 08:31:32 +02:00
committed by can1357
parent 96defff9a5
commit ecbc2a3c15
15 changed files with 232 additions and 19 deletions
+6 -4
View File
@@ -436,9 +436,10 @@ async function loadPipeline(
return loaded;
}
function buildPrompt(generator: TextGenerationPipeline, message: string): string {
function buildPrompt(generator: TextGenerationPipeline, message: string, systemPrompt?: string): string {
const selectedSystemPrompt = systemPrompt?.trim() || TINY_TITLE_SYSTEM_PROMPT;
const chat = [
{ role: "system", content: TINY_TITLE_SYSTEM_PROMPT },
{ role: "system", content: selectedSystemPrompt },
{ role: "user", content: formatTitleUserMessage(message) },
];
const chatTemplateOptions = {
@@ -464,9 +465,10 @@ async function generateTitle(
requestId: string,
modelKey: TinyTitleLocalModelKey,
message: string,
systemPrompt?: string,
): Promise<string | null> {
const generator = await loadPipeline(modelKey, transport, requestId);
const promptText = buildPrompt(generator, message);
const promptText = buildPrompt(generator, message, systemPrompt);
const transformers = await loadTransformers(transport, requestId, modelKey);
const output = (await generator(promptText, {
max_new_tokens: TITLE_MAX_NEW_TOKENS,
@@ -548,7 +550,7 @@ async function handleQueuedRequest(
transport.send({ type: "completion", id: request.id, text });
return;
}
const title = await generateTitle(transport, request.id, request.modelKey, request.message);
const title = await generateTitle(transport, request.id, request.modelKey, request.message, request.systemPrompt);
transport.send({ type: "title", id: request.id, title });
} catch (error) {
transport.send({ type: "error", id: request.id, error: errorText(error) });