feat(schedule): add durable after reminders

This commit is contained in:
pku-xht
2026-08-06 03:47:37 +08:00
committed by Tianyi Cui
parent f7e7851e3f
commit 8b69252664
41 changed files with 354 additions and 146 deletions

View File

@@ -104,7 +104,6 @@ describe('commit-aware Schedule live views', () => {
expect(presented.map(frame => frame.view)).toEqual([
{
for: 'event',
presentationKey: 'schedule/reminder',
view: {
scheduleId: 'schedule-1', prompt: 'first',
occurrenceAt: '2026-08-05T12:00:01.000Z', deliveryMode: 'session-local',
@@ -112,7 +111,6 @@ describe('commit-aware Schedule live views', () => {
},
{
for: 'event',
presentationKey: 'schedule/reminder',
view: {
scheduleId: 'schedule-2', prompt: 'second',
occurrenceAt: '2026-08-05T12:00:01.000Z', deliveryMode: 'session-local',
@@ -143,7 +141,7 @@ describe('commit-aware Schedule live views', () => {
const frames = await collected
expect(frames.filter(frame => frame.view?.for === 'event')).toHaveLength(1)
expect(frames.at(-1)?.view).toMatchObject({
for: 'event', presentationKey: 'schedule/reminder',
for: 'event',
})
await ctx.fiber.dispose()
})
@@ -180,7 +178,7 @@ describe('Schedule history views', () => {
events: [...session.events.slice(0, 2)],
})
expect((await history()).find(entry => entry.event.seq === 1)?.view).toMatchObject({
for: 'event', presentationKey: 'schedule/reminder',
for: 'event',
})
inspect = () => Promise.resolve({
meta: { ...session.header, cwd: '/different', delegationDepth: 0 },
@@ -213,7 +211,7 @@ describe('Schedule history views', () => {
})
if (!response.result.ok) throw new Error(response.result.error.message)
expect(response.result.value.events.find(entry => entry.event.seq === 1)?.view).toMatchObject({
for: 'event', presentationKey: 'schedule/reminder',
for: 'event',
})
await ctx.fiber.dispose()
})

View File

@@ -198,16 +198,12 @@ describe('sessions domain schemas', () => {
event: { type: 'schedule/change', seq: 2, time: 3, data: { operation: 'dispatch' } },
view: {
for: 'event',
presentationKey: 'schedule/reminder',
view: { scheduleId: 'schedule-1' },
},
}
const parsedHistory = sessionHistoryValueSchema.parse({ events: [presented], hasMore: false })
expect(parsedHistory.events?.at(0)?.view).toEqual(presented.view)
for (const view of [
{ for: 'event', presentationKey: '', view: {} },
{ for: 'event', presentationKey: 'schedule/reminder' },
]) {
for (const view of [{ for: 'event' }]) {
expect(() => sessionHistoryValueSchema.parse({
events: [{ event: presented.event, view }],
hasMore: false,
@@ -442,7 +438,7 @@ describe('events frame schemas', () => {
{
type: 'session/event', sessionId: 's',
event: { type: 'schedule/change', seq: 1, time: 2, data: { operation: 'dispatch' } },
view: { for: 'event', presentationKey: 'schedule/reminder', view: null },
view: { for: 'event', view: null },
},
{ type: 'session/subscribed', sessionId: 's', lastSeq: -1 },
{ type: 'approval/requested', sessionId: 's', approvalId: 'a', toolName: 'bash', callId: 'c', reason: 'r' },