Fix new-question landing and question-language HITL
Publish documentation / publish (push) Successful in 34s
Publish documentation / publish (push) Successful in 34s
Reset the activity panel when starting a new question so the landing navigation is restored. Detect and persist the original question language, pass it through runtime and widget descriptors, and scope HITL controls to that language. Validated with gate, session, backend and frontend tests, TypeScript checks, Ruff and strict docs build. Rebuilt and restarted local core/frontend; both healthy and serving HTTP successfully.
This commit is contained in:
@@ -43,6 +43,8 @@ for (const [language, workspaceLanguage, entry, title, yes, no] of [
|
||||
assert.ok(injected.systemPrompt.includes(`interaction_language=${language}`));
|
||||
assert.ok(injected.systemPrompt.includes(`workspace_language=${workspaceLanguage}`));
|
||||
assert.match(injected.systemPrompt, /reviewer questions, explanations, and choices/);
|
||||
const name = new Intl.DisplayNames(["en"], { type: "language" }).of(language);
|
||||
assert.ok(injected.systemPrompt.includes(`artifact explanation in ${name}`));
|
||||
}
|
||||
let widget;
|
||||
ctx.ui.input = async title => {
|
||||
@@ -51,10 +53,19 @@ for (const [language, workspaceLanguage, entry, title, yes, no] of [
|
||||
};
|
||||
await tools.get("reviewer_datamart").def.execute("call", { session: "s1" }, null, null, ctx);
|
||||
assert.equal(widget.title, title);
|
||||
assert.equal(widget.interaction_language, language);
|
||||
assert.equal(widget.title_i18n, "Generate a datamart?");
|
||||
assert.deepEqual(widget.options.map(o => [o.id, o.label]), [
|
||||
["generate", yes], ["skip", no],
|
||||
]);
|
||||
// Pi may supply a new context object for a tool; language must come from
|
||||
// the manifest even for a model-authored select, not just generated chrome.
|
||||
await tools.get("reviewer_select").def.execute("select", {
|
||||
session: "s1", title: "Choose the admission date",
|
||||
options: [{ id: "skip", label: "First admission" }],
|
||||
}, null, null, { ...ctx });
|
||||
assert.equal(widget.interaction_language, language);
|
||||
assert.equal(widget.title, "Choose the admission date");
|
||||
} finally {
|
||||
cp.execFileSync = previous.exec;
|
||||
for (const [key, value] of [["THT_SESSION", previous.session],
|
||||
|
||||
@@ -40,6 +40,8 @@ const CATALOG = {
|
||||
let _handler = null;
|
||||
const _origExecFileSync = cp.execFileSync;
|
||||
cp.execFileSync = function delegatingStub(file, args, opts) {
|
||||
if (args[0] === "session" && args[1] === "ensure-interaction-language")
|
||||
return JSON.stringify({ interaction_language: "en", workspace_language: "it" });
|
||||
if (_handler) return _handler(file, args, opts);
|
||||
return _origExecFileSync.call(cp, file, args, opts);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user