import { mkdtemp, rm, writeFile } from 'node:fs/promises' import { tmpdir } from 'node:os' import { join } from 'node:path' import { pathToFileURL } from 'node:url' import { afterEach, describe, expect, it } from 'vitest' import { Context } from 'cordis' import Loader from '@cordisjs/plugin-loader' import Include from '@cordisjs/plugin-include' import type { Agent } from '@deepseek-ai/dsh-agent' import CommandService from '@deepseek-ai/dsh-commands' import { CompactService, type CompactAgentContext, type CompactionResult, type CompactionTrigger, type ManualCompactAgentContext, } from '@deepseek-ai/dsh-compact' import * as commandCompact from '@deepseek-ai/dsh-command-compact' import { Session, SessionId } from '@deepseek-ai/dsh-session' const RESULT: CompactionResult = { startSeq: 1, summarySeq: 2, endSeq: 4, summary: [{ type: 'text', text: 'loader summary' }], shadowedRange: { start: 3, end: 8 }, shadowedSeqs: [3, 5, 8], shadowedTokenCount: 99, } class LoaderCompactService extends CompactService { override compactIfNeeded( _agent: CompactAgentContext, _trigger: CompactionTrigger, _signal: AbortSignal, ): Promise { return Promise.resolve(null) } override compactRegion(): Promise { return Promise.resolve(RESULT) } override compactNow( _agent: ManualCompactAgentContext, _signal: AbortSignal, ): Promise { return Promise.resolve(RESULT) } } let root: string | undefined let context: Context | undefined afterEach(async () => { await context?.fiber.dispose() context = undefined if (root !== undefined) await rm(root, { recursive: true, force: true }) root = undefined }) describe('command-compact real Loader composition', () => { it('discovers and executes /compact through the assembled command plane', async () => { root = await mkdtemp(join(tmpdir(), 'dsh-command-compact-loader-')) const configPath = join(root, 'cordis.yml') await writeFile(configPath, [ "- name: '@deepseek-ai/dsh-commands'", "- name: '@test/compact-backend'", "- name: '@deepseek-ai/dsh-command-compact'", '', ].join('\n')) context = new Context() context.baseUrl = pathToFileURL(root).href + '/' await context.plugin(Loader) context.loader.builtins.include = Include const modules = new Map([ ['@deepseek-ai/dsh-commands', CommandService], ['@test/compact-backend', LoaderCompactService], ['@deepseek-ai/dsh-command-compact', commandCompact], ]) context.loader.internal = { version: 'v2', async import(specifier: string) { if (!modules.has(specifier)) throw new Error(`unexpected Loader import: ${specifier}`) return modules.get(specifier) }, } as unknown as NonNullable await context.loader.create({ name: 'cordis:include', config: { path: pathToFileURL(configPath).href }, }) await context.loader.await() const session = Session.create(SessionId('loader-command-compact')) const agent = { session, status: 'idle', options: {}, reserveTurnAdmission: () => () => undefined, } as unknown as Agent expect(context.commands.list(agent)).toContainEqual({ name: 'compact', description: 'Compact older conversation history', }) const execution = await context.commands.execute(agent, '/compact', new AbortController().signal) if (execution === undefined) throw new Error('Loader composition did not resolve /compact') expect(execution.result).toEqual({ kind: 'success', text: 'Compacted 3 history items (~99 tokens).', }) expect(session.events.map(event => ({ type: event.type, data: event.data }))).toEqual([ { type: 'command/run', data: { commandId: execution.commandId, name: 'compact', args: '', source: { kind: 'user' }, }, }, { type: 'command/done', data: { commandId: execution.commandId, kind: 'success', text: 'Compacted 3 history items (~99 tokens).', }, }, ]) expect(session.surface.nodes).toEqual([]) expect(session.deriveMessages()).toEqual([]) }) })