feat: persist context snapshots and defer permission changes to next messages

This commit is contained in:
Codex committed 2026-10-21 17:32:41 +09:00
1 parent 607afd2f39
commit 1a913cdb67
19 files changed
+510 -66

No files matched your search

@@ -370,16 +370,18 @@ try {
assert.equal(after.revision, before.revision, 'a blocked no-op must not persist or notify a new revision')
})
await verify('host resolver applies dispatch-time permission downgrade without mutating stored payload', async () => {
await verify('host resolver retains submission-time permission without mutating session preference', async () => {
const file = join(root, 'permission.json')
let blocked = true
let deliveredPermission: SendPayload['permissionMode']
assert.deepEqual(resolveQueuedRequestSettings({
queued: false, payloadPermissionMode: 'full-access', sessionPermissionMode: 'default-sandbox'
}), { permissionMode: 'full-access', persistSessionPermission: true })
}), { permissionMode: 'full-access', persistSessionPermission: false })
assert.deepEqual(resolveQueuedRequestSettings({
queued: true, payloadPermissionMode: 'full-access', sessionPermissionMode: 'default-sandbox'
}), { permissionMode: 'default-sandbox', persistSessionPermission: false })
}), { permissionMode: 'full-access', persistSessionPermission: false })
assert.deepEqual(resolveQueuedRequestSettings({ queued: true, payloadPermissionMode: 'default-sandbox', sessionPermissionMode: 'full-access' }), { permissionMode: 'default-sandbox', persistSessionPermission: false })
assert.deepEqual(resolveQueuedRequestSettings({ queued: true, sessionPermissionMode: 'full-access' }), { permissionMode: 'default-sandbox', persistSessionPermission: false }, 'legacy uncaptured queues fail safe')
const queue = createPromptQueue(options(file, {
blocked: () => blocked,
resolveDispatch: value => ({
@@ -400,7 +402,7 @@ try {
blocked = false
queue.notify('permission')
await waitFor(() => deliveredPermission !== undefined, 'permission delivery')
assert.equal(deliveredPermission, 'default-sandbox')
assert.equal(deliveredPermission, 'full-access')
await waitFor(async () => (await queue.get('permission')).items.length === 0, 'permission delivery cleanup')
})
} finally {