Gateway: changed files, search across hosts, a richer complication summary, and question options in pushes
Gateway / check (push) Successful in 10s
Gateway / image (push) Successful in 23s

This commit is contained in:
gib committed 2026-11-02 13:39:49 -05:00
1 parent 45251b1a43
commit b08fd9bdb1
13 files changed
+500 -19

No files matched your search

+19 -1
View File
@@ -102,12 +102,30 @@ export class Notifier {
body: parent ? `Subagent ${thread.title}: ${text}` : text,
category: category(phase),
fromSubagent: parent !== undefined,
data: { hostId: host.id, threadId: thread.id, ...(requestId ? { requestId } : {}) },
data: { hostId: host.id, threadId: thread.id, ...(requestId ? { requestId } : {}), ...pushQuestion(phase, summary) },
collapseId: `${host.id}:${thread.id}`.slice(0, 64),
});
}
}
/**
* A lone single-choice question's options, so the notification can offer them as buttons. Labels
* are trimmed and the list capped to keep the payload under APNs' 4 KB.
*/
function pushQuestion(phase: Phase, summary: ThreadSummary | undefined): Pick<PushPayload, "question"> {
const questions = summary?.request?.questions ?? [];
const question = questions[0];
if (phase !== "waiting_for_input" || questions.length !== 1 || !question || question.multiSelect) return {};
if (question.options.length === 0 && !question.allowCustomAnswer) return {};
return {
question: {
id: question.id,
options: question.options.slice(0, 4).map(({ label, value }) => ({ label: trimText(label, 40), value: value.slice(0, 200) })),
allowCustomAnswer: question.allowCustomAnswer,
},
};
}
function category(phase: Phase): PushCategory {
switch (phase) {
case "waiting_for_approval":