2026-05-29 09:44:03 +08:00
|
|
|
import {
|
|
|
|
|
activateAgentAsset,
|
|
|
|
|
createAgentAssetVersion,
|
|
|
|
|
restoreAgentAssetVersion,
|
|
|
|
|
updateAgentAsset
|
|
|
|
|
} from '../../services/agentAssets.js'
|
|
|
|
|
import {
|
|
|
|
|
buildRuleConfigPayload,
|
|
|
|
|
incrementVersion
|
|
|
|
|
} from './auditViewRuntimeModel.js'
|
|
|
|
|
import {
|
|
|
|
|
buildMarkdownVersionContent,
|
|
|
|
|
normalizeText,
|
|
|
|
|
parseRuntimeRuleText
|
|
|
|
|
} from './auditViewModel.js'
|
|
|
|
|
|
|
|
|
|
export function useAuditRuleVersionActions({
|
|
|
|
|
selectedSkill,
|
|
|
|
|
selectedSkillIsRule,
|
|
|
|
|
canEditMarkdown,
|
|
|
|
|
canManageSelected,
|
|
|
|
|
actionState,
|
|
|
|
|
detailBusy,
|
|
|
|
|
refreshCurrentAssets,
|
|
|
|
|
loadSelectedAssetDetail,
|
|
|
|
|
resolveActor,
|
|
|
|
|
toast
|
|
|
|
|
}) {
|
|
|
|
|
async function persistRuleRuntimeConfig(asset, runtimeRule) {
|
|
|
|
|
await updateAgentAsset(
|
|
|
|
|
asset.id,
|
|
|
|
|
{
|
|
|
|
|
config_json: buildRuleConfigPayload(asset, runtimeRule)
|
|
|
|
|
},
|
|
|
|
|
{ actor: resolveActor() }
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async function saveRuleVersion({ action, changeNote, successLabel }) {
|
|
|
|
|
if (
|
|
|
|
|
!selectedSkill.value ||
|
|
|
|
|
!selectedSkillIsRule.value ||
|
|
|
|
|
selectedSkill.value.usesSpreadsheetRule ||
|
|
|
|
|
!canEditMarkdown.value ||
|
|
|
|
|
detailBusy.value
|
|
|
|
|
) {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!normalizeText(selectedSkill.value.markdownContent)) {
|
|
|
|
|
toast('规则 Markdown 内容不能为空。')
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const runtimeRule = parseRuntimeRuleText(selectedSkill.value.runtimeRuleText)
|
|
|
|
|
if (!runtimeRule) {
|
|
|
|
|
toast('运行时 JSON 必须是合法的对象。')
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const nextVersion = incrementVersion(selectedSkill.value.currentVersion)
|
|
|
|
|
actionState.value = action
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
await createAgentAssetVersion(
|
|
|
|
|
selectedSkill.value.id,
|
|
|
|
|
{
|
|
|
|
|
version: nextVersion,
|
|
|
|
|
content: buildMarkdownVersionContent(selectedSkill.value.markdownContent, runtimeRule),
|
|
|
|
|
content_type: 'markdown',
|
|
|
|
|
change_note: changeNote,
|
|
|
|
|
created_by: resolveActor()
|
|
|
|
|
},
|
|
|
|
|
{ actor: resolveActor() }
|
|
|
|
|
)
|
|
|
|
|
await persistRuleRuntimeConfig(selectedSkill.value, runtimeRule)
|
|
|
|
|
await refreshCurrentAssets()
|
2026-06-01 17:07:14 +08:00
|
|
|
await loadSelectedAssetDetail(selectedSkill.value.id, { silent: true })
|
2026-05-29 09:44:03 +08:00
|
|
|
toast(`${successLabel} ${nextVersion}。`)
|
|
|
|
|
} catch (error) {
|
|
|
|
|
toast(error?.message || `${successLabel}失败,请稍后重试。`)
|
|
|
|
|
} finally {
|
|
|
|
|
actionState.value = ''
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async function saveRuleMarkdown() {
|
|
|
|
|
await saveRuleVersion({
|
|
|
|
|
action: 'save-markdown',
|
|
|
|
|
changeNote: '通过规则中心保存 Markdown 规则内容,并同步运行时 JSON。',
|
|
|
|
|
successLabel: '规则 Markdown 已保存为'
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async function saveRuleRuntimeJson() {
|
|
|
|
|
await saveRuleVersion({
|
|
|
|
|
action: 'save-runtime-json',
|
|
|
|
|
changeNote: '通过规则中心保存运行时 JSON 配置。',
|
|
|
|
|
successLabel: '规则 JSON 已保存为'
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async function activateSelectedRule() {
|
|
|
|
|
if (!selectedSkill.value || !selectedSkillIsRule.value || !canManageSelected.value || detailBusy.value) {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
actionState.value = 'activate'
|
|
|
|
|
try {
|
|
|
|
|
await activateAgentAsset(selectedSkill.value.id, { actor: resolveActor() })
|
|
|
|
|
await refreshCurrentAssets()
|
2026-06-01 17:07:14 +08:00
|
|
|
await loadSelectedAssetDetail(selectedSkill.value.id, { silent: true })
|
2026-05-29 09:44:03 +08:00
|
|
|
toast('规则已正式上线。')
|
|
|
|
|
} catch (error) {
|
|
|
|
|
toast(error?.message || '规则上线失败,请稍后重试。')
|
|
|
|
|
} finally {
|
|
|
|
|
actionState.value = ''
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async function restoreSelectedVersion(version) {
|
|
|
|
|
if (
|
|
|
|
|
!selectedSkill.value ||
|
|
|
|
|
!selectedSkillIsRule.value ||
|
|
|
|
|
!canManageSelected.value ||
|
|
|
|
|
detailBusy.value ||
|
|
|
|
|
!version
|
|
|
|
|
) {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
actionState.value = `restore-${version}`
|
|
|
|
|
try {
|
|
|
|
|
await restoreAgentAssetVersion(selectedSkill.value.id, version, { actor: resolveActor() })
|
|
|
|
|
await refreshCurrentAssets()
|
2026-06-01 17:07:14 +08:00
|
|
|
await loadSelectedAssetDetail(selectedSkill.value.id, { silent: true })
|
2026-05-29 09:44:03 +08:00
|
|
|
toast(`已基于 ${version} 生成新的工作版本。`)
|
|
|
|
|
} catch (error) {
|
|
|
|
|
toast(error?.message || '历史版本恢复失败,请稍后重试。')
|
|
|
|
|
} finally {
|
|
|
|
|
actionState.value = ''
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
saveRuleMarkdown,
|
|
|
|
|
saveRuleRuntimeJson,
|
|
|
|
|
activateSelectedRule,
|
|
|
|
|
restoreSelectedVersion
|
|
|
|
|
}
|
|
|
|
|
}
|