@prismatic-io/lux 0.0.2-preview.11 → 0.0.2-preview.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/answerers/persona/index.d.ts +4 -2
- package/lib/answerers/persona/index.d.ts.map +1 -1
- package/lib/answerers/persona/index.js +29 -25
- package/lib/answerers/persona/index.js.map +1 -1
- package/package.json +1 -1
- package/skills/lux-answerer/SKILL.md +1 -1
- package/src/answerers/persona/index.ts +42 -25
|
@@ -24,8 +24,10 @@ export declare const PersonaAnswererConfigSchema: z.ZodObject<{
|
|
|
24
24
|
}, z.core.$strict>;
|
|
25
25
|
export type PersonaAnswererConfig = z.infer<typeof PersonaAnswererConfigSchema>;
|
|
26
26
|
declare const buildSystemPrompt: (ctx: AnswererContext, sentinel: string, override?: string) => string;
|
|
27
|
+
declare const responseInstruction: (interrupt: Interrupt) => string;
|
|
28
|
+
declare const buildAnswerPrompt: (ctx: AnswererContext, interrupt: Interrupt, sentinel: string) => string;
|
|
27
29
|
declare const newFenceSentinel: () => string;
|
|
28
|
-
declare const interruptDisplay: (interrupt: Interrupt, sentinel: string) => string;
|
|
30
|
+
declare const interruptDisplay: (interrupt: Interrupt, sentinel: string, includeDirective?: boolean) => string;
|
|
29
31
|
/**
|
|
30
32
|
* Prior turns, rendered as plain text so a one-shot CLI call still has
|
|
31
33
|
* the conversation context the persona needs to stay consistent.
|
|
@@ -37,5 +39,5 @@ declare const parseApprovalResponse: (text: string) => {
|
|
|
37
39
|
};
|
|
38
40
|
declare const cleanAskResponse: (text: string) => string;
|
|
39
41
|
export declare const personaAnswerer: AnswererPlugin<PersonaAnswererConfig>;
|
|
40
|
-
export { buildSystemPrompt, cleanAskResponse, historyAsText, interruptDisplay, newFenceSentinel, parseApprovalResponse, };
|
|
42
|
+
export { buildAnswerPrompt, buildSystemPrompt, cleanAskResponse, historyAsText, interruptDisplay, newFenceSentinel, parseApprovalResponse, responseInstruction, };
|
|
41
43
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/answerers/persona/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAGL,KAAK,eAAe,EAEpB,KAAK,cAAc,EAInB,KAAK,SAAS,EAOf,MAAM,qBAAqB,CAAC;AAG7B;;;GAGG;AAEH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;kBAe7B,CAAC;AAEZ,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAEhF,QAAA,MAAM,iBAAiB,QAAS,eAAe,YAAY,MAAM,aAAa,MAAM,KAAG,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/answerers/persona/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAGL,KAAK,eAAe,EAEpB,KAAK,cAAc,EAInB,KAAK,SAAS,EAOf,MAAM,qBAAqB,CAAC;AAG7B;;;GAGG;AAEH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;kBAe7B,CAAC;AAEZ,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAEhF,QAAA,MAAM,iBAAiB,QAAS,eAAe,YAAY,MAAM,aAAa,MAAM,KAAG,MAyBtF,CAAC;AAEF,QAAA,MAAM,mBAAmB,cAAe,SAAS,KAAG,MAWnD,CAAC;AAEF,QAAA,MAAM,iBAAiB,QAAS,eAAe,aAAa,SAAS,YAAY,MAAM,KAAG,MAK9B,CAAC;AAM7D,QAAA,MAAM,gBAAgB,QAAO,MAAsC,CAAC;AAyDpE,QAAA,MAAM,gBAAgB,cACT,SAAS,YACV,MAAM,iCAEf,MA0BF,CAAC;AAEF;;;GAGG;AACH,QAAA,MAAM,aAAa,QAAS,eAAe,YAAY,MAAM,KAAG,MA+B/D,CAAC;AAEF,QAAA,MAAM,qBAAqB,SACnB,MAAM,KACX;IAAE,QAAQ,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAKlD,CAAC;AAEF,QAAA,MAAM,gBAAgB,SAAU,MAAM,KAAG,MASxC,CAAC;AAwGF,eAAO,MAAM,eAAe,EAAE,cAAc,CAAC,qBAAqB,CAIjE,CAAC;AAGF,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,EACrB,mBAAmB,GACpB,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { randomUUID } from "node:crypto";
|
|
2
2
|
import { z } from "zod";
|
|
3
3
|
import { addUsage, ConversationTurnResponseSchema, emptyUsage, isConversationTurnInterrupt, ModelCliProviderSchema, ReasoningEffortSchema, runTextModel, tryParseJson, } from "../../core/index.js";
|
|
4
|
-
import {
|
|
4
|
+
import { approveAnswer } from "../shared.js";
|
|
5
5
|
/**
|
|
6
6
|
* Persona answerer: plays the user through a configured local Claude Code or
|
|
7
7
|
* Codex CLI. No vendor SDK is coupled to the answerer.
|
|
@@ -46,15 +46,22 @@ Rules:
|
|
|
46
46
|
- Include every persona constraint about each resource or operation the agent
|
|
47
47
|
mentions, including constraints its question omitted.
|
|
48
48
|
- Only invent a plausible answer when neither the persona nor task supplies it.
|
|
49
|
-
-
|
|
50
|
-
|
|
51
|
-
another user reply. Output {"action":"stop"} if the task is complete, blocked
|
|
52
|
-
on real user-side work outside the chat, or the persona would naturally end
|
|
53
|
-
the conversation. Never pretend external work happened. Otherwise output
|
|
54
|
-
{"action":"reply","text":"<the persona's brief reply>"}.
|
|
55
|
-
- For free-text questions, output the answer text directly. No JSON, no
|
|
56
|
-
markdown, no quotation marks.`;
|
|
49
|
+
- Follow the response format requested after the agent's fenced output. Do not
|
|
50
|
+
combine formats or append a conversation decision.`;
|
|
57
51
|
};
|
|
52
|
+
const responseInstruction = (interrupt) => {
|
|
53
|
+
if (interrupt.kind === "ask") {
|
|
54
|
+
return "Answer the free-text question directly. Output only the answer, without a follow-up question or appended conversation decision.";
|
|
55
|
+
}
|
|
56
|
+
if (interrupt.kind === "approve") {
|
|
57
|
+
return 'Decide whether the persona approves this exact request. Output only JSON: {"approved":true|false,"reason":"..."}.';
|
|
58
|
+
}
|
|
59
|
+
if (isConversationTurnInterrupt(interrupt)) {
|
|
60
|
+
return 'Decide whether the task needs another user reply. Output only {"action":"stop"} if it is complete, blocked on real user-side work outside the chat, or the persona would naturally end the conversation. Never pretend external work happened. Otherwise output only {"action":"reply","text":"<the persona\'s brief reply>"}.';
|
|
61
|
+
}
|
|
62
|
+
return "Follow the response format requested by the custom prompt. Do not append a conversation decision.";
|
|
63
|
+
};
|
|
64
|
+
const buildAnswerPrompt = (ctx, interrupt, sentinel) => `${historyAsText(ctx, sentinel)}${interruptDisplay(interrupt, sentinel, false)}\n\nResponse format:\n${responseInstruction(interrupt)}`;
|
|
58
65
|
// Agent-authored text is fenced so an interrupt that smuggles instructions
|
|
59
66
|
// reads as quoted data, not as part of this prompt (see the system rules).
|
|
60
67
|
// The sentinel is random per answer so agent text that embeds a literal
|
|
@@ -69,6 +76,10 @@ const AskContextQuestionSchema = z.looseObject({
|
|
|
69
76
|
multiSelect: z.boolean().optional().catch(undefined),
|
|
70
77
|
});
|
|
71
78
|
const AskContextSchema = z.looseObject({ questions: z.array(z.unknown()) });
|
|
79
|
+
const PersonaApprovalResponseSchema = z.strictObject({
|
|
80
|
+
approved: z.boolean(),
|
|
81
|
+
reason: z.string().optional(),
|
|
82
|
+
});
|
|
72
83
|
/**
|
|
73
84
|
* The claude-code driver forwards the raw AskUserQuestion questions through
|
|
74
85
|
* interrupt.context precisely so answerers can see the options; render them
|
|
@@ -104,7 +115,7 @@ const MAX_RENDERED_CHARS = 2_000;
|
|
|
104
115
|
const clampRendered = (rendered) => rendered.length > MAX_RENDERED_CHARS
|
|
105
116
|
? `${rendered.slice(0, MAX_RENDERED_CHARS)}… [truncated]`
|
|
106
117
|
: rendered;
|
|
107
|
-
const interruptDisplay = (interrupt, sentinel) => {
|
|
118
|
+
const interruptDisplay = (interrupt, sentinel, includeDirective = true) => {
|
|
108
119
|
if (interrupt.kind === "ask") {
|
|
109
120
|
return `The agent asks:\n${fenceAgentText(clampRendered(`${interrupt.question}${renderAskOptions(interrupt.context)}`), sentinel)}`;
|
|
110
121
|
}
|
|
@@ -112,7 +123,10 @@ const interruptDisplay = (interrupt, sentinel) => {
|
|
|
112
123
|
return `The agent requests approval for:\n${fenceAgentText(clampRendered(interrupt.request), sentinel)}`;
|
|
113
124
|
}
|
|
114
125
|
if (isConversationTurnInterrupt(interrupt)) {
|
|
115
|
-
|
|
126
|
+
const display = `The agent completed its current turn with this message:\n${fenceAgentText(clampRendered(interrupt.payload.message), sentinel)}`;
|
|
127
|
+
return includeDirective
|
|
128
|
+
? `${display}\n\nDecide whether to stop or send one more user reply.`
|
|
129
|
+
: display;
|
|
116
130
|
}
|
|
117
131
|
return `The agent sent a custom prompt:\n${fenceAgentText(clampRendered(JSON.stringify(interrupt.payload, null, 2)), sentinel)}`;
|
|
118
132
|
};
|
|
@@ -131,7 +145,7 @@ const historyAsText = (ctx, sentinel) => {
|
|
|
131
145
|
// Prior answers are fenced like agent text: the persona wrote them, but
|
|
132
146
|
// in reply to agent-authored prompts, so they can carry smuggled text.
|
|
133
147
|
for (const entry of recent) {
|
|
134
|
-
lines.push(interruptDisplay(entry.interrupt, sentinel));
|
|
148
|
+
lines.push(interruptDisplay(entry.interrupt, sentinel, false));
|
|
135
149
|
if (entry.answer.kind === "ask") {
|
|
136
150
|
lines.push(`You answered: ${fenceAgentText(clampRendered(entry.answer.text), sentinel)}`);
|
|
137
151
|
}
|
|
@@ -146,19 +160,9 @@ const historyAsText = (ctx, sentinel) => {
|
|
|
146
160
|
};
|
|
147
161
|
const parseApprovalResponse = (text) => {
|
|
148
162
|
const trimmed = text.trim();
|
|
149
|
-
const parsed =
|
|
163
|
+
const parsed = PersonaApprovalResponseSchema.safeParse(tryParseJson(trimmed));
|
|
150
164
|
if (parsed.success)
|
|
151
165
|
return parsed.data;
|
|
152
|
-
// Text fallback fails closed: an unclear reply ("I can't answer that")
|
|
153
|
-
// must not authorize the action it was asked about, and a refusal that
|
|
154
|
-
// quotes an approval word must not either — deny wins over approve.
|
|
155
|
-
const low = trimmed.toLowerCase();
|
|
156
|
-
if (/\b(no|not|deny|denied|reject|rejected|refuse|can't|cannot|don't)\b/.test(low)) {
|
|
157
|
-
return { approved: false, reason: trimmed };
|
|
158
|
-
}
|
|
159
|
-
if (/\b(yes|yep|yeah|approve|approved|ok|okay|sure|go ahead|proceed|lgtm)\b/.test(low)) {
|
|
160
|
-
return { approved: true, reason: trimmed };
|
|
161
|
-
}
|
|
162
166
|
return { approved: false, reason: trimmed };
|
|
163
167
|
};
|
|
164
168
|
const cleanAskResponse = (text) => {
|
|
@@ -201,7 +205,7 @@ class PersonaAnswererImpl {
|
|
|
201
205
|
// The per-interrupt ctx supersedes the prepared one (its history is
|
|
202
206
|
// current); preparedCtx survives only as the prepare() guard above.
|
|
203
207
|
const system = buildSystemPrompt(ctx, sentinel, this.config.systemPromptOverride);
|
|
204
|
-
const prompt =
|
|
208
|
+
const prompt = buildAnswerPrompt(ctx, interrupt, sentinel);
|
|
205
209
|
const attemptId = await ctx.recordModelAttemptStart?.("answerer");
|
|
206
210
|
let response;
|
|
207
211
|
try {
|
|
@@ -276,5 +280,5 @@ export const personaAnswerer = {
|
|
|
276
280
|
create: (config) => new PersonaAnswererImpl(config),
|
|
277
281
|
};
|
|
278
282
|
// Internal exports for testing
|
|
279
|
-
export { buildSystemPrompt, cleanAskResponse, historyAsText, interruptDisplay, newFenceSentinel, parseApprovalResponse, };
|
|
283
|
+
export { buildAnswerPrompt, buildSystemPrompt, cleanAskResponse, historyAsText, interruptDisplay, newFenceSentinel, parseApprovalResponse, responseInstruction, };
|
|
280
284
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/answerers/persona/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/answerers/persona/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@prismatic-io/lux",
|
|
3
|
-
"version": "0.0.2-preview.
|
|
3
|
+
"version": "0.0.2-preview.12",
|
|
4
4
|
"description": "Coding-agent evaluation and improvement with deterministic assertions, optional LLM judges, and first-class human-in-the-loop runs.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"homepage": "https://github.com/prismatic-io/lux",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: lux-answerer
|
|
3
|
-
version: 0.0.2-preview.
|
|
3
|
+
version: 0.0.2-preview.12
|
|
4
4
|
description: Play the persona for a running Lux orchestrator that uses the claude-code answerer. Read structured events on stdout, decide answers from persona + context, write JSON to its answer channel.
|
|
5
5
|
user-invocable: false
|
|
6
6
|
allowed-tools: Bash, Read
|
|
@@ -17,7 +17,7 @@ import {
|
|
|
17
17
|
type TokenUsage,
|
|
18
18
|
tryParseJson,
|
|
19
19
|
} from "../../core/index.js";
|
|
20
|
-
import {
|
|
20
|
+
import { approveAnswer } from "../shared.js";
|
|
21
21
|
|
|
22
22
|
/**
|
|
23
23
|
* Persona answerer: plays the user through a configured local Claude Code or
|
|
@@ -66,16 +66,30 @@ Rules:
|
|
|
66
66
|
- Include every persona constraint about each resource or operation the agent
|
|
67
67
|
mentions, including constraints its question omitted.
|
|
68
68
|
- Only invent a plausible answer when neither the persona nor task supplies it.
|
|
69
|
-
-
|
|
70
|
-
|
|
71
|
-
another user reply. Output {"action":"stop"} if the task is complete, blocked
|
|
72
|
-
on real user-side work outside the chat, or the persona would naturally end
|
|
73
|
-
the conversation. Never pretend external work happened. Otherwise output
|
|
74
|
-
{"action":"reply","text":"<the persona's brief reply>"}.
|
|
75
|
-
- For free-text questions, output the answer text directly. No JSON, no
|
|
76
|
-
markdown, no quotation marks.`;
|
|
69
|
+
- Follow the response format requested after the agent's fenced output. Do not
|
|
70
|
+
combine formats or append a conversation decision.`;
|
|
77
71
|
};
|
|
78
72
|
|
|
73
|
+
const responseInstruction = (interrupt: Interrupt): string => {
|
|
74
|
+
if (interrupt.kind === "ask") {
|
|
75
|
+
return "Answer the free-text question directly. Output only the answer, without a follow-up question or appended conversation decision.";
|
|
76
|
+
}
|
|
77
|
+
if (interrupt.kind === "approve") {
|
|
78
|
+
return 'Decide whether the persona approves this exact request. Output only JSON: {"approved":true|false,"reason":"..."}.';
|
|
79
|
+
}
|
|
80
|
+
if (isConversationTurnInterrupt(interrupt)) {
|
|
81
|
+
return 'Decide whether the task needs another user reply. Output only {"action":"stop"} if it is complete, blocked on real user-side work outside the chat, or the persona would naturally end the conversation. Never pretend external work happened. Otherwise output only {"action":"reply","text":"<the persona\'s brief reply>"}.';
|
|
82
|
+
}
|
|
83
|
+
return "Follow the response format requested by the custom prompt. Do not append a conversation decision.";
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
const buildAnswerPrompt = (ctx: AnswererContext, interrupt: Interrupt, sentinel: string): string =>
|
|
87
|
+
`${historyAsText(ctx, sentinel)}${interruptDisplay(
|
|
88
|
+
interrupt,
|
|
89
|
+
sentinel,
|
|
90
|
+
false,
|
|
91
|
+
)}\n\nResponse format:\n${responseInstruction(interrupt)}`;
|
|
92
|
+
|
|
79
93
|
// Agent-authored text is fenced so an interrupt that smuggles instructions
|
|
80
94
|
// reads as quoted data, not as part of this prompt (see the system rules).
|
|
81
95
|
// The sentinel is random per answer so agent text that embeds a literal
|
|
@@ -93,6 +107,10 @@ const AskContextQuestionSchema = z.looseObject({
|
|
|
93
107
|
multiSelect: z.boolean().optional().catch(undefined),
|
|
94
108
|
});
|
|
95
109
|
const AskContextSchema = z.looseObject({ questions: z.array(z.unknown()) });
|
|
110
|
+
const PersonaApprovalResponseSchema = z.strictObject({
|
|
111
|
+
approved: z.boolean(),
|
|
112
|
+
reason: z.string().optional(),
|
|
113
|
+
});
|
|
96
114
|
|
|
97
115
|
/**
|
|
98
116
|
* The claude-code driver forwards the raw AskUserQuestion questions through
|
|
@@ -133,7 +151,11 @@ const clampRendered = (rendered: string): string =>
|
|
|
133
151
|
? `${rendered.slice(0, MAX_RENDERED_CHARS)}… [truncated]`
|
|
134
152
|
: rendered;
|
|
135
153
|
|
|
136
|
-
const interruptDisplay = (
|
|
154
|
+
const interruptDisplay = (
|
|
155
|
+
interrupt: Interrupt,
|
|
156
|
+
sentinel: string,
|
|
157
|
+
includeDirective = true,
|
|
158
|
+
): string => {
|
|
137
159
|
if (interrupt.kind === "ask") {
|
|
138
160
|
return `The agent asks:\n${fenceAgentText(
|
|
139
161
|
clampRendered(`${interrupt.question}${renderAskOptions(interrupt.context)}`),
|
|
@@ -147,10 +169,13 @@ const interruptDisplay = (interrupt: Interrupt, sentinel: string): string => {
|
|
|
147
169
|
)}`;
|
|
148
170
|
}
|
|
149
171
|
if (isConversationTurnInterrupt(interrupt)) {
|
|
150
|
-
|
|
172
|
+
const display = `The agent completed its current turn with this message:\n${fenceAgentText(
|
|
151
173
|
clampRendered(interrupt.payload.message),
|
|
152
174
|
sentinel,
|
|
153
|
-
)}
|
|
175
|
+
)}`;
|
|
176
|
+
return includeDirective
|
|
177
|
+
? `${display}\n\nDecide whether to stop or send one more user reply.`
|
|
178
|
+
: display;
|
|
154
179
|
}
|
|
155
180
|
return `The agent sent a custom prompt:\n${fenceAgentText(
|
|
156
181
|
clampRendered(JSON.stringify(interrupt.payload, null, 2)),
|
|
@@ -171,7 +196,7 @@ const historyAsText = (ctx: AnswererContext, sentinel: string): string => {
|
|
|
171
196
|
// Prior answers are fenced like agent text: the persona wrote them, but
|
|
172
197
|
// in reply to agent-authored prompts, so they can carry smuggled text.
|
|
173
198
|
for (const entry of recent) {
|
|
174
|
-
lines.push(interruptDisplay(entry.interrupt, sentinel));
|
|
199
|
+
lines.push(interruptDisplay(entry.interrupt, sentinel, false));
|
|
175
200
|
if (entry.answer.kind === "ask") {
|
|
176
201
|
lines.push(`You answered: ${fenceAgentText(clampRendered(entry.answer.text), sentinel)}`);
|
|
177
202
|
} else if (entry.answer.kind === "approve") {
|
|
@@ -199,18 +224,8 @@ const parseApprovalResponse = (
|
|
|
199
224
|
text: string,
|
|
200
225
|
): { approved: boolean; reason?: string | undefined } => {
|
|
201
226
|
const trimmed = text.trim();
|
|
202
|
-
const parsed =
|
|
227
|
+
const parsed = PersonaApprovalResponseSchema.safeParse(tryParseJson(trimmed));
|
|
203
228
|
if (parsed.success) return parsed.data;
|
|
204
|
-
// Text fallback fails closed: an unclear reply ("I can't answer that")
|
|
205
|
-
// must not authorize the action it was asked about, and a refusal that
|
|
206
|
-
// quotes an approval word must not either — deny wins over approve.
|
|
207
|
-
const low = trimmed.toLowerCase();
|
|
208
|
-
if (/\b(no|not|deny|denied|reject|rejected|refuse|can't|cannot|don't)\b/.test(low)) {
|
|
209
|
-
return { approved: false, reason: trimmed };
|
|
210
|
-
}
|
|
211
|
-
if (/\b(yes|yep|yeah|approve|approved|ok|okay|sure|go ahead|proceed|lgtm)\b/.test(low)) {
|
|
212
|
-
return { approved: true, reason: trimmed };
|
|
213
|
-
}
|
|
214
229
|
return { approved: false, reason: trimmed };
|
|
215
230
|
};
|
|
216
231
|
|
|
@@ -259,7 +274,7 @@ class PersonaAnswererImpl implements Answerer {
|
|
|
259
274
|
// The per-interrupt ctx supersedes the prepared one (its history is
|
|
260
275
|
// current); preparedCtx survives only as the prepare() guard above.
|
|
261
276
|
const system = buildSystemPrompt(ctx, sentinel, this.config.systemPromptOverride);
|
|
262
|
-
const prompt =
|
|
277
|
+
const prompt = buildAnswerPrompt(ctx, interrupt, sentinel);
|
|
263
278
|
const attemptId = await ctx.recordModelAttemptStart?.("answerer");
|
|
264
279
|
let response: Awaited<ReturnType<typeof runTextModel>>;
|
|
265
280
|
try {
|
|
@@ -335,10 +350,12 @@ export const personaAnswerer: AnswererPlugin<PersonaAnswererConfig> = {
|
|
|
335
350
|
|
|
336
351
|
// Internal exports for testing
|
|
337
352
|
export {
|
|
353
|
+
buildAnswerPrompt,
|
|
338
354
|
buildSystemPrompt,
|
|
339
355
|
cleanAskResponse,
|
|
340
356
|
historyAsText,
|
|
341
357
|
interruptDisplay,
|
|
342
358
|
newFenceSentinel,
|
|
343
359
|
parseApprovalResponse,
|
|
360
|
+
responseInstruction,
|
|
344
361
|
};
|