/ src / components / chat / delegation-banner.test.ts
delegation-banner.test.ts
 1  import { describe, it } from 'node:test'
 2  import assert from 'node:assert/strict'
 3  import { parseTaskCompletion } from './delegation-banner'
 4  
 5  describe('parseTaskCompletion', () => {
 6    it('extracts output files and report path from completion payload', () => {
 7      const text = [
 8        'Task completed: **[Build docs](#task:abc12345)**',
 9        '',
10        'Working directory: `/tmp/work`',
11        '',
12        'Output files:',
13        '- `docs/guide.md`',
14        '- `docs/faq.md`',
15        '',
16        'Task report: `data/task-reports/abc12345.md`',
17        '',
18        'Done.',
19      ].join('\n')
20      const parsed = parseTaskCompletion(text)
21      assert.ok(parsed)
22      assert.deepEqual(parsed?.outputFiles, ['docs/guide.md', 'docs/faq.md'])
23      assert.equal(parsed?.reportPath, 'data/task-reports/abc12345.md')
24      assert.equal(parsed?.workingDir, '/tmp/work')
25    })
26  
27    it('captures Gemini resume lines from task completion payloads', () => {
28      const text = [
29        'Task completed: **[Ship follow-up](#task:task-gemini)**',
30        '',
31        'Gemini session: `gemini-session-7`',
32        '',
33        'All done.',
34      ].join('\n')
35      const parsed = parseTaskCompletion(text)
36  
37      assert.ok(parsed)
38      assert.equal(parsed?.resumeInfo, 'Gemini session: `gemini-session-7`')
39    })
40  })