Implement scene-based chapter quest progression
Some checks failed
CI / verify (push) Has been cancelled
Some checks failed
CI / verify (push) Has been cancelled
This commit is contained in:
@@ -197,4 +197,106 @@ describe('buildUserPrompt', () => {
|
||||
expect(prompt).not.toContain(npc.backstoryReveal.chapters[3]!.content);
|
||||
expect(prompt).not.toContain(npc.initialItems[0]!.name);
|
||||
});
|
||||
|
||||
it('requires an empty encounter payload during non-pending follow-up reasoning such as post-battle continuation', () => {
|
||||
const prompt = buildUserPrompt(
|
||||
WorldType.WUXIA,
|
||||
createCharacter(),
|
||||
[],
|
||||
[
|
||||
{
|
||||
text: '挥刀抢攻',
|
||||
options: [],
|
||||
historyRole: 'action',
|
||||
},
|
||||
{
|
||||
text: '山道客已经败下阵来。',
|
||||
options: [],
|
||||
historyRole: 'result',
|
||||
},
|
||||
],
|
||||
{
|
||||
playerHp: 26,
|
||||
playerMaxHp: 40,
|
||||
playerMana: 8,
|
||||
playerMaxMana: 20,
|
||||
inBattle: false,
|
||||
playerX: 0,
|
||||
playerFacing: 'right',
|
||||
playerAnimation: AnimationState.IDLE,
|
||||
skillCooldowns: {},
|
||||
sceneId: 'forest_road',
|
||||
sceneName: '山道',
|
||||
sceneDescription: '风从林梢压下来,地上还留着刚才交手的痕迹。',
|
||||
pendingSceneEncounter: false,
|
||||
},
|
||||
'挥刀抢攻',
|
||||
);
|
||||
|
||||
expect(prompt).toContain('encounter 必须为 null');
|
||||
expect(prompt).toContain('战斗结束后的续写');
|
||||
});
|
||||
|
||||
it('does not feed mixed-language history and directive snippets back into story prompts', () => {
|
||||
const prompt = buildUserPrompt(
|
||||
WorldType.WUXIA,
|
||||
createCharacter(),
|
||||
[],
|
||||
[
|
||||
{
|
||||
text: 'Move forward carefully.',
|
||||
options: [],
|
||||
historyRole: 'action',
|
||||
},
|
||||
{
|
||||
text: 'The wind is cold. 你听见山道尽头有脚步声。',
|
||||
options: [],
|
||||
historyRole: 'result',
|
||||
},
|
||||
],
|
||||
{
|
||||
playerHp: 26,
|
||||
playerMaxHp: 40,
|
||||
playerMana: 8,
|
||||
playerMaxMana: 20,
|
||||
inBattle: false,
|
||||
playerX: 0,
|
||||
playerFacing: 'right',
|
||||
playerAnimation: AnimationState.ATTACK,
|
||||
skillCooldowns: {},
|
||||
sceneId: 'forest_road',
|
||||
sceneName: '山道',
|
||||
sceneDescription: '风从林梢压下来。',
|
||||
pendingSceneEncounter: false,
|
||||
conversationSituation: 'post_battle_breath',
|
||||
conversationPressure: 'medium',
|
||||
recentSharedEvent:
|
||||
'A fight just ended. Both sides are still catching their breath.',
|
||||
talkPriority:
|
||||
'Focus on the most useful judgment, danger, and next step.',
|
||||
partyRelationshipNotes:
|
||||
'Lan is becoming more open in private conversation.',
|
||||
recentChronicleSummary: 'Baseline summary from previous run.',
|
||||
sceneNarrativeDirective: {
|
||||
primaryPressure: 'Danger is still active near the camp.',
|
||||
activeThreadIds: ['thread-old-case'],
|
||||
foregroundActorIds: [],
|
||||
foregroundCarrierIds: [],
|
||||
revealBudget: 'low',
|
||||
emotionalCadence: 'tense',
|
||||
},
|
||||
},
|
||||
'Move forward carefully.',
|
||||
);
|
||||
|
||||
expect(prompt).not.toContain('A fight just ended');
|
||||
expect(prompt).not.toContain('Focus on the most useful judgment');
|
||||
expect(prompt).not.toContain('Baseline summary');
|
||||
expect(prompt).not.toContain('Move forward carefully');
|
||||
expect(prompt).not.toContain('thread-old-case');
|
||||
expect(prompt).not.toContain('Danger is still active');
|
||||
expect(prompt).toContain('战后缓气');
|
||||
expect(prompt).toContain('紧绷');
|
||||
expect(prompt).toContain('这一轮的局势已经出现了新的变化。');
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user