84 lines
3.9 KiB
TypeScript
84 lines
3.9 KiB
TypeScript
import { describe, expect, it } from 'vitest';
|
|
|
|
describe('public API exports', () => {
|
|
it('should expose piece usecases, engine, and piece loader APIs', async () => {
|
|
// Given: パッケージの公開API
|
|
const api = await import('../index.js');
|
|
|
|
// When: 主要なユースケース関数とエンジン公開API・piece読み込みAPIを参照する
|
|
// Then: 必要な公開シンボルが利用できる
|
|
expect(typeof api.executeAgent).toBe('function');
|
|
expect(typeof api.generateReport).toBe('function');
|
|
expect(typeof api.executePart).toBe('function');
|
|
expect(typeof api.judgeStatus).toBe('function');
|
|
expect(typeof api.evaluateCondition).toBe('function');
|
|
expect(typeof api.decomposeTask).toBe('function');
|
|
|
|
expect(typeof api.PieceEngine).toBe('function');
|
|
|
|
expect(typeof api.loadPiece).toBe('function');
|
|
expect(typeof api.loadPieceByIdentifier).toBe('function');
|
|
expect(typeof api.listPieces).toBe('function');
|
|
});
|
|
|
|
it('should not expose internal engine implementation details', async () => {
|
|
// Given: パッケージの公開API
|
|
const api = await import('../index.js');
|
|
|
|
// When: 非公開にすべき内部シンボルの有無を確認する
|
|
// Then: 内部実装詳細は公開されていない
|
|
expect('AgentRunner' in api).toBe(false);
|
|
expect('RuleEvaluator' in api).toBe(false);
|
|
expect('AggregateEvaluator' in api).toBe(false);
|
|
expect('evaluateAggregateConditions' in api).toBe(false);
|
|
expect('needsStatusJudgmentPhase' in api).toBe(false);
|
|
expect('StatusJudgmentBuilder' in api).toBe(false);
|
|
expect('buildEditRule' in api).toBe(false);
|
|
expect('detectRuleIndex' in api).toBe(false);
|
|
expect('ParallelLogger' in api).toBe(false);
|
|
expect('InstructionBuilder' in api).toBe(false);
|
|
expect('ReportInstructionBuilder' in api).toBe(false);
|
|
expect('COMPLETE_MOVEMENT' in api).toBe(false);
|
|
expect('ABORT_MOVEMENT' in api).toBe(false);
|
|
expect('ERROR_MESSAGES' in api).toBe(false);
|
|
expect('determineNextMovementByRules' in api).toBe(false);
|
|
expect('extractBlockedPrompt' in api).toBe(false);
|
|
expect('LoopDetector' in api).toBe(false);
|
|
expect('createInitialState' in api).toBe(false);
|
|
expect('addUserInput' in api).toBe(false);
|
|
expect('getPreviousOutput' in api).toBe(false);
|
|
expect('handleBlocked' in api).toBe(false);
|
|
});
|
|
|
|
it('should not expose infrastructure implementations and internal shared utilities', async () => {
|
|
// Given: パッケージの公開API
|
|
const api = await import('../index.js');
|
|
|
|
// When: 非公開にすべきインフラ実装と内部ユーティリティの有無を確認する
|
|
// Then: 直接利用させない実装詳細は公開されていない
|
|
expect('ClaudeClient' in api).toBe(false);
|
|
expect('executeClaudeCli' in api).toBe(false);
|
|
expect('CodexClient' in api).toBe(false);
|
|
expect('mapToCodexSandboxMode' in api).toBe(false);
|
|
expect('getResourcesDir' in api).toBe(false);
|
|
expect('DEFAULT_PIECE_NAME' in api).toBe(false);
|
|
expect('buildPrompt' in api).toBe(false);
|
|
expect('writeFileAtomic' in api).toBe(false);
|
|
expect('getInputHistoryPath' in api).toBe(false);
|
|
expect('MAX_INPUT_HISTORY' in api).toBe(false);
|
|
expect('loadInputHistory' in api).toBe(false);
|
|
expect('saveInputHistory' in api).toBe(false);
|
|
expect('addToInputHistory' in api).toBe(false);
|
|
expect('getPersonaSessionsPath' in api).toBe(false);
|
|
expect('loadPersonaSessions' in api).toBe(false);
|
|
expect('savePersonaSessions' in api).toBe(false);
|
|
expect('updatePersonaSession' in api).toBe(false);
|
|
expect('clearPersonaSessions' in api).toBe(false);
|
|
expect('getWorktreeSessionsDir' in api).toBe(false);
|
|
expect('encodeWorktreePath' in api).toBe(false);
|
|
expect('getWorktreeSessionPath' in api).toBe(false);
|
|
expect('loadWorktreeSessions' in api).toBe(false);
|
|
expect('updateWorktreeSession' in api).toBe(false);
|
|
});
|
|
});
|