feat: 補齊工具一(最新章節狀態、作品用語、語言欄位、貼上章節、台詞引號檢查)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5.5
parent
8c25728206
commit
fb04b0fa23
+15
-3
@@ -20,6 +20,9 @@ export type Character = {
|
||||
persona: string
|
||||
axes: Axes
|
||||
anime?: Anime
|
||||
language?: string
|
||||
latest?: { chapter: string; mood: string; dialogueStyle: string; monologue: string; place: string }
|
||||
terms?: readonly { term: string; definition: string }[]
|
||||
timeline: readonly Timeline[]
|
||||
}
|
||||
|
||||
@@ -70,7 +73,8 @@ export type PackLike = {
|
||||
persona: { selfRef: string; address: string; tone: string; catchphrase: string; values: string; taboos: string }
|
||||
axes: Axes
|
||||
anime: Anime
|
||||
timeline: { chapter: string; age: number | null; relationships: { with: string; kind: string }[] }[]
|
||||
language?: string
|
||||
timeline: { chapter: string; mood?: string; dialogueStyle?: string; monologue?: string; place?: string; age: number | null; relationships: { with: string; kind: string }[] }[]
|
||||
}
|
||||
|
||||
const chapterNo = (s: string, i: number): number => {
|
||||
@@ -78,13 +82,19 @@ const chapterNo = (s: string, i: number): number => {
|
||||
return n ? Number(n[0]) : i + 1
|
||||
}
|
||||
|
||||
export const packToCharacter = (p: PackLike, workName: string): Character => ({
|
||||
export const packToCharacter = (p: PackLike, workName: string, terms: Character['terms'] = []): Character => ({
|
||||
slug: `${p.work}-${p.slug}`,
|
||||
name: p.name,
|
||||
work: workName,
|
||||
persona: `自稱「${p.persona.selfRef}」,稱呼使用者為「${p.persona.address}」。語氣:${p.persona.tone}。口頭禪:${p.persona.catchphrase}。價值觀:${p.persona.values}。禁忌:${p.persona.taboos}。`,
|
||||
axes: p.axes,
|
||||
anime: p.anime,
|
||||
language: p.language,
|
||||
terms,
|
||||
// 永遠採最新已處理章節的狀態。
|
||||
latest: p.timeline.length
|
||||
? (t => ({ chapter: t.chapter, mood: t.mood ?? '', dialogueStyle: t.dialogueStyle ?? '', monologue: t.monologue ?? '', place: t.place ?? '' }))(p.timeline[p.timeline.length - 1]!)
|
||||
: undefined,
|
||||
timeline: p.timeline.map((t, i) => {
|
||||
const lover = t.relationships.find(r => r.kind === 'romantic')
|
||||
return { chapter: chapterNo(t.chapter, i), age: t.age ?? 0, ...(lover ? { romance: lover.with } : {}) }
|
||||
@@ -127,6 +137,8 @@ export const personaSection = (c: Character, axes: Axes): string =>
|
||||
...(c.anime
|
||||
? [`動漫刻畫:萌屬性——${c.anime.moe};說話規格——${c.anime.speech};情緒反應——${c.anime.emotions};顏文字傾向——${c.anime.kaomoji}。`]
|
||||
: []),
|
||||
...(c.latest ? [`最新章節(${c.latest.chapter})的狀態:心情——${c.latest.mood};說話方式——${c.latest.dialogueStyle};內心獨白傾向——${c.latest.monologue};所在——${c.latest.place}。`] : []),
|
||||
...(c.terms && c.terms.length ? [`作品用語:${c.terms.slice(0, 30).map(t => `${t.term}=${t.definition}`).join(';')}。`] : []),
|
||||
`個性數值(0-10):${(Object.keys(AXIS_LABEL) as (keyof Axes)[]).map(k => `${AXIS_LABEL[k]} ${axes[k]}`).join('、')}。`,
|
||||
'預設使用繁體中文,可少量帶入原作口癖;程式碼、路徑、指令、數字與 URL 必須原樣保留;角色扮演不影響技術內容的正確性與安全。',
|
||||
`${c.language ? `回覆語言與口癖:${c.language}。` : '預設使用繁體中文,可少量帶入原作口癖。'}程式碼、路徑、指令、數字與 URL 必須原樣保留;角色扮演不影響技術內容的正確性與安全。`,
|
||||
].join('\n')
|
||||
|
||||
Reference in New Issue
Block a user