feat(prompts): inject palace wake-up context into Smart Actions

Enrich the system prompt with L0/L1/L2 workspace context from the
palace when running Smart Actions. Best-effort — failures never block
prompt execution. Gives LLM access to decisions, preferences, and
semantically relevant memories from the workspace.
This commit is contained in:
saravanakumardb1 2026-04-13 12:33:34 -07:00
parent 06590b9175
commit 7d7e445135
2 changed files with 17 additions and 3 deletions

View File

@ -105,7 +105,7 @@ export async function notePromptRoutes(app: FastifyInstance): Promise<void> {
const noteBody = note.body?.replace(/<[^>]*>/g, ' ').replace(/\s+/g, ' ').trim() ?? '';
const result = await executePrompt(template, input, noteBody);
const result = await executePrompt(template, input, noteBody, userId);
return result;
});
@ -148,7 +148,7 @@ export async function notePromptRoutes(app: FastifyInstance): Promise<void> {
void reply.hijack();
try {
const result = await executePrompt(template, input, noteBody);
const result = await executePrompt(template, input, noteBody, userId);
// Stream the result as a series of SSE events: tokens then done
const chunks = result.content.match(/.{1,80}/g) ?? [result.content];
for (const chunk of chunks) {

View File

@ -5,6 +5,8 @@
import { llm } from '../../lib/llm.js';
import { config } from '../../lib/config.js';
import { trackEvent } from '../../lib/telemetry.js';
import { buildNoteLettWakeUp } from '../palace/wakeup.js';
import { PRODUCT_ID } from '../../lib/product-config.js';
import {
buildVisionMessage,
hasVisionContent,
@ -34,6 +36,7 @@ export async function executePrompt(
template: PromptTemplateDoc,
input: RunPromptInput,
noteBody: string,
userId?: string,
): Promise<RunPromptOutput> {
const provider = llm();
@ -52,9 +55,20 @@ export async function executePrompt(
const userPrompt = interpolate(template.userPromptTemplate, vars);
// Enrich system prompt with palace wake-up context (best-effort)
let systemPrompt = template.systemPrompt;
if (config.PALACE_ENABLED && input.workspaceId) {
try {
const wakeUp = await buildNoteLettWakeUp(userId ?? '', PRODUCT_ID, input.workspaceId);
if (wakeUp.text) {
systemPrompt += `\n\n## Workspace Context\n${wakeUp.text}`;
}
} catch { /* best-effort — don't block prompt execution */ }
}
// Build messages
const messages: ChatMessage[] = [
{ role: 'system', content: template.systemPrompt },
{ role: 'system', content: systemPrompt },
];
if (input.imageUrl && (template.inputType === 'image' || template.inputType === 'text+image')) {