Merge pull request 'feat: 階段 4 工具二:助理技能' (#12) from issue-5 into main

Reviewed-on: https://gitea.jsc.idv.tw/jiantw83/jsc-anima/pulls/12
This commit was merged in pull request #12.
This commit is contained in:
2026-10-15 06:31:48 +00:00
7 changed files with 366 additions and 0 deletions
+14
View File
@@ -11,6 +11,7 @@ import type { Effort, ModelName, Route } from './router'
import { REWRITE_SYSTEM, needsSonnet, protect, restore, withPrefix } from './rewrite'
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'
@@ -85,6 +86,7 @@ export const register: Register = (on, options) => {
const isEnabled = flag('enabled', true)
let active: string | undefined
let toolRegistered = false
let route: Route | undefined
let prefixed = false
const holder: { sys?: Sys } = {}
@@ -116,6 +118,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)
})
@@ -128,6 +134,9 @@ 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 }
}
if (e.command === AFFINITY_COMMAND) {
const c = findCharacter(active)
if (!c) return { text: '請先啟動角色。' }
@@ -147,6 +156,11 @@ export const register: Register = (on, options) => {
active = c.slug
route = undefined
await $.store.set(ACTIVE_KEY, c.slug)
// 工具二到四只在啟動角色後才註冊。
if (!toolRegistered) {
toolRegistered = true
await registerTools($)
}
return { text: `已啟動:${c.name}(${c.work})。用 /jsc-anima:${OFF_COMMAND} 離開。` }
})