feat(client): reply digital approvals to acp
This commit is contained in:
@@ -104,6 +104,12 @@ describe("digital employee state service", () => {
|
||||
metadata: {
|
||||
decision_id: "approval-1",
|
||||
decision: "approved",
|
||||
acp_permission: {
|
||||
permission_id: "permission-1",
|
||||
session_id: "session-1",
|
||||
response: "once",
|
||||
success: true,
|
||||
},
|
||||
},
|
||||
state: {
|
||||
selectedDutyIdsByDate: {},
|
||||
@@ -135,6 +141,12 @@ describe("digital employee state service", () => {
|
||||
decision: "approved",
|
||||
decidedAt: "2026-06-07T08:00:00.000Z",
|
||||
previousStatus: "pending",
|
||||
acpPermission: {
|
||||
permission_id: "permission-1",
|
||||
session_id: "session-1",
|
||||
response: "once",
|
||||
success: true,
|
||||
},
|
||||
});
|
||||
expect(mockState.db?.outbox.get("approval:upsert:approval-1")).toMatchObject({
|
||||
entity_type: "approval",
|
||||
|
||||
@@ -392,18 +392,21 @@ function recordUiApprovalDecision(update: DigitalEmployeeUiStateUpdate): void {
|
||||
const previousStatus = stringField(existing, "status") || "pending";
|
||||
const storedPayload = parseStoredPayload(existing["payload"]);
|
||||
const storedPayloadRecord = objectRecord(storedPayload);
|
||||
const acpPermission = objectRecord(metadata?.acp_permission);
|
||||
const payload = storedPayloadRecord
|
||||
? {
|
||||
...storedPayloadRecord,
|
||||
decision,
|
||||
decidedAt: now,
|
||||
previousStatus,
|
||||
...(acpPermission ? { acpPermission } : {}),
|
||||
}
|
||||
: {
|
||||
value: storedPayload,
|
||||
decision,
|
||||
decidedAt: now,
|
||||
previousStatus,
|
||||
...(acpPermission ? { acpPermission } : {}),
|
||||
};
|
||||
upsertApproval({
|
||||
id: decisionId,
|
||||
|
||||
@@ -119,5 +119,8 @@ contextBridge.exposeInMainWorld("QimingClawBridge", {
|
||||
async recordGovernanceCommand(command: unknown) {
|
||||
return ipcRenderer.invoke("digitalEmployee:recordGovernanceCommand", command);
|
||||
},
|
||||
async respondPermission(sessionId: string, permissionId: string, response: "once" | "always" | "reject") {
|
||||
return ipcRenderer.invoke("agent:respondPermission", sessionId, permissionId, response);
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user