mirror of
https://github.com/pewdiepie-archdaemon/odysseus.git
synced 2026-10-27 08:12:22 +01:00
68 lines
2.7 KiB
JavaScript
68 lines
2.7 KiB
JavaScript
import test from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
import { readFile } from 'node:fs/promises';
|
|
|
|
const src = await readFile(new URL('../static/js/sessions.js', import.meta.url), 'utf8');
|
|
const START = '// === copy-chat header (debug trace block) ===';
|
|
const END = '// === end copy-chat header ===';
|
|
const block = src.slice(src.indexOf(START) + START.length, src.indexOf(END));
|
|
const extract = new Function(block + '\nreturn { _buildCopyChatHeader, _toolSurfaceLabel, _formatJst };');
|
|
const { _buildCopyChatHeader, _toolSurfaceLabel, _formatJst } = extract();
|
|
|
|
test('copy-chat header has exact shape and values', () => {
|
|
const header = _buildCopyChatHeader({
|
|
version: '1.0.3',
|
|
build: '20261006.1',
|
|
sourceCommit: 'a1b2c3d4e5f6',
|
|
model: 'gpt-4o',
|
|
endpointUrl: 'https://api.example.com/v1',
|
|
toolSurface: 'Ajax Spec (router)',
|
|
sessionId: 'sess-123',
|
|
copiedAt: new Date(Date.UTC(2026, 9, 13, 5, 30)),
|
|
});
|
|
const expected = [
|
|
'--- Odysseus info ---',
|
|
'Odysseus: 1.0.3 | Harness build: 20261006.1 | Commit: a1b2c3d4',
|
|
'Model: gpt-4o @ https://api.example.com/v1 | Tool surface: Ajax Spec (router)',
|
|
'Copied: 2026-10-13 14:30 JST | Session: sess-123',
|
|
'----------------------',
|
|
].join('\n');
|
|
assert.equal(header, expected);
|
|
});
|
|
|
|
test('unknown fields are never omitted', () => {
|
|
const header = _buildCopyChatHeader({});
|
|
const expected = [
|
|
'--- Odysseus info ---',
|
|
'Odysseus: unknown | Harness build: unknown | Commit: unknown',
|
|
'Model: unknown @ unknown | Tool surface: unknown',
|
|
'Copied: unknown JST | Session: unknown',
|
|
'----------------------',
|
|
].join('\n');
|
|
assert.equal(header, expected);
|
|
});
|
|
|
|
test('closing separator is exactly 22 dashes', () => {
|
|
const header = _buildCopyChatHeader({});
|
|
const lines = header.split('\n');
|
|
assert.equal(lines.length, 5);
|
|
assert.equal(lines[lines.length - 1], '----------------------');
|
|
assert.equal(lines[lines.length - 1].length, 22);
|
|
});
|
|
|
|
test('tool surface labels map modes to human labels', () => {
|
|
assert.equal(_toolSurfaceLabel('full'), 'Regular tools');
|
|
assert.equal(_toolSurfaceLabel('compact'), 'Ajax Compact');
|
|
assert.equal(_toolSurfaceLabel('spec'), 'Ajax Spec (router)');
|
|
assert.equal(_toolSurfaceLabel('none'), 'Tools off');
|
|
assert.equal(_toolSurfaceLabel(''), 'Auto');
|
|
assert.equal(_toolSurfaceLabel(undefined), 'Auto');
|
|
assert.equal(_toolSurfaceLabel(null), 'Auto');
|
|
assert.equal(_toolSurfaceLabel('weird'), 'unknown');
|
|
});
|
|
|
|
test('JST timestamp is UTC+9 with HH:MM padding', () => {
|
|
assert.equal(_formatJst(new Date(Date.UTC(2026, 0, 1, 0, 5))), '2026-01-01 09:05');
|
|
assert.equal(_formatJst(new Date(Date.UTC(2026, 11, 31, 15, 0))), '2027-01-01 00:00');
|
|
});
|