feat(terminal): add guided goals, tasks, and confirmed deletion

This commit is contained in:
Codex committed 2026-09-28 14:13:21 +08:00
1 parent 8ffeb2897f
commit 78c1ffe1fd
7 files changed
+175 -10

No files matched your search

+33
View File
@@ -79,6 +79,7 @@ const terminalContext = vm.createContext({
APPS: { calendar: ['icon', 'CALENDAR'] }, openApp: id => terminalRenders.push(id),
crypto: globalThis.crypto, day: () => '2026-09-28',
mems: () => terminalStorage.get('lifeos_memories') || [],
museum: () => terminalStorage.get('lifeos_museum') || [],
sys: () => terminalStorage.get('lifeos_system') || { schemaVersion: 2 },
save: (key, value) => terminalStorage.set(key, structuredClone(value)),
renderAll: () => terminalRenders.push('render'),
@@ -125,6 +126,38 @@ terminalUiNodes['.terminal-note'].value = 'A note from the guided form';
terminalUiNodes['.terminal-compose'].listeners.click({ target: { closest: () => ({ dataset: { note: 'save' } }) } });
assert.equal(terminalStorage.get('lifeos_memories').find(item => item.date === '2026-10-01').text, 'A note from the guided form');
assert.equal(terminalUiNodes['.terminal-compose'].hidden, true);
assert.match(command('goal add').message, /terminal\.flow\.title/);
assert.match(command('A guided goal').message, /terminal\.flow\.description/);
assert.match(command('').message, /terminal\.flow\.targetDate/);
assert.match(command('2027-01-02').message, /terminal\.flow\.showOnDesktop/);
assert.match(command('yes').message, /terminal\.flow\.confirmCreate/);
assert.equal(command('yes').message, 'terminal.goalSaved');
assert.equal(terminalStorage.get('lifeos_system').tasksBoard.goals[0].showOnDesktop, true);
assert.match(command('task add').message, /terminal\.flow\.title/);
assert.match(command('A guided task').message, /terminal\.flow\.dueDate/);
assert.match(command('').message, /terminal\.flow\.goalId/);
assert.match(command('1').message, /terminal\.flow\.priority/);
assert.match(command('high').message, /terminal\.flow\.confirmCreate/);
assert.equal(command('yes').message, 'terminal.taskSaved');
assert.equal(terminalStorage.get('lifeos_system').tasksBoard.tasks[1].goalId, terminalStorage.get('lifeos_system').tasksBoard.goals[0].id);
assert.match(command('task delete').message, /terminal\.flow\.pick/);
assert.match(command('2').message, /terminal\.flow\.confirmDelete/);
assert.equal(command('no').cancel, true);
assert.equal(terminalStorage.get('lifeos_system').tasksBoard.tasks.length, 2);
assert.match(command('task delete 2').message, /terminal\.flow\.confirmDelete/);
assert.match(command('yes').message, /terminal\.flow\.deleted/);
assert.equal(terminalStorage.get('lifeos_system').tasksBoard.tasks.length, 1);
assert.match(command('memory delete 2026-09-30').message, /terminal\.flow\.confirmDelete/);
assert.equal(command('yes').message.includes('terminal.flow.deleted'), true);
assert.equal(terminalStorage.get('lifeos_memories').some(item => item.date === '2026-09-30'), false);
terminalContext.LifeOSActions.createTask({ title: 'Linked task', goalId: terminalStorage.get('lifeos_system').tasksBoard.goals[0].id });
assert.match(command('goal delete 1').message, /terminal\.flow\.confirmDelete/);
assert.match(command('yes').message, /terminal\.flow\.deleted/);
assert.equal(terminalStorage.get('lifeos_system').tasksBoard.tasks[1].goalId, '');
terminalContext.LifeOSActions.createMemory({ date: '2026-10-02', title: 'Linked memory', taskId: terminalStorage.get('lifeos_system').tasksBoard.tasks[0].id });
assert.match(command('task delete 1').message, /terminal\.flow\.confirmDelete/);
assert.match(command('yes').message, /terminal\.flow\.deleted/);
assert.equal(terminalStorage.get('lifeos_memories').find(item => item.date === '2026-10-02').taskId, '');
assert.equal(command('open calendar').message, 'terminal.opened');
assert.ok(terminalRenders.includes('calendar'));
assert.deepEqual(Array.from(terminalContext.LifeOSTerminalEngine.words('task add "quoted title" --priority high')), ['task','add','quoted title','--priority','high']);