70 lines
2.2 KiB
TypeScript
70 lines
2.2 KiB
TypeScript
|
|
import test from 'node:test';
|
||
|
|
import assert from 'node:assert/strict';
|
||
|
|
import { encodeSdkSessionIdentity, parseSdkSessionIdentity } from './sdkSessionIdentity';
|
||
|
|
|
||
|
|
test('SDK session identities preserve Codex runtime and default legacy values to sdk', () => {
|
||
|
|
const encoded = encodeSdkSessionIdentity('thread-1', 'codex', '/bin/codex', 'app-server');
|
||
|
|
assert.deepEqual(parseSdkSessionIdentity(encoded), {
|
||
|
|
v: 1,
|
||
|
|
id: 'thread-1',
|
||
|
|
backend: 'codex',
|
||
|
|
binPath: '/bin/codex',
|
||
|
|
runtime: 'app-server',
|
||
|
|
});
|
||
|
|
|
||
|
|
const legacy = encodeSdkSessionIdentity('thread-2', 'codex', '/bin/codex');
|
||
|
|
const payload = JSON.parse(decodeURIComponent(legacy.slice('netcatty-sdk-session:'.length)));
|
||
|
|
delete payload.runtime;
|
||
|
|
const legacyWithoutRuntime = `netcatty-sdk-session:${encodeURIComponent(JSON.stringify(payload))}`;
|
||
|
|
assert.equal(parseSdkSessionIdentity(legacyWithoutRuntime)?.runtime, 'sdk');
|
||
|
|
});
|
||
|
|
|
||
|
|
test('SDK session identities preserve Cursor auth mode', () => {
|
||
|
|
const encoded = encodeSdkSessionIdentity(
|
||
|
|
'61668441-bfcb-4795-a575-c46d70ad01fe',
|
||
|
|
'cursor',
|
||
|
|
'/usr/bin/agent',
|
||
|
|
'sdk',
|
||
|
|
'cli-login',
|
||
|
|
'agent',
|
||
|
|
);
|
||
|
|
assert.deepEqual(parseSdkSessionIdentity(encoded), {
|
||
|
|
v: 1,
|
||
|
|
id: '61668441-bfcb-4795-a575-c46d70ad01fe',
|
||
|
|
backend: 'cursor',
|
||
|
|
binPath: '/usr/bin/agent',
|
||
|
|
runtime: 'sdk',
|
||
|
|
authMode: 'cli-login',
|
||
|
|
cliMode: 'agent',
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
test('SDK session identities preserve Grok ACP and streaming-json runtimes', () => {
|
||
|
|
const acp = encodeSdkSessionIdentity('sess-acp', 'grok', '/usr/bin/grok', 'acp');
|
||
|
|
assert.deepEqual(parseSdkSessionIdentity(acp), {
|
||
|
|
v: 1,
|
||
|
|
id: 'sess-acp',
|
||
|
|
backend: 'grok',
|
||
|
|
binPath: '/usr/bin/grok',
|
||
|
|
runtime: 'acp',
|
||
|
|
});
|
||
|
|
|
||
|
|
const headless = encodeSdkSessionIdentity(
|
||
|
|
'sess-json',
|
||
|
|
'grok',
|
||
|
|
'/usr/bin/grok',
|
||
|
|
'streaming-json',
|
||
|
|
);
|
||
|
|
assert.deepEqual(parseSdkSessionIdentity(headless), {
|
||
|
|
v: 1,
|
||
|
|
id: 'sess-json',
|
||
|
|
backend: 'grok',
|
||
|
|
binPath: '/usr/bin/grok',
|
||
|
|
runtime: 'streaming-json',
|
||
|
|
});
|
||
|
|
|
||
|
|
// Aliases normalize to streaming-json.
|
||
|
|
const alias = encodeSdkSessionIdentity('sess-cli', 'grok', '/usr/bin/grok', 'headless');
|
||
|
|
assert.equal(parseSdkSessionIdentity(alias)?.runtime, 'streaming-json');
|
||
|
|
});
|