feat: 階段 4 工具二(助理技能產生、驗證實跑、技能 README 與版本號、PR)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-15 06:15:13 +00:00
co-authored by Claude Sonnet 5.5
parent c890059a50
commit 8f2138f77a
7 changed files with 366 additions and 0 deletions
+14
View File
@@ -4,6 +4,7 @@ import { CHARACTERS, applyOverrides, findCharacter, personaSection } from './cha
import type { Axes } from './characters'
import { layout, meter, parseFields, remainColor, SEPARATOR, usedColor } from './statusline'
import type { Segment } from './statusline'
import { NEED_ACTIVE, TOOL_COMMAND, registerTools, runSkillTool } from './skilltool'
const ACTIVE_KEY = 'active'
const OFF_COMMAND = 'anima-off'
@@ -62,6 +63,7 @@ export const register: Register = (on, options) => {
const isEnabled = flag('enabled', true)
let active: string | undefined
let toolRegistered = false
const holder: { sys?: Sys } = {}
const overrides = (): Partial<Axes> => {
@@ -81,6 +83,10 @@ export const register: Register = (on, options) => {
await $.command.register({ name: OFF_COMMAND, description: '離開角色,回到一般的 Claude Code' })
const saved = await $.store.get(ACTIVE_KEY)
active = flag('persist', true) && typeof saved === 'string' && findCharacter(saved) ? saved : undefined
if (active && !toolRegistered) {
toolRegistered = true
await registerTools($)
}
}
return next(e)
})
@@ -92,10 +98,18 @@ export const register: Register = (on, options) => {
await $.store.delete(ACTIVE_KEY)
return { text: '已離開角色,回到一般模式。' }
}
if (e.command === TOOL_COMMAND) {
return { text: findCharacter(active) ? await runSkillTool($, e.args) : NEED_ACTIVE }
}
const c = findCharacter(e.command)
if (!c) return next(e)
active = c.slug
await $.store.set(ACTIVE_KEY, c.slug)
// 工具二到四只在啟動角色後才註冊。
if (!toolRegistered) {
toolRegistered = true
await registerTools($)
}
return { text: `已啟動:${c.name}(${c.work})。用 /jsc-anima:${OFF_COMMAND} 離開。` }
})